明智地使用GPU和CPU

use*_*567 4 opencl

我是OpenCL的新手,刚开始学习.我想知道是否可以在GPU上执行少量线程并在CPU上执行剩余线程?换句话说,如果我启动100个线程并假设我有8个核心CPU,那么100个线程中的8个线程是否可能在CPU上执行,剩余的92个线程将在GPU上运行?OpenCL可以帮助我完成这项工作顺利?

Pau*_*l S 5

我想知道是否可以在GPU上执行少量线程并在CPU上执行剩余线程?

换句话说,如果我启动100个线程并假设我有8个核心CPU,那么100个线程中的8个线程是否可能在CPU上执行,剩余的92个线程将在GPU上运行?

不.该描述表明您将GPU和CPU视为单一计算资源.你不能这样做.

这并不意味着你不能同时处理同一个任务.

  • GPU和CPU将被视为独立的OpenCL设备.
  • 您可以编写可与多个设备通信的代码.
  • 您可以为多个设备编译相同的内核.
  • 您可以要求多台设备同时工作.

...但...

  • 这些都不是自动的.
  • OpenCL不会在多个设备之间拆分单个NDRange(或等效)调用.
  • 这意味着您必须自己在两台设备之间安排任务.
  • 速度差异将会非常大,因此保持最佳状态需要的不仅仅是"92,而是8".

我发现更好的方法是让GPU在GPU运行时处理不同的任务.也许准备GPU的下一部分工作,或者后处理GPU的结果.有时这是正常的代码.有时它是OpenCL.