Kepler a fondo: Explorando sus capacidades en cómputo GPGPU

Kepler a fondo: Explorando sus capacidades en cómputo GPGPU

por

El otro lado de la moneda de los nuevos GPUs Nvidia GK104 y GK107.

El 18 de julio del 2002 el lanzamiento del primer GPU DirectX 9 de la industria, abrió las puertas al nacimiento del cómputo acelerado por GPU (GPGPU) con la posterior introducción del API BrookGPU, API que hizo notar el gran poder de cálculo para aplicaciones matemáticas, de punto flotante y de uso general que eran capaces de ofrecer los GPUs.

Con la introducción de los GPUs DirectX 10 en el 2006 y su nuevo modelo de shaders unificados, los GPUs ganaron mayores capacidades de cómputo, y con ellas llegaron nuevas APIs GPGPU como CUDA y Stream; pero las restricciones de hardware de ellas (CUDA sólo funciona en GPUs NVIDIA y Stream sólo en GPUs AMD) hicieron notar a la industria la necesidad de crear un modelo estándar de programación, el cual se consolido el 18 de noviembre del 2008 con la aparición del API de cómputo paralelo acelerado por GPU OpenCL.

Volviendo al presente, la semana pasada vimos llegar los nuevos GPUs Kepler, los primeros en estar basados en la nueva arquitectura de NVIDIA; sobre la cual tratamos resumidamente todas sus nuevas características enfocadas a ofrecer un buen rendimiento en juegos 3D; pero los GPUs no sirven únicamente para jugar; y en esta ocasión nos enfocaremos en lo que nos ofrece Kepler en el campo del cómputo GPGPU; por lo que lamentablemente aunque trataré de que sea lo más entendible posible, no se podrá evitar que suene algo técnico.

Las variantes y nomenclatura de los GPUs NVIDIA

Desde la introducción de la arquitectura Fermi hace 2 años, NVIDIA cambió su tradicional enfoque de desarrollar un único modelo de GPU para todas sus gamas de productos, desarrollando 2 variantes: una enfocada a ofrecer un gran rendimiento en juegos y cómputo GPGPU (modelos cuyo nombre código termina en “0” como GF110), y otra enfocada a juegos 3D pero con menor potencia en cómputo GPGPU (modelos que terminan en 2, 4, 6, 7, 8 y 9 como por ejemplo GF114).

Esta diferenciación permite a NVIDIA reducir considerablemente el número de transistores de sus GPUs dedicados a juegos, lo que se traduce también en menores costos de producción y chips de menor tamaño; reservando los chips de gran tamaño y más costosos de producir para la gama alta, pues dotar del hardware necesario para darles un buen rendimiento en cómputo GPGPU toma muchos más transistores, lo que eleva la complejidad del chip y su costo de producción.

La arquitectura Fermi

Los GPUs Fermi están basados en unidades de cómputo denominadas Streaming Multiprocessors (SM), las que reúnen varios shader processors (NVIDIA los denomina CUDA cores), pero ello no quiere decir que todos ellos sean iguales, pues están diferenciados en 2 distintos grupos: shaders con capacidades de cómputo de enteros (INT) y punto flotante de 32 bits (FP32), y shaders “especiales” con capacidades de cómputo de enteros y punto flotante de 32 y 64 bits (FP32/64); para realizar una operación a 64 bits se usa el poder de cálculo de un shader FP32 + un shader FP32/64.

Los Streaming Multiprocessors (SM) de los GPUs Fermi de gama alta poseen 2 grupos de 16 shaders cada uno (16 FP32 y 16 FP32/64), lo que totalizan 32 shaders por SM, donde cada SM puede realizar 32 cálculos INT o FP de 32 bits, o 16 cálculos FP64 (no es posible realizar cálculos de 32 y 64 bits simultáneamente); 4 SMs conforman un Graphic Processing Cluster (GPC) y los GPUs Fermi de gama alta poseen un total de 4 GPCs, es decir 16 SMs con 32 shaders cada uno, lo que nos da 512 shader processors.

Por ejemplo GF110 es capaz de ejecutar 512 operaciones simultáneas INT o FP32 por ciclo, o 256 FP64 bits por ciclo; en este punto cabe aclarar que NVIDIA limita artificialmente a sus GPUs GeForce y Quadro a 64 operaciones FP64 por ciclo (la 8º parte de su potencial FP32); sólo los GPUs para cómputo HPC Tesla son capaces de acceder a todo el potencial de 64 bits que ofrece la arquitectura Fermi (quizá NVIDIA recurre a limitar a sus GeForce y Quadro para evitar que compitan contra sus productos Tesla).

Fermi de gama media y baja posee un diseño algo distinto, pues sus SM poseen 3 grupos cada uno con 16 shaders, donde dos grupos pueden realizar cálculos INT o FP32, y el tercer grupo puede realizar operaciones FP32/FP64, es decir cada SM posee un total de 48 shaders, y puede procesar simultáneamente 48 operaciones INT o FP32, o 16 operaciones FP64; por lo que su rendimiento en cómputo GPGPU es considerablemente inferior al de Fermi de gama alta; y las cosas empeoran pues para esta gama NVIDIA limita el poder de cómputo de 64 bits a un 12º de su poder de cálculo FP32.

Pero para los gamers esto no suena mal; pues NVIDIA compensa el menor número de shaders FP64 de sus Fermi con SMs de 48 shaders, duplicando su número de unidades de textura (8 TMUs por SM) en relación con la variante con 32 shaders (4 TMUs por SM), ello beneficia a su rendimiento en juegos. Una concesión que sin duda agradará a los usuarios cuya principal necesidad sean los juegos.

SMs de GF110 (izquierda) y GF114 (derecha), los grupos de shaders FP32 marcados en azul, los shaders FP64 marcados en rojo.

La arquitectura Kepler

Como lo describimos en nuestro artículo sobre la arquitectura Kepler; Kepler está conformado por los nuevos Next Generation Streaming Multiprocessors (SMX), los que aparte de poseer un renovado y simplificado scheduler implementado por software (via controladores gráficos), están conformados por 6 grupos de 32 shaders (192 shaders por SMX); pero aquí empiezan las diferencias en relación a Fermi, pues con Kepler NVIDIA realiza una drástica diferenciación entre sus tipos de shaders. Los 6 grupos de 32 shaders que conforman el SMX, son todos idénticos y todos pueden realizar cálculos de enteros (INT) o punto flotante de 32 bits (FP32).

¿Qué ocurrió con los shaders capaces de ejecutar punto flotante de 64 bits? La respuesta a ello es simple: NVIDIA en Fermi limitaba artificialmente el rendimiento FP64 de sus GPUs GeForce y Quadro a 1/8 en Fermi con SMs de 32 shaders (su potencial real es 1/2 FP32/FP64), y a 1/12 en Fermi con SMs de 48 shaders (potencial real de 1/3 FP32/FP64) dejando únicamente a sus productos Tesla la capacidad de usar todo el potencial FP64 del chip. Pero tenemos que NVIDIA únicamente lanza productos Tesla basados en su gama alta, entonces ¿por qué fabricar GPUs con costoso hardware FP64 si tan sólo se usará la 4º parte de su potencial?

NVIDIA debe haberse hecho muchas veces dicha pregunta, y la solución a ella son nuevas unidades de cálculo dedicadas capaces de ejecutar operaciones de punto flotante de 64 bits (FP64), las que a diferencia de los shaders FP32/64 compartidos de Fermi, únicamente realizan operaciones de punto flotante de 64 bits, pero que al parecer no son capaces de realizar operaciones de enteros, motivo por el que NVIDIA no las incluye en los esquemas de sus GPUs.

Con estas nuevas unidades FP64 dedicadas NVIDIA simplifica la programación de sus GPUs, a la vez que evita el dejar muchos transistores sin uso (como en Fermi), ganando en tamaño de DIE y en flexibilidad; pues al igual que con Fermi, NVIDIA desarrollará 2 variantes de su arquitectura Kepler, su variante para gama alta (la que se conoce como GK100 o GK110) enfocada a ofrecer un gran rendimiento en juegos y cómputo GPGPU, y otra variante para sus gamas medias y bajas (GK104, GK106, GK107 y otras) enfocada a ofrecer un buen rendimiento en juegos, pero no tanto en GPGPU; esta última variante posee 8 unidades FP64 dedicadas por SMX (suponemos que GK100/GK110 tendrá 16 o 32 de ellas por SMX).

SMX de Kepler GK104 mostrando sus 6 grupos de shaders FP32.

Otra diferencia en relación a Fermi es que los Graphic Processing Cluster (GPC) están conformados por 2 SMX (en Fermi están conformados por 4 SMs); tomando como ejemplo a GK104 (GeForce GTX 680) tenemos que al poseer 4 GPCs cada uno con 2 SMX (cada SMX con 192 shaders y 8 unidades FP64), tiene un total de 1536 shaders y 64 unidades dedicadas FP64 bits; es decir es capaz de ejecutar 1536 operaciones simultáneas de enteros o punto flotante de 32 bits, pero tan sólo 64 operaciones simultáneas de 64 bits.

Este bajo número de unidades de 64 bits en Kepler de gama media y baja, permite a NVIDIA ahorrar bastantes transistores y dedicar más hardware enfocado a juegos como unidades de textura: 16 unidades de textura (TMUs) por SMX, el doble que en GF114 (8) y el cuádruple que en GF110 (4); pero el hablar de unidades de textura comprende al uso del GPU en juegos, y por este artículo estar dedicado al cómputo GPGPU seguiremos con los demás cambios de Kepler enfocados al GPGPU.

Kepler también posee un mayor número de unidades de funciones especiales (SFUs, encargadas de realizar cálculos de matemática trascendental e interpolación) y unidades de carga y almacenamiento (load/store): 32 de cada una de ellas por SMX (Fermi SM con 32 shaders posee 4 por SM y su variante con SMs con 48 shaders posee 8 por SM), pero mantiene el uso de 64kb de L1 por SMX/SM. El controlador de memoria de doble canal (2 canales de 32 bits cada uno) de Kepler posee 128KB por controlador (al igual que en Fermi) por lo que tomando por ejemplo a GK104 tenemos un total de 512KB (4 controladores de 64 bits).

Hemos elaborado una tabla con las especificaciones de algunos GPUs Fermi y Kepler:

¿Qué hay de Kepler de gama alta?

Observando la tabla se aprecia una enorme diferencia en el número de unidades FP64 entre los distintos GPUs NVIDIA basados en Fermi y Kepler, pero conociendo la limitación intencional que NVIDIA impone a sus GPUs Fermi, se aprecia que el poder de cómputo FP64 en GigaFlops DP (doble precisión o 64 bits) de la GeForce GTX 680 alcanza para superar a la GeForce 560 Ti, pero está lejos de alcanzar a GPUs como GeForce GTX 480 y GeForce GTX 580; lo cual pone en evidencia que Kepler GK104 no ha sido diseñado para superar en todos los aspectos a Fermi de gama alta; tarea de la que se encargará el núcleo Kepler de gama alta conocido por el nombre código GK100/GK110.

Según declaraciones oficiales de Summit Gupta, Gerente General de la División de productos Tesla de NVIDIA, GK100/GK110 poseerá más shader processors (sobretodo más unidades FP64 a fin de alcanzar un potencial entre 1.3 a 1.5 TeraFlops en doble precisión), menores frecuencias de funcionamiento (quizá inferiores a 1GHz), más ancho de banda (lo más probable sería un bus de 384 bits), y un TDP no mayor a 225W.

Claro que estas declaraciones se refieren a la versión Tesla de GK100/GK110, de la cual NVIDIA liberará información en mayo de este año, durante el evento GPU Technology Conference (GTC); y su lanzamiento será durante los últimos 3 meses de este año; aunque ello no quiere decir que GeForce basado en GK100/GK110 llegue en la fecha anunciada; pues tradicionalmente NVIDIA primero lanza sus GPUs GeForce, luego su gama Quadro, y por último Tesla.

El rendimiento GPGPU de Kepler GK104

Lamentablemente las cifras expuestas muestran que aunque GK104 casi duplica el poder de cálculo de GF110 en cálculos INT y FP32; su poder FP64 palidece ante el de GF110 y GF100. Varias webs se animaron a realizar test evaluando el poder de cómputo FP64 de la nueva GK104 (GeForce GTX 680), y lamentablemente los resultados corroboran que no es capaz de acercarse a GF100/GF110, los que continúan siendo los GPUs con mayor poder de cálculo en doble precisión de NVIDIA.

Bajo el API CUDA Anandtech realizó un test usando PrimeGrid GENEFER 1.06 donde GF110 terminó la prueba en 77 segundos, seguido de GF114 con 98 segundos, y GK104 con 133 segundos, un muy mal resultado que demuestra un escaso poder de cálculo FP64 del nuevo GPU de NVIDIA; incluso bajo el API sobre el cual debería destacar.

La mayoría de test realizados se hicieron bajo el API OpenCL; y hemos reunido algunos de ellos en una tabla:

Aprovechando los test OpenCL, hemos elaborado otra tabla con el puntaje/watt:

Examinando los resultados, en efecto se comprueban las afirmaciones de NVIDIA de que Kepler posee un rendimiento FP32 por watt que duplica al de Fermi, pero en FP64 la historia cambia por completo, donde casi empata con GF114, pero pierde ante GF110, a pesar de que ambos chips Fermi sólo están mostrando sólo la 4º parte de su verdadero potencial FP64 por las limitaciones de NVIDIA a su línea GeForce.

Conclusiones

Sabiendo que los GPUs Kepler de gama media y baja (GK104, GK107 y otros cuyo modelo no termine en “0”), no están orientados al cómputo GPGPU, no esperábamos que superara a GF110; y ello queda más que demostrado en los diversos test que hay en la web.

Les prometemos un artículo similar cuando Kepler GK100/GK110 haga su aparición; pero desde ya, estamos seguros que superará consistentemente a GF110.

Links:
NVIDIA GeForce GTX 680 Review: Retaking The Performance Crown (Anandtech)
NVIDIA Launches First Kepler GPUs at Gamers; HPC Version Waiting in the Wings (HPC Wire)
Fortsetzung: Test der NVIDIA GeForce GTX 680: Ist AMDs Radeon HD 7970 geschlagen? (PC Games Hardware)
GeForce GTX 680 2 GB Review: Kepler Sends Tahiti On Vacation (Tom´s Hardware)

También pueden comentar en nuestro foro.