1. CUDA Stream基础概念解析
在GPU并行计算领域,CUDA Stream(流)是一个核心概念。简单来说,流就是一系列按顺序执行的GPU操作序列,包括内核启动、内存拷贝等。理解流的本质对编写高性能CUDA程序至关重要。
1.1 为什么需要Stream?
现代GPU具有强大的并行计算能力,但如果没有合理调度,这些计算资源很容易被浪费。想象一个餐厅的后厨:
- 单流模式:就像只有一个厨师,所有订单必须按顺序处理
- 多流模式:如同拥有多个厨师,可以同时处理不同订单
通过使用多个流,我们可以实现:
- 内核执行与数据传输重叠(计算与通信重叠)
- 多个内核的并发执行
- 更精细的任务调度控制
1.2 Stream的基本特性
每个CUDA流都有以下关键特征:
- 顺序性:同一流中的操作严格按提交顺序执行
- 独立性:不同流的操作默认可以并行执行
- 隐式同步:某些操作会隐式同步流(如设备内存分配)
创建流的典型代码:
cuda复制cudaStream_t stream;
cudaStreamCreate(&stream); // 创建流
kernel<<<blocks, threads, 0, stream>>>(); // 在指定流中启动内核
cudaStreamDestroy(stream); // 销毁流
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Legacy Stream深度剖析
2.1 Legacy Stream的定义与背景
Legacy Stream(遗留流)特指CUDA 7.0之前默认流的行为模式。在早期CUDA版本中,默认流(即不指定或使用NULL/0作为流参数)具有特殊的同步特性。
关键时间节点:
- CUDA 7.0(2014年发布)引入Per-thread Default Stream
- 在此之前的所有版本使用Legacy Stream模式
2.2 Legacy Stream的同步机制
Legacy Stream最显著的特点是它的全局同步屏障行为:
- 输入同步:当操作被提交到Legacy Stream时,它会等待GPU上所有先前提交的操作(无论来自哪个流)完成
- 输出同步:任何其他流中的操作开始前,必须等待
