2017-09-14 4 views
1

Je suis en train d'écrire un fichier de coupe où je suis d'abord en train de faire quelques tâches qui créent un seul fichier chacun, mais je dois une tâche de prendre créer outfiles en parallèle , attendez que tout cela soit prêt avant que rake continue à lire les tâches suivantes.râteau rubis SLURM: éléments en cours d'exécution d'une chaque boucle en parallèle

Ce serait quelque chose comme ceci:

premières tâches sont comme ça:

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

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

La tâche parallélisée serait:

[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 

où chaque instance de cette x, y , z boucle sont exécutés en parallèle. Je dois ensuite m'assurer que toutes les tâches parallélisées sont terminées avant de faire quoi que ce soit d'autre.

Une chose importante à noter est que je suis en cours d'exécution de ce fichier de coupe à travers SLURM. Ma commande serait quelque chose comme:

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

Pour l'instant, je suis en cours d'exécution de la tâche parallélisé en utilisant la pierre rubis de pêche:

[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 

Et soumettre à SLURM comme ceci:

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

Malheureusement, mon soi-disant tâche parallélisée ne semble pas être et mes outfiles sont générés l'un après l'autre. Quelque chose que je manque?

Je réalise que je suis un peu confus sur les notions de cœurs, tâches, nœuds, CPU ... C'est pourquoi il m'est un peu difficile de savoir ce que je fais de mal.

Toute aide appréciée!

Merci!

Répondre

1

Juste pour info, la réponse à l'exécution de tâches en parallèle dans Ruby est d'ajouter l'option -j dans la commande. Ma commande serait donc dans mon cas:

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

Ici, je pouvais courir 35 tâches en parallèle.

A.