MCPcopy Create free account
hub / github.com/NGSolve/ngsolve / RunParallel

Function RunParallel

ngscuda/cuda_tasks.cpp:72–113  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

70
71
72__global__ void RunParallel (int num,
73 const nvstd::function<void(int nr, int size)> & func)
74 {
75 TPToken ptoken(*queue);
76 TCToken ctoken(*queue);
77
78 // std::atomic<int> cnt{0};
79 int cnt = 0;
80
81 for (size_t i = 0; i < num; i++)
82 {
83 Task task;
84 task.nr = i;
85 task.size = num;
86 task.pfunc = &func;
87 task.cnt = &cnt;
88 queue->enqueue(ptoken, task);
89 }
90
91 /*
92 // faster with bulk enqueue (error with gcc-Release)
93 Task firsttask;
94 firsttask.nr = 0;
95 firsttask.size = num;
96 firsttask.pfunc=&func;
97 firsttask.cnt = &cnt;
98 queue.enqueue_bulk (ptoken, firsttask, num);
99 */
100
101 while (cnt < num)
102 {
103 Task task;
104 if(!queue->try_dequeue_from_producer(ptoken, task))
105 if(!queue->try_dequeue(ctoken, task))
106 continue;
107
108 (*task.pfunc)(task.nr, task.size);
109 // (*task.cnt)++;
110 atomicAdd(task.cnt, 1);
111
112 }
113 }
114
115
116// #ifdef __CUDACC__

Callers

nothing calls this directly

Calls 4

atomicAddFunction · 0.85
try_dequeueMethod · 0.80
enqueueMethod · 0.45

Tested by

no test coverage detected