KR19990024036A - 정수 복원형 장어 명령 프로세서용 프로그램 변환장치 - Google Patents

정수 복원형 장어 명령 프로세서용 프로그램 변환장치 Download PDF

Info

Publication number
KR19990024036A
KR19990024036A KR1019980035360A KR19980035360A KR19990024036A KR 19990024036 A KR19990024036 A KR 19990024036A KR 1019980035360 A KR1019980035360 A KR 1019980035360A KR 19980035360 A KR19980035360 A KR 19980035360A KR 19990024036 A KR19990024036 A KR 19990024036A
Authority
KR
South Korea
Prior art keywords
integer
instruction
size
command
eel
Prior art date
Application number
KR1019980035360A
Other languages
English (en)
Other versions
KR100496946B1 (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 KR19990024036A publication Critical patent/KR19990024036A/ko
Application granted granted Critical
Publication of KR100496946B1 publication Critical patent/KR100496946B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • G06F9/30167Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30149Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • 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 or look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/3822Parallel decoding, e.g. parallel decode units
    • 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 or look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching
    • G06F9/3832Value prediction for operands; operand history buffers
    • 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 or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3853Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

직렬형 어셈블러 코드(42) 중의 정수(定數) 중 목적으로 하는 장어 명령(Very Long Instruction Word : 이하, VLIW라 함)의 연산에 들어가지 않은 것을 특정하고, 그 연산을 초과하는 정수의 부분을 VLIW 프로세서가 구비하는 전용 정수 버퍼(107)에 저장하는 분할정수 사용명령과 저장후의 정수를 사용하여 연산하는 분할정수 사용명령으로 분할하는 정수 분할부(12)와, 분할후의 직렬형 어셈블러 코드(42)에 대하여 각 명령의 실행순서에 기초하는 의존 그래프를 생성하는 의존 그래프 생성부(20)와, 그 의존 그래프에 따라 병렬화 어셈블러 코드를 생성하기 위한 명령의 순서화를 행하는 명령 순서화부(21)를 갖는다.

Description

정수 복원형 장어 명령 프로세서용 프로그램 변환장치
본 발명은 고급언어로 기술된 소스 프로그램을 번역하여 연결 편집함으로써 장어 명령(Very Long Instruction Word ; 이하, VLIW라 함) 프로세서를 대상으로 하는 실행가능 코드를 생성하는 프로그램 변환장치 및 기록매체에 관한 것으로, 특히 소스 프로그램중의 정수를 포함하는 명령을 분할하여 병렬화 스케쥴링하는 기술에 관한 것이다.
VLIW 프로세서는 내부에 복수의 연산 유니트를 구비하여 1개의 VLIW에 배치된 복수의 연산을 동시 병렬로 실행한다. 이러한 VLIW는 프로그램 변환장치, 즉 컴파일러에 의해 소스 프로그램에 있어서의 연산 레벨에서의 병렬성이 검출되어 스케쥴링된 후에 생성된 것이다.
그런데 VLIW는 고정길이 명령이기 때문에 코드효율이 좋지 않다. 요컨대 VLIW 중에 무효명령(nop)이나 무의미한 코드가 삽입되는 일이 많다. 이러한 낭비영역의 발생을 피하기 위한 프로세서로서, 본원 발명과 동일한 출원인의 특허출원(일본국 특원평 9-159058이나 일본국 특원평 9-159059)에 개시(開示)된 VLIW 프로세서가 있다.
이들 VLIW 프로세서는 전용 정수 버퍼를 갖고, 원래 1개의 명령에 포함되어 있던 정수(定數)의 전부 또는 부분 자릿수를 분리하여 추출한 것(이하, 「분할정수」라 함)이 다른 VLIW에 배치된 프로그램에서도 실행시에 그들 분할정수를 정수 버퍼에 축적(자릿수 방향으로 연결)함으로써, 원래의 정수로 복원하고, 복원된 정수를 분기장소나 연산대상으로서 사용하는 기능을 갖는다(이하, 이러한 기능을 갖는 VLIW 프로세서를 「정수 복원형 VLIW 프로세서」라 함). 이에 의해 이들 정수 복원형 VLIW 프로세서를 대상으로 하는 컴파일러는 프로그램중의 긴 정수를 분할하고, 분할된 정수로 낭비영역을 채워 둘 수 있으므로, 프로그램의 코드효율이 향상된다는 효과가 있다.
그러나 상기 정수 복원형 VLIW 프로세서에 대응하는 컴파일러는 아직 제안되어 있지 않다.
이러한 컴파일러에 요구되는 기능은 프로그램중에 나타나는 긴 정수를 분할하고, 복수의 VLIW에 분산하여 적절히 배치함으로써 낭비영역의 발생을 억제한 실행가능 코드를 생성하는 것이지만, 그 전제로서 복수의 연산이 병렬 실행되는 상황하에서 분할하여 배치되어 있던 정수가 반드시 복원되어 예정되어 있던 명령에 의해 사용되는 것이 보증되지 않으면 안 된다.
따라서 본 발명은 이러한 문제점을 감안하여 이루어진 것이며, 상기 정수 복원형 VLIW 프로세서를 대상으로 하는 컴파일러나, 정수 복원형 VLIW 프로세서에 매우 적합한 실행가능 코드를 제공하는 것을 목적으로 한다.
도 1은 본 발명에 관한 컴파일러가 대상으로 하는 프로세서(100)의 아키텍처의 일례를 도시한 블록도.
도 2의 (a) 및 (b)는 동 컴파일러가 생성하는 VLIW의 2 종류의 포맷을 도시한 도면.
도 3의 (a)∼(c)는 동 VLIW 중의 12 비트 연산에서의 3종류의 포맷을 도시한 도면.
도 4의 (a) 및 (b)는 동 VLIW 중의 24 비트 연산에서의 2종류의 포맷을 도시한 도면.
도 5는 동 컴파일러의 구성 및 관련되는 입출력 데이터를 도시한 블록도.
도 6은 동 컴파일러의 정수 분할부(12)에서의 처리순서를 도시한 흐름도.
도 7은 동 컴파일러의 의존 그래프 생성부(20)에서의 처리순서를 도시한 흐름도.
도 8은 동 컴파일러의 명령 순서화부(21)에서의 처리순서를 도시한 흐름도.
도 9는 동 컴파일러의 링커부(17)의 상세한 구성을 도시한 블록도.
도 10은 동 링커부(17)의 명령 삽입부(23)에서의 처리순서를 도시한 흐름도.
도 11의 (a)∼(c)는 제 1 구체예에 관한 일련의 입출력 코드 및 관련 데이터를 도시한 도면.
도 12는 도 11의 (b)에 도시된 직렬형 어셈블러 코드가 병렬화 스케쥴링부(13)에 입력된 경우에 의존 그래프 생성부(20)가 생성하는 최종적인 의존 그래프.
도 13은 통상의 컴파일러의 구성을 도시한 블록도.
도 14는 동 컴파일러의 의존 그래프 생성부(920)가 생성하는 의존 그래프를 도시한 도면.
도 15는 동 컴파일러의 명령 순서화부(921)가 생성하는 VLIW를 도시한 도면.
도 16은 동 컴파일러가 생성하는 병렬화 어셈블러 코드를 도시한 도면.
도 17의 (a)∼(g)는 본 발명의 제 2 구체예에 관한 일련의 입출력 코드 및 관련 데이터를 도시한 도면.
도 18의 (a)∼(e)는 한번 생성된 배치정보(40)를 다시 정수 분할부(12)에 입력한 경우의 각 구성요소가 생성하는 제 2 구체예에 관한 일련의 입출력 코드나 관련 데이터를 도시한 도면.
도 19의 (a)∼(e)는 제 3 구체예에 관한 일련의 입출력 코드 및 관련 데이터를 도시한 도면.
도 20의 (a)∼(f)는 제 4 구체예에 관한 일련의 입출력 코드 및 관련 데이터를 도시한 도면.
도 21의 (a) 및 (b)는 본 발명의 정수 분할부(12)의 기능을 2종류의 다른 관점에서 표현할 수 있는 것을 설명하는 도면.
도 22는 본 발명의 컴파일러로 생성된 장어 명령열이 기록된 CD-R0M의 개관을 도시한 도면.
상기 목적을 달성하기 위해 본 발명에 관한 컴파일러는 직렬로 나열된 명령으로 된 명령열을 복수의 명령을 동시 병렬로 실행하는 프로세서를 대상으로 하는 장어 명령열로 변환하는 컴파일러로서, 입력된 상기 명령열 중의 정수를 이용한 명령을 복수의 명령으로 분할하는 분할단계와, 분할후의 명령열에 포함되는 각 명령의 실행순서에 기초하는 의존관계를 해석하는 해석단계와, 해석된 의존관계를 준수하면서 분할후의 상기 명령열을 동시 병렬로 실행할 수 있는 복수의 명령을 단위로 하는 상기 장어 명령열로 순서화하는 순서화 단계를 포함하는 것을 특징으로 한다.
이에 따라 소스 프로그램중의 정수를 이용한 명령은 보다 사이즈가 작은 2 이상의 명령으로 분할되어 병렬화 스케쥴링이 행해지기 때문에, 정수 복원형 VLIW 프로세서에 매우 적합한 컴파일러가 실현된다. 요컨대 낭비영역을 갖는 VLIW의 생성이 억제된다.
여기에서 상기 분할단계는 정수를 이용한 상기 명령이 상기 장어 명령을 구성하는 단위 연산 필드에 들어가는 사이즈인지의 여부를 판정하는 명령 사이즈 판정 서브단계와, 단위 연산 필드에 들어가는 사이즈가 아니라고 판정한 경우에 상기 명령을 상기 단위 연산 필드에 들어가는 사이즈의 복수의 명령으로 분할하는 분할 서브단계를 포함한다고 할 수 있다.
이에 따라 목적으로 하는 VLIW에 들어가지 않는 사이즈의 명령만이 분할되어 병렬화 스케쥴링되므로, 목적으로 하는 VLIW와 전혀 관계없는 사이즈의 명령을 포함하는 소스 프로그램에서도 분할처리는 필요 최소한의 명령에 대해서만 행하여지며 컴파일에 필요한 처리시간이 단축된다.
또한 상기 분할 서브단계에서는 정수를 이용한 상기 명령을 그 정수를 상기 프로세서가 구비하는 기억 버퍼에 저장하는 명령과 저장된 상기 정수를 이용하는 명령으로 분할한다고 할 수 있다.
이에 따라 명령중의 정수 전부가 정수버퍼에 저장되므로, 그 정수를 사용하는 명령중에는 정수를 오퍼랜드로서 포함시킬 필요가 없어지고, 연산 코드만으로 된 작은 사이즈의 연산필드를 갖는 VLIW에 대응된 컴파일러가 실현된다.
또한 상기 분할 서브단계에서는 정수를 이용한 상기 명령을 그 정수를 분할하여 얻어지는 분할정수를 상기 프로세서가 구비하는 기억버퍼에 저장하는 명령과 저장된 상기 분할정수를 이용하는 명령으로 분할한다고 할 수 있다.
이에 따라 목적으로 하는 VLIW에 배치할 수 있는 정수영역의 사이즈를 초과한 분할정수만을 정수버퍼에 저장해 두고, 뒤의 명령에 의해 사용할 수 있으므로, 작은 사이즈의 오퍼랜드 지정을 포함하는 연산필드를 갖는 VLIW에 대응된 컴파일러가 실현된다.
또한 상기 컴파일러는 상기 분할 서브단계에서 분할 생성된 2 이상의 명령이 상기 순서화 단계에서의 순서화에 의해 동일한 장어 명령으로 배치된 경우에 그들 명령을 결합하는 결합단계를 추가로 포함하는 것으로 할 수 있다.
이에 따라 1개의 명령이어야 할 것(분할할 필요가 없는 명령)이 2 이상의 명령으로 분할된 후에 다른 VLIW의 연산에 배치되어 실행되는 것에 의한 실행속도의 저하라는 불량의 발생이 회피되거나, 분할정수 설정명령이 잘못된 분할정수 사용명령과 결합되는 것이 방지된다.
또한 상기 명령 사이즈 판정 서브단계에서는, 상기 정수의 최종적인 사이즈가 결정되어 있지 않은 경우에는 그 사이즈를 가정하여 상기 판정을 행하고, 상기 컴파일러는 또한 정수의 최종적인 사이즈를 결정하면서 복수의 장어 명령열을 연결 편집하는 정수 사이즈 결정단계와, 결정된 정수의 사이즈가 상기 명령 사이즈 판정 서브단계에서 가정된 그 정수의 사이즈보다 큰 경우에 그 차분 사이즈에 상당하는 분할정수를 상기 기억버퍼에 보충하여 저장하는 명령을 생성하여 상기 장어 명령열에 삽입하는 삽입단계를 포함하는 것으로 할 수 있다.
이에 따라 컴파일이나 어셈블러시에 있어서 레이블 등의 사이즈를 해결할 수 없기 때문에 발생하는 분할처리와 링크처리에서의 부정합(不整合)이 해소되므로, 복수의 컴파일 단위에서 생성된 오브젝트 모듈을 링크하는 등의 프로그램 개발에 대응된 컴파일러가 실현된다.
또한 상기 명령 사이즈 판정 서브단계에서는, 상기 정수의 최종적인 사이즈가 결정되어 있지 않은 경우에는 그 사이즈를 상기 프로세서에서 이용되는 최대의 어드레스 사이즈나 정수 사이즈로 가정하거나, 사용빈도가 가장 높은 어드레스 사이즈나 정수 사이즈로 가정하는 것으로 할 수 있다.
이에 따라 상기 가정에 기초하는 부정합의 발생빈도가 억제되므로 무효명령이 삽입된 VLIW의 생성빈도도 억제된다.
또한 상기 컴파일러는 상기 정수 사이즈 결정단계 후에 다시 상기 분할단계를 실행시키고, 상기 분할단계 중의 상기 명령 사이즈 판정 서브단계에서는 상기 정수 사이즈 결정단계에서 결정된 정수가 최종적인 사이즈를 고려하여 상기 판정을 행한다고 할 수 있다.
이에 따라 명령의 분할시에 있어서는 최종적인 레이블의 사이즈가 고려되므로, 이미 상기 명령의 삽입은 불필요해지고 코드 사이즈 및 실행시간이 단축화된 실행가능 코드가 생성된다.
또한 상기 컴파일러는 상기 두 번째의 분할단계에 이어서 다시 상기 해석단계와 상기 순서화 단계를 실행시킨다고 할 수 있다.
이에 따라 적정한 정수분할에 덧붙여 병렬화 스케쥴링에 의한 최적화가 반복되게 되므로, 더욱 코드 효율이 높은 실행가능 코드가 생성된다는 효과가 있다.
또한 본 발명에 관한 실행가능 코드는, 복수의 명령을 동시 병렬로 실행하는 프로세서를 대상으로 하는 장어 명령열이며, 상기 장어 명령열중의 하나의 장어 명령에는 상기 장어 명령열중에 암묵적으로 지정되는 상기 프로세서가 구비하는 기억버퍼에 저장되는 정수가 배치되며, 상기 하나의 장어 명령에 후속하면서 최초로 상기 기억버퍼를 참조하는 다른 하나의 장어 명령에는 상기 기억버퍼에 저장된 정수를 이용하는 명령이 배치되어 있는 것을 특징으로 한다.
이에 따라 장어 명령열은 원래 1개의 정수이던 것이나 원래 1개의 정수를 이용한 명령이던 것이 보다 사이즈가 작은 2 이상의 정수나 명령으로 분할되어 배치되며, 또한 정수 복원형 프로세서에 의해 원래의 정수나 명령으로 복원되어 실행되도록 스케쥴링되어 있으므로 정수 복원형 VLIW 프로세서에 매우 적합한 실행가능 코드, 즉 낭비영역을 갖는 VLIW의 생성이 억제된 코드효율이 높은 실행가능 코드가 제공된다.
상술한 목적 및 기타의 목적과 본 발명의 특징 및 이점은 첨부도면과 관련한 다음의 상세한 설명을 통해 보다 분명해질 것이다.
( 실시예 )
이하, 본 발명에 관한 컴파일러의 실시예에 대하여 참조하면서 설명하기로 한다.
(동작환경)
본 컴파일러는 고급언어로 기술된 소스 프로그램을 번역하여 연결 편집함으로써 후술하는 VLIW 프로세서를 대상으로 하는 실행가능 프로그램을 생성하는 크로스 컴파일러이며, 범용 컴퓨터 시스템, 즉 엔지니어링 워크 스테이션이나 퍼스널 컴퓨터 등에서 실행되는 프로그램으로서 실현된다. 따라서 본 컴파일러 및 본 컴파일러에 의해 생성된 코드는 플로피 디스크나 CD-ROM, 반도체 메모리 등의 기록매체에 수납되어 배포될 수 있다.
또 본 명세서에서의 「컴파일러」는 고급언어로 기술된 소스 코드를 번역하여 어셈블러 코드를 생성하는 협의의 컴파일러가 아니라, 협의의 컴파일러에 덧붙여 어셈블러 코드를 번역하여 기계어의 오브젝트 코드를 생성하거나 그들 오브젝트 코드를 연결 편집하는 기능을 구비하는 광의의 컴파일러를 의미한다.
(대상 프로세서)
본 컴파일러의 상세한 사항을 설명하기 전에 본 컴파일러가 대상으로 하는 프로세서가 구비해야 할 기능(아키텍처 및 명령 세트)을 명시한다.
(아키텍처)
대상 프로세서는 상술한 정수 복원형 VLIW 프로세서이다.
도 1은 대상 프로세서의 아키텍처의 일례를 도시한 블록도이다.
대상 프로세서(100)는 32비트 고정길이의 VLIW를 실행하는 프로세서이며, 명령 페치회로(101), 명령 레지스터(102), 3개의 명령 해독기(l03∼105), 최대 32비트 길이의 정수를 축적하여 복원하는 전용 시프트 레지스터인 정수버퍼(107), 16개의 32비트 길이 레지스터(R0∼R15)로 이루어지는 레지스터군(108), 병렬로 동작하는 2개의 연산기(109, 110) 등을 구비한다.
이 VLIW 프로세서(100)는 분할정수가 원래의 명령으로부터 분리되어 다른 VLIW에 배치된 프로그램이어도, 실행시에 그들 분할된 정수를 정수버퍼(107)에 시프트하면서 축적하는 것으로 원래의 정수로 복원하거나 정수버퍼(107)의 저장값을 분기장소나 연산대상으로서 사용하는 기능을 갖는다. 또한 정수버퍼(107)는 그 저장값이 사용(참조)되면 다음 축적에 대비하기 위해 반드시 직후에 클리어된다(제로(zero)가 저장된다).
단, 프로그램의 실행시에 있어서, 분할정수 모두가 정수버퍼(107)에 적절한 순서로 저장됨으로써 반드시 원래의 정수로 복원되는 것이나, 복원된 정수가 예정된 명령에 의해 반드시 사용되는 것 등은 컴파일러의 책임에 있어서 보증하지 않으면 안 된다고 한다. 요컨대 이 VLIW 프로세서(100)를 대상하는 컴파일러는 명령중의 정수를 분할하여 복수의 VLIW에 분산하여 배치한 경우에는, 관련되는 다른 명령과의 실행순서 관계 등을 고려하면서 분할된 정수가 반드시 복원되어 원래의 명령에 의해 사용되도록 스케쥴링하고 VLIW를 생성해야만 한다.
또 본 명세서에서 「VLIW」 및 「장어 명령」은 이 대상 프로세서(100)에 1 사이클로 동시 병렬로 실행되는 연산의 집합을 지정한 코드를 가리키며, 단순한 「명령」(「장어 명령」을 제외함)은 1개의 연산에 대응하는 코드를 가리킨다. 또한 「정수」에는 명령중에 수치로서 명시된 값(즉치(卽値)) 외에 링크시에 확정하는 레이블도 포함된다.
도 2의 (a) 및 (b)는 본 VLIW 프로세서(100)가 실행하는 VLIW의 2종류의 포맷(3 연산 포맷 및 2 연산 포맷)을 나타낸다.
1개의 VLIW는 3개의 필드(8비트의 제 1 필드(51), 12비트의 제 2 필드(52), 12 비트의 제 3 필드(53)로 분할된다.
도 2의 (a)의 3연산 포맷에서는 제 1 필드(51)에 그 VLIW의 포맷을 특정하는 포맷정보 및 제 1 연산이 배치되고, 제 2 필드(52)에 제 2 연산이 배치되며, 제 3 필드(53)에 제 3 연산이 배치된다.
도 2의 (b)의 2연산 포맷에서는 제 1 필드(51)에 포맷정보 및 제 1 연산이 배치되고, 제 2 필드(52)와 제 3 필드(53)에 걸치는 24비트 영역에 제 2 연산이 배치된다.
포맷정보는 상기 2종류의 포맷을 구별하는 것 외에 상기 정수버퍼(107)에 축적하여 저장할 정수만이 배치되어 있는 필드(제 2 필드(52), 제 3 필드(52, 53))를 특정하는 것으로 한다.
제 1 연산은 분기명령으로 한정되는 것으로 한다. 이 때의 분기 레이블(분기장소 어드레스)은 정수버퍼(107), 제 2 필드(52), 제 3 필드(53) 및 그들의 조합에 의해 특정되는 것으로 한다.
제 2 및 제 3 연산은 분기를 제외하는 일반적인 전송·연산명령으로 한다. 단, 로드/스토어 등의 메모리 액세스를 수반하는 명령은 제 2 및 제 3 연산중 어느 하나에 한정된다고 한다. 이들 분기를 제외하는 일반적인 전송·연산명령은 12비트 길이와 24비트 길이의 2종류 중 어느 하나이다. 전송·연산명령은 기본적으로는 12비트로 표현되지만 비트 길이가 긴 오퍼랜드가 필요한 경우에는 24비트로 표현된다.
도 3의 (a)∼(c)는 12 비트 연산에서의 3종류의 포맷을 도시한다. 도 3의 (a)는 레지스터간 연산의 포맷, 도 3의 (b)는 레지스터와 4비트 정수를 이용한 연산의 포맷, 도 3의 (c)는 정수버퍼(107)에 저장하는 12비트의 분할정수만을 지정한 포맷을 도시한다.
도 4의 (a) 및 (b)는 24 비트 연산에서의 2종류의 포맷을 도시한다. 도 4의 (a)는 레지스터와 16비트 정수를 이용한 연산의 포맷, 도 4의 (b)는 정수버퍼(107)에 저장하는 24비트의 분할정수만을 지정한 포맷을 도시한다.
(명령세트)
본 VLIW 프로세서(100)의 명령세트중 주된 명령을 설명하기로 한다.
「(예 1 ) mov 0x1234 , R0」
16비트 길이의 정수 0x1234(0x는 16진수인 것을 나타냄)를 레지스터(R0)에 설정하는 전송명령이며 일반적인 프로세서의 명령과 동일하다.
이 명령은 16비트 길이의 정수를 갖기 위해 24비트 연산에 속한다. 따라서 이 명령을 포함하는 VLIW에는 이미 다른 전송·연산명령을 배치할 수 없다.
「(예 2) sfst 0x1234 : 12u」
16비트 정수 0x1234중의 상위 12비트 (0x1234 : 12u)를 상술한 정수버퍼(107)에 시프트하면서 설정하는 전송명령이며, 분할정수 설정명령의 하나이다.
여기에서 「분할정수 설정명령」이란 분할정수를 암묵적으로 정해진 기억영역(정수버퍼(107))에 축적하면서 저장하는 명령을 말하며, 본 VLIW 프로세서(100)에 특유의 명령중 하나이다. 또한 분할정수는 구체적으로는 분기명령에 이용되는 분기 레이블의 전부나 부분 자릿수, 전송·연산명령에 이용되는 정수의 부분 자릿수 등이 해당한다.
이 명령의 최종적인 실행가능 코드는 이 명령이 배치된 필드에는 상기 12비트 길이의 분할정수만(12 비트 연산)을 배치하고, 그 취지를 지정하는 포맷정보를 제 1 필드(51)에 배치한 코드이다. 따라서 이 명령을 포함하는 VLIW에는 다른 12 비트 연산을 또한 1개만 포함할 수 있다.
「(예 3) mov 0x1234 : 4L , R0」
이미 정수버퍼(107)에 저장되어 있는 분할정수를 상위 12비트로 하고, 이 명령으로 지정되어 있는 정수 0x1234의 하위 4비트(0x1234 : 4L)를 하위 4비트로서 결합하여 얻어지는 16비트 길이의 정수를 레지스터(R0)에 설정하는 전송명령이며, 분할정수 사용명령중 하나이다. 여기에서 「분할정수 사용명령」이란 암묵적으로 정해진 기억영역(정수버퍼(107))에 저장된 분할정수를 이용하는 명령을 말하며, 본 VLIW 프로세서(100)에 특유의 명령중 하나이다.
이 예 3의 명령은 12 비트 연산에 속한다. 따라서 이 명령을 포함하는 VLIW에는 다른 12 비트 연산을 또한 1개만 포함할 수 있다.
또 상술한 예 l의 명령에 의한 실행결과는 예 2의 명령이 실행된 후에 예 3의 명령이 실행된 경우의 실행결과와 동일하게 된다. 따라서 컴파일러는 예 1의 24비트 길이 명령 대신에 그것을 분할하여 얻어지는 2개의 12비트 길이 명령, 즉 예 2의 분할정수 설정명령과 예 3의 분할정수 사용명령을 생성해 둘 수 있게 된다. 이에 따라 예를 들면 1개의 필드분의 낭비영역이 발생하는 경우에 그 영역을 상기 분할정수 설정명령으로 채워둠으로써 코드효율이 향상된다.
(컴파일러의 구성)
도 5는 본 컴파일러의 구성 및 관련되는 입출력 데이터를 도시한 블록도이다.
본 컴파일러는 크게 나누어 3가지의 그룹, 즉 (ⅰ) 고급언어로 쓰여진 소스 코드(41)로부터 직렬형 어셈블러 코드(42)를 생성하는 그룹(컴파일러 상류부(10), 어셈블러 코드 생성부(11))과, (ⅱ) 직렬형 어셈블러 코드(42)에 대하여 본 VLIW 프로세서(100)에 특유의 병렬화 스케쥴링을 실시함으로써 병렬화된 어셈블러 코드(43)나 그 오브젝트 코드(44a∼44b) 등을 생성하는 그룹(정수 분할부(12), 병렬화 스케쥴링부(13), 정수 결합부(14), 코드 출력부(15) 및 병렬화 어셈블러부(16))과, (ⅲ) 복수의 재배치 가능한 오브젝트 코드(44a∼44b)를 연결 편집함으로써 최종 실행가능 코드(46)를 생성하는 그룹(링커부(linker)(17))으로 구성된다.
또 재배치 정보(45a∼45b) 및 배치정보(40)는 각각 링커부(17)에 입력/링커부(17)로부터 출력되는 레이블에 관한 정보로서, 최종적인 레이블 어드레스를 해결하기 위한 정보로서 이용되는 것 외에, 다시 정수 분할부(12)에 입력함으로써 최적의 코드를 생성하기 위해 이용되기도 한다. 또한 도시되어 있는 입출력 데이터(40∼45), 기타 중간언어 데이터는, 상기 컴퓨터 시스템의 하드디스크에 파일로서 배치되거나 메모리 상에 일시 데이터로서 배치된다.
(컴파일러 상류부(10))
컴파일러 상류부(10)는 파일형식으로 보존되어 있는 고급언어 오브젝트 코드(41)를 판독하여 구문해석 및 의미해석을 행한 후에 내부형식 코드를 생성한다. 또 필요에 따라 최종적으로 생성되는 실행가능 코드의 사이즈나 그 실행시간이 단축되도록 그 내부형식 코드를 최적화한다. 여기에서의 처리는 통상의 컴파일러(정수 복원형 VLIW 프로세서가 아닌 일반 프로세서를 대상으로 하는 컴파일러)가 갖는 컴파일러 상류부에 의한 처리와 동일하다.
(어셈블러 코드 생성부(11))
어셈블러 코드 생성부(11)는 컴파일러 상류부(10)에 의해 생성되어 최적화된 내부형식 코드로부터 직렬형 어셈블러 코드(42)를 생성한다. 여기에서 「직렬형 어셈블러 코드」란 단일 연산의 어셈블러 명령이 직렬로 나열된 코드이며, 통상의 프로세서(1개의 연산 유니트를 구비하는 프로세서)를 대상으로 하는 어셈블러 코드를 말한다. 여기에서의 처리는 통상의 컴파일러가 갖는 어셈블러 코드 생성부에 의한 처리와 동일하다.
(정수 분할부(12))
정수 분할부(12)는 어셈블러 코드 생성부(11)가 생성한 어셈블러 코드(42)를 판독하며, 이 중에 포함되는 모든 긴 정수 사용명령을 분할정수 설정명령과 분할정수 사용명령으로 분할한다. 요컨대 각 긴 정수 사용명령을 결과적으로 동일한 처리를 행하는 2종류의 명령(분할정수 설정명령과 분할정수 사용명령)으로 치환한다. 이 때 긴 정수 사용명령중의 긴 정수의 길이에 의해서는 2개 이상의 분할정수 설정명령과 분할정수 사용명령으로 분할되는 경우도 있다.
여기에서 「긴 정수」란 1개의 VLIW에 포함되는 단위 연산 필드에서 기술할 수 없는 길이의 정수를 말하며, 구체적으로는 (ⅰ) 분기명령에 사용되는 경우에 있어서는 제 1 연산필드에 들어가지 않는 정수(1비트 이상으로 표현되는 분기 레이블) 및 (ⅱ) 전송·연산명령에 사용되는 경우에 있어서는 도 3의 (b)에 도시된 12 비트 연산에 들어가지 않는 정수(5비트 이상으로 표현되는 정수)를 말한다. 또한 「긴 정수 사용명령」이란 긴 정수를 이용하는 명령을 말한다.
한편 1개의 VLIW에 포함되는 단위 연산 필드로 기술할 수 있는 정수, 구체적으로는 전송·연산명령에 사용되는 정수로서 4비트 이하로 표현되는 정수를 「짧은 정수」라 하고, 짧은 정수를 이용하는 명령을 「짧은 정수 사용명령」이라 한다. 또 분할정수 사용명령은 형식적으로는 짧은 정수(4비트 이하의 자리수의 정수)를 이용하여 표현된 명령이므로 짧은 정수 사용명령에 속한다.
정수 분할부(12)에서의 처리의 상세한 것은 이하와 같다.
도 6은 정수 분할부(12)에서의 처리순서를 도시한 흐름도이다.
정수 분할부(12)는 어셈블러 코드 생성부(11)가 생성한 어셈블러 코드(42)중의 모든 명령에 대하여 이하의 처리(단계 S2∼S4)를 반복한다(단계 S1∼S5).
우선 정수 분할부(12)는 착안하는 명령(이하, 간단히 「착안명령」이란 함)에 포함되는 레이블의 사이즈(레이블이 나타내는 어드레스를 표현하기 위해 필요한 비트수)를 결정한다(단계 S2).
구체적으로는 그 레이블이 같은 컴파일 단위의 소스 코드(41) 내에 존재하기 때문에 사이즈를 알 수 있는 국소 레이블인 경우나 배치정보(40) 등에 의해 사이즈가 명시되어 있는 경우에는, 그 사이즈를 다른 컴파일 단위의 소스 코드(41) 내에 존재하기 때문에 사이즈를 알 수 없는 외부 레이블인 경우에는 그 사이즈를 가정하여 레이블에 사이즈 정보를 부가한다. 또 본 실시예에서는 사이즈를 알 수 없는 레이블은 사용빈도가 가장 높은 어드레스 사이즈로서 통계적으로 얻어지고 있는 16비트 길이라고 가정하는 것으로 한다.
다음으로 착안명령이 긴 정수 사용명령인지의 여부를 판단한다(단계 S3).
긴 정수 사용명령인 경우에는 그 긴 정수 사용명령을 분할정수 설정명령과 분할정수 사용명령으로 분할한다(단계 S4).
구체적으로는 긴 정수 사용명령이 분기명령인 경우에는 그 긴 정수(분기 레이블이 나타내는 어드레스)를 하위로부터 차례로 12비트 단위로 분할하고, 얻어진 분할정수를 상위로부터 차례로 정수버퍼(107)에 설정하는 1개 이상의 분할정수 설정명령과 l개의 분할정수 사용명령(분기명령의 연산 코드에 상당하는 명령)을 생성하고, 그 착안명령을 그들 분할정수 설정명령 및 분할정수 사용명령으로 치환한다. 예를 들면 긴 정수가 19비트인 경우에는 리딩 제로를 부가한 24비트(12비트의 배수)의 정수로 간주하여 상위 12비트와 하위 12비트로 분할하고, 상위 12비트의 분할정수에 대한 분할정수 설정명령, 하위 12비트의 분할정수에 대한 분할정수 설정명령 및 분할정수 사용명령의 합계 3개의 명령을 이 순서로 생성하여 이들로 착안명령을 치환한다.
한편 긴 정수 사용명령이 전송·연산명령인 경우에는 그 긴 정수중 짧은 정수(하위 4비트분)를 초과하는 부분을 하위로부터 차례로 12비트 단위로 분할하여, 얻어진 분할정수를 상위로부터 차례로 정수버퍼(107)에 설정하는 1개 이상의 분할정수 설정명령과 1개의 분할정수 사용명령(전송·연산명령의 연산 코드와 짧은 정수를 나타내는 오퍼랜드를 포함하는 명령)을 생성하고, 그 착안명령을 그들 분할정수 설정명령 및 분할정수 사용명령으로 치환한다. 예를 들면 긴 정수가 19비트인 경우에는 리딩 제로를 부가한 28비트(12비트×n+4비트)의 정수로 간주하여 상위 12비트와 계속되는 중위 12비트와 하위 4비트로 분할하여, 상위 12비트의 분할정수에 대한 분할정수 설정명령, 중위 12비트의 분할정수에 대한 분할정수 설정명령 및 하위 4비트의 짧은 정수를 포함하는 분할정수 사용명령의 합계 3개의 명령을 이 순서로 생성하여 이들 착안명령을 치환한다.
또 긴 정수 사용명령이 분기명령인지 전송·연산명령인지의 따라 긴 정수의 분할방법을 바꾸고 있는 것은 분기명령이 배치되는 제 1 필드(51)에는 분할정수(분기 레이블)를 포함할 수 없지만, 전송·연산명령이 배치되는 제 2 및 제 3 필드(52 및 53)에는 분할정수(짧은 정수)를 포함할 수 있기 때문이다.
(병렬화 스케쥴링부(13))
병렬화 스케쥴링부(13)는 정수 분할부(12)에 의해 긴 정수 사용명령이 배제된 후의 직렬형 어셈블러 코드를 입력으로 하고, 어셈블러 명령레벨에서의 병렬성을 검출하여, 도 2의 (a)의 3연산 포맷 또는 도 2의 (b)의 2연산 포맷 중 어느 하나에 대응하는 VLIW에 패킹된 병렬화 어셈블러 코드를 생성한다. 여기에서 「병렬화 어셈블러 코드」란, VLIW 프로세서를 대상으로 하는 어셈블러 코드를 말하며 병렬실행가능한 복수의 연산을 특정하도록 어셈블러 명령이 병렬이면서 직렬로 나열되어 있다.
이 병렬화 스케쥴링부(13)는 또한 의존 그래프 생성부(20)와 명령 순서화부(21)로 이루어진다.
(의존 그래프 생성부(20))
의존 그래프 생성부(20)는 정수 분할부(12)로부터 출력된 어셈블러 코드에 대하여 의존 그래프를 생성한다. 여기에서 「의존 그래프」란 어셈블러 명령을 노드(마디)로 하여 명령간의 실행순서 관계를 링크(화살표, 에지라고도 함)로서 표시한 방향이 있는 그래프이고 어셈블러 코드중의 명령의 실행순서를 규정한다.
의존 그래프 생성부(20)에서의 처리의 상세한 사항은 이하와 같다.
도 7은 의존 그래프 생성부(20)에서의 처리순서를 도시한 흐름도이다.
의존 그래프 생성부(20)는 정수 분할부(12)에 의해 긴 정수 사용명령이 배제된 후의 직렬형 어셈블러 코드중의 모든 명령에 대하여 이하의 처리(단계 S12∼S27)를 반복한다(단계 S11∼S29).
즉, 착안명령에 대한 노드를 생성한 후에(단계 S12), (ⅰ) 레지스터군(108)에 대한 배타제어에 기초하는 의존 그래프의 생성(단계 S13∼S18)과, (ⅱ) 메모리에 대한 배타제어에 기초하는 의존 그래프의 생성(단계 S19∼S24)과, (ⅲ) 정수버퍼(107)에 대한 배타제어에 기초하는 의존 그래프의 생성(단계 S25∼S28)을 반복한다. 그 상세한 사항은 이하와 같다.
우선 의존 그래프 생성부(20)는 착안명령에 대응하는 노드를 생성한다(단계 S12). 구체적으로는 착안명령과 노드를 대응시키는 정보를 생성한다.
다음으로 착안명령이 레지스터를 참조하고 있는지의 여부를 판정한다(단계 S13). 여기에서 「레지스터의 참조」란 레지스터의 값을 판독하는 것을 말한다.
레지스터를 참조하고 있는 경우에는 직전의 레지스터 정의명령(그 레지스터를 정의하는 명령이며, 또한 직전의 명령)을 특정하고, 특정한 그 명령으로부터 이 착안명령에 입사하는 링크를 확장한다(단계 S14). 구체적으로는 특정한 명령에 대응하는 노드로부터 착안명령에 대응하는 노드에 입사하는 링크를 특정하는 정보를 생성한다.
여기에서 「레지스터의 정의」란 레지스터의 값을 파괴하여 새로운 값을 설정하는 것을 말한다. 또한 「직전의 명령」이란 착안명령에 선행하는 가장 가까운 명령을 말한다.
또 1개의 명령에서 복수의 레지스터를 참조하고 있는 경우에는 의존 그래프 생성부(20)는 각각의 레지스터에 대하여 상기 단계(S13, S14)에서의 처리를 반복한다. 이것은 이후의 단계에 대해서도 같다.
다음으로 의존 그래프 생성부(20)는 그 착안명령이 레지스터를 정의하고 있는지의 여부를 판정한다(단계 S15).
레지스터를 정의하고 있는 경우에는 직전의 레지스터 조작명령(그 레지스터를 조작하는 명령이며, 또한 직전의 명령)을 특정하고, 특정한 그 명령이 레지스터 정의명령인지의 여부를 판정한다(단계 S16). 여기에서 「레지스터의 조작」이란 레지스터의 정의와 참조를 포함하는 의미이다.
그 결과 레지스터 정의명령인 경우에는 그 레지스터 정의명령으로부터 착안명령에 입사하는 링크를 확장한다(단계 S17).
한편 레지스터 정의명령이 아닌 경우, 즉 레지스터 참조명령인 경우에는 그 직전의 레지스터 정의명령을 특정하고, 그 레지스터 정의명령이 배치되어 있는 위치로부터 착안명령이 배치되어 있는 위치까지의 구간에 배치된 모든 레지스터 참조명령(그 레지스터를 참조하는 명령)으로부터 착안명령에 입사하는 링크를 확장한다(단계 S18).
이상의 레지스터의 참조와 정의에 관한 처리(단계 S13∼S18)를 메모리에 대해서도 행한다(단계 S19∼24).
계속해서 의존 그래프 생성부(20)는 착안명령이 분할정수 설정명령인지의 여부를 판정한다(단계 S25).
분할정수 설정명령인 경우에는 직전의 정수버퍼 조작명령으로부터 이 착안명령에 입사하는 링크를 확장한다(단계 S26). 여기에서 「정수버퍼 조작명령」이란 정수버퍼(107)를 조작(정의 및 참조)하는 명령, 즉 분할정수 설정명령과 분할정수 사용명령을 포함하는 의미이다.
마지막으로 의존 그래프 생성부(20)는 착안명령이 분할정수 사용명령인지의 여부를 판정한다(단계 S27).
분할정수 사용명령인 경우에는 직전의 정수버퍼 조작명령으로부터 이 착안명령에 입사하는 링크를 확장한다(단계 S28)
또 레지스터에 관한 의존 그래프의 생성처리(단계 S13∼S18)와 정수버퍼(107)에 관한 의존 그래프의 생성처리(단계 S25∼S28)가 서로 다른 것은, 정수버퍼(107)에 액세스하는 분할정수 설정명령 및 분할정수 사용명령이 어느 것이나 정수버퍼(107)의 참조와 정의의 양쪽을 수반하는 명령이기 때문이다. 요컨대 정수버퍼(107)는 시프트 레지스트로 구성되므로 분할정수 설정명령은 시프트 및 세트(참조와 정의)를 수반하는 명령이고, 또한 정수버퍼(107)는 참조된 직후에 내용이 클리어되므로 분할정수 사용명령은 참조뿐만 아니라 정의를 수반하는 명령이기 때문이다.
(명령 순서화부(21))
명령 순서화부(21)는 의존 그래프 생성부(20)에 의해 생성된 의존 그래프가 나타내는 실행순서를 준수하면서, 정수 분할부(12)로부터 출력된 직렬형 어셈블러 코드중의 각 명령을 대상 프로세서(100)의 VLIW 단위로 패킹하면서 순서화해 간다. 이 때 각 명령이 가능한 한 병렬로 실행되도록, 또한 실행시간이 단축되도록 명령을 순서화한다.
명령 순서화부(21)에서의 처리의 상세한 사항은 이하와 같다.
도 8은 명령 순서화부(21)에서의 처리순서를 도시한 흐름도이다.
명령 순서화부(21)는 직렬형 어셈블러 코드중의 모든 명령에 대한 순서화를 마칠 때(VLIW 단위로 패킹하고, 이 병렬화 스케쥴링부(13)로부터 출력하여 마침)까지 이하의 처리(단계 S42∼S50)를 반복한다(단계 S41∼S51).
우선 명령 순서화부(21)는 의존 그래프를 조사함으로써, 그 현시점에서 출력가능한 모든 명령을 출력가능 명령집합에 넣는다(단계 S42). 여기에서 「출력가능 명령」이란 의존하는 선행명령이 없기 때문에 독립하여 실행가능(출력이 가능)으로 판단되는 명령을 말하며, 구체적으로는 (ⅰ) 의존 그래프에서 자기 노드로 입사하는 링크가 없는 경우 및 (ⅱ) 자기 노드로 입사하는 링크원의 노드에 대응하는 명령이 모두 출력을 마쳤거나 또는 분할정수 설정명령인 경우에 있어서의 착안명령이 해당한다.
또한 「출력가능 명령집합」이란 그 시점에서의 출력가능 명령의 모두를 모은 것을 말한다. 또 링크원이 분할정수 설정명령인 경우가 포함되는 것은, 만약 분할정수 설정명령과 분할정수 사용명령이 1개의 VLIW에 포함되게 된 경우에도, 그 명령은 후술하는 바와 같이 정수 결합부(14)에 의해 1개의 명령으로 치환되므로 문제가 발생하지 않기 때문이다.
출력가능 명령집합이 작성되어 있으면(단계 S42), 그 출력가능 명령집합이 비게 될 때까지 그들 명령중 하나를 선택하고, 그 집합으로부터 제거해 가는 처리(단계 S45∼S48)를 반복한다(단계 S43∼S49).
단, 1개의 VLIW가 완성된 시점을 갖고, 그 반복 루프(단계 S43∼S49)를 빼서 다시 출력가능 명령집합을 재생성하고(단계 S42), 같은 처리(단계 S45∼S48)를 반복한다(단계 S43∼S49). 이것은 완성된 VLIW를 구성하는 명령이 출력가능 명령집합으로부터 제거된 경우에는 그 시점에서 새로운 출력가능 명령이 발생하고 있을 가능성이 있기 때문이다.
그 때문에 우선 출력예정 명령집합에 들어 있는 명령에 의해 1개의 VLIW가 완성될지(더 이상의 명령을 넣을 수 없는지)를 판정한다(단계 S44).
여기에서 「출력예정 명령」이란 최종적으로 1개의 VLIW를 구성할 수 있는 병렬 실행가능한 명령을 말하며, 「출력예정 명령집합」이란 최대 개수의 출력예정 명령(1개의 VLIW에 배치 가능한 최대 개수의 출력예정 명령)을 모으기 위한 명령의 일시적인 배치장소이다. 요컨대 상기의 출력가능 명령집합에 들어가게 된 후에, 계속해서 이 출력예정 명령집합에 옮겨진 명령만이 최종적인 VLIW를 구성하는 명령으로서 이 병렬화 스케쥴링부(13)로부터 출력되게 된다.
상기 단계 S44에서 1개의 VLIW가 완성되지 않는다고 판정된 경우에는, 명령 순서화부(21)는 출력가능 명령집합으로부터 실행시간 및 코드 사이즈를 단축하는 데 적합한 명령을 1개 선택한다(단계 S45). 구체적으로는 의존 그래프를 참조하여 이 기본블록으로부터 생성되는 최종적인 VLIW의 총 개수를 기대값으로서 산출하여 그 기대값이 최소로 되는 명령을 1개 선택한다.
계속해서 선택된 그 명령(착안명령)을 출력예정 명령집합에 넣는 것이 가능한지의 여부를 판정한다(단계 S46). 여기에서 만약에 그 시점에서 출력예정 명령집합에 이미 들어가 있는 명령이 존재할 경우에는, 이미 들어가 있는 명령과 그 착안명령을 병합한 명령이 1개의 VLIW를 구성할 수 있는지(출력가능한지)의 여부를 판정한다(단계 S46).
예를 들면 이미 12비트 길이의 명령이 출력예정 명령집합에 있고, 상기 단계 S45에서 선택된 명령 길이가 24비트인 경우에는 1개의 VLIW에 들어가지 않으므로 출력불가로 판정한다. 또한 자기 노드로 입사하는 링크원의 분할정수 설정명령이 출력이 끝난 것이 아니며, 또한 출력예정 명령집합에 없는 경우도 출력불가로 판정한다. 후자의 경우는 분할정수 설정명령이 출력되지 않고 분할정수 사용명령만이 출력된다는 잘못된 코드의 생성을 피하기 위해서이다.
상기 단계 S46에서 긍정적으로 판정된 경우에는 그 착안명령을 출력가능 명령집합으로부터 출력예정 명령집합에 옮긴다(단계 S47, S48).
한편 상기 단계 S46에서 부정적으로 판정된 경우에는 그 시점에서 출력할 수 있을 가능성이 없어진 것이 되므로, 그 착안명령을 출력가능 명령집합으로부터 제거한다(단계 S48).
단계 S44에서 출력예정 명령집합에 들어가 있는 명령에 의해 1개의 VLIW가 완성되었다고 판정된 경우에는, 그들 모든 명령을 출력예정 명령집합으로부터 제거한 후에 1개의 VLIW로서 출력한다(단계 S50). 또 단계 S49로부터 단계 S50에 처리순서가 흐른 경우에 출력예정 명령집합에 남겨진 명령만으로는 1개의 VLIW의 모든 연산필드가 채워지지 않을 때가 생기지만, 이 때에는 비어 있는 연산에 무효명령(nop)을 삽입한 VLIW를 출력한다.
이렇게 하여 병렬화 스케쥴링부(13)에 입력된 직렬형 어셈블러 코드는 VLIW 단위에 패킹된 병렬화 어셈블러 코드로 되어 출력되어 간다.
(정수 결합부(14))
정수 결합부(14)는 (ⅰ) 정수 분할부(12)에 의한 분할에 의해 동일한 긴 정수 사용명령으로부터 생성된 분할정수 설정명령과 분할정수 사용명령이 병렬화 스케쥴링부(13)에 의해 동일한 VLIW(동일한 사이클)에 패킹된 경우 및 (ⅱ) 마찬가지로 동일한 긴 정수 사용명령으로부터 생성된 복수의 분할정수 설정명령이 동일한 VLIW(동일한 사이클)에 패킹된 경우에, 각각 그들 2개의 명령을 결합한 1개의 긴 정수 사용명령 및 1개의 분할정수 설정명령으로 치환한다. 이것은 정수 분할부(12)에 의한 분할이 쓸데 없이 끝난(복수의 VLIW에 걸쳐 분할정수를 채울 필요가 없었던) 경우에 상당한다.
(코드 출력부(15))
코드 출력부(15)는 정수 결합부(14)에 의한 결합(치환)이 행해진 후의 어셈블러 코드를 내부형식으로부터 텍스트 형식으로 변환하여 파일(병렬화 어셈블러 코드(43))로서 출력한다.
(병렬화 어셈블러부(16))
병렬화 어셈블러부(16)는 코드 출력부(15)가 출력한 병렬화 어셈블러 코드(43)를 이 컴파일러가 대상으로 하는 VLIW 프로세서(100) 전용 기계어로 변환하고, 재배치 가능한 오브젝트 코드(44a∼44b)와 재배치 정보(45a∼45b)를 생성한다. 이 때 VLIW의 제 1 필드(51)에 배치하는 포맷정보를 결정한다. 예를 들면 분할정수 설정명령을 포함하는 VLIW이면 분할정수만이 배치된 필드와 그 취지를 나타내는 포맷정보에 대응하는 기계어를 생성한다.
재배치 정보(45a∼45b)는 각 오브젝트 코드(44a)에 이용되고 있는 레이블의 이름, 그 레이블이 사용하고 있는 명령이 배치되어 있는 어드레스, 그 레이블의 사이즈를 나타내는 정보로 이루어진다. 이 레이블의 사이즈는 정수 분할부(12)에 의해 결정된 사이즈(도 6의 단계 S2에서 결정된 레이블의 사이즈)이며, 외부 레이블인 경우에는 잠정적인 값(상술의 예에서는 16비트)이다.
(링커부(17))
링커부(17)는 다른 컴파일 단위로 생성된 복수의 재배치 가능한 오브젝트 코드(44a∼44b)를 1개에 연결 편집하여, 그 중에 포함되는 부정(不定) 레이블을 해결하고 대상으로 하는 VLIW 프로세서(100)용 최종적인 실행가능 코드(46) 및 배치정보(40)를 생성한다.
도 9는 링커부(17)의 상세한 구성을 도시한 블록도이다.
링커부(17)는 또한 레이블 어드레스 산출부(22), 명령 삽입부(23) 및 출력부(24)로 이루어진다.
레이블 어드레스 산출부(22)는 링커부에 입력되는 복수의 재배치 가능한 오브젝트 코드(44a∼44b)를 링크한 후의 각 레이블이 최종적인 어드레스를 산출하는 것이며, 이에 따라 레이블의 사이즈도 확정된다. 여기에서의 처리는 통상의 컴파일러가 갖는 레이블 어드레스 산출부에 의한 처리와 동일하다.
명령 삽입부(23)는 레이블 어드레스 산출부(22)에 의해 산출된 최종적인 레이블의 사이즈가 재배치 정보(45a∼45b)에 포함되는 사이즈, 즉 정수 분할부(12)에 의해 결정된 사이즈보다 커지는 경우에, 그 준비를 할, 필요한 분할정수 설정명령을 삽입한다.
도 10은 명령 삽입부(23)에서의 처리순서를 도시한 흐름도이다.
명령 삽입부(23)는 링커부(17)에 입력된 오브젝트 코드(44a∼44b) 중의 모든 레이블에 대하여 차례로 하나씩 페치하여 이하의 처리(단계 S62∼S64)를 반복한다(단계 S61∼S65).
우선 페치한 레이블(착안 레이블)에 대한 재배치 정보를 링커부(17)에 입력된 재배치 정보(45a∼45b)중에서 판독한다(단계 S62).
그리고 판독한 재배치 정보에 포함되는 착안 레이블의 사이즈보다 레이블 어드레스 산출부(22)에 의해 산출된 사이즈가 큰 지의 여부를 판단한다(단계 S63).
그 결과 큰 경우에는 부족한 사이즈에 상당하는 정수를 정수버퍼(107)에 설정해 두기 위한 분할정수 설정명령을 생성하고, 그 분할정수 설정명령과 무효명령으로 이루어지는 새로운 VLIW를 착안 레이블이 사용되고 있는 명령을 포함하는 VLIW의 직전의 위치에 삽입한다(단계 S64).
이에 따라 레이블의 사이즈에 대한 정수 분할부(12)에 의한 잠정적인 결정이 실제로 필요한 사이즈보다 작게 가정된 경우의 준비가 행해진다.
출력부(24)는 레이블 어드레스 산출부(22)에 의해 해결된 모든 레이블의 사이즈 및 그 레이블을 참조하고 있는 명령의 리스트로 이루어지는 배치정보(40)를 생성하여 명령 삽입부(23)에 의한 처리를 거친 후의 실행가능 코드(46)와 함께 출력한다.
(컴파일러의 구체적인 동작)
다음으로 본 컴파일러의 특징적인 구성요소의 동작에 대하여 구체적인 명령을 이용하여 설명한다.
(제 1 구체예)
우선 도 11의 (a)에 도시된 직렬형 어셈블러 코드(42)가 어셈블러 코드 생성부(11)에 의해 생성되어 정수 분할부(12)에 입력된 경우에 있어서의 정수 분할부(12) 및 병렬화 스케쥴링부(13)의 구체적인 동작을 설명하기로 한다.
또 도 11의 (a)에 도시된 어셈블러 명령(401, 402)의 의미는 이하와 같다.
「(명령(401)) add Rl , R2」
레지스터 R1의 값과 레지스터 R2의 값을 가산하여 그 결과를 레지스터 R2에 저장한다.
「(명령(402)) Ld (LabeL) , R3」
레이블 Label이 나타내는 메모리 어드레스에 기억된 값을 레지스터 R3에 로드한다.
(정수 분할부(12))
도 11의 (a)에 도시된 직렬형 어셈블러 코드(42)가 입력된 경우에서의 정수 분할부(12)의 동작에 대하여 도 6에 도시된 흐름도에 따라 설명하기로 한다.
정수 분할부(12)는 도 11의 (a)에 도시된 3가지의 명령 모두에 대하여 긴 정수를 분할하기 위한 처리를 반복하지만(단계 S1∼S5), 이 예에서는 명령(400 및 401)은 명령중에 레이블이나 긴 정수를 포함하지 않으므로 변화를 받지 않는다.
명령(402)에 대해서는 정수 분할부(12)는 레이블 label의 사이즈를 결정할 수 없으므로 16비트의 사이즈라고 가정한다(단계 S2).
따라서 정수 분할부(12)는 이 명령(402)이 긴 정수 사용명령이라고 판단하고(단계 S3), 이 긴 정수 사용명령(402)을 분할정수 설정명령과 분할정수 사용명령의 조(組)로 치환한다(단계 S4).
도 11의 (b)는 도 11의 (a)에 도시된 직렬형 어셈블러 코드(42)가 입력된 경우에 정수 분할부(12)가 생성하는 코드를 도시한다.
본 도면에 도시된 바와 같이 도 11의 (a)에서의 긴 정수 사용명령(402)은 분할정수 설정명령(405)과 분할정수 사용명령(406)의 조로 치환된다.
(의존 그래프 생성부(20))
지금 도 11의 (b)에 도시되는 직렬형 어셈블러 코드가 병렬화 스케쥴링부(13)에 입력되었다고 한다. 이 경우에서의 의존 그래프 생성부(20)의 동작에 대하여 도 7에 도시된 흐름도에 따라 설명하기로 한다.
의존 그래프 생성부(20)는 도 11의 (b)에 도시된 4개의 명령 모두에 대하여 차례로 같은 처리를 반복한다(단계 S11∼S29).
도 12는 도 11의 (b)에 도시된 직렬형 어셈블러 코드가 병렬화 스케쥴링부(13)에 입력된 경우에 의존 그래프 생성부(20)가 생성하는 최종적인 의존 그래프(600)를 도시한다.
「(명령(403)) mov RO, R1」
우선 의존 그래프 생성부(20)는 이 명령(403)에 대응하는 노드(601)를 생성한다(단계 S12).
이어서 이 명령(403)은 레지스터 R0을 참조하고 있으므로 레지스터 R0을 정의하기 직전의 명령으로부터 입사하는 링크를 확장하고자 하지만(단계 S13, S14), 여기에서는 선행하는 명령이 존재하지 않으므로 그와 같은 링크는 확장되지 않는다.
마찬가지로 이 명령(403)은 레지스터 R1을 정의하고 있으므로 레지스터 R1을 조작하기 직전의 명령을 특정하고자 하지만(단계 S15, S16), 선행하는 명령이 존재하지 않으므로 링크는 확장되지 않는다.
또 이 설명에서는 간단하게 하기 위해 기본블록(1개의 입구와 1개의 출구를 갖는 처리루틴)이 1개로 가정되어 있지만 복수의 기본블록을 포함하는 프로그램에 대하여 의존 그래프를 생성하는 경우이면 선행하는 기본블록을 나타내는 가상노드와 후속하는 기본블록을 나타내는 가상노드를 도입하여 확장함으로써 간단히 대응할 수 있다.
「(명령(404)) add Rl , R2」
다음으로 명령(404)이 처리대상으로 되어 이 명령(404)에 대응하는 노드(603)가 생성된다(단계 S12).
의존 그래프 생성부(20)는 이 명령(404)은 레지스터 R1을 참조하고 있는 것으로부터 레지스터 R1을 정의하고 있는 직전의 명령(403)을 특정하고, 그 명령(403)으로부터 이 명령(404)에 입사하는 링크(602)를 확장한다(단계 S13, S14).
계속해서 이 명령(404)은 레지스터 R2를 정의하고 있으므로 레지스터 R2를 조작하는 직전의 명령을 특정하고자 하지만(단계 S15, S16), 그와 같은 선행하는 명령이 존재하지 않으므로 링크는 확장되지 않는다.
「(명령(405)) sfst LabeL : 12u」
다음으로 명령(405)이 처리대상으로 되어 이 명령(405)에 대응하는 노드(604)가 생성된다(단계 S12).
이 명령(405)은 레지스터도 메모리도 조작하고 있지 않으므로 단계 S13∼S24에서의 링크의 대상으로는 되지 않는다.
이 명령(405)은 분할정수 설정명령이므로 의존 그래프 생성부(20)는 직전의 정수버퍼 조작명령을 특정하고자 하지만(단계 S25, S26), 그와 같은 선행하는 명령이 존재하지 않으므로 링크는 확장되지 않는다.
「(명령(406)) Ld (LabeL : 4L) , R3」
마지막으로 명령(406)이 처리대상으로 되어 이 명령(406)에 대응하는 노드(606)가 생성된다(단계 S12).
이 명령(406)은 레지스터 R3을 정의하고 있으므로 레지스터 R3을 조작하는 직전의 명령을 특정하고자 하지만(단계 S15, S16), 그와 같은 선행하는 명령이 존재하지 않으므로 링크는 확장되지 않는다.
다음으로 이 명령(406)은 분할정수 사용명령이므로 의존 그래프 생성부(20)는 직전의 정수버퍼 조작명령(405)을 특정하고, 그 명령(405)으로부터 이 명령(406)에 입사하는 링크(605)를 확장한다(단계 S27, S28).
이상과 같이 하여 도 12에 도시된 바와 같이 명령(403)으로부터 명령(404)에 입사하는 링크(602)와 명령(405)으로부터 명령(406)에 입사하는 링크(605)가 확장된다.
(명령 순서화부(21))
명령 순서화부(21)는 도 12에 도시된 의존 그래프가 나타내는 실행순서를 준수하면서 도 11의 (b)에 표시된 직렬형 어셈블러 코드를 병렬화한다. 이 경우 에 있어서의 명령 순서화부(21)의 동작에 대하여 도 8에 도시된 흐름도에 따라 설명한다.
명령 순서화부(21)는 도 11의 (b)에 도시된 4개의 명령(403∼406) 모두를 출력을 마칠 때까지 출력가능 명령집합을 생성하는 처리(단계 S42)와, 생성된 출력가능 명령집합의 명령을 1개씩 소비해 가는 처리(단계 S43∼S50)로 이루어지는 스케쥴링 사이클을 반복한다(단계 S41∼S51).
(제 1 회째)
우선 제 1회째의 스케쥴링 사이클에서 명령 순서화부(21)는 출력가능 명령집합으로서 3가지의 명령(403, 405 및 406)으로 이루어지는 집합을 생성한다(단계 S42). 명령(403 및 405)은 자기 노드로 입사하는 링크가 없는 명령에 상당하며, 명령(406)은 자기 노드로 입사하는 링크원의 노드에 대응하는 명령이 분할정수 설정명령인 명령에 상당하기 때문이다.
다음으로 출력예정 명령집합은 비어 있으므로 단계 S44에서 거짓(false)으로 판단하고, 계속해서 최적의 명령을 1개 선택함으로써 최초의 소비 사이클에 들어간다(단계 S45). 여기에서는 명령(403)이 선택되었다고 하자.
그리고 출력예정 명령집합은 비어 있는 것으로부터 명령 순서화부(21)는 이 명령(403)을 출력예정 명령집합에 넣은 후에(단계 S47), 출력가능 명령집합으로부터 제거한다(단계 S48).
이 시점에서 출력가능 명령집합에는 명령(405)과 명령(406)이 남아 있지만 다음으로 2회째의 소비 사이클에 들어간다(단계 S44∼S48).
출력예정 명령집합은 아직 1개의 VLIW를 생성할 만큼의 명령이 채워져 있지 않으므로 다시 단계 S44에서 거짓으로 판단하고, 계속해서 최적의 명령으로서 명령(405)을 선택한 것으로 한다(단계 S45).
선택한 명령(405)과 이미 출력예정 명령집합에 들어가 있는 명령(403)은 어느 것이나 12비트 길이의 명령이고, 1개의 VLIW를 구성할 수 있으므로 명령 순서화부(21)는 이 명령(405)을 추가로 출력예정 명령집합에 넣은 후에(단계 S47), 출력가능 명령집합으로부터 제거한다(단계 S48).
이 시점에서 출력가능 명령집합에는 명령(406)만이 남겨져 있지만 출력예정 명령집합에는 명령(403)과 명령(405)이 들어가 있으므로, 명령 순서화부(21)는 다음 단계 S44에서는 참(true)으로 판단하고, 그들 명령(403 및 405)을 출력예정 명령집합으로부터 제거한 후에 최종적인 1개의 VLIW로서 출력한다(단계 S50).
또 2회째의 소비 사이클(단계 S45)에서 최적의 명령으로서 명령(405)이 아니라 명령(406)이 선택되었다고 하면, 이 명령(406)은 자기 노드로 입사하는 링크원의 분할정수 설정명령(405)이 출력을 마친 것이 아니며, 또한 출력예정 명령집합에 없는 경우에 상당하므로 다음 단계 S46에서 거짓으로 판정되고, 출력가능 명령집합으로부터 제거되게 되어, 결과적으로 동일한 VLIW(명령(403)과 명령(405)으로 이루어지는 VLIW)가 출력되게 된다.
도 11의 (c)는 도 11의 (b)에 도시된 직렬형 어셈블러 코드가 병렬화 스케쥴링부(13)에 입력된 경우에 명령 순서화부(21)가 생성하는 VLIW(병렬화 어셈블러 코드)를 도시한다. 단 설명의 편의를 위해 VLIW의 제 1 필드(51)에 대한 코드를 생략하고 있다.
이 제 1회째의 스케쥴링 사이클에 의해 도 11의 (c)에 도시된 VLIW(407)가 생성된다.
(제 2회째)
다음으로 출력가능 명령집합에 명령(406)이 남겨진 상태에서 제 2회째의 스케쥴링 사이클을 개시한다.
명령 순서화부(21)는 새롭게 명령(404)을 출력가능 명령집합에 가한다(단계 S42). 명령(404)은 자기 노드로 입사하는 링크원의 노드에 대응하는 명령(403)이 모두 출력을 마친 경우에서의 명령에 상당하기 때문이다. 이에 따라 명령(404)과 명령(406)으로 구성되는 출력가능 명령집합이 생성된다.
다음으로 출력예정 명령집합은 비어 있으므로 단계 S44에서 거짓으로 판단하고, 계속해서 최적의 명령을 1개 선택함으로써 최초의 소비 사이클에 들어간다(단계 S45)하여 여기에서는 명령(404)이 선택되었다고 한다.
그리고 출력예정 명령집합은 비어 있는 것으로부터 명령 순서화부(21)는 이 명령(404)을 출력예정 명령집합에 넣은 후에(단계 S47), 출력가능 명령집합으로부터 제거한다(단계 S48).
이 시점에서 출력가능 명령집합에는 명령(406)만이 남겨지지만 마찬가지로 하여 2회째의 소비 사이클이 반복되어, 그 결과 이 명령(406)도 출력가능 명령집합으로부터 출력예정 명령집합으로 옮겨지게 된다(단계 S44∼S 48).
이 시점에서 출력예정 명령집합에는 명령(404)과 명령(406)이 들어가 있으므로 명령 순서화부(21)는 다음 단계 S44에서는 참으로 판단하여, 그들 명령(404 및 406)을 출력예정 명령집합으로부터 제거한 후에 2개째의 VLIW로서 출력한다(단계 S50). 요컨대 이 제 2회째의 스케쥴링 사이클에 의해 도 11의 (c)에 도시된 VLIW(408)가 생성된다.
이렇게 하여 병렬화 스케쥴링부(13)에 입력된 모든 명령이 VLIW 단위로 패킹되어 출력되며, 명령 순서화부(21)에 의한 스케쥴링이 종료한다(단계 S41∼S51).
(통상의 컴파일러와의 비교)
이상의 정수 분할부(12)와 병렬화 스케쥴링부(13)에서의 처리에 의해 도 11의 (a)에 도시된 직렬형 어셈블러 코드로부터 도 11의 (c)에 도시된 2개의 VLIW가 생성되었지만, 이들 처리의 특징을 명확히 하기 위해 통상의 컴파일러에 의한 경우와 비교한다.
도 13은 통상의 컴파일러의 구성을 도시하는 블록도이다.
이 통상의 컴파일러는 본 실시예와 기본적인 기능은 같지만, 본 실시예의 정수 분할부(12) 및 정수 결합부(14)에 상당하는 기능을 구비하지 않고, 따라서 다른 구성요소(910∼917, 920, 921)도 정수분할에 관련되는 기능을 구비하고 있지 않은 것으로 한다.
따라서 어셈블러 코드 생성부(911)가 도 11의 (a)에 도시되는 직렬형 어셈블러 코드를 생성하였다고 하면, 그 직렬형 어셈블러 코드는 그대로 병렬화 스케쥴링부(913)에 입력되므로 의존 그래프 생성부(920)는 도 14에 도시되는 의존 그래프(925)를 생성하게 된다.
그리고 그 의존 그래프에 따라 명령 순서화부(921)는 도 11의 (a)에 도시된 명령의 순서화를 행하지만, 도 14에 도시된 바와 같이 명령(400)과 명령(401)은 그 의존관계로부터 공존(1개의 VLIW를 구성)할 수 없고, 또한 명령(402)은 24비트 길이이기 때문에 다른 명령(400) 및 명령(401)과 공존할 수 없기 때문에 최종적으로 도 15에 도시된 3개의 VLIW(930∼932)를 생성한다.
이 도 15와 도 11의 (c)를 비교하여 알 수 있는 바와 같이, 통상의 컴파일러가 생성하는 병렬화 어셈블러 코드는 본 실시예에 의한 코드보다 1개의 VLIW분 만큼 코드 사이즈가 커지고 있고, 따라서 실행시간이나 1사이클분 많아지고 있다.
이것은 본 실시예의 컴파일러에 의하면 도 15에서의 VLIW(932)가 2개의 작은 명령(분할정수 설정명령과 분할정수 사용명령)으로 분할되어, 각각이 VLIW(930) 및 VLIW(931)에 발생하고 있는 각 낭비영역을 채우도록 분산하여 배치되기 때문이다.
(제 2 구체예)
다음으로 도 17의 (a)에 도시되는 직렬형 어셈블러 코드(42)가 어셈블러 코드 생성부(11)에 의해 생성되어 정수 분할부(12)에 입력된 경우에서의 링커부(17)의 동작 및 그것에 계속되는 최적화에 대해 설명한다.
(링커부(17))
도 17의 (a)∼(g)는 링커부(17)의 동작을 설명하기 위한 일련이 구체적인 코드나 관련정보를 도시한 도면이다.
도 17의 (a)는 어셈블러 코드 생성부(11)가 생성한 제 2 구체예에 관한 직렬형 어셈블러 코드(42)를 도시하며, 도 17의 (b)는 그 직렬형 어셈블러 코드(42)를 입력으로서 정수 분할부(12)가 생성한 코드를 도시하고, 도 17의 (c)는 그 코드를 입력으로서 병렬화 스케쥴링부(13)가 생성한 병렬화 어셈블러 코드를 도시하고, 도 17의 (d) 및 도 17의 (e)는 각각 그 병렬화 어셈블러 코드를 입력으로서 병렬화 어셈블러부(16)가 생성한 오브젝트 코드(44a) 및 재배치 정보(45a)를 도시하며, 도 17의 (f) 및 도 17의 (g)는 그 오브젝트 코드(44a) 및 재배치 정보(45a)를 입력으로서 링커부(17)가 생성한 실행가능 코드(46) 및 배치정보(40)를 도시한다.
또 본 구체예에서는 어셈블러 코드 생성부(11), 정수 분할부(12) 및 병렬화 스케쥴링부(13)가 생성한 코드의 상세를 설명하기 위해, 도 17의 (a)∼(c)에서는 각 명령과 같이 생성되는 부가정보를 「@」에 계속되는 코드를 이용하여 표현하고 있다. 이 부가정보는 그 명령을 특정하는 식별자 및 분할정수에 관한 정보 등으로 이루어진다.
구체적으로는 도 17의 (a)에 도시된 부가정보 「@ ID 숫자」는 그것이 쓰여져 있는 행에 존재하는 명령의 식별자(명령 식별자)이다. 또한 도 17의 (b)에 표시된 부가정보의 일부 「LbU12」, 「LbL4」는 각각 레이블 「LabeL」의 상위 12비트 및 하위 4비트를 나타내며, 또한 부가정보의 일부(사이즈 정보) 「S16」은 레이블 「LabeL」의 사이즈를 16비트라고 가정하여 분할한 것을 나타내고, 또한 부가정보의 일부 「M」은 레이블 「LabeL」을 분할하여 정수버퍼(107)에 저장하는 명령중에서 최초의 명령에 상당하는 것을 나타낸다.
또한 도 17의 (a)에 도시된 명령 「DS」(4l4)는 레이블 「LabeL」의 기억영역(4바이트)을 확보하는 의사명령이다.
링커부(17)에 입력되는 것은 도 17의 (d)에 도시된 오브젝트 코드(44a)와 도 17의 (e)에 도시된 재배치 정보(45a)이다.
여기에서 도 17의 (d)에서 오브젝트 코드의 「장소정보」는 각 명령이 배치될 상대 어드레스를 나타내고, 특정한 메모리영역(세그먼트나 섹션)의 선두로부터의 오프셋(바이트 단위)으로 표현되어 있다. 기호 「Ox」는 계속되는 수치를 16진수로 표현하고 있는 것을 나타낸다. 또한 「LabeL : 12u」, 「LabeL : 4L」은 각각 레이블 「LabeL」의 상위 12비트, 하위 4비트의 분할정수를 의미한다.
재배치 정보(45a)는 도 17의 (e)에 도시된 바와 같이 「레이블」, 그 레이블을 참조하고 있는 명령이 배치되어 있는 「장소정보」, 그 명령에 부수하고 있는 「부가정보」로 구성되어 있다. 여기에서 재배치 정보(45a)의 장소정보는 VLIW가 배치되어 있는 어드레스(32비트 조각)와, 그 VLIW에서 레이블을 참조하는 명령이 배치되어 있는 단위 연산 필드를 특정하는 순서의 조합에 의해 표현되어 있다.
이 예에서는 레이블 「LabeL」은 상대 어드레스 「OxlOOO」에 배치된 VLIW의 제 3 연산에 배치된 명령에 참조되고, 그 VLIW에는 부가정보 「IDl02. LbU12. S16. M」이 첨부되며, 또한 상대 어드레스 「0xl004」에 배치된 VLIW의 제 3 연산에 배치된 명령에도 참조되고, 그 명령에는 부가정보 「IDl02. LbL4. S16」이 첨부되어 있는 것이 표시되어 있다.
이러한 오브젝트 코드(44a)(도 17의 (d))와 재배치 정보(45a)(도 17의 (e))가 입력된 경우의 링커부(17)의 구체적인 동작은 이하와 같다.
현재 레이블 어드레스 산출부(22)는 동시에 입력된 다른 오브젝트 코드를 참조함으로써 상기 레이블 「LabeL」의 최종적인 사이즈가 28비트 길이라고 산출하였다고 하자.
명령 삽입부(23)는, 우선 레이블 「LabeL」을 착안 레이블로 하고(단계 S61), 링커부(17)에 입력된 재배치 정보(45a)로부터 착안 레이블 「LabeL」의 재배치 정보를 취출한다(단계 S62).
다음으로 그 재배치 정보의 부가정보에 포함된 사이즈 정보 「S16」과, 그 착안 레이블에 대하여 레이블 어드레스 산출부(22)가 산출한 사이즈 「28비트」를 비교한다(단계 S63).
그 결과 레이블 어드레스 산출부(22)가 산출한 사이즈 쪽이 크므로, 도 17의 (e)에 도시된 레이블 「LabeL」의 재배치 정보(429 및 430)중 「M」의 부가정보가 붙어 있는 것(도 17의 (e)의 행 429)을 특정하고, 그 장소정보(Oxl000. 3)에 관한 VLIW(425)의 직전에 무효명령(nop)과 분할정수 설정명령으로 이루어지는 새로운 VLIW를 삽입한다(단계 S64).
그 결과 도 17의 (f)에 표시된 바와 같이 VLIW(432)의 직전에 새로운 VLIW(431)가 추가 삽입된다. 또 이 VLIW(431)중의 레이블 「LabeL : 12u」는 28비트 길이의 레이블 「LabeL」중 재배치 정보중의 사이즈 정보가 나타내는 16비트를 초과하는 부분, 즉 상위 12비트이다. 또한 VLIW(432)중의 분할정수 「LabeL : 12m」은 28비트 길이의 레이블 「LabeL」 의 중위 12비트를 나타낸다.
이렇게 하여 컴파일(정수 분할부(12)에 의한 정수의 분할)시에 있어서 가정된 레이블의 사이즈가 최종적인 사이즈와 서로 다른 경우에 그 차분을 보정하는 명령이 추가 삽입된다.
마지막으로 출력부(24)는 레이블 어드레스 산출부(22)에 의해 결정된 레이블 사이즈를 포함하는 배치정보(40)(도 17의 (g))를 생성하고, 명령 삽입부(23)에 의한 명령삽입이 행해진 후의 실행가능 코드(46)(도 17의 (f))와 함께 출력한다.
또 레이블 「LabeL」의 배치정보(436)에는 그 사이즈 「28」과, 그 레이블을 참조하는 명령의 식별자 「@ ID(l02)」가 포함된다. 여기에서 만약 이 배치정보(40)를 사용한 후술하는 최적화를 행하지 않는 경우는 이 링커부의 출력이 최종의 실행가능 코드(46)로 된다.
(배치정보(40)를 사용한 최적화)
다음으로 상술의 배치정보(40)를 정수 분할부(12)에 피드백하고, 그 후의 처리를 반복함으로써 최적화하는 경우에서의 컴파일러가 구체적인 동작을 설명한다.
도 18의 (a)∼(e)는 한번 생성된 배치정보(40)를 다시 정수 분할부(12)에 입력한 경우의 각 구성요소가 생성하는 코드나 관련정보를 도시한 도면이다.
도 18의 (a)는 도 17의 (a)에 도시되는 직렬형 어셈블러 코드(42)와 도 17의 (g)에 도시되는 배치정보(40)가 입력된 정수 분할부(12)가 생성한 코드를 나타내며, 도 18의 (b)는 그 코드를 입력으로 하여 병렬화 스케쥴링부(13)가 생성한 병렬화 어셈블러 코드를 나타내고, 도 18의 (c) 및 도 18의 (d)는 각각 그 병렬화 어셈블러 코드를 입력으로 하여 병렬화 어셈블러부(16)가 생성한 오브젝트 코드(44a) 및 재배치 정보(45a)를 도시하고, 도 18의 (e)는 그 오브젝트 코드(44a) 및 재배치 정보(45a)를 입력으로 하여 링커부(17)가 생성한 실행가능 코드(46)를 도시한다.
우선 정수 분할부(12)는 입력된 배치정보(40)의 내용을 참조함으로써 명령 식별자 ID(l02)를 갖는 명령의 외부 레이블 「LabeL」의 사이즈는 28비트라고 결정하고(도 6의 단계 S2), 28비트 길이로서 레이블 「LabeL」을 분할한다(단계 S3, S4). 그 결과 도 17의 (a)의 명령(412)은 도 18의 (a)에 도시되는 3개의 명령(442∼444)으로 치환된다. 또 명령(443)의 부가정보 「LbM12」는 이 명령이 레이블 「LabeL」의 중위 12비트를 참조하고 있는 것을 나타낸다.
병렬화 스케쥴링부(13)는 도 7 및 도 8에 도시된 순서에 따라 의존 그래프를 생성하고 명령의 순서화를 실행함으로써, 무효명령(nop)이 삽입되어 있지 않은 병렬화 어셈블러 코드(도 18의 (b))를 생성한다.
그리고 병렬화 어셈블러부(16)는 그 병렬화 어셈블러 코드에 대응하는 오브젝트 코드(44a)(도 18(c))와 재배치 정보(45a)(도 18의 (d))를 생성한다. 또 도 18의 (c)에서 「LabeL : 12m」은 레이블 「LabeL」의 중위 12비트가 들어가는 것을 나타낸다.
마지막으로 링커부(17)에서 레이블 어드레스 산출부(22)는 레이블 「LabeL」의 사이즈를 전회와 같은 28비트라고 산출하기 때문에 명령 삽입부(23)는 레이블 「LabeL」에 대한 명령의 추가적인 삽입을 행하지 않으므로(도 10의 단계 S63), 생성되는 실행가능 코드(46)는 도 18의 (e)에 도시되는 바와 같이 된다.
이 도 18의 (e)와 도 17의 (f)를 비교하여 알 수 있는 바와 같이, 배치정보(40)를 정수 분할부(12)에 피드백함으로써 최적화한 실행가능 코드(도 18의 (e))는 그렇지 않은 실행가능 코드(도 17의 (f)보다 1개의 VLIW만큼 코드 사이즈가 작아지고 있다.
또 이와 같이 생성된 실행가능 코드(도 18의 (e))를 플로피 디스크나 CD-ROM, 반도체 메모리 등의 기록매체에 수납하거나 전송매체를 통해 통신함으로써, 대상으로 하는 VLIW 프로세서(100)를 구비하는 타깃 환경으로 이동시키는 것은 가능하다.
(제 3 구체예)
다음으로 도 19의 (a)에 도시되는 분기명령을 포함하는 직렬형 어셈블러 코드(42)가 어셈블러 코드 생성부(11)에 의해 생성되어 정수 분할부(12)에 입력된 경우에 있어서의 정수 분할부(12) 및 병렬화 스케쥴링부(13)의 동작에 대하여 설명하기로 한다.
도 19의 (a)는 어셈블러 코드 생성부(11)가 생성한 제 3 구체예에 관한 직렬형 어셈블러 코드(42)를 도시한다.
본 도면에 도시된 분기명령(473)의 의미는 이하와 같다.
「(명령(473)) caLL_func」
분기 레이블_func에 VLIW 프로세서(100)의 실행제어를 옮긴다.
단, 이 예에서는 분기 레이블_func의 사이즈는 12비트 길이로 하고, 함수_func으로의 분기시에 인수(R1)가 넘겨진다고 한다.
도 19의 (b)는 도 19의 (a)에 도시된 직렬형 어셈블러 코드(42)가 입력된 경우에 정수 분할부(12)가 생성하는 코드를 도시한다.
분기명령(473)은 12비트의 분기 레이블_func를 수반하므로, 그 분기 레이블_func를 정수버퍼(107)에 설정하는 분할정수 설정명령(477)과, 분기명령(473)의 연산코드(caLL)에 상당하는 분할정수 사용명령(478)으로 분할된다.
도 19의 (c)는 도 19의 (b)에 도시되는 코드가 입력된 경우에 의존 그래프 생성부(20)가 생성하는 의존 그래프를 도시한다.
또 분기명령(478)이 명령(474)에 의존하고 있는 것은 함수_func 중에서 인수(R1)가 사용되기 때문이다.
도 19의 (d)는 도 19의 (b)의 코드 및 도 19의 (c) 의 의존 그래프가 입력된 경우에 명령 순서화부(21)가 중간적으로 생성하는 출력가능 명령집합과 출력예정명령집합을 도시한다.
제 2회째의 스케쥴링 사이클에서 출력예정 명령집합에 분기명령(caLL)(478)이 포함된다.
도 19의 (e)는 상기 명령 순서화부(21)가 생성하는 병렬화 어셈블러 코드를 도시한다. 단, 본 도면에서는 VLIW의 제 1 필드(51)의 코드도 도시되어 있다.
이와 같이 본 컴파일러의 정수 분할부(12) 및 병렬화 스케쥴링부(13)에 의하면, 도 19의 (a)에 도시되는 직렬형 어셈블러 코드(42)로부터 도 19의 (e)에 도시된 2개의 VLIW로 이루어지는 병렬화 어셈블러 코드가 생성된다.
여기에서 동일한 직렬형 어셈블러 코드(42)가 통상의 컴파일러에 입력된 경우와 비교한다.
도 16은 그 경우에 통상의 컴파일러가 생성한다고 생각되는 병렬화 어셈블러 코드를 도시한다.
통상의 컴파일러에 의하면, 도 19의 (a)에 도시된 분기명령(473)은 분할되는 일이 없으므로 적어도 13비트 길이의 필드, 즉 연속하는 2개의 필드를 필요로 한다. 그 때문에 3개의 VLIW(940∼942)로 이루어지는 병렬화 어셈블러 코드가 생성되어 많은 낭비영역이 발생하고 있다.
(제 4 구체예)
다음으로 도 20의 (a)에 도시된 직렬형 어셈블러 코드(42)가 어셈블러 코드 생성부(11)에 의해 생성되어 정수 분할부(12)에 입력된 경우에서의 정수 결합부(14)의 동작을 중심으로 설명하기로 한다.
도 20의 (a)는 어셈블러 코드 생성부(11)가 생성한 제 4 구체예에 관한 직렬형 어셈블러 코드(42)를 도시한다.
또 이 예에서 분기명령(803)에 사용하고 있는 분기 레이블_func의 사이즈는 제 3 구체예와 마찬가지로 12비트 길이로 하지만, 함수_func로의 분기시에 넘겨받는 인수는 없다고 하자.
도 20의 (b)는 도 20의 (a)에 도시된 직렬형 어셈블러 코드(42)가 입력된 경우에 정수 분할부(12)가 생성하는 코드를 도시한다.
제 3 구체예와 마찬가지로 분기명령(503)은 분할정수 설정명령(507)과 분할정수 사용명령(508)으로 분할된다.
도 20의 (c)는 도 20의 (b)에 도시된 코드가 입력된 경우에 의존 그래프 생성부(20)가 생성하는 의존 그래프를 도시한다.
도 20의 (d)는 도 20의 (b)의 코드 및 도 20의 (c)의 의존 그래프가 입력된 경우에 명령 순서화부(21)가 중간적으로 생성하는 출력가능 명령집합과 출력예정명령집합을 도시한다.
제 3 구체예와 서로 다르고, 제 2회째의 스케쥴링 사이클에서 출력예정 명령집합에 분할정수 설정명령(507)과 분할정수 사용명령(508)이 포함된다.
도 20의 (e)는 상기 명령 순서화부(21)가 생성하는 병렬화 어셈블러 코드를 도시한다.
이 병렬화 어셈블러 코드는 2개의 VLIW(509 및 510)로 이루어지지만, VLIW(510)의 제 1 필드(51) 및 제 2 필드(52)에는 원래 1개의 분기명령(503)이던 것이 분할되어 생성된 명령(507 및 508)이 배치되어 있다.
도 20의 (f)는 도 20의 (e)의 병렬화 어셈블러 코드가 입력된 경우에 정수 결합부(14)가 생성하는 코드를 도시한다.
정수 결합부(14)는 VLIW(510)에는 동일한 긴 정수 사용명령(분기명령(503)) 으로부터 생성된 분할정수 설정명령(507)과 분할정수 사용명령(508)이 배치되어 있는 것을 검출하고, 그들 2개의 명령(507 및 508)을 그들을 결합한 1개의 긴 정수 사용명령(원래의 분기명령(503)과 같은 형식의 명령)으로 치환한다. 이에 따라 정수 분할부(12)에 의한 분할이 쓸모 없이 끝난(복수의 VLIW에 걸쳐 분할정수를 채울 필요가 없었던) 경우의 준비가 행해진다.
또 본 실시예의 컴파일러가 대상으로 하는 프로세서는, 상기 일본국 특원평 9-159058이나 일본국 특원평 9-159059에 개시된 VLIW 프로세서에 가까운 것이었지만, 본 발명은 이들에 한정되는 것이 아니다. 원래 1개의 명령이던 것이 분할되어 복수의 VLIW에 걸쳐 배치된 프로그램을 실행하는 정수 복원형 프로세서이면 된다.
또한 본 실시예의 컴파일러는 도 2의 (a) 및 도 2의 (b)에 도시된 2종류의 포맷의 VLIW를 생성하였지만, 본 발명은 이들 2종류에 한정되는 것이 아니다. 예를 들면 16비트 길이의 연산 3개로 이루어지는 VLIW를 생성하는 것도 가능하다. 본 발명은 목적으로 하는 VLIW의 연산에 들어가는 정수의 사이즈에 따라 명령중의 정수를 분할하여 병렬화 스케쥴링하는 기술이기 때문이다.
또한 본 실시예의 컴파일러가 대상으로 하는 VLIW 프로세서(100)는 32비트 길이의 시프트 레지스터(정수버퍼(107))를 1개 구비하고, 이 저장값이 참조되면 직후에 제로(zero)가 저장되었지만, 본 발명은 이러한 정수버퍼(107)를 구비하는 프로세서에 한정되지 않는다. 독립한 2개 이상의 정수를 저장하는 정수버퍼를 구비하고 이들 저장장소를 명시적으로 지시하는 명령이나 내용을 클리어하는 명령을 구비하는 프로세서이어도 된다. 구체적으로는 분할정수 설정명령을 생성할 때에 그 명령과 함께 저장장소를 지시하는 명령을 생성하거나, 또는 분할정수 사용명령을 생성할 때에 그 명령과 함께 내용을 클리어하는 명령을 생성하면 된다.
또한 본 실시예의 정수 분할부(12)는 레이블을 포함하는 1개의 분기명령에 대하여, 그 레이블만을 정수버퍼(107)에 저장하는 1개의 분할정수 설정명령과 그 레이블을 사용하여 분기하는 1개의 분할정수 사용명령으로 분할하였지만 이에 한정되지 않고, 예를 들면 레이블의 사이즈가 정수버퍼(107)보다 큰 경우에는, 또한 레이블을 2개로 분할하여 각각을 정수버퍼(107)에 저장하는 2개의 분할정수 설정명령과 1개의 분할정수 사용명령으로 분할해도 된다.
또한 정수를 분할할 때는 4비트나 12비트라는 수치가 고정적으로 이용되었지만 본 발명은 이들 수치에 한정되지 않는다.
또한 본 실시예의 정수 분할부(12)는 사이즈를 모르는 레이블은 사용빈도가 가장 높은 어드레스 사이즈(16비트 길이)로 가정하였지만, 대상 프로세서에서 이용되는 최대의 어드레스 사이즈로 가정해도 된다. 또한 사이즈가 알려지지 않은 정수가 전송·연산명령의 오퍼랜드인 경우에는 대상 프로세서에서 이용되는 최대의 정수 사이즈로 가정하거나, 사용빈도가 가장 높은 정수 사이즈로 가정해도 된다. 이들 가정되는 사이즈는 디폴트값으로서 컴파일러에 미리 기억시켜 놓거나 컴파일러의 기동시에 옵션으로서 사용자로부터 지정시켜도 된다.
또한 도 6의 단계 S4에서의 구체적인 설명으로부터 명백한 바와 같이, 본 실시예의 정수 분할부(12)가 갖는 기능은 이하와 같이 2종류의 다른 관점에서 표현할 수 있다. 요컨대 (ⅰ) 도 21의 (a)에 도시된 바와 같이, 입력된 명령열중의 정수를 이용한 명령(긴 정수 사용명령)을 복수의 명령(분할정수 설정명령과 분할정수 사용명령)으로 분할하는 수단이라는 표현과, (ⅱ) 도 21의 (b)에 도시된 바와 같이, 입력된 명령열중의 정수(28비트의 긴 정수)를 복수의 분할정수(상위 12비트, 중위 12비트 및 하위 4비트)로 분할하고, 상기 명령열에 따라 상기 분할정수를 각각 포함하는 복수의 명령(상위 12비트의 분할정수에 대한 분할정수 설정명령, 중위 12비트의 분할정수에 대한 분할정수 설정명령 및 하위 4비트의 짧은 정수를 포함하는 분할정수 사용명령)을 생성하는 수단이라는 표현이다.
또한 상기 제 1 구체예의 명령 순서화부(21)는 제 1회째의 스케쥴링 사이클에서 출력가능 명령집합에 남겨진 명령(406)에 새로운 명령(404)을 더함으로써 2회째의 사이클을 계속하였지만, 각 사이클마다 출력가능 명령집합의 요소를 클리어하고 재계산해도 된다.
또 본 실시예에 관한 컴파일러에 의해 생성된 실행가능 코드를 플로피 디스크나 CD-ROM, 반도체 메모리 등의 기록매체에 수납하거나 전송매체를 통해 통신함으로써 그것을 실행하는 타깃환경에 이동시키는 것이 가능한 것은 말할 필요도 없다.
도 22는 상기 실시예의 컴파일러에서 생성된 도 18의 (e)에 도시된 장어 명령열(201)이나 도 9의 (e)에 표시되는 장어 명령열(202)이 기록된 CD-ROM(200)의 개관을 도시한다. 장어 명령열(201)은 그 장어 명령열 중에 암묵적으로 지정되는 상기 프로세서가 구비하는 기억버퍼에 결합하여 저장되는 정수의 각각을 포함하는 2 이상의 장어 명령(458, 459)이 배치되며, 그들 2 이상의 장어 명령(458, 459) 중 어느 것에도 후속하고, 또한 처음으로 상기 기억버퍼를 참조하는 장어 명령(460)에는 그 명령 자체에 정수를 포함하고, 그 정수와 상기 2 이상의 장어 명령에 포함된 정수 각각이 결합된 정수를 이용하는 명령(Ld)이 배치되어 있다. 또한 장어 명령열(202)은 그 장어 명령열중의 하나의 장어 명령(480)에는 상기 장어 명령열중에 암묵적으로 지정되는 상기 프로세서가 구비하는 기억버퍼에 저장되는 정수(sfst)가 배치되어, 상기 하나의 장어 명령에 후속하면서 최초로 상기 기억버퍼를 참조하는 다른 하나의 장어 명령(481)에는 상기 기억버퍼에 저장된 정수(_func)를 이용하는 명령(CaLL)이 배치되어 있다.
본 발명에 관한 컴파일러 자체도 그 성과물인 실행가능 코드와 마찬가지로 플로피 디스크나 CD-ROM, 반도체 메모리 등의 기록매체에 수납되어 배포될 수 있는 것은 말할 필요도 없다.
상술한 바와 같이 본 발명에 의하면, 정수 복원형 VILW 프로세서를 대상으로 하는 컴파일러나, 정수 복원형 VILW 프로세서에 매우 적합한 실행가능 코드를 얻을 수 있게 된다.
본 발명과 바람직한 실시예들은 예시의 목적을 위해 개시된 것이며, 당업자라면 첨부된 특허청구범위에 개시된 본 발명의 사상과 범위를 통해 각종 수정, 변경, 대체 및 부가가 가능할 것이다.

Claims (35)

  1. 직렬로 나열된 명령으로 된 명령열을, 복수의 명령을 동시 병렬로 실행하는 프로세서를 대상으로 하는 장어 명령열로 변환하는 프로그램을 기록한 기록매체에 있어서,
    상기 프로그램은,
    입력된 상기 명령열중의 정수(定數)를 이용한 명령을 복수의 명령으로 분할하는 분할단계와,
    분할후의 명령열에 포함되는 각 명령의 실행순서에 기초하는 의존관계를 해석하는 해석단계와,
    해석된 의존관계를 준수하면서 분할후의 상기 명령열을 동시 병렬로 실행할 수 있는 복수의 명령을 단위로 하는 상기 장어 명령열로 순서화하는 순서화 단계를 포함하는 것을 특징으로 하는 기록매체.
  2. 제 1항에 있어서,
    상기 분할단계는,
    정수를 이용한 상기 명령이 상기 장어 명령을 구성하는 단위 연산 필드에 들어가는 사이즈인지의 여부를 판정하는 명령 사이즈 판정 서브단계와,
    단위 연산 필드에 들어가는 사이즈가 아니라고 판정한 경우에 상기 명령을 상기 단위 연산 필드에 들어가는 사이즈의 복수의 명령으로 분할하는 분할 서브단계를 포함하는 것을 특징으로 하는 기록매체.
  3. 제 2항에 있어서,
    상기 분할 서브단계에서는 정수를 이용한 상기 명령을 그 정수를 상기 프로세서가 구비하는 기억버퍼에 저장하는 명령과, 저장된 상기 정수를 이용하는 명령으로 분할하는 것을 특징으로 하는 기록매체.
  4. 제 3항에 있어서,
    상기 프로그램은 또한, 상기 분할 서브단계에서 분할 생성된 2 이상의 명령이 상기 순서화 단계에서의 순서화에 의해 동일한 장어 명령으로 배치된 경우에 그들 명령을 결합하는 결합단계를 추가로 포함하는 것을 특징으로 하는 기록매체.
  5. 제 4항에 있어서,
    상기 명령 사이즈 판정 서브단계에서는, 상기 정수의 사이즈를 가정하여 상기 판정을 행하고,
    상기 프로그램은 또한,
    정수의 최종적인 사이즈를 결정하면서 복수의 장어 명령열을 연결 편집하는 정수 사이즈 결정단계와,
    결정된 정수의 사이즈가 상기 명령 사이즈 판정 서브단계에서 가정된 그 정수의 사이즈보다 큰 경우에 그 차분 사이즈에 상당하는 분할정수를 상기 기억버퍼에 보충하여 저장하는 명령을 생성하여 상기 장어 명령열에 삽입하는 삽입단계를 포함하는 것을 특징으로 하는 기록매체.
  6. 제 5항에 있어서,
    상기 명령 사이즈 판정 서브단계에서는, 상기 정수의 사이즈를 상기 프로세서에서 이용되는 최대의 정수 사이즈로 가정하여 상기 판정을 행하는 것을 특징으로 하는 기록매체.
  7. 제 6항에 있어서,
    상기 프로그램은 상기 정수 사이즈 결정단계후에 다시 상기 분할단계를 실행시키는 단계를 추가로 포함하며,
    상기 분할단계중의 상기 명령 사이즈 판정 서브단계에서는, 상기 정수 사이즈 결정단계에서 결정된 정수의 최종적인 사이즈를 고려하여 상기 판정을 행하는 것을 특징으로 하는 기록매체.
  8. 제 7항에 있어서,
    상기 프로그램은 상기 두 번째의 분할단계에 계속해서 다시 상기 해석단계와 상기 순서화 단계를 실행시키는 단계를 추가로 포함하는 것을 특징으로 하는 기록매체.
  9. 제 5항에 있어서,
    상기 명령 사이즈 판정 서브단계에서는, 상기 정수의 사이즈를 사용빈도가 가장 높은 정수 사이즈로 가정하여 상기 판정을 행하는 것을 특징으로 하는 기록매체.
  10. 제 5항에 있어서,
    상기 프로그램은 상기 정수 사이즈 결정단계 후에 다시 상기 분할단계를 실행시키는 단계를 추가로 포함하며,
    상기 분할단계중의 상기 명령 사이즈 판정 서브단계에서는, 상기 정수 사이즈 결정단계에서 결정된 정수의 최종적인 사이즈를 고려하여 상기 판정을 행하는 것을 특징으로 하는 기록매체.
  11. 제 2항에 있어서,
    상기 분할 서브단계에서는, 정수를 이용한 상기 명령을 그 정수를 분할하여 얻어지는 분할정수를 상기 프로세서가 구비하는 기억버퍼에 저장하는 명령과, 저장된 상기 분할정수를 이용하는 명령으로 분할하는 것을 특징으로 하는 프로그램 기록매체.
  12. 제 11항에 있어서,
    상기 프로그램은 상기 분할 서브단계에서 분할 생성된 2 이상의 명령이 상기 순서화 단계에서의 순서화에 의해 동일한 장어 명령으로 배치된 경우에 그들 명령을 결합하는 결합단계를 추가로 포함하는 것을 특징으로 하는 기록매체.
  13. 제 12항에 있어서,
    상기 명령 사이즈 판정 서브단계에서는, 상기 정수의 사이즈를 가정하여 상기 판정을 행하고,
    상기 프로그램은,
    정수의 최종적인 사이즈를 결정하면서 복수의 장어 명령열을 연결 편집하는 정수 사이즈 결정단계와,
    결정된 정수의 사이즈가 상기 명령 사이즈 판정 서브단계에서 가정된 그 정수의 사이즈보다 큰 경우에 그 차분 사이즈에 상당하는 분할정수를 상기 기억버퍼에 보충하여 저장하는 명령을 생성하여 상기 장어 명령열에 삽입하는 삽입단계를 추가로 포함하는 것을 특징으로 하는 기록매체.
  14. 제 13항에 있어서,
    상기 명령 사이즈 판정 서브단계에서는, 상기 정수의 사이즈를 상기 프로세서에서 이용되는 최대의 정수 사이즈로 가정하여 상기 판정을 행하는 것을 특징으로 하는 기록매체.
  15. 제 14항에 있어서,
    상기 프로그램은 상기 정수 사이즈 결정단계후에 다시 상기 분할단계를 실행시키는 단계를 추가로 포함하며,
    상기 분할단계중의 상기 명령 사이즈 판정 서브단계에서는, 상기 정수 사이즈 결정단계에서 결정된 정수의 최종적인 사이즈를 고려하여 상기 판정을 행하는 것을 특징으로 하는 기록매체.
  16. 제 15항에 있어서,
    상기 프로그램은 상기 두 번째의 분할단계에 계속해서 다시 상기 해석단계와 상기 순서화 단계를 실행시키는 단계를 추가로 포함하는 것을 특징으로 하는 기록매체.
  17. 제 13항에 있어서,
    상기 명령 사이즈 판정 서브단계에서는, 상기 정수의 사이즈를 사용빈도가 가장 높은 정수 사이즈로 가정하여 상기 판정을 행하는 것을 특징으로 하는 기록매체.
  18. 제 13항에 있어서,
    상기 프로그램은 상기 정수 사이즈 결정단계후에 다시 상기 분할단계를 실행시키는 단계를 추가로 포함하며,
    상기 분할단계중의 상기 명령 사이즈 판정 서브단계에서는, 상기 정수 사이즈 결정단계에서 결정된 정수의 최종적인 사이즈를 고려하여 상기 판정을 행하는 것을 특징으로 하는 기록매체.
  19. 직렬로 나열된 명령으로 된 명령열을, 복수의 명령을 동시 병렬로 실행하는 프로세서를 대상으로 하는 장어 명령열로 변환하는 프로그램을 기록한 기록매체에 있어서,
    상기 프로그램은,
    입력된 상기 명령열중의 정수를 복수의 분할정수로 분할하고, 상기 분할정수를 각각 포함하는 복수의 명령을 생성하는 분할단계와,
    생성후의 명령열에 포함되는 각 명령의 실행순서에 기초하는 의존관계를 해석하는 해석단계와,
    해석된 의존관계를 준수하면서 생성후의 상기 명령열을 동시 병렬로 실행할 수 있는 복수의 명령을 단위로 하는 상기 장어 명령열로 순서화하는 순서화 단계를 포함하는 것을 특징으로 하는 기록매체.
  20. 제 19항에 있어서,
    상기 분할단계는,
    상기 정수가 상기 장어 명령을 구성하는 단위연산내에서 표현할 수 있는 사이즈인지의 여부를 판정하는 명령 사이즈 판정 서브단계와,
    단위연산내에서 표현할 수 있는 사이즈가 아니라고 판정한 경우에 상기 정수를 상기 단위연산내에서 표현할 수 있는 사이즈의 복수의 분할정수로 분할하는 분할 서브단계를 포함하는 것을 특징으로 하는 기억매체.
  21. 제 20항에 있어서,
    상기 분할단계에서는, 상기 분할 서브단계에 의해 얻어지는 상기 분할정수를 상기 프로세서가 구비하는 기억버퍼에 저장하는 명령과, 저장된 상기 분할정수를 이용하는 명령을 생성하는 것을 특징으로 하는 기억매체.
  22. 제 21항에 있어서,
    상기 프로그램은 상기 분할단계에서 생성된 2 이상의 명령이 상기 순서화 단계에서의 순서화에 의해 동일한 장어 명령으로 배치된 경우에 그들 명령을 결합하는 결합단계를 포함하는 것을 특징으로 하는 기록매체.
  23. 제 22항에 있어서,
    상기 명령 사이즈 판정 서브단계에서는, 상기 정수의 사이즈를 가정하여 상기 판정을 행하고,
    상기 프로그램은,
    정수의 최종적인 사이즈를 결정하면서 복수의 장어 명령열을 연결 편집하는 정수 사이즈 결정단계와,
    결정된 정수의 사이즈가 상기 명령 사이즈 판정 서브단계에서 가정된 그 정수의 사이즈보다 큰 경우에 그 차분 사이즈에 상당하는 분할정수를 상기 기억버퍼에 보충하여 저장하는 명령을 생성하여 상기 장어 명령열에 삽입하는 삽입단계를 포함하는 것을 특징으로 하는 기록매체.
  24. 제 23항에 있어서,
    상기 명령 사이즈 판정 서브단계에서는, 상기 정수의 최종적인 사이즈가 결정되어 있지 않은 경우에는 그 사이즈를 상기 프로세서에서 이용되는 최대의 정수 사이즈로 가정하여 상기 판정을 행하는 것을 특징으로 하는 기록매체.
  25. 제 24항에 있어서,
    상기 프로그램은 상기 정수 사이즈 결정단계후에 다시 상기 분할단계를 실행시키는 단계를 추가로 포함하고,
    상기 분할단계중의 상기 명령 사이즈 판정 서브단계에서는, 상기 정수 사이즈 결정단계에서 결정된 정수의 최종적인 사이즈를 고려하여 상기 판정을 행하는 것을 특징으로 하는 기록매체.
  26. 제 25항에 있어서,
    상기 프로그램은 상기 두 번째의 분할단계에 계속해서 다시 상기 해석단계와 상기 순서화 단계를 실행시키는 단계를 추가로 포함하는 것을 특징으로 하는 기록매체.
  27. 제 23항에 있어서,
    상기 명령 사이즈 판정 서브단계에서는, 상기 정수의 최종적인 사이즈가 결정되어 있지 않은 경우에는 그 사이즈를 사용빈도가 가장 높은 정수 사이즈로 가정하여 상기 판정을 행하는 것을 특징으로 하는 기록매체.
  28. 제 23항에 있어서,
    상기 프로그램은 상기 정수 사이즈 결정단계후에 다시 상기 분할단계를 실행시키는 단계를 추가로 포함하고,
    상기 분할단계중의 상기 명령 사이즈 판정 서브단계에서는, 상기 정수 사이즈 결정단계에서 결정된 정수의 최종적인 사이즈를 고려하여 상기 판정을 행하는 것을 특징으로 하는 기록매체.
  29. 복수의 명령을 동시 병렬로 실행하는 프로세서를 대상으로 하는 장어 명령열이 기록된 기록매체에 있어서,
    상기 장어 명령열중의 하나의 장어 명령에는, 상기 장어 명령열중에 암묵적으로 지정되는 상기 프로세서가 구비하는 기억버퍼에 저장되는 정수가 배치되고,
    상기 하나의 장어 명령에 후속하면서 최초로 상기 기억버퍼를 참조하는 다른 하나의 장어 명령에는, 상기 기억버퍼에 저장된 정수를 이용하는 명령이 배치되어 있는 것을 특징으로 하는 기록매체.
  30. 제 29항에 있어서,
    상기 하나의 장어 명령에 배치된 정수는 분기장소 어드레스이고,
    상기 다른 하나의 장어 명령에 배치된 명령은 분기장소 어드레스를 수반하지 않는 분기명령인 것을 특징으로 하는 기록매체.
  31. 복수의 명령을 동시 병렬로 실행하는 프로세서를 대상으로 하는 장어 명령열이 기록된 기록매체에 있어서,
    상기 장어 명령열중의 하나의 장어 명령에는, 상기 장어 명령열중에 암묵적으로 지정되는 상기 프로세서가 구비하는 기억버퍼에 저장되는 정수가 배치되고,
    상기 하나의 장어 명령에 후속하면서 최초로 상기 기억버퍼를 참조하는 다른 하나의 장어 명령에는, 그 명령 자체에 정수를 포함하고, 그 정수와 상기 기억버퍼에 저장된 정수가 결합된 정수를 이용하는 명령이 배치되어 있는 것을 특징으로 하는 기록매체.
  32. 복수의 명령을 동시 병렬로 실행하는 프로세서를 대상으로 하는 장어 명령열이 기록된 기록매체에 있어서,
    상기 장어 명령열에는, 그 장어 명령열중에 암묵적으로 지정되는 상기 프로세서가 구비하는 기억버퍼에 결합하여 저장되는 정수 각각을 포함하는 2 이상의 장어 명령이 배치되고,
    상기 2 이상의 장어 명령중 어느 것에도 후속하면서 최초로 상기 기억버퍼를 참조하는 장어 명령에는, 상기 2 이상의 장어 명령에 포함된 정수 각각이 결합된 정수를 이용하는 명령이 배치되어 있는 것을 특징으로 하는 기록매체.
  33. 복수의 명령을 동시 병렬로 실행하는 프로세서를 대상으로 하는 장어 명령열이 기록된 기록매체에 있어서,
    상기 장어 명령열에는, 그 장어 명령열중에 암묵적으로 지정되는 상기 프로세서가 구비하는 기억버퍼에 결합하여 저장되는 정수 각각을 포함하는 2 이상의 장어 명령이 배치되고,
    상기 2 이상의 장어 명령중 어느 것에도 후속하면서 최초로 상기 기억버퍼를 참조하는 장어 명령에는, 그 명령 자체에 정수를 포함하여, 그 정수와 상기 2 이상의 장어 명령에 포함된 정수 각각이 결합된 정수를 이용하는 명령이 배치되어 있는 것을 특징으로 하는 기록매체.
  34. 직렬로 나열된 명령으로 된 명령열을, 복수의 명령을 동시 병렬로 실행하는 프로세서를 대상으로 하는 장어 명령열로 변환하는 장치에 있어서,
    입력된 상기 명령열중의 정수를 이용한 명령을 복수의 명령으로 분할하는 분할수단과,
    분할후의 명령열에 포함되는 각 명령의 실행순서에 기초하는 의존관계를 해석하는 해석수단과,
    해석된 의존관계를 준수하면서 분할후의 상기 명령열을, 동시 병렬로 실행할 수 있는 복수의 명령을 단위로 하는 상기 장어 명령열로 순서화하는 순서화 수단을 포함하는 것을 특징으로 하는 프로그램 변환장치.
  35. 직렬로 나열된 명령으로 된 명령열을, 복수의 명령을 동시 병렬로 실행하는 프로세서를 대상으로 하는 장어 명령열로 변환하는 장치에 있어서,
    입력된 상기 명령열중의 정수를 복수의 분할정수로 분할하고, 상기 분할정수를 각각 포함하는 복수의 명령을 생성하는 분할수단과,
    생성후의 명령열에 포함되는 각 명령의 실행순서에 기초하는 의존관계를 해석하는 해석수단과,
    해석된 의존관계를 준수하면서 생성후의 상기 명령열을, 동시 병렬로 실행할 수 있는 복수의 명령을 단위로 하는 상기 장어 명령열로 순서화하는 순서화 수단을 포함하는 것을 특징으로 하는 프로그램 변환장치.
KR10-1998-0035360A 1997-08-29 1998-08-29 정수복원형장어명령프로세서용프로그램변환장치 KR100496946B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP23514497A JP3327818B2 (ja) 1997-08-29 1997-08-29 プログラム変換装置及び記録媒体
JP97-235144 1997-08-29
JP???9-235144 1997-08-29

Publications (2)

Publication Number Publication Date
KR19990024036A true KR19990024036A (ko) 1999-03-25
KR100496946B1 KR100496946B1 (ko) 2005-09-09

Family

ID=16981713

Family Applications (1)

Application Number Title Priority Date Filing Date
KR10-1998-0035360A KR100496946B1 (ko) 1997-08-29 1998-08-29 정수복원형장어명령프로세서용프로그램변환장치

Country Status (5)

Country Link
US (1) US6367067B1 (ko)
EP (2) EP0899656B1 (ko)
JP (1) JP3327818B2 (ko)
KR (1) KR100496946B1 (ko)
DE (1) DE69832932T2 (ko)

Families Citing this family (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3327818B2 (ja) 1997-08-29 2002-09-24 松下電器産業株式会社 プログラム変換装置及び記録媒体
JP2000132404A (ja) 1998-10-22 2000-05-12 Matsushita Electric Ind Co Ltd 命令列最適化装置
US6457173B1 (en) * 1999-08-20 2002-09-24 Hewlett-Packard Company Automatic design of VLIW instruction formats
GB2358491A (en) * 1999-09-03 2001-07-25 Sgs Thomson Microelectronics A relocation format for linking
US6675377B1 (en) * 1999-09-13 2004-01-06 Matsushita Electric Industrial Co., Ltd. Program conversion apparatus
JP2002091762A (ja) * 2000-09-14 2002-03-29 Denso Corp プログラム生成装置
US7331040B2 (en) * 2002-02-06 2008-02-12 Transitive Limted Condition code flag emulation for program code conversion
GB0202728D0 (en) * 2002-02-06 2002-03-27 Transitive Technologies Ltd Condition code flag emulation for program code conversion
SE521753C2 (sv) 2002-02-08 2003-12-02 Xelerated Ab Förfarande och system för att uppfylla realtidskrav för en dataprocessor
US8141068B1 (en) * 2002-06-18 2012-03-20 Hewlett-Packard Development Company, L.P. Compiler with flexible scheduling
EP1378824A1 (en) * 2002-07-02 2004-01-07 STMicroelectronics S.r.l. A method for executing programs on multiple processors and corresponding processor system
JP3847672B2 (ja) 2002-07-03 2006-11-22 松下電器産業株式会社 コンパイラ装置及びコンパイル方法
US7574583B2 (en) 2002-09-24 2009-08-11 Silicon Hive B.V. Processing apparatus including dedicated issue slot for loading immediate value, and processing method therefor
US7444620B2 (en) * 2003-02-28 2008-10-28 Bea Systems, Inc. Systems and methods for a common runtime container framework
JP2005173645A (ja) * 2003-12-05 2005-06-30 Ibm Japan Ltd プログラム開発支援装置、プログラム開発支援方法、プログラム、及び、記録媒体
JP4283131B2 (ja) * 2004-02-12 2009-06-24 パナソニック株式会社 プロセッサ及びコンパイル方法
US7401329B2 (en) * 2005-04-25 2008-07-15 Arm Limited Compiling computer programs to exploit parallelism without exceeding available processing resources
US20070083736A1 (en) * 2005-10-06 2007-04-12 Aravindh Baktha Instruction packer for digital signal processor
JP4879589B2 (ja) * 2006-01-20 2012-02-22 パナソニック株式会社 コンパイラ装置
JP5168143B2 (ja) * 2006-06-15 2013-03-21 日本電気株式会社 プロセッサ、および、命令制御方法
JP5240200B2 (ja) * 2007-10-03 2013-07-17 日本電気株式会社 データ処理装置および方法
EP2282268B1 (en) * 2009-07-23 2012-11-21 STMicroelectronics Srl Interfacing device and method, for example for systems-on-chip
JP5059174B2 (ja) * 2010-08-10 2012-10-24 株式会社東芝 プログラム変換装置、およびそのプログラム
US9477476B2 (en) * 2012-11-27 2016-10-25 Qualcomm Incorporated Fusing immediate value, write-based instructions in instruction processing circuits, and related processor systems, methods, and computer-readable media
US9424045B2 (en) 2013-01-29 2016-08-23 Arm Limited Data processing apparatus and method for controlling use of an issue queue to represent an instruction suitable for execution by a wide operand execution unit
US9348596B2 (en) 2013-06-28 2016-05-24 International Business Machines Corporation Forming instruction groups based on decode time instruction optimization
US9372695B2 (en) * 2013-06-28 2016-06-21 Globalfoundries Inc. Optimization of instruction groups across group boundaries
US9875107B2 (en) 2015-01-19 2018-01-23 International Business Machines Corporation Accelerated execution of execute instruction target
DE102018113475A1 (de) * 2018-06-06 2019-12-12 Infineon Technologies Ag Rechenwerk zum rechnen mit maskierten daten
CN118312221B (zh) * 2024-06-05 2024-08-16 中国人民解放军国防科技大学 一种弹性可重构多维并行的多核数字信号处理器

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2835103B2 (ja) * 1989-11-01 1998-12-14 富士通株式会社 命令指定方法及び命令実行方式
JP3004108B2 (ja) * 1991-11-27 2000-01-31 株式会社東芝 情報処理装置
JPH05197545A (ja) * 1991-12-10 1993-08-06 Mitsubishi Electric Corp マイクロコンピュータ
US5557761A (en) * 1994-01-25 1996-09-17 Silicon Graphics, Inc. System and method of generating object code using aggregate instruction movement
JP3430635B2 (ja) * 1994-06-17 2003-07-28 富士通株式会社 定数参照最適化処理装置
JPH08161169A (ja) * 1994-12-09 1996-06-21 Toshiba Corp Vliw方式の計算機システム及びvliwの解釈・実行方法
US5600810A (en) * 1994-12-09 1997-02-04 Mitsubishi Electric Information Technology Center America, Inc. Scaleable very long instruction word processor with parallelism matching
JPH08194626A (ja) * 1995-01-17 1996-07-30 Hitachi Ltd 即値生成方法
US5669001A (en) * 1995-03-23 1997-09-16 International Business Machines Corporation Object code compatible representation of very long instruction word programs
US5867711A (en) * 1995-11-17 1999-02-02 Sun Microsystems, Inc. Method and apparatus for time-reversed instruction scheduling with modulo constraints in an optimizing compiler
US5826054A (en) * 1996-05-15 1998-10-20 Philips Electronics North America Corporation Compressed Instruction format for use in a VLIW processor
US5787302A (en) * 1996-05-15 1998-07-28 Philips Electronic North America Corporation Software for producing instructions in a compressed format for a VLIW processor
US5805850A (en) * 1997-01-30 1998-09-08 International Business Machines Corporation Very long instruction word (VLIW) computer having efficient instruction code format
US6219779B1 (en) * 1997-06-16 2001-04-17 Matsushita Electric Industrial Co., Ltd. Constant reconstructing processor which supports reductions in code size
US5941983A (en) * 1997-06-24 1999-08-24 Hewlett-Packard Company Out-of-order execution using encoded dependencies between instructions in queues to determine stall values that control issurance of instructions from the queues
KR19990017608A (ko) * 1997-08-25 1999-03-15 유재희 신호 처리 프로세서의 연산 유닛 및 입출력 장치
JP3327818B2 (ja) 1997-08-29 2002-09-24 松下電器産業株式会社 プログラム変換装置及び記録媒体

Also Published As

Publication number Publication date
DE69832932T2 (de) 2006-07-06
JP3327818B2 (ja) 2002-09-24
EP0899656A2 (en) 1999-03-03
EP1628213A2 (en) 2006-02-22
US6367067B1 (en) 2002-04-02
EP0899656B1 (en) 2005-12-28
DE69832932D1 (de) 2006-02-02
JPH1173325A (ja) 1999-03-16
KR100496946B1 (ko) 2005-09-09
EP1628213A3 (en) 2009-01-07
EP0899656A3 (en) 2002-01-02

Similar Documents

Publication Publication Date Title
KR100496946B1 (ko) 정수복원형장어명령프로세서용프로그램변환장치
US5828886A (en) Compiling apparatus and method for promoting an optimization effect of a program
JP3896087B2 (ja) コンパイラ装置およびコンパイル方法
US6113650A (en) Compiler for optimization in generating instruction sequence and compiling method
JP4339907B2 (ja) マルチプロセッサ向け最適コード生成方法及びコンパイル装置
US5966534A (en) Method for compiling high level programming languages into an integrated processor with reconfigurable logic
US6817013B2 (en) Program optimization method, and compiler using the same
US5303357A (en) Loop optimization system
US8966459B2 (en) Processors and compiling methods for processors
US6760906B1 (en) Method and system for processing program for parallel processing purposes, storage medium having stored thereon program getting program processing executed for parallel processing purposes, and storage medium having stored thereon instruction set to be executed in parallel
JP2004511043A (ja) リターゲッタブルコンパイルシステム及び方法
Gyllenhaal et al. Optimization of machine descriptions for efficient use
US20010039653A1 (en) Program conversion method, program conversion apparatus, storage medium for storing program conversion program and program conversion program
Kessler Compiling for VLIW DSPs
JP4535912B2 (ja) データフローグラフ生成装置
US20100005456A1 (en) Compiling method, compiling apparatus and computer system for a loop in a program
JP3553845B2 (ja) プロセッサ、コンパイラ、コイパイル方法及び記録媒体
JP4721975B2 (ja) コンパイラ装置およびコンパイル方法
JP3473391B2 (ja) プログラム処理方法、プログラム処理装置及び記録媒体
Linders Compiler Vectorization for Coarse-Grained Reconfigurable Architectures
Canedo et al. Compiling for reduced bit-width queue processors
JP2629474B2 (ja) 並列パイプライン命令処理装置の命令実行処理方式
JP3464019B2 (ja) レジスタの割付方式
JPS62169272A (ja) ベクトル演算列ル−プアンロ−リング処理方式
Pister et al. Generic software pipelining at the assembly level

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: 20130520

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20140522

Year of fee payment: 10

FPAY Annual fee payment

Payment date: 20150515

Year of fee payment: 11

FPAY Annual fee payment

Payment date: 20160517

Year of fee payment: 12

LAPS Lapse due to unpaid annual fee