PARALLELIZZAZIONE DI CICLI DO
Nella maggior parte dei calcoli scientifici è facile incontrare
algoritmi in cui la maggior parte del peso computazionale si trova in calcoli
che sono all'interno di cicli do-enddo.
Spesso quindi parallelizzare un ciclo è la tecnica più importante
che deve essere imparata nella programmazione parallela; tale tecnica fa
parte di un approccio alla programmazione parallela che viene chiamata
con il nome di parallelizzazione per via algoritmica
(algorithmic parallelization). In questo approccio
si affronta la parallelizzazione a livello dell'algoritmo, cercando di
individuare le parti di codice che sono computazionalmente più onerose
e suddividendo quindi i calcoli in esse contenuti tra i processi che eseguono
il calcolo parallelo. Si contrappone a questo approccio (anche se è
possibile che i due approcci portino a parallelizzazioni equivalenti) quello
denominato della decomposizione in domini
(domain decomposition), dove sono invece i
dati ad essere sistematicamente suddivisi tra i vari processi, ed ogni
processo opererà per quanto possibile solo sui dati a lui assegnati.
La tecnica di base per parallelizzare un ciclo
è quella di distribuire le iterazioni ai vari processi in modo che
eseguano le relative operazioni in parallelo. Generalmente i cicli coinvolgono
calcoli su vettori le cui componenti sono indicizzate con la variabile
indice del ciclo. Spesso quindi distribuire le iterazioni coincide con
l'aver distribuito le componenti di questi vettori e i relativi calcoli
ai processi coinvolti.
Vedremo nelle prossime pagine le tecniche di base
per la parallelizzazione dei cicli.