如何在 OpenMp 中管理共享变量
How to manage shared variable in OpenMp
我正在尝试编写一个OpenMp程序。我有一个迭代 100 次的 for 循环。我将其分为 10 个线程。每个线程运行 10 次迭代,并根据某些条件生成一些计数。因此,根据此逻辑,每个线程将生成自己的计数。
我想要的只是将此计数复制到一个变量中,该变量将保存所有线程中所有计数的总和。如果我们让这个变量(共享)在循环中写入,我想它会序列化线程。我只想将每个线程的最后一个计数复制到全局变量中。这样,我将只序列化 10 个赋值语句。我尝试使用lastprivate
但我对如何使用它来满足我的要求感到困惑。
这是我的代码
#pragma omp parallel for private(i) schedule(dynamic) shared(count)
for (i = 1; i <= 100 ; i++)
{
if(i%2==0)
count++;
}
printf("Total = %d n", count);
你应该使用reduce。
int count = 0;
int i;
#pragma omp parallel for private(i) schedule(dynamic) reduction(+:count)
for (i = 1; i <= 100 ; i++)
if(i%2==0)
count++;
相关文章:
- C++子类共享变量?
- 子目录之间的 CMAKE 共享变量
- 如何在不同的CMakeList.txt之间共享变量?
- OpenMP 任务看不到共享变量的更改
- 是否可以在专用内存空间中分配一个为提升管理共享内存而创建的对象
- OpenMP:当我按线程 ID 访问共享变量时,我是否需要一个关键部分
- 多个 OpenMP 线程读取(而不是写入)共享变量的性能成本?
- 加速进程间:管理共享内存错误
- 在 pthread 中使用共享变量
- 提升线程问题,当一个线程与另一个线程没有相同的副本时如何共享变量?
- C :与多个文件共享变量
- 使用共享变量进行线程处理
- 是否要确保一个线程修改的任何数据类型的共享变量对其他线程可见
- 在派生类之间复制共享变量(浅副本就足够了)
- 为什么跨线程更改共享变量的代码显然没有受到竞争条件的影响
- 从多个线程C 更改共享变量
- 在不同类的对象之间共享变量 (C++)
- 管理多线程应用程序中的共享变量
- C 类共享变量
- 如何在 OpenMp 中管理共享变量