Sono nuovo nellinformatica e mi chiedevo se la metà della precisione sia supportata dallarchitettura moderna allo stesso modo della precisione singola o doppia. Pensavo che la revisione del 2008 dello standard IEEE-754 introducesse sia la quadrupla che la mezza precisione.

Commenti

  • Questo è stato taggato MATLAB, ma MATLAB non ‘ t (ancora) supporta 16 bit virgola mobile.
  • Vedi questa domanda sullo scambio di stack che contiene alcune informazioni dettagliate su questo: stackoverflow.com/questions/49995594/…
  • Varrebbe la pena chiarire se intendi solo CPU o sia CPU che GPU.
  • Grazie per il tuo commento Max Barraclough. Non sapevo che potessi alterare la precisione solo nelle unità di elaborazione grafica (GPU); Ho pensato che dovesse essere fatto in entrambi. Il tuo commento è molto utile.

Risposta

Supporto Intel per IEEE float16 formato di archiviazione

Intel supporta IEEE metà come tipo di archiviazione nei processori a partire da Ivy Bridge (2013). Il tipo di archiviazione significa che puoi ottenere un vantaggio in termini di memoria / capacità cache / larghezza di banda, ma il calcolo viene eseguito con precisione singola dopo la conversione da e verso il formato a mezza precisione IEEE.

Supporto Intel per BFloat16

Intel ha annunciato il supporto per BF16 in Cooper Lake and Sapphire Rapids.

Lavoro per Intel. Sto citando fonti ufficiali e non commenterò voci ecc.

È bene essere curiosi dei relativi meriti di IEEE FP16 vs BF16. Cè molta analisi su questo argomento, ad es. https://nhigham.com/2018/12/03/half-precision-arithmetic-fp16-versus-bfloat16/ .

Supporto hardware non Intel

Quanto segue sono informazioni su altri processori. Verificare con i fornitori se necessario.

http://on-demand.gputechconf.com/gtc/2017/presentation/s7676-piotr-luszcek-half-precision-bencharking-for-hpc.pdf elenca il seguente supporto hardware:

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

