gpt4 book ai didi

c++ - 如何在openMP中组合n个线程的私有(private)变量?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:22:09 25 4
gpt4 key购买 nike

我有以下需要正确并行化的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com