我开始使用 OpenCL C++ API。我已经使用 C API 很长时间了。 C++ API 更加优雅、简单,代码更少且不易出错,但我需要设备 ID。在启动代码中我这样做:
vector<cl::Platform> platforms;
cl::Platform::get(&platforms);
//example, get devices from first platform
vector<cl::Device> devices;
platforms[0].getDevices(CL_DEVICE_TYPE_ALL, &devices);
我需要设备 ID,但不想使用 C API 执行此操作:
cl_device_id *devicesIds = new cl_device_id[devices.size()];
clGetDeviceIDs(platformsIds[0], CL_DEVICE_TYPE_ALL, devices.size(), devicesIds, NULL);
如何使用 C++ API 从
devs[0]
获取 de device_id ID?在文档中找不到它。我看到 devices[0]
具有 device_id
值,但我无法获取它。
任何 C++ 包装器对象都可以使用 operator() 返回底层 OpenCL C 对象。
在原始标头中,决定使这些对象直接转换为底层 C 对象,我认为这个简单的接口反映了这种思维方式。如果你查看旧版本的头代码,会发现很多地方 C++ 对象数组直接转换为 C ids 数组。