OpenMP原生支持代表数组的变量的归约吗?
这应该像以下代码一样工作...
float* a = (float*) calloc(4*sizeof(float));
omp_set_num_threads(13);
#pragma omp parallel reduction(+:a)
for(i=0;i<4;i++){
a[i] += 1; // Thread-local copy of a incremented by something interesting
}
// a now contains [13 13 13 13]
理想情况下,对于omp parallel for应该有类似的东西,如果你有足够数量的线程,使得这种方法有意义,那么累加将通过二叉树进行。
std::thread
等,或者tbb。 - Walter