这是服务器开发系列文章的开始,其整体最终目标是按照MLOps的规范,开发在服务器端运行的机器视觉软件系统。这里先介绍最基础的计算机硬件部分。
计算机就是一种计算器,而计算器其实是接受用户输入指令与数据,经由中央处理器的数学与逻辑单元运算处理后,以产生或储存成有用的信息。
计算机的硬件组成部分主要可分为三类:
①输入单元:包括键盘、鼠标、扫描仪、手写板、触摸屏等;
②主机部分:就是系统单元,被机箱或机壳保护住的,里面含有一堆板子、CPU与存储器等;
③输出单元:例如屏幕、打印机等。
主机的重点在于中央处理器CPU,CPU是一个具有特定功能的芯片,里面含有微指令集。如果想要让主机进行什么功能,就得要参考这颗CPU是否有相关内建的微指令集才行。由于CPU的工作主要在于管理与运算,因此在CPU内又可分为两个主要的单元,分别是算数逻辑单元与控制单元,其中算数逻辑单元主要负责程序运算与逻辑判断,控制单元则主要在协调各周边组件与各单元间的工作。所有的单元都是由CPU内部的控制单元来负责协调的,因此CPU是整个计算机系统最重要的部分。
存储器可分为内存和外存,内存也称为主存储器,主要有RAM和ROM,都基于电存取数据,RAM断电数据全部丢失,用于临时保存数据,存取数据快,ROM断电数据不丢失,但只能读取,主要用于BIOS;外存用于永久保存数据,断电数据仍然存在,主要有机械硬盘和固态硬盘SSD、U盘等。
CPU读取的数据都是从内存来的,内存内的数据则是从输入单元所传输进来,而CPU处理完毕的数据也必须要先写回内存中,最后数据才从主内存传输到输出单元。安装软件都是装到硬盘中,软件的运行都是把数据加载到内存中,所以说计算机的硬盘大小决定了能够安装的软件数目,而计算机内存的大小决定了计算机能够同时运行的软件数目,这也就是当你内存不足时,系统的能效很差的原因。
在主机机壳内的设备大多是通过主板连接在一起,主板上面有连接沟通所有设备的芯片组,这个芯片组可以将所有单元的设备连接起来,好让CPU可以对这些设备下达命令。其运作流程可以参照人体进行理解:
①CPU=脑袋:每个人会做的事情都不一样(微指令集的差异),但主要都是通过脑袋来进行判断与控制身体各部分的活动;
②内存=脑袋中放置正在被思考的数据区块:在实际活动过程中,我们的脑袋需要有外界刺激的数据(例如光线、环境、语言等)来分析,这些互动数据暂时存放的地方就是内存,主要是用来提供信息给脑袋判断;
③硬盘=脑袋中放置回忆的记忆区块:跟内存不同,内存是提供脑袋目前要思考与处理的信息,但有些生活琐事或其他没有要立刻处理的事情,就得当成回忆先放置到脑袋的记忆深处,那就是硬盘,主要目的是将重要的数据记录起来,以便未来将这些重要的经验再次使用;
④主板=神经系统:就像人类的神经将所有重要的组件连接起来一样,包括手脚的活动都是脑袋发布命令后,透过神经(主板)传导给手脚来进行活动;
⑤各项接口设备=人体与外界沟通的手、脚、皮肤、眼睛等:就好像手脚一般,是人体与外界互动的重要关键;
⑥显示适配器=脑袋中的影像:将来自眼睛的刺激转成影像后在脑袋中呈现,所以显示适配器所产生的数据源也是CPU控制的;
⑦电源=心脏:所有的组件要能运作得要有足够的电力供给才行。电力供给就好像心脏一样,如果心脏不够力,那么全身也就无法动弹,心脏不稳定,那你的身体当然可能断断续续。
我们使用的软件都要经过CPU内部的微指令集来达成才行,这些指令集的设计主要又被分为两种CPU设计架构,分别是:精简指令集RISC与复杂指令集CISC系统。
①精简指令集:其中的微指令集较为精简,每个指令的运行时间都很短,完成的动作也很单纯,指令的执行效能较佳,但若要做复杂的事情,就要由多个指令来完成。这种架构的CPU主要有ARM(代表应用手机和网络设备)和IBM公司的PowerPC(代表应用PS3游戏机),目前世界上使用范围最广的CPU就是ARM。
②复杂指令集:其微指令集的每个小指令可以执行一些较低阶的硬件操作,指令数目多而且复杂,每条指令的长度并不相同。由于指令执行较为复杂所以每条指令花费的时间较长,但每条个别指令可以处理的工作较为丰富。主要的复杂指令集CPU有AMD、Intel等x86架构的CPU,x86架构的CPU被大量使用于个人计算机。
CPU架构中的位指的是CPU一次数据读取的最大量,64位CPU代表CPU一次可以读写64bits这么多的数据,32位CPU则是一次读写32bits数据。由于CPU读取数据量有限制,因此能够从内存中读写的数据也有所限制,一般32位的CPU所能读写的最大数据量大概为4GB。
不同的x86架构的CPU有什么区别?除了CPU的整体结构(如二级缓存、每次运作可执行的指令数等)之外,主要是微指令集的不同。新的x86的CPU大多含有很先进的微指令集,这些微指令集可以加速多媒体程序的运作,也能够加强虚拟化的效能,而且某些微指令集更能够增加能源效率,让CPU的电耗更低。
Intel和AMD的x86架构中,主要微指令集有:
①多媒体微指令集:MMX、SSE、SSE2、SSE3、SSE4、AMD-3DNow;
②虚拟化微指令集:Intel-VT、AMD-SVM;
③省电功能:Intel-SpeedStep、AMD-PowerNow;
④64/32位兼容技术:AMD-AMD64、Intel-EM64T。
目前主流的CPU都是双核以上的架构了,原本的单核CPU仅有一个运算单元,所谓的多核心则是在一颗CPU封装当中嵌入了两个以上的运算核心,简单的说,就是一个实体CPU外壳中含有两个以上的CPU单元就是了。
Intel还有个很怪的东西叫CPU的超线程Hyper-Threading功能。由于现在CPU指令周期都太快乐,因此运算核心经常处于闲置状态下,而我们现在的系统大多都是多任务系统,即同时间有很多的程序会让CPU来执行。因此若CPU可以假象的同时执行两个程序,不就可以让系统效能增加了么,反正CPU的运算能力还没有用完!其实现原理为:在每个CPU内部将重要的寄存器register分成两群,让程序分别使用这两群寄存器。也就是可以有两个程序同时竞争CPU的运算单元,而非透过操作系统的多任务切换!这会让CPU好像同时有两个核心一样。因此虽然大部分Intel i7等级的CPU只有四个实体核心,但通过超线程机制,操作系统可以抓到八个核心,并且让每个核心逻辑上分离,就可以同时运作八个程序了!在大多数情况下,超线程确实可以提高相当多的效能,节约30-50%的等待时间,但有些情况下是可能导致效能降低的。
由于主板是连接各组件的一个重要项目,因此在主板上面沟通各部分组件的芯片组设计的优劣就会影响效能不少!早期的芯片组通常分为两个网桥来控制各组件的沟通,分别是:
①北桥:负责连接速度较快的CPU、内存与显示适配器等组件;
②南桥:负责连接速度较慢的装置接口,包括硬盘、USB、网卡等。
由于北桥最重要的就是CPU与主存储器之间的桥接,因此目前的主流架构中,大多将北桥内存控制器整合到CPU封装当中了。
在早期的CPU设计中,外频指的是CPU与外部组件进行数据传输时的速度,倍频则是CPU内部用来加速工作效能的一个倍数,两者相乘才是CPU的频率速度。例如Intel Core2 E8400的内频为3.0GHz,外频是333MHz,于是倍频就是9倍(3.0G = 333M9)。
很多计算机玩家喜欢玩超频,所谓超频指的是:将CPU的倍频或者是外频通过主板的设定功能更改成较高频率的一种方式。但由于CPU的倍频通常在出厂时已经被锁死无法修改,因此较常被超频的是外频。例如像上述3.0GHz的CPU如果想超频,可以将它的外频333MHz调整成400MHz,如此一来整个主板的各个组件的运作频率可能都被增加为原来的4/3=1.33倍,于是CPU就可能达到3.01.33≈3.6GHz。但因为频率并非正常速度,有可能会造成宕机。
由于现在已经没有所谓的北桥了(整合到CPU内),因此CPU的频率设计就无须考虑要同步的外频,而只考虑整体的频率即可。所以如果使用cpu-z查看计算机性能时,会发现外频变成100MHz,倍频达到30以上。
现在Intel的CPU会通过turbo技术主动帮你超频!例如i7-4790的基本频率为3.6GHz,最高可自动超频到4GHz,而如果没有大量的运算需求,该CPU频率则会降到1.xGHz,来达到节能省电的目的。如果使用cpu-z观察Intel的CPU频率,会发现该频率会一直自动变动。
由于各组件的价格不断下降,现在主板上通常已经整合了相当多的设备组件,常见整合到主板的组件包括声卡、网卡、USB控制卡、显卡、磁盘阵列等。你会在主板上面发现很多方形的芯片,它们通常是一些个别设备的芯片。
主板是负责各个计算机组件之间沟通的,但计算机组件实在太多,有输出/输入/不同的存储装置等,主板芯片组需要沟通时就需要用到I/O地址与IRQ。I/O地址优点类似每个装置的门牌号码,每个装置都有它自己的地址,不能有两个装置使用同一个I/O地址,否则系统就会不晓得该如何运作这两个装置了。而IRQ可以想象成是各个门牌连接到邮件中心(CPU)的专门路径,各装置可以透过IRQ中断通道来告知CPU该装置的工作情况,以方便CPU进行工作分配的任务。老式的主板芯片组IRQ只有15个,如果你的周边接口太多时可能就会不够用,这个时候你可以选择将一些没有用到的周边接口关掉,以空出一些IRQ来给真正需要使用的接口。此外还有所谓的sharing IRQ技术。
主板与各项输入/输出设备的链接主要都是在主机机壳后方,主要类型有:
①PS/2接口:这原本是常见的键盘和鼠标接口,不过目前渐渐被USB接口取代,甚至较新的主板可能就不再提供PS/2接口了;
②USB接口:可进一步分为USB 2.0与USB 3.0接口,为了便于区分,USB 3.0插槽为蓝色;
③声音输入输出与麦克风:都是些圆形插孔,必须你的主板上面有内建音效芯片时,才会有这三个接口;
④RJ-45网口:只有内建网络芯片时才会有这种接口。其接头有点类似电话接头,不过内部有八蕊线芯,接上网线后在这个接头上会有灯亮起才对;
⑤HDMI:如果有内建显示芯片的话,可能就会提供这个与屏幕连接的界面了。这种接口可以同时传输声音与影像,目前也是电视屏幕的主流接口。
与CPU的频率类似,内存也有其工作频率,这个频率限制是由CPU内的内存控制器所决定的。例如CPU内建的内存控制芯片对内存的工作频率最高可达1600MHz,这只是工作频率,每次频率能够传输的数据量大多为64位,这个64位就是所谓的总线宽度或字组大小word size,于是CPU可以从内存中取得的最快带宽就是1600MHz*64bit=12.8GB/s。
个人计算机的主存储器主要组件为动态随机存取内存DRAM,随机存取内存只有在通电时才能记录与使用,断电后数据就消失了,因此这种RAM称为挥发性内存。使用较广的DRAM有所谓的SDRAM与DDR SDRAM两种,这两种内存的差别除了在于脚位与工作电压上的不同之外,DDR即所谓的双倍数据传输速度,它可以在一次工作周期中进行两次数据的传送,感觉上就像是CPU倍频了,所以传输频率方面比SDRAM要好。新一代的PC大多使用DDR内存!DDR内存又依据技术发展,有DDR、DDR2、DDR3、DDR4等,其中DDR2的频率倍数是4倍,而DDR3则是8倍,DDR4就是16倍!

DDR3L是专门为省电设计的内存,其制程中降低了主存储器的操作电压,DDR3标准电压为1.5V,DDR3L则为1.35V,其通常用在耗电量需求更低的笔记本电脑中!但需要看主板的规格是否支持。
内存除了频率/带宽与型号需要考虑外,内存的容量也是很重要的,因为所有的数据都得要加载到内存当中才能被CPU判读,如果内存容量不够大的话将会导致某些大容量数据无法被完整的加载,此时已存在于内存当中但暂时没有被用到的数据必须先被释放,使得可用内存容量大于该数据,新数据才能被加载!所以通常越大的内存代表越快速的系统,这是因为系统不用常常释放一些内存内部的数据。对于服务器来说,主存储器的容量有时比CPU的速度还要重要!
由于所有的数据都必须要存放在内存中,所以内存的数据宽度当然是越大越好。但传统的总线宽度一般仅为64位,为了加大这个宽度,芯片组厂商将两个内存汇整在一起,如果一支内存可达64位,两支内存就可达128位了,这就是双通道!如果要启用双通道功能,你必须要安插两支或四支内存,将这些内存插入到主板上颜色相同的插槽中。这几支内存最好所有参数、包括型号都一模一样,这是因为启动双通道内存功能时,数据是同步写入/读出这一对内存的,如此才能够提升整体的总线宽度!服务器需要的速度更快,因此除了有双通道设计外,中阶的服务器还有三通道、四通道的内存环境!例如服务器E5-2650 v3可以最大采用四通道,且都为DDR4。
除了内存外,整部个人计算机当中还有许多的内存,最有名的就是CPU内的二级缓存L2 cache。我们知道CPU的数据都是由内存提供的,但CPU到内存之间还得通过内存控制器。如果某些很常用的程序或数据可以放置到CPU内部的话,CPU数据的读取就不需要到内存重新读取了,这样可以大大提升计算机的效能!这就是二级缓存的设计理念。由于二级缓存被整合到CPU内部,因此这个二级缓存的速度必须要与CPU的频率相同,而使用DRAM是无法达到这个速度的,此时就需要静态随机存取内存SRAM了。SRAM在设计上使用的晶体管数据较多,价格较高,且不易做成大容量,但由于其速度快,因此被用作二级缓存。

