Opencl 如果我们将NULL传递给设备列表参数,clBuildProgram为哪些设备生成?

Opencl 如果我们将NULL传递给设备列表参数,clBuildProgram为哪些设备生成?,opencl,Opencl,clBuildProgram允许您列出要为其构建程序的设备列表。这就是声明中出现num_devices和device_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_d

clBuildProgram
允许您列出要为其构建程序的设备列表。这就是声明中出现
num_devices
device_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, ...
  • 它是否适用于PC中的所有设备
  • 它是否只为我创建上下文的那些设备生成?(我是指我使用
    clCreateProgramWithSource
    创建
    program
    时使用的上下文)
  • 文件说:

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

    我认为这里的措辞有点复杂,但从这一点来看,我猜第二个。是这样吗


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

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

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