• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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