OpenMP小程序优化

csumushu 2017-01-04 07:30:09
有个data数组,大小为20,初始化为0,现在需要对每个数循环100000000次,每次加1,分配4个线程,0号线程负责0~4,1号线程负责5~9.......求问怎么优化,我自己写的加速都为1或者还小于1.
#include<iostream>
#include<omp.h>
#include<ctime>
using namespace std;

int main()
{

double data[20] = { 0 };
clock_t t1, t2,t3;
t1 = t2 = t3=clock();
omp_set_num_threads(4);

int temp;

#pragma omp parallel for private(temp)
for (int i = 0; i < 4; i++)
{
temp = omp_get_thread_num();
for (int j = 0; j < 100000000; j++)
{
data[4 * temp] += 1;
data[4 * temp + 1] += 1;
data[4 * temp + 2] += 1;
data[4 * temp + 3] += 1;
data[4 * temp + 4] += 1;
}
}
t2 = clock();
cout << "多线程时间:" << (double)(t2 - t1) / CLOCKS_PER_SEC * 1000 << "ms\n";


for (int i = 0; i <20; i++)
{

for (int j = 0; j < 100000000; j++)
{

data[i] += 1;
}
}

t3 = clock();
cout <<"串行时间:"<< (double)(t3 - t2) / CLOCKS_PER_SEC * 1000 << "ms\n";
cin.get();
}
...全文
944 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
csumushu 2017-01-05
  • 打赏
  • 举报
回复
改为release模式单线程和多线程的运行时间上能看出倍数关系,但是CPU占用率却一直没变,都是27左右,而在debug模式下单线程是27,多线程是100,请问这是为什么啊?

2,408

社区成员

发帖
与我相关
我的任务
社区描述
高性能计算
社区管理员
  • 高性能计算社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