我发现这个 OpenCL:运行CPU/GPU多个设备.
但我仍然有疑问(3)如何在多个设备上运行程序.配方如下?(Q1)
创建您要使用的设备.
为每个设备创建一个上下文.
为每个上下文调用clBuilProgram来构建程序
对于每个程序调用clCreateCommandQueue来为每个上下文构建一个命令队列
对于每个上下文和每个函数参数调用clCreateBuffer.
或者我必须连接CommandQueues.(Q2)
有人一些示例代码或教程的链接?(Q3)
您可以创建包含所有设备的单个上下文.上下文构造需要一系列设备.您为上下文编译一次程序.您可以为程序调用clBuildProgram或clCompileProgram和clLinkProgram一次,列出所有设备或不列出任何设备,并让它在上下文中为所有设备构建.为上下文中的每个设备创建命令队列.为要访问的每个阵列创建一个缓冲区.如果要在不同设备上处理阵列的不同部分,可以创建两个缓冲区,或使用子缓冲区将其划分为多个部分.
如果您对针对所有设备的相同程序不满意并希望进一步优化,则可以为每个设备创建单独的程序,或者创建程序一次并为每个传入宏的设备单独调用clCompileProgram.