5596|6

107

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

【Altera SoC体验之旅】+ 从GPU程序员的角度谈谈使用体验 [复制链接]

  本帖最后由 zhaoyongke 于 2015-3-23 18:53 编辑

说起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函数,可以便于用户在异构计算平台选择合适的设备。打开就能看到这些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平台做特定的裁剪以达到性能要求。
此帖出自Altera SoC论坛

最新回复

本帖最后由 lelee007 于 2015-3-24 10:34 编辑 这玩意也算挺复杂的,还要分host和device,host上做管理,包括任务调度和任务分配,device上运行实际的数据处理,完了host去把处理结果再读回来。想这玩意也挺麻烦的,特别是device上的优化手段挺多,各种优化规则,比c的编译优化复杂多了 个人觉得,大项目上,底层逻辑比较复杂的设计,适合用opencl来开发,当然,玩这玩意,还得不差钱才行,因为资源需求是很高的,底层都是opencl sdk封装好的一些单元,没法进行RTL或者门级优化。因为底层都是supplier提供的一些经过验证的单元,在实际应用开发过程中,不需要再进行最底层的debug,可以缩短开发周期,如果再加上对于各种优化规则摸得比较透的话,开发高性能应用,确实会easy很多   详情 回复 发表于 2015-3-24 10:27

赞赏

2

查看全部赞赏

点赞 关注
个人签名Caffe please.
 
 

回复
举报

5979

帖子

8

TA的资源

版主

沙发
 
写的不错,虽然不懂opencl,但是还是过来学习一下;

我有一个问题在最后一段提到“GPU程序员可以利用Altera提供的Open CL SDK灵活地将已有的程序迁移到FPGA上”

你确认opencl编译后的文件是运行的soc的fpga上而不是arm上吗?

此帖出自Altera SoC论坛

点评

这个问题好。 OpenCL程序,特指.cl文件中的程序,必须是运行在设备(包括GPU、FPGA)上的。 为了让OpenCL程序运行在设备上,在ARM中运行的那部分配置、管理程序,称为主机程序(Host)。 具体  详情 回复 发表于 2015-3-23 22:58
个人签名生活就是油盐酱醋再加一点糖,快活就是一天到晚乐呵呵的忙
===================================
做一个简单的人,踏实而务实,不沉溺幻想,不庸人自扰
 
 
 

回复

107

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
chenzhufly 发表于 2015-3-23 22:00
写的不错,虽然不懂opencl,但是还是过来学习一下;

我有一个问题在最后一段提到“GPU程序员可以利用Altera提供的Open CL SDK灵活地将已有的程序迁移到FPGA上”

你确认opencl编译后的文件是运行的soc的fpga上而不是arm上吗?

这个问题好。



OpenCL程序,特指.cl文件中的程序,必须是运行在设备(包括GPU、FPGA)上的。



为了让OpenCL程序运行在设备上,在ARM中运行的那部分配置、管理程序,称为主机程序(Host)。



具体细节参考我之前的帖子。
此帖出自Altera SoC论坛
个人签名Caffe please.
 
 
 

回复

1025

帖子

1

TA的资源

纯净的硅(高级)

4
 
很好,写的不错。opencl略有所知,呵呵,看来撸主是高手。原来在hw的时候,有个兄弟在nv的gpu上做opencl的开发,后来还给我们普及了一把,不过说实话,我当时没太弄明白是怎么回事,也没啥兴趣深入去研究。上次altera搞了场规模盛大的opencl培训,才算对opencl有了比较清晰的认识,只是基于altera soc的哈
此帖出自Altera SoC论坛

点评

谢谢,我这次比赛就是冲着Open CL过来的,哈哈  详情 回复 发表于 2015-3-24 14:21
 
 
 

回复

1025

帖子

1

TA的资源

纯净的硅(高级)

5
 
本帖最后由 lelee007 于 2015-3-24 10:34 编辑

这玩意也算挺复杂的,还要分host和device,host上做管理,包括任务调度和任务分配,device上运行实际的数据处理,完了host去把处理结果再读回来。想这玩意也挺麻烦的,特别是device上的优化手段挺多,各种优化规则,比c的编译优化复杂多了

个人觉得,大项目上,底层逻辑比较复杂的设计,适合用opencl来开发,当然,玩这玩意,还得不差钱才行,因为资源需求是很高的,底层都是opencl sdk封装好的一些单元,没法进行RTL或者门级优化。因为底层都是supplier提供的一些经过验证的单元,在实际应用开发过程中,不需要再进行最底层的debug,可以缩短开发周期,如果再加上对于各种优化规则摸得比较透的话,开发高性能应用,确实会easy很多
此帖出自Altera SoC论坛

点评

Open CL适合做项目集成,而单个模块的开发我觉得还是直接从RTL开始比较靠谱。  详情 回复 发表于 2015-3-24 14:24
 
 
 

回复

107

帖子

0

TA的资源

一粒金砂(中级)

6
 
lelee007 发表于 2015-3-24 10:24
很好,写的不错。opencl略有所知,呵呵,看来撸主是高手。原来在hw的时候,有个兄弟在nv的gpu上做opencl的开发,后来还给我们普及了一把,不过说实话,我当时没太弄明白是怎么回事,也没啥兴趣深入去研究。上次altera搞了场规模盛大的opencl培训,才算对opencl有了比较清晰的认识,只是基于altera soc的哈

谢谢,我这次比赛就是冲着Open CL过来的,哈哈
此帖出自Altera SoC论坛
个人签名Caffe please.
 
 
 

回复

107

帖子

0

TA的资源

一粒金砂(中级)

7
 
lelee007 发表于 2015-3-24 10:27
这玩意也算挺复杂的,还要分host和device,host上做管理,包括任务调度和任务分配,device上运行实际的数据处理,完了host去把处理结果再读回来。想这玩意也挺麻烦的,特别是device上的优化手段挺多,各种优化规则,比c的编译优化复杂多了

个人觉得,大项目上,底层逻辑比较复杂的设计,适合用opencl来开发,当然,玩这玩意,还得不差钱才行,因为资源需求是很高的,底层都是opencl sdk封装好的一些单元,没法进行RTL或者门级优化。因为底层都是supplier提供的一些经过验证的单元,在实际应用开发过程中,不需要再进行最底层的debug,可以缩短开发周期,如果再加上对于各种优化规则摸得比较透的话,开发高性能应用,确实会easy很多

Open CL适合做项目集成,而单个模块的开发我觉得还是直接从RTL开始比较靠谱。
此帖出自Altera SoC论坛
个人签名Caffe please.
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表