2011-05-30 15 views
11

Si comienzo mi núcleo con una rejilla de hilo (sólo 1 cuadra por ejemplo):¿Cómo se clasifican los hilos CUDA en urdimbres?

dim3 threads(16,16); 

¿Cómo se esta rejilla ahora dividido en urdimbres? ¿Son las primeras dos filas de esta cuadrícula una distorsión, o las dos primeras columnas, o se ordena arbitrariamente? Supongamos una capacidad GPU Compute de 2,0 y un tamaño de urdimbre de 32.

Respuesta

23

Hilos están numerados en orden dentro de los bloques de modo que threadIdx.x varía el más rápido, a continuación, threadIdx.y la segunda más rápida variable, y threadIdx.z la Varying más lento. Esto es funcionalmente el mismo que el ordenamiento de columnas principales en matrices multidimensionales. Las deformaciones se construyen secuencialmente a partir de hilos en este orden. Por lo tanto, el cálculo para un bloque 2d es

unsigned int tid = threadIdx.x + threadIdx.y * blockDim.x; 
unsigned int warpid = tid/warpSize; 

Esto se describe en la guía de programación y en la guía PTX.

+6

Nota: "column-major order" asume que dim3 es una matriz, en lugar de una estructura. Una descripción más precisa es que '.x' es la variación más rápida de las dimensiones,' .y' es la segunda más rápida que varía, y '.z' varía más lentamente. La forma en que asocie '.x',' .y' y '.z' con filas, columnas, divisiones, compensaciones, niveles de árbol o cualquier otro direccionamiento dentro de la memoria depende de usted. – harrism

Cuestiones relacionadas