cuda流和流多处理器

时间:2014-10-11 14:54:14

标签: cuda cuda-streams

在nvidia的cuda技术中。

有两个概念:cuda编程中的流概念,以及流多处理器的概念(在Maxwell Architecture中也称为SMM,有时被SM缩短),如何理解这两者?

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

案例II:我使用cudaStreamCreate()创建5个(或更多)流,并使用它们来执行5个不同的内核,其中所有5个内核都是独立的,5个内核是否将物理并行处理?

2 个答案:

答案 0 :(得分:2)

cuda streams Streaming 多处理器之间没有任何关联。

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

如果你在5个独立的流中启动5个内核,很可能你的内核将按顺序执行,除非所有内核的术语或资源使用都很小,在这种情况下它们可能同时执行。

答案 1 :(得分:2)

  

有两个概念:cuda编程中的流概念,以及流多处理器的概念(在Maxwell Architecture中也称为SMM,有时被SM缩短),如何理解这两者?

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

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

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

  

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

假设块号足够大,所有SM都将忙碌。

  

案例II:我使用cudaStreamCreate()创建5个(或更多)流,并使用它们来执行5个不同的内核,其中所有5个内核都是独立的,5个内核是否将物理并行处理?

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