【问题标题】:FFTW 3.3 compile error using NVCC on Linux在 Linux 上使用 NVCC 的 FFTW 3.3 编译错误
【发布时间】:2014-06-03 15:06:34
【问题描述】:

每一个,

我正在尝试使用 NVCC 编译以下使用 FFTW3.3 库的代码:

#include <stdio.h>
#include <fftw3.h>

void main() {

    fftwf_complex a;
    a[0] = 1;
    a[1] = -1;

    printf("a = %f %f, Testing FFTW with NVCC\n", a[0], a[1]);

}

当我使用 gcc 编译时,它工作正常:

cc main.cpp -o main.out  -lfftw3 -lm
main.out
a = 1.000000 -1.000000, Testing FFTW with CUDA

但是,当我尝试使用 nvcc 而不是 gcc 编译与 .cu 文件相同的代码时, 我得到一长串编译错误:

nvcc main.cu -o main.out -lfftw3 -lm
/usr/include/fftw3.h(370): error: identifier "__float128" is undefined
/usr/include/fftw3.h(370): error: identifier "__float128" is undefined
...

删除两个库 -lfftw3 -lm 将导致 fftwf_complex 的未定义符号。

谁能弄清楚发生了什么?

【问题讨论】:

  • 什么操作系统?哪个版本的cuda?什么版本的 gcc?
  • Ubuntu 12.04、CUDA5.5、gcc 4.6.3。按照@talonmies 的建议,我有一个解决方法。感谢您的评论。

标签: cuda makefile fftw nvcc


【解决方案1】:

这是 FFTW 3.3 中的一个已知问题,即 FFTW 标头错误地识别出它们正在使用 gcc 版本 >=4.6 进行编译,该版本具有 128 位浮点支持。有报道说用icc编译会生效,看来nvcc steered compilation也有同样的问题。

建议的解决方法是升级到 FFTW 3.3.2。

【讨论】:

  • 非常感谢。我进行了升级并解决了问题。
  • 我在 FFTW 3.3.4、GCC 4.9.2 和 CUDA 6.5.19 中受此影响。
  • @rubenvb: GCC 4.9 不是 CUDA 6.5 支持的编译器,所以我不希望它能够正常工作,无论 FFTW 是否存在问题
  • 我的意思是它在 FFTW 3.3.2 中没有修复,甚至在 2014 年 3 月发布的 the fix was merged in July 2014 之前的 3.3.4 中也没有修复。 GCC 4.9 与 CUDA 一起工作得很好,就像它与旧的 Matlab 版本一起工作一样(它也“依赖”于旧的 GCC 版本)。只是 NVIDIA 没有正式“支持”它,因为他们懒得实际测试它。
猜你喜欢
  • 2013-10-05
  • 1970-01-01
  • 2012-01-22
  • 2012-01-09
  • 2014-03-26
  • 1970-01-01
  • 2016-03-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多