Что такое Половина Точности?

IEEE® 754 полуточности формат с плавающей точкой является 16-битным словом, разделенным на 1-битный индикатор s знака, 5-битный смещенный порядок e и 10-битный дробный f.

Schematic showing bit allocation for half-precision data type.

Поскольку количества типа half хранятся с помощью 16 битов, они требуют меньшей памяти, чем количества типа single, который использует 32 бита, или double, который использует 64 бита. Однако, потому что они хранятся с меньшим количеством битов, количеств типа half представлены меньшей точности, чем количества типа single или double.

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

Тип данных

Низкий предел

Высокий предел

Смещение экспоненты

Точность

Половина

2−14 ≈ 6.1·10−5

(2−2-10) ·215≈ 6.5·104

15

2−10 ≈ 10−3

Единственный

2−126 ≈ 10−38

2128 ≈ 3 · 1038

127

2−23 ≈ 10−7

'double'

2−1022 ≈ 2 · 10−308

21024 ≈ 2 · 10308

1023

2−52 ≈ 10−16

Для видео введения в тип данных полуточности смотрите то, Что Половина Точности? и Математика Полуточности в Моделировании и Генерации кода.

Половина приложений точности

Когда алгоритм содержит большие или неизвестные динамические диапазоны (например, интеграторы в обратной связи) или когда алгоритм использует операции, которые затрудняют, чтобы спроектировать в фиксированной точке (например, atan2), может быть выгодно использовать представления с плавающей точкой. Тип данных полуточности занимает только 16 битов памяти, но ее представление с плавающей точкой позволяет ему обработать более широкие динамические диапазоны, чем целое число или типы данных с фиксированной точкой, одного размера. Это делает половину точности особенно подходящей для некоторых приложений для обработки изображений и графических приложений. Когда полуточность используется с глубокими нейронными сетями, время, необходимое для обучения и вывода, может уменьшаться. При помощи половины точности как время устройства хранения данных для интерполяционных таблиц может уменьшаться объем потребляемой памяти интерполяционной таблицы.

MATLAB Examples

  • Вуалируйте Исправление (GPU Coder) — алгоритм обработки изображений исправления вуали использует свертку, преобразование пробела цвета изображения и основанный на гистограмме контраст, простирающийся, чтобы улучшить входное изображение. В этом примере показано, как сгенерировать и выполнить CUDA® MEX с типами данных полуточности для этих операций обработки изображений.

    Image of a road before and after applying fog rectification algorithm.

  • Обнаружение ребра с Методом Sobel в Полуточности (GPU Coder) — sobel алгоритм обнаружения ребра берет входное изображение и возвращает выходное изображение, которое подчеркивает высокие пространственные области частоты, которые соответствуют ребрам во входном изображении. В этом примере показано, как сгенерировать и выполнить MEX CUDA с типом данных полуточности, используемым для входного изображения и значений ядра оператора Sobel.

    Image of peppers before and after applying Sobel edge detection algorithm.

  • Сгенерируйте Код для Обнаружения Ребра Sobel, Которое Тип данных Полуточности Использования (MATLAB Coder) — В этом примере показано, как сгенерировать автономную библиотеку C++ из MATLAB® функция, которая выполняет обнаружение ребра Sobel изображений при помощи чисел с плавающей точкой полуточности.

Примеры Simulink

  • Полуточность, Ориентированная на поле на Алгоритм управления — Этот пример, реализует алгоритм Ориентированного на поле управления (FOC) с помощью и одинарной точности и половины точности.

  • Отобразите Квантование с Типами данных Полуточности — Этот пример показывает эффекты квантования на изображениях. В то время как тип данных с фиксированной точкой не всегда приводит к приемлемым результатам, тип данных полуточности, который использует то же количество битов как тип данных с фиксированной точкой, приводит к результату, сопоставимому с результатом с одинарной точностью.

    Quantization effect shown on an image of a chessboard for fixed-point, half-precision, and single-precision data types.

  • Классификация цифр с Типами данных Полуточности — Этот пример сравнивает результаты обученной модели классификации нейронных сетей в двойной точности и половине точности.

  • Преобразуйте Интерполяционную таблицу Одинарной точности в Половину Точности — Этот пример демонстрирует, как преобразовать интерполяционную таблицу с одинарной точностью, чтобы использовать половину точности. Половина точности является типом хранения; расчеты интерполяционной таблицы выполняются с помощью одинарной точности. После преобразования в половину точности емкость памяти блоков Lookup Table уменьшается наполовину при поддержании желаемой производительности системы.

