您的位置:首页 > 运维架构

openMP-数据并行化小例子

2012-11-16 22:22 141 查看
这是一个采用openMP进行数据并行化的例子,在这个例子中,数据之间是独立的,能很好的利用其优势。这只是一个测试例子,没有什么实际的意义。在这个例子中,全局数组不可太大,否则不能运行。

/*
功能:循环并行化
作者:刘荣
时间:2012.11.15
*/
#include<iostream>
#include<omp.h>
#include<Windows.h>
#include<time.h>
#include<cmath>
//变量声明
const int numVector = 10000;
double a[numVector] ,b[numVector] ,c[numVector];

int main()
{

srand( (unsigned)time(NULL));
//初始化数据

for(int i = 0;i < numVector; i++)
{
a[i] = i * rand()*1.0/RAND_MAX;
b[i] = i * rand()*1.0/RAND_MAX;
}
//相关数据声明
double start, end, diffTime1, diffTime2;
//串行程序
start = clock();//开始计时

for(int i = 0;i < numVector; i++)
{
c[i] = a[i]*b[i]+sqrt(a[i]/b[i]);
}

end = clock();//结束计时
diffTime1 = end - start;
printf("串行所用的时间:%0.3f s \n",diffTime1/1000);

//并行化程序
start = clock();//开始计时

#pragma omp parallel for
for(int i = 0;i < numVector; i++)
{
c[i] = a[i]*b[i]+sqrt(a[i]/b[i]);
}

end = clock();//结束计时
diffTime2 = end - start;
printf("并行所用的时间:%0.3f s \n",diffTime2/1000);
printf("加速比:%0.3f \n",diffTime1/diffTime2);
return 0;
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: