Bash
使用 SLURM 的註釋中的命令行宏
在我看來,評論就是評論。他們不應該改變程序狀態。可悲的是,SLURM的人不同意。
SLURM 要求 .sh 文件的前面存在以下語法(或類似的語法):
#!/bin/bash #SBATCH --time=5:00:00 #SBATCH --ntasks=8 #SBATCH --mem-per-cpu=1024M MyProgram.exe
MyProgram.exe
以上將送出使用8個處理器在我學校的超級電腦上執行程序的請求。我目前正在對我的程式碼進行基準測試,並希望使用命令行參數來更改處理器的數量。實際上,我想執行以下操作#!/bin/bash #SBATCH --time=5:00:00 #SBATCH --ntasks=%1 #SBATCH --mem-per-cpu=1024M MyProgram.exe
where
%1
將是一個命令行參數。然後我會稱它為sbatch myShScript.sh 123
使用 123 個處理器。當然,這不起作用,因為 bash 將該#SBATCH --ntasks=%1
行解釋為註釋(它是註釋),並且從不在我的命令行參數中替代。有沒有辦法在我的命令行參數中欺騙 SLURM 或 BASH?
SLURM 完成的所有處理(
sbatch
特別是 )都是在呼叫 bash 之前完成的,所以 bash 在這裡幫不了你。腳本可以是任何語言,沒關係:#SBATCH
只是巧合的 bash 註釋,重要的是它們是sbatch
指令。可以在文件中指定選項,以便為特定腳本始終使用相同的參數提供方便的方法。如果您想使用不同的選項,請將它們傳遞到
sbatch
.sbatch
如果您想從某些特定參數建構選項,您可以編寫一個執行的包裝腳本。如果您願意,您可以將作業腳本作為標準輸入(這裡的文件很方便)而不是將其保存在單獨的文件中。#!/bin/sh sbatch --time=5:00:00 --ntasks="$1" --mem-per-cpu=1024M <<'EOF' #!/bin/sh MyProgram.exe EOF