KR20210089791A - 분산형 하드웨어 트레이싱 - Google Patents
분산형 하드웨어 트레이싱 Download PDFInfo
- Publication number
- KR20210089791A KR20210089791A KR1020217021484A KR20217021484A KR20210089791A KR 20210089791 A KR20210089791 A KR 20210089791A KR 1020217021484 A KR1020217021484 A KR 1020217021484A KR 20217021484 A KR20217021484 A KR 20217021484A KR 20210089791 A KR20210089791 A KR 20210089791A
- Authority
- KR
- South Korea
- Prior art keywords
- trace
- processor
- data
- code
- node
- Prior art date
Links
- 238000000034 method Methods 0.000 claims abstract description 47
- 239000000872 buffer Substances 0.000 claims abstract description 22
- 238000012544 monitoring process Methods 0.000 claims abstract description 12
- 238000012545 processing Methods 0.000 claims description 49
- 239000004744 fabric Substances 0.000 claims description 29
- 230000004044 response Effects 0.000 claims description 19
- 238000004458 analytical method Methods 0.000 claims description 18
- 238000004891 communication Methods 0.000 claims description 18
- 230000009471 action Effects 0.000 claims description 5
- 230000008878 coupling Effects 0.000 claims description 4
- 238000010168 coupling process Methods 0.000 claims description 4
- 238000005859 coupling reaction Methods 0.000 claims description 4
- 230000000694 effects Effects 0.000 description 24
- 230000006870 function Effects 0.000 description 16
- 230000008569 process Effects 0.000 description 15
- 238000010586 diagram Methods 0.000 description 11
- 235000008694 Humulus lupulus Nutrition 0.000 description 9
- 238000012546 transfer Methods 0.000 description 9
- 238000004590 computer program Methods 0.000 description 7
- 230000000875 corresponding effect Effects 0.000 description 7
- 238000013461 design Methods 0.000 description 7
- 239000011159 matrix material Substances 0.000 description 5
- 238000001914 filtration Methods 0.000 description 4
- 230000007246 mechanism Effects 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 4
- 230000009467 reduction Effects 0.000 description 4
- 230000001360 synchronised effect Effects 0.000 description 4
- 230000002596 correlated effect Effects 0.000 description 3
- 238000012163 sequencing technique Methods 0.000 description 3
- 238000003491 array Methods 0.000 description 2
- 238000013528 artificial neural network Methods 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 230000001276 controlling effect Effects 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 230000000977 initiatory effect Effects 0.000 description 2
- 229940050561 matrix product Drugs 0.000 description 2
- 238000000926 separation method Methods 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 1
- 239000003795 chemical substances by application Substances 0.000 description 1
- 239000003999 initiator Substances 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 230000000737 periodic effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000012358 sourcing Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
- 230000002123 temporal effect Effects 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/302—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3065—Monitoring arrangements determined by the means or processing involved in reporting the monitored data
- G06F11/3072—Monitoring 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3065—Monitoring arrangements determined by the means or processing involved in reporting the monitored data
- G06F11/3072—Monitoring 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
- G06F11/3075—Monitoring 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 the data filtering being achieved in order to maintain consistency among the monitored data, e.g. ensuring that the monitored data belong to the same timeframe, to the same system or component
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording 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/3466—Performance evaluation by tracing or monitoring
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording 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/3466—Performance evaluation by tracing or monitoring
- G06F11/3476—Data logging
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording 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/3466—Performance evaluation by tracing or monitoring
- G06F11/348—Circuit details, i.e. tracer hardware
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording 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/3466—Performance evaluation by tracing or monitoring
- G06F11/3495—Performance evaluation by tracing or monitoring for systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3636—Software debugging by tracing the execution of the program
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/40—Information retrieval; Database structures therefor; File system structures therefor of multimedia data, e.g. slideshows comprising image and additional audio data
- G06F16/48—Retrieval characterised by using metadata, e.g. metadata not derived from the content or metadata generated manually
- G06F16/489—Retrieval characterised by using metadata, e.g. metadata not derived from the content or metadata generated manually using time information
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/542—Event management; Broadcasting; Multicasting; Notifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/86—Event-based monitoring
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/865—Monitoring of software
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- Multimedia (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Software Systems (AREA)
- Mathematical Physics (AREA)
- Library & Information Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Debugging And Monitoring (AREA)
- Hardware Redundancy (AREA)
Abstract
본 발명은 하나 이상의 프로세서들에 의해 실행되는 컴퓨터-구현 방법이고, 방법은 제1 프로세서 컴포넌트에 의해 실행되는 프로그램 코드의 실행을 모니터링하는 단계; 및 제2 프로세서 컴포넌트에 의해 실행되는 프로그램 코드의 실행을 모니터링하는 단계를 포함한다. 컴퓨팅 시스템은 메모리 버퍼에 하드웨어 이벤트들을 식별하는 데이터를 저장한다. 저장된 이벤트들은 적어도 제1 및 제2 프로세서 컴포넌트들을 포함하는 프로세서 유닛들에 걸쳐 발생한다. 하드웨어 이벤트들 각각은 이벤트 타임스탬프, 및 이벤트를 특징화하는 메타데이터를 포함한다. 시스템은 하드웨어 이벤트들을 식별하는 데이터 구조를 생성한다. 데이터 구조는 시간 순서화된 시퀀스로 이벤트들을 배열하고 이벤트들을 적어도 제1 또는 제2 프로세서 컴포넌트들과 연관시킨다. 시스템은 호스트 디바이스의 메모리 뱅크에 데이터 구조를 저장하고 제1 또는 제2 프로세서 컴포넌트들에 의해 실행되는 프로그램 코드의 성능을 분석하기 위해 데이터 구조를 사용한다.
Description
[0001]
본 출원은 2017년 3월 29일에 출원되고, 대리인 도켓 번호 16113-8129001이고 발명의 명칭이 "Synchronous Hardware Event Collection"인 미국 특허 출원 번호 제 15/472,932호에 관한 것이다. 미국 특허 출원 제 15/472,932호의 전체 개시내용은 그 전체가 본원에 인용에 의해 명확히 통합된다.
[0002]
본 명세서는 프로그램 코드의 실행을 분석하는 것에 관한 것이다.
[0003]
분산형 하드웨어 컴포넌트들 내에서 실행되는 분산형 소프트웨어의 효과적인 성능 분석은 복잡한 태스크일 수 있다. 분산형 하드웨어 컴포넌트들은 더 큰 소프트웨어 프로그램 또는 프로그램 코드의 부분들을 실행하기 위해 협력 및 상호작용하는 2개 이상의 CPU(Central Processing Unit)들(또는 GPU(Graphics Processing Unit)들)의 개별 프로세서 코어들일 수 있다.
[0004]
하드웨어 관점으로부터(예컨대, CPU들 또는 GPU들 내에서), 성능 분석에 이용가능한 일반적으로 2개의 타입들의 정보 또는 피처(feature)들이 있다: 1) 하드웨어 성능 카운터들 및 2) 하드웨어 이벤트 트레이스(trace)들.
[0005]
일반적으로, 본 명세서에 설명된 청구 대상의 일 양상은 하나 이상의 프로세서들에 의해 실행되는 컴퓨터-구현 방법으로 구현될 수 있다. 방법은 제1 프로세서 컴포넌트에 의한 프로그램 코드의 실행을 모니터링하는 단계 ― 제1 프로세서 컴포넌트는 프로그램 코드의 적어도 제1 부분을 실행하도록 구성됨 ―; 및 제2 프로세서 컴포넌트에 의한 프로그램 코드의 실행을 모니터링하는 단계 ― 제2 프로세서 컴포넌트는 프로그램 코드의 적어도 제2 부분을 실행하도록 구성됨 ― 를 포함한다.
[0006]
방법은 컴퓨팅 시스템에 의해 그리고 적어도 하나의 메모리 버퍼에, 제1 프로세서 컴포넌트 및 제2 프로세서 컴포넌트를 포함하는 프로세서 유닛들에 걸쳐 발생하는 하나 이상의 하드웨어 이벤트들을 식별하는 데이터를 저장하는 단계를 더 포함한다. 각각의 하드웨어 이벤트는 프로그램 코드의 메모리 액세스 동작, 프로그램 코드의 발행된 명령, 또는 프로그램 코드의 실행된 명령과 연관된 데이터 통신들 중 적어도 하나를 나타낸다. 하나 이상의 하드웨어 이벤트들 각각을 식별하는 데이터는 하드웨어 이벤트 타임스탬프(time stamp), 및 하드웨어 이벤트를 특징화(characterize)하는 메타데이터를 포함한다. 방법은, 컴퓨팅 시스템에 의해, 하나 이상의 하드웨어 이벤트들을 식별하는 데이터 구조를 생성하는 단계를 포함하고, 데이터 구조는 적어도 제1 프로세서 컴포넌트 및 제2 프로세서 컴포넌트와 연관된 이벤트들의 시간 순서화된 시퀀스로 하나 이상의 하드웨어 이벤트들을 배열하도록 구성된다.
[0007]
방법은, 컴퓨팅 시스템에 의해, 적어도 제1 프로세서 컴포넌트 또는 제2 프로세서 컴포넌트에 의해 실행되는 프로그램 코드의 성능을 분석하는 데 사용하기 위한 호스트 디바이스의 메모리 뱅크(bank)에, 생성된 데이터 구조를 저장하는 단계를 더 포함한다.
[0008]
이들 및 다른 구현들은 다음 특징들 중 하나 이상을 각각 선택적으로 포함할 수 있다. 예컨대, 일부 구현들에서, 방법은, 컴퓨팅 시스템에 의해, 제1 프로세서 컴포넌트 또는 제2 프로세서 컴포넌트 중 적어도 하나에 의해 실행되는 프로그램 코드의 부분들과 연관된 트리거 기능을 검출하는 단계; 및 트리거 기능을 검출하는 것에 대한 응답으로, 컴퓨팅 시스템에 의해, 하나 이상의 하드웨어 이벤트들과 연관된 데이터가 적어도 하나의 메모리 버퍼에 저장되게 하는 적어도 하나의 트레이스 이벤트를 개시하는 단계를 더 포함한다.
[0009]
일부 구현들에서, 트리거 기능은 프로그램 코드의 특정 시퀀스 단계 또는 프로세서 유닛들에 의해 사용되는 글로벌 시간 클록(global time clock)에 의해 표시된 특정 시간 파라미터 중 적어도 하나에 대응하고; 그리고 적어도 하나의 트레이스 이벤트를 개시하는 단계는, 트레이스 비트가 특정 값으로 세팅된다고 결정하는 단계를 포함하고, 적어도 하나의 트레이스 이벤트는 프로세서 유닛들에 걸쳐 발생하는 다수의 중간 동작들을 포함하는 메모리 액세스 동작과 연관되고, 그리고 다수의 중간 동작들과 연관된 데이터는, 트레이스 비트 비트가 특정 값으로 세팅된다고 결정하는 것에 대한 응답으로 하나 이상의 메모리 버퍼들에 저장된다.
[0010]
일부 구현들에서, 하나 이상의 하드웨어 이벤트들을 식별하는 데이터를 저장하는 단계는, 제1 프로세서 컴포넌트의 제1 메모리 버퍼에, 하나 이상의 하드웨어 이벤트들의 하드웨어 이벤트들을 식별하는 데이터의 제1 서브세트를 저장하는 단계를 더 포함한다. 저장하는 단계는 제1 프로세서 컴포넌트가 프로그램 코드의 적어도 제1 부분과 연관된 하드웨어 트레이스 비트 명령을 실행하는 것에 대한 응답으로 발생한다.
[0011]
일부 구현들에서, 하나 이상의 하드웨어 이벤트들을 식별하는 데이터를 저장하는 단계는, 제2 프로세서 컴포넌트의 제2 메모리 버퍼에, 하나 이상의 하드웨어 이벤트들의 하드웨어 이벤트들을 식별하는 데이터의 제2 서브세트를 저장하는 단계를 더 포함한다. 저장하는 단계는 제2 프로세서 컴포넌트가 프로그램 코드의 적어도 제2 부분과 연관된 하드웨어 트레이스 비트 명령을 실행하는 것에 대한 응답으로 발생한다.
[0012]
일부 구현들에서, 데이터 구조를 생성하는 단계는, 컴퓨팅 시스템에 의해, 하드웨어 이벤트들을 식별하는 데이터의 제1 서브세트 내의 적어도 개별 이벤트들의 하드웨어 이벤트 타임스탬프들을 하드웨어 이벤트들을 식별하는 데이터의 제2 서브세트 내의 적어도 개별 이벤트들의 하드웨어 이벤트 타임스탬프들과 비교하는 단계; 및 컴퓨팅 시스템에 의해 그리고 데이터 구조에서의 프리젠테이션(presentation)을 위해, 제1 서브세트 내의 개별 이벤트들과 제2 서브세트 내의 개별 이벤트들 사이의 비교에 부분적으로 기반하여 하드웨어 이벤트들의 상관된 세트를 제공하는 단계를 더 포함한다.
[0013]
일부 구현들에서, 생성된 데이터 구조는 특정 하드웨어 이벤트의 레이턴시 속성을 표시하는 적어도 하나의 파라미터를 식별하고, 레이턴시 속성은 적어도 특정 하드웨어 이벤트의 지속기간을 표시한다. 일부 구현들에서, 컴퓨팅 시스템의 적어도 하나의 프로세서는 하나 이상의 프로세서 컴포넌트들을 가진 멀티-코어 멀티-코드 프로세서이고, 그리고 하나 이상의 하드웨어 이벤트들은 부분적으로, 적어도 제1 노드의 제1 프로세서 컴포넌트와 제2 노드의 제2 프로세서 컴포넌트 사이에서 발생하는 데이터 전달들에 대응한다.
[0014]
일부 구현들에서, 제1 프로세서 컴포넌트 및 제2 프로세서 컴포넌트는, 컴퓨팅 시스템의 프로세서, 프로세서 코어, 메모리 액세스 엔진, 또는 하드웨어 피처 중 하나이고, 그리고 하나 이상의 하드웨어 이벤트들은 부분적으로, 소스와 목적지 사이에서의 데이터 패킷들의 이동에 대응하고; 그리고 하드웨어 이벤트를 특징화하는 메타데이터는 소스 메모리 어드레스, 목적지 메모리 어드레스, 고유 트레이스 비트 식별 번호, 또는 직접 메모리 액세스(DMA) 트레이스와 연관된 크기 파라미터 중 적어도 하나에 대응한다.
[0015]
일부 구현들에서, 특정 트레이스 (ID) 번호는 프로세서 유닛들에 걸쳐 발생하는 다수의 하드웨어 이벤트들과 연관되고, 그리고 다수의 하드웨어 이벤트들은 특정 메모리 액세스 동작에 대응하고, 그리고 특정 트레이스 ID 번호는 다수의 하드웨어 이벤트들 중 하나 이상의 하드웨어 이벤트들을 상관시키는 데 사용되고 상관에 기반하여 메모리 액세스 동작의 레이턴시 속성을 결정하는 데 사용된다.
[0016]
본 명세서에 설명된 청구 대상의 다른 양상은 분산형 하드웨어 트레이싱 시스템으로 구현될 수 있고, 분산형 하드웨어 트레이싱 시스템은, 하나 이상의 프로세서 코어들을 포함하는 하나 이상의 프로세서들; 동작들을 수행하도록 하나 이상의 프로세서들에 의해 실행가능한 명령들을 저장하기 위한 하나 이상의 기계-판독가능 저장 유닛들을 포함하고, 그 동작들은, 제1 프로세서 컴포넌트에 의한 프로그램 코드의 실행을 모니터링하는 동작 ― 제1 프로세서 컴포넌트는 프로그램 코드의 적어도 제1 부분을 실행하도록 구성됨 ―; 및 제2 프로세서 컴포넌트에 의한 프로그램 코드의 실행을 모니터링하는 동작 ― 제2 프로세서 컴포넌트는 프로그램 코드의 적어도 제2 부분을 실행하도록 구성됨 ― 을 포함한다.
[0017]
방법은 컴퓨팅 시스템에 의해 그리고 적어도 하나의 메모리 버퍼에, 제1 프로세서 컴포넌트 및 제2 프로세서 컴포넌트를 포함하는 프로세서 유닛들에 걸쳐 발생하는 하나 이상의 하드웨어 이벤트들을 식별하는 데이터를 저장하는 단계를 더 포함한다. 각각의 하드웨어 이벤트는 프로그램 코드의 메모리 액세스 동작, 프로그램 코드의 발행된 명령, 또는 프로그램 코드의 실행된 명령과 연관된 데이터 통신들 중 적어도 하나를 나타낸다. 하나 이상의 하드웨어 이벤트들 각각을 식별하는 데이터는 하드웨어 이벤트 타임스탬프, 및 하드웨어 이벤트를 특징화하는 메타데이터를 포함한다. 방법은, 컴퓨팅 시스템에 의해, 하나 이상의 하드웨어 이벤트들을 식별하는 데이터 구조를 생성하는 단계를 포함하고, 데이터 구조는 적어도 제1 프로세서 컴포넌트 및 제2 프로세서 컴포넌트와 연관된 이벤트들의 시간 순서화된 시퀀스로 하나 이상의 하드웨어 이벤트들을 배열하도록 구성된다.
[0018]
방법은, 컴퓨팅 시스템에 의해, 적어도 제1 프로세서 컴포넌트 또는 제2 프로세서 컴포넌트에 의해 실행되는 프로그램 코드의 성능을 분석하는 데 사용하기 위한 호스트 디바이스의 메모리 뱅크에, 생성된 데이터 구조를 저장하는 단계를 더 포함한다.
[0019]
이런 양상 및 다른 양상의 다른 구현들은 대응하는 시스템들, 장치, 및 방법들의 동작들을 수행하도록 구성되고, 컴퓨터 저장 디바이스들 상에 인코딩된 컴퓨터 프로그램들을 포함한다. 따라서, 하나 이상의 컴퓨터들의 시스템은 소프트웨어, 펌웨어, 하드웨어, 또는 동작 시 시스템으로 하여금 동작들을 수행하게 하는 시스템 상에 설치된 이들의 조합에 의해 구성될 수 있다. 따라서, 하나 이상의 컴퓨터 프로그램들은, 데이터 프로세싱 장치에 의해 실행될 때, 장치로 하여금 동작들을 수행하게 하는 명령들을 가짐으로써 구성될 수 있다.
[0020]
본 명세서에 설명된 청구 대상은 다음 장점들 중 하나 이상을 실현하기 위해 특정 실시예들로 구현될 수 있다. 설명된 하드웨어 트레이싱 시스템들은 멀티-노드 멀티-코어 프로세서들을 포함하는 분산형 프로세싱 유닛들에 의한 분산형 소프트웨어 프로그램의 실행 동안 발생하는 하드웨어 이벤트들의 효율적인 상관을 가능하게 한다. 설명된 하드웨어 트레이싱 시스템은 다수의 교차-노드 구성들에서 하드웨어 이벤트들/트레이스 데이터의 수집 및 상관을 가능하게 하는 메커니즘들을 더 포함한다.
[0021]
하드웨어 트레이싱 시스템은 하드웨어 노브(knob)들/피처들을 통해 실행되는 동적 트리거들을 사용함으로써 계산 효율성을 향상시킨다. 게다가, 하드웨어 이벤트들은 이벤트 디스크립터(descriptor)들, 이를테면 고유 트레이스 식별자들, 이벤트 타임스탬프들, 이벤트 소스-어드레스 및 이벤트 목적지-어드레스를 사용하여 시퀀싱 방식으로 시간-순서화될 수 있다. 그런 디스크립터들은 소프트웨어 프로그래머들 및 프로세서 설계 엔지니어들이 소스 코드 실행 동안 발생할 수 있는 소프트웨어 및 하드웨어 성능 문제들을 효과적으로 디버깅(debugging)하고 분석하는 것을 돕는다.
[0022]
본 명세서에 설명된 청구 대상의 하나 이상의 구현들의 세부사항들은 아래의 첨부 도면들 및 상세한 설명에서 설명된다. 청구 대상의 다른 잠재적인 특징들, 양상들 및 장점들은 상세한 설명, 도면들 및 청구항들로부터 명백하게 될 것이다.
[0023]
도 1은 분산형 하드웨어 트레이싱을 위한 예시적인 컴퓨팅 시스템의 블록 다이어그램을 예시한다.
[0024] 도 2는 분산형 하드웨어 트레이싱을 위한 예시적인 컴퓨팅 시스템의 트레이스 체인(chain)들 및 개별 노드들의 블록 다이어그램을 예시한다.
[0025] 도 3은 예시적인 트레이스 멀티플렉서 설계 아키텍처 및 예시적인 데이터 구조의 블록 다이어그램을 예시한다.
[0026] 도 4는 분산형 하드웨어 트레이싱을 위한 예시적인 컴퓨팅 시스템에 의해 실행된 직접 메모리 액세스 트레이스 이벤트에 대한 트레이스 활동을 표시하는 블록 다이어그램이다.
[0027] 도 5는 분산형 하드웨어 트레이싱을 위한 예시적인 프로세스의 프로세스 흐름도이다.
[0028] 다양한 도면들에서 유사한 참조 번호들 및 명칭들은 유사한 엘리먼트들을 표시한다.
[0024] 도 2는 분산형 하드웨어 트레이싱을 위한 예시적인 컴퓨팅 시스템의 트레이스 체인(chain)들 및 개별 노드들의 블록 다이어그램을 예시한다.
[0025] 도 3은 예시적인 트레이스 멀티플렉서 설계 아키텍처 및 예시적인 데이터 구조의 블록 다이어그램을 예시한다.
[0026] 도 4는 분산형 하드웨어 트레이싱을 위한 예시적인 컴퓨팅 시스템에 의해 실행된 직접 메모리 액세스 트레이스 이벤트에 대한 트레이스 활동을 표시하는 블록 다이어그램이다.
[0027] 도 5는 분산형 하드웨어 트레이싱을 위한 예시적인 프로세스의 프로세스 흐름도이다.
[0028] 다양한 도면들에서 유사한 참조 번호들 및 명칭들은 유사한 엘리먼트들을 표시한다.
[0029]
본 명세서에 설명된 청구 대상은 일반적으로 분산형 하드웨어 트레이싱에 관한 것이다. 특히, 컴퓨팅 시스템은 하나 이상의 프로세서 코어들에 의해 실행되는 프로그램 코드의 실행을 모니터링한다. 예컨대, 컴퓨팅 시스템은 제1 프로세서 코어에 의해 실행되는 프로그램 코드의 실행 및 적어도 제2 프로세서 코어에 의해 실행되는 프로그램 코드의 실행을 모니터링할 수 있다. 컴퓨팅 시스템은 메모리 버퍼에 하나 이상의 하드웨어 이벤트들을 식별하는 데이터를 저장한다. 이벤트들을 식별하는 저장된 데이터는 적어도 제1 및 제2 프로세서 코어들을 포함하는 분산형 프로세서 유닛들에 걸쳐 발생하는 이벤트들에 대응한다.
[0030]
각각의 하드웨어 이벤트에 대해, 저장된 데이터는 이벤트 타임스탬프 및 하드웨어 이벤트를 특징화하는 메타데이터를 포함한다. 시스템은 하드웨어 이벤트들을 식별하는 데이터 구조를 생성한다. 데이터 구조는 시간 순서화된 시퀀스로 이벤트들을 배열하고 이벤트들을 적어도 제1 또는 제2 프로세서 코어들과 연관시킨다. 시스템은 호스트 디바이스의 메모리 뱅크에 데이터 구조를 저장하고, 제1 또는 제2 프로세서 코어들에 의해 실행되는 프로그램 코드의 성능을 분석하기 위해 데이터 구조를 사용한다.
[0031]
도 1은 분산형 하드웨어 트레이싱을 위한 예시적인 컴퓨팅 시스템(100)의 블록 다이어그램을 예시한다. 본 명세서에 사용된 바와 같이, 분산형 하드웨어 시스템 트레이싱은 예시적인 프로세서 마이크로-칩의 컴포넌트들 및 서브-컴포넌트들 내에서 발생하는 이벤트들을 식별하는 데이터의 저장에 대응한다. 게다가, 본원에 사용된 바와 같이, 분산형 하드웨어 시스템(또는 트레이싱 시스템)은 프로세서 마이크로-칩들 또는 분산형 프로세싱 유닛들의 콜렉션(collection) 사이에서 분산된 실행을 위해 구성된 소프트웨어/프로그램 코드의 개별 부분들을 실행하기 위해 협력하는 프로세서 마이크로-칩들 또는 프로세싱 유닛들의 콜렉션에 대응한다.
[0032]
시스템(100)은 분산된 방식으로, 즉 시스템(100)의 상이한 프로세싱 유닛들 상에서 프로그램 코드의 상이한 부분들 또는 일부분들을 실행함으로써 소프트웨어 프로그램을 실행하는 하나 이상의 프로세서들 또는 프로세싱 유닛들을 가진 분산형 프로세싱 시스템일 수 있다. 프로세싱 유닛들은 2개 이상의 프로세서들, 프로세서 마이크로-칩들, 또는 프로세싱 유닛들, 예컨대 적어도 제1 프로세싱 유닛 및 제2 프로세싱 유닛을 포함할 수 있다.
[0033]
일부 구현들에서, 2개 이상의 프로세싱 유닛들은, 제1 프로세싱 유닛이 분산된 소프트웨어 프로그램의 프로그램 코드의 제1 부분을 수신하여 실행할 때, 및 제2 프로세싱 유닛이 동일한 분산된 소프트웨어 프로그램의 프로그램 코드의 제2 부분을 수신하여 실행할 때 분산형 프로세싱 유닛들일 수 있다.
[0034]
일부 구현들에서, 시스템(100)의 상이한 프로세서 칩들은 분산형 하드웨어 시스템의 개별 노드들을 형성할 수 있다. 대안적인 구현들에서, 단일 프로세서 칩은 프로세서 칩의 개별 노드들을 각각 형성할 수 있는 하나 이상의 프로세서 코어들 및 하드웨어 피처들을 포함할 수 있다.
[0035]
예컨대, 중앙 프로세싱 유닛(CPU)의 맥락에서, 프로세서 칩은 적어도 2개의 노드들을 포함할 수 있고 각각의 노드는 CPU의 개별 코어일 수 있다. 대안적으로, 그래픽 프로세서 유닛(GPU)의 맥락에서, 프로세서 칩은 적어도 2 개의 노드들을 포함할 수 있고 각각의 노드는 GPU의 개별 스트리밍 멀티프로세서일 수 있다. 컴퓨팅 시스템(100)은 다수의 프로세서 컴포넌트들을 포함할 수 있다. 일부 구현들에서, 프로세서 컴포넌트들은 전체 컴퓨팅 시스템(100)의 프로세서 칩, 프로세서 코어, 메모리 액세스 엔진, 또는 적어도 하나의 하드웨어 컴포넌트 중 적어도 하나일 수 있다.
[0036]
일부 경우들에서, 프로세서 컴포넌트, 이를테면 프로세서 코어는 실행 프로그램 코드의 적어도 하나의 발행된 명령에 기반하여 적어도 하나의 특정 동작을 실행하도록 구성된 고정-기능 컴포넌트일 수 있다. 다른 경우들에서, 프로세서 컴포넌트, 이를테면 MAE(memory access engine)는 시스템(100)의 다른 프로세서 컴포넌트들에 의해 실행된 프로그램 코드보다 더 낮은 레벨의 세부사항 또는 입도로 프로그램 코드를 실행하도록 구성될 수 있다.
[0037]
예컨대, 프로세서 코어에 의해 실행된 프로그램 코드는 MAE 디스크립터가 생성되어 MAE로 송신/전송되게 할 수 있다. 디스크립터의 수신 이후, MAE는 MAE 디스크립터에 기반하여 데이터 전달 동작을 실행할 수 있다. 일부 구현들에서, MAE에 의해 실행되는 데이터 전달들은 예컨대 시스템의 소정의 데이터 경로들 또는 인터페이스 컴포넌트들을 통해 시스템(100)의 소정의 컴포넌트들로 그리고 소정의 컴포넌트들로부터 데이터를 이동시키거나, 또는 데이터 요청들을 시스템(100)의 예시적인 구성 버스 상에 발행하는 것을 포함할 수 있다.
[0038]
일부 구현들에서, 시스템(100)의 예시적인 프로세서 칩의 각각의 텐서 노드(tensor node)는 프로그램 명령들을 프로세싱하는 하드웨어 블록들/피처들일 수 있는 적어도 2개의 "프론트-엔드(front-end)"들을 가질 수 있다. 아래에 더 상세히 논의되는 바와 같이, 제1 프론트-엔드는 제1 프로세서 코어(104)에 대응할 수 있지만, 제2 프론트-엔드는 제2 프로세서 코어(106)에 대응할 수 있다. 따라서, 제1 및 제2 프로세서 코어들은 또한 제1 프론트-엔드(104) 및 제2 프론트-엔드(106)로서 본원에서 설명될 수 있다.
[0039]
본 명세서에 사용된 바와 같이, 트레이스 체인은, 트레이스 엔트리들이 시스템(100) 내의 예시적인 칩 관리자로의 송신을 위해 놓여질 수 있는 특정 물리적 데이터 통신 버스일 수 있다. 수신된 트레이스 엔트리들은 다수의 바이트들 및 다수의 이진 값들 또는 디지트(digit)들을 포함하는 데이터 워드(word)들/구조들일 수 있다. 따라서, 디스크립터 "워드"는 예시적인 프로세서 코어의 하드웨어 디바이스들에 의해 단위로서 취급될 수 있는 고정-크기 피스(piece)의 이진 데이터를 표시한다.
[0040]
일부 구현들에서, 분산형 하드웨어 트레이싱 시스템의 프로세서 칩들은 칩의 개별 코어들에서 프로그램 코드의 부분들을 각각 실행하는 멀티-코어 프로세서들(즉, 다수의 코어들을 가짐)이다. 일부 구현들에서, 프로그램 코드의 부분들은 예시적인 다층 신경망의 추론 작업 부하들에 대한 벡터화된 계산들에 대응할 수 있다. 대안적인 구현들에서, 프로그램 코드의 부분들은 일반적으로 종래의 프로그래밍 언어들과 연관된 소프트웨어 모듈들에 대응할 수 있다.
[0041]
컴퓨팅 시스템(100)은 일반적으로 노드 관리자(102), 제1 프로세서 코어(FPC)(104), 제2 프로세서 코어(SPC)(106), 노드 패브릭(NF: node fabric)(110), 데이터 라우터(112) 및 호스트 인터페이스 블록(HIB)(114)을 포함한다. 일부 구현들에서, 시스템(100)은 신호 스위칭, 멀티플렉싱 및 디-멀티플렉싱 기능들을 수행하도록 구성된 메모리 멀티플렉서(108)를 포함할 수 있다. 시스템(100)은 FPC(104)가 내부에 배치된 텐서 코어(116)를 더 포함한다. 텐서 코어(116)는 다-차원 데이터 어레이들 상에서, 벡터화된 계산들을 수행하도록 구성된 예시적인 계산 디바이스일 수 있다. 텐서 코어(116)는 매트릭스 유닛(MXU)(120), 전치 유닛(XU)(122) 및 감소 및 치환 유닛(RPU)(124)과 상호작용하는 벡터 프로세싱 유닛(VPU)(118)을 포함할 수 있다. 일부 구현들에서, 컴퓨팅 시스템(100)은 종래의 CPU 또는 GPU의 하나 이상의 실행 유닛들, 이를테면 로드/저장 유닛들, 산술 로직 유닛(ALU)들 및 벡터 유닛들을 포함할 수 있다.
[0042]
시스템(100)의 컴포넌트들은 집합적으로 큰 세트의 하드웨어 성능 카운터들 뿐만 아니라 컴포넌트들 내의 트레이싱 활동의 완료를 가능하게 하는 지원 하드웨어를 포함한다. 아래에 더 상세히 설명되는 바와 같이, 시스템(100)의 개별 프로세서 코어들에 의해 실행되는 프로그램 코드는 코드 실행 동안 다수의 성능 카운터들을 동시에 인에이블하는 데 사용되는 내장된 트리거들을 포함할 수 있다. 일반적으로, 검출된 트리거들은 하나 이상의 트레이스 이벤트들에 대해 트레이스 데이터가 생성되게 한다. 트레이스 데이터는, 카운터들에 저장되고, 프로그램 코드의 성능 특징을 파악하기 위해 분석될 수 있는 증분 파라미터 카운트들에 대응할 수 있다. 개별 트레이스 이벤트들에 대한 데이터는 예시적인 저장 매체(예컨대, 하드웨어 버퍼)에 저장될 수 있고 트리거의 검출에 대한 응답으로 생성된 타임스탬프를 포함할 수 있다.
[0043]
게다가, 트레이스 데이터는 시스템(100)의 하드웨어 컴포넌트들 내에서 발생하는 다양한 이벤트들에 대해 생성될 수 있다. 예시적인 이벤트들은 노드-간 및 교차-노드 통신 동작들, 이를테면 직접 메모리 액세스(DMA) 동작들 및 동기 플래그 업데이트들(각각 아래에 더 상세히 설명됨)을 포함할 수 있다. 일부 구현들에서, 시스템(100)은 "GTC"(Global Time Counter)로 일반적으로 지칭되는 글로벌적 동기 타임스탬프 카운터를 포함할 수 있다. 다른 구현들에서, 시스템(100)은 다른 타입들의 글로벌 클록들, 이를테면 람포트 클록(Lamport Clock)을 포함할 수 있다.
[0044]
GTC는 프로그램 코드 실행, 및 분산형 프로세싱 환경에서 실행되는 소프트웨어/프로그램 코드의 성능의 정밀한 상관에 사용될 수 있다. 부가적으로, 그리고 GTC에 부분적으로 관련되어, 일부 구현들에서, 시스템(100)은 고도로 조정된 방식으로 분산형 시스템에서 데이터 트레이싱을 시작 및 중지하도록 분산형 소프트웨어 프로그램들에 의해 사용되는 하나 이상의 트리거 메커니즘들을 포함할 수 있다.
[0045]
일부 구현들에서, 호스트 시스템(126)은, 검출시에 하드웨어 이벤트들과 연관된 트레이스 데이터의 캡처 및 저장을 유발하도록 트리거하는 내장된 피연산자들을 포함할 수 있는 프로그램 코드를 컴파일링한다. 일부 구현들에서, 호스트 시스템(126)은 컴파일링된 프로그램 코드를 시스템(100)의 하나 이상의 프로세서 칩들에 제공한다. 대안적인 구현들에서, 프로그램 코드는 예시적인 외부 컴파일러에 의해 (내장된 트리거들로) 컴파일링되고 시스템(100)의 하나 이상의 프로세서 칩들에 로딩될 수 있다. 일부 경우들에서, 컴파일러는 소프트웨어 명령들의 부분들에 내장된 소정의 트리거들과 연관된 (아래에서 논의되는) 하나 이상의 트레이스 비트들을 세팅할 수 있다. 컴파일링된 프로그램 코드는 시스템(100)의 하나 이상의 컴포넌트들에 의해 실행되는 분산형 소프트웨어 프로그램일 수 있다.
[0046]
호스트 시스템(126)은 시스템(100)의 하나 이상의 컴포넌트들에 의해 프로그램 코드의 실행을 모니터링하도록 구성된 모니터링 엔진(128)을 포함할 수 있다. 일부 구현들에서, 모니터링 엔진(128)은 호스트 시스템(126)이 적어도 FPC(104) 및 SPC(106)에 의해 실행되는 프로그램 코드의 실행을 모니터링할 수 있게 한다. 예컨대, 코드 실행 동안, 호스트 시스템(126)은 생성된 트레이스 데이터에 기반하여, 적어도 하드웨어 이벤트들의 주기적인 타임라인들을 수신함으로써 실행 코드의 성능을 모니터링 엔진(128)을 통해 모니터링할 수 있다. 비록 호스트 시스템(126)에 대해 단일 블록이 도시되지만, 일부 구현들에서, 시스템(126)은 시스템(100)의 다수의 프로세서 칩들 또는 칩 코어들과 연관된 다수의 호스트들(또는 호스트 서브시스템들)을 포함할 수 있다.
[0047]
다른 구현들에서, 적어도 3개의 프로세서 코어들을 수반하는 교차-노드 통신들은, 데이터 트래픽이 FPC(104)와 예시적인 제3 프로세서 코어/노드 사이의 통신 경로를 가로지를 때 호스트 시스템(126)이 하나 이상의 중간 "홉(hop)"들에서의 데이터 트래픽을 모니터링하게 할 수 있다. 예컨대, FPC(104) 및 제3 프로세서 코어는 주어진 시간 기간에 프로그램 코드를 실행하는 유일한 코어들일 수 있다. 따라서, FPC(104)로부터 제3 프로세서 코어로의 데이터 전달은, 데이터가 FPC(104)로부터 제3 프로세서 코어로 전달됨에 따라 SPC(106)에서 중간 홉에 대한 트레이스 데이터를 생성할 수 있다. 달리 말하면, 시스템(100)에서의 데이터 라우팅 동안, 제1 프로세서 칩으로부터 제3 프로세서 칩으로 진행하는 데이터는 제2 프로세서 칩을 가로지를 필요가 있을 수 있고, 따라서 데이터 라우팅 동작의 실행은 트레이스 엔트리들이 제2 칩에서 라우팅 활동에 대해 생성되게 할 수 있다.
[0048]
컴파일링된 프로그램 코드의 실행 시에, 시스템(100)의 컴포넌트들은 분산형 컴퓨터 시스템에서 발생하는 하드웨어 이벤트들의 타임라인들을 생성하도록 상호작용할 수 있다. 하드웨어 이벤트들은 인트라-노드(intra-node) 및 교차-노드 통신 이벤트들을 포함할 수 있다. 분산형 하드웨어 시스템의 예시적인 노드들 및 이들의 연관된 통신들은 도 2를 참조하여 아래에 더 상세히 설명된다. 일부 구현들에서, 적어도 하나의 하드웨어 이벤트 타임라인에 대한 하드웨어 이벤트들의 콜렉션을 식별하는 데이터 구조가 생성된다. 타임라인은 분산형 시스템에서 발생하는 이벤트들의 재구성을 가능하게 한다. 일부 구현들에서, 이벤트 재구성은 특정 이벤트의 발생 동안 생성된 타임스탬프들의 분석에 기반하여 정확한 이벤트 순서화를 포함할 수 있다.
[0049]
일반적으로, 예시적인 분산형 하드웨어 트레이싱 시스템은 시스템(100)의 위에 설명된 컴포넌트들 뿐만 아니라 호스트 시스템(126)과 연관된 적어도 하나의 호스트 제어기를 포함할 수 있다. 분산형 트레이싱 시스템으로부터 획득된 데이터의 성능 또는 디버깅은 이벤트 데이터가 예컨대 시간-순서화 또는 시퀀싱 방식으로 상관될 때 유용할 수 있다. 일부 구현들에서, 데이터 상관은, 연결된 소프트웨어 모듈들에 대응하는 다수의 저장된 하드웨어 이벤트들이 저장되고 이어서 호스트 시스템(126)에 의한 구조화된 분석을 위해 시퀀싱될 때 발생할 수 있다. 다수의 호스트 시스템들을 포함하는 구현들에 대해, 상이한 호스트들을 통해 획득된 데이터의 상관은 예컨대 호스트 제어기에 의해 수행될 수 있다.
[0050]
일부 구현들에서, FPC(104) 및 SPC(106)는 멀티-코어 프로세서 칩의 각각의 별개의 코어들이지만; 다른 구현들에서, FPC 및 SPC(104, 106)는 별개의 멀티-코어 프로세서 칩들의 개별 코어들이다. 위에 표시된 바와 같이, 시스템(100)은 적어도 FPC(104) 및 SPC(106)를 가진 분산형 프로세서 유닛들을 포함할 수 있다. 일부 구현들에서, 시스템(100)의 분산형 프로세서 유닛들은 더 큰 분산형 소프트웨어 프로그램 또는 프로그램 코드의 적어도 일부를 실행하도록 구성된 하나 이상의 하드웨어 또는 소프트웨어 컴포넌트들을 포함할 수 있다.
[0051]
데이터 라우터(112)는 시스템(100)의 컴포넌트들 사이에 데이터 통신 경로들을 제공하는 ICI(inter-chip interconnect)이다. 특히, 라우터(112)는 FPC(104) 및 SPC(106) 사이, 및 코어들(104, 106)과 연관된 개별 컴포넌트들 사이의 통신 커플링 또는 연결들을 제공할 수 있다. 노드 패브릭(110)은 시스템(100)의 분산형 하드웨어 컴포넌트들 및 서브-컴포넌트들 내에서 데이터 패킷들을 이동시키기 위해 데이터 라우터(112)와 상호작용한다.
[0052]
노드 관리자(102)는 다중-노드 프로세서 칩들에서 저-레벨 노드 기능들을 관리하는 고-레벨 디바이스이다. 아래에 더 상세히 논의되는 바와 같이, 프로세서 칩의 하나 이상의 노드들은 로컬 엔트리 로그들에 하드웨어 이벤트 데이터를 관리 및 저장하도록 노드 관리자(102)에 의해 제어되는 칩 관리자들을 포함할 수 있다. 메모리 멀티플렉서(108)는 예시적인 외부 HBM(high bandwidth memory)에 제공된 데이터 신호들 또는 외부 HBM으로부터 수신된 데이터 신호들에 대해 스위칭, 멀티플렉싱 및 디-멀티플렉싱 동작들을 수행할 수 있는 멀티플렉싱 디바이스이다.
[0053]
일부 구현들에서, 예시적인 트레이스 엔트리(아래에 설명됨)는, 멀티플렉서(108)가 FPC(104)와 SPC(106) 사이에서 스위칭할 때 멀티플렉서(108)에 의해 생성될 수 있다. 메모리 멀티플렉서(108)는 멀티플렉서(108)에 액세스할 수 없는 특정 프로세서 코어(104, 106)의 성능에 잠재적인 영향을 미칠 수 있다. 따라서, 멀티플렉서(108)에 의해 생성된 트레이스 엔트리 데이터는 개별 코어들(104, 106)과 연관된 소정의 시스템 활동들의 레이턴스들의 결과적인 스파이크(spike)들을 이해하는 데 도움을 줄 수 있다. 일부 구현들에서, 멀티플렉서(108) 내에서 발생하는 하드웨어 이벤트 데이터(예컨대, 아래에 논의되는 트레이스 포인트들)은 노드 패브릭(110)에 대한 이벤트 데이터와 함께, 예시적인 하드웨어 이벤트 타임라인에서 그룹화될 수 있다. 이벤트 그룹화는, 소정의 트레이싱 활동이 다수의 하드웨어 컴포넌트들에 대한 이벤트 데이터로 하여금 예시적인 하드웨어 버퍼(예컨대, 아래에 논의되는 트레이스 엔트리 로그(218))에 저장되게 할 때 발생할 수 있다.
[0054]
시스템(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)에 필요한 카운터들을 제공하도록 구성될 수 있다.
[0055]
VPU(118)는 예시적인 매트릭스-벡터 프로세서의 벡터 엘리먼트들과 연관된 로컬화된 높은 대역폭 데이터 프로세싱 및 산술 연산들을 지원하는 내부 설계 아키텍처를 포함할 수 있다. MXU(120)는 예컨대 피승수들의 벡터 데이터 세트들에 대해 최대 128x128 매트릭스 곱들을 수행하도록 구성된 매트릭스 곱셈 유닛이다.
[0056]
MXU(122)는 예컨대 매트릭스 곱 연산들과 연관된 벡터 데이터에 대해 최대 128x128 매트릭스 전치 연산들을 수행하도록 구성된 전치 유닛이다. RPU(124)는 시그마 유닛 및 치환 유닛을 포함할 수 있다. 시그마 유닛은 매트릭스 곱 연산들과 연관된 벡터 데이터에 대한 순차적인 감소들을 실행한다. 감소들은 합산들 및 다양한 타입들의 비교 연산들을 포함할 수 있다. 치환 유닛은 매트릭스 곱 연산들과 연관된 벡터 데이터의 모든 엘리먼트들을 완전히 치환 또는 복제할 수 있다.
[0057]
일부 구현들에서, 시스템(100)의 컴포넌트들에 의해 실행되는 프로그램 코드는 기계 학습, 신경망 추론 계산들, 및/또는 하나 이상의 직접 메모리 액세스 기능들을 대표할 수 있다. 시스템(100)의 컴포넌트들은 시스템의 프로세싱 유닛(들) 또는 디바이스(들)가 하나 이상의 기능들을 실행하게 하는 명령들을 포함하는 하나 이상의 소프트웨어 프로그램을 실행하도록 구성될 수 있다. "컴포넌트"라는 용어는 임의의 데이터 프로세싱 디바이스 또는 저장 디바이스, 이를테면 데이터를 프로세싱 및 저장할 수 있는 제어 상태 레지스터들 또는 임의의 다른 디바이스를 포함하도록 의도된다.
[0058]
시스템(100)은 일반적으로 하나 이상의 프로세서들(예컨대, 마이크로프로세서들 또는 중앙 프로세싱 유닛(CPU)들), GPU(graphics processing unit)들, ASIC(application specific integrated circuit)들, 또는 상이한 프로세서들의 조합을 포함할 수 있는 다수의 프로세싱 유닛들 또는 디바이스들을 포함할 수 있다. 대안적인 실시예들에서, 시스템(100)은 본 명세서에 설명된 하드웨어 트레이싱 기능들에 관련된 계산들을 수행하기 위한 부가적인 프로세싱 옵션들을 제공하는 다른 컴퓨팅 자원들/디바이스들(예컨대, 클라우드-기반 서버들)을 각각 포함할 수 있다.
[0059]
프로세싱 유닛들 또는 디바이스들은 하나 이상의 메모리 유닛들 또는 메모리 뱅크들(예컨대, 레지스터들/카운터들)을 더 포함할 수 있다. 일부 구현들에서, 프로세싱 유닛들은 본 명세서에 설명된 하나 이상의 기능들을 수행하기 위해 시스템(100)의 디바이스들로 메모리에 저장된 프로그래밍된 명령들을 실행한다. 메모리 유닛들/뱅크들은 하나 이상의 비-일시적 기계-판독가능 저장 매체들을 포함할 수 있다. 비-일시적 기계-판독가능 저장 매체는 솔리드-스테이트 메모리, 자기 디스크 및 광학 디스크, RAM(random access memory), ROM(read-only memory), 소거가능 프로그램가능 판독-전용 메모리(예컨대, EPROM, EEPROM 또는 플래시 메모리), 또는 정보를 저장할 수 있는 임의의 다른 유형의 매체를 포함할 수 있다.
[0060]
도 2는 시스템(100)에 의해 실행되는 분산형 하드웨어 트레이싱에 사용된 예시적인 트레이스 체인들 및 개별 예시적인 노드들(200, 201)의 블록 다이어그램을 예시한다. 일부 구현들에서, 시스템(100)의 노드들(200, 201)은 단일 멀티-코어 프로세서 내의 상이한 노드들일 수 있다. 다른 구현들에서, 노드(200)는 제1 멀티-코어 프로세서 칩의 제1 노드일 수 있고 노드(201)는 제2 멀티-코어 프로세서 칩의 제2 노드일 수 있다.
[0061]
비록 2개의 노드들이 도 2의 구현에 묘사되지만, 대안적인 구현들에서, 시스템(100)은 다수의 노드들을 포함할 수 있다. 다수의 노드들을 수반하는 구현들에 대해, 교차-노드 데이터 전달들은 다수의 노드들을 가로지르는 예시적인 데이터 경로를 따라 중간 홉들에서 트레이스 데이터를 생성할 수 있다. 예컨대, 중간의 홉들은 특정 데이터 전달 경로에서 별개의 노드들을 통과하는 데이터 전달들에 대응할 수 있다. 일부 경우들에서, ICI 트레이스들/하드웨어 이벤트들과 연관된 트레이스 데이터는 하나 이상의 노드들을 통과하는 교차-노드 데이터 전달들 동안 발생하는 하나 이상의 중간 홉들에 대해 생성될 수 있다.
[0062]
일부 구현들에서, 노드 0 및 노드 1은 추론 작업 부하들에 대한 프로그램 코드의 부분들과 연관된 벡터화된 계산들에 사용된 텐서 노드들이다. 본 명세서에 사용된 바와 같이, 텐서는 다-차원 기하학적 객체이고 예시적인 다-차원 기하학적 객체들은 매트릭스들 및 데이터 어레이들을 포함한다.
[0063]
도 2의 구현에 도시된 바와 같이, 노드(200)는 적어도 시스템(100)의 컴포넌트들의 서브세트와 상호작용하는 트레이스 체인(203)을 포함한다. 마찬가지로, 노드(201)는 적어도 시스템(100)의 컴포넌트들의 서브세트와 상호작용하는 트레이스 체인(205)을 포함한다. 일부 구현들에서, 노드들(200, 201)은 컴포넌트들의 동일한 서브세트의 예시적인 노드들이고, 다른 구현들에서, 노드들(200, 201)은 별개의 컴포넌트 서브세트들의 개별 노드들이다. 데이터 라우터/ICI(112)는 트레이스 데이터를 칩 관리자(216)에게 제공하기 위해 일반적으로 트레이스 체인들(203 및 205)과 수렴하는 트레이스 체인(207)을 포함한다.
[0064]
도 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)를 포함한다. 일부 구현들에서, 각각의 트레이스 멀티플렉서에 대한 트레이스 제어 레지스터는 개별 트레이스 포인트들이 인에이블 및 디스에이블되게 한다. 일부 경우들에서, 하나 이상의 트레이스 멀티플렉서들에 대해, 이들의 대응하는 트레이스 제어 레지스터들은 개별 인에이블 비트들 뿐만 아니라 더 넓은 트레이스 멀티플렉서 제어들을 포함할 수 있다.
[0065]
일반적으로, 트레이스 제어 레지스터들은 트레이스 명령 데이터를 수신 및 저장하는 종래의 제어 상태 레지스터들(CSR)일 수 있다. 더 넓은 트레이스 멀티플렉서 제어들에 관하여, 일부 구현들에서, 트레이싱은 시스템(100)에 의해 실행되는 CSR 기입들에 기반하여 인에이블 및 디스에이블될 수 있다. 일부 구현들에서, 트레이싱은 GTC(global time counter)의 값, EPC(104)(또는 코어(116))의 예시적인 트레이스-마크 레지스터의 값, 또는 SPC(106)의 단계 마크의 값에 기반하여 시스템(100)에 의해 동적으로 시작 및 중지될 수 있다.
[0066]
트레이싱 활동을 동적으로 시작 및 중지하기 위할 뿐만 아니라 동기화된 하드웨어 이벤트 콜렉션에 대한 컴퓨팅 시스템들 및 컴퓨터-구현 방법들에 관련된 세부사항들 및 설명들은 2017년 3월 29일에 출원되고, 대리인 도켓 번호 16113-8129001이며, 발명의 명칭이 "Synchronous Hardware Event Collection"인 관련된 미국 특허 출원 번호 제 15/472,932호에 설명된다. 미국 특허 출원 번호 제 15/472,932호의 전체 개시내용은 그 전체가 본원에 인용에 의해 명확히 통합된다.
[0067]
일부 구현들에서, 코어(116)에 대해, FPC(104)는 코어(116) 내에서 발생하는 이벤트 활동과 연관된 트레이스 윈도우를 정의하기 위해 트레이스 제어 파라미터들을 사용할 수 있다. 트레이스 제어 파라미터는 트레이스 윈도우가 GTC에 대한 하한 및 상한 뿐만 아니라 트레이스-마크 레지스터에 대한 하한 및 상한의 측면들에서 정의되게 한다.
[0068]
일부 구현들에서, 시스템(100)은 생성된 트레이스 엔트리들, 이를테면 트레이스 이벤트 필터링 특징들의 수의 감소를 가능하게 하는 기능들을 포함할 수 있다. 예컨대, FPC(104) 및 SPC(106)는, 각각의 코어가 예시적인 생성된 트레이스 디스크립터의 트레이스 비트를 세팅하는(아래에 설명됨) 레이트를 제한하는 필터링 피처들을 각각 포함할 수 있다. HIB(114)는 소정의 DMA 트레이스 이벤트들의 캡처와 연관된 트레이스 비트들을 제한하는 유사한 필터링 피처들, 이를테면 예시적인 DMA 레이트 제한기를 포함할 수 있다. 부가적으로, HIB(114)는, 어느 큐(queue)들이 DMA 트레이스 엔트리들을 소싱하는지를 (예컨대, 인에이블 비트를 통해) 제한하기 위한 제어들을 포함할 수 있다.
[0069]
일부 구현들에서, DMA 동작에 대한 디스크립터는 호스트 시스템(126)의 예시적인 컴파일러에 의해 세팅되는 트레이스 비트를 가질 수 있다. 트레이스 비트가 세팅될 때, 트레이스 데이터를 결정 및 생성하는 하드웨어 피처들/노브들은 예시적인 트레이스 이벤트를 완료시키는 데 사용된다. 일부 경우들에서, DMA의 최종 트레이스 비트는 컴파일러에 의해 통계적으로 삽입된 트레이스 비트와 특정 하드웨어 컴포넌트에 의해 동적으로 결정된 트레이스 비트 사이의 논리 OR 연산일 수 있다. 따라서, 일부 경우들에서, 컴파일러 생성 트레이스 비트는, 필터링을 제외하고, 생성된 트레이스 데이터의 전체 양을 감소시키기 위한 메커니즘을 제공할 수 있다.
[0070]
예컨대, 호스트 시스템(126)의 컴파일러는 하나 이상의 원격 DMA 동작들(예컨대, 적어도 2 개의 노드들에 걸친 DMA)에 대한 트레이스 비트들만을 세팅하고, 하나 이상의 로컬 DMA 동작들(예컨대, 특정 텐서 노드, 이를테면 노드(200) 내의 DMA)에 대한 트레이스 비트들을 제거하기로 결정할 수 있다. 이런 방식으로, 생성된 트레이스 데이터의 양은 교차-노드 및 로컬 DMA 동작들 둘 모두를 포함하는 트레이싱 활동보다, 교차-노드(즉, 원격) DMA 동작들로 제한되는 트레이싱 활동에 기반하여 감소될 수 있다.
[0071]
일부 구현들에서, 시스템(100)에 의해 개시된 적어도 하나의 트레이스 이벤트는 시스템(100)에 걸쳐 발생하는 다수의 중간 동작들을 포함하는 메모리 액세스 동작과 연관될 수 있다. 메모리 액세스 동작에 대한 디스크립터(예컨대, MAE 디스크립터)는 다수의 중간 동작들과 연관된 데이터가 하나 이상의 메모리 버퍼들에 저장되게 하는 트레이스 비트를 포함할 수 있다. 따라서, 트레이스 비트는, 데이터 패킷들이 시스템(100)을 가로지름에 따라, 중간 메모리 동작들을 "태그(tag)"하고 DMA 동작의 중간 홉들에서 다수의 트레이스 이벤트들을 생성하는 데 사용될 수 있다.
[0072]
일부 구현들에서, ICI(112)는 노드(200, 201)의 특정 컴포넌트의 각각의 입구 포트 및 출구 포트에 대한 제어 기능성을 제공하는 인에이블 비트들의 세트 및 패킷 필터들의 세트를 포함할 수 있다. 이들 인에이블 비트들 및 패킷 필터들은 ICI(112)가 노드들(200, 201)의 특정 컴포넌트들과 연관된 트레이스 포인트들을 인에이블 및 디스에이블하게 한다. 트레이스 포인트들을 인에이블 및 디스에이블하는 것 외에, ICI(112)는 이벤트 소스, 이벤트 목적지, 및 트레이스 이벤트 패킷 타입에 기반하여 트레이스 데이터를 필터링하도록 구성될 수 있다.
[0073]
일부 구현들에서, 단계 마커들, GTC 또는 트레이스 마커들을 사용하는 것 외에, 프로세서 코어들(104, 106) 및 HIB(114)에 대한 각각의 트레이스 제어 레지스터는 또한 "모두" 트레이스 모드를 포함할 수 있다. 이런 "모두" 트레이스 모드는 전체 프로세서 칩에 걸친 트레이싱이 트레이스 멀티플렉서(204) 또는 트레이스 멀티플렉서(206a) 중 어느 하나에 의해 제어될 수 있게 할 수 있다. 모두 트레이스 모드에 있는 동안, 트레이스 멀티플렉서들(204 및 206a)은, 그 특정 트레이스 멀티플렉서, 즉 멀티플렉서(204) 또는 멀티플렉서(206a) 중 어느 하나가 트레이스 윈도우에 있는지 여부를 특정하는 "윈도우-내" 트레이스 제어 신호를 전송할 수 있다.
[0074]
윈도우-내 트레이스 제어 신호는, 예컨대 프로세서 칩 내에서 또는 다수의 프로세서 칩들에 걸쳐 모든 다른 트레이스 멀티플렉서들로 브로드캐스팅 또는 보편적으로 송신될 수 있다. 다른 트레이스 멀티플렉서들에 대한 브로드캐스트는, 멀티플렉서(204) 또는 멀티플렉서(206a) 중 어느 하나가 트레이싱 활동을 실행하고 있을 때 모든 트레이싱이 인에이블되게 할 수 있다. 일부 구현들에서, 프로세서 코어들(104, 106) 및 HIB(114)와 연관된 트레이스 멀티플렉서들 각각은, "모두 트레이스" 제어 신호가 생성되는 시기 및/또는 방법을 특정하는 트레이스 윈도우 제어 레지스터를 포함한다.
[0075]
일부 구현들에서, 트레이스 멀티플렉서들(210a/b) 및 트레이스 멀티플렉서(212)의 트레이싱 활동은 일반적으로, 트레이스 비트가 DMA 동작들에 대해 데이터 워드들에서 세팅되었는지 또는 ICI/데이터 라우터(112)를 가로지르는 제어 메시지들에서 세팅되었는지에 기반하여 인에이블된다. DMA 동작들 또는 제어 메시지들은 소정의 상황들 또는 소프트웨어 조건들에 기반하여 세팅된 이진 데이터 패킷들 내에 트레이스 비트를 가질 수 있는 고정-크기 이진 데이터 구조들일 수 있다.
[0076]
예컨대, DMA 동작이 트레이스-타입 DMA 명령으로 FPC(104)(또는 SPC(106))에서 개시되고 개시자(프로세서 코어들(104 또는 106))가 트레이스 윈도우 내에 있을 때, 트레이스 비트는 그 특정 DMA에서 세팅될 것이다. 다른 예에서, FPC(104)에 대해, 시스템(100) 내의 다른 컴포넌트로의 데이터 기입들을 위한 제어 메시지들은, FPC(104)가 트레이스 윈도우 내에 있고 트레이스 데이터가 저장되게 하는 트레이스 포인트가 인에이블되면 트레이스 비트를 세팅되게 할 것이다.
[0077]
일부 구현들에서, 제로-길이 DMA 동작들은 시스템(100) 내의 더 넓은 DMA 구현의 예를 제공한다. 예컨대, 일부 DMA 동작들은 시스템(100) 내의 비-DMA 활동을 형성할 수 있다. 비-DMA 활동의 실행은 또한, 비-DMA 활동이 DMA 동작(예컨대, 비-제로-길이 동작들을 포함하는 DMA 활동)인 것처럼 트레이스싱될 수 있다(예컨대, 트레이스 데이터를 생성함). 예컨대, 소스 위치에서 개시되지만 전송 또는 전달될 어떠한 데이터도 갖지 않는(예컨대, 제로-길이) DMA 동작은 대신 제어 메시지를 목적지 위치에 전송할 수 있다. 제어 메시지는, 목적지에서 수신, 또는 작업될 데이터가 없음을 표시할 것이고, 제어 메시지 자체는, 비-제로-길이 DMA 동작이 트레이스싱될 것이므로 시스템(100)에 의해 트레이스싱될 것이다.
[0078]
일부 경우들에서, SPC(106)에 대해, 제로-길이 DMA 동작들은 제어 메시지를 생성할 수 있고, 메시지와 연관된 트레이스 비트는, DMA가 트레이스 비트를 세팅되게 했던 경우, 즉 제어 메시지가 제로-길이를 갖지 않게 했던 경우에만 세팅된다. 일반적으로, 호스트 시스템(126)으로부터 개시된 DMA 동작들은, HIB(114)가 트레이스 윈도우 내에 있으면 트레이스 비트를 세팅되게 할 것이다.
[0079]
도 2의 구현에서, 트레이스 체인(203)은 노드 0과 정렬하는 컴포넌트 서브세트에 대한 트레이스 엔트리 데이터를 수신하지만, 트레이스 체인(205)은 노드 1과 정렬하는 컴포넌트 서브세트에 대한 트레이스 엔트리 데이터를 수신한다. 각각의 트레이스 체인(203, 205, 207)은 트레이스 엔트리 데이터를 칩 관리자(216)의 예시적인 트레이스 엔트리 데이터 로그(218)에 제공하기 위해 개별 노드들(200, 201) 및 ICI(112)에 의해 사용된 별개의 데이터 통신 경로들이다. 따라서, 트레이스 체인들(203, 205, 207)의 종점은, 트레이스 이벤트들이 예시적인 메모리 유닛들에 저장될 수 있는 칩 관리자(216)이다.
[0080]
일부 구현들에서, 칩 관리자(216)의 적어도 하나의 메모리 유닛은 128-비트 폭일 수 있고 적어도 20,000개의 트레이스 엔트리들의 메모리 깊이를 가질 수 있다. 대안적인 구현들에서, 적어도 하나의 메모리 유닛은 더 크거나 더 작은 비트-폭을 가질 수 있고 더 많거나 더 적은 엔트리들을 저장할 수 있는 메모리 깊이를 가질 수 있다.
[0081]
일부 구현들에서, 칩 관리자(216)는 수신된 트레이스 엔트리 데이터를 관리하기 위해 명령들을 실행하는 적어도 하나의 프로세싱 디바이스를 포함할 수 있다. 예컨대, 칩 관리자(216)는 트레이스 체인들(203, 205, 207)을 통해 수신된 트레이스 데이터의 개별 하드웨어 이벤트들에 대한 타임스탬프 데이터를 스캔/분석하기 위한 명령들을 실행할 수 있다. 분석에 기반하여, 칩 관리자(216)는 하드웨어 트레이스 이벤트들의 시간-순서화된 시퀀스를 식별(또는 생성)하는 데 사용될 수 있는 데이터를 포함하도록 트레이스 엔트리 로그(218)를 채울 수 있다. 하드웨어 트레이스 이벤트들은, 시스템(100)의 프로세싱 유닛들이 예시적인 분산형 소프트웨어 프로그램을 실행할 때 컴포넌트 및 서브-컴포넌트 레벨에서 발생하는 데이터 패킷들의 이동에 대응할 수 있다.
[0082]
일부 구현들에서, 시스템(100)의 하드웨어 유닛들은 비-시간-순서화된 방식(즉, 순서가 맞지 않음)으로 예시적인 하드웨어 트레이스 버퍼를 채우는 트레이스 엔트리들(및 대응하는 타임스탬프들)을 생성할 수 있다. 예컨대, 칩 관리자(216)는 생성된 타임-스탬프들을 가진 다수의 트레이스 엔트리들이 엔트리 로그(218)에 삽입되게 할 수 있다. 다수의 삽입된 트레이스 엔트리들의 개별 트레이스 엔트리들은 서로에 관해 시간-순서화되지 않을 수 있다. 이런 구현에서, 비-시간-순서화된 트레이스 엔트리들은 호스트 시스템(126)의 예시적인 호스트 버퍼에 의해 수신될 수 있다. 호스트 버퍼에 의한 수신 시, 호스트 시스템(126)은 개별 트레이스 엔트리들에 대한 타임스탬프 데이터를 스캔/분석하기 위해 성능 분석/모니터링 소프트웨어에 관련된 명령들을 실행할 수 있다. 실행된 명령들은 트레이스 엔트리들을 분류하고 하드웨어 트레이스 이벤트들의 타임라인을 구성/생성하는 데 사용될 수 있다.
[0083]
일부 구현들에서, 트레이스 엔트리들은 호스트 DMA 동작을 통해 트레이싱 세션 동안 엔트리 로그(218)로부터 제거될 수 있다. 일부 경우들에서, 호스트 시스템(126)은, DMA 엔트리들이 로그에 부가될 때만큼 빠르게 트레이스 엔트리 로그(218)로부터 DMA 엔트리들을 출력하지 않을 수 있다. 다른 구현들에서, 엔트리 로그(218)은 미리 정의된 메모리 깊이를 포함할 수 있다. 엔트리 로그(218)의 메모리 깊이 제한에 도달되면, 부가적인 트레이스 엔트리들이 손실될 수 있다. 어느 트레이스 엔트리들이 손실되는지를 제어하기 위해, 엔트리 로그(218)는 FIFO(first-in-first-out) 모드에서, 또는 대안적으로 겹쳐 쓰기 기록 모드에서 동작할 수 있다.
[0084]
일부 구현들에서, 겹쳐 쓰기 기록 모드는 시스템(100)에 의해, 사후-분석 디버깅과 연관된 성능 분석을 지원하는 데 사용될 수 있다. 예컨대, 프로그램 코드는 트레이싱 활동이 인에이블되고 겹쳐 쓰기 기록 모드가 인에이블된 소정의 시간-기간 동안 실행될 수 있다. 시스템(100) 내에서 사후-분석 소프트웨어 이벤트(예컨대, 프로그램 충돌)에 대한 응답으로, 호스트 시스템(126)에 의해 실행되는 모니터링 소프트웨어는 프로그램 충돌 이전에 발생했던 하드웨어 이벤트들에 대한 통찰력을 얻기 위해 예시적인 하드웨어 트레이스 버퍼의 데이터 콘텐츠들을 분석할 수 있다. 본 명세서에 사용된 바와 같이, 사후-분석 디버깅은, 코드 충돌하였거나 일반적으로 의도된 대로 실행/동작하는 것에 실패한 이후의 프로그램 코드의 분석 또는 디버깅에 관한 것이다.
[0085]
FIFO 모드에서, 엔트리 로그(218)가 가득 차고, 그리고 호스트 시스템(126)이 메모리 자원들을 절약하기 위해 소정의 타임프레임 내의 저장된 로그 엔트리들을 제거하면, 새로운 트레이스 엔트리들은 칩 관리자(216)의 메모리 유닛에 저장될 수 없다. 겹쳐 쓰기 모드에 있는 동안, 호스트 시스템(126)이 메모리 자원들을 절약하기 위해 소정의 타임프레임 내의 저장된 로그 엔트리들을 제거하기 때문에 엔트리 로그(218)가 가득 차면, 새로운 트레이스 엔트리들은 엔트리 로그(218) 내에 저장된 가장 오래된 트레이스 엔트리를 겹쳐 쓸 수 있다. 일부 구현들에서, 트레이스 엔트리들은 HIB(114)의 프로세싱 피처들을 사용하여 DMA 동작에 대한 응답으로 호스트 시스템(126)의 메모리로 이동된다.
[0086]
본 명세서에 사용된 바와 같이, 트레이스 포인트는 트레이스 엔트리, 및 칩 관리자(216)에 의해 수신되고 트레이스 엔트리 로그(218)에 저장된 트레이스 엔트리와 연관된 데이터의 생성기이다. 일부 구현들에서, 멀티-코어 멀티-노드 프로세서 마이크로칩은, 제1 트레이스 체인이 칩 노드 0으로부터 트레이스 엔트리들을 수신하고, 제2 트레이스 체인이 칩 노드 1로부터 트레이스 엔트리들을 수신하고, 그리고 제3 트레이스 체인이 칩의 ICI 라우터로부터 트레이스 엔트리들을 수신하도록, 칩 내에 3개의 트레이스 체인들을 포함할 수 있다.
[0087]
각각의 트레이스 포인트는 자신의 트레이스 체인 내에 고유 트레이스 식별 번호를 가지며, 고유 트레이스 식별 번호는 트레이스 엔트리의 헤더(header)에 삽입된다. 일부 구현들에서, 각각의 트레이스 엔트리는 데이터 워드의 하나 이상의 바이트들/비트들에 의해 표시된 헤더에서 자신이 발생했던 트레이스 체인을 식별한다. 예컨대, 각각의 트레이스 엔트리는 특정 트레이스 이벤트에 관한 정보를 전달하는 정의된 필드 포맷들(예컨대, 헤더, 페이로드(payload) 등)을 가진 데이터 구조를 포함할 수 있다. 트레이스 엔트리의 각각의 필드는 트레이스 엔트리를 생성했던 트레이스 포인트에 적용가능한 유용한 데이터에 대응한다.
[0088]
위에 표시된 바와 같이, 각각의 트레이스 엔트리는 트레이스 엔트리 로그(218)와 연관된 칩 관리자(216)의 메모리 유닛에 기입되거나, 메모리 유닛 내에 저장될 수 있다. 일부 구현들에서, 트레이스 포인트들은 개별적으로 인에이블 또는 디스에이블될 수 있고 다수의 트레이스 포인트들은, 상이한 트레이스 포인트 식별자들을 사용하지만 동일한 타입의 트레이스 엔트리를 생성할 수 있다.
[0089]
일부 구현들에서, 각각의 트레이스 엔트리 타입은, 트레이스 명칭, 트레이스 설명, 및 트레이스 엔트리 내의 특정 필드들 및/또는 필드들의 콜렉션에 대한 인코딩들을 식별하는 헤더를 포함할 수 있다. 명칭, 설명 및 헤더는 집합적으로, 트레이스 엔트리가 나타내는 것의 설명을 제공한다. 칩 관리자(216)의 관점에서, 이런 설명은 또한, 특정 트레이스 엔트리가 특정 프로세서 칩 내에서 온 된 특정 트레이스 체인(203, 205, 207)을 식별할 수 있다. 따라서, 트레이스 엔트리 내의 필드들은 설명에 관련된 데이터의 (예컨대, 바이트/비트 단위) 피스들을 나타내고, 어느 트레이스 포인트가 특정 트레이스 엔트리를 생성하였는지를 결정하는 데 사용되는 트레이스 엔트리 식별자일 수 있다.
[0090]
일부 구현들에서, 저장된 하드웨어 이벤트들 중 하나 이상과 연관된 트레이스 엔트리 데이터는 부분적으로, 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) 중 적어도 하나 사이에서 발생하는 데이터 통신들에 대응할 수 있다.
[0091]
도 3은 예시적인 트레이스 멀티플렉서 설계 아키텍처(300) 및 예시적인 데이터 구조(320)의 블록 다이어그램을 예시한다. 트레이스 멀티플렉서 설계(300)는 일반적으로 트레이스 버스 입력(302), 버스 조정기(304), 및 로컬 트레이스 포인트 조정기(306), 버스 FIFO(308), 적어도 하나의 로컬 트레이스 이벤트 큐(310), 공유된 트레이스 이벤트 FIFO(312) 및 트레이스 버스 출력(314)을 포함한다.
[0092]
멀티플렉서 설계(300)는 시스템(100)의 컴포넌트 내에 배치된 예시적인 트레이스 멀티플렉서에 대응한다. 멀티플렉서 설계(300)는 다음 기능성을 포함할 수 있다. 버스 입력(302)은, 시간 조정 로직(예컨대, 조정기(304))가 트레이스 데이터로 하여금 예시적인 트레이스 체인에 배치되게 할 수 있을 때까지 버스 FIFO(308) 내에 일시적으로 저장된 로컬 트레이스 포인트 데이터에 관한 것일 수 있다. 컴포넌트에 대한 하나 이상의 트레이스 포인트들은 트레이스 이벤트 데이터를 적어도 하나의 로컬 트레이스 이벤트 큐(310)에 삽입할 수 있다. 조정기(306)는 제1 레벨 조정을 제공하고 큐(310) 내에 저장된 로컬 트레이스 이벤트들 사이에서 이벤트들을 선택할 수 있게 한다. 선택된 이벤트들은, 또한 저장 큐로서 기능하는 공유된 트레이스 이벤트 FIFO(312)에 배치된다.
[0093]
조정기(304)는, FIFO 큐(312)로부터 로컬 트레이스 이벤트들을 수신하고 로컬 트레이스 이벤트들을 트레이스 버스 출력(314)을 통해 특정 트레이스 체인(203, 205, 207) 상에 병합하는 제2 레벨 조정을 제공한다. 일부 구현들에서, 트레이스 엔트리들은, 그들이 공유된 FIFO(312)에 병합될 수 있는 것보다 빨리 로컬 큐들(310)에 푸시될 수 있거나, 또는 대안적으로 트레이스 엔트리들은, 그들이 트레이스 버스(314)에 병합될 수 있는 것보다 빨리 공유된 FIFO(312)에 푸시될 수 있다. 이들 시나리오들이 발생할 때, 개별 큐들(310 및 312)은 트레이스 데이터로 가득 차게 될 것이다.
[0094]
일부 구현들에서, 큐(310 또는 312) 중 어느 하나가 트레이스 데이터로 가득차게 될 때, 시스템(100)은, 가장 새로운 트레이스 엔트리들이 드롭되고 특정 큐에 저장되거나 병합되지 않도록 구성될 수 있다. 다른 구현들에서, 소정의 큐들(예컨대, 큐들(310, 312))이 채워질 때 트레이스 엔트리들을 드롭하기보다, 시스템(100)은, 다시 채워진 큐들이 엔트리들을 수신하기 위해 이용가능한 큐 공간을 가질 때까지 예시적인 프로세싱 파이프라인을 멈추도록 구성될 수 있다.
[0095]
예컨대, 큐들(310, 312)을 사용하는 프로세싱 파이프라인은, 충분한, 또는 임계 수의 트레이스 엔트리들이 트레이스 버스(314) 상에 병합될때까지 멈추어질 수 있다. 충분한 또는 임계 수는, 큐들(310, 312)에 의해 수신될 하나 이상의 트레이스 엔트리들에 대해 이용가능한 큐 공간을 초래하는 특정 수의 병합된 트레이스 엔트리들에 대응할 수 있다. 다운스트림 큐 공간이 이용가능하게 될 때까지, 프로세싱 파이프라인들이 멈추어진 구현들은 소정의 트레이스 엔트리들이 드롭되기보다 유지되는 것에 기반하여 더 높은-충실도의 트레이스 데이터를 제공할 수 있다.
[0096]
일부 구현들에서, 로컬 트레이스 큐들은 트레이스 엔트리에 의해 요구된 만큼 넓어서, 각각의 트레이스 엔트리는 로컬 큐(310)에서 단지 하나의 스폿(spot)만을 취한다. 그러나, 공유된 트레이스 FIFO 큐(312)는, 일부 트레이스 엔트리들이 공유된 큐(312)의 2개의 위치들을 점유할 수 있도록 고유 트레이스 엔트리 라인 인코딩을 사용할 수 있다. 일부 구현들에서, 트레이스 패킷의 임의의 데이터가 드롭될 때, 전체 패킷은, 어떠한 부분적인 패킷들도 트레이스 엔트리 로그(218)에 나타나지 않도록 드롭된다.
[0097]
일반적으로, 트레이스는 시스템(100)의 특정 컴포넌트와 연관된 활동들 또는 하드웨어 이벤트들의 타임라인이다. 어그리게이트(aggregate) 데이터인 성능 카운터들(아래에 설명됨)과 달리, 트레이스들은 특정 트레이스 윈도우 동안 발생하는 하드웨어 활동에 통찰을 제공하는 상세 이벤트 데이터를 포함한다. 설명된 하드웨어 시스템은 트레이스 엔트리들의 생성, 하드웨어 관리 버퍼 내의 트레이스 엔트리들의 일시적 저장, 하나 이상의 트레이스 타입들의 정적 및 동적 인에이블, 및 호스트 시스템(126)으로의 트레이스 엔트리 데이터의 스트리밍을 포함하는, 분산형 하드웨어 트레이싱을 위한 광범위한 지원을 가능하게 한다.
[0098]
일부 구현들에서, 트레이스들은 시스템(100)의 컴포넌트들에 의해 실행되는 하드웨어 이벤트들, 이를테면 DMA 동작을 생성하는 것, DMA 동작을 실행하는 것, 소정의 명령들의 발행/실행, 또는 동기 플래그들을 업데이팅하는 것에 대해 생성될 수 있다. 일부 경우들에서, 트레이싱 활동은 시스템을 통해 DMA들을 추적하거나, 또는 특정 프로세서 코어 상에 실행되는 명령들을 추적하는 데 사용될 수 있다.
[0099]
시스템(100)은 하드웨어 이벤트들의 타임라인으로부터 하나 이상의 하드웨어 이벤트들(322, 324)을 식별하는 적어도 하나의 데이터 구조(320)를 생성하도록 구성될 수 있다. 일부 구현들에서, 데이터 구조(320)는 적어도 FPC(104) 및 SPC(106)와 연관된 이벤트들의 시간 순서화된 시퀀스로 하나 이상의 하드웨어 이벤트들(322, 324)을 배열한다. 일부 경우들에서, 시스템(100)은 호스트 시스템(126)의 호스트 제어 디바이스의 메모리 뱅크에 데이터 구조(320)를 저장할 수 있다. 데이터 구조(320)는 적어도 프로세서 코어들(104 및 106)에 의해 실행된 프로그램 코드의 성능을 평가하는 데 사용될 수 있다.
[00100]
하드웨어 이벤트들(324)에 의해 도시된 바와 같이, 일부 구현들에서, 특정 트레이스 식별(ID) 번호(예컨대, 트레이스 ID '003)는 분산형 프로세서 유닛들에 걸쳐 발생하는 다수의 하드웨어 이벤트들과 연관될 수 있다. 다수의 하드웨어 이벤트들은 특정 메모리 액세스 동작(예컨대, DMA)에 대응할 수 있고, 특정 트레이스 ID 번호는 하나 이상의 하드웨어 이벤트들을 상관시키는 데 사용된다.
[00101]
예컨대, 이벤트(324)에 의해 표시된 바와 같이, DMA 동작에 대한 단일 트레이스 ID는 DMA에서 다수의 상이한 포인트들에 대응하는 다수의 시간 단계들을 포함할 수 있다. 일부 경우들에서, 트레이스 ID '003은 서로에 관하여 일부 시간이 떨어진 것으로 식별되는 "발행된" 이벤트, "실행된" 이벤트, 및 "완료된" 이벤트를 가질 수 있다. 따라서, 이에 관하여, 트레이스 ID는 상관에 기반하고 시간 단계들을 참조하여 메모리 액세스 동작의 레이턴시 속성을 결정하기 위해 추가로 사용될 수 있다.
[00102]
일부 구현들에서, 데이터 구조(320)를 생성하는 것은 예컨대 시스템(100)이 하드웨어 이벤트들의 제1 서브세트 내의 개별 이벤트들의 이벤트 타임스탬프들을 하드웨어 이벤트들의 제2 서브세트 내의 개별 이벤트들의 이벤트 타임스탬프들과 비교하는 것을 포함할 수 있다. 데이터 구조(320)를 생성하는 것은, 시스템(100)이 데이터 구조에서의 프리젠테이션을 위해, 이벤트들의 제1 서브세트와 이벤트들의 제2 서브세트 사이의 비교에 부분적으로 기반하여 하드웨어 이벤트들의 상관된 세트를 제공하는 것을 더 포함할 수 있다.
[00103]
도 3에 도시된 바와 같이, 데이터 구조(320)는 특정 하드웨어 이벤트(322, 324)의 레이턴시 속성을 표시하는 적어도 하나의 파라미터를 식별할 수 있다. 레이턴시 속성은 적어도 특정 하드웨어 이벤트의 지속기간을 표시할 수 있다. 일부 구현들에서, 데이터 구조(320)는 호스트 시스템(126)의 제어 디바이스에 의해 실행되는 소프트웨어 명령들에 의해 생성된다. 일부 경우들에서, 구조(320)는 제어 디바이스가 트레이스 엔트리 데이터를 호스트 시스템(126)의 메모리 디스크/유닛에 저장하는 것에 대한 응답으로 생성될 수 있다.
[00104]
도 4는 시스템(100)에 의해 실행되는 직접 메모리 액세스(DMA) 트레이스 이벤트에 대한 예시적인 트레이스 활동을 표시하는 블록 다이어그램(400)이다. DMA 트레이싱을 위해, 제1 프로세서 노드로부터 제2 프로세서 노드로 발생하는 예시적인 DMA 동작에 대한 데이터는 ICI(112)를 통해 이동할 수 있고, 데이터 경로를 따라 중간 ICI/라우터 홉들을 생성할 수 있다. DMA 동작은, DMA 동작이 ICI(112)를 가로지름에 따라, 프로세서 칩 내의 각각의 노드에서, 그리고 각각의 홉을 따라 트레이스 엔트리들을 생성할 것이다. 정보는 노드들 및 홉들을 따라 DMA 동작들의 시간적 진행을 재구성하기 위해 이들 생성된 트레이스 엔트리들 각각에 의해 캡처된다.
[00105]
예시적인 DMA 동작은 도 4의 구현에 묘사된 프로세스 단계들과 연관될 수 있다. 이 동작을 위해, 로컬 DMA는 프로세서 코어들(104, 106) 중 적어도 하나와 연관된 가상 메모리(402)(vmem(402))로부터 HBM(108)으로 데이터를 전달한다. 다이어그램(400)에 묘사된 번호는 표(404)의 단계들에 대응하고 일반적으로 노드 패브릭(110)의 활동들 또는 노드 패브릭(110)에 의해 개시된 활동들을 나타낸다.
[00106]
표(404)의 단계들은 일반적으로 연관된 트레이스 포인트들을 설명한다. 예시적인 동작은 이런 DMA에 대해 6개의 트레이스 엔트리들을 생성할 것이다. 단계 1은 노드 패브릭에서 트레이스 포인트를 생성하는, 프로세서 코어로부터 노드 패브릭(110)으로의 초기 DMA 요청을 포함한다. 단계 2는, 노드 패브릭(110)이 노드 패브릭(110)에서 다른 트레이스 포인트를 생성하는 데이터를 전달하도록 프로세서 코어에 요청하는 판독 커맨드를 포함한다. 예시적인 동작은, vmem(402)이 노드 패브릭(110)의 판독을 완료할 때 단계 3에 대한 트레이스 엔트리를 가지지 않는다.
[00107]
단계 4는, 노드 패브릭(110)이 프로세서 코어에서 트레이스 포인트를 생성하는 동기 플래그 업데이트를 프로세서 코어에서 유발하기 위해 판독 자원 업데이트를 수행하는 것을 포함한다. 단계 5는, 노드 패브릭(110)이 HBM에 기입될 예정 데이터를 메모리 멀티플렉서(108)에게 통지하는 기입 커맨드를 포함한다. 기입 커맨드를 통한 통지는 노드 패브릭(110)에서 트레이스 포인트를 생성하지만, 단계 6에서, HBM에 대한 기입의 완료는 또한 노드 패브릭(110)에서 트레이스 포인트를 생성한다. 단계 7에서, 노드 패브릭(110)은 프로세서 코어(예컨대, FPC(104))에서 트레이스 포인트를 생성하는 동기 플래그 업데이트를 프로세서 코어에서 유발하기 위해 기입 자원 업데이트를 수행한다. 기입 자원 업데이트 외에, 노드 패브릭(110)은, DMA 동작에 대한 데이터 완료가 다시 프로세서 코어에 시그널링되는 확인응답 업데이트("ack update")를 수행할 수 있다. 확인응답 업데이트는 기입 자원 업데이트에 의해 생성된 트레이스 엔트리들과 유사한 트레이스 엔트리들을 생성할 수 있다.
[00108]
다른 예시적인 DMA 동작에서, 제1 트레이스 엔트리는, DMA 명령이 발생 노드의 노드 패브릭(110)에서 발행될 때 생성된다. 부가적인 트레이스 엔트리들은 DMA에 대한 데이터를 판독하고 그 데이터를 아웃고잉 큐들에 기입하는 데 사용되는 시간을 캡처하기 위해 노드 패브릭(110)에서 생성될 수 있다. 일부 구현들에서, 노드 패브릭(110)은 DMA 데이터를 데이터의 더 작은 청크(chunk)들로 패킷화할 수 있다. 더 작은 청크들로 패킷화된 데이터에 대해, 판독 및 기입 트레이스 엔트리들은 제1 데이터 청크 및 마지막 데이터 청크에 대해 생성될 수 있다. 선택적으로, 제1 및 마지막 데이터 청크들 외에, 모든 데이터 청크들은 트레이스 엔트리들을 생성하도록 세팅될 수 있다.
[00109]
ICI 홉들을 요구할 수 있는 원격/비-로컬 DMA 동작들에 대해, 제1 데이터 및 마지막 데이터 청크는 ICI/라우터(112)를 따른 각각의 중간 홉의 입구 및 출구 포인트들에서 부가적인 트레이스 엔트리들을 생성할 수 있다. DMA 데이터가 목적지 노드에 도달할 때, 이전 노드 패브릭(110) 엔트리들과 유사한 트레이스 엔트리들이 목적지 노드에서 생성된다(예컨대, 제1 및 마지막 데이터 청크들의 판독/기입). 일부 구현들에서, DMA 동작의 마지막 단계는 목적지 노드에서 동기 플래그에 대한 업데이트를 야기하는 DMA와 연관된 실행된 명령들을 포함할 수 있다. 동기 플래그가 업데이트될 때, DMA 동작의 완료를 표시하는 트레이스 엔트리가 생성될 수 있다.
[00110]
일부 구현들에서, DMA 트레이싱은, 트레이스 포인트들이 실행될 수 있도록 각각의 컴포넌트가 트레이스 모드에 있을 때 FPC(104), SPC(106) 또는 HIB(114)에 의해 개시된다. 시스템(100)의 컴포넌트들은 FPC(104) 또는 SPC(106)에서 글로벌 제어들에 기반하여 트리거 메커니즘을 통해 트레이스 모드에 진입할 수 있다. 트레이스 포인트들은 시스템(100)의 컴포넌트들에 의한 프로그램 코드의 실행과 연관된 특정 동작 또는 조건의 발생에 대한 응답으로 트리거한다. 예컨대, 프로그램 코드의 부분들은 시스템(100)의 적어도 하나의 하드웨어 컴포넌트에 의해 검출가능한 내장된 트리거 기능들을 포함할 수 있다.
[00111]
시스템(100)의 컴포넌트들은 FPC(104) 또는 SPC(106) 중 적어도 하나에 의해 실행되는 프로그램 코드의 부분들과 연관된 트리거 기능을 검출하도록 구성될 수 있다. 일부 경우들에서, 트리거 기능은 1) 실행된 프로그램 코드의 일부 또는 모듈에서의 특정 시퀀스 단계; 또는 2) 시스템(100)의 분산형 프로세서 유닛들에 의해 사용된 GTC에 의해 표시된 특정 시간 파라미터 중 적어도 하나에 대응할 수 있다.
[00112]
트리거 기능을 검출하는 것에 대한 응답으로, 시스템(100)의 특정 컴포넌트는 하나 이상의 하드웨어 이벤트들과 연관된 트레이스 엔트리 데이터가 하드웨어 컴포넌트의 적어도 하나의 메모리 버퍼에 저장되게 하는 적어도 하나의 트레이스 포인트(예컨대, 트레이스 이벤트)를 개시, 트리거, 또는 실행할 수 있다. 이어서, 위에서 주목된 바와 같이, 저장된 트레이스 데이터는 적어도 하나의 트레이스 체인(203, 205, 207)에 의해 칩 관리자(216)에 제공될 수 있다.
[00113]
도 5는 시스템(100)의 컴포넌트 피처들 및 시스템(100)의 하나 이상의 노드들(200, 201)을 사용한 분산형 하드웨어 트레이싱을 위한 예시적인 프로세스(500)의 프로세스 흐름도이다. 따라서, 프로세스(500)는 노드들(200, 201)을 포함하는 시스템들(100)의 위에-언급된 컴퓨팅 자원들 중 하나 이상을 사용하여 구현될 수 있다.
[00114]
프로세스(500)는 블록(502)에서 시작되고 그리고 컴퓨팅 시스템(100)이 하나 이상의 프로세서 컴포넌트들(적어도 FPC(104) 및 SPC(106)를 포함함)에 의해 실행되는 프로그램 코드의 실행을 모니터링하는 것을 포함한다. 일부 구현들에서, 트레이싱 활동들을 생성하는 프로그램 코드의 실행은 적어도 부분적으로, 다수의 호스트 시스템들, 또는 단일 호스트 시스템의 서브시스템들에 의해 모니터링될 수 있다. 따라서, 이들 구현들에서, 시스템(100)은 분산형 프로세싱 유닛들에 걸쳐 발생하는 하드웨어 이벤트들에 대한 트레이싱 활동들의 분석에 관련된 다수의 프로세스들(500)을 수행할 수 있다.
[00115]
일부 구현들에서, 제1 프로세서 컴포넌트는 모니터링되는 프로그램 코드의 적어도 제1 부분을 실행하도록 구성된다. 블록(504)에서, 프로세스(500)는 컴퓨팅 시스템(100)이 제2 프로세서 컴포넌트에 의해 실행되는 프로그램 코드의 실행을 모니터링하는 것을 포함한다. 일부 구현들에서, 제2 프로세서 컴포넌트는 모니터링되는 프로그램 코드의 적어도 제2 부분을 실행하도록 구성된다.
[00116]
컴퓨팅 시스템(100)의 컴포넌트들은 각각 적어도 하나의 메모리 버퍼를 포함할 수 있다. 프로세스(500)의 블록(506)은 시스템(100)이 특정 컴포넌트의 적어도 하나의 메모리 버퍼에, 하나 이상의 하드웨어 이벤트들을 식별하는 데이터를 저장하는 것을 포함한다. 일부 구현들에서, 하드웨어 이벤트들은 적어도 제1 프로세서 컴포넌트 및 제2 프로세서 컴포넌트를 포함하는 분산형 프로세서 유닛들에 걸쳐 발생한다. 하드웨어 이벤트들을 식별하는 저장된 데이터는 각각 하드웨어 이벤트 타임스탬프, 및 하드웨어 이벤트를 특징화하는 메타데이터를 포함할 수 있다. 일부 구현들에서, 하드웨어 이벤트들의 콜렉션은 타임라인 이벤트들에 대응한다.
[00117]
예컨대, 시스템(100)은 부분적으로, 시스템(100) 내의 소스 하드웨어 컴포넌트와 시스템(100) 내의 목적지 하드웨어 컴포넌트 사이에서의 데이터 패킷들의 이동에 대응하는 하나 이상의 하드웨어 이벤트들을 식별하는 데이터를 저장할 수 있다. 일부 구현들에서, 하드웨어 이벤트를 특징화하는 저장된 메타데이터는, 1) 소스 메모리 어드레스, 2) 목적지 메모리 어드레스, 3) 하드웨어 이벤트가 저장되게 하는 트레이스 엔트리에 관련된 고유 트레이스 식별 번호, 또는 4) 직접 메모리 액세스(DMA) 트레이스 엔트리와 연관된 크기 파라미터 중 적어도 하나에 대응할 수 있다.
[00118]
일부 구현들에서, 하드웨어 이벤트들의 콜렉션을 식별하는 데이터를 저장하는 것은 예컨대 적어도 하나의 로컬 트레이스 이벤트 큐(310)에 대응하는 FPC(104) 및/또는 SPC(106)의 메모리 버퍼에 이벤트 데이터를 저장하는 것을 포함한다. 저장된 이벤트 데이터는 하드웨어 이벤트들의 더 큰 타임라인을 생성하는 데 사용될 수 있는 하드웨어 이벤트 데이터의 서브세트들을 표시할 수 있다. 일부 구현들에서, 이벤트 데이터의 저장은 FPC(104) 또는 SPC(106) 중 적어도 하나가 시스템(100)의 컴포넌트들에 의해 실행되는 프로그램 코드의 부분들과 연관된 하드웨어 트레이스 명령들을 실행하는 것에 대한 응답으로 발생한다.
[00119]
프로세스(500)의 블록(508)에서, 시스템(100)은 하드웨어 이벤트들의 콜렉션으로부터 하나 이상의 하드웨어 이벤트들을 식별하는 데이터 구조, 이를테면 구조(320)를 생성한다. 데이터 구조는 적어도 제1 프로세서 컴포넌트 및 제2 프로세서 컴포넌트와 연관된 이벤트들의 시간 순서화된 시퀀스로 하나 이상의 하드웨어 이벤트들을 배열할 수 있다. 일부 구현들에서, 데이터 구조는 특정 트레이스 이벤트에 대한 하드웨어 이벤트 타임스탬프, 트레이스 이벤트와 연관된 소스 어드레스, 또는 트레이스 이벤트와 연관된 메모리 어드레스를 식별한다.
[00120]
프로세스(500)의 블록(510)에서, 시스템(100)은 호스트 시스템(126)과 연관된 호스트 디바이스의 메모리 뱅크에, 생성된 데이터 구조를 저장한다. 일부 구현들에서, 저장된 데이터 구조는 적어도 제1 프로세서 컴포넌트 또는 제2 프로세서 컴포넌트에 의해 실행되는 프로그램 코드의 성능을 분석하도록 호스트 시스템(126)에 의해 사용될 수 있다. 마찬가지로, 저장된 데이터 구조는 시스템(100)의 적어도 하나의 컴포넌트의 성능을 분석하도록 호스트 시스템(126)에 의해 사용될 수 있다.
[00121]
예컨대, 사용자, 또는 호스트 시스템(126)은, 프로그램 코드 내의 특정 소프트웨어 모듈의 실행과 연관된 성능 문제가 있는지를 검출 또는 결정하기 위해 데이터 구조를 분석할 수 있다. 예시적인 문제는 소프트웨어 모듈이 배정된 실행 시간 윈도우 내에서 실행을 완료하지 못하는 것을 포함할 수 있다.
[00122]
게다가, 사용자, 또는 호스트 디바이스(126)는, 시스템(100)의 특정 컴포넌트가 임계 성능 레벨을 초과하여 동작하는지 또는 미만으로 동작하는지를 검출 또는 결정할 수 있다. 컴포넌트 성능과 관련된 예시적인 문제는 특정 하드웨어 컴포넌트가 소정의 이벤트들을 실행하지만 결과 데이터에 대한 허용가능한 파라미터 범위들 밖에 있는 결과 데이터를 생성하는 것을 포함할 수 있다. 일부 구현들에서, 결과 데이터는 실질적으로 유사한 동작들을 실행하는 시스템(100)의 다른 관련된 컴포넌트들에 의해 생성된 결과 데이터와 일치하지 않을 수 있다.
[00123]
예컨대, 프로그램 코드의 실행 동안, 시스템(100)의 제1 컴포넌트는 동작을 완료하고 결과를 생성하도록 요구될 수 있다. 마찬가지로, 시스템(100)의 제2 컴포넌트는 실질적으로 유사한 동작을 완료하고 실질적으로 유사한 결과를 생성하도록 요구될 수 있다. 생성된 데이터 구조의 분석은, 제2 컴포넌트가 제1 컴포넌트에 의해 생성된 결과와 크게 상이한 결과를 생성했다는 것을 표시할 수 있다. 마찬가지로, 데이터 구조는 허용가능한 결과 파라미터들의 범위 밖에 현저하게 있는 제2 컴포넌트의 결과 파라미터 값을 표시할 수 있다. 유사하게, 이들 결과들은 시스템(100)의 제2 컴포넌트에 대한 잠재적인 성능 문제를 표시할 수 있을 수 있다.
[00124]
본 명세서에 설명된 청구 대상 및 기능적 동작들의 실시예들은 디지털 전자 회로, 유형-구현된 컴퓨터 소프트웨어 또는 펌웨어, 본 명세서에 개시된 구조들 및 이의 구조적 등가물들을 포함하는 컴퓨터 하드웨어, 또는 이들 중 하나 이상의 것들의 조합들로 구현될 수 있다. 본 명세서에 설명된 청구 대상의 실시예들은 하나 이상의 컴퓨터 프로그램들, 즉 데이터 프로세싱 장치에 의한 실행을 위해, 또는 그의 동작을 제어하기 위해 유형의 비일시적 프로그램 캐리어 상에 인코딩된 컴퓨터 프로그램 명령들의 하나 이상의 모듈들로서 구현될 수 있다. 대안적으로, 또는 부가적으로, 프로그램 명령들은 인공적으로 생성된 전파 신호, 예컨대 데이터 프로세싱 장치에 의한 실행을 위해 적합한 수신기 장치로의 송신을 위한 정보를 인코딩하기 위해 생성된 기계-생성 전기, 광학 또는 전자기 신호 상에 인코딩될 수 있다. 컴퓨터 저장 매체는 기계-판독가능 저장 디바이스, 기계-판독가능 저장 기판, 랜덤 또는 직렬 액세스 메모리 디바이스, 또는 이들 중 하나 이상의 것들의 조합일 수 있다.
[00125]
본 명세서에 설명된 프로세스들 및 로직 흐름들은 입력 데이터에 대해 동작하여 출력(들)을 생성함으로써 기능들을 수행하기 위해 하나 이상의 컴퓨터 프로그램들을 실행하는 하나 이상의 프로그램가능 컴퓨터들에 의해 수행될 수 있다. 프로세스들 및 로직 흐름들은 또한 특수 목적 로직 회로, 예컨대 FPGA(field programmable gate array), ASIC(application specific integrated circuit), 또는 GPGPU(General purpose graphics processing unit)에 의해 수행될 수 있고, 장치는 또한 이들로서 구현될 수 있다.
[00126]
컴퓨터 프로그램의 실행에 적합한 컴퓨터들은 범용 또는 특수 목적 마이크로프로세서들 또는 둘 모두, 또는 임의의 다른 종류의 중앙 프로세싱 유닛을 포함하고, 예로써 그들에 기반할 수 있다. 일반적으로, 중앙 프로세싱 유닛은 판독 전용 메모리 또는 랜덤 액세스 메모리 또는 둘 모두로부터 명령들 및 데이터를 수신할 것이다. 컴퓨터의 필수 엘리먼트들은 명령들을 수행 또는 실행하기 위한 중앙 프로세싱 유닛 및 명령들 및 데이터를 저장하기 위한 하나 이상의 메모리 디바이스들이다. 일반적으로, 컴퓨터는 또한 데이터를 저장하기 위한 하나 이상의 대용량 저장 디바이스들, 예컨대 자기, 자기 광학 디스크들, 또는 광학 디스크들을 포함할 것이거나, 또는 이들로부터 데이터를 수신하거나 이들로 데이터를 전달하거나, 또는 둘 모두를 수행하도록 동작가능하게 커플링될 것이다. 그러나, 컴퓨터는 그런 디바이스들을 가질 필요는 없다.
[00127]
컴퓨터 프로그램 명령들 및 데이터를 저장하기에 적합한 컴퓨터 판독가능 매체들은 예로써 반도체 메모리 디바이스들, 예컨대 EPROM, EEPROM 및 플래시 메모리 디바이스들; 자기 디스크들, 예컨대 내부 하드 디스크들 또는 탈착가능 디스크들을 포함하는 모든 형태들의 비-휘발성 메모리, 매체들 및 메모리 디바이스들을 포함한다. 프로세서 및 메모리는 특수 목적 로직 회로에 의해 보완되거나 이에 통합될 수 있다.
[00128]
본 명세서가 많은 특정 구현 세부사항들을 포함하지만, 이들은 임의의 발명 또는 청구될 수 있는 것의 범위의 제한들로서 해석되는 것이 아니라, 오히려 특정 발명들의 특정 실시예들에 특정적일 수 있는 특징들의 설명들로서 해석되어야 한다. 별개의 실시예들의 맥락에서 본 명세서에 설명된 소정의 특징들은 또한 단일 실시예에서 조합으로 구현될 수 있다. 반대로, 단일 실시예의 맥락에서 설명된 다양한 특징들은 또한 다수의 실시예들에서 개별적으로 또는 임의의 다른 적합한 서브조합으로 구현될 수 있다. 게다가, 비록 특징들이 소정의 조합들로 작용하고 심지어 그러한 것으로서 처음에 청구된 것으로 위에서 설명될 수 있지만, 청구된 조합으로부터의 하나 이상의 특징들은 일부 경우들에서 조합으로부터 제거될 수 있고, 청구된 조합은 서브조합 또는 서브조합의 변형으로 지향될 수 있다.
[00129]
유사하게, 동작들이 특정 순서로 도면들에 묘사되지만, 이것은, 원하는 결과들을 달성하기 위해, 그런 동작들이 도시된 특정 순서 또는 순차적 순서로 수행되거나, 또는 모든 예시된 동작들이 수행되는 것을 요구하는 것으로 이해되지 않아야 한다. 소정의 상황들에서, 멀티태스킹 및 병렬 프로세싱이 유리할 수 있다. 게다가, 위에 설명된 실시예들에서 다양한 시스템 모듈들 및 컴포넌트들의 분리는 모든 실시예들에서 그런 분리를 요구하는 것을 이해되지 않아야 하고, 설명된 프로그램 컴포넌트들 및 시스템들이 일반적으로 단일 소프트웨어 제품으로 함께 통합되거나 다수의 소프트웨어 제품들로 패키징될 수 있는 것이 이해되어야 한다.
[00130]
청구 대상의 특정 실시예들이 설명되었다. 다른 실시예들은 다음 청구항들의 범위 내에 있다. 예컨대, 청구항들에서 언급된 동작들은 상이한 순서로 수행될 수 있고 여전히 원하는 결과들을 달성할 수 있다. 일 예로서, 첨부 도면들에 묘사된 프로세스들은 원하는 결과들을 달성하기 위해 도시된 특정 순서, 또는 순차적 순서를 반드시 요구하지는 않는다. 소정의 구현들에서, 멀티태스킹 및 병렬 프로세싱이 유리할 수 있다.
Claims (20)
- 트레이싱(tracing) 시스템을 사용하여 수행되는 방법으로서,
복수의 노드들을 포함하는 프로세서에 코드를 제공하는 단계;
상기 프로세서의 상기 복수의 노드들 각각을 사용하여 상기 코드를 실행하는 단계;
상기 프로세서에 포함된 상기 복수의 노드들의 특정 노드에 대해:
상기 트레이싱 시스템의 카운터(counter)를 사용하여 트레이스(trace) 데이터가 상기 프로세서에서 생성되게 하는 제1 값으로 트레이스 비트가 세팅되는 것을 검출하는 단계;
상기 제1 값으로 상기 트레이스 비트가 세팅되는 것을 검출하는 것에 응답하여 상기 트레이스 데이터를 생성하는 단계 ― 상기 트레이스 데이터는 상기 카운터에 저장됨 ―; 및
호스트에서의 분석을 위해 상기 카운터에 저장된 상기 트레이스 데이터를 상기 호스트에 제공하는 단계를 포함하는, 방법. - 제1항에 있어서,
상기 복수의 노드들 중 적어도 하나의 노드는 상기 프로세서에 의해 실행되는 상기 코드에 의해 발행되는 명령에 기초하여 특정 동작(operation)을 실행하도록 동작가능한 고정-기능 컴포넌트 노드이고, 상기 특정 동작은, 상기 제1 값으로 상기 트레이스 비트가 세팅되는 것을 검출하는 것에 응답하여 상기 트레이스 데이터를 생성하기 위해 사용되는, 방법. - 제2항에 있어서,
상기 고정-기능 컴포넌트 노드는 메모리 액세스 엔진이고, 그리고 상기 트레이스 데이터를 생성하는 것은:
상기 코드에 의해 발행되는 명령에 기초하여, 상기 메모리 액세스 엔진을 사용하여 수행될 메모리 액세스 동작에 대한 디스크립터(descriptor)를 생성하는 것을 포함하고,
상기 디스크립터는, 상기 카운터를 사용하여 상기 트레이스 데이터가 상기 프로세서에서 생성되게 하도록 상기 제1 값으로 세팅되는 상기 트레이스 비트를 포함하는, 방법. - 제3항에 있어서,
상기 특정 동작은 상기 메모리 액세스 엔진을 사용하여 상기 메모리 액세스 동작을 수행하는 것을 포함하고;
상기 메모리 액세스 동작은 상기 특정 노드 및 상기 복수의 노드들 중 적어도 하나의 다른 노드를 수반하는 다수의 중간(intermediate) 동작들을 포함하고; 그리고
상기 메모리 액세스 동작을 수행하는 것은 중간 동작과 연관된 트레이스 데이터가 상기 특정 노드의 메모리 버퍼에 저장되게 하는, 방법. - 제1항 또는 제2항에 있어서,
상기 트레이스 데이터를 생성하는 것은:
상기 복수의 노드들 중 2개 이상의 노드들을 커플링시키는 데이터 통신 버스에 대응하는 트레이스 체인(chain)에 제공될 트레이스 엔트리를 나타내는 데이터를 생성하는 것을 포함하는, 방법. - 제5항에 있어서,
상기 방법은:
상기 트레이스 체인을 사용하여, 상기 트레이싱 시스템의 칩 관리자에 저장될 상기 트레이스 엔트리를 나타내는 데이터를 제공하는 단계; 및
상기 칩 관리자에 상기 트레이스 엔트리를 나타내는 데이터를 저장하는 단계를 더 포함하고,
상기 칩 관리자는, 상기 코드가 실행되고 있을 때 상기 프로세서에서 발생하는 복수의 하드웨어 이벤트들에 대해 다수의 트레이스 엔트리들을 저장하도록 동작가능한, 방법. - 제1항 또는 제2항에 있어서,
상기 방법은:
상기 호스트에 의해, 상기 프로세서의 노드로 하여금 하드웨어 이벤트를 설명하는 트레이스 데이터를 저장하게 하기 위해 상기 프로세서에 제공되는 상기 코드에 피연산자(operand)를 내장(embed)하는 단계를 더 포함하고,
상기 하드웨어 이벤트는 상기 프로세서에서의 상기 코드의 실행 동안 발생하는, 방법. - 제7항에 있어서,
상기 코드를 제공하는 것은:
상기 호스트에 의해 상기 코드를 컴파일링하는 것에 응답하여 상기 코드를 제공하는 것을 포함하고,
상기 호스트는 상기 트레이싱 시스템의 호스트 인터페이스 및 노드 패브릭(node fabric)에 의해 상기 프로세서에 커플링되고, 상기 호스트는 상기 프로세서에 상기 컴파일링된 코드를 제공하기 위해 상기 호스트 인터페이스 및 상기 노드 패브릭 각각을 사용하는, 방법. - 제8항에 있어서,
상기 코드를 컴파일링하는 것은:
상기 트레이싱 시스템의 상기 호스트 인터페이스 및 상기 노드 패브릭과 통신하는 상기 호스트의 모니터링 엔진을 사용하여 상기 컴파일링된 코드의 성능 분석을 가능하게 하기 위해 상기 프로세서에 제공되는 상기 코드에 상기 피연산자를 내장하는 것을 포함하는, 방법. - 트레이싱 시스템으로서,
하나 이상의 프로세싱 디바이스들; 및
동작들의 수행(performance)을 유발하도록 상기 하나 이상의 프로세싱 디바이스들에 의해 실행가능한 명령들을 저장하는 하나 이상의 비-일시적 기계-판독가능 저장 디바이스들을 포함하고,
상기 동작들은:
복수의 노드들을 포함하는 프로세서에 코드를 제공하는 것;
상기 프로세서의 상기 복수의 노드들 각각을 사용하여 상기 코드를 실행하는 것;
상기 프로세서에 포함된 상기 복수의 노드들의 특정 노드에 대해:
상기 트레이싱 시스템의 카운터를 사용하여 트레이스 데이터가 상기 프로세서에서 생성되게 하는 제1 값으로 트레이스 비트가 세팅되는 것을 검출하는 것;
상기 제1 값으로 상기 트레이스 비트가 세팅되는 것을 검출하는 것에 응답하여 상기 트레이스 데이터를 생성하는 것 ― 상기 트레이스 데이터는 상기 카운터에 저장됨 ―; 및
호스트에서의 분석을 위해 상기 카운터에 저장된 상기 트레이스 데이터를 상기 호스트에 제공하는 것
을 포함하는, 트레이싱 시스템. - 제10항에 있어서,
상기 복수의 노드들 중 적어도 하나의 노드는 상기 프로세서에 의해 실행되는 상기 코드에 의해 발행되는 명령에 기초하여 특정 동작을 실행하도록 동작가능한 고정-기능 컴포넌트 노드이고, 상기 특정 동작은, 상기 제1 값으로 상기 트레이스 비트가 세팅되는 것을 검출하는 것에 응답하여 상기 트레이스 데이터를 생성하기 위해 사용되는, 트레이싱 시스템. - 제11항에 있어서,
상기 고정-기능 컴포넌트 노드는 메모리 액세스 엔진이고, 그리고 상기 트레이스 데이터를 생성하는 것은:
상기 코드에 의해 발행되는 명령에 기초하여, 상기 메모리 액세스 엔진을 사용하여 수행될 메모리 액세스 동작에 대한 디스크립터를 생성하는 것을 포함하고,
상기 디스크립터는, 상기 카운터를 사용하여 상기 트레이스 데이터가 상기 프로세서에서 생성되게 하도록 상기 제1 값으로 세팅되는 상기 트레이스 비트를 포함하는, 트레이싱 시스템. - 제12항에 있어서,
상기 특정 동작은 상기 메모리 액세스 엔진을 사용하여 상기 메모리 액세스 동작을 수행하는 것을 포함하고;
상기 메모리 액세스 동작은 상기 특정 노드 및 상기 복수의 노드들 중 적어도 하나의 다른 노드를 수반하는 다수의 중간 동작들을 포함하고; 그리고
상기 메모리 액세스 동작을 수행하는 것은 중간 동작과 연관된 트레이스 데이터가 상기 특정 노드의 메모리 버퍼에 저장되게 하는, 트레이싱 시스템. - 제10항 또는 제11항에 있어서,
상기 트레이스 데이터를 생성하는 것은:
상기 복수의 노드들 중 2개 이상의 노드들을 커플링시키는 데이터 통신 버스에 대응하는 트레이스 체인에 제공될 트레이스 엔트리를 나타내는 데이터를 생성하는 것을 포함하는, 트레이싱 시스템. - 제14항에 있어서,
상기 동작들은:
상기 트레이스 체인을 사용하여, 상기 트레이싱 시스템의 칩 관리자에 저장될 상기 트레이스 엔트리를 나타내는 데이터를 제공하는 것; 및
상기 칩 관리자에 상기 트레이스 엔트리를 나타내는 데이터를 저장하는 것을 포함하고,
상기 칩 관리자는, 상기 코드가 실행되고 있을 때 상기 프로세서에서 발생하는 복수의 하드웨어 이벤트들에 대해 다수의 트레이스 엔트리들을 저장하도록 동작가능한, 트레이싱 시스템. - 제10항 또는 제11항에 있어서,
상기 동작들은:
상기 호스트에 의해, 상기 프로세서의 노드로 하여금 하드웨어 이벤트를 설명하는 트레이스 데이터를 저장하게 하기 위해 상기 프로세서에 제공되는 상기 코드에 피연산자를 내장하는 것을 포함하고,
상기 하드웨어 이벤트는 상기 프로세서에서의 상기 코드의 실행 동안 발생하는, 트레이싱 시스템. - 제16항에 있어서,
상기 코드를 제공하는 것은:
상기 호스트에 의해 상기 코드를 컴파일링하는 것에 응답하여 상기 코드를 제공하는 것을 포함하고,
상기 호스트는 상기 트레이싱 시스템의 호스트 인터페이스 및 노드 패브릭에 의해 상기 프로세서에 커플링되고, 상기 호스트는 상기 프로세서에 상기 컴파일링된 코드를 제공하기 위해 상기 호스트 인터페이스 및 상기 노드 패브릭 각각을 사용하는, 트레이싱 시스템. - 제17항에 있어서,
상기 코드를 컴파일링하는 것은:
상기 트레이싱 시스템의 상기 호스트 인터페이스 및 상기 노드 패브릭과 통신하는 상기 호스트의 모니터링 엔진을 사용하여 상기 컴파일링된 코드의 성능 분석을 가능하게 하기 위해 상기 프로세서에 제공되는 상기 코드에 상기 피연산자를 내장하는 것을 포함하는, 트레이싱 시스템. - 동작들의 수행을 유발하도록 트레이싱 시스템의 하나 이상의 프로세싱 디바이스들에 의해 실행가능한 명령들을 저장하는 하나 이상의 비-일시적 기계-판독가능 저장 디바이스로서,
상기 동작들은:
복수의 노드들을 포함하는 프로세서에 코드를 제공하는 것;
상기 프로세서의 상기 복수의 노드들 각각을 사용하여 상기 코드를 실행하는 것;
상기 프로세서에 포함된 상기 복수의 노드들의 특정 노드에 대해:
상기 트레이싱 시스템의 카운터를 사용하여 트레이스 데이터가 상기 프로세서에서 생성되게 하는 제1 값으로 트레이스 비트가 세팅되는 것을 검출하는 것;
상기 제1 값으로 상기 트레이스 비트가 세팅되는 것을 검출하는 것에 응답하여 상기 트레이스 데이터를 생성하는 것 ― 상기 트레이스 데이터는 상기 카운터에 저장됨 ―; 및
호스트에서의 분석을 위해 상기 카운터에 저장된 상기 트레이스 데이터를 상기 호스트에 제공하는 것
을 포함하는, 비-일시적 기계-판독가능 저장 디바이스. - 제19항에 있어서,
상기 트레이스 데이터를 생성하는 것은:
상기 복수의 노드들 중 2개 이상의 노드들을 커플링시키는 데이터 통신 버스에 대응하는 트레이스 체인에 제공될 트레이스 엔트리를 나타내는 데이터를 생성하는 것;
상기 트레이싱 시스템의 칩 관리자에 의해, 상기 칩 관리자에 저장하기 위한 상기 트레이스 엔트리를 나타내는 데이터를 수신하는 것; 및
수신하는 것에 응답하여, 상기 트레이싱 시스템의 상기 칩 관리자에 상기 트레이스 엔트리를 나타내는 데이터를 저장하는 것을 포함하고,
상기 칩 관리자는, 상기 코드가 실행되고 있을 때 상기 프로세서에서 발생하는 복수의 하드웨어 이벤트들에 대해 다수의 트레이스 엔트리들을 저장하도록 동작가능한, 비-일시적 기계-판독가능 저장 디바이스.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020227005046A KR102464845B1 (ko) | 2017-03-29 | 2017-10-20 | 분산형 하드웨어 트레이싱 |
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/473,101 | 2017-03-29 | ||
US15/473,101 US9875167B1 (en) | 2017-03-29 | 2017-03-29 | Distributed hardware tracing |
PCT/US2017/057619 WO2018182782A1 (en) | 2017-03-29 | 2017-10-20 | Distributed hardware tracing |
KR1020197021609A KR102277867B1 (ko) | 2017-03-29 | 2017-10-20 | 분산형 하드웨어 트레이싱 |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020197021609A Division KR102277867B1 (ko) | 2017-03-29 | 2017-10-20 | 분산형 하드웨어 트레이싱 |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020227005046A Division KR102464845B1 (ko) | 2017-03-29 | 2017-10-20 | 분산형 하드웨어 트레이싱 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20210089791A true KR20210089791A (ko) | 2021-07-16 |
KR102365640B1 KR102365640B1 (ko) | 2022-02-18 |
Family
ID=60269931
Family Applications (4)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020217021484A KR102365640B1 (ko) | 2017-03-29 | 2017-10-20 | 분산형 하드웨어 트레이싱 |
KR1020197021609A KR102277867B1 (ko) | 2017-03-29 | 2017-10-20 | 분산형 하드웨어 트레이싱 |
KR1020227005046A KR102464845B1 (ko) | 2017-03-29 | 2017-10-20 | 분산형 하드웨어 트레이싱 |
KR1020227038480A KR102521959B1 (ko) | 2017-03-29 | 2017-10-20 | 분산형 하드웨어 트레이싱 |
Family Applications After (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020197021609A KR102277867B1 (ko) | 2017-03-29 | 2017-10-20 | 분산형 하드웨어 트레이싱 |
KR1020227005046A KR102464845B1 (ko) | 2017-03-29 | 2017-10-20 | 분산형 하드웨어 트레이싱 |
KR1020227038480A KR102521959B1 (ko) | 2017-03-29 | 2017-10-20 | 분산형 하드웨어 트레이싱 |
Country Status (13)
Country | Link |
---|---|
US (5) | US9875167B1 (ko) |
EP (2) | EP4287026A3 (ko) |
JP (3) | JP6845338B2 (ko) |
KR (4) | KR102365640B1 (ko) |
CN (3) | CN108694112B (ko) |
BR (1) | BR112019015271B1 (ko) |
DE (2) | DE102017125481A1 (ko) |
DK (1) | DK3382551T3 (ko) |
FI (1) | FI3382551T3 (ko) |
GB (1) | GB2561042B (ko) |
SG (1) | SG10202104613UA (ko) |
TW (4) | TWI805000B (ko) |
WO (1) | WO2018182782A1 (ko) |
Families Citing this family (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9111072B1 (en) * | 2011-08-23 | 2015-08-18 | Tectonic Labs, LLC | Anti-reverse engineering unified process |
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 |
US10255109B2 (en) | 2017-04-17 | 2019-04-09 | Intel Corporation | High bandwidth connection between processor dies |
US10466986B2 (en) | 2018-03-30 | 2019-11-05 | Oracle International Corporation | Optimized recompilation using hardware tracing |
CN109446024A (zh) * | 2018-10-16 | 2019-03-08 | 杭州绿湾网络科技有限公司 | 应用监控方法及装置 |
US11082493B2 (en) * | 2018-11-16 | 2021-08-03 | Arm Limited | Distributed memory system, device and process |
CN111291240B (zh) * | 2018-12-06 | 2023-12-08 | 华为技术有限公司 | 处理数据的方法和数据处理装置 |
CN109981349B (zh) * | 2019-02-27 | 2022-02-25 | 华为云计算技术有限公司 | 调用链信息查询方法以及设备 |
US11068378B2 (en) * | 2019-04-11 | 2021-07-20 | Microsoft Technology Licensing, Llc | Memory value exposure in time-travel debugging traces |
CN110046116B (zh) * | 2019-04-23 | 2020-08-21 | 上海燧原智能科技有限公司 | 一种张量填充方法、装置、设备及存储介质 |
US11860897B2 (en) | 2019-06-07 | 2024-01-02 | Samsung Electronics Co., Ltd. | Method for using catch-up logging to time-synchronize object stores during maintenance or recovery operations |
US11231987B1 (en) * | 2019-06-28 | 2022-01-25 | Amazon Technologies, Inc. | Debugging of memory operations |
CN110351131B (zh) * | 2019-06-28 | 2022-04-05 | 北京奇才天下科技有限公司 | 一种用于分布式链路的监控方法、装置和电子设备 |
US11513939B2 (en) * | 2019-08-02 | 2022-11-29 | EMC IP Holding Company LLC | Multi-core I/O trace analysis |
US11409634B2 (en) * | 2019-11-14 | 2022-08-09 | Cisco Technology, Inc. | Retroactive tracing in a distributed system |
US11145389B2 (en) * | 2019-12-03 | 2021-10-12 | Intel Corporation | Detection and error-handling of high error rate blocks during copyback |
KR102267920B1 (ko) * | 2020-03-13 | 2021-06-21 | 성재모 | 매트릭스 연산 방법 및 그 장치 |
US11875247B1 (en) * | 2020-06-18 | 2024-01-16 | Amazon Technologies, Inc. | Input batching with serial dynamic memory access |
US11625064B2 (en) * | 2021-08-16 | 2023-04-11 | Qualcomm Incorporated | Systems and methods for sleep clock edge-based global counter synchronization in a chiplet system |
WO2023084749A1 (ja) * | 2021-11-12 | 2023-05-19 | 日本電信電話株式会社 | コンピュータシステムおよびその制御方法 |
WO2023084750A1 (ja) * | 2021-11-12 | 2023-05-19 | 日本電信電話株式会社 | コンピュータシステムおよびその制御方法 |
JPWO2023084748A1 (ko) * | 2021-11-12 | 2023-05-19 | ||
US11798654B1 (en) | 2022-07-28 | 2023-10-24 | The Florida International University Board Of Trustees | Systems and methods for matching mass spectrometry data with a peptide database |
US20240248855A1 (en) * | 2023-01-19 | 2024-07-25 | SambaNova Systems, Inc. | Method and apparatus for selecting data access method in a heterogeneous processing system with multiple processors |
Citations (6)
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 |
US20120226837A1 (en) * | 2011-03-02 | 2012-09-06 | Texas Instruments Incorporated | Method and System of debugging Multicore Bus Transaction Problems |
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 (76)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US1040970A (en) | 1912-06-05 | 1912-10-08 | Henry G Voight | Door controlling and locking means. |
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 |
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 |
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 |
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 |
JP2006318412A (ja) * | 2005-05-16 | 2006-11-24 | Toshiba Corp | 半導体装置 |
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 |
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 |
WO2010097875A1 (ja) * | 2009-02-24 | 2010-09-02 | パナソニック株式会社 | データ処理装置、方法 |
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 |
US8464089B2 (en) * | 2009-06-10 | 2013-06-11 | Panasonic Corporation | Tracing apparatus and tracing system |
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 |
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 |
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 |
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 |
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 |
US20160117196A1 (en) * | 2013-07-31 | 2016-04-28 | Hewlett-Packard Development Company, L.P. | Log analysis |
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 |
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 | 启碁科技股份有限公司 | 用于追踪程序执行状态的方法与多核心处理系统 |
US11232848B2 (en) | 2015-04-30 | 2022-01-25 | 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 | 현대오트론 주식회사 | 멀티 코어를 갖는 마이크로콘트롤러 유닛을 감시하는 감시장치 및 그것의 동작 방법 |
-
2017
- 2017-03-29 US US15/473,101 patent/US9875167B1/en active Active
- 2017-10-20 WO PCT/US2017/057619 patent/WO2018182782A1/en active Application Filing
- 2017-10-20 SG SG10202104613UA patent/SG10202104613UA/en unknown
- 2017-10-20 KR KR1020217021484A patent/KR102365640B1/ko active IP Right Grant
- 2017-10-20 BR BR112019015271-7A patent/BR112019015271B1/pt active IP Right Grant
- 2017-10-20 KR KR1020197021609A patent/KR102277867B1/ko active IP Right Grant
- 2017-10-20 KR KR1020227005046A patent/KR102464845B1/ko active IP Right Grant
- 2017-10-20 KR KR1020227038480A patent/KR102521959B1/ko active IP Right Grant
- 2017-10-20 JP JP2019539979A patent/JP6845338B2/ja active Active
- 2017-10-30 DE DE102017125481.1A patent/DE102017125481A1/de not_active Withdrawn
- 2017-10-30 DE DE202017106613.4U patent/DE202017106613U1/de active Active
- 2017-10-31 GB GB1717923.5A patent/GB2561042B/en active Active
- 2017-10-31 EP EP23188982.5A patent/EP4287026A3/en active Pending
- 2017-10-31 FI FIEP17199337.1T patent/FI3382551T3/fi active
- 2017-10-31 DK DK17199337.1T patent/DK3382551T3/da active
- 2017-10-31 TW TW110136035A patent/TWI805000B/zh active
- 2017-10-31 TW TW106137500A patent/TWI661306B/zh active
- 2017-10-31 TW TW108115086A patent/TWI741287B/zh active
- 2017-10-31 TW TW112118986A patent/TWI817920B/zh active
- 2017-10-31 EP EP17199337.1A patent/EP3382551B1/en active Active
- 2017-12-08 CN CN201711294123.0A patent/CN108694112B/zh active Active
- 2017-12-08 CN CN202110903441.2A patent/CN113778785A/zh active Pending
- 2017-12-08 CN CN201721706223.5U patent/CN208766643U/zh active Active
-
2018
- 2018-01-19 US US15/875,160 patent/US10324817B2/en active Active
-
2019
- 2019-05-14 US US16/411,569 patent/US10896110B2/en active Active
- 2019-10-28 US US16/665,355 patent/US10990494B2/en active Active
-
2021
- 2021-02-25 JP JP2021028781A patent/JP7250832B2/ja active Active
- 2021-04-26 US US17/240,838 patent/US11650895B2/en active Active
-
2023
- 2023-03-22 JP JP2023045549A patent/JP2023082040A/ja active Pending
Patent Citations (6)
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 |
US20120226837A1 (en) * | 2011-03-02 | 2012-09-06 | Texas Instruments Incorporated | Method and System of debugging Multicore Bus Transaction Problems |
US20130042155A1 (en) * | 2011-08-11 | 2013-02-14 | Timothy J. Millet | Non-intrusive processor tracing |
Also Published As
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102365640B1 (ko) | 분산형 하드웨어 트레이싱 | |
KR102493495B1 (ko) | 동기 하드웨어 이벤트 수집 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A107 | Divisional application of patent | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant |