我知道CUDA中有函数clock(),您可以在其中放入内核代码并查询GPU时间.但我想知道OpenCL中是否存在这样的事情?有没有办法在OpenCL中查询GPU时间?(我正在使用NVIDIA的工具包).
没有OpenCL方法可以直接查询时钟周期.但是,OpenCL确实有一个分析机制,可以在计算设备上公开增量计数器.通过比较有序事件之间的差异,可以测量经过的时间.请参阅clGetEventProfilingInfo.
NVIDIA OpenCL SDK 有一个将 Inline PTX 与 OpenCL 结合使用的示例。时钟寄存器可通过内联 PTX 作为特殊寄存器 %clock 进行访问。%clock 在PTX:并行线程执行 ISA手册中进行了描述。您应该能够将 %%laneid 替换为 %%clock。
我从未使用 OpenCL 测试过它,但在 CUDA 中使用它。
请注意,编译器可能会重新排序或删除寄存器读取。