CN101350007B - 具有低争用和负担均衡的并行xsl转换的方法和装置 - Google Patents
具有低争用和负担均衡的并行xsl转换的方法和装置 Download PDFInfo
- Publication number
- CN101350007B CN101350007B CN2008101306150A CN200810130615A CN101350007B CN 101350007 B CN101350007 B CN 101350007B CN 2008101306150 A CN2008101306150 A CN 2008101306150A CN 200810130615 A CN200810130615 A CN 200810130615A CN 101350007 B CN101350007 B CN 101350007B
- Authority
- CN
- China
- Prior art keywords
- task
- xsl
- execution
- instruction
- storehouse
- 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
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/12—Use of codes for handling textual entities
- G06F40/151—Transformation
- G06F40/154—Tree transformation for tree-structured or markup documents, e.g. XSLT, XSL-FO or stylesheets
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/12—Use of codes for handling textual entities
- G06F40/131—Fragmentation of text files, e.g. creating reusable text-blocks; Linking to fragments, e.g. using XInclude; Namespaces
-
- 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
- G06F8/456—Parallelism detection
-
- 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/505—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the load
-
- 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5083—Techniques for rebalancing the load in a distributed system
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Health & Medical Sciences (AREA)
- Health & Medical Sciences (AREA)
- Computational Linguistics (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Artificial Intelligence (AREA)
- Devices For Executing Special Programs (AREA)
- Multi Processors (AREA)
Abstract
本发明公开了一种具有低争用和负担均衡的并行XSL转换的方法和装置。所述方法包括:生成可执行代码,以便当被执行时,所述代码将可扩展样式表语言(XSL)文件中的多个指令转换为多个任务,并执行所述多个任务;通过多个执行模块来并发地执行所述可执行代码,其中,提供XML文件作为输入,并且其中,每个执行模块执行所述可执行代码;以及根据所述多个执行模块的多个输出,生成一个或多个输出文件。本发明可以减少时间和内存开销,同时可以提高对计算资源的利用。
Description
背景技术
XML样式表语言转换(XSLT)已经成为用于在不同应用领域中处理和/或转换XML文件的最流行的语言之一。
可扩展样式表语言转换(XSLT)是一种用于将可扩展标识语言(XML)文件转换为其它文件的语言。典型地,XSLT处理器需要可扩展样式表语言(XSL)文件和输入XML文件作为输入。利用该XSL文件中的定义,XSLT处理器可以将该输入XML文件转换为另一个文件。生成的输出文件的格式可以是XML或者另一种格式。例如,可以根据超文本标识语言(HTML)对生成的输出文件编排格式,或者其可以是纯文本文件。典型地,XSLT不强制任何执行顺序,即,可以按照任意不固定的顺序执行在处理输入XML文件的过程中由XSLT处理器所执行的指令。然而,执行XSLT会在时间、存储器和计算资源方面开销较大。
附图说明
通过实例方式举例说明本发明的实施例,并不局限于附图,其中相同的参考标号表示对应的、类似的或相似的元件,其中:
图1示出了根据本发明一些实施例的示例性方框图;
图2示出了根据本发明一些实施例的任务创建的示例性分级,以及根据本发明一些实施例的示例性堆栈;
图3示出了根据本发明一些实施例的输出生成器的示例性操作;以及
图4示出了根据本发明一些实施例的示例性伪代码。
应当注意,为了举例说明的简单和清楚起见,不必要按照比例画出图中所示出的元件。例如,为了清楚,相对于其它元件,可以放大一些元件的尺寸。
具体实施方式
在下面的详细描述中,提出了大量具体细节,以便提供对本发明实施例的全面理解。然而,本领域普通技术人员应该理解,可以在没有这些具体细节的情况下实现本发明的实施例。在其它实例中,没有详细描述公知的方法、步骤、组件和电路,以避免遮掩本发明的实施例。
通常,本文将数据处理看作是一系列前后一致的作用于数据产生期望结果的动作或操作。这包括物理量的物理操作。通常,尽管不是必须,这些量采取电或磁信号的形式,所述电或磁信号能够被存储、传输、合并、比较以及进行其它操作。主要由于普遍使用的原因,已经多次证明,将这些信号称为比特、数值、元素、符号、字符、项、数字等是便利的。然而应当理解,全部这些以及相似术语将与适当的物理量相关联,并且仅仅是应用于这些量的便利标记。
除非特别声明,否则应当注意,如从下面论述中显而易见的,在本说明书的全部论述中,利用如“处理”、“计算”、“推算”、“确定”等术语,来描述计算机或计算系统、或者相似电子计算设备的动作和/或处理,其将在计算系统的寄存器和/或存储器中表示为诸如电子这样的物理量的数据,操作和/或转换为其它数据,所述其它数据类似地表示为计算系统的存储器、寄存器或者其它这样的信息存储、传输或显示设备中的物理量。
本发明的实施例可以包括用于执行本文所述操作的装置。该装置可以根据期望的用途具体构造,或者其可以包括由存储在计算机中的计算机程序选择性地激活或配置的通用计算机。所述计算机程序可以存储在计算机可读存储介质中,例如但不限于,任意类型的磁盘,包括软盘、光盘、CD-ROM、磁光盘、只读存储器(ROM)、随机访问存储器(RAM)、电可编程只读存储器(EPROM)、电可擦写可编程只读存储器(EEPROM)、磁或光卡,或者适用于存储电子指令并且能够被耦合到计算机系统总线上的任意其它类型介质。
本文所提出的处理和显示,不是固有地与任意特定计算机或其它装置相关。可以使用具有与本文的教导一致的程序的不同通用系统,或者可以证实,构造更加专用的装置以执行期望的方法是便利的。下面的描述中将呈现出多种所述系统的期望结构。此外,没有参照任何编程语言对本发明的实施例进行描述。应当注意,多种编程语言可以用于实现如本文所描述的发明教导。
除非明确声明,否则本文所描述的方法实施例不局限于具体顺序或次序。此外,一些所描述的方法实施例或其元件,能够在相同时间点发生或执行。
根据本发明的实施例,并行XSLT转换可以减少时间和内存开销,同时可能提高对计算资源的利用。现在参照图1,其示出了根据本发明实施例的示例性流程。XSL文件110可以用于输入到XSLT编译器120。编译器120可以基于XSL文件110,生成可执行计算机代码130。XML文件140可以用于输入到执行150,所述执行150可以是代码130的可执行实例。输出文件160可以是执行150的输出。根据本发明的一些实施例,执行150可以包括多个执行模块。
在本发明的一些实施例中,编译器120可以解析输入的XSL文件110,以及可以进一步识别多个指令或多组指令,其例如作为单个任务可以组合在一起并且与其它指令分开执行。任务可以包括一个指令集,其可以与构成文件110的其它指令分开并独立地执行。通过多个执行模块,例如通过多个执行线程,或者多个适当的硬件模块,可以同时并行地执行多个任务。编译器120还可以在代码130中插入可执行代码,以将多个指令或多组指令转换成为多个分开的任务。在本发明的一些实施例中,编译器120可以检测或识别这种可分开或独立指令,并且在代码130中插入代码,以将这些独立指令转换成为多个分开的任务。
独立指令可以是不依靠在所述指令的代码之外定义的变量的指令,而且还对其它指令不具有流程依赖性。流程依赖性的一个实例是一个指令依赖另一个指令的输出或执行。例如,指令X需要指令Y的输出作为输入。因此,作为多个独立的任务来执行指令X和Y会导致两个任务,从而例如通过同时运行的两个不同线程来同时执行两个指令,或者两个不同硬件模块同时执行指令X和Y。然而,因为在指令Y的执行完成之前,指令Y的输出是不完整的或不可用的,所以指令X可能被提供无效的或不正确的输入。因此,指令X和Y被看作是相依赖的,而不是彼此独立的。应当注意,指令X和Y相对其它指令可以是独立的。
另一个依赖性的实例可以是,指令A依靠例如变量C,变量C被前一个指令例如指令B修改。因此,在这种情况下,如果将指令A和B转换成为两个分开的任务,然后例如通过两个分开的执行模块来独立地执行这两个任务,那么指令A的执行可能被提供不正确的变量C。
根据本发明的实施例,提供了一种机制以确保相依赖的指令按照适当的顺序执行。例如,本发明的实施例可以要求指令Y在指令X之前执行,或者要求在执行指令A的任务开始执行之前,完成执行指令B的任务。
独立指令的实例可以是XSL指令,例如但不限于xsl:for-each和xsl:apply-templates,其可以在XML文件的节点集合或节点序列中的多个节点之间循环,并且还可以对每个节点执行一些指令。因为这些指令是相互独立的,所以可以将它们转换成为可以独立以及可能同时执行的多个任务。除了预先已知为独立的XSL指令之外,例如上述的xsl:for-each和xsl:apply-templates,编译器120可以解析或检查文件110,查找指令,以及可以进一步检查这些指令的特性,例如但不限于,流程依赖性和/或变量依赖性。依据这样的特性,编译器120可以将一个或多个指令组成单个任务。例如,如果在几个指令之间识别出一些依赖性,则可以将这几个指令组成单个任务。例如,在许多指令使用相同变量的情况下,编译器120可以将这些指令和所述变量的定义一起组成一个任务。
在本发明的一些实施例中,任务可以嵌套。例如,一个任务可以在另一个任务内部创建。例如,在xsl:for-each指令内部出现的xsl:apply-templates指令,可以在为xsl:for-each指令创建的任务内部,创建xsl:apply-templates指令的任务。除插入代码外,所述代码用于创建可以由不同执行模块同时并行执行的任务,编译器120也可以创建后续任务。后续任务可以执行动作,例如但不限于,释放分配的内存、操作堆、释放指针、或任意其它可能需要的后续动作。例如,当首次遇到xsl:apply-templates指令时,会为模版分配内存,以及需要保存上下文。可以将xsl:apply-templates结构转换为多个任务,所述多个任务可以由不同执行模块依次执行;然而,需要将已分配的内存释放,以及需要将保存的上下文恢复。因此,可以由后续任务完成这些动作,在执行xsl:apply-templates结构的任务终止之后,执行所述后续任务。可以创建全局后续任务,用于没有组成在任何任务中的执行指令和所需要的其它动作。全局后续任务可以执行诸如例如释放已分配的内存、恢复上下文、释放指针、和/或恢复堆这样的动作,以及可能没有组成在任何任务中的执行指令。编译器120可以选择将一个或多个指令留在全局后续任务中,例如,任务创建的系统开销相当高的轻量指令。全局后续任务可以是最后执行的任务。
在本发明的一些实施例中,转换XML文件可以由多个执行模块来实现。根据本发明的实施例,执行模块的数量可以是任意适当的数值,例如,以提供灵活性。例如,线程的数量可以是多处理器平台的处理器的数量,或者其可以是任意适当的数值,例如适用于特定多任务操作系统环境的数值。在本发明的其它实施例中,由编译器120生成的代码可以嵌入到硬件中,在该情况下,可以根据适当的因素选择执行硬件模块的数量。
在本发明的一些实施例中,执行模块可以具有或者关联于任务堆栈。任务堆栈可以包含一个或多个将要被执行的任务。执行模块可以将任务置于其堆栈中执行,例如,可以将由执行模块创建的任务置于与该执行模块关联的堆栈中。执行模块可以从堆栈中取回任务。例如,执行模块可以从与其关联的堆栈中取回任务,并执行它们。根据本发明的一些实施例,执行模块可以从另一个执行模块的任务堆栈中取回任务。例如,空闲执行模块可以扫描其它执行模块的堆栈,并且基于该扫描,可以为其取回任务以执行。例如基于包括多于预定数量任务的堆栈或另一参数做出从哪个堆栈中取回任务的决定。在该情况下,执行模块可以从另一个执行模块的堆栈中取回一个或多个任务,例如取回一半任务。执行模块还可以将取回的任务置于其自身的堆栈中,以及进一步地从其堆栈中取回这些任务,并执行这些任务。执行模块,尤其,空闲执行模块从其它执行模块的堆栈中取回任务的能力,使得能够负荷均衡执行,因为执行任务的负荷可以由多个执行模块共享或均衡。
根据本发明的一些实施例,当执行模块执行用于创建任务的代码时,该执行模块可以创建多个任务以及与其关联的后续任务。该执行模块可以进一步将后续任务以及所创建的任务按照相反的顺序置于其堆栈中。例如,循环N个节点的xsl:for-each结构,可以产生N个任务。在这种情况下,执行模块可以创建N个任务和一个后续任务,该N个任务的每个任务可能实现xsl:for-each结构的一次循环。可以首先将该后续任务置于堆栈中,接下来是第一个任务,然后是第二个任务,等等,以及最后将第N个任务置于堆栈中。根据本发明的实施例,当执行模块从其堆栈中取回任务时,它首先取回置于堆栈中的最后一个任务,例如,在上面实例中,首先取回第N个任务,可能接下来是第(N-1)个任务,等等。在最后或者该多个关联任务之后,取回并执行所述后续任务。例如,在循环任务的情况下,例如xsl:for-each和xsl:apply-templates,在构成该循环的全部多个关联任务执行完成之后,取回并执行该后续任务。
根据本发明的实施例,在一些环境下,执行模块可以禁止从与其它执行模块关联的堆栈中取回某些任务。例如,在本发明的一些实施例中,执行模块可以禁止从另一执行模块的堆栈中提取后续任务,从而确保后续任务的执行可以留给创建所述后续任务的执行模块来执行。将后续任务的执行留给创建该后续任务的执行模块,可以利于减少执行开销并且提高执行本地化。后续任务可以具有与其关联的上下文,其形式为例如,初始化的变量、初始化的指针、分配的内存等。允许执行模块取回后续任务,会引起上下文拷贝,这代价很高。此外,允许创建后续任务的执行模块执行所述后续任务,可以提高代码执行的本地化,这是提高处理器的缓存命中所期望的,从而通过重复使用存储在处理器缓存中的变量、数据和/或指令,来提高效率。
由于典型地,后续任务会在与其关联的全部其它任务执行之后执行,所以将计数器与后续任务相关联,其中该计数器的数值可以反映在后续任务可以执行之前,需要执行的任务的数量。在后续任务和关联任务创建之后,可以将该计数器初始化为关联任务的数量。随着每个关联任务的执行,还可以减小该计数器。在本发明的一些实施例中,执行模块可以在执行所述后续任务之前,验证所述计数器的数值为零。
根据本发明的实施例,执行模块可以从另一个执行模块的堆栈中取回一个以上任务。例如,执行模块可以取回另一个执行模块堆栈中的一组连续任务,例如一半任务,以及可以进一步将取回的任务置于其自身的堆栈中用于执行。根据本发明的实施例,取回一组连续的任务可以利于提高执行代码本地化,并且因此,例如,由于取回的多个连续任务调用将要执行的相同代码,可能提高处理器缓存命中的事实,提高了效率。
根据本发明的一些实施例,从另一个执行模块的堆栈中取回任务的执行模块,可以从所述堆栈的底部取回任务,即,拥有所述堆栈的执行模块最后执行的任务。因为堆栈中相邻的任务很可能共享相同的执行代码,并且因为堆栈的拥有者正从该堆栈的顶部开始执行任务,所以从堆栈的底部取回任务,可以提高拥有该堆栈的执行模块的代码本地化。此外,取回多个任务可以减少执行模块需要从其它执行模块的堆栈中取回任务的次数,因此可能减少与从堆栈到堆栈移动任务相关联的系统开销。因为当尝试取回的次数较小时,执行模块争用相同任务的可能性较小,所以通过取回多个任务,可以相应降低取回的数量,也可以减少争用。
现在参照图2A,其示出了根据本发明实施例的任务堆栈,以及图2B,其示出了根据本发明实施例的任务创建分级(hierarchy)的实例。所述分级和堆栈是执行模块执行创建多个任务的代码,例如在n个节点之间循环的xsl:for-each结构的结果。执行模块可以创建n个任务A(1)到A(n)和后续任务A(cnt)。执行模块可以进一步将任务A(1)到A(n)和后续任务A(cnt)置于其任务堆栈中。执行模块可以进一步取回任务A(1),并执行该任务。然而,任务A(1)包含在m个节点之间循环的xsl:for-each结构,以及用于创建m个任务的代码,所述m个任务实现该xsl:for-each结构。执行模块可以创建m个任务B(1)到B(m)和后续任务B(cnt)。执行模块可以进一步将任务B(1)到B(n)和后续任务B(cnt)置于其任务堆栈中。执行模块可以进一步取回任务B(1),并开始执行该任务。任务B(1)包含用于创建如任务C(1)和其后续任务C(cnt)所示的另一个任务的代码。图2A示出如何将在上述情形下创建的任务放置在任务堆栈中。如图所示,可以按照相反的顺序将任务放置在堆栈中,即,首先执行最后创建的任务,而且,在从所述堆栈中提取出全部其它相互关联的任务之后,执行后续任务。拥有堆栈的执行模块可以从堆栈的顶部取回任务,同时其它执行模块可以从堆栈的底部取回任务。
根据万维网联盟(W3C)XSLT规范,在隐含动态上下文中执行每个XSLT指令。该上下文可以包括上下文节点、参数和变量绑定、命名空间范围等,以及具体执行上下文信息。当执行模块创建一系列任务时,其不需要拷贝上下文信息。代替地,执行模块可以创建该上下文的引用,并将该引用封装到任务中。如果另一个执行模块取回该任务,则可以拷贝该上下文。如果创建任务的执行模块是执行该任务的执行模块,则不需要拷贝上下文,只要该创建任务的执行模块在其内存中具有该上下文。
除隐含动态上下文之外,执行XSLT指令可依赖于,例如XPath和/或变量的内容。根据XSLT规范,可以通过一系列XSLT指令计算变量内容以及XPath,所述XSLT指令又包含复杂指令,以及调用操作系统,例如“document()”以打开文件。该调用和计算可以暂停执行模块的执行。例如,访问外部设备可以暂停执行,直到该访问操作完成。根据本发明的实施例,编译器120可以检测所述情形。编译器120可以为暂停执行的各个指令创建分开的任务,并可以进一步创建特定的同步后续任务。同步后续任务依赖于由其它任务计算的变量或XPath。当要执行同步后续任务时,可以将其从堆栈中提取出来,但不是执行它,而是检查相关联的计数器。随着每个与所述同步后续任务关联的任务执行完成,减少该关联计数器,并当该关联计数器的数值达到零时,执行所述同步后续任务。
如上文所描述的XML文件的并行转换,可以要求输出串行化。例如,需要将多个执行模块的输出组合在一起,以便构成输出文件160。组合多个执行模块的多个输出需要例如根据输入文件110来将所述输出进行排序。根据本发明的一些实施例,每个执行模块具有与其关联的输出对象。执行模块可以指定一个输出对象作为当前输出对象,并可以进一步将其输出指向到该当前输出对象。从另一个执行模块的堆栈中取回任务的执行模块,可以创建其它执行模块的当前输出对象的拷贝,并可以进一步将新创建的输出对象链接到拥有从其中取回任务的堆栈的执行模块的当前输出对象。执行模块可以进一步将新创建的输出对象指定为其当前输出对象,并将输出指向到该输出对象。如上所述,任务可以嵌套在任务中,因此当执行模块从另一个执行模块的堆栈中取回任务时,其要确定所取回的任务是否与由拥有所述堆栈的执行模块或者由也具有从该堆栈取回的任务的另一个执行模块执行的任务,处于相同的嵌套级别。如果嵌套级别不相同,则该执行模块创建任务栅栏(barrier)。任务栅栏可以用于将各个嵌套级别的输出进行分组。
串行化处理可以包括,根据输出对象之间的链接,遍历输出对象列表,并收集与输出对象关联的数据。串行处理使用任务栅栏,以便识别各个嵌套级别的输出。现在参照图3A、图3B和图3C,其示出了根据本发明一些实施例创建的输出对象和任务栅栏的实例。
在图3A中,执行模块310可具有包含任务的堆栈。输出对象310A是执行模块310的当前输出对象。执行模块320具有从执行模块310的堆栈中取回的任务。执行模块320具有创建的任务栅栏310B。执行模块320进一步将输出对象310A拷贝到输出对象320A,并进一步将输出对象320A指定为其当前输出对象。执行模块320进一步将输出对象320A链接到输出对象310A和任务栅栏310B。
在图3B中,执行模块330可具有从执行模块310的堆栈中取回的任务。执行模块330进一步将输出对象310A拷贝到输出对象330A,以及进一步将输出对象330A指定为其当前输出对象。执行模块330去耦合输出对象320A和输出对象310A之间的链接。执行模块330进一步将输出对象330A链接到输出对象310A,并将输出对象330A链接到输出对象320A。
在图3C中,执行模块340可具有从执行模块310中取回的任务。执行模块340检测其取回的任务的嵌套级别不同于执行模块320和执行模块330取回的任务的嵌套级别。因此,执行模块340创建任务栅栏310C。执行模块340将输出对象310A拷贝到输出对象340A。执行模块340进一步去耦合输出对象330A和输出对象310A之间的链接。执行模块340进一步将输出对象310A链接到输出对象340A,执行模块340进一步将输出对象340A链接到任务栅栏310C。执行模块340进一步将任务栅栏310C链接到输出对象330A。
现在参照图4,其示出了示例性伪代码,该伪代码实现本发明实施例的一些组件。图4A示出了实现执行模块的主循环的示例性伪代码。如图所示,执行模块从其自己的堆栈中连续取回任务,并且如果该执行模块的堆栈是空的,则其扫描其它执行模块的堆栈。如果在另一个执行模块的堆栈中查找到任务,则该执行模块可以取回其中一些任务,将它们置于它自己的堆栈中,并执行这些任务。应当注意,在图4A中描述的伪代码没有示出全部步骤或细节。此外,应当注意,尽管所示的伪代码可以取回单个任务,但是执行模块可以预定义或动态计算取回任务的数量。图4B示出实现从另一个执行模块的堆栈中取回任务的示例性伪代码。图4C示出实现由xsl:apply-templates结构或xsl:for-each结构创建多任务以及执行所创建的任务的示例性伪代码。
尽管本文示出并描述了本发明的某些特征,但是本领域普通技术人员将会想到很多修改、替代、变换以及等效。因此,应当理解,所附权利要求书旨在本发明精神的最大范围内,覆盖全部这种修改和变换。
Claims (13)
1.一种用于并行XSL转换的方法,包括:
在XSL文件中查找多个独立指令,其中所述多个独立指令不依赖于所述XSL文件中的其它指令、并且能够独立于所述XSL文件中的所述其它指令而被执行,
生成可执行代码,所述可执行代码当被执行时,将所查找到的多个独立指令转换为多个任务,并执行所述多个任务,从而产生和执行相互独立、而不依赖于其它任务的多个任务,每个任务所具有的指令仅依赖于同一任务内的其它指令;
通过多个执行模块来并发地执行所述可执行代码,其中,提供XML文件作为输入,并且其中,每个执行模块执行所述可执行代码的一个或多个任务;以及
根据所述多个执行模块的多个输出,生成一个或多个输出文件。
2.如权利要求1所述的方法,其中,所述多个执行模块是多个执行线程。
3.如权利要求1所述的方法,其中,所述多个执行模块是多个硬件模块。
4.如权利要求1所述的方法,其中,生成所述可执行代码包括:
在所述XSL文件中,查找xsl:for-each和xsl:apply-templates指令,以及
生成所述可执行代码,以便当被执行时,所述代码将所述查找的xsl:for-each和xsl:apply-templates指令的每一个转换为多个任务。
5.如权利要求1所述的方法,其中,当被执行时所述多个任务中的至少一些创建附加任务。
6.如权利要求1所述的方法,其中,所述多个执行模块包括:
第一执行模块,将任务置于第一堆栈中,并进一步从所述第一堆栈的顶部取回任务以用于执行;以及
第二执行模块,从所述第一堆栈的底部取回任务,将所述取回的任务置于第二堆栈中,并从所述第二堆栈的顶部取回任务以用于执行。
7.如权利要求6所述的方法,其中,所述多个执行模块基于至少一个负荷均衡参数,在所述多个执行模块之间分配所述任务的执行。
8.如权利要求6所述的方法,其中所述第一和第二执行模块将执行输出指向各自的第一和第二输出对象,其中,将基于从所述第一堆栈取回的任务生成的第二输出对象链接到第一输出对象,以及其中生成所述输出文件包括根据所述链接收集来自所述第一和第二输出对象的输出。
9.一种用于并行XSL转换的设备,包括:
第一装置,用于在XSL文件中查找多个独立指令,其中所述多个独立指令不依赖于所述XSL文件中的其它指令、并且能够独立于所述XSL文件中的所述其它指令而被执行,并且所述第一装置用于生成可执行代码,所述可执行代码当被执行时,将所查找到的多个独立指令转换为多个任务,并执行所述多个任务,从而产生和执行相互独立、而不依赖于其它任务的多个任务;
第二装置,用于通过多个执行模块来并发地执行所述可执行代码,其中,提供XML文件作为输入,并且其中,每个执行模块执行所述可执行代码的一个或多个任务;以及
第三装置,用于根据所述多个执行模块的多个输出,生成一个或多个输出文件。
10.如权利要求9所述的设备,其中,所述第一装置包括:
用于在所述XSL文件中,查找xsl:for-each和xsl:apply-templates指令的装置,以及
用于生成所述可执行代码,以便当被执行时,所述代码将所述查找的xsl:for-each和xsl:apply-templates指令的每一个转换为多个任务的装置。
11.如权利要求9所述的设备,其中,当被执行时,所述多个任务中的至少一些创建附加任务。
12.如权利要求9所述的设备,其中,所述多个执行模块包括:
第一执行模块,将任务置于第一堆栈中,并进一步从所述第一堆栈的顶部取回任务以用于执行;以及
第二执行模块,从所述第一堆栈的底部取回任务,将所述取回的任务置于第二堆栈中,并从所述第二堆栈的顶部取回任务以用于执行。
13.如权利要求12所述的设备,其中所述第一和第二执行模块将执行输出指向各自的第一和第二输出对象,其中,将基于从所述第一堆栈取回的任务生成的第二输出对象链接到第一输出对象,以及其中所述第三装置包括用于根据所述链接收集来自所述第一和第二输出对象的输出的装置。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/819,217 US20090007115A1 (en) | 2007-06-26 | 2007-06-26 | Method and apparatus for parallel XSL transformation with low contention and load balancing |
US11/819,217 | 2007-06-26 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101350007A CN101350007A (zh) | 2009-01-21 |
CN101350007B true CN101350007B (zh) | 2011-12-14 |
Family
ID=39790143
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2008101306150A Expired - Fee Related CN101350007B (zh) | 2007-06-26 | 2008-06-25 | 具有低争用和负担均衡的并行xsl转换的方法和装置 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20090007115A1 (zh) |
EP (1) | EP2009547A3 (zh) |
CN (1) | CN101350007B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090094606A1 (en) * | 2007-10-04 | 2009-04-09 | National Chung Cheng University | Method for fast XSL transformation on multithreaded environment |
CN102004631A (zh) * | 2010-10-19 | 2011-04-06 | 北京红旗中文贰仟软件技术有限公司 | 信息文档的处理方法及装置 |
CN102622334B (zh) * | 2012-04-20 | 2014-04-16 | 北京信息科技大学 | 多线程环境下并行xslt转换方法和装置 |
US9098558B2 (en) * | 2013-04-01 | 2015-08-04 | Oracle International Corporation | Enhanced flexibility for users to transform XML data to a desired format |
US10860347B1 (en) | 2016-06-27 | 2020-12-08 | Amazon Technologies, Inc. | Virtual machine with multiple content processes |
US10861126B1 (en) * | 2019-06-21 | 2020-12-08 | Intel Corporation | Asynchronous execution mechanism |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1632784A (zh) * | 2004-12-29 | 2005-06-29 | 复旦大学 | 一种快速执行可扩展样式表单语言转换的方法 |
CN1836201A (zh) * | 2003-06-20 | 2006-09-20 | Zih公司 | 可扩展标记语言系统 |
Family Cites Families (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6772413B2 (en) * | 1999-12-21 | 2004-08-03 | Datapower Technology, Inc. | Method and apparatus of data exchange using runtime code generator and translator |
US7590644B2 (en) * | 1999-12-21 | 2009-09-15 | International Business Machine Corporation | Method and apparatus of streaming data transformation using code generator and translator |
US6708331B1 (en) * | 2000-05-03 | 2004-03-16 | Leon Schwartz | Method for automatic parallelization of software |
US6874141B1 (en) * | 2000-06-29 | 2005-03-29 | Microsoft Corporation | Method of compiling schema mapping |
JP2002116917A (ja) * | 2000-10-05 | 2002-04-19 | Fujitsu Ltd | オブジェクト指向型プログラミング言語によるソース・プログラムをコンパイルするコンパイラ |
US20050086584A1 (en) * | 2001-07-09 | 2005-04-21 | Microsoft Corporation | XSL transform |
GB2381340A (en) * | 2001-10-27 | 2003-04-30 | Hewlett Packard Co | Document generation in a distributed information network |
US6996781B1 (en) * | 2001-10-31 | 2006-02-07 | Qcorps Residential, Inc. | System and method for generating XSL transformation documents |
US7502996B2 (en) * | 2002-02-21 | 2009-03-10 | Bea Systems, Inc. | System and method for fast XSL transformation |
US20040123280A1 (en) * | 2002-12-19 | 2004-06-24 | Doshi Gautam B. | Dependence compensation for sparse computations |
US7209925B2 (en) * | 2003-08-25 | 2007-04-24 | International Business Machines Corporation | Method, system, and article of manufacture for parallel processing and serial loading of hierarchical data |
US7458022B2 (en) * | 2003-10-22 | 2008-11-25 | Intel Corporation | Hardware/software partition for high performance structured data transformation |
US7614052B2 (en) * | 2004-01-09 | 2009-11-03 | Nexaweb Technologies Inc. | System and method for developing and deploying computer applications over a network |
US20060265712A1 (en) * | 2005-05-18 | 2006-11-23 | Docomo Communications Laboratories Usa, Inc. | Methods for supporting intra-document parallelism in XSLT processing on devices with multiple processors |
JP4899476B2 (ja) * | 2005-12-28 | 2012-03-21 | 富士通株式会社 | 分割プログラム、連結プログラム、情報処理方法 |
US20080127146A1 (en) * | 2006-09-06 | 2008-05-29 | Shih-Wei Liao | System and method for generating object code for map-reduce idioms in multiprocessor systems |
GB2443277B (en) * | 2006-10-24 | 2011-05-18 | Advanced Risc Mach Ltd | Performing diagnostics operations upon an asymmetric multiprocessor apparatus |
US8516459B2 (en) * | 2008-03-25 | 2013-08-20 | Intel Corporation | XSLT-specific XJIT compiler |
-
2007
- 2007-06-26 US US11/819,217 patent/US20090007115A1/en not_active Abandoned
-
2008
- 2008-03-26 EP EP08251060A patent/EP2009547A3/en not_active Withdrawn
- 2008-06-25 CN CN2008101306150A patent/CN101350007B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1836201A (zh) * | 2003-06-20 | 2006-09-20 | Zih公司 | 可扩展标记语言系统 |
CN1632784A (zh) * | 2004-12-29 | 2005-06-29 | 复旦大学 | 一种快速执行可扩展样式表单语言转换的方法 |
Also Published As
Publication number | Publication date |
---|---|
EP2009547A3 (en) | 2012-10-31 |
CN101350007A (zh) | 2009-01-21 |
EP2009547A2 (en) | 2008-12-31 |
US20090007115A1 (en) | 2009-01-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Kolda et al. | Higher-order web link analysis using multilinear algebra | |
CN101350007B (zh) | 具有低争用和负担均衡的并行xsl转换的方法和装置 | |
EP2057557B1 (en) | Joint optimization of wrapper generation and template detection | |
CN106462425A (zh) | 复常量 | |
Sahuguet et al. | Wysiwyg web wrapper factory (w4f) | |
CN103294652B (zh) | 一种数据转换方法及系统 | |
CN105022670A (zh) | 一种云计算平台中的异构分布式任务处理系统及其处理方法 | |
Wu et al. | An empirical approach for semantic web services discovery | |
Son et al. | Program plagiarism detection using parse tree kernels | |
CN112084776B (zh) | 相似文章的检测方法、装置、服务器和计算机存储介质 | |
Pannarale et al. | GIDL: a rule based expert system for GenBank Intelligent Data Loading into the Molecular Biodiversity database | |
CN102486731A (zh) | 增强软件的软件调用栈的可视化的方法、设备和系统 | |
CN112749315A (zh) | 一种主题门户网站爬虫方法 | |
CN104063506A (zh) | 重复网页识别方法和装置 | |
Zhang et al. | Research on the promotion of rule engine performance | |
Deshmukh et al. | An Empirical Study: XML Parsing using Various Data Structures | |
CN113407782A (zh) | 一种基于MapReduce的分布式XSLT处理方法及处理系统 | |
Zhang et al. | Automatic extraction rules generation based on xpath pattern learning | |
Vandierendonck et al. | HPTA: High-performance text analytics | |
Price et al. | A Higher-order data flow model for heterogeneous Big Data | |
Mironov et al. | Stream documents processing invariance in situation-oriented databases | |
Praba et al. | Efficient hyperlink analysis using robust Proportionate Prestige Score in PageRank algorithm | |
Ahn et al. | A MapReduce-based approach for prefix-based labeling of large XML data | |
Shinagawa et al. | X2QL: An extensible XML query language supporting user-defined foreign functions | |
Rathi et al. | Speeding up frequent itemset mining process on XML data using graphic processor |
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 | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20111214 Termination date: 20200625 |