OpenCL分析信息不可用于标记命令

时间:2013-06-13 15:58:11

标签: opencl

使用带有JOCL绑定的AMD APP APP OpenCL实现,我正在尝试使用Java自动资源管理创建一个通用包围分析器。基本思路是:

class Timer implements AutoCloseable {
    ...
    Timer { 
        ...
        clEnqueueMarker( commandQueue, startEvent );
    }

    void close() {
        cl_event stopEvent = new cl_event();
        clEnqueueMarker( commandQueue, stopEvent );
        clFinish( commandQueue );
        ... calculate and output times ...
    } 
}

我的问题是,分析信息不适用于marker命令事件(stopEvent和startEvent)。尽管如此a)在命令队列上设置CL_QUEUE_PROFILING_ENABLE并且b)刷新并等待命令队列并验证停止和启动事件是否为CL_COMPLETE而没有错误。

所以我的问题是,AMD OpenCL中的标记命令是否支持分析?如果没有,是否明确禁止规范(我没有发现这种效果)? 谢谢。

2 个答案:

答案 0 :(得分:2)

我已经重新检查了规格,在我看来,你得到的是正常的(虽然我以前从未对这个细节给予太多关注)。在关于分析的5.12节中,标准规定:

  

本节介绍了排队的OpenCL函数的概要分析   作为命令队列的命令。具体功能是   提到的是: clEnqueue {Read | Write | Map} Buffer,   clEnqueue {读取|写入} BufferRect,clEnqueue {读取|写入|映射}图像,   clEnqueueUnmapMemObject,clEnqueueCopyBuffer,clEnqueueCopyBufferRect,   clEnqueueCopyImage,clEnqueueCopyImageToBuffer,   clEnqueueCopyBufferToImage,clEnqueueNDRangeKernel,clEnqueueTask和   clEnqueueNativeKernel。

所以clEnqueueMarker()函数不在列表中,我想返回的CL_PROFILING_INFO_NOT_AVAILABLE值是有意义的。

答案 1 :(得分:1)

我刚试过这个,现在似乎工作了。在带有AMD 7870的Windows 10和带有Nvidias Titan Black和Titan X卡的Linux上进行测试。

OpenCL 1.2规范仍然包含@CaptainObvious引用的段落。 clEnqueueMarker函数仍然缺失,但我可以毫无问题地获取分析信息。

标记事件的开始和结束时间总是相等的,这很有意义。

顺便说一下。 clEnqueueMarkerdeprecated in OpenCL 1.2,应替换为clEnqueueMarkerWithWaitList