есть ли какой-нибудь метод в OpenCL для подсчета времени ядра, например, функция времени cuda - PullRequest
1 голос
/ 28 мая 2020

В cuda в ядре есть функция с именем time () для проверки задержки между некоторыми функциями; например,

__global__ void kmulu_dep512() {
start_time = clock(); 
repeat256(t *= t2 ; t2 *= t ; )
stop_time = clock();
}

Я не могу найти, что OpenCL имеет аналогичную функцию, есть ли какой-нибудь метод работы в OpenCL, чтобы получить аналогичный эффект?

1 Ответ

1 голос
/ 01 июня 2020

AFAIK, такого встроенного в OpenCL нет, но вы можете сделать это через хост-API: ищите информацию о профилировании событий в OpenCL.

Вкратце, вам нужно будет создать очередь команд с включенной информацией профилирования, а затем запросить точки времени начала / окончания команды из события, соответствующего интересующему вас ядру:

g_cmd_queue = clCreateCommandQueue(... CL_QUEUE_PROFILING_ENABLE, NULL);
clEnqueueNDRangeKernel(g_cmd_queue, ..., &perf_event);
clWaitForEvents(1, &perf_event);
cl_ulong start = 0, end = 0;
clGetEventProfilingInfo(perf_event, CL_PROFILING_COMMAND_START, sizeof(cl_ulong), &start, NULL);
clGetEventProfilingInfo(perf_event, CL_PROFILING_COMMAND_END, sizeof(cl_ulong), &end, NULL);
...