4

我有一个自定义内核通过带有 OpenCL 后端的 ViennaCL 执行。虽然我知道如何在一般情况下对 ViennaCL 进行基准测试(在文档中提供)以及如何在直接使用事件执行 OpenCL 内核执行时间时执行它(在 OpenCL 文档和互联网上的大量示例中都有介绍),但我在关于如何将两者结合起来的损失。

考虑这个例子:

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 将数据发送到设备、排队和完成内核执行所需的完整时间。虽然这是可以接受的(因为我的基准测试非常依赖于数据发送速度,所以数据相当大),我还想测量内核的实际执行在这方面花费的时间。

这是一个学术项目,因此准确的测量可以帮助我成败。

4

0 回答 0