Kärnan i en GPU: Hur det fungerar på en grafik

En av förvirringarna som skapas av marknadsföringen av grafikkorttillverkare är när det gäller att prata om antalet kärnor som en GPU har, vi förväntar oss att de ljuger för att överdriva siffrorna. Men vad förstår vi kärnan i en GPU, kan vi jämföra dem med de hos a CPU och vilka skillnader finns det?

När du ska köpa den senaste grafikkortmodellen är det första du ser att de berättar om stora mängder kärnor eller processorer, men vad händer om vi säger att det är fel nomenklatur?

Kärnan i en GPU: hur det fungerar

Fällan som tillverkare gör är att till exempel anropa enkla ALU eller exekveringsenheter under namnet kärnor NVIDIA kallar dess ALU: er CUDA-kärnor som fungerar i 32-bitars flytpunkt, men om vi är strikta kan vi inte längre kalla dem för kärnor eller processorer. De uppfyller inte de grundläggande kraven för att övervägas på ett sådant sätt.

Så vad är en kärna eller processor i en GPU?

Ciclo Instruktion Unidad-kontroll

En kärna eller processor är vilken som helst integrerad krets eller del av den som tillsammans kan utföra en fullständig instruktionscykel, detta är att fånga instruktioner från ett minne, avkodning och exekvering av dem.

En ALU är bara en exekveringsenhet så den behöver en styrenhet för att vara en komplett kärna. Och vad anser vi vara en komplett kärna? Tja, vad NVIDIA kallar SM, Intel ringer Sub-Slice och AMD Beräkningsenhet.

Anledningen till detta är att det är i dessa enheter där hela instruktionscykeln äger rum, och inte i ALU: erna eller exekveringsenheterna, som bara ansvarar för en del av instruktionscykeln.

GPU: er kör inte program

NVIDIA GPU

Tänk på att grafikprocessorer inte kör program som vi känner dem, det här är en sekvens av instruktioner. Undantaget är skuggprogram som körs på vad som egentligen är GPU-kärnor.

Vad skuggprogram gör är att manipulera datamängder eller grafiska primitiv i de olika stadierna. Men på hårdvarufunktionalitetsnivå presenteras dessa i form av kärnor.

Kärnor, som inte ska förväxlas med operativsystem, är fristående data + instruktionsuppsättningar, som också kallas trådar i samband med en GPU.

Hur skiljer sig en GPU-kärna från en CPU-kärna?

CPU-processor

Huvudskillnaden är att CPU: er är främst utformade för parallellitet på instruktionsnivå Medan GPU: er är specialiserade för trådnivåparallellism.

Instruktionsnivåparallellen är avsedd att minska instruktionstiden för ett program genom att utföra flera instruktioner av samma samtidigt. Kärnorna baserade på trådnivåparallellism tar flera program samtidigt och kör dem parallellt ,

Samtida processorer kombinerar ILP och TLP i sina arkitekturer, medan GPU: er förblir rent TLP utan ILP för att förenkla styrenheten och kunna placera så många kärnor som möjligt.

Kör på en GPU kontra att köra på en CPU

Chip por dentro

För det mesta, när en tråd når GPU-kärnans ALU, innehåller den instruktionen och data direkt, men det finns tillfällen när data måste sökas i cacheminnet och i minnet, för att undvika förseningar i körningen av GPU-kärnplaneraren vad det gör är det som kallas Round-Robin och skickar den tråden för att köra efteråt.

I en CPU kan detta inte göras, anledningen till detta är att trådarna är mycket komplexa instruktioner och med ett stort beroende mellan dem, medan det inte finns något problem för en GPU, eftersom körtrådarna är extremt små eftersom de är fristående i "kärnor" många gånger med en enda instruktionsvarighet.

I verkligheten, vad GPU: er gör är att samla en uppsättning kärnor i det som kallas en våg, tilldela varje våg till en ALU för GPU, dessa körs i kaskad och i ordning. Varje kärna har en gräns för trådar eller kärnor, som kommer att hålla den upptagen ett tag tills den behöver en ny lista, på detta sätt undviker att det stora antalet kärnor ständigt gör förfrågningar till minne.