Sunt nou în domeniul informaticii și mă întrebam dacă jumătate de precizie este susținută de arhitectura modernă în același mod în care este simplă sau dublă precizie. Am crezut că revizuirea din 2008 a standardului IEEE-754 a introdus precizări atât cvadruplă, cât și jumătate.

Comentarii

  • Aceasta a fost etichetată MATLAB, dar MATLAB nu ‘ suportă (încă) 16 biți virgulă mobilă.
  • Consultați această întrebare de schimb de stive care conține câteva informații detaliate despre aceasta: stackoverflow.com/questions/49995594/…
  • Ar merita să clarificăm dacă vă referiți doar la procesoare sau la ambele procesoare și GPU-uri.
  • Vă mulțumim pentru comentariul dvs. Max Barraclough. Nu știam că puteți modifica precizia doar în unitățile de procesare grafică (GPU-uri); Am crezut că trebuie făcut în ambele. Comentariul dvs. este foarte util.

Răspuns

Suport Intel pentru IEEE float16 format de stocare

Intel acceptă IEEE pe jumătate ca tip de stocare în procesoare de la Ivy Bridge (2013). Tipul de stocare înseamnă că puteți obține un avantaj de memorie / cache / lățime de bandă, dar calculul se face cu o singură precizie după conversia în și din formatul de jumătate de precizie IEEE.

Asistență Intel pentru BFloat16

Intel a anunțat asistență pentru BF16 în Cooper Rapide lac și safir.

Lucrez pentru Intel. Citez surse oficiale și nu voi comenta zvonuri etc.

Este bine să fii curios cu privire la meritele relative ale IEEE FP16 față de BF16. Există o mulțime de analize ale acestui subiect, de ex. https://nhigham.com/2018/12/03/half-precision-arithmetic-fp16-versus-bfloat16/ .

Suport hardware non-Intel

Următoarele sunt informații despre alte procesoare. Vă rugăm să verificați cu furnizorii după cum este necesar.

http://on-demand.gputechconf.com/gtc/2017/presentation/s7676-piotr-luszcek-half-precision-bencharking-for-hpc.pdf enumeră următorul suport hardware:

  • AMD – MI5, MI8, MI25
  • ARM – NEON VFP FP16 în V8.2-A
  • NVIDIA – Pascal și Volta