固件firmware是写入只读存储器ROM的程序,固件是指设备内部保存的设备驱动程序,通过固件操作系统才能按照标准的设备驱动实现特定机器的运行动作。固件是担任一个系统最基础最底层工作的软件,而在硬件设备中,固件就是硬件设备的灵魂,因为一些硬件设备除了固件以外没有其它软件组成,因此固件也就决定着硬件设备的功能及性能。很多硬件上面都有固件,例如磁盘阵列、网卡、交换器等。固件是为控制硬件设备而设计的,在计算机中称之为BIOS(基本输入/输出系统)或UEFI(统一可扩展固件接口)。BIOS是计算机上电后第一个启动的,它可以与硬件交互并检查它是否有任何错误。
不同的操作系统操作硬件的方式是完全不同的,在Windows里应用态是无法直接写IO端口的,而在嵌入式系统中,一般都不限制直接操作IO端口。所以硬件厂商一方面为了自己的硬件能被软件更简单的使用,需要写firmware;另一方面为了兼容不同的操作系统,又不能把firmware写的太死,必须预留足够的余地让软件自由发挥(软件的自由发挥靠的是驱动程序)。
BIOS(Basic Input Output System)是一套程序,这套程序是写死在主板上面的一个内存芯片中,这个内存芯片在没有通电时也能够将数据记录下来,是由只读存储器ROM(非挥发性内存)实现的。BIOS对于计算机系统非常重要,因为它掌握了系统硬件的详细信息与开机设备的选择等。但计算机发展的速度太快,因此BIOS程序代码需要做适度的修改才行。但BIOS最初使用的是无法改写的ROM,所以根本无法修正BIOS程序;而现在BIOS通常是写入类似Flash或EEPROM中。
显卡也叫显示适配器Video Graphics Array,也就是GPU,对于图形影像的显示扮演重要角色。一般对于图形影像的显示重点在于分辨率与颜色深度,因为每个图像显示的颜色会占用内存,因此显卡上面会有一个内存的容量,这个显卡显存容量将会影响到你屏幕分辨率与颜色深度。除了显卡显存之外,现在由于三维游戏与动画的流行,对显卡的运算能力要求也越来越高。一些3D运算早期是交给CPU去运算的,但CPU并非完全针对这些3D进行设计的,而且CPU平时已经非常忙碌了,所以后来显卡厂商直接在显卡上面嵌入一个3D加速芯片,这就是GPU称谓的由来、显卡主要也是通过CPU的控制芯片来与CPU、内存等沟通。对于3D游戏等应用来说,显卡需要高速运算,所以数据的传输是越快越好,因此目前都使用数据传输带宽最高的PCI-Express插槽。

PCIe使用的是类似管线的概念来处理,管线越多(通常设计到x16的管线)则总带宽越高。

如果你的主机是用来打3D游戏的,那么显卡的性能就至关重要;如果你的主机是用来做网络服务器的,那么简单的入门级显卡就够用了。
传统硬盘有个很致命的问题,就是需要驱动马达去转动磁盘盘,这会造成很严重的磁盘读取延迟!想象一下,你得要知道数据在哪个扇区上面,然后再命令马达开始转,之后再让读取头去读取正确的数据。另外如果数据放置的比较离散(扇区分布比较广又不连续),那么读写速度就会延迟更明显,速度快不起来。于是后来就有厂商拿闪存去制作高容量的设备,这些设备的连接界面也是透过SATA或SAS,外型也跟传统硬盘一样。虽然这类设备已经不能称为是硬盘,但为了方便称呼,称为固态硬盘SSD。固态硬盘最大的好处是它没有马达不需要转动,而是透过内存直接读写的特性,因此除了没数据延迟且快速之外还很省电!不过SSD有个重要的致命伤,就是这些闪存有写入次数的限制,因此通常SSD的寿命大概两年就顶天了。所以数据存放时,需要考虑到备份或者是可能要使用磁盘阵列RAID的机制来防止SSD损毁。
为了提升硬盘的传输速度,目前硬盘与主板的连接接口主要为SATA和SAS。SATA取代了以前的IDE,SAS取代了SCSI。目前SATA版本已经出到第三代,主要差别就是传输速度,主流硬盘都使用SATA3接口,传输速度可达600MB/s。但要真正达到或接近理论传输速度,必须使用固态硬盘而不能使用传统硬盘,实测SSD极速可达500MB/s。

