2010-07-15 2 views
4

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

ответ

4

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

0

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

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

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

+0

Я знаю, что он теряет точность, однако я надеюсь, что это будет более согласованным между различными ОС. Стандартная функция sqrt для математической библиотеки не является особенно стандартным, и результат - разные результаты на разных платформах. В этом случае важны скорость и согласованность. – arsenm

+3

Я не уверен, где вы получили эту информацию, но это неверно. 'sqrtss' - квадратный корень с квадратным квадратом с квадратной точностью IEEE-754. Возможно, вы думаете вместо «rsqrtss», который является быстрым приближенным квадратным корнем. –

+1

@arsenm: Стандартные функции sqrt для математической библиотеки полностью стандартизованы, и результаты не могут варьироваться между платформами, которые соответствуют Приложению F стандарта C: «Функции sqrt в обеспечивают работу квадратного корня IEC 60559». IEC 60559 (IEEE-754), в свою очередь, полностью определяет семантику квадратного корня. –

Смежные вопросы