2011年7月20日水曜日

NO_AFFINITY

SDPARA,SDPA ではマルチスレッドで高速化しているが、BLAS の構成のときに設定を誤るとこの効果が得られなくなる。
GotoBLAS2, OpenBLAS2 の場合には、
$ make BINARY=64 NO_AFFINITY=1
と AFFINITY を使わないように設定する必要がある。

ただ、AFFINITY を使わないとなぜ高速になるかは今一つよく分かっていない。
たとえば、SDPA でマルチスレッドを使っている間は BLAS を使わない計算をしていても(具体的に言うとF1,F2,F3 のうちの F3 だけを利用していても)、なぜか NO_AFFINITY の影響を受ける。
正確には OMP_NUM_THREADS の部分かもしれないが、NO_AFFINITY = 1 を設定しないとOMP_NUM_THREADS=1 のほうが OMP_NUM_THREADS=4 よりも F3 が高速に実行される。
両方とも 4 スレッドで計算はしているのだが、OMP_NUM_THREADS=4 はほとんどの計算がひとつのスレッドに集中している様子だ。

あと、SDPARA については MUMPS を利用しているが、MUMPS は OpenMPI との相性が良くないようで libpthread.so が segmentation fault を起こすことがある。
この場合には OpenMPI に代わって、MPICH2 を利用することになる。
MUMPS の FAQ
http://graal.ens-lyon.fr/MUMPS/index.php?page=faq#3
を見ると、MPICH, LAM_MPI は載っているが OpenMPI は載っていないので OpenMPI ではテストしていないことも考えられる。

今日の作業内容:SDPARA 数値実験 4h
今日のランチ:ちゅらさん へちまの味噌煮
明日の予測作業時間:5h

0 件のコメント:

コメントを投稿