繁体   English   中英

如何在OpenMp中管理共享变量

[英]How to manage shared variable in OpenMp

我正在尝试编写一个OpenMp程序。 我有一个for循环,可以迭代100次。 我将其分为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);

你应该使用减少

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++; 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM