【问题标题】:Why Opencl kernel runs on Intel HD much faster than NVIDIA GeForce?为什么 Opencl 内核在 Intel HD 上的运行速度比 NVIDIA GeForce 快得多?
【发布时间】: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 基准测试,然后比较结果,以获得您期望的基线。

标签: profiling opencl nvidia


【解决方案1】:

例如,对于在 GeForce 上需要 12.519104 毫秒的内核, Intel HD 的运行时间仅为 1.427828 毫秒。

鉴于上述情况,Intel HD 更接近 CPU,并且对于诸如

之类的计算具有更少的延迟

c[i]=a[i]+b[i]

例如或线性复杂性算法,如体素化,其中数据不会在设备内存中重复使用,或者每个线程仅读取/写入一次。

  • igpu 的距离相关低访问延迟
  • igpu 的内存路径相关零拷贝
  • 算法复杂度

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-02
    • 2019-10-23
    • 1970-01-01
    • 2011-09-01
    • 2019-02-19
    • 2011-02-06
    • 2023-02-19
    • 2015-10-27
    相关资源
    最近更新 更多