GPU: processori manycore

Slides:



Advertisements
Presentazioni simili
Scheduling (Schedulazione) Susanna Pelagatti – Università di Pisa
Advertisements

Meccanismi di IPC Problemi classici di IPC
CONCLUSIONE - Nucleo (o Kernel) Interagisce direttamente con lhardware Interagisce direttamente con lhardware Si occupa dellesecuzione.
Il Software.
Gestione Input Output A. Ferrari.
Il Consolidamento di Servizi Virtual Server 2005 PierGiorgio Malusardi Evangelist - IT Professional Microsoft.
Referenti: Prof. Anna Antola Ing. Marco Domenico Santambrogio
Sistemi Operativi Menù: 1) Introduzione al sistema operativo
1 Processi e Thread Meccanismi di IPC, Inter Process Communication (1)
1 Processi e Thread Meccanismi di IPC (1). 2 Comunicazioni fra processi/thread Processi/thread eseguiti concorrentemente hanno bisogno di interagire per.
Introduzione al Calcolo Parallelo
Cluster openMosix Linux Day ’04 Caserta Ing. Diego Bovenzi.
Anno accademico Il preprocessore del linguaggio C.
Fondamenti di Informatica I a.a Il linguaggio C Il preprocessore La sostituzione di macro Le compilazioni condizionali Linclusione di file C.
Introduzione al calcolo parallelo SISTEMI INFORMATIVI AZIENDALI Pierpaolo Guerra Anno accademico 2009/2010.
Il Software: Obiettivi Programmare direttamente la macchina hardware è molto difficile: lutente dovrebbe conoscere lorganizzazione fisica del computer.
Funzioni definite dall’utente
Glossario. AGP Accelerated Graphics Port: architettura di bus che permette alle schede grafiche laccesso diretto al bus di sitema (fino a 100MHz), invece.
GPU: processori manycore Annalisa Massini Calcolo Intensivo a.a. 2010/2011.
Algoritmi Paralleli e Distribuiti a.a. 2008/09
2 Sistema composto da un numero elevato di componenti, in cui ogni componente svolge una sua funzione elaborazione dati memorizzazione dati trasferimento.
Corso di Laurea in Biotecnologie Informatica (Programmazione)
1 Corso di Informatica (Programmazione) Lezione 4 (24 ottobre 2008) Architettura del calcolatore: la macchina di Von Neumann.
Corso di Informatica (Programmazione)
Introduzione DSP. Trestino Cosmo Università degli studi di Padova Capitolo 1, Slide 2 Obiettivi della lezione Perché elaborare i segnali in digitale ?
Struttura dei sistemi operativi (panoramica)
I Thread.
Xscale Nicola Rebagliati 2001s135. Cose Xscale Xscale è una microarchitettura per processori che fornisce ottime prestazioni con bassi consumi energetici.
3. Architettura Vengono descritte le principali componenti hardware di un calcolatore.
2) Sistemi operativi Lab. Calc. AA2004/05 - cap.2.
Sistemi Operativi GESTIONE DEI PROCESSI.
Estensioni allarchitettura di Von Neumann Vito Perrone Corso di Informatica A per Gestionali.
Fondamenti di Informatica1 Software di base Tra il linguaggio macchina (basso livello) e i linguaggi evoluti (alto livello) esiste uno strato di software.
UNIVERSITA’ STUDI DI ROMA “FORO ITALICO”
LEvoluzione dei computer In principio fu Eniac il primo calcolatore ad essere in grado di eseguire trecento moltiplicazioni al secondo. Bisogna aspettare.
Università degli studi di Modena e Reggio Emilia
INTRODUZIONE l sistema operativo è il primo software che lutente utilizza quando accende il computer; 1)Viene caricato nella memoria RAM con loperazione.
Appunti di Informatica
I blocchi fondamentali dell’elaborazione Componenti e funzionamento del calcolatore I blocchi fondamentali dell’elaborazione.
1 Lucidi delle esercitazioni di Sistemi di Elaborazione in Rete Università degli Studi della Calabria Corso di Laurea in Ingegneria Gestionale A.A. 2003/2004.
Threads.
I processi.
Migliorare le prestazioni delle cache
3  Sistema composto da un numero elevato di componenti, in cui ogni componente svolge una sua funzione  elaborazione dati  memorizzazione dati 
Calcolatori Elettronici Il Processore
SCHEDA INFORMATIVA DI UNITÀ. Introduzione Applicazione della gerarchia di memoria –Memoria cache fra la CPU e la memoria centrale Il processore vedrà.
Luglio 2004Generalità Hardware1 Luglio Generalità Hardware2 MACCHINA DI VON NEUMAN (1947) BUS Processore Elaborazione Controllo Memoria Ingresso.
Informatica Lezione 5 Scienze e tecniche psicologiche dello sviluppo e dell'educazione (laurea triennale) Anno accademico:
Gestione del processore (Scheduler)
Corso di Laurea in Informatica Architettura degli elaboratori a.a La macchina programmata Instruction Set Architecture (2) Istruzioni I-type Indirizzamento.
Calcolatori Elettronici Valutazione delle Prestazioni Francesco Lo Presti Rielaborate da Salvatore Tucci.
1 Input/Output. 2 Livelli del sottosistema di I/O Hardware Gestori delle interruzioni Driver dei dispositivi Software di sistema indipendente dal dispositivo.
Sistema operativo Il Sistema Operativo gestisce le risorse hw e sw del sistema di elaborazione Facilita l'interazione tra utente e sistema Esistono diversi.
Hardware Struttura fisica (architettura) del calcolatore formata da parti meccaniche, elettriche, elettroniche.
Tipo Documento: unità didattica 3 Modulo 7 Compilatore: Supervisore: Data emissione: Release: Indice: A.Scheda informativa B.Introduzione C.Corpo D.Riepilogo.
GPU - Graphics Processing Unit Corso di Sistemi Paralleli Luigi La Torre Giugno 2012.
SEMINARI CAMO 2003 LA SIMULAZIONE NUMERICA COMPIE 50 ANNI
I Sistemi Operativi. Definizione Per Sistemi Operativi (di seguito SO) si intendono quei pacchetti software, a loro volta costituiti da più sottoprogrammi.
I Microprocessori Unità 3 del libro Internet Working Sistemi e reti.
Uso Didattico dell'Informatica Storica 07 STORIA DEI MICROPROCESSORI E INTRODUZIONE ALLA VIRTUALIZZAZIONE prof. Cuoghi Giampaolo ITIS “A.Volta” Sassuolo.
Il modello di Von Neumann
CNAF 6 Novembre Layout del testbed  wn a OS SL5.0 8 GB RAM kernel xen_3.1.0 SMP  wn a OS SL5.0 8 GB RAM kernel.
Gestione delle periferiche. Le periferiche sono dispositivi che permettono le operazioni di input/output.
© 2016 Giorgio Porcu - Aggiornamennto 18/03/2016 I STITUTO T ECNICO SECONDO BIENNIO T ECNOLOGIE E P ROGETTAZIONE Il Sistema Operativo Concorrenza e Grafi.
HARDWARE (2). MEMORIE Due classi di memoria MEMORIA CENTRALE –media capacità - ottima velocità MEMORIA DI MASSA elevata capacità - bassa velocità.
© 2016 Giorgio Porcu - Aggiornamennto 31/01/2016 I STITUTO T ECNICO SECONDO BIENNIO T ECNOLOGIE E P ROGETTAZIONE Il Sistema Operativo Thread G IORGIO P.
Hardware Struttura fisica (architettura) del calcolatore formata da parti meccaniche, elettriche, elettroniche.
Breve Storia 3d prima generazione (escludiamo Wolf3d, Doom e Duke3d, che erano una sorta di 2D)  per ogni triangolo che compone una mesh calcoliamo la.
Il Sistema Operativo Processi e Risorse
Transcript della presentazione:

