将C代码转换为OpenCL
我正在尝试将一个用C编写的小程序翻译成openCL。我应该将一些输入数据传输到GPU,然后使用连续的内核调用在设备上执行所有计算 然而,由于使用了大量数据,我必须避免在CPU和GPU之间来回传输数据,因此我在处理不适合并行化的部分代码时遇到了困难将C代码转换为OpenCL,opencl,Opencl,我正在尝试将一个用C编写的小程序翻译成openCL。我应该将一些输入数据传输到GPU,然后使用连续的内核调用在设备上执行所有计算 然而,由于使用了大量数据,我必须避免在CPU和GPU之间来回传输数据,因此我在处理不适合并行化的部分代码时遇到了困难 有没有一种方法可以在没有并行处理的情况下执行一些内核,这样我就可以用它们替换代码的这些部分?这是通过将全局工作大小设置为1来实现的吗?是的,您可以在OpenCL设备上串行执行代码。要做到这一点,请像在C中一样编写内核代码,然后使用函数执行它。是的,您可
有没有一种方法可以在没有并行处理的情况下执行一些内核,这样我就可以用它们替换代码的这些部分?这是通过将全局工作大小设置为1来实现的吗?是的,您可以在OpenCL设备上串行执行代码。要做到这一点,请像在C中一样编写内核代码,然后使用函数执行它。是的,您可以在OpenCL设备上串行执行代码。要做到这一点,请编写与C相同的内核代码,然后使用函数执行它。您可以管理两个设备:
- 用于高度并行化代码的GPU
- 连续代码的CPU
此外,如果您想拥有更细粒度的CPU任务并行化,如果您的CPU支持,您可以使用设备裂变。您可以管理两个设备:
- 用于高度并行化代码的GPU
- 连续代码的CPU
此外,如果您想拥有更细粒度的CPU任务并行化,如果您的CPU支持,您可以使用设备裂变。谢谢您的回答。我是openCL新手,所以请原谅我这个愚蠢的问题,但如果我有两个上下文(Intel CPU和nVidia GPU),这不意味着我仍然需要来回发送数据吗?你可以使用内存映射的固定内存:CPU将直接访问内存,GPU可以将必要的部分复制到其全局内存。如果与处理相比,您有很多数据移动,那么您可能必须调整算法。在理想情况下,您将能够同时运行CPU和GPU。谢谢您的回答。我是openCL新手,所以请原谅我这个愚蠢的问题,但如果我有两个上下文(Intel CPU和nVidia GPU),这不意味着我仍然需要来回发送数据吗?你可以使用内存映射的固定内存:CPU将直接访问内存,GPU可以将必要的部分复制到其全局内存。如果与处理相比,您有很多数据移动,那么您可能必须调整算法。在理想情况下,您将能够同时运行CPU和GPU。