【笔记11】个人扫盲:内存与CPU中的核、线程、物理CPU、逻辑CPU
文章目录
- CPU与内存
- CPU
- 内存
- 什么是通道
- 常见问题
- 物理CPU和逻辑CPU
- 常见问题
- LINUX查看
- WINDOW查看
CPU与内存
CPU
CPU(Central Processing Unit)即中央处理器。CPU从内存(Memory)或缓存(Cache)中取出指令,放入指令寄存器,并对指令译码分解成一系列的微操作,然后发出各种控制命令,执行微操作系列,从而完成系统指令的执行。
CPU里包含计算单元(绿色)、存储单元(橙红色)和控制单元(橙黄色)。一些常见词:动态随机存取存储器(Dynamic Random Access Memory,DRAM)、寄存器(Registers)、线程(Threads)。
插句题外话,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都可能有多个核(core),每一个核中都有独立的一套ALU、FPU、Cache等组件,也被称作物理核,cpu cores。
总核数 = 物理CPU个数 * 每颗物理CPU的核数
总逻辑CPU数 = 物理CPU个数 * 每颗物理CPU的核数 X 超线程数
参考:线程数与多核CPU的关系
常见问题
假设CPU数目为NcpuN_{cpu}Ncpu,核数为NcoreN_{core}Ncore,线程数为ttt。
针对多线程 | CPU | 核数 | 线程 | |
---|---|---|---|---|
物理 | × |
实际有的CPU NcpuN_{cpu}Ncpu |
单个CPU的核数 NcoreN_{core}Ncore |
一个物理核对应一个线程 1 |
逻辑 | √ |
= 逻辑核 ttt |
单个物理核模拟的逻辑核数 t∗Ncoret * N_{core}t∗Ncore |
一个逻辑核分别对应一个线程 ttt |
总物理 | × |
= CPU NcpuN_{cpu}Ncpu |
= CPU * 物理核数 Ncpu∗NcoreN_{cpu} * N_{core}Ncpu∗Ncore |
= 总物理核数 Ncpu∗NcoreN_{cpu} * N_{core}Ncpu∗Ncore |
总逻辑 | √ |
= 总逻辑核数 Ncpu∗t∗NcoreN_{cpu} * t * N_{core}Ncpu∗t∗Ncore |
= CPU * 逻辑核数 Ncpu∗t∗NcoreN_{cpu} * t * N_{core}Ncpu∗t∗Ncore |
= 总逻辑核数 = 总物理核数 * 线程数 Ncpu∗t∗NcoreN_{cpu} * t * N_{core}Ncpu∗t∗Ncore |
从概念的层次结构上面分为: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 线程数
【笔记11】个人扫盲:内存与CPU中的核、线程、物理CPU、逻辑CPU相关推荐
- 如何看计算机几核,windows7系统怎么看CPU是几核的?win7查看CPU是几核的方法
最近许多用户询问小编说windows7系统怎么看CPU是几核的?cpu是几核的比较好呢?一般有双核.三核.四核.现在再购买电脑,单核和双核的越来越少见了,CPU现在都是四核为主.那么windows7系 ...
- CPU 中核心与线程
转载于:SPDK线程模型解析 - 知乎 首先,关于计算机系统的很多概念,都有"逻辑层" 和 "物理层"的区分,这个是前提. 然后再看,"核心" ...
- 你知道1+1=2是如何在cpu中运作的么?----跟我到cpu内部去看看吧!(1)
1+1=2 好吧,我承认这是小学生也会做的题目,但是作为一个程序员,或者是软件设计师,你知道1+1=2如何在计算机内部表示并执行的么? 在复习软件设计师中的计算机组成原理的时候这个问题一直在困扰着我, ...
- linux指定cpu运行程序,进程/线程绑定到特定CPU核的linux实现(有代码有实例)
前言 现在计算机上的CPU大多都是多核的,有4核甚至是8核的.但是一个计算机启动之后其进程数是远远多于CPU核数的,因为操作系统会给自动调度这些进程在CPU核上轮流运行.但是对于应用程序或者进程,其性 ...
- CPU中的“核”怎么理解
结论 一块CPU拥有一到多个核心(core),如:单核,双核,十六核等等:每一个单独的核心由以下部分组成 control unit (CU) arithmetic logic unit (ALU) r ...
- 关于CPU的核心和线程与进程的不同
关于CPU的核心和线程与进程的不同 cpu核心 进程和线程之间的区别 单线程和多线程 CPU的指令集架构 cpu核心 最近的CPU,一个CPU插座有多个核心(实际进行处理的零部件). 例如,在名为In ...
- 两个线程能在cpu中同时运行吗_多核和多线程那些事
作为一个程序员,线程,进程,协程这些是我们必须要掌握的最基础的知识,这就好比数学家必须要学习的基本几何原理一样,没有它们,我们在编程的世界里寸步难行. 并发和并行 并发和并行是我们经常听到的两个词,并 ...
- SQLSERVER到底能识别多少个逻辑CPU?
SQLSERVER到底能识别多少个逻辑CPU? 前言 在前几天在论坛有人遇到SQLSERVER识别逻辑CPU的问题 帖子地址: http://social.technet.microsoft.com/ ...
- 在Oracle中,什么是物理读和逻辑读?
在Oracle中,什么是物理读和逻辑读? 当会话所需要的数据在内存的 Buffer Cache 中找不到,此时就要去磁盘上的数据文件中读取,这样就产生了物理读( Physical Reads ),即物 ...
最新文章
- ASP.NET经典How to do文章汇总
- Linux中环境变量文件profile、bashrc、bash_profile之间的区别和联系
- python 最小二乘回归 高斯核_最经典的回归模型参数估计算法—最小二乘
- 在cmd指令看计算机位数,在.cmd中使用Windows命令来测试32位或64位并运行命令
- ORACLE TEXT LEXER PREFERENCE(三)
- Chipscope使用
- java object.getclass_Java Object getClass() 方法
- 走马观花:Visual Studio Code Name Orcas Mar07CTP /体验DLINQ
- fc-ae-1553_什么是AE-L,AF-L和*按钮,它们的作用是什么?
- 收藏 | 超轻量目标检测模型NanoDet,比YOLO跑得快,上线两天Star量超200
- User breakpoint called from code at 0x771064f4
- 和老公去出吃饭,每次我出钱。这样正常吗?
- Steam游戏Hacknet部分命令备份
- 114企业网重金收购114库网
- 北京理工大学计算机学院2021拟录取名单,北京理工大学管理与经济学院2021年硕士研究生拟录取通知...
- linux恢复树莓派内存卡容量,找回树莓派SD卡剩余空间
- 斗鱼扩展--拦截广告,让网页加载更快(四)
- 演讲:星座决定命运(密码为作者姓名拼音)
- A* 算法详解 小时候玩过红警的进来看看,非常清晰
- 高效能力人士必知必会的搜索引擎高级使用技巧