1 /* Standard C headers */
2 #include <stddef.h>
3
4 /* Public library header */
5 #include <pthreadpool.h>
6
7 /* Internal library headers */
8 #include "threadpool-utils.h"
9
10
11 struct pthreadpool {
12 };
13
14 static const struct pthreadpool static_pthreadpool = { };
15
16
pthreadpool_create(size_t threads_count)17 struct pthreadpool* pthreadpool_create(size_t threads_count) {
18 if (threads_count <= 1) {
19 return (struct pthreadpool*) &static_pthreadpool;
20 }
21
22 return NULL;
23 }
24
pthreadpool_get_threads_count(struct pthreadpool * threadpool)25 size_t pthreadpool_get_threads_count(struct pthreadpool* threadpool) {
26 return 1;
27 }
28
pthreadpool_parallelize_1d(struct pthreadpool * threadpool,pthreadpool_task_1d_t task,void * argument,size_t range,uint32_t flags)29 void pthreadpool_parallelize_1d(
30 struct pthreadpool* threadpool,
31 pthreadpool_task_1d_t task,
32 void* argument,
33 size_t range,
34 uint32_t flags)
35 {
36 for (size_t i = 0; i < range; i++) {
37 task(argument, i);
38 }
39 }
40
pthreadpool_parallelize_1d_with_thread(struct pthreadpool * threadpool,pthreadpool_task_1d_with_thread_t task,void * argument,size_t range,uint32_t flags)41 void pthreadpool_parallelize_1d_with_thread(
42 struct pthreadpool* threadpool,
43 pthreadpool_task_1d_with_thread_t task,
44 void* argument,
45 size_t range,
46 uint32_t flags)
47 {
48 for (size_t i = 0; i < range; i++) {
49 task(argument, 0, i);
50 }
51 }
52
pthreadpool_parallelize_1d_with_uarch(pthreadpool_t threadpool,pthreadpool_task_1d_with_id_t task,void * argument,uint32_t default_uarch_index,uint32_t max_uarch_index,size_t range,uint32_t flags)53 void pthreadpool_parallelize_1d_with_uarch(
54 pthreadpool_t threadpool,
55 pthreadpool_task_1d_with_id_t task,
56 void* argument,
57 uint32_t default_uarch_index,
58 uint32_t max_uarch_index,
59 size_t range,
60 uint32_t flags)
61 {
62 for (size_t i = 0; i < range; i++) {
63 task(argument, default_uarch_index, i);
64 }
65 }
66
pthreadpool_parallelize_1d_tile_1d(pthreadpool_t threadpool,pthreadpool_task_1d_tile_1d_t task,void * argument,size_t range,size_t tile,uint32_t flags)67 void pthreadpool_parallelize_1d_tile_1d(
68 pthreadpool_t threadpool,
69 pthreadpool_task_1d_tile_1d_t task,
70 void* argument,
71 size_t range,
72 size_t tile,
73 uint32_t flags)
74 {
75 for (size_t i = 0; i < range; i += tile) {
76 task(argument, i, min(range - i, tile));
77 }
78 }
79
pthreadpool_parallelize_2d(struct pthreadpool * threadpool,pthreadpool_task_2d_t task,void * argument,size_t range_i,size_t range_j,uint32_t flags)80 void pthreadpool_parallelize_2d(
81 struct pthreadpool* threadpool,
82 pthreadpool_task_2d_t task,
83 void* argument,
84 size_t range_i,
85 size_t range_j,
86 uint32_t flags)
87 {
88 for (size_t i = 0; i < range_i; i++) {
89 for (size_t j = 0; j < range_j; j++) {
90 task(argument, i, j);
91 }
92 }
93 }
94
pthreadpool_parallelize_2d_with_thread(struct pthreadpool * threadpool,pthreadpool_task_2d_with_thread_t task,void * argument,size_t range_i,size_t range_j,uint32_t flags)95 void pthreadpool_parallelize_2d_with_thread(
96 struct pthreadpool* threadpool,
97 pthreadpool_task_2d_with_thread_t task,
98 void* argument,
99 size_t range_i,
100 size_t range_j,
101 uint32_t flags)
102 {
103 for (size_t i = 0; i < range_i; i++) {
104 for (size_t j = 0; j < range_j; j++) {
105 task(argument, 0, i, j);
106 }
107 }
108 }
109
pthreadpool_parallelize_2d_tile_1d(pthreadpool_t threadpool,pthreadpool_task_2d_tile_1d_t task,void * argument,size_t range_i,size_t range_j,size_t tile_j,uint32_t flags)110 void pthreadpool_parallelize_2d_tile_1d(
111 pthreadpool_t threadpool,
112 pthreadpool_task_2d_tile_1d_t task,
113 void* argument,
114 size_t range_i,
115 size_t range_j,
116 size_t tile_j,
117 uint32_t flags)
118 {
119 for (size_t i = 0; i < range_i; i++) {
120 for (size_t j = 0; j < range_j; j += tile_j) {
121 task(argument, i, j, min(range_j - j, tile_j));
122 }
123 }
124 }
125
pthreadpool_parallelize_2d_tile_1d_with_uarch(pthreadpool_t threadpool,pthreadpool_task_2d_tile_1d_with_id_t task,void * argument,uint32_t default_uarch_index,uint32_t max_uarch_index,size_t range_i,size_t range_j,size_t tile_j,uint32_t flags)126 void pthreadpool_parallelize_2d_tile_1d_with_uarch(
127 pthreadpool_t threadpool,
128 pthreadpool_task_2d_tile_1d_with_id_t task,
129 void* argument,
130 uint32_t default_uarch_index,
131 uint32_t max_uarch_index,
132 size_t range_i,
133 size_t range_j,
134 size_t tile_j,
135 uint32_t flags)
136 {
137 for (size_t i = 0; i < range_i; i++) {
138 for (size_t j = 0; j < range_j; j += tile_j) {
139 task(argument, default_uarch_index, i, j, min(range_j - j, tile_j));
140 }
141 }
142 }
143
pthreadpool_parallelize_2d_tile_1d_with_uarch_with_thread(pthreadpool_t threadpool,pthreadpool_task_2d_tile_1d_with_id_with_thread_t task,void * argument,uint32_t default_uarch_index,uint32_t max_uarch_index,size_t range_i,size_t range_j,size_t tile_j,uint32_t flags)144 void pthreadpool_parallelize_2d_tile_1d_with_uarch_with_thread(
145 pthreadpool_t threadpool,
146 pthreadpool_task_2d_tile_1d_with_id_with_thread_t task,
147 void* argument,
148 uint32_t default_uarch_index,
149 uint32_t max_uarch_index,
150 size_t range_i,
151 size_t range_j,
152 size_t tile_j,
153 uint32_t flags)
154 {
155 for (size_t i = 0; i < range_i; i++) {
156 for (size_t j = 0; j < range_j; j += tile_j) {
157 task(argument, default_uarch_index, 0, i, j, min(range_j - j, tile_j));
158 }
159 }
160 }
161
pthreadpool_parallelize_2d_tile_2d(pthreadpool_t threadpool,pthreadpool_task_2d_tile_2d_t task,void * argument,size_t range_i,size_t range_j,size_t tile_i,size_t tile_j,uint32_t flags)162 void pthreadpool_parallelize_2d_tile_2d(
163 pthreadpool_t threadpool,
164 pthreadpool_task_2d_tile_2d_t task,
165 void* argument,
166 size_t range_i,
167 size_t range_j,
168 size_t tile_i,
169 size_t tile_j,
170 uint32_t flags)
171 {
172 for (size_t i = 0; i < range_i; i += tile_i) {
173 for (size_t j = 0; j < range_j; j += tile_j) {
174 task(argument, i, j, min(range_i - i, tile_i), min(range_j - j, tile_j));
175 }
176 }
177 }
178
pthreadpool_parallelize_2d_tile_2d_with_uarch(pthreadpool_t threadpool,pthreadpool_task_2d_tile_2d_with_id_t task,void * argument,uint32_t default_uarch_index,uint32_t max_uarch_index,size_t range_i,size_t range_j,size_t tile_i,size_t tile_j,uint32_t flags)179 void pthreadpool_parallelize_2d_tile_2d_with_uarch(
180 pthreadpool_t threadpool,
181 pthreadpool_task_2d_tile_2d_with_id_t task,
182 void* argument,
183 uint32_t default_uarch_index,
184 uint32_t max_uarch_index,
185 size_t range_i,
186 size_t range_j,
187 size_t tile_i,
188 size_t tile_j,
189 uint32_t flags)
190 {
191 for (size_t i = 0; i < range_i; i += tile_i) {
192 for (size_t j = 0; j < range_j; j += tile_j) {
193 task(argument, default_uarch_index, i, j,
194 min(range_i - i, tile_i), min(range_j - j, tile_j));
195 }
196 }
197 }
198
pthreadpool_parallelize_3d(pthreadpool_t threadpool,pthreadpool_task_3d_t task,void * argument,size_t range_i,size_t range_j,size_t range_k,uint32_t flags)199 void pthreadpool_parallelize_3d(
200 pthreadpool_t threadpool,
201 pthreadpool_task_3d_t task,
202 void* argument,
203 size_t range_i,
204 size_t range_j,
205 size_t range_k,
206 uint32_t flags)
207 {
208 for (size_t i = 0; i < range_i; i++) {
209 for (size_t j = 0; j < range_j; j++) {
210 for (size_t k = 0; k < range_k; k++) {
211 task(argument, i, j, k);
212 }
213 }
214 }
215 }
216
pthreadpool_parallelize_3d_tile_1d(pthreadpool_t threadpool,pthreadpool_task_3d_tile_1d_t task,void * argument,size_t range_i,size_t range_j,size_t range_k,size_t tile_k,uint32_t flags)217 void pthreadpool_parallelize_3d_tile_1d(
218 pthreadpool_t threadpool,
219 pthreadpool_task_3d_tile_1d_t task,
220 void* argument,
221 size_t range_i,
222 size_t range_j,
223 size_t range_k,
224 size_t tile_k,
225 uint32_t flags)
226 {
227 for (size_t i = 0; i < range_i; i++) {
228 for (size_t j = 0; j < range_j; j++) {
229 for (size_t k = 0; k < range_k; k += tile_k) {
230 task(argument, i, j, k, min(range_k - k, tile_k));
231 }
232 }
233 }
234 }
235
pthreadpool_parallelize_3d_tile_1d_with_thread(pthreadpool_t threadpool,pthreadpool_task_3d_tile_1d_with_thread_t task,void * argument,size_t range_i,size_t range_j,size_t range_k,size_t tile_k,uint32_t flags)236 void pthreadpool_parallelize_3d_tile_1d_with_thread(
237 pthreadpool_t threadpool,
238 pthreadpool_task_3d_tile_1d_with_thread_t task,
239 void* argument,
240 size_t range_i,
241 size_t range_j,
242 size_t range_k,
243 size_t tile_k,
244 uint32_t flags)
245 {
246 for (size_t i = 0; i < range_i; i++) {
247 for (size_t j = 0; j < range_j; j++) {
248 for (size_t k = 0; k < range_k; k += tile_k) {
249 task(argument, 0, i, j, k, min(range_k - k, tile_k));
250 }
251 }
252 }
253 }
254
pthreadpool_parallelize_3d_tile_1d_with_uarch(pthreadpool_t threadpool,pthreadpool_task_3d_tile_1d_with_id_t task,void * argument,uint32_t default_uarch_index,uint32_t max_uarch_index,size_t range_i,size_t range_j,size_t range_k,size_t tile_k,uint32_t flags)255 void pthreadpool_parallelize_3d_tile_1d_with_uarch(
256 pthreadpool_t threadpool,
257 pthreadpool_task_3d_tile_1d_with_id_t task,
258 void* argument,
259 uint32_t default_uarch_index,
260 uint32_t max_uarch_index,
261 size_t range_i,
262 size_t range_j,
263 size_t range_k,
264 size_t tile_k,
265 uint32_t flags)
266 {
267 for (size_t i = 0; i < range_i; i++) {
268 for (size_t j = 0; j < range_j; j++) {
269 for (size_t k = 0; k < range_k; k += tile_k) {
270 task(argument, default_uarch_index, i, j, k, min(range_k - k, tile_k));
271 }
272 }
273 }
274 }
275
pthreadpool_parallelize_3d_tile_1d_with_uarch_with_thread(pthreadpool_t threadpool,pthreadpool_task_3d_tile_1d_with_id_with_thread_t task,void * argument,uint32_t default_uarch_index,uint32_t max_uarch_index,size_t range_i,size_t range_j,size_t range_k,size_t tile_k,uint32_t flags)276 void pthreadpool_parallelize_3d_tile_1d_with_uarch_with_thread(
277 pthreadpool_t threadpool,
278 pthreadpool_task_3d_tile_1d_with_id_with_thread_t task,
279 void* argument,
280 uint32_t default_uarch_index,
281 uint32_t max_uarch_index,
282 size_t range_i,
283 size_t range_j,
284 size_t range_k,
285 size_t tile_k,
286 uint32_t flags)
287 {
288 for (size_t i = 0; i < range_i; i++) {
289 for (size_t j = 0; j < range_j; j++) {
290 for (size_t k = 0; k < range_k; k += tile_k) {
291 task(argument, default_uarch_index, 0, i, j, k, min(range_k - k, tile_k));
292 }
293 }
294 }
295 }
296
pthreadpool_parallelize_3d_tile_2d(pthreadpool_t threadpool,pthreadpool_task_3d_tile_2d_t task,void * argument,size_t range_i,size_t range_j,size_t range_k,size_t tile_j,size_t tile_k,uint32_t flags)297 void pthreadpool_parallelize_3d_tile_2d(
298 pthreadpool_t threadpool,
299 pthreadpool_task_3d_tile_2d_t task,
300 void* argument,
301 size_t range_i,
302 size_t range_j,
303 size_t range_k,
304 size_t tile_j,
305 size_t tile_k,
306 uint32_t flags)
307 {
308 for (size_t i = 0; i < range_i; i++) {
309 for (size_t j = 0; j < range_j; j += tile_j) {
310 for (size_t k = 0; k < range_k; k += tile_k) {
311 task(argument, i, j, k,
312 min(range_j - j, tile_j), min(range_k - k, tile_k));
313 }
314 }
315 }
316 }
317
pthreadpool_parallelize_3d_tile_2d_with_uarch(pthreadpool_t threadpool,pthreadpool_task_3d_tile_2d_with_id_t task,void * argument,uint32_t default_uarch_index,uint32_t max_uarch_index,size_t range_i,size_t range_j,size_t range_k,size_t tile_j,size_t tile_k,uint32_t flags)318 void pthreadpool_parallelize_3d_tile_2d_with_uarch(
319 pthreadpool_t threadpool,
320 pthreadpool_task_3d_tile_2d_with_id_t task,
321 void* argument,
322 uint32_t default_uarch_index,
323 uint32_t max_uarch_index,
324 size_t range_i,
325 size_t range_j,
326 size_t range_k,
327 size_t tile_j,
328 size_t tile_k,
329 uint32_t flags)
330 {
331 for (size_t i = 0; i < range_i; i++) {
332 for (size_t j = 0; j < range_j; j += tile_j) {
333 for (size_t k = 0; k < range_k; k += tile_k) {
334 task(argument, default_uarch_index, i, j, k,
335 min(range_j - j, tile_j), min(range_k - k, tile_k));
336 }
337 }
338 }
339 }
340
pthreadpool_parallelize_4d(pthreadpool_t threadpool,pthreadpool_task_4d_t task,void * argument,size_t range_i,size_t range_j,size_t range_k,size_t range_l,uint32_t flags)341 void pthreadpool_parallelize_4d(
342 pthreadpool_t threadpool,
343 pthreadpool_task_4d_t task,
344 void* argument,
345 size_t range_i,
346 size_t range_j,
347 size_t range_k,
348 size_t range_l,
349 uint32_t flags)
350 {
351 for (size_t i = 0; i < range_i; i++) {
352 for (size_t j = 0; j < range_j; j++) {
353 for (size_t k = 0; k < range_k; k++) {
354 for (size_t l = 0; l < range_l; l++) {
355 task(argument, i, j, k, l);
356 }
357 }
358 }
359 }
360 }
361
pthreadpool_parallelize_4d_tile_1d(pthreadpool_t threadpool,pthreadpool_task_4d_tile_1d_t task,void * argument,size_t range_i,size_t range_j,size_t range_k,size_t range_l,size_t tile_l,uint32_t flags)362 void pthreadpool_parallelize_4d_tile_1d(
363 pthreadpool_t threadpool,
364 pthreadpool_task_4d_tile_1d_t task,
365 void* argument,
366 size_t range_i,
367 size_t range_j,
368 size_t range_k,
369 size_t range_l,
370 size_t tile_l,
371 uint32_t flags)
372 {
373 for (size_t i = 0; i < range_i; i++) {
374 for (size_t j = 0; j < range_j; j++) {
375 for (size_t k = 0; k < range_k; k++) {
376 for (size_t l = 0; l < range_l; l += tile_l) {
377 task(argument, i, j, k, l, min(range_l - l, tile_l));
378 }
379 }
380 }
381 }
382 }
383
pthreadpool_parallelize_4d_tile_2d(pthreadpool_t threadpool,pthreadpool_task_4d_tile_2d_t task,void * argument,size_t range_i,size_t range_j,size_t range_k,size_t range_l,size_t tile_k,size_t tile_l,uint32_t flags)384 void pthreadpool_parallelize_4d_tile_2d(
385 pthreadpool_t threadpool,
386 pthreadpool_task_4d_tile_2d_t task,
387 void* argument,
388 size_t range_i,
389 size_t range_j,
390 size_t range_k,
391 size_t range_l,
392 size_t tile_k,
393 size_t tile_l,
394 uint32_t flags)
395 {
396 for (size_t i = 0; i < range_i; i++) {
397 for (size_t j = 0; j < range_j; j++) {
398 for (size_t k = 0; k < range_k; k += tile_k) {
399 for (size_t l = 0; l < range_l; l += tile_l) {
400 task(argument, i, j, k, l,
401 min(range_k - k, tile_k), min(range_l - l, tile_l));
402 }
403 }
404 }
405 }
406 }
407
pthreadpool_parallelize_4d_tile_2d_with_uarch(pthreadpool_t threadpool,pthreadpool_task_4d_tile_2d_with_id_t task,void * argument,uint32_t default_uarch_index,uint32_t max_uarch_index,size_t range_i,size_t range_j,size_t range_k,size_t range_l,size_t tile_k,size_t tile_l,uint32_t flags)408 void pthreadpool_parallelize_4d_tile_2d_with_uarch(
409 pthreadpool_t threadpool,
410 pthreadpool_task_4d_tile_2d_with_id_t task,
411 void* argument,
412 uint32_t default_uarch_index,
413 uint32_t max_uarch_index,
414 size_t range_i,
415 size_t range_j,
416 size_t range_k,
417 size_t range_l,
418 size_t tile_k,
419 size_t tile_l,
420 uint32_t flags)
421 {
422 for (size_t i = 0; i < range_i; i++) {
423 for (size_t j = 0; j < range_j; j++) {
424 for (size_t k = 0; k < range_k; k += tile_k) {
425 for (size_t l = 0; l < range_l; l += tile_l) {
426 task(argument, default_uarch_index, i, j, k, l,
427 min(range_k - k, tile_k), min(range_l - l, tile_l));
428 }
429 }
430 }
431 }
432 }
433
pthreadpool_parallelize_5d(pthreadpool_t threadpool,pthreadpool_task_5d_t task,void * argument,size_t range_i,size_t range_j,size_t range_k,size_t range_l,size_t range_m,uint32_t flags)434 void pthreadpool_parallelize_5d(
435 pthreadpool_t threadpool,
436 pthreadpool_task_5d_t task,
437 void* argument,
438 size_t range_i,
439 size_t range_j,
440 size_t range_k,
441 size_t range_l,
442 size_t range_m,
443 uint32_t flags)
444 {
445 for (size_t i = 0; i < range_i; i++) {
446 for (size_t j = 0; j < range_j; j++) {
447 for (size_t k = 0; k < range_k; k++) {
448 for (size_t l = 0; l < range_l; l++) {
449 for (size_t m = 0; m < range_m; m++) {
450 task(argument, i, j, k, l, m);
451 }
452 }
453 }
454 }
455 }
456 }
457
pthreadpool_parallelize_5d_tile_1d(pthreadpool_t threadpool,pthreadpool_task_5d_tile_1d_t task,void * argument,size_t range_i,size_t range_j,size_t range_k,size_t range_l,size_t range_m,size_t tile_m,uint32_t flags)458 void pthreadpool_parallelize_5d_tile_1d(
459 pthreadpool_t threadpool,
460 pthreadpool_task_5d_tile_1d_t task,
461 void* argument,
462 size_t range_i,
463 size_t range_j,
464 size_t range_k,
465 size_t range_l,
466 size_t range_m,
467 size_t tile_m,
468 uint32_t flags)
469 {
470 for (size_t i = 0; i < range_i; i++) {
471 for (size_t j = 0; j < range_j; j++) {
472 for (size_t k = 0; k < range_k; k++) {
473 for (size_t l = 0; l < range_l; l++) {
474 for (size_t m = 0; m < range_m; m += tile_m) {
475 task(argument, i, j, k, l, m, min(range_m - m, tile_m));
476 }
477 }
478 }
479 }
480 }
481 }
482
pthreadpool_parallelize_5d_tile_2d(pthreadpool_t threadpool,pthreadpool_task_5d_tile_2d_t task,void * argument,size_t range_i,size_t range_j,size_t range_k,size_t range_l,size_t range_m,size_t tile_l,size_t tile_m,uint32_t flags)483 void pthreadpool_parallelize_5d_tile_2d(
484 pthreadpool_t threadpool,
485 pthreadpool_task_5d_tile_2d_t task,
486 void* argument,
487 size_t range_i,
488 size_t range_j,
489 size_t range_k,
490 size_t range_l,
491 size_t range_m,
492 size_t tile_l,
493 size_t tile_m,
494 uint32_t flags)
495 {
496 for (size_t i = 0; i < range_i; i++) {
497 for (size_t j = 0; j < range_j; j++) {
498 for (size_t k = 0; k < range_k; k++) {
499 for (size_t l = 0; l < range_l; l += tile_l) {
500 for (size_t m = 0; m < range_m; m += tile_m) {
501 task(argument, i, j, k, l, m,
502 min(range_l - l, tile_l), min(range_m - m, tile_m));
503 }
504 }
505 }
506 }
507 }
508 }
509
pthreadpool_parallelize_6d(pthreadpool_t threadpool,pthreadpool_task_6d_t task,void * argument,size_t range_i,size_t range_j,size_t range_k,size_t range_l,size_t range_m,size_t range_n,uint32_t flags)510 void pthreadpool_parallelize_6d(
511 pthreadpool_t threadpool,
512 pthreadpool_task_6d_t task,
513 void* argument,
514 size_t range_i,
515 size_t range_j,
516 size_t range_k,
517 size_t range_l,
518 size_t range_m,
519 size_t range_n,
520 uint32_t flags)
521 {
522 for (size_t i = 0; i < range_i; i++) {
523 for (size_t j = 0; j < range_j; j++) {
524 for (size_t k = 0; k < range_k; k++) {
525 for (size_t l = 0; l < range_l; l++) {
526 for (size_t m = 0; m < range_m; m++) {
527 for (size_t n = 0; n < range_n; n++) {
528 task(argument, i, j, k, l, m, n);
529 }
530 }
531 }
532 }
533 }
534 }
535 }
536
pthreadpool_parallelize_6d_tile_1d(pthreadpool_t threadpool,pthreadpool_task_6d_tile_1d_t task,void * argument,size_t range_i,size_t range_j,size_t range_k,size_t range_l,size_t range_m,size_t range_n,size_t tile_n,uint32_t flags)537 void pthreadpool_parallelize_6d_tile_1d(
538 pthreadpool_t threadpool,
539 pthreadpool_task_6d_tile_1d_t task,
540 void* argument,
541 size_t range_i,
542 size_t range_j,
543 size_t range_k,
544 size_t range_l,
545 size_t range_m,
546 size_t range_n,
547 size_t tile_n,
548 uint32_t flags)
549 {
550 for (size_t i = 0; i < range_i; i++) {
551 for (size_t j = 0; j < range_j; j++) {
552 for (size_t k = 0; k < range_k; k++) {
553 for (size_t l = 0; l < range_l; l++) {
554 for (size_t m = 0; m < range_m; m++) {
555 for (size_t n = 0; n < range_n; n += tile_n) {
556 task(argument, i, j, k, l, m, n, min(range_n - n, tile_n));
557 }
558 }
559 }
560 }
561 }
562 }
563 }
564
pthreadpool_parallelize_6d_tile_2d(pthreadpool_t threadpool,pthreadpool_task_6d_tile_2d_t task,void * argument,size_t range_i,size_t range_j,size_t range_k,size_t range_l,size_t range_m,size_t range_n,size_t tile_m,size_t tile_n,uint32_t flags)565 void pthreadpool_parallelize_6d_tile_2d(
566 pthreadpool_t threadpool,
567 pthreadpool_task_6d_tile_2d_t task,
568 void* argument,
569 size_t range_i,
570 size_t range_j,
571 size_t range_k,
572 size_t range_l,
573 size_t range_m,
574 size_t range_n,
575 size_t tile_m,
576 size_t tile_n,
577 uint32_t flags)
578 {
579 for (size_t i = 0; i < range_i; i++) {
580 for (size_t j = 0; j < range_j; j++) {
581 for (size_t k = 0; k < range_k; k++) {
582 for (size_t l = 0; l < range_l; l++) {
583 for (size_t m = 0; m < range_m; m += tile_m) {
584 for (size_t n = 0; n < range_n; n += tile_n) {
585 task(argument, i, j, k, l, m, n,
586 min(range_m - m, tile_m), min(range_n - n, tile_n));
587 }
588 }
589 }
590 }
591 }
592 }
593 }
594
pthreadpool_destroy(struct pthreadpool * threadpool)595 void pthreadpool_destroy(struct pthreadpool* threadpool) {
596 }
597