我是OpenCL的新手,刚开始学习。我想知道是否可以在GPU上执行少量线程并在CPU上执行剩余线程?换句话说,如果我启动100个线程并假设我有8个核心CPU,那么100个线程中的8个线程是否可能在CPU上执行,剩余的92个线程将在GPU上运行?OpenCL可以帮助我完成这项工作顺利?
答案 0 :(得分:5)
我想知道是否可以在GPU上执行少量线程并在CPU上执行剩余线程?
是
换句话说,如果我启动100个线程并假设我有8个核心CPU,那么100个线程中的8个线程是否可能在CPU上执行,剩余的92个线程将在GPU上运行?
没有。该描述表明您正在查看GPU& CPU作为单个计算资源。你不能这样做。
这并不意味着你不能同时处理同一个任务。
...但是...
我发现更好的方法是让GPU在GPU运行时处理不同的任务。也许准备GPU的下一部分工作,或者后处理GPU的结果。有时这是正常的代码。有时它是OpenCL。
答案 1 :(得分:2)
您可以使用多个openCL设备来处理您的算法,但需要对工作负载进行微妙的分区,以便正确平衡设备间的工作,否则开销可能会使您的运行时间变得更糟。
AMD OpenCL Programming Guide section 4.7清楚地说明了使用多个OpenCL设备,所以我的回答是,是的,您可以将工作划分为多个设备,顺利执行,当且仅当您的调度算法足够智能以平衡整个事情。
答案 2 :(得分:0)
在运行时为所选设备(CPU,GPU型号)编译openCL代码
你可以切换你用于不同任务的目标,但你不能(我知道的任何实现)在CPU和GPU之间分配相同的任务