其他
什么是软件?什么是硬件?
1. 软件和硬件
硬件指计算机的物理组件,可以看到和触摸的部分。如处理器、存储设备、监视器、打印机、键盘、鼠标等。 软件是在计算机系统上执行不同任务的说明,过程,文档的集合。我们也可以说计算机软件是在计算机处理器上执行的编程代码,该代码可以是裸机级别的代码,也可以是为操作系统编写的应用级别的代码。软件示例如Word、Chrome、Photoshop、MySQL等。
2. 硬件加速的示例
表1 DES算法CPU和硬件加速器对比
运行平台 | 频率 | 性能 | 性能对比 | 折算性能100MHz | 折算性能对比 |
Alpha 8400处理器 | 300MHz | 137Mb/s | 1 | 45.67Mb/s | 1 |
Xilinx Virtex XCV1000-4 BG560 | 60.5MHz | 3873.15Mb/s | 28.27 | 6402Mb/s | 140 |
CPU:最开始的时候,大家使用CPU挖矿,一台高端个人电脑,处理速度大概20MH/s(H/s, Hash per second); GPU:后来有人用GPU加速挖矿,SHA-256可以继续拆分成普通的算术逻辑运算,而GPU具有超级多的算术逻辑运算单元,一个高端显卡的处理速度可以达到200MH/s; FPGA:再后来出现了定制SHA-256算法硬件逻辑的FPGA加速卡来挖矿,精心设计的定制电路的FPGA,可以使运算速度达到1GH/s; ASIC:而比特大陆公司2015年发布的ASIC矿机芯片BM1385,其性能达到单颗芯片算力可达32.5GH/s。
3. 性能的三个维度
团队A的每个工人可以在单位时间里加工5个零件,团队B的每个工人在单位时间里可以加工8个零件。 团队A的单位时间是3分钟,这意味着团队A一个小时可以有20个单位时间;团队B的单位时间是5分钟,这意味着团队B一个小时拥有12个单位时间。 团队A有10个人,团队B有20个人。
“指令”复杂度,类比于例子中单位时间加工的零件数量。指令复杂度,指的是单个指令计算量的密度。 运行速度,即运行频率,类比于例子中一个小时的单位时间数量,指的是1秒钟时钟周期的数量。 并行度,则类比于例子中团队的成员数量,指的是多个并行的处理。
3.1 “指令”复杂度
3.2 运行频率
3.3 并行度
指令流水线:指令流水线是一种时间并行,在同时有多条指令处理流水线的不同阶段,这样相当于有多条指令在并行处理。 指令多发射(Multiple Issue):一条流水线,从指令缓冲区一次发送到译码阶段就有多条指令,然后在执行阶段也是多条指令并行。 超线程(Hyper-Thread):在一个处理器核内部,多组不同的指令流处理,分时的共享处理器核内部的各种硬件资源,达到更佳的资源利用率,提升整体性能。 多总线:例如,指令、数据总线分开,多数据总线等设计,进一步增加处理器的数据处理带宽。 多核技术:通过一些内部互联总线,把多个处理器核集成到一块芯片内,以此来提升综合性能。 多处理器芯片:受限于芯片工艺、功耗水平、设计架构,单芯片内的多核互联不能无限制增加下去,也可以通过一些芯片间互联技术,把多个CPU Socket连成一个NUMA系统,当前比较常见的是2-8个Socket互联的架构。 总线:对并行总线来说,增加数据线的宽度,对增加总线的带宽是显而易见的,并行总线一般用于芯片内部逻辑通信;串行总线,例如PCIe,相比PCI并行总线,一方面可以快速提升频率,还可以通过很多组串行线组合通信来提升传输性能,串行总线一般用于芯片间数据通信。 异构计算单元:CPU和GPU、xPU以及各种硬件加速器组成异构多处理单元共同协作完成工作任务,CPU更多的是承担控制和数据交互的角色。 多服务器集群:现在大型的互联网系统需要成百上千的服务器,分为业务处理、网络处理、存储和数据库处理等不同功能分工的服务器,共同组成一个性能强大并且运行稳定的系统对外提供服务。
4. 综合分析
平台 | |||
资源规模大一些,一般会有比FPGA更多的并行度 |
CPU:通用指令的处理器,使用的指令复杂度最低,因此具有最高的灵活性,同时相对最差的性能。我们经常所说的某个任务或算法运行在软件,即指的是把任务或算法编程实现,然后在CPU执行。 协处理器:现代的处理器都会支持一些扩展指令集,例如Intel的AVX以及ARM的NEON等。这些指令集最终的计算是在一个扩展的执行模块里处理,一般把这些处理扩展指令集的部分称为协处理器。协处理器比CPU的灵活性稍微差一些,同时相比CPU,在一些特定场景能够提升性能,这种情况就是一种性能“加速”。例如,把Intel Xeon的AVX-512扩展指令集用于机器学习推理场景,可以获得比CPU明显的性能提升。 GPU:图形处理单元,是一种并行架构设计,内部有上千个计算单元可以并行执行上千个线程。具有相对比较折中的灵活性和性能。由于图形计算中都是以向量计算为主,因此GPU对类SIMD/MIMD“指令”处理非常擅长。NVIDIA公司提供的CUDA计算框架降低了GPU软件开发的门槛,并且能够充分利用GPU的计算性能。 FPGA:硬件可编程,一般实现特定的任务或算法加速器设计。从设计架构的角度,FPGA和ASIC是一致的。最主要的区别在于FPGA硬件可编程付出的代价是运行速度和硬件成本,但获得了硬件可编程的灵活性。 ASIC:专用集成电路,实现特定的任务和算法。跟FPGA的区别是硬件电路是不可更改的。跟FPGA相比的优势是可以更高的频率和性能,但同时,ASIC具有所有硬件平台最差的灵活性,只能在特定应用场景发挥作用。