【问题标题】:FFTW - Is fftw_alloc() necessary?FFTW - fftw_alloc() 是否必要?
【发布时间】:2013-11-22 16:52:21
【问题描述】:

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);
}

【问题讨论】:

    标签: c fftw


    【解决方案1】:

    来自文档:

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

    链接到使用 SIMD 支持编译的 FFTW 库的程序可以 为最复杂的 r2c/c2r 获得不可忽略的加速 变换。然而,为了获得这种加速, 传递给 FFTW 的复杂(或真实)数据必须特别对齐 内存(通常是 16 字节对齐的),通常这种对齐方式更多 比通常的 malloc(等)分配所提供的更严格 例行公事。

    为了保证 SIMD 的正确对齐,因此,以防万一 您的程序曾经链接到使用 SIMD 的 FFTW,我们建议 使用 fftw_malloc 分配您的转换数据并取消分配 使用 fftw_free。它们具有完全相同的界面和行为 malloc/free,除了 SIMD FFTW 他们确保返回的 指针具有必要的对齐方式(通过调用 memalign 或其 等效于您的操作系统)。

    “必要”?没有

    “好的建议?”是的 - 绝对是:)

    【讨论】:

    • 谢谢。我们在 Beagleboard xM 上使用它,它具有 ARM NEON SIMD 指令集。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-10
    • 1970-01-01
    • 2012-04-02
    • 1970-01-01
    相关资源
    最近更新 更多