πŸ“Œ GPU

GPU (Graphics Processing Unit, графичСский процСссор) β€” спСциализированный Π²Ρ‹ΡΠΎΠΊΠΎΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΉ процСссор для выполнСния графичСских, Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡. ΠžΡ‚Π»ΠΈΡ‡Π°Π΅Ρ‚ΡΡ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΎΠΉ, Π·Π°Ρ‚ΠΎΡ‡Π΅Π½Π½ΠΎΠΉ ΠΏΠΎΠ΄ массовыС ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ вычислСния, Ρ€Π°Π±ΠΎΡ‚Ρƒ с пиксСлями, Π²Π΅Ρ€ΡˆΠΈΠ½Π°ΠΌΠΈ, ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Π°ΠΌΠΈ, массивами Π΄Π°Π½Π½Ρ‹Ρ…, ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ CPU. Π’ соврСмСнных Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… систСмах ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ для 3D-Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ, Ρ‚Π°ΠΊ ΠΈ для GPGPU-Π·Π°Π΄Π°Ρ‡ (CUDA, OpenCL, Vulkan compute).


🧠 Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

АрхитСктура GPU

  • ΠœΠ½ΠΎΠ³ΠΎΡΠ΄Π΅Ρ€Π½ΠΎΡΡ‚ΡŒ: тысячи (Π΄ΠΎ дСсятков тысяч) Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ALU/FP-кластСров (CUDA core, Stream processor, SM, EU).
  • ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ Π΄Π²ΠΈΠΆΠΊΠΈ: ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΡ€ΠΎΡ†Π΅ΡΡΠΎΡ€Ρ‹ с ΠΎΠ±Ρ‰ΠΈΠΌ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠΎΠΌ (Scheduler), ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρ‹ памяти, тСкстурныС Π±Π»ΠΎΠΊΠΈ, растСризаторы, Π±Π»ΠΎΠΊΠΈ Π³Π΅ΠΎΠΌΠ΅Ρ‚Ρ€ΠΈΠΈ ΠΈ Π²Ρ‹Π²ΠΎΠ΄ ΠΊΠ°Π΄Ρ€ΠΎΠ².
  • ВстроСнныС SRAM-кСши: L1, L2, Register File, Shared Memory, Texture Cache, ΠΈΠ½ΠΎΠ³Π΄Π° L3.
  • ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ видСопамяти: Ρ€Π°Π±ΠΎΡ‚Π° с GDDR, HBM, DDR, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΊΠ°Π½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ доступа.
  • Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ контСкстами: ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ управлСния Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ, очСрСдями ΠΈ синхронизациСй.
  • Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти: VRAM (GPU-only), UMA (Unified Memory Architecture), NVLink, PCIe, DMA, BAR.

ВзаимодСйствиС с систСмой

  • CPU Ρ‡Π΅Ρ€Π΅Π· PCIe ΠΈ DMA ΠΈΠ»ΠΈ высокоскоростныС ΡˆΠΈΠ½Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‘Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹.
  • Π’ΠΈΠ΄Π΅ΠΎΠ΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρ‹ ΠΈ API (OpenGL, DirectX, Vulkan, CUDA, OpenCL) Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ Π² Command Processor GPU.
  • Command Processor Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅Ρ‚ Π·Π°Π΄Π°Ρ‡ΠΈ, отправляСт ΠΈΡ… Π½Π° графичСскиС ΠΈ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ кластСры.

ΠŸΠΎΠ΄ΡΠΈΡΡ‚Π΅ΠΌΡ‹ GPU:

  • Command Processor β€” Ρ€Π°Π·Π±ΠΎΡ€ ΠΈ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄.
  • Shader Cores β€” исполнСниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ (ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ², compute kernels).
  • Texture Units β€” Ρ€Π°Π±ΠΎΡ‚Π° с тСкстурами ΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠ΅ΠΉ.
  • ROP (Raster Operation Processors) β€” Π²Ρ‹Π²ΠΎΠ΄ ΠΈ смСшиваниС пиксСлСй, final frame.
  • Memory Controller β€” Ρ€Π°Π±ΠΎΡ‚Π° с Π²ΠΈΠ΄Π΅ΠΎΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, кСшами, аксСлСрация ΠΎΠ±ΠΌΠ΅Π½Π°.
  • Display Engine β€” Π²Ρ‹Π²ΠΎΠ΄ изобраТСния Π½Π° дисплСй.
  • Video Codec Blocks β€” Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ΅ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅/Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (NVDEC, NVENC, VCE, UVD).

Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Π°Ρ схСма GPU Π² систСмС (с пояснСниями)

