2016-07-04 79 views
0

我有一个多线程程序,它应该在6个GPU设备上运行。 我想在每个设备上打开6个流,以便在我的程序的整个生命周期内(共36个)重复使用。我使用cudaStreamCreate()cublasCreate()cublasSetStream()来创建每个流和句柄。 我也使用GPU内存监视器来查看每个句柄的内存使用情况。但是,当我查看每个设备上的GPU内存使用情况时,它只会在第一个流创建时增长,并且在我创建的其余流中不会改变。一个GPU设备中的多个流

据我所知,我想使用的流量没有任何限制。 但我不明白为什么句柄和流的内存使用量不显示在GPU内存使用情况。

+1

在每个设备上创建第一个流可能会初始化该设备的CUDA上下文。这将涉及显着/明显的内存使用量。每个设备上的附加流创建不涉及此上下文初始化,因此相比之下,额外的内存使用量很小(或为零)。 –

回答

2

您创建的所有流都驻留在给定设备上的单个上下文中,因此在第一个流之后创建额外的流时没有上下文相关的开销。流本身是轻量级的,并且(主要)是主机端调度器抽象。正如你所观察到的,它们本身并不消耗太多(如果有的话)设备内存。