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