GPU: processori manycore Annalisa Massini Architettura degli elaboratori III A a.a. 2009/2010

Negli ultimi 20 anni i microprocessori basati su una singola CPU hanno avuto un rapido incremento nelle prestazioni e una diminuzione dei costi. Questi microprocessori riescono ad arrivare ad un giga di operazioni in virgola mobile al secondo, GFLOPS, nei computer da tavolo. Gli utilizzatori hanno potuto constatare che l’evoluzione dell’hardware ha aumentato la velocità delle loro applicazioni  lo stesso software va più veloce ogni volta che viene introdotta una nuova generazione di processori.

Questa corsa ha subito un rallentamento a partire dal 2003 perché consumi e problemi di riscaldamento hanno limitato l’incremento della frequenza del clock e delle attività che si possono eseguire in un ciclo di clock all’interno di una singola CPU. I produttori di microprocessori hanno cominciato ad orientarsi verso modelli in cui più unità di processo denominate processing core, sono presenti su un singolo chip, allo scopo di aumentare la potenza di calcolo.

Questo cambiamento ha avuto grande impatto sugli sviluppatori di sw. La stragrande maggioranza di applicazioni sono costituite da programmi sequenziali. Un programma sequenziale gira su un singolo core e non ci si aspetta che nei prossimi anni i core diventino più veloce di quelli in uso oggi. Quello che può veramente cambiare le prestazioni è l’uso di programmi paralleli, in cui più thread di esecuzione cooperano per completare il lavoro più velocemente.

