インストールガイド

Gromacs の構築入門

これらの手順は、GROMACS |バージョン| の構築に関するものです。また、最新のインストール手順 を確認することも推奨されます。

素早く簡単なインストール

  1. 最新版のCおよびC++コンパイラを入手してください。

  2. CMakeのバージョンが|CMAKE_MINIMUM_REQUIRED_VERSION|またはそれ以降であることを確認してください。

  3. |Gromacs|の最新版のtarボールをダウンロードして展開します。

  4. 別のビルドディレクトリを作成し、そのディレクトリに移動してください。

  5. cmake を、ソースファイルのパスを引数として実行する

  6. makemake check、および ``make install``を実行してください。

  7. GMXRC を使用して GROMACS へのアクセスを得る

または、実行するコマンドのシーケンスとして:

tar xfz gromacs-2027.0-dev.tar.gz
cd gromacs-2027.0-dev
mkdir build
cd build
cmake .. -DGMX_BUILD_OWN_FFTW=ON -DREGRESSIONTEST_DOWNLOAD=ON
make
make check
sudo make install
source /usr/local/gromacs/bin/GMXRC

これにより、最初に必要な FFT ライブラリをダウンロードして構築し、次に GROMACS を構築します。すでに FFTW がインストールされている場合は、cmake の引数からそれを削除できます。全体として、この GROMACS の構築は、cmake が実行されたマシンで正しく、比較的速く動作します。別のマシンでは、正常に動作しない場合や、動作が遅くなる場合があります。GROMACS を使用してハードウェアの最大限のパフォーマンスを得るには、さらに詳細を確認する必要があります。残念ながら、ハードウェア、ライブラリ、コンパイラの相互作用は、ますます複雑になっていくばかりです。

迅速かつ簡素なクラスタのインストール

複数のノードでMPIを使用して実行されることが期待されるクラスタでは、上記と同様のインストールを1つ実行し、もう1つは -DGMX_MPI=on を使用して実行します。 後者の場合は、デフォルトのサフィックス _mpi を使用したバイナリとライブラリがインストールされます(例:gmx_mpi)。 したがって、MPIを使用しないビルドと同じ場所にインストールすることが安全で一般的な方法です。

一般的なインストール手順

上記のとおり、および以下の詳細を参照してください。ただし、適切な値で xxx の代わりに、以下の CMake オプション を使用することを検討してください。

  • -DCMAKE_C_COMPILER=xxx は、使用したい C99 コンパイラの名前(または環境変数 CC)に設定する必要があります。

  • -DCMAKE_CXX_COMPILER=xxx は、使用したい C++17 コンパイラの名前(または環境変数 CXX)に設定する必要があります。

  • -DGMX_MPI=on を指定して、MPI サポート を使用してビルドします。

  • -DGMX_GPU=CUDA を設定して、NVIDIA CUDA サポートを有効にした状態でビルドします。

  • -DGMX_GPU=OpenCL を設定して、OpenCL サポートを有効にした状態でビルドします。

  • -DGMX_GPU=SYCL を指定して、SYCL サポートを有効にした状態でビルドします(デフォルトでは Intel oneAPI DPC++ を使用)。

  • -DGMX_SYCL=ACPP を指定して、AdaptiveCpp (hipSYCL) を使用した SYCL サポート付きでビルドするには、-DGMX_GPU=SYCL も指定する必要があります。

  • -DGMX_SIMD=xxx を指定して、GROMACS が実行されるノードの SIMD サポート レベルを指定します。

  • -DGMX_DOUBLE=on を指定して GROMACS をダブル精度でビルドする(速度が遅く、通常は不要)

  • -DCMAKE_PREFIX_PATH=xxx を指定して、CMake が ライブラリ、ヘッダー、またはプログラム を検索する場所を非標準の場所に設定します。

  • -DCMAKE_INSTALL_PREFIX=xxx を指定して GROMACS を 標準以外の場所 にインストールします (デフォルト: /usr/local/gromacs)

  • -DBUILD_SHARED_LIBS=off を設定することで、共有ライブラリのビルドを停止し、静的リンクを支援します。詳細については、<ref>`静的リンク <install guide static linking>` を参照してください。

  • -DGMX_FFT_LIBRARY=xxx を設定して、FFT サポート のために使用する fftw3mkl、または fftpack ライブラリを選択します。

  • -DCMAKE_BUILD_TYPE=Debug を指定して GROMACS をデバッグモードでビルドする

古いバージョンの構築

古いバージョンの|Gromacs|のインストール手順は、|Gromacs|のドキュメントページ<http://manual.gromacs.org/documentation>で確認できます。

前提条件

プラットフォーム

GROMACS は、多くのオペレーティングシステムおよびアーキテクチャ向けにコンパイルできます。これには、Linux、macOS、Windows のすべてのディストリビューション、および 64 ビット x86 (AMD64/x86-64)、POWER9、ARM v8、RISC-V などの PowerPC アーキテクチャが含まれます。

コンパイラ

GROMACS は、ANSI C99 および C++17 コンパイラと、それらの標準 C/C++ ライブラリを使用して、あらゆるプラットフォームでコンパイルできます。 良好なパフォーマンスを得るには、適切なコンパイラを選択することが重要です。 弊社では、gcc を推奨します。これは、無料で広く利用可能であり、多くの場合、最高のパフォーマンスを提供します。

最新版のコンパイラを使用するように努めてください。当社では、C++17の完全なサポートが必要なため、|Gromacs|チームがサポートする最小コンパイラバージョンは以下のとおりです。

  • GNU (gcc/libstdc++) 11

  • LLVM (clang/libc++) 14

  • マイクロソフト (MSVC) 2019

他のコンパイラも動作する可能性があります(Cray、Pathscale、古いclangなど)、しかし、競合する性能は提供されません。PGIの使用は推奨されません。C++でのパフォーマンスが非常に悪いためです。

GROMACS では、Intel のクラシックコンパイラ (icc/icpc) はサポートされなくなりました。 Intel の最新の clang ベースのコンパイラ (oneAPI から) または gcc を使用してください。

The xlc compiler is not supported and version 16.1 does not compile on POWER architectures for GROMACS-2027.0-dev. We recommend to use the GCC compiler. Note: there are known issues with some versions of GCC 12-14.

また、コンパイラ自体の他に、コンパイラ以外のコンパイラツールチェーンのコンポーネント(例えば、アセンブラまたはリンカー)の最新バージョンも必要となる場合があります。これらのツールは、通常、OSディストリビューションのbinutilsパッケージに含まれています。

C++17 のサポートには、コンパイラと C++ ライブラリの両方で十分なサポートが必要です。 GCC と MSVC コンパイラには、独自の標準ライブラリが含まれており、追加の設定は不要です。 貴社のコンパイラがまた、コンパイラフラグを通じて標準ライブラリを管理している場合、それらは尊重されます。 他のコンパイラの構成については、以下を参照してください。

Linuxでは、clangコンパイラは通常、C++ライブラリとしてg++に付属するlibstdc++を使用します。|Gromacs|を使用する場合、コンパイラがlibstdc++のバージョン|GMX_GCC_MINIMUM_REQUIRED_VERSION|またはそれ以上のバージョンをサポートする必要があります。デフォルトの標準ライブラリが動作しないコンパイラに対して、特定のlibstdc++ライブラリを選択するには、``-DGMX_GPLUSPLUS_PATH=/path/to/g++``オプションを使用してg++へのパスを指定します。その後、|Gromacs|に依存する別のプロジェクトをビルドする場合は、同じコンパイラとlibstdc++を使用するように設定する必要があります。

clangとllvmのlibcxx標準ライブラリを使用してビルドするには、``-DCMAKE_CXX_FLAGS=-stdlib=libc++``を使用します。

もし、Mac OS X上で動作させている場合、Appleは残念ながら、ClangベースのコンパイラでOpenMPのサポートを明示的に無効にしています。そのため、OpenMPサポートなしで実行すると、並列化にはthread-MPIを使用する必要があります。これが、|Gromacs|の設定スクリプトが単に警告を表示するのではなく、停止する理由です。OpenMPを無効にする代わりに、サポートされていない`libomp`をダウンロードするか、自分でコンパイルすることができます。ただし、Mac OSの主要バージョンをアップグレードするたびに、このライブラリを更新する必要があります。あるいは、gccのバージョンをダウンロードすることもできます。ただし、Appleはデフォルトで`/usr/bin/gcc`を自社のコンパイラにリンクしているため、ダウンロードしたgccのバージョンを使用するようにしてください。

すべての非 x86 向けプラットフォームでは、通常、gcc またはベンダーが提供するデフォルトまたは推奨されるコンパイラを使用するのが最善です。以下に、特定の情報についてはご確認ください。

GCC の最新バージョンを Linux OS に追加するには、以下の手順を参照してください。

  • Ubuntu: Ubuntu ツールチェーン PPA のページ

  • RHEL/CentOS: EPEL ページ または RedHat 開発ツールセット

並列化オプションを使用したコンパイル

最高のパフォーマンスを得るためには、|Gromacs|をどのように使用し、どのようなハードウェアで実行するかを検討する必要があります。OpenMP_並列性は|Gromacs|にとって利点となることがよくありますが、このサポートは通常、コンパイラに組み込まれており、自動的に検出されます。

GPUサポート

GROMACS は、さまざまなGPUアクセラレーションオプションをサポートしています。エンドユーザーの方は、以下のオプションを推奨します(ハードウェアに応じて):

  • AMD GPU: SYCL (AdaptiveCpp を使用)

  • Apple M シリーズ: OpenCL

  • Intel GPU: SYCL (Intel oneAPI DPC++ との連携)

  • NVIDIA GPU: CUDA

CUDA

CUDAはNVIDIA GPU向けの推奨バックエンドです。

サポートされているハードウェア:

  • NVIDIA GPU (CUDA ツールキットでサポートされているすべての種類)

Requirements:

  • CUDA ツールキットのバージョン 12.1 またはそれ以降のバージョン

  • GPU (計算能力 5.0 以上)

推奨される方法:

  • 最新版のCUDAバージョンと、お客様のハードウェアに対応したNVIDIAドライバーを使用してください。

  • nvcc のホストコンパイラと、gcc のバージョンを一致させてください(nvcc がサポートしている最新の gcc または clang のバージョンを使用することを推奨します)。

詳細については、「CUDA GPU へのアクセラレーション」のセクションを参照してください。

OpenCL

OpenCLは非推奨ですが、現在Apple MシリーズGPUをサポートする唯一のバックエンドです。

サポートされているハードウェア:

  • AMD GCNベースのGPU(RDNAシリーズのGPU、RX 5500またはRX 6900など)はサポートされていません。

  • Apple M シリーズ GPU

  • Intel GPU (特別なコンパイルオプションが必要です; Intel DataCenter GPU Max はサポートされていません)

  • NVIDIA GPU (ボルタアーキテクチャ以前のモデルのみ; V100やGTX 10xxシリーズなどの最新のGPUはサポートされていません)

Requirements:

  • 最小の OpenCL バージョン unknown。

詳細については、「OpenCL GPU へのアクセラレーション」のセクションを参照してください。

SYCL

SYCLは、IntelおよびAMDのGPU向けの推奨バックエンドです。IntelのGPUを使用する場合は、Intel oneAPI DPC++コンパイラを使用することを推奨します。AMDのGPUを使用する場合は、AdaptiveCppコンパイラとROCmランタイムを使用することを推奨します。

