指令解析器以及图形处理单元及其方法

文档序号:6562106阅读:133来源:国知局
专利名称:指令解析器以及图形处理单元及其方法
技术领域
本发明涉及一种图形处理,特别涉及一种系统及方法,适用于图形处理单元的输入指令流调度。
背景技术
现今的计算机系统一般具有多个处理器。举例来说,图形处理单元(graphic processing unit,GPU)就是除了主要处理器(例如,中央处理单元,CPU)以外的一种共处理器(coprocessor)例子,依据其设计而执行专门的处理工作。在执行这些工作时,图形处理单元不拘束中央处理单元以执行其它工作。在一些情况下,共处理器,例如图形处理单元,实际上与中央处理单元(可以是微处理器)一起配置在计算机系统的主机板上。然而,在其它的应用中,所属技术领域的普通技术人员已知,图形处理单元及/或其它共处理装置可配置在独立但电性耦接的处理卡上,例如,在图形处理单元的情况下则为图形卡(graphic card)。
例如为图形处理单元的共处理器可经常存取补增的存储,例如图像存储,以执行其处理工作。共处理器一般被配置且最佳化,以执行专门的工作。在图形处理单元的例子中,此装置可被最佳化以执行三维图形计算来支持具有加强图形的应用。虽然当进行单一图形加强应用时,公知计算机系统与共处理器可有效地执行时,但在欲企图一次执行多个图形加强应用的情况下,此计算机系统与共处理器仍会遭遇到困难。
对于传统的共处理器而言,以效能差的方法来安排其处理工作量并非不寻常的。在一些操作系统中,利用使操作符合图形处理单元的方法,并以连续形式来多重任务处理图形处理单元,以使图形处理单元依照其接收的顺序来执行操作。此方法的一难题是,当具有相异优先权的许多应用处理相同的资源时,其无法充分地安排。在此非限制的例子中,正在控制图形处理单元共处理器的资源的第一应用,需要让出控制给其它应用以完成其共处理的目的。假使第一应用没有让出控制给其它等待的应用,图形处理单元实际上无法挪作他用,使得当图形处理单元完成处理与第一应用相关的计算时,等待的应用遇到阻碍。如上所述,在单一图形加强应用被驱动时,其可能不是显著的阻碍,然而,当多个应用在同时间企图使用图形处理单元或共处理器时,约束图形处理单元或其它共处理器的资源的问题则变成更加凸显。
分配在各操作间的处理的概念已应付了任务(context)由一工作切换至另一工作的可打断图形处理单元的概念。更特别的是,任务储存/复原的概念,已被现代中央处理单元所利用,且此现代中央处理单元操作来储存相关缓存器的任务以及安排计数器数据以能更重新开始中断的处理工作。虽然在利用多个操作的复杂安排的中央处理单元中,已应付了分配在各操作间的处理问题,但共处理器的安排仍无法充分地被应付。
此失败的至少一个理由是有关于共处理器(例如图形处理单元)一般被视为一资源,以自中央处理单元转移沉重计算与时间消耗,使得中央处理单元能处理其它功能。已知图形操作可包括计算沉重的操作,且因此利用有效的处理能力。当图形应用的复杂度增加时,图形处理单元已变成更佳精密以操作强大的计算以及表现活动力。
具有并列功能单元与无顺序的超纯量及EPIC型的中央处理单元的复杂架构已在中央处理单元内引起了精确阻碍问题,其中,在中央处理单元中,架构缓存器重新任命,且数个指令在相异的处理管线(pipeline)阶上同时执行。为了提供精确阻碍的可能性,超纯量中央处理单元在处理管线已装备了一重新安排缓冲区以及指令交付的额外单元阶。
现在的图形处理单元形式使用不同类型的指令,其可归类为宏指令(macroinstruction)。每一图形处理单元指令的执行花费由数百到数千个周期。与中央处理单元比较起来,使用于现今图形处理应用的图形处理单元管线变成非常的深厚。因此,在任何情况下,大多图形处理单元配置来控制大量数据,此复杂化了企图分配图形处理单元处理的工作,如同在储存或恢复的操作下,图形处理单元没有足够的机制来控制此大量的数据。此外,当图形处理单元包含具有相关的长序列数据的外部指令(例如”绘制基本图形(drawpromitive)”的非限制例子),则存在了如何在此情况下完成中断事件的问题。
由于此中断事件,图形处理单元的组件期望运作以便快速地改变处理操作。然而,传统图形处理单元处理管线也将由指令一个一个地传送至图形处理单元导线的软件驱动器所控制,因此,在操作被中断或以其它方式脱序处理的情况下,导致效能差且较慢的运作。更特别的是,图形处理单元驱动软件可能往往被供应来将关于图形处理单元的注释写入至内存,且关于图形处理单元的注释接着以指令的方式而被采用至图形处理单元的数据流处理组件。在必须将此指令一个接一个地传送,在要求中断事件但仅配置在导线上以等待其机会的情况下,序列数据流将限制配置在图形处理单元上。因此,由于这些必须等待直到指令在规定的顺序下被处理的限制类型,图形处理单元的解析组件无法像以其它方法一样有效地操作。
因此,存在着直到目前为止无法满足的需求,以克服这些不足以及上述缺点。

