双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

OpenMP对CPU的使用率不一样?

aleyuan aleyuan 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我写了一段代码想试试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;
}
...全文

相关推荐

评论 5
收藏 已收藏
分享
返回顶部