Olen uusi tietojenkäsittelytieteessä ja mietin, tukeeko nykyaikainen arkkitehtuuri puolitarkkuutta samalla tavalla kuin yhden tai kahden tarkkuus. Luulin, että vuoden 2008 IEEE-754-standardin tarkistus otti käyttöön sekä nelinkertaiset että puolitarkkuudet.

kommentit

  • Tämä merkittiin MATLAB-tunnisteella, mutta MATLAB ei ’ t (vielä) tue 16-bittistä liukuluku.
  • Katso tämä pinonvaihtokysymys, jossa on yksityiskohtaisia tietoja aiheesta: stackoverflow.com/questions/49995594/…
  • Kannattaa selvittää, tarkoitatko vain prosessoreita vai molempia suorittimia ja grafiikkasuoritimia.
  • Kiitos kommentistasi Max Barraclough. En tiennyt, että voit muuttaa tarkkuutta vain grafiikkaprosessoriyksiköissä; Luulin, että se oli tehtävä molemmissa. Kommenttisi on erittäin hyödyllinen.

Vastaa

Intelin tuki IEEE float16 -tallennusmuodolle

Intel tukee IEEE-puolia tallennustyypinä prosessoreissa Ivy Bridgen (2013) jälkeen. Tallennustyyppi tarkoittaa, että voit saada muistin / välimuistin kapasiteetin / kaistanleveyden edun, mutta laskenta tapahtuu yhdellä tarkkuudella muunnettuaan IEEE: n puolitarkkuuteen.

Intelin tuki BFloat16: lle

Intel on ilmoittanut BF16: n tuesta Cooperissa Lake and Sapphire Rapids.

Työskentelen Intelissä. Viittaan virallisiin lähteisiin enkä kommentoi huhuja jne.

On hyvä olla utelias IEEE FP16: n ja BF16: n suhteellisista eduista. Tätä aihetta on analysoitu paljon, esim. https://nhigham.com/2018/12/03/half-precision-arithmetic-fp16-versus-bfloat16/ .

Muu kuin Intel-laitteistotuki

Seuraava on tietoja muista prosessoreista. Tarkista tarvittaessa toimittajilta.

http://on-demand.gputechconf.com/gtc/2017/presentation/s7676-piotr-luszcek-half-precision-bencharking-for-hpc.pdf luetellaan seuraava laitetuki:

  • AMD – MI5, MI8, MI25
  • VARSI – NEON VFP FP16 versiossa V8.2-A
  • NVIDIA – Pascal ja Volta

NVIDIA Ampere tukee myös FP16-tukea ( https://devblogs.nvidia.com/nvidia-ampere-architecture-in-depth/ ).

Kommentit

  • Tämän vastauksen ensimmäinen osa on hieman harhaanjohtava. Vaikka Ivy Bridge toi todellakin tuen F16C: lle, ja se tarkoittaa teknisesti, että puolitarkkoja kellukkeita ” tuetaan ”, ainoat ohjeet tarjotaan ne, jotka muunnetaan puolitarkka-uimureiksi ja niistä pois. Niille ei voida tehdä mitään toimintoja, joten se tuskin täyttää kysymyksen vaatimusta: ” Mietin, tukeeko nykyaikainen arkkitehtuuri puolitarkkuutta samalla tavalla kuin yhden tai kaksinkertainen tarkkuus on. ” Se on vain tallennusmuoto. ’ käydään kauppaa ALU-muunnosjaksoilla muistin kaistanleveyden / jalanjäljen osalta.
  • Sanon kirjaimellisesti, että se on tallennustyyppi, kaikki säästöt tulevat kapeammista tiedoista ja tehdään yhdellä tarkkuudella. Se ei ole harhaanjohtava. Sanoin, mikä tuki oli läsnä, mikä on puolet mahdollisesta tuesta.
  • Kiitos kaikille. Pidin todellakin näistä kommenteista hyödyllisiä. Alkuperäinen syy kysymyksen esittämiseen johtui muiden kuuntelemisesta, jotka väittelivät tästä tarkasta asiasta.
  • @AsadMehasi: liittyy myös pinon ylivuotoon: Puolitarkkuus liukulukuinen aritmeettisuus Intel-siruilla – kyllä integroiduilla grafiikkasuorittimilla Skylake-ohjelmasta lähtien, mutta IA-ytimissä vain muunnettavaksi float -palveluun / ladattaessa. (Kunnes BFloat tukee tulevaa HW: tä)

Vastaa

Mielestäni ei kovin tasaisesti. Alhaisen tarkkuuden aritmeettinen näyttää olevan saanut jonkin verran pitoa koneoppimisessa, mutta on olemassa erilaisia määritelmiä sille, mitä ihmiset tarkoittavat matalalla tarkkuudella. Siellä on IEEE-754-puolikas (10-bittinen mantissa, 5-bittinen eksponentti, 1-bittinen merkki), mutta myös bfloat16 (7-bittinen mantissa, 8-bittinen eksponentti, 1-bittinen merkki), joka suosii dynaamista aluetta tarkkuuden yli, ja useita muita formaatteja (NVidian 19-bittinen TensorFloat, AMD: n fp24, ehkä enemmän?). Suurin osa näistä tavaroista toimii erikoiskäyttöisillä GPGPU-tyyppisillä laitteilla.

Sitä vastoin floatilla ja doubleilla on yleisesti sovittu merkitys IEEE-754-yhteensopivana, 32-bittisenä (23/8/1) ja 64-bittisenä (52/11/1) esityksenä.

kommentit

  • Vaikka ehdottomasti epätyypillinen, optinen laskenta käyttää tehokkaasti puolta – tarkat (tai vähemmän) liukuluvut.

Vastaus

Hyväksytty vastaus antaa yleiskatsauksen. Lisän muutamia lisätietoja NVIDIA-suorittimien tuesta. Tässä kuvattu tuki on 16-bittinen, IEEE 754 -yhteensopiva, liukulukuinen aritmeettinen tuki, mukaan lukien lisäys, kerro, kerro, lisää ja muunnokset muihin muotoihin. .

Maxwell (noin 2015)

Aikaisin IEEE 754 FP16 (”binary16” tai ”half precision”) -tuki tuli cc (compute capability) 5.3 -laitteissa, jotka olivat Maxwellin sukupolvessa, mutta tämä laskentatoiminto toteutettiin vain Tegra TX1 -prosessori (SoC, esim. Jetson).

Pascal (noin 2016)

Pascal perheenjäsenillä on joko ”täysi osuus” (cc 6.0, 6.2 ) tai ”matala nopeus” (cc 6.1) FP16-suoritusteho. cc6.2 oli jälleen Tegra-perheen tuote, TX2. cc 6.0 ja 6.1 löytyivät useista prosessoreista useissa tuoteperheissä, kuten GeForce, Quadro ja Tesla. ”täysi nopeus” viittaa tässä nopeuteen, joka vastaa kaksinkertaista kyseisen prosessorin IEEE 754 FP32 (”binaarinen32” tai ”yksi tarkkuus”) -nopeuteen, kun operaatiot tehtiin käyttämällä half2-tietotyyppiä (kaksi puolta määrää käsiteltiin sama rekisteri ja ohje).

Volta, Turing (2017, 2018)

Volta ja Turing perheenjäsenet (cc 7.x) tukevat FP16: ta ” täysi nopeus ”, ja käytä lisäksi muotoa TensorCore -operaatioissa.

Ampere (toukokuu, 2020)

Äskettäin julkistettu Ampere-arkkitehtuuri A100 GPU tukee myös FP16: ta samalla tavalla kuin Volta ja Turing, ja tuo käyttöön lisäominaisuuden TF32-tietotyypille , joka on muoto, jossa mantissa on samankokoinen (bittimäärä) FP16-mantissana ja t eksponentti on samankokoinen kuin FP32-eksponentti. Bfloat16 -ominaisuudesta ilmoitettiin myös Amperessa.

Äskettäin julkistetun Ampere-arkkitehtuurin prosessorin lisäksi tuki ja läpimenot 16-bittisille liukulukuoperaatioille (ja muut toiminnot) laskentamahdollisuuksien (myös arkkitehtuurien) välillä on CUDA-ohjelmointioppaan taulukossa 3 . Suorituskyvyt ovat kelloa kohti, moniprosessoria kohti, joten ne on skaalattava GPU-tyypin ja teknisten ominaisuuksien mukaan. Nämä läpimenot eivät ole tarkoitettu TensorCore-operaatioille, ja huippulähtöjä voidaan yleensä käyttää vain prosessoitaessa puolella2 tietotyyppiä (kaksi puolta määrää pakattuna yhteen 32-bittiseen sanaan).

Vastaa

Voit selvittää, tukeeko laitteistosi puolitarkkuutta:

$ 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 ohje on dokumentoitu täällä .

Kommentit

  • Huomaa, että C F16C: ssä tarkoittaa C muuntamista; se auttaa vain muistin kaistanleveyden / välimuistin alaosassa, ei SIMD ALU -suorituksessa. Sinun on muunnettava kelluvaksi matematiikan tekemistä varten, joten elementtien määrä SIMD-vektoria kohden FMA-operaatioille ei ole ’ t parantunut.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *