Calcolo parallelo

Calcolo parallelo Definizione

Il calcolo parallelo è un tipo di architettura di calcolo in cui diversi processori eseguono contemporaneamente più calcoli più piccoli suddivisi da un problema complesso e complesso.

Il diagramma di LLNL mostra l'architettura di calcolo parallelo generale utilizzata per suddividere problemi più grandi e complessi in calcoli più piccoli.
FAQ

Che cos’è il calcolo parallelo?

Il calcolo parallelo si riferisce al processo di scomposizione di problemi più grandi in parti più piccole, indipendenti, spesso simili che possono essere eseguite simultaneamente da più processori che comunicano tramite memoria condivisa, i cui risultati vengono combinati al completamento come parte di un algoritmo generale. L’obiettivo principale del calcolo parallelo è aumentare la potenza di calcolo disponibile per un’elaborazione più rapida delle applicazioni e la risoluzione dei problemi.

L’infrastruttura di calcolo parallelo è in genere ospitata all’interno di un singolo datacenter in cui sono installati diversi processori in un server rack; le richieste di calcolo vengono distribuite in piccoli blocchi dal server delle applicazioni che vengono quindi eseguite simultaneamente su ciascun server.

Esistono generalmente quattro tipi di calcolo parallelo, disponibili sia da fornitori di calcolo parallelo proprietari che open source: parallelismo a livello di bit, parallelismo a livello di istruzione, parallelismo di attività o parallelismo a livello di superword:

  • Parallelismo a livello di bit: aumenta la dimensione della parola del processore, riducendo la quantità di istruzioni che il processore deve eseguire per eseguire un’operazione su variabili superiori alla lunghezza della parola.
  • Parallelismo a livello di istruzioni: l’approccio hardware funziona su parallelismo dinamico, in cui il processore decide in fase di esecuzione quali istruzioni eseguire in parallelo; l’approccio software funziona su parallelismo statico, in cui il compilatore decide quali istruzioni eseguire in parallelo
  • Parallelismo delle attività: una forma di parallelizzazione del codice di computer tra più processori che gestisce diverse attività contemporaneamente sugli stessi dati
  • Superword a livello di parallelismo: una vettorializzazione tecnica che può sfruttare il parallelismo del codice inline

applicazioni Parallele sono in genere classificati come a grana fine, parallelismo, in cui sottoattività di comunicare più volte al secondo; a grana grossa parallelismo, in cui sottoattività di non comunicare più volte al secondo; o imbarazzante parallelismo, in cui sottoattività raramente o mai comunicare. La mappatura nel calcolo parallelo viene utilizzata per risolvere problemi imbarazzanti paralleli applicando una semplice operazione a tutti gli elementi di una sequenza senza richiedere la comunicazione tra le attività secondarie.

La divulgazione e l’evoluzione del calcolo parallelo nel 21 ° secolo è arrivata in risposta al ridimensionamento della frequenza del processore che ha colpito il muro di potenza. Gli aumenti di frequenza aumentano la quantità di potenza utilizzata in un processore e il ridimensionamento della frequenza del processore non è più fattibile dopo un certo punto; pertanto, programmatori e produttori hanno iniziato a progettare software di sistema parallelo e produrre processori efficienti con più core per affrontare il problema del consumo energetico e del surriscaldamento delle unità di elaborazione centrali.

L’importanza del calcolo parallelo continua a crescere con l’uso crescente di processori multicore e GPU. Le GPU collaborano con le CPU per aumentare il throughput dei dati e il numero di calcoli simultanei all’interno di un’applicazione. Utilizzando la potenza del parallelismo, una GPU può completare più lavoro di una CPU in un dato periodo di tempo.

Fondamenti di architettura di computer paralleli

