GPU 和加速器

GPU 和加速器

2024 南京大学《操作系统:设计与实现》
GPU 和加速器

一个有趣的事实

计算机系统里充满了 “CPU”

  • CPU: 大核 + 小核 + 超小核
  • DMA: 执行 memcpy() 的 CPU
  • 打印机:解析执行 PCL/PostScript 的 CPU
  • 网卡:分拣以太网 packet (frame) 的 CPU
    • 它们都受到 CPU 的统一调配

有需求,就会有更多的 “CPU”!

  • 人类的探索精神是无止境的
  • 当然,是为了钱
2024 南京大学《操作系统:设计与实现》
GPU 和加速器

人类的本质需求:娱乐

NES: 售出超过 60,000,000 台 (PS2, NDS 都破 1.5 亿了)

  • 在 MOS 6502 @ 1.79Mhz (IPC = 0.43) 上实现 60 FPS
    • 每一帧必须在 ~10K 条指令内完成
    • 但屏幕共有 256 x 240 = 61K 像素 (256 色)……

center

2024 南京大学《操作系统:设计与实现》
GPU 和加速器

一个简单的答案:加个 CPU

类比:DMA 是个 “降级” 的 CPU

  • 只能执行 (半) 固定程序;但是电路更简单执行速度更快内置并行

在系统里加一个专门画图的 CPU?

for (int x = 0; x < W; x++)
  for (int y = 0; y <= H; y++)
    for (int i = 0; i < n; i++)
      if (intersects(sprites[i], x, y)) {
        fb[x][y] = sprites[i].pixel(x, y);
      }
  • 不再需要那么多通用寄存器,循环可以直接用计数器实现
2024 南京大学《操作系统:设计与实现》
GPU 和加速器

NES Picture Processing Unit (PPU)

Sprite Spec: 位置 + 1-bit Priority; 1-bit Fip (H/V)

center

2024 南京大学《操作系统:设计与实现》
GPU 和加速器

榨干 PPU 的每一点性能

前景 + 背景 = 给定机能下的极限图形效果

center

2024 南京大学《操作系统:设计与实现》
GPU 和加速器

以假乱真的贴图 3D

GameBoy Advance

  • 4 层背景; 128 个剪贴 objects; 32 个 affine objects
    • CPU 给出描述;GPU 绘制 (执行 “一个程序” 的 CPU)

center

(V-Rally; Game Boy Advance, 2002)
2024 南京大学《操作系统:设计与实现》
GPU 和加速器

真正的 3D 图形

构建一个三角形的世界

Tomb Raider (1996)
2024 南京大学《操作系统:设计与实现》
GPU 和加速器

走向 “更真实” 的 3D

center

全靠 “PS”

  • 虚假的真实感:Screen Space Ambient Occlusion
  • 真实的真实感:Ray Tracing
2024 南京大学《操作系统:设计与实现》
GPU 和加速器

Gefore 256 DDR (1999)

支持硬件 Transform & Lighting (更通用的计算)

center

2024 南京大学《操作系统:设计与实现》
GPU 和加速器

走向异构计算

让更 “合适” 的 CPU 做他们更擅长的事

  • “固定” 的循环:不止是游戏图形
for (int x = 0; x < W; x++)
    for (int y = 0; y <= H; y++)
        for (int i = 0; i < n; i++)
            if (intersects(sprites[i], x, y)) {
                fb[x][y] = sprites[i].pixel(x, y);
            }
  • mandelbrot.c (科学计算)
  • gpt.c (机器学习)
    • 神似,但更 “复杂” (需要更通用的计算)
  • ……
2024 南京大学《操作系统:设计与实现》
GPU 和加速器

现代 GPU: 一个通用计算设备

类比:打印机

  • 执行 PCL 代码 v.s. 执行 PTX 代码

一个完整的众核多处理器系统

  • 拥有自己的内存 (显存)
  • 可以把一段显存作为 FrameBuffer
    • Vulkan: “Swap Chain
    • 显示控制器可以把一段像素 “直接输出” 到接口 (VGA, DisplayPort, HDMI) 上 (可以理解成显卡上的一个 DMA)
      • 正确的时序输出正确的信号 = 显示器能正确显示
2024 南京大学《操作系统:设计与实现》