OpenCL用于多核CPU运算

wcblem4ak 2013-03-19 01:46:07
这两天把OpenCL用在了多核cpu上,我用的i5-3470,开始跑了下nvidia提供的opencl样例程序“中值滤波”,我把代码更改了下,用i5的多核cpu跑了起来,测了一下,滤波一次,用cpu单核单线程串行运算时2.3秒滤波一次,用opencl给多核cpu进行并行计算,0.16秒滤波一次。i5-3470只有4核4线程啊。。。如何得到14倍左右的性能提升的?算法我也比较过代码了,基本上是一样的,只是一个写成了并行的kernel,一个是串行的for循环,没有相差太多

望高手能分析下原因,拯救我一下,寝食难安啊,万分感谢
...全文
806 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
stonebroken 2013-04-20
  • 打赏
  • 举报
回复
如果你的单核单线程是没有使用SIMD,而4核4线程用SIMD加速,理论上有4*4=16的加速比
卞亚涛 2013-04-03
  • 打赏
  • 举报
回复
引用 7 楼 wcblem4ak 的回复:
引用 6 楼 bianjunlan 的回复:引用 5 楼 wcblem4ak 的回复:引用 4 楼 bianjunlan 的回复:引用 楼主 wcblem4ak 的回复:这两天把OpenCL用在了多核cpu上,我用的i5-3470,开始跑了下nvidia提供的opencl样例程序“中值滤波”,我把代码更改了下,用i5的多核cpu跑了起来,测了一下,滤波一次,用cpu单核单……
嘿嘿,多多交流。
wcblem4ak 2013-04-02
  • 打赏
  • 举报
回复
引用 6 楼 bianjunlan 的回复:
引用 5 楼 wcblem4ak 的回复:引用 4 楼 bianjunlan 的回复:引用 楼主 wcblem4ak 的回复:这两天把OpenCL用在了多核cpu上,我用的i5-3470,开始跑了下nvidia提供的opencl样例程序“中值滤波”,我把代码更改了下,用i5的多核cpu跑了起来,测了一下,滤波一次,用cpu单核单线程串行运算时2.3秒滤波一次,用openc……
谢谢,我去找一下这本书看一下,我也觉得应该是单核运算过程中,计算以外的开销占用了时钟,导致计算效率的降低
卞亚涛 2013-04-01
  • 打赏
  • 举报
回复
引用 5 楼 wcblem4ak 的回复:
引用 4 楼 bianjunlan 的回复:引用 楼主 wcblem4ak 的回复:这两天把OpenCL用在了多核cpu上,我用的i5-3470,开始跑了下nvidia提供的opencl样例程序“中值滤波”,我把代码更改了下,用i5的多核cpu跑了起来,测了一下,滤波一次,用cpu单核单线程串行运算时2.3秒滤波一次,用opencl给多核cpu进行并行计算,0.16秒滤波……
你说的有道理。 我觉得这可能是由于不同情况下调用开销的问题,CPU情况下,有很多逻辑运算单元参与循环操作,opencl情况下,可能有些逻辑工作已经蕴涵于kernel的设计之中。 另外, opencl在cpu上实现时,还会精心处理关于内存的使用,以减少内存冲突的几率。 以上只是我的猜测,具体可以参见《Heterogeneous computing with OpenCl》第六章关于opencl在cpu上的实现部分。
wcblem4ak 2013-04-01
  • 打赏
  • 举报
回复
引用 4 楼 bianjunlan 的回复:
引用 楼主 wcblem4ak 的回复:这两天把OpenCL用在了多核cpu上,我用的i5-3470,开始跑了下nvidia提供的opencl样例程序“中值滤波”,我把代码更改了下,用i5的多核cpu跑了起来,测了一下,滤波一次,用cpu单核单线程串行运算时2.3秒滤波一次,用opencl给多核cpu进行并行计算,0.16秒滤波一次。i5-3470只有4核4线程啊。。。如……
谢谢你的回复,我确实在做opencl,以前做cuda开发的,最近转投到了opencl上,就是因为要做arm下的GPGPU 但是,我个人觉得,4核心cpu,单核计算能力和4核计算能力,最多只有4倍的差距,我不管opencl内部如何划分他的运算结构,硬件性能上的瓶颈理论上应该是无法跨越的,我只是想知道,到底是什么原因造成这个性能飞跃
卞亚涛 2013-03-30
  • 打赏
  • 举报
回复
引用 楼主 wcblem4ak 的回复:
这两天把OpenCL用在了多核cpu上,我用的i5-3470,开始跑了下nvidia提供的opencl样例程序“中值滤波”,我把代码更改了下,用i5的多核cpu跑了起来,测了一下,滤波一次,用cpu单核单线程串行运算时2.3秒滤波一次,用opencl给多核cpu进行并行计算,0.16秒滤波一次。i5-3470只有4核4线程啊。。。如何得到14倍左右的性能提升的?算法我也比……


lz,这个是opencl把cpu也映射成了它的计算设备,opencl能将cpu,gpu,fpga等计算设备统一映射到它的平台上。虽然你的cpu只有四核,但是在opencl平台模型中,它可以有更多的compute uint,每个compute可以有一个以上的work group。下面这张图是我在自己电脑上查询opencl设备时候的结果,我的电脑cpu也是4核(伪8核),你可以看看映射的资源数目。



建议你学习一下opencl,感觉将来尤其有用,尤其是很多嵌入式厂商也开始支持opencl。
FancyMouse 2013-03-29
  • 打赏
  • 举报
回复
你确定没有显卡参与计算?
FancyMouse 2013-03-29
  • 打赏
  • 举报
回复
那就可能是测时代码有问题。上代码。
wcblem4ak 2013-03-29
  • 打赏
  • 举报
回复
引用 1 楼 FancyMouse 的回复:
你确定没有显卡参与计算?
没有啊,opencl获取平台的时候,选用的就是intel的平台,获取device id的时候,使用的是CL_DEVICE_TYPE_CPU,显卡应该不会参与运算吧 又或者,intel在制作多核cpu opencl驱动时,把使自带的核心显卡也加入到运算中了?

2,408

社区成员

发帖
与我相关
我的任务
社区描述
高性能计算
社区管理员
  • 高性能计算社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