gpt4 book ai didi

c++ - CUDA gridDim、blockDim 总是用户定义的吗?

转载 作者:太空宇宙 更新时间:2023-11-04 02:12:14 25 4
gpt4 key购买 nike

当我在内核调用中传递网格大小和线程数时,这些值是否会始终完全按照我传递的那样放置在 gridDim 和 blockDim 中?

此外,blockIdx 和 threadIdx 是否始终遵守这些限制?

换句话说,调用

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

总是导致在内核中,

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

以上条件要持有吗? (对于 2D 和 3D 大小和索引也一样吗?)

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

希望清楚,谢谢!

最佳答案

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

CUDA 本身不会将您的线程/ block 更改为其他大小,因此您应该可以处理寻址问题。

关于c++ - CUDA gridDim、blockDim 总是用户定义的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12596365/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com