UNIVERSITA DEGLI STUDI DI PARMA TECNICHE DI PROGRAMMAZIONE PORTABILI PER LA SIMULAZIONE DI SISTEMI FISICI SULLE ARCHITETTURE GPU E MANY-CORE

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "UNIVERSITA DEGLI STUDI DI PARMA TECNICHE DI PROGRAMMAZIONE PORTABILI PER LA SIMULAZIONE DI SISTEMI FISICI SULLE ARCHITETTURE GPU E MANY-CORE"

Transcript

1 UNIVERSITA DEGLI STUDI DI PARMA DIPARTIMENTO DI FISICA E SCIENZE DELLA TERRA CORSO DI LAUREA TRIENNALE IN FISICA ANNO ACCADEMICO 2013/2014 TECNICHE DI PROGRAMMAZIONE PORTABILI PER LA SIMULAZIONE DI SISTEMI FISICI SULLE ARCHITETTURE GPU E MANY-CORE Relatore: Prof. Roberto Alfieri Candidato: Paolo Leoni Correlatore: Prof. Roberto De Pietri

2

3 Introduzione Nel 1965, un famoso postulato noto come Prima Legge di Moore[1] enunciava che le prestazioni dei processori, ed il numero di transistor ad essi relativo, raddoppiano ogni 18 mesi. Questo postulato, ha previsto correttamente lo sviluppo dei microprocessori fino al Come si può vedere dall immagine, il numero dei transistor con l andare degli anni ha effettivamente seguito le previsioni di Moore, ma lo stesso non si può dire per il clock, il quale nel ha visto un sostanziale arresto di crescita. Tutt ora (nel 2014) siamo ancora mediamente fermi ad un clock singolo pari a circa 3 Ghz, se la legge di Moore fosse ancora applicabile alla frequenza di clock oltre che al numero di transistor, dovremmo avere oggi clock superiori ai 10 Ghz. Il motivo per cui ciò non è avvenuto è principalmente dovuto ad un limite strutturale dei materiali di cui sono composti gli stessi processori. La presa di coscienza da parte dei produttori hardware che l epoca di Moore era cessata, ha determinato la nascita dell era dei multi-core, ovvero dei processori dotati di più core all interno di un singolo socket CPU 1. Dal punto di vista del programmatore, questo passaggio rappresenta un cambiamento significativo nello sviluppo del software. Mentre durante l epoca di Moore si poteva contare su un rapido e progressivo aumento delle prestazioni permesso semplicemente dallo sviluppo hardware, oggi per ottenere prestazioni sempre migliori lo sviluppo software deve essere più attento all implementazione e tenere conto di come l architettura mette a disposizione le risorse disponibili. Si è quindi assistito alla necessità di implementare, al fine di aumentare le prestazioni dei sistemi di calcolo, sistemi intrinsecamente paralleli anche a livello di singolo socket di silicio. 1 Nel Marzo 2005, sulla rivista online Dr. Dobb s Journal, fu pubblicato un celebre articolo sull argomento dal titolo Free lunch is over di Herb Sutter, reperibile all indirizzo web 3

4 In questo processo stanno emergendo due tendenze parallele: nella prima si integrano molti processori tradizionali ( core di calcolo) nel singolo elemento di silicio (ordine 8-16 per i processori consumer) fino al limite di ordine 100 core nei sistemi dedicati al calcolo come i coprecessori PHI della Intel; nella seconda, seguendo la tendenza di sviluppo introdotta dalle schede grafiche, vengono realizzati dei coprocessori matematici (definite GP-GPU, general purpose graphical processing units ) in cui è integrato su un sicolo socket di silicio un ordine di oltre 1000 unità di calcolo a virgola mobile destinate unicamente ad accelerare le prestazioni di calcolo numerico. Nell ambito degli HPC (High Performance Computing) di particolare interesse Scientifico, ci si trova davanti ad architetture spesso piuttosto complesse (e col tempo questa complessità tende ad aumentare), risulta quindi molto importante lo sviluppo di tecniche e strumenti che permettano un calcolo sempre più efficiente e veloce tramite questo particolare tipo di elaboratori. Linguaggi come OpenMP, OpenACC e OpenMPI vengono in aiuto al programmatore proprio per favorire lo sfruttamento delle risorse di device che, pur essendo installati nella stessa macchina, hanno architteture anche molto diverse tra loro, il tutto nel modo più trasparente e più semplice possibile. Lo scopo principale dello sviluppo tecnologico nel campo dell HPC è l aumento delle prestazioni di calcolo, il quale si può ottenere su vari livelli: Figura 1: rappresentazione dei diversi livelli di parallelismo teoricamente possibili per un HPC[2] cluster: tipicamente un HPC mette a disposizione più nodi connessi tra di loro, a questo livello si pone il problema di sfruttare in modo coordinato la potenza di calcolo dei nodi connessi, al fine di ottenere quello che viene chiamato weak scaling, ovvero la capacità di aumentare le dimensioni del problema studiato senza aumentare i tempi di calcolo del singolo nodo. In questo caso sono di notevole aiuto le API 2 di programmazione come OpenMPI. accelerators: gli acceleratori di calcolo sono oggetto di grande interesse attualmente, soprattutto quelli con architettura di tipo General Purpose GPU (GPGPU). 2 il termine API sta per Application Programming Interface, indica un insieme di librerie che permettono di interfacciarsi con il software. In questo caso particolare si intende un API in grado di integrarsi nel codice sorgente grazie a delle particolari funzioni di lbreria o direttive #pragma. 4

5 In generale si tratta di periferiche collegate direttamente ai nodi in grado di velocizzare notevolmente il calcolo rispetto all host. A seconda del tipo di hardware utilizzato, queste periferiche possono lavorare in modalità offload (accesso indiretto all acceleratore) o in modalità nativa (accesso diretto all acceleratore). Data la diversità di queste architetture rispetto all host, in questo caso si evidenzia molto l importanza di avere un API che permette di utilizzare l acceleratore in modo da mantenere un buon rapporto prestazioni / semplicità di utilizzo. node / socket /core / hyperthreads: in questo caso si tratta di suddividere il calcolo tra le unità di elaborazione del singolo nodo, ciò che vogliamo ottenere è, a parità di dimensione del problema, una diminuzione del tempo di calcolo, ovvero, lo strong scaling. Spesso già in questo modo è possibile ottenere un ottimo aumento delle prestazioni rispetto al calcolo seriale, ovvero si ottiene una buona scalabilità (anche su elaboratori tradizionali come le workstations). In questo caso il programmatore può appoggiarsi a strumenti come OpenMP, un tipo particolare di API in grado di gestire dinamicamente la suddivisione di processi con i quali può essere eseguito un particolare calcolo. Spesso i singoli core delle CPU possono inoltre eseguire più di una istruzione in parallelo (hyperthreading), ciò consente un livello di scalabilità in più (anche se in questo caso la scalabilità non è sempre buona). Un ulteriore ottimizzazione può essere data dall analisi della cosiddetta hardware affinity, ovvero una distribuzione dei processi che tenga conto della disposizione fisica delle componenti (livello socket). superscalar / pipeline / vector: questi livelli di ottimizzazione dipendono fortemente dall architettura, essi riguardano la capacità delle singole unità di elaborazione di gestire il calcolo al loro interno. In determinati ambiti, assume una certa importanza lo sfruttamento della cosiddetta vettorizzazione, ovvero la possibilità di fare molti calcoli nell unità di tempo grazie al fatto di poter gestire molti dati con una sola istruzione, questo è ciò che accade nelle unità SIMD delle CPU (Single Instruction Multiple Data). In questo senso l industria hardware ha come obiettivo l ottenimento di registri SIMD sempre più lunghi, in modo che la singola istruzione possa elaborare sempre più dati in un solo ciclo. Tuttavia è possibile sfruttare questa caratteristica solo se il calcolo è vettorizabile, e questo non sempre è possibile. In generale quando l utente si trova davanti ad un elaboratore HPC, si pone il problema di avvicinarsi il più possibile a quella che è la performance di picco. Questa tuttavia non è quasi mai facile da raggiungere, poiché per ottenere tale potenza il software andrebbe scritto in un linguaggio di basso livello (vicino al linguaggio macchina), in modo da ottenere il massimo dell ottimizzazione dalla particolare architettura che si sta utilizzando. Di fatto però, essa risulta un operazione spesso estremamente dispendiosa in termini di tempo e poco fattibile nella pratica. Si evidenzia quindi il problema di ottenere uno speedup che sia il più elevato possibile, mantenendo al tempo stesso un buon livello di semplicità in quello che viene chiamato porting del software. Il tempo speso per il porting sta acquisendo un importanza crescente nello sviluppo del software, per questo motivo è nata l esigenza di disporre di strumenti di programmazione che permettano al programmatore di sfruttare una buona parte delle performance di picco senza un elevato dispendio di tempo in termini di lavoro di scrittura del codice. In questo lavoro di tesi sono state studiate alcune delle nuove tecnologie di accelerazione di calcolo in funzione di un applicabilità orientata al porting di applicazioni scientifiche. Per poter eseguire lo studio è stato sviluppato un software ad hoc che potesse simulare (con le stesse caratteristiche algoritmiche di base, ma al tempo stesso in modo descrittivo rispetto ad un problema semplice) il comportamento di un software scientifico tipico destinato allo studio dell evoluzione nel tempo di un sistema descritto da equazioni differenziali alle derivate parziali discretizzate su una 5