Преимущества Использования половины точности во встраиваемых приложениях

Половина типа данных точности использует меньше памяти, чем другие типы с плавающей точкой как один и двойное. Хотя это занимает только 16 битов памяти, ее представления с плавающей точкой позволяет ему обработать более широкие динамические диапазоны, чем целое число или типы данных с фиксированной точкой, одного размера.

FPGA

Половина типа данных точности использует значительно меньше области и имеет низкую задержку по сравнению с типом данных одинарной точности, когда используется на оборудовании. Половина точности особенно выгодна для низких приложений динамического диапазона.

Следующий график показывает преимущество использования половины точности для реализации ориентированного на поле алгоритма управления в Xilinx® Virtex® 7 оборудования.

Comparison of Fmax, DSPs, LUTs, and Slices for single vs half precision.

Графический процессор

В графических процессорах, которые поддерживают тип данных полуточности, арифметические операции быстрее по сравнению с одинарной или двойной точностью.

В приложениях как глубокое обучение, которые требуют, большое количество расчетов, с помощью половины точности может обеспечить значительные выигрыши в производительности без значительной потери точности. С GPU Coder™ можно сгенерировать оптимизированный код для предсказания множества обученных нейронных сетей для глубокого обучения от Deep Learning Toolbox™. Можно сконфигурировать генератор кода, чтобы использовать в своих интересах NVIDIA® Высокая производительность TensorRT заключает библиотеку для NVIDIA графические процессоры. TensorRT обеспечивает улучшенную задержку, пропускную способность и КПД памяти путем объединения слоев сети и оптимизации выбора ядра. Можно также сконфигурировать генератор кода, чтобы воспользоваться преимуществом режимы точности TensorRT (FP32, FP16 или INT8), чтобы далее улучшать производительность и уменьшать требования к памяти.

Центральный процессор

В центральных процессорах, которые поддерживают тип данных полуточности, арифметические операции быстрее по сравнению с одинарной или двойной точностью. Для ARM® цели, которые исходно поддерживают типы данных полуточности, можно сгенерировать нативную половину кода С из MATLAB или Simulink®. Смотрите генерацию кода с половиной точности.

Половина точности в MATLAB

Много функций в MATLAB поддерживают тип данных полуточности. Для полного списка поддерживаемых функций смотрите half.

Половина точности в Simulink

Сигналы и блок выходные параметры в Simulink могут задать тип данных полуточности. Тип данных полуточности поддерживается для симуляции и генерации кода для параметров и подмножества блоков. Чтобы просмотреть блоки, которые поддерживают половину точности в командной строке, введите:

showblockdatatypetable

Блоки, которые поддерживают половину точности, отображают X в столбце пометил Half. Для получения дальнейшей информации приблизительно половина поддержки точности в Simulink, смотрите Тип данных Полуточности в Simulink.

Генерация кода с половиной точности

Половина типа данных точности поддерживается для генерации кода C/C++, генерации кода CUDA, использующей GPU Coder и генерацию HDL-кода с помощью HDL Coder™. Для целей графического процессора тип данных полуточности использует нативную половину типа данных, доступного в NVIDIA графический процессор для максимальной производительности.

Для подробной поддержки генерации кода половины точности в MATLAB и Simulink, смотрите Половину Поддержки Генерации кода Точности и Типа данных Полуточности в Simulink.

Для встроенных аппаратных целей, которые исходно поддерживают специальные типы для половины точности, такие как _Float16 и _fp16 типы данных для компиляторов ARM, можно сгенерировать нативную половину кода С точности с помощью Embedded Coder® или MATLAB Coder™. Для получения дополнительной информации смотрите, Генерируют Нативный код С Полуточности из Моделей Simulink и Генерируют Нативный код С Полуточности Используя MATLAB Coder.

Смотрите также

| | |

Похожие темы