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), 십진수 (Decimal), 유리수 (Rational), 로그 (Logarithmic), 구간 (Interval), 적응형 정밀도 (Adaptive‑precision) 등.
- 헤더 전용 – 외부 종속성이 없습니다.
include/폴더를 프로젝트에 넣기만 하면 됩니다. - C++20 – 최신 언어 기능을 사용하며 GCC, Clang, MSVC에서 작동합니다.
- 광범위한 테스트 제품군 – 정확도, 성능, 에너지 및 재현성에 대한 회귀 테스트.
- 도구 – 명령줄 유틸리티, Docker 이미지, VS Code 개발 컨테이너, 교육 및 벤치마킹을 위한 샘플 프로그램.
- 오픈 소스 – 허용적인 OSS 라이선스로 라이선스가 부여되며, CI 배지, 코드 커버리지 및 설계를 설명하는 JOSS 논문이 포함되어 있습니다.
일반적인 사용 사례
- 혼합 정밀도 딥러닝 커널 – 하드웨어 지원을 기다리지 않고 FP16/BF16/Posit 산술 프로토타이핑.
- 수치 연구 – 사용자 지정 숫자 시스템의 반올림 오류, 재현성 또는 에너지 효율성 연구.
- 임베디드 / 엣지 AI – 정수 하드웨어만 존재하는 마이크로컨트롤러에 저정밀도 산술 배포.
- 교육 – 다양한 숫자 형식이 어떻게 작동하는지 보여주는 대화형 데모 및 튜토리얼.
시작하기
- Docker 이미지 (
docker pull stillwater/universal)를 가져와서 간단한 C++ 예제를 실행하거나, - 저장소를 복제하고
cmake -DUNIVERSAL_BUILD_ALL=ON .. && make를 실행한 다음 필요한 헤더를 포함하세요.
커뮤니티 및 지원 – GitHub의 Issues, Google Group 포럼, 개발자 및 연구원을 위한 Slack 워크스페이스.
인용 – 출판물에서 이 라이브러리를 사용하는 경우 JOSS 논문(2023) 및 관련 arXiv 논문을 인용하세요.
위의 모든 정보는 저장소의 README에서 직접 가져온 것이며, 외부 가정은 추가되지 않았습니다.
관련
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트