L’uso della programmazione parallela non è nuovo. La comunità per High Performance Computing HPC sviluppa programmi paralleli da decine di anni. I calcolatori utilizzati sono molto grandi e molto costosi. Solo alcune applicazioni giustificano l’utilizzazione di calcolatori così costosi, quindi la pratica della programmazione parallela è ristretta ad un piccolo gruppo di sviluppatori. Adesso che tutti i microprocessori sono calcolatori paralleli si ha la necessità di sviluppare le nuove applicazioni come programmi paralleli.

Dal 2003 l’industria di semiconduttori per la progettazione di microprocessori ha seguito principalmente due linee. La linea di progettazione dei multicore cerca di aumentare la velocità di esecuzione dei programmi sequenziali attraverso l’uso dei diversi core presenti. Nei primi processori multicore erano presenti due core. Il processore Intel Core i7 (novembre 2008) ha 4 core, virtualizzati a 8 grazie alla tecnologia Hyper-Threading che sfrutta la duplicazione di alcune unità interne dei chip (2 hardware hyperthread) per mostrare al sistema operativo il doppio dei core "fisici" presenti nel sistema.

Al contrario la linea di progettazione many-core è volta all’esecuzione di applicazioni parallele. All’inizio i manycore erano dotati di pochi core. Il processore grafico (GPU) nVidia Geforce GTX280 ha 240 core, ognuno con multithread che condivide controllo e cache istruzioni con altri 7 core. I processori many-core, e in particolare le GPU, hanno mostrato un aumento sempre crescente delle prestazioni rispetto al calcolo in virgola mobile.

La grande differenza di performance tra many-core GPU e multicore CPU è dovuta alle diverse filosofie di progettazione dei due tipi di processore. Il progetto di una CPU multicore è ottimizzato rispetto alle prestazioni durante l’esecuzione di codice sequenziale. Si fa uso di una sofisticata logica di controllo per permettere che istruzioni provenienti da un singolo thread di esecuzione vengano eseguite in parallelo o anche in un ordine sequenziale diverso (out-of-order), mantenendo la logica di una esecuzione sequenziale. L’uso di memorie cache grandi e a più livelli riduce la latenza nell’accesso ai dati e alle istruzioni.

Un altro aspetto importante per la valutazione delle prestazioni è la larghezza di banda per l’accesso in memoria. I chip grafici hanno larghezza di banda 10 volte più grande rispetto a quella disponibile sui chip per CPU. La difficoltà nell’aumentare la banda per le CPU è dovuta alle limitazioni poste dai sistemi operativi, dalle applicazioni e dai sistemi di I/O. Al contrario i progettisti di GPU possono raggiungere una maggiore larghezza di banda grazie alle minori limitazioni ereditate (legacy) e a modelli di memoria più semplici.

La filosofia di progetto delle GPU è modellata dall’industria dei videgiochi che preme per ottenere grande velocità per le operazioni in virgola mobile. L’hw è progettato in modo che un numero grande di thread di esecuzione continui a lavorare anche quando alcuni thread sono in attesa di dati dalla memoria, minimizzando la logica di controllo per ogni thread . L’uso di piccole memorie cache permette di evitare che più thread abbiamo bisogno contemporaneamente di dati dalla DRAM. La maggior parte dell’area del chip è dedicata alle operazioni in virgola mobile.

Le GPU sono progettate come motori per il calcolo numerico. CPU e GPU sono adatte ad eseguire compiti diversi e non danno buone prestazioni se utilizzate per compiti diversi da quelli che sanno fare. Molte applicazioni hanno bisogno sia di buone CPU che di GPU, in modo da eseguire le parti sequenziali sulle CPU e parti di calcolo numerico intensivo su GPU. Nel 2007 è stato introdotto da nVidia il modello di programmazione CUDA (Compute Unified Device Architecture) progettato per supportare l’esecuzione di applicazioni congiuntamente su CPU e GPU.

