Box3D:用宽SIMD加速碰撞检测
SIMD for Collision

在 Box3D 中,我探索了如何利用宽 SIMD 技术优化碰撞检测性能。与传统的窄 SIMD 不同,宽 SIMD 能同时处理多个工作单元,比如在一次操作中解决四个接触点。对于复杂的凸包(如拥有 32 个顶点的 Boulder),SAT 算法的边边测试复杂度呈二次增长,成为性能瓶颈。通过引入 SIMD,我将边边测试从标量模式升级为并行处理,在 AMD 7950x 上实现了超过两倍的加速。虽然这对简单的 Box-Box 碰撞影响甚微,但在处理复杂几何体时效果显著。这一优化不仅提升了仿真速度,也为未来更复杂的物理场景奠定了基础。
对于简单的 12 条边,SIMD 带来的收益有限,但当每条凸包拥有 89 条边时,故事就完全改变了。
- grg0
作为一个 SIMD 新手,有一点我一开始没意识到:如果你的内存吞吐量未被充分利用,SIMD 也能让你提速,因为它能让 CPU 在每条指令中加载更多数据。这不仅仅是关于计算速度的提升,而后者通常是它被宣传的主要卖点。在 Linux 上使用 perf 让我受益匪浅,帮我建立了对现代 CPU 性能的直观理解。
- brcmthrowaway
不支持任何 ARM 向量指令……这太糟糕了