1 cpu设备上的OpenCL的并行性

是否有可能在多核CPU设备上实现与OpenCL中多个异构设备(如GPU和CPU)相同的并行性?

我有一个英特尔i5,并希望优化我的代码。 当我查询设备的平台时,我只能得到一个返回的设备:CPU。 我想知道如何使用它来优化我的代码。

另外,如果我为此设备使用单个命令队列,应用程序是否会自动将内核分配给不同的计算设备,还是必须由编程人员手动完成?


简短的回答:是的,它会并行运行,不需要手动执行。

长答案:

另外,如果我为这个设备使用了一个命令队列,应用程序会自动将内核分配给不同的计算设备[...]

要么你需要修改你的OpenCL词汇表或者我不理解你的问题。 你只有一个设备和核心!=设备!

一个CPU,不管它有多少个核心,都是一个设备。 GPU也是如此:一个拥有数百个内核的GPU只有一个设备。 您通过队列和设备的驱动程序将作业发送到设备。 你的工作可以(也将会)分解成工作项目。 然后,一些(多少取决于设备/驱动程序)工作项目并行执行。 在GPU上以及在CPU上,一个工作项目由一个内核执行。 (这可能不完全正确,但它是一个非常有用的抽象。)

如果您将一个队列中的多个内核队列化(不通过等待事件连接它们),则驱动程序可以并行或不并行地运行它们。

OpenCL的目标是允许您并行计算工作项,无论它是并行使用多个设备的内核还是仅使用一个设备内核。

如果这让你感到困惑,请观看这​​些非常好的(和长时间)视频:http://macresearch.org/opencl


你如何确定OPENCL器件数量? 我有英特尔I3笔记本电脑,可以给我2个OpenCL计算单元? 它有2个核心。

根据英特尔规格,I5-2300有4个内核并支持4个线程。 它不是超线程的。 我期望一个OpenCL调用查询的#设备给你一个4的计数。


一个cpu设备可以达到与gpu相同的并行性水平吗? 几乎总是不。

gpu中的计算单元数量几乎总是多于CPU中的数量。 例如,50美元可以为您带来10台计算单元的显卡(Radeon 6450)。 新蛋上最便宜​​的8核心cpus价格为189美元(台式机CPU)和269美元(服务器)。

由于时钟速度,CPU的计算单元运行得更快,并且执行分支代码比gpu好得多。 如果你的工作负载有很多条件语句,你需要一个CPU。 一个GPU将对许多数据执行相同的指令。 6450 gpu每个计算单元有16个“流处理器”来实现这一点。 当你必须多次执行相同的(小/中)任务时,Gpus非常棒。 矩阵乘法,n-boy计算,简化操作和一些排序算法在GPU /加速器硬件上运行得比在CPU上好得多。

几周前我回答了一个类似的问题,并提供了更多细节。 (这个)

回到关于“相同级别的并行性”的问题 - cpu不具有与gpus相同的并行性级别,除非gpu在执行实际内核时执行。

在你的i5系统上,只有一个CPU设备。 这代表整个CPU。 当您查询计算单元的数量时,opencl将返回您拥有的核心数量。 如果你想使用所有内核,你只需要在你的设备上运行内核,而opencl会为你使用所有的计算单元(内核)。

链接地址: http://www.djcxy.com/p/46421.html

上一篇: Parallelism in OpenCL on 1 cpu device

下一篇: AMD CPU versus Intel CPU openCL