发明内容
图形处理单元(graphic processing unit,GPU)具有指令解析器,用以安排所接收的执行,且包括耦接一调度器的一第一输入端。第一指令解析器输入端用来传递多个总线接口指令至指令解析器以作执行。第二指令解析器输入端耦接图形处理单元的一控制器,用以接收来自该调度器且与一新的或先前部分执行的环状缓冲区相关的多个环状缓冲区指令。第三指令解析器输入端耦接图形处理单元的一指令直接内存存取(direct memory access,DMA)组件,用以接收来自控制器的多个直接内存存取指令,其中,直接内存存取指令包含于该新的或先前部分执行的环状缓冲区,且直接内存存取指令被传送至指令解析器以作执行。指令解析器通过一或多个输出端,传送对应接收于第一、第二、及第三指令解析器输入端中的指令的数据。
关于由第一指令解析器输入端所接收的指令,例如总线接口指令,指令解析器传送同步指令至一或多个关于二维处理的处理方块,例如所属技术领域中普通技术人员所知的图形管线。当总线接口指令通过第一输入端而由指令解析器所接收时,指令解析器也传送同步指令至一或多个关于三维处理的处理方块。在此作法下,指令解析器确保相关对象的二维与三维组件的处理在图形处理单元中是同步的。
由第二指令解析器输入端所接收的指令是关于新的或先前部分执行的指令与指针的环状缓冲区。假使环状缓冲器为尚未先前部分执行的新环状缓冲区,指令解析器则传送环状缓冲区头指针代符至图形处理单元中一或多个处理单元,以作与环状缓冲区相关的数据的执行。但是假使环状缓冲区已于先前部分执行,表示其先前被中断,指令解析器在一精确点回复指令解析,其中,于该精确点,根据来自控制器且由第二指令解析器输入端所接收的偏移值来解析先前中断指令。在任一例子中,指令解析器将与环状缓冲取相关的数据传出,直到所有指令被解析。
关于由第三指令解析器输入端所接收的指令,指令解析器开始实施一顺序以同步在图形处理单元图形管线中接收的直接内存存取指令。假使直接内存存取来自新的环状缓冲区,指令解析器通过图形管线传送代符,以开始实施与接收的直接内存存取指令相关的第一绘图指令。指令解析器持续环状缓冲区的指令解析,直到所有数据已被传出。
然而,假使包含所接收的直接内存存取指令的环状缓冲区为先前部分执行的,于一精确点恢复指令解析器的处理,其中,于该精确点上,所接收的直接内存存取指令于先前被中断。此精确点对应来自直接内存存取指令组件且由第二指令解析器输入端所传递的偏移值。在恢复处理后,指令解析器持续传出数据,直到环状缓冲器的执行完成。
本发明提供一种指令解析器,适用于图形处理单元,其包括第一输入端、第二输入端、第三输入端以及多个输出端。第一输入端耦接调度器,为了指令解析器的执行而传递多个总线接口指令。第二输入端耦接控制器,其中根据调度器接收的新的或先前部分执行的指令与指针任务,控制器接收来自调度器的环状缓冲区指令,且指令解析器执行与新的或先前部分执行的指令与指针任务相关的多个指令。第三输入端耦接指令直接内存存取组件,其中,指令直接内存存取组件接收来自控制器且包含于新的或先前部分执行的指令与指针任务的多个直接内存存取指令,并传送直接内存存取指令以及与直接内存存取指令相关的指针至该指令解析器。指令解析器根据接收于第一、第二、及第三输入端中之一者或多者的指令,传送数据。
本发明更提供一种方法,适用于图形处理单元的指令解析器,以安排接收的多个指令的执行,包括以下步骤自指令解析器的第一输入端接收总线接口指令,其中第一输入端耦接调度器;自指令解析器的第二输入端接收环状缓冲区指令,其中第二输入端耦接控制器,环状缓冲区指令与新的或先前部分执行的指令与指针任务相关,且新的或先前部分执行的指令与指针任务的指令被解析;自指令解析器的第三输入端接收直接内存存取指令,第三输入端耦接指令直接内存存取组件,其中,直接内存存取指令对应该新的或先前部分执行的指令与指针任务;以及将与由第一、第二、及第三输入端中之一者或多者所接收的数据相关的输出数据输出。
本发明又提供一种图形处理单元,其包括指令解析器、调度器、环状缓冲区控制器、以及指令直接内存存取组件。指令解析器具有至少一第一、第二、及第三输入端以及至少一输出端,其中,根据由第一、第二、及第三输入端之一者所接收的多个指令,指令解析器输出数据。调度器耦接指令解析器的第一输入端,用以为了指令解析器的执行而传送多个总线指令。环状缓冲区控制器耦接指令解析器的第二输入端,且根据新的或先前部分执行的指令与指针任务的该调度器的接收,接收来自调度器的环状缓冲区指令,其中,指令解析器执行与新的或先前部分执行的指令与指针任务相关的多个指令。指令直接内存存取组件通过第三输入端耦接指令解析器以及耦接环状缓冲区控制器,指令直接内存存取组件接收来自环状缓冲区控制器的多个直接内存存取指令,且传送直接内存存取指令以及与直接内存存取指令相关的指针至指令解析器,其中,直接内存存取指令包含于新的或先前部分执行的指令与指针任务。
为使本发明的上述目的、特征和优点能更明显易懂,下文特举一较佳实施例,并配合附图,作详细说明如下。