サポートされているハードウェア:

  • AMD GPU: GFX9 (Vega, Raven), CDNAシリーズ、RDNAシリーズ (oneAPIまたはAdaptiveCppのいずれかを使用)

  • Intel GPU: 現在のすべての統合/ディスクリート GPU (oneAPIを使用)

  • NVIDIA GPU: すべての GPU (oneAPI または AdaptiveCpp を使用)

Requirements:

  • oneAPI DPC++ コンパイラ: 2024.0 以降 (NVIDIA/AMD のサポートには Codeplay プラグインが必要です)

  • AdaptiveCpp: 24.02 以降

Limitations:

  • AdaptiveCppでは、Intel GPUとSSCP/汎用コンパイルフローはサポートされていません。

  • AMD と NVIDIA の GPU を使用するには、ROCm または CUDA ツールキットが必要です。

詳細については、「SYCL GPU acceleration Intel」および「SYCL GPU acceleration AMD」のセクションをご覧ください。

HIP

サポートされているハードウェア:

  • AMD GPU: GFX9, CDNA 1/2/3, RDNA 1/2/3 GPU

Requirements:

  • ROCm ランタイム 5.2 以降

Limitations:

  • 利用可能 GROMACS 2025

  • GROMACS 2025では、主要な非結合型カーネルのみをサポート

  • GROMACS 2026では、すべてのオフロード機能がサポートされています

実験版ブランチ: * 残りのAMD固有の最適化を含む実験的な機能ブランチ: HIP機能ブランチ * AMDによるサポート、今後のリリースサイクルで残りのコードを統合することを目的 * 2026リリースと同時に更新され、最新の修正に基づいて構築 * サポートについては、acmnpvに連絡してください

詳細については、「AMD-HIP」のセクションをご覧ください。

重要な注意点
  • 1つのビルドにつき、1つのGPUバックエンドのみを設定できます。

  • CPUコードは常にGPUアクセラレーションと並行して実行されます。

  • 古いハードウェアでパフォーマンスの低下がないかを確認しながら、最新のドライバーを選択してください。

MPI のサポート

GROMACS は、組み込みのスレッド-MPI機能を使用することで、単一のワークステーションの複数のコアで並行して実行できます。 これを有効にするには、ユーザーによる操作は必要ありません。

もし、ネットワーク上の複数のマシンで並行実行したい場合は、MPI 3.0 標準をサポートする MPI ライブラリをインストールする必要があります。 2009 年以降にリリースされた MPI ライブラリのほとんどはこれに対応していますが、GROMACS チームは、最高のパフォーマンスのために、お使いのベンダーのライブラリ、OpenMPI、または MPICH の最新バージョンを使用することを推奨します。

MPIを使用してコンパイルするには、コンパイラを通常の(MPIを使用しない)コンパイラに設定し、CMakeオプションに -DGMX_MPI=on を追加します。MPIコンパイラを使用するコンパイラへの設定も可能ですが、これは必須ではありませんし、推奨されません。

GPU を意識した MPI サポート

複数のGPUを使用したシミュレーションでは、GPUサポート付きのMPIの実装を使用することで、CPUメモリを経由せずに、個別のGPUメモリ空間間で直接通信を行うことが可能となり、これにより、帯域幅とレイテンシが向上することがよくあります。|Gromacs|で現在サポートされているのは、CUDAをターゲットとしたNvidia GPU向けの「CUDA-aware」MPIライブラリを使用することです。詳細については、CUDA-aware MPIの紹介 を参照してください。

CUDAに対応したMPIを使用した直接的なGPU通信を行うには、最新のOpenMPIバージョン(>=4.1.0)と最新のUCXバージョン(>=1.10)を使用することを推奨します。これは、|Gromacs|のCUDA対応サポートに関するほとんどの内部テストがこれらのバージョンを使用して行われたためです。CUDA対応OpenMPIは、`これらのOpenMPIのビルド手順 <https://www.open-mpi.org/faq/?category=buildcuda>`_に従ってビルドできます。

Intel GPU を利用した MPI の GPU 認識機能を使用するには、Intel MPI のバージョン 2018.8 以降を使用してください。このようなバージョンは、2023.0 以降の oneAPI SDK に含まれています。実行時には、LevelZero SYCL バックエンドを使用する必要があります(環境変数 ONEAPI_DEVICE_SELECTOR=level_zero:gpu を設定するだけで通常は問題ありません)。また、MPI 実行環境で GPU 認識機能が有効になっていることを確認してください。詳細については、こちらを参照してください: <https://www.intel.com/content/www/us/en/develop/documentation/mpi-developer-reference-linux/top/environment-variable-reference/gpu-support.html>

AMD GPU を利用した GPU に対応した MPI サポートについては、UCX をサポートする複数の MPI 実装が利用可能です。当社は、これらのバージョン (OpenMPI >= 4.1.4 および UCX >= 1.13) を使用してのテストを実施しているため、最新バージョンをお勧めします。Cray MPICH などの他の MPI 実装も GPU に対応し、ROCm と互換性があります。

GMX_MPI=ON を設定した場合、GROMACS はコンパイル時に、使用している MPI ライブラリで GPU サポートを自動的に検出しようとします。また、検出された場合は、GPU への直接的な通信を有効にします。ただし、GROMACS が既存の GPU 対応 MPI サポートを検出できない場合があります。その場合、実行時に環境変数 GMX_FORCE_GPU_AWARE_MPI=1 を設定することで、手動で有効にすることができます(ただし、このようなケースについては十分なテストが行われていないため、デフォルトのビルドオプションを使用している場合に比べて、結果の正確性を慎重に確認し、問題が発生した場合は報告してください)。

GPUカーネルによる通信をサポートするNVSHMEM

複数のGPUを使用したシミュレーションでは、NVSHMEM が、GPU間での直接通信を可能にするプログラミングインターフェースを提供します。このアプローチは、NVSHMEMのグローバルアドレス空間を活用し、一般的に高い帯域幅と低いレイテンシでの通信を実現します。

この機能のサポートは、現在、NVSHMEM サポート付きでコンパイル(GMX_NVSHMEM=ON)し、NVSHMEM ルートディレクトリ(NVSHMEM_ROOT=<Path-to-NVSHMEM-Lib-Root-dir>)を指定することで有効になっています。この設定はNVIDIA GPUを対象とし、NVSHMEMライブラリを使用して効率的なGPU間でのデータ転送を行います。ただし、NVSHMEMのコンパイルはcuFFTMpと互換性がないため、将来のリリースで修正される可能性があります。

これは実験的な機能です。現在の実装は、小規模なシステム(最大300,000個の粒子)に対しては良好なパフォーマンスを発揮します。将来のリリースでは、NVSHMEMベースの実装が、MPIと比較してすべての入力サイズで高速化されると期待しています。

CMake

GROMACS は CMake ビルドシステムを使用してビルドされます。少なくとも 3.28 のバージョンが必要です。CMake がインストールされているかどうか、およびそのバージョンを確認するには、cmake --version コマンドを使用します。CMake のインストールが必要な場合は、まず、プラットフォームのパッケージ管理システムで適切なバージョンが提供されているかどうかを確認するか、CMake のインストールページ で、プリコンパイルされたバイナリ、ソースコード、およびインストール手順を参照してください。GROMACS チームは、可能な限り最新バージョンの CMake をインストールすることを推奨します。

FFTライブラリ

GROMACS での多くのシミュレーションでは、高速フーリエ変換を大量に使用し、これらの実行に必要なソフトウェアライブラリが必要です。FFTW (バージョン 3 以降のみ) または Intel MKL を推奨します。ライブラリの選択は、cmake -DGMX_FFT_LIBRARY=<name> を使用して設定できます。ここで、<name>fftw3mkl、または fftpack のいずれかです。FFTPACK は、シミュレーションのパフォーマンスが最優先でない場合は、GROMACS にバンドルされており、代替として使用できます。MKL を選択する場合、GROMACS は BLAS および LAPACK 用にも MKL を使用します (「線形代数ライブラリ」を参照)。一般的に、GROMACS で MKL を使用することには利点はありません。FFTW は通常、より高速です。CUDA を使用した PME GPU オフロードのサポートを使用する場合、GPU ベースの FFT ライブラリが必要です。CUDA ベースの GPU FFT ライブラリである cuFFT は、CUDA ツールキットの一部であり (すべての CUDA ビルドで必要) CUDA による GPU 加速を使用する場合、追加のソフトウェアコンポーネントは必要ありません。

FFTW の使用

FFTWは、通常、プラットフォームのパッケージ管理システムを通じて利用可能ですが、これらのパッケージには、互換性やパフォーマンス上の問題が発生する可能性があります。特に、|Gromacs|シミュレーションは通常、「混合」浮動小数点精度で実行され、これはFFTWでの単精度を使用するのに適しています。デフォルトのFFTWパッケージは通常、ダブル精度を使用しており、|Gromacs|にリンクする場合に、FFTWで使用できる適切なコンパイラオプションが使用されていない可能性があります。そのため、|Gromacs|チームは、以下のいずれかの方法を推奨します。

  • Gromacsのインストール時に、FFTWを自動的にダウンロードしてビルドすることを許可します(``cmake -DGMX_BUILD_OWN_FFTW=ON``を使用)。

  • FFTW をソースコードからビルドすること。

ご自身でFFTWをソースからビルドする場合、最新版を入手し、「FFTWのインストールガイド」_に従ってください。FFTWの精度(つまり、単精度/浮動小数点数と倍精度)を選択し、後で|Gromacs|で混合精度または倍精度を使用する場合は、それに合わせてください。FFTWを並列処理またはMPIをサポートするようにコンパイルする必要はありませんが、問題ありません。x86ハードウェアでは、--enable-sse2--enable-avx、および`--enable-avx2`フラグをすべて使用してコンパイルしてください。512ビットのAVXをサポートするIntelプロセッサでは、--enable-avx512`も追加してください。FFTWは、さまざまな命令セット用のコードレットを含む大きなライブラリを作成し、実行時に最も高速なサポートされているものを選択します。SIMDをサポートするARMアーキテクチャでは、--enable-neon`フラグを使用してください。IBM Power8以降のプロセッサでは、`--enable-vsx`フラグを使用してください。Crayを使用している場合は、FFTWインターフェースを使用した特別な修正版(商用版)のFFTWを使用することで、わずかに高速化できる場合があります。

-DGMX_BUILD_OWN_FFTW=ON を使用する方法は、通常の場合にはうまく機能しますが、ninja ビルドシステムを使用したり、クロスコンパイルしたり、カスタムツールチェーン構成を使用したりする場合、Windows では動作しません。 そのような場合は、FFTW を手動でビルドしてください。

MKL の使用

Intel CPU または GPU をターゲットにするには、OneAPI MKL (>=2021.3) を使用し、環境を設定します。例として、次のように実行します。

使用する oneMath インターフェースライブラリ

oneMathインターフェースライブラリ(以前はoneMKLインターフェースライブラリと呼ばれていたもので、Intel oneMKLとは異なるもの)は、cuFFT、rocFFT、またはIntel DPC++とCodeplayのNVIDIAおよびAMD GPU用のプラグインを使用して、|Gromacs|でSYCLバックエンドを使用することを可能にします。使用するには、NVIDIAおよびAMD GPU用のCodeplayのプラグインとともにIntel DPC++をインストールし、必要に応じてCUDAおよび/またはROCmをインストールする必要があります。環境は、上記のMKLの指示に従って初期化する必要があります。

oneMathインターフェースライブラリを使用するには、oneMathドキュメント に記載されている手順に従って、oneMathをダウンロード、ビルド、インストールしてください。また、suitable DFT backends が有効になっていることを確認してください。その後、|Gromacs|をビルドする際には、-DGMX_GPU_FFT_LIBRARY=ONEMATH を設定してください。

