Tratto dallo speciale:

Calcolo parallelo: vantaggi, applicazioni, modelli

di Luigi Santangelo

scritto il

Vantaggi e proprietà dei sistemi di calcolo parallelo: ambiti di applicazione, modelli di programmazione ed esempi di supercomputer più potenti al mondo.

L’utilizzo di sistemi di calcolo parallelo permette di risolvere un problema complesso in un tempo teoricamente inferiore rispetto a quello impiegato per gestire la stessa incognita su una architettura seriale. A partire dai primi anni del 2000, nel tentativo di aggirare i limiti fisici e i problemi termici ed energetici presentati dalla vecchia generazione di processori, i più grandi vendor di CPU hanno iniziato a produrre architetture parallele, dando vita ai primi sistemi multicore e multiprocessore. Storicamente, il calcolo parallelo veniva impiegato in alcuni settori della scienza e dell’ingegneria, per la modellazione, la simulazione e la comprensione di complessi fenomeni del mondo reale. Oggi invece anche in ambito domestico non è difficile trovare sulle scrivanie casalinghe o aziendali sistemi di calcolo dotati di due o più processori.

=> L’impatto delle innovazioni ICT su imprese e mercati

Esempi

Sono stati realizzati sistemi di calcolo parallelo composti da centinaia di migliaia di unità di elaborazione.A guidare la lista dei 500 supercomputer più potenti al mondo troviamo Tianhe-2, che vanta oltre 18 mesi di permanenza in vetta alla classifica (da giugno 2013): è un sistema di calcolo parallelo sviluppato dal National University of Defence Technology della città di Guangzhou, in Cina, in grado di elaborare oltre 33 petaflop al secondo, pari a 33 quadrilioni di calcoli per unità temporale. Il supercomputer è composto da 16 mila nodi di calcolo ciascuno composto da due processori Intel Ivy Bridge Xeon e da tre processori Xeon Phi per un totale complessivo di 3.120.000 core aventi frequenza di 2,2Ghz. Ciascuno dei 16 mila nodi possiede 88 gigabyte di memoria RAM, di cui 64 GB utilizzati dai due processori Intel Ivy Bridge Xeon e 24 GB utilizzati dai tre processori Xeon Phi, per un totale di oltre 1,3 PetaByte di memoria RAM (1.375 TeraByte).

Per trovare il primo sistema italiano, dobbiamo scorrere la graduatoria fino a raggiungere la posizione 12, dove figura HPC2 sviluppato da IBM e adottato da Eni Exploration & Production. Il supercomputer italiano, in grado di effettuare oltre tre quadrilioni  di calcoli, è composto da processori Intel Xeon a 2.5 Ghz per un totale di 72.000 core.

Applicazioni

Sono svariati gli ambiti nei quali si fa uso di queste potenti macchine di calcolo parallelo. Si pensi ad esempio alle previsioni del tempo che richiedono grossi sistemi per elaborare complessi modelli matematici. Ma ancora nelle previsioni finanziarie ed economiche, nello studio dei fenomeni geologici, nella realtà virtuale e nelle scienze biomediche, nella simulazione, nell’analisi e nell’esecuzione di applicazioni di sicurezza (utilizzati ad esempio per scoprire la chiave privata da utilizzare per decifrare un messaggio crittografato).

 => Osservatorio Competenze Digitali: ICT anti-crisi

Tuttavia tutta questa potenza non viene offerta gratuitamente. Il semplice aumento del numero dei core o dei processori in un sistema di calcolo non può infatti garantire miglioramenti nelle performance delle applicazioni seriali, ovvero scritte per essere eseguite su una architettura a singolo processore. Da qui la necessità di dover riscrivere i software in modo che questi potessero sfruttare le caratteristiche architetturali di un sistema multiprocessore.

Modello Multi Thread

Oggi sono disponibili due principali modelli di programmazione parallela, denominati rispettivamente Multi Thread e Message Passing. Nel primo, generalmente utilizzato nei sistemi a memoria condivisa, le istanze in esecuzione vengono denominate thread che, oltre alla propria memoria privata, condividono uno spazio di memoria attraverso il quale avviene lo scambio di dati tra thread differenti. Spetta al programmatore gestire l’accesso concorrente alla memoria al fine di prevenire situazioni di corse critiche (race condition), ovvero in cui più processi in esecuzione sul medesimo sistema di calcolo accedono e modificano dati condivisi.

Negli anni stati avviati due tentativi di standardizzazione della programmazione multithread che hanno portato a due differenti implementazioni: POSIX Thread e OpenMP. Il primo, a cui generalmente ci si riferisce con il termine PThread, è una libreria utilizzabile in programmi scritti in C in cui la gestione del parallelismo è completamente esplicita. OpenMP invece è basato su direttive di compilazione che consentono di effettuare una parallelizzazione incrementale a partire dal codice seriale (è quindi adatta alle applicazioni seriali già scritte che devono essere convertite in parallelo).

Modello Message Passing

Il secondo modello di programmazione, denominato Message Passing, viene generalmente utilizzato nei sistemi di calcolo a memoria distribuita. In questo modello le istanze in esecuzione vengono chiamate processi, ciascun processo durante la computazione usa la propria memoria locale e la comunicazione interprocesso avviene attraverso lo scambio esplicito di messaggi. Lo scambio di dati è una operazione cooperativa tra processi.

Il sistema più comunemente usato è chiamato Interface Message Passing o MPI. Nel 1982 è stato costituito il Forum di MPI con l’obiettivo primario di definire una interfaccia standard per l’implementazione delle librerie di Message Passing. Il lavoro di questo gruppo è culminato con la definizione, nel 1994, della prima versione del Message Passing Interface (MPI), della seconda nel 1996 e della terza nel 2012. Attualmente MPI è lo standard de facto per le implementazioni basate sullo scambio di messaggi. È importante sottolineare che MPI non è libreria ma uno standard per gli sviluppatori e per gli utenti. Esistono infatti differenti implementazioni di MPI quali ad esempio OpenMPI e MPICH.