A Vectorization Technique at Object Code Level

목적 코드 레벨에서의 벡터화 기법

  • 이동호 (인하대학교 전자계산공학과) ;
  • 김기창 (인하대학교 전자계산공학과)
  • Published : 1998.05.01

Abstract

ILP(Instruction Level Parallelism) processors use code reordering algorithms to expose parallelism in a given sequential program. When applied to a loop, this algorithm produces a software-pipelined loop. In a software-pipelined loop, each iteration contains a sequence of parallel instructions that are composed of data-independent instructions collected across from several iterations. For vector loops, however the software pipelining technique can not expose the maximum parallelism because it schedules the program based only on data-dependencies. This paper proposes to schedule differently for vector loops. We develop an algorithm to detect vector loops at object code level and suggest a new vector scheduling algorithm for them. Our vector scheduling improves the performance because it can schedule not only based on data-dependencies but on loop structure or iteration conditions at the object code level. We compare the resulting schedules with those by software-pipelining techniques in the aspect of performance.

명령어 재배치는 ILP(Instruction Level Parallelism) 프로세서의 병렬성을 활용하는 주요한 코드 최적화 기법이다. 명령어 재배치 알고리즘을 루프(loop)에 적용하면서 서로 다른 반복(iteration) 사이의 동시 수행 가능한 명령어들이 인접한 위치로 모여지는 소프트웨어 파이프라인(software pipeline)된 루프가 얻어진다. 그러나 루프로부터 병렬성을 추출하는 소프트웨어 파이프라인 방법은 주로 명령어사이의 자료 종속성에 근거하여 스케줄링을 수행하므로 그 자체에 무한한 병렬성을 가지고 있는 벡터 루프의 경우 그 병렬성을 충분히 드러내지 못한다는 문제점을 안고 있다. 본 논문에서는 이러한 벡터루프에 대해 프로그램의 목적 코드 레벨에서 행해질 수 있는 새로운 벡터 스케줄링 방법을 제안한다. 벡터 스케줄링 방법은 프로그램의 목적 코드 레벨에서 루프의 구조나 반복 조건, 그리고 자료 종속성 등에 대한 전체적인 정보에 기반하여 스케줄링을 수행함으로써 소프트웨어 파이프라인 방법보다 프로그램의 수행속도를 향상시킬 수 있다. 본 논문에서는 벡터 스케줄링을 수행한 결과를 전통적인 소프트웨어 파이프라인 방법에 대해 생산된 병렬 루프의 결과와 수행속도 측면에서 비교한다.

Keywords