如何在openMP中组合n线程的私有变量
How to combine private variables of n threads in 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变量。
使用critical
section。如图所示,在你的并行区域的末尾添加一个临界区,它将一次进入一个线程(你可能不需要omp_get_thread_num()
部分,这取决于你到底在做什么)。
#pragma omp critical
{
global_variable_thingy[omp_get_thread_num()] += local_variable_thingy;
}
相关文章:
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 类与私有变量的其他类之间的线程安全性
- 全局变量 多读取器 一个写入器多线程安全?
- 静态 constexpr 类成员变量对多线程读取是否安全?
- 成员变量在多线程 C++ 时自行更改
- C++线程安全:如果只有一个线程可以写入非原子变量,但多个线程从中读取. 会遇到问题吗?
- 多个线程可以安全地同时将相同的值写入同一变量吗?
- C++11:具有互斥锁的线程看到原子变量的值发生变化,尽管这是唯一可以改变它的代码
- C++线程不检测全局变量更改
- 为什么 beginthreadex 线程参数变量在父线程中没有更新
- C++多线程程序:变量定义为类成员的隔离错误
- std::线程不是全局变量,但在到达创建它的函数的末尾时不会超出范围?
- 对全局变量的多线程访问:我应该使用互斥锁吗?
- 子线程中的条件变量等待停止主线程中的执行
- cuda:多个线程访问同一个全局变量
- 多个线程可以读取同一个类成员变量吗?
- 线程局部变量的初始化顺序
- 在静态初始化期间,pthread线程变量何时开始存在
- 从主循环windows访问线程变量
- 线程变量的声明和影响