gpu - OpenCL中是否有一些方法可以像cuda的时间函数一样计算内核时间
问题描述
在 cuda 中,内核中有一个名为 time() 的函数来测试某些函数之间的延迟;例如,
__global__ void kmulu_dep512() {
start_time = clock();
repeat256(t *= t2 ; t2 *= t ; )
stop_time = clock();
}
我找不到 OpenCL 有类似的功能,是否有一些方法可以在 OpenCL 中解决以获得类似的效果?
解决方案
AFAIK,OpenCL 中没有这样的内置功能,但您可以通过主机 API 做到这一点:在 OpenCL 中查找有关事件分析信息的信息。
简而言之,您需要创建一个启用分析信息的命令队列,然后从与您感兴趣的内核对应的事件中查询命令开始/结束时间点:
g_cmd_queue = clCreateCommandQueue(... CL_QUEUE_PROFILING_ENABLE, NULL);
clEnqueueNDRangeKernel(g_cmd_queue, ..., &perf_event);
clWaitForEvents(1, &perf_event);
cl_ulong start = 0, end = 0;
clGetEventProfilingInfo(perf_event, CL_PROFILING_COMMAND_START, sizeof(cl_ulong), &start, NULL);
clGetEventProfilingInfo(perf_event, CL_PROFILING_COMMAND_END, sizeof(cl_ulong), &end, NULL);
推荐阅读
- python - 如果条件为真,则在 pandas 中创建一个新列并从现有列中赋值
- r - 在ggplot中删除部分填充图例
- c# - 无结构对象的序列化
- mongodb - MongoDB modifiedCount 不等于matchedCount
- javascript - Chrome.storage.local.get 在 React 中返回未定义?
- elasticsearch - Scroll API 返回的 Scroll id 太长
- c# - 如何在文件 asp.net 中下载 json 对象
- html - 选择所有电台时如何自动提交?
- spring - 如何使用 Spring Cloud Stream Binder 动态创建 Azure 服务总线订阅?
- php - Guzzle POST 返回 GuzzleHttp\Exception\ClientException 客户端错误:`POST