在 OpenCl 中有很多这样的调用来创建对象
clCreateProgramWithSource 为上下文创建程序对象,并将字符串数组中的文本字符串指定的源代码加载到程序对象中。
我的问题是这个对象到底是什么,因为计算机科学中的一个对象有很多定义?
我想在较低级别了解源代码字符串到底发生了什么,程序对象到底是什么,它包含什么?
它是实现定义的,并且没有声明任何结构供您检查它们。
在给定的实现中,这些句柄可能是指向内部定义结构的指针,或者它们可能是此类项目集合的索引。你不知道,如果你弄明白了,它可能会在驱动程序更新中改变。这就是为什么它们是不透明类型的原因,所以实现可以在里面做任何它喜欢的事情,只返回一个句柄到你的代码。
在这种情况下,对象表示cl_program
结构的实例。但是,从 OpenCL 标头cl.h
:
typedef struct _cl_program * cl_program;
cl_program 只是一个指向_cl_program
结构的指针。为什么?OpenCL 是一个开放标准,所有实现都受制于特定库开发人员,他们为特定硬件(例如,英特尔 CPU)实施标准。