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.