Click here to load reader

Iniciación a la Programación de GPU - dis.um.esdis.um.es/~domingo/apuntes/AlgProPar/1011/gpu.pdf · PDF file•Interacción con OpenGL y Direct3D. Modelo de programación CUDA Runtime

  • View
    242

  • Download
    1

Embed Size (px)

Text of Iniciación a la Programación de GPU -...

  • Algoritmos y Programacin Paralela, curso 2010-11

    Iniciacin a la Programacin de GPU

    Domingo Gimnez

    Bsicamente a partir del seminario de Juan Fernndez Peinadoren el curso de Computacin Cientfica en Clusters

    http://www.ditec.um.es/~javiercm/curso_ccc/index.html
  • RecursosLaboratorio de Computacin Cientfica,

    grupo de CCPP Quad Core Luna Tarjeta NVIDIA geforce 9800GT

    112 cores en 14 procesadores de 8 cores Memoria 512 MB Ancho de banda memoria 57.6 MB/s

    *http://www.nvidia.es/page/tesla_gpu_processor.html

    http://www.um.es/pcgumhttp://www.nvidia.es/page/tesla_gpu_processor.htmlhttp://www.nvidia.es/page/tesla_gpu_processor.htmlhttp://www.nvidia.es/page/tesla_gpu_processor.htmlhttp://www.nvidia.es/page/tesla_gpu_processor.htmlhttp://www.nvidia.es/page/tesla_gpu_processor.htmlhttp://www.nvidia.es/page/tesla_gpu_processor.html
  • ContenidosIntroduccinArquitectura hardware y software de CUDAProgramacinOptimizacin y depuracinVarios

  • MotivacinGraphics Processing Units (GPUs)

    Las GPUs liberan a la CPU de realizar tareas concretas de procesamiento grfico de manera repetitiva

    Presentes en cualquier equipo de sobremesa o servidor integradas en placa o como tarjetas externas

    El mercado de los vdeojuegos ha propiciado su consolidacin, evolucin y precios competitivos

    Las GPUs actuales tambin son procesadores multincleo muchos threads capaces de ejecutarse en paralelo

  • Motivacin GPUs ofrecen mayor rendimiento pico que las CPUs

    CPUs diseadas para optimizar la ejecucin de aplicaciones de propsito general Lgica de control de flujo sofisticada Memorias cach multinivel Reducido nmero de ncleos Rendimiento: ~25 Gflops, ms de 10 /Gflop

    GPUs diseadas para optimizar la ejecucin de tareas de procesamiento grfico Lgica de control de flujo simple y memorias cach pequeas Mltiples unidades funcionales para punto flotante Mayor ancho de banda de acceso a memoria Gran nmero de ncleos Rendimiento: ~500 Gflops, menos de 1 /Gflop

  • MotivacinEn la actualidad uso de GPUs para acelerar

    aplicaciones de propsito general: General-Purpose computation on Graphics Processing Units (GPGPU)

    Programacin de GPU mediante APIs grficas (Direct3D, OpenGL)

    Modificacin de la aplicacin para expresarla en funcin de un conjunto de llamadas a la API grfica disponible

    Tarea ardua y compleja que requiere un conocimiento detallado tanto de la arquitectura de la GPU como de la aplicacin

    CUDA proporciona un modelo de programacin independiente de las APIs grficas, ms general y flexible

    Las aplicaciones DEBEN paralelizarse

  • MotivacinGPUs ofrecen mayor rendimiento que las

    CPUs en aplicaciones basadas en CUDA de diversos campos: Multiplicacin de matrices densas: speedup de 9.3x Procesamiento de vdeo (H.264): speedup de

    12.23x Clculo de potencial elctrico: speedup de 64x Resolucin de ecuaciones polinomiales: speedup

    de 205xNo todas las aplicaciones son susceptibles de

    ser paralelizadas con xito en una GPU

  • ObjetivosConocer la tecnologa bsica hardware y

    software que permite la paralelizacin de aplicaciones con CUDA

    Adquirir la habilidad de paralelizar aplicaciones sencillas con CUDA en un entorno real

    Ser capaces de determinar si una aplicacin de propsito general ofrece alguna posibilidad de paralelizacin con xito en CUDA a partir de su especificacin algortmica

  • Introduccin2003: OpenGL, programacin grficaNoviembre 2006: NVIDIA introduce la

    arquitectura unificada (CUDA) con la presentacin de la NVIDIA GeForce 8800.

    GPUs de NVIDIA compatibles con CUDA Modelos: GeForce, Tesla, Quadro Diferencias:

    Interfaz (ancho de banda) y cantidad de memoria # ncleos (# SMs) # registros (8192 o 16384)

    2009: OpenCL, GPGPU para plataformas grficas

    *http://www.nvidia.es/object/cuda_gpus_es.html

    http://www.nvidia.es/object/cuda_gpus_es.htmlhttp://www.nvidia.es/object/cuda_gpus_es.htmlhttp://www.nvidia.es/object/cuda_gpus_es.htmlhttp://www.nvidia.es/object/cuda_gpus_es.htmlhttp://www.nvidia.es/object/cuda_gpus_es.htmlhttp://www.nvidia.es/object/cuda_gpus_es.html
  • IntroduccinCompute Unified Device Architecture (CUDA)

    Arquitectura hardware y software Uso de GPU, construida a partir de la replicacin de un bloque

    constructivo bsico, como acelerador con memoria integrada Estructura jerrquica de threads mapeada sobre el hardware

    Modelo de memoria Gestin de memoria explcita

    Modelo de ejecucin Creacin, planificacin y ejecucin transparente de miles de

    threads de manera concurrente

    Modelo de programacin Extensiones del lenguaje C/C++ junto con CUDA Runtime API

  • ContenidosIntroduccinArquitectura hardware y software de CUDAProgramacinOptimizacin y depuracinVarios

  • Arquitectura hardware y softwareGPU = N x Streaming Multiprocessors (SMs)

    SM = 8 x Streaming Processors (SPs)

  • Arquitectura hardware y softwareLos Procesadores (SPs)

    Realizan operaciones escalares sobre enteros/reales 32 bits

    Ejecutan threads independientes pero todos deberan ejecutar la instruccin leda por la Instruction Unit (IU) en cada instante

    Single Instruction Multiple Thread (SIMT) Explotacin de paralelismo de datos y, en menor medida,

    de tareas

    threads son gestionados por el hardware en cada SM

    Creacin y cambios de contexto con coste despreciable

    Se libera al programador de realizar estas tareas

  • Arquitectura hardware y softwareLas partes del cdigo paralelizadas para

    ejecutarse en la GPU se denominan kernelsUn kernel descompone un problema en un

    conjunto de subproblemas y lo mapea sobre un grid Grid: vector 1D o 2D de thread blocks

    Cada thread block tiene su BID (X,Y) dentro del grid Thread blocks: vector 1D, 2D o 3D de threads

    Cada thread tiene su TID (X,Y,Z) dentro de su thread block

    Los threads utilizan su BID y TID para determinar el trabajo que tienen que hacer (SPMD)

  • Arquitectura hardware y software

  • Arquitectura hardware y softwareEjemplo: clculo de y= x+y, x e y vectores

    void saxpy_serial(int n, float *y, float alpha, float *x){

    for(int i=0; i

  • Modelo de memoriaBanco de registros (register file): 8192 registros

    Repartidos entre todos los thread blocks en ejecucin Tiempo de acceso muy pequeo

    Memoria compartida (shared memory): 16 KB de memoria Repartida entre todos los thread blocks en ejecucin Compartida por todos los threads de cada thread

    block Tiempo de acceso similar a los registros

    Memoria global (global memory): hasta 1.5 GB de memoria compartida por todos los thread blocks Tiempo de acceso elevado (cientos de ciclos)

  • Modelo de memoriaMemoria constante (constant memory): 64 KB de

    memoria con 8 KB de memoria cache Todos los threads de un warp (grupo de 32 threads) pueden

    leer el mismo valor de la memoria constante simultneamente en un ciclo de reloj

    Tiempo de acceso similar a los registros Slo admite operaciones de lectura

    Memoria de texturas (texture memory): Explota localidad espacial con vectores de datos 1D o 2D Tiempo de acceso elevado pero menor que memoria global Slo admite operaciones de lectura

    Memoria local (local memory) Memoria privada de cada thread para la pila y las variables

    locales con propiedades similares a la memoria global

  • Modelo de memoria

  • Modelo de memoriaCPU y GPU espacios de memoria separados

    Utilizar funciones para reservar memoria en la GPU Copiar datos de CPU a GPU Copiar datos de GPU a CPU Liberar memoria de GPU

    Punteros Son direcciones y no se sabe si la direccin

    corresponde a CPU o GPU Si desde CPU se accede a memoria de GPU, o al

    revs, el programa se puede colgar

  • Modelo de ejecucinPrograma CUDA, extensin de C:

    se ejecuta en el host (CPU) al llamar a un kernel se utiliza el device (GPU)

    como coprocesador del host. Similar al modelo OpenMP, CPU y GPU en modo asncrono

    slo se ejecuta un kernel cada vez con mltiples hilos (miles) cada hilo, usando su identificador, trabaja con

    datos distintos sincronizacin entre los hilos al acabar el kernel

    dentro del kernel las funciones se ejecutan en la GPU

  • Modelo de ejecucin Cada thread block de un grid

    se asigna a un nico SM Un SM asigna a cada thread

    block los recursos necesarios (Thread contexts, registros, shm...)

    Cada SM puede gestionar y ejecutar hasta 768 threads

    Comunicacin de todos los threads de un thread block por acceso a memoria compartida

    Sincronizacin de los threads de un thread block con una nica instruccin_syncthreads();

  • Modelo de ejecucinLos threads de distintos thread blocks slo se

    pueden comunicar va memoria global y no se pueden sincronizar La sincronizacin se produce de manera implcita entre la

    ejecucin de un kernel y el siguiente Los thread blocks de un grid deben ser independientes Los resultados deberan ser correctos sin importar el orden

    de ejecucin de los thread blocks del grid Esta restriccin reduce la complejidad del hardware y, sobre

    todo, favorece la escalabilidad pero limita el rango de aplicaciones que pueden paralelizarse

    con xito para ser ejecutadas en una GPU utilizando CUDACada thread block se divide en grupos de 32

    threads denominados warps

  • Modelo de ejecucinCada SM crea, planifica y ejecuta hasta 24 warps

    pertenecientes a uno o ms thread blocks (768 threads)

    Cada warp ejecuta una instruccin en 4 ciclos de relojCuando un warp se bloquea, el SM ejecuta otro warp

    perteneciente al mismo o a otro thread block activo Ocultacin de las largas late