High performance computing: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
Riga 64:
}}</ref>.
 
==Descrizione==
=== 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 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|applicazioni]] HPC non sono molti, dunque sono essenziali dei modelli standard di [[programmazione]] ad alto livello per ridurre lo sforzo umano nella riprogrammazione delle nuove [[piattaforma (informatica)|piattaforme]].
Line 73 ⟶ 74:
<ref name=nota1/>.
 
=== Problemi ===
 
I [[programmatore|programmatori]] abituati a ragionare in modo sequenziale hanno dovuto acquisire una nuova mentalità e, anche se parte della conversione da [[software]] applicativo sequenziale a parallelo poteva essere eseguita in maniera automatica, restava pur sempre da svolgere un'ulteriore attività di “parallelizzazione” manuale che poteva richiedere la ristrutturazione di [[algoritmo|algoritmi]] che erano stati pensati in modo essenzialmente seriale. Inoltre durante l'evoluzione dell'High Performance Computing è emerso un fattore tecnologico che, poco alla volta, è diventato uno dei maggiori vincoli alla crescita dell'effettiva capacità di calcolo dei supercomputer. Questo vincolo è rappresentato dal progressivo sbilanciamento tra la tecnologia dei [[processore|processori]] e quella della [[memoria (informatica)|memoria]] dei [[supercomputer]] ovvero la velocità di [[esecuzione (informatica)|esecuzione]] delle istruzioni è aumentata molto più rapidamente del tempo di accesso alla [[memoria centrale]].
<ref name=nota2/>.
 
=== 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]].