ダブルバッチされたFFTライブラリの使用

通常、MKLはIntel GPUでより優れたパフォーマンスを提供しますが、|Gromacs|で非常に大きなFFTサイズを使用する場合に役立つ、Intel製のオープンソースライブラリ <https://github.com/intel/double-batched-fft-library> は、以下のように使用できます。

cmake -DGMX_GPU_FFT_LIBRARY=BBFFT \
      -DCMAKE_PREFIX_PATH=$PATH_TO_BBFFT_INSTALL

注: GROMACS 2023では、このオプションは「DBFFT」という名前で呼ばれていました。

ARM パフォーマンスライブラリの使用

ARM Performance Librariesは、ARMアーキテクチャ向けにFFT変換の実装を提供します。|Gromacs|におけるARMPLに対する、FFTW互換のAPIを通じて、初期段階のサポートを提供します。ARMPLのパスを含むARM HPCツールチェーン環境が設定されていることを前提として(例:`module load Module-Prefix/arm-hpc-compiler-X.Y/armpl/X.Y`のような適切なモジュールをロードすることで)、以下のCMakeオプションを使用してください。

cmake -DGMX_FFT_LIBRARY=fftw3 \
      -DFFTWF_LIBRARY="${ARMPL_DIR}/lib/libarmpl_lp64.so" \
      -DFFTWF_INCLUDE_DIR=${ARMPL_DIR}/include

cuFFTMp の使用

NVIDIA GPUを使用する場合、CUDAビルドでPMEの計算を複数のGPUに分割することが可能です。これには、NVIDIA HPC SDKに同梱されている`cuFFTMp (cuFFT Multi-process) ライブラリ <https://docs.nvidia.com/hpc-sdk/cufftmp>`_を使用して、|Gromacs|をビルドする必要があります。このライブラリは、複数の計算ノード間で分散されたFFTをサポートします。cuFFTMpのサポートを有効にするには、次のcmakeオプションを使用します。

cmake -DGMX_USE_CUFFTMP=ON \
      -DcuFFTMp_ROOT=<path to NVIDIA HPC SDK math_libs folder>

GPU PME分解機能を使用する前に、`cuFFTMp`のハードウェアおよびソフトウェア要件<https://docs.nvidia.com/hpc-sdk/cufftmp/usage/requirements.html>が満たされていることを確認してください。特に、`cuFFTMp`は内部で`NVSHMEM <https://developer.nvidia.com/nvshmem>`を使用しており、`NVSHMEM`と`cuFFTMp`のバージョンが互換性があることが重要です。NVIDIA HPC SDKの一部には、`NVSHMEM`の2つのバージョンが含まれており、`cuFFTMp`に対応するバージョンは、``Linux_x86_64/<SDK_version>/comm_libs/<CUDA_version>/nvshmem_cufftmp_compat``のディレクトリにあります。もしSDKにそのディレクトリが存在しない場合は、``Linux_x86_64/<SDK_version>/comm_libs/<CUDA_version>/nvshmem``にのみ、単一の(互換性のある)バージョンが存在します。コンパイルおよび実行の前に、`LD_LIBRARY_PATH`環境変数を次のように更新することで、バージョンを選択できます。

export LD_LIBRARY_PATH=<path to compatible NVSHMEM folder>/lib:$LD_LIBRARY_PATH

実行時に問題が発生した場合は、NVSHMEM FAQページ を参照することをお勧めします。

使用方法:heFFTe

PMEの計算を複数のGPUに分割することが可能であり、PMEを任意のベンダーのGPUにオフロードして|Gromacs|を構築できます。この場合、`heFFTeライブラリ <https://icl.utk.edu/fft/>`にリンクされたGromacsを使用します。heFFTeは、複数の計算ノード間で分散されたFFTを実行するために、GPUを意識したMPIを使用します。NVIDIA GPUをターゲットにするにはCUDAビルド、IntelまたはAMD GPUをターゲットにするにはSYCLビルドが必要です。heFFTeのサポートを有効にするには、次のcmakeオプションを使用します。

cmake -DGMX_USE_HEFFTE=ON \
      -DHeffte_ROOT=<path to heFFTe folder>

GROMACS と同じ GPU を意識した MPI ライブラリを使用するように heFFTe を設定する必要があります。また、GROMACS で使用される、意図したビルドに対応したサポートも必要です。 理想的には、同じ C++ コンパイラと標準ライブラリを使用してください。 Intel GPU をターゲットする場合は、次のオプションを追加します: -DHeffte_ENABLE_ONEAPI=ON -DHeffte_ONEMKL_ROOT=<oneMKL フォルダへのパス>. AMD GPU をターゲットする場合は、次のオプションを追加します: -DHeffte_ENABLE_ROCM=ON -DHeffte_ROCM_ROOT=<ROCm フォルダへのパス>.

VkFFT の使用

VkFFT は、複数のバックエンドとGPUによる高速フーリエ変換をサポートする多次元のライブラリであり、ベンダーのライブラリのオープンソース代替を提供することを目的としています。

GROMACS は、2つの目的、すなわちGPUプラットフォーム間の互換性とパフォーマンスの向上を実現するために、VkFFTのサポートを含んでいます。VkFFTは、OpenCLおよびSYCLバックエンドで使用できます。

  • SYCL 構築の場合、VkFFTは移植性の高いバックエンドを提供し、現在ではAdaptiveCpp_と`Intel oneAPI DPC++`_を使用して、AMDおよびNVIDIAのGPUで動作します。一般的にrocFFTよりも優れたパフォーマンスを発揮するため、AMDではデフォルトとして推奨されます。ただし、VkFFTはHeFFTe(HeFFTeが必要なPME分解で使用される)との互換性はありません。なぜなら、HeFFTeにはVkFFTのバックエンドがないからです。

  • OpenCL 用のビルドでは、VkFFT は ClFFT の代替となります。macOS ではデフォルトで、Visual Studio でビルドする場合にも使用できます。他のプラットフォームでは、十分にテストされていませんが、ClFFT よりも優れたパフォーマンスを発揮する可能性があり、cmake の設定時に有効にできます。

  • AMD-HIP_の場合、VkFFTがデフォルトのFFTバックエンドとして使用されます。これは、消費用およびデータセンターの両方のハードウェアをサポートしています。

VkFFT のサポートを有効にするには、次の CMake オプションを使用します。

cmake -DGMX_GPU_FFT_LIBRARY=VKFFT

GROMACS は VkFFT とそのソースコードをバンドルしていますが、外部の VkFFT も使用できます(例:バンドルされているバージョンよりも新しい VkFFT のリリースで得られる改善を活用する場合)。その方法は次のとおりです。

cmake -DGMX_GPU_FFT_LIBRARY=VKFFT \
      -DGMX_EXTERNAL_VKFFT=ON -DVKFFT_INCLUDE_DIR=<path to VkFFT directory>

その他のオプションのビルドコンポーネント

  • ハードウェア機能の実行時検出を改善するには、hwlocとの連携を行うことができます。デフォルトでは無効になっていますが、これはすべての環境でサポートされていない可能性があるためです。ただし、hwlocがインストールされている場合は、単に -DGMX_HWLOC=ON を設定するだけで動作するはずです。

  • ハードウェアに最適化されたBLASおよびLAPACKライブラリは、|Gromacs|のいくつかのユーティリティ(主に通常のモードと行列操作に焦点を当てているもの)で使用できますが、通常のシミュレーションにはメリットはありません。これらの設定については、「線形代数ライブラリ」を参照してください。

  • 外部のTNGライブラリを使用して軌跡ファイルの処理を行うには、``-DGMX_EXTERNAL_TNG=yes``を設定します。ただし、TNG |GMX_TNG_MINIMUM_REQUIRED_VERSION|は、|Gromacs|ソースにすでに含まれています。

  • |Gromacs|で使用されるlmfitライブラリは、レベナバーグ・マルカートの曲線フィッティング用です。lmfitの|GMX_LMFIT_REQUIRED_VERSION|バージョンのみがサポートされています。このライブラリの簡略版が|Gromacs|の配布に含まれており、デフォルトのビルドではこのバージョンが使用されます。デフォルトの設定を明示的に有効にするには、-DGMX_USE_LMFIT=internal``を使用します。外部のlmfitライブラリを使用するには、-DGMX_USE_LMFIT=external``を設定し、必要に応じて``CMAKE_PREFIX_PATH``を調整してください。``-DGMX_USE_LMFIT=none``を使用することで、lmfitのサポートを無効にできます。

  • TNGは、一部の軌跡データの圧縮にzlibを使用しています。

  • GROMACS のドキュメントの作成は任意であり、他のソフトウェアが必要です。詳細は、https://manual.gromacs.org/current/dev-manual/documentation-generation.html またはソース内の docs/dev-manual/documentation-generation.rst ファイルを参照してください。

  • |Gromacs|ユーティリティプログラムは、多くの場合、Graceプロットツールに適した形式でデータファイルを生成しますが、これらのファイルを他のプロットツールでも簡単に使用できます。

  • CMake を使用して GROMACS を設定する際に、-DGMX_PYTHON_PACKAGE=ON を設定することで、gmxapi Python パッケージおよび sample_restraint パッケージの追加の CMake ターゲットを有効にし、GROMACS のメイン CMake ビルドから利用できます。これにより、追加のテストとドキュメント生成をサポートします。

GROMACS のビルド

このセクションでは、CMake_を使用した|Gromacs|の一般的なビルドについて説明しますが、これはCMakeの使用方法に関する包括的な議論ではありません。ここでは扱っていない問題が発生した場合、インターネット上の多くのリソースを参照することを推奨します。以下に示す内容は、特にLinux、Mac OS XなどのUnixに似たシステムでのビルドに適用されます。他のプラットフォームについては、以下の専門的な指示を参照してください。

CMakeを使用した設定

CMakeは、システム上で多くのテストを実行し、|Gromacs|の構築方法を判断します。構築に使用するマシンが、ターゲットマシンと同じ場合、デフォルト設定と検出が適切に機能することが保証されます。ただし、構築の特定の側面を制御したい場合、または異なるアーキテクチャを持つバックエンドノードに対して、クラスタヘッドノードでコンパイルする場合は、いくつかの要素を明示的に指定する必要があります。

CMake を使用して GROMACS を構成する最良の方法は、「ソースコード外」でのビルドを行うことです。これは、CMake を実行する別のディレクトリを作成することを意味します。このディレクトリは、ソースコードのディレクトリの外、またはそのサブディレクトリに配置できます。これにより、ソースコードを破損させることなくビルドを試すことができなくなります。したがって、CMake コマンドラインで指定する必要がある唯一の引数は、ビルドしたいコードの CMakeLists.txt ファイルを含むディレクトリの名前です。たとえば、ソースの tarball をダウンロードし、次のように使用します。

tar xzf gromacs-2027.0-dev.tgz
cd gromacs-2027.0-dev
mkdir build-gromacs
cd build-gromacs
cmake ..

``cmake``は、|Gromacs|ビルドシステムによって実行されたテストと検出の結果のシーケンスを報告します。これらの結果は``cmake``キャッシュに保存され、``CMakeCache.txt``に保存されます。このファイルを手動で編集できますが、推奨されません。なぜなら、誤った操作をする可能性があります。別のビルドを行うために、このファイルを移動またはコピーしようとしないでください。なぜなら、ファイルパスは内部にハードコードされているためです。もし問題が発生した場合は、このファイルを削除して、再度``cmake``を実行してください。

