Stream¶
- class torch.Stream(device, *, priority)¶
一个按照先进先出 (FIFO) 顺序异步执行相应任务的有序队列。它可以控制或同步其他 Stream 的执行,或者阻塞当前主机线程以确保任务的正确顺序。它支持 with 语句作为上下文管理器,以确保 with 代码块中的操作符在该 Stream 上运行。
有关适用于所有设备的精确语义的详细信息,请参阅 CUDA 语义 的深入描述。
- 参数
device (
torch.device
, 可选) – Stream 所需的设备。如果未提供,将使用当前的 加速器 类型。priority (int, 可选) – Stream 的优先级,应为 0 或负数,其中负数表示更高的优先级。默认情况下,Stream 的优先级为 0。
- 返回
一个 torch.Stream 对象。
- 返回类型
示例
>>> with torch.Stream(device='cuda') as s_cuda: >>> a = torch.randn(10, 5, device='cuda') >>> b = torch.randn(5, 10, device='cuda') >>> c = torch.mm(a, b)
- query() bool ¶
检查所有已提交的工作是否已完成。
- 返回
一个布尔值,指示此 Stream 中的所有内核是否已完成。
- 返回类型
示例
>>> s_cuda = torch.Stream(device='cuda') >>> s_cuda.query() True
- record_event(event) Event ¶
记录一个事件。将其排队到 Stream 中,以便从 FIFO 队列中的当前点进行进一步同步。
- 参数
event (
torch.Event
, 可选) – 要记录的事件。如果未提供,将分配一个新的事件。- 返回
记录的事件。
- 返回类型
示例
>>> s_cuda = torch.Stream(device='cuda') >>> e_cuda = s_cuda.record_event()
- synchronize() None ¶
等待此 Stream 中的所有内核完成。
示例
>>> s_cuda = torch.Stream(device='cuda') >>> s_cuda.synchronize()
- wait_event(event) None ¶
使提交到 Stream 的所有未来工作等待某个事件。
- 参数
event (
torch.Event
) – 要等待的事件。
示例
>>> s1_cuda = torch.Stream(device='cuda') >>> s2_cuda = torch.Stream(device='cuda') >>> e_cuda = s1_cuda.record_event() >>> s2_cuda.wait_event(e_cuda)
- wait_stream(stream) None ¶
与另一个 Stream 同步。所有将来提交到此 Stream 的工作将等待直到已提交到给定 Stream 的所有内核都完成。
- 参数
stream (
torch.Stream
) – 要同步的 Stream。
示例
>>> s1_cuda = torch.Stream(device='cuda') >>> s2_cuda = torch.Stream(device='cuda') >>> s2_cuda.wait_stream(s1_cuda)