Quiero portar un pequeño fragmento de código en el procesador ARM Cortex A8. Tanto el caché L1 como el caché L2 son muy limitados. Hay 3 arreglos en mi programa. Dos de ellos se acceden secuencialmente (tamaño> Matriz A: 6 MB y Matriz B: 3 MB) y el patrón de acceso para el tercer conjunto (tamaño> Matriz C: 3 MB) es impredecible. Aunque los cálculos no son muy rigurosos, pero hay enormes fallas de caché para acceder a la matriz C. Una solución que pensé sería asignar más espacio en caché (L2) para la matriz C y menos para la matriz A & B. Pero no puedo para encontrar cualquier forma de lograr esto. Pasé por el motor de precarga de ARM pero no pude encontrar nada útil.Optimizar el uso de la memoria caché ARM para diferentes matrices
Respuesta
Sería una buena idea dividir el caché y asignar cada arreglo en una parte diferente del mismo.
Desafortunadamente eso no es posible. Los cachés de CortexA8 simplemente no son tan flexibles. El buen viejo StrongArm tenía un caché secundario para exactamente este propósito de división, pero ya no está disponible. Tenemos cachés L1 y L2 en su lugar (en general un cambio bueno en mi humilde opinión.)
Sin embargo, hay una cosa que puede hacer:
La unidad NEON SIMD de la CortexA8 va a la zaga de la unidad de procesamiento de propósito general en un 10 ciclos de procesador. Con la programación inteligente puede emitir prefijos de caché desde la unidad de propósito general, pero hacer los accesos a través de NEON. La demora entre las dos canalizaciones da a la memoria caché un poco de tiempo para realizar las captaciones previas, por lo que el tiempo de caché promedio será menor.
El inconveniente es que si nunca debe mover el resultado de un cálculo desde NEON a la unidad ARM. Como NEON queda rezagado, se producirá un enjuague completo de la CPU. Casi si no es incluso más costoso que un error de caché.
La diferencia en el rendimiento puede ser significativa. De la nada, esperaría algo entre 20% y 30% de mejora en la velocidad.
Según lo que pude encontrar a través de Google, parece que ARMv7 (que es la versión del ISA que admite Cortex A8) tiene capacidad de caché, aunque no pude encontrar una referencia clara sobre cómo usarlo - - Quizás puedas hacerlo mejor si pasas más tiempo en él que uno o dos minutos que pasé escribiendo "Flush en caché ARM" en un cuadro de búsqueda y leyendo los resultados.
En cualquier caso, debe poder lograr una aproximación de lo que desea al emitir periódicamente instrucciones de "descarga" para eliminar las partes de A y B que sabe que ya no necesita.
- 1. Optimizar el uso de memoria en numpy
- 2. ¿Protege mprotect la memoria caché de instrucciones en ARM Linux?
- 3. ¿Cómo optimizar el uso de la memoria del proceso php?
- 4. Uso de la asignación de memoria dinámica para matrices
- 5. El uso de Map Maker para crear una memoria caché
- 6. ¿Cómo uso la memoria caché en CakePHP?
- 7. Optimizar APC almacenamiento en caché
- 8. Uso de objdump para arquitectura ARM: Desarmado a ARM
- 9. Uso de la memoria Python de las matrices numpy
- 10. El uso de malloc para la asignación de matrices multidimensionales con diferentes longitudes fila
- 11. Optimizar el uso de Ramdisk para desarrollo Eclipse
- 12. APC uso de la caché de memoria solamente 32M
- 13. Optimizar el uso de memoria de una colección de cadenas en Java
- 14. Borrar la memoria caché de Sitecore para un elemento de la memoria caché mediante programación
- 15. El uso de bucles para crear matrices
- 16. Problemas para configurar la memoria caché de Hibernate - org.hibernate.cache.NoCachingEnabledException: la memoria caché de segundo nivel no está habilitada para el uso
- 17. ¿Cómo uso la memoria caché en kettle pentaho?
- 18. cómo optimizar la multiplicación de matrices con OpenACC?
- 19. ¿Los diferentes fabricantes de ARM ofrecen diferentes conjuntos de instrucciones?
- 20. cómo configurar la memoria caché para el archivo css/js
- 21. Optimizar la consulta de MySQL para evitar "Uso de; Uso temporal; Uso de filesort"
- 22. Compilar y optimizar para diferentes arquitecturas de destino
- 23. Uso de malloc de newlib en un ARM Cortex-M3
- 24. Uso de Guava para el almacenamiento en memoria caché seguro de alto rendimiento
- 25. ¿Cómo funciona la memoria caché?
- 26. Diccionario/memoria caché con respaldo de disco para C#
- 27. Cualquier caché de Java que pueda limitar el uso de memoria de la caché en memoria, no solo el recuento de instancias?
- 28. Configuración de Java para Netbeans 6.8 en OSX 10.5.8 para optimizar el uso de la CPU
- 29. Caché Postgresql (memoria) rendimiento + cómo calentar el caché
- 30. tecnología de memoria caché distribuida