图1表示根据非限制的例子的计算机装置,于其中实施图形处理单元的任务切换。
图2说明图1的环状缓冲区的最初架构,且此环状缓冲区存在于用来中断环状缓冲区处理的第一储存/恢复操作之前。
图3表示在储存/恢复任务操作已实施后的环状缓冲区示意图,其在一精确断点由图1的图形处理单元所执行。
图4表示包含图2或3中由图1所执行的一环状缓冲区的多个操作列表。
图5表示图1中图形处理单元的选择组件。
图6表示由图5的指令解析器所执行且配置为执行逻辑的步骤流程图。
图7表示在处理环状缓冲区中运作列表指令的情况下,由图5的指令解析器所执行且配置为执行逻辑的步骤流程图。
图8表示由图5的指令解析器所执行且配置为执行逻辑的步骤流程图。
图9表示由图5的指令解析器所执行且配置为执行逻辑的步骤流程图。
图10表示图5的解析器,其叙述在9图6至中可执行逻辑的硬件配置的非限制例子。
附图标记说明10~计算机系统;12~计算机;16~处理单元;18~系统内存;21~系统总线;24~ROM;26~RAM;27~BIOS;29~操作系统;31~应用程序;33~其它程序模块;35~程序数据;41~硬盘机;51~磁盘驱动器;52~磁盘;55~光驱;56~光盘;60~使用者输入接口;61~点选装置;62~键盘;70~网络接口;71~LAN;72~调制解调器;73~WAN;80~远程计算机;81~存储储存装置;82~图形接口;84~图形处理单元;86~图像内存;85~远程应用程序;90~图像接口;91~监视器;95~输出外围接口;96~打印机;97~扬声器;105~环状缓冲区;107~头指标;109~尾指标;111~直接内存存取指令;113~直接内存存取指针;114~直接内存存取缓冲区;115~直接内存存取指令;117~直接内存存取指针;118~直接内存存取缓冲区;121~略过双字符;122~无效位置;126~环状缓冲区;128~恢复指令;130~任务储存地址;132~状态任务储存缓冲区;135~直接内存存取偏移;1~环状缓冲区;142~偶数运作列表;146~直接内存存取指针;148~直接内存存取缓冲区;150~指令解析器;152~总线接口单元;155~调度组件;158~整体CSP缓存器;160~环状缓冲区控制器;162、164、168~路径;170~指令直接内存存取组件;175~内存存取控制器;178~图形管线;300~硬件配置;310~启动逻辑;320~环状缓冲区/直接内存存取指令判断逻辑;331~新的或先前-部分执行的指令判断逻辑;332~环状缓冲区头指针代符传送逻辑;341~同步逻辑;342~代符传送逻辑;343~指令解析恢复逻辑;351~同步指令发布逻辑;360~解析逻辑;具体实施方式
一种图形处理,包括就整体看来与被执行的部分处理相关的任务或操作。如此所述,任务可代表在图形处理单元(graphicprocessing unit,GPU)上处理的最后执行(或初始执行)的时间上图形处理单元的所有状态。此状态可包括由一任务至一不同任务的最后切换(如图形处理单元所执行的相异处理的非限制例子)的时间下的状态暂存、高速缓存与内存内容、所有任务先进先出(firstin first out)、内部暂存等等。
尽管当任务切换时去储存图形处理单元的整体状态并不实际,由于切换允许在1至3毫秒间发生,此整体状态也不被需要。在此期间,图形处理单元可配置来专心致志于一些处理级别,以最小化所储存的状态总量。
图1表示非限制的例子的计算机装置,于其中实施图形处理单元的任务切换(context switch)。图1及接下来的说明准备来提供与此揭露有关的适当计算机环境的简明大体叙述。然而,可以了解的是,手提式、携带式、或其它计算机装置以及所有种类的计算机物体也可利用于与此揭露的结合。因此,虽然在此叙述一般用途计算机,但其为非限制例子,且此揭露可实施于多个额外的应用,如所属技术领域中普通技术人员所知。
图1的计算机系统10包括计算机12。计算机12的组件包括处理单元16、系统内存18、以及系统总线21,其中,系统总线21将各种系统组件(包括系统内存18)耦接至处理单元16。如所属技术领域中普通技术人员所知,系统总线21可以为多种总线架构的任一者,包括内存总线或内存控制器、周边总线、以及使用多种总线架构的任一者的本地总线。如非限制例子,此架构包括周边零件连接(peripheral component interconnect,PCI)总线、绘图加速连接端口(accelerated graphic port,AGP)、及/或PCI Express总线。
计算机12包括多种计算机可读媒体。计算机可读媒体可以是任何有效的媒体,其可由计算机12来存取且包括易失性及非易失性内存(可以是可移除或不可移除内存)。
系统内存18包括易失性及/或非易失性内存形式的计算机储存媒体,例如,只读存储器(read only memory,ROM)24、以及随机存取存储器(random access memory,RAM)26。基本输出入系统(basic input/output system,BIOS)27储存在ROM 24中。如非限制的例子,操作系统29、应用程序31、其它程序模块33、以及程序数据35可包含在RAM 26中。
计算机12也包括其它可移除/不可移除-易失性/非易失性计算机储存媒体。如非限制的例子,硬盘机41可读取自或写入至不可移除-非易失性磁性媒体。磁盘驱动器51可读取自或写入至可移除-非易失性磁盘52。光驱55可自读取自或写入至光盘56。
使用者通过输入装置,例如键盘62及点选装置61,将指令及信息输入至计算机12。这些装置如所属技术领域中普通技术人员所知,为非限制的例子。然而,键盘62及点选装置61通过使用者输入接口60耦接至处理单元16,其中,使用者输入接口60耦接至系统总线21。然而,所属技术领域中普通技术人员可知,其它接口及总线架构,例如并联端口、游戏埠、或通用串行总线(USB)也可利用来将这些装置耦接至计算机12。
一或多个图形处理单元84与图形接口82连结,且图形接口82更耦接系统总线21。如非限制例子,图形处理单元84包括芯片整合存储储存器,例如暂存储存器及高速缓存。当有所要求时,图形处理单元84也可与图像内存86连结。然而,图形处理单元84是共处理器的非限制例子,因此多种共处理装置包含于计算机12。
监视器91或其它类型的显示装置也可通过图像接口90而耦接系统总线21,其中,图像接口90也与图像内存86连结。除了监视器91外,计算机系统10也包括其它周边输出装置,例如通过输出外围接口95而耦接的打印机96及扬声器97。
计算机12通过使用逻辑连接至一或多个远程计算机(例如远程计算机80)而操作在网络或分散环境下。远程计算机80可以为个人计算机、服务器、路由器、网络PC、或其它一般网络节点。虽然图1只说明存储储存装置81及远程应用程序85,远程计算机80也可包括关于计算机12的上述许多或全部组件。图1的逻辑连接包括局域网(local area network,LAN)71以及广域网(wide areanetwork,WAN)73,但如所属技术领域中普通技术人员所知,也可包括其它网络/总线。
在图1的非限制例子中,远程计算机80通过LAN连接器71以及网络接口70而耦接至计算机12。同样地,调制解调器72可使用来将计算机12(通过使用者输入接口60)跨越WAN 73而耦接至远程计算机80。
如上所述,在另一任务或操作的处理期间,图形处理单元84用来切换处理或任务。在此情况下,图形处理单元84则配置来储存中断的任务,且开始实施另一任务的处理,其中,此另一任务本身已事先中断并储存。
图形处理单元84可配置来支持属于相同任务的多个图形处理单元程序(指令)的连续执行,其中,此相同任务也具有”环状缓冲区(ring buffer)”的名称,其包括处理器功能以及在内存的指令直接内存存取(direct memory access,DMA)缓冲区指标。根据中断指令的接收或根据达到环状缓冲区的终点,图形处理单元84由一任务切换至另一任务。在中断指令的例子中,图形处理单元84储存状态任务,使得能在储存的精确点的时间下继续接续任务的执行。
图2说明环状缓冲区105的最初架构,且环状缓冲区105存在于用来中断环状缓冲区处理的第一储存/恢复操作之前。如上所述,环状缓冲区(例如环状缓冲区105)包括与任务执行相关的一串指令及内存指针,将于下文详细叙述。环状缓冲区105包括头指标107以及尾指标109。头指标107包括与环状缓冲区105的处理指令与指针的逻辑位置相关的数据,尾指针109储存对应环状缓冲区105的逻辑终点的数据。当更多指令加入至任务时,在任务执行期间尾指针109被更新。
在图2的非限制例子中,环状缓冲区105也包括直接内存存取内存指令111以及相关的直接内存存取指针113,其中,直接内存存取指针113用来指示直接内存存取缓冲区114。直接内存存取缓冲区114包括与环状缓冲区的任务相关的指令与数据,例如,绘图指令(draw command)、原始图形(primitive)、情况(instance)、以及标题等等。此外,环状缓冲区105可包括额外的直接内存存取指令(如直接内存存取指令115)以及相关的直接内存存取指针(例如直接内存存取指针117),其中,直接内存存取指针117用来指示具有指令与数据的直接内存存取缓冲区,例如直接内存存取缓冲区118。图2的环状缓冲区105也包括位置置放处(place holder)121及122,在非限制的例子中,为一略过双字符(double word,DWORD)121及无效位置(null position)122,以在储存/恢复操作后分别保留任务储存指令与地址指针的位置,如下所示。
在应用中,当图形处理单元84执行环状缓冲区105时,图形处理单元84接收头指针107与尾指标109,并确认储存的任务。在非限制的例子中,作为一略过双字符的位置置放处121导致图形处理单元84略过或忽略无效位置122,且前进至作为直接内存存取指令111的下一指令。在此情况下,环状缓冲区105于此时间点上不会被中断,且除此之外,图形处理单元84继续执行图2中环状缓冲区105的指令及指示,且也执行直接内存存取缓冲区114及118的内容,例如绘图指令、原始图形、情况、以及标题等等。
图3是表示在储存/恢复任务操作已实施后的环状缓冲区126示意图。在此非限制的例子中,图2的环状缓冲区105的位置置放处121及122被恢复指令128与任务储存地址130所取代。任务储存地址130指出了状态任务储存缓冲区132,且此状态任务储存缓冲区132包括关于一先前并部分处理任务的信息。
当图形处理单元84处理图3的环状缓冲区126时,根据辨识恢复指令128,图形处理单元84确认了来自状态任务储存缓冲区132而应撷取的先前运作状态任务的任务储存地址130。来自状态任务储存缓冲区132而被撷取的数据也提供直接内存存取偏移135给直接内存存取缓冲区114,使得在精确的中断时间点上可恢复处理。
图形处理单元84可用来执行安排于环状缓冲区运作列表的一系列连续的环状缓冲区。如非限制的例子,运作列表包含关于不同任务的多个环状缓冲区,其中,当一进行环状缓冲区完成执行及/或被中断时,执行这些不同任务。
图4表示图形处理单元84执行的多个操作列表,其包含多个任务,每一任务具有自己的环状缓冲区,例如,图2及3分别表示环状缓冲区105或126。如图4所示,图形处理单元84交替两运作列表的执行,在非限制的例子中,包括奇数运作列表及偶数运作列表。每一运作列表包含四个别的任务,包括任务0、任务1、任务2、及任务3。如上所述,在每一运作列表的任务0至3指示由图形处理单元84所执行的个别环状缓冲区。
在图4的非限制例子中,环状缓冲区1涉及偶数运作列表142的任务1。在此例子中,环状缓冲区1包括各种图形处理单元指令及/或具有直接内存存取缓冲区指针的直接内存存取指令,如关于环状缓冲区105及126的叙述。
如图4所示,图形处理单元84接收运作列表指令,且之后填满任务基址位置0至3,以便建立执行的运作列表。不论是奇数运作列表或是偶数运作列表,图形处理单元84之后开始于被执行的运作列表的任务0。
在此非限制的例子中,图形处理单元84已完成任务0且移至下一任务,即偶数运作列表142的任务1。在执行环状缓冲1(关于任务1)下,图形处理单元84存取直接内存存取指针146,导致直接内存存取缓冲区148被存取。直接内存存取缓冲区148包括绘图指令0及绘图指令1,其是当头指针到达直接内存存取指针146时而取得。当头指针沿着环状缓冲1逻辑上由左向右移动时,其将到达在直接内存存取指针146以前的略过指令或恢复指令。在图4的非限制例子中,恢复指令的缺少导致图形处理单元84启动直接内存存取缓冲区取得(DMA buffer fetch),其引起了存取直接内存存取缓冲区148,并引起了与包含在缓冲区及/或缓冲区所涉及的数据相关的图形处理,例如绘图指令0及1。
此技术领域的普通技术人员可得知图形处理单元84由图形驱动器软件所控制,且此图形驱动器软件传送指令至图形处理单元84以执行某数据。因此,图5是表示图形处理单元84的示意图,其具有一些图1的图形处理单元84的组件。由图形驱动器软件所传送的指令由总线接口单元(bus interface unit,BIU)152所接收。这些指令被解析,或者由指令解析器(parser)150来处理,其中,这里的指令解析器150视为控制器。因此,如上所述,总线接口单元152可将来自图形驱动器软件而接收的指令发送至指令解析器150以作执行及处理。然而,发送至总线接口单元152及指令解析器150的不同类型指令具有使用不同的处理操作以及在不同时间点上被处理的不同类型。然而,假使总线接口单元152通过单一连接路径耦接至指令解析器150,由图形处理器软件在总线接口单元152所接收的指令则以一个接一个的方式被传送至指令解析器150,藉此导致较慢且无效率的操作。
然而,如此处所述及图5所示,图形处理单元84包括调度组件155,用以安排总线接口单元指令运作列表。如上所述,指令列表可包括多个环状缓冲区。因此,调度组件155(可参照为调度器)接收来自总线接口单元152的指令,且之后根据由图形驱动器软件所接收的指令类型来安排运作列表的执行。
因此,当总线接口单元152接收指令时,这些指令可发送至调度组件155以安排操作。根据指令类型,可设定整体指令流处理器(command stream processor,CSP)缓存器158。假使指令有关于特定运作列表时,启动指令(kickoff command)传送至环状缓冲区控制器160,其中,环状缓冲区控制器160被配置来控制环状缓冲区的执行。
在图5非限制例子中,指令解析器150具有三个独立的输入端,用以根据由指令解析器150所执行及处理的指令类型,来将输入信息传送至指令解析器150。如前所述,当环状缓冲区控制器160通过启动指令路径168来接收执行的运作列表时,随后的指令则通过路径162传送至指令解析器150。根据在路径162上信息的接收,指令解析器150执行连续的指定步骤,以下将有更多的详细说明。
对于总线接口单元操作而言,例如图形处理单元84的同步处理组件,调度组件155沿着路径164传送指令至指令解析器150。同样地根据连续的指定步骤,之后执行这些总线接口单元指令,如下所述。
最后,如前关于环状缓冲器105及126的叙述,包含于特定环状缓冲器的直接内存存取指令由环状缓冲区控制器160传送至指令直接内存存取取得/任务传送执行组件170(也称为指令直接内存存取组件),指令直接内存存取组件170与内存存取控制器(memoryaccess controller,MAC)175接合,以自内存86取得特定直接内存存取缓冲区,例如直接内存存取缓冲区114。根据直接内存存取指令与相关数据的接收,指令直接内存存取组件170通过路径166将信息与相关数据传送至指令解析器150。因此,指令解析器150具有三个独立数据路径输入,包括路径162、164、及166,由此避免如前所述一个接一个的连续执行处理。
指令解析器150配置来产生连续指令,且在其它方面可处理由路径162、164、及166所接收的指令。在实行中,指令解析器150控制图形管线(graphic pipeline)178剩余部分的操作,其中,如此领域所属技术领域中普通技术人员所知,图形管线178包含一或多个架构处理方块,包括三角形设置单元(triangle setup unit,TSU)、属性设置(attribute setup)等等。
如前所述,指令解析器150用来处理关于运作列表所包含的环状缓冲区的多种指令。通过独立的输入路径162、164、及166,环状缓冲指令、直接内存存取指令、以及总线接口单元指令都传送至指令解析器150,以控制图形管线178剩余部分的操作。
图6是表示在接收来自图5中图形处理单元84的组件的不同类型指令的情况下,指令解析器150所执行且配置为执行逻辑的连续步骤流程图180。所属技术领域中普通技术人员会快速地察知此逻辑包括编制程序,且此编制程序根据预设的主张及目标来产生步骤的型态引导期望的使用,如此处所包含者及讨论者。因此,所属技术领域中普通技术人员可知图6至9的步骤可配置为在硬件、软件、固件等等中的启动逻辑电路(kickoff logic)、解析逻辑电路(parsing logic)、传送逻辑电路(forwarding logic)等等。
因此,在步骤182中,指令解析器150处于初始闲置状态。然而,当图形驱动器软件传送指令至总线接口单元152,且之后指令传送至调度组件155以作安排时,指令解析器150之后很快地通过路径162、164、或166来接收信息。当指令解析器150为闲置时,指令解析器150连续地检查以察看环状缓冲区启动信号(可为不连续的信号)是否已接收。
特别的是,当运作列表指令由总线接口单元152所接收时,调度组件155启动环状缓冲区。在非限制的例子中,调度组件155实际上支持四个环状缓冲区,如图4所示。因此调度组件155启动环状缓冲区控制器160四次,一次相对于运作列表中的一环状缓冲区。同样地,通过在路径164上传送信息至指令解析器150,调度组件155导致指令解析器150切换至来自环状缓冲控制器160且通过路径162而接收的指令的解析。
假使启动信号没有来自调度组件155而被接收,指令解析器150之后判断总线接口单元指令是否已通过路径164而接收,例如关于具有执行单元共同方块(execution unit pool block)的连续图形管线的指令,且执行单元共同方块在不同数据的2D与3D执行间交替。假使这些指令中没有任何一个已由指令解析器150所接收,指令解析器150维持闲置,即为步骤182。
然而,假使总线接口单元152接收来自关于图1的计算机的图形驱动器软件的指令,此指令传送至调度组件155,其之后操作来设定整体CSP缓存器158的缓存器。被处理的环状缓冲区通过路径168而连接环状缓冲区控制器160。环状缓冲区至环状缓冲区控制器160的连接对应图6的步骤189,于步骤189中,获得此环状缓冲区以进一步处理。在图6的步骤192中,指令解析器150判断图4的头指标现在使否指示环状缓冲区指令或直接内存存取指令。
如上所述,在头指标正指示一环状缓冲区指令的情况下,环状缓冲区控制器160撷取此环状缓冲区指令,其可包括同步指令、指定缓存器指令、及/或绘图指令,都通过路径162传送至指令解析器150。在此情况下,指令解析器150根据方块194(将于图7作讨论)来处理环状缓冲区指令。
假使头指针指示直接内存存取指令(例如图2的直接内存存取指令111),则发生不同的连续操作。特别的是,环状缓冲区控制器160将相关的直接内存存取指针(例如图2的直接内存存取指针113)由环状缓冲区控制器160传送至指令直接内存存取组件170。指令直接内存存取组件170之后通过内存存取控制器175来撷取直接内存存取缓冲区(例如直接内存存取缓冲区114)的数据或相关数据,其中,内存存取控制器175配置来与图1的内存86接合。在为了与直接内存存取指针113相关连的直接内存存取架构而收集指针的情况下,指令直接内存存取组件170通过路径166将这些直接内存存取指令与收集的指针传送至指令解析器150,此路径166是与将数据由环状缓冲区控制器160传送至指令解析器150分开的输入导线。因此,在此情况下,当直接内存存取指令通过路径166而自指令直接内存存取组件170传送时,指令解析器150开始处理直接内存存取指令,如方块196所示,其将于图8中详述。
在处理方块194中的环状缓冲区指令或方块163的直接内存存取指令后,指令解析器150判断被处理的环状缓冲区的头指标是否已到达图4的尾指标,以表示环状缓冲区的结束。在头指针尚未到达图4的地址标的情况下,指令解析器150由步骤198返回至步骤192,以判断头指标现在是否正指示操作或直接内存存取指令,如前所述。在步骤198中判断环状缓冲区是否完成的结果情况下,头指标已到达环状缓冲区的尾指针,指令解析器150则返回至步骤182且恢复至等待额外指令的闲置状态。
如前所述,除了上述的运作列表以及直接内存存取指令以外,指令解析器150接收总线接口单元指令。在图6中,假使在步骤185中运作列表启动信号还没被接收,指令解析器150判断任何总线接口单元指令是否已被接收。假使总线接口单元指令未被接收,指令解析器150维持在闲置状态,即步骤182。然而,假使指令解析器150已通过路径164接收来自组件155的总线接口单元指令,指令解析器150之后在步骤202中处理此总线接口单元指令,将于图9中详细说明。不过根据总线接口单元指令的完成,指令解析器155返回至步骤182的闲置状态。
因此,根据通过路径162、164、及166而由指令解析器150所接收的输入信息,指令解析器150采取三种不同行动程序中之一者。图7表示处理环状缓冲区中环状缓冲区指令的情况下,由图5的指令解析器150所执行且配置为执行逻辑的连续步骤流程图194。在程序194开始,于步骤204中,指令解析器150判断环状缓冲区是否在包含于图4中直接内存存取缓冲区148的绘图指令的起始处。如前所述,特定环状缓冲区由其起点开始实施,或者在因为一些之后恢复的原因而被中断的先前处理阶段之后,特定环状缓冲区重新开始。因此,在步骤204中,指令解析器150判断环状缓冲区是否为新的环状缓冲区或者为先前且部分处理的环状缓冲区,以便在正确的逻辑点上开始操作。
假使指令解析器150判断出环状缓冲区(例如图2的环状缓冲区105)处于绘图指令的起始处或是环状缓冲区的起点,指令解析器150移动至步骤206,且通过图形管线178来传送环状缓冲区头指标代符(token),以便开始与环状缓冲区105相关的新任务的处理。
在步骤208中,指令解析器150在图2的环状缓冲区105中从事指令解析。之后,在步骤210中,指令解析器150判断在环状缓冲区105中指令的数据长度是否等于零,此对应了数据是否因此而解析。假使是,表示数据等于零,指令解析器150移动至步骤212,以确认指令的完成。如另一方式的陈述,指令解析器150确认在图4中环状缓冲区1的头指标已到达尾指标,因此表示了环状缓冲区的完成。在此情况下,完成了流程图194的环状缓冲区指令处理。
然而,假使在步骤210中关于指令解析的数据长度不等于零,指令解析器150移至步骤214。在步骤214中,指令解析器150将与已处理的指令相关的数据传出至图形管线178的剩余部分以作更进一步处理。重复步骤210及214,直到所有数据被传出,使得与图2的环状缓冲区105相关的指令完全被解析及执行。在此时刻,如图7所示的非限制的例子中,图2的环状缓冲区105的执行将完成。
然而,返回至步骤204,假使指令解析器150判断出环状缓冲区1在较早时间上已事先但部分处理时,指令解析器150恢复在先前终止的环状缓冲区126的指令解析。如步骤216所示,根据环状缓冲区的头指针及尾指针的逻辑位置,指令解析器恢复操作,其提供了头指针通过图形管线178而传送。如前所述,跟随步骤208而进行指令解析。因此,步骤210最终采用指令的数据长度是否等于零的判断,由此表示指令完全被解析。数据重复地被传出至图形管线178的剩余部分,直到步骤210的结果为”是”,由此说明图7中程序194的完成。
假使在图6的步骤192中,指令解析器150判断出来自图5的指令直接内存存取组件170的直接内存存取指令已通过路径166而被接收,指令解析器150接着移至方块196,其步骤将于图8中来说明。特别的是,在图8的步骤222中,指令解析器150等待着通过路径166而接收来自指令直接内存存取组件170的直接内存存取指令。根据接收,在步骤224中,指令解析器150开始实施一个顺序,以同步在图形管线178的剩余部分的直接内存存取指令。
之后,在步骤226中,指令解析器150判断与接收的直接内存存取指令相关的处理是否已开始于在先前的时间上。假如不是,指令解析器150移至步骤232,以便通过开始处理与所接收的直接内存存取指令相关的第一绘图指令的图形管线178的剩余部分来传送代符。特别的是,如图4所示,根据与环状缓冲区相关的直接内存存取指针146的接收,指令解析器150之后通过图形管线178的剩余部分来传送与直接内存存取缓冲区148相关的绘图指令0。在此执行下,指令解析器150之后解析相关的指令,如步骤234所示。如前所述,直到提供给指令的数据链路(data link)的判断的步骤236,完成此程序。特别的是,步骤236视为一个判断,以作来判断已处理的指令的数据链路是否等于零,由此说明解析的完成。假使数据长度不等于零,与指令相关的数据传送至图形管线178的剩余部分,以执行进一步的处理,如步骤242所示。然而,假使由指令解析器150所解析的数据长度等于零且因而完全被解析,指令解析器150的下一步骤为判断步骤238,以判断直接内存存取指令(例如图4的绘图指令0)是否完全处理。假如为否,则发生在步骤234的额外解析。然而,假如为是,已到达处理的终点,且操作返回至图6的流程180。
返回至步骤226,假使指令解析器150判断出依照图6的步骤192的结果且与接收的直接内存存取指令相关的处理已于先前开始实施,指令解析器150移至步骤252,且确认与先前处理的环状缓冲区相关的直接内存存取偏移135。如上所述,环状缓冲区126与事先且已部分处理的一环状缓冲区架构相关连。在此情况下,指令解析器150在步骤252中确认直接内存存取偏移135,以在与直接内存存取偏移135相关的位置恢复处理。因此,在步骤252中,直接内存存取指令解析的恢复根据直接内存存取偏移135,其之后采用指令的数据长度是等于零的判断。此程序叙述于步骤236、238、及242。指令的持续解析(步骤234)将重新开始,直到在此环状缓冲区架构的直接内存存取中所有直接内存存取指令完全处理,由此确认图8流程196的结束。
如图6的步骤187,在总线接口指令被接收且确认的情况下,指令解析器150移动至图9的程序202。关于总线接口指令且由指令解析器260所执行的多个功能之一者,具有执行单元(未显示)的图形管线178的同步化,其中,执行单元系配置来执行三维(threedimensional,3D)应用处理。更特别的是,图形管线178的架构方块系配置来处理二维(two dimensional,2D)图形组件,而图形处理单元84的不同的执行组件(未表示)为了监视器91上的最后显示而配置来处理更复杂的3D对象。因此,程序202根据判断执行单元(关于3D处理)及图形管线178是否彼此脱离同步而开始实施。所属技术领域中普通技术人员会了解不同的处理组件应同步,使得相关的组件被同化,以在接下来的管线中有适当的描绘。因此,图9的步骤262根据总线接口单元的接收且在路径164上由指令解析器150来执行,以便判断图形处理单元84的2D与3D处理组件,例如共同执行单元(execution unit pool,EUP)与三角形设置单元(TSU),是否同步。假使他们同步(或以其它方式来叙述,例如没有脱离同步),此程序结束,且指令解析器150返回至图6的闲置状态182。然而,假使图形处理单元84的2D及3D组件脱离同步,指令解析器150则移动至步骤264,以便发布用来同步执行单元与图形管线178的剩余部分的总线接口单元同步指令。
之后,在步骤266中,总线接口单元指令由指令解析器150来解析。判断步骤268采用,与总线接口单元指令相关的数据长度是否等于零的判断。假使等于零,如果额外总线接口单元指令存在,此程序返回至判断步骤262,以判断对于将追随的下一新指令而言图形处理单元84的2D及3D组件是否脱离同步。但是,假使数据长度不等于零,其指示总线接口单元没有完全解析,指令解析器150移动至步骤270,且将数据传出至图形管线178的剩余部分以执行进一步的处理,如步骤270所示。步骤268及270再次发生,直到数据长度等于零为止。另外,步骤274判断是否有任何剩余的总线接口单元指令为有效而可处理的。假使为否,此程序结束,且凭借于图6的步骤182,于其中指令解析器150为闲置。然而,假使为是,程序202移动回至判断步骤262,以判断与步骤274所判断出的下一总线接口单元指令相关的图形处理单元84的2D与3D处理组件是否脱离同步。
图10表示图5的解析器150,其叙述在第6至9图中可执行逻辑的硬件配置300的非限制例子。更特别的是,如上所述而执行的逻辑步骤,根据图10中的其各自组件而以硬件方式来了解,且所属技术领域中普通技术人员可得知。因此此揭露的观点可实施于软件、硬件、固件等等。然而,当仅描述包括指令解析器150的部分组件时,图10的指令解析器150应可被理解。在非限制的例子中,指令解析器150包括启动逻辑(kickoff logic)310、环状缓冲区/直接内存存取指令判断逻辑320、环状缓冲区控制器160、指令直接内存存取组件170、总线接口单元152、以及解析逻辑电路(parsing logic)360。环状逻辑控制器160包括新的或先前-部分执行的指令判断逻辑电路331以及环状缓冲区头指针代符传送逻辑电路332。指令直接内存存取组件170包括同步逻辑341电路、代符传送逻辑电路342、以及指令解析恢复逻辑电路343。总线接口单元152包括同步指令发布逻辑电路351。
本发明虽以较佳实施例揭露如上,然其并非用以限定本发明的范围,任何所属技术领域中普通技术人员,在不脱离本发明的精神和范围内,应当可做些许的更动与润饰,因此本发明的保护范围应当以后附的权利要求所界定者为准。
权利要求
1.一种指令解析器,适用于一图形处理单元,包括一第一输入端,耦接一调度器,用以为了该指令解析器的执行而传递多个总线接口指令;一第二输入端,耦接一控制器,其中根据该调度器接收的一新的或先前部分执行的指令与指针任务,该控制器接收来自该调度器的一环状缓冲区指令,且该指令解析器执行与该新的或先前部分执行的指令与指针任务相关的多个指令;一第三输入端,耦接一指令直接内存存取组件,其中,该指令直接内存存取组件接收来自该控制器且包含于该新的或先前部分执行的指令与指针任务的多个直接内存存取指令,并传送所述直接内存存取指令以及与所述直接内存存取指令相关的一指针至该指令解析器;以及多个输出端,其中,该指令解析器根据接收于该第一、第二、及第三输入端中的一者或多者的指令,传送数据。
2.如权利要求第1项所述的指令解析器,其中,由该控制器通过该第二输入端而传送至该指令解析器的该环状缓冲区指令,包括关于该新的或先前部分执行的指令与指针任务的多个同步指令、多个指定缓存器指令、及多个绘图指令。
3.如权利要求第1项所述的指令解析器,其中,该指令直接内存存取组件接收取得自该新的或先前部分执行的指令与指针任务的所述直接内存存取指令,并存取一数据指针,且该数据指针对应于通过该第三输入端而传送至该指令解析器的所述直接内存存取指令。
4.如权利要求第1项所述的指令解析器,更包括一启动逻辑电路,维持于一闲置状态,直到一启动指令接收于一预设输入端;以及一解析逻辑,用以解析在该新的或先前部分执行的指令与指针任务且与该启动指令相关的多个指令,直到所有指令的解析被完成或者该新的或先前部分执行的指令与指针任务被中断。
5.如权利要求第1项所述的指令解析器,更包括一环状缓冲区/直接内存存取指令判断逻辑电路,用以判断于该第一、第二、或第三输入端所接收的一信息是否包括该环状缓冲区指令或该直接内存存取指令。
6.如权利要求第1项所述的指令解析器,更包括一新的或的或先前部分执行的指令判断逻辑电路,用以判断该新的或先前部分执行的指令与指针任务为新执行的或先前部分执行的。
7.如权利要求第1项所述的指令解析器,更包括一环状缓冲区头指针代符传送逻辑电路,假使该新的或先前部分执行的指令与指针任务为一新的环状缓冲区,用以将一环状缓冲区头指针代符由该指令解析器的所述输出端中至少一者传送至该图形处理单元的一处理单元以作执行;以及一解析逻辑电路,用以解析与该新的任务相关的指令,直到完成。
8.如权利要求第1项所述的指令解析器,更包括一指令解析恢复逻辑,当该新的或先前部分执行的指令与指针任务为一先前部分执行的任务时,于先前中断的精确点,根据该第二输入端接收来自该控制器的偏移值来恢复指令的解析;以及一解析逻辑,用以解析与该先前部分执行的任务相关的指令,直到完成。
9.如权利要求第1项所述的指令解析器,更包括一同步逻辑电路,当一接收指令直接内存存取组件通过该第三输入端而传送自该指令直接内存存取组件时,用以开始实施在该指令解析器的一顺序,以同步在该图形处理单元的一图形管线的该接收指令直接内存存取组件。
10.如权利要求第1项所述的指令解析器,更包括一代符传送逻辑电路,假使该新的或先前部分执行的指令与指针任务为一新的环状缓冲区,用以通过该指令解析器的所述输出端之一者将一代符传送至一图形管线,以开始实施与接收的该直接内存存取指令相关的一第一绘图指令的处理;以及一解析逻辑电路,用以解析与该新的任务相关的指令,直到完成。
11.如权利要求第1项所述的指令解析器,更包括一同步指令发布逻辑电路,当一总线接口指令通过该第一输入端而被该指令解析器所接收,且二维处理的一处理方块与三维处理的一处理方块异步时,用以发布一同步指令至二维处理的该处理方块与三维处理的该处理方块。
12.如权利要求第11项所述的指令解析器,其中,该总线接口指令被解析,且与该总线接口指令相关的数据传送自该指令解析器的该输出端,直到没有与该总线接口指令相关的数据剩下。
13.一种方法,适用于一图形处理单元的一指令解析器,以安排接收的多个指令的执行,包括自该指令解析器的一第一输入端接收一总线接口指令,其中该第一输入端耦接一调度器;自该指令解析器的一第二输入端接收一环状缓冲区指令,其中该第二输入端耦接一控制器,该环状缓冲区指令与一新的或先前部分执行的指令与指针任务相关,且该新的或先前部分执行的指令与指针任务的一指令被解析;自该指令解析器的一第三输入端接收一直接内存存取指令,该第三输入端耦接一指令直接内存存取组件,其中,该直接内存存取指令对应该新的或先前部分执行的指令与指针任务;以及将与由该第一、第二、及第三输入端中之一者或多者所接收的数据相关的一输出数据输出。
14.如权利要求第13项所述的方法,更包括自该控制器将一些直接内存存取指令与指针传送至该指令直接内存存取组件,其中,所述直接内存存取指令与指针包含于该新的或先前部分执行的指令与指针任务中;以及撷取与一直接内存存取缓冲区相关的数据,其中,该直接内存存取缓冲区参照于所述直接内存存取指令与指针。
15.如权利要求第13项所述的方法,更包括于该控制器撷取来自该新的或先前部分执行的指令与指针任务的一环状缓冲区指令;以及由该第二输入端将来自来控制器的该环状缓冲区指令传送至该指令解析器。
16.如权利要求第13项所述的方法,更包括判断由该第一、第二、及第三输入端所接收的一信息是否包括一环状缓冲指令或一直接内存存取指令。
17.如权利要求第13项所述的方法,更包括判断该新的或先前部分执行的指令与指针任务是否已被先前部分执行;假使该任务判断为新的,于一第一指令上开始实施该新的或先前部分执行的指令与指针任务;以及假使该任务判断为先前部分执行的,于对应一偏移值的一先前断点上,开始实施该新的或先前部分执行的指令与指针任务。
18.如权利要求第13项所述的方法,更包括假使该新的或先前部分执行的指令与指针任务为一新的环状缓冲区,将一环状缓冲区头指针代符由该指令解析器的至少一输出端传送至该图形处理单元的一处理单元以作执行;以及解析与该新的任务相关的指令,直到完成。
19.如权利要求第13项所述的方法,更包括当该新的或先前部分执行的指令与指针任务为一先前部分执行的任务时,于先前被中断的精确点,根据该第二输入端接收来自该控制器的一偏移值来恢复指令的解析;以及解析与该先前部分执行的任务相关的指令,直到完成。
20.如权利要求第13项所述的方法,更包括当一接收指令直接内存存取指令通过该第三输入端而接收自该指令直接内存存取组件时,于该图形处理单源的一图形管线开始实施在该指令解析器的一顺序,以同步接收该指令直接内存存取指令。
21.如权利要求第13项所述的方法,更包括假使该新的或先前部分执行的指令与指针任务为一新的任务,通过该指令解析器的一输出端将一代符传送至该图形处理单元的一图形管线,以开始实施与接收的该直接内存存取指令相关的一第一绘图指令的处理;以及解析与该新的任务相关的指令,直到完成。
22.如权利要求第13项所述的方法,更包括当一总线接口指令通过该第一输入端而被该指令解析器所接收,且二维处理的一处理方块与三维处理的一处理方块异步时,发布一同步指令至二维处理的该处理方块与三维处理的该处理方块。
23.如权利要求第22项所述的方法,其中,该总线接口指令被解析,且与该总线接口指令相关的数据传送自该指令解析器的一输出端,直到没有与该总线接口指令相关的数据剩下。
24.一种图形处理单元,包括一指令解析器,具有至少一第一、第二、及第三输入端以及至少一输出端,其中,根据由该第一、第二、及第三输入端之一者所接收的多个指令,该指令解析器输出数据;一调度器,耦接该指令解析器的该第一输入端,用以为了该指令解析器的执行而传送多个总线指令;一环状缓冲区控制器,耦接该指令解析器的该第二输入端,且根据一新的或先前部分执行的指令与指针任务的该调度器的接收,用以接收来自该调度器的一环状缓冲区指令,其中,该指令解析器执行与该新的或先前部分执行的指令与指针任务相关的多个指令;以及一指令直接内存存取组件,通过该第三输入端耦接该指令解析器以及耦接该环状缓冲区控制器,该指令直接内存存取组件接收来自该环状缓冲区控制器的多个直接内存存取指令,且传送所述直接内存存取指令以及与所述直接内存存取指令相关的一指针至该指令解析器,其中,所述直接内存存取指令包含于该新的或先前部分执行的指令与指针任务。
25.如权利要求第24项所述的图形处理单元,更包括多个处理单元的一管线,耦接该指令解析器的该至少一输出端。
26.如权利要求第24项所述的图形处理单元,更包括一整体指令流处理器缓存器,包含一些配置缓存器,并耦接该调度器。
全文摘要
一种指令解析器,适用于一图形处理单元(graphic processing unit,GPU),以安排所接收的指令的执行且包括耦接调度器的第一输入端。第一指令解析器输入端传递多个总线接口指令至指令解析器以作执行。第二指令解析器输入端耦接控制器,其中,根据一新的或先前部分执行的环状缓冲器或任务,该控制器接收来自该调度器的一环状缓冲区指令,且环状缓冲区指令由指令解析器所执行。第三指令解析器输入端,耦接指令直接内存存取(direct memory access,DMA)组件,其中,指令直接内存存取组件接收来自控制器且包含于该新的或先前部分执行的环状缓冲区的直接内存存取指令,并且直接内存存取指令传送至指令解析器以作执行。指令解析器通过一或多个输出端,传送对应由第一、第二、及第三输入端中之一者或多者所接收的指令的数据。
文档编号G06T1/20GK101034470SQ200610137499
公开日2007年9月12日 申请日期2006年10月26日 优先权日2005年10月26日
发明者黄锡霖, 柏瑞斯·柏克潘克, 约翰·柏拉勒斯 申请人:威盛电子股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1