Código compacto y software ahorrador de energía

Remontándonos a las épocas oscuras cuando recién se habían inventado los chips de microprocesador, a menudo, los estudiantes de ingeniería tenían su primer contacto serio con la programación de computadoras en máquinas como la minicomputadora DEC PDP-11. Aparte de intentar escribir programas que en realidad se ejecutaban correctamente en el PDP-11, los estudiantes del día también tenían que hacer que su código fuera compacto. Una forma de recibir una mirada exasperada de los docentes en esas primeras clases de computación era entregar programas que ocupaban hasta 20 líneas de códigos de ensamblaje que podrían haber ocupado 15. Por supuesto, el motivo de su consternación era que la memoria era costosa. Por lo general, el PDP-11 solo tenía 4,096 palabras de 16 bits de memoria de lectura/escritura, que consistían en 22 millones de núcleos magnéticos a los que se accedía con cables.

Una computadora PDP-11 de Digital Equipment Corporation (DEC). (Fuente de la imagen: flickr)

Si volvemos a la actualidad, usted descubrirá que los cursos de programación aún dan importancia al código compacto. Sin embargo, según los indicios, las clases de programación pronto podrían apartar la atención de la escritura no solo de código compacto, sino también del software que minimiza el consumo de energía.

Alguna vez, la eficiencia energética del código de computadora fue un tema especializado. Era interesante, principalmente para los programadores de pequeños sistemas integrados donde tenía que cuidarse la disipación de potencia de una MCU para maximizar la vida útil de la pila botón que suministraba la energía. Ahora, la eficiencia energética de los software se está volviendo popular. Cada vez es más común ver a usuarios de teléfonos inteligentes evitar aplicaciones que usan de forma intensiva la CPU solo para aprovechar un poco mejor la batería del teléfono. Incluso los sistemas basados en la nube están prestando atención a la eficiencia energética del software debido a su impacto en las emisiones de carbono de los centros de datos.

A primera luz, se podría sospechar que el código compacto ya ahorra energía. Resulta que, a veces, esta regla de oro es verdadera, pero no siempre. Además, la eficiencia energética de un programa de computadora suele depender del lenguaje en el que está escrito. Los lenguajes compilados permiten ahorrar más energía que los lenguajes interpretados o los que conforman las máquinas virtuales. Pero pueden haber grandes diferencias en la eficiencia energética, incluso entre lenguajes compilados que parecen estar relacionados entre sí.

Ideas sobre cómo la energía, el tiempo y el uso de memoria se relacionan con la programación con ahorro de energía a partir del trabajo realizado por investigadores de Portugal (https://dl.acm.org/doi/10.1145/3136014.3136031). Ellos analizaron el rendimiento de 27 lenguajes de software para la eficiencia energética. Para ello, usaron compiladores de última generación, intérpretes y máquinas virtuales y observaron lo que pasaba cuando ejecutaban 13 programas diferentes que servían para comparar cómo pueden implementarse algoritmos de uso extendido en varios lenguajes de programación populares.

Por ejemplo, un programa de referencia medía el tiempo que tomaba calcular la interacción entre varias partículas de un sistema. Otro asignaba y desasignaba varios árboles binarios. Un tercer programa actualizaba una tabla hash y la usaba para contar secuencias de nucleótidos de ADN específicas.

Los investigadores observan que hay una idea equivocada común de que el consumo de energía del software es proporcional al tiempo de ejecución: Más rápido siempre es mejor. La reducción del tiempo de ejecución de un programa permitiría reducir su consumo de energía en la misma proporción. Pero la relación no es necesariamente simple, porque la energía disipada es el producto de la energía usada y del tiempo. Por lo tanto, un programa más rápido puede no ahorrar más energía si consume más energía mientras se ejecuta.

Por consiguiente, los investigadores descubrieron que, en varios casos, el rango de consumo de energía de un lenguaje de programación difería del consumo durante su tiempo de ejecución. Por ejemplo, en una referencia que involucra la generación y la creación de secuencias de ADN, Fortran resultó ser el segundo lenguaje más ahorrador de energía, aunque quedó en octavo lugar en cuanto al tiempo de ejecución. Al calcular árboles binarios, el consumo de energía de los lenguajes Pascal y Chapel estuvo, como máximo, a 10 % entre sí, aunque Chapel tarda aproximadamente 55 % menos tiempo en ejecutarse.

Algunas de las conclusiones de los investigadores no son sorprendentes. Un hallazgo: El lenguaje C es, en general, el más rápido y el que ahorra más energía (57 J, 2,019 mseg en promedio para ejecutarse). Después de C, los cuatro principales lenguajes que necesitan la menor cantidad de energía y tiempo para ejecutar las referencias resultaron ser Rust (59 J, 2,103 mseg), C++ (77 J, 3,155 mseg), Ada (98 J, 3,740 mseg) y Java (114 J, 3,821 mseg). Tal como podría esperarse, los lenguajes compilados ahorraban mucha más energía que los lenguajes interpretados o de máquina virtual. El promedio de los programas compilados es de 120 J para ejecutar las soluciones, mientras que los lenguajes interpretados y de máquina virtual consumían hasta 5,760 J y 2,365 J, respectivamente.

Entonces, no es sorpresa que los lenguajes que ocupaban los últimos cinco lugares en la lista de eficiencia energética y tiempo de ejecución fueran todos interpretados: Perl (4,604 J), Python (4,390 J), Ruby (4,045 J), JRuby (2,693 J) y Lua (2,660 J) en cuanto a energía; Lua (16,7416 mseg), Python (14,5178 mseg), Perl (13,2856 mseg), Ruby (119,832 mseg) y TypeScript (93,292 mseg) en cuanto a tiempo.

Los investigadores también mostraron adónde va la mayor parte de la energía disipada. El consumo de energía basado en la CPU siempre representa la mayor parte de la energía consumida. En promedio, la CPU consume casi 90 % de la energía y DRAM consume el resto, sin importar si el lenguaje es compilado, interpretado o virtual.

En definitiva, los investigadores portugueses dicen que es relativamente fácil determinar el mejor lenguaje de software si los programadores solo se preocupan por el tiempo de ejecución y el consumo de energía. Pero, si el uso de memoria también es un factor, la elección no es automática.

Para el planeta, hay buenas noticias: Es posible optimizar el software para la eficiencia energética. Para los estudiantes que aprenden a programar, hay malas noticias: Ahora pueden ganarse una reprimenda de su profesor de programación no solo por entregar un programa insuficientemente compacto, pero también por entregar uno que no ahorra energía.

Información sobre el autor

Image of Lee Teschler

Lee Teschler is the Executive Editor of the Design World network of websites, online resources and print publications. Leland (Lee) Teschler worked at Penton Media for 37 years, starting in 1977 as a Staff Editor for Machine Design, and worked his way up to Chief Editor of the publication in 2006. Prior to that, he had been a communications engineer for the federal government. Teschler holds a B. S. in Engineering and a B. S. in Electrical Engineering from the University of Michigan, and an MBA from Cleveland State University.

More posts by Lee Teschler
 TechForum

Have questions or comments? Continue the conversation on TechForum, Digi-Key's online community and technical resource.

Visit TechForum