Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

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