Академический Документы
Профессиональный Документы
Культура Документы
Indice
Nvidia CUDA
Qu es CUDA? GPU vs CPU Conceptos de la arquitectura Modelo de programacin Memoria en CUDA Sincronizacin
Arquitectura
CPU GPU
Aplicacin de optimizaciones
Loop unswitching Strip-mining Loop distribution
Conclusiones y resultados
2
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran
3
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran
CPU
3.8 4 Ghz Propsito general Von Neumann ...
...
Paralelismo inherente en aplicaciones grficas, al ser sus unidades de cmputo pxeles y vrtices.
4
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran
5
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran
7
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran
Hilo
thread ID, nmero de hilo dentro del bloque. Para un bloque de dos dimensiones (Dx, Dy) el thread ID de un hilo de ndice (x, y) es (x+yDx) y para un bloque de tres dimensiones (Dx, Dy, Dz), el thread ID de un hilo de ndice (x, y, z) es (x + yDx + zDxDy).
10
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran
11
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran
12
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran
__global__ (kernel)
Se ejecuta en GPU. Slo se puede llamar desde CPU.
__host__
Se ejecuta en CPU. Slo se puede llamar desde CPU.
13
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran
__constant__
Declara una variable que reside en memoria constante. Su tiempo de vida es el de la aplicacin. Accesible desde todos los hilos dentro de una rejilla y desde la CPU a travs de la runtime library.
14
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran
15
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran
16
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran
La CPU slo puede leer o escribir en las memorias global y contantes por medio de la API CUDA.
Tiempo de acceso alto / Ancho de banda limitado
La memoria constante slo permite acceso para lectura por parte de la GPU y esta provista de un acceso a sus datos mucho ms rpido que la memoria global.
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran
17
Compartida Block
18
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran
19
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran
20
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran
__syncthreads();
Un hilo esperar en el punto de la funcin kernel donde se haya realizado la llamada a que todos los hilos finalicen.
cudaThreadSynchronize();
Similar a la anterior pero controlando la sincronizacin con la CPU.
21
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran
Extensiones
Declaracin de variables que residen en la memoria de la GPU. Asignacin dinmica de datos en la memoria de la GPU. Copiar datos desde la memoria del host a la memoria de la GPU, y al revs. Invocacin de subrutinas GPU desde el host.
22
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran
23
Usando la API
usecudafor real,allocatable,device::a(:) real::b(10),b2(2),c(10) ... istat=cudaMalloc(a,10) istat=cudaMemcpy(a,b,10) istat=cudaMemcpy(a(2),b2,2) istat=cudaMemcpy(c,a,10) istat=cudaFree(a)
24
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran
-Mcuda enlaza ficheros objeto. -g -Mcuda emula el programa CUDA en el Host. -fast incluye f-expensive-optimizations O2 y O3
27
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran
Objetivos
Implementar en Fortran optimizaciones para aumento de localidad Loop unswitching Loop interchange Strip-mining Loop tiling Loop distribution Estudiar las caractersticas de CUDA Optimizaciones sobre esta arquitectura, en Fortran PGI Resources, The Portland Group Comparar resultados
28
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran
Procesadores tipo stream Reloj central (MHz) Reloj de las unidades de sombreado (MHz) Reloj de la memoria (MHz) Cantidad de memoria Interfaz de memoria Tipo de memoria Transistores
30
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran
32
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran
attributes(global)subroutinekernel(A,B,C,N,z,x)
real,device::A(N),B(N),C(N) integer,value::N,z,x integer::i i=(blockidx%x1)*256+threadidx%x if(i<=N.AND.x<7)then A(i)=A(i)+z B(i)=A(i)+C(i) elseif(i<=N.AND.x>=8)then A(i)=A(i)+z B(i)=A(i)C(i) endif Endsubroutine
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran
33
34
Desarrollo Strip-mining
N = 300000
DOi=1,N A(i)=A(i)*3/32 ENDDO
CUDA asocia el concepto de bloque al de multiprocesador. Porcin del bucle -> hilos por bloque.
38
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran
Desarrollo Strip-mining
Aplicacin en CUDA Invocacin kernel (N=300000)
dimBlock=64 if(N/dimBlock==0)then dimGrid=N/dimBlock else dimGrid=N/dimBlock+1 endif callkernel<<<dimGrid,dimBlock>>>(Adev,N) r=cudathreadsynchronize()
39
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran
Desarrollo Strip-mining
Aplicacin en CUDA Subrutina kernel
Desarrollo Strip-mining
Resultados
CUDA>STRIPMINING Kernel time excluding data xfer: Megaflops excluding data xfer: Total time including data xfer: Megaflops including data xfer: HOST>NOSTRIPMINING Host time without strip-mining: Megaflops:
41
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran
42
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran
43
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran
44
Conclusiones y resultados
Transformacin
Aplicada en
HOST
Tiempo de CPU Tiempo de CPU Tiempo de CPU 1.95629E-02 seg. 7.62581E-03 seg. 7.57479E-03 seg.
Loop unswitching
681339
50
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran
Conclusiones y resultados
Transformacin
Aplicada en
HOST
Tiempo de CPU Tiempo de CPU Tiempo de CPU 5.81979E-04 seg. No es posible, 4.91142E-05 seg. CUDA lo realiza inherente.
Strip-mining
No apl.
51
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran
Conclusiones y resultados
Transformacin
Aplicada en
HOST
Tiempo de CPU Tiempo de CPU Tiempo de CPU 2.12907E-03 seg. 8.54969E-04 seg. 9.45091E-04 seg.
Loop distribution
39092
52
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran
Bibliografa
[1] Introduction to CUDA Fortran. PGI insider. Technical News from The Portland Group. http://www.pgroup.com/lit/articles/insider/v1n3a2.htm [2] Nvidia CUDA. Compute Unified Device Architecture. Programming Guide. V2.0. http://developer.download.nvidia.com/compute/cuda/2_0/docs/NVIDIA_CUDA_Programming_Gui de_2.0.pdf 06/07/2008.
[3] Optimizaciones para el aumento de la localidad. Tema 5. Apuntes de la asignatura Diseo de Procesadores y Evaluacin de Computadores. Universidad de Crdoba. [4] Miles Douglas. Part 2: Introduction to CUDA Fortran. GPU Programming with PGI CUDA Fortran and the PGI Accelerator Programming Model. The Portland Group. http://www.developers-source.de/devsource/projects/devsource/media/PGI-CUDA-Tutorial.pdf [5] CUDA Fortran. Programming Guide and Reference. Release 2011. The Portland Group. http://www.pgroup.com/doc/pgicudaforug.pdf
53
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran
Bibliografa
[6] PGI Server , PGI Workstation Installation Guide Release 2011. The Portland Group. http://www.pgroup.com/doc/pgiwsinstall.pdf [7] Ftica, Massimiliano. High Performance Computing with nVidia CUDA. Cuda Toolkit. [8] Scalable Parallel Programming with CUDA, in ACM Queue, VOL 6, No. 2 (March/April 2008), ACM, 2008 [9] Rondan, Andrs. CUDA, Modelo de Programacin. Departamento de Informtica y Sistemas Universidad de Murcia. http://dis.um.es/~domingo/apuntes/AlgProPar/0910/exposicion1/RondanAndres-CUDA.pdf [10] David Kirk/NVIDIA, Wen- mei Hwu. Manual CUDA: Chapter 4 - Memory CUDA. http://courses.ece.illinois.edu/ece498/al/textbook/Chapter4-CudaMemoryModel.pdf.
54
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran
Preguntas
55
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran