SGE/UGE/etc ..将OpenMP作业提交到多个核心的标准化方式?

tel*_*e00 3 multithreading hpc openmp sungridengine

我正在寻找一种方法将OpenMP作业提交给Grid Engine调度程序,同时指定它应运行的核心数.等同于LSF的-n选项,或PBS的-l nodes = [count]选项.

当我搜索这个时,我会看到一堆答案,指定语法如"-pe threaded [核心数]".在这些答案中,没有提到必须创建一个称为"线程"的并行环境.但是,当我尝试这种语法时,它失败了,说请求的并行环境线程不存在.当我输入"qconf -spl"时,我得到的唯一结果就是"make".那么 - 默认情况下这个"线程"并行环境是否存在,或者这是否必须在集群上手动创建?

如果必须手动创建,是否还有其他语法可以将作业提交到不依赖于群集上可配置命名的多个核心?这是为了提交到集群的第三方程序,所以我不想不仅依赖于创建此pe的客户端,而是将其命名为相同等等...我希望-l选项可能有一些东西,但我无法找到任何这样的排列来实现这一目标.

Dan*_*k82 5

如果您只获得"make"并行环境,那么这意味着您的群集上没有设置并行环境.

根据以下两种情况,您的问题有两种解决方案:

A)您拥有群集的root/admin权限

B)你没有

在案例B中,请让管理员创建并行环境.在案例A中,您必须创建并行环境.要创建新的并行环境,您必须键入(需要root/admin权限):

qconf -ap <pe_name>
Run Code Online (Sandbox Code Playgroud)

默认编辑器将以您必须编辑的默认pe_conf文件开头.如果只需要设置openMP并行环境,可以使用以下选项:

pe_name            smp
slots              9999
user_lists         NONE
xuser_lists        NONE
start_proc_args    /bin/true
stop_proc_args     /bin/true
allocation_rule    $pe_slots
control_slaves     FALSE
job_is_first_task  FALSE
urgency_slots      min
accounting_summary TRUE
Run Code Online (Sandbox Code Playgroud)

对于MPI并行环境:

pe_name            mpi
slots              9999
user_lists         NONE
xuser_lists        NONE
start_proc_args    /opt/sge/mpi/startmpi.sh $pe_hostfile
stop_proc_args     /opt/sge/mpi/stopmpi.sh
allocation_rule    $fill_up
control_slaves     FALSE
job_is_first_task  TRUE
urgency_slots      min
accounting_summary TRUE
Run Code Online (Sandbox Code Playgroud)

正如您所注意到的,在后一种情况下,您将SGE指向正确的初始化脚本并为您的MPI配置关闭脚本.在第一种情况下,您只需指向/bin/true.

allocation_rule在这个例子不同.$fill_up意味着SGE将填充它可以找到的部分MPI作业的CPU,而对于smp配置,您只需在同一台机器上分配正确数量的插槽,即$pe_slots.

如果使用MPI,则应使用infiniband等高性能交换机连接节点,否则您的作业将花费更多时间进行通信而不是计算.

编辑:哦,顺便说一句:正确的合成器提交并行环境的作业是有效的:

qsub -pe <pe_name> <nb_slots>
Run Code Online (Sandbox Code Playgroud)

最终编辑:问题的最终答案来自下面的评论.实际上,如果未在群集上设置并行环境(PE),则SGE无法处理多线程作业.如果您没有群集的管理员权限,则必须猜测必须使用的正确PE qconf -spl并检查不同的PE qconf -sp <pe_name>,或者在软件中添加一个允许用户指定必须使用的PE的选项.使用.

否则,即如果群集上没有可用的PE,则无法使用软件的并行版本.

有关详细信息,请参阅注释.