1. 程式人生 > >openMP-資料並行化小例子

openMP-資料並行化小例子

這是一個採用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;
}