もしこの段階で深刻な問題が検出された場合、致命的なエラーと、それを解決するためのいくつかの提案が表示されます。もしどのように対処すればよいか分からない場合は、まずウェブで検索してください(ほとんどのコンピューターの問題には既知の解決策があります!)。その後、`user discussion forum`_を参照してください。また、役立つ情報や注意喚起も含まれています。`cmake`の出力を`less`や`tee`でパイプすることも有効です。

cmake が完了したら、curses インターフェースなどを使用して、選択された設定とそれに関する情報を確認できます。

ccmake ..

実際には、``ccmake``(ほとんどのUnixプラットフォームで利用可能)を最初のステップで直接使用することもできますが、その場合、ほとんどのステータスメッセージはターミナルの下部に表示されるだけで、標準出力には書き込まれません。Linux、Windows、Mac OS Xなどのほとんどのプラットフォームには、``cmake``のネイティブなグラフィカルユーザーインターフェースがあり、Visual StudioやXcodeなど、ほとんどのビルド環境用のプロジェクトファイルを生成できます。`running CMake`で、現在表示されている内容や、操作方法、設定変更について一般的なアドバイスを確認してください。通常変更したい設定はすべて表示されています。変更を加えた後、``c``を使用して再構成することで、自分の環境に合わせて変更を行い、より詳細な確認を行うことができます。目的の構成に到達するには、いくつかの構成の試行が必要となる場合があります。特に、エラーを解決する必要がある場合に、そのことが顕著です。

ccmake で目的の構成に達したら、ビルドシステムは g キーを押すことで生成できます。 これには、前の構成が追加の設定を提示しなかったことが必要です(もし提示していた場合は、c キーを使って再度構成する必要があります)。 cmake の場合、エラーが発生しないパスごとにビルドシステムが生成されます。

``cmake``の初期実行後にコンパイラを変更しようとすることはできません。変更、クリーンアップ、再実行が必要な場合は、それを行ってください。

インストール場所 GROMACS

GROMACS は、CMAKE_INSTALL_PREFIX が指し示すディレクトリにインストールされます。これはソースディレクトリまたはビルドディレクトリではない可能性があります。このディレクトリへの書き込み権限が必要です。したがって、管理者権限なしでは、CMAKE_INSTALL_PREFIX はホームディレクトリ内に配置する必要があります。管理者権限がある場合でも、インストールフェーズでのみ使用し、Gromacs の設定、ビルド、実行には使用しないでください!

CMakeコマンドラインオプションの使用

一度、オプションの設定と変更に慣れていれば、GROMACS の設定方法を事前に把握できる場合があります。その場合、cmake を呼び出して、コマンドラインでさまざまなオプションを一度に指定することで、作業を効率化できます。これは、-DOPTION=VALUE を使用して、cmake の呼び出し時にキャッシュ変数を設定することで実現できます。また、CCCXX などの環境変数も考慮されます。

たとえば、次のコマンドライン

cmake .. -DGMX_GPU=CUDA -DGMX_MPI=ON \
         -DCMAKE_INSTALL_PREFIX=/home/marydoe/programs

CUDA GPU、MPI を使用してビルドし、カスタム場所にインストールできます。さらに簡単に実行できるように、これをシェルスクリプトに保存することもできます。同様のことは ccmake でもできますが、-D で設定したオプションは、その ccmake の実行ではインタラクティブに変更できないため、避けることをお勧めします。

SIMD のサポート

GROMACS は、多くの最新のHPC CPU アーキテクチャの SIMD 機能の検出と使用を幅広くサポートしています。 GROMACS を構成しているハードウェア上でビルドする場合、この点については特別な注意は必要ありません。ただし、理解できない構成に関する警告が表示される場合は、確認してください。デフォルトでは、GROMACS のビルドシステムは、構成が行われている CPU アーキテクチャでサポートされている SIMD 命令セットを検出し、それに基づいて GROMACS で利用可能な最適な SIMD 並列化を選択します。また、ビルドシステムは、使用されているコンパイラとリンカも選択された SIMD 命令セットをサポートしているかどうかを確認し、サポートしていない場合は致命的なエラーを発生させます。

有効な値は以下にリストされています。リストの中で最も大きな数値を持つものが、通常は選択すべき値です。ほとんどの場合、不適切な高い数値を選択すると、実行できないバイナリが生成される可能性があります。ただし、一部のプロセッサアーキテクチャでは、最もサポートされている値を選択すると、パフォーマンスが低下する可能性があります(例:Intel Skylake-X/SP および AMD Zen (第1世代))。

  1. None SIMD を搭載していない、または GROMACS がまだポートされていないアーキテクチャでのみ使用してください。以下のオプションのいずれも適用されません。

  2. SSE2 このSIMD命令セットは、2001年にIntelプロセッサ、2003年にAMDプロセッサで導入されました。実質的に存在するすべてのx86マシンはこれに対応しているため、恐竜のような古いx86コンピュータをサポートする必要がある場合は、この選択肢が適している可能性があります。

  3. SSE4.1 は、2007年以降のすべてのIntel Coreプロセッサで搭載されていますが、AMD Magny-Coursでは搭載されていません。しかし、ほとんどの最新プロセッサでサポートされているため、遅いシミュレーションで十分で、ある程度現代的なプロセッサ間の互換性を重視する場合は、この機能をサポートしているプロセッサを選ぶことも可能です。

  4. AVX_128_FMA AMD Bulldozer、Piledriver(および後続のFamily 15h)プロセッサはこれに対応していますが、Zen1以降のAMDプロセッサではサポートされていません。

  5. AVX_256 は、Sandy Bridge (2011) 以降の Intel プロセッサで利用可能です。このコードは、AMD Bulldozer および Piledriver プロセッサでも動作しますが、上記の AVX_128_FMA よりも大幅に効率が低くなります。256 が 128 よりも優れていると誤解しないでください。

  6. AVX2_128:AMD Zen/Zen2およびHygon Dhyanaマイクロアーキテクチャのプロセッサ。3ウェイの融合乗算加算命令を使用したAVX2を有効にします。これらのマイクロアーキテクチャは256ビットのAVX2命令もサポートしていますが、一般的には128ビットの方が高速です。特に、CPU上で非結合タスクを実行する場合に有効です。したがって、デフォルトでは``AVX2_128``が使用されます。ただし、GPUオフロードの場合、Zenプロセッサでは``AVX2_256``の方が高速になる場合があります。

  7. AVX2_256 は、Intel Haswell (およびその後の) プロセッサ (2013年) および AMD Zen3 以降のプロセッサ (2020年) で利用可能です。また、3ウェイの複合乗算加算命令も有効にします。

  8. AVX_512 は、Skylake-X デスクトップおよび Skylake-SP Xeon プロセッサ (2017) および AMD Zen4 (2022) で、Intel では通常、より高性能なデスクトップおよびサーバープロセッサ (2 つの 512 ビットの融合乗算加算ユニットを搭載したもの、例: Core i9 および Xeon Gold) で最も高速です。ただし、一部のデスクトップおよびサーバーモデル (例: Xeon Bronze および Silver) では、AVX512 FMA ユニットが 1 つのみ搭載されているため、これらのプロセッサでは AVX2_256 の方が高速です (コンパイルおよび実行時のチェックは、このようなケースを通知します)。AMD では、Zen4 以降から使用することをお勧めします。さらに、GPU 拡張機能を使用する場合、512 ビットの FMA ユニットの両方が有効な、高性能な Skylake CPU でも AVX2_256 が高速になる場合があります。

  9. ``IBM_VSX``は、Power7、Power8、Power9以降のシステムで利用可能です。

  10. ARM_NEON_ASIMD: ARMv8以降の64ビットARMv8。NVIDIA Grace (ARMv9) で最高のパフォーマンスを得るには、GNU >= 13、LLVM >= 16 を強く推奨します。

  11. ARM_SVE: 64ビットのARMv8以降およびSVE(スケーラブル・ベクトル拡張)をサポート。SVEのベクトルの長さはCMakeの構成時に固定されます。デフォルトのベクトルの長さは自動的に検出され、`GMX_SIMD_ARM_SVE_LENGTH`というCMake変数を使用して変更できます。異なるターゲットアーキテクチャでコンパイルする場合は、`GMX_SIMD_ARM_SVE_LENGTH`をターゲットマシンで実装されているハードウェアベクトルの長さに設定する必要があります。実装されているベクトルの長さよりも小さい値を設定すると、パフォーマンス上のメリットは期待できません。また、大きな値を設定すると予期せぬクラッシュが発生する可能性があります。最小限必要なコンパイラバージョンは、GNU >= 10、LLVM >= 13、またはARM >= 21.1です。最高のパフォーマンスを得るには、最新のgccコンパイラ、または少なくともLLVM 14またはARM 22.0を使用することを強く推奨します。LLVM 13およびArmコンパイラ 21.1を使用した場合、パフォーマンスが低下する可能性があります。

CMake の設定システムは、選択したコンパイラが選択したアーキテクチャをサポートしているかどうかを確認します。 mdrun は実行時にさらに確認するため、不明な場合は、動作する可能性のある最も低い番号を選択し、mdrun の結果を確認してください。 設定システムは、一般的な HPC コンパイラの多くの既知の問題に対処しています。

さらに GMX_SIMD=Reference というオプションがあり、これは開発者が GROMACS で新しい SIMD アーキテクチャ用のサポートを開発する際に使用できる、C言語で記述された特別な SIMD 類似の実装です。これは、本番環境でのシミュレーションには設計されていませんが、GROMACS がまだポートされていない SIMD サポート付きのアーキテクチャを使用している場合は、デフォルトの GMX_SIMD=None ではなく、このオプションを試してみることをお勧めします。なぜなら、コンパイラの自動ベクトル化がうまく機能する場合、このオプションの方が優れたパフォーマンスを発揮することがよくあります。また、GROMACS の user discussion forum で情報を共有してください。GROMACS は、数日以内に新しい SIMD アーキテクチャにポートできる可能性があります。

高度なCMakeオプション

ccmake のデフォルト表示に表示されるオプションは、合理的な数のユーザーが変更を検討する可能性のあるオプションです。 さらに多くのオプションがあり、これらは ccmake の「高度なモード」をオン/オフするコマンド t を使用して確認できます。 ほとんどの変数は、変更したい場合は CMAKE_ または GMX_ というプレフィックスを持っています。 また、一部のオプションは、その前提条件が満たされているかどうかによって表示/非表示になります。

CMake が適切なライブラリ、ヘッダー、またはプログラムを見つけるのを支援する

ライブラリがデフォルト以外の場所にインストールされている場合、以下の変数を使用してその場所を指定できます。

  • CMAKE_INCLUDE_PATH は、ヘッダーファイルのパスを指定するために使用されます。

  • CMAKE_LIBRARY_PATH の設定(ライブラリ用)

  • CMAKE_PREFIX_PATH は、ヘッダーファイル、ライブラリ、および実行可能ファイル(例:/usr/local)のパスを指定するために使用します。

それぞれの includelib、または bin をパスに追加します。これらの変数それぞれについて、パスのリストを指定できます(Unixでは、":"で区切ります)。以下のように環境変数として設定できます:

CMAKE_PREFIX_PATH=/opt/fftw:/opt/cuda cmake ..

bash シェルを想定) alternativately, these variables can also be set as cmake options, such as -DCMAKE_PREFIX_PATH=/opt/fftw:/opt/cuda.

