OpenCL平台中只有一个设备
我从一开始就在学习OpenCL,对平台=主机+设备的想法感到困惑。在我的工作PC中,有2个平台被检测到:平台0只有CPU,平台1只有英伟达GPU。p> 这台电脑实际上也有一个英特尔GPU,但我假设它不支持OpenCL,所以这里没有显示。我的问题是:在OpenCL应用程序中,有主机和设备。根据我在书中的理解,通常主机和设备来自一个平台。然后在我的PC中,我需要使用CPU或英伟达GPU作为OpenCL应用程序的主机和设备。这是真的吗OpenCL平台中只有一个设备,opencl,host,gpu,Opencl,Host,Gpu,我从一开始就在学习OpenCL,对平台=主机+设备的想法感到困惑。在我的工作PC中,有2个平台被检测到:平台0只有CPU,平台1只有英伟达GPU。p> 这台电脑实际上也有一个英特尔GPU,但我假设它不支持OpenCL,所以这里没有显示。我的问题是:在OpenCL应用程序中,有主机和设备。根据我在书中的理解,通常主机和设备来自一个平台。然后在我的PC中,我需要使用CPU或英伟达GPU作为OpenCL应用程序的主机和设备。这是真的吗 我试着自己搜索,一些答案确实帮助我更好地理解这个话题,比如这个:。
我试着自己搜索,一些答案确实帮助我更好地理解这个话题,比如这个:。但是关于主机和设备都使用一个硬件的问题,我的搜索并没有得到回答或证实。我想你在这里混淆了一些术语
- 主机是在CPU本身上执行的常规程序
- 平台由OpenCL驱动程序提供,代表一组设备和功能
- 设备是可用于OpenCL的底层硬件,由平台提供
平台可以提供多个不同的设备:例如,如果安装了英伟达OpenCL驱动程序,它为每个支持的GPU提供OpenCL设备。同时,Intel驱动程序将Intel CPU作为OpenCL设备提供
通常,您的程序流将如下所示:clGetPlatformIds
clgetDeviceID
查找OpenCL设备,无论您想使用哪个平台clCreateContext
,clCreateProgram
等创建OpenCL上下文、程序、命令队列和内核clEnqueueNDRangeKernel
在一个或多个设备上执行内核我想你把一些术语弄混了
- 主机是在CPU本身上执行的常规程序
- 平台由OpenCL驱动程序提供,代表一组设备和功能
- 设备是可用于OpenCL的底层硬件,由平台提供
平台可以提供多个不同的设备:例如,如果安装了英伟达OpenCL驱动程序,它为每个支持的GPU提供OpenCL设备。同时,Intel驱动程序将Intel CPU作为OpenCL设备提供
通常,您的程序流将如下所示:clGetPlatformIds
clgetDeviceID
查找OpenCL设备,无论您想使用哪个平台clCreateContext
,clCreateProgram
等创建OpenCL上下文、程序、命令队列和内核clEnqueueNDRangeKernel
在一个或多个设备上执行内核谢谢@apemanzilla的解释。因此,主机不是“硬件”,而是将在CPU上执行的“主程序”。然后在一个平台中,CPU也作为设备提供。在这种情况下,我可以使用CPU执行我的主机程序,也可以使用CPU作为OpenCL设备,按照您描述的工作流执行内核。我的理解正确吗?谢谢@apemanzilla的解释。因此,主机不是“硬件”,而是将在CPU上执行的“主程序”。然后在一个平台中,CPU也作为设备提供。在这种情况下,我可以使用CPU执行我的主机程序,也可以使用CPU作为OpenCL设备,按照您描述的工作流执行内核。我的理解正确吗?