NVIDIA gør CUDA-kode 300 gange hurtigere med ny optimeringsguide
Nye metoder til hukommelseshåndtering og CUB-biblioteker reducerer kørselstiden fra 6,8 sekunder til 23 millisekunder.
Læs i dit tempo
Kort
NVIDIA har optimeret deres CUDA-software (værktøj til grafikkort), så beregninger nu kører markant hurtigere. Det betyder, at opgaver, der før tog sekunder, nu kan løses på få millisekunder. Nu kan udviklere bruge nye værktøjer, der både øger hastigheden og fjerner programmeringsfejl.
Begynder
NVIDIA har fundet måder at gøre deres CUDA (Compute Unified Device Architecture) meget hurtigere. CUDA er et system, der lader computeren bruge grafikchippen til tunge beregninger. Med nye metoder blev en opgave, der tog 6,8 sekunder, bragt ned på 23 millisekunder. Det er 300 gange hurtigere. En stor del af dette skyldes CUB-primitiver, som er færdiglavede »byggesten« af kode. Ved at udskifte håndskrevne kernels—altså de specifikke instruktioner til chippen—med disse biblioteker, blev beregningerne per billede 2.717 gange hurtigere. Tiden faldt fra 2,1 sekunder til 773 mikrosekunder.
Der er også sket forbedringer i CCCL (CUDA C++ Core Libraries), som styrer datastrømmen. Ved at bruge en slags fælleslager til midlertidige data, kaldet pooled buffers, blev den samlede pipeline—selve rækkefølgen af opgaver—2,6 gange hurtigere. Samtidig blev overførsler fra computerens hovedprocessor til grafikchippen 10 gange hurtigere. Det lykkedes ved at bruge »pinned memory«, som fungerer som en hurtig adgangsplads, hvor data ligger låst og klar til brug.
For at nå den endelige tid på 23 millisekunder brugte man OpenMP (Open Multi-Processing). Det er en teknik til parallelisering, hvor man løser mange opgaver samtidigt i stedet for én efter én. Hver arbejdsstreng fik sin egen »stream«, eller databane. Ved at bruge asynkron kopiering kan chippen flytte data og udføre beregninger på samme tid. Det svarer til at dække bordet, mens maden stadig er i ovnen.
Det nye interface i CCCL hjælper desuden med at undgå fejl. Det skelner nu skarpt mellem globale koordinater og koordinater på blok-niveau. Det er lidt som at kende forskel på en husadresse i en by og et specifikt rumnummer i en bygning. Det stopper fejl i den delte hukommelse, som man tidligere skulle finde ved hjælp af et værktøj kaldet Compute Sanitizer.
Vil du have, at jeg uddyber analogien om parallelisering, så det bliver endnu tydeligere?

300 gange hurtigere kørsel opnås med NVIDIAs nyeste optimeringsmetoder til CUDA. Ved at kombinere forskellige værktøjer blev en kørselstid på 6,8 sekunder bragt ned på 23 millisekunder.
2.717 gange hurtigere bliver beregningerne per billede, når man bruger CUB-primitiver på blok- og enhedsniveau. Udskiftning af håndskrevne kernels med disse biblioteker reducerede tiden fra 2,1 sekunder til 773 mikrosekunder.
2,6 gange hurtigere bliver den samlede pipeline-tid med pooled `cuda::device_buffer` containers i CCCL. Samtidig øges hastigheden på overførsler fra host til device med 10 gange, hvis data allokeres i pinned memory i `cuda::host_buffer`.
23 millisekunder er den endelige kørselstid efter parallelisering med OpenMP. Ved at tildele hver OpenMP-tråd sin egen `cuda::stream` og bruge asynkron `cuda::copy_bytes` kan kernels og overførsler køre samtidigt.
Det nye CCCL-API fjerner indekseringsfejl. Den nye model skelner mellem globale koordinater og koordinater på blok-niveau, hvilket stopper fejl i shared-memory, som ellers findes med Compute Sanitizer.
Kilder
- The Modern CUDA Toolbox in Practice: A Step-by-Step Optimization Walkthrough developer.nvidia.com
Produktionshistorie
- Radar Signal ? af 100 · spredning 1 kilder
- Skrevet Model: mimo-v2.5-free · temperatur 0.4
- Overskrift 5 kandidater, valgt af chat.dk
- Vedtagelse ainews-auto-v3 · score 0.4411