0

我知道如何使用clGetDeviceInfo来查询有关设备的信息,但我不知道如何在运行时获取有关设备的信息。例如,现在使用了多少全局内存?在过去的 n 纳秒内,处理元素的平均繁忙程度如何?

4

2 回答 2

1

AFAIK,不。OpenCL 本身没有任何 API 来查询设备的当前状态。这些是由您的特定实现的供应商公开的(例如 AMD 的GPUPerfAPI或 Intel 的图形性能分析器)。

希望这可以帮助。

于 2013-09-10T18:00:23.147 回答
0

为了能够在运行时确定可用内存,我所做的是围绕 clDevice(或在我的情况下为 cl::Device)编写一个包装器,并通过所述包装器管道所有缓冲区分配。

在程序开始时,我查询总设备内存CL_DEVICE__GLOBAL_MEM_SIZE

使用 OpenCL,您可以将回调调用分配给缓冲区,当缓冲区被销毁时调用(clSetMemObjectDestructorCallback)。因此,我在释放缓冲区时使用它们进行清理。提示:调用回调的 cl_mem 参数不是有效的 mem 对象。它可能已经被破坏了,所以你不能查询它的大小(这花了我几个小时,即使它在标准中明确说明......)。

这样,我总能知道设备上还剩多少内存。

于 2013-09-11T10:09:05.963 回答