MCPcopy Create free account
hub / github.com/FastLED/FastLED / benchmark_sincos32_simd

Function benchmark_sincos32_simd

tests/profile/sincos32_compare.cpp:54–87  ·  view source on GitHub ↗

Benchmark SIMD sincos32_simd (4 angles per call)

Source from the content-addressed store, hash-verified

52
53// Benchmark SIMD sincos32_simd (4 angles per call)
54__attribute__((noinline))
55void benchmark_sincos32_simd(int calls) {
56 // Pre-generate test angle sets (16 different sets)
57 FL_ALIGNAS(16) u32 angle_sets[16][4];
58 for (int set = 0; set < 16; set++) {
59 angle_sets[set][0] = set * 1048576;
60 angle_sets[set][1] = set * 1048576 + 4194304;
61 angle_sets[set][2] = set * 1048576 + 8388608;
62 angle_sets[set][3] = set * 1048576 + 12582912;
63 }
64
65 i32 local_accumulator = 0;
66
67 for (int i = 0; i < calls; i++) {
68 int set_idx = (i + g_angle_offset) & 15;
69
70 asm volatile("" : : : "memory");
71 simd::simd_u32x4 angles = simd::load_u32_4(angle_sets[set_idx]);
72
73 SinCos32_simd result = sincos32_simd(angles);
74
75 FL_ALIGNAS(16) u32 sin_vals[4];
76 FL_ALIGNAS(16) u32 cos_vals[4];
77 simd::store_u32_4(sin_vals, result.sin_vals);
78 simd::store_u32_4(cos_vals, result.cos_vals);
79
80 local_accumulator ^= static_cast<i32>(sin_vals[0]);
81 local_accumulator ^= static_cast<i32>(cos_vals[0]);
82
83 asm volatile("" : "+r"(local_accumulator) : : "memory");
84 }
85
86 g_accumulator = local_accumulator;
87}
88
89int main(int argc, char *argv[]) {
90 bool json_output = (argc > 1 && fl::strcmp(argv[1], "baseline") == 0);

Callers 1

mainFunction · 0.70

Calls 1

FL_ALIGNASClass · 0.50

Tested by

no test coverage detected