6 griglia rettangolare o cubica. L algoritmo scelto è stato Game of Life di John Conway. Esso implementa una semplice regola di evoluzione e conserva tutte le caratteristiche necessarie al nostro studio, come la possibilità di separare la griglia di calcolo in sottodomini e di avere un controllo fine sull esecuzione. Poichè la densità di calcoli secondo l algoritmo originale è piuttosto bassa, abbiamo aggiunto una funzione di calcolo vettoriale il cui peso è parametrizzato con l obiettivo di testare la capacità di vettorizzazione nei diversi device studiati. In particolare, grazie alla possibilità di lavorare sul cluster Eurora messo a disposizione dal Cineca di Bologna, è stato possibile mettere a confronto la potenza di calcolo di un nodo convenzionale (2 CPU Sandy Bridge da 8 core Gflops), con due acceleratori di calcolo di ultima generazione: l acceleratore Intel Xeon PHI MIC (1,01 Tflops) e la GPGPU Nvidia Tesla K20 (1,1 Tflops), inoltre è stata studiata l integrazione di queste tecnologie in un architettura cluster multinodo. Parallelamente sono state studiate le problematiche di implementazione delle API di programmazione necessarie al calcolo parallelo, in particolare è stata studiata l integrazione di OpenMPI, OpenMP e OpenACC, focalizzandoci sull utilizzo di quest ultima, un API nata con l obiettivo di facilitare e uniformare la programmazione degli acceleratori (in particolare GPGPU). 6

7

8 1 Hardware Dal punto di vista dell hardware HPC, stiamo assistendo ad una transizione da sistemi seriali collegati in parallelo a sistemi, sempre collegati in parallelo, dotati di elevata accelerazione vettoriale, attraverso particolari device chiamati coprocessori o acceleratori di calcolo. Attualmente l industria dell hardware fornisce principalmente due possibilità di implementazione a livello di coprocessore: acceleratori di tipo manycore, in cui si cerca di inserire un elevato numero di core all interno di un architettura dalle caratteristiche simili a quelle tradizionali. In questo caso l aumento di prestazioni è dato da un numero mediamente elevato di unità di calcolo che conservino però anche molte delle caratteristiche computazionali dei processori tradizionali. In questo tipo di tecnologie il numero di core di calcolo in un device può essere dell ordine di 100 unità. acceleratori di tipo GPGPU, dove si cerca di sfruttare l elevato parallelismo hardware delle GPU. In questi device le singole unità di calcolo sono più elementari (non hanno a disposizione lo stessa sistema di componenti logici delle CPU) inoltre funzionano normalmente ad un clock più basso, tuttavia possono essere presenti in un numero notevolmente elevato sullo stesso device. Tipicamente in un acceleratore di tipo GPGPU è presente un numero di core di calcolo che può andare dalle 1000 alle 3000 unità. In questo lavoro di tesi, abbiamo cercato di esplorare entrambe le strade attraverso due esemplari ben rappresentativi delle due tecnologie: Intel Xeon PHI MIC come device manycore e Nvidia Tesla Kepler 20 come device GPGPU, il tutto mantenendo un confronto con la tecnologia convenzionale di riferimento, nel nostro caso il processore Sandy Bridge installato sull host utilizzato per i test. Figura 2: l andamento del numero delle unità di calcolo dei device con gli anni, le GPGPU tendono ad aumentarne sempre di più la quantità. Il device Intel MIC si posiziona in una zona intermedia poiché cerca di raccogliere entrambe le caratteristiche: elevato parallelismo del device ed elevata prestazione di calcolo del singolo core. 8

9 Figura 3: l andamento della potenza in Gflops delle singole unità di calcolo dei device lungo gli anni. Sulle GPGPU la potenza per singolo core aumenta abbastanza lentamente, poiché rispetto a tale tecnologia l industria si sta focalizzando sull aumento del numero di unità di calcolo all interno dello stesso socket. 9

10 1.1 CPU Intel Xeon Sandy Bridge Questo processore possiede molte caratteristiche del tutto simili ai processori in commercio comunemente utilizzati nelle workstation. Come per i modelli equivalenti nelle workstation, anche i Sandy Bridge possono in linea teorica aumentare le prestazioni grazie all hyperthreading, tecnologia che consente al processore di elaborare istruzioni in più thread separati nello stesso core. Questi particolari processori possono gestire fino a 2 thread per ogni core fisico, ciò significa che ogni nodo può teoricamente gestire fino a 32 processi separati. Inoltre una differenza importante rispetto alle CPU più convenzionali, è la lunghezza dei registri di elaborazione delle unità SIMD, che in questo caso arriva fino a 256 bit (questa caratteristica è anche nota come Advanced Vector extensions, nei processori tradizionali invece la lunghezza dei registri SIMD è di 128 bit). Le due CPU Sandy Bridge sull host sono collegate da un bus QPI (Intel Quickpath Internconnect), un bus seriale introdotto da Intel nel 2008 in grado di raddoppiare la banda di comunicazione tra processore e chipset rispetto alla tecnologia precedente, il Quad Pumped. Figura 4: schema di connessione dei due processori Intel Xeon Sandy Bridge sullo stesso nodo. La velocità del bus QPI è fondamentale affinché le due CPU possano lavorare insieme senza perdita di prestazioni. La performance di picco di questo processore per i calcoli in doppia precisione è di 134,4 Gflop/s. 10

11 1.2 L acceleratore Intel Xeon PHI (MIC) L acceleratore Intel Xeon PHI MIC (Many Integrated Core)[3], nasce con l intento di creare un hardware di tipo manycore che potesse però essere programmabile in modo simile alle CPU convenzionali. Ciò è dovuto al fatto che fondamentalmente l architettura del device risulta molto simile a quella dell host. Alcune caratteristiche lo rendono particolarmente interessante per il calcolo: Ogni acceleratore MIC è equipaggiato con 60 core fisici con clock da 1Ghz. Ogni core sul MIC è in grado di gestire fino a 4 thread separati, la capacità teorica di parallelizzazione del device quindi arriva fino a 240 thread. Le unità SIMD (Single Instruction Multiple Data) di ogni core possono elaborare fino a 512 bit di dati con una singola istruzione (capacità doppia rispetto alle SIMD dei processori Sandy Bridge). Questa caratteristica rende i MIC particolarmente adatti per i calcoli che utilizzano la vettorizzazione. La memoria dedicata è di 8 Gbyte. Oltre alle caratteristiche più strettamente inerenti al calcolo, il MIC si rivela interessante anche per la sua notevole versatilità. A differenza degli acceleratori GPU, questo tipo di coprocessore è in grado di comportarsi quasi come se fosse un host tradizionale, questo grazie al fatto che al suo interno fa funzionare un micro-sistema operativo basato su linux che è in grado di comunicare con l esterno come se si trovasse su una rete locale (attraverso uno stack virtuale TCP/IP che comunica tramite il bus PCIe). Questa particolare caratteristica ci ha permesso di poter utilizzare il MIC nella cosiddetta modalità nativa 3, ciò significa che in questa modalità (diversamente da quello che accade con le GPU) sostanzialmente tutto il software viene gestito dal coprocessore, proprio come se fosse un host. Questo approccio in un certo senso semplifica molto il porting di un software su questa architettura (anche se come vedremo non ne elimina del tutto le problematiche), ma di fatto in questo modo l host viene ridotto a semplice tramite tra l acceleratore ed il resto della rete. La performance di picco in doppia precisione per questo device è di 1011 Gflop/s. 3 l acceleratore Intel MIC può essere utilizzato anche in modalità offload, ma questo approccio con il MIC si è dimostrato decisamente più complicato rispetto alla modalità nativa. Motivo per cui in questo lavoro di tesi ci siamo focalizzati principalmente su di essa. 11

12 Figura 5: schema di connessione dell acceleratore Intel Xeon PHI MIC. Lo stack virtuale TCP/IP consente un utilizzo molto trasparente del device, il quale in questa modalità, è raggiungibile tramite tradizionale connessione via ssh. 12

13 1.3 L acceleratore Nvidia Tesla Kepler 20 L acceleratore Nvidia Tesla Kepler 20 è un modello di GPGPU pensato appositamente per incrementare le performance di calcolo. A livello di architettura, essa conserva gran parte delle peculiarità che contraddistinguono le GPU (fatta eccezione per l uscita video, che nella serie Tesla è assente). Vi è una profonda diversità tra questo tipo di hardware e quello dell host o anche solo del MIC. Capirne le differenze è fondamentale per poter affrontare al meglio le problematiche che si incontrano lungo tutto il lavoro di porting. Mentre la CPU rappresenta un entità di calcolo autonoma, la quale, oltre ai core, monta anche un complesso sistema di unità di controllo interno che le consentono un organizzazione molto efficiente e versatile del lavoro computazionale, la GPU d altra parte non potrà mai essere svincolata da una CPU che le impartisca dei comandi. Per questo principale motivo la programmazione su GPGPU necessita di una particolare attenzione. Figura 6: una rappresentazione stilizzata delle differenze di architettura tra CPU e GPU. Nella GPGPU le unità di controllo occupano uno spazio molto ridotto rispetto alla CPU, poiché prevale la necessità di avere un elevatissimo numero di core di calcolo. Le GPU in generale, sono state fin dall inizio appositamente pensate con una grandissima attitudine al calcolo parallelo, ciò è dovuto al loro scopo originario, che è quello di eseguire un enorme mole di calcoli su oggetti grafici 3D in tempo reale. Tipicamente, una GPGPU attualmente in commercio contiene un numero totale di core di elaborazione che può essere dell ordine di 10³. Questi piccoli core (il cui clock è di solito relativamente basso, intorno ai 600 Mhz), sono raggruppati in macro-sistemi di elaborazione, detti Stream Multi Processor (o SMX), i quali contengono, oltre ai core, anche le altre componenti necessarie alla gestione dei dati, come il warp scheduler, il register file, e i diversi tipi di memoria alle quali possono accedere i thread dello stesso SMX. Nel nostro caso particolare, la K20 può distribuire il calcolo su 2496 core, divisi tra 15 SMX. Per i calcoli in doppia precisione, la performance di picco dell acceleratore Nvidia Tesla K20 è di 1170 Gflop/s. 13

14 Figura 7: uno schema dell acceleratore K20. Gli SMX della scheda sono stati pensati per poter lavorare separatamente rispetto agli altri. Figura 8: schema dettagliato di uno dei 15 SMX che compongono la K20. Nello stesso SMX, i core della GPGPU si trovano in una condizione di work sharing poiché condividono lo stesso blocco di memoria. 14

15 Mentre con l acceleratore Intel MIC potevamo scegliere tra due modalità di utilizzo, in questo caso la K20 è utilizzabile esclusivamente in modalità offload. La modalità offload, implica che solo una parte del software venga effettivamente trasferita ed eseguita dall acceleratore, in particolare tutte le funzioni eseguite in offload si chiamano generalmente kernels. I kernels possono essere sia di calcolo che di trasferimento dati, ma in generale sono comunque chiamati dall host ed eseguiti dal device. Figura 9: rappresentazione della modalità offload per le GPU. Il collo di bottiglia nella timeline di esecuzione è rappresentato dall accesso alla memoria principale del sistema, condizionato dalla velocità del bus PCIe. C è un evidente collo di bottiglia nell utilizzo di questo acceleratore, che è rappresentato dal bus PCIe attraverso il quale è collegato all host. Benchè il trasferimento dati tra device e host possa raggiungere gli 8 GB/s, l eccessivo numero di trasferimenti durante il calcolo può influire negativamente sulle prestazioni, questo problema si può in parte risolvere a seconda delle situazioni sfruttando la capacità del device di fare overlap tra i kernels. L overlap permette al device non solo di eseguire contemporaneamente il calcolo di due funzioni diverse, ma anche di calcolare e trasferire dati in modo asincrono, facendo risparmiare una notevole quantità di tempo di esecuzione. Anche in questo caso è necessario porre grande attenzione a come si imposta l asincronìa dei kernels, poiché questa potrebbe altrimenti produrre risultati numerici scorretti. 15

16 1.4 Il prototipo EURORA Per effettuare test su hardware così differente, è stato di particolare aiuto l utilizzo del prototipo HPC Eurora (EURopean many integrated core Architecture), messo a disposizione dal CINECA 4 di Bologna. Eurora nasce con l obiettivo di valutare le nuove architetture per i sistemi tier-0 5 di prossima generazione, tra cui gli acceleratori di calcolo. Eurora è un cluster composto da 65 nodi, di cui uno di login, ognuno dei 64 nodi di computazione è composto da un host (2 CPU Intel Xeon Sandy Bridge da 8 core) e da due acceleratori. 32 nodi utilizzano due acceleratori Intel Xeon PHI (MIC), mentre gli altri 32 sono accoppiati a due acceleratori Nvidia Tesla Kepler nodi utilizzano 2 CPU SandyBridge E con clock pari a 2 Ghz, mentre gli altri 32 utilizzano 2 CPU SandyBridge E5-2687W con clock pari a 3.10 GHz. La Ram a disposizione della maggior parte dei nodi (58) è di 16 Gb, nei nodi restanti (6) è possibile allocare fino a 32 Gb. Tutti i nodi sono interconnessi tra loro da una rete Qlogic Infiniband, in grado di garantire una connessione a banda elevata e bassa latenza. Lo storage dei dati viene effettuato tramite dischi SSD da 160 Gbyte (uno per nodo). Dal punto di vista del supporto software, sulla macchina è stato installato il sistema CentOS 6.4 con il kernel Linux ed il software PBSpro 12.2 per la gestione delle code di esecuzione sul cluster. I compilatori disponibili sul cluster Eurora sono tre: The Portland Group, Inc. C Compiler v con framework OpenMPI v Intel C Compiler v con frameowrk Intel MPI v GNU Compiler Collection v con framwork Open MPI v il CINECA è la maggiore istituzione di supercomputing in Italia, è gestita da un consorzio di diverse Università italiane (69) e istituti di ricerca. 5 tier-0 indica il livello più alto in una classificazione di HPC ad alte prestazioni di calcolo e alta capacità. 16

17

18 2 Le API utilizzate Parallelamente all evoluzione dell hardware, anche l approccio rispetto alla programmazione deve potersi evolvere per mantenere la tecnologia sfruttabile ad un buon livello di rendimento. Per fare il porting su un cluster come Eurora, è necessario integrare nello stesso codice due diversi modelli di calcolo 6 : un modello a memoria distribuita (o sistema distribuito) e un modello a memoria condivisa. Figura 10: rappresentazione di un sistema a memoria distribuita (a) e un sistema a memoria condivisa (b). Il modello a memoria distribuita presuppone un sistema in cui i nodi di calcolo sono collegati da una rete decentralizzata, nella quale lavorano autonomamente ad una porzione del problema da risolvere utilizzando i dati che sono stati trasferiti nella propria memoria locale. L esecuzione viene svolta da processi in grado di comunicare tra loro attraverso lo scambio di messaggi, anche e soprattutto tra nodi diversi nella stessa rete. Questa operazione viene effettuata grazie ad una libreria apposita in grado di gestire questo scambio di messaggi attraverso il protocollo MPI (Message Passing Interface), nel nostro caso in particolare è stata utilizzata la libreria OpenMPI. Il modello a memoria condivisa invece, affronta il problema in un sistema che vede una serie di processi che devono svolgere l elaborazione condividendo la stessa memoria fisica (tipicamente all interno di un singolo nodo di calcolo). Generalmente si ha a disposizione un architettura con più unità di elaborazione, l API di programmazione in questo caso si occupa della suddivisione del poblema in diversi thread di esecuzione sullo stesso nodo (o device), in modo da distribuire il carico di lavoro tra le unità di calcolo fisiche (core). I thread in questo caso possono accedere alla stessa porzione di memoria principale sul device. Nel nostro caso particolare, dovendo interagire con due tipi di architetture particolarmente differenti, è stato necessario integrare per questo scopo due API: OpenMP per il calcolo su acceleratore MIC (modalità nativa) e su host, e OpenACC per il calcolo su GPGPU. 6 il codice senza alcuna modifica è in grado di funzionare, ma utilizzando un solo core ed un solo nodo per l intera esecuzione del programma. Questa modalità, che è quella più tradizionale, viene anche detta modalità seriale e, come vedremo, risulta particolarmente lenta se paragonata alla versione parallela. 18

19 Per poter sfruttare appieno le potenzialità di un cluster come Eurora, è necessario far interagire i due modelli sulla stessa macchina, in modo che il calcolo venga svolto sfruttando il massimo delle risorse a disposizione. 19

20 2.1 OpenMPI OpenMPI rappresenta un implementazione libera del protocollo MPI, gli obiettivi dello standard sono quelli di ottenere un aumento delle performance di calcolo, una buona scalabilità e portabilità[4][5]. Figura 11: struttura base di un programma MPI. Anche nel modello MPI sono presenti un momento iniziale in cui vengono creati e suddivisi i processi di lavoro, ed un momento finale in cui questi si riuniscono nel processo principale. Nel protocollo MPI la comunicazione tra i processi avviene attraverso lo scambio di messaggi. Lo standard definisce come il dato deve essere rappresentato, come specificare il destinatario del messaggio e come implementare la comunicazione. I tipi di dato sono definiti dallo standard MPI, nel quale sono definiti i tipi corrispondenti per i dati più comuni (e.g., MPI_INT, MPI_DOUBLE_PRECISION, MPI_CHAR), mentre per costruire tipi di dato più complessi esistono primitive apposite. Il destinatario di un messaggio viene identificato specificando un comunicatore, il tag e il rank. Il comunicatore identifica un contesto di comunicazione al quale appartiene un gruppo di processi, il comunicatore di default è MPI_COMM_WORLD, che è quello che indica il contesto di comunicazione con tutti i processi. Il tag è un etichetta che permette di caratterizzare ulteriormente il messaggio all interno del comunicatore. Il rank invece è un numero intero che identifica in maniera univoca il processo destinatario. MPI può svolgere la comunicazione tra processi in diversi modi, di default viene utilizzata la modalità bloccante e asincrona. La modalità bloccante è quella in cui il processo attende il completamento della primitiva la quale, se è asincrona, non attende la risposta dal processo ricevente. Le funzioni di libreria più comuni per lo scambio di messaggi sono MPI_Recv(), MPI_Send() e MPI_Sendrecv(). Nel nostro caso specifico ci siamo appoggiati a quest ultima per lo scambio di messaggi tra i nodi di calcolo. La principale differenza rispetto alle altre due, è che la funzione MPI_Sendrecv() combina in una 20

