Cuda 访问冲突异常

Cuda 访问冲突异常,cuda,Cuda,您好,我收到一个访问冲突错误 我的代码中可能有什么问题?? 当我把W和H改为10时,效果很好 #define W 100 #define H 100 #define MAX 100000 int** GetImage() { int **img = new int*[W]; for(size_t i = 0 ; i < W ; i++ ) img[i] = new int[H]; for(int i=0;i<W;i++) for(int j=0;j<H;j++

您好,我收到一个访问冲突错误

我的代码中可能有什么问题?? 当我把W和H改为10时,效果很好

#define W 100
#define H 100
#define MAX 100000
int** GetImage()
{
int **img = new int*[W];
for(size_t i = 0 ; i < W ; i++ )
    img[i] = new int[H];

for(int i=0;i<W;i++)
    for(int j=0;j<H;j++)
        img[i][j]=255;
return img;
}

int main()
{
int **image = GetImage();
float **dtr = initDistances(image);

//cuda memory allocation
int  **devImage;
float **devDt;
int sizei = W*H*sizeof(int);
int sizef = W*H*sizeof(float);

cudaMalloc((void**)&devImage, sizei);
cudaMalloc((void**)&devDt, sizef);

//copy to GPU
cudaMemcpy(devImage, image, sizei, cudaMemcpyHostToDevice);  <-- access violation here
cudaMemcpy(devDt, dtr, sizef, cudaMemcpyHostToDevice);
return 0;
}
#定义W 100
#定义H 100
#定义最大100000
int**GetImage()
{
整数**img=新整数*[W];
对于(大小i=0;i对于(inti=0;i您的数组在内存中不是连续的,但您正在尝试复制它,就像它是连续的一样

要分配一个连续数组,您需要进行一次分配。但是您分配的是一个指针数组,然后为每个指针分配一个整数数组,因此无法保证内存中img[0]紧跟在img[1]之前。img[0]和img[1]分别分配。它们可能位于内存中完全不同的位置

cudaMemcpy假设img[0]-img[W]是一个大的连续块。

“image”是指向一个“W”指针数组的指针,每个指针指向一个由“H”整数组成的列向量。这只是W*sizeof(int*)字节,即比“sizei”小得多


对cudaMemcpy()的调用假定映像存储为一个连续的W*H整数块。但是,主机上并非如此存储。如果可能,我建议将主机分配更改为连续存储方案。

Ok。我如何解决此问题?您能给我一些示例代码吗?在这种情况下,我应该使用1D数组还是什么你不能正确理解..int*image=(int*)malloc(sizei);#定义image(行,列)image[(行)*W+(列)]int*GetImage(){int*img=newint[W*H];for(int i=0;i