変数 CCCXX は、cmake に使用するコンパイラを指定するために役立ちます。同様に、変数 CFLAGS/CXXFLAGS を使用してコンパイラオプションを渡すことができますが、これらのオプションは、GROMACS によって設定された、およびビルドプラットフォームとビルドタイプに応じて追加されます。高度な CMake オプション、たとえば CMAKE_C_FLAGS および関連変数を使用して、これらの設定をカスタマイズできます。

また、「CMake 環境変数」に関するページを参照してください。

CUDA GPU 加速

CUDA_ Toolkit をインストールしている場合は、次のコマンドを使用して cmake を実行できます。

cmake .. -DGMX_GPU=CUDA -DCUDAToolkit_ROOT=/usr/local/cuda

(または、ご自身のインストールに使用するパスを指定してください)。 状況によっては、使用する C++ コンパイラを明示的に指定する必要がある場合があります。 例えば、CMAKE_CUDA_HOST_COMPILER などの高度なオプションを使用できます。

デフォルトでは、最も一般的なCUDAアーキテクチャ向けにコードが生成されます。ただし、ビルド時間とバイナリサイズを削減するために、すべての可能なアーキテクチャ向けにコードを生成するのではなく、まれなケース(例えば、Tegraシステム)では、デフォルトのビルドが一部のGPUを使用できない場合があります。このような場合、またはバイナリサイズとビルド時間を削減するために特定のアーキテクチャを除外したい場合は、ターゲットとなるCUDAアーキテクチャを変更できます。これは、``CMAKE_CUDA_ARCHITECTURES``というCMake変数を使用して行うことができます。この変数は、セミコロンで区切られた文字列を受け取り、CUDAアーキテクチャ名の2桁または3桁のサフィックスを指定します。例えば、「60;75;86」のように指定します。詳細については、CMakeドキュメントの「CUDA_ARCHITECTURES」セクションを参照してください。<https://cmake.org/cmake/help/v3.28/prop_tgt/CUDA_ARCHITECTURES.html>

GPUアクセラレーションは、LinuxおよびWindowsのオペレーティングシステムとともにAMD64/x86-64プラットフォームでテストされていますが、Linuxは最もテストされ、サポートされているプラットフォームです。POWER 8/9およびARMプロセッサで動作するLinuxも良好に動作します。

実験的なサポートとして、clangを使用してホストとデバイスの両方でCUDAコードをコンパイルできます。CUDAツールキットは引き続き必要ですが、GPUデバイスコードの生成とCUDAランタイムライブラリとのリンクに使用されます。clangによるCUDAサポートは、コンパイルを簡素化し、開発に役立つメリットを提供します(例:CUDAホストコードでコードサニタイザーを使用できます)。また、CPUとGPUの両方のコンパイルにclangを使用することで、GNUツールチェーンとCUDAツールキット間の互換性の問題を回避できる場合があります。``GMX_CLANG_CUDA=ON``というCMakeオプションを使用して、clangによるCUDAコンパイルをトリガーできます。ただし、これは主に開発者向けの機能であり、パフォーマンスはnvccでコンパイルされたコードとほぼ同等です。

OpenCL GPU 加速

GROMACS の OpenCL サポートの主な目的は、AMD および Intel のハードウェア上でシミュレーションを高速化することです。AMD の場合は、ディスクリート GPU と APU(統合 CPU+GPU チップ)の両方を対象とし、Intel の場合は、最新のワークステーションおよびモバイルハードウェアに搭載されている統合 GPU を対象としています。GROMACS の OpenCL は NVIDIA GPU でも動作しますが、パフォーマンスやその他の制限により、実用性が低下します(詳細については、ユーザーガイドを参照)。

GROMACS を OpenCL サポートを有効にした状態でビルドするには、以下の 2 つのコンポーネントが必要です。OpenCL ヘッダーと、クライアントドライバローダーとして機能するラッパーライブラリ(いわゆる ICD ローダー)。追加の、実行時のみの依存関係は、ターゲットデバイス用のベンダー固有の GPU ドライバです。これには OpenCL コンパイラも含まれています。GPU 互換カーネルは実行時にオンデマンドでコンパイルされるため、このベンダー固有のコンパイラとドライバは GROMACS のビルドには必要ありません。一方、コンパイル時に必要な標準的なコンポーネントは、ほとんどの Linux ディストリビューションのレポジトリ(例:Debian/Ubuntu の opencl-headers および ocl-icd-libopencl1)から入手できます。必要な OpenCL バージョン unknown との互換性のみを確保する必要があります。あるいは、ヘッダーとライブラリはベンダー SDK からも入手できます。これらの SDK は、CMAKE_PREFIX_PATH に存在するパスにインストールする必要があります。

OpenCLビルドを開始するには、次のCMakeフラグを設定する必要があります。

cmake .. -DGMX_GPU=OpenCL

Intel統合GPUをサポートしたビルドを行うには、CMakeコマンドラインに -DGMX_GPU_NB_CLUSTER_SIZE=4 を追加する必要があります。これにより、GPUカーネルがハードウェアの特性に適合するように設定されます。Neoドライバー を推奨します。

Mac OSでは、AMD GPUは10.10.4以降のOSバージョンでのみ使用できます。以前のOSバージョンでは、正常に動作しないことが知られています。

デフォルトでは、Linuxでは、システムにインストールされている任意のclFFTライブラリが|Gromacs|で使用されます。ただし、何も見つからない場合は、|Gromacs|に同梱されているバージョンが使用されます。|Gromacs|が外部ライブラリとリンクするようにするには、次の手順を実行してください。

cmake .. -DGMX_GPU=OpenCL -DclFFT_ROOT_DIR=/path/to/your/clFFT \
         -DGMX_EXTERNAL_CLFFT=TRUE

Windows (MSVC) および macOS では、VkFFT が clFFT の代わりに使用されますが、これにより他のプラットフォームでもパフォーマンス向上が期待できます。

SYCL GPU 加速

SYCL_は、複数のハードウェアプラットフォーム(OpenCL_と同様)をターゲットとする、現代的で移植性の高い異種処理APIです。

GROMACS は、以下のハードウェアをターゲットとするために、さまざまな SYCL コンパイラ/ランタイムと組み合わせて使用できます。

  • Intel製のGPUで`Intel oneAPI DPC++`(OpenCLおよびLevelZeroバックエンドの両方を使用)を使用する場合、

  • AMD GPU と AdaptiveCpp (以前は hipSYCL と呼ばれていました)

また、以下の機能については実験的なサポートが提供されています。

表形式で:

GPUメーカー

AdaptiveCpp

Intel oneAPI DPC++

Intel

サポートされていません

サポート

AMD

サポート

実験的(`Codeplayプラグイン <https://developer.codeplay.com/products/oneapi/amd/home/>`_が必要です)

NVIDIA

実験的

実験的(Codeplay プラグイン を使用する必要があります)

ここでは、「実験的なサポート」とは、この組み合わせが限定的なテストを受けており、正常に動作すると予想されています(ただし、制限がある可能性があります)。しかし、本番環境での使用は推奨されていません。使用については、別途インストールガイドの<install guide exotic sycl>のセクションを参照してください。

GROMACS での SYCL サポートは、AMD および Intel のハードウェア向けのアクセレーション機構として、OpenCL を置き換えることを目的としています。

NVIDIAのGPUを使用する場合、CUDAの使用を強く推奨します。Apple M1/M2のGPUはSYCLではサポートされていませんが、OpenCL_を使用できます。

Codeplay ComputeCpp はサポートされていません。オープンソースの Intel LLVM は、Intel oneAPI DPC++ と同様の方法で使用できます。

注意:|Gromacs|およびその基となるコンパイラと実行環境におけるSYCLサポートは、OpenCLまたはCUDAと比較して成熟度が低い。そのため、使用する際はシミュレーションの正確性に特に注意してください。

SYCLによるIntel GPU向けのGPUアクセラレーション

最新の Intel oneAPI DPC++ コンパイラツールキットをインストールする必要があります。 GROMACS 2025 の場合、バージョン 2025.0 を推奨し、2024.0 が最もサポートされているバージョンです。 オープンソースの Intel LLVM を使用することも可能ですが、十分にテストされていません。 また、最新の Neo ドライバー をインストールすることをお勧めします。

