Принят RFC: в core::num появится тип f16b для Brain Floating Point
05.10.2026Принят RFC 3983, добавляющий в стандартную библиотеку тип f16b для 16-битного формата Brain Floating Point (bfloat16): знак, 8 бит экспоненты и 7 бит мантиссы. Поначалу тип предназначен для хранения, SIMD и FFI — скалярная арифметика не входит в первую версию.
Что такое f16b
Bfloat16 сохраняет диапазон значений f32 (та же экспонента — 8 бит), но сокращает мантиссу до 7 бит. Это не формат IEEE-754: у него другое устройство значащих бит. Такая компоновка делает тип удобным для машинного обучения и численных задач, где диапазон важнее точности, а узкое место — память и пропускная способность.
Тип живёт в core::num::f16b и переэкспортируется из std::num. Размер — 2 байта, выравнивание — 2.
Как устроена первая версия
Экземпляр f16b можно создать только через f16b::from_bits и to_bits или через SIMD-интринсики. Скалярная арифметика, литеральный суффикс и обычные приведения as в RFC отложены как будущая возможность.
Из трейтов в первой версии: Default, Copy, Clone, Debug, PartialEq, PartialOrd, LowerExp, UpperExp и From<f16b> for f32 — расширение до f32 без потерь.
Зачем это нужно
Инструкции для работы с bfloat16 уже есть в аппаратуре: VADDBF16 в x86-64 (AVX512_BF16), BFCVT на AArch64, FCVT.BF16.S на RISC-V (Zfbfmin). Rust сегодня не может назвать такой тип напрямую: FFI-сигнатуры, элементы SIMD и кодогенерация обходят пробел обёртками над u16 — крейтом half или типом core::arch::x86::bf16 с особыми правилами понижения в LLVM.
Новый тип закрывает этот разрыв и совместим по ABI с std::bfloat16_t из C++23, расширением __bf16 в GCC и Clang и первичным типом bfloat в LLVM IR.
Почему f16b, а не bf16
Везде — в C++, SIMD-инструкциях и документации — формат называют bf16 или bfloat16. Авторы RFC выбрали имя f16b, следуя конвенции Rust о типах с плавающей точкой (префикс f), и это решение в финальном обсуждении вызвало споры: тип не обязан начинаться с f, поскольку не является форматом IEEE-754.
Оригинал
Add a f16b type to core::num for the 16-bit Brain Floating Point format. ... The primary role of the f16b is representing bfloat16 values in memory, in APIs, in FFI signatures where the target ABI supports bfloat16, and as an element type for SIMD and matrix operations. It is expected to be uncommon for a f16b to be used as a general-purpose arithmetic type in the same way as f32 or f64.
Упоминаний: 1 · Просмотров: 4