2013-11-22 37 views
2

FFTW的文档说fftw_alloc()确保正确的内存对齐。对于给定的FFTW计划的输入/输出使用堆栈变量是否存在风险? FFTW会运行得慢吗,还是根本不运行?FFTW - fftw_alloc()是否必要?

例如下面的C代码不推荐?

int main() 
{ 
    fftw_complex in[1024]; 
    fftw_complex out[1024]; 

    fftw_plan my_plan; 

    my_plan = fftw_plan_dft_1d(1024, in, out, FFTW_FORWARD, FFTW_ESTIMATE); 

    fftw_execute(plan); 
} 

回答

4

从文档:

http://www.fftw.org/doc/SIMD-alignment-and-fftw_005fmalloc.html

链接到与SIMD支持编译的FFTW库程序可以 获得最复杂和R 2c/C2R 变换一个不可忽视的加速。然而,为了获得这种加速,传递给FFTW的复数(或实数)数据的数组必须在 存储器(通常为16字节对齐)中特别对齐,并且通常这种对齐比由所提供的 严格得多。通常malloc(等)分配 例程。

为了保证正确对准了SIMD,因此,如果您 程序是有史以来针对SIMD-使用FFTW,我们建议 分配好自己与fftw_malloc与fftw_free解除分配它 转换数据链接。这些接口和行为与malloc/free的接口和行为完全相同,只是对于SIMD FFTW,它们确保返回的 指针具有必需的对齐方式(通过在您的OS上调用memalign或其等效操作)。

“必要”?没有

“好了吗?”是的 - 绝对是:)

+0

谢谢。我们在带有ARM NEON SIMD指令集的Beagleboard xM上使用它。 – bornruffians