diff options
Diffstat (limited to 'include/pthreadpool.h')
-rw-r--r-- | include/pthreadpool.h | 166 |
1 files changed, 139 insertions, 27 deletions
diff --git a/include/pthreadpool.h b/include/pthreadpool.h index a99105e..9f7f4b3 100644 --- a/include/pthreadpool.h +++ b/include/pthreadpool.h @@ -1,16 +1,23 @@ -#include <stddef.h> +#ifndef PTHREADPOOL_H_ +#define PTHREADPOOL_H_ -#ifndef PTHREADPOOL_H -#define PTHREADPOOL_H +#include <stddef.h> +#include <stdint.h> typedef struct pthreadpool* pthreadpool_t; -typedef void (*pthreadpool_function_1d_t)(void*, size_t); -typedef void (*pthreadpool_function_1d_tiled_t)(void*, size_t, size_t); -typedef void (*pthreadpool_function_2d_t)(void*, size_t, size_t); -typedef void (*pthreadpool_function_2d_tiled_t)(void*, size_t, size_t, size_t, size_t); -typedef void (*pthreadpool_function_3d_tiled_t)(void*, size_t, size_t, size_t, size_t, size_t, size_t); -typedef void (*pthreadpool_function_4d_tiled_t)(void*, size_t, size_t, size_t, size_t, size_t, size_t, size_t, size_t); +typedef void (*pthreadpool_task_1d_t)(void*, size_t); +typedef void (*pthreadpool_task_1d_tile_1d_t)(void*, size_t, size_t); +typedef void (*pthreadpool_task_2d_t)(void*, size_t, size_t); +typedef void (*pthreadpool_task_2d_tile_1d_t)(void*, size_t, size_t, size_t); +typedef void (*pthreadpool_task_2d_tile_2d_t)(void*, size_t, size_t, size_t, size_t); +typedef void (*pthreadpool_task_3d_tile_2d_t)(void*, size_t, size_t, size_t, size_t, size_t); +typedef void (*pthreadpool_task_4d_tile_2d_t)(void*, size_t, size_t, size_t, size_t, size_t, size_t); +typedef void (*pthreadpool_task_5d_tile_2d_t)(void*, size_t, size_t, size_t, size_t, size_t, size_t, size_t); +typedef void (*pthreadpool_task_6d_tile_2d_t)(void*, size_t, size_t, size_t, size_t, size_t, size_t, size_t, size_t); + + +#define PTHREADPOOL_FLAG_DISABLE_DENORMALS 0x00000001 #ifdef __cplusplus extern "C" { @@ -37,7 +44,6 @@ pthreadpool_t pthreadpool_create(size_t threads_count); */ size_t pthreadpool_get_threads_count(pthreadpool_t threadpool); - /** * Processes items in parallel using threads from a thread pool. * @@ -53,27 +59,143 @@ size_t pthreadpool_get_threads_count(pthreadpool_t threadpool); * @param[in] items The number of items to process. The @a function * will be called once for each item. */ -void pthreadpool_compute_1d( +void pthreadpool_parallelize_1d( + pthreadpool_t threadpool, + pthreadpool_task_1d_t function, + void* argument, + size_t range, + uint32_t flags); + +void pthreadpool_parallelize_1d_tile_1d( + pthreadpool_t threadpool, + pthreadpool_task_1d_tile_1d_t function, + void* argument, + size_t range, + size_t tile, + uint32_t flags); + +void pthreadpool_parallelize_2d( + pthreadpool_t threadpool, + pthreadpool_task_2d_t function, + void* argument, + size_t range_i, + size_t range_j, + uint32_t flags); + +void pthreadpool_parallelize_2d_tile_1d( + pthreadpool_t threadpool, + pthreadpool_task_2d_tile_1d_t function, + void* argument, + size_t range_i, + size_t range_j, + size_t tile_j, + uint32_t flags); + +void pthreadpool_parallelize_2d_tile_2d( + pthreadpool_t threadpool, + pthreadpool_task_2d_tile_2d_t function, + void* argument, + size_t range_i, + size_t range_j, + size_t tile_i, + size_t tile_j, + uint32_t flags); + +void pthreadpool_parallelize_3d_tile_2d( + pthreadpool_t threadpool, + pthreadpool_task_3d_tile_2d_t function, + 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); + +void pthreadpool_parallelize_4d_tile_2d( + pthreadpool_t threadpool, + pthreadpool_task_4d_tile_2d_t function, + 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); + +void pthreadpool_parallelize_5d_tile_2d( + pthreadpool_t threadpool, + pthreadpool_task_5d_tile_2d_t function, + 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); + +void pthreadpool_parallelize_6d_tile_2d( + pthreadpool_t threadpool, + pthreadpool_task_6d_tile_2d_t function, + 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); + +/** + * Terminates threads in the thread pool and releases associated resources. + * + * @warning Accessing the thread pool after a call to this function constitutes + * undefined behaviour and may cause data corruption. + * + * @param[in,out] threadpool The thread pool to destroy. + */ +void pthreadpool_destroy(pthreadpool_t threadpool); + +/* Legacy API for compatibility with pre-existing users (e.g. NNPACK) */ +#if defined(__GNUC__) + #define PTHREADPOOL_DEPRECATED __attribute__((__deprecated__)) +#else + #define PTHREADPOOL_DEPRECATED +#endif + +typedef PTHREADPOOL_DEPRECATED void (*pthreadpool_function_1d_t)(void*, size_t); +typedef PTHREADPOOL_DEPRECATED void (*pthreadpool_function_1d_tiled_t)(void*, size_t, size_t); +typedef PTHREADPOOL_DEPRECATED void (*pthreadpool_function_2d_t)(void*, size_t, size_t); +typedef PTHREADPOOL_DEPRECATED void (*pthreadpool_function_2d_tiled_t)(void*, size_t, size_t, size_t, size_t); +typedef PTHREADPOOL_DEPRECATED void (*pthreadpool_function_3d_tiled_t)(void*, size_t, size_t, size_t, size_t, size_t, size_t); +typedef PTHREADPOOL_DEPRECATED void (*pthreadpool_function_4d_tiled_t)(void*, size_t, size_t, size_t, size_t, size_t, size_t, size_t, size_t); + +PTHREADPOOL_DEPRECATED void pthreadpool_compute_1d( pthreadpool_t threadpool, pthreadpool_function_1d_t function, void* argument, size_t range); -void pthreadpool_compute_1d_tiled( +PTHREADPOOL_DEPRECATED void pthreadpool_compute_1d_tiled( pthreadpool_t threadpool, pthreadpool_function_1d_tiled_t function, void* argument, size_t range, size_t tile); -void pthreadpool_compute_2d( +PTHREADPOOL_DEPRECATED void pthreadpool_compute_2d( pthreadpool_t threadpool, pthreadpool_function_2d_t function, void* argument, size_t range_i, size_t range_j); -void pthreadpool_compute_2d_tiled( +PTHREADPOOL_DEPRECATED void pthreadpool_compute_2d_tiled( pthreadpool_t threadpool, pthreadpool_function_2d_tiled_t function, void* argument, @@ -82,7 +204,7 @@ void pthreadpool_compute_2d_tiled( size_t tile_i, size_t tile_j); -void pthreadpool_compute_3d_tiled( +PTHREADPOOL_DEPRECATED void pthreadpool_compute_3d_tiled( pthreadpool_t threadpool, pthreadpool_function_3d_tiled_t function, void* argument, @@ -93,7 +215,7 @@ void pthreadpool_compute_3d_tiled( size_t tile_j, size_t tile_k); -void pthreadpool_compute_4d_tiled( +PTHREADPOOL_DEPRECATED void pthreadpool_compute_4d_tiled( pthreadpool_t threadpool, pthreadpool_function_4d_tiled_t function, void* argument, @@ -106,18 +228,8 @@ void pthreadpool_compute_4d_tiled( size_t tile_k, size_t tile_l); -/** - * Terminates threads in the thread pool and releases associated resources. - * - * @warning Accessing the thread pool after a call to this function constitutes - * undefined behaviour and may cause data corruption. - * - * @param[in,out] threadpool The thread pool to destroy. - */ -void pthreadpool_destroy(pthreadpool_t threadpool); - #ifdef __cplusplus } /* extern "C" */ #endif -#endif /* PTHREADPOOL_H */ +#endif /* PTHREADPOOL_H_ */ |