这代码居然有差别?CPU友好的代码该这样写(2)

简介: 这代码居然有差别?CPU友好的代码该这样写

L1 、L2、L3、主存 的大小是逐渐增大,速度是逐渐减小的。

下面是现代CPU的一个架构示意图:

image.png

其中:Regs,是寄存器。

d-cache,是数据缓存。

i-cache,是指令缓存。

本次我们并不讨论这个缓存快的影响。

L1、L2、L3和主存的缓存的内容,可以参考下图:

image.png

图片来自:https://www.deskdecode.com/what-is-cpu-central-processing-unit-and-how-its-work/

CPU的缓存里面还有很多的细节,我就先忽略了,知道上面的信息就已经足够我们理解今天的问题了。


2.2 性能损失的原因 -- 缓存命中率

有了上面的各级别的缓存参考之后,我们可以想象一下,如果把上面的图像换成是我们的二维数组呢。是不是就是下面这样(可能没有那么严谨,但是不妨碍我们理解)。

在RAM(主存)的数据是这样的:

image.png

L3缓存就是这样的(红色框选中部分):

image.png

L2缓存就是这样的(红色框选中部分):

image.png

有了这个这些层级的缓存之后,CPU在计算的时候就可以不用来回的到速度极慢的RAM(主存)中去找数组的数据了。

2.2.1 友好的遍历方式

假设上面的数据的变量名称是A,成员使用 a 来表述。

我们取数据按照 从左到右,再从上到下 的顺序来进行遍历。

目录
相关文章
|
7月前
|
Java Linux
linux中找到最耗CPU的那段Java代码
linux中找到最耗CPU的那段Java代码
|
1月前
|
Java Linux
Linux下如何定位最耗CPU的JAVA代码
Linux下如何定位最耗CPU的JAVA代码
38 0
|
6月前
|
监控 数据可视化 Java
双CPU监控的目的以及主流编程语言实现代码示例
监控CPU使用率可以帮助检测系统瓶颈和性能问题,有助于及时识别并解决故障。
434 2
|
7月前
|
监控 调度 Python
电脑监控软件所含的CPU资源监控的代码(使用psutil库)
本文使用psutil库来获取CPU使用率、运行的进程、CPU温度、风扇速度和CPU核心的工作情况。这些信息可用于自定义电脑监控软件的CPU资源监控功能
500 1
|
7月前
|
存储 缓存 Java
这代码居然有差别?CPU友好的代码该这样写(4)
这代码居然有差别?CPU友好的代码该这样写
42 0
这代码居然有差别?CPU友好的代码该这样写(4)
|
7月前
|
存储 缓存 Java
这代码居然有差别?CPU友好的代码该这样写(3)
这代码居然有差别?CPU友好的代码该这样写
33 0
这代码居然有差别?CPU友好的代码该这样写(3)
|
7月前
|
存储 缓存 Java
这代码居然有差别?CPU友好的代码该这样写(1)
这代码居然有差别?CPU友好的代码该这样写
58 0
这代码居然有差别?CPU友好的代码该这样写(1)
|
7月前
|
缓存 安全 Java
从CPU的视角看 多线程代码为什么那么难写!
当我们提到多线程、并发的时候,我们就会回想起各种诡异的bug,比如各种线程安全问题甚至是应用崩溃,而且这些诡异的bug还很难复现。我们不禁发出了灵魂拷问 “为什么代码测试环境运行好好的,一上线就不行了?”。 为了解决线程安全的问题,我们的先辈们在编程语言中引入了各种各样新名词,就拿我们熟悉的Java为例,不仅java语言自带了synchronized、volatile、wait、notify… ,jdk中各种工具包也是层出不穷,就比如单一个Lock,就可以有很多种实现,甚至很多人都谈锁色变。
60 0
|
9月前
|
机器学习/深度学习 缓存 Linux
很底层的性能优化:让CPU更快地执行你的代码
很底层的性能优化:让CPU更快地执行你的代码
|
1月前
|
Linux
Linux rsyslog占用内存CPU过高解决办法
该文档描述了`rsyslog`占用内存过高的问题及其解决方案。
95 4