CUDA程序报错 invalid argument 30

以下是主程序matrix.cu#include<stdio.h>#include<stdlib.h>#include<string.h>#include<cuda_run... 以下是主程序matrix.cu

#include<stdio.h>
#include<stdlib.h>
#include <string.h>
#include<cuda_runtime.h>
#include<math.h>
#include <cutil_inline.h>
#include "mapping.cu"

#define N (1920*1080*3)
int main(void){
char hst_output[N];
char dev_output[N];
cutilSafeCall(cudaMalloc((void**)&hst_output,N*sizeof(char)));
cutilSafeCall(cudaMalloc((void**)&dev_output,N*sizeof(char)));
dim3 dimBlock(8, 8, 1); //申明线程块大小
dim3 dimGrid(240, 135*3, 1); //申明线程格大小

Mapping<<<dimBlock,dimGrid>>>(dev_output);
cutilSafeCall( cudaThreadSynchronize() );
cutilSafeCall(cudaMemcpy(hst_output,dev_output,N*sizeof(char),cudaMemcpyDeviceToHost));

return 0;
}

以下是核函数文件

#define N_VIEWS 28
#define TAN_A 0.166667
#define N_PIXEL 9.333333
#define width 3240

__global__ void Mapping(char* output)
{
int x= blockIdx.x * blockDim.x + threadIdx.x;
int y= blockIdx.y * blockDim.y + threadIdx.y;
int res;
double k,m;
k= x+3.0*y*TAN_A;
m=fmod(k,N_PIXEL);
res=(int)(m/N_PIXEL*N_VIEWS+0.5);
if(res == N_VIEWS)
{
res=0;
}
res = N_VIEWS-1-res;
if(res>=N_VIEWS || res<0)
{
getchar();

}

output[y*width+x]=(char)res;
}

该程序的目的是生成一个1920*1080*3的一个映射表。根据xy坐标可以直接计算出矩阵元素的值。(涉及到实际工程核函数计算公式比较复杂但不存在问题,看的时候可以忽略)

本程序运行的问题是运行时如下报错
cudaSafeCall() Runtime API error in file...../matrix.cu,line 20: invalid argument
错误指向了matrix.cu的
cutilSafeCall(cudaMemcpy(hst_output,dev_output,N*sizeof(char),cudaMemcpyDeviceToHost));

GOOGLE上搜索了许多方案始终不懂,有可能的错误时host 和 Device之间的指针错误?或者是定义数组过大溢出?求大神指教!
展开
 我来答
百度网友51f27b99a
2014-12-18
知道答主
回答量:1
采纳率:0%
帮助的人:1306
展开全部
cudaMemcpy(hst_output,dev_output,N*sizeof(char),cudaMemcpyDeviceToHost)中的hst_output不应该在GPU设备上开辟空间,即不需要这样开辟空间:cutilSafeCall(cudaMalloc((void**)&hst_output,N*sizeof(char)));

直接在主机上开辟hst_output的空间,这样cudaMemcpyDeviceToHost才能成功从GPU的存储空间中把数据复制到主机的存储空间
jqkalytrue
2014-04-18 · TA获得超过836个赞
知道小有建树答主
回答量:1509
采纳率:57%
帮助的人:383万
展开全部
cudaSafeCall() Runtime API error in file...../matrix.cu,line 20: invalid argument 非法的值,数组出界
20行用的数组出界
追问
我好像没有看出来哪个数组出界了?请指正
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式