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.)