alexPec 3 7 августа, 2022 Опубликовано 7 августа, 2022 · Жалоба Всем доброго дня. Пытаюсь реализовать арифметику FP16 на ядре Floating point от ксайлинкса (vivado 2020.1) Настройки IP: Проблема такая: если одно из входных чисел минимального порядка (порядок -15, биты 14..10 входного слова = 0), то на выходе 0. Даже если мантисса при этом максимальная. На рисунке ниже входное число 2 = 0x03ff (в десятичной форме 6,10054Е-5). Второй вход равен 0х4900 (это 10), 0х63d0 (это 1000), 0х5640 (это 100). При этом на выходе всегда 0 (и при любой мантиссе порядка -15): А вот картина когда порядок -14, а мантисса минимальная (0х0400, в десятичной форме 6,10352Е-5), перемножаем на те же числа: Видим на выходе нормальный результат: 0x1100 (=6,10352E-4), 0x2bd0 (=6,10352E-2) и 0x1e40 (=6,10352E-3) Что сделано не так??? Неужто в корке ксайлинса глюк? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fguy 4 7 августа, 2022 Опубликовано 7 августа, 2022 · Жалоба 37 минут назад, alexPec сказал: Пытаюсь реализовать арифметику FP16 на ядре Floating point от ксайлинкса (vivado 2020.1) А с чего вы решили что фп16 должно работать? Это где то указано в даташите на ядро? По опыту могу сказать что с этим ядром работает фп32, а в хлс получалось еще делать накопитель в дабле - фп64. Upd. Хотя да - в даташите поддержка типа есть "• binary16 (Half Precision Format) – Uses 16 bits, with an 11-bit fraction and 5-bit exponent." Попробуйте режим "блокинг" с полными подтверждениями и вывести биты переполнений. По статусу вы свой - на фтп-и лежат декодированные исходники штатных ядер - можете сами посмотреть что там накручено. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexPec 3 7 августа, 2022 Опубликовано 7 августа, 2022 · Жалоба 49 минут назад, fguy сказал: Попробуйте режим "блокинг" с полными подтверждениями и вывести биты переполнений. Пробовал, то же самое. Так не хотелось лезть внутрь этой плавучки... Думал хоть тут то без глюков будет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Timmy 1 8 августа, 2022 Опубликовано 8 августа, 2022 (изменено) · Жалоба Насколько я помню, эта кора в принципе не поддерживает денормализованные числа(у которых в поле порядка стоит 0), поэтому все они считаются равными нулю, это экономит ресурсы и повышает быстродействие. Так что не глюк, а фича:). Кстати, вы забыли, что числа с минимальным порядком денормализованы, и к ним старшая единица не добавляется, поэтому неправильно переводите в десятичную экспоненциальную форму. Изменено 8 августа, 2022 пользователем Timmy Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fguy 4 8 августа, 2022 Опубликовано 8 августа, 2022 · Жалоба 21 час назад, alexPec сказал: (и при любой мантиссе порядка -15) 2 часа назад, Timmy сказал: Кстати, вы забыли, что числа с минимальным порядком денормализованы, и к ним старшая единица не добавляется, поэтому неправильно переводите в десятичную экспоненциальную форму. Похоже что так - судя по первой табличке в https://en.wikipedia.org/wiki/IEEE_754 указано что минимальный порядок для фп16 доложен быть -14 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexPec 3 8 августа, 2022 Опубликовано 8 августа, 2022 · Жалоба Всем спасибо за ликбез! Радует, что это действительно не баг, а фича :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться