【问题标题】:gcc doesn't want to use AVX on macgcc 不想在 mac 上使用 AVX
【发布时间】:2013-01-29 15:22:03
【问题描述】:

所以我有了这款全新的 mac book pro,配备英特尔酷睿 I7 处理器和sysctl machdep.cpu.features 给予

machdep.cpu.features:FPU VME DE PSE TSC MSR PAE MCE CX8 APIC SEP MTRR PGE MCA CMOV PAT PSE36 CLFSH DS ACPI MMX FXSR SSE SSE2 SS HTT TM PBE SSE3 PCLMULQDQ DTES64 MON DSCPL VMX SMX EST TM2 SSSE3 CX16 TPR PDCM SSE4.1 SSE4.2 xAPIC POPCNT AES PCID XSAVE OSXSAVE TSCTMR AVX1.0 RDRAND F16C

然而,当我运行 gcc (4.7.2 macports) 时,它没有 #define __AVX__。怎么了? (Mac OS X 10.8.2)

【问题讨论】:

  • 使用 Xcode 自带的 clang - 这支持 AVX。
  • 使用clang。它支持 AVX,也支持 C++11。
  • @Walter:Apple 的 clang 确实确​​实定义了 __AVX__,例如clang -dM -E -mavx - < /dev/null | grep -i avx 产生 #define __AVX__ 1
  • 您需要说明您正在使用的编译器标志,否则答案将是猜测

标签: macos gcc osx-mountain-lion avx


【解决方案1】:

我取决于您使用的编译器标志 __AVX____SSEx__ 是否会被定义。

因此,如果您使用g++ -march=corei7avx,将定义宏。 -march=native 也应该足够了,如果 gcc 能够正确检测到您的 cpu(通常是这样)。

【讨论】:

  • 谢谢。是的,使用march=native 它会接他们。 march=corei7avx 无法识别('-march= 开关的错误值')。但是,当我使用march=native 时,gcc 仍然无法产生有用的输出,因为链接器无法处理 avx 指令。这是 macports 自带的 cctools 链接器。我阅读了一些其他问题,但想知道我是否可以简单地告诉 gcc 使用另一个链接器?我在哪里可以找到 binutils (g)as?我安装了它(macports)但找不到gas。
【解决方案2】:

在运行 10.6.8 的 i7 MBP 13"(2010 年中)上,当前的 MacPorts gcc 4.7.3 和 4.8.2 在指定 -mavx 时确实定义了 AVX。但是它们会导致编译代码崩溃使用 boost::simd(可通过 www.metascale.org 获得)。 Macports clang-3.3 没有此类问题,但编译时间更长(有或没有 -mavx,与没有 -mavx 的 gcc >= 4.7 相比)。

【讨论】:

    猜你喜欢
    • 2012-04-08
    • 1970-01-01
    • 1970-01-01
    • 2012-11-23
    • 2014-05-26
    • 1970-01-01
    • 2013-04-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多