π 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.