Modelli di programmazione per architetture di calcolo eterogenee

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Modelli di programmazione per architetture di calcolo eterogenee"

Transcript

1 Scuola Politecnica e delle Scienze di Base Corso di Laurea in Ingegneria Informatica Elaborato finale in PROGRAMMAZIONE I Modelli di programmazione per architetture di calcolo eterogenee Anno Accademico 2013/2014 Candidato: Salvatore Maresca matr. N

2 Ai giorni andati e a quelli che verranno, alla voglia di scoprire, ai veri amici, alla mia squadra del cuore, a mio cugino, ma soprattutto alla mia famiglia. Stay hungry, stay foolish. Steve Jobs

3 Indice Indice... III Introduzione... 4 Capitolo 1: GPGPU GPU computing: oltre la grafica Analisi delle prestazioni Case Study: calcolo di gestione del rischio finanziario... 9 Capitolo 2: Graphics Processing Unit La storia Architettura Esempio : architettura GPU NVIDIA Tesla GPU vs CPU: le evoluzioni negli anni Heterogeneous System Architecture Capitolo 3: Modelli di programmazione GPU CUDA Scalabilità automatica e gerarchia dei threads Paradigma di programmazione Cenni sulla compilazione Aree di memoria Specificatori, qualificatori di tipo e tipi di dato aggiuntivi Funzioni built-in per la creazione di un contesto Funzioni built-in per la gestione della memoria Funzioni built-in per i codici di errore Funzioni built-in per la gestione dei sistemi Multi-Device Esempio di un programma completo (1) Esempio di un programma completo (2) OpenCL Tipi di dato e qualificatori Funzioni built-in per la creazione di un contesto Funzioni built-in per la creazione di code di comandi Funzioni built-in per la gestione della memoria Funzioni built-in per i program object e i kernel object Funzioni built-in per l esecuzione del kernel Funzioni built-in per la deallocazione di oggetti Esempio di un programma completo CUDA e OpenCL a confronto Conclusioni Bibliografia... 46

4 Introduzione Nella società attuale ogni azienda ha la necessità di incrementare il proprio profitto e di ridurre al minimo i costi del lavoro attraverso l adozione di strategie innovative. Diminuire i costi significa (quasi sempre) aumentare la velocità e la produttività del proprio lavoro, così da far crescere in maniera netta il ricavo aziendale. Tuttavia, mentre una piccola o media azienda è in grado di migliorare anche attraverso l acquisto di pochi computer, i grandi enti hanno bisogno dell utilizzo di sofisticate attrezzature di calcolo; dunque sta diventando di vitale importanza, sia in ambito industriale che scientifico, far riferimento a soluzioni architetturali in grado di garantire prestazioni molto elevate in termini di calcolo. Per tale motivo si fa sempre più riferimento a tecnologie HPC (High Performance Computing) basate tipicamente sul calcolo parallelo. Questo elaborato, nel primo capitolo, si propone di illustrare l importanza raggiunta dai processori grafici nel calcolo general purpose facendo riferimento a reali casi di studio; nel secondo capitolo, invece, verrà descritta in maniera accurata l architettura di una generica GPU (Graphics Processing Unit) ed inoltre verrà mostrato in che modo quest ultima interagisce con la CPU (Central Processing Unit) evidenziandone le principali differenze tra loro. Successivamente, nel terzo capitolo, saranno introdotti due modelli di programmazione molto diffusi nel settore GPGPU (General Purpose computing on GPU): questi sono CUDA e OpenCL; il primo è proposto da NVIDIA Corporation, mentre il secondo è indipendente da case SW/HW. 4

5 I suddetti linguaggi di programmazione saranno presentati tramite la definizione delle principali primitive messe a disposizione dalle rispettive API e con alcuni esempi di programmi completi. Dopo un analisi delle principali differenze fra CUDA e OpenCL, infine, saranno riportate alcune idee conclusive utili a riassumere l importanza attuale del computing accelerato dalle GPUs. 5

6 Capitolo 1: GPGPU GPGPU, acronimo di General-Purpose computing on graphics processing units, è un ramo della ricerca informatica che ha come obbiettivo l utilizzo delle GPUs per scopi ben diversi dalla creazione di una semplice immagine tridimensionale; in tale ambito, infatti, le unità di elaborazione grafica sono impiegate nell esecuzione di applicazioni di diverso tipo che richiedono un livello di prestazioni molto alto. Tale strategia è giustificata dal fatto che le tradizionali architetture CPU non possiedono una capacità di elaborazione tale da raggiungere quei livelli prestazionali, e dunque si è pensato di affiancarle alle GPUs. 1.1 GPU computing: oltre la grafica. Le GPUs erano originariamente destinate all esecuzione di applicazioni di grafica 3D e al rendering di immagini durante il processo di rasterizzazione. Tuttavia, le risorse computazionali delle moderne unità grafiche le rendono in grado di poter eseguire porzioni di codice parallelo garantendo prestazioni altissime. Per sfruttare al meglio tale potenzialità è stato ideato il computing accelerato dalle GPUs, ovvero una strategia che consiste nell affiancare ad una CPU una GPU per accelerare l esecuzione di applicazioni di vario tipo (ad esempio scientifiche, tecniche e di analisi). Tuttavia il raggio di applicazione di tale strategia è molto ampio e sta crescendo ogni giorno di più; infatti le GPUs, attualmente, sono in grado di ridurre i tempi di esecuzione di applicazioni presenti su diverse piattaforme: dalle automobili ai telefoni cellulari e ai tablet, fino ai droni e ai robot. Insomma, il GPU computing si sta diffondendo in maniera quasi silenziosa. 6

7 A tal proposito, e giusto far notare ad esempio che le persone oggi trascorrano una lasso di tempo molto significativo nelle proprie automobili, che sia per recarsi sul posto di lavoro, oppure per spostarsi in viaggio verso mete lontane. Dunque è diventato di primaria importanza dotare il guidatore dei migliori sistemi di sicurezza all interno dell autovettura. Le nuove tecnologie, basate sull utilizzo delle GPUs, hanno permesso alle case automobilistiche di installare all interno dei propri veicoli avanzati sistemi di sicurezza realizzati in OpenCL (modello di programmazione spiegato nei capitoli successivi). ADAS, sigla di Advanced Driver Assistance Systems, ne è un esempio; tale sistema è l insieme delle ultime Fig. 1 Sistema di frenata automatico in ADAS tecnologie in grado di garantire una maggiore sicurezza per passeggeri, pedoni ed altri veicoli. Tale soluzione, infatti, è in grado di monitorare, prevedere, e tentare di evitare incidenti grazie a tecniche di Active Safety Monitoring, Collision Avoidance Systems e al riconoscitore di oggetti e/o pedoni. Questa idea, all inizio, però si basava su una combinazione di CPUs e DSPs (Digital Signal Processor); ma tale scelta comportava una scarsa portabilità del codice poiché esso doveva essere scritto a mano per ogni singolo componente, e ciò comportava scarse possibilità di riutilizzo. Grazie alle GPUs, invece, è stato possibile arginare queste limitazioni scrivendo algoritmi basati sulle librerie offerte da OpenCL; in questo modo il codice può essere riutilizzato su tutte le piattaforme in grado di eseguire OpenCL, senza il bisogno di riprogettazione. Risolti i primi problemi di portabilità, la nuova sfida degli ingegneri al lavoro di ADAS è quella di diminuire al minimo i tempi di risposta del sistema e quindi di esecuzione degli algoritmi. Anche questo sarà possibile grazie alle APIs messe a disposizione da OpenCL che aiutano il processo di eleborazione parallela delle informazioni ricevute da telecamere, GPS/WiFi, accelerometro ed altri sensori. Dunque, questo esempio di applicazione del GPU Computing testimonia il fatto che siamo ormai all inizio di una sorta di rivoluzione silenziosa che il consumatore finale avvertirà soltanto come un notevole aumento di efficienza e prestazioni, ignorando completamente i dettagli alla base di tale processo di trasformazione. 7

8 1.2 Analisi delle prestazioni Il computing accelerato dalle GPUs è in grado di offrire prestazioni senza precedenti demandando porzioni di codice più impegnative alle GPUs, e destinandone la parte sequenziale alle CPUs. Dal punto di vista dell'utente, l'unica differenza è che le applicazioni risultano essere nettamente più rapide. Tale tipo di elaborazioni sono, per loro natura, di tipo parallelo, e quindi in grado di beneficiare in maniera ottimale dell'architettura tipica delle GPUs; a tale caratteristica intrinseca, a partire dal 2007, si è aggiunta anche l'estrema programmabilità supportata dagli ultimi prodotti in commercio, che con le nuove generazioni aumentano non solo la propria potenza elaborativa ma anche la propria versatilità. Fig. 2 Schema di esecuzione del computing accelerato dalle GPUs Il modo più semplice per comprendere il motivo della nascita di questa idea è quello di analizzare la principale differenza tra l architettura di una generica CPU e di una generica GPU: mentre la prima è costituita da un numero ridotto di unità di elaborazione, ciascuna delle quali dotata di alte prestazioni, la seconda possiede migliaia di core con minore capacità eleborativa, ma ottimizzati per il troughput complessivo. Destinando, quindi, all unità di elaborazione grafica importanti carichi di lavoro parallelo è possibile migliorare sensibilmente le prestazioni totali del sistema in esecuzione. 8

9 Inoltre l adozione delle GPUs acceleratrici consentono di avere non solo miglioramenti dal punto di vista prestazionale, ma anche in termini di efficienza energetica. Per tale motivo esse stanno diventando la nuova norma nelle installazioni HPC e nel Supercomputing. Consideriamo come esempio la differenza tra le prestazioni di una GPU e dell acceleratore Intel Xeon Phi nell esecuzione di applicazioni HPC. Fig. 3 Confronto tra le prestazioni dell acceleratore Xeon Phi ed una generica GPU Sebbene Xeon Phi possa essere ottimizzato in modo tale da superare le prestazioni di una CPU, le GPU lo surclassano in maniera netta su una vasta gamma di applicazioni di supercomputing. Ciò è stato provato dal Department of Energy degli Stati Uniti che utilizza una serie di mini-app per valutare le performance delle architetture di computing sulla base di carichi di lavoro HPC altamente rappresentativi. Infatti come si evince dal grafico qui sopra, le GPUs dimostrano una velocità da 2,5 a 5 volte superiore rispetto alle CPUs. Nonostante Intel Xeon Phi possa essere ottimizzato, le prestazioni di una generica GPU rimangono, nella media, almeno 2 volte superiori. 1.3 Case Study: calcolo di gestione del rischio finanziario I calcoli di gestione del rischio rappresentano uno dei fattori che determinano elevati costi di lavori per il settore dei servizi finanziari. Come principale banca di investimento mondiale, la J.P. Morgan necessitava di migliorare la qualità del proprio lavoro per calcolare il rischio con tempistiche ragionevoli senza aggiungere altri costi infrastrutturali al proprio bilancio. Tale banca era intenzionata, quindi, a rinnovare le tecnologie dei propri data center per renderli conformi alle nuove politiche di risparmio aziendale. 9

