如何在 OpenMp 中管理共享变量

How to manage shared variable in OpenMp

本文关键字:管理 共享变量 OpenMp      更新时间:2023-10-16

我正在尝试编写一个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++;