我想向我正在使用的群集网络提交多线程作业 - 但关于qsub的手册页不清楚这是怎么做的 - 默认情况下我猜它只是将它作为普通作业发送而不管多线程 - 但这可能会导致问题,即将多个多线程作业发送到同一台计算机,放慢速度。
有谁知道如何做到这一点?谢谢。
批处理服务器系统是sge。
答案 0 :(得分:4)
在SGE / UGE中,配置由管理员设置,因此您必须检查他们称之为并行环境的内容
qconf -spl
make
our_paraq
在配置
中查找$pe_slots
的一个
qconf -sp make
qconf -sp our_paraq
具有该环境的qsub和您要使用的核心数
qsub -pe our_paraq 8 -cwd ./myscript
如果你正在使用mpi,你可以选择更多的配置分配规则($pe_slots
),例如$round_robin
和$fill_up
,但这应该可以帮到你。
答案 1 :(得分:0)
如果您的工作是多线程的,即使在SGE中也可以利用多线程的优势。在SGE中,单个作业可以使用一个或多个CPU。如果您提交的作业使用单处理器,并且您的程序具有多个线程而不是单个处理器可以处理的程序,则会出现问题。验证您的作业使用的处理器数量以及程序正在创建的每个CPU的线程数。
在我的情况下,我有一个使用一个处理器和两个线程的java程序,它的工作效率非常高。我提交相同的java程序执行到许多CPU,每个2个线程使其并行,因为我没有使用MPI。
答案 2 :(得分:0)
用户“ j_m”的回答非常有帮助,但就我而言,我既需要请求多个内核,又需要将作业提交到特定节点。经过大量搜索之后,我终于找到了一个对我有用的解决方案,并将其发布在这里,以便其他可能遇到类似问题的人也不必经历同样的痛苦(请注意,我正在将此作为答案而不是答复,因为我没有足够的声誉进行答复):
qsub -S /bin/sh -cwd -l h=$NODE_NAME -V -pe $ENV_NAME $N_OF_CORES $SCRIPT_NAME
我认为变量$ NODE_NAME,$ N_OF_CORES和$ SCRIPT_NAME非常简单。您可以按照答案“ j_m”轻松找到$ ENV_NAME。