2011-11-12 3 views
3

Eclipse IDEを使用してWindows 7でopenMPをCでテストしたいと思います。 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

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

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

あなたはMinGWのためにOpenMPのバイナリをインストールすることも必要があります。

TDM-GCC

+0

だから、ダウンロード/インストールする必要はありませんか? – TGM

+0

標準のMinGWがopenmpをサポートしていなかったことを知る限り、TDM-GCCをインストールする必要があると思います。 – tune2fs

+0

私は何かを台無しにしたように見えますので、直接指示をしてください。 – TGM

6

私はOpenMPをあまり使っていませんが、ここで自分で試してみました。

OpenMPを使用すると、コンパイル時にパラレルで実行する必要があります。ここでは10000000000までカウントする例です。

#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 

-fopenmp gccへのオプションにより、OpenMPサポートが有効になります。つまり、ループを複数のスレッドで実行する必要があります。

$ gcc -o OpenMPTest main.c -fopenmp 

これは、デュアルコアシステム上で15秒に実行されている時間を半減:

#pragma omp 

これは次のとおりです。ここで

$ time ./OpenMPTest 
10000000000 

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

はその#pragmaラインが何をするかについての簡単な説明ですopenmpコマンドの接頭辞。

parallel 

次の文を並列に実行するようにコンパイラに指示します。

for reduction(+: result) 

添加することによって、一つの値に並列ループからresult変数のすべての値を結合。これを削除すると、最終的な番号が正しく表示されなくなります。

私はEclipseを使用しているが、MSDNのドキュメントは、OpenMPを記述するために非常に優れている知っている:あなたのプロジェクトの設定で、次のパラメータを設定する必要があるEclipseで OpenMP in Visual C++

関連する問題