在nvidia的cuda技术中。
有两个概念:cuda编程中的流概念,以及流多处理器的概念(在Maxwell Architecture中也称为SMM,有时被SM缩短),如何理解这两者?
案例I:我只使用默认流来执行内核,块号足够大。在这种情况下,我的所有5个流多处理器(GTX 750 Ti有5个SMM,即640个核心)将参与处理块,或者只有一个流多处理器参与处理一个默认流
案例II:我使用cudaStreamCreate()创建5个(或更多)流,并使用它们来执行5个不同的内核,其中所有5个内核都是独立的,5个内核是否将物理并行处理?
答案 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),那么它们肯定会。