cpu总结

前言

有了内存,为什么还需要 CPU Cache?
CPU 是怎么读写数据的?
如何让 CPU 能读取数据更快一些?
CPU 伪共享是如何发生的?又该如何避免?
CPU 是如何调度任务的?如果你的任务对响应要求很高,你希望它总是能被先调度,这该怎么办?
在这里插入图片描述

CUP如何读取数据

架构

在这里插入图片描述
一个 CPU 里通常会有多个 CPU 核心,比如上图中的 1 号和 2 号 CPU 核心,并且每个 CPU 核心都有自己的 L1 Cache 和 L2 Cache,而 L1 Cache 通常分为 dCache(数据缓存) 和 iCache(指令缓存),L3 Cache 则是多个核心共享的,这就是 CPU 典型的缓存层次。

存储设备共同构成了金字塔存储层次

在这里插入图片描述

访问延时

时间转换
1秒=1000毫秒(ms),1毫秒=1/1000秒(s);
1秒=1000000 微秒(μs),1微秒=1/1000000秒(s);
1秒=1000000000 纳秒(ns),1纳秒=1/1000000000秒(s);
1秒=1000000000000皮秒 1皮秒==1/1000000000000秒.
在这里插入图片描述
CPU 访问 L1 Cache 速度比访问内存快 100 倍,这就是为什么 CPU 里会有 L1~L3 Cache 的原因,目的就是把 Cache 作为 CPU 与内存之间的缓存层,以减少对内存的访问频率。

CPU 从内存中读取数据到 Cache 的时候,并不是一个字节一个字节读取,而是一块一块的方式来读取数据的,这一块一块的数据被称为 CPU Line(缓存行),所以 CPU Line 是 CPU 从内存读取数据到 Cache 的单位。
CPU Line 大小,在 Linux 系统可以用下面的方式查看到,你可以看我服务器的 L1 Cache Line 大小是 64 字节,也就意味着 L1 Cache 一次载入数据的大小是 64 字节。
在这里插入图片描述
对数组的加载, CPU 就会加载数组里面连续的多个数据到 Cache 里,因此我们应该按照物理内存地址分布的顺序去访问元素,这样访问数组元素的时候,Cache 命中率就会很高,于是就能减少从内存读取数据的频率, 从而可提高程序的性能。

Cache 伪共享是什么?又如何避免这个问题?

在这里插入图片描述

cup结构

Program Counter(程序计数器)初始内容为100,指向内存中的某一项指令,这里的100指的是地址;
Instruction Register(指令寄存器)根据程序计算器的指向地址,将内存中地址为100的指令抓取到自身,此时存放LOAD A,2000
Data Register(数据寄存器)
ALU(算数逻辑单元)
![在这里插入图片描述](https://img-blog.csdnimg.cn/8a1a5c1ae67c4c289ad9d89ee594cdc8.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值