ツールキットがインストールされ、環境に設定されている(通常は source /opt/intel/oneapi/setvars.sh を実行するか、HPCシステムで適切な :command:`module load を使用することで)場合、次のCMakeフラグを設定する必要があります。

cmake .. -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx \
         -DGMX_GPU=SYCL -DGMX_SYCL=DPCPP

Intel Data Center GPU Max (別名: Ponte Vecchio / PVC)、Intel Xe2 GPU (Lunar Lake, Arc Battlemage) およびそれ以降のバージョンをコンパイルする場合は、互換性とパフォーマンスの向上に役立つ追加のフラグを指定することをお勧めします。

cmake .. -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx \
         -DGMX_GPU=SYCL -DGMX_SYCL=DPCPP \
         -DGMX_GPU_NB_NUM_CLUSTER_PER_BIN_X=1 -DGMX_GPU_NB_CLUSTER_SIZE=8

注意: GMX_GPU_NB_NUM_CLUSTER_PER_CELL は、GROMACS 2027.0 で名前が変更され、GMX_GPU_NB_NUM_CLUSTER_PER_BIN になりましたが、機能は変更されていません。

また、:ref:`バッチ処理されたFFTライブラリ <bbfft のインストール>`を使用することも検討してください。

AMD GPU向けのSYCL GPUアクセラレーション

AdaptiveCpp 24.02.0 と ROCm 5.7-6.2 の使用が推奨されます。サポートされている最も古いバージョンは AdaptiveCpp 24.02 です。

強く推奨します。AdaptiveCppおよび|Gromacs|の構築には、ROCmに付属のclangコンパイラを使用してください。メインラインのClangリリースも使用できます。

次のCMakeコマンドは、**AdaptiveCppの構成時に、適切なClangが使用されるようにするために使用できます**(「ROCM_PATH」が正しく設定されていることを前提としています。例えば、デフォルトのインストールの場合、`/opt/rocm`に設定されているとします)。

cmake .. -DCMAKE_C_COMPILER=${ROCM_PATH}/llvm/bin/clang \
         -DCMAKE_CXX_COMPILER=${ROCM_PATH}/llvm/bin/clang++ \
         -DLLVM_DIR=${ROCM_PATH}/llvm/lib/cmake/llvm/ \
         -DACPP_COMPILER_FEATURE_PROFILE=minimal

AdaptiveCppをコンパイルおよびインストールした後、以下の設定を使用して|Gromacs|自体をビルドできます(``ACPP_TARGETS``をターゲットハードウェアに設定します)。

cmake .. -DCMAKE_C_COMPILER=${ROCM_PATH}/llvm/bin/clang \
         -DCMAKE_CXX_COMPILER=${ROCM_PATH}/llvm/bin/clang++ \
         -DGMX_GPU=SYCL -DGMX_SYCL=ACPP -DACPP_TARGETS='hip:gfxXYZ'

複数のターゲットアーキテクチャを指定できます。例:「-DACPP_TARGETS='hip:gfx908,gfx90a'」のように。RDNA(「gfx1xyz」)とGCN/CDNA(「gfx9xx」)デバイスを同じビルドで利用することは可能ですが、GCN/CDNAデバイスのみを対象とする場合に比べて、わずかなパフォーマンスの低下が発生します。同じシステムに異なる世代の複数のAMD GPU(例:統合APUとディスクリートGPU)がある場合、ROCmランタイムは、実行時に各デバイスに対してコードが利用可能である必要があるため、「ACPP_TARGETS」ですべてのデバイスを指定する必要があります。これにより、ROCmの初期化時にクラッシュするのを防ぐことができます。

デフォルトでは、VkFFT が GPU 上での FFT 処理に使用されます。 CMake フラグ -DGMX_GPU_FFT_LIBRARY=rocFFT を指定することで、rocFFT に切り替えることができます。ただし、rocFFT は公式にはサポートされておらず、ほとんどの消費用 GPU では動作しない可能性があります。

AMD GPUも Intel oneAPI DPC++ を使用してターゲットできます。詳細なビルド手順については、別セクション を参照してください。

オプション: SYCL GPU コンパイル

以下のフラグは、|Gromacs|を調整するためにCMakeに渡すことができます。

-DGMX_GPU_NB_CLUSTER_SIZE

変更するデータレイアウトは、非バインドされたカーネルです。`Intel oneAPI DPC++`でコンパイルする場合、デフォルト値は4で、これはData Center MAX (Ponte Vecchio)を除くほとんどのIntel GPUにとって最適です。8の方が適しています。`AdaptiveCpp`でコンパイルする場合、デフォルト値は8で、これはAMDおよびNVIDIAデバイスでのみサポートされる値です。

-DGMX_GPU_NB_NUM_CLUSTER_PER_BIN_X-DGMX_GPU_NB_NUM_CLUSTER_PER_BIN_Y-DGMX_GPU_NB_NUM_CLUSTER_PER_BIN_Z

X、Y、またはZ軸方向のペア検索グリッドビンのクラスタ数を設定します。デフォルトは2です。Intel Ponte Vecchio GPUをターゲットとする場合は、``-DGMX_GPU_NB_NUM_CLUSTER_PER_BIN_X=1``を設定し、その他の値をデフォルトのままにします。

-DGMX_GPU_NB_DISABLE_CLUSTER_PAIR_SPLIT

GPU 非結合カーネルにおけるクラスタペア分割を無効にします。これは SYCL でのみサポートされており、AMD GCN および CDNA ファミリーの 64 ウェイの実行環境を持つ GPU で、互換性があり、パフォーマンスを向上させます。このオプションは、GCN または CDNA GPU をターゲットとするすべてのビルドで自動的に有効になります(ただし、RDNA は対象外)。

AMD HIP GPU 加速

HIPは、`ROCm`ツールキットで使用され、AMDデバイスをターゲットとするためのAMDの互換性レイヤーです。

Gromacs 2026では、AMDデバイスでHIPをGPUバックエンドとして使用するための完全なサポートが提供されます。

ビルド手順

HIP をデバイスバックエンドとして使用するには、ROCm ツールキットと、rocPrim ライブラリが含まれている必要があります。 GROMACS が要求する最小バージョンは ROCm 5.2 ですが、ライブラリの改善を活用するために、最新バージョンを使用することをお勧めします。

その後、以下の手順でビルドの設定を行うことができます。

cmake .. -DCMAKE_HIP_COMPILER=${ROCM_PATH}/bin/amdclang++ \
         -DCMAKE_PREFIX_PATH=${ROCM_PATH} \
         -DGMX_GPU=HIP

デフォルトでは、GROMACS はさまざまな CDNA デバイス用のコードを生成します。コード生成の範囲を絞り込んだり、RDNA または GCN デバイスをターゲットにしたりする場合は、このフラグを使用してアーキテクチャを指定できます。

-DGMX_HIP_TARGET_ARCH=gfxXYZ,gfxABCD

64ビットの実行アーキテクチャと32ビット版が存在しない場合、|Gromacs|は自動的に設定を行います。

-DGMX_GPU_NB_DISABLE_CLUSTER_PAIR_SPLIT=ON

パフォーマンスを向上させるために。もし32ビットアーキテクチャが存在する場合は、64ビットアーキテクチャをサポートするデバイスであっても、実行幅は32ビットに制限されます。

Gromacs が明示的に 64 ビットの実行環境でビルドされ、32 ビットのデバイスとの競合状態が存在する場合、検出された 32 ビットのデバイスは使用されません。

GPU FFT バックエンドを選択することは可能です。

-DGMX_GPU_FFT_LIBRARY=rocFFT/VkFFT

変数。rocFFT が動作するためには、ROCm によって公式にサポートされているデバイスのみを使用してください。互換性のないデバイスが検出された場合、GromacsrocFFT とリンクする際に、そのデバイスを使用しません。ただし、残りのコードは rocFFT をサポートするようにコンパイルされています。この場合、VkFFT を GPU FFT ライブラリとして選択してください。

H5MD 軌跡出力ファイル形式

`H5MD`は、HDF5形式を基盤とした分子動力学シミュレーションからの出力データのための仕様です。GROMACS 2026では、これは実験的な機能として追加されます。

ビルド手順

H5MD出力のサポートを有効にするには、`HDF5`ライブラリのインストールが必要です。サポートされている最小バージョンは、|GMX_HDF5_MINIMUM_REQUIRED_VERSION|です。ライブラリがインストールされている場合は、H5MDサポート付きでビルドできます。

cmake .. -DGMX_USE_HDF5=ON

一部のHDF5ライブラリの分散版では、CMakeがパスまたはバージョンを正しく検出できない場合があります。このような場合、``-DHDF5_C_COMPILER_EXECUTABLE=''``(つまり、空の文字列を渡す)を追加することで、問題を解決できる場合があります。

静的リンク

詳細については、専用のセクション を参照してください。

gmxapi C++ API

動的リンクビルドおよびWindows以外のプラットフォームでは、``-DGMXAPI=ON``を設定することで、追加のライブラリとヘッダーがインストールされます(デフォルト)。ビルドターゲット``gmxapi-cppdocs``と``gmxapi-cppdocs-dev``は、それぞれ``docs/api-user``と``docs/api-dev``にドキュメントを生成します。プロジェクトに関する詳細情報や使用例については、追跡中の:issue:2585、関連するGitHubプロジェクト``gmxapi <https://github.com/kassonlab/gmxapi>`_、またはDOI ``10.1093/bioinformatics/bty484 <https://doi.org/10.1093/bioinformatics/bty484>`_を参照してください。

gmxapi は現時点では Windows 環境や静的リンクでのテストは実施されていませんが、これらの使用方法は将来のバージョンでサポートされる予定です。

GROMACS の移植性

A GROMACS のビルドは、通常、同じ基本命令セット(例:x86)を持つハードウェアであっても、異なるハードウェア上でも動作しない可能性があります。ハードウェア固有の最適化は、コンパイル時に選択され、例えば、計算カーネルで使用されるSIMD命令セットなどが含まれます。これらの選択は、ビルドホストマシンの能力に基づいて、または構成時に``cmake``に指定された内容に基づいて、ビルドシステムが行います。

多くの場合、SIMDのサポートの最小共通部分を選択することで、移植性を確保できます。たとえば、x86の場合はSSE2を使用します。非常に古いx86マシンでは、ターゲットCPUアーキテクチャが「RDTSCP」命令をサポートしていない場合、「cmake -DGMX_USE_RDTSCP=off」を使用するようにしてください。ただし、実行環境がAVXや古いハードウェアなど、異なるハードウェアが混在する場合、単一の|Gromacs|インストールを使用することは推奨しません。なぜなら、これにより、特にmdrunなどのプログラムが新しいハードウェア上で動作が遅くなる可能性があります。推奨されるのは、2つの完全なインストールを構築し、適切なものを呼び出す方法をローカルで管理すること(たとえば、モジュールシステムを使用すること)です。あるいは、異なるサフィックスを使用して、同じ場所に複数の|Gromacs|のバージョンをインストールすることも可能です。これを行うには、まず、最小共通のSIMD命令セット(たとえば、「-DGMX_SIMD=SSE2」)を使用して、基本的なコマンド(例:gmx grompp)がすべてのマシンで動作するように、完全なインストールを構築します。次に、異なるアーキテクチャが存在する混在環境に合わせて、特定の「gmx」バイナリを構築します。カスタムバイナリとライブラリのサフィックス(CMake変数「-DGMX_BINARY_SUFFIX=xxx」および「-DGMX_LIBS_SUFFIX=xxx」を使用)を使用して、これらを同じ場所にインストールできます。

異なるGPUでのバイナリの互換性は一般的に優れており、同じベンダーの複数のGPU世代をターゲットとする場合、|Gromacs|の1つのビルドで通常は可能です。CUDA_ビルドは、|Gromacs|のビルドシステムがビルド時にこれらのコードを生成するため、デフォルトで使用されているCUDAツールキットでサポートされている任意のNVIDIA GPUで実行できます。SYCL_を使用する場合、AdaptiveCpp (つまり、AMDまたはNVIDIAのみ) を使用して、同じGPUベンダーの複数のターゲットアーキテクチャを選択できます。AdaptiveCpp_のSSCP/汎用コンパイルモードは現在サポートされていません。OpenCL_を使用する場合、これは問題ではありません。これは、使用されているデバイス用のGPUコードをビルド時にコンパイルするためです。

線形代数ライブラリ

上記のように、ベンダーのBLASおよびLAPACKライブラリは、|Gromacs|で通常のモード解析や共分散解析を行う際に、パフォーマンスの向上をもたらすことがあります。 簡略化のため、以下のテキストではBLASのみを対象としますが、LAPACKにも同様のオプションが利用可能です。 デフォルトでは、CMakeはBLASを検索し、見つかった場合は使用し、それ以外の場合は|Gromacs|に組み込まれたBLASのバージョンを使用します。 ``cmake``オプションで ``-DGMX_EXTERNAL_BLAS=on``を設定します。 組み込みバージョンは、通常の利用には問題ありません。 標準以外のパスを指定する必要がある場合は、 ``-DCMAKE_PREFIX_PATH=/path/to/search``を使用します。 標準的な名前ではないライブラリ(例:PowerマシンでのESSL、ARMマシンでのARMPL)を指定する必要がある場合は、 ``-DGMX_BLAS_USER=/path/to/reach/lib/libwhatever.a``を設定します。

もし、Intel MKL を使用している場合は、それによって提供される BLAS および LAPACK が自動的に使用されます。ただし、GMX_BLAS_USER などの設定でこれを上書きすることができます。

AppleプラットフォームでAccelerate Frameworkが利用可能な場合、BLASおよびLAPACKには自動的に使用されます。ただし、``GMX_BLAS_USER``などの設定でこれを上書きできます。

MiMiC QM/MM サポートを使用したビルド

MiMiC QM/MM インターフェースの統合には、GROMACS と CPMD 間の通信チャネルを確立する MiMiC コミュニケーションライブラリへのリンクが必要です。MiMiC コミュニケーションライブラリは、こちら からダウンロードできます。インストールし、CMake_PREFIX_PATH に MiMiC ライブラリのインストールディレクトリを追加してください(標準的な場所にインストールされていない場合)。QM/MM に対応したバージョンを構築するには、MPI サポート付きの GROMACS のダブル精度版が必要です。

  • -DGMX_DOUBLE=ON -DGMX_MPI=ON -DGMX_MIMIC=ON

CP2K QM/MM サポートを使用したビルド

CP2K QM/MM インターフェースの統合には、GROMACS に CP2K の機能を組み込む libcp2k ライブラリへのリンクが必要です。

  1. CP2K (バージョン8.1以降) をダウンロード、コンパイル、インストールしてください。最新のCP2Kの配布は、こちら からダウンロードできます。CP2K固有の手順については、こちら を参照してください。また、公式CP2Kウェブページ でも手順を確認できます。

  2. 以下のコマンドを実行して、`libcp2k.a`ライブラリを作成します:

    make ARCH=<your arch file> VERSION=<your version like psmp> libcp2k
    

    ライブラリのアーカイブ(例: libcp2k.a)は、:file:`{<cp2k dir>}/lib/{<arch>}/{<version>}/ ディレクトリに存在する必要があります。

  3. Gromacsを:command:`cmake`で設定し、次のフラグを追加します:

    ビルドは静的リンクにする必要があります: -DBUILD_SHARED_LIBS=OFF -DGMXAPI=OFF -DGMX_INSTALL_NBLIB_API=OFF

    一般的に、QM/MM ではダブル精度の方がシングル精度よりも優れています(ただし、どちらのオプションも有効です): -DGMX_DOUBLE=ON

    FFT、BLASおよびLAPACKライブラリは、CP2Kと|Gromacs|で同じものを使用する必要があります。以下のフラグを使用して、これを行うことができます。

    • -DGMX_FFT_LIBRARY=<あなたのライブラリ(例:fftw3)> -DFFTWF_LIBRARY=<ライブラリへのパス> -DFFTWF_INCLUDE_DIR=<ヘッダーファイルを含むディレクトリへのパス>

    • -DGMX_BLAS_USER=<BLASへのパス>

    • -DGMX_LAPACK_USER=<あなたのLAPACKへのパス>

  4. QM/MM インターフェースのコンパイルは、次のフラグによって制御されます:

    -DGMX_CP2K=ON

    QM/MM インターフェースのコンパイルを有効化する

    -DCP2K_DIR="<cp2kのパス>/lib/local/psmp"

    libcp2k.aライブラリを含むディレクトリ

    ``-DCP2K_LINKER_FLAGS="<LDFLAGSとLIBSの組み合わせ>"" (CP2K 9.1 以降のオプション)

    CP2Kで使用されるその他のライブラリ。通常は、CP2Kのコンパイルに使用されたARCHファイルから取得するLDFLAGSとLIBSの組み合わせです。ARCHファイルには、LDFLAGSとLIBSを複数行で定義したり、または「\」を使用して1行を複数に分割したりすることがあります。その場合、すべてのものを1つの長い文字列に連結し、余分なスラッシュや引用符は含めないでください。CP2Kのバージョン9.1以降では、CP2K_LINKER_FLAGSは不要ですが、特定の状況下ではまだ使用されることがあります。

Colvars サポートでのビルド

GROMACS は、ソース配布に Colvars ライブラリ を同梱しています。 ライブラリと GROMACS へのインターフェースは、GROMACS のビルド時にデフォルトで有効になっています。 この動作は、-DGMX_USE_COLVARS=internal を使用して明示的に有効にすることも可能です。 また、-DGMX_USE_COLVARS=none を使用して Colvars のサポートを無効にすることもできます。 GROMACS で Colvars を使用する方法は、ユーザーガイドおよび Colvars ドキュメント に記載されています。

PLUMED サポート付きでのビルド

GROMACS は、ソース配布に PLUMED library のバージョン 2.10 のインターフェースを同梱しています。このインターフェースは、任意のバージョンの PLUMED と互換性があります。通常、GROMACS は Windows でコンパイルされていない場合、デフォルトでこのインターフェースを有効にします。-DGMX_USE_PLUMED=ON を使用して、明示的にインターフェースを有効にするか、-DGMX_USE_PLUMED=OFF を使用して無効にすることができます。デフォルトでは、オプションは AUTO に設定されており、CMake は構成時に PLUMED をアクティブ化しようとします。アクティブ化に失敗した場合は、「ソフト」な警告が表示されます。ユーザーがオプションを ON に強制すると、PLUMED がアクティブ化できない場合、構成はエラーメッセージとともに失敗します。ユーザーガイドには、GROMACS シミュレーションで PLUMED を使用する方法に関する手順が記載されています。

ニューラルネットワーク潜在能力のサポート付きでの構築

GROMACS をニューラルネットワークポテンシャルのサポートで構築するには、適切な機械学習ライブラリを使用してコンパイルする必要があります。 現在、Pytorch でトレーニングされたモデルのみがサポートされています。 GROMACS でこれらのモデルをロードできるようにするには、Pytorch C++ API または Libtorch を使用してコンパイルする必要があります。 Libtorch は Pytorch website からダウンロードできます。 このウェブサイトには、Linux 用の CXX11 および CXX11 ABI のバージョンを含むバージョンを提供しています。 GROMACS の他の部分をコンパイルするときに使用する ABI バージョンと同じ ABI バージョンを使用する必要があります。 この ABI バージョンは、CXX11 をサポートまたはテストしていません。 したがって、CXX11 ABI バージョンの Libtorch を取得 (または構築) してください。 同様に、conda で Pytorch をインストールした場合に付属する Libtorch のバージョンを使用することはできません。 これは、デフォルトで CXX11 ABI を使用して構築されているためです。 Libtorch が CMAKE_PREFIX_PATH または Torch_DIR に設定されている場合、または share/cmake/Torch/ などの libtorch のインストールディレクトリにある TorchConfig.cmake または torch-config.cmake を設定した場合、NNP インターフェースはデフォルトで有効になります。 また、明示的に -DGMX_NNPOT=TORCH で有効にするか、-DGMX_NNPOT=OFF で無効にすることができます。

さらに、GROMACS は、ビルド時に使用できるカスタム Pytorch 拡張機能 を指定するためのサポートを提供します。拡張機能ライブラリへのパスは、TORCH_EXTENSION_PATH 変数を使用して指定できます。注意点として、CMake は指定されたディレクトリで libtorch_extension.so という名前のファイルを探します。

GROMACS のバイナリとライブラリの名前を変更する

同じ|Gromacs|プログラムの異なるバージョンをインストールすることは、場合によっては便利です。最も一般的な使用例は、単精度と倍精度、およびMPIを使用する場合と使用しない場合です。このメカニズムは、以前に述べたように、異なるCPUアーキテクチャ用に最適化された複数のmdrunのバージョンを並行してインストールするためにも使用できます。

デフォルトでは、GROMACS は、このようなビルドのプログラムとライブラリに、ダブル精度用には _d、MPI用には _mpi というサフィックスを自動的に追加します。これは、GMX_DEFAULT_SUFFIX (ON/OFF)GMX_BINARY_SUFFIX (文字列を指定)、および GMX_LIBS_SUFFIX (文字列を指定) を使用して手動で制御できます。たとえば、プログラムとライブラリにカスタムサフィックスを設定するには、次のように指定できます。

cmake .. -DGMX_DEFAULT_SUFFIX=OFF -DGMX_BINARY_SUFFIX=_mod \
         -DGMX_LIBS_SUFFIX=_mod

したがって、すべてのプログラムとライブラリの名前には「_mod」が追加されます。

インストールツリーの構造を変更する

デフォルトでは、CMAKE_INSTALL_PREFIX の下にいくつかの異なるディレクトリが使用されます。これらのうち、一部を変更できます。これは主に、GROMACS をさまざまなディストリビューション向けにパッケージングするために役立ちます。以下にディレクトリをリストアップし、一部について追加の注記を示します。通常、これらのディレクトリは、main CMakeLists.txt 内のインストールパスを編集することで名前を変更できます。

bin/

標準的な場所で、実行ファイルや一部のスクリプトが配置されます。これらのスクリプトには、絶対パスのインストールディレクトリがハードコードされているため、スクリプトを移動する場合は変更する必要があります。ディレクトリ名は、CMAKE_INSTALL_BINDIR CMake変数を変更することで変更できます。

include/gromacs/

標準的なインストール済みヘッダーの場所。

lib/

標準的なライブラリの場所です。デフォルトはシステムによって異なり、CMakeによって決定されます。ディレクトリ名は、``CMAKE_INSTALL_LIBDIR``というCMake変数を変更することで変更できます。

lib/pkgconfig/

libgromacs``ライブラリがインストールされたことに関する情報はこの場所にあります。 ``lib/ の部分は、ライブラリのインストール場所に合わせて調整されます。 インストールされたファイルには、インストールプレフィックスが絶対パスとして含まれています。

share/cmake/

CMake パッケージ構成ファイルは、ここにインストールされます。

share/gromacs/

さまざまなデータファイルと一部のドキュメントはこの場所に配置されます。最初の部分は CMAKE_INSTALL_DATADIR を使用して変更でき、2番目の部分は GMX_INSTALL_DATASUBDIR を使用して変更できます。これらの CMake 変数を使用する方法が、share/gromacs/top/ のインストールパスを変更するための推奨される方法です。このディレクトリへのパスは、libgromacs および一部のスクリプトに、相対パスおよび絶対パス(他のすべての方法が失敗した場合のフォールバック)として組み込まれています。

share/man/

インストールされた man ページはここに配置されます。

コンパイルとリンク

``cmake``で設定が完了したら、``make``を使って|Gromacs|をビルドできます。 正常に完了し、ほとんどまたは全く警告が出ないことが期待されます。 CMakeで実行される設定テストは広範囲ですが、まだ考慮されていないケースがあるかもしれません。 問題解決のための情報を検索しますが、それでも問題が発生した場合は、`user discussion forum`_で質問してください。 可能な限り、行ったこと、使用しているシステム、および発生した問題に関する詳細情報を提供してください。 これには、``make``の出力履歴をスクロールして、最初のエラーメッセージを見つける必要がある場合もあります!

もし、``N``個のプロセッサを持つマルチコアまたはマルチCPUマシンをお持ちの場合、以下の方法を使用してください。

make -j N

これにより、通常は大幅に速度が向上します。 cmake がサポートする他のビルド生成システム(例:ninja)も良好に動作します。

インストール GROMACS

最後に、make install コマンドを実行すると、CMAKE_INSTALL_PREFIX で指定されたディレクトリに GROMACS がインストールされます。もし、このディレクトリがシステムディレクトリの場合、そのディレクトリへの書き込み権限が必要であり、make install コマンドにはのみ、管理者権限を使用し、手順全体には使用しないようにしてください。

GROMACS のインストール後のアクセス方法

GROMACS は、インストールディレクトリの bin サブディレクトリ(例:/usr/local/gromacs/bin/GMXRC)にスクリプト GMXRC をインストールします。このスクリプトは、シェルから source して実行する必要があります。

source /your/installation/prefix/here/bin/GMXRC

Gromacsの使用に必要な環境を自動的に設定します。ログインスクリプトにこの設定を自動化するように設定することも可能です。その方法については、お使いのシェルに関する情報を検索してください。

多くの|Gromacs|プログラムは、インストールディレクトリ内の share/gromacs サブディレクトリにインストールされたデータに依存しています。 デフォルトでは、プログラムは GMXRC スクリプトで設定された環境変数を使用し、このスクリプトが利用できない場合は、プログラム自身の位置に基づいてパスを推測します。 これは通常、インストールツリー内のディレクトリ名を変更しない限り、うまく機能します。 ただし、それでも変更する必要がある場合は、新しいインストール場所を正しく設定してプログラムを再コンパイルするか、GMXRC スクリプトを編集することを検討してください。

GROMACS は、クライアントソフトウェアのビルドを支援するために、CMake キャッシュファイルもインストールします(CMake を使用してクライアントソフトウェアを構成する際に、-C オプション を使用します)。/your/installation/prefix/here へのインストールの場合、以下の場所にヒントファイルがインストールされます:/your/installation/prefix/share/cmake/gromacs${GMX_LIBS_SUFFIX}/gromacs-hints${GMX_LIBS_SUFFIX}.cmake。ここで、${GMX_LIBS_SUFFIX} は、上記のドキュメントで説明されている <suffixes> に従って定義されます。

Gromacs の正しさを検証

2011年以降、|Gromacs|の開発では、コードの変更が多数のプラットフォームとソフトウェアの組み合わせで自動的に回帰テストを受けるシステムが採用されています。これにより、信頼性が大幅に向上していますが、すべてのものがテストされているわけではなく、最新のコンパイラ機能に依存するが増えるため、システムにデフォルトでインストールされているコンパイラにバグがあるリスクは無視できません。私たちは、``cmake``で使用する既知のバグのあるバージョンをテストし、使用しないように努めてきましたが、テストを実行することを強く推奨します。これには数分しかかかりませんが、その後、あなたのビルドを信頼できます。

最も簡単な方法は、|Gromacs|を「-DREGRESSIONTEST_DOWNLOAD」オプションでビルドし、「make check」を実行することです。|Gromacs|は自動的にテストをダウンロードして実行します。 alternativately、|Gromacs|のレグレッションテストスイート|gmx-regressiontests-package|のtarballを手動でダウンロードして展開し、高度な「cmake」オプション「REGRESSIONTEST_PATH」を使用して、展開されたtarballへのパスを指定することができます。これにより、テストが実行されます。上記の方法がうまくいかない場合は、以下の手順を参照してください。

回帰テストは、ダウンロードのセクションからも入手できます。ダウンロード後、tarballを解凍し、上記の手順に従って GMXRC をソースとして読み込み、回帰テストのフォルダ内で ./gmxtest.pl all を実行します。オプションなしでスクリプトを実行した場合、「double」を追加する(double精度を使用する場合)や、「-only expanded」を使用する("expanded" という名前のテストのみを実行する)などのオプションも利用できます。

理想的には、すべてのテストが成功したレポートが得られるはずです。個別のテストが失敗する場合は、コンパイラのバグ、または許容範囲がわずかに狭すぎるという可能性を示している可能性があります。スクリプトが指示する出力ファイルを確認し、エラーが実際に発生している場合は、別のコンパイラまたは新しいコンパイラを試してください。回帰テストをパスできない場合は、|Gromacs|の`user discussion forum`_に問い合わせてみることもできますが、その場合は、ハードウェアの詳細と、``gmx mdrun -version``の出力を含めて、詳細な説明を提供する必要があります(この出力には、ヘッダーに役立つ診断情報が含まれています)。

非標準の拡張子

もし、あなたの gmx プログラムが標準的な方法で修飾されていない場合、./gmxtest.pl -suffix オプションを使用すると、テスト機構にその修飾を指定できます。 ./gmxtest.pl -double を使用して、倍精度版をテストできます。 ./gmxtest.pl -crosscompiling を使用して、テスト機構がプログラムの実行を検証しようとするのを停止できます。 もし、MPIプログラムを実行するためのコマンドが srun と呼ばれている場合、./gmxtest.pl -mpirun srun を使用できます。

MPIをサポートするテストの実行

make check ターゲットも、MPIを使用して実行できる統合テストを実行します(GMX_MPI=ON が設定されている場合)。これにより、さまざまなMPIライブラリとの互換性を確保できます。そのため、mdrun-mpi-test_mpi がシェルコマンドを通じて複数のランクで実行されるように、CMake変数を MPIEXECMPIEXEC_NUMPROC_FLAGMPIEXEC_PREFLAGS および MPIEXEC_POSTFLAGS に設定する必要がある場合があります。

${MPIEXEC} ${MPIEXEC_NUMPROC_FLAG} ${NUMPROC} ${MPIEXEC_PREFLAGS} \
      mdrun-mpi-test_mpi ${MPIEXEC_POSTFLAGS} -otherflags

SLURMの典型的な例は以下のとおりです

cmake .. -DGMX_MPI=on -DMPIEXEC=srun -DMPIEXEC_NUMPROC_FLAG=-n \
         -DMPIEXEC_PREFLAGS= -DMPIEXEC_POSTFLAGS=

パフォーマンスのためのGromacsのテスト

現在、|Gromacs|のパフォーマンスをテストするためのベンチマークシステムセットを開発中です。その完成を待つ間、いくつかの異なる並列化オプションを試して、``gmx tune_pme``などのツールを実験することをお勧めします。

何か問題が発生していますか?

あなたは一人ではありません - これは複雑な作業になる可能性があります! GROMACS のインストールで問題が発生した場合、解決策を見つけるためのいくつかの場所があります。 以下の手順に従うことをお勧めします。

  1. 再度、インストール手順を確認し、すべての手順を正しく実行したことを確認してください。

  2. エラーに関する情報を、|Gromacs|のウェブページ_と`ユーザーディスカッションフォーラム`_で検索してください。Google検索に`site:https://gromacs.bioexcel.eu/c/gromacs-user-forum/5`を追加することで、より適切な結果をフィルタリングできます。また、`gmx-users mailing list archive`_(https://mailman-1.sys.kth.se/pipermail/gromacs.org_gmx-users)も確認することをお勧めします。

  3. Googleなどの検索エンジンを使用してインターネットを検索します。

  4. GROMACS の ユーザーディスカッションフォーラム でサポートを依頼してください。 どのような操作を行ったのか、そしてなぜそれがうまくいかなかったのか、詳細な説明を必ず記載してください。 また、インストールしているシステムに関する情報も提供してください。 コマンドラインと、問題が発生したと思われる関連する出力(特に、問題が最初に発生した時点からのもの)をコピーして貼り付けてください。 特に、mdrun ログファイルのヘッダーを必ず含めてください。 可能な限り、ログファイル全体を共有してください。 助けを求める人が、詳細な質問を繰り返し行う時間がないため、できるだけ多くの情報を提供することで、迅速な回答を得ることができます。 質の高いバグ報告は、迅速かつ質の高い回答を得る傾向があります。

特定のプラットフォームに関する特別な指示

以下のような、あまり一般的でない設定については、:ref:`別の手順書<install guide exotic>`に記載されています。

Windowsでの構築

Windowsでネイティブコンパイラを使用してビルドすることは、Unixでのビルドと非常に似ています。まずは上記の手順を参考にしてください。その後、|Gromacs|のソースアーカイブをダウンロードし、展開します。|Gromacs|のソースからビルドを行うためのフォルダを作成します。例えば、展開したソースアーカイブ内のフォルダ内に作成し、「build-gromacs」という名前を付けます。

CMakeを使用する場合、Windowsで提供されているグラフィカルユーザーインターフェースを使用するか、UNIXと同様の指示を持つコマンドラインシェルを使用できます。IDE(例:Microsoft Visual Studio)からシェルを開くと、環境を自動的に設定しますが、32ビットまたは64ビットのビルド環境を取得するには、設定を調整する必要がある場合があります。後者は最も高速な実行ファイルを生成します。通常のWindowsコマンドラインシェルを使用する場合は、コンパイラとライブラリを見つけるための環境を手動で設定するか、MSVCが提供する``vcvarsall.bat``バッチスクリプトを実行する必要があります(Unixでbashスクリプトをソースするのと同様)。

グラフィカルなユーザーインターフェースを使用する場合、初期設定の段階で、どのコンパイラを使用するかについて尋ねられます。また、コマンドラインを使用する場合は、UNIXと同様の方法で設定できます。

残念ながら、``-DGMX_BUILD_OWN_FFTW=ON``(詳細は`FFTWの使用`を参照)はWindowsでは動作しません。これは、WindowsでFFTWをビルドする方法がサポートされていないためです。FFTWを別の方法(例:MinGW)でビルドするか、組み込みのfftpackを使用するか(ただし、速度が遅くなる可能性があります)、`MKLの使用`を参照してください。

ビルドを行うには、生成されたソリューションファイルをVisual Studioなどのエディタに読み込むか、``cmake --build``コマンドを使用し、適切なツールが使用されるようにします。

Cray を活用する

GROMACS は、最新の Cray 機器でほとんどが標準で動作しますが、静的バイナリの使用を指定するために -DGMX_BUILD_SHARED_EXE=off を指定する必要がある場合があります。また、FFTW をコンパイルする際には、F77 環境変数を ftn に設定する必要がある場合があります。ARM ThunderX2 Cray XC50 機器は、推奨されるコンパイラが ARM HPC コンパイラ (armclang) であることのみが異なります。

NVIDIA Grace

Grace で最高のパフォーマンスを得るには、GCC 13.1 以降または LLVM 17 以降を使用し、GROMACS の設定時に -DCMAKE_CXX_FLAGS=-mcpu=neoverse-v2 -DCMAKE_C_FLAGS=-mcpu=neoverse-v2 のフラグを設定してください。

CPUでの短距離非共有相互作用計算(-nb cpu`またはGPUサポートなしでのビルド時)を行うと、`-DGMX_SIMD=ARM_NEON_ASIMD``のCMakeオプションを設定することで、パフォーマンスを向上させることができます。

最低限、Grace 用に使用されるコンパイラは、GNU 12.3 以降、LLVM 16 以降をサポートする必要があります。 GCC 13 と GCC 12 の間には、Arm のパフォーマンスにおいて顕著な改善が見られます。そのため、GNU 13.1 以降を強く推奨します。 -mcpu=neoverse-v2 フラグを使用することで、コンパイラが古い Armv8-A ターゲットにデフォルトしないことを保証します。

GNUおよびLLVMの両環境において、NEON SIMD``命令を使用した短距離非結合相互作用のCPU版が、SVE版よりも大幅に優れたパフォーマンスを発揮します。これは、コンパイル時に ``GMX_SIMD=ARM_NEON_ASIMD を設定することで選択できます。このカーネル内でのCPU処理において、SVEを使用することでわずかなパフォーマンス向上が見込めるため、GPU上で短距離非結合相互作用を実行する場合は、利用可能な場合はデフォルトオプションである GMX_SIMD=ARM_SVE を使用することを推奨します。

テスト済みプラットフォーム

当社は、|Gromacs|がほとんどの環境で動作することを確信していますが、当社が実際に動作を確認した場所を明確に伝えることが重要です。当社は、以下の環境でテストを行っています。x86環境でgcc 11-14、clang 14、18、19、CUDA 12.1、12.5.1、12.6、nvcxx 24.7、HIP 5.7.1および6.2、AdaptiveCPP 24.02および24.10(それぞれROCm 5.7.1および6.2を使用)、およびoneAPI 2024.0および2024.2(CUDA 12.0.1およびROCm 6.1.3バックエンドを含む)。

このテストでは、Ubuntu 22.04 および 24.04 オペレーティングシステムを使用しています。その他のコンパイラ、ライブラリ、および OS のバージョンは、あまり頻繁にはテストされていません。詳細については、GitLab プロジェクトで使用されている「継続的インテグレーションサーバー <https://gitlab.com/gromacs/gromacs/>」を参照してください。このサーバーは、ローカルの k8s x86 クラスタ上で NVIDIA、AMD、および Intel GPU をサポートする GitLab Runner を使用しています。

当社は、ARM v8、Fujitsu A64FX、Cray、Power9 などの環境、および他のコンパイラやコンパイラバージョンでも、不定期にテストを実施しています。

サポート

詳細については、`マニュアル <http://manual.gromacs.org/>`を参照してください。こちらには、|Gromacs|のすべてのリリースに関するドキュメント、ダウンロード、およびリリースノートが記載されています。

ユーザーフォーラム での議論やアドバイスをご参照ください。

バグは以下のURLで報告してください: https://gitlab.com/gromacs/gromacs/-/issues