Ich versuche, ein Stück Code auf einem großen Computer-Cluster zu laufen, um verschiedene Teile der Daten zu analysieren.Matlab Charge Parallelisierung in Bash
Ich habe 2 Schleifen erstellt, um die Jobs verschiedenen Knoten und den CPUs zuzuordnen, die die Knoten enthalten. Die Analysefunktion, die ich geschrieben habe, 'chnJob()', braucht nur einen Index, um zu wissen, welchen Teil der Daten es analysieren muss (es ist die Shell-Variable, die in diesem Fall 'chn' genannt wird).
die Schleife wie folgt aus:
for NODE in $NODES; do # Loop through nodes
for job_idx in {1..$PROCS_PER_NODE}; do # Loop through jobs per node (8 per node)
echo "this is the channel $chn"
ssh $NODE "matlab -nodisplay -nodesktop -nojvm -nosplash -r 'cd $WORK_DIR; chnJob($chn); quit'" &
let chn++
sleep 2
done
done
Auch wenn ich sehe, dass chn Variable ordnungsgemäß erhöht wird, wird der Wert von chn, die der Matlab-Funktion übergeben wird, ist immer der letzte Wert des chn.
Dies ist wahrscheinlich, weil Matlab eine Menge Zeit braucht, um auf jedem Knoten zu öffnen und bash beendet die Schleifen bis dahin. Der Wert, der an jede Matlab-Instanz übergeben wird, ist also nur der letzte Wert.
Gibt es eine Möglichkeit, das zu umgehen? Kann ich den Wert dieser Variablen "backen", wenn ich die Funktion aufruft?
Oder ist das Problem ganz anders?