-1

在nvidia的cuda技术中。

有两个概念:cuda编程中stream的概念,和Stream Multiprocessors的概念(Maxwell Architecture中也称为SMM,有时简称为SM),如何理解这两者?

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

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

4

2 回答 2

2

cuda流式多处理器之间没有联系。

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

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

于 2014-10-11T15:25:55.183 回答
2

有两个概念:cuda编程中stream的概念,和Stream Multiprocessors的概念(Maxwell Architecture中也称为SMM,有时简称为SM),如何理解这两者?

尽管术语相似,但这两个概念并不相关。

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

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

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

假设块数足够大,所有的 SM 都会忙。

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

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

于 2014-10-11T15:29:13.513 回答