実行方法
このページでは簡単な入力ファイルの例と ABINIT-MP の実行方法について述べる。ここで計算対象は、20 残基から成る小規模タンパク質 TrpCage とする。
ABINIT-MP の実行には、pdb ファイルと併せて、各種の計算オプションを指定する ajf (ABINIT-MP Job File) ファイルが必要となる。以下に、FMO-MP2 計算を行う際の ajf ファイルの一例を示す。
各オプションは、namelist と呼ばれる形式を用いて指定する。なお、namelist 形式による入力は Fortran の機能の一つであり、「&NAMELIST
」と「&END
」又は「/
」の間に各種変数の値を設定することができる。各オプションの詳細については入力ファイルページを参照のこと。
pdb ファイルと ajf ファイルが用意できたら、以下に説明する方法でABINIT-MPを実行する。
単一コアを使用しての FMO 計算
単一コアを使用する場合のインプットファイル例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
単一コアを使用する場合のABINIT-MP実行例
-
単一コアを用いて ABINIT-MP を実行する場合は、以下のようなコマンドを実行する。
1 2
cd /home/username/sample/ abinitmp < TrpCage.ajf >& TrpCage.log
Note
- 単一コアを用いて FMO 計算をすることはあまり想定されないが、ここでは簡単な例として示した。
- この場合、ajf ファイルにおける
Np
の値が 2 以上になっているとエラー終了するので注意する。
-
過去のバージョンにおける入力ファイルを最新版の入力ファイルへ整形する python スクリプト
mkinp.py
がtools
に用意されている。mkinp.py
は入力ファイルで不足しているネームリストの補完とネームリスト記載順序の修正を、自動的に行う。mkinp.py
は入出力ファイルを絶対パスで指定しないと計算環境によってはファイルの読み書きに失敗する。
MPI 並列による FMO 計算
複数のCPUコアを用いて ABINIT-MP を実行する場合には flat MPI 並列を使用する。
MPI並列を使用する場合のインプットファイル例
ここでは、クアッドコアCPU1個と16GBメモリを搭載するノードを4台用いる場合の例を挙げて説明する。
- CNTRLネームリストの Memory には各 MPI プロセスが使用できるメモリ量を指定する。
- MP2 計算などは使用できるメモリ量が大きいほど計算が速くなるため、なるべく大きな値を指定することが望ましい。
- 但し、システムの物理メモリいっぱいにメモリを使用するとメモリの確保がスワップ領域まで入ってしまい逆に計算が遅くなる、計算が落ちてしまうなどの問題があるため、システムの物理メモリの 80% 程度を使用すると良い。
- この例では、1 ノードあたり 16 GB、4 プロセスなので、
Memory
には 3 GBを指定している。
FMOCNTRL
ネームリストのNp
を指定する。Np
は各フラグメントの計算を何個の MPI プロセスを用いて実行するかを指定している。- この値は大きいほどフラグメント1つあたりに使用できるメモリ量が増えて計算が速くなるが、ノードをまたいで並列化するとノード間の通信量増え計算が遅くなる。
- ここでは
4
を指定している。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
MPI 並列を使用する場合の ABINIT-MP 実行例
-
16 コアを使用して ABINIT-MP を実行する場合のコマンドは以下のようになる。
1
mkinp.tcl < /home/username/sample/TrpCage_MP2_631Gd.ajf | mpirun –n 16 -machinefile host01-04 abinitmp >& /home/username/sample/TrpCage_MP2_631Gd.log
-
host01-04 は並列計算を実行するノードを指定したファイルであり、以下は host01 から host04 までの 4 台の計算機においてそれぞれ 4 コア、計 16 コア使用する場合の
machinefile
の例である。1 2 3 4
host01 slots=4 host02 slots=4 host03 slots=4 host04 slots=4
-
Note
計算機クラスタによっては、LSF や SGE などのジョブ管理システムを介してジョブを投入する必要があるが、その方法に関してはシステムごとに異なるため各システム管理者に確認して頂きたい。
MPI 及び OpenMP のハイブリッド並列による FMO 計算
MPI (プロセス並列) と OpenMP (スレッド並列) を組み合わせたハイブリッド並列の FMO 計算を実行するには実行ファイル abinitmp_smp
を用いる (OpenMPとOpen MPIは言葉が似ているが全く違うものであることに注意)。
MPI/OpenMP ハイブリッド並列を使用する場合のインプットファイル
MPI/OpenMPハイブリッド並列を使用する場合は、FMOCNTRLネームリストのNpを1にする。1ノードあたり1プロセスしか実行されないためCNTRLネームリストのMemoryの値はその分を大きくする(ただし、OpenMPでもバッファが必要となるため、残念ながらNp倍とは出来ない)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
MPI/OpenMP ハイブリッド並列を使用する場合の ABINIT-MP 実行例
スレッド並列を 4、プロセス並列を 4 とした MPI/OpenMP ハイブリッド並列計算 (計 16 コア使用) を実施する場合を例に挙げて説明する。
-
実行前に環境変数
OMP_NUM_THREADS
にスレッド並列数を指定する。-
bash
を使っている場合:1
export OMP_NUM_THREADS=4
-
csh
またはtcsh
を使っている場合:1
setenv OMP_NUM_THREADS 4
-
-
abinitmp_smp
を実行する。その際、mpirun
の-n
オプションの引数にはプロセス並列数を指定する。1
mkinp.tcl < /home/username/sample/TrpCage_MP2_631Gd.ajf | mpirun –n 4 -machinefile host01-04 abinitmp_smp >& /home/username/sample/TrpCage_MP2_631Gd.log
-
ここでマシンファイル
host01-04
の例は以下のようになる (各ノードにそれぞれ1プロセスしか実行されないようにする必要があることに注意する)。1 2 3 4
host01 host02 host03 host04
-
Note
計算機クラスタによっては、LSF や SGE などのジョブ管理システムを介してジョブを投入する必要があるが、その方法に関してはシステムごとに異なるため各システム管理者に確認して頂きたい。