cpu 订阅
中央处理器(CPU,central processing unit)作为计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元。CPU 自产生以来,在逻辑结构、运行效率以及功能外延上取得了巨大发展。 [1] 展开全文
中央处理器(CPU,central processing unit)作为计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元。CPU 自产生以来,在逻辑结构、运行效率以及功能外延上取得了巨大发展。 [1]
信息
运行工作
处理指令、执行操作、控制时间、处理数据
简    称
CPU
所属类别
计算机系统的执行单元
中文名
中央处理器
功    能
信息处理、程序运行的最终执行单元
外文名
central processing unit
中央处理器简介
中央处理器(CPU),是电子计算机的主要设备之一,电脑中的核心配件。其功能主要是解释计算机指令以及处理计算机软件中的数据。CPU是计算机中负责读取指令,对指令译码并执行指令的核心部件。中央处理器主要包括两个部分,即控制器、运算器,其中还包括高速缓冲存储器及实现它们之间联系的数据、控制的总线。电子计算机三大核心部件就是CPU、内部存储器、输入/输出设备。中央处理器的功效主要为处理指令、执行操作、控制时间、处理数据。 [2]  在计算机体系结构中,CPU 是对计算机的所有硬件资源(如存储器、输入输出单元) 进行控制调配、执行通用运算的核心硬件单元。CPU 是计算机的运算和控制核心。计算机系统中所有软件层的操作,最终都将通过指令集映射为CPU的操作。 [1] 
收起全文
精华内容
下载资源
问答
  • 作为一个程序员,CPU的这些硬核知识你必须会!

    万次阅读 多人点赞 2020-01-21 23:14:02
    CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事...

    CPU对每个程序员来说,是个既熟悉又陌生的东西?

    如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。

    随我一起,来好好认识下CPU这货吧

    把CPU掰开来看

    对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东西,构造一定是极其复杂的,毕竟是超高科技玩意,所以啊,我们今天说的组成什么的,都是指的主要的,对我们程序员有用的,需要了解的那一部分,切莫抬杠哦

    首先嘞,我希望你先记住这句话:

    CPU所负责的就是解释和运行最终转换成机器语言的程序内容

    另外啊,说起CPU,一定离不开内存,在今天的介绍中,也会简单的说说内存,因为后期也会单独出一篇讲解下内存,毕竟了解这些对我们程序员来说很重要的,所以CPU和内存经常在一块来讲,他们其实是有很多的晶体管组成的,一般称他们为IC,也就是集成电路的意思。

    接下来我们就来看看CPU的组成,注意我之前说的,这里说的组成一般是指的主要部分,毕竟CPU结构复杂。

    我们需要知道的CPU结构

    重点需要关注寄存器

    运算器

    字面意思理解就是跟运算有关的,简单说就是负责运算从内存读取到寄存器中的数据,可以看作一个数据加工厂,就是对寄存器中的数据做运算,这些运算包含基本的算术和逻辑运算

    然后对于运算器来说,我们要了解其中的几个重要角色,接下来我会挨个介绍:

    算术逻辑单元(ALU)

    这个是运算器中重要的一个组成,主要负责的就是对数据的处理,从而实现对数据的算术和逻辑运算

    累计寄存器(AC)

    通常叫做累计器,是一个通用寄存器,这个有啥用呢?上面说的ALU,当ALU处理完算术运算或者逻辑运算之后,会得到一个结果,这个结果就会保存在AC中

    数据缓冲寄存器(DR)

    这个DR也是存放数据的,存放的主要是从内存读取过来的数据,会暂时存放在这个DR中,这里就相当于内存和CPU之间做数据传送的一个中转站,为啥会有这个,大家都是到CPU和内存的速度是有很大差别的,中间引入一个DR,一定程度上起到了速度上的缓冲作用,不至于速度相差太猛

    状态条件寄存器(PSW)

    这个貌似有点不好理解,首先寄存器还是保存数据的,所以PSW自然也是保存某一类数据的,它保存的主要是由算术指令和逻辑指令运行或者测试的结果建立的各种条件码内容,一般分为状态标志和控制标志,知道就行

    我们需要了解以上的这几个组成部分,这都是运算器的核心,另外需要特别说一下的就是它们每一个其实都有一个英文缩写,比如ALU就是算术逻辑单元的意思,为啥要说这个嘞,因为英文缩写毕竟简便而且有逼格,所以我们一般交流的时候会说ALU而不是算术逻辑单元,因此,记住他们的缩写也很重要哦。

    不然跟别人交流起来的话,别人一出口就是ALU,DR啥的,你很容易跟不上节奏啊。

    对CPU中的运算器有个基本认识以后,我们再来看看另外一个重要组成 控制器

    控制器

    控制控制,也就是起到一个控制作用,上面介绍的运算器只是起到了运算的功能,但是控制器就比较牛,它是控制整个CPU的工作,对于控制器,一般要能够保证程序的正确执行以及能够处理异常事件

    同样的,对于控制器来说,我们需要重点关注如下几个:

    指令寄存器(IR)

    寄存器是保存东西的,指令寄存器自然就是保存指令的,也就是说CPU要执行一条指令的话,需要先把指令从内存上读取,然后放到我们上面说的数据缓冲寄存器中,之后再从DR放到IR中,接着嘞,会有一个叫做指令译码器的东西根据IR的内容生成很多的微操作指令,从而去控制其他部件已完成相应的功能

    程序计数器(PC)

    这个学过Java内存结构的应该了解,它保存着下一条要执行的指令,也就是说当一个程序要执行的时候,会把这个程序的起始地址存到这个PC中,如果这个指令被执行的话也不用担心,CPU会自动修改,使得PC存放下一条要执行的指令

    地址寄存器(AR)

    这个就是保存着CPU访问内存上的那一块内存的内存地址,为啥要保存这个,因为CPU和内存速度相差比较大,所以CPU要保存着正在访问的那块内存的地址,直到内存的读写操作完成,不然,找不到之前访问的是哪个内存单元了啊

    指令译码器(ID

    简单点就是对指令做分析的,看看你这个指令要干啥

    不知道你有没有发现,我们上面无论再介绍运算器还是控制器的时候,都大量提及寄存器,这足以说明寄存器的重要性,不是有句话说其实CPU就是寄存器的集合体,不过在说寄存器之前,我们还是很有必要先来简单的看看内存。

    简单说下内存(以后会单独说)

    CPU和内存总是分不开的,这里简单对内存坐下介绍,方便对CPU的理解,内存自然而然是存储部件,存储的是啥呢?一般来说,就是数据和指令,而且我们常说的内存指的就是电脑中的内存条,就是用来存储程序啊,数据啊,指令啊这些东西。

    形象点说,其实内存可以看作一个个的小格子,每个格子都是用来存储数据的,而且每个格子还有编号,也就是内存地址,根据它可与拿到对应内存存储的数据,还需要知道的就是,如果断电的话,内存中的数据会被清除的。

    CPU的大部分都是寄存器

    上面说了CPU其实由运算器和控制器两大部分组成,其实无论是运算器还是控制器,都离不开寄存器,可以说,CPU就是寄存器的天下,因此,对于CPU,一定要掌握好寄存器,CPU做的一些运算其实就是通过寄存器来实现的,可以看看这篇文章:一个程序在计算机中是怎么运行的?

    先记住一句话:

    我们使用的Java,python这些都是高级语言,编写的程序最终会转成机器语言,之后就会进入CPU运算,实质就是通过CPU内部的寄存器来做相应的处理的

    寄存器

    这个是我们需要掌握的,寄存器这玩意,不同的CPU中含有的寄存器数量和种类都不同,不过大体有如下几种寄存器,按照功能来分的

    另外其实就可以把CPU理解为是寄存器的集合体,然后你需要知道程序计数器,累加寄存器,标志寄存器,指令寄存器和栈寄存器只有一个,其他的寄存器一般会有多个。

    说说这个程序计数器

    为啥要说这个,因为这玩意决定着程序的执行流程,我们进一步来看看

    比如看这个,这个表示的是两个数相加的操作,关于这个操作涉及到的数据和指令都保存在了内存中,而且每个数据和指令所在的内存单元都是有编号的,也就是内存地址,就是图中0100,0101那些,自上而下就是该操作的执行顺序。

    上面也提到过,程序计数器是保存程序执行的指令的,准确说保存的是程序执行指令的地址值,怎么理解呢?也就是说程序的每一步操作,底层来说都是有一系列指令对应着的,这些指令就是表明这一步该怎么操作,比如a+b这个操作,加载进内存后就是对应着一系列的指令。

    首先就是一个指令,表明要把a这个数值做相加操作,需要先把a保存到累加寄存器,而这个指令被保存在内存中的一个内存单元中,这个内存地址比如说就是0100,而此时程序计数器就是保存的这个0100内存地址,要执行程序的时候,CPU去看看程序计数器保存的第一个地址,发现是0100,然后去内存这个0100的位置,看看保存的是啥,一看是一个指令,分析指令,原来是要把0105地址中的值保存到累加寄存器中,然后就开始干活……

    所以说啊,程序计数器其实我是决定管理程序的执行流程的

    CPU是如何做比较的

    这个也需要了解一下,CPU的比较其实就是再内部做减法运算,什么意思呢?比如要比较a和b,就是再内部做一个a-b的操作,然后依据得到的结果来对a和b做比较,这里面肯定是要借助寄存器来完成,比如得到的结果就会放到标志寄存器中。

    CPU做的事其实很简单

    我们在之前的文章说过,CPU其实主要就是干如下的四件事情

    1. 从内存中读取数据,然后放到寄存器中
    2. 把寄存器中的数据写入到内存
    3. 进行数学运算和逻辑运算(加减乘除,AND,OR)
    4. 依据相应的条件进行跳转,执行其他指令(一条指令跳转到另外一条指令)

    我们知道,CPU是依据指令做事情的,为什么CPU只做上面的四件事情,主要就是看CPU 能执行的机器语言指令有哪些,主要就是如下这些

    这么一看,CPU能干的事也没有那么复杂啊。

    CPU指令执行过程

    经过上面的讲解,我们应该知道CPU就是看指令做事情的,那么关于指令,CPU又是怎么操作的呢? 我们要知道的是几乎所有的冯·诺伊曼型计算机的CPU,其工作都可以分为5个步骤:取指令、指令译码、执行指令、访问取数、结果写回。

    可能你不懂了,没啥,其实不就是这五个步骤嘛,搞清楚他们不就ok,接下来咱们来看看:

    第一:取指令

    字面意思很好理解啊,不就是拿到需要的指令嘛,那么指令在哪嘞,必须是在内存啊,也就是需要从内存中取出我们需要的指令,然后干嘛,不就是把指令放到CPU中的寄存器嘛,这个取指令就是这么一个过程。

    第二:指令译码

    这个是不是很快想到我们上面说的指令译码器,这个不就是对上一步拿到的指令做分析嘛,干嘛要分析,我得看看你这个指令到底要干啥啊,不然CPU怎么干活嘞

    第三:执行指令

    这个不就更好理解了,就是开始干活啦,实现相应的功能了

    第四:访问取数

    直观上好像没有那么好理解,其实啊,说的就是,我们根据上面的操作,有可能需要从内存中去拿数据,啥意思嘞,要知道,内存存放的是数据和指令,比如执行a+b的操作,我们得到相加的指令,对于a和b都是操作数,它们也是存放在内存中的,是不是也需要去内存中去拿到它们

    看上面那个图,0100对应的指令是不是要去0105对应的地址中去拿数据123,这不就是访问取数嘛。

    第五:结果写回

    这又是啥,经过上面那么些个步骤,做的运算肯定得有结果啊,这结果咋弄,你不得保存在哪啊,通常是保存在CPU内部的寄存器中,一般是标志寄存器,这不是就是结果写回嘛

    好啦,到这里,关于CPU的知识咱们就介绍的差不多了,当然,CPU的知识远远不止如此,但是作为程序员的你,最起码也得知道这些啊。

    感谢阅读

    大学的时候选择了自学Java,工作了发现吃了计算机基础不好的亏,学历不行这是没办法的事,只能后天弥补,于是在编码之外开启了自己的逆袭之路,不断的学习Java核心知识,深入的研习计算机基础知识,所有心得全部书写成文,整理成有目录的PDF,持续原创,PDF在公众号持续更新,如果你也不甘平庸,那就与我一起在编码之外,不断成长吧!

    其实这里不仅有技术,更有那些技术之外的东西,比如,如何做一个精致的程序员,而不是“屌丝”,程序员本身就是高贵的一种存在啊,难道不是吗?

    非常欢迎你的加入,未来的日子,编码之外,有你有我,一起做一个人不傻,钱很多,活得久的快乐的程序员吧!

    回复关键字“PDF”,获取技术文章合集,已整理好,带有目录,欢迎一起交流技术!

    另外回复“庆哥”,看庆哥给你准备的惊喜大礼包,只给首次关注的你哦!

    任何问题,可以加庆哥微信:H653836923,另外,我有个交流群,我会***不定期在群里分享学习资源,不定时福利***,感兴趣的可以说下我邀请你!

    对了,如果你是个Java小白的话,也可以加我微信,我相信你在学习的过程中一定遇到不少问题,或许我可以帮助你,毕竟我也是过来人了!

    在这里插入图片描述

    感谢各位大大的阅读🥰

    展开全文
  • 突然发现,intellij idea 特别卡,在代码间移动的时候,居然刷新都跟不上,然后打开任务管理器一看,CPU占用率100%。。。intellij idea自己一个程序的占用率就高达80~90,这还只是单纯的打开,没有做其他任何操作。...

    提前说一句,方案五:jb sdk bintray Downloader 这个插件已经搜不到了,好像下架了,官方说可以用另一个插件替代,但是那个插件也下架了好像。但是有离线版。实在不行可以装一个试试。离线插件安装方法。。。。emmmm....度娘吧。。。。

    突然发现,intellij idea 特别卡,在代码间移动的时候,居然刷新都跟不上,然后打开任务管理器一看,CPU占用率100%。。。intellij idea自己一个程序的占用率就高达80~90,这还只是单纯的打开,没有做其他任何操作。然后,就是解决呗。

    方法一:升级idea。

    去官网下载,升级到2017.2.5。(没用)

    方法二:超频

    本人的CPU不行,AMD A6 9500 R5 ,最大频率2.3G,大概能用得起i7的人不会有这个烦恼吧。。。翻了一下教程,好复杂,而且,怂且穷,没试。。。。

    方法三:百度一,修改idea配置文件D:\ideaIU-2017.2\bin\idea.exe.vmoptions如下。原理是加大默认内存会减少gc,就快了。。(不明显)

     

    -Xms1024m
    
    -Xmx2048m
    -XX:MaxPermSize=512m
    -XX:ReservedCodeCacheSize=256m
    -ea
    -Dsun.io.useCanonCaches=false
    -Dsun.awt.keepWorkingSetOnMinimize=true
    -Djava.net.preferIPv4Stack=true
    -Djsse.enableSNIExtension=false
    -XX:+UseCodeCacheFlushing
    -XX:+UseConcMarkSweepGC
    -XX:SoftRefLRUPolicyMSPerMB=50


    方法三: 百度二,关掉代码检查。

     

    setting -> Editor -> Inspections,把右面方框框里的对勾全去掉,或者根据需要去掉。原理是关闭不必要的代码检查,提高速度。(效果不明显)

    方法四:关掉多余的插件(隔壁大神曾经解决过这个问题的原因)

    setting -> plugins -> show中选择custom,把除了maven helper,jb sdk bintray Downloader 之外的没用的插件关掉。(大神的有效,我的不是这个原因)

    方法五: 选择合适的jdk版本(我的就是这个原因,解决,CPU占用率明显下降)

     

    https://intellij-support.jetbrains.com/hc/en-us/articles/206544879-Selecting-the-JDK-version-the-IDE-will-run-under?page=3

    可以到以上页面看看。总之要换成idea自己的jdk。选一个合适的版本。官方插件老变,各位去官网上找找吧。

     

    1. idea使用的jdk不是sun官方的,而是自己封装的一款jdk,下载这个jdk你可以使用jb sdk bintray Downloader 这个插件。首先,你可以先看看你的jdk版本,如下图那个jre。

    2. 快捷键shift + Ctrl + A ,然后会弹出个enter action and option name ,在里面输入jb(当然,你得先安装上面说的那个插件),然后选择get jb sdk from bintray

    3. 等~~~一~~~~等~~~~~

    4. 你会看到个下载对话框

    5. 加载巨慢,等~~~一~~~~等~~~~~

    6. 选择第一个下拉框,选择合适的版本,一定不能选最新版本,我慢的原因就是用了最新版本,要使用最新版本的上一个版本的稳定版,那个1024,1036,1038越大,版本就越新,我以前是下载了最新的1038,然后CPU就吃满了,然后现在换了1024就好了,下载的时候根据你电脑的位数选择对应的版本就行,如下图:

    7. download,等~~~一~~~~等~~~~~

    8. update,等~~~一~~~~等~~~~~

    9. 弹出一个让你重启的对话框,重启,然后到help -> about 里看看生效没,就好了。。。。。

    如果,那个插件下载好,install按钮不可选的话,那就把插件卸载掉,重新装一下就好了。

    可能以后还会有其他奇葩原因,遇到了再往上更新吧。有能力的还是换个好一点儿的CPU好,任性,心累。。。。

     

    PS:有些换完jdk发现idea起不来了,大家可以翻翻idea的log,看看原因。基本上都是jdk没设置对,或者版本不对,或者环境变量有问题。idea搜索jdk是有一个顺序的。按照这个排查一下吧。https://www.cnblogs.com/yeminglong/p/6552433.html

     

    还有,大家一定要根据自己的实际情况操作,不要看我的图片上的选择,你的电脑是32位或者64位,就选对应的X86,或X64。我图片上的选择不一定适合你的电脑

    还不行的话,请看8楼评论试试。

     

     

    展开全文
  • 在深度学习模型训练过程中,在服务器端或者本地pc端,输入nvidia-smi来观察显卡的GPU内存占用率(Memory-Usage),显卡的GPU利用率(GPU-util),然后采用top来查看CPU的线程数(PID数)和利用率(%CPU)。...

            在深度学习模型训练过程中,在服务器端或者本地pc端,输入nvidia-smi来观察显卡的GPU内存占用率Memory-Usage),显卡的GPU利用率GPU-util),然后采用top来查看CPU的线程数(PID数)和利用率(%CPU)。往往会发现很多问题,比如,GPU内存占用率低,显卡利用率低,CPU百分比低等等。接下来仔细分析这些问题和处理办法。

    1. GPU内存占用率问题

            这往往是由于模型的大小以及batch size的大小,来影响这个指标。当你发下你的GPU占用率很小的时候,比如40%,70%,等等。此时,如果你的网络结构已经固定,此时只需要改变batch size的大小,就可以尽量利用完整个GPU的内存。GPU的内存占用率主要是模型的大小,包括网络的宽度,深度,参数量,中间每一层的缓存,都会在内存中开辟空间来进行保存,所以模型本身会占用很大一部分内存。其次是batch size的大小,也会占用影响内存占用率。batch size设置为128,与设置为256相比,内存占用率是接近于2倍关系。当你batch  size设置为128,占用率为40%的话,设置为256时,此时模型的占用率约等于80%,偏差不大。所以在模型结构固定的情况下,尽量将batch size设置大,充分利用GPU的内存。(GPU会很快的算完你给进去的数据,主要瓶颈在CPU的数据吞吐量上面。)

    2. GPU利用率问题

            这个是Volatile GPU-Util表示,当没有设置好CPU的线程数时,这个参数是在反复的跳动的,0%,20%,70%,95%,0%。这样停息1-2 秒然后又重复起来。其实是GPU在等待数据从CPU传输过来,当从总线传输到GPU之后,GPU逐渐起计算来,利用率会突然升高,但是GPU的算力很强大,0.5秒就基本能处理完数据,所以利用率接下来又会降下去,等待下一个batch的传入。因此,这个GPU利用率瓶颈在内存带宽和内存介质上以及CPU的性能上面。最好当然就是换更好的四代或者更强大的内存条,配合更好的CPU。

            另外的一个方法是,在PyTorch这个框架里面,数据加载Dataloader上做更改和优化,包括num_workers(线程数),pin_memory,会提升速度。解决好数据传输的带宽瓶颈和GPU的运算效率低的问题。在TensorFlow下面,也有这个加载数据的设置。

    torch.utils.data.DataLoader(image_datasets[x],
                                batch_size=batch_size, 
                                shuffle=True,
                                num_workers=8,
                                pin_memory=True)

            为了提高利用率,首先要将num_workers(线程数)设置得体,4,8,16是几个常选的几个参数。本人测试过,将num_workers设置的非常大,例如,24,32,等,其效率反而降低,因为模型需要将数据平均分配到几个子线程去进行预处理,分发等数据操作,设高了反而影响效率。当然,线程数设置为1,是单个CPU来进行数据的预处理和传输给GPU,效率也会低。其次,当你的服务器或者电脑的内存较大,性能较好的时候,建议打开pin_memory打开,就省掉了将数据从CPU传入到缓存RAM里面,再给传输到GPU上;为True时是直接映射到GPU的相关内存块上,省掉了一点数据传输时间。

    3. CPU的利用率问题

            很多人在模型训练过程中,不只是关注GPU的各种性能参数,往往还需要查看CPU处理的怎么样,利用的好不好。这一点至关重要。但是对于CPU,不能一味追求超高的占用率。如图所示,对于14339这个程序来说,其CPU占用率为2349%(我的服务器是32核的,所以最高为3200%)。这表明用了24核CPU来加载数据和做预处理和后处理等。其实主要的CPU花在加载传输数据上。此时,来测量数据加载的时间发现,即使CPU利用率如此之高,其实际数据加载时间是设置恰当的DataLoader的20倍以上,也就是说这种方法来加载数据慢20倍。当DataLoader的num_workers=0时,或者不设置这个参数,会出现这个情况。

    CPU利用率查看结果
    CPU利用率查看结果

            下图中可以看出,加载数据的实际是12.8s,模型GPU运算时间是0.16s,loss反传和更新时间是0.48s。此时,即使CPU为2349%,但模型的训练速度还是非常慢,而且,GPU大部分是时间是空闲等待状态。

    num_workers=0,模型每个阶段运行时间统计

            当我将num_workers=1时,出现的时间统计如下,load data time为6.3,数据加载效率提升1倍。且此时的CPU利用率为170%,用的CPU并不多,性能提升1倍。

    num_workers=1时,模型每个阶段运行时间统计

            此时,查看GPU的性能状态(我的模型是放在1,2,3号卡上训练),发现,虽然GPU(1,2,3)的内存利用率很高,基本上为98%,但是利用率为0%左右。表面此时网络在等待从CPU传输数据到GPU,此时CPU疯狂加载数据,而GPU处于空闲状态

    1,2,3号GPU的内存占用率和计算效率截图

            由此可见,CPU的利用率不一定最大才最好。

            对于这个问题,解决办法是,增加DataLoader这个num_wokers的个数,主要是增加子线程的个数,来分担主线程的数据处理压力,多线程协同处理数据和传输数据,不用放在一个线程里负责所有的预处理和传输任务。

            我将num_workers=8,16都能取得不错的效果。此时用top查看CPU和线程数,如果我设置为num_workers=8,线程数有了8个连续开辟的线程PID,且大家的占用率都在100%左右,这表明模型的CPU端,是较好的分配了任务,提升数据吞吐效率。效果如下图所示,CPU利用率很平均和高效,每个线程是发挥了最大的性能。

    num_workers=8时,CPU利用率和8个连续PID任务

            此时,在用nvidia-smi查看GPU的利用率,几块GPU都在满负荷,满GPU内存,满GPU利用率的处理模型,速度得到巨大提升。

    优化数据加载num_workers=8,和设置batch size的结果

            上图中可以看见,GPU的内存利用率最大化,此时是将batch size设置的较大,占满了GPU的内存,然后将num_workers=8,分配多个子线程,且设置pin_memory=True,直接映射数据到GPU的专用内存,减少数据传输时间。GPU和CPU的数据瓶颈得到解决。整体性能得到权衡。

            此时的运行时间在表中做了统计:

    处理时间统计
    处理阶段 时间
    数据加载 0.25s
    模型在GPU计算 0.21s
    loss反传,参数更新 0.43s

    4. 总结

            对上面的分析总结一下,第一是增加batch size,增加GPU的内存占用率,尽量用完内存,而不要剩一半,空的内存给另外的程序用,两个任务的效率都会非常低。第二,在数据加载时候,将num_workers线程数设置稍微大一点,推荐是8,16等,且开启pin_memory=True不要将整个任务放在主进程里面做,这样消耗CPU,且速度和性能极为低下。

     

     

                                                                                                                                                                         

                                                                                                                                                                         

                                                                                                                                                                         

    Supplementary:看到大家在评论回复的问题比较多,所以再加一些叙述!

    开这么多线程。第一个,查看你的数据的batch_size,batchsize小了,主CPU直接就加载,处理,而且没有分配到多GPU里面(如果你使用的是多GPU);如果是单GPU,那么就是CPU使劲读数据,加载数据,然后GPU一下就处理完了,你的模型应该是很小,或者模型的FLOPs很小。检查一下模型问题。还有就是,现在这个情况下,开8个线程和1个线程,没什么影响,你开一个num_workers都一样的。如果速度快,没必要分配到多个num_workers去。当数据量大的时候,num_workers设置大,会非常降低数据加载阶段的耗时。这个主要还是应该配合过程。

    在调试过程,命令:top     实时查看你的CPU的进程利用率,这个参数对应你的num_workers的设置;

    命令:   watch -n 0.5 nvidia-smi    每0.5秒刷新并显示显卡设置。

    实时查看你的GPU的使用情况,这是GPU的设置相关。这两个配合好。包括batch_size的设置。

                                                                                                                                                                      时间:2019年9月20日

    5. 再次补充内容

    有很多网友都在讨论一些问题,有时候,我们除了排查代码,每个模块的处理信息之外,其实还可以查一下,你的内存卡,是插到哪一块插槽的。这个插槽的位置,也非常影响代码在GPU上运行的效率。

    大家除了看我上面的一些小的建议之外,评论里面也有很多有用的信息。遇到各自问题的网友们,把他们的不同情况,都描述和讨论了一下,经过交流,大家给出了各自在训练中,CPU,GPU效率问题的一些新的发现和解决问题的方法。

    针对下面的问题,给出一点补充说明:

    问题1. CPU忙碌,GPU清闲。

    数据的预处理,和加载到GPU的内存里面,花费时间。平衡一下batch size, num_workers。

    问题2. CPU利用率低,GPU跑起来,利用率浮动,先增加,然后降低,然后等待,CPU也是浮动。

    • 2.1 下面是具体的步骤和对策:

    在pytorch训练模型时出现以下情况, 情况描述: 首先环境:2080Ti + I7-10700K, torch1.6, cuda10.2, 驱动440 参数设置:shuffle=True, num_workers=8, pin_memory=True; 现象1:该代码在另外一台电脑上,可以将GPU利用率稳定在96%左右 现象2:在个人电脑上,CPU利用率比较低,导致数据加载慢,GPU利用率浮动,训练慢约4倍;有意思的是,偶然开始训练时,CPU利用率高,可以让GPU跑起来,但仅仅几分钟,CPU利用率降下来就上不去了,又回到蜗牛速度。

    •  可以采用的方法:

    两边的配置都一样吗。另一台电脑和你的电脑。你看整体,好像设置配置有点不同。包括硬件,CPU的核,内存大小。你对比一下两台设备。这是第一个。第二个,还是代码里面的配置,代码的高效性。你一来,CPU利用率低,你看一下每一步,卡到哪里,哪里是瓶颈,什么步骤最耗时。都记录一下每一个大的步骤的耗时,然后在分析。测试了每一个大的过程的时间,可以看见,耗时在哪里。主要包括,加载数据,前向传播,反向更新,然后下一步。

    • 2.2 经过测试之后,第二次问题分析:

    经过测试,发现本机卡的地方在加载图像的地方,有时加载10kb左右的图像需要1s以上,导致整个batch数据加载慢!代码应该没有问题,因为在其他电脑能全速跑起来;硬件上,本机的GPU,CPU都强悍,环境上也看不出差距,唯一差在内存16G,其他测试电脑为32G,请问这种现象和内存直接关系大吗?

    • 情况分析

    最多可能就在这边。你可以直接测试batch size为1情况下的整个计算。或者将batch size 开到不同的设置下。看加载数据,计算之间的差值。最有可能就是在这个load data,读取数据这块。 电脑的运行内存16g 32g。其实都已经够了,然后加载到GPU上,GPU内存能放下,影响不大。所以估计是你的内存相对小了,导致的问题。试一下。

    • 2.3 问题定位,解决方法:
    • 这台电脑的内存条插的位置不对,4个插槽的主板,1根内存的时候应该插在第2个插槽(以cpu端参考起),而组装电脑的商家不专业,放在了第4个插槽上,影响性能,更换位置后,速度飞起来了!关于插槽详情,有遇到的朋友去网上收,一大堆!

    在自己电脑,或者自己配的主机上,跑GPU的时候,记得注意查看你自己的内存卡是插到哪一个槽上的。

    补充时间:2021年1月15日

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • Linux系统查看CPU使用率、内存使用率、磁盘使用率

    万次阅读 多人点赞 2019-04-16 15:17:00
    一、查看CPU使用率 1. top 命令 top命令可以看到总体的系统运行状态和cpu的使用率 。 %us:表示用户空间程序的cpu使用率(没有通过nice调度) %sy:表示系统空间的cpu使用率,主要是内核程序。 %ni:表示用户空间...

    一、查看CPU使用率

    1. top 命令

    [root@sss ~]# top
    top - 16:54:38 up 7 days,  5:13,  3 users,  load average: 0.00, 0.01, 0.05
    Tasks:  77 total,   2 running,  75 sleeping,   0 stopped,   0 zombie
    %Cpu(s):  0.7 us,  0.3 sy,  0.0 ni, 99.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    KiB Mem :  1882232 total,   813020 free,   330164 used,   739048 buff/cache
    KiB Swap:        0 total,        0 free,        0 used.  1386608 avail Mem 
    
      PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                                                                                                        
    17215 root       0 -20  127504  12176   9560 S  0.7  0.6  21:46.45 AliYunDun                                                                                                                                      
     2770 root      20   0  573932  17232   6088 S  0.3  0.9   1:11.38 tuned                                                                                                                                          
        1 root      20   0   43548   3844   2588 S  0.0  0.2   0:06.54 systemd                                                                                                                                        
        2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd                                                                                                                                       
        3 root      20   0       0      0      0 S  0.0  0.0   0:08.75 ksoftirqd/0                                                                                                                                    
        5 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H              
    ... ...                                                                                                                                 
    

    top命令可以看到总体的系统运行状态和cpu的使用率 。

    %us:表示用户空间程序的cpu使用率(没有通过nice调度)
    %sy:表示系统空间的cpu使用率,主要是内核程序。
    %ni:表示用户空间且通过nice调度过的程序的cpu使用率。
    %id:空闲cpu
    %wa:cpu运行时在等待io的时间
    %hi:cpu处理硬中断的数量
    %si:cpu处理软中断的数量
    %st:被虚拟机偷走的cpu
    注:99.0 id,表示空闲CPU,即CPU未使用率,100%-99.0%=1%,即系统的cpu使用率为1%。
    

    2、vmstat

    详细使用和参数介绍参考网址

    3、sar

    sar命令语法和vmstat一样。命令不存在时需要安装sysstat包,这个包很有用。
    

    命令示例:

    例如每1秒采集一次CPU使用率,共采集5次。
    
    [root@sss ~]# sar -u 1 5
    Linux 3.10.0-957.10.1.el7.x86_64 (izuf633l0ge76tv5mzalpmz)      04/16/2019      _x86_64_        (1 CPU)
    
    04:56:03 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
    04:56:04 PM     all      0.00      0.00      0.00      0.00      0.00    100.00
    04:56:05 PM     all      0.00      0.00      0.00      0.00      0.00    100.00
    04:56:06 PM     all      0.99      0.00      0.99      0.00      0.00     98.02
    04:56:07 PM     all      0.00      0.00      0.00      0.00      0.00    100.00
    04:56:08 PM     all      0.00      0.00      0.00      0.00      0.00    100.00
    Average:        all      0.20      0.00      0.20      0.00      0.00     99.60
    

    和top一样,可以看到所有cpu的使用情况。如果需要查看某颗cpu的使用可以用-P参数。例如指定显示0号cpu 的使用情况。

    [root@sss ~]# sar -P 0 -u 1 5
    Linux 3.10.0-957.10.1.el7.x86_64 (izuf633l0ge76tv5mzalpmz)      04/16/2019      _x86_64_        (1 CPU)
    
    04:39:13 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
    04:39:14 PM       0      0.00      0.00      0.99      0.00      0.00     99.01
    04:39:15 PM       0      0.00      0.00      0.00      0.00      0.00    100.00
    04:39:16 PM       0      0.00      0.00      0.00      0.00      0.00    100.00
    04:39:17 PM       0      0.00      0.00      0.00      0.00      0.00    100.00
    04:39:18 PM       0      1.00      0.00      0.00      0.00      0.00     99.00
    Average:          0      0.20      0.00      0.20      0.00      0.00     99.60
    [root@izuf633l0ge76tv5mzalpmz ~]# 
    

    进程队列长度和平均负载状态
    例如每1秒采集一次,共采集5次。

    [root@sss ~]# sar -q 1 5  
    Linux 3.10.0-957.10.1.el7.x86_64 (izuf633l0ge76tv5mzalpmz)      04/16/2019      _x86_64_        (1 CPU)
    
    04:40:14 PM   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15   blocked
    04:40:15 PM         0       149      0.00      0.01      0.05         0
    04:40:16 PM         0       149      0.00      0.01      0.05         0
    04:40:17 PM         0       149      0.00      0.01      0.05         0
    04:40:18 PM         1       149      0.00      0.01      0.05         0
    04:40:19 PM         1       149      0.00      0.01      0.05         0
    Average:            0       149      0.00      0.01      0.05         0
    

    输出项:

    runq-sz:运行队列的长度(等待运行的进程数)
    
    plist-sz:进程列表中进程(processes)和线程(threads)的数量
    
    ldavg-1:最后1分钟的系统平均负载(System load average)
    
    ldavg-5:过去5分钟的系统平均负载
    
    ldavg-15:过去15分钟的系统平均负载
    

    创建的平均值和上下文切换的次数
    例如每1秒收集一次,共收集5次。

    [root@sss ~]# sar -w 1 5 
    Linux 3.10.0-957.10.1.el7.x86_64 (izuf633l0ge76tv5mzalpmz)      04/16/2019      _x86_64_        (1 CPU)
    
    04:41:39 PM    proc/s   cswch/s
    04:41:40 PM      0.00    274.26
    04:41:41 PM      0.00    277.78
    04:41:42 PM      0.00    285.00
    04:41:43 PM      0.00    280.00
    04:41:44 PM      0.00    270.00
    Average:         0.00    277.40
    

    sar命令也可以获取过去指定日期的性能参数。

    [root@sss ~]# sar -u -f /var/log/sa/sa08
    Linux 3.10.0-693.2.2.el7.x86_64 (localhost.localdomain)         04/08/2019      _x86_64_        (1 CPU)
    
    10:54:35 AM       LINUX RESTART
    
    11:00:02 AM     CPU     %user     %nice   %system   %iowait    %steal     %idle
    11:10:01 AM     all     12.93      0.23      2.89      1.54      0.00     82.41
    11:20:01 AM     all     46.58      0.00      8.81      0.79      0.00     43.82
    11:30:01 AM     all     44.93      0.00      9.68      0.15      0.00     45.24
    11:40:02 AM     all      0.25      0.00      0.15      0.00      0.00     99.60
    11:50:01 AM     all      0.19      0.00      0.13      0.00      0.00     99.68
    12:00:01 PM     all      0.31      0.00      0.19      0.14      0.00     99.37
    ... ...
    

    4、mpstat

    这个命令也在sysstat包中,语法类似。
    cpu使用情况比sar更加详细些,也可以用-P指定某颗cpu 。
    

    例如每1秒收集一次,共5次。

    [root@sss ~]# mpstat 1 5 
    Linux 3.10.0-957.10.1.el7.x86_64 (izuf633l0ge76tv5mzalpmz)      04/16/2019      _x86_64_        (1 CPU)
    
    04:58:01 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
    04:58:02 PM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    04:58:03 PM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    04:58:04 PM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    04:58:05 PM  all    1.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.00
    04:58:06 PM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
    Average:     all    0.20    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.80
    

    5、iostat

    这个命令主要用来查看io使用情况,也可以来查看cpu,个人感觉不常用。
    

    示例

    [root@sss ~]# iostat -c 1 2
    Linux 3.10.0-957.10.1.el7.x86_64 (izuf633l0ge76tv5mzalpmz)      04/16/2019      _x86_64_        (1 CPU)
    
    avg-cpu:  %user   %nice %system %iowait  %steal   %idle
               0.26    0.00    0.21    0.01    0.00   99.53
    
    avg-cpu:  %user   %nice %system %iowait  %steal   %idle
               0.00    0.00    0.00    0.00    0.00  100.00
    

    6、dstat

    每秒cpu使用率情况获取

    [root@sss ~]#  dstat -c
    ----total-cpu-usage----
    usr sys idl wai hiq siq
      0   0 100   0   0   0
      0   1  99   0   0   0
      1   0  99   0   0   0
      0   0 100   0   0   0
      0   0 100   0   0   0
      1   1  98   0   0   0
      0   0 100   0   0   0
      ... ...
    

    最占cpu的进程获取

    [root@sss ~]# dstat --top-cpu  
    -most-expensive-
      cpu process   
    AliYunDun    0.2
    AliYunDun    2.0
    mysqld       1.0
    AliYunDun    1.0
    kworker/0:1H 1.0
    AliYunDun    1.0
    AliYunDun    1.0
    AliYunDun    1.0
    

    二、查看内存使用率

    1、top命令

    top 命令查看内存使用率

    查看第四行: KiB Mem
    内存使用率: used/ total
    

    2、free命令

    free命令可以显示Linux系统中空闲的、已用的物理内存及swap内存,及被内核使用的buffer。在Linux系统监控的工具中,free命令是最经常使用的命令之一。

    1.命令格式:
    free [参数]
    
    2.命令功能:
    free 命令显示系统使用和空闲的内存情况,包括物理内存、交互区内存(swap)和内核缓冲区内存。共享内存将被忽略
    
    3.命令参数:
    -b  以Byte为单位显示内存使用情况。 
    
    -k  以KB为单位显示内存使用情况。 
    
    -m  以MB为单位显示内存使用情况。
    
    -g   以GB为单位显示内存使用情况。 
    
    -o  不显示缓冲区调节列。 
    
    -s<间隔秒数>  持续观察内存使用状况。 
    
    -t  显示内存总和列。 
    
    -V  显示版本信息。 
    
    4.使用实例:

    实例1:显示内存使用情况

    命令示例:

    free [-k] # 以 kb  为单位显示内存使用状况
    free -g # 以 G 为单位显示内存使用状况
    free -m # 以 M 为单位显示内存使用状况
    free -t  # 以总和的形式显示内存的使用信息
    free -s 1 # 每一秒显示内存使用情况
    

    输出:

    [root@sss ~]# free
                  total        used        free      shared  buff/cache   available
    Mem:        1882232      331760      811004         592      739468     1384944
    Swap:             0           0           0
    
    [root@sss ~]# free -g
                  total        used        free      shared  buff/cache   available
    Mem:              1           0           0           0           0           1
    Swap:             0           0           0
    
    [root@sss ~]# free -m
                  total        used        free      shared  buff/cache   available
    Mem:           1838         324         791           0         722        1352
    Swap:             0           0           0
    
    [root@sss ~]# free -t
                  total        used        free      shared  buff/cache   available
    Mem:        1882232      331760      811004         592      739468     1384948
    Swap:             0           0           0
    Total:      1882232      331760      811004
    
    [root@sss ~]# free -s 1
                  total        used        free      shared  buff/cache   available
    Mem:        1882232      331760      811004         592      739468     1384948
    Swap:             0           0           0
    
                  total        used        free      shared  buff/cache   available
    Mem:        1882232      331784      810980         592      739468     1384924
    Swap:             0           0           0
    
                  total        used        free      shared  buff/cache   available
    Mem:        1882232      331784      810980         592      739468     1384924
    Swap:             0           0           0
    ... ...
    

    说明–对这些数值的解释:

    total:总计物理内存的大小。
    
    used:已使用多大。
    
    free:可用有多少。
    
    Shared:多个进程共享的内存总额。
    
    Buff/cache:磁盘缓存的大小。
    

    第三行是交换分区SWAP的,也就是我们通常所说的虚拟内存。
    当可用内存少于额定值的时候,就会进行交换

    如何看额定值:

    命令:

    cat /proc/meminfo 
    

    输出:

    [root@sss ~]# cat /proc/meminfo
    MemTotal:        1882232 kB
    MemFree:          811244 kB
    MemAvailable:    1385300 kB
    Buffers:           81268 kB
    Cached:           602500 kB
    SwapCached:            0 kB
    Active:           601948 kB
    Inactive:         379880 kB
    Active(anon):     298392 kB
    Inactive(anon):      256 kB
    Active(file):     303556 kB
    Inactive(file):   379624 kB
    Unevictable:           0 kB
    Mlocked:               0 kB
    SwapTotal:             0 kB
    SwapFree:              0 kB
    Dirty:               320 kB
    Writeback:             0 kB
    AnonPages:        298052 kB
    Mapped:            47236 kB
    Shmem:               592 kB
    Slab:              55772 kB
    SReclaimable:      44076 kB
    SUnreclaim:        11696 kB
    KernelStack:        2384 kB
    PageTables:         5808 kB
    NFS_Unstable:          0 kB
    Bounce:                0 kB
    WritebackTmp:          0 kB
    CommitLimit:      941116 kB
    Committed_AS:     810896 kB
    VmallocTotal:   34359738367 kB
    VmallocUsed:       10604 kB
    VmallocChunk:   34359719676 kB
    HardwareCorrupted:     0 kB
    AnonHugePages:    237568 kB
    CmaTotal:              0 kB
    CmaFree:               0 kB
    HugePages_Total:       0
    HugePages_Free:        0
    HugePages_Rsvd:        0
    HugePages_Surp:        0
    Hugepagesize:       2048 kB
    DirectMap4k:       63360 kB
    DirectMap2M:     2033664 kB
    DirectMap1G:           0 kB
    

    交换将通过三个途径来减少系统中使用的物理页面的个数:

    1.减少缓冲与页面cache的大小, 
    
    2.将系统V类型的内存页面交换出去,  
    
    3.换出或者丢弃页面。(Application 占用的内存页,也就是物理内存不足)。 
    

    事实上,少量地使用swap是不是影响到系统性能的。

    那buffers和cached都是缓存,两者有什么区别呢?

    为了提高磁盘存取效率, Linux做了一些精心的设计, 除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换), 还采取了两种主要Cache方式:Buffer Cache和Page Cache。前者针对磁盘块的读写,后者针对文件inode的读写。这些Cache有效缩短了 I/O系统调用(比如read,write,getdents)的时间。
    
    磁盘的操作有逻辑级(文件系统)和物理级(磁盘块),这两种Cache就是分别缓存逻辑和物理级数据的。
    
    Page cache实际上是针对文件系统的,是文件的缓存,在文件层面上的数据会缓存到page cache。文件的逻辑层需要映射到实际的物理磁盘,这种映射关系由文件系统来完成。当page cache的数据需要刷新时,page cache中的数据交给buffer cache,因为Buffer Cache就是缓存磁盘块的。但是这种处理在2.6版本的内核之后就变的很简单了,没有真正意义上的cache操作。
    
    Buffer cache是针对磁盘块的缓存,也就是在没有文件系统的情况下,直接对磁盘进行操作的数据会缓存到buffer cache中,例如,文件系统的元数据都会缓存到buffer cache中。
    
    简单说来,page cache用来缓存文件数据,buffer cache用来缓存磁盘数据。在有文件系统的情况下,对文件操作,那么数据会缓存到page cache,如果直接采用dd等工具对磁盘进行读写,那么数据会缓存到buffer cache。
    
    所以我们看linux,只要不用swap的交换空间,就不用担心自己的内存太少.如果常常swap用很多,可能你就要考虑加物理内存了.这也是linux看内存是否够用的标准.
    
    如果是应用服务器的话,一般只看第二行,+buffers/cache,即对应用程序来说free的内存太少了,也是该考虑优化程序或加内存了。
    
    实例2:以总和的形式显示内存的使用信息

    命令:

     	free -t 
    

    输出:

    [root@sss ~]# free -t
                  total        used        free      shared  buff/cache   available
    Mem:        1882232      331760      811004         592      739468     1384948
    Swap:             0           0           0
    Total:      1882232      331760      811004
    
    实例3:周期性的查询内存使用信息

    命令:

    free -s 10
    

    输出:

    [root@sss ~]# free -s 10
                  total        used        free      shared  buff/cache   available
    Mem:        1882232      324924      816688         496      740620     1392280
    Swap:             0           0           0
    
                  total        used        free      shared  buff/cache   available
    Mem:        1882232      324944      816664         496      740624     1392260
    Swap:             0           0           0
    

    说明:

    每10s 执行一次命令
    

    三、查看磁盘使用率

    1、输入df命令

    [root@sss ~]# df
    

    显示详情:

    Filesystem 1K-blocks Used Available Use% Mounted on
    /dev/vda1 41151808 3794244 35244132 10% /
    devtmpfs 930644 0 930644 0% /dev
    tmpfs 941116 0 941116 0% /dev/shm
    tmpfs 941116 468 940648 1% /run
    tmpfs 941116 0 941116 0% /sys/fs/cgroup
    tmpfs 188224 0 188224 0% /run/user/0

    说明

    磁盘使用率=(Used列数据之和)/(1k-blocks列数据之和)
    

    磁盘和内存的区别与联系:

    (磁盘--也叫硬盘--或是U盘--或是移动硬盘)
    1、硬盘与内存都是存储器,一个是内部,一个是外部。
    
    2、硬盘与内存的区别是很大的,这里只谈最主要的三点:
    	1)内存是计算机的工作场所,硬盘用来存放暂时不用的信息;
    	2)内存是半导体材料制作,硬盘是磁性材料制作;
    	3)内存中的信息会随掉电而丢失,硬盘中的信息可以长久保存。
    	
    3、内存与硬盘的联系也非常密切:
    		硬盘上的信息永远是暂时不用的,要用请装入内存!
    		CPU与硬盘不发生直接的数据交换,CPU只是通过控制信号指挥硬盘工作,硬盘上的信息只有在装入内存后才能被处理。
    		
    4、计算机的启动过程就是一个从硬盘上把最常用信息装入内存的过程。
    
    5、硬盘则决定你的电脑可以装下多少东西,内存则决定你的电脑开机后一次最多可以运行多少程序(如手机运行内存)。
    
    展开全文
  • CPU架构

    万次阅读 2020-09-08 09:56:55
    CPU架构是CPU厂商给属于同一系列的CPU产品定的一个规范,主要目的是为了区分不同类型CPU的重要标示。 #x86架构 x86或80x86是英特尔首先开发制造的一种微处理器体系结构的泛称。该系列较早期的处理器名称是以数字来...
  • 单核CPU与多核CPU工作原理

    万次阅读 2018-06-21 16:43:43
    单核CPU与多核CPU工作原理今天要介绍一下单核CPU和单核(超时间轴)CPU以及多核CPU的工作原理 一.单核CPU起源:CPU的起源是1971年英特尔公司推出,由此正式宣告计算机的诞生,可以说是世界级的改变,并且严格准守冯...
  • 2020显卡和cpu天梯图

    万次阅读 2018-10-24 09:39:10
    CPU天梯图: ------------------------------------------------------------------------------ 2018-10-24 显卡天梯图: CPU天梯图: 图片上面包含的型号并非完整的,只是一个大致的评比,...
  • 理解CPU负载和CPU使用率

    万次阅读 多人点赞 2018-02-26 23:38:25
    [root@system]# toptop - 23:39:41 up 8 days, 6:36, 2 users, load average: 0.00, 0.01, 0.05Tasks: 71 total, 1 running, 70 sleeping, 0 stopped, 0 zombie%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0...
  • Zabbix CPU load、CPU utlization、CPU jumps

    万次阅读 2018-05-08 13:41:20
    一、CPU utilization 使用Zabbix查看CPU利用率,会有下面几个值: CPU idle time:空闲的cpu时间比【简称id】 CPU user time:用户态使用的cpu时间比【简称us】 CPU system time:系统态使用的cpu时间比【简称...
  • 物理CPU CPU核数 逻辑CPU 几核几线程的概念详解

    万次阅读 多人点赞 2017-10-26 20:10:42
    物理CPU 物理CPU就是计算机上实际配置的CPU个数。在linux上可以打开cat /proc/cpuinfo 来查看,其中的physical id就是每个物理CPU的ID,你能找到几个physical id就代表你的计算机实际有几个CPU。在linux下可以通过...
  • CPU动态节能技术用于降低服务器功耗,通过选择系统空闲状态不同的电源管理策 略,可以实现不同程度降低服务器功耗,更低的功耗策略意味着CPU唤醒更慢对性能 影响更大。对于对时延和性能要求高的应用,建议关闭CPU的...
  • 本文介绍物理CPU,物理CPU内核,逻辑CPU, 以及他们三者之间的关系, 一个物理CPU可以有1个或者多个物理内核, 一个物理内核可以作为1个或者2个逻辑CPU。 2.物理CPU 物理CPU就是计算机上实际安装的CPU, 物理CPU数...
  • 什么是CPU Die?

    万次阅读 多人点赞 2018-12-02 09:20:09
    在看CPU相关的手册的时候,经常会看到Die的字样,刚开始不太理解是什么意思,感觉有点像是一颗CPU芯片,但是这样理解还是不够准确。 后来各种查找,终于找到了Die的准确意思,原来Die是处理器在生产过程中引入的...
  • CPU核数和load average的关系

    万次阅读 2018-04-27 18:12:59
    在前面的文章《Linux系统监控——top命令》中我简单提到了,判断load average的数值到底大不大的判断依据,就是数值除以CPU核数,大于5,就说明超负荷运转了。——这里其实不太严谨 今天这篇文章来仔细分析分析,...
  • Java服务,CPU100%问题如何快速定位?

    万次阅读 多人点赞 2019-11-04 19:15:00
    如何定位是哪个服务进程导致CPU过载,哪个线程导致CPU过载,哪段代码导致CPU过载?简要步骤如下:(1)找到最耗CPU的进程;(2)找到最耗CPU的线程;(3)查看堆栈,定位线程在干嘛,定位对应代码;步骤一、找到最耗...
  • 记一次 JVM CPU 使用率飙高问题的排查过程

    万次阅读 多人点赞 2017-04-26 20:12:59
    首先,我们一起看看通过 VisualVM 监控到的机器 CPU 使用率图: ![cpu-usage](https://img-blog.csdnimg.cn/202004071615390.png) 如上图所示,在 **下午3:45** 分之前,CPU 的使用率明显飙高,最高飙到近 100%,为...
  • CPU的内部架构和工作原理(好文)

    万次阅读 多人点赞 2018-04-26 23:09:00
    一直以来,总以为CPU内部真是如当年学习《计算机组成原理》时书上所介绍的那样,是各种逻辑门器件的组合。当看到纳米技术时就想,...直到看了Intel CPU制作流程及AMD芯片的制作流程的介绍不禁感慨,原来科技...
  • tensorflow的CPU和GPU的区别

    万次阅读 多人点赞 2018-10-07 20:34:33
    最近深度学习CPU根本不够用,老板配置了GPU 怎么能不会用呢?原来从来没有关注过的底层东西,于是乎痛下决心搞清楚原理和操作 先来看看第一部分 为什么GPU比CPU更diao呢? 这里就需要从他么的区别入手那他么的区别...
  • 物理cpu数、cpu核数、逻辑cpu数笔记

    千次阅读 2018-12-14 14:38:21
    一、物理CPU数 机器的主板上实际插入插槽的CPU个数。 二、CPU核数 单块CPU上面集成一个或者多个处理器芯片(称为Core,核心)。 CPU最初发展的时候是一个CPU一个处理核心,CPU的性能主要靠提高核心工作频率来提高...
  • CPU个数、CPU核心数、CPU线程数

    千次阅读 2018-09-28 11:46:53
    CPU个数、CPU核心数、CPU线程数 转载自:https://www.cnblogs.com/kimsimple/p/7787018.html  我们在选购电脑的时候,CPU是一个需要考虑到核心因素,因为它决定了电脑的性能等级。CPU从早期的单核,发展到现在的...
  • cpu指令集就是cpu的API

    千次阅读 2017-10-24 23:50:35
    昨晚睡觉, 迷迷糊糊中, 脑海中萦绕着这句话:cpu指令集就是cpu的API  也不想展开说了。 来, 一起来读一遍: cpu指令集就是cpu的API
  • 成功解决Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX AVX2 目录 解决问题 资料参考 思路分析 解决办法 解决问题 在导入tensorflow后,进行...
  • 物理cpu数和cpu核数和逻辑cpu数和vcpu区别 1.物理cpu数:主板上实际插入的cpu数量,可以数不重复的 physical id 有几个(physical id) 2.cpu核数:单块CPU上面能处理数据的芯片组的数量,如双核、四核等 (cpu ...
  • 线上CPU过高排查

    万次阅读 热门讨论 2020-11-04 19:33:44
    查消耗cpu最高的进程PID >top -c #显示整个命令行而不只是显示命令名 ,查找消耗CPU较大的进程PID #查询结果如下图,PID=23209的进程消耗CPU最多 3.根据PID查出消耗cpu最高的线程号 >top -Hp 23209 ,显示一个进程的...
  • CPU中断

    千次阅读 2019-08-31 21:03:36
    CPU共256个中断类型型号: 0~31:对应于异常和非屏蔽中断,不使用中断控制器; 32~47:分配给可屏蔽中断,由I/O设备引起的中断,这其中就包含可由两个8259A级联响应的15个; 48~255:用来标识软中断; CPU...
  • Windows10资源管理器占用CPU过高解决办法

    万次阅读 多人点赞 2018-03-11 15:38:08
    升级 win10后,发现每次开机后发现CPU一下子就用了80% - 90%多,CPU占用过高一方面产热高,另一方面会导致系统速度变慢,这才是最让人难以忍受的地方。小编试过很多方法,最后才解决这个问题,接下来将一些解决方法...
  • 物理cpu与逻辑cpu概述

    万次阅读 多人点赞 2018-04-03 10:37:06
    物理cpu与逻辑cpu概述(本博客属于转载部分内容:主要学习目的用于大数据平台Hadoop之yarn资源调度的配置)一、yarn资源调度器中主要的资源分类 1、memory(内存) 2、cpu(逻辑cpu)配置属性: yarn.nodemanager...
  • 单核CPU与多核CPU的区别

    万次阅读 2019-09-03 21:00:17
    1、单核CPU 1.1 工作原理 工作原理:单核CPU较为死脑,在通电时该CPU就会执行存储块中的指定地址的指令,如果你想要执行内存块其他地方的代码必须调整总线位置才可以让其执行。单核CPU就相当于阻塞程序,在工作...
  • CPU缓存

    千次阅读 多人点赞 2018-06-17 12:15:55
    CPU缓存是什么 CPU缓存(Cache Memory)是位于CPU与内存之间的临时存储器,它的容量比内存小的多但是交换速度却比内存要快得多。CPU高速缓存的出现主要是为了解决CPU运算速度与内存读写速度不匹配的矛盾,因为CPU...
  • CPU,GPU,TPU,NPU都是什么?

    万次阅读 多人点赞 2019-09-28 11:02:28
    CPU,GPU,TPU,NPU都是什么? 什么是CPU? 中央处理器(CPU),是电子计算机的主要设备之一,电脑中的核心配件。其功能主要是解释计算机指令以及处理计算机软件中的数据。CPU是计算机中负责读取指令,对指令译码并...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 439,660
精华内容 175,864
关键字:

cpu