Математические функции Visual C++ работают быстрее в Win32

Есть кое-что, что я заметил при профилировании программы VS2013 с vtune, для которой я не смог найти правильного объяснения.

По сути, одна из немаловажных горячих точек для программы - математические функции. cos, sin, sqrt и т. д. Мы делаем много математических вычислений.

Однако в сборке win32 вызываются следующие функции: libm_sse2_cosprecise, libm_sse2_sqrtprecise и т. Д. В x64 вызываются cos, sin и т. Д. Оказывается, что производительность в x64 ниже, чем в win32 для всех математических функций.

Настройки компилятора практически идентичны для 32- и 64-битных сборок, единственные различия не должны влиять на математические функции. Мы используем двойную точность большую часть времени.

Так почему же 64-но математические функции медленнее? Почему это где-то не задокументировано? Я что-то пропустил? Я что-то не правильно понимаю?

Единственная информация, которую я действительно мог найти о встроенных функциях математических функций в документации Microsoft (которой, мне кажется, не хватает в этой теме), - это страница: https://msdn.microsoft.com/en-us/library/tzkfha43(v=vs.120).aspx

Так как мы используем стандартную точность с плавающей точкой (которая должна быть fp-точной), это не будет применяться в нашем случае, даже если /O2 включен, если я правильно понял. (В наших последних тестах, кстати, отключить встроенные функции отключено). Кроме того, это не объясняет, почему 32 и 64-битные отличаются...

Любая информация или указатели будут оценены.

0 ответов

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