2016-07-07 2 views
0

J'ai un script parallèle (bash) embarrassant qui s'exécute dans un cluster de calcul. Le script est un script shell et est pas lié à une bibliothèque MPI: cela signifie que la seule façon de lui envoyer le rang MPI est avec un paramètre de ligne de commande.Combinaison de xargs parallel et mpirun

So Far, je ne l'exécutaient dans un seul nœud, et la solution est simple:

#!/bin/bash 
#SBATCH --nodes=1 
N=16 
seq $N | xargs -P $N -I% my_script.bash % $N 

Comment puis-je l'échelle avec deux nœuds? Si j'utilise simplement '--nodes = 2' et N=32 alors xargs essayera de générer tous les threads sur le même noeud. D'autre part, je ne peux pas utiliser mpiexec seul: parce que le script n'est pas lié à la bibliothèque MPI et je ne sais pas comment dire au script quels threads il est.

+1

La solution DOIT-elle utiliser MPI? C'est extrêmement facile à faire avec GNU Parallel: seq $ N | parallèle -S serveur1, serveur2,: mon_script.bash {} $ N –

Répondre

0

Vous pouvez utiliser srun au sein de votre script de soumission à faire:

seq $N | xargs -P $N -I% srun --exclusive -N1 my_script.bash % $N 

Cela utilisera srun pour lancer votre script bash et le distribuer aux processeurs alloués.