Jsem v informatice nový a zajímalo by mě, zda je poloviční přesnost podporována moderní architekturou stejně jako jednoduchá nebo dvojitá přesnost. Myslel jsem, že revize standardu IEEE-754 z roku 2008 zavedla jak čtyřnásobnou, tak poloviční přesnost.

Komentáře

  • Toto bylo označeno jako MATLAB, ale MATLAB ‚ (zatím) nepodporuje 16 bitů s plovoucí desetinnou čárkou.
  • Podívejte se na tuto otázku výměny zásobníku, která k tomu obsahuje několik podrobných informací: stackoverflow.com/questions/49995594/…
  • Bylo by dobré si ujasnit, zda máte na mysli pouze CPU, nebo CPU i GPU.
  • Děkujeme za váš komentář Max Barraclough. Nevěděl jsem, že můžete změnit přesnost pouze u jednotek grafického zpracování (GPU); Myslel jsem, že to musí být provedeno v obou. Váš komentář je velmi užitečný.

Odpovědět

Podpora Intel pro IEEE float16 formát úložiště

Intel podporuje polovinu IEEE jako typ úložiště v procesorech od Ivy Bridge (2013). Typ úložiště znamená, že můžete získat výhodu paměti / mezipaměti / šířky pásma, ale výpočet se provádí s jedinou přesností po převodu do formátu IEEE s poloviční přesností.

podpora Intel pro BFloat16

Intel oznámil podporu BF16 v Cooper Lake and Sapphire Rapids.

Pracuji pro Intel. Cituji oficiální zdroje a nebudu komentovat zvěsti atd.

Je dobré být zvědavý na relativní výhody IEEE FP16 vs BF16. Existuje mnoho analýz tohoto tématu, např. https://nhigham.com/2018/12/03/half-precision-arithmetic-fp16-versus-bfloat16/ .

Podpora hardwaru jiného výrobce než Intel

Následující jsou informace o dalších procesorech. Podle potřeby ověřte u dodavatelů.

http://on-demand.gputechconf.com/gtc/2017/presentation/s7676-piotr-luszcek-half-precision-bencharking-for-hpc.pdf uvádí následující podporu hardwaru:

  • AMD – MI5, MI8, MI25
  • ARM – NEON VFP FP16 ve verzi V8.2-A
  • NVIDIA – Pascal a Volta

