浅谈CPU性能问题

1.什么是性能:

我们需要有个标准来衡量。这个标准中主要有两个指标:

第一个是响应时间(Response time)或者叫执行时间(Execution time)。想要提升响应时间这个性能指标,你可以理解为让计算机“跑的更快”

第二个是吞吐率(Throughout)或者带宽(Bandwidth),想要提升这个指标,你可以理解为让计算机“搬得更多”。

我们一般把性能,定义成响应时间的倒数,也就是:性能 = 1 / 响应时间

2.计算机的计时单位:CPU时钟

由于时间这个性能指标还会受到主板、内存这些其他相关硬件的影响,所以我们需要对“时间”这个我们可以感知的指标进行拆解,把程序的CPU执行时间变成CPU时钟周期数(CPU Cycles)和时钟周期时间(Clock Cycles)的乘积。

程序的CPU执行时间 = CPU时钟周期数 * 时钟周期时间

1)时钟周期时间:

你在买电脑的时候,一定关注过CPU的主频。比如我手头的这台电脑就是Intel COre-i7-7700HQ 2.8GHz,这里的2.8GHz就是电脑的主频。这个2.8GHz,我们可以粗浅的认为,CPU在1秒时间内,可以执行的简单指令的数量是2.8G条

如果想要更准确一点描述,这个2.8GHz就代表,我们CPU的一个“钟表”能够识别出来的最小的时间间隔。

在CPU内部,和我们平时戴的电子石英表类似,有一个叫晶体振荡器(Oscillator Crystal)的东西,简称为晶振。我们把晶振当成CPU内部的电子表来使用。晶振带来的每一次“滴答”,就是时间周期时间。

2)CPU时钟周期数:

我们再做一个分解,把他变成“指令数 * 每条指令的平均时间周期数(Cycles Per  Instruction,简称CPI)。不同的指令需要的Cycles是不同的,加法和乘法都对应着一条CPU指令,但是乘法需要的Cycles就比加法要多,我们的程序的CPU执行时间就可以变成这样三个部分的乘积。

程序的CPU执行时间 = 指令数 * CPI * Clock Cycles Time

因此,如果我们想要解决性能问题,其实就是要优化这三者。

1.时钟周期时间,就是计算机的主频,这个取决于计算机硬件。

2.每条指令的平均周期数CPI,就是一条指令到底需要多少CPU Cycle。在后面讲解CPU结构的时候,我们会看到,现代的CPU通过流水线技术,让一条指令需要的CPU Cycle尽可能地少。因此,对于CPU的优化,也是计算机组成和体系结构中的重要一环。

3.指令数,代表执行我们的程序到底需要多少条指令,用哪些指令。这个很多时候就把挑战交给了编译器。同样的代码,编译成计算机指令时候,就有各种不同的表示方式。

入门书籍推荐:

《计算机是怎么跑起来的》和《程序是怎样跑起来的》着重后面那本,可以说是一个入门微缩版本的“计算机组成原理”。

以及Coursera上的北京大学免费公开课《Computer Organization》

原文地址:https://www.cnblogs.com/mylearning-log/p/10854676.html

时间: 2024-10-11 03:14:56

浅谈CPU性能问题的相关文章

五 浅谈CPU 并行编程和 GPU 并行编程的区别

前言 CPU 的并行编程技术,也是高性能计算中的热点,也是今后要努力学习的方向.那么它和 GPU 并行编程有何区别呢? 本文将做出详细的对比,分析各自的特点,为将来深入学习 CPU 并行编程技术打下铺垫. 区别一:缓存管理方式的不同 GPU:缓存对程序员不透明,程序员可根据实际情况操纵大部分缓存 (也有一部分缓存是由硬件自行管理). CPU:缓存对程序员透明.应用程序员无法通过编程手段操纵缓存. 区别二:指令模型的不同 GPU:采用 SIMT - 单指令多线程模型,一条指令配备一组硬件,对应32

浅谈前端性能优化(移动端)

上一篇讲了PC端的部分:前端性能优化(PC端),这次继续说移动端的.相对于PC端的,移动web浏览器上有一些明显的特点:设备的屏幕小.新特性兼容性较好.支持一些比较新的HTML5和CSS3.需要与Native应用交互等.但移动端可用的CPU资源和网络资源极为有限,因此要做好移动端web上的优化往往需要考虑做更多的事情.首先在移动web的前端页面渲染中,PC的优化规则同样适用,此外针对浏览器也要做一些更细节的优化达到更好的效果.需要注意的是,并不是移动端的优化在PC端不适用,而是由于兼容性的原因,

