Heterogen systemarkitektur - Heterogeneous System Architecture
Heterogenous System Architecture ( HSA ) er et sæt af specifikationer på tværs af leverandører, der muliggør integration af centrale processorenheder og grafikprocessorer på den samme bus med delt hukommelse og opgaver . HSA udvikles af HSA Foundation , som inkluderer (blandt mange andre) AMD og ARM . Platformens erklærede mål er at reducere kommunikationslatens mellem CPU'er, GPU'er og andre computerenheder og gøre disse forskellige enheder mere kompatible fra en programmeringsperspektiv, hvilket aflaster programmøren for opgaven med at planlægge flytning af data mellem enheders usammenhængende minder (som skal gøres i øjeblikket med OpenCL eller CUDA ).
CUDA og OpenCL samt de fleste andre ret avancerede programmeringssprog kan bruge HSA til at øge deres udførelsesydelse. Heterogen computing bruges i vid udstrækning i system-on-chip- enheder såsom tablets , smartphones , andre mobile enheder og videospilkonsoller . HSA tillader programmer at bruge grafikprocessoren til flydende beregninger uden separat hukommelse eller planlægning.
Begrundelse
Begrundelsen bag HSA er at lette byrden for programmører, når de aflæser beregninger til GPU'en. Oprindeligt drevet udelukkende af AMD og kaldet FSA, blev ideen udvidet til at omfatte andre processorenheder end GPU'er, såsom andre producenters DSP'er .
Trin udført ved aflæsning af beregninger til GPU'en på et ikke-HSA-system
Moderne GPU'er er meget velegnede til at udføre enkelt instruktion, flere data (SIMD) og enkelt instruktion, flere tråde (SIMT), mens moderne CPU'er stadig er optimeret til forgrening. etc.
Oversigt
Oprindeligt introduceret af indlejrede systemer såsom Cell Broadband Engine , ved at dele systemhukommelse direkte mellem flere systemaktører gør heterogen computing mere mainstream. Heterogen computing i sig selv henviser til systemer, der indeholder flere processorenheder - centrale processorenheder (CPU'er), grafikbehandlingsenheder (GPU'er), digitale signalprocessorer (DSP'er) eller enhver form for applikationsspecifikke integrerede kredsløb (ASIC'er). Systemarkitekturen tillader enhver accelerator, for eksempel en grafikprocessor , at fungere på samme behandlingsniveau som systemets CPU.
Blandt de vigtigste funktioner definerer HSA et samlet virtuelt adresseområde til computerenheder: hvor GPU'er traditionelt har deres egen hukommelse, adskilt fra hovedhukommelsen (CPU), kræver HSA, at disse enheder deler sidetabeller, så enheder kan udveksle data ved at dele markører . Dette skal understøttes af brugerdefinerede hukommelsesstyringsenheder . For at gøre interoperabilitet mulig og også lette forskellige aspekter af programmering er HSA beregnet til at være ISA -agnostisk for både CPU'er og acceleratorer og understøtte programmeringssprog på højt niveau.
Indtil videre dækker HSA-specifikationerne:
HSA mellemliggende lag
HSAIL (Heterogenous System Architecture Intermediate Language), et virtuelt instruktions sæt til parallelle programmer
- svarer til LLVM Intermediate Representation and SPIR (bruges af OpenCL og Vulkan )
- færdiggjort til en specifik instruktion, der er indstillet af en JIT-kompilator
- træffe sene beslutninger om, hvilke kerner der skal køre en opgave
- eksplicit parallel
- understøtter undtagelser, virtuelle funktioner og andre funktioner på højt niveau
- debugging support
HSA-hukommelsesmodel
- kompatibel med C ++ 11 , OpenCL, Java og .NET hukommelsesmodeller
- afslappet konsistens
- designet til at understøtte både administrerede sprog (f.eks. Java) og ikke-administrerede sprog (f.eks. C )
- vil gøre det meget nemmere at udvikle tredjepartscompilere til en bred vifte af heterogene produkter programmeret i Fortran , C ++, C ++ AMP , Java, et al.
HSA-afsender og driftstid
- designet til at muliggøre heterogen opgavekø: en arbejdskø pr. kerne, fordeling af arbejde i køer, belastningsafbalancering ved at stjæle arbejde
- enhver kerne kan planlægge arbejde for enhver anden, inklusive sig selv
- betydelig reduktion af omkostningerne ved planlægningsarbejde for en kerne
Mobilenheder er et af HSA's applikationsområder, hvor det giver forbedret strømeffektivitet.
Blokdiagrammer
Illustrationerne nedenfor sammenligner CPU-GPU-koordinering under HSA versus under traditionelle arkitekturer.
Standardarkitektur med en diskret GPU knyttet til PCI Express- bussen. Nulkopiering mellem GPU og CPU er ikke mulig på grund af forskellige fysiske minder.
Software support
Nogle af de HSA-specifikke funktioner, der er implementeret i hardwaren, skal understøttes af operativsystemets kerne og specifikke enhedsdrivere. F.eks. Blev support til AMD Radeon og AMD FirePro- grafikkort og APU'er baseret på Graphics Core Next (GCN) fusioneret til version 3.19 af Linux-kernelainline , udgivet den 8. februar 2015. Programmer interagerer ikke direkte med amdkfd , men sæt deres job i kø ved hjælp af HSA-runtime. Denne allerførste implementering, kendt som amdkfd , fokuserer på "Kaveri" eller "Berlin" APU'er og fungerer sammen med den eksisterende Radeon-kernegrafikdriver.
Derudover understøtter amdkfd heterogen kø (HQ), som har til formål at forenkle fordelingen af beregningsjob mellem flere CPU'er og GPU'er fra programmørens perspektiv. Understøttelse af heterogen hukommelsesadministration ( HMM ), der kun passer til grafikhardware med version 2 af AMDs IOMMU , blev accepteret i Linux - kernelainlineversion 4.14.
Integreret support til HSA-platforme er blevet annonceret til "Sumatra" -udgivelsen af OpenJDK , der forventes i 2015.
AMD APP SDK er AMDs proprietære softwareudviklingssæt, der er målrettet mod parallel computing, tilgængelig til Microsoft Windows og Linux. Bolt er et C ++ skabelonbibliotek optimeret til heterogen computing.
GPUOpen forstår et par andre softwareværktøjer relateret til HSA. CodeXL version 2.0 inkluderer en HSA-profil.
Hardware support
AMD
Fra februar 2015 var det kun AMDs "Kaveri" A-serie APU'er (jf. "Kaveri" desktopprocessorer og "Kaveri" mobile processorer ) og Sonys PlayStation 4, der gav den integrerede GPU adgang til hukommelse via version 2 af AMDs IOMMU. Tidligere APU'er (Trinity og Richland) inkluderede version 2 IOMMU-funktionalitet, men kun til brug af en ekstern GPU forbundet via PCI Express.
Post-2015 Carrizo og Bristol Ridge APU'er inkluderer også version 2 IOMMU-funktionalitet til den integrerede GPU.
Nedenstående tabel viser funktioner af AMD 's APU'er (se også: Liste over AMD accelereret behandlingsenheder ).
| Kodenavn | Server | Grundlæggende | Toronto | |||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Micro | Kyoto | |||||||||||||||||||
| Desktop | Ydeevne | Renoir | Cezanne | |||||||||||||||||
| Mainstream | Llano | Treenighed | Richland | Kaveri | Kaveri Refresh (Godavari) | Carrizo | Bristol Ridge | Raven Ridge | Picasso | |||||||||||
| Indgang | ||||||||||||||||||||
| Grundlæggende | Kabini | |||||||||||||||||||
| Mobil | Ydeevne | Renoir | Cezanne | |||||||||||||||||
| Mainstream | Llano | Treenighed | Richland | Kaveri | Carrizo | Bristol Ridge | Raven Ridge | Picasso | ||||||||||||
| Indgang | Dalí | |||||||||||||||||||
| Grundlæggende | Desna, Ontario, Zacate | Kabini, Temash | Beema, Mullins | Carrizo-L | Stoney Ridge | |||||||||||||||
| Indlejret | Treenighed | Hvidhovedet havørn |
Merlin Falcon , Brown Falcon |
Stor hornugle | Gray Hawk | Ontario, Zacate | Kabini |
Steppe Eagle , kronet ørn , LX-familie |
Prairie Falcon | Stribet kestrel | ||||||||||
| Platform | Høj, standard og lav effekt | Lav og ultra-lav effekt | ||||||||||||||||||
| Udgivet | Aug 2011 | Okt 2012 | Juni 2013 | Januar 2014 | 2015 | Juni 2015 | Juni 2016 | Okt 2017 | Januar 2019 | Mar 2020 | Jan 2021 | Januar 2011 | Maj 2013 | Apr 2014 | Maj 2015 | Feb 2016 | Apr 2019 | |||
| CPU- mikroarkitektur | K10 | Rambuk | Steamroller | Gravemaskine | " Gravemaskine + " | Zen | Zen + | Zen 2 | Zen 3 | Bobcat | Jaguar | Puma | Puma + | " Gravemaskine + " | Zen | |||||
| ER EN | x86-64 | x86-64 | ||||||||||||||||||
| Stikkontakt | Desktop | High-end | Ikke relevant | Ikke relevant | ||||||||||||||||
| Mainstream | Ikke relevant | AM4 | ||||||||||||||||||
| Indgang | FM1 | FM2 | FM2 + | Ikke relevant | ||||||||||||||||
| Grundlæggende | Ikke relevant | Ikke relevant | AM1 | Ikke relevant | ||||||||||||||||
| Andet | FS1 | FS1 + , FP2 | FP3 | FP4 | FP5 | FP6 | FT1 | FT3 | FT3b | FP4 | FP5 | |||||||||
| PCI Express- version | 2.0 | 3.0 | 2.0 | 3.0 | ||||||||||||||||
| Fab. ( nm ) |
GF 32SHP ( HKMG SOI ) |
GF 28SHP (HKMG bulk) |
GF 14LPP ( FinFET bulk) |
GF 12LP (FinFET bulk) |
TSMC N7 (FinFET bulk) |
TSMC N40 (bulk) |
TSMC N28 (HKMG bulk) |
GF 28SHP (HKMG bulk) |
GF 14LPP ( FinFET bulk) |
|||||||||||
| Die område (mm 2 ) | 228 | 246 | 245 | 245 | 250 | 210 | 156 | 180 | 75 (+ 28 FCH ) | 107 | ? | 125 | 149 | |||||||
| Min TDP (W) | 35 | 17 | 12 | 10 | 4.5 | 4 | 3,95 | 10 | 6 | |||||||||||
| Maks. APU TDP (W) | 100 | 95 | 65 | 18 | 25 | |||||||||||||||
| Maks. Lager APU-basisur (GHz) | 3 | 3.8 | 4.1 | 4.1 | 3.7 | 3.8 | 3.6 | 3.7 | 3.8 | 4.0 | 1,75 | 2.2 | 2 | 2.2 | 3.2 | 3.3 | ||||
| Maks. APU'er pr. Node | 1 | 1 | ||||||||||||||||||
| Maks. CPU- kerner pr. APU | 4 | 8 | 2 | 4 | 2 | |||||||||||||||
| Maks. Tråde pr. CPU-kerne | 1 | 2 | 1 | 2 | ||||||||||||||||
| Heltalsstruktur | 3 + 3 | 2 + 2 | 4 + 2 | 4 + 2 + 1 | 4 + 2 + 1 | 1 + 1 + 1 + 1 | 2 + 2 | 4 + 2 | ||||||||||||
| i386, i486, i586, CMOV, NOPL, i686, PAE , NX bit , CMPXCHG16B, AMD-V , RVI , ABM og 64-bit LAHF / SAHF |
|
|
||||||||||||||||||
| IOMMU | Ikke relevant |
|
||||||||||||||||||
| BMI1 , AES-NI , CLMUL og F16C | Ikke relevant |
|
||||||||||||||||||
| MOVBE | Ikke relevant |
|
||||||||||||||||||
| AVIC , BMI2 og RDRAND | Ikke relevant |
|
||||||||||||||||||
| ADX , SHA , RDSEED , SMAP , SMEP , XSAVEC, XSAVES, XRSTORS, CLFLUSHOPT og CLZERO | Ikke relevant |
|
Ikke relevant |
|
||||||||||||||||
| WBNOINVD, CLWB, RDPID, RDPRU og MCOMMIT | Ikke relevant |
|
Ikke relevant | |||||||||||||||||
| FPU'er pr. Kerne | 1 | 0,5 | 1 | 1 | 0,5 | 1 | ||||||||||||||
| Rør pr. FPU | 2 | 2 | ||||||||||||||||||
| FPU rørbredde | 128-bit | 256-bit | 80-bit | 128-bit | ||||||||||||||||
| CPU- instruktion indstillet SIMD- niveau | SSE4a | AVX | AVX2 | SSSE3 | AVX | AVX2 | ||||||||||||||
| 3DNow! | 3DNow! + | Ikke relevant | Ikke relevant | |||||||||||||||||
| FORETJENING / FORETJENING |
|
|
||||||||||||||||||
| FMA4 , LWP , TBM og XOP | Ikke relevant | Ikke relevant | Ikke relevant | Ikke relevant | ||||||||||||||||
| FMA3 |
|
|
||||||||||||||||||
| L1 -datacache pr. Kerne (KiB) | 64 | 16 | 32 | 32 | ||||||||||||||||
| L1 data cache associativitet (måder) | 2 | 4 | 8 | 8 | ||||||||||||||||
| L1 instruktions cacher pr. Kerne | 1 | 0,5 | 1 | 1 | 0,5 | 1 | ||||||||||||||
| Maks. APU total L1 instruktionscache (KiB) | 256 | 128 | 192 | 256 | 512 | 64 | 128 | 96 | 128 | |||||||||||
| L1 instruktion cache associativitet (måder) | 2 | 3 | 4 | 8 | 16 | 2 | 3 | 4 | ||||||||||||
| L2 cacher pr. Kerne | 1 | 0,5 | 1 | 1 | 0,5 | 1 | ||||||||||||||
| Maks. APU samlet L2-cache (MiB) | 4 | 2 | 4 | 1 | 2 | 1 | ||||||||||||||
| L2 cache associativitet (måder) | 16 | 8 | 16 | 8 | ||||||||||||||||
| APU samlet L3-cache (MiB) | Ikke relevant | 4 | 8 | 16 | Ikke relevant | 4 | ||||||||||||||
| APU L3 cache- associativitet (måder) | 16 | 16 | ||||||||||||||||||
| L3 cache-ordning | Offer | Ikke relevant | Offer | Offer | ||||||||||||||||
| Maks. Lager DRAM- understøttelse | DDR3-1866 | DDR3-2133 | DDR3-2133 , DDR4-2400 | DDR4-2400 | DDR4-2933 | DDR4-3200 , LPDDR4-4266 | DDR3L-1333 | DDR3L-1600 | DDR3L-1866 | DDR3-1866 , DDR4-2400 | DDR4-2400 | |||||||||
| Maks. DRAM- kanaler pr. APU | 2 | 1 | 2 | |||||||||||||||||
| Maks. Lager DRAM- båndbredde (GB / s) pr. APU | 29,866 | 34.132 | 38.400 | 46,932 | 68,256 | ? | 10,666 | 12.800 | 14.933 | 19.200 | 38.400 | |||||||||
| GPU- mikroarkitektur | TeraScale 2 (VLIW5) | TeraScale 3 (VLIW4) | GCN 2. gen | GCN 3. gen | GCN 5. gen | TeraScale 2 (VLIW5) | GCN 2. gen | GCN 3. gen | GCN 5. gen | |||||||||||
| GPU instruktions sæt | TeraScale instruktions sæt | GCN instruktionssæt | TeraScale instruktions sæt | GCN instruktionssæt | ||||||||||||||||
| Maks. Lager GPU-basisur (MHz) | 600 | 800 | 844 | 866 | 1108 | 1250 | 1400 | 2100 | 2100 | 538 | 600 | ? | 847 | 900 | 1200 | |||||
| Maks. Lager GPU-base GFLOPS | 480 | 614.4 | 648.1 | 886,7 | 1134,5 | 1760 | 1971.2 | 2150.4 | ? | 86 | ? | ? | ? | 345,6 | 460,8 | |||||
| 3D-motor | Op til 400: 20: 8 | Op til 384: 24: 6 | Op til 512: 32: 8 | Op til 704: 44: 16 | Op til 512: 32: 8 | 80: 8: 4 | 128: 8: 4 | Op til 192:?:? | Op til 192:?:? | |||||||||||
| IOMMUv1 | IOMMUv2 | IOMMUv1 | ? | IOMMUv2 | ||||||||||||||||
| Video dekoder | UVD 3.0 | UVD 4.2 | UVD 6.0 | VCN 1.0 | VCN 2.0 | UVD 3.0 | UVD 4.0 | UVD 4.2 | UVD 6.0 | UVD 6.3 | VCN 1.0 | |||||||||
| Videokoder | Ikke relevant | VCE 1.0 | VCE 2.0 | VCE 3.1 | Ikke relevant | VCE 2.0 | VCE 3.1 | |||||||||||||
| AMD Fluid Motion |
|
|
|
|
|
|
||||||||||||||
| GPU strømbesparelse | PowerPlay | PowerTune | PowerPlay | PowerTune | ||||||||||||||||
| TrueAudio | Ikke relevant |
|
Ikke relevant |
|
||||||||||||||||
| FreeSync | 1 2 |
1 2 |
||||||||||||||||||
| HDCP | ? | 1.4 | 1.4 2.2 |
? | 1.4 | 1.4 2.2 |
||||||||||||||
| PlayReady | Ikke relevant | 3.0 endnu ikke | Ikke relevant | 3.0 endnu ikke | ||||||||||||||||
| Understøttede skærme | 2–3 | 2–4 | 3 | 3 (desktop) 4 (mobil, integreret) |
4 | 2 | 3 | 4 | ||||||||||||
/drm/radeon |
Ikke relevant | Ikke relevant | ||||||||||||||||||
/drm/amdgpu |
Ikke relevant |
|
|
Ikke relevant |
|
|||||||||||||||
ARM
ARMs Bifrost mikroarkitektur, som implementeret i Mali-G71, er fuldt ud kompatibel med HSA 1.1 hardwarespecifikationer. Fra juni 2016 har ARM ikke annonceret softwaresupport, der bruger denne hardwarefunktion.
Se også
- Generel beregning på grafikbehandlingsenheder (GPGPU)
- Ikke-ensartet hukommelsesadgang (NUMA)
- OpenMP
- Delt hukommelse
- Nul-kopi
Referencer
eksterne links
- HSA Heterogenous System Architecture Overview på YouTube af Vinod Tipparaju på SC13 i november 2013
- HSA og softwareøkosystemet
- 2012 - HSA af Michael Houston