我正在使用 JOCL 库(由 JOGAMP 提供),我想知道是否可以测量将数据从主机传输到设备所花费的时间、内核所花费的时间以及分别返回结果所花费的时间?
目前我正在像这样调用我的内核:
queue.putReadBuffer(...).put1DKernel(...).putWriteBuffer(...)
回答我自己的问题 ;-) 过程如下...首先创建一个具有所需容量的 CLEventList,因为我只想测量内核执行,所以我将其设置为 1。
CLEventList list = new CLEventList(1);
现在,当您将内核设置到命令队列中时,您可以将列表添加为参数:
queue.putReadBuffer(...).put1DKernel(..., list).putWriteBuffer(...).finish();
之后,您可以通过调用获取时间:
long start = list.getEvent(0).getProfilingInfo(ProfilingCommand.START);
long end = list.getEvent(0).getProfilingInfo(ProfilingCommand.END);
long duration = end - start // time in nanoseconds
不要忘记在启用 Mode.PROFILING_MODE 的情况下初始化您的命令队列。