Publicado el 12 de Julio del 2018
708 visualizaciones desde el 12 de Julio del 2018
1,6 MB
17 paginas
Creado hace 9a (20/11/2015)
Arquitecturas GPU
v. 2015
http://en.wikipedia.org/wiki/Graphics_processing_unit
http://en.wikipedia.org/wiki/Stream_processing
http://en.wikipedia.org/wiki/General-purpose_computing_on_graphics_processing_
units
http://www.nvidia.com/object/what-is-gpu-computing.html
https://www.khronos.org/opencl/
http://www.altera.com/literature/wp/wp-01173-opencl.pdf
Arquitecturas GPU
GPU (Unidad de procesamiento gráfico)
Retorno al concepto de COPROCESADOR:
* Uno o varios procesadores con su propio repertorio de instrucciones (o el
mismo) y memoria propia (aunque no siempre) conectado como un dispositivo
de hardware adicionales en el sistema.
* Se accede como cualquier otro dispositivo de I/O (comandos o DMA) a través
de los buses del sistema. Ej. PCI-Express, AGP.
* Para el software es otro núcleo al cual se le envían datos y rutinas para
procesar.
Marcas clásicas, en dispositivos independientes:
- NVIDIA GeForce (juegos), Quadro
(profesionales)
- AMD ATI.
Ahora vienen incoporados en la CPU: APU
- AMD Phenom-II y Fusion
- Intel Ivy-bridge
Arquitecturas GPU
APU (accelerated processing unit)
CPU multinúcleo + GPU + Bus de interconexión + Controlador de memoria
Ivy Bridge processor, based on 22nm technology, packs a 4-core CPU and a 16-EU (or
16 shader cores) GPU HD4000
Arquitecturas GPU
Organización sistema con GPU
http://www.pgroup.com/lit/articles/insider/v1n1a1.ht
m
Arquitecturas GPU
GP-GPU
* Entre los años 1999 y 2000, investigadores del sector informático y de otras disciplinas
empezaron a utilizar las GPU para acelerar diversas aplicaciones de cálculo.
* Este tipo de aplicación recibe el nombre de “General Purpose GPU” (GP-GPU) o GPU de
propósito general.
Sin embargo inicialmente no existían interfaces de programación especialmente
dedicadas a este tipo de aplicación, dificultando el desarrollo
CUDA (Compute Unified Device Architecture) SDK, incluye un compilador con
* 2007
extensiones para C. Aún implica reescritura y reestructuración del programa y el código no es
ejecutable en x86.
OpenCL (Open Computing Language) Plataforma un poco más genérica que
* 2009
CUDA. Para programa algoritmos paralelos en CPU, GPU, DSP, FPGA. Impulsado por
Apple, Intel, Qualcomm, AMD, Nvidia, Altera, Samsung, Vivante, Imagination Technologies
and ARM.
* 2013 OpenACC (Open ACCelerators) Extensiones para código C, C++ y Fortran que
permiten al programador especificarle al compilador como ejecutar el programa en paralelo.
Cray, CAPS, Nvidia, PGI.
Arquitecturas GPU
GP-GPU
* 2010 Primeras GPU exclusivamente para cálculo: NVIDIA Tesla (¿es GPU?)
* 2012 Intel sale a competir en el mercado del cómputo científico. Xeon Phi (¿es GPU?)
Arquitecturas GPU
GP-GPU
resolución del problema se
* La
mediante
expresados en un kernel.
threads
paralelos
realiza
diminutos
los threads en
* El programador agrupa
bloques y los encola para para su ejecución en
la GPU.
* Ya en la GPU, el thread scheduler envía los
bloques a los Streaming Multiprocessors que
estén disponibles.
* Cada SM ejecuta simultáneamente múltiples
bloques haciendo temporal multithreading.
Arquitecturas GPU
NVIDIA CUDA
Arquitecturas GPU
NVIDIA CUDA - SIMT
* El hardware subdivide los bloques en grupos de 32 threads, llamados warps.
* Todos los threads de un mismo warp se ejecutan en lock-step: todos los que están activos
simultáneamente realizan la misma instrucción.
* La metodología es similar a SIMD, ya que existe un único decodificador de instrucción para los
32 threads del warp, pero NO ES SIMD...
* Cada miembro del thread tiene su propio contador de programa. En las bifurcaciones, los
miembros del warp pueden diverger. La característica vectorial es invisible al programador, que
puede no tenerla en cuenta, el hardware se encarga de ocultarla.
* Pero si no la tiene en cuenta SE PAGA FUERTEMENTE EN PERFORMANCE.
* NVIDIA llama a esto SIMT (Single Instruction Multiple Thread).
Arquitecturas GPU
NVIDIA CUDA – Temporal Multithreading
* Cada unidad de cálculo ejecuta las instrucciones en orden y sin predicción de saltos.
* Las latencias de las instrucciones pueden ser de decenas de ciclos de reloj, incluso centenas
si hay accessos a memoria global.
* Para ocultar la latencia cada SM intercala la ejecución de diferentes warps en las
unidades de procesamiento, siempre buscando warps cuyas dependencias estén satisfechas.
* Es responsabilidad del usuario que en todo momento hayan suficientes warps listos
para ser ejecutados, o de lo contrario el SM tendrá que esperar y se pierde throughput.
Arquitecturas GPU
NVIDIA CUDA - Performance
* Generar suficiente trabajo para esconder la latencia de las instrucciones.
* Evitar las bifurcaciones dentro de los warps.
* Limitar el uso de variables DOUBLE a donde sea estrictamente necesario.
* Respetar las limitaciones de la jerarquía de memoria: accesos alineados a memoria
global, evitar las colisiones en memoria compartida, minimizar la cantidad de registros
utilizados para no necesitar memoria local.
* ¡¡¡Dimensionar adecuadamente las unidades de trabajo!!! 440 puede parecer un
número como cualquier otro para la cantidad de threads por bloque, pero ni es múltiplo de la
cantidad de threads por warp (32), ni divide la cantidad de threads que aceptan típicamente
las SM (256, 512, 768, etc.) por lo que las subutilizará.
* Tener en cuenta las características de la GPU que se utilizará: lo óptimo en una GeForce
puede ser nefasto en una Tesla (diferentes capacidades de SMs, arquitecturas de memoria
diferentes, diferentes cantidades de unidades de procesamiento).
Arquitecturas GPU
NVIDIA CUDA – Ejemplo de kernel
Ejemplo de kernel CUDA. El siguiente kernel realiza todo el trabajo en GPU necesario para
hacer la operación
A = α * X * XT + A
Donde α es un escalar, X es un vector de largo n, y A es una matriz triangular superior de n2
elementos. En este programa n2 threads ejecutan sendas copias del código del kernel para
realizar la operación matricial completa.
Arquitecturas GPU
AMD ATI
Similares en su organización interna a NVIDIA
Se programan en OpenCL.
Arquitecturas GPU
Xeon Phi
No arrastran la herencia de GPU. En su lugar arrastran la herencia x86.
Diseñados para cálculo científico.
* 60 cores “simples” basados en P5 (Pentium!).
* Cada core es superescalar, con Hyper-Threading de cuatro vías.
* Set de instrucciones x86, con extensiones x64 y SIMD de 512 bits de ancho.
* Caches coherentes de todos los cores.
* OpenMP, OpenCL. Más cercano a la programación de multicores que a la de GPUs.
Intel Xeon Phi Knight's Landing
Processor (72 cores) Die Map
Arquitecturas GPU
GP-GPU - Prestaciones
- fin -
Comentarios de: Arquitecturas GPU v. 2015 (0)
No hay comentarios