openMP-資料並行化小例子
阿新 • • 發佈:2019-02-05
這是一個採用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; }