KR20020003882A - 마이크로프로세서의 지연 슬롯 제어 방법 - Google Patents
마이크로프로세서의 지연 슬롯 제어 방법 Download PDFInfo
- Publication number
- KR20020003882A KR20020003882A KR1020017014996A KR20017014996A KR20020003882A KR 20020003882 A KR20020003882 A KR 20020003882A KR 1020017014996 A KR1020017014996 A KR 1020017014996A KR 20017014996 A KR20017014996 A KR 20017014996A KR 20020003882 A KR20020003882 A KR 20020003882A
- Authority
- KR
- South Korea
- Prior art keywords
- instructions
- microprocessor
- instruction
- delay
- nop
- Prior art date
Links
- 238000000034 method Methods 0.000 claims abstract description 52
- 230000001419 dependent effect Effects 0.000 claims description 4
- 238000003780 insertion Methods 0.000 abstract description 6
- 230000037431 insertion Effects 0.000 abstract description 6
- 238000010586 diagram Methods 0.000 description 8
- 238000012545 processing Methods 0.000 description 7
- 230000008901 benefit Effects 0.000 description 6
- 239000002699 waste material Substances 0.000 description 5
- 238000011161 development Methods 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 3
- 238000004519 manufacturing process Methods 0.000 description 2
- 230000001413 cellular effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000006870 function Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/30079—Pipeline control instructions, e.g. multicycle NOP
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Executing Machine-Instructions (AREA)
- Advance Control (AREA)
Abstract
본 발명은 실행하는 동안 마이크로프로세서에 의하여 가변적인 개수의 암시적 nop(no operation) 명령어를 삽입하는 방법에 관한 것이다. 암시적 nop 명령어이란 프로그램 그 자체 내에 실제의 nop 명령어를 위치시키지 않고 마이크로프로세서에 의하여 실행되는 무연산(no operation) 명령어이다. 본 발명의 방법은 다중 주기 명령어가 발생할 때마다 적절한 수의 암시적 nop 명령어를 자동으로 계산하고 실행할 수 있다. 암시적 nop 명령어의 적절한 수는 필요한 지연 슬롯의 전체 개수에서 IDSI의 개수를 뺌으로서 마이크로프로세서에 의하여 자동으로 계산된다. IDSI의 개수는 어셈블러에 의하여 바람직하게 결정되어 마이크로프로세서에 사용할 수 있다. 이 수는 어셈블러에 의하여 더욱 바람직하게 코드화된 명령어의 지연 슬롯 영역 내에 위치하고, 다음으로 마이크로프로세서에 의하여 지연 슬롯 영역에서 꺼내어진다. 따라서, 본 발명의 방법은 별도의 메모리 자원이 필요하지 않고 프로그래머 또는 고급언어의 컴파일러가 사용하지 않은 각각의 지연 슬롯에 nop 명령어를 삽입할 필요 없이, 마이크로프로세서가 필요한 수의 암시적 nop 명령어를 자동으로 삽입할 수 있게 한다.
Description
마이크로프로세서는 약 25년 전에 도입되었고, 여러 상이한 형태의 기술을 통해 급속하게 발전하고 있다. 특히, 통신 산업에 있어서, 실시간 마이크로프로세서 기술이 발달함에 따라, 셀룰러 폰, 자동응답기 및 오디오시스템과 같은 정교한 장치들이 대량 생산되고 있다. 개발비용 및 생산비용을 절감하는 동시에 기술의 성능을 증가시키기 위해, 이러한 장치를 생산하는데 있어 더욱 효과적인 방법들이 지속적으로 연구되고 있다.
마이크로프로세서는 프로그래머 또는 코드 발생기에 의하여 기록되는 프로그램 코드로부터의 기계 코드 명령어를 실행한다. 현재 마이크로프로세서 명령어의 대부분은 단일 클럭 주기 내에서 실행된다. 그러나, 몇 개의 명령어는 그것을 실행하는데 있어 단일 주기 이상이 필요한데, 이를 다중 주기 명령어라 칭한다. 전형적인 다중 주기 명령어는 조건부 분기 명령어(conditional branch instructions) 및 다른 프로그램 플로우 명령어를 포함한다. 다중 주기 명령어가 작용하기 전에 경과하는 클럭 주기는 낭비된다. 이러한 클럭 주기를 지연 슬롯(delay slot)이라고 한다.
도 1은 다중 주기 명령어(14)를 위해 필요한 세 개의 빈 주기(12)를 삽입함으로서 낭비되는 시간을 설명하는 종래 기술의 프로그램 명령어 순서(10)를 나타낸다. 각각의 빈 주기(12)는 단일 주기 명령어를 수행하지 않고, 다중 주기 명령어(14)만을 수행하도록 삽입된다. 명백하게, 명령어 순서(10)는 다중 주기 명령어(14)를 수행하기에 상대적으로 비효율적인 방법을 보여준다.
마이크로프로세서의 파이프라인 구조는 효율을 더 크게 하기 위하여 많은 명령어를 병렬로 실행하도록 발전되었다. 파이프라인 형태의 마이크로프로세서는 타임 슬롯이 비어있는 동안 휴지(idle) 상태에 놓이지 않도록, 몇 개의 명령어를 동시에 실행할 수 있다. 프로그래머는 다중 주기 명령어를 실행하는데 필요한 종전의 낭비되는 시간을 사용하기 위하여 다른 명령어를 지연 슬롯에 삽입할 수 있다. 마이크로프로세서는 지연 슬롯동안 이러한 지연 슬롯 명령어를 개별적으로 추출(fetch)하여 파이프로 로딩한(load) 후, 이들 명령어를 동시에 실행한다. 이렇게 삽입된 명령어는 보통 지연 슬롯이 처음으로 발생되는 다중 주기 명령어와 관계가 없다. 대신, 이러한 명령어는 제어 임무, 다음에 오는 명령어를 레지스터에 로딩(loading)하는 것과 같은 다른 임무를 수행한다.
도 2는 종래 기술에 따른 파이프라인 형태의 구조를 갖는 마이크로프로세서에 의하여 수행되기 위해 재작성된 도 1의 프로그램을 도시한다. 이제, 프로그램의 명령어 순서(18)는 다중 주기 명령어(14)를 위한 지연 슬롯 동안 주기(4 내지 6) 내에서 실행되는 세 개의 명령어(20)를 갖고 있다. 따라서, 도 2의 프로그램은 도 1의 프로그램에 비하여 더욱 효과적으로 실행된다.
하지만, 보통 파이프라인 형태의 마이크로프로세서 구조에는 많은 단점이 있다. 예를 들어, 유용한 명령어가 지연 슬롯에 삽입되지 않은 경우, 다중 주기 명령어는 프로그램을 유지하는 시간 및 메모리 공간을 모두 낭비하게 된다. 지연 슬롯 중 몇 개만이 유용한 명령어로 채워진 있다면, 사용하지 않은 지연 슬롯은 nop(no operation) 명령어로 로딩되어야 한다. nop 명령어는 메모리 공간이 필요하지만, 어떤 유용한 기능을 수행하는 것은 아니다. 이러한 nop 명령어가 자주 필요하므로, 지연 슬롯 문제는 단지 줄어들 뿐이고, 해결되는 것은 아니다. 따라서, 추가 메모리 공간의 필요성과 낭비되는 시간의 양 사이에 상충관계(tradeoff)가 존재한다.
낭비되는 시간과 메모리 공간 문제 외에, 프로그래머의 요구사항도 고려해야 한다. 성능을 최적화하기 위하여, 프로그래머는 가능한 한 많은 지연 슬롯을 유용한 명령어로 채워야 한다. 그러나, 유용한 명령어를 찾는다는 것은 그렇게 간단하지 않다. 유용한 명령어를 모든 지연 슬롯에 삽입하는 과정은 시간을 요하며, 문서화하기 어렵고 관리하기도 어렵다. 프로그래머는 지연 슬롯 내에 위치시킬 유용한 명령어를 탐색하는데 많은 시간을 소비한다. 게다가, C 컴파일러와 같은 고급언어의 컴파일러는 또한 지연 슬롯을 유용한 명령어로 채우려고 한다. 이러한 컴파일러가 최적의 알고리즘을 포함하고 있다고 하더라도, 종종 지연 슬롯을 모두 사용할 수 없으므로, 프로그램을 저장하는데 필요한 공간을 추가적으로 낭비하게 된다.
프로그램 플로우(flow) 명령어는 이러한 다중 주기 명령어의 예이며, 통상적인 통신 응용프로그램에서, 평균적으로 18개의 단일 주기 명령어마다 한 개의 프로그램 플로우 명령어의 비율로 발생한다. 평균 프로그램 플로우 명령어가 세 개의 필요한 nop 명령어를 발생시키기 때문에, 이 비율은 하기의 수학식 1에 따라, 낭비되는 메모리 기대용량을 계산하는데 사용될 수 있다.
수학식 1은 예를 들어, 18Kb 크기의 프로그램이, 나머지 다른 형태의 다중 주기 명령어에 의하여 낭비되는 메모리를 제외하고, 3Kb의 메모리를 낭비하는 것을 나타낸다. 이러한 메모리 낭비는 생산비용을 증가시킬 뿐만 아니라, 연관된 장치의 작동 효율도 감소시킨다. 따라서, 다중 주기 명령어는 시간 및 프로그램 메모리의 낭비, 프로그래머가 지연 슬롯을 명령어를 위해 사용하려는데 필요한 시간의 양의 증가를 포함하는 세 가지 측면의 문제가 있다.
파이프라인 형태의 마이크로프로세서 구조는 다중 주기 명령어가 발생하는 상대적으로 높은 비율에서 큰 단점이 있다. 보통, 다중 주기 명령어를 처리하는 두 가지 상이한 방법이 종래 기술에 사용된다. 제 1방법은, 마이크로프로세서가 명시적으로 프로그램 내부에 nop 명령어를 포함하지 않고도 nop 명령어를 실행할 수 있기 때문에, 지연 슬롯을 사용하지 않아 시간을 낭비하지만 메모리는 절약한다. 제 2방법은 실제적인 명령어 또는 nop 명령어 중 하나를 삽입함으로 인하여 모든 지연 슬롯을 사용하게 된다. nop 명령어가 삽입되면, 필요한 메모리 공간이 증가한다. 그러나, 실제 명령어가 효과적으로 삽입되는 경우, 프로그램을 실행하는데 필요한 시간의 양은 줄어든다.
고성능으로 프로그램을 실행할 필요가 없다면(시간 측면에서), 종래 기술의 제 1방법을 선택한다. 프로그램의 수행성능, 즉, 프로그램이 수행되는데 필요한 시간의 양은 메모리 절약 및 프로그래머의 프로그래밍의 용이성과 상충관계에 있다. 종래 기술의 제 2방법은 효과적으로 실행되어야 하는 고성능 응용 분야를 위해 고안된 것이다. 따라서, 프로그램의 빠르고 효과적인 실행에 관심이 있는 프로그래머는 모든 지연 슬롯에 유용한 명령어를 삽입해야 한다. 이는 효과적인 성능을 얻을 수 있을 수 있으므로 모든 지연 슬롯을 사용하는 경우 프로그램을 실행하는데 필요한 시간을 단축시킬 수도 있지만, 모든 지연 슬롯을 유용하게 사용하지 않는 경우 프로그램을 저장하는데 필요한 메모리의 양을 확장하는 불이익을 발생시키는 지루한 작업이다. 모든 지연 슬롯을 사용하지 못하게 되면, 남아있는 사용되지 않은 모든 지연 슬롯에 nop 명령어를 삽입한다. 따라서, 다중 주기 명령어를 처리하는 종래 기술의 방법은 속도, 경제적이고 효율적인 메모리 사용 및 프로그래밍의 용이성과 같은 세 가지의 장점을 모두 제공하지 못한다.
유용한 명령어를 프로그래머 또는 고급언어의 컴파일러에 의해 지연 슬롯에 명시적으로 삽입되게 하고, 암시적인 nop 명령어는 마이크로프로세서의 동작 동안에 실질적으로 자동화된 과정에 의해 남아있는 지연 슬롯에 삽입되도록 하여, 마이크로프로세서에 연관된 메모리공간을 더욱 효율적으로 사용되게 하는 동시에 성능향상과 개발비용 및 시간의 단축을 도모하며, 그러한 유용한 명령어를 저장할 추가 메모리의 요구사항과 그러한 암시적 nop 명령어에 의한 프로그램 수행동안 낭비되는 시간의 양 사이의 최적화된 균형을 제공하는, 지연 슬롯의 효율적인 처리를 위한 방법이 필요하다.
본 발명은 가변적인 개수의 명령어를 지연 슬롯에 삽입하는 방법에 관한 것으로서, 특히, 유용한 명령어가 지연 슬롯에 위치하는 것을 허용하면서, 프로그램 자체에 실제의 nop(no operation) 명령어를 실질적으로 위치하지 않고, 다중 주기 명령어(multi-cycle instruction)를 실행하기 위하여 지연 슬롯에 삽입될 추가적인 nop 명령어의 개수를 자동으로 및 동적으로 결정하는 방법에 관한 것이다. 본 발명의 방법은 페치(fetch) 명령어의 수가 줄기 때문에 전력소모를 방지할 뿐 아니라, 프로그램을 저장하는데 필요한 메모리의 용량을 감소시킨다. 이러한 이점들은 지연 슬롯을 사용함과 동시에 달성될 수 있다.
전술한 및 다른 목적, 특징 및 이점들은 첨부된 도면을 참조하여 이하의 본 발명의 바람직한 실시예의 상세한 설명으로부터 명백하게 이해될 것이다.
도 1은 지연 슬롯 없이 다중 주기 명령어를 처리하는 종래 기술의 제 1방법을 설명하는 개략적인 블럭도,
도 2는 지연 슬롯을 포함하는 다중 주기 명령어를 처리하는 종래 기술의 제 2방법을 설명하는 개략적인 블럭도,
도 3은 본 발명에 따른 효율적인 지연 슬롯 사용을 위한 예시적인 방법을 설명하는 개략적인 블럭도,
도 4는, 도 2에 도시된 구조와 유사한 구조를 통해, 모든 지연 슬롯을 사용하지 않더라도, 도 3의 명령어를 수행하는 덜 효율적인 종래 기술의 방법의 개략적인 블럭도, 및
도 5a는 본 발명에 따른 nop 지연 슬롯을 삽입하는 예시적인 방법의 흐름도이고, 도 5b는 도 5a에 나타낸 방법에 따라 구성된 예시적인 프로그램의 일부분을 나타내는 도면.
본 발명은 실행 시간동안 마이크로프로세서가 가변적인 개수의 암시적 nop 명령어를 삽입하는 방법에 관한 것이다. 암시적 nop 명령어는 프로그램 그 자체에 실제로 nop 명령어를 위치시키지 않고 마이크로프로세서에 의하여 실행되는 무연산(no operation) 명령어이다. 본 발명의 방법은 다중 주기 명령어가 발생할 때마다 암시적 nop 명령어의 적절한 개수를 자동으로 계산하고 실행한다. 이하에서는, "자동으로(automatically)"라는 용어는 프로그래머 또는 코드 발생기의 직접적인 개입 없이 일어나는 처리 과정을 뜻한다. 암시적 nop 명령어의 적절한 개수는, 마이크로프로세서에 의해, 필요한 지연 슬롯의 전체 개수에서 삽입된 지연 슬롯 명령어(inserted delay-slot instruction : IDSI)의 개수를 뺌으로서 자동으로 계산된다.
본 발명의 방법은 페치(fetch) 동작의 수를 줄이기 때문에 전력소모를 줄이고 프로그램을 저장하는데 필요한 메모리 공간의 양도 줄이는 이점이 있다. 또한, 본 발명은 nop 명령어의 삽입과 프로그래머가 유용한 지연 슬롯 명령어를 삽입하는데 요구되는 추가적인 시간 사이의 균형뿐 아니라, 이러한 유용한 명령어를 수용하는 추가 메모리 공간의 필요와 프로그램을 실행하는 동안 낭비되는 시간의 양 사이에 최적의 균형을 제공한다.
삽입된 지연 슬롯 명령어의 개수는 바람직하게 어셈블러로 산출된 후, 마이크로프로세서에 이용된다. 더욱 바람직하게, 이 개수는 어셈블러에 의해 코드화된 명령어 내의 지연 슬롯 영역에 위치하고, 다음으로 마이크로프로세서에 의하여 지연 슬롯 영역으로부터 꺼내어진다. 따라서, 본 발명의 방법은 종래 기술의 도 1과 대조적으로 별도의 메모리 자원을 요구하지 않으며, 프로그래머 또는 고급언어의 컴파일러와 같은 코드 발생기에 의해 사용하지 않는 각각의 지연 슬롯에 nop 명령을 삽입하게 하지 않으면서, 마이크로프로세서로 하여금 다중 주기 명령어가 작동하는데 필요한 주기를 채우기 위해 필요한 개수의 암시적 nop 명령어를 자동으로 삽입하게 한다. 다중 주기 명령어를 위해 삽입된 지연 슬롯 명령어(IDSI)는 암시적으로 또는 다른 의미에서 nop 명령어가 아니라는 점에서 유용한 명령어이다.
본 발명에 따르면, 다수의 명령어를 실행하는 동안 마이크로프로세서에 의하여 필요한 수의 nop(no operation) 명령어를 자동으로 삽입하는 방법에 관한 것으로서, 상기 다수의 명령어는 적어도 하나 이상의 다중 주기 명령어를 포함하며, 지연 슬롯의 전체 개수는 상기 적어도 하나 이상의 다중 주기 명령어를 위해 필요하며, (a) 상기 적어도 하나 이상의 다중 주기 명령어와 연관된 삽입된 지연 슬롯 명령어(IDSI)의 개수를 결정하는 단계, (b) 상기 마이크로프로세서로 상기 지연 슬롯의 전체 개수에서 상기 IDSI의 개수를 뺌으로서 nop 명령어의 필요한 개수를 계산하는 단계, 및 (c) 상기 마이크로프로세서에 의하여 상기 nop 명령어의 필요한 개수를 실행하는 단계를 포함한다.
바람직하게, 상기 적어도 하나 이상의 다중 주기 명령어에 필요한 지연 슬롯의 전체 개수는 하드웨어 의존적이다. 본 발명의 방법은 또한 바람직하게, 상기 마이크로프로세서로 실행하기 위하여 다수의 명령어를 수신하고 상기 다수의 명령어를 준비하는 어셈블러를 제공하는 단계를 더 포함한다. 상기 어셈블러를 제공하는 단계는 단계 (a)가 수행되기 이전에 수행되고, 단계 (a)는 (i) 상기 어셈블러로 IDSI의 개수를 산출하는 단계, 및 (ii) 상기 IDSI의 개수를 상기 마이크로프로세서에 전달하는 단계를 더 포함한다. 더욱 바람직하게, IDSI의 개수를 마이크로프로세서에 전달하는 상기 단계는 (I) 상기 적어도 하나 이상의 다중 주기 명령어 내에 지연 슬롯 영역을 제공하는 단계, (II) 상기 어셈블러에 의하여 상기 IDSI의 개수를 상기 지연 슬롯 영역 내에 위치하도록 하는 단계, 및 (III) 상기 마이크로프로세서로 상기 IDSI의 개수를 상기 지연 슬롯 영역으로부터 가져오는 단계를 더 포함한다.
본 발명의 다른 실시예에 따르면, 적어도 하나 이상의 다중 주기 명령어를 포함하는 다수의 명령어를 실행하는 동안 마이크로프로세서에 의하여 필요한 수의nop 명령어를 자동으로 삽입하는 방법에 있어서, (a) 상기 다수의 명령어를 수신하는 어셈블러를 제공하는 단계, (b) 상기 적어도 하나 이상의 다중 주기 명령어에 필요한 지연 슬롯의 전체 개수를 상기 마이크로프로세서로 제공하는 단계, (c) 상기 어셈블러에 의하여 상기 적어도 하나 이상의 다중 주기 명령어에 연관된 IDSI의 개수를 결정하는 단계, (d) 상기 IDSI의 개수를 상기 마이크로프로세서에 전달하는 단계, (e) 상기 마이크로프로세서에 의하여 상기 지연 슬롯의 전체 개수에서 상기 IDSI의 개수를 뺌으로서 상기 nop 명령어의 필요한 개수를 계산하는 단계, 및 (f) 상기 마이크로프로세서에 의하여 상기 필요한 수의 nop 명령어를 실행하는 단계를 포함한다. 이하에서, "고급언어의 컴파일러"는, 예를 들어 어셈블리 프로그래밍 언어보다 고급 레벨인 C 또는 C++과 같은 프로그래밍 언어용 컴파일러를 의미한다.
본 발명은 실행 시간동안 마이크로프로세서로 가변적인 개수의 nop 명령어를 삽입하는 방법에 관한 것이다. 암시적 nop 명령어는 프로그램 그 자체에 실제로 nop 명령어를 위치시키지 않고 마이크로프로세서에 의하여 실행되는 무연산(no operation) 명령어이다. 본 발명의 방법은 다중 주기 명령어가 발생할 때마다 암시적 nop 명령어의 적절한 개수를 자동으로 계산하고 실행할 수 있다. 이하에서, "자동으로(automatically)"라는 용어는 프로그래머 또는 고급언어의 컴파일러의 직접적인 개입 없이 발생하는 처리 과정을 뜻한다. 암시적 nop 명령어의 적절한 개수는, 마이크로프로세서에 의해, 필요한 지연 슬롯의 전체 개수에서 삽입되는 지연 슬롯 명령어(inserted delay-slot instruction : IDSI)의 개수를 뺌으로서 자동으로 계산된다.
IDSI의 개수는 바람직하게도 어셈블러로 산출된 후, 마이크로프로세서에 이용된다. 이 개수는, 더욱 바람직하게, 어셈블러에 의하여 코드화된 명령어 내의 지연 슬롯 영역에 위치하고, 다음으로 마이크로프로세서에 의하여 지연 슬롯 영역으로부터 꺼내어진다. 따라서, 본 발명의 방법은 별도의 메모리 자원이 필요하지 않으며, 프로그래머 또는 고급언어의 컴파일러에 의해 사용하지 않는 각 지연 슬롯에 nop 명령어를 삽입하도록 하지 않고서, 마이크로프로세서에 의하여 암시적 nop 명령어의 필요한 개수를 자동으로 삽입하게 할 수 있다.
본 발명에 따른 효과적인 지연 슬롯 사용 방법의 원리와 작동은 도면과 첨부한 설명을 참조하면 더욱 명백하게 이해할 수 있고, 이러한 도면은 예시적인 목적으로만 제시된 것이며 한정하는 의미는 아니다.
이하 도면을 참조하면, 도 3은 본 발명에 따른 효과적인 지연 슬롯 사용의 예시적인 방법을 도시한 개략적인 블럭도이다. 도시한 바와 같이, 프로그램의 적어도 한 부분을 나타내는 명령어 순서(22)는 다중 주기 명령어(24)를 특징으로 한다. 명령어 순서(22)는, 다중 주기 명령어(24)의 지연 슬롯 도중 실행되는 오직 하나의 삽입된 지연 슬롯 명령어(IDSI)(26)가 특징이다. 남아있는 지연 슬롯은 가변적인 개수의 암시적 nop 명령어로 채워진다. 암시적 nop 명령어는 프로그램 내에 위치하지 않는 nop 명령어이기 때문에 사용하지 않은 지연 슬롯이 메모리에 nop 명령어를 삽입할 필요가 없다. 암시적 nop 명령어의 수는 동적으로 변화하여 사용하지 않은 지연 슬롯의 수와 동일하게 된다. 따라서, 프로그래머 또는 고급언어의 컴파일러는 모든 지연 슬롯을 IDSI 또는 nop 명령어로 채우지 않아도 된다.
가변적인 개수의 암시적 nop 명령어를 삽입하면 원하는 만큼의 유용한 지연 슬롯 명령어만을 삽입할 수 있어, 낭비되는 주기를 최소화하는 한편 프로그램에 필요한 메모리용량을 줄일 수 있는 장점이 있다. 또한, 유용한 지연 슬롯 명령어를 포함하는 지연 슬롯을 부분적으로 사용하기 때문에, 프로그래머는 명령어를 더욱신속하고 효율적으로 프로그램하고 디버그할 수 있으므로, 개발시간의 양 및 특정 제품을 개발하는데 필요한 공수(工數 : man-hour)의 양을 감소시킬 수 있다.
이에 반해, 이러한 다중 주기 명령어를 수행하는데 현재 사용하는 종래 기술의 방법은 현저하게 비효율적이다. 예를 들어, 도 4는 도 3의 명령어를 나타내지만, 본 발명의 방법을 구현하지 않은 종래 기술에 따른 개략적인 블럭도이다. 예시된 명령어 순서(28)는 도시한 바와 같이, 다중 주기 명령어(24) 및 하나의 지연 슬롯 명령어(26)를 재차 특징으로 한다. 하지만, 종래 기술의 방법은 다중 주기 명령어(24)를 위해 기설정된 수의 지연 슬롯을 채우기 위하여 두 개의 nop 명령어(30)를 삽입할 것을 요구하여, 두 개의 지연 슬롯을 낭비한다. 따라서, 도 4의 종래 기술의 방법은 명백하게 본 발명의 방법에 비하여 비효율적이다.
도 5a는 마이크로프로세서에 의하여 작동하는 본 발명의 방법의 예를 도시하는 흐름도이다. 마이크로프로세서는 다중 주기 명령어를 실행하기 위하여, 지연 슬롯마다 지연 슬롯 명령어 또는 nop 명령어 중 하나를 삽입해야 한다. 본 발명에 있어서, nop 명령어는 도 5a에 나타낸 방법에 따라 동적으로 결정된 개수의 암시적 nop 명령어이다.
간략하게 말하면, 단계(1)에 나타낸 바와 같이 다중 주기 명령어를 위해 필요한 지연 슬롯의 전체 개수(TDS)가 마이크로프로세서에 이용된다. 필요한 지연 슬롯의 전체 개수는 하드웨어 의존적이다. 단계(2)에서, 어셈블러는 다중 주기 명령어를 위한 삽입된 지연 슬롯 명령어(IDSI)의 개수를 결정한다. 이들은 암시적으로 또는 다른 의미에서 nop 명령어가 아니라는 점에서 유용한 명령어이다. 암시적 nop명령어의 목적은 다중 주기 명령어를 실행하는 동안 IDSI에 사용되지 않는 시간을 채우는 것이다.
바람직하게, 어셈블러는 다중 주기 명령어를 위해 각각의 삽입된 유용한 지연 슬롯 명령어를 산출함으로서 삽입된 지연 슬롯 명령어의 개수(IDSI 개수)를 결정한다.
단계(3)에서, 어셈블러는 바람직하게 IDSI의 개수(사용된 지연 슬롯의 개수)를 코드화된 다중 주기 명령어의 지연 슬롯 영역 내에 위치시킨다. 이 명령어의 지연 슬롯 영역은 IDSI 개수를 저장하는데 바람직한 추가 영역이고, 전형적으로(필수는 아니지만) 2-3 bit의 길이를 갖는다.
단계(4)에서, 어셈블러는 다중 주기 명령어의 IDSI 개수를 마이크로프로세서에 제공한다. 바람직하게, 마이크로프로세서는 실행 시간동안 코드화된 명령어의 지연 슬롯 영역을 조사함으로서 IDSI 개수를 획득하여 필요한 암시적 nop 명령어의 개수(사용하지 않은 지연 슬롯의 개수인 UUDS 수)를 계산한다.
단계(5)에서, 마이크로프로세서는 수학식 2에 나타낸 바와 같이, TDS 개수(필요한 지연 슬롯의 전체 개수)로부터 IDSI 개수(삽입된 지연 슬롯 명령어의 개수)를 뺌으로서 UUDS 개수를 계산한다.
단계(6)에서, 마이크로프로세서는 다중 주기 명령어를 실행하는 동안 필요한 개수의 암시적 nop 명령어를 삽입한다.
도 5a의 방법의 작동 예가 도 5b와 관련하여 기술된다. 도 5b는 주프로그램(main program)(34) 및 루틴(routine)(36)을 포함하는 프로그램(32)의 일부분을 나타낸다. 다수의 단일 슬롯 명령어(instruction)(38)가 또한 도시되어 있다. 루틴(제 2프로그램)(36)을 루틴_네임으로 호출하는 호출 명령어(call routine_name)(40)가 도시되어 있다. 루틴(36)의 작동은 복귀명령어(return)(42)에 의하여 종결된다. 예를 들어, 분기하기 전 현재의 환경을 저장하는 호출 명령어(40)는 호출 명령어(40)가 작용하기 전 4개의 클럭 주기를 요구한다. 하나의 클럭 주기는 호출 명령어(40)의 코드에 필요하며, 3개의 클럭 주기는 3개의 지연 슬롯에 필요하다. 주프로그램(34)이 제어를 재개하기 전 환경을 복원해야 하는 복귀 명령어(42)는, 예를 들어, 6개의 클럭 주기가 필요하다. 1개의 클럭 주기는 복귀 명령어(42)의 코드에 필요하며, 5개의 클럭 주기는 5개의 지연 슬롯에 필요하다. 따라서, 호출 명령어(40) 및 복귀 명령어(42)는 둘 다 다중 주기 명령어이다.
호출 명령어(40) 및 복귀 명령어(42)의 작동을 위해 필요한 암시적 nop 명령어의 개수를 계산하기 위하여, 마이크로프로세서는 다중 주기 명령어가 발생할 때마다 지연 슬롯으로 삽입되는 지연 슬롯 명령어의 개수를 알아야 한다. 도 5a와 관련하여 설명한 바와 같이, 마이크로프로세서는 코드화된 명령어의 지연 슬롯 영역으로부터 이 개수를 가져온다.
이 예에서, 단일의 유용한 지연 슬롯 명령어(IDSI ; inserted inst.)(44)는 프로그래머에 의하여 호출 명령어(40)를 위해 3개의 필요한 지연 슬롯으로부터 삽입된다. 2개의 유용한 지연 슬롯 명령어(44)는 복귀 명령어(42)를 위하여 5개의 필요한 지연 슬롯으로부터 삽입된다.
프로그램(32)의 컴파일링 과정 동안, 어셈블러는 호출 명령어(40)를 위해 삽입된 지연 슬롯 명령어(44)의 개수를 산출하는데, 이 예에서는 그 수는 1개이다. 따라서, 어셈블러는 호출 명령어(40)의 지연 슬롯 영역으로 숫자 1을 로딩한다. 이 정보는 명령어가 실행되는 동안 마이크로프로세서에 전달되기 위해 메모리로 로딩된다. 3개의 지연 슬롯이 필요하므로, 마이크로프로세서는 도 5a에 설명된 바와 같이, 2개의 암시적 nop 명령어를 실행한다.
마찬가지로, 어셈블러도 복귀 명령어(42)를 위해 삽입된 지연 슬롯 명령어(44)의 수를 산출하는데, 이 예에서는 그 수는 2개이다. 따라서, 어셈블러는 숫자 2를 복귀 명령어(42)의 지연 슬롯 영역에 로딩한다. 5개의 지연 슬롯이 필요하므로, 마이크로프로세서는, 역시 도 5a에 설명한 바와 같이, 3개의 암시적 nop 명령어를 실행한다.
따라서, 본 발명의 지연 슬롯 제어 메커니즘의 방법은 하기의 이점이 있다. 첫째, 본 발명의 방법은 프로그램의 성능 및 프로그램에 필요한 메모리공간의 용량 사이에서의 상충관계(tradeoff)를 최적화한다. 대신에, 본 발명은 nop 명령어의 삽입 및 프로그래머가 유용한 지연 슬롯 명령어를 삽입하는데 필요한 추가 시간 사이에서의 균형뿐 아니라, 그러한 유용한 명령어를 수용하는 추가 메모리 공간의 필요성과 프로그램을 실행하는 동안 낭비되는 시간의 양 사이에서 균형을 최적화한다.
둘째, 본 발명의 방법은 프로그래머, 고급언어의 컴파일러 또는 다른 자동기계어 코드 프로그래밍툴이 유용한 지연 슬롯 명령어를 포함하지 않는 각각의 지연 슬롯에 nop 명령어를 삽입할 필요를 없앰으로써 프로그래머가 프로그램에 필요한 만큼만 유용한 지연 슬롯 명령어를 삽입할 수 있도록 해준다. 따라서, 모든 지연 슬롯을 IDSI로 채우지 못하는 단점을 피하면서 동시에 사용 가능한 지연 슬롯의 적어도 일부분을 IDSI에 사용하는 장점 사이에서 균형을 유지한다.
이상과 같이, 예를 들어 기술하였지만, 다른 다양한 실시예가 본 발명의 사상과 범주 안에서 가능하다는 것을 이해해야할 것이다.
Claims (8)
- 다수의 명령어를 실행하는 동안 마이크로프로세서에 의하여 필요한 수의 nop(no operation) 명령어를 자동으로 삽입하는 지연 슬롯 제어 방법에 있어서, 상기 다수의 명령어는 적어도 하나 이상의 다중 주기 명령어를 포함하고, 지연 슬롯의 전체 개수는 상기 적어도 하나 이상의 다중 주기 명령어에 대해 필요하며,(a) 상기 적어도 하나 이상의 다중 주기 명령어와 연관된 삽입된 지연 슬롯 명령어(inserted delay-slot instruction : IDSI)의 개수를 결정하는 단계,(b) 상기 마이크로프로세서에 의하여 상기 지연 슬롯의 전체 개수에서 상기 IDSI의 개수를 뺌으로서 상기 nop 명령어의 필요한 개수를 계산하는 단계, 및(c) 상기 마이크로프로세서에 의하여 상기 필요한 개수의 nop 명령어를 실행하는 단계를 포함하는 지연 슬롯 제어 방법.
- 제 1 항에 있어서,상기 적어도 하나 이상의 다중 주기 명령어에 대해 필요한 상기 지연 슬롯의 전체 개수는 하드웨어 의존적인 지연 슬롯 제어 방법.
- 제 1항에 있어서,상기 다수의 명령어를 수신하고 상기 다수의 명령어를 상기 마이크로프로세서에 의하여 실행하기 위해 준비하기 위한 어셈블러를 제공하는 단계를 더 포함하며, 상기 어셈블러를 제공하는 단계는 상기 단계(a)가 수행되기 전에 수행되며, 상기 단계(a)는,(i) 상기 IDSI의 개수를 상기 어셈블러에 의하여 산출하는 단계, 및(ii) 상기 IDSI의 개수를 상기 마이크로프로세서에 전달하는 단계를 포함하는 지연 슬롯 제어 방법.
- 제 3항에 있어서,상기 IDSI의 개수를 상기 마이크로프로세서에 전달하는 상기 단계는,(I) 상기 적어도 하나 이상의 다중 주기 명령어에 지연 슬롯 영역을 제공하는 단계,(II) 상기 어셈블러에 의하여 상기 IDSI의 개수를 상기 지연 슬롯 영역에 위치시키는 단계, 및(III) 상기 마이크로프로세서에 의하여 상기 지연 슬롯 영역으로부터 상기 IDSI의 개수를 가져오는 단계를 더 포함하는 지연 슬롯 제어 방법.
- 다수의 명령어를 실행하는 동안 마이크로프로세서에 의하여 필요한 수의 nop명령어를 자동으로 삽입하는 지연 슬롯 제어 방법에 있어서, 상기 다수의 명령어는 적어도 하나 이상의 다중 주기 명령어를 포함하며,(a) 상기 다수의 명령어를 수신하는 어셈블러를 제공하는 단계,(b) 상기 마이크로프로세서에 상기 적어도 하나 이상의 다중 주기 명령어에 필요한 지연 슬롯의 전체 개수를 제공하는 단계,(c) 상기 어셈블러에 의하여 상기 적어도 하나 이상의 다중 주기 명령어에 연관된 IDSI의 개수를 결정하는 단계,(d) 상기 IDSI의 개수를 상기 마이크로프로세서에 전달하는 단계,(e) 상기 마이크로프로세서에 의하여 상기 지연 슬롯의 전체 개수에서 상기 IDSI 개수를 뺌으로서 상기 nop 명령어의 필요한 개수를 계산하는 단계, 및(f) 상기 마이크로프로세서에 의하여 상기 필요한 수의 nop 명령어를 실행하는 단계를 포함하는 지연 슬롯 제어 방법.
- 제 5항에 있어서,상기 적어도 하나 이상의 다중 주기 명령어에 필요한 상기 지연 슬롯의 전체 개수는 하드웨어 의존적인 지연 슬롯 제어 방법.
- 제 5항에 있어서,단계(a)는,(i) 상기 어셈블러에 의하여 상기 IDSI의 개수를 산출하는 단계를 더 포함하는 지연 슬롯 제어 방법.
- 제 7항에 있어서,상기 IDSI의 개수를 상기 마이크로프로세서에 전달하는 상기 단계는,(i) 상기 적어도 하나 이상의 다중 주기 명령어 내에 지연 슬롯 영역을 제공하는 단계,(ii) 상기 어셈블러에 의하여 상기 지연 슬롯 영역 내에 상기 IDSI의 개수를 위치시키는 단계, 및(iii) 상기 마이크로프로세서에 의하여 상기 지연 슬롯 영역으로부터 상기 IDSI의 개수를 가져오는 단계를 더 포함하는 지연 슬롯 제어 방법.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/318,631 US6275929B1 (en) | 1999-05-26 | 1999-05-26 | Delay-slot control mechanism for microprocessors |
US09/318,631 | 1999-05-26 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20020003882A true KR20020003882A (ko) | 2002-01-15 |
KR100479281B1 KR100479281B1 (ko) | 2005-03-29 |
Family
ID=23238969
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR10-2001-7014996A KR100479281B1 (ko) | 1999-05-26 | 2000-04-27 | nop 명령어를 자동으로 삽입하는 방법 |
Country Status (6)
Country | Link |
---|---|
US (1) | US6275929B1 (ko) |
EP (1) | EP1190308A1 (ko) |
JP (1) | JP3639557B2 (ko) |
KR (1) | KR100479281B1 (ko) |
CN (1) | CN1153131C (ko) |
WO (1) | WO2000073896A1 (ko) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7774581B2 (en) | 2007-03-23 | 2010-08-10 | Samsung Electronics Co., Ltd. | Apparatus for compressing instruction word for parallel processing VLIW computer and method for the same |
US8443174B2 (en) | 2007-02-22 | 2013-05-14 | Samsung Electronics Co., Ltd. | Processor and method of performing speculative load operations of the processor |
Families Citing this family (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6564316B1 (en) * | 1998-09-10 | 2003-05-13 | Parthusceva Ltd. | Method and apparatus for reducing code size by executing no operation instructions that are not explicitly included in code using programmable delay slots |
US6883166B1 (en) * | 2000-11-21 | 2005-04-19 | Hewlett-Packard Development Company, L.P. | Method and apparatus for performing correctness checks opportunistically |
US6880072B1 (en) * | 2001-05-08 | 2005-04-12 | Lsi Logic Corporation | Pipelined processor and method using a profile register storing the return from exception address of an executed instruction supplied by an exception program counter chain for code profiling |
JP3738842B2 (ja) * | 2002-06-04 | 2006-01-25 | 富士通株式会社 | 遅延分岐機能を備えた情報処理装置 |
US20050071830A1 (en) * | 2003-09-30 | 2005-03-31 | Starcore, Llc | Method and system for processing a sequence of instructions |
JP2005149297A (ja) * | 2003-11-18 | 2005-06-09 | Renesas Technology Corp | プロセッサおよびそのアセンブラ |
US7310741B2 (en) * | 2004-08-17 | 2007-12-18 | Hewlett-Packard Development Company, L.P. | Phase adjusted delay loop executed by determining a number of NOPs based on a modulus value |
US7318478B2 (en) * | 2005-06-01 | 2008-01-15 | Tiw Corporation | Downhole ball circulation tool |
US7434625B2 (en) * | 2005-06-01 | 2008-10-14 | Tiw Corporation | Downhole flapper circulation tool |
JP4680876B2 (ja) * | 2006-12-11 | 2011-05-11 | ルネサスエレクトロニクス株式会社 | 情報処理装置及び命令フェッチ制御方法 |
CN101425053B (zh) * | 2007-11-02 | 2010-08-18 | 北京中电华大电子设计有限责任公司 | 一种cpu周期寄存器的实现方法 |
CN101866281B (zh) * | 2010-06-13 | 2013-05-22 | 清华大学 | 一种多周期指令执行方法和装置 |
US20140180848A1 (en) * | 2012-12-20 | 2014-06-26 | Wal-Mart Stores, Inc. | Estimating Point Of Sale Wait Times |
GB2501582B (en) * | 2013-02-11 | 2014-12-24 | Imagination Tech Ltd | Speculative load issue |
KR102688577B1 (ko) * | 2016-09-19 | 2024-07-26 | 삼성전자주식회사 | 전자 장치, vliw 프로세서 및 그 제어 방법들 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3499252B2 (ja) * | 1993-03-19 | 2004-02-23 | 株式会社ルネサステクノロジ | コンパイル装置及びデータ処理装置 |
JP3532975B2 (ja) * | 1993-09-27 | 2004-05-31 | 株式会社ルネサステクノロジ | マイクロコンピュータおよびそれを用いて命令を実行する方法 |
US5724566A (en) * | 1994-01-11 | 1998-03-03 | Texas Instruments Incorporated | Pipelined data processing including interrupts |
WO1998006042A1 (en) * | 1996-08-07 | 1998-02-12 | Sun Microsystems, Inc. | Wide instruction unpack method and apparatus |
US5958044A (en) * | 1997-01-24 | 1999-09-28 | Texas Instruments Incorporated | Multicycle NOP |
US5964867A (en) * | 1997-11-26 | 1999-10-12 | Digital Equipment Corporation | Method for inserting memory prefetch operations based on measured latencies in a program optimizer |
-
1999
- 1999-05-26 US US09/318,631 patent/US6275929B1/en not_active Expired - Lifetime
-
2000
- 2000-04-27 WO PCT/EP2000/003833 patent/WO2000073896A1/en not_active Application Discontinuation
- 2000-04-27 EP EP00929452A patent/EP1190308A1/en not_active Withdrawn
- 2000-04-27 JP JP2001500949A patent/JP3639557B2/ja not_active Expired - Fee Related
- 2000-04-27 CN CNB00813118XA patent/CN1153131C/zh not_active Expired - Fee Related
- 2000-04-27 KR KR10-2001-7014996A patent/KR100479281B1/ko not_active IP Right Cessation
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8443174B2 (en) | 2007-02-22 | 2013-05-14 | Samsung Electronics Co., Ltd. | Processor and method of performing speculative load operations of the processor |
US7774581B2 (en) | 2007-03-23 | 2010-08-10 | Samsung Electronics Co., Ltd. | Apparatus for compressing instruction word for parallel processing VLIW computer and method for the same |
Also Published As
Publication number | Publication date |
---|---|
EP1190308A1 (en) | 2002-03-27 |
KR100479281B1 (ko) | 2005-03-29 |
CN1153131C (zh) | 2004-06-09 |
WO2000073896A1 (en) | 2000-12-07 |
JP3639557B2 (ja) | 2005-04-20 |
US6275929B1 (en) | 2001-08-14 |
CN1382274A (zh) | 2002-11-27 |
JP2003521761A (ja) | 2003-07-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR100479281B1 (ko) | nop 명령어를 자동으로 삽입하는 방법 | |
US5303357A (en) | Loop optimization system | |
US7210129B2 (en) | Method for translating programs for reconfigurable architectures | |
US5761514A (en) | Register allocation method and apparatus for truncating runaway lifetimes of program variables in a computer system | |
US8869121B2 (en) | Method for the translation of programs for reconfigurable architectures | |
EP0768602B1 (en) | Variable word length VLIW-instruction processor | |
US7725696B1 (en) | Method and apparatus for modulo scheduled loop execution in a processor architecture | |
US5530964A (en) | Optimizing assembled code for execution using execution statistics collection, without inserting instructions in the code and reorganizing the code based on the statistics collected | |
US5857104A (en) | Synthetic dynamic branch prediction | |
US7685404B2 (en) | Program subgraph identification | |
US5193157A (en) | Piplined system includes a selector for loading condition code either from first or second condition code registers to program counter | |
EP0855058B1 (en) | Programmable branch prediction system and method for computer systems | |
JP3851707B2 (ja) | スーパースカラープロセッサの中央処理ユニット | |
WO2013184380A2 (en) | Systems and methods for efficient scheduling of concurrent applications in multithreaded processors | |
JPH07129412A (ja) | コンパイル方法及び装置 | |
JPH04330527A (ja) | プログラムの最適化方法及びコンパイラ・システム | |
US20180246847A1 (en) | Highly efficient scheduler for a fine grained graph processor | |
EP1444571B1 (en) | Hidden job start preparation in an instruction-parallel processor system | |
Sastry et al. | Exploiting idle floating-point resources for integer execution | |
US6134708A (en) | Program compilation execution system | |
US7007272B2 (en) | Compiling computer programs including branch instructions | |
EP1632847A2 (en) | Method and apparatus for managing storage during instruction processing | |
US8549466B2 (en) | Tiered register allocation | |
Arya et al. | An architecture for high instruction level parallelism | |
Ginosar et al. | On the potential of asynchronous pipelined processors |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
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: 20130308 Year of fee payment: 9 |
|
FPAY | Annual fee payment |
Payment date: 20140307 Year of fee payment: 10 |
|
FPAY | Annual fee payment |
Payment date: 20150306 Year of fee payment: 11 |
|
FPAY | Annual fee payment |
Payment date: 20160317 Year of fee payment: 12 |
|
FPAY | Annual fee payment |
Payment date: 20170302 Year of fee payment: 13 |
|
LAPS | Lapse due to unpaid annual fee |