EDA365电子论坛网

标题: Matlab应用之GPU加速 [打印本页]

作者: haidaowang    时间: 2020-1-20 09:44
标题: Matlab应用之GPU加速

6 W  e+ R" j2 C. ~- w8 i由于GPU近几年地迅速发展,GPU在多线程计算等方面逐渐超越CPU成为计算的主力军。而Matlab是常用的数学应用软件,现在讲解一下如何在Matlab中使用GPU加速计算$ r, |, h! h! ~: _0 Z

' ^. Z; g7 X8 v# C) T( e/ H) ?文章目录
7 ], `0 |. `& v$ t. O/ z       0. 必要条件
1 d' b% a. z* m5 j       1.给GPU传输数据
6 s) x6 O; p, j. x& k              1.1 CPU的数据复制到GPU9 l1 U) [6 T5 j1 z- u: c
              1.2 直接在GPU上设置数据:$ X7 d2 _. d+ \. U8 ]6 L; w" W  A
       2.数据在GPU上运算+ Q$ Z4 L, `9 q/ j: Q
       3.GPU数据回传
* l3 K0 O% S& ]3 W       4.使用技巧
  t, H  `1 T+ P: X0 [              4.1 如果没有并行计算不建议使用GPU3 B0 k# x) e* _( {8 ]5 A
              4.2 如果没有Nvidia显卡或者显卡驱动& V4 C/ ?9 ^" R) c# u
              4.3 双精度尽量转换为单精度" v; C! K( v' A- Y1 X
       附录7 e3 |2 r- O2 K/ w" D

/ k) z) l) }+ {; z% s) F: i) a2 y4 \. n# g, u: U! _, U$ n; x3 G

! {! r3 Y% k$ c" F" E' l5 ?& b0. 必要条件: R5 M0 c, G1 g4 Z+ K: _' R: F' U
% B1 P4 p+ J1 ^( u
要想在Matlab中使用GPU加速有两个必须的条件# ]- \& Y) P/ b8 n2 X4 ]

- F. q( C3 X1 i/ x- s
* x$ t5 w7 E- }6 J; H1 w4 {
8 W. C8 G2 _" P) b/ n' ^' C+ k+ |1.给GPU传输数据0 C; f+ X5 w: P! f" Z: [% z/ p- B

8 w, t* h- G8 r1.1 CPU的数据复制到GPU/ e2 K! |( G, k$ b; t! R% t6 o
5 N! `" S1 _7 V
在使用GPU计算的时候,只需要将CPU的数据复制到GPU中即可。+ z; N2 s5 p8 m7 r. K' N) ~

6 {1 H# }/ ?2 B; y8 H7 x8 G5 G" q+ o- U
- i; U" w3 i" R- A' {6 t6 k
上边是对数据的名称做了修改,也可以直接进行重新赋值。
  }# A- y" A% g- v0 j
3 J0 H* t/ k. M  ]& S& j6 l% x$ C" J# R7 N7 @2 k0 B

5 S. E8 H1 y- x0 C+ y1.2 直接在GPU上设置数据:( L4 T: L" w4 C" ~

% q5 v* k* W: n2 I( _8 L4 I
+ P, P& k' f, [8 _7 X# s
. c( e3 W( S1 {( Y可以对0矩阵以及1矩阵直接进行复制,但是在程序后边需要标注使用gpuArray。4 K5 e9 t3 Y* Y" V# p0 S- I
4 `; s3 D- P' b+ ~8 Y

/ E- ^% D8 Q6 t( ~( a: i( _6 a6 P# B% c6 U6 P" z. s
随机矩阵的产生。$ O: B2 K+ L0 [! S6 d" ~! Q

; u# T$ Y+ L* ?2.数据在GPU上运算
; R4 q4 n" M$ K; C4 Y) l8 s3 X/ [2 i: U$ f2 r
在GPU可以正常运行基本的运算,与正常矩阵计算方法相同
) u$ L* n, ^& C( L' K4 q- a, e9 s& n- c; d" n% O
: L7 H) F) W  Q' }; [0 G
2 ?/ Y8 i+ Y4 Y8 u( x7 B; T) x
具体的可以运行的运算可以使用命令8 Q' c2 Z0 E* P9 I* b, ?6 X
! |& Q0 T$ q1 ^: h8 P7 }
0 i  e8 L! \  s' C1 [+ z/ Q* G# i

. a% S7 L0 q0 ^/ Q! F! G. ]( n" S进行查看,Matlab可以在GPU运行的具体运算可以查看附录,附录中是Matlab给出的结果。
. Z$ L# j0 r( C) j; V* D) h) E2 k9 C% n' I/ L; P
3.GPU数据回传
* t! ]; x, }* D! r$ j4 j* `
. Q; _% a* O, y8 T! ?+ L5 V
! s. ^" ]2 A) E6 V- p, {4 r* j2 R0 l, u, |
直接使用上边的命令就能够将GPU中的数据回传给CPU。
1 _: B+ v0 k8 c6 E5 {3 U( ?' s+ G
6 f9 D" T1 n1 j' s4 l1 W, E4.使用技巧: M$ l  q8 q8 P* W

+ u4 K; M, e/ t5 g4 ^  ]0 E5 n+ N4.1 如果没有并行计算不建议使用GPU
3 Q8 t: S! m& ^) J) L
. M8 g1 j9 k" n/ t( C  M: a4 R( }  x( n) g

$ d. J# Y. w+ D2 N通过上边程序第二行程序就可以在GPU上运行,注释掉就会在CPU上运行。在我的电脑上运行时间如下表所示。2 `0 M: _6 O6 {& n. L: o# p& B! B% h6 K: n
! m7 R8 Q: O' t  o7 ]7 x# R2 q8 O
设备                 CPU                      GPU; k  R1 Z5 E2 t$ u% p# U
时间              0.00010 s            1.973017 s8 O7 ^( v( z7 U) Q% r1 p

/ n" p) H" T" [由此可以看出,单个线程运行程序还是建议在CPU上运行,CPU的主频还是高一点,GPU主要是支持多个线程同时运行。9 X2 L, f- o# X+ I7 f+ i3 J  s
6 {9 B  h/ P1 P1 L! z* e# _
4.2 如果没有Nvidia显卡或者显卡驱动& L8 c9 ]# I( q! c+ Y" v7 D" @1 p
/ y# K" J7 l! A0 \6 A
如果没有Nvidia显卡或者显卡驱动,会显示下边的提示。
, N3 n" ]: Q7 q3 ~! S- ^# X/ `% |* O
$ b6 f, U, p, ?7 N3 k9 Y
, W$ y/ d: L4 g: a) {
4.3 双精度尽量转换为单精度
; y( G; D5 {* Q: F8 z- b
. N* U* }8 G& K" T在条件允许的情况下,尽量将计算过程中双精度转换为单精度。因为在GPU中单精度的计算速度明显优于双精度,在时间上会有很大的缩减。
/ B% u' s: I* u7 p" x附:单精度与上精度区别# f9 X0 ^; n) r$ y" N
; P- q  k; E+ X
数据类型                    大小(字节)                     取值范围                  保留有效位数1 T. ~, q/ O" }6 }  V! m) h/ N
单精度                   4个字节(32位)         3.4E-38~3.4E+38               7位, A0 a: D( {) L% y$ c  d
双精度                   8个字节(64位)         1.7E-308~1.7E+308           16位
9 E9 i! R0 y5 O
, F) S. Q- W0 m1 _& M) ^) N% m: J! [/ M5 l/ A# z
附录' v# a( o2 M* k6 j

( M* D6 u+ c, X  e
" w$ ~( _8 _- j* B$ d
& Z4 [; J) V  g0 Q/ p0 Z
: a+ k4 W* ]  o" ^. E! l4 n- J. K
作者: CCxiaom    时间: 2020-1-20 18:00
Matlab应用      GPU加速
作者: ExxNEN    时间: 2020-1-21 17:51
Matlab应用之GPU加速




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2