gpt4 book ai didi

c - 强制编译器使用函数

转载 作者:行者123 更新时间:2023-11-30 15:15:48 25 4
gpt4 key购买 nike

我正在玩一些函数来近似一些常见函数(sqrt、sin、cos 等),我想知道我是否可以“研究”我正在使用的 C 库的性能和精度,硬件指令(如果有)

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

类似于:

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

编辑:

好吧,我的问题不是很不言自明,新的尝试:

我假设我的 C 库对某些数学函数有某种“软件后备”实现,以防硬件没有它们。我想知道我是否可以调用它(这就是我所说的library_fun)来检查它的精度/性能/只是好奇心,如果可以的话。

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

作为更详细的“示例”,在我的代码中我有函数 sqrt。如果我检查汇编输出,我会得到一个 sqrtsd 指令。因此,不会调用 sqrt 任何内容。

最佳答案

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

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

此行为可能进一步取决于您正在使用的工具链,但我描述的行为是我通常看到的情况。

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

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

关于c - 强制编译器使用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33390550/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com