确定用于图像处理的CUDA线程和块

时间:2015-06-30 10:54:29

标签: c++ image-processing cuda

亲爱的DOWNVOTERS:请告诉我投票失败的原因。我已经接受了一个答案,这意味着该人能够理解问题并且不需要最小的工作示例。其次,我希望它是一个概念性问题,而不是一个家庭作业问题。请让我知道你投票的原因。

重要提示:我已经阅读了几个关于线程和块分布的线程(例如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

然后,我得到一张空白图片。

1 个答案:

答案 0 :(得分:4)

如果你按照我在评论中的建议应用了error checking,那么输出将是:

  

invalid configuration argument

您使用的是Quadro K2000 has Compute capability 3.0。计算能力3.0允许最多1024 threads per block

每个块使用3*10*2 * 3*10*2 = 3600个线程,高于1024限制。 所以你的内核甚至没有运行,这就是你得到一张空白图片的原因。