改变不同处理器中的输入参数

时间:2013-03-04 09:54:59

标签: c++ parallel-processing grid openmpi

我有一个具有不同输入参数的程序,它应该在程序中执行相同的功能。如何使每组输入参数在网格中的不同处理器上工作。如果您有任何想法,请帮忙。真的会帮到很多!程序是用C ++编写的

2 个答案:

答案 0 :(得分:1)

这取决于您使用的群集资源管理器。大多数支持所谓的阵列作业,其中运行相同作业的许多实例,并且通过环境传递参数(通常是当前作业的简单整数索引)。这就是我们所说的穷人的并行计算平台:)

由于我只广泛使用了 Sun Grid Engine (现在是 Oracle Grid Engine ,也是名为Open Grid Scheduler和{{3的开源分支机构存在)和 Platform LSF (现在是IBM LSF,也可以作为非常相似的开源Son of Grid Engine作业调度程序使用),我只能写它们(在某种程度上关于Torque) )。

使用SGE,阵列作业可能如下所示:

#!/usr/bin/env zsh
#$ -cwd
#$ -N jobname
#$ -t 1-100
## Other resource requirements
#$ -l h_rt=0:30:00
#$ -l h_mem=1200M
#$ -pe openmp 12

export OMP_NUM_THREADS=12
density=$((SGE_TASK_ID * 0.06))       # zsh specific
/path/to/executable -d density < input_${SGE_TASK_ID} > output_${SGE_TASK_ID}

此处-t 1-100 qsub参数创建了100个任务的数组作业,编号从1100。 SGE传递SGE_TASK_ID环境变量中的当前任务编号。您可以使用它来选择适当的输入文件,也可以使用它来计算其他输入参数。 SGE将使用任务ID自动为作业的输出和错误文件添加后缀。请注意,在$(())中使用浮点文字似乎是zsh - 具体。

Torque中的阵列作业的创建方式与通过-t参数的SGE完全相同。使用2.3 -t之前的Torque版本接受一个参数 - 任务数量,然后将任务从0编号到此数字减去1.从Torque 2.3开始,可以指定与SGE类似的范围:

#!/usr/bin/env zsh
#PBS -N jobname
#PBS -l nodes=1,walltime=00:30:00
#PBS -t 1-100

cd ${PBS_O_WORKDIR}

export OMP_NUM_THREADS=12
density=$((PBS_ARRAYID * 0.06))       # zsh specific
/path/to/executable -d density < input_${PBS_ARRAYID} > output_${PBS_ARRAYID}

与SGE的主要区别在于任务ID环境变量名为PBS_ARRAYID。请参阅Torque手册中的openlava部分。

使用LSF,阵列作业可能如下所示:

#!/usr/bin/env zsh

#BSUB -J jobname[1-100]
# Have separate error file for each job
#BSUB -e error_%I
# Other resource requirements, e.g.
#BSUB -W 0:30
#BSUB -M 1200
#BSUB -n 1
#BSUB -x

export OMP_NUM_THREADS=12
density=$((LSF_JOBINDEX * 0.06))       # zsh specific
/path/to/executable -d density < input_${LSF_JOBINDEX} > output_${LSF_JOBINDEX}

此处在作业名称创建数组作业后附加范围说明[1-100]。 LSF通过LSF_JOBINDEX环境变量传递任务ID。您可以使用与SGE情况完全相同的方式使用它。

答案 1 :(得分:0)

您需要指定您使用的并行范例。 MPI,OpenMP,其他。

通常应用的方法是使用一些通信通道并从“主”过程向所有其他过程发送参数向量。

最常见的是广播参数相同,但主要任务可以迭代一组参数,并通过1对1通信器将每个参数发送给彼此。

有时参数是在一个或一组文件中准备的,每个任务都会读取它自己的设置参数。

一切都取决于您的应用程序部署的站点和作业的规模。即当你在超级计算机上有一百万个任务时,文件方法可能是一个坏主意。