我有下面的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());***
}
我不确定的是,***里面的代码。我要做的是如下。
我有一个私有变量part_(一个2d向量),它由每个线程(在它自己的副本中)并行填充。完成此项工作后,我希望将“particle_part”的每个副本中的内容合并为单个particle_list变量。
最佳答案
使用critical
部分。示意图所示,在并行区域的末尾添加一个关键部分,该部分将一次输入一个线程(您可能不需要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/