【问题标题】:Is there a difference between Apple Clang and OpenMP-enabled Clang from Homebrew?Apple Clang 和 Homebrew 中支持 OpenMP 的 Clang 之间有区别吗?
【发布时间】:2021-10-26 13:34:19
【问题描述】:

我想知道 Apple 提供的 Clang 编译器与 Homebrew 提供的 OpenMP 附带的 Clang 编译器相比是否有任何优势? 如果切换到 OpenMP Clang 会不会有任何性能损失(不管多线程能力)?

我还发现this老问题没有很好的答案


更新

我使用 Apple 的 Clang 和主流 Clang 编译了 OOFEM 并运行了同样的问题,

Apple 的 Clang:实时消耗:000h:01m:26s

主流Clang:实时消耗:000h:01m:24s

启用多线程后,性能也相似。 我还注意到的一个区别是 Apple 的 Clang 似乎忽略了一些 CMake 选项,例如-DOpenMP_CXX_FLAGS="-I/usr/local/opt/libomp/include" 对 Apple 的 Clang 无效,但在主流 Clang 上运行良好。

【问题讨论】:

    标签: c++ macos clang openmp


    【解决方案1】:

    有区别吗?

    如前所述,答案本身。它们是两种不同的编译器,我们不知道 Apple 在它们内部做了什么。我们知道他们不提供 OpenMP 支持,所以这至少是一个区别。

    如果切换到 OpenMP Clang 会不会有任何性能损失 (不管多线程能力)?

    我对此表示怀疑,但由于您清楚地衡量了性能并使用了两种编译器,您似乎可以告诉我们:-)

    【讨论】:

    • Jim,您是否有任何最新的参考资料表明 apple clang 仍然不支持 OpenMP?我正在使用 -fopenmp 标志,似乎 Apple Clang 对此很满意,如果它不支持 OpenMP,它不应该为此烦恼吗?
    • 他们不提供 OpenMP 运行时的事实本身就足以说明他们不支持 OpenMP :-) i通过查看 asm 输出来检查编译器本身是否处理 OpenMP 应该很容易. (如果我不在公园里用手机,我会去看的!)
    • 当我尝试将 -fopenmp 标志传递给 Apple 的 clang 时,它被拒绝 $ /usr/bin/clang -fopenmp -v -s hello_omp.c Apple clang version 13.0.0 (clang-1300.0.29.3) Target: arm64-apple-darwin20.6.0 Thread model: posix InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin clang: error: unsupported option '-fopenmp'
    • 我认为你应该在 -fopenmp 之前使用 -Xpreprocessor 来处理 Apple 的 Clang
    • 是的,-Xpreprocessor -fopenmp Apple 的 clang (Apple clang version 13.0.0 (clang-1300.0.29.3)) 确实将 -fopenmp 传递给编译器本身并生成 OpenMP 运行时调用。但是,由于它们不提供 <openmp.h> 或运行时库,它们显然不支持 OpenMP。 (而且,正如我们所见,安装和找到那些 [包括在运行时] 并非易事)。所以我的结论仍然是:使用 brew 安装一个真正的 clang(或者 GCC,来吧)。
    猜你喜欢
    • 2015-01-14
    • 2014-11-27
    • 1970-01-01
    • 2016-08-01
    • 1970-01-01
    • 2021-05-08
    • 2012-12-01
    • 2015-12-07
    相关资源
    最近更新 更多