我有下面的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/

10-11 22:42