ADVENTURE_Solid 並列コア数スケーラビリーティーのテスト

Adventure Solid Ver.2.1による大規模解析モデルを使って、並列計算のCPUコア数スケーラビリティーを調べてみました。
用意した計算機はHPワークステーション Z820 , XEON E5-2680(8core, 2.7GHz, オーバードライブ3.5GHz) x 2, 256GBメモリです。
この計算機をWindows上でCINEBENCHを動かすと、以下のような計算速度となります。
      H/T    OD    CINEBENCH
計算スピード
     Yes    Yes      2038cb
Yes    No       1763cb
No     No       1392cb
(H/Tは ハイパースレッディング有無
、ODはCPUオーバードライブ有無)H/T 、ODの設定により、それなりに計算スピードが変わっていく様子がわかります。
今回のテストの目的は、Adventure Solidで並列計算させるときにCPUコア数スケーラビリティー(CPUコア数に従って、計算スピードが上がってゆくのか)、H/Tの影響を調べることにあります。
計算モデルは、Adventure HPからダウンロード可能なPantheonモデルです。BaseDistanceを20.0に設定してメッシュを作成すると
要素数 : 2522万個
節点数 : 3507万個 (自由度1億オーバー)
のメッシュモデルが出来上がります。このモデルを下面固定、自重による弾性応力計算を行います。
部分領域はCPUコア数にかかわらず、1領域あたりの要素数が312になるように設定しています。
Adventure Solidでは領域分割によるハイブリッド計算のため、1領域あたりの要素数を変えることにより、計算スピード、必要メモリ量が変化します。
詳細はAdventure Solidマニュアルをご覧ください。
並列計算の指定は、mpiexec -n ** advsolid-p で実行しています。
今回のメッシュモデルで標準BDD法繰り返し計算させると、215GBメモリが消費されていました。
Fig.1はH/Tをオフにした場合の計算時間のコア数依存性です。

は、マトリクス組み立てに要した時間、は、マトリクス組み立て+繰り返し計算時間(1×10-6以下で収束打ち切り)です。
このグラフを見ると、いろいろ興味深いことが理解できます。
1.(少なくとも弾性計算では)繰り返し計算よりもマトリクス組み立てに3倍ほどの時間が、かかっている。
2.総計算時間は単純に並列コア数に反比例しない。
3.ODの効果は、このように継続的な計算の場合にも効果がある。
4.グラフには載せていませんが、H/Tをオンにして32コアで計算させると16コアの場合よりも、少なくとも2倍以上の時間が必要でした。
次に繰り返し計算の1繰り返しあたりの時間を、コア数依存でプロットしたグラフがFig.2です。
5.(1繰り返しあたり)計算時間はコア数に応じて逆比例の関係にある。
6.ODの効果は、このように繰り返し計算の場合にも効果がある。
繰り返し計算では、きれいなコア数と逆比例した結果が、得られています。
Adventure Solidの領域分割BDD繰り返し計算では、コア数依存の並列計算スケーラビリティーに優れていることが、明白です。
このことは非線形などの大規模計算では、大きなメリットとなります。
マトリクス組み立て時間については、なぜ並列コア数に比例してスピードが上がってゆかないのか理由ははっきりとわかっていません。
考えられる理由として、領域分割の指定方法が適切でない、あるいは1CPUあたりのマルチコア並列(OpenMP)指定とマルチCPU間の並列(OpenMPI)指定の仕方(すなわちmpiexecのオプション指定)に一工夫必要なのかもしれません。
H/Tをオンにすると計算時間が増えてしなうのは、H/Tをオンにすると各コアの処理能力が異なり、静的負荷分散方式では、能力の高いコアの待機時間が生じてしまうためと推測されます。
プロセス並列動的負荷分散法(Advsolid-h)で、改善される可能性があると思われます。
いやあ、BDDの並列繰り返し計算早いですね。1億自由度超えモデルでも高々、1繰り返しあたり十数秒です。恐れ入りました。