Jeg er ny inden for datalogi og tænkte på, om halv præcision understøttes af moderne arkitektur på samme måde som enkelt eller dobbelt præcision er. Jeg troede, at 2008-revisionen af IEEE-754-standarden introducerede både firdobbelt og halvpræcision.

Kommentarer

  • Dette blev tagget MATLAB, men MATLAB understøtter ikke ‘ t (endnu) 16 bit flydende punkt.
  • Se dette stack-udvekslingsspørgsmål, der har nogle detaljerede oplysninger om dette: stackoverflow.com/questions/49995594/…
  • Det ville være værd at præcisere, om du bare mener CPUer eller både CPUer og GPUer.
  • Tak for din kommentar Max Barraclough. Jeg vidste ikke, at du kunne ændre præcisionen i bare grafikbehandlingsenhederne (GPUer); Jeg troede, det skulle gøres i begge dele. Din kommentar er meget hjælpsom.

Svar

Intel-understøttelse af IEEE float16 lagerformat

Intel understøtter IEEE-halvdelen som en lagringstype i processorer siden Ivy Bridge (2013). Lagertype betyder, at du kan få en hukommelse / cache-kapacitet / båndbreddefordel, men beregningen udføres med en enkelt præcision efter konvertering til og fra IEEE-halvpræcisionsformatet.

Intel-support til BFloat16

Intel har annonceret støtte til BF16 i Cooper Lake and Sapphire Rapids.

Jeg arbejder for Intel. Jeg citerer officielle kilder og vil ikke kommentere rygter osv.

Det er godt at være nysgerrig efter de relative fordele ved IEEE FP16 vs BF16. Der er en masse analyser af dette emne, f.eks. https://nhigham.com/2018/12/03/half-precision-arithmetic-fp16-versus-bfloat16/ .

Ikke-Intel-hardwaresupport

Følgende er information om andre processorer. Bekræft med forhandlerne efter behov.

http://on-demand.gputechconf.com/gtc/2017/presentation/s7676-piotr-luszcek-half-precision-bencharking-for-hpc.pdf viser følgende hardwaresupport:

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

