【问题标题】:OpenCL: Is kernel running on CPU or iGPU?OpenCL:内核是在 CPU 还是 iGPU 上运行?
【发布时间】:2016-03-09 07:57:14
【问题描述】:

我刚刚开始学习 OpenCL。这是在具有 Intel Haswell CPU + Intel HD Graphics 4600 的简单台式机上。现在我使用 PyOpenCL 和提供的示例。我的问题是,如果代码运行在 CPU 或 GPU 上?

platforms = cl.get_platforms()
platforms[0].get_devices()
[<pyopencl.Device 'Intel(R) Core(TM) i5-4570S CPU @ 2.90GHz' on 'Intel(R) OpenCL' at 0x706ac40>]

这看起来像 CPU。但是有什么区别吗,还是英特尔驱动程序决定了内核在哪里运行(CPU 或 GPU)?如果这只是 CPU,我该如何让它在 iGPU 上运行?

【问题讨论】:

  • 这看起来像是 CPU 部分,因为英特尔将 GPU 部分标记为 HD xxxx 或 Iris Pro。 platform 列表是否还有其他条目?
  • 不只有这一个。我还使用英特尔驱动程序更新工具来获取最新的驱动程序。

标签: python opencl pyopencl


【解决方案1】:

好吧,我从未使用过 pyopencl,但您应该能够在 pyopencl 和 C/C++ 中查询设备类型。

查看pyopencl文档:

class pyopencl.device_info
    ...
    TYPE
    VENDOR
    VENDOR_ID
    VERSION

您应该能够从当前设备的 device_info 实例中获取设备类型。

OpenCL 在标准中定义了三(四种)不同的设备类型:

CL_DEVICE_TYPE_CPU 
CL_DEVICE_TYPE_GPU 
CL_DEVICE_TYPE_ACCELERATOR 
CL_DEVICE_TYPE_DEFAULT

将您的实际设备的类型与CL_DEVICE_TYPE_CPUCL_DEVICE_TYPE_GPU 的pyopencl 表示进行比较,应该可以为您提供有关您的执行设备所需的信息。

【讨论】:

  • 这是一个 CPU。英特尔确实对两者进行了区分吗?如果你有一个带有 Intel HD Graphics 的 CPU,应该有 2 个设备吗?
  • 是的。但是,在 Linux 上为 Intel HD GPU 支持 OpenCL 的 Intel 驱动程序是相当新的。也许您缺少驱动程序:software.intel.com/en-us/articles/opencl-drivers 在这里您可以获取 linux 和 windows 驱动程序以在您的 Intel 设备上启用 OpenCL。
【解决方案2】:

我发现了问题。它只使用 CPU,没有列出 GPU。我在 Windows 7 上。我在 this 其他 SO 问题上找到的问题/解决方案。

Maxim Shevtsov(英特尔):这可能是真正的根本原因。当前处理器图形 OCL 设备在“无头”配置中不可用(未插入显示器)。

我正在通过远程桌面连接到所述 PC(不要问为什么...),因此它是无头的,因此 iGPU 不能作为 OpenCL 设备使用。

根据英特尔论坛上的this thread,使用最新驱动程序和 Windows 8 或更高版本可以正常工作。但不是在 Windows 7 中(据我所知,不是在 3rd Gen core-i 处理器上,例如 Ivy 桥)。

现在对我来说已经足够好了,因为我开始了。稍后我想实际看看我是否从 GPU 中获得了什么。

【讨论】:

  • GPU 应该好几个数量级。所以,不要对 CPU 结果得出结论。
  • 是的,如果做得对的话。但我真的只是出于个人兴趣才开始使用 OpenCL。所以目前性能并不是那么重要。只是想确保我正确理解了所有内容。
猜你喜欢
  • 2014-06-13
  • 2022-12-03
  • 2017-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-30
  • 2017-09-02
相关资源
最近更新 更多