我正在寻找一种方法将OpenMP作业提交给Grid Engine调度程序,同时指定它应运行的核心数。等同于LSF的 -n 选项,或PBS的 -l nodes = [count] 选项。
当我搜索这个时,我会看到一堆答案,指定语法如“-pe threaded [核心数]”。在这些答案中,没有提到必须创建一个称为“线程”的并行环境。但是,当我尝试这种语法时,它失败了,说请求的并行环境线程不存在。当我输入“qconf -spl”时,我得到的唯一结果就是“make”。那么 - 默认情况下这个“线程”并行环境是否存在,或者这是否必须在集群上手动创建?
如果必须手动创建,是否还有其他语法可以将作业提交到不依赖于群集上可配置命名的多个核心?这是为了提交到集群的第三方程序,所以我不想不仅依赖于创建此pe的客户端,而是将其命名为相同等等...我希望-l选项可能有一些东西,但我没有找到任何排列来实现这一目标。
答案 0 :(得分:5)
如果你只得到" make"作为可能的并行环境,这意味着您的群集上没有设置并行环境。
根据以下两种情况,您的问题有两种解决方案:
A)您拥有群集的root / admin访问权限
B)你没有
如果是B,请让管理员创建并行环境。在案例A中,您必须创建并行环境。要创建新的并行环境,您必须键入(需要root / admin特权):
qconf -ap <pe_name>
默认编辑器将以您必须编辑的默认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
和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
正如您所注意到的,在后一种情况下,您将SGE指向正确的初始化脚本并为您的MPI配置关闭脚本。在第一种情况下,您只需指向/bin/true
。
此示例中的allocation_rule
不同。 $fill_up
表示SGE将填充它可以找到的部分MPI作业的CPU,而对于smp
配置,您只需在同一台机器上分配正确数量的插槽,即$pe_slots
。
如果使用MPI,则应使用高性能开关(例如 infiniband )连接节点,否则您的作业将花费更多时间进行通信而不是计算。
编辑: 哦,顺便说一下:提交具有并行环境的作业的正确合成器是有效的:
qsub -pe <pe_name> <nb_slots>
最终编辑:
问题的最终答案来自下面的评论。实际上,如果未在群集上设置并行环境(PE),则SGE无法处理多线程作业。如果您没有群集的管理员权限,则必须猜测以获取必须使用qconf -spl
的正确PE并使用qconf -sp <pe_name>
检查不同的PE,或者在软件中添加一个选项,允许用户指定必须使用的PE。
否则,即如果群集上没有可用的PE,则无法使用软件的并行版本。
请参阅评论以获取更多信息。