Esercitazione 1

Sample: queryDevice

This sample queries the properties of the CUDA devices present in the system via CUDA Runtime API

Header: common.zip

						
					

Prodotto di matrici diagonali a blocchi

Il codice C seguente implementa in modo efficiente il prodotto di matrici diagonali a blocchi ammettendo di conoscere le dimensioni (contenute in un array) dei blocchi componenti la matrice

Sorgenti per la generazione e gestione matrici: rand_mqdb_tools.tar

						
					

Esercitazione 2

Griglia 2D di thread

Stampa degli IDs dei thread e dei blocchi di una griglia 2D che hanno coordinate multiple di un numero fissato, per es. 5

Download: grid2D.cu

						
					

Somma matrici

Somma di due matrici con grid 2D e blocchi 2D

Download: add_matrix.cu

						
					

Esercitazione 3

Prodotto di matrici diagonali a blocchi (mqdb) su GPU

Il seg. codice effettua il prodotto di matrici di tipo mqdb. Sono presenti algoritmi naive e algoritmi efficienti in CPU. E' presente un kernel per il prodotto standard di matrici che non tiene conto della struttura mqdb. Sviluppare un kernel per il prodotto efficiente su GPU e misurarne le prestazioni con nvprof.

Download: common.zip, mqdb.cpp

						
					

Esercitazione 4

Warp divergence

Il sorgente mostra come risolvere il problema della divergenza a livello di warp dato un semplice branch

Download: common.zip, divergence.cu

						  
					  

Parallel reduction

Si mostra l'approccio mediante CUDA al problema della parallel reduction della somma degli elementi di un array

Download: reduce.cu

						
					

Esercitazione 5

Variabili globali statiche

Uso di variabili globali allocate in device global memory

Download: global_vars.cu

						
					

Uso di array di strutture/strutture di array

Organizzazione dei dati in array di strutture/strutture di array per valutazione prestazioni efficienza del trasferimento in memoria globale, applicazione a semplici elaborazioni di immagini RGB

Download: image_AoS.cu, image_SoA.cu

						
					
						
					

Calcolo della matrice trasposta

Analisi di due approcci al calcolo della trasposta che pone problemi colalescenza negli accessi alla memoria globale

Download: transpose.cu

						
					

Esercitazione 6

Matrice trasposta

Uso di shared memory per il calcolo della matrice trasposta e impatto sull'accesso coalescente alla device global memory

Download: transpose_SMEM.cu

						
					

Prodotto matriciale

Uso di shared memory per il calcolo del prodotto tra matrici con basso tasso di accesso alla device global memory

Download: prod_mat_SMEM.cu

						
					

Convoluzione parallela 1D e 2D

Kernel per la convoluzione 1D e 2D che fa uso di shared memory e constant memory per il calcolo del prodotto della maschera con l'intorno dell'elemento

Download: convolution1D_SMEM.cu, convolution2D_SMEM.cu

						
					
						
					

Calcolo della matrice trasposta

Analisi di due approcci al calcolo della trasposta che pone problemi colalescenza negli accessi alla memoria globale

Download: transpose.cu

						
					

Esercitazione 7

Tabulazione di funzione trigonometrica

Semplice esempio di uso di stream multipli per la tabulazione una funzione trigonometrica complessa.

Download: multi_streams.cu

						
					

Calcolo di MQDB data type con stream

Uso di shared memory e stream per il calcolo del prodotto tra matrici del tipo mqdb

Download: kernels_mqdb_stream.cu test_mqdb_stream.cu

						
					

Esercitazione 8

Scan

Funzione somma prefissa (scan) con l'ausilio di memoria shared.

Download: scan.cu

						
					

Bitonic sort

Algoritmo di ordinamento secondo lo schema bitonico con un primo stadio di comparatori per trasformare una sequenza arbitraria in sequenza bitonica e un secondo stadio che la ordina

Download: bitonic_sort.cu

						
					

Esercitazione 9

Cublas

Esempio d'uso della libreria CUDA cublas per il prodotto matriciale.

Download: cublas.cu

						
					

Curand

Esempio d'uso della libreria CUDA curand con applicazione al metodo Monte Carlo

Download: curand.cu

						
					

Cufft

Esempio d'uso della libreria CUDA cufft per il calcolo della trasformata discreta di Fourier

Download: cufft.cu

						
					

Cusparse

Esempio d'uso della libreria CUDA cusparse per il calcolo con matrici sparse

Download: cusparse.cu

						
					

Esercitazione 10

Multi-GPU

Uso di GPU multiple per ripartire task indipendenti di un problema generale.

Download: simpleMultiGPU.cu

						
					

P2P

Esempio di trasferimento dati peer-to-peer tra diverse GPU

Download: simpleP2P_PingPong.cu