stillwater-sc/universal

Large collection of number systems providing custom arithmetic for mixed-precision algorithm development and optimization for AI, Machine Learning, Computer Vision, Signal Processing, CAE, EDA, control, optimization, estimation, and approximation.

Universal Numbers Library – 快速概览

它是什么 – 一个仅头文件的 C++ 模板库,提供可直接替换内置 int、float 或 double 的插件式数值类型。它实现了许多非标准格式(half、bfloat16、posit、fixed-point 等),并让您能编写适用于任何这些类型的通用代码。

为何对 AI / ML 重要 – 现代深度学习模型通常以降低精度的格式(例如 FP16、BF16、posits)运行,以提升速度并降低能耗。Universal 让开发者能在任何硬件上实验这些格式,即使 CPU/GPU 原生不支持它们。这使得原型设计混合精度核心、测试数值准确度以及探索能提升推理或训练效率的自定义格式变得更加容易。

如何使用 – 包含您所需类型的头文件,然后将您的算法编写为 Real 类型的模板:

#include <universal/number/cfloat/cfloat.hpp>

template<class Real>
Real MyKernel(const Real& a, const Real& b) { return a * b; }

using Real = sw::universal::half;   // pick half‑precision IEEE‑754
Real a = sqrt(2);
Real b = 3.14159;
std::cout << MyKernel(a,b) << '\n';

只需更改别名,同一个核心即可使用 float、posit<16,2>、bfloat16 等进行编译。

主要功能

  • 广泛的格式支持 – IEEE‑754 变体(quarter、half、quad)、NVIDIA TensorFloat、Google bfloat16、Posits、定点数 (Fixed‑point)、十进制 (Decimal)、有理数 (Rational)、对数 (Logarithmic)、区间 (Interval)、自适应精度 (Adaptive‑precision) 等。
  • 仅头文件 – 无外部依赖;只需将 include/ 文件夹放入您的项目中即可。
  • C++20 – 使用现代语言特性,并支持 GCC、Clang、MSVC。
  • 广泛的测试套件 – 针对准确度、性能、能耗和可重现性的回归测试。
  • 工具 – 命令行工具、Docker 镜像、VS Code 开发容器,以及用于教育和基准测试的示例程序。
  • 开源 – 采用宽松的 OSS 授权,包含 CI 徽章、代码覆盖率,以及描述设计的 JOSS 论文。

典型使用案例

  1. 混合精度深度学习核心 – 在无需等待硬件支持的情况下,原型设计 FP16/BF16/Posit 算术。
  2. 数值研究 – 研究自定义数字系统的舍入误差、可重现性或能源效率。
  3. 嵌入式 / 边缘 AI – 在仅有整数硬件的微控制器上部署低精度算术。
  4. 教育 – 展示不同数值格式行为的交互式演示与教程。

入门指南

  • 拉取 Docker 镜像 (docker pull stillwater/universal) 并运行一个快速的 C++ 示例,或者
  • 克隆仓库,运行 cmake -DUNIVERSAL_BUILD_ALL=ON .. && make,然后包含您需要的头文件。

社区与支持 – GitHub 上的 Issues、Google Group 论坛,以及供开发者与研究人员使用的 Slack 工作区。

引用 – 如果您在出版物中使用此库,请引用 JOSS 文章 (2023) 及相关的 arXiv 论文。


以上所有信息均直接取自仓库的 README;未添加任何外部假设。

相关

  • 项目
  • 项目
  • 项目
  • 项目
  • 项目