[go: up one dir, main page]

KR100970758B1 - Apparatus and method of generating code optimized with compound instruction by eliminating nullified compound instruction - Google Patents

Apparatus and method of generating code optimized with compound instruction by eliminating nullified compound instruction Download PDF

Info

Publication number
KR100970758B1
KR100970758B1 KR1020090070997A KR20090070997A KR100970758B1 KR 100970758 B1 KR100970758 B1 KR 100970758B1 KR 1020090070997 A KR1020090070997 A KR 1020090070997A KR 20090070997 A KR20090070997 A KR 20090070997A KR 100970758 B1 KR100970758 B1 KR 100970758B1
Authority
KR
South Korea
Prior art keywords
instruction
code
compound
valueless
compound instruction
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
Application number
KR1020090070997A
Other languages
Korean (ko)
Inventor
안민욱
윤종희
최영규
백윤흥
Original Assignee
서울대학교산학협력단
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by 서울대학교산학협력단 filed Critical 서울대학교산학협력단
Priority to KR1020090070997A priority Critical patent/KR100970758B1/en
Priority to SG201000950-4A priority patent/SG168457A1/en
Application granted granted Critical
Publication of KR100970758B1 publication Critical patent/KR100970758B1/en
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

본 발명은 복합 명령어를 위한 코드 생성 장치 및 그 코드 생성 방법에 관한 것으로서, 상세하게는 중간 표현 트리로부터 추출된 복합 명령어 후보로 이루어진 후보 간섭 그래프에서 적절한 복합 명령어 후보를 선택하는 명령어 선택부; 상기 명령어 선택부에 의해 선택된 복합 명령어 후보에 사용할 레지스터를 할당 및 병합하여 레지스터가 할당된 코드를 생성하는 레지스터 할당부; 상기 레지스터가 할당된 코드 내에 무가치한 이동명령어를 포함하는 무가치 복합 명령어를 검출하는 무가치 복합 명령어 검출부; 및 상기 무가치 복합 명령어가 검출되지 않으면, 상기 레지스터가 할당된 코드를 최종 코드로 배출하는 최종 코드 생성부를 포함하며, 상기 무가치 복합 명령어는,상기 무가치 복합 명령어가 검출되면, 상기 선택된 복합 명령어 후보를 제거하고 새로운 복합 명령어 후보를 선택하도록 상기 명령어 선택부로 지시하는 것을 특징으로 하는 복합 명령어를 위한 코드 생성 장치 및 그 코드 생성 방법에 관한 것이다. The present invention relates to an apparatus for generating a code for a compound instruction and a method for generating the code, the method comprising: an instruction selecting unit for selecting an appropriate compound instruction candidate from a candidate interference graph composed of a compound instruction candidate extracted from an intermediate expression tree; A register allocator configured to generate a code to which a register is allocated by allocating and merging registers to be used for the composite command candidate selected by the command selector; A valueless compound instruction detector for detecting a valueless compound instruction including a valueless move instruction in a code allocated to the register; And a final code generator for discharging the code allocated to the register as a final code if the valueless compound instruction is not detected, wherein the valueless compound instruction removes the selected compound instruction candidate when the valueless compound instruction is detected. And a command generation unit for instructing the command selection unit to select a new compound command candidate and a method of generating the code.

Description

복합 명령어 선택시 무가치 복합 명령어를 제거하여 코드를 최적화하기 위한 코드 생성 장치 및 그 코드 생성 방법{Apparatus and Method of Generating Code optimized with Compound Instruction by eliminating Nullified Compound Instruction}Apparatus and Method of Generating Code optimized with Compound Instruction by eliminating Nullified Compound Instruction}

본 발명은 복합 명령어 선택시 무가치 복합 명령어를 제거하여 코드를 최적화하기 위한 코드 생성 장치 및 그 코드 생성 방법에 관한 것으로서, 상세하게는 무가치 복합 명령어(NCI)가 사라질 때까지 명령어 선택부에서의 명령어 선택 단계와 레지스터 할당부의 레지스터 할당(레지스터 병합을 포함) 단계를 반복적으로 수행하는 코드 생성 장치 및 그 코드 생성 방법에 관한 것이다.[과제관리번호: 10030565, 과제명: MPSoC 설계기술개발]The present invention relates to a code generation device for optimizing a code by removing a valueless compound instruction when selecting a compound instruction, and a method of generating the code. It relates to a code generating device that repeatedly performs a step and register allocation (including register merging) of the register allocation unit and a method of generating the code. [Task control number: 10030565, Task name: MPSoC design technology development]

일반적으로, 프로세서는 메모리에 저장된 데이터를 레지스터에 로딩하여 프로그램을 실행시키는데, 프로그램을 실행하기 위해서는 프로그램(기호) 변수들이 프로세서에 내장된 레지스터에 할당되어야 한다. 이와 같은 단계는, 소스 코드를 목적 코드로 변환하는 컴파일러에 의해 수행된다. 컴파일러가 코드를 생성하는 작업(code generation)은 주로 명령어 선택(instruction selection) 및 레지스터 할당(register allocation) 단계로 구분되며, 컴파일러는 레지스터에 할당 단계에서 그래프 컬러링 알고리즘이라 불리는 알고리즘을 이용한다.In general, a processor executes a program by loading data stored in a memory into a register. In order to execute a program, program (symbol) variables must be assigned to a register embedded in the processor. This step is performed by a compiler that converts the source code into object code. Code generation by the compiler is divided into instruction selection and register allocation phases, and the compiler uses an algorithm called a graph coloring algorithm in the register allocation phase.

DSP(digital signal processor)와 같은 대부분의 임베디드 프로세서에서는 성능 증가를 위해서 기능 블록에 전용된 작은 개수의 레지스터를 사용한다. 이러한 아키텍처에서는 하나의 기능 블록의 결과로서 레지스터에 저장된 값을 다른 기능 블록의 입력으로 사용하기 위해서 다른 레지스터로 옮기는 경우가 많다. 컴파일러를 이용한 코드 생성 과정에서도 이 때문에 많은 복제 관련 명령어(copy 또는 move)가 이용된다. 이와 같은 복제 관련 명령어들은 코드 성능을 저하하는 원인이 되므로, 그래프 컬러링 알고리즘을 이용한 레지스터 병합(register coalescing)과 같은 최적화 기술을 사용하면 컴파일러가 생성한 코드 성능을 향상시킬 수 있다. Most embedded processors, such as digital signal processors (DSPs), use a small number of registers dedicated to the function block to increase performance. In such architectures, the value stored in a register as a result of one function block is often moved to another register for use as input to another function block. In the code generation process using the compiler, many copy-related commands (copy or move) are used. Because these replication-related instructions cause code performance degradation, optimization techniques such as register coalescing using graph coloring algorithms can improve the code performance generated by the compiler.

한편, 명령어 구문(instruction word) 내에서 여러 ALU(arithmetic and logic unit)에 대한 작업 또는 메모리 작업을 인코딩하는 복합 명령어(compound instruction)는, 성능 개선의 가장 효과적인 방법으로 여겨져 왔다. SOC에 임베드된 코어는 성능, 에너지 및 스토리지에서 심각한 심각한 디자인 제약을 겪어왔다. 동시에, 그들은 다른 응용 프로그램에 대한 재사용을 보장하기 위해 프로그래밍이 될 필요가 있다. 이러한 설계 과제를 충족하기 위해, 그들은 종종 응용 프로그램에 특화된 명령어-셋-프로세서(Application-specific instruction-set processor : ASIP)의 형태로 구현된다. On the other hand, compound instructions for encoding operations or memory operations on various arithmetic and logic units (ALUs) within instruction words have been considered the most effective way of improving performance. Cores embedded in SOC have suffered severe design constraints in performance, energy and storage. At the same time, they need to be programmed to ensure reuse for other applications. To meet these design challenges, they are often implemented in the form of an application-specific instruction-set processor (ASIP).

ASIP의 명령어는 일반적으로 add-mult 및 shift-move와 같은 복합 명령어이고, 이러한 복합 명령어의 각각은 하나 이상의 ALU 또는 메모리 작업을 인코딩한다. 임베디드 프로세서 코어의 주요 장점은 여러 가지 작업을 하나의 명령어 안에 집어 넣음으로써 코드 크기를 감소시키는 것이다. 또한, 그들은 보통 하나의 머신 사이클 동안에 시퀀스 또는 병렬로 내부 작업을 수행하도록 설계된다. Instructions in ASIP are generally compound instructions, such as add-mult and shift-move, each of which encodes one or more ALUs or memory operations. The main advantage of an embedded processor core is to reduce code size by putting multiple tasks into a single instruction. In addition, they are usually designed to perform internal tasks in sequence or in parallel during one machine cycle.

멀티사이클의 수행시간을 가지는 명령어에 필요한 추가적인 시퀀싱 오버헤드를 줄일 수 있기 때문에, 하나의 복합 명령어를 수행하는 것이 더욱 효과적이다. 따라서 복합 명령어가 완벽하게 활용되는 경우, 실행 시간이 감소된다. It is more efficient to execute one compound instruction because the additional sequencing overhead required for instructions with multicycle execution time can be reduced. Thus, when the compound instruction is fully utilized, execution time is reduced.

그러나 이 같은 복합 명령어의 장점은 컴파일러의 코드 생성을 복잡하게 만드는 단점을 가진다. 비록 레지스터 병합이 유용한 최적화 알고리즘이라고 해도, 복합 명령어를 가진 코드에 적용되는 경우 무가치한 복합 명령어를 발생시키는 등 예상치 못한 부작용을 가져오기도 한다.However, the advantage of such compound instructions is that they complicate the compiler's code generation. Although register merge is a useful optimization algorithm, it can have unexpected side effects, such as generating worthless compound instructions when applied to code with compound instructions.

