深入浅出计算机组成原理
徐文浩
bothub 创始人
70432 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 62 讲
深入浅出计算机组成原理
15
15
1.0x
00:00/00:00
登录|注册

03 | 通过你的CPU主频,我们来谈谈“性能”究竟是什么?

指令数
CPI
时钟周期时间
CPU执行时间
时钟周期时间
CPU时钟周期数
时间不准
手机跑分软件
SPEC
性能 = 1/响应时间
增加CPU核心数
提升吞吐率
缩短响应时间
吞吐率
响应时间
时间的倒数
带宽
执行时间
性能优化
CPU时钟
性能评估
性能公式
性能提升方法
性能衡量标准
性能定义
吞吐率
响应时间
性能

该思维导图由 AI 生成,仅供参考

“性能”这个词,不管是在日常生活还是写程序的时候,都经常被提到。比方说,买新电脑的时候,我们会说“原来的电脑性能跟不上了”;写程序的时候,我们会说,“这个程序性能需要优化一下”。那么,你有没有想过,我们常常挂在嘴边的“性能”到底指的是什么呢?我们能不能给性能下一个明确的定义,然后来进行准确的比较呢?
在计算机组成原理乃至体系结构中,“性能”都是最重要的一个主题。我在前面说过,学习和研究计算机组成原理,就是在理解计算机是怎么运作的,以及为什么要这么运作。“为什么”所要解决的事情,很多时候就是提升“性能”。

什么是性能?时间的倒数

计算机的性能,其实和我们干体力劳动很像,好比是我们要搬东西。对于计算机的性能,我们需要有个标准来衡量。这个标准中主要有两个指标。
第一个是响应时间(Response time)或者叫执行时间(Execution time)。想要提升响应时间这个性能指标,你可以理解为让计算机“跑得更快”。
图中是我们实际系统里性能监测工具NewRelic中的响应时间,代表了每个外部的Web请求的执行时间
第二个是吞吐率(Throughput)或者带宽(Bandwidth),想要提升这个指标,你可以理解为让计算机“搬得更多”。
服务器使用的网络带宽,通常就是一个吞吐率性能指标
所以说,响应时间指的就是,我们执行一个程序,到底需要花多少时间。花的时间越少,自然性能就越好。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了计算机性能的概念和评估方法。作者首先介绍了性能的两个主要指标:响应时间和吞吐率,并将其比喻为搬运物品的速度和数量。在讨论了提升性能的方法后,作者指出了CPU性能提升的挑战,以及如何通过性能的倒数来进行比较和评估。文章还介绍了手机跑分软件和SPEC等第三方机构对CPU性能评估的方式。此外,文章还深入解释了计算机主频、CPI以及指令数对性能的影响,并指出了优化计算机性能的三条康庄大道。整体而言,本文为读者提供了深入了解计算机性能的概念和评估方法的机会,同时也展望了未来计算机性能提升的挑战和趋势。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《深入浅出计算机组成原理》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(174)

  • 最新
  • 精选
  • 活的潇洒
    置顶
    运行的代码是: [root@nfs ~]# time seq 1000000 | wc -l 1000000 real 0m0.058s user 0m0.047s sys 0m0.044s 为什么user + sys 运行出来会比real time 多呢

    作者回复: 因为你在一台多核或者多cpu的机器上运行,seq和wc命令会分配到两个cpu上,user和sys是两个cpu时间相加的,而real只是现实时钟里走过的时间,极端情况下user+sys可以到达real的两倍

    2019-04-30
    5
    302
  • 趁早
    置顶
    time seq 100000 | wc -l 100000 real 0m0.006s user 0m0.003s sys 0m0.004s 我也是类似的问题,操作系统centos7.4,物理环境阿里云ecs cpu 信息 Intel(R) Xeon(R) Platinum 8163 CPU @ 2.50GHz

    作者回复: 我知道原因了,这个的确是因为“并行原因”的运行的。虽然seq和wc这两个命令都是单线程运行的,但是这两个命令在多核cpu运行的情况下,会分别分配到两个不同的cpu,于是user和sys的时间都是两个cpu上运行的时间之和,就可能超过real的时间。你可以这样来快速验证 运行 time seq 100000000 | wc -l & 让这个命令多跑一会儿,并且在后台运行。 然后利用 top 命令看不同进程的cpu占用情况,你会在top的前几行里看到seq和wc的cpu占用都接近100,实际是各被分配到了一个不同的cpu执行。 我写文稿测试的时候开了一个1u的最小的虚拟机,只有一个cpu所以不会遇到这个问题。

    2019-04-29
    6
    75
  • 极客雷
    搞明白这个事实就好了,一个程序对应多条语句,一条编程语句可能对应多条指令,一条CPU指令可能需要多个CPU周期才能完成。

    作者回复: 👍

    2019-05-13
    2
    198
  • Only now
    猜测,跑分程序载入后,停止操作系统的线程调度或者给最高优先级和响应中断,全力跑跑分。暂时提高时钟频率,停止温度检测和低级中断,这样CPU就全力在跑测试程序了吧。 没做过弊,猜测

    作者回复: 👍监测到跑分程序在运行进行超频或者过热也不降频是一种常见的作弊手段

    2019-04-30
    2
    99
  • 易儿易
    老师,针对“主频越高,意味着这个表走得越快,我们的 CPU 也就“被逼”着走得越快。”这句话我有一点儿疑惑: 时钟周期时间为1/2.8G 秒,代表CPU最细粒度时间,即一次晶振的时间 这个周期时间和指令执行的耗时有直接关系吗?我说的直接关系指的是比如“一次晶振时间可以固定完成n个CPU(最简单的)指令”这种,如果有关系的话,那可以很明确的得出这个表走的快,CPU执行就快,毕竟单位时间内执行的指令数固定,通过降低单位时间就可以提升效率。 但是文中好像并没有提到这个直接关系,所有我可不可以这么去理解,晶振时间变短后,CPU调度指令的周期变短频次变高,使得上一个指令执行完毕到下一个指令被调动期间的等待时间变短,从而提升了CPU的利用率。好比一个监工增加了抬头看监控视频的频率,一旦有员工手停下来能立马给安排任务,主频低的话,可能员工休息半天才会被发现。另外,这种情况下,似乎主频提升的倍率并不能与性能提升带来1:1的效益。 1.晶振时间与CPU执行固定指令耗时成正比 2.晶振时间降低使CPU调度指令的周期变短频次变高 这两种哪一种对呢?还是都错?请指点~ —————————— 又看了一遍,感觉刚刚对CPI的概念误读了,其实晶振时间是固定处理一个cpu简单指令的,CPI的平均时间是用来描述复杂指令的,指令数同样也是,其实整个公式如果用用简单指令来描述可能更容易理解一些

    作者回复: 易儿易同学你好,这个问题提的得非常好,你学得和思考得都很仔细深入。1的理解更准确一点,我们为了理解简单可以暂且认为就是晶振在触发一条一条电路变化指令,就好像你拨算牌盘的节奏一样。算盘拨得快,珠算就算得快。结果就是一条简单的指令需要的事件就和一个时钟周期一样,实际这个问题要比这样一句话复杂很多。一方面,其实时钟周期应该是放下最复杂的一条指令的时间长度。我们是通过流水线来提升cpi的。我会在讲解cpu的部分更深入讲解始终信号和计数器,让大家能够理解cpu到底是怎么回事儿。

    2019-05-01
    4
    61
  • 霹雳
    用户态运行和系统内核运行这两个什么区别呢

    作者回复: 霹雳同学你好, 关于用户态运行和系统内核运行,如果要深入了解的话,可以去看看刘超老师的 《趣谈Linux操作系统》。 如果简单讲一下的话,就是我们的程序实际在操作系统里面是运行在“保护模式”下的,很多指令我们的应用程序并没有权限去操作执行,需要切换到内核态,由操作系统去执行,比如说操作硬件的时候。

    2019-05-02
    50
  • humor
    对于文中的CPU钟表时间间隔和时钟周期还是没有理解很清楚,时间间隔和时钟周期是互为倒数的关系吗?就是CPU主频是一个单位时间,而时钟周期就是这个单位时间被分成主频(2.8G)等份的一份吗?

    作者回复: humor同学你好,如果我没理解错你的意思的话,你的理解是对的。CPU主频是一个频率(frequency),频率的单位叫做赫兹(Hz)。意思是一秒内这个事情可以发生多少次。主频2.8GHz就代表一秒内晶振振动了2.8G次,这里的G其实就是10亿次,也就是28亿次。那么我们的时钟周期时间就是1/28亿秒。

    2019-04-30
    2
    41
  • changing
    运行的代码是 time seq 100000 | wc -l real 0m0.033s user 0m0.030s sys 0m0.005s 为什么user + sys 运行出来会比real time 多呢

    作者回复: changing同学你好,一般情况下,如果user+sys比real大,甚至光光user比real大的情况出现,都是因为对应的程序被多个进程或者多个线程并行执行了,也很常见。不过你遇到的这个问题的确有些奇怪,我要研究一下,因为linux下的seq和wc这些命令按照我的理解都是单线程运行的。 能告诉我你使用的硬件和操作系统么?

    2019-04-29
    37
  • KR®
    又重刷了一遍前四讲, 徐老师讲得又清惜又易懂,老师备课花了不少心血吧… 现在等待更新的心情就像追了一部超高分剧等更一样!!辛苦徐老师备课喇^^

    作者回复: 谢谢支持😊

    2019-04-30
    28
  • 安之若素,岁月静好
    跑分作弊个人猜测:当检测到跑分程序运行的时候,降低系统调用,提高跑分程序优先级。关闭热管理系统(防止过热关核降频),手机CPU核心全开,超频到最高等。不顾一切,全心全意为跑分程序服务

    作者回复: 👍说得八九不离十

    2019-05-02
    3
    25
收起评论
显示
设置
留言
99+
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部