Este artículo de Solidean investiga la cantidad óptima de contigüidad de memoria lineal necesaria para un rendimiento máximo en cálculos de alta velocidad. La sabiduría convencional dicta que la memoria lineal y contigua siempre es la mejor opción, pero este estudio experimental desafía esa idea, demostrando que los beneficios de la contigüidad disminuyen a medida que el tamaño del bloque aumenta. El objetivo es determinar el tamaño de bloque más pequeño que aún permita amortizar la penalización de saltos entre bloques.
La investigación, realizada en un sistema Ryzen 9 7950X3D, utilizó un kernel de procesamiento escalar (kernel_scalar_stats) que simula el procesamiento de datos. El experimento controla cuidadosamente el entorno para aislar el impacto de la contigüidad de la memoria, clobberizando la caché antes de cada ejecución y aleatorizando la posición de los bloques en un espacio de memoria más grande. Los resultados revelan que bloques de 1 MB son suficientes para la mayoría de las cargas de trabajo, bloques de 128 kB son suficientes si se procesa un byte por ciclo, y bloques de 4 kB son suficientes si se superan los 10 ciclos por byte procesado. Estos hallazgos sugieren que la obsesión por la contigüidad extrema puede ser innecesaria y que trabajar con bloques más pequeños puede permitir estructuras de datos más flexibles.
El estudio también considera escenarios donde la caché está parcialmente precalentada, lo que permite un rendimiento más rápido con bloques más pequeños. Se presenta un kernel SIMD (kernel_simd_sum) para representar el procesamiento de alto rendimiento, mostrando que los principios generales siguen siendo válidos, aunque los tamaños de bloque óptimos pueden variar según la complejidad del procesamiento. En resumen, el artículo proporciona una guía práctica para optimizar el uso de la memoria en aplicaciones de alto rendimiento, desafiando la creencia de que la contigüidad extrema es siempre necesaria y ofreciendo un enfoque más pragmático basado en la experimentación.
