KR20210107174A - 동기 하드웨어 이벤트 수집 - Google Patents

동기 하드웨어 이벤트 수집 Download PDF

Info

Publication number
KR20210107174A
KR20210107174A KR1020217026813A KR20217026813A KR20210107174A KR 20210107174 A KR20210107174 A KR 20210107174A KR 1020217026813 A KR1020217026813 A KR 1020217026813A KR 20217026813 A KR20217026813 A KR 20217026813A KR 20210107174 A KR20210107174 A KR 20210107174A
Authority
KR
South Korea
Prior art keywords
tracking
data
event
processor
program code
Prior art date
Application number
KR1020217026813A
Other languages
English (en)
Other versions
KR102493495B1 (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 구글 엘엘씨
Priority to KR1020237002919A priority Critical patent/KR102584961B1/ko
Publication of KR20210107174A publication Critical patent/KR20210107174A/ko
Application granted granted Critical
Publication of KR102493495B1 publication Critical patent/KR102493495B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/302Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3065Monitoring arrangements determined by the means or processing involved in reporting the monitored data
    • G06F11/3072Monitoring arrangements determined by the means or processing involved in reporting the monitored data where the reporting involves data filtering, e.g. pattern matching, time or event triggered, adaptive or policy-based reporting
    • 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
    • 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/348Circuit details, i.e. tracer hardware
    • 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/3495Performance evaluation by tracing or monitoring for systems
    • 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
    • G06F11/3612Software analysis for verifying properties of programs by runtime analysis
    • 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/3644Software debugging by instrumenting at runtime
    • 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/542Event management; Broadcasting; Multicasting; Notifications
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/86Event-based monitoring
    • 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

Abstract

제1 프로세서 구성요소 및 제2 프로세서 구성요소에 의한 프로그램 코드의 실행을 모니터링하는 단계를 포함하는 컴퓨터-구현 방법이 제공된다. 컴퓨팅 시스템은 i) 프로그램 코드의 일부분에서 피연산자를 식별하거나; 또는 ⅱ) 컴퓨팅 시스템의 클록의 현재 시간이 미리 정의된 시간 값을 표시한다고 결정함으로써, 트리거 조건이 충족됨을 검출한다. 피연산자 및 미리 정의된 시간 값은 추적 이벤트들을 개시하기 위해 사용된다. 트리거 조건이 충족될 때, 시스템은 추적 데이터를 생성하는 추적 이벤트들을 개시하고, 이러한 추적 데이터는 컴퓨팅 시스템에 걸쳐 발생하는 개개의 하드웨어 이벤트들을 식별한다. 시스템은 추적 데이터의 상관된 세트를 생성하기 위해 추적 데이터를 사용한다. 상관된 추적 데이터는 개개의 하드웨어 이벤트들의 시간순 시퀀스를 표시한다. 시스템은 실행되는 프로그램 코드의 성능을 분석하기 위해 추적 데이터의 상관된 세트를 사용한다.

Description

