미니플로트

컴퓨팅에서 **미니플로트**(minifloat)는 매우 적은 비트로 표현되는 부동소수점 값이다. 이렇게 정밀도가 줄어들면 범용 수치 계산에는 적합하지 않지만, 다음과 같은 특수 목적에 유용하다. * 색상 및 광량에 대한 인간의 인식 정밀도가 낮은 컴퓨터 그래픽.doi-access=free 16비트 반정밀도 형식은 매우 널리 사용된다. * 수치 정밀도에 비교적 둔감할 수 있는 기계 학습. 16비트, 8비트, 심지어 4비트 부동소수점도 점점 더 많이 사용된다.https://developer.nvidia.com/blog/nvidia-arm-and-intel-publish-fp8-specification-for-standardization-as-an-interchange-format-for-ai/ (공동 발표: 인텔, 엔비디아, 암); https://arxiv.org/abs/2209.05433 (위 3개 회사 연구원들이 공동 작성한 사전 논문) 또한, 부동소수점 및 IEEE 754 숫자의 속성과 구조를 시연하기 위해 컴퓨터 과학 과정에서 교육 도구로 자주 사용된다. 맥락에 따라 **미니플로트**는 32비트 미만, 16비트 이하 또는 16비트 미만의 모든 크기를 의미할 수 있다. **마이크로플로트**라는 용어는 8비트 이하의 모든 크기를 의미할 수 있다.https://www.mrob.com/pub/math/floatformats.html#microfloat 마이크로플로트
# 표기법
이 페이지는 미니플로트를 설명하기 위해 (S.E.M) 표기법을 사용한다. * S는 부호 필드의 길이 (0 또는 1)이다. * E는 지수 필드의 길이이다. * M은 가수 (유효 숫자) 필드의 길이이다. 미니플로트는 IEEE 754 표준의 원칙을 따라 설계할 수 있다. 거의 모든 미니플로트는 비정규수와 정규수에 가장 작은 지수를 사용한다. 많은 미니플로트는 무한과 NaN에 가장 큰 지수를 사용하며, 이는 (특수 지수) 1=SE = 1로 표시된다. 일부 미니플로트는 이 지수 값을 정상적으로 사용하며, 이 경우 1=SE = 0이다. 지수 편향 1=B = 2E − 1 − SE이다. 이 값은 모든 표현 가능한 숫자가 표현 가능한 역수를 갖도록 보장한다. 이 표기법은 B,P,L,U) 형식으로 (2, M + 1, SE − 2E − 1 \+ 1, 2E − 1 − 1)와 같이 변환할 수 있다.
# 사용법
라데온 R300 및 R420 GPU는 "fp24" 부동소수점 형식 (1.7.16)을 사용했다.. Direct3D 9.0의 "전체 정밀도"는 독점적인 24비트 부동소수점 형식이다. 마이크로소프트의 D3D9(셰이더 모델 2.0) 그래픽 API는 초기에 FP24(ATI의 R300 칩과 유사)와 FP32(엔비디아의 NV30 칩과 유사)를 "전체 정밀도"로 지원했으며, FP16은 그래픽 하드웨어에서 수행되는 정점 및 픽셀 셰이더 계산을 위한 "부분 정밀도"로 지원했다. 미니플로트는 또한 부동소수점을 소프트웨어에서 에뮬레이션해야 하는 마이크로컨트롤러와 같은 임베디드 장치에서도 일반적으로 사용된다. 계산 속도를 높이기 위해 가수는 일반적으로 비트의 정확히 절반을 차지하므로 레지스터 경계가 시프트 없이 부분을 자동으로 주소 지정한다(예: 4비트 장치에서 (1.3.4)). bfloat16 (1.8.7) 형식은 단정밀도 숫자의 처음 16비트이며, 다른 형식에 대한 하드웨어 지원이 추가되기 전에 이미지 처리 및 기계 학습에서 자주 사용되었다. IEEE 754-2008 개정판에는 "반정밀도"라고 불리는 16비트 (1.5.10) 부동소수점(32비트 단정밀도 및 64비트 배정밀도와 반대)이 포함되어 있다. 2016년에 크로노스는 불칸에서 사용할 10비트 (0.5.5) 및 11비트 (0.5.6) 부호 없는 형식을 정의했다.access-date=2023-08-10access-date=2023-08-10 이 형식은 부호 및 후미 숫자를 잘라내어 양수 반정밀도에서 변환할 수 있다. 2022년에 엔비디아와 다른 회사들은 "fp8" 형식 (1.5.2)에 대한 지원을 발표했다. 이 형식은 후미 숫자를 잘라내어 반정밀도에서 변환할 수 있다. 2023년부터 IEEE SA 워킹 그룹 P3109는 기계 학습에 최적화된 8비트 미니플로트 표준을 작업하고 있다. 현재 초안은 단일 형식이 아닌 "binary8pP"라는 7가지 다른 형식의 패밀리를 정의하며, 여기서 "P"는 1부터 7까지의 숫자이고 비트 패턴은 (1.8-P.P-1)이다. 이 형식은 또한 1=SE=0을 가지며 가장 큰 값을 무한대로 사용하고 음수 0의 패턴을 NaN으로 사용한다.access-date=2024-05-07 또한 2023년부터 4비트 (1.2.1) 부동소수점 숫자(네 가지 특수 IEEE 값 없음)는 대형 언어 모델의 가속화에 사용되기 시작했다.title=로컬 PC에서 LLM 추론 가속화website=Open Compute Project {| class="wikitable" || .000 || .001 || .010 || .011 || .100 || .101 || .110 || .111 |- ! 0... | 0 || 0.5 || 1 || 1.5 || 2 || 3 || 4 || 6 |- ! 1... | −0 || −0.5 || −1 || −1.5 || −2 || −3 || −4 || −6 |}
# 예시

