首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >1cpu设备上OpenCL中的并行性

1cpu设备上OpenCL中的并行性
EN

Stack Overflow用户
提问于 2012-03-11 23:25:09
回答 3查看 1.6K关注 0票数 0

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

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-12 16:10:46

简短的回答:是的,它将并行运行,不,不需要手动完成。

长长的答案:

此外,如果我对此设备使用单个命令队列,应用程序是否会自动将内核分配给不同的计算设备...

要么你需要修改你的OpenCL词汇表,要么我没听懂你的问题。你只有一个设备和核心!=设备!

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

如果您将多个内核排入一个队列(而不是通过等待事件连接它们!),则驱动程序可能会并行运行它们,也可能不会。

OpenCL的目标就是允许您并行计算工作项,而不管它是并行使用多个设备核心,还是只使用一个设备核心。

如果你对此感到困惑,请观看这些非常好(而且很长)的视频:http://macresearch.org/opencl

票数 0
EN

Stack Overflow用户

发布于 2012-03-16 11:12:02

cpu设备能达到与gpu相同的并行度吗?几乎总是没有。

gpu中的计算单元数量几乎总是多于cpu中的计算单元数量。例如,50美元可以得到一个具有10个计算单元的视频卡(Radeon 6450)。newegg上最便宜的8核cpu售价为189美元(台式机cpu)和269美元(服务器cpu)。

由于时钟速度的原因,cpu的计算单元将运行得更快,并且比gpu更好地执行分支代码。如果你的工作负载有很多条件语句,你需要一个cpu。gpu将对许多数据片段执行相同的指令。为了实现这一点,6450GPU每个计算单元有16个‘流处理器’。当您必须多次执行相同的(小型/中型)任务时,Gpus非常有用。矩阵乘法、n次计算、归约运算和一些排序算法在gpu/加速器硬件上比在cpu上运行得更好。

几周前,我更详细地回答了一个类似的问题。(This one)

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

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

票数 1
EN

Stack Overflow用户

发布于 2012-03-14 10:49:30

您如何确定OPENCL设备数量?我有一台带2个OpenCL计算单元的英特尔I3笔记本电脑?它有两个内核。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9656228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档