是否可以手动设置用于一个 CUDA 流的 SM?

问题描述 投票:0回答:2

默认情况下,内核将使用设备的所有可用 SM(如果有足够的块)。但是,现在我有 2 个流,其中一个是计算密集型,一个是内存密集型,我想分别限制 2 个流使用的最大 SM(设置最大 SM 后,一个流中的内核将使用最多最大 SM,比如 20SM 用于计算密集型,4SM 用于内存密集型),是否可以这样做? (如果可以的话,我应该使用哪个API)

cuda nvidia cudnn cuda-streams
2个回答
1
投票

简而言之,不,没有办法做到你所设想的。

CUDA 执行模型不提供这种粒度,这并非偶然。通过抽象出调度和工作分配的级别,这意味着(在合理范围内)可以在给定架构的最小 GPU 上运行的任何代码也可以在最大 GPU 上运行,无需任何修改。从可移植性和互操作性的角度来看,这很重要。


0
投票

这也是我的问题。如何在特定的SM上运行不同的内核?这个领域有很多论文。他们只是获取 sm id,如果当前 sm id 等于目标 sm id,则使用 if 条件运行内核。我正在尝试这样做,但正如我在 nsight 计算中看到的那样,内核是按顺序运行的。你找到解决办法了吗?

© www.soinside.com 2019 - 2024. All rights reserved.