2014-01-14 91 views
3

我正在寻找一种方式将OpenMP作业提交给Grid Engine调度程序,同时指定它应该运行的核心数。相当于LSF的-n选项或PBS的-l个节点= [计数]选项。SGE/UGE/etc。将OpenMP作业提交给多个核心的标准化方法?

当我搜索这个时,我看到一堆答案,指定类似“-pe threaded [内核数量]”的语法。在这些答案中,没有提到必须创建一个名为“线程化”的并行环境。但是当我尝试这种语法时,它失败了,说所请求的并行线程环境不存在。当我输入“qconf -spl”时,我得到的唯一结果是“make”。所以 - 这个“线程化”的并行环境是否应该默认存在,还是必须在集群上手动创建?

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

+1

Grid Engine安装的管理员定义和配置pe(并行环境),所以,不,你不应该指望默认存在一个叫做'threaded'的pe。至于问题的其余部分,我无法提供帮助,因为我有专家管理我使用的集群的幸运位置,所以不必过多地关注自己的本质。 –

回答

5

如果您只有“make”作为可能的并行环境,那么这意味着您的集群上没有设置并行环境。

有两个解决您的问题,根据这些2种情况:

A)你有根/管理员访问群集

B)你不

在情况B ,请让管理员创建一个并行环境。在情况A中,你必须创建一个并行环境。要创建一个新的并行环境中,您必须输入(需要root /管理员权限):

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否则您的工作将花费更多时间进行通信而不是计算。

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

qsub -pe <pe_name> <nb_slots> 

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

否则,即如果群集上没有可用的PE,则不能使用软件的并行版本。

请参阅评论以获取更多信息。

+0

正如OP所述,我们创建了一个与调度程序交互的第三方程序。所以我们非常希望找到一种不依赖于我们控制之外因素的方式 - 即客户是否配置了这些pe,并以某种方式命名它们等等。我们没有任何访问这些客户端系统。我们可以在所有其他调度程序中使用开箱即用的标志来做到这一点 - 这种“不得不配置并行环境”的东西似乎与SGE相当具体。这是100%唯一的方法吗?如果是这样,那么我们实际上没有解决方案可以为我们工作。 :-( – teleute00

+0

这就是说 - 你的OpenMP例子,你有插槽为“9999”,那么它是否适用于任何系统?(也就是说,我们是否可以包含管理员可以运行的脚本,没有我们需要了解系统的任何信息,计算各种排列,等等......? – teleute00

+0

如果有效插槽的数量取决于正在使用的队列,插槽9999不是问题 – Danduk82

相关问题