Fino al 2006 per programmare i chip grafici era necessario usare una sorta di funzioni tipo Application Programming Interface (API) grafiche. Questa tecnica è nota come GPGPU (General Purpose programming for Graphic Processing Unit). Il tipo di applicazioni sviluppabili era comunque ridotto anche se si sono ottenuti ottimi risultati. La diffusione però è rimasta molto limitata. L’introduzione di CUDA permette di usare C/C++ senza bisogno di usare interfacce grafiche.

Più recentemente un progetto, a cui hanno partecipato fra gli altri anche Apple, Intel, AMD/ATI e nVidia, ha sviluppato un altro modello di programmazione standardizzata che si chiama OpenCL. Un’applicazione OpenCL può girare senza modifica su tutti i processori che supportano OpenCL. Essendo nato dopo CUDA, OpenCL è ancora un po’ indietro rispetto ad esso. Le caratteristiche chiave dei due modelli di programmazione presentano molte similarità.

Un aspetto importante che ha reso le GPU più interessanti è stata l’adozione dello standard IEEE per la rappresentazione in virgola mobile. Questo comporta che i risultati ottenuti su GPU sono comparabilii con quelli prodotti dalle CPU. Il problema principale era l’uso della singola precisione, poiché le applicazioni che hanno bisogno della doppia precisione non potevano girare su GPU. Dal 2008 non è più così: GPU attuali (Geforce G280 e Tesla) adottano la doppia precisione.

Architettura di una GPU Ecco come può essere organizzata una GPU: Array di Streaming Multiprocessor (SM) 2 SM in ogni building block  il numero di SM in un blocco può cambiare da una generazione all’altra Load/store Global Memory Thread Execution Manager Input Assembler Host Texture Parallel Data Cache

Architettura di una GPU In un SM ci sono un certo numero di Streaming Processor (SP) che condividono la logica di controllo e la cache istruzioni. Load/store Global Memory Thread Execution Manager Input Assembler Host Texture Parallel Data Cache

Architettura di una GPU Si può avere una memoria DRAM grafica Double Data Rate (GDDR) di dimensioni fino a 4 Gigabyte La GDDR DRAM differisce dalla DRAM di sistema (scheda madre), ed è usata principalmente per la grafica. Nel caso di calcolo, questa memoria presenta una very-high-bandwidth che compensa la maggiore latenza. Load/store Global Memory Thread Execution Manager Input Assembler Host Texture Parallel Data Cache

Architettura di una GPU La G80 ha 128 SP (16 SM, ognuno con 16 SP) Ogni SP ha un’unità multiply-add (MAD) e un’unità multiply aggiuntiva. In totale si producono 500 gigaflops. Load/store Global Memory Thread Execution Manager Input Assembler Host Texture Parallel Data Cache

Architettura di una GPU Le CPU della Intel supportano 2 o 4 threads. Il chip G80 supporta fino a 768 thread per SM, cioè 12.000 thread in totale Il chip GT200 con i suoi 240 SP supporta quasi 30.000 thread. Load/store Global Memory Thread Execution Manager Input Assembler Host Texture Parallel Data Cache

Data Parallelism In molte applicazioni, alcune sezioni di programmi presentano dati con alto parallelismo, proprietà che permette di usare strutture dati su cui eseguire operazioni aritmetiche in modo simultaneo. Consideriamo il semplice esempio del prodotto matrice-matrice: P=MxN Ogni elemento della matrice prodotto P viene generato eseguendo il prodotto tra una riga della matrice M e una colonna della matrice N Il calcolo di un elemento non influisce sul calcolo degli altri elementi. Il calcolo di elementi diversi di P può essere fatto contemporaneamente.

Una GPU può accelerare notevolmente questo calcolo. In una matrice 1000x1000 si devono calcolare 1.000.000 di elementi tra loro indipendenti ognuno dei quali richiede 1.000 moltiplicazioni e 1.000 addizioni. Una GPU può accelerare notevolmente questo calcolo. Certo il parallelismo di dati non è sempre così semplice come in questo caso! Usando CUDA il programma ottenuto consiste di una o più fasi: le fasi che non hanno parallelismo sono implementate nel codice host ed eseguite sull’host, cioè la CPU le fasi che presentano alto grado di parallelismo sono implementate in codice device ed eseguite sulla GPU.

