A header-only C++ template library providing custom arithmetic plug-in types for mixed-precision algorithm development and optimization.
Universal is a header-only C++ template library that provides a large collection of custom arithmetic number systems as plug-in replacements for native types. It solves the problem of inefficient or inflexible numeric representations in performance-critical domains like AI, machine learning, and embedded systems by enabling mixed-precision algorithm development and optimization.
C++ developers and researchers working on numerical algorithms, high-performance computing, AI/ML model optimization, signal processing, and embedded systems where precision, performance, and energy efficiency are critical.
Developers choose Universal for its extensive, ready-to-use collection of number systems, its focus on reproducibility and energy efficiency, and its ability to experiment with alternative arithmetics before hardware commitment, all within a hassle-free, header-only library.
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.
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Provides a vast collection of ready-to-use formats like posits, bfloat16, and logarithmic types, enabling precise tailoring for AI, DSP, and embedded applications, as listed in the Key Features.
Pure template library with no external dependencies simplifies integration, demonstrated by the simple include pattern and Docker container for quick experimentation in the README.
Supports deferred rounding via super-accumulators (quire) to maintain associative and distributive laws, addressing irreproducibility in concurrent environments, a core philosophy highlighted in the Motivation section.
Offers fast software implementations of specialized formats like TensorFloat and quad precision that lack universal hardware support, filling vendor gaps for cross-platform development.
The CMake build system exposes dozens of fine-grained options (e.g., UNIVERSAL_BUILD_NUMBER_POSITS), making setup daunting and error-prone for newcomers, as seen in the lengthy build output example.
Documentation and examples lean towards research and theory, with practical API usage scattered across regression suites, requiring deep diving to apply in common scenarios.
Emulation of complex formats like posits incurs runtime overhead compared to hardware-native types, a trade-off acknowledged in the README for flexibility, which may limit real-time use cases.