21 Figura 12: rappresentazione grafica dei comunicatori MPI Figura 13: rappresentazione di una comunicazione MPI tra due processi attivi su nodi differenti. sola chiamata l invio di un messaggio ad un destinatario e la ricezione di un altro messaggio da un altro processo. I parametri richiesti dalla funzione sono gli stessi di MPI_Recv() e MPI_Send(), ma rispetto a queste ultime MPI_Sendrecv() offre il vantaggio di lasciare al sottosistema di comunicazione il compito di controllare le dipendenze tra invii e ricezioni evitando così il verificarsi di un possibile deadlock 7. Nella modalità utilizzata da noi per effettuare i test, viene creato un processo MPI per ogni nodo di calcolo e ogni processo comunica tramite la funzione MPI_Sendrecv(). 7 il deadlock è quella particolare condizione in cui due o più processi si bloccano a vicenda a causa del fatto che ognuno di essi aspetta che l altro abbia finito. 21

22 2.2 OpenMP OpenMP è un API[6] utile per agire sul cosiddetto strong scaling delle performance, ovvero la capacità di eseguire lo stesso problema in minor tempo. Tipicamente ci si trova di fronte ad un architettura multi- o many-core a memoria condivisa, con il problema quindi di poter sfruttare in modo semplice le risorse messe a disposizione dall hardware. L approccio seguito da OpenMP (e come vedremo anche da OpenACC) è quello delle pragma, sostanzialmente questo consiste nell inserire all interno del codice delle particolari direttive di preprocessore per fornire delle richieste al compilatore sul tipo di operazioni da svolgere in determinate parti del programma. Queste direttive operano quasi come se fossero dei suggerimenti, il compilatore le valuta e, se sono compatibili con lo standard utilizzato, ne verifica l attuabilità. Se la richiesta è fattibile, durante l operazione di linking il compilatore inserisce nel binario il codice corrispondente alla richiesta. Tipicamente l utilizzo di OpenMP all interno del programma è finalizzato alla suddivisione (fork) del carico di lavoro di una o più funzioni del programma in thread di esecuzione, da inviare alle diverse unità di calcolo del sistema utilizzato. Una volta che la funzione è stata calcolata, i thread vengono riuniti nel processo principale (join) ed il programma prosegue. Figura 14: una rappresentazione della suddivsione in thread OpenMP all interno di un programma. A seconda di come sono inserite le direttive, possono essere parallelizzati uno o tutti i task. Prendiamo come esempio il seguente semplice programma: #include <stdio.h> int main(void) { #pragma omp parallel printf("hello, world.\n"); return 0; } La direttiva #pragma omp parallel indica la richiesta al compilatore di suddividere se possibile in n-processi lo statement che segue (utilizzando le parentesi graffe può essere indicato anche un insieme di statement). Il numero di processi con cui viene suddiviso il task, viene letto dalla variabile d ambiente OMP_NUM_THREADS,ma può essere anche settato all interno del programma tramite la funzione di libreria omp_set_num_threads(n) 8. 8 per l utilizzo delle funzioni di libreria è necessario includere il file <omp.h> nell header del programma. 22

23 Il risultato è che viene inviata la stringa Hello, world. allo standard output un numero di volte pari ai processi con cui è stato eseguito il programma. Uno dei problemi su cui si deve porre attenzione nell applicare queste direttive è la race condition, ovvero quel fenomeno per cui ogni processo cerca di svolgere la funzione nel minor tempo possibile, inviando così in output il risultato senza attendere che l altro abbia terminato. Questo fenomeno di asincronìa tra processi che lavorano sullo stesso task fa parte di quell insieme di problematiche di cui tenere conto quando si fa il porting di un applicazione, altrimenti si corre il rischio di ottenere dei risultati non corretti. Uno degli strumenti che ci permettono di risolvere questo problema è la barrier, la quale può essere sia implicita che esplicita. La barrier è un punto del codice in cui il sistema attende che tutti i processi abbiano terminato le operazioni prima di procedere, in questo modo il programma prosegue solo se tutti i processi hanno completato il task assegnato, garantendo così un risultato coerente. Una barrier è implicita se ad esempio utilizziamo la direttiva #pragma omp parallel (come nell esempio precedente), con quest ultima il compilatore inserisce una barrier alla fine dell elenco di statement definito dalla pragma, in questo modo non si verificano race condition. In alternativa la barrier può essere esplicitata (ad esempio se dobbiamo risincronizzare i processi all interno della stessa parallel), utilizzando la direttiva #pragma omp barrier. Il numero di processi con cui suddividiamo i task deve necessariamente tenere conto dell architettura se non si vogliono degradare le prestazioni. In un sistema con 2 core ad esempio, la suddivisione in 2 processi può essere una scelta ottimale, d altraparte se aumentiamo di molto il numero di processi rispetto al numero dei core fisici, si rischia di degradare le prestazioni a causa dell overload di operazioni che si genera nella CPU durante l esecuzione. Fisicamente l hardware è capace di gestire un numero limitato di operazioni, se si richiede una suddivisione dei task eccessiva, una parte delle operazioni verrà svolta inevitabilmente in modo seriale, perdendosi così ogni vantaggio derivante dall approccio parallelo. Se la CPU in questione supporta l hyperthreading (ad esempio è capace di processare 2 thread per core), può essere conveniente in questo caso suddividere i task in 2 processi per core anziché 1 per poter aumentare le performance. Il potenziale di questa tecnologia non è sempre sfruttabile, ciò dipende molto dal tipo di calcolo che il processore deve svolgere e dal processore stesso. Nei nostri test ad esempio abbiamo potuto constatare che l acceleratore Intel MIC gestisce meglio l hyperthreading sul singolo core di quanto faccia la CPU Intel Sandy Bridge del nodo (host), motivo per cui per i test eseguiti sul nodo abbiamo deciso di non saturare completamente i thread del core, al contrario dei test effettuati su Intel MIC. 23

24 2.3 OpenACC Da quando è nata l idea di svolgere calcoli su sistemi GPGPU, si è contemporaneamente creata la necessità di creare un linguaggio che permettesse al programmatore di interfacciarsi con le risorse di questo tipo di hardware, molto diverso dai sistemi convenzionali. Per le GPGPU prodotte da Nvidia, venne creato nel 2006 un estensione ai linguaggi di programmazione più diffusi (come C, C++ o Fortran) chiamata CUDA (Compute Unified Device Architecture). 9 Per le GPGPU di altri produttori, è invece possibile utilizzare un linguaggio (dall approccio molto simile a CUDA) chiamato OpenCL. Sviluppato inizialmente da Apple, OpenCL divenne poi proprietà nel 2008 di un consorzio senza scopo di lucro, il Khronos Group. Contrariamente a CUDA, OpenCL può essere utilizzato su un più ampio spettro di architetture, dalle CPU convenzionali fino alle GPGPU. Sia CUDA che OpenCL, sono stati concepiti con l obiettivo di accelerare il calcolo, basandosi sul concetto di offload del kernel di esecuzione. Queste estensioni permettono di ottenere un notevole controllo delle risorse di calcolo, e quindi di raggiungere un buon livello di ottimizzazione, ma ci sono fondamentalmente due controindicazioni importanti al loro utilizzo: Il codice scritto con queste estensioni è utilizzabile solo con architetture compatibili, questo è particolarmente vero per CUDA, sfruttabile solo con le GPU Nvidia. Questo aspetto limita di molto la portabilità del codice. Essendo un linguaggio di livello intermedio, l ottimizzazione si paga con un elevata difficoltà di integrazione e manutenzione del codice. In sostanza il software diventa piuttosto complicato da sviluppare e da mantenere. Con l obiettivo di creare un interfaccia di programmazione che garantisse una migliore portabilità del codice mantenendo un livello di complessità più gestibile, nel 2012 venne creata una corporation no profit con il contributo di diverse compagnie. Questa interfaccia, chiamata OpenACC (Open Accelerator), ha mantenuto volutamente molti tratti simili ad OpenMP, questo anche per facilitare i programmatori che avessero già una buona esperienza con questo genere di linguaggio. Anche OpenACC infatti, si basa sull utilizzo delle direttive pragma, affiancate però in questo caso dalla parola chiave acc. La funzione svolta da OpenACC è assimilabile a quella di un traduttore di funzioni. Quando un codice scritto con OpenACC viene compilato, viene specificato al compilatore anche il tipo di architettura su cui deve essere avviato il programma in offload, in questo modo quando il compilatore rileva delle direttive OpenACC cerca di tradurre le porzioni di codice che vogliamo eseguire sull acceleratore nei kernel associati al linguaggio di più basso livello (come CUDA o OpenCL). Se ad esempio vogliamo compilare OpenACC per un architettura Nvidia, il compilatore cercherà automaticamente di tradurre ciò che noi abbiamo indicato come kernels OpenACC, in kernels CUDA. Dopo questa operazione il codice CUDA viene effettivamente compilato tramite il driver Nvidia in codice macchina compatibile con la GPU Nvidia. 9 con Cuda viene di solito indicata anche l architettura delle GPU Nvidia di nuova generazione, un numero di versione permette inoltre di associare l architettura al modello corrispondente (e.g. Kepler 20 supporta l architettura Cuda 3.5) 24

