GPGPU

General Purpose GPU:把计算搬GPU

 GPGPU是利用GPU并行能力做通用计算,常通过纹理存储状态并用shader迭代计算,适用于粒子、流体和大规模并行模拟。

GPGPU = General Purpose GPU
用GPU做通用计算,而不仅仅画图。

本质

原来 GPU 只干:

渲染图形

比如:

  • 画三角形
  • 着色
  • 光照

后来发现 GPU 特别擅长:

大规模并行计算

于是:

拿它做:

非图形计算

这就是 GPGPU。


为什么 GPU 适合计算

CPU:

少量强核心

擅长复杂逻辑。


GPU:

海量简单核心

擅长并行。


比如:

100万个粒子更新。

CPU循环:

for(...)

慢。


GPU:

并行同时算

很快。


思想

不是:

GPU帮CPU一点

而是:

把计算任务搬到GPU

在 WebGL/Three 常见实现

你熟悉的通常是:

Texture作为数据

这是经典 trick。


用纹理存数据

不是存颜色:

存:

位置
速度
状态

例如:

RGBA

存粒子数据。


Fragment Shader做计算

不是渲染颜色:

而是在 shader 算:

下一帧位置

例如:

position += velocity * dt

 结果写到:

RenderTarget纹理

再下一帧读回来。

Ping-Pong

双buffer:

A读 B写

下一帧

B读 A写

乒乓。

经典 GPGPU。


流程

数据放纹理

↓

shader计算

↓

写新纹理

↓

下一轮继续

本质像 GPU版状态机。


常见应用

1 粒子系统

超经典。

百万粒子:

位置更新放GPU

2 流体模拟

烟雾

流场


3 布料模拟

约束计算。


4 Boids群体行为

鱼群。

鸟群。

很经典 GPGPU demo。


5 高度场 / 波浪

大量顶点并行更新。


Three.js

很经典:

GPUComputationRenderer

专门做这个。


你可能见过:

GPUComputationRenderer(...)

就是它。


为什么叫“伪计算”

在 WebGL1/2 时代:

本来没有 compute shader。

只能:

借 fragment shader 做计算

很巧妙。


WebGPU更正规

WebGPU

有:

Compute Shader

原生 GPGPU。

更正统。


和普通 Shader区别

普通 shader:

为了画图

GPGPU shader:

借GPU算数据

 

 

 

 

 

posted @ 2026-04-28 18:31  SimoonJia  阅读(16)  评论(0)    收藏  举报