본 발명이 해결하고자 하는 과제는, 복합 명령어 선택시 레지스터 할당 단계에서 이용되는 레지스터 병합을 고려함으로써 무가치한 복합 명령어인 무가치 복합 명령어의 발생을 방지하여 최종 목적 코드의 품질을 향상시킬 수 있는, 복합 명령어를 위한 코드 생성 장치 및 코드 생성 방법을 제공하는 것이다. The problem to be solved by the present invention, by considering the register merge used in the register allocation step when selecting a complex instruction, to prevent the generation of a valueless compound instruction, which is a valueless compound instruction to improve the quality of the final object code, a compound instruction To provide a code generating apparatus and a code generating method for.

상기한 과제를 해결하기 위해 본 발명은, 중간 표현 트리로부터 추출된 복합 명령어 후보로 이루어진 후보 간섭 그래프에서 적절한 복합 명령어 후보를 선택하는 명령어 선택부; 상기 명령어 선택부에 의해 선택된 복합 명령어 후보에 사용할 레지스터를 할당 및 병합하여 레지스터가 할당된 코드를 생성하는 레지스터 할당부; 상기 레지스터가 할당된 코드 내에 무가치한 이동명령어를 포함하는 무가치 복합 명령어를 검출하는 무가치 복합 명령어 검출부; 및 상기 무가치 복합 명령어가 검출되지 않으면, 상기 레지스터가 할당된 코드를 최종 코드로 배출하는 최종 코드 생성부를 포함하며, 상기 무가치 복합 명령어 검출부는, 상기 무가치 복합 명령어가 검출되면, 상기 선택된 복합 명령어 후보를 제거하고 새로운 복합 명령어 후보를 선택하도록 상기 명령어 선택부로 지시하는 것을 특징으로 하는 복합 명령어를 위한 코드 생성 장치 및 그 코드 생성 방법을 제공하는 것을 특징으로 한다.In order to solve the above problems, the present invention, the command selection unit for selecting an appropriate compound instruction candidate from the candidate interference graph consisting of the compound instruction candidate extracted from the intermediate expression tree; A register allocator for allocating and merging registers to be used for the composite instruction candidate selected by the command selector to generate a code to which a register is assigned; A valueless compound instruction detector for detecting a valueless compound instruction including a valueless move instruction in a code allocated to the register; And a final code generator for discharging the code allocated to the register as a final code when the valueless compound instruction is not detected. The valueless compound instruction detector may detect the selected compound instruction candidate when the valueless compound instruction is detected. And a method for generating a code for a composite command and instructing the command selection unit to remove and instruct the command selection unit to select a new composite command candidate.

본 발명에 의하면, 복합 명령어 선택시 레지스터 할당 단계에서 이용되는 레 지스터 병합을 고려함으로써 무가치한 복합 명령어의 발생을 방지하여 최종 목적 코드의 품질을 향상시킬 수 있다. According to the present invention, by considering the register merge used in the register allocation step when selecting a complex instruction, it is possible to prevent the generation of a valuable complex instruction and improve the quality of the final object code.

이하에서 첨부된 도면을 참조하여, 본 발명의 바람직한 실시예를 상세히 설명한다. 각 도면에 제시된 동일한 참조부호는 동일한 부재를 나타낸다. Hereinafter, preferred embodiments of the present invention will be described in detail with reference to the accompanying drawings. Like reference numerals in the drawings denote like elements.

도 1은 본 발명의 실시예에 따른, 복합 명령어 선택시 무가치 복합 명령어를 제거하여 코드를 최적화하기 위한 코드 생성 장치를 나타낸 도면이다.1 is a diagram illustrating a code generation apparatus for optimizing a code by removing a valueless compound instruction when selecting a compound instruction according to an embodiment of the present invention.

본 발명의 실시예에 따른 코드 생성 장치(100)는 명령어 선택부(instruction selector, 110), 레지스터 할당부(register allocator, 120), 무가치 복합 명령어 검출부(nullified compound instrucion detector, 130) 및 최종 코드 생성부(140)를 포함한다. The code generating apparatus 100 according to the embodiment of the present invention includes an instruction selector 110, a register allocator 120, a null valued compound instrucion detector 130, and a final code generation. The unit 140 is included.

본 발명에 따른 코드 생성 장치(100)는 소스 코드(source code)를 입력으로 받아 기계가 이해할 수 있는 목적 코드(target code)를 최종적으로 생성하는 컴파일러(compiler)의 일종으로서 트리 파싱(tree parsing) 방식과 동적 프로그래밍 방식을 이용하며, 복합 명령어 선택(compound instruction selction)시 레지스터 할당(register allocation) 단계에서 이용되는 레지스터 병합(register coalescing)을 고려함으로써 무가치한 복합 명령어인 무가치 복합 명령어(nullified compound instruction)의 발생을 방지하여 최종 목적 코드의 품질을 향상시킬 수 있다. The code generating apparatus 100 according to the present invention is a kind of compiler that finally receives a source code as an input and finally generates a target code that can be understood by a machine. Tree parsing Null compound compound instruction, a valueless compound instruction that uses register coalescing, which is used in the register allocation step during compound instruction selction. This can improve the quality of the end code by preventing the occurrence of.

명령어 선택부(110)는 사용자가 작성한 소스 코드와 동일한 의미(semantic)를 가지는 타겟 프로세서의 명령어들을 선택하는 역할을 하며, 한다.The instruction selector 110 selects instructions of a target processor having the same semantics as the source code written by the user.

레지스터 할당부(120)는 명령어 선택부(110)에서 선택된 명령어들이 사용하는 레지스터를 할당 및 병합하여 복합 명령어를 포함하는 코드를 생성하며, 생성된 코드는 무가치 복합 명령어 검출부(130)와 최종 코드 생성부(140)로 전달된다.The register allocator 120 generates a code including a complex instruction by allocating and merging registers used by the instructions selected by the instruction selector 110. The generated code generates a valueless complex instruction detector 130 and a final code. It is delivered to the unit 140.

레지스터 할당 알고리즘에서, 간섭 그래프(interference graph:IG)는 노드 또는 임시변수로서 각 오퍼랜드의 생존 범위(live range)를 표현하는데 이용된다.간섭 그래프는 두 개의 임시 노드의 생존 범위의 간섭 엣지를 보여주며, 간섭 그래프에서 한 노드가 컬러 가능성이 있다는 것은 그 대응하는 노드 또는 임시변수가 어떠한 레지스터에도 할당될 수 있다는 것을 의미하며, 그 이웃 노드의 레지스터 할당과는 무관함을 의미한다. 그 이웃 노드의 개수가 이용가능한 컬러(레지스터)의 개수보다 많으면 그 노드는 높은 디그리(significant degree)를 가진다고 하고, 그 반대의 경우에는 낮은 디그리를 가진다고 하며, 낮은 디그리의 노드들만이 쉽게 채색될 수 있다. In the register allocation algorithm, an interference graph (IG) is used to represent the live range of each operand as a node or a temporary variable. The interference graph shows the interference edge of the survival range of two temporary nodes. For example, the possibility of a node being colored in an interference graph means that its corresponding node or temporary variable can be assigned to any register, and that it is independent of the register assignment of its neighboring node. If the number of neighboring nodes is greater than the number of available colors (registers), then the node is said to have a high degree of degree, vice versa, and has a low degree, and only nodes of low degree can be easily colored. have.

그래프 컬러링에서, 레지스터 병합은 각각 move 명령어에서 소스 오퍼랜드와 데스티네이션 오퍼랜드를 나타내는 2개의 노드를 하나의 새로운 노드로 병합하는 것을 의미하며, 병합된 새로운 노드와 인접한 엣지는 대체된 노드들과 인접한 엣지들을 결합시킨다. 그 후에, 레지스터는 새로운 노드에 할당되고, 관련된 move 명령어는 제거되어야 한다. 이처럼, 레지스터 병합은 컴파일러가 코드 상의 많은 중복된 move 명령어들을 제거하는 것을 도와준다. 그러나 비록 레지스터 병합이 유용한 최적화 알고리즘이라고 해도, 복합 명령어를 가진 코드에 적용되는 경우 후술할 무가치 복합 명령어를 발생시키는 등 예상치 못한 부작용을 가져오기도 한다.In graph coloring, register merging means merging two nodes, each representing a source operand and a destination operand, in a move instruction into one new node, where the merged new node and adjacent edges are replaced by the replaced nodes and adjacent edges. Combine. After that, the register is allocated to the new node and the associated move command must be removed. As such, register merging helps the compiler remove many duplicate move instructions in code. However, even though register merge is a useful optimization algorithm, it can have unexpected side effects such as generating valueless compound instructions which will be described later when applied to code having compound instructions.

무가치 복합 명령어 검출부(130)는 레지스터 할당부(120)에서 생성된 코드에서 무가치 복합 명령어의 발생 여부를 검출하고, 만일 무가치 복합 명령어가 검출되지 않으면 최종 코드 생성부(140)로 하여금 최종 코드를 배출토록 하고, 무가치 복합 명령어가 검출되면 명령어 선택부(110)에 알려주어 명령어를 다시 선택하게 한다.The valueless compound instruction detector 130 detects whether a valueless compound instruction has occurred in the code generated by the register allocator 120, and if the valueless compound instruction is not detected, the final code generator 140 discharges the final code. If a valueless compound command is detected, the command selection unit 110 is informed to select the command again.

본 발명에 따른 코드 생성 장치(100)는 무가치 복합 명령어(NCI)가 사라질 때까지 명령어 선택부(110)에서의 명령어 선택 단계와 레지스터 할당부(120)의 레지스터 할당(레지스터 병합을 포함) 단계를 반복적으로 수행한다. The code generating apparatus 100 according to the present invention performs a step of selecting a command in the command selecting unit 110 and a step of allocating registers (including register merging) of the register allocating unit 120 until the NCI disappears. Perform iteratively.

도 2는 도 1의 명령어 선택부를 상세히 나타낸 도면이다.FIG. 2 is a diagram illustrating the command selection unit of FIG. 1 in detail.

도 2를 참조하면, 명령어 선택부(110)는 복합 명령어 후보 선택부(candidate set selector, 111), 라벨링부(1120), 및 커버링부(113)를 포함한다.Referring to FIG. 2, the command selector 110 includes a compound command selector 111, a labeling unit 1120, and a covering unit 113.

복합 명령어 후보 선택부(111)는 우선 중간 표현(IR) 트리에서 복합 명령어 후보(CIC)인 노드 클러스터를 확인하고, 한다. The compound instruction candidate selector 111 first checks a node cluster that is a compound instruction candidate (CIC) in the intermediate representation (IR) tree.

라벨링부(112)는 중간 표현 트리에서 각 노드들을 간편 규칙들로 라벨링하고, 커버링부(113)는 중간 표현 트리를 커버하는 코드를 생성한다. The labeling unit 112 labels each node with simple rules in the intermediate expression tree, and the covering unit 113 generates a code covering the intermediate expression tree.

도 3은 본 발명의 다른 실시예에 따른 코드 생성 장치를 나타낸 도면이다.3 is a diagram illustrating a code generation device according to another exemplary embodiment of the present invention.

본 발명의 다른 실시예에 따른 코드 생성 장치(300)는 코드 생성기(100)에 코드 생성기 생성부(200)를 더 포함할 수 있다. 코드 생성기(100)는 도 1 내지 3의 코드 생성 장치(100)와 동일한 구성과 기능을 가지며, 중복된 설명은 생략하도록 한다.The code generation apparatus 300 according to another embodiment of the present invention may further include a code generator generation unit 200 in the code generator 100. The code generator 100 has the same configuration and function as the code generation apparatus 100 of FIGS. 1 to 3, and redundant description thereof will be omitted.

코드 생성기 생성부(200)는 코드 생성기(code generator, 100)를 자동으로 생성하며, 복합 명령어에 대한 트리 형상이 없는 규칙들을 트리 형상(tree shape)을 가지는 서브 규칙(sub-rule)으로 분할한다. The code generator generation unit 200 automatically generates a code generator 100 and divides rules having no tree shape for a compound instruction into sub-rules having a tree shape. .

코드 생성기 생성부(200)는 분할 규칙 추출부(split rule extractor, 210) 및 코드 생성기 생성부(code generator-generator, 220)를 포함한다.The code generator generator 200 includes a split rule extractor 210 and a code generator-generator 220.

코드 생성기 생성부(220)는 트리 문법(tree grammar)으로 작성된 목적 프로세서 디스크립션(target processor description)으로부터 코드 생성기(100)를 자동으로 생성한다.The code generator generator 220 automatically generates the code generator 100 from a target processor description written in a tree grammar.

복합 명령어에 대한 트리 형상이 없는 규칙(nontree-shaped rule)은 트리 파서(tree parser)에 바로 적용될 수 없기 때문에, 분할 규칙 추출부(210)는 복합 명령어에 대한 트리 형상이 없는 모든 규칙들을 트리 형상을 가지는 서브 규칙으로 분할한다. 여기서, 서브 규칙은 분할 규칙(split rule)이라 정의하고, 복합 명령어에 대한 트리 형상이 없는 규칙은 복잡 규칙(complex rule)으로 정의하며, 기본 명령어(basic instruction) 또는 복합 명령어에 대한 트리 형상을 가지는 규칙을 간편 규칙(simple rule)으로 정의하기로 한다. 규칙에 대한 예제는 다음과 같다.Since the nontree-shaped rule for the compound instruction cannot be applied directly to the tree parser, the splitting rule extractor 210 tree all rules without the tree shape for the compound instruction. Split into subrules with Here, a sub rule is defined as a split rule, a rule having no tree shape for a compound instruction is defined as a complex rule, and has a tree shape for a basic instruction or a compound instruction. Let's define a rule as a simple rule. An example rule is shown below.

(예제)(example)

rulesrules :  : rr 1One (( addadd ,1), ,One), rr 22 (( movmov ,1), ,One), rr 33 (( sllsll ,1), ,One), rr 44 (( sllsll -- addadd ,1.5), 1.5), rr 55 (( sllsll -- movmov ,1), r, 1), r 66 (( addadd -- movemove ,1),One)

splitsplit rulesrules :  : rr 4141 (( sllsll ), ), rr 4242 (( addadd ), ), rr 5151 (( sllsll ), ), rr 5252 (( movmov ), ), rr 6161 (( addadd ), r), r 6262 (( movmov ))

상기 예제에서, ri 규칙은 순서대로 정렬된 값들의 세트인 튜플(tuple)을 동 반한다. 튜플의 첫째 엘리먼트는 작업을 의미하고, 둘째 엘리먼트는 그 작업의 관련 비용(associated cost)을 의미한다. 예를 들어, r6는 add와 mov란 2개의 병렬 작업으로 구성되며, 그 비용은 1 이다.In the above example, the r i rule carries a tuple, which is a set of values arranged in order. The first element of the tuple represents the task, and the second element represents the associated cost of the task. For example, r 6 consists of two parallel operations, add and mov, with a cost of 1.

상기 예제에서, r1과 r2와 r3는 간편 규칙인 반면에, r4와 r5와 r6은 복잡 규칙이다. r4와 r5와 r6은 (r41,r42), (r51,r52) 및 (r61,r62)로 각각 분할되며, 분할 규칙 추출(split rule extraction: SRE) 단계에서는 그 비용은 아직 결정되지 않는다.In the above example, r 1 and r 2 and r 3 are simple rules, while r 4 and r 5 and r 6 are complex rules. r 4 and r 5 and r 6 are divided into (r 41 , r 42 ), (r 51 , r 52 ) and (r 61 , r 62 ) respectively, and in the split rule extraction (SRE) The cost is not yet determined.

코드 생성기 생성부(200)는 분할 규칙들을 포함하는 모든 규칙들을 새로 생성된 코드 생성기(100)의 명령어 선택부(110)로 저장한다. 이때 분할 규칙들이 복잡 규칙을 형성하도록 정확하게 그룹화된 정보가 수집된다.The code generator generation unit 200 stores all the rules including the division rules as the command selector 110 of the newly generated code generator 100. At this time, information is correctly grouped so that the division rules form a complex rule.

도 4는 중간 표현 트리 및 복합 명령어 후보를 예시한 도면이다.4 illustrates an intermediate representation tree and a compound instruction candidate.

도 4의 중간 표현 트리(intermediate tree) 및 복합 명령어 후보(compound instruction candidate: CIC)는 예제를 이용하였다.The intermediate representation tree and compound instruction candidate (CIC) of FIG. 4 are used as examples.

복합 명령어 후보 선택부(111)는 우선 중간 표현 트리에서 복합 명령어 후보(CIC)인 노드 클러스터를 확인한다. 예를 들어, 도 4(a)의 중간 표현 트리에서, 노드 1과 노드 4를 포함하는 노드 클러스터 B는 복합 명령어 후보(CIC)가 될 수 있다. 노드 클러스터 B의 2개 멤버 노드가 복잡 규칙 r4로부터 분할된 r41과 r41에 각각 매치되기 때문이다. The compound instruction candidate selector 111 first identifies a node cluster that is a compound instruction candidate (CIC) in the intermediate expression tree. For example, in the intermediate expression tree of FIG. 4 (a), node cluster B including node 1 and node 4 may be a compound instruction candidate (CIC). This is because two member nodes of node cluster B match r 41 and r 41 , respectively, partitioned from complexity rule r 4 .

이와 마찬가지로, 노드 클러스터 D, E, F 및 G도 복합 명령어 후보(CIC)가 될 수 있다. 반면에, 노드 클러스터 A, C 및 h는, 데이터 의존성(dependence) 때문 에 병렬로 수행될 수 없으므로, 복합 명령어 후보 리스트에서 제거된다.Similarly, node clusters D, E, F, and G may also be compound instruction candidates (CICs). On the other hand, node clusters A, C, and h cannot be performed in parallel because of data dependencies, and thus are removed from the compound instruction candidate list.

복합 명령어 후보(CIC)들은 프리커버 작업 및 커버링 작업을 수행하는 커버링부(113)에서 중간 표현 트리를 커버(cover)하는데 이용된 후, 최종 코드 생성부(140)에서 병렬-수행이 가능한 복합 명령어인 다출력-명령어(multi-output instruction:MOI)로 생성되어 최종 코드로 배출된다. Compound instruction candidates (CICs) are used to cover the intermediate expression tree in the covering unit 113 that performs the precover and covering operations, and then execute the parallel instructions in the final code generator 140. It is generated as a multi-output instruction (MOI) and emitted to the final code.

그러나 복합 명령어 후보들 간의 간섭 때문에, 모든 복합 명령어 후보(CIC)들은 커버링 작업을 고려하여 선택된다. 예를 들어, 도 4(b)에서 5개의 복합 명령어 후보들이 산출되더라도, 노드 클러스터 B와 D가 동시에 선택될 수 없다. 만일 동시에 B와 D가 선택된다면, 트리 노드 1은 2번 커버되기 때문이다.However, due to interference between compound instruction candidates, all compound instruction candidates (CICs) are selected in consideration of the covering operation. For example, even if five compound instruction candidates are calculated in FIG. 4B, node clusters B and D cannot be simultaneously selected. If B and D are selected at the same time, it is because tree node 1 is covered twice.

선택된 복합 명령어 후보들이 서로 간섭하지 않고 유효하게 커버되기 위해, 복합 명령어 후보들은 신중하게 선택되어야 한다. 복합 명령어 후보 선택부(111)의 후보 선택(candid set selection) 단계에서는 후보 간섭 그래프(candidate interference graph: CIG) 상의 간섭 관계를 후술할 2개의 종류로 분류하고, 각 종류에 따라 적절하게 간섭 관계를 다뤄야 한다.In order for the selected composite instruction candidates to be effectively covered without interfering with each other, the composite instruction candidates should be carefully selected. In the candidate set selection step of the compound instruction candidate selection unit 111, the interference relationship on the candidate interference graph (CIG) is classified into two types to be described later, and the interference relationship is appropriately selected according to each type. Should be dealt with.

후보 간섭 그래프(candidate interference graph: CIG)에서, 노드 n은 복합 명령어 후보를 나타내고, 엣지(edge)는 인접 노드와의 간섭 관계를 나타내며, 여러 노드 중 하나의 노드만을 선택받도록 강요된다. In a candidate interference graph (CIG), node n represents a compound instruction candidate, an edge represents an interference relationship with an adjacent node, and only one node among several nodes is forced to be selected.

도 5는 후보 간섭 그래프, 라벨링, 커버링, 커버링 단계의 코드, 및 레지스터 할당 후의 생성 코드를 예시한 도면이다. 도 5도 예제의 규칙을 이용하였다.5 is a diagram illustrating candidate interference graphs, labeling, covering, codes of covering steps, and generated codes after register allocation. Figure 5 also uses the rules of the example.

도 5(a)는 후보 간섭 그래프(CIG)로서, 도 5(a)에서 실선으로 표시된 엣 지(edge)는 커버링 간섭관계(covering interference)를 의미한다. 도 5(a)의 B와 D의 경우처럼, 실선으로 표시된 엣지로 연결되는 복합 명령어 선택 후보(CIC)들은 동일한 분할 규칙을 공유하기 때문에, 그 2개의 복합 명령어 선택 후보들은 커버링 단계에서 충돌된다.FIG. 5A illustrates a candidate interference graph CIG, and an edge indicated by a solid line in FIG. 5A indicates a covering interference. As in the case of B and D of Fig. 5 (a), since the complex instruction selection candidates (CICs) connected to the edges indicated by solid lines share the same partitioning rule, the two complex instruction selection candidates collide in the covering step.

도 5(a)에서 점선으로 표시된 엣지(edge)는 의존 간섭관계(dependence interference)를 의미한다. 이러한 의존 간섭관계는, 중간 표현 트리(IR tree)를 커버하기 위해 하나의 복합 명령어 후보(CIC)를 선택하는 경우 다른 노드들 간에 새로운 의존관계를 가져오는 경우이다.An edge indicated by a dotted line in FIG. 5 (a) means dependency interference. This dependence interference is a case where a new dependency between other nodes is obtained when one complex instruction candidate (CIC) is selected to cover an IR tree.

예를 들어, 도 4(a)에서 트리 노드 1 과 5를 커버하기 위해 복합 명령어 후보(CIC)로 D가 선택된다고 가정하자. D를 선택한 경우, D의 노드들을 통과하는 G 의 3 과 4 노드 간에는 데이터 의존관계가 발생한다. 이러한 의존관계는 인터널 노드들의 실행을 직렬화하기 때문에, G는 더 이상 코드 상에서 병렬 수행 명령어(다출력-명령어, MOI)를 생성하기 위해 선택될 수는 없다.For example, assume that D is selected as a compound instruction candidate (CIC) to cover tree nodes 1 and 5 in FIG. 4 (a). If D is selected, a data dependency occurs between the 3 and 4 nodes of G that pass through the nodes of D. Since this dependency serializes the execution of internal nodes, G can no longer be selected to generate parallel execution instructions (multi-output instructions, MOI) in code.

후보 간섭 그래프(CIG)에서, 각 복합 명령어 후보 노드인 m은 가중된다. m 노드에 대응하는 복합 명령어에 대한 가중치(wm)는 다음의 [수학식 1]처럼 복잡 규칙인 r의 기회 비용(opportunity cost)인 C0로 정의된다. In the candidate interference graph (CIG), each compound instruction candidate node m is weighted. The weight w m for a compound instruction corresponding to node m is defined as C 0 , which is the opportunity cost of the complex rule r, as shown in Equation 1 below.

Figure 112009047292096-pat00001
Figure 112009047292096-pat00001

여기서, Cc는 크기와 지연시간(latency)으로 본 복합 명령어의 비용이다. Where C c is the cost of the composite instruction in size and latency.

ri 가 r에서 i-번째의 복잡 규칙이라고 할 때, r'i는 ri와 동일한 명령어 패턴을 나타내는 간편 규칙이라고 하자. 그러면 2개의 규칙인 ri와 r'i는 등가이다. Cs(ri)를 r'i의 비용으로 정의하고, ΣCs(ri)를 분할 규칙 r에 각각 대응하는 모든 간단 규칙의 총 비용으로 정의한다. 예를 들어, 예제의 규칙에서 Cs(r41)=1 인 것을 알 수 있으며, 이는 r3의 sll 명령어와 비용이 동일하다. When r i is the i-th complex rule in r, r ' i is a simple rule that represents the same instruction pattern as r i . Then the two rules r i and r ' i are equivalent. C s (r i) to define a cost of r 'i, and define the total cost of all the simple rule corresponding to each ΣC s (r i) the splitting rule r. For example, the example rule shows that C s (r 41 ) = 1, which is the same cost as the sll command in r 3 .

r4, r5, r6 의 각 비용은 다음과 같다. The costs of r 4 , r 5 and r 6 are as follows.

CC oo (( rr 44 ) = (1+1)-1.5 = 0.5 , ) = (1 + 1) -1.5 = 0.5, CC 00 (( rr 55 ) = (1+1)-1 = 1, ) = (1 + 1) -1 = 1, CC 00 (( rr 66 ) = (1+1)-1 = 1 ) = (1 + 1) -1 = 1

따라서, 복합 명령어 후보들의 가중치는 다음처럼 계산된다. Therefore, the weights of the compound instruction candidates are calculated as follows.

ww BB = 0.5 = 0.5 andand ww DD = = ww EE = = ww FF = = ww GG = 1= 1

복합 명령어 후보 선택(candidate set selection:CSS) 단계의 주 작업은 최대 이익(또는 최대의 가중치 합)을 가지는 적절한 복합 명령어 후보(CIC)들의 세트를 찾는 것이다. 2개의 복합 명령어 후보들이 간섭 제한 조건을 따른다면, 그들은 적절한 복합 명령어 후보들이다. The main task of the compound set selection (CSS) step is to find the appropriate set of compound instruction candidates (CICs) with the greatest benefit (or maximum weighted sum). If two compound instruction candidates follow the interference constraint, they are appropriate compound instruction candidates.

도 5(a)에서는, 다음의 4개의 적절한 복합 명령어 후보 세트가 있다: {B, E}, {B, F}, {D, E} 및 {F, G}. 2개 세트 {D, E} 와 {F, G}는 동일한 최대 이익(=2)을 가진다. {F, G}가 명령어 후보 선택 단계에서 선택된 것으로 가정하자. In FIG. 5 (a), there are four suitable complex instruction candidate sets: {B, E}, {B, F}, {D, E} and {F, G}. The two sets {D, E} and {F, G} have the same maximum benefit (= 2). Assume that {F, G} is selected in the command candidate selection step.

다음 단계에서, 복합 명령어 후보 세트는 중간 표현 트리(IR tree)를 횡단하는 트리 파서(tree parser)에 의해 이용되며, 최종 코드에 대한 명령어를 효율적으로 생성하기 위해 동적 프로그래밍을 이용한다. 비록, 최대 이익을 가지는 복합 명령어 후보들이 최적 비용을 가지는 코드를 보증하지는 않지만, 그들은 적어도 트리 파서에 최적 조건을 찾기 위한 좋은 시작점을 제공한다. 그러나, 복합 명령어 후보와 매칭되는 복잡 규칙은 트리가 없는 형상이며, 따라서 전체로서의 규칙은 트리 파서에 의해 인식될 수 없다. 파싱에 참가하기 위한 유일한 규칙은 트리 형상을 가진 분할 규칙을 통해서이다. 이러한 이유로, 최적의 복합 명령어 후보 세트가 계산된 후, 세트 내의 각 복합 명령어 후보와 매칭되는 복잡 규칙으로부터 모든 분할 규칙 ri의 비용을 계산해야 하며, 다음의 식과 같다.In the next step, the compound instruction candidate set is used by a tree parser traversing the intermediate representation tree (IR tree), using dynamic programming to efficiently generate instructions for the final code. Although the compound instruction candidates with the maximum benefit do not guarantee the code with the best cost, they at least provide a good starting point for finding the optimal condition for the tree parser. However, the complex rules that match compound instruction candidates are treeless shapes, and thus rules as a whole cannot be recognized by the tree parser. The only rule for participating in parsing is through a split rule with a tree shape. For this reason, after the optimal compound instruction candidate set is calculated, the cost of all partitioning rules r i must be calculated from the complex rules that match each compound instruction candidate in the set, as follows.

C(ri)=C(r'i)-Co(r)/n C (r i ) = C (r ' i ) -C o (r) / n

여기서, ri는 i-번째 분할 규칙이고, r'i는 ri와 등가이며, n은 분할 규칙 r의 개수이다. Where r i is the i-th division rule, r ' i is equivalent to r i, and n is the number of division rules r.

선택된 복합 명령어 후보의 세트 중에서 F 와 G가 간단 규칙인 r6와 매칭되므로, r61 과 r62의 분할 규칙들의 비용은 다음처럼 r6로부터 계산될 수 있다. Since F and G of the selected set of compound instruction candidates match the simple rule r 6 , the cost of the split rules of r 61 and r 62 can be calculated from r 6 as follows.

C(C ( rr 6161 )=1-1/2=0.5, C() = 1-1 / 2 = 0.5, C ( rr 6262 )=1-1/2=0.5) = 1-1 / 2 = 0.5

rulesrules :  : rr 1One (( addadd ,1), ,One), rr 22 (( movmov ,1), ,One), rr 33 (( sllsll ,1), ,One), rr 6161 (( addadd ,0.5), , 0.5), rr 6262 (( movmov ,0.5), 0.5)

분할 규칙들이 새로 비용이 늘어남과 함께, 라벨링 단계의 중간 표현 트리에서 간편 규칙들은 각 노드들로 라벨링된다. As the segmentation rules increase in cost, the simple rules in the intermediate expression tree of the labeling step are labeled with each node.

뒤따라오는 커버링 단계에서, 각 노드에서 함께 라벨링된 규칙들 중에서, 트리 파서는 전체의 중간 표현 트리를 커버하는 최적 공식을 추출한다. 예를 들어, 도 5(b)의 노드 3은 r2, r62 2개의 규칙들로 라벨링된다.In the following covering step, among the rules labeled together at each node, the tree parser extracts the optimal formula that covers the entire intermediate representation tree. For example, node 3 of FIG. 5 (b) is labeled with r 2 , r 62 two rules.

도 5(c)는 트리 내에서 모든 노드를 커버하는 3가지 규칙들로 이뤄진다: r3<-(1), r6<-(2,5), and r6<-(3,4). 결론적으로, sll, addmov, 및 addmov라는 3개의 명령어를 얻는다.5 (c) consists of three rules covering all nodes in the tree: r 3 <-(1), r 6 <-(2,5), and r 6 <-(3,4). In conclusion, you get three commands: sll, addmov, and addmov.

도 5(d)는 도 5(c)의 커버링 단계의 코드를 보여주며, 도 5(e)는 도 5(d)의 코드에 레지스터 병합과 레지스터 할당을 적용한 후 생성된 코드를 예시한다. 이 경우, move 명령어는 레지스터 할당 단계에서 혼자서 분리되어 제거될 수 없으므로, 컴파일러는 더 이상 첫째 줄의 addmov 명령어에 포함된 무가치한 move 명령어를 제거할 수 없다. FIG. 5 (d) shows the code of the covering step of FIG. 5 (c), and FIG. 5 (e) illustrates the code generated after applying register merge and register allocation to the code of FIG. 5 (d). In this case, the move instruction can not be detached and removed by itself during the register allocation phase, so the compiler can no longer remove the valueless move instruction contained in the addmov instruction on the first line.

도 1에서처럼, 레지스터 할당부(register allocator, 120)는 무가치 복합 명령어(NCI)의 존재를 명령어 선택부(instruction selector, 110)로 알려주기 위해 명령어 선택부(110)로 피드백되는 경로를 가진다. 이 역할을 무가치 복합 명령어 검출부(130)가 수행하며, 무가치 복합 명령어 검출부(130)는, 무가치 복합 명령어(NCI)를 검출한 후 명령어 선택부(110)로 하여금 후보 간섭 그래프(candidate interference graph:CIG) 상에서 무가치 복합 명령어를 발생시킨 복합 명령어 후보 인 F 와 G를 제거하고 새로운 복합 명령어 후보를 선택하도록 한다. 레지스터 할당 전에, 도 5(d)의 코드는 3의 비용을 가지는 최적 코드였으나, 도 5(d)의 코드는 도 5(e)에서처럼 무가치 복합 명령어(NCI)를 발생시키므로 폐기되어야 한다. As shown in FIG. 1, the register allocator 120 has a path fed back to the instruction selector 110 to inform the instruction selector 110 of the existence of a valueless compound instruction NCI. The valueless compound instruction detector 130 performs this role, and the valueless compound instruction detector 130 detects the valueless compound instruction (NCI) and causes the command selector 110 to execute a candidate interference graph (CIG). Remove F and G, the candidates for the valueless compound instruction, and select the new compound instruction candidate. Prior to register allocation, the code of FIG. 5 (d) was an optimal code having a cost of 3, but the code of FIG. 5 (d) generates a valueless compound instruction (NCI) as in FIG. 5 (e) and should be discarded.

명령어 선택부(110)는 NCI가 검출된 후 후보 간섭 그래프(CIG) 상에서 무가치 복합 명령어(NCI)를 발생시킨 복합 명령어 후보(CIC)를 제거하고 나서, 다음의 가장 적합한 복합 명령어 후보 세트(CIC set)를 다시 선택한다. 그러나, 이는 무가치 복합 명령어에 대한 문제를 해결하기에는 너무 공격적이고 순진한 방법이다.The instruction selector 110 removes a compound instruction candidate (CIC) that generated a valueless compound instruction (NCI) on a candidate interference graph (CIG) after NCI is detected, and then selects a next most suitable compound instruction candidate set (CIC set). Select again. However, this is too aggressive and naive to solve the problem of valueless compound instructions.

도 6은 후보 간섭 그래프, 라벨링, 커버링, 커버링 단계의 코드, 및 레지스터 할당 후의 생성 코드를 예시한 도면으로서, 예제의 규칙을 이용하였다.FIG. 6 illustrates a candidate interference graph, labeling, covering, code of covering steps, and generated code after register allocation, using example rules.

X라고 하는 복합 명령어 후보(CIC)가 첫 번째 시도에서 무가치 복합 명령어를 가진다고 하더라도, X가 다음 시도에서 다른 복합 명령어 후보들과 함께 선택되어 새로운 복합 명령어 후보 세트를 형성하는 한 그 복합 명령어는 다시 취소되지 않을 확률이 여전히 크다. 상이한 복합 명령어 후보(CIC)들은 커버링 단계뿐만 아니라 레지스터 병합 단계에서도 상이한 결과를 가져온다. 단지 무가치 복합 명령어를 발생시킨다는 이유로 후보 간섭 그래프(CIG)에서 X를 단순히 제거하는 것은 X를 이용하여 최적 코드(optimal code)를 발견할 기회를 박탈하는 것이다.Even if a compound instruction candidate (CIC) called X has a valueless compound instruction on the first attempt, the compound instruction is not canceled again as long as X is selected with other compound instruction candidates on the next attempt to form a new set of compound instruction candidates. There is still a high probability. Different compound instruction candidates (CICs) produce different results not only in the covering phase but also in the register merging phase. Simply removing X from the candidate interference graph (CIG) just because it generates a valueless compound instruction deprives X of the opportunity to find the optimal code.

도 6(a)는 이를 나타낸 것으로서, 무가치 복합 명령어 문제를 좀 더 잘 해결하기 위해 후보 간섭 그래프에 추가적인 간섭 엣지를 늘려야 한다.As shown in FIG. 6 (a), it is necessary to increase an additional interference edge in the candidate interference graph to better solve the valueless compound instruction problem.

도 5(e)의 코드에서, 무가치 복합 명령어인 addmov 때문에 일단 첫째 선택인 {F, G}가 실패하면, 명령어 선택부(instruction selector, 110)는 최대 이익을 가 지는 다음의 적절한 복합 명령어 후보(CIC) 세트를 선택한다. In the code of FIG. 5 (e), once the first choice {F, G} fails because of the valueless compound instruction addmov, the instruction selector 110 has the next best compound instruction candidate having the maximum benefit. CIC) set.

동일한 후보 간섭 그래프(CIG)에서, {F, G}는 여전히 최대 이익을 가진 세트에 속해 있으므로, 다시 {F, G}를 선택할 기회가 있다. {F, G}가 다시 선택되는 것을 방지하기 위해, 후보 간섭 그래프에 새로운 엣지를 추가하며, 그 새로운 엣지를 다른 유형의 간섭으로 나타내기 위해 도 6(a)처럼 굵은 선으로 표시한다.In the same candidate interference graph CIG, {F, G} still belongs to the set with maximum benefit, so there is a chance to select {F, G} again. In order to prevent {F, G} from being reselected, a new edge is added to the candidate interference graph, and the new edge is indicated by a bold line as shown in FIG. 6 (a) to represent another type of interference.

굵은 선으로 표시된 간섭 엣지(interference edge)는 상호 연결된 복합 명령어 후보 노드들의 상호 제외(mutual exclusion edge)를 의미하는 상호 제외 엣지로서, 어떠한 환경에서도 상호 제외 엣지로 연결된 노드들은 무가치 복합 명령어(NCI)의 발생을 방지하기 위해 함께 선택될 수 없다.Interference edges, denoted by bold lines, are mutual exclusion edges, which mean mutual exclusion edges of interconnected composite instruction candidate nodes.In any environment, nodes connected by mutual exclusion edges are worthless NCIs. They cannot be selected together to prevent their occurrence.

이제 4개의 적절한 복합 명령어 후보(CIC) 세트인 {B, E}, {B, F}, {D, E}, 및 {G}가 존재하며, 그 중에서 {D, E}가 2의 최대 비용을 가진 유일한 세트이다.There are now four suitable complex instruction candidate (CIC) sets, {B, E}, {B, F}, {D, E}, and {G}, where {D, E} has a maximum cost of 2. It's the only set with that.

둘째 시도에서, 도 6(b)의 라벨링(labeling) 단계 및 도 6(c)의 커버링(covering) 단계를 거친 후, 도 6(d)의 코드가 생성된다. 그러나, 도 6(d)의 코드는 레지스터 병합 후에 생성된 코드는 도 6(e)에서 볼 수 있는 것처럼 무가치 복합 명령어인 sllmov를 가진다. 따라서, 도 6(a)의 후보 간섭 그래프(CIG)에 또 다시 새로운 상호 제외 엣지가 추가되어야 한다.In a second attempt, after going through the labeling step of FIG. 6 (b) and the covering step of FIG. 6 (c), the code of FIG. 6 (d) is generated. However, the code of FIG. 6 (d) has a valueless compound instruction sllmov, as shown in FIG. 6 (e). Therefore, a new mutual exclusion edge must be added to the candidate interference graph CIG of FIG. 6 (a) again.

도 7은 후보 간섭 그래프, 라벨링, 커버링, 커버링 단계의 코드, 및 레지스터 할당 후의 생성 코드를 예시한 도면으로서, 예제의 규칙이 이용되었다.FIG. 7 is a diagram illustrating candidate interference graphs, labeling, covering, codes of covering steps, and generated codes after register allocation, with example rules being used.

앞서 설명한 것처럼, 도 7(a)를 참조하면 후보 간섭 그래프(CIG)에서 D 와 E 사이에 새로운 상호 제외 엣지가 추가되었다. 적절한 복합 명령어 후보 세트들을 재계산하면 {B, E}, {B, F}, {D}, 및 {G}가 산출되고, 그 중에서 최초 두개의 세트는 1.5의 최대 비용을 가진다.As described above, referring to FIG. 7A, a new mutual exclusion edge is added between D and E in the candidate interference graph CIG. Recalculating the appropriate compound instruction candidate sets yields {B, E}, {B, F}, {D}, and {G}, wherein the first two sets have a maximum cost of 1.5.

셋째 반복 시도에서, 도 7(b)의 라벨링(labeling) 단계 및 도 7(c)의 커버링(covering) 단계를 거친다. 명령어 선택 단계에서 어느 것이든 선택될 수 있기 때문에, 도 7(c)처럼 {B, E}가 선택되면, 도 7(d)의 코드가 생성된다. In a third iteration, the labeling step of FIG. 7 (b) and the covering step of FIG. 7 (c) are passed. Since any one can be selected in the command selection step, when {B, E} is selected as in FIG. 7 (c), the code of FIG. 7 (d) is generated.

세번의 반복 시도 후, 도 7(e)처럼 무가치 복합 명령어(NCI)가 없으며, 제거가능한 mov 명령어를 가진, 최소 비용을 가진 최종 코드가 마침내 얻어진다.After three iterative attempts, there is no valueless compound instruction (NCI) as shown in FIG.

NCI가 없는 코드를 얻기 위해, 명령어 선택부(110)는 도 7(d)의 코드를 생산해야 한다.In order to obtain a code without NCI, the command selector 110 should produce the code of FIG.

불행하게도, 명령어 후보 선택(CSS:candidate set selection)의 전 단계에서 컴파일러는 복합 명령어 후보(CIC:compound instruction candidate)로서 원래 선택한 {F, G}보다 덜 중요한 {B, E}를 선택했음을 의미하기 때문에 이는 불가능하다.Unfortunately, at the stage of selection set selection (CSS), the compiler chose {B, E} to be less important than the original choice of {F, G} as compound instruction candidate (CIC). This is not possible.

명령어 후보 선택(CIC) 단계에서 그 이익도(profit)에 따른 최적의 복합 명령어 후보(CIC) 세트를 선택하기 위한 정책(policy)은 복합 명령어로서 성공적으로 선택되는 복합 명령어 후보의 선택 기회를 늘리는 것인데, 이 정책은 항상 최소 비용을 가지는 최종 코드의 생성을 보증하지 않는다. 이는 레지스터 병합의 결과로 무가치 복합 명령어(NCI)가 발생하기 때문이다.The policy for selecting the optimal set of compound instruction candidates (CICs) according to their profits at the instruction candidate selection (CIC) stage is to increase the chances of selection of compound instruction candidates that are successfully selected as compound instructions. However, this policy does not guarantee the creation of the final code which always has the minimum cost. This is because a valueless compound instruction (NCI) occurs as a result of register merging.

적절한 복합 명령어 후보(CIC)들이 상이하게 선택될 때마다, 코드 상에서의 명령어의 혼합 또는 순서가 변경되며, 임시 변수의 생존 범위가 변경된다. 이는 복합 명령어 후보 세트(CIC set)가 고정된 후에만, 간섭 그래프 상에서 각 노드의 컬 러가능성(colorability)을 알 수 있다는 것을 의미한다.Each time the appropriate compound instruction candidates (CICs) are selected differently, the mix or order of instructions in the code is changed, and the survival range of the temporary variable is changed. This means that only after the CIC set is fixed, the colorability of each node on the interference graph can be known.

따라서 모든 복합 명령어 후보(CIC) 세트들에 대하여 가능한 레지스터 병합이 모두 우선적으로 테스트되지 않는다면, 후보 세트 선택(CSS) 단계에서는 최종 코드 상에서 어떤 복합 명령어 후보를 선택할 때 무가치 복합 명령어(NCI)가 발생할지를 결정할 수 없다.Thus, if all possible register merges are not prioritized for all compound instruction candidate (CIC) sets, then the candidate set selection (CSS) step determines which compound instruction candidates in the final code will result in a valueless compound instruction (NCI). Can't decide

이상에서 본 발명에 따른 코드 생성 장치의 작용에 대해 차례로 설명하였다. 본 발명에 따른 코드 생성 장치의 작용(기능)은 이하에서 설명할 코드 생성 방법상의 절차와 본질적으로 같은 것이므로, 중복되는 설명은 생략하도록 한다.In the above, the operation of the code generation device according to the present invention has been described in order. Since the operation (function) of the code generating apparatus according to the present invention is essentially the same as the procedure of the code generating method to be described below, redundant description will be omitted.

도 8은 본 발명의 실시예에 따른 코드 생성 방법을 나타낸 흐름도이다.8 is a flowchart illustrating a code generation method according to an embodiment of the present invention.

우선, 명령어 선택부(110)는 후보 간섭 그래프(CIG)인 G에서 복합 명령어 후보(CIC)를 선택한다(S11). First, the command selector 110 selects a compound command candidate CIC from G which is a candidate interference graph CIG (S11).

복합 명령어 후보 선택 단계에서 후보 간섭 그래프 G로부터 계산된 적절한 복합 명령어 후보의 세트들을 Ψ라고 하면, 명령어 선택부(110)는 다음을 만족하는 하나의 복합 명령어 후보(CIC) 세트인 ψ를 선택한다. 여기서 ψ∈Ψ and profit(ψ)≥profit(φ) for every φ∈Ψ.If the sets of appropriate compound instruction candidates calculated from the candidate interference graph G in the compound instruction candidate selection step are Ψ, the instruction selecting unit 110 selects ψ, which is a set of compound instruction candidates (CICs) satisfying the following. Where ψ∈Ψ and profit (ψ) ≥profit (φ) for every φ∈Ψ.

그리고, 명령어 선택부(110)는 ψ에 대한 복잡 규칙(complex rule)에서 분할된 모든 분할 규칙의 비용을 평가한다.In addition, the instruction selector 110 evaluates the cost of all the division rules divided in the complex rule for ψ.

명령어 선택부(110)는 모든 간편 규칙(simple rule)들과 함께 분할 규칙들을 이용하여, 라벨링 단계(S12)와 커버링 단계(S13)를 수행한다.The command selector 110 performs the labeling step S12 and the covering step S13 by using the partitioning rules together with all the simple rules.

커버링 단계가 수행된 후, 레지스터 할당부(120)는 레지스터 할당 및 레지스 터 병합을 수행한 후 코드를 생성하고, 생성된 코드를 무가치 복합 명령어 검출부(130) 및 최종 코드 생성부(140)로 전달한다(S14). After the covering step is performed, the register allocator 120 generates a code after performing register allocation and register merging, and transfers the generated code to the valueless compound instruction detector 130 and the final code generator 140. (S14).

무가치 복합 명령어 검출부(130)는 레지스터 할당 단계에서 생성된 코드가 무가치 복합 명령어를 가지는 지를 검출한다(S15). The valueless compound instruction detection unit 130 detects whether the code generated in the register allocation step has a valueless compound instruction (S15).

만일 무가치 복합 명령어 검출부(130)가 어떠한 무가치 복합 명령어도 검출하지 못한다면, 최종 코드 생성부(14)로 그 사실을 알려주어 최종적인 최종 코드를 배출하도록 한다(S17)If the valueless compound instruction detection unit 130 does not detect any valueless compound instruction, the final code generator 14 notifies the fact so as to discharge the final final code (S17).

한편 무가치 복합 명령어 검출부(130)는 무가치 복합 명령어를 검출하면, 명령어 선택부(110)로 하여금 후보 간섭 그래프(CIG)에서 무가치 복합 명령어를 발생시킨 복합 명령어 후보를 제거하고 새로운 복합 명령어 후보를 선택하게 한다(S16). On the other hand, when the valueless compound instruction detector 130 detects a valueless compound instruction, the command selector 110 removes the compound instruction candidate that generated the valueless compound instruction from the candidate interference graph CIG and selects a new compound instruction candidate. (S16).

이때 명령어 선택부(110)는 ψ에 속하는 X를 무가치 복합 명령어에 대응하는 복합 명령어 후보로 결정한다. 만일 X가 ψ의 유일한 복합 명령어 후보이면, 후보 간섭 그래프 X를 제거한다. 그렇지 않으면, 후보 간섭 그래프 G에 새로운 간섭 엣지인 상호 제외 엣지(X,Y)를 삽입한다(S16). 이때 모든 Y는 ψ에 속한다(every Y∈ψ).In this case, the command selector 110 determines X belonging to ψ as a compound command candidate corresponding to a valueless compound command. If X is the only compound instruction candidate of ψ, then remove the candidate interference graph X. Otherwise, the mutual exclusion edges X and Y, which are new interference edges, are inserted into the candidate interference graph G (S16). In this case, all Y belong to ψ (every Y∈ψ).

S16 단계에서 적어도 하나의 간섭 엣지가 G 노드에 삽입되거나 하나의 복합 명령어 후보가 G 노드로부터 제거되기 때문에, 최악의 경우, 반복 횟수는 O(k2)이 될 수 있다. 여기서, k는 후보 간섭 그래프에서 복합 명령어 후보 노드의 개수이 다. 보통의 경우, 무가치 복합 명령어(NCI)들은 일반적으로 초기 반복 단계에서 사라지므로, 반복 횟수는 O(k)로 감소한다.In the worst case, since the at least one interference edge is inserted into the G node or one compound instruction candidate is removed from the G node in step S16, the number of repetitions may be O (k 2 ). Here, k is the number of composite instruction candidate nodes in the candidate interference graph. Normally, valueless compound instructions (NCIs) generally disappear in the initial iteration phase, so the number of iterations is reduced to O (k).

가장 시간이 많이 소요되는 단계는 S11 단계 및 S15 단계이다. 따라서, k는 n(중간 표현 트리에서 노드의 개수)에 점근 비례하기 때문에 총 명령어 선택 시간은 평균적으로 O(n3)이 될 것이다.The most time consuming steps are step S11 and step S15. Therefore, since k is asymptotically proportional to n (the number of nodes in the intermediate expression tree), the total command selection time will be on average O (n 3 ).

어쨌든, 실험에서 밝혀진 것처럼, 코드 생성을 위해 복합 명령어들을 추가적으로 조작한다 해도, O(n)의 바운더리 안에서 컴파일 시간이 유지될 수 있다.In any case, as the experiments show, even if you manipulate the complex instructions further for code generation, you can maintain compile time within the boundary of O (n).

본 발명의 상기 방법은 또한 컴퓨터로 읽을 수 있는 기록매체에 컴퓨터가 읽을 수 있는 코드로서 구현하는 것이 가능하다. 컴퓨터가 읽을 수 있는 기록매체는 컴퓨터 시스템에 의하여 읽혀질 수 있는 데이터가 저장되는 모든 종류의 기록장치를 포함한다. 컴퓨터가 읽을 수 있는 기록매체의 예로는 ROM, RAM, CD-ROM, 자기 테이프, 플로피 디스크, 광데이터 저장장치 등이 있으며, 또한 캐리어 웨이브(예를 들어 인터넷을 통한 전송)의 형태로 구현되는 것도 포함한다. 또한 컴퓨터가 읽을 수 있는 기록매체는 네트워크로 연결된 컴퓨터 시스템에 분산되어 분산방식으로 컴퓨터가 읽을 수 있는 코드가 저장되고 실행될 수 있다.The method of the present invention can also be embodied as computer readable code on a computer readable recording medium. The computer-readable recording medium includes all kinds of recording devices in which data that can be read by a computer system is stored. Examples of the computer-readable recording medium include a ROM, a RAM, a CD-ROM, a magnetic tape, a floppy disk, an optical data storage device, and the like, and may be implemented in the form of a carrier wave (for example, transmission via the Internet) . The computer readable recording medium can also be distributed over network coupled computer systems so that the computer readable code is stored and executed in a distributed fashion.

이상에서는 도면에 도시된 구체적인 실시예를 참고하여 본 발명을 설명하였으나 이는 예시적인 것에 불과하므로, 본 발명이 속하는 기술 분야에서 통상의 기술을 가진 자라면 이로부터 다양한 수정 및 변형이 가능할 것이다. 따라서, 본 발명의 보호 범위는 후술하는 특허청구범위에 의하여 해석되어야 하고, 그와 동등 및 균등한 범위 내에 있는 모든 기술적 사상은 본 발명의 보호 범위에 포함되는 것으로 해석되어야 할 것이다.While the present invention has been particularly shown and described with reference to exemplary embodiments thereof, it is to be understood that the invention is not limited to the disclosed embodiments, but, on the contrary, is intended to cover various modifications and equivalent arrangements included within the spirit and scope of the invention. Therefore, the protection scope of the present invention should be interpreted by the claims to be described later, and all the technical ideas within the equivalent and equivalent ranges should be construed as being included in the protection scope of the present invention.

도 1은 본 발명의 실시예에 따른 코드 생성 장치를 나타낸 도면.1 is a view showing a code generation device according to an embodiment of the present invention.

도 2는 도 1에서 명령어 선택부를 상세히 나타낸 도면. FIG. 2 is a diagram illustrating the command selection unit in detail in FIG. 1; FIG.

도 3은 본 발명의 다른 실시예에 따른 코드 생성 장치를 나타낸 도면.3 is a view showing a code generation device according to another embodiment of the present invention.

도 4는 중간 표현 트리 및 복합 명령어 후보를 예시한 도면.4 illustrates an intermediate representation tree and a compound instruction candidate.

도 5는 후보 간섭 그래프, 라벨링, 커버링, 커버링 단계의 코드, 및 레지스터 할당 후의 생성 코드를 예시한 도면.5 illustrates candidate interference graphs, labeling, covering, codes of covering steps, and generated codes after register allocation.

도 6은 후보 간섭 그래프, 라벨링, 커버링, 커버링 단계의 코드, 및 레지스터 할당 후의 생성 코드를 예시한 도면.6 illustrates candidate interference graphs, labeling, covering, codes of covering steps, and generation codes after register allocation.

도 7은 후보 간섭 그래프, 라벨링, 커버링, 커버링 단계의 코드, 및 레지스터 할당 후의 생성 코드를 예시한 도면.7 illustrates candidate interference graphs, labeling, covering, codes of covering steps, and generated codes after register allocation.

도 8은 본 발명의 실시예에 따른 코드 생성 방법을 나타낸 흐름도8 is a flowchart illustrating a code generation method according to an embodiment of the present invention.

Claims (5)

중간 표현 트리로부터 추출된 복합 명령어 후보로 이루어진 후보 간섭 그래프에서, 간섭관계가 없으며 병렬 수행될 수 있는 복합 명령어 후보의 세트를 선택하는 명령어 선택부;An instruction selecting unit for selecting a set of composite instruction candidates having no interference relation and which may be performed in parallel, in a candidate interference graph including composite instruction candidates extracted from an intermediate expression tree; 상기 명령어 선택부에 의해 선택된 복합 명령어 후보의 세트에 사용할 레지스터를 할당 및 병합하여 레지스터가 할당된 코드를 생성하는 레지스터 할당부; A register allocator for allocating and merging registers for use in the set of compound instruction candidates selected by the instruction selector to generate a code to which registers are assigned; 상기 레지스터가 할당된 코드 내에 무가치한 이동명령어를 포함하는 무가치 복합 명령어를 검출하는 무가치 복합 명령어 검출부; 및 A valueless compound instruction detector for detecting a valueless compound instruction including a valueless move instruction in a code allocated to the register; And 상기 무가치 복합 명령어가 검출되지 않으면, 상기 레지스터가 할당된 코드를 최종 코드로 배출하는 최종 코드 생성부를 포함하며,If the valueless compound instruction is not detected, the register includes a final code generation unit for discharging the code assigned to the final code, 상기 무가치 복합 명령어 검출부는, 상기 무가치 복합 명령어가 검출되면, 상기 선택된 복합 명령어 후보의 세트를 제거하고 새로운 복합 명령어 후보의 세트를 선택하도록 상기 명령어 선택부로 지시하는 것을 특징으로 하는, 복합 명령어 선택시 무가치 복합 명령어를 제거하여 코드를 최적화하기 위한 코드 생성 장치.The value-free compound instruction detection unit, when the valueless compound instruction is detected, instructs the command selection unit to remove the selected set of compound instruction candidates and select a new set of compound instruction candidates. Code generation device for optimizing code by eliminating compound instructions. 제1항에 있어서, 상기 무가치 복합 명령어 검출부는The method of claim 1, wherein the valueless compound instruction detector 상기 무가치 복합 명령어가 검출되면, 상기 후보 간섭 그래프에 상기 선택된 복합 명령어 후보와 관련된 노드 간에 상호 제외(mutual exclusion edge)를 의미하는 상호 제외 엣지를 추가하여 상기 상호 제외 엣지로 연결된 노드들이 복합 명령어 후보의 세트로서 함께 선택되지 않게 하는 것을 특징으로 하는, 복합 명령어 선택시 무가치 복합 명령어를 제거하여 코드를 최적화하기 위한 코드 생성 장치.When the valueless compound instruction is detected, nodes connected to the mutual exclusion edge are added to the candidate interference graph by adding mutual exclusion edges indicating mutual exclusion edges between nodes associated with the selected compound instruction candidate. And a code generation device for optimizing code by removing valueless compound instructions when selecting the compound instructions. 제1항에 있어서, 상기 명령어 선택부는The method of claim 1, wherein the command selection unit 상기 후보 간섭 그래프에서 최대 가중치 합을 가지도록 복합 명령어 후보의 세트를 선택하는 것을 특징으로 하는, 복합 명령어 선택시 무가치 복합 명령어를 제거하여 코드를 최적화하기 위한 코드 생성 장치.And selecting a set of compound instruction candidates to have a maximum weighted sum in the candidate interference graph. (a) 중간 표현 트리로부터 추출된 복합 명령어 후보로 이루어진 후보 간섭 그래프에서, 간섭관계가 없으며 병렬 수행될 수 있는 복합 명령어 후보의 세트를 선택하는 단계;(a) selecting a set of composite instruction candidates that are non-interfering and can be performed in parallel in a candidate interference graph composed of composite instruction candidates extracted from the intermediate expression tree; (b) 상기 선택된 복합 명령어 후보의 세트에 사용할 레지스터를 할당 및 병합하여 레지스터가 할당된 코드를 생성하는 단계;(b) allocating and merging registers for use in the selected set of composite instruction candidates to generate a register-allocated code; (c) 상기 레지스터가 할당된 코드 내에 무가치한 이동명령어를 포함하는 무가치 복합 명령어를 검출하는 단계; 및(c) detecting a valueless compound instruction comprising a valueless move instruction in a code assigned to the register; And (d) 상기 무가치 복합 명령어가 검출되지 않으면, 상기 레지스터가 할당된 코드를 최종 코드로 배출하는 단계를 포함하되, (d) if the valueless compound instruction is not detected, releasing the register-allocated code to the final code, 상기 무가치 복합 명령어가 검출되면, 상기 후보 간섭 그래프에서 상기 선택된 복합 명령어 후보의 세트를 제거하고 새로운 복합 명령어 후보의 세트를 선택하도록 상기 (a) 단계로 되돌아가는 것을 특징으로 하는, 복합 명령어 선택시 무가치 복합 명령어를 제거하여 코드를 최적화하기 위한 코드 생성 방법.If the valueless compound instruction is detected, returning to step (a) to remove the selected set of compound instruction candidates from the candidate interference graph and select a new set of compound instruction candidates. How to generate code to optimize your code by eliminating compound instructions. 제4항에 있어서, 상기 방법은 상기 (b) 단계 전에The method of claim 4, wherein the method is performed before step (b). (e) 상기 중간 표현 트리에 대하여 라벨링 및 커버링을 수행하는 단계를 더 포함하는 것을 특징으로 하는, 복합 명령어 선택시 무가치 복합 명령어를 제거하여 코드를 최적화하기 위한 코드 생성 방법.(e) labeling and covering the intermediate expression tree, wherein the code generation method for optimizing code by removing a valueless compound instruction when selecting a compound instruction.
KR1020090070997A 2009-07-31 2009-07-31 Apparatus and method of generating code optimized with compound instruction by eliminating nullified compound instruction Expired - Fee Related KR100970758B1 (en)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020090070997A KR100970758B1 (en) 2009-07-31 2009-07-31 Apparatus and method of generating code optimized with compound instruction by eliminating nullified compound instruction
SG201000950-4A SG168457A1 (en) 2009-07-31 2010-02-11 Method and apparatus for generating optimized code with compound instruction by eliminating nullified compound instruction

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020090070997A KR100970758B1 (en) 2009-07-31 2009-07-31 Apparatus and method of generating code optimized with compound instruction by eliminating nullified compound instruction

Publications (1)

Publication Number Publication Date
KR100970758B1 true KR100970758B1 (en) 2010-07-16

Family

ID=42645703

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020090070997A Expired - Fee Related KR100970758B1 (en) 2009-07-31 2009-07-31 Apparatus and method of generating code optimized with compound instruction by eliminating nullified compound instruction

Country Status (2)

Country Link
KR (1) KR100970758B1 (en)
SG (1) SG168457A1 (en)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101276308B1 (en) * 2011-02-22 2013-06-18 서울대학교산학협력단 Graph-based code generating apparatus and method supporting multi-output instructions

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5504932A (en) 1990-05-04 1996-04-02 International Business Machines Corporation System for executing scalar instructions in parallel based on control bits appended by compounding decoder
US5721854A (en) 1993-11-02 1998-02-24 International Business Machines Corporation Method and apparatus for dynamic conversion of computer instructions

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5504932A (en) 1990-05-04 1996-04-02 International Business Machines Corporation System for executing scalar instructions in parallel based on control bits appended by compounding decoder
US5721854A (en) 1993-11-02 1998-02-24 International Business Machines Corporation Method and apparatus for dynamic conversion of computer instructions

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101276308B1 (en) * 2011-02-22 2013-06-18 서울대학교산학협력단 Graph-based code generating apparatus and method supporting multi-output instructions

Also Published As

Publication number Publication date
SG168457A1 (en) 2011-02-28

Similar Documents

Publication Publication Date Title
JP3901181B2 (en) Program parallelization apparatus and method, and program
JP3901180B2 (en) Program parallelization apparatus and method, and program
JP3311462B2 (en) Compile processing unit
KR102204282B1 (en) Method of scheduling loops for processor having a plurality of funtional units
EP3066560B1 (en) A data processing apparatus and method for scheduling sets of threads on parallel processing lanes
US8789031B2 (en) Software constructed strands for execution on a multi-core architecture
US10430191B2 (en) Methods and apparatus to compile instructions for a vector of instruction pointers processor architecture to enable speculative execution and avoid data corruption
US10698670B2 (en) Parallel program generating method and parallelization compiling apparatus
US6334137B1 (en) Method and system for controlling parallel execution of jobs
US20120054722A1 (en) Trace generating unit, system, and program of the same
Wang et al. Register renaming and scheduling for dynamic execution of predicated code
JP3901182B2 (en) Program parallelization apparatus and method, and program
KR100970758B1 (en) Apparatus and method of generating code optimized with compound instruction by eliminating nullified compound instruction
Nicolau Loop quantization: A generalized loop unwinding technique
US20020112148A1 (en) System and method for executing predicated code out of order
JP6160232B2 (en) Compilation program and compilation method
JP4293223B2 (en) Program parallelization apparatus and method, and program
US6637026B1 (en) Instruction reducing predicate copy
KR102207775B1 (en) Method for Static Analysis based on Data Dependence on Data Plane Towards Network Switch Parallelization, and Parallelization Apparatus using the same
JP6600888B2 (en) Parallelizing compiler, parallelizing compiling device, and parallel program generation method
CN119088664A (en) Compilation optimization option grouping method, computer device and storage medium
JPH04252335A (en) Microcode configuration method
JPS58151653A (en) Processing system of sequential instruction group
JPH02132525A (en) How to compile
JP2005267024A (en) Parallel processor, parallel processing method, and program

Legal Events

Date Code Title Description
A201 Request for examination
PA0109 Patent application

St.27 status event code: A-0-1-A10-A12-nap-PA0109

PA0201 Request for examination

St.27 status event code: A-1-2-D10-D11-exm-PA0201

P11-X000 Amendment of application requested

St.27 status event code: A-2-2-P10-P11-nap-X000

P13-X000 Application amended

St.27 status event code: A-2-2-P10-P13-nap-X000

P11-X000 Amendment of application requested

St.27 status event code: A-2-2-P10-P11-nap-X000

P13-X000 Application amended

St.27 status event code: A-2-2-P10-P13-nap-X000

A302 Request for accelerated examination
PA0302 Request for accelerated examination

St.27 status event code: A-1-2-D10-D16-exm-PA0302

St.27 status event code: A-1-2-D10-D17-exm-PA0302

D13-X000 Search requested

St.27 status event code: A-1-2-D10-D13-srh-X000

D14-X000 Search report completed

St.27 status event code: A-1-2-D10-D14-srh-X000

E902 Notification of reason for refusal
PE0902 Notice of grounds for rejection

St.27 status event code: A-1-2-D10-D21-exm-PE0902

P11-X000 Amendment of application requested

St.27 status event code: A-2-2-P10-P11-nap-X000

P13-X000 Application amended

St.27 status event code: A-2-2-P10-P13-nap-X000

E701 Decision to grant or registration of patent right
PE0701 Decision of registration

St.27 status event code: A-1-2-D10-D22-exm-PE0701

P11-X000 Amendment of application requested

St.27 status event code: A-2-2-P10-P11-nap-X000

P13-X000 Application amended

St.27 status event code: A-2-2-P10-P13-nap-X000

R15-X000 Change to inventor requested

St.27 status event code: A-3-3-R10-R15-oth-X000

R16-X000 Change to inventor recorded

St.27 status event code: A-3-3-R10-R16-oth-X000

GRNT Written decision to grant
PR0701 Registration of establishment

St.27 status event code: A-2-4-F10-F11-exm-PR0701

PR1002 Payment of registration fee

Fee payment year number: 1

St.27 status event code: A-2-2-U10-U11-oth-PR1002

PG1601 Publication of registration

St.27 status event code: A-4-4-Q10-Q13-nap-PG1601

P14-X000 Amendment of ip right document requested

St.27 status event code: A-5-5-P10-P14-nap-X000

P16-X000 Ip right document amended

St.27 status event code: A-5-5-P10-P16-nap-X000

Q16-X000 A copy of ip right certificate issued

St.27 status event code: A-4-4-Q10-Q16-nap-X000

PN2301 Change of applicant

St.27 status event code: A-5-5-R10-R11-asn-PN2301

St.27 status event code: A-5-5-R10-R13-asn-PN2301

R18-X000 Changes to party contact information recorded

St.27 status event code: A-5-5-R10-R18-oth-X000

FPAY Annual fee payment

Payment date: 20130705

Year of fee payment: 4

PR1001 Payment of annual fee

Fee payment year number: 4

St.27 status event code: A-4-4-U10-U11-oth-PR1001

FPAY Annual fee payment

Payment date: 20140702

Year of fee payment: 5

PR1001 Payment of annual fee

Fee payment year number: 5

St.27 status event code: A-4-4-U10-U11-oth-PR1001

PN2301 Change of applicant

St.27 status event code: A-5-5-R10-R11-asn-PN2301

St.27 status event code: A-5-5-R10-R13-asn-PN2301

PN2301 Change of applicant

St.27 status event code: A-5-5-R10-R11-asn-PN2301

St.27 status event code: A-5-5-R10-R13-asn-PN2301

LAPS Lapse due to unpaid annual fee
PC1903 Unpaid annual fee

Not in force date: 20150710

Payment event data comment text: Termination Category : DEFAULT_OF_REGISTRATION_FEE

St.27 status event code: A-4-4-U10-U13-oth-PC1903

PC1903 Unpaid annual fee

Ip right cessation event data comment text: Termination Category : DEFAULT_OF_REGISTRATION_FEE

Not in force date: 20150710

St.27 status event code: N-4-6-H10-H13-oth-PC1903

P22-X000 Classification modified

St.27 status event code: A-4-4-P10-P22-nap-X000

R18-X000 Changes to party contact information recorded

St.27 status event code: A-5-5-R10-R18-oth-X000

R18-X000 Changes to party contact information recorded

St.27 status event code: A-5-5-R10-R18-oth-X000

PN2301 Change of applicant

St.27 status event code: A-5-5-R10-R11-asn-PN2301

St.27 status event code: A-5-5-R10-R13-asn-PN2301

PN2301 Change of applicant

St.27 status event code: A-5-5-R10-R11-asn-PN2301

St.27 status event code: A-5-5-R10-R13-asn-PN2301

R18-X000 Changes to party contact information recorded

St.27 status event code: A-5-5-R10-R18-oth-X000

R18-X000 Changes to party contact information recorded

St.27 status event code: A-5-5-R10-R18-oth-X000

R18-X000 Changes to party contact information recorded

St.27 status event code: A-5-5-R10-R18-oth-X000

R18-X000 Changes to party contact information recorded

St.27 status event code: A-5-5-R10-R18-oth-X000

R18-X000 Changes to party contact information recorded

St.27 status event code: A-5-5-R10-R18-oth-X000

R18-X000 Changes to party contact information recorded

St.27 status event code: A-5-5-R10-R18-oth-X000