我正在用简单的想法编写 Qt 应用程序:有几个支持 OpenCL 的设备,每个设备都有自己的控制线程,用于准备数据、执行 OpenCL 内核和处理结果。 OpenCL 代码实际上是比特币挖掘内核(目前是 this one ,但这并不重要)。
使用 2 个 GPU 时一切正常。 当我使用 GPU 和 CPU 时出现问题。 CPU 以合理的速度运行,但 GPU 性能减慢至零。
Linux下不存在这样的问题。在 Windows 下,poclbm 的行为方式相同:启动多个实例时(1 个用于 GPU,1 个用于 CPU),GPU 性能为 0。
我不确定应该发布哪部分代码,所以这会很有帮助。我只能提一下,该线程是 QThread
的子线程,其中 run()
是用繁忙循环 while( !_stop ) { mineBitcoins(); 重新实现的。 }
。该循环的逻辑几乎是从 poclbm 的 BitcoinMiner::mining_thread
( here ) 复制的。
我应该朝哪个方向挖掘?谢谢。
更新: 我正在使用QtOpenCL与 AMD APP SDK .
最佳答案
如果您在 CPU 上运行内核并充分利用所有内核,则处理其他设备的线程可能无法跟上 GPU 的速度,从而有效地限制性能。
尝试减少 CPU 上运行内核的线程数,例如如果您的程序在具有超线程的四核上运行,请将线程限制为 7。
关于c++ - Windows 多任务破坏了 OpenCL 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9519670/