Kommandoprosessorer på GPUer, og hvordan de påvirker ytelsen

A GPU er faktisk en ekstremt kompleks prosessor, et heterogent system som består av flere forskjellige typer enheter som må koordineres for å gi et sammenhengende resultat. I denne artikkelen skal vi beskrive kommandoprosessorene, den delen av GPUen som har ansvaret for denne oppgaven.

I hver GPU er det alltid en sentral del som, uavhengig av arkitekturen og merkevaren vi snakker om, er vanlig i dem alle, det er kommandoprosessorene, enheten som har ansvaret for å automatisk administrere driften av dusinvis av forskjellige enheter som eksisterer. på en GPU.

Kommandoprosessorer på GPUer

Hva er en kommandoprosessor?

Kommandoprosessoren til en GPU er en mikrokontroller som har ansvaret for å lese skjermlisten generert av prosessor, for å gjøre det, gjør det at DMA-enheten tjener i selve GPU-en for å få tilgang til ikke VRAM, men hoveddelen RAM av systemet der dette er lagret. kommandoliste. Etter å ha funnet skjermlisten i RAM, kopieres den til det interne minnet til mikrokontrolleren.

Liste over kommandoer inneholder alle instruksjonene som de forskjellige enhetene til en GPU må utføre for å gjengi et bilde, enten i 2D eller 3D, men siden ankomsten av DirectX 11 til PC-en, har de såkalte Compute Shaders kommet, disse er skyggeprogrammer som ikke er tilknyttet den grafiske rørledningen, og som tillater bruk av GPU for å løse algoritmer der CPU er mindre effektiv.

I dag brukes ikke en GPU til å gjengi imponerende grafikk for videospill, den har mange andre bruksområder og brukes i flere forskjellige markeder, men utviklingen av grafikkort mot disse markedene har gått parallelt med utviklingen av kommandoprosessoren og dens muligheter.

Hva betyr asynkron databehandling?

ASYNC Compute

Først og fremst bør det avklares at Compute Shaders også brukes når det gjelder den grafiske rørledningen, spesielt i etterbehandling og forbehandling av bildet. For eksempel brukes de til å beregne belysning i forsinket gjengivelse. I disse tilfellene, fordi utførelsen av Compute Shaders avhenger av utførelsen av resten av den grafiske rørledningen, sier vi at den er synkronisert, men det er oppgaver som drar nytte av bruken av GPU, og som ikke er en del av gjengivelsen av scenen, derfor fungerer de asynkront.

Procesadores Comandos ASYNC Compute

For å kunne visualisere det bedre trenger vi bare å se to forskjellige situasjoner:

  • I den første lager vi brød, men vi oppdager at vi mangler mel og derfor ber vi noen om ikke å gå og hente det, dette betyr at vi ikke kan gjøre noe mens vi venter på at melet blir brakt til oss.
  • Den andre situasjonen kommer fra den første, fordi vi ikke kan lage brød, så vi bestemmer oss for å vaske oppvasken. Noe som vi kan gjøre når som helst, og som ikke har noe å gjøre med det.

Designerne av de forskjellige grafikkortene innså at i alle grafikkortene var det bobler i utførelsen der noen deler av GPUen til disse ikke gjorde noe i små perioder. Det er grunnen til at de for noen år siden bestemte seg for å implementere asynkron databehandling og samarbeide om utvikling av API-er som bruker disse, som DirectX 12 og Vulkan.

Hva er kommandolister?

Procesadores Comandos Tipos

I dag er CPUen selv ansvarlig for å lage de forskjellige kommandolistene, enten gjennom en enkelt kjerne eller flere kjerner for å lage dem parallelt. I videospill tildeles vanligvis en kjerne for å lage en liste over grafikk, som er mye mer kompleks enn de andre og vanligvis stammer fra en enkelt minnering. Listene over kommandoer for databehandling er mye enklere, de søker at skyggenhetene løser et bestemt problem og gir løsningen.

Når det gjelder lister over kommandoer for databehandling, består disse vanligvis av flere forskjellige lister, som kan løses samtidig med hverandre og med hensyn til skjermlisten. Årsaken til dette er at de er asynkrone og derfor ikke er avhengige av hverandre for å fungere, dette gjør dem helt uavhengige og gjør det mulig å utnytte deler av GPUen som ellers ville være bortkastet på grunn av inaktivitet.