L’architettura di computer paralleli esiste in un’ampia varietà di computer paralleli, classificati in base al livello in cui l’hardware supporta il parallelismo. L’architettura del computer parallelo e le tecniche di programmazione lavorano insieme per utilizzare efficacemente queste macchine. Le classi di architetture di computer paralleli includono:

  • Calcolo multi-core: Un processore multi-core è un circuito integrato del processore del computer con due o più core di elaborazione separati, ognuno dei quali esegue le istruzioni del programma in parallelo. I core sono integrati su più matrici in un singolo pacchetto di chip o su un singolo circuito integrato e possono implementare architetture come multithreading, superscalar, vector o VLIW. Le architetture multi-core sono classificate come omogenee, che include solo core identici, o eterogenee, che include core non identici.
  • Multiprocessing simmetrico: architettura hardware e software per computer multiprocessore in cui due o più processori indipendenti e omogenei sono controllati da una singola istanza del sistema operativo che tratta tutti i processori allo stesso modo ed è collegata a una singola memoria principale condivisa con accesso completo a tutte le risorse e i dispositivi comuni. Ogni processore ha una memoria cache privata, può essere collegato tramite reti mesh su chip, e può lavorare su qualsiasi attività, non importa dove i dati per tale attività si trova in memoria.
  • Calcolo distribuito: I componenti di sistema distribuiti si trovano su diversi computer in rete che coordinano le loro azioni comunicando tramite puro HTTP, connettori simili a RPC e code di messaggi. Le caratteristiche significative dei sistemi distribuiti includono il guasto indipendente dei componenti e la concorrenza dei componenti. La programmazione distribuita è in genere classificata come architetture client–server, a tre livelli, n-tier o peer-to-peer. C’è molta sovrapposizione nel calcolo distribuito e parallelo e i termini sono talvolta usati in modo intercambiabile.
  • Calcolo massivo parallelo: si riferisce all’uso di numerosi computer o processori per computer per eseguire simultaneamente una serie di calcoli in parallelo. Un approccio prevede il raggruppamento di diversi processori in un cluster di computer centralizzato strettamente strutturato. Un altro approccio è il grid computing, in cui molti computer ampiamente distribuiti lavorano insieme e comunicano via Internet per risolvere un particolare problema.

Altre architetture di computer paralleli includono computer paralleli specializzati, cluster computing, grid computing, processori vettoriali, circuiti integrati specifici per applicazioni, general-purpose computing on Graphics Processing units (GPGPU) e calcolo riconfigurabile con gate array programmabili sul campo. La memoria principale in qualsiasi struttura di computer parallela è memoria distribuita o memoria condivisa.

Soluzioni e tecniche software di calcolo parallelo

Linguaggi di programmazione simultanei, API, librerie e modelli di programmazione parallela sono stati sviluppati per facilitare il calcolo parallelo su hardware parallelo. Alcune soluzioni software di calcolo parallelo e tecniche includono:

  • Application checkpoint: una tecnica che fornisce tolleranza ai guasti per i sistemi di calcolo registrando tutti gli stati variabili correnti dell’applicazione, consentendo all’applicazione di ripristinare e riavviare da quel punto in caso di errore. Il checkpoint è una tecnica cruciale per i sistemi di calcolo altamente paralleli in cui il calcolo ad alte prestazioni viene eseguito su un gran numero di processori.
  • Parallelizzazione automatica: si riferisce alla conversione di codice sequenziale in codice multi-threaded al fine di utilizzare più processori contemporaneamente in una macchina multiprocessore a memoria condivisa (SMP). Le tecniche di parallelizzazione automatica includono Analisi, analisi, pianificazione e generazione di codice. Esempi tipici di compilatori e strumenti di parallelizzazione comuni sono il compilatore Paradigm, il compilatore Polaris, il compilatore Rice Fortran D, il compilatore SUIF e il compilatore Vienna Fortran.
  • Linguaggi di programmazione paralleli: i linguaggi di programmazione paralleli sono tipicamente classificati come memoria distribuita o memoria condivisa. Mentre i linguaggi di programmazione a memoria distribuita utilizzano il passaggio dei messaggi per comunicare, i linguaggi di programmazione a memoria condivisa comunicano manipolando le variabili di memoria condivisa.

Differenza tra calcolo parallelo e cloud Computing

Il cloud computing è un termine generale che si riferisce alla fornitura di servizi scalabili, come database, archiviazione dati, rete, server e software, su Internet in base alle esigenze e a consumo.

