lcytms
发表于 2018-3-22 08:44:32
0931
都是CPU的外围设备,这个时候,CPU会通过访问它的外围设备,完全相同的方法来通知加速器,你要做一件事情,或者是做长整,或者是做搬运,或者是做sobel。
除了通知它做这件事情以外,还有哪些信息CPU必须及时地通知?
数据在哪?
原始数据的起始地址。
当然这些数据,显存嘛,也是放在memory里面,放在存储器里面。
那么,CPU必须告诉加速器,数据在哪?
原始数据的基地址在哪?
lcytms
发表于 2018-3-23 15:24:35
0932
同时还要告诉加速器,目标的基地址在哪?
目标的首地址在哪?
这个信息要告诉。
这些信息,主处理器又是如何来通知加速器的呢?
同样刚才说了,这个时候的加速器,它的地位跟CPU的任何一个外围设备的地位完全相等。
就是被CPU访问。
这个时候CPU是老大,CPU是Master,是主机。
而被接受控制的,是从机,完全相等。
这个时候的加速器,它跟所有CPU的外围设备完全相等。
它是一个从机,接受CPU的访问。
接受CPU唯一地址的访问。
那么有起始地址,源的起始地址和目标的起始地址。
lcytms
发表于 2018-3-23 15:28:07
0933
并且呢,会给出一些特定的计算信息,比方说,字宽,字的宽度是多少?
16位的,还是32位的、48位的?
还有其它的一些辅助的信息。
CPU要通知加速器。
一旦加速器获得了完整的信息以后,主处理器还必须给它发一个特定的命令。
什么命令?
就是开始吧,start。
这个命令怎么发出去呢?
这个命令一般处理的形式,是在加速器里面会有一个状态寄存器。
状态寄存器有一个标志的起始位。
这个起始位也是被主处理器访问的。
主处理器可以写它。
启动吧,start。
向start的标志位写上一个帧的一个信号。
于是加速器就获得了CPU的授权了。
lcytms
发表于 2018-3-23 15:29:16
0934
CPU的什么授权呢?
就是让它来访问memory。
这个memory我们以后会介绍,现在主要的是SDRAM。
访问存储器里面的这些信息。
这些信息,或者是显存,或者是浮点,或者是图像的边缘检测。
主处理器转而会停下来。
在我们现在的这个架构里面,在绿皮书的教材里面,CPU一旦委托加速器来执行对应的任务以后呢,加速器就空闲了,就真正地空闲了。
稍后我们会解释。
不会,CPU还有其它的事要干。
就好像我们现在刚刚解释的,如果我们现在要玩一段比较强大的游戏,比如像魔兽之类的。
可能这个时候,普通的显卡就不能支持,玩的时候就很卡。
因为它是用CPU算出来的。
lcytms
发表于 2018-3-24 14:34:48
0935
用加速器,用一个好的显卡来做的时候呢,它是用命令的形式,CPU很轻松啊。
要图像搬运的时候,它用不着自己做,它只要发出一个命令,告诉这个图像加速器,数据在哪?
目标在哪?
然后启动它。
发出start。
CPU就是发出一个命令即可,当然CPU就轻松了。
接着CPU就可以干其它的事情。
所以说这个时候图像就很流畅。
就不至于很卡。
CPU的开销就很轻松了。
问题是加速器,一旦获得了授权之后,加速器将会全力以赴地以硬件的方式,来处理显存,memory里面的数据,主处理器CPU原本是控制memory的。
对memory而言,原本它的Master,它的主人是CPU。
lcytms
发表于 2018-3-24 14:35:38
0936
现在这个memory要被加速器所控制,因为加速器要读里面的数据,写里面的数据。
Memory只有一个它,它听哪个的呢?
主处理器要命令它,是它的主人。
当加速器未获得授权的时候,加速器也是一个仆人,这个时候是一主多仆。
所有的设备都是仆人,都是slave,都是接受Master的指挥的。
可是一旦加速器获得了授权以后,加速器当然就要对memory进行读写了。
这个时候,memory可能就会有一仆二主了。
一仆多主了。
这个时候,对加速器系统,就有一种特定的应用了,就是这个时候如何来解决一仆二主、一仆多主的这种架构。
lcytms
发表于 2018-3-24 14:36:19
0937
这个时候,就有一个资源的裁决问题。
一旦加速器获得授权,加速器就必须获得对资源的控制权,控制权就必须转交给加速器,早先的架构里面完全是由CPU定的。
是由老大,由master,也就是唯一的CPU来敲定的,由CPU说了算,CPU说,我把资源给你,CPU就停下来,或者说CPU去访问其它的资源。
把这一部分硬件资源交给加速器。
加速器就全力以赴地运行。
而现代的架构,会考虑到一些问题,如果有CPU来决定,CPU我们知道还多核了,究竟由哪个核来决定呢?
是不是单独还要有一个主的处理器?
lcytms
发表于 2018-3-25 11:02:40
0938
都会带来一些处理上的困难。
而现代的处理方法是,既不由加速器来定,也不由CPU来定,由一个第三方的裁决机构,称之为仲裁器的,由仲裁器根据仲裁策略来决定当前的资源给谁。
在我们绿皮书这个教材里面,我们采用了一个简单的仲裁策略,就是唯一申请者获得仲裁。
申请者有谁呢?
申请资源的,有CPU,有加速器。
唯一的申请者,只有一个申请者的时候,判决给它。
有多个申请者的时候,停下来,谁也不给,维持原来的判决。
用这样一种简单的仲裁策略。
根据这个仲裁策略,加速器获得仲裁,得到资源,于是加速器就可以全力以赴地来执行搬运、长整或者是图像边缘检测。
lcytms
发表于 2018-3-25 11:09:50
0939
这个是由硬件逻辑来做。
我们看到了,我们做到210帧,很快做完了。
做完了怎么办?
做完了,加速器如何来通知CPU,我完成了这件事呢?
因为CPU如果做图像搬运,是动画,它把这个角色搬完了,CPU显然会让它搬下一个角色。
做下一段动画。
加速器搬完了以后,加速器会如何来通知CPU,我做完了这件事呢?
两种方式,第一种方式,加速器它本身有一个状态寄存器,状态寄存器在我们这张PPT上,主处理器会通过特定的通道来访问加速器的状态寄存器。
通过查询的方式,加速器来访问状态寄存器。
lcytms
发表于 2018-3-25 11:10:38
0940
它是否完成了指定的交付的任务,这是一种方式。
当然大家知道,查询的方式比较慢,现代更多的用的是中断。
中断的方式来得更快一点。
当加速器完成了指定的任务的时候,加速器单独地给主处理器发一个中断,主处理器接到这个中断信号以后,就知道加速器已经完成了指定的任务。
于是加速器和CPU之间再一次交换资源,资源的仲裁。
这个时候CPU要重新接管资源。
加速器要释放资源。
或者仲裁要把资源判给CPU。
当资源重新判给CPU以后,这个时候CPU才可以接着做下一件事。
搬完了第一个角色,你让它搬第二个角色。
页:
1
2
3
[4]
5
6
7
8
9
10
11
12
13