slurm sbatch标准IO重定向

时间:2017-08-17 03:27:05

标签: c parallel-processing openmp slurm

我需要运行一个需要从标准io读取的并行程序。我怎么能在slurm sbatch中将文件传递给它?我尝试了-input命令,但没有工作。这是我的sbatch脚本

    #!/bin/sh

    #SBATCH -p main
    #SBATCH --nodes=1
    #SBATCH --ntasks=1
    #SBATCH --time 0-23:59:59
    #SBATCH --reservation=VR0188
    #SBATCH --input /vlsci/VR****/phillis/input.txt


    # Run info and srun job launch

    echo 'start work--------------------'

    srun helloworld

这是我的测试代码:

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

     main(int argc, char *argv[]) {

     int nthreads, tid;

     #pragma omp parallel private(tid)
       {
       /* Obtain and print thread id */
       tid = omp_get_thread_num();
       printf("Hello World from thread = %d\n", tid);

       }  /* All threads join master thread and terminate */

       int a;
       scanf("%d", &a);
       printf("file input read as %d\n",a);
     }

此程序可以成功提交并运行,但scanf结果始终为:

     file input read as 0

1 个答案:

答案 0 :(得分:0)

sbatch中的--input选项会将文件传输到提交脚本的标准,而不是程序的标准。你有三个行动方案:

  1. --input参数移至srun来电:srun --input /vlsci/VR****/phillis/input.txt helloworld

  2. 将提交脚本的标准输入转移到srun的标准输入,然后将其转移到helloworldcat | srun helloworld

  3. 忽略--input参数并明确使用重定向:srun helloworld < /vlsci/VR****/phillis/input.txt