cuda流和流多处理器

cuda流和流多处理器,cuda,cuda-streams,Cuda,Cuda Streams,在nvidia的cuda技术中 有两个概念:cuda编程中的流概念和流多处理器概念(在Maxwell架构中也称为SMM,有时简称为SM),如何理解这两个概念 案例一:我只是使用默认流来执行内核,并且块数足够大。在这种情况下,我的所有5个流多处理器(GTX 750 Ti有5个SMM,即640个核心)是否都参与处理块,或者只有一个流多处理器参与处理一个默认流 案例二:我使用cudaStreamCreate()创建5个(或更多)流,并使用它们执行5个不同的内核,如果所有5个内核都是独立的,那么这5个内

在nvidia的cuda技术中

有两个概念:cuda编程中的流概念和流多处理器概念(在Maxwell架构中也称为SMM,有时简称为SM),如何理解这两个概念

案例一:我只是使用默认流来执行内核,并且块数足够大。在这种情况下,我的所有5个流多处理器(GTX 750 Ti有5个SMM,即640个核心)是否都参与处理块,或者只有一个流多处理器参与处理一个默认流


案例二:我使用cudaStreamCreate()创建5个(或更多)流,并使用它们执行5个不同的内核,如果所有5个内核都是独立的,那么这5个内核在物理上会被并行处理吗?

cuda流和流式多处理器之间没有连接

无论您使用哪种流安排来启动内核,如果有足够的块,所有SMs都将参与执行该内核

如果您在5个单独的流中启动5个内核,那么您的内核很可能会大致按顺序执行,除非所有内核在条款或资源使用方面都非常小,在这种情况下,它们可能会同时执行

有两个概念:cuda编程中的流概念和流多处理器概念(在Maxwell架构中也称为SMM,有时简称为SM),如何理解这两个概念

尽管术语相似,但这两个概念是不相关的

流式多处理器是由多个以SIMD方式执行内核的流式处理器组成的硬件组件

流只是一个命令队列,您可以在其中对命令(是的…)进行排队,例如内核执行或内存拷贝。流并行执行,因此如果您有两个独立的内核,您可能希望在单独的流中执行它们,以(可能)提高性能。如果您的设备支持内核执行和数据传输,您也可能会重叠内核执行和数据传输

案例一:我只是使用默认流来执行内核,并且块数足够大。在这种情况下,我的所有5个流多处理器(GTX 750 Ti有5个SMM,即640个核心)是否都参与处理块,或者只有一个流多处理器参与处理一个默认流

假设区块编号足够大,所有SMs都将处于繁忙状态

案例二:我使用cudaStreamCreate()创建5个(或更多)流,并使用它们执行5个不同的内核,如果所有5个内核都是独立的,那么这5个内核在物理上会被并行处理吗


这取决于调度程序。如果您的内核计算可以重叠(它们没有充分利用GPU),那么它们肯定会重叠。

谢谢。我曾经认为只有一个SM的GPU在运行,如果我使用5个流,我会快5倍。似乎明白了。根据您的解释,如果内核很复杂且其块很大,则创建许多流可能没有帮助。是否正确?流用于安排异步并发活动,包括异步并发执行(内核、设备和主机之间)以及复制和计算操作的重叠。您应该根据要安排/管理的并发活动类型创建尽可能多的流。我想你要问的问题是“我应该启动多个并发内核吗?”在这种情况下,是的,“如果内核很复杂,并且它们的块很大,那么它可能没有帮助”