SLURM:Shell命令导致以下#SBATCH命令无法解析

时间:2016-02-09 14:06:05

标签: bash slurm

我是SLURM的新手,并将其与OpenMP一起使用。我创建了一个C程序main.c

#include <stdio.h>
#include <stdlib.h>
#include <omp.h>
#include <time.h>

void wait(int s)
{
    int waittime = time(0) + s;
    while(time(0) < waittime);
}


int main(void)
{
    int id=-1;
    int nthreads = 0;

    #pragma omp parallel \
    private(id)
    {   
        nthreads = omp_get_num_threads();
        id = omp_get_thread_num();
        printf("Hello from thread = %i\n",id);

        if(id == 0)
            printf("nthreads = %i\n", nthreads);

        //Let's wait
        wait(60);
    }   

    return 0;
}

和一个slurm批处理脚本slurm.sh

#!/bin/bash
#SBATCH --cpus-per-task=10
#SBATCH --job-name=OpenMP
#SBATCH --output output.txt
echo "Hello"

#SBATCH --mem-per-cpu=100  

export OMP_NUM_THREADS=10

./a.out

如果我提交(即sbatch slurm.sh),这个SLURM很乐意为我的工作分配10个cpus。如果我将echo "Hello"放在#SBATCH --cpus-per-task=10之前,我只会分配1个CPU。这里发生了什么?我不明白为什么,我的批处理脚本中shell命令的位置会改变分配的cpus数量。

::编辑:: 进一步检查后,似乎任何 shell命令(例如dateechoset )似乎导致sbatch忽略所有后续#SBATCH命令。例如,在我的批处理脚本中,我可以设置#SBATCH --mem-per-cpu=1000000,它将很乐意在128GB机器上运行。如果我将#SBATCH --mem-per-cpu=1000000移到echo之前的一行,SLURM会给我一个错误。

1 个答案:

答案 0 :(得分:2)

您无法在#SBATCH指令之间添加任何命令。

来自sbatch手册页:

  

批处理脚本可能包含前面的选项          脚本中任何可执行命令之前的“#SBATCH”。