KR100238330B1 - 명령의 시퀀싱에 의하여 헤저드의 해소를 도모하는 최적화장치 - Google Patents

명령의 시퀀싱에 의하여 헤저드의 해소를 도모하는 최적화장치 Download PDF

Info

Publication number
KR100238330B1
KR100238330B1 KR1019960013068A KR19960013068A KR100238330B1 KR 100238330 B1 KR100238330 B1 KR 100238330B1 KR 1019960013068 A KR1019960013068 A KR 1019960013068A KR 19960013068 A KR19960013068 A KR 19960013068A KR 100238330 B1 KR100238330 B1 KR 100238330B1
Authority
KR
South Korea
Prior art keywords
command
resource
instruction
value
parent
Prior art date
Application number
KR1019960013068A
Other languages
English (en)
Other versions
KR960038647A (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 마츠시타 덴끼 산교 가부시키가이샤
Publication of KR960038647A publication Critical patent/KR960038647A/ko
Application granted granted Critical
Publication of KR100238330B1 publication Critical patent/KR100238330B1/ko

Links

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/445Exploiting fine grain parallelism, i.e. parallelism at instruction level

Abstract

참조 - 정의간의 의존관계, 정의 - 정의간의 의존관계를 그래프에 나타내지 않아도 해저드의 해소를 확실하게 실행하는 최적화장치를 제공한다.
제 9 도의 스텝 s1에서는 정의 - 참조간의 의존관계로 이루어지는 DAG의 명령노드로부터 출력후보를 노미네이트하고, 노미네이트한 각 DAG의 명령노드를 출력후보로서 스텝 s3에 부여한다. 스텝 s3에서는 해저드 등의 DAG의 어느 링크에 위치하는가에 의거하여 노미네이트된 출력후보의 명령노드중 어느것을 우선할것인지를 결정한다.
스텝 s4에서는 리소스상태 정보를 참조하여 선택된 명령노드에서 자원이 정의되어 있지 않거나 혹은 정의되어 있는 자원이 사용중이 아닌가를 확인하고, 그렇다면 스텝 s5에서 출력 리스트 버퍼(17)에 선택된 명령노드를 출력한다. 스텝 s5에서의 출력후, 그 선택된 명령노드가 최후의 명령노드인지를 판정하고, 그렇지 않다면 스텝 s7에서 리소스상태 정보를 갱신한다.

Description

명령의 시퀀싱에 의하여 해저드의 해소를 도모하는 최적화장치
제 1 도는 파이프라인 처리가 어떻게 실행되는지를 나타낸 도면
제 2 도는 해저드에 의해 파이프라인 처리에 나타나는 장해를 나타낸 도면
제 3 도는 종래의 명령 스케쥴링이 실행되는 형태를 나타낸 도면
제 4 도는 기본 블록내의 명령이 하나에 결합한 DAG를 나타내는 도면
제 5 도는 최적화장치의 내부구성을 나타낸 블록도
제 6a 도는 이 DAG의 데이터 구조의 포맷을 나타내는 도면
제 6b 도는 본 실시예의 DAG의 일례를 나타내는 도면
제 6c 도는 본 실시예의 DAG의 일례를 나타내는 도면
제 7 도는 DAG 생성부(14)가 DAG를 생성하는 형태를 나타낸 흐름도
제 8a 도∼제 8c 도는 리소스 상태정보의 일례를 나타내는 도면
제 9 도는 스케쥴링부(18)의 처리과정의 메인 흐름도
제 10 도는 제 9 도의 흐름도의 스텝 s1의 처리과정을 나타내는 흐름도
제 11 도는 제 9 도의 흐름도의 스텝 s3의 처리과정을 나타내는 흐름도
제 12 도는 제 9 도의 흐름도의 스텝 s7의 처리과정을 나타내는 흐름도
제 13 도는 스케쥴링부(18)에 의하여 명령열의 순서가 결정되는 형태를 나타낸도면
제 14 도는 스케쥴링부(18)에 의하여 백 트랙이 실행되는 형태를 나타낸 도면
제 15 도는 제 2 실시예에서, 제 9 도의 흐름도에 추가되는 일련의 스텝을 나타내는 도면
제 16 도는 하나의 자원이 시종 사용중이며, 시퀀싱이 실행되지 않는 DAG를 나타낸 도면
제 17 도는 제 16 도에 나타낸 DAG의 명령에서 정의되어 있는 자원이 치환되는 형태를 나타낸 도면
* 도면의 주요 부분에 대한 부호의 설명
11 : 명령 입력부 12 : 코드 분할부
13 : 데이터 플로우 해석부 14 : DAG 유지부
15 : DAG 생성부 16 : 리소스 상태 유지부
17 : 출력 리스트 버퍼 18 : 스케쥴링부
19 : 명령 출력부
[ 발명의 배경 ]
본 발명은 기계어 프로그램중의 명령을 시퀀싱하고, 최적의 실행순서로 하는 최적화장치에 관한 것이다.
최근, 파이프라인 처리도입에 의하여 기계어 프로그램 실행의 고속화를 의도한 마이컴 시스템이 활발하게 연구되고 있다. 이 파이프라인 처리에서는 기계어 프로그램을 실행함에 있어서, 기계어 프로그램의 각 명령의 각 스테이지를 병렬로 실행함으로써 처리의 고속화를 도모하고 있다.
파이프라인 처리에 의하여 기계어 프로그램중의 각 명령이 병렬 실행되는 형태를 이하에 설명한다. 제 1 도는 파이프라인 처리가 어떻게 실행되는지를 나타낸 도면이다.
본 도면에서 『 MOV mem, D0 』 , 『 MOV 10, D1 』 , 『 ADD D0, D0 』 이 종방향으로 배열되어 있지만, 이들 명령은 순서대로 실행되는 것을 나타내고 있다.
본 도면에서 『 MOV mem, D0 』 으로부터 보아 횡방향으로 5개의 사각형이 배열되고, 각 사각형 사이는 흰색의 오른쪽방향 화살표로 구분되어 있지만, 이것은 『MOV mem, D0 』 이 『 IF 』 , 『 DEC 』 , 『 EX 』 , 『 MEM 』 , 『 WB 』 라는 5개의 스테이지를 가지고, 이들 스테이지가 순서대로 실행되는 것을 나타내고 있다.
상기 『 IF 』 는 명령인출의 스테이지이며, 『 DEC 』 는 명령해독의 스테이지이다. 또, 『 EX 』 는 명령실행의 스테이지이다. 『 MEM 』 은 메모리로의 데이터 읽기 쓰기 스테이지이며, 『WB』 는 레지스터에 대한 데이터의 써넣기 스테이지이다.
『 MOV mem, D0 』 과 마찬가지로 『 MOV 10, D1 』 로부터 보아 횡방향으로도『 IF 』 , 『 DEC 』 , 『 EX 』 , 『 MEM 』 , 『 WB 』 5개의 스테이지를 나타내는 5개의 사각형이 배열되어 있다. 또 본 도면에서는 『 MOV mem, D0 』 의 『 DEC 』아래에는 『 MOV 10, D1 』 의 『 IF 』 가 있고, 『 MOV mem, D0 』 의 『 EX 』 아래에는 『 MOV 10, D1 』 의 『 DEC 』 가 있는 것을 알 수 있다. 이것은 파이프라인 처리에서는 『 MOV 10, D1 』 의 각 스테이지가 『 MOV mem, D0』 의 각 스테이지로부터 1 스테이지만큼 늦게 실행되는 것을 나타내고 있다.
『 MOV 10, D1 』과 마찬가지로 『 ADD D0, D0 』 으로부터 보아 횡방향으로도 『 IF 』 , 『 DEC 』 , 『 EX 』 , 『 MEM 』 , 『 WB 』 5개의 스테이지를 나타내는 5개의 사각형이 배열되어 있다. 또 본 도면에서는 『 MOV 10, D1 』 의 『 DEC아래에는 『 ADD D0, D0 』 의 『 IF 』 가 있고, 『 MOV 10, D1 』 의 『 EX 』아래에는 『 ADD D0, D0 』 의 『 DEC 』 가 있는 것을 알 수 있다. 이것은 파이프라인 처리에서는 『 ADD D0, D0 』 의 스테이지가 『 MOV 10, D1』 의 각 스테이지보다 1 스테이지만큼 늦게 실행되는 것을 나타내고 있다. 각 명령의 스테이지가 상기와 같이 실행되는 것으로, 파이프라인 처리의 병렬실행은 실시된다.
상기 예의 『MOVmem, D0』-『MOV10, D1』 사이,『MOV10, D1』- 『ADD D0, D0 』 사이는 그 전후의 명령에서 이용한 자원과 다른 자원을 이용하고 있었기 때문에 명령간의 의존관계가 없었다. 그런데 의존관계가 있는 2개의 명령 실행순서가 연속하고 있고, 앞선 명령의 실행결과를 다음 명령이 ALU 연산, 어드레스 연산에서 참조하는 경우, 상기 명령의 병렬실행에 지장이 생긴다(여기에서 자원(리소스)이란, 값을 기억해 두기 위한 하드웨어적 요소를 말하고, 레지스터, 메모리가 이에 해당한다. 또, 제로 플래그, 캐리(carry) 플래그 등, 프로세서가 가지는 각종 플래그도 값을 기억해둘 수 있기 때문에 자원이라 칭한다. 이와 같은 자원에 값을 기억시키는 것은 자원의 정의라고 하고, 명령에서 자원에 기억된 값을 이용하는 것은 자원의 참조라 한다).
이어서 의존관계가 있는 2가지 명령이 연속했기 때문에 파이프라인 처리에 지장을 주는 형태를 이어서 설명한다. 제 2 도는 해저드(hazard)에 의해 파이프라인 처리에 나타나는 장해를 나타낸 도면이다.
본 도면에서 『 MOV mem, D0 』 에서 보아 횡방향으로 『 IF 』 , 『 DEC 』 ,『 EX 』 , 『 MEM 』 , 『 WB 』 라는 5개의 스테이지가 배열되고, 『 ADD D0, D0 』의 횡방향으로도 『 IF 』 , 『 DEC 』 , 『 EX 』 , 『 MEM 』 , 『 WB 』 라는 5개의 스테이지가 배열되어 있다. 본 도면에서 『 IF 』 , 『 DEC 』 까지는 1 스테이지 늦게,『ADD D0, D0』의 각 스테이지가 실행되고 있지만, 다음의 『ADD D0, D0』 의 『 EX 』 가 『 MOV mem, D0 』 의 『 WB 』 스테이지와 같은 사이클로 실행되지 않고, 『 MOV mem, D0 』 의 『 MEM 』 스테이지와 같은 사이클로 실행되고 있는 것을 알 수 있다. 이것은 『 ADD D0, D0 』 의 실행에는 『 MOV mem, D0』 의 실행 결과가 필요하며, 그 실행결과가 『 MOV mem, D0 』 가 『 EX 』 스테이지에서는 확정되어 있지 않고 『 MOV mem, D0 』 가 『 MEM 』 의 스테이지로 되어 비로소 확정되기 때문이다.
이 일례와 같이 로드명령과, 그 명령의 실행결과를 이용하는 ALU 연산의 명령이 순서대로 배열되는 것으로 파이프라인 처리를 방해해버리는 경우가 있다. 이와 같이 파이프라인 처리에서 선행명령의 실행결과를 필요로 하기 때문에 다음 명령의 실행이 늦어지는 상황을 해저드라고 칭한다. 상기의 일례는 ADD연산을 일례로 하고 있지만 그 외에도 MUL 연산, SUB 연산, DIV 연산 등의 ALU 연산이 선행명령의 실행결과를 이용하고 있는 경우, 이 선행명령과 ALU 연산의 명령은 해저드의 요인이 된다. 또, 어드레스 레지스터를 통한 어드레스 연산이 선행명령의 실행결과를 이용하고 있는 경우에도 선행명령과 어드레스 계산의 명령은 해저드의 요인이 된다 ( 또, 어떠한 배열의 명령열이 해저드를 생기게 하는가는 프로세서의 파이프라인 구성에 의존한다. 제 1 도는 파이프라인이 5단인 경우의 해저드 발생예를 나타내고 있다).
해저드에 의한 실행지연이나 실행속도의 저하에 대처하기 위하여 종래부터 명령 스케쥴링이라는 처리가 실행되어 왔다. 명령 스케쥴링이란 기계어 프로그램의 명령 순서를 시퀀싱하고, 해저드의 요인이 되는 명령간에 기계어 프로그램내의 다른 명령을 개재시키는 해저드 해소법이다.
이와 같이 명령 스케쥴링을 실행하는 것으로 해저드를 해소하는 것이 가능하게 되지만 이 시퀀싱은 기계어 프로그램의 의미가 바뀌지 않도록 실행할 필요가 있다. 그 때문에 종래의 명령 스케쥴링에서는 유향 비주기 그래프 (Directed Acyclic Graph: 이하 DAG라 약칭한다) 에 의하여 명령간의 의존관계를 보존해 두고 원래의 프로그램의 의미가 변하지 않는 범위에서 기본 블록 내의 명령의 시퀀싱을 실행하고 있었다(기본 블록이란 프로그램중의 연속 명령열로서, 열의 도중에 점프도 없고, 또 도중으로의 점프도 없는 것을 말한다).
이하, 이 DAG에 대하여 설명한다. 종래의 DAG는 기계어 프로그램중의 각 명령이 노드(명령노드)로 되어 있고, 각 명령노드간은 정의-참조간의 링크, 참조-정의간의 링크, 정의-정의간의 링크에 의하여 결합되어 있다.
(가) 정의-참조간의 링크
정의-참조간의 링크란 어느 명령에 의하여 정의되는 자원이 어느 명령에서 참조되는가를 나타내고 있다.
(1) 『MOV 100, D0』
(2) 『ADD D0, D1』
예를들면 (1), (2)의 명령열에는 레지스터 D0을 통한 데이터 플로우가 존재하고 있다. 이 레지스터 D0을 통한 데이터 플로우가 존재하기 때문에 명령 (1)(2)의 순서를 바꾸어 넣는 것은 데이터 플로우를 붕괴시키게 된다. 이 때문에 명령 스케쥴링은 정의-참조간의 링크 내용에 기초하여 그 정의-참조간의 링크로 규정된 실행순서를 바꾸어 넣지 않도록 실행된다.
(나) 참조-정의간의 링크
참조-정의간의 링크란 어느 명령에 의하여 참조된 자원이 어느 명령으로 정의되었는지를 나타내고 있다. 명령의 시퀀싱을 실행함에 있어서 정의-참조간의 링크에 덧붙여서 참조-정의간의 링크가 왜 필요한가를 이하의 (1)∼(4)의 명령열을 이용하여 설명한다.
(1) 『MOV 100, D0』
(2) 『ADD D0, D1』
(3) 『MOV 200, D0』
(4) 『ADD D0, D2』
이 명령열에서,(1)-(2)의 명령열에는 레지스터 D0을 통한 데이터 플로우가 존재하고 있다. (3)-(4)의 명령열에도 레지스터 D0을 통한 데이터 플로우가 존재하고 있다. 레지스터 D1, D2의 격납값의 초기값이 0 이었다고 한다. 그리고 이(1)∼(4)의 명령열을 시퀀싱하여 (1) - (3) - (2) - (4) 의 순서로 했다고 한다(이것은 상기 (가)의 요건을 만족하고 있다). 이 순서는 앞서 서술한 정의 - 참조의 배열을 유지한 것이지만, 이 기계어 프로그램의 실행에 의하여 레지스터 D1에 200이 가산되고, 레지스터 D2에 200이 가산되므로 기계어 프로그램의 의미가 바뀌어 버린다. 그 때문에 DAG에서는 (2) - (3) 사이에서 레지스터 D0에 관한 의존관계를 참조 - 정의간의 링크에 보존해 두고 결함있는 시퀀싱을 방지하고 있다.
(다) 정의 - 정의간의 링크
정의 - 정의간의 링크란, 어느 명령에 의하여 정의된 자원이 다른 어느 명령으로 정의되는지를 나타내고 있다. 명령을 시퀀싱함에 있어서, 정의 - 정의간의 링크가 왜 필요한지를 이하의 (1) (2) (3)의 명령열을 이용하여 설명한다.
(1) 『MOV 100, D0』
(2) 『MOV 200, D0』
(3) 『ADD D0, D2』
예를들면 (2) - (3)의 명령열에는 레지스터 D0에 대한 데이터 플로우가 존재하고 있다. 그 때문에 (2) (3)의 명령은 정의 - 참조간의 링크로 결합된다. 또 (1)의 명령열은 레지스터 D0에 대한 정의이다. 이 (1)∼(3)의 명령열을 시퀀싱하여 (2) - (1) - (3)의 순서로 하면, 이 기계어 프로그램의 실행에 의하여 레지스터 D2에 100이 가산되므로 기계어 프로그램의 의미가 바뀌어 버린다. 이와 같은 결함이 있는 시퀀싱을 방지하기 위하여 DAG에서는 (1) - (2)사이에서 레지스터 D0에 관하여 정의 - 정의라는 의존관계를 정의 - 정의간의 링크에 보존해 두고, 하자가 있는 시퀀싱을 방지하고 있다 (또 상기 (1) (2)와 같이 동일 자원의 정의가 순서대로 배열하는 명령열은 어셈블러 언어로 기술된 프로그램에는 보이지 않지만, 컴파일러가 고급언어로부터 기계어 언어로 번역을 실행할 때, 어셈블러 언어를 출력함에 있어서 출력되는 수가 있다. 또 플래그는 정의 - 정의의 순서로 배열하고 있는 예가 자주 보여진다).
상기 DAG를 참조하여 최적화장치가 기계어 프로그램의 의미를 보장하면서도 명령 스케쥴링을 행하는 형태를 도면을 참조하면서 설명한다. 제 3 도는 종래의 최적화장치에 의하여 시퀀싱이 행해지는 형태를 나타낸 설명도이다.
본 도면에서 도면중 원 ○은 기계어 프로그램중 각각의 명령을 나타내고, 또 원 안의 수치는 각 명령의 원래의 순서를 나타낸다. 도면중 4 - 5 - 6 - 7 간의 실선의 화살표는 이들 명령간의 링크를 나타내고,1-2-3 간의 파선의 화살표는 이들 명령간의 링크를 나타내고 있다. 본 도면에서 명령 5, 6을 나타내는 원은 해칭으로 나타내고 있다. 이들 명령 5, 6 간의 DAG에는 『×』 가 존재하지만, 이것은 명령 5, 6 사이에서 해저드가 발생하고 있는 것을 나타내고 있다.
최적화장치는 프로그램중의 점프명령을 검출하고, 검출결과에 의거하여 기계어 프로그램을 기본 블록으로 분할한다. 이 예에서는 명령 1∼7 중에 점프명령은 없고, 기본 블록은 명령 1에서부터 명령 7까지의 명령에 의하여 구성되어 있다. 분할후, 기계어 프로그램중의 각 명령을 명령노드로 하고, 그 기본 블록내의 정의 - 참조관계, 참조 - 정의관계, 정의 - 정의 관계를 검출하고, 검출결과에 의거하여 정의 - 참조간의 링크, 참조 - 정의간의 링크, 정의 - 정의간의 링크를 생성한다. 이들간의 링크를 생성하는 것으로 도면중의 명령중 1-2-3의 명령이 하나로 연쇄되고, 4-5-6-7의 명령이 하나의 DAG에 결합된다. 생성된 링크에 의하여 명령이 연쇄되면 최적화장치는 이들간의 링크의 실행순서가 손상되지 않도록 명령열의 시퀀싱을 실행한다. 도면의 일례에서, 최적화장치는 명령열 4-5-6-7의 5-6간에 명령열1-2-3의 명령 1을 삽입하고 또, 7의 명령후에 2-3의 명령을 삽입하여 시퀀싱을 실행하고 있다. 이와 같이 최적화장치가 해저드의 명령열 사이에 다른 명령을 개재시키는 것에 의해 해저드의 대처가 이루어지고, 실행지연이나 실행속도의 저하가 해소된다.
또 4-5-1-6-7-2-3이라는 순서는 일례이며 ,4-1-5-2-6-7-3이나 1-4-5-2-6-7-3이라는 식으로 DAG에 나타낸 의존관계 손상되지 않는 한, 어떠한 순서로 시퀀싱해도 된다.
그러나 상기 종래기술에서는 제 4 도의 일례에 나타내는 바와 같이, 의존관계를 3개 이용하기 때문에 노드끼리 결합하기 쉽고, 실제로 시퀀싱할 수 있는 여지가 남아있는 경우라도 명령의 시퀀싱이 실행되지 않고 해저드를 해소할 수 없게 되는 일이 있다는 문제점이 있었다.
제 4 도는 기본 블록내의 명령이 하나로 결합된 DAG를 나타내는 도면이다. 본도면에서,『MOV (A0), D1』 『ADD D1, D1』에서는 『MOV (A0), D1』에서 정의된 레지스터 D1의 값을 『ADD D1, D1』 에서 참조하기 때문에 해저드가 생기는 것을 알 수 있다. 여기에서 해저드를 해소하려면 연속하는 전방에 있는 명령, 즉, 『MOV 10, D0』 『MOV D0, A0』 『MOV A0, mem』···중 어느 것인가를 삽입할 필요가 있지만 『MOV (A0), D1』 에 이르는 DAG를 더듬어가면 이들 명령은 모두 『MOV (A0), D1』 과 의존관계가 있는 것을 알 수 있다. 따라서 해저드 요인간에 그들의 명령을 이동하는 것은 의존관계를 붕괴시키게 되고 해저드의 해소는 불가능하게 된다.
[ 발명의 개요 ]
본 발명의 제 1 목적은 프로세서의 파이프라인 구성에 의하여 발생할 수 있는 해저드를 명령의 시퀀싱에 의하여 대처할 수 있는 최적화장치를 제공하는 것이다.
본 발명의 제 2 목적은 상기 문제점을 감안하여 참조 - 정의간의 의존관계, 정의 - 정의간의 의존관계를 그래프로 나타내지 않아도 해저드의 해소를 확실하게 실행할 수 있는 최적화장치를 제공하는 것이다.
본 발명의 제 3 목적은 로드명령에 의하여 정의되는 자원이 그 직후의 명령에서, ALU 연산 혹은 어드레스 연산의 오퍼랜드(operand)로서 참조되기 때문에 발생하는 파이프라인 처리의 지연을 프로그램내의 명령을 시퀀싱에 의하여 대처할 수 있는 최적화장치를 제공하는 것이다.
본 발명의 제 1, 제 2 목적은 「파이프라인 처리의 해저드를 해소하기 위해 프로그램중의 분기를 포함하지 않는 프로그램 부분의 명령을 시퀀싱하는 최적화장치로서, 상기 프로그램중의 분기를 포함하지 않는 프로그램 부분의 명령을 시퀀싱하는 최적화장치로서, 상기 프로그램중의 분기를 포함하지 않는 프로그램 부분에 대하여 복수의 유향 비주기 그래프를 생성하는 유향 비주기 그래프 생성수단과 (유향 비주기 그래프는 자원에 값을 정의하는 명령을 친(親 ; parent)으로 하고 그 자원의 값을 참조하는 명령을 자(子 ; child)로 한 친자관계의 계보를 나타낸 것이다), 각 유향 비주기 그래프에서, 해저드가 존재하는 친자간에 마크를 설정하는 마크설정수단과, 유향 비주기 그래프중의 마크된 명령간에 그 명령간에서 사용중인 자원의 값을 파괴하지 않는 다른 유향 비주기 그래프의 명령을 삽입함으로써 상기 프로그램 부분의 명령을 시퀀싱하는 시퀀싱수단을 구비하는 구성」 에 의하여 달성된다.
상기 구성에 의하면 정의 - 참조간의 링크에 의해서만 결합된 DAG에 의하여 의존관계를 보존하여 두고, 사용중으로 되어 있는 자원의 값을 파괴하지 않도록 실행순서가 결정되므로 시퀀싱의 자유도를 높일 수 있다. 그 때문에 해저드 해소가 보다 확실하게 실행되고 파이프라인 처리에 적절한 기계어 프로그램을 생성할 수 있다.
상기 구성의 최적화장치는, 유향 비주기 그래프의 선두의 명령중 자손에 해저드를 포함하는 명령에 의하여 높은 우선도를 부여하고, 자손에 해저드를 포함하지 않는 명령에 의하여 낮은 우선도를 부여하는 우선도 부여수단을 구비하고, 시퀀싱수단은 유향 비주기 그래프의 선두 명령중 대상이 되는 명령이 지시되면 지시된 명령을 유향 비주기 그래프로부터 절단하는 절단수단과, 절단된 명령을 절단된 순서에 따라 연속으로 격납하는 명령 격납수단과, 나중에 참조되는 자원의 값을 파괴하는 명령을 각 유향 비주기 그래프의 선두로부터 검출하는 파괴 명령 검출수단과, 친의 명령이 명령 격납수단의 열의 최후미에 존재하는 명령이며, 또 그 친과의 사이에 마크가 설정되어 있는 명령을 각 유향 비주기 그래프의 선두로부터 검출하는 마크부착 명령 검출수단과, 파괴 명령 검출수단에 의하여 검출된 명령 및 마크부착 명령 검출수단에 의하여 검출된 명령의 절단을 금지하는 절단 금지수단과, 절단 금지수단에 의하여 절단이 금지된 명령 이외의 선두명령으로서, 부여된 우선도가 가장 높은 명령을 대상으로 하여 지시하는 명령지시수단을 구비하는 구성」으로 할 수 있다.
또 상기한 구성에 의하면,
해저드정보가 설정되어 있는 친자가 연속하여 절단되는 것, 나중에 참조되는 자원을 정의하는 명령이 절단되는 것이 금지수단에 의하여 금지되고, 이에 의하여 해저드정보가 설정되어 있는 친자간에 다른 명령이 삽입되므로 해저드 해소가 확실하게 되는 실행순서가 결정된다. 또 이후에 해저드 정보가 설정되어 있는 DAG의명령을 우선하고, 설정되어 있지 않은 DAG의 명령이 이것에 계속되므로 해저드가 해소될 가능성이 보다 높아진다.
여기에서 상기의 구성에 덧붙여서 「각각의 자원에 대응하는 자원 플래그를 기억하는 자원 플래그 기억수단과 (사용중으로 되어 있는 자원에 대응하는 자원 플래그는 온으로 설정되고, 미사용으로 되어 있는 자원에 대응하는 자원 플래그는 오프로 설정되어 있다. 대상으로 되어 있는 프로그램 부분의 입구에서는 선행하는 프로그램 부분의 출구 상태를 반영하고 있다), 명령 격납수단에 명령이 격납될 때마다 그 명령으로 값이 정의되는 자원에 대응하는 자원 플래그를 온으로 반전시키고, 자원의 값이 참조되는 것이 명령 격납수단에 격납된 명령에서 마지막이 되는 자원에 대응하는 자원 플래그를 오프로 반전시키는 갱신수단을 구비하고, 파괴 명령 검출수단은 온으로 되어 있는 자원 플래그를 참조하고, 그 자원 플래그에 대응하는 자원의 값을 파괴할 것인지를 판정함으로써 명령을 검출하는 구성」으로 할 수 있다.
또, 상기 구성에 의하면, 각 레지스터가 사용중인지 미사용인지가 플래그에 의하여 나타내어져 있으므로 각 레지스터의 참조상황이 명확하게 되고 해저드가 보다 확실하게 해소될 수 있다.
상기 구성에서, 「파괴 명령 검출수단은 각 유향 비주기 그래프의 선두에 있는 각각의 명령을 파괴후보로서 선택하는 파괴후보 선택부와, 파괴후보로서 선택된 명령으로 정의되는 정의자원이 단수라면 정의자원에 대응하는 자원 플래그가 미사용을 나타내는 오프로 설정되어 있는지를 판정하고, 정의되는 자원이 복수라면 그들 정의자원에 대응하는 자원 플래그가 모두 오프로 설정되어 있는지를 판정하는 정의자원 검출부와, 검출된 모든 정의자원에 대응하는 자원 플래그가 오프라면 그 파괴후보로서 선택된 명령을 비파괴 명령으로 변경하는 제 1 제외부와, 몇가지 자원에 대응하는 자원 플래그가 온으로 설정되어 있는 경우, 그들 자원을 정의하고 있는 친명령을 모두 검출하는 제 2 친명령 검출부와, 제 2 친명령부에 의하여 검출된 각각의 친명령으로 정의되어 있는 자원이 다시 몇가지 자명령에서 참조되어 있다면 그들의 자명령을 모두 검출하는 제 2 자명령 검출부, 파괴후보와는 다른 자명령이 제 2 자명령 검출부에 의하여 검출되면 그들 자명령은 모두 절단완료인지를 판정하는 제 2 절단완료 명령 판정부와, 모든 정의자원에 대하여 제 2 자명령 검출부에 의하여 파괴후보 이외의 자명령이 검출되지 않은 경우, 혹은 파괴후보와는 다른 자명령이 검출되었지만 그들은 제 2 절단완료 명령 판정부에 의하여 모두 절단 완료라고 판정된 경우, 그 파괴후보로서 선택된 명령을 비파괴 명령으로 변경하는제 2 제외부, 파괴후보로서 선택되고 또 비파괴 명령으로 변경되지 않은 명령을 파괴 명령으로서 출력하는 출력부를 구비하는 구성」으로 할 수 있다.
또 상기 구성에 의하면, 마지막의 참조라고 판정된 명령의 우선도가 가장 높다면 그 명령을 결정하므로 기계어명령, 『ADD D1, D1』 과 같이 소스, 데스티네이션(destination; 행선지, 목적지)으로 동일한 레지스트를 사용하고 있는 것과 같은 기계어 명령에 대처할 수 있고, 해저드가 보다 확실하게 해소될 수 있다.
상기 구성에서, 「시퀀싱수단은 하나의 프로그램 부분에 대하여 파괴 명령 검출수단이 파괴 명령만을 검출한 경우, 그 유향 비주기 그래프를 명령 격납수단의 최후미에 격납된 명령이 절단되기 전의 상태로까지 복원하는 제 1 복원수단과, 이전 그 명령이 절단됨으로써 값이 변경을 받은 자원에 대응하는 자원 플래그를 해당명령이 절단되기 전의 상태로 복원하는 제 2 복원수단을 구비하고, 명령지시수단은 명령이 유향 비주기 그래프로 복귀되면 복귀된 명령에 이어서 높은 우선도가 부여된 유향 비주기 그래프의 선두명령을 대상으로 하여 지시하는 구성」으로도 할 수 있다.
또, 상기한 구성에 의하면, 우선도가 부여된 명령이 무엇인가 사용중인 레지스터를 정의하는 경우, 직전에 기억된 명령을 DAG로 복귀하여 다른 DAG 명령을 절단하므로 순서결정의 번경이 이루어진다. 그 때문에 실행순서 결정의 데드 엔드(dead end)에 대처할 수 있다.
또 명령의 선행 판독없이 데드 엔드에 대처할 수 있다. 이것에 의하여 복잡한 데드 엔드 방지판정이 필요하지 않게 되고, 구조가 간단하고 고속인 명령 선별이 가능하게 된다.
데드 엔드 방지판정을 하는 경우에도 최종적으로 백 트랙에 의하여 데드 엔드를 회피할 수 있는 것이 보장되므로 방지판정과 백 트랙에 의한 로스타임을 임의의 비율로 설정할 수 있고, 전체의 처리시간을 최적으로 할 수 있다.
여기에서 「파이프라인 처리의 해저드를 해소하기 위해 프로그램중의 분기를 포함하지 않는 프로그램 부분의 명령을 시퀀싱하는 최적화장치로서, 상기 프로그램중의 분기를 포함하지 않는 프로그램 부분에 대하여 복수의 유향 비주기 그래프를 생성하는 유향 비주기 그래프 생성수단과, 각 유향 비주기 그래프에서 해저드가 존재하는 친자간에 마크를 설정하는 마크설정수단과, 유향 비주기 그래프의 선두 명령중, 자손에 해저드를 포함하는 명령에 의하여 높은 우선도를 부여하고, 자손에 해저드를 포함하지 않는 명령에 의하여 낮은 우선도를 부여하는 우선도 부여수단과, 유향 비주기 그래프의 선두명령중 대상이 되는 명령이 지시되면 지시된 명령을 유향 비주기 그래프로부터 절단하는 절단수단과, 절단된 명령을 절단된 순위에 따라 연속으로 격납하는 명령 격납수단과, 나중에 참조되는 자원의 값을 파괴하는 명령을 각 유향 비주기 그래프의 선두로부터 검출하는 파괴 명령 검출수단과, 친의명령이 명령 격납수단의 열의 최후미에 존재하는 명령이며, 또 그 친과의 사이에마크가 설정되어 있는 명령을 각 유향 비주기 그래프의 선두로부터 검출하는 마크부착 명령 검출수단과, 파괴 명령 검출수단에 의하여 검출된 명령 및 마크부착 명령 검출수단에 의하여 검출된 명령의 절단을 금지하는 절단 금지수단과, 절단이 금지된 명령 이외의 선두명령으로서 부여된 우선도가 가장 높은 명령을 대상으로하여 지시하는 명령지시수단과, 파괴 명령 검출수단에 의하여 어떤 명령이 검출된 경우, 해당 명령 및 해당명령과 해당 자원에 관한 데이터 플로우를 가지는 모든 명령이 차지하는 구간에서 미사용인 자원을 선별하는 제 1 치환후보 선별수단과, 선별된 자원의 종별을 식별하는 식별수단과, 파괴 명령 검출수단에 의하여 검출된 명령 및 그 명령으로 정의된 자원에 관하여 데이터 플로우를 가지는 모든 명령을 해독하는 해독수단과, 식별수단의 식별결과와 해독수단의 해독결과를 조합시켜보고, 그 조합을 프로세서의 명령 세트와 대조함으로써 선별에 남은 자원으로부터 치환후보를 다시 선별하는 제 2 치환후보 선별수단과, 사용중인 자원의 값을 정의하고 있다고 파괴 명령 검출수단에 의하여 검출된 명령에서 값이 정의되는 자원과, 그 명령을 포함하는 유향 비주기 그래프의 해당 자원에 관한 데이터 플로우를 가지는 명령에서 사용되고 있는 자원을 판정된 치환후보로 고치는 개찬(改竄)수단과, 마크부착 명령 검출수단에 의하여 검출된 명령 및 파괴 명령 검출수단에 의하여 검출된 명령중 개찬수단에 의하여 자원이 고쳐지지 않은 이외의 것의 절단을 금지하는 절단 금지수단과, 절단이 금지된 선두명령중, 우선도가 가장 높은 그래프를 대상으로 하여 지시하는 명령지시수단과, 절단수단에 의하여 명령이 절단되면 절단된 나머지 명령열을 새로운 유향 비주기 그래프로하여 우선도 부여수단, 파괴 명령 검출수단, 마크부착 명령 검출수단, 절단 금지수단, 명령지시수단을 차례로 기동시키는 기동수단을 구비하는 구성」으로 할 수 있다.
또 상기 구성에 의하면, 우선도가 가장 높은 명령에서 정의되어 있는 레지스터가 사용중인 경우, 그 우선도가 가장 높은 명령에서 정의되는 레지스터와, 그 명령을 포함하는 DAG의 해당 레지스터와 데이터 플로우를 가지는 명령에서 사용되고 있는 해당 레지스터를 해당명령 및 해당명령과 해당자원에 관한 데이터 플로우를 가지는 모든 명령에서 미사용인 자원에 재기록하므로 실행순서 결정의 데드 엔드에 대처할 수 있고, 또 해저드 해소율을 향상시킬 수 있다.
본 발명의 제 3 목적은 「로드명령에 의하여 값이 정의되는 자원이 그 직후의 명령에서 ALU 연산 혹은 어드레스 연산의 오퍼랜드로서 참조되기 때문에 생기는 파이프라인 처리의 지연을 프로그램내의 명령을 시퀀싱함으로써 대처하는 최적화장치로서, 상기 프로그램중의 분기를 포함하지 않는 프로그램 부분에 대하여 자원에 값을 정의하는 명령을 친으로 하고, 그 자원의 값을 참조하는 명령을 자로 한 명령끼리의 친자관계의 계보를 나타내는 유향 비주기 그래프를 복수개 생성하는 유향비주기 그래프 생성수단과, 친의 명령에 의하여 값이 정의되는 자원이 자의 명령에서 ALU 연산 혹은 어드레스 연산의 오퍼랜드로서 참조되어 있는 배열을 각 유향 비주기 그래프로부터 검출하고, 각 유향 비주기 그래프의 그 배열의 친자간에 마크를 설정하는 해저드정보 설정수단과, 유향 비주기 그래프중의 마크된 명령간에 다른 유향 비주기 그래프의 명령으로서, 그 명령간에서 사용되고 있는 자원의 값을 파괴하지 않는 다른 유향 비주기 그래프의 명령을 삽입함으로써 상기 프로그램 부분의 명령을 시퀀싱하는 시퀀싱수단을 구비하는 구성」 에 의하여 달성된다.
로드명령에 의하여 정의되는 자원이 그 직후의 명령에서 ALU 연산 혹은 어드레스 연산의 오퍼랜드로서 사용되고 있으면, 그 명령간에서 유효한 자원의 값을 파괴하지 않는 다른 유향 비주기 그래프의 명령이 삽입되므로 명령의 시퀀싱에 의하여 파이프라인의 지연을 해소할 수 있다.
[ 실시예 ]
이후 본 발명의 실시예를 도면을 참조하면서 설명한다.
(제 1실시예)
제 5 도는 최적화장치의 내부구성을 나타낸 블록도이다. 최적화장치는 제 5 도에 나타내는 바와 같이 명령 입력부(11)와, 코드 분할부(12)와, 데이터 플로우 해석부(13)와, DAG 유지부(14)와, DAG 생성부(15)와, 리소스상태 유지부(16)와, 출력 리스트 버퍼(17)와, 스케쥴링부(18)와, 명령 출력부(19)로 구성된다.
명령 입력부(11)는 파일형태로 보존되어 있는 어셈블러 소스 코드를 읽어 넣고, 이것을 내부표현(이하 ' 중간언어 ' 라 칭한다)으로 변환한다.
코드 분할부(12)는 기계어 프로그램중의 점프명령을 검출하고, 점프명령에 의거하여 중간언어의 어셈블러 소스 코드를 기본블록으로 분할한다.
데이터 플로우 해석부(13)는 기본 블록의 출입구에 남아 있는 자원을 조사한다. 여기에서 기본블록의 입구에서 남아 있는 자원이란 선행하는 기본블록으로 정의되는 자원으로서, 그 설정값이 기본블록의 내부 혹은 그 기본블록의 후순위의 기본블록에서 참조되는 자원을 말하고, 출구에서 남아 있는 자원이란 그 설정값이 기본블록의 후순위의 기본블록에서 참조되는 자원을 말한다.
DAG 유지부(14)는 DAG를 유지한다. 본 실시예에서 DAG는 하나의 데이터 플로우를 가지는 명령열이 데이터 플로우의 방향을 나타내는 링크에 의하여 결합되어 있다. 본 실시예의 DAG의 일례와, 이 DAG의 데이터 구조의 포맷을 제 6A 도, 제 6B 도, 제 6C 도에 나타낸다. 제 6A 도에 나타내는 바와 같이 DAG는 기본 블록중의 각 명령에 붙여진 일련번호와, 그 일련번호의 명령내용과, 그 명령의 친의 명령노드가 되는 명령으로의 포인터와, 그 명령의 자의 명령노드가 되는 명령으로의 포인터와, 해당 친의 명령과의 링크에는 해저드가 존재하는지의 여부를 나타내는 존재여부 플래그에 의하여 각 명령노드간의 링크를 나타내고 있다.
여기에서 친의 명령노드란 어떤 명령노드에서 참조되고 있는 자원을 정의하고 있는 명령노드를 말하고, 자의 명령노드란 어떤 명령노드에서 정의되어 있는 자원을 참조하고 있는 명령노드를 말한다. 또한 하나의 명령노드에서 정의된 자원의 값이 후속하는 복수개의 명령노드에 의하여 값이 참조되는 경우, 그 자원의 값을 정의하는 명령노드는 그 자원의 값을 참조하는 복수의 명령노드의 친의 명령노드가 된다. 자손의 명령이란 유향 비주기 그래프 내를 친으로부터 자의 단일방향으로, 선두명령으로부터 정의 - 참조의 직접적 또는 간접적인 친자관계를 살필 수 있는 모든 명령을 말한다.
이에 대하여 선행하는 복수개의 명령노드에서 정의되는 값을 하나의 명령에서 참조하는 경우, 그 자원의 값을 정의하는 복수의 명령노드는 그 자원의 값을 참조하는 명령노드의 친의 명령노드가 된다.
명령 『ADD D0, D1』 과 같이 데이터 레지스터 D0, D1을 참조하고, 데이터 레지스터 D1을 정의하고 있는 경우, 명령 『ADD D0, D1』 의 친(親) 노드는 그 데이터 레지스터 D0을 정의하는 명령, 데이터 레지스터 D1을 정의하는 명령의 양자이며, 명령 『ADD D0, D1』의 자(子) 노드는 데이터 레지스터 D1을 참조하는 명령이 된다.
제 6B 도에 DAG 유지부(14)에 의하여 유지되는 DAG의 일례를 나타낸다. 이도면은 제 4 도에 나타낸 일례와 마찬가지로 『MOV 10, D0』 『MOV D0, A0』 『MOV.A0, mem』 『MOV 20, A0』 『MOV (A0), D1』 『ADD D1, D1』 이라는 명령열의 DAG를 나타내고 있다. 또 본 도면에서는 파선에 의하여 자원간의 데이터 플로우를 나타내고 있다. 본 도면의 DAG와 제 4 도의 DAG에서 다른 것은 DAG 유지부(14)에 유지되는 DAG가 정의 - 참조간의 링크만으로 결합되어 있고, 『MOV A0, mem』 ∼ 『MOV 20,A0』간이 참조 - 정의간의 링크로 결합되어 있지 않은 점이다. 이와 같이 DAG 유지부(14)에 의하여 유지되는 DAG는 참조 - 정의간의 링크로 결합되어 있지 않기 때문에 명령의 시퀀싱 자유도가 높아져 있는 것을 알 수 있다.
제 6C 도에 다른 DAG의 일례를 나타낸다. 본 도면은 기본 블록의 입구에서 레지스터 A0이 남아 있는 DAG를 나타내고 있다.
DAG 생성부(15)는 내부표현상태의 기계어 프로그램으로부터 정의 - 참조의 관계를 검출하고, 검출결과에 의거하여 정의 - 참조간의 링크에 의해서만 결합된 DAG를 생성하고 생성한 DAG를 DAG 유지부(14)에 유지시킨다.
제 7 도는 DAG 생성부(15)가 DAG를 생성하는 형태를 나타낸 흐름도이다. 제7 도의 흐름도에서, 스텝 g1에서 명령노드가 자원의 참조인지를 판정한다. 자원의 참조라면 스텝 g2에서 그 자원의 정의의 명령노드로부터 참조의 명령노드로 링크를 확장한다.
스텝 g1에서 No였던 경우, 혹은 스텝 g1에서 Yes이고 스텝 g2에서 링크가 확장된 경우, 스텝 g3에서 그 명령이 자원의 정의인가를 판정한다. 스텝 g3에서 Yes라면 스텝 g4로 이행하여 그 자원의 정의위치를 정의위치정보에 반영한다. 스텝 g1∼스텝 g4가 기본 블록중의 모든 명령에 대하여 반복되면 기계어 프로그램중의 명령노드는 정의 - 참조간의 링크에 의하여 결합되고, DAG가 생성된다(또 정의위치정보에 대해서는 본 발명의 주안점이 아니므로 설명을 생략한다).
이 흐름도에서 알 수 있는 바와 같이 어떤 자원에 값이 설정된 경우라도 그 값이 참조되지 않고 덧쓰기되는 경우에는 정의 - 참조간의 링크는 설정되지 않는다.
하나의 명령으로 정의된 자원의 값이 후속하는 복수개의 명령에 의하여 값이 참조되는 경우, 하나의 정의명령에 복수의 참조명령이 접속되는, 이른바 일 대 다(一對多)의 접속관계를 나타내는 DAG가 생성된다. 또 복수의 명령으로 정의된 자원의 값을 후속하는 하나의 명령이 참조하는 경우, 복수의 정의명령에 접속되는 하나의 참조명령이 접속되는 이른바 다(多) 대 일(一)의 접속관계를 나타내는 DAG가 생성된다.
또 DAG 생성부(15)는 상기 DAG의 링크를 생성한 후, ALU 연산, 어드레스연산을 실행하는 명령노드를 검출하고, 검출한 명령노드에서 참조되는 자원이 그 친명령노드에서 메모리로부터 읽어넣은 값에 의하여 정의되어 있는지를 판정한다. 정의되어 있는 경우, DAG 생성부(15)는 그 명령노드의 존재여부 플래그를 ON으로 하고, 링크에 해저드가 존재한다는 뜻을 남긴다.
또, 본 실시예에서는 DAG 생성부(15)는 ALU 연산, 어드레스연산을 실행하는 명령노드와 메모리로부터의 읽어넣기로 정의된 명령노드의 조합을 검출했지만 이것은 종래기술에서 소개한 5개의 스테이지를 가지는 파이프라인 처리를 대상으로 했기 때문이며, DAG 생성부(15)가 어떠한 명령노드의 조합을 검출하는지는 파이프라인의 구성에 따라 결정된다.
리소스상태 유지부(16)는 리소스상태 정보를 유지한다. 리소스상태 정보의 일례를 제 8A 도에 나타낸다. 리소스상태 정보에는 스케쥴링부(18)에 의하여 출력리스트 버퍼(17) 중에 격납된 명령열의 말미의 명령에서 각 자원이 사용중인지 미사용인지가 반영되어 있다. 여기에서 『사용중』 이란 어떤 명령으로 정의된 자원의 값이 후속 명령에서 참조되기 때문에 유효하다는 것을 말하고, 『미사용』 이란 후속의 명령에서 참조되지 않기 때문에 무효하다는 것을 말한다. 예를들면 어떤 명령으로 정의된 자원의 값이 후속하는 n개의 명령에서 참조되는 경우(참조명령이 n개 있는 경우), 1, 2, 3,....n-1개의 참조명령이 출력되는 동안은 그 자원은 『사용중』 이며, n개째의 참조명령이 출력되면 그 자원은 『미사용』 이 된다.
제 8A 도에서 횡방향의 항목에 레지스터 D0, 레지스터 D1, 레지스터 D2, 어드레스 레지스터 A0, 캐리 플래그라는 문자열이 배열되고, 레지스터 D0 아래의 란에 그 전단의 기본블록으로부터 레지스터 D0이 사용중인 것을 나타낸 『S』가 존재하고 있다. 레지스터 D1 아래의 란에 기본 블록에서 명령열 4로 해당 레지스터 D1이 정의되는 것을 나타낸 『4』가 존재하고 있다. 또 레지스터 D2의 아래에 『미사용』이 존재하고 있다.
또 레지스터 D0이 『S』로 설정되어 있는 것은 출력 리스트 버퍼(17)가 미격납의 상태라도 기본블록의 입구에서 그 자원이 남아 있기 때문이다. 또 레지스터 D1이 『4』 라고 설정되어 있는 것은 출력 리스트 버퍼(17)에 일련번호 4의 명령노드가 출력 리스트 버퍼(17)에 격납되어 있고, 일련번호 4의 명령노드에서 정의된 자원인 데이터 레지스터 D1이 이후의 명령에서 참조되기 때문에 그것에 대응하는 항목이 사용중으로 되어 있다.
또, 출력 리스트 버퍼(17)에 1 및 2의 명령이 들어간 시점의 리소스 상태와, 제 6 B 도에 나타낸 명령노드 1-2-3 사이의 DAG와의 대응을 제 8B 도에 나타낸다. 본 도면에서 명령노드 1-2 사이에서는 명령노드 1에서 레지스터 D0이 정의되어 있으므로 리소스상태 정보의 레지스터 D0의 항목이 명령노드 1에서 정의된 자원이 사용중이라는 뜻의 『1』에 설정된다. 명령노드 2-3 사이에서는 명령노드 2에 있어서 레지스터 A0이 정의되어 있으므로 리소스상태 정보의 레지스터 A0의 항목이 명령노드 2에서 정의된 자원이 사용중이라는 뜻의 『2』에 설정된다. 레지스터 D0에 대해서는 명령노드2에 의하여 사용이 종료되었기 때문에 레지스터 D0의 항목이 미사용으로 복귀되어 있다.
또 출력 리스트 버퍼(17)에 명령노드 5가 들어간 시점에서의 리소스상태와, 제 6 B 도에 나타낸 명령노드 4-5-6 사이의 DAG와의 대응을 제 8C 도에 나타낸다.
본 도면에서, 명령노드 5-6 사이에서는 명령노드 5에서 레지스터 D1이 정의되어 있으므로 리소스상태 정보의 레지스터 D1의 항목이 명령노드 5에서 정의된 자원이 사용중이라는 뜻의 『5』에 설정된다. 이와 같이 리소스상태는 명령간에서 어느 자원이 사용중인지, 미사용인지를 나타내고 있다.
출력 리스트 버퍼(17)는 스케쥴링부(18)에 의하여 출력된 명령이 격납되는 버퍼이며, 스케쥴링부(18)에 의하여 출력된 명령을 출력 리스트 버퍼(17)가 그 출력순으로 격납하는 것으로, 기계어 프로그램중의 명령이 새로운 순서가 된다.
스케쥴링부(18)는 DAG 생성부(15)가 생성한 DAG와, 리소스상태 유지부(16)가 유지하는 리소스상태 정보로부터 기계어 프로그램의 명령 스케쥴링을 실행하여 명령을 하나씩 선택하고, 선택된 명령노드를 차례로 출력 리스트 버퍼(17)에 출력한다.
명령 출력부(19)는 스케쥴링부(18)가 실행한 명령 스케쥴의 실행결과에 의거하여 어셈블러 소스 코드를 생성하고, 출력한다.
이어서 스케쥴링부(18)가 실행하는 명령 스케쥴링을 제 9 도∼제 12 도의 흐름도를 참조하면서 상세히 설명한다.
{1-0} 리소스 상태에 의거한 명령 출력
제 9 도는 스케쥴링부(18)의 처리과정의 메인 흐름도이다.
제 9 도의 스텝 s1에서는 스케쥴링부(18)는 각각의 DAG의 명령노드로부터 출력후보를 노미네이트하고, 노미네이트한 각 DAG의 명령노드를 출력후보로서 스텝 s2에 부여한다. 스텝 s2는 출력후보의 각 명령노드에 대하여 스텝 s3∼스텝 s10을 반복하도록 반복처리를 제어한다. 이 반복처리에서 스텝 s3에서는 스케쥴링부(18)는 해저드를 해소하기 위해 가장 적절하다고 판단되는 명령노드를 노미네이트된 출력후보의 명령노드로부터 결정한다.
스텝 s4에서는 리소스상태 정보를 참조하여 선택된 명령노드에서 정의되는 자원이 존재하지 않는 경우, 스텝 s5에서 출력 리스트 버퍼(17)에 선택된 명령노드를 출력한다.
또 스텝 s4에서 이 명령노드에서 정의되는 자원이 있어도 이것이 사용중인 자원을 정의하는 것이 아닌 경우, 스텝 s5에서 출력 리스트 버퍼(17)에 선택된 명령노드를 출력한다.
스텝 s4의 판정에서 선택된 명령노드에서 정의되는 자원이 사용중이면 스텝 s11에서 그 선택된 명령노드가 최후의 참조인지를 판정한다. 스텝 s11에서의 판정에서 Yes라면, 스텝 s5에서 명령노드를 출력 리스트 버퍼(17)에 출력하고, 그 명령노드를 출력 리스트 버퍼(17)의 명령열의 말미에 추가한다. 또, 스텝 s11에서의 판정처리는 구체적으로는 사용중인 자원을 정의한 명령노드의 그 자원에 관한 자의 명령노드가 하나를 제외하고 이미 출력되어 있고, 나머지 하나의 명령노드가 현재 선택된 명령노드인 것을 확인하는 것으로 실행된다. 또, 선택된 노드에서 정의되는 자원이 복수인 경우는 각각의 정의자원에 대하여 이 확인을 실행한다.
스텝 s5에서의 출력후, 스케쥴링부(18)는 스텝 s6에서 그 선택된 명령노드를 출력함으로써 기본 블록의 모든 명령노드를 출력했는지를 판정하고, 그렇지 않으면 스텝 s7에서 리소스상태 정보를 갱신한다.
한편, 스텝 s11에서 No라면 그 명령노드의 출력은 불가능하게 되기 때문에 스텝 s12에서 그 명령노드를 제외한다.
스텝 s6에서는 해당 명령노드를 출력함으로써 기본블록의 모든 명령의 출력을 마쳤는지를 판정한다. 스텝 s6에서 Yes이면 복귀값에 OK를 설정하여 리턴한다.
스텝 s6에서 No라면 출력 리스트 버퍼(17)의 말미에 추가된 명령노드에 대하여 스텝 s7에서 리소스상태의 갱신을 실행한다. 구체적으로는 선택된 명령노드에서 정의된 자원을 판정하고, 리소스 상태중, 그 자원의 항목을 미사용에서 사용중으로 변경한다. 또 선택된 명령이 어떤 자원의 최후의 참조인 경우에는 그 자원의 항목을 미사용으로 변경한다.
{1-1} 제 9 도의 흐름도에 나타내는 스텝 s8에서의 재귀호출에 의한 명령 출력
상기와 같이 스텝 s7에서 리소스상태의 갱신이 실행되면 스케쥴링부(18)는 스텝 s8에서 재귀호출을 실행한다. 그리고 이 스텝 s8에서의 재귀호출이 실행될 때마다 스케쥴링부(18)는 스텝 s1∼s8의 처리를 실행한다. 또 스텝 s1∼s8의 스텝 s4에서 OK가 되면 출력 리스트 버퍼(17)의 명령열의 말미에 선택된 명령노드를 추가한다. 바꾸어 말하면 재귀호출에 의하여 스텝 s1∼s8이 반복되는 것으로, 리소스상태에 상응하는 명령이 출력 리스트 버퍼(17)에 격납되게 된다.
이와 같이 스텝 s8에서의 재귀호출이 반복되는 것으로 출력 리스트 버퍼(17)중에 명령열이 형성되어 간다.
{1-2} 제 9 도의 흐름도에 나타내는 스텝 s2에서의 반복제어
제 9 도의 흐름도에 나타내는 스텝 s12에서 후보로부터 선택된 명령노드가 제외되면 스텝 s2로 이행한다. 스텝 s2는 출력후보의 각 명령노드에 대하여 스텝 s3∼스텝 s10의 반복처리를 제어한다. 이 반복에 의하여 스텝 s1에서 탐색된 출력 후보의 나머지 전부에 대하여 스텝 s3∼스텝 s10의 처리가 반복된다. 또 이 반복 도중에서 스텝 s4, 스텝 s11중 어느 것이 Yes로 된 경우, 이 반복처리는 도중에서 종료된다. 즉, 리소스상태에 상응하는 명령노드가 출력후보로부터 찾아내어질 때까지 스텝 s2에서의 반복제어는 실행된다.
{1-3} 후보의 노미네이트
제 9 도의 흐름도에 나타내는 스텝 s1에서의 탐색은 의존관계가 손상되지 않도록 출력후보가 되는 명령노드를 노미네이트해간다. 그 때문에 이 스텝 s1은 제10 도의 서브 흐름도로 구성되어 있다. 제 10 도는 제 9 도의 흐름도의 스텝 s1의 처리과정을 나타내는 흐름도이다. 본 흐름도에서 스텝 t1은 친으로의 링크가 존재하는지를 판정하고 있다. DAG 생성부(15)에서 생성된 DAG에서, 선두에 위치하는 명령노드가 선택된 경우, 선두의 명령노드에는 친으로의 링크가 없으므로 No가 되며, DAG중의 선두의 명령노드가 출력후보가 된다. 스텝 t2에서는 친명령노드가 모두 출력완료인지가 판정된다. 이 스텝 t2의 판정에서 Yes라면 명령노드가 출력후보가 된다. 이것은 DAG에서 친의 명령노드가 모두 출력되지 않는 한, 그 자손의 명령노드는 출력되지 않도록 하고 있기 때문이다. 이와 같이 스텝 t1, 스텝 t2가 차례로 실행되는 것으로 명령노드가 각 DAG로부터 차례로 출력후보로서 노미네이트 되어 간다.
예를들면 명령열의 배열이 『MOV 50, D0』 『MOV 20, D1』 『ADD D0, D1』 인 경우, 『ADD D0, D1』 의 출력은 『MOV 20, D1』 , 『MOV 50, D0』의 출력후가 아니면 의존관계가 손상되어 버린다. 그 때문에 본 흐름도의 스텝 t2에서는 『ADD D0, D1』 의 출력에서 『MOV 20, D1』 , 『MOV 50, D0』 이 출력된 것을 확인하고, 『MOV 20, D1』 , 『MOV 50, D0』이 출력된 후에 『ADD D0, D1』 의 출력이 실행되도록 하고 있다.
{1-4} 각 명령노드로의 우선순위 설정
제 9 도의 흐름도에 나타내는 스텝 s3은 해저드의 링크가 어디에 존재하는가에 의거하여 DAG의 명령노드가 우선하여 선택되도록 하고 있다. 제 11 도는 제 9 도의 흐름도의 스텝 s3의 처리과정을 나타내는 서브흐름도이다. 이 서브흐름도에서 스텝 p1에서, 각 출력후보의 명령노드에 대하여 친 노드와의 사이에 해저드가 존재하고, 또 그 친 노드가 직전에 출력 리스트 버퍼(17)에 격납되었는지를 판정하고 있고, 이 스텝 p1이 Yes라면 그 명령노드에 우선순위 3을 부여하고 있다. 스텝 p1에서 No라면 명령노드의 하류 명령노드(하류 명령노드란 해당 명령노드의 자명령 노드 이후의 명령노드)와의 링크에 해저드가 존재하는지가 판정되지만 , 이 스텝 p2에서 No인 경우, 그 명령노드에는 우선순위 2가 부여된다. 그리고 이 스텝 p2에서 Yes인 경우, 그 명령노드에는 우선순위 1이 부여된다. 이상의 스텝 p1∼스텝 p5의 스텝이 모든 출력후보에 대하여 반복되는 것으로 각 출력후보에 순서가 붙여진다. 스텝 p1∼스텝 p5의 루프처리가 종료한 후, 스텝 p6으로 이행하지만, 이 스텝 p6에서 우선순위가 가장 높은 명령노드를 선택한다. 이와 같이 선택된 명령노드에 대하여 상술한 스텝 s4∼스텝 s10의 처리가 실행된다.
{1-5} 리소스 상태의 갱신
제 12 도는 제 9 도의 흐름도의 스텝 s7의 처리과정을 나타내는 흐름도이다.
제 12 도의 흐름도에 나타낸 스텝 r1에서는 명령노드에서 자원의 참조가 있는지를 판정한다. 스텝 r1이 Yes인 경우, DAG를 참조하고, 그 자원의 참조가 최후의 참조인지를 판정한다. 또 이 판정은 구체적으로는 이 명령노드로의 DAG을 살피고, 친 노드를 참조하여 이 친 노드의 그 자원에 관한 자의 명령노드가 이미 출력되어 있는 것을 확인하는 것으로 실행된다. 만약 이미 출력되어 있다면 선택된 명령노드가 최후의 참조가 되기 때문에 스텝 r2는 Yes가 되고, 스텝 r3으로 이행한다. 선택된 명령노드에서 참조되어 있는 자원이 복수라면 그들중 어느 하나의 자원을 정의하고 있는 친명령을 검출한다. 그리고 검출된 각각의 친명령으로 정의되어 있는 자원이 몇가지의 자명령에서 다시 참조되어 있다면 그들의 자명령을 모두 검출한다. 검출한 결과, 그들이 출력완료인 것을 확인한다. 이상의 순서를, 선택된 명령노드에서 참조되고 있는 나머지 자원에 대하여 반복하고, 모든 참조에 대하여 출력완료인 것이 확인된 경우만 스텝 r2는 Yes가 된다.
명령 『ADD D0, D1』 과 같이 데이터 레지스터 D0, D1을 참조하고 있는 경우, 우선 데이터 레지스터 D0에 대하여 그 친명령을 검출하고, 그리고 검출된 각각의 친명령으로 정의되어 있는 자원이 몇몇 자명령에서 다시 참조되고 있다면 그들의 자명령을 모두 검출한다. 검출한 결과, 그들이 출력완료인 것을 확인한다. 계속해서 데이터 레지스터 D1에 대하여 그 친명령을 검출하고, 그리고 검출된 각각의 친명령으로 정의되어 있는 자원이 몇 개의 자명령에서 다시 참조되고 있다면 그들의 자명령을 모두 검출한다. 검출한 결과, 그들이 출력완료된 것을 확인한다.
스텝 r3에서는 리소스상태 정보중 최후의 참조인 것이 판정된 자원의 항목을 미사용으로 변경한다. 변경후, 스텝 r3에서 스텝 r4로 이행한다. 스텝 r4에서는 선택된 명령노드에 자원의 정의가 존재하는지를 판정한다. 이 스텝 r4에서 Yes가 되면 스텝 r5로 이행하고, 선택된 명령노드의 자의 명령노드에 정의된 자원의 값을 참조하는 명령노드가 존재하는지의 여부를 판정한다. 스텝 r5에서 Yes라고 판정되었다면 리소스상태의 그 자원의 항목을 사용중으로 변경한다. 스텝 r5에서 No라고 판정되었다면 그 정의에서 설정된 값은 의미가 없는 것으로서 리소스상태의 그 자원의 항목을 미사용으로 변경한다.
{1-6} 백 트랙
제 9 도의 흐름도에 나타내는 스텝 s2에서의 반복처리에서 모든 후보에 대하여 리소스상태를 판정했지만, 어느 후보도 출력 리스트 버퍼(17)에 출력될 수 없었던 경우, 스텝 s2에서 스텝 s13으로 이행하고, 복귀값에 NG를 설정하여 리턴처리를 실행한다. 스텝 s13에서 리턴하면 스텝 s8의 다음의 스텝, 즉 처리는 스텝 s9로 이행한다. 스텝 s9에서는 복귀값의 판정이 실행되지만, 스텝 s13에서 복귀값이 NG에 설정되면 스텝 s9에서의 판정결과가 NG가 되고, 처리는 스텝 s10으로 이행한다. 스텝 s10에서는 출력후보의 내용이 취소되어 상태복귀가 이루어진다. 이 복귀에 의하여 하나 전의 재귀호출에 의하여 스텝 s1에서 노미네이트된 출력후보에 대하여 스텝 s2의 루프제어가 실행된다.
{동작예 1} 제 6B 도의 DAG를 처리대상으로 한 경우
제 13 도는 스케쥴링부(18)에 의하여 명령열의 순서가 결정되는 형태를 나타낸 도면이다. 본 도면은 제 6B 도에 나타낸 DAG중의 명령노드가 시퀀싱되는 형태를 나타내고 있다. 본 도면에서는 횡배열에서, 리소스상태를 나타내고 있다. 본 도면에서는 이 횡배열에 『D0 D1 A0』 라는 레지스터를 표기하고 있고, 메모리, 플래그 등은 표기하고 있지 않지만 이것은 설명의 편의상 레지스터만을 설명의 대상으로 하고 있기 때문이다.
또 본 도면의 『후보탐색』란은 제 6B 도의 DAG를 처리대상으로 한 경우, 스텝 s1의 처리에서 탐색되는 명령노드의 번호를 나타내고 있다. 또 『명령선별』란은 스텝 s3의 처리에서 선택되는 명령노드의 번호를 나타내고 있다. 『리소스판정』은 스텝 s4에서의 판정이 어떠한 리소스상태에서 실행되는지를 나타내고 있고, 『출력버퍼』는 출력 리스트 버퍼(17)에 격납되는 명령노드의 순서를 나타내고 있다. 『리소스갱신』은 출력 리스트 버퍼(17)로의 명령노드의 출력에 의하여 리소스상태가 어떻게 갱신되는지를 나타내고 있다. 그 아래의 『재귀호출』은 스텝 s8에서 몇번째의 재귀호출이 실행되었는지를 나타내고 있다. 이후, 본 도면과 제 9 도∼제 12 도의 흐름도를 참조하면서 상기 동작예에 대하여 설명한다. 또 이후의 설명은 제 13 도의 좌단에 붙여진 (a-1)(a-2)(a-3)(a-4)(b-1)....으로 경우를 나누어 설명한다.
(a-1. 후보탐색 )
DAG 탐색부(15)에 의하여 생성된 DAG 유지부(14)에 유지되어 있는 제 6B 도에 나타낸 DAG에 대하여 스케쥴링부(18)가 기동된다. 제 6B 도에 나타낸 명령노드 1, 4는 선두의 명령노드이며 친으로의 링크가 없으므로 (제 10 도의 흐름도에 나타낸 스텝 t1) 스케쥴링부(18)에 의하여 DAG중의 선두 명령노드가 출력후보가 된다(스텝 t3).
(a-2 . 명령선별)
명령노드 4의 하류의 명령노드에는 해저드가 존재하므로 스케쥴링부(18)에 의하여 우선순위 1이 부여된다 (제 11 도의 흐름도에 나타낸 스텝 p5). 명령노드1의 하류의 명령노드에는 해저드가 존재하지 않으므로 우선순위 2가 부여된다(스텝p4). 그 결과, 우선순위가 가장 높은 우선순위 1의 명령노드(4)가 출력후보에 선택된다(스텝 p6).
(a-3, a-4. 리소스상태 판정, 버퍼로의 출력, 리소스상태 갱신)
스케쥴링부(18)는 리소스상태의 판정을 실행한다(제 9 도의 흐름도에 나타낸 스텝 s4). 이 상태에서는 기본블록의 입구에서 남아 있는 자원은 존재하지 않고 리소스상태가 모두 미사용이므로 스케쥴링부(18)는 명령노드 4를 출력 리스트 버퍼(17)에 출력한다(스텝 s5). 출력후 모든 명령노드를 출력하여 종료하고 있지 않으므로 (스텝 s6), 명령노드 4에서 정의되는 레지스터 A0을 사용중에 설정하고(스텝 s7), 설정후 재귀호출을 실행한다(스텝 s8).
(b-1. 후보탐색)
명령노드 1은 선두의 명령노드이며, 친으로의 링크가 없으므로(제 10 도의 흐름도에 나타낸 스텝 t1) 스케쥴링부(18)에 의하여 출력후보가 된다(스텝 t1, t3). 친명령노드 4가 출력완료이므로 (스텝 t2) 명령노드 5가 출력후보가 된다(스텝 t3).
(b-2. 명령선별)
명령노드 5의 하류의 명령노드에는 해저드가 존재하므로 스케쥴링부(18)에 의하여 우선순위 1이 부여된다 (제 11 도의 흐름도에 나타낸 스텝 p5). 명령노드 1의 하류의 명령노드에는 해저드가 존재하지 않으므로 우선순위 2가 부여된다(스텝 p4). 그 결과, 우선순위가 가장 높은 명령노드 5가 출력후보에 선택된다(스텝 p6).
(b-3, b-4. 리소스상태 판정, 버퍼로의 출력, 리소스상태 갱신)
스케쥴링부(18)는 리소스상태의 판정을 실행한다(제 9 도의 흐름도에 나타낸 스텝 s4). 리소스상태의 판정에 의하면 명령노드 5에서 정의되는 레지스터 D1은 미사용이므로 명령노드 5를 출력 리스트 버퍼(17)에 출력한다(스텝 s5). 출력후 모든 명령노드를 출력하여 종료하고 있지 않으므로 (스텝 s6), 최후의 참조인 레지스터 A0을 미사용으로 되돌리고 명령노드 5에서 정의되는 레지스터 D1을 사용중으로 설정하고(스텝 s7), 설정후 재귀호출을 실행한다(스텝 s8).
(c-1. 후보탐색)
명령노드 1은 선두의 명령노드이며, 친으로의 링크가 없으므로 No가 되고, DAG중의 선두 명령노드가 출력후보가 된다 (제 10 도의 흐름도에 나타낸 스텝 t1, t3). 친명령노드 5가 출력완료이므로 명령노드 6이 출력후보가 된다 (스텝 t2, t3).
(c-2. 명령선별)
출력 리스트 버퍼(17)에 직전에 출력된 명령노드 5는 명령노드 6의 친명령노드이며, 친명령 노드와의 사이에 해저드가 존재하므로 명령노드 6에는 스케쥴링부(18)에 의하여 우선순위 3이 주어진다(제 11 도의 흐름도에 나타낸 스텝 p3). 명령노드 1에는 해저드가 존재하지 않고, 그 하류의 명령노드에도 해저드가 존재하지 않으므로 스케쥴링부(18)에 의하여 우선순위 2가 주어진다(스텝 p4). 그 결과 우선순위가 가장 높은 명령노드 1이 선택된다(스텝 p6).
(c-3, c-4. 리소스상태 판정, 버퍼로의 출력, 리소스상태 갱신).
리소스상태의 판정을 실행한다(제 9 도의 흐름도에 나타낸 스텝 S4). 리소스상태의 판정에 의하면 명령노드 1에서 정의되는 레지스터 D0은 리소스상태가 미사용이므로 스케쥴링부(18)는 명령노드 1을 출력 리스트 버퍼(17)에 출력한다(스텝 S5). 모든 명령노드의 출력이 종료되어 있지 않으므로(스텝 S6), 명령노드 1에서 정의되는 레지스터 D0을 사용중에 설정하고(스텝 S7), 설정후 재귀호출을 실행한다(스텝 S8).
(d-1. 후보탐색)
친명령노드 1, 5가 출력완료이므로 스케쥴링부(18)에 의하여 명령노드 2, 6이 출력후보가 된다(제 10 도의 흐름도에 나타낸 스텝 t2, t3).
(d-2 . 명령선별)
명령노드 2에는 직전에 출력된 명령노드와의 사이에 해저드가 존재하지 않고, 스케쥴링부(18)에 의하여 그 하류의 명령노드에도 해저드가 존재하지 않으므로 우선순위 2가 주어진다(스텝 p4). 한편 명령노드 6도 직전에 출력된 명령과의 사이에 해저드가 존재하지 않고 그 하류의 명령노드에도 해저드가 존재하지 않으므로 스케쥴링부(18)에 의하여 우선순위 2가 주어진다(스텝 p4). 그 결과, 우선순위가 가장 높은 명령노드의 어느 것인가가, 여기에서는 명령노드 6이 선택된다(스텝 p6).
(d-3, d-4. 리소스상태 판정, 버퍼로의 출력, 리소스상태 갱신)
리소스상태의 판정을 실행한다(제 9 도의 흐름도에 나타낸 스텝 S4). 리소스상태의 판정에 의하면 명령노드 6에서 정의되는 레지스터 D1은 명령노드 5에서 정의되고 사용중이지만, 명령노드 6은 명령노드 5에서 정의된 레지스터 D1의 최후의 참조이므로(스텝 S11), 스케쥴링부(18)는 명령노드 6을 출력 리스트 버퍼(17)에 출력한다(스텝 S5). 모든 명령노드를 출력하여 종료하고 있지 않으므로(스텝 S6), 명령노드 6에서 정의되는 레지스터 D1을 사용중으로 설정하고(스텝 S7), 스케쥴링부(18)는 재귀호출을 실행한다(스텝 S8).
(e-1. 후보탐색 )
친명령노드 1이 출력완료이므로 스케쥴링부(18)에 의하여 명령노드 2가 출력후보가 된다(제 10 도의 흐름도에 나타낸 스텝 t2, t3).
(e-2 . 명령선별)
명령노드 2에는 해저드가 존재하지 않고, 그 하류의 명령노드에도 해저드가 존재하지 않으므로 스케쥴링부(18)에 의하여 우선순위 2가 주어진다(스텝 p4). 그외에는 출력후보가 존재하지 않으므로 명령노드 2가 선별된다.
(e-3, e-4. 리소스상태 판정, 버퍼로의 출력, 리소스상태 갱신)
스케쥴링부(18)는 리소스상태의 판정을 실행한다(제 9 도의 흐름도에 나타낸 스텝 S4). 리소스상태의 판정에 의하면 명령노드 2에서 정의되는 레지스터 A0은 미사용이므로 스케쥴링부(18)는 명령노드 2를 출력 리스트 버퍼(17)에 출력한다(스텝 S5). 모든 명령노드를 출력하여 종료하고 있지 않으므로(스텝 S6), 스케쥴링부(18)는 최후의 참조인 레지스터 D0을 미사용으로 되돌리고, 명령노드 2에서 정의되는 레지스터 A0을 사용중으로 설정하고(스텝 S7), 설정후 재귀호출을 실행한다(스텝 S8).
(f-1. 후보탐색 )
친명령노드 2가 출력완료이므로 명령노드 3이 출력후보가 된다(스텝 t2, t3).
(f-2. 명령선별)
명령노드 3에는 해저드가 존재하지 않고 그 하류의 명령노드에도 해저드가 존재하지 않으므로 스케쥴링부(18)에 의하여 우선순위 2가 주어진다(제 1 도의 흐름도에 나타낸 스텝 p4). 그 외에는 출력후보가 존재하지 않으므로 스케쥴링부(18)에 의하여 명령노드 3이 선별된다.
(f-3, f-4. 리소스상태 판정, 버퍼로의 출력, 리소스상태 갱신)
리소스상태의 판정을 실행한다(제 9 도의 흐름도에 나타낸 스텝 S4). 리소스상태의 판정에 의하면 명령노드 3에서 정의되는 자원 mem은 미사용이므로 스케쥴 링부(18)는 명령노드 3을 출력 리스트 버퍼(17)에 출력한다(스텝 S5) (설명의 편의상 mem은 생략). 명령노드 3을 출력함으로써 기본블록의 모든 명령노드를 출력한 것으로 되므로 복귀한다(스텝 S6, S20).
이상과 같이 처리가 실행되는 것으로, 출력 리스트 버퍼(17)내의 명령열은4-5-1-6-2-3의 순서가 되고 명령열은 『MOV 10, D0』 『MOV D0, A0』 『MOV A0, mem』『MOV 20, A0』{MOV (A0), D1} {ADD D1, D1}의 순서에서 『MOV 20, A0』{MOV (A0), D1} 『MOV 10, D0』 {ADD D1, D1} 『MOV D0, A0』『MOV A0, mem』으로 시퀀싱된다({}사이의 명령은 연속으로 배열되어 있고, 해저드 요인이었던 명령이다. 이것이 본 실시예의 시퀀싱에 의하여 불연속으로 되어 있는 것을 알 수 있다).
{동작예 2} 제 6C 도의 DAG를 처리대상으로 한 경우
제 14 도는 스케쥴링부(18)에 의하여 백 트랙(후복귀)이 실행되는 형태를 나타낸 도면이다.
본 도면은 제 6C 도에 나타낸 DAG중의 명령노드가 시퀀싱되는 형태를 나타내고 있다.
본 도면에서는 힁배열에서, 리소스상태를 나타내고 있다. 본 도면에서는 이횡배열에 『D0 D1 D2 A0』 라는 데이터 레지스터, 어드레스 레지스터를 표기하고 있고, 메모리, 플래그 등은 표기하고 있지 않지만, 이것은 설명의 편의상 데이터 레지스터, 어드레스 레지스터만을 설명의 대상으로 하고 있기 때문이다.
본 도면의 『후보탐색』란은 제 6C 도의 DAG를 처리대상으로 한 경우, 스텝 s1의 처리에서 탐색되는 명령노드의 번호를 나타내고 있다. 또 『명령선별』 란은 스텝 s3의 처리에서 선택되는 명령노드의 번호를 나타내고 있다. 『리소스판정』은 스텝 s4에서의 판정이 어떠한 리소스상태에서 실행되는가를 나타내고 있고,『출력버퍼』는 출력 리스트 버퍼(17)에 격납되는 명령노드의 순서를 나타내고 있다. 『리소스갱신』 은 출력 리스트 버퍼(17)로의 명령노드의 출력에 의하여 리소스상태가 어떻게 갱신되는지를 나타내고 있다. 그 아래의 『재귀호출』은 스텝 s8에서 몇번째의 재귀호출이 실행되었는지를 레벨수로 나타내고 있다. 또 제 6C 도의 일례에서는 레지스터 A0의 설정값이 기본블록의 입구에서 남아 있으므로 최초의 리소스상태의 레지스터A0의 항목에 사용중을 나타내는 『S』 가 설정되어 있다.
(s-1. 후보탐색 )
DAG 생성부(15)에 의하여 생성되고, DAG 유지부(14)에 유지되어 있는 제 6C도에 나타낸 DAG에 대하여 스케쥴링부(18)가 기동된다, 제 6C 도에 나타낸 명령노드4는 선두의 명령노드이며, 친으로의 링크가 없으므로(제 10 도의 흐름도에 나타낸 스텝 t1), 스케쥴링부(18)에 의하여 명령노드 4가 출력후보가 된다(스텝 t3). 한편, 명령노드 1은 친(기본 블록의 시작)으로 링크가 있지만 스케쥴링부(18)는 이것을 이미 출력완료라고 간주하여 출력후보로 한다(스텝 t2, t3).
(s-2. 명령선별)
명령노드 4의 하류의 명령노드에는 해저드가 존재하므로 스케쥴링부(18)에 의하여 우선순위 1이 주어진다(제 11 도의 흐름도에 나타낸 스텝 p5). 명령노드 1의 하류의 명령노드에는 해저드가 존재하지 않으므로 스케쥴링부(18)에 의하여 우선순위 2가 주어진다(스텝 p4). 그 결과, 우선순위가 가장 높은 명령노드 4가 출력후보에 선택된다(스텝 p6).
(s-4. 리소스상태 판정, 버퍼로의 출력, 리소스상태 갱신)
스케쥴링부(18)는 리소스상태의 판정을 실행한다(제 9 도의 흐름도에 나타낸 스텝 S4). 리소스상태의 판정에 의하면 명령노드 4에서 정의되는 자원은 미사용이므로 명령노드 4를 출력 리스트 버퍼(17)에 출력한다(스텝 S5). 출력후 명령노드 4는 최후의 명령노드를 출력하여 종료하고 있지 않으므로 (스텝 S6), 명령노드 4에서 정의되는 레지스터 D0을 사용중에 설정하고(스텝 S7), 스케쥴링부(18)는 재귀호출을 실행한다(스텝 S8).
(t-1. 후보탐색 )
명령노드 1은 선두의 명령노드이며, 그 친명령노드가 출력완료로 간주되므로 출력후보가 된다(제 10 도의 흐름도에 나타낸 스텝 t2, t3). 한편, 친명령노드 4가 출력완료이므로(스텝 t2), 명령노드 5가 출력후보가 된다(스텝 t2, t3).
(t -2. 명령선별)
명령노드 5의 하류의 명령노드에는 해저드가 존재하므로 스케쥴링부(18)에 의하여 우선순위 1이 주어진다(제 11 도의 흐름도에 나타낸 스텝 p5). 명령노드 1의 하류의 명령노드에는 스케쥴링부(18)에 의하여 해저드가 존재하지 않으므로 우선순위 2가 주어진다(스텝 p4). 그 결과 우선순위가 가장 높은 명령노드 5가 선택된다(스텝 p6).
(t-3, t-4. 리소스상태 판정, 버퍼로의 출력, 리소스상태 갱신)
스케쥴링부(18)는 리소스상태의 판정을 실행한다(제 9 도의 흐름도에 나타낸 스텝 s4). 리소스상태의 판정에 의하면 명령노드 5에서 정의되는 레지스터 A0은 사용중이며, 또『S』로 정의된 레지스터 A0의 최후의 참조는 아니므로 출력불가능하게 된다(스텝 S4, S11, S12). 스텝 S1에서는 명령노드 5 외에 명령노드 1이 출력후보로서 노미네이트되어 있고, 스텝 S2에 의하여 명령노드 1이 선택되지만, 명령노드 1에서 정의되는 레지스터 D0은 사용중『S』이며, 또 최후의 참조도 아니므로 (스텝 S4, S11, S12), 명령노드 1은 출력후보로부터 제외되어 스텝 S13으로 이행하고, 복귀값 NG에서 리턴한다(스텝 S13). 리턴하면 출력 리스트 버퍼(17)에 명령노드 4가 격납되고, 명령노드 1이 출력후보로서 남아있는 상태로 복귀한다. 이후, 스텝 S10에서 출력 리스트 버퍼(17)의 내용이 취소되어 스케쥴링부(18)에 의하여 명령노드 4가 소거되고 스텝 S2로 되돌아간다.
(u-2. 명령선별)
명령노드 1에는 해저드가 존재하지 않고, 그 하류의 명령노드에도 해저드가 존재하지 않으므로 스케쥴링부(18)에 의하여 우선순위 2가 주어진다(제 11 도의 흐름도에 나타낸 스텝 p4). 이외에 후보가 없으므로 명령노드 1이 선택된다(스텝 p6).
(u-3. 리소스상태 판정, 버퍼로의 출력, 리소스상태 갱신)
리소스상태의 판정을 실행한다(제 9 도의 흐름도에 나타낸 스텝 S4). 리소스상태의 판정에 의하면 명령노드 1에서 정의되는 레지스터 D0은 미사용이므로 스케쥴링부(18)는 명령노드 1을 출력 리스트 버퍼(17)에 출력한다(스텝 S5). 출력후명령노드 1은 모든 명령노드를 출력하여 종료하고 있지 않으므로(스텝 S6), 스케쥴링부(18)는 명령노드 1에서 정의되는 레지스터 D0을 사용중으로 설정하고(스텝 S7), 최후의 참조인 레지스터 A0을 미사용으로 되돌리고, 설정후 재귀호출을 실행한다(스텝 S8).
(v-1. 후보탐색)
친명령노드 1이 출력완료이므로 스케쥴링부(18)에 의하여 명령노드 2, 4가 출력후보가 된다(제 10 도의 흐름도에 나타낸 스텝 t1, t2, t3).
(v-2 . 명령선별)
명령노드 2에는 해저드가 존재하지 않고, 그 하류의 명령노드에도 해저드가 존재하지 않으므로 스케쥴링부(18)에 의하여 우선순위 2가 주어진다(제 11 도의 흐름도에 나타낸 스텝 p4). 한편, 명령노드 4에는 해저드가 존재하므로 스케쥴링부(18)에 의하여 우선순위 1이 주어진다(스텝 p5). 그 결과, 우선순위가 가장 높은 명령노드 4가 선택된다(스텝 p6).
(v-3, v-4. 리소스상태 판정, 버퍼로의 출력, 리소스상태 갱신)
리소스상태의 판정을 실행한다(제 9 도의 흐름도에 나타낸 스텝 S4). 리소스상태의 판정에 의하면 명령노드 4에서는 레지스터 D0이 정의되므로 출력불가가 된다. 명령노드 4는 명령노드 1에서 정의된 레지스터 D0의 최후의 참조가 아니므로(스텝 S11), 스케쥴링부(18)는 명령노드 4를 출력후보에서 제거하고(스텝 S12), 스텝 2로 되돌아간다.
명령노드 4 외에는 출력후보로서 명령노드 2가 남아 있다. 이 상태에서 스케쥴링부(18)는 리소스상태의 판정을 실행한다(제 9 도의 흐름도에 나타낸 스텝 S4). 리소스상태의 판정에 의하면 명령노드 2에서는 레지스터 D2가 정의되므로 리소스상태의 판정은 가(可)가 되고, 스케쥴링부(18)는 명령노드 2를 출력 리스트 버퍼(17)에 출력한다(스텝 s5). 명령노드 2는 모든 명령노드를 출력하여 종료하고 있지 않으므로(스텝 S6), 최후의 참조인 레지스터 D0을 미사용으로 되돌리고, 명령노드 2에서 정의되는 레지스터 D2를 사용중으로 설정하고(스텝 S7), 설정후 재귀호출을 실행한다(스텝 S8).
(w-2. 명령선별)
명령노드 3의 링크에는 해저드가 존재하지 않고, 그 하류의 명령노드에도 해저드가 존재하지 않으므로 스케쥴링부(18)에 의하여 우선순위 2가 주어진다(제 11도의 흐름도에 나타낸 스텝 p4). 한편, 명령노드 4의 하류의 명령노드에는 해저드가 존재하므로 우선순위 1이 주어진다(스텝 p5).
이상의 처리가 반복되고 제 6C 도에 나타낸 명령은 1-2-4-5-6-3-7의 순으로 출력 리스트 버퍼(17)에 격납된다.
이상과 같이 본 실시예에 의하면 정의 - 참조간의 링크에 의해서만 결합된 DAG와 버퍼 말미의 명령에서의 각 자원의 참조상태를 이용하여 의존관계를 보존하고, 이것이 손상되지 않도록 시퀀싱을 실행하므로 시퀀싱의 자유도를 높일 수 있다. 이에 의하여 해저드 해소가 보다 확실하게 실행되고 파이프라인 처리에 적절한 기계어 프로그램을 생성할 수 있다.
(제 2 실시예)
제 2 실시예에서는 제 9 도의 흐름도에 나타낸 스텝 s11의 판정에서, 리소스상태에 의하여 후보명령노드의 출력이 불가능하며, 또 최후의 참조가 아니라고 판정된 경우, 그 출력후보내의 자원을 치환하는 것으로, 그 명령노드의 출력이 실행되도록 하고 있다. 제 15 도는 제 2 실시예에서 제 9 도의 흐름도에 추가되는 일련의 스텝을 나타내는 도면이다.
제 2 실시예에서는 제 15 도에 나타내는 바와 같이 스텝 s11, 스텝 s12의 스텝간에 스텝 s14의 판정 스텝이 놓여지고, 이 스텝 s14에서의 판정에서 Yes가 된 경우, 명령노드의 자원을 다른 자원으로 치환하여 그 명령노드가 출력되도록 하고 있다.
제 15 도의 흐름도에 나타내는 스텝 s14에서는 명령중의 자원(치환대상 자원이라 부른다)을 다른 자원으로 치환하는 것이 가능한가를 판정한다. 스텝 s15에서는 스텝 s14에서의 치환이 가능하다고 판정된 경우, 그 명령노드의 자원을 가능하다고 판정된 다른 자원으로 치환한다
스텝 s16에서는 명령노드에 대한 DAG를 참조하고 그 명령노드에서 정의되는 치환대상 자원에 대한 데이터 플로우에 관하여 자손 관계에 있는 명령노드에서 이용되고 있는 치환대상 자원을 치환가능하다고 판정된 다른 자원으로 치환한다.
계속해서 스텝 s14에서 판정되는『치환가능한 자원』의 요건에 대하여 설명한다. 『치환가능한 자원』에는 이하의 요건 ①②③이 요구된다.
①치환판정시에 미사용 자원일 것.
②자원에 대하여 데이터 플로우를 가지는 구간에서 미사용인 자원일 것. 여기에서 데이터 플로우를 가지는 구간이란 자원에 값을 정의하는 명령과, 정의된 자원의 값을 참조하는 모든 명령이 차지하는 구간에 그 자원의 값을 재정의하는 명령과, 재정의된 자원의 값을 참조하는 모든 명령이 차지하는 구간을 합한 구간이다. 또 재정의하는 명령이란 이미 정의된 자원의 값에 의거한 값이며, 그 자원을 정의하는 명령이다.
(4) MOV memory 2, D0
(5) ADD D0, D0
(6) MOV 1, D1
(7) ADD D1, D0
(8) MOV D0, D2
예를들면 이상의 (4)∼(8)의 명령열에 있어서, 『(4) MOV memory 2, D0』에서 정의되는 데이터 레지스터 D0을 치환하도록 하는 경우, 같은 데이터 레지스터끼리인 데이터 레지스터 D1, 데이터 레지스터 D2로 치환하는 것이 바람직하다. 그러나 이 데이터 레지스터 D0은 『(7)ADD D1, D0』에서 데이터 레지스터 D1과 데이터 플로우를 가지며, 데이터 레지스터 D2는 『(8) MOV D0, D2』와 데이터 플로우를 가지고 있다. 이 데이터 레지스터 D1, 데이터 레지스터 D2와 같이 DAG 이후의 명령노드에서 데이터 플로우가 존재하는 경우는 이들에 대한 치환은 피해야한다.
③치환된 후의 명령이 실행가능할 것.
『(9) MOV (A0), D0』의 어드레스 레지스터 A0을 따로 치환하고 싶은 경우에데이터 레지스터 D1, 어드레스 레지스터 A1이 미사용이라고 판정되었다고 한다. 이 상황에서 데이터 레지스터 A0의 치환후보에 데이터 레지스터 D1을 선택했다고한다. 여기에서 주의할 점은 『(9) MOV (A0), D0』 은 간접참조명령이며, 어드레스레지스터 A0의 유지값으로 지시된 메모리 어드레스의 내용을 데이터 레지스터 D0에 전송한다는 기능이다. 어드레스 레지스터에는 그 유지값으로 메모리의 억세스처를 지시할 수 있는 기능이 할당되어 있기 때문에 『(9) MOV (A0), D0』에서 간접참조가 실행된다. 이에 대하여 치환 후보로서 선택된 데이터 레지스터 D1은 범용 레지스터이기 때문에 이 치환후보를 채용하여 간접참조명령 『(9) MOV (D1), D0』라는 코드를 생성해도 프로세서는 이것을 실행할 수는 없다.
『(10)mul D1, D0』의 데이터 레지스터 D0을 따로 치환하고 싶은 경우에, 어드레스 레지스터 A0이 미사용이라고 판정되었다고 한다. 이 상황에서 데이터 레지스터 D0의 치환후보에 어드레스 레지스터 A0을 선택했다고 한다. 여기에서 주의할 점은 『(10) mul D1, D0』은 승산명령이며, 데이터 레지스터 D1, D0의 유지값을 곱하여 결과를 데이터 레지스터 D0에 전송한다는 기능이다. 데이터 레지스터에는 그 유지값으로 ALU연산할 수 있다는 기능이 할당되어 있기 때문에 『mul D1, D0』에서 승산연산은 실행된다. 이에 대하여 치환후보로서 선택된 어드레스 레지스터 A0은 메모리 억세스용으로 설치되어 있기 때문에 이 치환후보를 채용하여 간접참조명령『(9)mul A0, D0』라는 코드를 생성해도 프로세서는 이것을 실행할 수는 없다.
이와 같이 프로세서를 실행할 수 없는 명령이 생성되는 것을 미리 방지하기 위하여 ①②의 선별에 남은 미사용 자원에 이하의 순서를 적용한다.
우선 첫째로 ①②의 선별로 남은 미사용 자원의 종별을 식별한다. 즉, 그 자원이 데이터 레지스터인지, 어드레스 레지스터인지 메모리인지를 식별한다. 이와 같이 식별한 후, 둘째로 선택된 명령노드 및 해당 명령노드와 해당 치환대상자원에 관한 데이터 플로우를 가지는 모든 명령노드를 해독하여 그들의 명령노드가 간접참조명령인지, 승산(곱하기 )명령인지 , 제산(나누기)명령인지를 판정한다.
상기 식별결과와 해독결과의 조합을 목표마진의 프로세서 명령세트와 대조함으로써 상기 치환의 가부를 검증한다. 상기 예에서 치환이 부(否)라고 판정이 되는 조합은 미사용 자원의 종별이 데이터 레지스터이며, 또 간접 참조명령이 해독된 경우이다. 미사용 자원의 종별이 어드레스 레지스터이며, 또 승제산명령이라고 해독된 경우이다.
①②의 선별에 남은 모든 자원에 대하여 이와 같은 검증을 반복하고 선별에 남은 명령을 치환후보로 한다.
제 2 실시예에 의하여 해저드가 해소되는 형태를 도면을 참조하면서 설명한다.
제 16 도는 하나의 자원이 시종 사용중이며, 시퀀싱이 실행되지 않는 DAG를나타낸 도면이다.
제 16 도에서, 『MOV mem_a, D0』 이며, 메모리로부터 읽어낸 값에 의하여 정의된 레지스터 D0이 다음의 『ADD 10, D0』 에서 참조되기 때문에 (1) - (2) 사이가 해저드가 되어 있는 것을 알 수 있다. 또 『MOV mem_b, D0』 이고 메모리로부터 읽어내어진 값에 의하여 정의된 레지스터 D0이 다음의 『ADD 20, D0』 에서 참조되기 때문에 (4) - (5) 사이가 해저드 되어 있는 것을 알 수 있다.
이 일례에 대하여 정의 - 참조간의 링크에서만 DAG를 생성하면 (1) - (2) - (3) 사이가 하나의 DAG에 연쇄하고, (4) - (5) - (6) 사이에서 DAG가 생성한다. 그런데 레지스터 D0은 기본블록에서 시종 참조되고 있기 때문에 제 1 실시예의 흐름도에서는 (1) - (2) 사이에 (4) - (5) - (6) 사이의 어떤 명령을 출력할 수 없고, 또 (4) - (5) 사이에 (1) - (2) - (3) 사이의 어떤 명령을 출력할 수도 없다.
이상의 기본블록 명령열이 제 2 실시예에서의 흐름도에 의하여 시퀀싱되는 형태를 이하에 설명한다. 제 17 도는 제 16 도에 나타낸 DAG의 명령에서 정의되어 있는 자원이 치환되는 형태를 나타낸 도면이다.
여기에서 제 16 도의 (1)의 명령노드가 출력되고, 계속해서 (4)의 명령노드가 후보로서 선택되었지만, 리소스 상태에서는 레지스터 D0이 사용중이었기 때문에 NG가 되고, 최후의 참조도 아니므로 스텝 s14로 이동한다. 스텝 s14에서는 명령의 자원을 다른 자원으로 치환하는 것이 가능한지를 판정한다. 여기에서 레지스터 D0이외의 레지스터는 이 기본블록에서 모두 미사용이며, 상기 ①②③의 요건을 만족하고 있는 것으로 한다. 이 경우, 자원의 치환은 가능하게 되고, 스텝 s14는 Yes로 되어 스텝 s15로 이행한다. 스텝 s15에서는 스텝 s14에서의 치환이 가능하다고 판정된 경우, 이 명령노드의 자원 (치환대상자원 ; 레지스터 D0)을 해당 자원에 치환한다. 여기에서 레지스터 D1이 미사용이었기 때문에 명령 (4)에서의 레지스터 D0의 정의는 레지스터 D1의 정의로 치환된다. 그 결과, (4)의 명령노드 『MOVmem_b, D0』 은 『MOV mem-b, D1』로 재기록된다(스텝 s16).
계속해서 스텝 s16에서는 명령노드에 대한 DAG를 참조하고 그 명령노드와 레지스터 D0의 데이터 플로우에 관하여 자손 관계에 있는 명령노드의 치환대상자원을 치환한다. DAG에서 (4)는 (5), (6)의 명령과 레지스터 D0의 데이터 플로우에 관하여 자손 관계에 있다. 그러나 『ADD 20, D0』 을 『ADD 20, D1』 로 재기록하고,『MOV D0, mem_b』 를 『MOV D1, mem_b』 로 재기록한다. 이상의 재기록에 의하여 명령열 (4) (5) (6)은 레지스터 D1만을 이용하여 레지스터 D0을 이용하지 않는 명령열이 된다. 이와 같이 재기록에 의하여 스텝 s4에서의 리소스상태 판정은 모두 YES가 되고 해저드 해소를 위한 시퀀싱은 적절하게 실행된다.
이상과 같이 본 실시예에서는 출력하고자 하는 명령이 리소스상태에 의하여 출력할 수 없는 경우, 그 명령으로 정의하고 있는 자원을 치환하는 것으로 의존관계가 손상되지 않도록 하기 때문에 시퀀싱이 보다 유연하게 실행되고 해저드 해소가 보다 확실하게 실행된다.
또 상기 실시예에서는 어셈블러 언어로 기술한 소스 프로그램을 대상으로하여 설명을 진행했지만, 본 최적화장치를 컴파일러에 내장하여 컴파일러가 코드생성에 의하여 어셈블러언어 상태의 프로그램을 출력한 단계에서 본 최적화장치를 적용하도록 해도 된다.

Claims (33)

  1. 파이프라인 처리의 해저드를 해소하기 위하여 프로그램중의 분기를 포함하지 않는 프로그램 부분의 명령을 시퀀싱하는 최적화장치로서,
    상기 프로그램중의 분기를 포함하지 않는 프로그램 부분에 대하여 복수의 유향 비주기 그래프-상기 유향 비주기 그래프는 자원에 값을 정의하는 명령을 친(親-부모)으로 하고 그 자원의 값을 참조하는 명령을 자(子)로 한 친자관계의 계보를 나타냄-를 생성하는 유향 비주기 생성 수단과,
    각 유향 비주기 그래프에서, 해저드가 존재하는 친자간에 마크를 설정하는 마크설정수단과,
    상기 프로그램 부분의 명령을 시퀀싱하며, 이 시퀀싱은 유향 비주기 그래프중의 마크된 명령간에 그 명령간에서 사용중인 자원의 값을 파괴하지 않는 다른 유향 비주기 그래프의 명령을 삽입함으로써 실행되고, 복수의 유향 비주기 그래프의 각각으로부터 명령을 잘라내고, 복수의 유향 비주기 그래프에서의 명령중 선행하는 명령에 의해 사용중으로 되었던 자원의 값을 파괴하지 않는 것을 잘라내어 감으로써 명령을 배열하여 가는 제 1 규칙과, 배열 도중에 사용중으로 되었던 자원의 값을 파괴하지 않는 명령이 없어진 경우에는 명령순서가 동일하게 되지 않도록 선행하는 몇 개인가의 명령을 복수의 유향 비주기 그래프로 복귀시켜 배열을 중간부터 다시 하는 제 2 규칙에 따라 배열하는 시퀀싱수단을 포함하는 것을 특징으로 하는 최적화장치.
  2. 제 1 항에 있어서,
    상기 최적화장치는,
    유향 비주기 그래프의 선두 명령중, 자손에 해저드를 포함하는 명령에 의하여 높은 우선도를 부여하고, 자손에 해저드를 포함하지 않는 명령에 의하여 낮은 우선도를 부여하며, 상기 자손의 명령이란 유향 비주기 그래프내를 친으로부터 자의 단방향으로, 선두명령으로부터 정의 - 참조의 직접적 또는 간접적인 친자관계를 살필 수 있는 모든 명령을 말하는 우선도 부여수단을 추가로 포함하고,
    상기 시퀀싱수단은,
    유향 비주기 그래프의 선두명령중 대상이 되는 명령이 지시되면 지시된 명령을 유향 비주기 그래프로부터 절단하는 절단수단과,
    절단된 명령을 절단된 순위에 따라 연속으로 격납하는 명령 격납수단과,
    나중에 참조되는 자원의 값을 파괴하는 명령을 각 유향 비주기 그래프의 선두로부터 검출하는 파괴 명령 검출수단과,
    친의 명령이 명령 격납수단의 열의 최후미에 존재하는 명령이며, 또 그 친과의 사이에 마크가 설정되어 있는 명령을 각 유향 비주기 그래프의 선두로부터 검출하는 마크부착 명령 검출수단과,
    파괴 명령 검출수단에 의하여 검출된 명령 및 마크부착 명령 검출수단에 의하여 검출된 명령의 절단을 금지하는 절단 금지수단과,
    절단 금지수단에 의하여 절단이 금지된 명령 이외의 선두명령으로서, 부여된 우선도가 가장 높은 명령을 대상으로하여 지시하는 명령지시수단을 추가로 포함하는 것을 특징으로 하는 최적화장치.
  3. 제 2 항에 있어서,
    상기 최적화장치는,
    각각의 자원에 대응하는 자원 플래그를 기억하며, 사용중으로 되어 있는 자원에 대응하는 자원 플래그는 온으로 설정되고, 미사용으로 되어 있는 자원에 대응하는 자원 플래그는 오프로 설정되어 있으며, 대상으로 되어 있는 프로그램 부분의 입구에서는 선행하는 프로그램 부분의 출구의 상태를 반영하는 자원 플래그 기억수단과,
    명령 격납수단에 명령이 격납될 때마다 그 명령으로 값이 정의되는 자원에 대응하는 자원 플래그를 온으로 반전시키고, 자원의 값이 참조되는 것이 명령격납수단에 격납된 명령에서 최후가 되는 자원에 대응하는 자원 플래그를 오프로 반전시키는 갱신수단을 추가로 포함하며,
    상기 파괴 명령 검출수단은 온으로 되어 있는 자원 플래그를 참조하고, 그 자원 플래그에 대응하는 자원의 값을 파괴할 것인지를 판정함으로써 명령을 검출하는 것을 특징으로 하는 최적화장치.
  4. 제 3 항에 있어서,
    대상이 되는 프로그램 부분에서, 하나의 명령으로 정의된 자원의 값이 후속하는 복수개의 명령에 의하여 값이 참조되는 경우, 유향 비주기 그래프는 그 자원의 값을 정의하는 명령을 친으로 하고, 그 자원의 값을 참조하는 복수의 명령을 자로 한 일 대 다(one and multi)의 친자관계를 나타내고,
    대상이 되는 프로그램 부분에서, 선행하는 복수개의 명령으로 정의된 값을 하나의 명령에서 참조하는 경우, 유향 비주기 그래프는 그 자원의 값을 참조하는 명령을 자로 하고, 그 자원의 값을 정의하는 복수의 명령을 친으로 한 다 대일(multi and one)의 친자관계를 나타내고,
    상기 갱신수단은,
    절단수단에 의하여 명령이 절단되면 절단된 명령으로 정의되는 자원의 값이 이후에 참조되는지를 판정하는 참조유무 판정부와,
    이후에 참조된다고 판정된 경우, 그 정의자원에 대응하는 자원 플래그를 오프로부터 온으로 반전시키는 제 1 반전부와,
    절단수단에 의하여 절단된 명령으로 참조되어 있는 자원이 단수라면 그 자원에 대한 친명령을 검출하고, 참조되어 있는 자원이 복수라면 각각의 자원을 정의하고 있는 친명령을 검출하는 제 1 친명령 검출부와,
    제 1 친명령 검출부에 의하여 검출된 각각의 친명령으로 정의되어 있는 자원이 몇개의 자명령에서 다시 참조되고 있다면 그들의 자명령을 모두 검출하고 검출된 자명령은 복수, 단수의 2가지가 있는 제 1 자명령 검출부와,
    절단수단에 의하여 절단된 명령과는 다른 자명령이 제 1 자명령 검출부에 의하여 검출되면 그들의 자명령이 모두 절단완료인지를 판정하는 제 1 절단완료명령 판정부와,
    절단된 명령 이외의 자명령이 검출되지 않은 경우, 혹은 절단된 명령과는 다른 자명령이 검출되었지만, 그들은 제 1 절단완료 명령 판정부에 의하여 절단완료라고 판정된 경우, 절단된 명령에 의하여 값이 참조되는 자원에 대응하는 자원 플래그를 온으로부터 오프로 반전시키는 제 2 반전부를 자원에 추가로 포함하는 것을 특징으로 하는 최적화장치.
  5. 제 4 항에 있어서,
    상기 파괴 명령 검출수단은,
    각 유향 비주기 그래프의 선두에 있는 각각의 명령을 파괴후보로서 선택하는 파괴후보 선택부와,
    파괴후보로서 선택된 명령으로 정의되는 정의자원이 단수라면 정의자원에 대응하는 자원 플래그가 미사용을 나타내는 오프로 설정되어 있는지를 판정하고,정의되는 자원이 복수라면 그들 정의자원에 대응하는 자원 플래그가 모두 오프로 설정되어 있는지를 판정하는 정의자원 검출부와,
    검출된 모든 정의자원에 대응하는 자원 플래그가 오프라면 그 파괴후보로서 선택된 명령을 비파괴 명령으로 변경하는 제 1 제외부와,
    몇개의 자원에 대응하는 자원 플래그가 온으로 설정되어 있는 경우, 그들 자원을 정의하고 있는 친명령을 모두 검출하는 제 2 친명령 검출부와,
    제 2 친명령부에 의하여 검출된 각각의 친명령으로 정의되어 있는 자원이 다시 몇개의 자명령에서 참조되어 있다면 그들 자명령을 모두 검출하는 제 2 자명령 검출부와,
    파괴후보와는 다른 자명령이 제 2 자명령 검출부에 의하여 검출되면 그들의 자 명령은 모두 절단완료인지를 판정하는 제 2 절단완료 명령 판정부와,
    모든 정의자원에 대하여 제 2 자명령 검출부에 의하여 파괴후보 이외의 자명령이 검출되지 않은 경우, 혹은 파괴후보와는 다른 자명령이 검출되었지만, 그들은 제 2 절단완료 명령 판정부에 의하여 모두 절단완료라고 판정된 경우, 그 파괴후보로서 선택된 명령을 비파괴 명령으로 변경하는 제 2 제외부와,
    파괴후보로서 선택되고 또 비파괴 명령으로 변경되지 않은 명령을 파괴 명령으로서 절단 금지수단에 출력하는 출력부를 추가로 포함하는 것을 특징으로 하는 최적화장치.
  6. 제 5 항에 있어서,
    상기 시퀀싱수단은,
    하나의 프로그램 부분에 대하여 파괴 명령 검출수단이 파괴 명령만을 검출한 경우, 그 유향 비주기 그래프를 명령 격납수단의 최후미에 격납된 명령이 절단되기 전의 상태까지 복원하는 제 1 복원수단과,
    이전의 그 명령이 절단됨으로써 값이 변경을 받는 자원에 대응하는 자원 플래그를 해당명령이 절단되기 전의 상태로 복원하는 제 2 복원수단과,
    명령이 유향 비주기 그래프로 복귀되면 복귀된 명령에 이어서 높은 우선도가 부여된 유향 비주기 그래프의 선두명령을 대상으로하여 지시하는 명령 지시수단을 추가로 포함하는 것을 특징으로 하는 최적화장치.
  7. 제 3 항에 있어서,
    프로그램 부분에서, 하나의 명령으로 값이 정의된 자원이 후속하는 복수개의 명령에 의하여 값이 참조되는 경우, 유향 비주기 그래프는 그 자원의 값을 정의하는 명령을 친으로 하고, 그 자원의 값을 참조하는 복수의 명령을 자로 한 1대 다의 친자관계를 나타내고,
    대상이 되는 프로그램부분에서, 선행하는 복수개의 명령으로 정의된 값을 하나의 명령에서 참조하는 경우, 유향 비주기 그래프는 그 자원의 값을 참조하는 명령을 자로 하고 그 자원의 값을 정의하는 복수의 명령을 친으로 한 다 대1의 친자관계를 나타내고,
    상기 파괴 명령 검출수단은,
    각 유향 비주기 그래프의 선두에 있는 각각의 명령을 파괴후보로서 선택하는 파괴후보 선택부와,
    파괴후보로서 선택된 명령으로 정의되는 정의자원이 단수라면 정의자원에 대응하는 자원 플래그가 미사용을 나타내는 오프로 설정되어 있는지를 판정하고, 정의되는 자원이 복수라면 그들 정의자원에 대응하는 자원 플래그가 모두 오프로 설정되어 있는지를 판정하는 정의자원 검출부와,
    검출된 모든 정의자원에 대응하는 자원 플래그가 오프라면 그 파괴후보로서 선택된 명령을 비파괴 명령으로 변경하는 제 1 제외부와,
    몇개의 자원에 대응하는 자원 플래그가 온으로 설정되어 있는 경우, 그들의 자원을 정의하고 있는 친명령을 모두 검출하는 제 2 친명령 검출부와,
    제 2 친명령부에 의하여 검출된 각각의 친명령으로 정의되어 있는 자원이 다시 몇개의 자명령에서 참조되어 있다면 그들의 자명령을 모두 검출하는 제 2 자명령 검출부와,
    파괴후보와는 다른 자명령이 제 2 자명령 검출부에 의하여 검출되면 그들의 자 명령은 모두 절단완료인지를 판정하는 제 2 절단완료 명령 판정부와,
    모든 정의자원에 대하여 제 2 자명령 검출부에 의하여 파괴후보 이외의 자명령이 검출되지 않은 경우, 흑은 파괴후보와는 다른 자명령이 검출되었지만 그들은 제 2 절단완료 명령 판정부에 의하여 모두 절단완료라고 판정된 경우, 그 파괴후보로서 선택된 명령을 비파괴 명령으로 변경하는 제 2 제외부와,
    파괴후보로서 선택되고 비파괴 명령으로 변경되지 않은 명령을 파괴 명령으로서 절단 금지수단에 출력하는 출력부를 추가로 포함하는 것을 특징으로 하는 최적화장치 .
  8. 제 7 항에 있어서,
    상기 시퀀싱수단은,
    하나의 프로그램 부분에 대하여 파괴 명령 검출수단이 파괴 명령만을 검출한 경우, 그 유향 비주기 그래프를 명령 격납수단의 최후미에 격납된 명령이 절단되기 전의 상태로까지 복원하는 제 1 복원수단과,
    이전의 그 명령이 절단됨으로써 값이 변경을 받는 자원에 대응하는 자원 플래그를 해당 명령이 절단되기 전의 상태로 복원하는 제 2 복원수단과,
    명령이 유향 비주기 그래프로 복귀되는 복귀된 명령에 이어서 높은 우선도가 부여된 유향 비주기 그래프의 선두명령을 대상으로하여 지시하는 명령 지시수단을 추가로 포함하는 것을 특징으로 하는 최적화장치.
  9. 제 1 항에 있어서,
    상기 최적화장치는,
    유향 비주기 그래프의 선두 명령중, 자손에 해저드를 포함하는 명령에 제 1 우선도를 부여하고, 자손에 해저드를 퍼함하지 않는 명령에 제 1 우선도보다 낮은 제 2 우선도를 부여하는 제 1 우선도 부여수단을 추가로 포함하고,
    상기 스퀸싱수단은,
    유향 비주기 그래프의 선두명령중 대상이 되는 명령이 지시되면 지시된 명령을 유향 비주기 그래프로부터 절단하는 절단수단과,
    절단된 명령을 절단된 순위에 따라 연속으로 격납하는 명령 격납수단과,
    나중에 참조되는 자원의 값을 파괴하는 명령을 각 유향 비주기 그래프의 선두로부터 검출하는 파괴 명령 검출수단과,
    친의 명령이 명령 격납수단의 열의 최후미에 존재하는 명령이며, 또 그 친과의 사이에 마크가 설정되어 있는 명령을 각 유향 비주기 그래프의 선두로부터 검출하는 마크부착 명령 검출수단과,
    유향 비주기 플래그의 선두명령중, 마크부착 명령 검출수단에 의하여 검출된명령에 제 1 우선도 부여수단에 의하여 부여된 제 2 우선도보다도 낮은 제 3 우선도를 부여하는 제 2 우선도 부여수단과,
    파괴 명령 검출수단에 의하여 검출된 명령의 절단을 금지하는 절단 금지수단과,
    절단 금지수단에 의하여 절단이 금지된 명령 이외의 선두명령으로서, 부여된 우선도가 가장 높은 명령을 대상으로하여 지시하는 명령지시수단을 추가로 포함하는 것을 특징으로 하는 최적화장치.
  10. 제 9 항에 있어서,
    상기 최적화장치는,
    각각의 자원에 대응하는 자원 플래그를 기억하며, 사용중으로 되어 잇는 자원에 대응하는 자원 플래그는 온으로 설정되고, 미사용으로 되어 있는 자원에 대응하는 자원 플래그는 오프로 설정되어 있으며, 대상으로 되어 있는 프로그램 부분의 입구에서는 선행하는 프로그램 부분의 출구의 상태를 반영하는 자원 플래그 기억수단과,
    명령 격납수단에 명령이 격납될 때마다 그 명령으로 값이 정의되는 자원에 대응하는 자원 플래그를 온으로 반전시키고, 자원의 값이 참조되는 것이 명령격납수단에 격납된 명령에서 최후가 되는 자원에 대응하는 자원 플래그를 오프로 반전시키는 갱신수단을 추가로 포함하고,
    상기 파괴 명령 검출수단은,
    온으로 되어 있는 자원 플래그를 참조하고, 그 자원 플래그에 대응하는 자원의 값을 파괴하는지를 판정함으로써 명령을 검출하는 것을 특징으로 하는 최적화장치.
  11. 제 10 항에 있어서,
    대상이 되는 프로그램 부분에서, 하나의 명령으로 정의된 자원의 값이 후속하는 복수개의 명령에 의하여 값이 참조되는 경우, 유향 비주기 플래그는 그 자원의 값을 정의하는 명령을 친으로 하고, 그 자원의 값을 참조하는 복수의 명령을 자로 한 1 대 다의 친자관계를 나타내고,
    대상이 되는 프로그램 부분에서, 선행하는 복수개의 명령으로 정의된 값을 하나의 명령에서 참조하는 경우, 유향 비주기 그래프는 그 자원의 값을 참조하는 명령을 자로하고 그 자원의 값을 정의하는 복수의 명령을 친으로 한 다 대 1의 친자관계를 나타내고,
    상기 갱신수단은,
    절단수단에 의하여 명령이 절단되면 절단된 명령으로 정의되는 자원의 값이 이후에 참조되는지를 판정하는 참조유무 판정부와,
    이후에 참조된다고 판정된 경우, 그 정의자원에 대응하는 자원 플래그를 오프로 부터 온으로 반전시키는 제 1 반전부와,
    절단수단에 의하여 절단된 명령으로 참조되어 있는 자원이 단수라면 그 자원에 대한 친명령을 검출하고, 참조되어 있는 자원이 복수라면 각각의 자원을 정의하고 있는 친명령을 검출하는 제 1 친명령 검출부와,
    제 1 친명령 검출부에 의하여 검출된 각각의 친명령으로 정의되어 있는 자원이 몇개의 자명령으로 다시 참조되고 있다면 그들의 자명령을 모두 검출하며, 검출된 자명령은 복수, 단수의 2가지가 있는 제 1 자명령 검출부와,
    절단수단에 의하여 절단된 명령과는 다른 자명령이 제 1 자명령 검출부에 의하여 검출되면 그들의 자명령이 모두 절단완료되었는지를 판정하는 제 1 절단완료 명령 판정부와,
    절단된 명령 이외의 자명령이 검출되지 않은 경우, 혹은 절단된 명령과는 다른 자명령이 검출되었지만 그들은 제 1 절단완료 명령 판정부에 의하여 절단완료라고 판정된 경우, 절단된 명령에 의하여 값이 참조되는 자원에 대응하는 자원 플래그를 온으로부터 오프로 반전시키는 제 2 반전부를 더욱 포함하는 것을 특징으로 하는 최적화장치.
  12. 제 11 항에 있어서,
    상기 파괴 명령 검출수단은,
    각 유향 비주기 그래프의 선두에 있는 각각의 명령을 파괴후보로서 선택하는 파괴후보 선택부와,
    파괴후보로서 선택된 명령으로 정의되는 정의자원이 단수라면 정의자원에 대응하는 자원 플래그가 미사용을 나타내는 오프로 설정되어 있는지를 판정하고, 정의되는 자원이 복수라면 그들 정의자원에 대응하는 자원 플래그가 모두 오프로 설정되어 있는지를 판정하는 정의자윈 검출부와,
    검출된 모든 정의자원에 대응하는 자원 플래그가 오프라면 그 파괴후보로서 선택된 명령을 비파괴 명령으로 변경하는 제 1 제외부와,
    몇개의 자원에 대응하는 자원 플래그가 온으로 설정되어 있는 경우, 그들 자원을 정의하고 있는 친명령을 모두 검출하는 제 2 친명령 검출부와,
    제 2 친명령부에 의하여 검출된 각각의 친명령으로 정의되어 있는 자원이 다시 몇개의 자명령에서 참조되어 있다면 그들 자명령을 모두 검출하는 제 2 자명령 검출부와,
    파괴후보와는 다른 자명령이 제 2 자명령 검출부에 의하여 검출되면 그들의 자명령은 모두 절단완료인지를 판정하는 제 2 절단완료 명령 판정부와,
    모든 정의자원에 대하여 제 2 자명령 검출부에 의하여 파괴후보 이외의 자명령이 검출되지 않은 경우, 혹은 파괴후보와는 다른 자명령이 검출되었지만, 그들은 제 2 절단완료 명령 판정부에 의하여 모두 절단완료라고 판정된 경우, 그 파괴후보로서 선택된 명령을 비파괴 명령으로 변경하는 제 2 제외부와,
    파괴후보로서 선택되고, 또 비파괴 명령으로 변경되지 않은 명령을 파괴 명령으로서 절단 금지수단에 출력하는 출력부를 추가로 포함하는 것을 특징으로 하는 최적화장치.
  13. 제 12 항에 있어서,
    상기 시퀀싱수단은,
    하나의 프로그램 부분에 대하여 파괴 명령 검출수단이 파괴 명령만을 검출한 경우, 그 유향 비주기 그래프를 명령 격납수단의 최후미에 격납된 명령이 절단되기 전의 상태까지 복원하는 제 1 복원수단과,
    이전의 그 명령이 절단됨으로써 값이 변경을 받는 자원에 대응하는 자원 플래그를 해당 명령이 절단되기 전의 상태로 복원하는 제 2 복원수단과,
    명령이 유향 비주기 그래프로 복귀되면 복귀된 명령에 이어서 높은 우선도가 부여된 유향 비주기 그래프의 선두명령을 대상으로하여 지시하는 명령지시수단을 추가로 포함하는 것을 특징으로 하는 최적화장치.
  14. 파이프라인 처리의 해저드를 해소하기 위해 프로그램중의 분기를 포함하지 않는 프로그램 부분의 명령을 시퀀싱하는 최적화장치로서,
    상기 프로그램중의 분기를 포함하지 않는 프로그램 부분에 대하여 복수의 유향 비주기 그래프-상기 유향 비주기 그래프는 자원에 값을 정의하는 명령을 친으로 하고, 그 자원의 값을 참조하는 명령을 자로 한 친자관계의 계보를 나타냄-를 생성하는 유향 비주기 그래프 생성수단과,
    각 유향 비주기 그래프에서, 해저드가 존재하는 친자간에 마크를 설정하는 마크설정수단과,
    유향 비주기 그래프의 선두명령중 자손에 해저드를 포함하는 명령에 의하여 높은 우선도를 부여하고, 자손에 해저를 포함하지 않는 명령에 의하여 낮은 우선도를 부여하는 우선도 부여수단과,
    유향 비주기 그래프의 선두명령중 대상으로 되는 명령이 지시되면 지시된 명령을 유향 비주기 그래프로부터 절단하는 절단수단과,
    절단된 명령을 절단된 순위에 따라 연속으로 격납하는 명령 격납수단과,
    나중에 값이 참조되는 자원을 파괴하는 명령을 각 유향 비주기 그래프의 선두로부터 검출하는 파괴 명령 검출수단과,
    친의 명령이 명령 격납수단의 열의 최후미에 존재하는 명령이며, 또 그 친과의 사이에 마크가 설정되어 있는 명령을 각 유향 비주기 그래프의 선두로부터 검출하는 마크부착 명령 검출수단과,
    파괴 명령 검출수단에 의하여 검출된 명령 및 마크부착 명령 검출수단에 의하여 검출된 명령의 절단을 금지하는 절단 금지수단과,
    절단 금지수단에 의하여 절단이 금지된 명령 이외의 선두명령으로서, 부여된 우선도가 가장 높은 명령을 대상으로하여 지시하는 명령지시수단과,
    절단수단에 의하여 명령이 절단되면 절단된 나머지 명령열을 새로운 유향 비주기 그래프로하여 우선도 부여수단, 파괴 명령 검출수단, 마크부착 명령 검출수단, 절단 금지수단, 명령지시수단을 차례로 기동시키고, 복수의 유향 비주기 그래프에서의 명령중 선행하는 명령을 배열하여 가는 제 1 규칙과, 배열도중에 사용중으로 되었던 자원의 값을 파괴하지 않는 명령이 없어진 경우에는 명령순서가 동일하게 되지 않도록 선행하는 몇 개인가의 명령을 복수의 유향 비주기 그래프로 복귀시켜 배열을 중간부터 다시 하는 제 2 규칙에 따라 복수의 유향 비주기 그래프의 각각의 명령을 배열하는 기동수단을 포함하는 것을 특징으로 하는 최적화장치.
  15. 제 14 항에 있어서,
    상기 최적화장치는,
    각각의 자원에 대응하는 자원 플래그를 기억하며, 사용중으로 되어 있는 자원에 대응하는 자원 플래그는 온으로 설정되고, 미사용으로 되어 있는 자원에 대응하는 자원 플래그는 오프로 설정되어 있고, 대상으로 되어 있는 프로그램부분의 입구에서는 선행하는 프로그램 부분의 출구의 상태를 반영하는 자원 플래그 기억수단과,
    명령 격납수단에 명령이 격납될 때마다 그 명령으로 값이 정의되는 자원에 대응하는 자원 플래그를 온으로 반전시키고, 자원의 값이 참조되는 것이 명령 격납수단에 격납된 명령에서 최후가 되는 자원에 대응하는 자원 플래그를 오프로 반전시키는 갱신수단을 추가로 포함하고,
    상기 파괴 명령 검출수단은 온으로 되어 있는 자원 플래그를 참조하고, 그 자원 플래그에 대응하는 자원의 값을 파괴할 것인지를 판정함으로써 명령을 검출하는 것을 특징으로 하는 최적화 장치.
  16. 제 15 항에 있어서,
    대상이 되는 프로그램 부분에서, 하나의 명령으로 정의된 자원의 값이 후속하는 복수개의 명령에 의하여 값이 참조되는 경우, 유향 비주기 그래프는 그 자원의 값을 정의하는 명령을 친으로 하고, 그 자원의 값을 참조하는 복수의 명령을 자로 한 1 대 다의 친자관계를 나타내고,
    대상이 되는 프로그램 부분에서, 선행하는 복수개의 명령으로 정의된 값을 하나의 명령에서 참조하는 경우, 유향 비주기 그래프는 그 자원의 값을 참조하는 명령을 자로 하고, 그 자원의 값을 정의하는 복수의 명령을 친으로 한 다 대 1의 친자관계를 나타내고,
    상기 갱신수단은,
    절단수단에 의하여 명령이 절단되면 절단된 명령으로 정의되는 자원의 값이 이후에 참조되는지를 판정하는 참조유무 판정부와,
    이후에 참조된다고 판정된 경우, 그 정의자원에 대응하는 자원플래그를 오프로부터 온으로 반전시키는 제1반전부와,
    절단 수단에 의하여 절단된 명령으로 참조되어 있는 자원이 단수라면 그 자원에 대한 친명령을 검출하고, 참조되어 있는 자원이 복수라면 각각의 자원을 정의하고 있는 친명령을 검출하는 제 1 친명령 검출부와,
    제 1 친명령 검출부에 의하여 검출된 각각의 친명령으로 정의되어 있는 자원이 몇개의 자명령으로 다시 참조되고 있다면 그들의 자명령을 모두 검출하며, 상기 검출된 자명령은 복수, 단수의 2가지가 있는 제 1 자명령 검출부와,
    절단수단에 의하여 절단된 명령과는 다른 자명령이 제 1 자명령 검출부에 의하여 검출되면 그들의 자명령이 모두 절단완료되었는지를 판정하는 제 1 절단완료 명령 판정부와,
    절단된 명령 이외의 자명령이 검출되지 않은 경우, 혹은 절단된 명령과는 다른 자명령이 검출되었지만 그들은 제 1 절단완료 명령 판정부에 의하여 절단완료라고 판정된 경우, 절단된 명령에 의하여 값이 참조되는 자원에 대응하는 자원 플래그를 온으로부터 오프로 반전시키는 제 2 반전부를 추가로 포함하는 것을 특징으로 하는 최적화장치.
  17. 제 16 항에 있어서,
    상기 파괴 명령 검출수단은,
    각 유향 비주기 그래프의 선두에 있는 각각의 명령을 파괴후보로서 선택하는 파괴후보 선택부와,
    파괴후보로서 선택된 명령으로 정의되는 정의자원이 단수라면 정의자원에 대응하는 자원 플래그가 미사용을 나타내는 오프로 설정되어 있는지를 판정하고, 정의되는 자원이 복수라면 그들 정의자원에 대응하는 자원 플래그가 모두 오프로 설정되어 있는지를 판정하는 정의자원 검출부와,
    검출된 모든 정의자원에 대응하는 자원 플래그가 오프라면 그 파괴후보로서 선택된 명령을 비파괴 명령으로 변경하는 제 1 제외부와,
    몇개의 자원에 대응하는 자원 플래그가 온에 설정되어 있는 경우, 그들 자원을 정의하고 있는 친명령을 모두 검출하는 제 2 친명령 검출부와,
    제 2 친명령부에 의하여 검출된 각각의 친명령으로 정의되어 있는 자원이 다시 몇개의 자명령에서 참조되어 있다면 그들 자명령을 모두 검출하는 제 2 자명령 검출부와,
    파괴후보와는 다른 자명령이 제 2 자명령 검출부에 의하여 검출되면 그들의 자 명령은 모두 절단완료인지를 판정하는 제 2 절단완료 명령 판정부와,
    모든 정의자원에 대하여 제 2 자명령 검출부에 의하여 파괴후보 이외의 자명령이 검출되지 않은 경우, 혹은 파괴후보와는 다른 자명령이 검출되었지만, 그들 제 2 절단완료 명령 판정부에 의하여 모두 절단완료라고 판정된 경우, 그 파괴후보로서 선택된 명령을 비파괴 명령으로 변경하는 제 2 제외부와,
    파괴후보로서 선택되고 또 비파괴 명령으로 변경되지 않은 명령을 파괴 명령으로서 절단 금지수단에 출력하는 출력부를 추가로 포함하는 것을 특징으로 하는 최적화장치.
  18. 제17항에 있어서,
    상기 시퀀싱수단은,
    하나의 프로그램 부분에 대하여 파괴 명령 검출수단이 파괴 명령만을 검출한 경우, 그 유향 비주기 그래프를 명령 격납수단의 최후미에 격납된 명령이 절단되기 전의 상태까지 복원하는 제 1 복원수단과,
    이전의 그 명령이 절단됨으로써 값이 변경을 받는 자원에 대응하는 자원 플래그를 해당명령이 절단되기 전의 상태로 복원하는 제 2 복원수단과,
    명령이 유향 비주기 그래프로 복귀되면 복귀된 명령에 이어서 높은 우선도가 부여된 유향 비주기 그래프의 선두명령을 대상으로하여 지시하는 명령지시수단을 추가로 포함하는 것을 특징으로 하는 최적화장치.
  19. 파이프라인 처리의 해저드를 해소하기 위해 프로그램중의 분기를 포함하지 않는 프로그램 부분의 명령을 시퀀싱하는 최적화장치로서,
    상기 프로그램중의 분기를 포함하지 않는 프로그램 부분에 대하여 복수의 유향 비주기 그래프-상기 유향 비주기 그래프는 자원에 값을 정의하는 명령을 친으로 하고, 그 자원의 값을 참조하는 명령을 자로 한 친자관계의 계보를 나타냄-를 생성하는 유향 비주기 그래프 생성수단과,
    각 유향 비주기 그래프에서, 해저드가 존재하는 친자간에 마크를 설정하는 마크설정수단과,
    유향 비주기 그래프의 선두명령중 자손에 해저드를 포함하는 명령에 의하여 높은 우선도를 부여하고, 자손에 해저드를 포함하지 않는 명령에 의하여 낮은 우선도를 부여하는 우선도 부여수단과,
    유향 비주기 플래그의 선두명령중 대상으로 되는 명령이 지시되면 지시된 명령을 유향 비주기 그래프로부터 절단하는 절단수단과,
    절단된 명령을 절단된 순위에 따라 연속으로 격납하는 명령 격납수단과,
    나중에 값이 참조되는 자원을 파괴하는 명령을 각 유향 비주기 그래프의 선두로부터 검출하는 파괴 명령 검출수단과,
    친의 명령이 명령 격납수단의 열의 최후미에 존재하는 명령이며, 또 그 친과의 사이에 마크가 설정되어 있는 명령을 각 유향 비주기 그래프의 선두로부터 검출하는 마크부착 명령 검출수단과,
    파괴 명령 검출수단에 의해 검출된 명령 및 마크부착 명령 검출수단에 의해 검출된 명령의 절단을 금지하는 절단 금지수단과,
    절단이 금지된 명령 이외의 선두명령으로서, 부여된 우선도가 가장 높은 명령을 대상으로하여 지시하는 명령지시수단과,
    파괴 명령 검출수단에 의하여 어떤 명령이 검출된 경우, 해당 명령 및 해당명령과 해당 자원에 관한 데이터 플로우를 가지는 모든 명령이 차지하는 구간에서 미사용인 자원을 선별하는 제 1 치환후보 선별수단과,
    선별된 자원의 종별을 식별하는 식별수단과,
    파괴 명령 검출수단에 의하여 검출된 명령 및 그 명령으로 정의된 자원에 관하여 데이터 플로우를 가지는 모든 명령을 해독하는 해독수단과,
    식별수단의 식별결과와 해독수단의 해독결과를 조합시켜보아 그 조합을 프로세서의 명령 세트와 대조함으로써 선별에 의해 남은 자원으로부터 치환후보를 다시 선별하는 제 2 치환후보 선별수단과,
    사용중인 자원의 값을 정의하고 있다고 파괴 명령 검출수단에 의하여 검출된 명령에서 값이 정의되는 자원과, 그 명령을 포함하는 유향 비주기 그래프의 해당 자원에 관한 데이터 플로우를 가지는 명령으로 사용되고 있는 자원을 판정된 치환후보로 개찬(改竄)하는 개찬수단과,
    마크부착 명령 검출수단에 의하여 검출된 명령 및 파괴 명령 검출수단에 의하여 검출된 명령중 개찬수단에 의하여 자원이 개찬되지 않은 이외의 것의 절단을 금지하는 절단 금지수단과,
    절단이 금지된 선두명령중, 우선도가 가장 높은 그래프를 대상으로하여 지시하는 명령지시수단과,
    절단수단에 의하여 명령이 절단되면 절단된 나머지 명령열을 새로운 유향 비주기 그래프로하여 우선도 부여수단, 파괴 명령 검출수단, 마크부착 명령 검출수단, 절단 금지수단, 명령지시수단을 차례로 기동시켜, 복수의 유향 비주기 그래프에서의 명령중 선행하는 명령에 의해 사용중으로 되었던 자원의 값을 파괴하지 않는 것을 잘라내어 감으로써 명령을 배열하여 가는 제 1 규칙과, 배열 도중에 사용중으로 되었던 자원의 값을 파괴하지 않는 명령이 없어진 경우에는 명령순서가 동일하게 되지 않도록 선행하는 몇 개인가의 명령을 복수의 유향 비주기 그래프로 복귀시켜 배열을 중간부터 다시 하는 제 2 규칙에 따라 복수의 유향 비주기 그래프의 각각의 명령을 배열하는 기동수단을 포함하는 것을 특징으로 하는 최적화장치.
  20. 제 19 항에 있어서,
    상기 최적화장치는,
    각각의 자원에 대응하는 자원 플래그를 기억하며, 사용중으로 되어 있는 자원에 대응하는 자원 플래그는 온으로 설정되고, 미사용으로 되어 있는 자원에 대응하는 자원 플래그는 오프로 설정되어 있으며, 대상으로 되어 있는 프로그램 부분의 입구에서는 선행하는 프로그램 부분의 출구의 상태를 반영하는 자원 플래그 기억수단과,
    명령 격납수단에 명령이 격납될 때마다 그 명령으로 값이 정의되는 자원에 대응하는 자원 플래그를 온으로 반전시키고 자원의 값이 참조되는 것이 명령 격납수단에 격납된 명령에서 최후가 되는 자원에 대응하는 자원 플래그를 오프로 반전시키는 갱신수단을 추가로 포함하며,
    상기 파괴 명령 검출수단은 온으로 되어 있는 자원 플래그를 참조하고, 그 자원 플래그에 대응하는 자원의 값을 파괴할 것인지를 판정함으로써 명령을 검출하는 것을 특징으로 하는 최적화장치.
  21. 제 20 항에 있어서,
    대상이 되는 프로그램 부분에서, 하나의 명령으로 정의된 자원의 값이 후속하는 복수개의 명령에 의하여 값이 참조되는 경우, 유향 비주기 그래프는 그 자원의 값을 정의하는 명령을 친으로 하고, 그 자원의 값을 참조하는 복수의 명령을 자로 한 1 대 다의 친자관계를 나타내고,
    대상이 되는 프로그램 부분에서, 선행하는 복수개의 명령으로 정의된 값을 하나의 명령에서 참조하는 경우, 유향 비주기 그래프는 그 자원의 값을 참조하는 명령을 자로 하고, 그 자원의 값을 정의하는 복수의 명령을 친으로 한 다 대 1의 친자관계를 나타내고,
    상기 갱신수단은,
    절단수단에 의하여 명령이 절단되면 절단된 명령으로 정의되는 자원의 값이 이후에 참조되는지를 판정하는 참조유무 판정부와,
    이후에 참조된다고 판정된 경우, 그 정의자원에 대응하는 자원 플래그를 오프로부터 온으로 반전시키는 제 1 반전부와,
    절단수단에 의하여 절단된 명령에서 참조되어 있는 자원이 단수라면 그 자원에 대한 친명령을 검출하고, 참조되어 있는 자원이 복수라면 각각의 자원을 정의하고 있는 친명령을 검출하는 제 1 친명령 검출부와,
    제 1 친명령 검출부에 의하여 검출된 각각의 친명령으로 정의되어 있는 자원이 몇개의 자명령으로 다시 참조되고 있다면, 그들의 자명령을 모두 검출하며, 검출된 자명령은 복수, 단수의 2가지가 있는 제 1자명령 검출부와,
    절단수단에 의하여 절단된 명령과는 다른 자명령이 제 1 자명령 검출부에 의하여 검출되면 그들의 자명령이 모두 절단완료되었는지를 판정하는 제 1 절단완료 명령 판정부와,
    절단된 명령 이외의 자명령이 검출되지 않은 경우, 혹은 절단된 명령과는 다른 자명령이 검출되었지만, 그들은 제 1 절단완료 명령 판정부에 의하여 절단완료라고 판정된 경우, 절단된 명령에 의하여 값이 참조되는 자원에 대응하는 자원 플래그를 온으로부터 오프로 반전시키는 제 2 반전부를 추가로 포함하는 것을 특징으로 하는 최적화장치.
  22. 제 21 항에 있어서,
    상기 파괴 명령 검출수단은,
    각 유향 비주기 그래프의 선두에 있는 각각의 명령을 파괴후보로서 선택하는 파괴후보 선택부와,
    파괴후보로서 선택된 명령에서 정의되는 정의자원이 단수라면 정의자원에 대응하는 자원 플래그가 미사용을 나타내는 오프로 설정되어 있는지를 판정하고, 정의되는 자원이 복수라면 그들 정의자윈에 대응하는 자원 플래그가 모두 오프로 설정되어 있는지를 판정하는 정의자원 검출부와,
    검출된 모든 정의자원에 대응하는 자원 플래그가 오프라면 그 파괴후보로서 선택된 명령을 비파괴 명령으로 변경하는 제 1 제외부와,
    몇개의 자원에 대응하는 자원 플래그가 온으로 설정되어 있는 경우, 그들 자원을 정의하고 있는 친명령을 모두 검출하는 제 2 친명령 검출부와,
    제 2 친명령부에 의하여 검출된 각각의 친명령으로 정의되어 있는 자원이 다시 몇개의 자명령에서 참조되어 있다면 그들 자명령을 모두 검출하는 제 2 자명령 검출부와,
    파괴후보와는 다른 자명령이 제 2 자명령 검출부에 의하여 검출되면 그들의 자 명령은 모두 절단완료인지를 판정하는 제 2 절단완료 명령 판정부와,
    모든 정의자원에 대하여 제 2 자명령 검출부에 의하여 파괴후보 이외의 자명령이 검출되지 않은 경우, 혹은 파괴후보와는 다른 자명령이 검출되었지만, 그들은 제 2 절단완료 명령 판정부에 의하여 모두 절단완료라고 판정된 경우, 그 파괴후보로서 선택된 명령을 비파괴 명령으로 변경하는 제 2 제외부와,
    파괴후보로서 선택되고 비파괴 명령으로 변경되지 않은 명령을 파괴 명령으로서 절단 금지수단에 출력하는 출력부를 추가로 포함하는 것을 특징으로 하는 최적화장치.
  23. 제 22 항에 있어서,
    상기 시퀀싱수단은,
    하나의 프로그램 부분에 대하여 파괴 명령 검출수단이 파괴 명령만을 검출한 경우, 그 유향 비주기 그래프를 명령 격납수단의 최후미에 격납된 명령이 절단되기 전의 상대까지 복원하는 제 1 복원수단과,
    이전의 그 명령이 절단됨으로써 값이 변경을 받는 자원에 대응하는 자원 플래그를 해당명령이 절단되기 전의 상태로 복원하는 제 2 복원수단과,
    명령이 유향 비주기 그래프로 복귀되면 복귀된 명령에 이어서 높은 우선도가 부여된 유향 비주기 그래프의 선두명령을 대상으로하여 지시하는 명령지시수단을 추가로 포함하는 것을 특징으로 하는 최적화장치.
  24. 파이프라인 처리의 해저드를 해소하기 위해 프로그램중의 분기를 포함하지 않는 프로그램 부분의 명령을 시퀀싱하는 최적화장치로서,
    상기 프로그램중의 분기를 포함하지 않는 프로그램 부분에 대하여 복수의 유향 비주기 그래프-상기 유향 비주기 그래프는 자원에 값을 정의하는 명령을 친으로 하고 그 자원의 값을 참조하는 명령을 자로 한 친자관계의 계보를 나타냄-를 생성하는 유향 비주기 그래프 생성수단과,
    각 유향 비주기 그래프에서, 해저드가 존재하는 친자간에 마크를 설정하는 마크설정수단과,
    유향 비주기 그래프의 선두명령중 자손에 해저드를 포함하는 명령에 의하여 높은 우선도를 부여하고, 자손에 해저드를 포함하지 않는 명령에 의하여 낮은 우선도를 부여하는 우선도 부여수단과,
    유향 비주기 그래프의 선두명령중 대상으로 되는 명령이 지시되면 지시된 명령을 유향 비주기 그래프로부터 절단하는 절단수단과,
    절단된 명령을 절단된 순위에 따라 연속으로 격납하는 명령 격납수단과,
    나중에 값이 참조되는 자원을 파괴하는 명령을 각 유향 비주기 그래프의 선두로부터 검출하는 파괴 명령 검출수단과,
    친의 명령이 명령 격납수단의 열의 최후미에 존재하는 명령이며, 그 친과의 사이에 마크가 설정되어 있는 명령을 각 유향 비주기 그래프의 선두로부터 검출하는 마크부착 명령 검출수단과,
    파괴 명령 검출수단에 의해 검출된 명령 및 마크부착 명령 검출수단에 의해 검출된 명령의 절단을 금지하는 절단 금지수단과,
    절단이 금지된 명령 이외의 선두명령으로서, 부여된 우선도가 가장 높은 명령을 대상으로하여 지시하는 명령 지시수단과,
    파괴 명령 검출수단에 의하여 어떤 명령이 검출된 경우, 해당명령을 선두에 두는 유향 비선회 그래프에서 미사용인 자원을 선별하는 제 1 치환후보 선별수단과,
    선별된 자원의 종별을 식별하는 식별수단과,
    파괴 명령 검출수단에 의하여 검출된 명령 및 그 명령으로 정의된 자원에 관하여 데이터 플로우를 가지는 모든 명령을 해독하는 해독수단과,
    식별수단의 식별결과와 해독수단의 해독결과를 조합시켜보아 그 조합을 프로세서의 명령 세트와 대조함으로써 선별에 의해 남은 자원으로부터 치환후보를 다시 선별하는 제 2 치환후보 선별수단과,
    사용중인 자원의 값을 정의하고 있다고 파괴 명령 검출수단에 의하여 검출된 명령에서 값이 정의되는 자원과, 그 명령을 포함하는 유향 비주기 그래프의 해당 자원에 관한 데이터 플로우를 가지는 명령으로 사용되고 있는 자원을 판정된 치환후보로 개찬하는 개찬수단과,
    마크부착 명령 검출수단에 의하여 검출된 명령 및 파괴 명령 검출수단에 의하여 검출된 명령중 개찬수단에 의하여 자원이 개찬되지 않은 이외의 것의 절단을 금지하는 절단 금지수단과,
    절단이 금지된 선두명령중, 우선도가 가장 높은 그래프를 대상으로하여 지시하는 명령 지시수단과,
    절단수단에 의하여 명령이 절단되면 절단된 나머지 명령열을 새로운 유향 비주기 그래프로하여 우선도 부여수단, 파괴 명령 검출수단, 마크부착 명령 검출수단, 절단 금지수단, 명령지시수단을 차례로 기동시켜, 복수의 유향 비주기 그래프에서의 명령중 선행하는 명령에 의해 사용중으로 되었던 자원의 값을 파괴하지 않는 것을 잘라내어 감으로써 명령을 배열하여 가는 제 1 규칙과 배열 도중에 사용중으로 되었던 자원의 값을 파괴하지 않는 명령이 없어진 경우에는 명령순서가 동일하게 되지 않도록 선행하는 몇 개인가의 명령을 복수의 유향 비주기 그래프로 복귀시켜 배열을 중간부터 다시 하는 제 2 규칙에 따라 복수의 유향 비주기 그래프의 각각의 명령을 배열하는 기동수단을 포함하는 것을 특징으로 하는 최적화장치.
  25. 제 24 항에 있어서,
    상기 최적화장치는,
    각각의 자원에 대응하는 자원 플래그를 기억하고, 사용중으로 되어 있는 자원에 대응하는 자원 플래그는 온으로 설정되고, 미사용으로 되어 있는 자원에 대응하는 자원 플래그는 오프로 설정되어 있으며, 대상으로 되어 있는 프로그램 부분의 입구에서는 선행하는 프로그램 부분의 출구의 상태를 반영하는 자원 플래그 기억수단과,
    명령 격납수단에 명령이 격납될 때마다 그 명령으로 값이 정의되는 자원에 대응하는 자원 플래그를 온으로 반전시키고 자원의 값이 참조되는 것이 명령 격납수단에 격납된 명령에서 최후가 되는 자원에 대응하는 자원 플래그를 오프로 반전시키는 갱신수단을 추가로 포함하며,
    상기 파괴 명령 검출수단은 온으로 되어 있는 자원 플래그를 참조하고, 그 자원 플래그에 대응하는 자원의 값을 파괴할 것인지를 판정함으로써 명령을 검출하는 것을 특징으로 하는 최적화장치.
  26. 제 25 항에 있어서,
    대상이 되는 프로그램 부분에서, 하나의 명령으로 정의된 자원의 값이 후속하는 복수개의 명령에 의하여 값이 참조되는 경우, 유향 비주기 플래그는 그 자원의 값을 정의하는 명령을 친으로 하고, 그 자원의 값을 참조하는 복수의 명령을 자로 한 1 대 다의 친자관계를 나타내고,
    대상이 되는 프로그램 부분에서, 선행하는 복수개의 명령으로 정의된 값을 하나의 명령에서 참조하는 경우, 유향 비주기 그래프는 그 자원의 값을 참조하는 명령을 자로 하고, 그 자원의 값을 정의하는 복수의 명령을 친으로 한 다 대 1의 친자관계를 나타내고,
    상기 갱신수단은,
    절단수단에 의하여 명령이 절단되면 절단된 명령으로 정의되는 자원의 값이 이후에 참조되는지를 판정하는 참조유무 판정부와,
    이후에 참조된다고 판정된 경우, 그 정의자원에 대응하는 자원 플래그를 오프로부터 온으로 반전시키는 제 1 반전부와,
    절단수단에 의하여 절단된 명령에서 참조되어 있는 자원이 단수라면 그 자원에 대한 친명령을 검출하고, 참조되어 있는 자원이 복수라면 각각의 자원을 정의하고 있는 친명령을 검출하는 제 1 친명령 검출부와,
    제 1 친명령 검출부에 의하여 검출된 각각의 친명령으로 정의되어 있는 자원이 몇개의 자명령으로 다시 참조되고 있다면 그들의 자명령을 모두 검출하며 검출된 자명령은 복수, 단수의 2가지가 있는 제 1 자명령 검출부와,
    절단수단에 의하여 절단된 명령과는 다른 자명령이 제 1 자명령 검출부에 의하여 검출되면 그들의 자명령이 모두 절단완료되었는지를 판정하는 제 1 절단완료 명령 판정부와,
    절단된 명령 이외의 자명령이 검출되지 않은 경우, 혹은 절단된 명령과는 다른 자명령이 검출되었지만, 그들은 제 1 절단완료 명령 판정부에 의하여 절단완료라고 판정된 경우, 절단된 명령에 의하여 값이 참조되는 자원에 대응하는 자원 플래그를 온으로부터 오프로 반전시키는 제 2 반전부를 추가로 포함하는 것을 특징으로 하는 최적화장치.
  27. 제 26 항에 있어서,
    상기 파괴 명령 검출수단은,
    각 유향 비주기 그래프의 선두에 있는 각각의 명령을 파괴후보로서 선택하는 파괴후보 선택부와,
    파괴후보로서 선택된 명령으로 정의되는 정의자원이 단수라면 정의자원에 대응하는 자원 플래그가 미사용을 나타내는 오프로 설정되어 있는지를 판정하고, 정의되는 자원이 복수라면 그들 정의자원에 대응하는 자원 플래그가 모두 오프로 설정되어 있는지를 판정하는 정의자원 검출부와,
    검출된 모든 정의자원에 대응하는 자원 플래그가 오프라면 그 파괴후보로서 선택된 명령을 비파괴 명령으로 변경하는 제 1 제외부와,
    몇개의 자원에 대응하는 자원 플래그가 온으로 설정되어 있는 경우, 그들 자원을 정의하고 있는 친명령을 모두 검출하는 제 2 친명령 검출부와,
    제 2 친명령부에 의하여 검출된 각각의 친명령으로 정의되어 있는 자원이 다시 몇가지 자명령에서 참조되어 있다면 그들 자명령을 모두 검출하는 제 2 자명령 검출부와,
    파괴후보와는 다른 자명령이 제 2 자명령 검출부에 의하여 검출되면 그들의 자명령은 모두 절단완료인지를 판정하는 제 2 절단완료 명령 판정부와,
    모든 정의자원에 대하여 제 2 자명령 검출부에 의하여 파괴후보 이외의 자명령이 검출되지 않은 경우, 혹은 파괴후보와는 다른 자명령이 검출되었지만, 그들은 제 2 절단완료 명령 판정부에 의하여 모두 절단완료라고 판정된 경우, 그 파괴후보로서 선택된 명령을 비파괴 명령으로 변경하는 제 2 제외부와,
    파괴후보로서 선택되고 또 비파괴 명령으로 변경되지 않은 명령을 파괴 명령으로서 절단 금지수단에 출력하는 출력부를 추가로 포함하는 것을 특징으로 하는 최적화장치.
  28. 제 27 항에 있어서,
    상기 시퀀싱수단은,
    하나의 프로그램 부분에 대하여 파괴 명령 검출수단이 파괴 명령만을 검출한 경우, 그 유향 비주기 그래프를 명령 격납수단의 최후미에 격납된 명령이 절단되기 전의 상태까지 복원하는 제 1 복원수단과,
    이전의 그 명령이 절단됨으로써 값이 변경을 받는 자원에 대응하는 자원 플래그를 해당 명령이 절단되기 전의 상태로 복원하는 제 2 복원수단과,
    명령이 유향 비주기 그래프로 복귀되면 복귀된 명령에 이어서 높은 우선도가 부여된 유향 비주기 그래프의 선두명령을 대상으로하여 지시하는 명령지시수단을 추가로 포함하는 것을 특징으로 하는 최적화장치.
  29. 로드명령에 의하여 값이 정의되는 자원이 그 직후의 명령에서 ALU 연산 혹은 어드레스 연산의 오퍼랜드로서 참조되기 때문에 생기는 파이프라인 처리의 지연을 프로그램내의 명령을 시퀀싱함으로써 대처하는 최적화장치로서,
    상기 프로그램중의 분기를 포함하지 않는 프로그램 부분에 대하여 자원에 값을 정의하는 명령을 친으로 하고, 그 자원의 값을 참조하는 명령을 자로 한 명령끼리의 친자관계의 계보를 나타내는 유향 비주기 그래프를 복수개 생성하는 유향 비주기 그래프 생성수단과,
    친의 명령에 의하여 값이 정의되는 자원이 자의 명령에서 ALU 연산 혹은 어드레스 연산의 오퍼랜드로서 참조되어 있는 배열을 각 유향 비주기 그래프로부터 검출하고, 각 유향 비주기 그래프의 그 배열의 친자간에 마크를 설정하는 해저드 정보 설정수단과,
    복수의 유향 비주기 그래프의 각각으로부터 명령을 절단하여, 복수의 유향비주기 그래프에서의 명령중 선행하는 명령에 의해 사용중으로 되었던 자원의 값을 파괴하지 않는 것을 잘라내어 감으로써 명령을 배열하여 가는 제 1 규칙과, 배열 도중에 사용중으로 되었던 자원의 값을 파괴하지 않는 명령이 없어진 경우에는 명령순서가 동일하게 되지 않도록 선행하는 몇 개인가의 명령을 복수의 유향 비주기 그래프로 복귀시켜 배열을 중간부터 다시 하는 제 2 규칙에 따라 배열하는 시퀀싱 수단을 추가로 포함하는 것을 특징으로 하는 최적화장치.
  30. 제 29 항에 있어서,
    상기 최적화장치는,
    유향 비주기 그래프의 선두명령중 자손에 해저드를 포함하는 명령에 의하여 높은 우선도를 부여하고, 자손에 해저드를 포함하지 않는 명령에 의하여 낮은 우선도를 부여하는 우선도 부여수단을 추가로 포함하며,
    상기 자손의 명령이란 유향 비주기 그래프내를 친으로부터 자의 단방향으로, 선두명령으로부터 정의 - 참조의 직접적 또는 간접적인 친자관계를 살필 수 있는 모든 명령이고,
    상기 시퀀싱수단은,
    유향 비주기 그래프의 선두명령중 대상이 되는 명령이 지시되면 지시된 명령을 유향 비주기 그래프로부터 절단하는 절단수단과,
    절단된 명령을 절단된 순위에 따라 연속으로 격납하는 명령 격납수단과,
    나중에 참조되는 자원의 값을 파괴하는 명령을 각 유향 비주기 그래프의 선두로부터 검출하는 파괴 명령 검출수단과,
    친의 명령이 명령 격납수단의 열의 최후미에 존재하는 명령이며, 또 그 친과의 사이에 마크가 설정되어 있는 명령을 각 유향 비주기 그래프의 선두로부터 검출하는 마크부착 명령 검출수단과,
    파괴 명령 검출수단에 의하여 검출된 명령 및 마크부착 명령 검출수단에 의하여 검출된 명령의 절단을 금지하는 절단 금지수단과,
    절단 금지수단에 의하여 절단이 금지된 명령 이외의 선두명령으로서, 부여된 우선도가 가장 높은 명령을 대상으로하여 지시하는 명령지시수단을 추가로 포함하는 것을 특징으로 하는 최적화장치.
  31. 제 30 항에 있어서,
    상기 최적화장치는,
    각각의 자원에 대응하는 자원 플래그를 기억하며, 사용중으로 되어 있는 자원에 대응하는 자원 플래그는 온으로 설정되고, 미사용으로 되어 있는 자원에 대응하는 자원 플래그는 오프로 설정되어 있고, 대상으로 되어 있는 프로그램부분의 입구에서는 선행하는 프로그램 부분의 출구의 상태를 반영하는 자원 플래그 기억수단과,
    명령 격납수단에 명령이 격납될 때마다 그 명령으로 값이 정의되는 자원에 대응하는 자원 플래그를 온으로 반전시키고, 자원의 값이 참조되는 것이 명령 격납수단에 격납된 명령에서 최후가 되는 자원에 대응하는 자원 플래그를 오프로 반전시키는 갱신수단을 추가로 포함하며,
    상기 파괴 명령 검출수단은 온으로 되어 있는 자원 플래그를 참조하고, 그 자원 플래그에 대응하는 자원의 값을 파괴할 것인지를 판정함으로써 명령을 검출하는 것을 특징으로 하는 최적화장치.
  32. 제 31항에 있어서,
    대상이 되는 프로그램 부분에서, 하나의 명령으로 정의된 자원의 값이 후속하는 복수개의 명령에 의하여 값이 참조되는 경우, 유향 비주기 그래프는 그 자원의 값을 정의하는 명령을 친으로 하고, 그 자원의 값을 참조하는 복수의 명령을 자로 한 1 대 다의 친자관계를 나타내고,
    대상이 되는 프로그램 부분에서, 선행하는 복수개의 명령으로 정의된 값을 하나의 명령에서 참조하는 경우, 유향 비주기 그래프는 그 자원의 값을 참조하는 명령을 자로 하고, 그 자원의 값을 정의하는 복수의 명령을 친으로 한 다 대1의 친자관계를 나타내고,
    상기 갱신수단은,
    절단수단에 의하여 명령이 절단되면 절단된 명령으로 정의되는 자원의 값이 이후에 참조되는지를 판정하는 참조유무 판정부와,
    이후에 참조된다고 판정된 경우, 그 정의자원에 대응하는 자원 플래그를 오프로부터 온으로 반전시키는 제 1 반전부와,
    절단수단에 의하여 절단된 명령으로 참조되어 있는 자원이 단수라면 그 자원에 대한 친명령을 검출하고, 참조되어 있는 자원이 복수라면 각각의 자원을 정의하고 있는 친명령을 검출하는 제 1 친명령 검출부와,
    제 1 친명령 검출부에 의하여 검출된 각각의 친명령으로 정의되어 있는 자원이 몇개의 자명령에서 다시 참조되고 있다면 그들의 자명령을 모두 검출하며, 검출된 자명령은 복수, 단수의 2가지가 있는 제 1 자명령 검출부와,
    절단수단에 의하여 절단된 명령과는 다른 자명령이 제 1 자명령 검출부에 의하여 검출되면 그들의 자명령이 모두 절단완료되었는지를 판정하는 제1 절단완료 명령 판정부와,
    절단된 명령 이외의 자명령이 검출되지 않은 경우, 혹은 절단된 명령과는 다른 자명령이 검출되었지만, 그들은 제 1 절단완료 명령 판정부에 의하여 절단완료라고 판정된 경우, 절단된 명령에 의하여 값이 참조되는 자원에 대응하는 자원 플래그를 온으로부터 오프로 반전시키는 제 2 반전부를 추가로 포함하는 것을 특징으로 하는 최적화장치.
  33. 제 32 항에 있어서,
    상기 파괴 명령 검출수단은,
    각 유향 비주기 그래프의 선두에 있는 각각의 명령을 파괴후보로서 선택하는 파괴후보 선택부와,
    파괴후보로서 선택된 명령으로 정의되는 정의자원이 단수라면 정의자원에 대
KR1019960013068A 1995-04-27 1996-04-26 명령의 시퀀싱에 의하여 헤저드의 해소를 도모하는 최적화장치 KR100238330B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP95-104300 1995-04-27
JP07104300A JP3113792B2 (ja) 1995-04-27 1995-04-27 最適化装置

Publications (2)

Publication Number Publication Date
KR960038647A KR960038647A (ko) 1996-11-21
KR100238330B1 true KR100238330B1 (ko) 2000-01-15

Family

ID=14377080

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019960013068A KR100238330B1 (ko) 1995-04-27 1996-04-26 명령의 시퀀싱에 의하여 헤저드의 해소를 도모하는 최적화장치

Country Status (7)

Country Link
US (1) US5850552A (ko)
EP (1) EP0740251B1 (ko)
JP (1) JP3113792B2 (ko)
KR (1) KR100238330B1 (ko)
CN (1) CN1160627C (ko)
DE (1) DE69622219T2 (ko)
TW (1) TW352424B (ko)

Families Citing this family (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
USRE37093E1 (en) 1991-06-03 2001-03-13 Ricoh Company, Ltd. Optical disk drive unit with a sealing type bearing member
US6044221A (en) * 1997-05-09 2000-03-28 Intel Corporation Optimizing code based on resource sensitive hoisting and sinking
US5978588A (en) * 1997-06-30 1999-11-02 Sun Microsystems, Inc. Method and apparatus for profile-based code placement using a minimum cut set of the control flow graph
JP3220055B2 (ja) * 1997-07-17 2001-10-22 松下電器産業株式会社 機械語命令列またはアセンブリ言語命令列を最適化する最適化装置、及び、高級言語で記載されたソースプログラムを機械語またはアセンブリ言語の命令列に変換するコンパイラ装置。
EP1645956A3 (en) * 1997-08-29 2008-02-13 Matsushita Electric Industrial Co., Ltd. Instruction conversion apparatus for reducing the number of types of instructions
US6189141B1 (en) * 1998-05-04 2001-02-13 Hewlett-Packard Company Control path evaluating trace designator with dynamically adjustable thresholds for activation of tracing for high (hot) activity and low (cold) activity of flow control
US6158049A (en) * 1998-08-11 2000-12-05 Compaq Computer Corporation User transparent mechanism for profile feedback optimization
US6145125A (en) * 1998-11-12 2000-11-07 International Business Machines Corporation Method and storage medium for building very large executable programs
US7058647B1 (en) 1999-08-31 2006-06-06 Charles E. Hill & Associates Electronic presentation generation system and method
US6681387B1 (en) 1999-12-01 2004-01-20 Board Of Trustees Of The University Of Illinois Method and apparatus for instruction execution hot spot detection and monitoring in a data processing unit
KR100304527B1 (ko) * 2000-01-10 2001-11-03 이동욱, 이정호 현금카드를 통한 실시간 현금 결제 처리 방법
US7433881B1 (en) 2000-08-31 2008-10-07 Charles E. Hill & Associates, Inc. System and method for handling multi-resolution graphics files
US6675376B2 (en) * 2000-12-29 2004-01-06 Intel Corporation System and method for fusing instructions
US7185327B2 (en) * 2001-01-09 2007-02-27 Hewlett-Packard Development Company, L.P. System and method for optimizing operations via dataflow analysis
JP2002304823A (ja) * 2001-04-10 2002-10-18 Fujitsu Ltd リオーダリングコントローラ、リオーダリング方法及び記憶装置
US7000095B2 (en) * 2002-09-06 2006-02-14 Mips Technologies, Inc. Method and apparatus for clearing hazards using jump instructions
US7448030B2 (en) * 2004-03-18 2008-11-04 Intel Corporation Optimized ordering of firmware modules in pre-boot environment
US7506331B2 (en) * 2004-08-30 2009-03-17 International Business Machines Corporation Method and apparatus for determining the profitability of expanding unpipelined instructions
WO2006075286A2 (en) * 2005-01-13 2006-07-20 Nxp B.V. A processor and its instruction issue method
US7908163B2 (en) * 2005-07-15 2011-03-15 The Board Of Trustees Of The University Of Alabama Method and system for parallel scheduling of complex dags under uncertainty
US7330962B2 (en) * 2005-11-14 2008-02-12 Nvidia Corporation Dynamic instruction sequence selection during scheduling
US8539467B2 (en) * 2006-07-27 2013-09-17 International Business Machines Corporation Method and data processing system for solving resource conflicts in assembler programs
TWI334571B (en) * 2007-02-16 2010-12-11 Via Tech Inc Program instruction rearrangement methods
US8612944B2 (en) * 2008-04-17 2013-12-17 Qualcomm Incorporated Code evaluation for in-order processing
US9690591B2 (en) * 2008-10-30 2017-06-27 Intel Corporation System and method for fusing instructions queued during a time window defined by a delay counter
JP5140105B2 (ja) * 2010-03-23 2013-02-06 Necシステムテクノロジー株式会社 命令スケジューリング装置、命令スケジューリング方法および命令スケジューリングプログラム
CN106959957B (zh) * 2016-01-11 2020-07-07 阿里巴巴集团控股有限公司 一种有向无环图dag连线提示方法及装置
JP6325625B2 (ja) * 2016-10-14 2018-05-16 ファナック株式会社 プログラム最適化システム
CN110221838B (zh) * 2019-05-28 2020-10-27 中国科学院高能物理研究所 一种基于遗传算法和有向无环图进行程序自动设计优化的方法

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5161216A (en) * 1989-03-08 1992-11-03 Wisconsin Alumni Research Foundation Interprocedural slicing of computer programs using dependence graphs
JPH03135630A (ja) * 1989-10-20 1991-06-10 Nec Corp 命令スケジューリング方式
US5119495A (en) * 1989-12-21 1992-06-02 Bull Hn Information Systems Inc. Minimizing hardware pipeline breaks using software scheduling techniques during compilation
US5107418A (en) * 1990-06-11 1992-04-21 Supercomputer Systems Limited Partnership Method for representing scalar data dependences for an optimizing compiler
US5202993A (en) * 1991-02-27 1993-04-13 Sun Microsystems, Inc. Method and apparatus for cost-based heuristic instruction scheduling
US5448737A (en) * 1992-03-17 1995-09-05 International Business Machines Corporation System and method for optimizing computer code using a compact data flow representation

Also Published As

Publication number Publication date
CN1146577A (zh) 1997-04-02
TW352424B (en) 1999-02-11
JP3113792B2 (ja) 2000-12-04
JPH08305577A (ja) 1996-11-22
DE69622219T2 (de) 2002-10-31
EP0740251B1 (en) 2002-07-10
EP0740251A3 (en) 1997-06-11
KR960038647A (ko) 1996-11-21
EP0740251A2 (en) 1996-10-30
CN1160627C (zh) 2004-08-04
DE69622219D1 (de) 2002-08-14
US5850552A (en) 1998-12-15

Similar Documents

Publication Publication Date Title
KR100238330B1 (ko) 명령의 시퀀싱에 의하여 헤저드의 해소를 도모하는 최적화장치
US6243864B1 (en) Compiler for optimizing memory instruction sequences by marking instructions not having multiple memory address paths
US5832273A (en) System for deleting redundant instructions from high level language source code containing in-line assembly instructions
Knoop et al. Partial dead code elimination
US6954747B1 (en) Methods for comparing versions of a program
US5511198A (en) Optimizing compiler for shortening execution time of object program
US5729676A (en) Method of generating data for evaluating programs
GB2400215A (en) Method of parallelising a sequential program
US6938186B2 (en) System and method for performing a path-sensitive verification on a program
DE19534752A1 (de) Verfahren und System zum Liefern einer Unterstützung für eine spekulative Ausführung
IL100991A (en) Method for translating a first program cipher to a second program cipher
JPH02217926A (ja) コード生成方法
US7007261B1 (en) Translation of an electronic integrated circuit design into hardware description language using circuit description template
JP2002259134A (ja) ポストリンク・コードの最適化方法及び装置
US5805894A (en) Method inside an optimizing compiler for analyzing assertions and redirecting control flow in programs
US7269828B2 (en) Method for safely instrumenting large binary code
US6564372B1 (en) Critical path optimization-unzipping
US7689975B2 (en) Processing of a compileable computer program
US7770147B1 (en) Automatic generators for verilog programming
US7146600B2 (en) Method and apparatus for deriving multiple test source files from one source file
Bringmann Enhancing instruction-level parallelism through compiler-controlled speculation
US6343378B1 (en) Method of making link directive file and tool for making link directive file
US6360316B1 (en) Method for fast detection of mutually exclusive predicated instructions
Alewine et al. Compiler-assisted multiple instruction rollback recovery using a read buffer
Pollock et al. Incremental compilation of optimized code

Legal Events

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

Payment date: 20091009

Year of fee payment: 11

LAPS Lapse due to unpaid annual fee