동기 하드웨어 이벤트 수집{SYNCHRONOUS HARDWARE EVENT COLLECTION}
[0001] 본 명세서는 프로그램 코드의 실행을 분석하는 것에 관한 것이다.
[0002] 분산 하드웨어 구성요소들 내에서 실행되는 분산 소프트웨어의 효과적인 성능 분석은 복잡한 태스크일 수 있다. 분산 하드웨어 구성요소들은, 더 큰 소프트웨어 프로그램 또는 프로그램 코드의 일부분들을 실행하기 위해 협력 및 상호작용하는 둘 이상의 중앙 프로세싱 유닛(CPU; Central Processing Unit)들(또는 그래픽 프로세싱 유닛(GPU; Graphics Processing Unit)들)의 개개의 프로세서 코어들일 수 있다.
[0003] 일반적으로, (예컨대, CPU들 또는 GPU들 내의) 하드웨어 관점으로부터, 성능 분석에 이용가능한 두 유형들의 정보 또는 특징들: 1) 하드웨어 성능 카운터들 및 2) 하드웨어 이벤트 추적들이 있다.
[0004] 일반적으로, 본 명세서에 설명된 발명의 요지의 하나의 혁신적인 양상은 하나 이상의 프로세서들에 의해 실행되는 컴퓨터-구현 방법으로 구현될 수 있으며, 방법은, 제1 프로세서 구성요소에 의한 프로그램 코드의 실행을 모니터링하는 단계 ―제1 프로세서 구성요소는 프로그램 코드의 적어도 제1 부분을 실행하도록 구성됨―; 및 제2 프로세서 구성요소에 의한 프로그램 코드의 실행을 모니터링하는 단계를 포함하며, 제2 프로세서 구성요소는 프로그램 코드의 적어도 제2 부분을 실행하도록 구성된다.
[0005] 방법은, 컴퓨팅 시스템이, i) 적어도, 프로그램 코드의 제1 부분 또는 프로그램 코드의 제2 부분에서 피연산자의 발생을 식별하는 것 ―피연산자는 하나 이상의 추적 이벤트들을 개시하기 위해 사용되는 제1 파라미터 값을 포함함―, 또는 ⅱ) 컴퓨팅 시스템의 적어도 하나의 클록의 현재 시간이, 하나 이상의 추적 이벤트들을 개시하기 위해 사용되는 미리 정의된 시간 값을 표시한다고 결정하는 것 중 적어도 하나에 기초하여, 트리거 조건이 충족됨을 검출하는 단계를 더 포함한다.
[0006] 트리거 조건이 충족됨을 검출하는 단계에 응답하여, 방법은, 컴퓨팅 시스템이, 적어도, 추적 데이터를 생성하는 제1 추적 이벤트를 개시하는 단계를 포함하며, 추적 데이터는, 적어도 제1 프로세서 구성요소 및 제2 프로세서 구성요소를 포함하는 분산 프로세서 유닛들에 걸쳐 발생하는 개개의 하드웨어 이벤트들을 식별한다. 개개의 하드웨어 이벤트들 각각에 대해, 추적 데이터는 적어도 하드웨어 이벤트 타임 스탬프를 포함한다. 방법은, 컴퓨팅 시스템이, 적어도, 트리거 조건이 충족될 때 생성된 개개의 하드웨어 이벤트들의 시간순 시퀀스를 표시하는, 추적 데이터의 상관된 세트를 생성하기 위해, 추적 데이터를 사용하는 단계를 더 포함한다.
[0007] 이러한 그리고 다른 구현들 각각은 선택적으로, 다음의 특징들 중 하나 이상을 포함할 수 있다. 예컨대, 일부 구현들에서, 제1 추적 이벤트는 분산 프로세서 유닛들에 걸쳐 발생하는 하드웨어 이벤트들을 식별하는 추적 데이터를 생성하는 동기화된 추적 이벤트이고, 추적 데이터는 개개의 하드웨어 이벤트들에 대한 고유 추적 식별자를 또한 식별하고, 하드웨어 이벤트들은 복수의 동기화된 하드웨어 이벤트들을 포함하며, 그리고 2 개의 하드웨어 이벤트들은 이벤트들이 글로벌 하드웨어 이벤트 타임 스탬프를 공유할 때 동기화된다.
[0008] 일부 구현들에서, 트리거 조건이 충족됨을 검출하는 단계는, 컴퓨팅 시스템이, i) 피연산자의 제1 파라미터 값이 레지스터의 제1 경계 값을 초과하는 것, 또는 ⅱ) 현재 시간에 의해 표시된, 미리 정의된 시간 값이 레지스터의 제1 경계 값을 초과하는 것 중 하나를 검출하는 단계; 및 트리거 조건이 충족됨을 검출하는 단계에 응답하여, 컴퓨팅 시스템이, 추적 데이터를 생성하는 제2 추적 이벤트를 개시하는 단계를 포함하며, 추적 데이터는 분산 프로세서 유닛들에 걸쳐 발생하는 개개의 하드웨어 이벤트들 사이에서 공유되는 적어도 하나의 속성을 식별한다.
[0009] 일부 구현들에서, 방법은, 컴퓨팅 시스템이, 피연산자의 제2 파라미터 값이 레지스터의 제2 경계 값을 초과하는 것, 또는 현재 시간에 의해 표시된, 미리 정의된 제2 시간 값이 레지스터의 제2 경계 값을 초과하는 것 중 하나를 검출하는 단계; 및 검출하는 단계에 응답하여, 컴퓨팅 시스템이, 피연산자의 제2 파라미터 값이 제2 경계 값을 초과할 때 또는 미리 정의된 제2 시간 값이 제2 경계 값을 초과할 때, 제2 추적 이벤트를 정지하는 단계를 더 포함한다.
[0010] 일부 구현들에서, 피연산자는, 프로그램 코드의 특정 시퀀스 단계를 표시하는 파라미터; 또는 분산 프로세서 유닛들의 특정 성능 상태를 표시하는 글로벌 제어 파라미터 중 적어도 하나를 더 포함하며; 그리고 미리 정의된 시간 값은, 분산 프로세서 유닛들의 글로벌 시간 클록에 의해 표시된 특정 시간 값; 또는 글로벌 시간 클록과 연관된, 미리 정의된 시간 윈도우의 특정 시간 값 중 적어도 하나를 포함한다.
[0011] 일부 구현들에서, 피연산자는 제1 바이너리 데이터 구조를 갖고, 제1 피연산자의 제1 파라미터 값은 추적-마크에 대응하며, 미리 정의된 시간 값은 제2 바이너리 데이터 구조를 갖고, 현재 시간은 글로벌 시간 클록에 의해 표시되며, 그리고 글로벌 시간 클록은 하나 이상의 하드웨어 이벤트 타임 스탬프들을 생성하기 위해 분산 프로세서 유닛들에 의해 사용된다.
[0012] 일부 구현들에서, 방법은, 컴퓨팅 시스템의 컴파일러가, 트리거 조건의 피연산자를, 제1 프로세서 구성요소에 의해 실행되는 프로그램 코드의 적어도 제1 부분에 삽입하는 단계; 및 컴퓨팅 시스템의 컴파일러가, 트리거 조건의 적어도 하나의 미리 정의된 시간 값을, 제2 프로세서 구성요소에 의해 실행되는 프로그램 코드의 적어도 제2 부분에 삽입하는 단계를 더 포함한다.
[0013] 일부 구현들에서, 제1 추적 이벤트 또는 제2 추적 이벤트 중 적어도 하나를 개시하는 단계는, 컴퓨팅 시스템이, 제1 프로세서 코어의 제1 카운트 레지스터에 의해 수신되는 제1 제어 신호를 생성하는 단계; 및 컴퓨팅 시스템이, 제2 프로세서 코어의 제2 카운트 레지스터에 의해 수신되는 제2 제어 신호를 생성하는 단계를 포함하며, 제1 제어 신호는 제1 하드웨어 이벤트와 연관된 데이터가 제1 카운트 레지스터에 저장되게 하고, 제2 제어 신호는 제2 하드웨어 이벤트와 연관된 데이터가 제2 카운트 레지스터에 저장되게 한다.
[0014] 일부 구현들에서, 제1 하드웨어 이벤트 또는 제2 하드웨어 이벤트 중 하나와 연관된 데이터는, 분산 프로세서 유닛들의 특정 프로세서 코어의 특정 메모리 버퍼에 기록된 바이트 수; 또는 분산 프로세서 유닛들의 특정 프로세서 코어에 의해 실행된 명령들의 수 중 적어도 하나를 포함한다.
[0015] 일부 구현들에서, 방법은, 컴퓨팅 시스템이, 제1 프로세서 구성요소 또는 제2 프로세서 구성요소에 의해 실행되는 프로그램 코드의 적어도 일부분에서 제2 피연산자의 발생을 식별하는 단계 ―제2 피연산자는 제2 파라미터 값을 포함함―; 컴퓨팅 시스템이, 제2 피연산자의 제2 파라미터 값에 기초하여 필터 조건이 충족된다고 결정하는 단계 ―필터 조건이 충족된다는 것은, 레지스터의 특정 경계 값을 초과하는 것 또는 레지스터의 특정 경계 값 미만인 것 중 하나임―; 및 필터 조건이 충족된다고 결정하는 단계에 응답하여, 컴퓨팅 시스템이, 하나 이상의 추적 이벤트들을 필터링하는 단계를 더 포함하며, 하나 이상의 추적 이벤트들을 필터링하는 단계는 하나 이상의 하드웨어 이벤트들과 연관된 추적 데이터의 저장을 배제하는 단계를 포함한다.
[0016] 본 명세서에 설명된 발명의 요지의 다른 혁신적인 양상은 하드웨어 이벤트 수집 시스템으로 구현될 수 있으며, 하드웨어 이벤트 수집 시스템은, 하나 이상의 프로세서 코어들을 포함하는 하나 이상의 프로세서들; 및 동작들을 수행하기 위해 하나 이상의 프로세서들에 의해 실행가능한 명령들을 저장하기 위한 하나 이상의 기계-판독 가능 저장 유닛들을 포함하며, 동작들은, 제1 프로세서 구성요소에 의한 프로그램 코드의 실행을 모니터링하는 동작 ―제1 프로세서 구성요소는 프로그램 코드의 적어도 제1 부분을 실행하도록 구성됨―; 및 제2 프로세서 구성요소에 의한 프로그램 코드의 실행을 모니터링하는 동작을 포함하며, 제2 프로세서 구성요소는 프로그램 코드의 적어도 제2 부분을 실행하도록 구성된다.
[0017] 방법은, 컴퓨팅 시스템이, i) 적어도, 프로그램 코드의 제1 부분 또는 프로그램 코드의 제2 부분에서 피연산자의 발생을 식별하는 것 ―피연산자는 하나 이상의 추적 이벤트들을 개시하기 위해 사용되는 제1 파라미터 값을 포함함―, 또는 ⅱ) 컴퓨팅 시스템의 적어도 하나의 클록의 현재 시간이, 하나 이상의 추적 이벤트들을 개시하기 위해 사용되는 미리 정의된 시간 값을 표시한다고 결정하는 것 중 적어도 하나에 기초하여, 트리거 조건이 충족됨을 검출하는 단계를 더 포함한다.
[0018] 트리거 조건이 충족됨을 검출하는 단계에 응답하여, 방법은, 컴퓨팅 시스템이, 적어도, 추적 데이터를 생성하는 제1 추적 이벤트를 개시하는 단계를 포함하며, 추적 데이터는, 적어도 제1 프로세서 구성요소 및 제2 프로세서 구성요소를 포함하는 분산 프로세서 유닛들에 걸쳐 발생하는 개개의 하드웨어 이벤트들을 식별한다. 개개의 하드웨어 이벤트들 각각에 대해, 추적 데이터는 적어도 하드웨어 이벤트 타임 스탬프를 포함한다. 방법은, 컴퓨팅 시스템이, 적어도, 트리거 조건이 충족될 때 생성된 개개의 하드웨어 이벤트들의 시간순 시퀀스를 표시하는, 추적 데이터의 상관된 세트를 생성하기 위해, 추적 데이터를 사용하는 단계를 더 포함한다.
[0019] 일반적으로, 본 명세서에 설명된 발명의 요지의 하나의 혁신적인 양상은 하나 이상의 프로세서들에 의해 실행되는 컴퓨터-구현 방법으로 구현될 수 있으며, 방법은, 프로세서 구성요소에 의한 프로그램 코드의 실행을 모니터링하는 단계를 포함하며, 프로세서 구성요소는 프로그램 코드의 적어도 제1 부분을 실행하도록 구성된다.
[0020] 방법은, 컴퓨팅 시스템이, i) 적어도, 프로그램 코드의 제1 부분에서 피연산자의 발생을 식별하는 것 ―피연산자는 하나 이상의 추적 이벤트들을 개시하기 위해 사용되는 제1 파라미터 값을 포함함―, 또는 ⅱ) 컴퓨팅 시스템의 적어도 하나의 클록의 현재 시간이, 하나 이상의 추적 이벤트들을 개시하기 위해 사용되는 미리 정의된 시간 값을 표시한다고 결정하는 것 중 적어도 하나에 기초하여, 트리거 조건이 충족됨을 검출하는 단계를 더 포함한다.
[0021] 트리거 조건이 충족됨을 검출하는 단계에 응답하여, 방법은, 컴퓨팅 시스템이, 프로세서 구성요소의 카운트 레지스터에 의해 수신되는 제어 신호를 생성하는 단계; 및 컴퓨팅 시스템이, 실행되는 프로그램 코드와 연관된 하나 이상의 성능 속성들을 표시하는 데이터 구조를 생성하는 단계를 더 포함하며, 제어 신호는, 하드웨어 이벤트와 연관된 카운트 데이터가 카운트 레지스터에 저장되게 하고, 데이터 구조는 저장된 카운트 데이터의 하나 이상의 카운트 파라미터들에 기초하여 생성된다.
[0022] 이러한 그리고 다른 구현들 각각은 선택적으로, 다음의 특징들 중 하나 이상을 포함할 수 있다. 예컨대, 일부 구현들에서, 카운트 레지스터는 컴퓨팅 시스템의 하나 이상의 프로세서 구성요소들의 성능에 관한 카운트 데이터를 저장하도록 구성된 다수의 성능 카운터들 중 하나이며, 적어도 하나의 성능 카운터는 활동 카운터, 스톨(stall) 카운터, 통계 카운터 또는 샘플링 카운터 중 하나를 포함한다.
[0023] 일부 구현들에서, 하나 이상의 카운트 파라미터들은: i) 특정 프로세서 구성요소에 의해 수신된 명령들의 수; ⅱ) 특정 프로세서 구성요소에 의해 프로세싱된 명령들의 수; ⅲ) 특정 프로세서 구성요소에 의해 실행된 명령들의 수; 또는 ⅳ) 특정 프로세서 구성요소에 의해 수행된, 메모리 판독(read)들의 수 또는 메모리 기록(write)들의 수 중 하나를 표시한다.
[0024] 일부 구현들에서, 실행되는 프로그램 코드와 연관된 성능 속성은, i) 프로그램 코드를 실행하는 특정 프로세서 구성요소의 스톨 빈도; ⅱ) 특정 프로세서 구성요소의 활용(utilization)이 임계 활용 미만이라는 표시; 또는 ⅲ) 특정 프로세서 구성요소에 의해 사용되는 데이터 저장 큐가 큐 점유 임계치 이하라는 표시 중 하나를 포함한다.
[0025] 이러한 그리고 다른 양상들의 다른 구현들은 대응하는 시스템들, 장치, 및 컴퓨터 저장 디바이스들 상에 인코딩된, 방법들의 동작들을 수행하도록 구성된 컴퓨터 프로그램들을 포함한다. 따라서, 하나 이상의 컴퓨터들의 시스템이, 동작 중에 시스템이 액션들을 수행하게 하는, 시스템 상에 설치된 소프트웨어, 펌웨어, 하드웨어 또는 이들의 조합에 의해 구성될 수 있다. 따라서, 하나 이상의 컴퓨터 프로그램들이, 데이터 프로세싱 장치에 의해 실행될 때 장치로 하여금 액션들을 수행하게 하는 명령들을 갖는 것에 의해 구성될 수 있다.
[0026] 본 명세서에 설명된 발명의 요지는, 다음의 장점들 중 하나 이상을 실현하기 위하여 특정 실시예들로 구현될 수 있다. 설명된 하드웨어 추적 시스템은 하드웨어 노브(knob)들/특징들을 통해 실행되는 동적 트리거들을 사용함으로써 계산 효율성을 향상시킨다. 트리거들은, 순수하게, 통상적으로 시스템 자원들이 이벤트 캡처를 모니터링 및 실행할 것을 요구하는 코딩된 시퀀스들을 통해서가 아니라, 글로벌 시간 카운터, 임베디드 논리 피연산자들 및 하드웨어 레지스터들에 부분적으로 기초하여 이벤트들의 동기화된 캡처를 가능하게 한다.
[0027] 마찬가지로, 상관되지 않은 비효율적인 이벤트 캡처들로서 대신에, 동시에 발생하는 동기화된 글로벌 캡처들 및 짧은 지속기간 이벤트들을 캡처하도록 하드웨어 트리거들이 튜닝될 때, 시스템 메모리 사용이 최적화된다. 더 짧은 지속기간의 동기화된 이벤트 캡처를 위한 제어들이 정보 과부하를 완화시켜서, 일부 메모리 자원들이 다른 시스템 프로세스들을 위해 미사용 상태로 그리고 이용가능한 상태로 유지되는 것을 가능하게 한다.
[0028] 본 명세서에 설명된 발명의 요지의 하나 이상의 구현들의 세부사항들은 아래의 설명 및 첨부된 도면들에서 제시된다. 발명의 요지의 다른 잠재적인 특징들, 양상들 및 장점들은 상세한 설명, 도면들 및 청구항들로부터 자명해질 것이다.
[0029] 도 1은 분산 하드웨어 추적을 위한 예시적인 컴퓨팅 시스템의 블록 다이어그램을 예시한다.
[0030] 도 2는 분산 하드웨어 추적을 위한 예시적인 컴퓨팅 시스템의 추적 체인들 및 개개의 노드들의 블록 다이어그램을 예시한다.
[0031] 도 3은 예시적인 추적 먹스(mux) 설계 아키텍처 및 예시적인 데이터 구조의 블록 다이어그램을 예시한다.
[0032] 도 4는 분산 하드웨어 추적을 위한 예시적인 컴퓨팅 시스템에 의해 실행되는 직접 메모리 액세스 추적 이벤트에 대한 추적 활동을 표시하는 블록 다이어그램이다.
[0033] 도 5는 글로벌 시간 카운터(GTC; global time counter)에 대한 예시적인 데이터 구조, 및 분산 하드웨어 추적을 위한 예시적인 컴퓨팅 시스템에 의한 GTC의 사용 시나리오들을 표시하는 표들을 예시한다.
[0034] 도 6은 분산 하드웨어 추적을 위한 예시적인 컴퓨팅 시스템의 구성요소들과 연관된, 예시적인 시간 카운터들 및 하드웨어 특징들의 블록 다이어그램을 예시한다.
[0035] 도 7은 분산 하드웨어 추적을 위한 예시적인 프로세스의 프로세스 흐름 다이어그램이다.
[0036] 다양한 도면들에서 유사한 참조 번호들 및 표기들은 유사한 엘리먼트들을 표시한다.
[0037] 본 명세서에 설명된 발명의 요지는 일반적으로, 분산 하드웨어 추적에 관한 것이다. 특히, 컴퓨팅 시스템은 제1 프로세서 코어에 의해 실행되는 프로그램 코드의 실행 및 제2 프로세서 코어에 의해 실행되는 프로그램 코드의 실행을 모니터링한다. 컴퓨팅 시스템은 하드웨어 이벤트들의 타임라인을 메모리 버퍼에 저장한다. 저장된 이벤트들은, 적어도 제1 프로세서 코어 및 제2 프로세서 코어를 포함하는 분산 프로세서 유닛들에 걸쳐 발생한다.
[0038] 타임라인은, 하드웨어 이벤트들 각각에 대해, 이벤트 타임 스탬프, 및 하드웨어 이벤트를 특성화하는 메타데이터를 포함한다. 시스템은 타임라인으로부터, 하드웨어 이벤트들을 포함하는 데이터 구조를 생성한다. 시스템은 호스트 디바이스의 메모리 뱅크에 데이터 구조를 저장하고, 제1 프로세서 코어 또는 제2 프로세서 코어에 의해 실행되는 프로그램 코드의 성능을 평가하기 위해 데이터 구조를 사용한다. 이벤트 추적의 이러한 맥락 내에서, 본 명세서는 도 1-도 4에 도시된, 분산 컴퓨팅 시스템에서의 하드웨어 이벤트 추적을 위한 접근법들을 설명한다.
[0039] 본 명세서는 추가로, 도 5-도 7에 도시된, 하나 이상의 트리거 메커니즘들에 기초한 동기화된 하드웨어 이벤트 수집을 위한 접근법들을 설명한다. 아래에서 더욱 상세히 논의될 바와 같이, 본 명세서에 설명된 컴퓨팅 시스템들의 양상들은 적어도 추적 데이터 및 이벤트 카운팅의 조정된/동기 수집에 관한 것이다. 특히, 적어도 하나의 양상은, 분산 시스템 뿐만 아니라 독립형 시스템 내에서의 하드웨어 성능 카운터 데이터 및 추적 이벤트 데이터의 동기화된 수집을 위한 시스템들 및 방법들을 포함한다. 동기화된 이벤트 수집은, 분산 프로그램 코드의 디버깅 데이터와 성능 데이터 둘 모두의 분석을 향상시킨다. 개선된 분석은, 시스템(100)에 의해 분석되는 연결된 소프트웨어 구성요소들/모듈들의 실행에 대한 응답으로 발생하는 이벤트들의 상관을 통해 부분적으로 달성된다.
[0040] 도 1은 분산 하드웨어 추적을 위한 예시적인 컴퓨팅 시스템(100)의 블록 다이어그램을 예시한다. 본 명세서에서 사용된 바와 같이, 분산 하드웨어 시스템 추적은, 예시적인 프로세서 마이크로-칩의 구성요소들 및 하위-구성요소들 내에서 발생하는 이벤트들의 저장에 대응한다. 추가로, 본원에서 사용된 바와 같이, 분산 하드웨어 시스템(또는 추적 시스템)은 프로세서 마이크로-칩들의 집합에 대응하며, 프로세서 마이크로-칩들은, 프로세서 마이크로-칩들의 집합 사이에서의 분산 실행을 위해 구성된 소프트웨어/프로그램 코드의 개개의 부분들을 실행하기 위해 협력한다. 일부 구현들에서, 시스템(100)의 상이한 프로세서 칩들은 분산 하드웨어 시스템의 개개의 노드들을 형성할 수 있다. 대안적인 구현들에서, 단일 프로세서 칩이, 각각이 프로세서 칩의 개개의 노드들을 형성할 수 있는 하나 이상의 프로세서 코어들 및 하드웨어 특징들을 포함할 수 있다.
[0041] 예컨대, 중앙 프로세싱 유닛(CPU; central processing unit)의 맥락에서, 프로세서 칩은 적어도 2 개의 노드들을 포함할 수 있고, 각각의 노드는 CPU의 개개의 코어일 수 있다. 대안적으로, 그래픽 프로세서 유닛(GPU; graphical processor unit)의 맥락에서, 프로세서 칩은 적어도 2 개의 노드들을 포함할 수 있고, 각각의 노드는 GPU의 개개의 스트리밍 멀티프로세서일 수 있다. 컴퓨팅 시스템(100)은 다수의 프로세서 구성요소들을 포함할 수 있다. 일부 구현들에서, 프로세서 구성요소들은 전체 컴퓨팅 시스템(100)의 프로세서 칩, 프로세서 코어, 메모리 액세스 엔진, 또는 적어도 하나의 하드웨어 구성요소 중 적어도 하나일 수 있다.
[0042] 일부 사례들에서, 프로세서 구성요소, 이를테면 프로세서 코어는, 실행되는 프로그램 코드의 적어도 하나의 발행된 명령에 기초하여 적어도 하나의 특정 동작을 실행하도록 구성된 고정-기능 구성요소일 수 있다. 다른 사례들에서, 프로세서 구성요소, 이를테면 메모리 액세스 엔진(MAE; memory access engine)은, 시스템(100)의 다른 프로세서 구성요소들에 의해 실행되는 프로그램 코드보다 더 낮은 세부 또는 입도(granularity) 레벨로 프로그램 코드를 실행하도록 구성될 수 있다.
[0043] 예컨대, 프로세서 코어에 의해 실행되는 프로그램 코드는 MAE 디스크립터(descriptor)가 생성되어 MAE에 송신/전송되게 할 수 있다. 디스크립터의 수신 후에, MAE는 MAE 디스크립터에 기초하여 데이터 전송 동작을 실행할 수 있다. 일부 구현들에서, MAE에 의해 실행되는 데이터 전송들은 예컨대, 시스템의 소정의 데이터 경로들 또는 인터페이스 구성요소들을 통해 시스템(100)의 소정의 구성요소들로 그리고 이들로부터 데이터를 이동시키는 것, 또는 시스템(100)의 예시적인 구성 버스 상에 데이터 요청들을 발행하는 것을 포함할 수 있다.
[0044] 일부 구현들에서, 시스템(100)의 예시적인 프로세서 칩의 각각의 텐서(tensor) 노드는, 프로그램 명령들을 프로세싱하는 하드웨어 블록들/특징들일 수 있는 적어도 두 개의 "프론트-엔드(front-end)들"을 가질 수 있다. 아래에서 더욱 상세히 논의된 바와 같이, 제1 프론트-엔드가 제1 프로세서 코어(104)에 대응할 수 있는 한편, 제2 프론트-엔드는 제2 프로세서 코어(106)에 대응할 수 있다. 따라서, 제1 프로세서 코어 및 제2 프로세서 코어는 또한, 본원에서 제1 프론트-엔드(104) 및 제2 프론트-엔드(106)로서 설명될 수 있다.
[0045] 본 명세서에서 사용된 바와 같이, 추적 체인은, 시스템(100) 내의 예시적인 칩 관리자로의 송신을 위해 추적 엔트리들이 놓일 수 있는 특정 물리적 데이터 통신 버스일 수 있다. 수신된 추적 엔트리들은 다수의 바이트들 및 다수의 바이너리 값들 또는 디짓(digit)들을 포함하는 데이터 워드들/구조들일 수 있다. 따라서, 디스크립터 "워드"는, 예시적인 프로세서 코어의 하드웨어 디바이스들에 의해 유닛으로서 핸들링될 수 있는 바이너리 데이터의 고정-크기의 조각을 표시한다.
[0046] 일부 구현들에서, 분산 하드웨어 추적 시스템의 프로세서 칩들은, 각각이 칩의 개개의 코어들에서 프로그램 코드의 일부분들을 실행하는 멀티-코어 프로세서들(즉, 다수의 코어들을 가짐)이다. 일부 구현들에서, 프로그램 코드의 일부분들은, 예시적인 다층 신경망의 추론 작업부하들에 대한 벡터화된 계산들에 대응할 수 있다. 한편, 대안적인 구현들에서, 프로그램 코드의 일부분들은 일반적으로, 종래의 프로그래밍 언어들과 연관된 소프트웨어 모듈들에 대응할 수 있다.
[0047] 컴퓨팅 시스템(100)은 일반적으로, 노드 관리자(102), 제1 프로세서 코어(FPC; first processor core)(104), 제2 프로세서 코어(SPC; second processor core)(106), 노드 패브릭(NF; node fabric)(110), 데이터 라우터(112) 및 호스트 인터페이스 블록(HIB; host interface block)(114)을 포함한다. 일부 구현들에서, 시스템(100)은 신호 스위칭, 멀티플렉싱 및 디-멀티플렉싱 기능들을 수행하도록 구성되는 메모리 먹스(108)를 포함할 수 있다. 시스템(100)은, 내부에 배치된 FPC(104)를 포함하는 텐서 코어(116)를 더 포함한다. 텐서 코어(116)는, 다-차원 데이터 어레이들에 대한 벡터화된 계산들을 수행하도록 구성된 예시적인 계산 디바이스일 수 있다. 텐서 코어(116)는, 행렬 유닛(MXU; matrix unit)(120), 전치(transpose) 유닛(XU)(122), 그리고 감소 및 치환 유닛(RPU; reduction and permutation unit)(124)과 상호작용하는 벡터 프로세싱 유닛(VPU; vector processing unit)(118)을 포함할 수 있다. 일부 구현들에서, 컴퓨팅 시스템(100)은 종래의 CPU 또는 GPU의 하나 이상의 실행 유닛들, 이를테면 로딩(load)/저장 유닛들, 산술 논리 유닛(ALU; arithmetic logic unit)들 및 벡터 유닛들을 포함할 수 있다.
[0048] 시스템(100)의 구성요소들은 집합적으로, 구성요소들 내에서의 추적 활동의 완료를 용이하게 하는 하드웨어를 지원할 뿐만 아니라 하드웨어 성능 카운터들의 큰 세트를 포함한다. 아래에서 더욱 상세히 설명된 바와 같이, 시스템(100)의 개개의 프로세서 코어들에 의해 실행되는 프로그램 코드는, 코드 실행 동안 다수의 성능 카운터들을 동시에 인에이블(enable)하기 위해 사용되는 임베디드 트리거들을 포함할 수 있다. 일반적으로, 검출된 트리거들은 하나 이상의 추적 이벤트들에 대해 추적 데이터가 생성되게 한다. 추적 데이터는, 카운터들에 저장되며 그리고 프로그램 코드의 성능 특성들을 알아차리기 위해 분석될 수 있는 증분 파라미터 카운트들에 대응할 수 있다. 개개의 추적 이벤트들에 대한 데이터는, 예시적인 저장 매체(예컨대, 하드웨어 버퍼)에 저장될 수 있으며, 그리고 트리거의 검출에 응답하여 생성되는 타임스탬프를 포함할 수 있다.
[0049] 추가로, 추적 데이터는, 시스템(100)의 하드웨어 구성요소들 내에서 발생하는 다양한 이벤트들에 대해 생성될 수 있다. 예시적인 이벤트들은 노드 간(inter-node) 및 크로스-노드(cross-node) 통신 동작들, 이를테면 직접 메모리 액세스(DMA; direct memory access) 동작들 및 싱크(sync) 플래그 업데이트들(각각은 아래에서 더욱 상세히 설명됨)을 포함할 수 있다. 일부 구현들에서, 시스템(100)은, 일반적으로 글로벌 시간 카운터("GTC(Global Time Counter)")로 지칭되는 글로벌 동기 타임스탬프 카운터를 포함할 수 있다. 다른 구현들에서, 시스템(100)은 다른 유형들의 글로벌 클록들, 이를테면 램포트 클록(Lamport Clock)을 포함할 수 있다.
[0050] GTC는 프로그램 코드 실행과, 분산 프로세싱 환경에서 실행되는 소프트웨어/프로그램 코드의 성능의 정밀한 상관을 위해 사용될 수 있다. 부가적으로, 그리고 부분적으로 GTC와 관련하여, 일부 구현들에서, 시스템(100)은, 고도로 조정된 방식으로 분산 시스템에서 데이터 추적을 시작 및 정지하기 위해 분산 소프트웨어 프로그램들에 의해 사용되는 하나 이상의 트리거 메커니즘들을 포함할 수 있다.
[0051] 일부 구현들에서, 호스트 시스템(126)은, 검출 시, 하드웨어 이벤트들과 연관된 추적 데이터의 캡처 및 저장을 유발하도록 트리거하는 임베디드 피연산자들을 포함할 수 있는 프로그램 코드를 컴파일링한다. 일부 구현들에서, 호스트 시스템(126)은 컴파일링된 프로그램 코드를 시스템(100)의 하나 이상의 프로세서 칩들에 제공한다. 대안적인 구현들에서, 프로그램 코드는 예시적인 외부 컴파일러에 의해 (임베디드 트리거들과 함께) 컴파일링될 수 있고, 시스템(100)의 하나 이상의 프로세서 칩들에 로딩될 수 있다. 일부 사례들에서, 컴파일러는, 소프트웨어 명령들의 일부분들에 임베딩되는 소정의 트리거들과 연관된 하나 이상의 추적 비트들(아래에서 논의됨)을 세팅할 수 있다. 컴파일링된 프로그램 코드는, 시스템(100)의 하나 이상의 구성요소들에 의해 실행되는 분산 소프트웨어 프로그램일 수 있다.
[0052] 호스트 시스템(126)은 시스템(100)의 하나 이상의 구성요소들에 의한 프로그램 코드의 실행을 모니터링하도록 구성된 모니터링 엔진(128)을 포함할 수 있다. 일부 구현들에서, 모니터링 엔진(128)은 호스트 시스템(126)이 적어도 FPC(104) 및 SPC(106)에 의해 실행되는 프로그램 코드의 실행을 모니터링하는 것을 가능하게 한다. 예컨대, 코드 실행 동안, 호스트 시스템(126)은 적어도, 생성된 추적 데이터에 기초하여 하드웨어 이벤트들의 주기적인 타임라인들을 수신함으로써, 실행되는 코드의 성능을 모니터링 엔진(128)을 통해 모니터링할 수 있다. 호스트 시스템(126)에 대해 단일 블록이 도시되지만, 일부 구현들에서, 시스템(126)은 시스템(100)의 다수의 프로세서 칩들 또는 칩 코어들과 연관되는 다수의 호스트들(또는 호스트 서브시스템들)을 포함할 수 있다.
[0053] 다른 구현들에서, 적어도 3 개의 프로세서 코어들을 수반하는 크로스-노드 통신들은, 데이터 트래픽이 FPC(104)와 예시적인 제3 프로세서 코어/노드 사이의 통신 경로를 가로지름에 따라, 호스트 시스템(126)이 하나 이상의 중간 "홉(hop)들"에서의 데이터 트래픽을 모니터링하게 할 수 있다. 예컨대, FPC(104) 및 제3 프로세서 코어는 주어진 시간 기간에 프로그램 코드를 실행하는 유일한 코어들일 수 있다. 따라서, FPC(104)로부터 제3 프로세서 코어로의 데이터 전송은, 데이터가 FPC(104)로부터 제3 프로세서 코어로 전송됨에 따라, SPC(106)에서 중간 홉에 대한 추적 데이터를 생성할 수 있다. 달리 말하면, 시스템(100)에서의 데이터 라우팅 동안, 제3 프로세서 칩으로 가는, 제1 프로세서 칩으로부터의 데이터는 제2 프로세서 칩을 가로지를 필요가 있을 수 있으며, 따라서 데이터 라우팅 동작의 실행은 라우팅 활동에 대한 추적 엔트리들이 제2 칩에 생성되게 할 수 있다.
[0054] 컴파일링된 프로그램 코드의 실행 시, 시스템(100)의 구성요소들은 분산 컴퓨터 시스템에서 발생하는 하드웨어 이벤트들의 타임라인들을 생성하기 위해 상호작용할 수 있다. 하드웨어 이벤트들은 노드 내(intra-node) 및 크로스-노드 통신 이벤트들을 포함할 수 있다. 분산 하드웨어 시스템의 예시적인 노드들 및 그들의 연관된 통신들은 도 2를 참조하여 아래에서 더욱 상세히 설명된다. 일부 구현들에서, 적어도 하나의 하드웨어 이벤트 타임라인에 대한 하드웨어 이벤트들의 집합을 식별하는 데이터 구조가 생성된다. 타임라인은 분산 시스템에서 발생하는 이벤트들의 재구성을 가능하게 한다. 일부 구현들에서, 이벤트 재구성은 특정 이벤트의 발생 동안 생성된 타임 스탬프들의 분석에 기초한 정확한 이벤트 순서화를 포함할 수 있다.
[0055] 일반적으로, 예시적인 분산 하드웨어 추적 시스템은 시스템(100)의 위에서 설명된 구성요소들 뿐만 아니라, 호스트 시스템(126)과 연관된 적어도 하나의 호스트 제어기를 포함할 수 있다. 분산 추적 시스템으로부터 획득된 데이터의 성능 또는 디버깅은, 이벤트 데이터가 예컨대 시간순으로 또는 시퀀싱된 방식으로 상관될 때 유용할 수 있다. 일부 구현들에서, 연결된 소프트웨어 모듈들에 대응하는 다수의 저장된 하드웨어 이벤트들이 저장되고, 그런 다음, 호스트 시스템(126)에 의한 구조화된 분석을 위해 시퀀싱될 때, 데이터 상관이 발생할 수 있다. 다수의 호스트 시스템들을 포함하는 구현들의 경우, 상이한 호스트들을 통해 획득된 데이터의 상관은 예컨대 호스트 제어기에 의해 수행될 수 있다.
[0056] 일부 구현들에서, FPC(104) 및 SPC(106) 각각이 멀티-코어 프로세서 칩의 별개의 코어들인 한편, 다른 구현들에서, FPC 및 SPC(104, 106)는 별개의 멀티-코어 프로세서 칩들의 개개의 코어들이다. 위에서 표시된 바와 같이, 시스템(100)은, 적어도 FPC(104) 및 SPC(106)를 갖는 분산 프로세서 유닛들을 포함할 수 있다. 일부 구현들에서, 시스템(100)의 분산 프로세서 유닛들은, 더 큰 분산 소프트웨어 프로그램 또는 프로그램 코드의 적어도 일부를 실행하도록 구성된 하나 이상의 하드웨어 또는 소프트웨어 구성요소들을 포함할 수 있다.
[0057] 데이터 라우터(112)는 시스템(100)의 구성요소들 사이의 데이터 통신 경로들을 제공하는 칩 간 인터커넥트(ICI; inter-chip interconnect)이다. 특히, 라우터(112)는 FPC(104)와 SPC(106) 사이의, 그리고 코어들(104, 106)과 연관된 개개의 구성요소들 사이의 통신 커플링 또는 연결들을 제공할 수 있다. 노드 패브릭(110)은, 시스템(100)의 분산 하드웨어 구성요소들 및 하위-구성요소들 내에서 데이터 패킷들을 이동시키기 위해 데이터 라우터(112)와 상호작용한다.
[0058] 노드 관리자(102)는, 멀티-노드 프로세서 칩들에서 로우-레벨 노드 기능들을 관리하는 하이-레벨 디바이스이다. 아래에서 더욱 상세히 논의된 바와 같이, 프로세서 칩의 하나 이상의 노드들은, 하드웨어 이벤트 데이터를 관리하고 로컬 엔트리 로그들에 저장하기 위해 노드 관리자(102)에 의해 제어되는 칩 관리자들을 포함할 수 있다. 메모리 먹스(108)는, 예시적인 외부 고대역폭 메모리(HBM; high bandwidth memory)에 제공된 데이터 신호들 또는 외부 HBM으로부터 수신된 데이터 신호들에 대한 스위칭, 멀티플렉싱 및 디-멀티플렉싱 동작들을 수행할 수 있는 멀티플렉싱 디바이스이다.
[0059] 일부 구현들에서, 먹스(108)가 FPC(104)와 SPC(106) 사이에서 스위칭될 때, 먹스(108)에 의해, 예시적인 추적 엔트리(아래에서 설명됨)가 생성될 수 있다. 메모리 먹스(108)는, 먹스(108)에 액세스할 수 없는 특정 프로세서 코어(104, 106)의 성능에 잠재적으로 영향을 끼칠 수 있다. 따라서, 먹스(108)에 의해 생성된 추적 엔트리 데이터는, 개개의 코어들(104, 106)과 연관된 소정의 시스템 활동들의 레이턴시들에서의 결과적인 스파이크들을 이해하는 것을 보조할 수 있다. 일부 구현들에서, 먹스(108) 내에서 발신되는 하드웨어 이벤트 데이터(예컨대, 아래에서 논의된 추적 지점들)는, 노드 패브릭(110)에 대한 이벤트 데이터와 함께, 예시적인 하드웨어 이벤트 타임라인에서 그룹핑될 수 있다. 소정의 추적 활동이, 다수의 하드웨어 구성요소들에 대한 이벤트 데이터가 예시적인 하드웨어 버퍼(예컨대, 아래에서 논의된 추적 엔트리 로그(218))에 저장되게 할 때, 이벤트 그룹핑이 발생할 수 있다.
[0060] 시스템(100)에서, 성능 분석 하드웨어는 FPC(104), SPC(106), 먹스(108), 노드 패브릭(110), 데이터 라우터(112) 및 HIB(114)를 포함한다. 이러한 하드웨어 구성요소들 또는 유닛들 각각은 하드웨어 성능 카운터들 뿐만 아니라, 하드웨어 이벤트 추적 설비들 및 기능들을 포함한다. 일부 구현들에서, VPU(118), MXU(120), XU(122) 및 RPU(124)는 자신만의 전용 성능 하드웨어를 포함하지 않는다. 그보다는, 이러한 구현들에서, FPC(104)는 VPU(118), MXU(120), XU(122) 및 RPU(124)에 대해 필요한 카운터들을 제공하도록 구성될 수 있다.
[0061] VPU(118)는, 예시적인 행렬-벡터 프로세서의 벡터 엘리먼트들과 연관된, 로컬화된 고대역폭 데이터 프로세싱 및 산술 연산들을 지원하는 내부 설계 아키텍처를 포함할 수 있다. 먹스(120)는, 예컨대 피승수들의 벡터 데이터 세트들에 대해 최대 128x128 행렬 곱셈들을 수행하도록 구성된 행렬 곱셈 유닛이다.
[0062] XU(122)는, 예컨대 행렬 곱셈 연산들과 연관된 벡터 데이터에 대해 최대 128x128 행렬 전치 연산들을 수행하도록 구성된 전치 유닛이다. RPU(124)는 시그마(sigma) 유닛 및 치환(permute) 유닛을 포함할 수 있다. 시그마 유닛은 행렬 곱셈 연산들과 연관된 벡터 데이터에 대해 순차적인 감소들을 실행한다. 감소들은 합계들 및 다양한 유형들의 비교 연산들을 포함할 수 있다. 치환 유닛은 행렬 곱셈 연산들과 연관된 벡터 데이터의 모든 엘리먼트들을 완전히 치환하거나 또는 복제할 수 있다.
[0063] 일부 구현들에서, 시스템(100)의 구성요소들에 의해 실행되는 프로그램 코드는 기계 학습, 신경망 추론 계산들 및/또는 하나 이상의 직접 메모리 액세스 기능들을 나타낼 수 있다. 시스템(100)의 구성요소들은, 시스템의 프로세싱 유닛(들) 또는 디바이스(들)로 하여금 하나 이상의 기능들을 실행하게 하는 명령들을 포함하는 하나 이상의 소프트웨어 프로그램들을 실행하도록 구성될 수 있다. "구성요소"라는 용어는, 임의의 데이터 프로세싱 디바이스 또는 저장 디바이스, 이를테면 제어 상태 레지스터들 또는 데이터를 프로세싱 및 저장할 수 있는 임의의 다른 디바이스를 포함하는 것으로 의도된다.
[0064] 시스템(100)은 일반적으로, 하나 이상의 프로세서들(예컨대, 마이크로프로세서들 또는 중앙 프로세싱 유닛(CPU; central processing unit)들), 그래픽 프로세싱 유닛(GPU; graphics processing unit)들, 주문형 집적 회로(ASIC; application specific integrated circuit)들 또는 상이한 프로세서들의 조합을 포함할 수 있는 다수의 프로세싱 유닛들 또는 디바이스들을 포함할 수 있다. 대안적인 실시예들에서, 시스템(100)은 각각, 본 명세서에 설명된 하드웨어 추적 기능들과 관련된 계산들을 수행하기 위한 부가적인 프로세싱 옵션들을 제공하는 다른 컴퓨팅 자원들/디바이스들(예컨대, 클라우드-기반 서버들)을 포함할 수 있다.
[0065] 프로세싱 유닛들 또는 디바이스들은 하나 이상의 메모리 유닛들 또는 메모리 뱅크들(예컨대, 레지스터들/카운터들)을 더 포함할 수 있다. 일부 구현들에서, 프로세싱 유닛들은 본 명세서에 설명된 하나 이상의 기능들을 수행하기 위해 시스템(100)의 디바이스들에 대해 메모리에 저장된 프로그램된 명령들을 실행한다. 메모리 유닛들/뱅크들은 하나 이상의 비-일시적 기계-판독가능 저장 매체들을 포함할 수 있다. 비-일시적 기계-판독가능 저장 매체는 고체-상태 메모리, 자기 디스크, 및 광학 디스크, 랜덤 액세스 메모리(RAM; random access memory), 판독-전용 메모리(ROM; read-only memory), 삭제가능 프로그램가능 판독-전용 메모리(예컨대, EPROM, EEPROM 또는 플래시 메모리), 또는 정보를 저장할 수 있는 임의의 다른 유형의 매체를 포함할 수 있다.
[0066] 도 2는 시스템(100)에 의해 실행되는 분산 하드웨어 추적에 사용되는 예시적인 추적 체인들 및 개개의 예시적인 노드들(200, 201)의 블록 다이어그램을 예시한다. 일부 구현들에서, 시스템(100)의 노드들(200, 201)은 단일 멀티-코어 프로세서 내의 상이한 노드들일 수 있다. 다른 구현들에서, 노드(200)는 제1 멀티-코어 프로세서 칩의 제1 노드일 수 있고, 노드(201)는 제2 멀티-코어 프로세서 칩의 제2 노드일 수 있다.
[0067] 도 2의 구현에서 2 개의 노드들이 묘사되지만, 대안적인 구현들에서, 시스템(100)은 다수의 노드들을 포함할 수 있다. 다수의 노드들을 수반하는 구현들의 경우, 크로스-노드 데이터 전송들은, 다수의 노드들을 가로지르는 예시적인 데이터 경로를 따라 중간 홉들에서 추적 데이터를 생성할 수 있다. 예컨대, 중간 홉들은 특정 데이터 전송 경로의 별개의 노드들을 통과하는 데이터 전송들에 대응할 수 있다. 일부 사례들에서, 하나 이상의 노드들을 통과하는 크로스-노드 데이터 전송들 동안 발생하는 하나 이상의 중간 홉들에 대해 ICI 추적/하드웨어 이벤트들과 연관된 추적 데이터가 생성될 수 있다.
[0068] 일부 구현들에서, 노드 0 및 노드 1은, 추론 작업부하들에 대한, 프로그램 코드의 일부분들과 연관된 벡터화된 계산들에 사용되는 텐서 노드들이다. 본 명세서에서 사용된 바와 같이, 텐서는 다-차원 기하학적 객체이고, 예시적인 다-차원 기하학적 객체들은 행렬들 및 데이터 어레이들을 포함한다.
[0069] 도 2의 구현에 도시된 바와 같이, 노드(200)는 시스템(100)의 구성요소들의 적어도 서브세트와 상호작용하는 추적 체인(203)을 포함한다. 마찬가지로, 노드(201)는 시스템(100)의 구성요소들의 적어도 서브세트와 상호작용하는 추적 체인(205)을 포함한다. 일부 구현들에서, 노드들(200, 201)이 구성요소들의 동일한 서브세트의 예시적인 노드들인 한편, 다른 구현들에서, 노드들(200, 201)은 별개의 구성요소 서브세트들의 개개의 노드들이다. 데이터 라우터/ICI(112)는, 칩 관리자(216)에 추적 데이터를 제공하기 위해 일반적으로 추적 체인들(203 및 205)로 수렴하는 추적 체인(207)을 포함한다.
[0070] 도 2의 구현에서, 노드들(200, 201) 각각은, 적어도 FPC(104), SPC(106), 노드 패브릭(110) 및 HIB(114)를 갖는 개개의 구성요소 서브세트들을 포함할 수 있다. 노드들(200, 201)의 각각의 구성요소는, 노드의 특정 구성요소에 의해 생성된 추적 지점들(아래에서 설명됨)을 그룹핑하도록 구성된 하나 이상의 추적 먹스들을 포함한다. FPC(104)는 추적 먹스(204)를 포함하고, 노드 패브릭(110)은 추적 먹스들(210a/b)을 포함하고, SPC(106)는 추적 먹스들(206a/b/c/d)을 포함하고, HIB(214)는 추적 먹스(214)를 포함하며, 그리고 ICI(212)는 추적 먹스(212)를 포함한다. 일부 구현들에서, 각각의 추적 먹스에 대한 추적 제어 레지스터가 개별적인 추적 지점들이 인에이블 및 디스에이블될 수 있게 한다. 일부 사례들에서, 하나 이상의 추적 먹스들에 대해, 그들의 대응하는 추적 제어 레지스터들은, 개별적인 인에이블 비트들 뿐만 아니라 더 넓은 추적 먹스 제어들을 포함할 수 있다.
[0071] 일반적으로, 추적 제어 레지스터들은 추적 명령 데이터를 수신 및 저장하는 종래의 제어 상태 레지스터(CSR; control status register)들일 수 있다. 더 넓은 추적 먹스 제어들에 관하여, 일부 구현들에서, 시스템(100)에 의해 실행되는 CSR 기록들에 기초하여 추적이 인에이블 및 디스에이블될 수 있다. 일부 구현들에서, 글로벌 시간 카운터(GTC; global time counter)의 값에 기초하여, FPC(104)(또는 코어(116))의 예시적인 추적-마크 레지스터의 값에 기초하여, 또는 SPC(106)의 예시적인 추적-마크 레지스터의 값에 기초하여, 추적은 시스템(100)에 의해 동적으로 시작 및 정지될 수 있다.
[0072] 추적 활동을 동적으로 시작 및 정지할 뿐만 아니라 동기화된 하드웨어 이벤트 수집을 위한 시스템들 및 방법들에 관한 부가적인 세부사항들 및 설명들은 도 5-도 7의 구현들을 참조하여 더욱 상세히 설명된다.
[0073] 일부 구현들에서, 코어(116)의 경우, FPC(104)는 코어(116) 내에서 발생하는 이벤트 활동과 연관된 추적 윈도우를 정의하기 위해 추적 제어 파라미터를 사용할 수 있다. 추적 제어 파라미터는 추적 윈도우가 GTC에 대한 하한 및 상한 뿐만 아니라 추적-마크 레지스터에 대한 하한 및 상한 측면에서 정의될 수 있게 한다.
[0074] 일부 구현들에서, 시스템(100)은 생성되는 추적 엔트리들, 이를테면 추적 이벤트 필터링 특징들의 수의 감소를 인에이블하는 기능들을 포함할 수 있다. 예컨대, FPC(104) 및 SPC(106) 각각은, 각각의 코어가 예시적인 생성된 추적 디스크립터(아래에서 설명됨)에 추적 비트를 세팅하는 레이트를 제한하는 필터링 특징들을 포함할 수 있다. HIB(114)는, 소정의 DMA 추적 이벤트들의 캡처와 연관된 추적 비트들을 제한하는 예시적인 DMA 레이트 제한기와 같은 유사한 필터링 특징들을 포함할 수 있다. 부가적으로, HIB(114)는, 어느 큐들이 DMA 추적 엔트리들을 소싱하는지를 제한하기 위한 제어들(예컨대, 인에이블 비트를 통함)을 포함할 수 있다.
[0075] 일부 구현들에서, DMA 동작에 대한 디스크립터는 호스트 시스템(126)의 예시적인 컴파일러에 의해 세팅되는 추적 비트를 가질 수 있다. 추적 비트가 세팅될 때, 추적 데이터를 결정 및 생성하는 하드웨어 특징들/노브들이, 예시적인 추적 이벤트를 완료하기 위해 사용된다. 일부 사례들에서, DMA에서의 최종 추적 비트는, 컴파일러에 의해 정적으로 삽입되는 추적 비트와, 특정 하드웨어 구성요소에 의해 동적으로 결정되는 추적 비트 사이의 논리적 OR 연산일 수 있다. 따라서, 일부 사례들에서, 필터링과는 별도로, 컴파일러 생성 추적 비트는, 생성되는 추적 데이터의 전체 양을 감소시키기 위한 메커니즘을 제공할 수 있다.
[0076] 예컨대, 호스트 시스템(126)의 컴파일러는, 하나 이상의 원격 DMA 동작들(예컨대, 적어도 2 개의 노드들에 걸친 DMA)에 대한 추적 비트들만을 세팅하고, 하나 이상의 로컬 DMA 동작들(예컨대, 특정 텐서 노드, 이를테면 노드(200) 내에서의 DMA)에 대한 추적 비트들을 클리어(clear)하기로 결정할 수 있다. 이러한 방식으로, 크로스-노드(즉, 원격) DMA 동작 및 로컬 DMA 동작 둘 모두를 포함하는 추적 활동이 아니라, 추적 활동이 크로스-노드 DMA 동작들로 제한되는 것에 기초하여, 생성되는 추적 데이터의 양은 감소될 수 있다.
[0077] 일부 구현들에서, 시스템(100)에 의해 개시되는 적어도 하나의 추적 이벤트는 시스템(100)에 걸쳐 발생하는 다수의 중간 동작들을 포함하는 메모리 액세스 동작과 연관될 수 있다. 메모리 액세스 동작에 대한 디스크립터(예컨대, MAE 디스크립터)는, 다수의 중간 동작들과 연관된 데이터가 하나 이상의 메모리 버퍼들에 저장되게 하는 추적 비트를 포함할 수 있다. 따라서, 추적 비트는, 중간 메모리 동작들을 "태그"하고 그리고 데이터 패킷들이 시스템(100)을 가로지름에 따라 DMA 동작의 중간 홉들에 다수의 추적 이벤트들을 생성하기 위해 사용될 수 있다.
[0078] 일부 구현들에서, ICI(112)는, 노드(200, 201)의 특정 구성요소의 각각의 입구 및 출구 포트에 대한 제어 기능성을 제공하는 패킷 필터들의 세트 및 인에이블 비트들의 세트를 포함할 수 있다. 이러한 인에이블 비트들 및 패킷 필터들은, ICI(112)가 노드들(200, 201)의 특정 구성요소들과 연관된 추적 지점들을 인에이블 및 디스에이블할 수 있게 한다. 추적 지점들을 인에이블 및 디스에이블하는 것에 부가하여, ICI(112)는 이벤트 소스, 이벤트 목적지 및 추적 이벤트 패킷 유형에 기초하여 추적 데이터를 필터링하도록 구성될 수 있다.
[0079] 일부 구현들에서, GTC 또는 추적 마커들을 사용하는 것에 부가하여, 프로세서 코어들(104, 106) 및 HIB(114)에 대한 각각의 추적 제어 레지스터는 또한, "모두(everyone)" 추적 모드를 포함할 수 있다. 이 "모두" 추적 모드는 전체 프로세서 칩에 걸친 추적이 추적 먹스(204) 또는 추적 먹스(206a)에 의해 제어되는 것을 가능하게 할 수 있다. 모두 추적 모드에 있는 동안, 추적 먹스들(204 및 206a)은, 특정 추적 먹스(먹스(204) 또는 먹스(206a))가 추적 윈도우에 있는지의 여부를 특정하는 "인-윈도우(in-window)" 추적 제어 신호를 전송할 수 있다.
[0080] 인-윈도우 추적 제어 신호는 예컨대 프로세서 칩 내에서 또는 다수의 프로세서 칩들에 걸쳐 모든 다른 추적 먹스들에 브로드캐스트되거나 또는 도처에(unⅳersally) 송신될 수 있다. 다른 추적 먹스들로의 브로드캐스트는, 먹스(204) 또는 먹스(206a)가 추적 활동을 실행하고 있을 때 모든 추적이 인에이블되게 할 수 있다. 일부 구현들에서, 프로세서 코어들(104, 106) 및 HIB(114)와 연관된 추적 먹스들 각각은, "모두 추적" 제어 신호가 언제 그리고/또는 어떻게 생성되는지를 특정하는 추적 윈도우 제어 레지스터를 포함한다.
[0081] 일부 구현들에서, 추적 먹스들(210a/b) 및 추적 먹스(212)에서의 추적 활동은 일반적으로, 추적 비트가 DMA 동작들을 위한 데이터 워드들에 세팅되는지 또는 ICI/데이터 라우터(112)를 가로지르는 제어 메시지들에 세팅되는지에 기초하여 인에이블된다. DMA 동작들 또는 제어 메시지들은, 소정의 상황들 또는 소프트웨어 조건들에 기초하여 세팅되는 추적 비트를 바이너리 데이터 패킷들 내에 가질 수 있는 고정-크기의 바이너리 데이터 구조들일 수 있다.
[0082] 예컨대, 추적-유형 DMA 명령에 따라 FPC(104)(또는 SPC(106))에서 DMA 동작이 개시되고, 이니시에이터(initiator)(프로세서 코어들(104 또는 106))가 추적 윈도우에 있을 때, 추적 비트는 그 특정 DMA에 세팅될 것이다. 다른 예에서, FPC(104)의 경우, 시스템(100) 내의 다른 구성요소로의 데이터 기록들을 위한 제어 메시지들은, FPC(104)가 추적 윈도우에 있고 그리고 추적 데이터가 저장되게 하는 추적 지점이 인에이블되면, 추적 비트가 세팅되게 할 것이다.
[0083] 일부 구현들에서, 제로-길이 DMA 동작들은 시스템(100) 내의 더 넓은 DMA 구현의 예를 제공한다. 예컨대, 일부 DMA 동작들은 시스템(100) 내에 비-DMA 활동을 생성할 수 있다. 비-DMA 활동의 실행은 또한, 마치 비-DMA 활동이 DMA 동작(예컨대, 비-제로-길이 동작들을 포함하는 DMA 활동)인 것처럼 추적될 수 있다(예컨대, 추적 데이터를 생성할 수 있음). 예컨대, 소스 위치에서 개시되지만 전송 또는 전달될 어떤 데이터도 없는(예컨대, 제로-길이) DMA 동작은 대신에, 목적지 위치에 제어 메시지를 전송할 수 있다. 제어 메시지는, 목적지에서 수신되거나 또는 작업될 데이터가 없음을 표시할 것이며, 비-제로-길이 DMA 동작이 추적될 것이므로, 제어 메시지 자체는 시스템(100)에 의해 추적될 것이다.
[0084] 일부 사례들에서, SPC(106)의 경우, 제로-길이 DMA 동작들은 제어 메시지를 생성할 수 있으며, 그리고 DMA가 추적 비트가 세팅되게 했을 경우에만, 즉, 제어 메시지가 제로-길이를 갖지 않게 했을 경우에만, 메시지와 연관된 추적 비트가 세팅된다. 일반적으로, 호스트 시스템(126)으로부터 개시된 DMA 동작들은, HIB(114)가 추적 윈도우에 있으면, 추적 비트가 세팅되게 할 것이다.
[0085] 도 2의 구현에서, 추적 체인(203)이 노드 0과 정렬되는 구성요소 서브세트에 대한 추적 엔트리 데이터를 수신하는 한편, 추적 체인(205)은 노드 1과 정렬되는 구성요소 서브세트에 대한 추적 엔트리 추적 데이터를 수신한다. 각각의 추적 체인(203, 205, 207)은, 칩 관리자(216)의 예시적인 추적 엔트리 데이터 로그(218)에 추적 엔트리 데이터를 제공하기 위해 개개의 노드들(200, 201) 및 ICI(112)에 의해 사용되는 별개의 데이터 통신 경로들이다. 따라서, 추적 체인들(203, 205, 207)의 종단점은, 예시적인 메모리 유닛들에 추적 이벤트들이 저장될 수 있는 칩 관리자(216)이다.
[0086] 일부 구현들에서, 칩 관리자(216)의 적어도 하나의 메모리 유닛은 128-비트 폭일 수 있고, 적어도 20,000 개의 추적 엔트리들의 메모리 깊이를 가질 수 있다. 대안적인 구현들에서, 적어도 하나의 메모리 유닛은 더 크거나 또는 더 작은 비트-폭을 가질 수 있고, 더 많거나 또는 더 적은 엔트리들을 저장할 수 있는 메모리 깊이를 가질 수 있다.
[0087] 일부 구현들에서, 칩 관리자(216)는 수신된 추적 엔트리 데이터를 관리하기 위한 명령들을 실행하는 적어도 하나의 프로세싱 디바이스를 포함할 수 있다. 예컨대, 칩 관리자(216)는 추적 체인들(203, 205, 207)을 통해 수신된 추적 데이터의 개개의 하드웨어 이벤트들에 대한 타임 스탬프 데이터를 스캔/분석하기 위한 명령들을 실행할 수 있다. 분석에 기초하여, 칩 관리자(216)는, 하드웨어 추적 이벤트들의 시간순 시퀀스를 식별(또는 생성)하기 위해 사용될 수 있는 데이터를 포함하도록 추적 엔트리 로그(218)를 채울 수 있다. 하드웨어 추적 이벤트들은, 시스템(100)의 프로세싱 유닛들이 예시적인 분산 소프트웨어 프로그램을 실행할 때 구성요소 및 하위-구성요소 레벨에서 발생하는 데이터 패킷들의 이동에 대응할 수 있다.
[0088] 일부 구현들에서, 시스템(100)의 하드웨어 유닛들은, 비-시간순 방식으로(즉, 비-순차적) 예시적인 하드웨어 추적 버퍼를 채우는 추적 엔트리들(및 대응하는 타임스탬프들)을 생성할 수 있다. 예컨대, 칩 관리자(216)는, 생성된 타임-스탬프들을 갖는 다수의 추적 엔트리들이 엔트리 로그(218)에 삽입되게 할 수 있다. 다수의 삽입된 추적 엔트리들의 개개의 추적 엔트리들은 서로에 대해 시간순이 아닐 수 있다. 이 구현에서, 비-시간순 추적 엔트리들은 호스트 시스템(126)의 예시적인 호스트 버퍼에 의해 수신될 수 있다. 호스트 버퍼에 의한 수신 시, 호스트 시스템(126)은 개개의 추적 엔트리들에 대한 타임 스탬프 데이터를 스캔/분석하기 위해 성능 분석/모니터링 소프트웨어와 관련된 명령들을 실행할 수 있다. 실행되는 명령들은, 추적 엔트리들을 정렬하고 하드웨어 추적 이벤트들의 타임라인을 구성/생성하기 위해 사용될 수 있다.
[0089] 일부 구현들에서, 추적 엔트리들은 호스트 DMA 동작을 통해 추적 세션 동안 엔트리 로그(218)로부터 제거될 수 있다. 일부 사례들에서, 호스트 시스템(126)은, DMA 엔트리들이 로그에 추가됨에 따라 신속하게 추적 엔트리 로그(218) 밖으로 DMA 엔트리들을 제거하지 않을 수 있다. 다른 구현들에서, 엔트리 로그(218)는 미리 정의된 메모리 깊이를 포함할 수 있다. 엔트리 로그(218)의 메모리 깊이 제한치에 도달하면, 부가적인 추적 엔트리들은 손실될 수 있다. 어느 추적 엔트리들이 손실되는지를 제어하기 위하여, 엔트리 로그(218)는 선입선출(FIFO; first-in-first-out) 모드로, 또는 대안적으로, 오버라이트(overwrite) 레코딩 모드로 동작할 수 있다.
[0090] 일부 구현들에서, 오버라이트 레코딩 모드는, 사후(post-mortem) 디버깅과 연관된 성능 분석을 지원하기 위해 시스템(100)에 의해 사용될 수 있다. 예컨대, 추적 활동이 인에이블되고 오버라이트 레코딩 모드가 인에이블된 상태로, 소정의 시간-기간 동안 프로그램 코드가 실행될 수 있다. 시스템(100) 내의 사후 소프트웨어 이벤트(예컨대, 프로그램 충돌)에 대한 응답으로, 호스트 시스템(126)에 의해 실행되는 모니터링 소프트웨어는 프로그램 충돌 전에 발생한 하드웨어 이벤트들에 대한 통찰력을 얻기 위해 예시적인 하드웨어 추적 버퍼의 데이터 콘텐츠를 분석할 수 있다. 본 명세서에서 사용된 바와 같이, 사후 디버깅은, 코드가 충돌된 후에 또는 일반적으로 의도된 대로 실행/동작하는 데 실패한 후에, 프로그램 코드의 분석 또는 디버깅과 관련된다.
[0091] FIFO 모드에서, 엔트리 로그(218)가 가득 차면, 그리고 호스트 시스템(126)이 메모리 자원들을 보존하기 위해 소정의 시간프레임 내에 저장된 로그 엔트리들을 제거하면, 새로운 추적 엔트리들은 칩 관리자(216)의 메모리 유닛에 저장되지 않을 수 있다. 오버라이트 레코딩 모드에 있는 동안, 엔트리 로그(218)가 가득 차면, 호스트 시스템(126)이 메모리 자원들을 보존하기 위해 소정의 시간프레임 내에 저장된 로그 엔트리들을 제거하기 때문에, 새로운 추적 엔트리들은 엔트리 로그(218) 내에 저장된 가장 오래된 추적 엔트리를 오버라이트할 수 있다. 일부 구현들에서, HIB(114)의 프로세싱 특징들을 사용하는 DMA 동작에 대한 응답으로, 추적 엔트리들은 호스트 시스템(126)의 메모리로 이동된다.
[0092] 본 명세서에서 사용된 바와 같이, 추적 지점은, 칩 관리자(216)에 의해 수신되고 추적 엔트리 로그(218)에 저장된, 추적 엔트리 및 이 추적 엔트리와 연관된 데이터의 생성기이다. 일부 구현들에서, 멀티-코어 멀티-노드 프로세서 마이크로칩은, 제1 추적 체인이 칩 노드 0으로부터 추적 엔트리들을 수신하고, 제2 추적 체인이 칩 노드 1로부터 추적 엔트리들을 수신하며, 그리고 제3 추적 체인이 칩의 ICI 라우터로부터 추적 엔트리들을 수신하도록, 칩 내에 3 개의 추적 체인들을 포함할 수 있다.
[0093] 각각의 추적 지점은, 자신이 추적 엔트리의 헤더에 삽입하는 고유 추적 식별 번호를 자신의 추적 체인 내에 갖는다. 일부 구현들에서, 각각의 추적 엔트리는, 데이터 워드의 하나 이상의 바이트들/비트들에 의해 표시된 헤더에서부터 자신이 발신된 추적 체인을 식별한다. 예컨대, 각각의 추적 엔트리는 특정 추적 이벤트에 관한 정보를 전달하는 정의된 필드 포맷들(예컨대, 헤더, 페이로드 등)을 갖는 데이터 구조를 포함할 수 있다. 추적 엔트리 내의 각각의 필드는 추적 엔트리를 생성한 추적 지점에 적용가능한 유용한 데이터에 대응한다.
[0094] 위에서 표시된 바와 같이, 각각의 추적 엔트리는 추적 엔트리 로그(218)와 연관된 칩 관리자(216)의 메모리 유닛에 기록되거나 또는 이 메모리 유닛 내에 저장될 수 있다. 일부 구현들에서, 추적 지점들은 개별적으로 인에이블되거나 또는 디스에이블될 수 있고, 다수의 추적 지점들은, 상이한 추적 지점 식별자들을 갖지만 동일한 유형의 추적 엔트리를 생성할 수 있다.
[0095] 일부 구현들에서, 각각의 추적 엔트리 유형은 추적 이름, 추적 설명, 그리고 추적 엔트리 내의 특정 필드들 및/또는 필드들의 집합에 대한 인코딩들을 식별하는 헤더를 포함할 수 있다. 이름, 설명 및 헤더는 집합적으로, 추적 엔트리가 표현하는 것에 대한 설명을 제공한다. 칩 관리자(216)의 관점으로부터, 이 설명은 또한, 특정 추적 엔트리가 특정 프로세서 칩 내에 들어온 특정 추적 체인(203, 205, 207)을 식별할 수 있다. 따라서, 추적 엔트리 내의 필드들은 설명에 관련된 데이터의 조각들(예컨대, 바이트/비트 단위임)을 표현하며, 그리고 어느 추적 지점이 특정 추적 엔트리를 생성했는지를 결정하기 위해 사용되는 추적 엔트리 식별자일 수 있다.
[0096] 일부 구현들에서, 저장된 하드웨어 이벤트들 중 하나 이상과 연관된 추적 엔트리 데이터는 부분적으로, a) 적어도, 노드 0과 노드 1 사이에서; b) 적어도, 노드 0 내의 구성요소들 사이에서; 그리고 c) 적어도, 노드 1 내의 구성요소들 사이에서 발생하는 데이터 통신들에 대응할 수 있다. 예컨대, 저장된 하드웨어 이벤트들은 부분적으로, 1) 노드 0의 FPC(104)와 노드 1의 FPC(104) 사이; 노드 0의 FPC(104)와 노드 0의 SPC(106) 사이; 2) 노드 1의 SPC(106)와 노드 1의 SPC(106) 사이 중 적어도 하나에서 발생하는 데이터 통신들에 대응할 수 있다.
[0097] 도 3은 예시적인 추적 먹스 설계 아키텍처(300) 및 예시적인 데이터 구조(320)의 블록 다이어그램을 예시한다. 추적 먹스 설계(300)는 일반적으로, 추적 버스 입력(302), 버스 아비터(arbiter)(304), 및 로컬 추적 지점 아비터(306), 버스 FIFO(308), 적어도 하나의 로컬 추적 이벤트 큐(310), 공유 추적 이벤트 FIFO(312) 및 추적 버스 출력(314)을 포함한다.
[0098] 먹스 설계(300)는 시스템(100)의 구성요소 내에 배치된 예시적인 추적 먹스에 대응한다. 먹스 설계(300)는 다음의 기능성을 포함할 수 있다. 302의 버스는, 그러한 시간 아비트레이션 로직(arbitration logic)(예컨대, 아비터(304))이 추적 데이터가 예시적인 추적 체인에 배치되게 할 수 있을 때까지, 버스 FIFO(308) 내에 일시적으로 저장되는 로컬 추적 지점 데이터와 관련될 수 있다. 구성요소에 대한 하나 이상의 추적 지점들은 추적 이벤트 데이터를 적어도 하나의 로컬 추적 이벤트 큐(310)에 삽입할 수 있다. 아비터(306)는 제1 레벨 아비트레이션을 제공하고, 큐(310) 내에 저장된 로컬 추적 이벤트들 사이에서부터 이벤트들의 선택을 가능하게 한다. 선택된 이벤트들은, 저장 큐로서 또한 기능하는 공유 추적 이벤트 FIFO(312)에 배치된다.
[0099] 아비터(304)는, FIFO 큐(312)로부터 로컬 추적 이벤트들을 수신하며 추적 버스 출력(314)을 통해 로컬 추적 이벤트들을 특정 추적 체인(203, 205, 207) 상에 병합(merge)하는 제2 레벨 아비트레이션을 제공한다. 일부 구현들에서, 추적 엔트리들은 이 추적 엔트리들이 공유 FIFO(312)에 병합될 수 있는 것보다 더 빨리 로컬 큐들(310)에 푸시될 수 있거나, 또는 대안적으로, 추적 엔트리들은 이 추적 엔트리들이 추적 버스(314) 상에 병합될 수 있는 것보다 더 빨리 공유 FIFO(312)에 푸시될 수 있다. 이러한 시나리오들이 발생할 때, 개개의 큐들(310 및 312)은 추적 데이터로 가득 차게 될 것이다.
[00100] 일부 구현들에서, 큐(310 또는 312)가 추적 데이터로 가득 차게 될 때, 시스템(100)은, 최신 추적 엔트리들이 드롭되고 그리고 특정 큐에 저장되거나 또는 병합되지 않도록 구성될 수 있다. 다른 구현들에서, 소정의 큐들(예컨대, 큐들(310, 312))이 가득 찰 때 추적 엔트리들을 드롭하는 것이 아니라, 시스템(100)은, 채워지는 큐들이 다시 한 번, 엔트리들을 수신하기 위해 이용가능한 큐 공간을 가질 때까지, 예시적인 프로세싱 파이프라인을 스톨하도록 구성될 수 있다.
[00101] 예컨대, 충분한 수의 또는 임계 수의 추적 엔트리들이 추적 버스(314) 상에 병합될 때까지, 큐들(310, 312)을 사용하는 프로세싱 파이프라인이 스톨될 수 있다. 충분한 수 또는 임계 수는, 하나 이상의 추적 엔트리들이 큐들(310, 312)에 의해 수신되도록 하기 위해 이용가능한 큐 공간을 야기하는, 병합되는 추적 엔트리들의 특정 수에 대응할 수 있다. 프로세싱 파이프라인들이 스톨되는 구현들은, 하류의 큐 공간이 이용가능해질 때까지, 소정의 추적 엔트리들이 드롭되는 것이 아니라 유지되는 것에 기초하여 더 높은 충실도의 추적 데이터를 제공할 수 있다.
[00102] 일부 구현들에서, 로컬 추적 큐들은 추적 엔트리에 의해 요구되는 만큼 넓으며, 따라서 각각의 추적 엔트리는 로컬 큐(310)에서 단 하나의 스폿만을 취한다. 그러나, 공유 추적 FIFO 큐(312)는 고유 추적 엔트리 라인 인코딩을 사용할 수 있으며, 따라서 일부 추적 엔트리들은 공유 큐(312)에서 2 개의 위치들을 점유할 수 있다. 일부 구현들에서, 추적 패킷의 임의의 데이터가 드롭될 때, 추적 엔트리 로그(218)에 부분 패킷들이 나타나지 않도록, 전체 패킷이 드롭된다.
[00103] 일반적으로, 추적은 시스템(100)의 특정 구성요소와 연관된 활동들 또는 하드웨어 이벤트들의 타임라인이다. 애그리게이트(aggregate) 데이터인 성능 카운터들(아래에서 설명됨)과는 달리, 추적은 특정 추적 윈도우 동안 발생하는 하드웨어 활동에 대한 통찰력을 제공하는 상세한 이벤트 데이터를 포함한다. 설명된 하드웨어 시스템은, 추적 엔트리들의 생성, 하드웨어 관리 버퍼에의 추적 엔트리들의 일시적인 저장, 하나 이상의 추적 유형들의 정적 및 동적 인에이블링, 그리고 호스트 시스템(126)으로의 추적 엔트리 데이터의 스트리밍을 포함하는, 분산 하드웨어 추적을 위한 광범위한 지원을 가능하게 한다.
[00104] 일부 구현들에서, DMA 동작을 생성하는 것, DMA 동작을 실행하는 것, 소정의 명령들의 발행/실행, 또는 싱크 플래그들을 업데이트하는 것과 같은, 시스템(100)의 구성요소들에 의해 실행되는 하드웨어 이벤트들에 대한 추적들이 생성될 수 있다. 일부 사례들에서, 시스템을 통해 DMA들을 추적하기 위해 또는 특정 프로세서 코어에서 실행되는 명령들을 추적하기 위해 추적 활동이 사용될 수 있다.
[00105] 시스템(100)은, 하드웨어 이벤트들의 타임라인으로부터 하나 이상의 하드웨어 이벤트들(322, 324)을 식별하는 적어도 하나의 데이터 구조(320)를 생성하도록 구성될 수 있다. 일부 구현들에서, 데이터 구조(320)는, 적어도 FPC(104) 및 SPC(106)와 연관되는 이벤트들의 시간순 시퀀스로 하나 이상의 하드웨어 이벤트들(322, 324)을 배열한다. 일부 사례들에서, 시스템(100)은 호스트 시스템(126)의 호스트 제어 디바이스의 메모리 뱅크에 데이터 구조(320)를 저장할 수 있다. 데이터 구조(320)는, 적어도 프로세서 코어들(104 및 106)에 의해 실행되는 프로그램 코드의 성능을 평가하기 위해 사용될 수 있다.
[00106] 하드웨어 이벤트들(324)에 의해 도시된 바와 같이, 일부 구현들에서, 특정 추적 식별(ID; identification) 번호(예컨대, 추적 ID '003)는 분산 프로세서 유닛들에 걸쳐 발생하는 다수의 하드웨어 이벤트들과 연관될 수 있다. 다수의 하드웨어 이벤트들은 특정 메모리 액세스 동작(예컨대, DMA)에 대응할 수 있으며, 특정 추적 ID 번호는 하나 이상의 하드웨어 이벤트들을 상관시키기 위해 사용된다.
[00107] 예컨대, 이벤트(324)에 의해 표시된 바와 같이, DMA 동작에 대한 단일 추적 ID는 DMA에서의 다수의 상이한 지점들에 대응하는 다수의 시간 단계들을 포함할 수 있다. 일부 사례들에서, 추적 ID '003은, 서로에 대해 떨어져 있는 어떤 시간인 것으로서 식별되는 "발행된" 이벤트, "실행된" 이벤트 및 "완료된" 이벤트를 가질 수 있다. 따라서, 이 점과 관련하여, 추적 ID는 추가로, 상관에 기초하여 그리고 시간 단계들을 참조하여, 메모리 액세스 동작의 레이턴시 속성을 결정하기 위해 사용될 수 있다.
[00108] 일부 구현들에서, 데이터 구조(320)를 생성하는 것은, 예컨대, 시스템(100)이 하드웨어 이벤트들의 제1 서브세트에서의 개개의 이벤트들의 이벤트 타임 스탬프들을, 하드웨어 이벤트들의 제2 서브세트에서의 개개의 이벤트들의 이벤트 타임 스탬프들과 비교하는 것을 포함할 수 있다. 데이터 구조(320)를 생성하는 것은, 시스템(100)이, 데이터 구조에서의 프리젠테이션(presentation)을 위해, 이벤트들의 제1 서브세트와 이벤트들의 제2 서브세트 사이의 비교에 부분적으로 기초하여 하드웨어 이벤트들의 상관된 세트를 제공하는 것을 더 포함할 수 있다.
[00109] 도 3에 도시된 바와 같이, 데이터 구조(320)는 특정 하드웨어 이벤트(322, 324)의 레이턴시 속성을 표시하는 적어도 하나의 파라미터를 식별할 수 있다. 레이턴시 속성은 적어도, 특정 하드웨어 이벤트의 지속기간을 표시할 수 있다. 일부 구현들에서, 데이터 구조(320)는 호스트 시스템(126)의 제어 디바이스에 의해 실행되는 소프트웨어 명령들에 의해 생성된다. 일부 사례들에서, 구조(320)는, 제어 디바이스가 호스트 시스템(126)의 메모리 디스크/유닛에 추적 엔트리 데이터를 저장하는 것에 응답하여 생성될 수 있다.
[00110] 도 4는 시스템(100)에 의해 실행되는 직접 메모리 액세스(DMA; direct memory access) 추적 이벤트에 대한 예시적인 추적 활동을 표시하는 블록 다이어그램(400)이다. DMA 추적을 위해, 제1 프로세서 노드로부터 제2 프로세서 노드로 발신된, 예시적인 DMA 동작에 대한 데이터는 ICI(112)를 통해 이동할 수 있으며, 데이터 경로를 따라 중간 ICI/라우터 홉들을 생성할 수 있다. DMA 동작이 ICI(112)를 가로지름에 따라, DMA 동작은 프로세서 칩 내의 각각의 노드에서 그리고 각각의 홉을 따라 추적 엔트리들을 생성할 것이다. 이러한 생성된 추적 엔트리들 각각에 의해 정보가 포착되어, 노드들 및 홉들을 따라 DMA 동작들의 시간 진행이 재구성된다.
[00111] 예시적인 DMA 동작은 도 4의 구현에서 묘사된 프로세스 단계들과 연관될 수 있다. 이 동작을 위해, 로컬 DMA는 프로세서 코어들(104, 106) 중 적어도 하나와 연관된 가상 메모리(402)(vmem(402))로부터의 데이터를 HBM(108)에 전송한다. 다이어그램(400)에서 묘사된 넘버링은 표(404)의 단계들에 대응하고, 일반적으로 노드 패브릭(110)에서의 활동들 또는 노드 패브릭(110)에 의해 개시되는 활동들을 표현한다.
[00112] 표(404)의 단계들은 일반적으로, 연관된 추적 지점들을 설명한다. 예시적인 동작은 이 DMA에 대한 6 개의 추적 엔트리들을 생성할 것이다. 단계 1은, 노드 패브릭에 추적 지점을 생성하는, 프로세서 코어로부터 노드 패브릭(110)으로의 초기 DMA 요청을 포함한다. 단계 2는, 노드 패브릭(110)이, 데이터를 전송하도록 프로세서 코어에게 요구하는 판독 커맨드 ―이는 노드 패브릭(110)에 다른 추적 지점을 생성함― 를 포함한다. 예시적인 동작은, vmem(402)이 노드 패브릭(110)의 판독을 완료할 때, 단계 3에 대한 추적 엔트리를 갖지 않는다.
[00113] 단계 4는, 프로세서 코어에서 싱크 플래그 업데이트를 유발하기 위해 노드 패브릭(110)이 판독 자원 업데이트를 수행하는 것 ―이는 프로세서 코어에 추적 지점을 생성함― 을 포함한다. 단계 5는, 노드 패브릭(110)이 HBM에 기록될 예정(forthcoming) 데이터에 대해 메모리 먹스(108)에 통지하는 기록 커맨드를 포함한다. 기록 커맨드를 통한 통지가 노드 패브릭(110)에 추적 지점을 생성하는 한편, 단계 6에서, HBM으로의 기록의 완료가 또한, 노드 패브릭(110)에 추적 지점을 생성한다. 단계 7에서, 노드 패브릭(110)은 프로세서 코어에서 싱크 플래그 업데이트를 유발하기 위해 기록 자원 업데이트를 수행하며, 이는 프로세서 코어에(예컨대, FPC(104)에) 추적 지점을 생성한다. 기록 자원 업데이트에 부가하여, 노드 패브릭(110)은 확인응답 업데이트("ack 업데이트")를 수행할 수 있으며, 여기서, DMA 동작을 위한 데이터 완료가 프로세서 코어에 다시 시그널링된다. ack 업데이트는 기록 자원 업데이트에 의해 생성된 추적 엔트리들과 유사한 추적 엔트리들을 생성할 수 있다.
[00114] 다른 예시적인 DMA 동작에서, 발신 노드의 노드 패브릭(110)에서 DMA 명령이 발행될 때, 제1 추적 엔트리가 생성된다. DMA를 위한 데이터를 판독하고 데이터를 아웃고잉 큐들에 기록하는 데 사용되는 시간을 캡처하기 위해, 노드 패브릭(110)에서 부가적인 추적 엔트리들이 생성될 수 있다. 일부 구현들에서, 노드 패브릭(110)은 DMA 데이터를 데이터의 더 작은 청크(chunk)들로 패킷화할 수 있다. 더 작은 청크들로 패킷화된 데이터의 경우, 제1 데이터 청크 및 마지막 데이터 청크에 대해 판독 및 기록 추적 엔트리들이 생성될 수 있다. 선택적으로, 제1 데이터 청크 및 마지막 데이터 청크에 부가하여, 모든 데이터 청크들이 추적 엔트리들을 생성하도록 세팅될 수 있다.
[00115] ICI 홉들을 요구할 수 있는 원격/비-로컬 DMA 동작들의 경우, 제1 데이터 및 마지막 데이터 청크는, ICI/라우터(112)를 따라 각각의 중간 홉의 입구 지점 및 출구 지점에서 부가적인 추적 엔트리들을 생성할 수 있다. DMA 데이터가 목적지 노드에 도착할 때, 목적지 노드에서, 이전 노드 패브릭(110) 엔트리들과 유사한 추적 엔트리들(예컨대, 제1 데이터 청크 및 마지막 데이터 청크의 판독/기록)이 생성된다. 일부 구현들에서, DMA 동작의 최종 단계는, DMA와 연관된 실행되는 명령들이 목적지 노드에서의 싱크 플래그에 대한 업데이트를 유발하는 것을 포함할 수 있다. 싱크 플래그가 업데이트될 때, DMA 동작의 완료를 표시하는 추적 엔트리가 생성될 수 있다.
[00116] 일부 구현들에서, 추적 지점들이 실행될 수 있도록, 각각의 구성요소에서 추적 모드에 있을 때, FPC(104), SPC(106) 또는 HIB(114)에 의해 DMA 추적이 개시된다. 시스템(100)의 구성요소들은, 트리거 메커니즘을 통해 FPC(104) 또는 SPC(106)의 글로벌 제어들에 기초하여 추적 모드에 들어갈 수 있다. 시스템(100)의 구성요소들에 의한 프로그램 코드의 실행과 연관된 특정 액션 또는 조건의 발생에 대한 응답으로, 추적 지점들이 트리거된다. 예컨대, 프로그램 코드의 일부분들은, 시스템(100)의 적어도 하나의 하드웨어 구성요소에 의해 검출가능한 임베디드 트리거 함수들을 포함할 수 있다.
[00117] 시스템(100)의 구성요소들은, FPC(104) 또는 SPC(106) 중 적어도 하나에 의해 실행되는 프로그램 코드의 일부분들과 연관된 트리거 함수를 검출하도록 구성될 수 있다. 일부 사례들에서, 트리거 함수는 1) 실행되는 프로그램 코드의 일부분 또는 모듈에서의 특정 시퀀스 단계; 또는 2) 시스템(100)의 분산 프로세서 유닛들에 의해 사용되는 GTC에 의해 표시된 특정 시간 파라미터 중 적어도 하나에 대응할 수 있다.
[00118] 트리거 함수를 검출하는 것에 응답하여, 시스템(100)의 특정 구성요소는, 하나 이상의 하드웨어 이벤트들과 연관된 추적 엔트리 데이터가 하드웨어 구성요소의 적어도 하나의 메모리 버퍼에 저장되게 하는 적어도 하나의 추적 지점(예컨대, 추적 이벤트)을 개시하거나, 트리거하거나 또는 실행할 수 있다. 그런 다음, 위에서 주목된 바와 같이, 저장된 추적 데이터는 적어도 하나의 추적 체인(203, 205, 207)을 통해 칩 관리자(216)에 제공될 수 있다.
[00119] 위에서 주목된 바와 같이, 도 1-도 4는 분산 컴퓨팅 시스템에서의 하드웨어 이벤트 추적을 위한 접근법들을 예시했다. 나머지 도 5-도 7은 분산 컴퓨팅 시스템에서의 동기화된 하드웨어 이벤트 수집을 위한 접근법들을 설명한다. 하드웨어 이벤트들의 동기화된 수집은 하나 이상의 트리거 메커니즘들에 적어도 부분적으로 기초할 수 있다.
[00120] 도 5는 글로벌 시간 카운터(GTC; global time counter)(502)에 대한 예시적인 데이터 구조, 및 분산 하드웨어 추적을 위한 예시적인 컴퓨팅 시스템(예컨대, 시스템(100))에 의한 GTC(502)의 사용 시나리오들을 표시하는 표들(504 및 506)을 예시한다. 도 5의 구현에서, GTC(502)는 60-비트 카운터 및 4-비트 오프셋을 포함하는 64-비트 값이다. 대안적인 구현들에서, GTC(502)는, 범위가 64 비트보다 더 적은 비트부터 64 비트보다 더 많은 비트까지 이르는, 비트 단위의 크기를 갖는, 바이너리 데이터의 고정-크기의 조각일 수 있다.
[00121] GTC(502)와 연관된 데이터 구조는 글로벌 마스터 카운터에 적용될 뿐만 아니라, 도 6의 구현을 참조하여 아래에서 설명된 로컬 시간 카운터(LTC; local time counter)들에 적용된다. GTC 위상 변동(variation)들(아래에서 설명됨)을 해결하기 위해 "캐치 업(catching up)" 또는 "캐치 다운(catching down)"할 때를 제외하고, GTC(502)의 상위 60 비트는 사이클당 1만큼 증분하는 실제 시간 카운터에 대응한다. 예컨대, 로컬 GTC(502)(즉, LTC)의 업데이트 동안, 로컬 GTC(502)가 마스터 글로벌 GTC(502)에 "캐치-다운"하기 위하여 몇몇 사이클들 동안 "틱킹(tick)"하지 않는 것이 가능하다. 이러한 시나리오들에서, 프로그램 코드 실행 동안 발생할 수 있는 GTC 위상 변동들을 보상하기 위해, 하위 4 개의 "오프셋" 비트들이 사용된다.
[00122] GTC 위상 변동들을 해결할 때, 그렇지 않으면 GTC가 동일하지 않을 로컬 하드웨어 이벤트 활동들에 대한 타임스탬프들 사이의 구별을 부분적으로 유지하기 위해, 이러한 상황들에서 마지막 4 비트가 증분될 수 있다. 대부분의 다른 사례들에서, GTC(502)의 4-비트 오프셋은 명확하고, 따라서 사용되지 않는다. 일부 구현들에서, 오프셋 비트들은 최대 15까지 카운트되고, 그런 다음, 정지될 수 있다. 한편, 대안적인 구현들에서, 오프셋 비트들은 특정 카운터 설계에 의해 필요에 따라 임의의 정수 값으로 카운트될 수 있다. 일부 사례들에서, GTC(502)의 상위 60 비트가 다시 틱킹(ticking)하기 시작할 때, 오프셋 비트들은 클리어된다.
[00123] GTC(502, 602(아래에서 설명됨))의 구성 및 관리와 관련하여, 일부 구현들에서, 실행되는 프로그램 코드는 시스템(100)의 하나 이상의 프로세서 칩들을 구성함으로써 GTC를 구성하거나 또는 셋업할 수 있다. 프로세서 칩들을 구성하는 것은, 시스템에 대한 글로벌 마스터 GTC를 지정하는 것 뿐만 아니라, 시스템(100)의 개개의 노드들 또는 구성요소들에 대한 로컬 마스터 GTC들(즉, LTC들)을 지정하는 것을 포함할 수 있다.
[00124] 구성요소들은, 클록 레이턴시들을 컴퓨팅 및 보상하기 위해 그리고 하나 이상의 로컬 GTC들(즉, 도 6의 LTC들)의 수동 튜닝을 수행하기 위해, 실행되는 프로그램 코드/소프트웨어가 사용하는 하드웨어 노브들/특징들을 포함할 수 있다. 위상 변동들을 최소화하거나 또는 완화하기 위하여, 클록 레이턴시들에 대한 LTC 보상 및 수동 튜닝은 마스터 GTC에 대해 수행된다. 일부 구현들에서, 시스템(100)은, 구성요소 하드웨어 특징들이 "핑-앤-에코(ping-and-echo)" 메커니즘을 통해 링크 레이턴시들을 자동으로 결정하는, 레이턴시 보상을 위한 자동-파일럿 모드를 포함할 수 있다.
[00125] 일부 구현들에서, 시스템(100)은, 예시적인 제어/상태 레지스터(CSR; control/status register)의 파라미터 값들을 조정하기 위해 사용되는 프로그램 코드의 일부분 또는 서브세트를 포함하는 링크/소프트웨어 스택을 포함할 수 있다. 일부 사례들에서, 링크 스택 프로그램 코드의 실행에 대한 응답으로 생성된 제어 신호들은 하나 이상의 파라미터 값들이 CSR에 기록하게 한다. 이러한 CSR 파라미터 값들은, GTC(502, 602) 또는 LTC들의 다양한 양상들을 구성하기 위해 사용될 수 있다.
[00126] 예컨대, 하나 이상의 파라미터들은 다음을 포함할 수 있다: 1) 마스터 글로벌 GTC, 로컬 마스터 GTC 또는 로컬 슬레이브 GTC의 선택, 그리고 업데이트 샘플 크기의 선택을 유발하는 GTC_구성 파라미터; 2) 마스터 GTC를 다시 세팅하거나 또는 "핑(ping)" 측정을 클리어하기 위해 사용되는 GTC_싱크 파라미터; 3) 수동 레이턴시 보상들을 구성하는 GTC_레이턴시_보상_제어 파라미터; 4) 최소 핑 레이턴시를 표시하는 GTC_링크_핑 파라미터; 5) 실제 GTC 값을 표시하는 GTC_카운트 파라미터; 및/또는 6) 로컬 GTC와 마스터 GTC 사이의 관찰된 최대 차이를 표시하는 GTC_최대_차이 파라미터.
[00127] 위에서 표시된 바와 같이, 글로벌 마스터 GTC(502) 및 하나 이상의 로컬 GTC들(502)은, 이벤트 타임-스탬프들을 획득하기 위해 그리고 시스템 내에서 발생하는 하드웨어 이벤트들 사이에 시퀀싱된 순서화를 결정하기 위해, 시스템(100)에 의해 사용될 수 있다. 활동들 사이에 순서화하는 것에 부가하여, GTC(502)는, 활동들의 레이턴시들을 결정하기 위해 사용될 수 있다. 일부 구현들에서, 특정 GTC(502)는 위상 변동들을 나타낼 수 있으며, 따라서, 결정된 레이턴시들은 하나 이상의 사이클들만큼 부정확할 수 있다.
[00128] 위에서 표시된 바와 같이, 로컬 GTC가 글로벌 마스터와 상이한지의 여부에 따라, 즉, 위상 변동들이 있을 때, 소정의 GTC(502)가 증분하는 레이트는 변할 수 있다. 정상 상태에서, 위상 변동들이 없을 때, 마스터 글로벌 GTC(502)는 사이클당 한 번 증분하며, 그리고 특정 구성요소 LTC 뿐만 아니라 로컬 활동들의(예컨대, 소정의 구성요소의) 레이턴시들 및 순서를 카운트하기 위해 사용될 수 있다.
[00129] 일부 구현들에서, 마스터 GTC(502)는 소정의 LTC보다 더 느리게 카운트할 수 있다. 이러한 사례들에서, GTC(502)의 오프셋 비트들은 계속해서 로컬 클록 사이클당 한 번 증분한다. 표들(504, 506)에 의해 표시된 바와 같이, GTC 오프셋 비트들의 고유 기능성이 주어지면, 시스템(100)에 의한 사용을 위해 확장(extended) GTC("GTC-확장")가 정의될 수 있다. 일부 구현들에서, 상위 60 비트(GTC:상위)와 하위 4 오프셋 비트(GTC:오프셋)를 더함으로써 GTC-확장이 구성될 수 있는 한편, 다른 구현들에서는, 특정 프로세서에서 실행되는 프로그램 코드는 GTC:상위와 부분적(fractional) GTC:오프셋 값을 합산한 것과 동일하도록 GTC-확장을 컴퓨팅할 수 있다.
[00130] 일부 구현들에서, 그리고 오프셋 비트들의 증분에 대한 응답으로, 이벤트 순서화 뿐만 아니라 로컬 동작들의 레이턴시들을 결정하기 위해 GTC-확장 파라미터가 사용될 수 있다. 표들(504, 506)은, 하드웨어 이벤트 순서화 및 이벤트 동작들의 레이턴시를 결정할 때 GTC-확장 파라미터가 유용하다는 것을 증명할 수 있는 사용 시나리오들을 표시한다.
[00131] 표(504)는 활동들 또는 하드웨어 이벤트들 사이의 순서를 결정하기 위한 예시적인 GTC 사용을 설명한다. 일부 구현들에서, 활동의 과정이 분석되고 있는 동안 GTC(502)가 증분하는 레이트는, 글로벌 순서, 예컨대, 적어도 2 개의 별개의 컴퓨팅 노드들(예컨대, 각각이 마스터 GTC를 갖는 별개의 노드들) 사이의 하나 이상의 활동들의 순서를 결정하기 위해 GTC(502)를 사용할 때, 관련되지 않을 수 있다. 그러나, 표(504)의 특징(508)에 의해 도시된 바와 같이, 특정 노드에서의 로컬 GTC(502)가 그 노드 마스터 GTC보다 더 느릴 때, 2 개의 로컬 활동들 사이를 구별하기 위해 또는 2 개의 로컬 활동들이 원격 자원들로의 기록들을 개시할 때 사이를 구별하기 위해, GTC-확장이 사용될 수 있다.
[00132] 표(506)는 로컬 활동들/이벤트들 또는 둘 이상의 노드들에 걸쳐 있는 활동들의 레이턴시를 컴퓨팅하기 위한 예시적인 GTC 사용을 설명한다. 일부 구현들에서, 시스템 파라미터들은, 특정 칩에서의 GTC(502)가 정상 레이트로(즉, 지정된 마스터 글로벌 클록과 동기 상태로) 틱킹하고 있는지 또는 지정된 마스터 글로벌과는 위상이 다른(off-phase) 레이트로 틱킹하고 있는지를 표시하지 않을 수 있다. 따라서, 일부 사례들에서, 표(506)의 특징(510)에 의해 도시된 바와 같이, LTC는 로컬 활동들의 이벤트 레이턴시 결정에 사용될 수 있다. 한편, 다른 구현들에서, 하나 이상의 동작들의 레이턴시들을 측정하기 위해 GTC 또는 GTC-확장이 사용될 수 있다.
[00133] 일반적으로, 시스템(100)의 다양한 노드들 또는 구성요소들에서 발생하는 하드웨어 추적 이벤트들은 GTC 파라미터를 포함할 수 있다. 일부 구현들에서, 추적되는 하드웨어 이벤트들/활동들이 시스템(100)의 다수의 노드들에 걸쳐 있을 때, 로컬 활동들과 연관된 레이턴시들은 LTC가 아니라 GTC를 통해 컴퓨팅되어야 한다. 이러한 구현들에서, GTC 또는 GTC-확장의 사용은 바람직한 카운터/클록 솔루션일 수 있는데, 그 이유는 둘 이상의 별개의 노드들에 걸쳐 있는 LTC가 동일한 레이트로 동기화되거나 또는 클록킹/틱킹되지 않을 수 있기 때문이다.
[00134] 도 6은 분산 하드웨어 추적을 위한 예시적인 컴퓨팅 시스템(예컨대, 시스템(100))의 개개의 구성요소들과 연관된, 예시적인 시간 카운터들 및 하나 이상의 카운터들의 블록 다이어그램을 예시한다. 시간 카운터들은 시스템(100)의 개개의 구성요소들과 각각 연관되는 다수의 로컬 시간 카운터(LTC)들 및 글로벌 시간 카운터(GTC)(602)를 포함할 수 있다.
[00135] 명료성을 위해, 도 6이 시스템(100)의 특정 구성요소들에 커플링된 단일 LTC 블록을 묘사하지만, 대안적인 구현들에서, 각각의 구성요소는 하나의 또는 다수의 로컬 시간 카운터들/LTC들을 포함할 수 있다. 추가로, 도 6이 단일 마스터 GTC(602)를 묘사하지만, 이 특징은 또한, 글로벌 마스터로서 기능하도록 선택되는 특정 LTC에 대응하거나 또는 이 특정 LTC를 표현할 수 있다. 예컨대, 일부 구현들에서, GTC(602)는, 글로벌 마스터 클록/카운터로서 기능하도록 특정 LTC를 선택하기 위해 호스트 시스템(126)에 의해 구현되는 카운터 선택 로직에 대응한다.
[00136] 일부 사례들에서, 시스템(100)은 글로벌 마스터 클록으로서 기능하도록 ICI(112)의 예시적인 노드를 선택할 수 있으며, 예시적인 노드의 LTC는 클록 사이클당 1만큼 틱킹한다. 한편, 대안적인 구현들에서, GTC(602)는, 글로벌 마스터 클록으로서 기능하고 특정 시간 파라미터를 시스템(100)의 구성요소들에 브로드캐스트하는 글로벌 시간 카운터이다. 어느 구현에서든, GTC(602)는 시스템(100)에 걸쳐 발생하는 하드웨어 이벤트들을 상관시키기 위해 사용되는 글로벌 동기 클록일 수 있다.
[00137] 일부 구현들에서, 위에서 설명된 바와 같이, GTC(602)는 시스템(100)에 걸쳐 작은 위상 변동들을 가질 수 있지만, 장기간의 시간-드리프트를 회피하도록 구성될 수 있다. 예컨대, GTC(602)는 특정 프로세서 칩의 예시적인 발진기(예컨대, 글로벌 마스터인 것으로 선택된 발진기)에 기초하여 틱킹하거나 또는 카운트할 수 있다. 일반적으로, 시스템(100)에서 프로세서 칩의 선택된 발진기에 특정한 장기간의 드리프트 또는 위상 변동은 없지만, 시간의 경과에 따라, 별개의 프로세서 칩들 사이의 발진기들에 대해 드리프트 또는 변동들이 발생할 수 있다. 따라서, GTC(602)는, 글로벌 마스터가 아닌 프로세서 칩에서 로컬 클록(LTC)보다 더 빠르게 또는 더 느리게 증분(즉, 틱킹)할 수 있다.
[00138] 글로벌 마스터로서, GTC(602)의 현재 마스터 값이 ICI(112)의 모든 노드들에 브로드캐스트될 수 있다. 예시적인 ICI 노드들은 시스템(100)의 하나 이상의 구성요소들에 대응할 수 있다. 수신 노드들은 특정 구성요소/노드에 특정한 로컬 동작들에 사용되는 예시적인 GTC의, 자신의 로컬 값 사이의 차이를 컴퓨팅할 수 있다. 로컬 GTC를 업데이트하기 위해, 예시적인 샘플링 기간에 걸친, 수신된 마스터 값과 로컬 GTC 값 사이의 최소 차이가 사용될 수 있다. 시간의 경과에 따라, 만약에 있다면, 마스터 값과 로컬 GTC 값들 사이의 위상 변동들은, 위에서 논의된 하나 이상의 오프셋 비트들을 사용하여 구현되는 카운터 조정들에 기초하여 "캐치-업"될 수 있다.
[00139] 도 6의 구현에 도시된 바와 같이, 시스템(100)의 구성요소들 각각은 하나 이상의 성능 카운터들을 포함할 수 있고, 시스템(100) 내의 성능 카운터들의 집합적(collectⅳe) 세트들 또는 서브세트들은 본원에서 다수의 카운터들(600)로서 설명된다. 특히, 그리고 각각의 구성요소들에 특정하게, FPC(104)는 다수의 카운터들(604)을 포함할 수 있고, SPC(106)는 다수의 카운터들(606)을 포함할 수 있고, 먹스 메모리(mux memory)(HBM)(108)는 다수의 카운터들(608)을 포함할 수 있고, 노드 패브릭(110)은 다수의 카운터들(610)을 포함할 수 있고, ICI(112)는 다수의 카운터들(612)을 포함할 수 있으며, 그리고 HIB(114)는 다수의 카운터들(614)을 포함할 수 있다.
[00140] 시스템(100)에서, 하나 이상의 프로세서들에 의해 실행되는 프로그램 코드의 성능 분석은 시스템의 특정 구성요소들과 연관된 하나 이상의 하드웨어 성능 카운터들의 사용에 기초하여 인에이블/디스에이블될 수 있다. 이러한 성능 카운터들은 도 6의 다수의 개개의 카운터들에 대응할 수 있고, 다음 중 적어도 하나를 포함할 수 있다: 1) 활동 카운터들; 2) 스톨 카운터들; 3) 통계 카운터들; 및 4) 샘플링 카운터들.
[00141] 일부 구현들에서, 시스템(100)은 실행되는 프로그램 코드의 기술적 양상들과 연관된 특정 카운트 데이터를 증분시키고 저장하도록 프로그램될 수 있는 다양한 다른 유형들의 성능 카운터들을 포함한다. 추가로, 하나 이상의 카운터들의 사용을 통해, 활동을 추적하기 위한 하드웨어 지원은 예컨대, 이벤트 데이터를 추적하는 명령의 캡처; 이벤트 데이터를 추적하는 메모리 먹스의 캡처; 이벤트 데이터를 추적하는 DMA의 캡처; 및 추적 버퍼들에서의 이벤트 데이터의 캡처와 관련된 기능들을 포함할 수 있다.
[00142] 일부 구현들에서, 다수의 카운터들(600)의 적어도 서브세트는 HIB(114)를 통해 호스트 시스템(126)에 의해 액세스가능한 CSR들 또는 카운트 레지스터들일 수 있다. 이러한 카운트 레지스터들/CSR들은 특정 하드웨어 구성요소에 의해 수신되거나, 프로세싱되거나 또는 실행되는 명령들을 식별하는 다양한 유형들의 카운트 데이터/정보 뿐만 아니라, 실행되는 프로그램 코드의 기술적 양상들과 연관된 다양한 다른 유형들의 데이터/정보를 저장하도록 구성되는 저장 디바이스들일 수 있다. 일부 사례들에서, 데이터는 특정 명령들 또는 프로세서 동작들(예컨대, 카운트 파라미터)과 연관된 카운트들 또는 증분들의 형태로 저장된다. 일부 구현들에서, 시스템(100)의 다수의 카운터들(600)은 수백 또는 수천 개의 성능 카운터들/카운트 레지스터들에 대응할 수 있다.
[00143] 위에서 주목된 적어도 4 개의 유형들의 성능 카운터들에 관하여, 일부 구현들에서, 활동 카운터들은 상이한 하드웨어 유닛들에 대한 활용 파라미터들과 연관된 데이터를 저장 및 분석하기 위해 사용될 수 있다. 활동 카운터들은 또한, 실행되는 프로그램 코드의 일부분들을 분석하기 위해 또는 코드 실행 동안 전송되고 있는 데이터의 양들 또는 유형들을 분석하기 위해 사용될 수 있다. 예컨대, 일부 프로세서 코어들은 명령들의 다양한 스트림들에서 명령 혼합(mix)을 유도하기 위해 사용되는 활동 카운터들을 포함할 수 있다. 예컨대, 활동 카운터는, 예시적인 명령 스트림에서 특정 명령 유형들의 실행과 연관된 카운트들을 저장하도록 구성될 수 있다.
[00144] 일부 구현들에서, 활동 카운터들은 카운터들의 서브-세트들, 이를테면: 소정의 명령 유형들의 발행 시 증분되는 발행 카운터들; 메모리 경로들 상에서 이용가능하며, 예컨대, (예컨대, 먹스(108)와 VMEM(402) 사이의) 메모리 전송들과 연관된 판독들/기록들에 대한 응답으로 증분되는 메모리 활동 카운터들; 및 인터럽트들, 싱크 플래그들 및 알람 카운터들과 같은 명령들의 발생에 대한 응답으로 증분되는 하나 이상의 다른 일반 활동 카운터들을 포함할 수 있다.
[00145] 스톨 카운터들에 관하여, 일부 구현들에서, 이러한 카운터들은, 명령 프로세싱 또는 데이터 계산들과 연관된 유용한 작업을 수행하는 대신에, 특정 스톨 이유에 기인하여 소정의 하드웨어 유닛/구성요소가 스톨된 사이클들의 수를 표시하는 스톨 카운트들을 제공할 수 있다. 예컨대, 특정 하드웨어 유닛의 활용이 임계 활용 미만이거나, 또는 프로그램 코드가 원하는 임계 성능 레벨로 수행하고 있지 않을 때, 활용 및 성능 이슈들(예컨대, 임계 활용/성능 미만임)의 근본-원인 분석을 수행하기 위한 적절한 스톨 정보를 획득하기 위해, 스톨 카운터들이 시스템(100)에 의해 사용될 수 있다.
[00146] 일부 구현들에서, 스톨 카운터들은: 이용가능하지 않은 것으로 표시되는, 소정의 정상적으로 이용가능한 메모리 경로들의 검출에 기초한 스톨들; 하나 이상의 싱크 플래그 명령들의 지연된 실행에 기초한 스톨들; 및/또는 이용가능하지 않은 것으로 표시되는 하나 이상의 정상적으로 이용가능한 실행 유닛들(예컨대, XU(122) 또는 RPU(124))에 기인하는 스톨들과 관련된 적절한 정보를 제공할 수 있다.
[00147] 일부 구현들에서, FPC(104)는 VPU(118)에 의해 수행되는 벡터화된 계산들을 위한 스칼라 양들을 제공하는 적어도 하나의 스칼라 유닛을 포함할 수 있다. 스칼라 유닛과 연관된 스톨 카운터들은, 스칼라 유닛 내에서 발생할 수 있는 하나 이상의 위험들에 기인하는 스톨들에 대한 적절한 정보를 제공할 수 있다. 일부 사례들에서, 다양한 위험 유형들이 발생할 수 있고, FPC(104)는 각각의 위험 유형에 대한 스톨 카운터들을 포함할 수 있다. 예시적인 위험 유형들은 DMA 지연 위험들, 스칼라 펜스(fence) 지연 위험들 및/또는 스칼라 지연 명령 위험을 포함할 수 있다.
[00148] 통계 카운터들에 관하여, 일부 구현들에서, 시스템(100)의 구성요소들은 하나 이상의 데이터 큐들(예컨대, 저장 매체들)을 포함할 수 있고, 활동 카운터들은 큐 활용과 관련된 정보를 제공하도록 구성될 수 있다. 그러나, 일부 사례들에서, 큐들에 대한 활동 카운터들은, 프로그램 코드를 실행함으로써 큐들이 얼마나 잘 활용되고 있는지에 관한 모든 정보를 제공하기에는 충분하지 않을 수 있다. 이러한 사례들에서, 평균 큐 점유율(occupancy) 및 소정의 큐들에서 소모된 시간과 관련된 계산들이 결정될 수 있도록 소정의 데이터 카운트들을 획득하기 위해, 하나 이상의 구성요소에서 통계 카운터들이 이용가능할 수 있다.
[00149] 일부 구현들에서, 큐 통계 카운터들은 큐 점유율, 큐 삽입 상태, 큐가 가득 찬 상태, 또는 임계 점유율 상태의 큐와 관련된 통계 카운트들을 제공할 수 있다. 일부 사례들에서, 큐 통계 카운터가 활성일 때, 각각의 프로세서/명령 사이클에서 큐의 현재 점유율에 기초하여, 구성요소 큐와 연관된 점유율 카운터가 증분된다.
[00150] 다른 사례들에서, 활성 큐 통계 카운터가, 큐가 가득 찬 상태에 관한 카운트들을 제공할 때, 카운터는, 큐가 완전히 점유되는 사이클들에서 (예컨대, 1만큼) 증분된다. 추가로, 활성 큐 통계 카운터가 큐 삽입 상태와 관련된 카운트들을 제공할 때, 카운터는 데이터 청크들이 큐에 배치되는 것(즉, 큐 삽입)에 대한 응답으로 증분된다. 추가로, 계속해서, 임계 점유율 상태의 큐의 경우, 카운터는 현재 큐 점유율이 특정 큐 임계 값 점유율보다 더 큰 각각의 사이클에서 (예컨대, 1만큼) 증분될 수 있다.
[00151] 일부 구현들에서, 시스템(100)의 구성요소들은, 데이터 구조들(예컨대, 구조들(320 또는 620))을 생성하기 위해 호스트 시스템(126)으로부터 주기적으로 판독될 수 있는 샘플링 카운터들의 세트들을 포함할 수 있다. 데이터 구조들은 하드웨어 이벤트들, 추적 활동, 또는 시스템(100)의 분산 프로세서 유닛들에서 발생하는 활동들/이벤트들에 대한 상세한 데이터 프로세싱 정보에 관한 샘플링된 통계치(statistics)를 포함할 수 있다. 일부 구현들에서, 샘플링된 통계치에 기초하여 생성된 데이터 구조들은 예컨대 구조(320)(위에서 설명됨) 또는 구조(620)(아래에서 설명됨)를 포함할 수 있다. 일부 사례들에서, 생성된 데이터 구조들은, 시스템(100)의 구성요소들에 의해 실행되는 프로그램 코드의 성능을 분석하기 위해 호스트 시스템(126)의 모니터링 엔진(128)에 의해 사용되는 하나 이상의 모니터링 툴들을 구축하는 데 사용된다.
[00152] 위에서 주목된 바와 같이, 시스템(100)의 구성요소들은 하나 이상의 트리거 메커니즘들과 연관된 글로벌 제어들에 기초하여 이벤트 추적을 개시할 수 있다. 일부 구현들에서, 추적 지점들이 하나 이상의 하드웨어 이벤트들과 관련된 특정 데이터를 포함하는 추적 엔트리들을 실행 및 생성하게 하는 트리거 메커니즘을 개시하도록 다수의 카운터들(600)이 인에이블되거나, 디스에이블되거나, 또는 그렇지 않으면 제어될 수 있다. 일부 구현들에서, 하드웨어 이벤트들과 관련된 추적 엔트리들은, 위에서 설명된 다수의 카운터들(600) 중 하나 이상에 의해 애그리게이팅된 카운트 데이터에 적어도 부분적으로 기초한 이벤트 데이터로 채워진다.
[00153] 글로벌 제어들은 일반적으로, CSR 제어들(즉, 특정 CSR 하드웨어 특징들/노브들) 뿐만 아니라, 카운터들이 증가될 수 있게 하고 조정된 그리고 동기화된 방식으로 추적들이 생성될 수 있게 하는 트리거 메커니즘들의 사용을 포함한다. 일부 구현들에서, 시스템(100)의 분산 프로세서 유닛들에 걸쳐, 조정된 그리고 동기화된 제어가 발생할 수 있다. 위에서 논의된 바와 같이, 동기화된 추적은 부분적으로, 글로벌 마스터 클록(예컨대, GTC(602))으로서 사용되는 글로벌 동기 카운터의 사용을 통해 인에이블될 수 있다.
[00154] 일부 구현들에서, 시스템(100)은, 분산 프로세서 유닛들의 글로벌 시간 클록(예컨대, 시간 파라미터 09:01.13)에 의해 표시된 특정 시간 파라미터에 기초하여, 동기화된 이벤트 추적을 트리거한다. 예컨대, 시스템(100)은 소정의 동작의 지속기간 동안 정밀하게 모든 카운터들 및 추적을 시작 및 정지하기 위한 트리거로서 GTC(602)의 글로벌 마스터 클록 값들을 사용할 수 있다.
[00155] 일부 사례들에서, 시스템(100)의 예시적인 소프트웨어 컴파일러는, GTC(602)와 연관된 미리 정의된 특정 시간 윈도우에 기초하는 트리거 메커니즘을 위한 피연산자들 또는 파라미터 값들을 포함하는 명령들을, 실행되는 프로그램 코드 내에 임베딩하거나 또는 삽입할 수 있다. 미리 정의된 시간 윈도우는 추적 이벤트 시작-시간(예컨대, 제1 GTC(602) 시간 파라미터) 및 추적 이벤트 종료-시간(예컨대, 제1 GTC 시간 파라미터보다 시간상 나중인 제2 GTC(602) 시간 파라미터)을 갖는 예시적인 추적 지속기간을 포함할 수 있다.
[00156] 도 6의 구현에 도시된 바와 같이, 시스템(100)의 구성요소들은 다수의 성능 카운터들(600)을 포함할 수 있다. 그것이 트리거 메커니즘들에 관련되기 때문에, 성능 카운터 제어들은, 카운터들을 인에이블 및 디스에이블할 뿐만 아니라 카운터들을 클리어하고 카운터들을 일시중지(pause)하는 메커니즘들을 포함할 수 있다. 추가로, 위에서 설명된 통계 카운터 기능들에 부가하여, 일부 하드웨어 유닛들은, 이벤트들이 카운트되는 하드웨어 유닛 내의 하드웨어 블록들의 서브세트를 선택하기 위해 사용되는 연관된 선택기들(예컨대, CSR들)을 갖는 통계 카운터들을 포함할 수 있다.
[00157] 추적 먹스 제어들을 참조하여 위에서 논의된 바와 같이, 일부 구현들에서, 시스템(100)에 의해 실행되는 CSR 기록들에 기초하여 추적이 인에이블 및 디스에이블될 수 있다. 일부 사례들에서, FPC(104)(또는 코어(116))의 예시적인 추적-마크(TM; trace-mark) 레지스터의 값에 기초하여, 또는 SPC(106)의 예시적인 TM 레지스터의 값에 기초하여, 추적은 시스템(100)에 의해 동적으로 시작 및 정지될 수 있다.
[00158] 일부 구현들에서, 특정 추적 윈도우를 정의하기 위해 예시적인 추적 제어 파라미터가 사용될 수 있다. 예컨대, 추적 제어 파라미터는 추적 윈도우들이, GTC(602)의 하한 및 상한(예컨대, 시작 시간 클록 값 & 정지 시간 클록 값) 및 FPC(104)의 예시적인 추적-마크 레지스터의 또는 SPC(106)의 예시적인 추적-마크 레지스터의 하한 및 상한 측면에서 정의될 수 있게 할 수 있다.
[00159] 일부 구현들에서, 시스템(100) 내에서 실행되는 프로그램 코드는 FPC(104) 또는 SPC(106) 중 하나 내에서의 각각의 프로세서 사이클마다 추적 이벤트들을 트리거하기 위한 트리거 프로세싱 로직을 포함할 수 있다. 일부 사례들에서, 트리거 로직은, 실행되는 소프트웨어/프로그램 코드에 의해 하나 이상의 명령 스트림들에 삽입될 수 있는 특수 "추적-마크 세팅" 명령과 연관된다.
[00160] 예컨대, 그리고 FPC(104)에 대한 트리거 로직에 관하여, 추적-마크를 세팅하라는 예시적인 명령이 FPC(104) 내에서 발행될 때, 트리거 로직은 명령의 추적-마크 피연산자를 분석하는 것, 그리고 예시적인 추적-마크 윈도우의 값들과 피연산자의 파라미터 값을 비교하는 것을 포함할 수 있다. 이 분석 및 비교는, 피연산자 파라미터 값이 특정 추적-마크 윈도우의 상한 값과 하한 값 내에 속하는지 또는 이러한 하한 값과 동일한지를 결정하기 위해 사용된다.
[00161] 피연산자의 파라미터 값이 추적-마크 윈도우의 경계들 내에 속하면 경우, 트리거가 발화될(fired) 수 있고(예컨대, 트리거 조건이 충족됨), FPC(104)는 추적 또는 카운팅 모드에 들어가고 다수의 카운터들(604)의 하나 이상의 카운터들을 인에이블할 수 있다. 일부 구현들에서, 후속하는 "추적-마크 세팅" 명령이, 피연산자 값이 예시적인 추적-마크 윈도우의 상한과 동일하거나 또는 이러한 상한 밖에 있는 것에 기초하여 정지 카운팅 트리거가 발화되게 하는 피연산자 파라미터 값을 포함할 때, FPC(104)는 추적/카운팅 모드를 빠져나간다.
[00162] 일부 구현들에서, 시스템(100)은 i) 실행되는 프로그램 코드의 적어도 제1 부분에서 예시적인 추적-마크 피연산자의 발생을 식별하는 것 중 적어도 하나에 기초하여 트리거 조건이 충족됨을 검출할 수 있다. 추적-마크 피연산자는, 하나 이상의 추적 이벤트들 및/또는 성능 카운팅을 개시하기 위해 사용되는 파라미터 값(예컨대, 코드 단계 시퀀스/값)을 포함할 수 있다. 시스템(100)은 또한, 현재 시간 GTC(602)가, 하나 이상의 추적 이벤트들 및/또는 성능 카운팅을 개시하기 위해 사용되는 미리 정의된 시간 값을 표시한다는 결정에 기초하여 트리거 조건이 충족됨을 검출할 수 있다.
[00163] 트리거 조건이 충족됨을 검출하는 것에 응답하여, 시스템(100)의 프로세서 구성요소는 프로세서 구성요소의 카운트 레지스터에 의해 수신되는 제어 신호를 생성할 수 있다. 제어 신호는 하나 이상의 하드웨어 이벤트들과 연관된 다양한 카운트 데이터가 카운트 레지스터에 저장되게 할 수 있다. 일부 구현들에서, 시스템(100)은 실행되는 프로그램 코드와 연관된 하나 이상의 성능 속성들을 표시하는 데이터 구조를 예컨대 호스트 시스템(126)을 통해 생성하도록 구성되거나 또는 프로그램될 수 있다. 예컨대, 데이터 구조는 저장된 카운트 데이터의 하나 이상의 카운트 파라미터들에 기초하여 생성될 수 있다. 일부 구현들에서, 카운트 레지스터는 시스템(100)의 하나 이상의 프로세서 구성요소들의 성능에 관한 카운트 데이터를 저장하도록 구성된 다수의 성능 카운터들(600) 중 하나이다.
[00164] 추적-마크 트리거를 추가로 예시하기 위해, 예시적인 코드 시퀀스에서, 세팅된 추적-마크 명령은 분산 소프트웨어 구성(예컨대, 예시적인 신경망 추론 작업부하에서의 계산 단계)을 식별하는 32-비트 트리거 피연산자를 포함할 수 있다. FPC(104)는 프로그램 코드에서 "추적마크_제한치들"로서 식별되는 특수 목적 CSR을 포함할 수 있다. 32-비트 피연산자들이 이러한 예시적인 코드 시퀀스에서 설명되지만, 대안적인 구현들에서, 트리거 피연산자들 또는 레지스터 제한 피연산자들/파라미터 값들은 32-비트보다 더 적거나 또는 32-비트보다 더 많은 비트들을 갖는 바이너리 데이터 구조들일 수 있다.
[00165] 이 특수 목적 CSR은 적어도 2 개의 32-비트 값들을 인코딩할 수 있다. 제1 인코딩된 32-비트 값이 추적/카운팅을 개시하기 위해 사용되는 하위 추적-마크 제한치에 대응할 수 있는 한편, 제2 인코딩된 32-비트 값은 추적/카운팅을 정지하기 위해 사용되는 상위 추적-마크 제한치에 대응할 수 있다. 일부 구현들에서, 제1 인코딩된 값 및 제2 인코딩된 값은 분산 소프트웨어 프로그램/구성에서의 계산 단계들, 이를테면 예시적인 신경망 추론 작업부하, 또는 임의의 다른 분산 프로그램 코드에 대응한다.
[00166] 예시적인 코드 시퀀스를 다시 참조하면, "추적-마크 세팅" 명령이 실행될 때, 32-비트 피연산자 값은, 추적마크_제한치들이란 레지스터의 제1 인코딩된 값 및 제2 인코딩 값과 비교된다. 이 비교에 기초하여, 트리거 피연산자가 시작 값(즉, 제1 인코딩된 값)과 동일/일치하거나 또는 더 높은 값을 가지면, 성능 분석 활동이 트리거된다. 마찬가지로, 트리거 피연산자가 정지 값(즉, 제2 인코딩된 값)과 일치하거나 또는 더 높은 값을 가지면, 진행중인 성능 분석 활동은 정지된다.
[00167] 추적-마크 트리거와 매우 유사하게, GTC(602)가 (예컨대, FPC(104) 또는 SPC(106)에 대한) 트리거로서 사용될 때, 특정 구성요소에 대한 예시적인 GTC/LTC 트리거 레지스터들의 상한 및 하한은 GTC(602)의 현재 값에 대해 평가될 수 있다. 따라서, GTC(602)의 현재 시간 파라미터 또는 값은, GTC 트리거를 사용하여 추적 활동을 실행하기 위한 예시적인 미리 정의된 시간-윈도우의 하한과 비교될 수 있다. 유사하게, GTC의 실행이 카운팅 활동을 시작하도록 트리거한 후에, GTC(602)가 상한 값과 일치하는지 또는 상한 값 밖에 속하는지를 결정하기 위해, GTC(602)의 현재 시간 파라미터 또는 값은 GTC 트리거 레지스터의 상한과 비교될 수 있다. GTC(602)가 적어도 상한 값과 일치하는 것에 대한 응답으로, 정지 카운팅 트리거가, 구성요소로 하여금 카운팅 모드를 빠져나가게 하기 위해 발화할 것이다.
[00168] 일부 구현들에서, SPC(106)는 FPC(104)의 추적-마크 세팅 명령에 대한 카운터파트(counterpart)를 포함한다. 따라서, SPC(106)에 대한 트리거 프로세싱 로직은, FPC(104)에서와 동일한 또는 실질적으로 유사한 방식으로 기능할 수 있다. 예컨대, 추적-마크 파라미터는 SPC(106)에 의해 발행된 하나 이상의 명령들에 대한 피연산자로서 포함될 수 있다. 일부 사례들에서, 피연산자의 트리거 평가는 각각의 명령 발행 시 발생하고, 평가 로직은, (예컨대, 추적-마크 피연산자를 사용하여) FPC(104)에서 카운팅이 인에이블되는 방식과 실질적으로 유사할 수 있다. 예컨대, SPC(106)에서, 추적-마크 세팅 명령에 포함된 추적-마크 피연산자가 예시적인 추적 윈도우의 상한 및 하한 내에 있을 때, 추적이 인에이블된다. 마찬가지로, 추적-마크 명령에 포함된 추적-마크 피연산자가 추적 윈도우의 상한 및 하한 밖에 있을 때, 추적이 디스에이블된다.
[00169] 위에서 논의된 바와 같이, GTC(602) 또는 추적 마커들을 사용하는 것에 부가하여, 시스템(100)은 "모두" 추적 모드를 포함할 수 있다. 일반적으로, 이러한 모두 추적 모드는, 예컨대 FPC(104) 또는 SPC(106)의 구성요소에 의해 생성된 제어 신호에 의해, 전체 프로세서 칩에 걸친 추적이 제어되게 할 수 있다. 일부 구현들에서, 제어 신호는 시스템(100)의 분산 프로세서 유닛들의 특정 성능 상태를 표시하는 글로벌 제어 파라미터일 수 있다. 일부 사례들에서, 특정 성능 상태는 "모두" 추적 모드에 대응한다.
[00170] 일부 구현들에서, 하나 이상의 하드웨어 구성요소들(예컨대, HIB(114) 또는 ICI(112))은, "모두" 추적 모드의 활성화에 대한 응답으로 또는 모두 추적 모드를 표시하는 전파 제어 신호를 단순히 무시하기 위해, 이벤트 추적을 개시하도록 프로그램되거나 또는 구성될 수 있다. 따라서, 시스템(100)이 모두 추적 제어 신호를 전파하는 시그널링 메커니즘을 포함할 수 있지만, 시스템(100)은 또한, 적어도 하나의 하드웨어 구성요소로 하여금 제어 신호를 묵살하게 하는 메커니즘들을 포함할 수 있다.
[00171] 예컨대, 시스템(100)의 사용자(예컨대, 성능 분석가)는 모든 호스트 통신들을 표시하는 데이터 패킷들을 추적하기 위해 HIB(114)를 사용하기를 원할 수 있다. 사용자는, HIB(114)로 하여금, 시스템(100)의 다른 하드웨어 구성요소들로부터의 데이터의 소정의 단일 단계 시퀀스들을 캡처하기 위해 모두 추적 모드를 또한 사용하면서, "항상 추적" 모드에 들어가게 하는 예시적인 프로그램 명령을 예컨대 외부 컴파일러를 통해 삽입할 수 있다. 따라서, 항상 추적 모드로 실행되도록 프로그램될 때, HIB(114)는 다른 하드웨어 구성요소들로부터 단일 단계 시퀀스 추적 데이터를 생성하기 위해 사용되는 모두 추적 제어 신호를 무시할 수 있다.
[00172] 일부 구현들에서, 시스템(100)의 구성요소들에 의한 프로그램 코드의 실행과 관련된 특정 액션 또는 조건의 발생에 대한 응답으로, 추적 지점들이 트리거될 수 있다. 예컨대, 분산 소프트웨어 프로그램이, 공유되거나 또는 겹치는 코드 시퀀스들 또는 단계들을 각각이 포함하는 다수의 소프트웨어 모듈들을 포함할 수 있다. 예컨대, 프로세서 코어들(104, 106) 각각은 분산 소프트웨어 프로그램의 일부분들을 수신 및 실행할 수 있으며, 각각의 프로그램 부분은 예시적인 코드 시퀀스(1-100)를 포함할 수 있다.
[00173] 위에서 표시된 바와 같이, 일부 구현들에서, 시스템(100)은 분산 프로그램 코드의 특정 시퀀스 단계를 갖거나 또는 이러한 특정 시퀀스 단계에 기초하는 하나 이상의 트리거 조건들/메커니즘들을 포함하도록 구성될 수 있다. 따라서, 시스템(100)은, 코드 실행 동안 프로세서 코어들(104, 106) 각각이 소정의 코딩된 시퀀스/단계(예컨대, 코드 시퀀스 단계 33)에 도달하는 것에 대한 응답으로, 추적 지점을 트리거하도록 구성될 수 있다. 일부 사례들에서, 실행되는 분산 프로그램 코드의 일부분들은, 시스템(100)의 적어도 하나의 하드웨어 구성요소에 의해 검출가능한 임베디드 트리거 함수들을 포함할 수 있다.
[00174] 예컨대, 위에서 주목된 바와 같이, 시스템(100)은 FPC(104) 또는 SPC(106) 중 하나에 의해 실행되는 프로그램 코드의 적어도 일부에서 피연산자들의 발생들을 식별하는 것에 기초하여 하나 이상의 트리거 조건들이 충족됨을 검출하도록 구성될 수 있다. 적어도 하나의 트리거 조건이 충족됨을 검출하는 것에 응답하여, 시스템(100)은 추적 엔트리들/추적 데이터 또는 카운트 데이터를 생성하는 하나 이상의 추적 이벤트들을 개시할 수 있다. 일부 구현들에서, 생성된 추적 엔트리들은, 분산 프로세서 유닛들에 걸쳐 발생하는 개개의 하드웨어 이벤트들 사이에서 공유되는 적어도 하나의 속성(예컨대, 공유 타임 스탬프 또는 코드 시퀀스 단계)을 포함할 수 있다.
[00175] 예컨대, 그리고 데이터 구조(620)에 의해 도시된 바와 같이, 생성된 추적 엔트리들(622)은 동기화된 추적 이벤트에 대응할 수 있고, 추적 데이터는 개개의 하드웨어 이벤트들에 대한 고유 추적 식별자들, 및 적어도 2 개의 개개의 하드웨어 이벤트들 사이에서 공유되는 글로벌 하드웨어 이벤트 타임 스탬프(예컨대, 09:01.13)를 포함할 수 있다. 따라서, 추적 엔트리들(622)의 경우, 개개의 하드웨어 이벤트들 사이에서 공유되는 적어도 하나의 속성은 하드웨어 이벤트 타임 스탬프일 수 있다. 마찬가지로, 시스템(100)이 특정 코드 시퀀스에 기초하여 추적 지점들을 트리거할 때, 추적 엔트리들(624)의 경우, 개개의 하드웨어 이벤트들 사이에서 공유되는 적어도 하나의 속성은 코드 시퀀스 또는 추적-마크 단계일 수 있다.
[00176] 일부 구현들에서, 추적 엔트리들은 타임스탬프 헤더 또는 필드를 포함할 수 있다. 타임스탬프 헤더는 추적 엔트리가 생성된 시간을 식별하는 48-비트 타임스탬프를 포함할 수 있다. 일부 사례들에서, 타임스탬프 헤더는 GTC(502)의 하위 48 비트에 대응할 수 있다.
[00177] 위에서 표시된 바와 같이, 일부 구현들에서, 시스템(100)의 컴파일러는 시스템(100)의 예시적인 프로세서 코어들에 의해 실행되는 프로그램 코드의 일부분들에 다수의 트리거 조건들에 대한 하나 이상의 피연산자들을 삽입할 수 있다. 예컨대, FPC(104)와 연관된 컴파일러는 FPC(104)에 의해 실행되는 프로그램 코드의 일부분들에 트리거 조건들에 대한 하나 이상의 피연산자들을 삽입하거나 또는 임베딩할 수 있다. 마찬가지로, SPC(106)와 연관된 컴파일러는 SPC(106)에 의해 실행되는 프로그램 코드의 일부분들에 트리거 조건들에 대한 하나 이상의 피연산자들을 삽입하거나 또는 임베딩할 수 있다.
[00178] 일반적으로, 그리고 위에서 주목된 바와 같이, 시스템(100)은 하나 이상의 트리거 조건들을 검출하도록, 그리고 조건들을 검출하는 것에 응답하여, 적어도 하나의 추적 이벤트를 개시하도록 구성된다. 일부 구현들에서, 적어도 하나의 추적 이벤트를 개시하는 것은 시스템(100)이, 예컨대 FPC(104)의 제1 성능 카운터/레지스터(예컨대, CSR, 이를테면 활동 카운터)에 제1 제어 신호를 제공하는 것을 포함할 수 있다. 이러한 제1 제어 신호는, 적어도 하나의 하드웨어 이벤트와 연관된 데이터가 제1 성능 카운터에 저장되게 할 수 있다.
[00179] 마찬가지로, 일부 구현들에서, 적어도 하나의 추적 이벤트를 개시하는 것은 시스템(100)이, 예컨대 SPC(106)의 제2 성능 카운터/레지스터(예컨대, CSR, 이를테면 통계 카운터)에 제2 제어 신호를 제공하는 것을 더 포함할 수 있다. 이러한 제2 제어 신호는, 적어도 하나의 하드웨어 이벤트와 연관된 데이터가 제2 성능 카운터에 저장되게 할 수 있다.
[00180] 일부 구현들에서, 적어도 하나의 하드웨어 이벤트와 연관된 데이터는: 1) 시스템(100)의 분산 프로세서 유닛들의 소정의 프로세서 코어의 특정 메모리 버퍼에 기록된 바이트 수; 또는 2) 시스템(100)의 분산 프로세서 유닛들의 소정의 프로세서 코어에 의해 실행된 명령들의 수 중 하나를 포함할 수 있다.
[00181] 일반적으로, 설명된 추적 시스템은 하드웨어 기반 트리거-액션 메커니즘들을 포함한다. 트리거들은 소프트웨어 의미론(semantics)에 기초하여 조기에 발화되도록 구성될 수 있다. 예컨대, 트리거 조건들에 대한 피연산자들은 소프트웨어 구성요소들의 프롤로그들 및 에필로그들에(예컨대, 함수들, 루프-헤더들, 또는 분산 소프트웨어 시스템의 다른 적절한 장소들에) 삽입되거나 또는 임베딩될 수 있다. 위에서 주목된 바와 같이, 일부 사례들에서, 트리거 조건들에 대한 피연산자들의 삽입이 시스템(100)의 컴파일러에 의해 수행되는 한편, 다른 사례들에서, 트리거들 및 트리거 피연산자들은, 시스템(100)에 의한 코드 실행 이전에 프로그래머들에 의해 임베딩/삽입될 수 있거나, 또는 호스트 시스템(126)에 의해 실시간 코드 실행 동안 임베딩될 수 있다.
[00182] 예컨대, 일부 구현들에서, 트리거가 발화되어야 할 때를 표시하는 조건은, 호스트 시스템(126) 상에서 실행되는 성능 분석 소프트웨어에 의해 분산 하드웨어 시스템에 걸쳐(예컨대, 시스템(100)의 각각의 칩/노드에서) 셋업될 수 있다. 트리거가 발화될 때, 하드웨어 추적 및 성능 카운팅이 특정 하드웨어 유닛에서 수행되며, 추적 데이터 수집을 정지하기 위해 유사한 트리거 조건들이 셋업된다.
[00183] 다른 구현들에서, 시스템(100)에서의 트리거는, 명령에 대한 피연산자인 단조롭게 증가하는 값일 수 있다. 이 명령은 프로세서 코어의 예시적인 컴파일러에 의해, 중요한 소프트웨어 구성들의 프롤로그들 및 에필로그들에 삽입될 수 있다. 일반적으로, 트리거가 발화될 때까지 성능 데이터가 수집되지 않기 때문에, 실행되는 프로그램 코드에 대해, 명령에서의 트리거 피연산자가 항상 존재하게 하는 것에 대한 무시할만한 성능 페널티가 있다.
[00184] 예컨대, 하드웨어 구성요소의 예시적인 레지스터에 기록함으로써, 트리거 조건이 셋업될 수 있다. 트리거를 평가하거나 또는 검출하기 위해, 트리거 명령을 접할 때마다, 하드웨어 구성요소는 이 레지스터의 값을, 명령의 트리거 조건의 피연산자 값과 비교할 수 있다. 일반적으로, 트리거 조건은, 분산 시스템의 프로세서 칩들/노드들 중 어느 것도 너무 이르게 트리거 조건에 도달하지 않도록, 소정의 코딩된 시퀀스 단계들에 앞서 제대로 셋업되어야 한다.
[00185] 일부 사례들에서, 하드웨어 트리거 구현은, 예시적인 프로세서 칩/노드의 상이한 구성요소들 내에서 트리거 신호를 전파할 것을 요구한다. 트리거-액션 메커니즘의 적어도 하나의 이점은, 분산 소프트웨어 프로그램이 다른(제2) 노드에서의 관련된 활동(예컨대, 코드 시퀀스 단계 33)과는 매우 상이한 시간에 제1 노드 상에서의 활동(예컨대, 코드 시퀀스 단계 33)을 실행하는 것을 가능하게 한다. 이러한 구현에서, 시스템(100)은 상이한 시간 기간들로 상이한 하드웨어 구성요소들 또는 프로세서 노드들에 의해 실행되는 동일한 또는 실질적으로 관련된 활동들에 대한 하드웨어 성능 데이터의 정확한 수집을 유지할 수 있다.
[00186] 일부 구현들에서, 예시적인 트리거 유스 케이스(use case)는, 특정 트리거 조건을 다시 프로그램하거나, 다시 세팅하거나, 또는 다시 삽입하지 않고, 시스템(100)이 추적 데이터의 다수의 세트들을 수집하는 것을 포함할 수 있다. 예컨대, 실행되는 프로그램 코드는, 추적-마크를 세팅하기 위한 동일한 피연산자가 다수 회 나타나는 명령 시퀀스를 생성하는 소프트웨어 구성들을 포함할 수 있다. 일부 사례들에서, 시스템(100)의 프로세서가 루프에서 프로그램 코드의 소정의 부분을 실행할 때, 동일한 세트 추적-마크 피연산자가 다수 회 나타날 수 있다. 프로그램 루프의 실행 동안, 이벤트 추적은 프로그램 루프의 반복들에 따라 시작 및 종료될 수 있다.
[00187] 예컨대, 루프 반복의 시작 시 나타나는 피연산자 값에 기초하여 트리거 조건이 충족될 수 있는데, 예컨대, 트리거가 발화되고 이벤트 추적이 시작된다. 마찬가지로, 루프 반복의 종료 시 나타나는 피연산자 값에 기초하여 트리거 조건이 더 이상 충족되지 않을 수 있는데, 예컨대, 이벤트 추적이 정지된다. 일반적으로, 루프 반복의 시작과 루프 반복의 종료는 주어진 소프트웨어 구성에 대한 프로그램 루프의 경계들에 대응할 수 있다. 따라서, 소프트웨어 구성의 각각의 실행(예컨대, 각각의 루프 반복) 시 추적 세션이 시작 및 종료될 수 있다.
[00188] 일부 구현들에서, 적절한 트리거 피연산자 값들(예컨대, GTC 또는 추적-마크)은 다음의 방식으로 결정될 수 있다. 위에서 주목된 바와 같이, 분산 소프트웨어 프로그램은, 공유되거나 또는 겹치는 코드 시퀀스들 또는 단계들을 각각이 포함하는 소프트웨어 모듈들을 포함할 수 있다. 시스템(100) 내의 분산 프로그램 코드의 실행 동안, 성능 분석가는, 예컨대 현재 코드 시퀀스 또는 단계 번호를 결정하기 위해, 시스템(100)의 컴퓨팅 콘솔을 통해, 추적-마크 레지스터의 CSR 값을 판독하거나 또는 분석할 수 있다.
[00189] 일부 사례들에서, 분석가는 시퀀스 또는 단계들의 증가의 평균 레이트를 결정하기 위해 CSR 값을 반복적으로 판독한다. 결정된 증가 레이트는, 예컨대 추적-마크 피연산자 값들의 발생들에 기초하여 하나 이상의 트리거 조건들을 예측적으로 세팅하기 위해 사용될 수 있다. 일부 구현들에서, GTC를 사용할 때, 성능 분석가는, GTC가 증가하는 레이트를 예측하거나 또는 결정하기 위해, 시스템/기계(또는 하드웨어 구성요소) 클록 속도를 판독하거나 또는 분석할 수 있다. 그런 다음, 분석가는 특정 GTC 값의 발생에 기초하여 하나 이상의 트리거 조건들을 세팅하기 위해, 결정된 레이트를 사용할 수 있다.
[00190] 도 7은 컴퓨팅 시스템(100) 및 시스템(100)의 하나 이상의 노드들(200, 201)을 사용하는 분산 하드웨어 추적을 위한 예시적인 프로세스(700)의 프로세스 흐름 다이어그램이다. 따라서, 프로세스(700)는 노드들(200, 201)의 자원들을 포함하는, 시스템들(100)의 위에서 언급된 컴퓨팅 자원들 중 하나 이상을 사용하여 구현될 수 있다.
[00191] 프로세스(700)는, 블록(702)에서 시작되고, 컴퓨팅 시스템(100)이, 제1 프로세서 코어에 의해 실행되는 프로그램 코드의 실행을 모니터링하는 것을 포함한다. 일부 구현들에서, 제1 프로세서 코어는, 모니터링되는 프로그램 코드의 적어도 제1 부분을 실행하도록 구성된다. 프로세스(700)의 블록(704)에서, 시스템(100)은 제2 프로세서 코어에 의해 실행되는 프로그램 코드의 실행을 모니터링한다. 일부 구현들에서, 제2 프로세서 코어는, 모니터링되는 프로그램 코드의 적어도 제2 부분을 실행하도록 구성된다.
[00192] 블록(706)에서, 시스템(100)은 적어도 하나의 트리거 조건이 충족됨을 검출한다. 일부 구현들에서, 시스템(100)은 제1 프로세서 코어 또는 제2 프로세서 코어 중 하나에 의해 실행되는 프로그램 코드의 적어도 일부에서 피연산자의 발생을 식별하는 것에 기초하여 트리거 조건이 충족됨을 검출한다. 일부 구현들에서, 시스템(100) 내에서 실행되는 프로그램 코드는 추적 이벤트들을 트리거하기 위한 트리거 프로세싱 로직을 포함한다.
[00193] 일부 사례들에서, 트리거 로직은, 하나 이상의 명령 스트림들에 삽입되는 "추적-마크 세팅" 명령과 연관된다. 트리거 로직은 명령의 추적-마크 피연산자의 발생을 식별하는 것, 추적-마크 피연산자를 분석하는 것, 및 피연산자를 예시적인 추적-마크 윈도우의 값들과 비교하는 것을 포함할 수 있다. 일부 사례들에서, 이러한 분석 및 비교는, 제1 트리거 조건이 충족됨을 검출하기 위해 사용된다.
[00194] 다른 사례들에서, 트리거 로직은 시스템(100)의 외부 사용자에 의해 또는 시스템의 예시적인 컴파일러에 의해 하나 이상의 명령 스트림들에 삽입될 수 있는 미리 정의된 시간 값과 연관된다. 트리거 로직은 컴퓨팅 시스템의 적어도 하나의 클록의 현재 시간이, 하나 이상의 추적 이벤트들을 개시하기 위해 사용되는 미리 정의된 시간 값을 표시한다고 결정하는 것을 포함할 수 있다. 일부 구현들에서, 현재 시간이 미리 정의된 시간 값을 표시한다고 결정하는 것은, 미리 정의된 시간 값을 수신하는 것, 그리고 미리 정의된 시간 값을 예시적인 미리 정의된 시간 윈도우의 시간 값들과 비교하는 것을 포함할 수 있다.
[00195] 블록(708)에서, 트리거 조건이 충족됨을 검출하는 것에 응답하여, 시스템(100)은 추적 데이터를 생성하는 적어도 제1 추적 이벤트를 개시한다. 생성된 추적 데이터는, 적어도, 제1 프로세서 코어 및 제2 프로세서 코어를 포함하는 분산 프로세서 유닛들에 걸쳐 발생하는 개개의 하드웨어 이벤트들을 식별한다.
[00196] 예컨대, 트리거 조건이 충족됨을 검출하는 것에 응답하여, 시스템(100)은 FPC(104) 및 SPC(106)에 걸쳐 발생하는 하드웨어 이벤트들을 식별하는 추적 데이터를 생성하는 동기화된 추적 이벤트를 개시할 수 있다. 일부 구현들에서, 추적 데이터는 개개의 하드웨어 이벤트들에 대한 고유 추적 식별자를 식별한다. 일부 사례들에서, 하드웨어 이벤트들은 다수의 동기화된 하드웨어 이벤트들을 포함하며, 다수의 동기화된 이벤트들 중 적어도 2 개의 하드웨어 이벤트들은, 이러한 이벤트들이 글로벌 하드웨어 이벤트 타임 스탬프를 공유할 때 동기화된다.
[00197] 일부 구현들에서, 다수의 트리거 조건들이, 실행되는 프로그램 코드와 연관될 수 있다. 일부 사례들에서, 적어도, 제1 프로세서 코어 또는 제2 프로세서 코어에 의해 실행되는 프로그램 코드의 적어도 일부에서 특정 피연산자의 발생을 식별하는 것에 기초하여, 특정 트리거 조건이 충족될 수 있다. 특정 피연산자는, 각각이 하나 이상의 추적 이벤트들 중 제2 추적 이벤트를 개시하기 위해 사용될 수 있는 다수의 파라미터 값들 중 하나를 포함할 수 있다. 이러한 구현에서, 특정 트리거 조건이 충족됨을 검출하는 것은, 시스템(100)이 특정 파라미터 값이 레지스터의 제1 경계 값을 초과함을 검출하는 것을 포함할 수 있다.
[00198] 일부 구현들에서, 특정 트리거 조건이 충족됨을 검출하는 것에 응답하여, 시스템(100)은, 추적 데이터를 생성하는 추적 이벤트를 개시하며, 추적 데이터는 분산 프로세서 유닛들에 걸쳐 발생하는 개개의 하드웨어 이벤트들 사이에서 공유되는 적어도 하나의 속성을 식별한다. 일부 구현들에서, 개개의 하드웨어 이벤트들의 속성은 적어도, 소스 메모리 어드레스, 목적지 메모리 어드레스, 또는 시퀀스/프로그램 컴퓨트 단계를 포함할 수 있다. 반면에, 적어도 하나의 공유 속성은 프로그램 코드의 특정 시퀀스 단계 또는 프로그램 단계를 포함할 수 있다.
[00199] 일부 구현들에서, 하나 이상의 트리거 조건들은: 1) 프로그램 코드의 특정 시퀀스 단계; 2) 분산 프로세서 유닛들의 특정 성능 상태를 표시하는 글로벌 제어 파라미터; 3) 분산 프로세서 유닛들의 글로벌 시간 클록/카운터에 의해 표시되는 현재 시간 또는 특정 시간 파라미터; 또는 4) 글로벌 시간 클록과 연관된 미리 정의된 시간 윈도우 중 적어도 하나와 연관될 수 있다.
[00200] 일부 구현들에서, 시스템(100)은 또한, 특정 피연산자의 특정 파라미터 값 또는 특정한 미리 정의된 시간 값이 레지스터의 제2 경계 값을 초과함을 검출할 수 있다. 일부 사례들에서, 이러한 검출에 응답하여, 시스템(100)은, 소정의 피연산자의 특정 파라미터 값 또는 소정의 미리 정의된 시간 값이 레지스터의 제2 경계 값을 초과할 때 제2 추적 이벤트를 정지할 수 있다.
[00201] 프로세스(700)의 블록(710)에서, 시스템(100)은 개개의 하드웨어 이벤트들을 포함하는 추적 데이터의 상관된 세트를 호스트 디바이스에 제공한다. 일부 구현들에서, 추적 데이터의 상관된 세트는, 적어도, 제1 트리거 조건이 충족될 때 생성된 개개의 하드웨어 이벤트들의 시간순 시퀀스를 표시한다. 개개의 하드웨어 이벤트들 각각에 대해, 추적 데이터는 적어도, 하드웨어 이벤트에 대한 하드웨어 이벤트 타임 스탬프, 및 하드웨어 이벤트를 특성화하는 메타데이터를 포함한다. 일부 사례들에서, 추적 데이터의 상관된 세트는 적어도 부분적으로 데이터 구조(620)에 대응한다.
[00202] 블록(712)에서, 컴퓨팅 시스템(100)은, 적어도, 제1 프로세서 코어 및 제2 프로세서 코어에 의해 실행되는 프로그램 코드의 성능을 분석하기 위해, 추적 데이터의 상관된 세트를 사용한다. 일부 구현들에서, 적어도 프로세서 코어들(104 및 106)에 의해 실행되는 프로그램 코드의 성능을 분석하기 위해 호스트 시스템(126)에 의해 데이터 구조(620)(즉, 상관된 추적 데이터에 대응함)가 사용된다. 마찬가지로, 데이터 구조(620)는, 시스템(100)의 적어도 하나의 구성요소의 성능을 분석하기 위해 호스트 시스템(126)에 의해 사용될 수 있다.
[00203] 예컨대, 호스트 시스템(126) 또는 예시적인 사용자는, 프로그램 코드의 특정 소프트웨어 모듈의 실행과 연관된 성능 이슈가 있는지를 검출하거나 또는 결정하기 위해 데이터 구조(620)를 분석할 수 있다. 예시적인 이슈는 소프트웨어 모듈이, 할당된 실행 시간 윈도우 내에 또는 임계 레이턴시 미만으로 소정의 명령 스트림들의 실행을 완료하지 못하는 것을 포함할 수 있다.
[00204] 추가로, 사용자 또는 호스트 디바이스/시스템(126)은 시스템(100)의 특정 구성요소가 임계 성능 레벨을 초과하여 동작하는지 또는 임계 성능 레벨 미만으로 동작하는지를 검출하거나 또는 결정할 수 있다. 구성요소 성능과 관련된 예시적인 이슈는 특정 하드웨어 구성요소가, 수용가능한 임계 결과 파라미터 범위들의 밖에 있는 결과 데이터를 생성하는 것을 포함할 수 있다. 일부 구현들에서, 생성된 결과 데이터는, 실질적으로 유사한 명령들/동작들을 실행하는 시스템(100)의 다른 관련된 구성요소들에 의해 생성된 결과 데이터와 불일치할 수 있다.
[00205] 예컨대, 프로그램 코드의 실행 동안, 시스템(100)의 제1 구성요소는, 동작을 완료하고 결과를 생성할 것을 요구받을 수 있다. 마찬가지로, 시스템(100)의 제2 구성요소는, 실질적으로 유사한 동작을 완료하고 실질적으로 유사한 결과를 생성할 것을 요구받을 수 있다. 추적 데이터의 상관된 세트의 분석은, 제2 구성요소가 제1 구성요소에 의해 생성된 결과와는 상당히 상이한 결과를 생성했다는 것을 표시할 수 있다. 마찬가지로, 상관된 추적 엔트리들의 예시적인 데이터 구조는 수용가능한 파라미터 범위들의 밖에 있는, 제2 구성요소의 결과 파라미터 값들을 표시할 수 있다. 이러한 결과들은 제2 구성요소의 잠재적인 성능 이슈를 표시할 수 있다.
[00206] 본 명세서에서 설명된 발명의 요지 및 기능적 동작들의 실시예들은, 본 명세서에서 개시된 구조들 및 그들의 구조적 등가물들을 포함하여 또는 그들 중 하나 또는 그 초과의 결합들로, 디지털 전자 회로소자에서, 유형으로 구현되는 컴퓨터 소프트웨어 또는 펌웨어에서, 컴퓨터 하드웨어에서 구현될 수 있다. 본 명세서에서 설명된 발명의 요지의 실시예들은, 데이터 프로세싱 장치에 의한 실행을 위해 또는 데이터 프로세싱 장치의 동작을 제어하기 위해 유형의 비 일시적 프로그램 캐리어 상에 인코딩된 하나 이상의 컴퓨터 프로그램들, 즉, 컴퓨터 프로그램 명령들의 하나 이상의 모듈들로서 구현될 수 있다. 대안적으로 또는 부가하여, 프로그램 명령들은 인공적으로 생성된 전파 신호, 예컨대 기계-생성의 전기, 광학 또는 전자기 신호 상에 인코딩될 수 있으며, 이러한 신호는 데이터 프로세싱 장치에 의한 실행을 위해 적절한 수신기 장치로의 송신을 위한 정보를 인코딩하기 위해 생성된다. 컴퓨터 저장 매체는, 기계-판독가능 저장 디바이스, 기계-판독가능 저장 기판, 랜덤 또는 시리얼 액세스 메모리 디바이스, 또는 그들 중 하나 또는 그 초과의 결합일 수 있다.
[00207] 본 명세서에서 설명된 프로세스들 및 논리 흐름들은, 입력 데이터에 대해 동작하고 출력(들)을 생성함으로써 기능들을 수행하도록 하나 이상의 컴퓨터 프로그램들을 실행하는 하나 이상의 프로그램가능 컴퓨터들에 의해 수행될 수 있다. 프로세스들 및 논리 흐름들은 또한, 특수 목적 논리 회로소자, 예컨대, FPGA(field programmable gate array), ASIC(application specific integrated circuit) 또는 GPGPU(General purpose graphics processing unit)에 의해 수행될 수 있거나, 또는 장치가 또한 그들로서 구현될 수 있다.
[00208] 컴퓨터 프로그램의 실행에 적절한 컴퓨터들은 범용 또는 특수 목적 마이크로프로세서들 또는 둘 모두, 또는 임의의 다른 종류의 중앙 프로세싱 유닛을 포함하는데, 예로서, 이에 기초할 수 있다. 일반적으로, 중앙 프로세싱 유닛은 판독 전용 메모리 또는 랜덤 액세스 메모리 또는 둘 모두로부터 명령들 및 데이터를 수신할 것이다. 컴퓨터의 필수적인 엘리먼트들은 명령들을 수행하하거나 또는 실행하기 위한 중앙 프로세싱 유닛, 그리고 명령들 및 데이터를 저장하기 위한 하나 이상의 메모리 디바이스들이다. 일반적으로, 컴퓨터는 또한, 데이터를 저장하기 위한 하나 이상의 대용량 저장 디바이스들, 예컨대 자기적, 마그네토 광학 디스크들 또는 광학 디스크들을 포함하거나, 또는 이들로부터 데이터를 수신하거나 또는 이들에 데이터를 전달하거나 또는 둘 모두를 위해 동작가능하게 커플링될 것이다. 그러나, 컴퓨터가 이러한 디바이스들을 가질 필요는 없다.
[00209] 컴퓨터 프로그램 명령들 및 데이터를 저장하기에 적절한 컴퓨터 판독가능 매체는, 예로서 반도체 메모리 디바이스들, 예컨대 EPROM, EEPROM, 및 플래시 메모리 디바이스들; 자기 디스크들, 예컨대 내부 하드 디스크들 또는 착탈형 디스크들을 포함하는 모든 형태들의 비-휘발성 메모리, 매체 및 메모리 디바이스들을 포함한다. 프로세서 및 메모리는 특수 목적 논리 회로소자에 의해 보충되거나 또는 특수 목적 논리 회로소자에 통합될 수 있다.
[00210] 본 명세서가 많은 특정 구현 세부사항들을 포함하지만, 이들은 임의의 발명 또는 청구될 수 있는 것의 범위에 대한 제한들로서 해석되는 것이 아니라, 그보다는, 특정 발명들의 특정 실시예들에 특정할 수 있는 특징들의 설명들로서 해석되어야 한다. 별개의 실시예들의 맥락에서 본 명세서에 설명되는 소정의 특징들은 또한, 단일 실시예로의 결합으로 구현될 수 있다. 반대로, 단일 실시예의 맥락에서 설명되는 다양한 특징들은 또한, 별개로 다수의 실시예들에서 또는 임의의 적절한 하위결합으로 구현될 수 있다. 게다가, 특징들이 소정의 결합들에서 동작하는 것으로서 위에서 설명되고 심지어 초기에는 그와 같이 청구될 수 있지만, 청구되는 결합으로부터의 하나 이상의 특징들은, 일부 경우들에서, 이 결합으로부터 삭제될 수 있으며, 청구되는 결합은 하위결합 또는 하위결합의 변형에 관한 것일 수 있다.
[00211] 유사하게, 동작들이 특정 순서로 도면들에서 묘사되지만, 이는, 바람직한 결과들을 달성하기 위해, 이러한 동작들이 도시된 특정 순서로 또는 순차적인 순서로 수행되거나 또는 모든 예시된 동작들이 수행될 것을 요구하는 것으로서 이해되지 않아야 한다. 소정의 상황들에서, 멀티태스킹 및 병렬 프로세싱이 유리할 수 있다. 게다가, 위에서 설명된 실시예들에서의 다양한 시스템 모듈들 및 구성요소들의 분리는 모든 실시예들에서 이러한 분리를 요구하는 것으로서 이해되지 않아야 하며, 설명된 프로그램 구성요소들 및 시스템들이 일반적으로, 단일 소프트웨어 제품에 함께 통합되거나 또는 다수의 소프트웨어 제품들로 패키징될 수 있다는 것이 이해되어야 한다.
[00212] 발명의 요지의 특정 실시예들이 설명되었다. 다른 실시예들은 다음의 청구항들의 범위 내에 있다. 예컨대, 청구항들에서 언급된 액션들은, 상이한 순서로 수행될 수 있으며, 여전히, 바람직한 결과들을 달성할 수 있다. 하나의 예로서, 첨부된 도면들에 묘사된 프로세스들은, 바람직한 결과들을 달성하기 위해, 도시된 특정 순서 또는 순차적인 순서를 반드시 요구하지는 않는다. 소정의 구현들에서, 멀티태스킹 및 병렬 프로세싱이 유리할 수 있다.

