数据结构与算法,毕生的事业
gpu:ai人工智能
汇编语言执行过程:
汇编语言的本质:机器语言的助记符 其实它就是机器语言

计算机通电 -> CPU读取内存中程序(电信号输入)

->时钟发生器不断震荡通断电 ->推动CPU内部一步一步执行

(执行多少步取决于指令需要的时钟周期)

->计算完成->写回(电信号)->写给显卡输出(sout,或者图形)

c–机器语言

java----jvm指令----机器语言

cpu也连接io总线,不止跟内存交互

汇编本质:助记符

PC -> Program Counter 程序计数器 (记录当前指令地址)

Registers -> 暂时存储CPU计算需要用到的数据(寄存器),因为内存太远

ALU -> Arithmetic & Logic Unit 运算单元

CU -> Control Unit 控制单元

MMU -> Memory Management Unit 内存管理单元
在这里插入图片描述

cpu是整个核心在于:它是一个协调器

cpu和内存:是计算机的核心

io总线:理解我一颗一颗的电路,综合在一起

io Bridge:io 桥,北桥总线

(冷知识:jvm相当于模拟的硬件计算机)jvm 的程序计数器存的地址指令,执行完一条指令后

进行计算如+1,执行下一条指令

过程:内存2+3–>分别放在两个寄存器—>在PC 找到指令add, 再到ALU电路的一系列运算,然后再写回内存

四核八线程:线程上下文切换
在这里插入图片描述

两核cpu形成共享缓存L3 64个字节容易形成伪共享,性能效率太低

按块读取
在这里插入图片描述

不同计算机用不同的协议

mesi协议不够用,因为它缓存怼满了

volita关键字:(MESI+缓存锁),极端情况用总线锁(效率低,多块多缓存情况下用)

为什么用voliate:cpu与内存存在高速缓存,缓存有多个副本,副本与副本之间存在不可见性的问题

例子: x y,因为是按块读取的所以存在修改x的值,另外一核的x也跟着修改,为了保持一致性它就

消耗性能,所以用字节数对齐补充的方法提高效率
在这里插入图片描述
因特尔认为一个行64个字节是最好的
缓存行对齐:对于有些特别敏感的数字,会存在线程高竞争的访问,为了保证不发生伪共享,可以使用缓存航对齐的编程方式
JDK7中,很多采用long padding提高效率
JDK8,加入了@Contended注解(实验)需要加上:JVM -XX:-RestrictContended

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