2.1 软硬件基本概念
本节主要介绍软件和硬件的一些基本概念,以及硬件加速原理,以使大家对软硬件有概括性认识。
2.1.1 软件和硬件
软件和硬件的通俗定义:计算机软件看不见摸不着;而计算机硬件看得见摸得着。软件和硬件更详细、严谨的定义如下。
·软件是在计算机系统上执行不同任务的说明、过程、文档的集合。也可以说,软件是在计算机处理器上执行的编程代码,该代码可以是裸机级别的代码,也可以是为操作系统编写的应用级别的代码。例如,Word、Chrome、Photoshop、MySQL等属于软件。
·硬件指计算机的物理组件,可以看到和触摸的部分,如处理器、存储设备、监视器、打印机、键盘、鼠标等。
由上述软硬件的定义可知,软件和硬件的界限非常清楚,我们可以明确地知道哪些是软件,哪些是硬件。但是当我们深入底层的技术细节时,会发现软件和硬件的界限并不完全清晰。
指令是计算机技术的核心概念,用于控制处理器执行相应动作的命令。指令集体系结构(Instruction Set Architecture,ISA)是处理器与软件程序进行交互的媒介。也可以说,指令是CPU中软件和硬件交互的接口(区别于I/O接口),我们编写的程序和相应的数据是软件,而支持软件运行的CPU和内存是硬件。
我们将网卡、硬盘及打印机等各种I/O设备定义为硬件,这些I/O设备只有在内部具有相应固件且有驱动程序及控制程序支持的情况下才能正常工作。我们将运行在CPU上的I/O设备驱动程序及控制程序,以及I/O设备内部协调硬件工作的固件定义为软件。其中,运行固件的载体必然是I/O设备内部的某个嵌入式处理器和存储器(ROM、RAM等),而内部嵌入式处理器和存储器又是硬件。
2.1.2 FPGA、ASIC和SoC
具有软件背景的读者通常对CPU、GPU的概念比较熟悉,但可能对FPGA、ASIC及SoC的概念不够明确。本节通过对FPGA、ASIC及SoC进行基本介绍及对比来使读者更明确地理解三者的含义。
1.FPGA
FPGA(Field Programmable Gate Array,现场可编程门阵列)是一种特殊的集成电路,具有现场可编程的功能,可以用作微处理器、加密单元、图形卡,甚至可以同时实现这三者的功能。在FPGA上运行的任务通常使用诸如VHDL和Verilog等硬件描述语言来创建。
FPGA由大量嵌入式可编程互连结构及数以千计的可配置逻辑模块(CLB)组成。CLB主要由查找表(LUT)、多路复用开关和触发器组成,可以实现复杂的逻辑功能。除了CLB和可编程互连结构,许多FPGA还包含专门用于实现特定功能的各种硬核模块(如Block RAM、DSP模块、外部存储器控制器、PLL、多千兆位收发器等),甚至提供纯硬件处理器内核(如Xilinx Zynq系列芯片中集成ARM Cortex-A系列应用处理器),纯硬件处理器内核用于处理日常的非关键任务,而FPGA处理纯硬件处理器内核无法完成的高速任务。这些专门用于实现特定功能的硬核模块是FPGA相比ASIC所具有的优势。
2.ASIC
ASIC(Application Specific Integrated Circuit,专用集成电路)是特定于应用的。ASIC仅用于一种功能,并且在整个生命周期中功能相同。例如,从器件的角度来看,手机内部的CPU是ASIC;从架构的角度来看,ASIC特指功能加速器。手机内部的CPU在整个生命周期中都充当CPU,它的逻辑功能不能更改为其他任何功能,因为其数字电路由硅片中永久连接的门和触发器组成。ASIC也使用诸如Verilog或VHDL等硬件描述语言,以类似于FPGA的逻辑实现方式实现逻辑功能。ASIC与FPGA的不同之处在于,ASIC的数字电路被永久性地写入硅片中,而FPGA的数字电路是通过连接多个可配置逻辑模块而构成的。形象而言,FPGA使用乐高积木建造城堡,而ASIC使用混凝土建造城堡。
3.SoC
SoC(System on Chip,片上系统)是一种集成电路(也称芯片),集成了计算机或其他电子系统的所有组件,这些组件通常(但不总是)包括CPU、内存、I/O接口和外部存储器控制器,它们都位于一个芯片上。根据应用的不同,SoC可能包含数字、模拟、混合信号及射频信号处理功能。由于集成在单个芯片上,因此与具有相同功能的多芯片相比,SoC的功耗要小得多,占用面积少得多,所需成本低得多。另外,由于SoC内部信号传递速率高于芯片间的信号传递速率,组件间具有更高的信号传递速率,因此SoC可以拥有很强劲的性能。SoC在移动计算(如智能手机)、边缘计算,以及IOT等功耗、成本敏感的场景中非常普遍。
4.FPGA、ASIC和SoC的对比
FPGA与ASIC的比较如表2.1所示。
表2.1 FPGA与ASIC的比较
续表
注:深色背景表示优势所在。
随着技术的发展,FPGA、ASIC和SoC也在相互融合,它们之间的界限越来越模糊。例如,随着FPGA的发展,现在很多FPGA内部集成了硬核,这种硬核就是传统意义上的ASIC;从硬件可编程的角度来看,SoC与FPGA相反,它可以看作SAIC,这里的ASIC主要指硬件不可编程,而不是单指特定功能芯片。FPGA、ASIC和SoC的区别和联系如表2.2所示。
表2.2 FPGA、ASIC和SOC的区别和联系
续表
2.1.3 硬件加速原理
DES(Data Encryption Standard,数据加密标准)算法是一种非常经典的加密算法。Mbire McLoone等人发表的A high performance FPGA implementation of DES文章中给出了一组数据,如表2.3所示。硬件加速器性能比CPU软件性能强30倍,如果不考虑频率的影响,则硬件加速器性能比CPU软件性能强140倍。若用软件(CPU执行指令)完成一次DES(一次数据处理量为64bit),则需要执行几百条指令,大概需要140个时钟周期;若用专用硬件加速器完成一次DES,则只需要1个时钟周期。
表2.3 DES算法CPU与硬件加速器的对比
SHA-256也是一种经典的加密算法,比特币所用技术区块链的核心算法就是SHA-256,它在各个平台上的性能对比如下。
·CPU:最初大家都使用CPU挖矿,一台高端个人计算机的,处理速度大概为20MH/s(H/s,Hash per second);
·GPU:后来,有人用GPU挖矿,SHA-256可以继续拆分成普通的算术逻辑运算,而GPU具有超级多的算术逻辑运算单元,一个高端GPU的处理速度可以达到200MH/s。
·FPGA:再后来,有人用定制SHA-256算法硬件逻辑的FPGA加速卡来挖矿,经过精心设计定制电路的FPGA的运算速度可以达到1GH/s。
·ASIC:比特大陆公司于2015年发布了 ASIC 矿机芯片BM1385,单颗芯片算力可达32.5GH/s。
上述CPU、GPU、FPGA性能数据来自2016年左右的《区块链:技术驱动金融》。