00:00
这是最根本最根本的执行过程,其实我刚才呢也讲了一些,我们来聊这个汇编的执行过程,汇编的执行过程,首先你刚才看到了它到底什么是汇编,就是一个0101的数字,不过人们呢,为了让这个数字好记。什么意思,这是我瞎说的啊,这个这个数字内部,它不一定是这个010101。然后呢,人们为了像这种东西好记,说我要算了,我要不要给这串零一,我给他起个名吧,大家伙都好记一些。啊,比方说这个名呢,叫moon叫移动。就是把某一个某一某某某一串数字移动到某一个位置去,好,它叫移动,叫move。好,那另外一串数字呢啊,101110111的啊,这串候呢,我给他取个数字,比方说叫ADD,叫叫加,做加法叫ADD,那么还有人呢,叫S,叫做减法叫S,哎,这样的话,我以后看到这串数字的时候,我脑子会给它翻译成这个。
01:14
至少我们看汇编的这些个东西,我要比这个0101看起来要舒服多了,好,这个叫做机器语言的,所以汇编的本质啊。助地福。他就是帮助人记忆的。
02:00
你看到刚刚你脑子里把它翻译成这串数字就行了,就这个意思,所以汇编,我们说汇编语言就是机器语言。所谓的汇编器,其实就是把这个注积符通过一张表翻译啊,看一下你对应的是哪个零一串,我就给你翻译成哪个零一串就行了。这汇编到继续一样,非常简单,就这叫做。汇编本质就是跟机器语言是一样的啊,讲到这儿大家是不是能理解,就汇编语言本质就是机器语言。好,那汇编执行的过程到底是什么样子的呢?汇编执行的过程,其实我刚才呢,也大致给大讲给大家啊。讲过了,就是作为一个计算机来说。
03:04
作为一台计算机来说,计算机通电通电呢,CPU1拿到这个一通电之后。在里边写死了一个东西,就是CPU1通电之后,就让它到一个固定的位置去读程序,知道吧,固定的位置这里面我省略了一些细节,反正它是一个固定的位置,所以它首先去找固定的那个位置,找到那个程序,那个程序是什么。一个一个的指令嘛,一个一个的汇编码嘛,好,我把它读进来之后,时钟发生器不断的震荡通电,推动着CPU内部一步一步一步的执行,那么刚才我说过了,他每算一个指令的时候,有可能会有好多好多步的通电过程,他得一步一步的往前走,才可以一步一步的计算。啊,因为它中间的各种的电路非常的多,它通过一次电可能诶这个这个地儿亮了,这个地儿亮了之后才能进行下一步的计算,下一步的计算,这个地儿亮了,他在这个基础之上才能进行下一步的计算,好时钟发生器是他自己本身的心脏,跳一次他往前走一步,跳一次他往前走一步。
04:17
通过时钟发生器。让它不断的通电断电。推动CPU内部一步一步执行。执行多少步是取决于指令所需要的时钟周期。使用发射剂,每发生一次,每通一次电,断一次电,称作一个使用周期,一个ccle,那么通动CPU一步步执行,执行多少步?有的指令比较复杂,很可能这条指令我需要执行十步,有的指令呢,我可能执行执行三步啊,听我说。时钟发生器每秒钟目前可以到多少?多少个G?合资就是每秒能震荡多少多少G,和这个G是是一个什么概念兆?
05:05
几几十亿次吧,好吧,几十亿次的推进,推进过程,这就是所谓的CPU的主频,当然它这个主频的概念呢,和这个还不一样,因为它里边还有一些倍频什么的,就是CPU的频率,频率越快,那它肯定执行的就越快,但它本身,它本质上不是一个线性关系。好吧。嗯。好了。直线内角度取决于指定所需要的施工周期,然后到了一定的施工周期之后完成了。计算完成之后,下一步写回去也是一个电信号输出给内存,告诉你内存中这个位置,你得给我通电,这个位置是个断电,当然内存是它的,它它内存的它不是通电断电的概念,它是那个看它的材料啊,它材料呢。
06:08
呃,内存的材料是什么一个材料来着忘了,呃,它这种介质就是只要一通电,那个位置就可以代表一和零,只要一通一断点那个位置,那个位置就可以代表一和零等等。当然整个内存一旦断电之后,那么里边的数据就全消失了,恢复成最初始状态。然后或者是什么呢?或者你计算,你把最后的计算结果写给你的显卡。写给你的显卡,那就给你显卡呢,你要是显卡显卡上里边呢,有一个你可以认为有一个缓存,这个缓存对应的屏幕上的每一个点。啊,我这个地给你写了个一,这个地给你写了个零,这个地给你写了个一,这个地给你写了个零,好,你就在屏幕上对应的位置给我画出来。应该是一个什么样的像素或者什么样的颜色,但我说这模型比较简单,其实呃,显卡的模型要比这复杂的多,呃,显卡的模型每屏幕上的某一个线索点很可能有好多未来代表256位。
07:07
16位八位都是有可能的啊,每一个点,所以总而言之,在计算机的内部全是数字,通过数字进行各种各样的物理转换,你才能看到咱们现在绚丽多彩的这种屏幕计算机啊。好,这大概就是一个汇编员的执行过程。好,看看刚才讲的这一小段,有没有同学有疑问的?好,我看刚刚有小伙伴说解释和编译的区别不明白,解释和编译的区别不明白。编译你自己写了个程序知道吧。我say。
08:01
这东西是放在硬盘上的,要执行的时候给他弄到内存里。弄到内存里C编译完的代码,比方说那个Linux底下的EF啊,Windows底下的exe,好编译完的代码放到内存里,它直接就是机器码。就已经是机器码了,这个码交给CPU拿过来就可以直接执行。这不一样。Java是这样的,Java进去之后是一个code二进制码,这个码是不能被我们CPU直接执行的,在执行的过程之中读一条指令。交给JVM。翻译成机器码。CPU去执行,这个叫解释执行,这个就是它的解释器,给你解释成什么,解释成机器语言。
09:03
好,该到了吗?小小怪兽内存中的东西是怎么给显卡的?内存东西发给显卡?你看这个图。内存的东西发给显卡。CPU发出指令,说内存这块。哥们儿,你给我去。那个我。稍等一下啊,把我画图调出来。好,呃。内存之中CP方式质量说内存你把这块东西啊,写给我们的显卡,注意啊不,它里面使用了DMA的机制。就是说你没有必要说把这块数据啊,全都导到CPUCPU再传给显卡,没没这个必要发这些指令,把内存这部分直接给显卡,然后通过系统总线。
10:09
写到显卡。先看我刚才说了,它里边呢是一个缓冲区,这个缓冲区对应着我们的屏幕。老头,出问题稍等啊。好,这块数据发给显卡,显卡的呢,对应的是什么呢?对应的是我们的屏幕。这是我们的屏幕。这是屏幕每每每一个小的缓冲区的数字,对应的都是屏幕上的一个一个的小的像素,然后我们的显示器在干嘛?显示有一个刷新率,60赫兹,144赫兹等等,这个刷新率在干嘛?
11:06
不断的从显卡里面读取这些数据出来,然后在这屏幕上进行刷新,所以你只需要负责把你的东西写到显卡里,我们的屏幕上、显示器上就能显示出来了。好,这个过程看看大家是不是清楚。机器码和二进制码有区别吗?机器码和二进制码。哎,你你你我我认为你问的应该是那个机器语言,就是CPU直接能访问的这个语言。CPU的直接这个语言零和一和bad code和Java的语言有没有什么区别,那肯定是有区别的,这个相当于Java的汇编语言。
12:06
这是Java的汇编,因为Java要跨平台嘛,它这个汇编不能和具体的某一个平台和Windows和Linux相相关的,诶,但是呢,所以Java就设计了一种中间格式,这种中间格式就是它的code。比方说在Java语言里面,我们要挪一个指令呢,它可能是这个这个这个代表,但是呢,在Linux底下,它可能是哎1000开头的,在window底下可能是0111开头的等等。所以它本质上是不一样的,这个可以作为一种中间格式。这个格式由Windows底下的JVM翻译,就翻译成Windows底下格式的二最底层的机器码,那么如果是由Linux下的,那么他就成nux的码。这样就实现了台。虚拟机本身是不能跨平台的啊,是通过这个虚拟机解释完的,你可以跨平台好吧。
13:08
有时候我感觉你们问的问题真的好满意啊。我没有办法,还得给你们解答是吧?好,那个潇潇问,GPU为什么比CPU更适合做机器学习?是因为应用场景图片比较多吗?这个你问到我了,我还真不太清楚,但是我猜应该八九不离十。GPU因为它比较纯粹,它就是在那里头做一些计算,然后呢,输出到显卡做一些计算,输出到显卡,而CPU它是叫做通用计算。所以它里面的电路的一些优化,实际上是针对那些通用的计算,我们普通的这些计算对于人工智能所需要的那些个。特殊的,大量的计算类型不一样的那些计算,它并没有进行优化。GPU呢,正好是。
14:06
被更适合于整个AI的这种算法上的一些优化,它正好匹配上了,所以很多人呢是用GPU,呃,现在有一些芯片呢,叫做AI芯片啊,这个华为也也也在做。AI镜片指的是什么?指的是从电路上,电路底层在设计的时候就设计成为更适合做AI计算,听懂了吗?那么这个的话一定比GPU要快得多。因为GPU本身还是。做显示的啊。只不过他正好赶上他,他他更适合做,相对CPU来说更适合做AI一些,所以有的人用它来做计算。啊,这个不知道说清楚没有啊。嗯。嗯,小怪小怪兽啊,小怪兽这个解释也很到位啊。
15:03
CPU只会和内存交互,内存在和其他部件交互嘛,看这个电路。CPU。连接内存、CPU,也可以连接整个整体的IO总线。同学们,你们想想,如果CPU只和内存做交互的话,这怎么可能呢?假如。我们现在。执行过程之中有一个键盘有一个输入。网络上来了一串数据,硬盘突然间宕机了,这些个CPU大哥你得知道啊。这叫什么叫中断,所以他们之间跟CPU打交道是通过终端信号来啊。当然,呃,严格来讲呢,是通过CPU,内存和这些外围设备的配合才可以。好了再说啊。
16:00
CPU呢,在内存在整个机器里面呢,说它是核心,但它呢,核心是在于它是一个协调器啊。OK,我们继续。
我来说两句