NVIDIA Ampere are și suport FP16 ( https://devblogs.nvidia.com/nvidia-ampere-architecture-in-depth/ ).

Comentarii

  • Prima parte a acestui răspuns este un pic înșelătoare. În timp ce Ivy Bridge a introdus într-adevăr suport pentru F16C și asta înseamnă din punct de vedere tehnic că plutitoarele cu jumătate de precizie sunt ” acceptate „, singurele instrucțiuni sunt furnizate cele pentru a converti la și de la plutitoare cu precizie. Nu se pot face operațiuni asupra lor, astfel încât nu îndeplinește cu greu cerința din întrebarea: ” Mă întrebam dacă jumătate de precizie este susținută de arhitectura modernă în același mod ca precizia simplă sau dublă este. ” Este doar un format de stocare. ‘ tranzacționați cicluri de conversie ALU pentru lățime de bandă / amprentă de memorie.
  • Am spus literalmente că este un tip de stocare, toate economiile provin din date mai restrânse și calculul este realizat cu o singură precizie. Nu este înșelător în niciun caz. Am spus ce asistență era prezentă, ceea ce reprezintă jumătate din asistența posibilă.
  • Vă mulțumesc tuturor. De fapt, am găsit utile fiecare dintre aceste comentarii. Motivul inițial pentru care a pus întrebarea s-a datorat ascultării celorlalți care se certau cu privire la acest lucru exact.
  • @AsadMehasi: de asemenea, legat de Stack Overflow: aritmetică în virgulă mobilă pe cipurile Intel – da pe GPU-urile integrate de la Skylake, dar în nucleele IA doar pentru conversia în / de la float la magazin / încărcare. (Până la asistența BFloat în HW viitoare)

Răspuns

În opinia mea, nu foarte uniform. Aritmetica de precizie scăzută pare să fi câștigat o oarecare tracțiune în învățarea automată, dar există „definiții diferite pentru ceea ce înseamnă oamenii prin precizie redusă. Există jumătatea IEEE-754 (mantisă de 10 biți, exponent de 5 biți, semn de 1 bit), dar și bfloat16 (mantisă de 7 biți, exponent de 8 biți, semn de 1 bit) care favorizează gama dinamică peste precizie și o varietate de alte formate (TensorFloat de 19 biți NVidia, fp24 AMD, poate mai mult?). Majoritatea acestor lucruri rulează pe un hardware special de tip GPGPU.

În schimb, float și double au, în general, semnificații convenite, ca reprezentări IEEE-754, 32 de biți (23/8/1) și 64 de biți (52/11/1).

Comentarii

  • Deși este cu siguranță nestandard, calculul optic utilizează în mod eficient jumătate -operiții cu virgulă precisă (sau mai puțin).

Răspuns

Răspunsul acceptat oferă o prezentare generală. Voi adăuga câteva detalii suplimentare despre asistența în procesoarele NVIDIA. Suportul pe care îl descriu aici este 16 biți, compatibil IEEE 754, suport aritmetic în virgulă mobilă, inclusiv adăugare, multiplicare, adăugare multiplică și conversii în / din alte formate .

Maxwell (circa 2015)

Cel mai vechi IEEE 754 FP16 („binary16” sau „half precision”) a venit în dispozitive cc (capacitate de calcul) 5.3 care erau în generația Maxwell, dar această capacitate de calcul a fost implementată doar în procesor Tegra TX1 (SoC, de ex. Jetson).

Pascal (circa 2016)

membrii familiei Pascal au fie „tarif complet” (cc 6,0, 6,2 ) sau „rata scăzută” (cc 6.1) randament FP16. cc6.2 a fost din nou un produs al familiei Tegra, TX2. CC 6.0 și 6.1 au fost utilizate într-o varietate de procesoare din diferite familii de produse, cum ar fi GeForce, Quadro și Tesla. „full rate” aici se referă la o rată care este echivalentă cu dublul ratei IEEE 754 FP32 („binary32” sau „single precision”) pentru procesorul în cauză, când operațiile au fost făcute folosind un tip de date jumătate (două jumătăți cantități manipulate în același registru și instrucțiune).

Volta, Turing (2017, 2018)

Volta și Turing membrii familiei (cc 7.x) acceptă FP16 la ” full rate „și, în plus, utilizați formatul în operațiile TensorCore .

Ampere (mai 2020)

Arhitectura ampere A100 GPU acceptă, de asemenea, FP16 într-un mod similar cu Volta și Turing și introduce o capacitate suplimentară pentru un tip de date TF32 , care este un format în care mantisa are aceeași dimensiune (număr de biți) ca mantisă FP16 și t exponentul are aceeași dimensiune ca un exponent FP32. Capacitatea Bfloat16 a fost, de asemenea, anunțată în Ampere.

În afară de procesorul de arhitectură Ampere recent anunțat, suport și transmisii pentru operațiuni în virgulă mobilă pe 16 biți (și alte operații) pe capabilități de calcul (inclusiv arhitecturi) pot fi găsite în tabelul 3 din ghidul de programare CUDA . Randamentele sunt pe ceas, pe multiprocesor, deci trebuie scalate corespunzător pentru tipul și specificațiile GPU. Aceste intrări nu sunt pentru operațiuni TensorCore, iar intrările de vârf se aplică, în general, numai la procesarea pe jumătate de tipuri de date (două jumătăți de cantități ambalate împreună într-un singur cuvânt pe 32 de biți).

Răspuns

Puteți afla dacă hardware-ul dvs. acceptă jumătate de precizie prin:

$ 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 

este documentată aici .

Comentarii

  • Rețineți că C din F16C înseamnă Conversie; ajută doar cu lățimea de bandă a memoriei / amprenta cache, nu cu transferul SIMD ALU. Trebuie să vă convertiți în float pentru a face orice matematică, astfel încât numărul de elemente pe vectorul SIMD pentru operațiile FMA nu este ‘ t îmbunătățit.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *