使用 qsub 请求尚未在 SGE 中分配的内存

Requesting memory that is not already allocated in SGE with qsub

我在 AWS EC2 上有一个使用 Starcluster 设置的 Sun Grid Engine 集群。每个节点有 4 个处理器和 16G RAM。我想提交一个任务数组,该数组将一次分派 2 个作业,每个作业用完一个完整节点(所有 4 个处理器和 16G RAM)。但是,我不想使用 -pe smp 4 之类的标志创建并行环境,因为根据经验,这会大大降低性能。 qsub 是否有一个类似 "submit job to a node that has 16G of memory that hasn't been allocated to any other job" 的标志?我知道的标志是

-l mem_free=16g - 如果节点目前有 16g 可用空间,则将作业提交给节点 -l h_vmem=16g - 如果内存使用量超过 16g

则终止作业

这些都不能解决我的问题。使用 mem_free=16g,因为作业最初使用内存缓慢,qsub 将所有任务分配给 2 个节点,然后它们都同时 运行 内存不足。

我用一个手动变量来做到这一点。这里是星团 code to it.

所以基本上它创建了一个变量"da_mem_gb"。每台机器都有一个等于其 RAM 的初始值。然后作业请求使用该变量需要多少 RAM。如果他们需要一台机器的所有 RAM,则会立即将一个作业分配给该机器。