我需要运行一个需要从标准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
答案 0 :(得分:0)
sbatch中的--input
选项会将文件传输到提交脚本的标准,而不是程序的标准。你有三个行动方案:
将--input
参数移至srun
来电:srun --input /vlsci/VR****/phillis/input.txt helloworld
将提交脚本的标准输入转移到srun
的标准输入,然后将其转移到helloworld
:cat | srun helloworld
忽略--input
参数并明确使用重定向:srun helloworld < /vlsci/VR****/phillis/input.txt