gmx nonbonded-benchmark¶
概要¶
gmx nonbonded-benchmark [-o [<.csv>]] [-size <int>] [-nt <int>]
[-simd <enum>] [-coulomb <enum>]
[-interactmodifier <enum>] [-[no]table]
[-combrule <enum>] [-[no]halflj] [-[no]energy]
[-[no]all] [-cutoff <real>] [-iter <int>]
[-warmup <int>] [-[no]cycles] [-[no]time]
説明¶
gmx nonbonded-benchmark は、いくつかの「Nbnxm」非結合ペアカーネルのベンチマークを実行します。非結合ペアカーネルは、MDシミュレーションにおいて最も計算負荷の高い部分であり、通常、実行時間の60〜90%を占めます。そのため、これらのカーネルは高度に最適化されており、同じ物理的な相互作用を計算するために、さまざまな設定が利用可能です。さらに、クーロン相互作用の異なる物理的な扱いと、Lennard-Jones相互作用がない原子に対する最適化も提供されています。Lennard-Jones相互作用の異なる物理的な扱いも存在しますが、このツールでは、最も一般的な扱いである単純なカットオフのみがサポートされています。最後に、フォース出力は常に必要ですが、エネルギー出力は特定のステップでのみ必要です。合計で36の関連するオプションの組み合わせがあります。2つの異なるSIMD設定がサポートされている場合、組み合わせは2倍の72になります。これらの組み合わせは、「-all」オプションを使用して、単一の呼び出しで実行できます。各カーネルの動作は、ハードウェア、システムサイズ、およびカットオフ半径によって決定されるキャッシュ動作に影響されます。スレッドあたりの原子数が大きいほど、L1キャッシュミスを回避するために、より多くのL1キャッシュが必要になります。カットオフ半径は主にデータ再利用に影響を与えます。カットオフが大きくなるほど、より多くのデータ再利用が可能になり、カーネルがキャッシュミスに影響を受けにくくなります。
OpenMP並列化は、計算ノード内の複数のハードウェアスレッドを活用するために使用されます。これらのベンチマークでは、スレッド間の相互作用は、各イテレーションで単一のOpenMP並列領域を開始および終了することを除いてありません。さらに、スレッドは共有キャッシュからのデータの共有と削除を通じて相互作用します。使用するスレッドの数は、`-nt`オプションで設定します。スレッドの親和性は、特にSMT(シングルマルチスレッド)および共有キャッシュを使用する場合に重要です。親和性は、OpenMPライブラリとGOMP_CPU_AFFINITY環境変数を介して設定できます。
このベンチマークツールは、-iter`オプションで設定された回数だけ、複数のカーネルを繰り返し実行することで、その実行時間を計測します。最初にカーネルを1回実行することで、追加の初期キャッシュミスを回避します。時間は、CPU内の効率的で高精度なカウンターから読み取ったサイクル数で記録されます。ただし、これらのサイクル数は実際のクロックサイクルと必ずしも一致しません。各カーネルについて、ツールは、合計サイクル数、1回の実行あたりのサイクル数、および(合計および有効な)サイクルごとのペア間の相互作用の数を報告します。アトムペアリストではなく、クラスタペアリストを使用しているため、カットオフ距離を超える一部のアトムペアについても相互作用が計算されます。これらのペアは有効ではありません(追加のバッファリングには役立ちますが、ここでは重要ではありません)。これは、クラスタペアの設定の結果として発生する副産物です。SIMD 2xMMカーネルは、より小さいクラスタサイズにより、4xMカーネルよりも有効なペアの割合が高くなりますが、合計のペア処理量は低くなります。したがって、このベンチマーク(またはその他のベンチマーク)は、CPUクロックをロックして実行するのが最適です。なぜなら、熱による制限がパフォーマンスに大きく影響する可能性があるからです。もしそれができない場合は、-warmup`オプションを使用して、初期の未計測の実行回数を実行し、プロセッサを事前に暖めることができます。
最も適切な範囲は、0.1~1ミリ秒/イテレーションです。したがって、この範囲の両端をカバーするシステムサイズで実行することが有益です。
-simd``と-table``オプションは、同じ物理計算を実行するための異なる実装を選択します。これらのオプションの選択は、ターゲットハードウェアに合わせて最適化する必要があります。 過去には、FMA(高度な浮動小数点演算)をサポートしていない2コアまたは4コアのSIMD環境でのみ、表形式のEwald補正が有用であることがわかりました。 現代のすべてのアーキテクチャはより広く、FMAをサポートしているため、デフォルトではテーブルを使用しません。 例外は、SIMDをサポートしていないカーネルのみで、テーブルのみを使用します。 オプション``-coulomb``、-combrule、-interactmodifier``および-halflj``は、シミュレーションシステムの力場と組成に依存します。 クラスタ内の原子の半分のみに対してLennard-Jones相互作用を計算することは、水素原子に対してLennard-Jonesを使用しない水に適しています。 MDエンジンでは、原子の半分以下にLJ相互作用を持つクラスタに対して、このカーネルが自動的に使用されます。 最後に、``-energy``オプションは、エネルギーの計算を選択します。これは通常、まれにのみ必要です。
オプション¶
出力ファイルの指定オプション:
-o[<.csv>] (nonbonded-benchmark.csv) (オプション)また、結果をCSV形式で出力することも可能です。
Other options:
-size<int> (1)システムサイズは、この値の3000原子です。
-nt<整数> (1)使用するOpenMPスレッドの数
-simd<enum> (自動)SIMDの種類、自動的にすべてのサポートされているSIMD構成を実行するか、SIMDがサポートされていない場合はSIMDを実行するか: auto, no, 4xm, 2xmm
-coulomb<enum> (ewald)クーロン相互作用の機能的な形式: ewald、反応場
-interactmodifier<enum> (PotShift)クーロン/VdW相互作用モディファイ。'intmod.'列に報告されている項目: PotShift, PotSwitch, ForceSwitch
-[no]table(なし)Ewaldの補正を計算する代わりに、ルックアップ表を使用する
-combrule<enum> (幾何学的な)LJ の組み合わせルール。'comb.' 列に報告された内容: 立方、lb、なし
-[no]halflj(無)半分の原子に対して、LJパラメータの最適化を使用する。結果は「LJ」列に報告されます。
-[no]energy(無)力を計算するだけでなく、エネルギーも計算する
-[no]all(no)すべての36種類のオプションの組み合わせを実行する(クーロン、ハルフ、コンブルルール、インタラクトモディファイ)
-cutoff<実数値> (1)ペアリストと相互作用のカットオフ距離
-iter<int> (100)各カーネルの反復回数
-warmup<int> (0)初期ウォームアップのためのイテレーション数
-[no]cycles(無)「サイクルごとのペア数」ではなく、「ペアごとのサイクル数」を報告してください
-[no]time(無)マイクロ秒ではなく、サイクルではなくレポートしてください