先保留部分内容,后续休息下完善。
先说如何查看CUDA的内存对齐要求?
// Host code 二维分配数据
int width = 1, height = 600;
float* devPtr;
size_t pitch;
cudaMallocPitch(&devPtr, &pitch,
width * sizeof(float), height);
在width =1的时候,pitch = 512;pitch以字节(Byte)为单位。
可以测试在width=128的时候,pitch仍然为128。
在width=129时,pitch = 1024。
所以可以肯定的是,当前设备下,内存对齐要求是512字节。
同理三维情况下,也可以测试。
// Host code 三维分配数据
int width = 64, height = 64;
int depth = 64;
cudaExtent extent = make_cudaExtent(width * sizeof(float),
height, depth);
cudaPitchedPtr devPitchedPtr;
cudaMalloc3D(&devPitchedPtr, extent);
后续相关内容有空再继续补偿,先暂时记录下来