【发布时间】:2017-03-20 04:29:54
【问题描述】:
我的笔记本电脑有一个 GeForce 960M GTX 和一个 Intel HD 530。我正在运行一个内核并使用以下代码来使用 openCL 的分析器:
err = clEnqueueNDRangeKernel(queue, voxelization_kernel, 1, NULL, &processed_global_size,
&local_size, 0, NULL, &kernel_event);
err = clWaitForEvents(1, &kernel_event);
clGetEventProfilingInfo(kernel_event, CL_PROFILING_COMMAND_START,
sizeof(time_start), &time_start, NULL);
clGetEventProfilingInfo(kernel_event, CL_PROFILING_COMMAND_END,
sizeof(time_end), &time_end, NULL);
elapsed_time = time_end - time_start;
printf("Elapsed time in kernel: %f ms\n", (float)(time_end - time_start)/(float)1000000);
在 Intel 上的运行时间比 GeForce 快 10 倍。例如,对于在 GeForce 上需要 12.519104 毫秒的内核,在 Intel HD 上经过的时间仅为 1.427828 毫秒。其他数据集也存在相同的模式。这对我来说看起来很奇怪,因为 GeForce 应该是一个更好的设备。我在分析中做错了什么还是我做错了什么?
【问题讨论】:
-
性能对您未在问题中指定的工作组大小、内存访问模式等很敏感。对于一个简单的答案,这个主题非常广泛。您可以先尝试在您的两台设备上运行第 3 方 OpenCL 基准测试,然后比较结果,以获得您期望的基线。