如果我们将NULL传递给device_list参数,clBuildProgram会为哪些设备构建?

时间:2017-10-03 13:24:28

标签: opencl

clBuildProgram允许我们提供一个设备列表来构建程序。这就是声明中num_devicesdevice_list参数的原因:

cl_int clBuildProgram(cl_program program, cl_uint num_devices, const cl_device_id *device_list, const char *options, void (CL_CALLBACK *pfn_notify)(cl_program program, void *user_data), void *user_data)

现在会发生什么,如果我们这样使用它?

cl_int clBuildProgram(program, 0, NULL, ...
  1. 它是否适用于PC中的所有设备?
  2. 它是否仅为我创建上下文的设备构建? (我的意思是我用program创建clCreateProgramWithSource时使用的上下文。)
  3. 文档说:

      

    device_list:指向与程序关联的设备列表的指针。如果device_list为NULL值,则为与已加载源或二进制文件的程序关联的所有设备构建程序可执行文件。如果device_list是非NULL值,则程序可执行文件是为此列表中指定的已加载源或二进制文件的设备构建的。

    我认为这里的措辞有点复杂,但是从那开始,我猜数字2.这是对的吗?

    我问,因为在数字1的情况下,我需要将设备列表传递给此函数,以避免所有设备的多余编译。

1 个答案:

答案 0 :(得分:2)

2)是正确的。编译仅限于与程序上下文关联的设备。除非使用每个设备创建上下文,否则这不能是系统中的每个设备。