View : 113 Download: 0

레지스터 할당을 위한 명령어수준 병렬처리용 프레디킷 분석 기법

Title
레지스터 할당을 위한 명령어수준 병렬처리용 프레디킷 분석 기법
Other Titles
A predicate analysis technique for allocating registers with instruction-level parallelism
Authors
신화정
Issue Date
2001
Department/Major
대학원 컴퓨터학과
Publisher
이화여자대학교 대학원
Degree
Doctor
Advisors
이기호
Abstract
Recent high-performance microprocessors have several pipeline stages but also abilities to execute several instructions at each cycle. Superscaler, VLIW(Very Long Instruction Word) and EPIC(Explicitly Parallel Instruction Computing) are exemplary architectures supporting ILP(Instruction-Level Parallelism). The role of compiler is crucial to extract parallelism more at the instruction level. Especially in VLIW and EPIC the efficiency mainly depends on the performance of compiler. The limiting factors of the performance of ILP processors are data dependency, control dependency and the architecture of processors. Especially the branch instruction which incur the control dependency reduce the possibility of parallel execution by decreasing the number of instruction in a basic block. One of the compiler techniques to improve the possibilities of code schedule by decreasing the conditional branch instructions is predicated execution. The predicated execution is an efficient method to remove the control dependency of the conditional instructions and improve the extraction possibility of parallel execution by increasing the number of instructions inside the basic block. As the role of compiler becomes more important, the optimizing of compiler is essential. In an optimized compiler, register allocation is of great importance. Variables of a program usually reside in the main memory while a program is executed. Memory accessing is relatively more time-consuming than register accessing. Therefore the variables should be allocated to registers to access at high speed. However, since the number of registers is not infinite in real system., register allocation is the task of assigning the infinite virtual registers to the finite physical registers effectively. If all the available registers are occupied, a new temporary variable can be assigned after one of the pre-occupied registers spill the variable to a memory. If a variable is selected as spill variable, the spill code, load and save instructions, is inserted before and after the code of spill variable respectively. The goal of register allocation is minimizing the number of the spill code. Register allocation heavily draws on widely accepted Chaitin's graph coloring register allocation algorithm. This paper proposes a new algorithm for register allocation which supports predicated execution and is expanded from the generally accepted Chaitin's graph coloring algorithm for register allocation. The microprocessors based on the VLIW and EPIC architecture are the main targets for applying the proposed algorithm. The proposed algorithm executes IF conversion which removes conditional branch instruction from intermediate codes generated from a compiler. And predicate analysis follows after evaluating the live range of variables through data flow analysis. To analyze the inclusion relation between the conditional operands, a partition graph of predicated execution is built. Predicate analysis finds the information which doesn't execute simultaneously the independent instruction analyzing the inclusion relations between conditional operands even though data dependency exists between the operational operands. Interference graph is constructed from the result of predicate analysis. In the interference graph, nodes and edges represent program variables and data dependency between variables, respectively. If there are no inclusion relations between conditional operands through predicate analysis, an edge is not inserted even though there is data dependency. More efficient register allocation can be possible with this simplification procedure for interference graph. Registers are allocated through graph coloring after the step of graph simplification. The proposed technique improves the possibility of parallel execution by increasing the number of instructions in the basic block by removing the conditional branch instructions through predicated execution. And it shows the effectiveness in register allocation by minimizing the spill code removing unnecessary edges of the interference graph through predicate analysis. Also it shows the effectiveness in case of the application program including many conditional branch instructions and many iterative routines from the conditional branches and realizes the effective register allocation through predicate analysis to compensate the inefficiencies of the code scheduling. ; 최근 마이크로 프로세서에서는 명령어의 실행 단계를 세분화하여 한 명령어의 실행이 끝나기 전에 다른 명령어가 중첩 실행 되도록 명령어들을 파이프라인 처리한다. 한 명령어 사이클(instruction cycle)에 여러 개의 명령어를 병렬 실행하여 명령어수준에서의 병렬성을 이용함으로써 성능을 향상시키는 고성능 프로세서들이 개발되고 있다. 명령어수준 병렬성을 이용한 대표적인 아키텍처 방식으로는 슈퍼스칼라(Superscalar), VLIW(Very Long Instruction Word), EPIC(Explicitly Parallel Instruction Computing) 등이 있다. 명령어수준 병렬성을 보다 많이 추출하기 위해서 컴파일러의 적극적인 개입이 요구되는데 특히 VLIW와 EPIC 아키텍처에서는 더욱 높은 성능 향상을 위하여 컴파일러의 중요성이 증대되고 있다. 명령어수준 병렬처리 프로세서에서는 자료 종속 관계, 제어 종속 관계, 프로세서의 구조적인 문제 등으로 성능이 저하된다. 특히 제어 종속을 일으키는 분기 명령어(branch instruction)는 기본 블록(basic block) 내에 존재하는 명령어 수를 감소시켜 병렬 처리할 명령어를 찾을 기회를 감소시킨다. 따라서 분기 명령어로 인한 성능 저하를 극복하고자 하는 많은 연구가 진행되어 왔다. 컴파일러가 조건 분기 명령어를 줄임으로써 코드 스케줄(code schedule)의 가능성을 증가시키는 기법 중의 하나가 프레디킷 실행(predicated execution)이다. 이 방식은 조건 분기 명령어를 제거하고 이 분기 명령어와 제어 종속 관계가 있는 분기 이후의 명령어들에 대해 주어진 프레디킷에 따라 조건적으로 실행되는 명령어로 변환하여 제어 종속 관계를 자료 종속 관계로 바꾸어주는 기법이다. 프레디킷 실행을 실시한 후에는 제어 종속 관계에 있던 여러 기본 블록들이 하나의 기본 블록으로 통합되어 병렬성을 증가시킬 수 있다. 컴파일러의 역할이 강조될수록 컴파일러 최적화에 대한 요구도 증대된다. 최적화 기법 중에 명령어수준 병렬처리 프로세서를 위한 기계 종속적인 후반부에서 필수적으로 처리해야 할 요소 중 하나는 레지스터 할당(register allocation)이다. 일반적으로 프로그램 변수는 실행 시간에 레지스터나 메모리에 존재한다. 레지스터는 고속 접근이 가능하지만 메모리 참조는 시간이 상당히 소비된다. 그러므로 프로그램 실행에 필요한 변수들을 가능한 한 많이 레지스터에 할당시키고 메모리 참조를 최소화하도록 해야 한다. 컴파일러는 무한개의 레지스터가 존재하는 것으로 가정하고 코드를 생성해내는데 실제 시스템에서 보유하는 레지스터 수는 유한하다. 즉 프로그램 변수와 컴파일러가 생성해낸 임시 변수의 수 보다 실제 사용 가능한 레지스터의 수가 적다. 레지스터 할당은 이 무한개의 가상 레지스터를 유한개의 실제 레지스터에 할당하는 작업이다. 따라서 보다 많은 변수를 제한된 수의 레지스터에 할당하는 효율적인 알고리즘이 필요하다. 레지스터 할당은 Chaitin의 그래프 컬러링(graph coloring) 레지스터 할당 알고리즘을 많이 응용한다. 본 논문은 기존 Chaitin의 레지스터 할당 알고리즘을 확장하여 명령어수준 병렬처리 프로세서의 성능 향상을 위한 프레디킷 실행을 지원하는 레지스터 할당 알고리즘을 제안한다. 명령어수준 병렬처리 프로세서 중에 RISC에서 발전한 VLIW 그리고 EPIC 아키텍처를 기반으로 하는 프로세서를 중심 타겟으로 한다. 제안한 알고리즘은 컴파일러가 생성한 중간 코드를 입력으로 받아 조건 분기 명령어를 제거하는 IF 변환(IF conversion)을 실시한다. 그리고 자료 흐름 분석을 통해 가상 레지스터들의 생존 범위를 구한 후 프레디킷 분석(predicate analysis)을 통해 프레디킷 지정자(predicate specifier)간에 서로 포함 관계가 없는 상호 독립적인 명령어들은 연산 오퍼랜드간에 자료 종속 관계가 있더라도 서로 동시에 실행되지 않으므로 간섭 그래프 상의 에지를 제거한다. 다음으로 간섭 그래프의 최소화 단계에서 시스템의 가용 레지스터 수 보다 많은 레지스터를 필요로 할 경우 대피시킬 가상 레지스터를 설정하여 대피 코드를 삽입하고 간섭 그래프를 재구성하여 간섭 그래프의 최소화가 완결될 때까지 반복 처리한다. 끝으로 실제 레지스터를 배정하여 레지스터 할당을 마친다. 제안한 레지스터 할당 기법은 명령어수준 병렬처리를 위한 것으로 병렬 처리를 극대화하면서 효율적인 레지스터 할당을 실시하기 위해 제안하였다. 프레디킷 실행을 통해 조건 분기 명령어를 제거하고 기본 블록 내의 명령어 수를 증가시켜 병렬 처리의 기회를 증진시킨다. 코드 스케줄링을 먼저 실시했을 때 발생하는 불이익을 보완하기 위해 프레디킷 분석을 통해 레지스터 할당을 실현하였다.
Fulltext
Show the fulltext
Appears in Collections:
일반대학원 > 컴퓨터공학과 > Theses_Ph.D
Files in This Item:
There are no files associated with this item.
Export
RIS (EndNote)
XLS (Excel)
XML


qrcode

Items in DSpace are protected by copyright, with all rights reserved, unless otherwise indicated.

BROWSE