1*b095b053SXin Li #include <stdio.h>
2*b095b053SXin Li #include <stdint.h>
3*b095b053SXin Li #include <assert.h>
4*b095b053SXin Li
5*b095b053SXin Li #include <pthreadpool.h>
6*b095b053SXin Li
7*b095b053SXin Li struct array_addition_context {
8*b095b053SXin Li double *augend;
9*b095b053SXin Li double *addend;
10*b095b053SXin Li double *sum;
11*b095b053SXin Li };
12*b095b053SXin Li
add_arrays(struct array_addition_context * context,size_t i)13*b095b053SXin Li static void add_arrays(struct array_addition_context* context, size_t i) {
14*b095b053SXin Li context->sum[i] = context->augend[i] + context->addend[i];
15*b095b053SXin Li }
16*b095b053SXin Li
17*b095b053SXin Li #define ARRAY_SIZE 4
18*b095b053SXin Li
main()19*b095b053SXin Li int main() {
20*b095b053SXin Li double augend[ARRAY_SIZE] = { 1.0, 2.0, 4.0, -5.0 };
21*b095b053SXin Li double addend[ARRAY_SIZE] = { 0.25, -1.75, 0.0, 0.5 };
22*b095b053SXin Li double sum[ARRAY_SIZE];
23*b095b053SXin Li
24*b095b053SXin Li pthreadpool_t threadpool = pthreadpool_create(0);
25*b095b053SXin Li assert(threadpool != NULL);
26*b095b053SXin Li
27*b095b053SXin Li const size_t threads_count = pthreadpool_get_threads_count(threadpool);
28*b095b053SXin Li printf("Created thread pool with %zu threads\n", threads_count);
29*b095b053SXin Li
30*b095b053SXin Li struct array_addition_context context = { augend, addend, sum };
31*b095b053SXin Li pthreadpool_parallelize_1d(threadpool,
32*b095b053SXin Li (pthreadpool_task_1d_t) add_arrays,
33*b095b053SXin Li (void**) &context,
34*b095b053SXin Li ARRAY_SIZE,
35*b095b053SXin Li PTHREADPOOL_FLAG_DISABLE_DENORMALS /* flags */);
36*b095b053SXin Li
37*b095b053SXin Li pthreadpool_destroy(threadpool);
38*b095b053SXin Li threadpool = NULL;
39*b095b053SXin Li
40*b095b053SXin Li printf("%8s\t%.2lf\t%.2lf\t%.2lf\t%.2lf\n", "Augend",
41*b095b053SXin Li augend[0], augend[1], augend[2], augend[3]);
42*b095b053SXin Li printf("%8s\t%.2lf\t%.2lf\t%.2lf\t%.2lf\n", "Addend",
43*b095b053SXin Li addend[0], addend[1], addend[2], addend[3]);
44*b095b053SXin Li printf("%8s\t%.2lf\t%.2lf\t%.2lf\t%.2lf\n", "Sum",
45*b095b053SXin Li sum[0], sum[1], sum[2], sum[3]);
46*b095b053SXin Li
47*b095b053SXin Li return 0;
48*b095b053SXin Li }
49