【发布时间】:2015-12-30 09:01:47
【问题描述】:
我想问你一个关于 Nvidia GPU 中并发内核执行的问题。我向我们解释我的情况。我有一个代码,它为 2 个不同的矩阵(每个矩阵一个)启动 1 个稀疏矩阵乘法。这些矩阵乘法是使用 cuSPARSE 库执行的。我希望这两个操作可以同时执行,所以我使用 2 个流来启动它们。使用 Nvidia Visual Profiler,我观察到两个操作(cuSPARSE 内核)完全重叠。两个内核的时间戳是:
- 内核 1) 开始时间:206,205 毫秒 - 结束时间:284,177 毫秒。
- 内核 2) 开始时间:263,519 毫秒 - 结束时间:278,916 毫秒。
我正在使用带有 13 个 SM 的 Tesla K20c,每个 SM 最多可以执行 16 个块。两个内核都有 100% 的占用并启动了足够数量的块:
- 内核 1) 2277 个块,32 个寄存器/线程,1156 KB 共享内存。
- 内核 2) 46555 个块、32 个寄存器/线程、1,266 KB 共享内存。
使用此配置,两个内核都不应显示此行为,因为两个内核都会启动足够数量的块来填充 GPU 的所有 SM。但是,Nvidia Visual Profiler 显示这些内核正在重叠。为什么?。谁能解释我为什么会发生这种行为?
非常感谢。
【问题讨论】:
-
“我希望两个操作可以同时执行”和“我观察到两个操作完全重叠”。那么有什么问题呢?您是在问为什么调度程序会设法交错执行两个内核,否则如果不同时启动就会使 GPU 饱和?