Per un po 'di formalizzare ciò che hai già detto sulla ricerca di loop che possono essere parallelizzati, il concetto chiave che viene sfruttato è il parallelismo dei dati piatto. La maggior parte delle librerie parallele (che io conosca) sembrano esibire questo (ad es. Microsoft Task Parallel library per .NET, Microsoft Parallel Patterns Library per C ++)
Il parallelismo dei dati piatto avviene quando si dispone di una porzione di dati (piatti) (ad esempio un array) su cui si desidera eseguire il lavoro, quindi si suddividono i dati in blocchi di quanti processori si hanno, funziona in modo indipendente in parallelo per ognuno di questi pezzi, e infine potenzialmente aggregare / combinare il risultato di ogni pezzo per ottenere il risultato finale.
Un esempio di questo articolo:
link