パフォーマンス改善

GPUとCUDAを意識したMPIとの直接通信

NVIDIA GPU上でCUDA-awareライブラリ-MPIを使用するシミュレーションに対して、直接的なGPU通信のサポートが拡張されました。CUDA-aware MPIの検出は、cmake実行時と実行時に行われます。この機能は、主にOpenMPIでテストされていますが、任意のCUDA-aware MPIの実装が使用可能であり、|Gromacs|のthread-MPI実装との併用も可能です。CUDA-aware MPIのサポートはまだ十分にテストされておらず、そのため、現在のリリースでは開発機能として含まれており、慎重にご使用ください。したがって、適切なMPIが検出された場合でも、デフォルトでは直接通信は使用されませんが、GMX_ENABLE_DIRECT_GPU_COMM環境変数を設定することで有効にすることができます。

Issue 3960 Issue 2915

エネルギー最小化のための動的ペアリスト生成

エネルギー最小化、ペアリスト、および並列実行時のドメイン分割は、少なくとも1つの原子がペアリストバッファサイズの半分よりも大きく移動した場合に実行されます。以前は、ペアリストは各ステップで構築されていました。

非相互作用エネルギー計算はSIMDを使用

非相互作用の自由エネルギー計算のパフォーマンスは、SIMDによる高速化により向上します。AVX2-256では、これらのカーネルは4〜8倍速になります。これにより、ほとんどのシステムで顕著な速度向上が期待できます。特に、相互作用計算がボトルネックになっている場合に効果的です。特にGPUを使用する場合、自由エネルギー計算のパフォーマンスは最大3倍向上します。

Issue 2875 Issue 742

パイプラインによるPME-PP GPU間の直接通信

マルチGPUでの直接的なPME-PP GPU間の通信が有効になっている場合、PMEのランクは、PME SpreadおよびSplineカーネル(ここで座標が消費される)における座標の転送と計算をパイプライン化できるようになりました。 各転送からのデータは個別に処理されるため、計算と通信をオーバーラップできます。 これは、特にハードウェア通信インターフェースが複数のGPU間で共有されているシステム(例:マルチGPUサーバーのPCIeまたは複数のノード間のInfiniband)で最も効果を発揮すると予想されます。

Issue 3969

単一のMPIランクを使用したドメイン分割

単一のMPIランク、PME、およびGPUを使用せずに実行する場合、mdrunは現在、ドメイン分割の仕組みを使用して粒子を再配置します。これにより、特に大規模なシステムの場合、パフォーマンスが向上する可能性があります。この動作は、環境変数GMX_DD_SINGLE_RANKを使用して制御できます。

複数の時間ステップでの制限されたGPUサポート

GPUはMTSと組み合わせて使用できますが、現時点では、長時間のステップで長距離の非相互作用力のみを適用(およびCPU上で計算)し、その他のすべてのコンポーネントを各ステップで計算(GPU上で実行可能)する設定に限定されます。

gmx grompp の実行速度が 20~50% 向上

「gmx grompp」のパラメータおよびアトーム検索コード内のループが、より高速に動作するように、よりシンプルで標準的なコードパターンに変換されました。これは、一連の改善の結果です。

CUDAとプロセス-MPIを組み合わせた混合モードでのPME分解のサポート

現在、CUDAバックエンドと組み合わせての混合モードでのPME分解がサポートされています。これは、|Gromacs|が外部プロセス-MPIとCUDAに意識したMPI実装でコンパイルされている場合にのみサポートされます。この機能は十分なテストを受けておらず、デフォルトでは無効になっていますが、GMX_GPU_PME_DECOMPOSITION=1という環境変数を設定することで有効にすることができます。

AmpereクラスのNvidia GPU上で実行する場合のパフォーマンス改善

短距離の非相互作用カーネルのパフォーマンスを最大で12%向上。

Issue 3872