KR20090132633A - 프로세서에서 실행 스테이지 이전에 명령들을 실행시키기 위한 시스템 및 방법 - Google Patents

프로세서에서 실행 스테이지 이전에 명령들을 실행시키기 위한 시스템 및 방법 Download PDF

Info

Publication number
KR20090132633A
KR20090132633A KR1020097022453A KR20097022453A KR20090132633A KR 20090132633 A KR20090132633 A KR 20090132633A KR 1020097022453 A KR1020097022453 A KR 1020097022453A KR 20097022453 A KR20097022453 A KR 20097022453A KR 20090132633 A KR20090132633 A KR 20090132633A
Authority
KR
South Korea
Prior art keywords
instruction
stage
execution
processor
instructions
Prior art date
Application number
KR1020097022453A
Other languages
English (en)
Other versions
KR101119612B1 (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 KR20090132633A publication Critical patent/KR20090132633A/ko
Application granted granted Critical
Publication of KR101119612B1 publication Critical patent/KR101119612B1/ko

Links

Images

Classifications

    • 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
    • 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
    • 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/3838Dependency mechanisms, e.g. register scoreboarding
    • 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/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3856Reordering of instructions, e.g. using queues or age tags
    • 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/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • 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/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • 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/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)

Abstract

파이프라인 프로세서 내의 다수의 파이프라인 스테이지들에서 복수의 명령들을 프로세싱하는 방법이 기재된다. 상기 방법은 프로세서에서 실행 스테이지 이전에 명령 실행 이외의 기능을 가지는 파이프라인 스테이지에서 지연된 명령을 부분적으로 또는 전부 실행시킨다. 파이프라인에서 실행 스테이지 이전에 명령을 부분적으로 또는 전부 실행시키는 것은 명령 실행의 속도를 높이고, 프로세서가 보다 효율적으로 자원들을 이용할 수 있도록 하여, 이에 따라 프로세서의 효율을 증가시킨다.

Description

