Intel VTuneプロファイラを使ったメモリ使用量の測定法

以下に示すのは,実行バイナリの名前を./a.outとした場合の例です。
適宜「./a.out」を自分の実行バイナリ名に置き換えてください。

ここではアプリケーションの性能概略を測定するapsコマンドを紹介します。

  • Intel oneAPI環境をロード
  • $ source /work/opt/local/bin/enable-oneapi.sh
  • ソースコードをコンパイル
  • 再コンパイルする際は最適化オプションを外すことが推奨されています。

    $ mpiicpx sample.cpp

    プログラムがC言語の場合は mpiipc,Fortranの場合はC言語の場合は mpiifxを使います。

  • ジョブを投入
  • ジョブスクリプトにおいて, srun ./a.outとするところを,以下のように書き換える。

    $ srun aps --result-dir=./results -- ./a.out

    上記は,プロファイル結果をカレントディレクトリ下の resultsに出力する場合の例です。適宜ディレクトリ名を変更してください。

  • プロファイリング結果を取得
  • $ aps-report --all ./results > profile.out

    上記は,プロファイル結果をカレントディレクトリ下の resultsに出力する場合の例です。適宜ディレクトリ名を変更してください。上記コマンドを実行するとプロファイル結果が標準出力されるので, report.outへリダイレクトしています。

  • 結果の確認
  • report.outから実メモリの使用状況を抜粋すると以下のようになります。以下の例は,格子数512^3のメッシュ法を使って64並列(1ノード)で計算して得たレポートです。レポートの末尾あたりに,メモリ使用量(全メモリ使用量およびランク当たりの最大値・最小値,ノード当たりの最大値・最小値)が記載されています。この計算では全プロセスでの合計のメモリ使用量がおよそ80GBであることがわかります。システムMのノードに搭載されたメモリ量(128GB)を下回りますので,システムMの1ノードでの計算が可能と判断できます。

    格子幅を半分にする場合は,メモリ使用量がおおよそ2^3倍(640GB)となり,システムMの1ノードでは計算を実行できなくなります。その場合は以下の選択肢をご検討ください。

    • システムMを8ノード利用する(1ノード当たり64並列の場合。カテゴリAへの申請が必要)。
    • システムPを2ノード利用する(1ノード当たり64並列の場合)。
        
    | Resident Memory Usage per Rank, MB
                Total:         80679.00  (all ranks)
                  MIN:          1247.00  (Rank 0)
                  MAX:          1268.00  (Rank 48)
                  AVG:          1260.61
    
    | Resident Memory Usage per Node, MB
                Total:         80679.00  (all nodes)
                  MIN:         80679.00  (Node cna091)
                  MAX:         80679.00  (Node cna091)
                  AVG:         80679.00