在nvidia的cuda技术中。
有两个概念:cuda编程中的流的概念和流多处理器(在Maxwell架构中也称为SMM,有时简称为SM)的概念,如何理解这两者?
情况一:我只是使用默认流来执行内核,并且块号足够大。在这种情况下,我的所有5个流多处理器(GTX 750 Ti有5个SMM,即640核)是否都参与处理块,或者只有一个流多处理机参与处理一个默认流
案例二:我使用cudaStreamCreate()创建5个(或更多)流,并用它们执行5个不同的内核,其中所有5个内核都是独立的,这5个内核会在物理上并行处理吗?
cuda流和串流多处理器之间没有连接。
无论您使用哪种流安排来启动内核,如果有足够的块,所有SM都将参与执行该内核。
如果您在5个独立的流中启动5个内核,那么您的内核很可能会大致按顺序执行,除非所有内核在资源使用方面都很小,在这种情况下,它们可能会同时执行。
有两个概念:cuda编程中的流的概念和流多处理器(在Maxwell架构中也称为SMM,有时简称为SM)的概念,如何理解这两者?
尽管术语相似,但这两个概念都不相关。
流式多处理器是一个硬件组件,由几个以SIMD方式执行内核的流式处理器组成。
流只是一个命令队列,您可以在其中对命令(是的…)进行排队,例如内核执行或内存拷贝。流并行执行,因此如果您有两个独立的内核,您可能希望在单独的流中执行它们,以(可能)提高性能。如果你的设备支持,你也可以重叠内核执行和数据传输
情况一:我只是使用默认流来执行内核,并且块号足够大。在这种情况下,我的所有5个流多处理器(GTX 750 Ti有5个SMM,即640核)是否都参与处理块,或者只有一个流多处理机参与处理一个默认流
假设块号足够大,则所有SM都将繁忙。
案例二:我使用cudaStreamCreate()创建5个(或更多)流,并用它们执行5个不同的内核,其中所有5个内核都是独立的,这5个内核会在物理上并行处理吗?
这取决于日程安排。如果你的内核计算可以重叠(它们没有完全利用GPU),那么它们肯定会重叠。