前回のブログの通り、実際にアプリケーションの動作を確認していきます。
今回検証に使用したハードウェア環境、開発環境は以下の1ノードとなります。
HW構成 :CPU AMD EPYC 7702 ( 2.0GHz / 64core ) x 2
Memory 256 GB ( 16 GB 3200 MT/s x 16 )
OS :CentOS 7.6
Compiler:Intel Compiler 19.0.5.281、17.0.7.259
MKL : 上記 Intel Compiler に同梱されているMKLをそれぞれ使用
MPI :IntelMPI 2018 Update 4
まずは HPL での検証を行いました。
HPLは科学的な実計算を行えるアプリケーションではありませんが、数値演算ライブラリ(BLAS)の性能が計算結果に非常に良く反映される事で知られています。
そのため、今回の MKL_DEBUG_CPU_TYPE の設定で、どの程度MKLの処理性能が向上しているのかを見るにはうってつけのアプリケーションと言えます。
HPLを実行した結果が以下の表1になります。
実行条件として、環境変数として ” MKL_DEBUG_CPU_TYPE = 5 ” を設定した場合(表中 ” 設定有り” )としなかった場合(表中”設定無し”)について、それぞれベンチマークを実施しました。
表1中の、”設定無し”、”設定有り” 欄の結果はHPLの実行結果 ( GFlops ) 、”速度向上率”は環境変数設定を無しから有りに変更した場合の速度向上率 (%) となります。
また、これ以降、アプリケーションのビルドの際のCompiler Option は、“ march=core-avx2” を使用しています。
これは、”-xCORE-AVX2” オプションを使用した場合、EPYC ROMEが AVX2向けCPUと認識されないためです。
HPL : version 2.3 N=120000
Intel Compiler 17.0.7 + 同梱MKL | Intel Compiler 19.0.5 + 同梱MKL | |||||
並列数 | 設定無し | 設定有り | 速度向上率 | 設定無し | 設定有り | 速度向上率 |
32並列 | 304.78 | 1382.00 | 456.89 | 1262.50 | 1382.10 | 109.47 |
64並列 | 515.05 | 2161.50 | 419.67 | 1906.80 | 2167.20 | 113.66 |
128並列 | 743.63 | 2667.10 | 358.56 | 2208.40 | 2672.90 | 121.03 |
表1 HPLの動作結果
表にあるとおり、Intel Compiler 17.0.7 + 同梱MKL、Intel Compiler 19.0.5 + 同梱MKL、共に環境変数設定の効果が見られました。
特にIntel Compiler 17.0.7 + 同梱 MKL の場合は環境変数の設定により、3.5倍以上もの大幅な向上率です。
Intel Compiler 19.0.5 + 同梱MKL の場合、速度上昇率は10 ~ 20 %程度ですが、設定有りの場合、Intel Compiler 17.0.7 + 同梱 MKL と同等の性能になっています。
このことより、Intel Compiler 19.0.5 同梱のMKLにおいては、デフォルトの挙動になんらかの変更があり、その結果HPLにおいては EPYC ROME環境により適した動作をしていると考えられます。
次にAmber18の結果です。
実行条件として、環境変数として ” MKL_DEBUG_CPU_TYPE = 5 ” を設定した場合(表中 ” 設定有り” )としなかった場合(表中”設定無し”)について、それぞれベンチマークを実施しました。
表1中の、”設定無し”、”設定有り” 欄の結果は Amber18 の実行結果 ( ns /day ) 、”速度向上率”は環境変数設定を無しから有りに変更した場合の速度向上率 (%) となります。
Amber18: Amber 18 patch 17 – AmberTools 19 patch 11
Input: Cellulose_NVE
Intel Compiler 17.0.7 + 同梱MKL | Intel Compiler 19.0.5 + 同梱MKL | |||||
並列数 | 設定無し | 設定有り | 速度向上率 | 設定無し | 設定有り | 速度向上率 |
32並列 | 3.39 | 3.41 | 100.59 | 3.38 | 3.38 | 100.00 |
64並列 | 5.21 | 5.18 | 99.42 | 5.21 | 5.20 | 99.81 |
128並列 | 5.35 | 5.54 | 103.55 | 5.33 | 5.33 | 100.38 |
Input: nuclesome
Intel Compiler 17.0.7 + 同梱MKL | Intel Compiler 19.0.5 + 同梱MKL | |||||
並列数 | 設定無し | 設定有り | 速度向上率 | 設定無し | 設定有り | 速度向上率 |
32並列 | 0.35 | 0.42 | 120.00 | 0.36 | 0.42 | 116.67 |
64並列 | 0.63 | 0.73 | 115.87 | 0.63 | 0.76 | 120.63 |
128並列 | 0.85 | 0.99 | 116.47 | 0.85 | 0.97 | 114.12 |
表2 Amber18の動作結果
表2を見てわかる通り、Cellulose_NVE の場合は効果が見られませんが、nuclesomeにおいては、最大20%程度の速度向上率が見られました。
この違いが何によって生じているかの原因の1つとして考えられるのが、計算手法の違いです。
Cellulose NVE は計算手法がPME、nuclesome は計算手法がGBですが、過去にもGPU使用時のベンチマークにおいても、前者と後者で傾向が異なる事がありました。
今回もこのように計算手法が異なるために生じた結果であると推測しています。
最後にVASPとなります。
表中の、”設定無し”、”設定有り” 欄の結果はVASPの実行時間 ( 秒 ) であり、速度向上率は環境変数設定を無しから有りに変更した場合の速度向上率 (%) です。
VASP: version 5.4.4p1
Input: 1000原子 PAW GGA計算のインプット
Intel Compiler 17.0.7 + 同梱MKL | Intel Compiler 19.0.5 + 同梱MKL | |||||
並列数 | 設定無し | 設定有り | 速度向上率 | 設定無し | 設定有り | 速度向上率 |
32並列 | 2086.76 | 990.90 | 208.76 | 2035.88 | Err | ー |
64並列 | 1490.07 | 864.55 | 172.35 | 1476.35 | Err | ー |
128並列 | 1270.72 | 934.44 | 135.99 | 1269.34 | Err | ー |
表3 VASPの動作結果
Intel Compiler 17.0.7 + 同梱MKL を使用した場合、パフォーマンスが x 1.5 ~ x 2.0 と非常に大きく改善しました。
一方、Intel Compiler 19.0.5 + 同梱MKL を使用した場合、“ MKL_DEBUG_CPU_TYPE = 5 “ を指定した場合、VASPが大量のWARNINGを出して正常に動作しませんでした。
検証を行ったアプリケーションの数が少ないため、この現象が何が原因で発生しているのかについては現時点では切り分けできていません。
ですが、開発環境の IntelCompiler ( + 同梱MKL ) のVersionを変更しただけで挙動が変わっているうえ、HPLやAmber18で同様の現象が起きていない事から、VASPのソースコードと IntelCompiler 19.0 環境の相性が悪いことが原因である可能性が考えられます。
また、“ MKL_DEBUG_CPU_TYPE = 5 “ を設定した場合、Intel Compiler 17.0.7 + 同梱MKLでビルドしたバイナリにおいて、並列数を64から128に増加させた場合にパフォーマンスが低下していますが、これは、VASPがメモリバンドに多大な負荷をかける特性を持つため、メモリバンドがボトルネックとなったためと考えられます。
以上の結果から、以下のような結論となります。
- MKL_DEBUG_CPU_TYPE=5の設定により、VASP、AMBER18、HPLにおいてパフォーマンスの向上が見られた
- パフォーマンスの向上率はアプリケーションによって異なり、更に、インプット、ビルドに使用したIntelCompilerのVersionでも差が生じる
- アプリケーションと開発環境の組み合わせによっては、安定動作に問題が出る事がある
ベンチマークを実行してみた個人的な印象としては、EPYC ROME環境でMKLを使用するのであれば、環境変数 ” MKL_DEBUG_CPU_TYPE = 5 ” は試してみる価値が大いにあると思いました。
しかし、VASP + IntelCompiler 19 の組み合わせのように、動作に大きな影響がでることもあるようなので、かならず動作結果について確認をすることをお勧めします。