xref: /aosp_15_r20/external/pthreadpool/bench/throughput.cc (revision b095b0533730c2930f947df924a4486d266faa1a)
1*b095b053SXin Li #include <benchmark/benchmark.h>
2*b095b053SXin Li 
3*b095b053SXin Li #include <pthreadpool.h>
4*b095b053SXin Li 
5*b095b053SXin Li 
compute_1d(void *,size_t)6*b095b053SXin Li static void compute_1d(void*, size_t) {
7*b095b053SXin Li }
8*b095b053SXin Li 
pthreadpool_parallelize_1d(benchmark::State & state)9*b095b053SXin Li static void pthreadpool_parallelize_1d(benchmark::State& state) {
10*b095b053SXin Li 	pthreadpool_t threadpool = pthreadpool_create(2);
11*b095b053SXin Li 	const size_t threads = pthreadpool_get_threads_count(threadpool);
12*b095b053SXin Li 	const size_t items = static_cast<size_t>(state.range(0));
13*b095b053SXin Li 	while (state.KeepRunning()) {
14*b095b053SXin Li 		pthreadpool_parallelize_1d(
15*b095b053SXin Li 			threadpool,
16*b095b053SXin Li 			compute_1d,
17*b095b053SXin Li 			nullptr /* context */,
18*b095b053SXin Li 			items * threads,
19*b095b053SXin Li 			0 /* flags */);
20*b095b053SXin Li 	}
21*b095b053SXin Li 	pthreadpool_destroy(threadpool);
22*b095b053SXin Li 
23*b095b053SXin Li 	/* Do not normalize by thread */
24*b095b053SXin Li 	state.SetItemsProcessed(int64_t(state.iterations()) * items);
25*b095b053SXin Li }
26*b095b053SXin Li BENCHMARK(pthreadpool_parallelize_1d)->UseRealTime()->RangeMultiplier(10)->Range(10, 1000000);
27*b095b053SXin Li 
28*b095b053SXin Li 
compute_1d_tile_1d(void *,size_t,size_t)29*b095b053SXin Li static void compute_1d_tile_1d(void*, size_t, size_t) {
30*b095b053SXin Li }
31*b095b053SXin Li 
pthreadpool_parallelize_1d_tile_1d(benchmark::State & state)32*b095b053SXin Li static void pthreadpool_parallelize_1d_tile_1d(benchmark::State& state) {
33*b095b053SXin Li 	pthreadpool_t threadpool = pthreadpool_create(2);
34*b095b053SXin Li 	const size_t threads = pthreadpool_get_threads_count(threadpool);
35*b095b053SXin Li 	const size_t items = static_cast<size_t>(state.range(0));
36*b095b053SXin Li 	while (state.KeepRunning()) {
37*b095b053SXin Li 		pthreadpool_parallelize_1d_tile_1d(
38*b095b053SXin Li 			threadpool,
39*b095b053SXin Li 			compute_1d_tile_1d,
40*b095b053SXin Li 			nullptr /* context */,
41*b095b053SXin Li 			items * threads, 1,
42*b095b053SXin Li 			0 /* flags */);
43*b095b053SXin Li 	}
44*b095b053SXin Li 	pthreadpool_destroy(threadpool);
45*b095b053SXin Li 
46*b095b053SXin Li 	/* Do not normalize by thread */
47*b095b053SXin Li 	state.SetItemsProcessed(int64_t(state.iterations()) * items);
48*b095b053SXin Li }
49*b095b053SXin Li BENCHMARK(pthreadpool_parallelize_1d_tile_1d)->UseRealTime()->RangeMultiplier(10)->Range(10, 1000000);
50*b095b053SXin Li 
51*b095b053SXin Li 
compute_2d(void *,size_t,size_t)52*b095b053SXin Li static void compute_2d(void*, size_t, size_t) {
53*b095b053SXin Li }
54*b095b053SXin Li 
pthreadpool_parallelize_2d(benchmark::State & state)55*b095b053SXin Li static void pthreadpool_parallelize_2d(benchmark::State& state) {
56*b095b053SXin Li 	pthreadpool_t threadpool = pthreadpool_create(2);
57*b095b053SXin Li 	const size_t threads = pthreadpool_get_threads_count(threadpool);
58*b095b053SXin Li 	const size_t items = static_cast<size_t>(state.range(0));
59*b095b053SXin Li 	while (state.KeepRunning()) {
60*b095b053SXin Li 		pthreadpool_parallelize_2d(
61*b095b053SXin Li 			threadpool,
62*b095b053SXin Li 			compute_2d,
63*b095b053SXin Li 			nullptr /* context */,
64*b095b053SXin Li 			threads, items,
65*b095b053SXin Li 			0 /* flags */);
66*b095b053SXin Li 	}
67*b095b053SXin Li 	pthreadpool_destroy(threadpool);
68*b095b053SXin Li 
69*b095b053SXin Li 	/* Do not normalize by thread */
70*b095b053SXin Li 	state.SetItemsProcessed(int64_t(state.iterations()) * items);
71*b095b053SXin Li }
72*b095b053SXin Li BENCHMARK(pthreadpool_parallelize_2d)->UseRealTime()->RangeMultiplier(10)->Range(10, 1000000);
73*b095b053SXin Li 
74*b095b053SXin Li 
compute_2d_tile_1d(void *,size_t,size_t,size_t)75*b095b053SXin Li static void compute_2d_tile_1d(void*, size_t, size_t, size_t) {
76*b095b053SXin Li }
77*b095b053SXin Li 
pthreadpool_parallelize_2d_tile_1d(benchmark::State & state)78*b095b053SXin Li static void pthreadpool_parallelize_2d_tile_1d(benchmark::State& state) {
79*b095b053SXin Li 	pthreadpool_t threadpool = pthreadpool_create(2);
80*b095b053SXin Li 	const size_t threads = pthreadpool_get_threads_count(threadpool);
81*b095b053SXin Li 	const size_t items = static_cast<size_t>(state.range(0));
82*b095b053SXin Li 	while (state.KeepRunning()) {
83*b095b053SXin Li 		pthreadpool_parallelize_2d_tile_1d(
84*b095b053SXin Li 			threadpool,
85*b095b053SXin Li 			compute_2d_tile_1d,
86*b095b053SXin Li 			nullptr /* context */,
87*b095b053SXin Li 			threads, items,
88*b095b053SXin Li 			1,
89*b095b053SXin Li 			0 /* flags */);
90*b095b053SXin Li 	}
91*b095b053SXin Li 	pthreadpool_destroy(threadpool);
92*b095b053SXin Li 
93*b095b053SXin Li 	/* Do not normalize by thread */
94*b095b053SXin Li 	state.SetItemsProcessed(int64_t(state.iterations()) * items);
95*b095b053SXin Li }
96*b095b053SXin Li BENCHMARK(pthreadpool_parallelize_2d_tile_1d)->UseRealTime()->RangeMultiplier(10)->Range(10, 1000000);
97*b095b053SXin Li 
98*b095b053SXin Li 
compute_2d_tile_2d(void *,size_t,size_t,size_t,size_t)99*b095b053SXin Li static void compute_2d_tile_2d(void*, size_t, size_t, size_t, size_t) {
100*b095b053SXin Li }
101*b095b053SXin Li 
pthreadpool_parallelize_2d_tile_2d(benchmark::State & state)102*b095b053SXin Li static void pthreadpool_parallelize_2d_tile_2d(benchmark::State& state) {
103*b095b053SXin Li 	pthreadpool_t threadpool = pthreadpool_create(2);
104*b095b053SXin Li 	const size_t threads = pthreadpool_get_threads_count(threadpool);
105*b095b053SXin Li 	const size_t items = static_cast<size_t>(state.range(0));
106*b095b053SXin Li 	while (state.KeepRunning()) {
107*b095b053SXin Li 		pthreadpool_parallelize_2d_tile_2d(
108*b095b053SXin Li 			threadpool,
109*b095b053SXin Li 			compute_2d_tile_2d,
110*b095b053SXin Li 			nullptr /* context */,
111*b095b053SXin Li 			threads, items,
112*b095b053SXin Li 			1, 1,
113*b095b053SXin Li 			0 /* flags */);
114*b095b053SXin Li 	}
115*b095b053SXin Li 	pthreadpool_destroy(threadpool);
116*b095b053SXin Li 
117*b095b053SXin Li 	/* Do not normalize by thread */
118*b095b053SXin Li 	state.SetItemsProcessed(int64_t(state.iterations()) * items);
119*b095b053SXin Li }
120*b095b053SXin Li BENCHMARK(pthreadpool_parallelize_2d_tile_2d)->UseRealTime()->RangeMultiplier(10)->Range(10, 1000000);
121*b095b053SXin Li 
122*b095b053SXin Li 
compute_3d(void *,size_t,size_t,size_t)123*b095b053SXin Li static void compute_3d(void*, size_t, size_t, size_t) {
124*b095b053SXin Li }
125*b095b053SXin Li 
pthreadpool_parallelize_3d(benchmark::State & state)126*b095b053SXin Li static void pthreadpool_parallelize_3d(benchmark::State& state) {
127*b095b053SXin Li 	pthreadpool_t threadpool = pthreadpool_create(2);
128*b095b053SXin Li 	const size_t threads = pthreadpool_get_threads_count(threadpool);
129*b095b053SXin Li 	const size_t items = static_cast<size_t>(state.range(0));
130*b095b053SXin Li 	while (state.KeepRunning()) {
131*b095b053SXin Li 		pthreadpool_parallelize_3d(
132*b095b053SXin Li 			threadpool,
133*b095b053SXin Li 			compute_3d,
134*b095b053SXin Li 			nullptr /* context */,
135*b095b053SXin Li 			1, threads, items,
136*b095b053SXin Li 			0 /* flags */);
137*b095b053SXin Li 	}
138*b095b053SXin Li 	pthreadpool_destroy(threadpool);
139*b095b053SXin Li 
140*b095b053SXin Li 	/* Do not normalize by thread */
141*b095b053SXin Li 	state.SetItemsProcessed(int64_t(state.iterations()) * items);
142*b095b053SXin Li }
143*b095b053SXin Li BENCHMARK(pthreadpool_parallelize_3d)->UseRealTime()->RangeMultiplier(10)->Range(10, 1000000);
144*b095b053SXin Li 
145*b095b053SXin Li 
compute_3d_tile_1d(void *,size_t,size_t,size_t,size_t)146*b095b053SXin Li static void compute_3d_tile_1d(void*, size_t, size_t, size_t, size_t) {
147*b095b053SXin Li }
148*b095b053SXin Li 
pthreadpool_parallelize_3d_tile_1d(benchmark::State & state)149*b095b053SXin Li static void pthreadpool_parallelize_3d_tile_1d(benchmark::State& state) {
150*b095b053SXin Li 	pthreadpool_t threadpool = pthreadpool_create(2);
151*b095b053SXin Li 	const size_t threads = pthreadpool_get_threads_count(threadpool);
152*b095b053SXin Li 	const size_t items = static_cast<size_t>(state.range(0));
153*b095b053SXin Li 	while (state.KeepRunning()) {
154*b095b053SXin Li 		pthreadpool_parallelize_3d_tile_1d(
155*b095b053SXin Li 			threadpool,
156*b095b053SXin Li 			compute_3d_tile_1d,
157*b095b053SXin Li 			nullptr /* context */,
158*b095b053SXin Li 			1, threads, items,
159*b095b053SXin Li 			1,
160*b095b053SXin Li 			0 /* flags */);
161*b095b053SXin Li 	}
162*b095b053SXin Li 	pthreadpool_destroy(threadpool);
163*b095b053SXin Li 
164*b095b053SXin Li 	/* Do not normalize by thread */
165*b095b053SXin Li 	state.SetItemsProcessed(int64_t(state.iterations()) * items);
166*b095b053SXin Li }
167*b095b053SXin Li BENCHMARK(pthreadpool_parallelize_3d_tile_1d)->UseRealTime()->RangeMultiplier(10)->Range(10, 1000000);
168*b095b053SXin Li 
169*b095b053SXin Li 
compute_3d_tile_2d(void *,size_t,size_t,size_t,size_t,size_t)170*b095b053SXin Li static void compute_3d_tile_2d(void*, size_t, size_t, size_t, size_t, size_t) {
171*b095b053SXin Li }
172*b095b053SXin Li 
pthreadpool_parallelize_3d_tile_2d(benchmark::State & state)173*b095b053SXin Li static void pthreadpool_parallelize_3d_tile_2d(benchmark::State& state) {
174*b095b053SXin Li 	pthreadpool_t threadpool = pthreadpool_create(2);
175*b095b053SXin Li 	const size_t threads = pthreadpool_get_threads_count(threadpool);
176*b095b053SXin Li 	const size_t items = static_cast<size_t>(state.range(0));
177*b095b053SXin Li 	while (state.KeepRunning()) {
178*b095b053SXin Li 		pthreadpool_parallelize_3d_tile_2d(
179*b095b053SXin Li 			threadpool,
180*b095b053SXin Li 			compute_3d_tile_2d,
181*b095b053SXin Li 			nullptr /* context */,
182*b095b053SXin Li 			1, threads, items,
183*b095b053SXin Li 			1, 1,
184*b095b053SXin Li 			0 /* flags */);
185*b095b053SXin Li 	}
186*b095b053SXin Li 	pthreadpool_destroy(threadpool);
187*b095b053SXin Li 
188*b095b053SXin Li 	/* Do not normalize by thread */
189*b095b053SXin Li 	state.SetItemsProcessed(int64_t(state.iterations()) * items);
190*b095b053SXin Li }
191*b095b053SXin Li BENCHMARK(pthreadpool_parallelize_3d_tile_2d)->UseRealTime()->RangeMultiplier(10)->Range(10, 1000000);
192*b095b053SXin Li 
193*b095b053SXin Li 
compute_4d(void *,size_t,size_t,size_t,size_t)194*b095b053SXin Li static void compute_4d(void*, size_t, size_t, size_t, size_t) {
195*b095b053SXin Li }
196*b095b053SXin Li 
pthreadpool_parallelize_4d(benchmark::State & state)197*b095b053SXin Li static void pthreadpool_parallelize_4d(benchmark::State& state) {
198*b095b053SXin Li 	pthreadpool_t threadpool = pthreadpool_create(2);
199*b095b053SXin Li 	const size_t threads = pthreadpool_get_threads_count(threadpool);
200*b095b053SXin Li 	const size_t items = static_cast<size_t>(state.range(0));
201*b095b053SXin Li 	while (state.KeepRunning()) {
202*b095b053SXin Li 		pthreadpool_parallelize_4d(
203*b095b053SXin Li 			threadpool,
204*b095b053SXin Li 			compute_4d,
205*b095b053SXin Li 			nullptr /* context */,
206*b095b053SXin Li 			1, 1, threads, items,
207*b095b053SXin Li 			0 /* flags */);
208*b095b053SXin Li 	}
209*b095b053SXin Li 	pthreadpool_destroy(threadpool);
210*b095b053SXin Li 
211*b095b053SXin Li 	/* Do not normalize by thread */
212*b095b053SXin Li 	state.SetItemsProcessed(int64_t(state.iterations()) * items);
213*b095b053SXin Li }
214*b095b053SXin Li BENCHMARK(pthreadpool_parallelize_4d)->UseRealTime()->RangeMultiplier(10)->Range(10, 1000000);
215*b095b053SXin Li 
216*b095b053SXin Li 
compute_4d_tile_1d(void *,size_t,size_t,size_t,size_t,size_t)217*b095b053SXin Li static void compute_4d_tile_1d(void*, size_t, size_t, size_t, size_t, size_t) {
218*b095b053SXin Li }
219*b095b053SXin Li 
pthreadpool_parallelize_4d_tile_1d(benchmark::State & state)220*b095b053SXin Li static void pthreadpool_parallelize_4d_tile_1d(benchmark::State& state) {
221*b095b053SXin Li 	pthreadpool_t threadpool = pthreadpool_create(2);
222*b095b053SXin Li 	const size_t threads = pthreadpool_get_threads_count(threadpool);
223*b095b053SXin Li 	const size_t items = static_cast<size_t>(state.range(0));
224*b095b053SXin Li 	while (state.KeepRunning()) {
225*b095b053SXin Li 		pthreadpool_parallelize_4d_tile_1d(
226*b095b053SXin Li 			threadpool,
227*b095b053SXin Li 			compute_4d_tile_1d,
228*b095b053SXin Li 			nullptr /* context */,
229*b095b053SXin Li 			1, 1, threads, items,
230*b095b053SXin Li 			1,
231*b095b053SXin Li 			0 /* flags */);
232*b095b053SXin Li 	}
233*b095b053SXin Li 	pthreadpool_destroy(threadpool);
234*b095b053SXin Li 
235*b095b053SXin Li 	/* Do not normalize by thread */
236*b095b053SXin Li 	state.SetItemsProcessed(int64_t(state.iterations()) * items);
237*b095b053SXin Li }
238*b095b053SXin Li BENCHMARK(pthreadpool_parallelize_4d_tile_1d)->UseRealTime()->RangeMultiplier(10)->Range(10, 1000000);
239*b095b053SXin Li 
240*b095b053SXin Li 
compute_4d_tile_2d(void *,size_t,size_t,size_t,size_t,size_t,size_t)241*b095b053SXin Li static void compute_4d_tile_2d(void*, size_t, size_t, size_t, size_t, size_t, size_t) {
242*b095b053SXin Li }
243*b095b053SXin Li 
pthreadpool_parallelize_4d_tile_2d(benchmark::State & state)244*b095b053SXin Li static void pthreadpool_parallelize_4d_tile_2d(benchmark::State& state) {
245*b095b053SXin Li 	pthreadpool_t threadpool = pthreadpool_create(2);
246*b095b053SXin Li 	const size_t threads = pthreadpool_get_threads_count(threadpool);
247*b095b053SXin Li 	const size_t items = static_cast<size_t>(state.range(0));
248*b095b053SXin Li 	while (state.KeepRunning()) {
249*b095b053SXin Li 		pthreadpool_parallelize_4d_tile_2d(
250*b095b053SXin Li 			threadpool,
251*b095b053SXin Li 			compute_4d_tile_2d,
252*b095b053SXin Li 			nullptr /* context */,
253*b095b053SXin Li 			1, 1, threads, items,
254*b095b053SXin Li 			1, 1,
255*b095b053SXin Li 			0 /* flags */);
256*b095b053SXin Li 	}
257*b095b053SXin Li 	pthreadpool_destroy(threadpool);
258*b095b053SXin Li 
259*b095b053SXin Li 	/* Do not normalize by thread */
260*b095b053SXin Li 	state.SetItemsProcessed(int64_t(state.iterations()) * items);
261*b095b053SXin Li }
262*b095b053SXin Li BENCHMARK(pthreadpool_parallelize_4d_tile_2d)->UseRealTime()->RangeMultiplier(10)->Range(10, 1000000);
263*b095b053SXin Li 
264*b095b053SXin Li 
compute_5d(void *,size_t,size_t,size_t,size_t,size_t)265*b095b053SXin Li static void compute_5d(void*, size_t, size_t, size_t, size_t, size_t) {
266*b095b053SXin Li }
267*b095b053SXin Li 
pthreadpool_parallelize_5d(benchmark::State & state)268*b095b053SXin Li static void pthreadpool_parallelize_5d(benchmark::State& state) {
269*b095b053SXin Li 	pthreadpool_t threadpool = pthreadpool_create(2);
270*b095b053SXin Li 	const size_t threads = pthreadpool_get_threads_count(threadpool);
271*b095b053SXin Li 	const size_t items = static_cast<size_t>(state.range(0));
272*b095b053SXin Li 	while (state.KeepRunning()) {
273*b095b053SXin Li 		pthreadpool_parallelize_5d(
274*b095b053SXin Li 			threadpool,
275*b095b053SXin Li 			compute_5d,
276*b095b053SXin Li 			nullptr /* context */,
277*b095b053SXin Li 			1, 1, 1, threads, items,
278*b095b053SXin Li 			0 /* flags */);
279*b095b053SXin Li 	}
280*b095b053SXin Li 	pthreadpool_destroy(threadpool);
281*b095b053SXin Li 
282*b095b053SXin Li 	/* Do not normalize by thread */
283*b095b053SXin Li 	state.SetItemsProcessed(int64_t(state.iterations()) * items);
284*b095b053SXin Li }
285*b095b053SXin Li BENCHMARK(pthreadpool_parallelize_5d)->UseRealTime()->RangeMultiplier(10)->Range(10, 1000000);
286*b095b053SXin Li 
287*b095b053SXin Li 
compute_5d_tile_1d(void *,size_t,size_t,size_t,size_t,size_t,size_t)288*b095b053SXin Li static void compute_5d_tile_1d(void*, size_t, size_t, size_t, size_t, size_t, size_t) {
289*b095b053SXin Li }
290*b095b053SXin Li 
pthreadpool_parallelize_5d_tile_1d(benchmark::State & state)291*b095b053SXin Li static void pthreadpool_parallelize_5d_tile_1d(benchmark::State& state) {
292*b095b053SXin Li 	pthreadpool_t threadpool = pthreadpool_create(2);
293*b095b053SXin Li 	const size_t threads = pthreadpool_get_threads_count(threadpool);
294*b095b053SXin Li 	const size_t items = static_cast<size_t>(state.range(0));
295*b095b053SXin Li 	while (state.KeepRunning()) {
296*b095b053SXin Li 		pthreadpool_parallelize_5d_tile_1d(
297*b095b053SXin Li 			threadpool,
298*b095b053SXin Li 			compute_5d_tile_1d,
299*b095b053SXin Li 			nullptr /* context */,
300*b095b053SXin Li 			1, 1, 1, threads, items,
301*b095b053SXin Li 			1,
302*b095b053SXin Li 			0 /* flags */);
303*b095b053SXin Li 	}
304*b095b053SXin Li 	pthreadpool_destroy(threadpool);
305*b095b053SXin Li 
306*b095b053SXin Li 	/* Do not normalize by thread */
307*b095b053SXin Li 	state.SetItemsProcessed(int64_t(state.iterations()) * items);
308*b095b053SXin Li }
309*b095b053SXin Li BENCHMARK(pthreadpool_parallelize_5d_tile_1d)->UseRealTime()->RangeMultiplier(10)->Range(10, 1000000);
310*b095b053SXin Li 
311*b095b053SXin Li 
compute_5d_tile_2d(void *,size_t,size_t,size_t,size_t,size_t,size_t,size_t)312*b095b053SXin Li static void compute_5d_tile_2d(void*, size_t, size_t, size_t, size_t, size_t, size_t, size_t) {
313*b095b053SXin Li }
314*b095b053SXin Li 
pthreadpool_parallelize_5d_tile_2d(benchmark::State & state)315*b095b053SXin Li static void pthreadpool_parallelize_5d_tile_2d(benchmark::State& state) {
316*b095b053SXin Li 	pthreadpool_t threadpool = pthreadpool_create(2);
317*b095b053SXin Li 	const size_t threads = pthreadpool_get_threads_count(threadpool);
318*b095b053SXin Li 	const size_t items = static_cast<size_t>(state.range(0));
319*b095b053SXin Li 	while (state.KeepRunning()) {
320*b095b053SXin Li 		pthreadpool_parallelize_5d_tile_2d(
321*b095b053SXin Li 			threadpool,
322*b095b053SXin Li 			compute_5d_tile_2d,
323*b095b053SXin Li 			nullptr /* context */,
324*b095b053SXin Li 			1, 1, 1, threads, items,
325*b095b053SXin Li 			1, 1,
326*b095b053SXin Li 			0 /* flags */);
327*b095b053SXin Li 	}
328*b095b053SXin Li 	pthreadpool_destroy(threadpool);
329*b095b053SXin Li 
330*b095b053SXin Li 	/* Do not normalize by thread */
331*b095b053SXin Li 	state.SetItemsProcessed(int64_t(state.iterations()) * items);
332*b095b053SXin Li }
333*b095b053SXin Li BENCHMARK(pthreadpool_parallelize_5d_tile_2d)->UseRealTime()->RangeMultiplier(10)->Range(10, 1000000);
334*b095b053SXin Li 
335*b095b053SXin Li 
compute_6d(void *,size_t,size_t,size_t,size_t,size_t,size_t)336*b095b053SXin Li static void compute_6d(void*, size_t, size_t, size_t, size_t, size_t, size_t) {
337*b095b053SXin Li }
338*b095b053SXin Li 
pthreadpool_parallelize_6d(benchmark::State & state)339*b095b053SXin Li static void pthreadpool_parallelize_6d(benchmark::State& state) {
340*b095b053SXin Li 	pthreadpool_t threadpool = pthreadpool_create(2);
341*b095b053SXin Li 	const size_t threads = pthreadpool_get_threads_count(threadpool);
342*b095b053SXin Li 	const size_t items = static_cast<size_t>(state.range(0));
343*b095b053SXin Li 	while (state.KeepRunning()) {
344*b095b053SXin Li 		pthreadpool_parallelize_6d(
345*b095b053SXin Li 			threadpool,
346*b095b053SXin Li 			compute_6d,
347*b095b053SXin Li 			nullptr /* context */,
348*b095b053SXin Li 			1, 1, 1, 1, threads, items,
349*b095b053SXin Li 			0 /* flags */);
350*b095b053SXin Li 	}
351*b095b053SXin Li 	pthreadpool_destroy(threadpool);
352*b095b053SXin Li 
353*b095b053SXin Li 	/* Do not normalize by thread */
354*b095b053SXin Li 	state.SetItemsProcessed(int64_t(state.iterations()) * items);
355*b095b053SXin Li }
356*b095b053SXin Li BENCHMARK(pthreadpool_parallelize_6d)->UseRealTime()->RangeMultiplier(10)->Range(10, 1000000);
357*b095b053SXin Li 
358*b095b053SXin Li 
compute_6d_tile_1d(void *,size_t,size_t,size_t,size_t,size_t,size_t,size_t)359*b095b053SXin Li static void compute_6d_tile_1d(void*, size_t, size_t, size_t, size_t, size_t, size_t, size_t) {
360*b095b053SXin Li }
361*b095b053SXin Li 
pthreadpool_parallelize_6d_tile_1d(benchmark::State & state)362*b095b053SXin Li static void pthreadpool_parallelize_6d_tile_1d(benchmark::State& state) {
363*b095b053SXin Li 	pthreadpool_t threadpool = pthreadpool_create(2);
364*b095b053SXin Li 	const size_t threads = pthreadpool_get_threads_count(threadpool);
365*b095b053SXin Li 	const size_t items = static_cast<size_t>(state.range(0));
366*b095b053SXin Li 	while (state.KeepRunning()) {
367*b095b053SXin Li 		pthreadpool_parallelize_6d_tile_1d(
368*b095b053SXin Li 			threadpool,
369*b095b053SXin Li 			compute_6d_tile_1d,
370*b095b053SXin Li 			nullptr /* context */,
371*b095b053SXin Li 			1, 1, 1, 1, threads, items,
372*b095b053SXin Li 			1,
373*b095b053SXin Li 			0 /* flags */);
374*b095b053SXin Li 	}
375*b095b053SXin Li 	pthreadpool_destroy(threadpool);
376*b095b053SXin Li 
377*b095b053SXin Li 	/* Do not normalize by thread */
378*b095b053SXin Li 	state.SetItemsProcessed(int64_t(state.iterations()) * items);
379*b095b053SXin Li }
380*b095b053SXin Li BENCHMARK(pthreadpool_parallelize_6d_tile_1d)->UseRealTime()->RangeMultiplier(10)->Range(10, 1000000);
381*b095b053SXin Li 
382*b095b053SXin Li 
compute_6d_tile_2d(void *,size_t,size_t,size_t,size_t,size_t,size_t,size_t,size_t)383*b095b053SXin Li static void compute_6d_tile_2d(void*, size_t, size_t, size_t, size_t, size_t, size_t, size_t, size_t) {
384*b095b053SXin Li }
385*b095b053SXin Li 
pthreadpool_parallelize_6d_tile_2d(benchmark::State & state)386*b095b053SXin Li static void pthreadpool_parallelize_6d_tile_2d(benchmark::State& state) {
387*b095b053SXin Li 	pthreadpool_t threadpool = pthreadpool_create(2);
388*b095b053SXin Li 	const size_t threads = pthreadpool_get_threads_count(threadpool);
389*b095b053SXin Li 	const size_t items = static_cast<size_t>(state.range(0));
390*b095b053SXin Li 	while (state.KeepRunning()) {
391*b095b053SXin Li 		pthreadpool_parallelize_6d_tile_2d(
392*b095b053SXin Li 			threadpool,
393*b095b053SXin Li 			compute_6d_tile_2d,
394*b095b053SXin Li 			nullptr /* context */,
395*b095b053SXin Li 			1, 1, 1, 1, threads, items,
396*b095b053SXin Li 			1, 1,
397*b095b053SXin Li 			0 /* flags */);
398*b095b053SXin Li 	}
399*b095b053SXin Li 	pthreadpool_destroy(threadpool);
400*b095b053SXin Li 
401*b095b053SXin Li 	/* Do not normalize by thread */
402*b095b053SXin Li 	state.SetItemsProcessed(int64_t(state.iterations()) * items);
403*b095b053SXin Li }
404*b095b053SXin Li BENCHMARK(pthreadpool_parallelize_6d_tile_2d)->UseRealTime()->RangeMultiplier(10)->Range(10, 1000000);
405*b095b053SXin Li 
406*b095b053SXin Li 
407*b095b053SXin Li BENCHMARK_MAIN();
408