Вы находитесь на странице: 1из 55

Diseo de Procesadores y Evaluacin de Configuraciones

Escuela Politcnica Superior Universidad de Crdoba

Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran


David Lpez Fernndez
2 Ingeniera Informtica Curso 10/11

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

PGI Resources: CUDA Fortran Objetivos

Conclusiones y resultados
2
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran

Nvidia CUDA Qu es CUDA?


Concepto que trata de aprovechar las caractersticas y capacidades de cmputo de la GPU, que son:
Mltiples ncleos dirigidos por un gran ancho de banda de memoria. Gran paralelismo. Optimizacin para clculos en coma flotante. Bajo coste. Ingente cantidad de transistores.
Procesamiento de datos. Almacenamiento en cach. Control del flujo.

3
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran

Nvidia CUDA GPU vs CPU


GPU es un procesador especializado en descargar al microprocesador del renderizado 3D de los grficos. GPU
600 800 Mhz Alta especializacin Modelo circulante Optimizadas para clculos en coma flotante Media docena de procesadores de vrtices

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

Nvidia CUDA Conceptos de la arquitectura

5
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran

Nvidia CUDA Conceptos de la arquitectura


Arquitectura hardware y software para la computacin en la GPU.

Computed Unified Device Architecture.


Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran

Nvidia CUDA Conceptos de la arquitectura


Acceso general a la memoria DRAM. Mayor flexibilidad. Cach de datos en paralelo, chip de memoria compartida de alta velocidad.

7
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran

Nvidia CUDA Modelo de programacin


El modelo de computacin vincula el trmino de procesador SIMD con un hilo y cada multiprocesador con un bloque. Estructuras de datos en CPU deben adaptarse a otras ms simples tipo matriz o vector. Todos los procesadores SIMD ejecutan el mismo trozo de cdigo pero con diferentes datos.
8
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran

Nvidia CUDA Modelo de programacin


GPU (device) trabaja como un coprocesador junto con la CPU (host). Una parte de una aplicacin que se ejecuta varias veces, con diferentes datos, puede ser aislada dentro de una funcin que se ejecuta en varios hilos diferentes en la GPU (kernel). CPU y GPU mantienen su propia DRAM
Host memory. Device memory. Se pueden copiar datos de una a otra.
9
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran

Nvidia CUDA Modelo de programacin


Bloque. Conjunto de hilos
Comparten datos. Memoria compartida de rpido acceso. Puntos de sincronizacin en un kernel
Hilos de un bloque se suspenden para esperar al resto

Nmero de hilos limitado.

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

Nvidia CUDA Modelo de programacin


Grid o rejilla
bloques de hilos del mismo tamao y dimensin, que ejecutan un nico kernel. Los hilos que pertenecen a bloques distintos dentro de la misma rejilla, no pueden comunicarse, sincronizarse ni compartir memoria.

block ID, nmero de bloque dentro del grid


Para una rejilla de 2 dimensiones (Dx, Dy), el block ID de un bloque de ndices (x, y) es (x +yDy).

11
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran

Nvidia CUDA Modelo de programacin

12
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran

Nvidia CUDA Interfaz de programacin


Extendida de C. Identificadores de funciones:
__device__
Se ejecuta en GPU. Slo se puede llamar desde GPU.

__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

Nvidia CUDA Interfaz de programacin


Identificadores de variables
__device__
Declara una variable que reside en la GPU. Reside en memoria global. Su tiempo de vida es el de la aplicacin. Es accesible desde todos los hilos dentro de una rejilla y desde la CPU a travs de la runtime library de CUDA.

__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

Nvidia CUDA Interfaz de programacin


Identificadores de variables
__shared__ declara una variable que reside en la memoria compartida de un bloque de hilos.
Su tiempo de vida es el del bloque. Solamente es accesible desde todos los hilos del bloque.

15
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran

Nvidia CUDA Memoria en CUDA


Cada dispositivo CUDA tiene diferentes tipos de memorias:

16
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran

Nvidia CUDA Memoria en CUDA


Cada hilo puede:
Leer/escribir en los registros de hilo. Leer/escribir en la memoria local del hilo. Leer/escribir en la memoria compartida del bloque. Leer/escribir en la memoria global de la rejilla. Leer datos de la memoria constante.

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

Nvidia CUDA Memoria en CUDA


Registros y memorias compartidas:
Acceso muy rpido y paralelo. Cada hilo tiene sus propios registros. Una funcin de kernel usa registros para acceder rpidamente a variables privadas de cada hilo, evitando congestin en memoria global. Cooperacin entre hilos de un mismo bloque es posible gracias a las memorias compartidas.
Declaracin de variables Variables (escalares) Arrays __device__ __shared__ int sharedVar; __device__ int globalVar; __device__ __constant__ int constVar; Memoria Registro Global Global Constante Scope Thread Thread Grid Grid Lifetime Kernel Kernel Kernel Aplicacin Aplicacin

Compartida Block

18
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran

Nvidia en CUDA Memoria en CUDA


