|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
& V6 m1 J7 E0 cFPGA与GPU的区别本质上是体系结构的区别2 s J1 b C9 `- ?6 ]5 `% {
CPU、GPU 都属于冯·诺依曼结构,指令译码执行、共享内存。
# j, E5 _$ m) C3 a" N1 R# `0 p' l9 |) C0 \0 y8 k/ f
FPGA 本质上是无指令、无需共享内存的体系结构。" I- Y/ B" l2 y' r6 K) q
) R5 y+ X6 u; Y6 [( U) oCPU与FPGA区别之(指令):
# p* P1 S+ V2 B6 x% [$ a& XCPU结构——有指令:+ X8 `* q. w9 h( V0 F( g
冯氏结构中,由于执行单元(如 CPU 核)可能执行任意指令,就需要有指令存储器、译码器、各种指令的运算器、分支跳转处理逻辑。
- q& P. J& Z$ }# h8 h3 d由于指令流的控制逻辑复杂,不可能有太多条独立的指令流,/ z0 M% O5 n, f$ p# W
因此 GPU 使用 SIMD(单指令流多数据流)来让多个执行单元以同样的步调处理不同的数据,CPU 也支持 SIMD 指令。
4 l/ z: ^0 |5 L! D) _: SFPGA结构——无需指令:
; I& [' a, S$ V+ g6 c. W而 FPGA 每个逻辑单元的功能在重编程(烧写)时就已经确定,不需要指令。4 p! v( e# K' R8 G* v
& R: t$ Q t y: c7 n& T2 f' X7 D
CPU与FPGA区别之(内存)
3 d) j9 i! U: q* |% t4 Q. j( ?CPU结构——仲裁与共享内存:
6 W3 [! B, ]* }4 h0 E冯氏结构中使用内存有两种作用。一是保存状态,二是在执行单元间通信。4 z" X" L6 p' T" `3 y+ u
由于内存是共享的,就需要做访问仲裁;
& b! \: J. |8 _6 e7 N+ S. H为了利用访问局部性,每个执行单元有一个私有的缓存,这就要维持执行部件间缓存的一致性。
1 w6 L8 H6 X& @+ b$ |# P2 _0 g
4 D. _" V5 C* ]9 S% GFPGA结构——无需仲裁与共享内存:# n9 f$ q6 U" K/ B
对于保存状态的需求,FPGA 中的寄存器和片上内存(BRAM)是属于各自的控制逻辑的,无需不必要的仲裁和缓存。, h. J; ]6 P3 G) p, X$ p
对于通信的需求,FPGA 每个逻辑单元与周围逻辑单元的连接在重编程(烧写)时就已经确定,并不需要通过共享内存来通信。
0 G9 i% |, b5 F. H6 \4 o2 }* {* Z5 y+ }% t5 ]
FPGA 同时拥有流水线并行和数据并行,而 GPU 几乎只有数据并行(流水线深度受限)。
$ d! A- u6 c/ ? B8 H# e% m }4 W' }' I* m. n
FPGA流水线与数据并行处理:
* U2 {1 V6 M5 n( U# G/ H7 s例如:处理一个数据包有 10 个步骤,FPGA 可以搭建一个 10 级流水线,流水线的不同级在处理不同的数据包,每个数据包流经 10 级之后处理完成。每处理完成一个数据包,就能马上输出。* N1 H- l4 }5 U3 }7 v
+ d$ @5 m& C z% ^, B) N: E( p
GPU数据并行处理:
2 o5 F2 f* g+ q而 GPU 的数据并行方法是做 10 个计算单元,每个计算单元也在处理不同的数据包,
% G! ^" ]7 o5 k' z% \( W1 y9 s
~( e0 [5 p; P+ o然而所有的计算单元必须按照统一的步调,做相同的事情(SIMD,Single Instruction Multiple Data)。
4 e& C1 j4 W- _* y; W( _$ R0 G/ o; w& \* i- s4 I' }, w
这就要求 10 个数据包必须一起输入、一起输出,输入输出的延迟增加了。8 w1 R" Q4 s% x0 n8 N3 L/ Q
' y; R4 ?" D3 f* h) c; R
总结一句话,很多算法如果用纯软件实现,需要很多条指令才能完成,
8 V% ~7 q3 F- I0 _0 d7 p0 F* Y0 w如果用FPGA,只需要在有限个时钟周期即可完成,速度快的不是一点半腥。 |
|