【问题标题】:How to compile parts of code with different floating-point options?如何使用不同的浮点选项编译部分代码?
【发布时间】:2020-06-12 13:40:34
【问题描述】:

我正在使用英特尔编译器优化一些 C++ 代码,我需要在单个源文件中的某些代码部分使用不同的编译选项。

我知道#pragma pack 指令可以更改结构成员在代码中的对齐方式,但我想知道是否还有其他选项可用于其他指令。

就我而言,我正在使用/fp:precise 选项编译我的代码,但我想在代码的某些部分使用/fp:fast

【问题讨论】:

  • 请注意#pragma pack 改变了结构布局,即它本质上改变了结构定义。如果您在某些翻译单元中使用它,但在共享访问该结构实例的其他翻译单元中不使用它,您的代码将无法工作。
  • 每个编译单元都是单独编译的。生成的目标文件链接在一起。您可以为每个编译单元使用不同的编译器标志。
  • 这个问题太宽泛,缺乏自己的研究。你说“我想知道是否有其他选项的其他指令”。显而易见的答案是“嗯,是的”。要看的地方是英特尔的编译器文档,特别是software.intel.com/content/www/us/en/develop/documentation/…

标签: c++ pragma icc


【解决方案1】:

您可以使用#pragma float_controlMSVC 和英特尔® C++ 编译器都支持)选择一些浮点选项用于特定函数

但是,请注意链接文档中给出的重要警告:

float_control 杂注与 /fp 的行为不同 编译器选项。 float_control pragma 只控制部分 浮点行为。它必须与 fp_contract 和 fenv_access 编译指示重新创建 /fp 编译器选项 ...

使用此指令和相关的 #pragma 指令允许您使用不同的选项在单个翻译单元中编译代码部分。 p>

根据链接文档中显示的表格(就在引用的文本下方),/fp:precise/fp:fast 之间的差异由 float_control 杂注控制(但您将需要其他人从/fp:strict 切换),所以像下面这样的代码将允许给定源文件中的一个函数使用fast 选项:

#pragma float_control( precise, off, push ) // Save current setting and turn off /fp:precise
double FastFloatFunc(double x)
{
    double y = x * (x - 1);
    // Do something: Generated code will use /fp:fast
    return y;
}
#pragma float_control(pop) // Restore file's default settings

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-26
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多