I servizi di cloud computing possono essere pubblici o privati, sono completamente gestiti dal provider e facilitano l’accesso remoto a dati, lavoro e applicazioni da qualsiasi dispositivo in qualsiasi luogo in grado di stabilire una connessione Internet. Le tre categorie di servizi più comuni sono Infrastructure as as Service (IaaS), Platform as a Service (PaaS) e Software as a Service (SaaS).

Il cloud computing è un paradigma relativamente nuovo nello sviluppo del software che facilita un accesso più ampio al calcolo parallelo tramite vasti cluster di computer virtuali, consentendo all’utente medio e alle organizzazioni più piccole di sfruttare la potenza di elaborazione parallela e le opzioni di archiviazione tipicamente riservate alle grandi imprese.

Differenza tra elaborazione parallela e calcolo parallelo

L’elaborazione parallela è un metodo di calcolo in cui parti separate di un’attività complessa complessiva vengono suddivise ed eseguite simultaneamente su più CPU, riducendo così la quantità di tempo per l’elaborazione.

La divisione e l’assegnazione di ogni attività a un processore diverso viene in genere eseguita dagli informatici con l’ausilio di strumenti software di elaborazione parallela, che lavoreranno anche per riassemblare e leggere i dati una volta che ciascun processore ha risolto la sua particolare equazione. Questo processo viene eseguito tramite una rete di computer o tramite un computer con due o più processori.

L’elaborazione parallela e il calcolo parallelo si verificano in tandem, quindi i termini sono spesso usati in modo intercambiabile; tuttavia, quando l’elaborazione parallela riguarda il numero di core e CPU in esecuzione in parallelo nel computer, il calcolo parallelo riguarda il modo in cui il software si comporta per ottimizzare per quella condizione.

Differenza tra calcolo sequenziale e parallelo

Il calcolo sequenziale, noto anche come calcolo seriale, si riferisce all’uso di un singolo processore per eseguire un programma suddiviso in una sequenza di istruzioni discrete, ciascuna eseguita una dopo l’altra senza sovrapposizioni in un dato momento. Il software è stato tradizionalmente programmato in sequenza, il che fornisce un approccio più semplice, ma è significativamente limitato dalla velocità del processore e dalla sua capacità di eseguire ogni serie di istruzioni. Laddove le macchine uniprocessore utilizzano strutture di dati sequenziali, le strutture di dati per ambienti di calcolo paralleli sono simultanee.

La misurazione delle prestazioni nella programmazione sequenziale è molto meno complessa e importante dei benchmark nel calcolo parallelo in quanto in genere comporta solo l’identificazione dei colli di bottiglia nel sistema. I benchmark nel calcolo parallelo possono essere raggiunti con framework di benchmarking e test di regressione delle prestazioni, che impiegano una varietà di metodologie di misurazione, come il trattamento statistico e le ripetizioni multiple. La capacità di evitare questo collo di bottiglia spostando i dati attraverso la gerarchia della memoria è particolarmente evidente nel calcolo parallelo per la scienza dei dati, il calcolo parallelo di apprendimento automatico e i casi d’uso dell’intelligenza artificiale di calcolo parallelo.

Il calcolo sequenziale è effettivamente l’opposto del calcolo parallelo. Mentre il calcolo parallelo può essere più complesso e avere un costo maggiore in anticipo, il vantaggio di essere in grado di risolvere un problema più velocemente spesso supera il costo dell’acquisizione di hardware di calcolo parallelo.

OmniSci offre una soluzione di calcolo parallelo?

La piattaforma OmniSci sfrutta l’enorme potenza di calcolo parallela delle GPU per l’analisi dei Big Data, offrendo agli analisti dei Big data e ai data scientist il potere di interrogare, visualizzare e alimentare in modo interattivo i flussi di lavoro di data science su miliardi di record in millisecondi. La piattaforma OmniSci è progettata per superare i limiti di scalabilità e prestazioni degli strumenti di analisi legacy di fronte agli attributi di scala, velocità e posizione dei grandi set di dati odierni.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *