CN1306399C - 用于网络处理器的虚拟机 - Google Patents
用于网络处理器的虚拟机 Download PDFInfo
- Publication number
- CN1306399C CN1306399C CNB2003101157384A CN200310115738A CN1306399C CN 1306399 C CN1306399 C CN 1306399C CN B2003101157384 A CNB2003101157384 A CN B2003101157384A CN 200310115738 A CN200310115738 A CN 200310115738A CN 1306399 C CN1306399 C CN 1306399C
- Authority
- CN
- China
- Prior art keywords
- bytecode
- division
- collection
- code
- resource
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/45—Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Multi Processors (AREA)
Abstract
本发明公开了一种编译数据的方法、系统,以及存储有实现所述方法的指令的制品。本发明公开了用于网络处理器的虚拟机的多个实施例。
Description
技术领域
本发明一般地涉及网络处理器,更具体地,本发明涉及用于网络处理器的虚拟机。
背景技术
软件一般用高级语言编写,然后被编译成机器可读的语言,或者本机指令,以被处理器执行。虚拟机可以帮助编译高级语言。作为编译过程的一部分,软件的各种功能可以被映射到处理器的特定模块来执行。这种处理器编程方法对于单个处理器或者包含对称多处理器平台的设备的编程可能是足够有效的,但是对于如网络处理器的具有多个异构处理单元的设备的编程,可能就不是特别有效的方法了。
对如网络处理器的多核心处理器编程可能需要作出诸如哪个处理器将执行特定的模块的判断,并且可能要求程序员作出关于功能划分的决定,以及怎样最好地利用每个处理核心。这可能导致对多核心处理器进行编程变得繁重和复杂,还使得对可用的处理资源的使用不那么有效。因此,需要改进的编写代码的方法,以及包含更有效地使用处理资源的能力的虚拟机。
发明内容
为了解决上述问题,本发明的一个方面提供了一种编译数据的方法,该方法包括:由虚拟机接收第一代码集;将第一代码集的至少一部分提供给编译器;将第一代码集的至少一部分划分为多个代码分组;将代码分组的至少一个编译成多个第二代码集;将至少两个第二代码集提供给不同的处理器资源。
本发明的另一个方面还提供了一种编译数据的方法,该方法包括:接收两个或多个字节码集;将两个或多个字节码集分组为两个或多个任务,其中两个或多个任务的至少一个可以包括复合的任务;将两个或多个任务划分为两个或多个子任务;将两个或多个子任务的至少一部分提供给处理设备的不同资源。
本发明的另一个方面还提供了一种编译数据的方法,该方法包括:由设备接收软件程序,其中程序包括用高级语言编写的多个指令;为多个指令的至少一部分确定关系结构;确定设备的可用资源;将程序划分为多个任务,并将多个任务的至少一部分分别提供给设备的多个资源,其中划分至少部分地基于关系结构和可用资源。
本发明的另一个方面还提供了一种编译数据的系统,该系统包括网络设备和编译器,其中编译器在操作中被配置来接收相关的字节码集,将字节码集划分为多个被划分的代码,以及将多个被划分的代码的至少一部分分别提供给多个处理单元,其中划分至少部分地基于网络设备的可用资源,以及包含在字节码集的至少一部分中的功能。
本发明的另一个方面还提供了一种制品,该制品包括存储介质,存储介质包括所存储的指令,当这些指令被处理器执行时,导致接收两个或多个代码集,将两个或多个代码集分组为一个或多个任务,将一个或多个任务划分成两个或多个子任务,并将两个或多个子任务提供给一个或多个处理器。
根据本发明的、用于网络设备的虚拟机具有可以更有效地使用处理资源的能力。
附图说明
在说明书的结束部分具体指出并清楚地要求了被作为所要求保护主题的实施例的主题。但是,通过结合附图参照下面更详细的描述,可以更好地理解所要求保护主题的实施例,这关于组织和操作的方法,以及其目的、特征和优点,在附图中:
图1是适合于实施所要求保护主题的一个实施例的设备;
图2是根据所要求保护主题的一个实施例的虚拟机的框图;
图3是根据所要求保护主题的一个实施例的编译器的框图。
具体实施方式
所要求保护主题的实施例可以包括用于网络处理器的虚拟机。如网络设备的计算设备通常可以包含处理器,如网络处理器,并且可以由一个或多个处理单元组成。网络处理器可以执行被称为汇编语言的代码,这种语言是为特定类型的处理器特别编写的低级语言。用于一种类型或类别的处理器的汇编语言代码一般与另一类型的处理器是不兼容的。例如,特别为IntelXscale RISC处理器编写的低级汇编语言有可能不能在IntelPentiumTM处理器上执行,因为这两个处理器使用不同类型的指令集。这可能导致需要根据执行软件的处理器类型来编写同一软件的几个版本以实现相同的功能。为了帮助解决这个问题,已经开发了也可以被称为通用编程语言的更高级的编程语言,这在很大程度上使得底层处理器变得不为人知。例如,C、C++、BASIC以及FORTRAN语言都允许程序员编写非特定处理器专用的代码。用于特定处理器的编译器接收以这种语言所编写的源代码,并且可以产生用于特定目标处理器的指令。但是这些方法不包括以多个异构处理单元为目标的能力。
近来,这些所谓的通用编程语言可以为程序员提供这样的能力:只编写一次用于特定功能的代码,并通过抽象处理器指令集将代码用于几个不同的计算设备或处理器,使得在不同的平台间计算功能是相似的。这些非处理器专用的、并且可能依赖一个或多个虚拟机来抽象用于底层处理器的指令的编程语言的另外的例子,例如可以包括Java和C#。这些类型的语言一般被编译成固定而标准化的虚拟机指令集合,该集合可以保持恒定而与将接收代码的目标处理器无关。这些虚拟指令被统称为字节码。字节码可以被分组成一个或多个字节码模块,并且一个或多个字节码模块可以构成字节码汇编。这些字节码指令最终被编译成特定设备原有的机器码的形式,其中,接收字节码的设备可以使用包含虚拟机的字节码编译器来进行编译。
网络处理器在编译代码时可以利用一种或多种类型的虚拟机。虚拟机可以在高级指令集、编译器和作为结果产生的编译后的代码之间提供某种级别的功能性。例如,虚拟机可以确定运行时间联接(linkage),或者将字节码模块映射到处理器的各模块来执行。但是,如在后面详细示出的一样,为了编程的目的,虚拟机不会将一个或多个异构处理单元作为单个处理器。
此外,网络处理器,如基于IntelIXP 2800的网络处理器,可以包含多个处理单元,这些处理单元例如可以包括处理器核心和多个微引擎。一般地,如字节码的代码是为单独的处理单元编写的,并且虚拟机没有将为一个特定处理单元指定的字节码模块映射到另一个处理单元来执行的能力,或者作出任何关于在一个或多个处理单元之间对字节码模块或字节码模块的部分进行划分的决定的能力。此外,字节码模块一般被看作为是关系清楚的,这意味着,例如,当一套模块被提交给虚拟机时,即使模块可能需要使用相同的处理单元或者执行补充或相关的功能,但当确定如运行时间联接的性质时,也不考虑所有模块的功能性。至少部分地由于这些限制,可能有必要为每个处理单元编写软件,并且在软件被提交给虚拟机时作出怎样对每个任务进行划分、以及哪个处理单元将执行每个任务的决定。这可能导致对网络处理器的处理能力的低效率的使用,并给如网络处理器的多核心处理器的编程增加了复杂性,就如在后面详细示出的一样。
所要求保护的主题的实施例可以包括虚拟机,该虚拟机包含有接收一个或多个字节码模块、并将一个或多个字节码模块映射到多核心处理器的一个或多个处理单元的能力,其中多核心处理器可以由多个异构处理器单元组成,例如由一个或多个微引擎和/或一个或多个处理器核心组成。所述的映射可以至少部分地基于处理器的可用资源、以及一个或多个字节码模块的一个或多个期望的功能来进行。
值得注意的是,说明书中引用的任何“一个实施例”或“实施例”是指结合实施例描述的具体的特征、结构或特点被包含在所要求保护主题的至少一个实施例中。在说明书的不同地方出现的短语“在一个实施例中”,不一定都指同一个实施例。
为了提供对所要求保护主题的实施例的完整的理解,这里可能阐述了大量的特定细节。但是,对于本领域的普通技术人员,所要求保护主题的实施例可以在没有这些特定细节的情形被来实施。在其他情况下,为了不使所要求保护主题的实施例变得模糊,没有对公知的方法、过程、元件和电路进行描述。可以理解,这里公开的特定结构或功能细节可以是代表性的,而不一定限制所要求保护主题的范围。
现在具体地参照附图,在附图中,相似的部件全部用相似的标号指定,图1中图示了适合于实施所要求保护主题的一个实施例的设备。图1是设备100的框图,设备100可以包含如网络设备106的设备。网络设备106例如可以包含多业务交换器、宽带接入平台、网络交换机(Webswitch)或者网络应用设备。在这个实施例中,网络设备106可以由如IntelIXP2800网络处理器的网络处理器104组成。网络设备106还可以包含一种或多种类型的存储器112,存储器可以包含例如同步动态随机存储器(SDRAM)和静态随机存储器(SRAM),以及一个或多个接口120,接口具有与一个或多个其他设备通信的能力。网络设备106的一个或多个元件可以通过例如PCI总线的一个或多个总线(未示出)通信。网络处理器104可以由例如SRAM或SDRAM的一种或多种类型的内部存储器108,以及可以包含例如总线接口的一种或多种类型的接口116组成。网络处理器104还可以包含如处理核心114的一个或多个处理单元,例如处理核心可以是IntelStrongARM核心(ARM是英国ARM有限公司的商标)。处理器核心114还可以包含中央控制器(未示出),例如,其帮助为网络处理器的其他资源加载代码,并执行其他的通用目的计算类型功能,如处理协议、例外以及对包处理的额外支持。网络处理器104还可以包含引擎124,引擎可以包含一个或多个硬件专用的加速功能,例如,例如加密引擎、CRC校验器或乘法引擎。引擎124可以包括执行一个或多个专门功能的能力,这些功能例如可以从一个或多个处理单元卸载下来,但是不可以被归类为一个处理器单元。
网络处理器104可以包括一个或多个额外的如微引擎118的处理单元,在操作中,额外的处理单元可以被配置来与处理器核心114相互作用。一个或多个微引擎118可以包括存储器(未示出),例如存储器具有存储指令的能力。在一个实施例中,有十六个微引擎,并且每个微引擎都包括处理有八个程序线程的能力。十六个微引擎可以用例如包括存储器系统108、引擎124和总线接口116的共享资源来操作,但是存在另外的构造。所要求保护主题可以应用于任何具有多于一个处理器核心和/或多于一个微引擎的处理器,注意到这点很重要。
图2图示了系统200,该系统并入了可以被实现为由处理器执行的软件的功能。执行软件的处理器可以是通用或者专用的处理器,如来自Intel公司制造的处理器家族的处理器,或者前面参照图1的网络处理器104描述的一个或多个处理器。软件可以包括编程逻辑、指令或数据以实现所要求保护主题的实施例的一定的功能。软件可以被存储在机器可访问介质或计算机可读的介质中,这些介质如只读存储器(ROM)、随机存取存储器(RAM)、磁盘(例如软盘和硬盘)、光盘(例如CD-ROM)或者任何其他数据存储介质。在所要求保护主题的一个实施例中,介质可以存储压缩和/或加密格式的编程指令,以及是在被处理器执行前可能必须被编译的或被安装程序(installer)安装的指令。或者,所要求保护主题的实施例可以被实现为特定的硬件元件,元件包含用于执行所列举的功能的硬布线逻辑,或者通过程序通用目的计算元件和常规硬件元件的任何组合来实现。
在所要求保护主题的一个实施例中,系统200可以包含虚拟机。如前所述,虚拟机可以被配置来接收可以是非专用于特定处理单元的一个或多个字节码,解释一个或多个字节码,并将一个或多个字节码进行编译和/或映射以由一个或多个处理单元使用。在操作中,如所述的虚拟机可以为程序员提供正被编程的处理器的统一视图,并为程序员提供一个单片处理器的共用范式,而与组成正被编程的处理器的处理单元的数量无关。
在操作中,虚拟机202可以接收一个或多个字节码模块204。字节码装入程序206可以接收一个或多个模块204,但是也可以使用多种接收一个或多个字节码模块的方法。在这种环境下,接收可能包括下述功能,该功能至少部分地包括解释或读取一个或多个字节码模块,并且接收不限于对模块的物理接收。字节码装入程序206一般作为用于创建或汇编一个或多个字节码的程序和虚拟机202之间的逻辑字节码接收器接口。在接收一个或多个字节码模块204之后,模块的至少一部分内容可以被提供到如即时(JIT)编译器208的编译器。在接收一个或多个字节码模块204之后,JIT编译器208可以执行一个或多个编译任务,例如包括确定资源分配,如一个或多个字节代码的运行时间联接。在一个实施例中,运行时间联接可以是一种类型的资源分配,其中,模块204可以全部或部分地被分配给一个或多个处理单元来执行。
例如,装入程序206可以接收字节码模块。装入程序206可以将这个模块提供给JIT编译器208。JIT编译器208可以通过将模块的一部分编译成处理器214的本机指令,即这里示出的核心本机二进制码(core nativebinaries)210,来将模块的一部分功能映射到网络处理器的核心处理器214。此外,JIT编译器208可以通过将模块的另一部分编译成微引擎218的本机指令,即这里示出的、也被称为微块的微引擎本机二进制码216,来将模块的另一个部分映射到如引擎124或微引擎218的一个或多个其他的资源上。接收一个或多个微块的核心处理器和一个或多个微引擎,然后可以执行一个或多个微块。JIT编译器的特定功能可以参照图3被更好地理解。
图3是JIT编译器的框图,其可以与图2的JIT编译器208在功能上是相似的。图3中示出的是JIT编译器300的框图,说明了由根据所要求保护主题的一个实施例的虚拟机执行的编程逻辑。在这个实施例中,虚拟机可以指用来实现这里描述的一个或多个块的功能的软件和/或硬件。在所要求保护主题的这个实施例中,管理系统可以被实现为网络设备106的一部分。但是,可以理解,这个功能可以被位于通信网络中任何地方的任何设备或设备的组合实现,这仍旧落在所要求保护主题的范围内。
在操作中,图3中图示的编程逻辑的实现可以执行下面的功能,但是所给出的顺序并不意味着在实现时进行下面的功能的特定顺序。字节码分析器302可以被提供一个或多个字节码模块或者一个或多个字节码汇编,并且一个或多个模块或汇编可以从如装入程序206的字节码装入程序被接收。分析器302可以解释一个或多个字节码,这种解释包括读一个或多个字节码的至少一部分内容,以至少部分地确定模块中表示的一个或多个功能。分析器302可以包括用来确定一个或多个字节码的一个或多个功能之间的关系结构的功能,这将在后面更详细地解释,这种关系结构也可以称为抽象语法图。在一个实施例中,分析器302可以将一个或多个字节码汇编成一个或多个任务,并且在这种情况下,例如,一个任务可以包括一个或多个字节码的一部分。
代码划分启发式引擎(Code Partitioning Heuristics Engine)304可以接收至少一部分语法图,语法图可以由一个或多个任务组成。至少部分地基于抽象语法图、一个或多个任务和/或一个或多个与引擎相关的启发,引擎304可以确定例如执行一个或多个任务的资源需要、一个或多个处理器顺序或并行执行任务的能力以及对任务进行划分的能力的这些因素。基于上面提到的因素,引擎304可以至少部分地将一个或多个任务划分为一个或多个子任务。例如,一个或多个任务或子任务可以包括一个或多个字节码。当进行划分时,引擎304可以考虑一个或多个字节码中所包含的所有任务,以及例如可以用来处理任务的资源。引擎304还可以包括产生一个或多个在被划分的任务之间的一个或多个逻辑链接的能力,所述链接例如可以是一个或多个代码集,这些代码集提供在一个或多个任务之间的通信,这些任务可以互相依赖并且可以在不同的处理单元上被处理。例如,呼叫函数可以从一个处理单元被提供给另一个处理单元,并且用于提供呼叫函数的代码例如可以由引擎304产生。
一旦一个或多个任务被划分以被一个或多个处理单元处理,被划分的任务就被发送到合成器310,其中,合成器可以是专用于一个处理单元或其他资源的,不过重要的是注意所要求保护的主题不限于此。例如,合成器可以进行将非专用的字节码译为与其相关的处理单元或资源专用的本机指令。被划分的任务被发送给与被指定来处理一个或多个任务的处理单元或资源相关的合成器310。例如,除将被划分的任务提供给处理单元之外,合成器310可能能够提供一个或多个任务或子任务到与其相关的处理单元的额外的映射。例如,合成器310可以改变由引擎304提出的映射方案,并提供额外的优化,或者可以利用与微引擎相关的如硬件加速的特定硬件特征,例如图1的引擎124。
所提出的映射信息然后可以被提供给评分模块312,该模块可以包括确定关于由一个或多个合成器310或代码划分引擎304确定的映射的效率的一个或多个量度(measure)或度量标准(metrics)的能力。评分模块312可以接收一个或多个目标(goal)314,目标被用来确定一个或多个度量标准。目标可以以多种方式被引入,包括但不限于源代码实现(instrumentation)或注释、编辑元数据、配置文件或流、或者外部管理设备。评分模块312可以将适宜度分数作为适应反馈316提供给代码划分引擎304。虚拟机的至少一部分功能可以至少部分地基于适宜度分数被重复。例如,在一个实施例中,处理可以一直被重复直到达到阈值容许分数,或者可以被重复特定的次数。在本上下文中,分数可以是任何可以被用来确定具体映射方案的期望度的量度或度量标准。度量标准的例子可以包括例如设备利用率、执行路径等待时间或者存储器的利用。一旦适宜度分数达到了使得对虚拟机的至少一部分功能的重复不再是所期望的,迭代就可以停止,并且可以使用接收最期望的结果如用于划分的最高分数的分区。或者,如果一个或多个目标没有被满足,则映射方案可以停止,并且这些结果例如可以通过虚拟机接口被作为通知提供。参照编译器308描述的功能块,在下面还可以进行更详细的描述。
在一个实施例中,字节代码分析器302可以接收或读取一个或多个字节码,并将它们汇编成抽象语法图。例如抽象语法图可以包括字节码如程序的关系结构。在这种情况下,抽象语法图可以包括一个或多个字节码的两个或多个功能之间的任何关系结构。例如,抽象语法图可以包括边和顶点的集合,其中,顶点表示功能,边代表功能的执行路经。当然,应该理解,这只是一个实施例,对多个任务的任何抽象都可以被用在所要求保护主题的至少一个实施例中,所述抽象提供将任务作为组的理解。在这个实施例中,字节码被汇编成程序,这可以提供一个或多个其他模块来确定一个或多个字节码的一个或多个目的的能力,这可以作为等同的实施例。
在一个实施例中,代码划分启发式引擎304可以从分析器302接收抽象语法图,并且,可以作为该语法图的一部分接收一个或多个任务。在这个实施例中,引擎304可以具有确定设备可用资源的能力,例如核心处理器和微引擎的数量和能力。此外,引擎304可能能够确定设备的其他可以资源,例如加密引擎,其可能和处理单元不相关,但是可能能够对在一个或多个任务中所公开的相同功能进行仿真。在这个可选的实施例中,语法图公开的一个或多个功能可以被映射到除一个或多个处理单元之外的资源,例如,网络设备的一个或多个硬件元件,如同图1的引擎124。
设备的可用资源可以至少部分地从资源描述符306提供,其例如可以包括关于例如网络设备的处理单元的一个或多个资源,或者如硬件或软件的其他可用资源的信息。资源描述符306还可以提供关于一个或多个资源的信息,如处理能力、限制或可用性。此外,引擎304可以确定任务的各种目的,并且可以确定如任务所期望的定时和优先权的因素。引擎304可以确定一个或多个任务是否可以被划分为一个或多个子任务,或者例如如果一些任务是被串起来的或彼此依赖,它们是否可以与其他任务并行处理或它们是否必须被顺序处理。引擎304可以基于一个或多个这些因素,来将字节码或任务映射到设备的特定处理器。这个映射信息可以被提供给一个或多个合成器310。
在一个实施例中,一个或多个逻辑合成器310可以从代码划分启发式引擎304接收一个或多个任务。合成器可以与运行虚拟机的网络设备的单独的处理单元相关联。例如,对于在例如具有十七个处理单元的IntelIXP 1200网络处理器上执行的虚拟机,JIT编译器308可以由十七个逻辑合成器组成。或者,单个合成器可以与一类处理单元相关联,而不是与单个处理单元相关联。一个或多个合成器310可以评估由引擎304提供的任务的映射结构,并且可以改进或改变映射结构。这种改进或改变可以是因为任何数量的原因,例如,如效率、资源的可用性、处理器的优先权或者限制。在其他实施例中,一个或多个合成器310可以不对由代码划分引擎304执行的映射进行任何改变。但是,如果一个或多个合成器310不改变映射,那么一个或多个合成器310可以将一个或多个任务的映射度量标准提供给评分模块312。这些映射度量标准可以被用来确定适宜度分数,该适宜度分数可以包括对引擎304进行划分以及将一个或多个字节码翻译成本地二进制码的效率如何的度量。
在一个实施例中,适宜度分数包括确定一些因素,如由引擎304执行的映射的效率,基于映射成功处理任务的能力,或者与映射或任务分配相比,处理单元或其他资源的可用容量。评分可以是基于一个或多个目标314,目标可以包括这些因素,例如,如优先权、所期望的功能或定时,并且,在一个实施例中,可以由用户提供。或者,例如,目标314可以被自动产生,并且可以包括程序专用属性。此外,一个或多个度量标准可以从一个或多个合成器310被提供给评分模块312,并且评分模块312可以至少部分地基于从一个或多个合成器310提供的一个或多个度量标准来确定分数。适宜度分数可以将至少一部分数据提供给适应反馈模块316。
在一个实施例中,适应反馈模块316可以从评分模块312接收一个或多个值,如适宜度分数,并且可以具有对由引擎304产生的映射进行改变的能力。例如至少部分地基于一个或多个值,映射可以被改变。例如,模块316可以确定分数,或者块流程图300的一个或多个映射迭代上的分数的改变,并且可以基于例如在一个或多个迭代上的分数改变的趋势来对代码划分引擎304提出一个或多个改变。在这个实施例中,阈值可以被用来确定对映射或划分的改变是否是期望的。如果一个或多个改变是期望的,那么该信息被提供给引擎304,在那里一个或多个改变可以被实现。信息例如可以通过逻辑接口(未示出)被提供,该接口允许从适应反馈模块316的输入。
可以理解,实施例可以被应用于包含至少一个处理单元的任何设备。此外,这里已经描述了所要求保护主题的实施例的特定特征,但是,对于本领域的技术人员,将可以想到很多修改、替换、改变和等效变化。此外,虽然这里已经详细描述了一个功能块以及它们之间的关系,但是于本领域的技术人员可以考虑到,几个操作可以不用使用其他的操作而被执行,或者可以建立额外的功能或者功能之间的关系,而仍旧符合所要求保护的主题。因此,应该理解,所附的权利要求意于覆盖所有这种落在所要求保护主题的实施例的真正精神之内的修改和变换。
Claims (31)
1.一种编译数据的方法,包括:
由虚拟机接收第一代码集;
将所述第一代码集的至少一部分提供给编译器;
将所述第一代码集的所述至少一部分划分为多个代码分组;
将所述代码分组的至少一个编译成多个第二代码集;以及
将至少两个所述第二代码集提供给不同的处理器资源。
2.如权利要求1所述的方法,其中,所述接收包括:
被提供一个或多个字节码模块,其中所述接收由所述虚拟机的逻辑字节码接收器接口进行。
3.如权利要求1所述的方法,其中,所述接收包括:
被提供软件程序,其中,所述软件程序被接收为一个或多个字节码模块。
4.如权利要求1所述的方法,其中,所述划分基于执行所述编译器的设备可用的资源,以及所述第一代码集的至少一个功能。
5.如权利要求4所述的方法,其中,所述资源包括实现在一个处理器设备中的一个或多个处理单元。
6.如权利要求1所述的方法,还包括产生一个或多个代码集,以提供在不同处理单元上的所述两个或多个代码集之间的呼叫函数的逻辑链接。
7.一种编译数据的方法,包括:
接收两个或多个字节码集;
将所述两个或多个字节码集分组为两个或多个任务,并定义所述两个或多个字节码集的至少一部分之间的关系结构以产生抽象语法图;
根据所述抽象语法图和执行所述两个或多个任务的资源需要将所述两个或多个任务划分为两个或多个子任务;以及
将所述两个或多个子任务的至少一部分提供给处理设备的不同资源。
8.如权利要求7所述的方法,其中所述划分还包括为所述两个或多个子任务的至少一部分确定处理器映射,并且至少部分地基于所述处理器映射提供逻辑分区。
9.如权利要求7所述的方法,其中所述接收包括:
被提供一个或多个字节码模块,其中所述接收由所述虚拟机的字节码接口进行,以及将所述一个或多个字节码模块提供给编译器。
10.如权利要求7所述的方法,其中所述划分基于执行至少一部分所述划分的资源可用的资源,以及两个或多个字节码集的至少一个功能。
11.如权利要求7所述的方法,其中处理设备的所述一个或多个资源包括多核心处理器的一个或多个处理单元。
12.如权利要求7所述的方法,其中所述划分至少部分地基于从前面的划分获得的反馈,其中,所述反馈从基于一个或多个度量标准来度量所述划分的适宜度分数获得。
13.如权利要求12所述的方法,其中所述划分至少部分地基于所述反馈,在所述提供之前被执行一次或多次。
14.一种编译数据的方法,包括:
由设备接收软件程序,其中所述程序包括用高级语言编写的多个指令;
在编译器中为所述多个指令的至少一部分确定关系结构;
确定设备的可用资源;
在编译器中将所述程序划分为多个任务,并将所述多个任务的至少一部分分别提供给设备的一个或多个资源,其中所述划分至少部分地基于所述关系结构和可用资源。
15.如权利要求14所述的方法,其中,所述软件程序包括多个字节码。
16.如权利要求14所述的方法,其中,所述关系结构包括抽象语法图,所述抽象语法图是一个或多个字节码的两个或多个功能之间的关系结构。
17.如权利要求14所述的方法,其中,所述可用资源包括实现在一个处理设备中的一个或多个处理单元。
18.如权利要求14所述的方法,其中,所述划分还包括将所述两个或多个任务中的两个或多个提供给不同的可用资源。
19.如权利要求14所述的方法,被提供软件程序,其中所述软件程序被作为一个或多个字节码模块接收。
20.如权利要求14所述的方法,其中,所述划分基于对进行至少一部分所述划分的资源可用的资源,以及所述指令的至少一个功能。
21.如权利要求14所述的方法,其中,处理设备的所述一个或多个资源包括多核心处理器的一个或多个处理单元。
22.如权利要求14所述的方法,其中,所述划分至少部分地基于从前面的划分获得的反馈,其中所述反馈从基于一个或多个度量标准来度量所述划分的适宜度分数获得。
23.一种编译数据的系统,包括:
网络设备;以及
编译器,其中所述编译器包括:字节码分析器,用于接收相关的字节码集;代码划分启发式引擎,用于将相关的字节码集划分为多个被划分的代码;以及至少一个合成器,用于将所述多个被划分的代码的至少一部分分别提供给多个处理单元,其中所述划分至少部分地基于网络设备的可用资源,以及实现在所述字节码集的至少一部分中的功能。
24.如权利要求23所述的系统,其中所述接收包括:
被提供一个或多个字节码模块,其中所述接收被虚拟机的字节码接口执行。
25.如权利要求23所述的系统,其中所述划分基于所述虚拟机可用的资源和所述字节码集的至少一个功能。
26.如权利要求23所述的系统,其中所述资源包括与网络设备相关联的一个或多个硬件元件。
27.如权利要求23所述的系统,其中所述资源可以包括一个或多个专用硬件加速器,其中所述编译器产生用于基于指令的处理资源的代码,以使用所述一个或多个专用硬件加速器来执行一个或多个字节码,其中,所述一个或多个字节码从一个或多个处理资源上被卸载。
28.如权利要求23所述的系统,其中所述相关的字节码集包括机器语言。
29.如权利要求23所述的系统,其中网络设备的一个或多个资源包括多核心处理器的一个或多个异构处理单元。
30.如权利要求23所述的系统,其中所述划分至少部分地基于从前面的划分获得的反馈,其中所述反馈从基于一个或多个度量标准来度量所述划分的适宜度分数获得。
31.如权利要求30所述的系统,其中所述划分至少部分地基于所述反馈,在所述提供之前被进行一次或多次。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/316,606 US7103881B2 (en) | 2002-12-10 | 2002-12-10 | Virtual machine to provide compiled code to processing elements embodied on a processor device |
US10/316,606 | 2002-12-10 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1506816A CN1506816A (zh) | 2004-06-23 |
CN1306399C true CN1306399C (zh) | 2007-03-21 |
Family
ID=32468897
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2003101157384A Expired - Fee Related CN1306399C (zh) | 2002-12-10 | 2003-11-28 | 用于网络处理器的虚拟机 |
Country Status (5)
Country | Link |
---|---|
US (1) | US7103881B2 (zh) |
EP (1) | EP1570349A2 (zh) |
CN (1) | CN1306399C (zh) |
AU (1) | AU2003290856A1 (zh) |
WO (1) | WO2004053689A2 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102693150A (zh) * | 2012-05-11 | 2012-09-26 | 深圳市华为技术软件有限公司 | 基于计费专有领域的虚拟机的处理方法及装置 |
Families Citing this family (64)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7051189B2 (en) * | 2000-03-15 | 2006-05-23 | Arc International | Method and apparatus for processor code optimization using code compression |
US7278137B1 (en) * | 2001-12-26 | 2007-10-02 | Arc International | Methods and apparatus for compiling instructions for a data processor |
US7043682B1 (en) * | 2002-02-05 | 2006-05-09 | Arc International | Method and apparatus for implementing decode operations in a data processor |
EP1597673B1 (en) * | 2003-02-20 | 2012-05-02 | Koninklijke Philips Electronics N.V. | Translation of a series of computer instructions |
US7747731B2 (en) * | 2003-03-27 | 2010-06-29 | Nokia Corporation | Minimizing message processing latency in a communication network |
US7363473B2 (en) * | 2004-09-10 | 2008-04-22 | Intel Corporation | System for dynamic service provisioning |
US20070266370A1 (en) * | 2004-09-16 | 2007-11-15 | Myers Glenford J | Data Plane Technology Including Packet Processing for Network Processors |
US7487496B2 (en) * | 2004-12-02 | 2009-02-03 | International Business Machines Corporation | Computer program functional partitioning method for heterogeneous multi-processing systems |
US7478376B2 (en) * | 2004-12-02 | 2009-01-13 | International Business Machines Corporation | Computer program code size partitioning method for multiple memory multi-processing systems |
US8621458B2 (en) * | 2004-12-21 | 2013-12-31 | Microsoft Corporation | Systems and methods for exposing processor topology for virtual machines |
US20060150165A1 (en) * | 2004-12-30 | 2006-07-06 | Intel Corporation | Virtual microengine systems and methods |
US7707547B2 (en) * | 2005-03-11 | 2010-04-27 | Aptana, Inc. | System and method for creating target byte code |
US7844958B2 (en) * | 2005-03-11 | 2010-11-30 | Aptana, Inc. | System and method for creating target byte code |
TWI306215B (en) * | 2005-04-29 | 2009-02-11 | Ind Tech Res Inst | Method and corresponding apparatus for compiling high-level languages into specific processor architectures |
CN100442768C (zh) * | 2005-08-05 | 2008-12-10 | 华为技术有限公司 | 一种在网络处理器中加载指令代码的方法和路由设备 |
US7694290B2 (en) * | 2005-09-01 | 2010-04-06 | Intel Corporation | System and method for partitioning an application utilizing a throughput-driven aggregation and mapping approach |
US9038040B2 (en) * | 2006-01-25 | 2015-05-19 | International Business Machines Corporation | Method for partitioning programs between a general purpose core and one or more accelerators |
WO2007104158A1 (en) | 2006-03-14 | 2007-09-20 | Transgaming Technologies Inc. | General purpose software parallel task engine |
US7406407B2 (en) * | 2006-06-01 | 2008-07-29 | Microsoft Corporation | Virtual machine for operating N-core application on M-core processor |
US8443348B2 (en) | 2006-06-20 | 2013-05-14 | Google Inc. | Application program interface of a parallel-processing computer system that supports multiple programming languages |
US8375368B2 (en) * | 2006-06-20 | 2013-02-12 | Google Inc. | Systems and methods for profiling an application running on a parallel-processing computer system |
US8381202B2 (en) * | 2006-06-20 | 2013-02-19 | Google Inc. | Runtime system for executing an application in a parallel-processing computer system |
US7814486B2 (en) * | 2006-06-20 | 2010-10-12 | Google Inc. | Multi-thread runtime system |
US8136102B2 (en) * | 2006-06-20 | 2012-03-13 | Google Inc. | Systems and methods for compiling an application for a parallel-processing computer system |
US8261270B2 (en) | 2006-06-20 | 2012-09-04 | Google Inc. | Systems and methods for generating reference results using a parallel-processing computer system |
WO2007149884A2 (en) * | 2006-06-20 | 2007-12-27 | Google, Inc. | A multi-thread high performance computing system |
US8108844B2 (en) | 2006-06-20 | 2012-01-31 | Google Inc. | Systems and methods for dynamically choosing a processing element for a compute kernel |
US8136104B2 (en) * | 2006-06-20 | 2012-03-13 | Google Inc. | Systems and methods for determining compute kernels for an application in a parallel-processing computer system |
US8024708B2 (en) * | 2006-06-20 | 2011-09-20 | Google Inc. | Systems and methods for debugging an application running on a parallel-processing computer system |
US8146066B2 (en) * | 2006-06-20 | 2012-03-27 | Google Inc. | Systems and methods for caching compute kernels for an application running on a parallel-processing computer system |
US8132169B2 (en) * | 2006-07-21 | 2012-03-06 | International Business Machines Corporation | System and method for dynamically partitioning an application across multiple processing elements in a heterogeneous processing environment |
US20080077793A1 (en) * | 2006-09-21 | 2008-03-27 | Sensory Networks, Inc. | Apparatus and method for high throughput network security systems |
US8225300B1 (en) * | 2007-02-14 | 2012-07-17 | The Mathworks, Inc. | Client program executable on multiple heterogeneous server platforms |
WO2008142631A1 (en) * | 2007-05-22 | 2008-11-27 | Philips Intellectual Property & Standards Gmbh | Compiler and compiling method for a networked control system comprising a plurality of devices |
US8914774B1 (en) | 2007-11-15 | 2014-12-16 | Appcelerator, Inc. | System and method for tagging code to determine where the code runs |
US8954989B1 (en) | 2007-11-19 | 2015-02-10 | Appcelerator, Inc. | Flexible, event-driven JavaScript server architecture |
US8260845B1 (en) | 2007-11-21 | 2012-09-04 | Appcelerator, Inc. | System and method for auto-generating JavaScript proxies and meta-proxies |
US8566807B1 (en) | 2007-11-23 | 2013-10-22 | Appcelerator, Inc. | System and method for accessibility of document object model and JavaScript by other platforms |
US8719451B1 (en) | 2007-11-23 | 2014-05-06 | Appcelerator, Inc. | System and method for on-the-fly, post-processing document object model manipulation |
US8806431B1 (en) | 2007-12-03 | 2014-08-12 | Appecelerator, Inc. | Aspect oriented programming |
US8756579B1 (en) | 2007-12-03 | 2014-06-17 | Appcelerator, Inc. | Client-side and server-side unified validation |
US8819539B1 (en) | 2007-12-03 | 2014-08-26 | Appcelerator, Inc. | On-the-fly rewriting of uniform resource locators in a web-page |
US8938491B1 (en) | 2007-12-04 | 2015-01-20 | Appcelerator, Inc. | System and method for secure binding of client calls and server functions |
US8527860B1 (en) | 2007-12-04 | 2013-09-03 | Appcelerator, Inc. | System and method for exposing the dynamic web server-side |
US8285813B1 (en) | 2007-12-05 | 2012-10-09 | Appcelerator, Inc. | System and method for emulating different user agents on a server |
US8335982B1 (en) | 2007-12-05 | 2012-12-18 | Appcelerator, Inc. | System and method for binding a document object model through JavaScript callbacks |
US8639743B1 (en) | 2007-12-05 | 2014-01-28 | Appcelerator, Inc. | System and method for on-the-fly rewriting of JavaScript |
US20090198994A1 (en) * | 2008-02-04 | 2009-08-06 | Encassa Pty Ltd | Updated security system |
US8561062B2 (en) | 2008-05-30 | 2013-10-15 | Red Hat, Inc. | Synchronizing changes made on self-replicated machines to the corresponding parent machines |
US8615758B2 (en) * | 2008-05-30 | 2013-12-24 | Red Hat, Inc. | Combining system blueprints, functional layer, and software bits in parallel development of machines |
US8375387B2 (en) * | 2008-05-30 | 2013-02-12 | Red Hat, Inc. | Product independent orchestration tool |
US8291079B1 (en) | 2008-06-04 | 2012-10-16 | Appcelerator, Inc. | System and method for developing, deploying, managing and monitoring a web application in a single environment |
US8880678B1 (en) | 2008-06-05 | 2014-11-04 | Appcelerator, Inc. | System and method for managing and monitoring a web application using multiple cloud providers |
US7596620B1 (en) | 2008-11-04 | 2009-09-29 | Aptana, Inc. | System and method for developing, deploying, managing and monitoring a web application in a single environment |
US8756564B2 (en) * | 2009-05-29 | 2014-06-17 | International Business Machines Corporation | Techniques for providing environmental impact information associated with code |
US8359496B1 (en) * | 2010-08-31 | 2013-01-22 | Google Inc. | Fault-resistant just-in-time compiler |
US8949777B2 (en) * | 2011-04-22 | 2015-02-03 | Intel Corporation | Methods and systems for mapping a function pointer to the device code |
US8789026B2 (en) * | 2011-08-02 | 2014-07-22 | International Business Machines Corporation | Technique for compiling and running high-level programs on heterogeneous computers |
US8799693B2 (en) | 2011-09-20 | 2014-08-05 | Qualcomm Incorporated | Dynamic power optimization for computing devices |
US9098309B2 (en) | 2011-09-23 | 2015-08-04 | Qualcomm Incorporated | Power consumption optimized translation of object code partitioned for hardware component based on identified operations |
CN104423994B (zh) * | 2013-09-03 | 2018-05-11 | 华为技术有限公司 | 一种代码生成方法、编译器、调度方法、装置及调度系统 |
CN105511957B (zh) * | 2014-09-25 | 2019-05-07 | 国际商业机器公司 | 用于生成作业告警的方法和系统 |
GB2588980A (en) * | 2019-11-12 | 2021-05-19 | Samsung Electronics Co Ltd | Method and system for neutral network execution distribution |
US11347488B2 (en) * | 2020-05-18 | 2022-05-31 | Fortinet, Inc. | Compiling domain-specific language code to generate executable code targeting an appropriate type of processor of a network device |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0926594A1 (en) * | 1997-12-17 | 1999-06-30 | Hewlett-Packard Company | Method of using primary and secondary processors |
CN1266513A (zh) * | 1997-06-13 | 2000-09-13 | 艾利森电话股份有限公司 | 计算机处理器的模拟 |
JP2001067234A (ja) * | 1999-08-27 | 2001-03-16 | Fujitsu Ltd | コンパイラとプロセッサ |
Family Cites Families (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3039953B2 (ja) * | 1989-04-28 | 2000-05-08 | 株式会社日立製作所 | 並列化装置 |
JPH06266683A (ja) * | 1993-03-12 | 1994-09-22 | Toshiba Corp | 並列処理装置 |
WO1998021655A1 (en) * | 1996-11-13 | 1998-05-22 | Paran, Arik | Real time program language accelerator |
US6317872B1 (en) * | 1997-07-11 | 2001-11-13 | Rockwell Collins, Inc. | Real time processor optimized for executing JAVA programs |
US6654954B1 (en) * | 1998-02-17 | 2003-11-25 | International Business Machines Corporation | Computer system, program product and method utilizing executable file with alternate program code attached as a file attribute |
US6374286B1 (en) * | 1998-04-06 | 2002-04-16 | Rockwell Collins, Inc. | Real time processor capable of concurrently running multiple independent JAVA machines |
US6158048A (en) * | 1998-05-29 | 2000-12-05 | Intel Corporation | Method for eliminating common subexpressions from java byte codes |
US6289506B1 (en) * | 1998-06-30 | 2001-09-11 | Intel Corporation | Method for optimizing Java performance using precompiled code |
WO2000034854A2 (en) * | 1998-12-08 | 2000-06-15 | Koninklijke Philips Electronics N.V. | Method of executing an interpreter program |
JP2000207223A (ja) * | 1999-01-12 | 2000-07-28 | Matsushita Electric Ind Co Ltd | 並列処理向けのプログラム処理方法および装置、並びに並列処理向けのプログラム処理を実行するプログラムを記録した記録媒体および並列処理向けの命令列を記録した記録媒体 |
US6295642B1 (en) * | 1999-04-29 | 2001-09-25 | International Business Machines Corporation | Method and apparatus for partial just in time compiling in a data processing system |
US6851109B1 (en) * | 1999-05-06 | 2005-02-01 | International Business Machines Corporation | Process and system for dynamically compiling a partially interpreted method |
US6481006B1 (en) * | 1999-05-06 | 2002-11-12 | International Business Machines Corporation | Method and apparatus for efficient invocation of Java methods from native codes |
US6560774B1 (en) * | 1999-09-01 | 2003-05-06 | Microsoft Corporation | Verifier to check intermediate language |
US6704926B1 (en) * | 2000-09-28 | 2004-03-09 | International Business Machines Corporation | Bimodal Java just-in-time complier |
JP2002169696A (ja) * | 2000-12-04 | 2002-06-14 | Mitsubishi Electric Corp | データ処理装置 |
US6691306B1 (en) * | 2000-12-22 | 2004-02-10 | Lsi Logic Corporation | Use of limited program space of general purpose processor for unlimited sequence of translated instructions |
US6718539B1 (en) * | 2000-12-22 | 2004-04-06 | Lsi Logic Corporation | Interrupt handling mechanism in translator from one instruction set to another |
-
2002
- 2002-12-10 US US10/316,606 patent/US7103881B2/en not_active Expired - Fee Related
-
2003
- 2003-11-12 EP EP03783439A patent/EP1570349A2/en not_active Ceased
- 2003-11-12 AU AU2003290856A patent/AU2003290856A1/en not_active Abandoned
- 2003-11-12 WO PCT/US2003/036305 patent/WO2004053689A2/en not_active Application Discontinuation
- 2003-11-28 CN CNB2003101157384A patent/CN1306399C/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1266513A (zh) * | 1997-06-13 | 2000-09-13 | 艾利森电话股份有限公司 | 计算机处理器的模拟 |
EP0926594A1 (en) * | 1997-12-17 | 1999-06-30 | Hewlett-Packard Company | Method of using primary and secondary processors |
JP2001067234A (ja) * | 1999-08-27 | 2001-03-16 | Fujitsu Ltd | コンパイラとプロセッサ |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102693150A (zh) * | 2012-05-11 | 2012-09-26 | 深圳市华为技术软件有限公司 | 基于计费专有领域的虚拟机的处理方法及装置 |
CN102693150B (zh) * | 2012-05-11 | 2016-06-08 | 深圳市华为技术软件有限公司 | 基于计费专有领域的虚拟机的处理方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
EP1570349A2 (en) | 2005-09-07 |
CN1506816A (zh) | 2004-06-23 |
AU2003290856A1 (en) | 2004-06-30 |
AU2003290856A8 (en) | 2004-06-30 |
US20040111715A1 (en) | 2004-06-10 |
US7103881B2 (en) | 2006-09-05 |
WO2004053689A2 (en) | 2004-06-24 |
WO2004053689A3 (en) | 2005-04-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1306399C (zh) | 用于网络处理器的虚拟机 | |
CA2358010C (en) | Data processing system and operating system | |
US5428793A (en) | Method and apparatus for compiling computer programs with interproceduural register allocation | |
US7503039B2 (en) | Preprocessor to improve the performance of message-passing-based parallel programs on virtualized multi-core processors | |
Milvang-Jensen et al. | BDDNOW: a parallel BDD package | |
US7725573B2 (en) | Methods and apparatus for supporting agile run-time network systems via identification and execution of most efficient application code in view of changing network traffic conditions | |
US6959430B2 (en) | Specialized heaps for creation of objects in object-oriented environments | |
JP5030647B2 (ja) | 複数処理ノードを含むコンピュータ・システムでプログラムをロードする方法、該プログラムを含むコンピュータ可読媒体、及び、並列コンピュータ・システム | |
JP2002366366A (ja) | コンパイル方法、コード生成方法、スタックレジスタ使用方法、コンパイラ、これらを実現するプログラム及び記憶媒体 | |
US20040093477A1 (en) | Scalable parallel processing on shared memory computers | |
US7356812B2 (en) | Passing parameters by implicit reference | |
Shinano et al. | Control schemes in a generalized utility for parallel branch-and-bound algorithms | |
KR20060035077A (ko) | 데이터 처리 장치 및 이를 이용한 레지스터 할당 방법 | |
KR20080054324A (ko) | 멀티 쓰레드 기반 센서 운영체제 환경에서의 스택 할당방법 | |
JP3871312B2 (ja) | プログラム変換方法、これを用いたデータ処理装置及びプログラム | |
CN113986239B (zh) | 分布式编译方法、装置、设备及可读存储介质 | |
Quammen et al. | Flexible register management for sequential programs | |
CN1042979C (zh) | 执行具有多个可调用过程的单线程计算机程序的方法 | |
WO2005036394A1 (en) | Method to emulate an execution environment | |
Agarwal | Strategies for topology-aware task mapping and for rebalancing with bounded migrations | |
Jungblut et al. | Optimal schedules for high-level programming environments on FPGAs with constraint programming | |
Krishna et al. | Optimizing the ORB core to enhance Real-time CORBA predictability and performance | |
Roh et al. | Analysis of communications and overhead reduction in multithreaded execution. | |
Moreira et al. | The performance impact of granularity control and functional parallelism | |
Gonzalez Tallada et al. | Evaluation of work distribution schedulers for heterogeneous architectures and scientific applications |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20070321 Termination date: 20151128 |
|
EXPY | Termination of patent right or utility model |