Adafruit introduce Turbo para acelerar CircuitPython en microcontroladores
El uso de Python en microcontroladores, popular por simplificar el desarrollo de firmware, conlleva un compromiso en el rendimiento frente al código máquina nativo. Esta desventaja se hace patente en proyectos que requieren un procesamiento intensivo, como la manipulación de audio, grandes búferes o la visualización de gráficos. En respuesta a esta limitación, Adafruit ha desarrollado Turbo, una característica que, según Hackster.io, busca resolver este desafío.
Turbo no reemplaza el entorno CircuitPython ni exige la reescritura de proyectos completos en lenguajes como C. En su lugar, permite a los desarrolladores identificar funciones específicas que se beneficiarían de una mayor velocidad y compilarlas a código máquina nativo directamente en un ordenador. El módulo resultante se transfiere al microcontrolador, donde CircuitPython puede cargarlo y ejecutarlo de forma directa, mientras el resto de la aplicación continúa operando como código Python estándar.
Esta capacidad se ofrece a través de dos modos de compilación principales: Native y Viper. El modo Native compila el flujo de control manteniendo los objetos Python, lo que se traduce en una mejora de rendimiento moderada. Por su parte, el modo Viper avanza al permitir el uso de enteros de palabra de máquina y punteros, eliminando una mayor proporción de la sobrecarga del intérprete.
Las pruebas realizadas por Adafruit en un Metro RP2040, utilizando un cálculo de Mandelbrot de punto fijo para generar una imagen de 160 × 120 píxeles con hasta 64 iteraciones por píxel, demostraron una significativa diferencia. Mientras que la ejecución como bytecode estándar de CircuitPython requirió una mediana de 8.335 milisegundos, el modo Native lo redujo a 4.778 milisegundos. El modo Viper completó el mismo cálculo en tan solo 422 milisegundos, lo que representa una aceleración de 19.71x sobre el bytecode para esa carga de trabajo específica, manteniendo la misma salida en todos los casos.
Es fundamental precisar que esta mejora de rendimiento se aplica únicamente al código que ha sido compilado. El tiempo dedicado a la comunicación con pantallas, la lectura de sensores, la carga de archivos o la espera de otros componentes de hardware permanece inalterado. Por ello, Turbo se perfila como una solución óptima para bucles internos con alta carga de CPU, tales como transformaciones de píxeles, procesamiento de audio, cálculos matemáticos, filtrado de datos de sensores o búsquedas en búferes.
El soporte para Turbo ya está integrado en las últimas compilaciones de CircuitPython para las placas RP2040 y RP2350, eliminando la necesidad de firmware personalizado para estas plataformas. Los desarrolladores pueden compilar sus funciones aceleradas mediante la interfaz de línea de comandos (CLI) de Turbo en un ordenador y luego copiar los módulos generados al microcontrolador. Esta característica amplía el espectro de proyectos donde la facilidad de desarrollo de CircuitPython puede ser ventajosa, incluso en escenarios con mayores demandas de cómputo.
Fuente original: Hackster.io







