KR100974769B1 - 마이크로프로세서의 명령 파이프라인에서 명령 플러쉬를 관리하는 방법 및 장치 - Google Patents

마이크로프로세서의 명령 파이프라인에서 명령 플러쉬를 관리하는 방법 및 장치 Download PDF

Info

Publication number
KR100974769B1
KR100974769B1 KR1020087000601A KR20087000601A KR100974769B1 KR 100974769 B1 KR100974769 B1 KR 100974769B1 KR 1020087000601 A KR1020087000601 A KR 1020087000601A KR 20087000601 A KR20087000601 A KR 20087000601A KR 100974769 B1 KR100974769 B1 KR 100974769B1
Authority
KR
South Korea
Prior art keywords
branch
instruction
flush
pipeline
instructions
Prior art date
Application number
KR1020087000601A
Other languages
English (en)
Other versions
KR20080015508A (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 KR20080015508A publication Critical patent/KR20080015508A/ko
Application granted granted Critical
Publication of KR100974769B1 publication Critical patent/KR100974769B1/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
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0844Multiple simultaneous or quasi-simultaneous cache accessing
    • G06F12/0855Overlapped cache accessing, e.g. pipeline
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30072Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
    • 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
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/6028Prefetching based on hints or prefetch instructions

Landscapes

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

Abstract

하나 이상의 실시예에서, 프로세서는 브랜치 예측 오류의 검출에 응답하는 선택적인 기반에서 명령 파이프라인으로부터의 명령들을 플러쉬하는 하나 이상의 회로를 포함하여 브랜치 예측 오류와 관련된 브랜치 명령에 의존하는 것으로 마킹된 명령들이 플러쉬되게 한다. 따라서, 하나 이상의 회로는 명령들의 브랜치 예측 의존성을 표시하고, 직간접으로 올바르지 않은 브랜치 예측을 검출하고, 및 올바르지 않은 브랜치 예측에 의존한 것으로 마킹된 명령 파이프라인(들)의 명령들을 직간접으로 플러쉬하도록, 프로세서의 명령 파이프라인(들)으로 패치된 명령들을 마킹하도록 구성될 수도 있다.

Description

마이크로프로세서의 명령 파이프라인에서 명령 플러쉬를 관리하는 방법 및 장치{METHOD AND APPARATUS FOR MANAGING INSTRUCTION FLUSHING IN A MICROPROCESSOR'S INSTRUCTION PIPELINE}
본 발명은 마이크로프로세서에 관한 것이며, 특히 마이크로프로세서의 명령 파이프라인에서 명령 플러쉬의 관리와 관련한 것이다.
마이크로프로세서는, 프로세싱 전력이 주요한 설계 제한인 하이엔드 컴퓨터 시스템으로부터, 비용, 크기 및 전력 소비가 주요한 설계 제한인 로엔드 내장형 시스템에 걸쳐, 다양한 제품에 사용되고 있다. 뮤직 플레이어, 팜탑 컴퓨터, 휴대용 디지털 보조기(PDA) 등과 같은 배터리 전원형 휴대 장치용 프로세서는 설계 제한에 대처하는 특히 복잡한 구성을 보여준다. 한편으로, 프로세서 성능은 장치의 목적하는 기능을 지원하기에 충분해야만 하며 만족스런 사용자 "경험"을 제공해야만 한다. 다른 한편으로, 낮은 프로세서 전력 소모는, 허용가능한 배터리 수명을 달성하면서, 적절한 크기의 배터리 시스템의 사용을 허용하게 한다.
전술한 설계 트레이드오프의 혼합은 다양한 프로세서 성능 및 효율성 진보를 초래하였다. 예를 들어, 축소 명령 집합 컴퓨터(RISC)에 기초한 바와 같은 현대의 파이프라인 프로세서는 명령 파이프라인 "정지(stall)"를 방지하기 위해 브랜치 예측 방법을 사용한다. 명령 파이프라인으로 인해, 연속한 명령 프로세싱의 상이한 특징이 일반적으로 파이프라인의 상이한 스테이지(stage)들에서 발생한다. 예를 들어, 소정의 명령 파이프라인은 연속하여 정렬된 패치, 디코드, 송출, 및 실행 스테이지들을 포함할 수도 있다. 각각의 명령 클록 주기에서, 각각의 스테이지는 일반적으로 상이한 명령, 또는 명령들에 대해 동작한다. 예를 들어, 하나의 명령의 실행이 실행 스테이지에서 완료됨에 따라, 다른 명령들은 패치, 디코딩, 송출 등이 된다. 스테이지별 실행은 평균적으로 파이프라인 프로세서가 클록 주기마다 하나의 명령을 실행하게 한다.
그러나 클록 주기 평균당 하나의 명령은 파이프라인에 전체 명령을 유지시키는 것에 의존한다. 차례로, 파이프라인에 전체 명령을 유지시키는 것은, 소정의 프로그램 브랜치가 선택될지를 결정하는 동안 프로그램 명령 패치를 일반적으로 중지시킬 수 있음을 의미한다. 즉, 프로세서는 일반적으로 소정의 프로그램 브랜치가 선택될 지의 여부에 대한 추측(예측)을 행해야만 한다. 만일 예측이 "실행"되면, 명령 패치는 브랜치 타겟 어드레스로부터 연속한다. 만일 파이프라인이 선택되지 않으면, 명령 패치는 브랜치 명령 이후 다음 명령 어드레스로부터 계속한다.
어떤 경우든, 상기한 예측에 연속하여 파이프라인으로 패치된 명령은 상기 예측이 올바르지 않으면 "잘못된" 명령일 것이다. 파이프라인은 소정의 시간에서 현저한 다수의 예측 가져야 하는데, 즉 파이프라인 스테이지들 중 다양한 스테이지에서 표류(in-flight)하는 다수의 미결정 브랜치 명령들을 가질 수도 있다. 따라서, 파이프라인에서 표류하는 명령들 중 소정의 하나는 하나 이상의 현저한 브랜치 예측에 의존하거나, 이들 중 어떤 것에도 의존하지 않을 수도 있다.
이러한 가능성은 브랜치 예측 오류의 환경에서 프로세싱 복잡성을 유도한다. 일반적으로, 표류하는 명령들의 적어도 일부는 현저한 브랜치 예측들 중 적어도 하나에 의존할 것이며, 결국 대응하는 브랜치 예측 오류의 검출에 응답하여 명령 파이프라인으로부터 플러쉬될 것이다. 어려움은 표류중인 명령의 브랜치 예측 의존도를 정확하게 식별 또는 추적하는 것의 어려움에서 발생하며, 특히 일부 명령들은 원래의 프로그램 순서를 벗어나서 실행될 수도 있기 때문이다.
예를 들어, 소정의 명령은 캐시 미스 때문에 데이터 상에 대기해야 할 수도 있으며, 데이터가 외부 메모리로부터 검출되는 동안 파이프라인을 정지시키기 보다는, 상기 명령의 실행은 파이프라인이 계속하여 다른 표류하는 명령을 실행하면서 일시 정지될 수도 있다. 더욱 일반적으로, 프로그램의 순서를 벗어난 명령의 실행은 파이프라인 스테이지들의 병렬 세트를 포함하는 수퍼스칼라 명령 파이프라인의 프로세싱 성능 장점들 중 하나를 나타낸다. 이러한 수퍼스칼라 파이프라인은 많은 표류중인 명령을 가질 수도 있으며, 이들 중 대다수는 프로그램 순서를 벗어나서 실행된다.
따라서, 특정 브랜치 예측 오류에 의존한 명령들만의 선택적인 플러쉬는, 너무 많은 추적 복잡성을 유도하지 않고 상기한 의존성을 정확하게 식별할 수 있는 점에서 잠재적으로 현저한 도전을 나타낸다. 물론, 선택적인 명령 플러쉬에 대한 대안은, 상기 명령들의 개별 명령이 잘못 예측된 브랜치 면령에 실질적으로 의존하는 지에 무관하게, 브랜치 예측 오류가 검출될 때 파이프라인으로부터 모든 명령을 플러쉬하는 것이다. 상기 방식의 이면에는 이미 패칭되고 적어도 부분적으로 실행된 유효한 명령들을 파이프라인으로부터 플러쉬하는 것과 관련한 성능 및 효율 손실이 존재한다.
본 발명은 마이크로프로세서의 명령 파이프라인에서 명령 플러쉬를 관리하는 방법 및 장치를 포함한다. 적어도 하나의 실시예에서, 마이크로프로세서에 포함된 하나 이상의 회로는, 자신의 브랜치 예측 의존도를 표시하기 위해 명령 파이프라인으로 패치된 명령들을 마킹하고, 올바르지 않은 브랜치 예측을 검출하고, 및 올바르지 않은 브랜치 예측에 의존하는 것으로 마킹된 명령 파이프라인의 명령을 플러쉬하는 것에 기초하여 명령 플러쉬를 관리하도록 구성된다.
적어도 일 실시예에서, 브랜치 예측을 나타내기 위해 명령 파이프라인으로 패치된 마킹 명령은 마킹 브랜치 예측에 응답하여 비트 표시자를 활성시키고, 상기 브랜치 예측이 분석될 때까지 특정 브랜치 예측에 대해 대응하는 비트 표시자를 활성으로 유지시키고, 총 활성 비트 표시자를 이용하여 명령 파이프라인으로 패치된 각각의 명령을 마킹하는 것을 포함한다. 예를 들어, 올바르지 않은 브랜치 예측에 의존한 것으로 마킹된 명령 파이프라인에서 명령들을 플러쉬하는 것은 올바르지 않은 브랜치 예측에 대응하는 비트 표시자에 기초하여 플러쉬 신호를 브로드캐스트하고, 비트 표시자로 마킹된 명령 파이프라인에서 명령들을 플러쉬하는 것을 포함할 수도 있다. 마찬가지로, 소거 신호는 브랜치 예측에 의존하는 것으로 마킹된 명령 파이프라인에서 명령들로부터 대응하는 비트 표시자를 소거하기 위해 올바른 브랜치 예측에 대응하는 비트 표시자에 기초하여 브로드캐스트될 수도 있다. 소거는 비트 표시자가 의존성 마킹 프로세스에서 재사용되게 한다.
하나 이상의 실시예에서, 브랜치 예측 의존성을 나타내기 위해 명령 파이프라인에 패치된 명령들을 마킹하는 것은 "브랜치 플러쉬 태그"를 명령 파이프라인으로 패치된 적어도 각각의 조건 브랜치 명령으로 할당하고, 명령 파이프라인으로 패치된 각각의 명령으로 앞서 할당된 브랜치 플러쉬 태그에 기초하여 "브랜치 경로 태그"를 부가하는 것을 포함한다. 이러한 실시예의 상황에서, 올바르지 않은 브랜치 예측에 의존하는 것으로 마킹된 명령 파이프라인에서 명령들을 플러쉬하는 것은 올바른 브랜치 예측 및 올바르지 않은 브랜치 예측을 검출하기 위해 명령 파이프라인의 실행 스테이지에서 브랜치 조건을 검출하는 것에 기초할 수도 있으며, 올바르지 않은 브랜치 예측의 경우, 관련된 조건 브랜치 명령의 브랜치 플러쉬 태그에 기초한 명령 파이프라인에서 플러쉬 신호를 브로드캐스트하는 것에 기초할 수도 있다. 브랜치 경로 태그가 관련된 통상의 브랜치 명령의 브랜치 플러쉬 태그로 마킹된 명령 파이프라인의 명령은 브로드캐스트에 응답하여 플러쉬될 수도 있다.
결론적으로, 하나 이상의 프로세서 실시예는 브랜치 예측 의존성을 나타내기 위해 명령 파이프라인으로 패치된 명령들을 마킹하고, 올바르지 않은 브랜치 예측을 검출하고, 올바르지 않은 브랜치 예측에 의존하는 것으로 마킹된 명령 파이프라인에서 명령들을 플러쉬하도록 구성된 플러쉬 제어 회로를 포함한다. 이러한 동작을 실행할 때, 플러쉬 제어 회로는 브랜치 플러쉬 태그 및 브랜치 경로 태그를 생성 및 유지할 수도 있으며, 전술한 소거 및 플러쉬 동작을 실행하거나, 이러한 다양한 동작을 실행하기 위해, 하나 이상의 명령 파이프라인 스테이지들과 협력하는 회로를 포함할 수도 있다.
도1은 명령 파이프라인 및 관련된 플러쉬 제어 회로를 포함하는 마이크로프로세서를 도시한 블록도이다.
도2는 명령 파이프라인 및 관련된 플러쉬 제어 회로의 일 실시예의 블록도이다.
도3은 브랜치 예측 의존성을 마킹 및 추적하는 것에 기초하여 명령 파이프라인으로부터 명령들을 플러쉬하는 일 실시예를 지원하는 프로세싱 로직의 논리 흐름도이다.
도4는 프로그램 흐름 순서에서 명령 파이프라인으로 패칭된 6개의 명령을 나타낸 프로그램 명령 흐름도이다.
도5는 고장 명령 실행을 지원하는 수퍼스칼라 명령 파이프라임의 블록도이다.
도6은 브랜치 플러쉬 태그의 생성 및 명령 파이프라인으로 패치된 브랜 명령으로의 부가 및 명령 파이프라인으로 패치된 모든 타입의 명령으로의 브랜치 경로 태그의 부가를 도시한 표이다.
도7은 소정 수의 대응하는 브랜치 예측에 대응하는 브랜치 플러쉬 태그의 대표 세트, 및 개별 브랜치 플러쉬 태그를 논리적으로 통합한 대응하는 브랜치 경로 태그의 블록도이다.
도8은 브랜치 플러쉬 태그들을 생성하고, 대응하는 브랜치 경로 태그를 가진 명령들을 마킹하고, 플러쉬 또는 소거 신호의 브로트캐스팅에 기초하여 명령 파이프라인의 명령들을 플러쉬 또는 소거하는 일 실시예를 도시한 논리 흐름도이다.
도1은 프로세서 코어(12), 명령 프리-패치 유닛(14), 명령 캐시(16), 명령 캐시 제어기(18), 로드/저장 유닛(20), 데이터 캐시(22), 데이터 캐시 제어기(24), 및 메인 변환 색인(translation lookaside) 버퍼(26)를 포함하는 프로세서(10)를 적어도 부분적으로 도시한다. 프로세서(10)의 하나 이상의 실시예에서, 프로세서 코어(12)의 명령 파이프라인(30)은 플러쉬 제어 회로(32)를 포함하거나 이와 관련된다. 플러쉬 제어 회로(32)는 브랜치 명령 타겟 어드레스 예측의 관리의 일부로서, 명령 파이프라인(30)으로부터 표류중인 명령들을 플러쉬하는 것을 지원한다.
제한이 목적이 아닌 예로써, 프로세서(10)는 축소 명령 집합 컴퓨터(RISC)에 기초한 파이프라인 프로세서일 수도 있다. 상기 프로세서(10)의 적어도 하나의 실시예에서, 명령 파이프라인(30)은 고장 프로그램 실행을 지원하며, 다수의 병렬 실행 스테이지(미도시)를 포함하는 수퍼스칼라 명령 파이프라인을 포함할 수도 있다.
프로세서(10)가 수퍼스칼라 특징을 포함하는지에 무관하게, 코어(12)는 프로그램 명령들을 실행하고 대응하는 로드/저장 데이터 동작을 실행한다. 변환 색인 버퍼(26)는 코어(12)로부터의 입력을 받아들이고 코어(12)로 출력을 제공한다. 특히, 변환 색인 버퍼(26)는 코어(12)를 각각 명령 및 데이터 캐시(16 및 22)로 인터페이스한다. 명령 및 데이터 캐시(12 및 22)는 고속, 온-보드 메모리를 포함하며, 프로세서(10)는 캐시들이 다음으로 필요한 명령 및 데이터로 채워지게 유지하도록 명령 및 데이터 캐시 제어기(18 및 24)를 통해 명령 및 데이터 프리-패치를 이용한다.
명령 프리-패칭의 일 특징에서, 프로세서(10)는 자신의 전체 성능을 가속시키기 위해 브랜치 예측을 사용한다. 브랜치 예측의 경우, 프로세서(10)는 일반적으로 조건 브랜치 명령이 프로그램 흐름에서 인식될 때 코어의 명령 패치 동작을 방해하지 않으며, 오히려 프로그램 브랜치들을 선택되거나 선택되지 않는 것으로 예측하는 것에 의존하여, 다음 연속한 명령 어드레스 또는 브랜치 타겟 어드레스로부터 명령 패칭을 계속한다. 제한을 목적으로 하지 않는 예로써, 코어(12)는 "정적" 브랜치 예측을 실행하기 위해 구성될 수도 있으며, 프리-패치 유닛(14)은 브랜치 예측 통계의 누적 등에 기초하여 동적 브랜치 예측을 실행하도록 구성될 수도 있다. 다른 회로 구성들은 상기 동작을 지원하기 위해 사용될 수도 있으며, 당업자는 프로세서(10)가 브랜치 예측 프로세서이고, 여기서, 명령 파이프라인(30)에 패치된 적어도 일부의 명령들은 프로그램 실행 동안 프로세서(10)에 의해 행해진 브랜치 예측에 의존함을 이해할 것이다.
일반적으로, 예측된 프로그램 브랜치의 경우, 명령 패치는 브랜치 명령에 의해 타겟된 명령 어드레스로부터 연속하며, 예측되지 않은 브랜치의 경우, 명령은 명령 시퀀스에서 브랜치 명령 이후의 명령 어드레스로부터 계속한다. 따라서, 소정의 브랜치들이 선택되거나 선택되지 않은 것으로 올바르지 않게 예측된 경우까지, "잘못된" 프로그램 명령이 프로세서의 명령 파이프라인(30)으로 패치될 것이다.
상기한 사항 외에, 플러쉬 제어 회로(32)는 직간접으로 플러쉬하기 위해 구성되는데, 올바르지 않은 브랜치 예측에 의존하는 것으로 "마킹"된 상기 명령들은 이미 파이프라인(30)에 존재한다. 이러한 플러쉬 동작은 명령 파이프라인(30)의 조건에서 더욱 잘 기술되며, 도2는 명령 파이프라인(30) 및 플러쉬 제어 회로(32)의 일 실시예를 도시한다. 설명된 명령 파이프라인(30)은 패치 스테이지(40), 명령 디코드 스테이지(42), 명령 송출 스테이지(44), 및 명령 실행 스테이지(46)를 포함한다. 실행 스테이지(46)는 조건 브랜치 명령들과 관련된 조건들을 평가하는 조건 결정 회로(48)를 포함하거나 이와 관련된다. 다시 말해서, 조건 결정 회로(48)는 브랜치 조건들을 결정함으로써 결정되지 않은 브랜치 명령들을 "분석"한다. 조건 브랜치 명령들과 관련된 브랜치 조건의 결정은 브랜치 명령을 위해 행해진 브랜치 예측이 올바른지 또는 올바르지 않은지의 결정을 가능하게 한다.
예를 들어, 명령 파이프라인(30)과 관련된 브랜치 예측 회로(50)는 브랜치 명령들이 명령 디코드 스테이지(42)에 의해 디코딩된 후 브랜치 명령들을 인식하고, 상기 브랜치들이 선택되거나 선택되지 않을 지에 대해 예측하도록 구성될 수도 있다. 이러한 예측은 브랜치 조건들을 분석하기 전에 행해지며, 소저의 브랜치 명령에 대해 행해진 예측의 수정은 브랜치 명령의 조건이 조건 결정 회로(48)에 의해 평가될 때까지 알려지지 않는데, 조건 결정 회로(48)는 실행 스테이지(46)에 의해 실행된 각각의 조건 브랜치 명령의 조건 분석을 나타내는 출력을 제공하도록 구성될 수 있다. 따라서, 브랜치 예측 회로(50) 및/또는 플러쉬 제어 회로(32)는, 소정의 브랜치 명령이 선택되거나 선택되지 않은 것으로 올바르게 예측되었는지의 여부를 결정하기 위해, 조건 결정 회로(48)에 의한 조건 평가 결과 출력을 수신하도록 구성될 수 있다.
만일 브랜치 명령이 선택된 것으로 올바르지 않게 예측되거나, 선택되지 않은 것으로 올바르지 않게 예측되면, 플러쉬 제어 회로(32)는 잘못 예측된 브랜치에 의존하는 명령 파이프라인(30) 내에서 표류하는 상기 명령들을 플러쉬하도록 동작한다. 특히, 적어도 하나의 실시예에서, 플러쉬 제어 회로(32)는 명령 파이프라인(30)으로 패치된 명령들의 브랜치 예측 의존성을 "마킹"하도록 동작하고, 브랜치 예측 오류의 검출에 응답하여, 특정한 브랜치 예측 오류에 의존하는 것으로 마킹된 명령 파이프라인(30)에서 현재의 상기 명령들이 플러쉬되게 한다. 적어도 하나의 실시예에서, NOP(비동작) 명령은 플러쉬 동작에 의해 명령 파이프라인(30)에 생성된 소정의 "버블"을 채우기 위해 사용되지만, 다른 실시예는 NOP를 삽입하지 않을 수도 있거나, 플러쉬 후에 명령 파이프라인(30)에서의 동작을 계속하기 위해 요구되는 다른 스테이지를 선택할 수도 있다. 플러쉬의 일부로서, 또는 플러쉬에 연속하여, 명령 파이프라인(30)은 적절한 어드레스로부터 명령들을 패치함으로써 채워질 수도 있다.
도3은 플러쉬 제어 회로(32)에서, 또는 상기 회로의 동작을 지원하여 구현될 수도 있는 명령 플러쉬를 위한 프로세싱 로직을 도시한다. 도시된 로직은 명령 패치가 진행되고, 플러쉬 제어 회로가 브랜치 예측 의존성을 예측하기 위해 명령 파이프라인(30)으로 패치된 명령들을 마킹(스테이지 100)하는 것을 가정한다. 일반적으로, 파이프라인으로 패치된 소정의 명령은 직간접으로 명령 파이프라인(30)에 현재 나타나는 미분석된 브랜치 예측에 의존한다. 따라서, 브랜치 예측 의존성들은 새로운 예측이 행해지고 오래된 예측이 분석되는 것과 같이 프로그램 실행 동안 변화하며, 플러쉬 제어 회로(32)의 브랜치 예측 의존성 마킹 동작은 그에 따라 변화한다.
마킹된 명령들은 명령 파이프라인의 다양한 스테이지를 통해 진행하고 브랜치 조건들은 명령 파이프라인(30)의 소정의 포인트에서 분석(스테이지 102)되는 것으로 가정하면, 플러쉬 제어 회로(32)는 직접적으로(또는 간접적으로) 브랜치 예측 오류를 검출(104)하고, 그에 따라 응답한다. 특히, 플러쉬 제어 회로(32)의 적어도 하나의 실시예에서, 플러쉬 제어 회로는 올바르지 않은 브랜치 예측에 의존하는 것으로 마킹된 명령 파이프라인(30)의 현재의 모든 명령들을 플러쉬(스테이지 106)한다.
하나 이상의 실시예에서, 상기 플러쉬를 실행하기 위한 하나의 메카니즘은 실제 플러쉬를 실행하기 위해 명령 파이프라인(30)의 하나 이상의 스테이지들에서 대응하는 회로에 의해 사용된 플러쉬 신호를 "브로드캐스트"하는 플러쉬 제어 회로(32)를 포함한다. 마찬가지로, 올바르게 예측된 브랜치의 경우, 플러쉬 제어 회로(32)는 상기 브랜치에 의존하는 것으로 마킹된 소정의 명령으로부터 대응하는 의존성 마킹을 소거하기 위해 명령 파이프라인(30)의 하나 이상의 스테이지에서 사용되는 소거 신호를 브로드캐스트할 수도 있다(스테이지 108). 적어도 하나의 실시예에서, 소거 종작은 선택적이다. 그러나 소거 메카니즘을 제공하는 것은 이후에 패치된 명령들에 대한 동일한 의존성 마킹의 재사용을 가능하게 하는 것을 포함하여 몇몇 장점을 제공한다.
플러쉬 제어 회로(32)의 표시자 재사용 특징에 무관하게, 도4는 "A", "B", "C", "D", "E" 및 "F"로 표기된, 프로그램 흐름 순서에서 6개의 명령을 설명함으로써 브랜치 예측 의존성 마킹의 더 많은 기본적은 특징의 이해를 용이하게 한다. 이러한 명령들은 프로그램 순서에서 명령 파이프라인(30)으로 패치되고, 원형 표시된 명령들(C 및 E)은 대응하는 브랜치 어드레스 타겟들이 선택 또는 선택되지 않은 것으로 예측된 조건 브랜치 명령들이다. 따라서, 명령들(D 또는 E)은 브랜치 명령(C)에 대해 행해진 선택/비선택 예측에 의존하는 위치로부터 패치된다. 마찬가지로, 명령(F)은 브랜치 명령(E)에 대해 행해진 선택/비선택 예측에 직접적으로 의존하는, 그리고 명령(C)에 대해 행해진 이전의 예측에 직접 또는 간접적으로 의존하는 위치로부터 패치된다. 간단히 말해서, 명령(D, E 및 F)이 브랜치 명령(C)에 대해 행해진 브랜치 예측에 의존하고, 명령(F)이 부가적으로 브랜치 명령(E)에 대해 행해진 브랜치 예측에 의존한다.
도5는 명령 파이프라인(30)의 수퍼스칼라 실시예에서 프로그램 순서에 벗어나서 실행된 명령 A-F를 도시한다. 특히, 설명된 실행 스테이지(46)는 두 개의 평행한 세트의 실행 스테이지들을 포함하는데, 첫 번째 세트는 스테이지 E1-A 내지 E4-A로 표시되고, 두 번째 세트는 E1-B 내지 E4-B로 표시된다. 물론, 명령 파이프라인(30)은 실제로, 훨씬 더 복잡한 실행 스테이지 배열을 사용할 수도 있으며, 상이한 스테이지 배열을 사용할 수도 있거나, 일반적으로 설명되지 않은 스테이지들 및 다른 엘리먼트를 사용할 수도 있다.
소정의 경우, 교시된 의존성 마킹의 부재시, 브랜치 예측 오류로 인해 플러쉬되어야 하는 명령 파이프라인(30)에서 명령들을 식별하는 태스크는 매우 복잡하게 될 수 있음이 쉽게 이해될 것이다. 물론, 소정의 브랜치 예측 오류를 검출할 때 전체 명령 파이프라인(30)을 간단하게 플러쉬할 수도 있지만, 명령 파이프라인(30) 내에서 이미 표류하는 비의존성 명령들을 유지함으로써 얻어지는 성능 및 효율성은 상실할 것이다.
플러쉬 제어 회로(30)는, 의존성 명령들이 플러쉬되는 것을 보장하면서, 이러한 장점은 보존할 것이다. 플러쉬 제어 회로(32)의 적어도 하나의 실시예에서, 플러쉬 제어 회로는 브랜치 예측의 마킹에 응답하여 비트 표시자를 활성화하고, 브랜치 예측이 분석될 때까지 특정 브랜치 예측을 위해 대응하는 비트 표시자를 활성 상태로 유지하고, 전체 활성 비트 표시자를 갖는 명령 파이프라인(30)으로 패치된 각각의 명령을 마킹함으로써 명령들의 브랜치 예측 의존성을 표시하기 위해 명령 파이프라인(30)으로 패치된 명령들을 마킹한다. 이러한 마킹은 패치 스테이지(40), 디코드 스테이지(42)와 같은 명령 파이프라인(30)에서, 또는 플러쉬 제어 회로가 명령 흐름 경로에 배치되거나, 상기 플러쉬 제어 회로가 상기 경로에 액세스할 경우, 플러쉬 제어 회로(32)에서, 소정의 적절한 포인트에서 발생할 수도 있다.
적어도 하나의 실시예에서, 올바르지 않은 브랜치 예측에 의존하는 것으로 마킹된 명령 파이프라인(30)에서 명령들을 플러쉬하는 것은 플러쉬 신호를 브로드캐스트하고 비트 표시자로 마킹된 명령 파이프라인(30)에서 명령들을 플러쉬하는 것을 포함한다. 플러쉬 신호는 올바르지 않게 예측된 브랜치 명령의 브랜치 플러쉬 태그에 대응하는 비트 표시자에 기초한 벡터일 수도 있다. 마찬가지로, 올바르게 예측된 것으로 검출된 브랜치 예측의 경우, 플러쉬 제어 회로(32)는 올바른 브랜치 예측에 대응하는 비트 표시자에 기초한 소거 신호를 브로드캐스트하고, 그로 인해 브랜치 예측에 의존하는 것으로 마킹된 명령 파이프라인(30)의 명령들로부터 대응하는 비트 표시자를 소거하도록 구성될 수 있다. 소거 신호는 브랜치 경로 태그에서 적절한 비트를 소거하기 위해 각각의 명령의 브랜치 경로 태그와 논리적으로 AND될 수 있도록, 브랜치의 브랜치 플러쉬 태그의 역수인 벡터일 수도 있다. 올바르게 예측된 브랜치들에 대한 의존성 표시자들의 소거는 이러한 표시자 위치들이 재사용되게 한다.
전술한 마킹 방법의 일 실시예는 도4에서 앞서 설명된 명령의 세트에 대해 도6 및 7에서 설명된다. 어떤 브랜치 예측들이 행해졌는지에 대한 최소한의 브랜치 명령들인 브랜치 명령들에는 대응하는 "브랜치 플러쉬 태그"가 할당된다. 브랜치 플러쉬 태그는 실제 브랜치 명령에 대한 비트 벡터로서 부가될 수 있어서, 이는 명령 파이프라인(30)을 거쳐 아래로는 브랜치 명령과 함께 실행된다. 또한, 명령 파이프라인으로 패치된 각각의 명령은, "브랜치 경로 태그"를 각각의 명령에 부가함으로써 자신의 브랜치 예측 의존성을 나타내기 위해 마킹된다. 브랜치 경로 태그는 현재 나타난 브랜치 플러쉬 태그들의 논리적 집합으로서 형성될 수 있다.
따라서, 만일 브랜치 플러쉬 태그들이 유일한 하나의 핫 벡터로서 구현되면, 즉 각각의 브랜치 플러쉬 태그가 상이한 비트 위치 세트를 갖는다면, 브랜치 경로 태그가 형성될 수 있으며, 현재의 활성 브랜치 플러쉬 태그들을 논리적으로 OR함으로써 각각의 명령에 부가될 수 있다. 논리적 OR의 타입의 예는 도6에 도시된다.
명령(A 및 B)은 브랜치 명령들이 아니기 때문에, 이들에는 제로의 브랜치 플러쉬 태그가 할당(또는 어떠한 플러쉬 태그도 할당되지 않음)되고, 모두 제로인 브랜치 경로 태그가 할당되는데, 이때 브랜치 예측들이 명령 파이프라인으로 패치될 경우, 어떠한 브랜치 예측들도 나타나지 않는 것으로 가정한다. 명령(C)은 브랜치 명령이며, 여기에는 유일한 하나의 핫 벡터 비트 위치를 갖는 브랜치 플러쉬 태그가 할당되지만, 명령(C)의 브랜치 경로 태그는 모두 제로들로 설정되는데, 그 이유는 명령(C)이 패치될 때 나타나는 어떠한 브랜치 예측도 없기 때문이다.
명령(D)은 그 자체로 브랜치 명령이 아니기 때문에, 명령(D)에는 브랜치 플러쉬 태그가 할당되지 않는다. 택일적으로, 명령(D)에는 모든 제로 브랜치 플러쉬 태그가 할당될 수도 있다. 어떠한 경우든, 명령(D)에 부가된 브랜치 경로 태그는 명령(C)의 브랜치 플러쉬 태그의 마커 비트에 대응하는 위치에 설정된 비트를 갖는다. 따라서, 명령(D)은 브랜치 명령(C)에 대해 행해진 브랜치 예측에 의존하는 것으로 마킹된다. 마찬가지로, 명령(E 및 F)은 브랜치 명령(C)에 대해 행해진 브랜치 예측에 대한 명령(E 및 F)의 의존성을 나타내는 브랜치 경로 태그들로 마킹된다. 또한, 추가적으로 명령(F)에 부가된 브랜치 경로 태그는 브랜치 명령(E)에 대해 행해진 브랜치 예측에 대해 의존성을 보여주기 위해 마킹된다.
전술한 방법에 따라, 각각의 조건 브랜치 명령에는 일반적으로 유일한 브랜치 플러쉬 태그가 할당되지만, 파이프라인에 존재하는 소정의 미분석된 브랜치 명령들에 의해 현재 요구된 태그(들)를 재사용하지 않는다. 일단 조건 브랜치가 파이프라인에서 분석되거나, 파이프라인으로부터 플러쉬되면, 조건 브랜치의 브랜치 플러쉬 태그는 재사용될 수 있는 경우, "회수(retired)"될 수도 있다. 즉, 앞서 할당된 브랜치 플러쉬 태그들은 이들에 할당되는 브랜치들이 분석될 경우, 또는 브랜치 플러쉬 태그들이 플러쉬되는 다른 명령(브랜치)에 의존하기 때문에, 또는 예를 들어, 방해 관련 플러쉬로 인해, 브랜치 플러쉬 태그들이 파이프라인으로부터 플러쉬될 경우 재사용을 위해 회수 및 마킹될 수도 있다.
적어도 하나의 실시예에서, 브랜치 플러쉬 태그들과 브랜치 경로 태그들의 폭들은 동일한데, 상기 폭은 태그들이 할당되는 스테이지와 브랜치 조건들이 분석되는 스테이지 사이에서 프로세서의 파이프라인에 존재하게 하는 현저한 브랜치들의 수에 의해 결정되는데, 명령들은 태그들에 할당될 때까지 차례로 유지되는 것으로 가정한다. 적절한 태그 폭은, 최대로, 프로세서의 파이프라인의 두 개의 특정한 포인트들 사이의 스테이지들의 수와 동일할 것이다. 그러나 적어도 하나의 실시예에서, 태그 폭은 스테이지 수보다 적은데, 이는 모든 상기 스테이지들이 조건 브랜치들을 포함할 것 같지 않기 때문이다. 물론, 요구된 태그 폭, 즉 조건 브랜치 마커의 수는 만일 고장 명령이 관심 파이프라인 스테이지들에서 허용될 경우 더 클 수도 있으며, 더욱 일반적으로, 포함된 프로세서 파이프라인의 특징에 따라 결정될 수 있다.
소정의 경우, 도8은 전술한 브랜치 예측 의존성 마킹의 실시예에 대한 프로세싱 세부 사항의 예의 스테이지들을 도시하는데, 플러쉬 제어 회로(32)는 적어도 미결정된 브랜치 조건들을 갖는 조건 브랜치 명령들에 대해 브랜치 플러쉬 태그를 활성화(스테이지 110)시킨다. 이러한 활성화는 명령 파이프라인(30)의 다양한 포인트에서 행해질 수 있다. 예를 들어, 마킹은 디코드 스테이지(42)에 의한 명령 디코딩의 일부로서 행해질 수 있거나, 상기 스테이지 직후에 행해질 수도 있다.
어쨌든, 브랜치 플러쉬 태그들은 조건 브랜치 명령들에 부가되어서, 실행 스테이지(46)에 의해 출력된 브랜치 조건 결과가 예측이 행해지는 브랜치 명령들 중 각각의 명령들에 대해 식별될 수 있게 한다. 프로세서(10)는 브랜치 플러쉬 태그들을 모든 브랜치 명령들에 부가함으로써, 조건이 어떻든, 브랜치 플러쉬 태그 프로세싱을 간략하게 할 수도 있다.
브랜치 명령들에 특정한 전술한 브랜치 플러쉬 태그 프로세싱과 관련하여, 일반적으로 명령 파이프라인(30)으로 패치된 모든 명령들은 현재 활성인 브랜치 플러쉬 태그들에 대응하는 하나 이상의 표시자를 포함하는 브랜치 경로 태그로 마킹(예를 들어, 브랜치 플러쉬 태그들의 논리적 OR)(스테이지 112)된다. 브랜치 경로 태그들은 플러쉬 제어 회로(32) 내의 회로에 의해, 또는 명령 파이프라인(30)의 소정 위치에 배치된 회로에 의해 부가될 수 있다. 예를 들어, 의존성 마킹은 패치 스테이지(40)에서, 또는 디코드 스테이지(42)에서 회로에 의해 실행될 수도 있다.
브랜치 명령들에 부가된 브랜치 플러시 태그들로 인해, 조건 결정 회로(48)는 대응하는 브랜치 플러쉬 태그에 "태그된" 브랜치 조건 평가 결과를 출력하도록 구성될 수 있다. 즉, 조건 결정 회로(48)는 소정의 조건 결과와 관련된 브랜치 플러쉬 태그를 식별하기 위해 구성될 수도 있으며, 올바르게 예측된 브랜치들 및 올바르지 않게 예측된 브랜치들의 검출을 위해, 플러쉬 제어 회로(32) 및 브랜치 예측 회로(50)에 정보를 시그널링하도록 구성(스테이지 114)될 수 있다.
올바르게 예측된 브랜치의 경우, 플러쉬 제어 회로(32)는 대응하는 브랜치 명령의 브랜치 플러쉬 태그에 기초하여 소거 신호를 브로드캐스트하도록 구성(스테이지 116)될 수 있다. 소거 신호는 명령 파이프라인(30)을 포함하는 하나 이상의 스테이지에서 수신될 수도 있으며, 상기 스테이지들과 관련된 플러쉬 회로는 현재 분석된 브랜치 예측에 대해 의존적인 것으로 앞서 마킹된 상기 스테이지에서 명령들의 브랜치 경로 태그로부터 대응하는 표시자(들)을 소거한다. 이러한 회로는 소거 신호에 의해 표시된 브랜치 플러쉬 태그에 대응하는 세트 비트를 가진 부가된 브랜치 경로 태그들을 갖는 명령들을 간단하게 식별하도록 구성될 수도 있다. 소정의 실시예에서, 이러한 회로는 각각의 개별 스테이지의 일부로 고려될 수도 있으며, 다른 실시예에서, 이러한 회로는 플러쉬 제어 회로(32)의 일부로 고려될 수도 있다.
올바르지 않게 예측된 브랜치의 경우, 플러쉬 제어 회로(32)는 대응하는 브랜치 명령의 브랜치 플러쉬 태그에 기초하여 플러쉬 신호를 브로트캐스트하도록 구성(스테이지 118)될 수 있다. 플러쉬 신호는 명령 파이프라인(30)을 포함하여 하나 이상의 스테이지들에서 수신될 수도 있으며, 상기 스테이지들과 관련된 플러쉬 회로는 현재 분석된 브랜치 예측에 의존적인 것으로 마킹된 브랜치 경로 태그들을 갖는 명령들을 플러쉬한다.
기술 분야의 당업자는 전술한 프로세싱 로직이 표류중인 명령들의 브랜치 예측 의존성을 마킹하여, 상기 명령들이 특정 브랜치 명령이 예측 오류로 검출된 것에 응답하여 명령 파이프라인(30)으로부터 선택적으로 플러쉬될 수 있는 광의의 방법의 일 실시예를 간단하게 표현한 것임을 이해할 것이다. 일반적으로, 프로세서(10)는 명령들이 의존하는 특정 브랜치 명령들을 나타내기 위해 명령들을 마킹하고, 개별 브랜치 명령들의 예측 오류를 검출하고, 잘못 예측된 브랜치에 의존하는 명령들을 식별하기 위해 상기 마킹을 이용함으로써 명령 파이프라인(30)으로부터 선택적으로 명령들을 플러쉬하도록 구성된다.
상기한 바와 같이, 본 발명은 전술한 논의에 의해 한정되지 안으며, 덧붙인 도면에 의해서도 한정되지 않는다. 오히려, 본 발명은 첨부한 청구한 및 이들의 법률적 등가에 의해서만 한정된다.

Claims (23)

  1. 명령 파이프라인에서 브랜치 예측들을 관리하는 방법으로서,
    명령들의 브랜치 예측 의존성들을 나타내기 위해 상기 명령 파이프라인으로 패치된 상기 명령들을 마킹하는 단계 ― 여기서, 상기 명령 파이프라인으로 패치된 명령들 중 적어도 하나는 동적 브랜치 예측에 기초하여 선택되었으며, 상기 동적 브랜치 예측은 누적된 브랜치 예측 통계들에 기초하여 브랜치 조건들을 예측하는 것을 포함하며, 상기 명령들을 마킹하는 단계는,
    상기 명령 파이프라인으로 패치된 각각의 조건 브랜치 명령에 브랜치 플러쉬 태그(branch flush tag)를 부가하는 단계 ―여기서, 상기 브랜치 플러쉬 태그는 명령을 조건 브랜치 명령으로 식별함 ―, 및
    상기 명령 파이프라인으로 패치된 각각의 명령에 대응하는 브랜치 경로 태그를 부가하는 단계를 포함하며, 상기 각각의 브랜치 경로 태그는 특정 명령이 의존하는 적어도 하나의 조건 브랜치 명령을 식별함 ―;
    특정 조건 브랜치 명령의 올바르지 않은 브랜치 예측들을 검출하는 단계;
    상기 특정 조건 브랜치 명령의 브랜치 플러쉬 태그에 기초하여 상기 명령 파이프라인의 적어도 하나의 스테이지로 플러쉬 신호를 브로드캐스트하는 단계; 및
    상기 플러쉬 신호의 수신에 응답하여, 명령 파이프라인의 브랜치 경로 태그들이 상기 특정 조건 브랜치 명령의 상기 브랜치 플러쉬 태그로 마킹된 상기 명령 파이프라인의 적어도 하나의 스테이지의 모든 명령들을 플러쉬하는 단계를 포함하는,
    명령 파이프라인에서 브랜치 예측들을 관리하는 방법.
  2. 제1항에 있어서,
    상기 명령들을 마킹하는 단계는,
    브랜치 예측들의 마킹에 응답하여 하나 이상의 비트 표시자들을 활성화시키는 단계;
    상기 특정 브랜치 예측이 분석될 때까지 특정 브랜치 예측에 대응하는 특정 비트 표시자를 활성 상태로 유지하는 단계; 및
    상기 활성 비트 표시자들의 집합(aggregation)으로 상기 명령 파이프라인으로 패치된 각각의 명령을 마킹하는 단계를 포함하는,
    명령 파이프라인에서 브랜치 예측들을 관리하는 방법.
  3. 제2항에 있어서,
    명령 파이프라인의 브랜치 경로 태그들이 상기 특정 조건 브랜치 명령의 상기 브랜치 플러쉬 태그로 마킹된 상기 명령 파이프라인의 적어도 하나의 스테이지의 모든 명령들을 플러쉬하는 단계는,
    상기 올바르지 않은 브랜치 예측에 대응하는 특정 비트 표시자에 기초하여 상기 플러쉬 신호를 브로드캐스트하는 단계; 및
    상기 특정 비트 표시자로 마킹된 상기 명령 파이프라인의 명령들을 플러쉬하는 단계를 더 포함하는, 명령 파이프라인에서 브랜치 예측들을 관리하는 방법.
  4. 제2항에 있어서,
    올바른 브랜치 예측들을 검출하는 단계; 및
    상기 올바른 브랜치 예측에 의존하는 것으로 마킹된 상기 명령 파이프라인의 명령들로부터 상기 대응하는 비트 표시자를 소거하기 위해 상기 올바른 브랜치 예측에 대응하는 비트 표시자에 기초하여 소거 신호를 브로드캐스트하는 단계를 더 포함하는, 명령 파이프라인에서 브랜치 예측들을 관리하는 방법.
  5. 삭제
  6. 제1항에 있어서,
    명령 파이프라인의 브랜치 경로 태그들이 상기 특정 조건 브랜치 명령의 상기 브랜치 플러쉬 태그로 마킹된 상기 명령 파이프라인의 적어도 하나의 스테이지의 모든 명령들을 플러쉬하는 단계는,
    올바른 브랜치 예측들 및 올바르지 않은 브랜치 예측들을 검출하기 위해 상기 명령 파이프라인의 실행 스테이지에서 브랜치 조건들을 분석하는 단계를 더 포함하는, 명령 파이프라인에서 브랜치 예측들을 관리하는 방법.
  7. 제6항에 있어서,
    예측된 조건 브랜치 명령의 올바른 브랜치 예측의 검출에 응답하여, 상기 예측된 조건 브랜치 명령의 상기 브랜치 플러쉬 태그에 기초하여 상기 명령 파이프라인의 적어도 하나의 스테이지에서 소거 신호를 브로드캐스트하는 단계; 및
    상기 예측된 조건 브랜치 명령의 상기 브랜치 플러쉬 태그에 대응하는 상기 명령 파이프라인의 적어도 하나의 스테이지에서 명령들의 상기 브랜치 경로 태그들로부터 임의의 표시자를 소거하는 단계를 더 포함하는, 명령 파이프라인에서 브랜치 예측들을 관리하는 방법.
  8. 제7항에 있어서,
    브랜치 플러쉬 태그들을 재사용하는 단계를 더 포함하며,
    상기 브랜치 플러쉬 태그들에 대해, 플러쉬 또는 소거 신호들이 진행하는 명령 패치 동작들과 관련하여 새로운 브랜치 예측 의존성을 마킹하기 위해 브로드캐스트되는, 명령 파이프라인에서 브랜치 예측들을 관리하는 방법.
  9. 제1항에 있어서,
    관련된 조건 브랜치 명령의 브랜치 조건을 분석한 후, 또는 소정의 조건 브랜치 명령을 플러쉬한 후, 상기 소정의 조건 브랜치 명령에 할당된 상기 브랜치 플러쉬 태그를 회수하는 단계; 및
    새로운 브랜치 예측 의존성들을 마킹하기 위해 회수된 브랜치 플러쉬 태그들을 재사용하는 단계를 더 포함하는, 명령 파이프라인에서 브랜치 예측들을 관리하는 방법.
  10. 플러쉬 제어 회로를 포함하는 명령 파이프라인을 포함하는 프로세서로서,
    상기 플러쉬 제어 회로는,
    명령들의 브랜치 예측 의존성들을 나타내기 위해 상기 명령 파이프라인으로 패치된 명령들을 마킹하고,
    ―상기 명령들의 마킹은,
    상기 명령 파이프라인으로 패치된 각각의 조건 브랜치 명령에 브랜치 플러쉬 태그를 부가하고 ―여기서, 상기 브랜치 플러쉬 태그는 명령을 조건 브랜치 명령으로 식별함 ―, 그리고
    상기 명령 파이프라인으로 패치된 각각의 명령에 대응하는 브랜치 경로 태그를 부가함 ―;
    특정 조건 브랜치 명령의 올바르지 않은 브랜치 예측들을 검출하고;
    상기 특정 조건 브랜치 명령의 브랜치 플러쉬 태그에 기초하여 상기 플러쉬 제어 회로로부터 상기 명령 파이프라인의 적어도 하나의 스테이지로 플러쉬 신호를 브로드캐스트하고; 그리고
    상기 플러쉬 신호의 수신에 응답하여, 명령 파이프라인의 브랜치 경로 태그들이 상기 특정 조건 브랜치 명령의 상기 브랜치 플러쉬 태그로 마킹된 상기 명령 파이프라인의 적어도 하나의 스테이지의 모든 명령들을 플러쉬하도록 구성되는,
    프로세서.
  11. 제10항에 있어서, 상기 플러쉬 제어 회로는,
    브랜치 예측들의 마킹에 응답하여 하나 이상의 비트 표시자들을 활성화시키고;
    상기 특정 브랜치 예측이 분석될 때까지 특정 브랜치 예측에 대응하는 특정 비트 표시자를 활성 상태로 유지하고; 그리고
    상기 활성 비트 표시자들의 집합(aggregation)으로 상기 명령 파이프라인으로 패치된 각각의 명령을 마킹함으로써, 명령들을 마킹하도록 구성되는, 프로세서.
  12. 제10항에 있어서, 상기 플러쉬 제어 회로는,
    비트 표시자로 마킹된 상기 명령 파이프라인의 적어도 하나의 스테이지의 명령들을 플러쉬하기 위해, 상기 올바르지 않은 브랜치 예측에 대응하는 비트 표시자에 기초하여 상기 플러쉬 신호를 브로드캐스팅함으로써, 명령 파이프라인의 브랜치 경로 태그들이 상기 특정 조건 브랜치 명령의 상기 브랜치 플러쉬 태그로 마킹된 상기 명령 파이프라인의 적어도 하나의 스테이지의 모든 명령들을 플러쉬하도록 구성되는, 프로세서.
  13. 제10항에 있어서,
    상기 명령 파이프라인의 하나 이상의 스테이지들은 상기 플러쉬 신호를 수신하도록 구성되는 명령 플러쉬 회로를 포함하며, 상기 플러쉬 신호에 의해 전달되는 하나 이상의 비트 표시자들로 마킹되는 상기 명령 파이프라인의 적어도 하나의 스테이지의 명령들을 플러쉬하도록 추가로 구성되는, 프로세서.
  14. 제11항에 있어서, 상기 플러쉬 제어 회로는,
    올바른 브랜치 예측에 의존하는 것으로 마킹된 상기 명령 파이프라인의 상기 적어도 하나의 스테이지의 명령들로부터 대응하는 비트 표시자를 소거하기 위해 상기 올바른 브랜치 예측에 대응하는 상기 비트 표시자에 기초하여 소거 신호를 브로드캐스트하도록 구성되는, 프로세서.
  15. 제14항에 있어서,
    상기 명령 파이프라인의 하나 이상의 스테이지들은 상기 소거 신호를 수신하도록 구성되는 명령 플러쉬 회로를 포함하며, 상기 소거 신호에 의해 전달되는 하나 이상의 비트 표시자들에 대응하는 명령 파이프라인의 적어도 하나의 스테이지의 명령들로부터의 마킹들을 소거하도록 추가로 구성되는, 프로세서.
  16. 삭제
  17. 삭제
  18. 제10항에 있어서, 상기 플러쉬 제어 회로는,
    예측된 조건 브랜치 명령의 올바른 브랜치 예측에 응답하여, 상기 예측된 조건 브랜치 명령의 상기 브랜치 플러쉬 태그에 대응하는 상기 명령 파이프라인의 적어도 하나의 스테이지에서 현재 명령들의 상기 브랜치 경로 태그들로부터의 임의의 표시자를 소거하기 위해, 상기 예측된 조건 브랜치 명령의 상기 브랜치 플러쉬 태그에 기초하여 상기 명령 파이프라인의 적어도 하나의 스테이지에서 소거 신호를 브로드캐스트하도록 구성되는, 프로세서.
  19. 제18항에 있어서,
    브로드캐스트 플러쉬 신호 또는 소거 신호에 응답하여, 상기 플러쉬 제어 신호는 진행하는 명령 패치 동작들과 관련한 새로운 브랜치 예측 의존성들을 마킹하기 위해 브랜치 플러쉬 태그들을 재사용하도록 추가로 구성되는, 프로세서.
  20. 제10항에 있어서, 상기 플러쉬 제어 회로는,
    소정의 조건 브랜치 명령의 브랜치 조건이 분석되거나 플러쉬되었음을 검출한 후, 상기 소정의 조건 브랜치 명령에 할당된 특정 브랜치 플러쉬 태그를 회수하고; 그리고,
    새로운 브랜치 예측 의존성을 마킹하기 위해 상기 회수된 브랜치 플러쉬 태그를 재사용하도록 추가로 구성되는, 프로세서.
  21. 제10항에 있어서,
    상기 명령 파이프라인은 고장 프로그램 실행을 지원하는 수퍼스칼라 명령 파이프라인을 포함하며, 상기 플러쉬 제어 회로는 상기 수퍼스칼라 파이프라인을 포함하는 다수의 병렬 실행 스테이지들 사이에서 마킹, 검출, 및 플러쉬를 지원하는, 프로세서.
  22. 명령 파이프라인에서 브랜치 예측들을 관리하는 방법으로서,
    미결정된 브랜치 조건들을 갖는 상기 명령 파이프라인의 브랜치 명령들에 대해 활성 브랜치 플러쉬 태그들을 유지하는 단계 ―여기서, 각각의 활성 브랜치 플러쉬 태그는 명령을 조건 브랜치 명령으로서 식별하며, 각각의 조건 브랜치 명령은 활성 브랜치 플러쉬 태그로 마킹됨―;
    브랜치 경로 태그로 상기 파이프라인으로 패치된 각각의 명령을 마킹하는 단계 ―여기서, 상기 브랜치 경로 태그는 상기 활성 브랜치 플러쉬 태그들에 대응하는 하나 이상의 표시자들을 포함함―;
    잘못 예측된 브랜치 명령의 관련된 브랜치 조건을 결정함으로써 상기 잘못 예측된 브랜치 명령을 검출하는 단계;
    상기 잘못 예측된 브랜치 명령의 상기 검출에 대응하는 상기 명령 파이프라인의 적어도 하나의 스테이지로 플러쉬 신호를 브로드캐스트하는 단계; 및
    상기 플러쉬 신호의 수신에 응답하여, 상기 잘못 예측된 브랜치 명령의 상기 활성 브랜치 플러쉬 태그에 대응하는 표시자를 포함하는 브랜치 경로 태그들을 갖는 상기 명령 파이프라인의 상기 적어도 하나의 스테이지의 모든 명령들을 플러쉬하는 단계를 포함하는,
    명령 파이프라인에서 브랜치 예측들을 관리하는 방법.
  23. 제1항에 있어서,
    상기 플러쉬된 명령들을 대체하기 위해 비동작(NOP) 명령들을 상기 명령 파이프라인의 상기 적어도 하나의 스테이지로 삽입하는 단계를 더 포함하는, 명령 파이프라인에서 브랜치 예측들을 관리하는 방법.
KR1020087000601A 2005-06-10 2006-06-02 마이크로프로세서의 명령 파이프라인에서 명령 플러쉬를 관리하는 방법 및 장치 KR100974769B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/149,773 2005-06-10
US11/149,773 US7949861B2 (en) 2005-06-10 2005-06-10 Method and apparatus for managing instruction flushing in a microprocessor's instruction pipeline

Publications (2)

Publication Number Publication Date
KR20080015508A KR20080015508A (ko) 2008-02-19
KR100974769B1 true KR100974769B1 (ko) 2010-08-06

Family

ID=37525525

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020087000601A KR100974769B1 (ko) 2005-06-10 2006-06-02 마이크로프로세서의 명령 파이프라인에서 명령 플러쉬를 관리하는 방법 및 장치

Country Status (8)

Country Link
US (1) US7949861B2 (ko)
EP (1) EP1894092A4 (ko)
JP (1) JP2008544353A (ko)
KR (1) KR100974769B1 (ko)
CN (1) CN101228507A (ko)
BR (1) BRPI0611643A2 (ko)
IL (1) IL187865A0 (ko)
WO (1) WO2006135590A2 (ko)

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7617387B2 (en) * 2006-09-27 2009-11-10 Qualcomm Incorporated Methods and system for resolving simultaneous predicted branch instructions
GB2448118B (en) 2007-04-03 2011-08-24 Advanced Risc Mach Ltd Error recovery following erroneous execution with an instruction processing pipeline
US8990543B2 (en) * 2008-03-11 2015-03-24 Qualcomm Incorporated System and method for generating and using predicates within a single instruction packet
US8886920B2 (en) 2011-05-13 2014-11-11 Oracle International Corporation Associating tag to branch instruction to access array storing predicted target addresses for page crossing targets for comparison with resolved address at execution stage
US8862861B2 (en) 2011-05-13 2014-10-14 Oracle International Corporation Suppressing branch prediction information update by branch instructions in incorrect speculative execution path
CN102360282A (zh) * 2011-09-26 2012-02-22 杭州中天微系统有限公司 快速处置分支指令预测错误的流水线处理器装置
GB2529180B (en) * 2014-08-12 2021-07-14 Advanced Risc Mach Ltd Arbitration and hazard detection for a data processing apparatus
JP7041353B2 (ja) * 2018-06-06 2022-03-24 富士通株式会社 演算処理装置及び演算処理装置の制御方法
US11797665B1 (en) * 2018-06-28 2023-10-24 Advanced Micro Devices, Inc. Protection against branch target buffer poisoning by a management layer
CN112559048B (zh) * 2019-09-25 2023-12-12 阿里巴巴集团控股有限公司 一种指令处理装置、处理器及其处理方法
CN111475203B (zh) * 2020-04-03 2023-03-14 小华半导体有限公司 一种用于处理器的指令读取方法以及相应的处理器
US11360773B2 (en) 2020-06-22 2022-06-14 Microsoft Technology Licensing, Llc Reusing fetched, flushed instructions after an instruction pipeline flush in response to a hazard in a processor to reduce instruction re-fetching
US11074077B1 (en) * 2020-06-25 2021-07-27 Microsoft Technology Licensing, Llc Reusing executed, flushed instructions after an instruction pipeline flush in response to a hazard in a processor to reduce instruction re-execution
CN115184218A (zh) * 2022-07-11 2022-10-14 中国石油大学(华东) 一种基于微观渗流模拟和机器学习的粘性指进快速预测方法
CN117785333A (zh) * 2022-09-20 2024-03-29 华为技术有限公司 一种程序执行方法、装置及设备

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050071614A1 (en) * 2003-09-30 2005-03-31 Stephan Jourdan Method and system for multiple branch paths in a microprocessor

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5487156A (en) * 1989-12-15 1996-01-23 Popescu; Valeri Processor architecture having independently fetching issuing and updating operations of instructions which are sequentially assigned and stored in order fetched
US5634103A (en) * 1995-11-09 1997-05-27 International Business Machines Corporation Method and system for minimizing branch misprediction penalties within a processor
US5764970A (en) * 1995-11-20 1998-06-09 International Business Machines Corporation Method and apparatus for supporting speculative branch and link/branch on count instructions
US5809324A (en) * 1995-12-07 1998-09-15 Sun Microsystems, Inc. Multiple instruction dispatch system for pipelined microprocessor without branch breaks
US6098167A (en) * 1997-03-31 2000-08-01 International Business Machines Corporation Apparatus and method for fast unified interrupt recovery and branch recovery in processors supporting out-of-order execution
US5961636A (en) * 1997-09-22 1999-10-05 International Business Machines Corporation Checkpoint table for selective instruction flushing in a speculative execution unit
US6026477A (en) * 1997-12-31 2000-02-15 Intel Corporation Branch recovery mechanism to reduce processor front end stall time by providing path information for both correct and incorrect instructions mixed in the instruction pool
US6289442B1 (en) * 1998-10-05 2001-09-11 Advanced Micro Devices, Inc. Circuit and method for tagging and invalidating speculatively executed instructions
US6446197B1 (en) 1999-10-01 2002-09-03 Hitachi, Ltd. Two modes for executing branch instructions of different lengths and use of branch control instruction and register set loaded with target instructions
US6799263B1 (en) * 1999-10-28 2004-09-28 Hewlett-Packard Development Company, L.P. Prefetch instruction for an unpredicted path including a flush field for indicating whether earlier prefetches are to be discarded and whether in-progress prefetches are to be aborted
US6883090B2 (en) * 2001-05-17 2005-04-19 Broadcom Corporation Method for cancelling conditional delay slot instructions
US7152155B2 (en) 2005-02-18 2006-12-19 Qualcomm Incorporated System and method of correcting a branch misprediction

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050071614A1 (en) * 2003-09-30 2005-03-31 Stephan Jourdan Method and system for multiple branch paths in a microprocessor

Also Published As

Publication number Publication date
BRPI0611643A2 (pt) 2010-09-28
WO2006135590A3 (en) 2007-05-31
CN101228507A (zh) 2008-07-23
JP2008544353A (ja) 2008-12-04
WO2006135590A2 (en) 2006-12-21
US7949861B2 (en) 2011-05-24
EP1894092A2 (en) 2008-03-05
EP1894092A4 (en) 2008-07-23
IL187865A0 (en) 2008-03-20
KR20080015508A (ko) 2008-02-19
US20060282829A1 (en) 2006-12-14

Similar Documents

Publication Publication Date Title
KR100974769B1 (ko) 마이크로프로세서의 명령 파이프라인에서 명령 플러쉬를 관리하는 방법 및 장치
CN108351777B (zh) 用于管理处理系统中的辅助分支预测的方法和系统
CN100498693C (zh) 经由用于条件评估的使者指令的条件指令执行
CN101160561B (zh) 通过循环结束分支来抑制分支历史寄存器的更新
KR101459536B1 (ko) 사전 통지 기법들을 사용하여 프로그램의 순차적 흐름을 변경하기 위한 방법들 및 장치
CN101228506B (zh) 用于预测分支指令的方法和设备
US7471574B2 (en) Branch target buffer and method of use
US6877089B2 (en) Branch prediction apparatus and process for restoring replaced branch history for use in future branch predictions for an executing program
CN100370418C (zh) 用于选择性地禁止猜测性的条件分支指令执行的方法和设备
KR101081674B1 (ko) 워킹 글로벌 히스토리 레지스터를 이용하기 위한 시스템 및 방법
WO2014004272A1 (en) Methods and apparatus to extend software branch target hints
JP2009536770A (ja) ブロックに基づく分岐先アドレスキャッシュ
US10338923B2 (en) Branch prediction path wrong guess instruction
US20140156978A1 (en) Detecting and Filtering Biased Branches in Global Branch History
US8635408B2 (en) Controlling power of a cache based on predicting the instruction cache way for high power applications
US9086888B2 (en) Using a plurality of tables for improving performance in predicting branches in processor instructions
US20060294346A1 (en) Method and apparatus for managing a link return stack
CN110402434B (zh) 缓存未命中线程平衡
US20040255104A1 (en) Method and apparatus for recycling candidate branch outcomes after a wrong-path execution in a superscalar processor
US6871275B1 (en) Microprocessor having a branch predictor using speculative branch registers
EP1296228B1 (en) Instruction Issue and retirement in processor having mismatched pipeline depths
GB2416412A (en) Branch target buffer memory array with an associated word line and gating circuit, the circuit storing a word line gating value
US20130275733A1 (en) Multi-level tracking of in-use state of cache lines
CN114174986A (zh) 用于推测性向量化程序代码的装置和方法

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
LAPS Lapse due to unpaid annual fee