我正在尝试将用C编写的较小程序翻译成openCL。我应该将一些输入数据传输到GPU,然后使用连续的内核调用在设备上执行所有计算。
但是,我遇到了部分代码不适合并行化的困难,因为我必须避免因为使用的数据量而在CPU和GPU之间来回传输数据。
有没有办法在没有并行处理的情况下执行某些内核,所以我可以用它们替换这些代码部分?这是通过将全局工作大小设置为1来实现的吗?
答案 0 :(得分:1)
是的,您可以在OpenCL设备上串行执行代码。为此,编写与C中相同的内核代码,然后使用clEnqueueTask()函数执行它。
答案 1 :(得分:0)
您可以管理两个设备:
这有点复杂,因为您必须按设备管理一个命令队列,以便在相应的设备上安排每个内核。
如果设备属于同一平台(通常为AMD),则可以使用相同的上下文,否则您将不得不为CPU创建一个上下文。
此外,如果您希望拥有更细粒度的CPU 任务并行化,如果您的CPU支持,则可以使用设备分裂。