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

Is it possible to manually set the SMs used for one CUDA stream?

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

总之,不,没有办法按照你的设想去做。

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