假设我有一台计算机,它拥有多核处理器和GPU。我想编写一个可以在平台的所有核心上运行的OpenCL程序。这是否可能,还是我需要选择单个设备来运行内核?
你不能将一个内核跨多个设备扩展。但是,如果你运行的代码不依赖于其他结果(例如:处理16kB数据块,需要大量处理),你可以在GPU和CPU上启动相同的内核。并将一些块放在GPU上,另一些块放在CPU上。
这样应该可以提高性能。
你可以通过创建一个共享于CPU和GPU的clContext和2个命令队列来实现。
这不适用于所有内核。有时内核代码适用于所有输入数据,并且无法分成部分或块。