1

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

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

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

4

2 回答 2

1

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

于 2012-12-13T14:44:58.723 回答
0

您可以管理两个设备

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

这有点复杂,因为您必须按设备管理一个命令队列以在适当的设备上调度每个内核。

如果设备是同一平台的一部分(通常是 AMD),您可以使用相同的context,否则您将不得不为 CPU 创建一个更多的 context。

此外,如果您想要更细粒度的 CPU任务并行化,如果您的 CPU 支持,您可以使用device-fission 。

于 2012-12-13T14:47:36.920 回答