强制编译器使用函数

时间:2015-10-28 12:03:15

标签: c gcc clang

我正在玩一些函数来对一些常见函数(sqrt,sin,cos等)进行aproximations,我想知道我是否可以学习'我正在使用的C库的性能和精度以及硬件指令(如果可用)

所以,我的问题是:有没有办法告诉编译器,对于某些函数我想要'库版本'以及其他人的硬件版本' ? (如果可能的话,让编译器自由地优化库版本,但不使用硬件指令)。

类似的东西:

library_fun(x);  // <-- compiled to the library version
hardware_fun(x); // <-- compiled to the hardware version (if available)

编辑:

好的,我的问题不是自我解释,新的试验:

我假设我的C库有某种软件 - 后备&#39;在硬件没有的情况下实现某些数学函数。我想知道我是否可以打电话给那个(我称之为library_fun)来检查它的精确度/性能/只是好奇心。如果可以的话。

此外,我可以使用硬件指令(如果存在且可用)。

作为更详细的示例&#39;,在我的代码中,我有函数sqrt。如果我检查汇编输出,我会收到sqrtsd指令。所以,没有任何对sqrt的调用。

1 个答案:

答案 0 :(得分:1)

通过按特定顺序列出库,链接器将使用符号(函数)的第一个出现顺序搜索这些库。在搜索编译的源代码后搜索库,因此代码中的任何符号都优先于库中的版本。

请注意,可能存在冲突或不兼容性,例如,如果库函数使用该库中已在早期列出的库或对象中找到的其他函数。

此行为可能还取决于您使用的工具链,但我所描述的行为是我通常看到的行为。

编辑:根据您的问题编辑:编译器可能会检查编译器正在运行的硬件,以决定使用库函数或CPU指令进行某些数学工作。然后编译器可能会切换到指示它使用/不使用这些指令,例如,如果您正在编译不同的平台。 VC2008有:

  • /arch:[SSE|SSE2]使用Streaming SIMD Extensions(SSE)和Streaming SIMD Extensions 2(SSE2)指令指定代码生成的体系结构。
  • /fp:precise禁用内在[浮点];而是使用标准的运行时库例程。