SitedeLuis

Broadcom BCM2711 vs Intel Celeron N2830

Debido a mi plena curiosidad, he decidido enfrentar el SoC de la Raspberry Pi 4 de 2GB de RAM, esto es el Broadcom BCM2711 contra una laptop ASUS X200MA cuyo corazón es un Intel Celeron N2830 y 2GB de RAM. La razón de esto, pese a que en principio no habría nada en que se pudiese justificar una comparativa necesaria o incluso “adecuada”, lo hago simplemente por ver hasta dónde ha llegado la arquitectura arm64 frente a x86_64. Viendo que tengo disponibilidad de estos dos equipos con similares características, es lo que me ha alentado a hacerlo. Estas son las especificaciones:

  Raspberry Pi 4 Asus X200MA
Procesador Broadcom BCM2711 Intel Celeron N2830
Velocidad 1.5 GHz 2.41 GHz
Nucleos 4 (Cortex A72) 2 (Bay Trail-M)
Litografia 28nm (TSMC) 22nm (Intel)
L1 Cache Data 32 KiB (x4)
Instruction 48KiB(x4)
Data 24 KiB (x2)
Instruction 32KiB(x2)
L2 Cache 1024KiB (x1) 1024KiB (x1)
GPU Broadcom VideoCore VI Intel® HD Graphics for Intel Atom® Processor Z3700 Series
Shader Units 4 (8 slices?) QPUs
(Quad Processor Units)
4 EU
(Execution Units)
Frecuencia 500 MHz 750 MHz
Ram 2GB LPDDR4-32bits-@3200MHz 2GB DDR3L-64bits-@1333MHz
Ancho de Banda Teorico: 12.8 G/s
Real: 2012.37 MiB/sec
Teorico: 10.66 G/s
Real: 2222.12 MiB/sec
Salidas de Video 2x Micro HDMI x1 HDMI x1 VGA
Soporte Gráfico y de Video H.265 (4kp60 decode), H264 (1080p60 decode, 1080p30 encode)
OpenGL ES 3.2, OpenGL 4.5, Vulkan 1.0
H264 (1080p60 decode, 1080p30 encode)
OpenGL ES 3.2, OpenGL 4.5, Vulkan 1.0 (parcial)
Almacenamiento 32GB MicroSDHC Clase 10 UHS-I (U1) 500GB - 2.5 SATA III - 7200rpm
Conectividad 1Gbps Broadcom Ethernet + 802.11ac Wifi + Bluetooth 5 (BLE) 100mbps Realtek RTL810xE Ethernet + 802.11b/g/n Wifi + Bluetooth 4
Puertos 2x USB 3.0, 2x USB 2.0
Raspberry Pi Standard 40 PIN GPIO Header (completamente compatible con las tablas anteriores)
1x USB 3.0, 2x USB 2.0
Entrada de Alimentación 5V DC via USB-C connector (minimum 3A) AC 120/230 V (50/60 Hz) - 33 Watt, 19 V, 1.75 A

Especificaciones de ambos equipos en general. Debo añadir que lo referente a las apis que se mencionan fueron los valores que me dio el haber ejecutado

glxinfo | grep "OpenGL version"
glxinfo | grep "OpenGL ES profile version"

Esto es debido a que tengo habilitados los mesa backports en ambos sistemas con la versión 25.0.4-1~bpo12+1 disponible tanto para arm64 como x86_64. Entonces la verdad no es nada mal en términos de soporte gracias a Linux y sobre todo Debian. Por otro lado, ambos están funcionando a frecuencias de stock, es decir, que las raspberry pi 4 puede ir aún mucho mejor, empero, durante las pruebas trabaje con la frecuencia base de 1.5Ghz, mientras el N2830 llegara máximo a 2.4ghz. En ambos casos, cuentan con refrigeración activa, ventiladores por cierto, muy pequeños y relativamente silenciosos. El kernel en ambos casos fue de la misma rama LTS del 6.12 aunque con ligeros cambios. En específico el Celeron estaba con LXDE con DE mientras la raspasberry pi estaba en el clásico y fresco labwc:wlroots. A continuación se encuentran los neofetch de cada uno:

Raspberry Pi 4 de 2GB:

       _,met$$$$$gg.          luis@raspberrypi
    ,g$$$$$$$$$$$$$$$P.       ----------------
  ,g$$P"     """Y$$.".        OS: Debian GNU/Linux 12 (bookworm) aarch64
 ,$$P'              `$$$.     Host: Raspberry Pi 4 Model B Rev 1.1
',$$P       ,ggs.     `$$b:   Kernel: 6.12.25+rpt-rpi-v8
`d$$'     ,$P"'   .    $$$    Uptime: 1 hour, 6 mins
 $$P      d$'     ,    $$P    Packages: 2079 (dpkg)
 $$:      $$.   -    ,d$$'    Shell: bash 5.2.15
 $$;      Y$b._   _,d$P'      DE: labwc:wlroots
 Y$$.    `.`"Y$$$$P"'         Theme: Numix [GTK2/3]
 `$$b      "-.__              Icons: PiXflat [GTK2/3]
  `Y$$                        Terminal: lxterminal
   `Y$$.                      Terminal Font: Monospace 10
     `$$b.                    CPU: (4) @ 1.500GHz
       `Y$$b.                 Memory: 510MiB / 1850MiB
          `"Y$b._
              `"""

Intel Celeron N2830:

       _,met$$$$$gg.          luis@debian-n2830
    ,g$$$$$$$$$$$$$$$P.       -----------------
  ,g$$P"     """Y$$.".        OS: Debian GNU/Linux 12 (bookworm) x86_64
 ,$$P'              `$$$.     Host: X200MA 1.0