프로세서에서 실행 스테이지 이전에 명령들을 실행시키기 위한 시스템 및 방법{A SYSTEM AND METHOD FOR EXECUTING INSTRUCTIONS PRIOR TO AN EXECUTION STAGE IN A PROCESSOR}
본 발명은 일반적으로 컴퓨터 시스템들에 관한 것으로, 특히 프로세서 내의 실행 스테이지(stage) 이전에 명령들을 실행시키기 위한 방법 및 시스템에 관한 것이다.
프로세서 파이프라인(pipeline)은 각각의 스테이지가 명령 프로세싱 및 실행과 연관된 기능을 수행하는 다수의 스테이지들로 구성된다. 각각의 스테이지는 파이프 스테이지 또는 파이프 세그먼트로서 지칭된다. 스테이지들은 파이프라인을 형성하기 위해서 함께 연결된다. 명령들은 파이프라인의 일 측단(end)에서 입력되고, 다른 측단에서 출력된다. 명령들은 파이프라인 스테이지들을 통해 스트림 내에서 순차적으로 흐른다. 몇몇 스테이지들이 몇몇 명령들을 동시에 프로세싱할 수 있도록 스테이지들이 배열된다. 상이한 파이프라인 스테이지들에서 다수의 명령들을 동시에 프로세싱하는 것은 프로세서가 한 번에 오직 하나의 명령만을 프로세싱하는 것보다 더 신속하게 명령들을 프로세싱할 수 있도록 하고, 이에 따라 프로세서의 실행 속도를 향상시킨다.
명령들의 프로세싱은 제 1 파이프라인 스테이지 동안 명령들을 페칭(fetch)하는 것으로 시작한다. 이후, 명령들은 프로세서 내의 후속 스테이지들로 전달되고, 이들에 의해 프로세싱된다. 명령들이 각각의 스테이지에서 프로세싱됨에 따라, 다양한 기능들은 명령들을 통해 수행될 수 있다. 명령들의 예시적인 프로세싱은 명령들 페칭(fetch), 명령들 디코딩, 명령들 식별, 명령들 실행, 결과들 기록 등을 포함할 수 있다.
명령들을 프로세싱하는 동안, 프로세서는 명령을 실행시키는 도중에 지연을 경험할 수 있다. 이러한 지연들은 프로세서에 의해 당면하는 해저드(hazard)들에 의해 야기될 수 있다. 당업자들이 이해하는 바와 같이, 파이프라인 프로세서 내에서 부딪힐 수 있는 해저드들, 자원 해저드들(구조적 해저드라고도 지칭됨), 데이터 해저드들 및 제어 해저드들의 3가지 타입들의 해저드들이 존재한다. 3가지 해저드들 모두가 실행으로부터 명령들을 지연시킨다. 명령들에 필요한 하드웨어가 이용가능하지 않은 경우, 자원 해저드들이 존재한다. 전형적으로, 이것은 다수의 명령들이 동일한 자원들의 사용을 요구하는 경우에 발생한다. 데이터 해저드들은 명령들과 관련된 정보가 수집되거나 식별되는 경우에 발생한다. 데이터 해저드들은 기록 후 판독(read after write: RAW), 기록 후 기록(write after write: WAW), 및 판독 후 기록(write after read: WAR)해저드들을 포함한다. 제어 해저드들은 특정 명령들이 프로그램 카운터를 변경시키는 경우에 발생한다.
일부 프로세서들에서, 지연된 명령들은 해저드에 당면하는 경우에 홀딩 스테이지에서 홀딩(hold)될 수 있다. 예를 들어, 지연된 명령과 관련된 정보가 수집 또는 식별되는 동안 명령은 홀딩 스테이지에서 홀딩될 수 있다. 정보가 이용가능해진 후 때때로, 명령은 홀딩 스테이지로부터 방출(release)되고, 명령은 후속 스테이지들로 전달된다. 파이프라인 내의 추후 스테이지들 중 하나의 스테이지에서, 명령들은 최종적으로 실행 스테이지에 의해 프로세싱된다. 실행 스테이지 동안 명령들이 실행된 후, 명령 실행의 결과는 프로세서에 의해 수집되어 저장된다.
일반적으로, 일부 프로세서들에서, 명령들이 파이프라인 해저드로 인한 지연을 경험하는 경우, 명령은 실행 스테이지에의 도달부터 지연되고, 이에 따라 명령의 실행이 지연된다. 자원 해저드의 경우, 명령을 실행시키는데 필요한 정보의 일부 또는 전부가 이용가능할 수 있더라도, 프로세서는 명령을 실행시키는데 이용가능한 자원들을 가지지 않을 수 있다. 실행 스테이지 이전에 명령들의 실행을 지연시키는 것은 프로세서의 전체 프로세싱 효율에 영향을 미치며, 이를 감소시킬 수 있다.
따라서, 프로세서 내의 실행 스테이지 이전의 명령 실행 이외의 다른 기능을 가지는 파이프라인 스테이지에서 지연(stall)된 명령을 부분적으로 또는 전부 실행시킬 수 있는 프로세서를 가지기 위한 필요성이 해당 산업에 존재한다. 파이프라인 내의 실행 스테이지 이전에 명령을 부분적으로 또는 전부 실행시키는 것은 명령의 실행 속도를 높이고, 프로세서가 자신의 자원들을 보다 효율적으로 이용할 수 있도록 하여, 이에 따라 프로세서의 효율을 증가시킨다. 본 발명은 이러한 필요성을 인식하고, 이러한 프로세서를 기재한다.
명령 실행 이외의 다른 주 기능을 가지는 파이프라인 스테이지에서 지연된 명령을 부분적으로 실행시키는 방법이 기재된다. 본 방법은 제 1 명령을 홀딩 스테이지로 로딩(load)한다. 본 방법은 파이프라인 해저드에 당면할 경우 상기 제 1 명령을 지연시키고, 상기 제 1 명령을 부분적으로 실행시킨다. 본 방법은 추가적으로 상기 제 1 명령을 실행 스테이지로 로딩하고, 상기 실행 스테이지에서 상기 제 1 명령 실행을 완료한다.
대안적인 일 실시예에서, 명령 실행 이외의 다른 주 기능을 가지는 파이프라인 스테이지에서 지연된 명령을 전부 실행시키는 방법이 기재된다. 본 방법은 제 1 명령을 홀딩 스테이지로 로딩한다. 본 방법은 파이프라인 해저드에 당면하는 경우 상기 제 1 명령을 지연시키고, 상기 제 1 명령을 전부 실행시킨다. 본 방법은 상기 제 1 명령의 실행 결과를 추가적으로 기록한다.
파이프라인 프로세서가 기재된다. 상기 파이프라인 프로세서는 제 1 명령을 수용하도록 구성된 홀딩 스테이지를 가지며, 상기 홀딩 스테이지는 실행 스테이지와 연결된다. 상기 홀딩 스테이지는 파이프라인 해저드에 당면할 경우 상기 제 1 명령을 지연시키도록 구성되며, 상기 홀딩 스테이지는 실행 논리 회로를 더 포함하고, 상기 실행 논리 회로는 상기 제 1 명령을 부분적으로 실행시키거나 전부 실행시키도록 구성되며, 상기 실행 스테이지는 실행 유닛들을 더 포함하고, 상기 실행 유닛들은 상기 부분적으로 실행된 제 1 명령을 실행시키도록 구성된다.
본 발명의 보다 완전한 이해 뿐만 아니라, 본 발명의 추가적인 특징들 및 이점들은 다음의 상세한 설명 및 첨부한 도면들로부터 명백해질 것이다.
도 1은 본 발명의 일 실시예를 사용하여 프로세서의 상위 레벨 논리 하드웨어 블록 다이어그램을 도시한다.
도 2는 도 1의 프로세서 내의 CPU의 보다 상세한 블록 다이어그램을 디스플레이한다.
도 3은 도 1의 프로세서에 의해 실행되는 명령들의 일 예시적인 그룹을 도시한다.
도 4는 도 3의 명령들이 도 1의 프로세서의 다양한 스테이지들을 통해 실행됨에 따른 도 3의 명령들의 예시적인 그룹의 타이밍 다이어그램을 도시한다.
도 5는 도 1의 프로세서에 의해 실행되는 명령들의 또 다른 예시적인 그룹을 도시한다.
도 6은 도 5의 명령들이 도 1의 프로세서의 다양한 스테이지들을 통해 실행됨에 따른 도 5의 명령들의 예시적인 그룹의 타이밍 다이어그램을 도시한다.
첨부된 도면들과 관련하여 아래에서 설명되는 상세한 설명은 본 발명의 다양한 실시예들의 설명으로서 의도되며, 본 발명이 실시될 수 있는 실시예들만을 표현하는 것으로 의도되지는 않는다. 상세한 설명은 본 발명의 전반적인 이해를 제공하기 위해서 구체적인 세부사항들을 포함한다. 그러나, 본 발명은 이러한 구체적인 세부사항들 없이도 실시될 수 있음이 당업자에게 명백할 것이다. 일부 경우들에서, 본 발명의 개념들을 모호하게 하지 않도록 하기 위해서 공지된 구조들 및 컴 포넌트들은 블록 다이어그램 형태로 도시된다. 두문자어들 및 다른 설명 용어는 단지 편리함 및 명료함을 위해서 사용될 수 있으며, 본 발명의 범위를 제한하는 것으로 해석되지 않는다.
도 1은 이후 설명되는 바와 같이 일 실시예를 이용하여 슈퍼스칼라 프로세서(superscalar processor; 100)의 상위 레벨 뷰를 도시한다. 프로세서(100)는 전용 고속 버스(104)를 통해 명령 캐시(106)에 연결된 중앙 처리 장치(CPU; 102)를 가진다. 또한, 명령 캐시(106)는 범용 버스(110)를 통해 메모리(108)에 연결된다. CPU(102)는 하부 파이프라인들(106 및 165)에 연결되는 상부 파이프라인(150)을 가진다. CPU(102)는 메모리(108)로부터 명령 캐시(106)로의 명령들의 로딩을 제어한다. 명령 캐시(106)에 명령들이 로딩되면, CPU(102)는 고속 버스(104)를 통해 명령들에 액세스할 수 있다. 명령들은 명령 캐시(106)로부터 상부 파이프라인(150)으로 페칭된다. 명령들은 상부 파이프라인(150)에서 프로세싱된 후, 추가적인 프로세싱을 위해서 하부 파이프라인들(160 또는 165)로 전송된다.
명령들은 순차적 순서로 상부 파이프라인에 입력되며, 보다 효율적인 프로세싱을 위해서 하부 파이프라인들(160 또는 165)에서 재배열될 수 있다. 하부 파이프라인들(160 및 165)에서의 명령들의 재배열은 도 2-6의 설명들에서 보다 상세하게 설명된다. 상부 파이프라인(150)에서의 명령들을 통해 수행되는 일부 예시적인 프로세싱 기능들은 명령 페칭, 명령 정렬, 명령 디코딩 등을 포함한다. 하부 파이프라인들(160 및 165)에서의 명령 프로세싱은 명령 추적, 명령 실행, 명령 결과들 기록 등을 포함할 수 있다.
하부 파이프라인들(160 및 165)은 산술 논리 유닛들, 부동 소수점 유닛들(floating point units), 저장 유닛들, 로드 유닛들(load units) 등과 같은 다양한 실행 유닛들(EU; 130)을 포함할 수 있다. 예를 들어, 산술 논리 유닛들을 가지는 EU(130)는 정수 합산, 감산, 간단한 곱셈, 비트 논리 연산들(예를 들어, AND, NOT, OR, XOR), 비트 시프팅(bit shifting) 등과 같은 광범위한 산술 기능들을 실행시킬 수 있다. 대안적으로, EU(130)는 로딩, 판독 또는 기록 기능들을 수행하는 로드 유닛들 또는 저장 유닛들을 가질 수 있다. 프로세서(100)의 효율을 증가시키기 위해서, 하부 파이프라인들(160 및 165)은 특정 기능들을 수행하도록 구성될 수 있다. 예를 들어, 하부 파이프라인(160)은 산술 기능들을 수행하는 EU들(130)을 포함할 수 있는 반면, 하부 파이프라인(165)은 로드/저장 기능들을 수행하는 EU들(130)을 포함할 수 있다. 특정 기능을 분리된 하부 파이프라인들로 분리시키므로, 중복된 EU들(130)이 필요하지 않을 수 있다. 대안적인 일 실시예에서, 하부 파이프라인들(160 및 165)은 프로세서가 동일한 프로세서 사이클 동안 각각의 하부 파이프라인(160 및 165)에서 다수의 명령들을 통해 유사한 프로세싱 기능들을 수행할 수 있도록 하는 유사한 EU들(130)을 포함할 수 있다. 또 다른 실시예에서, 명령들을 프로세싱하는 하나의 하부 파이프라인만이 존재할 수 있다. 본 발명의 개념들은 여기에 제시되는 바와 같이 하나 이상의 하부 파이프라인들을 통해 프로세서에 적용될 수 있다.
당업자가 이해할 수 있는 바와 같이, 파이프라인 스테이지는 명령을 홀딩하도록 설계된 레지스터 또는 레지스터들의 그룹으로 구성될 수 있다. 명령이 특정 스테이지에 입력되는 경우, 프로세서는 명령을 상기 스테이지에 링크된 레지스터 또는 레지스터들의 그룹으로 로딩한다. 논리 회로는 각각의 스테이지와 연관될 수 있으며, 상기 논리 회로는 명령에 따라 특정 연산들을 수행할 수 있다. 논리 회로가 자신의 의도된 연산을 수행한 후, 명령은 다음의 순차적인 스테이지로 전달된다.
도 2는 CPU(102)의 보다 상세한 블록 다이어그램을 디스플레이한다. 상부 파이프라인(150)은 디코드 스테이지(204)에 연결된 페치 스테이지(203)에 연결된 논리 회로(202)를 페칭한다. 상부 파이프라인(160 또는 165)에서 홀딩 스테이지(210)는 실행 스테이지(220)에 연결되며, 실행 스테이지(220)는 라이트-백 스테이지(write-back stage; 230)에 연결된다. 홀딩 스테이지(210)는 라이트 백 스테이지(230)로 직접 연결될 수도 있다. 하부 파이프라인들(160 및 165)의 라이트 백 스테이지들(230)은 버스(170)에 의해 레지스터 파일(235)에 연결된다. 홀딩 스테이지(210)는 실행 논리 회로(240)에 연결되며, EU들(130)은 실행 스테이지(220)에 연결된다.
명령들은 상부 파이프라인(150)의 상부로부터 하부 파이프라인들(160 및 165)을 통해 흐른다. 상부 파이프라인(150)에서, 페치 스테이지(203)는 페치 논리(202)를 사용하여 명령 캐시(106)로부터의 명령들을 결정하고 순차적으로 페칭한다. 명령 캐시(106)에서, 명령들은 캐시 라인들로서 알려진 섹션들로 그룹화된다. 각각의 캐시 라인은 다수의 명령들을 포함할 수 있다. 그 결과, 명령들은 명령 캐시(106)로부터 한 번에 몇몇 명령들을 페칭 및 디코딩될 수 있다. 명령들은 페치 논리 회로(202)에 의해 페칭된 후, 디코드 스테이지(204)로 전송된다.
디코드 스테이지(204)에서, 명령들은 명령의 신원 뿐만 아니라 임의의 가능한 명령 의존들(즉, 데이터 해저드들)을 결정하기 위해서 디코딩된다. 디코드 논리 회로(예시의 편리함을 위해서 도시되지 않은 디코드 논리 회로)에 의해 디코드 스테이지(204) 동안 리트리브(retrieve) 또는 식별된 정보는 프로세서(100)가 하부 파이프라인들(160 또는 165) 중 어느 것이 추가적인 프로세싱을 위한 명령을 수신할 것인지를 결정할 수 있도록 한다. 전술된 바와 같이, 하부 파이프라인(160)은 산술 기능들을 처리하도록 설계될 수 있는 반면, 하부 파이프라인(165)은 로드/저장 기능들을 처리하도록 설계될 수 있다. 도 2의 실시예에서, 하부 파이프라인들(160 및 165)이 프로세싱하는 명령들이 기능적으로 상이할 수 있지만, 하부 파이프라인들(160 및 165)은 유사한 연산 블록들을 포함한다.
예시적인 일례에서, 명령은 2개의 레지스터들의 컨텐츠를 함께 곱하고 제 3 레지스터에 결과들을 저장하는 곱셈 명령으로서 식별될 수 있다. 식별 프로세스는 디코드 스테이지(204) 동안 발생할 수 있다. 또한, 디코드 스테이지(204) 동안, 곱셈 명령과 관련된 가능한 데이터 해저드들이 식별될 수도 있다. 이러한 예에서, 곱셈 명령은 하부 파이프라인(160)으로 전송될 수 있으며, 프로세서(100)는 명령들의 오퍼랜드(operand)들 중 하나 또는 모두가 이용가능하지 않을 수 있음(예를 들어, 2개의 레지스터들의 컨텐츠들이 아직 결정되지 않을 수 있음)을 식별한다.
명령이 디코드 스테이지(204)를 통과하여 하부 파이프라인들(160 또는 165) 중 하나로 전달되면, 프로세서(100)는 명령들이 실행을 완료하고 결과들이 기록될 때까지 명령의 프로세싱을 계속 모니터링한다. 명령들이 실행을 종료함에 따라, 결과들은 버스(170)를 통해 송신되고, 프로세서(100)는 상기 정보를 사용하여 후속 명령들의 실행을 촉진할 수 있다.
프로세서가 명령들을 모니터링하기 위해서 사용할 수 있는 하나의 기법은 명령들의 "스코어보딩(scoreboarding)"으로서 지칭된다. 당업자들은 명령 스코어보드(scoreboard)를 사용하는 명령들의 추적이 프로세서가 명령 프로그레스(progress) 뿐만 아니라 임의의 명령 의존들을 추적할 수 있도록 한다는 것을 이해한다. 명령들이 디코드 스테이지(204)에서 식별된 후, 명령을 위한 엔트리가 명령 스코어보드에서 생성된다. 상기 엔트리는 엔트리 번호 또는 다른 명령 식별자, 명령 기능(즉, 곱셈, 합산, 로딩, 저장 등), 명령이 현재 위치되어 있는 하부 파이프라인에서의 스테이지, 및 명령이 가질 수 있는 임의의 의존을 포함할 수 있다. 명령이 하부 파이프라인(160 또는 165)에서 실행을 종료하면, 명령 엔트리가 삭제된다.
명령들이 하부 파이프라인들(160 또는 165)에 입력됨에 따라, 명령들은 처음에 홀딩 스테이지(210)에서 프로세싱된다. 해결할 하나 이상의 해저드들을 대기하기 위해서 명령들은 하나 이상의 프로세서 사이클들 동안 홀딩 스테이지(210)에 홀딩될 수 있다. 예시적인 일 실시예에서, 홀딩 스테이지는 유보 스테이지(reservation stage)일 수 있다. 대안적인 일 실시예에서, 홀딩 스테이지는 명령 큐일 수 있다. 당업자들은 유보 스테이지를 통해 프로세싱되는 명령들이 재정렬(reorder)될 수 있으며, 이에 따라 이전의(older) 명령들이 데이터 해저드에 당 면하는 경우, 나중의(younger) 명령들이 이전의 명령들을 바이패싱할 수 있도록 한다는 것을 이해한다. 이에 반해, 명령 큐는 명령들의 재정렬을 허용하지 않을 수 있다. 명령 큐는 선입 선출에 기초하여 명령들을 프로세싱한다. 따라서, 명령 큐에서의 가장 이전의(oldest) 명령이 데이터 해저드로 인하여 지연을 경험하는 경우, 후속하는 나중의 명령들은 또한 상기 가장 이전의 명령이 나갈 때까지 지연되며, 상기 명령 큐에 남아 있을 것이다. 홀딩 스테이지(210)의 주 목적은 유보 스테이지 또는 명령 큐를 이용하여 해저드에 당면하는 경우 명령들에 대한 임시적인 홀딩 위치를 프로세서(100)에게 제공하기 위한 것이다.
해저드를 해결하기 위한 명령 대기는 지연된 명령으로서 지칭될 수도 있다. 유보 스테이지에서의 지연된 명령 임시 홀딩은 후속 명령들이 지연된 명령을 바이패싱하고 하부 파이프라인들(160 및 165)을 통해 이동을 계속할 수 있도록 한다. 지정된 명령들 바이패싱은 프로세서가 자신의 프로세싱 자원들을 보다 효율적으로 사용할 수 있도록 한다. 유보 스테이지 없이, 하부 파이프라인(160 또는 165)을 통한 명령 흐름은 파이프라인 해저드가 해결될 때까지 차단될 수 있다.
일 실시예에서, 홀딩 스테이지(210)는 단일 명령을 홀딩할 수 있는 레지스터를 가지는 유보 스테이지일 수 있다. 또 다른 실시예에서, 유보 스테이지는 복수의 명령들을 홀딩할 수 있는 레지스터들의 세트일 수 있다. 유보 스테이지에 얼마나 많은 명령들이 홀딩될 수 있는지를 결정할 시에, 홀딩되는 명령들의 수는 요구되는 추가적인 하드웨어의 수량 뿐만 아니라 프로세서(100)에 의해 경험되는 임의의 가능한 성능 저하와 균형이 맞아야 한다.
프로세서(100)는 지연된 명령이 홀딩 스테이지(210)에 있는 동안 지연된 명령의 모니터링을 계속한다. 프로세서가 지연된 명령과 연관된 파이프라인 해저드가 해결되었다고 결정하였으면, 프로세서(100)는 하부 파이프라인(160 또는 165)의 프로세싱 스트림으로 명령들을 방출한다. 명령이 해결된 데이터 해저드들 모두를 가지는 경우(즉, 명령이 자신의 오퍼랜드들 모두를 가지는 경우), 명령은 홀딩 스테이지(210)로부터 실행 스테이지(220)로 전달된다. 실행 스테이지(220)에서, 명령은 EU들(130)에 의해 실행된다. 명령이 실행된 후, 명령이 라이트 백 논리 회로(예시의 편리함을 위해서 도시되지 않음)에 의해 라이트 백 스테이지(230)에 있지 않은 경우, 결과들은 레지스터 파일(235)에 기록된다.
하부 파이프라인들(160 또는 165)에서 명령 또는 명령들이 홀딩 스테이지(210)에 홀딩되는 동안, 실행 논리 회로(240)는 명령들의 일부 또는 전부를 실행시킬 수 있다. 일 실시예에서, 실행 논리 회로(240)는 EU들(130)에 제시된 논리 회로의 서브세트를 포함한다. 실행 논리 회로(240)에 의해 수행될 수 있는 실행가능한 기능을 가지는 명령은 실행 스테이지(220)에 도달하기 이전에 실행 논리 회로(240)에 의해 전부 또는 부분적으로 실행될 수 있다. 홀딩 스테이지(210)에서의 명령의 부분적 실행으로부터의 결과들은 프로세서(100)에 의해 저장될 수 있고, 실행 스테이지(220)로 전달될 수 있다. 명령이 홀딩 스테이지(210)에서 전부 또는 완전히 실행되는 경우, 명령 실행으로부터의 결과들은 라이트 백 스테이지(230)에 의해 레지스터 파일(235)로 직접 기록될 수 있다. 이러한 프로세스는 도 3-6의 후속적인 설명에서 보다 상세하게 설명된다.
예시적인 일 실시예에서, 실행 논리 회로(240)는 논리 시프트 레프트(LSL) 연산을 실행시키는 논리 회로를 포함할 수 있다. 이러한 실시예에서, 실행 논리 회로(240)는 하부 파이프라인들(160 또는 165) 내의 EU들(130)에 존재하는 논리 회로의 복사를 포함한다. 실행 논리 회로(240) 뿐만 아니라 EU(130) 모두에서 LSL 연산들을 수행하기 위한 논리 회로를 가짐에 따라, 프로세서(100)는 홀딩 스테이지(210) 또는 실행 스테이지(220)에서 LSL 연산을 가지는 명령들을 실행시킬 수 있고, 이에 따라 프로세서(100)의 프로세싱 효율을 증가시킬 수 있다.
실행 논리 회로(240)에서 어떤 기능을 지원할 것인지를 결정할 시에, 요구되는 추가적인 공간, 전력 및 열 방출, 실행 시간의 양, 및 특정 명령들의 주파수가 고려될 수 있다. 전술된 실시예에서, LSL 명령은, 실행 스테이지(220) 이전에 LSL 명령을 실행시킴으로써 저장된 프로세서 사이클들의 수가 프로세서(100)에 의해 경험될 수 있는 임의의 성능 영향(performance impact)을 능가하도록 종종 완전히(enough) 실행될 수 있다. 대안적인 실시예들에서, 합산, 감산, 논리 연산들 등과 같은 다른 기능들은 실행 논리 회로(240)에서 구현될 수 있다.
도 3은 본 발명의 일 실시예를 이용하여 프로세서(100)에 의해 프로세싱된 명령들의 일 예시적인 그룹(300)을 디스플레이한다. 이러한 예를 위해서, 실행 논리 회로(240)는 논리 시프트 레프트(LSL) 회로를 포함한다. 도 4는 명령들의 그룹(300)이 상부 파이프라인(150) 및 하부 파이프라인(165)의 스테이지들을 통해 프로세싱됨에 따른 명령들의 그룹(300)을 도시하는 타이밍 다이어그램(400)을 디스플레이한다. 타이밍 다이어그램(400)은 Y-축(404)을 따르는 프로세서 사이클(402) 및 X-축(406)을 따르는 프로세서의 스테이지(203, 204, 210, 220 및 230)를 디스플레이한다. 타이밍 다이어그램(400)은 하부 파이프라인(160)을 통해 흐르는 명령들의 그룹(300)을 도시하지만, 명령들의 그룹(300)은 하부 파이프라인(165)을 통해 흐를 수 있다. 게다가, 도 4에 디스플레이된 홀딩 스테이지(210)는 유보 스테이지 또는 명령 큐일 수 있다. 명령들의 그룹(300)의 프로세싱에 대한 설명에서, 유보 스테이지는 홀딩 스테이지(210)의 일례로서 사용되었다.
도 3에 디스플레이된 바와 같이, 복합 명령들(compound instructions) B, C 및 D는 다수의 실행가능한 연산들을 가진다. 복합 명령 B는 LSL 연산(302) 및 ADD 연산(303)에 포함된다. 복합 명령 B의 LSL 연산(302)은 레지스터 5(R5)에 대하여 2만큼 논리 시프트 레프트(LSL)를 수행한다. ADD 연산(303)은 (2만큼 논리 시프트된 후의) R5 및 레지스터 1(R1)의 합산을 포함하며, 그 결과는 레지스터 4(R4)에 기록된다. 복합 명령 C는 LSL 연산(304) 뿐만 아니라 ADD 연산(305)을 가진다. LSL 연산(304)은 레지스터 7(R7)에 정의된 값만큼 R5에 대한 LSL을 포함하고, ADD 연산(305)은 R1과 R5의 합산이며, 그 결과는 레지스터 6(R6)에 기록된다. 명령 D는 LSL 연산(306) 및 SUB 연산(307)을 가진다. 명령 D의 LSL 연산(306)은 R7의 컨텐츠에 대하여 2만큼 좌측으로 논리 시프트 레프트를 수행한다. 명령 D의 SUB 연산(307)은 R7에서의 값만큼 R4에서의 값을 감산하고, 그 결과들을 레지스터 8(R8)에 저장한다.
도 4를 참조하면, 명령 A는 프로세서(100)에 의해 프로세싱된 제 1 명령이다. 명령 A는 프로세서 사이클 1에서 명령 페치 스테이지(203)로 페칭된다. 프로세서 사이클 2에서, 명령 A는 디코드 스테이지(204)로 전송되는 반면, 복합 명령 B는 페치 논리(202)에 의해 페칭되고 명령 페치 스테이지(203)로 로딩된다. 프로세서 사이클 3에서, 명령 A는 하부 파이프라인(160)의 유보 스테이지로 전송된다. 이러한 실시예에서, 유보 스테이지는 2개의 명령들까지 홀딩할 수 있다. 또한, 프로세서 사이클 3 동안, 복합 명령 B는 디코드 스테이지(204)에서 디코딩되는 반면, 복합 명령 C는 명령 페치 스테이지(203)에 의해 페칭된다. 명령 B가 디코딩된 후, 프로세서(100)는 명령 B가 명령 A(즉, R1의 값)의 실행으로부터 결정되는 정보에 대한 의존(즉, 데이터 해저드)을 가지는 복합 명령이라고 결정한다. 명령 A는 의존들을 가지지 않으므로, 명령 A는 하나의 프로세서 사이클(프로세서 사이클 3) 동안에만 유보 스테이지에 남아 있을 것이다.
프로세서 사이클 4에서, 명령 A는 실행 스테이지(220)에서 실행되는 반면, 복합 명령 B는 유보 스테이지로 로딩된다. 복합 명령 B는 오퍼랜드의 의존이 해결될 때까지(즉, R1의 값이 명령 A의 실행 후에 결정될 때까지) 유보 스테이지에 홀딩될 것이다. 이러한 예에서, 프로세서(100)가 라이트 백 스테이지(230) 동안 명령 A의 결과들을 레지스터 파일(235)에 기록하는 경우, R1의 값은 다음 프로세서 사이클(프로세서 사이클 5)에서 이용가능하다. 프로세서 사이클 4 동안, 복합 명령 D는 명령 페치 스테이지(203)에 의해 페칭되고, 복합 명령 C는 디코드 스테이 지(204)에서 프로세싱된다. 복합 명령 C가 디코드 스테이지(204)에서 디코딩된 후, 프로세서(100)는 복합 명령 C가 논리 시프트 레프트 기능을 포함하고 명령 A(즉, R1의 값)에 대한 의존을 가지는 복합 명령임을 식별한다.
복합 명령 B가 프로세서 사이클 4 동안 유보 스테이지에 있는 동안, 실행 논리 회로(240)는 LSL 연산(302)을 실행시킬 수 있다. 따라서, 유보 스테이지에서 홀딩되는 동안 복합 명령 B는 실행 논리 회로(240)에 의해 부분적으로 실행될 수 있다. 전술된 바와 같이, 실행 논리 회로(240)는 LSL 연산(이러한 예에서 2만큼의 논리 시프트 레프트 명령)을 수행하기 위한 논리 회로를 포함할 수 있다. 연산들을 수행하지 않는 지연 사이클 동안 요구되는 연산을 수행함으로써 프로세서의 효율이 증가한다. 유보 스테이지에서 실행 논리 회로(240) 없이, 복합 명령 B는 실행을 완료하기 위해서 실행 스테이지(220)에서 2개의 프로세서 사이클들(즉, LSL 연산(302)을 수행하기 위한 하나의 사이클 및 ADD 연산(303)을 수행하기 위한 하나의 사이클)을 요구할 것이다. 이러한 예에서, LSL 연산(302)의 실행으로부터의 결과들은 프로세서(100)에 의해 저장되고, 복합 명령 B가 (프로세서 사이클 6에서) 실행 스테이지(220)로 전송되는 경우, 그 결과들도 전송된다. 실행 논리 회로(240)를 사용하여 LSL 연산(302)을 실행시키는 것은 복합 명령 B가 실행 스테이지(220)에 도달하는 경우 프로세서(100)가 하나의 프로세서 사이클에서 ADD 연산(303)을 실행시킬 수 있게 한다. 따라서, 실행 스테이지에서 복합 명령 B를 실행시키기 위해서 요구되는 프로세싱 시간은 하나의 프로세서 사이클만큼 감소된다. 게다가, 이러한 실시예는 복합 명령의 일부가 실행될 수 있도록 하지만, 복합 명령의 또 다른 부분에 대한 의존이 존재한다.
전술한 바와 같이, 명령 A는 실행을 종료하고, 그 결과들은 프로세서 사이클 5에서 라이트 백 스테이지(230) 동안 레지스터 파일(235)에 기록된다. 프로세서 사이클 5에서 유보 스테이지에 있는 동안 상기 결과들은 복합 명령 B로 제공된다. 복합 명령 B는 다음 프로세서 사이클(프로세서 사이클 6)에서 실행 스테이지(220)로 방출될 것이다. 복합 명령 C는 프로세서 사이클 5 동안 유보 스테이지로 로딩된다. 프로세서(100)는 복합 명령 C 또한 프로세서 사이클 5에서 현재 이용가능한 R1에 저장된 값을 요구한다고 결정하였다. 따라서, 복합 명령 C는 오퍼랜드 유효성에 기초한 임의의 데이터 해저드들을 더 이상 가지지 않으며, 실행 스테이지(220)가 다음 프로세서 사이클(프로세서 사이클 6) 동안 이용가능한 경우, 실행 스테이지(220)로 방출될 수 있다. 그러나, 복합 명령 B는 처음에 실행 스테이지(220)로 방출되고, 이에 따라 복합 명령 C는 자원 충돌(resource conflict)로 인한 지연을 경험하고(실행 스테이지(220)는 명령 B에 사용됨), 복합 명령 B가 라이트 백 스테이지로 전송될 때까지(프로세서 사이클 7) 유보 스테이지에 남아 있다.
복합 명령 C가 프로세서 사이클 5 동안 유보 스테이지에서 지연되는 동안, 실행 논리 회로(240)는 LSL 연산(304)을 실행시킬 수 있다. 프로세서(100)는 프로세서 사이클(5) 초반에 R7의 컨텐츠를 실행 논리 회로(240)로 로딩할 수 있다. 프로세서 사이클 5 동안, 실행 논리 회로(240)는 LSL 연산(304)을 실행시킬 수 있다. LSL 연산(304)의 실행으로부터의 결과들은 프로세서(100)에 의해 저장되고, 복합 명령 C가 (프로세서 사이클 7에서) 실행 스테이지(220)로 전송될 시에, 그 결과들 또한 전송된다. 유보 스테이지에서 실행 논리 회로(240) 없이, 복합 명령 C는 실행을 완료하기 위해서 실행 스테이지(220)에서 2개의 프로세서 사이클들(즉, LSL 연산(304)을 수행하기 위한 하나의 사이클 및 ADD 연산(305)을 위한 하나의 사이클)을 요구할 것이다. 실행 논리 회로(240)를 사용하여 LSL 연산(304)을 실행시키는 것은 복합 명령 C가 실행 스테이지(220)에 도달하는 경우 프로세서(100)가 하나의 프로세서 사이클에서 ADD 연산(305)을 실행시킬 수 있게 한다. 따라서, 실행 스테이지(220)에서 복합 명령 C를 실행시키기 위해서 요구되는 프로세싱 시간은 하나의 프로세서 사이클만큼 감소된다.
프로세서 사이클 5에서, 복합 명령 D는 디코드 스테이지(204)에서 프로세싱되고, 명령 E는 명령 페치 스테이지(203)에 의해 페칭된다. 복합 명령 D가 디코딩된 후, 프로세서(100)는 복합 명령 D가 2개의 실행가능한 연산들, LSL 연산(306) 및 SUB 연산(307)을 가지는 복합 명령임을 식별한다. 프로세서(100)는 복합 명령 D가 복합 명령 B에 대한 의존을 가짐을 추가적으로 식별한다(즉, 복합 명령 D는 실행을 위해 결정될 R4의 값을 필요로 한다). 복합 명령 D에 대한 데이터 해저드가 해결된 후(즉, R4의 결과들이 이용가능한 경우), 복합 명령 D는 추가적인 실행을 위해서 실행 스테이지(220)로 방출 및 전송될 것이다.
프로세서 사이클 6에서, 자원 해저드는 해결되고, 프로세서 사이클 7에서, 복합 명령 C는 유보 스테이지를 떠날 것이고, 실행 스테이지(220)로 전송될 것이다. 또한, 프로세서 사이클 6 동안, 복합 명령 D는 유보 스테이지로 로딩되고, 명령 E는 디코드 스테이지(204)에서 프로세싱되며, 명령 F는 명령 페치 스테이지(203)에 의해 페칭된다. 복합 명령 B가 실행을 종료할 때까지 R4의 값이 기록되지 않으므로 복합 명령 D는 프로세서 사이클 7 동안 유보 스테이지에서 계속 홀딩될 것이고, 그 결과들은 라이트 백 스테이지(프로세서 사이클 7) 동안 레지스터 파일(235)에 기록된다.
그러나, 프로세서(100)가 복합 명령 D가 실행가능한 LSL 연산을 포함하였음을 식별하였으므로, 프로세서(100)는 프로세서 사이클 6의 초반에 R7의 값을 실행 논리 회로(240)로 로딩한다. 프로세서 사이클 6 동안, 실행 논리 회로(240)는 LSL 연산(306)을 실행시킨다. 프로세서 사이클 8에서 복합 명령 D가 실행 스테이지(220)로 전송되는 경우, 그 결과들은 복합 명령 D를 통해 저장 및 전송된다. 프로세서 사이클 7 후에, 프로세서(100)는 R4의 의존이 해결되고 실행 스테이지(220)가 이용가능하므로(즉, 자원 해저드로 인하여 지연이 존재하지 않으므로) 유보 스테이지로부터 실행 스테이지(220)로 복합 명령 D를 방출한다. 프로세서 사이클 8에서, 복합 명령 D는 실행되고, 프로세서 사이클 9에서, 그 결과들은 라이트 백 스테이지(230) 동안 레지스터 파일(235)에 기록된다. 유보 스테이지에서 LSL 기능(306)을 실행시킴에 따라, R4의 의존은 실행 스테이지(220)에서 복합 명령 D의 실행에 영향을 미치지 않는다.
명령 E가 프로세서 사이클 6에서 디코딩된 후, 프로세서(100)는 명령이 오퍼랜드 유효성에 기초하여 임의의 의존들(즉, 데이터 해저드들)을 가지지 않음을 식별한다. 명령 E는 프로세서 사이클 7에서 유보 스테이지로 전송된다. 프로세서 사이클 7 동안, 명령 D는 유보 스테이지를 떠나고, 명령 E는 추가적인 사이클 동안 유보 스테이지에 남아 있다. 전술된 바와 같이, 명령 E는 자신의 모든 오퍼랜드들을 가질 수 있지만, 자신의 실행이 시작될 수 있기 전에 이용가능해지기 위해서 실행 스테이지(220)를 대기할 것이다. 명령 E가 LSL 연산을 가지지 않으므로, (이러한 예에서 LSL 연산만을 구현하는) 실행 논리 회로(240)는 실행 스테이지(220) 이전에 명령 E를 실행시키기 위해서 사용되지 않을 수 있다.
명령 F는 프로세서 사이클 6 동안 명령 캐시(106)로부터 명령 페치 스테이지(203)로 페칭된다. 프로세서 사이클 7에서, 명령 F는 디코드 스테이지(204)에서 프로세싱된다. 명령 F는 프로세서 사이클 8 동안 추가적으로 프로세싱하기 위해서 하부 파이프(160)의 유보 스테이지로 전송된다. 2개의 프로세서 사이클들(프로세서 사이클들 8 및 9) 동안, 명령 F는 유보 스테이지에 남아 있는 반면, 이전의 명령들(명령들 D 및 E) 각각은 실행 스테이지(220) 및 라이트 백 스테이지(230)에서 프로세싱된다. 명령 F가 ORR 명령이고, 실행 논리 회로(240)가 LSL 회로를 포함하므로, 명령 F에 대한 실행 스테이지(220) 이전에 어떠한 실행도 수행되지 않는다. 그 결과, 명령 F는 프로세서 사이클 10에서 실행되고, 그 결과들은 프로세서 사이클 11에서 라이트 백 스테이지(230) 동안 레지스터 파일(235)에 기록된다.
이전의 예에서 설명된 명령들의 그룹(300)을 프로세싱하기 위해서 명령 큐가 유보 스테이지 대신 사용되는 경우, 그 결과는 정확히 동일할 것이다. 명령들의 그룹(300)이 유보 스테이지에서 프로세싱된 후 재정렬되지 않으므로, 그 결과는 동일하다. 따라서, 명령들이 실행 스테이지(220)에서 실행되는 경우, 명령들의 그룹(300)은 순서가 뒤바뀌어 실행되지 않는다.
도 5는 본 발명의 일 실시예를 이용하여 프로세서(100)에 의해 프로세싱되는 명령들의 또 다른 예시적인 그룹(500)을 디스플레이한다. 도 6은 명령들의 그룹(500)이 프로세서(100) 내의 상부 파이프라인(150) 및 하부 파이프라인(160)의 다양한 스테이지들을 통해 흐름에 따른 명령들의 그룹(500)의 타이밍 다이어그램(600)을 도시한다. 타이밍 다이어그램(600)은 Y-축(604)을 따르는 프로세서 사이클(602) 및 X-축(606)을 따르는 프로세서(100)의 단계들(203, 204, 210, 220 및 230)을 디스플레이한다. 타이밍 다이어그램(600)은 하부 파이프라인(160)을 통해 흐르는 명령들의 그룹(500)을 도시하지만, 명령들의 그룹(500)은 하부 파이프라인(165)이 명령들의 그룹(500)을 프로세싱할 수 있는 경우 하부 파이프라인(165)을 통해 흐를 수도 있다. 게다가, 도 6에 디스플레이된 홀딩 스테이지(210)는 유보 스테이지 또는 명령 큐일 수 있다. 예시의 편리함을 위해서, 명령들의 그룹(500)을 프로세싱하기 위해서 유보 스테이지가 사용된다.
도 5에 디스플레이된 바와 같이, 복합 명령들 Bl 및 C1은 다수의 실행가능한 연산들을 가진다. 복합 명령 B1은 LSL 연산(502) 및 ADD 연산(503)을 가진다. LSL 연산(502)은 R5에 대하여 2만큼 논리 시프트 레프트(LSL)를 수행하고, ADD 연 산(503)은 R1과 (2만큼 논리 시프트 레프트가 수행된 후의) R5의 합산이며, 그 결과들은 R6에 저장된다. 복합 명령 C1은 LSL 연산(504) 및 ADD 연산(505)을 가진다. LSL 기능(504)은 R5에 대하여 R7에서 정의된 값만큼 LSL을 수행하고, ADD 연산(505)은 R1과 (R7의 값만큼 논리 시프트 레프트가 수행된 후의) R5의 합산이며, 그 결과들은 (R4)에 저장된다.
타이밍 다이어그램(600)을 참조하면, 명령 A1은 프로세서 사이클 1 동안 페치 논리 회로를 사용하여 명령 페치 스테이지(203)에 의해 명령 캐시(106)로부터 페칭된다. 프로세서 사이클 2에서, 명령 A1은 프로세싱을 위해서 디코드 스테이지(204)로 전송되는 반면, 복합 명령 B1은 명령 페치 스테이지(203)에 의해 페칭된다. 명령 A1이 디코딩된 후, 프로세서(100)는 명령 A1이 임의의 의존들을 가지지 않고, 오퍼랜드 유효성에 기초하여 의존 해결을 위해서 유보 스테이지에서 홀딩되지 않을 것임을 식별한다.
프로세서 사이클 3에서, 명령 A1은 하부 파이프라인(160)의 유보 스테이지로 전송된다. 명령 A1이 의존들을 가지므로(즉, 자신의 오퍼랜드들이 식별되고, 자원 충돌들이 존재하지 않으므로), 명령 A1은 프로세서 사이클 4에서 실행 스테이지(220)로 전송되기 전에 하나의 프로세서 사이클(프로세서 사이클 3) 동안에만 유보 스테이지에 남아 있을 것이다. 프로세서 사이클 3 동안, 복합 명령 B1은 디코드 스테이지(204)에서 디코딩되는 반면, 복합 명령 C1은 명령 페치 스테이지(203) 에 의해 페칭된다. 명령 B1이 디코드 스테이지(204) 동안 디코딩된 후, 프로세서(100)는 복합 명령 B1이 2개의 실행가능한 연산들(502 및 503)을 가지는 복합 명령이고, 상기 연산들 중 하나는 2만큼의 논리 시프트 레프트(LSL 기능(502))임을 식별한다. 추가적으로, 프로세서(100)는 복합 명령 B1이 명령 A1에 대한 의존을 가짐(즉, R1의 값은 복합 명령 B1의 실행을 완료하기 위해서 필요함)을 식별한다.
프로세서 사이클 4에서, 복합 명령 B1이 유보 스테이지에 되는 동안, 명령 A1은 실행 스테이지(220)에서 실행된다. 복합 명령 B1은 오퍼랜드 유효성(즉, 데이터 해저드)에 기초하여 지연되고, R1의 값이 이용가능할 때까지 유보 스테이지에 홀딩될 것이다. 이러한 예에서, R1의 값은 명령 A1이 실행을 종료한 후까지 이용가능하지 않으며, 그 결과들은 프로세서 사이클 5에서 라이트 백 스테이지(230) 동안 레지스터 파일(235)에 기록된다. 프로세서 사이클 4 동안, 복합 명령 B1은 유보 스테이지에 있지만, 복합 명령 1은 부분적으로 실행될 수 있고, LSL 기능(502)은 실행 논리 회로(240)에 의해 실행될 수 있다. LSL 연산(502)의 실행으로부터의 결과들은 프로세서(100)에 의해 저장되고, 복합 명령 B1이 (프로세서 사이클 6에서) 실행 스테이지(220)로 전송될 시에, 그 결과들 또한 전송된다. 복합 명령 B1의 나머지 ADD 기능(503)은 실행 스테이지(220) 동안 실행될 것이다.
프로세서 사이클 4 동안, 명령 D1은 명령 페치 스테이지(203)에 의해 페칭되고, 복합 명령 C1은 디코드 스테이지(204)에서 프로세싱된다. 복합 명령 C1이 프로세서 사이클 4에서 디코드 스테이지(204) 동안 디코딩된 후, 프로세서(100)는 복 합 명령 C1이 2개의 실행가능한 연산들, LSL 연산(504) 및 ADD 연산(505)을 포함하는 복합 명령임을 식별한다. 또한, 프로세서(100)는 복합 명령 C1의 ADD 연산(505)이 복합 명령 C1이 유보 스테이지를 떠날 수 있기 전에 해결되어야 하는 값 R1에 대한 의존을 가짐을 식별한다.
프로세서 사이클 5에서, 명령 A1은 실행을 종료하고, 그 결과들은 레지스터 파일(235)에 기록되는 반면, 명령 A1은 라이트 백 스테이지(230)에 있다. 명령 A1의 결과들은 복합 명령 B1이 유보 스테이지에 홀딩되는 동안 복합 명령 B1로 전송된다. 복합 명령 B1이 결과들을 수신한 후, 복합 명령 B1은 다음 프로세서 사이클(프로세서 사이클 6)에서 실행 스테이지(220)로 방출될 것이다. 복합 명령 C1은 프로세서 사이클 5 동안 유보 스테이지에서 계속 프로세싱된다. 프로세서(100)는 R1의 값이 현재 이용가능하므로 복합 명령 C1에 대한 의존이 프로세서 사이클 5에서 해결되었다고 결정한다. 그러나, 복합 명령 C1은 복합 명령 B1이 처음에 방출될 것이므로 발생하는 자원 해저드로 인하여 프로세서 사이클 6에서 실행 스테이지(220)로 방출되지 않을 것이다. 프로세서 사이클 5 동안, 복합 명령 C1은 부분적으로 실행될 수 있고, 복합 명령 C1의 LSL 연산(504)은 실행 논리 회로(240)에 의해 실행된다. LSL 연산(504)의 실행으로부터의 결과들은 프로세서(100)에 의해 저장되고, 복합 명령 C1이 (프로세서 사이클 7에서) 실행 스테이지(200)로 전송될 시에, 그 결과들 또한 전송된다. 실행 논리 회로(240)가 ADD 기능을 실행시키기 위해서 필요한 논리 회로를 포함하지 않으므로, 복합 명령 C1의 다른 ADD 연 산(505)은 다음 프로세서 사이클(프로세서 사이클 7) 동안 실행 스테이지(220)에서 실행될 것이다.
프로세서 사이클 5에서, 명령 D1은 디코드 스테이지(204)에서 프로세싱되고, 명령 E1은 명령 페치 스테이지(203)에 의해 페칭된다. 명령 D1이 디코딩된 후, 프로세서(100)는 명령 D1이 의존들을 가지지 않고, LSL 연산들을 포함하지 않음을 식별한다. 따라서, 명령 D1은 오퍼랜드 의존(즉, 데이터 해저드)으로 인하여 유보 스테이지에서 홀딩되지 않을 것이다.
프로세서 사이클 6에서, 복합 명령 B1은 실행 스테이지(220)에서 실행된다. 본 발명의 일 양상을 이용하여, 프로세서는 프로세서 사이클 4에서 실행 논리 회로(240)에 의한 LSL 연산(502)의 이전 실행으로 인하여 하나의 프로세서에서 복합 명령 B1의 실행을 완료한다. 실행 논리 회로(240)를 사용하여 LSL 연산(502)을 실행시키는 것은 실행 스테이지(220)에서 실행시킬 복합 명령 B1에 대한 프로세싱 시간을 하나의 프로세서 사이클만큼 감소시킨다. 게다가, 이러한 실시예는 복합 명령의 일부가 실행될 수 있도록 하지만, 복합 명령의 또 다른 부분에 대한 의존이 존재한다.
(즉, 프로세서 사이클 6에서 복합 명령 B1이 현재 실행 스테이지(220)에 있지 않으므로) 프로세서 사이클 6 동안 복합 명령 C1은 실행 스테이지(220)로 진행할 수 없다. 또한, 프로세서 사이클 6에서, 명령 D1은 유보 스테이지로 전송된다. 명령 D1은 오퍼랜드 유효성에 기초하여 의존을 가지지 않지만, 명령 D1은 자원 해저드에 당면하고(복합 명령 C1은 프로세서 사이클 7에서 실행 시트에지(220)를 사 용중임), 프로세서 사이클 8까지 실행 스테이지(220)로 방출되지 않을 것이다. 명령 D1은 LSL 연산을 가지지 않으며, 이에 따라 실행 논리 회로(240)는 실행 스테이지(220) 이전에 명령 D1을 부분적으로 또는 전부 실행시키지 않을 수 있다.
명령 E1은 디코드 스테이지(204)에서 프로세싱되고, 명령 F1은 프로세서 사이클 6 동안 페치 스테이지(203)에 의해 페칭된다. 명령 E1은 R2의 컨텐츠들에 대하여 2만큼 논리 시프트 레프트를 수행하는 하나의 실행가능한 LSL 연산을 가지며, 그 결과들은 R3에 저장된다. 명령 E1이 LSL 연산들을 가지므로, 명령 E1은 실행 논리 회로(240)에 의해 유보 스테이지에서 전부 또는 완전히 실행될 수 있다. 타이밍 다이어그램(400)에 디스플레이된 바와 같이, 유보 스테이지에 있는 동안 명령 E1은 자원 해저드를 경험한다.
본 발명의 대안적인 일 실시예에서, 프로세서(100)는 명령 E1을 실행 논리 회로(240)에 의해 완전히 실행될 수 있도록 하기 위해서 유보 스테이지에서 명령 E1을 의도적으로 지연시킬 수 있다. 이러한 경우, 프로세서(100)는 프로세서(100)가 LSL 명령을 의도적으로 지연시킴에 따라, 또 다른 명령에 대한 실행 스테이지(220)를 해제(free up)시킬 수 있으며, 이에 따라 자신의 프로세싱 효율을 증가시킬 수 있다고 결정할 수 있다.
프로세서 사이클 7 동안, 복합 명령 B1 실행의 결과들은 라이트 백 스테이지(230) 동안 레지스터 파일(235)에 기록된다. 복합 명령 B1이 실행 스테이지(220)를 떠남에 따라, 복합 명령 C1은 실행 스테이지(220)에 입력된다. 복합 명 령 C1이 현재 존재하므로, 명령 D1은 실행 스테이지(220)에 입력된다. 그 결과, 명령 D1은 자원 충돌로 인하여 프로세서 사이클 7에서 유보 스테이지에서 계속 대기한다. 유보 스테이지에서 명령 E1은 명령 D1에 결합하고, 명령 F1은 프로세서 사이클 7 동안 디코드 스테이지(204)에서 프로세싱된다. 명령 E1이 유보 스테이지(220)에 있는 동안, 프로세서(100)는 프로세서 사이클 7 동안 실행 논리 회로(240)를 사용하여 LSL 연산(507)을 실행시킨다.
프로세서 사이클 8 동안, 복합 명령 C1 실행의 결과들은 라이트 백 스테이지(230)에서 레지스터 파일(235)에 기록된다. 명령 D1은 실행 스테이지(220)에 입력되고, 명령 F1은 유보 스테이지에 입력된다. 프로세서 사이클 8 동안, 명령 E1은 실행 논리 회로(240)에 의해 전부 실행된다. 실행 논리 회로(240)가 명령 E1을 전부 실행시켰으므로, 그 결과들은 실행 스테이지(220)에 입력되지 않고 레지스터 파일(235)에 기록될 수 있다. 이러한 경우에, 명령 E1의 실행은 프로세서 사이클 9 동안 라이트 백 스테이지(230)에 의해 레지스터 파일(235)에 기록된다. 대안적으로, 프로세서가 레지스터 파일(235)의 기록을 유보 스테이지로부터 직접적으로 허용하는 바이패스 메커니즘을 가지지 않는 경우, 명령은 실행 스테이지(220)로 로딩될 수 있다. 명령이 실행을 완료하였으므로, 명령은 라이트 백 스테이지로 전송되고, 여기서 결과들은 레지스터 파일(235)에 기록될 수 있다.
이러한 예시적인 예에서, 명령 E1은 실행을 완료하고, 그 결과들은 명령 D1이 실행을 종료하기 전에 기록된다. 결과들은 유보 스테이지에 의해 라이트 백 스테이지(230)에 직접 기록되며, 라이트 백 스테이지(230)는 레지스터 파일(235)에 상기 결과들을 차례로 기록한다. 실행 스테이지(220)에서 명령 E1를 실행시키는 것 대신 실행 논리 회로(240)를 이용하여 명령 E1를 실행시키는 것은 프로세싱 시간을 절약한다. 명령 E1의 결과들은 프로세서 사이클 8 후에 이용가능하며, 실행을 위해서 이러한 정보를 필요로 하는 임의의 후속 명령으로 전송될 수 있다. 공지된 기법들을 이용하여 (명령들이 유보 스테이지에 있는 동안 명령들의 실행을 포함하지 않는) 명령들의 예시적인 그룹(500)을 프로세싱하면, 명령 E1으로부터의 결과들은 명령 D1이 실행 스테이지(220)에 입력된 후 4개의 프로세서 사이클들까지 이용가능하지 않을 것이다. 3개의 프로세서 사이클들은 명령 D1을 실행하기 위해서 요구되고, 2개 이상의 프로세서 사이클들은 복합 명령 E1을 실행시키기 위해서 요구된다.
도 6의 타이밍 다이어그램(600)을 참조하면, 명령 D1은 프로세서 사이클 9에서 계속 실행하고, 프로세서 사이클 10에서 실행을 종료한다. 명령 D1의 결과들은 프로세서 사이클 11 동안 라이트 백 스테이지(230) 동안 레지스터 파일(235)에 기록된다. 또한, 프로세서 사이클 11에서, 명령 F1은 실행 스테이지에 입력되고, 명령 F1에 대한 결과들은 프로세서 사이클 12에서 라이트 백 스테이지(230) 동안 레지스터 파일(235)에 기록된다.
전술된 바와 같이, 다양한 실시예들로 설명된 개념들은 단일 파이프라인 프로세서에서 구현될 수 있다. 대안적으로, 이러한 개념들은 둘 이상의 하부 파이프라인들을 가지는 프로세서에 적용될 수 있다. 프로세서(100) 내의 실행 논리 회로(240)는 디코드 스테이지(204) 후에 그리고 실행 스테이지(220) 이전에 명령들을 프로세싱하는 파이프라인에서의 임의의 스테이지와 인터페이싱할 수 있다. 전술된 바와 같이, 프로세서(100)가 후속 파이프라인 해저드에 당면할 수 있음을 예측하는 경우, 프로세서(100)는 홀딩 스테이지(210)에서 부분적으로 또는 전부 실행될 수 있는 명령들을 의도적으로 지연시킬 수 있다. 홀딩 스테이지(210)에서 명령을 지연시키는 것은 실행 논리 회로(240)가 명령을 부분적으로 또는 전부 실행시킬 수 있도록 하고, 이에 따라 후속 명령들에 대한 프로세싱 자원들을 해제시킬 수 있다.
여기에 기재된 실시예들과 관련하여 설명된 다양한 예시적인 논리 블록들, 모듈들, 회로들, 엘리먼트들, 및/또는 컴포넌트들이 범용 프로세서, 디지털 신호 처리기(DSP), 주문형 집적회로(ASIC), 필드 프로그래머블 게이트 어레이(FPGA), 또는 다른 프로그래머블 논리 컴포넌트, 이산 게이트 또는 트랜지스터 논리, 이산 하드웨어 컴포넌트들, 또는 이러한 기능들을 수행하도록 설계된 이들의 조합을 통해 구현 또는 수행될 수 있다. 범용 프로세서는 마이크로프로세서 일 수 있지만, 대안적 실시예에서, 이러한 프로세서는 기존 프로세서, 제어기, 마이크로 제어기, 또는 상태 머신일 수 있다. 프로세서는 예를 들어, DSP 및 마이크로프로세서, 복수의 마이크로프로세서들, DSP 코어와 결합된 하나 이상의 마이크로프로세서들, 또는 이러한 임의의 다른 구성들의 조합과 같은 컴퓨팅 디바이스들의 조합으로서 구현될 수도 있다.
특정 실시예들이 여기에 예시되고 설명되었지만, 당업자들은 동일한 목적을 달성하기 위해서 계산된 임의의 배열이 나타낸 특정 실시예들을 대신할 수 있고, 본 발명이 다른 환경들에서 다른 어플리케이션들을 가질 수 있다는 것을 이해한다. 본 발명은 본 발명의 임의의 개조(adaptation) 또는 변화들을 커버하는 것으로 의도된다. 다음의 청구항들은 여기에 설명된 특정 실시예들로 본 발명의 범위를 제한하는 것으로 의도되지 않는다.

