基于我的经验,在双插槽主板上你仍然只有一个CPU设备。操作系统通常会隐藏核心是否位于同一物理CPU或不同的物理CPU上,即使在NUMA机器上(当然你可以获得详细信息,但这并不是那么简单)。我认为这种行为在SMP机器上是相当合理的,因为物理核心的位置几乎没有什么区别(对于GPU而言,访问其他设备内存非常麻烦;对于CPU,将所有线程固定到同一个物理CPU上很少值得担忧),因此将两个物理CPU融合成一个OpenCL设备几乎没有任何缺点,并且它具有简化使用的优点。 然而,我没有在OpenCL规范中看到这一点,所以这完全是实现特定的,并不能保证总是成立。
在多 CPU 环境或者多核 CPU 上,可能有不止一个设备。以 IBM 的 Cell 为例,OpenCL 驱动程序将 9 核 CPU 视为两个不同的设备。其中一个是 PPU(主处理器单元)的设备,另一个代表 SPU(协处理器单元),具有 CL_DEVICE_TYPE_ACCELERATOR 档案配置文件。 http://oscarbg.blogspot.com/2009/11/about-imd-open.html