KR20130123355A - 추론적 명령 실행 및 비순차 데이터 전달을 지원하는 데이터 처리 유닛의 활동도를 트레이스하는 시스템 및 방법 - Google Patents

추론적 명령 실행 및 비순차 데이터 전달을 지원하는 데이터 처리 유닛의 활동도를 트레이스하는 시스템 및 방법 Download PDF

Info

Publication number
KR20130123355A
KR20130123355A KR1020137000011A KR20137000011A KR20130123355A KR 20130123355 A KR20130123355 A KR 20130123355A KR 1020137000011 A KR1020137000011 A KR 1020137000011A KR 20137000011 A KR20137000011 A KR 20137000011A KR 20130123355 A KR20130123355 A KR 20130123355A
Authority
KR
South Korea
Prior art keywords
trace
unit
data
index value
index
Prior art date
Application number
KR1020137000011A
Other languages
English (en)
Other versions
KR101708170B1 (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 KR20130123355A publication Critical patent/KR20130123355A/ko
Application granted granted Critical
Publication of KR101708170B1 publication Critical patent/KR101708170B1/ko

Links

Images

Classifications

    • 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
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3636Software debugging by tracing the execution of the program
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution

Abstract

데이터 처리 유닛의 처리 활동도를 나타내는 트레이스 데이터 항목을 발생시키도록 구성된 트레이스 유닛이 제공된다. 이 트레이스 유닛은 인덱스 값을 트레이스 유닛에 의해 발생된 트레이스 데이터 항목의 적어도 부분 집합과 관련시키도록 구성된 트레이스 인덱싱 유닛을 포함한다. 트레이스 인덱싱 유닛은 상기 인덱스 값을 인덱스 값의 예정된 순서 중 하나로서 발생시키도록 구성되며, 상기 예정된 순서에서 n+1번째 인덱스 값이 상기 예정된 순서에서 오직 n번째 인덱스 값으로부터만 결정될 수 있다.

Description

데이터 처리 시스템을 트레이스할 때에 키 할당{KEY ALLOCATION WHEN TRACING DATA PROCESSING SYSTEMS}
본 발명은 데이터 어드레스 유닛의 활동도를 모니터링하는 것에 관한 것으로서, 구체적으로 데이터 처리 유닛의 활동도를 처리하는 것을 나타내는 트레이스 데이터의 항목을 발생시키는 것에 관한 것이다.
현대의 데이터 처리 장치(마이크로프로세서 등)의 복잡성은 그러한 데이터 처리 장치의 작동을 프로그래밍 및 디버깅하는 것이 복잡하고 시간 소모적인 작업이라는 것을 의미한다. 따라서, 작업이 원하는 데로 수행된다는 것을 증명하고 문제를 발생할 때에 해결하기 위하여, 데이터 처리 장치를 정확하게 구성하고자 하는 프로그래머에게는 처리 활동도를 수행할 때에 데이터 처리 장치의 작동을 모니터링할 수 있는 것이 매우 유용하다.
데이터 처리 장치의 처리 활동도를 모니터링하는 이 요구는 현대의 데이터 처리 장치가 통상적으로 시스템 온 칩(SoC; System on Chip)과 같이 매우 작은 스케일의 디바이스로서 구성된다는 인식에 대해 균형을 이루어야 한다. 그러한 디바이스의 공간 제약은 그 구성에 있어서 매우 중요한 인자이고, 이에 따라 그러한 디바이스에 모니터링 구성요소를 추가할 기회가 매우 제한된다는 것이 널리 알려져 있다. 유사하게, SoC의 주변 상에 핀은 또한 수요가 많아, 외부 분석을 위해 SoC로부터 익스포트될 수 있는 진단 데이터의 양을 억제시킨다.
이 이유로, 그러한 데이터 처리 장치와 관련하여 트레이스 유닛을 제공하는 것이 공지되어 있는데, 트레이스 유닛은 데이터 처리 장치의 처리 활동도를 모니터링하고 이들 처리 활동도를 나타내는 트레이스 데이터 항목의 순서를 발생시키도록 구성된다. 구체적으로, 전달되어야 하는 데이터의 대역폭을 감소시키기 위하여, 중복되고 순전히 현재의 분석 목적을 위해 필요한 데이터만을 포함하는 임의의 정보를 생략하도록 고도로 압축된 형태의 트레이스 데이터 항목을 제공하는 것이 공지되어 있다. 미국 특허 제7,707,394호는 명령 트레이스 중에 생성되는 데이터 스트림의 크기를 감소시키는 몇몇의 기술을 제시하고 있다.
데이터 처리 장치의 활동도의 트레이스와 관련된 어려움은 데이터 처리 장치가 추론적인 명령 실행이 가능하다면 두드러진다. 이 기술은 예컨대 파이프라인 단계가 아이들이 되는 것을 피함으로써 더 빠른 작동을 제공하는 기회 때문에 추론적인 명령 실행을 제공하는 것이 공지되어 있다. 그러나, 추론적인 명령 실행은 어려움이 있는 트레이스 유닛을 제공하는데, 그 이유는 추론이 결정될 때까지(즉, 소정의 명령이 실제로 위탁되는지의 여부가 공지됨), 트레이스 유닛은 데이터 처리 장치의 작동을 한정적으로 명령하는 트레이스 데이터 스트림을 제공하는 것이 불가능하기 때문이다. 한가지 가능성은 추론이 결정될 때까지 발생하는 트레이스 데이터를 트레이스 유닛이 버퍼링하는 것이지만, 이 기술이 필요로 하는 버퍼 공간은 프로세서의 추론 깊이가 중요하다면 바람직스럽지 못하게 커질 수 있다. 대안적인 기술로는 또한 트레이스 데이터를 추론적으로 발생시킨 다음에, 이어서 대응하는 명령이 오추론적이라는 것으로 판명되면 특정한 트레이스 데이터 항목을 취소하는 것이 있다. 예컨대, 넥서스 프로토콜("The Nexus 5001 Forum-Standard for a Global Embedded Processor Debug Interface", IEEE-ISTO 5001-2003, 2003년 12월 23일)은 특정한 갯수의 트레이스 데이터 항목의 취소를 지원하고 있다.
그러나, 데이터 처리 장치가 구체적으로 어떤 명령어(또는 보다 통상적으로는 명령어 그룹)가 취소되어야 하는지를 트레이스 유닛에게 명령하더라도, 이들 취소된 명령어에 대응하는 트레이스 데이터의 항목을 식별하는 것은 수월하지 않다. 명령어 그룹은 추론적인 실행의 전형인데, 그 이유는 오직 몇몇의 명령어만으로도 프로그램 플로우의 변화를 초래할 수 있고, 이에 따라 명령어 그룹이 식별되어 있어 명령어 그룹이 적어도 실행된다면 전체 그룹이 실행될 것이다.
오직 선택된 명령어을 위한 트레이스 데이터를 발생시키는 트레이스 기술에서 특별한 문제가 발생하는데, 그 이유는 이 기술은 트레이스 데이터의 대응하는 취소 항목의 발생을 어렵게 할 수 있기 때문이고, 명령어 그룹과 발생된 트레이스 데이터 항목의 갯수 간에 직접적인 상관 관계가 없으므로, 가장 최근에 2개의 명령어 그룹이 최소되어야 한다는 것을 데이터 처리 장치가 지시하면, 트레이스 유닛은 2개의 트레이스 데이터 항목이 최소되어야 한다는 것을 하류의 분석 유닛에 대해 간단히 지시할 수 없기 때문이다.
트레이스 데이터의 특정한 항목을 나중에 인식할 때의 어려움과 관련된 다른 문제는 데이터의 전달 상황에서 발생한다. 로드 또는 저장 동작은 완성하는 데에 많은 사이클을 취할 수 있기 때문에, (예컨대) 로드 명령이 실행되고 대응하는 트레이스 데이터 항목이 발생된 경우에, 요청된 데이터 값이 메모리로부터 검색된 시간만큼 데이터 값이 관련되어야 하는 대응하는 트레이스 데이터 항목이 많은 사이클을 초기에 발생시켰다는 것을 식별하기 어렵다. 프로세서가 명령을 수행하거나 프로그램 순서의 데이터 전달을 실행할 수 있다면, 어떤 데이터 값이 데이터가 처리하는 값에 속하는지를 트레이스 유닛이 식별하는 방법이 없을 수 있다.
비순차 프로세서의 트레이스에 관한 몇몇 배경 기술의 정보는 "The PD Trace Interface and Trace Control Block Specification"(2005년 7월 4일)(http://www.mips.com/products/product-materials/processor/mips-architecture/ 로부터 입수 가능함) 및 ARM ETMv3 아키텍쳐(http://infocenter.arm.com 으로부터 입수 가능함)에서 찾을 수 있다.
따라서, 트레이스 유닛이 전술한 문제들을 처리하게 하는 트레이스 데이터 항목을 발생시키는 개선된 기술을 제공하는 것이 요망된다.
제1 양태로부터 보았을 때에, 본 발명은 데이터 처리 유닛의 처리 활동도를 나타내는 트레이스 데이터 항목을 발생시키도록 구성된 트레이스 유닛을 제공하는 것으로서, 상기 트레이스 유닛은, 인덱스 값을 트레이스 유닛에 의해 발생된 트레이스 데이터 항목의 적어도 부분 집합과 관련시키도록 구성된 트레이스 인덱싱 유닛을 포함하고, 상기 트레이스 인덱싱 유닛은 상기 인덱스 값을 인덱스 값의 예정된 순서 중 하나로서 발생시키도록 구성되며, 상기 예정된 순서에서 n+1번째 인덱스 값이 상기 예정된 순서에서 오직 n번째 인덱스 값으로부터만 결정될 수 있다.
본 발명의 교시에 따르면, 트레이스 유닛은 인덱스 값을 트레이스 유닛에 의해 발생된 트레이스 데이터 항목의 적어도 부분 집합과 관련시키도록 구성된 트레이스 인덱스 유닛을 포함한다. 구체적으로 인덱스 값은 예정된 순서에서 n+1번째 인덱스 값이 예정된 순서에서 오직 n번째 인덱스 값으로부터만 결정될 수 있도록 인덱스 값들의 예정된 순서에 따라 트레이스 인덱싱 유닛에 의해 발생된다. 트레이스 데이터 항목의 발생 관점에서, 트레이스 데이터 항목의 적어도 일부와 이들 인덱스 값의 결합이 유리한데, 그 이유는 이 결합이 발생하는 트레이스 데이터 항목의 적어도 일부를 트레이스 유닛이 "태그"하게 하여, 특정한 트레이스 데이터 항목에 대한 나중의 참조가 가능해지기 때문이다. 이는 예컨대 오추론(mis-speculation)으로 인해 특정한 트레이스 데이터 항목을 나중에 취소하고자 할 때에 특히 유리할 수 있다. 대안적으로, 그 결합은 완료에 오랜 시간이 걸릴 수 있는 데이터 전달 명령어에 대해 발생된 트레이스 데이터 항목에 데이터 값을 관련시키고자 할 때에 유리할 수 있다. 이 문제에서 트레이스 데이터 항목을 인덱싱함으로써, 특정한 트레이스 데이터 항목에 대한 나중의 참조가 이루어질 수 있다. 또한, 예정된 순서에서 n번째 인덱스 값으로부터만 예정된 순서에서의 n+1번째 인덱스 값을 결정할 수 있음으로써, 많은 인덱싱이 수반될 수 있고 일반적으로 명시적으로 트레이스될 필요가 없다. 이에 따라, 트레이스 유닛 내의 상당한 공간이 절감될 수 있고, 상당한 트레이스 데이터 대역폭 절감이 이루어질 수 있다.
인덱스 값들의 예정된 순서를 제공하는 다수의 방식이 가능하지만, 일 실시예에서, 상기 트레이스 유닛은 카운터를 포함하고, 상기 카운터는 인덱스 값들의 상기 예정된 순서를 제공하도록 구성된다. 카운터는 트레이스 유닛의 하드웨어에서 비교적 쉽게 구현될 수 있고 카운터에 의해 발생된 인덱스 값들의 예정된 순서(통상, 증분 순서)가 유리하게는 쉽게 관리된다.
트레이스 유닛이 트레이스 데이터의 일부 항목과 관련되는 인덱스 값을 사용할 수 있는 다양한 방식이 존재하지만, 실시예에서, 상기 트레이스 유닛은 적어도 하나의 상기 인덱스 값을 저장하도록 구성된 인덱스 저장 유닛을 포함한다. 인덱스 저장 유닛의 제공은 트레이스 유닛이 적어도 하나의 인덱스 값의 기록을 유지하게 하여, 트레이스 유닛의 나중의 작동이 그 저장된 값 및 이에 따라 그와 관련된 트레이스 데이터 항목을 참조하게 할 수 있다.
몇몇 실시예에서, 트레이스 유닛은 2개의 인덱스 값들 간의 차이를 저장하도록 구성된 인덱스 저장 유닛을 포함한다. 이는 예컨대 인덱스 값들의 범위가 저장될 수 있는 유리하게는 콤팩트한 저장 메카니즘을 제공한다. 이 인덱스 저장 유닛은 일 실시예에서 FIFO 디바이스일 수 있다. FIFO 디바이스는 값들의 순서가 저장될 수 있는 간단한 구조를 제공한다.
트레이스 유닛이 모니터링하도록 구성되는 데이터 처리 유닛은 다수의 형태를 취할 수 있지만, 일 실시예에서 상기 데이터 처리 유닛의 처리 활동도는 추론적 명령어 실행을 포함하고, 상기 적어도 하나의 인덱스 값은 적어도 하나의 추론적으로 실행된 명령어와 관련된다. 명령어의 추론적 실행은 어려움이 있는 트레이스 유닛을 제공할 수 있는데, 그 이유는 추론적으로 실행된 명령어가 오추론된 것으로 데이터 처리 유닛에 의해 나중에 지시되면, 트레이스 유닛은 이 사실을 이 트레이스 데이터의 수신자에게 알리도록 요구될 수 있기 때문이다. 추론적으로 실행된 명령어와 관련된 인덱스 값을 저장할 수 있는 인덱스 저장 유닛을 가짐으로써, 트레이스 유닛에는 대응하는 트레이스 데이터 항목을 발생시킨 후 얼마의 시간에라도 추론적 명령어에 대한 참조를 유지할 수 있는 메카니즘이 마련된다.
몇몇 실시예에서, 상기 인덱스 저장 유닛은 상기 적어도 하나의 추론적으로 실행된 명령어가 위탁 또는 취소될 때까지 상기 적어도 하나의 인덱스 값을 저장하도록 구성된다. 따라서, 인덱스 저장 유닛은 추론적으로 실행된 명령어의 운명이 알려질 때까지, 즉 해당 명령어가 정확하게 추론적으로 실행되었는지(그리고 "위탁"되었는지) 또는 오추론되었는지(그리고 "취소"되었는지) 추론적으로 실행된 명령어에 대응하는 인덱스 값을 유지할 것이다. 인덱스 저장 유닛에 대응하는 인덱스 값을 저장하는 것은 그와 관련되어 발생된 명령어 및 이에 따라 임의의 트레이스 데이터에 대한 나중의 참조를 가능하게 한다.
명령어의 추론적 실행은 개별적인 명령어의 추론적 실행을 포함할 수 있지만, 몇몇 실시예에서, 상기 추론적으로 실행된 명령어는 명령어 그룹의 일부를 형성하고, 상기 명령어 그룹의 제1 명령어의 추론적 실행은 상기 명령어 그룹의 모든 명령어의 추론적 실행을 필요로 한다.
그룹에서 추론적으로 실행하는 명령어는 실용적인데, 그 이유는 오직 몇몇의 명령어(예컨대, 분기)만이 연속적인 명령어 실행으로부터의 편향을 가능하게 하고, 다른 명령어(예컨대, ADD 명령어)는 진행하는 명령어가 실행되었다면 실행되기에 확실하다. 이 이유로, 추론적 명령어 실행을 수행하도록 구성된 데이터 처리 유닛은 통상 그러한 분할할 수 없는 그룹을 형성하도록 알려진 명령어 그룹을 추론적으로 실행할 것이다.
몇몇 실시예에서, 상기 인덱스 저장 유닛은 상기 명령어 그룹의 제1 명령어와 관련된 제1 인덱스 값을 저장하도록 구성되는 제1 인덱스 저장 유닛을 포함한다. 추론적으로 실행된 명령어 그룹에 대응하는 트레이스 데이터를 발생시킬 때에, 해당 명령어 그룹의 제1 명령어와 관련된 제1 인덱스 값을 저장하는 것이 유리한데, 그 이유는 이 저장이 명령어 그룹의 시작을 규정하기 때문이다.
제1 인덱스 저장 유닛이 오직 단일의 입력값을 저장할 수 있지만, 실시예에서, 상기 제1 인덱스 저장 유닛은 복수 개의 제1 입력값을 포함하고, 상기 명령어 그룹을 나타내는 지시기에 따라 상기 제1 인덱스 값을 저장하도록 구성된다. 따라서, 제1 인덱스 저장 유닛은 명령어 그룹을 나타내는 지시기에 대응하는 입력값에 제1 인덱스 값을 저장할 수 있어, 명령어 그룹에 대한 나중의 참조는 대응하는 제1 인덱스 값이 제1 인덱스 저장 유닛으로부터 검색되게 할 수 있다.
데이터 처리 유닛이 다수의 명령어 그룹을 추론적으로 실행할 수 있다고 가정하면, 트레이스 유닛이 이들 그룹 각각에 대응하는 인덱스 값의 추적을 유지할 수 있다면 유리하고, 이에 따라 일 실시예에서, 상기 복수 개의 제1 입력값의 갯수는 적어도 상기 데이터 처리 유닛에 의해 추론적으로 실행될 수 있는 명령어 그룹의 최대 갯수에 대응한다.
추론적 명령어 실행은 물론 때로는 부정확하고, 몇몇 실시예에서, 상기 트레이스 유닛은 상기 데이터 처리 유닛으로부터 취소 명령어를 수신하도록 구성되고, 상기 취소 명령어는 추론적으로 실행된 선택된 명령어 그룹이 최소되었다는 것을 나타내며, 상기 트레이스 유닛은 상기 선택된 명령어 그룹을 나타내는 트레이스 데이터의 취소 항목을 발생시키도록 구성된다. 따라서, 데이터 처리 유닛이 선택된 명령어 그룹이 취소되어야 한다고 지시할 때에, 트레이스 유닛은 트레이스 데이터의 대응하는 취소 항목을 발생시킴으로써 이 정보를 그 트레이스 데이터의 수신자에게 전송하도록 구성된다.
구체적으로, 일 실시예에서, 상기 트레이스 유닛은 상기 취소 명령어의 수신시에 상기 제1 인덱스 저장 유닛에 저장되고 상기 선택된 명령어 그룹과 관련된 제1 인덱스 값에 따라 트레이스 데이터의 취소 항목을 발생시키도록 구성된다. 제1 인덱스 저장 유닛에 저장된 제1 인덱스 유닛은 명령어 그룹의 제1 명령어와 관련되고, 이에 따라 이 제1 인덱스 값에 대한 참조는 선택된 명령어 그룹의 취소로 인해 취소되어야 하는 트레이스 데이터의 제1 항목의 명령을 트레이스 유닛이 제공하게 할 수 있다. 트레이스 데이터의 이 제1 항목은 취소될 여러 개의 항목들 중 제1 항목이 되거나, 취소될 트레이스 데이터의 하나의 특정한 항목일 수 있다.
몇몇 실시예에서, 트레이스 유닛은 인덱스 값들의 상기 예정된 순서를 제공하도록 구성된 카운터를 포함하고, 상기 트레이스 유닛은 또한 상기 카운터의 현재 카운터 값에 따라 트레이스 데이터의 상기 취소 항목을 발생시키도록 구성된다. 트레이스 유닛은 인덱스 값들의 순서를 발생시키기 위해 카운터를 사용하도록 구성되기 때문에, 카운터의 현재 카운터 값에 대한 참조는 가장 최근의 트레이스 데이터의 항목에 대한 참조를 제공한다. 따라서, 제1 인덱스 값과 현재 카운터 값 양자에 따라 트레이스 데이터의 취소 항목을 발생시킴으로써, 트레이스 유닛은 트레이스 데이터 항목의 순서에서 취소가 시작되고 종료해야 하는 곳을 트레이스 데이터의 수신자에게 지시할 수 있다.
몇몇 실시예에서, 상기 인덱스 저장 유닛은 상기 명령어 그룹의 마지막 명령어와 관련된 마지막 인덱스 값을 저장하도록 구성되는 마지막 인덱스 저장 유닛을 포함한다. 추론적으로 실행되는 명령어 그룹에 대응하는 트레이스 데이터를 발생시킬 때에, 해당 명령어 그룹의 마지막 명령어와 관련된 마지막 인덱스 값을 저장하는 것이 유리한데, 그 이유는 이 저장이 명령어 그룹의 엔드를 규정한다.
마지막 인덱스 저장 유닛이 오직 단일의 입력값을 저장할 수 있지만, 실시예에서, 상기 마지막 인덱스 저장 유닛은 복수 개의 제2 입력값을 포함하고, 상기 명령어 그룹을 나타내는 지시기에 따라 상기 마지막 인덱스 값을 저장하도록 구성된다. 따라서, 마지막 인덱스 저장 유닛은 명령어 그룹을 나타내는 지시기에 대응하는 입력값에 마지막 인덱스 값을 저장할 수 있어, 명령어 그룹에 대한 나중의 참조는 대응하는 마지막 인덱스 값이 제2 인덱스 저장 유닛으로부터 검색되게 할 수 있다.
데이터 처리 유닛이 다수의 명령어 그룹을 추론적으로 실행할 수 있다고 가정하면, 트레이스 유닛이 이들 그룹 각각에 대응하는 인덱스 값의 추적을 유지할 수 있다면 유리하고, 이에 따라 일 실시예에서, 상기 복수 개의 제2 입력값의 갯수는 상기 데이터 처리 유닛에 의해 추론적으로 실행될 수 있는 명령어 그룹의 적어도 최대 갯수에 대응한다.
프로그램 플로우가 정확하게 (통계적으로 말해서) 예상될 수 있는 많은 상황이 존재하기 때문에 추론적 명령어 실행이 구현된다. 추론적 명령어 실행이 정확하다고 최종적으로 알려지면, 해당 명령어는 "위탁"되고, 몇몇 실시예에서, 상기 트레이스 유닛은 상기 데이터 처리 유닛으로부터 위탁 명령어를 수신하도록 구성되고, 상기 위탁 명령어는 추론적으로 실행된 선택된 명령어 그룹이 위탁되었다는 것을 나타내고, 상기 트레이스 유닛은 상기 선택된 명령어 그룹을 나타내는 트레이스 데이터의 위탁 항목을 발생시키도록 구성된다. 따라서, 선택된 명령어 그룹이 위탁되었다는 것을 데이터 처리 유닛이 지시할 때에, 트레이스 유닛은 트레이스 데이터의 대응하는 위탁 항목을 발생시킴으로써 그 트레이스 데이터의 수신자에게 이 정보를 전송하도록 구성된다.
구체적으로, 일 실시예에서, 상기 트레이스 유닛은 상기 위탁 명령어의 수신시에 상기 마지막 인덱스 저장 유닛에 저장되고 상기 선택된 명령어 그룹과 관련된 마지막 인덱스 값에 따라 트레이스 데이터의 상기 위탁 항목을 발생시키도록 구성된다. 마지막 인덱스 저장 유닛에 저장된 마지막 인덱스 값은 명령어 그룹의 마지막 명령어와 관련되고, 이에 따라 이 마지막 인덱스 값에 대한 참조는 선택된 명령어 그룹의 위탁으로 인해 명확하게 정확한 트레이스 데이터의 마지막 항목의 명령을 트레이스 유닛이 제공하게 할 수 있다. 이 트레이스 데이터의 마지막 항목은 위탁할 다수의 항목의 종료점을 제공하거나, 위탁할 특정한 항목일 수 있다.
몇몇 실시예에서, 트레이스 유닛은 인덱스 값들의 상기 예정된 순서와 위탁되지 않은 저장 유닛을 제공하도록 구성된 카운터를 포함하고, 상기 트레이스 유닛은 상기 트레이스 위탁 항목을 발생시킬 때에 상기 위탁되지 않은 저장 유닛에서 상기 카운터의 현재 카운터 값을 저장하도록 구성된다. 따라서, 명령어 그룹이 위탁될 때에, 트레이스 유닛은 위탁되지 않은 명령어가 시작하는 지점을 지시하는 현재 카운터 값을 기록할 수 있다.
몇몇 실시예에서, 트레이스 유닛은 상기 위탁되지 않은 저장 유닛에 저장된 값에 따라 상기 트레이스 위탁 항목을 발생시키도록 구성된다. 위탁되지 않은 저장 유닛은 트레이스 위탁 항목이 마지막 발생될 때로부터 현재 카운터 값을 저장하기 때문에, 위탁되지 않은 저장 유닛에 저장된 값에 따라 트레이스 데이터의 위탁 항목을 발생시킴으로써, 트레이스 유닛은 트레이스 데이터 항목의 순서에서 위탁이 시작되고 종료되어야 하는 곳을 그 트레이스 데이터의 수신자에게 지시할 수 있다.
몇몇 실시예에서, 상기 인덱스 저장 유닛은 상기 명령어 그룹의 제1 명령어와 관련된 제1 인덱스 값을 저장하도록 구성되고, 상기 인덱스 저장 유닛은 상기 명령어 그룹의 마지막 명령어와 관련된 마지막 인덱스 값을 저장하도록 구성된 마지막 인덱스 저장 유닛을 포함하며, 상기 마지막 인덱스 값은 상기 제1 인덱스 값에 대해 포맷에 저장된다.
해당 명령어 그룹에서 제1 명령어와 마지막 명령어 사이에 명령어들의 갯수에 대한 제약을 다시 가하는 명령어 그룹에서 명령어의 갯수에 대한 제약은, 마지막 인덱스 값을 예컨대 오프셋으로서 제1 인덱스 값에 대한 포맷에 저장함으로써 유리한 저장 효율이 얻어질 수 있다는 것을 의미할 수 있다. 이 상대적 포맷은 다수의 포맷을 취할 수 있지만, 일 실시예에서 상기 제1 인덱스 값에 대한 포맷은 2 비트 데이터 포맷이라는 것을 알 것이다. 변경예는, 흥미있는 그룹에서 명령어의 갯수에 따라 1 비트 데이터 포맷 또는 데이터 포맷에서 2보다 많은 비트를 이용할 수 있다.
몇몇 실시예에서, 트레이스 유닛은 추론 깊이 카운터를 포함하고, 상기 추론 깊이 카운터는 상기 데이터 처리 유닛에 의해 실행되는 명령의 현재의 추론 깊이를 지시하도록 구성된다. 추론 깊이 카운터의 제공은 추론적으로 실행되었고, 이에 따라 취소 또는 위탁될 필요가 있을 수 있는 명령어의 갯수의 추적을 트레이스 유닛이 유지하게 할 수 있다. 따라서, 이 추론 깊이 카운터는 추론적으로 실행된 명령어가 위탁 또는 취소될 때에 감분될 수 있다.
몇몇 실시예에서, 트레이스 유닛은 미결정(pending) 위탁 카운터를 포함하고, 상기 미결정 위탁 카운터는 미결정 출력되는 트레이스 데이터의 위탁 항목의 현재 갯수를 지시하도록 구성된다. 따라서, 트레이스 데이터는 발생할 때에 트레이스 데이터의 위탁 항목을 즉시 출력할 필요가 없지만, 그러한 미결정 항목의 갯수의 추적을 유지할 수 있다. 이는 트레이스 대역폭에서 바람직한 감소에 또한 이롭다.
몇몇 실시예에서, 트레이스 유닛은 상기 위탁 명령어가 상기 트레이스 데이터의 위탁 항목이 발생되는 일 없이 수신될 때에 상기 미결정 위탁 카운터를 증분시키도록 구성된다. 따라서, 미결정 위탁 카운터는 미결정 위탁의 총 갯수의 실행이 유지될 수 있기 때문에 트레이스 데이터가 발생되어야 하는 빈도를 감소시켜, 위탁 명령어가 데이터 처리 유닛으로부터 수신될 때에 미결정 위탁 카운터를 증분시키지만 트레이스 데이터의 위탁 항목을 발생시키지 않는다.
몇몇 실시예에서, 트레이스 유닛은 상기 추론 깊이 카운터가 예정된 값에 도달할 때에 상기 미결정 위탁 카운터를 감분시키도록 구성된다. 예컨대, 추론 깊이 카운터가 데이터 처리 유닛의 공지된 최대 추론 깊이에 도달할 때에, 위탁이 가장 오래된 추론적으로 실행되는 명령어를 발생시켜야 한다고 추측될 수 있다.
몇몇 실시예에서, 상기 추론 깊이 카운터는 예정된 값에 도달하고, 트레이스 데이터의 추가 항목의 발생은 상기 트레이스 유닛이 상기 데이터 처리 유닛으로부터 추가의 위탁 명령어를 수신했다는 것을 의미한다. 예컨대, 추론 깊이 카운터가 데이터 처리 유닛의 공지된 최대 추론 깊이에 도달했을 때에, 트레이스 데이터의 추가 항목이 수신된다면 가장 오래된 추론적으로 실행된 명령어의 위탁이 트레이스 데이터의 수신자에 의해 추측될 수 있다. 트레이스 데이터의 수신자는 통상적으로 데이터 처리 유닛의 추론 깊이를 또한 추적하여 이 추측을 가능하게 하도록 배치될 것이다.
몇몇 실시예에서, 트레이스 유닛은 예정된 이벤트에 응답하여 상기 값들의 예정된 순서의 인덱스 값을 예정된 값으로 리셋시키도록 구성된다. 예컨대, 트레이스 데이터의 추가 항목을 동일한 인덱스 값과 관련시키는 것이 바람직할 수 있고, 이는 인덱스 순서를 리셋함으로써 간단하게 달성될 수 있다.
몇몇 실시예에서, 트레이스 유닛은 값들의 순환 순서로서 상기 값들의 예정된 순서를 발생시키도록 구성된다. 이는 무한 순서를 발생시키는 편의의 메카니즘을 제공한다.
트레이스 유닛은 다수의 방식으로 구성될 수 있지만, 일 실시예에서, 상기 트레이스 유닛은 상기 데이터 처리 유닛이 응답하는 적어도 하나의 타입의 명령어에 대해 트레이스 데이터의 항목을 발생시키지 않도록 구성된다. 특정한 명령어는 발생된 트레이스 데이터의 수신자에게 다른 명령어보다 더 관심이 있을 수 있고, 이에 따라 관심이 없는 트레이스 데이터로부터 특정한 타입의 명령어를 생략함으로써 값진 트레이스 대역폭이 절감될 수 있다.
몇몇 실시예에서, 상기 인덱스 저장 유닛은 인 플라이트 지시기를 선택적으로 저장하도록 구성되고, 상기 인 플라이트 지시기는 상기 인덱스 값들의 예정된 순서의 저장된 인덱스 값이 현재 사용 중이라는 것을 지시한다. 인덱스 값들의 예정된 순서는 인덱스 값들의 재사용이 모호하지 않게 발생할 수 있도록 선택될 수 있지만, 특정한 인덱스 값들이 특정한 트레이스 항목과 더 길게 관련된 상태로 유지되는 경우가 있을 수 있다. 인 플라이트 지시기는 인덱스 값이 이 방식으로 취급되어야 하는지를 식별하는 메카니즘을 제공한다.
몇몇 실시예에서, 상기 트레이스 유닛은 다음의 인덱스 값을 발생시킬 때에 상기 인 플라이트 지시기를 참조하고, 상기 인 플라이트 지시기가 상기 다음의 인덱스 값이 여전히 사용 중이라고 지시하면, 상기 다음의 인덱스 값 대신에 대체 인덱스 값을 저장하도록 구성된다.
데이터 처리 유닛의 처리 활동도는 변동될 수 있지만, 일 실시예에서, 상기 데이터 처리 유닛의 처리 활동도는 데이터 어드레스를 이용하여 저장된 데이터 값에 대한 참조를 포함하고, 상기 인덱스 값은 상기 적어도 하나의 데이터 어드레스와 관련된 데이터 어드레스 인덱스 값이다. 데이터 어드레스를 이용하여 저장된 데이터 값에 대한 참조는 명령어가 트레이스 유닛에 의해 트레이스되는 시간 척도에 비해 상당한 양의 시간이 걸릴 수 있다. 예컨대, 명령어가 데이터 어드레스에 대한 참조에 의해 데이터 처리 유닛이 메모리로부터의 데이터 값을 로드하게 할 때에, 해당 데이터 값은 그 후에 많은 클록 사이클까지 데이터 처리 유닛로 복귀되지 않을 수 있다. 이 상황에서, 로딩 명령어와 관련하여 트레이스 유닛에 의해 발생된 트레이스 데이터의 항목은 데이터 값이 데이터 처리 유닛으로 복귀되기 오래 전에 발생되었을 수 있다. 그러한 시나리오에서, 데이터 어드레스 인덱스 값의 사용이 유리한데, 그 이유는 예컨대 참조 공정이 완료되면 저장된 데이터 값을 참조하는 데이터 어드레스와 관련된 트레이스 데이터의 특정한 항목이 나중에 식별될 수 있는 메카니즘을 제공하기 때문이다.
몇몇 실시예에서, 상기 저장된 데이터 값에 대한 참조는 상기 저장된 데이터 값을 로딩하는 것을 포함하고, 다른 실시예에서, 상기 저장된 데이터 값에 대한 참조는 상기 저장된 데이터 값을 저장하는 것을 포함한다. 데이터 값을 로딩 및 저장하는 것은 모두 상기에 참조한 오래 시간이 걸릴 수 있는 메모리에 대한 엑세스를 필요로 한다.
몇몇 실시예에서, 상기 트레이스 유닛은 데이터 어드레스 인덱스 값 저장 테이블에 상기 데이터 어드레스 인덱스 값을 저장하도록 구성된다. 데이터 어드레스 인덱스 값 저장 테이블의 제공은 예컨대 이와 관련된 로드 또는 저장 작동이 종료될 때에 참조가 나중에 요구될 때까지 데이터 트레이스 유닛이 데이터 어드레스 인덱스 값을 저장할 수 있게 한다.
전술한 바와 같이, 발생된 트레이스 데이터 항목이 관련될 수 있고 그 작동을 완료하는 데에 상당한 양의 시간이 걸릴 수 있는 특정한 명령어가 존재한다. 따라서, 그러한 명령어는 일단 트레이스되면 해당 명령어가 완료된 것으로 고려될 수 있기 전에 발생해야 하는 추가 이벤트가 없는 다른 명령어와 구별될 수 있다. 그러한 이벤트가 완료되기를 기다리는 상태는 "인 플라이트(in-flight)"로서 공지되어 있고, 몇몇 실시예에서, 상기 트레이스 유닛은 인 플라이트 지시기를 선택적으로 저장하도록 구성되고, 상기 인 플라이트 지시기는 상기 데이터 어드레스 인덱스 값과 관련된 상기 저장된 데이터 값에 대한 참조가 아직 완료되지 않았고 상기 데이터 어드레스 인덱스 값이 인 플라이트 상태라는 것을 지시한다. 이 방식으로 인 플라이트 지시기를 저장하도록 트레이스 유닛을 구성하면, 아직 완료되지 않은 작동과 관련된 데이터 어드레스 인덱스 값의 추적을 트레이스 유닛이 유지할 수 있는 메카니즘이 제공된다.
그러한 실시예에서, 트레이스 유닛은 다음의 데이터 어드레스 인덱스 값을 발생시킬 때에 저장된 인 플라이트 지시기를 참조하고, 상기 저장된 인 플라이트 지시기가 상기 다음의 데이터 어드레스 인덱스 값이 여전히 인 플라이트 상태라고 지시하면, 상기 다음의 데이터 어드레스 인덱스 값 대신에 대체 데이터 어드레스 인덱스 값을 저장하도록 구성된다.
트레이스 유닛은 공간 제약의 이유로, 통상 발생할 수 있는 데이터 어드레스 인덱스 값의 한정되고 제한된 범위를 가질 것이다. 따라서, 완료하는 데에 오랜 시간이 걸리는 명령어와 조우할 때에, 해당 명령어에 관련된 데이터 어드레스 인덱스 값의 사용은 데이터 어드레스 인덱스 값의 전체 세트를 통한 트레이스 유닛 사이클이 이용 가능한 것보다 오랜 기간 동안 필요로 될 수 있다. 그러므로, 트레이스 유닛은 여전히 인 플라이트 상태인 데이터 어드레스 인덱스 값과 조우할 수 있고, 즉 아직 재사용되지 않아야 하며, 이 상황에서 트레이스 유닛은 예정된 순서에서 다음의 데이터 어드레스 인덱스 값을 단순히 사용하지 않고 그 대신에 대체 데이터 어드레스 인덱스 값을 저장하도록 구성된다. 이 방식에서, 데이터 어드레스 인덱스 값의 제한되고 한정된 세트가 트레이스 유닛에 의해 일반적으로 사용될 수 있지만, 이들 데이터 어드레스 인덱스 값의 자연적인 사이클보다 더 긴 기간 동안 데이터 어드레스 인덱스 값이 사용되도록 요구되는 특별한 상황이 여전히 도모될 수 있다.
대체 데이터 어드레스 인덱스 값은 다수의 형태를 취할 수 있지만, 일 실시예에서, 상기 대체 데이터 어드레스 인덱스 값은 데이터 처리 유닛 인덱스 값을 포함하고, 상기 데이터 처리 유닛 인덱스 값은 상기 데이터 어드레스를 참조하도록 상기 데이터 처리 유닛에 의해 사용된다. 데이터 처리 유닛 자체는 통상적으로 또한 그러한 데이터 어드레스를 참조하도록 사용하는 인덱싱 시스템을 가지므로, 이루어지는 데이터 어드레스에 대한 참조와 복귀되는 데이터 값에 대한 참조 간에 상당한 지연이 (프로세서 사이클 관점에서) 있을 때라도 데이터 값을 데이터 어드레스와 관련시킬 수 있다. 이 상황에서, 대응하는 데이터 처리 유닛 인덱스 값(때때로 "코어 키"라고 지칭함)은 대체 데이터 어드레스 인덱스 값으로서 트레이스 유닛에 의해 사용될 수 있다. 그러나, 대체 데이터 어드레스 인덱스 값에 대해 사용되는 "코어 키" 자체일 필요는 없고("특별한 키"), 일 실시예에서, 상기 대체 데이터 어드레스 인덱스 값은 데이터 처리 유닛 인덱스 값과 1 대 1 대응 관계를 갖고, 상기 데이터 처리 유닛 인덱스 값은 상기 데이터 어드레스를 참조하도록 상기 데이터 처리 유닛에 의해 사용된다.
인 플라이트 지시기가 트레이스 유닛에 의해 저장될 때에, 몇몇 실시예에서, 인 플라이트 지시기는 상기 데이터 어드레스 인덱스 값과 관련하여 저장되는 반면, 다른 실시예에서, 상기 인 플라이트 지시기는 상기 데이터 처리 유닛 인덱스 값과 관련하여 저장된다.
트레이스 유닛이 대체 데이터 어드레스 인덱스 유닛을 사용할 때에, 몇몇 실시예에서, 상기 트레이스 유닛은 상기 대체 데이터 어드레스 인덱스 값을 나타내는 트레이스 데이터 항목을 발생시키도록 구성된다. 트레이스 유닛에 의해 발생된 인덱스 값의 예정된 순서는 일반적으로 소정의 트레이스 데이터 항목의 인덱스가 이전 트레이스 데이터 항목의 인덱스 값으로부터 추측되게 하는데, 이는 대체 데이터 어드레스 인덱스 값이 사용되는 경우가 아니다. 트레이스 데이터의 수신자가 "원-오프(one-off)" 특별한 인덱스 값을 결정할 수 있도록 트레이스 유닛이 대체 데이터 어드레스 인덱스 값을 나타내는 트레이스 데이터 항목을 발생시키는 것이 유리할 수 있다.
대체 데이터 어드레스 인덱스 값과 데이터 어드레스 인덱스 값은 상이한 프로토콜에 따라 인코딩될 수 있지만, 일 실시예에서, 상기 대체 데이터 어드레스 인덱스 값과 상기 다음의 데이터 어드레스 인덱스 값은 인코딩 프로토콜을 공유한다. 예컨대, 프로토콜 내에 예정된 범위는 데이터 어드레스 인덱스 값을 위해 보존될 수 있지만, 나머지는 대체 데이터 어드레스 인덱스 값을 위해 보존된다.
몇몇 실시예에서, 상기 트레이스 유닛은 초기 명령어 그룹 및 후속 명령어 그룹에 관한 상기 데이터 처리 유닛으로부터의 병합 명령어를 수신하도록 구성되고, 상기 데이터 처리 유닛은 상기 초기 명령어 그룹이 실행되면 상기 후속 명령어 그룹이 실행되고, 이에 따라 상기 초기 명령어 그룹 및 상기 후속 명령어 그룹이 병합된 명령어 그룹이라고 결정되면 상기 병합 명령어를 출력하고, 상기 트레이스 유닛은 상기 병합 명령어에 따라 상기 병합된 명령어 그룹과 관련된 상기 인덱스 저장 유닛의 적어도 하나의 병합된 인덱스 값을 보정하도록 구성된다.
추론 실행을 위한 명령어 그룹을 취급하는 데이터 처리 유닛에서, 그룹을 구성하는 정의는 통상적으로 분기가 어떤 방식으로 결정되는지 아직 알려지지 않은 분기 명령어 등의 명령어에 의해 결정된다. 그러나, 예컨대 "동등하면 분기(branch if equal)" 명령어가 종속하는 값이 결정되고 이 값이 분기 명령어가 실행되기 전에 변하지 않는다고 알려져 있다면, 그러한 분기가 미리 결정되도록 취하는 방향이 가능하다. 그러한 명령어가 2개의 명령어 그룹 간에 경계를 규정하면, 이 상황에서, 2개의 명령어 그룹은 병합될 수 있는데, 그 이유는 제1 그룹의 실행 후에 반드시 제2 그룹의 실행이 뒤따르기 때문이다. 데이터 처리 유닛이 그러한 병합 명령어를 출력할 때에, 트레이스 유닛은 이제 하나가 된 2개의 명령어 그룹과 관련된 인덱스 저장 유닛에 저장된 인덱스 값을 보정할 수 있다. 예컨대, 제1 및 마지막 인덱스 값이 제1 및 제2 명령어 그룹과 관련하여 인덱스 저장 유닛에 미리 저장되는 경우, 이들 2개의 명령어 그룹이 병합될 때에, 인덱스 저장 유닛의 값은 제1 그룹으로부터 취한 제1 인덱스 값과 제2 그룹으로부터 취한 마지막 인덱스 값을 갖는 단일의 명령어 그룹을 지시하도록 보정될 수 있다.
몇몇 실시예에서, 상기 트레이스 유닛은 트레이스 데이터의 병합 항목을 발생시키도록 구성되고, 상기 트레이스 데이터의 병합 항목은 상기 초기 명령어 그룹 및 상기 후속 명령어 그룹이 병합되었다는 것을 지시한다. 이 상황에서, 트레이스 유닛은 트레이스 데이터의 병합 항목을 발생시켜 2개의 명령어 그룹이 병합되었고 단일의 명령어 그룹으로서 취급되었다는 것을 트레이스 데이터의 수신자에게 지시하도록 구성될 수 있다.
제2 양태로부터 보았을 때에, 본 발명은 데이터 처리 유닛의 처리 활동도를 나타내는 트레이스 데이터 항목을 발생시키도록 구성된 트레이스 유닛을 제공하는 것으로서, 상기 트레이스 유닛은, 인덱스 값을 트레이스 유닛에 의해 발생된 트레이스 데이터 항목의 적어도 부분 집합과 관련시키는 트레이스 인덱싱 유닛을 포함하고, 상기 트레이스 인덱싱 유닛은 상기 인덱스 값을 인덱스 값의 예정된 순서 중 하나로서 발생시키도록 구성되며, 상기 예정된 순서에서 n+1번째 인덱스 값이 상기 예정된 순서에서 오직 n번째 인덱스 값으로부터만 결정될 수 있다.
제3 양태로부터 보았을 때에, 본 발명은 데이터 처리 유닛의 처리 활동도를 나타내는 트레이스 데이터 항목을 발생시키는 방법을 제공하는 것으로서, 상기 방법은, 상기 트레이스 데이터 항목을 발생시키는 단계; 인덱스 값을 발생된 트레이스 데이터 항목의 적어도 부분 집합과 관련시키는 단계; 상기 인덱스 값을 인덱스 값의 예정된 순서 중 하나로서 발생시키는 단계를 포함하고, 상기 예정된 순서에서 n+1번째 인덱스 값이 상기 예정된 순서에서 오직 n번째 인덱스 값으로부터만 결정될 수 있다.
본 발명은 첨부 도면에 도시된 실시예를 참조하여 오직 일례로서 더 설명될 것이다. 도면에서:
도 1은 일 실시예에 따른 데이터 처리 유닛 및 관련 트레이스 유닛을 개략적으로 도시하고;
도 2는 도 1의 트레이스 유닛을 더 상세하게 개략적으로 도시하며;
도 3은 일 실시예에 따른 트레이스 유닛에 의해 취한 일련의 단계들을 도시하고;
도 4는 도 1의 트레이스 유닛의 대안적인 구성을 개략적으로 도시하며;
도 5는 일 실시예에 따른 순차적인 키 및 특별한 키의 사용을 도시하고;
도 6은 일 실시예에 따른 인덱스 저장 유닛을 개략적으로 도시하며;
도 7은 일 실시예에 따른 인덱스 저장 유닛을 개략적으로 도시하고;
도 8은 일 실시예에 따른 트레이스 유닛에 의해 취한 단계들의 순서를 개략적으로 도시하며;
도 9는 12개의 순차적인 키와 4개의 특별한 키로 분할된 16개 키의 프로토콜 공간을 도시한다.
도 1은 본 발명에 따른 트레이스 유닛을 포함하는 데이터 처리 시스템을 개략적으로 도시하고 있다. 데이터 처리 시스템은 프로세서 코어(100)(데이터 처리 유닛)와, 프로세서 코어(100)의 처리 활동도를 모니터링하고 코어의 처리 활동도를 나타내는 (트레이스 스트림으로서) 트레이스 데이터의 항목을 발생시키도록 구성된 트레이스 유닛(100)을 포함한다. 프로세서 코어(100)는 추출 유닛(120)과 실행 유닛(130)을 포함한다. 추출 유닛(120)은 메모리(도시 생략)로부터 명령어를 추출하고 명령어를 실행을 위해 실행 유닛(130)으로 보낸다. 구체적으로, 프로세서 코어(100)는 추론적인 비순차 프로세스이고, 이에 따라 추출 유닛(120)은 필요한 것으로 예상되는(장담하지는 못함) 실행 유닛(130)을 위한 명령어를 추출하도록 구성된다. 실행 유닛(130)은 이들 명령어를 추론적으로 실행하고, 나중에 추론적으로 실행된 명령이 사실상 실행되는지의 여부가 알려질 때에 명령을 취소하거나 위탁할 것이다.
트레이스 유닛(110)은 명령의 추론적 실행을 비롯하여 프로세서 코어(100)의 처리 활동도를 나타내는 트레이스 데이터의 항목을 발생시키도록 구성된다. 원칙적으로 트레이스 유닛(110)이 추론적으로 실행된 명령과 관련하여 발생된 트레이스 데이터 항목을 버퍼링할 수 있고, 오직 추론이 결정되면 출력 트레이스 스트림으로서 그들 트레이스 데이터 항목을 릴리스할 수 있지만, 이는 회피되는 것이 바람직한 상당한 저장 공간을 트레이스 유닛(110) 내에 필요로 한다. 도 1에 도시된 실시예 대신에, 트레이스 유닛(110)은 또한 트레이스 데이터를 추론적으로 발생시키고, 즉 추론적으로 실행된 명령을 나타내는 트레이스 데이터의 항목을 발생시킨 다음에, 추론이 정확한지의 여부가 알려지면 이들 트레이스 데이터 항목을 취소/위탁하도록 구성된다. 이를 위해, 트레이스 유닛(110)에는 트레이스 인덱싱 유닛(140)이 더 마련된다. 인덱싱 유닛(140)은 인덱스 값을 트레이스 유닛(110)에 의해 발생된 트레이스 데이터 항목의 적어도 부분 집합과 관련시키도록 구성된다. 구체적으로, 인덱싱 유닛(140)은 예정된 순서의 인덱스 값으로서 인덱스 값을 발생시키도록 구성되고, 여기서 n+1번째 인덱스 값이 예정된 순서에서 n번째 인덱스 값으로부터 결정될 수 있다. 도시된 실시예에서, 이 상관성은 도 2를 참조하여 더 설명되는 바와 같이 인덱싱 유닛(140)의 카운터에 의해 제공된다.
도 2는 도 1에 도시된 트레이스 유닛(110)을 보다 상세하게 개략적으로 도시하고 있다. 트레이스 유닛(110)은 이 트레이스 유닛(110)의 전체적인 작동을 제어하는 트레이스 제어 유닛(200)을 포함한다. 트레이스 유닛(110)은 이 트레이스 유닛(110)이 발생하는 트레이스 데이터의 항목(의 일부)과 관련할 수 있는 인덱스 값의 예정된 순서를 제공하는 카운터(210)를 더 포함한다. 트레이스 유닛(110)은 또한 카운터(20)에 의해 발생된 인덱스 값이 저장될 수 있는 인덱스 저장 유닛(220)을 포함한다. 인덱스 저장 유닛(220)은 제1 인덱스 저장 유닛(230)과 마지막 인덱스 저장 유닛(240)을 포함한다. 추론적으로 실행된 명령어 그룹에서의 제1 명령어를 위해, 트레이스 유닛(110)은 카운터(210)로부터의 현재의 카운터 값을 그룹 번호에 의해 인덱싱된 제1 인덱스 저장 유닛에 저장하도록 구성된다. 반대로, 새로운 그룹이 시작될 때에, 현재의 카운터 값은 마지막 인덱스 저장 유닛(240)에 저장된다.
도시된 실시예에서, 인덱스 저장 유닛(220)은 명령어 그룹의 관점에서 프로세서의 최대 추론 깊이에 대응하기에 충분한 입력값을 갖는다. 프로세서의 최대 추론 깊이는 인덱스 저장 유닛이 유지해야 하는 입력값의 최대 갯수를 나타내는데, 그 이유는 그 깊이를 지나서는 프로세서가 명령어 그룹을 위탁하거나 취소해야 하기 때문이고, 이는 인덱스 저장 유닛에서 입력값을 해방시킨다. 또한, 도시된 실시예에서, 프로세서에 의해 추론적으로 실행된 각 명령어 그룹은 하나의 분기 명령어 및 하나의 로드(또는 저장) 명령어의 최대값을 가질 수 있다. 다른 모든 명령어는 이들 명령어의 지시를 비롯하여 트레이스 스트림으로부터 추측될 수 있기 때문에, 명령어 그룹 당 2개의 명령어 트레이스 항목의 최대값이 발생될 것이다. 이는 인덱스 저장 유닛(220)에서 소정의 입력값의 경우에 마지막 인덱스 저장 유닛(240)에서의 값이 제1 인덱스 저장 유닛(230)의 값과 기껏해야 2 카운트가 상이할 수 있다는 추가 결과를 갖는다. 따라서, 제1 인덱스 값으로부터 2 비트 오프셋(즉, +0, +1 또는 +2)으로서 마지막 인덱스 값을 저장함으로써, 상당한 저장 공간이 절감된다. 트레이스 유닛은 가장 오래된 위탁되지 않은 저장 유닛(250)을 더 포함하고, 그 기능은 이하에서 설명될 것이다. 파선으로 된 박스(252, 254)를 포함하는 트레이스 유닛(110)의 변경이 또한 나중에 설명된다.
트레이스 유닛(110)에 의해 실행되는 일련의 단계들이 도 3에 개략적으로 도시되어 있다. 플로우는 프로세서 코어(100)로부터의 새로운 이벤트가 대기되는 단계(300)에서 시작하고, 플로우는 이벤트가 수신될 때까지 단계(300)에서 자체 순환한다. 새로운 이벤트가 수신될 때에(즉, 다음 명령이 코어에 의해 실행될 때에), 프로우는 단계(310)로 진행하고, 이 단계에서 이벤트가 새로운 명령어 그룹의 일부인지가 결정된다. 그렇다면, 플로우는 단계(320)로 진행하고, 이 단계에서 인덱스 저장 유닛(220)의 제1 인덱스 저장 유닛(230)에서의 입력값("테이블")이 새로운 그룹 번호(K)에 대응하는 입력값에서의 현재 카운터 값에 의해 업데이트된다. 다음에, 단계(330)에서, 이 이벤트가 "흥미있고" 트레이스되는지가 결정된다. "흥미있는" 명령어는 (전술한 바와 같이, 이 명령어가 명령어 그룹을 트레이스하는 관점에서 중요한 명령어이기 때문에) 분기, 로드 및 저장 명령어이다. 트레이스 유닛에 의해 현재 필터링되지 않는다면 명령이 트레이스된다. 이벤트(즉, 명령어)가 흥미있고 트레이스된다면, 플로우는 카운터(210)가 증분되는 단계(340)로 진행하고, 단계(350)에서 이벤트는 트레이스 유닛(110)의 트레이스 스트림에서 출력된다. 단계(360)에서, 그룹(K)에 대응하는 마지막 인덱스 저장 유닛(240)의 입력값은 카운터(210)의 현재 값에 의해 업데이트된다. 이어서, 플로우는 단계(300)로 복귀된다.
이하, 트레이스 유닛(110)의 작동, 구체적으로 인덱스 저장 유닛("추적 테이블"이라고도 함)(220)에 관하여 아래의 표 1을 참조하여 설명한다. 표 1은 프로세서 코어(100)가 명령어 그룹(A, B 및 C)을 실행하고 이어서 그룹(B)이 취소되어야 하고 그룹(A)이 위탁되어야 한다는 것을 지시하는 상황에서, 카운터 값, 가장 오래된 위탁되지 않은 값, 및 추적 테이블이 트레이스 유닛(110)에서 어떻게 업데이트되는지를 보여준다.
그룹(A)은 "흥미있고" 현재 트레이스되는 로드(LDR) 명령어에 의해 시작한다. 그러므로, 그룹(A)에 대응하는 제1 인덱스 유닛(230)의 입력값("A.first")은 0의 현재 카운터 값을 저장하고, 이어서 카운터는 1로 증분된다. 마지막으로, 그룹(A)에 대응하는 마지막 인덱스 유닛(240)의 입력값은 1의 현재 카운터 값을 저장한다. 그룹(A)에서의 다음 명령어는 "흥미없고" 트레이스되지도 않는 이동 명령어(MOV)이다. 그룹(A)의 마지막 명령어는 "흥미있고" 트레이스되는 BEQ(branch-if-equal) 명령어이므로, 카운터는 2로 증분된다. 이어서, 그룹(A)에 대응하는 마지막 인덱스 유닛(240)의 입력값("A.last")은 2개의 현재 카운터 값에 의해 업데이트된다. 사실상, 각 명령의 최종 단계는 항상 현재 그룹에 대응하는 마지막 인덱스 유닛(240)의 입력값이 현재 카운터 값에 의해 업데이트되는 것이다. 물론, 오직 카운터가 이를 위해 업데이트되었다면 명령어는 임의의 영향을 미친다. 이 방식에서 "마지막" 값의 업데이트는 표 1에 나타낸 나머지 명령어를 위해 명시적으로 설명되지 않는다.
그룹(B)은 "흥미없고" 트레이스되지 않는 ADD 명령어에 의해 시작하지만, 새로운 그룹의 제1 명령어는 현재 카운터 값 2가 제1 인덱스 값 저장 유닛의 대응하는 입력값에 저장되게 한다(즉, B.first = 2). 그룹(B)의 제2 명령어는 유사하게 "흥미없고" 트레이스되지 않으며 임의의 값을 업데이트시키지 않는 SUB 명령어이다.
그룹(C)은 "흥미있고" 트레이스되는 저장(STR) 명령어에 의해 시작하고, 이에 따라 현재 카운터 값이 제1 인덱스 저장 유닛의 C.first 입력값에 저장되고 이어서 카운터는 3으로 증분된다. 그룹(C)의 제2 명령어는 또한 "흥미있고" 트레이스되는 BNE(branch-if-not-equal) 명령어이므로, 카운터는 4로 업데이트된다.
다음에, 프로세서 코어(100)는 그룹(B)의 추론적 실행이 부정확하고 이에 따라 그룹(B와 C)이 취소되어야 한다는 것을 가리킨다. 응답하여, [트레이스 제어 유닛(200)에 의해 제어된] 트레이스 유닛(110)은 현재 4인 카운터(210)의 현재 카운터 값과, 제1 인덱스 저장 유닛(230)의 대응하는 입력값에 저장된 2인 값(즉, B.first)을 참조한다. 따라서, 트레이스 유닛(110)은 2개의 트레이스 데이터 항목이 취소되어야 하고(4-2) 이 사실을 나타내는 트레이스 데이터 항목을 발생시킨다는 것을 결정한다. 이어서, 카운터(210)는 2로 리셋된다(그 이유는 카운터가 이전에 4였고 2개의 항목이 취소되었기 때문이다).
다음에, 프로세서 코어(100)는 명령어 그룹(A)이 위탁되어야 한다는 것을 지시하는데, 그 이유는 이 명령어 그룹의 추론적 실행이 정확하다고 결정되었기 때문이다. 응답하여, [트레이스 제어 유닛(200)의 제어 하에] 트레이스 유닛(110)은 가장 오래된 위탁되지 않은 저장 유닛(250)에 저장된 값(현재 0)과, 이 그룹에 대응하는 마지막 인덱스 저장 유닛(240)에서의 2인 입력값(즉, A.last)을 참조한다. 따라서, 트레이스 유닛(110)은 2개의 트레이스 데이터 항목(2-0)이 위탁되어야 하고, 이 사실을 나타내는 트레이스 데이터 항목을 발생시킨다는 것을 결정한다. 이어서, 가장 오래된 위탁되지 않은 저장 유닛(250)에 저장된 값이 이 그룹에 대해 판독된 "마지막" 값, 즉 이 예에서 2로 리셋된다.
표 1을 참조하여 설명된 실시예에서, 취소 및 위탁은 다수의 이벤트를 참조하여 수행되고, 발생된 트레이스 데이터 항목은 취소 또는 위탁되어야 하는 이벤트의 갯수를 지시한다는 점을 유념해야 할 것이다. 변경예에서, 트레이스 유닛은 이벤트 갯수를 참조하여 트레이스의 취소/위탁을 발생시킬 수 있다. 이것이 트레이스의 취소 항목을 위한 경우에, 이벤트 갯수는 "제1" 값, 즉 제1 인덱스 값 저장 유닛의 대응하는 입력값으로부터 취하고, 트레이스의 위탁 항목인 경우에, 이벤트 갯수는 "마지막" 값, 즉 마지막 인덱스 값 저장 유닛의 대응하는 입력값으로부터 취한다. 이벤트 갯수에 의한 위탁 및 취소는 (뺄셈이 필요하지 않기 때문에) 하드웨어를 더 적게 필요로 하지만, 다수의 이벤트에 의한 취소/위탁을 지시할 때에, 이는 흔히 압축될 수 있는데, 그 이유는 일반적으로 0을 판독하게 되기 때문이다. "이벤트의 갯수" 또는 "이벤트 갯수"에 의한 위탁/취소가 시스템 요건에 따라 결정될 수 있는지 여부, 즉 트레이스 유닛에서 더 적은 하드웨어 또는 트레이스 시스템에서 더 적은 대역폭 여부의 선택이 보다 중요한 것으로 간주된다.
그룹 실행 트레이스 이전 카운트 값 가장 오래된 위탁되지 않은 카운트 추적 테이블 업데이트 노트
A LDR LDR 0 0 A.first=0
A.last=0
카운트→1
A MOV 1 0 A.last=1
A BEQ BEQ 1 0 A.last=2 카운트→2
B ADD 2 0 B.first=2
B.last=2
B SUB 2 0 B.last=2
C STR STR 2 0 C.first=2
C.last=3
카운트→3
C BNE BNE 3 0 C.last=4 카운트→4
그룹 B 취소 2 항목 취소 4 0 현재 카운트=4, B.first=2, 이에 따라 2 항목 취소(4-2); 카운트→2
그룹 A 위탁 2 항목 위탁 2 0 가장 오래된 위탁되지 않은 카운트=0, A.last=2, 이에 따라 2 항목 위탁(2-0); 가장 오래된 위탁되지 않은 카운트→2
추론 실행 중에 인덱스 저장 유닛 값들
이하, 아래의 표 2를 참조하여 다른 예가 논의되는데, 표 2에서 트레이스 유닛은 저장(STR) 명령어를 트레이스하지 않음으로써 제공된 예에서 발생된 트레이스를 필터링한다. 그룹(A와 B)에 대해 표 2에 제공된 값은 표 1에서 제공된 값과 동일하다. 그러나, 그룹(C)의 제1 명령어의 경우, STR 명령어는 트레이스되지 않으므로, 카운트가 증분되지 않는다. 따라서, (트레이스되는) 그룹(C)의 BNE 명령어와 조우할 때에 카운트는 3으로 증분된다.
그러므로, 프로세서 코어가 "취소 B" 메시지를 출력할 때에, 트레이스 유닛(110)은 현재 카운트가 3이고, B.first가 2(표 1의 예에서와 같이)이며, 이에 따라 트레이스의 단 하나의 항목(3-2)이 취소되어야 한다는 것을 결정한다. 유사하게, 카운트는 오직 1만큼 (2의 값으로) 감소된다. 프로세서 코어가 "위탁 A" 메시지를 출력할 때에, 표 1과 같이, 가장 오래된 위탁되지 않은 카운트는 0이고, A.last = 이며, 이에 따라 트레이스의 2개의 항목이 위탁된다. 가장 오래된 위탁되지 않은 카운트는 2로 업데이트된다.
그룹 실행 트레이스 이전 카운트 값 가장 오래된 위탁되지 않은 카운트 추적 테이블 업데이트 노트
A LDR LDR 0 0 A.first=0
A.last=1
카운트→1
A MOV 1 0 A.last=1
A BEQ BEQ 1 0 A.last=2 카운트→2
B ADD 2 0 B.first=2
B.last=2
B SUB 2 0 B.last=2
C STR 2 0 C.first=2
C.last=2
트레이스되지 않으므로, 카운트는 증분되지 않음
C BNE BNE 2 0 C.last=3 카운트→3
그룹 B 취소 1 항목 취소 3 0 현재 카운트는 3, B.first=2, 이에 따라 1 항목 취소(3-2); 카운트→2
그룹 A 위탁 2 항목 위탁 3 0 가장 오래된 위탁되지 않은 카운트는 0, A.last=2, 이에 따라 2 항목 위탁(2-0); 가장 오래된 위탁되지 않은 카운트는 이제 2임
필터링된 트레이스에 의한 추론 실행 중에 인덱스 저장 유닛 값들
표 1 및 표 2를 참조하여 논의된 각 명령어 그룹은 그룹으로서 추론적으로 실행되고 그룹으로서 위탁 또는 취소되는 별개의 그룹으로서 유지될 수 있지만, 몇몇의 실시예에서, 명령어의 2개의 그룹은 실행 후에 함께 병합될 수 있다.
그룹 실행 트레이스 이전 카운트 값 가장 오래된 위탁되지 않은 카운트 추적 테이블 업데이트 노트
A LDR LDR 0 0 A.first=0
A.last=0
카운트→1
A MOV 1 0 A.last=1
A BEQ BEQ 1 0 A.last=2 카운트→2
B ADD 2 0 B.first=2
B.last=2
B SUB 2 0 B.last=2
B BNE BNE 2 0 B.last=2 카운트→3
C STR STR 3 0 C.first=3
C.last=4
카운트→4
C SUB 4 0
BNE 결정됨, B를 A에 병합 4 0 A.last=3 B.last가 A.last로 복사됨
B MOV 4 0 B.first=4
B.last=4
그룹 B가 재사용됨
B BLT BLT 4 0 B.last=5 카운트→5
그룹 A 위탁(LDR 결정됨) 2 항목 위탁 5 0 가장 오래된 위탁되지 않은 카운트는 0, A.last=3, 이에 따라 3 항목 위탁(3-0); 가장 오래된 위탁되지 않은 카운트는 이제 3임
그룹 B 취소(예외가 옴) 1 항목 위탁 5 3 현재 카운트는 5, B.first=4, 따라서 1 항목 취소(5-4); 카운트→4
병합이 있는 추론 실행 중에 인덱스 저장 유닛 값들
표 3은 인덱스 저장 유닛(220; "추적 테이블")의 값들의 값이 그러한 상황에서 어떻게 사용되는지를 보여준다. 이 예에서, 그룹(B)의 BNE 명령어는 그룹(A)의 LDR 명령어 전에 결정된다. 이 상황에서, 프로세서 코어(100)는 이 사실을 지시하여, 그룹(B)를 그룹(A)에 병합하도록 트레이스 유닛에 명령한다. 이는 B.last의 값을 A.last에 복사함으로써 행해진다. 바꿔 말하면, 그룹(A)에 대응하는 트레이스 값들의 세트는 1만큼 성장한다(그 이유는 BNE 명령어의 트레이스 항목이 이제 그룹(A)의 시작을 형성하는 LDR 명령어의 성공적인 실행을 반드시 따르는 트레이스 항목들의 세트의 일부를 형성하기 때문이다). 이 병합이 수행되었다면, 그룹 라벨 B는 재사용에 이용될 수 있고 그룹(C) 후에 다음 명령어 그룹에 대한 라벨로서 취해진다. 이 새로운 그룹(B)(MOV 및 BLT가 수행됨)에서는, BLT만이 트레이스된다.
보다 간단한 실시예에서, 인덱스 저장 유닛은 FIFO 유닛으로서 배치될 수 있다. 이는 도 4에 개략적으로 도시되어 있는데, 도 4에서 트레이스 유닛(110)은 FIFO(260)의 형태인 트레이스 인덱싱 유닛을 포함한다. 이 간소화된 구조의 한가지 이점은 전체 인덱스 값이 인덱스 저장 유닛(260)의 각 입력값에 저장될 필요가 없다는 것이다.
그룹들이 트레이스 유닛(110)에 의해 수신될 때에, 그룹은 FIFO(260)의 엔드에 추가된다. 이어서, 그룹이 위탁될 때에, 그룹은 FIFO의 전방으로부터 제거되는 반면, 그룹이 취소될 때에, 그룹은 FIFO의 엔드로부터 취해진다. FIFO의 각 입력값은 해당 그룹의 흥미있는 명령어의 갯수를 지시하는 작은 식별자를 포함한다. 2개의 흥미있는 명령어의 최대값이 임의의 그룹에 있을 수 있는 도시된 예에서, 식별자는 0, 1 또는 2를 나타내는 2 비트 필드이다. 각 입력값이 (위탁 또는 취소에서) FIFO로부터 취해질 때에, 트레이스 이벤트의 갯수는 간단하게 FIFO에서의 입력값의 식별자에 의해 나타내는 갯수이다. 다중 그룹이 위탁 또는 취소되면, 식별자는 제거된 FIFO 입력값으로부터 합산된다.
도 2에 또한 도시된 트레이스 유닛(110)의 구성 변경(파선으로 된 박스)을 이하 설명한다. 임의의 주어진 시간에서, 위탁 또는 취소되지 않은 추론적 트레이스 데이터의 다수의 항목이 존재할 것이다. 이 갯수는 0에서 프로세서의 최대 추론 깊이까지의 범위이다. 또한, 일반적으로 위탁 트레이스 데이터를 즉시 출력하는 것은 필요하지 않다는 것을 유념해야 한다. 위탁을 지연하거나, 위탁 카운트를 함께 추가함으로써 위탁들을 결합하거나, 또는 위탁 카운트 출력값이 프로세서에 의해 발생된 것을 초과하지 않는 한 위탁을 분할하는 것이 가능하다.
이들 인자는 위탁이 트레이스 시스템에서 명백하게 출력되기 보다는 수반되는 시스템을 생성하도록 사용될 수 있고, 이는 트레이스의 효율을 더 향상시킨다. 즉시 출력하는 대신에, 아직 출력되지 않은 위탁 카운트의 총 갯수를 지시하는 총합이 ["아직 출력되지 않은 위탁" 저장 유닛(252)에서] 유지된다. 추론적 트레이스 데이터 항목의 현재 갯수의 제2 카운트가 ["추론 깊이" 저장 유닛(254)에서] 유지된다. 트레이스 데이터 항목이 출력될 때에, 추론 깊이가 1 만큼 증분된다. 위탁 카운트가 출력될 때에, 추론 깊이는 위탁 갯수 만큼 감분된다. 취소 카운트가 출력될 때에, 추론 깊이는 취소 갯수 만큼 감분된다.
보다 많은 트레이스 데이터 항목이 출력될 때에, 추론 깊이가 최대 추론 깊이에 도달하게 된다. 이것이 발생할 때에, 카운트 = 1을 갖는 위탁이 수반된다. 동시에, 추론 깊이가 1 만큼 감분된다. 전체 위탁 카운트가 또한 1 만큼 감분된다.
트레이스 유닛이 트레이스 데이터의 발생을 정지시키라는 명령을 받으면, 트레이스 유닛은,
1)현재의 미불 총 위탁 카운트 및 임의의 후속 위탁 카운트를 출력하도록, 또는
2)모든 트레이스 데이터가 위탁 또는 취소된 다음에 총 위탁 카운트를 출력할 때까지 대기하도록 구성될 수 있다.
본 발명의 교시는 또한 특히 데이터 값과 데이터 어드레스의 상황에서 비순차 프로세서의 특정한 유용성을 탐구한다. (명령에 반대하여) 비순차 프로세서에서 데이터의 트레이스는 비순차 프로세서가 데이터 어드레스에 대해 상이한 순서로 데이터 값을 발생 또는 수신하는 추가의 복잡도와 논쟁해야 한다. 본 발명에 의해 제공된 트레이스 데이터 항목의 인덱싱은 데이터 값이 그 데이터 어드레스와 일치되게 한다. 그러나, 데이터 값과 처리를 트레이스하는 추가 어려움은 그 모 명령어(parent instructioin)에 관하여 얼마나 늦게 데이터 어드레스될 수 있는지에 관한 한계값이 강제될 수 있지만, 이는 그 모 데이터 어드레스에 관하여 데이터 값이 실용적이지 않다는 것이다. 예컨대, 완료하기 위하여 수백 사이클을 판독할 수 있고, 그 때에, (이들 명령어 중 어떤 것도 판독값을 필요로 하지 않는 한)임의의 갯수의 명령이 실행될 수 있다.
본 발명의 기술에 따르면, 트레이스 유닛의 트레이스 인덱싱 유닛은 데이터 어드레스를 참조할 수 있도록 인덱스 값을 데이터 어드레스와 관련시킨다. 도 5에서, 이들 인덱스 값은 갯수들의 하부 라인에서 "데이터 어드레스 키"이다. 이들 키는 일반적으로 연속적이고 또한 7의 값에 도달한 후에 키가 0으로 랩 어라운드(wrap-around)된다는 것을 알 수 있다. 일반적으로, 관련된 데이터 값은 키 직후에 이용될 수 있고, 이에 따라 데이터 키의 순서가 랩 어라운드될 때에, 키는 모순없이 재사용될 수 있다. 그러나, 데이터 전달이 완료하기에 오랜 시간이 걸린다면, 트레이스 키는 릴리스되기 전에 재사용될 수 있다. 이는 대응하는 데이터 값이 비일상적으로 오랜 시간 동안 수신되지 않는 데이터 어드레스 키 번호 1에 의해 도 5에 도시되어 있다. 따라서, 데이터 어드레스 키 1이 도 5의 제2 시간 동안 사용되어야 하는 시간에 의해, 여전히 "인 플라이트(in-flight)"이고 이에 따라 사용되지 않을 수 있다. 대신에, 트레이스 유닛은 연속적인 키 1 대신에 특별한 키(키 A)를 사용하도록 구성된다. 이 실시예에서, 특별한 키는 알파벳이 코어 키와 1 대 1 대응 관계를 갖는 한, 상이한 "알파벳"으로부터 유도될 수 있다. 도 5는 또한 일부 연속적인 키가 프로세서에 의해 명백하게 킬된다면 대응하는 데이터 값을 갖지 않을 수 있다는 것을 설명한다(예컨대 연속적인 키 3의 제1의 경우). 특별한 키가 인 플라이트 상태이면 점검할 필요가 없는데, 그 이유는 코어 키가 얼마나 사용되는지에 관한 코어의 규칙으로 인해 특별한 키가 인 플라이트 동안에 재사용될 수 없기 때문이라는 점을 유념해야 한다(특별한 키는 또한 특유하게 사용되어야 한다).
도 6은 키 추적 테이블의 일 실시예를 개략적으로 도시하고 있는데, 데이터 어드레스 키는 코어 키를 참조한다. 여기서, 코어 키(β)는 연속적인 키(D1, D2, D3)로 귀착되는 3개의 데이터 어드레스를 인덱싱하도록 프로세서 코어에 의해 사용된다. 다음의 데이터 어드레스가 코어 키(β)에 의해 사용되고, 트레이스 유닛은 다음의 연속적인 키, 즉 D4가 여전히 코어 키(α)에 의해 사용 중에 있고 이에 따라 현재의 데이터 어드레스를 위한 인덱스 키로서 코어 키(β) 자체를 사용한다는 것을 확인한다. 트레이스 유닛은 연속적인 인덱스 키(D4)와 관련한 플래그 세트가 여전히 인 플라이트 상태라는 것을 지시하는 관련된 인 플라이트 저장 유닛을 참조함으로써 연속적인 키(D4)가 여전히 인 플라이트 상태라는 것을 확인한다.
인 플라이트 지시기가 코어 키에 의해 저장되는 변경예가 도 7에 도시되어 있다. 이 구조는 연속적인 키(D1, D2 등)가 사용될 때에 전체 결합 룩업(lookup)이 키 추적 테이블에서 수행되는 것을 필요로 한다. 연속적인 키에 대해 일치가 발견되고 대응하는 코어 키 플래그가 설정되면, 연속적인 키가 인 플라이트 상태라고 결정된다.
도 8은 일 실시예에서 트레이스 유닛에 의해 취해진 일련의 단계들을 개략적으로 도시한다. 플로우는 트레이스 유닛이 프로세서 코어로부터 새로운 데이터 어드레스와 관련 코어 키를 수신하는 단계(400)에서 시작한다. 이어서, 단계(410)에서, 트레이스 유닛은 다음의 연속적인 키를 계산하고, 단계(420)에서, 해당 키가 현재 키 추적 테이블에서 "인 플라이트" 상태인지가 결정된다. 아니라면, 플로우는 단계(430)로 진행하고 다음의 연속적인 키가 키 추적 테이블에 추가되고 플로우는 단계(400)로 복귀된다. 그러나, 단계(420)에서, 다음의 연속적인 키가 현재 인 플라이트 상태라고 결정되면, 대신에 특별한 키가 단계(440)에서 키 추적 테이블에 추가되고 단계(450)에서 해당 특별한 키의 값이 트레이스 스트림에서 출력된다. 이어서, 플로우가 단계(400)로 복귀된다. 특별한 키가 다음의 연속적인 키 대신에 사용되면, 단계(410)의 다음의 반복시에 다음의 연속적인 키를 즉시 재시도하지 않는 것이 일반적으로 선호될 수 있는데, 그 이유는 1번의 반복시에 사용 중으로 판명되었다면, 여전히 다음의 반복시에도 사용 중일 것이기 때문이다.
일반적으로, 이용 가능한 연속적인 키가 보다 많으면 연속적인 키가 요구될 가능성이 덜 하다고 인지된다. 임의의 갯수의 연속적인 키가 존재할 수 있지만, N개의 코어 키가 존재하는 경우에 N 내지 3N의 범위가 일반적으로 적절하다. 연속적인 키는 그 값이 트레이스 유닛에 의해 발생된 인덱스 값의 예정된 순서 중 하나인 것으로 예상될 수 있기 때문에 데이터 어드레스에 의해 출력될 필요가 없다는 것을 유념해야 한다. 연속적인 키와 특별한 키는 전체적으로 별개의 프로토콜 인코딩을 사용할 수 있지만, 몇몇 실시예에서는, 오버랩이 존재하지 않는 한 동일한 프로토콜 인코딩이 사용될 수 있다는 점을 또한 유념해야 한다. 예컨대, 0-15의 범위에서, 연속적인 키는 0-11의 값을 취할 수 있고, 특별한 키는 12-15의 값을 취할 수 있다. 트레이스 데이터의 수신자는 물론 어떤 협약이 사용되었는지를 알 필요가 있다. 도 9는 12개의 연속적인 키와 4개의 특별한 키로 분할된 16개 키(0-15)의 프로토콜 공간을 도시하고 있다.
특정한 실시예를 본 명세서에서 설명하였지만, 본 발명은 그것으로 제한되지 않고 본 발명의 범위 내에서 많은 수정 및 추가가 이루어질 수 있다는 것을 알 것이다. 예컨대, 아래의 종속 청구항들의 특징들의 다양한 조합이 본 발명의 범위로부터 벗어남이 없이 독립 청구항들의 특징과 이루어질 수 있다.

