Anu*_*hke 0 c c++ multithreading 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);
Run Code Online (Sandbox Code Playgroud)
你应该使用减少
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++;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7803 次 |
| 最近记录: |