性能报告显示“__libm_pow_l9”

perf report showing "__libm_pow_l9"

我正在使用 perf 来分析我的程序,其中涉及大量使用 exp() 和 pow()。代码是使用

编译的
icc  -g -fno-omit-frame-pointer test.c

并介绍了:

perf record -g ./a.out

后面是:

perf report -g 'graph,0.5,caller'

并且 perf 给出了:

__libm_exp_l9() 和 __libm_pow_l9() 这两个函数消耗了大量的计算能力。

所以我想知道它们是否分别只是 exp() 和 pow() 的别名?或者有什么建议可以阅读这里的报告吗? 谢谢。

它们不是别名,而是功能的内部实现。数学库通常有多个函数版本,具体取决于使用的处理器、指令集或参数。

没有什么可担心的。 Exp 和 Pow 是比指令(通常)更复杂的函数,因此它们需要一些时间。不幸的是,我没有找到对它们的任何引用(英特尔数学库可能不是开源的),但这是对函数使用内部命名空间名称的常见做法。