aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorMarat Dukhan <maratek@google.com>2019-09-30 15:22:14 -0700
committerMarat Dukhan <maratek@google.com>2019-09-30 15:44:55 -0700
commit29f0e2ced866e321d8293d4d1bdae71a5fdc90ec (patch)
tree50d75bdf0439eaf3f37e8ae316086c9038bfaee9 /include
parentafb23f9ac963caaea7685a3d454e80b80417ddec (diff)
downloadpthreadpool-29f0e2ced866e321d8293d4d1bdae71a5fdc90ec.tar.gz
New pthreadpool_parallelize_* API
Diffstat (limited to 'include')
-rw-r--r--include/pthreadpool.h166
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_ */