Какие инструкции я должен использовать для операций с плавающей запятой? - PullRequest
2 голосов
/ 11 сентября 2010

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

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

Какие инструкции я должен использовать?

Ответы [ 2 ]

2 голосов
/ 11 сентября 2010

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

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

0 голосов
/ 13 сентября 2010

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

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

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

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

...