Claims (23)

  1. 파이프라인 프로세서에서 [명령 실행 이외의 주 기능을 가지는] 홀딩 스테이지에서 지연(stall)된 명령을 부분적으로 실행시키는 방법으로서,
    제 1 명령을 홀딩 스테이지로 로딩시키는 단계;
    상기 명령이 파이프라인 해저드(hazard)에 당면하는 경우 상기 홀딩 스테이지에서 상기 제 1 명령을 지연시키는 단계;
    상기 홀딩 스테이지에서 상기 제 1 명령을 실행시키는 단계;
    상기 제 1 명령을 실행 스테이지로 로딩하는 단계; 및
    상기 실행 스테이지에서 상기 제 1 명령의 실행을 완료하는 단계를 포함하는,
    지연된 명령을 부분적으로 실행시키는 방법.
  2. 제 1 항에 있어서,
    상기 제 1 명령이 상기 홀딩 스테이지에 있는 경우, 상기 제 1 명령은 실행 논리 회로에 의해 실행되는,
    지연된 명령을 부분적으로 실행시키는 방법.
  3. 제 1 항에 있어서,
    상기 홀딩 스테이지는 유보 스테이지(reservation stage)인,
    지연된 명령을 부분적으로 실행시키는 방법.
  4. 제 1 항에 있어서,
    상기 홀딩 스테이지는 명령 큐인,
    지연된 명령을 부분적으로 실행시키는 방법.
  5. 제 1 항에 있어서,
    상기 파이프라인 해저드는 자원 해저드인,
    지연된 명령을 부분적으로 실행시키는 방법.
  6. 제 1 항에 있어서,
    상기 파이프라인 해저드는 데이터 해저드인,
    지연된 명령을 부분적으로 실행시키는 방법.
  7. 제 1 항에 있어서,
    상기 제 1 명령은 복합(compound) 명령인,
    지연된 명령을 부분적으로 실행시키는 방법.
  8. 파이프라인 프로세서 내부의 명령 실행 이외의 주 기능을 가지는 파이프라인 스테이지에서 지연된 명령을 전부 실행시키는 방법으로서,
    제 1 명령을 홀딩 스테이지로 로딩하는 단계;
    상기 명령이 파이프라인 해저드에 당면하는 경우 상기 홀딩 스테이지에서 상기 제 1 명령을 지연시키는 단계;
    상기 홀딩 스테이지에서 상기 제 1 명령을 전부 실행시키는 단계; 및
    상기 제 1 명령의 실행 결과들을 기록하는 단계를 포함하는,
    지연된 명령을 전부 실행시키는 방법.
  9. 제 8 항에 있어서,
    상기 제 1 명령이 상기 홀딩 스테이지에 있는 경우, 상기 제 1 명령의 실행은 실행 논리 회로에 의해 수행되는,
    지연된 명령을 전부 실행시키는 방법.
  10. 제 8 항에 있어서,
    상기 홀딩 스테이지는 유보 스테이지인,
    지연된 명령을 전부 실행시키는 방법.
  11. 제 8 항에 있어서,
    상기 홀딩 스테이지는 명령 큐인,
    지연된 명령을 전부 실행시키는 방법.
  12. 제 8 항에 있어서,
    상기 결과들은 레지스터 파일에 기록되는,
    지연된 명령을 전부 실행시키는 방법.
  13. 제 8 항에 있어서,
    상기 해저드는 자원 해저드인,
    지연된 명령을 전부 실행시키는 방법.
  14. 제 8 항에 있어서,
    상기 해저드는 데이터 해저드인,
    지연된 명령을 전부 실행시키는 방법.
  15. 제 8 항에 있어서,
    상기 제 1 명령은 산술 명령 또는 논리 연산을 포함하는,
    지연된 명령을 전부 실행시키는 방법.
  16. 파이프라인 프로세서로서,
    제 1 명령을 수용하도록 구성된 홀딩 스테이지; 및
    상기 홀딩 스테이지에 연결된 실행 스테이지를 포함하고,
    상기 홀딩 스테이지는 파이프라인 해저드에 당면하는 경우 상기 제 1 명령을 지연시키도록 구성되고,
    상기 홀딩 스테이지는 실행 논리 회로를 더 포함하고,
    상기 실행 논리 회로는 상기 제 1 명령을 부분적으로 실행시키도록 또는 전부 실행시키도록 구성되고,
    상기 실행 스테이지는 실행 유닛들을 더 포함하고,
    상기 실행 유닛들은 상기 부분적으로 실행된 제 1 명령을 실행시키도록 구성되는,
    파이프라인 프로세서.
  17. 제 16 항에 있어서,
    상기 제 1 명령은 복합 명령인,
    파이프라인 프로세서.
  18. 제 16 항에 있어서,
    상기 실행 논리 회로는 산술 연산 또는 논리 연산을 실행시키는,
    파이프라인 프로세서.
  19. 제 16 항에 있어서,
    상기 파이프라인 해저드는 자원 해저드인,
    파이프라인 프로세서.
  20. 제 16 항에 있어서,
    상기 파이프라인 해저드는 데이터 해저드인,
    파이프라인 프로세서.
  21. 제 16 항에 있어서,
    상기 홀딩 스테이지는 유보 스테이지인,
    파이프라인 프로세서.
  22. 제 16 항에 있어서,
    상기 홀딩 스테이지는 명령 큐인,
    파이프라인 프로세서.
  23. 제 16 항에 있어서,
    레지스터 파일을 더 포함하고,
    상기 제 1 명령 실행의 결과들은 상기 레지스터 파일에 기록되는,
    파이프라인 프로세서.
