PBS キューイング システムを使用する複数の計算クラスタにコードを正常にインストールできましたが、SLURM キューイング システムを使用するクラスタにコードをインストールする際に大きな障害にぶつかりました。コードの大部分は正常に実行されますが、コードにはファイル名 (計算ごとに変更されます) を指定する必要があり、標準入力として受け取ることを想定しています。
character*8 name
read (5,'(a8)') name
そして、この標準入力を次の方法でクラスターに提供します。
srun_ps $1/$2.exe << EOD
$2
EOD
ここで、$1 は実行可能ファイルのパス、$2 はファイル名、srun_ps はクラスターで構築された mpi-exec スクリプトのようです。このコードは、私が PBS キューイング システムで使用したクラスターで正常に動作することに注意してください。
ただし、ここで得られるのは、「読み取り中のファイルの終わり、ユニット 5、ファイル stdin」エラーです。
また、ログイン サーバー (ジョブが送信される場所) のコマンド ラインで同様のコマンドを実行すると、次のようになります。
#helloworld.for
charachter*5 name
read(5,A5) name
write(6,A5) name
コマンドライン:
ifort -o helloworld.exe helloworld.for
./helloworld.exe << EOD
hello
EOD
「こんにちは」の正しい出力を提供します。同じジョブをクラスターに送信すると、再び「ファイルの終わり」エラーが発生します。
完全なジョブ送信スクリプトは次のとおりです。
#!/bin/bash
#SBATCH -o /home/Simulation/file.job.o
#SBATCH -D /home/Simulation/
#SBATCH -J file.job
#SBATCH --clusters=mpp1
#SBATCH --get-user-env
#SBATCH --ntasks=12
#SBATCH --time=1:00:00
source /etc/profile.d/modules.sh
/home/script/runjob /home/Simulation/ file
runjob スクリプトの関連部分は次のとおりです (スクリプトの残りの部分は、関連する入力ファイルをコピーし、計算が完了した後にファイルをクリーンアップします)。
#!/bin/sh
time srun_ps $1/$2.exe << EOD
$2
EOD
これはおそらく完全に具体的な問題だと思いますが、アドバイスをいただければ幸いです。
デビッド。