openmpを使ってあるコードを並列化しています.
並列化しているといってもコードの最初から最後を
omp_set_num_threads(4); #pragma omp parallel { コード全体 }
というようにただコード全体を4threadで並列化しているだけなのですが,実行時間が以下の例のように
一部threadだけが約2倍かかってしまいます.
実行時間例 thid=1 compute time: 1.320783 s thid=0 compute time: 1.374514 s thid=2 compute time: 1.408533 s thid=3 compute time: 2.755322 s
実行時間はomp_get_wtimeを使っているのですが,原因がわかりません.
もしかしたらopenmpが勝手に同期のようなことを行っているためなのかなと思い,非同期に動作させるnowaitを入れようとしたのですが,どうやらnowaitはforを並列化するときのみ使えるものみたいでした.
実行時間を測り始める直前に#pragma omp barrierを入れてみたりもしましたが変わりませんでした.
どなたか助けてください.
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。