LSDYNA 971R6 GPU版のテストリポートです。
GPU版は、正式公開ではありません。 β版、テスト評価用です。
LSDYNA GPU版は、追加ライセンス不要です。
保守契約ユーザは、(Teslaを買えば)誰でも使用できます。
———————————————————————
<<<リリースノート要約>>>
1.モジュール
モジュールは以下の2モジュールのみ。
mpp971_d_r6.0.0_71488_intel64_intel_rhel54_openmpi151_hybrid
ls971_d_r6.0.1_72099_intel64_intel_rhel54_gpu
どちらも、Linx64 Cent OS 用。NVIDIA GPUのみ対応。
2. GPUが効果的かどうかの判断
messageファイルのタイムログ
Implicit Lin. Alg. … 2.0531E+02 77.78 5.6105E+01 69.02
最後の数値は、WCT( wall CLock Time:経過時間)の比率。
この比率が高ければGPU使用メリットがある。
50%以下ならメリットは少ない。
3. *control_implicit_solver LPRINT=2
Implicit解析ソルバ情報をプリントすること。
GPUは、ソリッド要素において効果的である。
‘no. of deferred pivots’の表示に注意する。この値がゼロでない
の処理は、ホスト側で実行されるべきであるので、GPU処理
性能は低下する。
4.ライブラリ
SMP,MPP版共に liblstc_gpu.so を含むので、これを任意の場所
に置き環境変数 LD_LIBRARY_PATH で設定すること。
…………….. LSTC社でのベンチマーク結果 ……………
———————————————————————
ソルバータイプ
*control_implicit_solver におけるソルバータイプに関して
記述がなかったので、担当者へ確認しました。
SMP : LSOLVR=4または5 がGPU使用。他は使用しない。
MPP : LSOLVRの設定は関係なく、無条件でGPU使用。
MPP版
% mpirun -np で指定する各ノードには全てGPUが必要です。
私の場合、1台しか持っていないので、-np 1 でしか使えません。
これはでMPPを使う意味がないので、今回はSMP版のみテストします。
(気付く前に、platform MPI版も作ってと、お願いしてしまった)
インストール
難しい点はありません。ファイルをダウンロード、解凍してパスの
通っている場所に置くだけ。
解凍すると、liblstc_gpu.so も出てくるので、
/usr/loca/lstc_gpu/lib
の下に置いたら、.cshrc なら
setenv LD_LIBRARY_PATH /usr/loca/lstc_gpu/lib
等とします。
ついでに、ls971_d_r6.0.1_72099_intel64_intel_rhel54_gpu
と毎回打ち込むのは、精神的ダメージが大きいので
% ln -s ls971_d_r6.0.1_72099_intel64_intel_rhel54_gpu ls971gpu
とでもして、シンボリックリンクを作っておきます。
以降の実行は、 %ls971gpu でOK。
動作確認
即終了する程度の小さなデータを用意して、
(ちょっとドキドキしながら)
%ls971gpu i=test.k memory=2500m
(搭載メモリが24GBなので、
データ領域=2500m double word=20GB程度を設定)
実行が始まります。そして、
BEGIN implicit statics step 1 t= 1.0000E+00 Memory required for implicit mtx strg : 5656794 ls971gpu: symbol lookup error: ls971gpu: undefined symbol: cublasAlloc
落ちてしまった!!!!
これで諦めてはいけない。
LSTC担当者に相談した所、CUDAライブラリの場所ってどうなの?
setenv CUDA_HOME /opt/cuda/lib64 みたいにちゃんと設定してね、次回からリリースノートにも書いておくからさ。
みたいな明快な解答をもらいました。
色々調べた結果、CUDAライブラリバージョンの相違が原因でした。
今回のハードは、CUDAがプレインストールされており、
/usr/local/cuda40/cuda
にあり、バージョンは、4.0.17です。
NVIDIAのサイトから、cudatoolkit_4.1.28_linux_64_rhel5.x.run
をダウンロードして、root権限で
# sh cudatoolkit_4.1.28_linux_64_rhel5.x.run
インストールの場所は、開発元と同じく /opt/cudaにしました。
途中、古いCUDAは消しましょうか?と聞かれますが、
「いいえ、消さないで残したまま」にしました。
どっちでも良かったみたいです。
# vi /etc/ld.so.conf
古いCUDAのライブラリパスをコメントアウト。
/opt/cuda/lib64 を追加
#/sbin/ldconfig
CUDAバージョン4.1.28を入れて lsdyna-gpuが使用できるようになりました。
速くなるのか確認
テストデータ SOLID2.dyn 線形製解析
節点数*192261, ソリッド要素*179000(要素タイプ=18)
Solver Type=5、NCPU=1
結果は、GPUなし=439秒、 GP有り=124秒
かなり速くなったようなので、ベンチマークへ突入します。
ベンチマーク結果
SOLID2 (N*192261, SOLID*179000)
SOLID3 (N*557701, SOLID*540000)
SHELL (N*78481, SHELL*78000)
MASAMUNEによるLSDYNA GPU版テスト結果 (経過時間、秒)
( – は効果見込めないので実施せず)
テスト問題SOLID3を実メモリ上で解くには、64GB程度が必要でした。
今回のハードは、24GBしかないので、SOLID3の赤の数値はアウトオブコア
になってしまい、ディスクIOに時間が取られてしまったことを示しています。
先ずは、シェル要素では確かに効果ありませんでした。
同じソルバタイプ#5では、GPUにより速度向上し、アウトオブコア状態でも
恩恵にあずかれます。 ただし、GPUが効果的な”ソリッド要素らしい”
問題では、ITER(反復解法)も効くわけで、何とも微妙です。
#6BCSソルバは、相当条件の悪いマトリクスで強いはずなので、今回のベンチ
マークでは明らかに不利な結果になりました。
最初にも書きましたが、GPUを買うのみで使用可能。
追加ライセンスは不要です。今後更に速くなると思われます。
GPU版試す、試さない、はユーザの判断にお任せします。