ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Introducción A La Programación Paralela Con GPU


Enviado por   •  8 de Junio de 2012  •  2.734 Palabras (11 Páginas)  •  1.064 Visitas

Página 1 de 11

Índice:

1. GPU

2. PARALELISMO

3. GPGPU

4. Introducción a CUDA

5. Aplicaciones

1. GPU

La unidad de procesamiento gráfico o GPU es un procesador de varios núcleos que ofrecen alto rendimiento. Este tipo de procesadores de emplea en el procesamiento de gráficos o en operaciones en como flotante, así mientras la GPU se encarga de procesar gran parte de lo relacionado con los gráficos, el procesador central puede dedicarse a otro tipo de cálculos aliviando la carga de procesamiento de este.

Hoy en día las GPU son muy potentes, pudiendo superar la frecuencia de reloj de una CPU antigua (más de 800Mhz). La potencia de las GPU y su gran aumento de desarrollo se debe a dos factores diferentes. El primer factor es la alta especialización de las GPU, ya que al estar pensadas en desarrollar una sola tarea es posible emplear más silicio en su diseño para poder llevar a cabo esa tarea más eficientemente. Por ejemplo, las GPU están optimizadas en el cálculo en coma flotante predominante en los gráficos 3D. El otro factor a tener en cuenta, es que muchas aplicaciones gráficas emplean un alto grado de paralelismo inherente, siendo una buena razón el uso de la fuerza bruta en las GPU para completar más cálculos en menos tiempo.

Una de las mayores diferencias entre CPU y GPU radica en su arquitectura 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.

2. PARALELISMO

El paralelismo es una forma de computación en la cual varios cálculos pueden realizarse a la vez. Se basa en el principio de dividir los problemas grandes para la obtención de varios más pequeños, que son posteriormente solucionados en paralelo.

Dentro de la taxonomía de Flynn, se puede clasificar a las GPU como SIMD, una instrucción múltiples datos. Esto produce que todos los núcleos ejecutan la misma instrucción al mismo tiempo, solo es necesario decodificar la instrucción una única vez para todos los núcleos. Por ejemplo, esto se usa en el calculo de sumas, cálculos vectoriales, etc.

3. GPGPU

Las siglas GPGPU hacen referencia a GPU de propósito general. GPGPU intenta aprovechar la gran potencia de las GPU para aplicaciones no relacionadas con los gráficos y tradicionalmente ejecutadas por CPU, como son por ejemplo: grandes vectores de datos, paralelismo de grano fino SIMD, baja latencia en operaciones en punto flotante, etc.

Históricamente las GPGPU han sufrido una serie de restricciones como empleo de API’s gráficas complejas, capacidad de los Shader reducida, comunicación limitada entre los pixeles, escaso conjunto de instrucciones como por ejemplo falta de operaciones en enteros.

Las GPGPU han ido evolucionando a lo largo de los años, como a continuación podemos observar:

- Ordenadores sin tarjetas gráficas.

- Aparición de GPU para la representación en pantalla.

- GPU para procesamiento gráfico (Industria del videojuego).

- En el 2004 surge la idea de usar las GPU para computación de alto rendimiento.

- En el 2007 NVIDIA ve la oportunidad de la computación de alto rendimiento y desarrolla CUDA con tal fin.

- Actualmente NVIDIA ha tenido éxito en la computación GPGPU. Los supercomputadores top utilizan clústeres de GPU para aumentar su potencia computacional.

Las GPGPU se han abierto paso en el mercado, a manos de las grandes compañías, que ven como pueden explotarlas para ganar dinero.

La evolución de las tarjetas gráficas ha venido acompañado de un gran crecimiento principalmente en el mundo de los videojuegos y las aplicaciones 3D.

Los principales productores de chips gráficos son:

- NVIDIA

- AMD (ATI)

- IBM (Desarrollo de procesadores CELL)

- Intel (GPU Larrabee)

Comparación entre CPU y GPU

Intel Core 2 /Xeon / i7

- 4-6 núcleos MIMD

- Pocos registros, cache multi-nivel

- 10-30 GB/s ancho de banda hacia la memoria principal.

NVIDIA GTX480

- 512 núcleos, organizados en 16 unidades SM cada una con 32 nucleos.

- Muchos registros, inclusión cachés nivel 1 y 2.

- 5 GB/s ancho de banda hacia el procesador.

- 180 GB/s ancho de banda memoria tarjeta gráfica.

Podemos observar como las GPU respecto a las CPU poseen mayor número de núcleos, más registros con caché de hasta nivel 2, un gran ancho de banda para el acceso a su propia memoria.

Debido a las diferencias fundamentales entre las arquitecturas de la GPU y la CPU, no cualquier problema se puede beneficiar de una implementación en la GPU. En concreto, el acceso a memoria plantea las mayores dificultades. Las CPU están diseñadas para el acceso aleatorio a memoria. Esto favorece la creación de estructuras de datos complejas, con punteros a posiciones arbitrarias en memoria. En cambio, en una GPU, el acceso a memoria está mucho más restringido. Por ejemplo, en un procesador de vértices (la parte de una GPU diseñada para transformar vértice en aplicaciones 3D), se favorece el modelo scatter, en el que el programa lee en una posición predeterminada de la memoria, pero escribe en una o varias posiciones arbitrarias. 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 buffer 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

...

Descargar como (para miembros actualizados)  txt (17.3 Kb)  
Leer 10 páginas más »
Disponible sólo en Clubensayos.com