annotate test/test_benchmark_vec.c @ 45:7955bed1d169 default tip

*: add preliminary floating point support no x86 intrinsics just yet, but I did add altivec since it's (arguably) the simplest :)
author Paper <paper@tflc.us>
date Wed, 30 Apr 2025 18:36:38 -0400
parents c6e0df09b86f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
37
4b5a557aa64f *: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff changeset
1 #include "vec/vec.h"
4b5a557aa64f *: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff changeset
2
45
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
3 #define DEFINE_MINMAX_BENCHMARK(TYPE,CTYPE,BITS,SIZE,MAX,MIN) \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
4 extern void test_benchmark_sample_minmax_##TYPE##BITS##x##SIZE##_impl(vec_##TYPE##BITS *smpl, \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
5 uint32_t length, vec_##TYPE##BITS *pmin, vec_##TYPE##BITS *pmax) \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
6 { \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
7 vec_##TYPE##BITS smin = MAX, smax = MIN; \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
8 uint32_t len32; \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
9 int i; \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
10 v##TYPE##BITS##x##SIZE min = v##TYPE##BITS##x##SIZE##_splat(*pmin); \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
11 v##TYPE##BITS##x##SIZE max = v##TYPE##BITS##x##SIZE##_splat(*pmax); \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
12 V##CTYPE##BITS##x##SIZE##_ALIGNED_ARRAY(mins); \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
13 V##CTYPE##BITS##x##SIZE##_ALIGNED_ARRAY(maxs); \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
14 \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
15 len32 = length / SIZE; \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
16 while (len32--) { \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
17 v##TYPE##BITS##x##SIZE vec = v##TYPE##BITS##x##SIZE##_load_aligned(smpl); \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
18 \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
19 min = v##TYPE##BITS##x##SIZE##_min(vec, min); \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
20 max = v##TYPE##BITS##x##SIZE##_max(vec, max); \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
21 \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
22 smpl += SIZE; \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
23 } \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
24 \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
25 v##TYPE##BITS##x##SIZE##_store_aligned(min, mins); \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
26 v##TYPE##BITS##x##SIZE##_store_aligned(max, maxs); \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
27 \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
28 /* get the lowest minimum of what we have left */ \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
29 for (i = 0; i < SIZE; i++) { \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
30 if (mins[i] < smin) smin = mins[i]; \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
31 if (maxs[i] > smax) smax = maxs[i]; \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
32 } \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
33 \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
34 len32 = length % SIZE; \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
35 while (len32--) { \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
36 if (*smpl < smin) smin = *smpl; \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
37 if (*smpl > smax) smax = *smpl; \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
38 \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
39 smpl++; \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
40 } \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
41 \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
42 *pmin = smin; \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
43 *pmax = smax; \
37
4b5a557aa64f *: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff changeset
44 }
4b5a557aa64f *: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff changeset
45
45
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
46 DEFINE_MINMAX_BENCHMARK(int,INT,8,2,INT8_MAX,INT8_MIN)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
47 DEFINE_MINMAX_BENCHMARK(int,INT,8,4,INT8_MAX,INT8_MIN)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
48 DEFINE_MINMAX_BENCHMARK(int,INT,8,8,INT8_MAX,INT8_MIN)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
49 DEFINE_MINMAX_BENCHMARK(int,INT,8,16,INT8_MAX,INT8_MIN)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
50 DEFINE_MINMAX_BENCHMARK(int,INT,8,32,INT8_MAX,INT8_MIN)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
51 DEFINE_MINMAX_BENCHMARK(int,INT,8,64,INT8_MAX,INT8_MIN)
37
4b5a557aa64f *: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff changeset
52
45
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
53 DEFINE_MINMAX_BENCHMARK(int,INT,16,2,INT16_MAX,INT16_MIN)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
54 DEFINE_MINMAX_BENCHMARK(int,INT,16,4,INT16_MAX,INT16_MIN)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
55 DEFINE_MINMAX_BENCHMARK(int,INT,16,8,INT16_MAX,INT16_MIN)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
56 DEFINE_MINMAX_BENCHMARK(int,INT,16,16,INT16_MAX,INT16_MIN)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
57 DEFINE_MINMAX_BENCHMARK(int,INT,16,32,INT16_MAX,INT16_MIN)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
58
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
59 DEFINE_MINMAX_BENCHMARK(int,INT,32,2,INT32_MAX,INT32_MIN)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
60 DEFINE_MINMAX_BENCHMARK(int,INT,32,4,INT32_MAX,INT32_MIN)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
61 DEFINE_MINMAX_BENCHMARK(int,INT,32,8,INT32_MAX,INT32_MIN)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
62 DEFINE_MINMAX_BENCHMARK(int,INT,32,16,INT32_MAX,INT32_MIN)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
63
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
64 DEFINE_MINMAX_BENCHMARK(int,INT,64,2,INT64_MAX,INT64_MIN)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
65 DEFINE_MINMAX_BENCHMARK(int,INT,64,4,INT64_MAX,INT64_MIN)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
66 DEFINE_MINMAX_BENCHMARK(int,INT,64,8,INT64_MAX,INT64_MIN)
37
4b5a557aa64f *: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff changeset
67
45
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
68 DEFINE_MINMAX_BENCHMARK(uint,UINT,8,2,UINT8_MAX,0)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
69 DEFINE_MINMAX_BENCHMARK(uint,UINT,8,4,UINT8_MAX,0)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
70 DEFINE_MINMAX_BENCHMARK(uint,UINT,8,8,UINT8_MAX,0)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
71 DEFINE_MINMAX_BENCHMARK(uint,UINT,8,16,UINT8_MAX,0)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
72 DEFINE_MINMAX_BENCHMARK(uint,UINT,8,32,UINT8_MAX,0)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
73 DEFINE_MINMAX_BENCHMARK(uint,UINT,8,64,UINT8_MAX,0)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
74
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
75 DEFINE_MINMAX_BENCHMARK(uint,UINT,16,2,UINT16_MAX,0)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
76 DEFINE_MINMAX_BENCHMARK(uint,UINT,16,4,UINT16_MAX,0)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
77 DEFINE_MINMAX_BENCHMARK(uint,UINT,16,8,UINT16_MAX,0)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
78 DEFINE_MINMAX_BENCHMARK(uint,UINT,16,16,UINT16_MAX,0)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
79 DEFINE_MINMAX_BENCHMARK(uint,UINT,16,32,UINT16_MAX,0)
37
4b5a557aa64f *: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff changeset
80
45
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
81 DEFINE_MINMAX_BENCHMARK(uint,UINT,32,2,UINT32_MAX,0)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
82 DEFINE_MINMAX_BENCHMARK(uint,UINT,32,4,UINT32_MAX,0)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
83 DEFINE_MINMAX_BENCHMARK(uint,UINT,32,8,UINT32_MAX,0)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
84 DEFINE_MINMAX_BENCHMARK(uint,UINT,32,16,UINT32_MAX,0)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
85
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
86 DEFINE_MINMAX_BENCHMARK(uint,UINT,64,2,UINT64_MAX,0)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
87 DEFINE_MINMAX_BENCHMARK(uint,UINT,64,4,UINT64_MAX,0)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
88 DEFINE_MINMAX_BENCHMARK(uint,UINT,64,8,UINT64_MAX,0)
37
4b5a557aa64f *: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff changeset
89
45
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
90 DEFINE_MINMAX_BENCHMARK(f,F,32,2,1.0f,-1.0f)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
91 DEFINE_MINMAX_BENCHMARK(f,F,32,4,1.0f,-1.0f)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
92 DEFINE_MINMAX_BENCHMARK(f,F,32,8,1.0f,-1.0f)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
93 DEFINE_MINMAX_BENCHMARK(f,F,32,16,1.0f,-1.0f)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
94
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
95 DEFINE_MINMAX_BENCHMARK(f,F,64,2,1.0,-1.0)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
96 DEFINE_MINMAX_BENCHMARK(f,F,64,4,1.0,-1.0)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
97 DEFINE_MINMAX_BENCHMARK(f,F,64,8,1.0,-1.0)