OpenCL主机如何在自身上执行内核?

OpenCL主机如何在自身上执行内核?,opencl,Opencl,当我们有多核CPU时,OpenCL将其视为具有多个计算单元的单个设备,对于每个设备,我们可以创建一些命令队列。作为主机的CPU如何在自身上创建命令队列?我认为在这种情况下,它会变成多线程而不是并行计算。它是使用多线程的并行计算。当您为CPU设备使用OpenCL CPU驱动程序和排队内核时,驱动程序使用线程来执行内核,以充分利用所有CPU内核(并且通常使用SSE等向量指令来充分利用每个内核)。一些设备,包括大多数CPU设备,可以使用扩展将其划分为子设备。当您使用设备裂变时,您仍然得到并行处理,因为

当我们有多核CPU时,OpenCL将其视为具有多个计算单元的单个设备,对于每个设备,我们可以创建一些命令队列。作为主机的CPU如何在自身上创建命令队列?我认为在这种情况下,它会变成多线程而不是并行计算。

它是使用多线程的并行计算。当您为CPU设备使用OpenCL CPU驱动程序和排队内核时,驱动程序使用线程来执行内核,以充分利用所有CPU内核(并且通常使用SSE等向量指令来充分利用每个内核)。

一些设备,包括大多数CPU设备,可以使用扩展将其划分为子设备。当您使用设备裂变时,您仍然得到并行处理,因为当内核在某些CPU内核上运行时,主机线程可以执行其他任务

当不使用设备裂变时,CPU设备将在内核运行时阻塞主机程序。即使某些opencl实现在内核执行期间是非阻塞的,对主机的性能影响也太大,主机线程无法完成很多工作

所以它仍然是并行计算,但我猜主机应用程序的核心在技术上是内核执行期间的多线程