Claims (20)

  1. 다수의 신경망 계층들을 갖는 신경망을 위한 신경망 계산들에 관한 이벤트 데이터를 수집하는 방법으로서,
    신경망을 구현하도록 구성된 프로세서의 구성요소들을 이용하여 상기 신경망 계산들을 수행하기 위한 프로그램 코드를 실행하는 단계;
    상기 프로그램 코드에서 글로벌 트리거에 대응하는 파라미터를 식별하는 단계;
    상기 파라미터의 제1 값에 기초하여, 상기 프로그램 코드를 실행하는 동안 상기 글로벌 트리거가 충족됨을 검출하는 단계;
    상기 글로벌 트리거가 충족됨을 검출하는 것에 응답하여 이벤트 데이터를 생성하는 단계 ― 상기 이벤트 데이터는, 상기 신경망 계산들을 수행하는 동안 상기 프로세서의 둘 이상의 구성요소들 사이에서 동기화되는 추적 이벤트에 기초하여 생성됨 ―; 및
    상기 신경망 계산들을 수행하는 동안 상기 프로그램 코드를 분석할 수 있도록 상기 이벤트 데이터를 호스트에게 제공하는 단계
    를 포함하는,
    이벤트 데이터를 수집하는 방법.
  2. 제1항에 있어서,
    상기 프로세서의 제1 구성요소에 배치된 복수의 추적 버퍼들 중 하나 이상의 추적 버퍼들에 상기 이벤트 데이터를 저장하는 단계; 및
    상기 프로세서의 제어 레지스터에, 글로벌 추적 이벤트를 트리거하는데 사용되는 참조 값으로서 상기 파라미터를 위한 바이너리 데이터를 저장하는 단계
    를 포함하는,
    이벤트 데이터를 수집하는 방법.
  3. 제2항에 있어서,
    상기 제어 레지스터에 저장된 상기 바이너리 데이터의 상기 참조 값에 기초하여, 상기 프로세서가 상기 신경망 계산들을 수행할 때 상기 프로세서의 다수의 구성요소들 사이에서 동기화되는 글로벌 추적 이벤트를 트리거하는 단계를 포함하는,
    이벤트 데이터를 수집하는 방법.
  4. 제3항에 있어서,
    상기 신경망 계산들을 수행하기 위한 프로그램 코드를 실행하는 단계는, 상기 신경망을 이용하여 추론 작업부하의 벡터 엘리먼트들을 처리하기 위한 동작들의 시퀀스를 실행하는 단계를 포함하는,
    이벤트 데이터를 수집하는 방법.
  5. 제4항에 있어서,
    상기 참조 값은 상기 동작들의 시퀀스에서 특정 단계를 지정하고,
    상기 글로벌 트리거가 충족됨을 검출하는 단계는, 상기 동작들의 시퀀스에서의 현재 단계와 상기 제어 레지스터에 저장된 상기 참조 값과의 차이를 계산하는 단계를 포함하는,
    이벤트 데이터를 수집하는 방법.
  6. 제4항에 있어서,
    상기 이벤트 데이터의 서브세트는, 상기 신경망 계산들을 수행하기 위해 상기 프로세서에 의해 실행되는 복수의 메모리 액세스 동작들을 기술하고,
    상기 동작들의 시퀀스는, 상기 벡터 엘리먼트들을 상기 제1 구성요소의 제1 메모리로부터 상기 프로세서의 제2 구성요소의 제2 메모리로 이동시키는 것을 포함하는,
    이벤트 데이터를 수집하는 방법.
  7. 제6항에 있어서,
    상기 글로벌 트리거가 충족됨을 검출하는 것에 응답하여 이벤트 데이터를 생성하는 단계는,
    상기 벡터 엘리먼트들을 상기 제1 구성요소의 제1 메모리로부터 상기 제2 구성요소의 제2 메모리로 이동시키는 동안, 상기 제1 구성요소와 상기 제2 구성요소 사이에서 동기화되는 추적 이벤트에 기초하여 상기 이벤트 데이터의 서브세트를 생성하는 단계를 포함하는,
    이벤트 데이터를 수집하는 방법.
  8. 제1항에 있어서,
    상기 프로세서에서 실행하기 위한 상기 프로그램 코드를 컴파일링하는 것에 대한 응답으로, 상기 호스트가 상기 글로벌 트리거를 임베딩하는 단계; 및
    상기 호스트가 상기 컴파일링된 프로그램 코드를 로딩하는 단계
    를 포함하고,
    상기 컴파일링된 프로그램 코드는, 상기 컴파일링된 프로그램 코드에 명령어로서 임베딩된 상기 글로벌 트리거를 포함하는,
    이벤트 데이터를 수집하는 방법.
  9. 다수의 신경망 계층들을 갖는 신경망을 위한 신경망 계산들에 관한 이벤트 데이터를 수집하는 이벤트 수집 시스템으로서,
    하나 이상의 프로세싱 디바이스들; 및
    상기 하나 이상의 프로세싱 디바이스들에 의해 실행가능한, 동작들을 수행하게 하는 명령들을 저장하기 위한 하나 이상의 비일시적 기계-판독 가능 저장 디바이스들
    을 포함하고,
    상기 동작들은,
    신경망을 구현하도록 구성된 프로세서의 구성요소들을 이용하여 상기 신경망 계산들을 수행하기 위한 프로그램 코드를 실행하는 동작;
    상기 프로그램 코드에서 글로벌 트리거에 대응하는 파라미터를 식별하는 동작;
    상기 파라미터의 제1 값에 기초하여, 상기 프로그램 코드를 실행하는 동안 상기 글로벌 트리거가 충족됨을 검출하는 동작;
    상기 글로벌 트리거가 충족됨을 검출하는 것에 응답하여 이벤트 데이터를 생성하는 동작 ― 상기 이벤트 데이터는, 상기 신경망 계산들을 수행하는 동안 상기 프로세서의 둘 이상의 구성요소들 사이에서 동기화되는 추적 이벤트에 기초하여 생성됨 ―; 및
    상기 신경망 계산들을 수행하는 동안 상기 프로그램 코드를 분석할 수 있도록 상기 이벤트 데이터를 호스트에게 제공하는 동작
    을 포함하는,
    이벤트 수집 시스템.
  10. 제9항에 있어서,
    상기 동작들은,
    상기 프로세서의 제1 구성요소에 배치된 복수의 추적 버퍼들 중 하나 이상의 추적 버퍼들에 상기 이벤트 데이터를 저장하는 동작; 및
    상기 프로세서의 제어 레지스터에, 글로벌 추적 이벤트를 트리거하는데 사용되는 참조 값으로서 상기 파라미터를 위한 바이너리 데이터를 저장하는 동작
    을 포함하는,
    이벤트 수집 시스템.
  11. 제10항에 있어서,
    상기 동작들은,
    상기 제어 레지스터에 저장된 상기 바이너리 데이터의 상기 참조 값에 기초하여, 상기 프로세서가 상기 신경망 계산들을 수행할 때 상기 프로세서의 다수의 구성요소들 사이에서 동기화되는 글로벌 추적 이벤트를 트리거하는 동작을 포함하는,
    이벤트 수집 시스템.
  12. 제11항에 있어서,
    상기 신경망 계산들을 수행하기 위한 프로그램 코드를 실행하는 동작은, 상기 신경망을 이용하여 추론 작업부하의 벡터 엘리먼트들을 처리하기 위한 동작들의 시퀀스를 실행하는 동작을 포함하는,
    이벤트 수집 시스템.
  13. 제12항에 있어서,
    상기 참조 값은 상기 동작들의 시퀀스에서 특정 단계를 지정하고,
    상기 글로벌 트리거가 충족됨을 검출하는 동작은, 상기 동작들의 시퀀스에서의 현재 단계와 상기 제어 레지스터에 저장된 상기 참조 값과의 차이를 계산하는 동작을 포함하는,
    이벤트 수집 시스템.
  14. 제12항에 있어서,
    상기 이벤트 데이터의 서브세트는, 상기 신경망 계산들을 수행하기 위해 상기 프로세서에 의해 실행되는 복수의 메모리 액세스 동작들을 기술하고,
    상기 동작들의 시퀀스는, 상기 벡터 엘리먼트들을 상기 제1 구성요소의 제1 메모리로부터 상기 프로세서의 제2 구성요소의 제2 메모리로 이동시키는 것을 포함하는,
    이벤트 수집 시스템.
  15. 제14항에 있어서,
    상기 글로벌 트리거가 충족됨을 검출하는 것에 응답하여 이벤트 데이터를 생성하는 동작은,
    상기 벡터 엘리먼트들을 상기 제1 구성요소의 제1 메모리로부터 상기 제2 구성요소의 제2 메모리로 이동시키는 동안, 상기 제1 구성요소와 상기 제2 구성요소 사이에서 동기화되는 추적 이벤트에 기초하여 상기 이벤트 데이터의 서브세트를 생성하는 동작을 포함하는,
    이벤트 수집 시스템.
  16. 제9항에 있어서,
    상기 동작들은,
    상기 프로세서에서 실행하기 위한 상기 프로그램 코드를 컴파일링하는 것에 대한 응답으로, 상기 호스트가 상기 글로벌 트리거를 임베딩하는 동작; 및
    상기 호스트가 상기 컴파일링된 프로그램 코드를 로딩하는 동작
    을 포함하고,
    상기 컴파일링된 프로그램 코드는, 상기 컴파일링된 프로그램 코드에 명령어로서 임베딩된 상기 글로벌 트리거를 포함하는,
    이벤트 수집 시스템.
  17. 하나 이상의 프로세싱 디바이스들에 의해 실행가능한, 다수의 신경망 계층들을 갖는 신경망을 위한 신경망 계산들에 관한 이벤트 데이터를 수집하는 동작들을 수행하게 하는 명령들을 저장하기 위한 하나 이상의 비일시적 기계-판독 가능 저장 디바이스들로서,
    상기 동작들은,
    신경망을 구현하도록 구성된 프로세서의 구성요소들을 이용하여 상기 신경망 계산들을 수행하기 위한 프로그램 코드를 실행하는 동작;
    상기 프로그램 코드에서 글로벌 트리거에 대응하는 파라미터를 식별하는 동작;
    상기 파라미터의 제1 값에 기초하여, 상기 프로그램 코드를 실행하는 동안 상기 글로벌 트리거가 충족됨을 검출하는 동작;
    상기 글로벌 트리거가 충족됨을 검출하는 것에 응답하여 이벤트 데이터를 생성하는 동작 ― 상기 이벤트 데이터는, 상기 신경망 계산들을 수행하는 동안 상기 프로세서의 둘 이상의 구성요소들 사이에서 동기화되는 추적 이벤트에 기초하여 생성됨 ―; 및
    상기 신경망 계산들을 수행하는 동안 상기 프로그램 코드를 분석할 수 있도록 상기 이벤트 데이터를 호스트에게 제공하는 동작
    을 포함하는,
    기계-판독 가능 저장 디바이스들.
  18. 제17항에 있어서,
    상기 동작들은,
    상기 프로세서의 제1 구성요소에 배치된 복수의 추적 버퍼들 중 하나 이상의 추적 버퍼들에 상기 이벤트 데이터를 저장하는 동작; 및
    상기 프로세서의 제어 레지스터에, 글로벌 추적 이벤트를 트리거하는데 사용되는 참조 값으로서 상기 파라미터를 위한 바이너리 데이터를 저장하는 동작
    을 포함하는,
    기계-판독 가능 저장 디바이스들.
  19. 제18항에 있어서,
    상기 동작들은,
    상기 제어 레지스터에 저장된 상기 바이너리 데이터의 상기 참조 값에 기초하여, 상기 프로세서가 상기 신경망 계산들을 수행할 때 상기 프로세서의 다수의 구성요소들 사이에서 동기화되는 글로벌 추적 이벤트를 트리거하는 동작을 포함하는,
    기계-판독 가능 저장 디바이스들.
  20. 제19항에 있어서,
    상기 신경망 계산들을 수행하기 위한 프로그램 코드를 실행하는 동작은, 상기 신경망을 이용하여 추론 작업부하의 벡터 엘리먼트들을 처리하기 위한 동작들의 시퀀스를 실행하는 동작을 포함하고,
    상기 참조 값은 상기 동작들의 시퀀스에서 특정 단계를 지정하며,
    상기 글로벌 트리거가 충족됨을 검출하는 동작은, 상기 동작들의 시퀀스에서의 현재 단계와 상기 제어 레지스터에 저장된 상기 참조 값과의 차이를 계산하는 동작을 포함하는,
    기계-판독 가능 저장 디바이스들.