Claims (49)

  1. 데이터 처리 유닛의 처리 활동도를 나타내는 트레이스 데이터 항목을 발생시키도록 구성된 트레이스 유닛으로서,
    인덱스 값을 트레이스 유닛에 의해 발생된 트레이스 데이터 항목의 적어도 부분 집합과 관련시키도록 구성된 트레이스 인덱싱 유닛을 포함하고,
    상기 트레이스 인덱싱 유닛은 상기 인덱스 값을 인덱스 값의 예정된 순서 중 하나로서 발생시키도록 구성되며,
    상기 예정된 순서에서 n+1번째 인덱스 값이 상기 예정된 순서에서 오직 n번째 인덱스 값으로부터만 결정될 수 있는 것인 트레이스 유닛.
  2. 제1항에 있어서,
    상기 트레이스 유닛은 카운터를 포함하고, 상기 카운터는 인덱스 값들의 상기 예정된 순서를 제공하도록 구성되는 것인 트레이스 유닛.
  3. 제1항에 있어서,
    상기 트레이스 유닛은 적어도 하나의 상기 인덱스 값을 저장하도록 구성된 인덱스 저장 유닛을 포함하는 것인 트레이스 유닛.
  4. 제1항에 있어서,
    상기 트레이스 유닛은 2개의 인덱스 값들 간의 차이를 저장하도록 구성된 인덱스 저장 유닛을 포함하는 것인 트레이스 유닛.
  5. 제4항에 있어서,
    상기 인덱스 저장 유닛은 FIFO 디바이스인 것인 트레이스 유닛.
  6. 제3항에 있어서,
    상기 데이터 처리 유닛의 처리 활동도는 추론적 명령어 실행을 포함하고, 상기 적어도 하나의 인덱스 값은 적어도 하나의 추론적으로 실행된 명령어와 관련된 것인 트레이스 유닛.
  7. 제6항에 있어서,
    상기 인덱스 저장 유닛은 상기 적어도 하나의 추론적으로 실행된 명령어가 위탁 또는 취소될 때까지 상기 적어도 하나의 인덱스 값을 저장하도록 구성되는 것인 트레이스 유닛.
  8. 제6항에 있어서,
    상기 추론적으로 실행된 명령어는 명령어 그룹의 일부를 형성하고, 상기 명령어 그룹의 제1 명령어의 추론적 실행은 상기 명령어 그룹의 모든 명령어의 추론적 실행을 필요로 하는 것인 트레이스 유닛.
  9. 제8항에 있어서,
    상기 인덱스 저장 유닛은 상기 명령어 그룹에서 제1 명령어와 관련된 제1 인덱스 값을 저장하도록 구성되는 제1 인덱스 저장 유닛을 포함하는 것인 트레이스 유닛.
  10. 제9항에 있어서,
    상기 제1 인덱스 저장 유닛은 복수 개의 제1 입력값을 포함하고, 상기 명령어 그룹을 나타내는 지시기에 따라 상기 제1 인덱스 값을 저장하도록 구성되는 것인 트레이스 유닛.
  11. 제10항에 있어서,
    상기 복수 개의 제1 입력값의 갯수는 적어도 상기 데이터 처리 유닛에 의해 추론적으로 실행될 수 있는 명령어 그룹의 최대 갯수에 대응하는 것인 트레이스 유닛.
  12. 제9항에 있어서,
    상기 트레이스 유닛은 상기 데이터 처리 유닛으로부터 취소 명령어를 수신하도록 구성되고, 상기 취소 명령어는 추론적으로 실행된 선택된 명령어 그룹이 최소되었다는 것을 나타내며, 상기 트레이스 유닛은 상기 선택된 명령어 그룹을 나타내는 트레이스 데이터의 취소 항목을 발생시키도록 구성되는 것인 트레이스 유닛.
  13. 제12항에 있어서,
    상기 트레이스 유닛은 상기 취소 명령어의 수신시에 상기 제1 인덱스 저장 유닛에 저장되고 상기 선택된 명령어 그룹과 관련된 제1 인덱스 값에 따라 트레이스 데이터의 취소 항목을 발생시키도록 구성되는 것인 트레이스 유닛.
  14. 제13항에 있어서,
    상기 트레이스 유닛은 인덱스 값들의 상기 예정된 순서를 제공하도록 구성된 카운터를 포함하고, 상기 트레이스 유닛은 또한 상기 카운터의 현재 카운터 값에 따라 트레이스 데이터의 상기 취소 항목을 발생시키도록 구성되는 것인 트레이스 유닛.
  15. 제8항에 있어서,
    상기 인덱스 저장 유닛은 상기 명령어 그룹의 마지막 명령어와 관련된 마지막 인덱스 값을 저장하도록 구성되는 마지막 인덱스 저장 유닛을 포함하는 것인 트레이스 유닛.
  16. 제15항에 있어서,
    상기 마지막 인덱스 저장 유닛은 복수 개의 제2 입력값을 포함하고, 상기 명령어 그룹을 나타내는 지시기에 따라 상기 마지막 인덱스 값을 저장하도록 구성되는 것인 트레이스 유닛.
  17. 제16항에 있어서,
    상기 복수 개의 제2 입력값의 갯수는 상기 데이터 처리 유닛에 의해 추론적으로 실행될 수 있는 명령어 그룹의 적어도 최대 갯수에 대응하는 것인 트레이스 유닛.
  18. 제15항에 있어서,
    상기 트레이스 유닛은 상기 데이터 처리 유닛으로부터 위탁 명령어를 수신하도록 구성되고, 상기 위탁 명령어는 추론적으로 실행된 선택된 명령어 그룹이 위탁되었다는 것을 나타내고, 상기 트레이스 유닛은 상기 선택된 명령어 그룹을 나타내는 트레이스 데이터의 위탁 항목을 발생시키도록 구성되는 것인 트레이스 유닛.
  19. 제18항에 있어서,
    상기 트레이스 유닛은 상기 위탁 명령어의 수신시에 상기 마지막 인덱스 저장 유닛에 저장되고 상기 선택된 명령어 그룹과 관련된 마지막 인덱스 값에 따라 트레이스 데이터의 상기 위탁 항목을 발생시키도록 구성되는 것인 트레이스 유닛.
  20. 제19항에 있어서,
    상기 트레이스 유닛은 인덱스 값들의 상기 예정된 순서와 위탁되지 않은 저장 유닛을 제공하도록 구성된 카운터를 포함하고, 상기 트레이스 유닛은 상기 트레이스 위탁 항목을 발생시킬 때에 상기 위탁되지 않은 저장 유닛에서 상기 카운터의 현재 카운터 값을 저장하도록 구성되는 것인 트레이스 유닛.
  21. 제20항에 있어서,
    상기 트레이스 유닛은 상기 위탁되지 않은 저장 유닛에 저장된 값에 따라 상기 트레이스 위탁 항목을 발생시키도록 구성되는 것인 트레이스 유닛.
  22. 제8항에 있어서,
    상기 인덱스 저장 유닛은 상기 명령어 그룹의 제1 명령어와 관련된 제1 인덱스 값을 저장하도록 구성되고, 상기 인덱스 저장 유닛은 상기 명령어 그룹의 마지막 명령어와 관련된 마지막 인덱스 값을 저장하도록 구성된 마지막 인덱스 저장 유닛을 포함하며, 상기 마지막 인덱스 값은 상기 제1 인덱스 값에 대해 포맷에 저장되는 것인 트레이스 유닛.
  23. 제22항에 있어서,
    상기 제1 인덱스 값에 대한 포맷은 2 비트 데이터 포맷인 것인 트레이스 유닛.
  24. 제18항에 있어서,
    상기 트레이스 유닛은 추론 깊이 카운터를 포함하고, 상기 추론 깊이 카운터는 상기 데이터 처리 유닛에 의해 실행되는 명령의 현재의 추론 깊이를 지시하도록 구성되는 것인 트레이스 유닛.
  25. 제24항에 있어서,
    상기 트레이스 유닛은 미결정(pending) 위탁 카운터를 포함하고, 상기 미결정 위탁 카운터는 미결정 출력되는 트레이스 데이터의 위탁 항목의 현재 갯수를 지시하도록 구성되는 것인 트레이스 유닛.
  26. 제25항에 있어서,
    상기 트레이스 유닛은 상기 위탁 명령어가 상기 트레이스 데이터의 위탁 항목이 발생되는 일 없이 수신될 때에 상기 미결정 위탁 카운터를 증분시키도록 구성되는 것인 트레이스 유닛.
  27. 제25항에 있어서,
    상기 트레이스 유닛은 상기 추론 깊이 카운터가 예정된 값에 도달할 때에 상기 미결정 위탁 카운터를 감분시키도록 구성되는 것인 트레이스 유닛.
  28. 제24항에 있어서,
    상기 추론 깊이 카운터는 예정된 값에 도달하고, 트레이스 데이터의 추가 항목의 발생은 상기 트레이스 유닛이 상기 데이터 처리 유닛으로부터 추가의 위탁 명령어를 수신했다는 것을 의미하는 것인 트레이스 유닛.
  29. 제1항에 있어서,
    상기 트레이스 유닛은 예정된 이벤트에 응답하여 상기 값들의 예정된 순서의 인덱스 값을 예정된 값으로 리셋시키도록 구성되는 것인 트레이스 유닛.
  30. 제1항에 있어서,
    상기 트레이스 유닛은 값들의 순환 순서로서 상기 값들의 예정된 순서를 발생시키도록 구성되는 것인 트레이스 유닛.
  31. 제1항에 있어서,
    상기 트레이스 유닛은 상기 데이터 처리 유닛이 응답하는 적어도 하나의 타입의 명령어에 대해 트레이스 데이터의 항목을 발생시키지 않도록 구성되는 것인 트레이스 유닛.
  32. 제3항에 있어서,
    상기 인덱스 저장 유닛은 인 플라이트 지시기를 선택적으로 저장하도록 구성되고, 상기 인 플라이트 지시기는 상기 인덱스 값들의 예정된 순서의 저장된 인덱스 값이 현재 사용 중이라는 것을 지시하는 것인 트레이스 유닛.
  33. 제32항에 있어서,
    상기 트레이스 유닛은 다음의 인덱스 값을 발생시킬 때에 상기 인 플라이트 지시기를 참조하고, 상기 인 플라이트 지시기가 상기 다음의 인덱스 값이 여전히 사용 중이라고 지시하면, 상기 다음의 인덱스 값 대신에 대체 인덱스 값을 저장하도록 구성되는 것인 트레이스 유닛.
  34. 제1항에 있어서,
    상기 데이터 처리 유닛의 처리 활동도는 데이터 어드레스를 이용하여 저장된 데이터 값에 대한 참조를 포함하고, 상기 인덱스 값은 상기 적어도 하나의 데이터 어드레스와 관련된 데이터 어드레스 인덱스 값인 것인 트레이스 유닛.
  35. 제34항에 있어서,
    상기 저장된 데이터 값에 대한 참조는 상기 저장된 데이터 값을 로딩하는 것을 포함하는 것인 트레이스 유닛.
  36. 제34항에 있어서,
    상기 저장된 데이터 값에 대한 참조는 상기 저장된 데이터 값을 저장하는 것을 포함하는 것인 트레이스 유닛.
  37. 제34항에 있어서,
    상기 트레이스 유닛은 데이터 어드레스 인덱스 값 저장 테이블에 상기 데이터 어드레스 인덱스 값을 저장하도록 구성되는 것인 트레이스 유닛.
  38. 제37항에 있어서,
    상기 트레이스 유닛은 인 플라이트 지시기를 선택적으로 저장하도록 구성되고, 상기 인 플라이트 지시기는 상기 데이터 어드레스 인덱스 값과 관련된 상기 저장된 데이터 값에 대한 참조가 아직 완료되지 않았고 상기 데이터 어드레스 인덱스 값이 인 플라이트 상태라는 것을 지시하는 것인 트레이스 유닛.
  39. 제38항에 있어서,
    상기 트레이스 유닛은 다음의 데이터 어드레스 인덱스 값을 발생시킬 때에 저장된 인 플라이트 지시기를 참조하고, 상기 저장된 인 플라이트 지시기가 상기 다음의 데이터 어드레스 인덱스 값이 여전히 인 플라이트 상태라고 지시하면, 상기 다음의 데이터 어드레스 인덱스 값 대신에 대체 데이터 어드레스 인덱스 값을 저장하도록 구성되는 것인 트레이스 유닛.
  40. 제39항에 있어서,
    상기 대체 데이터 어드레스 인덱스 값은 데이터 처리 유닛 인덱스 값을 포함하고, 상기 데이터 처리 유닛 인덱스 값은 상기 데이터 어드레스를 참조하도록 상기 데이터 처리 유닛에 의해 사용되는 것인 트레이스 유닛.
  41. 제39항에 있어서,
    상기 대체 데이터 어드레스 인덱스 값은 데이터 처리 유닛 인덱스 값과 1 대 1 대응 관계를 갖고, 상기 데이터 처리 유닛 인덱스 값은 상기 데이터 어드레스를 참조하도록 상기 데이터 처리 유닛에 의해 사용되는 것인 트레이스 유닛.
  42. 제40항에 있어서,
    상기 인 플라이트 지시기는 상기 데이터 어드레스 인덱스 값과 관련하여 저장되는 것인 트레이스 유닛.
  43. 제40항에 있어서,
    상기 인 플라이트 지시기는 상기 데이터 처리 유닛 인덱스 값과 관련하여 저장되는 것인 트레이스 유닛.
  44. 제39항에 있어서,
    상기 트레이스 유닛은 상기 대체 데이터 어드레스 인덱스 값을 나타내는 트레이스 데이터 항목을 발생시키도록 구성되는 것인 트레이스 유닛.
  45. 제39항에 있어서,
    상기 대체 데이터 어드레스 인덱스 값과 상기 데이터 어드레스 인덱스 값은 인코딩 프로토콜을 공유하는 것인 트레이스 유닛.
  46. 제8항에 있어서,
    상기 트레이스 유닛은 초기 명령어 그룹 및 후속 명령어 그룹에 관한 상기 데이터 처리 유닛으로부터의 병합 명령어를 수신하도록 구성되고, 상기 데이터 처리 유닛은 상기 초기 명령어 그룹이 실행되면 상기 후속 명령어 그룹이 실행되고, 이에 따라 상기 초기 명령어 그룹 및 상기 후속 명령어 그룹이 병합된 명령어 그룹이라고 결정되면 상기 병합 명령어를 출력하고, 상기 트레이스 유닛은 상기 병합 명령어에 따라 상기 병합된 명령어 그룹과 관련된 상기 인덱스 저장 유닛의 적어도 하나의 병합된 인덱스 값을 보정하도록 구성되는 것인 트레이스 유닛.
  47. 제46항에 있어서,
    상기 트레이스 유닛은 트레이스 데이터의 병합 항목을 발생시키도록 구성되고, 상기 트레이스 데이터의 병합 항목은 상기 초기 명령어 그룹 및 상기 후속 명령어 그룹이 병합되었다는 것을 지시하는 것인 트레이스 유닛.
  48. 데이터 처리 유닛의 처리 활동도를 나타내는 트레이스 데이터 항목을 발생시키도록 구성된 트레이스 유닛으로서,
    인덱스 값을 트레이스 유닛에 의해 발생된 트레이스 데이터 항목의 적어도 부분 집합과 관련시키는 트레이스 인덱싱 유닛을 포함하고,
    상기 트레이스 인덱싱 유닛은 상기 인덱스 값을 인덱스 값의 예정된 순서 중 하나로서 발생시키도록 구성되며,
    상기 예정된 순서에서 n+1번째 인덱스 값이 상기 예정된 순서에서 오직 n번째 인덱스 값으로부터만 결정될 수 있는 것인 트레이스 유닛.
  49. 데이터 처리 유닛의 처리 활동도를 나타내는 트레이스 데이터 항목을 발생시키는 방법으로서,
    상기 트레이스 데이터 항목을 발생시키는 단계;
    인덱스 값을 발생된 트레이스 데이터 항목의 적어도 부분 집합과 관련시키는 단계;
    상기 인덱스 값을 인덱스 값의 예정된 순서 중 하나로서 발생시키는 단계를 포함하고,
    상기 예정된 순서에서 n+1번째 인덱스 값이 상기 예정된 순서에서 오직 n번째 인덱스 값으로부터만 결정될 수 있는 것인 트레이스 데이터 항목을 발생시키는 방법.
