El código optimizado para caché es mucho más rápido de lo que piensas

2025-05-07

Los programadores a menudo se centran en la complejidad algorítmica, pasando por alto el impacto de la jerarquía de memoria del hardware moderno en el rendimiento. Este artículo compara experimentalmente las diferencias de rendimiento entre el acceso a la memoria secuencial, indirecto y aleatorio. Los resultados muestran que el acceso secuencial es el más rápido, mientras que el acceso aleatorio es un orden de magnitud más lento. Optimizar los patrones de acceso a la memoria es crucial para el rendimiento; incluso las operaciones simples obtienen ganancias masivas con el diseño de memoria optimizado. El artículo aconseja considerar los patrones de acceso a la memoria al diseñar estructuras de datos y algoritmos, por ejemplo, colocando datos usados con frecuencia de forma contigua en la memoria para aprovechar el caché de la CPU y evitar fallos de caché.

Leer más
Desarrollo acceso a la memoria

Concurrencia en Haskell: Escape del Infierno de los Hilos

2025-04-17

Este artículo relata el viaje del autor desde el desarrollo de sistemas embebidos en C/C++/Rust hasta Haskell, destacando las ventajas de Haskell en la programación concurrente. Haskell utiliza hilos verdes y E/S dirigida por eventos, evitando las complejidades de los modelos tradicionales de hilos. A través del paquete `async` y STM (Software Transactional Memory), Haskell ofrece un enfoque más limpio y seguro para las tareas concurrentes. Funciones como `concurrently`, `race` y `mapConcurrently`, junto con estructuras de datos como `TVar` y `TBQueue`, simplifican las operaciones concurrentes y evitan problemas comunes de concurrencia, como bloqueos y condiciones de carrera.

Leer más
Desarrollo