2011-10-25 2 views
2

Я пытаюсь выполнить различные тестовые тесты с использованием CPU2006, чтобы узнать, какие различные оптимизации делают с точки зрения скорости на gcc. Я знаком с -O1, -O2 и -O3, но слышал, что -msse - достойная оптимизация. Что это такое? Я также видел, что -msse по умолчанию используется в 64-битной архитектуре, поэтому как отключить его, чтобы сравнить разницу между ее использованием и не использовать?Disabling -msse

ответ

0

http://www.justskins.com/forums/gcc-option-msse-and-128289.html

SSE (http://it.wikipedia.org/wiki/Streaming_SIMD_Extensions) как название говорит в инструкции SSE, присутствующая в процессорах Pentium, так как 3. Они быстро для своего рода векторных и плавающего точечное вычисление. Они доступны во всех 64-битных процессорах, поэтому зачем их отключать?

Вы можете выбрать между -msse и -msse2. SSE2 - еще один набор команд, построенный над SSE, который добавляет другие мощные и очень быстрые векторные инструкции.

Pentium 3 имеет SSE и представляет собой 32-битный процессор. SSE2 более современен, а Pentium 4, который все еще является 32-битным процессором, имеет SSE2.

+1

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

+0

Вы можете выбирать между '-msse',' -msse2', '-msse3',' -msse4.1' и '-msse4.2'. Хотя для «реального» использования, вероятно, лучше просто настроить генерацию ЦП вместо конкретных расширений. – millimoose

+0

Инструкции SSE используются только в некоторой оптимизированной версии memset и memcpy или когда компилятор может понять, что это может быть лучшая оптимизация, но sse и sse2 имеют так много требований, например, выравнивание по памяти, что они используются редко. Я не удивлюсь, если ваша программа не будет иметь никакого значения, если она скомпилирована с -msse или с -mno-msse –

5

-msse активирует генерацию инструкций SSE. Все 64-разрядные процессоры (x86-64) имеют их, но некоторые старые 32-разрядные процессоры (IA-32) не имеют этих инструкций. Это является причиной настроек GCC по умолчанию.

SSE инструкции относятся к векторным операциям и плавающей запятой. Учитывая, что возможности для автоматической векторизации встречаются редко в коде общего назначения, единственная разница, которую вы, скорее всего, наблюдаете, - это использование плавающей запятой.

На 64-бит, чтобы отключить инструкции SSE, используйте -mno-sse

+0

Pentium 3 действительно имел это, но 32-битный процессор. SSE2 более современен, а не у всех 32-битных процессоров, но некоторые из них есть. Pentium 4 - это 32-битный процессор, но имеет SSE2. –

+0

@ Салваторе Я не уверен, что вы имеете в виду. Все процессоры Intel IA32 от 386 до Pentium II представляют собой 32-разрядные процессоры без SSE. Я поясню свой ответ, но я имел в виду, что все процессоры x86-64 имеют SSE, но не все процессоры IA32 имеют его. SSE2, как расширение SSE, конечно поддерживается только подмножеством процессоров, поддерживающих SSE. –

+0

Да точно :) теперь мне очень понятно. –