',$$P       ,ggs.     `$$b:   Kernel: 6.12.22+bpo-amd64
`d$$'     ,$P"'   .    $$$    Uptime: 1 hour, 55 mins
 $$P      d$'     ,    $$P    Packages: 2295 (dpkg)
 $$:      $$.   -    ,d$$'    Shell: bash 5.2.15
 $$;      Y$b._   _,d$P'      Resolution: 1366x768
 Y$$.    `.`"Y$$$$P"'         DE: LXDE
 `$$b      "-.__              WM: Openbox
  `Y$$                        WM Theme: catppuccin-frappe
   `Y$$.                      Theme: Arc-Dark [GTK2/3]
     `$$b.                    Icons: Papirus-Dark [GTK2/3]
       `Y$$b.                 Terminal: lxterminal
          `"Y$b._             Terminal Font: JetBrains Mono 10
              `"""            CPU: Intel Celeron N2830 (2) @ 2.415GHz
                              GPU: Intel Atom Processor Z36xxx/Z37xxx Series Graphics & Display
                              Memory: 755MiB / 1854MiB




Libbenchmark

Empiezo con una biblioteca de soporte para microbenchmarks, algunas veces conocida como “Google Benchmark” utilizada principalmente para medir el rendimiento de funciones de código. El código que se ejecutó fue este:

#include <benchmark/benchmark.h>
#include <vector>
#include <numeric>
#include <cmath>
#include <random>

// 1. Prueba de memoria
static void BM_MemoryTest(benchmark::State& state) {
    const int size = 1024 * (1 << state.range(0)); // Tamaño en KB
    std::vector<uint8_t> data(size);

    for (auto _ : state) {
        uint8_t sum = 0;
        for (const auto& val : data) {
            sum += val;
        }
        benchmark::DoNotOptimize(sum);
    }
    state.SetBytesProcessed(state.iterations() * size);
}
BENCHMARK(BM_MemoryTest)->Arg(0)->Arg(6); // 1KB y 64KB

// 2. Prueba de operaciones enteras
static void BM_IntegerMath(benchmark::State& state) {
    int a = 1;
    int b = 1;

    for (auto _ : state) {
        for (int i = 0; i < 1000; ++i) {
            benchmark::DoNotOptimize(a += b);
            benchmark::DoNotOptimize(b *= a);
        }
    }
}
BENCHMARK(BM_IntegerMath);

// 3. Prueba de operaciones flotantes
static void BM_FloatMath(benchmark::State& state) {
    float a = 1.0f;
    float b = 1.0f;

    for (auto _ : state) {
        for (int i = 0; i < 1000; ++i) {
            benchmark::DoNotOptimize(a = std::sqrt(b));
            benchmark::DoNotOptimize(b = a * 1.1f);
        }
    }
}
BENCHMARK(BM_FloatMath);

// 4. Prueba de predicción de saltos (versión corregida)
static void BM_BranchTest(benchmark::State& state) {
    const int count = 1000;
    std::vector<uint8_t> flags(count); // Usamos uint8_t en lugar de bool
    std::bernoulli_distribution dist(0.7);
    std::mt19937 gen(42);

    // Inicialización
    for (int i = 0; i < count; ++i) {
        flags[i] = dist(gen) ? 1 : 0;
    }

    int sum = 0;
    for (auto _ : state) {
        for (int i = 0; i < count; ++i) {
            if (flags[i]) {
                sum += 1;
            }
        }
    }
    benchmark::DoNotOptimize(sum);
}
BENCHMARK(BM_BranchTest);

BENCHMARK_MAIN();

Lo que se puso a prueba fue BM_MemoryTest, una pequeña prueba de ancho de banda en la memoria, donde tenemos en cuenta tres puntos claves. La eficiencia en accesos secuenciales a memoria, el ancho de banda entre CPU y RAM y, por último, el rendimiento del subsistema de memoria. Luego, BM_IntegerMath, una prueba de Operaciones Enteras donde en tres variables vemos el desempeño gracias a la velocidad en operaciones aritméticas básicas (suma, multiplicación), el rendimiento de la ALU (Unidad Aritmético-Lógica) y en últimas la latencia de operaciones dependientes (cada operación usa el resultado anterior). Por otra parte, BM_FloatMath es una prueba de operaciones de punto flotante y nos sirve para ver el rendimiento en operaciones con números decimales, la velocidad de la FPU (Unidad de Punto Flotante) y le eficiencia en cálculo de raíz cuadrada (operación costosa). Por último, BM_BranchTest es una prueba de predicción de saltos. Para entender este punto prefiero puntualizar un ejemplo, imagina que estás leyendo un libro y, de repente, una nota dice: “Ve a la página 50 para continuar la historia”. Esa nota es un salto; te desvía del flujo secuencial de páginas. Bueno, en lo que refiere esta parte del benchmark, mide eso la eficiencia del predictor de saltos y la penalización por saltos mal predichos.

Teniendo en cuenta este breve contexto, ahora sí vamos con los resultados:

Benchmark Métrica BCM2711 (Media) Celeron N2830 (Media) Diferencia (ARM-x86) x86_64 vs ARM64 (Rendimiento)
BM_MemoryTest/0 Tiempo (ns) 1381.08 871.97 -509.11 (x86 más rápido) x86 ~1.58x más rápido
  Bytes/sec (x10⁸) 7.41 11.74 +4.33 x86 ~1.58x mayor ancho de banda
BM_MemoryTest/6 Tiempo (ns) 88683.64 56292.07 -32391.57 x86 ~1.58x más rápido
  Bytes/sec (x10⁸) 7.39 11.64 +4.25 x86 ~1.58x mayor ancho de banda
BM_IntegerMath Tiempo (ns) 2669.91 1662.14 -1007.77 x86 ~1.61x más rápido
BM_FloatMath Tiempo (ns) 29387.26 15759.85 -13627.41 x86 ~1.86x más rápido
BM_BranchTest Tiempo (ns) 1347.01 837.10 -509.91 x86 ~1.61x más rápido

Notas:

  • Los datos de “bytes_per_sec” para operaciones matemáticas no son aplicables (0.00).
  • Las desviaciones estándar (stddev) fueron mínimas en ambos casos, indicando mediciones estables.
  • El coeficiente de variación (cv) es bajo, confirmando consistencia en los resultados.
  • Los resultados completos de los test están adjuntados al final del artículo.

Con esto podemos decir que el Intel Celeron N2830 es aproximadamente 1.58x más rápido en ambos tests de memoria (BM_MemoryTest/0 y /6) ademas de contar con mayor ancho de banda con un aproximado de ~11.7 vs ~7.4 x10⁸ bytes/sec. En operaciones matemáticas tenemos dos variables, en enteros, x86_64 es 1.61x más rápido (1662 ns vs 2669 ns) mientras que en flotantes la ventaja de x86_64 aumenta a 1.86x (15759 ns vs 29387 ns). Por último, en la prediccion de saltos o “Branch Prediction” x86_64 es 1.61x más rápido en pruebas de bifurcación.


Sysbench

Es un clásico esta herramienta de benchmarking y pruebas de rendimiento multiplataforma (Linux, Windows, macOS), diseñada para evaluar diferentes aspectos de un sistema, como lo es cpu, memoria, almacenamiento y bases de datos. En este caso hice pruebas en la CPU y la memoria.

Métrica BCM2711 Celeron N2830 Diferencia Rendimiento Relativo
CPU - Eventos/seg 579.89 192.83 +387.06 arm64 ~3x más rápido
CPU - Latencia (avg) 1.72 ms 5.18 ms -3.46 ms arm64 3x menor latencia
Memoria - MiB/seg 2012.37 MiB/s 2222.12 MiB/s -209.75 MiB/s amd64 ~1.1x más rápido
Memoria - Operaciones/seg 2,060,663.64 ops/s 2,275,448.35 ops/s -214,784.71 ops/s amd64 ~1.1x más rendimiento

Aquí las conclusiones son arrolladoras, la Raspberry Pi 4 domina ampliamente en rendimiento de CPU (3x más eventos/seg y latencia 3x menor). Lo que significa que el Celeron N2830 tiene un rendimiento significativamente menor (66.7% menos eventos/seg). Cuando hablamos de memoria, N2830 es ligeramente mejor (~10%) en velocidad de escritura y rendimiento. Supongo que se debe a tener un bus de 64bits frente a los 32bits de arm64. A nivel general, podemos ver que si el uso es CPU-intensivo como llega a ser servidores, cálculos, programas o navegación por internet, el BCM2711 es claramente superior. Por otro lado, para cargas centradas en memoria (ej. bases de datos), el Celeron N8230 tiene una ligera ventaja.


Timed Mesa Compilation

Decidí incluir un benchmark de la phoronix-test-suite a esta comparativa para tener alguna idea más precisa. Luego de intentar por una buena cantidad de tiempo, por fin pude ejecutar en ambos sistemas la prueba de Timed Mesa Compilation, una breve prueba de cuánto tiempo lleva compilar Mesa con Meson/Ninja. Al principio presento fallos debido a que descargaba y compilaba la versión 21, sin embargo, en artículos recientes de Phoronix vi que usaban Mesa 24 o lo que es dentro de la suite la versión build-mesa-1.1.0. Después de un tiempo, por fin pudo funcionar correctamente. Debo admitir que intenté hacer otros test, pero la paciencia me terminó ganando debido a que bajaba versiones desactualizadas. Sin más, aquí los resultados:

Métrica ARMv8 Cortex-A72 (RPi 4) Intel Celeron N2830 (x86) Diferencia (ARM - Intel) Diferencia % (vs Intel)
Tiempo (segundos) 727.452 1017.378 -289.926 -28.5% (más rápido)
Error Estándar ±2.08 ±3.84 -1.76 -45.8%
Desviación Estándar 0.50% 0.65% -0.15% -23.1%

Sin duda alguna, el ARM Cortex-A72 supera significativamente al Intel Celeron N2830 en esta prueba (+28.5% de velocidad). Curiosamente, el ARM también muestra una ligera menor cantidad de variabilidad.


Geekbench 6.4

Se trata de uno de los benchmarks mas famosos del mundo por lo que ire al grano. A nivel general:

Métrica Raspberry Pi 4 (ARM A72) Celeron N2830 (x86) Diferencia (%)
Single-Core Score 257 182 +41.2% (Pi 4 mejor)
Multi-Core Score 536 251 +113.5% (Pi 4 más del doble)

A nivel single-core este es un destacado de las pruebas mas relevantes:

Prueba Pi 4 (A72) N2830 (x86) Diferencia (%)
File Compression 278 (39.9 MB/s) 248 (35.6 MB/s) +12.1%
HTML5 Browser 337 (6.89 p/s) 289 (5.91 p/s) +16.6%
PDF Renderer 390 (8.99 Mp/s) 373 (8.60 Mp/s) +4.6%
Clang (Compilación) 360 (1.77 Klines/s) 343 (1.69 Klines/s) +5.0%
Ray Tracer 308 (298.3 Kp/s) 243 (235.4 Kp/s) +26.7%

La Pi 4 supera al Celeron N2830 en todas las pruebas single-core, con mejoras de 4.6% a 41.2%.

Cuando hablamos del multi-core:

Prueba Pi 4 (A72) N2830 (x86) Diferencia (%)
File Compression 306 (43.9 MB/s) 324 (46.6 MB/s) -5.6% (N2830 mejor)
HTML5 Browser 722 (14.8 p/s) 291 (5.96 p/s) +148.1% (Pi 4 domina)
Clang (Compilación) 1004 (4.94 Klines/s) 605 (2.98 Klines/s) +66.0%
Asset Compression 1273 (39.4 MB/s) 582 (18.0 MB/s) +118.7%

Cuando hablamos de rendimiento de varios núcleos, la Pi 4 es muy superior en multi-core siendo hasta +148% en navegación web. El único caso donde se queda por detrás es en la compresión de archivos, el N2830 es 5.6% más rápido (posiblemente por mejor soporte de instrucciones x86). Ya a un nivel general, la Pi 4 es superior en ambos escenarios, pero su ventaja es mucho más notable en multi-core debido a su arquitectura y los núcleos adicionales. En el ámbito Single-Core sus diferencias son algo más moderadas (~25-30%), excepto en puntuación general (+41%). Aunque sigue siendo impresionante desde mi punto de vista. Por otro lado, en multi-Core la Pi 4 domina, con casi el doble de rendimiento en cargas optimizadas para paralelismo.


pytest-benchmark

Hablamos de un plugin para pytest (el popular framework de testing en Python) diseñado específicamente para medir y comparar el rendimiento de tu código Python mediante benchmarks. El código que se ejecuto en este caso es este:

import pytest
import random
import math

# 1. Prueba de operaciones matemáticas
def test_factorial(benchmark):
    def factorial(n):
        return 1 if n <= 1 else n * factorial(n-1)

    benchmark(factorial, 100)

# 2. Prueba de acceso a listas
def test_list_operations(benchmark):
    def list_ops(size):
        lst = list(range(size))
        random.shuffle(lst)
        return sorted(lst)

    benchmark(list_ops, 1000)

# 3. Prueba de operaciones con strings
def test_string_manipulation(benchmark):
    def str_ops(times):
        s = ''
        for i in range(times):
            s += str(i)
        return s

    benchmark(str_ops, 1000)

# 4. Prueba de operaciones NumPy (opcional)
def test_numpy_operations(benchmark):
    numpy = pytest.importorskip("numpy")  # Requiere numpy instalado
    def numpy_ops(size):
        a = numpy.random.rand(size)
        return numpy.fft.fft(a)

    benchmark(numpy_ops, 1024)

# 5. Prueba con parámetros variables
@pytest.mark.parametrize("size", [10, 100, 1000])
def test_with_parameters(benchmark, size):
    benchmark(lambda: sum(range(size)))

Explicaré brevemente lo que evalua este codigo, en test_factorial se hace un cálculo recursivo del factorial de 100 cuyo efecto es medir la velocidad de operaciones matemáticas recursivas (CPU-bound). Para test_list_operations se hace la creación, mezcla y ordenamiento de una lista, donde al final se evalua el rendimiento en manipulación de listas (memoria y algoritmos). Por otro lado, en test_string_manipulation se hace una concatenación de strings en un bucle y como tal sirve para probar la eficiencia de operaciones con strings (inmutabilidad en Python). En test_numpy_operations se compara el rendimiento en cálculos científicos y por último, en test_with_parameters interesa analizar cómo escala el rendimiento con diferentes volúmenes de datos.

Test arm64_mean (s) amd64_mean (s) Δ Mean (%) arm64_ops amd64_ops Δ Ops (%)
test_numpy_operations 0.000076 0.000169 +121.40 13,226.42 5,973.96 −54.83
test_factorial 0.000049 0.000071 +44.41 20,448.96 14,160.58 −30.75
test_with_parameters[10] 0.000001437 0.000001769 +23.13 696,028.62 565,265.30 −18.79
test_with_parameters[100] 0.000003003 0.000003389 +12.86 332,926.63 294,992.13 −11.39
test_with_parameters[1000] 0.00003125 0.00003142 +0.54 32,006.05 31,835.65 −0.53
test_string_manipulation 0.0003955 0.0004339 +9.47 2,528.69 2,309.93 −8.65
test_list_operations 0.001195 0.001053 −11.80 837.00 949.03 +13.38

En general ARM64 muestra mejor rendimiento en la mayoría de las pruebas, especialmente en operaciones numéricas (test_numpy_operations, test_factorial), donde supera a AMD64 por márgenes significativos (+121.4% y +44.41% respectivamente). Sorprendente es que AMD64 solo supera a ARM64 en test_list_operations (−11.8% en tiempo, +13.38% en operaciones por segundo), lo que sugiere que su arquitectura puede manejar mejor ciertas operaciones con listas. Estos resultados me hacen pensar que un Bay-trail de 4 nucleos seria capaz de plantar cara de tu a tu contra una raspberry pi 4, por lo menos en este enfoque. A un nivel masivo, las diferencias se reducen en cargas escalables (1000) lo que da a entender que la elección de arquitectura es menos crítica.


7zip

Comprimir y descomprimir, algo muy normal en el mundo cotidiano. Por suerte 7zip tiene su benchmark integrado, aqui los resultados:

7zip Pi 4 (A72) N2830 (x86) Diferencia (%)
Compresión (KiB/s) 3,810 (Avr) 2,693 (Avr) +41.5% (Pi 4 más rápido)
Descompresión (KiB/s) 6,331 (Avr) 4,045 (Avr) +56.5% (Pi 4 más rápido)
MIPS (Compresión) 1,129 1,620 -30.3% (N2830 tiene mejor IPC)
MIPS (Descomp.) 1,590 2,032 -21.8% (N2830 más eficiente)
Rating Total 5,070 3,369 +50.5% (Pi 4 mejor puntuación)

En compresión, la Raspberry Pi 4 es un +41.5% más rápido que un Celeron N2830. En descompresión, esta diferencia se eleva a un +56.5%. Ahora esto no significa que sea una paliza en todo el sentido, ya que en términos de eficiencia por ciclo de instrucción (MIPS) cambia un poco la cosa. X86 sigue manteniendo mayor eficiencia por ciclo gracias a su arquitectura, tomando una ventaja del 30.3% en compresión en comparación con la Pi 4. Tendencia que se mantiene en la descompresión, llegando a una ventaja del 21.8%. Como dato no menos importante, la Pi 4 usa unos 882 MB (48% de su RAM) en comparación al N2830 que usa 441 MB (24% de su RAM). Diferencia que se comprende en tanto la Pi 4 necesita asignar más memoria para optimizar el rendimiento


Silverbench

Es una herramienta de benchmarking online diseñada principalmente para evaluar el rendimiento de la CPU tanto de computadores como moviles. Su particularidad es que funciona completamente en el navegador, utilizando JavaScript y un motor de renderizado de mapeo de fotones para simular cargas de trabajo exigentes.

Sistema Puntuación SilverBench Diferencia
Intel Celeron N2830 (x86, 2 núcleos @ 2.16 GHz) 1920 pts +8.2% frente al Pi 4
Raspberry Pi 4 (ARM Cortex-A72, 4 núcleos @ 1.5 GHz) 1775 pts  

Aquí podríamos afirmar con cierta duda que gracias a una mayor frecuencia (2.16 GHz vs 1.5 GHz) y mejor IPC en ciertas cargas es debido a que sale ganando nuestro N2830 que como ya habíamos podido confirmar antes, tiene instrucciones x86 optimizadas para operaciones matemáticas simples, lo que lo hace destacar en benchmarks sintéticos como SilverBench.


hdparm

Nuestra ultima prueba se reduce a ver la potencia del disco en nuestro sistemas, ya muy conocida por cierto al ahora de medir el desempeño. Aqui estan los resultados:

Métrica Raspberry Pi 4 (microSD /dev/mmcblk0) Celeron N2830 (HDD SATA /dev/sda)
Cached Reads (MB/sec) 980.52 1439.43
Buffered Disk Reads (MB/sec) 43.24 120.31

A nivel general, no se puede sorprender, un HDD SATA sigue siendo mucho más rápido que una microsd clase 10. Hablamos de casi un +178% de mejoría frente la Raspberry Pi 4. En mi caso necesitaba de estos datos, ya que estoy llevando a cabo un proyecto de mejorar la raspberry pi y necesito algunos números de referencia




Conclusiones:

Después de todo esto, puedo decir que, en primer lugar, para el ambiente multihilo, es decir, las cargas paralelizables se realizan en la Rasbperry Pi 4 de forma increíble gracias a sus 4 núcleos (vs 2 del N2830). Esto en benchmarks y numeros se refleja en casos como Geekbench 6 Multi-Core: +113.5% (536 vs 251 pts) o cuando se hizo la compilación de Mesa siendo un 28.5% más rápida, y como olvidar la prueba de sysbench CPU teniendo casi 3x más eventos/seg y una latencia 3x menor. En el caso de mononucleo el N2830 es más eficiente por ciclo (mayor IPC en x86), pero su limitación de 2 núcleos lo hace perder en rendimiento bruto, mientras en los benchmarks sintéticos (SilverBench), el N2830 supera al Pi 4 en un 8.2% debido a su mayor frecuencia (2.16 GHz vs 1.5 GHz) y optimizaciones para operaciones matemáticas simples. Cuando nos referimos a la memoria y ancho de banda, en este último el N2830 tiene ventaja (~1.58x mayor en libbenchmark) debido a su bus de memoria de 64 bits (vs 32 bits del Pi 4) y que aun logra conservar cierta distancia en la prueba de sysbench que hace uso de la memoria, el N2830 es ~10% más rápido en operaciones secuenciales. Empero, la Pi 4 compensa con mejor gestión de caché y paralelismo en cargas multihilo. En almacenamiento de momento, no mucho más que decir, el HDD es 2.78x más rápido que la microsd, espero dentro de poco hacer un upgrade para ver que tanto puede hacer un rp4 sin limitaciones. Por último, en el apartado multimedia, la Raspberry Pi 4 claramente es superior, tanto a nivel de apis como soporte para codificar y descodificar (algo que se “perdió” con la Rpi5) así como cuando hablamos del nivel de eficiencia energética.

Espero que sea de ayuda esta comparativa para quien la necesite. A continuación, los anexos donde están todas las pruebas de los resultados.




Anexos:

Resultados Libbenchmark en Rp4:

python3 resultados.py
                      name       time_ns  iterations  bytes_per_sec
0          BM_MemoryTest/0   1381.061364     2027382   7.414587e+08
1          BM_MemoryTest/0   1381.080228     2027382   7.414486e+08
2          BM_MemoryTest/0   1381.089508     2027382   7.414436e+08
3     BM_MemoryTest/0_mean   1381.077033           3   7.414503e+08
4   BM_MemoryTest/0_median   1381.080228           3   7.414486e+08
5   BM_MemoryTest/0_stddev      0.014341           3   7.699310e+03
6       BM_MemoryTest/0_cv      0.000010           3   1.038412e-05
7          BM_MemoryTest/6  88686.139152       31577   7.389655e+08
8          BM_MemoryTest/6  88683.999652       31577   7.389834e+08
9          BM_MemoryTest/6  88680.784527       31577   7.390102e+08
10    BM_MemoryTest/6_mean  88683.641110           3   7.389863e+08
11  BM_MemoryTest/6_median  88683.999652           3   7.389834e+08
12  BM_MemoryTest/6_stddev      2.695258           3   2.245928e+04
13      BM_MemoryTest/6_cv      0.000030           3   3.039201e-05
14          BM_IntegerMath   2669.947300     1048863   0.000000e+00
15          BM_IntegerMath   2669.874466     1048863   0.000000e+00
16          BM_IntegerMath   2669.896879     1048863   0.000000e+00
17     BM_IntegerMath_mean   2669.906215           3   0.000000e+00
18   BM_IntegerMath_median   2669.896879           3   0.000000e+00
19   BM_IntegerMath_stddev      0.037304           3   0.000000e+00
20       BM_IntegerMath_cv      0.000014           3   0.000000e+00
21            BM_FloatMath  29387.805175       95347   0.000000e+00
22            BM_FloatMath  29383.126013       95347   0.000000e+00
23            BM_FloatMath  29390.839156       95347   0.000000e+00
24       BM_FloatMath_mean  29387.256781           3   0.000000e+00
25     BM_FloatMath_median  29387.805175           3   0.000000e+00
26     BM_FloatMath_stddev      3.885704           3   0.000000e+00
27         BM_FloatMath_cv      0.000132           3   0.000000e+00
28           BM_BranchTest   1347.014459     2078667   0.000000e+00
29           BM_BranchTest   1347.038835     2078667   0.000000e+00
30           BM_BranchTest   1346.972099     2078667   0.000000e+00
31      BM_BranchTest_mean   1347.008464           3   0.000000e+00
32    BM_BranchTest_median   1347.014459           3   0.000000e+00
33    BM_BranchTest_stddev      0.033769           3   0.000000e+00
34        BM_BranchTest_cv      0.000025           3   0.000000e+00

Resultados Libbenchmark en N2830:

python3 resultados.py
                      name       time_ns  iterations  bytes_per_sec
0          BM_MemoryTest/0    872.043367     3211852   1.174254e+09
1          BM_MemoryTest/0    872.005919     3211852   1.174304e+09
2          BM_MemoryTest/0    871.867722     3211852   1.174490e+09
3     BM_MemoryTest/0_mean    871.972336           3   1.174349e+09
4   BM_MemoryTest/0_median    872.005919           3   1.174304e+09
5   BM_MemoryTest/0_stddev      0.092513           3   1.246001e+05
6       BM_MemoryTest/0_cv      0.000106           3   1.061014e-04
7          BM_MemoryTest/6  56293.993405       49736   1.164174e+09
8          BM_MemoryTest/6  56293.714714       49736   1.164180e+09
9          BM_MemoryTest/6  56288.516487       49736   1.164287e+09
10    BM_MemoryTest/6_mean  56292.074869           3   1.164214e+09
11  BM_MemoryTest/6_median  56293.714714           3   1.164180e+09
12  BM_MemoryTest/6_stddev      3.084798           3   6.380074e+04
13      BM_MemoryTest/6_cv      0.000055           3   5.480157e-05
14          BM_IntegerMath   1662.140337     1684551   0.000000e+00
15          BM_IntegerMath   1662.137695     1684551   0.000000e+00
16          BM_IntegerMath   1662.132615     1684551   0.000000e+00
17     BM_IntegerMath_mean   1662.136882           3   0.000000e+00
18   BM_IntegerMath_median   1662.137695           3   0.000000e+00
19   BM_IntegerMath_stddev      0.003925           3   0.000000e+00
20       BM_IntegerMath_cv      0.000002           3   0.000000e+00
21            BM_FloatMath  15759.737304      177654   0.000000e+00
22            BM_FloatMath  15759.897531      177654   0.000000e+00
23            BM_FloatMath  15759.906847      177654   0.000000e+00
24       BM_FloatMath_mean  15759.847227           3   0.000000e+00
25     BM_FloatMath_median  15759.897531           3   0.000000e+00
26     BM_FloatMath_stddev      0.095311           3   0.000000e+00
27         BM_FloatMath_cv      0.000006           3   0.000000e+00
28           BM_BranchTest    837.078773     3344630   0.000000e+00
29           BM_BranchTest    837.114307     3344630   0.000000e+00
30           BM_BranchTest    837.103385     3344630   0.000000e+00
31      BM_BranchTest_mean    837.098822           3   0.000000e+00
32    BM_BranchTest_median    837.103385           3   0.000000e+00
33    BM_BranchTest_stddev      0.018201           3   0.000000e+00
34        BM_BranchTest_cv      0.000022           3   0.000000e+00

Resultados Sysbench CPU en Rp4:

sysbench cpu --cpu-max-prime=20000 run
sysbench 1.0.20 (using system LuaJIT 2.1.0-beta3)

Running the test with following options:
Number of threads: 1
Initializing random number generator from current time


Prime numbers limit: 20000

Initializing worker threads...

Threads started!

CPU speed:
    events per second:   579.89

General statistics:
    total time:                          10.0013s
    total number of events:              5802

Latency (ms):
         min:                                    1.71
         avg:                                    1.72
         max:                                    3.81
         95th percentile:                        1.73
         sum:                                 9998.30

Threads fairness:
    events (avg/stddev):           5802.0000/0.00
    execution time (avg/stddev):   9.9983/0.00

Resultados Sysbench memoria en Rp4:

sysbench memory run
sysbench 1.0.20 (using system LuaJIT 2.1.0-beta3)

Running the test with following options:
Number of threads: 1
Initializing random number generator from current time


Running memory speed test with the following options:
  block size: 1KiB
  total size: 102400MiB
  operation: write
  scope: global

Initializing worker threads...

Threads started!

Total operations: 20615013 (2060663.64 per second)

20131.85 MiB transferred (2012.37 MiB/sec)


General statistics:
    total time:                          10.0001s
    total number of events:              20615013

Latency (ms):
         min:                                    0.00
         avg:                                    0.00
         max:                                    1.77
         95th percentile:                        0.00
         sum:                                 4862.72

Threads fairness:
    events (avg/stddev):           20615013.0000/0.00
    execution time (avg/stddev):   4.8627/0.00

Resultados Sysbench CPU en N2830:

sysbench cpu --cpu-max-prime=20000 run
sysbench 1.0.20 (using system LuaJIT 2.1.0-beta3)

Running the test with following options:
Number of threads: 1
Initializing random number generator from current time


Prime numbers limit: 20000

Initializing worker threads...

Threads started!

CPU speed:
    events per second:   192.83

General statistics:
    total time:                          10.0012s
    total number of events:              1929

Latency (ms):
         min:                                    5.18
         avg:                                    5.18
         max:                                    6.17
         95th percentile:                        5.18
         sum:                                 9998.73

Threads fairness:
    events (avg/stddev):           1929.0000/0.00
    execution time (avg/stddev):   9.9987/0.00

Resultados Sysbench memoria en N2830:

sysbench memory run
sysbench 1.0.20 (using system LuaJIT 2.1.0-beta3)

Running the test with following options:
Number of threads: 1
Initializing random number generator from current time


Running memory speed test with the following options:
  block size: 1KiB
  total size: 102400MiB
  operation: write
  scope: global

Initializing worker threads...

Threads started!

Total operations: 22760459 (2275448.35 per second)

22227.01 MiB transferred (2222.12 MiB/sec)


General statistics:
    total time:                          10.0001s
    total number of events:              22760459

Latency (ms):
         min:                                    0.00
         avg:                                    0.00
         max:                                    0.19
         95th percentile:                        0.00
         sum:                                 4921.46

Threads fairness:
    events (avg/stddev):           22760459.0000/0.00
    execution time (avg/stddev):   4.9215/0.00
  • Resultados del tiempo de compilacion de mesa 24 en Raspberry Pi 4
  • Resultados del tiempo de compilacion de mesa 24 en N2830
  • Resultados de Geekbench 6.4 en Raspberry Pi 4
  • Resultados de Geekbench 6.4 en N2830
  • Resultados completos de pytest aqui.

Resultados 7zip en Rp4:

7z b

7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=es_CO,Utf16=on,HugeFiles=on,64 bits,4 CPUs LE)

LE
CPU Freq: - - - - - - - - -

RAM size:    1826 MB,  # CPU hardware threads:   4
RAM usage:    882 MB,  # Benchmark threads:      4

                       Compressing  |                  Decompressing
Dict     Speed Usage    R/U Rating  |      Speed Usage    R/U Rating
         KiB/s     %   MIPS   MIPS  |      KiB/s     %   MIPS   MIPS

22:       3997   341   1140   3889  |      74487   398   1596   6355
23:       3837   351   1115   3910  |      73425   398   1594   6353
24:       3755   360   1122   4038  |      72203   399   1590   6338
25:       2980   299   1137   3403  |      70521   398   1578   6276
----------------------------------  | ------------------------------
Avr:             338   1129   3810  |              398   1590   6331
Tot:             368   1359   5070

Resultados 7zip en n2380:

7z b

7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=es_CO.UTF-8,Utf16=on,HugeFiles=on,64 bits,2 CPUs Intel(R) Celeron(R) CPU  N2830  @ 2.16GHz (30678),ASM)

      Intel(R) Celeron(R) CPU  N2830  @ 2.16GHz (30678)
CPU Freq: 64000000 64000000 - - - - - - -

RAM size:    1860 MB,  # CPU hardware threads:   2
RAM usage:    441 MB,  # Benchmark threads:      2

                       Compressing  |                  Decompressing
Dict     Speed Usage    R/U Rating  |      Speed Usage    R/U Rating
         KiB/s     %   MIPS   MIPS  |      KiB/s     %   MIPS   MIPS

22:       2665   161   1611   2593  |      47502   199   2039   4056
23:       2524   158   1627   2572  |      46841   199   2036   4055
24:       2552   168   1633   2744  |      45993   199   2029   4038
25:       2507   178   1611   2863  |      45284   199   2026   4031
----------------------------------  | ------------------------------
Avr:             166   1620   2693  |              199   2032   4045
Tot:             183   1826   3369

Imagen de SilverBench en rp4: Texto alternativo de la imagen

Imagen de SilverBench en n2380: Texto alternativo de la imagen

Resultados hdparm en rpi4:

luis@raspberrypi:~ $ lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
mmcblk0     179:0    0   29G  0 disk
|-mmcblk0p1 179:1    0  512M  0 part /boot/firmware
`-mmcblk0p2 179:2    0 28,5G  0 part /
luis@raspberrypi:~ $ sudo hdparm -tT /dev/mmcblk0

/dev/mmcblk0:
 Timing cached reads:   1960 MB in  2.00 seconds = 980.52 MB/sec
 Timing buffered disk reads: 130 MB in  3.01 seconds =  43.24 MB/sec

Resultados hdparm en n2380:

luis@debian-n2830:~$ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda      8:0    0 465,8G  0 disk
├─sda1   8:1    0   512M  0 part /boot/efi
├─sda2   8:2    0 464,3G  0 part /
└─sda3   8:3    0   976M  0 part [SWAP]
luis@debian-n2830:~$ sudo hdparm -tT /dev/sda

/dev/sda:
 Timing cached reads:   2872 MB in  2.00 seconds = 1439.43 MB/sec
 Timing buffered disk reads: 362 MB in  3.01 seconds = 120.31 MB/sec




Bibliografia:

https://docs.broadcom.com/doc/12358545

https://en.wikipedia.org/wiki/VideoCore

Sobre las “8 slices”: Es en este punto donde hay cierta confusión. Las especificaciones de Broadcom de la VideoCore VI indican 4 QPUs. Sin embargo, algunas fuentes y herramientas de depuración reportan 8 QPUs debido a la forma en que se organizan los “slices” dentro de la GPU. Para propósitos de comparación general, se suele referir a ella como una mejora significativa sobre la VideoCore IV. Todo esto a raiz de que la VideoCore VI tiene “slices” que contienen las QPUs. Mientras que se pueden contabilizar 8 QPUs en total de forma interna, la arquitectura es diferente a la de las VideoCore IV y VII. Para simplificar, la cifra de “4 QPUs” se utiliza comúnmente en las especificaciones oficiales de la VC6.

https://forum.rvspace.org/t/has-anyone-here-had-the-guts-to-delid-the-cpu-and-grab-a-die-shot/1080/3