Según mi entender, la memoria compartida se divide en bancos y los accesos por múltiples hilos a un único elemento de datos dentro del mismo banco provocarán un conflicto (o emisión))Conflictos de banco de memoria compartida en CUDA: cómo se alinea la memoria con los bancos
En el momento en que asignar una bastante grande array que conceptualmente representa varios pares de dos matrices:
__shared__ float A[34*N]
Dónde N
es el número de pares y los primeros 16 flotadores de un par son uno matriz y los siguientes 18 carrozas son el segundo.
El problema es que el acceso a la primera matriz no tiene conflictos, pero el acceso al segundo tiene conflictos. Estos conflictos son inevitables, sin embargo, mi pensamiento es que debido a que la segunda matriz es 18 todas las matrices futuras estarán desalineadas a los bancos y, por lo tanto, ocurrirán más conflictos de los necesarios.
¿Es esto cierto? En caso afirmativo, ¿cómo puedo evitarlo?
Cada vez que asigno la memoria compartida, ¿comienza en un banco nuevo? Así que potencialmente podría hacer
__shared__ Apair1[34]
__shared__ Apair2[34]
...
¿Alguna idea?
Gracias
¿Puede explicar cómo está accediendo a los elementos? – Tom