我有两个结构
struct collapsed {
char **seq;
int num;
};
struct data {
collapsed *x;
int num;
int numblocks;
int *blocksizes;
float *regmult;
float *learnmult;
};
我将它传递给我的内核:
__global__ void KERNEL(data* X,...){
...
collapsed x = X->x[0]; // GIVES CUDA_EXPECTION_1:Lane Illegal Address
}
data X;
//init X
data *X_dev;
cudaMalloc((data **) & X_dev, sizeof(data));
cudaMemcpy(X_dev, &X, sizeof(data), cudaMemcpyHostToDevice);
KERNEL<<<...>>>(X_dev,...);
这段代码给出了CUDA_EXPECTION_1:通道非法地址在内核代码中。有什么问题或者正确的方法是什么?任何想法?
您正在取消引用设备上的主机指针。X
是一个有效的设备指针。
但是当你复制X
结构到设备,您复制了x
随之而来的是,它包含一个主机指针。当您取消引用该指针时:
collapsed x = X->x[0];
^ this is dereferencing the x pointer
设备代码抛出错误。
给出了更多细节here https://stackoverflow.com/questions/15431365/cudamemcpy-segmentation-fault/15435592#15435592以及如何修复它的说明。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)