Mercurial > vec
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 |
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 } |