作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有以下需要正确并行化的 C++ 代码。
vector<vector<int> > particle_list(ncell,vector<int> (0, 0));
#pragma omp parallel num_thread(24)
{
vector<vector<int> > particle_part(ncell,vector<int> (0, 0));
int icell;
#pragma omp num_thread(24) for
for (int i=0; i<ntotal; i++)
{
icell=cellno[i];
particle_part[icell].push_back(i) ;
}
***#pragma omp master
particle_list[ncell].insert(particle_list[ncell].end(),...
particle_part[ncell].begin(), particle_part[ncell].end());***
}
*** 中包含的代码是我不确定的内容。我想做的是如下。我有一个私有(private)变量 particle_part(一个二维 vector ),它由每个线程(在其自己的拷贝中)并行填充。工作完成后,我希望将“particle_part”的每个拷贝中的内容合并到一个 particle_list 变量中。
最佳答案
使用关键
部分。如图所示,在并行区域的末尾添加一个关键部分,一次将进入一个线程(您可能不需要 omp_get_thread_num()
部分,具体取决于您正在做什么)。
#pragma omp critical
{
global_variable_thingy[omp_get_thread_num()] += local_variable_thingy;
}
关于c++ - 如何在openMP中组合n个线程的私有(private)变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32375786/
我是一名优秀的程序员,十分优秀!