Programación más sencilla para equipos multinúcleo

La cantidad de núcleos, o unidades de procesamiento de números, en los microprocesadores se duplica con cada generación, lo que brinda un enorme potencial informático para computadoras de escritorio, portátiles y, eventualmente, dispositivos portátiles. Las máquinas de cuatro núcleos actuales, por ejemplo, son particularmente útiles para aplicaciones tan exigentes como el procesamiento de video y los juegos. Sin embargo, las nuevas máquinas multinúcleo son básicamente supercomputadoras de pequeña escala y, para aprovechar al máximo la potencia informática que ofrecen, el software debe escribirse teniendo en cuenta varios núcleos, una tarea difícil y que requiere mucho tiempo y se conoce como programación paralela. Y muchos expertos creen que, a menos que se pueda facilitar la programación paralela, el progreso de la computación se detendrá por completo.





Software simplificado: StreamIt es un lenguaje de software y compilador que permite a los programadores programar fácilmente máquinas multinúcleo, una tarea llamada programación paralela que, de otro modo, requiere mucho tiempo y es difícil.

Los investigadores del MIT están buscando una forma de aliviar el dolor de la programación paralela. Han diseñado un lenguaje de computadora y un compilador, una herramienta especializada que convierte el lenguaje en instrucciones de computadora, que esencialmente oculta los desafíos de la programación paralela, pero aprovecha el poder de múltiples núcleos. El lenguaje y el compilador, llamado StreamIt , fueron desarrollados por Saman Amarasinghe , profesor de ingeniería eléctrica e informática en el MIT. StreamIt actualmente se ejecuta en una máquina multinúcleo especializada construida en el MIT, pero para este verano, Amarasinghe espera tener el software listo para ejecutarse en chips comerciales fabricados por IBM, Sony y Toshiba que se encuentran en las máquinas PlayStation 3 de Sony.

La creación de software es todavía algo que muchas personas pueden hacer, pero si tuvieran que lidiar con el paralelismo, se vuelve mucho más difícil, dice Amarasinghe.

En las máquinas de un solo núcleo, el código de software se ejecuta, en su mayor parte, de forma secuencial. Esto significa que las tareas, como acceder a ciertos fragmentos de memoria para abrir un programa, ocurren una tras otra, de una manera predecible. En un sistema multinúcleo, las tareas se dividen entre los núcleos. Y cuando diferentes tareas necesitan acceder a la misma porción de memoria, las tareas deben trabajar juntas para orquestar cuidadosamente, o sincronizar, los accesos. Si varias tareas acceden inadvertidamente a los mismos datos sin la sincronización adecuada, los datos se corromperán, produciendo resultados incorrectos o bloqueando el programa.

En las máquinas de un solo núcleo, es bastante fácil depurar errores de programación o problemas no deseados porque la causa se remonta a una instrucción en particular. Pero Amarasinghe dice que algunos errores en sistemas paralelos son más difíciles de corregir porque son probabilísticos, lo que significa que solo surgen ocasionalmente; cada vez que se ejecuta el programa, los múltiples núcleos ejecutan sus tareas de forma independiente, lo que genera miles de millones de posibles órdenes de ejecución para el programa.

La solución de Amarasinghe se basa en un concepto conocido llamado flujo de datos, en el que los datos se transmiten secuencialmente a través de una especie de canalización de funciones. A medida que fluyen los datos, el compilador ve qué funciones son independientes. Por lo tanto, el compilador puede colocar tareas separadas en diferentes núcleos, sin preocuparse de que interfieran entre sí o toquen la misma pieza de memoria.

Un programador solo necesita escribir software que funcione de manera secuencial. El compilador ve todas las interacciones que deben ocurrir, según el código escrito por el programador, y asigna las instrucciones de manera adecuada para evitar que surjan errores.

Es una idea sólida basada en conceptos bien conocidos, dice Carrera de bodik , profesor de informática en la Universidad de California, Berkeley. Si desea que los programadores que no son expertos en paralelismo sean productivos, si desea que escriban programas de manera efectiva, debe darles un lenguaje como StreamIt, dice. Sin embargo, Bodik sospecha que los ingenieros de software necesitarán confiar en una jerarquía de herramientas que operan en diferentes niveles. Por ejemplo, la memoria transaccional, que permite que numerosas tareas compartan la misma memoria al mismo tiempo, podría operar entre bastidores, ayudando a maximizar el potencial de StreamIt. (Consulte El problema con las computadoras multinúcleo).

esconder