2011-11-12 54 views
3

我想用Eclipse IDE在Windows 7上用C測試openMP。我無法找到任何設置openMP的特定步驟。你可以幫我嗎?如何設置openMP

+1

這是否頁面的幫助? http://gcc.gnu.org/onlinedocs/libgomp/Enabling-OpenMP.html#Enabling-OpenMP基本上,你添加了-fopenmp作爲編譯器標誌,並將sprincle #pragma omp whatever添加到你的代碼中 – yosukesabai

+1

什麼是你的編譯器? – osgx

+0

編譯器是MinGW – TGM

回答

2

在Eclipse中,你需要設置以下參數在你的項目配置:

C/C++ Build -> Settings -> Includes: add gomp 

C/C++ Build -> Settings -> Miscellaneous -> Other Flags: add -fopenmp 

你也需要安裝OpenMP的二進制文件的MinGW:

TDM-GCC

+0

那麼這是否意味着我不必下載/安裝任何東西? – TGM

+0

我想你需要安裝TDM-GCC,因爲據我所知標準MinGW不支持openmp。 – tune2fs

+0

你可以給我一些直接的方向,因爲我看起來我搞砸了一切。 – TGM

6

我對OpenMP並沒有做太多的工作,但這裏是我自己嘗試的。

OpenMP允許您告訴編譯器事情應該並行運行。這裏是一個計數100億個例子:

#include <stdio.h> 
#include <stdlib.h> 

int main(int argc, char **argv) 
{ 
    long result = 0; 
    long i; 

#pragma omp parallel for reduction(+: result) 
    for (i = 0; i < 10000000000; i++) { 
        result++; 
    } 
    printf("%li\n", result); 
    return EXIT_SUCCESS; 
} 

這將編譯像一個普通的C程序:

$ gcc -o OpenMPTest main.c 

它運行在我的機器30秒時:

$ time ./OpenMPTest 
10000000000 

real 0m30.674s 
user 0m30.628s 
sys 0m0.014s 

添加gcc的-fopenmp選項啓用了OpenMP支持。這就是你需要讓循環在多個線程中運行的全部內容。

$ gcc -o OpenMPTest main.c -fopenmp 

這減半的運行時間爲15秒的雙核系統:

$ time ./OpenMPTest 
10000000000 

real 0m15.840s 
user 0m30.123s 
sys 0m0.037s 

這裏是一個#pragma行所做的簡要說明:

#pragma omp 

這是一個openmp命令的前綴。

parallel 

告訴編譯器下一個語句應該並行運行。

for reduction(+: result) 

組合從並行循環result變量的所有值到由另外一個值。取消此操作會導致打印出的最終號碼不正確。

我知道你正在使用的Eclipse,但MSDN文檔是用於描述OpenMP的相當不錯: OpenMP in Visual C++