【发布时间】:2015-11-14 02:34:58
【问题描述】:
我开始使用 OpenCL C++ API。我一直在使用 de 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++ API 实际上非常糟糕(而且充其量是单调的)并且似乎被抛弃了。但要回答您的问题,您可以使用
operator()获取设备ID,例如devices[0]()。是的。太可怕了。 -
它仍然比普通的 C 好得多。但我同意它可能会更好,特别是在事件自动分配/释放方面。
-
出于兴趣 - 您希望对活动的运作方式进行哪些改变?当我接管标题的维护时,我经历并修复了许多其他奇怪的设计选择,没有人对我能看到的事件提供反馈。
-
@Lee 好吧,我在 1.1 版本中使用它,使用事件调用 enqueue* 函数非常痛苦,因为它需要事件指针。因此需要用户提供一个空事件,如果里面已经有一个有用的事件,则手动释放它。 (否则会泄漏内存)
-
知道了。是的,基于指针的接口太多了。看看新的标题。在我们所拥有的限制(不想破坏太多)内,它应该会好很多。您仍然必须使用 operator() 来获取值,但添加 .get() 或 .id() 方法或类似方法会很容易。