Bash

使用 SLURM 的註釋中的命令行宏

  • November 25, 2014

在我看來,評論就是評論。他們不應該改變程序狀態。可悲的是,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

引用自:https://unix.stackexchange.com/questions/169771