FFTW的文档表示,fftw_alloc()确保了正确的内存对齐。在给定的FFTW计划的输入/输出中使用堆栈变量是否存在风险?FFTW只是运行慢一点,还是根本不运行?
不推荐使用下面的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);
}
发布于 2013-11-22 16:55:27
从医生那里:
005fmalloc.html
连接到用SIMD支持编译的FFTW库的程序,对于大多数复杂的r2c/c2r转换,可以获得不可忽略的加速。然而,为了获得这种加速,传递给FFTW的复杂(或真实)数据数组必须在内存中特别对齐(通常为16字节对齐),而且这种对齐通常比通常的malloc (等等)更严格。分配例程。 因此,为了保证SIMD的正确对齐,如果您的程序与使用FFTW的SIMD连接,我们建议使用fftw_malloc分配转换数据,并使用fftw_free取消分配。它们具有与malloc/free完全相同的接口和行为,但对于SIMD FFTW,它们确保返回的指针具有必要的对齐性(通过调用memalign或其在操作系统上的等效值)。
“有必要”?不是
“好主意?”是的-最明确的是:)
https://stackoverflow.com/questions/20150210
复制相似问题