OpenCL 一个平台中只有一台设备

0 host gpu opencl

我从一开始就在学习 OpenCL,但对平台 = 主机 + 设备的想法感到困惑。在我的工作 PC 中,检测到 2 个平台:平台 0 只有 CPU,平台 1 只有 NVIDIA GPU。检测到的平台

这台电脑实际上也有一个英特尔 GPU,但我认为它不支持 OpenCL,所以它没有在这里显示。我的问题是:在 OpenCL 应用程序中,有主机和设备。根据我从书中的理解,通常主机和设备来自一个平台。然后在我的 PC 中,我需要使用 CPU 或 NVIDIA GPU 作为 OpenCL 应用程序的主机和设备。这是真的?

我试着自己搜索,一些答案确实帮助我了解更多关于这个主题的内容:什么是 opencl 中的主机?. 但是我的搜索并没有回答或确认关于主机和设备使用一种硬件的问题。

ape*_*lla 5

我认为你在这里混淆了一些术语。

  • 主机是CPU本身上执行的正常计划。
  • 这些平台由 OpenCL 驱动程序提供,代表一组设备和功能。
  • 这些设备是平台提供的可用于 OpenCL 的底层硬件。

一个平台可能提供多个不同的设备:例如,如果您安装了 Nvidia OpenCL 驱动程序,它会为每个支持的 GPU 提供一个 OpenCL 设备。同时,Intel 驱动程序提供 Intel CPU 作为 OpenCL 设备。

通常,您的程序流程如下所示:

  1. 使用查找 OpenCL 平台 clGetPlatformIds
  2. 查找clGetDeviceIds适用于您要使用的任何平台的OpenCL 设备。
  3. 创建OpenCL上下文,计划,命令队列,和内核使用clCreateContextclCreateProgram等等。
  4. 将必要的数据复制到缓冲区或内核参数。
  5. 使用clEnqueueNDRangeKernel.在一台或多台设备上执行内核。
  6. 从缓冲区复制数据