关于CUDA核函数运行限制的问题

s_51563946 2008-07-19 01:22:00
我使用CUDA对一张图片进行简单的操作:全部涂成一种颜色.代码如下:
int rx = 800;
int ry = 600;
float* image;
size_t image_size = rx*ry*sizeof(float)*3;
cudaMalloc((void**)&image, image_size);

fill_color<<<rx*ry, 1>>>(image);
......

核函数:
__globle__
void fill_color(float* image)
{
int idx = 3*blockIdx.x;
image[idx + 0] = 1.0f;//r
image[idx + 1] = 0.0f;//g
image[idx + 2] = 1.0f;//b
}

结果测试表明,当分辨率rx*ry小于65535时,运行正常.当大于这个数,最后生成的图片就是全黑的.
我用的是模拟设备运行的程序(没钱买显卡...).设备的属性如下:
The CUDA device count is 1
device name:Device Emulation (CPU)
total global memory:-1
shared memory per block:16384
regs per block:8192
warp size:32
mem pitch:262144
max threads per block:512
max threads dim:512*512*64
max grid size:65535*65535*1
total const memory:65536
major version:-1
minor version:-1
clock rate:1350000
texture alignment:256

请教发生这种问题是以上哪个容量到达上限了?或者是其他问题?

另外问一下,grid,block,thread这几个东西和他们对应的硬件设备是什么关系?
...全文
513 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
darkstorm2111203 2008-07-24
  • 打赏
  • 举报
回复
一共最大65535,每一维最大也是65535
babysun316 2008-07-22
  • 打赏
  • 举报
回复
一个grid的每一维是不可以超过65535个thread的。但是,我也不清楚是不是最大可以有65535的立方个thread再一个grid里面。但是写成ill_color < < <rx*ry, 1>>>(image),当rx*ry大于65535时就肯定不行了呢
darkstorm2111203 2008-07-20
  • 打赏
  • 举报
回复
对,基本是这样,具体细节看手册。
s_51563946 2008-07-19
  • 打赏
  • 举报
回复
应该怎么改啊?
我是说,一个grid里面的block有限制,每个block里面的thread的数目也有限制.
那么我从设备获取的cudaDeviceProp结构中哪里能看出这些限制来?

一个block就代表了一个mutilprocesser对吧?那么一个mutiprocesser同一时间不只运行一个thread.因此最好把fill_color<<<>>>中block数和每个block的thread数平均分配一下是么?
darkstorm2111203 2008-07-19
  • 打赏
  • 举报
回复
fill_color < < <rx*ry, 1>>>(image);
这一句很不科学

579

社区成员

发帖
与我相关
我的任务
社区描述
CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。 它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。
社区管理员
  • CUDA编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