flowchart TB
    CPU["CPU"]
    PCIe["PCIe"]
    GPU["GPU"]
    VRAM["VRAM (GDDR/HBM)"]
    Display["Display/Monitor"]

    CPU -->|Data, commands| PCIe
    PCIe -->|DMA, commands| GPU
    GPU -->|Frame/Video Out| Display
    GPU -->|VRAM bus| VRAM

    CommandProc["Command Processor"]
    Shader1["Shader Cluster #1"]
    ShaderN["Shader Cluster #N"]
    Tex["Texture Units"]
    ROP["ROP"]
    L2["Cache L2"]
    MC["Memory Controller"]

    GPU --> CommandProc
    CommandProc --> Shader1
    CommandProc --> ShaderN
    Shader1 --> Tex
    ShaderN --> Tex
    Tex --> ROP
    ROP --> L2
    L2 --> MC
    MC --> VRAM

Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Π°Ρ sequence-схСма для GPGPU

sequenceDiagram
    participant CPU
    participant GPU
    participant VRAM

    CPU->>GPU: ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π·Π°Π΄Π°Ρ‡ΠΈ (kernel), ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²
    CPU->>VRAM: ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…
    GPU->>VRAM: Π§Ρ‚Π΅Π½ΠΈΠ΅/запись Π΄Π°Π½Π½Ρ‹Ρ… (kernels, массивы)
    GPU->>CPU: ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°/сигнал Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ

βš™οΈ Π“Π΄Π΅ примСняСтся

  • ГрафичСскиС станции, ΠΈΠ³Ρ€ΠΎΠ²Ρ‹Π΅ ПК, сСрвСры, Data Center, HPC, AI accelerator, систСмах Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Embedded, automotive, FPGA с видСокластСрами.

  • ΠœΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Π΅ устройства (ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Π΅ GPU: Adreno, Mali, PowerVR, Apple GPU).

  • Π’ΠΈΠ΄Π΅ΠΎΠΊΠ°Ρ€Ρ‚Ρ‹ (PCIe-Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ), встроСнныС GPU (SoC, APU).

  • НС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для 3D-Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ, Π½ΠΎ ΠΈ для ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… вычислСний (Deep Learning, Scientific computing, Physics simulation).

  • Π’ΠΈΠ΄Π΅ΠΎΠ°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠ°, Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³, виртуализация (GPU Passthrough), VDI, стриминг, Π²ΠΈΠ΄Π΅ΠΎ-ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.


βœ… ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°

  • Высокая ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Π°Ρ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ β€” тысячи ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

  • Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ (ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Ρ‹, растСризаторы, ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ½ΠΎΠΆΠΈΡ‚Π΅Π»ΠΈ).

  • Высокая пропускная ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ VRAM (GDDR6, HBM2).

  • ΠœΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ (multi-GPU, NVLink, PCIe Gen5).

  • Аппаратная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π²ΠΈΠ΄Π΅ΠΎ, AI, графичСских API.

  • Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ для Deep Learning, Big Data, ML/AI, ΠΊΡ€ΠΈΠΏΡ‚ΠΎ- ΠΈ Ρ€Π΅Π½Π΄Π΅Ρ€-вычислСний.

  • ΠžΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° CPU ΠΈ ОБ.


