Arquitectura de Computadores II GPU

Transcripción

Arquitectura de Computadores II GPU
Arquitectura de Computadores II
GPU
Adrián Brenes Ureba
Diego García Arriaza
Lidia Lebrón Amaya
Mario Rivas Sánchez
28 de abril de 2010
1
Índice
1. Evolución de las tarjetas grácas
3
2. GPU
6
2.1.
¾Qué es una GPU? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
2.2.
Arquitectura
7
2.3.
Etapas del procesamiento gráco
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3. GPGPU
3.1.
9
Programación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4. GPU vs CPU
11
5.1.
¾Qué es CUDA?
5.2.
Aspectos fundamentales
5.3.
Ventajas e Inconvenientes
5.4.
Ejemplos
5.5.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
12
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
Sincronización . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
6. OPENCL
15
¾Qué es OPENCL? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7. ATI Stream
7.1.
9
9
5. CUDA
6.1.
8
15
16
Productos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8. Aplicaciones que usan GPU
17
17
8.1.
Bazas de un computador basado en GPUs . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
8.2.
BALE: Ejemplo de cluster de GPU actual . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
8.3.
Vídeo y fotografía
18
8.4.
Detección de Cáncer
8.5.
Investigación Nanomolecular
8.6.
Otras aplicaciones portadas a GPU (según Nvidia en 2008)
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
. . . . . . . . . . . . . . . . . . .
18
19
19
1. Evolución de las tarjetas grácas
Desde que comenzó la revolución 3D en el ámbito de los juegos de computadora a mediados de los 90', la
tendencia de la tecnología aplicada a este ámbito ha sido trasladar el trabajo de procesamiento de grácos
tridimensionales, desde la CPU hacia la tarjeta de video.
En primer lugar fue el ltro de las texturas mediante la función de Transformación e Iluminación (Transform
& Lighting) para lo cual se crearon chips especialmente dedicados para realizar esta tarea. Así nacieron las
famosas placas aceleradoras 3D, que incorporaban dichos chips y una cantidad de memoria propia en la
misma tarjeta. Luego, con la salida del GeForce 256 de NVIDIA, el procesador gráco pasó a encargarse de
lo que, hasta ese momento, realizaba la CPU.
El gran cambio se dio a partir de la incorporación de los Píxel shaders y Vertex shaders. Esto permitió a los
programadores una mayor libertad a la hora de diseñar grácos en tres dimensiones, ya que puede tratarse a
cada píxel y cada vértice por separado. De esta manera, los efectos especiales y de iluminación puede crearse
mucho más detalladamente, sucediendo lo mismo con la geometría de los objetos.
Un vertex shader es una función que recibe como parámetro un vértice. Sólo trabaja con un vértice a la vez,
y no puede eliminarlo, sólo transformarlo. Para ello, modica propiedades del mismo para que repercutan en
la geometría del objeto al que pertenece. Con ésto se puede lograr ciertos efectos especícos, como los que
tienen que ver con la deformación en tiempo real de un elemento; por ejemplo, el movimiento de una ola.
En cambio, un píxel shader no interviene en el proceso de la denición del esqueleto de la escena (Wireframe), sino que forma parte de la segunda etapa: la rasterización (Rendering). Allí es donde se aplican las
texturas y se tratan los pixeles que forman parte de ellas. Básicamente, un píxel shader especica el color de un píxel. Este tratamiento individual de los pixeles permite que se realicen cálculos principalmente
relacionados con la iluminación del elemento del cual forman parte en la escena, y en tiempo real.
Los vertex shaders no obligan a que esté presente el hardware necesario para ejecutarlos en el ordenador. Sin
embargo, los píxel shaders requieren de un soporte de hardware compatible.
3
Figura 1: Comparacion con y sin pixel shaders
Cambiando de tema, cuando hablamos de la compatibilidad con DirectX nos referimos al conjunto de instrucciones de shaders incluidas en estas librerías de Microsoft. En realidad, las instrucciones de píxel y vertex
shaders vinieron a partir de DirectX 8 en adelante. Por ello, cuando se dice que una tarjeta de video es
compatible con esta u otra versión posterior de DirectX por hardware, se está especicando que es capaz de
aprovechar las instrucciones de shaders incorporadas en estas librerías. El conjunto de ambas funciones se
conoce como Shader Model x, donde x es la versión de este modelo de referencia (que depende de las versiones
de los propios shaders). El último y más reciente es el Shader Model 5.0, compuesto por píxel shader 5.0 y
vertex shaders 5.0, implementado bajo DirectX 11. Hasta el momento, bajo DirectX 10 con Shader Model 4
hay escasos juegos que aprovecheescasos juegos aprovechan las posibilidades de este modelo, pero los que lo
hacen son espectaculares.
4
Figura 2: Crysis con DirectX 10
El progreso de la lógica en los shaders tiene que ver, principalmente, con cuestiones internas de programación.
Parámetros como la cantidad de registros disponibles, el número de instrucciones permitido por programa y
la incorporación de instrucciones aritméticas más complejas, entre otros, aumentaron la exibilidad a la hora
de programar los shaders. Estos valores son los que diferencian una versión de Shader Model de otra.
En los últimos años, una nueva tendencia se abre paso entre los shaders y el metodo de rasterizado, se trata
del trazado de rayos.
El raytracing o trazado de rayos es un algoritmo para síntesis de imágenes tridimensionales. Propuesto
inicialmente por Turner Whitted en 1980, está basado en el algoritmo de determinación de supercies visibles
de Arthur Appel denominado Ray Casting (1968).
En el algoritmo se determinan las supercies visibles en la escena que se quiere sintetizar trazando rayos desde
el observador (cámara) hasta la escena a través del plano de la imagen. Se calculan las intersecciones del rayo
con los diferentes objetos de la escena y aquella intersección que esté más cerca del observador determina
cuál es el objeto visible.
Según dice Intel en su blog, tiene serias dudas de que el trazado de rayos no vaya a acabar con las GPUs
simplemente porque las CPU, si son muchas, son más ecientes en el trazado de rayos que una sola GPU.
De todas formas el trazado de rayos requiere mucha carga de trabajo, por ejemplo, el Quake IV requiere 8
procesadores para ir a unas imágenes por segundo decentes. De todas formas AMD e Intel han prometido tal
cantidad de núcleos en unos pocos años.
No obstante, si se incrementa el número de GPUs volverían a tomar ventaja.
Sin embargo, esto no tiene mucho sentido, sobre todo si vemos que ya se han portado aplicaciones de trazado
de rayos a GPUs por lo que se unen ambas potencias para realizar imágenes como esta:
5
Figura 3: Ray traced vs Rasterized
2. GPU
2.1. ¾Qué es una GPU?
La unidad de procesamiento gráco o GPU (acrónimo del inglés graphics processing unit) es un procesador
dedicado exclusivamente al procesamiento de grácos, para aligerar la carga de trabajo del procesador central
en aplicaciones como los videojuegos y/o aplicaciones 3D interactivas. De esta forma, mientras gran parte de
lo relacionado con los grácos se procesa en la GPU, la CPU puede dedicarse a otro tipo de cálculos.
Una GPU implementa ciertas operaciones grácas llamadas primitivas optimizadas para el procesamiento
1
gráco. Una de las primitivas más comunes para el procesamiento gráco en 3D es el antialiasing , que
suaviza los bordes de las guras para darles un aspecto más realista. Adicionalmente existen primitivas
para dibujar rectángulos, triángulos, círculos y arcos. Las GPU actualmente disponen de gran cantidad de
primitivas, buscando mayor realismo en los efectos.
1 proceso
que permite minimizar el aliasing cuando se desea representar una señal de alta resolución en un sustrato de más
baja resolución. En la mayoría de los casos, consiste en la eliminación de la información de frecuencia demasiado elevada para
poder ser representada.
6
Figura 4: Proceso Aliasing - Antialising
2.2. Arquitectura
Una GPU está altamente segmentada, lo que indica que posee gran cantidad de unidades funcionales. Estas
unidades funcionales se pueden dividir principalmente en dos: aquéllas que procesan vértices, y aquéllas que
2 y el píxel como las principales unidades que maneja la
procesan píxeles. Por tanto, se establecen el vértice
GPU.
Adicionalmente, y no con menos importancia, se encuentra la memoria. Ésta destaca por su rapidez, y va a
jugar un papel relevante a la hora de almacenar los resultados intermedios de las operaciones y las texturas
que se utilicen.
Inicialmente, a la GPU le llega la información de la CPU en forma de vértices. El primer tratamiento que
reciben estos vértices se realiza en el vertex shader. Aquí se realizan transformaciones como la rotación o
el movimiento de las guras. Tras esto, se dene la parte de estos vértices que se va a ver (clipping), y los
vértices se transforman en píxeles mediante el proceso de rasterización. Estas etapas no poseen una carga
relevante para la GPU.
Donde sí se encuentra el principal cuello de botella del chip gráco es en el siguiente paso: el pixel shader.
Aquí se realizan las transformaciones referentes a los píxeles, tales como la aplicación de texturas. Cuando
se ha realizado todo esto, y antes de almacenar los píxeles en la caché, se aplican algunos efectos como el
antialiasing, blending y el efecto niebla.
Otras unidades funcionales llamadas ROP toman la información guardada en la caché y preparan los píxeles
para su visualización. También pueden encargarse de aplicar algunos efectos. Tras esto, se almacena la salida
en el frame buer. Ahora hay dos opciones: o tomar directamente estos píxeles para su representación en un
monitor digital, o generar una señal analógica a partir de ellos, para monitores analógicos. Si es este último
caso, han de pasar por un DAC, Digital-Analog Converter, para ser nalmente mostrados en pantalla.
2 Punto
donde concurren las dos semirrectas que conforman un ángulo.
7
Figura 5: Arquitectura Procesamiento Gráco
2.3. Etapas del procesamiento gráco
Entrada: Lista de vértices y sus atributos.
1. Procesar vértices (vertex shader).
2. Agrupar en primitivas (primitive assembly).
3. Rotar, trasladar, escalar, iluminar (T & L).
4. Acotar e interpolar (clipping, culling, interpolate).
5. Convertir primitivas a mallas de puntos (rasterizer).
6. Procesar píxeles (pixel shader).
7. Aplicar texturas.
8. Mezclar elementos (blending).
Salida: Memoria de vídeo.
8
3. GPGPU
GPGPU o General-Purpose Computing on Graphics Processing Units es un concepto reciente dentro de
informática que trata de estudiar y aprovechar las capacidades de cómputo de una GPU.
Debido a las diferencias fundamentales entre las arquitecturas de la GPU y la CPU, no cualquier problema
se puede beneciar de una implementación en la GPU. En concreto, el acceso a memoria plantea las mayores
dicultades. En cambio, un procesador de píxeles, o fragmentos, favorece el modelo gather, pudiendo el
programa leer de varias posiciones arbitrarias, pero escribir en sólo una posición predeterminada.
La tarea del diseñador de algoritmos GPGPU consiste principalmente en adaptar los accesos a memoria y
las estructuras de datos a las características de la GPU. Generalmente, la forma de almacenar datos es en
un buer 2D, en lugar de lo que normalmente sería una textura. El acceso a esas estructuras de datos es el
equivalente a una lectura o escritura de una posición en la textura. Puesto que generalmente no se puede leer
y escribir en la misma textura, si esta operación es imprescindible para el desarrollo del algoritmo, éste se
debe dividir en varias pasadas.
Pese a que cualquier algoritmo que es implementable en una CPU lo es también en una GPU (por seguir
ambas el modelo de Von Neumann/Turing), esas implementaciones no serán igual de ecientes en las dos
arquitecturas. En concreto, los algoritmos con un alto grado de paralelismo, sin necesidad de estructuras
de datos complejas, y con una alta intensidad aritmética, son los que mayores benecios obtienen de su
implementación en la GPU.
3.1. Programación
Pese a que tradicionalmente, el desarrollo de software GPGPU se había hecho bien en ensamblador, o bien
3
en alguno de los lenguajes especícos para aplicaciones grácas usando la GPU, como GLSL , Cg
4 o HLSL5
recientemente han surgido herramientas para facilitar el desarrollo de aplicaciones GPGPU, al abstraer muchos de los detalles relacionados con los grácos, y presentar una interfaz de más alto nivel. La herramienta
de mayor éxito por el momento es BrookGPU.
4. GPU vs CPU
Si bien en un computador genérico no es posible reemplazar la CPU por una GPU, hoy en día las GPU son
muy potentesy pueden incluso superar la frecuencia de reloj de una CPU antigua (más de 800MHz). Pero
la potencia de las GPU y su dramático ritmo de desarrollo reciente se deben a dos factores diferentes. El
primer factor es la alta especialización de las GPU, ya que al estar pensadas para desarrollar una sola tarea,
es posible dedicar más silicio en su diseño para llevar a cabo esa tarea más ecientemente. Por ejemplo, las
GPU actuales están optimizadas para cálculo con valores encoma otante, predominantes en los grácos 3D.
Por otro lado, muchas aplicaciones grácas conllevan un alto grado de paralelismo inherente, al ser sus
unidades fundamentalesde cálculo (vértices y píxeles) completamente independientes. Por tanto, es una buena
3 Acrónimo de OpenGL Shading Language. Tecnología que parte del API estandar OpenGL, que permite especicar segmentos
de programas grácos que serán ejecutados sobre el GPU.
4 C for Graphics es un lenguaje de alto nivel desarrollado por Nvidia en colaboración con Microsoft para la programación de
vertex y pixel shaders.
5 El High Level Shader Language (Lenguaje de Sombreador de Alto Nivel) es un lenguaje de sombreado desarrollado por
Microsoft para su uso con la API de Microsoft, Direct3D.
9
estrategia usar la fuerza bruta en las GPU para completar más cálculos en el mismo tiempo. Los modelos
actuales de GPU suelen tener una media docena de procesadoresde vértices (que ejecutan Vertex Shaders),
y hasta dos o tres veces más procesadores de fragmentos o píxeles (que ejecutan PixelShaders (O Fragment
Shaders)). De este modo, una frecuencia de reloj de unos 600-800MHz (el estándar hoy en día en las GPU
de más potencia), muy baja en comparación con lo ofrecido por las CPU (3.8-4 GHz en los modelos más
potentes[no necesariamente más ecientes]), se traduce en una potencia de cálculo mucho mayor gracias a su
arquitectura en paralelo.
Una de las mayores diferencias con la CPU estriba en su arquitectura. A diferencia del procesador central,
que tiene una arquitectura de von Neumann, la GPU se basa en el Modelo Circulante. Este modelo facilita
el procesamiento en paralelo, y la gran segmentación que posee la GPU para sus tareas.
Figura 6: Controlador de memoria por petición
La GPU debe ser vista como un el colaborador de la CPU mucho antes que como su enemigo, pero colocándola en el papel de oponente obtenemos una serie de ventajas nada desdeñables.
En síntesis, podemos decir que el modelo convencional se concentra en el control de las instrucciones, mientras
que el circulante lo hace en el ancho de banda de los datos.
¾Cuál es el talón de Aquiles de la CPU? Sin duda, el acceso a memoria (esta vulnerabilidad trata de cubrirse
con la presencia de cachés, cuyas propiedades benefactoras se explotan gracias al principio de localidad
espacial y temporal que presentan los programas.
10
Aunque algunos operadores grácos presentan una sobrada complejidad matemática, resulta difícil que el
operador que demande nuestro código se encuentre disponible como operador gráco. En caso de no estarlo,
deberemos programarlo en ensamblador utilizando los shaders, y ahí es donde la GPU pierde ventaja con
la CPU, porque necesitaremos de más de un centenar de instrucciones máquina para implementar ciertas
funciones matemáticas que son asiduas a una CPU, y que éste ejecutará con mayor rapidez.
Lo más complicado para la CPU (el acceso a memoria) resultada extremadamente sencillo para la GPU, pero
los papeles se invierten en la parte de la historia que nos queda por contar: El índice de acceso I. Para una
CPU, I es un simple registro acumulador que se va autoincrementando a cada nueva iteración del lazo en el
que se encuentre la referencia, pero la GPU no dispone de semejante infraestructura, porque en su interior
no se preserva ningún estado del paso del vértice precedente: la computación es simétrica para todos ellos.
Esto nos lleva a que para cada valor que tome el índice del lazo debemos generar desde la UC un vértice
que se encargue de la computación correspondiente a esa iteración, y que en este caso llevará en su atributo
coordenada de textura el valor de I para esa iteración.
¾Cómo pueden complementarse CPU y GPU?
Las CPU tienen un modelo de programación que
resulta más familiar a usuarios y programadores, pero las GPU tiene un rendimiento pico superior.
Solución:
La GPU se acerca a la CPU en el plano SW: GPGPU.
Cg de Nvidia (2003).
CUDA de Nvidia (2006).
CAL de AMD/ATI (2008).
La CPU se deja inuenciar por la GPU a nivel HW:
Cell, de Sony-Toshiba-IBM (2006).
Larrabee, de Intel (2009).
Fusion, de AMD (2009).
VÍDEO ILUSTRATIVO COMPARATIVA: http://www.youtube.com/watch?v=fKK933KK6Gg
5. CUDA
Ya no se discute el rendimiento ni la polivalencia del hardware gráco, pero a la GPU aún le quedan dos
asignaturas pendientes:
Precisión de los resultados: Ausencia de oats (FP32)
Facilidad de programación. Excesivo tiempo de desarrollo
Ambos aspectos se resuelven con la llegada de CUDA en la serie 8 de Nvidia (Noviembre de 2006).
11
5.1. ¾Qué es CUDA?
CUDA (Compute Unied Device Architecture) es una arquitectura de cálculo paralelo de NVIDIA que
aprovecha la gran potencia de la GPU (unidad de procesamiento gráco) para proporcionar un incremento
extraordinario del rendimiento del sistema.
Los sistemas informáticos están pasando de realizar el procesamiento central en la CPU a realizar coprocesamiento repartido entre la CPU y la GPU. Para posibilitar este nuevo paradigma computacional, NVIDIA
ha inventado la arquitectura de cálculo paralelo CUDA, que ahora se incluye en las GPUs GeForce, ION,
Quadro y Tesla, lo cual representa una base instalada considerable para los desarrolladores de aplicaciones.
CUDA intenta explotar las ventajas de las GPUs frente a las CPUs de propósito general utilizando el paralelismo que ofrecen sus múltiples núcleos, que permiten el lanzamiento de un altísimo número de hilos
simultáneos. Por ello, si una aplicación está diseñada utilizando numerosos hilos que realizan tareas independientes (que es lo que hacen las GPUs al procesar grácos, su tarea natural), una GPU podrá ofrecer un gran
rendimiento en campos que podrían ir desde la biología computacional a la criptografía por ejemplo.
Figura 7: Nvidia CUDA
5.2. Aspectos fundamentales
CUDA se basa en intentar aprovechar el paralelismo y gran ancho de banda de las GPUs frente a realizar
numerosos accesos a memoria principal. El modelo está diseñado para que se creen aplicaciones escalables en
paralelismo, para poder incrementar el número de núcleos desde los que se ejecuten de forma transparente.
La estructura que se utiliza en este modelo está denido por un grid, dentro del cual hay bloques de hilos
que están formados por como máximo 512 hilos distintos.
Device = GPU
Host = CPU
Kernel = Función llamada desde el Host que se ejecuta en Device
1 CUDA Kernel se ejecuta mediante un array de Threads.
Todos los Threads ejecutan el mismo código.
Cada Thread tiene un ID que se usa para direccionar la memoria y tomar las decisiones de control.
Unidad básica de operación es el Thread.
Los Threads están organizados en bloques de Threads. (Blocks)
Los bloques están organizados en mallas de bloques. (Grids).
12
Un Grid solo puede ejecutar un Kernel.
Los Threads van identicados mediante threadIdx, que es un array de elementos 3D ( tiene 3 componentes,
x, y y z) .
Al igual que los hilos, los bloques se identican mediante blockIdx (en este caso con dos componentes x e y).
Otro parámetro útil es blockDim, para acceder al tamaño de bloque.
Cada Thread puede venir identicado por un índice, es decir, puede tener 1, 2 ó 3 dimensiones, que dependará
de cómo vayamos a explotar el paralelismo y del uso del grid.
El modelo de programación de CUDA asume que los CUDA threads se ejecutan en un device que actúa como
coprocesador de un host que ejecuta un programa, proporcionando instrucciones para reservar, liberar, copiar
memoria en la memoria del device, así como transferir datos entre el host y el device.
Este modelo asume que host y device poseen su propia DRAM, host memory y device memory.
Figura 8: Modelo de programación CUDA
5.3. Ventajas e Inconvenientes
Ventajas
CUDA presenta ciertas ventajas sobre otros tipos de computación sobre GPU utilizando APIs grácas.
Lecturas dispersas: se puede consultar cualquier posición de memoria.
Lecturas más rápidas de y hacia la GPU.
Soporte para enteros y operadores a nivel de bit.
13
Memoria compartida: CUDA pone a disposición del programador un área de memoria de 16KB que se
compartirá entre threads. Dado su tamaño y rapidez puede ser utilizada como caché.
Limitaciones
No se puede utilizar recursividad, punteros a funciones, variables estáticas dentro de funciones o funciones con número de parámetros variable
En precisión simple no soporta números desnormalizados o NaNs
Puede existir un cuello de botella entre la CPU y la GPU por los anchos de banda de los buses y sus
latencias.
5.4. Ejemplos
Para trabajar en parelelo necesitamos crear un kernel. Un kernel en C for CUDA , es una función la cual
al ejecutarse lo hará en N distintos hilos en lugar de en secuencial. Se dene incluyendo __global__ en la
declaración.
Ejemplo 1. Función que realice:
X
(a ∗ x[i] + y[i]).
El código en C para la realización de esta operación
sería:
void saxpy_serial(int n, float a, float *x, float *y){
for (int i = 0; i <n; ++i)
y[i] = a * x[i] + y [i];
}
//Llamada a la función
saxpy_serial(n, 2.0, x, y);
El codigo paralelo en C sería:
__global__ void saxpy_parallel(int n, float a, float x, float y){
int i = blockIdx.x*blockDim.x + threadIdx.x;
if (i < n)
y[i] = a*x[i] + y[i];
}
//Llamada a la función. //Con 256 hilos por bloque
int nblocks = (n + 255) / 256; //Calculo del número de bloques
saxpy_parallel<<<nblocks, 256>>>(n, 2.0, x, y); //llamada con el número
de bloques y los hilos por bloques
14
Ejemplo 2. Cálculo de la diferencia entre dos vectores A y B y lo almacene en un tercero C:
__global__ void f(int* A, int* B, int* C){
int i = threadIdx.x;
C[i] = A[i] - B[i];
}
//Esta función se ejecutaría una vez en cada hilo, reduciendo el tiempo total de ejecución en gran medida, y
dividiendo su complejidad, O(n), por una constante directamente relacionada con el número de procesadores
disponibles.
Ejemplo 3. El mismo ejemplo 2 con matrices sería:
__global__ void f(int** A, int** B, int** C){
int i = threadIdx.x; //Columna del bloque que ocupa este determinado hilo
int j= threadIdx.y; //Fila
C[i][j] = A[i][j] - B[i][j];
}
5.5. Sincronización
El hecho de usar hilos, y que éstos colaboren entre sí, requiere de un mecanismo de sincronización. En un
kernel, se puede explicitar una barrera incluyendo una llamada a __syncthreads(), en la que todos los hilos
se esperarán a que los demás lleguen a ese mismo
6. OPENCL
6.1. ¾Qué es OPENCL?
OpenCL (Open Computing Language, Lenguaje de Computación Abierto) es un entorno de cálculo heterogéneo que se ejecuta sobre la arquitectura CUDA.
Permite que diferentes procesadores, algunos de ellos, con arquitecturas muy diferentes sean capaces de
entenderse.
Gracias a la combinación de OpenCL con la arquitectura NVIDIA CUDA, las aplicaciones pueden usar la
CPU y la GPU a modo de coprocesadores.
® GeForce® 9400M, GeForce 9600M GT, GeForce 8600M GT, GeForce GT
GeForce GTX 285, GeForce 8800 GT, GeForce 8800 GS,NVIDIA® Quadro® FX
Modelos Compatibles: NVIDIA
120, GeForce GT 130,
4800 y Quadro FX 5600 .
Ofrece a los desarrolladores la oportunidad de aprovechar la extraordinaria capacidad de procesamiento
paralelo de las GPUs NVIDIA para crear aplicaciones de cálculo altamente ecientes.
Apple creó la especicación original y la propuso al Grupo Khronos para convertirla en un estándar abierto.
El 16 de junio de 2008 Khronos creó el Compute Working Group para llevar a cabo el proceso de estandarización.
15
Figura 9: Proccesor Paralell
7. ATI Stream
Aunque parece que aún le queda mucho camino por recorrer, AMD/ATi sigue dando muestras de que NVIDIA
no es la única en poner nuestra GPU al servicio de distintos programas que no sean videojuegos.
La tecnología ATI Stream es un conjunto avanzado de tecnologías de hardware y software que permiten que
los procesadores grácos AMD (GPUs), trabajen en conjunto con el procesador central del equipo (CPUs),
para acelerar aplicaciones más allá del procesamiento tradicional de grácos y video. Esto permite que las
plataformas equilibradas ejecuten tareas intensas más ecientemente, proporcionando una mejor experiencia
con aplicaciones para el usuario nal.
16
Figura 10: ATI Stream
7.1. Productos
plug-in Adobe Premiere Pro CS4
AMD ha presentado un plugin para codicar vídeo en Adobe Premier
Pro CS4, la cual permite acelerar los ujos de trabajo con dicho programa.
El plug-in Adobe Premiere Pro CS4 se basa en la potencia de cálculo de la CPU y la GPU, para añadir
hardware orientado a mejorar el rendimiento hasta la rápida potencia de procesamiento de Adobe Premiere
Pro. La tecnología ATI Stream permite que una GPU potente se utilice para algo más que el procesamiento
gráco, consiguiendo así una mayor potencia de computación en general.
Aceleración gráca El driver ATI Catalyst— permite a millones de usuarios de ATI Radeon— y ATI
FirePro— desbloquear las capacidades de aceleración de ATI Stream en sus tarjetas grácas. Tras la descarga
e instalación del último plug-in experimentarán una mejora del rendimiento de codicación de hasta 8X.
8. Aplicaciones que usan GPU
8.1. Bazas de un computador basado en GPUs
Permite alcanzar un rendimiento similar al de los supercomputadores a un coste cien veces inferior.
La función coste/rendimiento es más favorable en arquitecturas basadas en núcleos sencillos como CELL
o GPU que en supercomputadores basados en núcleos fuera-de-orden (como las CPU de Intel/AMD).
Los supercomputadores nunca han sido populares porque no dan benecios y hace falta ser un gurú
para programarlos.
La industria de los video-juegos tiene un ingente mercado que garantiza la viabilidad económica.
Desarrolla una notable infraestructura software en constante evolución: Entornos de programación,
funcionalidad, versatilidad, ... lo que mantiene una gran cantera de programadores que pueden reciclarse
fácilmente hacia tareas de propósito general.
17
8.2. BALE: Ejemplo de cluster de GPU actual
Adquirido en el Ohio Supercomputing Center en Junio de 2007.
Consta de 18 nodos funcionando bajo Linux, cada uno de ellos con:
Dos CPU Opteron dual-core de AMD @ 2.6 GHz.
8 Gbytes de memoria principal.
750 Gbytes de espacio de disco.
Dos GPU Quadro 5600 de Nvidia, cada una con 1.5
Gbytes de memoria de vídeo.
Conexión por Inniband.
Procesador
CPU (AMD)
GPU (Nvidia)
Modelo arquitectural
Opteron X2 2218
G80
Frecuencia de reloj
2.6 GH
600 MHz / 1.35 GHz
Número de Núcleos
2 cores
128 stream processsors
Potencia de Cálculo
2 cores x 4.4 GFLOPS
madd(2 FLOPS) x128 SP x
En el total de 18
318.8 GFLOPS
1.35 GHz = 345.6 GFLOPS
nodos con 2 zócalos
½½ 12.4 TFLOPS !!
.
Memoria
.
CPU (AMD)
GPU (Nvidia)
Capacidad y Tipo
8 Gbytes de DDR2
1.5 Gbytes de DDR3
Frecuencia de Reloj
2 x 333 MHz
2 x 800 MHz
Ancho de Bus
128 bits (doble canal)
384 bits
Ancho de Banda
10.8 Gbytes/seg
76.8 Gbytes/seg
Cuadro 1: Prestaciones CPU GPU
8.3. Vídeo y fotografía
Para convertir una película de 120 minutos, podemos tardar seis o más horas si utilizamos la CPU del sistema.
Badaboom es un programa que convierte formatos de vídeo estándar en formatos reproducibles en el iPod y
otros dispositivos portátiles. Al utilizar el sistema de procesamiento CUDA
— de las GPUs NVIDIA, Badaboom
puede realizar ese proceso hasta 18 veces más rápido, con lo que la conversión se realiza en minutos en lugar de
horas. Además, durante ese tiempo la CPU está libre para realizar otras tareas como leer el correo electrónico
o navegar por la web.
8.4. Detección de Cáncer
Para una media de 600 pacientes que son tratados en el hospital anualmente y 5-6 muestras de imágenes de
alta resolución por cada paciente, la aplicación que funciona con Matlab tarda 21 meses en procesar toda la
información en un PC.
Con una sola GPU, el tiempo se reduce a:
18
5.3 días utilizando Cg.
2.4 días utilizando CUDA.
Utilizando los 16 nodos del cluster de GPUs:
El tiempo computacional es inferior a las 2 horas.
8.5. Investigación Nanomolecular
NAMD (Nanoscale Molecular Dynamics) desarrollado por la Universidad de Illinois en Urbana-Champaign
es un programa de dinámica molecular para simular virus.
—
Gracias a CUDA, el rendimiento de NAMD se ha multiplicado por 12 al acelerar la aplicación con CUDA
en un cluster de GPUs instalado en el Centro Nacional de Aplicaciones de Supercomputación (NCSA), lo
que ha proporcionado un incremento de la velocidad de hasta 330 veces con respecto al uso de la CPU.
8.6. Otras aplicaciones portadas a GPU (según Nvidia en 2008)
3D Image Analysis
Film
Quantum chemistry
Acoustics
Financial
Radar
Adaptive radiation therapy
GIS
Ray tracing
Astronomy
Holographics cinema
Reservoir simulation
Audio
Languages
Robotic surgery
Automobile visionI
Mathematics research
Robotic vision/AI
Bioinformatics
Military
Satellite data analysis
Biological simulation Imaging
Mine planning
Seismic imaging
Broadcast
Molecular dynamics
Surgery simulation
Cellular automata
MRI reconstruction
Surveillance
Computational Fluid Dynamics
Multispectral imaging
Telescope
Computer Vision
Nbody
Ultrasound
Cryptography
Network processing
Video
CT Reconstruction
Neural networks
Video conferencing
Data Mining
Oceanographic research
Visualization
Digital cinema/projections
Optical inspection
Wireless
Electromagnetic interference
Particle physics
X-ray
Equity training
Protein folding
Cuadro 2: Aplicaciones portadas a GPU
19

Documentos relacionados

Primera parte

Primera parte el principio (GPU), en lugar de proceder secuencialmente para luego quedar en manos del paralelismo a nivel de instrucción (CPU). ƒ Datos: Mover el trabajo hacia donde están los datos (GPU), en lug...

Más detalles

Programación en la GPU - Centro de Computación Gráfica

Programación en la GPU - Centro de Computación Gráfica Esmitt Ramírez J. Centro de Computación Gráfica Universidad Central de Venezuela

Más detalles

Arquitecturas basadas en computación gráfica

Arquitecturas basadas en computación gráfica Direct3D es completamente escalable y permite que todo o una parte del pipeline gráfico se pueda acelerar por hardware. Direct3D también expone las capacidades más complejas de las GPU como por eje...

Más detalles