小编Bil*_*ler的帖子

Openmp 嵌套循环

只是在玩openmp。看看这段代码片段:

#pragma omp parallel
{
    for( i =0;i<n;i++)
    {
        doing something
    }
}
Run Code Online (Sandbox Code Playgroud)

for( i =0;i<n;i++)
{
  #pragma omp parallel
  {
     doing something
  }
}
Run Code Online (Sandbox Code Playgroud)

为什么第一个比第二个慢很多(大约 5 倍)?从理论上讲,我认为第一个必须更快,因为并行区域只创建一次,而不像第二个那样创建 n 次?谁可以给我解释一下这个?

我要并行化的代码具有以下结构:

for(i=0;i<n;i++) //wont be parallelizable
{
  for(j=i+1;j<n;j++)  //will be parallelized
  {
    doing sth.
  }

  for(j=i+1;j<n;j++)  //will be parallelized
    for(k = i+1;k<n;k++)
    {
      doing sth.
    }

}
Run Code Online (Sandbox Code Playgroud)

我制作了一个简单的程序来测量时间并重现我的结果。

#include <stdio.h>
#include <omp.h>

void test( int n)
{
  int i ;
  double t_a = 0.0, t_b = 0.0 ;


  t_a = …
Run Code Online (Sandbox Code Playgroud)

c loops nested openmp

3
推荐指数
1
解决办法
1万
查看次数

标签 统计

c ×1

loops ×1

nested ×1

openmp ×1