使用带有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中的标记命令是否支持分析?如果没有,是否明确禁止规范(我没有发现这种效果)? 谢谢。
答案 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
函数仍然缺失,但我可以毫无问题地获取分析信息。
标记事件的开始和结束时间总是相等的,这很有意义。
顺便说一下。 clEnqueueMarker
为deprecated in OpenCL 1.2,应替换为clEnqueueMarkerWithWaitList
。