martes, 27 de agosto de 2013

Identificación de un thread


CUDA identifica a cada thread de forma única. Para ello se apoya de ciertas variables incluidas en el driver:

  • blockIdx.x, blockIdx.y, blockIdx.z
    • Retornan el valor del ID del bloque en el eje x, y o z, respectivamente, del bloque que esté ejecutando el código dado.
  • blockDim.x, blockDim.y, blockDim.z
    • Retornan el valor de la dimensión del bloque, es decir, el número de threads en un bloque en el eje x, y o z.
  • threadIdx.x, threadIdx.y, threadIdx.z
    • Retornan el ID del thread en el eje x, y o z que está siendo ejecutado por el GPGPU en un bloque en particular.

De ésta forma, se puede expresar una colección de bloques, y una colección de threads dentro de un bloque, como un array 1D, 2D o 3D, lo cual puede ser de ayuda con información en 2D o 3D.

Ejemplo:

Suponer un grid de 1D (un grid se mapea directamente con una GPGPU), y una arquitectura de bloques de 1D con 4 bloques y cada uno con 8 threads.

Para identificar el ID Global del thread 26:

GlobalThreadID = blockIdx.x * blockDim.x + threadIdx.x
GlobalThreadID =         3       *         8         +      2
GlobalThreadID = 26       

No hay comentarios:

Publicar un comentario