Cuda 如何对更大阵列中的特定感兴趣区域(ROI)执行cufft fwd和inv变换?

Cuda 如何对更大阵列中的特定感兴趣区域(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

考虑尺寸为1920x1080的图像。如何为720x960 ROI执行cufft R2C和C2R?

正如评论中指出的,cufft完全支持通过API的高级数据布局功能对阵列中的数据子集执行变换和逆变换。引述:

高级布局可以看作是一个额外的抽象层 访问输入/输出数据数组。元素 批次中信号编号b中的坐标[z][y][x]将为 与内存中的以下地址关联:

1D

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中找到一个使用高级数据布局的示例