High performance computing: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
template citazione; rinomina/fix nomi parametri; fix parametro isbn; fix formato data |
m Bot: fix citazione web (v. discussione) |
||
Riga 1:
In [[informatica]] con il termine '''High Performance Computing''' ('''HPC''') (''calcolo ad elevate prestazioni'') ci si riferisce alle tecnologie utilizzate da [[computer cluster]] per creare dei sistemi di [[elaborazione dati|elaborazione]] in grado di fornire delle prestazioni molto elevate nell'ordine dei [[FLOPS|PetaFLOPS]], ricorrendo tipicamente al [[calcolo parallelo]]. Il termine è molto utilizzato essenzialmente per sistemi di elaborazioni utilizzati in campo [[scienza|scientifico]].
Gli attuali sistemi di calcolo più diffusi, che sfruttano le tecnologie HPC, sono installazioni che richiedono rilevanti investimenti e la cui gestione richiede l'utilizzo di personale specializzato di alto livello. L'intrinseca complessità e rapida evoluzione tecnologica di questi strumenti richiede, inoltre, che tale personale interagisca profondamente con gli utenti finali (gli esperti dei vari settori scientifici nei quali questi sistemi vengono utilizzati), per consentire loro un utilizzo efficiente degli strumenti
Riga 16:
== Storia ed evoluzione ==
Il 1990 vide la nascita del primo modello standard di programmazione parallela per HPC. All'inizio del decennio, i sistemi di supercalcolo vettoriale come quelli commercializzati dalla [[Cray Research]], [[Fujitsu]] e [[NEC]], erano ampiamente utilizzati nell'esecuzione di applicazioni su larga scala. Venivano combinati insieme da due a quattro [[processore vettoriale|processori vettoriali]] che formavano sistemi particolarmente potenti con una singola memoria condivisa. I [[multiprocessore simmetrico|multiprocessori simmetrici]] (SMP), erano costituiti da un piccolo numero di processori [[RISC]] che condividevano la memoria, ma sorsero dei problemi quando fu chiaro che sarebbe stato difficile estendere questa tecnologia ad un grande numero di [[CPU]]. Nacquero così le nuove piattaforme parallele a memoria distribuita (DMP) prodotte da compagnie come [[Intel]], [[Meiko]] e [[nCube]]: i computer [[SIMD]] (''Single Instruction Multiple Data'') che potevano eseguire una singola istruzione su un insieme di dati simultaneamente, ad esempio sugli elementi di un array. Questi nuovi sistemi, benché costosi da acquistare e gestire, potevano essere costruiti in formati differenti così da poter creare macchine dal costo differenziato in base alle esigenze e i budget delle aziende clienti.
A poco a poco le aziende iniziarono a produrre delle DMP proprie costituite da una serie di singoli computer collegati ad una rete ad alta velocità con un sistema che garantisse un rapido trasporto di dati tra le diverse memorie. Allo stesso modo le [[workstation]] collegate a delle comuni [[LAN]] iniziarono ad essere utilizzate insieme per lo svolgimento di un unico lavoro, fornendo così dei sistemi paralleli a basso costo. Tali sistemi divennero noti come “[[Clusters of workstation]]” (COW). Sebbene le reti [[Ethernet]] usati dalle COW fossero lente in confronto a quelle delle vere DMP, queste risultavano però molto più economiche da costruire.
Nella seconda metà degli anni novanta, la maggior parte dei produttori statunitensi cominciarono a produrre [[multiprocessore simmetrico|SMP]]. Contrariamente a quelli costruiti negli anni ottanta, questi ultimi relativamente poco costosi, erano destinati ad un più ampio impiego, come i computer desktop.
Inoltre con l'enorme aumento della frequenza di [[clock]] e delle dimensioni delle memorie principali e di massa, alcune applicazioni che fino ad allora avrebbero richiesto un hardware per HPC, poterono essere eseguite con un solo [[multiprocessore simmetrico|SMP]]. Per la prima volta i computer paralleli divennero accessibili ad un'ampia fascia di utenti.
Riga 67:
=== Implementazione sui sistemi di calcolo ===
Poiché i sistemi di calcolo, ogni giorno, sono sempre più sofisticati e veloci, gli sviluppatori di applicazioni per HPC devono spesso lavorare insieme ad [[ingegnere|ingegneri]] e [[progettista|progettisti]] per identificare e correggere i vari [[bug]] e le instabilità che insorgono. Essi devono adeguarsi continuamente a scrivere [[codice sorgente|codice]] per nuovi tipi di architetture e spesso sono i primi che utilizzano i nuovi [[linguaggio di programmazione|linguaggi di programmazione]], le [[libreria (software)|librerie]], i [[compilatore|compilatori]], insieme ai più recenti strumenti per lo sviluppo di applicazioni. Tuttavia, la continua riprogrammazione si rivela inefficiente perché impiega troppa manodopera e gli esperti in [[applicazione (informatica)|applicazioni]] HPC non sono molti, dunque sono essenziali dei modelli standard di [[Programmazione (informatica)|programmazione]] ad alto livello per ridurre lo sforzo umano nella riprogrammazione delle nuove [[piattaforma (informatica)|piattaforme]].
Purtroppo fornire [[standard (informatica)|standard]] ad alto livello per le applicazioni HPC non è un'impresa facile poiché nascono ogni giorno nuove architetture per il calcolo ad alte prestazioni, ognuna con specifiche caratteristiche diverse dalle altre e che devono essere sfruttate in maniera adeguata per raggiungere l'alto livello di prestazione richiesto.
I programmatori HPC sono riluttanti a sacrificare le prestazioni in cambio di una maggiore facilità di programmazione, dunque è necessario un modello standard che permetta di sfruttare al massimo tutti i tipi di piattaforma. Vi sono poi ulteriori vincoli: il modello di programmazione deve essere di facile comprensione per semplificare l'identificazione dei [[bug]] e la loro correzione. Deve essere [[scalabilità|scalabile]], per far fronte all'aumento di complessità del problema e quello di potenza della macchina. Infine, poiché quello dell'HPC è una mercato relativamente piccolo, i produttori non sarebbero in grado di far fronte ad un'elevata quantità di modelli di programmazione diversi e di conseguenza, lo standard, deve essere compatibile con la maggior parte dei codici e piattaforme per HPC
Riga 80:
=== Algoritmi ===
È necessario considerare l'importanza degli [[algoritmo|algoritmi]]. Quest'ultimo è un aspetto spesso sottovalutato. Infatti, per utilizzare al meglio un [[computer]] che esegua contemporaneamente su molteplici complessi circuitali svariati gruppi di istruzioni occorre risolvere due problemi. È necessario, innanzitutto, sviluppare in [[software]] un [[algoritmo]] che si presti a essere suddiviso in più parti, ossia in diverse sequenze di [[istruzione (informatica)|istruzioni]], da eseguire in parallelo. In secondo luogo, occorre disporre di un [[linguaggio di programmazione|linguaggio]] ed un [[compilatore]], che sappia ottimizzare nelle giuste sequenze da distribuire in parallelo le istruzioni scritte dal [[programmatore]] <ref name=nota2/>. Tra questi linguaggi abbiamo ad esempio l'[[Occam (linguaggio di programmazione)|Occam]].
La [[progettazione]] di un algoritmo efficiente è, spesso, più efficace di un [[hardware]] sofisticato. Purtroppo, non è facile trovare la soluzione giusta. Con la disponibilità del calcolo parallelo, il ricercatore che debba sviluppare una nuova applicazione potrebbe essere invogliato a cercare fin dall'inizio algoritmi intrinsecamente parallelizzabili. Più difficile è, evidentemente, il compito di chi debba riadattare [[software]] applicativo già esistente alle nuove possibilità tecnologiche.
Riga 90:
Sebbene i [[modello matematico|modelli matematici]] applicati all'astrazione e modellizzazione di [[sistema|sistemi]] e di fenomeni siano stati in alcuni casi elaborati da molti decenni solo recentemente, grazie all'avvento di piattaforme di calcolo ad alte prestazioni, hanno avuto modo di mostrare il loro enorme potere esplicativo e predittivo in molti ambiti scientifici.
Le moderne tecnologie informatiche hanno, infatti, consentito un enorme sviluppo delle tecniche di [[modello matematico|modellistica]] [[analisi numerica|numerica]] fornendo uno straordinario contributo negli ultimi decenni, sia all'avanzamento della conoscenza, che alla realizzazione di prodotti e processi tecnologicamente avanzati.
Queste hanno reso possibile progettare, studiare, riprodurre e visualizzare complessi fenomeni naturali e sistemi ingegneristici con un'accuratezza fino a pochi anni fa impensabile. Si è sviluppata nel tempo una nuova categoria di specialisti in modellistica computazionale; questi sono in genere esperti nei vari domini applicativi con forti competenze nell'informatica avanzata che rendono possibile l'utilizzo di questi strumenti all'interno dei gruppi di ricerca delle varie aree applicative
Riga 105:
== Soluzioni per l'HPC ==
*
*
*
== Note ==
Riga 126:
== Collegamenti esterni ==
* {{
* {{
*
*
* {{
* {{
* {{en}}[http://www.rocksclusters.org Rocks Clusters] Open-Source High Performance Linux Clusters
* {{en}}[http://www.Infiscale.com Infiscale Abstractual and Perceus] Open-Source Extreme Scale HPC Clusters and Clouds
*
*
{{Portale|informatica|Telematica}}
|