Si un kernel declara una variable cuyo mbito es un hilo y es ejecutada por un milln de hilos, se crear un milln de copias de la variable, que cada hilo inicializar y usar su propia copia de la variable. Antes de transferir datos entre CPU y GPU hay que reservar memoria:
cudaMalloc((void**)&puntero, elems(sizeof(float)); cudaFree(puntero);

19
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran

Nvidia en CUDA Memoria en CUDA


cudaMemcpy(d_mem, h_mem, memSize, cudaMemcpyHostToDevice); d_mem variable en memoria global en la GPU donde se copiarn los datos que se transfieren desde la CPU. h_mem variable en el host o CPU cuyo contenido se copiar a la memoria global de la GPU. MemSize tamao de memoria que se transfiere cudaMemcpy(h_mem, d_mem, memSize, cudaMemcpyDeviceToHost); cudaMemcpy(d_mem1, d_mem2, memSize, cudaMemcpyDeviceToDevice);

Copia de la GPU a la GPU

20
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran

Nvidia en CUDA Sincronizacin de hilos

__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

PGI Resources CUDA Fortran

Permite la programacin CUDA directamente en Fortran


http://www.pgroup.com/resources/cudafortran.htm

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

PGI Resources CUDA Fortran


Deviced, shared y constant
!AinstantiatedinGPUmemory real,device::A(M,N) !BisallocatableinGPUmemory real,device,allocatable::B(:,:) ... !AllocateBinGPUmemory allocate(B(size(A,1),size(A,2)),stat=istat) !CopydatafromA(host)toAdev(GPU) Adev=A !CopydatafromAdev(GPU)toA(host) A=Adev
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran

23

PGI Resources API

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

PGI Resources Subrutina kernel

Invocacin del kernel (slo uno a la vez por GPU)


Su cdigo se ejecutar con diferentes datos en varios hilos
callmmul_kernel<<<dimGrid,dimBlock>>>(parmetros) dimBlock=256 if(N/dimBlock==0)then dimGrid=N/dimBlock else dimGrid=N/dimBlock+1 endif callkernel<<<dimGrid,dimBlock>>>(Adev,Bdev,Cdev,N,z,x)
25
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran

PGI Resources Subrutina kernel


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
26
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran

PGI Resources Uso del compilador


Uso del compilador de PGI Resources
$pgfortranfastmatmul.CUF $./a.out

-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

Descripcin de la arquitectura CPU


Intel Core 2 DUO T7500 2 CPU cores 2.20 Ghz L1 64 sets Asociatividad 8 32 Kb L2 4096 sets Asociatividad 16 4096 Mb
29
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran

Descripcin de la arquitectura GPU


Nvidia GeForce 8600M GS 256 Mb

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

16 600 1200 700 512Mb 128-bit GDDR3, GDDR2 298 millones

30
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran

Desarrollo Loop unswitching


N = 3000000
DOi=2,N,1 A(i)=A(i)+z PRINT*,'A[',i,']=',A(i) IF(x<7)THEN B(i)=A(i)*C(i) PRINT*,'x<7:B[',i,']=',B(i) ELSE B(i)=A(i1)*B(i1) PRINT*,'x>=7:B[',i,']=',B(i) ENDIF ENDDO
31
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran

Desarrollo Loop unswitching


Sin aplicarlo en CUDA Invocacin kernel (N=3000000)
dimBlock=256 if(N/dimBlock==0)then dimGrid=N/dimBlock else dimGrid=N/dimBlock+1 endif callkernel<<<dimGrid,dimBlock>>>(Adev,Bdev,Cdev,N,z,x) r=cudathreadsynchronize()

32
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran

Desarrollo Loop unswitching


Sin aplicarlo en CUDA Subrutina kernel

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

Desarrollo Loop unswitching


Aplicacin en CUDA 2 funciones kernel, condicin antes de la llamada
dimBlock=256 if(N/dimBlock==0)then dimGrid=N/dimBlock else dimGrid=N/dimBlock+1 endif if(x<7)then callkernel_a<<<dimGrid,dimBlock>>>(Adev,Bdev,Cdev,N,z) else callkernel_b<<<dimGrid,dimBlock>>>(Adev,Bdev,Cdev,N,z) endif r=cudathreadsynchronize()
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran

34

Desarrollo Loop unswitching


Aplicacin en CUDA Subrutina kernel_a (x<7)
attributes(global)subroutinekernel_a(A,B,C,N,z) real,device::A(N),B(N),C(N) integer,value::N,z integer::i i=(blockidx%x1)*256+threadidx%x if(i<=N)then A(i)=A(i)+z B(i)=A(i)+C(i) endif Endsubroutine
35
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran

Desarrollo Loop unswitching


Aplicacin en CUDA Subrutina kernel_b (x<=7)
attributes(global)subroutinekernel_b(A,B,C,N,z) real,device::A(N),B(N),C(N) integer,value::N,z integer::i i=(blockidx%x1)*256+threadidx%x if(i<=N)then A(i)=A(i)+z B(i)=A(i)C(i) endif Endsubroutine
36
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran

Desarrollo Loop unswitching


Resultados
CUDA>NOLOOPUNSWITCHING Kernel time excluding data xfer: Megaflops excluding data xfer: Total time including data xfer: Megaflops including data xfer: CUDA>LOOPUNSWITCHING Kernel time excluding data xfer: Megaflops excluding data xfer: Total time including data xfer: Megaflops including data xfer:

7.6258183E-03 seconds 3.9340054E+08 0.1741080 seconds 1.7230688E+07

7.5747967E-03 seconds 3.9605037E+08 0.1214762 seconds 2.4696210E+07


37

Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran

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

attributes(global)subroutinekernel(A,N) real,device::A(N) integer,value::N integer::i i=(blockidx%x1)*64+threadidx%x if(i<=N)A(i)=A(i)*3/(32) endsubroutine 40


Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran

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:

4.9114227E-05 seconds 6.1082301E+09 8.4445953E-02 seconds 3552580

5.8197975E-04 seconds 515481856

41
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran

Desarrollo Loop distribution


N = 300000
DOi=1,N AH(i)=AH(i)+c XH(i)=XH(i)*7+XH(i)+AH(i) ENDDO

42
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran

Desarrollo Loop distribution


Sin aplicarlo en CUDA Invocacin kernel (N=300000)
dimBlock=256 if(N/dimBlock==0)then dimGrid=N/dimBlock else dimGrid=N/dimBlock+1 endif callkernel<<<dimGrid,dimBlock>>>(Adev,Xdev,N,c) r=cudathreadsynchronize()

43
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran

Desarrollo Loop distribution


Sin aplicarlo en CUDA Subrutina kernel
attributes(global)subroutinekernel(A,X,N,c) real,device::A(N),X(N) integer,value::N,c integer::i i=(blockidx%x1)*256+threadidx%x if(i<=N)then A(i)=A(i)+c X(i)=X(i)*7+X(i)+A(i) endif endsubroutine

Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran

44

Desarrollo Loop distribution


Aplicacin en CUDA 2 funciones kernel, una para cada bucle (fisin)
dimBlock=256 if(N/dimBlock==0)then dimGrid=N/dimBlock else dimGrid=N/dimBlock+1 endif callkernel_loop1<<<dimGrid,dimBlock>>>(Adev,N,c) callkernel_loop2<<<dimGrid,dimBlock>>>(Adev,Xdev,N,c) r=cudathreadsynchronize()
45
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran

Desarrollo Loop distribution


Aplicacin en CUDA Subrutina kernel_loop1
attributes(global)subroutinekernel_loop1(A,N,c) real,device::A(N) integer,value::N,c integer::i i=(blockidx%x1)*256+threadidx%x if(i<=N)then A(i)=A(i)+c endif endsubroutine
46
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran

Desarrollo Loop distribution


Aplicacin en CUDA Subrutina kernel_loop2
attributes(global)subroutinekernel_loop2(A,X,N,c) real,device::X(N),A(N) integer,value::N,c integer::i i=(blockidx%x1)*256+threadidx%x if(i<=N)then X(i)=X(i)*7+X(i)+A(i) endif endsubroutine
47
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran

Desarrollo Loop distribution


Resultados
CUDA>NOLOOPDISTRIBUTION Kernel time excluding data xfer: Megaflops excluding data xfer: Total time including data xfer: Megaflops including data xfer: CUDA>LOOPDISTRIBUTION Kernel time excluding data xfer: Megaflops excluding data xfer: Total time including data xfer: Megaflops including data xfer:

8.5496902E-04 seconds 3.5089107E+08 9.2410088E-02 seconds 3246410.

9.4509125E-04 seconds 3.1743072E+08 9.3610287E-03 seconds 3.2047866E+07


48

Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran

Desarrollo Otras optimizaciones


Loop unrolling Ya lo realiza CUDA. Loop tiling Generalizacin multidimensional de strip-mining. Ya lo realiza CUDA, no tiene sentido. Optimizaciones en las estructuras de datos En GPU no hay cach como en la CPU, pero hay jerarqua de memoria (memoria constante, compartida, global, y registros) No hay forma? (conocida) de medir fallos de cach en la GPU, porque las libreras PAPI son para CPU.
49
Aplicacin de tcnicas de optimizacin y paralelizacin con NVIDIA CUDA en Fortran

Conclusiones y resultados

Transformacin

No aplicada en HOST Fallos de cach

Aplicada en

HOST

No aplicada en Aplicada en CUDA CUDA

Tiempo de CPU Fallos de cach 2.27661E-02 seg. 680803

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

No aplicada en HOST Fallos de cach

Aplicada en

HOST

No aplicada en Aplicada en CUDA CUDA

Tiempo de CPU Fallos de cach No apl. 19745

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

No aplicada en HOST Fallos de cach

Aplicada en

HOST

No aplicada en Aplicada en CUDA CUDA

Tiempo de CPU Fallos de cach 1.45506E-03 seg. 57699.

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

Вам также может понравиться