fp16

Библиотека для работы с числами половинной точности (half-precision floating-point) в формате IEEE 754-2008. Она предоставляет эффективные функции для конвертации между форматами float16 и float32/float64, а также оптимизированные математические операции для ускоренных вычислений на CPU и GPU. Библиотека особенно полезна в областях машинного обучения, компьютерной графики и высокопроизводительных вычислений, где важна экономия памяти и пропускной способности.

Особенности

  • эффективная конвертация между float16 и float32/float64 с поддержкой аппаратного ускорения;
  • оптимизированные математические операции для чисел половинной точности;
  • поддержка векторных инструкций (SIMD) для повышения производительности;
  • кроссплатформенность (x86, ARM, GPU архитектуры);
  • простая интеграция в существующие проекты на C/C++;
  • поддержка как программной, так и аппаратной реализации FP16.

Основные компоненты

Библиотека FP16 предоставляет набор функций для работы с числами половинной точности, включая конвертацию, базовые арифметические операции и специализированные функции для различных вычислительных платформ (подробнее с документацией можно ознакомиться здесь).

Конвертация чисел с плавающей точкой

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

Основные функции конвертации:

  • fp16_ieee_to_fp32_value() — преобразование IEEE half-precision в single-precision float;
  • fp16_ieee_from_fp32_value() — преобразование single-precision float в IEEE half-precision;
  • fp16_alt_to_fp32_value() и fp16_alt_from_fp32_value() — работа с альтернативными форматами half-precision;
  • fp16_to_fp64() и fp64_to_fp16() — конвертация между half-precision и double-precision.

Пакетная конвертация данных

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

Функции пакетной конвертации:

  • fp16_ieee_to_fp32_buffer() — преобразование массива half-precision чисел в single-precision;
  • fp16_ieee_from_fp32_buffer() — преобразование массива single-precision чисел в half-precision;
  • fp16_alt_to_fp32_buffer() и fp16_alt_from_fp32_buffer() — для альтернативных форматов;
  • fp16_to_fp32_strided() и fp32_to_fp16_strided() — конвертация с заданным шагом.

Арифметические операции

Хотя основное назначение библиотеки — конвертация, она также предоставляет оптимизированные арифметические операции для чисел половинной точности, которые могут быть выполнены без полной конвертации в float32.

Базовые арифметические функции:

  • fp16_add() — сложение двух чисел half-precision;
  • fp16_sub() — вычитание чисел half-precision;
  • fp16_mul() — умножение двух чисел half-precision;
  • fp16_div() — деление двух чисел half-precision;
  • fp16_neg() — смена знака числа;
  • fp16_abs() — абсолютное значение.

Сравнение и специальные значения

Библиотека предоставляет функции для сравнения чисел половинной точности и работы со специальными значениями, такими как бесконечности и NaN.

Функции сравнения и проверок:

  • fp16_eq() — проверка на равенство;
  • fp16_lt() и fp16_le() — сравнение "меньше" и "меньше или равно";
  • fp16_gt() и fp16_ge() — сравнение "больше" и "больше или равно";
  • fp16_is_nan() — проверка на NaN;
  • fp16_is_inf() — проверка на бесконечность;
  • fp16_is_normal() — проверка на нормализованное число.

Оптимизации для различных архитектур

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

Поддерживаемые оптимизации:

  • SIMD инструкции: SSE, AVX, AVX-512 для x86; NEON для ARM;
  • Аппаратная поддержка FP16: использование встроенных инструкций процессора, когда они доступны;
  • GPU-ускорение: интеграция с CUDA и OpenCL для вычислений на графических процессорах;
  • Многопоточность: поддержка параллельной обработки данных.

Инструменты разработки и утилиты

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

Полезные утилиты:

  • fp16_print() — форматированный вывод чисел half-precision;
  • fp16_benchmark — тесты производительности конвертации и операций;
  • fp16_validate — проверка корректности преобразований;
  • Генераторы случайных чисел half-precision.

Использование в проекте

Документация по использованию Conan-пакетов для разработки приложений для ОС Аврора.

На сервере Conan библиотеки заранее собраны и размещены под различные версии ОС Аврора 4 и ОC Аврора 5. Для данных версий представлены архитектуры armv7hl, aarch64 и x84_64.

Библиотеку можно использовать в проекте с помощью данного conanfile.py

from conan import ConanFile

class Application(ConanFile):
    settings = "os", "compiler", "arch", "build_type"
    generators = "PkgConfigDeps"

    requires = (
        "fp16/cci.20210320@aurora",
    )    

Процесс локальной сборки описан в документации.

fp16

Conversion to/from half-precision floating point formats.
Лицензия
MIT
Версия
Домашняя страница
Скачать
package
6.03 Kb
MD5: ee74cd2e89c24191cdcdb57f9a0581ac
Updated: 03.09.2025, 21:43:20
Использование в проекте

Мы используем cookies для персонализации сайта и его более удобного использования. Вы можете запретить cookies в настройках браузера.

Пожалуйста ознакомьтесь с политикой использования cookies.