KR1020097022453A 2007-03-28 2008-03-26 프로세서에서 실행 스테이지 이전에 명령들을 실행시키기 위한 시스템 및 방법 KR101119612B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/692,685 US8127114B2 (en) 2007-03-28 2007-03-28 System and method for executing instructions prior to an execution stage in a processor
US11/692,685 2007-03-28
PCT/US2008/058246 WO2008118949A1 (en) 2007-03-28 2008-03-26 A system and method for executing instructions prior to an execution stage in a processor

Publications (2)

Publication Number Publication Date
KR20090132633A true KR20090132633A (ko) 2009-12-30
KR101119612B1 KR101119612B1 (ko) 2012-03-22

Family

ID=39540664

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020097022453A KR101119612B1 (ko) 2007-03-28 2008-03-26 프로세서에서 실행 스테이지 이전에 명령들을 실행시키기 위한 시스템 및 방법

Country Status (6)

Country Link
US (1) US8127114B2 (ko)
EP (1) EP2142988A1 (ko)
JP (1) JP5180285B2 (ko)
KR (1) KR101119612B1 (ko)
CN (1) CN101647000B (ko)
WO (1) WO2008118949A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9207922B2 (en) 2013-01-28 2015-12-08 Samsung Electronics Co., Ltd. Compiling method and apparatus for scheduling block in pipeline

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9250916B2 (en) * 2013-03-12 2016-02-02 International Business Machines Corporation Chaining between exposed vector pipelines
GB2514618B (en) * 2013-05-31 2020-11-11 Advanced Risc Mach Ltd Data processing systems
US11645083B2 (en) * 2013-08-23 2023-05-09 Texas Instruments Incorporated Processor having adaptive pipeline with latency reduction logic that selectively executes instructions to reduce latency
US10942748B2 (en) 2015-07-16 2021-03-09 Nxp B.V. Method and system for processing interrupts with shadow units in a microcontroller
US10592246B2 (en) * 2017-07-12 2020-03-17 International Business Machines Corporation Low latency execution of floating-point record form instructions
CN110806899B (zh) * 2019-11-01 2021-08-24 西安微电子技术研究所 一种基于指令扩展的流水线紧耦合加速器接口结构

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6453235A (en) * 1988-05-25 1989-03-01 Nec Corp Risc type microprocessor
WO1995016955A1 (en) 1993-12-15 1995-06-22 Silicon Graphics, Inc. Load latency of zero for floating point load instructions using a load data queue
US5675758A (en) * 1994-11-15 1997-10-07 Advanced Micro Devices, Inc. Processor having primary integer execution unit and supplemental integer execution unit for performing out-of-order add and move operations
JP3183844B2 (ja) * 1996-03-29 2001-07-09 松下電器産業株式会社 可変パイプライン段数のデータ処理装置
WO1998002818A1 (en) * 1996-07-16 1998-01-22 Advanced Micro Devices, Inc. A data memory unit configured to store data in one clock cycle and method for operating same
JP3199035B2 (ja) * 1998-09-25 2001-08-13 日本電気株式会社 プロセッサ及びその実行制御方法
JP3204390B2 (ja) * 1998-09-29 2001-09-04 エヌイーシーマイクロシステム株式会社 マイクロコンピュータ
US20040193845A1 (en) * 2003-03-24 2004-09-30 Sun Microsystems, Inc. Stall technique to facilitate atomicity in processor execution of helper set
WO2004097626A2 (en) 2003-04-28 2004-11-11 Koninklijke Philips Electronics N.V. Parallel processing system
US7475222B2 (en) * 2004-04-07 2009-01-06 Sandbridge Technologies, Inc. Multi-threaded processor having compound instruction and operation formats

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9207922B2 (en) 2013-01-28 2015-12-08 Samsung Electronics Co., Ltd. Compiling method and apparatus for scheduling block in pipeline

