211service.com
El problema con las computadoras multinúcleo
Las computadoras de primera línea de hoy tienen procesadores de doble núcleo: dos unidades de computación que pueden manejar tareas separadas al mismo tiempo. Y para el próximo año, los principales fabricantes de chips Intel y AMD habrán implementado sistemas de cuatro núcleos. Aunque varios procesadores son teóricamente más rápidos que un solo núcleo, escribir software que aproveche muchos procesadores, una tarea llamada programación paralela, es extremadamente difícil.
Sin embargo, una investigación reciente del MIT podría facilitar la programación paralela y, en última instancia, ayudar a mantener el rendimiento de la informática personal en el buen camino. Los investigadores proponen un nuevo marco informático que combina instrucciones de software especializado y modificaciones al hardware de múltiples núcleos que podría permitir a los programadores escribir software sin tener que lidiar con algunos tediosos detalles de programación paralela.
Históricamente, la escritura de software para sistemas multinúcleo ha sido trabajo de expertos en el mundo de la supercomputación. Pero con la era venidera de las supercomputadoras personales, los programadores promedio también necesitan poder escribir software con múltiples núcleos en mente.
Eso es algo aterrador, dice Krste Asanovic , profesor de ingeniería eléctrica e informática en el MIT, porque la mayoría nunca lo ha hecho y es bastante difícil de hacer. Asanovic y sus colegas están abordando uno de los principales desafíos que enfrentan los programadores cuando intentan escribir software que se ejecutará de manera eficiente en sistemas de múltiples núcleos: coordinar múltiples tareas que se ejecutan en núcleos separados de una manera que no cause que el sistema se bloquee. .
Cuando se paraleliza una aplicación como Microsoft Outlook o un reproductor de video, ciertas tareas se dividen entre los procesadores. Pero a menudo, estas tareas separadas deben sumergirse en una memoria caché compartida para acceder a los datos. Cuando una transacción está accediendo a la memoria y otra transacción necesita acceder a la misma parte de la memoria, y no se implementan las salvaguardas adecuadas, un sistema puede fallar. Esto se puede comparar con una pareja con una cuenta de cheques compartida con fondos limitados que emiten cheques simultáneamente y se sobregiran inadvertidamente de la cuenta.
La programación paralela estándar requiere que un programador anticipe estas actividades simultáneas y se asegure de que una vez que una determinada actividad comienza a acceder a la memoria, bloquea otras actividades para que esperen hasta que se complete la transacción.
Cuando se implementan correctamente, los bloqueos aceleran los sistemas paralelos, pero ponerlos en práctica es complicado, dice Jim Larus, gerente del área de investigación de Microsoft. Por ejemplo, explica, dos aplicaciones diferentes podrían adquirir bloqueos al mismo tiempo, lo que las obliga a esperar la una a la otra. Sin la entrada de un tercero para romper el punto muerto, dice Larus, las aplicaciones permanecerían congeladas.
Los investigadores del MIT solucionan esto mediante el uso de un enfoque llamado memoria transaccional, un área de investigación que se ha disparado en los últimos cinco años, dice Asanovic. La memoria transaccional coordina las operaciones del software para que los programadores no tengan que escribirlo en sus programas. De hecho, permite que numerosas transacciones compartan la misma memoria al mismo tiempo. Cuando se completa una transacción, el sistema verifica que otras transacciones no hayan realizado cambios en la memoria que pudieran obstaculizar el resultado de la primera transacción. Si es así, la transacción se vuelve a ejecutar hasta que tenga éxito.
Si bien la memoria transaccional funciona en algunos casos, todavía no es perfecta, explica Asanovic. La mayoría de las veces, las transacciones son pequeñas y el tamaño fijo de la memoria en el hardware puede hacer frente a ellas rápidamente. Pero, dice, de vez en cuando las transacciones requieren más memoria que la cantidad fija que está disponible, y cuando esto sucede, el sistema falla. Asanovic dice que al agregar un pequeño caché de memoria de respaldo al hardware y al agregar software para reconocer cuando las transacciones se desbordan, se puede aumentar la capacidad de la memoria transaccional, aliviando fallas anteriores del sistema.
El método que utilizan los investigadores del MIT se basa en una combinación de software y hardware para mejorar la memoria transaccional, dice Larus de Microsoft, y ha habido numerosos diseños que se basan en software o hardware en diversos grados. Aún no está claro dónde está la línea correcta entre el uso de hardware y software para resolver el problema, dice, pero los investigadores están abordando problemas importantes sin resolver en la programación de sistemas de múltiples núcleos.
Microsoft, AMD, Intel y universidades como MIT y Stanford, entre otras, se han comprometido a hacer que los sistemas multinúcleo sean más fáciles de programar. Además de mejorar la memoria transaccional, los investigadores están explorando mejores formas de depurar programas paralelos y también creando bibliotecas de operaciones paralelas listas para usar para que los programadores puedan conectar fragmentos de código en el software sin tener que resolver los problemas cada vez.
Actualmente, los sistemas de doble núcleo no se ven tan afectados por la falta de programas verdaderamente paralelos como lo estarán los próximos sistemas de cuatro núcleos, dice Asanovic. En su mayor parte, los sistemas operativos como Windows y Mac OS X pueden dividir de manera efectiva las aplicaciones en un sistema de doble núcleo. Por ejemplo, un escáner de virus se ejecuta discretamente en segundo plano en un núcleo, mientras que aplicaciones como Microsoft Word o Firefox se ejecutan en el otro núcleo, sin que su velocidad se vea obstaculizada.
Pero cuando se trata de 4, 8 o 16 núcleos, las aplicaciones en sí deben modificarse para obtener un mayor rendimiento. Asanovic dice que la memoria transaccional no será una fórmula mágica que facilite la programación de estos sistemas, pero espera que sea un componente del futuro modelo de computación paralela. Es un mecanismo que parece ser útil, dice.