如何在更大的数组中对特定感兴趣区域(ROI)执行cufft fwd和inv转换?

时间:2018-02-11 16:27:16

标签: cuda cufft

考虑尺寸为1920x1080的图像。如何为720x960 ROI设置R2C和C2R袖口?

1 个答案:

答案 0 :(得分:1)

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

  

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

     

1D

input[ b * idist + x * istride]

output[ b * odist + x * ostride]
     

2D

input[b * idist + (x * inembed[1] + y) * istride]

output[b * odist + (x * onembed[1] + y) * ostride]
     

3D

input[b * idist + ((x * inembed[1] + y) * inembed[2] + z) * istride]

output[b * odist + ((x * onembed[1] + y) * onembed[2] + z) * ostride]
     

istride和ostride参数表示两者之间的距离   最不重要的连续输入和输出元素(即   分别是最里面的维度。在单个1D变换中,   如果要在变换中使用每个输入元素,istride   应设为1;如果要使用其他每个输入元素   变换,则istride应设置为2。同样,在单个1D中   如果希望一个接一个地输出最终元素,则转换   紧凑地,ostride应设置为1;如果需要间距   在最不重要的维度输出数据之间,ostride应该   被设置为元素之间的距离。

您可以在this堆栈溢出问题

中找到使用cuFFT中的高级数据布局的示例