源码:https://github.com/KhronosGroup/Vulkan-Samples/tree/main/samples/api/compute_nbody

使用两个通道和共享计算着色器内存来模拟 N 体粒子系统的计算着色器示例。

核心概念

N 体问题(N-body problem)是指模拟大量粒子之间的相互作用力(通常是引力)。在朴素实现中,每个粒子需要计算与其他所有粒子的交互,时间复杂度为 O(N^2)。本示例通过 GPU 计算着色器的并行能力和共享内存优化来高效处理这个问题。

实现要点

示例采用两遍(two-pass)计算策略:第一遍计算每个粒子受到的合力并更新速度,第二遍根据新速度更新位置。两遍之间使用 管线屏障 确保数据同步。

共享内存(shared memory)是该示例的关键优化手段。每个工作组将一批粒子数据从全局内存加载到共享内存中,组内所有线程可以快速访问这些数据,避免重复的全局内存读取,显著降低带宽消耗。

涉及的 Vulkan 概念

  • 计算管线(Compute Pipeline)的创建与调度
  • 共享内存在计算着色器中的使用(shared 关键字)
  • 存储缓冲区(Storage Buffer)的读写
  • 同步原语Pipeline Barriers 的使用
  • 计算与图形队列间的工作协调