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 – クイック概要

概要 – 組み込みの int、float、double の代わりに使えるプラグイン式の数値型を提供する、ヘッダーオンリーのC++テンプレートライブラリです。多くの非標準フォーマット(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)、10進数 (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から直接引用したものであり、外部からの仮定は追加されていません。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト