cuda的参数传递问题!

robbie 2014-01-27 11:21:31

cudaMalloc((void**) &device_result, sizeof(double) * NumBlock * NumGrid);
cudaMemset((void**) &device_result, 0,sizeof(double) * width*height);

然后把device_result作为参数传递到
conv <<< dimGrid, dimBlock>>>(device_result, device_I1, size);

在conv中
__global__ void SNN(double* t_result, double* t_I1, int t_size)
{
// determine where in the thread grid we are
int idx = threadIdx.x+blockIdx.x * blockDim.x;


t_result[idx] = 0;

...
}
请问t_result[idx] = 0;要加上吗???我试了,如果不加结果不对,可是我已经cudaMemset((void**) &device_result, 0,sizeof(double) * width*height);了呀。
...全文
540 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuanwcj 2014-04-14
  • 打赏
  • 举报
回复
这里有几个方面的问题: 1. 空间分配的大小与初始化的大小并没有直接关系 空间分配时分配的是以该指针为起始的一块连续区域,初始化时也是同样的道理,并不要求分配的大小与初始化的大小一致,有时因为需求可能会故意这样设定,楼主这样的做法本质上说并没有问题。 2. 楼主的问题在于,你开辟的内存空间根本就没有被置零,因为cudaMemset这一行程序有误,请注意以下2行代码的区别 A:cudaMemset((void**) &device_result, 0,sizeof(double) * NumBlock * NumGrid); B:cudaMemset(device_result, 0,sizeof(double) * NumBlock * NumGrid); 正确的写法应该是第二种,因为按照第一行的写法根本达不到将开辟的空间置零的目的
Double_Lan_2975 2014-04-12
  • 打赏
  • 举报
回复
先确定下输入和输入的长度是否一致
grasshoper97 2014-01-30
  • 打赏
  • 举报
回复
cudaMalloc((void**) &device_result, sizeof(double) * NumBlock * NumGrid); cudaMemset((void**) &device_result, 0,sizeof(double) * NumBlock * NumGrid); 你分配空间和置0的语句,数组长度一致吗?一个是 NumBlock * NumGrid,一个是 NumBlock * NumGrid。 改成cudaMemset(device_result, 0,sizeof(double) *NumBlock * NumGrid);试试

580

社区成员

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

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