确定用于图像处理的 CUDA 线程和块
Decide CUDA threads and blocks for image processing
亲爱的投反对票者: 请告诉我投反对票的原因。我已经接受了一个答案,这意味着该人能够理解问题并且不需要最小的工作示例。其次,我希望它是一个 概念性问题 而不是作业问题。请告诉我您投反对票的原因。
重要提示: 我已经阅读了几个关于线程和块分布的线程(例如 this),但我有一个特定的查询。
我必须在 GPU 上以 unsigned char
形式处理图像数据。我的图片大小为 (1080 x 1920)
,有 3 个通道,每个像素都是 unsigned char
类型。
GPU Details:
NVIDIA Quadro k2000
2 GB of GDDR5 GPU memory
384 5MX CUDA parallel processing cores
因为我是 GPU 处理的新手,所以我不太了解在这种特定情况下我的 GPU 卡的每个块的线程数和块分布总数。
问题: 当我使用以下内容时
然后配置我的 (1080 x 1920)
图像调用 GPU 内核,我得到了想要的结果,但是计算时间太多了
dim3 numOfBlocks( (108) , (192) );
dim3 numOfThreadsPerBlocks( 3*10 , 3*10 ); //multiplied by 3 because we have 3 channel image now
colorTransformation_kernel<<<numOfBlocks, numOfThreadsPerBlocks>>>(numChannels, step_size, iw, ih, dev_ptr_source, dev_ptr_dst);
但是,如果我选择有如下另一种配置
dim3 numOfBlocks( (108/2) , (192/2) );
dim3 numOfThreadsPerBlocks( 3*10*2 , 3*10*2 ); //multiplied by 3 because we have 3 channel image now
然后,我得到一张空白图像。
如果您按照我在评论中建议的那样应用 error checking,输出将是:
invalid configuration argument
您使用的是 Quadro K2000,具有计算功能
能力 3.0。计算能力 3.0 允许最多 1024 threads per block.
您每个块使用 3*10*2 * 3*10*2 = 3600
个线程,超出了 1024 个限制。
所以你的内核甚至没有 运行,这就是你得到空白图像的原因。
亲爱的投反对票者: 请告诉我投反对票的原因。我已经接受了一个答案,这意味着该人能够理解问题并且不需要最小的工作示例。其次,我希望它是一个 概念性问题 而不是作业问题。请告诉我您投反对票的原因。
重要提示: 我已经阅读了几个关于线程和块分布的线程(例如 this),但我有一个特定的查询。
我必须在 GPU 上以 unsigned char
形式处理图像数据。我的图片大小为 (1080 x 1920)
,有 3 个通道,每个像素都是 unsigned char
类型。
GPU Details:
NVIDIA Quadro k2000
2 GB of GDDR5 GPU memory
384 5MX CUDA parallel processing cores
因为我是 GPU 处理的新手,所以我不太了解在这种特定情况下我的 GPU 卡的每个块的线程数和块分布总数。
问题: 当我使用以下内容时
然后配置我的 (1080 x 1920)
图像调用 GPU 内核,我得到了想要的结果,但是计算时间太多了
dim3 numOfBlocks( (108) , (192) );
dim3 numOfThreadsPerBlocks( 3*10 , 3*10 ); //multiplied by 3 because we have 3 channel image now
colorTransformation_kernel<<<numOfBlocks, numOfThreadsPerBlocks>>>(numChannels, step_size, iw, ih, dev_ptr_source, dev_ptr_dst);
但是,如果我选择有如下另一种配置
dim3 numOfBlocks( (108/2) , (192/2) );
dim3 numOfThreadsPerBlocks( 3*10*2 , 3*10*2 ); //multiplied by 3 because we have 3 channel image now
然后,我得到一张空白图像。
如果您按照我在评论中建议的那样应用 error checking,输出将是:
invalid configuration argument
您使用的是 Quadro K2000,具有计算功能 能力 3.0。计算能力 3.0 允许最多 1024 threads per block.
您每个块使用 3*10*2 * 3*10*2 = 3600
个线程,超出了 1024 个限制。
所以你的内核甚至没有 运行,这就是你得到空白图像的原因。