У меня есть собственное ядро, выполняющееся через ViennaCL с бэкэндом OpenCL. Хотя я знаю, как тестировать 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, постановки в очередь и завершения выполнения ядра. Хотя это приемлемо (поскольку то, что я тестирую, очень сильно зависит от скорости отправки данных, данные довольно большие), я также хотел бы измерить, какая доля времени фактическая выполнение ядра принимает в этом.
Это научный проект, поэтому точные измерения могут помочь мне сделать или разбить мой случай.
Задача ещё не решена.
Других решений пока нет …