在单个GPU如P100中有56个SM(Streaming Multiprocessors),不同的SM可能相关性很小。我想知道不同SM的应用程序性能变化。所以有什么办法可以禁用一些SM某个 GPU。我知道 CPU 提供了相应的机制,但还没有为 GPU 提供一个好的机制。谢谢!
最佳答案
没有 CUDA 提供的方法来禁用 SM(流式多处理器)。对于不同程度的难度和行为,存在一些使用间接方法进行尝试的可能性:
使用 CUDA MPS,并通过仔细控制启动的 block 数和这些 block 的资源利用率来启动一个完全“占用”一个或多个 SM 的应用程序。使用 CUDA MPS,另一个应用程序可以在同一个 GPU 上运行,并且内核可以同时运行,前提是要充分注意它。这可能不允许直接修改被测应用程序代码(但需要启动额外的应用程序以及 MPS)。内核持续时间需要“长”,以便在被测应用程序运行时占用 SM。
在您的应用程序代码中,通过从与被测代码相同的应用程序启动“虚拟”内核,并让虚拟内核“占用”一个或多个,有效地重新创建上面第 1 项中列出的行为短信。然后被测应用程序可以启动所需的内核。这应该允许在没有 MPS 的情况下实现内核并发。
在您的应用程序代码中,对于被测内核本身,修改内核 block 调度行为,probably using the
smid
special register via inline PTX , 使应用内核本身只使用某些 SM,有效减少使用总数。
关于linux - 是否有可能在 GPU 中禁用某些 SMX?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47968815/