【发布时间】:2018-08-19 07:02:12
【问题描述】:
我有一些 pyCUDA 代码可以使 GPU 保持 100% 的使用率,并且似乎将 GPU 占用到我的屏幕仅每秒更新一次的程度。
更改块和网格大小没有帮助。
网格中的每个线程循环大约 130 万次,大约只有 6 个块,每块 16 个线程。如果我把它做成一个小循环,那没有问题,但不幸的是它必须那么大,而且我看不到将工作分配到更多块中的好方法。
有没有办法限制我的程序的 GPU 使用率,或者改变屏幕的优先级?
Windows 上的 GTX 1060。
【问题讨论】:
-
"只有大约 6 块 16 线程" 这对 GPU 的使用非常低效。你没有提到这是Windows还是Linux。目前没有办法强制在 Windows WDDM GPU(或 linux 显示 GPU)上运行长时间运行的内核被抢占以允许显示任务继续进行。你需要推动那些你说你不能做的事情之一。或者,获取另一个 GPU,它可以在 Windows 上以 TCC 模式放置(或者任何 GPU 在 linux 上应该都可以)并在不处理 CUDA 任务的 GPU 上运行您的显示器。
-
我很确定,只要 GPU 使用率为 100%,将工作拆分得更多不会让事情变得更快。如果有的话,速度会慢一些。我正在使用带有 GTX 1060 的 Windows 10
-
您可以使用内核using a single thread 获得 100% 的使用率。这并没有说明正在运行的内核使用 GPU 的效率如何。将低效代码转换为高效代码当然可以在更短的时间内完成相同的工作。并且 96 个总线程不会有效地使任何 GPU 饱和。这比为 GPU 提供足够的并行工作以隐藏延迟的阈值低约 2 个数量级。
-
它比 CPU 上完全相同的代码快大约 300 倍,我也没有办法分解它。所以我想我可以解决这个问题
-
您总是可以得到第二张 GPU 卡...或者使用所有现代 CPU 都具有的集成 GPU 进行显示。