专利名称:在计算机系统中延迟命令发出的方法和系统的制作方法
技术领域:
本发明总的涉及计算机的中央处理单元(CPU)与外围处理单元之间的同步,具体涉及命令发出的定时。
背景技术:
在现代计算机系统中,每个外围功能模块(如音频或视频)具有它自己的专用处理子系统,并且这些子系统的操作典型地要求计算机的中央处理单元(CPU)的直接控制。此外,子系统的部件之间的通信与同步典型地是通过硬件连接实现的。例如,在具有两个或更多图形处理单元(GPU)的高级图形处理子系统中,CPU不得不频繁地评估GPU的状态,并且只有当前一或当前命令结束时,才能发出下一提供的(rendering)命令。在其他情况下,当CPU在使用多线程技术为GPU进行某些计算时,GPU在执行需要来自CPU的结果的命令之前,可能不得不等待CPU完成计算。当一个GPU向另一GPU请求数据时,必须在CPU的控制下通过直接硬件连接或总线进行传输,于是CPU在执行后继命令之前,不得不等待数据传输完成。不管是CPU等待GPU还是反过来,等待时间都是一种浪费,并且降低了计算机的整体性能。
因此,期望计算机系统能够尽可能地将硬等待与CPU的操作分开。
发明内容
考虑到上述情况,本发明提供一种方法和系统来移除CPU的一些等待时间、以及外围处理单元的一些空闲时间。换句话说,它增加处理器之间的并行度。
公开一种在具有多个外围处理器的计算机系统中使用延迟命令发出的方法和系统,所述多个外围处理器与嵌入一个或多个中央处理器中的外围设备驱动程序进行操作。在外围设备驱动程序发出具有第一事件标记的第一命令之后,外围设备驱动程序在发出第一命令之后,生成用于第一外围处理器的第二命令。如果第一和第二命令需要被同步,则存储第二命令,等待返回第一事件标记,并且当返回第一事件标记时,发出第二命令。
然而,当下面结合附图阅读特定实施例的描述时,本发明操作的结构和方法、以及其额外目的和优点将会得到最好地理解。
图1是传统计算机系统的部分的框图。
图2是根据本发明一个实施例的计算机系统的部分的框图。
图3示出根据本发明一个实施例的命令和事件标记流。
图4A是示出根据本发明一个实施例的命令块生成和同步机制的流程图。
图4B、4C是示出根据本发明一个实施例的每个命令块执行中的三个不同的驱动子程序的流程图。
图5A和5B是示出根据本发明一个实施例的延时命令发出的省时效果的命令时序图。
具体实施例方式
图1示出传统计算机系统100的部分。在该系统中,外围设备驱动程序110仅仅是程序,功能在本质上类似使用说明,其为操作系统提供关于如何控制和与外围子系统140的专用处理器120和130通信的信息的指令。驱动程序110没有任何由一个或多个中央处理器(CPU)150替代执行的控制功能。通过硬件连接160或者通过总线170,进行专用处理器120与130之间的通信。
作为本发明的实施例,图2示出多处理器计算机系统200的部分,它具有嵌入一个或多个中央处理器220中的驱动程序210。这里,“嵌入”的意思是驱动程序实际上运行在CPU中,并且使用了一些CPU处理能力,从而驱动程序可以产生存储在缓存中的命令,当需要与其他命令同步时分配事件标记,发出命令并且监视事件标记的返回,而完全没有CPU硬等待。这样的驱动程序实现不需要大规模的硬件支持,因此它也是节省成本的。
计算机系统200还采用命令缓存器230,后者存储驱动程序210发送的即时命令。命令缓存器230可以仅仅是主存储器290中的存储空间,或者是位于任何地方的另一存储器,并且可以由驱动程序210动态地分配。利用中央处理器220的处理能力,驱动程序210指挥将命令缓存到命令缓存器230中和以后从命令缓存器230中发出命令,以及指挥专用处理器240和250与中央处理器220之间的同步。专用处理器可以是专用于图形操作的处理器,称为图形处理单元(CPU)。
图3是示出根据本发明一个实施例的CPU、缓存器与专用处理器之间的命令流的图。为了说明的目的,提供了更多关于命令缓存的细节。嵌入的驱动程序320连同事件标记一起生成命令,然后将其有选择地发送到命令缓存器330和340。专用处理器1350的命令和事件标记被送到命令缓存器1330,而专用处理器2360的命令和事件标记被送到命令缓存2340,从而可以独立和同时发出不同专用处理器的命令。当当前命令需要与另一命令执行同步时,驱动程序320伴随着当前命令生成事件标记。处理器,不管是外围专用处理器350和360、还是中央处理器300,都执行它们相应的命令,并且在执行完成后返回事件标记(如果有的话)。它们之间存在通过通信建立的多种控制机制。例如,中央处理器300可以在其操作中控制这两个缓存器。
图4A展示了图形驱动程序320如何与GPU和CPU同步命令发出的详细流程图。这里,驱动程序320在步骤410A到470A中连续生成命令块而没有在CPU侧的任何延迟。这些命令中的一些在被送到GPU执行之前,要被存储在命令缓存器中。例如,命令块[n-1]410A具有到第一GPU的、请求返回事件标记[i]的命令。第一GPU将在命令块[n-1]410A完成后返回事件标记[i]。在检测到事件标记[i]后,驱动程序320于是可以从命令缓存器中发出需要与命令块[n-1]410A同步的另一命令。这样,消除了CPU对同步事件的硬等待。术语“延迟命令发出”泛指该命令缓存过程。
图4A还示出需要与另一CPU线程同步的命令块[n+m]440A以及需要与第二GPU同步的命令块[n+m+k]470A。在这两种情况中,驱动程序320的存储命令、检查事件标记和发出命令的操作与上面第一GPU情况中的相同。
在每个命令块中,驱动程序320执行特定子程序,如生成新命令和相关事件标记(如果需要的话),检查返回的事件标记,缓存新命令,以及发出缓存的命令,或者如果没有待决的事件标记的话直接发出新命令。这些子程序可以以各种顺序执行。图4B、4C和4D是执行这些子程序的三个例子。
参照图3和图4B,驱动程序320首先在步骤410B中生成当前命令,然后在步骤420B中检查任何返回的事件标记。如果存在返回的事件标记,并且如果相关的命令在缓存器中,则驱动程序320将缓存的命令与其自己的事件标记(如果有的话)一同发出,如步骤430B和440B中所示。这里,“相关”的意思是指在缓存的命令与向缓存器返回事件标记的前一命令之间存在同步需要。如果相关命令不在缓存器中,则驱动程序320在步骤450B中检查当前命令是否与返回的事件标记相关。如果是的话,则它发出当前命令(步骤470B),否则,它缓存当前命令(步骤480B)。
另一方面,如果缓存器中不存在返回的事件标记,则驱动程序320在步骤460B中检查任何待决事件标记。在存在当前命令发出将依赖或相关的待决事件标记的情况下,则驱动程序320缓存当前命令(步骤480B)。在不存在待决相关事件标记的情况下,驱动程序320直接发出当前命令。要注意,在所有命令缓存或发出的情况中,相关的事件标记(如果存在的话)也连同命令一起被缓存或发出。
图4C示出根据本发明另一实施例的另一子程序,其中驱动程序320首先在步骤410C中检查任何返回的事件标记。如果存在返回的事件标记,并且如果相关的命令在缓存器中,则驱动程序320发出缓存的命令(步骤430C)。如果不存在返回的事件标记(步骤410C),或者缓存器中不存在相关命令(步骤420C),则驱动程序320生成当前命令(步骤445C)。如果当前命令与任何返回的事件标记相关(步骤450C),则驱动程序发出当前命令(步骤480C)。如果当前命令不与任何返回的事件标记相关,则它还检查是否存在任何与当前命令相关的待决事件标记(步骤460C)。在存在待决的相关事件标记的情况下,驱动程序320将当前命令与其事件标记(如果有的话)一同缓存(步骤470C),否则驱动程序320发出当前命令与其事件标记(如果存在的话)(步骤480C)。上述事件标记检查过程可以仅限于那些以前向其发送了命令与事件标记的处理器。
在图4B和4C所示的两种情况下,作为替代,如果存在任何待决的事件标记,则总是缓存当前命令。如果驱动程序320只检查事件标记缓存器,则在待决事件标记返回之前,驱动程序320事实上没有办法知道它是否与新生成的当前命令相关。因此如果存在任何待决的事件标记,那么需要缓存当前命令。
图5A和5B是示出减少CPU等待时间和GPU空闲时间的延迟命令发出的时序图。图5A显示不采用延迟命令发出过程的情形。在这种情况下,CPU在时隙500A、510A和520A中分别生成用于第一GPU(或GPU1)在时隙550A、560A和570A中的命令。在时隙502A、512A和522A中生成的命令分别是用于第二GPU(或GPU2)在时隙552A、562A和572A中。由于没有采用命令缓存过程,因此只有当当前GPU操作完成时才能生成和发出后继命令。例如,时隙510A只能在时隙552A之后开始,类似地,时隙520A只能在时隙562A之后开始。在之前发出的命令被执行期间,CPU不得不等待。如图所示,两个相邻时隙之间的时间间隔为CPU等待时间或GPU空闲时间。例如,510A和502A之间的间隔是CPU的等待时间,而560A和550A之间的间隔是GPU1的空闲时间。
与图5A相对比,图5B示出在采用延迟命令发出过程以允许CPU连续生成命令到命令缓存器、而不必等待任何GPU完成命令执行的情形下的时序关系。在这种情况下,CPU在时隙500B、510B和520B中分别生成用于GPU1在时隙550B、560B和570B中的命令。在时隙502B、512B和522B中生成的命令分别是用于GPU2在时隙552B、562B和572B中。如图所示,CPU命令生成时隙510B被上提到紧跟时隙502B的完成,而在GPU2时隙552B结束之前。但是在时隙520B的CPU的第五命令仍然等待时隙552B结束,这是因为该特定命令与GPU2执行之间存在同步需要,在530B的命令和在562B的GPU2执行也是如此。在这样的命令处理系统中,尤其是对于采用这样的延迟命令发出过程的图形系统,由于后继命令已经被生成并在命令缓存器中等待GPU执行,因此获得了好处。另一方面,GPU不需要等待CPU生成命令,并且可以在当前命令结束之后执行下一命令。这在GPU2在时隙562B和572B的情况中进一步示出,其中GPU2没有空闲时间。基于同样的原因,时隙570B和560B之间的GPU1空闲时间也减少。
为了量化通过采用的延迟命令发出过程而节省的时间,如果假设CPU命令生成时间为‘t’,并且GPU1和GPU2的执行时间分别为T1和T2(为了容易估计,假设T1<T2),如图5A所示,不使用延迟命令发出的系统花费3*T2+3*t来完成三个命令周期。图5B的具有延迟命令发出的系统将三周期的时间缩短到3*T2+t。因此,对于三个周期,节省的时间为2*t。一般地说,对于n个命令周期,节省(n-1)*t。
图5A与5B之间的比较还显示出GPU空闲时间的节省。在图5A中,时隙560A与570A之间的GPU1空闲时间为T2-T1+t,并且GPU2空闲时间为t。在图5B中,对应时隙之间的GPU1空闲时间变为T2-T1,或者说节省了t。GPU2空闲时间完全被消除,也节省了t。
本发明提供用于实现本发明不同特征的许多不同的实施例或例子。描述部件或方法的特定例子以帮助阐明本公开。它们当然仅仅是例子,而不是意图将本公开限制于说明书所描述的内容。
本申请要求于2005年10月18日提交的名为“Smart CPU SyncTechnology for MultiGPU Solution”的美国专利申请No.60/727668的优先权。
权利要求
1.一种在具有一个或多个专用处理器的计算机系统中延迟命令发出的方法,所述一个或多个专用处理器用运行在一个或多个中央处理器上的设备驱动程序进行操作,该方法包括外围设备驱动程序发出第一命令与第一事件标记;外围设备驱动程序在发出第一命令之后,生成用于第一外围处理器的第二命令;存储第二命令,等待返回第一事件标记;以及当返回第一事件标记时,发出第二命令。
2.如权利要求1所述的方法,其中,所述存储第二命令的步骤还包括将第二命令存储在与第一处理器相关的缓存器中。
3.如权利要求2所述的方法,还包括生成用于第二处理器的第三命令;以及将第三命令存储在与其相关的缓存器中。
4.如权利要求3所述的方法,其中,与第一和第二处理器相关的缓存器是不同的。
5.如权利要求1所述的方法,还包括检查生成的第二命令是否与第一命令相关,要求在第二命令发出前返回第一事件标记。
6.如权利要求5所述的方法,其中,所述检查步骤还包括检查第一事件标记是否已返回;以及如果还未返回第一事件标记,并且如果第一事件标记与第二命令相关,则检查第一事件标记是否是待决的。
7.如权利要求6所述的方法,其中,所述检查第一事件标记是否已返回的步骤是在如下两个时间之一时执行的生成第二命令之后;生成第二命令之前。
8.一种在具有多个图形处理器的计算机系统中延迟命令发出的方法,所述多个图形处理器用嵌入多线程中央处理器中的图形驱动程序进行操作,该方法包括图形驱动程序发出第一命令与第一事件标记;图形驱动程序在发出第一命令之后,生成用于计算机系统的第一处理器的第二命令;存储第二命令,等待返回第一事件标记;以及当返回第一事件标记时,发出第二命令。
9.如权利要求8所述的方法,其中,所述存储第二命令的步骤还包括将第二命令存储在与第一处理器相关的缓存器中。
10.如权利要求9所述的方法,还包括生成到第二处理器的第三命令;以及将第三命令存储在与其相关的缓存器中。
11.如权利要求10所述的方法,其中,与第一和第二处理器相关的缓存器是不同的。
12.如权利要求8所述的方法,还包括检查生成的第二命令是否需要等待第一事件标记返回。
13.如权利要求12所述的方法,其中,所述检查步骤还包括检查第一事件标记是否已返回;以及如果还未返回第一事件标记,则检查第一事件标记是否是待决的。
14.如权利要求13所述的方法,其中,所述检查第一事件标记是否已返回的步骤是在如下两个时间之一时执行的生成第二命令之后;生成第二命令之前。
15.一种在高级计算机系统中支持延迟命令发出的系统,该系统包括多线程中央处理单元CPU;具有多个图形处理单元的图形子系统;至少一个命令缓存器,用于存储命令和相关事件标记;和嵌入CPU中的图形驱动程序,用于生成要存储在命令缓存器中的命令,当需要同步时分配事件标记,控制命令发出并监视事件标记返回。
全文摘要
公开一种在具有多个外围处理器的计算机系统中延迟命令发出的方法,所述多个外围处理器用嵌入多线程中央处理器中的外围设备驱动程序进行操作。在外围设备驱动程序发出第一命令与第一事件标记之后,外围设备驱动程序在发出第一命令之后,生成用于第一外围处理器的第二命令。如果第一和第二命令需要被同步,则存储第二命令,等待返回第一事件标记,并且当返回第一事件标记时,发出第二命令。
文档编号G06F9/46GK101025717SQ20061013594
公开日2007年8月29日 申请日期2006年10月17日 优先权日2005年10月18日
发明者张国峰 申请人:威盛电子股份有限公司