KR1020137000011A 2010-06-21 2011-05-24 추론적 명령 실행 및 비순차 데이터 전달을 지원하는 데이터 처리 유닛의 활동도를 트레이스하는 시스템 및 방법 KR101708170B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1010350.5A GB2481384B (en) 2010-06-21 2010-06-21 Key allocation when tracing data processing systems
GB1010350.5 2010-06-21
PCT/GB2011/050979 WO2011161429A2 (en) 2010-06-21 2011-05-24 Key allocation when tracing data processing systems

Publications (2)

Publication Number Publication Date
KR20130123355A true KR20130123355A (ko) 2013-11-12
KR101708170B1 KR101708170B1 (ko) 2017-02-20

Family

ID=42582702

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020137000011A KR101708170B1 (ko) 2010-06-21 2011-05-24 추론적 명령 실행 및 비순차 데이터 전달을 지원하는 데이터 처리 유닛의 활동도를 트레이스하는 시스템 및 방법

Country Status (10)

Country Link
US (1) US8707106B2 (ko)
EP (1) EP2583179B1 (ko)
JP (1) JP5512041B2 (ko)
KR (1) KR101708170B1 (ko)
CN (1) CN102947804B (ko)
GB (1) GB2481384B (ko)
IL (1) IL222736A (ko)
MY (1) MY156921A (ko)
TW (1) TWI517035B (ko)
WO (1) WO2011161429A2 (ko)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8713204B2 (en) * 2011-12-27 2014-04-29 Apple Inc. High-performance AHCI interface
US9183147B2 (en) * 2012-08-20 2015-11-10 Apple Inc. Programmable resources to track multiple buses
US9626119B2 (en) * 2014-11-14 2017-04-18 Intel Corporation Using counters and a table to protect data in a storage device
US10061583B2 (en) * 2014-12-24 2018-08-28 Intel Corporation Systems, apparatuses, and methods for data speculation execution
US9934127B1 (en) 2017-03-08 2018-04-03 Microsoft Technology Licensing, Llc Indexing a trace by insertion of key frames for replay responsiveness
US10185645B2 (en) 2017-03-08 2019-01-22 Microsoft Technology Licensing, Llc Resource lifetime analysis using a time-travel trace
US9934126B1 (en) * 2017-03-08 2018-04-03 Microsoft Technology Licensing, Llc Indexing a trace by insertion of reverse lookup data structures
US10282274B2 (en) 2017-06-14 2019-05-07 Microsoft Technology Licensing, Llc Presenting differences between code entity invocations
GB2570466B (en) * 2018-01-25 2020-03-04 Advanced Risc Mach Ltd Commit window move element
US11061807B2 (en) * 2018-12-28 2021-07-13 Intel Corporation Trace management during aborted speculative operations
CN112579169B (zh) * 2019-09-27 2024-04-09 阿里巴巴集团控股有限公司 处理器追踪流的生成方法及装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002244881A (ja) * 2001-02-01 2002-08-30 Arm Ltd 順序外データのトレーシング
US6681321B1 (en) * 2000-04-20 2004-01-20 International Business Machines Corporation Method system and apparatus for instruction execution tracing with out of order processors
US20060259822A1 (en) * 2005-05-16 2006-11-16 Texas Instruments Incorporated Profiling system
JP2008305402A (ja) * 2007-06-05 2008-12-18 Internatl Business Mach Corp <Ibm> 代表的なトレースを得るための命令を識別する方法、コンピュータ・プログラム及びシステム

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4905204A (en) * 1988-09-06 1990-02-27 Exxon Production Research Company Method of weighting a trace stack from a plurality of input traces
JPH06282468A (ja) * 1993-03-30 1994-10-07 Toshiba Corp 情報処理装置
US5724566A (en) * 1994-01-11 1998-03-03 Texas Instruments Incorporated Pipelined data processing including interrupts
JP2001147837A (ja) * 1999-11-18 2001-05-29 Fujitsu Ltd プログラムトレース装置及び記憶媒体
GB2367650B (en) * 2000-10-04 2004-10-27 Advanced Risc Mach Ltd Single instruction multiple data processing
US7168066B1 (en) * 2001-04-30 2007-01-23 Mips Technologies, Inc. Tracing out-of order load data
US7225434B2 (en) * 2003-09-25 2007-05-29 Intel Corporation Method to collect address trace of instructions executed
US7194731B1 (en) * 2003-11-14 2007-03-20 Sun Microsystems, Inc. Method and apparatus for speculative tracing
US7219207B2 (en) * 2003-12-03 2007-05-15 Intel Corporation Reconfigurable trace cache
US7987393B2 (en) * 2005-05-16 2011-07-26 Texas Instruments Incorporated Determining operating context of an executed instruction
US7802149B2 (en) * 2005-05-16 2010-09-21 Texas Intruments Incorporated Navigating trace data
US7886271B2 (en) * 2005-05-16 2011-02-08 Texas Instruments Incorporated Embedding event information in the timing stream
US7707394B2 (en) 2006-05-30 2010-04-27 Arm Limited Reducing the size of a data stream produced during instruction tracing
US7757068B2 (en) * 2007-01-16 2010-07-13 Oracle America, Inc. Method and apparatus for measuring performance during speculative execution
EP2156301B1 (en) * 2007-04-18 2011-11-30 Mediatek Inc. Method and apparatus for data address tracing

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6681321B1 (en) * 2000-04-20 2004-01-20 International Business Machines Corporation Method system and apparatus for instruction execution tracing with out of order processors
JP2002244881A (ja) * 2001-02-01 2002-08-30 Arm Ltd 順序外データのトレーシング
US20060259822A1 (en) * 2005-05-16 2006-11-16 Texas Instruments Incorporated Profiling system
JP2008305402A (ja) * 2007-06-05 2008-12-18 Internatl Business Mach Corp <Ibm> 代表的なトレースを得るための命令を識別する方法、コンピュータ・プログラム及びシステム

