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

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

image.png

对于L2缓存来说,

第一次获取数据 a11(“1”)的时候其实是没有数据的,所以会耗时去把 a11,a12,a13(“1,2,3”)都取回来缓存起来。

当第二次取 a12、a13的时候候就直接从L2缓存取了。这样 cache 命中率就是 66.7%.

对于L3的情况类似。

这样的遍历方式对于CPU来说是一个很友好且高效的。

C代码块 就是这种横向优先的访问方式。

 A代码块 里面对 arrays_A 的方式是横向优先遍历的,但是在处理 arrays_B 的时候就是纵向遍历的(也就是下面即将提到的方式)。

 B代码块 所有的访问都是纵向的(不友好的遍历方式)。因为发挥不出CPU缓存的效果,所以性能最差。

2.2.2 不友好的遍历方式

从上到下,再从左到右。

image.png

为啥这是一个不好的遍历方式呢?

这个得结合上一节Java的二维数组的存储结构一起看。再来回顾一下:

image.png

从上面的存储的结构图来看,其实 a11,a12,a13 与 a21,a22,a23 行与行之间并不是连续的。所以对于L1、L2、L3缓存来说很有可能是不能一起被缓存的(这里用了可能,具体得看L1、L2、L3的容量和数组的大小)。虽然是可能,但是通常都不会一起出现。

有了这个知识之后,我们再来看,先从上到下,再从左到右的顺序的缓存命中率。

第一次,获取 a11,但是缓存里面没有,找到 a11 之后就把 a11,a12,a13 缓存下来了。

第二次,获取 a21,但是缓存里面没有,找到 a21 之后就把 a21,a22,a23  缓存下来了,假设有CPU有两行的缓存空间。

第三次,获取 a31,但是缓存里面没有,找到 a31 之后把 a31,a32,a33  缓存下来,并且把 a11,a12,a13  替换掉(缓存的空间有限,虽然具体的替换策略有很多种,并且还和数据本身的Hash有关系,这里就假设把第一次的结果覆盖了)。

后面的逻辑重复之前的步骤。最后得到的缓存命中率就是 0% 。

结合文章开头的缓存速率表格,我们就不难发现,如果我们每次都不命中缓存的话,那么延迟带来的耗时将会相差一个数量级。


目录
相关文章
|
Java Linux
linux中找到最耗CPU的那段Java代码
linux中找到最耗CPU的那段Java代码
247 0
|
调度
CPU调度器实现提示:针对特定体系结构代码【ChatGPT】
CPU调度器实现提示:针对特定体系结构代码【ChatGPT】
|
并行计算 异构计算 Python
python代码torch.device("cuda:0" if torch.cuda.is_available() else "cpu")是什么意思?
【6月更文挑战第3天】python代码torch.device("cuda:0" if torch.cuda.is_available() else "cpu")是什么意思?
2058 4
|
机器学习/深度学习 TensorFlow API
Keras是一个高层神经网络API,由Python编写,并能够在TensorFlow、Theano或CNTK之上运行。Keras的设计初衷是支持快速实验,能够用最少的代码实现想法,并且能够方便地在CPU和GPU上运行。
Keras是一个高层神经网络API,由Python编写,并能够在TensorFlow、Theano或CNTK之上运行。Keras的设计初衷是支持快速实验,能够用最少的代码实现想法,并且能够方便地在CPU和GPU上运行。
|
Java Linux
Linux下如何定位最耗CPU的JAVA代码
Linux下如何定位最耗CPU的JAVA代码
244 0
|
监控 数据可视化 Java
双CPU监控的目的以及主流编程语言实现代码示例
监控CPU使用率可以帮助检测系统瓶颈和性能问题,有助于及时识别并解决故障。
689 2
|
监控 调度 Python
电脑监控软件所含的CPU资源监控的代码(使用psutil库)
本文使用psutil库来获取CPU使用率、运行的进程、CPU温度、风扇速度和CPU核心的工作情况。这些信息可用于自定义电脑监控软件的CPU资源监控功能
884 1
|
6月前
|
缓存 人工智能 算法
不同业务怎么选服务器?CPU / 内存 / 带宽配置表
本文详解了服务器三大核心配置——CPU、内存、带宽,帮助读者快速理解服务器性能原理。结合不同业务场景,如个人博客、电商、数据库、直播等,提供配置选择建议,并强调合理搭配的重要性,避免资源浪费或瓶颈限制。内容实用,适合初学者和业务选型参考。
999 0
|
6月前
|
存储 消息中间件 缓存
从纳秒到毫秒的“时空之旅”:CPU是如何看待内存与硬盘的?
在数据爆炸的时代,如何高效存储与管理海量数据成为系统设计的核心挑战。本文从计算机存储体系结构出发,解析B+树、LSM树与Kafka日志结构在不同数据库中的应用与优化策略,帮助你深入理解高性能存储背后的原理。
213 0
|
8月前
|
存储
阿里云轻量应用服务器收费标准价格表:200Mbps带宽、CPU内存及存储配置详解
阿里云香港轻量应用服务器,200Mbps带宽,免备案,支持多IP及国际线路,月租25元起,年付享8.5折优惠,适用于网站、应用等多种场景。
2744 0

热门文章

最新文章