GProf: Что такое __cosl_internal и __sinl_internal функции? - PullRequest
0 голосов
/ 24 ноября 2018

Я профилировал свою программу, используя 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 голосов
/ 24 ноября 2018

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

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

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

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

...