何为与OpenCL程序相关联的OpenCL设备?
关于OpenCL中clCompileProgram()关联设备的疑问解答
首先明确:OpenCL程序(cl_program)的关联设备,本质上是其所属OpenCL上下文(cl_context)中绑定的设备集合——哪怕你创建程序时没直接指定设备列表,程序也会和上下文绑定,而上下文本身是创建时就指定了一组设备的。
具体分不同程序创建场景说明:
- 用
clCreateProgramWithSource()从源码创建程序:
你必须传入一个cl_context,而这个上下文在创建时就已经指定了要关联的设备(比如CPU、GPU等)。此时这个程序的关联设备,就是该上下文包含的所有设备。 - 用
clCreateProgramWithBinary()或clCreateProgramWithIL()从二进制/中间语言创建程序:
同样需要传入cl_context,程序的关联设备就是该上下文绑定的全部设备。哪怕你传入的二进制是针对某台特定设备编译的,程序的关联设备依然是上下文的设备集合——只是后续编译时可能会因为二进制不兼容报错,但这和“关联设备”的定义无关。 - 用
clCloneProgram()克隆已有程序:
新程序的关联设备会完全继承原程序的关联设备集合。
回到clCompileProgram()的逻辑:当你把device_list设为NULL时,函数就会遍历这个程序所属上下文的所有关联设备,逐一进行编译。
内容的提问来源于stack exchange,提问作者einpoklum
相关产品推荐
相关产品推荐

