我正在尝试使用性能分析信息来测量命令的执行时间。 这是我的代码
cl_event profEvent;
cl_ulong timeStart,timeStop;
ciErr=clEnqueueNDRangeKernel(cqCommandQueue,ckKernel,1,NULL,&szGlobalWorkSize,NULL,0,NULL,profEvent);
ciErr=clWaitForEvents(1,&profEvent);
clGetEventProfilingInfo(profEvent,CL_PROFILING_COMMAND_END,sizeof(timeStop),&timeStop,NULL);
clGetEventProfilingInfo(profEvent,CL_PROFILING_COMMAND_START,sizeof(timeStart),&timeStart,NULL);
printf("\nstart=%ld",timeStart);
printf("\nstop=%ld",timeStop);
printf("\nTime after profiling in SUB is \t\t%Ld",timeStart-timeStop);
根据网上找到的东西,这应该可以正常工作,但我得到以下输出
start=6492816
stop=0
Time after profiling in SUB is 6492816
error -58 in NDRANget
现在-58
表示无效事件,我无法弄清楚如何让事件发挥作用?
请告诉我如何纠正这个问题。
由于 PIYUSH
答案 0 :(得分:1)
事件必须作为指针传递,因此它可以在调用中返回事件对象。
应该是这样的:
ciErr=clEnqueueNDRangeKernel(cqCommandQueue,ckKernel,1,NULL,&szGlobalWorkSize,NULL,0,NULL,&profEvent);