NVIDIA Ampere supporta anche FP16 ( https://devblogs.nvidia.com/nvidia-ampere-architecture-in-depth/ ).

Commenti

  • La prima parte di questa risposta è un po fuorviante. Sebbene Ivy Bridge abbia effettivamente introdotto il supporto per F16C, e questo tecnicamente significa che i float a mezza precisione sono ” supportati “, le uniche istruzioni forniti sono quelli da convertire in e da float di mezza precisione. Non è possibile eseguire alcuna operazione su di essi, quindi difficilmente soddisfa il requisito nella domanda: ” Mi chiedevo se la metà della precisione sia supportata dallarchitettura moderna allo stesso modo di la precisione singola o doppia è. ” È semplicemente un formato di archiviazione. ‘ scambia i cicli di conversione ALU per larghezza di banda / impronta di memoria.
  • Ho letteralmente detto che è un tipo di archiviazione, tutto il risparmio deriva da dati più ristretti e il calcolo è fatto con singola precisione. Non è minimamente fuorviante. Ho detto quale supporto era presente, che è la metà del supporto possibile.
  • Grazie a tutti. In realtà ho trovato utile ciascuno di questi commenti. Il motivo iniziale per porre la domanda era dovuto allascolto di altri che discutevano su questa cosa esatta.
  • @AsadMehasi: correlato anche a Stack Overflow: Half-precision aritmetica in virgola mobile su chip Intel – sì su GPU integrate a partire da Skylake, ma nei core IA solo per la conversione a / da float in negozio / caricamento. (Fino al supporto di BFloat nel prossimo HW)

Answer

A mio parere, non in modo molto uniforme. Laritmetica a bassa precisione sembra aver guadagnato una certa trazione nellapprendimento automatico, ma ci sono definizioni diverse per ciò che le persone intendono per bassa precisione. Cè la metà IEEE-754 (mantissa a 10 bit, esponente a 5 bit, segno a 1 bit) ma anche bfloat16 (mantissa a 7 bit, esponente a 8 bit, segno a 1 bit) che privilegia la gamma dinamica rispetto alla precisione e una varietà di altri formati (TensorFloat a 19 bit di NVidia, fp24 di AMD, forse di più?). La maggior parte di queste cose gira su hardware di tipo GPGPU per scopi speciali.

Al contrario, float e double hanno un significato generalmente concordato, in quanto conformi a IEEE-754, rappresentazioni a 32 bit (23/8/1) e 64 bit (52/11/1).

Commenti

  • Sebbene decisamente non standard, computer ottico utilizza effettivamente la metà -precisione (o meno) operazioni in virgola mobile.

Risposta

La risposta accettata fornisce una panoramica. Aggiungerò qualche dettaglio in più sul supporto nei processori NVIDIA. Il supporto che sto descrivendo qui è 16 bit, conforme a IEEE 754, supporto aritmetico in virgola mobile, inclusi aggiunta, moltiplicazione, moltiplicazione-aggiunta e conversioni da / ad altri formati .

Maxwell (circa 2015)

Il primo IEEE 754 Il supporto FP16 (“binary16” o “half precision”) era disponibile nei dispositivi cc (capacità di calcolo) 5.3 che erano nella generazione Maxwell, ma questa capacità di calcolo è stata implementata solo in il processore Tegra TX1 (SoC, ad es. Jetson).

Pascal (circa 2016)

Pascal i membri della famiglia hanno “tariffa piena” (cc 6.0, 6.2 ) o “velocità ridotta” (cc 6.1) FP16 throughput. cc6.2 era di nuovo un prodotto della famiglia Tegra, TX2. cc 6.0 e 6.1 sono stati utilizzati in una varietà di processori in varie famiglie di prodotti come GeForce, Quadro e Tesla. “velocità piena” qui si riferisce a una velocità equivalente al doppio della velocità IEEE 754 FP32 (“binary32” o “precisione singola”) per il processore in questione, quando le operazioni sono state eseguite utilizzando un tipo di dati half2 (due mezze quantità gestite in lo stesso registro e istruzione).

Volta, Turing (2017, 2018)

Volta e Turing i membri della famiglia (cc 7.x) supportano FP16 a ” full rate “e inoltre utilizza il formato nelle operazioni TensorCore .

Ampere (maggio, 2020)

Anche la GPU A100 , recentemente annunciata, Ampere architecture A100 supporta FP16 in modo simile a Volta e Turing e introduce funzionalità aggiuntive per un tipo di dati TF32 , che è un formato in cui la mantissa ha la stessa dimensione (numero di bit) come mantissa FP16 e t Lesponente ha le stesse dimensioni di un esponente FP32. La funzionalità Bfloat16 è stata annunciata anche in Ampere.

Oltre al processore dellarchitettura Ampere recentemente annunciato, supporto e velocità di trasmissione per operazioni in virgola mobile a 16 bit (e altre operazioni) tra le capacità di calcolo (comprese le architetture) sono disponibili nella tabella 3 della guida alla programmazione CUDA . I throughput sono per clock, per multiprocessore, quindi devono essere ridimensionati di conseguenza per il tipo e le specifiche della GPU. Questi throughput non sono per le operazioni di TensorCore e i picchi di throughput sono generalmente applicabili solo quando si elabora metà 2 tipi di dati (due mezze quantità impacchettate insieme in una singola parola a 32 bit).

Risposta

Puoi scoprire se il tuo hardware supporta la mezza precisione tramite:

$ 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 

Il f16c è documentata qui .

Commenti

  • Notare che la C in F16C sta per Conversion; aiuta solo con la larghezza di banda della memoria / footprint della cache, non con il throughput SIMD ALU. Devi convertire in float per fare qualsiasi matematica, quindi il numero di elementi per vettore SIMD per le operazioni FMA non è ‘ t migliorato.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *