如何编译具有不同浮点选项的部分代码?
How to compile parts of code with different floating-point options?
我正在使用英特尔编译器优化一些 C++ 代码,我需要在单个源文件中的某些代码部分使用不同的编译选项。
我知道 #pragma pack
指令可以在代码中更改结构成员的对齐方式,但我想知道是否还有其他指令用于其他选项。
就我而言,我正在使用 /fp:precise
选项编译我的代码,但我想在代码的某些部分使用 /fp:fast
。
您可以 select 一些 浮点选项 用于特定函数 使用 #pragma float_control
(两者都支持MSVC
和英特尔® C++ 编译器)。
但是,请注意链接文档中给出的重要警告:
The float_control pragma doesn't have the same behavior as the /fp
compiler option. The float_control pragma only governs part of the
floating-point behavior. It must be combined with fp_contract and
fenv_access pragmas to recreate the /fp compiler options ...
使用此指令和相关的 #pragma
指令 将 允许您在单个翻译单元中编译代码段 有不同的选项。
根据链接文档中显示的 table(在引用文本下方),仅 /fp:precise
和 [=15= 之间的区别] 由 float_control
pragma 控制(但您需要其他人从 /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
我正在使用英特尔编译器优化一些 C++ 代码,我需要在单个源文件中的某些代码部分使用不同的编译选项。
我知道 #pragma pack
指令可以在代码中更改结构成员的对齐方式,但我想知道是否还有其他指令用于其他选项。
就我而言,我正在使用 /fp:precise
选项编译我的代码,但我想在代码的某些部分使用 /fp:fast
。
您可以 select 一些 浮点选项 用于特定函数 使用 #pragma float_control
(两者都支持MSVC
和英特尔® C++ 编译器)。
但是,请注意链接文档中给出的重要警告:
The float_control pragma doesn't have the same behavior as the /fp compiler option. The float_control pragma only governs part of the floating-point behavior. It must be combined with fp_contract and fenv_access pragmas to recreate the /fp compiler options ...
使用此指令和相关的 #pragma
指令 将 允许您在单个翻译单元中编译代码段 有不同的选项。
根据链接文档中显示的 table(在引用文本下方),仅 /fp:precise
和 [=15= 之间的区别] 由 float_control
pragma 控制(但您需要其他人从 /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