KR101365121B1 - 멀티코어 아키텍쳐의 디버그 - Google Patents
멀티코어 아키텍쳐의 디버그 Download PDFInfo
- Publication number
- KR101365121B1 KR101365121B1 KR1020137006594A KR20137006594A KR101365121B1 KR 101365121 B1 KR101365121 B1 KR 101365121B1 KR 1020137006594 A KR1020137006594 A KR 1020137006594A KR 20137006594 A KR20137006594 A KR 20137006594A KR 101365121 B1 KR101365121 B1 KR 101365121B1
- Authority
- KR
- South Korea
- Prior art keywords
- debug
- trace
- controller
- thread
- interface
- Prior art date
Links
Images
Classifications
-
- 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
-
- 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
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Debugging And Monitoring (AREA)
Abstract
스레드들을 처리하는 상호접속된 다수의 프로세서 부재를 포함하는 멀티코어 프로세서 아키텍쳐내에서 스레드 실행을 모니터링하는 방법으로서, 스레드 또는 스레드들의 함수 및/또는 식별 및/또는 실행과 관련된 하나 이상의 파라미터들을 나타내는 다수의 스레드 파라미터 인디케이터들을 수신하는 단계; 상기 스레드 파라미터 인디케이터들중 적어도 하나를 제 1 다수의 예정된 기준(criteria) - 상기 기준들 각각은 관심 인디케이터를 나타냄- 과 비교하는 단계; 상기 비교 결과에 따라 관심있는 것으로 식별되는 스레드 파라미터 인디케이터들에 대한 결과의 출력을 생성하는 단계를 포함하는, 모니터링 방법이 제공된다.
Description
본 발명은 멀티코어 아키텍쳐에서의 디버그 방법 및 장치에 관한 것이다.
최근에는, 실리콘 효율을 최대화시키기 위해서(즉, '애플리케이션-가능성'(application-available) MIPs/mm2 또는 MIPs/mW), 다수의 코어를 함유하는 프로세서들을 제조하는 추세이다. 이러한 멀티코어 아키텍쳐들은 이상적으로 스레드(threads)에 기초한 애플리케이션들(applications)을 실행시키기에 적합하며, 이는 스레드는 실행 상태, 명령어 스트림(instruction stream) 및 데이터세트를 포함하는 자동화 작업 패키지를 정의하기 때문이며, 정의에 의해 다른 스레드들이 동시적으로 실행될 수 있다. 그러나 이러한 동시적 실행은 상기 멀티코어 아키텍쳐에서 사용되는 소프트웨어 디버그 프로세스에 부가적인 문제점을 부가한다. 소프트웨어 디버그는 컴퓨터 애플리케이션들의 실행시 에러들의 위치를 선별하여 이를 교정하는 일반적인 용어이다.
소프트웨어 디버그시 직면하게되는 문제점들의 주요인은 하이젠베르크 버그(Heisenberg bug)(또한 '탐침 효과(probe effect)'로 공지됨)이다. 디버그를 위해, 예를 들어 시스템 진단 레벨을 증가시키기 위해 부가되는 임의의 코드는 동시적 및/또는 병렬적(parallel) 실행 스레드의 타이밍을 약간(subtly) 변경시킬 수 있다. 이는 동일한 애플리케이션의 프로덕션 릴리즈(production release)에서 관찰될 수 있는 버그들을 만들 위험성이 있다. 또한 확장형(extensive) 디버그 코드가 빌드(build)에 존재할 경우 중요한 성능 측정 및 계측을 어렵게한다. 이는 캐쉬(cashe) 및 상호접속(interconnect) 성능과 같은 2차 효과가 부가적인 코드에 의해 영향을 받고, 코드 크기에 보다 명백한 영향이 가해지기 때문이다.
부가적으로, 제조시 사용되는 확장형 리소스로 인해, 상기 멀티코어 아키텍쳐에 대해 제조되는 소프트웨어의 재사용성을 개선시키기 위한 수요가 증가되었다. 과거에, 멀티코어 아키텍쳐에 대한 애플리케이션들은 맞춤프로그램(bespoke) 베이시스에 기록되어, 이동성이 적은 하드웨어 특정 애플리케이션들이 생산되었다. 확대에서, 이러한 애플리케이션들의 디버그는 상당히 세분화되었다.
본 발명의 일면에 따라, 스레드들을 프로세싱하도록 상호접속된 다수의 프로세서 부재들을 포함하는 멀티코어 프로세서 아키텍쳐 내에서 스레드 실행을 모니터링하는 방법이 제공되며, 상기 방법은 스레드 또는 스레드들의 함수 및/또는 아이덴티티(identity)와 관련되는 하나 이상의 파라미터들을 나타내는 다수의 스레드 파라미터 인디케이터들(indicators)을 수신하는 단계, 스레드 파라미터 인디케이터들중 적어도 일부를 제 1의 다수의 예정된 기준(criteria) - 상기 기준들 각각은 해당 인디케이터를 표현함 - 과 비교하는 단계, 및 상기 비교 결과에 따라 해당되는 것으로 식별되는 스레드 파라미터 인디케이터들에 대한 결과의 출력을 생성하는 단계를 포함한다.
이는 스레드 레벨 디버그를 위해 특정한 코드 부가를 요구하지 않고, 스레드 레벨에서 멀티코어 프로세서 아키텍쳐상에서 애플리케이션 디버그 및 트레이스가 실행되는 성능을 제공한다. 부가적으로, 추가적인 코드의 도입, 및 탐침 효과없이, 멀티코어 아키텍쳐 애플리케이션의 디버그를 가능케하는 장점을 제공한다.
본 발명의 또 다른 면에 따라, 상호접속된 다수의 프로세서 부재들을 가지는 멀티코어 프로세서 아키텍쳐에 대한 스레드 레벨 소프트웨어 디버그 제어기가 제공되며, 각각의 부재는 스레드 프로세싱을 위한 리소스를 제공하며, 디버그 제어기는 상기 프로세서 부재들 각각과 통신하여 멀티코어 프로세서 아키텍쳐 내에서 스레드들의 할당 및 실행을 모니터링하는 모니터 로직을 포함한다.
본 발명은 다양한 방식으로 수행될 수 있으며, 일부 실시예들을 첨부되는 도면들을 참조로 예시적으로 개시한다.
도 1은 전형적인 멀티코어 프로세서 아키텍쳐 시스템의 로직 레이아웃의 개략적 블록도;
도 2는 도 1의 로직 레이아웃의 일 실시예의 개략적 블록도로, 스레드 관리 및 배치 제어기가 전용 메모리 소자 및 제어기 클라이언트와 함께 범용성의 멀티코어 프로세서 아키텍쳐 내에 통합된다;
도 3은 도 2의 부재들과 통합되는 콘템포러리(contemporary) SoC(System On Chip) 버스-기반 아키텍쳐의 예를 나타내는 블록도;
도 4는 도 1, 2 및 도 3의 제어기에 대한 외부 접속부들의 상세도;
도 5는 도 2 및 도 3의 메모리 소자의 상세도;
도 6은 도 2, 3 및 도 4의 제어기의 내부 구조(composition)에 대한 상세도;
도 7A는 도 2 및 도 3에 도시된 것처럼 제어기 클라이언트의 개략적 블록도;
도 7B는 다수의 프로세싱 리소스를 대리하는 단일 제어기 클라이언트의 경우의 시스템 개략도;
도 8은 하드웨어 제어기 클라이언트의 상세한 블록도;
도 9는 스레드 디스크립터(descriptor), 제어기, 프로세싱 리소스 및 공유 시스템 메모리들 사이의 전형적 관계를 나타내는 도면;
도 10A는 본 발명의 실시예에 따른 디버그 아키텍쳐가 통합되는 전형적인 멀티코어 프로세서 아키텍쳐 시스템의 로직 레이아웃의 예시적 구현에 대한 개략적 블록도로, 제어기는 디버그 제어를 위한 중앙 중재자(central arbiter)로서 작용한다.
도 10B는 본 발명의 실시예를 따른 디버그 아키텍쳐가 통합되는 전형적인 멀티코어 프로세서 아키텍쳐의 로직 레이아웃의 또 다른 실시예에 대한 개략적 블록도;
도 11은 도 10A 및 도 10B의 스레드 디버그 제어기에 대한 외부 접속부의 상세도;
도 12A는 도 10A 및 도 10B의 스레드 디버그 제어기의 트레이스 버퍼에 대한 외부 접속부의 상세도;
도 12B는 도 12A의 트레이스 버퍼의 전형적인 출력의 타이밍도;
도 13은 도 2의 제어기의 서브블록들에 대한 접속부들을 포함하는, 도 10A 및 도 10B의 스레드 디버그 제어기에 대한 또다른 외부 접속부의 상세도;
도 14는 도 11의 스레드 디버그 매니저의 내부 구조의 기능 블록도;
도 15는 도 14의 디버그 머신들중 하나의 로직 블록도;
도 16은 도 14의 디버그 머신들중 하나의 로직 블록도;
도 17은 도 14의 디버그 머신들의 연결(concatenation) 성능의 예를 나타내는 도면;
도 18은 싱글 워드 이벤트와치(single word EventWatch)의 경우 디버그 머신내에서 명령 데이터흐름을 나타내는 도면;
도 19는 더블 워드 이벤트와치의 경우 디버그 머신 내에서 명령 데이터흐름을 나타내는 도면;
도 20은 도 14의 예시적인 스태틱 이벤트 필터 모듈(Static events filter module)의 기능 블록도;
도 21은 도 20의 스태틱 이벤트 필터 모듈 내에서 이븐 필터 마스크(Even Filter masks)의 예시적 배치를 나타내는 도면;
도 22는 도 14의 트레이스 데이터 포맷터/압축기 모듈의 예시적인 블록도.
도 2는 도 1의 로직 레이아웃의 일 실시예의 개략적 블록도로, 스레드 관리 및 배치 제어기가 전용 메모리 소자 및 제어기 클라이언트와 함께 범용성의 멀티코어 프로세서 아키텍쳐 내에 통합된다;
도 3은 도 2의 부재들과 통합되는 콘템포러리(contemporary) SoC(System On Chip) 버스-기반 아키텍쳐의 예를 나타내는 블록도;
도 4는 도 1, 2 및 도 3의 제어기에 대한 외부 접속부들의 상세도;
도 5는 도 2 및 도 3의 메모리 소자의 상세도;
도 6은 도 2, 3 및 도 4의 제어기의 내부 구조(composition)에 대한 상세도;
도 7A는 도 2 및 도 3에 도시된 것처럼 제어기 클라이언트의 개략적 블록도;
도 7B는 다수의 프로세싱 리소스를 대리하는 단일 제어기 클라이언트의 경우의 시스템 개략도;
도 8은 하드웨어 제어기 클라이언트의 상세한 블록도;
도 9는 스레드 디스크립터(descriptor), 제어기, 프로세싱 리소스 및 공유 시스템 메모리들 사이의 전형적 관계를 나타내는 도면;
도 10A는 본 발명의 실시예에 따른 디버그 아키텍쳐가 통합되는 전형적인 멀티코어 프로세서 아키텍쳐 시스템의 로직 레이아웃의 예시적 구현에 대한 개략적 블록도로, 제어기는 디버그 제어를 위한 중앙 중재자(central arbiter)로서 작용한다.
도 10B는 본 발명의 실시예를 따른 디버그 아키텍쳐가 통합되는 전형적인 멀티코어 프로세서 아키텍쳐의 로직 레이아웃의 또 다른 실시예에 대한 개략적 블록도;
도 11은 도 10A 및 도 10B의 스레드 디버그 제어기에 대한 외부 접속부의 상세도;
도 12A는 도 10A 및 도 10B의 스레드 디버그 제어기의 트레이스 버퍼에 대한 외부 접속부의 상세도;
도 12B는 도 12A의 트레이스 버퍼의 전형적인 출력의 타이밍도;
도 13은 도 2의 제어기의 서브블록들에 대한 접속부들을 포함하는, 도 10A 및 도 10B의 스레드 디버그 제어기에 대한 또다른 외부 접속부의 상세도;
도 14는 도 11의 스레드 디버그 매니저의 내부 구조의 기능 블록도;
도 15는 도 14의 디버그 머신들중 하나의 로직 블록도;
도 16은 도 14의 디버그 머신들중 하나의 로직 블록도;
도 17은 도 14의 디버그 머신들의 연결(concatenation) 성능의 예를 나타내는 도면;
도 18은 싱글 워드 이벤트와치(single word EventWatch)의 경우 디버그 머신내에서 명령 데이터흐름을 나타내는 도면;
도 19는 더블 워드 이벤트와치의 경우 디버그 머신 내에서 명령 데이터흐름을 나타내는 도면;
도 20은 도 14의 예시적인 스태틱 이벤트 필터 모듈(Static events filter module)의 기능 블록도;
도 21은 도 20의 스태틱 이벤트 필터 모듈 내에서 이븐 필터 마스크(Even Filter masks)의 예시적 배치를 나타내는 도면;
도 22는 도 14의 트레이스 데이터 포맷터/압축기 모듈의 예시적인 블록도.
도 1은 예시적인 전형적 멀티코어 프로세서 아키텍쳐의 시스템 프레임워크의 로직도를 나타낸다. 프레임워크(framework)는 다수의 프로세싱 리소스(150)를 포함하며, 이들 각각은 멀티코어 아키텍쳐의 다른 프로세싱 리소스들(150)과 유사하거나 또는 상이할 수 있다. 프로세싱 리소스(150)는 명령어를 실행시킬 수 있는 임의의 형태의 하드웨어이거나, 또는 이와 등가물일 수 있어, 범용성 프로세싱 리소스(150) 또는 효과적으로 제한된 명령어 세트, 예를 들어, 입출력 소자를 갖춘 프로세싱 리소스(150)를 포함할 수 있다.
또한 시스템 프레임워크는 스레드 관리 및 할당 제어기(130) 및 메모리 인터페이스(180)를 통해 상기 제어기에 밀착결합된(tightly coupled) 전용 메모리(190)를 포함하는 집중형 스레드 관리 및 할당 시스템을 포함한다. 각각의 프로세싱 리소스(150)는 상호접속부(115)를 통해 제어기(130)로 액세스될 수 있다. 특정한 상호접속 방식(즉, 제어기(130)가 각각의 프로세싱 리소스(150)와, 각각의 프로세싱 리소스(150)가 제어기(130)와 통신하며, 각각의 프로세싱 리소스(150)가 시스템 리소스, 예를 들어 메모리(140)와 통신하는 구성)이 도 1의 장치를 구현하는데 요구되는 것은 아니다; 특히 포인트 대 포인트 링크, 중앙 시스템 버스 또는 균일한(even) 파이프라인 아키텍쳐가 균일하게 사용되어, 단지 각각의 프로세싱 리소스(150)가 제어기(130)와 직접적으로 또는 간접적으로(즉, 다른 프로세싱 리소스(150) 또는 다른 것을 경유하여) 통신할 수 있게 된다.
도 2는 단지 일례로서, 도 1의 로직 구성을 구현하는 멀티코어 프로세서를 나타낸다. 도 2의 멀티코어 프로세서는 시스템 상호접속부(160)를 경유하여 각각 접속되는 다수의 프로세싱 리소스(150)를 이용한다. 시스템 상호접속부(160)는 입력 인터페이스(100), 및 출력 인터페이스(110)를 경유하여 제어기(130)와 통신하게 된다. 도 3의 예에서, 시스템 상호접속부(160)는 각각의 프로세싱 리소스(150)를 서로 접속하고 제어기(130)와 접속하고 또한 시스템 메모리와 같은 공유 시스템 리소스(140)와 접속하는 통상적인 중앙 버스로서 레이아웃된다. 공유 시스템 리소스(140)와의 인터페이싱은 현재 이용가능한 다양한 인터페이스 기술들중 임의의 하나를 통해 달성될 수 있다. 메모리는 현재 이용가능한 중앙 컴퓨터 메모리 기술들중 임의의 하나, 예를 들어, 스태틱 랜덤 액세스 메모리(SRAM), 다이나믹 랜덤 액세스 메모리(DRAM), 또는 더블 데이터 레이트 랜덤 액세스 메모리(DDR RAM)로 구성될 수 있다.
도 2를 참조로, 다수의 프로세싱 리소스(150) 각각은 중앙 제어기(130)로부터 제어 정보를 수신하고, 수신된 제어 정보에 따라 프로세싱 리소스(150)를 관리하도록 구성된 제어기 클라이언트(120)와 결합된다. 제어기 클라이언트(120)의 기능 및 목적은 하기에 보다 상세히 설명된다. 각각의 프로세싱 리소스(150)는 시스템 상호접속부(160)를 통해 제어기(130)와 통신하도록 결합된 상호접속 에이전트(170)를 갖는다. 상호접속 에이전트(170)는 제어기 클라이언트(120)에 대해, 시스템 인터페이스(160)에 대한 사용시 하부에 놓인 상호접속 프로토콜과 독립적인, 표준화된 인터페이스(generic interface)를 제공한다. 즉, 제어기 클라이언트(120)에 의한 사용시 통신 프로토콜과 시스템 상호접속부(160) 상에서의 사용시 통신 프로토콜 사이에 프로토콜 변환(protocol translation)이 제공된다. 상호접속 에이전트(170)의 사용으로 인해, 본 실시예의 제어기 클라이언트(120)는 현재 이용가능한 임의의 시스템 상호접속 프로토콜로 이용될 수 있다. 사실상, 제어기 클라이언트(120)를 제어기(130)와 통신시키는 인터페이스 프로토콜(151)은, 프로세싱 리소스(150)와 공유 시스템 리소스(140), 예를 들어, 시스템 메모리 간의 통신이 가능하도록 배치되는 임의의 또는 모든 인터페이스 프로토콜(160)과 물리적으로 구별되며 상이한 특성을 가질 수 있다.
전체적으로, 멀티코어 프로세서(10)는 스레드라 불리는 다수의 개별적 태스크로 분리될 수 있는 타겟 애플리케이션을 실행하도록 구성된다. 각각의 프로세싱 리소스(150)는 제어기(130)에 의해 적절한 스레드로 할당된다. 이러한 할당은, 제한되지는 않지만, 해당 스레드의 우선순위, 각각의 프로세싱 리소스(150)의 유효성 및 특정 스레드의 실행에 대한 특정한 프로세싱 리소스(150)의 적합성을 포함하는 다수의 파라미터에 따라 이루어진다.
그러나 제어기(130) 및 전용 메모리(190)의 부가는 프로세서(10) 레이아웃의 재설계를 요구하지 않을 수 있다.
전형적인 시스템 온 칩(SoC) 아키텍쳐를 블록 형태로 나타내며 실용(practical) 애플리케이션에서 제어기(130)의 제어하에 위치되는 다양한 프로세싱 리소스(150)를 나타내는 특정한 구성이 도 3에 도시된다. 프로세싱 리소스(150)가 특히 DSP와 같이 상대적으로 일반적인 성능을 가지거나, 또는 주변 IO와 같이 상대적으로 제한된 기능을 가질 수 있다는 것을 주목해야 한다.
도 4는 제어기(130) 및 이와 관련된 입력 인터페이스 그룹(100), 출력 인터페이스 그룹(110), 및 2개의 양지향성 인터페이스 그룹(160, 180)을 나타내며, 각각의 그룹은 제어기(130) 주변부에 위치된다.
시스템 제어 그룹(102)은 제어기(130)의 정확한 연산이 가능케하기 위해 요구되는 다양한 신호들을 포함한다. 이들은 시스템 클록, 실시간 클록 및 리셋 신호(RST)를 포함한다. 제어기(130)로부터의 모든 출력 신호들은 시스템 클록과 동기화되지만, 시스템에 의한 요구에 따라 다른 클록 도메인으로 재동기화될 수도 있다. 제어기(130)에 대한 모든 입력 신호들은 프로세싱 이전에 시스템 클록과 동기화된다. RST 입력은 제어기(130)의 리셋을 위한 동기식 리셋 신호이다.
외부 인터럽트 그룹(101)은 스레드 관리 및 할당 시스템 외측으로부터 유도되는 외부 인터럽트 그룹으로 구성된다. 외부 인터럽트 그룹(101)에서의 신호들은, 예를 들어, 외부 환경(outside world)과의 입력 인터페이스로부터 또는 핀들을 통한 멀티코어 프로세서 외부로부터 직접적으로 구동될 수 있다. 외부 인터럽트 입력들의 수는 멀티코어 프로세서(10) 설계 단계 동안 정의될 수 있다.
*내부 제어 그룹(111)은 각각의 제어기 클라이언트(120) 및 이와 관련된 프로세싱 리소스(150)에 대한 동기식 인터럽트로 구성된다. 따라서, 신호들의 수는 통상적으로 시스템 내부의 프로세싱 리소스(150)의 수에 해당하며 멀티코어 프로세서(10) 설계 단계 동안 정의된다. 내부 인터럽트 신호는 실행을 위한 스레드 준비를 나타내는 내부 스레드 준비 인터럽트 신호로, 제어기 클라이언트(120)와 관련된 특정한 프로세싱 리소스(150)에 할당된다.
디버그 인터페이스 그룹(112)은 3개의 서브-그룹으로 구성된다:
1. 외부 디버그 에이전트가 전체로서 시스템 및 제어기(130)에 대한 디버그 액세스를 얻는 것을 가능케하는, 보조 디버그 인터페이스. 상기 인터페이스 종단점(breakpoint) 및 관리점(watchpoint)은 내부적으로 외부적으로 설정될 수 있으며, 시스템 상태 정보가 판독될 수 있다.
2. 미리-구성된 필터링 가이드라인 세트에 따라 디버그 매니저(400)의 적절한 제어하에 런-타임 시스템 상태를 제공하는 스트리밍 출력인, 트레이스 버퍼 출력.
3. 그 자체가 종단점으로서 이용되거나 또는 프로세싱 리소스 특정 이네이블(enables)과 조합될 수 있는 외부 디버그 이네이블 신호.
상기 인터페이스 그룹의 특정한 포맷, 구성 및 사용은 하기에서 보다 상세히 개시된다.
밀착결합된(tightly coupled) 메모리 인터페이스 그룹(180)은 제어기(130)를 그 자체에 밀착결합된 전용 메모리 리소스(190)에 접속한다.
도 5는 밀착결합된 전용 메모리(190)의 전형적 구조를 나타낸다. 어드레스 경로 및 데이터경로의 폭은 멀티코어 프로세서(10) 설계 단계 동안 정의된다. 밀착결합된 전용 메모리 인터페이스(180)는 메모리 어드레스 버스(191), 메모리 판독 데이터 버스(192), 메모리 기록 데이터 버스(193) 및 메모리 기록 및 판독 이네이블 신호 (194, 196)를 포함한다.
부착된 메모리는 동기식 SRAM 소자로 가정한다. 밀착결합된 전용 메모리(190)는 타겟 애플리케이션의 요구조건에 따라, 멀티코어 프로세서(10) 설계 단계 동안 정의된 바와 같이, 정수의 제어기 메모리 부재(195)를 포함한다. 현재의 바람직한 실시예에서, 각각의 제어기 메모리 부재(195)는 256 비트의 메모리 스페이스를 소비한다. 다시 현재의 바람직한 실시예에서, 제어기는 최대 65536 제어기 메모리 부재(즉, 16Mb 메모리)를 지지한다. 이후 개시되는 큐 디스크립터(queue descriptor)는 제어기 메모리 부재(195)를 소비하지만, 전형적인 스트림에서, 요구되는 제어기 메모리 부재(195)의 수는 스레드 지지 조건에 의해 좌우된다. 예를 들어, 제어기(130) 내에서 동시적으로 400개의 스레드를 지지할 수 있는 시스템은 약 128kb의 부착 메모리를 요구한다.
도 4의 상호접속 인터페이스 그룹(160)은 멀티코어 프로세서(10), 및 멀티코어 프로세서 설계 단계 동안 정의되는 상호접속 에이전트(170)에 사용되는 선택된 상호접속 프로토콜 또는 프로토콜들을 따른다. 다수의 개별적인 상호접속 구조이 제공되는 경우에, 상호접속 인터에피스 그룹(160)은 다수의 상이한 인터페이스로 구성될 수 있다. 도시된 실시예에서는 버스 인터페이스가 사용된다. 그럼에도 다양한 다른 형태의 인터페이스가 앞서 개시된 바와 같이 등가적으로 사용될 수 있다는 것은 명백하다.
제어기 서브블록 설명 및 기능
도 6은 제어기(130)의 주요 로직 부품들을 나타낸다. 제어기(130)의 기능은 하기의 기능들을 수행하는, 4개의 주요한 내부 병렬 프로세싱 서브블록들로 나뉜다.
1. 밀착결합된 전용 메모리(190) 내에서 프리(free) 제어기 메모리 부재(195)의 리스트를 유지하고, 제어기 메모리 부재(195) 회복(recovery)을 감시하도록 구성된, 스레드 입력 매니저(TSIM)(200).
2. 밀착결합된 전용 메모리(190) 내에 펜딩 리스트들 및 타이머 큐를 유지하고 스레드들 간에 동기화를 수행하고, 요구에 따라, 밀착결합된 전용 메모리(190) 내에 레디 큐 구조로 스레드들의 프로모션을 수행하도록 구성된, 스레드 동기화 매니저(TSPM)(210). 스레드 동기화 매니저(210)는 밀착결합된 전용 메모리(190) 내에서 펜딩 스레드 디스크립터들의 삽입 및 추출을 통해 펜딩 보존도 및 타이머 큐 구조를 유지한다.
3. 밀착결합된 전용 메모리(190) 내에서 레디 큐 구조, 및 밀착결합된 전용 메모리(190) 내에서 각각의 프로세싱 리소스(150)에 대한 디스패치(dispatch) 큐를 유지하도록 구성된, 스레드 출력 매니저(TSOM)(220). 추가로 스레드 출력 매니저(TSOM)(220)는 제어기 클라이언트(120)로 전송되는 인터럽트(110)를 생성하도록 구성된다. 레디 큐 구조의 보존도 유지는 밀착결합된 전용 메모리(190) 내에서, 제어기 메모리 부재(195)에 보유되는 스레드 디스크립터의 삽입 및 추출에 의해 실행된다.
4. 밀착결합된 전용 메모리(190) 내에 위치되는 레디 큐 구조 내에서 각각의 프로세싱 리소스(150)에 대한 스케쥴링 결정을 제공하도록 구성된, 스레드 스케줄 매니저(TSSM)(230).
부가적으로 제 2 프로세싱 서브블록들의 수는 지지 함수를 제공한다.
5. 상호 배제성(mutual exclusivity) 및 록킹(locking)을 포함하는, 부착된 밀착결합된 전용 메모리(190)에 총체적 액세스를 제공하도록 구성되는, 스레드 메모리 메니저(TSMM)(240).
*6. 들어오는 외부 시스템 인터럽트를 내부 동기화 프리미티브(primitive)로 전환시키도록 구성된, 인터럽트 매니저(TSIC)(250).
7. 각각의 프로세싱 리소스(150)에 동기화 목적의 타이머 기능 및 감시 타이머 기능을 제공하도록 구성된, 타임 매니저(TSTC)(260).
8. 멀티코어 프로세싱 리소스(150) 및 제어기(130) 내의 개별 서브-블록들에게 상호접속부 인터페이싱 및 구성 및 런-타임 액세스를 제공하도록 구성된, 시스템 인터페이스(TSIF)(280).
9. 제어기(130)와 멀티코어 프로세싱 리소스(150) 사이에 물리적 인터페이싱(115)을 제공하도록 구성된, 서버 심(Shim)(TSSS)(290).
상기 나열된 제 1 차 및 제 2 차 서브블록 각각은 상기 신호에 해당하는 각각의 서브블록 내에서 발생하는 이벤트들을 본 발명의 디버그 제어기(400)에 통지하는 디버그 인터페이스(12)의 일부를 형성하는 디버그 출력을 포함한다. 명령이 특정한 조건들로 완료되면, 서브블록 내에서 상태 플래그들(status flags)이 관리된다.
일반적인 용어에서, 제어기(130)는 전용 제어기 메모리(190) 내에 다수의 큐(queue) 구조를 유지함으로써 스레드들을 관리한다. 이러한 큐 구조는 펜딩(Pending), 레디(Ready), 타이머 및 디스패치 큐들을 포함한다. 실행 대기 스레드는 하나 이상의 상기 큐들에서 유지되며, 준비될 때까지 적절한 프로세싱 리소스(150)에 할당된다. 큐 내에서 스레드 변조는 주로 푸시(push), 팝(pop) 및 소트(sort) 연산을 이용하여 수행된다. 제어기(130)의 동작에 대한 상세한 설명은 본 명세서에서 참조되는 공동계류중인 미국 출원 No. 10/308,895호에 개시된다.
이후 제어기(130) 내의 제 1 차 및 제 2 차 프로세싱 서브블록들의 상호작용에 대해 상세히 설명된다.
각각의 서브-블록은 다른 서브-블록들에 대한 기능 세트를 제공하며, 이들 각각은 밀착결합된 전용 메모리(190) 내에서 개별적으로 유지되는 구조들 상에서의 조작이 실시되도록 피어들(peers)에게 명령할 수 있다. 명령들은 제어기 소프트웨어 애플리케이션 프로그래밍 인터페이스(API)에서 수신된 유사한 명령들의 수신에 따라, 특정한 서브블록에 의해 호출된다.
스레드 입력 매니저 함수들:
스레드 입력 매니저(200)는 제어기(130) 내부의 다른 서브-블록들에게 3개의 공개 함수(public functions)를 제공한다.
프리리스트스테이츄(FreeListStatus) 함수는 제어기 메모리 부재(195) 프리 리스트 내에서 헤드 포인터 및 부재들의 수를 복귀시킨다. 프리 리스트는 현재 사용되지 않는 제어기 메모리 부재(195)의 리스트이다. 상기 함수는 제어기(130) 소프트웨어 API에서의 유사한 명령의 수신에 따라, 시스템 인터페이스(280)에 의해서만 호출될 수 있다.
푸시프리인덱스(PushFreeIndex) 함수는 해방된 제어기 메모리 부재(195)를 프리 리스트 상으로 다시 푸시하는데 이용된다. 이 함수는 스레드 스케쥴 매니저(230)에 의해서만 호출될 수 있다.
팝프리인덱스(PopFreeIndex) 함수는 프리 리스트로부터 프리 제어기 메모리 부재(195)를 팝핑(pop)하는데 이용된다. 통상적으로는 시스템 인터페이스(280) 내의 API 호출 서비스 루틴에서 호출된다.
스레드 동기화 매니저 함수들:
스레드 동기화 매니저(210)는 제어기(130) 내의 다른 서브-블록들에게 7개의 공개 함수를 제공한다.
하기의 5개 함수는 제어기(130) 소프트웨어 API에 의해 수신된 유사한 명령들에 응답하여, 시스템 인터페이스(280)에 의해서만 호출될 수 있다.
푸시펜딩디스크립터(PushPendingDescriptor) 함수는 펜딩 큐 디스크립터들의 리스트에 펜딩 큐 디스크립터를 부가하도록 부트(boot) 프로세스 동안 사용된다.
푸시스레드 함수는 주어진 펜딩 큐에 종속 스레드(dependant thread)가 부가되도록 런타임 동안 사용된다.
겟타이머스테이츄(GetTimerStatus) 함수는 펜딩 큐 디스크립터 리스트의 상태를 설정한다.
셋타이머스테이츄(SetTimerStatus) 함수는 헤드 포인터 및 타이머 큐 내의 부재들의 개수를 설정한다.
셋펜딩스테이츄(SetPendingStatus) 함수는 펜딩 디스크립터 리스트의 상태를 설정한다.
겟펜딩스테이츄(GetPendingStatus) 함수는 펜딩 디스크립터 큐 내의 헤드 포인터 및 부재의 수를 복귀시킨다.
싱크이벤트(SyncEvent) 함수는 주어진 펜딩 큐에 동기화 프리미티브(synchronization primitive)가 발령되도록 이용된다. 이러한 함수는 스레드 인터럽트 매니저(250) 또는 시스템 인터페이스(280)에 의해 호출된다.
타임이벤트(TimeEvent) 함수는 타이머 기반 동기화 프리미티브가 타이머 큐에 발령되도록 이용된다. 이러한 함수는 타임 매니저(260)에 의해서만 호출된다.
스레드 출력 매니저 함수들:
스레드 출력 매니저(220)는 제어기(130) 내의 다른 서브-블록들에게 5개의 공개 함수를 제공한다.
푸시 함수는 레디 큐 구조 내에 스레드 디스크립터를 배치한다. 이 방법은 스레드 동기화 매니저(210) 또는 시스템 인터페이스(280)에 의해 호출될 수 있으며, 프로세싱 속도를 촉진시키도록(예를 들어, 인터럽트들을 처리하도록) 높은 순위로 호출될 수 있다.
스레드들이 독립적인(즉시 준비) 경우, 호출은 시스템 인터페이스(280)로부터 이루어지며, 오리지널 스레드 디스크립터가 종속되는 경우, 호출은 스레드 동기화 매니저(210)로부터 이루어진다.
하기 함수들은 제어기(130) 소프트웨어 API에서 유사한 명령의 수신에 응답하여, 시스템 인터페이스(280)에 의해서만 호출될 수 있다.
겟디스패치뷰스테이츄(GetDispatchQueueStatus) 함수는 디스패치 큐 리스트내에서 헤드 포인터와 부재들의 수를 복귀시킨다.
셋디스패치큐스테이츄(SetDsipatchQueStatus) 함수는 디스패치 큐 리스트 내에서 헤드 포인터와 부재들의 개수를 설정한다.
디스패치큐셋메트릭스(DispatchQueueSetMetrics) 함수는 알고있는 선취 결정들이 이루어질 수 있도록, 현재 실행중인 스레드의 메트릭스들을 설정한다.
디스패치큐이벤트(DispatchQueueEvent) 함수는 레디 큐 구조로부터의 스케줄링 이벤트를 스레드출력 매니저(TSOM)(220)에 의해 관리되는 디스패치 큐로 전파된다. 이 함수는 스레드 스케쥴 매니저(TSSM)(230)에 의해서만 호출된다.
디스패치큐팝(DispatchQueuePop) 함수는 디스패치 큐의 헤드로부터 스레드 디스크립터를 팝핑한다.
디스페치워크큐푸시(DispatchWorkQueuePush) 함수는 스레드 출력 매니저(220) 워크 큐상에 디스패치 큐를 푸시한다. 이러한 함수는 스케줄 업데이트의 결과로서 디스패치 큐 내에서 요구되는 변화를 출력 매니저(220)에게 알리는데 상기 함수를 이용하는 스레드 스케줄 매니저(230)에 의해서만 호출될 수 있다.
스레드
스케쥴
매니저 함수들:
스레드 스케쥴 매니저(230)는 제어기(130) 내에 위치된 스레드 출력 매니저(220)와 시스템 인터페이스(280)에 3개의 공개 함수를 제공한다.
푸시푸시워크이벤트(PushPushWorkEvent) 함수는 레디 큐 구조에 스레드 디스크립터를 부가한 직후, 스레드 출력 매니저(220)에 의해 호출된다.
푸시팝워크이벤트(PushPopWorkEvent) 함수는 레디 큐 구조에서 스레드 디스크립터를 제거한 직후, 스레드 출력 매니저(220)에 의해 호출된다.
프리인덱스(FreeIndex) 함수는 제어기 메모리 부재(195)의 해방이 스레드 스케쥴 매니저(230) 내에서 전진하는 스케쥴링 동작(activities)으로 동기화되게 한다. 호출은 제어기(130) 소프트웨어 API에서 유사한 명령의 수신에 따라, 또는 스레드 출력 매니저(220) 내에서 팝 연산의 결과로서 이루어질 수 있다.
제어기 클라이언트
앞서 개시된 바와 같이, 용어 프로세싱 리소스(150)는 초기(rudimentary) 명령이 어떻게 이루어지는지와 상관없이, 명령을 실행시킬 수 있는 임의의 리소스에 적용된다. 따라서, 입/출력 모듈과 같이 고정 함수를 가지는 리소스들이 포함된다. 프로세싱 리소스(150)의 형태에 따라, 시스템 상호접속부(160)와 프로세싱 리소스(150) 간의 제어기 클라이언트(120)를 경유한 접속은 단방향성 또는 양방향성일 수 있다.
도 7A는 제어기(130)를 이용하는 제어기 클라이언트(120)의 예시적 다이아그램을 나타낸다.
적절한 프로세싱 리소스(150), 예를 들어 범용 프로세서 또는 디지털 신호 프로세서에 대해, 제어기 클라이언트(120)는 통상적으로 소프트웨어에서 구현된다. 그러나, 프로세싱 리소스(150)가 유한 함수(limited function)인 경우, 제어기 클라이언트(120)는 하드웨어 콤포넌트를 요구할 수 있다.
하드웨어 콤포넌트가 시스템 상호접속부(160)와 프로세싱 리소스(150) 사이에 이용될 때, 제어기 클라이언트(120)는 동일한 인터페이스를 이용하여 프로세싱 리소스(150)에 결합된다. 즉, 제어기 클라이언트(120)는 제어기 클라이언트(120)에 대한 프로세싱 리소스(150)로서 상호접속 에이전트(170)에 대한 동일한 인터페이스를 제공한다. 소정의 경우, 예를 들어 입/출력 소자의 경우에 프로세싱 리소스(150)로부터 데이터 경로와 상이하게, 프로세싱 리소스(150)로 데이터 경로를 처리하는 것이 바람직하다.
메인 인터페이스 이외에, 제어기 클라이언트(120)는 런타임 및 디버그 이벤트에 대한 출력으로서 사용되도록 밴드 인터페이스로부터 제공된다. 소프트웨어 제어기 클라이언트(120)가 사용될 경우, 표준 인터럽트 사용, 적절한 서비스 루틴 호출, 또는 프로세싱 리소스(150) 특정 디버그 및 트레이스 유니트(151)에 입력 형성이 제공된다.
연산의 제어기 클라이언트
모드
:
각각의 제어기 클라이언트(120)는 완전히 인터럽트 구동된다. 제어기(130)로부터의 내부 인터럽트의 접수에 따라, 제어기 클라이언트(120)는 밀착결합된 전용 메모리(190)에서 유지되는 특정한 프로세싱 리소스(150)과 관련된 디스패치 큐의 헤드로부터 스레드 디스크립터를 팝핑한다. 스레드 디스크립터 내에서의 유니크 레퍼런스는 메인 메모리 리소스(140)로부터 추가의 스레드 제어 정보, 스레드 제어 블록(TCB)을 판독하는데 이용된다. TCB에 포함된 정보는 다음중 임의의 것일 수 있다:
1. 제어기 클라이언트(120) 구성 콘텐츠. 이 정보는 제어기 클라이언트(120) 시스템 리소스 사용 방안, 어드레스 또는 데이터-버스 트리거 구성(디버그 프로세스용), 데이터 프리젠테이션 모드 등을 구성하는데 이용될 수 있다.
2. 프로세싱 리소스(150) 구성 콘텐츠. 이는 특정한 스레드의 실시를 위해 프로세싱 리소스(150)를 준비하는데 요구되는 정보이다. 이는 오디오 CODEC과 같은 전문적 하드웨어 가속기의 구성 또는 상기 스레드의 부분적인 예비 실행으로부터의 회복을 포함할 수 있다.
3. 명령 콘텐츠. 고정 함수 하드웨어 가속기의 경우, '명령어(instruction)'는 목표된(targeted) 하드웨어 프로세싱 리소스(150)에 함축되며, 예를 들어 프로세싱 리소스(150)가 출력 모듈인 경우 출력 명령어이며, 임의의 요구되는 전문화 또는 구성은 구성 정보 내에 수용된다. 소프트웨어 제어기 클라이언트(120)와 관련하여, 이는 통상적으로 스레드와 관련된 기능 코드에 대한 포인터가 된다.
4. 데이터 콘텐츠. 상기 콘텐츠는 스레드가 동작할 수 있는 데이터 범위 및 시스템 메모리(140)에서 개시 어드레스 또는 다중의 어드레스를 한정한다.
5. 제어기 클라이언트(120) 포스트-프로세싱 콘텐츠. 상기 콘텐츠는 스레드 실행의 완료 이후 제어기 클라이언트(120)의 동작(action)을 결정한다.
제어기 클라이언트(120) 동작에는 3개의 구별되는 단계가 제공된다:
1. 구성 단계(Configuration phase), 프로세싱 리소스(150) 및 제어기 클라이언트(120)는 특정 스레드의 실행을 위해 마련된다. 가장 간단한 경우 구성 단계는 널(null)이 된다.
2. 실행 단계(Execution phase), 스레드가 실행되며 제어기 클라이언트(120)는 데이터 공급 또는 리소스 활용을 모니터링할 수 있다.
3. 완료 단계(Completion phase). 프로세싱 완료는 노 액션(no action), 다른 스레드 생성, 동기화 프리미티브 또는 스레드 생성 및 동기화의 조합 발생을 야기할 수 있다. 또한, 제어기 클라이언트(120)가 스케쥴러 메트릭스들 및 종료(terminate) 스레드를 설정 또는 업데이트하기 위해 요구될 수 있다. 스레드를 실행하는 동안, 결과들을 저장하기 위해 추가의 메모리가 요구되는 경우, 제어기 클라이언트(120)는 본 서버(server) 방법을 수행해야 한다.
개별 하드웨어 제어기 클라이언트(120b)가 활성(active) 주기 동안 이용가능한 시스템 상호접속부(160) 대역폭의 전체 사용을 가능케하는 환경에서, 최적화된 솔류션은 제어기 클라이언트(120b)가 다수의 하드웨어 프로세싱 리소스(150)에 대한 프럭시(proxy)로서 동작하게 한다. 이러한 장치가 도 7B에 도시되었다. 이전의 경우, 프럭시 제어기 클라이언트(120b)는 인터럽트 구동방식인 반면, 단지 하나의 인터럽트가 제어기(130)로부터 루틴되는 이전의 예에서, 프록시 제어기 클라이언트 모델에는 프로세싱 리소스(150) 당 하나의 인터럽트가 제공된다. 제어기(130)로부터 수신된 인터럽트의 인덱스에 따라, 프록시 제어기 클라이언트(120b)는 식별된 프로세싱 리소스(150)에 대한 동일한 단계들을 수행한다. 프록시 제어기 클라이언트 모델에서, 시스템 상호접속부(160) 사용 방안이 요구되는 경우, 하드웨어 어댑터(120c)는 프로세싱 리소스(150)와 시스템 상호접속부(160) 사이에서 유지될 것이다.
앞서 언급한 바와 같이, 제어기 클라이언트(120)는 소프트웨어에서 구현될 수 있다. 이 경우 제어기 클라이언트(120)의 기능의 일부, 예를 들어 공유된 리소스 사용 방안은 통상적으로 프로세싱 리소스(150) 하드웨어(예를 들어, 메모리 관리 유니트(MMU))에 미리 존재할 수 있는 현존(existing) 하드웨어 콤포넌트들를 사용하게 한다.
결과적으로, 소프트웨어 제어기 클라이언트(120) 아키텍쳐 및 구현은 부분적으로 프로세싱 리소스(150) 사양(specific)이다.
하드웨어 제어기 클라이언트(120)는 관련된 프로세싱 리소스(150)의 특이성에 따른 전문적 요구조건을 가질 수도 있다. 하기 섹션은 다수의 경우에 적합한 일반적 아키텍쳐를 나타낸다.
하드웨어 제어기 클라이언트의 일반적 예
하드웨어 제어기 클라이언트(120)의 기본 구조가 도 8에 도시된다. 설계의 기능상 요점은 제어기 클라이언트 유한 상태 기기(Finite State Machine, FSM)(300)이다. 상기 유한 상태 기기(FSM)(300)는 모두 3개 단계 동안 동작할 수 있다. 제어기 클라이언트 FSM(300)는 제어기(130)로부터의 인터럽트(111)에 의해 동작된다.
먼저, 제어기 클라이언트 FSM(300)는 그 자체 명령어들에 대한 레퍼런스를 포함하는, 공유 메모리 리소스(140)로부터 TCB를 판독하도록 시스템 상호접속부(160)를 조절한다. 구성 단계 동안, 제어기 클라이언트(120)는 프로세싱 리소스 인터페이스, 통역 구성 명령들 및 이들은 프로세싱 리소스(150)에 대해 야기되는 기록 주기로의 전환을 조절할 수 있다. 또한, 제어기 클라이언트(120)는 자체 리소스 방식으로 설정된다. 구성 상태로부터 실행 상태로의 전환 방식은 프로세싱 리소스(150) 사양이나, 명시된(explicit) 수행 프리미티브 또는 단지 데이터 운반 상태로의 엔트리에 의해 기록될 수 있다.
제어기 클라이언트(120)로부터 가장 간단한 아키텍쳐는 프로세싱 리소스(150) 및 시스템 측 모두에 대해 동일한 인터페이스 프로토콜을 갖는다. 이 경우, 실행 단계 동안, 프로세싱 리소스(150) 판독 및 기록 주기는 적절한 곳을 표시함으로써 시스템 인터페이스에 대해 간단히 맵핑된다.
가장 간단한 제어기 클라이언트(120) 구현은 프로세싱 리소스(310)에 대한 시스템 및 시스템(320) 경로에 대한 프로세싱 리소스 모두에서 FIFO 스타일 인터페이스를 요구한다. 이런 특성의 제어기 클라이언트(120)의 실행 단계 동안, 메세지 또는 스트리밍 모드에 의해 프로세싱 리소스(150)에 데이터가 제공될 수 있다. 전체 데이터세트가 프로세싱 이전에 제어기 클라이언트(120) 내에 국부적으로 축적되는 메세지 모드는 보다 복잡한 상호접속 중재를 용이하게 하는 보다 대단위(coarse-grained) 블록 상호접속 반응을 야기시킨다. 시스템 메모리(140)로부터 프로세싱 리소스(150)로 데이터가 직접 스트리밍되는 스트리밍 모드는 핸드셰이킹(handshaking)의 보다 주의 깊은 고려를 요구하고 소단위(Fine-grained) 상호접속 트랜잭션(transaction)을 나타내며 상호접속 성능에 밀접한 관계가 있는 보다 효과적인 실리콘 솔루션을 제공한다.
실행 단계에서 완료 단계로의 전환은 프로세싱 리소스(150)에 대한 데이터의 존재를 측정함으로써 추측되거나, 또는 프로세싱 리소스(150) 자체에 의해 명확히 신호화될 수 있다. 완료 단계 동안, 제어기 클라이언트(120)는 오리지널 스레드 제어 블록에 의해 제공되는 명령어 세트로부터 일단 다시 수행된다.
주목할 것은, 소정의 경우, 프로세싱 리소스(150)(예를 들어, 입/출력 장치)로 데이터 경로를 처리하고 별개로 프로세싱 리소스(150)로부터 경로를 처리하는 것이 바람직하다는 것이다. 반대로, 소정의 경우(예를 들어, DSP와 같은 알고리즘 가속기) 동일한 제어기 클라이언트(120) 프레임워크 내에서 데이터의 소비자 및 생산자를 결합하는 것은 당연하다.
프로세싱 리소스(150)와 다른 시스템 리소스 간에 비결합 레벨을 제공하기 위해, 제어기 클라이언트(120)에 다수의 추가적 설비들이 제공될 수도 있다:
*a) 프로세싱 리소스(150)에 의해 생성된 어드레스는 베이스 어드레스 및 오프셋 정의(definition)에 의해 정의됨에 따라, 비교기(330) 및 비교 어드레스 레지스터(340)에 의해 예상되는 반응을 검사할 수 있다.
b) 프로세싱 리소스(150)에의해 생성된 어드레스는 차감기(350) 및 오프셋 어드레스 레지스터(360)를 사용하여, 프로세싱 리소스(150)가 통상적으로 어드레스(0×0) 부근에서 정규화된 임의의 주어진 스레드에 대해 어드레스 맵의 정규화 관측이 가능하도록 오프셋될 수 있다.
c) 디버그 관찰(watch) 레지스터는 프로세싱 리소스의 기능이 제한되는 곳에 포함되어 그 자체에 명령어 레벨 디버그 하드웨어를 포함하지 않을 수 있다. 이러한 레지스터는 명령어 레벨 디버그 성능이 모자란 고정 함수 하드웨어 리소스(150)에 대해 이네이블링되도록 어드레스 사용을 모니터하는데 사용될 수 있다.
객체들(
Objects
)
제어기(130) 내에서 사용되는 데이터타입들의 인스턴스들(instances)은 공개적(전체적으로 시스템으로부터 가시적이며 상기 시스템에 의해 조작됨) 및 개인적 가시성(제어기(130) 내에서만 가시적이며 제어기(130) 서브-블록들에 의해서만 조작됨)으로 나뉜다. 다수의 엔드 애플리케이션(end application)에 대한 이식성(portability)을 확보하기 위해, 모든 스레드, 큐 및 집합된 큐 디스크립터들은 공통 베이스 클래스, 제어기 메모리 부재(195)를 이용하여 밀착결합된 전용 메모리(190) 내에 저장된다.
제어기 메모리 부재들
각각의 제어기 메모리 부재들(195)은 10개의 디스트립터 타입중 임의의 것으로 표현될 수 있다 :
1. 프리 리스트 부재. 이 부재는 임의의 다른 디스크립터 타입들에 의한 사용과 무관하다. 사용자 초기화 또는 런타임 조작이 요구되지 않는다.
2. 스레드 디스크립터(TD). 이는 애플리케이션/어드미니스트레이션(application/administration) 스레드를 나타내는 데이터 구조이다. 이 디스크립터는 밀착결합된 전용 메모리(190) 내에서 펜딩 큐, 레디 큐 또는 디스패치 큐중 하나로 존재할 수 있다. 사용자 초기화가 요구되지는 않지만, 런타임 조작이 요구된다.
3. 스케쥴러 루트 디스크립터(Scheduler Root Descriptor, SRD). 이는 스케쥴러 계측의 상위 디스크립터이다. 사용자 초기화가 요구되나, 런타임 조작은 요구되지 않는다. 루트 디스크립터는 모체(parent)는 없지만, SSTD, DSTD 또는 TD중 임의의 자식들(children)은 있을 수 있다.
4. 스태틱 스케쥴러 티어 디스크립터(Static Scheduler Tier Descriptor, SSTD). 이는 스태틱 스케쥴러 티어 디스크립터로, 그의 모체는 SRD 또는 다른 SSTD일 수 있다. SSTD의 자식들은 임의의 다른 SSTD, DSTD 또는 TD일 수 있다.
5. 다이나믹 스케쥴러 티어 디스크립터(Dynamic Scheduler Tier Descriptor, DSTD). 이는 다이나믹 스케쥴러 티어 디스트립터이다. 사용자 초기화는 요구되지 않지만, 런타임 조작은 요구된다. DSTD의 모체는 SRD 또는 SSTD중 하나일 수 있으나, DSTD는 단지 TD 자식들만을 가질 수 있다.
6. 디스패치 큐 디스크립터. 이러한 형태의 디스크립터는 관련된 프로세싱 리소스(150)로부터의 팝 연산(pop operation)을 위해 대기하는 스레드 디스크립터의 리스트를 나타낸다. 사용자 초기화는 요구되지만, 런타임 조작은 요구되지 않는다.
7. 펜딩 큐 디스크립터. 이러한 형태의 디스크립터는 동기화 이벤트를 대기하는 스레드 디스크립터의 리스트를 나타낸다. 사용자 초기화는 요구되지만, 런타임 조작은 요구되지 않는다.
8. 풀 어태치먼트 노드(Pool Attachment Node, PAN). PAN은 프로세싱 리소스(150) 풀 루트 티어에 스케쥴러 루트 티어를 부착하는데 이용된다. 사용자 초기화는 요구되나, 런타임 조작은 요구되지 않는다.
9. 풀 스태틱 노드(Pool Static Node, PSN). PSN이 프로세싱 리소스(150) 풀 루트 티어에 스케쥴러 루트 티어를 부착하는데도 이용된다. 사용자 초기화는 요구되나, 런타임 조작은 요구되지 않는다.
10. 풀 루트 노드(Pool Root Node, PRN). 각각의 프로세싱 리소스(150) 풀에 대해 단일 PRN이 제공된다. 사용자 초기화는 요구되나, 런타임 조작은 요구되지 않는다.
도 9는 스레드 디스크립터, 제어기(130), 프로세싱 리소스(150) 및 공유 시스템 메모리(140) 사이의 전형적인 관계를 나타낸다. 각각의 스레드 프리미티브는 유니크 레퍼런스(pReference)를 포함한다. 상기 레퍼런스는 제어기(130)에 의해 인터럽트되거나 변조되지 않는다. pReference는 실행되는 업무(task)를 한정하는 시스템 메모리(140)에서 데이터 구조에 포인터를 제공한다. 통상적으로, 이는 제어기 클라이언트 제어 블록(125)이며, 적어도 하기의 부재들을 포함한다: 함수 포인터(function pointer)(프로세싱 리소스 명령어 블록(145)으로 도 9에 도시됨), 스택 포인터 및 인자(argument) 포인터(데이터 블록(135)으로 도 9에 도시됨).
추가의 필드들은 공유 시스템 리소스에 대한 대역내(in-band) 구성 또는 보안을 제공하는 추가의 필드들이 한정될 수 있다.
그러나 애플리케이션 및/또는 타겟 프로세싱 리소스(150)에 따라, 제어기 클라이언트 제어 블록(125)의 복잡성은 변할 수 있다. 특히 주목할 것은 추가의 인디렉션(indirection) 레벨이 포함되어, 주어진 적절한 '제어' 명령어 코드 및 해당 '데이터경로' 코드는 개별 프로세싱 리소스(150)가 소정의 환경에서 동일한 데이터에 대해 동일한 함수를 실행시킬 수 있다. 이 경우, 상이한 프로세싱 리소스(150)에 의해 요구되는 특정한 명령어 스트림(stream)에 해당하는, 각각의 형태의 프로세싱 리소스(150)에 대한 포인터들이 제공된다. 상이한 프로세싱 리소스가 동일한 스레드들을 수행하게 하는 성능은 멀티코어 아키텍쳐 내에서 이용가능한 모든 프로세싱 리소스에 대해 부하 조절(load balancing)을 가능케 한다. 또한, 프로세싱 리소스들을 서로 풀링(pooled)될 수 있다.
프로세서 리소스 풀들(pools)은 단일의 분포(distribution) 노드에서 특정한 프로세싱 리소스(150)의 인스턴스 집합이 가능케한다. 분포 노드들은 부하 조절, 지능적 우선순위(intelligent pre-emption) 및 특정한 프로세싱 리소스 풀에 해당하는 개별 프로세싱 리소스(150)에 대한 전력 관리를 제공할 수 있다.
도 10A 및 도 10B는 본 발명의 실시예를 따르는 특징이 통합된 디버그 시스템 프레임워크의 기본적인 개략적 레이아웃을 나타낸다. 도 10A에서, 본 발명은 시스템-와이드(system-wide) 대버그 제어를 위한 집합체를 제공하는 반면, 도 10B는 본 발명이, 모든 다른 디버그 및 트레이스 유니트들과 유사한 방식으로, 외부 중앙 디버그 제어 집합체 콤포넌트들과 접속된다.
통상적으로, 각각의 프로세싱 리소스(150)는 명령어 레벨에서의 사용을 위한 명령어 레벨 디버그 및 트레이스 유니트(151)를 제공하며 관련된 프로세싱 리소스(150)에 대해서 한정된다. 프로세싱 리소스(150) 사양이 제공되나, 동일한 또는 유사한 데이터를 사용하여 동작한다.
광범위하게 말해서, 디버그에 대한 방안들은 2개 영역으로 나뉠 수 있다. 디버그 정보를 추출하는 동안 시스템이 정지되는 경우는 스태틱 연산이고, 런-타임시 정보가 수집되고, 모니터링되고 분포되는 경우는 다이나믹 연산이다.
특히 스태틱 연산은 종단점(breakpoint) 및 관리점(watchpoint)의 셋업 구성, 정지 및 단일 단계의 관리, 시스템 상태의 스냅샷 및 메모리 부하, 관찰 및 분석을 포함한다.
특히 다이나믹 연산은 프로세서 주기의 모니터링, 캐시 연산, 인터-프로세서 통신 및 시스템 상호접속부(예를 들어, 버스) 트랜잭션을 포함한다. 이러한 형태의 모니터링은 총체적으로 트레이스로 간주되며, 시스템 반응의 '프로파일링(profiling)'에 이용된다. 다이나믹 디버그 또는 트레이스 정보는 통상적으로 내장형 시스템의 콤포넌트들에 의해 자율적으로 생성된다.
로컬 명령어 레벨 디버그 및 트레이스 유니트(151)는 관련된 프로세싱 리소스(150) 내의 명령어들의 프로세싱을 소정의 예정된 환경하에서 중단시키는 내장형 '트리거' 로직을 포함하나, 트레이스 정보의 축적, 또는 소정의 다른 함수를 초기화 또는 종결시키는데 이용될 수도 있다. 통상적으로 트리거는 예정된 '트리거 시퀀스'가 관찰되는 것을 나타내는 이벤트 비트(event bit)이다.
최소한, 이러한 트리거 로직은 주어진 명령어가 발생할 때 로컬 프로세싱 리소스(150)에 인터럽트(트리거)를 발생시키는 종단점 로직을 포함한다. 이러한 유니트내에 포함되는 전체 기능은 프로세싱 리소스(150) 사양이지만, 앞서 언급한 바와 같이, 필요한 경우, 제어기 클라이언트(120)가 디버그 관찰 레지스터에 포함되어, 최소 레벨의 명령어 레벨 디버그 및 트레이스 성능을 제공할 수 있다. 이는 프로세싱 리소스(150)가 유한 함수, 예를 들어, 전용 오디오 CODEC인 경우 요구된다.
각각의 명령어 레벨 디버그 및 트레이스 유니트(151)는 디버그 액세스 포트(141)에 접속된 양지향성 인터페이스(155) 및 선택적 로컬 트레이스 버퍼(152), 트레이스 집합 포인트(142), 및 선택적 통합 트레이스 버퍼(143)중 하나 이상을 경유하여 트레이스 포트(144)에 접속된 트레이스 출력 인터페이스(105)를 포함한다.
디버그 액세스 포트(141)는 외부 '디버그 호스트'가 디버그 프로세스를 제어하고 액세스되도록 허용한다. 통상적으로, 이러한 호스트들은 일련의 포트 또는 다른 유사한 저속 접속 인터페이스 프로토콜을 통해 결합된다.
트레이스 포트(144)는 외부 소자로의 트레이스 데이터 액세스를 제공한다. 이는 소프트웨어 디버그 프로세스의 일부로서, 트레이스 데이터의 관찰이 이루어질수 있게 한다.
선택적 로컬 트레이스 버퍼(152) 및 통합 트레이스 버퍼(143)는 출력 이전에 일시적으로 트레이스 데이터를 저장하는데 이용된다. 이는 시스템의 런닝 '스냅 샷(snap shot)'이 저장되고, 후속하는 포인터에서 트레이스 포트(144)를 통해 판독되게 한다. 이렇게 함으로써, 잠재적으로 요구되는 높은 이동 속도를 갖지 않는 트레이스 포트(144)는, 디버그 데이터를 실시간 출력해야 한다. 이는 디버그 데이터 출력에 (적어도 일부) 전용되는 다수의 출력 핀들에 대한 요구조건을 없앤다. 이는 중요한 사항이며, 현재 임의의 특정한 집적회로(IC) 상에 장착될 수 있는 입/출력 패드의 개수는 기능 로직 자체의 크기와는 반대로 IC 다이의 크기를 제한하기 때문이다.
트레이스 집합 포인트(142)는 로컬 디버그 및 트레이스 유니트(151)로부터 출력된 다수의 디버그 트레이스 스트림(105)을 통합 트레이스 버퍼(143)가 제공되지 않는 경우, 통합 트레이스 버퍼(143)내의 저장을 위해 마련된 또는 트레이스 포트 인터페이스(144)에 대한 출력을 단순화한, 단일의 출력 스트림(stream)으로 간단히 멀티플렉싱하는 역할을 한다.
도 10A에서, 서로 접속되는 로컬 디버그 및 트레이스 유니트(151)가 본 발명의 스레드 디버그 제어기(400)이다. 상기 스레드 디버그 제어기(400)는 다시 하나 이상의 선택적 로컬 및 통합 트레이스 버퍼들을 경유하여, 제어기(130), 디버그 액세스 포트(141) 및 트레이스 출력 포트(144)에 접속된다. 도 10A의 디버그 프레임워크에서, 제어기(130)는 제어기 내에서 관찰되는 이벤트들로부터 초기에 유추되는 디버그 방식을 제시하는 각각의 DTU(151)로 초기 디버그 이네이블 신호(450)를 제공한다.
도 10B에서, 각각의 명령어 레벨 디버그 및 트레이스 유니트(151)는 디버그 제어 집합 유니트로부터 디버그 이네이블 신호를 수신하며, 이러한 이네이블들은 본 발명에 의해 생성되는 것들을 포함할 수 있는 예정된 이벤트 시퀀스들의 관측 결과로서 생성된다. 도 10B의 프레임워크는 로컬 디버그 및 트레이스 유니트(151) 또는 본 발명으로부터 초기화될 수 있는 디버그 방식을 가능케 한다.
도 11은 본 발명의 실시예의 스레드 디버그 제어기(400)의 특정 입력 및 출력을 나타낸다.
제어기(130) 서브블록들(200-280) 각각은 스레드 디버그 제어기(400)속에 신호들을 보유하는 디버그 인터페이스(410)를 갖는다. 이러한 입력 신호들은, 서브블록들이 각각의 프로세싱 리소스(150) 사이에서 개별 스레드들을 관리 및 할당하도록 상호작용함에 따라, 제어기(130)의 해당 서브블록들 각각에서 발생하는 이벤트들을 스레드 디버그 제어기(400)에 알린다. 또한 스레드 디버그 제어기(400)는 트레이스 및 트리거 정보에 대한 서브블록 이벤트들을 필터링할 수도 있다.
제어기(130) 각각의 서브블록 내에서 명령 수행은 이벤트ID 필드 및 이벤트데이터 필드를 스레드 디버그 제어기(400)로 전송하게 한다. 각각의 서브블록이 스레드 디버그 제어기(400)에 대해 자체 전용 인터페이스(440)를 가짐에 따라, 이들 필드들과 결합됨으로써 각각의 이벤트 관계가 결정되는 서브블록이 안내된다. 이벤트ID 필드는 사용자 정의가능하여, N 비트 길이(long)일 수 있으나, 본 발명의 바람직한 실시예에서, 이벤트ID는 4비트 길이이다. 각각의 개별적 이벤트ID 필드는 특정한 서브블록(200-280)에서 발생하는 개별적인 이벤트를 식별한다.
서브블록들 내에서 발생할 수 있는 이벤트들의 예로는 큐에 대한 스레드들의 푸싱/팝핑, 제어기 메모리 부재(195)에 대한 판독/기록 액세스, 동기화 이벤트 및 프로세싱 리소스(150)와 제어기(130) 간에 낮은 통신 레벨을 제공하는 이벤트의 발생이 포함된다.
각각의 이벤트ID를 달성하는 이벤트ID 필드는 현재 바람직한 실시예에서 32 비트 길이이다. 이러한 필드는 현재 실행되는 이벤트에 의해 사용되는 메인 데이터를 포함한다. 통상적으로는 제어기 메모리 부재(195)의 32 비트 길이 pReference 필드를 포함하나, 다수의 다른 데이터 형태, 또는 각각의 데이터타입이 32 비트 길이 미만인 경우 이들 데이터타입의 조합중 임의의 하나를 포함할 수도 있다. 이러한 다른 데이터타입의 예로는 제어기 메모리 부재(195) 인덱스들, 인터럽트 마스크, 타이머 값들 및 서브-모듈 ID들이 포함된다.
또한 스레드 디버그 제어기(400)는 타임 인터페이스(420)를 포함한다. 상기 인터페이스는 32 비트 타임 인디케이션(indication)을 제공하며, 이는 스레드 디버그 제어기(400)가 서브블록 입력 인터페이스(410)를 경유하여, 제어기(130) 각각의 서브블록들 각각으로부터 이벤트들을 수신함에 따라, 스레드 디버그 제어기(400)에 의해 개시된(logged) 모든 이벤트들의 시간을 구별하는데 이용된다.
보조 디버그 인터페이스(430)는 표준 외부 소프트웨어 디버그 및 시스템 가시화 및 제어 툴들이 스레드 디버그 제어기(400)의 액세스를 가능케하는 양방향성 인터페이스이다. 이러한 외부 소프트웨어 디버그 툴들은 시스템의 초기화에 따라 디버그 파라미터를 설정하고, 결과 트레이스 데이터를 포착하고 디스플레이하는데 이용된다. 지지되는 인터페이스들의 예로는 IEEE 1149.1 JTAG 인터페이스 및 보다 유력하게는 IEEE 넥서스 5001 AUX 포트 인터페이스가 포함된다.
원래 칩 소자들의 경계 스캔을 위해 의도된 JTAG는 일련의 링크들을 포함하는 4-와이어 인터페이스에 기초한 기술이며 저속 클록킹 방안으로, 현재 디버그 데이터 액세스를 가능케하는 멀티코어 아키텍쳐 내에서 광범위하게 이용된다. 대역폭 제한 및 인터페이스가 느린 일련의 링크 위로 디버스 호스트에 의해 제어된다는 사실로 인해, JTAG의 사용은 통상적으로 스태택 연산을 제한한다. 그러나, JTAG는 비교적 값이 저렴하며(실리콘 면적 및 칩 I/O 관련) 구현하기가 쉽기 때문에, JTAG는 온-칩 디버그를 위한 표준의 물리적 층이 되었다.
넥서스 5001 AUX 포트 인터페이스는 스레드 디버그 제어기(400) 내부로 디버그 레지스터에 대한 다이나믹 액세스와 같이, 광범위한 다이나믹 활성(activities)을 포함하여 보다 풍부한 디버그 성능 세트를 제공한다.
트레이스 버퍼 인터페이스(440)는 현재 이용가능한 임의의 버퍼 기술을 사용하여 설계된다. 특정 실시예에서, 트레이스 데이터는 단순 바이트 와이드 선입선출(simple byte wide First In First Out) 인터페이스를 통해 출력된다. 도 12A는 바이트 와이드 인터페이스 및 이와 관련된 제어 신호를 나타내는 반면, 도 12B는 이러한 데이터를 형성하는 전기적 신호 및 제어 입력/출력의 타이밍을 나타낸다. 단일의 바이트 와이드 인터페이스가 도시되지만, 이는 본 발명의 범주를 제한하고자 하는 것이 아님을 당업자는 알 것이다.
다시 도 11을 참조로, 도 10A에 의해 도시된 프레임워크에서, 외부 디버그 이네이블 신호 그룹(450)은 모든 로컬 디버그 및 트레이스 유니트(151) 이네이블 신호들이다. 여기에는 멀티코어 아키텍쳐(10)내에 존재하는 각각의 로컬 디버그 및 트레이스 유니트(151)가 제공되며, 정확한 수는 설계 단계 동안 설정된다. 이들 신호 각각은 트리거 이벤트의 검출에 따라 특정한 로컬 디버그 및 트레이스 유니트(151)가 작동하게 한다(enable). 이러한 로컬 디버그 및 트레이스 유니트(151) 이네이블 신호를 사용함으로써, 그리고 제어기(130) 연산의 고유한 스레드 레벨 추상(abstraction)으로 인해, 스레드 디버그 제어기(400)는 로컬 디버그 및 트레이스 유니트(151)의 로컬 명령어(마이크로-아키텍쳐) 레벨로 수집될 수 있는 스레드(즉, 마이크로-아키텍쳐) 레벨 디버그 성능을 제공한다. 대단위 스레드 기반 디버그 및 소단위 명령어 기반 디버그 모두가 소프트웨어 엔지니어에게 제공되어, 프로브 효과를 야기할 수 있는 추가의 디버그 소프트웨어를 도입하지 않고도, 디버그 프로세스가 용이해진다.
다시 도 11을 참조로, 도 10B에 의해 도시된 프레임워크에서, 외부 디버그 이네이블 신호 그룹(450)은 디버그 제어 집합 블록에 있는 모든 로컬 디버그 및 트레이스 유니트(151) 이네이블 신호들로 수집된 이네이블 신호들이다. 이러한 신호의 정확한 개수는 시스템 설계자가 디버그 제어 집합 블럭으로 전달되길 원하는 개별 이벤트들의 개수에 따라 결정된다. 다음 모든 디버그 이네이블 소스들을 필터링하고 트리거 이벤트의 검출에 따라, 적절한 로컬 디버그 및 트레이스 유니트(151)를 식별하는 것은 디버그 제어 집합 블록의 책임이다. 앞서 언급한 것처럼, 이러한 로컬 디버그 및 트레이스 유니트(151) 이네이블 신호들을 사용함으로써, 그리고 제어기(130) 연산의 고유한 스레드 레벨 추상(abstraction)으로 인해, 스레드 디버그 제어기(400)는 로컬 디버그 및 트레이스 유니트(151)의 로컬 명령어(마이크로-아키텍쳐) 레벨로 수집될 수 있는 스레드(즉, 매크로-아키텍쳐) 레벨 디버그 성능을 제공한다. 그러나, 이 경우, 트리거 시퀀스는 제어기에 의해 초기화되지 않을 수 있다.
스레드 디버그 제어기(400)는 업무 할당 제어기(130)를 구성하는 서브블록들에 대해 다수의 소단위 디버그 성능을 제공한다는 것을 주지해야 한다. 이는 하기에서 도 13과 관련하여 보다 상세히 설명될 것이다.
내부 디버그 이네이블 신호 그룹(460)은 업무 할당 제어기(130)를 구성하는 개별적인 서브블록들(200-280) 각각으로 스레드 디버그 제어기(400)에 의해 전송되는 신호들로 구성된다. 이는 스레드 디버그 제어기(400)가 그의 다음 명령어를 통해 각각의 서브블록 단일 단계를 구성하거나, 또는 스레드 디버그 제어기(400)의 구성에 따라 서브블록을 전체적으로 중단시키는데 이용된다.
스레드 디버그 제어기 인터럽트 신호 그룹(470)은 2개 신호로 구성된다. 이는 스레드 디버그 제어기(400)로부터 다시 제어기(130)로의 인터럽트 피드백을 허용한다. 이러한 인터럽트들은 제어기(130)에 대한 모든 다른 외부 인터럽트들과 동일한 방식으로 처리된다. 이러한 신호들의 사용은 전체적으로 프로그램가능하나, 이들 사용에 대한 전형적인 예들은 애플리케이션시 어텐션을 요구하는 이벤트에 대한 통계치(statistics)의 수집, 및 특정한 프로세싱 리소스(150)에서 디버그 모니터 스레드의 활성화를 포함한다.
TSIF 시스템 인터페이스(412)는 제어기(130)의 인터페이스 관리자 서브 모듈(280)과 스레드 디버그 제어기(400) 간의 통신을 허용한다. 이러한 인터페이스는 서브블록Cmd(SubBlockCmd) 슬래브 입력 인터페이스(490)와 제너릭Reg(GenericReg) 마스터 출력 인터페이스(480)를 포함한다. 멀티코어 프로세서내에 장착되는 모든 프로세싱 리소스(150) 및 TSIF 서브블록은 예를 들어, 런 애플리케이션 타임 동안 디버그 파라미터들을 프로그램하기 위해, 정규 및 디버그 연산들을 위해 서브블록Cmd 슬래브 입력 인터페이스(490)를 통해 스레드 디버그 제어기(400)를 액세스할 수 있다. 등가적으로, 모든 디버그 제어기(400)는 제너릭Reg 마스터 출력 인터페이스(480)를 경유하여 제어기(130)의 모든 내부 서브블록들에 대한 완전한(full) 액세스를 허용할 수 있다.
도 13은 제어기(130)의 각각의 서브블록들과 스레드 디버그 제어기(400) 간의 접속부들을 보다 상세히 나타내는 도면이다. 스레드 디버그 제어기(400)는 제너릭 레지스터, 제너릭Reg, 인터페이스(480)를 이용하여 인터페이스 매니저(280)를 통해 제어기(130) 각각의 서브블록 내의 리소스들을 액세스한다. 이러한 인터페이스는 스레드 디버그 제어기(400)가 디버그를 작동시켜 각각의 서브블록 상에서 독립적으로 단일 단계가 수행되게 한다.
스레드 디버그 제어기(400)는 다수의 시스템 와이드 폐쇄 루프 디버그 성능을 제공한다. 먼저, 인터럽트 매니저(TSIC)(250)는 추가의 스레드 디버그 제어기(400) 피드백 인터럽트(470)를 갖는다. 이러한 인터럽트들은 관찰되는 사용자 한정가능 이벤트의 특정 세트가 발생했다는 것을 나타내기 위해 스레드 디버그 제어기(400)에 의해 이용된다. 이러한 인터럽트는 특정한 싱크이벤트(SyncEvent)를 대기하는 시스템 관리 스레드들을 작동시키도록 인터럽트 매니저(TSIC)(250)가 싱크이벤트를 생성하게 하는데 이용될 수 있다. 이런 방식으로, 디버그 시스템은 특정한 시스템 이벤트의 검출에 따라 시스템 관리 스레드를 트리거시킬 수 있다.
둘째, 전용 TSIF 시스템 인터페이스(280) 명령은 32 비트 데이터를 유지하는 성능을 가지는 TSIF 디버그이벤트를 생성할 수 있다. 이는 이벤트를 생성하는데, 예를 들어, 프로세싱 상태의 변화를 나타내는데에 또는 프로세싱 리소스(150) 각각 및 호스트 디버거 사이의 낮은 비트 속도 통신 채널로서 이용될 수 있다.
도 14는 스레드 디버그 제어기(400)의 내부 기능 구현을 나타낸다.
다이나믹 디버그 인터페이스(540)는 스레드 디버그 제어기(400)의 다이나믹 연산의 사양들(specifics), 예를 들어, 시스템 관리 및 할당 이벤트가 스레드 디버그 제어기(400)에 의해 조사되는 것 및 특정한 이벤트가 관찰될 때 액션들이 스레드 디버그 제어기(400)에 의해 실행되는 것을 제어하는데 이용된다.
스태틱 디버그 인터페이스(530)는 스레드 디버그 제어기(400)의 스태틱 연산의 사양, 예를 들어 스태틱 이벤트 필터를 제어하는데 이용된다.
서브블록Cmd 인터페이스(490)는 제어기(130)의 인터페이스 매니저(280)가 다이나믹 디버그 인터페이스(540)로 액세스되게 한다. 특정하게 설계된 멀티플렉서(560)는 서브블록Cmd 인터페이스(490)로부터 다이나믹 디버그 인터페이스(540)가 액세스되도록만 허용한다. 넥서스(Nexus) 프로토콜 변환기(435)는 IEEE 넥서스 5001 프로토콜 표준을 사용하여 외부 디버그 호스트로부터 스레드 디버그 제어기(400)의 디버그 연산을 제어하기에 적합한 내부 신호로 신호들을 변환시킨다. 이렇게 하여, 변환기(435)는 넥서스 등록 레지스터의 서브셋을 제공한다. 외부 디버그 호스트는 다이나믹 디버그 인터페이스(540) 및 스태틱 디버그 인터페이스(530) 모두가 멀티플렉서(560)를 경유하여 액세스되도록 허용한다. 외부 디버그 호스트는 인터페이스 매니저(280) 제너릭 인터페이스를 경유하여 제어기(130)의 내부 서브블록들(200-280) 모두의 액세스를 허용한다.
도 15는 디버그 머신(500)중 하나의 로직 다이아그램을 나타낸다. 디버그 머신(500)의 개수는 임의적이며, 설계 시점에서 설정된다.
디버그 머신(500)은 임의의 개별적인, 풀 또는 임의의 프로세싱 리소스(150) 그룹에 대해 다수의 종단점 또는 관리점을 설정하는 플렉시블 및 사용자 구성가능 방법, 및 복잡한 트리거 시나리오를 제공한다. 디버그 머신(들)(500)은 트리거 시나리오의 발생을 관찰함으로써 내부 트레이스 기록 모듈 및 스태틱 이벤트 필터(600)를 작동/비작동시킬 수 있다.
각각의 디버그 머신(500)은 상기 디버그 머신(500)에 의해 관찰되는 이벤트들을 저장하기 위한 이벤트와치명령어(EventWatchlnst) 선입선출(FIFO) 레지스터(510), 및 이벤트와치명령어 선입선출(FIFO)(510)로부터의 특정 이벤트의 검출에 따라 수행되는 액션을 저장하기 위한 액션리스트명령어(ActionListlnst) FIFO 레지스터(515)를 포함한다. 이러한 레지스터들은 다이나믹 디버그 인터페이스(540)를 통해 이들 각각의 명령어들로 프로그램된다. 또한 각각의 디버그 머신(500)은 이벤트와치명령어 및 액션리스트명령어 지스터들로부터의 출력을 포착하는 이벤트 서비스 모듈(520)을 포함하고, 이를 제어기(130)의 각각의 서브블록들로부터 입력된 시스템 관리 및 할당 이벤트들과 비교한다. 다음 이벤트 서비스 모듈은, 해당 프로세싱 리소스(150)의 로컬 디버그 및 트레이스 유니트(151)의 이네이블링시 이용되는 디버그이네이블 신호(450); 트레이스 버퍼(440)으로 트레이스 정보를 출력하는 스태틱 이벤트 필터(600)를 작동(또는 비작동)시키는 트레이스이네이블/디스에이블(550); 현재 디버그 버신(500)과 함께 연결된 다른 디버그 머신을 제어하는 싱크이네이블 신호(555) 중 하나 이상을 출력한다. 또한 디버그 머신(500)은 디버그 프로그래밍을 목적으로, 다이나믹 디버그 인터페이스(540)로부터의 입력을 갖는다.
도 16은 본 명세서에 개시된 발명의 특정 실시예에서 디버그 머신(500)의 물리적 구현예를 나타낸다. 본 실시예에서, 이벤트와치명령어 FIFO(510a) 및 액션리스트명령어 FIFO(515a)는 실제적으로 모든 디버그 머신(500) 사이에 공유된 2개의 명령어 레지스터 파일로서 구현된다. 이러한 통합 레지스터 파일(510a, 515a)은 판독(506) 및 기록(505) 제어 로직 시스템들을 통해 논리적으로 독립된 FIFO들로서 액세스된다. 본 구현예는 각각의 디버그 머신(500)에 대한 FIFO 깊이가 사용자에 의해 특정한 구현예에 적합하게 개별적으로 구성되도록 한다.
도 17은 디버그 머신(500)의 연결 능력(concatenation ability)을 나타낸다. 이는 다수의 복잡한 로직 트리거 조합을 프로그래밍하는 능력을 제공한다. 디버그 신호(500)의 싱크이네이블 신호(555)는 이러한 복잡한 트리거 조합을 생성하는데 이용된다. 도시된 트리거 시나리오에서, 개별 트리거 이벤트의 단일 시퀀스는 3개 트리거 시퀀스의 조합으로 이어져야 하면, 결국 액션이 수행되기 이전에 다른 단일 트리거 시퀀스로 이어져야 한다. 다수의 디버그 머신(500)의 제공으로 인해, 조합 트리거 관계들이 동시적으로 평가될 수 있다.
이벤트와치 명령어들은 제어기(130) 내의 특정한 서브블록(200-280)으로부터 단일 이벤트를 포착하는데 이용된다. 각각의 디버그 머신(500)을 제어하는 유한 상태 머신(Finite State Machine, FSM)은 이벤트와치 명령어로 특정화된 서브블록 이벤트들을 검사하고, 관련된 액션리스트 명령어 내에 한정된 액션(예를 들어, 종단점 이네이블 등)을 수행한다.
각각의 이벤트와치 명령은 44 비트 폭(wide)이다. 여기에는 싱글 및 듀얼 워드 이벤트와치 명령어와 같은 2개의 중요한 형태의 이벤트와치 명령어들이 제공된다. 듀얼 워드 이벤트와치 명령어는 88 비트 길이이며, 이벤트와치명령어 FIFO(510) 내에 2 엔트리를 점유한다. 2가지 형태는 다음과 같다.
워드 |
비트 |
|||
43..41 | 40..36 | 35..32 | 31..0 | |
0 | EWOpcode | 서브모듈ID | 이벤트ID | 이벤트데이터 |
싱글 워드 이벤트와치 명령어 포맷
워드 |
비트 | |||
43..41 | 40..36 | 35..32 | 31.00 | |
1 | 마스크Op | 서브모듈ID마스크 | 이벤트ID마스크 | 이벤트데이터마스크 |
0 | EWOpcode | 서브모듈ID | 이벤트ID | 이벤트데이터 |
더블 워드 이벤트와치 명령어 포맷
두 가지 형태의 이벤트와치 명령어들 각각의 필드들은 다음과 같다.
1. EWOpcode() :이는 연산 포맷을 정의하는 3 비트(bit) 코드이다.
이는 하기의 것 중 하나이다:
EWOpcode | 뉴모닉스(Numonics) | 설명 |
000 | 보류 | |
1 |
SWIE |
싱글 워드 명령어 & 실행. 특정화된 이벤트가 검출될 때, 액션리스트 명령어 FIFO(515)의 제 1 명령어가 실행되고 사용자에 의해 리셋될 때까지 디버그 머신(500)이 중지된다. |
010 |
SWINE |
싱글 워드 명령어 & 비 실행. 특정화된 이벤트가 검출될 때, 디버그 머신(500)은 이벤트와치 명령어 FIFO(510)로부터 다음 명령어 실행을 지속한다. 이 명령어는 안긴(nested) 종단점/관리점을 제공하기 위해 사용될 수 있다. 액션리스트 명령어(515)는 실행되지 않는다. |
011 |
DWIE |
더블 워드 명령어 & 실행. SWIE에서와 동일하나, 해당 마스크 필드를 갖는 '마스크Op'가 제로를 체크하기 이전에 각각의 피연산자 필드에 인가된다. 이벤트와치 명령어 FIFO(510) 내에는 2개 엔트리가 요구된다. |
100 |
DWINE |
더블 워드 명령어 & 비 실행. SWINE에서와 동일하나, 해당 마스크 필드를 갖는 '마스크Op'가 제로를 체크하기 이전에 각각의 피연산자 필드에 인가된다. 이벤트와치 명령어 FIFO(510)내에는 2개 엔트리가 요구된다. |
101-111 | 보류 |
2. 서브모듈ID(SubModuleID)() : 5 비트 코드는 이벤트와 관련되는 서블블록을 정의한다:
3. 이벤트ID() : 4 비트 코드는 제어기(130)를 구성하는 서브블록들(200-280) 각각으로부터 인터페이스(410)에 대해 제공되는 각각의 이벤트 내에 제공된 이벤트ID에 의해 개시되는 것처럼, 개별 서브블록 이벤트를 정의한다.
4. 이벤트데이터(): 32비트 코드는 관찰되는 개별 서브블록(200-280) 이벤트, 예를 들어 제어기 전용 제어기 메모리(190) 내의 pReference를 정의한다.
도 18은 싱글 워드 이벤트 와치에 대한 디버그 머신에서의 데이터 흐름을 나타낸다.
싱글 워드 이벤트 와치에 대해, 다음 이벤트와치 명령어는 이벤트와치명령어 FIFO(510)로부터 이벤트 서비스 모듈(520)에서 제 1 2개의 이벤트와치 명령어 버퍼들로 먼저 로딩된다. 다음, 서브모듈ID, 이벤트ID 및 이벤트데이터 부분들이 비교기(522)를 사용하여 도입되는 제어기(130) 이벤트들과 비교된다. 이들은 단지 이벤트ID 및 이벤트데이터 만을 포함하고 있지만, 각각의 서브블록은 그 자체에 특정한 인터페이스(410)를 가지기 때문에 서브모듈ID는 공지된다. 비교 결과는 적용가능하다면, OR 로직 블록(523)을 이용하여 다른 디버그 머신(500)에 의해 실행되는 다른 비교 결과와 OR 처리된다(ORed). OR 함수 블록의 출력은 이벤트와치 명령어 디코더(524)의 출력을 제어하는데 이용되어, 이벤트와치 명령어내에 포함된 EWOpcode를 해독한다. 이벤트와치 명령어 디코더(524) 자체의 출력은 액션리스트 명령어 디코더(521)의 출력을 제어하여, 액션리스트 버퍼(516)를 통해, 이벤트와치 명령어와 관련된 액션리스트 명령어를 해독하는 액션리스트 명령어 디코더(521)의 출력을 제어한다. 액션리스트 명령어 디코더(521)의 출력은, 해당 디버그 머신(500)과 관련된 프로세싱 리소스(150)의 로컬 디버그 및 트레이스 유니트(151)를 제어하는 디버그이네이블 신호; 이 지점 전방으로부터 트레이스 데이터의 출력을 이네이블시키는 트레이스이네이블 신호; 디버그 머신들(500) 간에 동기화를 가능케하는 싱크이네이블(SyncEnable) 신호중 임의의 하나일 수 있다.
싱글 워드 이벤트와치 명령어 내에 존재하는 필드들 이외에, 더블 워드 이벤트와치 명령어는 한 세트의 마스크를 포함하며, 이들은 이벤트와치 명령어 필드에 대해 평가되기 이전에, 마스크Op 필드에 지정됨 명령어에 따라, 서브모듈ID, 이벤트ID 및 이벤트데이터 입력들로 적용된다. 마스크Op 필드는 임의의 값을 가질 수 있다 :
마스크Op 필드 | 모듈 설명 |
0000 | 비트단위 연산자 AND |
0001 | 비트단위 연산자 OR |
0010 | 비트단위 연산자 XOR |
0011-1111 | 보류 |
도 19는 듀얼 워드 이벤트와치 명령어가 실행되는 경우 디버그 버신(500)에서의 데이터 흐름을 나타낸다. 싱글 워드 이벤트와치 명령어 실행과의 기본적인 차이점은, 듀얼 워드 이벤트와치 명령어의 워드 1의 서브모듈ID, 이벤트ID 및 이벤트데이터 필드는 앞서 도시된 것처럼 마시크Op 코드 형태에 따라, 듀얼 워드 이벤트와치 명령어의 워드 0와 AND, OR 또는 XOR 처리된다.
싱글 및 듀얼 이벤트와치 명령어들은 동일한 액션리스트 명령어를 사용한다. 액션리스트 명령어는 디버그 머신(들)(500)이 복잡한 종단점 트리거링를 수행하고, 이네이블링 또는 디스에이블링을 추적하고, 다양한 디버그 머신들(500)간의 동기화를 가능케하며, 하기의 필드들을 포함한다.
필드명칭 |
비트 |
설명 |
트레이스이네이블 |
1 |
이네이블 또는 디스에이블 런타임 트레이스 정보 . 0 - 디스에이블 트레이스 모듈(151)(이네이블되면) 1 - 이네이블 트레이스 모듈(151)(디스에이블되면) |
SFT인덱스 |
2 |
트레이스이네이블이 이루어질 경우 (스태택 이벤트 필터 모듈(600)내의)'스태틱 필터 테이블 인덱스'가 사용되는지를 식별 |
브레이크이네이블 |
N+1 |
'N' 시스템 프로세싱 리소스(150)를 지지하는, 시스템 프로세싱 리소스(150) & 디버그 머신(들)(500)에 대한 종단점 이네이블. 따라서 시스템 프로세싱 리소스(150)의 임의의 조합은 이네이블된 종단점을 가질 수 있다. 비트[0] - 내부 디버그 머신(500). 비트[1] - 외부 시스템 프로세싱 리소스 1 디버그 이네이블. 비트[N] - 외부 시스템 프로세싱 리소스 N 디버그 이네이블. |
SWSync |
M |
디버그 머신(들)(500)의 복잡한 연결이 허용되도록 다른 디버그 머신(들)(500)에 대해 동기화 이벤트 제공 |
Int이네이블 |
2 |
소프트웨어 피쳐들을 지지하는, 예를 들어, 통계적 런타임 수집하는 TSIC(250)에 2 인터럽트 핀 제공 |
도 20은 포착을 위해 트레이스 데이터 포맷터 압축기 모듈(700) 위를 통과하기 이전에 시스템 관리 및 할당 이벤트의 필터링을 수행하는 스태틱 이벤트 필터(600)의 기능 블록 다이어그램을 나타낸다. 이러한 필터 모듈(600)은 타임 인터페이스(420)로부터의 32 비트 입력을 사용하여, 제어기(130)로부터 수신된 모든 이벤트들의 타임 스탬핑을 수행한다.
스태택 이벤트 모듈은 특정 서브블록(200-280)으로부터의 특정한 이벤트가 포착되어야 하는지를 선택하는데 이용되는 이벤트 필터 마스크(611-613), 스태틱 인터페이스(530)를 통해, 사용자 프로그램가능 세트를 제공한다. 이벤트 필터 마스크는 서브모듈ID, 이벤트ID 및 이벤트데이터 필드에 적용된다. 데이터의 각 단일 비트에 대해 각 이벤트 필터 마스크에 2 비트가 할당된다. 상기 2 비트 각각의 연산의 의미는 다음과 같다:
이벤트필터마스크비트 |
데이터 비트 필드 |
필터 상태 |
00 |
0 | 통과 |
1 | 실패 | |
01 |
0 | 실패 |
1 | 통과 | |
10 |
0 | 통과 |
1 | 통과 | |
11 |
0 | 실패 |
1 | 실패 |
이벤트 필터 마스크(611-613)의 사용자 정의 넘버(number)가 4개의 이벤트 필터 마스크 테이블(610)중 하나에 할당될 수 있다. 각각의 이벤트 필터 테이블(610)은 이벤트 필터 마스크(611-613)의 사용자 정의 넘버를 포함할 수 있다. 그러나 본 특정 실시예에서, 이러한 테이블은 인접한 필터 마스크를 포함해야 한다. 이러한 테이블들은 필터 마스크 서브셋트의 제공을 통해 하드웨어 리소스의 효율적인 사용 및 추가의 프로그램가능성을 허용하여, 개별적인 디버그 머신(500)의 사용을 가능케한다.
도 21은 특정한 이벤트 필터 마스크(611-613)가 특정한 이벤트 필터 마스크 테이블(610)에 할당되는 것을 나타낸다. 본 실시예에서, 필터 테이블 넘버 3는 사용되지 않는다는 것을 주지해야 한다.
도 22는 본 명세서에서 개시된 본 발명의 특정 실시예의 트레이스 데이터 포맷터 압축기(700)의 기능 블록도를 나타낸다.
트레이스 데이터 포맷터 압축기 모듈(700)은 유한 용량(limited capacity) 온-칩 트레이스 버퍼 모듈로 최상의 이용이 달성되도록, 트레이스 데이터를 압축한다. 압축 모듈은 트레이스 집합 소자(142) 또는 통합 트레이스 버퍼(143)와 함께 제공되지만, 이들은 명령어 레벨 또는 등가치, 각각의 프로세싱 리소스(150)와 관련된 로컬 디버그 및 트레이스 유니트(151)로부터의 디버그 및 트레이스 데이터를 수집하고 압축하도록 설계된다. 데이터 특성 공지되고 유사한 타입을 갖는 경우 압축이 최적화된다. 따라서, 이러한 압축기(700)는 만약 존재한다면, 통합 집합 포인트에 대해 스레드 디버그 제어기(400)로부터 출력되기 이전에, 스태틱 이벤트 필터(600)로부터 유도된 공지된 유사한 형태의 데이터들에 대해 작동한다.
트레이스 데이터 포맷터 압축기(700)는 다음 이용가능한 2 엔트리 FIFO(720)으로 필터링 및 타임 스탬핑 서브블록 이벤트들 모두의 경로를 설정하는 이벤트 스위치(710)를 포함하여, 필드 베이스 상관분석기(730)에 입력을 형성한다. FIFO는 싱글 또는 듀얼 워드 이벤트가 저장되도록 허용하는 2 엔트리이다. 이벤트 스위치(710)는 제어기(130)의 10 서브블록(200-280)으로부터 동시적으로 10 이벤트를 허용할 수 있다. 스위치 이벤트는 항상 현재 이용가능한 가장낮은 넘버 FIFO(720)으로 기록된다.
일단 모든 FIFO(720)가 적어도 하나의 엔트리를 포함하거나, 또는 내부 타이머가 현재 FIFO 로드 사이클의 마지막을 나타내어 종결되면, FIFO는 필드 베이스 상관분석기로 푸시된다. 내부 타이머는 적어도 하나의 엔트리가 임의의 10 FIFO(720)에 존재할 때 고정 값으로 로딩되며 이벤트가 판독될 때 재로딩된다.
필드 베이스 상관분석기(730)는 출력에 대해 필드에 제로 넘버를 최대화시키기 위해, 고정 길이 이벤트 필드 각각에 대해 고정 함수 연산을 수행한다. 이는 제 1 FIFO로 간주되는 각각의 필드 내에 공간적 및 시간적 상관(correlation)을 이용함으로써 행해진다. 따라서 제 1 FIFO는 그대로 유지된다. FIFO(2-10)에 대한 결과 고정 길이 필드, 및 비변경 FIFO(1)는 인트라 심볼 런랭쓰(run length) 엔코더(750)로 입력되기 이전에, 다른 필드 상관 FIFO(740)로 출력된다. 이러한 인트라 심볼 런랭쓰 엔코더(750)는 각각의 입력 심볼에 대한 제로 런랭쓰 엔코딩을 수행하여 가변 길이 출력 심볼 세트를 산출한다. 이는 최종 출력 비트스트림을 산출하는 인트라 심볼 런랭쓰 엔코더(770)으로 로딩되기 이전에, 다시 출력 FIFO(760)에 저장된다. 최종 출력 비트 스트림은 가변 길이 패킷타이저(780)에 의해, 트레이스 버퍼 인터페이스(440)에 적합한 가변 길이 패킷으로 패킷타이징(packetized)한다.
트레이스 패킷 데이터의 포맷은 물리적 층 관련물(dependent)이다. 물리적 층이 패킷 신호의 명시적 개시를 갖는 않는 상황에서, 리시버(receiver) FSM은 패킷 경계 식별(packet delineation)에 대한 잠금(lock)을 얻기 위해 다수의 패킷에 대해 고정 패턴 헤더 및 패킷 길이를 이용할 수 있다. 예시적인 패킷 포캣은 다음과 같다.
Syntax |
바이트 크기 |
설명 |
패킷개시 |
1 |
새로운 패킷의 개시를 나타내기 위해 고정된 바이트 패턴 0×FF |
바이트카운트 |
1 |
이 바이트에 이어 패킷 내에 전체 바이트 수를 표시. 값 0은 바이트 이상을 나타내는데 효과적이다(즉, NULL 패킷). |
패킷데이터 |
바이트카운트 |
압축된 시스템 관리 및 할당 이벤트 데이터 |
다시 도 14를 참조로, 스레드 디버그 제어기(500)의 내부 디버그 제어 모듈(580)은 개별 서브블록 디버그 이네이블 신호 및 제어기(130) 내의 서브블록(200-280)에 대한 단일-단계 기능을 제공한다. 임의의 디버그 머신(500)으로부터 내부 디버그이네이블 신호를 수신함에 따라, 내부 디버그 제어 모듈(580)은 디버그 모드로 특정 서브블록을 적용시킬 수 있다. 사용자는 다이나믹 디버그 인터페이스(540)를 통해 서브블록들을 단일 단계로 특정화시킬 수 있다.
본 발명의 실시예가 개시되었으나, 이는 단지 예시적인 것으로 다양한 변형이 고려될 수 있음을 주지해야 한다. 또한, 본 발명은 제한되지는 않지만, 예를 들어 모바일 텔레폰 또는 보이스 오버 인터넷 프로토콜(VolP) 게이트웨이와 같은 멀티코어 프로세서를 이용하는 임의의 소자 또는 애플리케이션에 대한 일반적 애플리케이션이다. 따라서, 특정 실시예가 하기의 특허청구범위에 의해 결정되는 본 발명의 범주를 제한하는 것은 아니다.
Claims (9)
- 스레드들을 프로세싱하기 위한 다수의 상호접속된 프로세서 부재들을 포함하는 멀티코어 프로세서 아키텍쳐를 위한 디버그 제어기로서,
상기 멀티코어 프로세서 아키텍쳐 내에서 적어도 하나의 스레드의 함수 및/또는 아이덴티티 및/또는 실행 위치와 관련된 다수의 파라미터들을 나타내는 다수의 스레드 파라미터 인디케이터들을 수신하도록 구성된, 스레드 관리 및 할당 이벤트 입력부;
다수의 디버그 머신들 ― 디버그 머신들 각각은 상기 다수의 스레드 파라미터 인디케이터들 중 적어도 하나의 스레드 파라미터 인디케이터를 스레드 파라미터 인디케이터들에 대한 제 1 의 다수의 미리 예정된 기준과 비교하고, 상기 비교에 응답하여 트레이스 이네이블(trace enable) 신호를 생성하도록 구성되며, 상기 제 1 의 다수의 미리 예정된 기준 각각은 상기 다수의 스레드 파라미터 인디케이터들로부터의 해당 파라미터의 적어도 하나의 미리 예정된 값을 나타냄 ―;
상기 트레이스 이네이블 신호에 응답하여 상기 다수의 스레드 파라미터 인디케이터들 각각을 스레드 파라미터 인디케이터들에 대한 제 2 의 다수의 미리 예정된 기준과 비교하고, 상기 다수의 스레드 파라미터 인디케이터들 및 상기 제 2 의 다수의 미리 예정된 기준과의 상기 비교의 결과에 기초하여 트레이스 버퍼에 대한 트레이스 출력을 생성하도록 구성된 스태틱 이벤트 필터 ― 상기 제 2 의 다수의 미리 예정된 기준 각각은 상기 다수의 스레드 파라미터 인디케이터들로부터의 해당 파라미터의 적어도 하나의 미리 예정된 값을 나타냄 ―
를 포함하고,
상기 제 2 의 다수의 미리 예정된 기준은 상기 제 1 의 다수의 미리 예정된 기준과는 별도의 기준인,
디버그 제어기. - 제 1 항에 있어서,
상기 다수의 디버그 머신들 각각은,
제 1 의 다수의 미리 예정된 기준의 시퀀스를 저장하도록 구성되는 이벤트 와치(event watch) 선입선출(first-in-first-out: FIFO) 레지스터;
상기 이벤트와치 선입선출 레지스터 내에 저장된 상기 시퀀스에 대응하는 액션 명령어들의 시퀀스를 저장하도록 구성되는 액션리스트 선입선출(FIFO) 레지스터 ― 액션 명령어 각각은 수행될 액션들을 나타냄 ―; 및
상기 적어도 하나의 스레드 파라미터 인디케이터가 상기 시퀀스의 첫번째에 있는 상기 제 1 의 다수의 미리 예정된 기준에 매칭하는지를 결정하고, 상기 적어도 하나의 스레드 파라미터 인디케이터가 상기 제 1 의 다수의 미리 예정된 기준에 매칭한다면, 상기 대응하는 액션 명령어가 트레이스가 이네이블될 것임을 나타내는지를 결정하고, 상기 대응하는 액션 명령어가 트레이스가 이네이블될 것임을 나타낸다면, 상기 트레이스 이네이블 신호를 생성하도록 구성되는 이벤트 서비스 모듈을 포함하는,
디버그 제어기. - 제 1 항에 있어서,
사용자-프로그래밍된 이벤트 필터 마스크의 형태로, 상기 스태틱 이벤트 필터로 상기 제 2 의 다수의 미리 예정된 기준을 제공하도록 구성된 스태틱 인터페이스를 더 포함하는,
디버그 제어기. - 제 1 항에 있어서,
상기 멀티코어 프로세서 아키텍쳐는 다수의 상호접속된 개별 서브 유니트들을 포함하는 프로세서 제어기를 더 포함하는,
디버그 제어기. - 제 4 항에 있어서,
상기 다수의 디버그 머신들 및 상기 스태틱 이벤트 필터 사이에서 인터페이싱함으로써 상기 제어기의 동적 동작을 제어하기 위한 다이나믹 디버그 인터페이스; 및
상기 프로세서 제어기가 상기 다이나믹 디버그 인터페이스에 액세스하도록 하기 위한 서브-블록 명령(command) 인터페이스를 더 포함하는,
디버그 제어기. - 제 3 항 또는 제 5 항에 있어서,
외부의 디버그 호스트가 상기 스태틱 인터페이스 또는 상기 다이나믹 디버그 인터페이스에 액세스하게 하도록 구성되는 보조 디버그 인터페이스를 더 포함하는,
디버그 제어기. - 제 1 항에 있어서,
다수의 생성된 트레이스 출력들을 수신하고 상기 수신된 트레이스 출력들을 압축하도록 구성되는 트레이스 데이터 포맷터(formatter) 압축기 모듈;
상기 트레이스 데이터 포맷터 압축기 모듈로부터 상기 트레이스 버퍼로 상기 압축된 트레이스 출력들을 제공하기 위한 트레이스 버퍼 인터페이스를 더 포함하는,
디버그 제어기. - 제 7 항에 있어서,
상기 트레이스 데이터 포맷터 압축기 모듈은,
제 1 의 2-엔트리 선입선출 레지스터를 포함하는 다수의 2-엔트리 선입선출(FIFO) 레지스터들;
각각의 생성된 트레이스 출력을 수신하고 상기 생성된 트레이스 출력을 상기 다수의 2-엔트리 선입선출 레지스터들 중 하나로 보내도록 구성되는 이벤트 스위치;
상기 다수의 2-엔트리 선입선출 레지스터들로부터 상기 생성된 트레이스 출력들을 수신하고 상기 제 1 의 선입선출 레지스터의 상기 생성된 트레이스 출력을 기준으로 공간적 및 시간적 상관을 이용함으로써 제로 넘버를 최대화하기 위해 상기 생성된 트레이스 출력들 상에 고정 함수 연산들을 수행하여 상기 생성된 트레이스 출력들을 프로세싱하도록 구성된 필드 베이스 상관자;
상기 프로세싱된 트레이스 출력들을 수신하도록 구성된 다수의 필드 상관된 선입선출 레지스터들 ― 각각의 프로세싱된 트레이스 출력은 다수의 심볼들을 포함함 ―;
상기 다수의 필드 상관된 선입선출 레지스터들로부터 상기 프로세싱된 트레이스 출력들을 수신하고 상기 프로세싱된 트레이스 출력들의 각각의 심볼 상에 제로 실행 길이(run length) 인코딩을 수행함으로써 상기 프로세싱된 트레이스 출력들을 인코딩하여, 가변 길이(length) 심볼들을 포함하는 인코딩된 트레이스 출력들을 산출하도록 구성되는 인트라-심볼 실행 길이 인코더(intra-symbol run length encoder);
상기 인트라-심볼 실행 길이 인코더로부터 상기 인코딩된 트레이스 출력들을 수신하도록 구성되는 다수의 출력 선입선출 레지스터들;
상기 다수의 출력 선입선출 레지스터들로부터의 상기 인코딩된 트레이스 출력들에 기초하여 출력 비트스트림을 생성하도록 구성되는 인터-심볼 실행 길이 인코더(inter-symbol run length encoder);
상기 트레이스 버퍼 인터페이스에 입력으로서 제공될 수 있는 상기 출력 비트스트림으로부터의 가변 길이 패킷들을 생성하도록 구성되는 가변 길이 패킷타이저(packetizer)를 포함하는,
디버그 제어기. - 제 1 항에 있어서,
상기 스태틱 이벤트 필터는 시간 인터페이스를 더 포함하고,
상기 시간 인터페이스는 상기 트레이스 출력을 시간 스탬핑하기 위한 시간 표시를 제공하도록 구성되는,
디버그 제어기.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB0420442A GB0420442D0 (en) | 2004-09-14 | 2004-09-14 | Debug in a multicore architecture |
GB0420442.6 | 2004-09-14 | ||
PCT/GB2005/003525 WO2006030195A2 (en) | 2004-09-14 | 2005-09-13 | Mehtod and system for debugging a multi- threaded program executing in a multicore architecture |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020127021494A Division KR101311846B1 (ko) | 2004-09-14 | 2005-09-13 | 멀티코어 아키텍쳐의 디버그 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20130032413A KR20130032413A (ko) | 2013-04-01 |
KR101365121B1 true KR101365121B1 (ko) | 2014-03-12 |
Family
ID=33306559
Family Applications (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020137006594A KR101365121B1 (ko) | 2004-09-14 | 2005-09-13 | 멀티코어 아키텍쳐의 디버그 |
KR1020127021494A KR101311846B1 (ko) | 2004-09-14 | 2005-09-13 | 멀티코어 아키텍쳐의 디버그 |
KR1020077006808A KR101248175B1 (ko) | 2004-09-14 | 2005-09-13 | 멀티코어 아키텍쳐의 디버그 |
Family Applications After (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020127021494A KR101311846B1 (ko) | 2004-09-14 | 2005-09-13 | 멀티코어 아키텍쳐의 디버그 |
KR1020077006808A KR101248175B1 (ko) | 2004-09-14 | 2005-09-13 | 멀티코어 아키텍쳐의 디버그 |
Country Status (7)
Country | Link |
---|---|
EP (1) | EP1805621B1 (ko) |
JP (3) | JP5610668B2 (ko) |
KR (3) | KR101365121B1 (ko) |
CN (3) | CN102508781B (ko) |
GB (1) | GB0420442D0 (ko) |
TW (3) | TWI475376B (ko) |
WO (1) | WO2006030195A2 (ko) |
Families Citing this family (39)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9038070B2 (en) | 2004-09-14 | 2015-05-19 | Synopsys, Inc. | Debug in a multicore architecture |
GB0519981D0 (en) | 2005-09-30 | 2005-11-09 | Ignios Ltd | Scheduling in a multicore architecture |
CN100451972C (zh) * | 2006-09-26 | 2009-01-14 | 杭州华三通信技术有限公司 | 提高多核***访问临界资源速度的方法和装置 |
GB2443277B (en) * | 2006-10-24 | 2011-05-18 | Advanced Risc Mach Ltd | Performing diagnostics operations upon an asymmetric multiprocessor apparatus |
US8341604B2 (en) * | 2006-11-15 | 2012-12-25 | Qualcomm Incorporated | Embedded trace macrocell for enhanced digital signal processor debugging operations |
US8380966B2 (en) | 2006-11-15 | 2013-02-19 | Qualcomm Incorporated | Method and system for instruction stuffing operations during non-intrusive digital signal processor debugging |
US8484516B2 (en) * | 2007-04-11 | 2013-07-09 | Qualcomm Incorporated | Inter-thread trace alignment method and system for a multi-threaded processor |
US7962885B2 (en) * | 2007-12-04 | 2011-06-14 | Alcatel-Lucent Usa Inc. | Method and apparatus for describing components adapted for dynamically modifying a scan path for system-on-chip testing |
KR100958303B1 (ko) | 2007-12-12 | 2010-05-19 | 한국전자통신연구원 | 멀티코어 시스템 환경에서 내부 코어 간 통신채널을 이용한 모듈 디바이스의 동적 적재 및 실행을 통한 부하 균등화 시스템 및 방법 |
AT505630B1 (de) * | 2008-02-05 | 2009-03-15 | Ver Fachhochschule Technikum W | Einrichtung zum koordinierten testen und zur fehlersuche in verteilten eingebetteten mikroprozessorsystemen |
JP2010117813A (ja) * | 2008-11-12 | 2010-05-27 | Nec Electronics Corp | デバッグシステム、デバッグ方法、デバッグ制御方法及びデバッグ制御プログラム |
US8495344B2 (en) * | 2010-01-22 | 2013-07-23 | Via Technologies, Inc. | Simultaneous execution resumption of multiple processor cores after core state information dump to facilitate debugging via multi-core processor simulator using the state information |
TWI470421B (zh) * | 2010-03-16 | 2015-01-21 | Via Tech Inc | 微處理器及其除錯方法 |
KR101151284B1 (ko) * | 2010-04-06 | 2012-06-08 | 주식회사 안철수연구소 | 인젝션 스레드의 네트워크 행위 차단 시스템 및 그 방법 |
US8766666B2 (en) | 2010-06-10 | 2014-07-01 | Micron Technology, Inc. | Programmable device, hierarchical parallel machines, and methods for providing state information |
CN102655440A (zh) * | 2011-03-03 | 2012-09-05 | 中兴通讯股份有限公司 | 对多套Turbo译码器进行调度的方法和装置 |
TWI497419B (zh) * | 2011-10-20 | 2015-08-21 | Via Tech Inc | 電腦裝置及其中斷任務分配方法 |
CN102819218B (zh) * | 2012-07-19 | 2015-04-29 | 西安交通大学 | 基于事件控制函数的离散事件***监控器及其控制方法 |
US9672041B2 (en) * | 2013-08-01 | 2017-06-06 | Andes Technology Corporation | Method for compressing variable-length instructions including PC-relative instructions and processor for executing compressed instructions using an instruction table |
KR20150019457A (ko) | 2013-08-14 | 2015-02-25 | 삼성전자주식회사 | 시스템 온 칩, 이의 동작 방법, 및 이를 포함하는 시스템 |
CN104331388B (zh) * | 2013-08-28 | 2018-09-11 | 威盛电子股份有限公司 | 微处理器及在微处理器的处理核间同步的方法 |
CN104572515B (zh) * | 2013-10-28 | 2019-05-31 | 锐迪科(重庆)微电子科技有限公司 | 跟踪模块、方法、***和片上***芯片 |
US20150127927A1 (en) * | 2013-11-01 | 2015-05-07 | Qualcomm Incorporated | Efficient hardware dispatching of concurrent functions in multicore processors, and related processor systems, methods, and computer-readable media |
CN103631752A (zh) * | 2013-12-19 | 2014-03-12 | 无锡美森微电子科技有限公司 | 一种众核处理器片上网络实时通信时间戳方法及*** |
US9195493B2 (en) * | 2014-03-27 | 2015-11-24 | International Business Machines Corporation | Dispatching multiple threads in a computer |
US9626265B2 (en) | 2015-06-29 | 2017-04-18 | International Business Machines Corporation | Efficiency of cycle-reproducible debug processes in a multi-core environment |
CN105740155A (zh) * | 2016-03-09 | 2016-07-06 | 惠州Tcl移动通信有限公司 | 一种Modem CPU的调试实现方法及实现*** |
US10222995B2 (en) * | 2016-04-13 | 2019-03-05 | Samsung Electronics Co., Ltd. | System and method for providing a zero contention parallel data stack |
US10365987B2 (en) | 2017-03-29 | 2019-07-30 | Google Llc | Synchronous hardware event collection |
US9875167B1 (en) * | 2017-03-29 | 2018-01-23 | Google Inc. | Distributed hardware tracing |
CN107678892B (zh) * | 2017-11-07 | 2021-05-04 | 黄淮学院 | 基于跳跃恢复链的连续数据保护方法 |
US10579501B2 (en) | 2018-04-04 | 2020-03-03 | International Business Machines Corporation | Testing and reproduction of concurrency issues |
US11119782B2 (en) * | 2018-05-07 | 2021-09-14 | Micron Technology, Inc. | Thread commencement using a work descriptor packet in a self-scheduling processor |
US11074078B2 (en) * | 2018-05-07 | 2021-07-27 | Micron Technology, Inc. | Adjustment of load access size by a multi-threaded, self-scheduling processor to manage network congestion |
US11513838B2 (en) * | 2018-05-07 | 2022-11-29 | Micron Technology, Inc. | Thread state monitoring in a system having a multi-threaded, self-scheduling processor |
US11513839B2 (en) * | 2018-05-07 | 2022-11-29 | Micron Technology, Inc. | Memory request size management in a multi-threaded, self-scheduling processor |
US11513840B2 (en) * | 2018-05-07 | 2022-11-29 | Micron Technology, Inc. | Thread creation on local or remote compute elements by a multi-threaded, self-scheduling processor |
CN113352329A (zh) * | 2021-06-28 | 2021-09-07 | 珠海市一微半导体有限公司 | 机器人多***调试信息的实时序列化方法及机器人 |
CN116340188B (zh) * | 2023-05-26 | 2023-08-04 | 深流微智能科技(深圳)有限公司 | Gpu芯片渲染任务的调试方法及*** |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030005417A1 (en) | 2001-06-29 | 2003-01-02 | Gard James J. | Debugger for a hardware-implemented operating system |
Family Cites Families (27)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2538897B2 (ja) * | 1987-01-14 | 1996-10-02 | 富士通株式会社 | デ−タ処理装置 |
JP2627464B2 (ja) * | 1990-03-29 | 1997-07-09 | 三菱電機株式会社 | 集積回路装置 |
JPH05324399A (ja) * | 1992-03-23 | 1993-12-07 | Toshiba Corp | 情報監視装置 |
JPH06161817A (ja) * | 1992-11-18 | 1994-06-10 | Yokogawa Electric Corp | スレッドオンラインデバッグ装置 |
JP2866591B2 (ja) * | 1994-01-10 | 1999-03-08 | インターナショナル・ビジネス・マシーンズ・コーポレイション | オブジエクトの使用可能性の通知方法及び装置 |
JPH0816430A (ja) * | 1994-06-27 | 1996-01-19 | Mitsubishi Electric Corp | 並列プログラムトレース装置 |
US5835705A (en) * | 1997-03-11 | 1998-11-10 | International Business Machines Corporation | Method and system for performance per-thread monitoring in a multithreaded processor |
UA55489C2 (uk) * | 1997-10-07 | 2003-04-15 | Каналь+ Сосьєте Анонім | Пристрій для багатопотокової обробки даних (варіанти) |
JPH11338733A (ja) * | 1998-02-27 | 1999-12-10 | Toshiba Corp | デバッグ装置及び記録媒体 |
US6625635B1 (en) * | 1998-11-02 | 2003-09-23 | International Business Machines Corporation | Deterministic and preemptive thread scheduling and its use in debugging multithreaded applications |
US6593940B1 (en) * | 1998-12-23 | 2003-07-15 | Intel Corporation | Method for finding errors in multithreaded applications |
JP3604029B2 (ja) * | 1999-01-12 | 2004-12-22 | 日本電気株式会社 | マルチスレッドプロセッサ |
US6587967B1 (en) * | 1999-02-22 | 2003-07-01 | International Business Machines Corporation | Debugger thread monitor |
JP3966453B2 (ja) * | 1999-05-26 | 2007-08-29 | 株式会社ルネサステクノロジ | 半導体集積回路 |
WO2001016714A1 (en) * | 1999-09-01 | 2001-03-08 | Intel Corporation | Fast write instruction for micro engine used in multithreaded parallel processor architecture |
KR20010085997A (ko) * | 1999-09-07 | 2001-09-07 | 롤페스 요하네스 게라투스 알베르투스 | 프로그램 스레드 디버깅 방법 |
US6487683B1 (en) * | 1999-10-01 | 2002-11-26 | Stmicroelectronics Limited | Microcomputer debug architecture and method |
US6668275B1 (en) * | 1999-12-17 | 2003-12-23 | Honeywell International Inc. | System and method for multiprocessor management |
US6625654B1 (en) * | 1999-12-28 | 2003-09-23 | Intel Corporation | Thread signaling in multi-threaded network processor |
JP2002014841A (ja) * | 2000-06-30 | 2002-01-18 | Esol Co Ltd | デバッグカーネルシステム |
US7448025B2 (en) * | 2000-12-29 | 2008-11-04 | Intel Corporation | Qualification of event detection by thread ID and thread privilege level |
CN1170225C (zh) * | 2001-08-28 | 2004-10-06 | 华为技术有限公司 | 自动测试***的仪器模块驱动实现方法 |
JP2003131902A (ja) * | 2001-10-24 | 2003-05-09 | Toshiba Corp | ソフトウェアデバッガ、システムレベルデバッガ、デバッグ方法、及びデバッグプログラム |
JP2003263331A (ja) * | 2002-03-07 | 2003-09-19 | Toshiba Corp | マルチプロセッサシステム |
JP2004021751A (ja) * | 2002-06-19 | 2004-01-22 | Matsushita Electric Ind Co Ltd | デバッグ装置、デバッグプログラム、およびデバッグプログラム記録媒体 |
GB0407384D0 (en) * | 2004-03-31 | 2004-05-05 | Ignios Ltd | Resource management in a multicore processor |
JP2006053835A (ja) * | 2004-08-13 | 2006-02-23 | Sony Corp | 情報処理装置、デバッグ方法及びそのプログラム |
-
2004
- 2004-09-14 GB GB0420442A patent/GB0420442D0/en not_active Ceased
-
2005
- 2005-09-13 JP JP2007530774A patent/JP5610668B2/ja active Active
- 2005-09-13 KR KR1020137006594A patent/KR101365121B1/ko active IP Right Grant
- 2005-09-13 KR KR1020127021494A patent/KR101311846B1/ko active IP Right Grant
- 2005-09-13 CN CN201210004184.XA patent/CN102508781B/zh active Active
- 2005-09-13 CN CN201210004215.1A patent/CN102521137B/zh active Active
- 2005-09-13 EP EP05779159.2A patent/EP1805621B1/en active Active
- 2005-09-13 CN CN2005800307894A patent/CN101084488B/zh active Active
- 2005-09-13 KR KR1020077006808A patent/KR101248175B1/ko active IP Right Grant
- 2005-09-13 WO PCT/GB2005/003525 patent/WO2006030195A2/en active Application Filing
- 2005-09-14 TW TW102117391A patent/TWI475376B/zh active
- 2005-09-14 TW TW102117390A patent/TWI474162B/zh active
- 2005-09-14 TW TW094131673A patent/TWI408547B/zh active
-
2012
- 2012-11-30 JP JP2012263380A patent/JP5492280B2/ja active Active
-
2013
- 2013-07-10 JP JP2013144994A patent/JP5492332B2/ja active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030005417A1 (en) | 2001-06-29 | 2003-01-02 | Gard James J. | Debugger for a hardware-implemented operating system |
Also Published As
Publication number | Publication date |
---|---|
TW201333680A (zh) | 2013-08-16 |
EP1805621B1 (en) | 2016-08-17 |
TWI474162B (zh) | 2015-02-21 |
KR20070083590A (ko) | 2007-08-24 |
TW201333681A (zh) | 2013-08-16 |
KR20130032413A (ko) | 2013-04-01 |
KR101248175B1 (ko) | 2013-03-27 |
JP5610668B2 (ja) | 2014-10-22 |
CN102508781A (zh) | 2012-06-20 |
JP2008513853A (ja) | 2008-05-01 |
CN101084488A (zh) | 2007-12-05 |
EP1805621A2 (en) | 2007-07-11 |
WO2006030195A2 (en) | 2006-03-23 |
CN102521137B (zh) | 2015-10-28 |
CN102521137A (zh) | 2012-06-27 |
JP2013127782A (ja) | 2013-06-27 |
JP2013239196A (ja) | 2013-11-28 |
TWI408547B (zh) | 2013-09-11 |
TWI475376B (zh) | 2015-03-01 |
CN101084488B (zh) | 2012-03-14 |
JP5492280B2 (ja) | 2014-05-14 |
TW200613964A (en) | 2006-05-01 |
GB0420442D0 (en) | 2004-10-20 |
KR20120097422A (ko) | 2012-09-03 |
JP5492332B2 (ja) | 2014-05-14 |
KR101311846B1 (ko) | 2013-09-27 |
CN102508781B (zh) | 2015-10-14 |
WO2006030195A3 (en) | 2007-02-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101365121B1 (ko) | 멀티코어 아키텍쳐의 디버그 | |
US9830241B2 (en) | Debug in a multicore architecture | |
US8413120B2 (en) | Method and system for thread monitoring | |
US9639447B2 (en) | Trace data export to remote memory using remotely generated reads | |
JP2011243110A (ja) | 情報処理装置 | |
US20110239196A1 (en) | Micro-Task Pipeline Visualization | |
JP6220863B2 (ja) | リセット条件トレース能力を伴うプロセッサデバイス | |
EP2847683B1 (en) | Processor device with instruction trace capabilities | |
US11907100B2 (en) | Generation of trace messages including an instruction retirement count and a stall count | |
US20070271046A1 (en) | Scheme for improving bandwidth by identifying specific fixed pattern sequences as header encoding followed by the pattern count |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A107 | Divisional application of patent | ||
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20170119 Year of fee payment: 4 |
|
FPAY | Annual fee payment |
Payment date: 20190116 Year of fee payment: 6 |
|
FPAY | Annual fee payment |
Payment date: 20200115 Year of fee payment: 7 |