Le CPU odierne comprendono in genere diversi core fisici. Questi potrebbero anche essere multi-thread in modo che il kernel di Linux veda un numero piuttosto elevato di core e di conseguenza inizi più volte lo scheduler di Linux (uno per ogni core). Quando si eseguono più attività su un sistema Linux, lo scheduler ottiene normalmente una buona distribuzione del carico di lavoro totale su tutti i core Linux (potrebbe essere lo stesso nucleo fisico).Come (banalmente) parallelizzare con la shell di Linux avviando un'attività per core Linux?
Ora, ad esempio, ho un numero elevato di file da elaborare con lo stesso eseguibile. Io di solito faccio con il comando "find":
find <path> <option> <exec>
Tuttavia, questo inizia un solo compito, in qualsiasi momento e attende fino al suo completamento prima di avviare l'operazione successiva. Pertanto, solo un core in qualsiasi momento è in uso per questo. Ciò lascia la maggior parte dei core inattivi (se questo comando di ricerca è l'unica attività in esecuzione sul sistema). Sarebbe molto meglio avviare N task nello stesso tempo. Dove N è il numero di core visti dal kernel di Linux.
Esiste un comando che lo farebbe?
Dai un'occhiata all'utilità parallela GNU. Non so come si adatti al tuo particolare problema, ma ho una lettura: http://www.gnu.org/software/parallel/ –
Sì, hai ragione. Il parallelo GNU è effettivamente destinato a questo utilizzo. Può essere usato come sostituto di "xargs". – ritter
@Daniel: Sembra che dovresti postarlo come risposta. –