Performance Optimisation and Productivity (POP) プロジェクトの一環として、NAG が本件を担当しました。
Shearwater Reveal は、陸上と海上の時間と深度の解析を行う地震探査データ処理コードです。Shearwater Reveal の陸上地震探査データ処理ツールは、屈折波静補正から最終的な時間と深度のイメージングまで、陸上地震探査データ処理のすべての側面をカバーしています。
NAG の HPC アプリケーションアナリスト Wadud Miah は、Shearwater Reveal アプリケーションの分析を行い、改善案を概念実証(Proof of Concept(PoC))でテストしました。分析の結果、負荷分散、アムダール効率、計算効率には問題は見られませんでした。しかし、高いオーバーヘッドのために OpenMP 効率が低いことが分かりました。
高いオーバーヘッドの原因は、ファイルの読み/書き操作を含む OpenMP クリティカル領域にあることが分かりました。概念実証(Proof of Concept(PoC))では、OpenMP 領域から I/O を取り出し、OpenMP クリティカル領域を使わないようにコードを修正しました。さらに、OpenMP の動的スケジューリングを使用しました。以下のグラフに、静的スケジューリングを用いた PoC コードと動的スケジューリングを用いた PoC コードのスケーラビリティを示します。
動的スケジューリングを用いた PoC コードは、18 スレッドと 24 スレッドでのみパフォーマンスの向上を示しています。これは、ファイル I/O と、一時データの格納に必要なメモリの割り当て/解放によって、逐次実行が増加するためです。
そこで、ファイル I/O とメモリの割り当て/解放を分析から一旦外し、潜在的なパフォーマンスの向上を調べました。結果のグラフを以下に示します。ここで、100% 線形グラフと 80% 線形グラフは CPU 周波数の減少によってスケーリングされています。
結果として、44% のパフォーマンスの向上を示しました。ファイル I/O とメモリの割り当て/解放を取り除いた結果を黄色の線で示します。そのスケーラビリティは線形に近づいています。
引き続き、I/O をより大きな読み/書きサイズにするための改善案と、ディスクから読み込んだデータの再利用を増やすための改善案を出し、最終的に、NAG の分析と改善案に基づいて修正が行われ、フル稼働での計算コストは半分近くになりました。