MyFPGA Forum

 找回密码
 注册
搜索
查看: 3250|回复: 0
打印 上一主题 下一主题

【Altera SoC体验之旅】+ 从GPU程序员的角度谈谈使用体验

[复制链接]
跳转到指定楼层
1#
发表于 2015-7-23 09:16:22 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 BOB_Sun 于 2015-7-23 09:18 编辑

本文转自 http://bbs.eeworld.com.cn/thread-458116-1-1.html

说起GPU,大家第一反应就是打游戏。是的,GPU全称是Graphics Processing Unit,即图形处理单元,是计算机系统中专门负责图形图像绘制的硬件加速器。在没有GPU之前,计算机上显示图形界面是非常昂贵的,因为需要CPU做大量重复性的工作。

随着GPU的进一步发展,计算能力与日俱增,远远超越了同时代的CPU,于是很多学者提出了利用GPU进行通用计算的想法(GPGPU),后面经过GPU厂家的合纵连横,最终形成了以CUDA为代表的统一着色器架构,可以由用户控制GPU进行图形图像之外的通用并行计算。

OpenCL则是更为通用的异构并行计算模型,不仅支持CPU + GPU的计算架构,还支持诸如多核CPU、CPU + DSP、CPU + FPGA等特定架构。

今天,我想从一个GPU程序员的角度谈谈这次使用Altera SoC的体验。

作为GPU程序员,首先要熟悉一种GPU计算语言,我之前是从CUDA开始,后面接触了Open CL。从效率上看,CUDA远远超越OpenCL;但从可移植性上讲,OpenCL完虐CUDA,可以这么说,使用OpenCL开发的kernel程序,可以一字不改地运行在上面所述的CPU+GPU、多核CPU、CPU+DSP、CPU+FPGA等平台上。也就是说,真正做到了一次编写,处处运行(好像是Java的广告词)。随着硬件厂商如Intel, AMD,NVIDIA,ARM, Xilinx, Altera等对OpenCL的大力支持,后续性能方面也可能全面赶超CUDA。

我们从一个最常用的GEMM(矩阵乘)例子开始,分别在CPU + GPU平台、Altera SoC(ARM + FPGA)平台上运行同一个OpenCL程序。

OpenCL中,为了便于平台管理,提供了一系列API函数,可以便于用户在异构计算平台选择合适的设备。打开<CL/cl.h>就能看到这些API和详细的参数。在我的工程中,为了方便管理,采用C++面向对象的方式将这些API做了封装,掩盖了具体操作细节。

在CPU + GPU平台上运行结果如下:


在Altera SoC上运行的结果如下:


从速度上来看,同样的参数,GPU(Tesla K80)大约需要0.034816ms,而FPGA需要7.1ms,前者速度是后者的203倍。差距如此之大,主要因为GPU的计算资源丰富(4992个浮点计算核心)、主频高(820MHz),当然成本也很高(taobao上单K80大约38000RMB,此外还需要服务器、主板、电源等配套设施),功耗也高(300W,不包括服务器本身功耗);而FPGA平台则具有速度与面积互换的灵活性,实现成本较低(以DE1-SoC为例,差不多1500RMB,不需要额外的配套设施)、功耗较低(不到40W,整机功耗)。

通过这个例子可以看出,一个GPU程序员可以利用Altera提供的Open CL SDK灵活地将已有的程序迁移到FPGA上。

当然,后续工作仍需针对FPGA平台做特定的裁剪以达到性能要求。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|MyFPGA

GMT+8, 2024-4-24 22:10 , Processed in 0.044614 second(s), 18 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表