Ottimizzazioni 1 Corso di sviluppo Nvidia CUDATM. Davide Barbieri

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

Calcolatori Elettronici

STRUTTURE DEI SISTEMI DI CALCOLO

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

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

Introduzione alla GPGPU Corso di sviluppo Nvidia CUDATM. Davide Barbieri

Architettura CUDA Corso di sviluppo Nvidia CUDATM. Davide Barbieri

Ulteriore Parallelismo Corso di sviluppo Nvidia CUDA TM. Davide Barbieri

C. P. U. MEMORIA CENTRALE

Dispensa di Informatica I.1

Quinto Homework. Indicare il tempo necessario all'esecuzione del programma in caso di avvio e ritiro fuori ordine.

Organizzazione della memoria

La macchina di Von Neumann. Archite(ura di un calcolatore. L unità di elaborazione (CPU) Sequenza di le(ura. Il bus di sistema

Gestione della memoria centrale

Introduzione all Architettura del DBMS

Esame di INFORMATICA

Obiettivi dell Analisi Numerica. Avviso. Risoluzione numerica di un modello. Analisi Numerica e Calcolo Scientifico

Comunicazione tra Computer. Protocolli. Astrazione di Sottosistema di Comunicazione. Modello di un Sottosistema di Comunicazione

Architettura di un calcolatore

Laboratorio di Informatica

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

CPU. Maurizio Palesi

Architettura hardware

Pronto Esecuzione Attesa Terminazione

Sistemi di Numerazione Binaria NB.1

Introduzione alle tecnologie informatiche. Strumenti mentali per il futuro

Processi e Thread. Scheduling (Schedulazione)

I componenti di un Sistema di elaborazione. CPU (central process unit)

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

Architettura dei computer

Lezione 5 Architettura degli elaboratori. Mauro Piccolo piccolo@di.unito.it

Sistemi Operativi. Processi GESTIONE DEI PROCESSI. Concetto di Processo. Scheduling di Processi. Operazioni su Processi. Processi Cooperanti

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

Sistemi Operativi SCHEDULING DELLA CPU

Un sistema operativo è un insieme di programmi che consentono ad un utente di

Informatica - A.A. 2010/11

Progettazione di Basi di Dati

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

Struttura del calcolatore

Informatica. Rappresentazione dei numeri Numerazione binaria

GESTIONE DEI PROCESSI

Laboratorio di Informatica

CLUSTER COKA. Macchine e Risorse

Scheduling. Sistemi Operativi e Distribuiti A.A Bellettini - Maggiorini. Concetti di base

Memoria secondaria. Struttura del disco. Scheduling del disco. Gestione dell unità a disco. Affidabilità dei dischi: RAID

La memoria centrale (RAM)

Architettura di un sistema di calcolo

Corso di Programmazione Concorrente

Esecuzione concorrente di transazioni

Data Base Management System. Strumenti: Formato: Pro: Contro: Software specifico. Proprietario

Schedulazione dinamica. Elettronica dei Calcolatori 1

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

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

Sistemi Operativi. Scheduling della CPU SCHEDULING DELLA CPU. Concetti di Base Criteri di Scheduling Algoritmi di Scheduling

Sistemi Operativi SCHEDULING DELLA CPU. Sistemi Operativi. D. Talia - UNICAL 5.1

Sistemi Operativi. Interfaccia del File System FILE SYSTEM : INTERFACCIA. Concetto di File. Metodi di Accesso. Struttura delle Directory

ARCHITETTURA DI RETE FOLEGNANI ANDREA

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

La Gestione delle risorse Renato Agati

Tecnologia di un Database Server (centralizzato) Gestione del buffer

Materiali per il modulo 1 ECDL. Autore: M. Lanino

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

Approccio stratificato

Strutturazione logica dei dati: i file

Introduzione alla programmazione in C

Domande frequenti su Phoenix FailSafe

Informatica B a.a 2005/06 (Meccanici 4 squadra) PhD. Ing. Michele Folgheraiter

Sistemi Operativi Kernel

Architettura hardware

Corso di Sistemi di Elaborazione delle informazioni

File system II. Sistemi Operativi Lez. 20

Il Sistema Operativo (1)

NOZIONI ELEMENTARI DI HARDWARE E SOFTWARE

Architettura dei calcolatori II parte Memorie

Il memory manager. Gestione della memoria centrale

Sistemi Operativi GESTIONE DELLA MEMORIA SECONDARIA. D. Talia - UNICAL. Sistemi Operativi 11.1

Sistemi Operativi. Memoria Secondaria GESTIONE DELLA MEMORIA SECONDARIA. Struttura del disco. Scheduling del disco. Gestione del disco

DMA Accesso Diretto alla Memoria

Interpreti e compilatori La macchina di Von Neumann

LABORATORIO DI SISTEMI

Sistema operativo: Gestione della memoria

Corso di Calcolatori Elettronici I A.A Il processore Lezione 18

- Algoritmi ed esecutori di algoritmi - ALGORITMI MACCHINA DI VON NEUMANN

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

SISTEMI DI ELABORAZIONE DELLE INFORMAZIONI

Il Sistema Operativo. Introduzione di programmi di utilità. Elementi di Informatica Docente: Giorgio Fumera

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

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

Sistemi Operativi MECCANISMI E POLITICHE DI PROTEZIONE. D. Talia - UNICAL. Sistemi Operativi 13.1

MECCANISMI E POLITICHE DI PROTEZIONE 13.1

Manuale Amministratore Legalmail Enterprise. Manuale ad uso degli Amministratori del Servizio Legalmail Enterprise

Transcript:

Ottimizzazioni 1 Corso di sviluppo Nvidia CUDATM Davide Barbieri

Panoramica Lezione Principali versioni dell'hardware CUDA Tesla Fermi Accesso veloce alla memoria globale Accesso veloce alla memoria condivisa

Ottimizzazioni CUDA Ottimizzazione degli accessi in memoria Ottimizzazione a livello di thread Configurazione del blocco di thread Occupazione dei multiprocessori Ottimizzazione a livello di istruzione Pattern specifici per il tipo di architettura Instruction-Level Parallelism Un kernel non ottimizzato può perdere ordini di grandezza in prestazioni rispetto ad un kernel ottimizzato

Compute Capability Compute Capability: Numero che indica le capacità computazionali di un dispositivo Caratteristiche Architetturali Features come: Numero di core Memoria Cache L1, L2 Standard floating point Primitive di sincronizzazione Major number identifica il tipo di architettura CUDA 1.x Tesla 2.x Fermi 3.x Kepler (?) 4.x Maxwell (?) Al minor number corrisponde il miglioramento incrementale della stessa

Tesla

Tesla Non è il nome ufficiale per le GPU con c.c. 1.* Nome dato alle soluzioni senza uscita video (solo GPGPU) Nelle presentazioni Nvidia, l'architettura viene chiamata così 1.0 1.1 G80 Operazioni atomiche in memoria globale 1.2 Prima versione Operazioni atomiche in memoria condivisa Accesso a memoria globale più flessibile 1.3 GT200 Doppia precisione

C.C. 1.0-1.1 (G80) 8 CUDA core per SM 2 Unità per funzioni speciali Operazioni floating point (solo precisione singola) Operazioni su interi Operazioni 1/x, Sin(x), Sqrt(x),... 8192 registri a 32 bit per SM Divisi tra blocchi di thread schedulati sullo stesso SM 16 KB di memoria condivisa La GPU esegue un solo kernel alla volta

1 Warp Scheduler Seleziona ogni 4 cicli un'istruzione appartenente ad un warp attivo sul multiprocessore Warp attivo = warp appartenente a blocco che ha ottenuto le risorse sullo SM Istruzioni hanno throughput differenti Pronto per essere schedulato Operazioni come ADD, MUL e MAD (MUL + ADD) eseguite sugli 8 core 1 warp (32 thread) : 8 core issue di un warp ogni 4 cicli Operazioni come DIV, SQRT eseguite sui 2 Spec. Func. Units 32 thread : 2 issue di un warp ogni 16 cicli Ogni SM riesce a tenere attivi 24 warp 24 warp = 24*32 = 768 thread

GT200 Regole meno rigide per accessi coalizzati 16384 registri a 32 bit Doppia precisione 1 unità double per SM 1/8 di throughput rispetto a float Ogni SM riesce a tenere attivi 32 warp

Tesla Il modello floating-point è simile a IEEE754 Non supporta i numeri denormalizzati e.g. (-1)s 0.[MANTISSA] 2-126 Alcune differenze Vengono approssimati a 0 Non sono supporta le eccezioni Spesso potrete notare differenze tra i risultati CPU e GPU La CPU x86 può utilizzare come buffer intermedi registri a 32, 64 e 80 bit FPU control word: registro a 16 bit per configurare l'fpu fstcw / fldcw 80 bit 32 bit Troncamento avviene solo alla fine di una serie di operazioni Le estensioni x86 SSE funzionano diversamente

Fermi

Fermi Compute Capability 2.0 GF100 Compute Capability 2.1 GF104

GF100 32 core per SM Divisi in due metà da 16 core 32768 registri a 32 bit 4 special function unit 16 unità load/store Cache L1 / Memoria condivisa configurabili per SM 16 KB Cache L1 e 48 KB Memoria Condivisa 48 KB Cache L1 e 16 KB Memoria Condivisa Ogni SM riesce a tenere attivi 48 warp

Cache L2 768 KB Una per GPU Indirizzi a 64-bit Ram in modalità ECC (Error-Correcting Code) 1 errore Errore corretto 2 errori Errore rilevato e segnalato

Gerarchia di Cache Cache L1 per SM Cache L2 condivisa Fino a 48 KB 768 KB Le cache funzionano a linee di 128 Byte La cache L1 può essere disabilitata Si cambia modalità di accesso: blocchi di 32B anziché 128B La differenza è che si risparmia l'overfetch in caso di accessi scattered (distanti fra loro)

Più kernel eseguiti in concorrenza Fino a 16 La bassa efficienza di un kernel può essere coperta da altri kernel

GF100 2 warp scheduler Un'istruzione di un warp schedulata su 16 core in 2 cicli Il primo scheduler si occupa dei warp con id dispari, l'altro i warp con id pari Se l'istruzione è a doppia precisione, è attivo un solo warp scheduler alla volta

Standard IEEE754-2008 Supporta i denormalizzati FMA (Fused Multiply-Add) al posto della MAD

GF104 48 core per SM 8 special function unit 2 Warp scheduler dual-issue Due istruzioni indipendenti per Warp

Dual issue Ogni warp scheduler identifica 2 istruzioni indipendenti dello stesso warp Le schedula sulle unità disponibili Nello stesso ciclo di clock può avviare 4 istruzioni

Ottimizzare gli Accessi alla memoria

Memoria Globale (Tesla) Le richieste di load/store vengono divise in 2 richieste indipendenti Si parla di mezzo warp L'accesso dei primi 16 thread non influenza quello dei secondi 16 Ogni mezzo warp deve seguire delle regole precise per ottenere la massima efficienza negli accessi Quando gli accessi seguono queste regole si dicono coalizzati o coalescenti (coalesced) Garantire accessi coalizzati è una delle priorità maggiori nell'ottimizzazione di un kernel Vedremo pattern di accesso più tardi

Accessi Coalizzati (c.c.1.0-1.1) Regole molto rigide Ogni thread può accedere ad una parola di: 4 Byte 8 Byte Le 16 parole devono stare in un segmento da 128 Byte 16 Byte Le 16 parole devono stare in un segmento da 64 Byte Prime 8 parole in un segmento da 128 Byte, Seconde 8 nel segmento da 128 Byte successivo Perché non 256B? (perché l'allineamento è a 128B non a 256B) Il k-esimo thread deve accedere alla k-esima parola Se una di queste regole non è rispettata 16 transazioni da 32 Byte

Accessi Coalizzati (c.c.1.2-1.3) Per questa serie di GPU, regole meno stringenti È possibile leggere anche parole da 1 o 2 Byte Niente limitazione su ordine accessi È sufficiente che i 16 thread accedano lo stesso segmento di 32 Byte, 64 Byte o 128 Byte L'hardware automaticamente trova il segmento più piccolo che li contiene Se la regola non è rispettata: Una transazione per ogni segmento da 128 Byte acceduto Grandezza di ogni transazione ridotta a 32B o 64B se copre tutte le parole

Accessi Memoria Globale (Fermi) Gli accessi avvengono per linee di cache 128 Byte per linea L'hardware seleziona il numero minimo di linee di cache Le richieste avvengono per warp Non più per mezzo warp

Accessi allineati e sequenziali

Accessi allineati e non sequenziali

Accessi non allineati e sequenziali

Memoria Condivisa Divisa in banchi Tesla 16 banchi da 4 Byte Acceduti in mezzo warp Ogni elemento letto un banco diverso Un accesso della prima metà di un warp non va in conflitto con uno della seconda metà Anche se accedono allo stesso elemento Altrimenti: una transazione in più per ogni conflitto Fermi 32 banchi da 4 Byte Acceduti da un warp intero Le due metà potrebbero avere conflitti Conflitti solo se si accede a Blocchi da 4 Byte differenti dello stesso banco Elementi nello stesso blocco da 4 Byte non causano conflitto

Memoria Condivisa (Tesla) Esempi con nessun conflitto di banco Esempio 1: float shared[32]; x = shared[tid]; Esempio 2: float shared[k*32]; x = shared[k*tid]; k dispari

Memoria Condivisa (Tesla) Esempi conflitti di banco Esempio 1: float shared[64]; x = shared[2*tid]; 2 transazioni Esempio 2: float shared[4]; x = shared[tid/8]; 8 transazioni

Memoria Condivisa (Fermi) Esempio 1: float shared[32]; x = shared[tid]; Esempio 2: float shared[64]; x = shared[2*tid]; 2 transazioni x = shared[(2*tid) % 64] 1 transazione Esempio 3: float shared[96]; x = shared[3*tid];

Memoria Condivisa (Fermi) Esempio 1: Accesso non sequenziale senza conflitti di banco 1 sola transazione Esempio 2: Accesso allo stesso blocco da 128B nessun conflitto Esempio 3: float shared; x = shared; 1 sola transazione float shared[32*32]; x = shared[tid*32]; 32 transazioni

Threads per blocco Scegliete un numero di threads per blocco multiplo del warp (32 thread) Facilita accessi alla memoria efficienti Evita inutili warp sotto-popolati Su Fermi i warp pari vengono gestiti da un warp scheduler, quelli dispari da un altro Scegliete dimensioni multiple di 2*32 = 64 Per un kernel con collo di bottiglia su istruzioni ALU (ovvero che nasconde gli accessi alla memoria) 64 o 128 spesso è la scelta migliore