我知道如何使用clGetDeviceInfo
来查询有关设备的信息,但我不知道如何在运行时获取有关设备的信息。例如,现在正在使用多少全局内存?平均而言,处理元素在最后n纳秒内有多忙?
答案 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对象。它可能已经被破坏,所以你不能查询它的大小(这花了我几个小时,即使它在标准中明确说明......)。
这样,我总能知道设备上剩余多少内存。