Zfa Standard Extension for Additional Floating-Point Instruction
3-го мая 2023-го года на public review выкатили новое RISC-V расширение.
Основная фишка - это добавление Load-Immediate, а именно мгновенная загрузка в fp регистр, а не выгрузка из памяти или move из целочисленного регистрового файла, что в некоторых задачах будет ускорять передачу операндов на вычислительный юнит.
Откуда же брать эти константы? Как и где хранить знак, экспоненту, мантиссу? Предлагается хранить 32 значения, т.к. immediate поле кодируются 5 битами. Таблицу (массив хранимых значений) предлагается заполнить константными значениями, которые являются наиболее часто используемыми в наборе мат. библиотек, например: Min positive normal, inf, ±1.0, 0.5 и.т.д.
Конкретно, эти значения имеют не более двух значащих битов мантиссы, отличные от нуля. Такой подход был выбран для упрощения реализации таблицы. Чтобы хранить не все поле мантиссы [а это 52 бита для dp, 112 бит для qp], а только, например, старшие три бита, которые представляются различными комбинациями 1 и 0.
Для подробностей смотри раздел 25.1
Второе нововведение стандарта - это дополнение для операций минимума и максимума, видимо для того, чтобы поддерживать одновременно 2008 и 2019 стандарт 754-го, когда изменилась обработка функций max/min.
Стандарт IEEE 754-2008 определяет функции minNum и maxNum, которые возвращают минимальное и максимальное значение из двух входных данных соответственно. Эти функции не возвращают NaN, если один из входных параметров является NaN, а другой - не NaN.
Zfa вводит команды fminm.s и fmaxm.s, которые выполняют точно такую же операцию, как fmin.s и fmax.s, за исключением того, что если любой операнд является NaN, то возвращается каноническое NaN. Это означает, что если один операнд является числом, а другой - NaN, то возвращается каноническое NaN.
Рассуждения о различиях max/min в стандартах 2008/2019 и NaN-prop можно найти тут и тут.
Post #122
1.91K

- 👍 6
- 🔥 5
- 🐳 4
- 👌 1