我写了一段代码想试试OpenMP的加速效果,结果发现我的双核CPU使用率一高一低,差别比较明显
代码里有几种方法对长180000的数组赋值500次。
1.单线程不用OpenMP
2.双线程外循环为180000
3.四线程,外循环180000
4.双线程,外循环300
5.双线程,外循环600
6.双线程,外循环100
而且测试结果基本上都是1.4.<6.<2.5.<3.(快<慢)
问题1就是CPU使用率一高一低
问题2是为什么OpenMP不会比单线程快?
int _tmain(int argc, _TCHAR* argv[])
{
int a[180000];
int begin,end;
int loop=15;
while(loop)
{
begin = clock();
for(int i=0;i<180000;i++)
for(int j=0;j<500;j++)
a[i]=j;
end = clock();
cout<<end-begin<<" ";
begin = clock();
#pragma omp parallel for num_threads(2)
for(int i=0;i<180000;i++)
for(int j=0;j<500;j++)
a[i]=j;
end = clock();
cout<<end-begin<<" ";
begin = clock();
#pragma omp parallel for num_threads(4)
for(int i=0;i<180000;i++)
for(int j=0;j<500;j++)
a[i]=j;
end = clock();
cout<<end-begin<<" ";
begin=clock();
#pragma omp parallel for num_threads(2)
for(int i=0;i<300;i++)
{
for(int k=0;k<600;k++)
{
int index = i*600+k;
for(int j=0;j<500;j++)
a[index]=j;
}
}
end = clock();
cout<<end-begin<<" ";
begin=clock();
#pragma omp parallel for num_threads(2)
for(int i=0;i<600;i++)
{
for(int k=0;k<300;k++)
{
int index = i*300+k;
for(int j=0;j<500;j++)
a[index]=j;
}
}
end = clock();
cout<<end-begin<<" ";
begin=clock();
#pragma omp parallel for num_threads(2)
for(int i=0;i<100;i++)
{
for(int k=0;k<1800;k++)
{
int index = i*1800+k;
for(int j=0;j<500;j++)
a[index]=j;
}
}
end = clock();
cout<<end-begin<<" ";
cout<<endl;
loop--;
}
getchar();
//#pragma
return 0;
}