Also Published As

Publication number Publication date
US8707106B2 (en) 2014-04-22
TW201203109A (en) 2012-01-16
IL222736A0 (en) 2012-12-31
GB2481384B (en) 2018-10-10
IL222736A (en) 2015-10-29
WO2011161429A2 (en) 2011-12-29
GB2481384A (en) 2011-12-28
WO2011161429A3 (en) 2012-02-16
JP2013533546A (ja) 2013-08-22
KR101708170B1 (ko) 2017-02-20
GB201010350D0 (en) 2010-08-04
CN102947804B (zh) 2016-02-10
JP5512041B2 (ja) 2014-06-04
MY156921A (en) 2016-04-15
CN102947804A (zh) 2013-02-27
EP2583179B1 (en) 2017-03-22
TWI517035B (zh) 2016-01-11
US20110314264A1 (en) 2011-12-22
EP2583179A2 (en) 2013-04-24

Similar Documents

Publication Publication Date Title
KR20130123355A (ko) 추론적 명령 실행 및 비순차 데이터 전달을 지원하는 데이터 처리 유닛의 활동도를 트레이스하는 시스템 및 방법
US9639361B2 (en) Tracing speculatively executed instructions
CA1306063C (en) High performance vlsi filter
EP2254046A1 (en) A method and system for managing the order of messages
EP0352935A2 (en) Pipelined processor
US10282265B2 (en) Verifying a graph-based coherency verification tool
US9495169B2 (en) Predicate trace compression
EP3765963B1 (en) Tracing branch instructions
JPH03286332A (ja) デジタルデータ処理装置
JP2011253253A (ja) コンピュータ試験方法、コンピュータ試験装置およびコンピュータ試験プログラム
US11016951B1 (en) Microbatch loading
US10956303B2 (en) Trace data representation
US6832334B2 (en) Computer register watch
CN107003855B (zh) 带进位的原子加法指令
US20010025237A1 (en) Computer system with debug facility
JP4996945B2 (ja) データ処理装置、データ処理方法
US6789185B1 (en) Instruction control apparatus and method using micro program
DE10028064B4 (de) Computersystem mit ROM-Korrektureinheiten
US10691511B2 (en) Counting events from multiple sources
CN111124625B (zh) 任务队列的处理方法和装置以及存储介质
Richardson The Fred VHDL Model
JP5678687B2 (ja) 処理装置

Legal Events

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