annotate test/test_benchmark.h @ 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
4b5a557aa64f *: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff changeset
2 /* ------------------------------------------------------------------------ */
4b5a557aa64f *: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff changeset
3 /* simple benchmark for getting the min/max range of an audio sample. */
4b5a557aa64f *: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff changeset
4
45
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
5 extern void test_benchmark_sample_minmax_int8x2_impl(vec_int8 *smpl, uint32_t length, vec_int8 *pmin, vec_int8 *pmax);
37
4b5a557aa64f *: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff changeset
6
4b5a557aa64f *: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff changeset
7 VEC_FUNC_IMPL void test_benchmark_sample_minmax(void)
4b5a557aa64f *: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff changeset
8 {
4b5a557aa64f *: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff changeset
9 int i;
45
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
10
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
11 union {
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
12 vec_int8 int8[16000001];
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
13 vec_uint8 uint8[16000001];
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
14 vec_int16 int16[16000001];
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
15 vec_uint16 uint16[16000001];
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
16 vec_int32 int32[16000001];
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
17 vec_uint32 uint32[16000001];
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
18 vec_int64 int64[16000001];
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
19 vec_uint64 uint64[16000001];
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
20 vec_f32 f32[16000001];
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
21 vec_f64 f64[16000001];
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
22 } *q;
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 q = vec_malloc(sizeof(*q));
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
25
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
26 for (i = 0; i < 16000001; i++)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
27 q->f64[i] = (double)rand() / RAND_MAX;
37
4b5a557aa64f *: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff changeset
28
45
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
29 printf("\naudio sample min/max - 1 thousand passes - 16000001 samples\n\n");
37
4b5a557aa64f *: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff changeset
30
45
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
31 #define DO_TIMER(TYPE,NAME,MIN,MAX) \
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 vec_##TYPE min, max; \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
34 clock_t start, end; \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
35 \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
36 start = clock(); \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
37 \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
38 for (i = 0; i < 1000; i++) { \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
39 extern void test_benchmark_sample_minmax_##NAME##_impl(vec_##TYPE *smpl, uint32_t length, vec_##TYPE *pmin, vec_##TYPE *pmax); \
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 min = MAX; \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
42 max = MIN; \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
43 \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
44 test_benchmark_sample_minmax_##NAME##_impl(q->TYPE, 16000001u, &min, &max); \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
45 } \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
46 \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
47 end = clock(); \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
48 \
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
49 printf("- %s: took %f secs\n", #NAME, (double)(end - start) / CLOCKS_PER_SEC); \
37
4b5a557aa64f *: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff changeset
50 }
45
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
51
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
52 DO_TIMER(int8, int8x2, INT8_MIN, INT8_MAX)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
53 DO_TIMER(int8, int8x4, INT8_MIN, INT8_MAX)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
54 DO_TIMER(int8, int8x8, INT8_MIN, INT8_MAX)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
55 DO_TIMER(int8, int8x16, INT8_MIN, INT8_MAX)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
56 DO_TIMER(int8, int8x32, INT8_MIN, INT8_MAX)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
57 DO_TIMER(int8, int8x64, INT8_MIN, INT8_MAX)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
58 DO_TIMER(int8, int8, INT8_MIN, INT8_MAX)
37
4b5a557aa64f *: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff changeset
59
45
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
60 DO_TIMER(int16, int16x2, INT16_MIN, INT16_MAX)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
61 DO_TIMER(int16, int16x4, INT16_MIN, INT16_MAX)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
62 DO_TIMER(int16, int16x8, INT16_MIN, INT16_MAX)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
63 DO_TIMER(int16, int16x16, INT16_MIN, INT16_MAX)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
64 DO_TIMER(int16, int16x32, INT16_MIN, INT16_MAX)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
65 DO_TIMER(int16, int16, INT16_MIN, INT16_MAX)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
66
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
67 DO_TIMER(int32, int32x2, INT32_MIN, INT32_MAX)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
68 DO_TIMER(int32, int32x4, INT32_MIN, INT32_MAX)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
69 DO_TIMER(int32, int32x8, INT32_MIN, INT32_MAX)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
70 DO_TIMER(int32, int32x16, INT32_MIN, INT32_MAX)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
71 DO_TIMER(int32, int32, INT32_MIN, INT32_MAX)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
72
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
73 DO_TIMER(int64, int64x2, INT64_MIN, INT64_MAX)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
74 DO_TIMER(int64, int64x4, INT64_MIN, INT64_MAX)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
75 DO_TIMER(int64, int64x8, INT64_MIN, INT64_MAX)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
76 DO_TIMER(int64, int64, INT64_MIN, INT64_MAX)
37
4b5a557aa64f *: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff changeset
77
45
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
78 DO_TIMER(uint8, uint8x2, 0, UINT8_MAX)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
79 DO_TIMER(uint8, uint8x4, 0, UINT8_MAX)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
80 DO_TIMER(uint8, uint8x8, 0, UINT8_MAX)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
81 DO_TIMER(uint8, uint8x16, 0, UINT8_MAX)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
82 DO_TIMER(uint8, uint8x32, 0, UINT8_MAX)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
83 DO_TIMER(uint8, uint8x64, 0, UINT8_MAX)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
84 DO_TIMER(uint8, uint8, 0, UINT8_MAX)
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 DO_TIMER(uint16, uint16x2, 0, UINT16_MAX)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
87 DO_TIMER(uint16, uint16x4, 0, UINT16_MAX)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
88 DO_TIMER(uint16, uint16x8, 0, UINT16_MAX)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
89 DO_TIMER(uint16, uint16x16, 0, UINT16_MAX)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
90 DO_TIMER(uint16, uint16x32, 0, UINT16_MAX)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
91 DO_TIMER(uint16, uint16, 0, UINT16_MAX)
37
4b5a557aa64f *: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff changeset
92
45
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
93 DO_TIMER(uint32, uint32x2, 0, UINT32_MAX)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
94 DO_TIMER(uint32, uint32x4, 0, UINT32_MAX)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
95 DO_TIMER(uint32, uint32x8, 0, UINT32_MAX)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
96 DO_TIMER(uint32, uint32x16, 0, UINT32_MAX)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
97 DO_TIMER(uint32, uint32, 0, UINT32_MAX)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
98
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
99 DO_TIMER(uint64, uint64x2, 0, UINT64_MAX)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
100 DO_TIMER(uint64, uint64x4, 0, UINT64_MAX)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
101 DO_TIMER(uint64, uint64x8, 0, UINT64_MAX)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
102 DO_TIMER(uint64, uint64, 0, UINT64_MAX)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
103
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
104 DO_TIMER(f32, f32x2, -1.0f, 1.0f)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
105 DO_TIMER(f32, f32x4, -1.0f, 1.0f)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
106 DO_TIMER(f32, f32x8, -1.0f, 1.0f)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
107 DO_TIMER(f32, f32x16, -1.0f, 1.0f)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
108 DO_TIMER(f32, f32, -1.0f, 1.0f)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
109
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
110 DO_TIMER(f64, f64x2, -1.0, 1.0)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
111 DO_TIMER(f64, f64x4, -1.0, 1.0)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
112 DO_TIMER(f64, f64x8, -1.0, 1.0)
7955bed1d169 *: add preliminary floating point support
Paper <paper@tflc.us>
parents: 41
diff changeset
113 DO_TIMER(f64, f64, -1.0, 1.0)
37
4b5a557aa64f *: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff changeset
114
4b5a557aa64f *: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff changeset
115 printf("\n");
4b5a557aa64f *: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff changeset
116
4b5a557aa64f *: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff changeset
117 vec_free(q);
4b5a557aa64f *: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff changeset
118 }
4b5a557aa64f *: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff changeset
119
4b5a557aa64f *: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff changeset
120 static void test_benchmark(void)
4b5a557aa64f *: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff changeset
121 {
4b5a557aa64f *: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff changeset
122 printf("------- BENCHMARK --------\n");
4b5a557aa64f *: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff changeset
123 test_benchmark_sample_minmax();
4b5a557aa64f *: turns out extern is a practical joke. rewrite to be always inline again
Paper <paper@tflc.us>
parents:
diff changeset
124 }