❌ НСдостатки

  • Π‘Π»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ программирования ΠΈ Π΄Π΅Π±Π°Π³Π° (ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Ρ‹, ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ, синхронизация).

  • ВысокоС энСргопотрСблСниС ΠΈ Ρ‚Π΅ΠΏΠ»ΠΎΠ²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅.

  • ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΈΠΏ ΠΈ ΠΎΠ±ΡŠΡ‘ΠΌ памяти (VRAM β‰  RAM), Π½Π΅ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ для β€œΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ…β€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.

  • Π‘ΠΎΠ»ΡŒΡˆΠΈΠ΅ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ Π½Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… CPU↔GPU (PCIe bottleneck).

  • Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΊ Π°Ρ‚Π°ΠΊΠ°ΠΌ ΠΏΠΎ сторонним ΠΊΠ°Π½Π°Π»Π°ΠΌ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, уязвимости Ρ‡Π΅Ρ€Π΅Π· Π²ΠΈΠ΄Π΅ΠΎΠΏΠ°ΠΌΡΡ‚ΡŒ, DMA).

  • Π—Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΎΡ‚ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠ², ΠΏΡ€ΠΎΠΏΡ€ΠΈΠ΅Ρ‚Π°Ρ€Π½Ρ‹Ρ… спСцификаций (Nvidia, AMD, Intel).


πŸ”— БвязанныС Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ

CPU, PCIe, GDDR, HBM, SRAM, VRAM, AI accelerator, FPGA, OpenGL, Vulkan, CUDA, OpenCL, DirectX, SoC, Embedded, DMA, NUMA, Memory Bus, DisplayPort, HDMI, NVENC, NVDEC, Tensor Core, Stream processor, SM, APU


РСзюмС

GPU β€” Π²Ρ‹ΡΠΎΠΊΠΎΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ процСссор для Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ ΠΈ вычислСний, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ с тысячами кластСров, слоТной ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ ΠΈ ускоритСлями спСцзадач. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π²Π΅Π·Π΄Π΅, Π³Π΄Π΅ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Π° ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Π°Ρ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° (ΠΎΡ‚ 3D-Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ Π΄ΠΎ AI ΠΈ HPC). ΠžΡ‚Π»ΠΈΡ‡Π°Π΅Ρ‚ΡΡ собствСнной ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠ΅ΠΉ кСшСй, ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ VRAM, ΠΌΠΎΡ‰Π½Ρ‹ΠΌΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°ΠΌΠΈ памяти ΠΈ спСциализированными API. Π“Π»Π°Π²Π½Ρ‹Π΅ минусы: ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ, энСргопотрСблСниС, ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ ΠΈ ограничСния ΠΏΠΎ памяти.


ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π°

CUDA: ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅Π΅ суммированиС Π½Π° GPU

__global__ void sum_array(int *a, int *b, int *c, int n) {
    int idx = threadIdx.x + blockDim.x * blockIdx.x;
    if (idx < n)
        c[idx] = a[idx] + b[idx];
}
 
int main() {
    // Аллокация, ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, запуск ядра β€” ΠΎΠΏΡƒΡ‰Π΅Π½ΠΎ для краткости
    sum_array<<<grid, block>>>(a_dev, b_dev, c_dev, n);
}

OpenCL: слоТСниС массивов на GPU

__kernel void vec_add(__global int* a, __global int* b, __global int* c) {
    int id = get_global_id(0);
    c[id] = a[id] + b[id];
}

OpenGL GLSL: вычислСниС Ρ†Π²Π΅Ρ‚Π° пиксСля

#version 330 core
out vec4 FragColor;
in vec2 TexCoord;
uniform sampler2D tex;
 
void main() {
    FragColor = texture(tex, TexCoord) * 0.8 + vec4(0.2, 0.2, 0.2, 1.0);
}

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ GPU Π² Linux

lspci | grep VGA
glxinfo | grep "OpenGL renderer"
nvidia-smi

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊΠΈ: NVIDIA GPU Architecture Whitepaper, AMD Graphics Core Next, Intel Xe, Khronos OpenCL/OpenGL/Vulkan, ВикипСдия, osdev.org, habr.com, докумСнтация CUDA, спСцификации PCIe/GDDR/HBM.