2017-09-14 121 views
1

我正在尝试编写一个rake文件,我首先要做的是创建单个文件的几个任务,然后我需要一个任务来并行创建outfiles ,在耙子继续阅读下一个任务之前,等待所有这些准备就绪。SLURM中的ruby rake:并行运行每个循环的元素

这将是这样的:

首先几个任务是这样的:

file "file.out" => [dependencies] do 
    sh "echo aaa" 
end 

desc "task description" 
task :task_name => [dependencies] do 
    puts "bbb" 
end 

的并行任务是:

[X, Y, Z].transpose.each |x, y, z| 
    file x => [dependencies] do 
     sh "echo ccc" 
    end 
end 

desc "parallelized task description" 
task :parallelized_task_name => [dependencies] do 
    puts "ddd" 
end 

,其中该x的每个实例,Y ,z循环并行运行。然后我需要确保所有的并行任务在我做其他事之前完成。

需要注意的重要一点是我通过SLURM运行这个rake文件。我的命令是这样的:

sbatch -p queue --mem 80000 --wrap "source ruby-2.3.1; rake -f rakefile --trace" 

至于现在,我使用的桃红宝石宝石运行并行任务:

[X, Y, Z].transpose.peach |x, y, z| 
    file x => [dependencies] do 
     sh "echo ccc" 
    end 
end 

desc "parallelized task description" 
task :parallelized_task_name => [dependencies] do 
    puts "ddd" 
end 

并提交到SLURM是这样的:

sbatch -p queue --ntasks=7 -c 1 --mem-per-cpu=80000 --wrap "source ruby-2.3.1; rake -f rakefile --trace" 

不幸的是,我所谓的并行任务似乎不是,我的outfiles是一个接一个地产生的。我错过了什么?

我意识到我对核心,任务,节点,CPU的概念有点困惑......这就是为什么我有点难以找出我做错了什么。

任何帮助表示赞赏!

谢谢!

回答

1

仅供参考,在ruby中并行运行任务的答案是在命令中添加-j选项。 我的命令将因此会在我的情况:

sbatch -p queue --ntasks=7 -c 1 --mem-per-cpu=80000 --wrap "source ruby-2.3.1; rake -f rakefile -j 35 --trace" 

在这里,我可以并行运行35个任务。

A.