ip软件介绍

CPU基础知识讲解3

标签: | 作者:admin | VISITORS: | 来源:未知
29
Dec
2022

如何解决这一问题?由于本篇文章只是期望对CPU知识进行一个科普,不希望对于小白来说一次性接触大量的新内容,所以这两个问题我准备在后面的另外两篇再进行更细致的讨论4性能对比下面以几个实际的例子来加深大家对Cache Line如何影响程序性能的理解示例一我们假设有一个5000万长度的int数组,接着把这个数组的其中一些元素乘以2,考虑下面这两份代码直觉上代码一比代码二少循环了4倍,并且也少乘2了4倍,理论上代码一比代码二快4倍左右才合理但在我的服务器上运行的结果是代码一平均花费90毫秒,代码二平均花费93毫秒,性能几乎是差不多的,读者可以自行思考一下原因,再点击下方空白处查看解析点击下方空白区域查看解析▼解析这里最主要的原因还是Cache
Line,虽然代码一需要执行的指令确实比代码二要少4倍,但由于CPU一次会把连续的64个字节都读入缓存,而读写缓存的速度又特别快(还记得吗?L1的读取速度只有约4个时钟周期,是内存的50倍),以至于我们很难察觉到这4倍指令的差距示例二假设我们需要遍历一个二维数组,考虑下面这两种遍历方法:由于数组长度是一模一样的,直觉上我们期望的是两份代码运行时间相差无几。

但在我的服务器上代码一运行需要23毫秒,代码二运行需要51毫秒,读者可以自行思考一下原因,再点击下方空白处查看解析点击下方空白区域查看解析▼解析这里最主要的原因依然是Cache Line,由于C语言中二维数组的内存是连续的,所以我们按行访问的时候访问的一直都是连续的内存,而Cache
Line也是连续的64个字节,所以按行访问对Cache Line更友好,更容易命中缓存而按列访问的话每次访问的内存不是连续的,每次的跨度都是256__sizeof(int)也就是1KB,更容易出现缓存Miss示例三假设我们有一个数组,我们希望计算所有大于100的元素的和,考虑下面两份代码其中代码一是随机生成了个长度为1000W的数组,然后统计大于100的所有数字的和;代码二也是随机生成了个长度为1000W的数组,但是是先排完序,再统计大于100的所有数字的和。


电脑常见英文词汇


 Database数据库
database files数据库文件
Database manager数据库管理
Data bus数据总线
Data projector数码放映机
Desktop system unit台式电脑系统单元
Destination file目标文件
Digital cameras数码照相机
Digital notebooks数字笔记本
Digital bideo camera数码摄影机
Discrete-speech recognition system不连续语言识别系统
Document文档

相关新闻
首页 | ip使用技巧 | 云手机使用相关 | ip软件介绍 | 蛙仔云手机
 分享按钮