使用了类似的代码来做android下opencl的时间测试:

cl::CommandQueue queue(context, devices[0], CL_QUEUE_PROFILING_ENABLE, &err);

cl::Event event;

//...

event.wait();

//

cl_ulong startTime=0, endTime=0, queued=0, submit=0;

event.getProfilingInfo(CL_PROFILING_COMMAND_START, &startTime);

event.getProfilingInfo(CL_PROFILING_COMMAND_END, &endTime);

event.getProfilingInfo(CL_PROFILING_COMMAND_QUEUED, &queued);

event.getProfilingInfo(CL_PROFILING_COMMAND_SUBMIT, &submit);

P("end-start:%fms", float(endTime - startTime)/1000000.0);

P("end-queue:%fms", float(endTime - queued)/1000000.0);

P("end-submit:%fms", float(endTime - submit)/1000000.0);

打印出来:

end-start:119.574272ms

end-queue:323.316224ms

end-submit:323.314176ms

而整个函数的执行时间只有 79.248ms

这个profile统计出来的时间完全不准。暂未找到原因。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