KR1020217026813A 2017-03-29 2017-10-20 동기 하드웨어 이벤트 수집 KR102493495B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020237002919A KR102584961B1 (ko) 2017-03-29 2017-10-20 동기 하드웨어 이벤트 수집

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US15/472,932 US10365987B2 (en) 2017-03-29 2017-03-29 Synchronous hardware event collection
US15/472,932 2017-03-29
KR1020197021959A KR102295511B1 (ko) 2017-03-29 2017-10-20 동기 하드웨어 이벤트 수집
PCT/US2017/057638 WO2018182783A1 (en) 2017-03-29 2017-10-20 Synchronous hardware event collection

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020197021959A Division KR102295511B1 (ko) 2017-03-29 2017-10-20 동기 하드웨어 이벤트 수집

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020237002919A Division KR102584961B1 (ko) 2017-03-29 2017-10-20 동기 하드웨어 이벤트 수집

Publications (2)

Publication Number Publication Date
KR20210107174A true KR20210107174A (ko) 2021-08-31
KR102493495B1 KR102493495B1 (ko) 2023-01-27

Family

ID=60201424

Family Applications (3)

Application Number Title Priority Date Filing Date
KR1020217026813A KR102493495B1 (ko) 2017-03-29 2017-10-20 동기 하드웨어 이벤트 수집
KR1020197021959A KR102295511B1 (ko) 2017-03-29 2017-10-20 동기 하드웨어 이벤트 수집
KR1020237002919A KR102584961B1 (ko) 2017-03-29 2017-10-20 동기 하드웨어 이벤트 수집

