【笔记11】个人扫盲:内存与CPU中的核、线程、物理CPU、逻辑CPU

  • Post author:
  • Post category:其他




CPU与内存



CPU

CPU(Central Processing Unit)即中央处理器。CPU从内存(Memory)或缓存(Cache)中取出指令,放入指令寄存器,并对指令译码分解成一系列的微操作,然后发出各种控制命令,执行微操作系列,从而完成系统指令的执行。

在这里插入图片描述

CPU里包含计算单元(绿色)、存储单元(橙红色)和控制单元(橙黄色)。一些常见词:动态随机存取存储器(Dynamic Random Access Memory,DRAM)、寄存器(Registers)、线程(Threads)。

CPU & GPU

插句题外话,GPU省去Cache,简化了控制单元,增加了计算单元,采用了超长流水线,这就可以高效处理类型类型高度统一又相互无依赖的大规模数据。

在这里插入图片描述

图来自:

CPU 和 GPU 的区别是什么? – 知乎用户的回答 – 知乎



内存

CPU不能直接调用存储在外存(硬盘)上的系统、程序和数据,必须先将硬盘的有关内容存储在内存中,才能读取运行。内存是CPU能直接寻址的存储空间,包括随机存储器(RAM),只读存储器(ROM),以及高速缓存(CACHE),其中RAM是最重要的存储器。

内存条是将RAM集成块集中在一起的电路板,上面焊有内存颗粒(Chip)。一开始内存颗粒直接插在主板上,当时叫DIP(Dual In-line Package);后来将内存颗粒焊在电路板上,叫做SIMM(Single-Inline Memory Module);再后来,位宽从SIMM的32bit变成64bit,就叫做DIMM(Double-Inline Memory Module),常听的电脑是64位就表示这个。

在这里插入图片描述

图来自:

内存系列二:深入理解硬件原理 – 老狼的文章 – 知乎

1条内存条实体(DIMM),有2个面(Rank)分别为Rank0和Rank1,有些内存条每个面都会有黑色的内存颗粒(Chip)。

以一面为例,1个Rank包含8个Chip,每个Chip里会有8个bank,每个bank就是数据存储的实体。这些bank就相当于一个二维矩阵,只要声明了column和row就可以从每个bank中取出8bit的数据。

参考:

内存条物理结构分析


从概念的层次结构上面分为:Channel > DIMM > Rank > Chip > Bank > Row/Column


在这里插入图片描述



什么是通道

双通道是一种主板芯片组(Athlon 64集成于CPU中)所采用新技术,与内存本身无关。
在这里插入图片描述

图来自:

Motherboard Chipsets and the Memory Map

CPU仅仅通过一组针脚与外界交互,它并不关心外界到底有什么。前端总线把CPU和北桥连接起来,CPU需要读写内存时,就会通过这条总线。

北桥芯片里会设计两个内存控制器,这两个控制器可以相互独立工作,每个控制器控制一个内存通道。在这两个内存上,CPU可以分别寻址、读取数据,可以实现内存带宽翻倍,速度理论上可以翻倍(由主板、CPU、内存条支持的频率共同决定)。

在这里插入图片描述

通道多了就可以同时访问更多的内存,在物理内存分配的时候把内存打散分别在多根DIMM上,就可以利用多通道(Channel Interleaving)。

图来自:

双通道、四通道内存对游戏重要吗? – 老狼的文章 – 知乎



常见问题

在这里插入图片描述

图来自:

请问CPU,内核,寄存器,缓存,RAM,ROM的作用和他们之间的联系? – 知乎用户的回答 – 知乎

以上是CPU和Memory的物理分析,常常弄混的是内存控制器、缓存和内存条。


  • 内存

    (内存储器)真名叫主存储器,我们常见的U盘、硬盘、光盘,以前的软盘叫做辅助存储器(外存储器)。内存包括随机存储器(RAM),只读存储器(ROM),以及高速缓存(CACHE)。

  • 我们常说的内存指内存条(DIMM)->RAM。

  • 内存条



    下称内存

    )其实是RAM集成块集中在一起的电路板,通过插槽实现外部扩展,目的是减少RAM集成块的空间,另外CACHE集成在CPU上,ROM通常固化在主板的某些基础功能芯片上,为双列直插式(DIP)的集成块。

  • 缓存

    即高速缓冲存储器(Cache),是位于CPU和内存之间的存储器。当CPU向内存中写入或读出数据时,这个数据也被存储进Cache中。当CPU再次需要这些数据时,CPU就从Cache读取数据,而不是访问较慢的内存。一般先读取Cache里的数据,没有再去内存中。

  • 内存控制器

    集成在CPU上,控制通道读写内存。



