假设我有这个类:
假设 nParticles 为100。现在我需要为
class Particle
{
double *_w;
};
我希望将nParticles个Particle
对象发送到我的内核。为这些对象分配空间很容易:
Particle *dev_p;
cudaStatus = cudaMalloc((void**)&dev_P, nParticles * sizeof(Particle));
if (cudaStatus != cudaSuccess) {
fprintf(stderr, "cudaMalloc failed!");
goto Error;
}
假设 nParticles 为100。现在我需要为
Particle
对象中的每个 _w
分配 300 double。我该怎么做呢?我尝试了以下代码:for( int i = 0; i < nParticles; i++){
cudaStatus = cudaMalloc((void**)&(dev_P[i]._w), 300 * sizeof(double));
if (cudaStatus != cudaSuccess) {
fprintf(stderr, "cudaMalloc failed!");
goto Error;
}
}
但是当我访问 dev_p[i]._w[j] 时,使用 Nsight 进行调试会停止。
dev_P
存储了设备内存块的地址。当您在主机上对其进行解引用,例如dev_P[i]
,您正在尝试访问先前分配的设备内存地址值相同的主机内存。 - kangshiyin