25 Il passaggio di traduzione tra OpenACC e CUDA/OpenCL viene svolto grazie ad un sistema di riconoscimento che è in grado di rilevare i loop adatti alla parallelizzazione e successivamente di trovare la configurazione ottimale dei parametri hardware per fare sì che l accelerazione avvenga in modo efficiente. Figura 15: diagramma del processo di compilazione di un codice scritto con OpenACC. Di fatto, OpenACC rappresenta un linguaggio di traduzione, che permette di generare in modo più semplice funzioni CUDA o OpenCL. Le estensioni CUDA e OpenCL utilizzano per loro conto una rappresentazione dei sottoprocessi abbastanza diversa dai processori convenzionali. Questa rappresentazione è stata pensata con l obiettivo di suddividere il problema di calcolo compatibilmente con l architettura del device. In OpenACC, le entità virtuali utilizzate per indicare i processi di calcolo sul device sono indicate come gang, workers e vector. Queste rappresentazioni hanno un loro corrispettivo nell estensione associata (che sia OpenCL o CU- DA), il programmatore quindi dovrà tenerne conto nel caso dovesse agire manualmente su questi parametri. Tipicamente le gang, corrispondono ai block del codice CUDA e ai work-group nel codice Open- CL, mentre i vector corrispondono ai thread nel codice CUDA e ai work-item nel codice OpenCL. I workers, vengono invece rappresentati come un insieme di thread su CUDA (anche chiamato warp) o come un insieme di work-item su OpenCL. 25

Introduzione. Il principio di localizzazione... 2 Organizzazioni delle memorie cache... 4 Gestione delle scritture in una cache...

Introduzione. Il principio di localizzazione... 2 Organizzazioni delle memorie cache... 4 Gestione delle scritture in una cache... Appunti di Calcolatori Elettronici Concetti generali sulla memoria cache Introduzione... 1 Il principio di localizzazione... 2 Organizzazioni delle memorie cache... 4 Gestione delle scritture in una cache...

Dettagli

Massimo Bernaschi Istituto Applicazioni del Calcolo Consiglio Nazionale delle Ricerche

Massimo Bernaschi Istituto Applicazioni del Calcolo Consiglio Nazionale delle Ricerche Massimo Bernaschi Istituto Applicazioni del Calcolo Consiglio Nazionale delle Ricerche m.bernaschi@iac.cnr.it L'evoluzione del calcolo ad alte prestazioni dal punto di vista dell'utente e dello sviluppatore

Dettagli

Prodotto Matrice - Vettore in OpenMP

Prodotto Matrice - Vettore in OpenMP Facoltà di Ingegneria Corso di Studi in Ingegneria Informatica Elaborato di Calcolo Parallelo Prodotto Matrice - Vettore in OpenMP Anno Accademico 2011/2012 Professoressa Alessandra D Alessio Studenti

Dettagli

GPGPU GPGPU. anni piu' recenti e' naturamente aumentata la versatilita' ed usabilita' delle GPU

GPGPU GPGPU. anni piu' recenti e' naturamente aumentata la versatilita' ed usabilita' delle GPU GPGPU GPGPU GPGPU Primi In (General Purpose computation using GPU): uso del processore delle schede grafice (GPU) per scopi differenti da quello tradizionale delle generazione di immagini 3D esperimenti

Dettagli

Infrastrutture Software

Infrastrutture Software Infrastrutture Software I componenti fisici di un sistema informatico sono resi accessibili agli utenti attraverso un complesso di strumenti software finalizzati all utilizzo dell architettura. Si tratta

Dettagli

Università degli Studi di Napoli Federico II

Università degli Studi di Napoli Federico II Università degli Studi di Napoli Federico II Facoltà di Scienze MM.FF.NN. Corso di Laurea in Informatica Tesi sperimentale di Laurea Triennale Calcolo ad alte prestazioni basato su GPU Un modello ibrido

Dettagli

FONDAMENTI di INFORMATICA L. Mezzalira

FONDAMENTI di INFORMATICA L. Mezzalira FONDAMENTI di INFORMATICA L. Mezzalira Possibili domande 1 --- Caratteristiche delle macchine tipiche dell informatica Componenti hardware del modello funzionale di sistema informatico Componenti software

Dettagli

Ing. Paolo Domenici PREFAZIONE

Ing. Paolo Domenici PREFAZIONE Ing. Paolo Domenici SISTEMI A MICROPROCESSORE PREFAZIONE Il corso ha lo scopo di fornire i concetti fondamentali dei sistemi a microprocessore in modo semplice e interattivo. È costituito da una parte

Dettagli

Dispensa di Fondamenti di Informatica. Architettura di un calcolatore

Dispensa di Fondamenti di Informatica. Architettura di un calcolatore Dispensa di Fondamenti di Informatica Architettura di un calcolatore Hardware e software La prima decomposizione di un calcolatore è relativa ai seguenti macro-componenti hardware la struttura fisica del

Dettagli

Università degli Studi di Salerno

Università degli Studi di Salerno Università degli Studi di Salerno Facoltà di Scienze Matematiche Fisiche e Naturali Corso di Laurea in Informatica Tesi di Laurea Algoritmi basati su formule di quadratura interpolatorie per GPU ABSTRACT

Dettagli

LabVIEW offre un ambiente di programmazione grafica

LabVIEW offre un ambiente di programmazione grafica 03 COME OTTIMIZZARE IN LABVIEW APPLICAZIONI DI TEST AUTOMATIZZATI PER PROCESSORI MULTICORE David Hall Vediamo come delle applicazioni scritte in LabVIEW possono essere ottimizzate sfruttando tecniche di

Dettagli

D3.1 Documento di analisi della visualizzazione 3D in ambiente Cloud e relative problematiche

D3.1 Documento di analisi della visualizzazione 3D in ambiente Cloud e relative problematiche D3.1 Documento di analisi della visualizzazione 3D in ambiente Cloud e relative problematiche Il Cloud Computing La visualizzazione nella Cloud Problematiche Virtualizzazione della GPU Front end Virtualization

Dettagli

Davide Cesari Massimo Bider Paolo Patruno. Emilia Romagna

Davide Cesari Massimo Bider Paolo Patruno. Emilia Romagna 1 IMPLEMENTAZIONE OPERATIVA DI UN MODELLO DI PREVISIONI METEOROLOGICHE SU UN SISTEMA DI CALCOLO PARALLELO LINUX/GNU Davide Cesari Massimo Bider Paolo Patruno Emilia Romagna LM-COSMO-LAMI 2 Il modello LM

Dettagli

Parte IV Architettura della CPU Central Processing Unit

