如何在同一台机器上与 pbs 脚本并行计算 16 种不同的模拟

计算科学 Python 并行计算 PBS
2021-12-23 06:42:56

我有一台 32 核的机器,我需要在其上并行运行 16 个不同的动力学模拟。我希望这 16 个作业在同一台机器上并行运行,而不是按顺序运行。16 个动态输入位于不同的文件夹中,它们需要相同的时间才能完成。

pb脚本:

#!/bin/bash -l
#PBS -l nodes=...:ppn=32,walltime=...
#
#PBS -N dynamics

export OMP_NUM_THREADS=32

export PATH=mypath:$PATH

export DIR="my folder"

export WORK=/scratch/Work/

cp -r $DIR/dyn1 $WORK/.

cp -r $DIR/dyn2 $WORK/.

...

cp -r $DIR/dyn3 $WORK/.

cd $WORK

my_dynamic_program1.x 
my_dynamic_program2.x
2个回答

如果您的系统没有作业启动器工具(或者如果 PBS 没有内置该工具),您可以做几件事。

  • 启动所有 16 个进程,并希望操作系统将它们很好地分布在内核上。
  • 启动所有 16 个进程,但在它们前面加上 numactl 以将它们固定到某个核心。
  • 使用 mpirun 但使用以下脚本:

mpi -np 16 parallel_script

你的脚本在哪里:

#!/bin/bash
if [ $PMI_RANK -eq 0 ] ; then 
  ./program1
else if [ $PMI_RANK -eq 1 ] ; then
  ./program2
et cetera.

该变量PMI_RANK可能是系统相关的。

有几个选项,但是这两个是最直接的:

您可以向调度程序提交 16 个不同的作业。

您可以修改脚本以在后台启动程序:

my_dynamic_program1.x &
my_dynamic_program2.x &

&说:开始运行此命令并立即运行下一个命令)

你甚至可以这样做:

cd dir1
./prog1.exe &
cd dir2
./prog2.exe &
...