Вопрос

Я знаю, что x87 обладает более высокой внутренней точностью, что, вероятно, является самой большой разницей, которую люди видят между ит-операциями и операциями SSE.Но я должен задаться вопросом, есть ли какие-либо другие преимущества в использовании x87?У меня есть привычка печатать на машинке -mfpmath=sse автоматически в любом проекте, и мне интересно, не упускаю ли я чего-нибудь еще, что предлагает x87 FPU.

Это было полезно?

Решение

Для рукописного asm в x87 есть некоторые инструкции, которых нет в наборе команд SSE.

Навскидку, это все тригонометрические штуки вроде fsin, fcos, fatan, fatan2 и какие-то экспоненциально-логарифмические штуки.

С gcc -O3 -ffast-math -mfpmath=387, ССАГПЗ9 будет все еще фактически встроенный sin(x) в качестве fsin инструкция, независимо от того, что использовала бы реализация в libm.(https://godbolt.org/z/Euc5gp).

Вызовы MSVC __libm_sse2_sin_precise при компиляции для 32-разрядной версии x86.


Если ваш код тратит большую часть времени на тригонометрию, вы можете увидеть небольшое увеличение или потерю производительности при использовании x87, в зависимости от того, быстрее или медленнее ваша стандартная реализация математической библиотеки с использованием SSE1 / SSE2, чем медленный микрокод для fsin на любом используемом вами процессоре.

Производители процессоров не прилагают особых усилий к оптимизации микрокода для инструкций x87 в процессорах новейших поколений, поскольку он обычно считается устаревшим и редко используется.(Посмотрите на количество операций uop и пропускную способность для сложных инструкций x87 в Таблицы инструкций Агнера Фога в процессорах последних поколений:больше циклов, чем в старых процессорах).Чем новее процессор, тем более вероятно, что x87 будет работать медленнее, чем многие инструкции SSE или AVX для вычисления функций log, exp, pow или trig.

Даже когда доступен x87, не все математические библиотеки предпочитают использовать сложные инструкции, такие как fsin для реализации таких функций, как sin(), или особенно exp / log , где полезны целочисленные приемы для манипулирования битовыми шаблонами FP на основе журнала.

Некоторые алгоритмы DSP используют много тригонометрии, но обычно приносят пользу много из автоматической векторизации с помощью математических библиотек SIMD.

Однако для математического кода, где вы тратите большую часть своего времени на сложения, умножения и т.д.SSE обычно выполняется быстрее.


Также связанный: Intel Занижает Границы ошибок на 1,3 квинтиллиона - наихудший случай для fsin (катастрофическая отмена для fsin входы очень близко пи) очень плохо.Программное обеспечение может работать лучше, но только с помощью медленных методов повышенной точности.

Другие советы

  1. Это присутствует на действительно старых машинах.

EOF

Инструкции FPU меньше, чем инструкции SSE, поэтому они идеально подходят для демонстрации материалов

  • Существует значительное наследие и небольшая системная совместимость с x87:SSE - это относительно новая функция процессора.Если ваш код должен выполняться на встроенном микроконтроллере, есть большая вероятность, что он не будет поддерживать инструкции SSE.

  • Даже системы, в которых не установлен FPU, часто предоставляют эмуляторы 80x87, которые сделают код запускаемым прозрачно (более или менее).Я не знаю ни о каких эмуляторах SSE — конечно, ни в одной из моих систем их нет, поэтому новейшие версии Adobe Photoshop elements отказываются запускаться.

  • Инструкции 80x87 обладают хорошими характеристиками параллельной работы, которые были тщательно изучены и проанализированы с момента их появления примерно в 1982 году.Различные клоны x86 могут зависать при выполнении инструкций SSE.

Преобразование между float и double работает быстрее с x87 (обычно бесплатно), чем с SSE.С помощью x87 вы можете загружать и хранить float, double или long double в или из стека регистров, и он преобразуется в или из расширенной точности без дополнительных затрат.В SSE требуются дополнительные инструкции для выполнения преобразования типов, если типы смешаны, поскольку регистры содержат float или double ценности.Эти инструкции по преобразованию выполняются довольно быстро, но требуют дополнительного времени.

Реальное решение проблемы заключается в том, чтобы воздерживаться от смешивания float и double чрезмерно, не для того, чтобы использовать x87, конечно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top