Parte IV Architettura della CPU Central Processing Unit Parte IV Architettura della CPU Central Processing Unit IV.1 Struttura della CPU All interno di un processore si identificano in genere due parti principali: l unità di controllo e il data path (percorso

Dettagli

Altri metodi di indicizzazione

Altri metodi di indicizzazione Organizzazione a indici su più livelli Altri metodi di indicizzazione Al crescere della dimensione del file l organizzazione sequenziale a indice diventa inefficiente: in lettura a causa del crescere del

Dettagli

Il Sistema Operativo. C. Marrocco. Università degli Studi di Cassino

Il Sistema Operativo. C. Marrocco. Università degli Studi di Cassino Il Sistema Operativo Il Sistema Operativo è uno strato software che: opera direttamente sull hardware; isola dai dettagli dell architettura hardware; fornisce un insieme di funzionalità di alto livello.

Dettagli

Introduzione alla GPGPU Corso di sviluppo Nvidia CUDATM. Davide Barbieri

Introduzione alla GPGPU Corso di sviluppo Nvidia CUDATM. Davide Barbieri Introduzione alla GPGPU Corso di sviluppo Nvidia CUDATM Davide Barbieri Contatti skype: davbar86 mail: davide.barbieri@ghostshark.it Panoramica corso Introduzione al mondo delle GPU Modello GPGPU Nvidia

Dettagli

Prestazioni computazionali di OpenFOAM sul. sistema HPC CRESCO di ENEA GRID

Prestazioni computazionali di OpenFOAM sul. sistema HPC CRESCO di ENEA GRID Prestazioni computazionali di OpenFOAM sul sistema HPC CRESCO di ENEA GRID NOTA TECNICA ENEA GRID/CRESCO: NEPTUNIUS PROJECT 201001 NOME FILE: NEPTUNIUS201001.doc DATA: 03/08/10 STATO: Versione rivista

Dettagli

Marco Danelutto Dipartimento di Informatica Università di Pisa 16 ottobre 2014

Marco Danelutto Dipartimento di Informatica Università di Pisa 16 ottobre 2014 Marco Danelutto Dipartimento di Informatica Università di Pisa 16 ottobre 2014 La macchina calcolatore Oggetto costituito da componenti diversi Unità centrale (CPU) Memoria Periferiche Unità centrale Esegue

Dettagli

Architettura hardware

Architettura hardware Architettura dell elaboratore Architettura hardware la parte che si può prendere a calci Sistema composto da un numero elevato di componenti, in cui ogni componente svolge una sua funzione elaborazione

Dettagli

Il sistema operativo

Il sistema operativo Il sistema operativo Percorso di Preparazione agli Studi di Ingegneria Università degli Studi di Brescia Docente: Massimiliano Giacomin Cos è un Sistema Operativo? Per capirlo, immaginiamo inizialmente

Dettagli

Software Applicativo. Hardware. Sistema Operativo Software di Base Traduttori e Linguaggi

Software Applicativo. Hardware. Sistema Operativo Software di Base Traduttori e Linguaggi : di base e applicativo L HardWare (monitor, tastiera, circuiti, stampante, ) è il nucleo fondamentale del calcolatore ma da solo non serve a nulla. Bisogna utilizzare il software per poterlo fare funzionare.

Dettagli

Modulo 8 Ethernet Switching

Modulo 8 Ethernet Switching Modulo 8 Ethernet Switching 8.1 Ethernet Switching 8.1.1 Bridging a livello 2 Aumentando il numero di nodi su un singolo segmento aumenta la probabilità di avere collisioni e quindi ritrasmissioni. Una

Dettagli

Funzioni del Sistema Operativo

Funzioni del Sistema Operativo Il Software I componenti fisici del calcolatore (unità centrale e periferiche) costituiscono il cosiddetto Hardware (ferramenta). La struttura del calcolatore può essere schematizzata come una serie di

Dettagli

Prestazioni adattabili all ambiente del business

Prestazioni adattabili all ambiente del business Informazioni sulla tecnologia Prestazioni intelligenti Prestazioni adattabili all ambiente del business Il processore Intel Xeon sequenza 5500 varia in modo intelligente prestazioni e consumo energetico

Dettagli

1. Spiegare le differenze fra le seguenti modalità di binding degli indirizzi:

1. Spiegare le differenze fra le seguenti modalità di binding degli indirizzi: 1. Spiegare le differenze fra le seguenti modalità di binding degli indirizzi: compile time, load time, execution time. Quale delle modalità precedenti necessita di un supporto hardware per poter essere

Dettagli

Linux lo installo a 32 o 64 bit? (teoria e pratica)

Linux lo installo a 32 o 64 bit? (teoria e pratica) Linux lo installo a 32 o 64 bit? (teoria e pratica) Roberto Metere 26 ottobre 2013 Accenni teorici E ad un certo punto... più bit Compatibilità e innovazione Sfida teorica Test pratici Sistema di riferimento

Dettagli

Programmazione. Dipartimento di Matematica. Ing. Cristiano Gregnanin. 25 febbraio 2015. Corso di laurea in Matematica

Programmazione. Dipartimento di Matematica. Ing. Cristiano Gregnanin. 25 febbraio 2015. Corso di laurea in Matematica Programmazione Dipartimento di Matematica Ing. Cristiano Gregnanin Corso di laurea in Matematica 25 febbraio 2015 1 / 42 INFORMATICA Varie definizioni: Scienza degli elaboratori elettronici (Computer Science)

Dettagli

Introduzione. Classificazione di Flynn... 2 Macchine a pipeline... 3 Macchine vettoriali e Array Processor... 4 Macchine MIMD... 6

Introduzione. Classificazione di Flynn... 2 Macchine a pipeline... 3 Macchine vettoriali e Array Processor... 4 Macchine MIMD... 6 Appunti di Calcolatori Elettronici Esecuzione di istruzioni in parallelo Introduzione... 1 Classificazione di Flynn... 2 Macchine a pipeline... 3 Macchine vettoriali e Array Processor... 4 Macchine MIMD...

Dettagli

Il clustering. Sistemi Distribuiti 2002/2003

Il clustering. Sistemi Distribuiti 2002/2003 Il clustering Sistemi Distribuiti 2002/2003 Introduzione In termini generali, un cluster è un gruppo di sistemi indipendenti che funzionano come un sistema unico Un client interagisce con un cluster come

Dettagli

Sistemi Operativi. Lez. 13: primitive per la concorrenza monitor e messaggi

Sistemi Operativi. Lez. 13: primitive per la concorrenza monitor e messaggi Sistemi Operativi Lez. 13: primitive per la concorrenza monitor e messaggi Osservazioni I semafori sono strumenti particolarmente potenti poiché consentono di risolvere ogni problema di sincronizzazione

Dettagli

Classificazione del software

Classificazione del software Classificazione del software Classificazione dei software Sulla base del loro utilizzo, i programmi si distinguono in: SOFTWARE Sistema operativo Software applicativo Sistema operativo: una definizione

Dettagli

IBM iseries Soluzioni integrate per xseries

IBM iseries Soluzioni integrate per xseries Soluzioni innovative per l integrazione dei server Intel IBM iseries Soluzioni integrate per xseries La famiglia iseries, il cui modello più recente è l _` i5, offre due soluzioni che forniscono alternative

Dettagli

Software. Definizione, tipologie, progettazione

Software. Definizione, tipologie, progettazione Software Definizione, tipologie, progettazione Definizione di software Dopo l hardware analizziamo l altra componente fondamentale di un sistema di elaborazione. La macchina come insieme di componenti

Dettagli

Architettura CUDA Corso di sviluppo Nvidia CUDATM. Davide Barbieri

Architettura CUDA Corso di sviluppo Nvidia CUDATM. Davide Barbieri Architettura CUDA Corso di sviluppo Nvidia CUDATM Davide Barbieri Panoramica Lezione Modello Architetturale CUDA Modello di programmazione CUDA Hello World in CUDA Gestione degli errori Terminologia Host

Dettagli

Laboratorio di Informatica

Laboratorio di Informatica per chimica industriale e chimica applicata e ambientale LEZIONE 4 La CPU e l esecuzione dei programmi 1 Nelle lezioni precedenti abbiamo detto che Un computer è costituito da 3 principali componenti:

Dettagli

2. I THREAD. 2.1 Introduzione

2. I THREAD. 2.1 Introduzione 2. I THREAD 2.1 Introduzione Il tipo di parallelismo che è opportuno avere a disposizione nelle applicazioni varia in base al grado di cooperazione necessaria tra le diverse attività svolte in parallelo:

Dettagli

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2014-15. Pietro Frasca.

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2014-15. Pietro Frasca. Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2014-15 Pietro Frasca Lezione 5 Martedì 21-10-2014 Thread Come abbiamo detto, un processo è composto

Dettagli

Parte VIII. Architetture Parallele

Parte VIII. Architetture Parallele Parte VIII Architetture Parallele VIII.1 Motivazioni Limite di prestazioni delle architetture sequenziali: velocità di propagazione dei segnali, la luce percorre 30 cm in un nsec! Migliore rapporto costo/prestazioni

Dettagli

Openmosix e Beowulf: introduzione e confronto

Openmosix e Beowulf: introduzione e confronto Openmosix e Beowulf: introduzione e confronto Giovanni Perbellini Cluster Introduzione Cluster ESD Openmosix Comandi principali Beowulf (PVM) Comandi principali Libreria PVM API Agenda 1 Introduzione -

Dettagli

SISTEMI E RETI. Crittografia. Sistemi distribuiti e configurazione architetturale delle applicazioni WEB.

SISTEMI E RETI. Crittografia. Sistemi distribuiti e configurazione architetturale delle applicazioni WEB. SISTEMI E RETI Crittografia. Sistemi distribuiti e configurazione architetturale delle applicazioni WEB. CRITTOGRAFIA La crittografia è una tecnica che si occupa della scrittura segreta in codice o cifrata

Dettagli

CAPITOLO 1 I SISTEMI OPERATIVI

CAPITOLO 1 I SISTEMI OPERATIVI CAPITOLO 1 I SISTEMI OPERATIVI Introduzione ai sistemi operativi pag. 3 La shell pag. 3 Tipi di sistemi operativi pag. 4 I servizi del sistema operativo pag. 4 La gestione dei file e il file system Il

Dettagli

----------------------------------------------------------------

---------------------------------------------------------------- ---------------------------------------------------------------- utilizzo frequente di chiamate a.. A differenza del Pascal, il C permette di operare con assegnamenti e confronti su dati di tipo diverso,

Dettagli

Microprocessori, Microcontrollori e DSP (Digital Signal Processors)

Microprocessori, Microcontrollori e DSP (Digital Signal Processors) Microprocessori, Microcontrollori e DSP (Digital Signal Processors) Il microprocessore è un dispositivo integrato digitale che può essere programmato con una serie di istruzioni per effettuare una specifica

Dettagli

Il File System. È la componente del S.O. che si occupa della gestione della memoria di massa e dell organizzazione logica dei dati

Il File System. È la componente del S.O. che si occupa della gestione della memoria di massa e dell organizzazione logica dei dati Il File System È la componente del S.O. che si occupa della gestione della memoria di massa e dell organizzazione logica dei dati Le operazioni supportate da un file system sono: eliminazione di dati modifica

Dettagli

CALCOLATORI ELETTRONICI

CALCOLATORI ELETTRONICI CALCOLATORI ELETTRONICI Giuseppe Coldani Tel. 0382 985678 e-mail: giuseppe.coldani@unipv.it giuseppe.coldani@tin.it orario delle lezioni: Mercoledì 14.00-18.00 orario di ricevimento: su appuntamento 1

Dettagli

Dispensa di Informatica I.1

Dispensa di Informatica I.1 IL COMPUTER: CONCETTI GENERALI Il Computer (o elaboratore) è un insieme di dispositivi di diversa natura in grado di acquisire dall'esterno dati e algoritmi e produrre in uscita i risultati dell'elaborazione.

Dettagli

Architetture. Paride Dagna. SuperComputing Applications and Innovation Department 18/02/2013

Architetture. Paride Dagna. SuperComputing Applications and Innovation Department 18/02/2013 Architetture Paride Dagna SuperComputing Applications and Innovation Department 18/02/2013 Introduzione Grazie alle moderne tecniche di programmazione e agli strumenti di sviluppo attualmente disponibili,

Dettagli

Corso di Alfabetizzazione Informatica

Corso di Alfabetizzazione Informatica Corso di Alfabetizzazione Informatica Lezione 6 a.a. 2010/2011 Francesco Fontanella La Complessità del Hardware Il modello di Von Neumann è uno schema di principio. Attualmente in commercio esistono: diversi

Dettagli

Architetture Applicative

Architetture Applicative Alessandro Martinelli alessandro.martinelli@unipv.it 6 Marzo 2012 Architetture Architetture Applicative Introduzione Alcuni esempi di Architetture Applicative Architetture con più Applicazioni Architetture

Dettagli

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2013-14. Pietro Frasca.

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2013-14. Pietro Frasca. Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2013-14 Pietro Frasca Lezione 3 Martedì 15-10-2013 1 Struttura ed organizzazione software dei sistemi

Dettagli

Programmazione per Bioinformatica Il Calcolatore e la Programmazione. Dr Damiano Macedonio Università di Verona

Programmazione per Bioinformatica Il Calcolatore e la Programmazione. Dr Damiano Macedonio Università di Verona Programmazione per Bioinformatica Il Calcolatore e la Programmazione Dr Damiano Macedonio Università di Verona Architettura del calcolatore La prima decomposizione di un calcolatore è relativa a due macrocomponenti:

Dettagli

Hardware, software e periferiche. Facoltà di Lettere e Filosofia anno accademico 2008/2009 secondo semestre

Hardware, software e periferiche. Facoltà di Lettere e Filosofia anno accademico 2008/2009 secondo semestre Hardware, software e periferiche Facoltà di Lettere e Filosofia anno accademico 2008/2009 secondo semestre Riepilogo - Concetti di base dell informatica L'informatica è quel settore scientifico disciplinare

Dettagli

Navigare verso il cambiamento. La St r a d a. p i ù semplice verso il ca m b i a m e n t o

Navigare verso il cambiamento. La St r a d a. p i ù semplice verso il ca m b i a m e n t o Navigare verso il cambiamento La St r a d a p i ù semplice verso il ca m b i a m e n t o Le caratteristiche tecniche del software La Tecnologia utilizzata EASY è una applicazione Open Source basata sul

Dettagli

Input/Output. Moduli di Input/ Output. gestiscono quantità di dati differenti a velocità diverse in formati diversi. n Grande varietà di periferiche

Input/Output. Moduli di Input/ Output. gestiscono quantità di dati differenti a velocità diverse in formati diversi. n Grande varietà di periferiche Input/Output n Grande varietà di periferiche gestiscono quantità di dati differenti a velocità diverse in formati diversi n Tutti più lenti della CPU e della RAM n Necessità di avere moduli di I/O Moduli

Dettagli

VIRTUALIZE IT. www.digibyte.it - digibyte@digibyte.it

VIRTUALIZE IT. www.digibyte.it - digibyte@digibyte.it il server? virtualizzalo!! Se ti stai domandando: ma cosa stanno dicendo? ancora non sai che la virtualizzazione è una tecnologia software, oggi ormai consolidata, che sta progressivamente modificando

Dettagli

Ottimizzazioni 1 Corso di sviluppo Nvidia CUDATM. Davide Barbieri

Ottimizzazioni 1 Corso di sviluppo Nvidia CUDATM. Davide Barbieri Ottimizzazioni 1 Corso di sviluppo Nvidia CUDATM Davide Barbieri Panoramica Lezione Principali versioni dell'hardware CUDA Tesla Fermi Accesso veloce alla memoria globale Accesso veloce alla memoria condivisa

Dettagli

Gerarchie di memoria Divide et impera. Gerarchie di memoria La congettura 90/10. Gerarchie di memoria Schema concettuale

Gerarchie di memoria Divide et impera. Gerarchie di memoria La congettura 90/10. Gerarchie di memoria Schema concettuale Memorie Caratteristiche principali Tecnologie di memoria Locazione: processore, interna (principale), esterna (secondaria) Capacità: dimensione parola, numero di parole Unità di trasferimento: parola,

Dettagli

Sistemi Operativi (modulo di Informatica II) Sottosistema di I/O

Sistemi Operativi (modulo di Informatica II) Sottosistema di I/O Sistemi Operativi (modulo di Informatica II) Sottosistema di I/O Patrizia Scandurra Università degli Studi di Bergamo a.a. 2009-10 Sommario L hardware di I/O Struttura Interazione tra computer e controllori

Dettagli

Più processori uguale più velocità?

Più processori uguale più velocità? Più processori uguale più velocità? e un processore impiega per eseguire un programma un tempo T, un sistema formato da P processori dello stesso tipo esegue lo stesso programma in un tempo TP T / P? In

Dettagli

CAPITOLO 5 - Sistemi Operativi Moderni

CAPITOLO 5 - Sistemi Operativi Moderni CAPITOLO 5 - Sistemi Operativi Moderni PRESENTAZIONE DI INSIEME Vedremo ora come si è evoluta nel tempo la struttura di un sistema operativo, per passare dalle vecchie strutture di tipo normalmente modulari,

Dettagli

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2015-16. Pietro Frasca.

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2015-16. Pietro Frasca. Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2015-16 Pietro Frasca Lezione 15 Martedì 24-11-2015 Struttura logica del sottosistema di I/O Processi

Dettagli

Linguaggi e Paradigmi di Programmazione

Linguaggi e Paradigmi di Programmazione Linguaggi e Paradigmi di Programmazione Cos è un linguaggio Definizione 1 Un linguaggio è un insieme di parole e di metodi di combinazione delle parole usati e compresi da una comunità di persone. È una

Dettagli

Fondamenti di Informatica: Sistemi Operativi 1. Introduzione

Fondamenti di Informatica: Sistemi Operativi 1. Introduzione Introduzione Fondamenti di Informatica: Sistemi Operativi 1 Elaboratori necessitano di SOFTWARE SOFTWARE DI SISTEMA (SISTEMI OPERATIVI): fanno funzionare le varie componenti del computer e permettono all

Dettagli

Corso di Informatica Generale (C. L. Economia e Commercio) Ing. Valerio Lacagnina Rappresentazione dell informazione negli elaboratori

Corso di Informatica Generale (C. L. Economia e Commercio) Ing. Valerio Lacagnina Rappresentazione dell informazione negli elaboratori Informazione e computer Si può rappresentare l informazione attraverso varie forme: Numeri Testi Suoni Immagini 0001010010100101010 Computer Cerchiamo di capire come tutte queste informazioni possano essere

Dettagli

Architetture parallele

Architetture parallele 1 Calcolatori paralleli A meno di una nuova rivoluzione scientifica la legge di Moore (che pronostica un raddoppio del numero di transistor su un singolo chip ogni 18 mesi) non potrà rimanere valida per

Dettagli

Corso di Informatica

Corso di Informatica CdLS in Odontoiatria e Protesi Dentarie Corso di Informatica Prof. Crescenzio Gallo crescenzio.gallo@unifg.it Funzioni dei Sistemi Operativi!2 Le funzioni principali del SO Gestire le risorse dell elaboratore

Dettagli

Gianluigi Magnasco easitec S.r.l. Parma, 16 Settembre 2010

Gianluigi Magnasco easitec S.r.l. Parma, 16 Settembre 2010 Soft Control facile con RTX e Windows Embedded Standard 7 RTX 2009: funzionalità ed uso pratico Gianluigi Magnasco easitec S.r.l. Parma, 16 Settembre 2010 Definizione di Sistema Tempo Reale: Definizione

Dettagli

Obiettivi del corso: Fornire le nozioni di base sull architettura dei sistemi di calcolo Fornire i primi strumenti di descrizione e di analisi dei sistemi digitali Descrivere in modo verticale il funzionamento

Dettagli

D3.2 Documento illustrante l architettura 3D Cloud per la realizzazione di servizi in modalità SaaS

D3.2 Documento illustrante l architettura 3D Cloud per la realizzazione di servizi in modalità SaaS D3.2 Documento illustrante l architettura 3D Cloud per la realizzazione di servizi in modalità SaaS Il modello SaaS Architettura 3D Cloud Il protocollo DCV Benefici Il portale Web EnginFrame EnginFrame

Dettagli

Capitolo 3: Strutture dei sistemi operativi

Capitolo 3: Strutture dei sistemi operativi Capitolo 3: Strutture dei sistemi operativi Componenti del sistema Servizi di un sistema operativo Chiamate del sistema Programmi di sistema Struttura del sistema Macchine virtuali Progettazione e realizzazione

Dettagli

Linguaggi di programmazione

Linguaggi di programmazione Linguaggi di programmazione Programmazione L attività con cui si predispone l elaboratore ad eseguire un particolare insieme di azioni su particolari dati, allo scopo di risolvere un problema Dati Input

Dettagli

1.4a: Hardware (Processore)

1.4a: Hardware (Processore) 1.4a: Hardware (Processore) 2 23 nov 2011 Bibliografia Curtin, Foley, Sen, Morin Informatica di base, Mc Graw Hill Ediz. Fino alla III : cap. 3.8, 3.9 IV ediz.: cap. 2.6, 2.7 Questi lucidi 23 nov 2011

Dettagli

Implementazione di sistemi real time

Implementazione di sistemi real time Implementazione di sistemi real time Automazione 28/10/2015 Vincenzo Suraci STRUTTURA DEL NUCLEO TEMATICO HARDWARE ABSTRACTION LAYER IMPLEMENTAZIONE EVENT-DRIVEN IMPLEMENTAZIONE TIME-DRIVEN SISTEMI DI

Dettagli

SCP: SCHEDULER LAYER. a cura di. Alberto Boccato

SCP: SCHEDULER LAYER. a cura di. Alberto Boccato SCP: SCHEDULER LAYER a cura di Alberto Boccato PREMESSA: Negli ultimi tre anni la nostra scuola ha portato avanti un progetto al quale ho partecipato chiamato SCP (Scuola di Calcolo Parallelo). Di fatto

Dettagli

Programmi. Algoritmi scritti in un linguaggio di programmazione

Programmi. Algoritmi scritti in un linguaggio di programmazione Programmi Algoritmi scritti in un linguaggio di programmazione Sistema operativo:programma supervisore che coordina tutte le operazioni del calcolatore Programmi applicativi esistenti Sistemi di videoscrittura

Dettagli

Analisi matriciale delle reti di Petri (P/T) - sifoni e trappole -

Analisi matriciale delle reti di Petri (P/T) - sifoni e trappole - Analisi matriciale delle reti di Petri (P/T) - sifoni e trappole - - richiami preliminari sulle proprietà strutturali - Abbiamo visto che alcune caratteristiche dei sistemi dinamici (DES compresi) non

Dettagli

INFORMATICA 1 L. Mezzalira

INFORMATICA 1 L. Mezzalira INFORMATICA 1 L. Mezzalira Possibili domande 1 --- Caratteristiche delle macchine tipiche dell informatica Componenti hardware del modello funzionale di sistema informatico Componenti software del modello

Dettagli

PAES. Laurea Specialistica in Informatica. Analisi e sviluppo di un implementazione parallela dell AES per. architetture eterogenee multi/many-core

PAES. Laurea Specialistica in Informatica. Analisi e sviluppo di un implementazione parallela dell AES per. architetture eterogenee multi/many-core PAES Analisi e sviluppo di un implementazione parallela dell AES per architetture eterogenee multi/many-core Candidato Paolo Bernardi Relatore Osvaldo Gervasi Laurea Specialistica in Informatica Contesto

Dettagli

Sommario. Analysis & design delle applicazioni parallele. Misura delle prestazioni parallele. Tecniche di partizionamento.

Sommario. Analysis & design delle applicazioni parallele. Misura delle prestazioni parallele. Tecniche di partizionamento. Sommario Analysis & design delle applicazioni parallele Misura delle prestazioni parallele Tecniche di partizionamento Comunicazioni Load balancing 2 Primi passi: analizzare il problema Prima di iniziare

Dettagli

Calcolo numerico e programmazione. Sistemi operativi

Calcolo numerico e programmazione. Sistemi operativi Calcolo numerico e programmazione Sistemi operativi Tullio Facchinetti 25 maggio 2012 13:47 http://robot.unipv.it/toolleeo Sistemi operativi insieme di programmi che rendono

Dettagli

Sistemi Operativi II Corso di Laurea in Ingegneria Informatica

Sistemi Operativi II Corso di Laurea in Ingegneria Informatica www.dis.uniroma1.it/~midlab Sistemi Operativi II Corso di Laurea in Ingegneria Informatica Prof. Roberto Baldoni Complementi: Buffer I/O Gestione dei buffer e I/O scheduling: 1. Richiami sulle tecniche

Dettagli

Ingegneria del Software - Il Ciclo Lungo

Ingegneria del Software - Il Ciclo Lungo Ingegneria del Software - Il Ciclo Lungo Alessandro Martinelli alessandro.martinelli@unipv.it 10 Marzo 2014 Il Ciclo Lungo Il Versioning e la Condivisione di Codice Organizzazione dei Pacchetti La Modellazione

Dettagli

INFORMATICA. Il Sistema Operativo. di Roberta Molinari

INFORMATICA. Il Sistema Operativo. di Roberta Molinari INFORMATICA Il Sistema Operativo di Roberta Molinari Il Sistema Operativo un po di definizioni Elaborazione: trattamento di di informazioni acquisite dall esterno per per restituire un un risultato Processore:

Dettagli

Architettura di un computer

Architettura di un computer Architettura di un computer Modulo di Informatica Dott.sa Sara Zuppiroli A.A. 2012-2013 Modulo di Informatica () Architettura A.A. 2012-2013 1 / 36 La tecnologia Cerchiamo di capire alcuni concetti su

Dettagli

I Thread. I Thread. I due processi dovrebbero lavorare sullo stesso testo

I Thread. I Thread. I due processi dovrebbero lavorare sullo stesso testo I Thread 1 Consideriamo due processi che devono lavorare sugli stessi dati. Come possono fare, se ogni processo ha la propria area dati (ossia, gli spazi di indirizzamento dei due processi sono separati)?

Dettagli

Lezione1. Cos è la computer grafica. Lezione del 10 Marzo 2010. Michele Antolini Dipartimento di Ingegneria Meccanica Politecnico di Milano

Lezione1. Cos è la computer grafica. Lezione del 10 Marzo 2010. Michele Antolini Dipartimento di Ingegneria Meccanica Politecnico di Milano Lezione1 Informatica Grafica Cos è la computer grafica Lezione del 10 Marzo 2010 Grafica OpenGL vs Direct Dipartimento di Ingegneria Meccanica Politecnico di Milano 1.1 Tubo a Raggi Catodici Cathode Ray

Dettagli

Gli indirizzi dell Internet Protocol. IP Address

Gli indirizzi dell Internet Protocol. IP Address Gli indirizzi dell Internet Protocol IP Address Il protocollo IP Prevalente è ormai diventato nell implementazione di reti di computer la tecnologia sintetizzata nei protocolli TCP- Ip IP è un protocollo

Dettagli

Architettura del computer (C.Busso)

Architettura del computer (C.Busso) Architettura del computer (C.Busso) Il computer nacque quando fu possibile costruire circuiti abbastanza complessi in logica programmata da una parte e, dall altra, pensare, ( questo è dovuto a Von Neumann)

Dettagli

Il bus PCI. Piccinetti Stefano

Il bus PCI. Piccinetti Stefano Il bus PCI Piccinetti Stefano Prima del bus PCI: il bus ISA Il bus più diffuso prima del 1992 era il bus ISA (quello sostanzialmente trattato a Reti Logiche). Il primo bus ISA era ad 8 bit e garantiva

Dettagli

SISTEMI OPERATIVI DISTRIBUITI

SISTEMI OPERATIVI DISTRIBUITI SISTEMI OPERATIVI DISTRIBUITI E FILE SYSTEM DISTRIBUITI 12.1 Sistemi Distribuiti Sistemi operativi di rete Sistemi operativi distribuiti Robustezza File system distribuiti Naming e Trasparenza Caching

Dettagli

Corso di Sistemi di Elaborazione delle informazioni

Corso di Sistemi di Elaborazione delle informazioni Corso di Sistemi di Elaborazione delle informazioni Sistemi Operativi Francesco Fontanella Complessità del Software Software applicativo Software di sistema Sistema Operativo Hardware 2 La struttura del

Dettagli

IL DSP - Digital Signal Processor

IL DSP - Digital Signal Processor IL DSP - Digital Signal Processor Processore dei segnali digitali 1. Generalità Il Digital Signal Processor (DSP, processore di segnali digitali) è un particolare tipo di microprocessore, ottimizzato per

Dettagli

ISTVAS Ancona Introduzione ai sistemi operativi Tecnologie Informatiche

ISTVAS Ancona Introduzione ai sistemi operativi Tecnologie Informatiche ISTVAS Ancona Introduzione ai sistemi operativi Tecnologie Informatiche Sommario Definizione di S. O. Attività del S. O. Struttura del S. O. Il gestore dei processi: lo scheduler Sistemi Mono-Tasking e

Dettagli

Architettura dei sistemi x86 Interfacce I/O

Architettura dei sistemi x86 Interfacce I/O I.I.S. Benvenuto Cellini Corso di formazione tecnica Architettura dei sistemi x86 Interfacce I/O Prof. Alessandro Pinto v.2009 Bus ISA (Industry Standard Architecture ) (1981 metà anni 90) Bus di interconnessione

Dettagli

INFORMATICA. Corso di Laurea in Scienze dell'educazione

INFORMATICA. Corso di Laurea in Scienze dell'educazione INFORMATICA Corso di Laurea in Scienze dell'educazione Introduzione all Informatica Docente: Mario Alviano Studio: Dipartimento di Matematica Cubo 30B 2 Piano Ricevimento: giovedì 18:30 19:30 (avvisare

Dettagli

Come funziona un sistema di elaborazione

Come funziona un sistema di elaborazione Introduzione Cosa è un Sistema Sste aoperativo? Come funziona un sistema di elaborazione Proprietà dei Sistemi Operativi Storia dei Sistemi di Elaborazione Sistemi Mainframe Sistemi Desktop Sistemi i Multiprocessori

Dettagli

Un framework per simulazione massiva distribuita basata su Agenti D-MASON: Architettura. Carmine Spagnuolo

Un framework per simulazione massiva distribuita basata su Agenti D-MASON: Architettura. Carmine Spagnuolo Un framework per simulazione massiva distribuita basata su Agenti D-MASON: Architettura Carmine Spagnuolo 1 Simulazione Multi-Agente Una simulazione multi-agente è un sistema in cui entità (agenti) intelligenti

Dettagli

Il Software... A.A. 2013-14 Informatica 96

Il Software... A.A. 2013-14 Informatica 96 Il Software... A.A. 2013-14 Informatica 96 Il software L hardware non è direttamente utilizzabile Sono necessari dei programmi per far svolgere delle funzioni all insieme di circuiti Informatica 97 Il

Dettagli

Con il termine Sistema operativo si fa riferimento all insieme dei moduli software di un sistema di elaborazione dati dedicati alla sua gestione.

Con il termine Sistema operativo si fa riferimento all insieme dei moduli software di un sistema di elaborazione dati dedicati alla sua gestione. Con il termine Sistema operativo si fa riferimento all insieme dei moduli software di un sistema di elaborazione dati dedicati alla sua gestione. Compito fondamentale di un S.O. è infatti la gestione dell

Dettagli