将C代码翻译为OpenCL

时间:2012-12-13 14:20:47

标签: opencl

我正在尝试将用C编写的较小程序翻译成openCL。我应该将一些输入数据传输到GPU,然后使用连续的内核调用在设备上执行所有计算。

但是,我遇到了部分代码不适合并行化的困难,因为我必须避免因为使用的数据量而在CPU和GPU之间来回传输数据。

有没有办法在没有并行处理的情况下执行某些内核,所以我可以用它们替换这些代码部分?这是通过将全局工作大小设置为1来实现的吗?

2 个答案:

答案 0 :(得分:1)

是的,您可以在OpenCL设备上串行执行代码。为此,编写与C中相同的内核代码,然后使用clEnqueueTask()函数执行它。

答案 1 :(得分:0)

您可以管理两个设备

  • 用于高度并行化代码的 GPU
  • 用于顺序代码的 CPU

这有点复杂,因为您必须按设备管理一个命令队列,以便在相应的设备上安排每个内核。

如果设备属于同一平台(通常为AMD),则可以使用相同的上下文,否则您将不得不为CPU创建一个上下文。

此外,如果您希望拥有更细粒度的CPU 任务并行化,如果您的CPU支持,则可以使用设备分裂