Quando si esegue (possibilmente pesante) l'elaborazione dei pixel su un'immagine grande, il multithreading diventa obbligatorio. Lo studio standard prevede l'avvio di un ciclo i cui indici sono partizionati in più thread all'interno di un pool di thread. I vantaggi prestazionali diventano immediatamente evidenti dopo aver preso le misure di sicurezza del filo appropriate per garantire la correttezza dei risultati.
Tuttavia, ci sono diverse configurazioni possibili su come si possano partizionare gli indici. I metodi più comuni sono il partizionamento per riga o per pixel. Ecco la mia interpretazione dei vantaggi e degli svantaggi di ciascuno:
Per riga:
-
Meno spese generali di creazione dei thread
-
Il caricamento del thread potrebbe non essere nemmeno dovuto al numero di righe che potrebbero non essere divisibili per il numero di thread. Ciò può causare un'immagine ampia ma non alta da elaborare in modo inefficiente su più core
Per pixel:
-
Altro overhead per la creazione di thread
-
Il carico di thread può essere distribuito in modo più uniforme a causa del fatto che il tempo necessario per elaborare gli indici che non sono divisibili per il numero di thread è relativamente piccolo
La mia interpretazione è corretta, o c'è di più nella storia? Dovrei sempre scegliere uno rispetto all'altro?
Per riferimento, sto usando la funzione Parallel.For () in C #.