我有兴趣计算矩阵第一行的 fft,但我事先不知道需要多少行。我需要重复执行此操作,但需要转换的行数可能会改变。
我将用下面的例子来说明。假设我有一个 100 x 128 的数组。如果我在每一行上计划一维 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 x 128 阵列,即使只需要前(例如)20 行,也可以执行这个大计划。
优点:我们只需要一个计划,因此规划开销很小。缺点:在执行阶段可能会造成巨大的性能损失(转换超出我的需要)。
详尽的规划:使用相同的输入/输出数组但针对所有可能的行数获取计划。在示例中,我有 100 个计划,其中计划 i 对前 i 行的每一行执行 fft。优点:完全改变我所需要的。缺点:实验表明,我必须一遍又一遍地支付计划惩罚,即使 i=50 时计划与上面相同,但使用 x50 而不是 x100。 (我想不能保证这确实是 FFTW 规划者确定的计划,但如果我可以缩短规划时间,我不介意失去“最优性”。)
单行规划:规划单行并使用循环将数据移入输入、转换并将数据移出输出。优点:我正在改变我所需要的。缺点:在我看来,这消除了很多 FFTW 优化,例如当我使用多个线程时。 (我通常很困惑多线程在 FFTW 中是如何工作的,因为它没有详细记录......我知道线程信息是计划的一部分,但打印计划不会显示任何内容。不过,这是题外话。)
我想通过首先创建通用的计划,在 for 循环中修改该计划 99 次而不是针对不同的大小进行规划,然后按照详尽的规划方法执行,从而将所有三个想法结合起来。但是我找不到任何有关计划/智慧格式的文档,十六进制数字的智慧输出是难以理解的。所以我想知道如何实施这种混合方法。
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)