专利名称:多核计算机系统驱动程序的支持多执行绪指令执行的方法
技术领域:
本发明涉及计算机装置驱动装置,特别是涉及一种驱动程序支持的异步指令处理。
背景技术:
一般的计算机图形系统包含一图形转接器,其提供一帧缓冲区及一图形加速硬件,以及一软件装置驱动程序,其提供该图形转接器及操作系统及/或运作于该操作系统的上的应用之间的界面。该图形转接器包含至少一图形处理单元(graphics processing unit,GPU),其为一计算机组件,用以将视觉信息的逻辑表现转换为可以作为一显示媒体的输入的讯号。该图形转接器用以加速复杂图形的显示,同时减轻操作系统在图形处理上的负担,以改善整体效能。
装置驱动程序,通常简称为驱动程序,为一计算机程序,其致能其它程序(通常是操作系统)以和一硬件装置互动。在窗口操作系统环境中,当一应用以装置独立图形要求(device-independent graphics request)来呼叫Win32功能时,该图形装置接口(GDI)诠释该这些指令并呼叫该显示驱动程序。继的,显示驱动程序将这些要求转换成视讯硬件的指令。
GDI呼叫装置驱动程序接口(device driver interface,DDI)以将数据传送到该驱动程序。当一应用提出GDI要求时,且GDI确认该驱动程序支持该相关功能,则GDI呼叫该功能。驱动程序必须提供该功能,并在该功能完成时回报GDI。
有越来越多的计算机系统采用多核心中央处理单元(CPU),其具有多执行绪(thread)可以同时处理多个指令。执行绪可以让一个程序将其自身分为两个或更多的同时运作的工作。多执行绪可以同时在许多计算机系统并行。这种多执行绪通常藉由时间分割来执行(单一处理器在不同执行绪之间切换)或是藉由多处理(multiprocessing)来执行(多个执行绪在不同的处理器执行)。上述的多核心CPU为后者的多执行绪执行方法,亦即多处理的一种主体。
但是,传统的图形驱动程序设计为在一计算机CPU上执行的单一执行绪上运作,其需要和一图形处理单元(GPU)同步。因此,传统的图形驱动程序并无法由可以同时处理多个工作的多核心CPU中得益。
此外,大部分的图形应用软件并不是以多执行绪写成。应用软件本身也无法从多核心CPU中得益。在许多状况中,应用软件运作的速度取决于CPU执行速度。
因此,需要一个多核心CPU计算机系统以不同图形应用的执行绪来运作图形驱动程序,以改善该计算机系统的图形表现。
发明内容
有鉴于此,本发明提供一种用于多核心计算机系统中驱动程序的支持多执行绪指令执行的方法,该方法包括将异步指令和同步指令分开,将该异步指令暂存于一缓冲区,直接在一CPU驱动程序执行绪处理该同步指令,以一个或多个CPU工作执行绪从该缓冲区处理该异步指令,其中该多核心计算机系统的多个执行绪可以同时使用,并当该CPU工作执行绪处理该缓冲区之后,管理该缓冲区,其中该指令的执行对应用软件就如同单一执行绪一般。
本发明亦提供一种用于多核心计算机系统中驱动程序的支持多执行绪指令执行的方法,该方法包括将异步指令和同步指令分开,将该异步指令暂存于一缓冲区,其中该暂存步骤还包含将该装置驱动程序接口(DDI)回复改变的该资源复制到一驱动程序分配存储器,并修改该对应的指令以指向该驱动程序分配存储器,以第一CPU执行绪从该缓冲区处理该异步指令,以一第二CPU执行绪处理该同步指令。
本发明亦提供一种用于多核心计算机系统中驱动程序的支持多执行绪指令执行的方法,其包括将异步指令和同步指令分开,将该异步指令暂存于一缓冲区,其中该暂存步骤还包含将预期由该装置驱动程序接口(DDI)回复改变的至少一顶点缓冲区复制到一驱动程序分配存储器,并修改对应于该复制的顶点缓冲区的的指令指针以指向该驱动程序分配存储器,并确认错误及指令状态,以第一CPU执行绪从该缓冲区处理该异步指令,以一第二CPU执行绪处理该同步指令。
为使本发明的上述和其它目的、特征、和优点能更明显易懂,下文特举出较佳实施例,并结合附图详细说明如下。
图1显示传统的同步指令处理的具有多核心CPU及一DDI的计算机系统的一部份的方块图。
图2显示依据本发明实施例的异步指令处理的具有多核心CPU及一DDI的计算机系统的一部份的方块图。
图3A显示依据本发明实施例多执行绪DDI执行步骤的流程图。
图3B显示依据本发明实施例暂存异步指令的详细步骤的流程图。
图3C显示依据本发明实施例的缓冲区管理的详细步骤的流程图。
附图符号说明计算机系统~100;多核心CPU~110;CPU执行绪~112和114;DDI~140;图形处理单元~150和152;应用软件~120;操作系统~130;计算机系统~200;多核心CPU~210;CPU执行绪~212和214;DDI~240;指令暂存区~260。
具体实施例方式
本说明书提供的方法,是将计算机指令区分为同步指令和异步指令,并以多个CPU执行绪执行的,使得多个的指令可以同时被执行。
同步指令为必须在DDI回复之前完成的指令。另一方面,异步指令为无须在DDI回复之前完成的指令。
图1显示传统的同步指令处理的具有多核心CPU 110及一装置驱动接口(Device Driver Interface,DDI)140的计算机系统100的一部份的方块图。多核心CPU 110包含两个例示的CPU执行绪112和114。DDI 140将指令传送到CPU执行,并传送到图形处理单元(Graphics Processing Units,GPUs)150和152以将图形显示。虽然多核心CPU 110包含两个CPU执行绪112和114,但是应用软件120和DDI 140却被设计成仅在一个CPU执行绪上同步处理图形指令,亦即,在处理次一指令之前,DDI 140必须等CPU执行绪112完成一目前指令处理,或等GPU 150或152完成一目前指令提交。若GPU 150或152的提交速度高于CPU执行绪112的指令处理速度,则CPU110就成了计算机系统100中速度的瓶颈,或是一CPU束缚。
图2显示依据本发明实施例的异步指令处理的具有多核心CPU 210及一DDI 240的计算机系统200的一部份的方块图。多核心CPU 210包含两个例示的CPU执行绪212和214。执行绪212处理直接由驱动程序240的指令,其称之为驱动程序执行绪。另一执行绪214处理暂存的指令,称之为工作执行绪。
参见图2,在计算机系统200中加入一指令暂存区260。DDI 240可以将异步指令区分,并将之存放在指令暂存区260,并仅将同步指令传送到驱动程序执行绪212以立刻处理。上述暂存的指令可以由工作执行绪214处理,而和驱动程序执行绪212无关。藉此,CPU执行绪112和114两者都被使用,即使该应用程序本身系撰写为用于单一执行绪,也可以从多核心CPU 200受惠。
参见图2,工作执行绪214被指定用来处理暂存的指令。每当DDI 240将一异步指令存入指令暂存区260时,工作执行绪214就被启动,并开始处理该暂存的指令。当一些暂存的指令已被处理时,工作执行绪214释放指令暂存区中对应的部分。
DDI 240也可以标记某些需要以事件卷标追踪的指令。在指令执行之后,工作执行绪214会将该事件标签写回。
图3A显示依据本发明实施例多执行绪DDI执行主要步骤的流程图。步骤310为将异步指令和同步指令分开。指令的性质,亦即,同步或异步,依据指令本身来决定,例如,因为驱动程序必须在回复之前完成该工作,所以某些资源管理指令为同步,这些指令必须立刻执行。在窗口DirectX driver、CreateSurface、DestroySurface、CreateD3Dbuffer、DestroySurface、LockD3Dbuffer、以及UnlockD3Dbuffer即属于此类指令。
DDLock及DDUnlock功能需要CPU和GPU之间同步,因此其也无法成多执行绪。
另一方面,在D3DdrawPrimitives2功能的绘图指令(rendering commands)则为异步指令,其可以暂存并让工作执行绪212独立处理的。D3DdrawPrimitives2功能描绘原型(primitives)并回复更新的绘图状态。
查询产生(queries create)、查询消灭(queries destroy)、查询传送(queriessending)被视为异步指令,但其是连同事件标签暂存的,因此,当这些指令由工作执行绪完成时,这些事件标签会被写回。另一方面,查询读取(queriesread)被视为是同步指令,并由驱动程序执行绪立刻执行。
参见图3A,在步骤310将异步指令和同步指令分开之后,在步骤320将该异步指令暂存。在步骤330中,CPU驱动程序执行绪直接处理同步指令。步骤340中,CPU工作执行绪同时处理这些暂存的异步指令。因此,驱动程序执行绪和工作执行绪同时被使用。当暂存指令被执行完成时,CPU工作执行绪管理该暂存区(步骤350),而处理过的暂存区可以被释放,以供未来指令之用。
图3B显示依据本发明实施例暂存异步指令的详细步骤(图3A中的步骤320)的流程图。在步骤321,复制整个指令暂存区。接着,DDI扫描该复制的指令,以寻找能够由步骤323的DDI回复改变的指令使用的资源。在步骤325,将可以改变的上述资源复制到一驱动程序分配存储器(driverallocated memory)。特别是,DDI回复会影响到系统存储资源(包括顶点缓冲区(vertex buffer)和文本(texure))、及使用者存储缓冲区(由应用传下来的缓冲区),因此将其复制。在复制上述缓冲区后,DDI修改该对应的指令以指向该新的驱动程序分配存储器(步骤325)。
参见图3B,步骤327中,检查指令缓冲区,以确认在上述步骤321~325的指令前处理过程中,是否有任回错误发生,并确认指令状态。就执行状态(render state)及文本阶段状态(texture stage state,TSS),DDI确认并将该执行状态及文本阶段状态写回其对应的缓冲区作为DDI要求(DDI requires)。
图3C显示依据本发明实施例的缓冲区管理的详细步骤(图3A的步骤350)的流程图。当处理该暂存的指令时,CPU工作执行绪将复制的资源传送到一再生缓冲区,并将复制资源释放(步骤352)。驱动程序执行绪在必要的位置,会确认是否该复制资源已经由工作执行绪释放(步骤354),并当该资源被释放时,取回该存储器(步骤356)。
当所有的暂存指令都被处理时,CPU工作执行绪将该指令送到CPU以执行之,并回到睡眠模式。
需注意到,在D3DdrawPrimitives2 DDI,该CPU工作执行绪的运作和CPU驱动程序执行绪相同,除了工作执行绪忽略由驱动程序执行绪立刻执行的查询读取,并管理复制的顶点缓冲区。事实上,若有适当的存储器管理,本发明可以使指令的执行对应用软件而言如同单一执行绪一般。
虽然本发明已以较佳实施例披露如上,然其并非用以限定本发明,本领域的技术人员在不脱离本发明的精神和范围的前提下可做若干的更动与润饰,因此本发明的保护范围以本发明的权利要求为准。
权利要求
1.一种用于多核心计算机系统中驱动程序的支持多执行绪指令执行的方法,其包括将异步指令和同步指令分开;将该异步指令暂存于一缓冲区;以第一CPU执行绪从该缓冲区处理该异步指令,以一第二CPU执行绪处理该同步指令。
2.如权利要求1所述的用于多核心计算机系统中驱动程序的支持多执行绪指令执行的方法,其中该同步指令为下列中的至少之一在窗口操作系统环境中的DDLock、DDUnlock、DDCreateSurface、DDDestroySurface、DDCreateSurfaceEx、CreateD3Dbuffer、DestroyD3Dbuffer、LockD3Dbuffer、UnlockD3Dbuffer、DDMapMemory、及查询读取。
3.如权利要求1所述的用于多核心计算机系统中驱动程序的支持多执行绪指令执行的方法,其中该异步指令为下列中的至少之一在窗口操作系统环境中的D3DrawPrimitives2、查询产生、查询消灭、查询传送。
4.如权利要求1所述的用于多核心计算机系统中驱动程序的支持多执行绪指令执行的方法,其中该暂存步骤进一步包含暂存查询产生、查询消灭、查询传送指令及其对应的事件标签。
5.如权利要求1所述的用于多核心计算机系统中驱动程序的支持多执行绪指令执行的方法,其中该暂存步骤进一步包含确认错误及指令状态。
6.如权利要求5所述的用于多核心计算机系统中驱动程序的支持多执行绪指令执行的方法,其中该确认步骤进一步包含确认执行状态及文本阶段状态;将该执行状态及文本阶段状态写回一装置驱动程序接口定义的缓冲区;以及若发现一错误,则返回一操作系统。
7.如权利要求1所述的用于多核心计算机系统中驱动程序的支持多执行绪指令执行的方法,还包含当储存于该缓冲区中的该异步指令已由该第一CPU执行绪处理后,释放该缓冲区。
8.一种用于多核心计算机系统中驱动程序的支持多执行绪指令执行的方法,其包括将异步指令和同步指令分开;将该异步指令暂存于一缓冲区,其中该暂存步骤还包含将该装置驱动程序接口(DDI)回复改变的该资源复制到一驱动程序分配存储器,并修改该对应的指令以指向该驱动程序分配存储器;以第一CPU执行绪从该缓冲区处理该异步指令,以一第二CPU执行绪处理该同步指令。
9.如权利要求8所述的用于多核心计算机系统中驱动程序的支持多执行绪指令执行的方法,其中该同步指令为下列中的至少之一在窗口操作系统环境中的DDLock、DDUnlock、DDCreateSurface、DDDestroySurface、DDCreateSurfaceEx、CreateD3Dbuffer、DestroyD3Dbuffer、LockD3Dbuffer、UnlockD3Dbuffer、DDMapMemory、及查询读取。
10.如权利要求8所述的用于多核心计算机系统中驱动程序的支持多执行绪指令执行的方法,其中该异步指令为下列中的至少之一在窗口操作系统环境中的D3DrawPrimitives2、查询产生、查询消灭、查询传送。
11.如权利要求8所述的用于多核心计算机系统中驱动程序的支持多执行绪指令执行的方法,其中该复制资源包含系统存储资源、使用者存储缓冲区,其包含被一绘图指令使用的数据。
12.如权利要求8所述的用于多核心计算机系统中驱动程序的支持多执行绪指令执行的方法,还包含在该资源从该第一CPU执行绪释放之后,管理该复制的资源。
13.如权利要求12所述的用于多核心计算机系统中驱动程序的支持多执行绪指令执行的方法,其中该管理步骤还包含就该第一CPU执行绪将该复制资源转移到一再生缓冲区;及释放该复制资源;以及就该第二CPU执行绪将该资源复制到该缓冲区;及确认是否该复制资源由该第一CPU执行绪释放;及若该资源由该第一CPU执行绪释放,取回该缓冲区。
14.如权利要求8所述的用于多核心计算机系统中驱动程序的支持多执行绪指令执行的方法,其中该暂存步骤进一步包含暂存查询产生、查询消灭、查询传送指令及其对应的事件标签。
15.如权利要求8所述的用于多核心计算机系统中驱动程序的支持多执行绪指令执行的方法,还包含当储存于该缓冲区中的该异步指令已由该第一CPU执行绪处理后,释放该缓冲区。
16.一种用于多核心计算机系统中驱动程序的支持多执行绪指令执行的方法,其包括将异步指令和同步指令分开;将该异步指令暂存于一缓冲区,其中该暂存步骤还包含将预期由该装置驱动程序接口(DDI)回复改变的至少一顶点缓冲区复制到一驱动程序分配存储器,并修改对应于该复制的顶点缓冲区的的指令指针以指向该驱动程序分配存储器,并确认错误及指令状态;以第一CPU执行绪从该缓冲区处理该异步指令,以一第二CPU执行绪处理该同步指令。
17.如权利要求16所述的用于多核心计算机系统中驱动程序的支持多执行绪指令执行的方法,其中该同步指令为下列中的至少之一在窗口操作系统环境中的DDLock、DDUnlock、DDCreateSurface、DDDestroySurface、DDCreateSurfaceEx、CreateD3Dbuffer、DestroyD3Dbuffer、LockD3Dbuffer、UnlockD3Dbuffer、DDMapMemory、及查询读取。
18.如权利要求16所述的用于多核心计算机系统中驱动程序的支持多执行绪指令执行的方法,其中该异步指令为下列中的至少之一在窗口操作系统环境中的D3DrawPrimitives2、查询产生、查询消灭、查询传送。
19.如权利要求16所述的用于多核心计算机系统中驱动程序的支持多执行绪指令执行的方法,其中该复制资源包含系统存储资源、使用者存储缓冲区,其包含被一绘图指令使用的数据。
20.如权利要求16所述的用于多核心计算机系统中驱动程序的支持多执行绪指令执行的方法,还包含在该资源从该第一CPU执行绪释放之后,管理该复制的资源。
21.如权利要求20所述的用于多核心计算机系统中驱动程序的支持多执行绪指令执行的方法,其中该管理步骤还包含就该第一CPU执行绪将该复制资源转移到一再生缓冲区;及释放该复制资源;以及就该第二CPU执行绪将该资源复制到该缓冲区;及确认是否该复制资源由该第一CPU执行绪释放;及若该资源由该第一CPU执行绪释放,取回该缓冲区。
22.如权利要求16所述的用于多核心计算机系统中驱动程序的支持多执行绪指令执行的方法,其中该暂存步骤进一步包含暂存查询产生、查询消灭、查询传送指令及其对应的事件标签。
23.如权利要求16所述的用于多核心计算机系统中驱动程序的支持多执行绪指令执行的方法,其中该确认步骤进一步包含确认执行状态及文本阶段状态;将该执行状态及文本阶段状态写回一装置驱动程序接口定义的缓冲区;以及若发现一错误,则返回一操作系统。
24.如权利要求16所述的用于多核心计算机系统中驱动程序的支持多执行绪指令执行的方法,还包含当储存于该缓冲区中的该异步指令已由该第一CPU执行绪处理后,释放该缓冲区。
全文摘要
本发明披露了一种用于多核心计算机系统中驱动程序的支持多执行绪指令执行的方法,该方法包括将异步指令和同步指令分开,将该异步指令暂存于一缓冲区,直接在一CPU驱动程序执行绪处理该同步指令,以一个或多个CPU工作执行绪从该缓冲区处理该异步指令,其中该多核心计算机系统的多个执行绪可以同时使用,并当该CPU工作执行绪处理该缓冲区之后,管理该缓冲区,其中该指令的执行对应用软件就如同单一执行绪一般。
文档编号G06F9/46GK101025695SQ20061013594
公开日2007年8月29日 申请日期2006年10月17日 优先权日2005年10月17日
发明者张国峰 申请人:威盛电子股份有限公司