OpenCL评测信息不适用于标记命令

OpenCL评测信息不适用于标记命令,opencl,Opencl,使用带有JOCL绑定的AMDs-APP-OpenCL实现,我试图使用Java自动资源管理创建一个通用的括号分析器。基本思想是: class Timer implements AutoCloseable { ... Timer { ... clEnqueueMarker( commandQueue, startEvent ); } void close() { cl_event stopEvent = new cl

使用带有JOCL绑定的AMDs-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_队列\配置文件\启用,b)在命令队列上刷新和等待,并验证停止和启动事件是否完成且没有错误,但仍然存在这种情况

所以我的问题是,AMD OpenCL中的标记命令是否支持评测?如果不是,规范是否明确不允许(我没有发现有这种效果)?
谢谢

我重新检查了规范,在我看来,您得到的是正常的(尽管我以前从未对该细节给予过太多关注)。在第5.12节关于分析的内容中,标准规定:

本节描述排队的OpenCL函数的评测 作为命令队列的命令。具体功能如下: 提到的是:clEnqueue{Read | Write | Map}缓冲区, clEnqueue{Read | Write}BufferRect,clEnqueue{Read | Write | Map}Image, CLENQUEUENMAPMEMOBJECT,clEnqueueCopyBuffer,clEnqueueCopyBufferRect, ClenqueueEcopyImage,ClenqueueEcopyImageToBuffer, clEnqueueCopyBufferToImage、CLENQUEUENDRANGENELL、clEnqueueTask和 克伦奎恩蒂维克内尔


因此,clEnqueueMarker()函数不在列表中,我想返回的CL_PROFILING_INFO_not_AVAILABLE值是有意义的。

我刚刚尝试了这个方法,现在似乎可以工作了。在装有AMD7870的Windows 10和装有Nvidias Titan Black和Titan X卡的Linux上进行测试

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

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


顺便说一句,
clEnqueueMarker
是并且应该替换为。

clGetEventProfilingInfo(…)返回什么值?它是否返回CL_成功?它返回CL_分析信息\u不可用。我还使用clGetEventInfo查询了事件状态,以验证事件是否为CL_COMPLETE,是否为。因此,我对marker命令中的评测支持感到困惑。