Parallelism
SLURM:如何在作業腳本中送出多個 OpenMP 並行程式碼
我想執行 4 個 python 程式碼,每個程式碼使用 2 個處理器。(並行化在 MKL 內部完成。)
#!/bin/bash #SBATCH -N 1 #SBATCH --ntasks-per-node=4 #SBATCH --cpus-per-task=2 export OMP_NUM_THREADS=2 srun -n 2 python doSVD 1 & srun -n 2 python doSVD 2 & srun -n 2 python doSVD 3 & srun -n 2 python doSVD 4 & wait
當我嘗試執行每個程式碼的兩個副本而不是使用 2 個核心的單個程式碼時。生成 4 個程式碼的正確方法是什麼(每個程式碼使用 2 個處理器)。
以下作品。但它一個接一個地執行每個程式碼。
#!/bin/bash #SBATCH -N 1 #SBATCH --ntasks-per-node=1 #SBATCH --cpus-per-task=2 export OMP_NUM_THREADS=2 srun python doSVD 1 srun python doSVD 2 srun python doSVD 3 srun python doSVD 4 wait
這個答案有點晚了,但這仍然可以為其他人服務:
我認為這裡的問題是您要求使用 –ntasks-per-node=4 執行 4 個任務,並要求每個 python 程序執行 2 個任務(srun -n 2)。相反,您希望每個 python 程序成為執行 2 個執行緒的 1 個任務。
你應該嘗試:
#!/bin/bash #SBATCH -N 1 #SBATCH --ntasks-per-node=4 #SBATCH --cpus-per-task=2 export OMP_NUM_THREADS=2 srun -n 1 -c 2 python doSVD 1 & srun -n 1 -c 2 python doSVD 2 & srun -n 1 -c 2 python doSVD 3 & srun -n 1 -c 2 python doSVD 4 & wait
我認為
-n 1
是預設設置,但編寫它並沒有什麼壞處。如果這仍然不起作用,我們可以嘗試使用作業數組。