211service.com
Universo paralelo
Cuando Anwar Ghuloum llegó a trabajar en Intel en 2002, la empresa era suprema entre los fabricantes de chips, principalmente porque entregaba procesadores que funcionaban a velocidades cada vez más altas. Ya estábamos en tres gigahercios con Pentium 4, y la hoja de ruta requería velocidades de reloj futuras de 10 gigahercios y más, recuerda Ghuloum, quien tiene un doctorado de Carnegie Mellon y ahora es uno de los ingenieros principales de la compañía. Ese mismo año, en la conferencia de desarrolladores de Intel, el director de tecnología Pat Gelsinger dijo: Estamos en camino, para 2010, para dispositivos de 30 gigahercios, 10 nanómetros o menos, entregando una terainstrucción de rendimiento. Eso es un billón de instrucciones de computadora por segundo.
Pero Gelsinger estaba equivocado. Intel y sus competidores todavía están fabricando procesadores que superan los cuatro gigahercios, y algo alrededor de cinco gigahercios se ha llegado a considerar, al menos por ahora, como la velocidad máxima factible para la tecnología de silicio.
Esta historia fue parte de nuestra edición de enero de 2009.
- Ver el resto del número
- Suscribir
No es como si la Ley de Moore, la idea de que el número de transistores en un chip se duplica cada dos años, hubiera sido derogada. Más bien, los problemas inesperados con la generación de calor y el consumo de energía han puesto un límite práctico a las velocidades de reloj de los procesadores, o la velocidad a la que pueden ejecutar instrucciones. Las nuevas tecnologías, como la espintrónica (que utiliza la dirección de giro de un solo electrón para codificar los datos) y los transistores cuánticos (o de efecto túnel), pueden finalmente permitir que las computadoras funcionen muchas veces más rápido de lo que lo hacen ahora, mientras usan mucha menos energía. Pero esas tecnologías están al menos a una década de llegar al mercado y requerirían el reemplazo de líneas de fabricación de semiconductores cuya construcción ha costado muchas decenas de miles de millones de dólares.
Entonces, para aprovechar al máximo las tecnologías disponibles, los fabricantes de chips están adoptando un enfoque diferente. Los transistores adicionales predichos por la ley de Moore no se utilizan para hacer que los procesadores individuales funcionen más rápido, sino para aumentar la cantidad de procesadores dentro de un chip. Los chips con dos procesadores, o núcleos, son ahora el estándar de escritorio y los chips de cuatro núcleos son cada vez más comunes. A largo plazo, Intel prevé cientos de núcleos por dispositivo.
Pero aquí está la cuestión: si bien el problema del hardware del sobrecalentamiento de los chips se presta muy bien a la solución de hardware de la computación multinúcleo, esa solución da lugar a su vez a un complicado problema de software. ¿Cómo se programa para varios procesadores? Es el trabajo de Anwar Ghuloum resolver eso, con la ayuda de los grupos de programación que administra en los Estados Unidos y China.
Las empresas de microprocesadores corren un gran riesgo al adoptar la estrategia multinúcleo. Si no pueden encontrar formas fáciles de escribir software para los nuevos chips, podrían perder el apoyo de los desarrolladores de software. Esta es la razón por la que la máquina de juegos PlayStation 3 multinúcleo de Sony llegó tarde al mercado y todavía tiene menos títulos de juegos que sus competidores.
El problema del silicio
Durante los primeros 30 años de desarrollo de microprocesadores, la forma de aumentar el rendimiento fue hacer chips que tuvieran características cada vez más pequeñas y funcionaran a velocidades de reloj cada vez más altas. La computadora Apple II original de 1977 usaba un procesador de ocho bits que funcionaba a un megahercio. El estándar de PC actual es un chip de 64 bits que funciona a 3.6 gigahertz, efectivamente, 28,800 veces más rápido. Pero ahí es donde parece terminar esta trayectoria. Alrededor de 2002, las características más pequeñas que podían grabarse en un chip mediante fotolitografía se habían reducido a 90 nanómetros, una escala en la que los efectos imprevistos hicieron que gran parte de la electricidad bombeada a cada chip simplemente se filtrara, generando calor pero sin hacer ningún trabajo. . Mientras tanto, los transistores estaban tan apretujados en los chips que el calor que generaban no podía absorberse ni eliminarse. Cuando las velocidades del reloj alcanzaron los cinco gigahercios, se dieron cuenta los fabricantes de chips, los chips se calentarían tanto que sin sistemas de enfriamiento elaborados, el silicio con el que estaban hechos se derretiría. La industria necesitaba una forma diferente de mejorar el rendimiento.
Debido a los diseños complejos que ahora requieren los chips de un solo núcleo de alta velocidad, varios núcleos pueden entregar la misma cantidad de potencia de procesamiento mientras consumen menos electricidad. Menos electricidad genera menos calor. Además, el uso de varios núcleos distribuye el calor que exista.
La mayoría de los programas de computadora, sin embargo, no fueron diseñados con múltiples núcleos en mente. Sus instrucciones se ejecutan en una secuencia lineal, sin que ocurra nada en paralelo. Si su computadora parece estar haciendo más de una cosa a la vez, es porque el procesador cambia entre actividades más rápido de lo que puede comprender. Por tanto, la forma más sencilla de utilizar varios núcleos ha sido mediante una división del trabajo, por ejemplo, ejecutar el sistema operativo en un núcleo y una aplicación en otro. Eso no requiere un modelo de programación completamente nuevo y puede funcionar para los chips actuales, que tienen dos o cuatro núcleos. Pero, ¿qué pasa con los de mañana, que pueden tener 64 núcleos o más?
Revisando el trabajo antiguo
Afortunadamente, dice Leslie Valiant, profesora de informática y matemáticas aplicadas en la Universidad de Harvard, los fundamentos del paralelismo se resolvieron hace décadas en el campo de la computación de alto rendimiento, es decir, con supercomputadoras. El desafío ahora, dice Valiant, es encontrar una manera de hacer que ese viejo trabajo sea útil.
Las supercomputadoras que inspiraron la computación multinúcleo fueron dispositivos de segunda generación de la década de 1980, fabricados por empresas como Thinking Machines y Kendall Square Research. Esas computadoras usaban procesadores estándar por cientos o incluso miles, ejecutándolos en paralelo. Algunos fueron encargados por la Agencia de Proyectos de Investigación Avanzada de Defensa de EE. UU. Como una alternativa más barata a las supercomputadoras Cray. Las lecciones aprendidas en la programación de estas computadoras son una guía para hacer que la programación multinúcleo funcione en la actualidad. Así que Grand Theft Auto pronto podría beneficiarse de la investigación de software realizada hace dos décadas para ayudar al diseño de bombas de hidrógeno.
En la década de 1980, quedó claro que el problema clave de la computación paralela es el siguiente: es difícil separar el software para que pueda ser procesado en paralelo por cientos de procesadores y luego volver a ensamblarlo en la secuencia adecuada sin permitir que el el resultado previsto se corrompe o se pierde. Los científicos informáticos descubrieron que, si bien algunos problemas se podían paralelizar fácilmente, otros no. Incluso cuando los problemas pudieran ser paralelizados, los resultados aún podrían devolverse fuera de orden, en lo que se llamó una condición de carrera. Imagine dos operaciones que se ejecutan en paralelo, una de las cuales debe finalizar antes que la otra para que el resultado general sea correcto. ¿Cómo se asegura de que el correcto gane la carrera? Ahora imagine dos mil o dos millones de tales procesos.
Lo que aprendimos de este trabajo anterior en computación de alto rendimiento es que hay problemas que se prestan al paralelismo, pero que las aplicaciones paralelas no son fáciles de escribir, dice Marc Snir, codirector del Centro de Investigación de Computación Paralela Universal (UPCRC) en el Universidad de Illinois en Urbana-Champaign. Normalmente, los programadores utilizan herramientas y lenguajes de programación especializados para escribir instrucciones para la computadora en términos que son más fáciles de entender para los humanos que los 1 y 0 del código binario. Pero esos lenguajes fueron diseñados para representar secuencias lineales de operaciones; es difícil organizar miles de procesos paralelos a través de una serie lineal de comandos. Para crear programas paralelos desde cero, lo que se necesita son lenguajes que permitan a los programadores escribir código sin pensar en cómo hacerlo en paralelo, para programar como de costumbre mientras el software descubre cómo distribuir las instrucciones de manera efectiva entre los procesadores. Todavía no hay buenas herramientas para ocultar el paralelismo o para hacer que sea obvio [cómo lograrlo], dice Snir.

Luces brillantes: En 1987, Thinking Machines lanzó su supercomputadora CM-2 (arriba), en la que 64.000 procesadores funcionaban en paralelo. La empresa se declaró en quiebra en 1994, pero su impacto en la informática fue significativo.
Para ayudar a resolver estos problemas, las empresas han vuelto a llamar para dar servicio a algunos de los barbudos grises de la supercomputación de la década de 1980. David Kuck, por ejemplo, es un profesor emérito de la Universidad de Illinois muy conocido como desarrollador de herramientas para la programación paralela. Ahora trabaja en programación multinúcleo para Intel. También lo hace todo un equipo contratado de la antigua Digital Equipment Corporation; en una vida profesional anterior, desarrolló la implementación de Digital de la interfaz de paso de mensajes (MPI), el estándar de software dominante para la supercomputación de múltiples máquinas en la actualidad.
En cierto sentido, estos viejos jugadores lo tienen más fácil que la última vez. Esto se debe a que muchas de las aplicaciones multinúcleo de hoy en día son muy diferentes de las imaginadas por el legendario diseñador de mainframe Gene Amdahl, quien teorizó que la ganancia de velocidad que se podía lograr mediante el uso de múltiples procesadores estaba limitada por el grado en que un programa dado podía paralelizarse.
Las computadoras manejan mayores volúmenes de datos que nunca, pero sus tareas de procesamiento son tan ideales para la paralelización que las restricciones de la Ley de Amdahl, descritas en 1967, comienzan a parecer que no existen restricciones. El ejemplo más simple de una tarea masivamente paralela es la determinación por fuerza bruta de una contraseña desconocida probando todas las combinaciones posibles de caracteres. Dividir las soluciones potenciales entre 1000 procesadores no puede evitar ser 1000 veces más rápido. Lo mismo ocurre con las aplicaciones de procesamiento intensivo de hoy para codificar datos de audio y video. Comprimir fotogramas de película en paralelo es casi perfectamente eficiente. Pero si el procesamiento en paralelo es más fácil de encontrar usos en la actualidad, no necesariamente es mucho más fácil de hacer. Facilitarlo requerirá un esfuerzo concertado por parte de los fabricantes de chips, desarrolladores de software y científicos informáticos académicos. De hecho, la UPCRC de Illinois está financiada por Microsoft e Intel, las dos empresas que tienen más que ganar si la computación multinúcleo tiene éxito y más que perder si falla.
Inventar nuevas herramientas
Si el software se vuelve cada vez más complejo, no es solo porque se le están agregando más funciones; también se debe a que el código se basa cada vez en más capas de abstracción que ocultan la complejidad de lo que los programadores están haciendo realmente. Esto no es mera hinchazón: los programadores necesitan abstracciones para hacer que el código binario básico haga el trabajo cada vez más avanzado que queremos que haga. Sin embargo, cuando se trata de escribir para procesadores paralelos, los programadores están usando herramientas tan rudimentarias que James Larus, director de arquitectura de software para el proyecto Data Center Futures en Microsoft Research, las compara con el lenguaje de nivel más bajo y más difícil que un programador puede usar. .
No podíamos imaginarnos escribiendo el software actual en lenguaje ensamblador, dice. Pero por alguna razón creemos que podemos escribir software paralelo de igual sofisticación con las piezas nuevas y críticas escritas en lo que equivale al lenguaje ensamblador paralelo. No podemos.
Es por eso que Microsoft está lanzando herramientas de programación paralela tan rápido como puede. F #, por ejemplo, es la versión paralela de Microsoft del lenguaje de programación ML de propósito general. No solo paraleliza ciertas funciones, sino que evita que interactúen de manera incorrecta, por lo que el software paralelo se vuelve más fácil de escribir.
Mientras tanto, Intel envía a Ghuloum al extranjero una semana al mes para hablar con los desarrolladores de software sobre la arquitectura multinúcleo y los modelos de programación paralela. Hemos adoptado la filosofía de que el 'problema' de la programación paralela no se resolverá en el próximo año o dos y requerirá muchas mejoras incrementales, y una pequeña cantidad de saltos, en los lenguajes existentes, dice Ghuloum. También tiendo a pensar que no podemos hacer esto en el vacío; es decir, sin una retroalimentación significativa de los programadores, indudablemente terminaremos con lo incorrecto de alguna manera.
Tanto en el mercado comercial como en el de código abierto, otros lenguajes y herramientas nuevos aprovechan el poder del procesamiento multinúcleo o enmascaran su complejidad. Entre estos se encuentran el marco MapReduce de Google, que facilita la ejecución de cálculos paralelos en grupos de computadoras, y Hadoop, una implementación de código abierto de MapReduce que puede distribuir aplicaciones en miles de nodos. Se diseñaron nuevos lenguajes de programación como Clojure y Erlang desde cero para la computación paralela. La popular aplicación de chat de Facebook se escribió en parte en Erlang.
Mientras tanto, el spin-off del MIT, Cilk Arts, puede dividir programas escritos en el lenguaje establecido C ++ en subprocesos que se pueden ejecutar en paralelo en varios núcleos. Y Appistry, con sede en St. Louis, afirma que su Enterprise Application Fabric distribuye automáticamente aplicaciones para el marco de programación .Net de Microsoft a través de miles de servidores sin necesidad de que los programadores cambien una sola línea de su código original.
Los límites de la computación multinúcleo
Así como el sueño de Intel de chips de 10 y 30 gigahercios dio paso a la búsqueda de la computación multinúcleo, sin embargo, el multinúcleo en sí mismo podría existir durante unos años en lugar de décadas. La eficiencia de los sistemas paralelos disminuye con cada procesador agregado, ya que los núcleos compiten por los mismos datos; Llegará un punto en el que agregar un núcleo adicional a un chip lo ralentizará. Eso bien puede establecer un límite práctico en la estrategia multinúcleo mucho antes de que comencemos a comprar PC de cien núcleos.
Sin embargo, ¿importa? Si bien puede haber aplicaciones que exijan la potencia de muchos núcleos, la mayoría de las personas no las usa. Aparte de los jugadores empedernidos, pocas personas se quejan de que sus PC son demasiado lentas. De hecho, Microsoft ha enfatizado que Windows 7, el sucesor del problemático Windows Vista, utilizará menos potencia de procesamiento y memoria que Vista, un movimiento que se hizo necesario por la popularidad de las plataformas de computación móvil de menor potencia y la migración esperada de aplicaciones de PC a Servidores basados en Internet. Un cínico podría decir que la búsqueda de un poder de procesamiento cada vez mayor es estrictamente comercial: que las empresas de semiconductores y de computadoras, los proveedores de software y los fabricantes de teléfonos móviles necesitan que compremos nuevos artilugios.
Entonces, ¿cuál es la desventaja si falla la computación multinúcleo? ¿Cuál es el impacto probable en nuestra cultura si tomamos un zig técnico que debería haber sido un zag y de repente no somos capaces de usar los 64 núcleos de procesador en nuestras futuras computadoras portátiles?
¡No puedo esperar! dice Steve Wozniak, el inventor del Apple II. La derogación de la Ley de Moore crearía un renacimiento para el desarrollo de software, afirma. Solo entonces finalmente podremos crear software que se ejecutará en una plataforma estable y duradera.
En las escuelas, dice Woz, la vida útil de un escritorio es de 25 años, un libro de texto de 10 años y una computadora de tres años, como máximo. ¿Cuál de estos dispositivos cuesta más comprar y operar? La PC, por supuesto. ¿Cuál tiene valor residual cuando termina su vida útil? No la PC, cuesta dinero deshacerse de ella. Al menos los libros se pueden quemar para calentarlos. Hasta que la tecnología se desacelere lo suficiente como para que las plataformas informáticas duren lo suficiente como para ser económicamente viables, no serán realmente intrínsecas a la educación. Por tanto, el final de la Ley de Moore, si bien puede verse mal, en realidad sería muy bueno.
Robert X. Cringely ha escrito sobre tecnología durante 30 años. El es el autor de Imperios accidentales: cómo los chicos de Silicon Valley ganan millones, luchan contra la competencia extranjera y aún no pueden conseguir una cita .
