GProf: Что такое __cosl_internal и __sinl_internal функции?

Я профилировал свою программу с помощью 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 ответ

Решение

Эти две функции являются подробностями реализации cos а также sin,

Если вы посмотрите на https://github.com/Alexpux/mingw-w64/blob/master/mingw-w64-crt/math/cos.def.h#L51, тригонометрические функции сначала проверяют, является ли значение NaN или бесконечным, прежде чем вычислить фактическое значение. Это причина, почему вы получаете два хита:

  • один для самого вычисления
  • один для упаковочного кода, чтобы проверить действительные номера.

Вы можете рассматривать внутренние функции как вызовы cos / sin. Они могут не отображать тот факт, что они вызываются из sin / cos, в зависимости от сгенерированной отладочной информации, а также от уровня оптимизации.

Другие вопросы по тегам