首页 > 其他分享 >CPU缓存学习

CPU缓存学习

时间:2023-04-13 20:22:23浏览次数:40  
标签:缓存 int cpu 学习 内存 Line CPU

cpu缓存分为L1cache,L2cache,L3cache

L1为每个cpu独有缓存,L3为几个cpu的共有缓存,所以内存大小L3也是最大
相应的L1,L2,L3速度也是由快到慢

cpu cache从内存读取数据的单位是缓存块(Cache Line),大小取决于coherency_line_size

访问cpucache,需要从cpu line中读取,地址索引由组标记,cpuline索引,偏移量组成

cpu在cache中查询数据:直接映射(还有其他方式)

1.根据内存地址中索引信息,计算在 CPU Cahe 中的索引,也就是找出对应的 CPU Line 的地址;

2.找到对应 CPU Line 后,判断 CPU Line 中的有效位,确认 CPU Line 中数据是否是有效的,如果是无效的,CPU 就会直接访问内存,并重新加载数据,如果数据有效,则往下执行;

3.对比内存地址中组标记和 CPU Line 中的组标记,确认 CPU Line 中的数据是我们要访问的内存数据,如果不是的话,CPU 就会直接访问内存,并重新加载数据,如果是的话,则往下执行;

4.根据内存地址中偏移量信息,从 CPU Line 的数据块中,读取对应的字。


想让代码运行的更快,就是尽量多的命中cpucache
比如二维数组在内存中的布局:int[2][2] ========> a[0][0] a[0][1] a[1][0] a[1][1]

两种使用方法:

1.
for(int i=0;i<2;i++){
for(int j=0;j<2;j++){
a[i][j]
}
}

2.
for(int i=0;i<2;i++){
for(int j=0;j<2;j++){
a[j][i]
}
}


明显方法1访问数据的顺序是按序的,因为cpucache的取数据是一块一块取得,方法二的话就得跳转,如果行列数比较大的话还得重新读取内存

怎么提升多核cpu的效率:当执行计算密集型任务时,l1和l2因为是cpu独有的cache,缓存命中率就会降低,可以绑定到一个核心进行操作

标签:缓存,int,cpu,学习,内存,Line,CPU
From: https://www.cnblogs.com/zz01/p/17316259.html

相关文章

  • 函数调用栈学习
    栈:在函数调用时,第一个进栈的是主函数中函数调用后的下一条指令(函数调用语句的下一条可执行语句)的地址,然后是函数的各个参数,在大多数的C编译器中,参数是由右往左入栈的,然后是函数中的局部变量。注意静态变量是不入栈的。当本次函数调用结束后,局部变量先出栈,然后是参数,最......
  • 虚幻引擎 4 学习笔记 [1] :蓝图编程 Demo
    虚幻引擎4学习笔记[1]:蓝图编程Demo​ 最近学习虚幻引擎,主要看的是Siki学院的课,课程链接:Unreal蓝图案例-基础入门-SiKi学院|SiKi学堂-unity|u3d|虚幻|ue4/5|java|python|人工智能|视频教程|在线课程(sikiedu.com)​ 以下为课程笔记:1.创建工程​ 选择蓝图,不带初......
  • ROS学习笔记(二)- 提供服务和调用服务
    书接上回-https://www.cnblogs.com/lihan829/p/17315435.html前面展示了ROS节点发布和订阅消息,这次展示如何提供服务和调用服务。提供服务和调用服务很好理解,概念和行为上并不深奥,就是远程过程调用,可类比为http接口的远程调用,grpc接口的远程调用等等。1,服务提供方,定义服务,服......
  • C#多线程学习(一) 多线程的相关概念
    C#多线程学习(一)多线程的相关概念什么是进程?当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源。而一个进程又是由多个线程所组成的。什么是线程?线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等),但代码......
  • go语言学习-gin框架会话控制
    cookie介绍HTTP是无状态协议,服务器不能记录浏览器的访问状态,也就是说服务器不能区分两次请求是否由同一个客户端发出Cookie就是解决HTTP协议无状态的方案之一,中文是小甜饼的意思Cookie实际上就是服务器保存在浏览器上的一段信息。浏览器有了Cookie之后,每次向服务器发送请求时都会同......
  • ahooks 源代码学习(一)
    无论人生上到哪一层台阶,阶下有人在仰望你,阶上亦有人在俯视你。你抬头自卑,低头自得,唯有平视,才能看见真正的自己。ahooks好久之前就知道,但是几乎不怎么使用,最近正在尝试使用一些,而且也对其中的一些简单的hooks的原理感兴趣,下面记录几个吧1.第一个当然是最简单的(由浅入深)useTo......
  • 查看linux进程/线程跑在哪个cpu核上
    方法一:使用top-Hppid然后按f,选择p,然后esc就行了方法二: psH-opid,lwp,psr,comm -p11115psr对应系统cpu线程号......
  • springboot学习之四(整和mybatis)
    springboot整和mybatis    1.mapper文件开发 2.纯注解开发    https://www.cnblogs.com/fps2tao/p/13821490.html ......
  • mysql创建百万条虚假数据进行学习
    1.创建基础表CREATETABLE`app_user`(`id`bigint(20)unsignedNOTNULLAUTO_INCREMENT,`name`varchar(50)DEFAULT''COMMENT'用户昵称',`email`varchar(50)NOTNULLCOMMENT'用户邮箱',`phone`varchar(20)DEFAULT'......
  • springboot学习之三(整个redis)
     springboot整合redis1.依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>2.配置#Redis配置spring.r......