1.计算机主要分为三大部分:cpu(中央处理器),内存,主板
对我学编程而言内存分为三部分:栈区(存放局部变量),堆区(负责动态分配),静态区(存放全局变量和静态变量)
主板负责承接计算机的各个部分
ps:我们日常使用的智能手机 因为尺寸问题,商家选择把cpu,内存,网络通信等等都封装为一个芯片最后嵌入手机,这种方法被称为SoC.
2.什么是冯诺依曼体系结构?这也叫存储程序计算机,顾名思义,一台可编程可存储的计算机。
3.具体记录一下cpu:
cpu包含一个算式逻辑单元和处理器单元(负责完成算数及逻辑运算)
cpu还包括一个指令寄存器和程序寄存器(负责控制程序的流程)
计算机组成:cpu+内存及外部存储+输出输出设备
ps:任何一台计算机的任何一个部件都可以归为上面划分的东西
(运算器,存储器,输入出设备)
计算机的性能
体现在两方面:响应时间(让计算机跑的更快)+吞吐率(让计算机一次运行更多东西)
1.一般把性能定义成响应时间的倒数,eg:一个程序30s运行完,及60s运行完,那么我们通常认为前者的性能是后者的两倍。
2.计算机的计时单位:cpu时钟(即响应时间的量化)
但是有几个问题:1.时间不准 2.比较的两个计算机运行时处于的状态不同(可能为超频,也可能降频)3.其他诸如主板,内存等的影响
因此我们把时间拆解
得:程序cpu的执行时间=cpu时钟周期数*时钟周期时间
解读公式:cpu内部存在一个叫晶体振荡器的的东西,相当于我们的时钟(每一次的滴答即时钟的周期时间),滴答多少次就是周期数
ps:cpu是根据时钟周期时间来调整速度的,(超频就是加快了滴答的速度,所以cpu将会加速运行)但并不是没有代价!
提升性能方案:
1.缩短时钟周期时间(提升主频)【换更好的cpu,在cpu中增加更多的晶体管来缩短时间,早期工程师选择这方向一路发展,导致缩短时钟周期时间这个方案早在近代就已经达到瓶颈,因此现在工程师多选择别的方向提升,后续有提到】
2.减少时钟周期数
对于公式的cpu时钟周期数有另一个分解转化为指令数*每条指令的时钟周期数
优化问题变成了三个:
1 主频 时钟周期
2 CPI 即每条指令的时钟周期数
3 指令数
总结(主频就是你的打字速度,CPI就是你的快捷键熟悉程度 你越熟悉这些,你的操作需要按的东西自然少了,指令数取决于你编程的算法是否优秀,优秀的算法总比别的算法所需要的代码数少)
【即提升计算机主频,优化cpu设计使单个时钟周期能完成更多的指令,最后通过优化代码来减少实现同一功能的代码数量】
计算机的功耗到怎么提升计算机性能
好比人类有极限,计算机也有相应的极限,而制约这的便有功耗问题,早起的inter便是忽略了功耗问题,一味的提升时钟周期数(增加更多的晶体管),导致功耗被拉满
对于性能的提升:一方面是提升cpu中晶体管的密度,另一方面是让晶体管的开关更快(即提升主频)
【cpu好比一个工厂,晶体管是工人,要想工作人员效率更高可以提升单位面积下的工人数量(一般是小地多人考虑,为什么不能扩大cpu来容纳更多工人?,我们可以理解是cpu变大后电信号的传输需要更多时间),另一方面是可以找手脚更快的工人来提高工作效率。】
***但是工人在长时间的工作下会热会出汗,导致工作效率的降低,好比cpu的发热,你也许可以通过装风扇等等措施来降温,但核心问题工人自身产热问题没解决那么这些措施不过是表层操作罢了。
cpu的功耗可以表达为 1/2*负载电容*电压的平方*开关频率*晶体管数量
因此我们除了上述的两个操作还可以通过降低电压来实现降低功耗,
对于提升响应时间你可以理解为交通工具(一开始步行然后汽车然后飞机)每次都是飞跃的提升,但是飞机后呢?这就达到了瓶颈,造飞机更早飞船不是一个级别的,因此我们近代对于cpu的响应时间(即主频的提升)没这么大
因此便有了并行提高性能!
我们可以同时开多架飞机来实现更大的吞吐量。
总结延伸:在现在,通过简单的堆硬件来提升性能的时代已经过去了,在整个计算机组成层面还有几个方法
1.加速大概率事件,最典型的是深度学习,具体的还没看完后续在写笔记
2.通过流水线提高性能
3.通过预测提高性能