我是OpenCL编程的新手,我决定从下载的AMD SDK中运行一些示例。我的第一选择是Reduction sample。每次我在CPU上执行程序时,我的执行时间比在GPU上低大约10倍。对于那些计算,GPU不比CPU好吗?
我的硬件:
在平台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 |
答案 0 :(得分:4)
根据您的输出判断,它们似乎都在您的CPU上运行。
第一个使用AMD平台,第二个使用Intel,但您的CPU在两个平台上都显示为设备0。尝试使用标记-d 1
(使用设备1)或--device gpu
。
编辑:查看system requirements页面,AMD网站或OpenCL conformant products list,看起来您的GPU不受支持。
答案 1 :(得分:1)
根据此规范页面(gpuzoo.com),6630M设备应支持OpenCL 1.2。仔细检查您的驱动程序版本并确保它受支持。如果您仍然遇到问题,请尝试使用较旧的驱动程序。 driverscollection.com
尝试在您的系统上运行CLInfo程序,看看它是否全部有效。这应该会为您提供所支持的所有设备的完整详细信息。
答案 2 :(得分:0)
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.