In questi giorni sto approfondendo quanto il multithread sia frainteso per il post-processing. Il punto è che il suo impiego non abbatte affatto il consumo sui picchi ma velocizza soltanto il tempo di esecuzione, facendo così terminare l'elaborazione in minor tempo. Tutto bene finchè si parla di pre-processing (ambiente offline) ma poco bene per chi tali elaborazioni le esegue on-the-fly come noi... Che significa?
A parità di clock, avere una chiamata dichiaratamente sforata su single core significa averne una anche per il multi core.
Ma allora, dove sta il vantaggio? Semplice: nell'ottimizzare quella poca percentuale di CPU non sfruttata.
Pensando al single thread non ci viene difficile capire come il tutto venga processato frame per frame. Ciascun frame, tuttavia, differisce dall'altro per composizione d'informazioni... alcuni sono "facili" da processare, altri meno. Questo si traduce in un tempo di elaborazione che varia costantemente a seconda della complessità dell'immagine. A volte la CPU si sbriga prima, altre volte meno. In single core è impossibile salvare quei cicli "risparmiati" per ridestinarli altrimenti, vengono semplicemente "droppati" in attesa che il successivo frame "salga in cattedra".
Ecco dove interviene il multi-core. Attraverso il multi-thread abbandoniamo la linearità del funzionamento per impiegare i cicli inutilizzati in un'anticipazione dell'elaborazione dei frames successivi. Ci prendiamo avanti insomma

. Maggiori sono i core, maggiori sono i threads instanziabili...
Il fatto è che non possiamo esagerare con la chiamata sperando che il multicore faccia il miracolo. Se la CPU è impiccata su di un core per un singolo frame, non pensate che lo saranno anche gli altri per i successivi? Se non c'è alcun risparmio di cicli macchina noi cosa anticipiamo che siamo presi male?
P.S. Ho scritto come mi è venuta a quest'ora... anche se fatto di fretta spero si capisca qualcosa...