KR101276308B1 - 다중 출력 명령어를 지원하는 그래프 기반의 코드 생성 장치 및 그 코드 생성 방법 - Google Patents

다중 출력 명령어를 지원하는 그래프 기반의 코드 생성 장치 및 그 코드 생성 방법 Download PDF

Info

Publication number
KR101276308B1
KR101276308B1 KR1020110015337A KR20110015337A KR101276308B1 KR 101276308 B1 KR101276308 B1 KR 101276308B1 KR 1020110015337 A KR1020110015337 A KR 1020110015337A KR 20110015337 A KR20110015337 A KR 20110015337A KR 101276308 B1 KR101276308 B1 KR 101276308B1
Authority
KR
South Korea
Prior art keywords
moi
candidate
rule
tree
rules
Prior art date
Application number
KR1020110015337A
Other languages
English (en)
Other versions
KR20120096131A (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 KR1020110015337A priority Critical patent/KR101276308B1/ko
Publication of KR20120096131A publication Critical patent/KR20120096131A/ko
Application granted granted Critical
Publication of KR101276308B1 publication Critical patent/KR101276308B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution

Abstract

본 발명은 본 발명은 그래프 기반의 코드 생성 장치 및 그 코드 생성 방법에 관한 것으로서, 더욱 상세하게는, 트리 기반이 아닌 그래프 기반으로 애플리케이션 레벨에서 다중 출력 명령어를 포함한 모든 명령어를 효과적으로 활용하여 소스 코드로부터 타겟 코드를 생성하는, 다중 출력 명령어를 지원하는 그래프 기반의 코드 생성 장치코드 생성 장치 및 코드 생성 방법에 관한 것이다.
본 발명에 의하면, 그래프 기반으로 명령어 집합의 설명 문법을 확장시킴으로써 수작업으로 코드를 변경하지 않은 채로 다중 출력 명령어를 모델링할 수 있으며, 수월하게 기존의 컴파일러와 통합하여 신속하고 효과적으로 애플리케이션 레벨에서 다양한 다중 출력 명령어를 활용할 수 있다.

Description

다중 출력 명령어를 지원하는 그래프 기반의 코드 생성 장치 및 그 코드 생성 방법{Graph-based code generating apparatus and method supporting multi-output instructions}
본 발명은 그래프 기반의 코드 생성 장치 및 그 코드 생성 방법에 관한 것으로서, 더욱 상세하게는, 트리 기반이 아닌 그래프 기반으로 애플리케이션 레벨에서 다중 출력 명령어를 포함한 모든 명령어를 효과적으로 활용하여 소스 코드로부터 타겟 코드를 생성하는, 다중 출력 명령어를 지원하는 그래프 기반의 코드 생성 장치코드 생성 장치 및 코드 생성 방법에 관한 것이다.
본 발명은 교육과학기술부 및 정보기술사업단의 BK21 사업의 일환으로 수행한 연구로부터 도출된 것이다. [과제고유번호: 0567-20100001]
지난 수십 년간 애플리케이션에 특화된 명령어 세트 프로세서(Application-Specific Instruction-set Processor:ASIP)는 멀티미디어, 신호 처리, 네트워크, 및 암호화 등의 다양한 애플리케이션을 위해 SOC(System on chip) 분야에서 프로그래머블 가속기(programmable accelerator)로서 널리 이용되고 있다.
이러한 애플리케이션의 엄격한 요구 사항을 충족하기 위해, ASIP은 종종 그들의 애플리케이션의 요구에 맞춘 새로운 명령어 집합(사용자 주문 명령어 집합)을 제공한다. 이러한 사용자 주문 명령어 집합의 주된 기능은 병렬성(parallelism)이다.
사용자 주문 명령어 집합은 병렬로 실행되는 복수의 연산(operation)을 포함하며, 동시에 복수의 출력 결과를 제공할 수 있는데 이들을 이하에서 다중 출력 명령어(multi-output instruction:MOI)라고 지칭하기로 한다. 한편 출력이 하나인 명령어들을 단일 출력 명령어(single output instruction:SOI)라고 한다.
단일 출력 명령어는 명령어를 구성하는 연산 개수 및 의존도에 따라 2가지 타입으로 나뉜다. 하나는 간단한 단일 출력 명령어이고, 다른 하나는 사슬형(chained) 단일 출력 명령어이다.
도 1은 단일 출력 명령어와 다중 출력 명령어를 예시한 도면이다.
도 1(a)는 간단한 단일 출력 명령어(single output instruction:SOI)를 예시하고, 도 1(b)는 사슬형 단일 출력 명령어를 예시하며, 도 1(c)는 다중 출력 명령어를 예시한다.
단일 출력 명령어는 중간 표현(IR, Intermediate representation)에서 트리 패턴으로 표현될 수 있지만, 다중 출력 명령어는 중간 표현에서 트리 패턴으로 표현될 수 없으며 단지 DAG(directed Acyclic Graph)로만 표현될 수 있다.
디지털 신호 처리 분야에서 다중 출력 명령어(MOI)는 이미 성능을 향상시킬 수 있는 자연스러운 방법이다. 두드러진 사례는 다른 메모리 뱅크의 동시 액세스를 지원하기 위한 명령어이다.
한편, 임베디드 애플리케이션의 복잡성 증가는 임베디드 애플리케이션을 어셈블리 언어로 구현하는 것을 힘들게 한다. 따라서 신속하게 애플리케이션을 개발하고 고객의 요구에 부응하기 위해, 프로세서를 위한 정교한 컴파일러를 지원하는 것이 필요하다. 이때 병렬 명령어를 지원하기 위해 컴파일러의 주요 문제는 어떻게 코드를 선택해야 하는가이다.
본 발명이 해결하고자 하는 과제는, 수작업으로 코드를 변경하지 않고도 다중 출력 명령어를 모델링할 수 있으며, 수월하게 기존의 컴파일러와 통합하여 신속하고 효과적으로 애플리케이션 레벨에서 다양한 다중 출력 명령어를 활용할 수 있는, 다중 출력 명령어를 지원하는 그래프 기반의 코드 생성 장치 및 그 코드 생성 방법을 제공하는 데 있다.
상기한 과제를 해결하기 위해 본 발명에 따른 다중 출력 명령어를 지원하는 그래프 기반의 코드 생성 장치는, 타겟 프로세서의 구조에 대한 규칙 설명으로부터 다중 출력 명령어(multiple output instruction, MOI) 규칙을 구성하는 복수의 분할 규칙을 추출하고, 추출된 분할 규칙과 단일 출력 명령어(single output instruction, SOI) 규칙을 포함하는 명령어 규칙을 제공하는 규칙 제공부; 및 중간 표현(intermediate representation, IR) 트리를 입력받고, 명령어 규칙을 기초로 IR 트리로부터 분할 규칙이 결합된 MOI 후보를 생성하고, 간섭 관계와 이익 정도에 따라 생성된 모든 MOI 후보 중에서 최적의 MOI 후보 세트를 선택하고, 선택된 MOI 후보 세트의 모든 분할 규칙에 대한 비용을 계산한 후 각각의 IR 트리의 노드에 대하여 분할 규칙과 SOI 규칙 중에서 더 낮은 비용을 가지는 규칙을 선택하여 IR 트리에 대한 타겟 코드를 생성하는 명령어 선택기를 포함하는 것을 특징으로 한다.
한편, 상기한 과제를 해결하기 위해 본 발명에 따른 다중 출력 명령어를 지원하는 그래프 기반의 코드 생성 방법은, (a) 타겟 프로세서의 구조에 대한 규칙 설명으로부터 다중 출력 명령어(multiple output instruction, MOI) 규칙을 구성하는 복수의 분할 규칙을 추출하고, 추출된 분할 규칙과 단일 출력 명령어(single output instruction, SOI) 규칙을 포함하는 명령어 규칙을 제공하는 단계; (b) 중간 표현(intermediate representation, IR) 트리를 입력받고, 명령어 규칙을 기초로 IR 트리의 노드를 그와 대응되는 분할 규칙과 SOI 규칙으로 주석하고, 분할 규칙이 결합된 MOI 후보를 생성하는 단계; (c) 간섭 관계와 이익 정도에 따라 생성된 모든 MOI 후보를 평가하고, 생성된 모든 MOI 후보 중에서 최적의 MOI 후보 세트를 선택하는 단계; (d) 선택된 MOI 후보 세트의 모든 분할 규칙에 대한 비용을 계산한 후, 각각의 IR 트리의 노드에 대하여 분할 규칙과 SOI 규칙 중에서 더 낮은 비용을 가지는 규칙을 선택하여 라벨링하는 단계; (e) 선택된 MOI 후보 중에서 최종 MOI 후보로서 라벨되지 못한 IR 트리의 노드를 등가의 SOI 규칙으로 재라벨하는 단계; 및 (f) 프리-커버링된 코드를 커버링하여 IR 트리에 대한 타겟 코드를 생성하는 단계를 포함하는 것을 특징으로 한다.
바람직하게는, 상기 코드 생성 방법은, (b) 단계 후에, 명령어 선택기를 자동으로 생성하는 단계를 더 포함할 수 있다.
바람직하게는, 상기 (c)단계는, MOI 후보 간에 대한 커버링 간섭 관계와 스케쥴링 간섭 관계를 포함하는 간섭 그래프를 생성하는 단계; 각각의 MOI 후보에 대하여 선택되는 경우의 이익을 계산하는 단계; 및 간섭 그래프에 따른 간섭 관계가 없으며 계산한 이익이 최대인 MOI 후보를 최적의 MOI 후보 세트로 선택하는 단계를 더 포함할 수 있다.
바람직하게는, 상기 코드 생성 방법은, IR 트리의 멤버 노드가 커버되지 못한다는 이유로 선택이 제외된 MOI 후보가 하나 이상 있는 경우, 선택이 제외된 MOI 후보를 제외시키는 단계; 및 선택이 제외된 MOI 후보가 없어질 때까지, (c) 내지 (e) 단계를 반복하는 단계를 더 포함할 수 있다.
한편, 상기한 목적을 달성하기 위해서 본 발명은 상기 방법을 실현하기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체를 제공한다.
본 발명에 의하면, 그래프 기반으로 명령어 집합의 설명 문법을 확장시킴으로써 수작업으로 코드를 변경하지 않은 채로 다중 출력 명령어를 모델링할 수 있으며, 수월하게 기존의 컴파일러와 통합하여 신속하고 효과적으로 애플리케이션 레벨에서 다양한 다중 출력 명령어를 활용할 수 있다.
도 1은 단일 출력 명령어와 다중 출력 명령어를 예시한 도면이다.
도 2는 본 발명에 따른 코드 생성 장치를 설명한 블록도이다.
도 3은 공유 오퍼랜드를 가지는 다중 출력 명령어를 예시한 도면이다.
도 4는 명령어 선택기를 상세히 설명한 블록도이다.
도 5는 MOI 후보를 확인하는 과정을 예시한 도면이다.
도 6은 스케쥴링 간섭 검출을 예시한 도면이다.
도 7은 스케쥴링 간섭을 검출하기 위한 검출 알고리즘을 예시한 도면이다.
도 8은 도 5에서의 MOI 후보에 대해 검출된 간섭 그래프를 예시한 도면이다.
도 9는 MOI 후보 중에서 최대 이익을 가지는 세트로 {MC1, MC6, MC8}을 선택한 MOI 후보 선택 과정을 예시한 도면이다.
도 10은 라벨링 과정을 예시하는 도면이다.
도 11은 프리-커버링 과정을 예시한 도면이다.
도 12(a)는 프리-커버링 과정의 결과를 예시한 도면이고, 도 12(b)는 도 10의 예시도와 관련하여 선택이 제외된 MOI 후보를 예시한 도면이다.
도 13은 반복적 재선택 방식에 따른 MOI 후보 재선택 과정을 예시한 도면이다.
도 14는 본 발명에 따른 코드 생성 방법을 설명한 흐름도이다.
도 15는 본 발명에 따른 실험 결과를 예시한 그래프이다.
본 발명은 다양한 변경을 가할 수 있고 여러 가지 형태를 가질 수 있는바, 특정 실시예들을 도면에 예시하고 본문에 상세하게 설명하고자 한다. 그러나, 이는 본 발명을 특정한 개시 형태에 대해 한정하려는 것이 아니며, 본 발명의 사상 및 기술 범위에 포함되는 모든 변경, 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다.
제1, 제2 등의 용어는 다양한 구성 요소들을 설명하는데 사용될 수 있지만, 상기 구성 요소들은 상기 용어들에 의해 한정되어서는 안 된다. 상기 용어들은 하나의 구성 요소를 다른 구성 요소로부터 구별하는 목적으로만 사용된다. 예를 들어, 본 발명의 권리 범위를 벗어나지 않으면서 제1 구성 요소는 제2 구성 요소로 명명될 수 있고, 유사하게 제2 구성 요소도 제1 구성 요소로 명명될 수 있다.
본 출원에서 사용한 용어는 단지 특정한 실시예들을 설명하기 위해 사용된 것으로, 본 발명을 한정하려는 의도가 아니다. 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 출원에서, "포함하다" 또는 "가지다" 등의 용어는 명세서에 기재된 특징, 숫자, 단계, 동작, 구성 요소, 부분품 또는 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성 요소, 부분품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 가진다.
일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥상 가지는 의미와 일치하는 의미를 갖는 것으로 해석되어야 하며, 본 출원에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.
이하에서 첨부된 도면을 참조하여, 본 발명의 바람직한 실시예를 상세히 설명한다. 각 도면에 제시된 동일한 참조부호는 동일한 부재를 나타낸다.
도 2는 본 발명에 따른 코드 생성 장치를 설명한 블록도이다.
본 발명에 따른 코드 생성 장치는 소스 코드(source code)를 입력으로 받아 기계가 이해할 수 있는 목적 코드(target code)를 최종적으로 생성하는 컴파일러(compiler)의 일종으로서, 애플리케이션 레벨에서 다중 출력 명령어(multiple output instruction, MOI)를 포함한 모든 명령어를 효과적으로 활용한다.
도 2를 참조하면, 본 발명에 따른 코드 생성 장치는 규칙 제공부(100)와 명령어 선택기(instruction selector, 200)를 포함한다.
규칙 제공부(100)는 타겟 프로세서 구조(target processor architecture)의 명령어 세트(instruction set)의 모델링 문법에 대한 규칙 설명(rule description)을 기초로 명령어 규칙을 추출하여 명령어 선택기(200)로 제공한다.
규칙 설명(rule description)은 타겟 프로세서에서 이용되는 단일 출력 명령어(single output instruction:SOI) 및 다중 출력 명령어(multiple output instruction, MOI)을 포함한 모든 명령어에 대한 규칙을 포함하고 있다.
단일 출력 명령어는 중간 표현(IR, Intermediate representation) 트리에서 트리 패턴으로 표현될 수 있으므로, 단일 출력 명령어(single output instruction:SOI)에 대한 규칙인 단일출력 명령어 규칙(SOI rule, 이하 'SOI' 규칙)은 명령어 선택기(200)에 의해 아무 문제 없이 활용될 수 있다. 그러나, 다중 출력 명령어는 중간 표현 트리에서 트리 패턴으로 표현될 수 없으며 단지 DAG(directed Acyclic Graph)로만 표현될 수 있다. 이러한 다중 출력 명령어에 대한 트리 표현(tree representation)의 근본적인 한계로 인해 명령어 선택기(200)가 다중 출력 명령어(MOI)를 활용하는 것이 절대 쉽지 않다.
명령어 선택기(200)가 다중 출력 명령어를 지원할 수 있도록 하기 위해, 다중 출력 명령어(MOI)에 대한 규칙인 다중 출력 명령어 규칙(MOI rule, 이하 'MOI 규칙')은 규칙 제공부(100)에 의해 SOI 규칙과 동일한 형식으로 표현되는 분할 규칙들로 구성된다. 즉, MOI 규칙은 다중 출력 명령어를 지원하기 위하여 복수의 분할 규칙으로 구성되는데, 분할 규칙은 SOI 규칙과 동일한 형식으로 표현된다.
규칙 제공부(100)는 규칙 추출부(110)를 포함하며, 추가로 명령어 선택기 생성부(120)를 더 포함할 수 있다.
규칙 추출부(110)는 외부로부터 타겟 프로세서 구조에 대한 규칙 설명을 입력받고, 그 규칙 설명을 기초로 타겟 프로세서 구조에 맞는 명령어 규칙을 생성하여 명령어 선택기(200)로 제공하는 역할을 수행한다. 여기서, 명령어 규칙은 SOI 규칙과 MOI 규칙을 구성하는 분할 규칙을 포함한다.
임베디드 애플리케이션의 복잡성 증가는 임베디드 애플리케이션을 어셈블리 언어로 구현하는 것을 힘들게 한다. 따라서 신속하게 애플리케이션을 개발하고 고객의 요구에 부응하기 위해, 프로세서를 위한 정교한 컴파일러를 지원하는 것이 필요한데, 병렬 명령어를 지원하는 컴파일러의 주요 문제는 어떻게 명령어 선택을 해야 하는 가이다.
명령어 선택은, 일반적으로 모든 명령어가 트리 패턴을 가진다는 가정하에 애플리케이션의 데이터 플로우 트리(Data-flow Tree : DFT)에 대해 트리 파싱(tree parsing)을 적용하는 것에서 출발한다. 그러나 MOI는 트리 패턴으로 모델링될 수 없기 때문에, 트리 파싱은 MOI를 지원하거나 최적의 MOI를 선택할 수 없다. 또한, 트리 파싱의 범위(scope)는 하나의 DFT로 제한된다.
따라서 하나의 DFT의 범위(scope)를 초과하는 기능성을 가진 명령어들은 트리 파싱에 의해 분석될 수 없다. 이러한 한계를 극복하기 위해 DFT의 범위(scope)는 적어도 데이터 플로우 그래프(Data-flow Graph : DFG)로 불리는 기본 블록(basic block)으로 확장되어야 한다.
이하에서 SOI 규칙과 MOI 규칙에 대해서 좀 더 상세히 설명하도록 한다.
SOI 규칙은 단일 출력 명령어(SOI)를 지원하기 위한 규칙으로서, 다음처럼 트리 문법으로 기술된다.
Figure 112011012523537-pat00001
[수학식 1]에서, 오피코드(opcode)는 중간 표현(inetrmediate representation, IR) 트리에서 노드 이름으로서 이용되는 규칙의 연산자(operator : mult, add 등)를 의미하며, 동시에 {op1, ..., opn}은 그 규칙의 피연산자(오퍼랜드, operand)를 표현한다.
추가로, SOI 규칙은 비용(cost)과 액션(action) 부분을 포함한다.
비용 부분(cost section)은 규칙을 적용하는데 소모된 비용을 평가한 표시를 포함하고, 액션 부분은 어셈블리나 하부 IR 코드로 보낼 C 코드 조각을 포함한다.
한편 SOI 규칙은 다중 출력 명령어(MOI)를 표현할 수 없으므로, MOI 규칙은 다음처럼 SOI 규칙이 확장되어 단절된 병렬적 SOI들로 구성되도록 표현된다.
Figure 112011012523537-pat00002
[수학식 2]에서, MOI 규칙은 [수학식 1]에서 표현된 복수의 SOI 규칙을 포함한다. 물론 [수학식 2]에서 도시되지는 않았지만, MOI 규칙은 비용 부분과 액션 부분도 포함한다. MOI 규칙에 포함되는 각각의 SOI 규칙을 분할 규칙(split rule)이라고 한다.
MOI 규칙 방식에 의해, 비직교성 ISA(Instruction Set Architecture)가 쉽게 획득되고 자연스럽게 지원될 수 있다. 또한 MOI 규칙은 레지스터 서브클래스를 오퍼랜드로서 가지는 MOI를 지원하고, 인코딩 공간을 절약한다.
한편, [수학식 2]에서의 MOI 규칙은 서로 연결된 복수의 SOI로 구성된 MOI를 표현할 수 없다. 서로 연결된 복수의 SOI를 표현하는 방식은 의존성(dependency)을 이용하는 방식과 공유 오퍼랜드를 이용하는 방식이 있다.
의존성은 트리 문법에 의해 자연스럽게 획득될 수 있는 반면에, 공유 오퍼랜드는 트리 문법에 의해 획득되기 힘들다. 또한, 후증가 명령어(post-increment instruction)와 같은 중요 MOI들은 공유 오퍼랜드를 가진다.
도 3은 공유 오퍼랜드를 가지는 다중 출력 명령어를 예시한 도면이다.
예를 들어 도 3에서, R4는 오퍼랜드인 load의 기본 주소 레지스터(base address register)인 동시에 증가를 위한 오퍼랜드인 add에 의해 이용되기 때문에, R4는 공유 오퍼랜드이다.
이런 종류의 MOI들을 표현하기 위해, 다음에서처럼 오퍼랜드에 인덱스 기호(index subscription)를 도입한다.
Figure 112011012523537-pat00003
확장된 규칙 설명은 각 오퍼랜드에 공유 오퍼랜드 인덱스(shared operand index)로 불리는 정수(integer)를 배정함으로써 상이한 SOI 규칙 간에 서로 공유된 오퍼랜드 집합을 표현할 수 있다. 만일 opcode1 내의 오퍼랜드 opi와 opcode2 내의 오퍼랜드 opj가 공유된다면, 공유된 오퍼랜드는 동일한 공유 오퍼랜드 인덱스가 부여된다.
예를 들어, 도 3(c)에서 load 와 add 오퍼랜드가 모두 1로 동일하게 인덱싱된다. 이러한 방법은 공유된 오퍼랜드는 레지스터 오퍼랜드이므로, 코드가 생성되는 동안 동일한 레지스터가 공유 오퍼랜드에 배정되어야 한다는 것을 의미한다. 이러한 인덱스는 임의적이며, 인덱스 부재는 오퍼랜드가 공유되지 않음을 의미한다.
다시 도 2로 되돌아가 설명하도록 한다.
명령어 선택기 생성부(120)는 명령어 선택기(200)를 자동으로 생성하는 역할을 수행한다.
Burg, Iburg, Olive 같은 코드 생성기-생성기(code-generator generator)가 존재한다. 이러한 코드 생성기-생성기는 타겟 프로세서 아키텍쳐에서의 명령어 집합에 대한 모델링 문법(modeling grammar)을 인지하고 C 언어로 작성된 명령어 선택기 프로그램을 생성한다. Burg, Iburg, Olive와 같은 코드 생성기-생성기는 트리 패턴을 가진 명령어만을 모델링하는 트리 문법만을 수용할 수 있다. Burg, Iburg, Olive 등에 의해 생성된 명령어 선택기는 MOI(다중 출력 명령어)를 활용하지 못하며, MOI를 활용하기 위해 수동으로 코드를 변경해야 하는 문제점이 있다.
본 발명에 의하면, 그래프 기반으로 명령어 집합의 설명 문법을 확장시킴으로써 수작업으로 코드를 변경하지 않은 채로 다중 출력 명령어를 모델링할 수 있으며, 수월하게 기존의 컴파일러와 통합하여 신속하고 효과적으로 애플리케이션 레벨에서 다양한 다중 출력 명령어를 활용할 수 있다.
명령어 선택기(200)는 규칙 제공부(100)로부터 제공받은 명령어 규칙을 기초로 소스 코드와 동일한 의미(semantic)를 가지는 타겟 프로세서의 명령어들을 선택하여 최종적으로 타겟 코드를 생성한다. 명령어 선택기(200)에는 연산 노드(operation node)의 DAG인 IR(중간 표현) 트리 및 명령어 규칙이 입력되고, 최종적으로 커버링이 완료된 타겟 코드가 출력된다.
도 4는 명령어 선택기를 상세히 설명한 블록도이다.
도 4를 참조하면, 명령어 선택기(200)는 다중 출력 명령어 후보(multi-output instruction candidate, 이하 'MOI 후보') 확인부(210), MOI 후보 선택부(220), 라벨링부(230), 프리-커버링부(240), 커버링(250)를 포함하며, 추가로 재선택부(260)를 더 포함할 수 있다.
MOI 후보 확인부(210)는 중간 표현(IR) 트리를 입력받고, 규칙 제공부(100)로부터 제공받은 명령어 규칙을 기초로 중간 표현 트리에서 모든 IR 트리의 노드를 그와 대응되는 분할 규칙과 SOI 규칙으로 주석하고, 분할 규칙이 결합된 MOI 후보를 생성한다. IR 트리의 노드에서 MOI 후보의 리스트 및 각 MOI 후보의 IR 노드 멤버가 쉽게 생성될 수 있다.
MOI 후보 선택부(220)는 간섭 관계와 이익 정도에 따라 모든 MOI 후보를 평가하고 그 중에서 가장 유익한 MOI 후보를 선택한다.
라벨링부(230)는 선택된 MOI 후보를 SOI 대안(alternative)들과 비교한다.
MOI 규칙의 복잡성 때문에, MOI 후보 선택부(220)에 의해 선택된 MOI 후보가 최종적인 MOI 후보로서 라벨되지 못하는 IR 트리 노드가 있을 수 있다.
프리-커버링부(240)는 선택된 MOI 후보 중에서 최종 MOI 후보로서 라벨되지 못한 IR 트리의 노드를 등가의 SOI 규칙으로 재라벨한다. 프리-커버링부(240)는 MOI에 대해 MOI 후보로서 최종적으로 라벨된 노드의 세트를 감소시켜 후속 커버링부(240)의 부담을 경감한다.
커버링부(240)는 중간 표현 트리를 커버링한 코드인 타겟 코드를 생성한다.
이하에서는 상기 명령어 선택기(200)의 각 구성요소를 좀 더 상세히 설명하도록 한다.
도 5는 MOI 후보를 확인하는 과정을 예시한 도면이다.
MOI 후보 확인부(210)는 대응하는 분할 규칙과 SOI 규칙의 리스트를 가지고 IR 트리의 각 노드에 주석을 단다.
도 5(a)는 SOI 규칙과 분할 규칙을 포함하는 명령어 규칙을 예시하고, 도 5(b)는 MOI 후보 확인부(210)가 도 4(a)의 규칙을 참조하여 IR 트리에 주석을 단 것을 예시한다. 도 5(b)에서, 노드 N1은 SOI 규칙인 RA 뿐만 아니라 분할 규칙인 RC로 주석됨을 알 수 있다. 주석된 후, 분할 규칙 맵(split rule map)으로 불리는 도 4(c)의 테이블이 생성된다.
MOI 후보 확인부(210)는, 분할 규칙 맵을 각각의 분할 규칙을 상응하는 IR 노드 인스턴스들의 세트에 대응시킴으로써, 도 5(d)와 같은 MOI 후보를 쉽게 획득할 수 있다. 간단히, 도 5(d)처럼 상응하는 분할 규칙들의 IR 트리 노드들을 서로 결합함으로써, 하나의 MOI 규칙에 속하는 분할 규칙을 결합시키면 된다. IR 트리 노드들의 각 결합이 MOI 후보(MOI candidate)로 정의되고, MOI 후보 내의 IR 트리 노드들은 MOI 후보의 멤버 노드(member node)로 정의된다.
최초에 많은 수의 MOI 후보가 생성되는 동안, 타당성 검사(validity check)를 통과하지 못한 MOI 후보는 제거된다. 타당성 검사는 MOI 후보의 멤버 노드 간에 서로 데이터 의존성(dependency)이 있는지 여부에 따라 결정한다. 그림 5(d)에서, MC2, MC5, MC8은 타당성 검사를 통과하지 못했기 때문에 제거된다.
MOI 후보 확인부(210)에서 MOI 후보가 생성된 후, MOI 후보 선택부(220)에 의해 최적의 MOI 후보가 선택된다. 이때 최적의 MOI 후보 선택을 위해 이익(benefit) 정도와 간섭(interference) 관계라는 2 가지 인자(factor)가 고려된다.
간섭 관계는 복수의 MOI 후보들간에서 고려되어야 하지만, 이익 정도는 각각의 MOI 후보에 대하여 개별적으로 결정되어야 한다. 일단 모든 MOI 후보에 대한 이익과 간섭 관계가 분석되면, MOI 후보들 중에서 가장 유익한 세트를 선택하는 문제는 NP 완전인 최대 가중 독립 세트(Maximum Weighted Independent Set : MWIS) 문제로서 공식화될 수 있다. 따라서 이 문제를 풀기 위해 후술하겠지만 GWMIN2라는 heuristic이 적용된다.
우선 간섭 관계에 대하여 설명하도록 한다.
선택된 MOI 후보가 다른 MOI 후보와 커버링(covering) 단계에서 서로 간섭하지 않도록 하는 효과적인 커버링(covering)을 위해 MOI 후보들은 신중하게 선택되어야 한다.
간섭 관계는 커버링 간섭(covering interference)과 스케쥴링 간섭(scheduling interference)이라는 2가지 타입으로 분류될 수 있다.
간섭 관계는 IG=(V,E)라는 간섭 그래프(interference graph, IG)로 표현될 수 있는데, MOI 후보 선택부(220)는 간섭 관계의 판단을 위해 간섭 그래프를 생성한다. 여기서 V는 모든 MOI 후보의 집합(set)을 의미하고, V에서의 2개의 정점(vertex)인 vi와 vj 간의 비방향성 엣지(undirected edge)인 E는 커버링 또는 스케쥴링 간섭을 의미한다.
만일 2개 또는 그 이상의 MOI 후보가 공통 멤버 노드로서 하나의 IR 트리 노드를 서로 공유한다면, 그 MOI 후보는 동시에 함께 선택되어서는 안 된다. 예를 들어, 도 5에서, MC1과 MC4는 그들의 공통 멤버 노드로서 IR 트리 노드 N3를 가진다. 이런 경우, MC1과 MC4는 동시에 MOI 후보로서 선택될 수 없다. 동시에 MOI 후보로서 선택되면, N3가 2번에 걸쳐 커버링되기 때문이다. 이를 커버링 간섭이라 부른다.
커버링 간섭을 다루는 것은 용이하다. 간섭 그래프(Interference graph: IG)에서 하나 이상의 IR 트리 노드를 공유하는 MOI 후보들의 모든 노드 결합에 대하여 엣지를 추가하는 것이다.
스케쥴 순서 그래프(schedule ordering graph)에 사이클(cycle)이 포함된 경우, 스케쥴링 간섭은 2 이상의 MOI 후보들 간에 존재한다.
스케줄 순서 그래프는 방향성 그래프이다. 스케줄 순서 그래프에서, 노드는 MOI 후보를 표현하고, 엣지는 MOI 후보의 멤버 노드 간의 데이터 의존성으로 인한 스케쥴 선행 제약(schedule precedence constraint)을 표현한다.
도 6은 스케쥴링 간섭 검출을 예시한 도면으로서, 도 6(a)는 IR 트리의, 도 6(b)는 MOI 후보, 도 6(c)는 스케쥴 순서 그래프, 도 6(d)는 간섭 그래프를 각각 예시한다.
예를 들어, 도 6(a)의 IR 트리로부터 도 6(b)에 열거된 3 개의 MOI 후보가 추출된다고 가정하자.
그러면 도 6(c)에서처럼 스케쥴 순서 그래프는 3 개의 MOI 후보에 대한 3 개의 노드와 3 개의 엣지(edge)를 가진다. 엣지 (Nb,Na)는 엣지 (MCz, MCx)의 원인이 되며, 다른 엣지도 동일한 방식으로 설명될 수 있다.
스케쥴 순서 그래프에서 사이클의 존재는 그 사이클 내의 모든 MOI 후보가 선택되면 실행가능한 스케쥴이 없다는 것을 의미한다. 사이클 내에서 적어도 하나의 MOI 후보는 선택이 제거되어야 한다. 이를 스케쥴링 간섭이라고 한다.
스케쥴링 간섭을 다루기 위해, 사이클 내에서 하나의 엣지를 선택하고, 간섭 그래프(interference graph, IG)에 상응하는 엣지를 추가해야 한다. 엣지로 연결된 2 개의 MOI 후보 중에서 적어도 하나의 후보만이 선택되어야 한다. 이러한 과정은 스케쥴 순서 그래프에서 더 이상 사이클이 존재하지 않을 때까지 반복된다.
엣지를 선택하고 사이클에서 엣지를 제거하는 방법은 다음의 [수학식4]에서 정의된 게인 기준(gain metric)에 기반한다.
Figure 112011012523537-pat00004
여기서, B(MCi)는 MCi의 이득이고, NG(MCi)는 현재의 간섭 그래프 IG에서 MCi의 이웃 노드 집합이다.
도 5의 예에서, MC4가 N2 및 N3를 커버하기 위해 선택된다면, 이러한 선택은 새롭게 MC3의 N1과 N6 간에 데이터 의존성을 발생시킨다. 또한 이러한 데이터 의존성은 MC4와 MC3 간에 순환적인 스케쥴 순서(circular schedule ordering)를 발생시킨다. 순환적인 스케쥴 순서는 간섭 그래프에서 MC4와 MC3 간에 스케쥴링 간섭을 추가함으로써 다뤄질 수 있다.
도 7은 스케쥴링 간섭을 검출하기 위한 검출 알고리즘을 예시한 도면이며, 도 8은 도 5에서의 MOI 후보에 대해 검출된 간섭 그래프를 예시한 도면이다.
도 8에서, 각 MOI 후보들 간에 간섭 관계가 도시되어 있는데, 실선으로 연결된 MOI 후보는 서로 커버링 간섭 관계가 있으며, 점선으로 연결된 MOI 후보는 서로 스케쥴링 간섭 관계가 있다는 것을 의미한다.
다음으로 이익에 대하여 설명하도록 한다.
일반적으로 MOI와 등가인 SOI들을 이용하는 것보다 하나의 MOI를 이용하는 것이 더 효율적이다. 그러나 상이한 이익을 가지는 동시에 서로 다르게 커버될 수 있는 복수의 MOI 후보들이 있을 수 있기 때문에, 각각의 MOI 후보가 얼마나 유익할지를 측정하는 것이 중요하다.
각 MOI 후보는 선택되는 경우의 각자 이익으로서 유익성이 측정될 수 있는데, 이때 각자의 이익은 MOI 후보가 선택되는 경우 어느 정도의 게인(gain)을 가지는가에 따라 결정된다.
MOI 후보인 mc의 이익 계산은 절감 비용(Saved Cost)과 중복 비용(Duplication Cost)라는 2 개의 인자로 결정될 수 있다.
우선, MOI 후보(mc)의 절감 비용(Csaved(mc))은 다음처럼 등가인 SOI 규칙의 결합 비용과 MOI 후보(mc)에 대한 비용의 차이이다.
Figure 112011012523537-pat00005
여기서, rmc는 mc에 상응하는 MOI 규칙이고, CMOI(rmc)는 rmc의 비용이다. sri는 mc의 i 번째 멤버에 대한 분할 규칙이고, sri'는 sri와 동일한 명령어 패턴을 표현하는 SOI 규칙으로 정의한다(MOI의 모든 분할 규칙에 대해 대응하는 SOI가 있다고 가정). 2 개의 규칙 sri와 sri'는 서로 등가이다. Ceqv(sri)는 sri의 비용이고,
Figure 112011012523537-pat00006
는 rmc로부터 분할 규칙에 각각 대응하는 모든 SOI 규칙의 총비용으로 정의될 수 있다.
MOI 후보(mc)의 중복 비용(Duplication Cost)인 Cdup(mc)는 공통 서브익스프레션(Common SubExpression, CES)에 의해 유발된다. 공통 서브익스프레션은 MOI 규칙(rmc)의 분할 규칙(sri)에 의해 커버될 수 있는 중간 표현(IR) 트리 내에서 노드 패턴 내부에 위치한다.
sri는 몇몇 작업 노드(operation node)를 구성하는 임의의 트리 패턴에 의해 표현될 수 있다. 각 작업 노드는 근원 노드(root node)인 R(sri) 또는 자손 노드 세트(children node set)인 K(sri)로 분류될 수 있다.
R(sri)는 sri의 결과를 표현한다. K(sri)에 속하는 모든 노드 n은 sri의 패턴 내부에 각각 하나의 자손(successor)을 가진다. 만일 IR 트리 내의 CSE 노드가 sri에 의해 커버되고 K(sri)에 속한다면, 그 결과는 sri의 외부에 존재하는 다른 노드에 유용하지 않다. 왜냐하면 sri는 R(sri)에서 단 하나의 결과만을 생성할 수 있기 때문이다. 따라서 재사용을 허용하기 위해, 노드는 중복되어야 한다.
그에 따라 중복 비용은 다음의 [수학식 6]처럼 중복에 필요한 SOI 명령어의 비용 합계로 정의될 수 있으며, MOI 후보(mc)의 공통 서브익스프레션은 다음의 [수학식 7]처럼 정의될 수 있다.
Figure 112011012523537-pat00007
Figure 112011012523537-pat00008
여기서, CSOI(n)은 다른 노드들에 대해 필요한 결과를 생성하는 등가의 SOI 규칙에 대한 비용을 의미한다.
다음처럼, MOI 후보(mc)의 이익인 B(mc)는 MOI 규칙과 MOI 후보(mc) 내의 멤버 노드에 대한 SOI 규칙 세트에 의해 커버되는 대안 간의 비용 차이로 정의된다.
Figure 112011012523537-pat00009
도 5에서 각 규칙에 대한 비용을 다음처럼 가정하자.
Figure 112011012523537-pat00010
그러면 각 MOI 후보에 대한 이익은 다음처럼 획득된다.
Figure 112011012523537-pat00011
이익(benefit)은, MOI와 기능적으로 동등한 등가의 SOI를 이용하는 대신에, MOI 후보인 mc에 상응하는 하나의 MOI를 생성함으로써 얻어지는 소득(profit)의 총합으로 측정될 수 있다.
MOI 후보 선택부(220)의 주임무는 최대 소득(maximum profit), 즉 최대 합계 이익(maximum benefit sum)을 가지는 적합한 MOI 후보의 집합(set)을 찾는 것이다.
2 개의 MOI 후보는 서로 간섭하지 않는다면 양립 가능하다(compatible).
도 5의 예에서, 6개의 양립 가능한 MOI 후보군이 얻어질 수 있다. {MC1, MC6, MC9}, {MC1, MC9}, {MC3, MC8}, {MC4, MC8}, {MC4, MC9}, 그리고 {MC6, MC7}.
MC1은 그 집합 내의 다른 후보와 간섭하지 않으므로, 단일 MOI 후보를 가지는 집합 {MC1}은 항상 적합함을 알 수 있다. 그러나 {MC1, MC6, MC8} 세트처럼 더 큰 소득을 가지는 수퍼 세트(super set)는 항상 단일 후보 집합을 포함하기 때문에, 그러한 단일 후보 집합은 고려될 필요가 없다.
{MC1, MC6, MC8} 세트가 가장 큰 소득을 가지는데, 그래프 상에서 독립 세트는 서로 연결되지 않은 정점의 모임으로서 MOI 후보 집합의 선택 문제는 MWIS 문제로서 쉽게 모델링될 수 있다.
MWIS 문제는 NP-완전이므로, GWMIN2라고 불리는 휴리스틱을 적용한다. GWMIN2는 최소 디그리 그리디 알고리즘(minimum-degree greedy algorithm) 종류에 속한다.
최소 그리디 알고리즘은 최소 디그리를 가지는 정점(vertex)을 선택하고, 그래프 상에서 정점과 그 이웃을 제거하고, 그래프 내에서 정점이 완전히 없어질 때까지 상기 과정을 반복함으로써 독립 세트(independent set)를 구축하는 알고리즘이다.
GWMIN2는 각 반복 단계에서 다음 [수학식 9]의 gain(v)가 최대가 되도록 정점(vertex)인 v를 선택하고, 결과적인 독립 세트는 아음 [수학식 10]과 같은 가중치를 가진다.
Figure 112011012523537-pat00012
Figure 112011012523537-pat00013
여기서, NG(v)는 G 내의 정점 v에 대한 이웃을 의미하고, NG+(v)는 {v}와 NG(v)의 합집합을 의미한다.
GWMIN2 알고리즘은 정점과 엣지의 개수에 따라 선형적인 시간 복잡도(linear time complexity)를 가진다.
도 9는 MOI 후보 중에서 최대 이익을 가지는 세트로 {MC1, MC6, MC8}을 선택한 MOI 후보 선택 과정을 예시한 도면이다.
다시 도 4로 되돌아가 설명하도록 한다.
MOI 후보 선택부(220)에 의해 최적의 MOI 후보 세트가 선택되면, 라벨링부(230)는 IR 트리 노드를 라벨링한다.
MOI 후보에 속하는 IR 트리 노드는 트리 형상을 가지지 않으므로, MOI 후보에 속하는 IR 트리 노드는 트리 파서(tree parser)에 의해 인식될 수 없다. MOI 후보 또는 MOI 규칙을 파싱하기 위한 유일한 방법은 트리 형상을 가진 분할 규칙을 통해서이다.
분할 규칙은 파서(parser)에 의해 명령어로서 선택되기 위해 각각의 IR 트리 노드에서 다른 SOI 규칙들과 개별적으로 경쟁한다. 게다가 SOI 규칙은 복수의 작업을 포함할 수 있기 때문에, MOI 규칙은 항상 SOI 규칙보다 유익하다고 말할 수 있는 것은 아니다.
MOI 후보의 가장 유익한 세트가 획득된 후, 각각의 선택된 MOI 후보 mc에 대응하는 MOI 규칙 rmc의 모든 분할 규칙 sri에 대해 다음 [수학식 11]처럼 비용을 결정한다.
Figure 112011012523537-pat00014
여기서, Ceqv(sri)는 sri의 등가 SOI 규칙에 대한 비용을 의미하고, n은 rmc의 분할 규칙의 개수를 의미한다.
선택된 MOI 후보 세트의 모든 분할 규칙에 대한 비용을 계산한 후, 라벨링부(230)는 각각의 IR 트리 노드에 대하여 대응하는 SOI 규칙/분할 규칙으로 주석을 단다. IR 트리 노드가 선택된 MOI 후보의 멤버 노드인 경우, 라벨링부(230)는 분할 규칙과 SOI 규칙 중에서 더 낮은 비용을 가지는 규칙을 선택한다.
도 10은 라벨링 과정을 예시하는 도면이다.
도 10의 N2에서, 규칙 RE는 MC2에 포함된 분할 규칙 RC1보다 더 낮은 비용을 가진다. 따라서 N2는 RE로 주석된다.
한편 MOI 규칙의 본질적 복잡성 때문에, MOI 후보를 선택하는 과정에서 선택된 MOI 후보들 중에서 최종적으로 MOI 후보로서 라벨링되지 못하는 IR 트리 노드가 있을 수 있다. 후속의 IR 트리 노드에 대한 상이한 논터미널 필요성 때문에, 비록 생성된 논터미널에 대하여 분할 규칙이 최소 비용을 가질지라도 멤버 노드가 분할 규칙에 의해 커버되지 못할 수 있다.
프리-커버링부(240)는 선택된 MOI 후보들 중에서 최종적으로 MOI 후보로서 라벨링되지 못하는 IR 트리 노드를 등가의 SOI 규칙으로 재라벨링하게 하는 역할도 수행한다.
이를 위해 커버링부(250)는 만일 MOI 후보의 어느 한 멤버 노드가 어떠한 분할 규칙에 의해서도 커버링되지 않으면, 어떠한 분할 규칙에 의해서도 커버링되지않는 MOI 후보의 모든 IR 노드가 등가의 SOI 규칙으로 재라벨되도록 프리-커버링부(240)에 알려준다.
프리-커버링부(240)에 의해 프리-커버링이 완료되면, 라벨링된 IR 트리 노드는 커버링부(250)로 전송되어 커버링된다. 한편 전술한 것처럼, 커버링부(2540)는 MOI 후보의 어느 한 멤버 노드가 어떠한 분할 규칙에 의해서도 커버링되지 않으면, 어떠한 분할 규칙에 의해서도 커버링되지 않는 MOI 후보의 모든 IR 노드가 등가의 SOI 규칙으로 재라벨되도록 시뮬레이트한다.
도 11은 프리-커버링 과정을 예시한 도면으로서, 도 11(a)는 명령어 규칙을 예시하고, 도 11(b)는 라벨링 후의 IR 트리 노드를 예시하고, 도 11(c)는 프리-커버링 과정을 예시하며, 도 11(d)는 SOI 규칙의 리커버링을 예시한다.
라벨링 과정에서, 몇몇 IR 노드는 선택된 MOI 후보를 표시하기 위해 분할 규칙 RX1과 RX2에 의해 마킹된다. 프리-커버링 과정 동안, 도 11(c)처럼 성공 규칙은 분할 규칙 RW에 의해 더 저렴하게 생성되는 논터미널을 소비하기 때문에, RX1은 커버링에 유용하지 않다는 것을 알 수 있다.
RX2는 RX1과 함께 커버링되는데 이용될 수 있으므로, RX1과 RX2는 모두 포기되어야 한다. 따라서 RX1과 Rx2는 모두 선택이 제외되고, 도 11(d)처럼 모든 멤버 노드는 등가의 SOI 규칙으로 재라벨링 된다.
이제 IR 트리는 후속의 커버링부(250)로 보내지고, 커버링된 타겟 코드가 방출될 수 있다.
도 12(a)는 프리-커버링 과정의 결과를 예시한 도면이고, 도 12(b)는 도 10의 예시도와 관련하여 선택이 제외된 MOI 후보를 예시한 도면이다.
N1에서의 RC1이 프리-커버링 과정에서 커버되지 못하므로, MC6은 더 이상 유효하지 않다. 따라서 MC6은 선택이 제외된다. N2에서의 RE도 역시 N4를 커버하기 때문에, N4에서의 RC2도 커버되지 못한다. 결론적으로, MC8도 선택이 제외된다. 마지막으로, 도 12(d)에서처럼 단 하나의 MOI 후보인 MC1만이 커버되어 방출될 것이다.
전술한 것처럼, MC6과 MC8이 선택 제외되었다. 만일 MOI 후보 선택 과정에서 {MC1, MC6, MC8} 대신에 대안적 세트인 {MC1, MC9}가 선택되면 어떻게 될 것인가?
그러나, 대안적 세트는 이익 측정 방식에 따라 원래 선택된 세트보다 덜 유리하기 때문에, 미리 대안적인 선택을 예측할 수 없다. 문제의 원인은 프리-커버링 과정에서 선택 제외된 MOI 후보의 존재 때문이다. 선택이 제외될 MOI 후보를 미리 알 수 없다면, MOI 후보 선택 과정에서 어떤 MOI 후보가 가장 유익한 결과를 가져오는지를 결정할 수 있는 방법은 없다. 따라서 반복적 방식이 비반복적 방식에 비하여 얼마나 더 좋을지 검사할 필요가 있다.
반복적 재선택 방식이란 반복적으로 MOI 후보를 재선택하며 이익도를 체크하는 방식을 의미하며, 재선택부(260)에 의해 수행된다.
만일 프리-커버링 과정에서 IR 트리의 멤버 노드가 커버되지 못한다는 이유로 선택이 제외된 MOI 후보가 하나 이상 있다면, 프리-커버링부(240)는 MOI 후보의 선택 제외 사실을 재선택부(260)로 알려준다.
재선택부(260)는 MOI 후보의 선택 제외 사실을 MOI 후보 선택부(220)로 알려줌으로써 MOI 후보 선택부(220)가 선택 제외된 MOI 후보를 제외하고 다시 신규 MOI 후보를 재선택하도록 제어한다. 프리-커버링 과정에서 선택 제외되는 MOI 후보가 없을 때까지, 재선택부(260)는 MOI 후보에 대한 재선택 과정을 반복한다.
반복적 재선택 방식은 더 나은 효과를 가져 올 수 있다.
도 13은 반복적 재선택 방식에 따른 MOI 후보 재선택 과정을 예시한 도면으로서, 도 13(a)는 가중치에 따른 간섭 그래프를 예시하고, 도 13(b)는 각각의 MOI 후보에 대하여 계산된 비용을 예시하며, 도 13(c)는 최적의 MOI 후보 선택을 예시한 도면이다.
전술한 도 12(b)의 예에서, MC3, MC4, MC7, 및 MC9라는 4 개의 MOI 후보가 있었는데, 이들은 MOI 후보 선택 과정에서 선택되지 않았다.
프리-커버링부(240)가 이런 MOI 후보에게 2 번째 기회를 주었을 때, 도 13(a)에서처럼 이전 반복 과정에서 선택 제외된 MOI 후보가 없는 새로운 간섭 그래프가 MOI 후보 선택부(220)에 의해 획득될 수 있다.
그리고 나서 MOI 후보 선택부(220)는 MOI 후보를 선택하는 알고리즘을 수행하고, 신규 MOI 후보 세트 {MC1, MC9}을 획득한다. 신규 MOI 후보 세트는 도 13(c)에서처럼 어떤 MOI 후보도 이후 과정에서 선택이 제외되지 않음을 알 수 있다.
컴파일 시간은 상기의 반복적 재선택 과정 때문에 더 길어질 수 있다.
가장 최악의 경우, MOI 후보 확인 단계는 O(nm)시간 만큼을 소모한다. 여기서, n은 IR 트리 노드의 개수이고, m은 MOI에서의 분할 규칙의 최대 개수이다.
그리디 휴리스틱(greedy heuristic)은 MWIS 문제를 해결하기 위해 이용되기 때문에, MOI 후보 선택 과정은 선형적인 시간 복잡도를 가진다. 따라서, 종합적인 시간 복잡도는 비반복적인 접근 방식에서의 O(nm) 이다.
반복적 재선택 방식의 경우, 모든 MOI 후보가 각 반복 과정에서 순서대로 선택 제외되는 경우, 반복 횟수가 최악의 경우로 증가할 수 있다. 따라서 최악의 경우 모든 명령어 선택 단계는 O(n2m) 만큼 소모될 수 있다. 하나의 MOI가 2 개 또는 3 개의 분할 규칙으로 구성된다고 가정하면, m은 2 또는 3으로 근사화되어 O(n4) 및 O(n6)의 시간 복잡도가 획득된다.
이하에서는 다중 출력 명령어를 지원하는 그래프 기반의 코드 생성 방법을 설명하도록 한다. 본 발명에 따른 코드 생성 방법은 본 발명에 따른 다중 출력 명령어를 지원하는 그래프 기반의 코드 생성 장치와 본질적으로 동일하므로, 상세한 설명 및 중복되는 설명은 생략하도록 한다.
도 14는 본 발명에 따른 코드 생성 방법을 설명한 흐름도이다.
우선 규칙 제공부(100)는 타겟 프로세서 구조의 명령어 세트의 모델링 문법에 대한 규칙 설명으로부터 명령어 규칙을 추출하고, 이를 명령어 선택기(200)로 제공한다(S10). 명령어 규칙은 MOI 규칙을 구성하는 복수의 분할 규칙과 SOI 규칙을 포함한다. 분할 규칙은 SOI 규칙과 동일한 형식으로 표현된다.
한편 규칙 제공부(100)는 DAG 패턴을 포함하도록 그래프 기반으로 명령어 집합의 설명 문법을 확장시켜 MOI를 모델링하는 명령어 선택기(200)를 생성할 수도 있다(S20).
MOI 후보 확인부(210)는 중간 표현(IR) 트리를 입력받고, 규칙 제공부(100)로부터 제공받은 명령어 규칙을 기초로 중간 표현 트리에서 모든 IR 트리의 노드를 그와 대응되는 분할 규칙과 SOI 규칙으로 주석하고, 분할 규칙이 결합된 MOI 후보를 생성한다(S30).
MOI 후보 선택부(220)는 생성된 모든 MOI 후보를 평가하고 그 중에서 최적의 MOI 후보 세트를 선택한다(S40). 최적의 MOI 후보 세트는 서로 간섭하지 않으면서, 최대 합계 이익(maximum benefit sum)을 가지는 MOI 후보의 세트를 의미한다.
그리고 나서 라벨링부(230)는 선택된 최적의 MOI 후보를 기초로 IR 트리 노드를 라벨링한다(S50). 라벨링부(230)는 선택된 MOI 후보 세트의 모든 분할 규칙에 대한 비용을 계산한 후, 각각의 IR 트리 노드에 대하여 대응하는 SOI 규칙/분할 규칙으로 주석을 단다. IR 트리 노드가 선택된 MOI 후보의 멤버 노드인 경우, 라벨링부(230)는 분할 규칙과 SOI 규칙 중에서 더 낮은 비용을 가지는 규칙을 선택한다.
한편 MOI 규칙의 본질적 복잡성 때문에, MOI 후보를 선택하는 과정에서 선택된 MOI 후보들 중에서 최종적으로 MOI 후보로서 라벨링되지 못하는 IR 트리 노드가 있을 수 있다. 프리-커버링부(240)는 선택된 MOI 후보들 중에서 최종적으로 MOI 후보로서 라벨링되지 못하는 IR 트리 노드를 등가의 SOI 규칙으로 재라벨링하는 역할을 수행한다(S60).
프리-커버링부(240)에 의해 프리-커버링이 완료되면, 라벨링된 IR 트리 노드는 커버링부(250)로 전송되어 커버링된다(S80). 커버링부(250)는 커버링된 타겟 코드를 방출한다.
한편 S80 단계 전에 재선택부(260)에 의한 MOI 후보 재선택 단계(S40), 라벨링 단계(S50), 및 프리-커버링 단계(S60)이 반복 수행되도록 제어될 수 있다.
반복적 재선택 방식이란 반복적으로 MOI 후보를 재선택하며 이익도를 체크하는 방식을 의미하며, 재선택부(260)에 의해 수행된다.
만일 프리-커버링 과정에서 IR 트리의 멤버 노드가 커버되지 못한다는 이유로 선택이 제외된 MOI 후보가 하나 이상 있다면(S70), 프리-커버링부(240)는 MOI 후보의 선택 제외 사실을 재선택부(260)로 알려주고, 재선택부(260)는 MOI 후보의 선택 제외 사실을 MOI 후보 선택부(220)에 일려줌으로써 S40 단계~S60 단계가 반복 수행되도록 제어한다.
도 15는 본 발명에 따른 실험 결과를 예시한 그래프이다.
도 15는 반복적 재선택 방식을 사용한 경우와 미사용한 경우에 대한 동적 명령어 카운트와 명령어의 개수에 대한 벤치마크 결과를 예시하고 있다. 도 15에서 각각의 그래프는 SOI만을 이용한 경우의 벤치마크에 대해 노멀라이즈된 것으로서, 약 20% 이상의 성능 향상이 있음을 알 수 있다.
본 발명의 상기 방법은 또한 컴퓨터로 읽을 수 있는 기록매체에 컴퓨터가 읽을 수 있는 코드로서 구현하는 것이 가능하다. 컴퓨터가 읽을 수 있는 기록매체는 컴퓨터 시스템에 의하여 읽혀질 수 있는 데이터가 저장되는 모든 종류의 기록장치를 포함한다. 컴퓨터가 읽을 수 있는 기록매체의 예로는 ROM, RAM, CD-ROM, 자기 테이프, 플로피 디스크, 광데이터 저장장치 등이 있으며, 또한 캐리어 웨이브(예를 들어 인터넷을 통한 전송)의 형태로 구현되는 것도 포함한다. 또한 컴퓨터가 읽을 수 있는 기록매체는 네트워크로 연결된 컴퓨터 시스템에 분산되어 분산방식으로 컴퓨터가 읽을 수 있는 코드가 저장되고 실행될 수 있다.
이상에서는 도면에 도시된 구체적인 실시예를 참고하여 본 발명을 설명하였으나 이는 예시적인 것에 불과하므로, 본 발명이 속하는 기술 분야에서 통상의 기술을 가진 자라면 이로부터 다양한 수정 및 변형이 가능할 것이다. 따라서, 본 발명의 보호 범위는 후술하는 특허청구범위에 의하여 해석되어야 하고, 그와 동등 및 균등한 범위 내에 있는 모든 기술적 사상은 본 발명의 보호 범위에 포함되는 것으로 해석되어야 할 것이다.
규칙 제공기, 100 명령어 선택기, 200
규칙 추출부, 110 명령어 선택기 생성부, 120
MOI 후보 확인부, 210 MOI 후보 선택부, 220
라벨링부, 230 프리-커버링부, 240
커버링부, 250 재선택부, 260

Claims (10)

  1. 타겟 프로세서의 구조에 대한 규칙 설명으로부터 다중 출력 명령어(multiple output instruction, MOI) 규칙을 구성하는 복수의 분할 규칙을 추출하고, 상기 추출된 분할 규칙과 단일 출력 명령어(single output instruction, SOI) 규칙을 포함하는 명령어 규칙을 제공하는 규칙 제공부; 및
    중간 표현(intermediate representation, IR) 트리를 입력받고, 상기 명령어 규칙을 기초로 상기 IR 트리의 노드를 그와 대응되는 분할 규칙과 SOI 규칙으로 주석하고, 상기 주석된 IR 트리의 각 노드를 결합하여 MOI에 대응되는 MOI 후보를 생성하고, 상기 생성된 모든 MOI 후보 중에서 서로 데이터 의존성에 따른 간섭 관계가 없으며 MOI 후보를 생성함으로써 획득되는 소득의 총합인 이익이 최대로 되는 최적의 MOI 후보 세트를 선택하고, 상기 선택된 MOI 후보 세트의 모든 분할 규칙에 대한 비용을 계산한 후 각각의 IR 트리의 노드에 대하여 분할 규칙과 SOI 규칙 중에서 더 낮은 비용을 가지는 규칙을 선택하여 IR 트리에 대한 타겟 코드를 생성하는 명령어 선택기를 포함하는, 다중 출력 명령어를 지원하는 코드 생성 장치.
  2. 제1항에 있어서, 상기 명령어 선택기는
    상기 명령어 규칙을 기초로 상기 IR 트리의 노드를 그와 대응되는 분할 규칙과 SOI 규칙으로 주석하고, 상기 주석된 IR 트리의 각 노드를 결합하여 MOI에 대응되는 MOI 후보를 생성하는 MOI 후보 확인부;
    상기 생성된 모든 MOI 후보를 평가하되, 상기 생성된 모든 MOI 후보 중에서 서로 데이터 의존성에 따른 간섭 관계가 없으며 MOI 후보를 생성함으로써 획득되는 소득의 총합인 이익이 최대로 되는 최적의 MOI 후보 세트를 선택하는 MOI 후보 선택부;
    상기 선택된 MOI 후보 세트의 모든 분할 규칙에 대한 비용을 계산한 후, 각각의 IR 트리의 노드에 대하여 분할 규칙과 SOI 규칙 중에서 더 낮은 비용을 가지는 규칙을 선택하여 라벨링하는 라벨링부;
    상기 선택된 MOI 후보 중에서 최종 MOI 후보로서 라벨되지 못한 IR 트리의 노드를 등가의 SOI 규칙으로 재라벨하는 프리-커버링부; 및
    프리-커버링된 코드를 커버링하여 IR 트리에 대한 타겟 코드를 생성하는 커버링부를 포함하는 것을 특징으로 하는, 다중 출력 명령어를 지원하는 코드 생성 장치.
  3. 제1항에 있어서, 상기 규칙 추출부는
    상기 명령어 선택기를 자동으로 생성하는 명령어 선택기 생성부를 더 포함하는 것을 특징으로 하는, 다중 출력 명령어를 지원하는 코드 생성 장치.
  4. 제2항에 있어서, 상기 MOI 후보 선택부는
    MOI 후보 간에 대한 커버링 간섭 관계와 스케쥴링 간섭 관계를 포함하는 간섭 그래프를 생성하고, 각각의 MOI 후보에 대하여 선택되는 경우의 이익을 계산하고, 상기 간섭 그래프에 따라 간섭 관계가 없으며 상기 이익이 최대인 MOI 후보를 상기 최적의 MOI 후보 세트로 선택하는 것을 특징으로 하는, 다중 출력 명령어를 지원하는 코드 생성 장치.
  5. 제2항에 있어서,
    IR 트리의 멤버 노드가 커버되지 못한다는 이유로 선택이 제외된 MOI 후보가 하나 이상 있는 경우, 상기 선택이 제외된 MOI 후보를 제외하고 다시 신규 MOI 후보 세트를 재선택하도록 제어하는 재선택부를 더 포함하는 것을 특징으로 하는, 다중 출력 명령어를 지원하는 코드 생성 장치.
  6. (a) 타겟 프로세서의 구조에 대한 규칙 설명으로부터 다중 출력 명령어(multiple output instruction, MOI) 규칙을 구성하는 복수의 분할 규칙을 추출하고, 상기 추출된 분할 규칙과 단일 출력 명령어(single output instruction, SOI) 규칙을 포함하는 명령어 규칙을 제공하는 단계;
    (b) 중간 표현(intermediate representation, IR) 트리를 입력받고, 상기 명령어 규칙을 기초로 상기 IR 트리의 노드를 그와 대응되는 분할 규칙과 SOI 규칙으로 주석하고, 상기 주석된 IR 트리의 각 노드를 결합하여 MOI에 대응되는 MOI 후보를 생성하는 단계;
    (c) 상기 생성된 모든 MOI 후보 중에서 서로 데이터 의존성에 따른 간섭 관계가 없으며 MOI 후보를 생성함으로써 획득되는 소득의 총합인 이익이 최대로 되는 최적의 MOI 후보 세트를 선택하는 단계;
    (d) 상기 선택된 MOI 후보 세트의 모든 분할 규칙에 대한 비용을 계산한 후, 각각의 IR 트리의 노드에 대하여 분할 규칙과 SOI 규칙 중에서 더 낮은 비용을 가지는 규칙을 선택하여 라벨링하는 단계;
    (e) 상기 선택된 MOI 후보 중에서 최종 MOI 후보로서 라벨되지 못한 IR 트리의 노드를 등가의 SOI 규칙으로 재라벨하는 단계; 및
    (f) 프리-커버링된 코드를 커버링하여 IR 트리에 대한 타겟 코드를 생성하는 단계를 포함하는 것을 특징으로 하는, 다중 출력 명령어를 지원하는 코드 생성 방법.
  7. 제 6항에 있어서, 상기 코드 생성 방법은, 상기 (b) 단계 후에,
    상기 명령어 선택기를 자동으로 생성하는 단계를 더 포함하는 것을 특징으로 하는, 다중 출력 명령어를 지원하는 코드 생성 방법.
  8. 제6항에 있어서, 상기 (c)단계는,
    MOI 후보 간에 대한 커버링 간섭 관계와 스케쥴링 간섭 관계를 포함하는 간섭 그래프를 생성하는 단계;
    각각의 MOI 후보에 대하여 선택되는 경우의 이익을 계산하는 단계; 및
    상기 간섭 그래프에 따른 간섭 관계가 없으며 상기 계산한 이익이 최대인 MOI 후보를 상기 최적의 MOI 후보 세트로 선택하는 단계를 더 포함하는 것을 특징으로 하는, 다중 출력 명령어를 지원하는 코드 생성 방법.
  9. 제6항에 있어서, 코드 생성 방법은,
    IR 트리의 멤버 노드가 커버되지 못한다는 이유로 선택이 제외된 MOI 후보가 하나 이상 있는 경우, 상기 선택이 제외된 MOI 후보를 제외시키는 단계; 및
    선택이 제외된 MOI 후보가 없어질 때까지, 상기 (c) 내지 상기 (e) 단계를 반복하는 단계를 더 포함하는 것을 특징으로 하는, 다중 출력 명령어를 지원하는 코드 생성 방법.
  10. 제6항 내지 제9항 중의 어느 한 항에 따른 다중 출력 명령어를 지원하는 코드 생성 방법을 실현하기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체.
KR1020110015337A 2011-02-22 2011-02-22 다중 출력 명령어를 지원하는 그래프 기반의 코드 생성 장치 및 그 코드 생성 방법 KR101276308B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020110015337A KR101276308B1 (ko) 2011-02-22 2011-02-22 다중 출력 명령어를 지원하는 그래프 기반의 코드 생성 장치 및 그 코드 생성 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020110015337A KR101276308B1 (ko) 2011-02-22 2011-02-22 다중 출력 명령어를 지원하는 그래프 기반의 코드 생성 장치 및 그 코드 생성 방법

Publications (2)

Publication Number Publication Date
KR20120096131A KR20120096131A (ko) 2012-08-30
KR101276308B1 true KR101276308B1 (ko) 2013-06-18

Family

ID=46886203

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020110015337A KR101276308B1 (ko) 2011-02-22 2011-02-22 다중 출력 명령어를 지원하는 그래프 기반의 코드 생성 장치 및 그 코드 생성 방법

Country Status (1)

Country Link
KR (1) KR101276308B1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20140093508A (ko) * 2013-01-18 2014-07-28 한국과학기술원 근접질의 연산 가속화 시스템

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20080091351A (ko) * 2006-01-30 2008-10-10 마이크로소프트 코포레이션 일련의 사전 정의된 규칙을 사용하여 소프트웨어를검사하는 코드 분석 도구를 갖는 컴퓨팅 시스템에서 일련의사전 정의된 규칙의 실행을 관리하는 방법 및 컴퓨터프로그램 제품
KR20080096306A (ko) * 2007-04-27 2008-10-30 재단법인서울대학교산학협력재단 규칙에 기반하여 스케일링 쉬프트의 최적의 위치를 찾는컴파일 방법 및 시스템
KR20100024813A (ko) * 2008-08-26 2010-03-08 재단법인서울대학교산학협력재단 우선순위 기반 실행을 이용한 캐시미스 대기시간 활용 방법및 장치
KR100970758B1 (ko) * 2009-07-31 2010-07-16 서울대학교산학협력단 복합 명령어 선택시 무가치 복합 명령어를 제거하여 코드를 최적화하기 위한 코드 생성 장치 및 그 코드 생성 방법

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20080091351A (ko) * 2006-01-30 2008-10-10 마이크로소프트 코포레이션 일련의 사전 정의된 규칙을 사용하여 소프트웨어를검사하는 코드 분석 도구를 갖는 컴퓨팅 시스템에서 일련의사전 정의된 규칙의 실행을 관리하는 방법 및 컴퓨터프로그램 제품
KR20080096306A (ko) * 2007-04-27 2008-10-30 재단법인서울대학교산학협력재단 규칙에 기반하여 스케일링 쉬프트의 최적의 위치를 찾는컴파일 방법 및 시스템
KR20100024813A (ko) * 2008-08-26 2010-03-08 재단법인서울대학교산학협력재단 우선순위 기반 실행을 이용한 캐시미스 대기시간 활용 방법및 장치
KR100970758B1 (ko) * 2009-07-31 2010-07-16 서울대학교산학협력단 복합 명령어 선택시 무가치 복합 명령어를 제거하여 코드를 최적화하기 위한 코드 생성 장치 및 그 코드 생성 방법

Also Published As

Publication number Publication date
KR20120096131A (ko) 2012-08-30

Similar Documents

Publication Publication Date Title
JP3664473B2 (ja) プログラムの最適化方法及びこれを用いたコンパイラ
US7694288B2 (en) Static single assignment form pattern matcher
Faraboschi et al. Instruction scheduling for instruction level parallel processors
EP1918812A1 (en) A software development system
US9292265B2 (en) Method for convergence analysis based on thread variance analysis
US20160321039A1 (en) Technology mapping onto code fragments
US20060200796A1 (en) Program development apparatus, method for developing a program, and a computer program product for executing an application for a program development apparatus
KR20090092617A (ko) 프로세서 및 컴파일 방법
Wang et al. Loop selection for thread-level speculation
Narayanan et al. ADIC2: Development of a component source transformation system for differentiating C and C++
US9256437B2 (en) Code generation method, and information processing apparatus
US20180032320A1 (en) Computer-implemented method for allowing modification of a region of original code
Malik et al. Optimal basic block instruction scheduling for multiple-issue processors using constraint programming
Sottile et al. Semi-automatic extraction of software skeletons for benchmarking large-scale parallel applications
Wägemann et al. GenE: A benchmark generator for WCET analysis
US8117604B2 (en) Architecture cloning for power PC processors
Murray et al. Compiling for automatically generated instruction set extensions
Zhao et al. Automated test program generation for an industrial optimizing compiler
CN112558977B (zh) 面向异构众核后端基于代价模型的多面体优化方法
KR101276308B1 (ko) 다중 출력 명령어를 지원하는 그래프 기반의 코드 생성 장치 및 그 코드 생성 방법
US20210042099A1 (en) Automatic generation of efficient vector code with low overhead in a time-efficient manner independent of vector width
Scharwaechter et al. A code-generator generator for multi-output instructions
Youn et al. Fast graph‐based instruction selection for multi‐output instructions
Kobeissi et al. Rec2poly: Converting recursions to polyhedral optimized loops using an inspector-executor strategy
Leupers et al. Retargetable compilers and architecture exploration for embedded processors

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20160204

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20170524

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20180521

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20190902

Year of fee payment: 7