Also Published As

Publication number Publication date
US20080244234A1 (en) 2008-10-02
CN101647000A (zh) 2010-02-10
EP2142988A1 (en) 2010-01-13
JP2010522940A (ja) 2010-07-08
KR101119612B1 (ko) 2012-03-22
CN101647000B (zh) 2014-12-10
WO2008118949A1 (en) 2008-10-02
JP5180285B2 (ja) 2013-04-10
US8127114B2 (en) 2012-02-28

Similar Documents

Publication Publication Date Title
US7793079B2 (en) Method and system for expanding a conditional instruction into a unconditional instruction and a select instruction
US7721071B2 (en) System and method for propagating operand availability prediction bits with instructions through a pipeline in an out-of-order processor
JP2597811B2 (ja) データ処理システム
KR101119612B1 (ko) 프로세서에서 실행 스테이지 이전에 명령들을 실행시키기 위한 시스템 및 방법
US5764943A (en) Data path circuitry for processor having multiple instruction pipelines
JP3579414B2 (ja) 投機的な実行を用いたアウトオブオーダー・プロセッサにおける精密な例外を配達する機構
JP5209933B2 (ja) データ処理装置
JP2008513908A (ja) 連続フロープロセッサパイプライン
WO2015153121A1 (en) A data processing apparatus and method for executing a stream of instructions out of order with respect to original program order
US10649780B2 (en) Data processing apparatus and method for executing a stream of instructions out of order with respect to original program order
US11182168B2 (en) Post completion execution in an out-of-order processor design
US6633971B2 (en) Mechanism for forward data in a processor pipeline using a single pipefile connected to the pipeline
TWI613589B (zh) 處理器流水線中的靈活的指令執行
US6092184A (en) Parallel processing of pipelined instructions having register dependencies
US7437544B2 (en) Data processing apparatus and method for executing a sequence of instructions including a multiple iteration instruction
US6351803B2 (en) Mechanism for power efficient processing in a pipeline processor
US6408381B1 (en) Mechanism for fast access to control space in a pipeline processor
US6918028B1 (en) Pipelined processor including a loosely coupled side pipe
Pulka et al. Multithread RISC architecture based on programmable interleaved pipelining
Shah et al. SPSIM: SuperScalar Processor SIMulater CS305 Project Report
JP2000099328A (ja) プロセッサ及びその実行制御方法
Shah Single Issue Instruction Dispatcher Based on Tomasulo’s Algorithm
Sadekin Duper scalar Processor: The hardware approach to instruction level parallelism

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

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20151230

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20161229

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20181227

Year of fee payment: 8