持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第30天,点击查看活动详情
P9高级CPU设计
提升性能的方法1
缓存的概念:
缓存就是在CPU内部加一小块RAM,当CPU需要从外部的RAM读取数据时,先将外部的RAM中的一批数据传入到缓存中,然后当CPU再需要取数据时,就可以从缓存中取,大大提高了速度。
如果想要的数据在缓存中,叫缓存命中。反之,叫缓存未命中
缓存也可以当临时空间,存一些中间值,适合长/复杂的运算
CPU存数据
也是存在缓存中,缓存中的每块空间,有一个特殊标记,叫"脏位"
同步一般发生在当缓存满了而CPU又要缓存时
在清理缓存腾出空间之前,会先检查“脏位”
如果是"脏“的,在加载新内容之前,会把数据写回RAM
提升性能的方法2
指令流水线
并行处理就是将下图优化为下下图
问题1:指令之间的依赖问题
但是有些数据会存在依赖,因此流水线处理器,要先弄清数据依赖性,必要时停止流水线,避免出问题
问题2:条件跳转
CPU在遇到JUMP时会等待一下,可以把JUMP想象成岔路口,
高端CPU在遇到JUMP时会猜哪条路的可能性大一些,然后提前把指令放入流水线,称为"推测执行"
猜对了,皆大欢喜
猜错了,清空流水线,就像走错路掉头
分支预测
猜测哪条分支更有可能
提升性能的方式3
同时运行多个指令流,用多核处理器
P10早期的编程方式
冯诺依曼计算机的标志是:一个处理器(有算数逻辑单元)+数据寄存器+指令寄存器+指令地址寄存器+内存(负责存数据和指令)
早期的编程方式需要人们去了解底层硬件是如何运作的,十分繁琐。因此需要一种更加简单的编程方式
P11编程语言发展史
高级语言转为低级语言即汇编语言需要用到编译器
FORTRAN主宰了早期计算机编程
一次编写,到处运行
P12编程基础
基本都学过,无需做笔记
模块化编程,不仅可以让单个程序员独立制作App,也让团队协作可以写更大型的程序
现代编程语言,有很多库可以进行调用,也有很多轮子可以使用
P13算法入门
算法:解决问题的基本步骤
记载最多的算法之一是排序
大O表示法
O(n)
O(n的平方)
......
用来表示算法的效率
算法无处不在!!!
P14数据结构
都懂辣,就不用记了
P15 阿兰 图灵
Lambda算子的数学表达系统
图灵机:通过计算机系统提供简单又强大的数学计算模型
不过计算机的计算能力是有极限的
P16软件工程
把函数打包成对象的思想叫"面向对象编程"
API可以帮助不同程序员合作,不用知道具体细节,只需要知道如何使用就可以了
git就是代码管理,可以帮助程序员修改代码
P17集成电路与摩尔定律
PCB:印刷电路板
芯片的核心都是一小片IC
P18操作系统
三大特性:多任务,虚拟内存,内存保护
随着计算机处理数据速度越来越快,放置数据的速度比计算机处理数据的速度还要慢,因此需要一种方式让计算机自动运作,于是,操作系统诞生了。
操作系统充当软件和硬件之间的媒介
操作系统提供API来抽象硬件,叫"设备驱动程序"
批处理
当计算机运行完一个程序,会自动运行下一个程序
多任务处理
虚拟内存
由于程序在内存中的分配可能不是连续的,抛出"虚拟内存"的概念,即程序可以假定内存总是从0开始,而实际物理位置,被操作系统隐藏和抽象了
操作系统会自动处理虚拟内存和物理内存之间的映射
动态内存分配
是程序的内存大小可以灵活增减
好处:简化了一切,为操作系统同时运行多个程序提供了极大的灵活性
内存保护
当一个程序使用了虚拟内存后,自己出现了一些问题,如被病毒入侵,这时由于虚拟内存的存在,并不会影响到其他程序