用于在主机处理器和图形处理器之间优化存储器共享的方法和系统的制作方法

文档序号:6412677阅读:135来源:国知局
专利名称:用于在主机处理器和图形处理器之间优化存储器共享的方法和系统的制作方法
技术领域
本发明涉及计算机图形系统,尤其是涉及优化由CPU(中央处理单元)和图形处理器共享的存储器的使用。
背景技术
在许多已知计算机系统中,主机CPU可以执行需要完成图形操作的应用程序。为了实现上述图形操作,应用程序一般从离线存储器(包括但不局限于网络、CD或硬盘存储设备)中取回初始图形数据和图元(包括但不局限于纹理、几何、模型等),并且在在线系统存储器中建立所述图形数据和图元的拷贝。应用程序可以对在线系统存储器中的图形像素、数据模型和图元进行操作,然后在某一时刻,应用程序可以调用计算机系统的图形处理器对图形数据和图元进行操作,该操作的典型目的是为了从主机CPU中卸载低级绘制(rendering)任务。
根据已知的实施方式,当调用图形处理器的操作时,应用程序将独立于最初从离线存储器中载入到在线系统存储器中的拷贝,为图形处理器建立图形数据和图元的第二拷贝以对其进行操作。这个第二独立拷贝(下文中可以称为“别名”拷贝)一般可以放入到在线系统存储器内可被称为“图形存储器”的区域中,因为该区域被留出供图形处理器使用。图形存储器的各种实现在本领域是公知的。例如,分立内插图形适配器卡可以包含图形存储器,它由卡上的专用存储总线本地连接;这一般被称为“本地视频存储器”。在另一实施例中,在具有公知的英特尔中心体系结构(hub architecture)的芯片组中,指定为加速图形端口(AGP)存储器的系统存储器区域被用作图形存储器。AGP存储器也可以称为“非本地视频存储器”。
图形处理器通常会对位于图形存储器内的图形数据的别名拷贝操作一段时间。典型地,包含图形数据的别名拷贝的图形存储器将在主机CPU的存储器页属性表中被分配给一个未缓存属性,意味着当图形数据位于该由图形处理器进行处理的未缓存的图形存储器区域中时,对该图形数据的应用程序访问将不利用主机CPU的缓存。在非缓存的别名拷贝已经由图形处理器处理了一段时间后,它一般需要返回到应用程序,用于图形数据的进一步处理。然而,根据前述实施方案,应用程序对图形数据在系统存储器内的所述拷贝进行操作。这个系统存储器一般应被分配给一个被缓存属性,以便CPU能以缓存模式执行应用程序的操作。众所周知,CPU的缓存操作使CPU比非缓存操作更有效率。
为了让应用程序在图形处理器之后继续对所述图形数据进行操作,由图形处理器对别名拷贝所做出的变化当然需要反映在系统存储器内由应用程序使用的拷贝中。
应用程序可以按照非缓存模式继续对系统存储器内的拷贝处理一段时间,然后再次把处理转交给图形处理器。自然地,当图形处理器再次接收时,系统存储器内的拷贝的变化也必须反映在图形存储器内的别名拷贝中。应用程序和图形处理器之间的前述互换可以重复许多次。
可以理解前述安排必然伴有缺点。一个缺点在于必须保存同一图形数据的两份拷贝,消耗了宝贵的系统存储器资源。另外,在建立和保存这两份独立的拷贝时消耗了有用的CPU带宽,尤其是通过多个接口之间的总线在这两份拷贝之间传播各自的更新时。
不包括保存前述图形数据拷贝的实施方式是公知的。根据这样的一种实施方式,使可缓存的系统存储器可被图形处理器用作图形存储器,图形处理器以及主机CPU对图形存储器内的数据执行操作。如上所述,图形处理器和主机CPU依次对图形数据进行操作。因为存储器是可缓存的,所以CPU能够以缓存模式操作从而提高效率。
然而,这种方法引入了数据“非一致性”的可能。也就是,因为CPU以缓存模式使用图形存储器,所以已经要求图形处理器对其进行操作的数据可能还未被冲刷(即从缓存中逐出并写出到图形存储器)。更确切地说,数据可能驻留在CPU的内部和L1、L2缓存之间的某一地方,并且还没有实际到达图形存储器。因此,当图形处理器访问图形存储器,试图对所需数据执行操作时,它可能无法找到所需数据的最新版本。相反,图形存储器内的数据可能是“陈旧的”。或者更坏地,就在图形处理器完成了对所述数据位置的访问之后,所述数据可能从缓存中清空,从而使所述操作无效。
为了处理非一致性问题,已经利用了芯片组“侦听周期”。侦听周期包括图形处理器使芯片组在图形处理器被允许访问图形存储器之前,相对于图形存储器在CPU缓存内强制实现一致性。然而,侦听周期伴有需要大量开销的缺点,这降低了系统性能。侦听周期逐个位置地检查存储器数据,如果所需位置的数据还在CPU的缓存内,则将它提取出来并逐个位置地使其一致。上述操作需要大量接口之间的“握手”,并且由于它们必须逐个位置或逐行地进行,所以效率较低。
根据又一实施方式,严格地在非缓存模式下使用图形存储器。在这种方法中,图形存储器内的数据总是保持一致,因为无论何时CPU想要读取数据或把数据写入图形存储器,写入总是直接并立即进入图形存储器,而从不缓存。然而,与这种方法相关的缺点在于无法得到由缓存操作提供的改进CPU性能。
由于前述考虑,需要一种克服现有实施方式缺点的方法和系统。


