La siguiente Figura muestra los tipos de memoria en las GPUs y el ámbito de acceso de cada elemento
Figura 1. Los diferentes tipos de memoria en la GPU
Cada una de ellas tiene unos propósitos concretos que pasamos a detallar: Los registros y la memoria local son espacios de memoria accesibles únicamente por el hilo al que pertenecen. Por otro lado, a la memoria compartida pueden acceder todos los hilos del mismo bloque, utilizando para ello mecanismos de sincronización que mantienen el orden en las lecturas y escrituras. Al resto de memorias se puede acceder desde toda la malla que ejecuta un kernel. Se distinguen en que la memoria global no dispone de memoria caché, la memoria de constantes es de sólo lectura, y la memoria de texturas dispone de una caché espacial.
El cuello de botella principal lo encontramos en la transferencia de memoria entre la CPU y la GPU, de modo que la penalización nos la encontramos en la latencia del acceso a la memoria global (entre 400 y 600 ciclos). Como solución posible se plantea el alineamiento de la memoria global para poder hacer lecturas ordenadas según la posición de cada hilo dentro de la tanda, se puede utilizar la memoria compartida para hacer la ordenación dentro de cada bloque. No siempre es posible hacer esta ordenación y el problema se complica cuando aumentan las dimensiones (matrices por ejemplo).