"Coalescente" también puede referirse a patrones de acceso de memoria coalescente . En este uso, la fusión se utiliza para asegurarse de que los subprocesos se ejecutan simultáneamente, intente acceder a la memoria que está cerca. Esto generalmente se debe a que:
- La memoria generalmente se recupera en bloques grandes de la RAM.
- Algunas unidades de procesamiento intentarán predecir futuros accesos de memoria y caché por delante, mientras que aún procesan partes más antiguas de la memoria.
- La memoria se almacena en caché en una jerarquía de cachés sucesivamente más grandes pero más lentos.
Por lo tanto, es importante hacer programas que puedan usar patrones de memoria predecibles. Es aún más importante con un programa enhebrado, para que las solicitudes de memoria no salten por completo; de lo contrario, la unidad de procesamiento estará esperando que se llenen las solicitudes de memoria.
Diagramas inspirados en la Introducción a la programación en paralelo: Lección 2 Hardware de GPU y patrones de comunicación en paralelo :
Abajo: cuatro hilos, con acceso de memoria uniforme. El rectángulo punteado negro representa una solicitud de memoria de 4 palabras.
Los accesos a la memoria están cerca y se pueden recuperar de una vez / bloque (o el menor número de solicitudes).
Sin embargo, si aumentamos el " paso " del acceso entre los hilos, requerirá muchos más accesos a la memoria. Abajo: cuatro hilos más, con una zancada de dos.
Aquí puede ver que estos 4 subprocesos requieren 2 solicitudes de bloqueo de memoria. Cuanto más pequeño sea el paso, mejor. Cuanto más amplio sea el paso, más solicitudes serán potencialmente necesarias.
Por supuesto, peor que un gran paso de memoria es un patrón de acceso aleatorio a la memoria. Estos serán casi imposibles de canalizar, almacenar en caché o predecir.
Fuentes TikZ: