7

シンプルなCプログラムでOpenMPを試してみました

test() {
   for(int i=0;i<100000000;i++);
}
main() {
    printf("Num of CPU: %d\n", omp_get_num_procs());
    #pragma omp parallel for num_threads(4)
    for(int i=0;i<100;i++) test();
}

でコンパイルg++ -fopenmp。4 つの CPU があることを正しく出力できますが、すべてのテスト関数は で実行されていthread 0ます。

を改造してみましたOMP_NUM_THREADS。しかし、それも効果がありません。

オンラインの例と同じものがすべてありましたが、なぜ機能しないのですか?

4

5 に答える 5

7

あなたの問題はここにあります:

#pragma omp parallel for num_thread(4) <---

正しい句はnum_threads(4), ではありませんnum_thread(4)。不適切な openmp プラグマは無視されるため、シーケンシャル プログラムになってしまいます。:)

コンパイラの警告が表示されなかったことに驚いています。

于 2012-04-18T19:27:00.190 に答える
3

Visual Studio でこの問題が発生しましたが、最終的に、Visual Studio で Open MP サポートを有効にするのを忘れていたことに気付きました。エラーは発生しませんでしたが、1つのスレッドだけでプログラムを実行しました

于 2014-08-02T14:10:49.210 に答える
0

omp並列セクションを呼び出す前に、関数omp_set_num_threads(4)を使用してください。

また、スレッドの数をどのように決定しますか?すべてが印刷されていることを確認するために、printfsをクリティカルセクションに埋め込みます。

于 2012-04-18T06:43:59.843 に答える