Saltar al contenido

Los investigadores desarrollaron un nuevo sistema que puede hacer que los programas de computadora se ejecuten más rápido, al tiempo que garantizan la precisión. — Ciencia diaria

12 de junio de 2022

Los investigadores han sido pioneros en una técnica que puede acelerar drásticamente ciertos tipos de programas de computadora automáticamente, al tiempo que garantiza 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 que todavía se usa ampliamente en la actualidad. Su método paraleliza estos programas, lo que significa que divide los componentes del programa en partes que se pueden ejecutar simultáneamente en múltiples procesadores de computadora.

Esto permite que los programas ejecuten tareas como indexación web, procesamiento de lenguaje natural o análisis de datos en una fracción de su tiempo de ejecución original.

«Hay tantas personas que usan 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», dice Nikos Vasilakis, científico investigador en Computer Laboratorio de Ciencia e Inteligencia Artificial (CSAIL) del MIT.


Recomendado: ¿Qué es el Big data?.


El sistema también facilita las cosas a los programadores que desarrollan herramientas que utilizan los científicos de datos, biólogos, ingenieros y otros. No necesitan hacer ningún ajuste especial a los comandos de su programa para habilitar esta paralelización automática y sin errores, agrega Vasilakis, quien 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 artículo de investigación del grupo, que incluye al coautor del MIT y estudiante graduado de CSAIL, Tammam Mustafa, y se presentará en el Simposio USENIX sobre diseño e implementación de sistemas operativos. Los coautores incluyen al autor principal Konstantinos Kallas, estudiante graduado en la Universidad de Pensilvania; Jan Bielak, estudiante de la escuela secundaria Varsovia Staszic; Dimitris Karnikis, ingeniero de software de Aarno Labs; Thurston HY Dang, ex postdoctorado del MIT que ahora es ingeniero de software en Google; y Michael Greenberg, profesor asistente de informática en el Instituto de Tecnología Stevens.

Un problema de 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 le indica a una computadora que realice un cálculo. La paralelización correcta y automática de los scripts de shell es un problema espinoso al que los investigadores se han enfrentado durante décadas.

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 múltiples lenguajes de programación. Diferentes lenguajes de programación son más adecuados para tareas o tipos de datos específicos; si un desarrollador usa el lenguaje correcto, resolver 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 sucede con mucha frecuencia», agrega Vasilakis.

Si bien el shell de Unix permite secuencias de comandos en varios idiomas, su estructura flexible y dinámica hace que estas secuencias de comandos sean difíciles de paralelizar utilizando métodos tradicionales.

Paralelizar un programa suele ser complicado porque algunas partes del programa dependen de otras. Esto determina el orden en que deben ejecutarse los componentes; obtener el orden incorrecto y el programa falla.

Cuando un programa está escrito en un solo idioma, los desarrolladores tienen información explícita sobre sus funciones y el idioma que les ayuda a determinar qué componentes se pueden paralelizar. Pero esas herramientas no existen para scripts en el shell de Unix. Los usuarios no pueden ver fácilmente lo que sucede dentro de los componentes ni extraer información que ayude en 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 paralelizarse. Luego, 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 antes de tiempo.

Al paralelizar los componentes del programa «justo a tiempo», el sistema evita este problema. Es capaz de acelerar efectivamente 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 arrojando resultados precisos. Si PaSh llega a un componente del programa que no se puede paralelizar (tal vez depende de un componente que aún no se ha ejecutado), simplemente ejecuta la versión original y evita causar un error.

«Sin importar los beneficios de rendimiento, si promete hacer que algo se ejecute en un segundo en lugar de un año, si existe alguna posibilidad de obtener resultados incorrectos, nadie utilizará su método», dice Vasilakis.

Los usuarios no necesitan hacer ninguna modificación para usar PaSh; simplemente pueden agregar la herramienta a su shell Unix existente y decirle a sus scripts que la usen.

Aceleración y precisión

Los investigadores probaron PaSh en cientos de scripts, desde programas clásicos hasta modernos, y no rompieron ni uno solo. El sistema pudo ejecutar programas seis veces más rápido, en promedio, en comparación con scripts no paralelos, y logró una aceleración máxima de casi 34 veces.

También aumentó la velocidad de los scripts que otros enfoques no pudieron paralelizar.

«Nuestro sistema es el primero que muestra este tipo de transformación completamente correcta, pero también hay un beneficio indirecto. La forma en que nuestro sistema está diseñado permite que otros investigadores y usuarios de la industria se basen en este trabajo», dice Vasilakis.

Está emocionado de recibir comentarios adicionales 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, por lo que está ampliamente disponible para los usuarios de la industria y la academia.

En el futuro, Vasilakis quiere usar PaSh para abordar el problema de la distribución: dividir un programa para que se ejecute en muchas computadoras, en lugar de muchos procesadores dentro de una computadora. También busca mejorar el esquema de anotación para que sea más fácil de usar y pueda describir mejor los componentes complejos del programa.

Este trabajo fue apoyado, en parte, por la Agencia de Proyectos de Investigación Avanzada de Defensa y la Fundación Nacional de Ciencias.