NVIDIA Ampere má také podporu FP16 ( https://devblogs.nvidia.com/nvidia-ampere-architecture-in-depth/ ).

Komentáře

  • První část této odpovědi je trochu zavádějící. Zatímco Ivy Bridge skutečně zavedl podporu pro F16C, a to technicky znamená, že floaty s poloviční přesností jsou “ podporovány „, jediné pokyny jsou poskytovány ty, které se mají převádět do az plováků s poloviční přesností. Nelze na nich provádět žádné operace, takže to sotva splňuje požadavek v otázce: “ Zajímalo by mě, zda je poloviční přesnost podporována moderní architekturou stejně jako jednoduchá nebo dvojitá přesnost je. “ Jedná se pouze o formát úložiště. ‚ znovu obchodujete s konverzními cykly ALU pro šířku pásma / stopu paměti.
  • Doslova jsem řekl, že jde o typ úložiště, všechny úspory pocházejí z užších dat a výpočet je provedeno s jedinou přesností. Není to zavádějící ani v nejmenším. Řekl jsem, jaká podpora byla přítomna, což je polovina možné podpory.
  • Děkuji vám všem. Ve skutečnosti mi každý z těchto komentářů pomohl. Prvotním důvodem pro položení otázky bylo naslouchání ostatním, kteří se dohadovali o této přesné věci.
  • @AsadMehasi: také související s přetečením zásobníku: poloviční přesnost aritmetika s plovoucí desetinnou čárkou na čipech Intel – ano na integrovaných GPU od Skylake, ale v jádrech IA pouze pro převod do / z float na store / load. (Do podpory BFloat v připravovaném HW)

Odpověď

Podle mého názoru ne příliš jednotně. Zdá se, že aritmetika s nízkou přesností získala určitou pozornost ve strojovém učení, ale existují různé definice toho, co lidé myslí pod nízkou přesností. Existuje polovina IEEE-754 (10 bitová mantisa, 5 bitový exponent, 1 bit znak), ale také bfloat16 (7bitová mantisa, 8bitový exponent, 1bitové znaménko), která upřednostňuje dynamický rozsah před přesností a řadu dalších formátů (NVidia s 19bitovým TensorFloat, AMD s fp24, možná i více?). Většina těchto věcí běží na speciálním hardwaru typu GPGPU.

Naproti tomu float a double mají obecně dohodnutý význam, jako IEEE-754, 32bitové (23/8/1) a 64bitové (52/11/1).

Komentáře

  • Ačkoli je rozhodně nestandardní, optické výpočty efektivně využívají polovinu -přesné (nebo méně) operace s plovoucí desetinnou čárkou.

Odpověď

Přijatá odpověď poskytuje přehled. Přidám několik dalších podrobností o podpoře v procesorech NVIDIA. Podpora, kterou zde popisuji, je 16bitová, kompatibilní s IEEE 754, podpora s plovoucí desetinnou čárkou, včetně add, multiply, multiply-add a převodů do / z jiných formátů .

Maxwell (cca 2015)

Nejdříve IEEE 754 podpora FP16 („binary16“ nebo „half precision“) přišla v zařízeních cc (výpočetní schopnost) 5,3, která byla v generaci Maxwell, ale tato výpočetní schopnost byla implementována pouze v procesor Tegra TX1 (SoC, např. Jetson).

Pascal (kolem 2016)

Pascal členové rodiny mají buď „plnou sazbu“ (cc 6,0, 6,2 ) nebo „nízká rychlost“ (cc 6.1) propustnost FP16. cc6.2 byl opět produktem rodiny Tegra, TX2. cc 6.0 a 6.1 našel použití v různých procesorech v různých rodinách produktů, jako jsou GeForce, Quadro a Tesla. „plná rychlost“ zde označuje rychlost, která odpovídá dvojnásobku rychlosti IEEE 754 FP32 („binary32“ nebo „single precision“) pro dotyčný procesor, když byly operace prováděny pomocí datového typu half2 (zpracovány dvě poloviční množství stejný registr a instrukce).

Volta, Turing (2017, 2018)

Volta a Členové rodiny Turing (cc 7.x) podporují 16. RP na adrese “ full rate „, a navíc použijte formát v operacích TensorCore .

Ampere (květen 2020)

Nedávno ohlášená Ampérská architektura A100 GPU podporuje také FP16 způsobem podobným Voltě a Turingovi a zavádí další možnosti pro datový typ TF32 , což je formát, kde mantisa má stejnou velikost (počet bitů) jako mantisa FP16 at exponent má stejnou velikost jako exponent FP32. Funkce Bfloat16 byla také oznámena v Ampere.

Kromě nedávno oznámeného procesoru architektury Ampere je podpora a propustnost pro 16bitové operace s plovoucí desetinnou čárkou (a další operace) napříč výpočetními schopnostmi (včetně architektur) najdete v tabulce 3 Průvodce programováním CUDA . Propustnosti jsou na hodiny, na více procesorů, takže je třeba je odpovídajícím způsobem upravit pro typ a specifikace GPU. Tyto propustnosti nejsou pro operace TensorCore a špičkové propustnosti jsou obecně použitelné pouze při zpracování na polovičních datových typech (dvě poloviční množství zabalená do jednoho 32bitového slova).

Odpovědět

To, zda váš hardware podporuje poloviční přesnost, zjistíte pomocí:

$ 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 

f16c instrukce je zdokumentována zde .

Komentáře

  • Všimněte si, že C v F16C znamená konverze; pomáhá pouze s šířkou pásma paměti / mezipamětí, nikoli s propustností SIMD ALU. Chcete-li dělat jakoukoli matematiku, musíte převést na float, takže počet prvků na vektor SIMD pro operace FMA se nezlepší ‚.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *