; 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
A=abs(A);1 V3 i# w- \ [* W3 n1 S) N
: 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 }
methods(gpuArray)1 U* K! K# s$ y4 n$ V$ c
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
B = gather (A);1 v. a8 y. O. p% 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
index = 0;
index = gpuArray(index);
for i = 1 : 10000
tic
for j = 1 : 100000
index = index + 1;
end
toc
end
disp(index) 0 N3 }1 a; n1 Y. {' l3 B, L" F% ^) x. A) L
( 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