• No results found

3. CASE STUDIES

3.2. Adecco Group

3.2.4. Adecco and Gamification

La primera GPU basada en Fermi, implementada con 3 billones de transistores, ofrece hasta 512 cores CUDA, donde cada uno de estos ejecuta una instrucci´on de punto flotante o entero por ciclo de reloj y por hilo. Los 512 cores CUDA est´an organizados en 16 multiprocesadores paralelos (SMs), que se muestran en la figura 31, de 32 cores cada uno de ellos. La GPU cuenta con seis particiones de memoria de 64-bit, una interfaz de memoria de 384 bits, que soporta hasta un total de 6 GB de memoria DRAM de tipo GDDR5, una interfaz PCI-Express que conecta la GPU con la CPU y utiliza GigaThread y un programador general que distribuye hilos de bloques a los hilos programados del SM.

Figura 31: Los 16 SM de Fermi se posicionan alrededor de una cach´e L2 com´un. Cada SM es una banda vertical rectangular que contiene una porci´on naranja (planificador y env´ıo), una porci´on verde (unidades de ejecuci´on) y porciones azul claro (fichero de registro y cach´e L1)56.

En la arquitectura Fermi, NVIDIA introduce lo que llaman la tercera generaci´on de SMs, con una serie de innovaciones en la arquitectura que no s´olo hacen que sean m´as potentes sino que tambi´en son m´as eficientes y f´aciles de programar.

Cada SM (figura 32) posee 32 procesadores CUDA, un incremento cuatro veces superior con respecto al dise˜no de anteriores SM. Cada uno de estos procesadores posee una unidad aritm´etico-l´ogica (ALU) y una unidad de punto flotante (FPU). Mientras que las GPUs anteriores usaban la aritm´etica de punto flotante IEEE 754-1985, Fermi implementa el nuevo est´andar de punto flotante IEE 754-2008. Otras caracter´ısticas de la nueva arquitectura de los SM son:

Poseen 16 unidades de carga/almacenamiento, permitiendo que las direcciones fuente y destino puedan ser calculadas por hasta 16 hilos en cada ciclo.

Tienen cuatro Unidades de Funci´on Especial (SFUs) que ejecutan instrucciones como sin, cos, o sqrt.

Est´an dise˜nados espec´ıficamente para aritm´etica de doble precisi´on, ofreciendo mejores rendimientos que en tarjetas anteriores [181].

Las GPU Fermi poseen un planificador dual de warp (Dual Warp Scheduler) que permite seleccionar dos warps a los que se les asocia una instrucci´on a cada uno para un grupo de 16 cores, 16 unidades de carga/almacenamiento o 4 SFUs. Como los warps se ejecutan de forma independiente, el planificador no necesita comprobar las dependencias de cada

56

Figura extra´ıda del documento de NVIDIA [181].

Figura 32: Arquitectura de un SM (Streaming Multiprocessor) en Fermi57.

flujo de instrucci´on. De esta forma, se pueden emitir en dual m´as instrucciones, como dos instrucciones con enteros, dos instrucciones en punto flotante o una mezcla de instrucciones de entero, punto flotante, carga, almacenamiento y SFU. Las instrucciones de doble precisi´on no soportan una emisi´on dual con ninguna otra operaci´on. La figura 33 muestra un esquema del planificador dual.

Figura 33: Planificador Dual de Warps (Dual Warp Scheduler)58.

Sin embargo, una de las claves que han hecho que el rendimiento y la programabilidad de aplicaciones en GPU haya mejorado es tener una memoria compartida on-chip. Mientras que en tarjetas anteriores solo exist´ıan 16KB de memoria compartida para cada SM, en arquitecturas Fermi cada SM posee 64KB de memoria on-chip que se pueden configurar y dividir para tener una memoria compartida de 48KB y una cach´e L1 de 16KB o viceversa. La tabla 7 compara tarjetas anteriores con la tecnolog´ıa Fermi.

GPU G80 GT200 Fermi

Transistors 681 millon 1.4 billon 3.0 billon

CUDA Cores 128 240 512

Double Precision Floating Point Capability None 30 FMA ops/clock 246 FMA ops/clock Single Precision Floating Point Capability 128 MAD ops/clock 240 MAD ops/clock 512 MAD ops/clock

Special Function Units (SFUs) / SM 2 2 4

Warp schedulers (per SM) 1 1 2

Shared Memory (per SM) 16KB 16KB Configurable 48KB or 16KB

L1 Cache (per SM) None None Configurable 48KB or 16KB

L2 Cache None None 768KB

ECC Memory Support No No Yes

Concurrent Kernels No No Up to 16

Load/Store Address Width 32-bit 32-bit 64-bit

Tabla 7: Resumen de las distintas caracter´ısticas de las arquitecturas G80, GT200 y Fermi.

Adem´as, la arquitectura Fermi soporta la ejecuci´on concurrente de kernels, es decir, distin- tos kernels de la misma aplicaci´on se pueden ejecutar al mismo tiempo, como muestra la

figura 34. Esto permite a los programas que ejecutan un n´umero peque˜no de kernels uti- lizar la GPU entera. Sin embargo, kernels que pertenecen a aplicaciones distintas pueden seguir ejecut´andose secuencialmente con una buena eficiencia, gracias al mejorado cambio de contexto.

Figura 34: Ejecuci´on de kernels en serie (izquierda) y en paralelo (derecha)59.

Conclusiones:

Durante diecis´eis a˜nos, NVIDIA se ha dedicado a la construcci´on de los procesadores gr´afi- cos m´as r´apidos del mundo. Mientras las tarjetas G80 fueron pioneras en la arquitectura de computaci´on GPU y las GT200 un refinamiento de las anteriores, sus dise˜nos estaban profundamente arraigados en el mundo de los gr´aficos. La aparici´on de la arquitectura Fermi representa una nueva direcci´on para NVIDIA. Lejos de ser simplemente el sucesor de las GT200, Fermi es el resultado de un replanteamiento radical de la funci´on, el prop´osito y la capacidad de las GPUs.

En lugar de tomar la ruta f´acil de a˜nadir unidades de ejecuci´on, el equipo de Fermi ha abordado algunos de los problemas m´as dif´ıciles de la computaci´on GPU. La importancia de la localidad de datos se reconoce a trav´es de los dos niveles de jerarqu´ıa de cach´e y su path de memoria combinada de carga/almacenamiento. El rendimiento en doble precisi´on se eleva a niveles de supercomputaci´on, haciendo que la ejecuci´on de operaciones at´omicas sea hasta veinte veces m´as r´apido. Sin embargo, una nueva revisi´on de la arquitectura de las GPU por parte de NVIDIA ha dado lugar a las arquitecturas Kepler.