Depois de reportar a saída como
total nodes=1
e
This node=0
impresso 4 vezes, concluí que você está tentando isso: mpirun -np 4 script-name.sh
. Isso acontece porque o mpirun está lançando 4 cópias de um script de shell que não entende a semântica da comunicação MPI.
Se você puder obter de alguma forma o mpirun de inicialização em um script, lembre-se de que (1) o script está sendo executado no ambiente de nó "head" local, não o remoto, (2) exec
ao seu programa como sua última e última respiração, e (3) quando o programa é executado, ele está no ambiente possivelmente em outro nó - possivelmente não tendo acesso aos arquivos que você tinha na cabeça.
O script deve ficar assim:
PROG="$1"; shift;
OPT="$2"; shift
for FILE in "$@"
do
echo "Processing ${FILE}..."
./makeInp.sh ${FILE} ${FILE} >INP/${FILE}.inp
done
exec $PROG $OPT "$@"
Dentro de PROG
, você terá que indexar ARGV
para corresponder ao nó / thread atual. (Verifique se você não excedeu argc
ou se receberá uma violação de ponteiro NULO.) Não acho que exista outra maneira melhor.