Убедитесь, что компилятор всегда использует инструкцию SSE sqrt - PullRequest
4 голосов
/ 15 июля 2010

Я пытаюсь заставить GCC (или clang) последовательно использовать инструкцию SSE для sqrt вместо математической функции библиотеки для наукоемкого научного приложения.Я пробовал множество GCC на различных 32 и 64-битных системах OS X и Linux.Я проверяю, чтобы включить sse с -mfpmath = sse (и -march = core2, чтобы удовлетворить требования GCC для использования -mfpmath = sse на 32-битной).Я также использую -O3.В зависимости от версии GCC или clang, сгенерированная сборка не всегда использует sqrtss SSE.В некоторых версиях GCC все sqrts используют инструкцию.В других есть смешанное использование sqrtss и вызова функции математической библиотеки.Есть ли способ дать подсказку или заставить компилятор использовать только инструкцию SSE?

Ответы [ 2 ]

4 голосов
/ 16 июля 2010

Используйте sqrtss свойственный __builtin_ia32_sqrtss?

0 голосов
/ 16 июля 2010

Вы должны быть осторожны при использовании этого, вы, вероятно, знаете, что он имеет меньшую точность.Это будет причиной того, что gcc не использует его систематически.

Есть хитрость, которая даже упоминается в руководстве INTEL по SSE (надеюсь, я правильно помню).Результатом sqrtss является только одна Heron итерация от цели.Может быть, этот gcc иногда может inline окружать короткую итерацию в какой-то момент (версии), а для других - нет.

Вы можете использовать встроенную функцию, как говорит MSN, но вам обязательно нужно посмотретьспецификации на сайте INTEL, чтобы узнать, чем вы торгуете.

...