在CPU上,我经常使用二维图像(俯仰线性)的“子图像”,它们只是指向“主”图像的某个ROI。因此,对子图像的所有修改实际上也改变了“主”图像。
CUDA中是否存在设备存储器上的子图像到二维图像(间距线性)的问题?例如,可以将纹理绑定到它或纹理对象吗? NPP例程是否正常工作?我问,因为某些例程可能需要某些对齐(缓冲区的“起始地址”)。
请注意,我主要对稳定性问题感兴趣。我想这些子图像可能会有轻微的性能损失,但这不是我主要担心的问题。
特别是,如果'cudaBindTexture2D'文档here中提到的缓冲区基址的对齐限制,我会感兴趣:
“由于硬件对纹理基地址强制执行对齐要求,因此cudaBindTexture2D()在* offset中返回一个字节偏移量,必须应用于纹理提取以便从所需的内存中读取。”
“纹理对象”(对于CC> = 3.0 GPU)也是必需的吗?
任何绑定纹理(无论是通过纹理参考还是纹理对象API)都应满足cudaGetDeviceProperties提供的对齐要求,以便在数据坐标和纹理坐标之间进行直接映射:
textureAlignment
返回的对齐(以字节为单位)。 cudaMalloc
和类似提供的分配将满足此要求(对于分配的起始地址)。texturePitchAlignment
返回的对齐。 (例如)cudaMallocPitch
提供的分配将满足此要求。NPP应该与任何适当指定的ROI一起正常工作。
请注意,您的文档链接已经过时了。目前的文档可以找到here。
这个question/answer也可能是有趣的。