Beräkningskärna

Inom databehandling är en beräkningskärna en rutin som är kompilerad för acceleratorer med hög genomströmning (såsom grafikprocessorer (GPU), digitala signalprocessorer (DSP) eller fältprogrammerbara grindmatriser (FPGA)), separat från men används av ett huvudprogram ( körs vanligtvis på en central bearbetningsenhet ). De kallas ibland compute shaders , som delar exekveringsenheter med vertex shaders och pixel shaders på GPU:er, men är inte begränsade till exekvering på en klass av enhet, eller grafik API:er .

Beskrivning

Beräkningskärnor motsvarar ungefär inre loopar vid implementering av algoritmer på traditionella språk (förutom att det inte finns någon underförstådd sekventiell operation), eller till kod som skickas till interna iteratorer .

De kan specificeras av ett separat programmeringsspråk som " OpenCL C " (hanteras av OpenCL API), som "compute shaders " skrivna i ett skuggspråk (hanteras av ett grafik-API som OpenGL ), eller inbäddade direkt i applikationskoden skrivet på ett språk på hög nivå , som i fallet med C++AMP .

Vektor bearbetning

Detta programmeringsparadigm mappar väl till vektorprocessorer : det finns ett antagande att varje anrop av en kärna inom en batch är oberoende, vilket möjliggör parallell exekvering av data. Emellertid atomoperationer ibland användas för synkronisering mellan element (för ömsesidigt beroende arbete), i vissa scenarier. Individuella anrop ges index (i 1 eller flera dimensioner) från vilka godtycklig adressering av buffertdata kan utföras (inklusive spridningsinsamlingsoperationer ), så länge som det icke-överlappande antagandet respekteras.

Vulkan API

Vulkan API tillhandahåller den mellanliggande SPIR-V- representationen för att beskriva både Graphical Shaders och Compute Kernels, på ett språkoberoende och maskinoberoende sätt. Avsikten är att underlätta språkutvecklingen och ge en mer naturlig förmåga att utnyttja GPU-beräkningskapaciteten, i linje med hårdvaruutvecklingar som Unified Memory Architecture och Heterogeneous System Architecture . Detta möjliggör ett närmare samarbete mellan en CPU och GPU.

Se även