본문/내용
최근의 ILP(Instruction Level Parallelism) 프로세서들은 성능을 최대한 이용하기 위하여 많은 최적화 기술들을 사용한다. 특히, 최적화 기술 중 명령어 스케쥴링시 명령어들 사이에
제어종속과 자료종속으로 인한 지연(delay, stall)을 최소화하기 위한 연구들이 진행중이다[1, 2].
코드 스케쥴링(Code Scheduling)은 프로그램의 실행시간을 최소화하기 위하여 명령어들을 재정렬하기 위한 기법이다. 또한, 적은 수의 하드웨어 자원을 효과적으로 이용하기 위한 레지스터 할당 기법도 최적화를 위한 중요한 기법의 하나라고 할 수 있다. 이들 두 기법을 병행하여 최적화를 수행하면 효과적인 최적화 기법이 될 수 있지만 불행히도 이들은 서로 상충되는 관계를 가진다. 이를 보완하기 위한 연구가 활발히 진행중인데 레지스터 할당 전에 코드 스케쥴링을 수행하는 기법을 선단계 코드 스케쥴링이라고 하고 레지스터 할당후에 코드를 스케쥴링하는 기법을 후단계 코드 스케쥴링(Postpass Code Scheduling)이라고 한다[3, 4, 5].
선단계 코드 스케쥴링을 위한 최적화 컴파일러의 흐름은 Fig 1과 같다.
Fig 1에서 살펴보면 선단계 코드 스케쥴링을 수행하기 위하여 중간코드 생성기를 거친 중간코드를 입력으로 받아 코드 스케쥴링을 위한 임시변수들의 종속관계를 조사하기 위하여 종속 그래프를 구성하고 이를 토대로 코드 스케쥴링을 수행한다. 스케쥴된 코드를 가지고 그래프 컬러링 알고리듬에 기초한 레지스터 할당을 수행한 후 마지막으로 선단계 스케쥴된 중간코드를 생성하게 된다.
참고문헌
P. P. Chang, W. W. Hwu, `Trace Selection for Compiling Large C Application Programs to Microcode,` Proceedings of the 21st International Microprogramming Workshop, pp. 21~29, Nov. 1988.
2. M. D. Smith, M. S. Lam, M. A. Horowitz, `Boosting Beyond Static Scheduling in a Superscalar Processor,` Proceedings of the 17th Annual International Symposium on Computer Architecture, pp. 344~354, May 1990.
3. P. B. Gibbons, S. S. Muchnick, `Efficient instruction scheduling for a pipelined architecture,` Proceeding of the SIGPLAN `86 Symposium on Compiler Construction, pp. 11~16, 1986.
4. J. R. Goodman, W. C. Hsu, `Code scheduling and register allocation in large basic blocks,` International Conference on Supercomputing, pp. 442~452, 1988.
5. D. G. Bradlee, S. J. Eggers, R. R. Henry, `Integrating register allocation and instruction scheduling for RISCs,` Architectural Support for Programming Languages and Operating Systems, pp. 122~131, 1991.
6. G. J. Chaitin, `Register allocation and spilling via graph coloring,` SIGPLAN Notices, pp. 98~105, June 1982.
7. 최준기, 심현규, 이상정, “Retargetable 컴파일러의 광역 레지스터 할당 기법,” 한국정보과학회 추계 학술대회 논문집, Vol. 24, No. 2, pp. 351~354, 1997.