KR20060108644A - 트레이스 캐시 기반 프로세서에서 예외 명령어들을 처리하는 시스템 및 방법 - Google Patents

트레이스 캐시 기반 프로세서에서 예외 명령어들을 처리하는 시스템 및 방법 Download PDF

Info

Publication number
KR20060108644A
KR20060108644A KR1020067008482A KR20067008482A KR20060108644A KR 20060108644 A KR20060108644 A KR 20060108644A KR 1020067008482 A KR1020067008482 A KR 1020067008482A KR 20067008482 A KR20067008482 A KR 20067008482A KR 20060108644 A KR20060108644 A KR 20060108644A
Authority
KR
South Korea
Prior art keywords
trace
instructions
instruction
cache
exception
Prior art date
Application number
KR1020067008482A
Other languages
English (en)
Other versions
KR100993018B1 (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 KR20060108644A publication Critical patent/KR20060108644A/ko
Application granted granted Critical
Publication of KR100993018B1 publication Critical patent/KR100993018B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • 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/3802Instruction prefetching
    • G06F9/3808Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • 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/3802Instruction prefetching
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack

Abstract

시스템은 명령어 캐시(106), 추적 캐시(160) 및 추적 발생기(170)를 포함하며, 상기 추적 캐시(160)는 다수의 추적 캐시 엔트리들(162)을 포함하고, 그리고 상기 추적 발생기(170)는 상기 명령어 캐시(106) 및 추적 캐시(160)에 연결된다. 상기 추적 발생기(170)는 다수의 추적 캐시 엔트리들(162) 중 하나에 저장을 위해 상기 명령어 캐시(106)에 의해 명령어들 출력의 그룹을 수신하도록 구성된다. 상기 추적 발생기(170)는 상기 명령어들의 그룹 내에 예외 명령어를 검출하도록 구성되고 상기 예외 명령어가 어떠한 비예외(non-exceptional) 명령어와도 상기 다수의 추적 캐시 엔트리들(162) 중 동일한 추적 캐시 엔트리에 저장되는 것을 방지하도록 구성된다.

Description

추적 캐시 기반 프로세서에서 예외 명령어들을 처리하는 시스템 및 방법{SYSTEM AND METHOD FOR HANDLING EXCEPTIONAL INSTRUCTIONS IN A TRACE CACHE BASED PROCESSOR}
본 발명은 마크로프로세서 분야에 관한 것이고, 더욱 상세하게는 추적 캐시(trace cache)를 갖는 프로세서들에 관한 것이다.
프로세서에서 처리되는 명령어(instruction)들은 1들 및 0들의 시퀀스(sequence)로 인코딩된다. 일부 프로세서 아키텍처들에서, 명령어들은 바이트(byte)들의 특정 수와 같은 고정 길이로 인코딩된다. x86 구조와 같은 다른 아키텍처들에서 명령어들의 길이는 다양하다. 상기 x86 프로세서 아키텍처는 가변 길이 명령어 집합(variable length instruction set)(즉, 다른 바이트들의 수에 의해 각각 규정된 가변 명령어들이 있는 명령어 집합)을 규정한다. 예를 들어, 상기 80386 및 x86의
하기의 상세한 설명을 첨부된 도면과 함께 고려할 때 본 발명을 더욱 잘 이해할 수 있다.
도 1은 프로세서의 일 실시예를 도시한다.
도 2는 일 실시예에 따른 추적 캐시의 블록 다이어그램이다.
도 3A는 일 실시예에 따른 예시적인 추적 캐시 엔트리를 예시한다.
도 3B는 일 실시예에 따른 추적의 각 오퍼레이션이 속하는 활성 그룹(liveness group)을 식별하는데 사용되는 활성 엔코딩의 테이블이다.
도 4는 일 실시예에 따른 추적 캐시에 저장을 위한 추적들을 생성시키는 방법의 일 실시예의 흐름챠트이다.
도 5는 일 실시예에 따른 예외 명령어를 포함하는 추적을 실행하는 방법의 일 실시예의 흐름챠트이다.
도 6은 일 실시예에 따른 컴퓨터 시스템의 블록 다이어그램을 도시한다
도 7은 다른 실시예에 따른 컴퓨터 시스템의 블록 다이어그램이다.
본 발명은 다양한 수정들 및 대체 형상들이 가능하지만, 이들의 특정 실시예들이 도면에서 예시로서 도시되고 본 명세서에서 상세하게 설명될 것이다. 그러나 이들에 대한 도면들 및 상세한 설명은 본 발명을 개시된 특정 형태로 제한하기 위함이 아니고, 첨부된 청구항들에 의해 정의된 본 발명의 정신 및 범위 내에 있는 모든 수정물, 균등물 및 대체물들을 포함하도록 의도된다. 게다가, 단어 "이다"는 본원을 통해 허용적인 의미(즉, 가능성을 갖는, 할 수 있는)로 사용되며 필수적인 의미(즉, 강제성)로 사용되지 않음을 주목하자. 용어 "포함한다" 및 이의 파생어는 "포함하지만, 이에 한정되지 않는다"를 의미한다. 용어 "접속된"은 "직접 또는 간접 접속된"을 의미하고 "연결된"은 "직접 또는 간접 연결된"을 의미한다.
트레이스 캐시 기반의 프로세서 내의 예외 명령들을 취급하기 위한 방법들 및 시스템들의 다양한 실시예들이 개시된다. 임의의 실시예들에 있어서, 이 시스템은 명령 캐시와, 복수의 트레이스 캐시 엔트리들을 포함한 트레이스 캐시와, 그리고 명령 캐시 및 트레이스 캐시에 결합되는 트레이스 생성기를 포함한다. 트레이스 생성기는 명령 캐시에 의해 출력되는 명령들의 그룹을 수신하여, 복수의 트레이스 캐시 엔트리들중 하나에 저장하도록 구성된다. 트레이스 생성기는, 명령들의 그룹 내에서 예외 명령을 검출한 다음, 그 예외 명령이 임의의 비 예외 명령으로서 복수의 트레이스 캐시 엔트리들중 동일한 것에 저장되는 것을 막도록 구성된다. 일 실시예에서, 트레이스 생성기는 트레이스 캐시 내에 예외 명령을 전혀 저장하지 않도록 구성된다. 다른 실시예에서, 트레이스 생성기는 예외 명령을 1개 이상의 다른 명령들 이외의 다른 트레이스 캐시 엔트리에 저장하고, 다른 트레이스 캐시 엔트리에 예외 명령을 갖는 임의의 다른 명령을 저장하도록 구성된다. 트레이스 생성기는 명령들을 적어도 부분적으로 디코드된 형태로 트레이스 캐시에 저장하도록 구성된다.
상기 시스템은 또한 실행된 명령들을 퇴거(retire)하도록 결합된 퇴거 큐를 포함한다. 퇴거 큐는, 상기 명령과 동일한 트레이스 캐시 엔트리에 포함되는 모든 명령들이 퇴거 준비가 될 때 까지, 트레이스 캐시로부터 페치된 임의의 명령의 퇴거를 막도록 구성된다. 대안적으로, 퇴거 큐는, 상기 명령과 동일한 트레이스 캐시 엔트리 내의 동일한 활성 그룹에 포함되는 모든 명령들이 퇴거 준비가 될 때 까지, 트레이스 캐시로부터 페치된 임의의 명령의 퇴거를 막도록 구성될 수 있다.
상기 시스템은, 퇴거 큐가 명령을 마지막으로 퇴거한 이후 경과된 주기의 수를 모니터하도록 구성된 재시작 로직(restart logic)를 포함한다. 주기의 수가 임계수를 넘으면, 재시작 로직은 트레이스 캐시로부터 페치된 명령들을 실행하는 프로세싱 파이프라인을 플러시(flush)한 다음 명령 캐시로부터의 실행을 재개하도록 구성된다.
상기 시스템에 포함되는 디스패치 유닛은 트레이스 캐시로부터 수신된 명령들을 디스패치하도록 구성된다. 디스패치 유닛은, 트레이스 캐시로부터 수신된 명령들의 그룹 내에서 재실행이 불가능한 명령을 검출한 다음, 재실행이 불가능한 명령의 표시를 재개 로직에 제공하도록 구성된다. 이 표시에 응답하여, 재개 로직은 재실행이 불가능한 명령의 실행 이전에 프로세싱 파이프라인을 플러시하고 명령 캐시로부터의 실행을 재개하도록 구성된다.
디스패치 유닛은 명령 캐시로부터 수신된 명령들의 그룹 내에서 예외 명령을 검출한 다음 이러한 예외 명령의 표시를 트레이스 생성기에 제공하도록 구성되며, 이에 의해 트레이스 생성기는 예외 명령을 검출한다. 트레이스 생성기는 또한 예외 명령들의 1개 이상의 특징들(예를 들어, 연산코드, 어드레싱 모드 등)에 응답하여 예외 명령들을 검출하도록 구성된다.
임의의 실시예에서, 본 발명의 방법은 트레이스 캐시 내의 트레이스 캐시 엔트리에 저장하기 위한 명령들의 그룹을 수신하는 단계와; 상기 명령들의 그룹에 포함되는 1개 이상의 명령들을 상기 트레이스 캐시 엔트리에 저장하는 단계와; 상기 명령들의 그룹 내에서 예외 명령을 검출하는 단계와; 그리고 상기 검출에 응답하여, 상기 1개 이상의 명령들을 갖는 상기 트레이스 캐시 엔트리 내에 상기 예외 명령을 저장하지 않는 단계를 포함한다.
도 1은 프로세서(100)의 일 실시예에서 로직 컴포넌트(component)들의 블록 다이어그램이다. 프로세서(100)는 시스템 메모리(614)에 저장된 명령어들을 실행하도록 구성된다. 이들 명령어들 중 다수는 시스템 메모리(614)에서 저장된 데이터를 오퍼레이팅(operate)하며, 상기 시스템 메모리(614)는 컴퓨터 시스템을 통해 물리적으로 분산될 수 있고 하나 이상의 프로세서(100)에 의해 액세스될 수 있다. 일부 실시예들에서, 상기 프로세서(100)는 x86 아키텍처와 호환가능하도록 디자인된다.
프로세서(100)는 명령어 캐시(106)와 데이터 캐시(128)를 포함한다. 프로세서(100)는 상기 시스템 메모리(614)에 연결된 프리페치 유닛(prefetch unit)(108)을 포함한다. 프리페치 유닛(1080은 명령어 캐시(106) 내에 저장을 위해 상기 시스템 메모리(614)로부터 명령어 코드를 프리페치한다. 일 실시예에서, 프리페치 유닛(108)은 상기 시스템 메모리(614)로부터 명령어 캐시(106)로 코드를 버스트(burst)하도록 구성된다. 프리페치 유닛(108)은 다양한 특정 코드 프리페치 기술 및 알고리즘을 이용한다. 추적 캐시(106)에서 소정의 명령어 어드레스 미스(miss)에 응답하여 명령어 캐시(106)로부터 명령어들이 또한 페치된다. 유사하게, 명령어 캐시(106)에서 소정의 어드레스 미스에 응답하여 시스템 메모리(614)로부터 명령어들이 페치된다.
디스패치 유닛(104)은 명령어 캐시(106)로부터 명령어들을 수신하고 추적 캐시(160)로부터 디코딩된 및/또는 부분적으로 디코딩된 명령어들을 수신하도록 구성된다. 상기 디스패치 유닛(104)은 명령어 캐시(106)로부터 수신된 명령어들을 디코딩하는 디코드 유닛(140)을 포함한다. 상기 디스패치 유닛(104)은 또한 마이크로코딩된(microcoded) 명령어들을 처리할 때 사용하기 위한 마이크로코드 유닛을 포함한다.
디스패치 유닛(dispatch unit)(104)은 스케줄러(118)(들)에 디코딩된 명령어들을 디스패치하도록 구성된다. 하나 이상의 스케줄러들(118)이 디스패치 유닛(104)으로부터 디스패치된 명령어들을 수신하고 하나 이상의 실행 코어들(124)에 명령어들을 발행하도록 연결된다. 실행 코어(들)(124)는 데이터 캐시(128)로의 액세스를 수행하도록 구성된 로드 저장 유닛(126)을 포함한다. 실행 코어(들)(124)에 의해 생성된 결과들이 결과 버스(130)에 출력된다. 이러한 결과들은 후속으로 발행되는 명령어들에 대한 오퍼랜드(operand) 값으로서 사용되고 및/또는 레지스터 파일(116)에 저장된다. 퇴거 큐(retire queue)(102)는 스케줄러(들)(118) 및 디스패치 유닛(104)에 연결된다. 상기 퇴거 큐는 발행된 각 명령어가 언제 퇴거 될지를 결정하도록 구성된다.
명령어 캐시(106)는 디스패치 유닛(104)에 의한 명령어들의 수령 전에 명령어들을 임시로 저장한다. 프리페치 유닛(108)을 통해 시스템 메모리(614)로부터 코드를 프리페칭 함으로써 명령어 코드가 명령어 캐시(106)에 제공된다. 명령어 캐시(106)는 다양한 구성으로 구현된다(예컨대, 세트-어소시에이티브(set-associative), 풀-어소시에이티브(fully-associative), 또는 직접 매핑(direct-mapping)).
본 명세서에서 사용된 바와 같이, 상기 용어 명령어는 일반적으로 디코딩되지 않은(non-decoded), 부분적으로 디코딩된, 및 완전 디코딩된(fully decoded) 명령어들을 일컫는다. 부분적으로 및 완전 디코딩된 명령어들은 또한 오퍼레이션(operation)들로 지칭된다. 예를 들어, 디코딩되지 않은 명령어는 실행 코어(들)(124)에서 직접 실행될 수 있는 하나 이상의 컴포턴트 오퍼레이션들로 디코드 유닛(140)에 의해 디코딩되는 것으로 설명된다. 디스패치 유닛(104)은 오퍼랜드 어드레스 정보, 즉시 데이터 및/또는 변위 데이터뿐만 아니라 실행 코어(들)(124)에 의해 실행가능한 비트 인코딩된 오퍼레이션들(bit-encoded operation)을 포함하는 신호들을 출력한다. 레지스터의 업데이트를 포함하는 명령어를 수신하면, 상기 디스패치 유닛(104)은 추론 레지스터 상태(speculative register state)를 저장하기 위해 레지스터 파일(116) 내에 레지스터 위치를 예약한다(대안적인 실시예에서, 각 레지스터에 대한 하나 이상의 추론 레지스터 상태들을 저장하기 위해 재배열(reorder) 버퍼가 사용된다). 레지스터 재명명을 용이하게 하기 위해 레지스터 맵은 소스 및 목적 오퍼랜드의 로직 레지스터 명칭을 물리적 레지스터 명칭으로 변환한다. 이러한 레지스터 맵은 레지스터 파일(116) 내의 어떤 레지스터가 현재 할당되었는지 할당되지 않았는지를 추적한다.
명령어들이 디스패치 유닛(104)에 의해 처리되는 때, 만약 필요한 오퍼랜드가 레지스터 위치라면, 레지스터 어드레스 정보는 레지스터 맵이나 재배열 버퍼(reorder buffer)에 라우팅된다. 예를 들면, x86 아키텍처에서 8개의 32-비트 로직 레지스터(예컨대, EAX, EBX, ECX, EDX, EBP, ESI, EDI 및 ESP)가 존재한다. 물리적 레지스터 파일(116)(또는 재배열 버퍼)은 비순차 실행(out of order execution)을 허용하는, 상기 로직 레지스터들의 컨텐츠를 변경하는 결과들에 대한 저장부를 포함한다. 레지스터 파일(116) 내의 물리적 레지스터는 상기 로직 레지스터들 중 하나의 컨텐츠를 수정하는 각 명령어의 결과를 저장하도록 할당된다. 따라서, 특정 프로그램의 실행 동안에 수많은 포인트에서, 레지스터 파일(116)(또는, 대안적인 실시예에서 재배열 버퍼)은 소정의 로직 레지스터의 추론적으로 실행되는 컨텐츠를 포함하는 하나 이상의 레지스터들을 구비할 수 있다.
레지스터 맵은 물리적 레지스터를 명령어에 대한 목적 오퍼랜드로서 지정된 특정 로직 레지스터로 할당한다. 레지스터 파일(116)은 소정의 명령어에서 소스 오퍼랜드로서 지정된 로직 레지스터에 할당된 하나 이상의 기(previously) 할당된 물리적 레지스터들을 포함한다. 레지스터 맵은 상기 로직 레지스터에 가장 최근에 할당된 물리적 레지스터에 대한 태그를 제공한다. 상기 태그는 레지스터 파일(116) 내의 오퍼랜드의 데이터 값에 액세스하거나 상기 결과 버스(130) 상의 결과 포워딩을 통해 데이터 값을 수신하는데 사용된다. 만약 오퍼랜드가 메모리 위치에 대응한다면, 상기 오퍼랜드 값은 로드 저장 유닛(126)을 통해 결과 버스 상(레지스터 파일(116) 내의 저장 및/또는 결과 포워딩을 위한)에 제공된다. 오퍼랜드 데이터 값은 명령어가 하나 이상의 스케줄러(들)(118)에 의해 발행된 때 실행 코어(들)(124)에 제공된다. 주목할 사항으로, 대안적인 실시예에서, 명령어가 디스패치된 때, (명령어가 발행된 때, 대응하는 실행 코어(124)에 제공되는 대신에) 오퍼랜드 값들이 대응하는 스케줄러(118)에 제공된다는 점이다.
도 1의 프로세서(100)는 비순차 실행을 지원한다. 퇴거 큐(102)(또는 대안적으로 재배열 버퍼)는 레지스터 읽기 및 기록 오퍼레이션들의 고유의 프로그램 시퀀스를 기억하고, 추론적인 명령어 실행 및 분기 오예측 복구(branch misprediction recovery)을 허용하고, 그리고 정밀한 예외(precise exception)를 촉진한다. 수많은 실시예들에서, 퇴거 큐(102)는 재배열 버퍼와 유사하게 ㄱ능한다. 그러나, 전형적인 재배열 버퍼와 달리, 퇴거 큐(102)는 임의의 데이터 값 저장부를 제공한다. 대안적인 실시예들에서, 퇴거 큐(102)는 재배열 버퍼와 더욱 유사하게 기능하고 또한 추론적인 레지스터 상태들에 대한 데이터 값 저장부를 제공함으로써 레지스터 재명명을 또한 지원한다. 일부 실시예들에서, 퇴거 큐(102)는 FIFO(first-in-first-out) 구성으로 구현되며, 여기서 오퍼레이션들은 이들이 유효화(validate)될 때 버퍼의 "바닥"으로 이동하여, 상기 큐의 "상부"에 새로운 엔트리들을 위한 공간을 만든다. 명령어들이 퇴거될 때, 퇴거 큐(102)는 추론적 레지스터 상태들을 저장하는데 더이상 필요하지 않은 레지스터들을 레지스터 파일(116)에서 할당해제(deallocate)하고 어떤 레지스터들이 현재 자유롭게되었는지를 나타내는 신호들을 레지스터 맵에 제공한다. 추론적인레지스터 상태들을 생셩시켰던 명령어들이 유효화될 때까지, 레지스터 파일(116)(또는 대안적인 실시예들에서 재배열 버퍼) 내에 상기 추론적인 레지스터 상태들을 유지함으로써, 오예측된 경로를 따라 추론적으로 실행된 명령어들의 결과들이 만약 상기 분기예측이 올바르지 않다면 상기 레지스터 파일(116)에서 무효화된다.
디스패치 유닛(104)의 출력에서 제공되는 비트 인코딩된 오퍼레이션들 및 즉시 데이터는 하나 이상의 스케줄러들(118)에 라우팅된다. 주목할 사항으로, 본원에서 사용되는 바와 같이 스케줄러는 명령어들의 실행이 준비된 때를 검출하고 하나 이상의 실행 유닛들에 준비된 명령어들을 발행하는 디바이스이다. 예를 들면, 예약 스테이션이 스케줄러이다. 각 스케줄러(118)는 실행 코어(124)로의 발행 대기 중인 수개의 명령어들에 대한 명령어 정보(예컨대, 오퍼랜드 값, 오퍼랜드 태그 및/또는 즉시 데이터뿐 아니라 비트 인코딩된 실행 비트들)를 홀딩(holding)할 수 있다. 일부 실시예에서, 각 스케줄러(118)는 오퍼랜드 값 저장부를 제공하지 않는다. 대신에, 실행 코어(들)(124)에 의해 읽기될 오퍼랜드 값들이 언제 이용가능한지를 결정하기 위해(레지스터 파일(116) 또는 결과 버스(130)로부터), 각 스케줄러는 발행된 명령어들 및 레지스터 파일(116)에서 이용가능한 결과들을 모니터한다. 일부 실시예에서, 각 스케줄러(118)는 전용 기능 유닛(dedicated functional unit)(예컨대, 정수 연산 유닛(integer unit), 부동 소수점 유닛(floating point unit), 로드 저장 유닛 등) 및/또는 실행 코어(124)와 관련이 있다. 다른 실시예들에서, 단일 스케줄러(118)는 하나 보다 많은 수령자에 명령어들을 발행한다.
스케줄러(118)는 실행 코어(들)(124)에 의해 실행될 오퍼레이션 정보를 임시로 저장하도록 제공된다. 명령어들은 실행을 위해 적시에 이용가능하게 된 필요한 모든 오퍼랜드 값들에 응답하여 실행을 위해 실행 코어(들)(124)에 발행된다. 따라서, 명령어들이 실행되는 순서는 본래 프로그램 명령어 시퀀스의 순서와 동일하지 않을 것이다.
일 실시예에서, 실행 코어(들)(124) 각각은 덧셈 및 뺄셈의 정수 계산 오퍼레이션들 뿐 아니라 이동, 회전, 로지컬 오퍼레이션 및 분기 오퍼레이션들을 수행하도록 구성되는 정수 실행 유닛과 같은 기능 유닛들을 포함한다. 부동 소수점 유닛이 또한 부동 소수점 오퍼레이션들을 제공하도록 포함된다. 하나 이상의 실행 코어(들)(124)이 로드 저장 유닛(126)에 의해 수행될 로드 및 저장 메모리 오퍼레이션들에 대한 어드레스 생성을 수행하도록 구성된다.
상기 실행 코어(들)(124)은 또한 조건부 분기 명령어들의 실행에 관한 정보를 분기 예측 유닛(132)에 제공한다. 만약 상기 실행 코어(124)로부터의 정보가 분기 예측이 올바르지 않음을 지시한다면, 상기 분기 예측 유닛(132)은 상기 명령 프로세싱 파이프라인에 입력된 오예측 분기에 후속하는 명령어들을 플러쉬(flush)하고 프리페치 유닛(108)의 방향을 재설정한다(redirect). 그 다음, 상기 방향이 재설정된 프리페치 유닛(108)은 명령어 캐시(106), 추적 캐시(160) 및/도는 시스템 메모리(614)로부터 올바른 명령어들 집합을 페칭하기 시작한다. 이러한 상황에서, 상기 오예측 분기 명령어 후에 일어난 본래 프로그램 시퀀스에서의 명령어들의 결과들은 추론적으로 실행되었던 명령어들 및 로드 저장 유닛(126) 및/또는 레지스터 파일(116)에 임시로 저장되었던 명령어들을 포함하여 폐기된다.
만약 레지스터 값이 업데이트 된다면, 실행 코어(들)(124) 내의 컴포넌트들에 의해 생성된 결과들은 레지스터 파일(116)로의 결과 버스(130) 상에 출력된다. 만약 메모리 위치의 컨텐츠들이 변경된다면, 실행 코어(들)(124) 내에서 생성된 결과들은 로드 저장 유닛(126)으로 제공된다.
로드 저장 유닛(126)은 실행 코어(들)(124)와 데이터 캐시(128) 사이에 인터페이스를 제공한다. 일 실시예에서, 로드 저장 유닛(126)은 펜딩(pending) 로드 또는 저장에 대한 데이터와 어드레스 정보를 위한 수개의 저장 위치를 구비한 로드 저장 버퍼로 구성될 수 있다. 또한, 로드 저장 유닛(126)은 데이터 코히어런시(coherency)가 유지되고 있음을 보증하기 위해 펜딩 저장 명령어들에 대한 로드 명령어들의 종속성 검사를 수행한다.
데이터 캐시(128)는 로드 저장 유닛(126)과 시스템 메모리(614) 사이에 전송되는 데이터를 임시로 저장하도록 제공된 캐시 메모리이다. 전술한 명령어 캐시(106)와 같이, 데이터 캐시(128)는 세트 어소시에이티브 구성을 포함하는 다양한 특유의 메모리 구성으로 구현될 수 있다. 추가로, 데이터 캐시(106) 및 명령어 캐시(128)는 일부 실시예에서 통합된 캐시로 구현될 수 있다.
퇴거 큐(102)는 추적 생성기(170)에 프로그램 추적들을 식별하는 신호들을 제공한다. 추적 생성기(170)는 필유닛(fill unit)으로서 또한 기술된다. 추적 생성기(170)는 퇴거 큐(102)에 의해 식별된 추적들을 추적 캐시(160)에 저장한다. 각 추적은 수 개의 서로 다른 기본 블록들의 부분으로서 프로그램 순서와는 다른 순서로 저장된 명령어들을 포함한다. 기본 블록은 모두 실행되거나 모두 실행되지 않는 명령어들의 집합이다. 즉, 기본 블록에서 임의이 명령어가 실행된다면, 상기 기본 블록의 다른 모든 명령어들도 또한 실행될 것이다. 기본 블록의 예는 분기 명령어 후에 바로 시작하고 다른 분기 명령으로 종료되는 명령어들의 집합이다. 추적 캐시(160)에 저장된 추적들은 일부 실시예들에서 디코딩된 또는 부분적으로 디코딩된 명령어들을 포함한다. 본 명세서에서 사용되는 바와 같이, "추적"은 추적 캐시(160)에서 단일 추적 캐시 엔트리(예컨대, 단일 로우(row) 또는 라인) 내에 저장된 명령어들의 그룹이다. 엔트리 내의 모든 정보는 동시에 액세스된다(예컨대, 추적 캐시 읽기 사이클의 표명(assertion)에 응답하여). 대안적인 실시예들에서, 추적 생성기(170)가 프로세서의 전방-후방(front-end)(예컨대, 상기 디스패치 유닛의 전 또는 후)에 연결되고 페치되는 및/또는 디스패치되는 명령어들에 응답하여 추적들을 생성하도록 구성된다는 점을 주목하자.
프리페치 유닛(108)은 추적 캐시(160)로부터 디스패치 유닛(104)으로 명령어들을 페치한다. 추적 캐시(160)로부터 명령어들을 페칭하는 것은 명령어 캐시(106)로부터 페칭하는 것에 비해 분기 경계들을 통해 개선된 페칭 성능을 제공한다. 예를 들어, 만약 분기가 예측 테이크(taken)된다면, 상기 예측 테이큰된 경로의 명령어들은 추적 캐시(160) 내의 분기와 동일한 추적에 이미 저장되어 있다. 또한, 명령어들이 적어도 부분적으로 디코딩된 형태로 추적 캐시(160)에 저장된 실시에에서, 상기 추적 캐시로부터 명령어들을 페칭하는 것은 상기 디코드 유닛(140)이 적어도 부분적으로 바이패스(bypass)되도록하여, 결과적으로 상기 캐시된 명령어들에 대한 디스패치 사이클들의 수를 줄인다. 따라서, 상기 추적 캐시(160)는 추적들이 한번 넘게 실행될 때 수 번의 반복 실행들 동안에 상기 캐시된 명령어들을 부분적으로 (또는 완전히) 디코딩하는데 드는 시간이 아몰타이즈(amortize)되도록 한다.
주목할 사항으로 프로세서(100)는 본 명세서에서 도시된 것에 추가하여 다른 수많은 컴포넌트를 포함하고 및/또는 이들에 연결될 수 있다. 예를 들면, 추가의 캐시 레벨들이 프로세서(100)와 시스템 메모리(614) 사이에(프로세서(100)의 내부 및/또는 외부에) 포함될 수 있다. 유사하게, 프로세서(100)는 일부 실시예에서 시스템 메모리(614)를 제어하도록 구성된 집적된 메모리 제어기를 포함한다. 추가로, 로직 컴포넌트들 사이의 상호접속부(interconnect)들은 실시예들에 따라 가변한다.
추적 캐시
도 2는 일 실시예에 따른 예시적인 트레이스 캐시(160)를 나타낸다. 트레이스 캐시(160)는 복수개의 엔트리들(162)을 포함한다. 각 엔트리(162)는 복수개의 명령들(165)을 포함하는 트레이스를 저장한다. 트레이스 내의 명령들(165)은 프로그램 순서로 저장되지 않는다. 예를 들어, 엔트리(162)는 분기 명령과, 그리고 (프로그램 순서에 있어서 분기 다음에 오는 명령과 대비되는) 분기가 테이큰(taken)될 때 그 분기의 목적지인 명령 모두를 저장한다. 임의의 실시예에서, 각 트레이스 캐시 엔트리(162) 내의 명령들(165)은 적어도 부분적으로 디코드된 형태로 저장된다. 여기에서 이용되는 용어 "트레이스"는 단일 트레이스 캐시 엔트리(162)에 저장되는 1개 이상의 명령들의 그룹을 나타내는 데에 이용된다.
다시 도 1을 참조하여, 주목할 사항으로서, 트레이스 캐시9160)로부터 페치되는 명령 스트림의 프로세싱은 명령 캐시(106)로부터 페치되는 명령 스트림의 프로세싱과 다르다. 명령 캐시(106)로부터의 명령 스트림은, 명령들이 1개 이상의 구성 요소 동작들로 디코드된 이후 조차도, 명령 경계(boundary)를 식별하는 정보를 포함한다. 퇴거 큐(102)가 이러한 경계 정보를 이용하여, 특정 명령에 대응하는 동작(들)이 언제 퇴거되는 지를 결정한다. 전형적으로, 퇴거 큐(102)는 최초의 프로그램 순서로 동작들을 퇴거하도록 동작한다. 동일한 명령에 대응하는 동작(들)은 동시에 퇴거된다.
대조적으로, 트레이스 캐시(160)로부터의 명령 스트림은, 트레이스 캐시(160)에 저장하기 이전에 (예를 들어, 트레이스 캐시(160) 내에서의 저장 효율을 증가시키기 위해 명령들을 결함으로써) 명령들을 디코드 그리고/또는 변경한 경우에는, 명령 경계를 식별하는 정보를 포함하지 않는다. 결과적으로, 퇴거 큐(102)는 이러한 명령 스트림에 포함되는 명령들을 커서 그래뉴어리티(courser granularity)로 퇴거해야 한다. 예를 들어, 임의의 실시예에서, 퇴거 큐(102)는 트레이스 캐시 내의 모든 명령들이 퇴거 준비가 될 때 까지 그 트레이스에 포함되는 임의의 명령들을 퇴거하지 않는다.
임의의 트레이스 캐시 기반 프로세서에서 발생하는 하나의 문제는 특정 명령들(여기에서는 "예외" 명령들이라 불린다)이, 이러한 명령들이 퇴거될 수 있는 때에 영향을 주는 특별한 핸들링을 요구한다는 것이다. 예외 명령과 동일한 트레이스 내의 (프로그램 순서에 있어서 보다 일찍 발생하는 것들을 포함하는) 다른 명령들의 퇴거는 그 예외 명령이 퇴거 준비가 되었느냐에 의존하기 때문에, 이러한 예외 명령은 그 트레이스 내의 다른 명령들의 퇴거를 차단한다. 임의의 상황에서, 예외 명령의 비 퇴거가 동일 트레이스에 포함되는 보다 오래된 동작들의 퇴거를 차단하는 경우, 프로세서는 교착상태(deadlock)가 된다. 또한, 트레이스 캐시로부터 제공되는 명령 캐시 정보의 결여로 인해, 예외 명령이 동일 트레이스 내의 다른 명령들의 퇴거를 차단하는 경우, 그 트레이스 내의 퇴거불가능한 모든 명령들 (및 이미 디스패치된, 프로그램 순서에 있어서 임의의 보다 새로운(younger) 명령들)이 명령 캐시로부터 다시 페치되어 재실행되어야 한다.
예외 명령들은 예외 또는 인터럽트를 생성하는 것들을 포함한다. 예외 명령은 비 예외 명령과 비교하여 완료하는 데에 상당히 더 오래 걸릴 가능성이 있다. 예를 들어, 실행 코더(124)는 전형적인 비 예외 명령을 1 대 3 실행 주기(one to three execution cycle)로 완료한다. 대조적으로, 예외 명령은 실행할 많은 실행 주기로서 10배(또는 그 이상)를 필요로 하는 인터럽트를 생성한다. 적어도 얼마간의 예외 명령들을 이용하게 되면, (프로그램 순서에 있어서) 특정의 예외 명령 보다 오래된 모든 명령들이 그 예외 명령과 독립적으로 퇴거될 수 있는 것이 유익하거나, 또는 심지어 요구된다. 상기 설명한 바와 같이, 트레이스에 있어서 명령 경계 정보의 결여는 동일 트레이스 내의 다른 명령들이 독립적으로 퇴거될 수 있는 능력을 감소시키거나 또는 없앤다. 이에 따라, 다른 명령들을 갖는 트레이스 내에 예외 ㅁ여령을 포함시키게 되면, 궁극적으로, 경계 정보를 얻기 위해서는 그 트레이스 캐시 내의 모든 명령들이 명령 캐시로부터 다시 페치되어야 한다.
다른 명령들의 퇴거를 차단하고 그리고/또는 다른 명령들이 폐기되고, 다시 페치되고, 재 실행되게 하는 예외 명령의 가능성을 줄이기 위해, 트레이스 생성기(170)는 예외 명령들을 검출한 다음, 이러한 명령들을 임의의 다른 명령들을 포함하는 트레이스 내에 저장하지 않도록 구성된다. 임으의 실시예에서, 트레이스 생성기(170)는 그 예외 명령 만을 포함하는 트레이스 내에 검출된 예외 명령을 저장한다. 비록 이러한 구성은 트레이스 캐시 저장 효율을 감소시키기는 하지만, 명령 캐시(106)와 트레이스 캐시(160) 간에서 페칭을 교환(switch)하는 대신, 트레이스 캐시로부터 페칭을 계속할 수 있게 한다. 다른 실시예들에서, 트레이스 생성기(170)는 검출된 예외 명령들을 트레이스 캐시(160)에 전혀 저장하지 않음으로써, 예외 명령들이 명령 캐시(106)로부터 항상 페치되게 한다. 트레이스 생성기(170)는 트레이스 캐시 내의 트레이스 캐시 엔트리에 명령들의 그룹을 저장하는 수단의 예이다.
추적 발생기(17)는 특정 연산코드, 오퍼랜드들, 어드레싱 모드 및 다른 특성들에 대한 추적 캐시에서 저장을 위한 각 후보 명령어를 검사함으로써 예외 명령어들을 검출한다. 일 실시예에서, 가능성 있는 예외 명령어들의 특성들을 식별하는 것은 각 추적 발생기(170)에 프로그램된다. 이러한 실시예들에서, 비록 이러한 오퍼레이션들 타입이 특정 환경하에서 특정 처리 없이 실행가능할지라도, 상기 추적 발생기(170)는 항상 예외 명령어들과 같은 특정 명령어들 타입을 식별하도록 구성된다는 점을 주목하자. 일부 실시예에서, 디코드 유닛(140)은 명령어 디코딩 동안에 예외 명령어들을 식별하는 태그들을 생성한다. 각 태그는 상기 태그에 의해 예외로 식별되는 디코드된 명령어와 함께 상기 프로세서(100)를 통과한다.
따라서, 디코딩된 명령들이 예외적인지를 독립적으로 결정하는 대신(또는 상기 결정에 부가하여), 추적 발생기(170)는 예외 명령(exceptional instruction)을 식별하기 위해 디코드 유닛(140)에 의해 생성된 태그들에 의존할 수 있다. 따라서, 추적 발생기(170) 및 디코드 유닛(140)은 명령들 그룹 내의 예외 명령을 검출하기 위한 예시적인 수단들이다.
추적 캐시(160)에 저장되는 명령들 스트림 내의 예외 명령의 검출에 응답하여, 추적 발생기(170)는 (추적 내에 부가적인 명령들을 저장하기 위한 공간이 이용가능하더라도) 명령들의 저장을 현재의 추적으로 종료할 수 있다. 만일 추적 발생기가 추적 캐시(160) 내에 자립형 추적의 예외 명령들을 저장하도록 구성되어 있다면, 추적 발생기는 예외 명령을 저장하기 위해 새로운 추적 캐시 엔트리를 할당할 수 있다. 추적 발생기(170)는 또 다른 추적 캐시 엔트리에 프로그램 순서에서 예외 명령 직후에 발생하는 다음 명령(next instruction)을 저장할 수 있다. 만일 추적 발생기(170)가 추적 캐시(160)로부터의 예외 명령들을 모두 배제하도록 대신 구성되었다면, 추적 발생기는 (만일 어떤 다른 더 오래된 명령들이 이미 현재 추적에 저장되지 않았다면) 예외 명령의 검출시에 현재 추적을 간단하게 종료할 수 있고, 다음 추적에 추적 캐시 내의 저장을 위한 후보자(candidate)인, 프로그램 순서에서, 다음의 비-예외 명령을 저장하기 시작한다. 유의할 것은, 추적 발생기(170)는 예외 명령이 다음 명령이 페치되는 것을 나타내기 위해 현재 추적 내의 흐름 정보를 설정할 수 있다는 것이다. 따라서, 추적이 페치되는 것에 응답하여, 프리페치 유닛(170)은 명령 캐시(106)로부터의 흐름 정보에 식별된 명령을 프리페치하도록 구성될 수 있다. 따라서, 실행 스트림은 추적 캐시(160)로부터의 예외 명령의 배제에 기인하여 추적 캐시(160)로부터 명령 캐시(106)로 스위칭될 것이다.
일부 예외 명령들은 추적 발생기(170)에 의해 검출될 수 없을 수 있다. 예를 들어, 일부 명령들은 이러한 명령들이 실행될 때마다 상이하게 행동할 수 있다. 이러한 명령들의 성질 (예를 들어 이러한 명령들은 거의 예외적이지 않을 수 있음) 때문에, 추적 발생기(170)는 이러한 명령들을 자동으로 예외적인 것으로 식별하지 않도록 구성될 수 있다. 그 결과, 이러한 예외 명령들은 추적 발생기(170)에 의해 다른 명령들과 하나의 추적 내에 저장될 수 있다. 이러한 예외 명령들의 포함이 동일한 추적 내에 다른 명령어들의 차단된 퇴거(retirement)에 기인한 문제점들을 유발하는 것을 방지하기 위해, 재시작 로직(190)은 퇴거 큐(102)가 임의의 오퍼레이션들을 마지막으로 퇴거시키고 나서 얼마나 많은 클록 사이클들이 통과했는지를 모니터링할 수 있다. 만일 어떤 오퍼레이션들도 미리 결정된 수의 클록 사이클 내에 퇴거되지 않았다면, 재시작 로직(190)은 프로세싱 파이프라인을 플러싱하고 명령들을 재-페치함으로써 프로세서(100) 내의 가장 오래된 현존하는 비-퇴거 명령부터 실행을 재시작할 수 있다. 명령들이 명령 캐시(106)로부터 페치될 때, 명령 경계들에 대한 정보가 퇴거 큐(102)에 이용가능할 것이다. 따라서, 재시작 로직(190)에 의해 검출된 비-퇴거가 추적의 퇴거를 저지한 예외 명령에 의해 유발된다면, 명령 캐시(106)로부터 명령들을 페치하는 것은 퇴거 큐(102)가 다른 명령들의 퇴거를 불필요하게 저지하지 않고서도 문제되는 예외 명령을 독립적으로 퇴거할 수 있도록 할 수 있다.
특정 명령들이 재-실행가능한 것이 아닐 수 있고, 따라서 이러한 명령들은, 만일 이 명령들이 추적 캐시(160)로부터 실행되고, 동일한 추적에 포함된 예외 명령에 의해 퇴거로부터 저지되고, 그 후에 재시작 논리(190)의 오퍼레이션에 기인하여 재-실행된다면, 부정확할 수 있다. 예를 들어, 특정 로드들(예를 들어 일부 I.O 로드들)의 수행은 판독되는 값을 수정할 수 있다. 이러한 명령들이 재-실행되는 경우 발생할 수 있는 문제들을 방지하기 위해, 추적 발생기(!70)는 이러한 명령들을 다른 명령들과 함께 트레이들 내에 저장되지 않는 다른 클래스의 예외 명령들로서 식별하도록 구성될 수 있다. 따라서, 추적 발생기(170)는 추적 캐시(160)로부터 이러한 예외 명령들을 배제하거나, 이러한 예외 명령들을 (예를 들어 예외 명령들에 대해 개략적으로 전술한 바와 같은) 다른 명령들을 포함하지 않는 자립형 추적들에 저장할 수 있다.
특정한 다른 예외 명령들과 마찬가지로, 일부 재-실행가능하지 않은 명령들은 추적 발생기(170)에 의해 검출되지 않을 수 있다. 예를 들어, 로드는 하나의 프로그램 반복 동안 시스템 메모리(200) 어드레스에 액세스하고 다음 반복 동안 I/O 레지스터에 액세스할 수 있다. 첫 번째 반복 후에, 로드는 추적에 저장될 수 있다. 다음 반복 동안, 로드는 I/O 레지스터에 대한 판독의 성질에 기인하여 재-실행가능하지 않을 수 있다. 따라서, 만일 부하와 동일한 추적 내의 다른 명령이 예외적이라면 (예를 들어, 다른 명령이 페이지 오류를 생성한다면), 추적의 퇴거는 재시작 로직(190)을 트리거링하기에 충분히 오랫동안 지연될 수 있다. 그러나 이는 로드가 수용불가하게 재-실행되도록 할 수 있다. 이러한 상황을 방지하기 위해, 디스패치 유닛(104) 또는 프로세서(100) 내의 다른 컴포넌트는 로드가 실제로 실행되기 전에 일부 지점에서 재-실행가능하지 않게 되는 것으로 상기 로드를 식별하도록 구성될 수 있다. 추적 캐시(106)로부터 페치된 명령들 그룹 내의 재-실행가능하지 않은 명령의 검출에 응답하여, 재시작 로직(190)은 (재-실행가능하지 않은 명령의 실행 이전에) 프로세서 파이프라인을 플러싱할 수 있고 명령 캐시(106)로부터 실행을 재시작할 수 있다.
예시적인 추적
도 3A는 적어도 부분적으로 디코딩된 명령들을 저장하도록 구성된 추적 캐시 엔트리(162)의 일 실시예를 도시한다. 도 3A의 실시예에서, 추적 캐시 엔트리(162)는 디코딩 및/또는 부분적으로 디코딩된 명령들 그룹에 포함된 8개까지의 컴포넌트 오퍼레이션들을 오퍼레이션 저장 유닛들(166A - 166H)에 저장할 수 있다. 유의할 것은, 다른 실시예들은 더 적거나 부가적인 오퍼레이션 저장 유닛들(166)을 포함할 수 있고, 각 추적 캐시 엔트리(162) 내에 상이한 개수의 오퍼레이션들을 저장할 수 있다는 것이다.
추적 캐시 엔트리(162) 내의 특정한 오퍼레이션 저장 유닛들(166)은 특정한 타입의 오퍼레이션들을 위해 예비될 수 있다. 예를 들어, 일 실시예에서, 오퍼레이션 저장 유닛들(166A-166D)이 메모리 오퍼레이션들을 저장하기 위해 사용될 수 있다. 마찬가지로, 오퍼레이션 저장 유닛들(166E-166H)이 데이터 오퍼레이션들을 저장하기 위해 사용될 수 있다. 유의할 것은, 다른 실시예들은 특정한 타입의 오퍼레이션들을 특정한 오퍼레이션 저장 유닛들에 상이하게 (또는 전혀) 연관시킬 수 있다는 것이다.
다수의 오퍼레이션 저장 유닛들(166)에 부가하여, 각 추적 캐시 엔트리(162)는 또한 식별 태그(164) 및 제어 흐름 정보(168)를 포함한다. 태그(164)는 명령 캐시(106) 내의 태그와 유사할 수 있고, 이는 프리페치 유닛(108)이 소정의 오퍼레이션이 추적 캐시(160)에서 히트하는지 또는 빗 맞히는지를 결정할 수 있도록 한다. 예를 들어. 태그(164)는 추적 캐시 엔트리 내의 명령을 식별하는 어드레스 비트들 중 모두 또는 일부를 포함할 수 있다(예를 들어, 태그는 추적 내에 저장된, 프로그램 순서에서, 가장 이른 명령의 어드레스를 포함할 수 있다). 일부 실시예에서, 태그는 각 명령(또는 이하 더 상세히 설명되는, 적어도 각 활성(liveness) 그룹 내의 가장 이른 명령)의 어드레스가 추적에 저장된 정보를 사용하여 독립적으로 식별될 수 있도록 충분한 정보를 포함할 수 있다. 다른 실시예에서, 추적 내의 가장 이른 명령어의 어드레스만이 이용가능할 수 있다.
설명된 실시예에서, 각 추적은 2개까지의 분기 명령들을 포함할 수 있다. 다른 실시예는 각 추적 내의 더 적거나 추가적인 분기 명령을 포함할 수 있다. 흐름 제어 정보(168)는 추적 내에 포함된 각 분기 명령에 대한 라벨을 포함할 수 있다. 라벨은 각 분기의 해상도(테이큰, 낫테이큰)에 따라 제어가 분기할 어드레스를 식별하는 지시자일 수 있다. 따라서, 각 흐름 제어 정보(168)의 항목은 특정한 분기 오퍼레이션과 연관될 수 있다. 예를 들어, 일 실시예에서, 추적 내의 하나의 흐름 제어 정보 저장 위치는 추적 내의 제 1 분기 오퍼레이션과 연관될 수 있고 다른 흐름 제어 정보 저장 위치는 추적 내의 제 2 분기와 연관될 수 있다. 대안적으로, 상기 흐름 제어 정보는 상기 흐름 제어 정보가 관련된 분기 오퍼레이션을 식별하는 태그들 또는 다른 정보를 포함한다. 또 다른 실시예들에서, 어떤 흐름 제어 정보가 분기 오퍼레이션에 대응하는 지를 식별하는 분기 예측 및/또는 정보가 오퍼레이션 저장부(166) 내의 분기 오퍼레이션과 함께 저장된다.
추적들 내에 증가된 퇴거 그래뉴얼리티 제공
전술한 바와 같이, 추적 내에 명령어 경계들에 관한 정보가 제한되어 있다. 예를 들어, 만약 명령어들이 추적 내에 저장되기 전에 명령어들의 컴포넌트 오퍼레이션들로 부분적으로 디코딩된다면, 추적이 상기 추적 내에 포함되기 때문에 상기 서로 다른 명령어들을 묘사하는 어떠한 정보도 없다. 게다가, 만약 디코딩된 후라면, 서로 다른 명령어들의 컴포넌트 오퍼레이션들이 결합(combine)되고, 재배열되고, 및/또는 수정되어, 명령어 경계들을 식별하는 것은 더욱 어려워진다.
추적 내에서 증가된 명령어 경계 정보를 제공하기 위해서, 추적 내에서 디코딩된 명령어들이 서로 다른 활성 그룹들로 세분된다. 추적 발생기(170)는 상기 추적 내의 특정 활성 그룹에 속하는 특정 추적 캐시 엔트리네에 저장된 각 디코딩된 명령어 태그이다. 상기 활성 그룹 각각의 내에 디코딩된 명령어들의 명령어 경계들에 관한 정보는 이용불가능하다. 그러나, 상기 활성 그룹들 자신들은 생성되어 디코딩된 명령어들이 활성 그룹 경계들상에서 퇴거되도록 한다.
추적 내의 각 오퍼레이션(166)은 관련 활성 표시를 갖는다. 각 오퍼레이션의 활성 표시는 오퍼레이션 저장 유닛들(166) 중 하나에 그의 관련 오퍼레이션과 함께 저장된다. 활성 표시들은 각 오퍼레이션이 속하는 활성 그룹을 식별한다. 각 활성 그룹은 동일한 기본 블럭의 부분인 추적 내의 오퍼레이션들의 그룹니다. 그 실행이 제 1 분기 오퍼레이션들의 레졸루션(resolution)에 따르는 오퍼레이션들은 다른 활성 그룹에 포함된다. 따라서, 활성 그룹은 모든 활성 그룹이 모두 실행되거나 모두 실행되지 않는다는 점에서 오퍼레이션들에서 기본 블록과 유사하다. 활성 그룹은 동일 기본 블록내의 오퍼레이션들이 서로 다른 추적들에 포함된다는 점에서 기본 블록과는 다르다(예컨대, 기본 블록 내의 일부 오퍼레이션들은 일 추적 내의 최종 활성 그룹에 포함되고 상기 기본 블록의 잔존 오퍼레이션들은 다른 추적의 제 1 활성 그룹에 포함될 수 있다). 따라서, 상기 동일한 활성 그룹 내의 오퍼레이션들은 동일한 기본 블록의 부분일 필요가 있지만, 동일한 기본 블록 내의 오퍼레이션들은 동일한 활성 그룹의 부분일 필요는 없다(즉, 만약 상기 기본 블록이 하나 보다 많은 추적 캐시 엔트리에 미친다면).
상기 활성 표시는 상기 동일한 추적 캐시 엔트리에 포함된 분기 오퍼레이션(들)에 대한 각 오퍼레이션의 프로그램 순서를 식별한다. 제 1 활성 그룹의 오퍼레이션들은 상기 추적 내의 제 1 분기 오퍼레이션의 결과에 의존하지 않는다. 상기 제 1 분기 오퍼레이션의 실행이 조건적이지 않기 때문에, 상기 제 1 분기 오퍼레이션은 상기 제 1 활성 그룹의 부분이다. 상기 제 1 활성 그룹 내의 상기 오퍼레이션들은 상기 제 1 분기 오퍼레이션 후에 일어나 오퍼레이션들의 제 2 활성 그룹을 식별하는데 사용된 것과 다른 활성 표시로 식별된다. 유사하게, 제 1 분기 오퍼레이션 및 제 2 분기 오퍼레이션(즉, 상기 제 2 활성 그룹에 포함된 최종 오퍼레이션) 모두의 결과에 따르는 제 2 활성 그룹에서 명령어들은 또 다른 활성 표시로 식별된다. 활성 표시들은 오퍼레이션들이 그들이 프로그램 순서와 다른 순서로 추적 캐시 엔트리(162)에 저장되도록 하면서, 여전히 오퍼레이션들의 프로그램 순서(분기 오퍼레이션에 대한)가 또한 결정되도록 한다.
추가적으로, 라이브니스(liveness) 표시들은 디스페치 유닛(104)이 특정 트레이스 내의 동작들이 실행될 수 있는지를 예측하게 한다. 제 1 라이브니스 그룹에서의 동작들(즉, 트레이스에 포함된 제 1 브랜치에 의존하지 않는 동작들)이 항상 실행될 수 있다(트레이스 내의 임의의 동작들이 실행하는 것으로 가정한다). 하지만, 제 2 라이브니스 그룹에서의 동작들의 실행(즉, 제 1 브랜치에 의존하는 동작들)은 제 1 브랜치의 결과에 의존한다. 예를 들어, 트레이스 생성기(17)가 프로세서(100)의 프로세싱 파이프라인의 후단에서 포함되는 실시예들에서, 동작들은 이 동작들이 실행되어, 이에 따라 만일 동작들이 후속적으로 다시 실행되는 경우에, 명령 캐쉬 대신에 트레이스 캐쉬로부터 액세스될 수 있는 순서에 따라 트레이스들에 저장될 수 있다. 따라서, 만일 트레이스 내에 저장된 제 1 브랜치가 브랜치가 처음으로 실행되는 때에 취해진 경우에, 제 2 라이브니스 그룹에 저장된 동작들은 제 1 브랜치가 제 1 브랜치가 취해진 경우에 실행되어야 하는 동작들이 될 수 있다. 따라서, 만일 이후에 디스패치 유닛(104)에 트레이스가 제공되며, 제 1 브랜치에 대한 현재 브랜치 예측이 "취해지지 않은" 경우에, 디스페치 유닛(104)은 제 2 라이브니스 그룹 내의 동작들이 실행되지 않아야 함을 예측할 수 있다. 제 1 브랜치 동작과 관련된 흐름 제어 정보(168)가 또한 만일 제 1 브랜치가 취해지지 않은 경우에 실행되어야 할 프리페칭 명령들 또는 트레이스들을 시작하는데에 사용될 수 있다.
도 3B는 일 실시예에서 사용될 수 있는 예시적 라이브니스 엔코딩들을 도시한다. 제 1 라이브니스 엔코딩, " 무조건적인 라이브"은 트레이스 내의 (프로그램 순서에서) 제 1 라이브니스 그룹을 식별하는데에 사용될 수 있다. 제 1 라이브니스 그룹은 브랜치 동작을 이 라이브니스 그룹 내에서 (프로그램 순서에서) 최종 동작으로서 포함한다. 이 동작들은 동일 트레이스 내에 포함된 임의의 브랜치 동작들에 의존하지 않는다. 많은 실시예들에서, 이 동작들은 트레이스 내에서 서로에 대해 임의의 순서로 저장될 수 있다.
후속 라이브니스 엔코딩, "제 1 브랜치의 후속"은 트레이스 내에서 (프로그램 순서에서) 제 2 라이브니스 그룹을 식별하는데에 사용된다. 이 라이브니스 그룹 내의 임의의 동작들이 비-추론적으로 실행되는 경우에, 이 라이브니스 그룹 내의 모든 동작들이 실행될 것이다.
제 3 라이브니스 엔코딩, "제 2 브랜치의 후속"은 트레이스 내의 (프로그램 순서에서) 제 3 기본 블록을 식별하는데에 사용된다. 이 동작들은 트레이스 내의 제 1 브랜치 및 제 2 브랜치 동작들 모두의 결과에 의존한다. 따라서, 제 2 라이브니스 엔코딩을 갖는 동작들이 실행되는 경우에도 이 동작들은 실행하지 않을 수 있다. 상술한 바와같이, 이 라이브니스 그룹 내의 임의의 동작들이 비-추론적으로 실행되는 경우에, 이 라이브니스 그룹 내의 모든 동작들이 실행될 것이다.
"무조건적인 데드(dead)" 라이브니스 엔코딩은 미사용된 동작 저장소 유닛(166)을 식별하는데에 사용될 수 있다. 최대 수 이상의 브랜치 동작들이 동작들 세트 내에서 발생하는 경우에, 동작 저장소 유닛들(166)은 사용되지 않을 수 있다. 예를 들어, 만일 8개까지의 동작들이 트레이스에 저장될 수 있으며, 또한 단지 2개의 브랜치 동작들이 트레이스에 저장될 수 있는 경우에, 소정의 세트의 8개의 동작들이 3개의 브랜치 동작들을 포함한다면, 8개보다 적은 동작들이 트레이스에 저장될 수 있다. 따라서, 만일 트레이스 내에 저장될 수 있는 브랜치 동작들의 개수(N)에 최대 제한이 가해지는 경우에, 트레이스의 N번째 브랜치 동작의 저장소가 트레이스를 종료시킬 수 있다. 더욱이, 일부 실시예들에서, 만일 일정한 동작이 트레이스 내에 저장되는 경우에, 비록 동작 저장소가 이용가능하지만은, (프로그램 순서에서) 후속 동작들이 트레이스 내에 저장되지 않을 수 있다. 예를 들어, 서브루틴 호출 동작들이 트레이스를 종료시킬 수 있다(예를 들어, 따라서, 서브루틴 내의 제 1 동작이 다른 트레이스 내의 제 1 동작으로서 저장될 수 있는데, 이는 동작 태그가 트레이스 태그로서 사용되게 한다). 유사하게는, 서부루틴 복귀 명령들이 트레이스를 종료시킬 수 있다.
도 1을 참조하면, 트레이스 생성기(170)는 각 동작에 대한 적절한 라이브니스 엔코딩을 생성하며, 동일 동작 저장소 유닛(166) 내의 이 라이브니스 엔코딩을 트레이스 캐시(160)의 트레이스 캐시 엔트리(162) 내의 동작으로서 저장한다. 트레이스 생성기(170)는 각 브랜치 동작이 처음으로 실행되는 때에 각 브랜치의 결과에 관한 정보에 기초하여 각 동작에 대한 라이브니스 엔코딩들을 생성할 수 있다. 이 정보는 퇴거 큐(102)로부터 제공될 수 있다. 추가 정보는 하나 이상의 이전 실행들에서 각 브랜치에 대한 각 예측 성공 및/또는 예측된 결과를 식별하는 브랜치 예측 유닛(132)으로부터 제공될 수 있다.
명령들이 트레이스 캐시(16)로부터 페치되는 때에, 각 동작과 관련된 라이브니스 엔코딩이 명령과 함께 프로세서를 통해 전파될 수 있다. 퇴거 큐(102)는 동작들이 퇴거할 수 있는 경계들을 결정하기 위해 각 동작에 대한 라이브니스 엔코딩을 사용할 수 있다. 예를 들어, 트레이스의 동작들의 퇴거를 차단하는 대신에, 이 트레이스의 임의의 모든 동작들이 퇴거 준비를 하며, 이 트레이스 내의 동일 라이브니스 그룹의 모든 동작들이 퇴거 준비를 하자마자, 퇴거 큐(102)는 트레이스의 동작들의 서브세트를 퇴거시킬 수 있다. 일부 실시예들에서, 이 증가된 퇴거 그래뉼리티는 재시작 로직(190)이 차단된 퇴거 때문에 실행을 재시작될 필요의 가능성을 감소시킬 수 있다.
도 4는 트레이스 캐시에서 저장소를 위한 트레이스들을 생성하는 방법의 일 실시예를 도시한다. 만일 임의의 명령들이 예외적인 경우에(예를 들어, 만일 임의의 명령들이 예외를 야기할 수 있거나 임의의 명령들이 재실행될 수 없는 경우에), (12 및 14)에 도시된 바와같이, 예외적 명령들은 임의의 다른 명령과 동일 트레이스에 저장될 수 없을 것이다. (10)에서 수신된 어떤 명령(들)도 예외적이지 않은 경우에, (12 및 16)에서 표시된 바와같이, 이 명령들은 동일 트레이스에서 함께 저장되거나, 추가의 비-예외적인 명령들로서 동일 트레이스에서 포함될 수 있다.
도 5는 상기 추적 캐시 내에 트레이스에 우연히 포함된 검출되지 않은 예외 명령어들의 처리 방법의 일 실시예의 흐름챠트이다. 20에서, 명령어 스트림은 상기 추적 캐시로부터 페치된다. 만약 예외 명령어가 상기 페치된 명령어 스트림으로부터 페치된다면, 22에서 결정된 바와 같이, 상기 파이프라인은 플러시되고 프로세서 실행은 24에서 개시된 바와 같이 명령어 캐시로부터 재시작된다.
상기 명령 스트림 내의 일부 예외 명령어들은 22에서 검출되지 않는다. 만약 이러한 명령어가 예외를 야기한다면, 26 내지 28에 개시된 바와 같이, 상기 프로세서 파이프라인은 플러시(flush)되고 상기 실행은 상기 명령어 캐시로부터 재시작된다. 명령 퇴거가 차단되는지를 결정하는 것은 명령어 퇴거를 모니터하는 것을 포함한다. 만약 어떠한 명령어들도 소정 수의 사이클 동안 퇴거되지 않는다면, 퇴거는 차단되는 것을 식별된다. 만약 명령어 퇴거가 차단되지 않는다면, 상기 추적 캐시로부터 페치된 명령어 스트림은 26 및 30에 개시된 바와 같이 실행하고 퇴거하도록 된다.
예시적인 컴퓨터 시스템들
도 6는 버스 브리지(402)를 통해 다양한 시스템 컴포넌트와 연결된 프로세서(100)를 포함하는 컴퓨터 시스템(400)의 일 실시예의 블록 다이어그램을 도시한다. 프로세서(100)는 전술한 바와 같은 디스패치 유닛(104), 추적 캐시(160), 퇴거 큐(102), 재시작 로직(190), 및/또는 추적 캐시 발생기(170)를 포함한다. 컴퓨터 시스템의 다른 실시예들이 가능하고 또한 예기될 수 있다. 도시된 시스템에서, 주 메모리(614)가 메모리 버스(406)를 통해 버스 브리지(402)에 연결되고, 그래픽 제어기(408)가 AGP 버스(410)를 통해 버스 브리지(402)에 연결된다. 수개의 PCI 디바이스들(412A-412B)이 PCI 버스(414)를 통해 버스 브리지(402)에 연결된다. 제 2 버스 브리지(416)가 또한 EISA/ISA 버스(420)를 통해 하나 이상의 EISA 또한 ISA 디바이스들로(418)로의 전기적 인터페이스를 제공하기 위해 제공된다. 본 예시에서, 프로세서(100)가 CPU 버스(424)를 통해 버스 브리지(402)에 연결되고 선택적 L2 캐시(428)에 연결된다. 일부 실시예에서, 프로세서(100)는 집적 L1 캐시(도시되지 않음)를 포함한다.
버스 브리지(402)는 프로세서(100), 주 메모리(614), 그래픽 제어기(408), 및 PCI 버스(414)에 부착된 디바이스들 사이에 인터페이스를 제공한다. 오퍼레이션이 버스 브리지(402)에 연결된 디바이스들 중 하나로부터 수신되면, 버스 브리지(402)는 상기 오퍼레이션의 타겟(예컨대, 특정 디바이스 또는 PCI 버스(414)의 경우에 상기 타겟은 PCI 버스(414) 상에 있다)을 식별한다. 버스 브리지(402)는 상기 오퍼레이션을 상기 타겟 디바이스에 라우팅한다. 버스 브리지(402)는 일반적으로 오퍼레이션을 소스 디바이스나 버스에 의해 사용되는 프로토콜로부터 타겟 디바이스나 버스에 의해 사용되는 프로토콜로 변환한다.
PCI 버스(414)에 대한 ISA/EISA 버스로의 인터페이스를 제공하는 것에 추가하여, 제 2 버스 브리지(416)는 추가의 기능을 도입한다. 제 2 버스 브리지(416)의 외부에 또는 제 2 버스 브리지와 함께 집적된 입력/출력 제어기(도시되지 않음)가 컴퓨터 시스템(400)에 포함되어 키보드 및 마우스(422) 및 다양한 직렬 및 병렬 포트에 대한 운영상의 지원을 제공한다. 다른 실시예들에서, 외부 캐시 유닛(도시되지 않음)이 또한 프로세서(100)와 버스 브리지(402) 사이에서 CPU 버스(424)에 연결된다. 대안적으로, 외부 캐시가 버스 브리지(402)에 연결되고 외부 캐시에 대한 캐시 제어 로직이 버스 브리지(402)에 집적된다. L2 캐시(428)가 마이크로세서(100)의 후면 구성에서 도시된다. 주목할 사항으로, L2 캐시(428)가 프로세서(100)로부터 격리되어, 프로세서(100)를 갖는 카트리지(cartridge)(예컨대, 슬롯 1 또는 슬롯 A)로 집적되거나 프로세서(100)를 갖는 반도체 기판상에 집적될 수 있다는 점이다.
주 메모리(614)는 애플리케이션 프로그램이 저장되고 프로세서(100)가 우선 실행하는 메모리이다. 적당한 주 메모리(614)는 DRAM을 포함한다. 예를 들면, 복수의 SDRAM나 램버스 DRAM(Rambus DRAM) 뱅크들이 적당할 수 있다.
PCI 디바이스들(412A-412B)은 네트워크 인터페이스 카드, 비디오 가속기, 오디오 카드, 하드 또는 플로비 디스크 드라이브 또는 드라이브 제어기, SCSI(소형 컴퓨터 시스템 인터페이스) 어댑터 및 전화 카드와 같은 다양한 주변 버스들의 예시이다. 유사하게, ISA 디바이스(418)는 모뎀, 사운드 카드, 및 GPIB 또는 필드 버스 인터페이스 카드(field bus interface card)와 같은 다양한 데이터 수집 카드와 같은 다양한 유형의 주변 디바이스들의 예시이다.
디스플레이(426) 상에 텍스트와 영상의 렌더링(rendering)을 제어하도록 그래픽 제어기(408)가 제공된다. 그래픽 제어기(408)는 주 메모리(614)로 및 주 메모리로부터 효과적으로 이동할 수 있는 3차원 데이터 구조를 렌더링하는 것으로 당해 업계에 일반적으로 알려진 전형적인 그래픽 가속기를 포함한다. 그래픽 제어기(408)는 따라서 AGP 버스(410)의 매스터(master)인바, 이는 버스 브리지(402) 내의 타겟 인터페이스로 액세스를 요청하고 수신할 수 있어서 주 메모리(614)로의 액세스를 획득할 수 있기 때문이다. 전용 그래픽 버스는 주 메모리(614)로부터 데이터의 급속 검색을 제공한다. 특정 오퍼레이션에 대해서, 그래픽 제어기(408)는 또한 AGP 버스(410) 상에 PCI 프로토콜 트랜잭션들을 생성하도록 구성된다. 버스 브리지(402)의 AGP 인터페이스는 따라서 PCI 프로토콜 타겟 및 개시 트랜잭션들 뿐 아니라 AGP 프로토콜 트랜잭션들 모두를 지원하는 기능을 포함할 수 있다. 디스플레이(426)는 영상 또는 텍스트가 제공될 수 있는 임의의 전자 디스플레이이다. 적당한 디스플레이(426)는 음극선 튜브(CRT), 액정 디스플레이(LCD) 등을 포함할 수 있다.
주목할 사항으로, 상기에서 AGP, PCI 및 ISA 또는 EISA 버스가 예시로서 사용되었지만, 모든 버스 아키텍처가 필요시에 대체될 수 있다는 점이다. 또한, 컴퓨터 시스템(400)은 추가의 프로세서(예컨대, 컴퓨터 시스템(400)의 선택적 컴포넌트로 도시된 프로세서(100a)를 포함하는 마이크로프로세싱 컴퓨터 시스템일 수 있다. 프로세서(100a)는 프로세서(100)와 유사하다. 더욱 상세하게, 프로세서(100a)는 프로세서(100)의 동일한 카피(copy)이다. 프로세서(100a)는 독립적인 버스를 통해 버스 브리지(402)에 접속되거나(도 5에 도시된 바와 같이) 또는 프로세서와 CPU 버스(424)를 공유한다. 게다가, 프로세서(100a)는 L2 캐시(428)에 유사한 선택적인 L2 캐시(428a)에 연결된다.
도 7에서, 컴퓨터 시스템(400)의 다른 실시예가 도시된다. 다른 실시예들이 가능하고 예기된다. 도 7의 실시예에서, 컴퓨터 시스템(400)은 수 개의 프로세싱 노드(612A, 612B, 612C 및 612D)를 포함한다. 각 프로세싱 노드는 각각의 프로세싱 노드(612A-612D) 내에 포함된 메모리 제어기(616A-616D)를 통해 각 메모리(614A-614D)에 연결된다. 추가로, 프로세싱 노드(612A-612D)는 상기 프로세싱 노드들(612A-612D) 사이에서 통신하는데 사용되는 인터페이스 로직을 포함한다. 예를 들면, 프로세싱 노드(612A)는 프로세싱 노드(612B)와 통신하기 위한 인터페이스 로직(618A)과, 프로세싱 노드(612C)와 통신하기 위한 인터페이스 로직(618B), 및 또 다른 프로세싱 노드(도시되지 않음)와 통신하기 위한 제 3 인터페이스 로직(618C)을 포함한다. 유사하게, 프로세싱 노드(612B)는 인터페이스 로직(618D, 618E 및 618F)를 포함하고; 프로세싱 노드(612C)는 인터페이스 로직(618G, 618H 및 618I)를 포함하고; 그리고 프로세싱 노드(612D)는 인터페이스 로직(618J, 618K 및 618L)을 포함한다. 프로세싱 노드(612D)는 인터페이스 로직(618L)을 통해 복수의 입력/출력 디바이스들(예컨대, 데이지 체인 구성(daisy chain configuration) 내의 디바이스들(620A-620B))과 통신하도록 연결된다. 다른 프로세싱 노드들은 유사한 방식으로 다른 I/O 디바이스들과 통신할 것이다.
프로세싱 노드들(612A-612D)은 프로세싱 노드들 사이의 통신을 위해 패킷 기반 링크를 실행한다. 본 실시예에서, 상기 링크는 단방향 라인들 세트들(sets of unidirectional lines)(예컨대, 라인(624A)은 프로세싱 노드(612A)로부터 프로세싱 노드(612B)로 패킷을 전송하는데 사용되고 라인(624B)은 프로세싱 노드(612B)로부터 프로세싱 노드(612A)로 패킷을 전송하는데 사용된다)로서 구현된다. 다른 라인들 세트(624C-624H)가 도 6에 도시된 바와 같은 다른 프로세싱 노드들 사이에 패킷을 전송하는데 사용된다. 일반적으로, 각 라인들 세트(624)는 하나 이상의 데이터 라인들, 상기 데이터 라인들에 대응하는 하나 이상의 클록 라인들(clock lines), 및 운반되는 패킷의 유형을 나타내는 하나 이상의 제어 라인들을 포함한다. 상기 링크는 프로세싱 노들 사이에서 통신하기 위해 캐시 코히런트 방식으로 또는 프로세싱 노드와 I/O 디바이스(또는 PCI 버스 또는 ISA 버스와 같은 종래 구성의 I/O 버스에 대한 버스 브리지) 사이에서 통신하기 위해 넌코히런트(non-coherent) 방식으로 오퍼레이팅된다. 게다가, 상기 링크는 도시된 바와 같이 I/O 디바이스들 사이의 데이지 체인 구조를 사용하여 넌코히어런트 방식으로 오퍼레이팅될 수 있다. 주목할 사항은, 하나의 프로세싱 노드로부터 다른 프로세싱 노드로 전송되는 패킷은 하나 이상의 중간 노드들을 통과한다는 점이다. 예를 들면, 프로세싱 노드(612A)에 의해 프로세싱 노드(612D)로 전송된 패킷은 도 6에 도시된 바와 같이 프로세싱 노드(102B)나 프로세싱 노드(612C)를 통해 통과한다. 모든 적당한 라우팅 알고리즘이 사용될 수 있다. 컴퓨터 시스템(400)의 다른 실시예들은 도 6에 도시된 실시예들보다 많거나 적은 프로세싱 노드들을 포함할 수 있다.
일반적으로, 노드들 사이의 상기 라인들(624) 상에 하나 이상의 비트 시간들로서 전송될 수 있다. 비트 시간은 대응하는 클록 라인들 상의 클록 신호의 상승 도는 하강 에지일 것이다. 패킷들은 트랜잭션을 개시하기 위한 커맨드 패킷, 캐시 코히어런시를 유지하기 위한 프로브 패킷, 및 프로브와 커맨드에 대한 응답으로부터 응답 패킷을 포함한다.
메모리 제어기 및 인터페이스 로직에 더하여 프로세싱 노드들(612A-612D)은 하나 이상의 프로세서들을 포함한다. 일반적으로 말해서, 프로세싱 노드는 적어도 하나의 프로세서를 포함하고 선택적으로 필요한 경우에 메모리 및 다른 로직과 통신하기 위해 메모리 제어기를 포함한다. 더욱 상세하게, 각 프로세싱 노드(612A-612D)는 프로세서(100)의 하나 이상의 카피를 포함한다. 프로세싱 노드들(612)은 전술한 바와 같이 각각 디스패치 유닛(104), 추적 캐시(160), 퇴거 큐(102), 재시작 로직(190), 및/또는 추적 캐시 발생기(170)를 포함하는 프로세서(100)를 포함한다. 외부 인터페이스 유닛(612D)은 메모리 제어기(616D) 뿐 아니라 노드 내에 인터페이스 로직(618L)을 포함한다.
메모리들(614A-614D)은 모든 적당한 메모리 디바이스들을 포함한다. 예를 들면, 메모리(614A-614D)는 하나 이상의 RAMBUS DRAM들(RDRAM들), 동기식 DRAM(SDRAM), 정적 RAM등을 포함한다. 컴퓨터 시스템(400)의 어드레스 공간은 메모리들(614A-614D) 사이에 분할된다. 각 프로세싱 노드(612A-612D)는 어떤 어드레스가 어떤 메모리들(614A-614D)로 매핑되었는지, 따라서 특정 어드레스에 대한 메모리 요청이 어떤 프로세싱 노드(612A-612D)로 라우팅되어야 하는지를 결정하는데 사용되는 메모리 맵을 포함한다. 일 실시예에서, 컴퓨터 시스템(400) 내의 어드레스에 대한 코히어런시 포인트는 상기 어드레스에 대응하는 바이트를 저장하는 메모리에 연결된 메모리 제어기(616A-616D)이다. 즉, 메모리 제어기(616A-616D)는 대응하는 메모리(614A-614D)에 대한 각 메모리 액세스가 캐시 코히어런트 방식으로 발생하였음을 보증한다. 메모리 제어기(616A-616D)는 메모리들(614A-614D)로 인터페이스하는 제어 회로소자를 포함한다. 추가로, 메모리 제어기(616A-616D)는 메모리 요청들을 큐잉(queuing)하는 메모리 큐를 포함한다.
인터페이스 로직(618A-618L)은 링크로부터 패킷을 수신하고 링크로 전송될 패킷들을 버퍼링하는 다양한 버퍼들을 포함한다. 컴퓨터 시스템(400)은 패킷 전송의 임의의 적당한 흐름 제어 메커니즘을 이용한다. 예를 들면, 일 실시예에서, 각 인터페이스 로직(618)은 인터페이스 로직이 접속되는 링크의 다른 종단에 있는 수신기 내의 각 버퍼 유형의 개수의 집계를 저장한다. 수신 인터페이스 로직이 패킷을 저장하기 위한 빈공간을 갖고 있지 않다면 인터페이스 로직은 패킷을 전송하지 않는다. 수신 버퍼는 패킷을 순방향으로 라우팅함으로써 비워져 이용가능한 상태로 되기 때문에, 수신 인터페이스 로직은 상기 버퍼가 이용가능하게 되었음을 표시는 메시지를 전송 인터페이스 로직에 전송한다. 이러한 메커니즘은 "쿠폰-기반(coupon-based)" 시스템으로 지칭된다.
I/O 디바이스들(620A-620B)은 모든 적당한 I/O 디바이스들이다. 예를 들면, I/O 디바이스들(620A-620B)은 상기 디바이스들이 연결된 다른 컴퓨터 시스템과 통신하기 위한 디바이스들(예컨대, 네트워크 인터페이스 카드 또는 모뎀)을 포함한다. 게다가, I/O 디바이스들(620A-620B)은 비디오 가속기, 오디오 카드, 하드 또는 플로피 디스크 드라이브 또는 드라이브 제어기, SCSI(소형 컴퓨터 시스템 인터페이스) 어댑터 및 전화 카드, 사운드 카드, 및 GPIB 또는 필드 버스 인터페이스 카드(field bus interface card)와 같은 다양한 데이터 수집 카드를 포함한다. 주목할 사항으로, 용어 "I/O 디바이스" 및 용어 "주변 디바이스"는 본 명세서에서 동의어로서 사용된다.
본 명세서에서 사용되는 바와 같이, 용어 "클록 사이클"은 명령어 프로세싱 파이프라인들의 다양한 스테이지들이 그들의 작업을 완료하는 시간 간격을 일컫는다. 명령어 및 컴퓨팅 값들은 클록 사이클을 정의하는 클록 신호에 따라 메모리 요소(레지스터나 어레이와 같은)에 의해 획득된다. 예를 들면, 메모리 요소는 클록 신호의 상승 또는 하강 에지에 따른 값을 획득한다.
상기에서, 신호는 "어서트(assert)"되는 것으로 기술된다. 신호는 특정 정보 부분을 나타내는 값을 운반할 때 어서트되는 것으로 정의된다. 특정 신호는 이진 1 값 또는 대안적으로 이진 0 값을 운반할 때 어서트되는 것으로 정의될 수 있다.
본 명세서를 일단 숙지한 당해 기술분야의 당업자에게는 다양한 수정 변경이 가능할 것이다. 후술하는 청구항들은 이러한 모든 수정 변경을 포괄하도록 해석되어야 한다.
본 발명은 일반적으로 프로세서 분야에 응용할 수 있다.

Claims (10)

  1. 명령 캐시(106)와;
    복수의 트레이스 캐시 엔트리들(162)을 포함하는 트레이스 캐시(160)와; 그리고
    상기 명령 캐시(106) 및 상기 트레이스 캐시(160)에 결합되는 트레이스 생성기(170)를 포함하며,
    상기 트레이스 생성기(170)는 상기 명령 캐시(160)에 의해 출력되는 명령들의 그룹을 수신하여, 상기 복수의 트레이스 캐시 엔트리들(162)중 하나에 저장하며, 상기 트레이스 생성기(170)는 상기 명령들의 그룹 내에서 예외 명령을 검출한 다음, 상기 예외 명령이 임의의 비 예외 명령으로서 상기 복수의 트레이스 캐시 엔트리들(162)중 동일한 것에 저장되는 것을 막는 것을 특징으로 하는 시스템.
  2. 제 1 항에 있어서,
    상기 트레이스 생성기(170)는 상기 명령들을 적어도 부분적으로 디코드된 형태로 상기 트레이스 캐시(160)에 저장하는 것을 특징으로 하는 시스템.
  3. 제 2 항에 있어서,
    실행된 명령들을 퇴거하도록 결합되는 퇴거 큐(102)를 더 포함하고, 상기 퇴거 큐(102)는 상기 명령과 동일한 트레이스 캐시 엔트리(162)에 포함되는 모든 명령들이 퇴거 준비가 될 때 까지, 상기 트레이스 캐시(160)로부터 페치되는 임의의 명령의 퇴거를 막는 것을 특징으로 하는 시스템.
  4. 제 2 항에 있어서,
    상기 트레이스 캐시(106)로부터 수신되는 명령들을 디스패치하는 디스패치 유닛(104)을 더 포함하고, 상기 디스패치 유닛(104)은 상기 트레이스 캐시(106)로부터 수신되는 명령들의 그룹 내에서 예외 명령을 검출하고, 상기 예외 명령의 표시를 상기 트레이스 생성기(170)에 제공하며, 상기 트레이스 생성기(170)는 상기 디스패치 유닛(104)으로부터의 표시에 응답하여 상기 예외 명령을 검출하는 것을 특징으로 하는 시스템.
  5. 제 2 항에 있어서,
    상기 트레이스 생성기(170)는 상기 예외 명령을 1개 이상의 다른 명령들 이외의 다른 트레이스 캐시 엔트리(162)에 저장하고, 상기 트레이스 생성기(170)는 상기 예외 명령을 갖는 임의의 다른 명령을 상기 다른 트레이스 캐시 엔트리(162)에 저장하지 않는 것을 특징으로 하는 시스템.
  6. 트레이스 캐시(160) 내의 트레이스 캐시 엔트리(162)에 저장하기 위한 명령들의 그룹을 수신하는 단계와;
    상기 명령들의 그룹에 포함되는 1개 이상의 명령들을 상기 트레이스 캐시 엔트리(162)에 저장하는 단계와;
    상기 명령들의 그룹 내에서 예외 명령을 검출하는 단계와; 그리고
    상기 검출에 응답하여, 상기 1개 이상의 명령들을 갖는 상기 트레이스 캐시 엔트리(162) 내에 상기 예외 명령을 저장하지 않는 단계를 포함하는 것을 특징으로 하는 방법.
  7. 제 6 항에 있어서,
    상기 저장 단계는 상기 1개 이상의 명령들을 적어도 부분적으로 디코드된 형태로 상기 트레이스 캐시 엔트리(162)에 저장하는 단계를 포함하는 것을 특징으로 하는 방법.
  8. 제 7 항에 있어서,
    상기 명령과 동일한 트레이스 캐시 엔트리(162)에 포함되는 모든 명령들이 퇴거 준비가 될 때 까지, 상기 트레이스 캐시(160)로부터 페치되는 임의의 명령의 퇴거를 막는 단계를 더 포함하는 것을 특징으로 하는 방법.
  9. 제 8 항에 있어서,
    상기 임의의 명령의 퇴거 이후 경과되는 주기의 수를 모니터하는 단계와; 그리고
    상기 주기의 수가 임계수를 넘는 경우, 상기 트레이스 캐시(160)로부터 페치되는 명령들을 실행하는 프로세싱 파이프라인을 플러시하고 상기 명령 캐시(106)로부터의 실행을 재개하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  10. 시스템 메모리(404)와; 그리고
    상기 시스템 메모리(404)에 결합되는 프로세서(10)를 포함하는 컴퓨터 시스템(400)에 있어서,
    상기 프로세서(10)는:
    명령 캐시(106)와;
    복수의 트레이스 캐시 엔트리들(162)을 포함하는 트레이스 캐시(160)와; 그리고
    상기 명령 캐시(106) 및 상기 트레이스 캐시(160)에 결합되는 트레이스 생성기(170)를 포함하며,
    상기 트레이스 생성기(170)는 상기 명령 캐시(160)에 의해 출력되는 명령들의 그룹을 수신하여, 상기 복수의 트레이스 캐시 엔트리들(162)중 하나에 저장하며, 상기 트레이스 생성기(170)는 상기 명령들의 그룹 내에서 예외 명령을 검출한 다음, 상기 예외 명령이 임의의 비 예외 명령으로서 상기 복수의 트레이스 캐시 엔트리들(162)중 동일한 것에 저장되는 것을 막는 것을 특징으로 하는 컴퓨터 시스템(400).
KR1020067008482A 2003-10-01 2004-06-28 트레이스 캐시 기반 프로세서에서 예외 명령어들을 처리하는 시스템 및 방법 KR100993018B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/676,437 US7133969B2 (en) 2003-10-01 2003-10-01 System and method for handling exceptional instructions in a trace cache based processor
US10/676,437 2003-10-01

Publications (2)

Publication Number Publication Date
KR20060108644A true KR20060108644A (ko) 2006-10-18
KR100993018B1 KR100993018B1 (ko) 2010-11-09

Family

ID=34393582

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020067008482A KR100993018B1 (ko) 2003-10-01 2004-06-28 트레이스 캐시 기반 프로세서에서 예외 명령어들을 처리하는 시스템 및 방법

Country Status (8)

Country Link
US (1) US7133969B2 (ko)
JP (1) JP2007507791A (ko)
KR (1) KR100993018B1 (ko)
CN (1) CN100407134C (ko)
DE (1) DE112004001854T5 (ko)
GB (1) GB2422464B (ko)
TW (1) TWI352927B (ko)
WO (1) WO2005041024A2 (ko)

Families Citing this family (36)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8069336B2 (en) * 2003-12-03 2011-11-29 Globalfoundries Inc. Transitioning from instruction cache to trace cache on label boundaries
US7437512B2 (en) * 2004-02-26 2008-10-14 Marvell International Ltd. Low power semi-trace instruction/trace hybrid cache with logic for indexing the trace cache under certain conditions
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
US7365007B2 (en) * 2004-06-30 2008-04-29 Intel Corporation Interconnects with direct metalization and conductive polymer
US7568070B2 (en) * 2005-07-29 2009-07-28 Qualcomm Incorporated Instruction cache having fixed number of variable length instructions
US7987342B1 (en) 2005-09-28 2011-07-26 Oracle America, Inc. Trace unit with a decoder, a basic-block cache, a multi-block cache, and sequencer
US8051247B1 (en) 2005-09-28 2011-11-01 Oracle America, Inc. Trace based deallocation of entries in a versioning cache circuit
US7870369B1 (en) 2005-09-28 2011-01-11 Oracle America, Inc. Abort prioritization in a trace-based processor
US7546420B1 (en) 2005-09-28 2009-06-09 Sun Microsystems, Inc. Efficient trace cache management during self-modifying code processing
US8015359B1 (en) 2005-09-28 2011-09-06 Oracle America, Inc. Method and system for utilizing a common structure for trace verification and maintaining coherency in an instruction processing circuit
US8032710B1 (en) 2005-09-28 2011-10-04 Oracle America, Inc. System and method for ensuring coherency in trace execution
US7877630B1 (en) 2005-09-28 2011-01-25 Oracle America, Inc. Trace based rollback of a speculatively updated cache
US7814298B1 (en) 2005-09-28 2010-10-12 Oracle America, Inc. Promoting and appending traces in an instruction processing circuit based upon a bias value
US7953961B1 (en) 2005-09-28 2011-05-31 Oracle America, Inc. Trace unit with an op path from a decoder (bypass mode) and from a basic-block builder
US7953933B1 (en) 2005-09-28 2011-05-31 Oracle America, Inc. Instruction cache, decoder circuit, basic block cache circuit and multi-block cache circuit
US7783863B1 (en) 2005-09-28 2010-08-24 Oracle America, Inc. Graceful degradation in a trace-based processor
US7966479B1 (en) 2005-09-28 2011-06-21 Oracle America, Inc. Concurrent vs. low power branch prediction
US8370576B1 (en) 2005-09-28 2013-02-05 Oracle America, Inc. Cache rollback acceleration via a bank based versioning cache ciruit
US7937564B1 (en) 2005-09-28 2011-05-03 Oracle America, Inc. Emit vector optimization of a trace
US8019944B1 (en) 2005-09-28 2011-09-13 Oracle America, Inc. Checking for a memory ordering violation after a speculative cache write
US8499293B1 (en) 2005-09-28 2013-07-30 Oracle America, Inc. Symbolic renaming optimization of a trace
US7849292B1 (en) 2005-09-28 2010-12-07 Oracle America, Inc. Flag optimization of a trace
US8024522B1 (en) 2005-09-28 2011-09-20 Oracle America, Inc. Memory ordering queue/versioning cache circuit
US7949854B1 (en) 2005-09-28 2011-05-24 Oracle America, Inc. Trace unit with a trace builder
US8037285B1 (en) 2005-09-28 2011-10-11 Oracle America, Inc. Trace unit
US7797517B1 (en) 2005-11-18 2010-09-14 Oracle America, Inc. Trace optimization via fusing operations of a target architecture operation set
CN100444119C (zh) * 2005-12-28 2008-12-17 中国科学院计算技术研究所 一种面向服务体系结构中消息层异常处理方法
US8370609B1 (en) 2006-09-27 2013-02-05 Oracle America, Inc. Data cache rollbacks for failed speculative traces with memory operations
US8010745B1 (en) 2006-09-27 2011-08-30 Oracle America, Inc. Rolling back a speculative update of a non-modifiable cache line
US8074060B2 (en) * 2008-11-25 2011-12-06 Via Technologies, Inc. Out-of-order execution microprocessor that selectively initiates instruction retirement early
CN102360344B (zh) * 2011-10-10 2014-03-12 西安交通大学 矩阵处理器及其指令集和嵌入式系统
US8935574B2 (en) 2011-12-16 2015-01-13 Advanced Micro Devices, Inc. Correlating traces in a computing system
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
GB2553582B (en) * 2016-09-13 2020-07-08 Advanced Risc Mach Ltd An apparatus and method for generating and processing a trace stream indicative of instruction execution by processing circuitry
US20220100626A1 (en) * 2020-09-26 2022-03-31 Intel Corporation Monitoring performance cost of events

Family Cites Families (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3896419A (en) * 1974-01-17 1975-07-22 Honeywell Inf Systems Cache memory store in a processor of a data processing system
WO1993017385A1 (en) * 1992-02-27 1993-09-02 Intel Corporation Dynamic flow instruction cache memory
US6167536A (en) * 1997-04-08 2000-12-26 Advanced Micro Devices, Inc. Trace cache for a microprocessor-based device
US6018786A (en) * 1997-10-23 2000-01-25 Intel Corporation Trace based instruction caching
US6185675B1 (en) * 1997-10-24 2001-02-06 Advanced Micro Devices, Inc. Basic block oriented trace cache utilizing a basic block sequence buffer to indicate program order of cached basic blocks
US5930497A (en) * 1997-12-11 1999-07-27 International Business Machines Corporation Method and means for generation of realistic access patterns in storage subsystem benchmarking and other tests
US6182210B1 (en) * 1997-12-16 2001-01-30 Intel Corporation Processor having multiple program counters and trace buffers outside an execution pipeline
GB2381101B (en) 1998-04-20 2003-06-25 Intel Corp System and method for maintaining branch information
US6256727B1 (en) 1998-05-12 2001-07-03 International Business Machines Corporation Method and system for fetching noncontiguous instructions in a single clock cycle
US6339822B1 (en) * 1998-10-02 2002-01-15 Advanced Micro Devices, Inc. Using padded instructions in a block-oriented cache
US6345295B1 (en) * 1999-01-22 2002-02-05 International Business Machines Corporation Conducting traces in a computer system attachment network
US6247097B1 (en) * 1999-01-22 2001-06-12 International Business Machines Corporation Aligned instruction cache handling of instruction fetches across multiple predicted branch instructions
US6535905B1 (en) * 1999-04-29 2003-03-18 Intel Corporation Method and apparatus for thread switching within a multithreaded processor
US6357016B1 (en) * 1999-12-09 2002-03-12 Intel Corporation Method and apparatus for disabling a clock signal within a multithreaded processor
US6889319B1 (en) * 1999-12-09 2005-05-03 Intel Corporation Method and apparatus for entering and exiting multiple threads within a multithreaded processor
US6578128B1 (en) * 2001-03-29 2003-06-10 Emc Corporation Address management for a shared memory region on a multi-processor controller board
US20020144101A1 (en) * 2001-03-30 2002-10-03 Hong Wang Caching DAG traces
US6973543B1 (en) * 2001-07-12 2005-12-06 Advanced Micro Devices, Inc. Partial directory cache for reducing probe traffic in multiprocessor systems
US6823428B2 (en) * 2002-05-17 2004-11-23 International Business Preventing cache floods from sequential streams
US7139902B2 (en) * 2002-10-29 2006-11-21 Broadcom Corporation Implementation of an efficient instruction fetch pipeline utilizing a trace cache
US7024537B2 (en) * 2003-01-21 2006-04-04 Advanced Micro Devices, Inc. Data speculation based on addressing patterns identifying dual-purpose register
US7143273B2 (en) * 2003-03-31 2006-11-28 Intel Corporation Method and apparatus for dynamic branch prediction utilizing multiple stew algorithms for indexing a global history
US7003629B1 (en) * 2003-07-08 2006-02-21 Advanced Micro Devices, Inc. System and method of identifying liveness groups within traces stored in a trace cache
US8069336B2 (en) * 2003-12-03 2011-11-29 Globalfoundries Inc. Transitioning from instruction cache to trace cache on label boundaries

Also Published As

Publication number Publication date
JP2007507791A (ja) 2007-03-29
US20050076180A1 (en) 2005-04-07
TWI352927B (en) 2011-11-21
CN1864131A (zh) 2006-11-15
KR100993018B1 (ko) 2010-11-09
WO2005041024A2 (en) 2005-05-06
WO2005041024A3 (en) 2006-05-11
CN100407134C (zh) 2008-07-30
DE112004001854T5 (de) 2006-08-03
GB0606179D0 (en) 2006-05-10
US7133969B2 (en) 2006-11-07
GB2422464A (en) 2006-07-26
TW200517955A (en) 2005-06-01
GB2422464B (en) 2007-02-14

Similar Documents

Publication Publication Date Title
KR100993018B1 (ko) 트레이스 캐시 기반 프로세서에서 예외 명령어들을 처리하는 시스템 및 방법
KR100958705B1 (ko) 로드 동작들의 추론적 결과들을 레지스터 값들에링크시키는 시스템 및 방법
US8069336B2 (en) Transitioning from instruction cache to trace cache on label boundaries
KR100953207B1 (ko) 로드/저장 오퍼레이션들을 바이패스하기 위하여 추론적 소스 오퍼랜드를 사용하는 시스템 및 방법
US6907520B2 (en) Threshold-based load address prediction and new thread identification in a multithreaded microprocessor
US5983325A (en) Dataless touch to open a memory page
US7213126B1 (en) Method and processor including logic for storing traces within a trace cache
KR100981168B1 (ko) 데이터-추론-실행을 지원하는 마이크로프로세서에서 사용을위한 스케쥴러
US7415597B2 (en) Processor with dependence mechanism to predict whether a load is dependent on older store
US6622237B1 (en) Store to load forward predictor training using delta tag
US6651161B1 (en) Store load forward predictor untraining
US6973563B1 (en) Microprocessor including return prediction unit configured to determine whether a stored return address corresponds to more than one call instruction
KR100698493B1 (ko) 좁은 피연산자들에서 계산을 수행하는 방법 및 장치
WO2005111794A1 (en) System and method for validating a memory file that links speculative results of load operations to register values
US7165167B2 (en) Load store unit with replay mechanism
US7366885B1 (en) Method for optimizing loop control of microcoded instructions
US7197630B1 (en) Method and system for changing the executable status of an operation following a branch misprediction without refetching the operation
US7266673B2 (en) Speculation pointers to identify data-speculative operations in microprocessor
US7555633B1 (en) Instruction cache prefetch based on trace cache eviction
KR20070019750A (ko) 로드 동작의 투기적인 결과들을 레지스터 값들에 연결하는메모리 파일을 유효화하기 위한 시스템 및 그 방법

Legal Events

Date Code Title Description
A201 Request for examination
N231 Notification of change of applicant
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
LAPS Lapse due to unpaid annual fee