5.关于 CPU 你需要了解的(二)

Wesley13
• 阅读 661

上一篇对 CPU 内部结构、CPU 指令集、SMP 和 NUMA 这三个方面做了简单介绍,这篇接着对如下两个知识点做介绍。

  • 超线程与超频
  • CPU 缓存

1.超线程和超频

很多同学应该听说过超线程这个概念,注意:它与多线程不是一个东西哈。那什么是超线程呢?

通常情况下,一个 CPU 核心同一时刻只能处理一个线程,但是厂商为了能更好的利用 CPU 资源,充分的压榨 CPU 的能力,于是利用核心的寄存器给 CPU 核心多设置了一个上下文,每个上下文就可以运行一个线程,那么在逻辑上就相当于多了一个 CPU 核心,这就是超线程技术的原理。注意,这只是在逻辑上让一个 CPU 核心变成了两个,实际上还是只有一个核心。

5.关于 CPU 你需要了解的(二)

如何开启超线程呢?通常是在 BIOS 的设置里面进行开启, 可以在 BIOS 中找找 Hyber Threading 或者 HT 关键字,通常都是默认开启的。开启超线程可以更好的支持我们平时的多任务工作,使得操作系统的响应速度更快。

超频是指人为通过某种技术手段提高 CPU 的频率,CPU 频率提高意味着处理能力更强。通常来说 CPU 在出厂时会将 CPU 的频率上限给锁定到某个阈值,这样可以使得 CPU 工作更稳定,寿命更长久。但是总有些技术爱好者比较喜欢用最少的钱获取较好的产品体验,将 CPU 的这个频率阈值限制破坏掉进行 CPU 超频,强行提升了 CPU 的性价比,这种行为在早几年是比较多见的。以前的 Intel 奔腾系列、赛扬系列经常被用来超频,那时候的制程是 90nm,CPU 主频是 3GHz 左右。现在估计比较少人去做超频了,毕竟在不超频的情况下,个人消费级别的 CPU 都 4 GHz 左右,好一点的甚至 5 GHz 往上,没必要再搞超频。

CPU 被锁频的原因除了商业因素外,主要是因为超频容易导致 CPU 损坏或者由于散热不好带来的问题

2.CPU 缓存

现代的 CPU 一般来说都会有三级缓存:L1、L2、L3,所以 CPU 并不是直接与内存进行连接的,中间还隔着这几层 CPU 缓存。在金字塔式存储体系中它位于自顶向下的第二层,仅次于 CPU 寄存器,所以它的速度是比内存快很多,比寄存器稍慢一点。在容量上,L1、L2、L3 依次逐渐增大

5.关于 CPU 你需要了解的(二)

CPU 缓存是为了加快CPU读取数据的速度,同时也给内存一个缓冲期,因为 CPU 的速度实在是太快了,内存的速度完全跟不上,而 CPU 缓存的数据交换比内存快多了,如果缓存有对应的数据则直接从缓存读取数据就行。那 CPU 缓存与内存在速度方面究竟相差多大呢,请看下面这张图:

5.关于 CPU 你需要了解的(二)

可以看到 CPU 缓存与内存在速度方面相差大概是 100 倍左右 (图中的 DRAM 是内存)。CPU 缓存的组成如下图所示:

5.关于 CPU 你需要了解的(二)

上面是 CPU 核心,每个 CPU 核心会独占一套 L1 和 L2 缓存,最下面的 L3 缓存是所有 CPU 核心共享的。同时还可以看到 L1 缓存是分成了两个部分:指令缓存、数据缓存,L2/L3 则不分。

CPU 缓存主要是利用局部性原理将 CPU 的性能提升一大截。什么意思呢?想象一下如果没有这些缓存,CPU 每次从内存获取一条指令都需要很久,那如果将 CPU 下一步获取的指令提前加载到这些 CPU 缓存中,CPU 就可以快速获取下一条指令,不用再从内存获取,这不就大大提升了 CPU 的处理速度吗?当 L1 找不到时,继续往 L2 找,如果 L2 找不到则继续往 L3 找,还是找不到的话就到内存里面找,一级级往下肯定能找到。为了让 CPU 下一步想要的指令或者数据能预先加载到缓存,这就需要这些指令或者数据能聚集在一段连续的内存空间里,这就是局部性原理。为了达到这个局部性原理,操作系统在编译源码或者调度进程时都会做大量的优化工作,让局部性原理更好的工作。

ps.欢迎关注官方公众号"哈扣"。 5.关于 CPU 你需要了解的(二)

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Linux系统性能检测常用命令
查看CPU数量总核数物理CPU个数X每颗物理CPU的核数总逻辑CPU数物理CPU个数X每颗物理CPU的核数X超线程数查看物理CPU个数:cat/proc/cpuinfo|grep"physicalid"|sort|uniq|wcl
Stella981 Stella981
3年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这