Un programma CUDA è un sorgente che racchiude sia il codice host che il codice device. Il compilatore C nVidia (nvcc) separa i due codici durante il processo di compilazione. Il codice host è compilato poi con un compilatore C standard e gira come processo sulla CPU. Il codice device è esteso con etichette per le funzioni parallele, dette kernel, e per le strutture dati associate, viene ricompilato con nvcc e eseguito su GPU. I kernel generano tipicamente un grande numero di thread per sfruttare il parallelismo tra i dati.

Nell’esempio della moltiplicazione tra matrici, il calcolo può essere completamente realizzato come kernel e ogni thread viene usato per calcolare un elemento della matrice. Quindi il numero di thread è funzione della dimensione della matrice e nel caso di una matrice 1.000x1.000 verranno generati 1.000.000 di thread. Naturalmente questi thread sono molto più leggeri dei thread CPU e richiedono pochissimi cicli per essere generati e schedulati.

L’esecuzione di un tipico programma CUDA: comincia con l’esecuzione dell’host (CPU) quando viene invocata una funzione kernel, l’esecuzione si sposta nel device (GPU) dove viene generato un grande numero di thread allo scopo di sfruttare il parallelismo dei dati tutti i thread generati da un kernel sono collettivamente chiamati grid quando tutti i thread di un kernel sono completati, la corrispondente grid termina e l’esecuzione continua sull’host fino a quando viene lanciato un altro kernel.

Per CUDA host e device hanno spazi di memoria separati infatti tipicamente il device sta su una scheda hw separata e ha una sua DRAM. Per eseguire il kernel su device, il programmatore deve: allocare memoria sul device trasferire dati dalla memoria dell’host alla memoria allocata nel device Analogamente, dopo l’esecuzione il programmatore: deve trasferire i risultati nella memoria dell’host liberare la memoria del device che non utilizza più Il sistema runtime di CUDA fornisce delle API che permettono di eseguire queste attività.

G80 Implementation of CUDA Memories Per le comunicazioni tra host e device si hanno le memorie globale e constant. Il codice host può: trasferire dati al/dal device (frecce bidirezionali) Il codice device può: R/W per-thread registers R/W per-thread local memory R/W per-block shared memory R/W per-grid global memory Read-only per-grid constant memory Grid Global Memory Block (0, 0) Shared Memory Thread (0, 0) Registers Thread (1, 0) Block (1, 0) Host Constant Memory Global, constant, and texture memory spaces are persistent across kernels called by the same application. 26 © David Kirk/NVIDIA and Wen-mei W. Hwu, 2007-2009 ECE498AL, University of Illinois, Urbana Champaign 26

CUDA Memory Model Overview Global memory Main means of communicating R/W Data between host and device Contents visible to all threads Long latency access Grid Block (0, 0)‏ Block (1, 0)‏ Shared Memory Shared Memory Registers Registers Registers Registers Thread (0, 0)‏ Thread (1, 0)‏ Thread (0, 0)‏ Thread (1, 0)‏ Host Global Memory © David Kirk/NVIDIA and Wen-mei W. Hwu, 2007-2009 ECE 498AL Spring 2010, University of Illinois, Urbana-Champaign 27 27

A Common Programming Strategy Global memory resides in device memory (DRAM) - much slower access than shared memory So, a profitable way of performing computation on the device is to tile data to take advantage of fast shared memory: Partition data into subsets that fit into shared memory Handle each data subset with one thread block by: Loading the subset from global memory to shared memory, using multiple threads to exploit memory-level parallelism Performing the computation on the subset from shared memory; each thread can efficiently multi-pass over any data element Copying results from shared memory to global memory 28 © David Kirk/NVIDIA and Wen-mei W. Hwu, 2007-2009 ECE498AL, University of Illinois, Urbana Champaign

A Common Programming Strategy (Cont.) Constant memory also resides in device memory (DRAM) - much slower access than shared memory But… cached! Highly efficient access for read-only data Carefully divide data according to access patterns R/Only  constant memory (very fast if in cache) R/W shared within Block  shared memory (very fast) R/W within each thread  registers (very fast) R/W inputs/results  global memory (very slow) 29 © David Kirk/NVIDIA and Wen-mei W. Hwu, 2007-2009 ECE498AL, University of Illinois, Urbana Champaign