2. 目標性能とチューニング手順

本章では、本アプリケーションに対して実施したチューニングにおける前提条件と、チューニングの手順を紹介します。

2.1. 目標性能と前提条件

本アプリケーションに対して実施したチューニングの目標性能と前提条件は以下の通りです。

目標性能

チューニング実施前の A64FX プロセッサでの実行時間は、x86 プロセッサでの実行時間の2倍程度でした。そこで、x86 プロセッサと同程度以上の性能を目指し、実行時間をチューニング実施前の半分以下にすることを目標としました。

前提条件

チューニングを行うにあたり、前提となる条件は以下の通りです。

  • 翻訳条件

  • コンパイラのバージョン:tcsds-1.2.26

  • 翻訳時のオプション: -Ofast -flto -ffj-ocl -Nclang -Koptmsg=2 -funsafe-math-optimizations -Wno-comment -Nlst=t -mllvm

    ※スレッド並列化後は、上記に -Kopenmp を追加しています。

  • 実行条件

  • 評価時に使用したシステム:「富岳」と同じアーキテクチャーを持つ PRIMEHPC FX1000

  • 実行時に使用する主なミドルウェアの版数:tcsds-1.2.26

  • 並列数:10ノード480コア

    ※本アプリケーションを480 MPI 並列で実行。なおスレッド並列化後は特段の記載がない限り480 MPI 並列かつ1スレッド並列で実行。

  • 性能評価用モデル:航空機の翼周辺の流体解析モデル(約1400万要素、定常解析モデル)

    ※通常は定常状態になるまで繰り返し計算しますが、ここでは繰り返し計算の回数を100に固定しました。なお、本モデルは、利用者が求める大規模なシミュレーションよりも規模が小さいですが、本モデルを用いたチューニングにより得られる改善効果は大規模なシミュレーションでも同様に得られると予想されるため、性能評価しやすい本モデルを選択しました。

2.2. チューニング手順

本アプリケーションへのチューニングは以下の手順で実施しました。本節ではその内容と作業の目的を紹介します。詳細については3章( チューニングの作業内容と結果 )で紹介します。

  1. 実行時間の計測

    チューニング効果を検証するための基準として、チューニング実施前のアプリケーション全体の実行時間を計測しました。その際、チューニング効果の見通しを立てやすくするために、主な処理内容に合わせて区分けされた区間(以下、計測区間)の実行時間も計測しました。計測結果は3.1節( 実行時間の計測 )で紹介します。

  2. 関数単位のコストの計測

    本アプリケーションは大規模かつ複雑であるため、アプリケーション全体あるいは上述の計測区間に対して詳細なプロファイル情報を収集し分析することは困難です。そこで分析対象を絞るため、富士通製プロファイラ(基本プロファイラ)を利用して、チューニング実施前の関数単位のコストを計測しました。計測結果は3.2節( 関数単位のコストの計測 )で紹介します。なお、富士通製プロファイラの利用方法などについては、「富岳」の利用者ポータルに掲載されている『プロファイラ使用手引書』を参照してください。

  3. チューニングの実施

以下の3-1から3-4までのチューニングの手順を、目標性能達成に向けて繰り返し実施します。3-1から3-4までの手順を1度実施することを、1つのチューニング項目と呼びます。本アプリケーションに対して実施した全てのチューニング項目は3.3.1項( チューニング項目の一覧 )で紹介します。

3-1. チューニング対象を選択

手順2の計測結果を参考に、関数単位のコストからチューニングの優先順位を決め、優先度の高い関数からソースコードを確認し、性能改善の可能性があるループなどがあればチューニング対象の関数としました。また、関数のコストは低いものの、チューニングによってアプリケーション全体に改善効果が期待できるものもあり、そのような関数を対象にした場合もありました。

3-2. 分析

手順3-1で選択した関数や性能改善の可能性のあるループに対して、翻訳時に出力される最適化メッセージや、必要に応じて計測した詳細プロファイラの結果を分析し、チューニング内容を決定しました。なお、チューニングの実施しやすさや改善効果の見通しを考慮して、チューニングの優先順位の変更や実施の断念をする場合もありました。

3-3. 実施

手順3-2で決定したチューニング内容を実施しました。

3-4. 効果の検証

チューニング実施後の性能を評価し、効果を検証しました。なお、検証には主に富士通製プロファイラ(基本プロファイラまたは詳細プロファイラ)を用いました。それぞれの評価方法は以下の通りです。

  • 基本プロファイラを用いた評価

    対象関数とアプリケーション全体のコストの性能改善率を評価しました。

  • 詳細プロファイラを用いた評価

詳細プロファイラをかける区間を限定した上で、ある1つのコアメモリグループに割り当てられた12プロセス分の実行時間の内訳(Cycle Accounting)をチューニング実施前後で比較しました。なお詳細プロファイラをかける区間はチューニング項目によって異なります。

  1. アプリケーション性能の計測と評価

    チューニング実施後、アプリケーション全体の改善効果を確認するために、手順1と同様に実行時間を計測し、評価しました。計測結果は3.3.2項( アプリケーションの改善結果 )で紹介します。今回のチューニングでは「チューニングの実施」を44回実施し、その過程で「アプリケーション性能の計測と評価」を13回実施しました。