如何在openMP中组合n个线程的私有变量?

时间:2015-09-03 12:34:43

标签: c++ multithreading algorithm parallel-processing openmp

我有以下需要正确并行化的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());*** 
}

***中包含的代码是我不确定的。我想要做的是如下。 我有一个私有变量particle_part(一个2d向量),它由每个线程(在它自己的副本中)并行填充。一旦完成工作,我希望将'particle_part'的每个副本中的内容合并到一个particle_list变量中。

1 个答案:

答案 0 :(得分:1)

使用critical部分。示意性地显示,在并行区域的末尾添加一个临界区,一次输入一个线程(根据您正在做什么,您可能不需要omp_get_thread_num()部分。)

#pragma omp critical
{
    global_variable_thingy[omp_get_thread_num()] += local_variable_thingy;
}