ps. 写本文的目的仅为了整理笔记,好记性不如烂笔头~
参考来源:
- http://www.elecfans.com/baike/zhujipeijian/cpu/20170426511395.html
- https://www.zhihu.com/question/19903344/answer/13779421
- http://www.elecfans.com/emb/fpga/20170926555542.html
FPGA与CPU,DSP,CPLD的区别
1. FPGA与CPU,DSP的区别
DSP:用于实现数字信号处理的微处理器芯片。
MCU:微控制器,又称单片机。
FPGA:现场可编程门阵列。
ARM:采用ARM架构的微处理器。
CPU:中央处理单元(Central Processing Unit)的缩写CPU主要由运算器、控制器、寄存器组和内部总线等构成。
CPU与FPGA的根本区别在于软件与硬件的差异。
CPU为冯诺依曼结构,串行地执行一系列指令;
而FPGA可以实现并行操作,就象在一个芯片中嵌入多个CPU,其性能会是单个CPU的十倍、百倍。
一般来说,CPU可以实现的功能,都可以用硬件设计的方法由FPGA来实现。当然,极其复杂的算法用硬件实现会比较困难,资源消耗也很大,如果没有高性能要求,那用硬件实现就有点得不偿失了。对于一个复杂系统而言,进行合理的软、硬件划分,由CPU(或DSP)和硬件电路(如FPGA)合作完成系统功能是非常必要的,也是高效的。
DSP是CPU的一种,做数字信号的处理,擅长做乘法和加法运算。
2. FPGA与CPLD的区别
FPGA:Field Programmable Gate Array 现场可编程逻辑门阵列
CPLD:Complex Programming logic device 复杂的可编程逻辑器件
3. CPU与GPU的区别
首先需要解释CPU和GPU这两个缩写分别代表什么。CPU即中央处理器,GPU即图形处理器。其次,要解释两者的区别,要先明白两者的相同之处:两者都有总线和外界联系,有自己的缓存体系,以及数字和逻辑运算单元。一句话,两者都为了完成计算任务而设计。
两者的区别在于存在于片内的缓存体系和数字逻辑运算单元的结构差异:CPU虽然有多核,但总数没有超过两位数,每个核都有足够大的缓存和足够多的数字和逻辑运算单元,并辅助有很多加速分支判断甚至更复杂的逻辑判断的硬件;GPU的核数远超CPU,被称为众核(NVIDIA Fermi有512个核)。每个核拥有的缓存大小相对小,数字逻辑运算单元也少而简单(GPU初始时在浮点计算上一直弱于CPU)。从结果上导致CPU擅长处理具有复杂计算步骤和复杂数据依赖的计算任务,如分布式计算,数据压缩,人工智能,物理模拟,以及其他很多很多计算任务等。GPU由于历史原因,是为了视频游戏而产生的(至今其主要驱动力还是不断增长的视频游戏市场),在三维游戏中常常出现的一类操作是对海量数据进行相同的操作,如:对每一个顶点进行同样的坐标变换,对每一个顶点按照同样的光照模型计算颜色值。GPU的众核架构非常适合把同样的指令流并行发送到众核上,采用不同的输入数据执行。在2003-2004年左右,图形学之外的领域专家开始注意到GPU与众不同的计算能力,开始尝试把GPU用于通用计算(即GPGPU)。之后NVIDIA发布了CUDA,AMD和Apple等公司也发布了OpenCL,GPU开始在通用计算领域得到广泛应用,包括:数值分析,海量数据处理(排序,Map-Reduce等),金融分析等等。
简而言之,当程序员为CPU编写程序时,他们倾向于利用复杂的逻辑结构优化算法从而减少计算任务的运行时间,即Latency。当程序员为GPU编写程序时,则利用其处理海量数据的优势,通过提高总的数据吞吐量(Throughput)来掩盖Lantency。目前,CPU和GPU的区别正在逐渐缩小,因为GPU也在处理不规则任务和线程间通信方面有了长足的进步。另外,功耗问题对于GPU比CPU更严重。