Den andre typen kommandoer er de som er relatert til tilgang til systemets RAM eller VRAM, disse kommandoene utføres både i databehandling og grafikk. Når det gjelder grafikk, gjøres minneoperasjoner utelukkende og utelukkende i VRAM, mens dataene i databehandlingsmodus kan importeres eller eksporteres både i RAM og VRAM, siden GPU i noen tilfeller svarer på en beregningsforespørsel fra CPUen.

Grafikk-APIer og kommandoprosessorer

DX11 vs DX12

Opprinnelig ble grafikklisten og beregningslisten administrert sammen, noe som var totalt ineffektivt. Det var ikke før fremkomsten av GPUer med separate kommandoprosessorer for grafikk og databehandling, med muligheten til å operere synkront og asynkront med hverandre, at de ikke klarte å håndtere flere forskjellige kommandolister parallelt.

Kommandolistene kalles også ringbuffere, årsaken er at hver kommandoprosessor tildeles en eller flere minneadresser i en liste, når den når minneadressen som den har tilgang til, starter minnet igjen. sløyfe igjen. Det er som om det går rundt i sirkler. Og det er derfor vi kaller det en ringbuffer eller Ring Bufffer på engelsk. Det er derfor vi har representert dem i form av små ringer i diagrammet ovenfor.

Typer kommandoprosessorer

AMD VRAM GPUer

Det er forskjellige typer kommandoprosessorer, hver enkelt har sin nytte og avhenger av hvilken type marked grafikkortet er rettet mot, det bruker en type kommandoprosessor:

  • Bare grafikk: det er i full bruk per i dag, siden det tidligere bare var en kommandoprosessor, og det var eksklusivt for grafikk.
  • Med en intelligent planlegger: en av tingene når det gjelder å administrere flere kommandolister parallelt, spesielt for databehandling, er at det må være systemets egen CPU som generelt koordinerer utførelsen av de forskjellige kommandolistene. En kommandoprosessor med en intelligent planlegger kan ordne kommandolisten i sanntid uten CPU-inngrep.
  • Beregn bare: brukes i vitenskapelig og høyytelses databehandling, kan ikke disse GPUene generere grafikk, da de ikke har en grafikkommandoprosessor eller er inaktive. Dette er tilfellet med CDNA-GPUer for AMD Instinct, forskjellige NVIDIA Tesla og forskjellige grafikkort for databehandling.
  • Virtualisert: brukes i datasentre, spesielt for cloud computing. De tillater å håndtere flere lister med grafiske kommandoer samtidig, som er uavhengige av hverandre. Hver liste tilsvarer en virtuell maskin som kjører et annet operativsystem for en annen bruker eksternt.

Interaksjon mellom kommandoprosessor og resten av GPU

Procesador de Comandos Unidad Shader

Kommandoprosessoren behandler ikke noe program, men er en flott arrangør som er ansvarlig for å distribuere oppgavene mellom de forskjellige enhetene som er tilgjengelige til enhver tid. Hvis vi snakker om grafikkommandoprosessoren, vil den ikke bare ha tilgang til skyggenhetene til GPUen, men også til de faste funksjonsenhetene. I databehandling har den derimot bare tilgang til skyggenhetene, og måten å betjene kommandoprosessorer for databehandling er forskjellig på.

Hvordan koordinerer de forskjellige enhetene med hverandre? Vel, hver faste funksjonsenhet og skyggelegging har en slags postkasse som kan sende og motta meldinger i to forskjellige retninger:

  • Når du eksporterer data, kan skyggeenheten eksportere til et lavere nivå av hurtigbufferen, til en fast funksjonsenhet, til en annen skyggeenhet eller til og med til RAM-en som er tilordnet den, det være seg en type RAM eller VRAM.
  • Når det gjelder import av data, er det kommandoprosessoren og senderenheten som er ansvarlig for å sende dataene til skyggeleggeren. Fra tid til annen er kommandoprosessoren den som fyller data- og instruksjonsbufferne til hver skyggenhet med oppgavene den må utføre, siden skyggenheter ikke har mulighet til å fange instruksjoner som en CPU.

Det sier seg selv at i listen over instruksjoner og data som kommandoprosessoren sender til hver enhet, er det en sluttkommando som forteller den hvor den skal eksportere disse dataene når den er ferdig med å beregne den. Hvilke enheter som mottar lister over data og / eller instruksjoner som skal behandles og hvor de sendes, er opp til kommandoprosessoren, som utfører oppgaven uten at vi trenger å bekymre oss.