测量OpenCL 执行时间

  • Post author:
  • Post category:其他


如何使用OpenCL 自带的API来测量执行时间,因为执行时间很快,无法用秒表测量到执行过程中的时间。OpenCL API 提供了正确的测试内核执行时间的方法。

Create Queue with Profiling enabled

command_queue = clCreateCommandQueue(context, devices[deviceUsed], CL_QUEUE_PROFILING_ENABLE, &err);

Ensure to have executed all enqueued tasks

clFinish(command_queue);

Launch Kernel linked to an event

err = clEnqueueNDRangeKernel(command_queue, kernel, 1, NULL, workGroupSize, NULL, 0, NULL, &event);

Ensure kernel execution is finished

clWaitForEvents(1 , &event);

Get the Profiling data

cl_ulong time_start, time_end;
double total_time;

clGetEventProfilingInfo(event, CL_PROFILING_COMMAND_START, sizeof(time_start), &time_start, NULL);
clGetEventProfilingInfo(event, CL_PROFILING_COMMAND_END, sizeof(time_end), &time_end, NULL);

Caculate the Time

total_time = time_end - time_start;
printf("\nExecution time in milliseconds = %0.3f ms\n", (total_time / 1000000.0) );



版权声明:本文为u013625961原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。