Влияют ли ненормальные флаги, как Denormals-Are-Zero (DAZ), на сравнение на равенство?

Если у меня есть 2 ненормальных числа с плавающей запятой с разными битовыми комбинациями и я сравниваю их на равенство, может ли на результат повлиять флаг Denormals-Are-Zero, флаг Flush-to-Zero или другие флаги на обычно используемых процессорах?

Или эти флаги влияют только на вычисления, а не на проверки на равенство?

1 ответ

Решение

DAZ (Denormals Are Zero) влияет на чтение, поэтому DAZ влияет на сравнение. Все денормали буквально рассматриваются как -0.0 или же +0.0согласно их знаку.

FTZ (Flush To Zero) влияет только на вывод записи, поэтому FTZ не влияет на сравнение. Сравнения не выдают результат FP, поэтому нечего сбрасывать.


(DAZ и FTZ являются флагами в регистре управления / состояния SSE MXCSR. Эквивалента для x87 нет.)


Почему оба флага существуют отдельно, а не один флаг, контролирующий обе вещи? Я не знаю, но вам определенно нужны оба эффекта.

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

Создание правильного денормального вывода (например, путем вычитания ближайших нормальных чисел или умножения двух небольших нормальных чисел) потенциально медленное, поэтому вам нужна FTZ, чтобы позволить процессору просто опуститься до +-0.0 вместо того, чтобы принимать микрокод, чтобы получить правильное значение.


Или вы можете запустить один поток с быстрой математикой (FTZ+DAZ), в то время как другой поток работает с точной математикой для некоторых вычислений, которые этого требуют. Если поток быстрой математики считывает данные, полученные точным потоком, эти числа могут быть денормальными.

Я не уверен, какой будет вариант использования для установки DAZ, но не FTZ, или наоборот. Это, безусловно, будет связано с чтением данных, которые вы сами не производили, или записью данных для других читателей, кроме вас самих, в противном случае достаточно просто FTZ, чтобы избежать замедлений.

(Только одного DAZ недостаточно: создание денормализованного выхода из обычных входов все еще идет медленно, даже если следующая операция обрабатывает его как 0.)

Другие вопросы по тегам