流编程模型
流编程模型(Stream Programming Model)是一种将数据视为连续流动的"流"、计算视为并行执行的"内核"的编程范式。它是[[Brook]]和[[CUDA]]的核心思想,使得GPU能够高效处理大规模并行任务。
核心概念
- streams(数据流):一组需要相同计算的数据记录,如粒子位置、像素值、矩阵元素。
- kernels(内核函数):对数据流中每个元素执行的并行计算函数。
- reductions(归约操作):将数据流聚合为单一结果的操作。
历史渊源
流编程模型的思想源于[[Ian Buck]]在[[WireGL]]项目中的集群经验——数据像河流般流动,计算并行爆发。同时,[[Merrimac超级计算机项目]]的纯流架构研究也深刻影响了这一模型的设计。
技术意义
- 抽象硬件复杂性:将GPU的复杂硬件细节(纹理大小、输出通道、内存布局)抽象化,由编译器和运行时自动处理。
- 降低编程门槛:普通程序员无需掌握图形学知识即可利用GPU进行并行计算。
- 可扩展性:流模型天然适合大规模并行处理,能够充分利用GPU的数千个核心。
对CUDA的影响
[[CUDA]]完整继承了Brook的流编程模型,并做了革命性升级:统一内存架构、线程块、共享内存、原子操作等。流编程模型因此从学术原型演变为工业标准,成为AI时代最重要的编程范式之一。