KR100388947B1 - 실행 파이프라인 외부에 복수의 프로그램 카운터 및트레이스 버퍼를 구비한 프로세서 - Google Patents

실행 파이프라인 외부에 복수의 프로그램 카운터 및트레이스 버퍼를 구비한 프로세서 Download PDF

Info

Publication number
KR100388947B1
KR100388947B1 KR10-2000-7006662A KR20007006662A KR100388947B1 KR 100388947 B1 KR100388947 B1 KR 100388947B1 KR 20007006662 A KR20007006662 A KR 20007006662A KR 100388947 B1 KR100388947 B1 KR 100388947B1
Authority
KR
South Korea
Prior art keywords
thread
instructions
instruction
processor
threads
Prior art date
Application number
KR10-2000-7006662A
Other languages
English (en)
Other versions
KR20010033242A (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 KR20010033242A publication Critical patent/KR20010033242A/ko
Application granted granted Critical
Publication of KR100388947B1 publication Critical patent/KR100388947B1/ko

Links

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, 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, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative 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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
    • 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, look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • 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, 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, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • 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, 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, look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • G06F9/3863Recovery, e.g. branch miss-prediction, exception handling using multiple copies of the architectural state, e.g. shadow registers

Abstract

본 발명의 일실시예에서, 프로세서(50)는 스레드(T1-T4)의 적어도 일부를 동시에 실행하기 위한 실행 파이프라인(108)을 포함하고, 여기서, 상기 스레드 중 적어도 하나의 스레드는 상기 스레드 중 적어도 하나의 다른 스레드에 의존한다. 상기 프로세서(50)는 또한, 상기 스레드(T1-T4)의 실행에서의 추론 에러를 검출하기 위한 검출회로를 포함한다. 다른 실시예에서, 프로세서(50)는 프로그램(112A)으로부터의 스레드의 동적인 생성을 제어하기 위한 스레드 관리 로직(124)을 포함한다.

Description

실행 파이프라인 외부에 복수의 프로그램 카운터 및 트레이스 버퍼를 구비한 프로세서{PROCESSOR HAVING MULTIPLE PROGRAM COUNTERS AND TRACE BUFFERS OUTSIDE AN EXECUTION PIPELINE}
마이크로프로세서와 같은 현재의 수퍼스칼라 프로세서는 성능을 향상시키기 위해 분기 예측(branch prediction) 및 비순서적 실행(out-of-order execution)과 같은 기술을 수행한다. 비순서적 실행 파이프라인을 구비한 프로세서는 명령어들이 페치되거나(fetched) 디코드된 순서와 다른 순서로 명령어들을 실행한다. 명령어들은 의존도(dependency)가 없는 명령어들에 대해서는 비순서적으로(순서를 벗어나) 실행될 수 있다. 비순서적 실행은 실행 유닛들이 단지 프로그램 명령어 순서로 인해 유휴상태(idle) 되는 것을 방지함으로써 프로세서 성능을 증가시킨다.
데이터 의존도를 처리하는 태스크는 명령어 디코드가 순서적으로 이루어지는 것을 제한함으로써 간략화될 수 있다. 그러면, 프로세서는 하나의 명령어로부터 그후속 명령어까지 레지스터를 통한 데이터 흐름이 어떻게 이루어지는지 식별할 수 있게 된다. 프로그램의 정확성을 보장하기 위해, 레지스터는 리네임되고(renamed), 명령어들은 실행을 위해 적절한 기능 유닛으로 발생되는 그 입력 오퍼랜드(operands)가 생성될 때까지 예약(reservation) 스테이션에서 대기하게 된다. 레지스터 리네이머(renamer), 예약 스테이션 및 관련 메카니즘은 의존도를 가진 명령어들을 함께 링크시켜, 종속(dependent) 명령어가 그것이 의존하는 명령어 보다 먼저 실행되지 않도록 한다. 따라서, 이러한 프로세서는 순서적 페치 및 디코드에 의해 제한된다.
명령어 캐시로부터의 명령어가 누락(miss)되거나 또는 분기가 잘못 예측(mispredict)되면, 프로세서는 명령어 블록이 상위 레벨 캐시 또는 메모리로부터 페치될 때까지 또는 잘못 예측된 분기가 해결될 때까지 대기해야 하며, 잘못된 경로의 실행은 리셋된다. 이러한 동작의 결과는, 비록 그렇게 하는 것이 올바른 것일 수 있음에도 불구하고 명령어 캐시가 누락시킨 전후의 종속 명령어들과 잘못 예측된 분기가 병렬로 실행될 수 없다는 것이다.
공유 자원 멀티스레딩(multithreading) 프로세서 및 온-칩 멀티프로세서(MP) 프로세서와 같은 멀티스레딩 프로세서는 복수의 스레드를 동시에 처리 및 실행하는 능력을 갖고 있다. 이들 프로세서가 처리 및 실행하는 스레드는 서로 독립적이다. 예를 들어, 스레드가 완전히 독립적인 프로그램으로부터 오거나 또는 동일한 프로그램으로부터 오지만, 스레드들 사이에 의존도 없이 스레드를 생성하도록 특수하게 컴파일된다. 그러나, 이들 프로세서는 의존도를 가질 수도 있는 동일한 프로그램으로부터의 상이한 스레드들을 동시에 실행할 수 있는 능력을 갖고 있지 않다. 따라서, 멀티스레딩 프로세서의 유용성이 제한된다.
그로므로, 스레드들 사이에 의존도가 존재할 수도 있는 동일한 프로그램으로부터의 상이한 스레드들을 동시에 실행할 수 있는 능력을 가진 멀티스레딩 프로세서가 요구된다.
본 발명은 프로세서에 관한 것으로서, 특히 종속되는 스레드를 동시에 처리하는 프로세서에 관한 것이다.
본 발명은 본 발명의 실시예에 관한 다음의 상세한 설명 및 첨부 도면으로부터 보다 완전하게 이해될 것이다. 그러나, 본 발명은 설명되는 특정 실시예에 제한되지 않으며, 이들 특정 실시예는 단지 예시 및 이해를 위한 것이다.
도1은 프로세서의 일실시예의 일부 구성요소의 고레벨 블록도.
도2는 본 발명의 일실시예에 따른 프로세서의 블록도.
도3은 본 발명의 다른 실시예에 따른 프로세서의 블록도.
도4는 2개의 스레드의 예를 도시한 흐름도.
도5는 2개의 스레드의 다른 예를 도시한 흐름도.
도6은 4개의 스레드의 예를 도시한 흐름도.
도7은 도6의 스레드의 중복 실행을 도시한 그래프.
도8은 본 발명의 일실시예에 따른 개개의 트레이스 버퍼를 예시한 블록도.
도9는 2회에 걸친 프로그램 및 회수 순서를 나타내는 어레이를 도시한 도면.
도10은 도8의 트레이스 버퍼의 일실시예의 소정의 구성요소를 도시한 블록도.
도11은 도8의 트레이스 버퍼의 다른 실시예의 소정의 구성요소를 도시한 블록도.
도12는 도10의 트레이스 버퍼의 명령어 큐 어레이의 일실시예 일부를 도시한 그래프.
도13은 도10의 트레이스 버퍼의 데이터 및 의존도 어레이의 일실시예의 일부를 도시한 그래프.
도14는 도10의 어레이의 의존도 필드를 생성하는데 사용되는 수정자 레지스터 및 수정된 레지스터의 일실시예를 도시한 도면.
도15는 도13의 어레이의 의존도 필드를 생성하는데 사용되는 논리 OR 게이트를 도시한 도면.
도16은 도13의 어레이의 의존도 필드를 생성하는데 사용되는 연산의 일실시예를 도시한 흐름도.
도17은 본 발명의 일실시예에 따라 의존도를 가진 트레이스 버퍼 내의 특정 레지스터 및 위치를 도시한 그래프.
도18은 도10의 트레이스 버퍼의 출력 레지스터 파일의 일실시예의 일부를 도시한 그래프.
도19는 도10의 트레이스 버퍼의 입력 레지스터 파일의 일실시예의 일부를 도시한 그래프.
도20은 본 발명의 일실시예에 따라 도18의 출력 레지스터 파일 및 도19의 입력 레지스터 파일과 함께 사용되는 비교기 및 리플레이 트리거링 로직의 블록도.
도21은 출력 레지스터 파일의 내용이 이용될 수 있는 포인트를 도시한 흐름도.
도22는 본 발명의 일실시예에 따라 도2의 메모리 MOB(memory order buffer) 내의 개개의 MOB를 도시한 블록도.
도23은 도22의 MOB 중 하나의 저장 버퍼의 일실시예의 일부를 도시한 그래프.
도24는 도22의 MOB 중 하나의 적재 버퍼의 일실시예의 일부를 도시한 그래프.
도25는 적재 및 저장 명령어의 어드레스를 비교하는 비교기를 도시한 도면.
도26은 저장 및 적재 명령어의 어드레스를 비교하는 비교기를 도시한 도면.
도27은 본 발명의 일실시예에 따른 MOB 제어 회로 및 저장 버퍼의 블록도.
도28은 본 발명의 일실시예에 따른 MOB 제어 회로 및 적재 버퍼의 블록도.
도29는 6개의 스레드의 예를 도시한 흐름도.
도30은 시간 t1에서의 도29의 스레드의 관계를 도시한 트리구조도.
도31은 스레드 T1이 회수되기 전에 스레드 T4가 리셋되는 것을 가정한 시간 t2에서의 도29의 스레드의 관계를 도시한 트리구조도.
도32는 스레드 T4가 리셋되기 전에 스레드 T1이 회수되는 것을 가정한 시간 t2에서의 도29의 스레드의 관계를 도시한 트리구조도.
도33은 시간 t3에서의 도29의 스레드의 관계를 도시한 트리구조도.
도34는 5개의 스레드의 예를 도시한 흐름도.
도35는 시간 t1에서의 도34의 스레드의 관계를 도시한 트리구조도.
도36은 시간 t2에서의 도34의 스레드의 관계를 도시한 트리구조도.
도37은 도2의 일실시예의 대안의 실시예에 따른 프로세서의 블록도.
도38은 도2의 프로세서를 포함하는 컴퓨터 시스템을 도시한 도면.
발명의 요약
본 발명의 일실시예에서, 프로세서는 스레드의 적어도 일부를 동시에 실행하기 위한 실행 파이프라인을 포함하고, 여기서, 상기 스레드 중 적어도 하나의 스레드는 상기 스레드 중 적어도 하나의 다른 스레드에 의존한다. 상기 프로세서는 또한, 상기 스레드의 실행에서의 추론 에러를 검출하기 위한 검출회로를 포함한다.
다른 실시예에서, 프로세서는 프로그램으로부터의 스레드의 동적인 생성을 제어하기 위한 스레드 관리 로직을 포함한다.
A. 스레드의 생성 및 파이프라인(108)의 개요
B. 트레이스 버퍼(114)에 관한 세부사항
1. 트레이스 버퍼(114A)
a. 명령어 큐 어레이(202A)
b. DAD 어레이(206A) 및 의존도 생성 회로(212A)
c. 출력 레지스터 파일(210A) 및 입력 레지스터 파일(208A)
2. 트레이스 버퍼(114')
C. 리플레이 시퀀스 알고리즘
D. 최종 회수의 제2 레벨
E. 메모리 시스템
1. 저장 버퍼 및 적재 버퍼
2. 적재 및 저장 어드레스의 비교
a. 적재 명령어의 실행
b. 저장 명령어의 실행
c. 리셋
3. 저장 명령어의 리플레이
4. 복수의 적재 명령어의 리플레이
5. 적재 및 저장 명령어의 최종 회수
F. 스레드 관리 로직 및 최종 회수 로직에 관한 추가 정보
G. 멀티스레딩이 없는 일시예
H. 추가 정보 및 실시예
도1은 프로세서의 소정의 구성요소(10)를 도시하고 있다. 프로세서(10)는 실행 파이프라인(execution pipeline)(12)과 트레이스 버퍼(trace buffer)(14)를 포함하고 있으며, 이 트레이스 버퍼는 실행 파이프라인 외부에 존재한다. 실행 파이프라인(12)은 메모리 순서 버퍼(memory order buffer)를 포함할 수 있다. 도선(18) 상의 명령어는 실행을 위해 실행 파이프라인(12)으로 제공된다. 이들 명령어는 또한 도선(22)을 통해 트레이스 버퍼(14)에도 제공된다. 명령어들은 실행 파이프라인(12)에서 추론적으로(speculatively) 실행될 수 있다. 추론(speculation)의 예로는 데이터 추론과 의존도 추론이 있다. 매우 다양한 추론이 포함될 수 있다. 프로세서(10)는 추론 에러(잘못된 추론)를 검출하고 그것으로부터 복구하기 위해 트레이스 버퍼(14)에 포함된 메카니즘을 포함한다.
잘못된 추론이 검출되면, 그 잘못 추론된 명령어는 트레이스 버퍼(14)로부터 도선(24)을 통해 실행 파이프라인(12)으로 제공되어, 실행 파이프라인(12)에서 리플레이(replayed)된다. 만일 명령어가 리플레이되면, 그 명령어 및 그 명령어에 의존하는 모든 명령어들은 재실행되는데, 이들 명령어가 반드시 동시에 실행될 필요는 없다. 만일 명령어가 전부 리플레이되면, 그 명령어 및 프로그램 순서로 그 명령어 다음에 오는 모든 명령어들이 재실행된다. 프로그램 순서는 명령어들이 프로세서에서 순서적으로 실행되게 되는 순서를 말한다. 명령어들은 프로그램 순서로 또는 프로그램 순서와 다른 순서로 도선(18)을 통해 전부 통과될 수 있다. 프로세서(10)는 순서적(in order) 프로세서 또는 비순서적(out of order) 프로세서가 될 수 있다. 종속 명령어의 재실행은 리플레이되는 종속 명령어에 의존하는 명령어를 초래할 수 있다. 명령어들의 재실행의 횟수는 리플레이를 트리거시키는 이벤트를 제어함으로써 제어될 수 있다. 일반적으로, "실행"이란 용어는 최초의 실행 및 재실행을 포함할 수 있다. 명령어의 적어도 일부의 결과는 도선(26)을 통해 트레이스 버퍼로 제공된다. 최종 회수(retirement) 로직(34)은 명령어들이 최초 실행 또는 재실행에서 올바르게 실행되었다는 것이 보장된 이후에 트레이스 버퍼(14)에서 그 명령어들을 최종적으로 회수한다.
실행 파이프라인(12)은 매우 다양한 실행 파이프라인 중 어느 것이 될 수 있으며, 대형 파이프라인의 한 섹션이 될 수도 있다. 실행 파이프라인(12)은 매우 다양한 프로세서와 함께 사용될 수 있다. 도2에는 실행 파이프라인(108)을 구비한 프로세서(50)의 구성요소가 도시되어 있고, 도3에는 실행 파이프라인(308)을 구비한 프로세서(100)가 도시되어 있다. 도2의 본 발명의 실시예에서, 실행 파이프라인(108)은 레지스터 리네이밍(renaming)을 포함한다. 다른 실시예에서는 실행 파이프라인이 레지스터 리네이밍을 포함하지 않는다. 프로세서는 (도2의 프로세서(50)의 경우와 같이) 복수의 스레드를 동시에 처리하거나 또는 (도3의 프로세서(100)의 경우와 같이) 복수의 스레드를 동시에 처리하지 않을 수도 있다. 프로세서(50)에 대해 먼저 설명한다.
명세서에서 일실시예에 대한 참조는 그 실시예와 관련하여 설명되는 특정 기능, 구조 또는 특성이 본 발명의 적어도 하나의 실시예에 포함된다는 것을 의미한다. 명세서의 다양한 위치에서 용어 "일실시예"의 출현이 모두 반드시 그 동일한 실시예를 참조하는 것은 아니다.
A. 스레드의 생성 및 파이프라인(108)의 개요
명령어들은 도선(102)을 통해 명령어 캐시(I-캐시)(104)로 제공된다. 디코더(106)는 I-캐시(104)로부터 명령어를 수신하는 것으로 도시되어 있지만, 이와 달리 이들 명령어를 I-캐시(104)에 도달하기 전에 디코드할 수도 있다. 문맥 및 선택되는 구현예에 따라, 용어 "명령어"는 매크로 연산(macro-op), 마이크로 연산(uops), 또는 다른 형태의 명령어를 포함할 수 있다. 축소 명령어 집합 컴퓨팅(RISC) 또는 복합 명령어 집합 컴퓨팅(CISC) 명령어를 포함하는 다양한 명령어 집합이 사용될 수 있으며, 이들에 제한되는 것은 아니다. 또한, 디코더(106)는 CISC 명령어를 RISC 명령어로 디코드할 수 있다. I-캐시(104)로부터의 명령어는 MUX(110)를 통해 파이프라인(108)으로 제공되고 도선(118)을 통해 트레이스 버퍼(114)로 제공된다.
트레이스는 명령어들의 집합이다. 스레드(thread)는 레지스터 값 및 프로그램 카운터 값과 같은 트레이스 및 관련 신호를 포함한다.
스레드 관리 로직(124)은 도선(130)을 통해 프로그램 카운터(112A, 112B,...,112X)(여기서, X는 프로그램 카운터의 수를 나타냄)로 시작 카운트를 제공함으로써 I-캐시(104) 내의 프로그램 또는 프로세스로부터 상이한 스레드를 생성한다. 예를 들어, X는 4가 될 수 있으며, 또는 그 보다 작거나 클 수 있다. 스레드 관리 로직(124)은 관련 프로그램 카운터를 정지시킴으로써 스레드를 종료시킨다. 스레드 관리 로직(124)은 프로그램 카운터로 하여금 다른 스레드를 시작하도록 할 수 있다. 상이한 스레드의 일부는 I-캐시(104)로부터 동시에 판독된다.
프로그램 또는 프로세스에서 스레드를 생성하기 위한 위치를 판단하기 위해, 스레드 관리 로직(124)은 도선(128)을 통해 디코더(106)로부터 명령어를 판독할 수 있다. 이들 스레드는 스레드의 시작과 종료를 명확하게 구별하는, 프로그래머 또는 컴파일러에 의해 삽입된 명령어를 포함할 수 있다. 대안으로, 스레드 관리 로직(124)은 I-캐시(104)로 제공되는 프로그램 또는 프로세스를 상이한 스레드로 분해하기(break up) 위해 프로그램 또는 프로세스의 명령어들을 분석할 수 있다. 예를 들어, 분기, 루프, 역방향 분기, 리턴, 점프, 절차 호출(procedure calls) 및 함수 호출(function calls) 등이 스레드를 분리하기 위한 양호한 포인트가 될 수 있다. 스레드 관리 로직(124)은 가능성 있는 스레드의 길이, 얼마나 많은 변수가 포함되는지, 연속하는 스레드 사이의 공통적인 변수의 수, 및 스레드를 시작하기 위한 위치를 고려하는데 있어서의 다른 요소를 고려할 수 있다. 스레드 관리 로직(124)은 스레드의 경계를 판단하는데 있어서 프로그램 순서를 고려할 수 있다. 프로그램 순서는 스레드 및 그 스레드 내의 명령어들이 순서적 프로세서에서 실행되게 되는 순서이다. 스레드 내의 명령어들은 (프로그램 순서와 달리) 비순서적으로 실행될 수 있다. 스레드는 파이프라인(108)에 의해 근본적으로 독립적으로 처리될 수 있다. 스레드 관리 로직(124)은 최적의 선택보다 못한 선택을 피하기 위해 히스토리 테이블(history table)을 포함하는 예측 메카니즘(prediction mechanism)을 포함할 수 있다. 예를 들어, 스레드 관리 로직(124)은 스레드를 생성하고, 다음에 그 스레드가 실제로 프로그램 순서의 일부분이 아니었다는 것을 판단할 수 있다. 이 경우에, 다시 동일한 코드를 만나게 되면, 그 동일한 스레드를 다시 생성할것인지 여부를 판단하기 위해 예측 메카니즘이 사용될 수 있다. 스레드 관리 로직(124)은 명령어에서 스레드를 생성하기 위한 위치를 판단하기 위해 컴파일러 또는 프로그래머로부터의 명확한 명령어 힌트를 이용하고 스레드의 동적 생성의 조합을 이용할 수 있다.
스레드의 동적 생성은 특히 멀티스레딩(multithreading)을 위해 기록되거나 컴파일되지 않은 프로그램으로부터 스레드를 생성하며, 여기서 스레드 중 적어도 하나는 다른 스레드에 의존한다. 프로그램은 실행 파이프라인(108) 및 스레드 관리 로직(124)을 포함하는 칩으로부터 기원할 수 있다. 스레드의 동적 생성, 스레드의 실행, 및 실행에서의 추론 에러의 정정은 동적 멀티스레딩으로 불린다.
도4는 조건부 역방향 분기 명령어(conditional backward branch instruction)를 포함하는 스레드 T1을 도시하고 있다. 프로그램 순서로, 스레드 T2는 조건부 분기 명령어 다음에 실행된다. 시간 순서로, 스레드 T2는 스레드 T1이 최초에 조건부 분기 명령어에 도달할 때 시작하여 추론적으로 실행된다. 그러므로, 스레드 T1과 T2의 일부분은 동시에 실행된다. 만일 스레드 T2가 잘못된 추론을 수반하면, 스레드 T2의 실행된 명령어들이 리플레이된다.
스레드 관리 로직(124)은 도선(130)을 통해 프로그램 카운터의 카운트를 모니터할 수 있다. 이러한 카운트를 모니터하는 목적은 스레드가 종료되어야 하는 때를 판단하기 위한 것이다. 예를 들어, 조건부 분기의 조건이 정합되지 않을 때, 만일 스레드 T1의 프로그램 카운터가 계속되도록 허용되면, 이것은 스레드 T2의 제1 명령어에 앞서게 된다. 그러므로, 스레드 관리 로직(124)은 조건이 정합되지 않을때 스레드 T1의 프로그램 카운터를 정지시킨다.
도5는 함수 호출 명령어를 포함하는 스레드 T1을 도시하고 있다. 프로그램 순서로, 호출 명령어에 도달하면, 프로그램 카운터는 리턴 명령어까지 그 함수 및 실행 위치로 점프하게 되며, 이 리턴 명령어에서 프로그램 카운터는 호출 이후에 그 명령어로 되돌아오게 된다. 프로그램 순서로, 스레드 T2는 리턴 명령어 다음에 오는 명령어에서 시작된다. 시간 순서로, 스레드 T2는 스레드 T1이 최초로 호출에 도달할 때 시작하여 추론적으로 실행된다. 만일 스레드 T2가 잘못된 추론을 포함하면, 스레드 T1의 실행된 명령어들이 리플레이된다. 스레드 T1은 그 프로그램 카운터가 스레드 T2의 제1 명령어에 도달할 때 종료된다. 도5의 적재(Load) MX 명령어 및 저장(Store) MX 명령어에 대해서는 후술하게 된다.
도6은 프로그램의 한 섹션의 일부인 스레드 T1,T2,T3,T4를 도시하고 있다. 상이한 프로그램 카운터들이 이들 스레드 T1,T2,T3,T4를 생성한다. 스레드 T1은 포인트 A로 가는 명령어(함수 호출 명령어)를 포함하는데, 다음에 이 명령어는 포인트 B로부터, 포인트 C(조건부 역방향 분기 명령어)로, 포인트 D로, 그리고 다시 포인트 C로 가게 된다(루프가 여러 번 반복될 수 있다). 스레드 T2는 프로그램 순서로 포인트 A에서 호출된 함수의 리턴 명령어 바로 다음에 오는 명령어에서 시작된다. 스레드 T3는 프로그램 순서로 포인트 C의 조건부 역방향 분기 바로 다음에 오는 명령어에서 시작되어, 포인트 E, 포인트 F, 포인트 G, 포인트 I로 계속되며, 이 포인트 I는 스레드 T2가 시작되는 포인트 A 바로 다음에 오는 명령어에 대한 리턴 명령어이다. 스레드 T4는 프로그램 순서로 포인트 E에서 조건부 역방향 분기 바로다음에 오는 명령어에서 시작된다.
도7에 도시된 바와 같이, 스레드 T1,T2,T3,T4의 일부분들은 동시에 페치, 디코드 및 실행된다. 프로그램 순서를 따라가지 않기 때문에, 이들 스레드는 비순서적으로 페치, 디코드 및 실행된다. 시간 순서로, 스레드 T2,T3,T4의 실행은 각각 포인트 A,C,E에서 바로 다음에 오는 명령어에서 시작된다. 수직 점선은 패런트 차일드 관계(parent child relationship)를 나타내고 있다. 스레드 T2,T3,T4는 데이터가 정확하다고 확신하기 전에 레지스터 및/또는 메모리 위치에 있는 데이터에 의존함으로써 추론적으로 실행된다. 프로세서(100)는 잘못된 추론을 검출하고 그 잘못 추론된 명령어가 리플레이 되도록 하기 위한 메카니즘을 포함하고 있다. 결국 스레드 T4는 프로그램 순서의 일부가 아닌 것으로 드러나게 된다. 이 스레드 T4는 스레드 관리 로직(124)이 스레드 T4가 프로그램 순서의 일부가 아닌 것으로 판단할 때까지 실행될 수 있다. 이때, 스레드 T4는 리셋되고, 프로세서(100)에서 스레드 T4를 홀드하거나 처리한 자원은 할당해제되고, 다른 스레드에 대해 할당된다. 프로그램 순서로, 스레드 T1,T2,T3는 다음과 같이 실행될 수 있다. 즉, 스레드 T1이 먼저 실행되고, 다음에 스레드 T3, 그 다음에 스레드 T2가 실행된다.
도2를 참조하면, MUX(110)로부터의 명령어는 레지스터 파일(152) 내의 리네임된 물리적 레지스터의 물리적 레지스터 식별자(PRID)를 제공하는 리네임/할당 유닛(150)에 의해 수신된다. PRID는 바이패스 도선(126)을 통해 트레이스 버퍼(114)로 제공된다. 할당하는 단계는 명령어에 레지스터를 할당하는 단계와 스케줄/발생(schedule/issue) 유닛(156)의 예약 스테이션의 엔트리를 할당하는 단계를 포함한다. 일단 예약 스테이션에서 특정 명령어에 대한 오퍼랜드가 준비되면, 그 명령어는 실행 유닛(158)의 실행 유닛(예, 정수, 부동소수점) 중 하나로 발생되거나, 또는 어드레스 생성 유닛(AGU)(172), 메모리 순서 버퍼(MOB)(178) 및 데이터 캐시(176)를 포함하는 메모리 실행 파이프라인으로 발생된다. 명령어에 따라, 오퍼랜드는 레지스터 파일(152)로부터 도선(168)을 통해 제공된다. 본 발명의 일실시예에서, 스레드 내의 종속 명령어는 그들이 비순서적으로 실행되지 않도록 링크될 수 있다. 그러나, 상이한 스레드로부터의 종속 명령어들은 비순서적으로 동시에 페치, 디코드 및 실행될 수 있다. 일부 스레드의 실행은 추론적으로 이루어질 수 있다.
고성능을 위해, 예약 스테이션 및 관련 메카니즘은 명령어의 낮은 대기시간 및 높은 대역폭 발생을 모두 이루도록 설계된다. 대기시간 및 대역폭 요건은 예약 스테이션에서 대기할 수 있는 명령어의 수에 제한을 부여한다. 트레이스 버퍼(114)를 파이프라인(108) 외부에 배치함으로써, 파이프라인(108)의 처리량을 뚜렷하게 증가시키지 않고도 매우 많은 수의 명령어가 실행/리플레이를 위해 이용 가능하게 될 수 있다. 실행 파리프라인(108)과 트레이스 버퍼(114) 사이의 대기시간의 영향은 파이프라이닝을 통해 감소될 수 있다.
실행 결과 및 관련 정보는 라이트백(writeback) 유닛(162)으로부터 도선(122)(레지스터의 경우)을 통해 그리고 MUX(192) 및 도선(196)을 통해 트레이스 버퍼(114)로 기록된다. 또한, 실행 결과 및 관련 정보는 레지스터 파일(152) 및 관련 재배열 버퍼(re-order buffer)(ROB)(164)로도 기록될 수 있다. 일단 명령어의 결과 및 정보가 레지스터 파일(152) 및 ROB(164)로 기록되면, 그 명령어는 파이프라인(108)이 관련되어 있는 한 순서적으로 회수된다. 이러한 회수는 제1 레벨 또는 초기 회수로 불린다. 제1 레벨 회수가 이루어질 때 또는 그 전에, 예약 스테이션을 포함하는 스케줄/발생 유닛(156), 레지스터 파일(152) 및 ROB(164)에서 그 회수된 명령어를 위한 자원들은 할당해제된다. 그러나, 후술되는 바와 같이, 그 명령어에 관한 모든 필요한 세부사항은 최종 회수가 이루어질 때까지 트레이스 버퍼(114) 및 MOB(178)에서 유지된다.
프로그램 순서로, 보다 늦은 스레드에서 사용되는 데이터가 보다 빠른 스레드에서 발생될 때, 보다 늦은(later) 스레드와 보다 빠른(earlier) 스레드 사이에 의존도가 존재한다. 이 데이터는 메모리 또는 비메모리 명령어를 통해 보다 빠른 스레드에서 발생되었을 수도 있다. 예를 들어, 보다 늦은 스레드의 적재 명령어가 보다 빠른 스레드의 저장 명령어와 동일한 어드레스를 가지면, 보다 늦은 스레드는 보다 빠른 스레드에 의존할 수 있다. 또한, 보다 늦은 스레드의 명령어가 보다 빠른 스레드에서 수정되었던 레지스터와 관련되어 있으면, 이러한 보다 늦은 스레드는 보다 빠른 스레드에 의존할 수 있다. 마찬가지로, 프로그램 순서로 보다 늦은 스레드가 보다 빠른 스레드에 의해 생성된 데이터를 이용하면, 이러한 보다 늦은 스레드는 보다 빠른 스레드에 의존한다. 용어 "의존도"는 또한 "의존도 추론"이라는 구절에도 사용된다. 의존도 추론의 일례로는, 적재 명령어와 그 보다 빠른 저장 명령어 사이에 의존도가 없는 것으로 추론하는 것이 있다. 어드레스 정합(matching)은 의존도 추론 에러에 대해 검사하기 위한 기술의 일례이다. 데이터 추론의 일례로는, 레지스터 내의 데이터가 정확한 데이터라고 추론하는 것이 있다. 레지스터 정합은 데이터 추론 에러에 대해 검사하기 위한 기술의 일례이다.
B. 트레이스 버퍼(114)에 관한 세부사항
도8을 참조하면, 트레이스 버퍼(114)는 트레이스 버퍼(114A,114B,114C, ... ,114Y)를 포함하고 있으며, 여기서 Y는 트레이스 버퍼의 수를 나타낸다. 예를 들어, 만일 Y=4(즉, Y=D)이면, 4개의 트레이스 버퍼가 있는 것이다. 만일 Y가 3 보다 작으면, 트레이스 버퍼(114)는 도8에 도시된 모든 트레이스 버퍼를 포함하지 않는다. Y는 X(프로그램 카운터의 수)와 동일할 수도 있고 다를 수도 있다. 트레이스 버퍼(114)는 개개의 트레이스 버퍼로 분할된 단일 메모리가 될 수 있으며, 또는 물리적으로 독립된 트레이스 버퍼가 될 수 있고, 또는 이들 두 가지의 조합이 될 수도 있다.
도9를 참조하면, 스레드 관리 로직(124)은 스레드 ID의 프로그램 순서(또한, 회수 순서가 됨)를 명시하는 어레이(198)를 포함하고 있다. 일례에서, 각각의 트레이스 버퍼는 고유의 스레드 ID를 갖고 있거나 또는 스레드 ID에 1:1 매핑 관계를 갖고 있다. 예를 들어, 트레이스 버퍼(114A)에는 스레드 ID 1이 할당되고, 트레이스 버퍼(114B)에는 스레드 ID 2가 할당되는 등으로 이루어진다. 스레드 ID는 고정배선(hardwired)되거나 프로그램될 수 있다. 일실시예에서, 각각의 프로그램 카운터는 특정 스레드 ID 및 트레이스 버퍼와 결합된다(대안으로, 이러한 제한된 관계가 존재하지 않을 수도 있다).
도9는 시간 t1과 시간 t2에서 스레드의 회수 순서의 일례를 도시하고 있다.본 예에서, 단지 4개의 트레이스 버퍼와 4개의 스레드 ID가 존재한다. 관련 스레드 번호는 괄호안에 나타나 있다. 구현예에 따라, 괄호안의 스레드 번호는 실제로는 어레이(198)에 포함되지 않는다. 시간 t1에서, 프로그램 및 회수 순서는 도6에 도시된 바와 같이 스레드 T1,T3,T2,T4가 된다. 시간 t1과 t2 사이에서는, 스레드 T4가 프로그램 순서가 아닌 것으로 판단이 이루어진다. 그러므로, 스레드 T4는 리셋되고, 트레이스 버퍼(114D)에 스레드 T5(도5에 도시되지 않음)를 위한 공간을 마련한다. 스레드 T5는 스레드 ID 4와 결합된다. 스레드 T1은 회수되어, 트레이스 버퍼(114A)에 스레드 T6를 위한 공간을 마련한다. 스레드 T6는 스레드 ID 1과 결합된다. 시간 t2에서, 프로그램 및 회수 순서는 스레드 T3,T2,T5,T6가 된다. (만일 스레드 T1이 스레드 T4가 리셋되기 전에 회수되면, 스레드 T5와 T6는 상이한 스레드 ID를 가졌을 것이지만, 프로그램 및 회수 순서는 변경되지 않게 된다.) 사용된 알고리즘에 따라, 스레드 T2가 어레이(198)에서 스레드 T3 이전의 최초의 것일 수도 있지만, 그러나 프로그램 및 회수 순서는 시간 t1에서의 어레이(198)로서 정정되게 된다.
전술한 바와 같이, 스레드의 프로그램 순서는 스레드들이 순서적 프로세서 상에서 실행되게 되는 순서이다. 명령어의 프로그램 순서는 그 명령어들이 순서적 프로세서 상에서 실행되게 되는 순서이다. 스레드 관리 로직(124)은 반드시 스레드의 진정한 프로그램 순서를 초기에 판단할 필요는 없다. 그러나, 스레드 관리 로직(124)은 결국 진정한 프로그램 순서를 판단하게 된다.
도8을 참조하면, 트레이스 버퍼(114A,114B,...,114Y)는 도선(118)에 접속된도선(118A,118B,...,118Y)를 통해 명령어를 수신한다. 도선(118A,118B,...,118Y)과 도선(118) 사이에는 멀티플렉싱 회로가 존재할 수 있다. 이와 달리, 어떤 트레이스 버퍼가 활성화될 것인지를 인에이블 신호가 제어할 수도 있다. 또한, 대안으로 병렬 트랜잭션을 처리하기 위한 충분한 병렬 도선이 존재할 수도 있다. 트레이스 버퍼(114A,114B,...,114Y)는 리플레이를 위한 명령어 및 관련 정보를 도선(120)에 접속된 도선(120A,120B,...,120Y)을 통해 파이프라인(108)으로 제공한다. 트레이스 버퍼(114)로부터 복수의 명령어들이 실행을 위해 도선(120) 및 MUX(110)을 통해 동시에 통과될 수 있다는 것을 주목하자. 이와 동시에, 디코더(106)로부터의 복수의 명령어들이 첫 번째 시간 동안에 MUX(110)를 통해 통과될 수도 있다. 스레드 ID와 명령어 ID(instr ID)가 파이프라인을 통해 각각의 명령어와 동행한다. 리플레이 카운트도 역시 명령어와 동행할 수 있다. 적재 및 저장 명령어의 경우에, 적재 버퍼 ID(LBID)와 저장 버퍼 ID(SBID)도 역시 명령어와 동행할 수 있다. 일실시예에서, LBID와 SBID는 모든 명령어와 동행하지만, LBID와 SBID 값은 적재 및 저장 명령어가 아닌 명령어의 경우에는 의미가 없을 수도 있다. 후술되는 바와 같이, PRID 또는 값도 역시 재실행되고 있는 명령어와 동행할 수 있다.
트레이스 버퍼(114A,114B,...,114Y)는 도선(126)에 접속된 바이패스 도선(126A,126B,...,126Y)을 통해 리네임/할당 유닛(150)으로부터 PRID, LBID 및 SBID 값을 수신한다. 트레이스 버퍼(114A,114B,...,114Y)는 도선(122)에 접속된 도선(122A,122B,...,122Y)을 통해, 그리고 도선(196)에 접속된 도선(196A,196B,...,196Y)을 통해 라이트백 결과 정보 및 관련 신호를 수신한다.리플레이 신호는 도선(194)에 접속된 도선(194A,194B,...,194Y)을 통해 제공된다. 이들 도선(120,126,122,194,196)에는 멀티플렉싱 및/또는 회로 및/또는 상당한 수의 병렬 도선이 사용될 수 있다. 트레이스 버퍼들은 동일할 수도 있고, 약간 상이할 수도 있다.
도10에서, 트레이스 버퍼(114A)는 트레이스 버퍼의 제1 실시예를 도시한 것이다. 도11에서, 트레이스 버퍼(114A')는 트레이스 버퍼의 제2 실시예를 도시한 것이다. 트레이스 버퍼의 다른 실시예는 트레이스 버퍼(114A,114A')의 변형이나 또는 아주 상이한 구조를 포함할 수 있다.
1. 트레이스 버퍼(114A)
도10을 참조하면, 트레이스 버퍼(114A)는 명령어 큐(queue) 어레이(202A), 데이터 및 의존도(DAD) 어레이(206A), 입력 레지스터 파일(208A), 출력 레지스터 파일(210A), 의존도 생성 회로(212A) 및 제어 회로(224A)를 포함한다. 용어 "어레이"는 특정 형태에 제한되지 않고 복수의 방향으로 정보를 포함하도록 넓은 의미로 의도된 것이다.
a. 명령어 큐 어레이(202A)
이제 도12를 참조하여, 본 발명의 일실시예에 따라 명령어 큐 어레이(202A)의 구조 및 다른 구성요소와의 상호작용에 대해 설명한다. 명령어 큐 어레이(202A)는 특정 스레드의 일부인 I-캐시(104)로부터 페치된 명령어를 수신한다. 스레드 내의 명령어들은 순서적으로 페치되어 명령어 큐 어레이(202A)로 기록된다. 다른 스레드의 일부인 명령어들은 상이한 시간에 상이한 트레이스 버퍼의 명령어 큐로 기록되거나 또는 명령어 큐 어레이(202A)에 의해 기록된다. 명령어 큐 어레이(202A)는 각각의 명령어 식별자(instr ID)를 위한 다양한 정보 필드를 포함한다. 다른 실시예는 약간 다른 필드와 다른 수의 로우(rows)를 포함할 수 있다. 명령어 큐 어레이(202A)의 일실시예에서, 프로그램 카운터 값은 고려되지 않지만, 다른 실시예에서는 고려될 수 있다. 명령어 큐 어레이(202A) 및 도면에 도시된 모든 다른 구성요소들은 다양한 필드, 신호 및 도시되지 않은 구조를 포함할 수 있다. 이러한 필드, 신호 및 구조는 예시되지 않았는데, 그 이유는 이들이 구현예에 따라 변화되고, 이 기술분야에 통상의 지식을 가진 자가 이해할 수 있으며, 명세서를 매우 복잡하게 만들고 본 발명을 모호하게 만들 수 있기 때문이다.
명령어들은 최종적으로 회수되거나 폐기될 때까지 트레이스 버퍼(114A)에서 대기한다(그 이유는 예를 들어, 스레드가 프로그램의 순서적 실행의 일부가 아닌 것으로 판단이 이루어질 수 있기 때문이다). 만일 트레이스 버퍼에 아직 실행되지 않은 명령어들이 존재하는 동안에 명령어 큐 어레이(202A)가 가득 채워지면, 하나의 명령어가 명령어 큐 어레이(202A)로부터 최종적으로 회수되어 하나의 로우가 할당해제될 때까지 명령어들이 트레이스 버퍼(114) 또는 리네임/할당 유닛(150)에 의해 수신되지 않는다. 시스템(100) 내의 다양한 어레이의 엔트리는 헤드 및 테일(tail) 포인터의 이동에 의해 할당되고 할당해제될 수 있다.
이제, 명령어 큐 어레이(202A)는 다음의 코드 라인과 관련하여 설명된다.
I0:mul R1, R2 →R1
I1:mul R3, R4 →R2
I2:add R1, R2 →R1
I3:add 10, R1 →R4
I4:store R2 →Mx
I5:store R1 →My
이들은 스레드 내의 첫 번째 6개의 명령어들이다. 트레이스 버퍼(114A) 이외의 트레이스 버퍼는 트레이스 버퍼(114A) 보다 프로그램 순서로 빠르다는 것을 이해할 것이다.
"오피 코드(Op Code)" 필드는 특정 명령어와 관련된 연산 코드를 포함한다. "목적지(destination)", "소스 1(Source 1)" 및 "소스 2(Source 2)" 필드는 명령어들의 목적지, 소스 1 및 소스 2를 식별한다. "소스 1에 대한 인덱스(Index for Source 1)" 필드는 그 소스를 포함하는 트레이스 버퍼(114A) 내의 명령어 엔트리를 식별한다. 예를 들어, 명령어 ID 0(instr ID 0)의 목적지는 명령어 ID 2(instr ID 2)에 대한 소스 1을 위해 사용된다. 그러므로, 0은 명령어 ID 2의 "소스 1에 대한 인덱스" 필드에 위치된다. 명령어 ID 2의 목적지는 명령어 ID 3에 대한 소스 2를 위해 사용된다. 그러므로, 2는 명령어 ID 3의 "소스 2에 대한 인덱스" 필드에 위치되고, X는 돈 캐어(don't care)를 나타낸다.
"유효 비트 1(Valid 1)" 및 "유효 비트 2(Valid 2)" 필드는 명령어 ID의 대응하는 소스 오퍼랜드가 트레이스 버퍼(114A) 내의 스레드의 외부로부터의 명령어에 의해 이전에 생성되었을 때 제1 값(예, 논리 0)으로 설정되고, 명령어 ID에 대한 소스 오퍼랜드가 스레드 내의 명령어에 의해 이전에 생성되었을 때 제2 값(예,논리 1)으로 설정되는 비트들이다. 명령어 ID 0의 소스 1(R1)은 명령어 큐 어레이(202A)에서 트레이스 버퍼 외부에서 생성된다. 따라서, 명령어 ID 0의 유효 비트 1은 논리 0이 된다. 명령어 ID 3에 대한 소스 2는 명령어 ID 2의 목적지로부터 생성되며, 따라서 명령어 ID 3의 유효 비트 2는 논리 1이다.
명령어 I3는 상수 "10"에 R1을 가산하는 것을 수반한다. 이 상수는 특정 레지스터(도시 안됨)나 소스 1 필드 또는 소정의 다른 메카니즘을 통해 명령어와 함께 저장될 수 있다. 도12에서, X(don't care)는 명령어 ID 3에 대한 소스 1 필드에 도시되어 있다. 이와 달리, 소정의 인디케이터가 소스 1 필드에 위치될 수 있다.
저장 버퍼 ID(SBID) 필드는 후술되는 바와 같이 저장 버퍼 내의 저장 명령어와 관련된 SBID를 홀드한다. 적재 버퍼 ID(LBID) 필드는 후술되는 바와 같이 적재 버퍼 내의 적재 명령어와 관련된 LBID 엔트리를 홀드한다. SBID 및 LBID 값은 리네임/할당 유닛(150)에 의해 할당되며, 바이패스 도선(126)을 통해 명령어 큐 어레이로 기록된다. 명령어 큐 어레이(202A)에 스레드 ID 번호 필드가 포함될 수 있지만, 이것은 암시적인(implicit) 것이기 때문에 필요로 되지 않는다.
b. DAD 어레이(206A) 및 의존도 생성 회로(212A)
도13을 참조하면, DAD 어레이(206A)의 일실시예는 명령어 큐 어레이(202A)의 명령어 ID 엔트리에 1:1 방식으로 대응하는 "명령어 ID 엔트리(로우)"를 포함한다. 실제로, 명령어 큐 어레이(202A)와 DAD 어레이(206A)는 동일한 어레이의 상이한 부분이 될 수 있다. 그러나, 일부 실시예에서는 명령어 큐 어레이(202A) 및 DAD 어레이(206A)와 관련된 서로 다른 판독 포트가 존재한다.
DAD 어레이(206A)는 레지스터 파일(152)에서 명령어 또는 PRID에 의해 생성되는 값을 갖는 "값 또는 PRID" 필드를 포함한다. 이 값은 라이트백 유닛(162)과 라이트백 버스(122,196)를 통해 실행 유닛으로부터 트레이스 버퍼(114A)로 라이트백된다. 2 비트로 이루어질 수 있는 "상태(Status)" 필드는 "값 또는 PRID" 필드가 "값"을 포함하는지 또는 "PRID"를 포함하는지를 나타낸다. 일실시예에서는, "값 또는 PRID" 필드가 유효 "값" 또는 유효 "PRID"를 홀드하지 않는 것도 가능하다. 명령어 디스패치(dispatch)를 고유하게 식별하는 "리플레이 카운트" 필드는 동일한 명령어 ID의 명령어가 파이프라인(108)에서 리플레이될 때마다 증가된다. 일실시예에서는, 명령어가 파이프라인(108) 내에서 1회 이상 동시에 리플레이될 수 있다. 이 경우에, 일실시예에서는 가장 높은 "리플레이 카운트"와 관련된 정보만이 DAD 어레이(206A)로 라이트백된다.
"의존도 필드"는 각각의 논리 레지스터에 대한 비트를 포함한다. 도13에서는 간략성을 위해 단지 4개의 논리 레지스터(R1,R2,R3,R4)만 도시되었다. 그러나, 이 수는 훨씬 더 클 수 있다. 일례에서, 의존도 필드 엔트리는 트레이스 버퍼로의 입력 값과 명령어 엔트리 사이에 데이터 의존도 체인이 존재한다는 것을 나타내기 위해 1로 설정되고, 의존도가 없는 경우에는 0으로 설정된다. 의존도 필드 엔트리는 (값의 잘못된 추론이 검출된 경우와 같이) 입력 값이 수신된 경우에 트레이스 내의 어떤 명령어가 실행될 필요가 있는지를 식별한다.
명령어가 페치되어, 디코드되고 트레이스 버퍼(114A)로 기록될 때, 의존도 비트가 순차적으로 계산되어 DAD 어레이(206A)로 기록된다. 이들 의존도 비트는 명령어를 리플레이할 것인지 여부를 판단하기 전에 생성될 수도 있다. 도13의 의존도 비트는 전술한 바와 같은 6개의 명령어 I0-I5를 위한 것이다.
의존도 필드는 기계적인 접근방법을 통해 생성될 수 있다. 이러한 접근방법을 설명하기 전에, 보다 직관적인 레벨로 생성 단계에 대해 설명한다.
i. 직관적 레벨(Intuitive Level)
명령어 I0의 결과는 레지스터 R1 및 R2에만 의존한다. 그러므로, 명령어 ID 0(명령어 I0에 관련된 정보를 홀드함)의 R1 및 R2 칼럼(columns)에는 1이 위치되고, R3 및 R4 칼럼에는 0이 유지된다.
명령어 I1의 결과는 레지스터 R3 및 R4에만 의존한다. 그러므로, 명령어 ID 1의 R1 및 R2 칼럼(columns)에는 0이 위치되고, R3 및 R4 칼럼에는 1이 위치된다.
명령어 I2의 결과는 각각 명령어 I0 및 I1에서 생성되는 레지스터 R1 및 R2에 직접적으로 의존한다. 명령어 I0에서, R1은 트레이스의 개시점에서 R1 및 R2 값에 의존한다. 명령어 I2에서, R2는 트레이스의 개시점에서 R3 및 R4 값에 의존한다. 그러므로, 명령어 I2는 트레이스의 개시점에서 R1-R4 값에 간접적으로 의존하게 되고, 명령어 ID 2의 R1-R4 칼럼에는 1이 위치된다.
명령어 I3의 결과는 명령어 I2에서 생성되는 레지스터 R1에 직접적으로 의존한다. 그러므로, 명령어 I3는 트레이스의 개시점에서 R1-R4 값에 간접적으로 의존하게 되는데, 그 이유는 명령어 I2가 이들 값에 의존하기 때문이며, 명령어 ID 3의 R1-R4 칼럼에는 1이 위치된다.
명령어 I4의 결과는 명령어 I1에서 생성되는 레지스터 R2에 직접적으로 의존한다. R2는 트레이스의 개시점에서 레지스터 R3 및 R4 값에 의존한다. 그러므로, 명령어 ID 4의 R1 및 R2 칼럼에는 0이 위치되고, R3 및 R4 칼럼에는 1이 위치된다.
명령어 I5의 결과는 명령어 I2에서 생성되는 레지스터 R1에 직접적으로 의존하며, 이 값은 트레이스의 개시점에서 레지스터 R1-R4 값에 의존한다. 그러므로, 명령어 ID 5의 R1-R4 칼럼에는 1이 위치된다.
ii. 기계적 접근방법
다음에는 본 발명의 일실시예에 따라 의존도 필드를 생성하기 위해 사용될 수 있는 레지스터 및 알고리즘에 대해 설명한다. 도14를 참조하면, 의존도 생성 회로(212A)는 각각의 논리 레지스터에 대해 하나씩 임시(temporary) 레지스터(230,232,234,236)와 하나의 추가적인 임시 레지스터(240)를 포함한다. 이들 임시 레지스터(230,232,234,236)는 논리 레지스터(R1,R2,R3,R4)에 대한 수정자(modifier)를 포함한다. 수정된 레지스터(modified register)(240)는 트레이스 내의 명령어에 의해 어떤 논리 레지스터가 수정될 것인지를 나타내는 일련의 비트를 포함한다. 이들 레지스터(230,232,234,236,240)는 트레이스 버퍼로 새로운 명령어가 기록될 때마다 갱신된다. 레지스터 사이의 경계는 약간 임의적이다. 예를 들어, 이들 레지스터가 모두 하나의 조합된 레지스터에 존재할 수 있다.
각각의 논리 레지스터에 대해, 논리 레지스터를 수정하기 위해 트레이스 버퍼(114A) 내의 최종 명령어를 지시하는 트레이스 버퍼 어드레스 레지스터가 제공된다. 수정된 비트들과 최종 수정자 어드레스는 트레이스 버퍼(114A)로 기록될 다음 명령어에 대한 의존도 비트를 계산하기 위해 이용된다.
여기서 사용되는 바와 같이, 레지스터를 수정한다는 것은 단지 그 레지스터로 어떤 값이 기록되는 것을 의미한다는 것을 주목하자. 이것이 반드시 명령어의 결과로서 레지스터의 내용이 달라진다는 것을 의미하는 것은 아니다. 예를 들어, 만일 R1 및 R2의 내용이 (명령어 I0에서와 같이) 곱셈이 이루어지고(multiplied) 그 결과가 레지스터 R1으로 기록되는 경우에, 명령어 I0의 결과로서 R1의 내용이 반드시 달라지는 것은 아니다. 예를 들어, 명령어 이전에 R1의 내용이 "0"이거나 또는 R2가 "1"이면, 명령어 이후의 R1의 내용은 달라지지 않게 된다.
도16에서, 흐름도(250)는 DAD 어레이(206A)의 의존도 필드를 생성하기 위해 명령어의 각각의 소스 오퍼랜드(예, 소스 1 및 소스 2)에 대해 수행되는 알고리즘을 나타낸 것이다. 단계(252)에서는, 레지스터(240)에 관련 비트가 셋트되었는지 여부를 판단한다. 단계(254)에 기재된 바와 같이, 만일 레지스터(240) 내의 비트가 셋트되어 있지 않으면, 그 레지스터와 관련된 의존도 필드의 비트가 논리 1로 셋트된다. 다음에 단계(258)에 기재된 바와 같이, 만일 레지스터(240) 내의 비트가 셋트되어 있으면, 관련 레지스터에 대해 수정자 레지스터(230,232,234 또는 236)로부터 생성된 인덱스를 이용하여 소스 의존도 필드가 판독된다. 다음에는 단계(262)에 기재된 바와 같이, 논리 OR 연산을 이용하여 소스 의존도 비트가 현재 명령어 의존도 비트와 병합된다. 이러한 논리 OR 연산은 도15에 OR-게이트(244)로 예시되어 있다(여기서, 입력에 복수의 비트가 도시되어 있다). 도16의 알고리즘을 수행하는데 있어, 수정된 레지스터 및 수정자는 명령어가 수행되기 바로 전에 존재하는 것들이다.
명령어 I0에 관해서, 이 명령어 I0 이전에 레지스터(240)는 R1,R2,R3 및 R4에 대해 논리 0을 갖고 있으며, 레지스터(230,232,234,236)의 값들은 X(don't care)이다. 단계(252)에서, R1 및 R2에 대해 레지스터(240) 내의 수정된 비트는 각각 0이다. 그러므로, 단계(254)에서, R1 및 R2에 대한 의존도 필드 비트들은 DAD 어레이(206A)의 명령어 ID 0의 로우에서 각각 1로 셋트된다. 레지스터 R3 및 R4는 관련되지 않으며, 명령어 ID 0의 로우에서 0으로 유지된다. 명령어 I0는 레지스터 R1을 수정한다. 그러므로, 레지스터(230)에 0이 위치되고, 이것은 명령어 I0가 레지스터 R1을 수정하기 위한 가장 최근의 명령어라는 것을 나타낸다. 레지스터(232,234,236) 내의 값은 X(don't care)로 유지된다. 레지스터(240)의 R1 비트는 1로 셋트되며, 이것은 R1이 트레이스 내의 명령어에 의해 수정되었다는 것을 나타낸다.
명령어 I1에 대한 의존도 필드도 명령어 I0와 유사한 방식으로 생성된다. 수정된 레지스터(240)의 R1 논리 레지스터 칼럼은 1로 셋트되어 유지된다. 수정된 레지스터(240)의 R2 칼럼에는 논리 1이 위치된다. 레지스터(232) 내의 논리 1은 명령어 I1을 나타낸다.
명령어 I2에 관해서, 이 명령어 I2 이전에 단계(252)에서, R1 및 R2에 대한 레지스터(240) 내의 수정된 비트는 각각 논리 1이다(즉, 셋트됨). 단계(258)에서, 명령어 I2 바로 직전에 R1(230) 및 R2(232)에 대한 수정자 레지스터들이 인덱스로서 사용된다. 레지스터(230)는 명령어 I0에 대해 0을 포함한다. DAD 어레이(206A)의 명령어 ID 0에서 명령어 I0에 대한 의존도 필드는 0011이다. 레지스터(232)는명령어 I1에 대한 1을 포함한다. 명령어 ID 1에서 명령어 I1에 대한 의존도 필드는 1100이다. 단계(262)에서, 0011과 1100의 논리적 OR 연산은 1111이 된다. 그러므로, 명령어 ID 2에 대한 DAD 어레이(206A)의 의존도 필드에는 1111이 위치된다. R1은 명령어 I2에 의해 수정된다. 그러나, 레지스터 R1에 대해 레지스터(240)에는 이미 1이 위치되어 있다. 레지스터(230)에는 2가 위치되며, 이것은 명령어 I2가 레지스터 R1을 수정하기 위한 가장 최근의 명령어라는 것을 나타낸다.
명령어 I3에 대한 의존도 필드도 역시 명령어 I2와 유사한 방식으로 생성된다. 수정된 레지스터(240)의 R4 칼럼에 논리 1이 부가되고, 명령어 I3를 나타내는 3이 레지스터(236)에 위치된다. 논리적 OR 연은 1111을 발생한다.
명령어 I4에 관해서, 이 명령어 I4 이전에 R2에 대한 레지스터(240) 내의 수정된 비트는 1로 셋트된다. 단계(258)에서, 명령어 I4 바로 직전에 R2(232)에 대한 수정자 레지스터가 인덱스로서 사용된다. 이 레지스터(232)는 명령어 I1에 대한 1을 포함하고 있다. DAD 어레이(206A)의 명령어 ID 1에서 명령어 I1에 대한 의존도 필드는 1100이다. 단계(262)에서, 1100(명령어 ID 1로부터의 소스 1)과 0000(소스 2가 존재하지 않음)의 논리적 OR 연산은 1100이 된다. 그러므로, 명령어 ID 4의 로우에 대한 DAD 어레이(206A)의 의존도 필드에는 1100이 위치된다.
명령어 I5에 대한 의존도 필드도 역시 명령어 I4와 유사한 방식으로 생성된다. 명령어 I5 및 I6는 외부 메모리 위치를 수정하며, 레지스터(230,232,234,236 또는 240)에서의 변화를 야기하지 않는다.
의존도 정보는 스케줄/발생 유닛(156)에 의해 이용될 수 있으며, 또는 스케줄/발생 유닛(156)이 단지 그 고유의 의존도 정보를 유도할 수 있다.
명령어 시퀀스 또는 스트링이 리플레이시에 트레이스 버퍼(114A)로부터 발생될 수 있는 상이한 방법이 존재한다. 한가지 방법은 트레이스 버퍼를 순차적으로 판독하고, 의존도 비트가 셋트된 명령어를 추출하고, 그것을 리플레이를 위해 전송하는 것이다. 그러나, 제로(zeros)가 파이프라인에서 버블(bubbles)을 생성하는 효과를 가질 수 있다. 다른 접근방법은 실행/리플레이를 위해 명령어를 전송하기 전에 패킹 로직(packing logic)에 의해 버블이 제거되도록 하는 것이다. 도17을 참조하면, 다른 접근방법은 각각의 논리 레지스터에 대해 어레이(268)를 포함하는 소정의 추가적인 하드웨어를 포함한다. 이 어레이(268)는 레지스터 R1에 의존하는 명령어들의 명령어 ID 값을 포함한다. 이 어레이(268) 내의 값은 명령어 큐 어레이(202A) 내의 전체 명령어 ID 엔트리에 대한 포인터로서 작용한다. 이것은 명령어 버퍼로부터 매우 빠르게 판독할 수 있도록 한다. 한 블록의 명령어들(2 또는 4)이 한번에 판독된다. 트레이스 버퍼(114A)는 멀티-포트형이 될 수 있고, 4개의 디코더를 갖고 있으며, 레지스터 어레이로부터 얻은 각각의 인덱스를 디코더로 전달하고, 명령어 I0,I2,I3 및 I5는 한 사이클에서 판독될 수 있다. 레지스터 R1 어레이는 리플레이가 시작되기 전에 의존도 필드가 생성될 때 조립(assembled)될 수 있다. 이러한 간접 레벨은 고 대역폭 리플레이를 용이하게 한다.
c. 출력 레지스터 파일(210A) 및 입력 레지스터 파일(208A)
트레이스 버퍼(114)는 소정의 추론 에러를 검출하기 위한 검출회로를 포함한다. 본 발명의 일실시예에 따르면, 각각의 트레이스 버퍼는 관련 스레드의 레지스터 문맥(context)을 홀드하는 출력 레지스터 파일과 프로그램 순서로 바로 선행하는 스레드의 레지스터 문맥을 수신하기 위한 입력 레지스터 파일을 구비한다. 레지스터 문맥은 논리 레지스터의 내용 또는 상태이다. 출력 레지스터 파일의 내용은 자주 갱신되는데, 레지스터에 변경이 있을 때마다 갱신될 수 있다. 입력 레지스터 파일의 내용은 후술되는 바와 같이 비교가 이루어진 후에만 갱신된다.
도18 및 도19는 (트레이스 버퍼 114A 내의) 출력 레지스터 파일(208A)과 (트레이스 버퍼 114B 내의) 입력 레지스터 파일(208B)의 실시예를 도시하고 있으며, 다른 실시예가 사용될 수도 있다. 출력 레지스터 파일(208A)과 입력 레지스터 파일(210B)은 값 또는 PRID 필드 및 상태 필드를 포함한다. 상태 필드는 값 또는 PRID 필드에 유효 값 또는 유효 PRID가 홀드되어 있는지 여부를 나타낸다. 다른 실시예에서는, 어느 쪽도 아닌 경우가 존재할 수 있으며, 이 경우에 입력 레지스터 파일에 의존하는 명령어가 하나를 대기할 수 있다.
전술한 예에서 명령어 I0는 레지스터 R1 및 R2를 포함하고 있으며, 이들 중 어느 것도 이전에는 명령어 I0를 포함하는 스레드 내의 명령어의 목적지가 아니었다는 것을 주목하자. 그러나, 레지스터 R1 및 R2에 대한 값 또는 PRID는 명령어 I0의 실행에 이용될 입력 레지스터 파일(208A)로부터 이용가능하다.
도20을 참조하면, 비교기(280B)는 현재 스레드에 대한 (트레이스 버퍼 114B 내의) 입력 레지스터 파일(208B)의 내용을 프로그램 순서로 바로 선행하는 스레드에 대한 (트레이스 버퍼 114A 내의) 출력 레지스터 파일(210A)의 내용과 비교한다. 이러한 비교는 바로 선행하는 스레드의 실행 종료시점에 또는 선행하는 스레드의최초의 실행 동안에 이루어질 수 있다. 이러한 비교는 또한 선행하는 스레드의 회수의 종료시점에서도 이루어진다. 일실시예에서는, 선행하는 스레드의 회수의 종료시점에서만 이러한 비교가 이루어진다.
다양한 이벤트가 비교기(280B)에 의한 비교를 유발할 수 있다. 이러한 비교는 추론 에러를 검출하기 위해 이루어진다. 만일 입력 레지스터 파일과 출력 레지스터 파일 사이에 차(difference)가 존재하면, 바로 선행하는 스레드의 하나 또는 그 이상의 출력 레지스터의 값들이 변경된 것이다. 이에 응답하여, 입력 레지스터 파일(208B)이 갱신되고, 리플레이 트리거링 로직(284B)은 실행된 명령어들이 변경된 레지스터 값을 이용하여 리플레이되도록 한다. 이러한 리플레이 트리거링 로직(284B)에 의해 의존도 필드가 이용될 수 있다. 변경된 값이 궁극적으로 정확한 값(즉, 순수하게 프로그램 순서로 생성되는 레지스터 값)이라는 보장은 없다. 명령어들이 수회에 걸쳐 다시 리플레이될 필요가 존재할 수도 있다.
일실시예에서, 스레드에 대한 검출회로는 입력 레지스터 파일을 포함하는 트레이스 버퍼 버퍼에서 홀드되는 명령어에서 소정의 추론 에러를 검출하기 위해, 출력 레지스터 파일, 입력 레지스터 파일, 비교기 및 관련 제어 회로를 포함한다. 다른 실시예에서는, 검출회로가 약간 다른 회로를 포함할 수 있다.
일례로 도21을 참조하면, 스레드 T2는 현재 스레드이고 트레이스 버퍼(114B)와 관련되어 있다. 스레드 T1은 스레드 T2에 바로 선행하는 스레드이며, 트레이스 버퍼(114A)와 관련되어 있다. 스레드 T1은 함수 호출, 그 함수 및 그 함수 호출로부터의 리턴을 포함한다. 스레드 T2의 실행은 함수 호출 직후에 시작된다. 함수 호출시에 존재하는 출력 레지스터(210A)의 내용은 입력 레지스터 파일(208B)로 카피된다. 스레드 T2의 명령어는 입력 레지스터 파일(208B)의 레지스터 문맥에 근거하여 추론적으로 실행된다. 리턴 명령어의 시점에, 입력 레지스터 파일(208B)의 내용이 비교기(280B)에 의해 출력 레지스터 파일(210A)의 내용과 비교가 이루어진다. 만일 차가 존재하면, 입력 레지스터 파일(208B)이 갱신되고, 스레드 T2 내의 실행된 명령어가 리플레이된다. 또한, 하나 또는 그 이상의 중간 시점에서도 비교가 이루어질 수 있다. 이것은 명령어의 리플레이를 보다 균일하게 분배함으로써 병목현상을 방지하는데 도움을 줄 수 있지만, 예를 들어, 출력 레지스터 파일의 내용이 함수 동안에 한번 이상 변경되는 경우에 추가적인 리플레이를 유발할 수 있다. 출력 레지스터 파일이 끊임없이 변화되기 때문에, 출력 레지스터 파일(210A)의 내용을 수신하는 중간 버퍼를 구비하는 것이 바람직할 수 있다. 그러면, 중간 버퍼와 입력 레지스터 파일(208B)의 내용 사이에서 비교가 이루어질 수 있다.
도8 및 도10에 도시된 바와 같이, 레지스터 문맥은 도선(216)을 통해 출력 레지스터 파일과 입력 레지스터 파일 사이에서 전달된다. 이 도선(216)은 각각의 입력 레지스터 파일을 바로 선행하는 스레드에 대한 트레이스를 홀드할 수 있는 각각의 트레이스 버퍼의 출력 레지스터 파일과 접속한다. 만일 프로그램 순서가 항상 특정 트레이스 버퍼 순서를 따르는 것이 보장될 수 있다면, 도선(216)의 레이아웃이 아주 간단하게 될 수 있다. 출력 및 입력 레지스터 파일은 도10 및 도11에 도시된 제어 회로(224A)에 의해 제어될 수 있다.
출력 및 입력 레지스터 파일은 값 또는 PRID를 제공하게 되기 때문에, 입력레지스터 파일에서 내용을 수신하는 시점과 소스 오퍼랜드로서 입력 레지스터 파일로부터의 레지스터를 이용하여 명령어를 실행할 수 있게 되는 시점 사이의 대기시간이 매우 적을 수 있다. 만일 값이 이용가능하지 않으면, 레지스터 파일(152)에 대한 PRID가 파이프라인(108)에서의 실행을 위해 이용될 수 있다.
정확한 소스 오퍼랜드가 다양한 스레드의 레지스터 파일을 통해 진행됨에 따라 많은 명령어들이 수회에 걸쳐 리플레이될 것으로 예상된다. 그러나, 또한 많은 프로그램에 있어서, 상당히 많은 양의 명령어들이 전혀 리플레이될 필요가 없거나 또는 비교적 적은 횟수만 리플레이될 필요가 있게 되어, 단위 시간 당 정확하게 실행되는 명령어의 수가 상당히 증가되고, 프로그램을 실행하는데 요구되는 총시간이 감소되는 결과도 예상할 수 있다.
2. 트레이스 버퍼(114')
도11을 참조하면, 트레이스 버퍼(114')는 트레이스 버퍼(114)(도10)와 유사하다. 그러나, 트레이스 버퍼(114')에서는 명령어가 리플레이될 것으로 결정된 이후에 의존도 생성 및 디코딩 회로(218A)에서 의존도 필드가 생성된다. 비록 이것은 리플레이에서 약간의 초기 대기시간을 야기할 수 있지만, 리플레이를 위한 명령어의 발생과 의존도의 판단이 파이프라인 방식으로 수행되는 경우에, 일단 프로세스가 시작되면 추가적인 대기시간이 적어질 수 있다.
일실시예에서, 의존도 생성 및 디코딩 회로(218A)는 의존도 정보를 위해 오직 하나의 필드만을 홀드한다(도13에는 4개의 필드가 존재한다). 이 동일한 필드가 재사용될 수 있다. 예를 들어, 레지스터 R1에 의존하는 명령어의 리플레이 동안에,이 필드는 레지스터 R1에 의존하는 명령어들을 리스트(list)하기 위해 사용될 수 있다. 레지스터 R2에 의존하는 명령어의 리플레이 동안에는, 이 동일한 필드가 레지스터 R2에 의존하는 명령어들을 리스트하기 위해 사용될 수 있다. 의존도 생성 및 디코딩 회로(218A)는 오직 하나의 수정자 필드와 하나의 수정자 레지스터를 포함할 수 있다(도14에는 4개가 도시되어 있다). 이와 달리, 의존도 생성 및 디코딩 회로(218A)가 복수의 의존도 필드 및 레지스터들을 포함할 수도 있다. 이 의존도 생성 및 디코딩 회로(218A)는 한번에 매우 적은 수의 명령어에 대한 의존도를 판단할 수 있다.
데이터 어레이(214A)는 (도10 및 도13의 DAD 어레이 206A에서와 같이) 각각의 명령어 ID 엔트리에 대해 값 또는 PRID 필드, 상태 필드 및 리플레이 카운트 필드를 포함한다. 이와 달리, 데이터 어레이(214A)의 내용을 의존도 생성 및 디코딩 회로(218A)에 위치시켜 이 데이터 어레이(214A)를 불필요하게 만들 수 있다. 데이터 어레이(214A)와 의존도 생성 및 디코딩 회로(218A)를 분리시켜 유지하는 것이 유리할 수 있는 2가지 이유가 있다. 첫째로, 이들이 상이한 판독 포트를 포함할 수 있으며, 두 번째로, 일실시예에서 의존도 생성 및 디코딩 회로(218A)가 명령어 큐 어레이(202A) 및 데이터 어레이(214A) 만큼 많은 로우(rows)를 갖고 있지 않다는 것이다. 다시 말하면, 일실시예에서 의존도 생성 및 디코딩 회로(218A)는 그것이 의존도 필드를 재사용할 수 있는 것처럼 로우들을 재사용한다. 물론 많은 가능성이 존재한다.
보다 상세하게 후술되는 바와 같이, MOB(178)는 도선(194)을 통해 적재 명령어가 리플레이될 때를 신호한다(signals). 리플레이될 적재 명령어에 의존하는 명령어들을 리스트하기 위해 (도13의 R1에 대한 것과 같이) 의존도 필드를 가진 어레이가 생성될 수 있다. 그러나, 적재 명령에 대해서, 종속 명령어의 리스트는 레지스터의 경우에서와 같이 트레이스 내의 첫 번째 명령어가 아니라 그 적재 명령어와 함께 시작된다. 적재 명령어에 대한 의존도 필드는 의존도 생성 및 디코딩 회로(218A)(도11) 내에 존재할 수 있다(물론, 다른 트레이스에 대한 적재 명령어들은 다른 트레이스 버퍼로부터 리플레이되게 된다). 일실시예에서 의존도 생성 및 디코딩 회로(218A)는 적재 명령어 및 레지스터 둘 다에 대한 의존도 필드를 위해 사용된다. 동일한 필드가 둘 다를 위해 사용될 수 있다. 다른 실시예에서는, 레지스터에 대한 의존도 필드가 DAD 어레이(206A) 내에 있고, 적재 명령어에 대한 의존도 필드가 의존도 생성 및 디코딩 회로(218A) 내에 있다.
또다른 실시예에서는, 적재 명령어가 완전히 리플레이되며(즉, 적재 명령어 다음에 오는 모든 명령어들이 재실행됨), 따라서 의존도 필드가 요구되지 않는다.
C. 리플레이 시퀀스 알고리즘
리플레이 트리거링 로직(예, 리플레이 트리거링 로직 284A)이 소스 오퍼랜드(또는 다른 입력 값)가 잘못 예측된 것으로 판단하면, 그것은 파이프라인(108)에서 리플레이될 잘못 예측된 소스 오퍼랜드에 직접 또는 간접적으로 의존하는 명령어들을 디스패치하기 위해 대응하는 트레이스 버퍼(예, 트레이스 버퍼 114B)를 트리거시킨다. 직접 또는 간접적으로 의존하는 명령어들은 트레이스 버퍼 내의 DAD 어레이의 의존도 필드로부터 식별되거나 또는 도11에서와 같이 다른 어레이를 통해 식별될 수 있다.
식별된 명령어들은 그 명령어들이 트레이스 버퍼에 존재하는 순서로(프로그램 순서로) 실행을 위해 트레이스 버퍼로부터 디스패치된다. 예를 들어, 명령어 ID 0 엔트리 내의 명령어는 명령어 ID 1 엔트리 내의 명령어 보다 이전에 또는 동일한 시간에 디스패치된다. 그러나, 비순서적 프로세서에서와 같이 스케줄/발생 유닛(156)의 제어하에 명령어들이 비순서적으로 실행될 수도 있다. (1) 레지스터 리네임을 할 것인지, (2) 리네임/할당 유닛(150) 내의 리네임 에일리어스 테이블 조사(rename alias table lookup)를 바이패스하고 그 대신에 대응하는 트레이스 버퍼로부터의 PRID를 사용할 것인지, 또는 (3) 리네이밍을 완전히 바이패스하고 명령어 내의 상수 오퍼랜드처럼 DAD 어레이로부터의 값을 사용할 것인지 여부를 리네임/할당 유닛(150)으로 표시해주기 위해 트레이스 버퍼로부터 디스패치된 명령어 제어 비트가 부가된다.
도12와 관련하여 전술된 바와 같이, "유효 비트 1(Valid 1)" 및 "유효 비트 2(Valid 2)" 필드는 명령어 ID의 대응하는 소스 오퍼랜드가 트레이스 버퍼(114A) 내의 스레드의 외부로부터의 명령어에 의해 생성되었을 때 제1 값(예, 논리 0)으로 설정되고, 명령어 ID에 대한 소스 오퍼랜드가 스레드 내의 명령어에 의해 생성되었을 때 제2 값(예, 논리 1)으로 설정되는 비트들이다. 트레이스 버퍼(114A)로부터 디스패치된 리플레이되는 명령어는 다음과 같이 결정되는 소스 오퍼랜드를 가질 수 있다.
(1) 유효 비트 1: 만일 명령어 큐 어레이(202A) 내의 유효 비트가 논리 1로 설정되어 있으면, 소스 오퍼랜드에 대한 인덱스가 DAD 어레이(206A) 내의 대응하는 값 또는 PRID를 판독하기 위해 이용된다. 만일 DAD 어레이 상태 필드의 값 비트나 또는 PRID 비트가 둘 다 유효하지 않으면, 그것은 소스 오퍼랜드 레지스터가 아직 리네임되지 않았다는 것을 의미한다. 이 경우에, 명령어는 도선(120) 및 MUX(110)를 통해 논리 0 값을 가진 값 및 PRID 상태 비트와 함께 디스패치되며, 따라서 리네임/할당 유닛(150)이 그것이 정상적으로 수행하는 바대로 에일리어스 테이블 조사(레지스터 리네이밍)를 수행하도록 허용한다. 만일 PRID 또는 값이 유효하면, 그것은 명령어와 함께 도선(120) 및 MUX(110)를 통해 리네임/할당 유닛(150)으로 전달되고, 이 유닛은 그에 응답하여 리네이밍 스테이지를 바이패스한다.
(2) 유효 비트 0: 만일 소스 오퍼랜드에 대한 유효 비트가 논리 0으로 설정되면, 입력 오퍼랜드는 트레이스 외부로부터 온다. 입력 레지스터 파일(208A)에 억세스하기 위해 소스 레지스터 명칭(name)이 이용된다. 입력 레지스터 파일(208A)로부터의 값 또는 PRID는 명령어와 함께 리네임/할당 유닛(150)으로 전달되며, 이 유닛은 그에 응답하여 리네이밍 스테이지를 바이패스한다.
각각의 디스패치된 명령어에 대해 유효 비트가 0이든지 또는 1이든지 간에, DAD 어레이(206) 내의 값 및 PRID 상태 필드 비트는 리셋되거나 논리 0에서 유지된다. 이것은 2가지 목적을 달성한다. 첫째로, PRID가 리네이밍 스테이지로부터 엔트리 내로 카피되기 전에 디스패치된 보다 늦은 종속 명령어가 리네임 에일리어스 테이블로부터 리네임되는 것이 허용되도록 보장되며, 따라서 트레이스 버퍼(114A)로부터 상태 PRID를 이용하는 것을 피할 수 있다. 두 번째로, 마지막 명령어가 라이트백될 때까지 명령어가 회수되지 않도록 보장되며, 따라서 모든 데이터 오예측이 정정된 경우에만 명령어가 회수될 수 있도록 허용된다.
D. 제2 레벨 또는 최종 회수
모든 이전의 스레드에 대한 모든 명령어들이 회수되고 그 명령어에 속한 모든 리플레이 이벤트들이 서비스되었을 때 명령어가 트레이스 버퍼(114)로부터 최종적으로 회수된다. 다시 말하면, 명령어가 정확한 소스 오퍼랜드에 의해 실행되었다고 보장할 수 있을 때 명령어가 최종적으로 회수된다. 스레드는 순서적으로 회수된다. 예를 들어, 스레드 X 내의 명령어는 모든 이전의 스레드가 회수될 때까지는(즉, 모든 이전의 스레드의 명령어들이 회수될 때까지는) 회수될 수 없다. 스레드 내의 명령어들은 순서적으로 회수되며, 다만 회수 준비가 모두 이루어진 명령어들은 동시에 회수될 수 있다.
최종 회수는 최종 회수 로직(134)에 의해 제어된다. 본 발명의 일실시예에서, 최종 회수는 (1) 레지스터 파일로 순서적으로 결과를 위탁하는 것과, (2) 인터럽트, 예외 및/또는 오예측에 대한 서비스, (3) 트레이스 버퍼 및 MOB(178)의 할당해제, 및 (4) 회수되는 대로 저장 명령어를 마킹하고 그것을 메모리로 발생시키도록 MOB에 신호하는 것을 포함한다. 할당해제 엔트리는 헤드 포인터를 이동시키는 것을 포함할 수 있다. 전술한 바와 같이, MOB(178) 내의 저장 명령어들은 관련 데이터가 데이터 캐시(176) 또는 다른 메모리로 카피될 때까지는 할당이 해제되지 않는다. MOB(178) 내의 적재 및 저장 명령어들의 최종 회수에 관한 세부사항에 대해서는 후술한다.
E. 메모리 시스템
도22를 참조하면, 도2의 MOB(178)의 일실시예는 MOB(178A,178B,...,178Y)를 포함하고 있으며, 여기서 Y는 MOB의 수이며, 트레이스 버퍼(114)의 수와 일치한다. MOB(178A,178B,...,178Y)는 각각 트레이스 버퍼(114A,114B,...,114Y) 내의 트레이스의 적재 및 저장 명령어들의 카피를 홀드한다. 적재 명령어들은 적재 버퍼(182A,182B,...,182Y)에서 홀드되고, 저장 명령어들은 저장 버퍼(184A,184B, ...,184Y)에서 홀드된다. 도선(292)은 MOB(178)로/로부터 신호를 전달하는 다양한 도선을 나타낸다. 리플레이 도선(194)은 MOB(178)로부터의 신호를 트레이스 버퍼(114)로 제공하여, 적재 명령어가 리플레이되어야 하는 트레이스 버퍼(114)를 변경한다. 제어 회로(302)는 다양한 제어 기능을 수행한다.
1. 저장 버퍼 및 적재 버퍼
도23은 저장 버퍼(184B,...,184Y)들을 대표하는 저장 버퍼(184A)의 일실시예를 도시하고 있다. 다양한 다른 실시예도 이용될 수 있다. 저장 버퍼(184A)는 저장 버퍼 엔트리들의 로우에 대한 다양한 필드를 포함한다. 각각의 엔트리는 저장 버퍼 ID(SBID)에 의해 식별된다. 리네임/할당 유닛(150)은 각각의 저장 명령어가 첫 번째로 페치되어 실행되지만 리플레이 상태에 있지 않을 때 그 각각의 저장 명령어에 SBID 엔트리를 할당한다. 저장 명령어는 최종 회수 때까지 동일한 SBID 값을 갖는다. 예를 들어, 도23에서 엔트리 SBID 0은 STORE 0(저장 명령어 0)에 할당된다. 엔트리 SBID 1은 STORE 2에 할당된다. 도23에는 전술한 "저장 LBID" 값을 홀드하는 LBID 필드가 도시되어 있다. 일실시예에서, 명령어 큐 어레이(202A)(도12)의 엔트리가 저장 명령어를 홀드하고 있으면, 명령어 큐 어레이(202A)의 SBID 필드는 그 저장 명령어를 홀드하는 저장 버퍼(184A) 내의 엔트리를 식별하는 SBID를 홀드하고, LBID는 그 저장 명령어에 대한 저장 LBID(존재하는 경우)를 홀드한다. SBID와 저장 LBID는 파이프라인(108)을 통해 저장 명령어와 동행한다. 일실시예에서, LBID 필드는 저장 버퍼(184A)에 포함되지 않을 수도 있다.
명령어 ID 필드는 명령어 큐 어레이(202A) 내의 저장 명령어의 명령어 ID를 홀드한다. 스레드 버퍼 ID는 저장 버퍼(184A)와 트레이스 버퍼(114A) 모두에 내재된다. OP 코드 필드는 저장 명령어의 OP 코드를 홀드한다. 저장 어드레스 필드는 저장 명령어가 향하는 어드레스를 홀드한다. 도시된 실시예에서, 어드레스는 AGU(172)에 의해 생성된다. SB 어드레스 유효 필드는 저장 어드레스가 유효 어드레스인지 여부를 나타내는 비트를 포함한다. 데이터 필드는 저장될 데이터를 홀드한다. 데이터 유효 필드는 데이터가 유효한지 여부를 나타내는 비트를 포함한다. 유효 어드레스가 유효 데이터와 다른 시간에 도달할 수 있기 때문에, 별도의 어드레스 및 데이터 비트들이 사용될 수 있다. 어드레스와 데이터는 모두 저장 명령어가 실행되기 전에 도달한다. 일실시예에서, 데이터는 명령어의 일부로서 포함된다. 회수 필드는 최종 회수 로직(134)이 저장 명령어가 회수되어야 한다는 것을 나타낼 때 셋트되고, 메모리로의 저장이 완료되었다는 확인이 메모리로부터 수신될 때에는리셋된다. 적재 명령어 및 저장 명령어의 회수에 대해서는 후술한다. 리플레이 카운트 필드는 리플레이 카운트 번호를 포함한다(도13의 DAD 어레이(206A)의 리플레이 카운트 필드와 유사하다). 리플레이 카운트 필드는 필요로 되지 않는다. 일실시예에서, 저장 명령어는 한번에 1회만 리플레이될 수 있으며, 리플레이 카운트 필드는 없다.
도24는 적재 버퍼(182B,...,182Y)를 대표하여 적재 버퍼(182A)의 일실시예를 도시하고 있다. 물론 다양한 실시예가 이용될 수 있다. 적재 버퍼(182A)는 적재 버퍼 엔트리들의 로우에 대한 다양한 필드를 포함한다. 각각의 엔트리는 적재 버퍼 ID(LBID)에 의해 식별된다. 리네임/할당 유닛(150)은 각각의 적재 명령어가 첫 번째로 페치되어 실행되지만 리플레이 상태에 아닌 경우에 그 각각의 적재 명령어에 LBID 엔트리를 할당한다. 적재 명령어는 최종 회수가 이루어질 때까지 동일한 LBID 값을 갖는다. 예를 들어, 도24에서 엔트리 LBID 0는 적재 명령어 0(LOAD 0)에 할당된다. 엔트리 LBID 1은 LOAD 1에 할당된다(LBID 엔트리 번호와 SBID 필드는 MOB ID로 불릴 수 있다). 도24에는 전술한 "적재 SBID" 값을 홀드하는 SBID 필드가 도시되어 있다. 일실시예에서, 명령어 큐 어레이(202A)(도12)의 엔트리가 적재 명령어를 홀드하고 있으면, 명령어 큐 어레이(202A)의 LBID 필드는 적재 명령어를 홀드하는 적재 버퍼(182A) 내의 엔트리를 식별하는 LBID를 홀드하고, SBID 필드는 그 저장 명령어에 대한 적재 SBID(존재하는 경우)를 홀드한다. LBID와 적재 SBID는 파이프라인(108)을 통해 적재 명령어와 동행한다. 일실시예에서, SBID 필드는 적재 버퍼(182A)에 포함되지 않을 수도 있다.
명령어 ID 필드는 명령어 큐 어레이(202A) 내의 적재 명령어의 명령어 ID를 홀드한다. 스레드 버퍼 ID는 적재 버퍼(182A)와 트레이스 버퍼(114A) 모두에 내재된다. OP 코드 필드는 적재 명령어의 OP 코드를 홀드한다. 적재 어드레스 필드는 그로부터 적재 명령어가 적재되는 어드레스를 홀드한다. 엔트리 유효 필드는 그 엔트리가 유효 적재 명령어에 의해 점유되어 있다는 것을 나타내는 비트를 포함한다. 도시된 실시예에서, 어드레스는 유효 필드는 포함되지 않는데, 그 이유는 어드레스가 이미 AGU(172)에 의해 생성되었기 때문이다. PRID 필드는 레지스터 파일(152) 내의 적재 명령어들의 목적지를 나타내는 리네임/할당 유닛(150)으로부터의 PRID를 홀드한다. SB 히트(Hit), SBID, 스레드 ID 및 리플레이 카운트 필드(존재하는 경우)는 상태 필드의 일부로서 고려될 수 있으며, 저장 명령어의 실행과 관련하여 전술된 바와 같다.
저장 및 적재 명령어가 처음으로 리네임/할당 유닛(150)에 의해 수신될 때, 저장 및 적재 명령어에 대한 엔트리는 저장 버퍼(184)와 적재 버퍼(182)에서 할당된다. 적재된 값을 수신하기 위한 레지스터에 대한 엔트리는 레지스터 파일(150) 및 ROB(164)에서 할당된다. 이들 저장 및 적재 엔트리는 제1 레벨 회수를 당하지 않으며, 트레이스 버퍼(114) 내의 엔트리처럼 최종 회수가 이루어질 때까지 할당된 상태로 유지된다. 따라서, 엔트리들이 리플레이시에 재할당되지 않는다. 만일 저장 또는 적재 버퍼가 가득 충만되어 있으면, I-캐시(104)로부터의 저장 또는 적재 명령어는 엔트리가 비어 있게 될 때까지 리네임/할당 유닛(150)을 통해 통과되지 않게 된다. 그러나, 트레이스 버퍼로부터 재실행되고 있는 적재 또는 저장 명령어는 리네임/할당 유닛(150)을 통해 통과하게 된다.
2. 적재 및 저장 어드레스의 비교
도5를 참조하면, 프로그램 순서로, 스레드 T1 내의 STORE MX는 LOAD MX가 스레드 T2에서 실행되기 전에 실행된다. 그러나, 동시 실행으로 인해, 시간적 순서로는 STORE MX가 LOAD MX 이전 또는 이후에 실행될 수도 있다. 만일 STORE MX가 시간적 순서로 LOAD MX 이전에 실행되면, LOAD MX의 추론적 실행이 STORE MX에 대해 올바른 순서로 이루어지게 된다. 만일 프로그램 순서로 STORE MX 이전의 모든 명령어들이 회수되었으면, LOAD MX가 메모리 위치 MX로부터 정확한 값을 WRJWO하게 되도록 확신할 수 있다. 정확한 값은 스레드들이 순서적 프로세서에 의해 실행되는 경우에 적재되게 되는 값이다. 만일 프로그램 순서로 STORE MX 이전의 모든 명령어들이 회수되지 않았다면, STORE MX에 대한 데이터가 부정확할 가능성이 항상 존재한다.
이와 달리, 만일 STORE MX가 시간적 순서로 LOAD MX 이후에 실행되면, LOAD MX의 추론적 실행이 STORE MX에 대해 올바른 순서로 이루어지지 않게 되며, LOAD MX가 정확한 값을 적재할 것으로 확신할 수 없다. 메모리 위치 MX에 정확한 값이 존재하게 되는 것은 우연의 일치에 의해서만 가능하다(또는, 저장 버퍼 엔트리의 데이터 필드는 STORE MX가 최종적으로 회수될 때까지 STORE MX를 홀드한다). 궁극적으로 실행의 정확성을 보장하기 위해, MOB(178)는 스레드들 사이의 메모리 데이터 코히어런시(coherency)를 보장하기 위한 다양한 메카니즘을 포함한다.
a. 적재 명령어의 실행
적재 명령어가 실행되기 전에, 어떤 저장 명령어(존재하는 경우)가 가장 가까운 보다 빠른 정합하는 저장 명령어(closest earlier matching store instruction)(CEMSI)인지 판단하기 위해 그 어드레스가 저장 명령어들의 어드레스와 비교가 이루어진다. "정합(matching)"이란 적재 명령어와 동일한 어드레스를 갖는 것을 의미한다. "보다 빠른(earlier)"이란 용어는 프로그램 순서로 적재 명령어보다 더 빠르다는 것을 의미한다. "가장 가까운(closest)"이란 용어는 CEMSI와 실행될 적재 명령어 사이에 다른 정합하는 저장 명령어가 없다는 것을 의미한다. 만일 단지 하나의 보다 빠른 정합하는 저장 명령어만 존재하면, 그것이 CEMSI이다.
만일 CEMSI가 존재하면, 적재 명령어는 CEMSI의 데이터 필드로부터 그 데이터를 판독한다. 만일 CEMSI가 WSHWO하지 않으면, 적재 명령어는 데이터 캐시(176), L2 캐시 또는 메인 메모리와 같은 메모리로부터 그 데이터를 취득한다. 저장 버퍼(184) 또는 메모리로부터의 데이터는 MUX(192)를 통해 통과되어, 스레드 ID 및 명령어 ID에 의해 지정된 트레이스 버퍼(114) 내의 엔트리로 기록된다. 데이터는 또한 PRID에 의해 지정된 레지스터 파일(152) 내의 레지스터로 기록될 수 있다. 또한, 데이터는 캐싱 규칙(caching rules)(예, 라이트백, 일괄기록 등)에 따라 데이터 캐시(176)에 저장될 수 있다. MUX(192)는 바이패스인데, 그 이유는 그것이 데이터 캐시(176), L2 캐시 또는 메인 메모리와 같은 메모리를 바이패스할 수 있기 때문이다.
일실시예에서, 실행될 적재 명령어의 어드레스와 저장 명령어의 어드레스 사이의 비교를 수행하기 위해, 각각의 저장 버퍼(184)의 각각의 엔트리에 서로 다른비교기가 결합된다. 일례로, 도25의 비교기(320)는 저장 버퍼(184A) 내의 엔트리 SBID 1의 저장 어드레스와 적재 명령어 어드레스를 수신한다. 도선(322)과 다른 비교기로부터의 출력 도선들은 MOB 제어 회로(302)에 접속된다.
적재 SBID는 실행될 적재 명령어에 대해 가장 가까운 보다 빠른 저장 명령어(closest earlier store instruction)(CESI)의 SBID를 나타낸다. CESI는 적재 명령어와 동일한 스레드 ID를 가진 저장 버퍼 내에 있다. 만일 CEMSI가 존재하면, 그것이 CESI가 되거나 또는 프로그램 순서로 CESI 보다 더 빠르게 된다. 리네임/할당 유닛(150)은 프로그램 내의 저장 및 적재 명령어들의 순서를 계속 추적하며, SBID와 LBID 값을 제공한다. 이들 값은 도선(126)을 통해 트레이스 버퍼(14)로 기록될 수 있다. 일실시예에서, 만일 적재 명령어에 대해 CESI가 없으면, 그 명령어와 관련된 적재 SBID도 없다. 이것은 트레이스 내의 첫 번째 메모리 명령어가 적재 명령어인 경우에 일어난다. 이러한 상황을 처리하기 위해, 리네임/할당 유닛(150)이 유효 적재 SBID가 없다는 것을 나타내기 위한 소정의 신호를 전송하는 것을 포함하여 다양한 기술이 사용될 수 있다. 이러한 목적을 위해, 후술되는 어레이 순환 비트(array wrap around bit)가 사용될 수 있다.
다음의 프로그램 순서로 저장 및 적재 명령어들을 고려하자.
STORE 0
STORE 1
LOAD 0
STORE 2
LOAD 1
STORE 3
STORE 4
LOAD 2
LBID 필드 내의 저장 LBID 값은 저장 버퍼(184A)에 예시되어 있다. SBID 필드 내의 적재 SBID 값은 적재 버퍼(182A)에 예시되어 있다. 예를 들어, LBID 엔트리 1의 SBID 필드에 있는 2는 저장 버퍼(184A) 내의 엔트리 SBID 2에 있는 저장 명령어가 LBID 엔트리 1 내의 적재 명령어에 대해 CESI를 홀드하고 있다는 것을 나타낸다. 명령어 STORE 0, STORE 1, STORE 2 및 LOAD 0는 LOAD 1보다 오래된 것, 즉 빠른 것들이다. 명령어 STORE 3, STORE 4 및 LOAD 2는 LOAD 1보다 오래되지 않은 것, 즉 늦은 것들이다.
제어 회로(302)가 어떤 저장 명령어가 CEMSI인지 판단할 수 있는 여러 가지 방법이 있다. 이러한 방법에 대한 예는 도27을 참조하여 설명되며, 여기서 저장 버퍼(184A,184B,184C,184D)는 MOB(178) 내의 전용 저장 버퍼들이며, 각각 스레드 A,B,C,D와 관련되어 있다. 프로그램 순서는 스레드 A, 다음에 스레드 B, 다음에 스레드 C, 다음에 스레드 D라고 가정하자. 본 예에서, 실행될 적재 명령어는 적재 버퍼(182C)에 존재한다. CESI가 존재하고, 이것은 저장 버퍼(184C) 내에 있다.
도선(342,344,346,348)은 다양한 비교기의 출력 도선들이다. 도선(362,364,366,368)은 비교기가 비교를 수행할 수 있도록 하는 제어 신호를 제공한다. 다른 실시예에서, 제어 회로(302)는 (1) 각각의 저장 버퍼 내의 모든 엔트리에 대해 비교기들을 인에이블시키거나, (2) 프로그램 순서로 적재 명령어의 스레드 ID와 동일하거나 더 빠른 스레드 ID를 가진 저장 버퍼에 있는 비교기들만 인에이블시키거나, 또는 (3) 프로그램 순서로 적재 명령어 보다 더 빠른 엔트리와 관련된 비교기들만 인에이블시킨다.
정합 판단 로직(356)은 어떤 저장 명령어(존재하는 경우)가 CEMSI인지 판단한다. 도27에서는, 저장 버퍼(184C)의 상부에 있는 STORE MX 명령어가 CEMSI이다. 만일 이 STORE MX 명령어가 저장 버퍼(184C)에 있지 않으면, CEMSI는 저장 버퍼(184B) 내의 STORE MX 명령어가 되게 된다. 비교기 및 정합 판단 로직(356)이 CEMSI가 존재하는지 여부를 판단하고 있는 동안에, CEMSI가 없는 경우에 준비될 데이터 캐시(176)(및 다른 메모리)에서 조사(lookup)가 이루어질 수 있다. 정합 판단 로직(356)은 MUX(192)가 메모리 또는 저장 버퍼로부터 데이터를 전달할 것인지 여부를 제어하기 위한 신호를 도선(370) 상에 제공하는 데이터 경로 제어 로직(390)을 포함한다.
한 접근방법에서는, MOB 제어 회로(302)에 의해 2가지 우선순위(priority) 판단이 이루어진다. 하나는 저장 버퍼 내의 저장 명령어들의 우선순위를 판단하는 것이 될 수 있다. 다른 하나는 저장 버퍼들의 우선순위를 판단하는 것이 될 수 있다. 이러한 판단은 순서적으로 이루어질 수 있다. 저장 버퍼 내의 우선순위의 판단에는 캐리 체인 구조(carry chain structure)가 사용될 수 있다. 예를 들어, 일실시예에서는 적재 명령어와 동일한 스레드 ID를 가진 것 이외의 각각의 저장 버퍼에대해, 어떤 정합하는 저장 명령어가 프로그램 순서로 가장 늦은 것인지 판단한다. 적재 명령어와 동일한 스레드 ID를 가진 저장 버퍼에 대해서는, 어떤 정합하는 명령어가 프로그램 순서로 CESI에 가장 가까운지(동일한 것을 포함함) 판단한다. 다음에, 정합하는 명령어를 가진 저장 버퍼 중에서 어느 것이 프로그램 순서로 적재 명령어의 스레드 ID에 가장 가까운 것인지 판단이 이루어진다.
저장 버퍼(184)는 헤드 및 테일을 각각 구비한 원형 어레이(circular array)가 될 수 있다. 초기에는, 보다 큰 SBID 값을 가진 저장 명령어들이 보다 늦은 명령어들이다. 그러나, 저장 엔트리가 할당해제되고 할당됨에 따라, 결국 테일이 순환하게 되며, 따라서 헤드가 테일보다 더 높은 SBID 엔트리를 나타내게 된다. 일실시예에서, 순환 비트는 테일이 보다 높은 값으로부터 가장 낮은 SBID 값으로 진행할 때 토글링되며, 가장 가까운 정합 판단 로직(356)으로 제공된다.
b. 저장 명령어의 실행
저장 명령어가 실행될 때에는, 프로그램 순서로 더 늦은(동일하거나 더 새로운 스레드 보다) 어떤 적재 명령어(존재하는 경우)가 그 저장 명령어와 동일한 어드레스를 갖고 있는지 판단하기 위해 그 어드레스가 적재 명령어들의 어드레스와 비교가 이루어진다. 저장 SBID에 의해 지시되는 가장 가까운 보다 늦은 적재 명령어(closest later load instruction)(CLLI)가 고려될 수 있는 가장 빠른 적재 명령어를 나타낸다.
일실시예에서, 이러한 비교를 수행하기 위해 각각의 적재 버퍼(182)의 각각의 엔트리에 서로 다른 비교기가 관련된다. 이들 비교기 중에서 하나의비교기(324)가 도26에 도시되어 있다. 단지 예로서, 이 비교기(324)는 적재 버퍼(182A)의 엔트리 LBID 1과 관련된다. 이 비교기(324)는 한 입력에서 저장 명령어의 어드레스를 수신하고, 다른 입력에서 적재 버퍼(182A) 내의 엔트리 LBID 1의 적재 어드레스 필드의 어드레스를 수신한다. 출력 도선(326) 상의 신호는 이들 어드레스가 동일한지 여부를 나타낸다. 이 도선(326)과 다른 비교기들로부터의 출력 도선은 MOB 제어 회로(302)에 접속된다. 이들 비교기(예, 비교기 324)는 또한 후술되는 바와 같이, 저장 명령어의 상태 비트를 적재 버퍼 내의 상태 비트와 비교할 수 있다.
도28은 도27과 유사하지만, 도28에서는 적재 버퍼(12A) 내의 적재 명령어 어드레스들이 실행될 저장 명령어의 어드레스와 비교가 이루어지며, 정합 판단 로직(356)은 적재 명령어를 리플레이할 것인지 여부를 판단한다. 일실시예에서, 정합 판단 로직은 어떤 적재 명령어가 리플레이될 것인지를 트레이스 버퍼로 표시해주기 위해 도선(194) 상에 신호를 제공하는 리플레이 트리거링 로직(394)을 포함한다. 일실시예에서, 정합 판단 로직(356)은 CLLI와 함께 시작되는 저장 명령어와 적재 명령어의 정합을 고찰한다. 스레드 관리 로직(124)은 실행되고 있는 저장 명령어의 스레드 ID 보다 프로그램 순서로 더 늦은 스레드 ID를 표시한다. 일실시예에서는, 모든 비교기들이 인에이블된다. 다른 실시예에서는, 프로그램 순서로 적재 명령어의 스레드 ID와 동일하거나 다 늦은 스레드 ID를 가진 적재 버퍼 내의 도선들만 인에이블된다. 또 다른 실시예에서는, CLLI 및 더 늦은 명령어들과 관련된 적재 버퍼 내의 도선들만 인에이블된다. 고려할 스레드는 적재 버퍼 내의 어떤 적재명령어가 프로그램 순서로 저장 명령어 보다 더 늦게 오는지에 관한 판단을 하기 전후 및 그 동안에 판단이 이루어질 수 있다.
일실시예에서, 적재 명령어의 실행에서의 소정의 추론 에러를 검출하기 위한 검출회로는 적재 버퍼와 관련된 비교기, 정합 판단 로직(356)의 일부 및 관련 제어 회로를 포함한다. 다른 실시예에서, 검출회로는 약간 다른 회로를 포함할 수 있다. 실행 파이프라인에서 존재하게 될 추론 에러를 검출하기 위한 검출회로는 필요로 되지 않는다. 데이터 경로 제어 로직 및 리플레이 트리거링 로직과 관련하여 다른 정합 판단 로직도 사용될 수 있다.
i. 어드레스 정합이 존재하는 경우
리플레이할 것인지 여부를 판단하는데 있어, 어드레스 정합이 존재하는 보다 늦은 명령어들에 대한 상태 필드(SB 히트, SBID, 스레드 ID, 리플레이 카운트(사용되는 경우))가 고려된다. 이 상태 필드는 적재 명령어가 메모리(예, 데이터 캐시 176) 또는 저장 버퍼의 데이터 필드로부터 그 데이터를 취득했는지 여부를 나타낸다. SB 히트 필드는 예를 들어, 데이터가 메모리로부터 온 경우에는 0을 갖고, 데이터가 저장 버퍼로부터 온 경우에는 1을 갖는다. SBID 및 스레드 ID 필드는 그로부터 데이터가 오는 저장 명령어의 SBID 및 스레드 ID를 홀드한다. 저장 명령어의 스레드 ID가 반드시 어드레스 정합이 존재하는 적재 명령어의 스레드 ID인 것은 아니다. 적재 명령어의 스레드 ID는 적재 버퍼에 내재된다. 리플레이 카운트 필드(사용되는 경우)는 어떤 리플레이가 수반되는지를 나타낸다(만일 SB 히트가 0이면, SBID, 스레드 ID 및 리플레이 카운트 필드는 의미가 없다).
만일 SB 히트가 0이면(이전의 데이터가 메모리로부터 온 것이면), 적재 버퍼로부터 도선(194)을 통해 적재 명령어 스레드 ID에 의해 식별된 트레이스 버퍼로 리플레이 이벤트가 신호되고, 그 적재 명령어 및 모든 종속 명령어들이 트레이스 버퍼로부터 리플레이된다. 명령어 ID 및 스레드 ID는 어떤 명령어가 리플레이되는지를 나타내기 위해 도선(194)을 통해 전달된다.
만일 SB 히트가 1이면(이전의 데이터가 저장 버퍼로부터 온 것이면), SBID 필드, 스레드 ID 필드 및 리플레이 카운트 필드(사용되는 경우) 내의 값들은 리플레이가 트리거될 것인지 여부를 제어한다. 첫 번째 경우에, 특정 적재 명령어에 대한 상태 필드의 스레드 ID는 저장 명령어의 스레드 ID와 동일하고, 특정 적재 명령어의 상태 필드 내의 SBID는 저장 명령어의 SBID와 정합한다. 이러한 첫 번째 경우에, 만일 저장 명령어의 리플레이 카운트가 상태 필드 내의 리플레이 카운트 보다 더 크면 그 적재 명령어는 리플레이된다. 만일 리플레이 카운트가 존재하지 않으면(저장 명령어는 한번에 1회만 리플레이될 수 있기 때문임), 적재 명령어가 리플레이된다.
두 번째 경우에, 상태 필드 내의 스레드 ID는 저장 명령어의 스레드 ID와 동일하지만, 상태 필드 내의 SBID는 저장 명령어의 SBID와 정합하지 않는다. 이 두 번째 경우에는, 만일 상태 필드 내의 SBID가 저장 명령어의 SBID 보다 더 작으면 그 적재 명령어가 리플레이되고, 만일 상태 필드 내의 SBID가 저장 명령어의 SBID 보다 더 크면 리플레이되지 않는다.
세 번째 경우에는, 상태 필드와 저장 명령어의 스레드 ID들이 정합하지 않는다. 이것은 좀처럼 드문 경우로 예상된다. 간략성을 위해, 일실시예에서는 (비록 프로그램 순서와는 정반대일 수도 있지만) 적재 명령어가 리플레이된다. 이것은 잘못된 리플레이가 될 수도 있다. 리플레이될 때 적재 명령어는 정확한 저장 데이터를 수신하게 된다. 다른 접근방법도 사용될 수 있지만, 이들은 드문 경우에 정당화되는 훨씬 더 복잡한 구조로 이루어질 수 있다.
ii. 어드레스 정합이 존재하지 않는 경우
만일 어드레스들이 정합하지 않으면, 다음의 드문 경우를 제외하고는 리플레이가 트리거되지 않는다. 만일 SB 히트가 1이면, 상태 필드의 스레드 ID는 저장 명령어의 스레드 ID와 정합하고, 상태 필드의 SBID는 저장 명령어의 SBID와 정합한다. 이 경우에, 리플레이가 존재하며, 리플레이되는 적재 명령어는 새로운 엔트리 또는 메모리로부터 그 데이터를 수신한다.
c. 리셋
스레드가 프로그램 순서로 되어 있지 않은 경우에 그 스레드는 리셋된다. 그러나, 다른 스레드로부터의 적재 명령어가 그 스레드 내의 저장 명령어와 관련된 데이터 필드로부터 데이터를 취득했을 수도 있다. 스레드 관리 로직(124)은 제어 회로(302)로 신호를 전송한다. 일실시예에서, 스레드가 리셋되면, 그 리셋된 스레드의 스레드 ID가 모든 적재 버퍼 내의 모든 적재 명령어와 비교가 이루어진다(그 리셋된 스레드에 대응하는 적재 버퍼는 제외될 수 있음). 상태 필드 내의 스레드 ID가 리셋된 스레드의 스레드 ID와 정합하는 경우에 적재 명령어에 대해 리플레이가 트리거된다. 이 적재 명령어는 적절한 트레이스 버퍼로부터 리플레이된다.
3. 저장 명령어의 리플레이
전술한 바와 같이, 적재 명령어들은 저장 명령어의 실행에 응답하여 리플레이된다. 일실시예에서, 저장 명령어들은 레지스터 값이 변경되었다는 것을 나타내는 트레이스 버퍼에서의 레지스터 비교에 응답하여 리플레이된다. 예를 들어, 도12 및 도13을 참조하면, 저장 명령어인 트레이스 버퍼(114A) 내의 명령어 ID 4 및 5는 레지스터 R1-R4에 의존하는 것으로 도시되어 있다.
4. 복수의 적재 명령어의 리플레이
적재 버퍼 내의 하나 이상의 적재 명령어가 저장 명령어와 정합하는 상태 필드를 갖게 되는 것도 가능하다. 복잡한 로직을 피하기 위해, 한가지 접근방법은 제어 회로(302)가 복수의 적재 어드레스 정합이 존재하는 때를 검출하고, 트레이스 내의 가장 빠른 적재 명령어 이후의 모든 명령어들이 재실행되도록 하는 것이다.
5. 적재 및 저장 명령어의 최종 회수
적재 또는 저장 명령어가 최종적으로 회수될 예정인 경우에, 최종 회수 로직(134)은 그 명령어가 최종적으로 회수될 것이라는 것을 나타내는 신호를 트레이스 버퍼(114) 및 MOB(184)로 제공한다. 다음에, (명령어 ID 및 스레드 ID에 의해 식별된) 트레이스 버퍼 내의 엔트리가 할당해제된다. 적재 명령어의 경우에, (스레드 ID 및 LBID에 의해 식별된) 적재 버퍼 내의 엔트리가 할당해제된다. 적재 명령어의 경우에 최종 회수가 완료된다. 저장 명령어의 경우에는, 할당해제 이전에 데이터 필드 내의 데이터가 메모리로 위탁되어야 한다. 저장 버퍼 내의 엔트리의 할당 해제와 최종 회수는 저장 명령어가 완료되었다는 확인이 수신될 때까지는 이루어지지 않는다. 이와 달리, 엔트리는 확인 이전에 최종적으로 회수될 수 있지만, 그 엔트리의 재할당은 확인이 수신될 때까지 이루어질 수 없다. 도선(200) 상의 신호는 저장 명령어의 최종 회수가 완료되어 다음 스레드가 시작될 수 있다는 것을 스레드 관리 로직(124)에 표시해줄 수 있다.
SB 회수(SB retired) 필드는 명령어가 회수되었다는 것을 나타낸다. 최종 회수 로직(134)이 명령어가 회수되어야 한다는 것을 나타내면, SB 회수 필드 내의 비트가 표명된다(asserted). 일단 SB 회수 필드가 표명되면, 관련 명령어들이 순서적으로 메모리로 기록된다. 명령어가 메모리로 기록되었다는 것을 MOB(184A)가 학습하자마자, SB 회수 필드는 표명해제되고, 명령어는 할당해제된다.
적재 버퍼(182A)와 저장 버퍼(184A)는 헤드 및 테일을 가진 큐(queues)가 될 수 있다. 헤드는 명령어가 할당해제될 때 이동한다. 적재 버퍼(184A)와 트레이스 버퍼(114)에서, 회수와 할당해제는 동시에 이루어질 수 있다. 최종 회수 로직(134)은 도선(136,140)을 통해 신호를 제공한다. 디멀티플렉서(DEMUX)(188)는 적재 버퍼(182)가 회수 신호를 수신하게 되는지 또는 저장 버퍼(184)가 회수 신호를 수신하게 되는지를 선택한다. DEMUX(188)는 선택사양이며, 적재 버퍼(182) 및 저장 버퍼(184) 내의 인에이블 포트로 대체될 수 있다.
F. 스레드 관리 로직 및 최종 회수 로직에 관한 추가 정보
일실시예에서, 스레드 관리 로직(124)은 스레드 순서를 계속 추적하기 위해 트리 구조를 이용한다. 트리 구조에서, 프로그램 순서(회수 순서도 됨)는 상부로부터 하부로 흐르며, 우측 상의 노드가 프로그램 순서로 좌측 상의 노드 보다 더 빠르다. 루트(root)는 프로그램 순서로 첫 번째이다. 트리는 추상적 개념이지만, 트리 구조는 그 트리를 구현하는 회로이다.
스레드는 역방향 분기 또는 함수 호출 다음에 오는 명령어에서 시작된다. 즉, 스레드는 (도4 및 도5의 스레드 T2에 의해 도시된 바와 같이) 역방향 분기가 이루어지지 않고 함수가 호출되지 않은 것으로 가정하여 다음 명령어에서 시작된다. 이렇게 하는데 있어서, 스레드(노드)의 견지에서, 스레드의 차일드 노드들의 프로그램 순서는 스레드가 시작된(생성된) 순서의 반대로 이루어진다. 예를 들어, 도6에서, 시간적 순서로는 스레드 T2의 실행이 스레드 T3의 실행 이전에 시작되지만, 프로그램 순서로는 스레드 T3가 스레드 T2 이전에 발생한다.
일실시예에서, 트리로부터 스레드가 제거되도록 하는 3개의 이벤트가 존재할 수 있다. 즉, (1) 스레드가 회수될 때 트리의 루트에 있는 스레드가 제거된다. 루트에 있는 스레드가 회수되면, 프로그램 순서로 그 다음에 있는 스레드(노드)가 루트가 되고, 그에 따라 노드들이 재할당된다. (2) 프로그램 순서로 마지막이 되는 스레드는 트리에 추가될 프로그램 순서가 더 높은 스레드를 위한 공간을 만들기 위해 트리로부터 제거된다. (3) 그 패런트 스레드의 프로그램 카운터가 시작 카운트와 종료 카운트 사이의 범위 밖에 있는 것으로 발견될 때, 스레드가 리셋되고, 그것에 의해 트리로부터 제거될 수 있다. 차일드 스레드가 역방향 분기에서 생성되는 경우에(예, 도6 및 도29의 스레드 T4), 시작 카운트는 역방향 분기의 타겟(target)이 되고, 종료 카운트는 역방향 분기 명령어에서의 프로그램 카운터 값이 된다. 함수 호출 이후에 시작된 스레드도 역시 리셋될 수 있는데, 그 이유는 그 함수로부터의 리턴이 없기 때문이며, 이러한 현상은 매우 드물게 일어난다. 함수로부터의 리턴이 없게 되는 가능성을 처리하기 위한 한가지 방법은 그 가능성을 무시하고, 시스템으로 하여금 이벤트 (2)에서와 같이 프로그램 순서로 가장 낮게 될 때 그 스레드를 트리로부터 결국 제거하도록 하는 것이다. 스레드가 트리로부터 제거되면, 그 스레드에 할당된 자원(예, 트레이스 버퍼, 저장 버퍼, 적재 버퍼)도 할당해제된다.
이벤트 (1) 및 (3)은 도29에 도시되어 있으며, 여기에는 스레드 T5 및 T6와 함께 도6에 도시된 예의 스레드들을 포함하고 있다. 스레드 T5는 포인트 J에서 역방향 분기 명령어 다음에 시작되고, 스레드 T6는 포인트 K에서 함수 호출 다음에 시작된다. 도30은 시간 t1에서의 트리 구조를 도시하고 있다. 스레드 T3가 트리에 추가되기 전에 스레드 T2가 트리에 추가된다. 스레드 T4는 스레드 T3가 트리에 추가된 이후에 트리에 추가된다. 스레드 T2와 스레드 T3는 스레드 T1의 차일드이다. 스레드 T4는 스레드 T3의 차일드이다. 상부로부터 하부 그리고 우측으로부터 좌측으로 진행되는 규칙에 따라, 프로그램 순서 및 회수 순서는 스레드 T1, T3, T4, T2이다. 도31은 스레드 T4가 스레드 T1이 회수되기 전에 리셋된 것을 가정하여 시간 T2에서의 트리 구조를 도시하고 있다. 프로그램 순서 및 회수 순서는 스레드 T1, T3, T2, T5이다. 도32는 스레드 T1이 스레드 T4가 리셋되기 전에 회수되는 것을 가정하여 시간 t2에서의 트리 구조를 도시하고 있다. 프로그램 순서 및 회수 순서는 스레드 T3, T4, T2, T5이다. 도33은 스레드 T1이 회수되고 스레드 T4가 리셋된 이후의 시간 t3에서의 트리 구조를 도시하고 있다. 프로그램 순서 및 회수 순서는 스레드 T3, T2, T5, T6이다.
이벤트 (2)는 도34에 도시되어 있으며, 여기에는 내포된 함수(nested function)가 포함되어 있다. 시간적 순서로, 스레드는 T1, T2, T3, T4, T5의 순서로 생성(시작)된다. 그러나, 프로그램 순서는 T1, T5, T4, T3, T2이다. 이 예에서는, 오직 4개의 트레이스 버퍼만 존재한다. 도35는 스레드 T5가 시작되기 전의 시간 t1에서의 트리 구조를 도시하고 있다. 프로그램 및 회수 순서는 T1, T4, T3, T2이다. 스레드 T5는 아직 트리 구조의 일부가 아니다. 도36은 스레드 T5가 시작된 이후의 시간 t2에서의 트리 구조를 도시하고 있다. 프로그램 순서로 가장 낮은 스레드 T2는 스레드 T5를 위한 공간을 만들기 위해 트리 구조로부터 제거되었다. 트리로부터 제거된 스레드는 나중에 재시작될 수 있다. 이와 달리, 다른 스레드가 트리로부터 제거된 스레드의 명령어들의 전부 또는 일부를 실행할 수도 있다. 일실시예에서, 리셋의 경우에 하나의 스레드가 그 리셋 스레드 아니라 다음에 오는 스레드와 합류(join)하려고 시도할 수 있다. 대안으로, 스레드가 종료될 때까지 계속될 수도 있다. 어레이(198)의 함수는 트리의 노드에서 수행될 수 있다.
차일드 스레드의 스레드 ID는 트리 구조에서 프로그램 순서에 따라 적절하게 배치된다. (스레드 관리 로직(124)에 의해 결정되는 바와 같은 프로그램 순서는 변경될 수도 있다.) 스레드는 그것이 프로그램 순서로 트리 내의 다음 스레드의 프로그램 카운터에 합류 또는 정합하는 경우에 종료된다. 만일 스레드의 오직 하나의 차일드만 존재하면, 그것은 프로그램 순서로 다음 스레드가 된다. 예를 들어, 도33에서 스레드 T2는 프로그램 순서로 트리에서 다음 스레드이다.
최종 회수 로직(134)은 어레이(198)를 조립(assemble)하기 위해 트리 구조로부터 정보를 얻거나 또는 트리 구조의 회로로부터 직접 정보를 얻는다. 스레드 관리 로직(124)의 트리 구조 및 다른 로직과 최종 회수 로직(134)의 로직 사이에 디코딩 회로가 존재할 수 있다. 어레이(198)는 필요로 되지 않을 수도 있다.
요약하면, 트리 구조는 적어도 다음의 목적을 위해 정보를 제공한다. (1) 트리는 회수 순서를 명시한다. (2) 트리는 예를 들어, 전술한 바와 같이 MOB(178)에 의해 이용되는 프로그램 순서를 명시한다. (3) 트리 구조는 다른 스레드의 시작되는 명령어를 나타냄으로써 스레드의 종료 포인트를 명시한다. (4) 트리 구조는 어떤 자원이 이용가능하고 어떤 자원이 할당해제되었는지를 나타냄으로써 스레드 자원 할당에 이용된다.
G. 멀티스레딩이 없는 실시예
도3은 파이프라인(308)을 포함하는 프로세서(100)를 도시하고 있다. 이 프로세서(100)는 프로세서(50)와 유사하다. 그러나, 트레이스 버퍼(300)가 전용 트레이스 버퍼이고, MOB(310)가 전용 MOB이다. 프로세서(100)는 복수의 스레드를 처리하도록 설계되지 않았다. 그러므로, 스레드 관리 로직은 프로세서(100)에는 필요로 되지 않는다. 트레이스 버퍼(300)는 예를 들어, 멀티스레드 특유의 구성요소가 필요로 되지 않는다는 것을 제외하고는 트레이스 버퍼(114A)와 유사할 수 있다. 예를 들어, 도선(216)과 출력 레지스터 파일(210)이 필요로 되지 않는다. 추론 에러를 검출하기 위해 잘 알려져 있는 회로를 포함하여 다양한 회로가 이용될 수 있다.MOB(310)는 예를 들어, 멀티스레드 특유의 기능이 필요로 되지 않는다는 것을 제외하고는 MOB(178A)와 유사할 수 있다. 예를 들어, 적재 버퍼에는 스레드 ID 필드가 필요로 되지 않게 된다. 프로세서(100)의 다른 구성요소는 멀티스레딩 관련 기능들을 제거하기 위해 프로세서(50)의 구성에 대해 약간 변경될 수 있다. 트레이스 버퍼(300) 및 MOB(310)는 다양한 추론 및 에러로부터의 복구와 관련하여 이용될 수 있다. 트레이스 버퍼는 많은 수의 명령어들이 최종 회수 이전에 가능한 리플레이를 위해 파이프라인 외부에서 홀드되도록 허용한다.
프로세서(50)도 비-멀티스레드 프로그램과 관련하여 이용될 수 있다. 이 경우에, 스레드 관리 로직(124)은 항상 프로그램 순서로 동일한 스레드 ID를 유지할 수 있다. 대안으로, 스레드 관리 로직(124)이 디스에이블될 수 있다. 비-멀티스레드 방식의 경우에, 오직 하나의 트레이스 버퍼(114)와 오직 하나의 MOB(178)만이 이용된다. 대안으로, 트레이스 버퍼들이 더욱 큰 트레이스 버퍼를 만들기 위해 조합될 수 있고, MOB들이 더욱 큰 MOB를 만들기 위해 조합될 수 있다.
H. 추가 정보 및 실시예
도37을 참조하면, 프로세서(400)는 멀티-파이프라인 유닛(402)을 포함하는 멀티-프로세서(MP) 칩이다. 멀티-파이프라인 유닛(400)은 전체 파이프라인(예, 각각의 파이프라인에 대한 별도의 리네임/할당 유닛)이 멀티-파이프라인(402)의 각각의 파이프라인 0,1,...,W와 함께 포함된다는 점에서 도2의 공유 자원 파이프라인(108)과 상이하다(W는 X와 동일하거나, 크거나 또는 작을 수 있다). 그렇지 않으면, 프로세서(400)는 근본적으로 프로세서(50)와 동일하거나 또는 매우 다를 수 있다. 다른 프로세서들도 멀티-파이프라인 유닛(402)의 일부 기능과 파이프라인(108)의 일부 기능을 포함할 수 있다.
전술한 각각의 프로세서는 다양한 컴퓨터 시스템의 일부로서 포함될 수 있다. 도38을 참조하면, 단지 예로서, 프로세서(50)는 컴퓨터 시스템(430)의 일부가 될 수 있다. 이 시스템(430)은 또한 제2 프로세서(434)를 포함할 수 있다. 온-칩 제2 레벨(L2) 캐시가 프로세서(50)에 포함될 수 있다. 이 프로세서(50)는 프로세서 버스(442)를 통해 메모리 제어기(440)와 통신할 수 있다. 메모리 제어기(440)는 버스(452,454)(PCI 버스가 될 수 있음)를 통해 메인 메모리(446) 및 주변기기(448)와 통신할 수 있다.
파이프라인(108 또는 308)(도2 및 도3)과 유사한 파이프라인이 레지스터 리네이밍을 이용하지 않는 프로세서에 이용될 수 있다. 이러한 경우에, 레지스터 리네이밍에 포함된 구성요소(예, 리네임/할당 유닛 150)들은 리네이밍 관련 기능들을 제거하도록 변경될 수 있다. 전술한 회로 및 세부사항들은 단지 예시적인 것이며, 그 위치에 다양한 다른 회로 및 세부사항이 이용될 수 있다. 또한, 크기, 대기시간 등에 있어서 다양한 설계 절충이 이루어질 수 있다. 예를 들어, 실행 경로(예, 예약 스테이션, 레지스터 파일, ROB) 내의 버퍼들이 너무 큰 경우에 최대 동작 클록 주파수가 감소되어야 할 수도 있다. 여기에 예시된 구성요소들은 다양한 기술에 대응하여 설계 및 구성될 수 있다.
2개의 예시된 구조체들 사이에 중간 구조체(예, 버퍼) 또는 신호가 존재할수 있다. 일부의 도선들은 도시된 바와 같이 연속되지 않을 수도 있으며, 중간 구조체에 의해 나누어질 수도 있다. 도면에서 박스의 경계선들도 예시 목적을 위한 것이다. 실제적인 장치는 이렇게 정의된 경계를 가진 구성요소들을 포함하지 않을 수 있다. 예시된 구성요소들의 상대적인 크기는 실제적인 장치 크기를 의미하는 것이 아니다. 화살표는 몇몇 실시예에서 소정의 데이터 흐름을 나타내는 것이지만, 예를 들어, 데이터 요구와 같이 모든 신호에 대해 그런 것은 아니다. 전술한 논리 하이(HIGH) 신호의 경우에, 논리 로우(LOW) 신호로 대체될 수 있으며, 그 역으로도 가능하다.
프로세서에 도시된 구성요소들은 모두 동일한 프로세서 칩에 위치할 수 있으며, 대안으로, 예를 들어 트레이스 버퍼는 실행 파이프라인과 다른 칩 상에 위치될 수 있다.
용어 "접속", "결합" 및 관련 용어는 직접 접속 또는 직접 결합에 한정되는 것이 아니며, 간접 접속이나 간접 결합도 포함할 수 있다. 용어 "응답" 및 관련 용어는 한 신호 또는 이벤트가 어느 정도 다른 신호에 의해 영향을 받는다는 것을 의미하며, 반드시 전적으로 또는 직접적으로 그렇다는 것은 아니다. 만일 명세서에 어떤 구성요소가 "할 수 있다", "할 수도 있다, 또는 "포함되는 것이 바람직하다" 등이 기술되어 있으면, 그 특정 구성요소가 꼭 포함될 필요가 있는 것은 아니다.
MOB는 잘못된 추론을 검출하기 위해 어드레스 정합이 아닌 데이터 정합을 이용할 수도 있다.
이 기술분야에 통상의 지식을 가진 자는 본 발명의 범위 내에서 전술한 설명및 도면에 대해 다양한 변경이 이루어질 수도 있다는 것을 이해할 것이다. 따라서, 다음의 청구범위는 본 발명의 범위를 정의하는 어떠한 보정안도 포함하는 것이다.

Claims (29)

  1. 스레드의 적어도 일부를 동시에 실행하기 위한 실행 파이프라인;
    잘못 추론된 명령어들에 의해 야기되는 스레드들의 실행에서의 스레드 의존도를 수반하는 추론 에러를 검출하기 위한 검출회로;
    상기 실행 파이프라인 외부에 있으며, 상기 잘못 추론된 명령어들을 포함하는 스레드들의 명령어들을 홀드하기 위한 트레이스 버퍼들; 및
    상기 명령어들중 적어도 일부의 명령어 - 존재하는 경우 - 를 상기 잘못 추론된 명령어들중 적어도 하나의 명령어에 의존하는 것으로서 식별하고, 상기 잘못 추론된 명령어들 및 상기 식별된 종속 명령어들중 적어도 일부의 명령어 - 존재하는 경우 - 의 재실행을 트리거시키기 위한 트리거링 로직
    을 포함하는 프로세서.
  2. 제 1 항에 있어서,
    상기 트리거링 로직은 상기 잘못 추론된 명령어들의 리플레이를 트리거시키는
    프로세서.
  3. 제 1 항에 있어서,
    상기 검출회로의 적어도 일부는 상기 트레이스 버퍼 내에 포함되어 있는
    프로세서.
  4. 제 1 항에 있어서,
    각각의 상기 트레이스 버퍼는 상기 스레드들중 하나의 스레드의 명령어들의 적어도 일부를 홀드하기 위한 명령어 큐를 포함하고, 상기 잘못 추론된 명령어들중 하나의 특정 명령어에 대한 상기 재실행된 종속 명령어들은 상기 트레이스 버퍼들중 하나 이상의 버퍼에 존재할 수 있는
    프로세서.
  5. 제 4 항에 있어서,
    상기 트레이스 버퍼들 내의 명령어들의 최종 회수를 제어하기 위한 최종 회수 로직을 더 포함하고,
    상기 명령어들의 일부는 상기 실행 파이프라인에서의 실행 이후에 초기 회수될 수 있는
    프로세서.
  6. 제 5 항에 있어서,
    디코더를 더 포함하고,
    상기 실행 파이프라인과 상기 트레이스 버퍼들은 동시에 상기 디코더로부터 명령어들을 수신하는
    프로세서.
  7. 제 1 항에 있어서,
    상기 검출회로는,
    레지스터 내용 비교 회로; 및
    어드레스 비교 회로를 포함하는
    프로세서.
  8. 제 1 항에 있어서,
    스레드 관리 로직과, 상기 스레드 관리 로직의 제어 하에 상기 스레드를 생성하기 위한 프로그램 카운터
    를 더 포함하는 프로세서.
  9. 제 1 항에 있어서,
    상기 스레드 관리 로직이 나타내는 회수 순서에 따라 상기 스레드들을 최종적으로 회수하기 위한 최종 회수로직
    을 더 포함하는 프로세서.
  10. 제 1 항에 있어서,
    스레드 의존도를 수반하는 상기 추론 에러는 의존도 추론 에러 및 데이터 추론 에러를 포함하는
    프로세서.
  11. 제 1 항에 있어서,
    디코더 및 캐시를 더 포함하고,
    상기 캐시 및 상기 실행 파이프라인은 동시에 상기 디코더로부터 명령어들을 수신하는
    프로세서.
  12. 제 1 항에 있어서,
    스레드들의 생성을 제어하기 위한 스레드 관리 로직을 더 포함하고,
    여기서, 상기 스레드 관리 로직은 상기 스레드들의 프로그램 순서를 명시하기 위한 구조를 포함하고, 또한, 상기 스레드 관리 로직은 스레드 의존도와 관계없이 프로그램 순서를 벗어나 상기 스레드들의 생성을 제어하는
    프로세서.
  13. 제 12 항에 있어서,
    상기 구조는 트리 구조인
    프로세서.
  14. 제 12 항에 있어서,
    상기 스레드 관리 로직은 상기 스레드들의 동적 생성을 제어하는
    프로세서.
  15. 제 1 항에 있어서,
    스레드들의 생성을 제어하기 위한 스레드 관리 로직을 더 포함하고,
    여기서, 상기 스레드 관리 로직은 상기 스레드들중 하나의 스레드의 시작 명령어를 표시함으로써 상기 스레드들중 다른 하나의 스레드의 종료 시점을 명시하기 위한 구조를 포함하는
    프로세서.
  16. 제 1 항에 있어서,
    스레드들의 생성을 제어하기 위한 스레드 관리 로직을 더 포함하고,
    여기서, 상기 스레드 관리 로직은 상기 스레드들을 계속 추적하고, 그 구조에 합류하기 위한 프로그램 순서가 더 높은 스레드의 표시를 위한 공간을 마련하기 위해 그 구조로부터 상기 스레드들중 하나의 표시를 제거하기 위한 구조를 포함하는
    프로세서.
  17. 제 1 항에 있어서,
    스레드들의 생성을 제어하기 위한 스레드 관리 로직을 더 포함하고,
    여기서, 상기 스레드 관리 로직은 상기 스레드들을 계속 추적하고, 그 패런트 스레드의 프로그램 카운터가 시작 카운트와 종료 카운트 사이의 범위 밖에 있는 경우에 트리 구조로부터 상기 스레드들중 하나의 스레드의 표시를 제거하기 위한 구조를 포함하는
    프로세서.
  18. 제 1 항에 있어서,
    스레드들의 생성을 제어하기 위한 스레드 관리 로직을 더 포함하고,
    여기서, 상기 스레드 관리 로직은 상기 트레이스 버퍼들중 이용가능한 하나의 버퍼를 포함하는 자원과 상기 트레이스 버퍼들중 할당해제될 하나의 버퍼를 포함하는 자원을 표시하기 위한 구조를 포함하는
    프로세서.
  19. 제 1 항에 있어서,
    스레드들의 생성을 제어하기 위한 스레드 관리 로직을 더 포함하고,
    여기서, 상기 스레드 관리 로직은 상기 트레이스 버퍼들중 회수된 스레드에 사용된 하나의 버퍼를 포함하는 자원을 프로그램 순서로 가장 새로운 스레드에 할당하는
    프로세서.
  20. 제 1 항에 있어서,
    스레드들의 생성을 제어하기 위한 스레드 관리 로직을 더 포함하고,
    여기서, 상기 스레드 관리 로직은 스레드의 시작과 종료를 명시적으로 구별하는 명령어들에 기반하여 상기 스레드들중 적어도 하나의 스레드의 생성을 제어하는
    프로세서.
  21. 제 1 항에 있어서,
    상기 트레이스 버퍼들은 상기 명령어들중 적어도 일부의 명령어의 결과를 홀드하는
    프로세서.
  22. 제 1 항에 있어서,
    상기 프로세서는 컴퓨터 시스템 내에 존재하는
    프로세서.
  23. 제 22 항에 있어서,
    상기 컴퓨터 시스템은 멀티-프로세서 컴퓨터 시스템인
    프로세서.
  24. 스레드 관리 로직;
    상기 스레드 관리 로직의 제어 하에 스레드를 생성하기 위한 프로그램 카운터 - 여기서, 상기 스레드는 스레드 의존도에 관계없이 프로그램 순서를 벗어나 생성됨 - ;
    상기 스레드의 적어도 일부를 동시에 실행하기 위한 실행 파이프라인;
    잘못 추론된 명령어에 의해 야기되는 스레드들의 실행에서의 스레드 의존도를 수반하는 추론 에러를 검출하기 위한 검출회로;
    상기 실행 파이프라인 외부에 있으며, 상기 잘못 추론된 명령어를 포함하는 스레드들의 명령어와 상기 명령어들의 적어도 일부의 명령어의 결과를 홀드하기 위한 트레이스 버퍼들; 및
    상기 명령어들중 적어도 일부의 명령어 - 존재하는 경우 - 를 상기 잘못 추론된 명령어에 의존하는 것으로서 식별하고, 상기 잘못 추론된 명령어들 및 상기 식별된 종속 명령어들중 적어도 일부의 명령어 - 존재하는 경우 - 의 재실행을 트리거시키기 위한 트리거링 로직
    을 포함하는 프로세서.
  25. 제 24 항에 있어서,
    상기 스레드는 상기 실행 파이프라인이 포함된 칩 외부로부터 기원하는 프로그램의 명령어로부터 생성되는
    프로세서.
  26. 제 24 항에 있어서,
    상기 트리거링 로직은, 상기 검출회로에 접속되어 잘못 추론된 명령어의 리플레이를 재실행을 트리거시키기 위한 리플레이 트리거링 로직인
    프로세서.
  27. 제 24 항에 있어서,
    상기 트레이스 버퍼들 내의 명령어들의 적어도 일부의 명령어들의 최종 회수를 제어하기 위한 최종 회수 로직을 더 포함하고,
    상기 명령어들의 일부는 상기 실행 파이프라인에서의 실행 이후에 초기 회수될 수 있는
    프로세서.
  28. 제 24 항에 있어서,
    상기 스레드 관리 로직은 상기 스레드들의 동적 생성을 제어하는
    프로세서.
  29. 스레드들의 적어도 일부를 동시에 실행하기 위한 실행 파이프라인;
    잘못 추론된 명령어들에 의해 야기되는 스레드들의 실행에서의 스레드 의존도를 수반하는 추론 에러를 검출하기 위한 검출회로;
    상기 실행 파이프라인 외부에 있으며, 상기 잘못 추론된 명령어들을 포함하는 스레드들의 명령어들와 상기 명령어들의 적어도 일부의 명령어들의 결과를 홀드하기 위한 트레이스 버퍼들; 및
    상기 명령어들중 적어도 일부의 명령어 - 존재하는 경우 - 를 상기 잘못 추론된 명령어들중 적어도 하나의 명령어에 의존하는 것으로서 식별하고, 상기 잘못 추론된 명령어들 및 상기 식별된 종속 명령어들중 적어도 일부의 명령어 - 존재하는 경우 - 의 재실행을 트리거시키기 위한 트리거링 로직
    을 포함하는 프로세서.
KR10-2000-7006662A 1997-12-16 1998-12-11 실행 파이프라인 외부에 복수의 프로그램 카운터 및트레이스 버퍼를 구비한 프로세서 KR100388947B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US08/992,375 1997-12-16
US8/992,375 1997-12-16
US08/992,375 US6182210B1 (en) 1997-12-16 1997-12-16 Processor having multiple program counters and trace buffers outside an execution pipeline

Publications (2)

Publication Number Publication Date
KR20010033242A KR20010033242A (ko) 2001-04-25
KR100388947B1 true KR100388947B1 (ko) 2003-06-25

Family

ID=25538268

Family Applications (1)

Application Number Title Priority Date Filing Date
KR10-2000-7006662A KR100388947B1 (ko) 1997-12-16 1998-12-11 실행 파이프라인 외부에 복수의 프로그램 카운터 및트레이스 버퍼를 구비한 프로세서

Country Status (11)

Country Link
US (3) US6182210B1 (ko)
EP (1) EP1068570B1 (ko)
JP (1) JP3957455B2 (ko)
KR (1) KR100388947B1 (ko)
CN (1) CN100390727C (ko)
AU (1) AU1913799A (ko)
BR (1) BR9813650A (ko)
DE (1) DE69829693T2 (ko)
HK (1) HK1031005A1 (ko)
TW (1) TW406239B (ko)
WO (1) WO1999031580A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101079001B1 (ko) 2008-06-30 2011-11-01 인텔 코포레이션 스레드 및 스레드 종속성 관리 방법 및 장치

Families Citing this family (192)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR2728559B1 (fr) * 1994-12-23 1997-01-31 Saint Gobain Vitrage Substrats en verre revetus d'un empilement de couches minces a proprietes de reflexion dans l'infrarouge et/ou dans le domaine du rayonnement solaire
US6463522B1 (en) * 1997-12-16 2002-10-08 Intel Corporation Memory system for ordering load and store instructions in a processor that performs multithread execution
US6772324B2 (en) 1997-12-17 2004-08-03 Intel Corporation Processor having multiple program counters and trace buffers outside an execution pipeline
JP3116901B2 (ja) * 1998-04-28 2000-12-11 日本電気株式会社 プログラム検査方法、プログラム検査装置及びプログラム検査プログラムを記録した記録媒体
US6412067B1 (en) 1998-08-11 2002-06-25 Intel Corporation Backing out of a processor architectural state
US6463580B1 (en) * 1998-11-18 2002-10-08 Intel Corporation Parallel processing utilizing highly correlated data values
US6704856B1 (en) 1999-02-01 2004-03-09 Hewlett-Packard Development Company, L.P. Method for compacting an instruction queue
US6738896B1 (en) 1999-02-01 2004-05-18 Hewlett-Packard Development Company, L.P. Method and apparatus for determining availability of a queue which allows random insertion
US6353881B1 (en) * 1999-05-17 2002-03-05 Sun Microsystems, Inc. Supporting space-time dimensional program execution by selectively versioning memory updates
US6463526B1 (en) * 1999-06-07 2002-10-08 Sun Microsystems, Inc. Supporting multi-dimensional space-time computing through object versioning
US6640315B1 (en) * 1999-06-26 2003-10-28 Board Of Trustees Of The University Of Illinois Method and apparatus for enhancing instruction level parallelism
US6889319B1 (en) * 1999-12-09 2005-05-03 Intel Corporation Method and apparatus for entering and exiting multiple threads within a multithreaded processor
US7051329B1 (en) * 1999-12-28 2006-05-23 Intel Corporation Method and apparatus for managing resources in a multithreaded processor
US6484254B1 (en) * 1999-12-30 2002-11-19 Intel Corporation Method, apparatus, and system for maintaining processor ordering by checking load addresses of unretired load instructions against snooping store addresses
US6438673B1 (en) * 1999-12-30 2002-08-20 Intel Corporation Correlated address prediction
DE10000960C1 (de) * 2000-01-12 2001-12-20 Infineon Technologies Ag Datenverarbeitungsvorrichtung
US6609247B1 (en) * 2000-02-18 2003-08-19 Hewlett-Packard Development Company Method and apparatus for re-creating the trace of an emulated instruction set when executed on hardware native to a different instruction set field
US7856633B1 (en) 2000-03-24 2010-12-21 Intel Corporation LRU cache replacement for a partitioned set associative cache
US6823446B1 (en) * 2000-04-13 2004-11-23 International Business Machines Corporation Apparatus and method for performing branch predictions using dual branch history tables and for updating such branch history tables
US7363633B1 (en) * 2000-04-24 2008-04-22 Microsoft Corporation Registering and storing dependencies among applications and objects in a computer system and communicating the dependencies to a recovery or backup service
US7847803B1 (en) * 2000-07-26 2010-12-07 Ati Technologies Ulc Method and apparatus for interleaved graphics processing
US6907520B2 (en) * 2001-01-11 2005-06-14 Sun Microsystems, Inc. Threshold-based load address prediction and new thread identification in a multithreaded microprocessor
US20020099759A1 (en) * 2001-01-24 2002-07-25 Gootherts Paul David Load balancer with starvation avoidance
US6950927B1 (en) * 2001-04-13 2005-09-27 The United States Of America As Represented By The Secretary Of The Navy System and method for instruction-level parallelism in a programmable multiple network processor environment
US6968447B1 (en) 2001-04-13 2005-11-22 The United States Of America As Represented By The Secretary Of The Navy System and method for data forwarding in a programmable multiple network processor environment
US7320065B2 (en) 2001-04-26 2008-01-15 Eleven Engineering Incorporated Multithread embedded processor with input/output capability
US7356673B2 (en) * 2001-04-30 2008-04-08 International Business Machines Corporation System and method including distributed instruction buffers for storing frequently executed instructions in predecoded form
WO2003044688A2 (en) * 2001-11-19 2003-05-30 Igor Anatolievich Abrosimov Latency tolerant processing equipment
US7069424B2 (en) * 2002-01-02 2006-06-27 Intel Corporation Placing front instruction in replay loop to front to place side instruction into execution stream upon determination of criticality
GB0209670D0 (en) * 2002-04-26 2002-06-05 Easics Nv Efficient packet processing pipelining device and method
WO2003102758A1 (en) * 2002-05-31 2003-12-11 University Of Delaware Method and apparatus for real-time multithreading
US7941651B1 (en) 2002-06-27 2011-05-10 Intel Corporation Method and apparatus for combining micro-operations to process immediate data
US7111148B1 (en) 2002-06-27 2006-09-19 Intel Corporation Method and apparatus for compressing relative addresses
US7010665B1 (en) 2002-06-27 2006-03-07 Intel Corporation Method and apparatus for decompressing relative addresses
US7103751B1 (en) 2002-06-27 2006-09-05 Intel Corporation Method and apparatus for representation of an address in canonical form
US7298740B2 (en) * 2002-07-11 2007-11-20 Sprint Communications Company L.P. Centralized service control for a telecommunication system
US20040064685A1 (en) * 2002-09-27 2004-04-01 Hung Nguyen System and method for real-time tracing and profiling of a superscalar processor implementing conditional execution
US7924828B2 (en) * 2002-10-08 2011-04-12 Netlogic Microsystems, Inc. Advanced processor with mechanism for fast packet queuing operations
US7461215B2 (en) * 2002-10-08 2008-12-02 Rmi Corporation Advanced processor with implementation of memory ordering on a ring based data movement network
US20050033889A1 (en) * 2002-10-08 2005-02-10 Hass David T. Advanced processor with interrupt delivery mechanism for multi-threaded multi-CPU system on a chip
US7346757B2 (en) * 2002-10-08 2008-03-18 Rmi Corporation Advanced processor translation lookaside buffer management in a multithreaded system
US8478811B2 (en) * 2002-10-08 2013-07-02 Netlogic Microsystems, Inc. Advanced processor with credit based scheme for optimal packet flow in a multi-processor system on a chip
US7334086B2 (en) * 2002-10-08 2008-02-19 Rmi Corporation Advanced processor with system on a chip interconnect technology
US7461213B2 (en) 2002-10-08 2008-12-02 Rmi Corporation Advanced processor system using request, data, snoop, and response rings
US20050044324A1 (en) * 2002-10-08 2005-02-24 Abbas Rashid Advanced processor with mechanism for maximizing resource usage in an in-order pipeline with multiple threads
US7984268B2 (en) * 2002-10-08 2011-07-19 Netlogic Microsystems, Inc. Advanced processor scheduling in a multithreaded system
US7961723B2 (en) * 2002-10-08 2011-06-14 Netlogic Microsystems, Inc. Advanced processor with mechanism for enforcing ordering between information sent on two independent networks
US8176298B2 (en) * 2002-10-08 2012-05-08 Netlogic Microsystems, Inc. Multi-core multi-threaded processing systems with instruction reordering in an in-order pipeline
US8037224B2 (en) 2002-10-08 2011-10-11 Netlogic Microsystems, Inc. Delegating network processor operations to star topology serial bus interfaces
US20050033831A1 (en) * 2002-10-08 2005-02-10 Abbas Rashid Advanced processor with a thread aware return address stack optimally used across active threads
US7627721B2 (en) * 2002-10-08 2009-12-01 Rmi Corporation Advanced processor with cache coherency
US8015567B2 (en) 2002-10-08 2011-09-06 Netlogic Microsystems, Inc. Advanced processor with mechanism for packet distribution at high line rate
US9088474B2 (en) * 2002-10-08 2015-07-21 Broadcom Corporation Advanced processor with interfacing messaging network to a CPU
CN1519703B (zh) * 2003-01-23 2010-05-05 英业达股份有限公司 可组合挂接的计算机多线程测试系统及其方法
US20040154010A1 (en) * 2003-01-31 2004-08-05 Pedro Marcuello Control-quasi-independent-points guided speculative multithreading
US7200542B1 (en) * 2003-02-21 2007-04-03 Hewlett-Packard Development Company, L.P. Method and apparatus for biased identification of potential data sharing locations
US7426628B2 (en) * 2003-03-14 2008-09-16 National Instruments Corporation Run-time node prefetch prediction in dataflow graphs
US7496921B2 (en) * 2003-08-29 2009-02-24 Intel Corporation Processing block with integrated light weight multi-threading support
WO2005029318A2 (en) * 2003-09-19 2005-03-31 University Of Delaware Methods and products for processing loop nests
US7395527B2 (en) 2003-09-30 2008-07-01 International Business Machines Corporation Method and apparatus for counting instruction execution and data accesses
US7133969B2 (en) * 2003-10-01 2006-11-07 Advanced Micro Devices, Inc. System and method for handling exceptional instructions in a trace cache based processor
US8381037B2 (en) * 2003-10-09 2013-02-19 International Business Machines Corporation Method and system for autonomic execution path selection in an application
US7555633B1 (en) 2003-11-03 2009-06-30 Advanced Micro Devices, Inc. Instruction cache prefetch based on trace cache eviction
US8069336B2 (en) * 2003-12-03 2011-11-29 Globalfoundries Inc. Transitioning from instruction cache to trace cache on label boundaries
US20050138333A1 (en) * 2003-12-19 2005-06-23 Samra Nicholas G. Thread switching mechanism
US7213126B1 (en) 2004-01-12 2007-05-01 Advanced Micro Devices, Inc. Method and processor including logic for storing traces within a trace cache
US7895382B2 (en) 2004-01-14 2011-02-22 International Business Machines Corporation Method and apparatus for qualifying collection of performance monitoring events by types of interrupt when interrupt occurs
US7415705B2 (en) 2004-01-14 2008-08-19 International Business Machines Corporation Autonomic method and apparatus for hardware assist for patching code
US7177982B2 (en) * 2004-01-16 2007-02-13 International Business Machines Corporation Method to maintain order between multiple queues with different ordering requirements in a high frequency system
US7490218B2 (en) * 2004-01-22 2009-02-10 University Of Washington Building a wavecache
US7657882B2 (en) * 2004-01-22 2010-02-02 University Of Washington Wavescalar architecture having a wave order memory
US7571302B1 (en) * 2004-02-04 2009-08-04 Lei Chen Dynamic data dependence tracking and its application to branch prediction
US8135915B2 (en) * 2004-03-22 2012-03-13 International Business Machines Corporation Method and apparatus for hardware assistance for prefetching a pointer to a data structure identified by a prefetch indicator
US7480899B2 (en) 2004-03-22 2009-01-20 International Business Machines Corporation Method and apparatus for autonomic test case feedback using hardware assistance for code coverage
US7421684B2 (en) * 2004-03-22 2008-09-02 International Business Machines Corporation Method and apparatus for autonomic test case feedback using hardware assistance for data coverage
US7197630B1 (en) 2004-04-12 2007-03-27 Advanced Micro Devices, Inc. Method and system for changing the executable status of an operation following a branch misprediction without refetching the operation
US7574439B2 (en) * 2004-05-20 2009-08-11 International Business Machines Corporation Managing a nested request
US7365007B2 (en) * 2004-06-30 2008-04-29 Intel Corporation Interconnects with direct metalization and conductive polymer
US20060009265A1 (en) * 2004-06-30 2006-01-12 Clapper Edward O Communication blackout feature
US7509484B1 (en) 2004-06-30 2009-03-24 Sun Microsystems, Inc. Handling cache misses by selectively flushing the pipeline
US7290116B1 (en) 2004-06-30 2007-10-30 Sun Microsystems, Inc. Level 2 cache index hashing to avoid hot spots
US7366829B1 (en) 2004-06-30 2008-04-29 Sun Microsystems, Inc. TLB tag parity checking without CAM read
US7571284B1 (en) 2004-06-30 2009-08-04 Sun Microsystems, Inc. Out-of-order memory transactions in a fine-grain multithreaded/multi-core processor
US7543132B1 (en) 2004-06-30 2009-06-02 Sun Microsystems, Inc. Optimizing hardware TLB reload performance in a highly-threaded processor with multiple page sizes
US7519796B1 (en) 2004-06-30 2009-04-14 Sun Microsystems, Inc. Efficient utilization of a store buffer using counters
US8166282B2 (en) * 2004-07-21 2012-04-24 Intel Corporation Multi-version register file for multithreading processors with live-in precomputation
US20060026371A1 (en) * 2004-07-30 2006-02-02 Chrysos George Z Method and apparatus for implementing memory order models with order vectors
US7278058B1 (en) * 2004-08-25 2007-10-02 Unisys Corporation Methods and apparatus to diagnose software
US7458065B2 (en) * 2004-09-21 2008-11-25 Intel Corporation Selection of spawning pairs for a speculative multithreaded processor
US7681196B2 (en) * 2004-11-18 2010-03-16 Oracle International Corporation Providing optimal number of threads to applications performing multi-tasking using threads
US8756605B2 (en) * 2004-12-17 2014-06-17 Oracle America, Inc. Method and apparatus for scheduling multiple threads for execution in a shared microprocessor pipeline
US7516313B2 (en) * 2004-12-29 2009-04-07 Intel Corporation Predicting contention in a processor
US7430643B2 (en) * 2004-12-30 2008-09-30 Sun Microsystems, Inc. Multiple contexts for efficient use of translation lookaside buffer
US7657891B2 (en) * 2005-02-04 2010-02-02 Mips Technologies, Inc. Multithreading microprocessor with optimized thread scheduler for increasing pipeline utilization efficiency
US7490230B2 (en) * 2005-02-04 2009-02-10 Mips Technologies, Inc. Fetch director employing barrel-incrementer-based round-robin apparatus for use in multithreading microprocessor
US7853777B2 (en) * 2005-02-04 2010-12-14 Mips Technologies, Inc. Instruction/skid buffers in a multithreading microprocessor that store dispatched instructions to avoid re-fetching flushed instructions
US7631130B2 (en) * 2005-02-04 2009-12-08 Mips Technologies, Inc Barrel-incrementer-based round-robin apparatus and instruction dispatch scheduler employing same for use in multithreading microprocessor
DE102005009083B4 (de) * 2005-02-28 2007-05-10 Infineon Technologies Ag Multithread-Prozessor mit einer Synchronisationseinheit und Verfahren zum Betreiben eines solchen
US7475232B2 (en) * 2005-07-19 2009-01-06 International Business Machines Corporation Performance of an in-order processor by no longer requiring a uniform completion point across different execution pipelines
US8205200B2 (en) * 2005-11-29 2012-06-19 Intel Corporation Compiler-based scheduling optimization hints for user-level threads
US7558946B2 (en) * 2005-12-12 2009-07-07 Intel Corporation Breaking a lock situation in a processor without detection of the lock situation using a multi-level approach
US7945901B2 (en) * 2006-08-16 2011-05-17 Seiko Epson Corporation System and method for facilitating software profiling procedures
US7590784B2 (en) * 2006-08-31 2009-09-15 Intel Corporation Detecting and resolving locks in a memory unit
US20080077777A1 (en) * 2006-09-25 2008-03-27 Arm Limited Register renaming for instructions having unresolved condition codes
US8516462B2 (en) * 2006-10-09 2013-08-20 International Business Machines Corporation Method and apparatus for managing a stack
US7472260B2 (en) 2006-10-10 2008-12-30 P.A. Semi, Inc. Early retirement of store operation past exception reporting pipeline stage in strongly ordered processor with load/store queue entry retained until completion
US7590826B2 (en) * 2006-11-06 2009-09-15 Arm Limited Speculative data value usage
US20080140979A1 (en) * 2006-12-12 2008-06-12 Kim Sang Cheol Method of allocating stack in multi-threaded sensor operating system environment
US8578347B1 (en) * 2006-12-28 2013-11-05 The Mathworks, Inc. Determining stack usage of generated code from a model
US20080163230A1 (en) * 2006-12-29 2008-07-03 Fernando Latorre Method and apparatus for selection among multiple execution threads
US8291197B2 (en) * 2007-02-12 2012-10-16 Oracle America, Inc. Aggressive loop parallelization using speculative execution mechanisms
US7739456B1 (en) * 2007-03-06 2010-06-15 Oracle America, Inc. Method and apparatus for supporting very large transactions
US20090133022A1 (en) * 2007-11-15 2009-05-21 Karim Faraydon O Multiprocessing apparatus, system and method
US9596324B2 (en) * 2008-02-08 2017-03-14 Broadcom Corporation System and method for parsing and allocating a plurality of packets to processor core threads
US8589890B2 (en) * 2008-06-03 2013-11-19 International Business Machines Corporation Mechanism for maintaining detailed trace information relevant to the current operation being processed
US8423751B2 (en) * 2009-03-04 2013-04-16 Via Technologies, Inc. Microprocessor with fast execution of call and return instructions
US20100306509A1 (en) * 2009-05-29 2010-12-02 Via Technologies, Inc. Out-of-order execution microprocessor with reduced store collision load replay reduction
US8533436B2 (en) * 2009-06-26 2013-09-10 Intel Corporation Adaptively handling remote atomic execution based upon contention prediction
US10698859B2 (en) 2009-09-18 2020-06-30 The Board Of Regents Of The University Of Texas System Data multicasting with router replication and target instruction identification in a distributed multi-core processing architecture
US8676818B2 (en) * 2010-05-03 2014-03-18 International Business Machines Corporation Dynamic storage and retrieval of process graphs representative of business processes and extraction of formal process models therefrom
US8619084B2 (en) 2010-05-03 2013-12-31 International Business Machines Corporation Dynamic adaptive process discovery and compliance
JP5707011B2 (ja) 2010-06-18 2015-04-22 ボード・オブ・リージエンツ,ザ・ユニバーシテイ・オブ・テキサス・システム 統合分岐先・述語予測
US9104991B2 (en) * 2010-07-30 2015-08-11 Bank Of America Corporation Predictive retirement toolset
US8516577B2 (en) 2010-09-22 2013-08-20 Intel Corporation Regulating atomic memory operations to prevent denial of service attack
WO2012087402A1 (en) * 2010-12-23 2012-06-28 Intel Corporation Method and system for detecting abnormal interleavings in concurrent programs
US9612934B2 (en) * 2011-10-28 2017-04-04 Cavium, Inc. Network processor with distributed trace buffers
US8935574B2 (en) 2011-12-16 2015-01-13 Advanced Micro Devices, Inc. Correlating traces in a computing system
US9268569B2 (en) * 2012-02-24 2016-02-23 Apple Inc. Branch misprediction behavior suppression on zero predicate branch mispredict
US9606800B1 (en) * 2012-03-15 2017-03-28 Marvell International Ltd. Method and apparatus for sharing instruction scheduling resources among a plurality of execution threads in a multi-threaded processor architecture
WO2013147878A1 (en) * 2012-03-30 2013-10-03 Intel Corporation Prediction-based thread selection in a multithreading processor
US8832500B2 (en) 2012-08-10 2014-09-09 Advanced Micro Devices, Inc. Multiple clock domain tracing
US8959398B2 (en) 2012-08-16 2015-02-17 Advanced Micro Devices, Inc. Multiple clock domain debug capability
US9384002B2 (en) * 2012-11-16 2016-07-05 International Business Machines Corporation Speculative finish of instruction execution in a processor core
US9229896B2 (en) 2012-12-21 2016-01-05 Apple Inc. Systems and methods for maintaining an order of read and write transactions in a computing system
US9830224B2 (en) * 2013-03-15 2017-11-28 Nvidia Corporation Selective fault stalling for a GPU memory pipeline in a unified virtual memory system
US10725889B2 (en) * 2013-08-28 2020-07-28 Micro Focus Llc Testing multi-threaded applications
US20150241219A1 (en) * 2014-02-25 2015-08-27 Ford Global Technologies, Llc Method and Apparatus for Providing a Navigation Route Having Multiple Associated Points of Interest
US9933841B2 (en) * 2014-04-17 2018-04-03 Arm Limited Reuse of results of back-to-back micro-operations
CN105094750B (zh) * 2014-04-25 2018-08-21 华为技术有限公司 一种多线程处理器的返回地址预测方法和装置
US10069767B1 (en) * 2014-10-31 2018-09-04 Netronome Systems, Inc. Method of dynamically allocating buffers for packet data received onto a networking device
US9626313B2 (en) * 2014-12-18 2017-04-18 Qualcomm Incorporated Trace buffer based replay for context switching
US10180841B2 (en) 2014-12-22 2019-01-15 Centipede Semi Ltd. Early termination of segment monitoring in run-time code parallelization
US9348595B1 (en) 2014-12-22 2016-05-24 Centipede Semi Ltd. Run-time code parallelization with continuous monitoring of repetitive instruction sequences
US9135015B1 (en) 2014-12-25 2015-09-15 Centipede Semi Ltd. Run-time code parallelization with monitoring of repetitive instruction sequences during branch mis-prediction
US9996354B2 (en) * 2015-01-09 2018-06-12 International Business Machines Corporation Instruction stream tracing of multi-threaded processors
US9208066B1 (en) * 2015-03-04 2015-12-08 Centipede Semi Ltd. Run-time code parallelization with approximate monitoring of instruction sequences
US10296350B2 (en) 2015-03-31 2019-05-21 Centipede Semi Ltd. Parallelized execution of instruction sequences
US10296346B2 (en) 2015-03-31 2019-05-21 Centipede Semi Ltd. Parallelized execution of instruction sequences based on pre-monitoring
WO2016156955A1 (en) * 2015-03-31 2016-10-06 Centipede Semi Ltd. Parallelized execution of instruction sequences based on premonitoring
US9715390B2 (en) 2015-04-19 2017-07-25 Centipede Semi Ltd. Run-time parallelization of code execution based on an approximate register-access specification
US9952867B2 (en) 2015-06-26 2018-04-24 Microsoft Technology Licensing, Llc Mapping instruction blocks based on block size
US10191747B2 (en) 2015-06-26 2019-01-29 Microsoft Technology Licensing, Llc Locking operand values for groups of instructions executed atomically
US11755484B2 (en) 2015-06-26 2023-09-12 Microsoft Technology Licensing, Llc Instruction block allocation
US10409606B2 (en) 2015-06-26 2019-09-10 Microsoft Technology Licensing, Llc Verifying branch targets
US10169044B2 (en) 2015-06-26 2019-01-01 Microsoft Technology Licensing, Llc Processing an encoding format field to interpret header information regarding a group of instructions
US9940136B2 (en) 2015-06-26 2018-04-10 Microsoft Technology Licensing, Llc Reuse of decoded instructions
US10346168B2 (en) 2015-06-26 2019-07-09 Microsoft Technology Licensing, Llc Decoupled processor instruction window and operand buffer
US9946548B2 (en) 2015-06-26 2018-04-17 Microsoft Technology Licensing, Llc Age-based management of instruction blocks in a processor instruction window
US10409599B2 (en) 2015-06-26 2019-09-10 Microsoft Technology Licensing, Llc Decoding information about a group of instructions including a size of the group of instructions
US10175988B2 (en) 2015-06-26 2019-01-08 Microsoft Technology Licensing, Llc Explicit instruction scheduler state information for a processor
US11016770B2 (en) 2015-09-19 2021-05-25 Microsoft Technology Licensing, Llc Distinct system registers for logical processors
US10776115B2 (en) 2015-09-19 2020-09-15 Microsoft Technology Licensing, Llc Debug support for block-based processor
US10452399B2 (en) 2015-09-19 2019-10-22 Microsoft Technology Licensing, Llc Broadcast channel architectures for block-based processors
US20170083327A1 (en) 2015-09-19 2017-03-23 Microsoft Technology Licensing, Llc Implicit program order
US10768936B2 (en) 2015-09-19 2020-09-08 Microsoft Technology Licensing, Llc Block-based processor including topology and control registers to indicate resource sharing and size of logical processor
US10180840B2 (en) 2015-09-19 2019-01-15 Microsoft Technology Licensing, Llc Dynamic generation of null instructions
US10719321B2 (en) 2015-09-19 2020-07-21 Microsoft Technology Licensing, Llc Prefetching instruction blocks
US11126433B2 (en) 2015-09-19 2021-09-21 Microsoft Technology Licensing, Llc Block-based processor core composition register
US10031756B2 (en) 2015-09-19 2018-07-24 Microsoft Technology Licensing, Llc Multi-nullification
US10871967B2 (en) 2015-09-19 2020-12-22 Microsoft Technology Licensing, Llc Register read/write ordering
US10061584B2 (en) 2015-09-19 2018-08-28 Microsoft Technology Licensing, Llc Store nullification in the target field
US11681531B2 (en) 2015-09-19 2023-06-20 Microsoft Technology Licensing, Llc Generation and use of memory access instruction order encodings
US10936316B2 (en) 2015-09-19 2021-03-02 Microsoft Technology Licensing, Llc Dense read encoding for dataflow ISA
US10678544B2 (en) 2015-09-19 2020-06-09 Microsoft Technology Licensing, Llc Initiating instruction block execution using a register access instruction
US10095519B2 (en) 2015-09-19 2018-10-09 Microsoft Technology Licensing, Llc Instruction block address register
US10198263B2 (en) 2015-09-19 2019-02-05 Microsoft Technology Licensing, Llc Write nullification
US20170315812A1 (en) 2016-04-28 2017-11-02 Microsoft Technology Licensing, Llc Parallel instruction scheduler for block isa processor
US11531552B2 (en) 2017-02-06 2022-12-20 Microsoft Technology Licensing, Llc Executing multiple programs simultaneously on a processor core
US10275250B2 (en) * 2017-03-06 2019-04-30 Arm Limited Defer buffer
US10417002B2 (en) 2017-10-06 2019-09-17 International Business Machines Corporation Hazard detection of out-of-order execution of load and store instructions in processors without using real addresses
US11175924B2 (en) 2017-10-06 2021-11-16 International Business Machines Corporation Load-store unit with partitioned reorder queues with single cam port
US10394558B2 (en) 2017-10-06 2019-08-27 International Business Machines Corporation Executing load-store operations without address translation hardware per load-store unit port
US10534616B2 (en) * 2017-10-06 2020-01-14 International Business Machines Corporation Load-hit-load detection in an out-of-order processor
US10606590B2 (en) 2017-10-06 2020-03-31 International Business Machines Corporation Effective address based load store unit in out of order processors
US10606591B2 (en) 2017-10-06 2020-03-31 International Business Machines Corporation Handling effective address synonyms in a load-store unit that operates without address translation
US10572256B2 (en) 2017-10-06 2020-02-25 International Business Machines Corporation Handling effective address synonyms in a load-store unit that operates without address translation
CN111542808B (zh) * 2017-12-26 2024-03-22 三星电子株式会社 预测电子设备上运行应用的线程的最优数量的方法和系统
US10963379B2 (en) 2018-01-30 2021-03-30 Microsoft Technology Licensing, Llc Coupling wide memory interface to wide write back paths
US11513840B2 (en) * 2018-05-07 2022-11-29 Micron Technology, Inc. Thread creation on local or remote compute elements by a multi-threaded, self-scheduling processor
US10824429B2 (en) 2018-09-19 2020-11-03 Microsoft Technology Licensing, Llc Commit logic and precise exceptions in explicit dataflow graph execution architectures
CN112579169B (zh) * 2019-09-27 2024-04-09 阿里巴巴集团控股有限公司 处理器追踪流的生成方法及装置
US11494189B2 (en) 2020-02-21 2022-11-08 Pensando Systems Inc. Methods and systems for processing data in a programmable data processing pipeline that includes out-of-pipeline processing

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5153848A (en) 1988-06-17 1992-10-06 Bipolar Integrated Technology, Inc. Floating point processor with internal free-running clock
US5134693A (en) 1989-01-18 1992-07-28 Intel Corporation System for handling occurrence of exceptions during execution of microinstructions while running floating point and non-floating point instructions in parallel
US5142634A (en) 1989-02-03 1992-08-25 Digital Equipment Corporation Branch prediction
US5309561A (en) 1990-09-28 1994-05-03 Tandem Computers Incorporated Synchronous processor unit with interconnected, separately clocked processor sections which are automatically synchronized for data transfer operations
US5524250A (en) 1991-08-23 1996-06-04 Silicon Graphics, Inc. Central processing unit for processing a plurality of threads using dedicated general purpose registers and masque register for providing access to the registers
US5546593A (en) 1992-05-18 1996-08-13 Matsushita Electric Industrial Co., Ltd. Multistream instruction processor able to reduce interlocks by having a wait state for an instruction stream
US5313634A (en) * 1992-07-28 1994-05-17 International Business Machines Corporation Computer system branch prediction of subroutine returns
US5420990A (en) 1993-06-17 1995-05-30 Digital Equipment Corporation Mechanism for enforcing the correct order of instruction execution
US5548776A (en) 1993-09-30 1996-08-20 Intel Corporation N-wide bypass for data dependencies within register alias table
US5588126A (en) 1993-12-30 1996-12-24 Intel Corporation Methods and apparatus for fordwarding buffered store data on an out-of-order execution computer system
US5664137A (en) 1994-01-04 1997-09-02 Intel Corporation Method and apparatus for executing and dispatching store operations in a computer system
US5586278A (en) 1994-03-01 1996-12-17 Intel Corporation Method and apparatus for state recovery following branch misprediction in an out-of-order microprocessor
JP3547482B2 (ja) * 1994-04-15 2004-07-28 株式会社日立製作所 情報処理装置
US5613083A (en) 1994-09-30 1997-03-18 Intel Corporation Translation lookaside buffer that is non-blocking in response to a miss for use within a microprocessor capable of processing speculative instructions
US5802272A (en) 1994-12-19 1998-09-01 Digital Equipment Corporation Method and apparatus for tracing unpredictable execution flows in a trace buffer of a high-speed computer system
US5724565A (en) * 1995-02-03 1998-03-03 International Business Machines Corporation Method and system for processing first and second sets of instructions by first and second types of processing systems
US5812811A (en) * 1995-02-03 1998-09-22 International Business Machines Corporation Executing speculative parallel instructions threads with forking and inter-thread communication
US5832260A (en) * 1995-12-29 1998-11-03 Intel Corporation Processor microarchitecture for efficient processing of instructions in a program including a conditional program flow control instruction
US5754818A (en) 1996-03-22 1998-05-19 Sun Microsystems, Inc. Architecture and method for sharing TLB entries through process IDS
US5933627A (en) 1996-07-01 1999-08-03 Sun Microsystems Thread switch on blocked load or store using instruction thread field
US5887166A (en) 1996-12-16 1999-03-23 International Business Machines Corporation Method and system for constructing a program including a navigation instruction
US5961639A (en) * 1996-12-16 1999-10-05 International Business Machines Corporation Processor and method for dynamically inserting auxiliary instructions within an instruction stream during execution
US5881280A (en) 1997-07-25 1999-03-09 Hewlett-Packard Company Method and system for selecting instructions for re-execution for in-line exception recovery in a speculative execution processor

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101079001B1 (ko) 2008-06-30 2011-11-01 인텔 코포레이션 스레드 및 스레드 종속성 관리 방법 및 장치

Also Published As

Publication number Publication date
HK1031005A1 (en) 2001-05-25
US6182210B1 (en) 2001-01-30
KR20010033242A (ko) 2001-04-25
CN1286769A (zh) 2001-03-07
EP1068570B1 (en) 2005-04-06
US20010014941A1 (en) 2001-08-16
JP3957455B2 (ja) 2007-08-15
DE69829693T2 (de) 2006-01-12
BR9813650A (pt) 2000-10-03
US6247121B1 (en) 2001-06-12
EP1068570A4 (en) 2002-07-17
JP2002508564A (ja) 2002-03-19
AU1913799A (en) 1999-07-05
CN100390727C (zh) 2008-05-28
EP1068570A1 (en) 2001-01-17
DE69829693D1 (de) 2005-05-12
US6493820B2 (en) 2002-12-10
WO1999031580A1 (en) 1999-06-24
TW406239B (en) 2000-09-21

Similar Documents

Publication Publication Date Title
KR100388947B1 (ko) 실행 파이프라인 외부에 복수의 프로그램 카운터 및트레이스 버퍼를 구비한 프로세서
KR100388952B1 (ko) 비순서적 멀티스레드 실행을 수행하는 적재 및 저장명령어를 배열하기 위한 시스템
KR100382126B1 (ko) 오예측 이후에 재실행될 수 있는 명령어를 홀드하기 위한 파이프라인 외부의 트레이스 버퍼
US6772324B2 (en) Processor having multiple program counters and trace buffers outside an execution pipeline
KR100425805B1 (ko) 고성능투기적실행프로세서를위한구조및방법
CN109891393B (zh) 使用检查器处理器的主处理器错误检测
JP2898820B2 (ja) 自己並列化式のコンピュータ・システムおよび方法
RU2233470C2 (ru) Способ и устройство для блокировки сигнала синхронизации в многопоточном процессоре
CN111164578B (zh) 核内锁步模式的错误恢复
US7870369B1 (en) Abort prioritization in a trace-based processor
JP3014773B2 (ja) プロセサアーキテクチャ
US6415380B1 (en) Speculative execution of a load instruction by associating the load instruction with a previously executed store instruction
JP2597811B2 (ja) データ処理システム
JP3093639B2 (ja) プロセッサ内の資源割当て追跡方法及びそのシステム
US20020073357A1 (en) Multiprocessor with pair-wise high reliability mode, and method therefore
US20060179346A1 (en) Method for checkpointing instruction groups with out-of-order floating point instructions in a multi-threaded processor
US10545765B2 (en) Multi-level history buffer for transaction memory in a microprocessor
KR102170966B1 (ko) 고성능 비순차 실행 코어의 리오더 버퍼 관리 장치 및 방법
US7783863B1 (en) Graceful degradation in a trace-based processor

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

Year of fee payment: 11

FPAY Annual fee payment

Payment date: 20140603

Year of fee payment: 12

FPAY Annual fee payment

Payment date: 20150529

Year of fee payment: 13

LAPS Lapse due to unpaid annual fee