GNU Parallel - Argomento alternativo
Voglio essere in grado di alternare un argomento per ogni esecuzione del mio comando parallelo.
Ho uno script per elaborare le immagini e utilizzo GNU Parallel per avviare diversi processi contemporaneamente. Uso il core GPU in questo script ma viene utilizzato solo uno dei miei 2 core GPU.
Voglio essere in grado di utilizzare 2 diversi file di configurazione (uno per GPU 1 e uno per GPU 2) ma non so come farlo.
gsutil ls -d $ee_repo | parallel -j 10 -k "task {} $PWD $year $config" Con $ config che cambia da gpu_1 a gpu_2 ogni altra esecuzione
È possibile o no?
Grazie 😉
MODIFICARE:
Utilizzando il numero di lavoro del comando parallelo ( {#}) come argomento, quindi ottenere 0 o 1 utilizzando il modulo di questo numero di lavoro:
gsutil ls -d $ee_repo | parallel -j 10 -k "task {} $PWD $year {#}"
Nella funzione task :
task(){
...
jobnumber=$4 gpu=$(expr $jobnumber% 2)
...
}
Risposte
Data la tua descrizione, probabilmente non vuoi che GNU Parallel si alterni. Immagina che tutti i lavori dispari richiedano 1 secondo e tutti i lavori pari richiedano 2 secondi. Quindi si finisce con i lavori in esecuzione sulla stessa GPU mentre nessuno è in esecuzione sull'altra.
Quello che invece vuoi è avere un lavoro che inizi su GPU2 non appena un lavoro finisce su GPU2. {%}(aka. job slot) è fatto per questo:
parallel -j2 'sleep {}; echo {}-GPU{%} seq {#}' ::: 1 2 1 2 1 2 1 2 1 2 1 2
Qualcosa del genere dovrebbe funzionare:
seq 14 | parallel -k echo task {} {= '$_=seq() % 2 ? "gpu1" : "gpu2"' =}
Produzione
task 1 gpu1
task 2 gpu2
task 3 gpu1
task 4 gpu2
task 5 gpu1
task 6 gpu2
task 7 gpu1
task 8 gpu2
task 9 gpu1
task 10 gpu2
task 11 gpu1
task 12 gpu2
task 13 gpu1
task 14 gpu2