Sono arrivato da uno sfondo di supercalcolo (generalmente per usi scientifici e ingegneristici). I due principali stili di parallelismo sono la memoria condivisa, in cui un programma viene eseguito con più thread nello stesso spazio di indirizzi - un modo frequente per implementare OPENMP - e il passaggio di messaggi, con MPI come il software più popolare.
Se ti interessa solo utilizzare alcuni processori, ad esempio il numero che puoi ottenere su una macchina dual socket, che supporta 2 chip, inizierei con OPENMP. Di solito lo usi aggiungendo le direttive (pragma) ai loop per. A volte puoi prendere un'applicazione esistente e in modo frammentario parallelizzarla, un ciclo alla volta.
Il trasferimento dei messaggi, con MPI o qualche altro pacchetto, è solitamente più difficile, sebbene sia garantito che i processi di differenza abbiano spazi di memoria indipendenti. Tuttavia, ogni volta che i dati devono essere condivisi, devono essere memorizzati nel buffer e inviati a uno o più processi che devono effettuare chiamate per ricevere i dati. Il messaggio che passa parallelismo, di solito richiede che l'applicazione sia progettata da zero per il parallelismo. Ma data una domanda sufficientemente parallela, il numero di processori che può scalare è sostanzialmente illimitato. Cluster di centinaia o migliaia di core non sono rari.
Puoi anche mescolare i metodi, con ogni processo MPI, utilizzando diversi processori per calcolare il proprio pezzo parallelamente localizzato di un'applicazione parallela più grande.
Non ho usato OpenCL, ma non è un modo di utilizzare il chip grafico per eseguire calcoli? Cuda è attualmente utilizzato per programmare quelli che vengono chiamati GPGPU (General Purpose Graphical Processing Units), come quelli forniti da NVidia Fermi.
Personalmente, penso che gli sforzi per imparare e scrivere Cuda possano essere sprecati. Penso che il numero di core per processore vero per tutti (x86) in offerta continueranno a salire e il numero di unità in virgola mobile per core (accessibile tramite AVX) crescerà anche di più nei prossimi anni. Quindi IMHO, utilizzando GPGPU per compensare una carenza di unità in virgola mobile per chip, sarà probabilmente solo una soluzione preferita a breve termine. Potrebbero esserci dei buoni posti di lavoro disponibili per i buoni programmatori CUDA, sii pronto a cambiare drasticamente l'intero campo nel giro di pochi anni.