Всегда ли включение -msse, -msse2 и -mfpmath = sse заставит мою программу работать быстрее? - PullRequest
16 голосов
/ 09 июня 2011

У меня есть программа на C ++, которая много занимается математикой (в основном это вызовы sin (), sqrt () и т. Д. Регулярных операций).Я знаю, что теоретически включение -msse, -msse2 и -mfpmath = sse должно предоставлять больше регистров, которые GCC / G ++ может использовать для них, что потенциально может ускорить выполнение моей программы, на практике это всегда будет так?В худшем случае это может заставить мой код работать медленнее?

Ответы [ 2 ]

16 голосов
/ 09 июня 2011

Когда вы беспокоитесь о производительности, вы всегда должны профилировать.

Инструкции SSE используют разные ресурсы ЦП, поэтому они могут вызвать снижение производительности (например, из-за того, что эти ресурсы недоступны для Hyperthreading), но в реальной жизни это должно быть очень редко.

12 голосов
/ 09 июня 2011

Нет: это не всегда сделает программу быстрее.

Хотя это может , я бы не ожидал большого замедления в жалких случаях;однако, как отметил Бен, профиль , профиль профиля .

Ваша удача может отличаться.Кроме того, использование -march=native обычно лучше, если вы компилируете процессор того же типа, на котором будет выполняться код.

В частности, с инструкциями SIMD, отслеживайте выравнивание и привязку процессора (т.е. влияние на локальность кэша)

...