エクソチックな構成のインストールガイド

特別な指示:|Gromacs|を、一般的なシステム以外のシステムで構築するための手順

これらの手順は、GROMACS |バージョン| の構築に関するものです。このドキュメントは、`最新版のインストール手順`の補足として使用されます。

ここに記載されている設定は、正常に動作すると予想されますが、通常のユーザーには推奨されません

SYCL GPUアクセラレーションによるAMDおよびNVIDIA GPUの利用(Intel oneAPI DPC++を使用)

AMDおよびNVIDIAのGPUも、Intel oneAPI BaseKitおよびCodeplay oneAPIプラグインと併用できます。

ほとんどのユーザーには、NVIDIA GPU の場合は CUDA、AMD GPU の場合は AdaptiveCpp を使用することを推奨します。

AMD GPU

Intel oneAPI ツールキット 2024.0 以降、および対応する ROCm のバージョン、および Codeplay プラグイン をインストールした後、以下の手順を実行して環境を設定します。/opt/intel/oneapi/setvars.sh を実行するか、HPC システムで適切な module load コマンドを実行します。

次に、以下のコマンドを使用して GROMACS を設定します (gfxXYZ をターゲットアーキテクチャに置き換えてください):

cmake .. -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx \
         -DGMX_GPU=SYCL -DGMX_SYCL=DPCPP \
         -DGMX_GPU_NB_CLUSTER_SIZE=8 -DGMX_GPU_FFT_LIBRARY=vkfft \
         -DSYCL_CXX_FLAGS_EXTRA='-fsycl-targets=amd_gpu_gfxXYZ'

NVIDIA GPU

Intel oneAPI ツールキット 2024.0 以降、互換性のある CUDA バージョン、および Codeplay プラグイン をインストールした後、以下の手順を実行して環境を設定します。/opt/intel/oneapi/setvars.sh を実行するか、HPC システムで適切な module load コマンドを実行します。

その後、以下のコマンドを使用して GROMACS を設定します。

cmake .. -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx \
         -DGMX_GPU=SYCL -DGMX_SYCL=DPCPP \
         -DGMX_GPU_NB_CLUSTER_SIZE=8 -DGMX_GPU_FFT_LIBRARY=vkfft \
         -DSYCL_CXX_FLAGS_EXTRA=-fsycl-targets=nvptx64-nvidia-cuda

より新しいNVIDIA GPUの場合、特定の計算能力に合わせてコンパイルすることで、パフォーマンスが向上する可能性があります。これは、SYCL_CXX_FLAGS_EXTRA-fsycl-targets パラメータを設定することで実現できます。例えば、NVIDIA A100のようなAmpereアーキテクチャのGPUの場合、SYCL_CXX_FLAGS_EXTRA=-fsycl-targets=nvidia_gpu_sm_80 を設定します。可能な値については、DPC++ユーザーマニュアル に記載されています。

SYCL GPU アクセラレーションによる NVIDIA GPU の利用 (AdaptiveCpp を使用)

ほとんどのユーザーには、NVIDIA GPU の場合は CUDA を使用することをお勧めします。

AdaptiveCpp_をCUDAバックエンドでビルドおよびインストールします(メインのClangを使用することをお勧めします。ROCmにバンドルされたものを使用しないでください)。

次に、以下のコマンドを使用して GROMACS をビルドします(同じコンパイラを使用し、sm_XY ではなくターゲット GPU アーキテクチャを設定してください)。

cmake .. -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ \
         -DGMX_GPU=SYCL -DGMX_SYCL=ACPP -DACPP_TARGETS='cuda:sm_XY'

静的リンク

GROMACS の実行ファイルの動的リンクにより、インストール後のディスク容量が削減されます。そのため、当社が繰り返しテストし、動作を確認しているプラットフォームでは、これがデフォルト設定となっています。一般的には、Linux、Windows、Mac OS X、BSD システムが含まれます。静的バイナリはより多くのスペースを消費しますが、特定のハードウェアや条件では、推奨または必要となる場合があります。特に、MPIライブラリ(例:Cray)を使用して大規模な並列シミュレーションを実行する場合によく使用されます。

  • |Gromacs|の内部ライブラリに、|Gromacs|のバイナリを静的にリンクするために、``-DBUILD_SHARED_LIBS=OFF``を設定します。

  • 外部(システム外)のライブラリを静的にリンクする場合も、-DGMX_PREFER_STATIC_LIBS=ON``を設定します。一般的に``cmake``は利用可能なものを選択するため、このオプションは``cmake``に、静的と共有の両方のライブラリが利用可能な場合に、静的ライブラリを優先するように指示するものです。外部ライブラリの静的版が利用できない場合でも、上記オプションが``ON``であっても、共有ライブラリが使用されます。また、結果として生成されるバイナリは、プラットフォームでそれがデフォルトの場合、システムライブラリに対して動的にリンクされます。静的なシステムライブラリを使用するには、追加のコンパイラ/リンカフラグが必要です(例:-static-libgcc -static-libstdc++``)。

  • 完全静的バイナリセットをリンクしようとする場合、-DGMX_BUILD_SHARED_EXE=OFF を設定します。これにより、CMake が明示的に動的リンクフラグを設定することを防ぎます。このオプションは、-DBUILD_SHARED_LIBS=OFF-DGMX_PREFER_STATIC_LIBS=ON をデフォルトで設定しますが、上記の注意点は適用されます。静的リンクをデフォルトで使用しないコンパイラの場合、必要なフラグを指定する必要があります。Linux では、通常は CFLAGS=-static CXXFLAGS=-static です。

Solaris 上での構築

デフォルトの|Gromacs|プロセッサ検出機能はSolarisでは動作しないため、|Gromacs|をコンパイルする際には -DGMX_HWLOC=on オプションを使用し、CMAKE_PREFIX_PATH にhwlocのヘッダーとライブラリが存在するパスが含まれていることを確認することを強く推奨します。少なくともhwlocのバージョン1.11.8以上を推奨します。

RISC-V と VEC ユニット

GROMACS は RISC-V 上で動作します。VEC ベクトルユニットが利用可能な場合は、非結合カーネルも実行できます。これを有効にするには、CMake のフラグに -DGMX_ENABLE_NBNXM_CPU_VECTORIZATION=on を追加します。Clang コンパイラが必要です。バージョン 19 以降。

もし、どのループがベクトル化されているかを確認したい場合は、CMAKE_CXX_FLAGS-Rpass=loop-vectorize -Rpass-missed=loop-vectorize -Rpass-analysis=loop-vectorize を追加してください。

gmx mdrun を実行する際に、正しいカーネルを選択するために、環境変数 GMX_NBNXN_PLAINC_1X1 を設定してください。

現時点でのコンパイラの早期の段階と不安定性を留意してください。エラーが発生した場合は、-O3 が存在する場合は、CMAKE_CXX_FLAGS-fno-vectorize を追加して、明示的にベクトル化されていないコードのベクトル化を無効にしてみてください。