double elapsed = 0;
cl_ulong time_start, time_end;
for (unsigned i = 0; i < NUMBER_OF_ITERATIONS; ++i)
{
err = clEnqueueNDRangeKernel(queue, kernel, 1, NULL, &global, NULL, 0, NULL, &event); checkErr(err, "Kernel run");
err = clWaitForEvents(1, &event); checkErr(err, "Kernel run wait fro event");
err = clGetEventProfilingInfo(event, CL_PROFILING_COMMAND_START, sizeof(time_start), &time_start, NULL); checkErr(err, "Kernel run get time start");
err = clGetEventProfilingInfo(event, CL_PROFILING_COMMAND_END, sizeof(time_end), &time_end, NULL); checkErr(err, "Kernel run get time end");
elapsed += (time_end - time_start);
}
然后我将 elapsed
除以 NUMBER_OF_ITERATIONS
得到最终估计值。但是,我担心单个内核的执行时间太短,可能会对我的测量结果产生不确定性。如何测量所有 NUMBER_OF_ITERATIONS
内核组合所需的时间?
您能否推荐一种分析工具来帮助解决这个问题,因为我不需要通过编程方式访问这些数据。我使用 NVIDIA 的 OpenCL。
NUMBER_OF_ITERATIONS
实际上是任意的。目前我使用的是30。我需要一个好的数字来消除错误。 - user1096294