关于cudaError_t的返回值为77,怎么解决?

帅气的小王子 2015-02-08 09:43:45
代码如下所示,
	
cudaMalloc((unsigned char **)&dev_bdecoded, CodeLength * sizeof(unsigned char));
cudaMalloc((int **)&dev_jc, (n + 1) * sizeof(int));
cudaMalloc((double **)&dev_LLR_extrinsic, nzmax * sizeof(double));
cudaMalloc((double **)&dev_LLR_intrinsic, CodeLength * sizeof(double));

cudaMemcpy(dev_bdecoded, bdecoded, CodeLength * sizeof(unsigned char), cudaMemcpyHostToDevice);
cudaMemcpy(dev_jc, jc, (n + 1) * sizeof(int), cudaMemcpyHostToDevice);
cudaMemcpy(dev_LLR_intrinsic, LLR_intrinsic, CodeLength * sizeof(double), cudaMemcpyHostToDevice);

threadsPerBlock = 256;
blocksPerGrid = (n + threadsPerBlock - 1) / threadsPerBlock;
Kernel1<<<blocksPerGrid,threadsPerBlock>>>(dev_bdecoded, dev_jc, dev_LLR_extrinsic, dev_LLR_intrinsic);
cudaStatus = cudaDeviceSynchronize();
if (cudaStatus != cudaSuccess) {
fprintf(stderr, "cudaDeviceSynchronize returned error code %d after launching addKernel!\n", cudaStatus);
}

其中bdecoded,jc,LLR_intrinsic是作为参数传递进来的指针。
内核函数如下

__global__ void Kernel1(unsigned char *dev_bdecoded, int *dev_jc, double *dev_LLR_extrinsic, double *dev_LLR_intrinsic)
{
int i = blockDim.x * blockIdx.x + threadIdx.x;
int j;
dev_bdecoded[i] = 0;
for (j = dev_jc[i]; j < dev_jc[i + 1]; j++)
dev_LLR_extrinsic[j] = dev_LLR_intrinsic[i];
}

在上面cudaStatus的返回值为77,

/**
* The device encountered a load or store instruction on an invalid memory address.
* The context cannot be used, so it must be destroyed (and a new one should be created).
* All existing device memory allocations from this context are invalid
* and must be reconstructed if the program is to continue using CUDA.
*/
cudaErrorIllegalAddress = 77,

去查了下解释说是内存问题,如上面所示,我想知道该如何解决这个问题?
...全文
4010 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wishkind 2016-02-21
  • 打赏
  • 举报
回复
还没有开始cuda编程,先看看
帅气的小王子 2015-02-10
  • 打赏
  • 举报
回复
找到问题了,内核函数中dev_jc[i],i的取值超过了dev_jc的范围,数组越界了。
YCMyTot 2015-02-08
  • 打赏
  • 举报
回复
cudaMalloc( (void**)&d_Mat_A , size ) ; 应该是 这样的形式。内存分配出错。
帅气的小王子 2015-02-08
  • 打赏
  • 举报
回复
引用 2 楼 u010333076 的回复:
[quote=引用 1 楼 u014693181 的回复:] cudaMalloc( (void**)&d_Mat_A , size ) ; 应该是 这样的形式。内存分配出错。
改过之后依然不行。[/quote]
cudaMalloc((void **)&dev_jc, (n + 1) * sizeof(int));
这样子改的
帅气的小王子 2015-02-08
  • 打赏
  • 举报
回复
引用 1 楼 u014693181 的回复:
cudaMalloc( (void**)&d_Mat_A , size ) ; 应该是 这样的形式。内存分配出错。
改过之后依然不行。

580

社区成员

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

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