Caffe2 - C++ API
A deep learning, cross platform ML framework
pthreadpool.h
1 // pthreadpool header from https://github.com/Maratyszcza/pthreadpool
2 // for NNPACK
3 #ifndef CAFFE2_UTILS_PTHREADPOOL_H_
4 #define CAFFE2_UTILS_PTHREADPOOL_H_
5 
6 #include "ThreadPoolCommon.h"
7 
8 
9 #include <stddef.h> // for size_t
10 
11 typedef struct pthreadpool* pthreadpool_t;
12 
13 typedef void (*pthreadpool_function_1d_t)(void*, size_t);
14 typedef void (*pthreadpool_function_1d_tiled_t)(void*, size_t, size_t);
15 typedef void (*pthreadpool_function_2d_t)(void*, size_t, size_t);
16 typedef void (*pthreadpool_function_2d_tiled_t)(void*, size_t, size_t, size_t, size_t);
17 typedef void (*pthreadpool_function_3d_tiled_t)(
18  void*,
19  size_t,
20  size_t,
21  size_t,
22  size_t,
23  size_t,
24  size_t);
25 typedef void (*pthreadpool_function_4d_tiled_t)(
26  void*,
27  size_t,
28  size_t,
29  size_t,
30  size_t,
31  size_t,
32  size_t,
33  size_t,
34  size_t);
35 
36 #ifdef __cplusplus
37 extern "C" {
38 #endif
39 
50 pthreadpool_t pthreadpool_create(size_t threads_count);
51 
59 size_t pthreadpool_get_threads_count(pthreadpool_t threadpool);
60 
61 
77 void pthreadpool_compute_1d(
78  pthreadpool_t threadpool,
79  pthreadpool_function_1d_t function,
80  void* argument,
81  size_t range);
82 
83 void pthreadpool_compute_1d_tiled(
84  pthreadpool_t threadpool,
85  pthreadpool_function_1d_tiled_t function,
86  void* argument,
87  size_t range,
88  size_t tile);
89 
90 void pthreadpool_compute_2d(
91  pthreadpool_t threadpool,
92  pthreadpool_function_2d_t function,
93  void* argument,
94  size_t range_i,
95  size_t range_j);
96 
97 void pthreadpool_compute_2d_tiled(
98  pthreadpool_t threadpool,
99  pthreadpool_function_2d_tiled_t function,
100  void* argument,
101  size_t range_i,
102  size_t range_j,
103  size_t tile_i,
104  size_t tile_j);
105 
106 void pthreadpool_compute_3d_tiled(
107  pthreadpool_t threadpool,
108  pthreadpool_function_3d_tiled_t function,
109  void* argument,
110  size_t range_i,
111  size_t range_j,
112  size_t range_k,
113  size_t tile_i,
114  size_t tile_j,
115  size_t tile_k);
116 
117 void pthreadpool_compute_4d_tiled(
118  pthreadpool_t threadpool,
119  pthreadpool_function_4d_tiled_t function,
120  void* argument,
121  size_t range_i,
122  size_t range_j,
123  size_t range_k,
124  size_t range_l,
125  size_t tile_i,
126  size_t tile_j,
127  size_t tile_k,
128  size_t tile_l);
129 
138 void pthreadpool_destroy(pthreadpool_t threadpool);
139 
140 #ifdef __cplusplus
141 } /* extern "C" */
142 #endif
143 
144 #endif // CAFFE2_UTILS_PTHREADPOOL_H_