图1表示CPU和图形处理器之间共享的计算机存储器的可能实施方案;图2表示CPU和图形处理器之间共享的计算机存储器的另一可能实施方案;图3中的状态示了CPU正在使用优化共享(optimally shared)存储器的模式和图形处理器正在使用优化共享存储器的模式之间的转换;图4A和4B表示图形表面和缓冲器的实施例,以及通过表面参数可以描述的表面分区的类型;图5表示图形表面的有界区域内的扫描行;图6表示根据一个实施方案分配优化共享存储器区域的过程的流程图;图7A表示根据图6的实施方案使表面或表面的有界分区一致的过程的流程图;图7B表示根据图6的实施方案在图形表面完成未决的绘制操作并改变表面的缓存属性的流程图;图8表示根据另一实施方案的分配优化共享存储器区域的过程的流程图;图9A表示根据图8的实施方案使表面或表面的有界分区一致的过程的流程图;图9B表示根据图8的实施方案在图形表面完成未决的绘制操作并改变表面的缓存属性的流程图。
具体实施例方式
在根据本发明方法和系统的实施方案中,可以提供优化共享的图形存储器,其具有根据优化共享存储器是由主机CPU使用还是由图形处理器使用而分配的缓存属性。选择分配给优化共享存储器的属性,以便当CPU正在使用优化共享存储器时有利于CPU的性能,而当图形处理器正在使用优化共享存储器时,则有利于图形处理器的性能。
根据这些实施方案,在主机CPU正在使用优化共享存储器的模式和图形处理器正在使用优化共享存储器的模式之间的转换期间,分配给优化共享存储器的缓存属性可以改变。
当CPU正在使用优化共享存储器时分配给它的属性可以是被缓存属性(cachedattribute)。这里,“被缓存属性”意思是为使CPU能以它的内部时钟速度进行操作,前往优化共享存储器的部分数据可以首先传送给CPU的缓存,并且在所述缓存内被处理。当转变为将由图形处理器对优化共享存储器内的数据进行操作的模式时,可以使CPU缓存内的数据一致,分配给优化共享存储器的缓存属性可以变成未缓存属性。这里,“未缓存属性”意思是对于读取和写入操作而言,不从CPU缓存中取数据。相反地,数据通过外部系统存储总线直接流到系统存储器,就像不存在缓存。
在其他实施方案中,可以总是向优化共享存储器分配被缓存属性,但当转变为图形处理器将操作优化共享存储器内的数据的模式时,可以使CPU缓存内的数据一致。进行转换之前实现一致性的好处在于可以避免侦听周期和它们对性能的相关损害,因为图形处理器的直接存储器访问(DMA)可以把优化共享存储器看成好像它已经是一致的。从而避免了从图形控制器执行CPU缓存侦听周期的必要,并且优化共享存储器可被有效地视为好像它一直都是用作未缓存属性。
图1和图2的下面论述描述了如何根据公知技术可以提供“可共享”图形存储器区域。应该理解,下面使用的“可共享”与根据本发明实施方案的“优化共享”不同,如下文中更详细地描述。
图1表示由英特尔公司(Intel Corporation)制造的计算机系统的部件,该计算机系统可以从市场上购买到,并且能够适合于实现本发明的实施方案。图1中所示的模块110图示了“集成图形”系统的部件,其中图形功能集成在整个系统内。更具体地,图形处理器可以集成在芯片组的存储控制器中心(MCH)部分内。
在图1所示的系统内,可以如下提供可共享的图形存储器。图形处理器经由图形处理器单元(GPU)的流水线109可以访问图形处理器页翻译表(GTT)107。GTT 107利用翻译后备缓冲器(TLB)108把系统存储器页102映射在物理地址空间100内的图形口径(aperture)106中。图形口径106的地址高于系统存储器顶部。图形口径106对图形处理器是“可见的”(即,能够被利用来访问相应的系统存储器页)。
经由保存在主机CPU页表104内的映射(对应于GTT 107映射),图形口径106也对主机CPU可见。主机CPU经由主机CPU流水线103可以访问主机CPU页表104。页表104可以利用翻译后备缓冲器(TLB)105,它也保存着系统存储器页102的直接映射;这个映射在本文中可被称为“虚拟映射”。由GTT 107保存的图形口径映射和由主机CPU页表104保存的虚拟映射彼此不同,因为它们分别映射在物理地址空间的非重叠范围内的地址,但各自对应于相同的系统存储器页。两个映射对于由主机CPU执行的应用而言都是可见的。因此,可以提供图形处理器和主机CPU都可见的可共享存储器区域。
在利用集成图形部件的替代实施方案中,只能提供对图形处理器和主机CPU可见的图形口径的映射。
图2图示了用于提供可共享图形存储器的系统的另一可能实施方案。在图2的实施方案中,图形功能没有与整个系统集成在一起,但相反由单独的“内插”图形卡提供。内插卡可以插入整个计算机系统的AGP(加速图形端口1)、或PCI(外设部件互连端口2)、或其他“插座”、或适配器接口。[1参见例如1.加速图形端口接口规范,修订版1.0,英特尔公司,1996年7月31日;2.加速图形端口接口规范,修订版2.0,英特尔公司,1998年5月4日;3.修订版3.0草案版本0.95,英特尔公司,2001年6月12日。2参见例如PCI专家组(SIG)PCI局部总线规范,修订版2.2,1998年12月18日出版;BCPR ServicesInc.EISA规范,版本3.12,1992,1992年出版;USB规范,版本1.1,1998年9月23日出版;或者涉及类似外围总线的其他规范。]
在图2所示的内插卡系统中,可以如下所述提供可共享图形存储器。GART(图形口径再定位表)209把系统存储器页202映射到物理地址空间200的AGP(加速图形端口)存储器区域205内。AGP存储器区域205经由图形处理器单元(GPU)流水线206和AGP总线对图形处理器可见。
AGP存储器区域205对与CPU流水线203相关联的主机CPU也是可见的。CPU流水线203可访问的主机CPU页表204保存着AGP存储器205的映射(对应于GART 209映射)。页表204还保存着系统存储器页202的直接映射(即,上述“虚拟映射”)。由GART 209保存的AGP存储器区域205映射和由主机CPU页表204保存的虚拟映射彼此不同,因为它们分别映射在物理地址空间的非重叠范围内的地址,但各自对应于相同的系统存储器页。两个映射对于由主机CPU执行的应用而言都是可见的。因此,可以提供图形处理器和主机CPU都可见的可共享存储器。
图2所示的内插卡系统也可以包括映射到图形口径207的本地视频存储器208。
如上所述,CPU和图形处理器可以对同一存储器区域内的数据执行操作。典型地,串行而非同时地执行各自的访问。也就是,典型地,CPU执行的应用程序可以产生需要图形处理器来操作的数据,CPU可以把数据写入图形存储器。然后,应用程序可以把处理“切换”到图形处理器,请求它用这些数据执行某些绘制功能。当图形处理器完成了所请求的操作时,它可以接着把处理切换回应用程序。
考虑到上述切换过程,本发明的实施方案使可共享存储器能以优化方式进行使用。因此,当在下文中根据本发明的实施方案来创建或修改可共享存储器时,它被称为“优化共享存储器(optimally shared memory)”。
图3中的状态示了根据本发明的实施方案在CPU和图形处理器之间的切换。图3表示主机CPU正在使用优化共享存储器的模式和图形处理器正在使用优化共享存储器的模式之间的转换。为了方便,当CPU正在使用优化共享存储器时,优化共享存储器可被称为处于“CPU场景(CPU view)”、“CPU优化的(optimized)场景”或“CPU优化(optimal)场景”,而当图形处理器正在使用优化共享存储器时,优化共享存储器可被称为处于“图形场景”、“图形优化的场景”或“图形优化场景”。
椭圆302代表优化共享存储器处于图形处理器场景的一段时间。该场景可以是“优化的”,因为已经分配了优化共享存储器的缓存属性,以使它有利于图形处理器的性能。
在优化共享存储器的图形优化场景和CPU优化场景之间可能存在转换阶段。根据本发明的实施方案,在图形优化场景和CPU优化场景之间的转换阶段期间,可以分配有利于CPU性能的优化共享存储器属性。
转换阶段可以包括椭圆303内所指示的“锁定”操作。锁定是指可以根据本发明的实施方案来利用的公知API(应用程序接口)。该锁定API可以由CPU执行的应用程序来调用。通常,锁定API保留一段存储器区域,以供发出锁定的应用程序的独占性使用。
椭圆300代表优化共享存储器处于CPU场景的一段时间。根据本发明的实施方案,该场景可以是“优化的”,因为已经分配了优化共享存储器的缓存属性,以使它有利于CPU的性能(例如,可以缓存优化共享存储器)。具体地,例如,可以向优化共享存储器分配回写(Write-Back)属性。
在优化共享存储器的CPU优化场景和图形优化场景之间可能存在转换阶段。根据本发明的实施方案,在CPU优化场景和图形优化场景之间的转换阶段期间,可以分配有利于图形处理器性能的优化共享存储器的属性。
所述转换阶段可以包括椭圆301内所指示的“解锁”操作。解锁是指可以根据本发明的实施方案来利用的公知API。所述解锁API可以由CPU执行的应用程序来调用。通常,解锁API撤消或颠倒早先执行的锁定API。应用程序可以调用解锁API来通知图形处理器,CPU暂时不再使用优化共享存储器,图形处理器现在可以访问优化共享存储器。
根据本发明的实施方案,在从CPU优化场景到图形优化场景的转换阶段期间,如下文中更详细地描述,可以“强迫”优化共享存储器实现缓存一致性(即,可以确保CPU缓存内的所需数据被逐回到存储器)。
图形“表面”可以是一种驻留在经历着CPU优化场景和图形优化场景之间的上述转换的优化共享存储器内的数据。然而,通常图形表面不需要驻留在共享存储器内。
图形表面用于许多目的。表面可以是下列数据的缓冲区,所述数据例如是从应用程序传递给图形处理器的命令、像素或顶点。表面可以包含绘制结果,该结果将显示在输出显示设备上,或者只是返回给应用程序。可以创建表面用于临时存储图形处理器的中间结果,因而从不需要对应用程序可见。可以创建表面用于中间存储和应用程序使用,因而从不需要对图形处理器可见。
图4A图示了通常被称为“矩形表面”的图形表面400的实施例。矩形表面典型地包含水平地组成扫描行的图形像素,这些扫描行具有预定义的节距(pitch)和由像素组成的宽度。可以垂直连接多个扫描行以形成表面。典型地,可以这样构成上述图形表面以便允许传送给输出显示设备,所述显示设备也具有给定的水平宽度和垂直扫描行数量,或者允许将所述表面绘制作为纹理补片(patch)绘制到将在随后的操作中依次显示或使用的另一表面上。
图形表面的面积可以通过它距离存储基地址(base memory address)401的偏移量和它的尺寸来定义,通常按照端点402距离表面的基存储位置401的偏移量来定义。在表面内可以定义有界分区,例如有界分区403。当图形应用程序或图形处理器正在对有界分区操作时,有界分区可以说成是“活动的”。有界分区内的存储单元可以按照分区的基坐标x,y和距离基坐标的偏移量w,h进行定义,或者可替换地,可被表示为有界分区的上左下右边界的坐标。前述坐标系统也可以用来通过相对表面原点的上左下右矩形坐标来描述整个表面。下文中,矩形表面或分区的表示将被引用为参数缩写RECT(t,l,b,r),其中t,l,b,r分别表示相对表面原点的上左下右矩形坐标。
图4B表示图形表面410的另一可能结构,通常称为“线性表面”。在图形表面410中,有界分区411横跨所述表面的整个节距。对于有界分区411,可以指定起始偏移(StartOffset)地址和长度(Length)。表面内像素的地址位置从起始偏移地址到结束(End)地址线性增加。下文中,分区的表示将被引用为参数缩写LIN(o,l),其中o和l分别表示相对表面原点的起始偏移和相对起始偏移的分区长度。上述表面典型地用作传送分组后图像数据的缓冲器,所述分组后图像数据例如是绘制命令列表、顶点或顶点标记列表或者使用视频或纹理压缩技术的压缩像素数据列表。
上面结合图3描述的锁定和解锁API可以允许指定某些参数。这些参数可以包括,例如要锁定或解锁的表面内的唯一有界分区的说明,或者要锁定或解锁的整个表面的说明。通常,锁定API和随后的解锁API指定要锁定和随后解锁的同一有界分区或整个表面。
当建立起图形表面并且应用程序正在操纵该表面内的像素时,部分表面可能驻留在主机CPU的缓存内一段时间。在缓存内,作为一个单元来处理的一部分表面数据被称为数据的“粒度(granularity)”。图5表示诸如有界分区403的有界区域驻留在缓存中时的实施例。扫描行N和N+1包含多个像素,并且跨越在有界分区403之上。
此外,扫描行N+1在有界分区内的一段图示了扫描行如何可被认为是由“上”段、“整个”段和“下”段构成的。“上”段和“下”段各自具有小于缓存行长度的跨度,而“整个”段的跨度等于缓存行的长度。
存在着缓存控制“原语(primitives)”,其允许基于特定粒度对缓存内的数据行进行低级控制,从一个缓存行直至所有行。上述原语可以用来在缓存内的一部分数据上或者在整个缓存自身上实现缓存一致性。例如,对于与所提供的逻辑存储器地址参数相关联的所有缓存行,被称为“CLFLUSH”(缓存行冲刷)的公知IntelPentium4(英特尔奔腾4)处理器缓存控制指令原语以等于缓存行长度的粒度来冲刷缓存数据。
有利地,根据本发明的实施方案,通过使用例如CLFLUSH的原语,可以使表面的有界分区在缓存行长度或更小的段内一致。如果在缓存行长度或更小的段内使有界分区一致所花费的时间少于以更粗的粒度使用原语或者通过冲刷整个L1/L2缓存而使有界分区一致所花费的时间,则上述方法可能特别有益。
另一方面,在如上所述的段内使有界分区一致所需的时间量可能会超过仅仅冲刷整个L1/L2缓存所需的时间量。基于外部存储总线速度和宽度以及以外部总线宽度为单元使其具有一致性的缓存区域的大小,可以计算在这些段内使特定有界分区一致所需的最大时间。基于所述缓存区域的大小和外部存储总线速度及宽度以及其他处理器开销,可以类似地计算冲刷整个缓存所需的最大时间。如下文中更详细地描述,根据本发明的实施方案,在这些段内使特定有界分区一致所需的最大时间可以与冲刷整个缓存所需的最大时间进行比较,花费最少时间的方法可以用来使有界分区一致。
另一原语“Cache Page Flush(缓存页冲刷)”(CPFLUSH)是公知的,其用页面粒度冲刷缓存数据。在特定环境下,缓存页冲刷可能比缓存行冲刷更快和更有效。类似地,可以容易地想到更大粒度的缓存冲刷。例如,对于与存储器的物理页(例如4KB)或者更大空间相关联的所有图形像素数据行而言,“Physical Address Region Cache-Flush(物理地址区缓存冲刷)”将能有效地实现一致性。
可以在不同环境下建立和使用根据本发明实施方案的优化共享存储器。应用程序可以明确表示它想要建立和使用优化共享存储器。另一方面,优化共享存储器可以透明地提供给应用程序,也就是没有应用程序知道它正在使用优化共享存储器。
在前者情况下,图形驱动器可以首先列举图形子系统所支持的表面的类型列表,或者为应用程序“广告”该列表,并且所述应用程序可以从列表中选择“优化共享”类型,并请求分配优化共享类型的存储器区域。为了分配优化共享存储器区域,应用程序可以通过图形驱动器的API请求具有以前所列举的优化共享类型的存储器区域。例如,应用程序可以请求建立具有优化共享存储器类型的图形表面。
在后者情况下,用如上所述列举的列表不能被提供给应用程序,相反,可以由图形驱动器向应用程序透明地或“在幕后”地提供优化共享存储器。例如,图形驱动器可以根据基于它从应用程序接收的信息的“使用策略”来决定使用优化共享存储器。
应用程序并不从所列举的列表中直接选择优化共享存储器,而是可以通过在图形API中从该应用程序传递到图形驱动器的“暗示”来指示它多想使用图形表面。暗示的例子包括以下信息,该信息例如指定应用程序将从表面读/写,或者表面将是完全不透明的(只写入;即例如,只用作图形处理器绘制的目标,从不被应用程序读回)。基于所述暗示,图形驱动器可以将优化共享存储器表面透明地分配给应用程序,并且基于如何可以最好地提高性能的评价,来分配它的缓存属性。
在又一实施方案中,图形驱动器可以根据测量用途和要求,确定以前建立在某个存储类型或位置中的图形存储器可以更好地适合于变成优化共享类型。然后,在随后的时间,基于应用程序的访问用途模式的反向,图形存储类型可以变回到原始的类型和/或位置。
如上所述,在本发明的实施方案中,优化共享存储器可具有的缓存属性是根据该优化共享存储器是由CPU还是由图形处理器来使用而分配的。当在CPU场景和图形处理器场景之间发生转换时,或反之亦然,可以改变所分配的属性。当从CPU场景转换到图形处理器场景时,在优化共享存储器切换到图形处理器之前,可以使CPU缓存内的数据一致。例如,当应用程序没有明确指出它想要优化共享存储器时,可以有利地使用上述实施方案,而在相反情况下,则图形驱动器动态地确定(例如通过上述暗示)应该使用优化共享存储器。在上述情况下,图形存储器可能已经是“旧的”;也就是已经用作另一类型。
另一方面,根据其他实施方案,优化共享存储器可能一直都具有缓存的属性(即在分配的属性中没有出现变化)。例如,当应用程序从一开始就决定它想要建立和使用优化共享存储器时,可以有利地使用上述实施方案。在上述实施方案中,当从CPU场景向图形处理器场景转换时,在优化共享存储器被切换到图形处理器之前,可以使CPU缓存内的数据一致。为了不触发侦听周期,通过可编程的DMA寄存器设置,通过图形处理器页表入口的页属性,或者通过其他方式,可以指示图形处理器的存储器接口引擎在优化共享存储器处于图形处理器场景时,将优化共享存储器视作好像它是未缓存的一样。大部分处理器典型地支持把图形存储器看成是未缓存的,而与CPU的页表缓存属性设置无关,因为一致性问题的大部分解决方案围绕把图形存储器作为未缓存来使用。然而,在用于存储器的CPU页表入口中,存储器继续具有缓存的属性。
下面首先更详细地描述实施方案,其中分配的属性在CPU场景和图形处理器场景之间的转换期间被改变。
图6表示根据表面将处于哪种场景来设置优化共享存储器表面的程序流程。
如框600中所示,可以在开始建立优化共享表面。当建立表面时,各种数据结构可以与该表面相关联以有助于其上的操作。例如,根据一个实施方案,唯一标识符或“Surfacehandle(表面句柄)”可以与表面关联起来,并且作为表面的指针。这个表面句柄可以进一步指向“Surface-Object handle(表面对象句柄)”,其他又指向“Surface-Object(表面对象)”。表面对象可以包括专用数据结构,其包括这样的信息,例如存储器类型描述符(例如存储器是否被优化共享)、表面的存储器基偏移量、像素深度、尺寸(宽度、高度)和其他表面特征。专用数据结构也可以包括以下“成员”,其包含有关表面对象的信息。
如框600中所示建立了优化共享存储器表面之后,如框601中的判断操作,根据表面将处于哪种场景可以设定存储器的属性。
如框602中所示,如果表面将处于图形处理器场景,则可以把表面属性设定为Write-Combine(合写)(或未缓存)属性。然后,如框604中所示,在表面对象内,可以设定类型描述符“标签(tag)”,指示目前优化地映射这个存储器,以供图形处理器使用。
另一方面,如框603中所示,如果表面将处于CPU场景,则典型地把表面属性设定为Write-Back(回写)(被缓存)属性,并且如框605中所示,可以对表面对象类型描述符加标签,指示目前优化地映射表面以供CPU使用。
一旦建立表面,应用程序就可以通过调用锁定API或解锁API而请求锁定或解锁表面。锁定API和解锁API将典型地包括以下参数,例如表面对象的句柄,或者“有界区域”参数。有界区域参数描述如上所述的表面分区。锁定表面的操作允许应用程序把数据写入表面。
假定优化共享存储器最初由CPU使用,并且该优化共享存储器最初按照被缓存模式来使用,当应用程序已经达到处理中的某一点时,其中它至少暂时将不再访问优化共享存储器,那么它可以把处理切换给图形处理器。这样做,应用程序可以调用解锁API,其通知图形处理器优化共享存储器现在是可访问的。在解锁操作中,图形驱动器间接知道应用程序已经完成对表面的修改并且表面将不再被CPU访问。因此,分配给表面的、具有有利于CPU场景的缓存属性的优化共享存储器可以使缓存属性变成有利于图形处理器场景的属性。
因为共享存储器的缓存属性是从CPU优化模式(即,被缓存)变化到图形处理器优化模式(即,未缓存),所以应当使优化共享存储器一致。
图7A表示把优化共享存储器从CPU场景转换成图形处理器场景的流程,其中的过程包括按照实现一致性的方式来改变存储器的缓存属性。如框701中所示,可以首先确定由CPU起作用的共享存储器区域是整个表面还是只是表面的分区。这个分区或整个表面区域可以对应于有界区域或表面对象参数,这些参数如上所述地已被传递到锁定API和解锁API。
如果优化共享存储器区域是分区,如框702中所示,可以计算分区的起始和结束地址。如结合图4A所述,分区可以用RECT(t,l,b,r)参数来描述,其描述分区的位置和大小。可替换地,如结合图4B所述,分区也可以用距离表面基地址的起始偏移量和长度参数来描述。然后,流程可以前进到框703。
另一方面,如果确定优化共享存储器区域不是分区(即,它是整个表面),则流程可以直接前进到框703。在框703中,通过把地址下调至页排列起点,就可以从存储器起始地址中获得起始页。一般通过丢弃达到页面尺寸的地址最低有效位来完成这项操作。例如,如果页面是4KB,则通过用(4KB-1)的1的互补反码对所述地址进行按位“与”操作,就可以获得页颗粒起始地址“addr”。
接着,如框704中所示,例如通过把“addr”参数传递给缓存行冲刷原语例如“CLFLUSH”,就可以冲刷具有地址“addr”的缓存行。
如框705和706中所示,冲刷缓存行的过程可以继续,直到所有缓存行都已被冲刷。在框705中,可以确定是否还有要冲刷的缓存行。如果框705的确定结果是肯定的,则如框706中所示,通过递增“addr”参数可以冲刷分区的下一行,并且返回到框704。
一旦所有缓存行都已被冲刷,则流程可以前进到框707,其中优化共享存储器的缓存属性从被缓存(例如回写)变成未缓存(例如合写)。然后,如框708中所示,使用已知的英特尔处理器缓存控制指令,例如INVLPG,所述过程可以使包含以前缓存属性的页TLB(翻译后备缓冲器)条目无效。使用内部处理器通信总线,可以执行这个操作以允许存储器属性变化生效并传播到可位于系统内的其他CPU。
如框709和710中所示,对于优化共享存储器内的每个页面,所述过程可以继续。在框709中,可以确定是否还有要冲刷的页面。如果框709的确定结果是肯定的,则如框710中所示,通过递增“addr”参数可以冲刷下一页面,并且返回到框704。
如果没有剩下任何要冲刷的页面,则流程可以前进到框711,其中为了在随后对表面的操作中能跟踪表面的当前场景,对表面对象内的存储器类型描述符加标签,指示优化共享存储器现在处于图形处理器场景。
对优化共享存储器内的数据处理持续一段时间之后,图形处理器可以把优化共享存储器切换回CPU。在切换期间,优化共享存储器的缓存属性可以从有利于图形处理器的属性变成有利于CPU的属性。根据本发明的实施方案,在切换回CPU的转换阶段期间,先前已经由图形处理器在优化共享存储器处于图形优化场景时进行处理的表面或分区可以通过等待直到任何未决的绘制命令已经完成,从而相对于这些命令同步,这些命令是活动的或排队以在表面上光栅化。另外,图形驱动器可以跟踪未决的光栅化并冲刷绘制缓存,使得保留在图形处理器内的所有相关像素迁移到表面。
图7B中的流程示了在从图形处理器场景到CPU场景的转换阶段期间所实施的方法的一个可能实施方案,使优化共享存储器相对于上述任何未决的绘制命令同步。
如框721中所示,以前已经由图形处理器使用的表面可以视为具有与它相关的未决操作。这些未决操作可以用先前当开始在表面上进行图形操作时所设置的表面对象内的描述符和成员来指示。然后,如框722中所示,可以确定对表面的任何绘制输出是否还是未决的,在这种情况下,必须在表面被交回CPU之前使表面相对于图形处理器一致。如果框722的确定结果是否定的,则不需要进一步处理。流程将前进到框727。
另一方面,如果表面绘制是未决的,即指示出存在至今还未完全绘制的表面像素和至今还未写出到存储器的数据,则流程可以前进到框723。在框723中,使用由图形驱动器累积的并且位于表面对象的成员或描述符内的专用数据,可以确定表面内任何分区的绘制是不是未决的。如果没有绘制是未决的,则流程可以前进到框727。
另一方面,如果框723的确定结果是肯定的,则流程可以前进到框724。在框724中,将处理在图形处理器内还未决的、应用于正被切换表面的任何绘制命令。这包括将绘制优化共享表面的命令以及将绘制无关表面的命令,但其中优化共享表面内的像素被用来产生前往无关表面的结果。
然后流程可以前进到框725,其中为了确保表面相对于图形处理器一致,从任何内部绘制队列中冲刷出先前所确认的绘制命令的执行结果,即绘制像素。流程可以继续到框726,其中可以停止框723-726的连续迭代,直到确保绘制命令和绘制输出已经全部完成。可以继续重复框723-726,直到没有剩下相关的绘制输出。此时,流程可以前进到框727。
如果框722的确定结果是否定的,则流程可以前进到框727,其中共享存储器的缓存属性从未缓存(例如合写)变为被缓存(例如回写)。然后,如框728中所示,使用已知的英特尔处理器缓存控制指令,例如INVLPG,所述过程可以使包含以前缓存属性的页TLB无效。通过内部处理器通信总线,可以执行这个操作以允许页属性的变化生效并被传播到可能位于系统内的其他CPU。
如框729中所示,对于共享存储器内的每个页面,所述过程可以继续。在框729中,可以确定是否还有任何页面要使它们的缓存属性改变。如果框729的确定结果是肯定的,则过程可以重复框727和728。
如果不再有页面要使它们的缓存属性改变,则流程可以前进到框730,其中对表面对象描述符加标签以指示优化共享存储器现在处于CPU和应用软件的场景中。
现在将描述以下实施方案,其中可以总是给优化共享存储器分配CPU-优化的被缓存属性,但其中当出现从CPU场景到图形处理器场景的转换时,为了使图形处理器把优化共享存储器视为未缓存的,可以使CPU缓存内的数据具有一致性。当从图形处理器场景转换成CPU场景时,可以相对于图形处理器的缓存使图形数据一致。
图8图示了根据一个可能实施方案的过程流程,用于根据后面的实施方案建立或分配优化共享存储器表面。在图8所示的过程中,建立优化共享表面以使它总是具有被缓存(例如回写)属性。也就是,优化共享存储器的缓存属性不取决于是CPU正在使用存储器还是图形处理器正在使用存储器。相反,当存储器处于图形处理器场景时,指示图形处理器把优化共享存储器看成好像它是未缓存的。典型地,图形处理器具有接口控制寄存器或页表描述符(如图1中的107),它们是指示给图形处理器的存储器接口的,并且传送存储器是否被处理器缓存以及访问是否需要侦听操作的逻辑。然而,通过应用根据本发明实施方案的方法,在CPU场景和图形处理器场景之间的转换阶段期间,使得优化共享表面具有一致性,从而消除了侦听的必要。
如框800-801中所示,在分配有回写(WB)缓存属性的页面内可以分配优化共享存储器表面。如框802中所示,然后可以根据类型描述符和暗示来确定将如何使用新分配的存储器例如,由CPU读/写,或者干脆是不透明的(只供图形处理器使用)。
如果CPU将在一开始使用表面,则流程可以直接进入框804,其中在表面对象的存储类型描述符内对新分配的表面加标签,以指示它的当前场景。另一方面,如果图形处理器将在一开始使用表面,则可以使表面一致,以从存储器的先前和/或无关的应用程序使用中清除可能还在缓存内的与表面有关的任何数据。这个操作图示在框803中,并且包括利用已知的一致性实现原语来冲刷缓存内的任何页面,所述原语例如是英特尔处理器缓存控制指令WBINVD(回写无效缓存)、INVD(无效缓存)或CLFLUSH。CPFLUSH(缓存页面冲刷)或其他处理器缓存控制原语也可以用于这个目的。然后,如框804中所示,通过表面对象内部的存储器类型描述符,可以对新分配的表面进行标识或加标签,以指示它的当前场景。
如果一开始表面被分配在CPU场景中,则应用程序可以使用由图形驱动器传递给它的表面句柄,来请求锁定表面。锁定表面允许应用程序把数据写入表面。应用程序可以通过调用如上所述的锁定API请求锁定。
当表面的场景变成图形处理器场景时,因为CPU在使用它时可能已经在优化共享存储器上读取和写入,所以需要使优化共享存储器相对于图形处理器一致。图9A是图示了用于实现一致性的方法的一个可能实施方案的流程图。
如框901中所示,首先可以确定由运行在CPU上的应用软件使用的优化共享存储器的区域是否覆盖整个表面,或者只覆盖表面内的有界分区。这个有界分区或整个表面区域可以对应于经历上述锁定和解锁的有界分区或整个表面区域。
如果优化共享存储器的区域不是一个分区(即,它是整个表面),则如框902中所示,可以进行计算,确定使表面一致所花费的时间是否大于对所有CPU(因为本发明的实施方案可以用在多CPU系统内)的所有缓存执行冲刷所花费的时间的1/2。
如果框902的计算结果是肯定的,则如框903中所示,可以对全体CPU的L1和L2缓存执行冲刷,把这些缓存内的内容保存在优化共享存储器内,使它一致。然后,如框912中所示,可以对表面对象的类型描述符加标签,指示表面处于对图形处理器使用优化的场景中。如果框902的计算结果是否定的,则流程可以前进到框905,如下所述。
如果优化共享存储器区域是分区,则如框904中所示,可以计算分区的起始和结束地址。如图4A所述,分区可以用RECT(t,l,b,r)参数来描述,其中使用指示分区位置和尺寸的上下左右矩形坐标来描述有界分区形状。可替换地,如图4B所述,分区可以是用起始偏移地址和长度来描述的线性表面。
一旦计算出分区的起始和结束地址,流程可以进入框905,将检测分区是否在中间开始进入缓存行。如果框905的确定结果是肯定的,则可以执行框906,将重新排列区域的起始,在该区域上将实现一致性,使得缓存行冲刷将导致脏缓存行在想要一致的特定地址上无效,并且流程可以前进到框907。
如果框905的确定结果是否定的,则流程可以直接前进到框907。在框907中,可以冲刷具有对应于地址“addr”的缓存数据的缓存行,例如,通过把“addr”参数传递给缓存行冲刷原语如“CLFLUSH.”。
然后,如框909中所示,可以确定是否已经达到矩形或线性分区的行的末端。如果框909的确定结果是否定的,则如框908中所示,通过把“addr”参数递增等于缓存行尺寸的量,可以冲刷下一缓存行,并且返回到框907。
如果框909的确定结果是肯定的,则流程可以前进到框910。在框910中,可以确定是否已经达到分区的末端。如果已经达到分区的末端,则已经冲刷了整个分区以使优化共享存储器区域一致,以供图形处理器使用,并且流程可以前进到框912。
否则,则如框911中所示,通过递增“addr”参数可以冲刷矩形分区的下一行,其中增量等于表面节距的尺寸减去经任何对准调节的分区宽度,并且返回到框905。
如上述程序中使用的缓存行冲刷(CLFLUSH)具有相对小的粒度(即,它处理相对小部分的数据)。相反,页面冲刷(CPFLUSH)可以冲刷与存储器页相关联的所有缓存行。因此,根据实施方案,如下所述在优化共享存储器切换到图形处理器时实现一致性的过程可以使用页冲刷而不是缓存行冲刷,以便用最小的处理器开销在更大部分图形数据上实现一致性。在给定的条件下,与把共享区域分成多行而带来的开销相比,使用页冲刷的过程可能更快和更有效。
可替换地,期望这样的CPU指令,其通过把存储范围作为参数并且确保该范围内的所有数据都是缓存一致的,从而有效地处理给定的存储器区域。
一旦通过上述过程使优化共享存储器一致,则优化共享存储器内的数据可以由图形处理器进行处理,就好像它正在使用未缓存的或合写的页缓存属性。
在使用优化共享存储器内的表面和数据一段时间之后,图形处理器可以把共享存储器切换回CPU。根据本发明的实施方案,在切换回CPU的转换阶段期间,先前在共享存储器处于图形优化场景时已经由图形处理器处理的表面或分区可以相对于图形处理器同步,包括完成任何未决的绘制命令,这些命令是活动的或排队以在表面上光栅化。另外,图形驱动器可以跟踪这些绘制命令的未决光栅化并冲刷绘制缓存,以确保表面是一致的。
图9B是流程图,图示实施上述方法的一个可能实施方案。
如框921中所示,以前已经被图形处理器使用过的表面可以被视为具有与它相关的未决操作。这些未决操作可以用以前当开始对表面进行图形操作时所设定的表面对象内的描述符和成员来指示。然后,如框922中所示,可以确定对表面的任何绘制的输出是否还是未决的,在这种情况下,必须在表面可以交回给CPU之前使表面关于图形处理器一致。如果框922的确定结果是否定的,将不需要进一步处理。流程将前进到框927,其中将对表面对象的存储器类型描述符加标签,指示表面现在优化地处于CPU和应用程序的场景中。
另一方面,如果对表面的绘制是未决的,指示存在至今还未完全被绘制的表面像素和至今还未写出到存储器的数据,则流程可以前进到框923。在框923中,使用由图形驱动器累积的、并且位于表面对象的成员或描述符内的专用数据,可以确定对表面内任何分区的绘制是否是未决的。如果没有任何绘制是未决的,则流程可以前进到框927。
另一方面,如果框923的确定结果是肯定的,则流程可以前进到框924。在框924中,将处理在图形处理器内还未决的、应用于正被切换表面的任何绘制命令。这包括将绘制优化共享表面的命令以及将绘制无关表面的命令,但其中优化共享表面内的像素被用来产生前往无关表面的结果。
然后流程可以前进到框925,其中为了确保表面相对于图形处理器一致,从任何内部绘制队列中冲刷出以前所确认的绘制命令的执行结果,即被绘制过的像素。流程可以继续到框926,其中可以停止框923-926的连续迭代,直到确保绘制过的命令和绘制输出已经全部完成。可以继续重复框923-926,直到没有剩下相关的绘制输出。此时,流程可以前进到框927。
根据本发明的实施方案,优化共享存储器向具有有利于CPU的缓存属性的转换可以发生在锁定API或语义等效的接口内,而优化共享存储器向具有有利于图形处理器的缓存属性的转换可以发生在解锁API或语义等效的接口内。在实施方案中,可以在图形设备驱动器级上执行锁定API和解锁API。然而,本发明的实施方案不局限于在锁定API和解锁API内执行转换。例如,类似的接口API是已知的,例如BeginAccess API和EndAceess API,它们表示在协助实现共享所有权时协商访问开始和结束的语义等效动作。在各种其他级别的代码内可以执行转换,例如在其他接口内,以及在内部存储器管理和其他活动内。
更通常地,注意本文中公开的编程结构,例如图示的过程流程、标识的API和缓存控制原语是任意的并且只是代表在由任意指派的助记符所调用的多种计算机指令序列中可以实现的功能。
本发明的实施可以有形地实现为计算机可执行指令,其可以保存和输送在计算机可用介质上,例如软盘、磁带、磁盘或CD-ROM。例如在图形设备驱动器内可以执行这些指令。这些指令经由适当读取设备可以下载到计算机存储器,处理器可以从存储器中取回并执行它们以实现本发明的有益特征。
本发明的实施方案在许多应用中是有益的。例如,MPEG(运动图象专家组端口3)应用产生“关键帧”,它们保存在存储器内,随后由CPU读回以根据这些关键帧产生内插中间帧。通过使这些关键帧能保存在共享存储器内,就CPU的读回操作而言,该共享存储器实质上是优化的,同时避免以前方法中的混叠、侦听周期和类似问题,可以大大提高MPEG应用的性能。[3参见例如1、ISO/IEC 11172-1/2/3(附件1系统/2视频/3音频)在高达约1.5MB/s速度下,用于数字存储介质的运动图像和相关音频译码;2、1、ISO/IEC13818-1/2/3(附件1系统/2视频/3音频)运动图像和相关音频信息的普通译码]本发明的另一应用可以包括3D应用。在这些应用中,典型地建立顶点缓冲器。顶点缓冲器是装有多边形点或顶点的缓冲器;可以给顶点编索引。在由应用程序建立之后,顶点缓冲器一般将被切换到要绘制的图形处理器。应用程序也将需要读回顶点缓冲器内的数据,以便检测例如图形对象是否将彼此“冲突”。或者例如,应用程序可能需要修改顶点以便操纵图形对象,以使它“变形”或弯曲等。
根据本发明的实施方案,可以用共享存储器类型建立顶点缓冲器。然后,顶点缓冲器将具有某种格式,从而可能从CPU场景(用于由应用程序读回顶点数据)和图形场景(用于对顶点数据执行绘制操作)有效地访问缓冲器。
本发明的另一有益应用是在传统3D流水线内的图形“变换和照明”操作方面,或者用于现代“可编程顶点着色器(Vertex Shader)”中的复杂顶点操纵。在这两个实施例中,应用程序可以建立几何缓冲器,包括要绘制的对象的顶点。这些顶点描述了需要从建立模型的“自然空间”被转换并照明到视图空间的多边形,其中所述视图空间可以与其他对象一起被绘制在屏幕上。在这个过程中,可能需要对顶点进行操纵,包括读取、修改和写入顶点数据。
某些计算机芯片组包括专门的图形硬件,用于执行变换和照明应用。可替换地,CPU的专用指令组的一部分可以用来加速变换和照明。
在后者情况下,处理器制造商为软件商提供部分CPU流水线作为“处理器专用图形流水线”(PSGP),以供不包括专门的变换和照明硬件的图形芯片组使用。PSGP流水线使用主机CPU执行变换和照明操作,因此,已经进行变换和照明的顶点数据随后将被传递给图形处理器进行绘制使用。
在CPU执行变换和照明操作的时间段内,如果可以按照被缓存模式来执行它们,那是最有效率的。如果“剪切信号”是必需的,则可能需要CPU读回数据并进行操纵。因为这需要从存储器缓冲器中读取数据,操纵它并把它写回到缓冲器中,所以可以在存储器处于被缓存模式时优化地执行这些操纵。另外,如果对顶点执行的操作在编程上很复杂,那么这样根据完全可编程Vertex Shader显然是可能的。处理一个顶点可能涉及对每个顶点以及许多其他顶点的许多次读写,以便实现复杂的效果,例如对象表面位移映射和环境照明效果。
根据本发明,因为对于每一场景实质上共享存储器被优化地格式化,所以能非常有效地执行变换和照明操作;不需要缓冲器或数据混叠。
本发明的另一可能应用将包含图形API的实施,可以预先对图形执行绘制,绘制可能不需要由硬件直接支持。由API暴露的某些部分绘制可以是“硬件可加速的”(能够由图形处理器执行),而某些不可以。它可以提高效率,以使在图形处理器上可加速完成的操作与CPU操作尽可能多地并行。对于绘制过程中的细小绘制操作而言尤其如此,例如移动、填充或整数和布尔运算,如果图形处理器完成这些操作,将保持CPU空闲以产生复杂形状例如贝塞尔曲线的下一顶点,或者执行绘制效果的复杂光栅化阶段。
在本文中具体图示和描述了本发明的几个实施方案。然而将能理解,上述教导覆盖了本发明的修改和变化,并且它们位于所附权利要求书的范围内,而没有脱离本发明的本质和预想范围。
权利要求
1.一种方法,包括分配存储器区域,用于在CPU和图形处理器之间共享;向所述共享存储器区域分配有利于所述CPU的工作效率的缓存属性;执行从第一模式到第二模式的转换,在所述第一模式中,所述CPU正在使用所述存储器区域,在所述第二模式中,所述图形处理器正在使用所述存储器区域;以及在从所述第一模式到所述第二模式的所述转换期间,将所述缓存属性变成有利于所述图形处理器的工作效率的属性。
2.如权利要求1所述的方法,其中有利于所述CPU工作效率的所述属性是被缓存属性。
3.如权利要求1所述的方法,其中有利于所述图形处理器工作效率的所述属性是未缓存属性。
4.如权利要求1所述的方法,其中在从所述第一模式向所述第二模式的所述转换期间,使得所述共享存储器一致。
5.如权利要求1所述的方法,执行从所述第二模式返回到所述第一模式的转换,在从所述第二模式向所述第一模式的所述转换期间,将所述缓存属性变回到有利于所述CPU工作效率的属性。
6.如权利要求1所述的方法,其中所述共享存储器区域被分配用于图形表面。
7.如权利要求6所述的方法,其中由所述CPU执行的应用程序对所述图形表面的有界区域内的数据执行操作。
8.如权利要求7所述的方法,其中在从所述第一模式向所述第二模式的所述转换期间,确定将使用何种粒度的缓存冲刷以使所述有界区域一致。
9.如权利要求8所述的方法,其中所述粒度是缓存行、缓存页和整个缓存之中的一个。
10.一种方法,包括(a)分配存储器区域,用于在CPU和图形处理器之间共享;(b)在有利于所述CPU工作效率的第一模式下使用所述共享存储器;(c)在有利于所述图形处理器工作效率的第二模式下使用所述共享存储器。
11.如权利要求10所述的方法,还包括在<b>和<c>之间,使所述共享存储器区域内的数据一致。
12.如权利要求11所述的方法,其中最大以缓存行长度为单位使所述共享存储器区域一致。
13.如权利要求11所述的方法,其中最大以页面为单位使所述共享存储器一致。
14.一种方法,包括分配存储器区域,用于由CPU和图形处理器共享使用;向所述存储器区域分配两种可替换属性之一,所述两种可替换属性分别有利于所述CPU的性能或所述图形处理器的性能;当所述存储器区域具有对应的有利属性时,使用所述CPU或所述图形处理器访问所述存储器区域;以及当所述存储器区域的使用在所述CPU和所述图形处理器之间变化时,将所述分配的属性变成可替换属性。
15.如权利要求14所述的方法,其中所述两种可替换属性是用于CPU的被缓存属性和用于图形处理器的未缓存属性。
16.一种方法,包括分配存储器区域,用于由CPU和图形处理器共享使用;向所述存储器区域分配被缓存属性;使用所述CPU访问所述共享存储器区域;使所述共享存储器区域一致;以及切换所述共享存储器区域,以供所述图形处理器使用。
17.如权利要求16所述的方法,其中最大以缓存行长度为单位使所述共享存储器区域一致。
18.一种方法,包括分配存储器区域,用于在CPU和图形处理器之间共享;向所述存储器区域分配被缓存属性;在所述CPU上执行应用程序,其读取、修改或写入所述共享存储器区域内的数据;使所述共享存储器区域一致;把所述属性变成未缓存属性;以及把所述共享存储器区域切换到图形处理器,用于所述数据的绘制。
19.如权利要求18所述的方法,还包括用所述图形处理器对所述数据执行绘制操作;把所述属性变回到被缓存属性;把所述共享存储器区域切换回所述CPU,用于进一步处理。
20.如权利要求18所述的方法,其中所述存储器区域是图形表面。
21.一种系统,包含CPU;图形处理器;在所述CPU和图形处理器之间共享的存储器区域;以及计算机可执行指令,用于根据所述CPU或所述图形处理器中哪个正在使用所述存储器区域来改变所述存储器区域的缓存属性。
22.如权利要求21所述的系统,其中所述指令被包括在图形驱动程序软件内。
23.如权利要求21所述的系统,其中所述图形处理器集成在包括所述CPU的芯片组内。
24.如权利要求21所述的系统,其中所述图形处理器被包括在独立的内插卡中。
25.一种有形地包含在计算机可用介质内的程序产品,包含计算机可执行指令,用于根据CPU或图形处理器中哪个正在使用所述存储器区域来改变在所述CPU和所述图形处理器之间共享的存储器区域的属性。
26.如权利要求25所述的程序产品,其中所述指令使得所述存储器区域在从所述CPU使用所述区域到所述图形处理器使用所述区域的转换期间具有一致性。
27.如权利要求26所述的程序产品,其中在所述转换期间,确定使用什么缓存冲刷粒度使得所述区域一致。
28.一种存储计算机可执行指令的计算机可用介质,所述指令在由处理器执行时实现以下过程,包括分配存储器区域,用于在CPU和图形处理器之间共享;向所述共享存储器区域分配有利于所述CPU工作效率的属性;执行从第一模式到第二模式的转换,在第一模式中,所述CPU正在使用所述存储器区域,在第二模式中,所述图形处理器正在使用所述存储器区域;以及在从所述第一模式到所述第二模式的所述转换期间,把所述属性变成有利于所述图形处理器工作效率的属性。
29.如权利要求28所述的计算机可用介质,其中有利于所述CPU工作效率的所述属性是被缓存属性。
30.如权利要求28所述的计算机可用介质,其中有利于所述图形处理器工作效率的所述属性是未缓存属性。
31.一种方法,包括分配存储器区域,用于在CPU和图形处理器之间共享;向所述共享存储器区域分配被缓存属性;执行从第一模式到第二模式的转换,在第一模式中,所述CPU正在使用所述存储器区域,在第二模式中,所述图形处理器正在使用所述存储器区域;以及在所述第二模式中,使得所述图形处理器将所述共享存储器区域作为好像它是未缓存的来处理。
32.如权利要求31所述的方法,其中在从所述第一模式到所述第二模式的所述转换期间,使所述共享存储器一致。
33.一种方法,包括分配存储器区域,用于在CPU和图形处理器之间共享;向所述共享存储器区域分配被缓存属性;在所述CPU上执行应用程序,其读取、修改或写入所述共享存储器区域内的数据;使所述共享存储器区域一致;把所述共享存储器区域切换到图形处理器,用于所述数据的绘制;以及使得所述图形处理器将所述共享存储器区域作为好像它是未缓存的来处理。
34.如权利要求33所述的方法,还包括用所述图形处理器对所述数据执行绘制操作;把所述共享存储器区域切换回所述CPU,用于进一步处理。
35.如权利要求33所述的方法,其中所述存储器区域是图像表面。
36.一种存储计算机可执行指令的计算机可用介质,所述指令在由处理器执行时实现以下过程,包括分配存储器区域,用于在CPU和图形处理器之间共享;向所述共享存储器区域分配被缓存属性;执行从第一模式到第二模式的转换,在第一模式中,所述CPU正在使用所述存储器区域,在第二模式中,所述图形处理器正在使用所述存储器区域;以及在所述第二模式中,使得所述图形处理器将所述共享存储器区域作为好像它是未缓存的来处理。
37.如权利要求36所述的计算机可用介质,其中在从所述第一模式到所述第二模式的所述转换期间,使所述共享存储器一致。
38.一种存储计算机可执行指令的计算机可用介质,所述指令在由处理器执行时实现以下过程,包括分配存储器区域,用于在CPU和图形处理器之间共享;向所述共享存储器区域分配被缓存属性;在所述CPU上执行应用程序,其读取、修改或写入所述共享存储器区域内的数据;使得所述共享存储器区域一致;把所述共享存储器区域切换到图形处理器,用于所述数据的绘制;以及使得所述图形处理器将所述共享存储器区域作为好像它是未缓存的来处理。
39.如权利要求38所述的计算机可用介质,所述方法还包括用所述图形处理器对所述数据执行绘制操作;把所述共享存储器区域切换回所述CPU,用于进一步处理。
40.如权利要求38所述的计算机可用介质,其中所述存储器区域是图形表面。
全文摘要
根据本发明的方法和系统在应用程序之间提供共享存储器,这些应用程序运行在计算机系统的一个或多个CPU和加速协处理器例如图形处理器上,其中存储器可以保留它有利于CPU和图形处理器两者的最大性能的优化缓存属性和访问属性。所述方法涉及所有权的划分,其中在把共享存储器置于下一所有者的场景之前,使得共享存储器相对于以前的所有者具有一致性。这种裁决可能涉及所有权从一个客户转换到另一个的接口。在所有权的上述转换中,通过主动改变共享存储器的处理器缓存属性,以及通过处理器低级缓存控制指令、和/或用来实现数据一致性的图形处理器绘制冲刷算法的使用,存储器可以从一个场景变成另一场景。本发明的实施方案对于共享数据的所有客户而言都有助于实现最大访问效率,而没有带来在客户间移动或复制数据的开销。
文档编号G06F12/10GK1666182SQ03816169
公开日2005年9月7日 申请日期2003年4月24日 优先权日2002年5月8日
发明者戴维·怀亚特 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1