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