我有一个与复制结构相关的问题,该结构包含从主机指向设备的 2D 指针,我的代码如下
struct mymatrix
{
matrix m;
int x;
};
size_t pitch;
mymatrix m_h[5];
for(int i=0; i<5;i++){
m_h[i].m = (float**) malloc(4 * sizeof(float*));
for (int idx = 0; idx < 4; ++idx)
{
m_h[i].m[idx] = (float*)malloc(4 * sizeof(float));
}
}
mymatrix *m_hh = (mymatrix*)malloc(5*sizeof(mymatrix));
memcpy(m_hh,m_h,5*sizeof(mymatrix));
for(int i=0 ; i<5 ;i++)
{
cudaMallocPitch((void**)&(m_hh[i].m),&pitch,4*sizeof(float),4);
cudaMemcpy2D(m_hh[i].m, pitch, m_h[i].m, 4*sizeof(float), 4*sizeof(float),4,cudaMemcpyHostToDevice);
}
mymatrix *m_d;
cudaMalloc((void**)&m_d,5*sizeof(mymatrix));
cudaMemcpy(m_d,m_hh,5*sizeof(mymatrix),cudaMemcpyHostToDevice);
distance_calculation_begins<<<1,16>>>(m_d,pitch);
问题
使用此代码,我无法访问结构的 2D 指针元素,但我可以x
从 device.xml 中的该结构访问。例如,mymatrix* m
如果我初始化,我会收到带有指针的 m_d
m[0].m[0][0] = 5;
并打印此值,例如
cuPrintf("The value is %f",m[0].m[0][0]);
在设备中,我没有输出。表示我无法使用 2D 指针,但如果我尝试访问
m[0].x = 5;
然后我就可以打印了。我认为我的初始化是正确的,但我无法找出问题所在。任何人的帮助将不胜感激。