GNU Parallel - Argumen alternatif
Saya ingin dapat mengganti argumen untuk setiap eksekusi perintah paralel saya.
Saya memiliki skrip untuk memproses gambar dan saya menggunakan GNU Parallel untuk meluncurkan beberapa proses pada waktu yang bersamaan. Saya menggunakan inti GPU dalam skrip ini tetapi hanya satu dari 2 inti GPU saya yang digunakan.
Saya ingin dapat menggunakan 2 file konfigurasi yang berbeda (satu untuk GPU 1 dan satu untuk GPU 2) tetapi saya tidak tahu bagaimana melakukannya.
gsutil ls -d $ee_repo | parallel -j 10 -k "task {} $PWD $year $config" Dengan $ config berubah dari gpu_1 menjadi gpu_2 setiap eksekusi lainnya
Apakah ini mungkin atau tidak?
Terima kasih 😉
EDIT:
Menggunakan nomor pekerjaan dari perintah paralel ( {#}) sebagai argumen, kemudian dapatkan 0 atau 1 dengan menggunakan modulo nomor pekerjaan ini:
gsutil ls -d $ee_repo | parallel -j 10 -k "task {} $PWD $year {#}"
Dalam fungsi tugas :
task(){
...
jobnumber=$4 gpu=$(expr $jobnumber% 2)
...
}
Jawaban
Dengan penjelasan Anda, Anda mungkin tidak ingin GNU Parallel menjadi alternatif. Bayangkan bahwa semua pekerjaan sambilan membutuhkan waktu 1 detik dan semua pekerjaan genap membutuhkan waktu 2 detik. Kemudian Anda berakhir dengan pekerjaan yang berjalan pada GPU yang sama sementara tidak ada yang berjalan di sisi lain.
Yang Anda inginkan adalah memulai pekerjaan di GPU2 segera setelah pekerjaan selesai di GPU2. {%}(alias slot pekerjaan) dibuat untuk ini:
parallel -j2 'sleep {}; echo {}-GPU{%} seq {#}' ::: 1 2 1 2 1 2 1 2 1 2 1 2
Sesuatu seperti ini seharusnya bekerja:
seq 14 | parallel -k echo task {} {= '$_=seq() % 2 ? "gpu1" : "gpu2"' =}
Keluaran
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