La programmazione distribuita è una forma di programmazione parallela o calcolo parallelo. La programmazione parallela coinvolge computer e unità di calcolo all’interno di computer che lavorano contemporaneamente su un particolare problema, come la previsione del tempo di domani. Le unità di calcolo possono essere posizionate molto vicine e coordinate o possono essere posizionate a parte. Quando le unità di calcolo sono separate, si parla di programmazione distribuita. In tale scenario, molto spesso le unità di calcolo differiscono tra loro, così come il sistema operativo e la configurazione della rete, rendendo particolarmente impegnativa la programmazione dell’attività di calcolo.
Quando si risolve un problema in modo distribuito, il programma deve essere suddiviso in modo che parti del programma possano essere eseguite sulle diverse unità di calcolo; queste parti sono spesso chiamate “processi”. I processi vengono eseguiti contemporaneamente ma devono comunicare input e risultati l’uno all’altro. Se i processi sono in esecuzione su hardware diverso, come una parte in esecuzione su Intel e un’altra in esecuzione su SUN, i programmi devono essere compilati e ottimizzati in modo diverso.
Un modo per risolvere un problema sufficientemente difficile è suddividere le parti di input e far lavorare le diverse unità di calcolo sulle diverse parti utilizzando lo stesso algoritmo, l’insieme di regole o passaggi per la risoluzione dei problemi. Ad esempio, per decifrare un genoma di 10,000 coppie, le prime 1,000 coppie potrebbero essere assegnate alla prima unità di calcolo, le seconde 1,000 coppie assegnate alla seconda unità di calcolo e così via, tutte utilizzando lo stesso algoritmo. Con la programmazione distribuita, un vantaggio è che le diverse unità di calcolo potrebbero eseguire algoritmi diversi per risolvere lo stesso problema, portando così a una soluzione significativamente migliore. È come risolvere un puzzle con alcune persone che mettono insieme il bordo mentre altre mettono insieme pezzi di un particolare colore.
Il coordinamento dei processi di calcolo distribuito può essere un compito particolarmente difficile. Alcune unità di calcolo potrebbero non funzionare o essere interrotte per gestire altri lavori. I messaggi contenenti gli input oi risultati del calcolo potrebbero non raggiungere le loro destinazioni. Se i programmi sono scritti in modo ingenuo, la perdita di un’unità di calcolo o di alcuni messaggi può causare il blocco dell’intero set di computer.
Nella programmazione distribuita, un processo potrebbe essere il processo di controllo, essenzialmente facendo lavorare gli altri processi, oppure tutti i processi potrebbero funzionare in modo peer-to-peer senza che nessun processo sia il “master”. Alcuni esempi di problemi tentati con la programmazione distribuita includono l’analisi di dati geologici per risorse come il petrolio, la modellazione di proteine e molecole biologiche, il cracking di messaggi in codice e simulazioni militari. Il progetto SETI per la ricerca di vita extraterrestre intelligente dai messaggi radio ricevuti dalla Terra è forse uno degli esempi più noti.