我有一个使用OpenCL后端通过ViennaCL执行的自定义内核。虽然我知道如何一般地对ViennaCL进行基准测试(在文档中提供)以及如何在事件直接执行时执行OpenCL内核执行时间(OpenCL文档和Internet上的大量示例中都包含这些内容),我在关于如何将两者结合起来的损失。
考虑这个例子:
const char * kernel = ...; // some kernel text
viennacl::ocl::program &testProg = viennacl::ocl::current_context().add_program(kernel, "kernel");
testProg.add_kernel("TestKernel");
viennacl::ocl::kernel &TestKernel = testProg.get_kernel("TestKernel");
// provide kernel arguments, set local and global worker sizes
// START TIMING
viennacl::ocl::enqueue(TestKernel);
viennacl::ocl::get_queue().finish();
// END TIMING
到目前为止,我正在使用Boost定时器来测量ViennaCL通过PCI-Express向设备发送数据,排队并完成内核执行所需的完整时间。虽然这是可以接受的(因为我的基准测试非常依赖于数据发送速度,数据相当大),我还想测量内核实际执行的时间长度接受这个。
这是一个学术项目,因此准确的测量可以帮助我成就或破坏我的案例。