OpenCL单个工作项与CPU

时间:2018-05-29 14:08:19

标签: opencl gpu cpu

我刚刚开始使用OpenCL开发,我试图将CPU和GPU的执行时间与一个工作项进行比较,这个操作应该花费一些时间来执行。现在我期待一个工作项与CPU占用大约相同的时间,或者它会更慢。我得到的结果是在单个工作项上执行速度更快,对我来说没有意义。

这是内核代码:

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);

CPU运行的C ++代码与内核完全相同。结果是一样的,但CPU执行大约需要255秒,GPU只需0.15毫秒! 我是在测量时间错误还是对此有合理的解释?

0 个答案:

没有答案