Solo conozco las ideas básicas sobre la asignación de memoria alineada. Pero no me importó mucho alinear el problema porque no soy un programador de ensamblaje, tampoco tenía experiencia con MMX/SIMD. Y creo que esta es una de las optimizaciones prematuras.¿Pagará la asignación de memoria alineada con la línea de caché?
En estos días, las personas dicen cada vez más acerca de la memoria caché, la coherencia de la memoria caché, la optimización del tamaño, etc. Algunos códigos fuente incluso asignan memoria alineada explícitamente en las líneas de caché de la CPU.
Francamente, no sé cuánto es el tamaño de la línea de caché de mi CPU i7. Sé que no habrá daños con alineación de gran tamaño. ¿Pero realmente valdrá la pena, sin SIMD?
Digamos que hay 100000 elementos de datos de 100 bytes en un programa. Y el acceso a estos datos es el trabajo más intenso del programa.
Si cambiamos la estructura de datos y hacemos todos los datos de tamaño de 100 bytes alineados por 16 bytes, ¿es posible obtener una ganancia de rendimiento notable? 10%? 5%?
Hablando de optimización prematura, ¿sabía usted que los buenos algoritmos a menudo pueden dar cientos o miles de incrementos de velocidad por ciento para conjuntos de datos más grandes (y aún más para uno mayor)?;) Los detalles sobre qué tan bien el programa juega con la memoria caché se encuentran en la lista de computación de alto rendimiento, pero para la mayoría de las aplicaciones, nunca importará. – delnan
Creo que 64bytes es un tamaño de línea de caché común, no de 16bytes. –
Obtuve una mejora diez veces mayor de un algoritmo una vez mediante la alineación de caché y la recuperación previa de sus accesos de memoria. – Crashworks