【问题标题】:multiple streams in one GPU device一个 GPU 设备中的多个流
【发布时间】:2016-07-04 23:24:50
【问题描述】:

我有一个应该在 6 个 GPU 设备上运行的多线程程序。 我想在每个设备上打开 6 个流以在我的程序生命周期内重复使用(总共 36 个)。

我正在使用 cudaStreamCreate() cublasCreate() cublasSetStream() 来创建每个流和句柄。 我还使用 GPU 内存监视器来查看每个句柄的内存使用情况。 但是,当我查看每个设备上的 GPU 内存使用情况时,它只会在第一次创建流时增长,并且在我创建的其余流中没有变化。

据我所知,我想使用的流的数量没有任何限制。 但我无法弄清楚为什么句柄和流的内存使用量没有显示在 GPU 内存使用量上。

【问题讨论】:

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

标签: multithreading cuda gpu


【解决方案1】:

您创建的所有流都驻留在给定设备上的单个上下文中,因此在第一个流之后创建其他流不会产生与上下文相关的开销。流本身是轻量级的,并且(大部分)是主机端调度程序抽象。正如您所观察到的,它们本身不会消耗太多(如果有的话)设备内存。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 2021-02-06
    • 1970-01-01
    • 2020-11-28
    • 2020-11-24
    • 1970-01-01
    相关资源
    最近更新 更多