OpenCL один рабочий элемент против ЦП - PullRequest
0 голосов
/ 29 мая 2018

Я только начал с разработки OpenCL и пытался сравнить время выполнения CPU и GPU с одним рабочим элементом в действительно простой операции, выполнение которой должно занять некоторое время.Теперь я ожидаю, что один рабочий элемент занимает примерно столько же времени, сколько и процессор, или что он будет еще медленнее.В результате я получаю намного более быстрое выполнение для одного рабочего элемента, и для меня это не имеет смысла.

Это код ядра:

kernel void hello(global ulong *val) {
    size_t i = get_global_id(0);
    for (ulong k = 0; k < 100000; k++) {
        for (ulong j = 0; j < 1000000; j++) {
            val[i] += 1;
        }
    }
}

В коде хоста я измеряю время с помощью события:

cl_event event;
ret = clEnqueueTask(command_queue, kernel, 0, NULL, &event);
ret = clEnqueueReadBuffer(command_queue, memobj, CL_TRUE, 0, sizeof(cl_mem), val, 0, NULL, NULL);

ret = clFlush(command_queue);
ret = clFinish(command_queue);

clWaitForEvents(1, &event);

cl_ulong time_start;
cl_ulong time_end;

clGetEventProfilingInfo(event, CL_PROFILING_COMMAND_QUEUED, sizeof(cl_ulong), &time_start, NULL);
clGetEventProfilingInfo(event, CL_PROFILING_COMMAND_END, sizeof(cl_ulong), &time_end, NULL);

double nanoSeconds = (double) (time_end - time_start);
printf("OpenCl Execution time is: %f milliseconds \n",nanoSeconds / 1000000.0);

ЦПУ выполняет код C ++, который делает то же самое, что и ядро.Результаты одинаковы, но выполнение CPU занимает около 255 секунд, а GPU - всего 0,15 миллисекунды!Я неправильно измеряю время или есть разумное объяснение этому?

...