Probando chips que no han sido construidos

Chip

Un nuevo sistema de simulación por software promete una evaluación mucho más precisa de prometedores – pero potencialmente llenos de fallas – diseños de chips con múltiples núcleos.

Larry Hardesty, MIT News Office. Original (en inglés)

Durante la última década, los fabricantes de chips de computadoras han estado aumentando la velocidad de sus chips al darles unidades de procesamiento extras, o “núcleos”. La mayoría de los fabricantes ahora ofrecen chips con ocho, 10 o incluso 12 núcleos.

Pero si los chips continúan mejorando a la tasa que nos hemos acostumbrado – doblando su poder alrededor de cada 18 meses – pronto requerirán cientos e incluso miles de núcleos. Investigadores académicos y de la industria están llenos de ideas para mejorar el rendimiento de chips con múltiples núcleos, pero siempre existe la posibilidad de que un acercamiento que parezca trabajar bien con 24 o 48 núcleos pueda introducir problemas catastróficos cuando el conteo de núcleos se vuelva más alto. Ningún fabricante de chips tomará el riesgo de un diseño innovador de chip sin evidencia abrumadora de que funciona como se anuncia.

Como una herramienta de investigación, un grupo del MIT (Massachusetts Institute of Technology – Instituto Tecnológico de Massachusetts) que se especializa en arquitectura computacional ha desarrollado un simulador de software, llamado Hornet, que modela el rendimiento de chips de múltiples núcleos mucho más precisos que sus predecesores lo hacen. En el Quinto Simposio Internacional de Redes-en-Chip en el 2011, el grupo tomó el premio a la mejor revista académica por trabajo en el que usaron el simulador para analizar una prometedora y muy estudiada técnica de computación de múltiples núcleos, encontrando una falla fatal que otras simulaciones habían dejado pasar. Y en una edición próxima de Transacciones en Diseño Ayudado por Computadora de Circuitos y Sistemas Integrados del IEEE (Institute of Electrical and Electronics Engineers), los investigadores presentaron una nueva versión del simulador que analiza el consumo de energía así como patrones de comunicación entre núcleos, los tiempos de procesamiento de tareas individuales, y patrones de acceso a la memoria.

El flujo de datos a través de un chip con cientos de núcleos es monstruosamente complejo, y simuladores de software previos han sacrificado algo de precisión por algo de eficiencia. Para simulaciones más precisas, los investigadores han usado típicamente modelos de hardware – chips programables que pueden ser reconfigurados para imitar el comportamiento de chips de múltiples núcleos. De acuerdo a Myong Hyon Cho, un estudiante de doctorado en el Departamento de Ingeniería Eléctrica y Ciencia Computacional (EECS – Electrical Engineering and Computer Science) y uno de los desarrolladores de Hornet, éste está diseñado para complementar, no competir con, esos otros dos acercamientos. “Pensamos que Hornet se sienta en el punto exacto entre los dos”, dijo Cho.

Varias tareas desarrolladas por los muchos componentes de un chip están sincronizadas por un reloj maestro; durante cada “ciclo del reloj”, cada componente realiza una tarea. Hornet es significativamente más lento que sus predecesores, pero puede proveer una simulación “con precisión de ciclo” de un chip con 1,000 núcleos. “‘Precisión de ciclos’ significa que los resultados son precisos al nivel de un ciclo sencillo”, explica Cho. “Por ejemplo, [Hornet tiene] la habilidad de decir, ‘Esta tarea toma 1,223,392 ciclos para finalizar'”.

Simuladores existentes son buenos al evaluar el desempeño general de chips, pero pueden dejar pasar problemas que aparecen solo en casos raros y patológicos. Hornet es mucho más probable que los encuentre, como lo hizo en el caso de la investigación presentada en el Simposio Reden-en-Chip. Ahí, Cho, su consejero y el profesor de Ingeniería Eléctrica y Ciencia Computacional Srini Devadas, y sus colegas analizaron una prometedora técnica de computación de múltiples núcleos en la que el chip pasa tareas computacionales a los núcleos guardando los datos pertinentes en lugar de pasar los datos a los núcleos realizando las tareas pertinentes. Hornet identificó el riesgo de un problema llamado bloqueo mutuo, que otros simuladores habían perdido. (El bloqueo mutuo es una situación en la que varios de los núcleos están esperando recursos – canales de comunicación o localidades de memoria – en uso por otros núcleos. Ningún núcleo abandonará el recurso hasta que se le ha dado acceso al que necesita, así que los ciclos del reloj avanzan sin fin sin ninguno de los núcleos haciendo nada).

