Los investigadores del MIT han incursionado en la creación de una técnica que puede acelerar drásticamente ciertos tipos de programas informáticos de forma automática, al tiempo que garantizan que los resultados del programa sigan siendo precisos.
Su sistema aumenta la velocidad de los programas que se ejecutan en el shell de Unix, un entorno de programación omnipresente creado hace 50 años y que todavía se utiliza ampliamente en la actualidad. Su método paraleliza estos programas, lo que significa que divide los componentes del programa en piezas que pueden ejecutarse simultáneamente en varios procesadores de ordenador.
Esto permite que los programas ejecuten tareas como la indexación de webs, el procesamiento del lenguaje natural o el análisis de datos en una fracción de su tiempo de ejecución original.
«Hay mucha gente que utiliza este tipo de programas, como científicos de datos, biólogos, ingenieros y economistas. Ahora pueden acelerar automáticamente sus programas sin temor a obtener resultados incorrectos», afirma Nikos Vasilakis, científico investigador del Laboratorio de Ciencias de la Computación e Inteligencia Artificial (CSAIL) del MIT.
El sistema también ayuda a los programadores que desarrollan las herramientas que utilizan los científicos de datos, los biólogos y los ingenieros, entre otros. No necesitan hacer ningún ajuste especial en los comandos de sus programas para permitir esta paralelización automática y sin errores, añade Vasilakis, que preside un comité de investigadores de todo el mundo que han estado trabajando en este sistema durante casi dos años.
Vasilakis es el autor principal del último trabajo de investigación del grupo, que incluye al coautor del MIT y estudiante de posgrado del CSAIL, Tammam Mustafa, y que se presentará en el Simposio de Diseño e Implementación de Sistemas Operativos de USENIX. Entre los coautores se encuentran el autor principal, Konstantinos Kallas, estudiante de posgrado de la Universidad de Pensilvania; Jan Bielak, estudiante del Instituto Staszic de Varsovia; Dimitris Karnikis, ingeniero de software de Aarno Labs; Thurston H.Y. Dang, antiguo postdoctorado del MIT que ahora es ingeniero de software en Google; y Michael Greenberg, profesor adjunto de informática del Instituto Tecnológico Stevens.
Un problema de hace décadas
Este nuevo sistema, conocido como PaSh, se centra en programas, o scripts, que se ejecutan en el shell de Unix. Un script es una secuencia de comandos que ordena a un ordenador realizar un cálculo. La paralelización correcta y automática de los scripts del shell es un problema espinoso con el que los investigadores llevan décadas lidiando.
El shell de Unix sigue siendo popular, en parte, porque es el único entorno de programación que permite que un script se componga de funciones escritas en varios lenguajes de programación. Los distintos lenguajes de programación son más adecuados para tareas o tipos de datos específicos; si un desarrollador utiliza el lenguaje adecuado, la resolución de un problema puede ser mucho más fácil.
«A la gente también le gusta desarrollar en diferentes lenguajes de programación, por lo que componer todos estos componentes en un solo programa es algo que ocurre con mucha frecuencia», añade Vasilakis.
Aunque el shell de Unix permite crear scripts multilingües, su estructura flexible y dinámica hace que estos scripts sean difíciles de paralelizar con los métodos tradicionales.
Paralelizar un programa suele ser complicado porque algunas partes del programa dependen de otras. Esto determina el orden en que los componentes deben ejecutarse; si se equivoca el orden, el programa falla.
Cuando un programa está escrito en un único lenguaje, los desarrolladores disponen de información explícita sobre sus características y el lenguaje que les ayuda a determinar qué componentes pueden paralelizarse. Pero esas herramientas no existen para los scripts en el shell de Unix. Los usuarios no pueden ver fácilmente lo que ocurre dentro de los componentes ni extraer información que ayude a la paralelización.
Una solución justo a tiempo
Para superar este problema, PaSh utiliza un paso de preprocesamiento que inserta anotaciones simples en los componentes del programa que cree que podrían ser paralelizables. A continuación, PaSh intenta paralelizar esas partes del script mientras el programa se está ejecutando, en el momento exacto en que llega a cada componente.
Esto evita otro problema en la programación de shell – es imposible predecir el comportamiento de un programa por adelantado.
Al paralelizar los componentes del programa «justo a tiempo», el sistema evita este problema. Es capaz de acelerar eficazmente muchos más componentes que los métodos tradicionales que intentan realizar la paralelización por adelantado.
La paralelización «justo a tiempo» también garantiza que el programa acelerado siga devolviendo resultados precisos. Si PaSh llega a un componente del programa que no puede ser paralelizado (quizás depende de un componente que aún no se ha ejecutado), simplemente ejecuta la versión original y evita causar un error.
«No importan las ventajas de rendimiento -si prometes hacer que algo se ejecute en un segundo en lugar de en un año- si hay alguna posibilidad de devolver resultados incorrectos, nadie va a utilizar tu método», dice Vasilakis.
Los usuarios no tienen que hacer ninguna modificación para utilizar PaSh; sólo tienen que añadir la herramienta a su shell Unix actual y decirle a sus scripts que la utilicen.
Aceleración y precisión
Los investigadores probaron PaSh en cientos de scripts, desde programas clásicos a modernos, y no rompió ni uno solo. El sistema fue capaz de ejecutar los programas seis veces más rápido, por término medio, en comparación con los scripts no paralelizados, y alcanzó una velocidad máxima de casi 34 veces.
También aumentó la velocidad de los scripts que otros enfoques no eran capaces de paralelizar.
«Nuestro sistema es el primero que muestra este tipo de transformación totalmente correcta, pero también hay un beneficio indirecto. La forma en que está diseñado nuestro sistema permite a otros investigadores y usuarios de la industria basarse en este trabajo», afirma Vasilakis.
Le entusiasma recibir más comentarios de los usuarios y ver cómo mejoran el sistema. El proyecto de código abierto se unió a la Fundación Linux el año pasado, lo que lo hace ampliamente disponible para los usuarios de la industria y el mundo académico.
De cara al futuro, Vasilakis quiere utilizar PaSh para abordar el problema de la distribución, es decir, dividir un programa para que se ejecute en muchos ordenadores, en lugar de en muchos procesadores dentro de un mismo ordenador. También quiere mejorar el esquema de anotaciones para que sea más fácil de usar y pueda describir mejor los componentes complejos de los programas.
«Los scripts de shell de Unix desempeñan un papel fundamental en las tareas de análisis de datos e ingeniería de software. Estos scripts podrían ejecutarse más rápidamente si los diversos programas que invocan utilizaran las múltiples unidades de procesamiento disponibles en las CPU modernas. Sin embargo, la naturaleza dinámica del shell hace difícil
diseñar planes de ejecución en paralelo con antelación», afirma Diomidis Spinellis, profesor de ingeniería de software en la Universidad de Economía y Empresa de Atenas y profesor de análisis de software en la Universidad Técnica de Delft, que no participó en esta investigación. «Mediante el análisis «just-in-time», PaSh-JIT consigue vencer la complejidad dinámica del shell y, por tanto, reduce los tiempos de ejecución de los scripts manteniendo la corrección de los resultados correspondientes».
«Como sustituto de un shell ordinario que orquesta los pasos, pero no los reordena ni los divide, PaSh ofrece una forma sencilla de mejorar el rendimiento de los trabajos de procesamiento de grandes datos», añade Douglas McIlroy, profesor adjunto del Departamento de Informática del Dartmouth College, que anteriormente dirigió el Departamento de Investigación de Técnicas de Computación de los Laboratorios Bell (que fue la cuna del sistema operativo Unix). «La optimización manual para explotar el paralelismo debe hacerse a un nivel para el que los lenguajes de programación ordinarios (incluidos los shells) no ofrecen abstracciones limpias. El código resultante entremezcla cuestiones de lógica y eficiencia. Es difícil de leer y de mantener ante la evolución de los requisitos. PaSh interviene inteligentemente en este nivel, preservando la lógica original en la superficie y logrando la eficiencia cuando se ejecuta el programa».
Este trabajo ha sido financiado, en parte, por la Defense Advanced Research Projects Agency y la National Science Foundation.
CambioDigital OnLine | Fuente MIT