Új vagyok a számítástechnika területén, és arra gondoltam, vajon a fél pontosságot támogatja-e a modern építészet ugyanúgy, mint az egy- vagy kettős pontosságot. Úgy gondoltam, hogy az IEEE-754 szabvány 2008-as felülvizsgálata négy- és félpontosságot vezetett be.
Megjegyzések
- Ezt a MATLAB címkével látták el, de a MATLAB nem támogatja a ‘ t (még) támogatást 16 bit lebegőpontos.
- Lásd ezt a veremcsere kérdést, amely részletes információkat tartalmaz erről: stackoverflow.com/questions/49995594/…
- Érdemes lenne tisztázni, hogy csak CPU-kra gondolsz-e, vagy mind CPU-kre, mind GPU-kre.
- Köszönöm a megjegyzésedet, Max Barraclough. Nem tudtam, hogy csak a grafikus processzorok (GPU) pontosságát változtathatja meg; Azt hittem, mindkettőben meg kell tenni. Megjegyzése nagyon hasznos.
Válasz
Intel támogatás az IEEE float16 tárolási formátumhoz
Az Intel az Ivy Bridge (2013) óta támogatja az IEEE fele tárolótípust a processzorokban. A tárolási típus azt jelenti, hogy memória / gyorsítótár kapacitás / sávszélesség előnyre tehet szert, de a számítás egyetlen pontossággal történik az IEEE félpontos formátumba történő konvertálás után.
Intel támogatás a BFloat16 számára
Az Intel bejelentette a BF16 támogatását Cooperben Lake and Sapphire Rapids.
-
https://software.intel.com/content/dam/develop/public/us/en/documents/architecture-instruction-set-extensions-programming-reference.pdf (a 2020. júniusi 319433-040 frissítés leírja az AMX BF16-ot)
Az Intelnél dolgozom. Hivatalos forrásokra hivatkozom, és nem kommentálom a pletykákat stb.
Jó, ha kíváncsi vagyok az IEEE FP16 vs BF16 relatív érdemeire. Nagyon sok elemzés van erről a témáról, pl. https://nhigham.com/2018/12/03/half-precision-arithmetic-fp16-versus-bfloat16/ .
Nem Intel hardvertámogatás
A következők más processzorokkal kapcsolatos információ. Szükség esetén ellenőrizze a szállítókkal.
http://on-demand.gputechconf.com/gtc/2017/presentation/s7676-piotr-luszcek-half-precision-bencharking-for-hpc.pdf a következő hardvertámogatást sorolja fel:
- AMD – MI5, MI8, MI25
- ARM – NEON VFP FP16 a V8.2-A-ban
- NVIDIA – Pascal és Volta
Az NVIDIA Ampere rendelkezik FP16 támogatással is ( https://devblogs.nvidia.com/nvidia-ampere-architecture-in-depth/ ).
Megjegyzések
- A válasz első része kissé félrevezető. Míg az Ivy Bridge valóban bevezette az F16C támogatását, ez technikailag azt jelenti, hogy a félpontos úszók ” támogatottak “, az egyetlen utasítás biztosítottak azok, amelyek félprecíziós úszókká alakíthatnak át. Nem lehet velük semmilyen műveletet végrehajtani, így ez alig felel meg a kérdés követelményének: ” Kíváncsi voltam, hogy a modern építészet ugyanúgy támogatja-e a fél pontosságot, mint a egyetlen vagy kettős pontosság. ” Ez csupán egy tárolási formátum. ‘ az ALU átalakítási ciklusokat kereskeded a memória sávszélességével / lábnyomával.
- Szó szerint azt mondtam, hogy ez egy tárolótípus, minden megtakarítás szűkebb adatokból származik, és a számítás egyetlen pontossággal végezzük. A legkevésbé sem félrevezető. Mondtam, hogy milyen támogatás van jelen, ami a lehetséges támogatás fele.
- Köszönöm mindenkinek. Valójában ezeket a megjegyzéseket hasznosnak találtam. A kérdés feltevésének kezdeti oka az volt, hogy meghallgattuk, hogy mások vitatkoznak erről a pontos dologról.
- @AsadMehasi: a verem túlcsordulásával is kapcsolatos: Félpontosság lebegőpontos aritmetika az Intel lapkáin – igen a Skylake óta integrált GPU-knál, de az IA magokban csak
float
-re / tárolóra történő átalakításhoz a boltban / betöltésben. (A BFloat támogatásáig a készülő HW-ban)
Válasz
Véleményem szerint nem túl egységesen. Úgy tűnik, hogy az alacsony pontosságú aritmetika némi tapadást nyert a gépi tanulásban, de különböző meghatározások vannak arra, hogy mit értenek az emberek alacsony pontosság alatt. Van az IEEE-754 fele (10 bites mantissa, 5 bites kitevő, 1 bites előjel), bfloat16 (7 bites mantissa, 8 bites exponens, 1 bites előjel), amely a dinamikatartománynak kedvez a pontossággal szemben, és számos más formátum (NVidia 19 bites TensorFloat, AMD fp24, esetleg még több?). A legtöbb ilyen anyag speciális célú GPGPU típusú hardveren fut.
Ezzel szemben az úszó és a dupla általában egyetértett jelentéssel bír, mint az IEEE-754 szabványnak megfelelő, 32 bites (23/8/1) és 64 bites (52/11/1) ábrázolás.
Megjegyzések
- Bár határozottan nem szabványos, a optikai számítástechnika hatékonyan felhasználja a felét pontosságú (vagy kevesebb) lebegőpontos művelet.
Válasz
Az elfogadott válasz áttekintést nyújt. Hozzáadok még néhány részletet az NVIDIA processzorok támogatásáról. Az itt leírt támogatás 16 bites, IEEE 754-kompatibilis, lebegőpontos aritmetikai támogatás, beleértve az összeadást, szorzást, szorzást-összeadást és más formátumú / más konvertálást. .
Maxwell (2015 körül)
A legkorábbi IEEE 754 FP16 (“bináris16” vagy “félpontosság”) támogatás a cc (számítási képesség) 5.3 eszközökben érkezett, amelyek a Maxwell generációhoz tartoztak, de ez a számítási képesség csak a Tegra TX1 processzor (SoC, pl. Jetson).
Pascal (kb. 2016)
Pascal családtagok “teljes arányban” (cc 6.0, 6.2) ) vagy “alacsony sebességű” (cc 6.1) FP16 átviteli sebesség. A cc6.2 ismét egy Tegra család terméke, a TX2 volt. A cc 6.0 és 6.1 különféle processzorokban, különféle termékcsaládokban – például a GeForce, a Quadro és a Tesla – talált felhasználást. A “teljes sebesség” itt azt a sebességet jelenti, amely megegyezik az adott processzor IEEE 754 FP32 (“bináris32” vagy “egyszeres pontosságú”) kétszeresével, amikor a műveleteket egy fél2 adattípus (két fél mennyiség kezelése ugyanaz a regisztráció és utasítás).
Volta, Turing (2017, 2018)
Volta és Turing családtagok (cc 7.x) támogatják az FP16-ot ” full rate “, és emellett használja a formátumot a TensorCore műveleteknél.
Ampere (2020. május)
A nemrég bejelentett Ampere architektúra A100 GPU támogatja az FP16-ot is hasonló módon, mint a Volta és a Turing, és további képességeket vezet be a TF32 adattípushoz , amely olyan formátum, ahol a mantissa azonos méretű (bitek száma) mint FP16 mantissa, és t kitevője akkora, mint egy FP32 kitevő. A Bfloat16 képességről az Ampere is beszámolt.
Az Ampere architektúra processzoron kívül a közelmúltban bejelentették, hogy támogatást és átvitelt biztosítanak a 16 bites lebegőpontos műveletekhez. (és egyéb műveletek) a számítási képességeken (beleértve az architektúrákat is) a a CUDA programozási útmutató 3. táblázatában találhatók . Az átviteli sebesség óránként, többprocesszoronként van megadva, ezért a GPU típusának és specifikációinak megfelelően kell méretezni. Ezek az átviteli adatok nem a TensorCore műveletekhez használhatók, és a csúcsteljesítmények általában csak fél2 adattípus (két fele mennyiség összegyűjtése egyetlen 32 bites szóban) feldolgozásakor alkalmazhatók.
Válasz
Megtudhatja, hogy hardvere támogatja-e a félpontosságot:
$ lscpu | grep Flags | grep f16c Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cdp_l3 invpcid_single pti ssbd mba ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm mpx rdt_a avx512f avx512dq rdseed adx smap clflushopt clwb intel_pt avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts hwp hwp_act_window hwp_epp hwp_pkg_req md_clear flush_l1d
A utasítást itt dokumentálják .
Megjegyzések
- Ne feledje, hogy az F16C-ben lévő C jelentése konverzió; csak a memória sávszélességének / gyorsítótárának lábnyománál segít, a SIMD ALU átviteli sebességen nem. Bármilyen matematika elvégzéséhez lebegőre kell konvertálnia, így az FMA műveletekhez tartozó SIMD vektorok száma nem javul.
- id = “20b7f63cff”>
nem javult.