Já pořád nechápu jak můžete považovat podporu jiných instrukcí, DP s poloviční propustností v 32bit registrech a podobně považovat za jednoduché změny.
Hlavně pokud si uvědomíte, že řešení, které dneska AMD i NVIDIA používá, tedy místo změny ALU prostě do CU přihodí několik samostatných jednotek pro DP výpočty. Proč by neudělali to samé pro HP (FP16)?
DOC_ZENITH: Ilustrace toho jak počítat FP16 v FP32 jednotkách: (1:1 je utopie, 1:64 je určeno pro nápis na krabici)
Konverze menšího FP typu na vetší není zadarmo. A obráceně je to horší.
FP je v paměti vždycky uloženy jako 0.xxx * (2 ^ (e - Z))
U FP32 to bude v paměti: [znamenko(1bit),e(exponent 8bit),xxxx(mantisa 23bit)]
U FP16 to je [znaménko(1bit),e(exponent 5bit),xxxx(mantisa 10bit)]
Kde Z je polovina rozsahu. (první doplněk se tomu tuším říká). Z pro FP32 je 127, pro FP16 je 15.
Takže konverze z FP16 na FP32 bude vyžadovat, přeházení bitů na jiné pozice pro znaménko a mantisu. A pro exponent půjde o přičtení konstanty.
Obráceně je to podobný, jenom se řeší zaokrouhlování mantisy, přetečení exponentu, výsledkem čeho může bát nekonečno, což je specifická hodnota v celém registru.
Máme GPU, které FP32 operace dělá v jednom taktu. Chceme počítat FP16 pomocí FP32:
Pro FP16 podpora může být:
1) V mikrokódu, každá konverze může zabrat klidně desítky taktů navíc
2) HW konverzní instrukce za 1(+) takt navíc proti FP32
3) Nebo přímé načtení FP16 do FP32bit.
Pak následuje cena za IEEE754 a deterministické výsledky na různém HW.
Na CPU (x87) probíhaly FP výpočty v 80bit registru což po řadě výpočtů mohlo přinést různé výsledky oproti SSE. Sice přesnější, ale podle IEEE754 špatně. (třeba
https://en.wikipedia.org/wiki/X87 třetí odstavec z description)
Pro dodržení standartu tedy po každé FP operaci musí následovat zaokrouhlení na FP16.
Takže když chcete: načíst -> operace -> uložit
budete pro FP16 muset: načíst -> konverze -> operace -> zaokrouhlit -> konverze -> uložit
Pokud to bude mikrokódem nebo jenom s minimální HW podporou, tak mi ani 32 taktů pro jednu FP16 instrukci nepřipadá moc.
Po nějakých změnách v HW ALU, přidání zaokrouhlovacích a konverzních instrukcích půjdou FP16 operace jenom 1/2 rychostí oproti FP32.
Pro výkon 1:1 budou nutné další změny.
A pro výkon 2:1 musíte celou ALU totálně překopat. (podobně jako rozdíl MMX vs SSE)
Konečné řešení: FPU se neupraví (moc práce, možná to bude v další generaci), ale přihodí se jednotka.. stejně jako u DP. Kvůli nápisu na krabici, papírový podpoře FP16,
Hladis//Promaz a chovejte se bez toho, ze to hrube uraží diskutery.