CUDA & OpenMP parallel programming.

Slides:



Advertisements
Presentazioni simili
Puntatori Linguaggio C.
Advertisements

Corso di Fondamenti di Programmazione canale E-O
INFORMATICA Altre Istruzioni di I/O
BCX (user guide: cineca
1 Automazione dellalgoritmo ricorsivo di permutazione eseguita da Mariano Melchiorri.
Esercitazioni If nidificati
Uso avanzato di C.
Introduzione al linguaggio C
Stringhe di caratteri In linguaggio C.
Programmazione concorrente
Generazione di numeri casuali in Dev C++
Sviluppo di programmi strutturati
Programmazione Ingegneria TLC
Le funzioni.
Puntatori e Heap in C Prof.Ing.S.Cavalieri.
SC che operano su file (1)
La ricorsione Simulazione. Il Main /* Programma che usa una funzione ricorsiva*/ #include #define MAX_N 8 main() int valore, dato; printf(Introduci n:
ESERCITAZIONE N. 5 ESERCIZIO N. 1 Autore: Biagio Brattoli S I Corso.
Argomenti dalla linea dei comandi Gli argomenti possono essere passati a qualsiasi funzione di un programma, compresa la main(), direttamente dalla linea.
PROGRAMMI DI RICERCA E ORDINAMENTO
Esempio: Tombola! Parte seconda.
Costruzione di Interfacce Lezione 6 Esercitazione Trasformazioni
Costruzione di Interfacce Lezione 10 Dal Java al C++ parte 1
Laboratorio di Linguaggi note sull'uso dell' IDE DevC++ Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese.
Costruzione di Interfacce Lezione 20 Qt + Opengl
1 Costruzione di Interfacce Primi passi in OpenGL
JAVA C import java.util.*; #include <stdio.h>
Threads: Sistemi Operativi I Corso di Laurea in Ingegneria Informatica
1 Esercitazione sui segnali Problema: creare un programma analizzatore di file testuali che prenda come argomenti il nome di un file e una sequenza di.
Programming with JXTA Hello World Peer discovery Peer Group discovery Creating Peer group Joining a Peer Group.
I Thread.
Interazione utente-programma
Esercizio: Copiare un file in un nuovo file mediante le funzioni read e write.
Sistemi Operativi GESTIONE DEI PROCESSI.
A.A. 2010/2011Ambienti di Programmazione per il Software di Base1 (Es. – 6) Ambienti di Programmazione per il Software di Base Le Stringhe in C Input.
Strutture di controllo nel C
Esercizi FUNZIONI Passaggio di parametri per valore, variabili e tipi locali e globali, prototipo.
Politecnico di Milano Esercizi Stringhe Ricerca binaria.
Politecnico di Milano Esercizi Preparazione alla prima prova intermedia.
Le liste dinamiche La ricorsione
Le funzioni.
Crivello Di Eratostene (fonte wikipedia
In molti casi è utile assegnare a degli identificatori dei valori che restino costanti durante tutto il programma e che non possano essere cambiati nemmeno.
void binario(int n); …………………
Creazione progetto in C++/DEV
Programmazione concorrente
Esercizi su File.
Appunti di Java (J2SDK 1.4.2, JDK 1.6.0) prof. Antonella Schiavon settembre 2009.
Introduzione al linguaggio C. Cos’e’ il C? Il C e’ un linguaggio ad alto livello Un compilatore C prende in input un file contenente codice sorgente C.
Ricerca sequenziale in un array di interi
Corso di Programmazione Grafica e Laboratorio Daniele Marini
Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni – BCOR Ingegneria Elettronica – BELR Introduzione al C Esercitazione 5 D. Bloisi, A.
Complessità ciclomatica
T. MottaGenerazione e terminazione processi1 Creazione e terminazione dei processi Tommaso Motta
#include void main() { int a,b,c,; float s, x,x1,x2,delta,alfa,beta; int num[3]; int i; printf("La forma classica dell'equazione di 2° grado è: a*x^2+b*x+c=0\n.
Informatica B Allievi Elettrici - AA Fondamenti della programmazione in linguaggio C (II) Istruzioni e strutture di controllo.
Definizione di algoritmo: Un algoritmo è un procedimento che risolve un determinato problema attraverso un numero finito di passi. Un problema risolvibile.
Capitolo 12 Thread Lucidi relativi al volume: Java – Guida alla programmazione James Cohoon, Jack Davidson Copyright © The McGraw-Hill Companies.
CORSO DI PROGRAMMAZIONE II
Gestione dei thread in Java
Ingegneria del software Modulo 1 - Introduzione al processo software Unità didattica 5 -Test e verifica Ernesto Damiani Università degli Studi di Milano.
Capitolo 14 Diapositiva 1 Linguaggio C – Guida alla programmazione 2/ed – A. Bellini, A. Guidi Copyright © The McGraw-Hill Companies srl Archiviare.
Introduzione al linguaggio C
TITOLO PRESENTAZIONE sottotitolo Autore/i Indirizzo
APPUNTI SUL LINGUAGGIO C Simulazione Prima Prova Intermedia
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Transcript della presentazione:

CUDA & OpenMP parallel programming

GPU vs CPU

Multiprocessor CPU

CPU POSIX Threads OpenMP

CPU POSIX Threads OpenMP

CPU POSIX Threads MPI OpenMP

CPU MapReduce POSIX Threads MPI OpenMP

GPU CUDA

GPU CUDA

GPU Vs CPU

GPU Vs CPU

Che cosè un processo?

fock()

Multi-threading

POSIX Threads, or Pthreads, is a POSIX standard for threads. The standard, POSIX.1c, Threads extensions, defines an API for creating and manipulating threads. #include <pthread.h> #include <stdio.h> #include <stdlib.h> #define NUM_THREADS 5 void *PrintHello(void *threadid) { long tid; tid = (long)threadid; printf("Hello World! It's me, thread #%ld!\n", tid); pthread_exit(NULL); } int main (int argc, char *argv[]) pthread_t threads[NUM_THREADS]; int rc; long t; for(t=0; t<NUM_THREADS; t++){ printf("In main: creating thread %ld\n", t); rc = pthread_create(&threads[t], NULL, PrintHello, (void *)t); if (rc){ printf("ERROR; return code from pthread_create() is %d\n", rc); exit(-1);

MPI Message Passing Interface

MPI Message Passing Interface

ESEMPIO

OpenMP Open Multi-Processing

Costrutti OpenMP

Costrutti OpenMP

ESEMPI

CUDA Compute Unified Device Architecture

Processing flow on CUDA

CUDA programming language

CUDA programming language Third party wrappers are also available for Python, Fortran, Java and Matlab

Architettura nelle GPU Nelle GPU sono integrati 512 CUDA Cores, nome scelto da NVIDIA per indicare i propri stream processors. Le GPU vedono i 512 CUDA Cores divisi in blocchi, ciascuno dei quali è indicato come streaming multiprocessor o SM;

Come è fatto un SM? La parte centrale vede la presenza dei 32 CUDA cores: a gruppi di 4 sono associati a due unità di load e store (LD/ST). Mentre 2 di questi gruppi, per un totale di 8 CUDA cores, sono abbinati ad una unità di tipo special function (SFU). A monte troviamo una cache per le istruzioni, seguita da due Warp Scheduler e da due unità per le operazioni di dispatch, collegate al registro dei files capace di gestire un massimo di 32.768 entry a 32bit. Ogni singolo CUDA Core integra al proprio interno un Dispatch Port, una unità per la raccolta degli operanti, una unità in floating point e una per i calcoli interni oltre ad una result queue.

Come è fatto un SM? Per ogni streaming microprocessor troviamo una cache dedicata da 64 Kbytes di capacità, partizionabile come memoria condivisa e come cache L1: i rapporti sono 1:3 oppure 3:1 Ogni SM integra al proprio interno 4 texture units, per un totale quindi di 60 unità di questo tipo presenti all'interno delle schede GeForce GTX 480 Le textures units sono dotate di una propria cache dedicata integrata all'interno dello specifico SM.

A completare la gerarchia della cache segnaliamo anche la presenza di una cache L2 integra alla GPU, di tipo unificato tra i vari SM, in quantitativo di 768 Kbytes. La gerarchia della cache vede quindi ogni thread a gestire in primo livello la cache da 64 Kbytes integrata in ogni SM, divisa in un blocco condiviso e in un secondo blocco di tipo L1 con dimensioni che possono essere pari a 16K/48K oppure 48K/16K.

GeForce GTX 480

Threads Hierarchy

Memory Hierarchy

Heterogeneous Programming

Coalesced Global Memory Access

Coalesced Global Memory Access