Cuda内核配置

Cuda kernel configuration

我正在编写一个 cuda c 代码来处理图片,例如我创建了一个交换函数(矩阵的交换块)但是每次我遇到块数和数量问题时它都不起作用我吃内核时的线程数。

例如,如果我使用

拍摄尺寸为 2048*2048 的图像

threadsPerBlock.x=threadsPerBlock.y=64numBlocks.x=numBlocks.y=2048/threadsPerBlock.x

然后 swap<<<threadsPerBlock,numBlocks>>>(...) 工作正常。

但是如果我拍摄尺寸为 2560*2160 的图像,threadsPerBlock.x=threadsPerBlock.y=64numBlocks.x=2560/64numBlocks.y=2160/64+1,我会得到一个错误 9 wish is error invalid configuration argument。

我正在使用 CUDA 7.5 和计算能力为 5.0 的 GPU

maximum number of threads per block for your compute 5.0 设备是 1024。问题的根源是内核启动中的参数颠倒了。当图像的最大尺寸小于 2048 时,您将获得每个块少于 1024 个线程的启动。大于 2048 块大小不合法

如果你这样做:

threadsPerBlock.x=threadsPerBlock.y=32
numBlocks.x=numBlocks.y=2048/threadsPerBlock.x
swap<<<numBlocks,threadsPerBlock>>>(...)

您应该会发现内核启动无条件运行。