Ik ben nieuw in de informatica en ik vroeg me af of halve precisie wordt ondersteund door moderne architectuur op dezelfde manier als enkele of dubbele precisie. Ik dacht dat de herziening van 2008 van de IEEE-754-standaard zowel viervoudige als halve precisie introduceerde.

Reacties

  • Dit was MATLAB getagd, maar MATLAB ondersteunt ‘ (nog) niet 16 bit zwevende komma.
  • Zie deze stack-uitwisselingsvraag die wat gedetailleerde informatie hierover bevat: stackoverflow.com/questions/49995594/…
  • Het zou de moeite waard zijn om te verduidelijken of je alleen CPUs bedoelt, of zowel CPUs als GPUs.
  • Bedankt voor je reactie Max Barraclough. Ik wist niet dat je de precisie alleen in de grafische verwerkingseenheden (GPUs) kon veranderen; Ik dacht dat het in beide moest gebeuren. Uw opmerking is erg nuttig.

Antwoord

Intel-ondersteuning voor IEEE float16 opslagformaat

Intel ondersteunt IEEE half als opslagtype in processors sinds Ivy Bridge (2013). Het opslagtype betekent dat u een geheugen / cachecapaciteit / bandbreedtevoordeel kunt behalen, maar de berekening wordt gedaan met enkele precisie na het converteren van en naar het IEEE half-precisieformaat.

Intel-ondersteuning voor BFloat16

Intel heeft ondersteuning aangekondigd voor BF16 in Cooper Lake and Sapphire Rapids.

Ik werk voor Intel. Ik citeer officiële bronnen en zal geen commentaar geven op geruchten enz.

Het is goed nieuwsgierig te zijn naar de relatieve verdiensten van IEEE FP16 versus BF16. Er is veel analyse van dit onderwerp, b.v. https://nhigham.com/2018/12/03/half-precision-arithmetic-fp16-versus-bfloat16/ .

Niet-Intel hardware-ondersteuning

De volgende is informatie over andere verwerkers. Verifieer indien nodig bij de leveranciers.

http://on-demand.gputechconf.com/gtc/2017/presentation/s7676-piotr-luszcek-half-precision-bencharking-for-hpc.pdf geeft de volgende hardware-ondersteuning:

  • AMD – MI5, MI8, MI25
  • ARM – NEON VFP FP16 in V8.2-A
  • NVIDIA – Pascal en Volta