物理CPU和逻辑CPU


以下斜体字为本人区分方法,未查证。


  • 物理CPU

    :独立的中央处理单元,主板槽位上实际有的CPU数量,physical id。


    • 核数(物理核数)

      :核的数量,每个CPU都可能有多个核(core),每一个核中都有独立的一套ALU、FPU、Cache等组件,也被称作物理核,cpu cores。


      • 线程(

        分为物理线程和逻辑线程



        :可以让一个物理核模拟出多个逻辑核,Intel有超线程技术,AMD没有线程数概念,processor。

      • 逻辑CPU数(

        逻辑核数



        :同上,模拟核心数,一般一个核心对应一个线程,使用超线程技术可以达到CPU翻倍。


总核数 = 物理CPU个数 * 每颗物理CPU的核数



总逻辑CPU数 = 物理CPU个数 * 每颗物理CPU的核数 X 超线程数

参考:

线程数与多核CPU的关系



常见问题

假设CPU数目为



N

c

p

u

N_{cpu}







N











c


p


u






















,核数为



N

c

o

r

e

N_{core}







N











c


o


r


e






















,线程数为



t

t






t





针对多线程 CPU 核数 线程
物理 × 实际有的CPU




N

c

p

u

N_{cpu}







N











c


p


u





















单个CPU的核数




N

c

o

r

e

N_{core}







N











c


o


r


e





















一个物理核对应一个线程

1
逻辑 = 逻辑核




t

t






t




单个物理核模拟的逻辑核数




t

N

c

o

r

e

t * N_{core}






t














N











c


o


r


e





















一个逻辑核分别对应一个线程




t

t






t




总物理 × = CPU




N

c

p

u

N_{cpu}







N











c


p


u





















= CPU * 物理核数




N

c

p

u

N

c

o

r

e

N_{cpu} * N_{core}







N











c


p


u































N











c


o


r


e





















= 总物理核数




N

c

p

u

N

c

o

r

e

N_{cpu} * N_{core}







N











c


p


u































N











c


o


r


e





















总逻辑 = 总逻辑核数




N

c

p

u

t

N

c

o

r

e

N_{cpu} * t * N_{core}







N











c


p


u






























t














N











c


o


r


e





















= CPU * 逻辑核数




N

c

p

u

t

N

c

o

r

e

N_{cpu} * t * N_{core}







N











c


p


u






























t














N











c


o


r


e





















= 总逻辑核数

= 总物理核数 * 线程数




N

c

p

u

t

N

c

o

r

e

N_{cpu} * t * N_{core}







N











c


p


u






























t














N











c


o


r


e






















从概念的层次结构上面分为:CPU > 核数 > 线程


逻辑CPU数在超线程技术的情况下才有意义,

换句话讲,逻辑CPU数就相当总线程数 = 物理核数 * 超线程数。

理论上来说,对于计算密集型的任务,线程数应该和CPU所能提供的并行数一致,物理核数 < 并行数 < 总线程数。

对于计算密集型的任务,一般建议将线程数设置为物理核数。



LINUX查看

查看物理CPU个数

cat /proc/cpuinfo| grep “physical id”| sort| uniq| wc -l

grep ‘physical id’ /proc/cpuinfo | sort -u | wc -l

查看每个物理CPU中core的个数(即核数)

cat /proc/cpuinfo| grep “cpu cores”| uniq

grep ‘core id’ /proc/cpuinfo | sort -u | wc -l

查看逻辑CPU的个数

cat /proc/cpuinfo| grep “processor”| wc -l

grep ‘processor’ /proc/cpuinfo | sort -u | wc -l

查看CPU信息(型号)

cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c

查看内 存信息

cat /proc/meminfo



WINDOW查看

将C:\Windows\System32\wbem加入系统环境变量

wmic cpu get *

cpu get Name\ NumberOfCores 核数\ NumberOfLogicalProcessors 物理线程\ ThreadCount 线程数



版权声明:本文为occamo原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。