- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
当我在内核调用中传递网格大小和线程数时,这些值是否会始终完全按照我传递的那样放置在 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/
我明白了 blockDim 是什么,但我对 gridDim 有问题。 Blockdim给出了 block 的大小,但是什么是gridDim?在互联网上,它说 gridDim.x 给出了 x 坐标中的
这是一个概念性问题。在 CUDA 中,gridDim、blockDim 和 threadIdx 可以是 1D、2D 或 3D。我想知道他们的2D和3D版本是如何解释的? 更详细地说,CUDA是否将多维
当我在内核调用中传递网格大小和线程数时,这些值是否会始终完全按照我传递的那样放置在 gridDim 和 blockDim 中? 此外,blockIdx 和 threadIdx 是否始终遵守这些限制?
我总是得到 blockdim.y ==1。无论我在 numBlocks 中设置什么值,我总是得到相同的值。 __global__ void CalcVideo(unsigned char *origi
我是 OpenCL 的初学者,试图将一个简单的 CUDA 函数转换为 OpenCL。在 CUDA 函数中,他们使用以下代码段来获取操作索引, int id = (blockIdx.x + blockI
我是一名优秀的程序员,十分优秀!