Family Applications After (2)

Application Number Title Priority Date Filing Date
KR1020197021959A KR102295511B1 (ko) 2017-03-29 2017-10-20 동기 하드웨어 이벤트 수집
KR1020237002919A KR102584961B1 (ko) 2017-03-29 2017-10-20 동기 하드웨어 이벤트 수집

Country Status (12)

Country Link
US (3) US10365987B2 (ko)
EP (1) EP3382552A1 (ko)
JP (3) JP7196083B2 (ko)
KR (3) KR102493495B1 (ko)
CN (2) CN108694109B (ko)
BR (1) BR112019015427B1 (ko)
DE (2) DE202017106508U1 (ko)
GB (1) GB2561043B (ko)
HK (1) HK1259155A1 (ko)
SG (1) SG11201906749UA (ko)
TW (3) TWI808280B (ko)
WO (1) WO2018182783A1 (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20230049284A (ko) * 2021-10-06 2023-04-13 에스케이텔레콤 주식회사 무선통신시스템에서 원거리 통신을 위한 통신 장치 및 이를 위한 방법
WO2023128009A1 (ko) * 2021-12-30 2023-07-06 리벨리온 주식회사 뉴럴 프로세싱 장치 및 그의 동기화 방법

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP3430767B1 (en) * 2016-03-16 2020-09-23 Telefonaktiebolaget LM Ericsson (PUBL) Method and device for real-time network event processing
US9875167B1 (en) 2017-03-29 2018-01-23 Google Inc. Distributed hardware tracing
US10365987B2 (en) 2017-03-29 2019-07-30 Google Llc Synchronous hardware event collection
US11144087B2 (en) * 2018-08-10 2021-10-12 Nvidia Corporation Efficient performance monitoring of integrated circuit(s) having distributed clocks
CN109981349B (zh) * 2019-02-27 2022-02-25 华为云计算技术有限公司 调用链信息查询方法以及设备
CN110046116B (zh) * 2019-04-23 2020-08-21 上海燧原智能科技有限公司 一种张量填充方法、装置、设备及存储介质
CN110311863B (zh) * 2019-05-09 2020-08-21 北京邮电大学 一种路由路径确定方法及装置
US11294750B2 (en) * 2019-07-15 2022-04-05 Micron Technology, Inc. Media management logger for a memory sub-system
US20220326988A1 (en) * 2019-08-16 2022-10-13 Google Llc Explicit scheduling of on-chip operations
US11630919B1 (en) * 2019-09-30 2023-04-18 Amazon Technologies, Inc. Management of sensitive data using static code analysis
CN111160558B (zh) * 2019-12-13 2023-04-28 合肥本源量子计算科技有限责任公司 量子芯片控制器、量子计算处理系统和电子设备
EP3839740A1 (en) * 2019-12-20 2021-06-23 GrAl Matter Labs S.A.S. Message-based processing system and method of operating the same
JP2023516295A (ja) * 2020-02-27 2023-04-19 シーメンス・ヘルスケア・ダイアグノスティックス・インコーポレイテッド 機械学習を用いた自動センサトレース検証
US11100166B1 (en) 2020-12-21 2021-08-24 Coupang Corp. Systems and methods for automatically updating guaranteed computing counters
US20220198110A1 (en) * 2020-12-23 2022-06-23 Intel Corporation Debugging architecture for system in package composed of multiple semiconductor chips
KR20230157503A (ko) * 2021-03-31 2023-11-16 후아웨이 테크놀러지 컴퍼니 리미티드 동기화 방법 및 장치
US11966745B2 (en) 2021-11-15 2024-04-23 Google Llc Sparse SIMD cross-lane processing unit
US11972263B2 (en) 2021-11-22 2024-04-30 Google Llc Cooperative instruction prefetch on multicore system
US11977499B2 (en) * 2022-03-22 2024-05-07 Google Llc Streaming transfers and ordering model
US11899516B1 (en) 2023-07-13 2024-02-13 T-Mobile Usa, Inc. Creation of a digital twin for auto-discovery of hierarchy in power monitoring

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5796939A (en) * 1997-03-10 1998-08-18 Digital Equipment Corporation High frequency sampling of processor performance counters
US6353924B1 (en) * 1999-02-08 2002-03-05 Incert Software Corporation Method for back tracing program execution
US20110219376A1 (en) * 2010-03-03 2011-09-08 Arm Limited Method, apparatus and trace module for generating timestamps
US20130042155A1 (en) * 2011-08-11 2013-02-14 Timothy J. Millet Non-intrusive processor tracing
US8407528B2 (en) * 2009-06-30 2013-03-26 Texas Instruments Incorporated Circuits, systems, apparatus and processes for monitoring activity in multi-processing systems

Family Cites Families (84)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4598364A (en) 1983-06-29 1986-07-01 International Business Machines Corporation Efficient trace method adaptable to multiprocessors
JPH0283749A (ja) 1988-09-21 1990-03-23 Hitachi Ltd マイクロプロセッサの内部割込み制御方式
JPH04148439A (ja) 1990-10-12 1992-05-21 Nec Corp 情報処理装置のトレース方式
JPH04242455A (ja) 1991-01-16 1992-08-31 Nec Ibaraki Ltd プロセッサ間通信トレース回路
JPH05128079A (ja) 1991-10-31 1993-05-25 Nec Corp マルチプロセツサシステムにおけるトレース方式
JPH07200352A (ja) 1993-12-28 1995-08-04 Hitachi Ltd データプロセッサ、プログラム翻訳方法、及びデバッグツール
US6128415A (en) 1996-09-06 2000-10-03 Polaroid Corporation Device profiles for use in a digital image processing system
US5682328A (en) 1996-09-11 1997-10-28 Bbn Corporation Centralized computer event data logging system
US6189140B1 (en) 1997-04-08 2001-02-13 Advanced Micro Devices, Inc. Debug interface including logic generating handshake signals between a processor, an input/output port, and a trace logic
US6256775B1 (en) 1997-12-11 2001-07-03 International Business Machines Corporation Facilities for detailed software performance analysis in a multithreaded processor
US6233531B1 (en) 1997-12-19 2001-05-15 Advanced Micro Devices, Inc. Apparatus and method for monitoring the performance of a microprocessor
US6098169A (en) 1997-12-23 2000-08-01 Intel Corporation Thread performance analysis by monitoring processor performance event registers at thread switch
US6134676A (en) 1998-04-30 2000-10-17 International Business Machines Corporation Programmable hardware event monitoring method
EP0992907B1 (en) * 1998-10-06 2005-09-28 Texas Instruments Inc. Trace fifo management
JP2000348007A (ja) 1999-06-03 2000-12-15 Nec Corp マルチプロセッサシステムのための動作トレース時刻同期方式およびその方法
US6530076B1 (en) 1999-12-23 2003-03-04 Bull Hn Information Systems Inc. Data processing system processor dynamic selection of internal signal tracing
US6868376B2 (en) * 2000-03-02 2005-03-15 Texas Instruments Incorporated Debug bi-phase export and data recovery
US6789182B1 (en) 2000-11-13 2004-09-07 Kevin Jay Brothers System and method for logging computer event data and physical components of a complex distributed system
US6813731B2 (en) 2001-02-26 2004-11-02 Emc Corporation Methods and apparatus for accessing trace data
US6769054B1 (en) 2001-02-26 2004-07-27 Emc Corporation System and method for preparation of workload data for replaying in a data storage environment
US6988155B2 (en) 2001-10-01 2006-01-17 International Business Machines Corporation Aggregation of hardware events in multi-node systems
US7080283B1 (en) 2002-10-15 2006-07-18 Tensilica, Inc. Simultaneous real-time trace and debug for multiple processing core systems on a chip
US7069176B2 (en) 2003-08-07 2006-06-27 Arm Limited Trace source correlation in a data processing apparatus
JP2005165825A (ja) 2003-12-04 2005-06-23 Canon Inc トレース情報記録装置
US7529979B2 (en) 2003-12-12 2009-05-05 International Business Machines Corporation Hardware/software based indirect time stamping methodology for proactive hardware/software event detection and control
US20060005083A1 (en) 2004-06-30 2006-01-05 International Business Machines Corporation Performance count tracing
GB0420442D0 (en) 2004-09-14 2004-10-20 Ignios Ltd Debug in a multicore architecture
US9038070B2 (en) 2004-09-14 2015-05-19 Synopsys, Inc. Debug in a multicore architecture
US7543161B2 (en) 2004-09-30 2009-06-02 International Business Machines Corporation Method and apparatus for tracking variable speed microprocessor performance caused by power management in a logically partitioned data processing system
US7673050B2 (en) 2004-12-17 2010-03-02 Microsoft Corporation System and method for optimizing server resources while providing interaction with documents accessible through the server
US7418629B2 (en) 2005-02-11 2008-08-26 International Business Machines Corporation Synchronizing triggering of multiple hardware trace facilities using an existing system bus
JP2006318412A (ja) 2005-05-16 2006-11-24 Toshiba Corp 半導体装置
US8079037B2 (en) * 2005-10-11 2011-12-13 Knoa Software, Inc. Generic, multi-instance method and GUI detection system for tracking and monitoring computer applications
JP2008234191A (ja) 2007-03-19 2008-10-02 Toshiba Corp ハードウエアモニタ管理装置及びハードウエアモニタ機能の実行方法
US8762951B1 (en) 2007-03-21 2014-06-24 Oracle America, Inc. Apparatus and method for profiling system events in a fine grain multi-threaded multi-core processor
US8181185B2 (en) * 2007-05-31 2012-05-15 Intel Corporation Filtering of performance monitoring information
US20110246521A1 (en) * 2007-08-06 2011-10-06 Hui Luo System and method for discovering image quality information related to diagnostic imaging performance
JP4658182B2 (ja) 2007-11-28 2011-03-23 株式会社荏原製作所 研磨パッドのプロファイル測定方法
US20100083237A1 (en) 2008-09-26 2010-04-01 Arm Limited Reducing trace overheads by modifying trace operations
US8301759B2 (en) 2008-10-24 2012-10-30 Microsoft Corporation Monitoring agent programs in a distributed computing platform
JPWO2010097875A1 (ja) 2009-02-24 2012-08-30 パナソニック株式会社 データ処理装置、方法
JP5326708B2 (ja) 2009-03-18 2013-10-30 富士通株式会社 演算処理装置および演算処理装置の制御方法
US8572581B2 (en) 2009-03-26 2013-10-29 Microsoft Corporation Measurement and reporting of performance event rates
JP5266385B2 (ja) 2009-06-10 2013-08-21 パナソニック株式会社 トレース処理装置およびトレース処理システム
US8554892B2 (en) 2009-06-22 2013-10-08 Citrix Systems, Inc. Systems and methods for n-core statistics aggregation
JP2011013867A (ja) * 2009-06-30 2011-01-20 Panasonic Corp データ処理装置、性能評価解析システム
US20110047358A1 (en) * 2009-08-19 2011-02-24 International Business Machines Corporation In-Data Path Tracking of Floating Point Exceptions and Store-Based Exception Indication
US8495604B2 (en) * 2009-12-30 2013-07-23 International Business Machines Corporation Dynamically distribute a multi-dimensional work set across a multi-core system
JP2011243110A (ja) 2010-05-20 2011-12-01 Renesas Electronics Corp 情報処理装置
US8607202B2 (en) 2010-06-04 2013-12-10 Lsi Corporation Real-time profiling in a multi-core architecture
GB2481385B (en) 2010-06-21 2018-08-15 Advanced Risc Mach Ltd Tracing speculatively executed instructions
US20120042212A1 (en) 2010-08-10 2012-02-16 Gilbert Laurenti Mixed Mode Processor Tracing
US20120179898A1 (en) 2011-01-10 2012-07-12 Apple Inc. System and method for enforcing software security through cpu statistics gathered using hardware features
US20120226839A1 (en) 2011-03-02 2012-09-06 Texas Instruments Incorporated Method and System for Monitoring and Debugging Access to a Bus Slave Using One or More Throughput Counters
US8706937B2 (en) 2011-03-02 2014-04-22 Texas Instruments Incorporated Method and system of debugging multicore bus transaction problems
US8943248B2 (en) 2011-03-02 2015-01-27 Texas Instruments Incorporated Method and system for handling discarded and merged events when monitoring a system bus
US10642709B2 (en) 2011-04-19 2020-05-05 Microsoft Technology Licensing, Llc Processor cache tracing
US8683268B2 (en) 2011-06-20 2014-03-25 International Business Machines Corporation Key based cluster log coalescing
US8935574B2 (en) * 2011-12-16 2015-01-13 Advanced Micro Devices, Inc. Correlating traces in a computing system
US9454462B2 (en) 2012-03-16 2016-09-27 International Business Machines Corporation Run-time instrumentation monitoring for processor characteristic changes
US9237082B2 (en) 2012-03-26 2016-01-12 Hewlett Packard Enterprise Development Lp Packet descriptor trace indicators
US9021311B2 (en) 2012-08-28 2015-04-28 Freescale Semiconductor, Inc. Method and apparatus for filtering trace information
US9645870B2 (en) 2013-06-27 2017-05-09 Atmel Corporation System for debugging DMA system data transfer
CN105579999A (zh) 2013-07-31 2016-05-11 慧与发展有限责任合伙企业 日志分析
JP6122749B2 (ja) 2013-09-30 2017-04-26 ルネサスエレクトロニクス株式会社 コンピュータシステム
TWI514145B (zh) 2013-10-21 2015-12-21 Univ Nat Sun Yat Sen 可儲存除錯資料的處理器、其快取及控制方法
US9684583B2 (en) 2013-11-05 2017-06-20 Texas Instruments Incorporated Trace data export to remote memory using memory mapped write transactions
JP2015114675A (ja) * 2013-12-09 2015-06-22 三菱電機株式会社 アプリケーションソフトウェア加速試験装置および試験方法
JP6258159B2 (ja) 2014-08-26 2018-01-10 株式会社東芝 プログラム情報生成システム、方法、及びプログラム
US20160070636A1 (en) 2014-09-04 2016-03-10 Home Box Office, Inc. Conditional wrapper for program object
EP3035249B1 (en) 2014-12-19 2019-11-27 Intel Corporation Method and apparatus for distributed and cooperative computation in artificial neural networks
CN106033385A (zh) 2015-03-19 2016-10-19 启碁科技股份有限公司 用于追踪程序执行状态的方法与多核心处理系统
WO2016175852A1 (en) 2015-04-30 2016-11-03 Hewlett Packard Enterprise Development Lp Memory module error tracking
US20160378636A1 (en) 2015-06-26 2016-12-29 Intel Corporation Software-Initiated Trace Integrated with Hardware Trace
CN105354136B (zh) 2015-09-25 2018-06-15 华为技术有限公司 一种调试方法、多核处理器和调试设备
US9858167B2 (en) 2015-12-17 2018-01-02 Intel Corporation Monitoring the operation of a processor
US20170371761A1 (en) 2016-06-24 2017-12-28 Advanced Micro Devices, Inc. Real-time performance tracking using dynamic compilation
US9965375B2 (en) 2016-06-28 2018-05-08 Intel Corporation Virtualizing precise event based sampling
US10175980B2 (en) * 2016-10-27 2019-01-08 Google Llc Neural network compute tile
US9959498B1 (en) * 2016-10-27 2018-05-01 Google Llc Neural network instruction set architecture
US10127283B2 (en) 2016-10-31 2018-11-13 International Business Machines Corporation Projecting effect of in-flight streamed data on a relational database
US9875167B1 (en) 2017-03-29 2018-01-23 Google Inc. Distributed hardware tracing
US10365987B2 (en) 2017-03-29 2019-07-30 Google Llc Synchronous hardware event collection
KR101988558B1 (ko) 2017-06-07 2019-06-12 현대오트론 주식회사 멀티 코어를 갖는 마이크로콘트롤러 유닛을 감시하는 감시장치 및 그것의 동작 방법

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5796939A (en) * 1997-03-10 1998-08-18 Digital Equipment Corporation High frequency sampling of processor performance counters
US6353924B1 (en) * 1999-02-08 2002-03-05 Incert Software Corporation Method for back tracing program execution
US8407528B2 (en) * 2009-06-30 2013-03-26 Texas Instruments Incorporated Circuits, systems, apparatus and processes for monitoring activity in multi-processing systems
US20110219376A1 (en) * 2010-03-03 2011-09-08 Arm Limited Method, apparatus and trace module for generating timestamps
US20130042155A1 (en) * 2011-08-11 2013-02-14 Timothy J. Millet Non-intrusive processor tracing

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20230049284A (ko) * 2021-10-06 2023-04-13 에스케이텔레콤 주식회사 무선통신시스템에서 원거리 통신을 위한 통신 장치 및 이를 위한 방법
WO2023128009A1 (ko) * 2021-12-30 2023-07-06 리벨리온 주식회사 뉴럴 프로세싱 장치 및 그의 동기화 방법

Also Published As

Publication number Publication date
KR102493495B1 (ko) 2023-01-27
US20220129364A1 (en) 2022-04-28
JP2024050667A (ja) 2024-04-10
JP2020512613A (ja) 2020-04-23
JP2023036719A (ja) 2023-03-14
EP3382552A1 (en) 2018-10-03
US20180285233A1 (en) 2018-10-04
GB201717925D0 (en) 2017-12-13
US11921611B2 (en) 2024-03-05
KR20190096427A (ko) 2019-08-19
BR112019015427A2 (pt) 2020-03-31
KR20230017927A (ko) 2023-02-06
TW202403538A (zh) 2024-01-16
KR102584961B1 (ko) 2023-10-04
HK1259155A1 (zh) 2019-11-29
US11232012B2 (en) 2022-01-25
BR112019015427B1 (pt) 2022-01-11
SG11201906749UA (en) 2019-08-27
CN108694109A (zh) 2018-10-23
TWI808280B (zh) 2023-07-11
DE202017106508U1 (de) 2018-02-05
CN108694109B (zh) 2022-07-22
US20200019483A1 (en) 2020-01-16
DE102017125180A1 (de) 2018-10-04
CN115168147A (zh) 2022-10-11
TW201837699A (zh) 2018-10-16
WO2018182783A1 (en) 2018-10-04
US10365987B2 (en) 2019-07-30
GB2561043B (en) 2021-01-13
TW202011177A (zh) 2020-03-16
JP7196083B2 (ja) 2022-12-26
JP7427759B2 (ja) 2024-02-05
GB2561043A (en) 2018-10-03
KR102295511B1 (ko) 2021-08-27
TWI681332B (zh) 2020-01-01

Similar Documents

Publication Publication Date Title
KR102295511B1 (ko) 동기 하드웨어 이벤트 수집
KR102464845B1 (ko) 분산형 하드웨어 트레이싱

Legal Events

Date Code Title Description
A107 Divisional application of patent
E902 Notification of reason for refusal
E90F Notification of reason for final refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant