0921
当然我们要问清楚,这个选件,协处理器8087是做什么用的?
我不买它可不可以?
当时苹果发布会上的销售人员是这么解释的,这个协处理器是一个长整运算、浮点运算的一个加速器。
就是这么提出来的,加速器,accelerator。
他们的现场工程师这么解释,如果你是用于科学计算,建议你最好买一个。
但是如果你选择不买,不要协处理器,苹果二拿回去,8086的那颗CPU照样能做,只不过做得慢一点。
为什么会做得慢一点呢?
0922
解释就是这样。
它是用指令做的,而协处理器是用硬件做的。
当时我们的概念还不像现在这么清楚。
指令做跟硬件做有什么区别?
很简单,他就拿了一段游戏出来,没有协处理器的一台电脑,没有加8087的协处理器的电脑,是用指令做的。
这个时候,完成同样一个游戏,如果游戏其中的一个角色,从一个坐标点运动到另外一个坐标点,电脑里面是怎么处理呢?
是在显存上做一段搬运,是不是?
0923
一个角色,是人物也好,是一个球也好,是道具也好。
从一个坐标运动到另外一个坐标。
电脑会是怎么实现的呢?
电脑当然要把这个坐标搬运到这个位置。
怎么搬运呢?
如果没有加速器的时候,CPU会把显存对应的区域一个字节一个字节地读到CPU里面来。
因为8086是8位的。
0924
然后,读进来,再写回去。
而这个期间呢,CPU还要运行程序。
它是根据程序来,一条读指令,一条写指令。
而且还有取指周期。
所以,CPU还要访问MEM。
我们说指令存储器,它要读指令,本身要占用周期。
0925
然后读到CPU里面来,要有周期。
一个指令周期要占用若干个机器周期,机器周期对应的是硬件电路的一拍。
它用那么多拍来组成这些动作,当然慢了。
所以说这个时候,用CPU来做这个事情,CPU一条指令一条指令地来做。
但是如果是硬件,是怎么做的?
这个里面就说到了一件事,加速器里面说到了一个DMA。
至芯教材里面也有。
Direct memory Access,直接存储器访问。
什么个意思呢?
如果用经过DMA的控制,加速器控制DMA以后,不再经过CPU了。
而是直接读到DMA。
0926
DMA再写回到目标里面去。
DMA是什么?
不是指令,它是一个硬件逻辑,当然快了。
所以说,当时苹果的销售工程师跟我们说,如果你不买8087,用硬件算,算什么呢?
算浮点,算长整,它是算出来的。
但是呢,如果你买了这个加速器,8087的加速器,它就不是用指令算的。
它是用硬件逻辑算的。
硬件逻辑,每一拍都会执行一个动作,全流水的情况之下,当然要快了。
这个道理很简单。
这个道理我们放到今天,可以更好地理解。
0927
因为今天在座的各位都关注游戏,现在的游戏程序做得很好,但是呢,它有一件要求,它要求有很好的显卡支持,是不是?
如果没有一个很好的显卡支持呢,有些游戏程序是完不成的,要么玩起来很卡,要么根本不能玩。
为什么会这样呢?
加速器。
这个时候,游戏程序它所对应的显卡,要求这个显卡起的就是加速作用。
Accelerator。
现在我们就来说一说,加速器该怎么动作?
比方说,用DMA做数据搬运,CPU做数据搬运我们已经很清楚了。
就是读写即可。
读一个写一个,还有做一个指针。
DMA是怎么做的?
0928
DMA它要获得数据的起始地址和结束地址。
知道数据在哪,写到什么地方。
然后呢,直接做,一拍做一个。
这个期间就要涉及到加速器该怎么做。
如果是一个图像加速器,就是我们做sobel,或者是一个协处理器8087,做长整,做浮点。
那么,会怎么做呢?
当然其中有各种各样的运算了,长整,浮点,sobel,中值滤波,钝化,但是有一件事是它的基本的规律。
就是加速器,每个加速器都要这么做的。
什么规律呢?
我们来看看。
首先主处理器是CPU,CPU要获得资源,CPU要正常运行,CPU需要长整运算,需要图像加速的处理的时候呢,是由CPU来管理的。
0929
这个时候CPU是老大,CPU说了算。
我什么时候做长整,我说了算。
我什么时候做图像的边缘检测,也是由CPU说了算。
CPU里面有一段程序嘛。
当CPU要执行类似这样的数据搬运、钝化的时候,CPU在有加速器存在的情况之下,它用不着自己去做,用不着自己一条指令一条指令地去做。
它可以怎么做呢?
它可以通知图像加速器,这个时候,图像加速器做一个数据搬运。
数据搬运的图像加速器。它会通知这个图像加速器,你来做这件事。
这时候,主处理器不会自己做,不会自己用指令做。
那么,它怎样通知它呢?
当然通知它,给它一个命令。
会向图像加速器发出一个命令。
0930
大家可以看得到,在主处理器、加速器之间会有一个总线通道,纵向的,主处理器呢,会通过这个总线通道,来通知加速器,而这个总线通道对于CPU而言,是唯一的。
对于CPU的架构,无论是冯诺依曼的体系,还是哈佛体系,我们看得到,都是挂在标准总线上,地址、数据、控制总线上。
哈佛体系上,是把数据分成两类,指令和数据。冯诺依曼是一类。
总之是地址总线、数据总线和命令总线。
CPU对于这些设备,无论是加速器也好,还是挂在上面的端口也好,还是定时器也好,还是异步串行收发器也好,都是通过唯一的地址,来进行访问。
它们的地位都是相等的。
