8-bitiste ujukomatehete prototüüpimine
8-bitiste ujukomatehete prototüüpimine
Realiseerimisele tuleb 8-bitine ujukoma-formaad FP8_E3M4 üks tehetest, abistavad lisa-funktsioond on allpool. Tehteks on omal valikul kas liitmine, lahutamine või korrutamine (soovitav on tehted jagada omavahel). Realiseerimine toimub kolmes etapis - (1) prototüüp tööjaamal ja (2) realisatsioon Basys MX3-l (mikrokontroller). Tööks vajalikud failid leiab M-kettalt (katalog /M/Peeter.Ellervee/IAS0150/fp8_e3m4/ või veebist https://www.tud.ttu.ee/im/Peeter.Ellervee/IAS0150/fp8_e3m4/).
-------------------------------------------------------------------------------------------------
Esitus: s.eee.mmmm (bias 3), väärtus: (-1)^s*(1+mmmm/16)*2^(eee-3)
Erijuhud:
eee==000 - normaliseerimata mantiss, väärtus: (-1)^s*(0+mmmm/16)*2^(-2)
0.000.0000 == 0
s.111.0000 == +/- lõpmatus
x.111.1xxx == nan (not a number)
Väärtuste vahemikud:
0.000.0001 väikseim normaliseerimata (0+1/16)*2^(1-3) == 0,015625 [1/16/4]
0.000.1111 suurim normaliseerimata (0+15/16)*2^(1-3) == 0,234375 [15/16/4]
0.001.0000 väikseim normaliseeritud (1+0/16)*2^(1-3) == 0,25 [16/16/4]
0.110.1111 suurim normaliseeritud (1+15/16)*2^(6-3) == 15,5 [31/16*8]
Kõikvõimalikud väärtused leiab siit.
-------------------------------------------------------------------------------------------------
1. Prototüüp tööjaamal
Ülesandeks on lisada oma tehte kood faili fp8_e3m4_ops.c (alamkataloogis prototype). Samas failis on näitena realiseeritud jagamistehe. Kõikvõimalike teisenduste näidetana on soovitav vaadata koode ka teistes failides:
- fp8_e3m4.h - päisefail, kus on defineeritud vajalikud andmetüübid ja funktsioonide prototüübid;
- fp8_e3m4.c - teisendus-funktsioonid 8- ja 32-bitiste formaatide vahel;
- main.c - põhiprogramm andmete sisestamiseks ja kuvamuiseks.
Tehte realiseerimisel tuleb arvestada mantissi ja eksponendi muutmise vajadust enne tehet (liitmine ja lahutamine). Tehtejärgne normaliseerimise teeb ära funktsioon fp8_e3m4_pack, (mis siiski ei teosta ümardamist, mis pole ka kohustuslik). Boonusena võite siiski ümardamise lisamist proovida.
Fail proov on kompileeritud programm, mida saab võrdlemisel kasutada - kõik tehted on realiseeritud.
Kompileerimiseks sobib käsk "gcc -std=c99 -Wall -Wpedantic -lm -o proov main.c fp8_e3m4_ops.c fp8_e3m4.c", silumiseks saab lisad võtme "-DDEBUGGING".
-------------------------------------------------------------------------------------------------
2. Realisatsioon mikrokontrolleril
Arendusplaadiks Basys MX3, vajalikud failid paiknevad alamkataloogis basys_mx3. Sealjuures on muudetud ainult main.c, sest sisend-väljund toimub teisiti. Lisaks on failid config.h ja config.c.
MPLAB X IDE kasutamise juhend
(Juhendis viidatud failid pole mõeldud antud ülesande jaoks)
Õiged failid projekti loomiseks leiab siit.
Oluline - Failide jagunemine MPLAB X IDEs:
*.c -> Source files
*.h -> Header Files
Lühike video näidisarvutamisest
-------------------------------------------------------------------------------------------------
3. Realisatsioon FPGA-l
Selle asemel tuleb kodutöö #2 reliseerimine...
-------------------------------------------------------------------------------------------------
Praktikumi arvestamine
Praktikumi arvestamiseks on vaja esitada lisatud kood ja seda selgitada ning demonstreerida lahenduste tööd. TI/AI kasutamisel tuleb lahendust selgitada ja põhejndada.
Hindamisel arvestatakse lahenduse efektiivsust ja korrektsust - 7+3 punkti. 16. nädala FPGA realisatsioon annab 5 punkti.
-------------------------------------------------------------------------------------------------
Lisainfot leiab järgnevatelt veebilehtedelt:
- https://en.wikipedia.org/wiki/Minifloat
- https://asawicki.info/articles/fp8_tables.php
- https://medium.com/@StackGpu/fp8-bf16-and-int8-how-low-precision-formats-are-revolutionizing-deep-learning-throughput-e6c1f3adabc2
- https://docs.nvidia.com/deeplearning/transformer-engine/user-guide/examples/fp8_primer.html