调用cudaMallocPitch()时,偏移量的问题

float devPtr;
int pitch;
cudaMallocPitch((void **)&devPtr,&pitch,width
sizeof(float),height);
myKernel<<<100,512>>>(devPtr,pitch);
.
.
globle void myKernel(float *devPtr,int pitch)
{
for(int r=0;r<height;++r)
{
float *row=(float *)((char )devPtr+rpitch);
for(int c=0;c<width;++c)
{
float element =row[c];
}
}
}
请问:红色那句代码为什么要先(char *),再(float *)?我感觉直接float row=devPtr+rpitch/sizeof(float)就行啊。

LZ您好:

因为pitch是按字节数计算的,所以上文代码中会这样处理。((char*)以后,指针的偏移量按照BYTE计算,这样就和pitch一致了,计算到所需地址以后,再转换回(float*)这样偏移量按照4B计算,也与左边保持一致。)

以及,您给出的实现实际上和上文中的实现是等效的。

大致如此,您可以选择任何正确的同时符合您习惯的用法加以使用。

祝您编码顺利~

您好版主,非常感谢您的解答~我明白了。

不客气的,十分荣幸为您服务!

欢迎您经常来论坛!

祝您好运~