关于使用CPU缓存的一个小栗子

一、背景知识

CPU缓存(Cache Memory),是位于CPU与内存之间的临时存储器,它的容量比内存小的多但是交换速度却比内存要快得多。高速缓存的出现主要是为了解决CPU运算速度与内存读写速度不匹配的矛盾,因为CPU运算速度要比内存读写速度快很多,这样会使CPU花费很长时间等待数据到来或把数据写入内存。在缓存中的数据是内存中的一小部分,但这一小部分是短时间内CPU即将访问的,当CPU调用大量数据时,就可避开内存直接从缓存中调用,从而加快读取速度。

----以上引自度娘百科,懒呐- -"

缓存中是由缓存行来管理的,典型的缓存行大小为64bytes,一次读入就是64bytes。即使仅仅想读入一个Int64,实际上也是将其后的56bytes也读进来。

因此如果需要操作一个Length为8的Int64数组,一次读入,次次命中,嗨吧~~

 

二、栗子

设计了一个小栗子,是累加一个二维Int64的数据:

如果从一维循环,那么类似于顺序读入,这样应该能实现1次读入缓存,后7次命中,性能应该会好一些。

如果从二维循环,那么读入一次缓存,后面的就没办法命中了,性能一定是底很多。

 

三、栗子代码

 1 using System;
 2 
 3 namespace PerformanceOfCacheLineTest
 4 {
 5     class Program
 6     {
 7         private const Int64 ONE_DIMENSION = 1024 * 1024;
 8         private const Int64 TWO_DIMENSION = 64;
 9 
10         static void Main(string[] args)
11         {
12             Int64[][] array = new Int64[ONE_DIMENSION][];
13             for (int i = 0; i < ONE_DIMENSION; i++)
14             {
15                 array[i] = new Int64[TWO_DIMENSION];
16                 for (int j = 0; j < TWO_DIMENSION; j++)
17                 {
18                     array[i][j] = 0;
19                 }
20             }
21 
22             Console.WriteLine("starting....");
23 
24             DateTime start = System.DateTime.Now;
25             Int64 sum = 0;
26             for (int i = 0; i < ONE_DIMENSION; i++)
27             {
28                 for (int j = 0; j < TWO_DIMENSION; j++)
29                 {
30                     sum += array[i][j];
31                 }
32             }
33             DateTime end = System.DateTime.Now;
34             Console.WriteLine("one dimension first: using " + (end - start).TotalMilliseconds);
35 
36 
37             start = System.DateTime.Now;
38             for (int j = 0; j < TWO_DIMENSION; j++)
39             {
40                 for (int i = 0; i < ONE_DIMENSION; i++)
41                 {
42                     sum += array[i][j];
43                 }
44             }
45             end = System.DateTime.Now;
46             Console.WriteLine("two dimension first: using " + (end - start).TotalMilliseconds);
47 
48             Console.WriteLine("...ended");
49             Console.Read();
50         }
51     }
52 }

 

四、栗子结果

 

五、结论

差距还是很明显的哟,印证了假设。

作为一枚肉鸟,学到新的东西总是让人耳目一新,世界观都不一样了呢*_*。。。需要学习的东西还很多呀!!!

转载于:https://www.cnblogs.com/DexterDi/p/4371613.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/550108.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

输入快捷键显示未知命令_「干货」华为VRP基础和常用命令了解一下

华为VRP系统的理解手机里面是安卓系统&#xff0c;电脑里面windows系统在我们路由器、交换机、防护墙等网络设备中他们当中的系统就是VRP系统(通用路由平台)可以理解为华为的类型交换机&#xff0c;华为类型路由器以及防火墙他们之间的命令行几乎都是一样华为设备提供丰富的功能…

【第59题】【062题库】2019年OCP认证062考试新题

59题、choose three Which three statements are true about naming methods? A) In the Easy Connect method, clients can connect to a database server by using the host name of the database with an optional port and service name. B) The local naming method does…

jq获取页面高度_JQ获取窗口文档等等高度总结!

$(document).ready(function(){alert($(window).height()); //浏览器时下窗口可视区域高度alert($(document).height()); //浏览器时下窗口文档的高度alert($(document.body).height());//浏览器时下窗口文档body的高度alert($(document.body).outerHeight(true));//浏览器时下…

【第60题】【062题库】2019年OCP认证062考试新题

60题、choose one When does a database checkpoint occur? A) When there is an online redo log switch. B) When the SHUTDOWN ABORT command is issued. C) When a user session terminates abnormally. D) When a server process terminates abnorthally. Answer&#xf…

2 字符串求交集_PostGIS教程十八:维数扩展的9交集模型

一、什么是维数扩展的9交集模型"维数扩展的9交集模型-Dimensionally Extended 9-Intersection Model"&#xff08;DE9IM&#xff09;是一个用于建模两个空间对象如何交互的框架。首先&#xff0c;每个空间对象都具有&#xff1a;内部&#xff08;interior)边界&#…

房子里的K2 BPM业务流程管理

房…子这件事上&#xff0c;尴尬实在太多。 ಥ_ಥ 职场新人&#xff0c;租房很尴尬&#xff1b; 未婚男女&#xff0c;婚房很尴尬&#xff1b; 有下一代的&#xff0c;学区房很尴尬&#xff1b; 耄耋之年&#xff0c;养老房很尴尬... ▽ 甭管买房、租房、装修、设计&#xff0c…

大学生体测成绩判断c语言_体育改革瞄准高校,体测不过关可能真的毕不了业了...

「ECO氪体」体育圈人www.ecosports.cn文/ 圈哥回忆上学期间&#xff0c;体育最令你头疼的时刻是什么&#xff1f;是不是在体育中考将要到来之前&#xff0c;还没日没夜枯燥的训练和近乎苛刻的饮食控制&#xff1f;而现在&#xff0c;体育似乎不想再局限于中学了。图片截自&…

delphi 基础之三 文件流操作

文件流操作 Delphi操作流文件:什么是流&#xff1f;流,简单来说就是建立在面向对象基础上的一种抽象的处理数据的工具。在流中,定义了一些处理数据的基本操作,如读取数据,写入数据等,程序员是对流进行所有操作的,而不用关心流的另一头数据的真正流向。流不但可以处理文件,还可以…

mongodb 存储过程 遍历表数据_mongodb推荐存列表字段还是多条记录?

在 sql 下, 方案2更好. 在 mongo 下, 方案1更好.不知道你的这个项目中有没有用户权限组的概念.如果有权限组的话, 就是一个权限组的 collection 里面, 每个权限下保存了一个菜单项的数组.如果没有权限组的话, 就可以按照你说的方案1, 在每个用户表里, 或者单独的用户权限表里, …

学习小记----分层图最短路

前置知识 简单的图论知识 简单的&#xff44;&#xff50;知识 使用标志 你机智的发现了这是一道图论题,并且出现了类似于N次免费/花费变化的字样,大部分就是分层图最短路了. 它不是不是很难&#xff0c;就是那种&#xff0c;那种看起来很凶神恶煞的&#xff0c;你知道么&#…

gojs 节点右键点击事件_SWMM快速建模方法(3)—建立管线上下游节点编号

在SWMM中&#xff0c;管线需要输入上下游节点检查井编号&#xff0c;那么在GIS中可否实现自动获取上下游节点编号呢&#xff1f;思路是这样的&#xff0c;首先获得管线两端节点&#xff0c;然后对端点进行融合&#xff0c;删除重复的节点&#xff0c;最后根据坐标关系分别建立管…

android 设置setmultichoiceitems设置初始化勾选_Linux内核启动:虚拟盘空间设置和内存管理结构初始化...

1. 设置虚拟盘并初始化接下来main函数将对外设中的虚拟盘区进行设置。 检查makefile文件中"虚拟盘使用标志"是否设置&#xff0c; 以此确定系统是否使用了虚拟盘(假设有虚拟盘&#xff0c;大小设置为2 MB)。 操作系统从缓冲区的末端起开辟2MB内存空间设置为虚拟盘&am…

centos7 Failed to start iptables.service: Unit not found

在CentOS 7或RHEL 7或Fedora中防火墙由firewalld来管理 添加 firewall-cmd --zonepublic --add-port80/tcp --permanent &#xff08;--permanent永久生效&#xff0c;没有此参数重启后失效&#xff09;firewall-cmd --zonepublic --add-port1000-2000/tcp --permanent 重新载…

关闭mysql服务的方法有哪些_MySQL--启动和关闭MySQL服务

介绍了启动服务器的两种方式&#xff0c;以及可能遇到的问题第一种&#xff1a;系统服务1)可以通过右击方式一步步找到服务右击计算机->选择管理->找到服务&#xff0c;然后双击打开&#xff0c;找到mysql&#xff0c;我安装的是mysql8.0所以服务的名称显示是mysql80&…

[浪风分享]很简单的查看电脑所支持的最大内存的方法--磨刀不误砍柴工

硬件操作系统&#xff1d;&#xff1d;&#xff1d;&#xff1d;决定支持的最大内存  在开始&#xff0d;&#xff0d;&#xff0d;运行处输入cmd&#xff08;或者按住winkdyR键输入&#xff23;&#xff2d;&#xff24;&#xff09;&#xff0c;打开命令窗口&#xff0c;输…

mysql mysar_使用mysar分析squid日志(日志存mysql)

需要的包&#xff1a;php5-mysql #安装后php才能联系数据库php5-commonphp5-cli #执行php脚本需要mysql-server开始安装:下载最新的mysar包tar zxvf mysar-2.0.6.tar.gz -C /usr/local-#将mysar解压到/usr/local下ln -s /usr/local/mysar/etc/mysar.apache /etc/apache2/…

mysql语句怎么记_Mysql常用语句(记一下,免得忘)

1、去掉某列记录中的特殊字符例如&#xff1a;/r&#xff0c;update test_table set keyreplace(key, char(13), );其他特殊字符类似。2、查询重复的记录Select weixinid From dianxin_highda_detail Group By weixinid Having Count(*)>1;3、从txt向数据库导入记录load dat…

ZSH终端 乱码问题

参考链接 CSDN 转载于:https://www.cnblogs.com/eat-too-much/p/11216073.html

mysql将数据导入mgr_MySQL 8.0.20 MGR数据迁移过程以及注意事项

1.背景近期由于业务调整&#xff0c;需要将Windows Server 2008 MySQL5.5数据库迁移到Windows Server 2012 MySQL8.0集群MGR中&#xff0c;由于实际部署时&#xff0c;有一台机器硬盘损坏&#xff0c;只能构建双节点MGR&#xff0c;在迁移以及应用迁移过程中遇到许多参数与迁移…

安装 搜狗输入法 ubuntu 18

命令 sudo dpkg -i sogoupinyin_2.2.0.0108_amd64.deb sudo apt --fix-broken install 转载于:https://www.cnblogs.com/eat-too-much/p/11216083.html