gpt4 book ai didi

c++ - Halide FFT 实现错误?

转载 作者:行者123 更新时间:2023-11-30 03:48:02 26 4
gpt4 key购买 nike

我正在尝试运行找到的 Halide FFT 实现 here用于针对 FTTW 进行基准测试。我能够按原样运行实现,但在深入挖掘时遇到了一些问题。该例程因 H 和 W 的不同值(随机输入图像的高度和宽度)的错误而失败。例如,我在 H=W=5 时收到以下错误:

./fft.cpp:603 错误:
无法向量化函数 v_S1_R5$6 的维度 n0,因为该函数是内联调度的。
中止(核心转储)

我一直在尝试在小图像尺寸(即 5x5)上进行测试以比较算法的结果,但我无法让算法完成任何小于 16 的值,即使在那个时候也会进行检查值(value)观是一项长期的任务。对于大于 32 的值,FFT 也会失败,似乎不适用于所有非 2 的幂。

有没有人遇到过这个问题?在 Halide 中是否有任何其他适用于不同大小图像的 FFT 实现?

作为引用,我使用 gcc 4.8.3 在 RHEL7 上运行代码。

最佳答案

我认为存在一些问题。首先,对于仅使用一次通过的非常小的 FFT,似乎存在一个错误。我认为这就是您在第一个案例中遇到的问题。

第二个问题是 W 和 H 需要是目标 vector 大小的倍数,不一定 W 和 H 需要是 2 的幂。例如 W = 48,H = 32 似乎为我工作。更复杂的是,对于真正的 FFT,一个维度在内部被减半(这就是真正 FFT 的高效实现方式),因此如果您使用的是 AVX 机器,该维度必须是 16 的倍数( vector ​​宽度的 2 倍) 8 个花车)。

如果您想在非常小的 FFT 上运行,您可以删除矢量化调度指令,那么它应该可以工作,至少对于学习目的而言。

但是,我要指出的是,运行 5x5 并不是很有趣,因为它将在一次基数 5 遍中完成,即只是一个普通的旧 DFT(这似乎也已损坏,正如您所发现的). 4x4(分解为 2 个基数 2 个 channel )将是最小的有趣 FFT。在调试它的时候,我经常使用 8x8 FFT(基数 4,基数 2)。

关于c++ - Halide FFT 实现错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33400259/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com