NVIDIA Ampere har også FP16-understøttelse ( https://devblogs.nvidia.com/nvidia-ampere-architecture-in-depth/ ).

Kommentarer

  • Den første del af dette svar er lidt vildledende. Mens Ivy Bridge faktisk indførte understøttelse af F16C, og det betyder teknisk set, at svæve med halv præcision er ” understøttet “, den eneste vejledning forudsat er dem, der skal konverteres til og fra flydere med halv præcision. Ingen operationer kan udføres på dem overhovedet, så det næppe opfylder kravet i spørgsmålet: ” Jeg undrede mig over, om halv præcision understøttes af moderne arkitektur på samme måde som enkelt eller dobbelt præcision er. ” Det er kun et lagerformat. Du ‘ ombytter ALU-konverteringscyklusser til hukommelsesbåndbredde / fodaftryk.
  • Jeg sagde bogstaveligt talt, at det er en lagringstype, alle besparelser kommer fra smallere data, og beregningen er udført med en enkelt præcision. Det er ikke vildledende i det mindste. Jeg sagde, hvilken støtte der var til stede, hvilket er halvdelen af den mulige støtte.
  • Tak alle sammen. Jeg fandt faktisk hver af disse kommentarer nyttige. Den oprindelige grund til at stille spørgsmålet skyldtes at lytte til andre, der skændte om denne nøjagtige ting.
  • @AsadMehasi: også relateret til Stack Overflow: Halvpræcision flydende-aritmetik på Intel-chips – ja på integrerede GPUer siden Skylake, men i IA-kernerne kun til konvertering til / fra float på butik / belastning. (Indtil BFloat-support i kommende HW)

Svar

Efter min mening ikke særlig ensartet. Aritmetik med lav præcision ser ud til at have fået noget trækkraft i maskinindlæring, men der er forskellige definitioner for, hvad folk mener med lav præcision. Der er IEEE-754 halvdelen (10 bit mantissa, 5 bit eksponent, 1 bit tegn) men også bfloat16 (7 bit mantissa, 8 bit eksponent, 1 bit tegn), der favoriserer dynamisk rækkevidde frem for præcision, og en række andre formater (NVidias 19-bit TensorFloat, AMDs fp24, måske mere?). De fleste af disse ting kører på speciel GPGPU-type hardware.

I modsætning hertil har float og double generelt aftalt betydning som IEEE-754-kompatibel, 32-bit (23/8/1) og 64-bit (52/11/1) repræsentationer.

Kommentarer

  • Selvom det bestemt ikke er standard, bruger optisk computing effektivt halvdelen -præcision (eller mindre) flydende punktoperationer.

Svar

Det accepterede svar giver en oversigt. Jeg tilføjer nogle få flere detaljer om support i NVIDIA-processorer. Den support, jeg beskriver her, er 16 bit, IEEE 754-kompatibel, floating point-aritmetisk support, inklusive tilføj, multiplicer, multiplicer-tilføj og konverteringer til / fra andre formater .

Maxwell (ca. 2015)

Den tidligste IEEE 754 FP16 (“binær16” eller “halv præcision”) understøttes i cc (beregningsfunktion) 5.3 enheder, der var i Maxwell-generationen, men denne beregningsfunktion blev kun implementeret i Tegra TX1-processor (SoC, f.eks. Jetson).

Pascal (ca. 2016)

Pascal familiemedlemmer har enten “fuld sats” (cc 6,0, 6,2 ) eller “lav hastighed” (cc 6.1) FP16-gennemstrømning. cc6.2 var igen et Tegra-familieprodukt, TX2. cc 6.0 og 6.1 fundet anvendelse i en række processorer i forskellige produktfamilier som GeForce, Quadro og Tesla. “fuld hastighed” refererer her til en hastighed, der svarer til det dobbelte af IEEE 754 FP32 (“binær32” eller “enkelt præcision”) for den pågældende processor, når operationer blev udført ved hjælp af en halv2 datatype (to halvdele behandlet det samme register og instruktion).

Volta, Turing (2017, 2018)

Volta og Turing familiemedlemmer (cc 7.x) understøtter FP16 ved ” fuld sats “, og brug desuden formatet i TensorCore -handlinger.

Ampere (Maj, 2020)

Den nyligt annoncerede Ampere arkitektur A100 GPU understøtter også FP16 på en måde, der ligner Volta og Turing, og introducerer yderligere kapacitet til en TF32 datatype , som er et format, hvor mantissen har samme størrelse (antal bits) som en FP16-mantissa og t han eksponent har samme størrelse som en FP32 eksponent. Bfloat16 -funktion blev også annonceret i Ampere.

Bortset fra Ampere-arkitekturprocessoren, der for nylig blev annonceret, understøttes og gennemgange til 16-bit floating point-operationer (og andre operationer) på tværs af beregningsfunktioner (inklusive arkitekturer) kan findes i tabel 3 i CUDA-programmeringsvejledningen . Gennemgangene er pr. Ur pr. Multiprocessor, så skal skaleres i henhold til GPU-typen og specifikationerne. Disse gennemgange er ikke til TensorCore-operationer, og topgennemstrømningerne er generelt kun anvendelige, når de behandles på halv2 datatyper (to halvmængder pakket sammen i et enkelt 32-bit ord).

Svar

Du kan finde ud af, om din hardware understøtter halvpræcision 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 

f16c instruktion er dokumenteret her .

Kommentarer

  • Bemærk, at C i F16C står for konvertering; det hjælper kun med hukommelsesbåndbredde / cache-fodaftryk, ikke SIMD ALU-gennemstrømning. Du er nødt til at konvertere til float for at lave en hvilken som helst matematik, så antallet af elementer pr. SIMD-vektor til FMA-operationer er ikke ‘ t forbedret.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *