KR101748506B1 - 실시간 명령어 추적 프로세서들, 방법들 및 시스템들 - Google Patents

실시간 명령어 추적 프로세서들, 방법들 및 시스템들 Download PDF

Info

Publication number
KR101748506B1
KR101748506B1 KR1020157014040A KR20157014040A KR101748506B1 KR 101748506 B1 KR101748506 B1 KR 101748506B1 KR 1020157014040 A KR1020157014040 A KR 1020157014040A KR 20157014040 A KR20157014040 A KR 20157014040A KR 101748506 B1 KR101748506 B1 KR 101748506B1
Authority
KR
South Korea
Prior art keywords
rtit
queue
logic
packets
processor
Prior art date
Application number
KR1020157014040A
Other languages
English (en)
Other versions
KR20150080581A (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 KR20150080581A publication Critical patent/KR20150080581A/ko
Application granted granted Critical
Publication of KR101748506B1 publication Critical patent/KR101748506B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3466Performance evaluation by tracing or monitoring
    • G06F11/3471Address tracing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/40Bus structure
    • G06F13/4063Device-to-bus coupling
    • G06F13/4068Electrical coupling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/865Monitoring of software

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Software Systems (AREA)
  • Debugging And Monitoring (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)
  • Microcomputers (AREA)

Abstract

일 양상의 방법은 프로세서의 제1 논리 프로세서에 대해 RTIT(Real Time Instruction Trace)를 생성하는 것을 포함한다. RTIT 패킷들은 제1 논리 프로세서에 의해 실행되는 소프트웨어의 흐름을 나타낸다. RTIT 패킷들은 제1 논리 프로세서에 대응하는 RTIT 큐에 저장된다. RTIT 패킷들은 주로 프로세서의 펌웨어로 RTIT 큐로부터 메모리에 전송된다. 기타 방법들, 장치들 및 시스템들이 또한 개시된다.

Description

실시간 명령어 추적 프로세서들, 방법들 및 시스템들{REAL TIME INSTRUCTION TRACE PROCESSORS, METHODS, AND SYSTEMS}
실시예들은 명령어 추적의 분야에 관한 것이다. 특히, 실시예들은 프로세서들에서 실시간 명령어 추적의 분야에 관한 것이다.
멀티-쓰레드된 및/또는 멀티-코어 프로세서들이 오늘날 흔하다. 이들은 서버들, 데스크톱들, 랩톱들, 넷북들, 태블릿들, 스마트폰들 및 셀 폰들과 같은 다양한 타입들의 컴퓨팅 디바이스들에서 단지 몇몇 예들을 명명하는데 사용된다. 적어도 일부 프로세서 세그먼트들에 대해서, 점점 더 많은 쓰레드들 및/또는 코어들로의 추세는 미래에도 계속될 것으로 현재 예상된다.
이러한 다수의 쓰레드들 및/또는 코어들은, 더 많은 명령어들이 동시에 또는 병렬로 실행되게 하는 하드웨어 병렬성을 제공함으로써 성능을 향상시키는데 일반적으로 도움이 된다. 이러한 다수의 쓰레드들 및/또는 코어들은 멀티-쓰레드된 또는 병렬 처리 소프트웨어의 개발을 고무하여 왔다. 예를 들어, 멀티-쓰레드된 애플리케이션은 상이한 하드웨어 쓰레드들, 코어들 또는 다른 논리 프로세서들 상에서 동시에 실행되는 다수 쓰레드들을 포함할 수 있다.
소프트웨어의 실행 동안 다양한 상이한 타입들의 이벤트들이 소프트웨어의 제어 흐름을 변경할 수 있다. 이러한 이벤트들의 예들은, 조건부 분기 명령어들, 점프 명령어들, 서브루틴 호출 명령어들 및 비동기식 이벤트들(예를 들어, 인터럽트들, 예외들 등)의 실행을 포함한다. 제어 흐름을 설명하는 정보를 포함하는 소프트웨어의 실행에 관한 정보를 로그하거나 또는 기록하는데 추적이 종종 사용된다.
그러나, 이러한 멀티-쓰레드된 및/또는 멀티-코어 프로세서들과 특히 관련된 하나의 도전과제는, 싱글-쓰레드된 및/또는 싱글-코어 프로세서들에 비해 디버그가 더 어렵게 되는 경향이 있다는 점이다. 실시간 코드 실행 흐름을 아는 것도 종종 도전된다. 결과적으로, 디버그는 더 많은 시간을 차지하는 경향이 있을 수 있고, 이는 제품들을 시장에 내놓는데 있어서 더 높은 개발 비용들 및/또는 잠재적 지연들에 이를 수 있다. 또한, 많은 기존의 추적 방법들은 성능에 매우 지장을 주는 경향이 있다.
본 발명은, 이하의 설명 및 본 발명의 실시예들을 도시하는데 사용되는 첨부 도면을 참조하여 가장 잘 이해될 수 있다. 도면에서:
도 1은 RTIT(Real Time Instruction Trace) 로직의 일 실시예를 갖는 프로세서의 일 실시예 및 메모리를 포함하는 컴퓨터 시스템의 블럭도이다.
도 2는 RTIT 로직의 일 실시예를 갖는 프로세서의 일 실시예의 블럭도이다.
도 3은 RRQ의 콘텐츠를 메모리에 전송하도록 동작될 수 있는 RRQ(RTIT Reorder buffer Queue) 콘텐츠 전송 로직의 일 예를 갖는 프로세서의 일 실시예의 블럭도이다.
도 4a는, 본 발명의 실시예들에 따라, 예시적인 순차적 파이프라인 및 예시적인 레지스터 리네이밍, 비순차적 발행/실행 파이프라인 양자 모두를 도시하는 블럭도이다.
도 4b는, 본 발명의 실시예들에 따라, 프로세서에 포함될 순차적 아키텍처 코어의 예시적인 실시예 및 예시적인 레지스터 리네이밍, 비순차적 발행/실행 아키텍처 코어 양자 모두를 도시하는 블럭도이다.
도 5a는, 본 발명의 실시예들에 따른, 싱글 프로세서 코어, 온-다이 상호접속 네트워크에 대한 그의 접속 및 레벨 2(L2) 캐시의 그의 로컬 서브세트의 블럭도이다.
도 5b는, 본 발명의 실시예들에 따른 도 5a에서의 프로세서 코어의 부분의 확대도이다.
도 6은, 본 발명의 실시예들에 따른, 둘 이상의 코어를 가질 수 있고, 통합 메모리 컨트롤러를 가질 수 있고, 통합 그래픽을 가질 수 있는 프로세서의 블럭도이다.
도 7은 본 발명의 일 실시예에 따른 시스템의 블럭도를 도시한다.
도 8은 본 발명의 일 실시예에 따른 제1 보다 상세한 예시적인 시스템의 블럭도를 도시한다.
도 9는 본 발명의 일 실시예에 따른 제2 보다 상세한 예시적인 시스템의 블럭도를 도시한다.
도 10은 본 발명의 일 실시예에 따른 SoC의 블럭도를 도시한다.
도 11은 본 발명의 실시예들에 따라 소스 명령어 세트 내의 바이너리 명령어들을 타겟 명령어 세트 내의 바이너리 명령어들로 변환하는 소프트웨어 명령어 변환기의 사용을 대조하는 블럭도이다.
RTIT(Real Time Instruction Trace)를 위한 방법들, 프로세서들 및 시스템들이 본 명세서에 개시된다. 이하의 설명에서는 다수의 특정 상세들(예를 들어, 특정 RTIT 로직 구현들, RTIT 패킷 포맷들, 하드웨어/펌웨어 파티셔닝 상세들, 프로세서 구성들, 마이크로아키텍처 상세들, 동작들의 시퀀스들, 시스템 컴포넌트들의 타입들 및 상호관계들 등)이 설명된다. 그러나, 본 발명의 실시예들이 이러한 특정 상세들 없이도 실시될 수 있다는 것이 이해된다. 다른 경우들에서, 잘 알려진 회로들, 구조들 및 기술들은 이러한 설명의 이해를 불명료하게 하지 않기 위해 상세히 도시되지 않았다.
도 1은 프로세서(101) 및 메모리(105)의 일 실시예를 포함하는 컴퓨터 시스템(100)의 블럭도이다. 이러한 프로세서 및 메모리는, 종래의 연결 메커니즘(112)에 의해(예를 들어, 하나 이상의 버스들, 허브들, 메모리 컨트롤러들, 칩셋 컴포넌트들 등을 통해) 연결되거나, 또는 다른 방식으로 상호 통신한다. 이러한 메모리는 하나 이상의 메모리 디바이스들 및/또는 하나 이상의 상이한 타입들의 메모리를 포함할 수 있다.
일부 실시예들에서, 프로세서(101)는 (예를 들어, 데스크톱, 랩톱, 넷북, 태블릿, 스마트폰, 셀 폰, 서버 및 유사한 컴퓨터 시스템들에 사용되는 타입의) 범용 프로세서일 수 있다. 대안적으로, 이러한 프로세서는 특수 목적 프로세서일 수 있다. 적합한 특수 목적 프로세서들의 예들은, 몇몇 예를 들자면, 통신 프로세서들, 네트워크 프로세서들, 암호화 프로세서들, 그래픽 프로세서들, 코-프로세서들, 임베디드 프로세서들, DSP들(Digital Signal Processors) 및 컨트롤러들(예를 들어, 마이크로컨트롤러들)을 포함하지만, 이에 제한되는 것은 아니다.
프로세서는 제1 논리 프로세서(102-1) 내지 옵션으로 제N 논리 프로세서(102-N)를 포함하고, 여기서 N은 임의의 적절한 수(예를 들어, 2에서부터 수십 또는 심지어 수백까지)일 수 있다. 각각의 논리 프로세서는 소프트웨어 쓰레드를 지원하고 및/또는 이에 독립적으로 관련되는 로직을 포함할 수 있다. 적합한 논리 프로세서들의 예들은, 코어, 하드웨어 쓰레드, 쓰레드 유닛, 쓰레드 슬롯, 맥락 유닛 및/또는 명령어들을 실행하고 상태(예를 들어, 실행 상태 및/또는 아키텍처 상태)를 보유할 수 있는 다른 하드웨어 및/또는 로직을 포함하지만, 이에 제한되는 것은 아니다.
다시 도 1을 참조하면, 메모리(105)는 소프트웨어(106)를 포함한다. 도시된 실시예에서, 소프트웨어는 운영 체제(107) 및 하나 이상의 애플리케이션들(108)을 포함한다. 동작 동안, 소프트웨어의 일부는 실행 소프트웨어(103)로서 프로세서 상에서 실행될 수 있다. 예를 들어, 제1 논리 프로세서는 제1 실행 소프트웨어(예를 들어, 제1 쓰레드)(103-1)을 가질 수 있고, 옵션의 제N 논리 프로세서는 제N 실행 소프트웨어(예를 들어, 제N 쓰레드)(103-N)를 옵션으로 가질 수 있다. 실시예들은 (예를 들어, 싱글 논리 프로세서를 포함하는) 임의 수의 논리 프로세서들에 대해 사용될 수 있지만, 보통 최대의 이점은 이러한 논리 프로세서들이 다수 또는 많이 있을 때 체험될 수 있다. 일반적으로, 논리 프로세서들이 더 많으면 많을 수록, 본 명세서에 개시되는 실시간 명령어 추적 실시예들 없이는, 더 복잡한 실행 및 더 어려운 디버깅이 존재하는 경향이 있다.
실행 소프트웨어는 소프트웨어(106)으로부터 로드되어 프로세서 상에서 실행되는(예를 들어, 스케줄링되고, 디코딩되고, 실행되는 등) 매크로 명령어들 또는 ISA(Instruction Set Architecture) 레벨 명령어들을 포함할 수 있다. 예를 들어, 명령어들은 산술 명령어들, 로드 명령어들, 저장 명령어들 등을 포함할 수 있다. 또한, 명령어들은 소프트웨어에서 분기, 점프 또는 다른 방식으로 이동에 의해 소프트웨어의 흐름을 변경하는 하나 이상의 타입들의 명령어들을 포함할 수 있다. 이러한 명령어들의 예들은, 분기 명령어들, 조건부 분기 명령어들, 점프 명령어들, 호출 명령어들 등을 포함하지만, 이에 제한되는 것은 아니다. 상이한 아키텍처들에서 이러한 명령어들은 종종 상이한 명칭으로 불리운다. 일반적으로 이러한 명령어들은 (예를 들어, 사이에 오는 명령어들을 점프함으로써) 다음 순서의 명령어 이외의 명령어로 이동하는 것을 포함한다. 장애들(faults), 인터럽트들, 예외들 또는 기타 유사한 비동기식 이벤트들 또한 이들이 발생할 때 (핸들러 루틴으로 이동함으로써) 프로그램 흐름을 변경할 수 있다.
다시 도 1을 참조하면, 프로세서는 또한 RTIT(Real Time Instruction Trace) 로직(109)의 실시예를 포함한다. RTIT 로직은 실행 소프트웨어의 제어 흐름에 관한 정보를 포함하여 소프트웨어(103)의 실행에 관한 RTIT 데이터를 생성 및 로그하거나, 기록하거나 또는 저장하도록 동작될 수 있다. 일부 실시예들에서, RTIT 로직은 메모리(105)에 RTIT 데이터(111)를 저장할 수 있다. 일부 실시예들에서, 메모리의 다른 부분들(예를 들어, 다른 어드레스 범위들)은 각각의 논리 프로세서들을 위해 사용될 수 있다. 다른 실시예들에서는, (예를 들어, 차후 후처리 소프트웨어가 RTIT 데이터 추적을 실제 실행 흐름으로 해석하게 하는 메모리에서의 콘텐츠로서) 메모리에 RTIT 데이터를 저장하는 것보다는 오히려, RTIT 데이터가 프로세서 핀들 상에 출력될 수 있다(예를 들어, 그리고 후처리 소프트웨어에 의해 RTIT 데이터 추적을 실제 실행 흐름으로 해석하는데 사용될 수 있다).
일부 실시예들에서, RTIT 로직은 소프트웨어의 실행 동안 모든 비-정적(non-statically) 알려진 프로그램 또는 제어 흐름 변화들에 대해 추적 정보를 기록하도록 동작가능할 수 있다. 예를 들어, RTIT 데이터(111)는, 조건부 분기들이 취해졌는지 여부, 간접 점프 및 호출 명령어들의 목적지 어드레스들, 예외들, 인터럽트들 및 유사한 비동기식 이벤트들에 대한 시작 및 목적지 어드레스들 등을 나타내는 정보를 포함할 수 있다. 일부 실시예들에서, RTIT 데이터는 프로세서 내에서 소프트웨어가 실제로 실시간으로 실행된 곳의 전체 기록 또는 전체 라이브 백 추적을 나타낼 수 있다. 유리하게도, RTIT 로직 및 RTIT 데이터는, 해당량의 RTIT 데이터를 저장하기에 충분한 메모리 가용성이 존재하면, 사용자가 거의 무한한 수의 제어 흐름 변화들(예를 들어, 프로그램 흐름의 시작으로부터 장애까지, 또는 저속 성능의 영역)을 추종하게 할 수 있다.
RTIT 데이터(111)는 다양한 다른 목적들로 사용될 수 있다. 본 발명의 범위가 RTIT 데이터의 임의의 알려진 이러한 용도에 제한되는 것은 아니다. 이러한 가능한 용도들의 예들은, 디버깅(예를 들어, 소프트웨어 함수의 디버그 및/또는 하드웨어 디버그), 포스트 실리콘 인증(post silicon validation), 검진 목적, 성능 분석 및 튜닝, 전력 분석 및 튜닝 등을 포함하지만, 이에 제한되는 것은 아니다. RTIT 데이터는 소프트웨어/하드웨어 개발 동안 및 소프트웨어/하드웨어의 발표 이후 양자 모두에 사용될 수 있다.
일부 경우들에서, 소프트웨어는 RTIT 데이터(111)를 사용하는 하나 이상의 소프트웨어 애플리케이션들(110)를 포함할 수 있다. 예를 들어, 디버깅의 경우에, 실시자는, 디버깅 소프트웨어를 사용하여 RTIT 데이터를 액세스할 수 있고, 이를 사용하여 디버깅 목적으로 소프트웨어가 실제 사용되는 곳에 관한 상세들을 취득할 수 있다. 다른 예로서, 성능 분석 및 튜닝의 경우에, 실시자는, 분석 및 튜닝 소프트웨어를 사용하여 RTIT 데이터를 액세스할 수 있고, RTIT 데이터를 사용하여 소프트웨어가 실제 실행되는 곳 및 얼마나 빨리 실제 실행되는지에 관한 상세들을 취득하여 성능을 분석하고 튜닝할 수 있다.
RTIT 로직(109)은 온-다이 및/또는 온-프로세서이다. 온-다이/프로세서 로직은 다이/프로세서 상에 고정되거나, 상주하거나 또는 영구적이다(예를 들어, 메모리로부터 프로세서에 로드되는 소프트웨어 명령어들과 대조됨). 보통, 온-다이/프로세서 로직은, 프로세서가 파워 오프될 때, 부팅 이전에, 및/또는 제조의 완료시에도 다이/프로세서 상에 존재한다. 일부 실시예들에서, 온-다이/프로세서 로직은 하드웨어(예를 들어, 집적 회로, 트랜지스터들, 레지스터들 등), 펌웨어(예를 들어, 마이크로코드) 및/또는 기타 온-다이/프로세서 로직의 조합을 포함한다. 펌웨어는, 프로세서의 영구적인 및/또는 불휘발성 메모리(예를 들어, ROM(Read Only Memory), EPROM(Electrically Programmable ROM), 플래시 메모리 등) 및 이러한 연구적인 및/또는 불휘발성 메모리에 저장된 명령어들(예를 들어, 마이크로코드, 마이크로명령어들, 마이크로아키텍처 명령어들, ISA 명령어들 보다 하위 레벨인 회로 레벨 명령어들 등)의 조합을 포함할 수 있다.
일부 실시예들에서, RTIT 로직(109)을 위한 하드웨어 및 펌웨어의 조합은, 성능 영향 대상들을 다이 사이즈, 전력 및 관련된 대상들과 균형을 맞추는데 도움을 주도록 선택될 수 있다. RTIT 로직을 완전히 또는 거의 완전히 하드웨어로 구현하는 것 또한 가능하다. 그러나, RTIT 로직을 완전히 또는 거의 완전히 하드웨어로 구현하는 것은 다수의 상당한 단점들을 가질 수 있다. 하나를 예로 들면, 이러한 것은, 프로세서의 사이즈(예를 들어, 프로세서 실리콘 다이 면적), 제조 비용 및 전력 소비를 증가시키는 경향이 있을 수 있는 상당량의 하드웨어 로직을 포함할 수 있다. 하드웨어에 비하여, 펌웨어는, 일반적으로 상당히 적은 사이즈(예를 들어, 적은 다이 면적)을 사용하고, 제조 비용이 더 낮으며, 전력 소비 또한 일반적으로 더 낮다. 그러나, 하드웨어에 비하여, 펌웨어는 일반적으로 성능이 낮고 및/또는 더 많은 성능 침입성이 있는 경향이 있을 수 있는데, 이는 주 흐름 프로세서 동작과 리소스들을 공유하기 때문이다. 따라서, 일부 실시예들에서, RTIT 로직(109)은, 성능 침입성과 사이즈, 제조 비용 및 전력 소비 사이에 바람직한 균형을 달성할 수 있는 하드웨어 및 펌웨어이 조합을 통해 구현될 수 있다. 일부 실시예들에서, RTIT 로직은, 논리 프로세서 당 약 2% 내지 약 20%, 또는 논리 프로세서 당 약 2% 내지 약 15%, 또는 논리 프로세서 당 약 2% 내지 약 10% 범위에 있는 침입도를 제공하도록 동작될 수 있지만, 이것이 요구되는 것은 아니다. 침입도의 레벨은, 주어진 작업부하에 대하여 RTIT 로직이 구현되지 않을 때(예를 들어, 디스에이블됨)에 비하여 RTIT 로직이 구현될 때 성능에서의 감소를 나타낼 수 있다. 전술된 레벨들의 침입도(예를 들어, 퍼센티지들)는 실시예들에 적합하지만 요구되는 것은 아니다. 다른 실시예들은 특정 구현에 적합한 다른 레벨들의 침입도를 사용할 수 있다.
도 2는 RTIT 로직(209)의 일 실시예를 갖는 프로세서(201)의 일 실시예의 블럭도이다. 일부 실시예들에서, 도 2의 프로세서 및 RTIT 로직은 도 1의 시스템에 포함될 수 있다. 대안적으로, 도 2의 프로세서 및 RTIT 로직은 유사하거나 또는 상이한 시스템에 포함될 수 있다. 더욱이, 도 1의 시스템은 도 2의 것들과 동일하거나, 유사하거나 또는 상이한 프로세서 및 RTIT 로직을 포함할 수 있다.
RTIT 로직(209)은, RTIT 패킷화 로직(223), RTIT 재정렬 버퍼 큐(RRQ)(224), RTIT 필터 로직(225), 타이밍 로직(226) 및 RRQ 콘텐츠 전송 로직(227)을 포함한다. RTIT 로직 이외에도, 프로세서는 또한 재정렬 버퍼(ROB)(220), 분기 정렬 버퍼(BOB)(221), 확장된 명령어 포인터(222), 논-리네임드(non-renamed) 버스(228) 및 어드레스 및 제어 신호 버스(229)를 포함한다. 이러한 컴포넌트들은 화살표들 및 버스들에 의해 상호 연결된다. ROB, BOB와 어드레스 및 제어 신호 버스(229)는 OOO(Out-Of-Order) 프로세서들에서 발견되는 종래의 로직을 실질적으로 나타낸다. 예를 들어, ROB 및 BOB는 비순차적으로 실행되었던 명령어들을 본래 프로그램 순서로 다시 재정렬하는데 사용될 수 있다.
BOB(221)는 타겟 어드레스 및 취함(taken)/비-취함(non-taken) 표시와 같은 기타 정보를 포함하는 각 분기와 관련된 정보를 보유한다. ROB(220)는 RTIT 패킷화 로직(223)에게 어느 연산이 분기인지, 분기가 취해지는 경우와 같이, 어느 경우에, BOB가 분기와 관련된 정보를 제공하는 것으로 판독되는지 및 그 목적지 어드레스에 관한 정보를 제공한다. (간접 분기들과 같이) 보다 복잡한 분기들에서 펌웨어는 또한 분기 어드레스들로 및 분기 어드레스들로부터에 관련된다. RTIT 패킷화 로직(223)은, RTIT 패킷들을 생성하고, 이러한 패킷들을 RTIT 재정렬 버퍼 큐(RRQ)(224)에 저장하도록 동작될 수 있다. 일부 실시예들에서, RTIT 패킷화 로직은 하드웨어 리소스들에 충분히 맞추는 방식으로 패킷들을 정렬하여 RRQ에 저장할 수 있다.
상이한 타입들의 RTIT 패킷들이 고려된다. 하나의 가능한 타입의 RTIT 패킷은 TNT(Taken or Not Taken) 패킷이다. TNT 패킷은 다수 조건부 분기들 각각이 취해지는지 또는 취해지지 않는지 여부를 나타낼 수 있다. 일부 실시예들에서, TNT 패킷은 조건부 분기 당 싱글 비트를 사용할 수 있다. 하나의 가능한 규칙에 따르면, 이러한 비트는 분기가 취해졌다는 것을 나타내는 제1 값(즉, 바이너리 1로 설정됨)이 주어질 수 있거나, 또는 분기가 취해지지 않았다는 것을 나타내는 제2 값(예를 들어, 바이너리 0으로 클리어됨)이 주어질 수 있다. 반대의 규칙 또한 가능하다. 각각의 TNT 패킷은 조건부 분기들의 그룹에 대해 이러한 정보를 기록할 수 있다. 하나의 예시적인 실시예에 따르면, 각각의 TNT 패킷은, 8 비트 바이트일 수 있고, 6개 조건부 분기들까지의 결과들을 기록할 수 있다(예를 들어, 6개 분기들까지의 결과들을 나타내는 6 비트를 가짐). 다른 실시예들은 더 적은 또는 더 많은 조건부 분기 결과들을 기록하는 더 넓은 또는 더 좁은 TNT 패킷들을 가질 수 있다.
다른 가능한 타입의 RTIT 패킷은 TIP(Target Instruction Pointer) 패킷이다. TIP 패킷은 간접 분기들, 점프들, 전송들, 먼 이벤트들, 호출들 등의 타겟들을 나타낼 수 있다. TIP는 가변 길이 목적지 어드레스를 포함할 수 있다. 하나의 예시적인 실시예에 따르면, 각각의 TIP 패킷은 약 2 내지 약 7 바이트일 수 있지만, 이것이 요구되는 것은 아니다.
또 다른 가능한 타입의 RTIT 패킷은 FUP(Flow UPdate) 패킷이다. FUP 패킷은 해당 이벤트 이전에 어디에 실행이 있었는지를 로그하는 비동기식 이벤트(예를 들어, 인터럽트, 예외 등)의 소스 어드레스를 나타낼 수 있다. 하나의 예시적인 실시예에 따르면, 각각의 FUP 패킷은 약 3 내지 약 7 바이트일 수 있지만, 이것이 요구되는 것은 아니다.
다른 가능한 예들의 RTIT 패킷들은, 타이밍 및/또는 동기화 패킷들, 코어-대-버스(core-to-bus) 주파수 비율들을 제공하는 패킷들, 패킷들 사이의 코어 사이클들의 수를 제공하는 패킷들, 명령어 추적을 정지 또는 다른 방식으로 제어하는 패킷들, 패킷 스트림 경계들을 식별하는 패킷들 등을 포함하지만, 이에 제한되는 것은 아니다. 이들은 적합한 타입의 RTIT 패킷들에 대한 단지 몇몇 예시적인 예들이다. 기타 실시예들은 다른 타입들의 RTIT 패킷들, 추가적인 RTIT 패킷들 등을 활용할 수 있다.
일부 실시예들에서, RTIT 패킷화 로직(223)은, 실질적으로 전부 하드웨어로(즉, 적어도 90%가 하드웨어로), 또는 주로 하드웨어로(즉, 50%보다 많이 하드웨어로) 구현될 수 있다. 일부 실시예들에서, RTIT 패킷화 로직은 일부 펌웨어(예를 들어, 50% 미만)를 포함할 수 있는데, 펌웨어가 RTIT 패킷들의 부분을 생성하게 하는 것이 RTIT 패킷화 하드웨어 로직의 사이즈를 감소시키는데 도움이 될 수 있기 때문이다.
일부 실시예들에서, RTIT 패킷화 로직은 경량 RTIT 패킷화 로직일 수 있다. 경량 RTIT 패킷화 로직은, 성능 영향(또는 침입)를 로직 사이즈, 비용 및 전력 소비와 균형을 맞추는 방식으로 유연한 또는 지능형인 압축으로 RTIT 재정렬 버퍼 큐(RRQ)에 패킷들을 생성하여 저장하도록 동작될 수 있다. 유리하게도, 유연한 또는 지능형인 압축은 성능에 상당히 영향을 주지 않고 하드웨어 로직의 양을 감소시킬 수 있다. 예를 들어, 최상위 레벨들의 팩킹 또는 압축을 달성하는 방식으로 RRQ에 패킷들을 저장하는 것보다는 오히려, 경량 RTIT 패킷화 로직이 RRQ에서 패킷들 사이에 특정량의 미사용 공간을 남겨두는 중간 레벨의 압축 또는 팩킹을 제공할 수 있다. (예를 들어, 미사용 공간 또는 홀들 등을 제거함으로써) 최상위 레벨 및/또는 완전 압축을 달성하기 위해서는 상당량의 로직이 일반적으로 요구된다. 일부 실시예들에서, 경량 RTIT 패킷화 로직은 완전 압축을 제공하지 않을 수 있는데, 이는 완전 압축에 요구되는 입력 멀티플렉서들 및 채움 버퍼는, 달성될 성능에서의 증가에 의해 보장되는 것보다 많이 사이즈 및 전력 소비를 일반적으로 증가시키기 때문이다. 중간 레벨의 압축 또는 팩킹을 제공하는 것은 충분히 낮은 성능 영향들을 여전히 달성하면서 이러한 로직의 일부를 감소시키는데 도움이 될 수 있다.
일부 실시예들에서는, 이러한 유연한/지능형 압축 이외에도 및/또는 대신에, RTIT 패킷화 로직의 로직량을 감소시키는 다른 방식은 고정된 위치에 특정 패킷들을 갖는 것이다. 예를 들어, 사이클 패킷들이 제1 바이트의 32 청크들(chunks)에만 삽입된다. 이는 사이클 패킷이 바이트 0, 바이트 1 및 바이트 3에만 또는 바이트 32, 바이트 33 및 바이트 34에만 위치될 수 있다는 점을 의미한다. 그러나 사이클 패킷은 최종 패킷 이후 경과된 시간에 따라 1, 2 또는 3 바이트의 길이를 가질 수 있다. 결과적으로, 1 바이트의 사이클 패킷의 경우에, 바이트 1 및 바이트 2는 공간일 수 있고, 이는 홀들이 삽입된다는 것을 의미하며, 일부 실시예들에서 이러한 홀들은 디코더에 의해 NOP들(No-Operations)로서 해석될 수 있다. 일부 실시예들에서, NOP의 특정 패킷은 홀들을 구현하는데 사용될 수 있다.
도 2를 다시 참조하면, RTIT 재정렬 버퍼 큐(RRQ)(224)가 RTIT 패킷화 로직(223)과 연결된다. RRQ는 RTIT 패킷들(232)을 저장하도록 동작될 수 있다. RRQ는 간접 분기의 경우에 ROB 하드웨어에 의해 채워질 수 있거나 또는 FAR 분기 또는 예외의 경우에 펌웨어에 의해 채워질 수 있다. 일부 실시예들에서는, 별도의 RRQ가, 프로세서의 하나 이상의 논리 프로세서들(예를 들어, 하드웨어 쓰레드들) 각각에 대해 포함될 수 있고, 대응 논리 프로세서에 대해 RTIT 패킷들을 저장하는데 사용될 수 있다. 일부 실시예들에서, 각각의 RRQ는 종래의 LBR(Last Branch Record)보다 상당히 더 클 수 있다. LBR은 일반적으로 매우 제한된 수의 분기들만을 보유할 수 있다(예를 들어, 일부 경우들에서는 약 10 내지 20보다 크지 않음). 이러한 제한된 수의 분기 기록들은 매우 짧은 양의 시간(예를 들어, 1초의 몇 분의 1)에 마주치게 될 수 있고, 종종 불충분하다. 대조적으로, 각각의 RRQ는 종래의 LBR보다 상당히 더 클 수 있다. 예를 들어, 일부 실시예들에서, 각각의 RRQ는, 예를 들어, 약 0.3 내지 약 4 킬로바이트, 또는 약 0.4 내지 약 4 킬로바이트, 또는 약 0.5 내지 약 3 킬로바이트와 같이, 적어도 0.3 킬로바이트의 사이즈를 가질 수 있는 반면, LBR은 종종 약 0.2 킬로바이트보다 크지 않다. 이러한 사이즈들은 논리 프로세서 마다이다.
일부 실시예들에서, RRQ는 2 이상의 논리 프로세서들에 의해 동시에 사용되도록 동작될 수 있다. 예를 들어, RRQ는, 주어진 코어에 대응할 수 있고, 그 주어진 코어의 2 이상의 상이한 논리 프로세서들에 할당되는 상이한 부분들을 가질 수있다. 일부 실시예들에서, RRQ의 부분들은 상이한 논리 프로세스들에 고정으로 또는 정적으로 할당될 수 있는데, 이는 로직을 감소시키는데 및/또는 더 간단한 구현을 제공하는데 도움이 될 수 있다. 다른 실시예들에서는, RRQ의 부분들이 상이한 논리 프로세서들 사이에서 다이나믹하게 할당될 수 있는데, 이는 더 큰 유연성을 허용할 수 있다. 예를 들어, 이는 논-액티브(non-active) 논리 프로세서에 할당되는 RRQ의 부분이 재청구되게 할 수 있어, 이는 액티브 논리 프로세서에 의해 사용될 수 있게 된다.
일부 실시예들에서는, 기존 LBR(Last Branch Record) 버퍼가, 재사용될 수 있고, RRQ 버퍼를 구현하기 위해 사이즈가 확장될 수 있다. LBR 버퍼의 이러한 재사용은 다이 면적, 제조 비용 등에서의 불필요한 증가를 회피하는데 도움이 될 수 있다. 이러한 실시예에서, RRQ 및 LBR은 일반적으로 동시에 사용되지 않을 것이며, 오히려 교대로 사용될 것이다. 예를 들어, 사용자는 RRQ 또는 LBR 중 어느 하나를 사용하도록 시스템을 구성할 수 있다. 다른 실시예들에서는, 별도의 LBR 및 RRQ 버퍼들이 옵션으로 포함될 수 있다. 이러한 실시예들에서, 별도의 LBR 및 RRQ는 옵션으로 및/또는 잠재적으로 동시에 사용될 수 있다.
도 2를 다시 참조하면, RTIT 로직은 RTIT 필터 로직(225)을 포함한다. RTIT 필터 로직은 RTIT 패킷화 로직(223) 및 RRQ(224)와 연결된다. 일부 실시예들에서, RTIT 필터 로직은 주로 하드웨어로 구현될 수 있지만, 이것이 요구되는 것은 아니다. RTIT 필터 로직은 추적될 실행을 추적되지 않을 실행으로부터 필터링하도록 동작될 수 있다. 다양한 실시예들에서, 프로세서 및/또는 RTIT 로직은 어느 실행이 추적될 것인지 및/또는 어느 것이 추적되지 않을지를 사용자 또는 소프트웨어(예를 들어, 디버깅 프로그램)가 특정하게 할 수 있다. 예를 들어, 이는, 모든 소프트웨어의 실행이 추적되게, 운영 체제의 실행이 추적되게, 또는 하나 이상의 특정 애플리케이션들의 실행이 추적되게 할 수 있다. 일부 실시예들에서, RTIT 필터 로직은 어드레스 범위에 기초하여 및/또는 동작 모드에 기초하여 필터링을 수행할 수 있다. 예를 들어, 어드레스 범위 필터링의 경우, RTIT 필터 로직은 실행중인 소프트웨어가 주어진 어드레스 범위에 있는지 여부를 판정하기 위해 실행 소프트웨어의 어드레스들을 주어진 또는 특정된 어드레스와 비교할 수 있다. 일 양상에서, 어드레스 범위는 (예를 들어, Intel Architecture 프로세서에서 CR3 제어 레지스터로부터의) 페이지 디렉토리 기초 값 등을 나타낼 수 있다. 동작 모드의 경우, 필터링 로직은 (예를 들어, 링 레벨 0, 링 레벨 3 등) 특권 레벨에 기초하여 필터링할 수 있다. 유리하게도, RTIT 필터 로직은, 특정 소프트웨어, 어드레스 범위들, 동작 모드들 등에 대해 선택적으로 실시간 추적이 수행되게 할 수 있는데, 이는 전문가 또는 소프트웨어 애플리케이션이 특정 소프트웨어 및/또는 특정 버그들, 에러들 등에 대해 추적을 집중하게 하는데 도움이 될 수 있다.
도 2를 다시 참조하면, 프로세서는 또한 논-리네임드 버스(228)를 포함한다. 논-리네임드 버스는 ROB(220), 확장된 명령어 포인터(222), BOB(221) 및 RRQ(224)와 연결된다. 예를 들어, 논-리네임드 버스는 (예를 들어, 종종 ROB에 위치되는) 논-리네임드 레지스터들에 저장되는 값들을 디스페치까지 유보 스테이션에 임시로 저장되는 연산과 관련된 저장 영역에 전송하는데 사용될 수 있다. 이러한 값들은 그 연산이 유보 스테이션으로부터 디스페치될 때 그 연산의 소스로서 판독될 수 있다. 그러나, 종래에 논-리네임드 버스 폭은 RRQ 라인 폭보다 작을 수 있다. 일부 실시예들에서, 논-리네임드 버스는, 패킷들이 RRQ로부터 효과적으로 판독되도록 하기 위해서(예를 들어, 사이클 또는 클럭 당 RRQ로부터 1 라인이 판독됨), RRQ 라인 폭과 동등한 폭을 가질 수 있다. 예를 들어, 일부 실시예들에서, 논-리네임드 버스는 64 비트 라인 폭의 RRQ에 대해 64 비트의 폭을 가질 수 있지만, 이러한 특정 폭이 요구되는 것은 아니다.
RTIT 로직은 또한 타이밍 로직(226)을 포함한다. 타이밍 로직은 RTIT 로직에 유용한 타이밍 정보를 제공하는 패킷들을 생성하여 제공한다. 타이밍 로직은 타이밍 정보를 생성하는데 사용되는 기준 클럭 신호(230)를 수신할 수 있다. 다른 타입들의 타이밍 정보가 고려된다. 하나의 가능한 타입의 타이밍 정보는 공식적인 프로세서 벽 시계 타이머를 나타내는 TSC(Time Stamp Counter) 값 또는 패킷이다. 이는, 아키텍처 특징을 나타낼 수 있고, 멀티 코어에 대해 및 심지어 동일 리셋 신호를 공유하는 멀티 소켓 시스템들에 대해 동기화될 수 있다. 다른 가능한 타입의 타이밍 정보는 이러한 타임 스탬프 카운터 값의 서브 샘플링이다. 이는 MTC(Mini Time stamp Counter) 값 또는 패킷이라 한다. 예를 들어, 미니 타임 스탬프 카운터 값은 56 비트 타임 스탬프 카운터 값의 8 비트 서브 세트일 수 있다. 이러한 미니 타임 스탬프 카운터 값은, 전체 타임 스탬프 카운터 값에 관련한 정보를 로그하는 것 및 동일한 동기화를 갖는 것을 허용하지만, 비트가 적다. 또 다른 타입의 타이밍 정보는 사이클 정보이다. 사이클 정보는, 다른 패킷들에 첨부될 수 있고, 연속적 패킷들 사이에 경과된 코어 사이클들의 수를 나타낼 수 있다. 사이클 패킷들은 코어 클럭 분해능으로 발행될 수 있다.
이러한 타이밍 정보는 명령어들이 실행되었던 때를 추정하는데 유용하다. 다수 코어들의 경우, 타이밍 정보는 다른 코어들에 관하여 및 벽 시계 시간에 관하여 명령어들이 코어들 상에서 실행되었던 때를 계산하는데 유용할 수 있다. 이러한 타이밍 정보는 또한 RTIT 로직이 성능 발행을 찾고 수정하게 하는데 및/또는 성능 튜닝에 유용하다. 예를 들어, 타임스탬프 정보는 코드의 어느 부분들이 빠르게 실행되고 코드의 어느 부분들이 느리게 실행되는지를 판정하는데 사용될 수 있다. RTIT 로직이 사용되면, 추적된 프로그램 실행 비율/속도는 RTIT 로직이 사용되지 않은 경우에 비해 통상적으로 영향을 받는다(즉, 통상적으로 감소된다). 결과적으로, 패킷들에서의 타이밍 정보는 일반적으로 실제 프로그램 실행 비율/속도를 완전하게/정확하게 나타내지는 않지만, 오히려 그 유용한 추정으로서 역할을 할 수 있다.
RTIT 로직은 또한 RRQ 콘텐츠 전송 로직(227)을 포함한다. 일부 실시예들에서, RRQ 콘텐츠 전송 로직은 더 적은 량의 하드웨어로 잠재적으로 조합되는 펌웨어로 주로 구현된다. 도시된 바와 같이, RRQ 콘텐츠 전송 로직(227)은 펌웨어(299)를 포함한다. RRQ 콘텐츠 전송 로직은 RRQ로부터의 콘텐츠를 메모리(예를 들어, 메모리(205))에 전송하도록 동작될 수 있다. 일부 실시예들에서는, RRQ가 채워질 때 또는 거의 채워질 때(예를 들어, RRQ가 채움 임계값을 충족하는 용량을 가질 때) 이러한 것이 행해질 수 있다. 다른 실시예에서는, RRQ가 완전히 채워지게 되는 것을 예방하는데 도움이 되도록 이러한 것이 주기적으로 또는 연속적으로 행해질 수 있다. RRQ 콘텐츠 전송 로직의 적합한 실시예의 또 다른 상세들은 도 3에 도시될 것이고 도 3과 함께 설명될 것이다.
프로세서는 또한 어드레스 및 제어 신호 버스(229)를 포함한다. 어드레스 및 제어 신호 버스는 BOB(221), ROB(220) 및 RTIT 패킷화 로직(223)과 연결된다. ROB는 종종 완료된 분기들을 담당한다. BOB는 분기와 관련된 정보를 보유할 수 있다. 분기들에 대한 전용 어레이(예를 들어, BOB)를 사용하는 것은 ROB에서 모든 엔트리들이 분기와 관련된 정보를 저장할 필요는 없기 때문에 다이 면적을 절감하는데 도움이 될 수 있다. 취해진 분기에 대해, ROB는, 어드레스 및 제어 신호 버스 상에서 BOB로부터의 분기 타겟 어드레스들을 판독할 수 있고, 이를 사용하여 명령어 포인터를 계산할 수 있다. 어드레스 및 제어 신호 버스(229)는 어느 분기가 취해졌는지 및/또는 취해지지 않았는지와 그 어드레스에 관한 정보를 RTIT 패킷화 로직(223)에 제공할 수 있다.
일부 실시예들에서, RTIT 로직(209)은 하나의 코어 내에 완전히 포함될 수 있다. 이는 몇몇 이점들을 제공할 수 있는데, 분기들이 논리 프로세서 마다 발생할 수 있기 때문이다(일부 실시예들에서는 각각의 코어가 복수의 프로세서를 가질 수 있음). 다른 실시예들에서는, 다이 면적을 절감하기 위해서, RTIT 로직의 일부가 코어들의 외부에 있는 프로세서의 언코어 부분에 옵션으로 구현될 수 있다. 예를 들어, RRQ 로직 및 각각의 논리 프로세서 RTIT 추적을 나타내는 로직은 프로세서의 언코어 부분에 포함될 수 있는데, 각각의 논리 프로세서 추적이 상이한 대응하는 메모리 위치에 저장될 수 있기 때문이다. 대안적으로, RTIT의 다른 부분들이 프로세서의 언코어 부분에 옵션으로 포함될 수 있다. 코어 또는 언코어에 로직을 위치시키는 것 사이의 선택은 특정 구현에 적절한 방식으로(예를 들어, 코어에서의 다이 면적 절감 대 언코어에서의 다이 면적, 라우팅 및 복잡성 절감을 적절히 상충하는 방식으로) 결정될 수 있다.
설명을 불명료하게 하지 않기 위해, 비교적 간단한 프로세서가 도시되고 설명되었다. 다른 실시예들에서, 프로세서는, 예를 들어 명령어 페치 유닛, 명령어 스케줄링 유닛, 분기 예측 유닛, 명령어 디코더, 마이크로명령어 큐들, 실행 유닛, 마이크로명령어 시퀀서들, 레지스터들, 레지스터 리네이밍 유닛, 명령어 및 데이터 캐시들, 명령어 및 데이터 변환 색인 버퍼들, 버스 인터페이스 유닛들, 제2 또는 보다 상위 레벨 캐시들, 리타이어먼트 유닛, 프로세서들에 포함되는 다른 컴포넌트들 및 이들의 다양한 조합들과 같은 다른 잘 알려진 컴포넌트들을 옵션으로 포함할 수 있다. 프로세서들 내의 컴포넌트들의 사실상 다수의 상이한 조합들 및 구성들이 존재하고, 실시예들이 임의의 특정 조합 또는 구성에 제한되는 것은 아니다. 프로세서는 집적 회로 또는 하나 이상의 반도체 다이들 또는 칩들의 세트(예를 들어, 싱글 다이 또는 칩, 또는 둘 이상의 다이 또는 칩들을 포함하는 패키지)를 나타낼 수 있다. 일부 실시예들에서, 프로세서는 SoC(System-on-Chip)를 나타낼 수 있다.
도 3은 RRQ(324)의 콘텐츠를 메모리(305)에 전송하도록 동작될 수 있는 RRQ 콘텐츠 전송 로직(327)의 일 실시예를 갖는 프로세서(301)의 일 실시예의 블럭도이다. 일부 실시예들에서, RRQ 콘텐츠 전송 로직은, RRQ가 채워질 때, 거의 채워질 때, 채움 임계값을 충족할 때, 시간 전반에 걸쳐 연속적으로 또는 주기적으로 등으로 전송을 개시할 수 있다. 예를 들어, RRQ가 채워지거나 또는 거의 채워질 때(예를 들어, 채움 임계값을 충족함), 프로세서의 하드웨어는 RRQ 콘텐츠 전송을 초래하는(예를 들어, RRQ 콘텐츠 전송 로직에 특정 지원 요청을 초래함) RRQ 채움 플래그 또는 비트(340)을 설정할 수 있다.
RRQ 콘텐츠 전송 로직(327)은 펌웨어(399)를 포함한다. 일부 실시예들에서, RRQ 콘텐츠 전송 로직은 잠재적으로 보다 적은 량의 하드웨어로 주로(즉, 50%보다 많이) 펌웨어(예를 들어, 마이크로코드, 마이크로명령어들, 불휘발성 메모리에 저장되는 회로 레벨 명령어들 등)로 구현될 수 있다. 예를 들어, 일부 실시예들에서, RRQ 콘텐츠 전송 로직은 (예를 들어, RRQ와 인터페이스하고, 하드웨어에 가장 잘 맞추어진 다른 기능들을 수행하는 등) 나머지가 하드웨어로 구성되는 약 50% 내지 90% 펌웨어로 구현될 수 있다. 일부 실시예들에서, RTIT 콘텐츠 전송 로직은 펌웨어 서비스 서브 루틴을 포함할 수 있다. RRQ 콘텐츠 전송 로직을 전부 또는 주로 하드웨어로 구현하는 것 또한 가능하지만, 이는 일반적으로 몇몇 단점들을 갖는다. 하나를 예로 들면, RRQ 콘텐츠 전송 로직을 전부 또는 주로 하드웨어로 구현하기 위해서는 상당량의 하드웨어 로직이 일반적으로 요구된다. 이러한 큰 량의 하드웨어 로직은 프로세서의 사이즈(예를 들어, 다이 면적), 제조 비용 및 전력 소비를 증가시키는 경향이 있을 수 있다. 대조적으로, 펌웨어는, 하드웨어 로직보다 일반적으로 상당히 적은 사이즈를 취하고, 제조 비용이 더 낮으며, 전력 소비가 더 낮다. 하드웨어보다 펌웨어가 성능이 낮을 수 있지만, RRQ 콘텐츠 전송 로직을 주로 펌웨어로(예를 들어, 51% 내지 90%) 구현하는 것은, 사이즈, 제조 비용 및 전력을 불필요하게 증가시키지 않고 적절한 레벨의 성능을 일반적으로 제공한다.
숫자 (1)로 도시된 바와 같이, 일부 실시예들에서, RRQ 콘텐츠 전송 로직(327)은 하나 이상의 RTIT 패킷들(332)의 세트를 RRQ로부터 하나 이상의 아키텍처 레지스터들(342)에 전송하거나 또는 저장한다. 아키텍처 레지스터들은 프로세서의 ISA 레벨 명령어들(예를 들어, 기입 명령어들, 저장 명령어들 등)에 의해 소스들 및/또는 목적지들로서 참조되는 레지스터들일 수 있다. 그리고, 숫자들 (2) 및 (3)으로 도시된 바와 같이, 일부 실시예들에서는, RTIT 패킷들의 세트를 아키텍처 레지스터들(342)로부터 메모리(305) 내의 RTIT 데이터(311)에 전송하거나 또는 다른 방식으로 저장하는 기입 또는 기타 연산이 수행될 수 있다. 일부 실시예들에서, 펌웨어 루틴 또는 함수에 의해 주로 구현될 수 있는, RRQ 전송 로직은 타이트한 루프에서 아키텍처 레지스터들에게 RRQ의 콘텐츠를 빨리 퇴거시킬 수 있고, 아키텍처 레지스터들의 콘텐츠를 메모리(305) 상에 전송하는 기입 연산을 수행할 수 있다. RRQ의 콘텐츠를 메모리에 전송하는 것은 RRQ에서 추가적인 공간을 비우는 것에 도움이 될 수 있다. 일부 실시예들에서, RRQ 콘텐츠 전송 로직은, RRQ가 충분한 양의 자유 공간을 가질 때까지, RRQ의 콘텐츠를 메모리에 계속 전송할 수 있다.
일부 실시예들에서, 숫자들 (2) 및 (3)으로 도시된 기입 또는 기타 연산은 아키텍처 레지스터들 내의 RTIT 패킷들의 세트를 USWC(Uncacheable Speculative Write Combining)으로서 나타낼 수 있다. USWC는 Intel Architecture 프로세서들에 알려진 캐시 속성 타입이다. 다른 아키텍처들에서의 유사한 속성들이 또한 사용될 수 있다. RTIT 패킷들의 세트를 USWC 속성을 갖는 것으로서 나타내는 것은 RTIT 패킷들이 프로세서의 하나 이상의 캐시 레벨들을 건너뛰고 메모리에 직접 저장되게 한다. USWC 연산은 메모리로 나가기 이전에 내부 버퍼들에 저장물들을 축적할 수 있는데 이는 메모리 버스 트랜잭션들을 감소시키는데 도움이 될 수 있다. 이는 RTIT 패킷들로 하나 아싱의 레벨들의 캐시를 오염시키는 것을 회피하는데 도움이 될 수 있다(즉, RTIT 패킷들은 캐시 엔트리들을 묶어 놓지 않을 것이다). USWC의 사용은 침입도를 감소시키는데 도움이 된다. 대안적으로, 다른 실시예들에서는, 아키텍처 레지스터들로부터 메모리로의 패킷들의 기입 또는 저장 연산이 캐시가능한 저장 연산일 수 있다. 또한, 일부 실시예들에서는, 선형 어드레스들보다는 오히려 물리 어드레스들이 저장될 수 있고, 이는 페이징 해석을 건너뛰는데 도움이 될 수 있고, 시스템을 디버깅하는데 보다 편리한 경향이 있을 수 있지만, 이것이 요구되는 것은 아니다.
예시적인 코어 아키텍처들, 프로세서들 및 컴퓨터 아키텍처들
프로세서 코어들은 상이한 방식들로, 상이한 목적들을 위해, 그리고 상이한 프로세서들에서 구현될 수 있다. 예를 들어, 이러한 코어들의 구현들은: 1) 범용 컴퓨팅을 대상으로 하는 범용 순차적 코어; 2) 범용 컴퓨팅을 대상으로 하는 고 성능 범용 비순차적 코어; 3) 그래픽 및/또는 과학적 (쓰루풋) 컴퓨팅을 주로 대상으로 하는 특수 목적 코어를 포함할 수 있다. 상이한 프로세서들의 구현들은: 1) 범용 컴퓨팅을 대상으로 하는 하나 이상의 범용 순차적 코어들 및/또는 범용 컴퓨팅을 대상으로 하는 하나 이상의 범용 비순차적 코어들을 포함하는 CPU; 및 2) 그래픽 및/또는 과학적 (쓰루풋) 컴퓨팅을 주로 대상으로 하는 하나 이상의 특수 목적 코어들을 포함하는 코프로세서를 포함할 수 있다. 이러한 상이한 프로세서들은 상이한 컴퓨터 시스템 아키텍처들로 이어지며, 이는: 1) CPU와는 별개인 칩 상의 코프로세서; 2) CPU와 동일한 패키지 내의 별개의 다이 상의 코프로세서; 3) CPU와 동일한 다이 상의 코프로세서(이 경우에, 이러한 코프로세서를 때때로 통합 그래픽 및/또는 과학적 (쓰루풋) 로직과 같은 특수 목적 로직이라고 하거나, 또는 특수 목적 코어들이라고 함); 및 4) 설명된 CPU(때때로 애플리케이션 코어(들) 또는 애플리케이션 프로세서(들)라고 함), 위에 설명된 코프로세서, 및 부가적인 기능성을 동일한 다이 상에 포함할 수 있는 시스템 온 칩(system on a chip)을 포함할 수 있다. 예시적인 코어 아키텍처들이 다음에 설명되고, 예시적인 프로세서들 및 컴퓨터 아키텍처들의 설명들이 후속된다.
예시적인 코어 아키텍처들
순차적 및 비순차적 코어 블럭도
도 4a는 본 발명의 실시예들에 따른 예시적인 순차적(in-order) 파이프라인 및 예시적인 레지스터 리네이밍, 비순차적(out-of-order) 발행/실행 파이프라인 양자 모두를 도시하는 블럭도이다. 도 4b는 본 발명의 실시예들에 따른 프로세서에 포함될 순차적 아키텍처 코어 및 예시적인 레지스터 리네이밍, 비순차적 발행/실행 아키텍처 코어의 예시적인 실시예 양자 모두를 도시하는 블럭도이다. 도 4a-b에서의 실선 박스는 순차적 파이프라인 및 순차적 코어를 도시하고, 점선 박스의 옵션적인 추가는 레지스터 리네이밍, 비순차적 발행/실행 파이프라인 및 코어를 도시한다. 순차적 양상이 비순차적 양상의 서브세트라는 것을 고려하여, 비순차적 양상이 설명될 것이다.
도 4a에서, 프로세서 파이프라인(400)은, 페치 스테이지(fetch stage)(402), 길이 디코드 스테이지(404), 디코드 스테이지(406), 할당 스테이지(408), 리네이밍 스테이지(410), (디스페치 또는 발행이라고도 알려진) 스케줄링 스테이지(412), 레지스터 판독/메모리 판독 스테이지(414), 실행 스테이지(416), 라이트 백(write back)/메모리 기입 스테이지(418), 예외 처리 스테이지(422), 및 커밋 스테이지(424)를 포함한다.
도 4b는 실행 엔진 유닛(450)에 연결되는 프론트 엔드 유닛(front end unit)(430)을 포함하는 프로세서 코어(490)를 도시하며, 양자 모두는 메모리 유닛(470)에 연결된다. 코어(490)는 RISC(Reduced Instruction Set Computing) 코어, CISC(Complex Instruction Set Computing) 코어, VLIW(Very Long Instruction Word) 코어, 또는 하이브리드 또는 대안적인 코어 타입일 수 있다. 또 다른 옵션으로서, 코어(490)는, 예를 들어, 네트워크 또는 통신 코어, 압축 엔진, 코프로세서 코어, GPGPU(General Purpose computing Graphics Processing Unit) 코어, 그래픽 코어 등과 같은 특수 목적 코어일 수 있다.
프론트 엔드 유닛(430)은, 디코드 유닛(440)에 연결되는 명령어 페치 유닛(438)에 연결되는 명령어 TLB(Translation Lookaside Buffer)(436)에 연결되는 명령어 캐시 유닛(434)에 연결되는 분기 예측 유닛(432)을 포함한다. 디코드 유닛(440)(또는 디코더)은 명령어들을 디코딩할 수 있으며, 오리지널 명령어들로부터 디코딩되거나, 또는 다른 방식으로 이들을 반영하거나, 또는 이들로부터 유도되는, 하나 이상의 마이크로-연산들, 마이크로-코드 엔트리 포인트들, 마이크로명령어들, 다른 명령어들 또는 다른 제어 신호들을 출력으로서 생성할 수 있다. 디코드 유닛(440)은 다양한 상이한 메커니즘들을 사용하여 구현될 수 있다. 적합한 메커니즘들의 예들은, 이에 제한되는 것은 아니지만, 룩-업 테이블들, 하드웨어 구현들, PLA들(Programmable Logic Arrays), 마이크로코드 ROM들(Read Only Memories) 등을 포함한다. 일 실시예에서, 코어(490)는 특정 매크로 명령들을 위한 마이크로코드를 저장하는 마이크로코드 ROM 또는 기타 매체를 (예를 들어, 디코드 유닛(440)에 또는 프론트 엔드 유닛(430) 내에 다른 방식으로) 포함한다. 디코드 유닛(440)은 실행 엔진 유닛(450)에서의 리네이밍/할당기 유닛(452)에 연결된다.
실행 엔진 유닛(450)은, 리타이어먼트 유닛(454) 및 하나 이상의 스케줄러 유닛(들)(456)의 세트에 연결되는 리네이밍/할당기 유닛(452)을 포함한다. 스케줄러 유닛(들)(456)은 임의 수의 상이한 스케줄러들을 나타내고, 예약들 스테이션들, 중앙 명령어 윈도우 등을 포함한다. 스케줄러 유닛(들)(456)은 물리적 레지스터 파일(들) 유닛(들)(458)에 연결된다. 물리적 레지스터 파일(들) 유닛들(458) 각각은 하나 이상의 물리적 레지스터 파일들을 나타내고, 이들 중 상이한 것들은 스칼라 정수, 스칼라 부동 소수점, 패킹된 정수, 패킹된 부동 소수점, 벡터 정수, 벡터 부동 소수점과 같은 하나 이상의 상이한 데이터 타입들, 상태(예를 들어, 실행될 다음 명령어의 어드레스인 명령어 포인터) 등을 저장한다. 하나의 실시예에서, 물리적 레지스터 파일(들) 유닛(458)은 벡터 레지스터 유닛, 기입 마스크 레지스터 유닛 및 스칼라 레지스터 유닛을 포함한다. 이러한 레지스터 유닛들은 아키텍처의 벡터 레지스터들, 벡터 마스크 레지스터들 및 범용 레지스터들을 제공할 수 있다. 레지스터 리네이밍 및 비순차적 실행이 구현될 수 있는 다양한 방식들(예를 들어, 재정렬 버퍼(들) 및 리타이어먼트 레지스터 파일(들)을 사용하는 것; 장래 파일(future file)(들), 이력 버퍼(history buffer)(들) 및 리타이어먼트 레지스터 파일(들)을 사용하는 것; 레지스터 맵들 및 레지스터들의 풀(pool)을 사용하는 것 등)을 도시하기 위해, 물리적 레지스터 파일(들) 유닛(들)(458)은 리타이어먼트 유닛(454)에 의해 중첩된다. 리타이어먼트 유닛(454) 및 물리적 레지스터 파일(들) 유닛(들)(458)은 실행 클러스터(들)(460)에 연결된다. 실행 클러스터(들)(460)는 하나 이상의 실행 유닛들(462)의 세트, 및 하나 이상의 메모리 액세스 유닛들(464)의 세트를 포함한다. 실행 유닛들(462)은 다양한 타입의 데이터(예를 들어, 스칼라 부동 소수점, 패킹된 정수, 패킹된 부동 소수점, 벡터 정수, 벡터 부동 소수점)에 대해 다양한 연산들(예를 들어, 시프트, 덧셈, 뺄셈, 곱셈)을 수행할 수 있다. 일부 실시예들은 특정 기능들이나 기능들의 세트들에 전용인 다수의 실행 유닛들을 포함할 수 있지만, 다른 실시예들은 단 하나의 실행 유닛, 또는 모두가 모든 기능들을 수행하는 다수의 실행 유닛들을 포함할 수 있다. 스케줄러 유닛(들)(456), 물리적 레지스터 파일(들) 유닛(들)(458), 및 실행 클러스터(들)(460)가 가능하게는 복수인 것으로 도시되어 있는데, 그 이유는 특정 실시예들이 특정 타입들의 데이터/연산들에 대한 개별 파이프라인들(예를 들어, 스칼라 정수 파이프라인, 스칼라 부동 소수점/패킹된 정수/패킹된 부동 소수점/벡터 정수/벡터 부동 소수점 파이프라인, 및/또는 각각이 자신의 스케줄러 유닛, 물리적 레지스터 파일(들) 유닛, 및/또는 실행 클러스터를 갖는 메모리 액세스 파이프라인- 그리고, 개별 메모리 액세스 파이프라인의 경우에, 이 파이프라인의 실행 클러스터만이 메모리 액세스 유닛(들)(464)을 갖는 특정 실시예들이 구현됨)을 생성하기 때문이다. 개별 파이프라인들이 사용되는 경우, 이러한 파이프라인들 중 하나 이상은 비순차적 발행/실행일 수 있고 나머지는 순차적일 수 있다는 점도 이해되어야 한다.
메모리 액세스 유닛들(464)의 세트는 메모리 유닛(470)에 연결되고, 이는 레벨 2(L2) 캐시 유닛(476)에 연결되는 데이터 캐시 유닛(474)에 연결되는 데이터 TLB 유닛(472)을 포함한다. 하나의 예시적인 실시예에서, 메모리 액세스 유닛들(464)은, 부하 유닛, 저장 어드레스 유닛 및 저장 데이터 유닛을 포함할 수 있고, 이들 각각은 메모리 유닛(470)에서의 데이터 TLB 유닛(472)에 연결된다. 명령어 캐시 유닛(434)은 메모리 유닛(470)에서의 레벨 2(L2) 캐시 유닛(476)에 또한 연결된다. L2 캐시 유닛(476)은 하나 이상의 다른 레벨의 캐시에 연결되어 궁극적으로 메인 메모리에 연결된다.
예를 들어, 예시적인 레지스터 리네이밍, 비순차적 발행/실행 코어 아키텍처는 다음과 같이 파이프라인(400)을 구현할 수 있다: 1) 명령어 페치(438)는 페치 및 길이 디코드 스테이지(402 및 404)를 수행하고, 2) 디코드 유닛(440)은 디코드 스테이지(406)를 수행하고, 3) 리네임/할당기 유닛(452)은 할당 스테이지(408) 및 리네이밍 스테이지(410)를 수행하고, 4) 스케줄러 유닛(들)(456)은 스케줄 스테이지(412)를 수행하고, 5) 물리적 레지스터 파일(들) 유닛(들)(458) 및 메모리 유닛(470)은 레지스터 판독/메모리 판독 스테이지(414)를 수행하고, 실행 클러스터(460)은 실행 스테이지(416)를 수행하고, 6) 메모리 유닛(470) 및 물리적 레지스터 파일(들) 유닛(들)(458)은 라이트 백/메모리 기입 스테이지(418)를 수행하고; 7) 다양한 유닛들이 예외 처리 스테이지(422)에 포함될 수 있으며, 그리고 8) 리타이어먼트 유닛(454) 및 물리적 레지스터 파일(들) 유닛(들)(458)이 커밋(commit) 스테이지(424)를 수행한다.
코어(490)는 본 명세서에 설명되는 명령어(들)를 포함하여 하나 이상의 명령어들 세트들(예를 들어, (보다 새로운 버전들이 추가된 일부 확장들을 갖는) x86 명령어 세트; 캘리포니아주 서니베일의 MIPS Technologies의 MIPS 명령어 세트; 캘리포니아주 서니베일의 ARM Holdings의 (NEON 과 같은 옵션의 부가의 확장들을 갖는) ARM 명령어 세트)을 지원할 수 있다. 일 실시예에서, 코어(490)는 패킹된 데이터 명령어 세트 확장(예컨대, AVX1, AVX2)을 지원하는 로직을 포함하고, 이에 의해 많은 멀티미디어 애플리케이션들에 의해 사용되는 연산들이 패킹된 데이터를 사용하여 수행될 수 있게 한다.
코어는 (2 이상의 병렬 세트들의 연산들 또는 쓰레드들을 실행하는) 멀티쓰레딩을 지원할 수 있고, 시분할 멀티쓰레딩(time sliced multithreading), (단일의 물리적 코어가, 물리적 코어가 동시에 멀티쓰레딩하고 있는 쓰레드들 각각에 대해 논리적 코어를 제공하는) 동시 멀티쓰레딩, 또는 이들의 조합(예를 들어, Intel® Hyperthreading 기술에서와 같이 시분할 페칭 및 디코딩과 그 이후의 동시 멀티쓰레딩)을 포함하는 다양한 방식으로 그렇게 할 수 있다는 점이 이해되어야 한다.
레지스터 리네이밍이 비순차적 실행의 맥락에서 설명되지만, 레지스터 리네이밍이 순차적 아키텍처에 사용될 수 있다는 점이 이해되어야 한다. 프로세서의 도시된 실시예는 또한 개별 명령어 및 데이터 캐시 유닛들(434/474) 및 공유된 L2 캐시 유닛(476)을 포함하지만, 대안적인 실시예들은, 예를 들어, 레벨 1(L1) 내부 캐시와 같은 명령어들 및 데이터 양자 모두에 대해 단일의 내부 캐시, 또는 다수 레벨들의 내부 캐시를 가질 수 있다. 일부 실시예들에서, 시스템은 코어 및/또는 프로세서에 대해 외부에 있는 외부 캐시와 내부 캐시의 조합을 포함할 수 있다. 대안적으로 모든 캐시가 코어 및/또는 프로세서에 대해 외부에 있을 수 있다.
구체적인 예시적 순차적 코어 아키텍처
도 5a-b는 보다 구체적인 예시적 순차적 코어 아키텍처의 블럭도를 도시하며, 이러한 코어는 칩 내의 (동일 타입 및/또는 다른 타입들의 다른 코어들을 포함하는) 여러 로직 블럭들 중 하나일 수 있다. 로직 블럭들은, 애플리케이션에 의존하여, 일부 고정된 기능 로직, 메모리 I/O 인터페이스들 및 기타 필요한 I/O 로직에 의해 고 대역폭 상호접속 네트워크(예를 들어, 링 네트워크)를 통해서 통신한다.
도 5a는, 본 발명의 실시예들에 따른, 단일 프로세서 코어를, 온-다이 상호접속 네트워크(502)로의 그 접속 및 레벨 2(L2) 캐시의 그 로컬 서브세트(504)와 함께, 나타낸 블럭도이다. 일 실시예에서, 명령어 디코더(500)는 패킹된 데이터 명령어 세트 확장을 갖는 x86 명령어 세트를 지원한다. L1 캐시(506)는 스칼라 및 벡터 유닛들 내로 캐시 메모리에 대한 저 지연시간 액세스를 가능하게 한다. (설계를 간략화하기 위한) 일 실시예에서, 스칼라 유닛(508) 및 벡터 유닛(510)은 개별 레지스터 세트들(각각, 스칼라 레지스터들(512) 및 벡터 레지스터들(514))을 사용하고, 이들 사이에 전송되는 데이터는 메모리에 기입되고 나서 레벨 1(L1) 캐시(506)로부터 리드 백(read back)되는 반면, 본 발명의 대안 실시예들은 상이한 접근방식을 사용할 수 있다(예를 들어, 단일 레지스터 세트를 사용하거나, 또는 기입 및 리드 백되지 않고 데이터가 2개의 레지스터 파일들 사이에서 전송되게 하는 통신 경로를 포함함).
L2 캐시(504)의 로컬 서브세트는 프로세서 코어당 하나씩 개별 로컬 서브세트들로 분할되는 글로벌 L2 캐시의 일부이다. 각각의 프로세서 코어는 L2 캐시(504)의 자기 자신의 로컬 서브세트에 대한 직접 액세스 경로를 갖는다. 프로세서 코어에 의해 판독되는 데이터는, 그 L2 캐시 서브세트(504)에 저장되고, 이들 자신의 로컬 L2 캐시 서브세트들에 액세스하는 다른 프로세서 코어들과 병렬로, 빠르게 액세스될 수 있다. 프로세서 코어에 의해 기입되는 데이터는, 자기 자신의 L2 캐시 서브세트(504)에 저장되고, 필요하다면 다른 서브세트들로부터 플러싱된다. 링 네트워크는 공유 데이터에 대한 코히어런시(coherency)를 보장한다. 링 네트워크는 양-방향성이어서, 프로세서 코어들, L2 캐시들 및 다른 논리 블럭들과 같은 에이전트들이 칩 내에서 상호 통신하게 한다. 각각의 링 데이터 경로는 방향당 1012 비트 폭이다.
도 5b는 본 발명의 실시예들에 따른 도 5a에서 프로세서 코어의 부분의 확대도이다. 도 5b는, 벡터 유닛(510) 및 벡터 레지스터(514)에 대한 더 상세한 부분뿐만 아니라 L1 캐시(504)의 L1 데이터 캐시(506A) 부분을 포함한다. 구체적으로, 벡터 유닛(510)은 16 폭 VPU(Vector Processing Unit)(16 폭 ALU(528) 참조)이며, 이는 정수 명령어, 단정밀도 부동 명령어, 및 배정밀도 부동 명령어 중 하나 이상을 실행한다. VPU는 스위즐링 유닛(520)에 의한 레지스터 입력들의 스위즐링(swizzling), 수치 변환 유닛(522A-B)에 의한 수치 변환, 및 메모리 입력에 대한 복제 유닛(524)에 의한 복제를 지원한다. 기입 마스크 레지스터들(526)은 결과적인 벡터 기입들을 술어화(predicate)하는 것을 허용한다.
통합 메모리 컨트롤러 및 그래픽들을 갖는 프로세서
도 6은, 본 발명의 실시예들에 따라, 2 이상의 코어를 가질 수 있고, 통합 메모리 컨트롤러를 가질 수 있고, 및 통합 그래픽을 가질 수 있는 프로세서(600)의 블럭도이다. 도 6의 실선 박스들은 싱글 코어(602A), 시스템 에이전트(610), 하나 이상의 버스 컨트롤러 유닛들(616)의 세트를 갖는 프로세서(600)를 도시하는 한편, 옵션인 점선 박스들의 추가는 다수의 코어들(602A-N), 시스템 에이전트 유닛(610) 내의 하나 이상의 통합 메모리 컨트롤러 유닛(들)(614)의 세트, 및 특수 목적 로직(608)을 갖는 대안적인 프로세서(600)를 도시한다.
따라서, 프로세서(600)의 다양한 구현들은: 1) (하나 이상의 코어들을 포함할 수 있는) 통합 그래픽 및/또는 과학적 (쓰루풋) 로직인 특수 목적 로직(608), 및 하나 이상의 범용 코어들인 코어들(602A-N)(예를 들어, 범용 순차적 코어들, 범용 비순차적 코어들, 이 둘의 조합)을 갖는 CPU; 2) 그래픽 및/또는 과학적 (쓰루풋)을 위해 주로 의도된 다수의 특수 목적 코어들인 코어들(602A-N)을 갖는 코프로세서; 및 3) 다수의 범용 순차적 코어들인 코어들(602A-N)을 갖는 코프로세서를 포함할 수 있다. 따라서, 프로세서(600)는 범용 프로세서, 코프로세서, 또는, 예를 들어, 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, GPGPU(General Purpose Graphics Processing Unit), 하이 쓰루풋 MIC(Many Integrated Core) 코프로세서(30개 이상의 코어들을 포함함), 임베디드 프로세서 등과 같은 특수 목적 프로세서일 수 있다. 프로세서는 하나 이상의 칩들 상에 구현될 수 있다. 프로세서(600)는, 예를 들어, BiCMOS, CMOS, 또는 NMOS 와 같은 다수의 프로세스 기술들 중 임의의 것을 사용하여 하나 이상의 기판들의 일부가 될 수 있고 및/또는 이들 기판 상에 구현될 수 있다.
메모리 계층구조는 코어들 내의 하나 이상의 레벨들의 캐시, 세트 또는 하나 이상의 공유 캐시 유닛들(606), 및 통합 메모리 컨트롤러 유닛들(614)의 세트에 연결되는 외부 메모리(도시되지 않음)를 포함한다. 공유 캐시 유닛들(606)의 세트는 레벨 2(L2), 레벨 3(L3), 레벨 4(L4), 또는 기타 레벨들의 캐시와 같은 하나 이상의 중간 레벨 캐시들, LLC(Last Level Cache), 및/또는 이들의 조합을 포함할 수 있다. 일 실시예에서 링 기반 상호접속 유닛(612)은 통합 그래픽 로직(608), 공유 캐시 유닛들(606)의 세트, 및 시스템 에이전트 유닛(610)/통합 메모리 컨트롤러 유닛(들)(614)을 상호접속하지만, 대안적인 실시예들은 이러한 유닛들을 상호접속하기 위한 잘 알려진 기술들 중 임의의 것을 사용할 수 있다. 일 실시예에서는, 하나 이상의 캐시 유닛들(606)과 코어들(602A-N) 사이에 코히런시가 유지된다.
일부 실시예들에서, 코어들(602A-N) 중 하나 이상은 멀티쓰레딩을 할 수 있다. 시스템 에이전트(610)는 코어들(602A-N)을 조정하고 동작시키는 컴포넌트들을 포함한다. 시스템 에이전트 유닛(610)은 예를 들어 PCU(Power Control Unit) 및 디스플레이 유닛을 포함할 수 있다. PCU는 코어들(602A-N) 및 통합 그래픽 로직(608)의 전원 상태를 조절하기 위해 필요한 로직과 컴포넌트들일 수 있거나 이들을 포함할 수 있다. 디스플레이 유닛은 하나 이상의 외부 접속되는 디스플레이들을 구동하기 위한 것이다.
코어들(602A-N)은 아키텍처 명령어 세트와 관련하여 동종 또는 이종일 수 있다; 즉, 코어들(602A-N) 중 둘 이상은 동일 명령어 세트를 실행할 수 있는 반면, 다른 것들은 그 명령어 세트의 서브세트 또는 상이한 명령어 세트만을 실행할 수 있다.
예시적인 컴퓨터 아키텍처
도 7-10은 예시적 컴퓨터 아키텍처들의 블럭도들이다. 랩톱들, 데스크톱들, 핸드헬드 PC들, 퍼스널 디지털 어시스턴트들, 엔지니어링 워크스테이션들, 서버들, 네트워크 장치들, 네트워크 허브들, 스위치들, 임베디드 프로세서들, DSP들(Digital Signal Processors), 그래픽 디바이스들, 비디오 게임 디바이스들, 셋-톱 박스들, 마이크로 컨트롤러들, 셀 전화들, 휴대용 미디어 플레이어들, 핸드헬드 장치들, 및 다양한 다른 전자 디바이스들을 위한 기술분야에 알려진 다른 시스템 설계들 및 구성들 또한 적합하다. 일반적으로, 본 명세서에 개시되는 바와 같은 프로세서 및/또는 다른 실행 로직을 통합할 수 있는 매우 다양한 시스템들 또는 전자 디바이스들이 일반적으로 적합하다.
이제, 도 7을 참조하면, 본 발명의 일 실시예에 따른 시스템(700)의 블럭도가 도시된다. 시스템(700)은 하나 이상 프로세서들(710, 715)을 포함할 수 있고, 이는 컨트롤러 허브(720)에 연결된다. 일 실시예에서, 컨트롤러 허브(720)는, GMCH(Graphics Memory Controller Hub)(790) 및 IOH(Input/Output Hub)(750)(개별 칩들 상에 있을 수 있음)를 포함하고; GMCH(790)는 메모리 및 메모리(740)와 코프로세서(745)에 연결되는 그래픽 컨트롤러들을 포함하고; IOH(750)는 GMCH(790)에 I/O(Input/Output) 디바이스들(760)을 연결한다. 대안적으로, 메모리 및 그래픽 컨트롤러들 중 하나 또는 양자 모두는 (본 명세서에서 설명되는 바와 같이) 프로세서 내에 통합되고, 메모리(740) 및 코프로세서(745)는 프로세서(710) 및 IOH(750)와 단일 칩에 있는 컨트롤러 허브(720)에 직접 연결된다.
추가 프로세서들(715)의 옵션적 속성은 도 7에서 파선으로 표기된다. 각각의 프로세서(710, 715)는, 본 명세서에 설명되는 프로세싱 코어들 중 하나 이상을 포함할 수 있고, 프로세서(600)의 일부 버전일 수 있다.
메모리(740)는, 예를 들어, DRAM(Dynamic Random Access Memory), PCM(Phase Change Memory), 또는 이 둘의 조합일 수 있다. 적어도 하나의 실시예에 대해, 컨트롤러 허브(720)는, FSB(Front Side Bus)와 같은 멀티-드롭 버스, QPI(QuickPath Interconnect)와 같은 지점-대-지점 인터페이스, 또는 유사한 접속(795)을 통해 프로세서(들)(710, 715)과 통신한다.
일 실시예에서, 코프로세서(745)는, 예를 들어, 하이 쓰루풋 MIC 프로세서, 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, GPGPU, 임베디드 프로세서 등과 같은 특수 목적 프로세서이다. 일 실시예에서, 컨트롤러 허브(720)는 통합 그래픽 가속기를 포함할 수 있다.
아키텍처 특성, 마이크로아키텍처 특성, 열적 특성, 전력 소비 특성 등을 포함하는 장점 기준들의 스펙트럼과 관련하여 물리적 리소스들(710, 715) 사이에는 다양한 상이함이 존재할 수 있다.
일 실시예에서, 프로세서(710)는 일반적인 타입의 데이터 처리 연산들을 제어하는 명령어들을 실행한다. 명령어들 내에는 코프로세서 명령어들이 내장될 수 있다. 프로세서(710)는 이러한 코프로세서 명령어들을 부속된 코프로세서(745)에 의해 실행되어야 하는 타입의 것으로 인식한다. 따라서, 프로세서(710)는 이러한 코프로세서 명령어들(또는 코프로세서 명령어들을 나타내는 제어 신호들)을 코프로세서 버스 또는 다른 상호접속 상에서 코프로세서(745)에 발행한다. 코프로세서(들)(745)는 수신된 코프로세서 명령어들을 수락 및 실행한다.
이제 도 8을 참조하면, 본 발명의 일 실시예에 따른 제1 보다 구체적인 예시적인 시스템(800)의 블럭도가 도시된다. 도 8에 도시된 바와 같이, 멀티프로세서 시스템(800)은 지점-대-지점 상호접속 시스템이고, 지점-대-지점 상호접속(850)을 통해 연결되는 제1 프로세서(870) 및 제2 프로세서(880)를 포함한다. 프로세서들(870 및 880) 각각은 프로세서(600)의 일부 버전일 수 있다. 본 발명의 일 실시예에서, 프로세서들(870 및 880)은 각각 프로세서들(710 및 715)이고, 코프로세서(838)은 코프로세서(745)이다. 다른 실시예에서, 프로세서들(870 및 880)은 각각 프로세서(710) 및 코프로세서(745)이다.
프로세서들(870 및 880)은 각각 IMC(Integrated Memory Controller) 유닛들(872 및 882)을 포함하는 것으로 도시된다. 프로세서(870)는 또한 자신의 버스 컨트롤러 유닛들의 일부로서 P-P(Point-to-Point) 인터페이스들(876, 878)을 포함하고; 유사하게, 제2 프로세서(880)는 P-P 인터페이스들(886, 888)을 포함한다. 프로세서들(870, 880)은 P-P 인터페이스 회로들(878, 888)을 사용하는 P-P(Point-to-Point) 인터페이스(850)를 통해 정보를 교환할 수 있다. 도 8에 도시된 바와 같이, IMC들(872 및 882)은 프로세서들을 각각의 메모리, 즉 메모리(832) 및 메모리(834)에 연결하며, 이는 각 프로세서들에 국부적으로 부속되는 메인 메모리의 일부들일 수 있다.
프로세서들(870, 880)은 지점 대 지점 인터페이스 회로들(876, 894, 886, 898)을 사용하는 개별 P-P 인터페이스들(852, 854)를 통해 칩셋(890)과 정보를 각각 교환할 수 있다. 칩셋(890)은 고 성능 인터페이스(839)를 통해 코프로세서(838)와 옵션으로 정보를 교환할 수 있다. 일 실시예에서, 코프로세서(838)는, 예를 들어, 하이 쓰루풋 MIC 프로세서, 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, GPGPU, 임베디드 프로세서 등과 같은 특수 목적 프로세서이다.
공유 캐시(도시되지 않음)가 어느 한 프로세서에 또는 양자 모두의 프로세서들의 외부에 포함될 수 있지만, P-P 상호접속을 통해 프로세서들과 접속될 수 있어, 프로세서가 저 전력 모드에 놓이게 되면, 어느 한 프로세서 또는 양자 모두의 프로세서들의 로컬 캐시 정보가 공유 캐시에 저장될 수 있다.
칩셋(890)은 인터페이스(896)를 통해 제1 버스(816)에 연결될 수 있다. 일 실시예에서, 제1 버스(816)는, PCI(Peripheral Component Interconnect) 버스, 또는 PCI 익스프레스 버스 또는 다른 3세대 I/O 상호접속 버스와 같은 버스일 수 있지만, 본 발명의 범위가 이에 한정되는 것은 아니다.
도 8에 도시된 바와 같이, 다양한 I/O 디바이스들(814)이 제1 버스(816)를 제2 버스(820)에 결합하는 버스 브릿지(818)와 함께 제1 버스(816)에 연결될 수 있다. 일 실시예에서는, 코프로세서들, 하이 쓰루풋 MIC 프로세서들, GPGPU들, (예를 들어, 그래픽 가속기들 또는 DSP(Digital Signal Processing) 유닛들과 같은) 가속기들, 필드 프로그래머블 게이트 어레이들와 같은 하나 이상의 추가적인 프로세서(들)(815) 또는 임의의 다른 프로세서가 제1 버스(816)에 연결된다. 일 실시예에서, 제2 버스(820)는 LPC(Low Pin Count) 버스일 수 있다. 일 실시예에서는, 예를 들어, 키보드 및/또는 마우스(822), 통신 디바이스들(827) 및 명령어들/코드 및 데이터(830)를 포함할 수 있는 디스크 드라이브 또는 기타 대용량 저장 디바이스와 같은 저장 유닛(828)을 포함하는 다양한 디바이스들이 제2 버스(820)에 연결될 수 있다. 또한, 오디오 I/O(824)가 제2 버스(820)에 연결될 수 있다. 다른 아키텍처들도 가능하다는 점에 주의하자. 예를 들어, 도 8의 지점-대-지점 아키텍처 대신에, 시스템은 멀티 드롭 버스 또는 다른 그러한 구조를 구현할 수 있다.
이제 도 9를 참조하면, 본 발명의 실시예에 따른 제2 보다 구체적인 예시적인 시스템(900)의 블럭도가 도시된다. 도 8 및 9에서 동일한 엘리먼트들은 동일한 참조 번호들을 가지며, 도 8의 특정 양상들은 도 9의 다른 양상들을 불명료하게 하는 것을 회피하기 위해 도 9로부터 생략되었다.
도 9는, 프로세서들(870, 880)이 통합 메모리 및 I/O 제어 로직("CL")(872 및 882)를 각각 포함할 수 있다는 점을 도시한다. 따라서, CL(872, 882)는 통합 메모리 컨트롤러 유닛들 및 I/O 제어 로직을 포함한다. 도 9는, CL(872, 882)에 메모리들(832, 834)만이 연결되는 것이 아니라, 제어 로직(872, 882)에는 I/O 디바이스들(914)도 연결된다는 점을 도시한다. 레거시 I/O 디바이스들(915)은 칩셋(890)에 연결된다.
이제, 도 10을 참조하면, 본 발명의 일 실시예에 따른 SoC(1000)의 블럭도가 도시된다. 도 6에서의 유사한 요소들은 동일한 참조 번호를 갖는다. 또한, 점선 박스는 더욱 개선된 SoC들에 관한 옵션적 특징들이다. 도 10에서, 상호접속 유닛(들)(1002)은: 하나 이상의 코어들(202A-N)의 세트 및 공유 캐시 유닛(들)(606)을 포함하는 애플리케이션 프로세서(1010); 시스템 에이전트 유닛(610); 버스 컨트롤러 유닛(들)(616); 통합 메모리 컨트롤러 유닛(들)(614); 통합 그래픽 로직, 이미지 프로세서, 오디오 프로세서, 및 비디오 프로세서를 포함할 수 있는 하나 이상의 코프로세서들(1020) 또는 그 세트; SRAM(Static Random Access Memory) 유닛(1030); DMA(Direct Memory Access) 유닛(1032); 및 하나 이상의 외부 디스플레이들에 연결하기 위한 디스플레이 유닛(1040)에 연결된다. 일 실시예에서, 코프로세서(들)(1020)는, 예를 들어, 네트워크 또는 통신 프로세서, 압축 엔진, GPGPU, 하이 쓰루풋 MIC 프로세서, 임베디드 프로세서와 같은 특수 목적 프로세서를 포함한다.
본 명세서에 개시되는 메커니즘들의 실시예들은 하드웨어, 소프트웨어, 펌웨어 또는 이러한 구현 접근방식들의 조합으로 구현될 수 있다. 본 발명의 실시예들은 적어도 하나의 프로세서, 저장 시스템(휘발성 및 불휘발성 메모리 및/또는 저장 엘리먼트들을 포함함), 적어도 하나의 입력 디바이스, 및 적어도 하나의 출력 디바이스를 포함하는 프로그래머블 시스템들에서 실행하는 컴퓨터 프로그램들 또는 프로그램 코드로서 구현될 수 있다.
도 8에 도시된 코드(830)과 같은 프로그램 코드는 본 명세서에 설명되는 기능들을 수행하고 출력 정보를 생성하도록 입력 명령어들에 적용될 수 있다. 이러한 출력 정보는 알려진 방식으로 하나 이상의 출력 디바이스에 적용될 수 있다. 본 출원의 목적상, 프로세싱 시스템은, 예를 들어: DSP(Digital Signal Processor), 마이크로컨트롤러, ASIC(Application Specific Integrated Circuit) 또는 마이크로프로세서와 같은 프로세서를 갖는 임의의 시스템을 포함한다.
프로그램 코드는 프로세싱 시스템과 통신하기 위한 고레벨 절차적 또는 객체 지향형 프로그래밍 언어로 구현될 수 있다. 프로그램 코드는, 바람직하다면, 어셈블리 또는 기계 언어로 구현될 수도 있다. 사실상, 본 명세서에 설명되는 메커니즘들은 임의의 특정 프로그래밍 언어로 범위가 제한되는 것이 아니다. 어느 경우에나, 이러한 언어는 컴파일되거나 해석되는 언어일 수 있다.
적어도 일 실시예의 하나 이상의 양상은, 머신에 의해 판독될 때 머신으로 하여금 본 명세서에서 설명되는 기술들을 수행하는 로직 제조하게 하는, 프로세서 내의 다양한 로직 표현하는, 머신 판독가능 매체 상에 저장되는 전형적인 명령어들에 의해 구현될 수 있다. "IP 코어들"로서 알려진 그러한 표현들은, 유형의 머신 판독가능 매체 상에 저장될 수 있으며, 다양한 고객들 또는 제조 설비에 제공되어, 그러한 로직 또는 프로세서를 실제로 제조하는 제조 머신들 내에 로딩될 수 있다.
이러한 머신 판독가능 저장 매체는, 하드 디스크들, 임의의 다른 타입의 디스크(플로피 디스크들, 광 디스크들, CD-ROM들(Compact Disk Read-Only Memories), CD-RW들(Compact Disk Rewritable's) 및 광자기 디스크를 포함함), 반도체 디바이스들(DRAM들(Dynamic Random Access Memories), SRAM들(Static Random Access Memories), EPROM들(Erasable Programmable Read-Only Memories), 플래시 메모리들, EEPROM들(Electrically Erasable Programmable Read-Only Memories)과 같은 ROM들(Read-Only Memories), RAM들(Random Access Memories), PCM(Phase Change Memory), 자기 또는 광 카드, 또는 전자 명령어를 저장하는 데 적합한 임의의 다른 타입의 매체와 같은 저장 매체를 포함하는, 머신 또는 디바이스에 의해 제조 또는 형성되는 물품들의 비일시적, 유형의 구성을 포함할 수 있지만, 이에 제한되는 것은 아니다.
따라서, 본 발명의 실시예들은, 또한, 명령어들을 포함하거나, 또는 본 명세서에 설명되는 구조들, 회로들, 장치들, 프로세서들 및/또는 시스템 특징들을 정의하는, HDL(Hardware Description Language)와 같은 설계 데이터를 포함하는 비-일시적, 유형인 머신 판독가능 매체를 포함한다. 이러한 실시예들은 프로그램 제품들이라고도 할 수 있다.
에뮬레이션(바이너리 해석, 코드 모핑 등을 포함함)
일부 경우들에는, 명령어 변환기가 소스 명령어 세트로부터 타겟 명령어 세트로 명령어를 변환하는데 사용될 수 있다. 예를 들어, 명령어 변환기는 코어에 의해 처리될 하나 이상의 다른 명령어들로 명령어를 (예를 들어, 정적 바이너리 해석, 동적 컴필레이션을 포함하는 동적 바이너리 해석을 이용하여) 해석하거나, 모프하거나, 에뮬레이트하거나, 또는 다른 방식으로 변환할 수 있다. 명령어 변환기는 소프트웨어, 하드웨어, 펌웨어, 또는 그의 조합으로 구현될 수 있다. 명령어 변환기는 온-프로세서(on processor), 오프-프로세서(off processor), 또는 일부는 온-프로세서 일부는 오프-프로세서일 수 있다.
도 11은 본 발명의 실시예들에 따라 소스 명령어 세트 내의 바이너리 명령어들을 타겟 명령어 세트 내의 바이너리 명령어들로 변환하는 소프트웨어 명령어 변환기의 사용을 대조하는 블럭도이다. 도시된 실시예에서, 명령어 변환기는 소프트웨어 명령어 변환기이지만, 대안적으로 명령어 변환기가 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 다양한 조합들로 구현될 수 있다. 도 11은 하이 레벨 언어(1102)의 프로그램을 x86 컴파일러(1104)를 사용하여 컴파일하여, 적어도 하나의 x86 명령어 세트 코어를 갖는 프로세서(1116)에 의해 원천적으로 실행될 수 있는 x86 바이너리 코드(1106)를 생성할 수 있다는 것을 도시한다. 적어도 하나의 x86 명령어 세트 코어를 갖는 프로세서(1116)는, 적어도 하나의 x86 명령어 세트 코어를 갖는 Intel 프로세서와 실질적으로 동일한 결과를 달성하기 위해, (1) Intel x86 명령어 세트 코어의 명령어 세트의 상당 부분 또는 (2) 적어도 하나의 x86 명령어 세트 코어를 갖는 Intel 프로세서 상에서 실행되도록 되어 있는 애플리케이션들 또는 다른 소프트웨어의 오브젝트 코드 버전들을, 호환가능하게 실행하거나 다른 방식으로 처리함으로써 적어도 하나의 x86 명령어 세트 코어를 갖는 Intel 프로세서와 실질적으로 동일한 기능들을 수행할 수 있는 임의의 프로세서를 나타낸다. x86 컴파일러(1104)는 추가적인 링크 프로세싱 유무와 무관하게 적어도 하나의 x86 명령어 세트 코어를 갖는 프로세서(1116)에서 실행될 수 있는 x86 바이너리 코드(1106)(예를 들어, 오브젝트 코드)를 생성하도록 동작될 수 있는 컴파일러를 나타낸다. 유사하게, 도 11은, 하이 레벨 언어(1102)에서의 프로그램이 대안적인 명령어 세트 컴파일러(1108)를 사용하여 컴파일되어, 적어도 하나의 x86 명령어 세트 코어가 없는 프로세서(1114)(예를 들어, 캘리포니아주 서니베일의 MIPS Technologies의 MIPS 명령어 세트를 실행하는 및/또는 캘리포니아주 서니베일의 ARM Holdings의 ARM 명령어 세트를 실행하는 코어들이 없는 프로세서)에 의해 원천적으로 실행될 수 있는 대안적인 명령어 세트 바이너리 코드(1110)을 생성할 수 있다는 점을 보여준다. 명령어 변환기(1112)는 x86 바이너리 코드(1106)를 x86 명령어 세트 코어가 없는 프로세서(1114)에 의해 원천적으로 실행될 수 있는 코드로 변환하는데 사용된다. 이러한 변환된 코드는 대안적인 명령어 세트 바이너리 코드(1110)와 동일할 가능성이 없는데, 그 이유는 이를 행할 수 있는 명령어 변환기를 제조하기 어렵기 때문이다; 그러나, 변환된 코드는 일반적인 연산을 달성할 것이며, 대안적인 명령어 세트로부터의 명령어들로 이루어질 것이다. 따라서, 명령어 변환기(1112)는, 에뮬레이션, 시뮬레이션 또는 임의의 다른 프로세스를 통해, x86 명령어 세트 프로세서 또는 코어를 갖지 않는 프로세서 또는 기타 전자 디바이스가 x86 바이너리 코드(1106)를 실행할 수 있게 해주는 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 조합을 나타낸다.
설명 및 청구범위에서, "연결된" 및 "접속된"이란 용어들은 이들의 파생어들과 함께 사용되었을 수 있다. 이 용어들은 상호 동의어로 의도된 것이 아님이 이해되어야 한다. 오히려, 특정한 실시예에서, "접속된"은 2개 이상의 엘리먼트들이 상호 직접 물리적으로 또는 전기적으로 접촉하는 것을 나타내는데 사용될 수 있다. "연결된"은 2개 이상의 엘리먼트들이 직접적인 물리적 또는 전기적 접촉을 하고 있는 것을 의미할 수 있다. 그러나, "연결된"은 또한 2개 이상의 엘리먼트들이 상호 직접 접촉하고 있지 않지만, 여전히 서로 협력 또는 상호작용할 수 있음을 의미할 수 있다.
"및/또는"이란 용어가 사용되었을 수 있다. 본 명세서에서 사용되는 바와 같이, "및/또는"이란 용어는 하나 또는 나머지 또는 양자 모두를 의미한다(예를 들어, A 및/또는 B는 A 또는 B 또는 A와 B 양자 모두를 의미한다).
위의 설명에서, 설명의 목적으로, 본 발명의 실시예들의 철저한 이해를 제공하기 위하여 다수의 특정 상세들이 설명되었다. 그러나, 하나 이상의 다른 실시예들이 이러한 특정 상세들 중 일부가 없이 실시될 수 있다는 점이 이 기술분야의 통상의 기술자들에게 명백할 것이다. 설명된 특정 실시예들은 본 발명을 제한하기 위하여 제공되지 않고 이를 설명하기 위하여 제공된다. 본 발명의 범위는 위에 제공되는 특정 예들에 의해 결정되지 않고, 아래 청구범위에 의해서만 결정된다. 다른 경우들에서는, 설명의 이해를 불명료하게 하지 않도록 하기 위해, 잘 알려진 회로들, 구조들, 디바이스들 및 연산들은 블럭도 형태로 도시되거나 상세사항 없이 도시되었다. 적절한 것으로 간주되는 경우, 참조 번호들 또는 참조 번호들의 끝 부분들은, 달리 특정되거나 명백히 분명하지 않는 한, 옵션으로 유사하거나 동일한 특성들을 가질 수 있는, 대응하는 또는 유사한 엘리먼트들을 나타내기 위해 도면들 사이에서 반복되었다. 도면에서, 화살표들은 연결들을 나타내고 양방향 화살표들은 양방향 연결들을 나타낸다.
다양한 연산들 및 방법들이 설명되었다. 방법들 중 일부는 흐름도에서 비교적 기본적인 형태로 개시되었지만, 연산들이 옵션으로 이러한 방법들에 추가될 수 있거나 및/또는 제거될 수 있다. 또한, 흐름도는 예시적인 실시예에 따라 특정한 순서의 연산들을 나타내지만, 이러한 특정한 순서는 예시적라는 점이 이해되어야 한다. 대안적인 실시예들은 옵션으로, 이러한 연산들을 상이한 순서로 수행할 수 있고, 특정 연산들을 조합할 수 있고, 특정 연산들을 중첩할 수 있는 등등이다. 장치들에 대해 본 명세서에 설명되는 컴포넌트들, 특징들 및 특정 옵션적 상세들은 또한 본 명세서에 설명되는 방법들에 옵션으로 적용될 수 있고, 이는 실시예들에서 이러한 장치들에 의해 및/또는 그 내에서 수행될 수 있다.
일부 실시예들은 머신-판독가능 매체를 포함하는 제조 물품(예를 들어, 컴퓨터 프로그램 제품)을 포함한다. 매체는 머신에 의해 판독가능한 형태로 정보를 제공하는, 예를 들어, 저장하는 메커니즘을 포함할 수 있다. 머신-판독가능 매체는, 머신에 의해 실행되면 머신으로 하여금 본 명세서에 개시되는 하나 이상의 연산들, 방법들 또는 기술들을 수행하게 하는, 일련의 명령어들을 제공할 수 있거나 또는 저장할 수 있다. 일 실시예에서, 머신 판독 가능한 매체는 유형의 비-일시적 머신 판독 가능한 저장 매체를 포함할 수 있다. 예를 들어, 유형의 비-일시적 머신 판독 가능한 저장 매체는 플로피 디스켓, 광학 저장 매체, 광학 디스크, CD-ROM, 자기 디스크, 광자기 디스크, ROM(read only memory), PROM(programmable ROM), EPROM(erasable-and-programmable ROM), EEPROM(electrically-erasable-and-programmable ROM), RAM(random access memory), SRAM(static-RAM), DRAM(dynamic-RAM), 플래시 메모리, 상변화 메모리(phase-change memory), 또는 그의 결합들을 포함할 수 있다. 유형의 매체는, 예를 들어, 반도체 재료, 상 변화 재료, 자성 재료 등과 같은 하나 이상의 고체 또는 유형의 물리적 재료들을 포함할 수 있다. 적합한 머신들의 예들은, 데스크톱, 랩톱, 노트북들, 넷북, 넷탑들, 태블릿, 스마트폰, 셀 폰, MID들(Mobile Internet Devices), 서버, 네트워크 엘리먼트들(예를 들어, 라우터들, 스위치들 등), 셋-톱 박스들, 비디오 게임 제어기들, 이와 같은 컴퓨팅 시스템들 및 하나 이상의 프로세서들을 갖는 기타 전자 디바이스들을 포함하지만, 이에 제한되는 것은 아니다.
본 명세서에 걸쳐서 "하나의 실시예", "일 실시예", 또는 "하나 이상의 실시예"란, 예를 들어, 특정 특징이 본 발명의 실시에 포함될 수 있다는 점을 의미하는 것이 인식되어야 한다. 유사하게, 설명에서, 개시를 간소화하고 다양한 본 발명의 진보적인 양상들의 이해를 돕기 위하여 다양한 특징들은 때때로 단일 실시예, 도면, 또는 그의 설명에서 함께 그룹화된다는 점이 이해되어야 한다. 그러나, 이러한 개시의 방법은 본 발명이 각 청구범위에 명백하게 언급되는 것보다 많은 특징들을 요구하는 의도를 반영하는 것으로서 해석되어서는 안 된다. 오히려, 이하의 청구범위들이 반영하는 바에 따라, 진보적인 양상들은 단일의 개시된 실시예의 모든 특징보다 적게 놓일 수 있다. 따라서, 상세한 설명을 뒤따르는 청구범위들은 이로써 본 상세한 설명 내로 명백하게 통합되고, 각 청구범위 본 발명의 개별 실시예로서 자립한다.

Claims (41)

  1. 프로세서로서,
    적어도 제1 논리 프로세서; 및
    상기 제1 논리 프로세서와 연결되는 RTIT(Real Time Instruction Trace) 로직
    을 포함하고,
    상기 RTIT 로직은,
    상기 제1 논리 프로세서에 대해 RTIT 패킷들을 생성하는 RTIT 패킷화 로직- 상기 RTIT 패킷들은 상기 제1 논리 프로세서에 의해 실행되는 소프트웨어의 흐름을 나타냄 -;
    상기 제1 논리 프로세서에 대응하는 RTIT 큐- 상기 RTIT 큐는 상기 RTIT 패킷화 로직과 연결되고, 상기 RTIT 큐는 상기 RTIT 패킷들을 저장함 -; 및
    상기 RTIT 큐와 연결되는 RTIT 큐 콘텐츠 전송 로직- 상기 RTIT 큐 콘텐츠 전송 로직은 상기 RTIT 패킷들을 메모리에 전송함-
    을 포함하고,
    상기 RTIT 큐 콘텐츠 전송 로직은 50%보다 많이 펌웨어로 구현되는 프로세서.
  2. 제1항에 있어서,
    상기 RTIT 큐 콘텐츠 전송 로직은 펌웨어 서비스 서브 루틴을 포함하는 프로세서.
  3. 제1항에 있어서,
    상기 RTIT 큐 콘텐츠 전송 로직은, 상기 RTIT 패킷들을 아키텍처 레지스터들의 세트에 전송하고, 그 후 상기 RTIT 패킷들을 상기 아키텍처 레지스터들의 세트로부터 저장 연산(store operation)을 통해 상기 메모리에 전송하는 프로세서.
  4. 제3항에 있어서,
    상기 저장 연산은 캐시불가능한 추측 기입 조합(USWC: Uncacheable Speculative Write Combining) 연산 및 캐시가능한 저장 연산 중에서 선택되는 하나를 포함하는 프로세서.
  5. 제1항에 있어서,
    상기 RTIT 큐의 적어도 일부는 LBR(Last Branch Record)로서 구성될 수 있는 프로세서.
  6. 제1항에 있어서,
    상기 RTIT 패킷화 로직과 연결되는 논-리네임드(non-renamed) 버스를 더 포함하고, 상기 논-리네임드 버스는 적어도 상기 RTIT 큐의 라인의 폭만큼 큰 비트 폭을 갖는 프로세서.
  7. 제1항에 있어서,
    상기 RTIT 큐의 사이즈는 상기 제1 논리 프로세서에 대응하는 0.3 내지 4 킬로바이트 범위에 있는 프로세서.
  8. 제7항에 있어서,
    상기 RTIT 큐의 사이즈는 상기 제1 논리 프로세서에 대응하는 0.4 내지 4 킬로바이트 범위에 있는 프로세서.
  9. 제1항에 있어서,
    상기 RTIT 패킷화 로직은 50%보다 많이 하드웨어로 구현되는 프로세서.
  10. 제1항에 있어서,
    상기 RTIT 패킷화 로직은 상기 RTIT 큐에서의 RTIT 패킷들 사이에 NOP들(Non-OPerations)이 남겨지는 중간 레벨의 압축을 수행하는 프로세서.
  11. 제1항에 있어서,
    상기 RTIT 패킷화 로직은 청크들(chunks)의 고정된 위치들에 주어진 타입의 패킷들을 저장하는 프로세서.
  12. 제1항에 있어서,
    상기 RTIT 로직은 상기 제1 논리 프로세서에 대해 2% 내지 20% 범위에 있는 침입도의 레벨(level of intrusiveness)을 제공하는 프로세서.
  13. 방법으로서,
    프로세서의 제1 논리 프로세서에 대해 RTIT(Real Time Instruction Trace) 패킷들을 생성하는 단계- 상기 RTIT 패킷들은 상기 제1 논리 프로세서에 의해 실행되는 소프트웨어의 흐름을 나타냄 -;
    상기 RTIT 패킷들을 상기 제1 논리 프로세서에 대응하는 RTIT 큐에 저장하는 단계; 및
    상기 프로세서의 펌웨어를 50%보다 많이 이용하여 상기 RTIT 패킷들을 RTIT 큐로부터 메모리에 전송하는 단계
    를 포함하는 방법.
  14. 제13항에 있어서,
    상기 전송하는 단계는 상기 RTIT 패킷들을 펌웨어 서비스 서브 루틴으로 전송하는 단계를 포함하는 방법.
  15. 제13항에 있어서,
    상기 전송하는 단계는,
    상기 RTIT 패킷들을 상기 RTIT 큐로부터 아키텍처 레지스터들의 세트에 전송하는 단계; 및
    상기 RTIT 패킷들을 상기 아키텍처 레지스터들의 세트로부터 저장 연산을 통해 상기 메모리에 전송하는 단계
    를 포함하는 방법.
  16. 제15항에 있어서,
    상기 전송하는 단계는 상기 RTIT 패킷들을 캐시불가능한 추측 기입 조합(USWC: Uncacheable Speculative Write Combining) 연산 및 캐시가능한 저장 연산 중에서 선택되는 저장 연산을 통해 상기 아키텍처 레지스터들의 세트로부터 상기 메모리에 전송하는 단계를 포함하는 방법.
  17. 제13항에 있어서,
    상기 RTIT 큐의 적어도 일부를 LBR(Last Branch Record)로서 사용하는 단계를 더 포함하는 방법.
  18. 제13항에 있어서,
    상기 RTIT 큐의 라인을 적어도 상기 RTIT 큐의 라인의 폭만큼 넓은 비트 폭을 갖는 논-리네임드(non-renamed) 버스 상에서 전송하는 단계를 더 포함하는 방법.
  19. 제13항에 있어서,
    상기 저장하는 단계는 상기 제1 논리 프로세서에 대응하는 0.3 내지 4 킬로바이트 범위에 있는 사이즈를 갖는 RTIT 큐에 상기 RTIT 패킷들을 저장하는 단계를 포함하는 방법.
  20. 제19항에 있어서,
    상기 RTIT 큐의 사이즈는 상기 제1 논리 프로세서에 대응하는 0.4 내지 4 킬로바이트 범위에 있는 방법.
  21. 제13항에 있어서,
    상기 RTIT 패킷들을 생성하는 단계는 상기 프로세서의 하드웨어에 의해 50%보다 많이 수행되는 방법.
  22. 제13항에 있어서,
    상기 RTIT 패킷들을 상기 RTIT 큐에 저장하는 단계는 RTIT 패킷들 사이에 NOP들(Non-OPerations)을 남기는 방법.
  23. 제13항에 있어서,
    상기 제1 논리 프로세서에 대해 2% 내지 20% 범위에 있는 RTIT의 침입도의 레벨을 제공하는 단계를 더 포함하는 방법.
  24. 시스템으로서,
    상호접속;
    상기 상호접속과 연결되는 DRAM(Dynamic Random Access Memory); 및
    상기 상호접속과 연결되는 프로세서
    를 포함하고,
    상기 프로세서는,
    적어도 제1 논리 프로세서; 및
    상기 제1 논리 프로세서와 연결되는 RTIT(Real Time Instruction Trace) 로직
    을 포함하고,
    상기 RTIT 로직은,
    상기 제1 논리 프로세서에 대해 RTIT 패킷들을 생성하는 RTIT 패킷화 로직- 상기 RTIT 패킷들은 상기 제1 논리 프로세서에 의해 실행되는 소프트웨어의 흐름을 나타냄 -;
    상기 제1 논리 프로세서에 대응하는 RTIT 큐- 상기 RTIT 큐는 상기 RTIT 패킷화 로직과 연결되고, 상기 RTIT 큐는 상기 RTIT 패킷들을 저장함 -; 및
    상기 RTIT 큐와 연결되는 RTIT 큐 콘텐츠 전송 로직- 상기 RTIT 큐 콘텐츠 전송 로직은 상기 RTIT 패킷들을 상기 DRAM에 전송함-
    을 포함하고,
    상기 RTIT 큐 콘텐츠 전송 로직은 50%보다 많이 상기 프로세서의 펌웨어로 구현되는 시스템.
  25. 제24항에 있어서,
    상기 RTIT 큐 콘텐츠 전송 로직은 펌웨어 서비스 서브 루틴을 포함하고,
    상기 RTIT 큐 콘텐츠 전송 로직은, 상기 RTIT 패킷들을 아키텍처 레지스터들의 세트에 전송하고, 그 후 상기 RTIT 패킷들을 상기 아키텍처 레지스터들의 세트로부터 저장 연산을 통해 상기 DRAM에 전송하는 시스템.
  26. 제24항에 있어서,
    상기 RTIT 큐의 적어도 일부는 LBR(Last Branch Record)로서 구성될 수 있고,
    상기 RTIT 패킷화 로직과 연결되는 논-리네임드(non-renamed) 버스를 더 포함하고, 상기 논-리네임드 버스는 적어도 상기 RTIT 큐의 라인의 폭만큼 큰 비트 폭을 갖는 시스템.
  27. 프로세서로서,
    제1 논리 프로세서에 대해 RTIT 패킷들을 저장하는 RTIT(Real Time Instruction Trace) 큐- 상기 RTIT 패킷들은 상기 제1 논리 프로세서에 의해 실행되는 소프트웨어의 흐름을 나타냄 -; 및
    상기 RTIT 큐와 연결되는 RTIT 큐 콘텐츠 전송 로직
    을 포함하고,
    상기 RTIT 큐 콘텐츠 전송 로직은,
    상기 RTIT 패킷들을 상기 RTIT 큐로부터 아키텍처 레지스터들의 세트에 전송하고,
    상기 RTIT 패킷들을 상기 아키텍처 레지스터들의 세트로부터 저장 연산을 통해 메모리에 전송하는
    프로세서.
  28. 제27항에 있어서,
    상기 RTIT 큐 콘텐츠 전송 로직은 펌웨어 서비스 서브 루틴을 포함하는 프로세서.
  29. 제27항에 있어서,
    상기 RTIT 큐의 적어도 일부는 LBR(Last Branch Record)로서 구성될 수 있는 프로세서.
  30. 장치로서,
    RTIT(Real Time Instruction Trace) 로직
    을 포함하고,
    상기 RTIT 로직은,
    제1 소프트웨어에 대해 RTIT 패킷들을 생성하는 칩 상의 RTIT 패킷화 로직 - 상기 RTIT 패킷들은 상기 제1 소프트웨어의 흐름을 나타냄 - ;
    상기 RTIT 패킷화 로직과 연결되는, 상기 칩 상의 RTIT 큐 - 상기 RTIT 큐는 상기 RTIT 패킷들을 저장함 - ; 및
    상기 RTIT 큐와 연결되는 RTIT 큐 콘텐츠 전송 로직 - 상기 RTIT 큐 콘텐츠 전송 로직은 상기 RTIT 큐로부터의 상기 RTIT 패킷들을 전송함 -
    을 포함하고,
    상기 RTIT 큐 콘텐츠 전송 로직은 50%보다 많이 상기 칩 상의 하드웨어로 구현되지 않는 장치.
  31. 제30항에 있어서,
    상기 RTIT 큐 콘텐츠 전송 로직은 50%보다 많이 상기 칩 상의 펌웨어로 구현되는 장치.
  32. 제30항에 있어서,
    상기 RTIT 큐 콘텐츠 전송 로직은 펌웨어 서비스 서브 루틴을 포함하는 장치.
  33. 제30항에 있어서,
    상기 RTIT 큐 콘텐츠 전송 로직은 상기 RTIT 패킷들을 아키텍처 레지스터들의 세트에 전송하는 장치.
  34. 제30항에 있어서,
    상기 RTIT 큐의 적어도 일부는 LBR(Last Branch Record)로서 구성될 수 있는 장치.
  35. 제30항에 있어서,
    상기 RTIT 패킷화 로직과 연결되는 논-리네임드 버스를 더 포함하고, 상기 논-리네임드 버스는 적어도 상기 RTIT 큐의 라인의 폭만큼 큰 비트 폭을 갖는 장치.
  36. 제30항에 있어서,
    상기 RTIT 패킷화 로직은 상기 RTIT 큐에서의 RTIT 패킷들 사이에 NOP들(Non-OPerations)이 남겨지는 중간 레벨의 압축을 수행하는 장치.
  37. 장치로서,
    RTIT(Real Time Instruction Trace) 로직
    을 포함하고,
    상기 RTIT 로직은,
    제1 소프트웨어에 대해 RTIT 패킷들을 생성하는 칩 상의 RTIT 패킷화 로직 - 상기 RTIT 패킷들은 상기 제1 소프트웨어의 흐름을 나타냄 - ;
    상기 RTIT 패킷화 로직과 연결되는, 상기 칩 상의 RTIT 큐 - 상기 RTIT 큐는 상기 RTIT 패킷들을 저장하고, 상기 RTIT 큐의 적어도 일부는 LBR(Last Branch Record)로서 구성될 수 있음 - ; 및
    상기 RTIT 큐와 연결되는 RTIT 큐 콘텐츠 전송 로직 - 상기 RTIT 큐 콘텐츠 전송 로직은 상기 RTIT 큐로부터의 상기 RTIT 패킷들을 전송함 -
    을 포함하는 장치.
  38. 제37항에 있어서,
    상기 RTIT 큐 콘텐츠 전송 로직은 펌웨어 서비스 서브 루틴을 포함하는 장치.
  39. 제37항에 있어서,
    상기 RTIT 큐 콘텐츠 전송 로직은 상기 RTIT 패킷들을 아키텍처 레지스터들의 세트에 전송하는 장치.
  40. 제37항에 있어서,
    상기 RTIT 패킷화 로직과 연결되는 논-리네임드 버스를 더 포함하고, 상기 논-리네임드 버스는 적어도 상기 RTIT 큐의 라인의 폭만큼 큰 비트 폭을 갖는 장치.
  41. 제37항에 있어서,
    상기 RTIT 패킷화 로직은 상기 RTIT 큐에서의 RTIT 패킷들 사이에 NOP들(Non-OPerations)이 남겨지는 중간 레벨의 압축을 수행하는 장치.
KR1020157014040A 2012-12-29 2013-06-24 실시간 명령어 추적 프로세서들, 방법들 및 시스템들 KR101748506B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/730,834 US9262163B2 (en) 2012-12-29 2012-12-29 Real time instruction trace processors, methods, and systems
US13/730,834 2012-12-29
PCT/US2013/047431 WO2014105168A1 (en) 2012-12-29 2013-06-24 Real time instruction trace processors, methods, and systems

Publications (2)

Publication Number Publication Date
KR20150080581A KR20150080581A (ko) 2015-07-09
KR101748506B1 true KR101748506B1 (ko) 2017-06-16

Family

ID=51018693

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020157014040A KR101748506B1 (ko) 2012-12-29 2013-06-24 실시간 명령어 추적 프로세서들, 방법들 및 시스템들

Country Status (5)

Country Link
US (2) US9262163B2 (ko)
KR (1) KR101748506B1 (ko)
CN (1) CN104823172B (ko)
DE (1) DE112013005368T5 (ko)
WO (1) WO2014105168A1 (ko)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9262163B2 (en) 2012-12-29 2016-02-16 Intel Corporation Real time instruction trace processors, methods, and systems
US9483263B2 (en) * 2013-03-26 2016-11-01 Via Technologies, Inc. Uncore microcode ROM
US9626274B2 (en) 2014-12-23 2017-04-18 Intel Corporation Instruction and logic for tracking access to monitored regions
US9934124B2 (en) 2015-06-05 2018-04-03 Intel Corporation Implementation of processor trace in a processor that supports binary translation
US10795802B2 (en) * 2015-11-19 2020-10-06 Honeywell International Inc. Systems and methods for a real time embedded trace
US10643296B2 (en) * 2016-01-12 2020-05-05 Qualcomm Incorporated Systems and methods for rendering multiple levels of detail
US10248424B2 (en) 2016-10-01 2019-04-02 Intel Corporation Control flow integrity
US10423511B2 (en) * 2016-11-29 2019-09-24 International Business Machines Corporation Packet flow tracing in a parallel processor complex
US10108554B2 (en) * 2016-12-05 2018-10-23 Intel Corporation Apparatuses, methods, and systems to share translation lookaside buffer entries
US10896253B2 (en) * 2017-02-06 2021-01-19 Huawei Technologies Co., Ltd. Processor trace-based enforcement of control flow integrity of a computer system
US10372902B2 (en) 2017-03-06 2019-08-06 Intel Corporation Control flow integrity
US10579557B2 (en) * 2018-01-16 2020-03-03 Advanced Micro Devices, Inc. Near-memory hardened compute blocks for configurable computing substrates
US11016679B2 (en) 2018-06-29 2021-05-25 Seagate Technology Llc Balanced die set execution in a data storage system
US20230185695A1 (en) * 2021-12-15 2023-06-15 Intel Corporation Processor trace with suppression of periodic timing packets for low density trace sections

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050060521A1 (en) * 2003-09-17 2005-03-17 Yu-Min Wang Method for real-time instruction information tracing
US20120185734A1 (en) * 2011-01-13 2012-07-19 Arm Limited Tracing of a data processing apparatus
JP2012525644A (ja) * 2009-04-29 2012-10-22 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド Smtマシーンに比較と転送命令を使用する信頼性の高い実行

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
SE520511C2 (sv) * 1997-12-02 2003-07-22 Ericsson Telefon Ab L M Processor och förfarande för instruktionsavkodning
JP2008523456A (ja) * 2004-05-12 2008-07-03 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ トレースコプロセッサを備えたデータ処理システム
US7698473B2 (en) * 2005-01-05 2010-04-13 Sony Computer Entertainment Inc. Methods and apparatus for list transfers using DMA transfers in a multi-processor system
US8341604B2 (en) 2006-11-15 2012-12-25 Qualcomm Incorporated Embedded trace macrocell for enhanced digital signal processor debugging operations
KR101360221B1 (ko) 2007-09-13 2014-02-10 삼성전자주식회사 인스트럭션 캐시 관리 방법 및 그 방법을 이용하는프로세서
US8438547B2 (en) 2009-05-05 2013-05-07 Freescale Semiconductor, Inc. Address translation trace message generation for debug
US8289960B2 (en) 2009-06-22 2012-10-16 Citrix Systems, Inc. Systems and methods for N-core tracing
US8074131B2 (en) 2009-06-30 2011-12-06 Intel Corporation Generic debug external connection (GDXC) for high integration integrated circuits
US8214598B2 (en) * 2009-12-22 2012-07-03 Intel Corporation System, method, and apparatus for a cache flush of a range of pages and TLB invalidation of a range of entries
KR101086457B1 (ko) 2009-12-28 2011-11-25 전남대학교산학협력단 저 전력 트레이스 캐쉬 및 명령어 세트 예측기를 구비한 프로세서 시스템
US9003375B2 (en) 2011-12-30 2015-04-07 Intel Corporation Optional logging of debug activities in a real time instruction tracing log
WO2013101251A1 (en) * 2011-12-31 2013-07-04 Intel Corporation Real time instruction tracing compression of ret instructions
CN104246692B (zh) * 2012-03-30 2018-02-23 英特尔公司 用于实时指令跟踪的系统和方法
US9128781B2 (en) * 2012-12-28 2015-09-08 Intel Corporation Processor with memory race recorder to record thread interleavings in multi-threaded software
US9262163B2 (en) 2012-12-29 2016-02-16 Intel Corporation Real time instruction trace processors, methods, and systems

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050060521A1 (en) * 2003-09-17 2005-03-17 Yu-Min Wang Method for real-time instruction information tracing
JP2012525644A (ja) * 2009-04-29 2012-10-22 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド Smtマシーンに比較と転送命令を使用する信頼性の高い実行
US20120185734A1 (en) * 2011-01-13 2012-07-19 Arm Limited Tracing of a data processing apparatus

Also Published As

Publication number Publication date
US9696997B2 (en) 2017-07-04
US20140189314A1 (en) 2014-07-03
CN104823172A (zh) 2015-08-05
KR20150080581A (ko) 2015-07-09
US20160117171A1 (en) 2016-04-28
CN104823172B (zh) 2018-01-23
US9262163B2 (en) 2016-02-16
WO2014105168A1 (en) 2014-07-03
DE112013005368T5 (de) 2015-07-23

Similar Documents

Publication Publication Date Title
KR101748506B1 (ko) 실시간 명령어 추적 프로세서들, 방법들 및 시스템들
JP6526609B2 (ja) プロセッサ
KR101847857B1 (ko) 스레드 일시중지 프로세서들, 방법들, 시스템들 및 명령어들
US9880842B2 (en) Using control flow data structures to direct and track instruction execution
JP6143872B2 (ja) 装置、方法、およびシステム
CN106293626B (zh) 持久性提交处理器、方法、装置、制品和电子设备
KR101817459B1 (ko) 1들을 최하위 비트들이 되도록 풀링하면서 비트들을 좌측으로 시프팅하기 위한 명령어
US10127039B2 (en) Extension of CPU context-state management for micro-architecture state
RU2635044C2 (ru) Режим слежения в устройстве обработки в системах трассировки команд
JP2015528610A (ja) リードマスク及びライトマスクにより制御されるベクトル移動命令
JP5985526B2 (ja) システムコールのためのロバスト且つ高性能な命令
KR101806279B1 (ko) 명령어 순서 강제 명령어들의 쌍들, 프로세서들, 방법들, 및 시스템들
US20170177543A1 (en) Aggregate scatter instructions
US11182298B2 (en) System, apparatus and method for dynamic profiling in a processor
US9418024B2 (en) Apparatus and method for efficient handling of critical chunks
US9367317B2 (en) Loop streaming detector for standard and complex instruction types
US9753832B2 (en) Minimizing bandwith to compress output stream in instruction tracing systems
US20180165200A1 (en) System, apparatus and method for dynamic profiling in a processor
US20230100059A1 (en) Interrupt handling by migrating interrupts between processing cores

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant