Conoce a Ian Buck de Nvidia
Gracias por tomarse el tiempo para charlar hoy. Comencemos con algunos conceptos básicos. ¿Por qué no les cuentas a nuestros lectores un poco sobre ti y lo que haces actualmente en Nvidia?
Soy el director de software para GPU Computing aquí en Nvidia. Mi enfoque principal es construir y desarrollar una plataforma informática de GPU completa, que incluye software de sistema, herramientas de desarrollo, lenguaje y dirección del compilador, bibliotecas y aplicaciones y algoritmos específicos. Con la ayuda de un gran equipo, desarrollamos el software para el usuario final y marcamos la dirección de la computación GPU dentro de Nvidia.
¿Por qué no empezamos desde el principio? Me imagino que su interés en GPGPU no comenzó cuando tenía 5 años. ¿Cuáles fueron los eventos que sucedieron en Princeton o Stanford que realmente lo llevaron a descubrir su interés en GPGPU?
Incursioné en la computación GPU en mis días en Princeton, experimentando con convección térmica y simulación de fluidos en hardware de gráficos, que en ese momento era el SGI O2. Aunque las cosas estaban muy limitadas, era difícil defenderlo.
Empecé a mirar seriamente la computación GPU durante mi investigación de doctorado en Stanford. En Stanford, yo, junto con otros miembros de la comunidad de investigación, nos dimos cuenta de que la progresión natural de los gráficos programables era la evolución de la GPU hacia un procesador de propósito más general. Escribimos uno de los primeros artículos de SIGGRAPH sobre trazado de rayos con hardware de GPU de clase DX9 para ayudar a demostrar este punto. Lo que fue tan motivador sobre el trabajo fue que este procesador básico, que estaba disponible en la PC de todos, seguía una tasa de crecimiento de rendimiento al cubo de la ley de Moore, mucho más rápido que la CPU. Esto planteó la pregunta: ¿qué podría hacer una PC si tuviera varios órdenes de magnitud más potencia informática que la actual? Un cambio de juego total para las ciencias computacionales, así como para la visión artificial, la IA, la minería de datos y los gráficos.
¿Cuál fue tu papel con Brook?
Después de trabajar en la capacidad de trazar rayos en la GPU, mi enfoque de investigación en Stanford cambió a comprender el modelo de programación adecuado para la computación GPU. En ese momento, muchos otros habían demostrado que la GPU era buena en una variedad de aplicaciones diferentes, pero no había un buen marco o modelo de programación sobre cómo se debería pensar en la GPU como dispositivo informático. En ese momento, se requería un doctorado en gráficos por computadora para poder migrar una aplicación a la GPU. Así que comencé el proyecto Brook con el objetivo de definir un lenguaje de programación para computación GPU, que abstraía los gráficos-ismos de la GPU en conceptos de programación más generales. El concepto de programación fundamental de Brook era el «flujo», que era una colección de elementos de datos que requerían un trabajo similar. Brook finalmente se convirtió en mi tesis doctoral en Stanford.
Su trabajo comenzó con Merrimac, la supercomputadora de transmisión de Stanford. ¿En qué se diferencia esto de algo como un Tesla?
Los conceptos del modelo de programación de Brook eran aplicables a más que solo GPU. En Stanford, trabajamos en dos implementaciones diferentes del modelo de programación Brook: una para GPU y la otra para Merrimac, que era una arquitectura de investigación desarrollada en Stanford. Muchas de las ideas pioneras como parte de Merrimac influyeron en cómo se podían mejorar las GPU para la informática de uso general. También se debe tener en cuenta que Bill Dally, quien fue el investigador principal de Merrimac en Stanford, ahora es el científico jefe de Nvidia.
¿CUDA tiene alguna raíz en Gelato? ¿Cuál fue la primera exploración académica de GPGPU? ¿Qué pasa con el primer uso comercializado?
Empecé CUDA mientras completaba mi investigación en Stanford. Nvidia ya me apoyó mucho en mi investigación y vio claramente el potencial para habilitar mejor la computación GPU en el lado del hardware. Me uní a Nvidia para iniciar el proyecto CUDA en 2005. En ese momento, solo éramos otro ingeniero y yo. Ahora hemos convertido el proyecto en la organización que es hoy y en un componente central de las GPU de Nvidia en la actualidad.
www.gpgpu.org proporciona una buena historia de la computación GPU, que se remonta a 2002.
Actualmente, AMD impulsa a Brook como el lenguaje de programación elegido para GPGPU, mientras que Nvidia tiene C con extensiones CUDA. ¿Cómo compararía las fortalezas y debilidades de ambos?
Comenzando en Nvidia, tuvimos la oportunidad de revisar algunas de las decisiones de diseño fundamentales de Brook, que se basaron en gran medida en lo que podía lograr el hardware de clase DX9. Una de las limitaciones clave fueron las restricciones del modelo de memoria, que requería que el programador mapeara su algoritmo en torno a un patrón de acceso a la memoria bastante limitado. Con nuestra C con extensiones CUDA, relajamos esas restricciones. Básicamente, el programador simplemente recibió un grupo masivo de subprocesos y podía acceder a la memoria de la forma que quisiera. Esta mejora, así como algunas otras, nos permitió implementar la semántica completa del lenguaje C en la GPU.