浅谈javascript性能-管理内存

上次说到,javascript脚本到底应该放在哪里?用什么用处? 以下2点: 在Html.Body部分中的JS会在页面加载的时候执行.即-用户触发一个事件的时候执行的脚本.eg:onload事件... 在Html.Head部分中的JS会在被调用的时候执行.即-常被用来生成页面的内容. 总而言之:将Javascript标识放置<head>...</head>在头部中间,此时,*.js文件的提前调用:也就是说代码放在<head>区域载入的时候,就同时载入了代码,你再<

浅谈Apache性能调优

做了很多WEB系统性能测试,都知道了解测试环境,服务器硬件配置,web服务器参数配置是我们开始测试前首先要做的事情. 针对并发数量来说,不同数量级的用户并发,需求的服务器和web服务参数肯定是不同的. 对于很多像我们这些做性能测试的人员,测试结果的正确性经常会被怀疑,甚至有时候也会被自己怀疑. 是什么原因导致呢? 我觉得,是因为我们对Web系统不够熟悉,对Apache不够熟悉,或者你熟悉但都是理论上的,所以不够自信. 因此,经常看到测试人在测试过程中,认为并发用户数量跑完就看有没有报错,是否全部

开发高性能的MongoDB应用—浅谈MongoDB性能优化(转)

出处:http://www.cnblogs.com/mokafamily/p/4102829.html 性能与用户量 “如何能让软件拥有更高的性能?”,我想这是一个大部分开发者都思考过的问题.性能往往决定了一个软件的质量,如果你开发的是一个互联网产品,那么你的产品性能将更加受到考验,因为你面对的是广大的互联网用户,他们可不是那么有耐心的.严重点说,页面的加载速度每增加一秒也许都会使你失去一部分用户,也就是说,加载速度和用户量是成反比的.那么用户能够接受的加载速度到底是多少呢? 如图,如果页面加载

浅谈JavaScript性能

最近在JavaScript性能方面有所感悟,把我的经验分给大家: 说到JavaScript,就不得不说它的代码的运行速度—— 在我初学JavaScript的时候,只是觉得它是一个很强大的脚本.渐渐的,在做一些大的网站的项目的时候,却发现,代码执行的却异常的慢(尽管JavaScript用的是V8引擎),任然不能满足我的需求.这时候,我才慢慢的关注性能这一名词.在以前,个人总是喜欢在网上搜一些好的插件,并把它用到网站的建设工作当中.那么问题来了,在大量的插件的使用当中,网页总是要运行很久,处于很长时

开发高性能的MongoDB应用—浅谈MongoDB性能优化

关联文章索引: 大数据时代的数据存储,非关系型数据库MongoDB(一) 性能与用户量 “如何能让软件拥有更高的性能?”,我想这是一个大部分开发者都思考过的问题.性能往往决定了一个软件的质量,如果你开发的是一个互联网产品,那么你的产品性能将更加受到考验,因为你面对的是广大的互联网用户,他们可不是那么有耐心的.严重点说,页面的加载速度每增加一秒也许都会使你失去一部分用户,也就是说,加载速度和用户量是成反比的.那么用户能够接受的加载速度到底是多少呢? 如图,如果页面加载时间超过10s那么用户就会离开

浅谈CPU,GPU,TPU,DPU,NPU,BPU

https://www.sohu.com/a/191538165_777155 A12宣传的每秒5万亿次运算,用计算机语言描述就是5Tops. 麒麟970 NPU,根据资料是 1.92Tops. 麒麟980 NPU,提升是970的120%,也就是1.92TopsX2.2=4.23Tops. A11大约0.6Tops,官方宣称8核也就是0.6X8=4.8约等于5Tops,没有虚假宣传. 其他soc没有NPU都是利用其他gpu进行神经网络计算,就不统计了. GTX1080是FP32的计算能力,也就是

浅谈 js 下 with 对性能的影响

这几天多次看到有博主们在写 with 的文章,这货确实非常方便,但是却是个性能杀手,所以一直都是上不得台面的.那么他究竟会让效率低下到什么程度呢?先来看下 with 是如何的便捷吧.. // 正常调用 console.log(location.host); console.log(location.pathname); // 在 with 下 with (location) { console.log(host); console.log(pathname); } 如果不影响性能,确实是非常霸气