在运行时处绑定可执行代码的制作方法

文档序号:6495535阅读:167来源:国知局
在运行时处绑定可执行代码的制作方法
【专利摘要】本发明涉及用于在运行时处绑定可执行代码的方法、系统和计算机程序产品。本发明的实施例包括对代码指定方面的后绑定以改善执行性能。运行时基于运行时信息动态地绑定较低级代码以优化较高级算法的执行。对执行性能有必要(例如,较高)影响的较高级算法的方面可以是后绑定的目标。通过使用对具有必要执行性能影响的方面的后绑定可以用最小的运行时间成本实现改善的性能。
【专利说明】在运行时处绑定可执行代码
[0001]背景
[0002]1.背景和相关技术
[0003]计算机系统及相关技术影响社会的许多方面。的确,计算机系统处理信息的能力已转变了人们生活和工作的方式。现在,计算机系统通常执行在计算机系统出现以前手动执行的许多任务(例如,文字处理、日程安排、帐目管理等)。最近,计算机系统彼此耦合并耦合到其他电子设备以形成计算机系统及其他电子设备可在其上传输电子数据的有线和无线计算机网络。因此,许多计算任务的执行分布在多个不同的计算机系统和/或多个不同的计算环境中。
[0004]一种用于生成可执行代码的机制是编译。在编译时,编译器接收以较高级编程语言编写的算法的源码级描述。编译器的任务在于从源码级描述生成用于目标环境的可执行代码。在运行时处,可执行代码在目标环境中运行。
[0005]通常,在编译时仅有与算法输入有关的部分粗略信息可用。由此,编译器无法作出与算法输入的许多方面(诸如,举例而言,输入的大小)有关的任何假设。如此,编译器通常生成能够在运行时处处理所有可能输入的可执行代码。遗憾地是,所编译的可执行代码的生成是以非最优的性能为代价的。例如,在执行期间,一些执行的指令对于指定输入而言可能是冗余的,并且可能消耗比处理特定输入所需的更多的系统资源(诸如存储器和寄存器)。
[0006]用于执行代码的另一机制是解释。解释器接收以较高级编程语言编写的算法并且解释该算法以供直接执行。经解释的语言可在某种程度上处理经编译的代码的非最优性能。但是,每次运行都重新解释该算法的影响常常会超过生成更优化代码的好处。
[0007]即时(JIT)编译技术包括从编译器输出的中间代码到目标机器可执行代码的运行时转换。作为此运行时转换(或即时编译)的一部分,可以使用各种优化来生成并执行针对执行期间观察到的特定输入的更高效的执行代码。然而,基于JIT的系统在运行时编译全部代码,从而会付出较大的运行时开销或转换。
[0008]简要概沭
[0009]本发明涉及用于在运行时绑定可执行代码的方法、系统和计算机程序产品。本发明的实施例包括供编译器和运行时进行互操作以基于运行时信息来实现改善的代码性能的各种机制。较高级源代码的语句和表达式被访问。检测到较高级源代码包括至少一个指定方面,针对该方面,相应的代表性较低级指令的执行效率基于执行期间接收到的输入数据的配置变化到必要的程度。
[0010]所访问的较高级源代码的语句和表达式被编译成较低级代码的代表性较低级指令。编译包括为该至少一个指定方面编译多个不同的代表性较低级指令。多个不同的代表性较低级指令中的每一个被配置成正确地实现该至少一个指定方面的意图。多个不同的代表性较低级指令中的至少一个代表性较低级指令基于接收到的输入数据的不同配置针对执行效率被优化。
[0011]较低级指令的执行在运行时处被配置。分析将被提供到较高级源代码的至少一个指定方面的输入数据的配置。确定为执行而基于所提供的输入数据的配置来优化选自多个不同的代表性较低级指令的指定的代表性较低级指令。指定的较低级指令被绑定到可执行代码以实现较高级源代码的至少一个指定方面的意图。
[0012]提供本概述是为了以简化的形式介绍将在以下详细描述中进一步描述的一些概念。本概述不旨在标识出所要求保护的主题的关键特征或必要特征,也不旨在用于帮助确定所要求保护的主题的范围。
[0013]在随后的描述中阐述,并且部分地将从本说明书中显而易见,或可以通过本发明的实施来获知。本发明的特征和优点可通过在所附权利要求书中特别指出的工具和组合来实现和获得。本发明的这些以及其他特征、优点和特征将根据以下描述和所附权利要求而变得更显而易见,或者可通过如此后阐述的对本发明的实践而获知。
[0014]附图简沭
[0015]为了描述可以获得本发明的上文所列举的及其他优点和特征的方式,将通过参考附图中所示的本发明的各具体实施例来呈现上文简要描述的本发明的更具体的描述。可以理解,这些附图仅描述本发明的典型实施例,从而不被认为是对其范围的限制,本发明将通过使用附图用附加特征和细节来描述和说明,在附图中:
[0016]图1A示出了促成在运行时处绑定可执行代码的示例计算机架构。
[0017]图1B示出使用较低级代码的多个版本来在运行时处绑定可执行代码。
[0018]图1C示出使用抽象接口来在运行时处绑定可执行代码。
[0019]图2示出了用于在运行时处绑定可执行代码的示例方法的流程图。
[0020]详细描沭
[0021]本发明涉及用于在运行时绑定可执行代码的方法、系统和计算机程序产品。本发明的实施例包括供编译器和运行时进行互操作以基于运行时信息来实现改善的代码性能的各种机制。较高级源代码的语句和表达式被访问。检测到较高级源代码包括至少一个指定方面,针对该指定方面,相应的代表性较低级指令的执行效率基于执行期间接收到的输入数据的配置变化到必要的程度。
[0022]所访问的较高级源代码的语句和表达式被编译成较低级代码的代表性较低级指令。编译包括为该至少一个指定方面编译多个不同的代表性较低级指令。多个不同的代表性较低级指令中的每一个被配置以正确地实现该至少一个指定方面的意图。多个不同的代表性较低级指令中的至少一个代表性较低级指令基于接收到的输入数据的不同配置针对执行效率被优化。
[0023]较低级指令的执行在运行时处被配置。分析将被提供到较高级源代码的至少一个指定方面的输入数据的配置。确定为执行而基于所提供的输入数据的配置来优化选自多个不同的代表性较低级指令的指定的代表性较低级指令。指定的较低级指令被绑定到可执行代码以实现较高级源代码的至少一个指定方面的意图。
[0024]本发明的各实施例可包括或利用专用或通用计算机,该专用或通用计算机包括诸如举例而言一个或多个处理器和系统存储器的计算机硬件,如以下更详细讨论的。本发明范围内的各实施例还包括用于承载或存储计算机可执行指令和/或数据结构的物理和其他计算机可读介质。这样的计算机可读介质可以是可由通用或专用计算机系统访问的任何可用介质。存储计算机可执行指令的计算机可读介质是计算机存储介质(设备)。承载计算机可执行指令的计算机可读介质是传输介质。由此,作为示例而非限制,本发明的各实施例可包括至少两种显著不同的计算机可读介质:计算机存储介质(设备)和传输介质。
[0025]计算机存储介质(设备)包括RAM、ROM、EEPROM、CD-ROM、固态驱动器(SSD )(如基于RAM)、闪存、相变存储器(PCM)、其他类型的存储器、其他光盘存储、磁盘存储或其他磁存储设备、或可用于存储计算机可执行指令或数据结构形式的所需程序代码装置且可由通用或专用计算机访问的任何其他介质。
[0026]“网络”被定义为允许在计算机系统和/或模块和/或其他电子设备之间传输电子数据的一个或多个数据链路。当信息通过网络或另一个通信连接(硬连线、无线、或者硬连线或无线的组合)传输或提供给计算机时,该计算机将该连接适当地视为传输介质。传输介质可包括可用于携带计算机可执行指令或数据结构形式的所需程序代码装置且可由通用或专用计算机访问的网络和/或数据链路。上述的组合也应被包括在计算机可读介质的范围内。
[0027]此外,在到达各种计算机系统组件之后,计算机可执行指令或数据结构形式的程序代码装置可从传输介质自动传输到计算机存储介质(设备)(或反之亦然)。例如,通过网络或数据链接接收到的计算机可执行指令或数据结构可被缓存在网络接口模块(例如,“NIC”)内的RAM中,然后最终被传输到计算机系统RAM和/或计算机系统处的较不易失性的计算机存储介质(设备)。因而,应当理解,计算机存储介质(设备)可被包括在还利用(甚至主要利用)传输介质的计算机系统组件中。
[0028]计算机可执行指令例如包括,当在处理器处执行时使通用计算机、专用计算机、或专用处理设备执行某一功能或某组功能的指令和数据。计算机可执行指令例如可以是二进制代码、诸如汇编语言之类的中间格式指令或者甚至是源代码。尽管用结构特征和/或方法动作专用的语言描述了本主题,但可以理解,所附权利要求书中定义的主题不必限于上述特征或动作。更具体而言,上述特征和动作是作为实现权利要求的示例形式而公开的。
[0029]本领域的技术人员将理解,本发明可以在具有许多类型的计算机系统配置的网络计算环境中实践,这些计算机系统配置包括具有以下一个或多个的组合:个人计算机、台式计算机、膝上型计算机、消息处理器、手持式设备、多处理器系统(包括有一个或多个中央处理单元(“CPUs”)以及例如图形处理单元(“GPUs”)或加速器的一个或多个协作处理器的系统)、基于微处理器的或可编程消费电子设备、网络PC、小型计算机、大型计算机、移动电话、PDA、寻呼机、路由器、交换机等等。本发明也可在其中通过网络链接(或者通过硬连线数据链路、无线数据链路,或者通过硬连线和无线数据链路的组合)的本地和远程计算机系统两者都执行任务的分布式系统环境中实施。在分布式系统环境中,程序模块可以位于本地和远程存储器存储设备二者中。
[0030]本发明的实施例包括对指定代码方面的后绑定以改善执行性能。运行时基于运行时信息动态地绑定较低级代码以优化较高级算法的执行。对执行性能有必要(例如,较高)影响的较高级算法的各方面可以是后绑定的目标。通过对对执行性能有必要影响的各方面使用后绑定可以用最小的运行时间成本实现改善的性能。
[0031]可以使用各种各样的动态绑定技术。在一些实施例中,为较高级方面生成可执行代码的多个不同版本。这多个不同版本中的每一个包括正确地实现该较高级方面的较低级代码。为执行而基于与该较高级方面相对应的输入数据的不同配置来优化多个不同版本中的每一个。在运行时,基于接收到的输入数据选择较低级代码的经优化版本。
[0032]在其他实施例中,生成用于较高级方面的抽象接口。在运行时处,较高级方面经优化的具体实现是基于接收到的输入数据被绑定至抽象接口的。
[0033]多种多样的不同的较高级方面可能对可执行代码性能具有必要影响,包括但不限于:缓冲器混叠和逻辑线程索引映射。本发明的各实施例可用于通过在运行时处基于运行时输入数据绑定可执行代码,来优化这些以及其他较高级方面的执行。
[0034]图1示出了促成在运行时处绑定可执行代码的示例计算机架构100。参考图1,计算机架构100包括编译器109和运行时103。所描绘的组件中的每一个通过系统总线(或作为系统总线的一部分)和/或诸如例如局域网(“LAN”)、广域网(“WAN”)以及甚至因特网等网络(或作为网络的一部分)彼此连接。因此,所描绘的组件中的每一个以及任何其他连接的计算机系统和它们的组件都能够创建消息相关数据并通过系统总线和/或网络交换消息相关数据(例如,网际协议(“IP”)数据报和利用IP数据报的其他更高层协议,诸如传输控制协议(“TCP,,)、超文本传输协议(“HTTP”)、简单邮件传输协议(“SMTP,,)等)。
[0035]如所描绘的,编译器109包括代码分析器101 (例如,编译器前端)和代码生成器102 (例如,编译器后端)。代码分析器101被配置成接收较高级代码(例如,用C++,扩展用于并行环境的C++,Visual Basic等等编写)的语句和表达式。代码分析器101可以分析较高级代码的语句和表达式以标识对代表性较低级指令的性能有必要影响的方面。例如,代码分析器101可确定缓冲器使用(其可被混叠或不被混叠)对性能有必要影响,或确定物理到逻辑线程映射(其可为直接或间接)对性能有必要影响。基于运行时数据输入,表示标识出的方面的经优化的较低级代码可以变化。如此,代码分析器101向代码生成器102指示标识出的任何方面。
[0036]代码生成器102被配置成接收较高级代码的语句和表达式以及对代表性较低级指令的性能有必要影响的标识出的方面。代码生成器102可以从语句和表达式以及标识出的方面生成正确地实现必要方面的多个不同的较低级指令(例如,DirectX/高级着色器语言(“HLSL”)字节码)。可以针对接收到的运行时数据的指定配置而优化多个不同的较低级指令中的每一个。例如,当使用缓冲器时,可以针对非混叠的缓冲器访问而优化较低级代码的一个版本,而较低级代码的另一个版本对于在输入/输出缓冲器间实现通用混叠情景而言可以是非最优的。类似地,当使用物理到逻辑线程映射时,可以针对直接映射而优化较低级代码的一个版本,而较低级代码的另一个版本可被提供来处理更通用但效率更低的间接映射情况。
[0037]一般而言,运行时103被配置成执行较低级代码来实现较高级代码的语句和表达式的意图。如所描述的,运行时103包括输入分析器104。分析器104被配置成确定要被提供来标识方面的输入数据的配置。输入分析器104可确定为运行时103中的执行而基于输入数据的配置优化指定的较低级指令。例如,可以为混叠或非混叠的缓冲器访问或者直接或间接的物理到逻辑线程映射选择代表性较低级代码。运行时103可以将指定的较低级指令绑定到可执行代码以供在运行时103中执行。
[0038]图2示出了用于在运行时处绑定可执行代码的示例方法200的流程图。方法200将参考计算机架构100的组件和数据来描述。
[0039]方法200包括访问较高级源代码的语句和表达式的动作(动作201 )。例如,代码分析器101可以访问较高级代码111 (例如,扩展用于并行环境的C++)的语句和表达式112。方法200包括检测较高级源代码包括至少一个指定方面的动作,针对该指定方面,相应的代表性较低级指令的执行效率基于执行期间接收到的输入数据的配置变化到必要的程度(动作202)。例如,代码分析器101可以检测到代码方面114基于对代码方面114的输入的配置影响代表性较低级指令的执行效率到必要程度。
[0040]代码分析器101向代码生成器102指示代码方面114。编译器接收代码方面114的指示。代码生成器102还访问较高级代码111。
[0041]方法200包括把所访问的较高级源代码的语句和表达式编译成较低级代码的代表性较低级指令的动作(动作203)。例如,代码生成器102把语句和表达式112编译成较低级代码(例如,DirectX/高级着色器语言(“HLSL”)字节码)的代表性指令。
[0042]动作203包括针对至少一个指定方面编译多个不同的代表性较低级指令的动作,多个不同的代表性较低级指令中的每一个被配置成正确地实现该至少一个指定方面的意图,多个不同的代表性较低级指令中的至少一个基于接收到的输入数据的不同配置针对执行效率被进行优化(动作204)。例如,代码生成器102可以把语句表达式112编译成代表性指令122A和122B。代表性指令122A和122B中的每一个被配置成针对不同的输入数据配置正确地实现代码方面114的意图。针对执行效率基于用于代码方面114的不同输入配置来优化代表性指令122A和122B中的每一个。
[0043]在一些实施例中,生成较低级指令的一个或多个经优化的版本和更加通用的“一揽子(“catch all”)”版本。针对一特定情形(诸如,举例而言,输入的指定配置)优化一个或多个经优化的版本中的每一个。一揽子版本处理所有其他情况。由此,该一个或多个经优化的版本以及该一揽子版本可以共同地处理来自原始算法的任何可能的情况。方法200包括配置较低级指令在运行时处的执行的动作(动作205)。例如,运行时103配置可执行代码106在运行时处的执行。动作205包括分析将被提供到较高级源代码的至少一个指定方面的输入数据的配置的动作(动作206)。例如,输入分析器104可以分析(将要被提供给代码方面114的)输入数据107。
[0044]动作205包括确定为执行而基于所提供的输入数据的配置来优化选自多个不同的代表性较低级指令的指定的代表性较低级指令的动作(动作207)。例如,输入分析器104(或运行时103中的一些其他模块)可以确定代表性指令122B基于输入数据107的配置针对执行被优化。
[0045]动作205包括把指定的较低级指令绑定到可执行代码以实现较高级源代码的至少一个指定方面的意图的动作(动作208)。
[0046]例如,运行时103可以将代表性代码122B绑定108到可执行代码106以实现代码方面114的意图。
[0047]可以用各种方法生成多个不同的代表性较低级指令。在运行时绑定代表性较低级指令也可以改变。转至图1B,图1B示出使用较低级代码的多个版本来在运行时绑定可执行代码。如图1B所描述的,代码生成器102生成包括代表性指令122A的较低级代码121A和包括代表性指令122B的较低级代码121B。在运行时,基于对输入数据107的分析,运行时103可以将较低级代码121B作为可执行代码106来启动109。
[0048]使用较低级代码的多个版本的实施例包括从扩展用于并行环境的C++代码生成多个HLSL着色器。例如,在缓冲器堆叠的情况下,代码生成器102可以生成假设在运行时不存在堆叠(且没有针对堆叠优化)的一个着色器版本(例如,代表性指令122A),以及处理缓冲器的堆叠的另一个着色器版本(例如代表性指令122B)。在运行时,运行时103检查到内核的缓冲器参数间的堆叠并且调用合适的着色器版本。
[0049]在线程映射的情况下,代码生成器102可以生成假设存在直接线程映射(且针对直接线程映射优化)的一个着色器版本,以及处理间接线程映射的另一个着色器。在运行时,运行时103检查直接/间接的线程映射并且调用合适的着色器版本。
[0050]转至图1C,图1C示出使用抽象接口在运行时绑定可执行代码。如图1C所描述的,代码生成器102生成包括抽象接口 124的较低级代码121C。代表性指令122A和122B是抽象接口 124的具体实现。代表性指令122A和122B可以自先前的编译起就存在或者同抽象接口 124—同生成。代表性指令122A和122B表示可动态地链接以在运行时处实现抽象接口 124的较低级代码的不同部分。在运行时,运行时103把较低级代码121C作为可执行代码106来启动112。基于对输入数据107的分析,运行时103可以将代表性指令122B绑定到可执行代码106以提供抽象接口 124的具体实现。
[0051]使用抽象接口的实施例包括DirectX/HLSL定义可以在HLSL代码中使用的抽象接口。把接口绑定到真实代码可以延迟到运行时。例如,在物理到逻辑线程索引映射上下文的情况下,代码生成器102可生成利用抽象接口把物理线程IDs映射到C++逻辑线程IDs的HLSL字节码。基于在运行时处指定的真实计算机域,把抽象接口绑定到直接映射代码(例如,代表性指令122A)或间接映射代码(例如,代表性指令122B)
[0052]在缓冲器混叠的情况下,代码生成器102可以生成利用抽象接口在运行时处理缓冲器的HLSL字节码。抽象接口基于是否在运行时检测到内核的缓冲器参数间的混叠而被绑定到使用经混叠的缓冲器的代码或使用非混叠的缓冲器的代码。
[0053]进一步的实施例包括针对用户代码中存在的依赖于硬件的特征生成多个着色器。一个着色器可以利用硬件特征而另一个着色器可以使用较低效率的后退实现。在运行时,基于在运行时处确定的目标处理器的硬件能力选择合适的着色器以供执行。
[0054]附加实施例包括生成多个着色器,每个着色器改变对代码生成的优化选择,并相应地改变资源要求。在运行时处,可以基于目标硬件上的资源可用性选择合适的着色器以供执行。当硬件资源(诸如举例而言寄存器的数目)跨硬件变化时,这些附加的实施例可以是有用的。
[0055]还可以生成着色器的多个版本以处理不同的运行时配置,诸如举例而言,执行硬件的能力。例如,实施例包括为不同的目标处理器生成多个着色器(可执行代码的版本)。在运行时处,基于为运行选择的目标处理器来选择合适的着色器以供执行。
[0056]用于处理不同运行时配置的其他实施例包括生成多个着色器,这些着色器中的一些包括以较慢的执行为代价来辅助剖析/调试的工具植入代码(instrumentation code)。这为运行工具植入的代码或非工具植入的代码提供了运行时选择,而无需重新编译。在运行时处,可以基于是否选择剖析/调试来选择合适的着色器。
[0057]抽象接口可以与多个代码版本结合使用。一些输入接着由不同的接口实现来服务,而其他输入由不采用接口或采用不同接口的完全不同的代码版本来服务。
[0058]本发明可具体化为其他具体形式而不背离其精神或本质特征。所描述的实施例在所有方面都应被认为仅是说明性而非限制性的。因此,本发明的范围由所附权利要求书而非前述描述指示。落入权利要求书的等效方案的含义和范围内的所有改变应被权利要求书的范围所涵盖。
【权利要求】
1.一种在计算机系统处用于在运行时处绑定代码以改善性能的方法,所述计算机系统包括处理器和系统存储器,所述计算机系统还包括编译器和运行时,所述编译器被配置成把较高级源代码的语句和表达式编译成较低级代码的代表性较低级指令,所述运行时被配置成执行可执行代码,所述方法包括: 访问较高级源代码的语句和表达式的动作; 检测到较高级源代码包括至少一个指定方面的动作,针对所述指定方面,相应的代表性较低级指令的执行效率基于执行期间接收到的输入数据的配置变化到必要的程度; 把所访问的较高级源代码的语句和表达式编译成较低级代码的代表性较低级指令的动作,包括: 针对所述至少一个指定方面编译多个不同的代表性较低级指令的动作,所述多个不同的代表性较低级指令中的每一个被配置成正确地实现所述至少一个指定方面的意图,所述多个不同的代表性较低级指令中的至少一个基于接收到的输入数据的不同配置针对执行效率被进行优化; 配置所述较低级指令在运行时的执行的动作,包括: 分析将被提供到所述较高级源代码的所述至少一个指定方面的输入数据的配置的动作; 确定为执行而基于所提供的输入数据的配置来优化选自多个不同的代表性较低级指令的指定的代表性较低级指令的动作;以及 把所述指定的较低级指令绑定到可执行代码以实现所述较高级源代码的所述至少一个指定方面的意图的动作 。
2.如权利要求1所述的方法,其特征在于,针对所述至少一个指定方面编译多个不同的代表性较低级指令的动作包括: 编译代表性较低级指令的一个版本的动作,为了在运行时处与不使用缓冲器混叠的输入数据一起使用而优化所述代表性较低级指令的一个版本;以及 编译代表性较低级指令的另一个版本的动作,所述代表性较低级指令的另一个版本用于在运行时处与使用缓冲器混叠的输入数据一起使用。
3.如权利要求2所述的方法,其特征在于,其中分析将被提供到所述较高级源代码的所述至少一个指定方面的输入数据的配置的动作包括确定所述输入数据不使用缓冲器混叠的动作;并且 其中把所述指定的较低级指令绑定到可执行代码以实现所述较高级源代码的所述至少一个指定方面的意图的动作包括在运行时处把所述代表性较低级指令的一个版本绑定到可执行代码的动作。
4.如权利要求1所述的方法,其特征在于,其中针对所述至少一个指定方面编译多个不同的代表性较低级指令的动作包括: 编译抽象接口以表示所述至少一个指定方面的动作;以及 编译可在运行时处动态地链接到所述抽象接口的较低级代码的多个不同部分的动作。
5.如权利要求4所述的方法,其特征在于,其中编译抽象接口以表示所述至少一个指定方面的动作包括编译物理到逻辑线程ID映射接口的动作;以及 其中编译可在运行时处动态地链接到所述抽象接口的较低级代码的多个不同部分的动作包括: 为直接的物理到逻辑线程ID映射编译较低级代码的一部分的动作;以及 为更通用的间接的物理到逻辑线程ID映射编译较低级代码的另一部分的动作。
6.一种供在计算机系统处使用的计算机程序产品,所述计算系统包括编译器和运行时,所述编译器被配置把较高级源代码的语句和表达式编译成较低级代码的代表性较低级指令,所述运行时被配置执行可执行代码,所述计算机程序产品用于一种用于在运行时处绑定代码以改善性能的方法,所述计算机程序产品包括其上存储有计算机可执行指令的一个或多个计算机存储设备,所述指令在由处理器执行时,使得所述计算机系统执行所述方法,所述方法包括以下: 访问较高级源代码的语句和表达式; 检测到所述较高级源代码包括至少一个指定方面,针对所述指定方面,相应的代表性较低级指令的执行效率基于执行期间接收到的输入数据的配置变化到必要的程度; 把所访问的较高级源代码的语句和表达式编译成较低级代码的代表性较低级指令,包括: 针对至少一个指定方面编译多个不同的代表性较低级指令,所述多个不同的代表性较低级指令中的每一个被配置成正确地实现所述至少一个指定方面的意图,所述多个不同的代表性较低级指令中的每一个基于接收到的输入数据的不同配置针对执行效率被进行优化; 配置所述较低级指令在运行时的执行,包括: 分析将被提供到所述较高级源代码的所述至少一个指定方面的输入数据的配置; 确定为执行而基于所提供的输入数据的配置来优化选自所述多个不同的代表性较低级指令的指定的代表性较低级指令;以及 把所述指定的较低级指令绑定到可执行代码以实现所述较高级源代码的所述至少一个指定方面的意图。
7.如权利要求6所述的计算机程序产品,其特征在于,其中在执行时使得所述计算机系统把所访问的较高级源代码的语句和表达式编译成较低级代码的代表性较低级指令的计算机可执行指令包括在执行时使得所述计算机系统把C++代码编译成高级着色器语言(“HLSL”)字节码的计算机可执行指令,所述C++代码包括用于并行环境的扩展。
8.如权利要求7所述的计算机程序产品,其特征在于,其中在执行时使得所述计算机系统针对所述至少一个指定方面编译多个不同的代表性较低级指令的计算机可执行指令包括在执行时使得所述计算机系统编译用于所述C++代码的着色器的多个不同版本的计算机可执行指令,针对输入数据的特定配置优化所述着色器的多个不同版本中的至少一个。
9.如权利要求6所述的计算机程序产品,其特征在于,其中在执行时使得所述计算机系统针对所述至少一个指定方面编译多个不同的代表性较低级指令的计算机可执行指令包括在执行时使得所述计算机系统执行以下动作的计算机可执行指令: 编译代表性较低级指令的一个版本,为了在运行时处与不使用缓冲器混叠的输入数据一起使用而优化所述代表性较低级指令的一个版本;以及 编译代表性较低级指令的另一个版本,所述代表性较低级指令的另一个版本用于在运行时处与使用缓冲器混叠的输入数据一起使用。
10.如权利要求9所述的计算机程序产品,其特征在于,其中在执行时使得所述计算机系统分析将被提供到所述较高级源代码的所述至少一个指定方面的输入数据的配置的计算机可执行指令包括在执行时使得所述计算机系统确定所述输入数据不使用缓冲器混叠的计算机可执行指令;以及 其中在执行时使得所述计算机系统把所述指定的较低级指令绑定到可执行代码以实现所述较高级源代码的所述至少一个指定方面的意图的计算机可执行指令包括在执行时使得所述计算机系统在运行时处把所述代表性较低级指令的一个版本绑定到可执行代码的计算机可执行指令。
11.如权利要求9所述的计算机程序产品,其特征在于,其中所述代表性较低级指令的一个版本和所述代表性较低级指令的另一个版本二者均是高级着色器语言(“HLSL”)着色器。
12.如权利要求6所述的计算机程序产品,其特征在于,其中在执行时使得所述计算机系统针对所述至少一个指定方面编译多个不同的代表性较低级指令的计算机可执行指令包括在执行时使得所述计算机系统执行以下动作的计算机可执行指令: 编译抽象接口以表示所述至少一个指定方面;以及 编译可在运行时处动态地链接到所述抽象接口的较低级代码的多个不同部分。
13.如权利要求12所述的计算机程序产品,其特征在于,其中在执行时使得所述计算机系统编译抽象接口以表示所述至少一个指定方面的计算机可执行指令包括在执行时使得所述计算机系统编译物理到逻辑线程ID映射接口的计算机可执行指令;以及 其中在执行时使得所述计算机系统编译可在运行时处动态地链接到所述抽象接口的较低级代码的多个不同部分的计算机可执行指令包括在执行时使得所述计算机系统执行以下动作的计算机可执行指令:` 为直接的物理到逻辑线程ID映射编译较低级代码的一部分;以及 为更通用的间接的物理到逻辑线程ID映射编译较低级代码的另一部分。
14.如权利要求12所述的计算机程序产品,其特征在于,其中在执行时使得所述计算机系统分析将被提供到所述较高级源代码的所述至少一个指定方面的输入数据的配置的计算机可执行指令包括在执行时使得所述计算机系统确定输入数据使用直接的物理到逻辑线程ID映射的计算机可执行指令;以及 其中在执行时使得所述计算机系统把指定的较低级指令绑定到可执行代码以实现所述较高级源代码的所述至少一个方面的意图的计算机可执行指令包括在执行时使得所述计算机系统在运行时处把较低级代码的一部分动态链接到物理到逻辑线程ID映射接口的计算机可执行指令。
15.一种计算机系统,所述计算机系统包括: 一个或多个处理器; 系统存储器;以及 一个或多个计算机存储设备,所述一个或多个计算机存储设备具有存储在其上的表示代码分析器、编译器和运行时的计算机可执行指令,其中所述代码分析器被配置为: 访问较高级源代码的语句和表达式;检测到所述较高级源代码包括至少一个指定方面,所述指定方面在运行期间基于运行时配置变化到必要的程度;以及 向编译器指示所标识的至少一个方面; 其中所述编译器被配置为: 接收所标识的至少一个方面的指示; 访问较高级代码的语句和表达式;以及 把所访问的较高级源代码的语句和表达式编译成较低级代码的代表性较低级指令,包括: 针对所述至少一个指定方面编译多个不同的代表性较低级指令,所述多个不同的代表性较低级指令中的每一个被配置成正确地实现所述至少一个指定方面的意图,所述多个不同的代表性较低级指令中的每一个被配置用于在不同的运行时配置上执行;以及其中所述运行时被配置为: 分析将在执行期间使用的运行时配置; 确定选自多个不同的代表性较低级指令的指定的代表性较低级指令被配置用于基于所提供的运行时配置来执行; 以及 把所述指定的较低级指令绑定到可执行代码以实现所述较高级源代码的所述至少一个指定方面的意图。
【文档编号】G06F9/30GK103620553SQ201280028424
【公开日】2014年3月5日 申请日期:2012年5月29日 优先权日:2011年6月10日
【发明者】A·K·阿加瓦尔, W·朱, Y·莱瓦诺尼 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1