只是在玩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)