【问题标题】:OpenCL sample program executes 10 times faster on CPU than on GPUOpenCL 示例程序在 CPU 上的执行速度比在 GPU 上快 10 倍
【发布时间】:2014-06-15 04:40:21
【问题描述】:

我对 OpenCL 编程完全陌生,我决定从下载的 AMD SDK 中运行一些示例。我的第一选择是Reduction sample。每次我在 CPU 上执行程序时,我的执行时间比在 GPU 上低 10 倍左右。在计算方面,GPU 不应该比 CPU 更好吗?

我的硬件:

  • CPU i5-2430M 2.40 Ghz
  • GPU AMD Radeon 6630M

在平台 0 (GPU) 上执行:

$ Reduction.exe -x 33554432 -i 5 -q -t -p 0
Platform 0 : Advanced Micro Devices, Inc.
Platform 1 : Intel(R) Corporation

Selected Platform Vendor : Advanced Micro Devices, Inc.
Device 0 :        Intel(R) Core(TM) i5-2430M CPU @ 2.40GHz Device ID is 009E83A0

Executing kernel for 5 iterations
-------------------------------------------
Exec: 1.64225

| Elements | Time(sec) | (DataTransfer + Kernel)Time(sec) |
|----------|-----------|----------------------------------|
| 33554432 | 1.83705   | 1.64225                          |

在平台 1 (CPU) 上执行:

$ Reduction.exe -x 33554432 -i 5 -q -t -p 1
Platform 0 : Advanced Micro Devices, Inc.
Platform 1 : Intel(R) Corporation
GPU not found. Falling back to CPU device

Selected Platform Vendor : Intel(R) Corporation
Device 0 :        Intel(R) Core(TM) i5-2430M CPU @ 2.40GHz Device ID is 040BEF1C

Executing kernel for 5 iterations
-------------------------------------------
Exec: 0.198049

| Elements | Time(sec) | (DataTransfer + Kernel)Time(sec) |
|----------|-----------|----------------------------------|
| 33554432 | 0.542269  | 0.198049                         |

【问题讨论】:

    标签: c++ parallel-processing opencl gpgpu


    【解决方案1】:

    从您的输出来看,它们似乎都在您的 CPU 上运行。

    第一个使用 AMD 平台,第二个使用 Intel,但您的 CPU 在两个平台上都显示为设备 0。尝试使用标志-d 1(使用设备1)或--device gpu

    编辑:查看 AMD 网站上的 system requirements 页面或 OpenCL conformant products list,您的 GPU 似乎不受支持。

    【讨论】:

    • 使用标志-d 1 给出输出deviceId should be 0--device gpu--device cpu 给出相同的结果。但你是对的,我的 GPU 没有列在“设备”部分。任何想法如何解决它?我已经为 OpenCL 安装了最新的 AMD SDK。
    • 很遗憾,我不认为 6630M 是受支持的设备,这可以解释为什么它没有出现。
    【解决方案2】:

    根据此规范页面 (gpuzoo.com),6630M 设备应支持 OpenCL 1.2。仔细检查您的驱动程序版本并确保它受支持。如果您仍然遇到问题,请尝试使用较旧的驱动程序。 driverscollection.com

    尝试在您的系统上运行 CLInfo 程序,看看是否一切正常。这应该会为您提供您支持的所有设备的完整详细信息。

    【讨论】:

    • 当我执行clinfo.exe时,我看到了“Turks”设备,实际上是6630M GPU。然后我检查了我的代码,我有 CL_DEVICE_TYPE_CPU 而不是 CL_DEVICE_TYPE_GPU。我可能会错误地更改某些内容,现在一切正常。 GPU约为。比 CPU 快两倍。
    • 我很高兴它现在对你有用。您是否尝试了足够大的数据集来获得最佳性能测量?
    【解决方案3】:

    似乎 AMD SDK 正在选择英特尔作为其计算设备。难怪为什么,因为它可能基于设备的优先级。

    如何解决,

    1) Retrieve deviceid's for all GPU/CPU which has OpenCL support for particular platform (In your case ONE AMD GPU + ONE INTEL CPU).
    1) After getting all device id's use device info to extract required device (You can use CL_DEVICE_VENDOR flag to extract the required deviceid)
    3) and then use this deviceid in all further device id reference.
    

    【讨论】:

      猜你喜欢
      • 2015-09-23
      • 2013-05-02
      • 1970-01-01
      • 2018-02-13
      • 1970-01-01
      • 2015-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多