[面试集锦]计算机基础之cpu,内存

今天我们来趴计算机的裤子。自从家人知道了我们是学计算机的,难免就有了装系统和修电脑的的称呼,同意?不同意,我们不仅需要知道计算机相关部件的组成还要学习其机制,甚者如何让上层应用跑的又稳又快。

1 三座大山

CPU(Central Processing Unit)中央处理器,我们计算机所有"计算"就靠它。一般也叫做超大规模集成电路,其实就是一堆晶体管不断做"打开","关闭"操作,想要计算机快,要么增加晶体管也就是增加密度,要么让晶体管"打开","关闭"速度更快,也就是提升主频,当然就会有耗电和散热等问题

现在我们普通电脑应该都是8G内存了,让我想起了曾经比尔盖茨说"无论对谁来说,640k的内存都足够了",为什么是640k,因为当时DOS操作系统,PC机只支持1M的寻址,DOS只能管理最多1M字节连续内存空间,而在这1M中只有640k给予应用程序使用(基本内存),另外384k留给BIOS和视频显示等使用,可惜时代发展简直快!那内存到底是干啥的,当我们打开XX***,登录qq都需要加载到内存中,计算的中间结果也需要放到内存中,这些骚操作都不开它

好了,CPU会去读取内存中的数据然后还要计算,那cpu和内存两座山放在哪儿,放在主板上。

从上面图我们知道cpu和内存都放在了密密麻麻的主板上,刚才我们说要通信,应该有传输的线,对的,芯片组合+总线解决了两者的通信问题。

但是我们平时会使用键盘输入26个字母,这所谓输入设备,我们需要查看输入设备给我们的反馈也就有输出设备(显示器)

我们需要存放各种***,直接放内存?一部电影2G,我去,那可不行,这时候需要一块大u盘----硬盘

cpu的确具有不错的计算能力,那为啥在做深度学习应用的时候,动不动就是GPU,在深度学习的神经网络中,它常常需要将一个特定的计算分解为能够同时进行的独立小任务,从而实现并行计算

这么多设备运行,难免需要摩擦,摩擦不能产生太大的火花,需要散热器给它降温----散热器

2 冯·诺依曼----存储程序计算机

First Draft中总结出了一下四点

(1) 运算器

成各种算数和逻辑运算。

(2) 控制器

控制程序流程的控制器单元,其中包含了指令寄存器和程序计数器

(3) 存储器

是用来存储数据的内存和外部存储(硬盘)

(4) 输入输出设备

比如我们常用的键盘作为输入,显示器作为输出。

综上,可以总结为,计算机通过从我们的输入设备获取输入信息,通过运算器和控制器去执行存储在内中的程序,最后将结果呈现(输出设备)。如下图所示

3 提升性能三指标

不管是面试中还是在实际开发中,难免会说到这个问题。

通常会提到两个指标,一个是响应时间一个是吞吐率。

响应时间

让程序在尽量短的时间完成任务,想办法让程序跑的更快。

吞吐率

一定时间内让程序做更多的任务。规定时间内完成的任务更多。那是不是就可以采用多核机制,毕竟人多力量大,规定时间一起干事,处理更多数据,这样子吞吐率也上去了

这样的话,如果我们想办法将响应时间缩短,就会多出一部分时间做其他任务,这样看来缩短响应时间的同时会提升吞吐率。那么如何计算程序的运行时间呢?就得先了解计算机的计时单位。

计算机的计时单位:cpu时钟

有时候在统计一个程序的执行时间的时候,通常在程序开始记录下时间,结尾记录时间,然后相减。实际上是不行的,因为大部分情况下cpu会执行多个任务,也就是有一部分时间是在执行其他任务,那么有没有方式去掉这部分做其他任务的时间,从而获取真实的时间呢。在Linux中提供命令time,我们看看time命令都输出什么。

time

从上图我们知道,real_time(在程序运行过程中一共花费的时间)。User_time(cpu运行这个程序中用户态执行指令的时间)。sys_time(cpu运行此程序,在操作系统内核运行指令的时间),那么实际上程序花费的cpu执行之间为user_time+sys_time>real_time,如果是单核情况,通常两者之和会小于real_time,目前机器采用多核去执行这个命令除了这种情况。

仅仅通过cpu时间也不能直接比较性能,因为内存,主板相关硬件也会对其造成影响,所以将其拆为CPU的时钟期数*时钟周期时间

上图中3GHZ为电脑的主频,即一秒时间执行简单指令数量为3G条。那么时钟周期为1/3GHZ,如果主频越高,那么cpu被逼着走的越快,cpu跑的越快,对散热要求也就越高,不能超载。

从上面这个公式可以得出,提升性能可以可以考虑买更好的CPU(主频),但是贵啊,那就考虑改变CPU的时钟周期。此时的cpu时钟周期=指令数*每条指令的平均时钟周期数。好了,现在我们综合两者公式得到

程序cpu执行执行时间=指令数每条指令的平均时钟周期数时钟周期时间

这样我们通过优化三者中的某几项来提高性能。

时钟周期时间,也就是计算机主频,最初的80386主频只有33MHz,现在普通笔记本都是3GHz

执行的时候使用什么执行,这是编译器的强项,对于相同的程序,不同编译器编译出的指令不同

每条指令的平均时钟周期数,采用流水线技术让一条指令的平均时钟周期数尽可能少。

常见提升性能的方式-----通过并行提高性能,那么有哪些条件需要满足呢

  • 可以将大问题拆解为小问题并行执行,且结果一直

  • 确保拆分的问题能够合并

  • 合并阶段无法并行,仍然顺序执行

目前来说,从计算机层面提升性能的方法

  • Cpu->Gpu。在深度学习领域,为了提升模型训练速度,因为大部分计算都为矩阵计算,使用cpu可能需要几个小时,使用Gpu几分钟就完事。当然还有TPU

  • 预测先知。能够预测下一步执行什么任务,而不是知道上一步结果后再执行下一步。不如非常著名的"局部性原理",均是提前做准备,蓄势待发

  • 流水线方式提升性能。大任务拆分为小任务,最大化利用Cpu资源

4 总结

今天学习了cpu中的两个重大指标,响应时间和吞吐率。优化cpu的执行时间是提升性能的核心。那么cpu的执行时间=指令数每条指令的平均时钟周期数时钟周期时间。然后通过优化其中某项来提升性能。好了,今天就学习到这,goodbye,有点收获记得在文末点击在看呀。

推荐开源项目---面试集锦

面试集锦

全部评论

相关推荐

02-09 13:09
长安大学 Java
黑皮白袜臭脚体育生:简历条例统一按使用了什么技术实现了什么功能解决了什么问题或提升了什么性能指标来写 可以看看我帖子简历写法
点赞 评论 收藏
分享
01-15 13:52
已编辑
河南大学 Java
六年要多久:标准头像,不吃香菜😂
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务