Cuda 如何对更大阵列中的特定感兴趣区域(ROI)执行cufft fwd和inv变换?
考虑尺寸为1920x1080的图像。如何为720x960 ROI执行cufft R2C和C2R?正如评论中指出的,cufft完全支持通过API的高级数据布局功能对阵列中的数据子集执行变换和逆变换。引述: 高级布局可以看作是一个额外的抽象层 访问输入/输出数据数组。元素 批次中信号编号b中的坐标[z][y][x]将为 与内存中的以下地址关联: 1DCuda 如何对更大阵列中的特定感兴趣区域(ROI)执行cufft fwd和inv变换?,cuda,cufft,Cuda,Cufft,考虑尺寸为1920x1080的图像。如何为720x960 ROI执行cufft R2C和C2R?正如评论中指出的,cufft完全支持通过API的高级数据布局功能对阵列中的数据子集执行变换和逆变换。引述: 高级布局可以看作是一个额外的抽象层 访问输入/输出数据数组。元素 批次中信号编号b中的坐标[z][y][x]将为 与内存中的以下地址关联: 1D input[ b * idist + x * istride] output[ b * odist + x * ostride] 二维 input
input[ b * idist + x * istride]
output[ b * odist + x * ostride]
二维
input[b * idist + (x * inembed[1] + y) * istride]
output[b * odist + (x * onembed[1] + y) * ostride]
三维
input[b * idist + ((x * inembed[1] + y) * inembed[2] + z) * istride]
output[b * odist + ((x * onembed[1] + y) * onembed[2] + z) * ostride]
istride和ostride参数表示两个参数之间的距离
连续输入和输出元素中最不重要的
分别是最里面的维度。在单个一维变换中,
如果要在转换中使用每个输入元素,则istride
应设置为1;如果要在
transform,则istride应设置为2。类似地,在单个1D中
变换,如果希望一个接一个地输出最终元素
紧凑地说,ostride应设置为1;如果需要间距
在最小有效维度输出数据之间,ostride应
设置为元素之间的距离
您可以在堆栈溢出问题中的cuFFT中找到一个使用高级数据布局的示例