优化虚拟机环境中的应用程序接口的方法和装置的制作方法

文档序号:6655171阅读:115来源:国知局
专利名称:优化虚拟机环境中的应用程序接口的方法和装置的制作方法
技术领域
本公开总地涉及受管理运行时环境(managed runtime environment),更具体地说,涉及用于优化受管理应用程序接口的方法和装置。
背景受管理代码(managed code)是在受管理运行时环境(MRTE)的控制下执行的代码(例如,任何用Microsoft的C#(“C-sharp”)或者Visual Basic.NET编写的代码),而非受管理代码(unmanaged code)是在MRTE之外执行的代码(例如,COM组件和WIN32API函数)。典型地,受管理代码可以在运行时期间用于支持组件和应用,而非受管理代码可以用于支持与平台(即处理器)的低层交互。随着应用向在MRTE(例如Java虚拟机(JVM)和Microsoft.NET提供的公共语言运行时(CLR))上的可操作性移植,虚拟机正把应用从处理器移走(即,受管理运行时应用正变得对虚拟机依赖得更多,对处理器依赖得更少)。
如今,非受管理软件库函数(例如Intel集成性能原语(integrated performanceprimitive,IPP))一般被优化,以供在使用一种或者更多种IntelPentium(奔腾)技术和/或IntelItanium(安腾)技术实现的处理器上的非受管理环境中的执行。通过使用处理器专用指令(例如流式单指令/多数据(streaming single instruction,SIMD)扩展(SSE)指令、SSE2指令和/或Intel处理器提供的多媒体扩展(MMX)指令)编写定制手工(customhand)优化代码,所述非受管理软件库函数还可以被进一步优化,以在具体的处理器体系结构上进行操作。例如,字符串比较函数可以用非受管理代码实现,并且通过使用SSE2指令的定制手工优化编码被优化。与非受管理代码形成对比,受管理代码不可以以与非受管理代码相同的方式针对特定的处理器体系结构被优化,因为不存在定制手工优化受管理代码的机制。例如,典型地,受管理API只依赖于用于优化的即时(just-in-time,JIT)编译器。于是,受管理运行时应用不能利用在下层处理器上执行的处理器专用优化指令来使能(enable)和优化诸如音频处理、视频处理、图像处理、言语识别、加密等特征(feature)。
附图简要说明

图1是现有系统中配置的受管理运行时环境(MRTE)系统的示例性体系结构层级的框图表示。
图2是示例性MRTE系统的示例性体系结构层级的框图表示,所述示例性MRTE系统包括根据此处公开的本发明的教导的实施方案配置的处理器指令代理桩(processorinstruction proxy stub,PIPS)系统。
图3是示例性处理器指令代理桩(PIPS)系统的框图表示。
图4是可以由如图3所示的示例性PIPS系统优化的示例性非受管理代码的高级语言表示。
图5是示例性本机(native)汇编代码的代码表示,所述示例性本机汇编代码对应于图4的高级语言,并且包括优化所述本机汇编代码的PIPS。
图6和7是可被执行以实现如图3所示的示例性PIPS系统的示例性机器可访问指令的流程图表示。
图8是可以用于实现如图3所示的示例性PIPS系统的示例性处理器系统的框图表示。
详细描述参照图1,典型地,受管理运行时环境(MRTE)系统100的体系结构层级包括受管理运行时应用110、一个或更多个受管理应用程序接口(API)120、虚拟机(VM)130、编译器140、处理器专用指令150以及处理器160。使用在这里,术语“应用”是指操纵数据的一个或更多个方法、程序、函数、例程或子例程。
典型地,所述的受管理运行时应用110由程序员编写,以在MRTE中提供各种服务。受管理运行应用110的源代码可以用例如C#、Visual Basic.NET,和/或任何合适的面向对象编程语言编写。
诸如Microsoft.NET框架类库或Java类库的受管理API 120把受管理运行时应用110的源代码分别转换(即编译)为微软中间语言(MSIL)代码或Java字节码。所述受管理API 120作为受管理运行时应用110和VM 130之间的接口。
VM 130通过给受管理API 120提供诸如垃圾收集、存储器管理以及代码与基于角色的安全的服务,来操作抽象处理器对受管理运行时应用110进行管理。例如,处理器不可知的VM 130可以是微软公共语言运行时或者Java虚拟机。所述受管理API 120和所述VM 130独立于任何具体平台操作,从而MISL代码或者Java字节码并不以任何具体处理器为目标。相应地,例如即时(JIT)编译器的编译器140把所述MISL代码或所述Java字节码从受管理API 120转换(即重新编译)为可以由处理器160执行的本机汇编代码。
处理器160可以使用IntelPentium(奔腾)技术、IntelItanium(安腾)技术和/或Intel个人因特网客户体系结构(personal Internet client architecture,PCA)技术中的一种或更多种实现。处理器160能够执行诸如SSE指令、SSE2指令、MMX指令和/或其他合适指令的处理器专用指令150,来为所述MRTE系统100提供诸如加密、多媒体、音频编解码器、视频编解码器、图像编码、图像处理、信号处理、字符串处理、言语压缩、计算机视觉等的软件库函数。
然而,如上所述,非受管理软件库函数(即处理器专用指令150)可以针对处理器160被优化,而受管理代码(即受管理API 120)不能以同样的方式针对某些处理器体系结构被优化,因为之前不存在定制手工优化受管理代码函数的机制。即,对应于所述受管理运行时应用110的受管理API 120曾只依赖于JIT编译器140进行优化,并且所述JIT编译器140曾不能进行处理器专用优化。因此,在现有技术系统中,下层处理器160曾不能利用所述VM 130提供的服务,同时,所述受管理运行时应用110曾不能利用由下层处理器160提供的特征,因为所述VM 130曾不支持所述下层处理器160的某些处理器专用指令150。
在图2的实施例中,示出的包括处理器指令代理桩(PIPS)系统200的MRTE的体系结构层级包括受管理运行时应用210、一个或更多个API 220、一个或更多个优化的受管理API 225、VM 230、PIPS生成器235、编译器240、处理器专用指令250和处理器260。使用在这里,“桩(stub)”是指被提供来在程序执行期间完成各种任务的动态生成的代码的一部分。
一般来说,PIPS生成器235生成被称为PIPS(例如,图5的PIPS 510)的代码或指令集的一部分,以优化受管理运行时应用210在下层处理器260上的执行。例如,当受管理运行时应用210被安装时,所述PIPS生成器235基于所述处理器专用指令250生成PIPS。此外,所述PIPS生成器235把所述PIPS插入到某些受管理API 220中,以创建被所述受管理运行时应用210使用的优化的受管理API 225。如以下详细描述的,在受管理运行时应用210的执行期间,所述优化的受管理API 225优化下层处理器260的性能,而不是必须把非受管理代码(即处理器专用指令250)重写为受管理代码(即受管理运行时应用210)。优化的受管理API 225可以被储存在存储器(例如,图8的存储器1030)中,并且在受管理运行时应用210在MRTE中的执行期间被重新调用。结果,下层处理器260的特征可以被使能,以优化所述受管理运行时应用210在下层处理器260上的性能。
尽管图2所示的PIPS生成器235被描绘为PIPS系统200内分离的方框,但是PIPS生成器235完成的功能可以被集成到VM 230和/或JIT编译器240内。
参照图3,示例性PIPS系统300包括受管理运行时应用310、一个或更多个优化的受管理API 325、VM 330、JIT编译器340、本机汇编代码350,以及在MRTE中执行受管理运行时应用310的处理器360。VM 330可以执行与不同处理器兼容的处理器指令,以执行所述受管理运行时应用310。然而,典型地,所述VM 330可能不执行下层处理器360的某些处理器专用指令来使能若没有所述优化的受管理API 325将不可用的特征。相反,例如,在PIPS系统300执行受管理运行时应用310期间,所述JIT编译器340对优化的受管理API 325进行编译,以生成所述本机汇编代码350(例如,图5的本机汇编代码500)。具体来说,所述JIT编译器340只编译和执行所述本机汇编代码350,而不是必须对本机汇编代码350进行任何进一步的优化,因为在所述受管理运行时应用310的安装期间所述PIPS生成器235曾插入PIPS以生成所述优化的受管理API 325。换句话说,针对受管理运行时应用310在所述下层处理器360上的执行,PIPS之前曾优化了受管理运行时应用310的受管理API(即所述优化的受管理API 325)。因此,所述优化的受管理API 325对所述下层处理器360的性能进行优化,而无需所述JIT编译器340把非受管理代码(例如,图2的处理器专用指令250)重写为受管理代码(即受管理运行时应用310)。于是,所述本机汇编代码350被定制为对受管理运行时应用310在下层处理器360上的性能进行优化。
在图4的实施例中,字符串比较函数400用非受管理高级代码实现。典型地,针对使用上面提及的Intel处理技术中的一种或更多种实现的处理器,通过使用诸如SSE2指令的处理器专用指令的定制手工优化编码,所述字符串比较函数400被定制优化成C语言例程。然而,不存在针对特定的处理体系结构定制手工优化诸如C#或Java比较函数代码的受管理代码的机制。
如结合附图2和3所描述的,图5示出本机汇编代码500的示例性部分,所述本机汇编代码500包括PIPS 510以优化字符串比较函数400在下层处理器360上的性能。具体来说,所述本机汇编代码500包括由PIPS生成器235生成的PIPS 510。例如,在字符串比较函数400的安装期间,所述PIPS生成器235可以使用Microsoft.NET提供的本机编排语言(marshaling language,ML)代码生成所述PIPS 510。基于所述PIPS 510,PIPS生成器235创建对应于受管理运行时应用310的优化的受管理API 325。JIT编译器340编译与包括PIPS 510(如图5所示)的字符串比较函数对应的本机汇编代码500,以供所述下层处理器360执行。当所述字符串比较函数400在运行时期间被初始化时,所述VM 330为JIT编译器340取得所述优化的受管理API 325,以生成所述本机汇编代码500。所述JIT编译器340编译并执行优化的受管理API 325,而不是必须对优化的受管理API 325进行进一步优化,因为PIPS生成器235之前曾把PIPS 510插入到优化的受管理API 325中。于是,所述受管理运行时应用310可以从VM 330提供的服务(例如,垃圾收集,存储器管理和/或代码与基于角色的安全)和所述下层处理器360的特征两者中受益,因为下层处理器360的处理器专用指令250(即非受管理代码)通过PIPS 510被向上抽象到VM层。换句话说,优化的受管理API 325可以使能处理器专用指令,以使能下层处理器360的特征来操作受管理运行时应用310。
图6和7中分别描述了表示可以被处理器执行以优化受管理API的机器可访问指令的流程图600和700。本领域的普通技术人员将意识到,所述指令可以使用很多不同的编程代码中的任何代码以很多种不同方式中的任何方式来实现,所述编程代码储存在很多种计算机可访问介质的任何一种上,所述计算机可访问介质例如易失性或非易失性存储器或者其他大容量储存设备(例如,软盘,CD和DVD)。例如,机器可访问指令可以被实施在诸如可擦除可编程只读存储器(EPROM)、只读存储器(ROM)、随机访问存储器(RAM)、磁介质、光介质和/或任何其他合适类型的介质的机器可访问介质中。可替换地,机器可访问指令可以用可编程门阵列和/或专用集成电路(ASIC)实施。此外,尽管图6和7示出特定的动作顺序,但是本领域的普通技术人员将意识到,这些动作可以以其他时间顺序完成。再者,结合图2和5,流程图600和700仅被提供和描述为优化受管理API的一种方法的实施例。
在图6的实施例中,流程图600以PIPS生成器235生成与下层处理器260的处理器专用指令250相关联的PIPS 510(方框610)开始。例如,在受管理运行时应用210的安装期间,PIPS生成器235可以基于对应于下层处理器260的处理器标识符(identifier)生成PIPS 510。如上所述,当下层处理器260的诸如音频处理、视频处理、图像处理、言语识别、加密等特征可能不能以其他方式可用时,处理器专用指令250使能这些特征,以优化受管理运行时应用210在下层处理器260上的性能。基于PIPS 510,PIPS生成器235生成优化的受管理API 225(方框620)。具体来说,PIPS生成器235把PIPS 510插入到某些对应于受管理运行时应用210的受管理API 220中。PIPS生成器235储存优化的受管理API 225,从而在受管理运行时应用210在下层处理器260上的执行期间,优化的受管理API 235可为JIT编译器240所用。
在图7的实施例中,流程图700以JIT编译器240编译并执行对应于受管理运行时应用210的优化的受管理API 225(方框710)开始。如上所述,JIT编译器240可以编译所述优化的受管理API 225,而无需进一步优化所述优化的受管理API 225,因为PIPS生成器235之前曾把与处理器专用指令250相关联的PIPS 510插入到所述优化的受管理API225中。即,所述PIPS 510将受管理运行时应用210定制手工优化为通过优化的受管理优化API 225工作在下层处理器260上。所述JIT编译器240使能下层处理器260的对应于处理器专用指令250(方框640)的特征。在受管理运行时应用210在下层处理器260上的执行期间,除了VM 230提供的诸如垃圾收集、存储器管理和/或代码与基于角色的安全的服务外,所述受管理运行时应用210可以利用优化的受管理API 225提供的诸如加密、多媒体、音频编解码器、视频编解码器、图像编码、图像处理、信号处理、字符串处理、言语压缩、计算机视觉等软件库函数。于是,受管理的优化的API 225允许受管理运行时应用210执行处理器专用指令250来使能下层处理器260的特征,所述特征不然在另一个处理器上将会不可用或无效。此外,受管理的优化的API 225通过本机汇编代码500定制手工优化受管理运行时应用210在下层处理器260上的性能。
此处公开的方法和装置非常适合实现欧洲计算机管理协会(ECMA)公共语言基础结构(CLI)(第二版本,2002年12月)和ECMA C#语言规范(第二版本,2002年12月)的源代码。然而,本领域的普通技术人员将意识到,本公开的教导可以应用于其他运行时环境下的源代码。
图8是适于实现此处公开的方法和装置的示例性处理器系统1000的框图。处理器系统1000可以是桌面型计算机、膝上型计算机、笔记本式计算机、个人数字助理(PDA)、服务器,因特网应用设备(appliance)或任何其他类型的计算设备。
图8中示出的处理器系统1000包括芯片组1010,所述芯片组1010包括存储器控制器1012和输入/输出(I/O)控制器1014。众所周知,芯片组一般提供存储器和I/O管理功能,以及可被处理器1020访问或使用的多个通用和/或专用寄存器、计时器等。处理器1020用一个或更多个处理器实现。例如,处理器1020可以用IntelPentium(奔腾)技术、IntelItanium(安腾)技术、IntelCentrinoTM(迅驰)技术和/或IntelXScale技术中的一种或更多种来实现。可替换地,其他处理技术可以用于实现处理器1020。处理器1020包括缓存(cache)1022,如本领域的普通技术人员将容易意识到的,缓存1022可以用一级统一缓存(L1),二级统一缓存(L2),三级统一缓存(L3)和/或任何其他适合的结构实现以储存数据。
常规地,存储器控制器1012完成使处理器1020能够通过总线1040访问主存储器1030并与之通信的功能,所述主存储器1030包括易失性存储器1032和非易失性存储器1034。所述易失性存储器1032可以用同步动态随机访问存储器(SDRAM)、动态随机访问存储器(DRAM)、RAMBUS动态随机访问存储器(RDRAM)和/或任何其他类型的随机访问存储器设备来实现。非易失性存储器1034可以用闪存存储器、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)和/或其他期望类型的存储器设备来实现。
处理器系统1000还包括耦合到总线1040的接口电路1050。接口电路1050可以用任何类型的已知接口标准来实现,所述接口标准例如以太网接口、通用串行总线(USB)、第三代输入/输出(3GIO)接口和/或任何合适的其他类型的接口。
一个或更多个输入设备1060被连接到接口电路1050。一个或多个输入设备1060允许用户向处理器1020输入数据和命令。例如,一个或多个输入设备1060可以用键盘、鼠标、触摸敏感显示器、跟踪板、跟踪球、指向柱(isopoint)和/或语音识别系统实现。
一个或更多个输出设备1070也被连接到接口电路1050。例如,一个或多个输出设备1070可以用显示设备(例如,发光二极管显示器(LED),液晶显示器(LCD),阴极射线管(CRT)显示器,打印机和/或扬声器)实现。因此,除其他设备外,接口电路1050一般包括图形驱动器卡。
处理器系统1000还包括一个或更多个大容量储存设备1080以储存软件和数据。这样的一个或多个大容量储存设备1080的实施例包括软盘和驱动器、硬盘驱动器、致密盘和驱动器,以及数字多用途盘(DVD)和驱动器。
接口电路1050还包括诸如调制解调器或网络接口卡的通信设备,以便于通过网络与外部计算机交换数据。处理器系统1000和所述网络之间的通信链路(link)可以是任何类型的网络连接,例如以太网连接、数字用户线(DSL)、电话线、蜂窝电话系统、同轴电缆等。
对一个或多个输入设备1060、一个或多个输出设备1070、一个或多个大容量储存设备1080和/或所述网络的访问一般由I/O控制器1014以常规的方式控制。具体来说,I/O控制器1014完成使处理器1020能够通过总线1040和接口电路1050与一个或多个输入设备1060、一个或多个输出设备1070、一个或多个大容量储存设备1080和/或所述网络通信的功能。
尽管图8所示的组件被描绘成处理器系统1000内的分离的方框,但是这些方框中的一些完成的功能可以被集成到单个半导体电路中,或者可以用两个或更多个分离的集成电路实现。例如,虽然存储器控制器1012和I/O控制器1014被描绘成芯片组1010内的分离的方框,但是本领域的普通技术人员会容易地理解,存储器控制器1012和I/O控制器1014可以被集成到单个半导体电路中。
虽然这里已描述了某些示例性方法、装置和制品,但是本专利的覆盖范围不限于此。相反,本专利覆盖正好落入所附权利要求书在字面上或者在等同原则下的范围内的所有方法、装置和制品。例如,尽管以上公开了除其他组件外包括软件或硬件上执行的固件的示例性系统,但是应该注意,这样的系统仅仅是例证性的,而不应被视为限制性的。具体来说,预期任何或所有被公开的硬件=软件和/或固件组件可以被排他地实施在硬件中、排他地实施在软件中、排他地实施在固件中,或是被实施在硬件、软件和/或固件的某种组合中。
权利要求
1.一种方法,包括生成与一条或更多条处理器指令相关联的处理器指令代理桩;以及基于所述处理器指令代理桩生成优化的受管理应用程序接口,以使能与所述一条或更多条处理器指令相关联的处理器的一个或更多个特征。
2.如权利要求1所定义的方法,其中生成与所述一条或更多条处理器指令相关联的所述处理器指令代理桩的操作包括在与受管理运行时环境的虚拟机相关联的层中生成所述处理器指令代理桩。
3.如权利要求1所定义的方法,其中生成与所述一条或更多条处理器指令相关联的所述处理器指令代理桩的操作包括在受管理运行时应用的安装期间生成所述处理器指令代理桩。
4.如权利要求1所定义的方法,其中生成与所述一条或更多条处理器指令相关联的所述处理器指令代理桩的操作包括生成与流式SIMD扩展(SSE)指令、SSE2指令和多媒体扩展指令中的一种相关联的所述处理器指令代理桩。
5.如权利要求1所定义的方法,其中生成与所述一条或更多条处理器指令相关联的所述处理器指令代理桩的操作包括通过虚拟机的编排语言代码生成所述处理器指令代理桩。
6.如权利要求1所定义的方法,其中生成与所述处理器的所述一条或更多条处理器指令相关联的所述处理器指令代理桩的操作包括响应于识别与所述一条或更多条处理器指令相关联的所述处理器,生成所述处理器指令代理桩。
7.如权利要求1所定义的方法,还包括,基于所述优化的受管理应用程序接口,在受管理运行时应用的执行期间使能与所述一条或更多条处理器指令相关联的特征。
8.一种具有指令的机器可访问介质,当所述指令被执行时,导致机器生成与一条或更多条处理器指令相关联的处理器指令代理桩;以及基于所述处理器指令代理桩生成优化的受管理应用程序接口,以使能与所述一条或更多条处理器指令相关联的处理器的一个或更多个特征。
9.如权利要求8所定义的机器可访问介质,其中所述指令导致所述机器通过在与受管理运行时环境的虚拟机相关联的层中生成所述处理器指令代理桩来生成与所述一条或更多条处理器指令相关联的所述处理器指令代理桩。
10.如权利要求8所定义的机器可访问介质,其中所述指令导致所述机器生成与所述一条或更多条处理器指令相关联的所述处理器指令代理桩的操作包括在受管理运行时应用的安装期间生成所述处理器指令代理桩。
11.如权利要求8所定义的机器可访问介质,其中所述指令导致所述机器生成与所述一条或更多条处理器指令相关联的所述处理器指令代理桩的操作包括生成与流式SIMD扩展(SSE)指令、SSE2指令和多媒体扩展指令中的一种相关联的所述处理器指令代理桩。
12.如权利要求8所定义的机器可访问介质,其中所述指令导致所述机器通过由虚拟机的编排语言代码生成所述处理器指令代理桩来生成与所述一条或更多条处理器指令相关联的所述处理器指令代理桩。
13.如权利要求8所定义的机器可访问介质,其中所述指令导致所述机器通过响应于识别与所述一条或更多条处理器指令相关联的所述处理器生成所述处理器指令代理桩来生成与所述处理器的一条或更多条处理器指令相关联的所述处理器指令代理桩。
14.如权利要求8所定义的机器可访问介质,其中所述指令导致所述机器基于所述优化的受管理应用程序接口使能与所述一条或更多条处理器指令相关联的特征,以用于受管理运行时应用的执行。
15.如权利要求8所定义的机器可访问介质,其中所述机器可访问介质包括可编程门阵列、专用集成电路、可擦除可编程只读存储器、只读存储器、随机访问存储器、磁介质和光介质中的一种。
16.一种装置,包括处理器指令代理桩生成器,所述处理器指令代理桩生成器生成与一条或更多条处理器指令相关联的处理器指令代理桩,并且基于所述处理器指令代理桩生成优化的受管理应用程序接口;以及编译器,所述编译器编译所述优化的受管理应用程序接口,以使能与所述一条或更多条处理器指令相关联的处理器的一个或更多个特征。
17.如权利要求16所定义的装置,其中所述处理器指令代理桩生成器被集成到虚拟机和所述编译器中的一个。
18.如权利要求16所定义的装置,其中所述处理器指令代理桩生成器识别与所述一条或更多条处理器指令相关联的处理器,以生成所述处理器指令代理桩。
19.如权利要求16所定义的装置,其中一条或更多条处理器指令包括流式SIMD扩展(SSE)指令、SSE2指令和多媒体扩展指令中的一种。
20.如权利要求16所定义的装置,其中所述编译器包括即时编译器。
21.如权利要求16所定义的装置,其中所述处理器指令代理桩在与受管理运行时环境的虚拟机相关联的层中被生成。
22.如权利要求16所定义的装置,其中所述优化的受管理应用接口程序使能与所述一条或更多条处理器指令相关联的特征,以用于受管理运行时应用的执行。
23.一种处理器系统,包括动态随机存储器(DRAM),所述动态随机存储器储存一个或更多个优化的受管理应用程序接口;以及耦合到所述DRAM的处理器,所述处理器生成与一条或更多条处理器指令相关联的处理器指令代理桩,并且基于所述处理器指令代理桩生成优化的受管理应用程序接口,以使能与所述一条或更多条处理器指令相关联的所述处理器的一个或更多个特征。
24.如权利要求23所述的处理器系统,其中一条或更多条处理器指令包括流式SIMD扩展(SSE)指令、SSE2指令和多媒体扩展指令中的一种。
25.如权利要求23所定义的处理器系统,其中所述处理器指令代理桩在与受管理运行时环境的虚拟机相关联的层中被生成。
26.如权利要求23所定义的处理器系统,其中所述处理器指令代理桩在受管理运行时应用的安装期间被生成。
27.如权利要求23所定义的处理器系统,其中在受管理运行时应用的执行期间,所述的优化的受管理应用接口程序使能与所述一条或更多条处理器指令相关联的特征。
全文摘要
在虚拟机(VM)环境下用于优化的应用程序接口(API)的方法和装置。首先,生成与一条或更多条处理器指令相关联的处理器指令桩(PIPS),其中,术语“桩”指被提供来在程序执行期间完成各种任务的部分动态生成的代码。然后,基于所生成的PIPS,生成优化的应用程序接口,以执行所述一条或更多条处理器指令。该优化操作克服了这样的事实在VM环境中的JIT编译器不能进行处理器专用优化,即不能利用下层处理器提供的特征。
文档编号G06F9/455GK1922575SQ200580005548
公开日2007年2月28日 申请日期2005年2月2日 优先权日2004年2月20日
发明者古鲁拉杰·纳吉德拉, 斯图尔特·泰勒 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1