2010-09-11 2 views
2

Я немного знаком с x87 instructions для управления числами с плавающей точкой в ​​сборке x86. Тем не менее, я где-то читал, что они редко использовались. (И не разрешались в 64-битных драйверах Windows) [1]Какие инструкции следует использовать для операций с плавающей запятой?

Если это так, то какие инструкции следует использовать? Я видел что-то в SSE, но, если я не ошибаюсь, эти инструкции были добавлены совсем недавно и не будут доступны на старых чипах. (Как и Pentium II и т. Д.)

Какие инструкции следует Я использую?

ответ

2

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

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

+0

На самом деле, я пишу компилятор, который * генерирует * инструкции с плавающей запятой :) –

+0

@George: это компилятор общего назначения, который можно ожидать для старых систем без поддержки SSE, или это для закрытая среда? –

+0

Он будет (надеюсь) широко использоваться, поэтому он должен быть совместим с максимально возможным количеством процессоров. –

0

Если вам требуется обратная совместимость, вы должны будете использовать инструкции x87. В противном случае, как говорит Натан Феллман, инструкции SSE # могут быть способом, а также потому, что код для них несколько проще писать (они используют обычную модель регистров, тогда как x87 использует стек).

Сказав, что, есть несколько причин, почему вы можете захотеть использовать x87 код (или смешивания x87/SSE код):

(1) x87 обеспечивает более высокую точность, то есть 80-бит с плавающей точкой вычислений. (Оба, x87/SSE предлагают 32-битные и 64-битные поплавки.) Это потенциально может быть проблемой, например. некоторый научный код, который может потребовать дополнительной точности.

(2) x87 предлагает некоторые операции, которые не охватываются наборами команд SSE #, а именно инструкции для трехгонометрических операций (sin, cos, ...) и логарифмы.

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

  • Нет связанных вопросов^_^