Блог
Сравнение по зафиксированным оракулам обнаружило ошибку номинальной ширины: TNF16, помеченный как 16-битный, занимает 19 физических бит, поэтому сначала сопоставляются контейнеры, а потом решётки значений.
[измерено — зафиксированный оракул, не плата] В работе W991 таблица конкурирующих форматов была пересчитана по зафиксированным в репозитории оракулам. Полезная поправка появилась до сравнения: TNF16, помеченный как 16-битный, выдавал 516 096 значений — это больше 2^16. Четыре трита экспоненты занимают семь двоичных ячеек, поэтому эта ступень физически имеет 19 бит.
После исправления сравнение индексируется физической шириной и отказывается от ширины, которой нет ни на одной ступени. Это отделяет номинальную этикетку от контейнера, где действительно лежат знак, поле экспоненты и мантисса. Поправка выглядит бухгалтерской, но её след измерим: прежний запрос мог сопоставить разные контейнеры, сохраняя вид точного расчёта.
| физическая ширина | ступень TNF | значения TNF | значения posit es=1 | шаг TNF при 1.0 | шаг posit при 1.0 |
|---|---|---|---|---|---|
| 6 бит | TNF4 (2 трита, 1 бит мантиссы) | 56 | 62 | 25% | 12.5% |
| 10 бит | TNF8 (3 трита, 4 бита мантиссы) | 960 | 1022 | 3.125% | 0.781% |
| 19 бит | TNF16 (4 трита, 11 бит мантиссы) | 516 096 | 524 286 | 0.024% | 0.002% |
На каждой сопоставленной ширине этой лестницы у TNF меньше достижимых значений и крупнее локальный шаг около 1.0, чем у posit с es=1. Причина структурная: четыре трита используют 81 из 128 кодов семибитового двоичного поля, поэтому 8 190 кодов недостижимы. Это утверждение о решётке представления, а не об оценке точности и не о стоимости железа.
Таблица может быть внутренне точной и всё равно задавать неправильный вопрос о ширине.
Исправленная таблица не устанавливает, что один формат предпочтительнее для какой-либо нагрузки. Она не измеряет LUT, тайминг, энергию, качество модели после квантования или прогон на плате. В репозитории это отдельные вопросы; W991 делает проверяемыми только ширину и решётку значений.
Практический урок небольшой и переносимый: перед сравнением числовых форматов вывести хранимую ширину из кодировки и заставить инструмент отвергать невозможные ширины. Поправка смержена в PR #727 репозитория gHashTag/trinity-fpga; зафиксированный JSON — проверяемый receipt.
Каждая цифра выше измерена, и рядом с ней названы её пределы.