10 Per tale motivo, la J.P. Morgan Equity Derivatives Group ha iniziato una fase di test delle GPUs NVIDIA Tesla nel 2009, scegliendo il modello Tesla M2070 come possibile alternativa per i calcoli più complessi. La società ha deciso di installarle per la prima volta nella sua infrastruttura globale di grid computing nel 2010, e tale scelta ha portato immediatamente dei miglioramenti davvero notevoli. Le GPUs, infatti, hanno permesso il calcolo del rischio per i prodotti di investimento in pochi minuti rispetto alle solite lunghe elaborazioni di calcolo notturne. L uso delle GPUs come co-processori ha accelerato le Fig. 4 Sede della J.P. Morgan a New York prestazioni delle applicazioni sino a 40 volte rispetto all uso delle soluzioni basate sulle sole CPUs ed ha consentito risparmi di circa l 80% nel complesso. Forte delle conferme dell attuale soluzione adottata, nel prossimo futuro la società ha programmato di incrementare ulteriormente il numero di calcoli affidati alle GPUs, oltre ad esaminare all esecuzione di nuovi modelli precedentemente considerati improponibili a causa della elevata capacità di computing necessaria. 10

11 Capitolo 2: Graphics Processing Unit Le unità di elaborazione grafica (GPU) furono utilizzate all inizio in supporto alle CPU per l elaborazione di dati, informazioni e istruzioni relative al campo grafico del computer. La situazione, tuttavia, è cambiata all'inizio del 2001, quando è stata lanciata la prima GPU programmabile: questo fu il primo passo verso inizio di una nuova era. 2.1 La storia L origine della GPU risale alla fine del I primi chip grafici avevano una funzione molto semplice: prelevare i dati utili dalla memoria del sistema ed elaborarli tramite il controller video per poi inviarli direttamente al dispositivo di output video. Non molto tempo dopo, però, i controller video furono dotati di memoria interna per mostrare direttamente i dati in output senza prelevarli. Tali controller, inoltre, erano in grado anche di compiere alcune semplici operazioni di rasterizzazione come ad esempio il bit Block Transfer. Il bitblt prevedeva una combinazione di un immagine bitmap con un altra identica per evitare la ripetizione di operazioni di rendering su attributi fissi in un immagine, come ad esempio in uno sfondo. Poi, negli anni successivi, i controller furono potenziati dal punto di vista hardware per supportare ulteriori funzionalità e iniziò a diffondersi sempre più l idea di utilizzare schede video per velocizzare le operazioni grafiche. Tale soluzione prese il nome di 2D Hardware Acceleration. Negli anni 90, con l accrescere della domanda del 3D Hardware Acceleration a causa della produzione dei primi videogames, la situazione cominciò a diventare sempre più complessa. Mentre all inizio l elaborazione grafica 11

12 3D poteva avvenire soltanto attraverso l aiuto della CPU, successivamente fu possibile farlo in maniera separata tramite l uso di schede aggiuntive. Ma ciò comportava un problema del punto di vista dell elaborazione 2D: vi era, comunque, bisogno di un altro controller video per realizzare sia elaborazioni grafiche 3D che 2D. Fu così che nel 1996 fu rilasciato il primo chipset che integrava entrambe le tecnlogie su un unica scheda. Come è facile ipotizzare, l uso sempre sempre più diffuso delle GPUs portò alla realizzazione di nuove funzionalità. Una di queste fu la tecnica del Transform & Lighting. Transform si riferisce ad un operazione che converte gli oggetti 3D per una vista 2D; Lighting, invece, inserisce le luci e le ombre in un ambiente 3D per aumentare il tasso di realismo dell elaborazione grafica. Successivamente, nel 2001 furono aggiunti gli Shader alle GPU: una serie di istruzioni per determinare l aspetto fisico finale di un oggetto. Questo fu il primo passo che permise, in seguito, l utilizzo dell unità di elaborazione grafica per scopi diversi dal solito. Molte aziende, in quegli anni, hanno contribuito allo sviluppo delle GPUs; tra i primi si ricorda Evans & Sutherland (E & S), una società leader nella produzione hardware per simulatori di volo. Un dipendente di questa società, Jim Clark, ha fondato la Silicon Graphics, Inc. (SGI) nel 1982; questa fu la prima azienda a svillupare, oltre che un dispositivo hardware grafico dedicato in grado di raggiungere alte prestazioni (Clark Geometry Engine), un API proprietaria denominata IRIS Graphics Language (IRIS GL). Nel 1992, dopo una fase importante di crescita, l IRIS GL fu acquistata a poco prezzo dai potenti competitors della SGI per poi essere rinominato in OpenGL. Fino ad oggi, OpenGL, risulta essere l unico standard real-time di grafica 3D eseguibile su diversi sistemi operativi. Il suo principale rivale prodotto dalla Microsoft, Direct3D, è eseguibile soltanto su macchine Windows. Nel 1985, invece, ATI cominciò a produrre chipset per schede grafiche integrate per i grandi prodottori di PC come IBM. Succcessivamente nel 1987 cominciò a produrre in maniera indipendente schede e chipset grafici per le console. Attualmente, ATI è la seconda casa produttrice di GPUs. Lo scettro spetta ad NVIDIA, fondata nel

13 2.2 Architettura Le GPUs, come già detto in precedenza, sono dei dispositvo inizialmente progettati per eseguire applicazioni di sintesi grafica ad altissime prestazioni. Tali programmi, in genere, sono caratterizzati da un numero molto alto di threads (anche più di 10'000) tutti istanze di uno stresso thread. Tale numero di threads viene eseguito in parallelo, per cui è facilmente intuibile il fatto che l architettura di una generica GPU debba essere predisposta a questa tipologia di carico di lavoro. Per tale motivo è evidente la differenza tra CPU e GPU. Nel primo caso si parla di architettura multiple-core, indice della presenza ridotta di core (oggi tipicamente in un numero compreso tra 4-8, Fig. 5 CPU vs GPU in termini di core superando i 10 per quelli di fascia alta) sullo stesso chip; tuttavia, ciascun core è dotato di un alta capacità elaborativa. Nel secondo caso, invece, parliamo di architettura hundreds-of-core, denominazione che appunto indica l elevata presenza in numero di core sullo stesso chip (centinaia o anche migliaia sulle schede attualmente in commercio). In questo caso, nonostante tutti i core posseggano una capacità elaborativa molto semplice, essi riescono a garantire prestazioni molto elevate poichè l architettura di una GPU è ottimizzata per l esecuzione in parallelo di un ingente numero di threads, a differenza di una CPU che è ottimizzata per l esecuzione di un singolo thread. Tale soluzione oltre che in prestazioni (flop/s), apporta vantaggi anche in termini di consumo (flop/watt) e costo (flop/dollar). Quindi è evidente il fatto che, ad una prima analisi, la GPU sia a tutti gli effetti un architettura di tipo parallelo. Precisamente, essa rientra nella categoria delle architetture SIMD (Single Instruction Multiple Data), ovvero quelle architetture nelle quali una stessa istruzione viene eseguita su dati diversi ricorrendo a più unità di elaborazione. Tuttavia, occorre precisare che operando su thread le GPUs appartengono ad una variante del gruppo SIMD, ovvero va intesa come un architettura di tipo SIMT (Single Instruction Multiple Thread). Analizzandone nello specifico l architettura fisica, vediamo che una generica GPU è organizzata in una serie di unità fondamentali denominate Thread Processing Cluster (TPC). Questi, a loro 13

14 volta, contengono una serie di unità chiamate Streaming Multiprocessor (SM) contenenti al loro interno le unità di elaborazione fondamentali denominate Streaming Processor (SP). Fig. 6 Esempio di un Thread Processing Cluster Fig. 7 Esempio di uno Streaming Multiprocessor Il Thread Processing Cluster è formato, come è visibile nell immagine in alto, da 3 SM, una memoria per la gestione delle textures ed una memoria cache disponibile per l intero TPC. Lo Streaming Multiprocessor, invece, è simile ad un processore vettoriale di larghezza 8 che opera su vettori di larghezza 32; infatti esso è costituito da 8 processori scalari (SP) che eseguono istruzioni aritmetico/logiche in virgola mobile e in virgola fissa. Possiede, inoltre, 2 Unità Funzionali Speciali (SFU) che eseguono varie funzioni trascendenti e matematiche (seno, coseno, etc.) oltre alla moltiplicazione in virgola mobile (in singola precisione). Infine possiede anche un unità di Doppia Precisione (DPU) che esegue operazioni aritmetiche in virgola mobile a 64 bit. L architettura di una GPU è quindi costituita, in genere, dall insieme dei Thread Processing Clusters, dalla rete di interconnessione e dai controllori della memoria esterna. Fig. 8 Visione globale dell architettura di una GPU L esecuzione in parallelo di un numero così ingente di threads viene processata in maniera molto semplice. Lo Streaming Multiprocessor ha il compito di gestire una serie di threads raggruppandoli in unità chiamate warp, un insieme di 32 threads esguiti a gruppi di 8 sugli otto processori scalari 14

15 (SP). Tutti i thread di un warp eseguono la stessa istruzione in maniera indipendente, ma lockstepped (sincronizzazione forzata). Ciò vuol dire che l esecuzione tra i vari threads deve essere in qualche modo sincronizzata; ad esempio se un thread si trovasse ad eseguire, in seguito ad un salto condizionato, un istruzione diversa da quella in esecuzione su un altro thread, questo dovrà attendere che ogni elemento appartenente al warp abbia raggiunto quel punto di esecuzione. Tale gestione sincronizzata è affidata ad un compentente interno al warp, denominato warp scheduler: esso, in seguito ad una divergenza a causa di un salto condizionato, esegue in maniera seriale ogni percorso intrapreso dal punto di diramazione, disabilitando di volta in volta i threads che non si trovano in linea con il percorso. Quando l esecuzione raggiunge lo stesso punto di esecuzione in tutti i threads punto, essi rinconvergono tutti di nuovo nello stesso percorso di esecuzione. E opportuno specificare che una divergenza viene gestita soltanto all interno di un solo warp, mentre warp differenti vengono eseguiti in maniera del tutto indipendente. Un unità di elaborazione grafica, infine, presenta in genere nella sua architettura una memoria integrata sulla scheda denominata Graphics Double Data Rate (GDDR), basata sulla tecnlogia Double Data Rate attualmente giunta alla quinta generazione (GDDR5). Essa viene utilizzata per memorizzare in maniera temporanea informarzioni utili al rendering grafico, come ad esempio le texture, per evitare di doverle memorizzare nella memoria centrale del sistema, cosa che richiederebbe molto più tempo. Si parla di bande di memoria intorno ai 300 GB/s, mentre con l interazione tra la CPU e la memoria centrale si arriva al massimo sui 60 GB/s. Infine è giusto ricordare che, nel caso in cui siano dotati di aree di memoria distinte, la connessione Fig. 9 Due chip di memoria GDDR3 su una GeForce 7600 GT tra GPU e CPU avviene di solito attraverso un bus PCI-Express ad alta velocità 15

16 2.2.1 Esempio : architettura GPU NVIDIA Tesla L architettura Tesla si basa su array di processori scalari. La figura in basso mostra un diagramma a blocchi di una GPU TESLA con 128 streaming-processor (SP) organizzati in 16 streaming Fig. 10 Logo GPUs NVIDIA TESLA multiprocessors (SM) in 8 indipendenti unità di processo Thread Processing Cluster (TPC). Fig. 11 Architettura globale di una GPU Tesla Ogni Thread Processing Cluster possiede un controller geometrico, un controller per gli Streaming Multiprocessors, 2 Streaming Multiprocessors e un unità per le Texture. Per bilanciare il rapporto operazioni matematiche e operazioni grafiche, una unità per le texture serve 2 SM. Gli SM sono formati da 8 Streaming Processors (SP), 2 unità di funzioni speciali (SFU), una cache per le istruzioni, una cache costante read-only e 16 Kbyte read/write di memoria cache. Con questa architettura, che utilizza una frequenza di clock a 1.5 GHz, è possibile ottenere un picco massimo di prestazioni sui 36 GFlops per SM. La GPU è connessa alla CPU tramite un bus PCI-Express 2.0 x16 ad alta velocità (fino a 8GB/s). Fig. 12 TPC di una GPU Tesla 16

17 2.3 GPU vs CPU: le evoluzioni negli anni Dopo aver analizzato le principali differenze a livello architetturale, ora è giusto confrontare le due unità dal punto di vista delle evoluzioni e nelle relative performance. Negli ultimi anni sono stati migliorati entrambi grazie alle nuove tecnologie, ma nonostante ciò un dato resta costante. Fig. 11 Architettura globale di una GPU Tesla Fig. 13 Andamento prestazionale negli anni di GPUs NVIDIA, GPUs AMD e CPUs Intel Con l introduzione da parte di NVIDIA della tecnlogia Tesla c è stata una vera e propria svolta: nacquero, infatti, le prime schede prive di connettore video in grado di essere utilizzate anche per il calcolo generico. Il grafico in alto, inoltre, evidenzia la fase di costante evoluzione che stanno attraversando le GPU dal 2007 ad oggi. Nonostante le nuove soluzioni, il divario però tra le prestazioni di una GPU rispetto ad una CPU è in certi casi imbarazzante; tale differenza espressa in GigaFlop/s, infatti, sembra in crescita costante. 17

18 2.4 Heterogeneous System Architecture Nonostante le altissime prestazioni offerte dalle GPUs, non risulta possibile considerarle come unità di elaborazione autonoma poichè vanno sempre accompagnate dall uso congiunto delle CPUs. La strategia di lavoro, quindi, è molto semplice: la CPU si occupa di svolgere funzioni di controllo e di calcolo in maniera seriale, demandando all acceleratore grafico compiti computazionalmente molto onerosi e con un alto grado di parallelismo. La comunicazione CPU GPU può avvenire non solo attraverso l uso di un bus ad alta velocità, ma anche attraverso la condivisione di un unica area di memoria per entrambi (fisica o virtuale). Infatti, nel caso in cui entrambi i dispositivi non siano dotati di aree di memoria proprie, è possibile far riferimento ad un area di memoria comune utilizzando le API messe a disposizione dai vari modelli di programmazione, come ad esempio CUDA e OpenCL. In questo modo si eviterà la latenza dovuta al trasferimento dei dati tra i dispositivi, in quanto basterà un semplice scambio di puntatori e non le copie intere degli oggetti. Questo è il caso delle architetture eterogenee (Heterogeneous System Architecture), nelle quali le applicazioni possono creare le strutture dati in unico spazio di indirizzi e inviare il lavoro al dispositivo hardware più appropriato per la risoluzione del compito. Diversi task di elaborazione possono operare tranquillamente sulle stesse regioni di dati evitando problemi di coerenza, grazie alle operazioni atomiche. Fig. 14 Dispositivi mobili con Systems-on-Chip Dunque, nonostante CPU e GPU sembrino non lavorare in modo efficiente tra loro, tramite questo nuovo design è possibile ottimizzare la loro interazione. Tale soluzione, infatti, è particolarmente presente sui dispositivi mobili (smartphone, tablet) che montano dei veri e propri Systems-on-Chip che incorporano tutti gli elementi in unico chip. 18

19 Capitolo 3: Modelli di programmazione GPU Le alte prestazioni ottenute tramite l uso delle GPUs nell ultimo decennio ha catturato l attenzione del settore scientifico e degli sviluppatori circa la possibilità di utilizzare i processori grafici come unità per effettuare calcoli general purpose. Ciò ha sicuramente aiutato la nascita ed la rapida crescita di diversi linguaggi di programmazioni per l ambiente grafico. Il GPU computing ha avuto inizio nel 2006 quando vennero presentati CUDA e Stream, due interfacce di programmazione grafica progettate dai due principali produttori di GPUs, ovvero NVIDIA e AMD. Qualche anno dopo fu avviato il progetto OpenCL che aveva come obbiettivo la realizzazione di un framework d esecuzione eterogeneo sul quale potessero lavorare sia GPU (di diverse case), sia CPU. Con l avanzare del tempo questi linguaggi sono stati migliorati, diventando sempre più simili ai comuni linguaggi di programmazione general purpose con l aggiunta di metodi di controllo sempre più semplici ed efficaci. Tuttavia, attualmente OpenCL e CUDA rappresentano le soluzioni più efficienti per sfruttare al meglio le prestazioni offerte dalle unità di eleborazione grafica; per tale motivo verranno presentate e confrontate qui di seguito. 19

20 3.1 CUDA CUDA, acronimo di Computer Unifed Device Architecture, è un framework ideato da NVIDIA nel 2006; esso risulta applicabile su molte GPUs prodotte dalla stessa società americana, come ad esempio le GeForce (dalla serie 8 in poi), Quadro e Tesla. Il framework comprende un architettura di calcolo parallela general purpose con la relativa Application Programming Interface (API) supportata da un apposito compilatore (nvcc) per il codice CPU/GPU. Nel toolkit fornito da CUDA, inoltre, sono presenti anche un ambiente di sviluppo integrato (Nsight) e varie estensioni dei principali linguaggi per semplificare la programmazione, come ad esempio C, C++, Fortran, Java e Phyton; in questo elaborato saranno presentati esempi in CUDA C. Risultano avere grande utilità, tuttavia, anche una serie di librerie particolari come ad esempio funzioni per le operazioni di algebra lineare (cublas), funzioni per le operazioni su matrici sparse (cusparse) e librerire per il calcolo della trasformata di Fourier (cufft) Scalabilità automatica e gerarchia dei threads Nonostante CUDA sia una soluzione proprietaria di NVIDIA, non è detto che tutte le GPUs che supportano tale framework abbiano la stessa architettura. E possibile, infatti, che esse differiscano ad esempio per il numero di core presenti sul chip; per evitare eventuali problemi di portabilità delle applicazioni, NVIDIA propone con CUDA un modello altamente scalabile in grado di adattarsi senza difficoltà a tutti i chip grafici che supportano tale framework. L idea di base è quella di suddividere il carico di lavoro in parti più piccole, ovvero partizionare un programma multithread in una serie di blocchi paralleli ed indipendenti tra loro formanti una griglia e contenenti i vari threads. In questo modo ogni programma compilato in CUDA si adatterà runtime all architettura su cui è in esecuzione, in modo del tutto trasparente rispetto al numero di core presenti. Il programmatore, infatti, setta una configurazione di esecuzione su un certo numero di blocchi, ma solo a tempo di esecuzione la suddivisione logica in blocchi corrisponderà all assegnazione fisica agli Streaming Processors presenti sulla GPU. E facile intuire che se un chip grafico possiede più SM rispetto ad un altro, esso elaborerà i processi in maniera più rapida. 20

21 I blocchi in cui viene suddiviso il programma, tuttavia, vanno a comporre una griglia che può essere sia monodimensionale e sia bidimensionale, contenente al massimo in ogni dimensione blocchi. Ogni blocco, inoltre, può avere una struttura monodimensionale, bidimensionale o tridimensionale con dimensione massima di 1024 threads in totale sulle tre dimensioni quindi con al massimo una configurazione del Fig. 15 Sistema altamente scalabile proposto da CUDA tipo (32,16,2). Nella fase di esecuzione, i blocchi sono indipendenti tra loro, mentre i thread al loro interno possono interagire tra loro con i dati condivisi sulla shared memory ma sempre in maniera sincronizzata; inoltre ogni thread ed ogni blocco possiedono un ID all interno della struttura utile alla loro identificazione durante l esecuzione Paradigma di programmazione Un programma scritto in CUDA possiede parti di codice che vengono eseguite in maniera sequenziale dalla CPU, che d ora in avanti sarà identificata come HOST, e altre parti di codice parallelo che vengono gestite dalla GPU, che d ora in poi identificheremo come DEVICE. Solitamente, il listato di codice dell host segue tre passaggi fondamentali: passo#1: allocazione aree di memoria del device passo#2: trasferimento per e dalla memoria del device passo#3: stampa dei risultati. La GPU viene vista, in pratica, come un coprocessore per la CPU che esegue un numero elevato di threads in parallelo e possiede, quindi, una propria memoria (device memory). I threads vengono lanciati sul Device da particolari funzioni, chiamate kernel, che quando invocate 21

22 vengono eseguite N volte in parallelo da N differenti CUDA threads, seguendo la gerarchia illustrata prima. Un kernel viene definito tramite il qualificatore global ed il numero di CUDA threads che lo esegue viene definito tramite la seguente sintassi di esecuzione: KernelFunc <<< numblocchi, numthreadsperblocco >>> Fig. 16 Esempio di griglia e blocchi di esecuzione dei Threads in CUDA Ogni thread che esegue il kernel possiede un ID che è accessibile all interno della funzione lanciata sulla GPU dalla variabile di sistema threadidx. Questa è un vettore a tre dimensioni di un nuovo tipo, introdotto da CUDA C, dim3: ciò serve ad identificare elementi come vettori, matrici o volumi. Si può accedere alle varie dimensioni aggiungendo a threadidx il suffisso.x,.y o.z. Ogni blocco all interno della griglia può essere identificato dalla variabile di sistema blockidx (anch essa di tipo dim3) e si può accedere alla sua dimensione tramite la variabile blockdim. Un programma scritto in CUDA C può contenere più di un Kernel; questi vengono eseguiti in maniera sequenziale, ma la CPU dove aver lanciato il Kernel sulla GPU ed è in attesa del risultato 22

23 può compiere altre operazioni. Quindi l host è libero di fare ciò che vuole mentre la GPU lavora, creando così una sorta di parallelismo. La chiamata al kernel è quindi asincrona; è possibile, inoltre, mettere in attesa il processore durante le operazioni della GPU tramite l uso della primitiva cudathreadsynchronize() inserita dopo la chiamata della funzione kernel che la renderà così bloccante Cenni sulla compilazione Le funzioni kernel, oltre ad essere realizzate in CUDA C, possono anche essere scritte in set di istruzioni dell'architettura, chiamate PTX (Parallel Thread Execution). In ogni caso, esse devono essere compilate in codice binario dal compilatore nvcc, che riconosce i file sorgenti che includono sia codice dell Host che il codice del Device. Il compilatore prima separa il codice host da quello del device, e poi : - Compila il codice del device in assembly; - Modifica il codice dell'host sostituendo la sintassi <<<...>>> da chiamate di funzione CUDA C che riconoscano, lancino ed eseguino il kernel compilato in codice PTX. Tutto il codice compilato viene salvato in un file con estensione.cu da cui si andrà ad ottenere il nostro eseguibile Aree di memoria Le devices CUDA agiscono su diverse aree di memoria: - Register Memory: le informazioni salvate qui sono visibili solo al thread che le ha scritte ed hanno una durata pari a quella del thread; - Local Memory: ha le stesse caratteristiche della memoria dei registri, solo un po più lenta; - Shared Memory: le informazioni presenti sono visibili a tutti i thread all interno di un blocco e hanno durata pari a quella del blocco. E un area di memoria fondamentale che permette la comunicazione tra i threads e la condivisione dei dati tra loro; - Global Memory: tutte le informazioni salvate all interno di quest area sono visibili a tutti i threads all interno dell applicazione e la loro durata coincide con le decisioni 23

24 prese dall host. - Constant Memory: è utilizzata per salvare le informazioni che resterrano costanti durante tutta l esecuzione del thread e sono di sola-lettura. - Texture Memory: è un altro tipo di memoria read-only e risiede sul device Specificatori, qualificatori di tipo e tipi di dato aggiuntivi Per distinguere porzioni di codice riferite all host (CPU) o al device (GPU) vengono introdotti i seguenti qualificatori: device float DeviceFunc() Indica una funzione che sarà eseguita dal device e sarà richiamabile dal device stesso; host float HostFunc() Indica una funzione che sarà eseguibile e richiamabile dall host; global void KernelFunc() permette la definizione dei kernel, ovvero delle funzioni che possono essere richiamate dall host per essere eseguite sul device. E necessario che abbia un tipo di ritorno void e per la sua esecuzione è prevista una sintassi aggiuntiva rispetto alla semplice chiamata a funzioni in C, in quanto permette la configurazione della sua esecuzione indicando il numero di blocchi e il numero dei threads per blocco: KernelFunc<<<numBlocchi,numThreadsPerBlocco>>> Per quanto riguarda i qualificatori di tipo, invece, sono presenti alcuni utili all allocazione dei dati in specifiche aree di memoria: device (fa riferimento alla Global Memory del device) shared (fa riferimento alla Shared Memory del device) constant (fa riferimento alla Constant Memory del device) 24

25 In CUDA C, inoltre, sono presenti alcuni tipi di dato comuni ottimizzati per la loro gestione; questi, infatti, possono essere usati in maniera del tutto indifferente sia nel codice GPU che CPU con forma sia di tipo scalare che vettoriale*: - [u]char; * - [u]short; * - [u]int; * - [u]long; * - float; * - double; Infine, oltre al tipo dim3 che abbiamo già analizzato in precedenza, sono definite anche altre strutture dati aggiuntive che non hanno bisogno di essere istanziate in maniera (vengono create automaticamente dalla GPU al momento della chiamata del kernel ): - blockidx : una struttura dati a 2 campi che fa riferimento alle dimensioni.x.y, contenente l indice di un blocco all interno della griglia rispetto all asse specificato; - threadidx : una struttura dati a 3 campi che fa riferimento alle dimensioni.x.y.z contenente l indice di in thread all interno di un blocco nella direzione indicata; - griddim : una struttura dati a 2 campi indicanti le dimensioni della griglia nelle 2 direzioni; - blockdim : una struttura dati a 3 campi indicanti le dimensioni di un blocco nelle 3 direzioni. Per ottenere l indice di un particolare thread all interno della griglia, ricavando un riferimento assoluto a partire dalla posizione del thread all interno del blocco e dalla dimensione del blocco all interno della griglia si può usare questa formula: ThID = threadidx.x + threadidx.y*blockdim.x + threadidx.z*blockdim.y*blockdim.x Funzioni built-in per la creazione di un contesto CUDA C non possiede funzioni di inizializzazione poiché avviene tutto automaticamente al momento della chiamata di una funzione del device. Quando ciò accade, runtime si crea il primary 25

26 context CUDA per ogni GPU presente nell architettura e viene condiviso tra tutti i threads dell applicazione. Per rimuovere il contesto primario corrente è possibile utilizzare la primitiva cudadevicereset() ed attendere, poi, la prossima chiamata di una funzione del device che andrà a creare un nuovo contesto primario per la GPU a cui si fa riferimento Funzioni built-in per la gestione della memoria Il framework CUDA, come già evidenziato in precedenza, propone che il sistema sia composto da un Host ed un Device, ciascuno con un area di memoria dedicata. Analogamente alle funzioni malloc() e free() presenti nel linguaggio C, in CUDA C troviamo sia la funzione per l allocazione di memoria cudamalloc() nella memoria globale e sia la funzione cudafree() per rilasciare la memoria allocata prima. - cudamalloc() ha come parametri di ingresso l indirizzo del puntatore all oggetto allocato (void) e la dimensione dell oggetto allocato. - cudafree(), invece, riceve in ingresso il puntatore dell oggetto da rimuovere. La memoria lineare può essere allocata anche tramite altre funzioni come ad esempio cudamallocpitch() e cudamalloc3d(). Queste funzioni sono specifiche per l allocazione di oggetti tipo matrici e volumi, poiché sono in grado di garantire le migliori performance di accesso agli indirizzi di memoria di strutture in due o tre dimensioni. Per quanto riguarda i trasferimenti dei dati tra CPU e GPU viene utilizzata la funzione cudamemcpy(). Tramite questa funzione possiamo inviare i dati da e per la memoria globale, avendo come parametri di ingresso: - Puntatore alla destinazione; - Puntatore alla sorgente; - Numero di bytes da trasferire; - Tipo di trasferimento; La variabile tipo di trasferiemento è una costante simbolica che può assumere 3 diversi valori: - cudamemcpyhosttodevice (trasferimento da Host al Device); 26

27 - cudamemcpydevicetohost (trasferimento dal Device all Host); - cudamemcpydevicetodevice (trasferimento da Device a Device); Funzioni built-in per i codici di errore Le funzioni in CUDA C, escludendo i lanci dei kernel, ritornano un codice di errore di tipo cudaerror_t. A tal proposito esiste una funzione che può essere utilizzata per riportare tale codice alla CPU: cudaerror_t cudagetlasterror(void) In questo modo si ottiene il codice dell ultimo errore (anche nel caso in cui non vi fosse alcun errore viene inviato un codice di errore) e ed inoltre è possibile tener conto degli eventuali errori avvenuti durante l esecuzione di un kernel Funzioni built-in per la gestione dei sistemi Multi-Device Un sistema può essere composto anche da più devices e per tale motivo CUDA C, attraverso l uso di alcune semplici primitive, ne permette la gestione: - cudagetdevicecount(*int) memorizza in un intero il numero dei devices presenti nel sistema, identificando ogni chip grafico con un altro intero; - cudagetdeviceproperties(*cudadeviceprop, int) preleva le caratteristiche del chip grafico selezionato tramite la variabile intera, salvandole nella variabile di ritorno di tipo cudadeviceprop. - cudasetdevice() permette la selezione del device sul quale si vuole andare ad elaborare. 27

28 Esempio di un programma completo (1) Il seguente programma è scritto in CUDA C e calcola la seguente operazione log(h_a[i]*h_b[i]) su due vettori costituiti elementi, riportandone il risultato in un terzo vettore. Prima della chiamata del kernel vengono definite le dimensioni della griglia e dei rispettivi blocchi, utilizzando il numero di threads utili per completare in maniera ottimale l esecuzione del programma. #include <stdio.h> // implementazione del kernel global void Kernel(float *d_a,float *d_b,float *d_c) { // calcolo dell'indice di thread int idx = blockidx.x*blockdim.x + threadidx.x; if(idx<100000) d_c[idx] =log(d_a[idx]*d_b[idx]); } // Dichiariamo il main int main( int argc, char** argv) { int n=100000; time_t begin,end; // puntatore per la struttura dati sull'host float *h_a=(float*) malloc(sizeof(float)*n); float *h_b=(float*) malloc(sizeof(float)*n); float *h_c=(float*) malloc(sizeof(float)*n); //inizializzo il vettore numeri casuali for(int i=0;i<n;i++) { h_a[i]=rand(); h_b[i]=rand(); } begin = clock(); for(int i=0;i<n;i++) h_c[i] =log(h_a[i]*h_b[i]); end=clock(); float time_cpu = (double)(end-begin)/clocks_per_sec; printf("cpu time %.20lf\n",time_cpu); // puntatore per la struttura dati sul device float *d_a=null; float *d_b=null; float *d_c=null; 28

29 //verifico al secondo lancio del kernel for(int i=0;i<2;i++) { begin = clock(); //malloc e memcopy host to device cudamalloc( (void**) &d_a, sizeof(float)*n) ; cudamalloc( (void**) &d_a, sizeof(float)*n) ; cudamalloc( (void**) &d_a, sizeof(float)*n) ; cudamemcpy( d_a, h_a, sizeof(float)*n, cudamemcpyhosttodevice) ; cudamemcpy( d_b, h_b, sizeof(float)*n, cudamemcpyhosttodevice) ; cudamemcpy( d_c, h_c, sizeof(float)*n, cudamemcpyhosttodevice) ; // definizione della grandezza della griglia e dei blocchi int numblocks = 196; int numthreadsperblock = 512; // Lancio del kernel dim3 dimgrid(numblocks); dim3 dimblock(numthreadsperblock); Kernel<<< dimgrid, dimblock >>>( d_a,d_b,d_c ); // blocca la CPU fino al completamento del kernel sul device cudathreadsynchronize(); } // Esegue la copia dei risultati //dalla memoria del device a quella dell'host cudamemcpy( h_c, d_c, n, cudamemcpydevicetohost ); end = clock(); float time_gpu = (double)(end-begin)/clocks_per_sec; printf("gpu time %.20lf\n",time_gpu); // libera la memoria sul device cudafree(d_a); cudafree(d_b); cudafree(d_c); } // libera la memoria sull'host free(h_a); free(h_b); free(h_c); return 0; Il seguente listato di codice ci consente di illustrare in maniera semplice quasi tutte le principali primitive proposte dal linguaggio CUDA C, facendo anche un confronto diretto tra i tempi di esecuzione della stessa operazione eseguita prima dalla CPU e poi dalla GPU. 29

30 Esempio di un programma completo (2) Il seguente programma scritto in CUDA C calcola il prodotto di due matrici quadrate A e B di dimensione n=3, e ne riporta il risultato in una terza matrice C. #include <stdio.h> // implementazione del kernel global void sommaarray(float *A_d, float *B_d, float *C_d, int N){ int k; float prod; } prod=0; for(k=0; k<n; k++){ prod = prod + A_d[threadIdx.y*N + k] * B_d[k*N + threadidx.x]; } C_d[threadIdx.y*N + threadidx.x] = prod; // Dichiariamo il main int main( int argc, char** argv) { //dichiarazioni global void sommaarray(float*, float*, float*, int ); float *A, *B, *C, *A_d, *B_d, *C_d; int size, i, N; //allocazione memorie dell'host e del device N=3; size=sizeof(float); A=(float*)malloc(size*N*N); B=(float*)malloc(size*N*N); C=(float*)malloc(size*N*N); cudamalloc((void**)&a_d, size*n*n); cudamalloc((void**)&b_d, size*n*n); cudamalloc((void**)&c_d, size*n*n); //inizializzazione for(i=0; i<n*n; i++) { *(A+i)=i-1; *(B+i)=i+1; } //copia nella memoria del device cudamemcpy(a_d, A, size*n*n, cudamemcpyhosttodevice); cudamemcpy(b_d, B, size*n*n, cudamemcpyhosttodevice); 30

31 // definizione della grandezza della griglia e dei blocchi dim3 DimGrid(1,1); dim3 DimBlock(N,N,1); // Lancio del kernel sommaarray<<<dimgrid,dimblock>>>(a_d, B_d, C_d, N); // Esegue la copia dei risultati //dalla memoria del device a quella dell'host cudamemcpy(c, C_d, size*n*n, cudamemcpydevicetohost); //Stampa a video dei risultati for(i=0; i<n*n; i++) printf("c= %f\n", *(C+i)); printf(" \n"); // libera la memoria sull'host cudafree(a); cudafree(b); cudafree(c); // libera la memoria sul device cudafree(a_d); cudafree(b_d); cudafree(c_d); } Il seguente listato di codice illustra come è possibile fare un prodotto tra 2 matrici quadrate. In questo caso, le righe di A e B vengono caricate n volte nella memoria globale ed ogni thread calcola un elemento della matrice risultante C; quindi è possibile utilizzare un solo blocco per la matrice C. Ogni thread del blocco, quindi, carica una riga della matrice A, una colonna della matrice B e ne esegue il prodotto scalare riportandolo nella matrice C. 31

32 3.2 OpenCL OpenCL (Open Computing Language) è un framework per lo sviluppo di applicazioni eseguibili su architetture eterogenee progettate in maniera indipendenti rispetto alla scelta dell hardware. Infatti è possibile eseguire il codice su dispositivi come le CPUs, le GPUs e i DSPs, anche se prodotti da aziende diverse. Questa soluzione è stata ideata dalla Apple, ma è stata sviluppata e tenuta in commercio da un consorzio no-profit con nome di Khronos Group. OpenCL è, quindi, l alternativa principale al framework proposto da NVIDIA nel campo del GPU computing. Tuttavia, OpenCL basa la sua strategia di mercato su un idea radicalmente opposta a quella usata da CUDA; infatti mentre quest ultima propone come suo punto di forza la specializzazione dei prodotti (architettura ideata, sviluppata e compatibile solo con NVIDIA) garantendo ottime prestazioni a discapito della portabilità su architetture diverse, OpenCL invece propone una soluzione compatibile con tutti i dispositivi compatibili presenti sul mercato. Infatti un applicazione scritta in OpenCL può essere eseguita da componenti prodotti da varie case produttrici, come ad esempio Intel, NVIDIA, IBM, AMD. OpenCL include, tuttavia, anche un linguaggio di programmazione per scrivere kernel basato su C99 che consente di sfruttare in maniera diretta le potenzialità dell hardware che si ha disposizione; inoltre sono presenti un interfaccia di programmazione (API) ed un supporto runtime per lo sviluppo delle applicazioni. In tale modello, comunque, sono messe a disposizione degli sviluppatori una serie di primitive di sincronizzazione per l esecuzione in ambiente altamente parallelo, dei qualificatori per le regioni di memoria ed alcuni meccanismi di controllo per le diverse piattaforme di esecuzione. Tuttavia, è importante far notare che l elevato tasso di portabilità del codice non implica, ovviamente, il raggiungimento dello stesso livello di prestazioni su diverse risorse hardware. E altresì importante adattare, quindi, l applicazione facendo sempre riferimento alla piattaforma d esecuzione, così da ottimizzare il codice in base alle caratteristiche del dispositivo. In particolare, il modello di piattaforma presentata da OpenCL richiede la presenza di un processore Host collegato ad uno o più OpenCL Device. Ciascun device, inoltre, deve essere inteso come un aggregato di Compute Unit (unità di calcolo), le quali a loro volta devono essere 32

33 viste come una serie di Processing Element. Nella nostra analisi, identificheremo l OpenCL Device con una GPU. Quindi, ricordando gli elementi base dell architettura di una generica GPU, le Compute Unit coincideranno con gli Streaming Multiprocessor e i Fig. 17 Modello architetturale proposto da OpenCL Processing Element con gli Streaming Processor. Il modello di esecuzione proposto da OpenCL si presenta scisso in due parti, ovvero il codice viene diviso nel programma Host eseguito dalla CPU e nei kernel eseguiti dalle OpenCL Device. Una regola di base della programmazione di un kernel è che esso deve essere sempre definito all interno del contesto gestito dall Host; per contesto si intende l insieme di:! Funzioni Kernel con il valore dei relativi argomenti, tutti contenuti all interno di strutture chiamate Kernel object;! Program objects: il codice sorgente e l eseguibile del programma che implementa il Kernel;! Memory objects, ovvero una serie di oggetti di memoria visibili all host e alle OpenCL devices durante l esecuzione del kernel;! Devices accessibili dall Host. Le interazioni tra Host e Device avvengono attraverso le code di comandi (command-queue), ne viene associata una ad ogni singolo device. I comandi che possono essere inviati dall Host si dividono in 3 categorie: kernel enqueue commands (comandi per l inserimento in coda di un kernel), memory commands (comandi per il trasferimento di dati tra host e device) e synchronization commands (comandi per la sincronizzazione dell esecuzione). La coda di comandi può essere risolta sia seguendo l ordine di ricezione (in-order execution) e sia senza alcun ordine (out-of-order execution). Nell istante in cui viene inviato il comando di esecuzione di un kernel allo stesso tempo viene definita anche la sua matrice di esecuzione, ovvero uno spazio di indici N-dimensionale denominato NDRange (N-Dimensional Range con N=1,2,3). Tale matrice di computazione permette di suddividere efficacemente il carico di lavoro in maniera 33

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

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

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

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

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

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

Scheduling della CPU. Sistemi multiprocessori e real time Metodi di valutazione Esempi: Solaris 2 Windows 2000 Linux

Scheduling della CPU. Sistemi multiprocessori e real time Metodi di valutazione Esempi: Solaris 2 Windows 2000 Linux Scheduling della CPU Sistemi multiprocessori e real time Metodi di valutazione Esempi: Solaris 2 Windows 2000 Linux Sistemi multiprocessori Fin qui si sono trattati i problemi di scheduling su singola

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

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

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

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

Architettura di un calcolatore

Architettura di un calcolatore 2009-2010 Ingegneria Aerospaziale Prof. A. Palomba - Elementi di Informatica (E-Z) 7 Architettura di un calcolatore Lez. 7 1 Modello di Von Neumann Il termine modello di Von Neumann (o macchina di Von

Dettagli

C. P. U. MEMORIA CENTRALE

C. P. U. MEMORIA CENTRALE C. P. U. INGRESSO MEMORIA CENTRALE USCITA UNITA DI MEMORIA DI MASSA La macchina di Von Neumann Negli anni 40 lo scienziato ungherese Von Neumann realizzò il primo calcolatore digitale con programma memorizzato

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

L informatica INTRODUZIONE. L informatica. Tassonomia: criteri. È la disciplina scientifica che studia

L informatica INTRODUZIONE. L informatica. Tassonomia: criteri. È la disciplina scientifica che studia L informatica È la disciplina scientifica che studia INTRODUZIONE I calcolatori, nati in risposta all esigenza di eseguire meccanicamente operazioni ripetitive Gli algoritmi, nati in risposta all esigenza

Dettagli

La memoria centrale (RAM)

La memoria centrale (RAM) La memoria centrale (RAM) Mantiene al proprio interno i dati e le istruzioni dei programmi in esecuzione Memoria ad accesso casuale Tecnologia elettronica: Veloce ma volatile e costosa Due eccezioni R.O.M.

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

Approccio stratificato

Approccio stratificato Approccio stratificato Il sistema operativo è suddiviso in strati (livelli), ciascuno costruito sopra quelli inferiori. Il livello più basso (strato 0) è l hardware, il più alto (strato N) è l interfaccia

Dettagli

Prestazioni CPU Corso di Calcolatori Elettronici A 2007/2008 Sito Web:http://prometeo.ing.unibs.it/quarella Prof. G. Quarella prof@quarella.

Prestazioni CPU Corso di Calcolatori Elettronici A 2007/2008 Sito Web:http://prometeo.ing.unibs.it/quarella Prof. G. Quarella prof@quarella. Prestazioni CPU Corso di Calcolatori Elettronici A 2007/2008 Sito Web:http://prometeo.ing.unibs.it/quarella Prof. G. Quarella prof@quarella.net Prestazioni Si valutano in maniera diversa a seconda dell

Dettagli

. A primi passi con microsoft a.ccepss SommarIo: i S 1. aprire e chiudere microsoft access Start (o avvio) l i b tutti i pro- grammi

. A primi passi con microsoft a.ccepss SommarIo: i S 1. aprire e chiudere microsoft access Start (o avvio) l i b tutti i pro- grammi Capitolo Terzo Primi passi con Microsoft Access Sommario: 1. Aprire e chiudere Microsoft Access. - 2. Aprire un database esistente. - 3. La barra multifunzione di Microsoft Access 2007. - 4. Creare e salvare

Dettagli

Pronto Esecuzione Attesa Terminazione

Pronto Esecuzione Attesa Terminazione Definizione Con il termine processo si indica una sequenza di azioni che il processore esegue Il programma invece, è una sequenza di azioni che il processore dovrà eseguire Il processo è quindi un programma

Dettagli

LABORATORIO DI SISTEMI

LABORATORIO DI SISTEMI ALUNNO: Fratto Claudio CLASSE: IV B Informatico ESERCITAZIONE N : 1 LABORATORIO DI SISTEMI OGGETTO: Progettare e collaudare un circuito digitale capace di copiare le informazioni di una memoria PROM in

Dettagli

Definizione Parte del software che gestisce I programmi applicativi L interfaccia tra il calcolatore e i programmi applicativi Le funzionalità di base

Definizione Parte del software che gestisce I programmi applicativi L interfaccia tra il calcolatore e i programmi applicativi Le funzionalità di base Sistema operativo Definizione Parte del software che gestisce I programmi applicativi L interfaccia tra il calcolatore e i programmi applicativi Le funzionalità di base Architettura a strati di un calcolatore

Dettagli

Esame di INFORMATICA

Esame di INFORMATICA Università di L Aquila Facoltà di Biotecnologie Esame di INFORMATICA Lezione 4 MACCHINA DI VON NEUMANN Anni 40 i dati e i programmi che descrivono come elaborare i dati possono essere codificati nello

Dettagli

SISTEMI OPERATIVI. Prof. Enrico Terrone A. S: 2008/09

SISTEMI OPERATIVI. Prof. Enrico Terrone A. S: 2008/09 SISTEMI OPERATIVI Prof. Enrico Terrone A. S: 2008/09 Che cos è il sistema operativo Il sistema operativo (SO) è il software che gestisce e rende accessibili (sia ai programmatori e ai programmi, sia agli

Dettagli

CPU. Maurizio Palesi

CPU. Maurizio Palesi CPU Central Processing Unit 1 Organizzazione Tipica CPU Dispositivi di I/O Unità di controllo Unità aritmetico logica (ALU) Terminale Stampante Registri CPU Memoria centrale Unità disco Bus 2 L'Esecutore

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

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 11 Martedì 12-11-2013 1 Tecniche di allocazione mediante free list Generalmente,

Dettagli

Gestione della memoria centrale

Gestione della memoria centrale Gestione della memoria centrale Un programma per essere eseguito deve risiedere in memoria principale e lo stesso vale per i dati su cui esso opera In un sistema multitasking molti processi vengono eseguiti

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

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

DMA Accesso Diretto alla Memoria

DMA Accesso Diretto alla Memoria Testo di rif.to: [Congiu] - 8.1-8.3 (pg. 241 250) 08.a DMA Accesso Diretto alla Memoria Motivazioni Organizzazione dei trasferimenti DMA Arbitraggio del bus di memoria Trasferimento di un blocco di dati

Dettagli

Gestione della memoria. Paginazione Segmentazione Segmentazione con paginazione

Gestione della memoria. Paginazione Segmentazione Segmentazione con paginazione Gestione della memoria Paginazione Segmentazione Segmentazione con paginazione Modello di paginazione Il numero di pagina serve come indice per la tabella delle pagine. Questa contiene l indirizzo di base

Dettagli

Cosa si intende per GPGPU? Il modello di programmazione di CUDA. GPU di precedente generazione. Storia delle GPU

Cosa si intende per GPGPU? Il modello di programmazione di CUDA. GPU di precedente generazione. Storia delle GPU Cosa si intende per GPGPU? Il modello di programmazione di CUDA Calcolo General Purpose su GPU (Graphic Processing Unit) in applicazioni differenti dalla grafica 3D tradizionale Le GPU sono usate come

Dettagli

Cosa è un foglio elettronico

Cosa è un foglio elettronico Cosa è un foglio elettronico Versione informatica del foglio contabile Strumento per l elaborazione di numeri (ma non solo...) I valori inseriti possono essere modificati, analizzati, elaborati, ripetuti

Dettagli

Creare una Rete Locale Lezione n. 1

Creare una Rete Locale Lezione n. 1 Le Reti Locali Introduzione Le Reti Locali indicate anche come LAN (Local Area Network), sono il punto d appoggio su cui si fonda la collaborazione nel lavoro in qualunque realtà, sia essa un azienda,

Dettagli

La gestione di un calcolatore. Sistemi Operativi primo modulo Introduzione. Sistema operativo (2) Sistema operativo (1)

La gestione di un calcolatore. Sistemi Operativi primo modulo Introduzione. Sistema operativo (2) Sistema operativo (1) La gestione di un calcolatore Sistemi Operativi primo modulo Introduzione Augusto Celentano Università Ca Foscari Venezia Corso di Laurea in Informatica Un calcolatore (sistema di elaborazione) è un sistema

Dettagli

Sistema Operativo. Fondamenti di Informatica 1. Il Sistema Operativo

Sistema Operativo. Fondamenti di Informatica 1. Il Sistema Operativo Sistema Operativo Fondamenti di Informatica 1 Il Sistema Operativo Il Sistema Operativo (S.O.) è un insieme di programmi interagenti che consente agli utenti e ai programmi applicativi di utilizzare al

Dettagli

Il software impiegato su un computer si distingue in: Sistema Operativo Compilatori per produrre programmi

Il software impiegato su un computer si distingue in: Sistema Operativo Compilatori per produrre programmi Il Software Il software impiegato su un computer si distingue in: Software di sistema Sistema Operativo Compilatori per produrre programmi Software applicativo Elaborazione testi Fogli elettronici Basi

Dettagli

Sistemi Operativi (modulo di Informatica II) I processi

Sistemi Operativi (modulo di Informatica II) I processi Sistemi Operativi (modulo di Informatica II) I processi Patrizia Scandurra Università degli Studi di Bergamo a.a. 2009-10 Sommario Il concetto di processo Schedulazione dei processi e cambio di contesto

Dettagli

Il Sistema Operativo

Il Sistema Operativo Il Sistema Operativo Il Sistema Operativo Il Sistema Operativo (S.O.) è un insieme di programmi interagenti che consente agli utenti e ai programmi applicativi di utilizzare al meglio le risorse del Sistema

Dettagli

Funzioni in C. Violetta Lonati

Funzioni in C. Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Funzioni - in breve: Funzioni Definizione di funzioni

Dettagli

Introduzione alle tecnologie informatiche. Strumenti mentali per il futuro

Introduzione alle tecnologie informatiche. Strumenti mentali per il futuro Introduzione alle tecnologie informatiche Strumenti mentali per il futuro Panoramica Affronteremo i seguenti argomenti. I vari tipi di computer e il loro uso Il funzionamento dei computer Il futuro delle

Dettagli

Valutazione delle Prestazioni. Valutazione delle Prestazioni. Architetture dei Calcolatori (Lettere. Tempo di risposta e throughput

Valutazione delle Prestazioni. Valutazione delle Prestazioni. Architetture dei Calcolatori (Lettere. Tempo di risposta e throughput Valutazione delle Prestazioni Architetture dei Calcolatori (Lettere A-I) Valutazione delle Prestazioni Prof. Francesco Lo Presti Misura/valutazione di un insieme di parametri quantitativi per caratterizzare

Dettagli

Fondamenti di Informatica Ingegneria Clinica Lezione 16/10/2009. Prof. Raffaele Nicolussi

Fondamenti di Informatica Ingegneria Clinica Lezione 16/10/2009. Prof. Raffaele Nicolussi Fondamenti di Informatica Ingegneria Clinica Lezione 16/10/2009 Prof. Raffaele Nicolussi FUB - Fondazione Ugo Bordoni Via B. Castiglione 59-00142 Roma Docente Raffaele Nicolussi rnicolussi@fub.it Lezioni

Dettagli

Struttura del calcolatore

Struttura del calcolatore Struttura del calcolatore Proprietà: Flessibilità: la stessa macchina può essere utilizzata per compiti differenti, nessuno dei quali è predefinito al momento della costruzione Velocità di elaborazione

Dettagli

Hardware delle reti LAN

Hardware delle reti LAN Hardware delle reti LAN Le reti LAN utilizzano una struttura basata su cavi e concentratori che permette il trasferimento di informazioni. In un ottica di questo tipo, i computer che prendono parte allo

Dettagli

Mac Application Manager 1.3 (SOLO PER TIGER)

Mac Application Manager 1.3 (SOLO PER TIGER) Mac Application Manager 1.3 (SOLO PER TIGER) MacApplicationManager ha lo scopo di raccogliere in maniera centralizzata le informazioni piu salienti dei nostri Mac in rete e di associare a ciascun Mac i

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

Interesse, sconto, ratei e risconti

Interesse, sconto, ratei e risconti 129 Interesse, sconto, ratei e risconti Capitolo 129 129.1 Interesse semplice....................................................... 129 129.1.1 Esercizio per il calcolo dell interesse semplice........................

Dettagli

introduzione I MICROCONTROLLORI

introduzione I MICROCONTROLLORI introduzione I MICROCONTROLLORI Definizione Un microcontrollore è un dispositivo elettronico programmabile Può svolgere autonomamente diverse funzioni in base al programma in esso implementato Non è la

Dettagli

IL CASO DELL AZIENDA. Perché SAP. www.softwarebusiness.it

IL CASO DELL AZIENDA. Perché SAP. www.softwarebusiness.it LA SOLUZIONE SAP FOR PROFESSIONAL SERVICES IL CASO DELL AZIENDA Perché SAP Grazie a SAP siamo riusciti a pianificare meglio e ad ottenere tempestive informazioni su tempi e costi delle nostre commesse.

Dettagli

REGIONE BASILICATA DIPARTIMENTO PRESIDENZA DELLA GIUNTA UFFICIO SOCIETÀ DELL INFORMAZIONE

REGIONE BASILICATA DIPARTIMENTO PRESIDENZA DELLA GIUNTA UFFICIO SOCIETÀ DELL INFORMAZIONE REGIONE BASILICATA DIPARTIMENTO PRESIDENZA DELLA GIUNTA UFFICIO SOCIETÀ DELL INFORMAZIONE Bando pubblico per lo sviluppo della rete a Banda Larga nelle aree a fallimento di mercato finalizzato al superamento

Dettagli

Il calendario di Windows Vista

Il calendario di Windows Vista Il calendario di Windows Vista Una delle novità introdotte in Windows Vista è il Calendario di Windows, un programma utilissimo per la gestione degli appuntamenti, delle ricorrenze e delle attività lavorative

Dettagli

CALCOLATORI ELETTRONICI A cura di Luca Orrù

CALCOLATORI ELETTRONICI A cura di Luca Orrù Lezione 1 Obiettivi del corso Il corso si propone di descrivere i principi generali delle architetture di calcolo (collegamento tra l hardware e il software). Sommario 1. Tecniche di descrizione (necessarie

Dettagli

Calcolatori Elettronici A a.a. 2008/2009

Calcolatori Elettronici A a.a. 2008/2009 Calcolatori Elettronici A a.a. 2008/2009 PRESTAZIONI DEL CALCOLATORE Massimiliano Giacomin Due dimensioni Tempo di risposta (o tempo di esecuzione): il tempo totale impiegato per eseguire un task (include

Dettagli

Database. Si ringrazia Marco Bertini per le slides

Database. Si ringrazia Marco Bertini per le slides Database Si ringrazia Marco Bertini per le slides Obiettivo Concetti base dati e informazioni cos è un database terminologia Modelli organizzativi flat file database relazionali Principi e linee guida

Dettagli

Excel. A cura di Luigi Labonia. e-mail: luigi.lab@libero.it

Excel. A cura di Luigi Labonia. e-mail: luigi.lab@libero.it Excel A cura di Luigi Labonia e-mail: luigi.lab@libero.it Introduzione Un foglio elettronico è un applicazione comunemente usata per bilanci, previsioni ed altri compiti tipici del campo amministrativo

Dettagli

Corso di Sistemi Operativi Ingegneria Elettronica e Informatica prof. Rocco Aversa. Raccolta prove scritte. Prova scritta

Corso di Sistemi Operativi Ingegneria Elettronica e Informatica prof. Rocco Aversa. Raccolta prove scritte. Prova scritta Corso di Sistemi Operativi Ingegneria Elettronica e Informatica prof. Rocco Aversa Raccolta prove scritte Realizzare una classe thread Processo che deve effettuare un numero fissato di letture da una memoria

Dettagli

Interesse, sconto, ratei e risconti

Interesse, sconto, ratei e risconti TXT HTM PDF pdf P1 P2 P3 P4 293 Interesse, sconto, ratei e risconti Capitolo 129 129.1 Interesse semplice....................................................... 293 129.1.1 Esercizio per il calcolo dell

Dettagli

Calcolatori Elettronici. La memoria gerarchica La memoria virtuale

Calcolatori Elettronici. La memoria gerarchica La memoria virtuale Calcolatori Elettronici La memoria gerarchica La memoria virtuale Come usare la memoria secondaria oltre che per conservare permanentemente dati e programmi Idea Tenere parte del codice in mem princ e

Dettagli

MODELLO CLIENT/SERVER. Gianluca Daino Dipartimento di Ingegneria dell Informazione Università degli Studi di Siena daino@unisi.it

MODELLO CLIENT/SERVER. Gianluca Daino Dipartimento di Ingegneria dell Informazione Università degli Studi di Siena daino@unisi.it MODELLO CLIENT/SERVER Gianluca Daino Dipartimento di Ingegneria dell Informazione Università degli Studi di Siena daino@unisi.it POSSIBILI STRUTTURE DEL SISTEMA INFORMATIVO La struttura di un sistema informativo

Dettagli

Il database management system Access

Il database management system Access Il database management system Access Corso di autoistruzione http://www.manualipc.it/manuali/ corso/manuali.php? idcap=00&idman=17&size=12&sid= INTRODUZIONE Il concetto di base di dati, database o archivio

Dettagli

Sistemi Operativi IMPLEMENTAZIONE DEL FILE SYSTEM. Implementazione del File System. Struttura del File System. Implementazione

Sistemi Operativi IMPLEMENTAZIONE DEL FILE SYSTEM. Implementazione del File System. Struttura del File System. Implementazione IMPLEMENTAZIONE DEL FILE SYSTEM 9.1 Implementazione del File System Struttura del File System Implementazione Implementazione delle Directory Metodi di Allocazione Gestione dello spazio libero Efficienza

Dettagli

Introduzione alle basi di dati. Gestione delle informazioni. Gestione delle informazioni. Sistema informatico

Introduzione alle basi di dati. Gestione delle informazioni. Gestione delle informazioni. Sistema informatico Introduzione alle basi di dati Introduzione alle basi di dati Gestione delle informazioni Base di dati Modello dei dati Indipendenza dei dati Accesso ai dati Vantaggi e svantaggi dei DBMS Gestione delle

Dettagli

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto: Tipi primitivi Il linguaggio Java offre alcuni tipi di dato primitivi Una variabile di tipo primitivo può essere utilizzata direttamente. Non è un riferimento e non ha senso tentare di istanziarla mediante

Dettagli

Corso di Informatica

Corso di Informatica Corso di Informatica Modulo T2 3-Compilatori e interpreti 1 Prerequisiti Principi di programmazione Utilizzo di un compilatore 2 1 Introduzione Una volta progettato un algoritmo codificato in un linguaggio

Dettagli

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli CODICE Le fonti in cui si possono trovare tutorial o esempi di progetti utilizzati con Arduino si trovano nel sito ufficiale di Arduino, oppure nei forum di domotica e robotica. Il codice utilizzato per

Dettagli

Università degli Studi di Padova Dipartimento di Matematica. - Corso di Laurea in Informatica

Università degli Studi di Padova Dipartimento di Matematica. - Corso di Laurea in Informatica Università degli Studi di Padova Dipartimento di Matematica. - Corso di Laurea in Informatica Il presente esame scritto deve essere svolto in forma individuale in un tempo massimo di 60 minuti dalla sua

Dettagli

Come masterizzare dischi con Nero 11

Come masterizzare dischi con Nero 11 Come masterizzare dischi con Nero 11 Non c è dubbio che Nero è diventato un sinonimo di masterizzatore di dischi, data la lunga esperienza sul mercato. Molte persone pensano in questo programma nel momento

Dettagli

PROTOTIPAZIONE DI UN TRADUTTORE DA SORGENTE PLC AD ASSEMBLY DI UNA MACCHINA VIRTUALE

PROTOTIPAZIONE DI UN TRADUTTORE DA SORGENTE PLC AD ASSEMBLY DI UNA MACCHINA VIRTUALE PROTOTIPAZIONE DI UN TRADUTTORE DA SORGENTE PLC AD ASSEMBLY DI UNA MACCHINA VIRTUALE Relatore: prof. Michele Moro Laureando: Marco Beggio Corso di laurea in Ingegneria Informatica Anno Accademico 2006-2007

Dettagli

ARCHITETTURA DI RETE FOLEGNANI ANDREA

ARCHITETTURA DI RETE FOLEGNANI ANDREA ARCHITETTURA DI RETE FOLEGNANI ANDREA INTRODUZIONE È denominata Architettura di rete un insieme di livelli e protocolli. Le reti sono organizzate gerarchicamente in livelli, ciascuno dei quali interagisce

Dettagli

Sistema operativo: Gestione della memoria

Sistema operativo: Gestione della memoria Dipartimento di Elettronica ed Informazione Politecnico di Milano Informatica e CAD (c.i.) - ICA Prof. Pierluigi Plebani A.A. 2008/2009 Sistema operativo: Gestione della memoria La presente dispensa e

Dettagli

Software per Helpdesk

Software per Helpdesk Software per Helpdesk Padova - maggio 2010 Antonio Dalvit - www.antoniodalvit.com Cosa è un helpdesk? Un help desk è un servizio che fornisce informazioni e assistenza ad utenti che hanno problemi nella

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

CONTROLLO DI GESTIONE DELLO STUDIO

CONTROLLO DI GESTIONE DELLO STUDIO CONTROLLO DI GESTIONE DELLO STUDIO Con il controllo di gestione dello studio il commercialista può meglio controllare le attività svolte dai propri collaboratori dello studio nei confronti dei clienti

Dettagli

MANUALE MOODLE STUDENTI. Accesso al Materiale Didattico

MANUALE MOODLE STUDENTI. Accesso al Materiale Didattico MANUALE MOODLE STUDENTI Accesso al Materiale Didattico 1 INDICE 1. INTRODUZIONE ALLA PIATTAFORMA MOODLE... 3 1.1. Corso Moodle... 4 2. ACCESSO ALLA PIATTAFORMA... 7 2.1. Accesso diretto alla piattaforma...

Dettagli

Mon Ami 3000 Provvigioni agenti Calcolo delle provvigioni per agente / sub-agente

Mon Ami 3000 Provvigioni agenti Calcolo delle provvigioni per agente / sub-agente Prerequisiti Mon Ami 3000 Provvigioni agenti Calcolo delle provvigioni per agente / sub-agente L opzione Provvigioni agenti è disponibile per le versioni Vendite, Azienda Light e Azienda Pro. Introduzione

Dettagli

Scopo della lezione. Informatica. Informatica - def. 1. Informatica

Scopo della lezione. Informatica. Informatica - def. 1. Informatica Scopo della lezione Informatica per le lauree triennali LEZIONE 1 - Che cos è l informatica Introdurre i concetti base della materia Definire le differenze tra hardware e software Individuare le applicazioni

Dettagli

Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi.

Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi. Algoritmi 1 Sommario Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi. 2 Informatica Nome Informatica=informazione+automatica. Definizione Scienza che si occupa dell

Dettagli

Le strumentazioni laser scanning oriented per i processi di censimento anagrafico dei patrimoni

Le strumentazioni laser scanning oriented per i processi di censimento anagrafico dei patrimoni CONVEGNO FACILITY MANAGEMENT: LA GESTIONE INTEGRATA DEI PATRIMONI PUBBLICI GENOVA FACOLTA DI ARCHITETTURA 06.07.2010 Le strumentazioni laser scanning oriented per i processi di censimento anagrafico dei

Dettagli

Il sistema di I/O. Hardware di I/O Interfacce di I/O Software di I/O. Introduzione

Il sistema di I/O. Hardware di I/O Interfacce di I/O Software di I/O. Introduzione Il sistema di I/O Hardware di I/O Interfacce di I/O Software di I/O Introduzione 1 Sotto-sistema di I/O Insieme di metodi per controllare i dispositivi di I/O Obiettivo: Fornire ai processi utente un interfaccia

Dettagli

Linux nel calcolo distribuito

Linux nel calcolo distribuito openmosix Linux nel calcolo distribuito Dino Del Favero, Micky Del Favero dino@delfavero.it, micky@delfavero.it BLUG - Belluno Linux User Group Linux Day 2004 - Belluno 27 novembre openmosix p. 1 Cos è

Dettagli

Finalità della soluzione... 3. Schema generale e modalità d integrazione... 4. Gestione centralizzata in TeamPortal... 6

Finalità della soluzione... 3. Schema generale e modalità d integrazione... 4. Gestione centralizzata in TeamPortal... 6 Finalità della soluzione... 3 Schema generale e modalità d integrazione... 4 Gestione centralizzata in TeamPortal... 6 Dati gestiti dall Anagrafica Unica... 8 Gestione anagrafica... 9 Storicizzazione...

Dettagli

Alla scoperta della nuova interfaccia di Office 2010

Alla scoperta della nuova interfaccia di Office 2010 Alla scoperta della nuova interfaccia di Office 2010 Una delle novità più eclatanti della versione 2007 era la nuova interfaccia con la barra multifunzione. Office 2010 mantiene questa filosofia di interfaccia

Dettagli

Software di sistema e software applicativo. I programmi che fanno funzionare il computer e quelli che gli permettono di svolgere attività specifiche

Software di sistema e software applicativo. I programmi che fanno funzionare il computer e quelli che gli permettono di svolgere attività specifiche Software di sistema e software applicativo I programmi che fanno funzionare il computer e quelli che gli permettono di svolgere attività specifiche Software soft ware soffice componente è la parte logica

Dettagli

1. BASI DI DATI: GENERALITÀ

1. BASI DI DATI: GENERALITÀ 1. BASI DI DATI: GENERALITÀ BASE DI DATI (DATABASE, DB) Raccolta di informazioni o dati strutturati, correlati tra loro in modo da risultare fruibili in maniera ottimale. Una base di dati è usualmente

Dettagli

Scheda operativa Versione rif. 13.01.3c00. Libro Inventari

Scheda operativa Versione rif. 13.01.3c00. Libro Inventari 1 Inventario... 2 Prepara tabelle Inventario... 2 Gestione Inventario... 3 Tabella esistente... 3 Nuova tabella... 4 Stampa Inventario... 8 Procedure collegate... 11 Anagrafiche Archivi ditta Progressivi

Dettagli

Sistemi Operativi IMPLEMENTAZIONE DEL FILE SYSTEM. D. Talia - UNICAL. Sistemi Operativi 9.1

Sistemi Operativi IMPLEMENTAZIONE DEL FILE SYSTEM. D. Talia - UNICAL. Sistemi Operativi 9.1 IMPLEMENTAZIONE DEL FILE SYSTEM 9.1 Implementazione del File System Struttura del File System Implementazione Implementazione delle Directory Metodi di Allocazione Gestione dello spazio libero Efficienza

Dettagli

BDX 3D-EDITOR (autore: Marco Bedulli) Scopo del software. Caratteristiche fondamentali. Linguaggi utilizzati. Navigazione 3D

BDX 3D-EDITOR (autore: Marco Bedulli) Scopo del software. Caratteristiche fondamentali. Linguaggi utilizzati. Navigazione 3D BDX 3D-EDITOR (autore: Marco Bedulli) Scopo del software BDX 3D Editor è un programma che permette di navigare ed editare texture in un qualsiasi modello 3D.E compatibile con i software in grado di esportare

Dettagli

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) 12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica,

Dettagli

Informatica - A.A. 2010/11

Informatica - A.A. 2010/11 Ripasso lezione precedente Facoltà di Medicina Veterinaria Corso di laurea in Tutela e benessere animale Corso Integrato: Matematica, Statistica e Informatica Modulo: Informatica Esercizio: Convertire

Dettagli

Airone Gestione Rifiuti Funzioni di Esportazione e Importazione

Airone Gestione Rifiuti Funzioni di Esportazione e Importazione Airone Gestione Rifiuti Funzioni di Esportazione e Importazione Airone Funzioni di Esportazione Importazione 1 Indice AIRONE GESTIONE RIFIUTI... 1 FUNZIONI DI ESPORTAZIONE E IMPORTAZIONE... 1 INDICE...

Dettagli

1. Che cos è la multiprogrammazione? Si può realizzare su un sistema monoprocessore? 2. Quali sono i servizi offerti dai sistemi operativi?

1. Che cos è la multiprogrammazione? Si può realizzare su un sistema monoprocessore? 2. Quali sono i servizi offerti dai sistemi operativi? 1. Che cos è la multiprogrammazione? Si può realizzare su un sistema monoprocessore? 2. Quali sono i servizi offerti dai sistemi operativi? 1. La nozione di multiprogrammazione prevede la possibilità di

Dettagli

La Gestione delle risorse Renato Agati

La Gestione delle risorse Renato Agati Renato Agati delle risorse La Gestione Schedulazione dei processi Gestione delle periferiche File system Schedulazione dei processi Mono programmazione Multi programmazione Gestione delle periferiche File

Dettagli

Architettura dei calcolatori II parte Memorie

Architettura dei calcolatori II parte Memorie Università degli Studi di Palermo Dipartimento di Ingegneria Informatica Informatica ed Elementi di Statistica 3 c.f.u. Anno Accademico 2010/2011 Docente: ing. Salvatore Sorce Architettura dei calcolatori

Dettagli

- la possibilità di monitorare lo stato attuale della macchina - fornire una reportistica sulla base di alcune variabili

- la possibilità di monitorare lo stato attuale della macchina - fornire una reportistica sulla base di alcune variabili Il GAI WEB PORTAL nasce con un duplice obiettivo: - la possibilità di monitorare lo stato attuale della macchina - fornire una reportistica sulla base di alcune variabili Si tratta di un software installato

Dettagli

Introduzione a Dev-C++

Introduzione a Dev-C++ Introduzione a Dev-C++ Università degli Studi di Brescia Docente: Massimiliano Giacomin Elementi di Informatica e Programmazione Università di Brescia 1 Note: Dev-C++ richiede Windows 95/98/NT/2000/XP

Dettagli

uadro Soluzioni software per L archiviazione elettronica dei documenti Gestione Aziendale Fa quadrato attorno alla tua azienda

uadro Soluzioni software per L archiviazione elettronica dei documenti Gestione Aziendale Fa quadrato attorno alla tua azienda Fa quadrato attorno alla tua azienda Soluzioni software per L archiviazione elettronica dei documenti Perché scegliere Q Archiviazione Elettronica dei Documenti? Tale applicativo si pone come obbiettivo

Dettagli

CALCOLATORI ELETTRONICI A cura di Luca Orrù. Lezione n.7. Il moltiplicatore binario e il ciclo di base di una CPU

CALCOLATORI ELETTRONICI A cura di Luca Orrù. Lezione n.7. Il moltiplicatore binario e il ciclo di base di una CPU Lezione n.7 Il moltiplicatore binario e il ciclo di base di una CPU 1 SOMMARIO Architettura del moltiplicatore Architettura di base di una CPU Ciclo principale di base di una CPU Riprendiamo l analisi

Dettagli