RT ,先是向显存中拷贝了2D数组,然后分配3Dcuda数组,用cuda_makeExtent分配3D空间,显示访问冲突,这是什么原因造成的???将分配3D数组的字段拿出来单独写个程序调试并没有问题……求大侠指教哇!:‘(:’(
贴代码和编译结果
贴上源码,这是我分配的2D数组:
double d_VelPerPoint;
cudaMalloc((void*)&d_VelPerPoint,sizeof(double)WellRadiusMaxSpreadMax);
size_t d_pitch;
cudaMallocPitch((void**)&d_VelPerPoint,&d_pitch,sizeof(double)*WellRadiusMax,SpreadMax);
cudaMemcpy2D(d_VelPerPoint, d_pitch, VelPerPoint, sizeof(double)*WellRadiusMax, sizeof(double)WellRadiusMax,SpreadMax, cudaMemcpyHostToDevice);
//分配三维数组
cudaPitchedPtr PerZoneTime;
cudaExtent extent=make_cudaExtent(25sizeof(double),500,25); //0xC0000005: 读取位置 0x00133000 时发生访问冲突
cudaMalloc3D(&PerZoneTime,extent);
这是怎么回事???
贴上源码,这是我分配的2D数组:
double d_VelPerPoint;
cudaMalloc((void*)&d_VelPerPoint,sizeof(double)WellRadiusMaxSpreadMax);
size_t d_pitch;
cudaMallocPitch((void**)&d_VelPerPoint,&d_pitch,sizeof(double)*WellRadiusMax,SpreadMax);
cudaMemcpy2D(d_VelPerPoint, d_pitch, VelPerPoint, sizeof(double)*WellRadiusMax, sizeof(double)WellRadiusMax,SpreadMax, cudaMemcpyHostToDevice);
//分配三维数组
cudaPitchedPtr PerZoneTime;
cudaExtent extent=make_cudaExtent(25sizeof(double),500,25); //0xC0000005: 读取位置 0x00133000 时发生访问冲突
cudaMalloc3D(&PerZoneTime,extent);
调试结束后有这样的结果:
CUDA.exe 中的 0x007388d8 处最可能的异常: 0xC0000005: 读取位置 0x00133000 时发生访问冲突
CUDA.exe 中的 0x007388d8 处未处理的异常: 0xC0000005: 读取位置 0x00133000 时发生访问冲突
程序“[3604] CUDA.exe: 本机”已退出,返回值为 0 (0x0)。
这是怎么回事???
没明白,感觉好像没问题,看来你得等大牛解释了
恩,好吧……我也希望大牛看到我的帖子,嘻嘻嘻,耽误好久了,这个问题~可怜我快要交活儿了……
还是没有人回复,坐等回复,快交活儿了,愁人那!
好吧,原来是我前面的数组的问题,已经解决了~~
看来以后代码得贴全才行啊,呵呵
再问你一下哈,我如果再在程序里加一个cpu上的函数,可不可以直接访问GPU中的CUDA 3D数组?
不可以,cpu不可以直接访问显存中的数据的。
对了,你前面的数组出什么问题了,可否分享一下?