GProf:什么是__cosl_internal和__sinl_internal函数?

时间:2018-11-24 13:39:51

标签: c++ profiling gprof

我一直在使用gprof对程序进行性能分析,并发现以下内容出现在顶部附近:

Each sample counts as 0.01 seconds.
  %   cumulative   self              self     total           
 time   seconds   seconds    calls   s/call   s/call  name    
 17.50      6.69     6.69                             _mcount_private
 12.14     11.33     4.64                             __cosl_internal
 11.02     15.54     4.21                             __sinl_internal

我非常大量地使用cmath库中的余弦和正弦函数,并且由于cos和sin是这些函数调用的名称,所以也许就是这些。但是,在探查器的更下方,我也有

 %   cumulative   self              self     total           
time   seconds   seconds    calls   s/call   s/call  name    
2.93     23.25     1.12                             cos
2.51     24.21     0.96                             sin

这令人困惑,因此我不确定__cosl / sinl_internal的实际含义。尝试使用Google问题时,没有得到有意义的结果。

这是使用的构建命令:

i686-w64-mingw32-g++.exe -Wshadow -Winit-self -Wredundant-decls 
-Wcast-align -Wfloat-equal -Wunreachable-code -Wmissing-include-dirs 
-pedantic-errors -pedantic -Wall -std=c++14 -fexceptions -O2 -std=c++14 
-pg -DSFML_STATIC -std=c++14

1 个答案:

答案 0 :(得分:1)

这两个函数是cossin中的实现细节。

如果您查看https://github.com/Alexpux/mingw-w64/blob/master/mingw-w64-crt/math/cos.def.h#L51,则三角函数会先检查该值是NaN还是无穷大,然后再计算实际值。这就是为什么您会获得两次成功的原因:

  • 一个用于计算本身
  • 一个用于自动换行的代码,以检查有效数字。

您可以将内部函数视为cos / sin调用。根据生成的调试信息以及优化级别,它们可能不会显示从sin / cos调用它们的事实。