vak: (Default)
[personal profile] vak
Полезная шпаргалка от Интела: bf16-hardware-numerics-definition-white-paper.pdf

Описывает подробности реализации чисел с плавающей точкой в формате BFloat16, или для краткости BF16.

BF16 отличается от стандартного FP32 (известного в Си как float) несколькими моментами.
  • Размер мантиссы уменьшен с 23 бит до 7 бит.
  • Размер экспоненты остаётся тот же, 8 бит.
  • Денормализованное число на входе операции считается нулём.
  • Денормализованный результат сбрасывается в ноль.
  • Результат округляется до ближайшего чётного.
  • Inf и NaN поддерживаются как обычно.
  • Никаких исключений или прерываний. В частности, SNaN не вызывает исключения.

Date: 2022-07-27 22:17 (UTC)
waqur: (Default)
From: [personal profile] waqur
Точно не знаю, но это поведение описано в документации: https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html
см. "-mfpmath=unit", ‘sse’: For the x86-64 compiler, these extensions are enabled by default.

(так что, подозреваю, с самой первой версии компилятора, в которой появилась поддержка целевой архитектуры x86_64).

Если подумать, то это ведь часть ABI. Если, например, функция принимает аргумент типа double, то его надо передавать либо в регистре st(0), либо в регистре XMM0. Соответственно, есть какой-то вариант, принятый для данной целевой архитектуры по умолчанию (для i686 это st(0) а для x86_64 это XMM0), а если пользователь начинает задавать какие-то нестандартные флаги компиляции для данной единицы трансляции, например играться с -mfpmath, то компилятору нужно вставить инструкцию выгрузки аргумента в другой регистр при вызове функции из другого модуля, или по указателю. Во-первых, это лишняя трата времени выполнения. Во-вторых, такие вещи нельзя легко изменить в новой версии компилятора, их закладывают раз и навсегда, как часть ABI, при добавлении в компилятор поддержки новой целевой архитектуры.

Date: 2022-07-27 22:50 (UTC)
euthanasepam: Ла-ла-ла-ла! Ла-ла-ла-ла! (Default)
From: [personal profile] euthanasepam
Похоже, что так. Беглое гугление показывает, что подобные вопросы задавали [и ответы на них давали] ещё начале нулевых, то есть именно по выходу потребительской AMD64.