Adicionalmente al identificar el riesgo de bloqueos mutuos, los investigadores también propusieron una manera de evitarlo – y demostraron que su propuesta funcionaba con otra simulación Hornet. Eso ilustra la ventaja de Hornet sobre sistemas de hardware: la facilidad con la que puede ser reconfigurado para probar propuestas de diseño alternativas.

Construir simulaciones que funcionaran en hardware “es más complicado que solo escribir software”, dice Edward Suh, un profesor asistente de ingeniería eléctrica y computacional en la Universidad Cornell, cuyo grupo usó una versión temprana de Hornet que solo modelaba la comunicación entre núcleos. “Es difícil decir si es inherentemente más difícil de escribir, pero al menos por ahora, hay menos infraestructura, y los estudiantes no saben esos lenguajes tan bien como saben los lenguajes de programación regulares. Así que por ahora, es más trabajo”. Hornet, dice Suh, podría tener ventajas en situaciones donde “quieres probar varias ideas rápidamente, con buena precisión”.

Suh apunta, sin embargo, que como Hornet es más lento que las simulaciones de hardware o las simulaciones de software menos precisas, “tiende a simular un corto período de la aplicación en lugar de tratar de ejecutar la aplicación completa”. Pero, agrega, “Eso es definitivamente útil si quieres saber si hay comportamientos anormales”. Y además, “hay técnicas que la gente usa, como muestreo estadístico, o cosas como esa para, digamos, ‘estas son porciones representativas de la aplicación'”.

Reimpreso con permiso de MIT News.

Fuente
http://web.mit.edu/

Algoritmos genéticos permitirán a vehículos aéreos no tripulados cazar submarinos

Vant algoritmo
Imagen: Martin Lee / Rex Features

Investigadores Chinos de la Marina revelaron como planean cazar submarinos utilizando vehiculos aereos no tripulados (VANTs) lanzados desde barcos, la inteligencia artificial para encontrar los submarinos se hará evolucionar.

El plan es elegir el mejor patrón de caza para un VANT utilizando un algoritmo genético – estos algoritmos (serie de pasos organizados que describe el proceso que se debe seguir, para dar solución a un problema específico, en este caso, la serie de pasos para localizar submarinos) son llamados así porque se inspiran en la evolución biológica y su base genética-molecular. Para este fin, se hacen evolucionar estos algoritmos mediante generar acciones aleatorias semejantes a las que actúan en la evolución biológica (mutaciones y recombinaciones genéticas), seguido de llevar a cabo una selección de acuerdo con algún criterio (en este caso el criterio siendo la efectividad al encontrar submarinos), en función del cual se decide que algoritmos son los más “adaptados”, estos sobreviven y vuelven a someterse al proceso de alteraciones y selección, y cuáles los menos aptos, los que son simplemente descartados.

La ruta evolucionada deberá hacer el uso más efectivo del combustible, preocuparse de amenazas aéreas y marinas, y trabajar con boyas con sonar, arrojadas.

Más información
www.newscientist.com (en inglés)
El estudio (de pago, en inglés)

Máquina Virtual de Java hecha en JavaScript

Logo Java
Logo Java © Oracle

En el mundo de los lenguajes de programación existe una gran flexibilidad. Una vez que se acepta la idea de un compilador escrito en el mismo lenguaje que lo compila, no queda demasiado por pensar. Pero una Máquina Virtual de Java creada en JavaScript suena como otro nivel de locura.

No es una cosa imposible o inimaginable, pero usualmente parece ser una locura por el hecho de que Java se considera el lenguaje grande y JavaScript el lenguaje pequeño.

JavaScript es un lenguaje puramente interpretado que manejan los navegadores de Internet, mientras que Java se compila, no a lenguaje máquina, sino a algo llamado Byte code, el cual es interpretado por algo que funciona directamente en lenguaje máquina. Por esta razón JavaScript siempre ha sido mucho más lento que Java, y tratar de interpretar el código de Java en JavaScript no hubiera producido código que funcionara lo suficientemente rápido para ser usable.

Pero los recientes avances en la velocidad de ejecución de JavaScript en los navegadores han hecho posible esto. Artur Ventura lo hizo, y publicó el código en Github. De acuerdo a Artur, los navegadores no deberían traer un lenguaje de programación sino una máquina virtual para que cualquier programa hecho en cualquier lenguaje de programación funcionara en un navegador.

Fuentes:
www.i-programmer.info (en inglés)
Blog de Artur Ventura (en inglés)
El proyecto en Github

Muere Dennis Ritchie, padre de Unix y lenguaje de programación C

Dennis Ritchie
Dennis Ritchie

Dennis Ritchie, científico informático que desarrolló el lenguaje de programación C y co-creador del sistema operativo Unix, ha muerto a la edad de 70 años.

Mientras que la introducción del microprocesador 4004 de Intel en 1971 es ampliamente reconocido como un momento clave en la computación moderna, el nacimiento contemporáneo del lenguaje de programación C es menos conocido. La creación de C tiene tanto derecho, si no es que más, de ser el verdadero momento cumbre de la tecnología informática como la conocemos; descansa en el corazón de la programación como la expresión por excelencia de la elegancia de codificación, poder, simplicidad y portabilidad.

Su creador, Dennis MacAlistair Ritchie, cuya muerte tras una larga enfermedad fue reportada el miércoles y confirmada el jueves por Bell Labs, encarnó una perspectiva única y admirable para el diseño de sistemas: un hombre que enfocó toda su vida a hacer software que satisfizo en intelecto, mientras que liberó a los programadores para la creación de sus sueños.

Ritchie nació en Bronxville, Nueva York, el 9 de septiembre de 1941, y comenzó a trabajar en 1967 en los Laboratorios Bell, donde participó en los equipos que desarrollaron Multics, BCPL, ALTRAN y el lenguaje de programación B.

Sin embargo, se le reconoció principalmente por la creación del lenguaje C (aún muy usado en el desarrollo de aplicaciones y sistemas operativos, y que ha tenido gran influencia en otros lenguajes de programación modernos), y por ser el co-creador, junto con Ken Thompson, de Unix, en el cual se han basado sistemas operativos modernos.

“Dennis fue muy querido por sus colegas, se perdió con él una verdadera inspiración no sólo por sus logros, sino porque además era un hombre amable y sencillo, un amigo.” dijo Jeong Kim, Presidente de Alcatel-Lucent Bell Labs.

Fuentes:
http://www.zdnet.co.uk/ (en inglés)
http://en.wikipedia.org/ (en inglés)

Google entra en detalles sobre Dart, su nuevo lenguaje de programación

Dart

Después de esperar por más de un mes, Google presenta a su misterioso lenguaje Dart como “un lenguaje para programación web estructurada”.

Los objetivos del diseño de Dart fueron la creación de un lenguaje estructurado pero flexible para la programación web, así como asegurarse de que Dart ofrezca un alto rendimiento en todos los navegadores actuales y entornos que van desde pequeños dispositivos de mano hasta la ejecución del lado del servidor.

Es un lenguaje de programación que se parece a Java, actúa muy parecido a Java, funciona dentro de una máquina virtual al igual que Java, pero ominosamente, también tiene una herramienta que convierte código Dart en JavaScript.

Básicamente, el lenguaje no se supone que sea fascinante. En las propias palabras de Google, Dart está diseñado para que resulte “natural y familiar”, y de hecho, si se escribe código Java o C#, probablemente Dart se sienta muy accesible.

Más información:
http://developers.slashdot.org/ (en inglés)
http://www.extremetech.com/ (en inglés)