2017-09-14 20 views
1

私は最初に1つのファイルを作成するいくつかのタスクを実行しているレイクファイルを作成しようとしていますが、次に並行してアウトファイルを作成するタスクが必要ですレーキが次のタスクを読み続ける前に、これらのすべてが準備されるのを待ちます。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で実行していることです。私のコマンドのようなものになるだろう。今のとおり

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" 

残念なことに、私のいわゆる並列化されたタスクはそうではなく、私のアウトファイルは順番に生成されます。私が紛失しているものは何ですか?

私は、コア、タスク、ノード、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

関連する問題