Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将C代码转换为OpenCL_Opencl - Fatal编程技术网

将C代码转换为OpenCL

将C代码转换为OpenCL,opencl,Opencl,我正在尝试将一个用C编写的小程序翻译成openCL。我应该将一些输入数据传输到GPU,然后使用连续的内核调用在设备上执行所有计算 然而,由于使用了大量数据,我必须避免在CPU和GPU之间来回传输数据,因此我在处理不适合并行化的部分代码时遇到了困难 有没有一种方法可以在没有并行处理的情况下执行一些内核,这样我就可以用它们替换代码的这些部分?这是通过将全局工作大小设置为1来实现的吗?是的,您可以在OpenCL设备上串行执行代码。要做到这一点,请像在C中一样编写内核代码,然后使用函数执行它。是的,您可

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

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


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

是的,您可以在OpenCL设备上串行执行代码。要做到这一点,请像在C中一样编写内核代码,然后使用函数执行它。

是的,您可以在OpenCL设备上串行执行代码。要做到这一点,请编写与C相同的内核代码,然后使用函数执行它。

您可以管理两个设备:

  • 用于高度并行化代码的GPU
  • 连续代码的CPU
这有点复杂,因为您必须按设备管理一个命令队列,以便在适当的设备上调度每个内核

如果设备是同一平台的一部分(通常为AMD),则可以使用相同的上下文,否则必须为CPU再创建一个上下文


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

您可以管理两个设备:

  • 用于高度并行化代码的GPU
  • 连续代码的CPU
这有点复杂,因为您必须按设备管理一个命令队列,以便在适当的设备上调度每个内核

如果设备是同一平台的一部分(通常为AMD),则可以使用相同的上下文,否则必须为CPU再创建一个上下文


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

谢谢您的回答。我是openCL新手,所以请原谅我这个愚蠢的问题,但如果我有两个上下文(Intel CPU和nVidia GPU),这不意味着我仍然需要来回发送数据吗?你可以使用内存映射的固定内存:CPU将直接访问内存,GPU可以将必要的部分复制到其全局内存。如果与处理相比,您有很多数据移动,那么您可能必须调整算法。在理想情况下,您将能够同时运行CPU和GPU。谢谢您的回答。我是openCL新手,所以请原谅我这个愚蠢的问题,但如果我有两个上下文(Intel CPU和nVidia GPU),这不意味着我仍然需要来回发送数据吗?你可以使用内存映射的固定内存:CPU将直接访问内存,GPU可以将必要的部分复制到其全局内存。如果与处理相比,您有很多数据移动,那么您可能必须调整算法。在理想情况下,您将能够同时运行CPU和GPU。