CUDA gridDim,blockDim总是由用户定义?

时间:2012-09-26 07:08:36

标签: c++ c cuda

当我在内核调用时传递网格大小和线程数时,这些值是否总是和我传递的一样完全放在gridDim和blockDim中?

而且,blockIdx和threadIdx总是会遵守这些限制吗?

换句话说,拨打

kernel<<<5, 7>>>()

总是导致在内核中

gridDim.x == 5 && blockIdx.x < gridDim.x
blockDim.x == 7 && threadIdx.x < blockDim.x

以上条件举行? (同样适用于2D和3D尺寸和索引?)

我知道这可能听起来很愚蠢,但我想知道是否允许CUDA忽略资源分配的限制,因此程序员总是需要检查。

希望它清楚,谢谢!

1 个答案:

答案 0 :(得分:3)

是的,如果您在维度&lt;&lt;&lt;它将有5个块和每个块7个线程。 请注意,如果您在GPU的范围内操作,则效率最高。您应该使用warpsize从设备属性中读取,以获得卡的最大速度。根据需要使用大量线程,但块应该是warpize的倍数。

CUDA本身不会将您的线程/块更改为其他大小,因此您可以使用该地址。