在工作站或大型电脑上面,为了读写速度与稳定度,大多使用的是SAS而不是SATA,但是SAS相比SATA会贵很多!SAS接口支持热插拔,磁盘阵列使用的就是SAS接口。

在测试磁盘效能时有个很特殊的单位,称为每秒读写操作此时IOPS,这个数值越大,代表可操作次数较高,效能也就更好。
计算机可能因为某些特殊的需求,需要使用主板之外的其他适配卡,所以主板上面通常会预留多个扩充插槽。由于PCIe的传输速度太快太好用了,因此几乎所有的卡都以PCIe来设计。PCIe有不同的通道数,基本上常见的有x1,x4,x8,x16等,个人计算机主板常见的是x16,但中阶服务器大多有多个x8的接口,x16的接口反而少见。目前PCIe 2.0 x1最高可达500MB/s的传输速度。CPU最多仅能支持16个PCIe 3.0的通道,你可以设计的扩充方式有:
①一个x16;
②两个x8;
③两个x4加一个x8。
使用PCIe 3.0 x8的接口时,其传输速度基本就已经不会完全用光了。主板上面可能有多个扩展插槽,将扩展卡安插在跟CPU直联的那几个插槽时效能最佳。如果是安插在其他插槽时,扩展卡的数据需要先进入南桥跟大家抢带宽,之后还要通过CPU与南桥沟通的管道传向CPU,速度自然要差很多。
电源适配器简称电源,其价差非常大,这是因为Power的用料不同,电源供应的稳定度也会差很多。电源相当于心脏,心脏差的话活力就会不足。所以稳定度差的电源甚至是造成计算机不稳定的元凶,所以尽量不要使用太差的电源!
电源本身会吃掉一部分的电力,如果你的主机系统需要300W的电力时,因为电源本身也会消耗掉一部分电力,因此你最好挑选400W以上的电源。电源出厂前会有一些测试数据,最好挑选高转换率的电源。所谓的高转换率指的是输出功率/输入功率,假设你的主板用电量为250W,但电源已经用掉320W的电力,则转换率为250/320=0.78。这个数值越高表示被电源浪费的电力越少,更符合能源效益。
如果以计算机的复杂度与运算能力进行分类的话,主要可以分为以下几类:
①超级计算机Super Computer:其是运作速度最快的计算机,但它的维护、操作费用也最高。主要用用于需要有高速计算的计划中。例如国防军事、气象预测、太空科技,用在模拟的领域较多。如国家的各超算;
②大型计算机Mainframe Computer:其通常也具有数个高速的CPU,功能上虽不及超级计算机,但也可用来处理大量资料与复杂的运算。例如大型企业的主机、全国性的证券交易所等,其每天需要处理数百万笔的数据,或者是大型企业的数据库服务器等;
③迷你计算机Mini Computer:其仍保有大型计算机同时支持多用户的特性,但是主机可以放在一般作业场所,不必像前两类大型计算机一样需要特殊的空调场所。通常用来作为科学研究、工程分析与工厂的流程管理等;
④工作站WorkStation:其价格比迷你计算机便宜许多,是针对特殊用途而设计的计算机。在个人计算机的效能还没有提升到目前的状况之前,工作站的性价比是所有计算机当中较佳的,因此在学术研究与工程分析方面相当常见;
⑤微电脑Micro Computer:个人计算机就属于这个类别,其体积最小、价格最低,但功能还是五脏俱全的,大致可分为桌面型、笔记本型。
如果光以效能来说,目前的个人计算机(也就是微电脑)效能已经够快了,甚至已经比工作站等级以上的计算机指令周期还要快,但工作站强调的是稳定不宕机,并且运算过程要完全正确,因此工作站及其以上等级的计算机在设计时的考虑是与个人计算机不同的,这也是为什么工作站等级以上的计算机售价较贵的原因!
计算机对于数据是以文件形式存储的,文件容量使用的是二进制的方式,每个记录单位只认识0与1而已,0/1这个二进制的单位我们称为位bit。但bit实在太小了,所以存储数据时每份简单的数据都会使用到8个bits的大小来记录,于是定义了字节byte这个单位,1 byte = 8 bits。例如你购买了500GB的硬盘,但格式化后只剩下460GB左右的容量。这是因为硬盘制造商会使用十进制的单位,500GB=500100010001000Bytes,转换文件的容量单位时使用二进制(1024为底),所以就成为466GB的容量了。硬盘厂商并非要骗人,只是因为硬盘的最小物理量为512Bytes,最小的组成单位为扇区sector,通常硬盘容量的计算采用多少个sector来表示,所以才会使用十进制来统计。
计算机速度的单位采用十进制,CPU的指令周期通常使用MHz或者GHz之类的单位,Hz就是秒分之一。频率是CPU每秒可以进行的工作次数,频率越高表示这颗CPU单位时间内可以做更多的事情。例如**Intel的i7-4790 CPU频率为3.6GHz,表示这颗CPU在一秒内可以进行3.610^9次工作,每次工作都可以进行少数指令运作**。频率也是CPU效能的重要体现。
注意:不同的CPU之间不能单纯的以频率来判断运算效能!这是因为每颗CPU的微指令集不相同,架构也不一定一样,可使用的二级缓存及其计算机制可能也不同,加上每次频率能够进行的工作指令数也不同,所以频率目前仅能用来比较同系列CPU的速度!
在网络传输方面,由于网络使用bit为单位,因此网络常使用的单位是Mbps,即Mbits per second。
在选购计算机主机时应进行整体考虑,很难依照某一项标准来选购。如果你的公司需要一部服务器的话,建议不要自行组装,买品牌计算机的服务器会更好。这是因为自行组装的计算机虽然比较便宜,但每项设备之间的适应性是否完美则有待自行检测。另外在效能方面并非仅考虑CPU的能力而已,速度的快慢与整体系统最慢的那个设备有关。例如你使用Intel i7系列产品,DDR3-1600内存,但配上一个较慢的显卡,则整体的三维速度会卡在显卡上面。
系统不稳定的可能原因有:
①系统超频:这个行为很不好,不要主动尝试;
②电源不稳:如有需要可以测试一下电源的稳定度;
③内存无法负荷:现在生产的内存质量差很多,差一些的内存可能会造成主机在忙碌工作时,产生不稳定或宕机;
④系统过热:热是造成电子元件运作不良的主要因素之一,如果主机在夏天容易宕机、冬天却还好时,可以考虑加几个风扇,其有助于机壳内的散热,系统会比较稳定。
基本上说,计算机是一种相当不可靠的机器,常常会听到说要计算机正常工作,最重要的是要去拜拜!这还是真的,尤其是在日前一些计算机周边硬件的生产良率 (就是将硬件产生出来后,经过测试发现可正常工作的与不能正常工作的硬件总数的比值) 越来越差的情况下,计算机的不稳定状态实在是越来越严重了!一般会造成系统损毁的硬件组件应该就是硬盘,因为其他组件坏掉时,虽然会影响到系统的运作,不过至少我们的数据还是存在硬盘当中的!为了避免这个困扰,推荐使用可备份用的RAID1, RAID5, RAID6等磁盘阵列!
计算机硬件只是基础,其重点在于软件,相当于是计算机的灵魂,如果没有软件运作,计算机的功能就无从发挥!
二者主要有以下5个方面的区别:
1.概念
CPU是一块超大规模的集成电路,是一台计算机的运算核心Core和控制核心Control Unit。它的功能主要是解释计算机指令以及处理计算机软件中的数据。
GPU是一种专门在个人电脑、工作站、游戏机和一些移动设备(如平板电脑、智能手机等)上图像运算工作的微处理器。
2. 缓存
CPU有大量的缓存结构,目前主流的CPU芯片上都有四级缓存,这些缓存结构消耗了大量的晶体管,在运行的时候需要大量的电力。
GPU的缓存就很简单,目前主流的GPU芯片最多有两层缓存,而且GPU可以利用晶体管上的空间和能耗做成ALU单元,因此GPU比CPU的效率要高一些。
3. 响应方式
CPU要求的是实时响应,对单任务的速度要求很高,所以就要用很多层缓存的办法来保证单任务的速度。
GPU是把所有的任务都排好,然后再批处理,对缓存的要求相对很低。
4. 浮点运算方式
CPU除了负责浮点整形运算外,还有很多其他指令集的负载,比如像多媒体解码,硬件解码等,因此CPU是多才多艺的。CPU注重的是单线程的性能,要保证指令流不中断,需要消耗更多的晶体管和能耗用在控制部分,于是CPU分配在浮点计算的功耗就会变少。
GPU基本上只做浮点运算,设计结构简单,也就可以做的更快。GPU注重的是吞吐量,单指令能驱动更多的计算,相比较GPU消耗在控制部分的能耗就比较少,因此可以把电省下来给浮点计算使用。
5. 应用方向
CPU所擅长的像操作系统这一类应用,需要快速响应实时信息,需要针对延迟优化,所以晶体管数量和能耗都需要用在分支预测、乱序执行、低延迟缓存等控制部分。CPU主要用于通用计算领域,就什么领域都可以用。
GPU适合对于具有极高的可预测性和大量相似的运算以及高延迟、高吞吐的架构运算。GPU主要应用于游戏、挖矿、AI这三个计算量特别大的领域,属于辅助或专用型部件。
现在还推出了GPGPU(通用GPU),可以将其理解为一个辅助CPU的工具,它能够帮助CPU进行非图形相关程序的运算。通常电脑端的GPU负责电脑的图形渲染,这是一个负荷较大的工作,为了给GPU分担一部分压力,一些非图形相关程序的运算就会交给电脑的CPU来完成,而GPGPU则是主要负责非图形相关程序的运算。GPGPU主要用于物理计算、加密解密、科学计算以及比特币等加密货币的生成。
CPU是计算机系统的运算和控制核心。而MCU(微控制器单元)也称微型计算机或单片机,是指将计算机的CPU、RAM、ROM、定时计数器和多种I/O接口集成在一个芯片上,形成芯片级的计算机。
MCU的特性主要有:
①可编程:可以通过编写C语言或者汇编程序,下载到MCU里面,让它按照我们的程序逻辑去控制电路,灵活性很高;
②结构简单、体积小:内部芯片作为计算机系统,其结构简单,但是功能完善,使用起来十分方便,可以模块化应用;
③控制功能强:MCU对数据的处理能力和运算能力较强,MCU的指令系统均有极丰富的条件分支转移能力,I/O接口的逻辑操作及位处理能力,非常适用于专门的控制功能;
④低功耗、低电压:许多单片机的工作电压仅为1.8-3.6V,工作电流仅为数百μA。
MCU的应用场景多种多样,例如电饭煲、微波炉、空调和洗衣机等;除此以外,在物联网的智能家居、智慧停车场、智慧农业等领域也有应用;现在医疗设备领域也开始广泛采用MCU,常见的有血压计、血氧计、血糖仪、体温计和额温枪以及生化采集系统设备。
PLC是基于MCU的产品,在MCU的基础上增加了模块化的开发,不用编写底层的代码,无须了解单片机的底层资源,可以使用厂家提供的一个二次开发的、界面友好的编写软件来构成系统应用。PLC是CPU的特例,是针对某个行业的具体应用,开发使用起来比较方便快捷。
①可靠性方面:在工业方面的设备,平时购买的单片机和一些元器件仅仅能达到商业级,再加上开发后测试水平达不到,在可靠性方面很难保证。而工业环境中电磁干扰是非常多的,如继电器的通断、电机的起停都能够导致单片机的重启或者通讯的失误。相对而言PLC就能够满足设备工业级要求,在抗干扰方面、输入和输出点可靠性方面更为优越,并采用可靠的组态方式,因此可靠性更高,而且通信方面有很多工业控制设备采用光纤以抗干扰。
②易用性方面:采用单片机实现通信等系统架构太过麻烦,在简单并且不关键的部位可采用单片机实现部分功能。而PLC等设备可采用整体式或者积木式,各个组件可以按需选用,并便于组态实现。各个工作站之间采用规范的总线通讯,这都是模块内置的,只需配置无须编写代码,简单可靠。
③其他方面:
<1>工业环境下受周围交流电机启停等影响,电压可能会有较大的波动。为了应对这种恶劣的环境,必须为MCU设计相应的电源模块,使电压剧烈变动时不会引发MCU的工作异常;
<2>在工业环境下,传感器的输出多采用4-20mA、0-10V的形式,这与MCU常用的0-3.3V或者0-5V的AD模块不相符合,因此需要针对工业环境设计传感信号接收模块;
<3>工业环境的输出很多是用来控制继电器(经过继电器隔离后,再去控制电机等的启停),而MCU的输出只能控制微型继电器,无法驱动常用的工业继电器,因此要在MCU外围设计具有大驱动能力的IO接口。有很多工业数据总线协议,为了能保证MCU与外界正常通讯,需要封装模块来支持这些协议。
以上就是关于计算机硬件要讲的内容,欢迎大家对本文章进行补充和指正。
《鸟哥的Linux私房菜 基础学习篇》,人民邮电出版社出版
https://www.zhihu.com/question/19903344/answer/714024535,CPU 和 GPU 的区别是什么?
https://zhuanlan.zhihu.com/p/531078143,cpu和mcu的区别是什么
https://zhuanlan.zhihu.com/p/544521249,plc与mcu的区别是什么?