OpenCL内核的计时执行 [英] Timing execution of OpenCL kernels

查看:461
本文介绍了OpenCL内核的计时执行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是为OpenCL定时内核执行时间的正确方法吗?我很喜欢使用c ++ wrapper(不幸的是没有很多时间的例子)。

Is this a correct way of timing kernel execution time for OpenCL? I am quite keen on using the c++ wrapper (which unfortunately does not have many examples of timings).

cl::CommandQueue queue(context, device, CL_QUEUE_PROFILING_ENABLE, &err);
checkErr(err, "Cannot create the command queue");

/* Warm-up */
for (unsigned i = 0; i < NUMBER_OF_ITERATIONS; ++i)
{
    err = queue.enqueueNDRangeKernel(kernel, cl::NullRange, cl::NDRange(512), cl::NullRange, NULL, NULL);
    checkErr(err, "Cannot enqueue the kernel");
}
queue.finish();

/* Time kernels */
cl::Event start, stop;
queue.enqueueMarker(&start);
for (unsigned i = 0; i < NUMBER_OF_ITERATIONS; ++i)
{
    err = queue.enqueueNDRangeKernel(kernel, cl::NullRange, cl::NDRange(512), cl::NullRange, NULL, NULL);
    checkErr(err, "Cannot enqueue the kernel");
}
queue.enqueueMarker(&stop);

stop.wait();
cl_ulong time_start, time_end;
double total_time;
start.getProfilingInfo(CL_PROFILING_COMMAND_END, &time_start);
stop.getProfilingInfo(CL_PROFILING_COMMAND_START, &time_end);
total_time = time_end - time_start;

/* Results */
cout << "Execution time in milliseconds " << total_time / (float)10e6 / NUMBER_OF_ITERATIONS << endl;


推荐答案

我认为你的方法应该工作很好不)。或者,如果您想要调用每个调用,您可以将一个事件传递给 enqueueNDRangeKernel 并调用 getProfilingInfo c $ c> enqueueNDRangeKernel 。

I think your approach should work just fine (is it not). Alternately, if you want to time each call, you can pass an event to enqueueNDRangeKernel and call getProfilingInfo on that enqueueNDRangeKernel.

cl::Event evt;
err = queue.enqueueNDRangeKernel(kernel, cl::NullRange, cl::NDRange(512), cl::NullRange, NULL, &evt);
evt.wait();
elapsed += evt.getProfilingInfo<CL_PROFILING_COMMAND_END>() -
            evt.getProfilingInfo<CL_PROFILING_COMMAND_START>();

这篇关于OpenCL内核的计时执行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