2012-03-22

OpenMP のメモ

お勉強
牛島先生の本読んでる。

ワークシェアリング
  • do -> do をワークシェア。schedule必須か?
  • sections -> ブロックをワークシェア
  • single -> 単一スレッドだけにさせる(読み込みとか)。copyprivateでブロードキャスト
  • workshare -> 代入をワークシェア?

threadprivate
  • 変数にsave属性付けないとコンパイラに怒られる
  • というかthread数のdynamicしたらダメなので使うことないかも?(dynamicたぶんONにすると思う)

具体的な使い方
ソースはもうあるとする。

コンパイル
$ ifort foo.f90 -fast -openmp -static-intel
みたいな感じ。

[2013-03-14追記]
-static-intel を付けないと、
error while loading shared libraries: libiomp5.so: cannot open shared object file: No such file or directory
と怒られた。ちょっとググッた結果、su - してから、
# ln -is /opt/intel/lib/intel64/libiomp5.so /usr/lib64/libiomp5.so
とシンボリックリンクを置いておくことで解決した模様。まぁ実行ファイルサイズ別にでかくてもいいので毎回 static にしちゃえばいいか。

この課程で知ったコマンド ldd と file がなんか便利そうな感じ。ldd a.out とするとちゃんと missing とかでていた。
http://www1.tmtv.ne.jp/~saekisan/Documents/file_ldd_.txt
とかにはやたら詳しい解説がある…けどチラ見しただけ。
[/追記]


実行
環境変数をセットしてから走らせる。
$ export OMP_NUM_THREADS=8
$ ./a.out
みたいな感じ。

一行目は、
$ OMP_NUM_THREADS=8
$ export OMP_NUM_THREADS
と分けても同じようだ。

No comments: