Pruebas de rendimiento de Raspberry Pi Pico y comparativa con plataformas Arduino, ESP8266 y ESP32

La reciente irrupción en el mercado de la Raspberry Pi Pico, con un factor de forma similar al Arduino Nano, nos lleva a preguntarnos por las capacidades de esta nueva tarjeta. Con objeto de responder a esta cuestión, le realizaremos una serie de pruebas de rendimiento. Para ello, volveremos a hacer uso del código de benchmark Speed Test, actualizado para este nuevo dispositivo, tal como hicimos en su día para las plataformas Arduino, ESP8266 y ESP32.

Raspberry Pi Pico

Esta nueva tarjeta no es un ordenador propiamente dicho, como viene siendo el caso de la familia Raspberry Pi, sino una tarjeta basada en un microcontrolador RP2040 de la familia ARM Cortex-M0+ de 32 bits.

Batería de pruebas y resultados

Nos encontramos ante una batería de pruebas muy diversa, que incluye fundamentalmente pruebas de rendimiento de E/S y de cálculo, que nos permitirá hacernos una idea bastante correcta del rendimiento de cada procesador. Compararemos los resultados obtenidos con los de algunas tarjetas clásicas de 32 bits -NodeMCU (ESP8266), Arduino Due y ESP32S- que probamos en artículos anteriores.

Test NOP

Determina el tiempo extra -o de cobrecoste- que dedica el procesador en la llamada a una operación. Para ello, se hará uso de llamadas a una operación simple del tipo “no operation”, cuyo tiempo de proceso corresponde exactamente a un ciclo de reloj (el inverso de la frecuencia).

Así, según la tabla siguiente, obtenemos los resultados para nuestra tarjeta:

 Raspi PicoNodeMCUDueESP32S
Frecuencia CPU (MHz)1338084240
1/F (μs)0,00750,01250,01190,0042
sobrecoste (μs)0,0340,0500,1190,022

Estos valores serán utilizados para afinar el cálculo de los tiempos de las demás pruebas. Nótese que, para este valor, la Raspi está a la par del ESP32S.

Test de pines digitales

Ya entrando propiamente en pruebas de rendimiento, vamos a determinar el tiempo que tardan en realizar operaciones de lectura, escritura y cambio de estado en los pines digitales.

 Raspi PicoNodeMCUDueESP32S
digitalRead (μs)0,1310,9370,3990,141
digitalWrite (μs)0,2780,8701,6090,109
pinMode (μs)0,8661,9553,092,506

Para este caso, no hay mucha diferencia con ESP32.

Test de pines analógicos

Vamos a determinar el tiempo que implican las operaciones de lectura y escritura en los pines analógicos.

 Raspi PicoNodeMCUDueESP32S
analogRead() (μs)0,19848,0484,294N/A
analogWrite() PWM (μs)
1,03810,0933,464N/A

Para ESP32S no aplica la prueba, pues no están definidas aún las funciones analogRead() ni analogWrite() para su arquitectura. Aquí vemos que el rendimiento del Raspi es diferencial.

Test de operaciones con caracteres

Entramos en el grupo de operaciones relacionadas con la potencia de cálculo. En este caso nos centraremos con el tipo char, es decir, operaciones de un byte.

 Raspi PicoNodeMCUDueESP32S
multiply byte (μs)0,0650,1000,1130,037
divide byte (μs)0,2510,4030,1040,049
add byte (μs)0,0650,1000,1160,032

Vemos que, en este caso, ESP32S es superior en prestaciones de cálculo al procesador del Raspi Pico.

Test de operaciones con enteros

En las operaciones con tipo entero repetimos el patrón de medir el tiempo de 200000 operaciones y descontar el sobrecoste anteriormente calculado.

 Raspi PicoNodeMCUDueESP32S
multiply integer (μs)0,0570,1480,0810,053
divide integer (μs)0,2280,4320,0890,059
add integer (μs)0,0560,1350,0820,053

Vemos que, para operaciones de suma y multiplicación, ESP32 y Raspi vuelven a estar a la par. Para división, sin embargo, el primero es mucho más eficiente.

Test de operaciones con enteros largos (long)

En las operaciones con tipo entero repetimos el patrón de medir el tiempo de 200000 operaciones y descontar el sobrecoste anteriormente calculado.

 Raspi PicoNodeMCUDueESP32S
multiply long (μs)0,0560,1480,0820,054
divide long (μs)0,2230,4470,0690,049
add long (μs)0,0570,1350,0800,053

Vemos que se repite el mismo patrón que para el caso anterior.

Test de operaciones con flotantes

Para los números flotantes repetimos la metodología anterior.

 Raspi PicoNodeMCUDueESP32S
multiply float (μs)0,5830,7380,8190,054
divide float (μs)0,4733,7725,1940,224
add float (μs)0,6880,6831,1490,054

En este caso, las diferencias a favor del ESP32 son notables.

Test de conversiones de tipos

Aquí se realizarán pruebas de conversiones de tipo entero y long a cadenas.

 Raspi PicoNodeMCUDueESP32S
itoa() (μs)1,7232,5631,7190,704
ltoa() (μs)3,7989,2974,0940,699

ESP32S vuelve a presentarse como el más eficiente.

Test de generación de números aleatorios

En las pruebas de números aleatorios mediremos la velocidad de generación de este tipo de números y no la calidad -aleatoriedad- de estos, que requeriría de pruebas más complejas.

 Raspi PicoNodeMCUDueESP32S
random() (μs)1,0480,9981,6190,674

Raspi Pico vuelve a ser superado por el ESP32.

Test de manejo de bits

Vamos a realizar pruebas de desplazamiento y asignación de bits.

 Raspi PicoNodeMCUDueESP32S
bitSet() (μs)0,040,110,0770,045

Aquí ESP32S y Raspi están a la par.

Test de desviación de tiempos

Este último conjunto de pruebas calcula la diferencia de tiempo entre un retraso programado y el lapso real que ha transcurrido.

 Raspi PicoNodeMCUDueESP32S
delay(1) (μs)1002,9981025,497999,994999,999
delay(100) (μs)10000010000099999,992100000
delayMicroseconds(2) (μs)2,0222,6542,0013,007
delayMicroseconds(5) (μs)5,0385,6585,0046,019
delayMicroseconds(100) (μs)100,298100,748100,144100,999

Nótese que la Raspberry Pi Pico es la más precisa.

Conclusiones

El nuevo procesador de Raspberry Pi es realmente potente, aunque no llega a superar a ESP32, una arquitectura muy probada que, además, incluye conectividad Wi-Fi y Bluetooth.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s