1. 程式人生 > >OpenMP: VS2010配置使用OpenMP

OpenMP: VS2010配置使用OpenMP

               

        一個簡單的OpenMP例子

       首先啟動VisualStudio 2010,新建一個C++的控制檯應用程式,如下圖所示:

       然後在專案解決方案資源管理器上選擇專案名稱,點選右鍵,選擇“屬性”,如下圖所示:

       然後在屬性頁上左側選擇“配置屬性”——“C/C++”——“語言”,然後在右側“OpenMP支援”後選擇“是(/openmp)”,如下圖所示:

       在cpp檔案中新增如下程式碼:

#include "stdafx.h"#include<omp.h>#include<iostream>usingnamespace std;//迴圈測試函式
void test(){for(int i=0;i<10000;i++){}}int _tmain(int argc,_TCHAR* argv[]){cout<<"這是一個序列測試程式!\n";double start = omp_get_wtime( );//獲取起始時間for(int i = 0; i < 10000; i++){ test();}double end = omp_get_wtime( );cout<<"計算耗時為:"<<end -start<<"\n";cin>>end;return 0;}

       以上程式碼中紅色字型為新增的程式碼,以上程式是一個典型的序列程式,經過隨機執行10次,其平均耗時約0.283273s(具體所耗時間跟測試計算機有密切的關係,測試電腦CPU採用Core I7 2630QM,4核)。

       下面將其轉換成並行程式,只需要在for迴圈加上#pragma omp parallel for即可,如下程式碼(注意紅色部分):

#include "stdafx.h"#include<omp.h>#include <iostream>using namespace std;//迴圈測試函式void test(){for(inti=0;i<10000;i++){}}int _tmain(int argc, _TCHAR* argv[]){cout<<"這是一個並行測試程式!\n";doublestart = omp_get_wtime( );//獲取起始時間
#pragma ompparallel forfor(inti = 0; i < 10000; i++) {test();}doubleend = omp_get_wtime( );cout<<"計算耗時為:"<<end -start<<"\n";cin>>end;return0;}
       同樣,也經過10次隨機的執行,其平均耗時約為0.06358044s,兩種不同執行方式的比較結果如下表所示:

次數

序列

並行

1

0.283382

0.0746704

2

0.283654

0.0686404

3

0.283212

0.0536631

4

0.280234

0.0517737

5

0.283041

0.0717588

6

0.283126

0.0524264

7

0.281881

0.0580316

8

0.283301

0.0730386

9

0.284545

0.0745088

10

0.286353

0.0572926

平均值

0.283273

0.06358044

       兩種執行方式的結果如下圖所示:

       從上面的分析結果可見,採用OpenMP並行所耗時間僅為序列的22.44%,節約近4.5倍的時間。