NVIDIA Ampere heeft ook FP16-ondersteuning ( https://devblogs.nvidia.com/nvidia-ampere-architecture-in-depth/ ).

Reacties

  • Het eerste deel van dit antwoord is een beetje misleidend. Hoewel Ivy Bridge inderdaad ondersteuning voor F16C introduceerde, en dat betekent technisch gezien dat halfprecisie-drijvers ” worden ondersteund “, de enige instructies voorzien zijn die om van en naar halfprecisie drijvers te converteren. Er kunnen helemaal geen bewerkingen op worden uitgevoerd, dus dat voldoet nauwelijks aan de vereiste in de vraag: ” Ik vroeg me af of halve precisie wordt ondersteund door moderne architectuur op dezelfde manier als enkele of dubbele precisie is. ” Het is slechts een opslagformaat. Je ‘ ruilt ALU-conversiecycli in voor geheugenbandbreedte / voetafdruk.
  • Ik zei letterlijk dat het een opslagtype is, alle besparingen komen voort uit smallere gegevens, en rekenen is gedaan met enkele precisie. Het is in het minst niet misleidend. Ik zei welke ondersteuning aanwezig was, dat is de helft van de mogelijke ondersteuning.
  • Allemaal bedankt. Ik vond elk van deze opmerkingen eigenlijk nuttig. De eerste reden voor het stellen van de vraag was het luisteren naar anderen die ruzie maakten over dit exacte ding.
  • @AsadMehasi: ook gerelateerd aan Stack Overflow: Halve precisie drijvende-kommaberekeningen op Intel-chips – ja op geïntegreerde GPUs sinds Skylake, maar in de IA-cores alleen voor conversie naar / van float in store / load. (Tot ondersteuning van BFloat in aanstaande HW)

Antwoord

Naar mijn mening niet erg uniform. Rekenen met lage precisie lijkt wat grip te hebben gekregen bij machine learning, maar er zijn verschillende definities voor wat mensen bedoelen met lage precisie. Er is de IEEE-754-helft (10 bit mantisse, 5 bit exponent, 1 bit teken) maar ook bfloat16 (7 bit mantisse, 8 bit exponent, 1 bit teken) die dynamisch bereik verkiest boven precisie, en een verscheidenheid aan andere formaten (NVidias 19-bit TensorFloat, AMDs fp24, misschien meer?). De meeste van deze dingen worden uitgevoerd op GPGPU-hardware voor speciale doeleinden.

Daarentegen hebben float en double over het algemeen een overeengekomen betekenis, als IEEE-754-compatibele, 32-bits (23/8/1) en 64-bits (52/11/1) weergaven.

Opmerkingen

  • Hoewel zeker niet-standaard, gebruikt optische computers effectief de helft -precisie (of minder) drijvende-kommabewerkingen.

Antwoord

Het geaccepteerde antwoord geeft een overzicht. Ik zal nog een paar details toevoegen over ondersteuning in NVIDIA-processors. De ondersteuning die ik hier beschrijf is 16 bit, IEEE 754-compatibel, drijvende-komma rekenkundige ondersteuning, inclusief optellen, vermenigvuldigen, vermenigvuldigen-optellen en conversies naar / van andere formaten .

Maxwell (circa 2015)

De vroegste IEEE 754 FP16 (“binary16” of “halve precisie”) ondersteuning kwam in cc (rekencapaciteit) 5.3 apparaten uit de Maxwell-generatie, maar deze rekenmogelijkheid werd alleen geïmplementeerd in de Tegra TX1-processor (SoC, bijv. Jetson).

Pascal (circa 2016)

Pascal gezinsleden hebben ofwel full rate (cc 6.0, 6.2 ) of “lage snelheid” (cc 6.1) FP16-doorvoer. cc6.2 was weer een Tegra-familieproduct, TX2. cc 6.0 en 6.1 worden gebruikt in verschillende processors in verschillende productfamilies, zoals GeForce, Quadro en Tesla. volledige snelheid verwijst hier naar een snelheid die gelijk is aan tweemaal de IEEE 754 FP32-snelheid (binary32 of enkele precisie) voor de processor in kwestie, wanneer bewerkingen werden uitgevoerd met een half2-gegevenstype (twee halve hoeveelheden verwerkt in hetzelfde register en dezelfde instructie).

Volta, Turing (2017, 2018)

Volta en Turing familieleden (cc 7.x) ondersteunen FP16 op ” full rate “, en gebruik daarnaast het formaat in TensorCore -bewerkingen.

Ampere (mei 2020)

De onlangs aangekondigde Ampere-architectuur A100 GPU ondersteunt ook FP16 op een manier vergelijkbaar met Volta en Turing, en introduceert extra mogelijkheden voor een TF32-datatype , een formaat waarbij de mantisse dezelfde grootte heeft (aantal bits) als een FP16-mantisse, en t De exponent heeft dezelfde grootte als een FP32-exponent. Bfloat16 -mogelijkheid werd ook aangekondigd in Ampere.

Afgezien van de onlangs aangekondigde Ampere-architectuurprocessor, ondersteuning en doorvoer voor 16-bits drijvende-kommabewerkingen (en andere bewerkingen) over verschillende computermogelijkheden (inclusief architecturen) zijn te vinden in tabel 3 van de CUDA-programmeerhandleiding . De doorvoersnelheden zijn per klok, per multiprocessor, dus moeten dienovereenkomstig worden geschaald voor het GPU-type en de specificaties. Deze doorvoersnelheden zijn niet voor TensorCore-bewerkingen, en de piekdoorvoersnelheden zijn over het algemeen alleen van toepassing bij verwerking op half2 datatypes (twee halve hoeveelheden samen verpakt in een enkel 32-bits woord).

Antwoord

U kunt zien of uw hardware halve precisie ondersteunt via:

$ 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 

De f16c instructie wordt hier gedocumenteerd.

Reacties

  • Merk op dat de C in F16C staat voor Conversion; het helpt alleen met geheugenbandbreedte / cachefootprint, niet met SIMD ALU-doorvoer. Je moet converteren naar float om te kunnen rekenen, dus het aantal elementen per SIMD-vector voor FMA-bewerkingen is niet ‘ t verbeterd.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *