La mejor manera de comprobar esto sería perfilar su código con el "Compute Visual Profiler"; esto viene con CUDA Toolkit. También hay una gran sección en GPU Gems 3 sobre esto - "39.2.3 Evitando Conflictos de Banco".
"Cuando varios hilos en el mismo acceso a la deformación del mismo banco, un conflicto banco se produce a menos que todos los hilos del acceso a la deformación de la misma dirección dentro de la misma palabra de 32 bits" - Lo primero que hay 16 bancos de memoria cada uno 4bytes de ancho Así que, esencialmente, si usted tiene cualquier tema en un medio urdimbre lectura de la memoria de las mismas 4bytes en un banco de memoria compartida, vas a tener conflictos bancarias y serialización etc.
OK para que el primer ejemplo:
en primer lugar permite asumen sus matrices son digamos por ejemplo del tipo int (una palabra de 32 bits). Su código guarda estas entradas en la memoria compartida, en cualquier medio warp el hilo Kth está guardando en el banco de memoria Kth. Entonces, por ejemplo, el subproceso 0 de la primera mitad de urdimbre se guardará en shared_a[0]
que está en el primer banco de memoria, el subproceso 1 se guardará en shared_a[1]
, cada mitad de urdimbre tiene 16 subprocesos estos mapas en los 16 bancos de 4 bytes. En la siguiente mitad warp, el primer hilo guardará ahora su valor en shared_a [16] que está en el primer banco de memoria . Entonces, si usa una palabra de 4 bytes como int, float, etc., su primer ejemplo no generará un conflicto bancario. Si usa una palabra de 1 byte como char, en la primera mitad los hilos de urdimbre 0, 1, 2 y 3 guardarán todos sus valores en el primer banco de memoria compartida que causará un conflicto bancario.
Segundo ejemplo:
Una vez más todo esto va a depender del tamaño de la palabra que está utilizando, pero para el ejemplo voy a usar una palabra 4byte. Así que buscando en la primera mitad de la urdimbre:
Número de hilos = 32
N = 64
Tema 0: escribirá a 0, 31, 63 Tema 1: escribirá a 1, 32
Todos los subprocesos de la mitad de la disformidad se ejecutan simultáneamente, por lo que las escrituras en la memoria compartida no deben causar conflictos bancarios. Sin embargo, tendré que revisar esta otra vez.
Espero que esto ayude, perdón por la gran respuesta!
256 qué? bytes? – fabrizioM
256 elementos en la matriz. – scatman