反复计算不同行数的fft

时间:2017-06-12 15:54:06

标签: fftw

我感兴趣的是计算矩阵的第一行的fft,但我事先并不知道需要多少行。我需要重复这样做,但我需要转换的行数可以改变。

我将通过以下示例进行说明。假设我有一个100乘128的阵列。如果我计划每行的1维fft,FFTW会产生以下计划:

(dft-ct-dit/8
  (dftw-direct-8/28-x100 "t2fv_8_sse2")
  (dft-vrank>=1-x8/1
    (dft-direct-16-x100 "n1fv_16_sse2")))

虽然我不完全理解这个输出,但我确实看到了关键成分:1)这是一个Cooley-Tucker传递,注意8 * 16 = 128。 2)由于两行上的x100后缀,该计划规定这需要100行。

我看到三种可能性:

  • 一刀切的计划:计划100乘128阵列,即使只需要第一行(比如说)20行,也要执行这个大计划。 优点:我们只需要一个计划,因此几乎没有计划开销。缺点:在执行阶段可能会导致严重的性能损失(转换超出我的需要)。

  • 详尽的计划:使用相同的输入/输出数组获取计划,但所有可能的行数。在示例中,我将有100个计划,其中计划i为每个前i行执行fft。优点:完全改变我的需求。缺点:实验表明,我必须反复支付计划罚金,即使说i = 50,计划将与上述相同,但使用x50而不是x100。 (我想这并不能保证这确实是FFTW计划者确定的计划,但我不会介意失去最佳性"如果我可以减少计划时间。)

  • 单行规划:计划单行并使用循环将数据移入输入,转换并将数据移出输出。优点:我正在改变我需要的东西。缺点:在我看来,这消除了很多FFTW优化,例如当我使用多个线程时。 (我一般都很困惑多线程如何在FFTW中工作,因为它没有记录......我知道线程信息是计划的一部分,但打印计划并没有显示任何一个。这是关闭的但是话题。)

我在考虑将所有三个想法结合起来,首先创建一个通用的计划,在for循环中修改此计划99次,而不是规划不同的大小,并在详尽的情况下执行 - 规划方法。但是,我无法找到关于计划/智慧格式的任何文档,使用十六进制数字的智慧输出是不可穿透的。所以我想知道如何实现这种混合方法。

0 个答案:

没有答案