OpenCL 在一个平台中只有一个设备
OpenCL only one device in a platform
我从头开始学习 OpenCL,对 platform = host + device 的想法感到困惑。在我的工作 PC 中检测到 2 个平台:平台 0 只有 CPU,平台 1 只有 NVIDIA GPU。 Detected platforms
这台 PC 实际上也有一个 Intel GPU,但我认为它不支持 OpenCL,所以这里没有显示。我的问题是:在 OpenCL 应用程序中有主机和设备。根据我从书中的理解,通常主机和设备来自一个平台。然后在我的 PC 中,我需要使用 CPU 或 NVIDIA GPU 作为 OpenCL 应用程序的主机和设备。这是真的吗?
我试着自己搜索了一下,有些答案确实帮助我对这个话题有了更多的了解,比如这个:What is a host in opencl?。但是我的搜索没有回答或确认关于主机和设备使用一个硬件。
我认为您在这里混淆了一些术语。
- host 是在 CPU 本身上执行的常规程序。
- 平台 由 OpenCL 驱动程序提供,代表一组设备和功能。
- 设备是由平台提供的可用于 OpenCL 的底层硬件。
一个平台可能会提供多个不同的设备:例如,如果您安装了 Nvidia OpenCL 驱动程序,它会为每个支持的 GPU 提供一个 OpenCL 设备。同时,Intel 驱动程序提供 Intel CPU 作为 OpenCL 设备。
通常,您的程序流程如下所示:
- 使用
clGetPlatformIds
查找 OpenCL 平台
- 使用
clGetDeviceIds
查找您要使用的任何平台的 OpenCL 设备。
- 使用
clCreateContext
、clCreateProgram
等创建 OpenCL 上下文、程序、命令队列和内核
- 将必要的数据复制到缓冲区或内核参数。
- 使用
clEnqueueNDRangeKernel
在一台或多台设备上执行内核。
- 从缓冲区复制数据
我从头开始学习 OpenCL,对 platform = host + device 的想法感到困惑。在我的工作 PC 中检测到 2 个平台:平台 0 只有 CPU,平台 1 只有 NVIDIA GPU。 Detected platforms
这台 PC 实际上也有一个 Intel GPU,但我认为它不支持 OpenCL,所以这里没有显示。我的问题是:在 OpenCL 应用程序中有主机和设备。根据我从书中的理解,通常主机和设备来自一个平台。然后在我的 PC 中,我需要使用 CPU 或 NVIDIA GPU 作为 OpenCL 应用程序的主机和设备。这是真的吗?
我试着自己搜索了一下,有些答案确实帮助我对这个话题有了更多的了解,比如这个:What is a host in opencl?。但是我的搜索没有回答或确认关于主机和设备使用一个硬件。
我认为您在这里混淆了一些术语。
- host 是在 CPU 本身上执行的常规程序。
- 平台 由 OpenCL 驱动程序提供,代表一组设备和功能。
- 设备是由平台提供的可用于 OpenCL 的底层硬件。
一个平台可能会提供多个不同的设备:例如,如果您安装了 Nvidia OpenCL 驱动程序,它会为每个支持的 GPU 提供一个 OpenCL 设备。同时,Intel 驱动程序提供 Intel CPU 作为 OpenCL 设备。
通常,您的程序流程如下所示:
- 使用
clGetPlatformIds
查找 OpenCL 平台
- 使用
clGetDeviceIds
查找您要使用的任何平台的 OpenCL 设备。 - 使用
clCreateContext
、clCreateProgram
等创建 OpenCL 上下文、程序、命令队列和内核 - 将必要的数据复制到缓冲区或内核参数。
- 使用
clEnqueueNDRangeKernel
在一台或多台设备上执行内核。 - 从缓冲区复制数据