## 8비트 (1.4.3)
여기서는 1비트 부호, 4비트 지수, 3비트 가수 (1.4.3)를 가진 1바이트(8비트) 미니플로트를 시연한다. 지수 편향은 다른 IEEE 754 부동소수점과 일치하도록 값을 1 중심으로 설정하기 위해 7로 정의된다.IEEE 반정밀도는 편향이 15 (2^{5 - 1} - 1 = 15)인 5비트 지수를 가지며, IEEE 단정밀도는 편향이 127 (2^{8 - 1} - 1 = 127)인 8비트 지수를 가지며, IEEE 배정밀도는 편향이 1023 (2^{11 - 1} - 1 = 1023)인 11비트 지수를 가지며, IEEE 4배정밀도는 편향이 16383 (2^{15 - 1} - 1 = 16383)인 15비트 지수를 가진다. 자세한 내용은 지수 편향 문서를 참조.edition=2 따라서 (대부분의 값에 대해) 지수 x의 실제 승수는 x−7이다. 모든 IEEE 754 원칙이 유효해야 한다.access-date=2023-08-29 이 형식은 명령어에 매우 흔하게 사용된다. {| class="wikitable" | 부호 ! width=50% colspan="4" | 지수 ! width=37.5% colspan="3" | 가수 |- | | 0 | | 0 | | 0 | | 0 | | 0 | | 0 | | 0 | | 0 |} 0은 지수가 0이고 가수가 0인 것으로 표현된다. 지수가 0이라는 것은 0이 선행 "0." 접두사를 가진 비정규수이며, 가수가 0이면 소수점 이하의 모든 비트가 0이므로 이 값은 0.000_2 \times 2^{-6} = 0으로 해석된다. 부동소수점 숫자는 부호 있는 0을 사용하므로 -0도 사용할 수 있으며 양수 0과 같다. 0 0000 000 = 0 1 0000 000 = −0 가장 낮은 지수의 경우 가수는 "0."으로 확장되고 지수 값은 가장 작은 정규화된 숫자처럼 1 더 높은 것으로 처리된다. 0 0000 001 = 0.0012 × 21 - 7 = 0.125 × 2−6 = 0.001953125 (가장 작은 비정규수) ... 0 0000 111 = 0.1112 × 21 - 7 = 0.875 × 2−6 = 0.013671875 (가장 큰 비정규수) 다른 모든 지수의 경우 가수는 "1."로 확장된다. 0 0001 000 = 1.0002 × 21 - 7 = 1 × 2−6 = 0.015625 (가장 작은 정규화된 숫자) 0 0001 001 = 1.0012 × 21 - 7 = 1.125 × 2−6 = 0.017578125 ... 0 0111 000 = 1.0002 × 27 - 7 = 1 × 20 = 1 0 0111 001 = 1.0012 × 27 - 7 = 1.125 × 20 = 1.125 (1보다 큰 가장 작은 값) ... 0 1110 000 = 1.0002 × 214 - 7 = 1.000 × 27 = 128 0 1110 001 = 1.0012 × 214 - 7 = 1.125 × 27 = 144 ... 0 1110 110 = 1.1102 × 214 - 7 = 1.750 × 27 = 224 0 1110 111 = 1.1112 × 214 - 7 = 1.875 × 27 = 240 (가장 큰 정규화된 숫자) 무한 값은 가수가 0으로 설정된 가장 높은 지수를 갖는다. 부호 비트는 양수 또는 음수가 될 수 있다. 0 1111 000 = +무한 1 1111 000 = −무한 NaN 값은 가장 높은 지수를 가지며, 가수는 0이 아니다. s 1111 mmm = NaN (mmm ≠ 000인 경우) 이것은 이 예시 8비트 부동소수점의 가능한 모든 값에 대한 차트이다. {| class="wikitable" || … 001 || … 010 || … 011 || … 100 || … 101 || … 110 || … 111 |- ! 0 0000 … | 0 || 0.001953125 || 0.00390625 || 0.005859375 || 0.0078125 || 0.009765625 || 0.01171875 || 0.013671875 |- ! 0 0001 … | 0.015625 || 0.017578125 || 0.01953125 || 0.021484375 || 0.0234375 || 0.025390625 || 0.02734375 || 0.029296875 |- ! 0 0010 … | 0.03125 || 0.03515625 || 0.0390625 || 0.04296875 || 0.046875 || 0.05078125 || 0.0546875 || 0.05859375 |- ! 0 0011 … | 0.0625 || 0.0703125 || 0.078125 || 0.0859375 || 0.09375 || 0.1015625 || 0.109375 || 0.1171875 |- ! 0 0100 … | 0.125 || 0.140625 || 0.15625 || 0.171875 || 0.1875 || 0.203125 || 0.21875 || 0.234375 |- ! 0 0101 … | 0.25 || 0.28125 || 0.3125 || 0.34375 || 0.375 || 0.40625 || 0.4375 || 0.46875 |- ! 0 0110 … | 0.5 || 0.5625 || 0.625 || 0.6875 || 0.75 || 0.8125 || 0.875 || 0.9375 |- ! 0 0111 … | 1 || 1.125 || 1.25 || 1.375 || 1.5 || 1.625 || 1.75 || 1.875 |- ! 0 1000 … | 2 || 2.25 || 2.5 || 2.75 || 3 || 3.25 || 3.5 || 3.75 |- ! 0 1001 … | 4 || 4.5 || 5 || 5.5 || 6 || 6.5 || 7 || 7.5 |- ! 0 1010 … | 8 || 9 || 10 || 11 || 12 || 13 || 14 || 15 |- ! 0 1011 … | 16 || 18 || 20 || 22 || 24 || 26 || 28 || 30 |- ! 0 1100 … | 32 || 36 || 40 || 44 || 48 || 52 || 56 || 60 |- ! 0 1101 … | 64 || 72 || 80 || 88 || 96 || 104 || 112 || 120 |- ! 0 1110 … | 128 || 144 || 160 || 176 || 192 || 208 || 224 || 240 |- ! 0 1111 … | Inf || NaN || NaN || NaN || NaN || NaN || NaN || NaN |- ! 1 0000 … | −0 || −0.001953125 || −0.00390625 || −0.005859375 || −0.0078125 || −0.009765625 || −0.01171875 || −0.013671875 |- ! 1 0001 … | −0.015625 || −0.017578125 || −0.01953125 || −0.021484375 || −0.0234375 || −0.025390625 || −0.02734375 || −0.029296875 |- ! 1 0010 … | −0.03125 || −0.03515625 || −0.0390625 || −0.04296875 || −0.046875 || −0.05078125 || −0.0546875 || −0.05859375 |- ! 1 0011 … | −0.0625 || −0.0703125 || −0.078125 || −0.0859375 || −0.09375 || −0.1015625 || −0.109375 || −0.1171875 |- ! 1 0100 … | −0.125 || −0.140625 || −0.15625 || −0.171875 || −0.1875 || −0.203125 || −0.21875 || −0.234375 |- ! 1 0101 … | −0.25 || −0.28125 || −0.3125 || −0.34375 || −0.375 || −0.40625 || −0.4375 || −0.46875 |- ! 1 0110 … | −0.5 || −0.5625 || −0.625 || −0.6875 || −0.75 || −0.8125 || −0.875 || −0.9375 |- ! 1 0111 … | −1 || −1.125 || −1.25 || −1.375 || −1.5 || −1.625 || −1.75 || −1.875 |- ! 1 1000 … | −2 || −2.25 || −2.5 || −2.75 || −3 || −3.25 || −3.5 || −3.75 |- ! 1 1001 … | −4 || −4.5 || −5 || −5.5 || −6 || −6.5 || −7 || −7.5 |- ! 1 1010 … | −8 || −9 || −10 || −11 || −12 || −13 || −14 || −15 |- ! 1 1011 … | −16 || −18 || −20 || −22 || −24 || −26 || −28 || −30 |- ! 1 1100 … | −32 || −36 || −40 || −44 || −48 || −52 || −56 || −60 |- ! 1 1101 … | −64 || −72 || −80 || −88 || −96 || −104 || −112 || −120 |- ! 1 1110 … | −128 || −144 || −160 || −176 || −192 || −208 || −224 || −240 |- ! 1 1111 … | −Inf || NaN || NaN || NaN || NaN || NaN || NaN || NaN |} NaN이 아닌 값은 242개밖에 없다( +0과 −0을 다른 것으로 간주할 경우). 14개의 비트 패턴이 NaN을 나타내기 때문이다. === 8비트 (1.4.3) (B = −2) === 이러한 작은 크기에서는 다른 편향 값이 흥미로울 수 있다. 예를 들어, 편향이 −2이면 숫자 0-16이 정수 0-16과 동일한 비트 표현을 갖게 되지만, 정수가 아닌 값은 표현할 수 없다는 손실이 발생한다. 0 0000 000 = 0.0002 × 21 - (-2) = 0.0 × 23 = 0 (비정규수) 0 0000 001 = 0.0012 × 21 - (-2) = 0.125 × 23 = 1 (비정규수) 0 0000 111 = 0.1112 × 21 - (-2) = 0.875 × 23 = 7 (비정규수) 0 0001 000 = 1.0002 × 21 - (-2) = 1.000 × 23 = 8 (정규수) 0 0001 111 = 1.1112 × 21 - (-2) = 1.875 × 23 = 15 (정규수) 0 0010 000 = 1.0002 × 22 - (-2) = 1.000 × 24 = 16 (정규수)
## 8비트 (1.3.4)
모든 비트 할당이 가능하다. 더 적은 정밀도로 더 많은 동적 범위를 필요로 하는 경우 지수에 더 많은 비트를 할당하거나, 더 적은 동적 범위로 더 많은 정밀도를 필요로 하는 경우 가수에 더 많은 비트를 할당할 수 있다. 극단적으로는 모든 비트를 지수에 할당하거나(1.7.0), 한 비트를 제외한 모든 비트를 가수에 할당하여(1.1.6) 지수에 한 비트만 남길 수 있다. 지수에는 최소한 한 비트가 주어져야 한다. 그렇지 않으면 더 이상 부동소수점으로 의미가 없으며, 단지 부호 있는 숫자가 된다. 다음은 (1.3.4)에 대한 모든 가능한 값의 차트이다. 1=M ≥ 2E − 1는 전체 범위에 걸쳐 정밀도가 최소한 0.5를 유지하도록 보장한다.archive-date=2024-07-08 {| class="wikitable" || … 0001 || … 0010 || … 0011 || … 0100 || … 0101 || … 0110 || … 0111 || … 1000 || … 1001 || … 1010 || … 1011 || … 1100 || … 1101 || … 1110 || … 1111 |- ! 0 000 … | 0 || 0.015625 || 0.03125 || 0.046875 || 0.0625 || 0.078125 || 0.09375 || 0.109375 || 0.125 || 0.140625 || 0.15625 || 0.171875 || 0.1875 || 0.203125 || 0.21875 || 0.234375 |- ! 0 001 … | 0.25 || 0.265625 || 0.28125 || 0.296875 || 0.3125 || 0.328125 || 0.34375 || 0.359375 || 0.375 || 0.390625 || 0.40625 || 0.421875 || 0.4375 || 0.453125 || 0.46875 || 0.484375 |- ! 0 010 … | 0.5 || 0.53125 || 0.5625 || 0.59375 || 0.625 || 0.65625 || 0.6875 || 0.71875 || 0.75 || 0.78125 || 0.8125 || 0.84375 || 0.875 || 0.90625 || 0.9375 || 0.96875 |- ! 0 011 … | 1 || 1.0625 || 1.125 || 1.1875 || 1.25 || 1.3125 || 1.375 || 1.4375 || 1.5 || 1.5625 || 1.625 || 1.6875 || 1.75 || 1.8125 || 1.875 || 1.9375 |- ! 0 100 … | 2 || 2.125 || 2.25 || 2.375 || 2.5 || 2.625 || 2.75 || 2.875 || 3 || 3.125 || 3.25 || 3.375 || 3.5 || 3.625 || 3.75 || 3.875 |- ! 0 101 … | 4 || 4.25 || 4.5 || 4.75 || 5 || 5.25 || 5.5 || 5.75 || 6 || 6.25 || 6.5 || 6.75 || 7 || 7.25 || 7.5 || 7.75 |- ! 0 110 … | 8 || 8.5 || 9 || 9.5 || 10 || 10.5 || 11 || 11.5 || 12 || 12.5 || 13 || 13.5 || 14 || 14.5 || 15 || 15.5 |- ! 0 111 … | Inf || NaN || NaN || NaN || NaN || NaN || NaN || NaN || NaN || NaN || NaN || NaN || NaN || NaN || NaN || NaN |- ! 1 000 … | −0 || −0.015625 || −0.03125 || −0.046875 || −0.0625 || −0.078125 || −0.09375 || −0.109375 || −0.125 || −0.140625 || −0.15625 || −0.171875 || −0.1875 || −0.203125 || −0.21875 || −0.234375 |- ! 1 001 … | −0.25 || −0.265625 || −0.28125 || −0.296875 || −0.3125 || −0.328125 || −0.34375 || −0.359375 || −0.375 || −0.390625 || −0.40625 || −0.421875 || −0.4375 || −0.453125 || −0.46875 || −0.484375 |- ! 1 010 … | −0.5 || −0.53125 || −0.5625 || −0.59375 || −0.625 || −0.65625 || −0.6875 || −0.71875 || −0.75 || −0.78125 || −0.8125 || −0.84375 || −0.875 || −0.90625 || −0.9375 || −0.96875 |- ! 1 011 … | −1 || −1.0625 || −1.125 || −1.1875 || −1.25 || −1.3125 || −1.375 || −1.4375 || −1.5 || −1.5625 || −1.625 || −1.6875 || −1.75 || −1.8125 || −1.875 || −1.9375 |- ! 1 100 … | −2 || −2.125 || −2.25 || −2.375 || −2.5 || −2.625 || −2.75 || −2.875 || −3 || −3.125 || −3.25 || −3.375 || −3.5 || −3.625 || −3.75 || −3.875 |- ! 1 101 … | −4 || −4.25 || −4.5 || −4.75 || −5 || −5.25 || −5.5 || −5.75 || −6 || −6.25 || −6.5 || −6.75 || −7 || −7.25 || −7.5 || −7.75 |- ! 1 110 … | −8 || −8.5 || −9 || −9.5 || −10 || −10.5 || −11 || −11.5 || −12 || −12.5 || −13 || −13.5 || −14 || −14.5 || −15 || −15.5 |- ! 1 111 … | −Inf || NaN || NaN || NaN || NaN || NaN || NaN || NaN || NaN || NaN || NaN || NaN || NaN || NaN || NaN || NaN |} 위와 같은 표는 스크립트를 사용하여 모든 SEMB(부호, 지수, 가수/유효 숫자, 편향) 값 조합에 대해 생성할 수 있다. [//gist.github.com/aaronfranke/0d1217e521c4ec784d39e92b5f039115 파이썬] 또는 [//gist.github.com/aaronfranke/8b2c39bfbe48068c574e4daf2710c875 GDScript].
## 6비트 (1.3.2)
64개의 값만으로는 모든 값을 다이어그램으로 나타낼 수 있어 유용하다. 이 그래픽은 IEEE 754의 규칙을 정확히 따르는 두 개의 6비트 (1.3.2) 미니플로트의 수학을 보여준다. 녹색 X는 NaN 결과, 청록색 X는 +무한 결과, 자홍색 X는 −무한 결과이다. 유한 결과의 범위는 같은 값을 연결하는 곡선으로 채워져 있으며, 양수는 파란색, 음수는 빨간색이다. 파일:MinifloatAddition 1 3 2 3
## 4비트 (1.2.1)
정규화된 숫자, 비정규수, 부호 있는 0, 부호 있는 무한대, 여러 NaN 값을 포함하여 모든 IEEE 원칙을 따르는 가장 작은 부동소수점 크기는 1비트 부호, 2비트 지수, 1비트 가수를 가진 4비트 부동소수점이다.access-date=2023-08-29 {| class="wikitable" || .000 || .001 || .010 || .011 || .100 || .101 || .110 || .111 |- ! 0... | 0 || 0.5 || 1 || 1.5 || 2 || 3 || Inf || NaN |- ! 1... | −0 || −0.5 || −1 || −1.5 || −2 || −3 || −Inf || NaN |}
## 3비트 (1.1.1)
정규화된 숫자가 필요하지 않은 경우, 지수를 1로 줄여 크기를 3비트로 줄일 수 있다. {| class="wikitable" || .00 || .01 || .10 || .11 |- ! 0... | 0 || 1 || Inf || NaN |- ! 1... | −0 || −1 || −Inf || NaN |}
## 2비트 (0.2.1) 및 (0.1.1)
부호 비트를 제외할 수 있는 상황에서는 위 예시 각각을 1비트 더 줄여 위 표의 첫 번째 행만 유지할 수 있다. 1비트 지수와 1비트 가수를 가진 2비트 부동소수점은 0, 1, Inf, NaN 값만 가질 것이다.
## 1비트 (0.1.0)
가수를 제거하면 0과 Inf 두 가지 값만 허용된다. 지수를 제거하는 것은 작동하지 않는다. 위 공식은 0과 sqrt(2)/2를 생성한다. 지수는 최소 1비트여야 한다. 그렇지 않으면 더 이상 부동소수점으로 의미가 없어진다(단지 부호 있는 숫자가 될 뿐).