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

StackOverflow https://stackoverflow.com/questions/3692020

Вопрос

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

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

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

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

Решение

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

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

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

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

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

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

(2) X87 предлагает некоторые операции, которые не охватываются наборами инструкций SSE #, а именно инструкциями для тригоганометрических операций (SIN, COS, ...) и LOGARITHMS.

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