当我在内核调用中传递网格大小和线程数时,这些值是否将始终和传递时一样准确地放置在gridDim和blockDim中?而且,blockIdx和threadIdx会始终遵守这些限制吗?换句话说,kernel<<<5, 7>>>()总是导致内核中gridDim.x == 5 && blockIdx.x < gridDim.xblockDim.x == 7 && threadIdx.x < blockDim.x以上条件要举行? (是否同样具有2D和3D尺寸和索引?)我知道这听起来很愚蠢,但是我想知道是否允许CUDA忽略此资源分配限制,因此始终需要程序员进行检查。希望很清楚,谢谢! 最佳答案 是的,如果您在维度>>中启动内核,它将有5个块,每个块有7个线程。请注意,如果您在GPU范围内操作,则效率最高。您应该使用从设备属性读取的warpsize来获得卡的最大速度。根据需要使用很多线程,但是这些块应该是warpsize的倍数。CUDA本身不会将您的线程/块更改为另一种大小,因此您可以使用该地址。关于c++ - CUDA gridDim,blockDim总是用户定义的吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12596365/
10-13 05:26