是否可以在OpenCL中获取设备负载

时间:2013-09-10 17:26:46

标签: opencl

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

2 个答案:

答案 0 :(得分:1)

AFAIK,没有。 OpenCL本身没有任何API来查询设备的当前状态。这些都是由您的特定实现的供应商公开的(例如AMD的GPUPerfAPI或英特尔的Graphics Performance analyzer。)

希望这有帮助。

答案 1 :(得分:0)

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

在程序开始时,我查询总设备内存(CL_DEVICE__GLOBAL_MEM_SIZE),当分配缓冲区时,我将它们的地址和大小存储在一个向量中,这样我就可以减去当前分配的缓冲区的累积大小。总记忆。

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

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