找回密码
 注册
关于网站域名变更的通知
查看: 180|回复: 1
打印 上一主题 下一主题

转——从GPU程序员的角度谈谈使用体验

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-4-17 14:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
转——从GPU程序员的角度谈谈使用体验
. [$ }5 w1 q' e( B8 H
说起GPU,大家第一反应就是打游戏。是的,GPU全称是Graphics Processing Unit,即图形处理单元,是计算机系统中专门负责图形图像绘制的硬件加速器。在没有GPU之前,计算机上显示图形界面是非常昂贵的,因为需要CPU做大量重复性的工作。) R1 O  K0 v! h/ Q

  [7 J; ~* ^( ^# G+ K随着GPU的进一步发展,计算能力与日俱增,远远超越了同时代的CPU,于是很多学者提出了利用GPU进行通用计算的想法(GPGPU),后面经过GPU厂家的合纵连横,最终形成了以CUDA为代表的统一着色器架构,可以由用户控制GPU进行图形图像之外的通用并行计算。
- i; i- I% p. y' f+ n9 S* x) h
: O4 J! }- M3 A! i0 B  pOpenCL则是更为通用的异构并行计算模型,不仅支持CPU + GPU的计算架构,还支持诸如多核CPU、CPU + DSP、CPU + FPGA等特定架构。
! S7 Q! ]7 L+ H  o& T; m: T& E% V; l; I: [& \. p: L
* E# K7 R1 |9 z& ]

; ~& W3 C( P/ ?0 L/ M8 i( B- e今天,我想从一个GPU程序员的角度谈谈这次使用Altera SoC的体验。. n( ^4 v4 n( o4 G( Y

* o) m' D0 k7 x7 R4 W5 K% p. x% b
  \& A0 a' q* \  J
9 f6 ~( W& {9 T( h# u( L5 O0 @( U" Y作为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。& Y& ^+ p* C! `! U2 g( s1 t
! {( \4 H) d$ O, k4 Y* U3 H% N

. S+ s7 Y0 L/ x, L2 R$ c4 Y3 c7 J( t6 }8 t" f
我们从一个最常用的GEMM(矩阵乘)例子开始,分别在CPU + GPU平台、Altera SoC(ARM + FPGA)平台上运行同一个OpenCL程序。
$ g. f: K! e- O0 s1 ]9 k) e8 r! X
# d3 ?) {  f! |( ^" z6 h2 N2 S/ e

) I9 }  X3 }8 o6 I0 aOpenCL中,为了便于平台管理,提供了一系列API函数,可以便于用户在异构计算平台选择合适的设备。打开<CL/cl.h>就能看到这些API和详细的参数。在我的工程中,为了方便管理,采用C++面向对象的方式将这些API做了封装,掩盖了具体操作细节。3 j- W' ?( w* R! s. \" S% I- N
% z; D( o3 `6 n+ a. p
0 w- c% }, o$ l
- i( _. X" @2 l: I( Q
在CPU + GPU平台上运行结果如下:
, Y/ F. w# I0 g7 r" _2 X1 E/ H. k
0 V* t9 U7 \5 a5 X- b! ? " n( W! f& N8 o# P5 s. s
! b& k/ y6 v+ l& F3 |

, ^. x/ P, C' E/ M在Altera SoC上运行的结果如下:/ n3 v. U) S. F* V
# p- s2 d. N0 |1 t
6 Z: a- C7 h" G) @/ o- C6 P( K% m
0 p; Z) j- d8 S. Y2 }) V2 ?2 T

4 O' J$ w9 x& s" s
: y: w2 o3 B; _  Z+ C3 L( A从速度上来看,同样的参数,GPU(Tesla K80)大约需要0.034816ms,而FPGA需要7.1ms,前者速度是后者的203倍。差距如此之大,主要因为GPU的计算资源丰富(4992个浮点计算核心)、主频高(820MHz),当然成本也很高(taobao上单K80大约38000RMB,此外还需要服务器、主板、电源等配套设施),功耗也高(300W,不包括服务器本身功耗);而FPGA平台则具有速度与面积互换的灵活性,实现成本较低(以DE1-SoC为例,差不多1500RMB,不需要额外的配套设施)、功耗较低(不到40W,整机功耗)。
5 U, a  t# j$ q( h7 ]: o
1 k; d  J# e% K: J9 e2 D3 u$ r2 v* z3 I* s) ^

! `2 b2 W& |+ \$ T" c$ Z# i$ ~3 i
- E* E; l$ u& Q' |# a0 q- g2 g, H
6 N" V5 ~0 V4 B3 g9 H% ?' P) H! Y通过这个例子可以看出,一个GPU程序员可以利用Altera提供的Open CL SDK灵活地将已有的程序迁移到FPGA上。$ m, U! @6 e' F) x0 c0 Y
& ?: t4 S6 J) O& p% Y( p
当然,后续工作仍需针对FPGA平台做特定的裁剪以达到性能要求。# \: H7 K5 @, _

该用户从未签到

2#
发表于 2019-4-17 16:03 | 只看该作者
讲的很有深度 学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-30 12:27 , Processed in 0.093750 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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