用于在虚拟执行环境中进行高效的图形处理的装置和方法_4

文档序号:9756863阅读:来源:国知局
着色器语言(HLSL)或OpenGL着色器语言(GLSL)。应用程序也包括按照机器语言中、适合 被通用处理器核心1034执行的可执行指令1014。应用程序也包括由顶点数据定义的图形 对象1016。
[0114] 操作系统1020可以是来自微软公司的Microsoft? Windows⑩操作系统、有专 利的类UNIX操作系统、或使用Linux内核变体的开源的类UNIX操作系统。当使用Direct3D API时,操作系统1020使用前端着色器编译器1024以将任何按照HLSL的着色器指令1012 编译成低级着色器语言。编译可以是即时编译或者应用程序可以执行共享预编译。在一个 实施例中,在3D图形应用程序1010的编译过程中,将高级着色器编译成低级着色器。
[0115] 用户模式图形驱动程序1026可以包含用于将着色器指令1012转换成硬件具体表 示的后端着色器编译器1027。当使用OpenGL API时,将按照GLSL高级语言的着色器指令 1012传递至用户模式图形驱动器以进行编译。用户模式图形驱动器使用操作系统内核模式 功能1028以与内核模式图形驱动器1029进行通信。内核模式图形驱动器1029和图形处 理器1032进行通信以分派命令和指令。
[0116] 对于本文中所描述的各种操作或功能的程度,他们可以被描述或定义为硬件电 路、软件代码、指令、配置、和/或数据。内容可以被实施在硬件逻辑中,或者被实施为直接 可执行的软件("对象"或"可执行"形式)、源代码、被设计用于在图形引擎上执行的高级 着色器代码、或在针对特定的处理器或图形核心的指令集中的低级汇编语言代码。本文中 所描述的实施例的软件内容可以经由其上存储有内容的制品、或经由操作通信接口以经由 通信接口发送数据的方法来提供。
[0117] 非瞬时性机器可读存储设备介质可以使机器执行所描述的功能或操作,并且包括 以可以被机器(例如,计算设备、电子系统等)访问的形式存储信息的任何机制,例如可记 录/非可记录介质(例如,只读存储器(R0M)、随机存取存储器(RAM)、磁盘存储介质、光学 存储介质、闪速存储器设备等)。通信接口包括接合到硬接线、无线、光学等介质中的任何一 个以用于向另一设备进行通信的的任何机制,例如存储器总线接口、处理器总线接口、因特 网连接、磁盘控制器等。通过提供配置参数或发送信号来配置通信接口,以准备通信接口从 而提供描述软件内容的数据信号。可以经由发送至通信接口的一个或多个命令或信号而访 问通信接口。
[0118] 描述的各个组件可以是用于执行描述的操作或功能的单元。本文中描述的每个组 件都包括软件、硬件、或其组合。组件可以被实现为软件模块、硬件模块、专用硬件(例如, 应用程序专用硬件、专用集成电路(ASIC)、数字信号处理器(DSP)等)、嵌入式控制器、硬接 线电路等。除了本文中所描述的,还可以对本发明的实施例和实现进行多种修改,而不脱离 它们的范围。因此,本文中的示图和示例应该被解释为示例性的而非限制性的意义。本发 明的范围应该仅参考下述权利要求书而衡量。
[0119] 用于在虚拟执行环境中进行高效的图形处理的装置和方法
[0120] 下面描述的本发明的实施例包括用于改进在虚拟执行环境中处理图形指令的效 率的技术。特别地,一个实施例将图形返回API调用进行分组并推测地执行图形返回API 分组以改进执行时间。一个实施例通过区分常规图形应用程序的转换和系统服务应用程 序(例如,下文讨论的"表面组合器")之间的区别,改进了所仿真的图形应用程序的图形 性能。此外,本发明的一个实施例将客户的表面转换成主机纹理,该转换比起将客户的表面 转换成主机的表面(如在现有的图形转换系统中完成的那样)是更快且更不资源密集的。 所有这些实施例可以被结合在单个系统中以极大地改进在虚拟执行环境中的图形处理的 效率。在下文中详细地描述了用于改进在虚拟执行环境中的图形性能的这些和多种其他技 术。
[0121] 1.通讨椎测执行的路径长度减小
[0122] 如上文所提及,在移动细分市场中,通常有多个共存平台,并且在一个平台上运行 的应用程序不能够在另一个平台上运行。本发明的一个实施例包括虚拟执行环境,所述虚 拟执行环境允许应用程序被执行而无论其原本的目标平台。
[0123] 图11示出了一个构架的实施例,其中可以在该构架上应用本发明的实施例以在 由主机0S1102提供的虚拟执行环境内、的客户0S 1101中高效地执行一个或多个图形应 用程序1105-1106。在示出的实施例中,每个图形应用程序1105-1116都可以调用图形 应用编程接口以在环境中建立3D模型,并使用所选择的显示配置对表面进行渲染。当 渲染完成时,将关联于表面的像素缓冲器交换到系统服务,在本文中也称为表面组合器 (composer) 1115,其中所述表面组合器对来自从多个应用程序的表面进行组合,并然后在 显示器上渲染最终所组合的表面。
[0124] 如图所示,在虚拟平台中,截取客户应用程序的图形API调用并且将其编码至客 户0S 1101中的命令缓冲器1110。然后,将命令缓冲器1110发送至主机0S以由图形API 转换器(GAT) 1120(其在一个实施例中为下文中所述的增强的GAT 1620)进行解码和转换。 解码/转换过程的结果是由图形处理单元(GPU) 1100的图形执行管线1130执行的一组本 机图形指令。该在客户和主机指令之间转换的过程消耗大量时间和处理器资源。
[0125] 为了降低客户0S 1101和主机0S 1102之间的转换消耗,当缓冲器是满的,或者当 API调用请求返回值时,命令缓冲期1110可以只发送命令至主机0S 1102。请求返回值的 API调用在本文中称作"返回API "调用,并且所有其他API调用称作"非返回API "调用。
[0126] 在下文描述的本发明的实施例降低了返回API仿真中的平均路径长度。特别地, 在一个实施例中,将返回API调用分组在一起,并且当从客户0S1101中调用第一返回API 调用时,在分组里的所有返回API调用都是推测地执行的。接着可以将该分组中的其他API 调用的推测执行的结果返回到客户0S 1101并且与第一返回API调用的结果一起高速缓 存。随后,当客户OS 1101调用分组中的另一个API时,可以直接使用存储在客户侧的高速 缓存的结果,而不要求客户0S 1101和主机0S 1102之间的任何转换。由于帧间的图形命 令通常非常接近的,因此推测执行对于图形应用程序效果很好。在下一帧的渲染过程中,返 回API调用很有可能按照完全相同的参数自己重复。
[0127] 在图12中示出的一个实施例包括在客户0S 1101内的、被执行用于将API调用分 组并推测执行所分组的API调用的两个组件:推测分组发现(S⑶)模块1205和推测分组执 行器(SGE)模块1215)。在一个实施例中,当客户0S向主机0S发送返回API调用1202时, SGD被激活。在一个实施例中,每个返回API可以通过其名称、参数值、以及返回地址(即, 调用点)来识别。在一个实施例中,SDG 1205创建并管理要由GPU 1100来一起推测地执 行的返回API的分组1210-1212。响应于每个返回API,S⑶1205可以首先检查以确定是否 已经建立了关联于该返回API的返回API分组1210-1212。如果没有,则S⑶1205建立新 的返回API分组1210-1212并将当前的返回API作为第一分组元素加入。然后,S⑶1205 可以监测客户0S 1101发送给主机0S 1102的每个API调用。在一个实施例中,对于每个 检测到的返回API调用,SGD 1205确定是否可以在所有之前的API调用之前将其推测地执 行。如果可以,则将返回API调用及其名字和参数值加入到分组中。在一个实施例中,当不 能进一步在分组中包括返回API时(例如,由于依赖性),S⑶1205停止增长分组。在一个 实施例中,正在被监测的API序列与分组一起被记录。
[0128] 在一个实施例中,为了确定一 API调用是否可以在另一个之前被推测执行,SOT 1205分析API调用如何读取或写入GPU 1100状态(即,分析与API调用关联的依赖性)并 将结果存储为读取/写入组1213。尽管在图12中作为单独的实体示出,读取/写入组1213 可以存储在各个API分组1210-1212中,或另外关联于各个API分组1210-1212。在一个实 施例中,对于每个API调用,可以静态地确定它读取("读取组")和写入("写入组")哪些 GPU状态。例如,返回API通常只是读取GPU 1100状态并将结果返回到应用程序中(例如, 配置数据、错误信息等)。非返回API调用可以隐式地读取和写入GPU 1100状态。在一个 实施例中,如果一个API调用的写入组与另一个API的读取组或写入组冲突,则这两个API 调用不能被重新排序。当S⑶1205监测API序列时,其也积累所有API调用的读取组和写 入组1213。在一个实施例中,对于没有写入GPU状态的最后的返回API调用,如果它的读取 组与积累的写入组没有相交,则可以在先前的API调用之前重新调度返回API。如果最后的 返回API调用不写入GPU状态,则S⑶1205也需要检查它的写入组是否与所积累的读取组 和所积累的写入组相交。在下文中关于图14描述了使用读取/写入组1213的具体示例。
[0129] 在一个实施例中,当客户0S 1101向主机0S 1102发送返回API调用1202时,推 测分组执行器(SGE)模块1215也被激活。SGE 1215可以检查返回API调用(和参数值) 是否匹配任何现有的返回API分组1210-1212的第一 API。如果匹配,SGE 1215收取分组 1210-1212中的所有返回API调用,将它们编码至命令缓冲器1110,并将它们发送至主机0S 1102侧。然后,SGE 1215从分组中接收多个推测执行的返回API的每分组推测结果1220。 在一个实施例中,在客户0S 1101等级处缓存了推测结果之后,SGE1215检测每个新的API 调用并将其与推测结果1220所提供的返回API分组进行匹配。在一个实施例中,API调用 的顺序需要精确匹配。对于非返回API调用,可以对它们的名字进行匹配,而对于返回API 调用,可以对它们的名字和参数值进行匹配。当SGE 1215遇到返回API调用时,如果其先 前的API调用全部匹配,则SGE 1215使用在客户OS 1101上缓存的推测结果1220,从而保 存了处理资源(即,不涉及主机0S 1102中的图形API转换器(GAT) 1120)。
[0130] 在一个实施例中,如果返回API分组1210-1212具有低匹配率(例如,低于特定阈 值的比率),则它将被标记,使得SGE 1215将来可以避免对在该分组中的返回API调用的推 测执行。
[0131] 图13A示出了包括写入API和返回API调用的一系列API调用1301-1303的先前 的实施。在先前的实施中,经由命令缓冲器从客户0S向主机0S提供写入API调用和返回 API调用1301-1303中的每个。主机0S轮流在1304-1306分别执行每个API调用,并且将 返回API调用的结果提供回客户0S。
[0132] 相反,在图13B中,本发明的一个实施例在执行方框1310中随返回API#1而推测 地执行返回API#2和#3。如上文所提及的,返回API#2和#3的结果可以在客户0S 1101中 被缓存并且随后在需要时使用。执行方框1302-1303的写入API部分在执行方框1311中 被主机0S 1102执行。因此,只需要两次客户-主机转换。
[0133] 因此,将返回API调用分成一组,并在调用第一返回API时推测执行。分组中的剩 余的API调用的结果与第一 API调用一起被返回至客户0S。当客户0S调用之后的API调 用时,结果已在客户侧就绪,并且不需要客户和主机间之间的转换。
[0134] 图14提供根据本发明的一个实施例的示出了可以如何采用API分组的示例。在该 示例中,总共有6个API调用(ΑΡΙ#1-6),并且其中有3个返回API :API#1、API#3、和API#6。 示出的实施例追踪API序列1400的读取状态(R)和写入状态(W),并且在API#6之前抑制 返回API分组的增长。返回API序列(RAS)代表API返回分组,API序列(AS)标识正被监 测的API,读取状态(RS)代表积累的读取状态,并且写入状态(WS)代表积累的写入状态。
[0135] 转到图14中特定的序列,在1401处,首先用API#1填充返回API序列(RAS)分组, 其中API#1是第一返回API并包括对状态S0和S1的读取操作。也用API#1更新API序列 分组(AS)。
[0136] 在1402处,记录不是返回API的API调用#2。由此,用API#2更新API序列分组 (AS)而不更新RAS分组。因为API#2具有对状态S3的读取操作,因此更新追踪的读取状 态(RS)以包括状态S0、S1 (来自API#1)、以及S3(来自API#2)。此外,记录对状态S2的写 入。
[0137] 在1403处,记录API调用#3。因为API调用#3是返回API,因此它和API#1-起 被包括在RAS分组{1,3}和AS分组{1,2, 3}中。因为API调用#3包括对状态S3和S4的 读取,因此将追踪的读取状态(RS)更新为{SO, S1,S3, S4}。
[0138] 在1404处,API调用#4被记录并被包括在AS分组{1,2, 3, 4}中。API调用#4 不是返回API并且包括对状态S1和S2的读取。由此,将追踪的读取状态(RS)更新为 {SO, SI, S2, S3, S4}。
[0139] 在1405处,记录API调用#5, API调用#5不是返回API并包括对状态S1和S2的 读取以及对状态S1、S3和S4的写入。因此,将追踪的写入状态(WS)更新为{Sl,S2, S3, S4}。 将AS分组更新为{1,2, 3, 4, 5}。
[0140] 最终,在1406处,记录是返回API的API调用#6。然而,因为API调用#6读取状 态S1和S3,这与AS分组的组合的写入状态(WS)冲突,其中所述组合的写入状态是指对状 态S1和S3的写入。因此,API序列分组(RAS)被抑制增长为包括API调用#6。
[0141] 下面提供了用于实现上述技术的程序代码的一个实施例。然而,应该注意的是,本 发明的基本原理不限于该特定的实施。
[0142]

[0144] 图15A示出了用于建立并增长返回API分组的方法的一个实施例。该方法可以在 上文中描述的系统构架的环境中实现,但不限于任何特定的系统构架。
[0145] 在1501处,可以
当前第4页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1