【问题标题】:Localize g++ compile options within code在代码中本地化 g++ 编译选项
【发布时间】:2015-11-23 08:31:29
【问题描述】:

我正在寻找一种简单的方法来将某些 g++(具体为 g++-4.9)编译选项本地化到某些代码行或至少是目标函数。一般来说,我很感兴趣,但也特别对-fast-math-ffinite-math-only-fno-signed-zeros 选项感兴趣。

我认为使用 make 实用程序可以在 *.cpp 文件级别进行本地化,但我希望有一种方法可以通过 #pragma 或 __attribute__ 或其他方式在代码本身中启用它。我想这样做不仅是为了最大限度地减少对外部文件的依赖(即不正确的makefile 的风险),而且希望将某些 FP 行为超本地化到函数中的特定方程。

或者,如果无法通过内联指令对 FP 行为进行本地化,如果在项目构建中未启用所需的编译器指令(例如,makefile 丢失或不当修改),我该怎么做才能至少触发编译时错误.

我认为这种内联优化可能是特定于编译器的,在这种情况下是 g++,但这是我愿意采取的折衷方案。

【问题讨论】:

    标签: c++11 compiler-optimization pragma compiler-directives g++4.9


    【解决方案1】:

    我不确定您是否正确使用了“本地化”一词。 Localization 与使软件适应不同人类语言(法语、俄语、汉语...)的用户有关

    也许您想要求编译器使用其他优化标志来优化 一些 函数。

    这可以使用#pragma GCC optimize 等...或使用一些function attributes

    【讨论】:

      【解决方案2】:

      gcc 中你可以使用function attribute optimize:

      void f () __attribute__ ((optimize("fast-math"), optimize("finite-math-only"), optimize("no-signed-zeros")));
      

      【讨论】:

      • 谢谢。我找到了一些教程/帮助讨论 _attribute_ 与优化级别(例如 O0、O1、O2)一起使用,但从描述中看,它也适用于其他选项,如快速-数学等
      【解决方案3】:

      您也许可以使用函数属性中的fpmath 选项打开其中的一些功能,但我在文档中并不清楚这一点。鉴于此,我将专注于检测:

      -fast-math 已经打开了-ffinite-math-only,所以你不必担心。 -fast-math 的文档说:

      此选项使预处理器宏 FAST_MATH 变为 已定义。

      这意味着它可以通过以下方式检测到

      #ifndef __FAST_MATH__
      #error "The -fast-math compiler option is required"
      #endif
      

      我还没有找到一种编译时方法来检测-fno-signed-zeros的存在

      【讨论】:

        猜你喜欢
        • 2012-09-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-05
        相关资源
        最近更新 更多