KR20230170995A - 스케일러블 인터럽트들 - Google Patents

스케일러블 인터럽트들 Download PDF

Info

Publication number
KR20230170995A
KR20230170995A KR1020237042801A KR20237042801A KR20230170995A KR 20230170995 A KR20230170995 A KR 20230170995A KR 1020237042801 A KR1020237042801 A KR 1020237042801A KR 20237042801 A KR20237042801 A KR 20237042801A KR 20230170995 A KR20230170995 A KR 20230170995A
Authority
KR
South Korea
Prior art keywords
interrupt
cluster
interrupt controller
controller
controllers
Prior art date
Application number
KR1020237042801A
Other languages
English (en)
Inventor
제프리 이. 고니온
찰스 이. 터커
탈 쿠지
리차드 에프. 루소
므리둘 아가르왈
크리스토퍼 엠. 차이
기드온 엔. 레빈스키
시-치에 웬
리오르 지멧
Original Assignee
애플 인크.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 애플 인크. filed Critical 애플 인크.
Publication of KR20230170995A publication Critical patent/KR20230170995A/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4812Task transfer initiation or dispatching by interrupt, e.g. masked
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/24Handling requests for interconnection or transfer for access to input/output bus using interrupt
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Bus Control (AREA)

Abstract

시스템을 위한 인터럽트 전달 메커니즘은 일 실시예에서 인터럽트 제어기 및 개개의 복수의 프로세서들에 커플링된 복수의 클러스터 인터럽트 제어기들을 포함한다. 인터럽트 제어기는 개개의 클러스터 인터럽트 제어기들에 인터럽트 요청을 연속으로 송신할 수 있고, 클러스터 인터럽트 제어기들은 클러스터 인터럽트 제어기가 커플링된 프로세서들에 인터럽트를 전달하려고 시도하는 것에 기초하여 인터럽트를 확인응답(Ack) 또는 비-확인응답(Nack)할 수 있다. 소프트 반복에서, 클러스터 인터럽트 제어기는 파워 온된 프로세서들에 인터럽트를 전달하려고 시도하고, 파워 오프된 프로세서들을 파워 온시키려고 시도하지 않을 수 있다. 소프트 반복이 복수의 클러스터 인터럽트 제어기들 중 하나로부터의 Ack 응답을 초래하지 않으면, 파워 오프된 프로세서들이 파워 온될 수 있는 하드 반복이 수행될 수 있다.

Description

스케일러블 인터럽트들{SCALABLE INTERRUPTS}
본 명세서에서 설명되는 실시예들은 컴퓨팅 시스템들에서의 인터럽트들에 관한 것으로, 더 상세하게는, 서비스를 위해 프로세서들에 인터럽트들을 분배하는 것에 관한 것이다.
컴퓨팅 시스템들은 일반적으로, 다양한 하드웨어 기능들을 구현하는 하나 이상의 주변기기들과 함께, 중앙 프로세싱 유닛(CPU)들로서 기능하는 하나 이상의 프로세서들을 포함한다. CPU들은 다양한 주변기기들의 동작을 제어하는 제어 소프트웨어(예컨대, 운영 체제)를 실행한다. CPU들은 또한, 시스템에서 사용자 기능을 제공하는 애플리케이션들을 실행할 수 있다. 추가적으로, CPU들은 주변기기들과 상호작용하고 주변기기를 대신하여 다양한 서비스들을 수행하는 소프트웨어를 실행할 수 있다. 시스템에서 CPU들로서 사용되지 않는 다른 프로세서들(예를 들어, 일부 주변기기들에 통합된 프로세서들)은 또한 주변기기들을 위해 그러한 소프트웨어를 실행할 수 있다.
주변기기들은 프로세서들로 하여금 인터럽트들을 사용하여 자신들 대신에 소프트웨어를 실행하게 할 수 있다. 일반적으로, 주변기기들은, 통상적으로 프로세서들로 진행하는 인터럽트들을 제어하는 인터럽트 제어기에 인터럽트 신호를 어서트(assert)함으로써 인터럽트를 발행한다. 인터럽트는 프로세서로 하여금 자신의 현재 소프트웨어 태스크를 실행하는 것을 중지하게 하여, 태스크가 나중에 재개될 수 있도록 태스크에 대한 상태를 저장한다. 프로세서는 인터럽트와 관련된 상태를 로딩하고 인터럽트 서비스 루틴의 실행을 시작할 수 있다. 인터럽트 서비스 루틴은 주변기기에 대한 드라이버 코드일 수 있거나, 또는 필요에 따라 드라이버 코드에 실행을 전달할 수 있다. 일반적으로, 드라이버 코드는 주변 디바이스를 제어 및/또는 구성하기 위해 프로세서에 의해 실행될 주변 디바이스에 대해 제공되는 코드이다.
인터럽트의 어서션으로부터 인터럽트의 서비스까지의 레이턴시는 시스템의 성능 및 심지어 기능에 중요할 수 있다. 추가적으로, 어느 CPU가 인터럽트를 서비스할지의 효율적인 결정 및 시스템의 나머지의 최소의 섭동(perturbation)으로 인터럽트를 전달하는 것은, 성능 및 시스템에서의 낮은 전력 소비의 유지 둘 모두에 중요할 수 있다. 시스템 내의 프로세서들의 수가 증가함에 따라, 인터럽트 전달을 효율적이고 효과적으로 스케일링하는 것이 훨씬 더 중요하다.
다음의 상세한 설명은 첨부 도면들을 참조하며, 이제 도면들이 간단히 설명된다.
도 1은 인터럽트 제어기 및 프로세서들의 복수의 클러스터들에 대응하는 복수의 클러스터 인터럽트 제어기들을 포함하는 시스템의 일 실시예의 블록도이다.
도 2는 도 1에 도시된 시스템의 일 실시예를 구현할 수 있는 시스템 온 칩(system on a chip, SOC)의 일 실시예의 블록도이다.
도 3은 인터럽트 제어기의 일 실시예에서 구현될 수 있는 상태 기계의 일 실시예의 블록도이다.
도 4는 인터럽트 전달의 소프트 또는 하드 반복을 수행하기 위한 인터럽트 제어기의 일 실시예의 동작을 예시하는 흐름도이다.
도 5는 클러스터 인터럽트 제어기의 일 실시예의 동작을 예시하는 흐름도이다.
도 6은 프로세서의 일 실시예의 블록도이다.
도 7은 재정렬 버퍼의 일 실시예의 블록도이다.
도 8은 도 6에 도시된 인터럽트 확인응답 제어 회로의 일 실시예의 동작을 예시하는 흐름도이다.
도 9는 도 1에 도시된 시스템의 일 실시예를 구현할 수 있는 복수의 SOC들의 블록도이다.
도 10은 도 9에 도시된 1차 인터럽트 제어기의 일 실시예의 동작을 예시하는 흐름도이다.
도 11은 도 9에 도시된 2차 인터럽트 제어기의 일 실시예의 동작을 예시하는 흐름도이다.
도 12는 인터럽트들을 처리하기 위한 방법의 일 실시예를 예시하는 흐름도이다.
도 13은 다양한 상황들에서 사용되는 시스템의 일 실시예의 블록도이다.
도 14는 컴퓨터 액세스가능 저장 매체의 블록도이다.
본 발명에 설명된 실시예들은 다양한 수정들 및 대안적인 형태들을 허용할 수 있지만, 그의 특정 실시예들이 도면들에 예로서 도시되고, 본 명세서에서 상세히 설명될 것이다. 그러나, 그에 대한 도면들 및 상세한 설명은 실시예들을 개시된 특정 형태로 제한하는 것으로 의도되는 것이 아니라, 그와는 반대로, 의도는 첨부된 청구범위의 사상 및 범주 내에 속한 모든 수정들, 등가물들, 및 대안들을 커버하기 위한 것임을 이해하여야 한다. 본 명세서에서 사용되는 표제들은 오직 구성 목적들을 위한 것이며 설명의 범위를 제한하기 위해 사용되는 것으로 의도되지 않는다.
이제 도 1을 참조하면, 복수의 클러스터 인터럽트 제어기들(24A-24n)에 커플링된 인터럽트 제어기(20)를 포함하는 시스템(10)의 일부의 일 실시예의 블록도가 도시된다. 복수의 클러스터 인터럽트 제어기들(24A-24n) 각각은 개개의 복수의 프로세서들(30)(예를 들어, 프로세서 클러스터)에 커플링된다. 인터럽트 제어기(20)는 복수의 인터럽트 소스들(32)에 커플링된다.
적어도 하나의 인터럽트가 인터럽트 제어기(20)에 의해 수신되었을 때, 인터럽트 제어기(20)는 (예를 들어, 인터럽트 서비스 루틴에 의한 추가 서비스를 위해 인터럽트를 기록하도록 소프트웨어를 실행시킴으로써 인터럽트를 서비스하기 위해 및/또는 인터럽트 서비스 루틴을 통해 인터럽트에 의해 요청된 프로세싱을 제공하기 위해 프로세서(30)에) 인터럽트를 전달하려고 시도하도록 구성될 수 있다. 시스템(10)에서, 인터럽트 제어기(20)는 클러스터 인터럽트 제어기들(24A-24n)을 통해 인터럽트들을 전달하려고 시도할 수 있다. 각각의 클러스터 제어기(24A-24n)는 프로세서 클러스터와 연관되고, 클러스터를 형성하는 개개의 복수의 프로세서들 내의 프로세서들(30)에 인터럽트를 전달하려고 시도할 수 있다.
더 구체적으로, 인터럽트 제어기(20)는 클러스터 인터럽트 제어기들(24A-24n)을 통해 복수의 반복들로 인터럽트를 전달하도록 시도하도록 구성될 수 있다. 인터럽트 제어기(20)와 각각의 인터럽트 제어기(24A-24n) 사이의 인터페이스는 요청/확인응답(Ack)/부정-확인응답(Nack) 구조를 포함할 수 있다. 예를 들어, 예시된 실시예에서, 요청들은 반복: 소프트, 하드 및 강제에 의해 식별될 수 있다. 초기 반복("소프트" 반복)은 소프트 요청을 어서트함으로써 시그널링될 수 있다. 다음 반복("하드" 반복)은 하드 요청을 어서트함으로써 시그널링될 수 있다. 마지막 반복("강제" 반복)은 강제 요청을 어서트함으로써 시그널링될 수 있다. 주어진 클러스터 인터럽트 제어기(24A-24n)는 Ack 응답(주어진 클러스터 인터럽트 제어기(24A-24n)와 연관된 프로세서 클러스터 내의 프로세서(30)가 인터럽트를 수락하였고 적어도 하나의 인터럽트를 프로세싱할 것임을 나타냄) 또는 Nack 응답(프로세서 클러스터 내의 프로세서들(30)이 인터럽트를 거부했음을 나타냄)으로 소프트 및 하드 반복들에 응답할 수 있다. 강제 반복은 Ack/Nack 응답들을 사용하지 않을 수 있지만, 오히려, 아래에서 더 상세히 논의될 바와 같이, 인터럽트들이 서비스될 때까지 인터럽트들을 계속 요청할 수 있다.
클러스터 인터럽트 제어기들(24A-24n)은 또한 프로세서들(30)에 대해 요청/Ack/Nack 구조를 사용하여, 주어진 프로세서(30)에 인터럽트를 전달하려고 시도할 수 있다. 클러스터 인터럽트 제어기(24A-24n)로부터의 요청에 기초하여, 주어진 프로세서(30)는, 주어진 프로세서(30)가 미리 결정된 시간 기간 내에 현재 명령어 실행을 인터럽트할 수 있는지 여부를 결정하도록 구성될 수 있다. 주어진 프로세서(30)가 시간 기간 내에 인터럽트를 단행할 수 있는 경우, 주어진 프로세서(30)는 Ack 응답을 어서트하도록 구성될 수 있다. 주어진 프로세서(30)가 인터럽트를 단행할 수 없는 경우, 주어진 프로세서(30)는 Nack 응답을 어서트하도록 구성될 수 있다. 클러스터 인터럽트 제어기(24A-24n)는, 적어도 하나의 프로세서가 클러스터 인터럽트 제어기(24A-24n)에 Ack 응답을 어서트하는 경우 인터럽트 제어기(20)에 Ack 응답을 어서트하도록 구성될 수 있고, 프로세서들(30)이 주어진 반복에서 Nack 응답을 어서트하는 경우 Nack 응답을 어서트하도록 구성될 수 있다.
요청/Ack/Nack 구조를 사용하는 것은, 일 실시예에서 인터럽트가 요청의 수신기(예를 들어, 인터페이스에 따라, 클러스터 인터럽트 제어기(24A-24n) 또는 프로세서(30))에 의해 수락되고 있는지 여부의 신속한 표시를 제공할 수 있다. 예를 들어, 일 실시예에서, 표시는 타임아웃보다 신속할 수 있다. 추가적으로, 클러스터 인터럽트 제어기들(24A-24n) 및 인터럽트 제어기(20)의 계층화된 구조는 일 실시예에서, 시스템(10)에서 더 많은 수의 프로세서들(예를 들어, 다수의 프로세서 클러스터들)에 대해 더 스케일링가능할 수 있다.
클러스터 인터럽트 제어기들(24A-24n)에 대한 반복은 클러스터 인터럽트 제어기들(24A-24n)의 적어도 서브세트를 통해 최대 모든 클러스터 인터럽트 제어기들(24A-24n)까지 인터럽트를 전달하려는 시도를 포함할 수 있다. 반복은 임의의 원하는 방식으로 진행될 수 있다. 예를 들어, 일 실시예에서, 인터럽트 제어기(20)는 클러스터 인터럽트 제어기들(24A-24n) 중 하나로부터의 Ack 응답(그리고 일 실시예에서 추가적인 계류중인 인터럽트들의 결여)에 의해 또는 모든 클러스터 인터럽트 제어기들(24A-24n)로부터의 Nack 응답에 의해 종료되는 개개의 클러스터 인터럽트 제어기들(24A-24n)에 인터럽트 요청들을 연속으로 어서트하도록 구성될 수 있다. 즉, 인터럽트 제어기는 클러스터 인터럽트 제어기들(24A-24n) 중 하나를 선택하고, (예를 들어, 어느 반복이 수행되고 있는지에 따라 소프트 또는 하드 요청을 어서트함으로써) 선택된 클러스터 인터럽트 제어기(24A-24n)에 인터럽트 요청을 어서트할 수 있다. 선택된 클러스터 인터럽트 제어기(24A-24n)는 Ack 응답으로 응답할 수 있으며, 이는 반복을 종료할 수 있다. 한편, 선택된 클러스터 인터럽트 제어기(24A-24n)가 Nack 응답을 어서트하는 경우, 인터럽트 제어기는 다른 클러스터 인터럽트 제어기(24A-24n)를 선택하도록 구성될 수 있고, 선택된 클러스터 인터럽트 제어기(24A-24n)에 대한 소프트 또는 하드 요청을 어서트할 수 있다. 선택 및 어서션은 Ack 응답이 수신되거나 또는 클러스터 인터럽트 제어기들(24A-24n) 각각이 선택되고 Nack 응답을 어서트할 때까지 계속될 수 있다. 다른 실시예들은 다른 방식들로 클러스터 인터럽트 제어기들(24A-24n)을 통해 반복을 수행할 수 있다. 예를 들어, 인터럽트 제어기(20)는, 2개 이상의 클러스터 인터럽트 제어기들(24A-24n)의 서브세트에 인터럽트 요청을 동시에 어서트하도록 구성될 수 있어서, 서브세트 내의 각각의 클러스터 인터럽트 제어기(24A-24n)가 인터럽트 요청에 대한 Nack 응답을 제공하는 경우 다른 서브세트들로 계속된다. 이러한 구현은, 서브세트 내의 하나 초과의 클러스터 인터럽트 제어기(24A-24n)가 Ack 응답을 제공하는 경우, 스퓨리어스 인터럽트들을 야기할 수 있고, 따라서 인터럽트에 응답하여 실행되는 코드는 스퓨리어스 인터럽트의 발생을 처리하도록 설계될 수 있다.
초기 반복은 위에서 언급된 바와 같이 소프트 반복일 수 있다. 소프트 반복에서, 주어진 클러스터 인터럽트 제어기(24A-24n)는 주어진 클러스터 인터럽트 제어기(24A-24n)와 연관된 복수의 프로세서들(30)의 서브세트에 인터럽트를 전달하려고 시도할 수 있다. 서브세트는 파워 온된 프로세서들(30)일 수 있으며, 여기서 주어진 클러스터 인터럽트 제어기(24A-24n)는 파워 오프된(또는 슬리핑) 프로세서들(30)에 인터럽트를 전달하려고 시도하지 않을 수 있다. 즉, 파워 오프된 프로세서들은, 클러스터 인터럽트 제어기(24A-24n)가 인터럽트를 전달하려고 시도하는 서브세트에 포함되지 않는다. 따라서, 파워 오프된 프로세서들(30)은 소프트 반복에서 파워 오프된 상태로 유지될 수 있다.
소프트 반복 동안 각각의 클러스터 인터럽트 제어기(24A-24n)로부터의 Nack 응답에 기초하여, 인터럽트 제어기(20)는 하드 반복을 수행할 수 있다. 하드 반복에서, 주어진 프로세서 클러스터 내의 파워 오프된 프로세서들(30)은 개개의 클러스터 인터럽트 제어기(24A-24n)에 의해 파워 온될 수 있고, 개개의 인터럽트 제어기(24A-24n)는 프로세서 클러스터 내의 각각의 프로세서(30)에 인터럽트를 전달하려고 시도할 수 있다. 더 구체적으로, 일 실시예에서, 하드 반복을 수행하기 위해 프로세서(30)가 파워 온된 경우, 그 프로세서(30)는 인터럽트들에 대해 신속하게 이용가능할 수 있고, 빈번하게 Ack 응답들을 초래할 수 있다.
하나 이상의 인터럽트들이 여전히 계류중인 상태로 하드 반복이 종료되거나, 또는 소프트 및 하드 반복들을 완료하기 전에 타임아웃이 발생하는 경우, 인터럽트 제어기는 강제 신호를 어서트함으로써 강제 반복을 개시할 수 있다. 일 실시예에서, 강제 반복은 클러스터 인터럽트 제어기들(24A-24n)과 병렬로 수행될 수 있고, Nack 응답들은 허용되지 않을 수 있다. 일 실시예에서, 강제 반복은 어떠한 인터럽트들도 계류중인 상태로 유지되지 않을 때까지 계속 진행중일 수 있다.
주어진 클러스터 인터럽트 제어기(24A-24n)는 임의의 원하는 방식으로 인터럽트들을 전달하려고 시도할 수 있다. 예를 들어, 주어진 클러스터 인터럽트 제어기(24A-24n)는 프로세서 클러스터 내의 개개의 프로세서들(30)에 인터럽트 요청들을 연속으로 어서트할 수 있으며, 이는 개개의 프로세서들(30) 중 하나로부터의 Ack 응답에 의해 또는 주어진 클러스터 인터럽트 제어기(24A-24n)가 인터럽트를 전달하려고 시도할 개개의 프로세서들(30) 각각으로부터의 Nack 응답에 의해 종료된다. 즉, 주어진 클러스터 인터럽트 제어기(24A-4n)는 개개의 프로세서들(30) 중 하나를 선택하고, (예를 들어, 선택된 프로세서(30)에 대한 요청을 어서트함으로써) 선택된 프로세서(30)에 인터럽트 요청을 어서트할 수 있다. 선택된 프로세서(30)는 Ack 응답으로 응답할 수 있으며, 이는 시도를 종료할 수 있다. 한편, 선택된 프로세서(30)가 Nack 응답을 어서트하는 경우, 주어진 클러스터 인터럽트 제어기(24A-24n)는 다른 프로세서(30)를 선택하도록 구성될 수 있고, 선택된 프로세서(30)에 인터럽트 요청을 어서트할 수 있다. 선택 및 어서션은 Ack 응답이 수신되거나 또는 프로세서들(30) 각각이 선택되어 Nack 응답으로 어서트될 때까지 계속될 수 있다(소프트 반복에서 파워 오프된 프로세서들을 배제함). 다른 실시예들은 위에서 언급된 스퓨리어스 인터럽트들에 대한 가능성을 갖고서 동시에 다수의 프로세서들(30)에 또는 병렬로 프로세서들(30)에 인터럽트 요청을 어서트할 수 있다. 주어진 클러스터 인터럽트 제어기(24A-24n)는 프로세서들(30) 중 하나로부터 Ack 응답을 수신하는 것에 기초하여 Ack 응답으로 인터럽트 제어기(20)에 응답할 수 있거나, 또는 프로세서들(30) 각각이 Nack 응답으로 응답하는 경우, Nack 응답으로 인터럽트 제어기(20)에 응답할 수 있다.
일 실시예에서, 인터럽트 제어기(20)가 클러스터 인터럽트 제어기들(24A-24n)에 인터럽트 요청들을 어서트하는 순서는 프로그래밍가능할 수 있다. 보다 구체적으로, 일 실시예에서, 순서는 인터럽트의 소스에 기초하여 변할 수 있다(예를 들어, 하나의 인터럽트 소스(32)로부터의 인터럽트들은 하나의 순서를 초래할 수 있고, 다른 인터럽트 소스(32)로부터의 인터럽트들은 상이한 순서를 초래할 수 있음). 예를 들어, 일 실시예에서, 하나의 클러스터 내의 복수의 프로세서들(30)은 다른 클러스터 내의 복수의 프로세서들(30)과 상이할 수 있다. 하나의 프로세서 클러스터는 성능에 대해 최적화되지만 더 높은 전력일 수 있는 프로세서들을 가질 수 있는 반면, 다른 프로세서 클러스터는 전력 효율에 대해 최적화된 프로세서들을 가질 수 있다. 비교적 더 적은 프로세싱을 요구하는 소스들로부터의 인터럽트들은 전력 효율적인 프로세서들을 갖는 클러스터들에 유리할 수 있는 반면, 상당한 프로세싱을 필요로 하는 소스들로부터의 인터럽트들은 더 높은 성능 프로세서들을 갖는 클러스터들에 유리할 수 있다.
인터럽트 소스들(32)은 프로세서(30)로 하여금 인터럽트 서비스 루틴을 실행하게 하기 위해 인터럽트를 어서트하도록 구성된 임의의 하드웨어 회로부일 수 있다. 예를 들어, 일 실시예에서, 다양한 주변 컴포넌트들(주변기기들)은 인터럽트 소스들일 수 있다. 다양한 주변기기들의 예들이 도 2와 관련하여 아래에서 설명된다. 인터럽트는, 프로세서(30)가 인터럽트를 수신할 때 프로세서(30)에 의해 실행되는 코드와 비동기식이다. 일반적으로, 프로세서(30)는, 현재 코드의 실행을 중지하고, 인터럽트를 서비스한 후에 실행의 재개를 허용하도록 프로세서 콘텍스트를 저장하고, 인터럽트 코드의 실행을 시작하기 위해 미리 결정된 어드레스로 분기함으로써 인터럽트를 취하도록 구성될 수 있다. 미리 결정된 어드레스의 코드는 인터럽트 제어기로부터 상태를 판독하여, 어느 인터럽트 소스(32)가 인터럽트를 어서트했는지 및 인터럽트에 기초하여 실행될 대응하는 인터럽트 서비스 루틴을 결정할 수 있다. 코드는 실행을 위해 인터럽트 서비스 루틴(이는 운영 체제에 의해 스케줄링될 수 있음)을 큐잉할 수 있고, 인터럽트 서비스 루틴에 의해 예상되는 데이터를 제공할 수 있다. 이어서, 코드는 이전에 실행중인 코드로 실행을 복귀할 수 있다(예를 들어, 프로세서 콘텍스트는 리로딩될 수 있고, 실행은 실행이 중단된 명령에서 재개될 수 있다).
인터럽트들은 임의의 원하는 방식으로 인터럽트 소스들(32)로부터 인터럽트 제어기(20)로 송신될 수 있다. 예를 들어, 인터럽트 소스들과 인터럽트 제어기(20) 사이에 전용 인터럽트 와이어들이 제공될 수 있다. 주어진 인터럽트 소스(32)는 인터럽트 제어기(20)에 인터럽트를 송신하기 위해 자신의 전용 와이어 상에서 신호를 어서트할 수 있다. 대안적으로, 시스템(10)에서의 다른 통신들을 위해 사용되는 상호연결부를 통해 메시지가 송신되는 메시지-시그널링된 인터럽트들이 사용될 수 있다. 메시지는, 예를 들어, 특정된 어드레스에 대한 기입의 형태일 수 있다. 기입 데이터는 인터럽트를 식별하는 메시지일 수 있다. 일부 인터럽트 소스들(32)로부터의 전용 와이어들과 다른 인터럽트 소스들(32)로부터의 메시지-시그널링된 인터럽트들의 조합이 사용될 수 있다.
인터럽트 제어기(20)는 인터럽트들을 수신하고, 이들을 계류중인 인터럽트들로서 인터럽트 제어기(20)에 기록할 수 있다. 다양한 인터럽트 소스들(32)로부터의 인터럽트들은 운영 체제 또는 다른 제어 코드에 의해 배열된 다양한 프로그래밍가능 우선순위들에 따라 인터럽트 제어기(20)에 의해 우선순위화될 수 있다.
이제 도 2를 참조하면, 시스템 온 칩(SOC)(10)으로서 구현된 시스템(10)의 일 실시예가 메모리(12)에 커플링된 것으로 도시된다. 명칭에서 암시되는 바와 같이, SOC(10)의 컴포넌트들은 집적 회로 "칩"으로서 단일의 반도체 기판 상에 집적될 수 있다. 일부 실시예들에서, 컴포넌트들은 시스템 내의 2개 이상의 별개의 칩들 상에 구현될 수 있다. 그러나, SOC(10)는 본 명세서에서 일 예로서 사용될 것이다. 예시된 실시예에서, SOC(10)의 컴포넌트들은 복수의 프로세서 클러스터들(14A-14n), 인터럽트 제어기(20), 하나 이상의 주변 컴포넌트들(18)(더 간략하게, "주변기기들"), 메모리 제어기(22), 및 통신 패브릭(27)을 포함한다. 컴포넌트들(14A-14n, 18, 20 및 22)은 모두 통신 패브릭(27)에 커플링될 수 있다. 메모리 제어기(22)는 사용 중에 메모리(12)에 커플링될 수 있다. 일부 실시예들에서, 대응하는 메모리에 커플링된 하나 초과의 메모리 제어기가 있을 수 있다. 메모리 어드레스 공간은 임의의 원하는 방식으로 메모리 제어기들에 걸쳐 맵핑될 수 있다. 예시된 실시예에서, 프로세서 클러스터들(14A-14n)은 도 2에 도시된 바와 같이 개개의 복수의 프로세서들(P)(30) 및 개개의 클러스터 인터럽트 제어기(IC)들(24A-24n)을 포함할 수 있다. 프로세서들(30)은 SOC(10)의 중앙 프로세싱 유닛들(CPU(들))을 형성할 수 있다. 일 실시예에서, 하나 이상의 프로세서 클러스터들(14A-14n)은 CPU들로서 사용되지 않을 수 있다.
일 실시예에서, 주변기기들(18)은 인터럽트 소스들(32)의 예들인 주변기기들을 포함할 수 있다. 따라서, 하나 이상의 주변기기들(18)은 인터럽트들을 인터럽트 제어기(20)에 송신하기 위해 인터럽트 제어기(20)에 대한 전용 와이어들을 가질 수 있다. 다른 주변기기들(18)은 통신 패브릭(27)을 통해 송신되는 메시지-시그널링된 인터럽트들을 사용할 수 있다. 일부 실시예들에서, 하나 이상의 오프-SOC 디바이스들(도 2에 도시되지 않음)이 또한 인터럽트 소스들일 수 있다. 인터럽트 제어기(20)로부터 오프-칩으로의 점선은 오프-SOC 인터럽트 소스들에 대한 잠재성을 예시한다.
도 1에 도시된 클러스터 IC들(24A-24n) 사이의 하드/소프트/강제 Ack/Nack 인터페이스들은 클러스터 IC들(24A-24n)과 인터럽트 제어기(20) 사이의 화살표들을 통해 도 2에 예시된다. 유사하게, 도 1의 프로세서들(30)과 클러스터 IC들(24A-24n) 사이의 Req Ack/Nack 인터페이스들은 개개의 클러스터들(14A-14n) 내의 클러스터 IC들(24A-24n)과 프로세서들(30) 사이의 화살표들에 의해 예시된다.
전술된 바와 같이, 프로세서 클러스터들(14A-14n)은 SOC(10)의 CPU로서 기능할 수 있는 하나 이상의 프로세서들(30)을 포함할 수 있다. 시스템의 CPU는 시스템의 메인 제어 소프트웨어, 예컨대 운영 체제를 실행하는 프로세서(들)를 포함한다. 일반적으로, 사용 동안 CPU에 의해 실행되는 소프트웨어는 시스템의 다른 컴포넌트들을 제어하여 시스템의 원하는 기능을 실현할 수 있다. 프로세서들은 또한 다른 소프트웨어, 예를 들어, 애플리케이션 프로그램들을 실행할 수 있다. 애플리케이션 프로그램들은 사용자 기능을 제공할 수 있고, 저-레벨 디바이스 제어, 스케줄링, 메모리 관리 등을 위해 운영 시스템에 의존할 수 있다. 따라서, 프로세서들은 또한 애플리케이션 프로세서들로 지칭될 수 있다.
일반적으로, 프로세서는 프로세서에 의해 구현된 명령어 세트 아키텍처에 정의된 명령어들을 실행하도록 구성된 임의의 회로부 및/또는 마이크로코드를 포함할 수 있다. 프로세서들은 시스템-온-칩(SOC(10)) 또는 다른 레벨들의 통합부로서 다른 컴포넌트들과 함께 집적 회로 상에 구현된 프로세서 코어들을 망라할 수 있다. 프로세서들은 별개의 마이크로프로세서들, 멀티칩 모듈 구현부들 내에 집적화된 프로세서 코어들 및/또는 마이크로프로세서들, 다수의 집적 회로들로서 구현된 프로세서들 등을 추가로 망라할 수 있다.
메모리 제어기(22)는 일반적으로, SOC(10)의 다른 컴포넌트들로부터 메모리 동작들을 수신하고, 메모리(12)에 액세스하여 메모리 동작들을 완료하기 위한 회로부를 포함할 수 있다. 메모리 제어기(22)는 임의의 유형의 메모리(12)에 액세스하도록 구성될 수 있다. 예를 들어, 메모리(12)는 SRAM(static random access memory), DRAM(dynamic RAM), 예컨대 더블 데이터 레이트(DDR, DDR2, DDR3, DDR4 등) DRAM을 포함하는 SDRAM(synchronous DRAM)일 수 있다. 저전력/모바일 버전들의 DDR DRAM(예컨대, LPDDR, mDDR 등)이 지원될 수 있다. 메모리 제어기(22)는, 동작들을 순서화하기 위한(그리고 잠재적으로 재정렬하기 위한) 그리고 동작들을 메모리(12)에 제시하기 위한, 메모리 동작들에 대한 큐(queue)들을 포함할 수 있다. 메모리 제어기(22)는 메모리로의 기입을 대기하는 기입 데이터 및 메모리 동작의 소스로의 복귀를 대기하는 판독 데이터를 저장하기 위한 데이터 버퍼들을 더 포함할 수 있다. 일부 실시예들에서, 메모리 제어기(22)는 최근에 액세스된 메모리 데이터를 저장하는 메모리 캐시를 포함할 수 있다. SOC 구현예들에서, 예를 들어, 메모리 캐시는, 곧 다시 액세스될 것으로 예상되는 경우에 메모리(12)로부터의 데이터의 재-액세스를 피함으로써, SOC에서의 전력 소모를 감소시킬 수 있다. 일부 경우들에서, 메모리 캐시는 또한, 소정의 컴포넌트들만을 보조하는 전용 캐시(private cache)들 그 예로서 프로세서들 내의 L2 캐시 또는 캐시들과 상반되는, 시스템 캐시로서 지칭될 수 있다. 추가적으로, 일부 실시예들에서, 시스템 캐시는 메모리 제어기(22) 내에 위치될 필요가 없다.
주변기기들(18)은 SOC(10)에 포함된 추가 하드웨어 기능성의 임의의 세트일 수 있다. 예를 들어, 주변기기들(18)은 비디오 주변기기들, 예를 들어, 카메라 또는 다른 이미지 센서로부터의 이미지 캡처 데이터를 프로세싱하도록 구성된 이미지 신호 프로세서, GPU들, 비디오 인코더/디코더들, 스케일러(scaler)들, 로테이터(rotator)들, 블렌더(blender)들, 디스플레이 제어기 등을 포함할 수 있다. 주변기기들은 오디오 주변기기들, 예를 들어, 마이크로폰들, 스피커들, 마이크로폰들 및 스피커들에 대한 인터페이스들, 오디오 프로세서들, 디지털 신호 프로세서들, 믹서들 등을 포함할 수 있다. 주변기기들은, 인터페이스들, 예를 들어, 범용 직렬 버스(USB), PCI 익스프레스(PCIe)를 포함한 주변기기 컴포넌트 상호접속부(PCI), 직렬 및 병렬 포트들 등을 포함한 SOC(10) 외부의 다양한 인터페이스들에 대한 인터페이스 제어기들을 포함할 수 있다. 외부 디바이스에 대한 상호연결부는 SOC(10) 외부로 연장되는 도 2의 파선 화살표로 예시된다. 주변기기들은 네트워킹 주변기기들, 예컨대 MAC(media access controller)들을 포함할 수 있다. 하드웨어의 임의의 세트가 포함될 수 있다.
통신 패브릭(27)은 SOC(10)의 컴포넌트들 사이에서 통신하기 위한 임의의 통신 상호연결부 및 프로토콜일 수 있다. 통신 패브릭(27)은 공유 버스 구성들, 크로스 바(cross bar) 구성들, 및 브리지들을 이용한 계층적 버스들을 포함하는 버스-기반일 수 있다. 통신 패브릭(27)은, 또한, 패킷 기반일 수 있고, 브리지들을 갖는 계층구조, 크로스 바, 포인트-투-포인트(point-to-point), 또는 다른 상호연결부들일 수 있다.
SOC(10)의 컴포넌트들의 개수(및 각각의 프로세서 클러스터(14A-14n) 내의 프로세서들(30)과 같은, 도 2에 도시된 컴포넌트들에 대한 서브컴포넌트들의 개수)는 실시예마다 다를 수 있다는 것에 유의한다. 추가적으로, 하나의 프로세서 클러스터(14A-14n) 내의 프로세서들(30)의 개수는 다른 프로세서 클러스터(14A-14n) 내의 프로세서들(30)의 개수와 상이할 수 있다. 도 2에 도시된 개수보다 많거나 적은 각각의 컴포넌트/서브컴포넌트가 있을 수 있다.
도 3은 일 실시예에서 인터럽트 제어기(20)에 의해 구현될 수 있는 상태 기계의 일 실시예를 예시하는 블록도이다. 예시된 실시예에서, 상태들은 유휴 상태(40), 소프트 상태(42), 하드 상태(44), 강제 상태(46), 및 대기 드레인 상태(48)를 포함한다.
유휴 상태(40)에서, 어떠한 인터럽트들도 계류중이 아닐 수 있다. 일반적으로, 상태 기계는 도 3에 도시된 바와 같이 다른 상태들 중 임의의 상태로부터 계류중인 인터럽트들이 없을 때마다 유휴 상태(40)로 복귀할 수 있다. 적어도 하나의 인터럽트가 수신되었을 때, 인터럽트 제어기(20)는 소프트 상태(42)로 전환할 수 있다. 인터럽트 제어기(20)는 또한, 상태 기계가 강제 상태(46)로 전환되게 할 수 있는 타임아웃 간격을 카운팅하기 시작하기 위해 타임아웃 카운터를 초기화할 수 있다. 타임아웃 카운터는 0으로 초기화될 수 있고, 증분되어 타임아웃을 검출하기 위해 타임아웃 값과 비교될 수 있다. 대안적으로, 타임아웃 카운터는 타임아웃 값으로 초기화될 수 있고, 0에 도달할 때까지 감소될 수 있다. 증분/감소는 인터럽트 제어기(20)에 대한 클록의 각각의 클록 사이클마다 수행될 수 있거나, 상이한 클록(예를 들어, 압전 발진기 등으로부터의 고정 주파수 클록)에 따라 증분/감소될 수 있다.
소프트 상태(42)에서, 인터럽트 제어기(20)는 인터럽트를 전달하려고 시도하는 소프트 반복을 개시하도록 구성될 수 있다. 클러스터 인터럽트 제어기들(24A-24n) 중 하나가 소프트 반복 동안 Ack 응답을 송신하고 계류중인 적어도 하나의 인터럽트가 존재하는 경우, 인터럽트 제어기(20)는 대기 드레인 상태(48)로 전환할 수 있다. 대기 드레인 상태(48)는, 주어진 프로세서가 인터럽트를 취할 수 있지만, 실제로 인터럽트 제어기로부터 다수의 인터럽트들을 캡처하여, 그들의 개개의 인터럽트 서비스 루틴들을 위해 그들을 큐잉 업(queuing up)할 수 있기 때문에 제공될 수 있다. 다양한 실시예들에서, 프로세서는 인터럽트 제어기(20)로부터 모든 인터럽트들이 판독될 때까지 인터럽트들을 계속 드레인할 수 있거나, 또는 특정 최대 수의 인터럽트들까지 판독하고 프로세싱으로 복귀할 수 있거나, 또는 타이머가 만료될 때까지 인터럽트들을 판독할 수 있다. 전술된 타이머가 타임 아웃되고 여전히 계류중인 인터럽트들이 존재하는 경우, 인터럽트 제어기(20)는 강제 상태(46)로 전환하고 인터럽트들을 전달하기 위한 강제 반복을 개시하도록 구성될 수 있다. 프로세서가 인터럽트들을 드레인하는 것을 중단하고 적어도 하나의 인터럽트가 계류중인 경우 또는 새로운 인터럽트들이 계류중인 경우, 인터럽트 제어기(20)는 소프트 상태(42)로 복귀하여 소프트 반복을 계속하도록 구성될 수 있다.
각각의 클러스터 인터럽트 제어기(24A-24n)로부터의 Nack 응답들로 소프트 반복이 완료되면(그리고 적어도 하나의 인터럽트가 계류중인 채로 유지되면), 인터럽트 제어기(20)는 하드 상태(44)로 전환하도록 구성될 수 있고, 하드 반복을 개시할 수 있다. 클러스터 인터럽트 제어기(24A-24n)가 하드 반복 동안 Ack 응답을 제공하고 적어도 하나의 계류중인 인터럽트가 존재하는 경우, 인터럽트 제어기(20)는 위의 논의와 유사하게 대기 드레인 상태(48)로 전환할 수 있다. 각각의 클러스터 인터럽트 제어기(24A-24n)로부터의 Nack 응답들로 하드 반복이 완료되고 적어도 하나의 계류중인 인터럽트가 존재하는 경우, 인터럽트 제어기(20)는 강제 상태(46)로 전환하도록 구성될 수 있고, 강제 반복을 개시할 수 있다. 인터럽트 제어기(20)는 계류중인 인터럽트들이 더 이상 존재하지 않을 때까지 강제 상태(46)로 유지될 수 있다.
도 4는 소프트 또는 하드 반복을 수행할 때의 인터럽트 제어기(20)의 일 실시예의 동작을 예시하는 흐름도이다(예를 들어, 도 3의 상태들(42 또는 44)에 있을 때). 블록들이 이해의 용이함을 위해 특정 순서로 도시되었지만, 다른 순서들도 사용될 수 있다. 블록들은 인터럽트 제어기(20) 내의 조합 로직 회로부에서 병렬로 수행될 수 있다. 블록들, 블록들의 조합들, 및/또는 흐름도 전체는 다수의 클록 사이클들에 걸쳐 파이프라인화될 수 있다. 인터럽트 제어기(20)는 도 4에 예시된 동작을 구현하도록 구성될 수 있다.
인터럽트 제어기는 클러스터 인터럽트 제어기(24A-24n)를 선택하도록 구성될 수 있다(블록(50)). 복수의 인터럽트 제어기들(24A-24n)로부터 클러스터 인터럽트 제어기(24A-24n)를 선택하기 위한 임의의 메커니즘이 사용될 수 있다. 예를 들어, 인터럽트 제어기들(24A-24n)의 클러스터의 프로그래밍가능한 순서는 인터럽트 제어기들(24A-24n)의 어느 클러스터가 선택되는지를 나타낼 수 있다. 일 실시예에서, 순서는 주어진 인터럽트의 인터럽트 소스에 기초할 수 있다(예를 들어, 다수의 순서들이 이용가능할 수 있고, 특정 순서는 인터럽트 소스에 기초하여 선택될 수 있음). 이러한 구현은, 상이한 유형의 프로세서 클러스터들로 이동하기 전에 원하는 유형의 프로세서 클러스터들에 인터럽트를 전달하려고 초기에 시도함으로써, 상이한 인터럽트 소스들이 주어진 유형(예를 들어, 성능-최적화 또는 효율-최적화)의 프로세서들에 유리하도록 허용할 수 있다. 다른 실시예에서, 가장 최근의 클러스터 인터럽트 제어기(24A-24n)(예를 들어, 인터럽트에 대한 Ack 응답을 가장 덜 최근에 생성된 클러스터 인터럽트 제어기(24A-24n))를 선택하여 상이한 프로세서 클러스터들에 걸쳐 인터럽트들을 확산시키기 위해 가장 덜 최근에 전달된 알고리즘이 사용될 수 있다. 다른 실시예에서, 클러스터 인터럽트 제어기(예를 들어, 인터럽트에 대한 Ack 응답을 가장 최근에 생성한 클러스터 인터럽트 제어기(24A-24n))를 선택하여 인터럽트 코드 또는 상태가 프로세서 클러스터에 여전히 캐싱되는 가능성을 이용하기 위해 가장 최근에 전달된 알고리즘이 사용될 수 있다. 임의의 메커니즘 또는 메커니즘들의 조합이 사용될 수 있다.
인터럽트 제어기(20)는 선택된 클러스터 인터럽트 제어기(24A-24n)에 인터럽트 요청(현재 반복에 따라 하드 또는 소프트)을 송신하도록 구성될 수 있다(블록(52)). 예를 들어, 인터럽트 제어기(20)는 선택된 클러스터 인터럽트 제어기(24A-24n)에 하드 또는 소프트 인터럽트 요청 신호를 어서트할 수 있다. 선택된 클러스터 인터럽트 제어기(24A-24n)가 인터럽트 요청에 대한 Ack 응답을 제공하는 경우(판정 블록(54), "예" 레그), 인터럽트 제어기(20)는, 선택된 클러스터 인터럽트 제어기(24A-24n)와 연관된 프로세서 클러스터(14A-14n) 내의 프로세서(30)가 하나 이상의 계류중인 인터럽트들을 서비스하도록 허용하기 위해 대기 드레인 상태(48)로 전환하도록 구성될 수 있다(블록(56)). 선택된 클러스터 인터럽트 제어기가 Nack 응답을 제공하고(판정 블록(58), "예" 레그), 현재 반복에서 선택되지 않은 적어도 하나의 클러스터 인터럽트 제어기(24A-24n)가 존재하는 경우(판정 블록(60), "예" 레그), 인터럽트 제어기(20)는 구현된 선택 메커니즘에 따라 다음 클러스터 인터럽트 제어기(24A-24n)를 선택하고(블록(62)), 선택된 클러스터 인터럽트 제어기(24A-24n)에 인터럽트 요청을 어서트하기 위해 블록(52)으로 복귀하도록 구성될 수 있다. 따라서, 인터럽트 제어기(20)는, 이 실시예에서 복수의 클러스터 인터럽트 제어기들(24A-24n)를 통한 반복 동안 복수의 클러스터 인터럽트 제어기들(24A-24n)에 인터럽트를 전달하도록 연속으로 시도하도록 구성될 수 있다. 선택된 클러스터 인터럽트 제어기(24A-24n)가 Nack 응답을 제공하고(판정 블록(58), "예" 레그), 선택될 클러스터 인터럽트 제어기들(24A-24n)이 더 이상 남아 있지 않은 경우(예를 들어, 모든 클러스터 인터럽트 제어기들(24A-24n)이 선택된 경우), 클러스터 인터럽트 제어기(20)는 상태 기계에서 다음 상태로 (예를 들어, 현재 반복이 소프트 반복인 경우 하드 상태(44)로 또는 현재 반복이 하드 반복인 경우 강제 상태(46)로) 전환하도록 구성될 수 있다(블록(64)). 인터럽트 요청에 대한 응답이 아직 수신되지 않은 경우(판정 블록들(54 및 58), "아니오" 레그), 인터럽트 제어기(20)는 응답을 계속 대기하도록 구성될 수 있다.
전술된 바와 같이, 인터럽트 전달 프로세스가 시작될 때 초기화될 수 있는 타임아웃 메커니즘이 존재할 수 있다. 일 실시예에서, 임의의 상태 동안 타임아웃이 발생하는 경우, 인터럽트 제어기(20)는 강제 상태(46)로 이동하도록 구성될 수 있다. 대안적으로, 타이머 만료는 대기 드레인 상태(48)에서만 고려될 수 있다.
도 5는 인터럽트 제어기(20)로부터의 인터럽트 요청에 기초한 클러스터 인터럽트 제어기(24A-24n)의 일 실시예의 동작을 예시하는 흐름도이다. 블록들이 이해의 용이함을 위해 특정 순서로 도시되었지만, 다른 순서들도 사용될 수 있다. 블록들은 클러스터 인터럽트 제어기(24A-24n) 내의 조합 로직 회로부에서 병렬로 수행될 수 있다. 블록들, 블록들의 조합들, 및/또는 흐름도 전체는 다수의 클록 사이클들에 걸쳐 파이프라인화될 수 있다. 클러스터 인터럽트 제어기(24A-24n)는 도 5에 예시된 동작을 구현하도록 구성될 수 있다.
인터럽트 요청이 하드 또는 강제 요청인 경우(판정 블록(70), "예" 레그), 클러스터 인터럽트 제어기(24A-24n)는 임의의 파워 다운된(예를 들어, 슬리핑) 프로세서들(30)을 파워 업하도록 구성될 수 있다(블록(72)). 인터럽트 요청이 강제 인터럽트 요청인 경우(판정 블록(74), "예" 레그), 클러스터 인터럽트 제어기(24A-24n)는 병렬로 모든 프로세서들(30)을 인터럽트하도록 구성될 수 있다(블록(76)). Ack/Nack은 강제 경우에 적용되지 않을 수 있으므로, 클러스터 인터럽트 제어기(24A-24n)는 적어도 하나의 프로세서가 인터럽트를 취할 때까지 인터럽트 요청들을 계속해서 어서트할 수 있다. 대안적으로, 클러스터 인터럽트 제어기(24A-24n)는, 자신이 인터럽트를 취할 것임을 나타내는 Ack 응답을 프로세서로부터 수신하도록 구성될 수 있고, 강제 인터럽트를 종료하고 Ack 응답을 인터럽트 제어기(20)에 송신할 수 있다.
인터럽트 요청이 하드 요청(판정 블록(74), "아니오" 레그)이거나 소프트 요청(판정 블록(70), "아니오" 레그)인 경우, 클러스터 인터럽트 제어기는 파워 온된 프로세서(30)를 선택하도록 구성될 수 있다(판정 블록(78)). 인터럽트 제어기(20)에 의해 클러스터 인터럽트 제어기들(24A-24n)을 선택하기 위해 전술된 메커니즘들과 유사한 임의의 선택 메커니즘(예를 들어, 프로그래밍가능한 순서, 가장 덜 최근에 인터럽트된 것, 가장 최근에 인터럽트된 것 등)이 사용될 수 있다. 일 실시예에서, 순서는 클러스터 내의 프로세서들에 할당된 프로세서 ID들에 기초할 수 있다. 클러스터 인터럽트 제어기(24A-24n)는 선택된 프로세서(30)에 인터럽트 요청을 어서트하여, 프로세서(30)에 요청을 송신하도록 구성될 수 있다(블록(80)). 선택된 프로세서(30)가 Ack 응답을 제공하는 경우(판정 블록(82), "예" 레그), 클러스터 인터럽트 제어기(24A-24n)는 Ack 응답을 인터럽트 제어기(20)에 제공하고(블록(84)), 프로세서 클러스터 내에서 전달하려는 시도를 종료하도록 구성될 수 있다. 선택된 프로세서(30)가 Nack 응답을 제공하고(판정 블록(86), "예" 레그), 아직 선택되지 않은 적어도 하나의 파워 온된 프로세서(30)가 존재하는 경우(판정 블록(88), "예" 레그), 클러스터 인터럽트 제어기(24A-24n)는 (예를 들어, 전술된 선택 메커니즘에 따라) 다음으로 파워 온된 프로세서를 선택하고(블록(90)), 선택된 프로세서(30)에 인터럽트 요청을 어서트하도록 구성될 수 있다(블록(80)). 따라서, 클러스터 인터럽트 제어기(24A-24n)는 프로세서 클러스터 내의 프로세서들(30)에 인터럽트를 전달하도록 연속으로 시도할 수 있다. 선택할 파워 온된 프로세서들이 더 이상 없는 경우(판정 블록(88), "아니오" 레그), 클러스터 인터럽트 제어기(24A-24n)는 인터럽트 제어기(20)에 Nack 응답을 제공하도록 구성될 수 있다(블록(92)). 선택된 프로세서(30)가 아직 응답을 제공하지 않은 경우(판정 블록들(82 및 86), "아니오" 레그), 클러스터 인터럽트 제어기(24A-24n)는 응답을 대기하도록 구성될 수 있다.
일 실시예에서, 하드 반복에서, 프로세서(30)가 파워 오프 상태로부터 파워 온된 경우, 프로세서(30)는 운영 체제 또는 다른 제어 소프트웨어에 의해 태스크를 아직 할당받지 않았으므로 인터럽트에 대해 신속하게 이용가능할 수 있다. 운영 체제는 프로세서를 초기화한 후 가능한 한 빨리, 파워 오프된 상태로부터 파워 온된 프로세서(30)의 인터럽트들을 언마스킹(unmask)하도록 구성될 수 있다. 클러스터 인터럽트 제어기(24A-24n)는 프로세서가 인터럽트에 대한 Ack 응답을 제공할 가능성을 개선하기 위해 선택 순서에서 최근에 파워 온된 프로세서를 먼저 선택할 수 있다.
도 6은 프로세서(30)의 일 실시예의 더 상세한 블록도이다. 예시된 실시예에서, 프로세서(30)는 페치 및 디코딩 유닛(100)(명령 캐시 또는 ICache(102)를 포함함), MDR(map-dispatch-renam) 유닛(106)(프로세서 인터럽트 확인응답(Int Ack) 제어 회로(126) 및 재정렬 버퍼(108)를 포함함), 하나 이상의 예비 스테이션들(110), 하나 이상의 실행 유닛들(112), 레지스터 파일(114), 데이터 캐시(DCache)(104), 로드/저장 유닛(LSU)(118), 로드/저장 유닛에 대한 예비 스테이션(RS)(116) 및 코어 인터페이스 유닛(CIF)(122)을 포함한다. 페치 및 디코딩 유닛(100)은, 예비 스테이션들(110), 예비 스테이션(116), 및 LSU(118)에 커플링되는 MDR 유닛(106)에 커플링된다. 예비 스테이션들(110)은 실행 유닛들(28)에 커플링된다. 레지스터 파일(114)은 실행 유닛들(112) 및 LSU(118)에 커플링된다. LSU(118)는 또한, CIF(122) 및 레지스터 파일(114)에 커플링되는 DCache(104)에 커플링된다. LSU(118)는 저장 큐(120)(STQ(120)) 및 로드 큐(LDQ(124))를 포함한다. CIF(122)는 프로세서 Int Ack 제어 회로(126)에 커플링되어 프로세서(30)에 어서트된 인터럽트 요청 (Int Req)를 전달하고, 프로세서 Int Ack 제어 회로(126)로부터의 Ack/Nack 응답을 인터럽트 요청자(예를 들어, 클러스터 인터럽트 제어기(24A-24n))에 전달한다.
프로세서 Int Ack 제어 회로(126)는, 프로세서(30)가 프로세서(30)에 송신된 인터럽트 요청을 수락할 수 있는지 여부를 결정하도록 구성될 수 있고, 결정에 기초하여 Ack 및 Nack 표시들을 CIF(122)에 제공할 수 있다. 프로세서(30)가 Ack 응답을 제공하는 경우, 프로세서(30)는 특정된 시간 기간 내에 인터럽트를 취하는 것(그리고 인터럽트 및 인터럽트 소스를 식별하기 위한 인터럽트 코드의 실행을 시작하는 것을 시작함)을 담당한다. 즉, 프로세서 Int Ack 제어 회로(126)는, 재정렬 버퍼(108)가 인터럽트가능한 포인트에 명령어 동작들을 리타이어할 것이고 LSU(118)가 특정 시간 기간 내에 인터럽트가능한 포인트에 대한 로드/저장 동작들을 완료할 것이라는 결정에 기초하여 수신된 인터럽트 요청에 대한 확인응답(Ack) 응답을 생성하도록 구성될 수 있다. 재정렬 버퍼(108) 및 LSU(118) 중 적어도 하나가 특정된 시간 기간 내에 인터럽트가능 포인트에 도달하지 않을 것(또는 도달하지 않을 수 있는 것)으로 결정되면, 프로세서 Int Ack 제어 회로(126)는 인터럽트 요청에 대한 비-확인응답(Nack) 응답을 생성하도록 구성될 수 있다. 예를 들어, 특정된 시간 기간은, 일 실시예에서 대략 5 마이크로초일 수 있지만, 다른 실시예들에서, 더 길거나 또는 더 짧을 수 있다.
일 실시예에서, 프로세서 Int Ack 제어 회로(126)는 Ack/Nack의 초기 결정을 하기 위해 재정렬 버퍼(108)의 콘텐츠들을 검사하도록 구성될 수 있다. 즉, MDR 유닛(106) 내의 상태에 기초하여 Nack 응답이 생성될 것이라고 프로세서 Int Ack 제어 회로(126)가 결정할 수 있는 하나 이상의 경우들이 존재할 수 있다. 예를 들어, 재정렬 버퍼(108)는 아직 실행되지 않고 특정 임계치보다 큰 잠재적 실행 레이턴시를 갖는 하나 이상의 명령어 동작들을 포함하고, 프로세서 Int Ack 제어 회로(126)는 Nack 응답이 생성될 것이라고 결정하도록 구성될 수 있다. 일부 명령어 동작들은 데이터 의존적, 메모리 레이턴시 의존적 등일 수 있는 가변 실행 레이턴시를 가질 수 있기 때문에, 실행 레이턴시는 "잠재적"으로 지칭된다. 따라서, 잠재적 실행 레이턴시는, 항상 발생하지는 않더라도, 발생할 수 있는 가장 긴 실행 레이턴시일 수 있다. 다른 경우들에서, 잠재적 실행 레이턴시는 특정 확률 등을 초과하여 발생하는 가장 긴 실행 레이턴시일 수 있다. 이러한 명령어들의 예들은 특정 암호화 가속 명령어들, 특정 유형들의 부동 소수점 또는 벡터 명령어들 등을 포함할 수 있다. 명령어들이 인터럽트가능하지 않은 경우, 명령어들은 잠재적으로 긴 레이턴시로 고려될 수 있다. 즉, 인터럽트가능하지 않은 명령어들은 일단 실행을 시작하면 실행을 완료하도록 요구된다.
Ack/Nack 응답을 생성할 때 고려될 수 있는 다른 조건은 프로세서(30)에서의 인터럽트 마스킹의 상태이다. 인터럽트들이 마스킹될 때, 프로세서(30)는 인터럽트들을 취하는 것이 방지된다. Nack 응답은, (일 실시예에서 MDR 유닛(106)에서 유지되는 상태일 수 있는) 인터럽트들이 프로세서에서 마스킹되는 것을 프로세서 Int Ack 제어 회로(126)가 검출하는 경우 생성될 수 있다. 더 구체적으로, 일 실시예에서, 인터럽트 마스크는 가장 최근에 리타이어된 명령어들에 대응하는 아키텍처화된 현재 상태를 가질 수 있고, 인터럽트 마스크에 대한 하나 이상의 추론적 업데이트들이 또한 큐잉될 수 있다. 일 실시예에서, Nack 응답은, 아키텍처화된 현재 상태가 인터럽트들이 마스킹되는 것인 경우 생성될 수 있다. 다른 실시예에서, Nack 응답은, 아키텍처화된 현재 상태가 인터럽트들이 마스킹된 것인 경우, 또는 추론적 상태들 중 임의의 것이 인터럽트들이 마스킹된 것으로 나타내는 경우 생성될 수 있다.
프로세서 Int Ack 제어 회로(126)에서 다른 경우들이 또한 Nack 응답 경우들로 고려될 수 있다. 예를 들어, 예외 처리(예를 들어, 브랜치 오예측들 등과 같은 어떠한 마이크로아키텍처 재지향들도 없음)와 관련된 계류중인 재지향이 재정렬 버퍼에 존재하는 경우, Nack 응답이 생성될 수 있다. 특정 디버그 모드들(예를 들어, 단일 단계 모드) 및 높은 우선순위 내부 인터럽트들은 Nack 응답 경우들로 고려될 수 있다.
프로세서 Int Ack 제어 회로(126)가 재정렬 버퍼(108) 및 MDR 유닛(106)의 프로세서 상태를 조사하는 것에 기초하여 Nack 응답을 검출하지 않는 경우, 프로세서 Int Ack 제어 회로(126)는, (예를 들어, CIF(122)에 또는 프로세서(30) 외부에) 발행되었고 재정렬 버퍼 및 로드/저장 유닛에 아직 커플링이 완료되지 않은 긴 레이턴시 로드/저장 op들이 존재하는지 여부를 결정하기 위해 LSU(118)와 인터페이싱할 수 있다. 예를 들어, 디바이스 공간으로의 로드들 및 저장들(예를 들어, 메모리 대신에 주변기기들에 맵핑되는 로드들 및 저장들)은 잠재적으로 긴 레이턴시일 수 있다. LSU(118)가 긴 레이턴시 로드/저장 op들(예를 들어, 잠재적으로, MDR 유닛(106) 내부에서 사용되는 전술된 임계치와 상이하거나 동일할 수 있는 임계치보다 더 큼)이 있다고 응답하는 경우, 프로세서 Int Ack 제어 회로(126)는 응답이 Nack인 것으로 결정할 수 있다. 다른 잠재적으로 긴 레이턴시 op들은, 예를 들어 동기화 배리어 동작들일 수 있다.
일 실시예에서, 결정이 상기 경우들에 대한 Nack 응답이 아닌 경우, LSU(118)는 재정렬 버퍼(108)에 대한 포인터를 제공하여, LSU(118)가 완료를 단행한(예를 들어, LDQ(124) 또는 STQ(120)로부터 개시되었거나, LSU(118)에서 달리 비-추론적임) 가장 오래된 로드/저장 op를 식별할 수 있다. 포인터는 "진정한 로드/저장(LS) 비-추론적(NS) 포인터"로 지칭될 수 있다. MDR(106)/재정렬 버퍼(108)는 LS NS 포인터에서 인터럽트를 시도할 수 있고, 특정 시간 기간 내에서 가능하지 않은 경우, 프로세서 Int Ack 제어 회로(126)는 Nack 응답이 생성될 것이라고 결정할 수 있다. 그렇지 않으면, Ack 응답이 생성될 수 있다.
페치 및 디코딩 유닛(100)은 프로세서(30)에 의한 실행을 위해 명령어들을 페치하고 명령어들을 실행을 위해 op들로 디코딩하도록 구성될 수 있다. 더 구체적으로, 페치 및 디코딩 유닛(100)은 (CIF(122)를 통해) 메모리로부터 이전에 페치된 명령어들을 ICache(102)에서 캐싱하도록 구성될 수 있고, 프로세서(30)를 위한 명령어들의 추론적 경로를 페치하도록 구성될 수 있다. 페치 및 디코딩 유닛(100)은 페치 경로를 예측하기 위해 다양한 예측 구조들을 구현할 수 있다. 예를 들어, 그 다음의(next) 페치 예측기는 이전에 실행된 명령어들에 기반하여, 페치 어드레스들을 예측하기 위해 사용될 수 있다. 다양한 유형들의 브랜치(branch) 예측기들은 그 다음의 페치 예측을 검증하기 위해 사용될 수 있거나, 또는 그 다음의 페치 예측기가 사용되지 않는 경우 그 다음의 페치 어드레스들을 예측하기 위해 사용될 수 있다. 페치 및 디코딩 유닛(100)은 명령어들을 명령어 동작들로 디코딩하도록 구성될 수 있다. 몇몇 실시예들에서, 주어진 명령어는 명령어의 복잡성에 의존하여, 하나 이상의 명령어 연산들로 디코딩될 수 있다. 특히, 복잡한 명령어들은 몇몇 실시예들에서 마이크로코딩될 수 있다. 그러한 실시예들에서, 명령어에 대한 마이크로코드 루틴은 명령어 연산들로 코딩될 수 있다. 다른 실시예들에서, 프로세서(30)에 의해 구현된 명령어 세트 아키텍처 내의 명령어 각각은 단일 명령어 동작으로 디코딩될 수 있고, 이로써, 명령어 동작은 명령어와 기본적으로 같은 뜻일 수 있다(그러나, 그는 디코더에 의한 형태로 수정될 수 있음). 용어 "명령어 동작"은 보다 간략하게 본 명세서에서 "op"로 지칭될 수 있다.
MDR 유닛(106)은 비순차적 및/또는 추론적 실행을 허용하기 위해 op들을 추론적 자원들(예를 들어, 물리적 레지스터들)에 맵핑하도록 구성될 수 있고, op들을 예비 스테이션들(110 및 116)에 디스패치할 수 있다. op들은 대응하는 명령어들에서 사용된 아키텍처 레지스터들로부터 레지스터 파일(114)의 물리적 레지스터들에 맵핑될 수 있다. 즉, 레지스터 파일(114)은 프로세서(30)에 의해 구현된 명령어 세트 아키텍처에 의해 특정된 아키텍처화된 레지스터들보다 수가 더 많을 수 있는 물리적 레지스터들의 세트를 구현할 수 있다. MDR 유닛(106)은 아키텍처화된 레지스터들과 물리적 레지스터들의 맵핑을 관리할 수 있다. 실시예에서 서로 다른 피연산자 유형들(예컨대 정수, 미디어, 부동 소수점, 기타 등등)에 대한 별개의 물리적 레지스터들이 있을 수 있다. 다른 실시예들에서, 물리적 레지스터들은 피연산자 유형들을 통해 공유될 수 있다. MDR 유닛(106)은 또한 추론적 실행을 추적하고 op들을 리타이어하거나, 오역된 op들을 플러싱(flushing)하는 것을 담당할 수 있다. 재정렬 버퍼(108)는 op들의 프로그램 순서를 추적하고 리타이어/플러시를 관리하는 데 사용될 수 있다. 즉, 재정렬 버퍼(108)는 프로세서에 의해 페치되고 프로세서에 의해 리타이어되지 않은 명령어들에 대응하는 복수의 명령어 동작들을 추적하도록 구성될 수 있다.
op들은, op들에 대한 소스 피연산자들이 준비될 때 실행을 위해 스케줄링될 수 있다. 예시된 실시예에서, 예를 들어, 예비 스테이션들(116 및 110)에서 실행 유닛들(28) 및 LSU(118) 각각에 대해 탈중앙집중형 스케줄링이 사용된다. 다른 실시예들은, 원하는 경우 중앙집중형 스케줄러를 구현할 수 있다.
LSU(118)는 로드/저장 메모리 op들을 실행하도록 구성될 수 있다. 일반적으로, (메모리 액세스는 DCache(104)와 같은 캐시에서 완료될 수 있지만) 메모리 동작(메모리 op)은 메모리에 대한 액세스를 특정하는 명령어 동작일 수 있다. 로드 메모리 동작은 메모리 위치로부터 레지스터로 데이터의 전송을 특정할 수 있는 반면, 저장 메모리 동작은 레지스터로부터 메모리 위치로 데이터의 전송을 특정할 수 있다. 로드 메모리 동작들은 로드 메모리 op들, 로드 op들 또는 로드들로 지칭될 수 있고; 저장 메모리 동작들은 저장 메모리 op들, 저장 op들 또는 저장들로 지칭될 수 있다. 일 실시예에서, 저장 op들은 저장 어드레스 op 및 저장 데이터 op로서 실행될 수 있다. 저장 어드레스 op는 저장의 어드레스를 생성하고, 초기 히트/미스 결정에 대해 캐시를 프로빙하고, 어드레스 및 캐시 정보를 갖는 저장 큐를 업데이트하도록 정의될 수 있다. 따라서, 저장 어드레스 op는 소스 피연산자들로서 어드레스 피연산자들을 가질 수 있다. 저장 데이터 op는 저장 큐에 저장 데이터를 전달하도록 정의될 수 있다. 따라서, 저장 데이터 op는 소스 피연산자들로서 어드레스 피연산자들을 갖지 않을 수 있지만, 소스 피연산자로서 저장 데이터 피연산자를 가질 수 있다. 많은 경우들에서, 저장소의 어드레스 피연산자들은 저장 데이터 피연산자 이전에 이용가능할 수 있고, 따라서 어드레스는 저장 데이터보다 더 일찍 결정되고 이용가능하게 될 수 있다. 일부 실시예들에서, 예를 들어, 저장 데이터 피연산자가 저장 어드레스 피연산자들 중 하나 이상 전에 제공되는 경우, 저장 데이터 op가 대응하는 저장 어드레스 op 이전에 실행되는 것이 가능할 수 있다. 일부 실시예들에서, 저장 op들은 저장 어드레스 및 저장 데이터 op들로서 실행될 수 있지만, 다른 실시예들은 저장 어드레스/저장 데이터 분할을 구현하지 않을 수 있다. 본 개시내용의 나머지는 일 예로서 저장 어드레스 op들(및 저장 데이터 op들)을 종종 사용할 것이지만, 저장 어드레스/저장 데이터 최적화를 사용하지 않는 구현들이 또한 고려된다. 저장 어드레스 op의 실행을 통해 생성된 어드레스는 저장 op에 대응하는 어드레스로 지칭될 수 있다.
로드/저장 op들은 예비 스테이션(116)에서 수신될 수 있으며, 이는, 동작들의 소스 피연산자들을 모니터링하여, 이들이 이용가능한 때를 결정하고, 이어서, 로드 또는 저장 파이프라인들에 동작들을 각각 발행하도록 구성될 수 있다. 동작들이 예비 스테이션(116)에서 수신될 때 일부 소스 피연산자들이 이용가능할 수 있으며, 이는 대응하는 동작에 대해 MDR 유닛(106)으로부터 예비 스테이션(116)에 의해 수신된 데이터에 표시될 수 있다. 다른 피연산자들은 다른 실행 유닛들(112)에 의한 동작들의 실행을 통해 또는 심지어 더 앞선 로드 op들의 실행을 통해 이용가능하게 될 수 있다. 피연산자들은 예비 스테이션(116)에 의해 수집될 수 있거나, 또는 도 6에 도시된 바와 같이 예비 스테이션(116)으로부터 발행 시에 레지스터 파일(114)로부터 판독될 수 있다.
일 실시예에서, 예비 스테이션(116)은, 피연산자들이 이용가능해짐에 따라 ("프로그램 순서"로 지칭되는, 프로세서(30)에 의해 실행되고 있는 코드 시퀀스 내의 그들의 원래 순서로부터) 순서 없이 로드/저장 op들을 발행하도록 구성될 수 있다. 예비 스테이션(116)에서 더 신생의 동작들에 의해 우회되는 더 오래된 동작들을 위한 공간이 LDQ(124) 또는 STQ(120)에 존재함을 보장하기 위해, MDR 유닛(106)은 LDQ(124) 또는 STQ(120) 엔트리들을 로드/저장 유닛(118)에 송신되는 동작들에 미리 할당하는 회로부를 포함할 수 있다. MDR 유닛(106)에서 프로세싱되는 로드에 대해 이용가능한 LDQ 엔트리가 존재하지 않으면, MDR 유닛(106)은 하나 이상의 LDQ 엔트리들이 이용가능하게 될 때까지 프로그램 순서로 로드 op 및 후속 op들의 디스패치를 지연시킬 수 있다. 유사하게, 저장에 대해 이용가능한 STQ 엔트리가 존재하지 않으면, MDR 유닛(106)은 하나 이상의 STQ 엔트리들이 이용가능하게 될 때까지 op 디스패치를 지연시킬 수 있다. 다른 실시예들에서, 예비 스테이션(116)은 프로그램 순서로 동작들을 발행할 수 있고, LRQ 46/STQ(120) 할당은 예비 스테이션(116)으로부터 발행 시에 발생할 수 있다.
LDQ(124)는 초기 실행으로부터 LSU(118)에 의한 리타이어까지 로드들을 추적할 수 있다. LDQ(124)는 메모리 순서화 규칙들이 (순서 없이 실행된 로드들 사이 뿐만 아니라 로드들과 저장들 사이에서) 위반되지 않음을 보장하는 것을 담당할 수 있다. 메모리 정렬 위반이 검출되면, LDQ(124)는 대응하는 로드에 대한 재지향을 시그널링할 수 있다. 재지향은 프로세서(30)로 하여금, 로드 및 후속 op들을 프로그램 순서로 플러싱하게 하고, 대응하는 명령어들을 리페치하게 할 수 있다. 로드 및 후속적인 op들에 대한 추론적 상태는 폐기될 수 있고, op들은 페치 및 디코딩 유닛(100)에 의해 리페치되고 다시 실행되도록 리프로세싱될 수 있다.
로드/저장 어드레스 op가 예비 스테이션(116)에 의해 발행될 때, LSU(118)는 로드/저장에 의해 액세스되는 어드레스를 생성하도록 구성될 수 있고, 로드/저장 어드레스 op로부터 생성된 유효 또는 가상 어드레스로부터 실제로 어드레스 메모리에 사용되는 물리적 어드레스로 어드레스를 변환하도록 구성될 수 있다. LSU(118)는 DCache(104)에 대한 액세스를 생성하도록 구성될 수 있다. DCache(104)에서 히트되는 로드 동작들의 경우, 데이터는, 어드레스가 STQ(120)에서 선행 동작(즉, 프로그램 순서에서 더 오래된 저장)에 히트하지 않는 한 또는 로드가 리플레이되지 않는 한, DCache(104)로부터 로드 동작의 목적지 피연산자(예를 들어, 레지스터 파일(114)의 레지스터)로 추론적으로 포워딩될 수 있다. 데이터는 또한, 추론적으로 스케줄링되었고 실행 유닛들(28)에 있는 종속적인 op들에 포워딩될 수 있다. 이러한 경우들에서, 실행 유닛들(28)은 레지스터 파일(114)로부터 출력된 데이터 대신에 포워딩된 데이터를 우회할 수 있다. 저장 데이터가 STQ 히트에 대한 포워딩에 이용가능한 경우, STQ(120)에 의해 출력된 데이터는 캐시 데이터 대신 포워딩될 수 있다. 데이터가 포워딩될 수 없는 캐시 미스들 및 STQ 히트들은 리플레이에 대한 이유들일 수 있고, 로드 데이터는 그러한 경우들에서 포워딩되지 않을 수 있다. DCache(104)로부터의 캐시 히트/미스 상태는 추후의 프로세싱을 위해 STQ(120) 또는 LDQ(124)에서 로깅될 수 있다.
LSU(118)는 다수의 부하 파이프라인들을 구현할 수 있다. 예를 들어, 일 실시예에서, 3개의 로드 파이프라인들("파이프들")이 구현될 수 있지만, 다른 실시예들에서는 더 많거나 더 적은 파이프라인들이 구현될 수 있다. 각각의 파이프라인은 상이한 로드들을 독립적으로 그리고 다른 로드들과 병렬로 실행할 수 있다. 즉, RS(116)는 동일한 클록 사이클에서 로드 파이프들의 수까지 임의의 수의 로드들을 발행할 수 있다. LSU(118)는 또한 하나 이상의 저장 파이프들을 구현할 수 있고, 특히 다수의 저장 파이프들을 구현할 수 있다. 그러나, 저장 파이프들의 수는 로드 파이프들의 수와 동일할 필요는 없다. 일 실시예에서, 예를 들어, 2개의 저장 파이프들이 사용될 수 있다. 예비 스테이션(116)은 저장 파이프들에 대해 독립적으로 그리고 병렬로 저장 어드레스 op들 및 저장 데이터 op들을 발행할 수 있다. 저장 파이프들은, 실행되었지만 단행되지 않은 저장 동작들을 유지하도록 구성될 수 있는 STQ(120)에 커플링될 수 있다.
CIF(122)는 프로세서(30)를 대신하여 프로세서(30)를 포함하는 시스템의 나머지와 통신하는 것을 담당할 수 있다. 예를 들어, CIF(122)는 DCache(104) 미스들 및 ICache(102) 미스들에 대한 데이터를 요청하도록 구성될 수 있다. 데이터가 리턴될 때, CIF(122)는 캐시 충전을 대응하는 캐시에 시그널링할 수 있다. DCache 충전들의 경우, CIF(122)는 또한 LSU(118)에 통지할 수 있다. LDQ(124)는, 충전 데이터가 DCache(104)에 제공될 때(충전 포워드 동작으로 지칭됨) 리플레이된 로드들이 충전 데이터를 포워딩할 수 있도록, 캐시 충전을 대기하고 있는 리플레이된 로드들을 스케줄링하려고 시도할 수 있다. 리플레이된 로드가 충전 동안 성공적으로 리플레이되지 않으면, 리플레이된 로드는 후속적으로 스케줄링되고 캐시 히트로서 DCache(104)를 통해 리플레이될 수 있다. CIF(122)는 또한, DCache(104)에 의해 축출된 수정된 캐시 라인들을 기입하고, 캐시가능하지 않은 저장소들에 대한 저장 데이터를 병합하는 것 등을 할 수 있다.
실행 유닛들(112)은 다양한 실시예들에서 임의의 유형들의 실행 유닛들을 포함할 수 있다. 예를 들어, 실행 유닛들(112)은 정수, 부동 소수점, 및/또는 벡터 실행 유닛들을 포함할 수 있다. 정수 실행 유닛들은 정수 op들을 실행하도록 구성될 수 있다. 일반적으로, 정수 op는 정수 피연산자들에 관한 정의 동작(예컨대 산술의, 논리의, 시프트/회전의, 기타 등등)을 수행하는 op이다. 정수들은 각각의 값이 수학적 정수에 대응하는 수치들일 수 있다. 정수 실행 유닛들은 브랜치 op들을 프로세싱하기 위해 브랜치 프로세싱 하드웨어를 포함할 수 있거나, 또는 별개의 브랜치 실행 유닛들이 있을 수 있다.
부동 소수점 실행 유닛들은 부동 소수점 op들을 실행하도록 구성될 수 있다. 일반적으로, 부동 소수점 op들은 부동 소수점 피연산자들에 관해 동작하기 위해 정의되었던 op들일 수 있다. 부동 소수점 피연산자는, 지수가 있는 밑(a base raised to an exponent power)으로 나타내고 가수(mantissa)(또는 유효수(significand))로 곱해진 피연산자이다. 지수, 피연산자의 기호, 및 가수/유효수는 피연산자에서 명확하게 나타날 수 있고, 밑은 내포될 수 있다(예컨대, 실시예에서, 밑이 2임).
벡터 실행 유닛들은 벡터 op들을 실행하도록 구성될 수 있다. 벡터 op들은 예를 들어, 미디어 데이터(예컨대, 픽셀들, 오디오 데이터 등과 같은 이미지 데이터)를 프로세싱하기 위해 사용될 수 있다. 미디어 프로세싱은 상당한 양의 데이터에 관해 동일한 프로세싱을 수행함으로써 특징지어질 수 있고, 이때 각각의 데이터는 상대적으로 작은 값이다(예컨대, 정수가 32 비트 내지 64 비트인 것에 비해, 8 비트, 또는 16 비트임). 이로써, 벡터 op들은 단일 명령어-다수 데이터(single instruction-multiple data: SIMD), 또는 다수의 미디어 데이터를 나타내는 피연산자에 관한 벡터 연산들을 포함한다.
이로써, 각각의 실행 유닛(112)은, 다루기 위해 특정 실행 유닛이 정의된 op들에 대해 정의된 동작들을 수행하도록 구성된 하드웨어를 포함할 수 있다. 실행 유닛들은, 각각의 실행 유닛이 다른 실행 유닛들과의 의존성 없이 그 실행 유닛에 발행된 op에 관해 동작되도록 구성될 수 있다는 점에서, 일반적으로 서로 독립적일 수 있다. 또 다른 방식으로 보면, 각각의 실행 유닛은 op들을 실행하는 독립적인 파이프(independent pipe)일 수 있다. 상이한 실행 유닛들은 상이한 실행 레이턴시들(예를 들어, 상이한 파이프 길이들)을 가질 수 있다. 추가적으로, 상이한 실행 유닛들은 우회가 발생하는 파이프라인 스테이지에 대해 상이한 레이턴시들을 가질 수 있으며, 따라서 로드 op에 기초하여 종속적 op들의 추론적 스케줄링이 발생하는 클록 사이클들은 op의 유형 및 op를 실행할 실행 유닛(28)에 기초하여 변할 수 있다.
임의의 수 및 유형의 실행 유닛들(112)이 하나의 실행 유닛을 가진 실시예들, 및 다수의 실행 유닛들을 가진 실시예들을 포함한 다양한 실시예들에 포함될 수 있음을 유의한다.
캐시 라인은 캐시 내의 할당 및 반납(deallocation)의 단위일 수 있다. 즉, 캐시 라인 내의 데이터는 한 단위로서 캐시에 할당/반납될 수 있다. 캐시 라인들은 크기가 변할 수 있다(예컨대, 32 바이트, 64 바이트, 128 바이트, 또는 더 크거나 더 작은 캐시 라인들). 상이한 캐시들은 상이한 캐시 라인 크기들을 가질 수 있다. ICache(102) 및 DCache(104)는 각각 임의의 원하는 용량, 캐시 라인 크기, 및 구성을 갖는 캐시일 수 있다. 다양한 실시예들에서, DCache(104)/ICache(102)와 메인 메모리 사이에 더 많은 추가적인 레벨들의 캐시가 존재할 수 있다.
다양한 포인트들에서, 로드/저장 동작들은 다른 로드/저장 동작들보다 더 신생이거나 더 예전의 것으로 지칭된다. 제1 동작이 프로그램 순서에서 제2 동작에 후속하는 경우, 제1 동작은 제2 동작보다 더 신생의 것일 수 있다. 유사하게, 제1 동작이 프로그램 순서에서 제2 동작에 선행하는 경우, 제1 동작은 제2 동작보다 더 예전의 것일 수 있다.
도 7은 재정렬 버퍼(108)의 일 실시예의 블록도이다. 예시된 실시예에서, 재정렬 버퍼(108)는 복수의 엔트리들을 포함한다. 다양한 실시예들에서, 각각의 엔트리는 명령어, 명령어 동작, 또는 명령어 동작들의 그룹에 대응할 수 있다. 명령어 동작들과 관련된 다양한 상태는 재정렬 버퍼에 저장될 수 있다(예를 들어, 아키텍처화된 레지스터 맵을 업데이트하기 위한 타겟 논리적 및 물리적 레지스터들, 실행 동안 검출된 예외들 또는 재지향들 등).
몇몇 포인터들이 도 7에 예시된다. 리타이어 포인터(130)는 프로세서(30)에서 가장 오래된 리타이어되지 않은 op를 가리킬 수 있다. 즉, 리타이어 포인터(130)에서의 op 이전의 op들은 재정렬 버퍼(108)로부터 리타이어되었고, 프로세서(30)의 아키텍처화된 상태는 리타이어된 op들 등의 실행을 반영하도록 업데이트되었다. 해결된 포인터(132)는, 선행 브랜치 명령어들이 정확하게 예측된 것으로 해결되고 예외를 초래할 수 있는 선행 op들이 예외를 초래하지 않도록 해결되는 가장 오래된 op를 가리킬 수 있다. 리타이어 포인터(130)와 해결 포인터(132) 사이의 op들은 재정렬 버퍼(108)에서의 단행된 op들일 수 있다. 즉, op들을 생성한 명령어들의 실행은 (외부 인터럽트들의 부재 시에) 해결된 포인터(132)에 대해 완료될 것이다. 가장 신생의 포인터(134)는 MDR 유닛(106)으로부터 가장 최근에 페치 및 디스패치된 op를 가리킬 수 있다. 해결된 포인터(132)와 가장 신생의 포인터(134) 사이의 op들은 추론적이며, 예외들, 브랜치 오예측들 등으로 인해 플러싱될 수 있다.
진정한 LS NS 포인터(136)는 위에서 설명된 진정한 LS NS 포인터이다. 진정한 LS NS 포인터는, 인터럽트 요청이 어서트되고 Nack 응답에 대한 다른 테스트들이 부정(negative)인 경우에만 생성될 수 있다(예를 들어, Ack 응답이 이들 테스트들에 의해 표시됨). MDR 유닛(106)은 해결된 포인터(132)를 진정한 LS NS 포인터(136)로 다시 이동시키려고 시도할 수 있다. 플러싱될 수 없는 단행된 op들이 재정렬 버퍼(108)에 있을 수 있다(예를 들어, 이들이 단행되면, 이들은 완료되고 리타이어되어야 함). 명령어 동작들의 일부 그룹들(예를 들어, 마이크로코드 루틴들, 특정 인터럽트불가능 예외들 등)은 인터럽트가능하지 않을 수 있다. 이러한 경우들에서, 프로세서 Int Ack 제어기(126)는 Nack 응답을 생성하도록 구성될 수 있다. 프로세서(30)에서 "실행취소"하기에는 너무 복잡한 op산들 또는 op들의 조합들이 존재할 수 있고, 해결 포인터와 진정한 LS NS 포인터(136) 사이의 그러한 op들의 존재는 프로세서 Int Ack 제어기(126)로 하여금 Nack 응답을 생성하게 할 수 있다. 재정렬 버퍼(108)가 해결 포인터를 진정한 LS NS 포인터(136)로 다시 이동시키는 데 성공한 경우, 프로세서 Int Ack 제어 회로(126)는 Ack 응답을 생성하도록 구성될 수 있다.
도 8은 프로세서(30)에 의한 인터럽트 요청의 수신에 기초한 프로세서 Int Ack 제어 회로(126)의 일 실시예의 동작을 예시하는 흐름도이다. 블록들이 이해의 용이함을 위해 특정 순서로 도시되었지만, 다른 순서들도 사용될 수 있다. 블록들은 프로세서 Int Ack 제어 회로(126) 내의 조합 로직 회로부에서 병렬로 수행될 수 있다. 블록들, 블록들의 조합들, 및/또는 흐름도 전체는 다수의 클록 사이클들에 걸쳐 파이프라인화될 수 있다. 프로세서 Int Ack 제어 회로(126)는 도 8에 예시된 동작을 구현하도록 구성될 수 있다.
프로세서 Int Ack 제어 회로(126)는, 임의의 Nack 조건들이 MDR 유닛(106)에서 검출되는지 여부를 결정하도록 구성될 수 있다(판정 블록(140)). 예를 들어, 완료되지 않은 잠재적으로 긴 레이턴시 동작들, 인터럽트들이 마스킹되는 것 등이 MDR 유닛(106)에서 검출된 Nack 조건들일 수 있다. 그러한 경우(판정 블록(140), "예" 레그), 프로세서 Int Ack 제어 회로(126)는 Nack 응답을 생성하도록 구성될 수 있다(블록(142)). 그렇지 않으면(판정 블록(140), "아니오" 레그), 프로세서 Int Ack 제어 회로(126)는 Nack 조건들 및/또는 진정한 LS NS 포인터를 요청하기 위해 LSU와 통신할 수 있다(블록(144)). LSU(118)가 Nack 조건을 검출하는 경우(판정 블록(146), "예" 레그), 프로세서 Int Ack 제어 회로(126)는 Nack 응답을 생성하도록 구성될 수 있다(블록(142)). LSU(118)가 Nack 조건을 검출하지 않는 경우(판정 블록(146), "아니오" 레그), 프로세서 Int Ack 제어 회로(126)는 LSU(118)로부터 진정한 LS NS 포인터를 수신하도록 구성될 수 있고(블록(148)), 재정렬 버퍼(108) 내의 해결 포인터를 진정한 LS NS 포인터로 다시 이동시키려고 시도할 수 있다(블록(150)). 이동이 성공적이지 않은 경우(예를 들어, 플러싱될 수 없는 해결 포인터와 진정한 LS NS 포인터 사이에 적어도 하나의 명령어 동작이 존재함)(판정 블록(152), "아니오" 레그), 프로세서 Int Ack 제어 회로(126)는 Nack 응답을 생성하도록 구성될 수 있다(블록(142)). 그렇지 않으면(판정 블록(152), "예" 레그), 프로세서 Int Ack 제어 회로(126)는 Ack 응답을 생성하도록 구성될 수 있다(블록(154)). 프로세서 Int Ack 제어 회로(126)는 해결 포인터를 진정한 LS NS 포인터에 동결시키고, 리타이어 포인터가 해결 포인터에 도달할 때까지 op들을 리타이어하도록 구성될 수 있다(블록(156)). 이어서, 프로세서 Int Ack 제어 회로(126)는 인터럽트를 취하도록 구성될 수 있다(블록(158)). 즉, 프로세서(30)는 (예를 들어, 프로세서(30)에 의해 구현된 명령어 세트 아키텍처에 따라 인터럽트들과 연관된 미리 결정된 어드레스로부터) 인터럽트 코드를 페치하기 시작할 수 있다.
다른 실시예에서, SOC(10)는 시스템의 SOC들 중 하나일 수 있다. 더 구체적으로, 일 실시예에서, SOC(10)의 다수의 인스턴스들이 이용될 수 있다. 다른 실시예들은 비대칭 SOC들을 가질 수 있다. 각각의 SOC는 별개의 집적 회로 칩(예를 들어, 별개의 반도체 기판 또는 "다이" 상에 구현됨)일 수 있다. 다이는 인터포저(interposer), 패키지 온 패키지(package on package) 솔루션 등을 통해 패키징되고 서로 연결될 수 있다. 대안적으로, 다이는 칩-온-칩 패키지 솔루션, 멀티칩 모듈 등으로 패키징될 수 있다.
도 9는 SOC(10)의 다수의 인스턴스들을 포함하는 시스템의 일 실시예를 예시하는 블록도이다. 예를 들어, SOC(10A), SOC(10B) 등 내지 SOC(10q)는 시스템에서 함께 커플링될 수 있다. 각각의 SOC(10A-10q)는 인터럽트 제어기(20)(예를 들어, 도 9의 인터럽트 제어기(20A), 인터럽트 제어기(20B), 및 인터럽트 제어기(20q))를 포함한다. 하나의 인터럽트 제어기, 이 예에서는 인터럽트 제어기(20A)가 시스템에 대한 1차 인터럽트 제어기로서 기능할 수 있다. 다른 인터럽트 제어기들(20B 내지 20q)은 2차 인터럽트 제어기들로서 기능할 수 있다.
1차 인터럽트 제어기(20A)와 2차 제어기(20B) 사이의 인터페이스는 도 9에 더 상세히 도시되며, 1차 인터럽트 제어기(20A)와 다른 2차 인터럽트 제어기들, 예를 들어, 인터럽트 제어기(20q) 사이의 인터페이스는 유사할 수 있다. 도 9의 실시예에서, 2차 제어기(20B)는 SOC(10B) 상의 인터럽트 소스들(또는 도 9에 도시되지 않은 SOC(10B)에 커플링된 외부 디바이스들)로부터 발행된 인터럽트들을 Int들(160)로서 식별하는 인터럽트 정보를 제공하도록 구성된다. 1차 인터럽트 제어기(20A)는 2차 인터럽트 제어기(20B)(참조 번호 162)에 하드, 소프트 및 강제 반복들을 시그널링하도록 구성되고, 인터럽트 제어기(20B)(참조 번호 164)로부터 Ack/Nack 응답들을 수신하도록 구성된다. 인터페이스는 임의의 방식으로 구현될 수 있다. 인터페이스는 임의의 방식으로 구현될 수 있다. 예를 들어, 참조 번호들(160, 162, 및/또는 164)을 구현하기 위해 전용 와이어들이 SOC(10A)와 SOC(10B) 사이에 커플링될 수 있다. 다른 실시예에서, 메시지들은 다른 통신들을 위해 또한 사용되는 SOC들(10A-10q) 사이의 일반적인 인터페이스를 통해 1차 인터럽트 제어기(20A)와 2차 인터럽트 제어기들(20B-20q) 사이에서 교환될 수 있다. 일 실시예에서, 프로그래밍된 PIO(input/output) 기입들은 데이터로서 각각 인터럽트 데이터, 하드/소프트/강제 요청들 및 Ack/Nack 응답들과 함께 사용될 수 있다.
1차 인터럽트 제어기(20A)는, SOC(10A), 오프-칩 디바이스들일 수 있는 다른 SOC들(10B-10q) 중 하나, 또는 이들의 임의의 조합 상에 있을 수 있는 다양한 인터럽트 소스들로부터 인터럽트들을 수집하도록 구성될 수 있다. 2차 인터럽트 제어기들(20B-20q)은 1차 인터럽트 제어기(20A)(도 9의 Ints)에 인터럽트들을 송신하여, 1차 인터럽트 제어기(20A)에 대한 인터럽트 소스를 식별하도록 구성될 수 있다. 1차 인터럽트 제어기(20A)는 또한 인터럽트들의 전달을 보장하는 것을 담당할 수 있다. 2차 인터럽트 제어기들(20B-20q)은 1차 인터럽트 제어기(20A)로부터 지시를 받아, 1차 인터럽트 제어기(20A)로부터 소프트, 하드 및 강제 반복 요청들을 수신하고, 대응하는 SOC(10B-10q) 상에 구현된 클러스터 인터럽트 제어기들(24A-24n)을 통해 반복들을 수행하도록 구성될 수 있다. 클러스터 인터럽트 제어기들(24A-24n)로부터의 Ack/Nack 응답들에 기초하여, 2차 인터럽트 제어기들(20B-20q)은 Ack/Nack 응답들을 제공할 수 있다. 일 실시예에서, 1차 인터럽트 제어기(20A)는 소프트 및 하드 반복들에서 2차 인터럽트 제어기들(20B-20q)을 통해 인터럽트들을 전달하려고 연속으로 시도할 수 있고, 강제 반복에서 2차 인터럽트 제어기들(20B-20q)에 병렬로 전달할 수 있다.
일 실시예에서, 1차 인터럽트 제어기(20A)는, 다른 SOC들(10B-10q) 상의 클러스터 인터럽트 제어기들의 서브세트들에 대해 (2차 인터럽트 제어기들(20B-20q)의 보조로) 주어진 반복을 수행하기 전에 1차 인터럽트 제어기(20A)와 동일한 SOC(10A)에 통합되는 클러스터 인터럽트 제어기들의 서브세트에 대한 주어진 반복을 수행하도록 구성될 수 있다. 즉, 1차 인터럽트 제어기(20A)는 SOC(10A) 상에서 클러스터 인터럽트 제어기들을 통해 인터럽트를 전달하려고 연속으로 시도할 수 있고, 이어서, 2차 인터럽트 제어기들(20B-20q)에 통신할 수 있다. 2차 인터럽트 제어기들(20B-20q)을 통해 전달하려는 시도들은 또한 연속으로 수행될 수 있다. 2차 인터럽트 제어기들(20B-20q)을 통한 시도들의 순서는, 클러스터 내의 클러스터 인터럽트 제어기들 및 프로세서들에 대해 전술된 실시예들과 유사하게 임의의 원하는 방식으로 결정될 수 있다(예를 들어, 프로그래밍가능한 순서, 가장 최근에 수락된 것, 가장 덜 최근에 수락된 것 등). 따라서, 1차 인터럽트 제어기(20A) 및 2차 인터럽트 제어기들(20B-20q)은 다수의 SOC들(10A-10q)의 존재로부터 소프트웨어를 크게 격리시킬 수 있다. 즉, SOC들(10A-10q)은 단일 시스템 상에서의 소프트웨어 실행에 대해 대체로 투명한 단일 시스템으로서 구성될 수 있다. 시스템 초기화 동안, 일부 실시예들은 위에서 논의된 바와 같이 인터럽트 제어기들(20A-20q)을 구성하도록 프로그래밍될 수 있지만, 그렇지 않으면, 인터럽트 제어기들(20A-20q)은 소프트웨어 보조 또는 시스템의 다중-다이 성질에 대한 소프트웨어의 특정 가시성 없이, 각각 별개의 반도체 다이 상에 있는 가능하게는 다수의 SOC들(10A-10q)에 걸친 인터럽트들의 전달을 관리할 수 있다. 예를 들어, 다이-간 통신으로 인한 지연들이 시스템에서 최소화될 수 있다. 따라서, 초기화 후의 실행 동안, 단일 시스템은 소프트웨어에게 단일 시스템으로 보일 수 있고, 시스템의 다중-다이 성질은 소프트웨어에 투명할 수 있다.
1차 인터럽트 제어기(20A) 및 2차 인터럽트 제어기들(20B-20q)은, 당업자들에 의해 "마스터"(즉, 1차) 및 "슬레이브"(즉, 2차)로 또한 지칭되는 방식으로 동작할 수 있다는 것에 유의한다. 1차/2차 용어가 본 명세서에서 사용되지만, "1차" 및 "2차"라는 용어들은 이러한 대응 용어들을 포함하는 것으로 해석되는 것으로 명백히 의도된다.
일 실시예에서, SOC(10A-10q)의 각각의 인스턴스는 자신의 인터럽트 제어기(20A-20q)에 구현된 1차 인터럽트 제어기 회로 및 2차 인터럽트 제어기 회로 둘 모두를 가질 수 있다. 하나의 인터럽트 제어기(예를 들어, 인터럽트 제어기(20A))는 (예를 들어, SOC들(10A-10q) 상의 퓨즈들, 또는 SOC들(10A-10q)의 하나 이상의 핀들 상의 핀 스트랩들을 통해) 시스템의 제조 동안 1차로 지정될 수 있다. 대안적으로, 1차 및 2차 지정들은 시스템의 초기화(또는 부트) 구성 동안 이루어질 수 있다.
도 10은 하나 이상의 인터럽트 소스들로부터 하나 이상의 인터럽트들의 수신에 기초한 1차 인터럽트 제어기(20A)의 일 실시예의 동작을 예시하는 흐름도이다. 블록들이 이해의 용이함을 위해 특정 순서로 도시되었지만, 다른 순서들도 사용될 수 있다. 블록들은 1차 인터럽트 제어기(20A) 내의 조합 로직 회로부에서 병렬로 수행될 수 있다. 블록들, 블록들의 조합들, 및/또는 흐름도 전체는 다수의 클록 사이클들에 걸쳐 파이프라인화될 수 있다. 1차 인터럽트 제어기(20A)는 도 10에 예시된 동작을 구현하도록 구성될 수 있다.
1차 인터럽트 제어기(20A)는 로컬 SOC(10A) 상에 통합된 클러스터 인터럽트 제어기들을 통해 소프트 반복을 수행하도록 구성될 수 있다(블록(170)). 예를 들어, 소프트 반복은 도 4의 흐름도와 유사할 수 있다. 로컬 소프트 반복이 Ack 응답을 초래하는 경우(판정 블록(172), "예" 레그), 인터럽트는 성공적으로 전달될 수 있고 1차 인터럽트 제어기(20A)는 유휴 상태(40)로 복귀하도록 구성될 수 있다(어떠한 추가 계류중인 인터럽트들도 없다고 가정함). 로컬 소프트 반복이 Nack 응답을 초래하는 경우(판정 블록(172), "아니오" 레그), 1차 인터럽트 제어기(20A)는 전술된 바와 같이 임의의 원하는 순서를 사용하여 다른 SOC들(10B-10q) 중 하나를 선택하도록 구성될 수 있다(블록(174)). 1차 인터럽트 제어기(20A)는 선택된 SOC(10B-10q)에 대해 2차 인터럽트 제어기(20B-20q)에 소프트 반복 요청을 어서트하도록 구성될 수 있다(블록(176)). 2차 인터럽트 제어기(20B-20q)가 Ack 응답을 제공하는 경우(판정 블록(178), "예" 레그), 인터럽트는 성공적으로 전달될 수 있고 1차 인터럽트 제어기(20A)는 유휴 상태(40)로 복귀하도록 구성될 수 있다(어떠한 추가 계류중인 인터럽트들도 없다고 가정함). 2차 인터럽트 제어기(20B-20q)가 Ack 응답을 제공하고(판정 블록(178), "예" 레그), 소프트 반복에서 아직 선택되지 않은 더 많은 SOC들(10B-10q)이 존재하는 경우(판정 블록(180), "예" 레그), 1차 인터럽트 제어기(20A)는 구현된 정렬 메커니즘에 따라 다음 SOC(10B-10q)를 선택하도록 구성될 수 있고(블록(182)) 선택된 SOC 상에서 2차 인터럽트 제어기(20B-20q)에 소프트 반복 요청을 송신하고(블록(176)) 프로세싱을 계속하도록 구성될 수 있다. 한편, 각각의 SOC(10B-10q)가 선택된 경우, 소프트 반복은 2차 인터럽트 제어기들(20B-20q)을 통해 인터럽트를 전달하려는 연속 시도가 완료되었기 때문에 완료될 수 있다.
성공적 인터럽트 전달 없이 2차 인터럽트 제어기들(20B-20q)을 통한 소프트 반복을 완료하는 것(판정 블록(180), "아니오" 레그)에 기초하여, 1차 인터럽트 제어기(20A)는 로컬 SOC(10A)에 통합된 로컬 클러스터 인터럽트 제어기들을 통해 하드 반복을 수행하도록 구성될 수 있다(블록(184)). 예를 들어, 소프트 반복은 도 4의 흐름도와 유사할 수 있다. 로컬 하드 반복이 Ack 응답을 초래하는 경우(판정 블록(186), "예" 레그), 인터럽트는 성공적으로 전달될 수 있고 1차 인터럽트 제어기(20A)는 유휴 상태(40)로 복귀하도록 구성될 수 있다(어떠한 추가 계류중인 인터럽트들도 없다고 가정함). 로컬 하드 반복이 Nack 응답을 초래하는 경우(판정 블록(186), "아니오" 레그), 1차 인터럽트 제어기(20A)는 전술된 바와 같이 임의의 원하는 순서를 사용하여 다른 SOC들(10B-10q) 중 하나를 선택하도록 구성될 수 있다(블록(188)). 1차 인터럽트 제어기(20A)는 선택된 SOC(10B-10q)에 대해 2차 인터럽트 제어기(20B-20q)에 하드 반복 요청을 어서트하도록 구성될 수 있다(블록(190)). 2차 인터럽트 제어기(20B-20q)가 Ack 응답을 제공하는 경우(판정 블록(192), "예" 레그), 인터럽트는 성공적으로 전달될 수 있고 1차 인터럽트 제어기(20A)는 유휴 상태(40)로 복귀하도록 구성될 수 있다(어떠한 추가 계류중인 인터럽트들도 없다고 가정함). 2차 인터럽트 제어기(20B-20q)가 Ack 응답을 제공하고(판정 블록(192), "예" 레그), 하드 반복에서 아직 선택되지 않은 더 많은 SOC들(10B-10q)이 존재하는 경우(판정 블록(194), "예" 레그), 1차 인터럽트 제어기(20A)는 구현된 정렬 메커니즘에 따라 다음 SOC(10B-10q)를 선택하도록 구성될 수 있고(블록(196)) 선택된 SOC 상에서 2차 인터럽트 제어기(20B-20q)에 하드 반복 요청을 송신하고(블록(190)) 프로세싱을 계속하도록 구성될 수 있다. 한편, 각각의 SOC(10B-10q)가 선택된 경우, 하드 반복은 2차 인터럽트 제어기들(20B-20q)을 통해 인터럽트를 전달하려는 연속 시도가 완료되었기 때문에 완료될 수 있다(판정 블록(194), "아니오" 레그). 1차 인터럽트 제어기(20A)는 강제 반복으로 진행하도록 구성될 수 있다(블록(198)). 강제 반복은 국부적으로 수행될 수 있거나, 또는 로컬 SOC(10A) 및 다른 SOC들(10B-10q)에 걸쳐 병렬로 또는 연속으로 수행될 수 있다.
전술된 바와 같이, 인터럽트 전달 프로세스가 시작될 때 초기화될 수 있는 타임아웃 메커니즘이 존재할 수 있다. 일 실시예에서, 임의의 상태 동안 타임아웃이 발생하는 경우, 인터럽트 제어기(20)는 강제 반복으로 이동하도록 구성될 수 있다. 대안적으로, 타이머 만료는 다시 언급된 바와 같이 대기 드레인 상태(48)에서만 고려될 수 있다.
도 11은 2차 인터럽트 제어기(20B-20q)의 일 실시예의 동작을 예시하는 흐름도이다. 블록들이 이해의 용이함을 위해 특정 순서로 도시되었지만, 다른 순서들도 사용될 수 있다. 블록들은 2차 인터럽트 제어기(20B-20q) 내의 조합 로직 회로부에서 병렬로 수행될 수 있다. 블록들, 블록들의 조합들, 및/또는 흐름도 전체는 다수의 클록 사이클들에 걸쳐 파이프라인화될 수 있다. 2차 인터럽트 제어기(20B-20q)는 도 11에 예시된 동작을 구현하도록 구성될 수 있다.
대응하는 SOC(10B-10q)의(또는 SOC(10B-10q)에 커플링된) 인터럽트 소스가 2차 인터럽트 제어기(20B-20q)에 인터럽트를 제공하는 경우(판정 블록(200), "예" 레그), 2차 인터럽트 제어기(20B-20q)는 다른 인터럽트 소스들로부터의 다른 인터럽트들과 함께 처리를 위해 인터럽트를 1차 인터럽트 제어기(20A)에 송신하도록 구성될 수 있다(블록(202)).
1차 인터럽트 제어기(20A)가 반복 요청을 송신한 경우(판정 블록(204), "예" 레그), 2차 인터럽트 제어기(20B-20q)는 로컬 SOC(10B-10q)의 클러스터 인터럽트 제어기들을 통해 요청된 반복(하드, 소프트 또는 강제)을 수행하도록 구성될 수 있다(블록(206)). 예를 들어, 하드 및 소프트 반복들은 도 4와 유사할 수 있고, 강제 반복은 로컬 SOC(10B-10q)에서 클러스터 인터럽트 제어기들에 병렬로 수행될 수 있다. 반복이 Ack 응답을 초래하는 경우(판정 블록(208), "예" 레그), 2차 인터럽트 제어기(20B-20q)는 Ack 응답을 1차 인터럽트 제어기(20A)에 송신하도록 구성될 수 있다(블록(210)). 반복이 Nack 응답을 초래하는 경우(판정 블록(208), "아니오" 레그), 2차 인터럽트 제어기(20B-20q)는 Nack 응답을 1차 인터럽트 제어기(20A)에 송신하도록 구성될 수 있다(블록(212)).
도 12는 인터럽트들을 처리하기 위한 방법의 일 실시예를 예시하는 흐름도이다. 블록들이 이해의 용이함을 위해 특정 순서로 도시되었지만, 다른 순서들도 사용될 수 있다. 블록들은 본 명세서에 설명된 시스템들 내의 조합 로직 회로부에서 병렬로 수행될 수 있다. 블록들, 블록들의 조합들, 및/또는 흐름도 전체는 다수의 클록 사이클들에 걸쳐 파이프라인화될 수 있다. 본 명세서에 설명된 시스템들은 도 12에 예시된 동작을 구현하도록 구성될 수 있다.
인터럽트 제어기(20)는 인터럽트 소스로부터 인터럽트를 수신할 수 있다(블록(220)). 1차 및 2차 인터럽트 제어기들(20A-20q)을 갖는 실시예들에서, 인터럽트는 임의의 인터럽트 제어기(20A-20q)에서 수신될 수 있고, 인터럽트 소스로부터 인터럽트를 수신하는 것의 일부로서 1차 인터럽트 제어기(20A)에 제공될 수 있다. 인터럽트 제어기(20)는 복수의 클러스터 인터럽트 제어기들에 인터럽트를 전달하려고 연속으로 시도하는 제1 반복(예를 들어, 소프트 반복)을 수행하도록 구성될 수 있다(블록(222)). 복수의 클러스터 인터럽트 제어기들의 개개의 클러스터 인터럽트 제어기는 복수의 프로세서들을 포함하는 개개의 프로세서 클러스터와 연관된다. 복수의 클러스터 인터럽트 제어기들의 주어진 클러스터 인터럽트 제어기는 제1 반복에서, 파워 온되는 개개의 복수의 프로세서들의 서브세트에 인터럽트를 전달하려고 시도하고, 서브세트에 포함되지 않은 개개의 복수의 프로세서들 중의 프로세서들에 인터럽트를 전달하려고 시도하지 않도록 구성될 수 있다. Ack 응답이 수신되면, 반복은 인터럽트 제어기(20)에 의해 종료될 수 있다(판정 블록(224), "예" 레그 및 블록(226)). 한편(판정 블록(224), "아니오" 레그), 제1 반복에서 복수의 클러스터 인터럽트 제어기들로부터의 비-확인응답(Nack) 응답들에 기초하여, 인터럽트 제어기는 복수의 클러스터 인터럽트 제어기들을 통한 제2 반복(예를 들어, 하드 반복)을 수행하도록 구성될 수 있다(블록(228)). 주어진 클러스터 인터럽트 제어기는 제2 반복에서, 파워 오프되는 개개의 복수의 프로세서들 중의 프로세서들을 파워 온시키고 개개의 복수의 프로세서들에 인터럽트를 전달하려고 시도하도록 구성될 수 있다. Ack 응답이 수신되면, 반복은 인터럽트 제어기(20)에 의해 종료될 수 있다(판정 블록(230), "예" 레그 및 블록(232)). 한편(판정 블록(230), "아니오" 레그), 제2 반복에서 복수의 클러스터 인터럽트 제어기들로부터의 비-확인응답(Nack) 응답들에 기초하여, 인터럽트 제어기는 복수의 클러스터 인터럽트 제어기들을 통한 제3 반복(예를 들어, 강제 반복)을 수행하도록 구성될 수 있다(블록(234)).
컴퓨터 시스템
다음으로 도 13을 참조하면, 시스템(700)의 일 실시예의 블록도가 도시된다. 예시된 실시예에서, 시스템(700)은 하나 이상의 주변기기들(704) 및 외부 메모리(702)에 커플링된 시스템 온 칩(SOC)(10)의 적어도 하나의 인스턴스를 포함한다. SOC(10)에 공급 전압들을 공급할 뿐만 아니라, 메모리(702) 및/또는 주변기기들(154)에 하나 이상의 공급 전압들을 공급하는 전력 공급부(PMU)(708)가 제공된다. 일부 실시예들에서, SOC(10)(예를 들어, SOC들(10A-10q))의 하나 초과의 인스턴스가 포함될 수 있다(그리고 하나 초과의 메모리(702)가 또한 포함될 수 있다). 일 실시예에서, 메모리(702)는 도 2에 예시된 메모리(12)를 포함할 수 있다.
주변기기들(704)은 시스템(700)의 유형에 의존하여 임의의 원하는 회로부를 포함할 수 있다. 예를 들어, 일 실시예에서, 시스템(700)은 모바일 디바이스(예를 들어, 개인 휴대 정보 단말기(personal digital assistant, PDA), 스마트 폰 등)일 수 있고, 주변기기들(704)은 Wi-Fi, 블루투스(Bluetooth), 셀룰러, 글로벌 포지셔닝 시스템 등과 같은 다양한 유형들의 무선 통신용 디바이스들을 포함할 수 있다. 주변기기들(704)은 또한 RAM 저장소, 솔리드 스테이트 저장소(solid state storage) 또는 디스크 저장소를 포함하는 부가적인 저장소를 포함할 수 있다. 주변기기들(704)은 사용자 인터페이스 디바이스들, 예컨대 터치 디스플레이 스크린들 또는 멀티터치 디스플레이 스크린을 포함한 디스플레이 스크린, 키보드 또는 다른 입력 디바이스, 마이크로폰, 스피커 등을 포함할 수 있다. 다른 실시예들에서, 시스템(700)은 임의의 타입의 컴퓨팅 시스템(예컨대 데스크톱 개인용 컴퓨터, 랩톱, 워크스테이션, 넷톱 등)일 수 있다.
외부 메모리(702)는 임의의 유형의 메모리를 포함할 수 있다. 예를 들어, 외부 메모리(702)는 SRAM, 동적 RAM(DRAM), 예컨대, 동기식 DRAM(synchronous DRAM, SDRAM), 더블 데이터 레이트(double data rate)(DDR, DDR2, DDR3 등) SDRAM, RAMBUS DRAM, 저전력 버전들의 DDR DRAM(예를 들어, LPDDR, mDDR 등) 등일 수 있다. 외부 메모리(702)는 메모리 디바이스들이 장착되는 하나 이상의 메모리 모듈들, 예컨대, 단일 인라인 메모리 모듈(single inline memory module, SIMM)들, 듀얼 인라인 메모리 모듈(dual inline memory module, DIMM)들 등을 포함할 수 있다. 대안적으로, 외부 메모리(702)는 칩-온-칩(chip-on-chip) 또는 패키지-온-패키지(package-on-package) 구현예로 SOC(10) 상에 장착되는 하나 이상의 메모리 디바이스들을 포함할 수 있다.
예시된 바와 같이, 시스템(700)은 넓은 범위의 영역들의 애플리케이션을 갖는 것으로 도시되어 있다. 예를 들어, 시스템(700)은 데스크톱 컴퓨터(710), 랩톱 컴퓨터(720), 태블릿 컴퓨터(730), 셀룰러 또는 모바일 폰(740), 또는 텔레비전(750)(또는 텔레비전에 커플링된 셋톱 박스)의 칩들, 회로부, 컴포넌트들 등의 부분으로서 이용될 수 있다. 스마트워치 및 건강 모니터링 디바이스(760)가 또한 예시된다. 일부 실시예들에서, 스마트워치는 다양한 범용 컴퓨팅 관련 기능들을 포함할 수 있다. 예를 들어, 스마트워치는 이메일, 셀폰 서비스, 사용자 캘린더 등에 대한 액세스를 제공할 수 있다. 다양한 실시예들에서, 건강 모니터링 디바이스는 전용 의료 디바이스일 수 있거나, 또는 그렇지 않으면 전용 건강 관련 기능을 포함할 수 있다. 예를 들어, 건강 모니터링 디바이스는 사용자의 바이탈 사인(vital sign)들을 모니터링하고, 역학적인 사회적 거리두기의 목적을 위해 다른 사용자들에 대한 사용자의 근접도를 추적하고, 접촉을 추적하고, 건강 위험의 경우 응급 서비스에 통신을 제공하는 등일 수 있다. 다양한 실시예들에서, 위에서 언급된 스마트워치는 일부 또는 임의의 건강 모니터링 관련 기능들을 포함할 수 있거나 포함하지 않을 수 있다. 목부 주위에 착용된 디바이스들, 인체에서 이식가능한 디바이스들, 증강 및/또는 가상 현실 경험을 제공하도록 설계된 안경 등과 같은 다른 웨어러블 디바이스들이 또한 고려된다.
시스템(700)은 클라우드 기반 서비스(들)(770)의 일부로서 추가로 사용될 수 있다. 예를 들어, 이전에 언급된 디바이스들, 및/또는 다른 디바이스들은 클라우드 내의 컴퓨팅 리소스들(즉, 원격으로 위치된 하드웨어 및/또는 소프트웨어 리소스들)에 액세스할 수 있다. 더 추가적으로, 시스템(700)은 이전에 언급된 것들 이외의 홈(home)의 하나 이상의 디바이스들에서 이용될 수 있다. 예를 들어, 홈 내의 기기들은 주의를 요하는 조건들을 모니터링하고 검출할 수 있다. 예를 들어, 홈 내의 다양한 디바이스들(예를 들어, 냉장고, 냉각 시스템 등)은 디바이스의 상태를 모니터링하고, 특정 이벤트가 검출되면 경보를 집주인(또는 예를 들어, 수리 설비)에게 제공할 수 있다. 대안적으로, 서모스탯(thermostat)은 홈 내의 온도를 모니터링할 수 있고, 집주인에 의한 다양한 조건들에 대한 응답들의 이력에 기초하여 가열/냉각 시스템에 대한 조정들을 자동화할 수 있다. 또한, 다양한 운송 모드들에 대한 시스템(700)의 적용이 도 13에 예시되어 있다. 예를 들어, 시스템(700)은 항공기, 기차들, 버스들, 임대용 자동차들, 개인용 자동차들, 개인용 보트들로부터 유람선(cruise liner)들까지의 수상 선박들, (대여 또는 소유를 위한) 스쿠터들 등의 제어 및/또는 엔터테인먼트 시스템들에서 사용될 수 있다. 다양한 경우들에서, 시스템(700)은 자동화된 안내(예를 들어, 자율-주행 차량들), 일반적인 시스템 제어 등을 제공하기 위해 사용될 수 있다. 이들 임의의 많은 다른 실시예들이 가능하고 고려된다. 도 13에 예시된 디바이스들 및 애플리케이션들이 단지 예시적인 것이며 제한하려는 의도가 아니라는 것을 유의한다. 다른 디바이스들이 가능하고 고려된다.
컴퓨터 판독가능 저장 매체
이제 도 14를 참조하면, 컴퓨터 판독가능 저장 매체(800)의 일 실시예의 블록도가 도시된다. 일반적으로 말하면, 컴퓨터 액세스가능 저장 매체는 명령어들 및/또는 데이터를 컴퓨터에 제공하기 위하여 사용 동안 컴퓨터에 의해 액세스가능한 임의의 저장 매체를 포함할 수 있다. 예를 들어, 컴퓨터 액세스가능 저장 매체는, 자기 또는 광학 매체, 예를 들어, 디스크(고정식 또는 착탈식), 테이프, CD-ROM, DVD-ROM, CD-R, CD-RW, DVD-R, DVD-RW, 또는 블루레이(Blu-Ray)와 같은 저장 매체들을 포함할 수 있다. 저장 매체들은, RAM(예를 들어, 동기식 동적 RAM(SDRAM), 램버스 DRAM(RDRAM), 정적 RAM(SRAM) 등), ROM, 또는 플래시 메모리와 같은 휘발성 또는 비휘발성 메모리 매체들을 더 포함할 수 있다. 저장 매체들은 저장 매체들이 명령어들/데이터를 제공하는 컴퓨터 내에 물리적으로 포함될 수 있다. 대안적으로, 저장 매체들은 컴퓨터에 연결될 수 있다. 예를 들어, 저장 매체들은 네트워크 부착형 저장소와 같이, 네트워크 또는 무선 링크를 통해 컴퓨터에 연결될 수 있다. 저장 매체들은 USB(Universal Serial Bus)와 같은 주변기기 인터페이스를 통해 연결될 수 있다. 일반적으로, 컴퓨터 액세스가능 저장 매체(800)는 비일시적 방식으로 데이터를 저장할 수 있고, 이러한 맥락에서 비일시적은 신호 상에서 명령어들/데이터를 송신하지 않는 것을 지칭할 수 있다. 예를 들어, 비일시적 저장소는 휘발성(그리고 전력 차단에 응답하여 저장된 명령어들/데이터를 상실할 수 있음) 또는 비휘발성일 수 있다.
도 14의 컴퓨터 액세스가능 저장 매체(800)는 SOC(10)를 표현하는 데이터베이스(804)를 저장할 수 있다. 일반적으로, 데이터베이스(804)는, 프로그램에 의해 판독될 수 있고 SOC(10)를 포함하는 하드웨어를 제조하기 위해 직접적으로 또는 간접적으로 사용될 수 있는 데이터베이스일 수 있다. 예를 들어, 데이터베이스는 베릴로그(Verilog) 또는 VHDL과 같은 고레벨 설계 언어(high level design language, HDL)에서 하드웨어 기능의 거동-레벨 디스크립션(behavioral-level description) 또는 레지스터-전송 레벨(register-transfer level, RTL) 디스크립션일 수 있다. 디스크립션은 합성 라이브러리로부터의 게이트들의 목록을 포함하는 넷리스트(netlist)를 생성하기 위해 디스크립션을 합성할 수 있는 합성 도구에 의해 판독될 수 있다. 넷리스트는 SOC(10)를 포함하는 하드웨어의 기능을 또한 표현하는 한 세트의 게이트들을 포함한다. 이어서, 넷리스트는 마스크들에 적용될 기하학적 형상들을 설명하는 데이터 세트를 생성하기 위해 배치되고 라우팅될 수 있다. 이어서, 마스크들은 SOC(10)에 대응하는 반도체 회로 또는 회로들을 생성하기 위한 다양한 반도체 제조 단계들에서 사용될 수 있다. 대안적으로, 컴퓨터 액세스가능 저장 매체(800) 상의 데이터베이스(804)는, 원하는 대로, 넷리스트(합성 라이브러리가 있거나 없음) 또는 데이터 세트일 수 있다.
컴퓨터 액세스가능 저장 매체(800)가 SOC(10)의 표현을 저장하지만, 다른 실시예들은 도 2에 도시된 컴포넌트들의 임의의 서브세트를 포함하여, 원하는 대로, SOC(10)의 임의의 부분의 표현을 반송할 수 있다. 데이터베이스(804)는 위의 것의 임의의 부분을 표현할 수 있다.
본 개시내용에 기초하여, 시스템은 복수의 클러스터 인터럽트 제어기들 및 복수의 클러스터 인터럽트 제어기들에 커플링된 인터럽트 제어기를 포함할 수 있다. 복수의 클러스터 인터럽트 제어기들의 개개의 클러스터 인터럽트 제어기는 복수의 프로세서들을 포함하는 개개의 프로세서 클러스터와 연관될 수 있다. 인터럽트 제어기는 제1 인터럽트 소스로부터 인터럽트를 수신하도록 구성될 수 있고, 인터럽트에 기초하여, 인터럽트를 전달하려고 시도하기 위해 복수의 클러스터 인터럽트 제어기들을 통해 제1 반복을 수행하고; 제1 반복에서 복수의 클러스터 인터럽트 제어기들로부터의 비-확인응답(Nack) 응답들에 기초하여, 복수의 클러스터 인터럽트 제어기들을 통해 제2 반복을 수행하도록 구성될 수 있다. 복수의 클러스터 인터럽트 제어기들의 주어진 클러스터 인터럽트 제어기는 제1 반복에서, 파워 온되는 개개의 프로세서 클러스터 내의 복수의 프로세서들의 서브세트에 인터럽트를 전달하려고 시도하고, 서브세트에 포함되지 않은 개개의 클러스터 내의 개개의 복수의 프로세서들 중의 프로세서들에 인터럽트를 전달하려고 시도하지 않도록 구성될 수 있다. 제2 반복에서, 주어진 클러스터 인터럽트 제어기는 파워 오프되는 개개의 복수의 프로세서들 중의 프로세서들을 파워 온시키고 개개의 복수의 프로세서들에 인터럽트를 전달하려고 시도하도록 구성될 수 있다. 일 실시예에서, 복수의 클러스터 인터럽트 제어기들을 통해 인터럽트를 전달하려는 시도 동안, 인터럽트 제어기는 복수의 클러스터 인터럽트 제어기들 중 제1 클러스터 인터럽트 제어기에 제1 인터럽트 요청을 어서트하도록 구성될 수 있고; 제1 클러스터 인터럽트 제어기로부터의 Nack 응답에 기초하여, 인터럽트 제어기는 복수의 클러스터 인터럽트 제어기들 중 제2 클러스터 인터럽트 제어기에 제2 인터럽트 요청을 어서트하도록 구성될 수 있다. 일 실시예에서, 복수의 클러스터 인터럽트 제어기들을 통해 인터럽트를 전달하려는 시도 동안, 제2 클러스터 인터럽트 제어기로부터의 제2 Nack 응답에 기초하여, 인터럽트 제어기는 복수의 클러스터 인터럽트 제어기들 중 제3 클러스터 인터럽트 제어기에 제3 인터럽트 요청을 어서트하도록 구성될 수 있다. 일 실시예에서, 복수의 클러스터 인터럽트 제어기들을 통해 인터럽트를 전달하려는 시도 동안, 제2 클러스터 인터럽트 제어기로부터의 확인응답(Ack) 응답 및 추가적인 계류중인 인터럽트들의 부재에 기초하여, 인터럽트 제어기는 시도를 종료하도록 구성될 수 있다. 일 실시예에서, 복수의 클러스터 인터럽트 제어기들을 통해 인터럽트를 전달하려는 시도 동안, 인터럽트 제어기는 복수의 클러스터 인터럽트 제어기들 중 제1 클러스터 인터럽트 제어기에 인터럽트 요청을 어서트하도록 구성될 수 있고; 제1 클러스터 인터럽트 제어기로부터의 확인응답(Ack) 응답 및 추가적인 계류중인 인터럽트들의 부재에 기초하여, 인터럽트 제어기는 시도를 종료하도록 구성될 수 있다. 일 실시예에서, 복수의 클러스터 인터럽트 제어기들을 통해 인터럽트를 전달하려는 시도 동안, 인터럽트 제어기는 복수의 클러스터 인터럽트 제어기들 중 하나 이상의 클러스터 인터럽트 제어기들에 인터럽트 요청들을 연속으로 어서트하도록 구성될 수 있고, 인터럽트 요청들은 하나 이상의 클러스터 인터럽트 제어기들 중 제1 클러스터 인터럽트 제어기로부터의 확인응답(Ack) 응답에 의해 종료된다. 일 실시예에서, 인터럽트 제어기는 프로그래밍가능한 순서로 연속으로 어서트하도록 구성될 수 있다. 일 실시예에서, 인터럽트 제어기는 제1 인터럽트 소스에 기초하여 인터럽트 요청을 연속으로 어서트하도록 구성될 수 있다. 제2 인터럽트 소스로부터의 제2 인터럽트는 상이한 순서의 연속 어서션을 초래할 수 있다. 일 실시예에서, 복수의 클러스터 인터럽트 제어기들을 통해 인터럽트를 전달하려는 시도 동안, 인터럽트 제어기는 복수의 클러스터 인터럽트 제어기들 중 제1 클러스터 인터럽트 제어기에 인터럽트 요청을 어서트하도록 구성될 수 있고; 제1 클러스터 인터럽트 제어기는 제1 클러스터 인터럽트 제어기에 대한 인터럽트 요청에 기초하여 개개의 프로세서 클러스터 내의 복수의 프로세서들에 프로세서 인터럽트 요청들을 연속으로 어서트하도록 구성될 수 있다. 일 실시예에서, 제1 클러스터 인터럽트 제어기는 복수의 프로세서들 중 제1 프로세서로부터의 확인응답(Ack) 응답에 기초하여 연속 어서션을 종료하도록 구성된다. 일 실시예에서, 제1 클러스터 인터럽트 제어기는 제1 프로세서로부터의 Ack 응답에 기초하여 인터럽트 제어기에 Ack 응답을 송신하도록 구성될 수 있다. 일 실시예에서, 제1 클러스터 인터럽트 제어기는 프로세서 인터럽트들의 연속 어서션 동안 개개의 클러스터 내의 복수의 프로세서들로부터의 Nack 응답들에 기초하여 인터럽트 제어기에 Nack 응답을 제공하도록 구성될 수 있다. 일 실시예에서, 인터럽트 제어기는 복수의 클러스터 인터럽트 제어기들의 제1 서브세트를 포함하는 제1 반도체 기판 상의 제1 집적 회로 상에 포함될 수 있다. 복수의 클러스터 인터럽트 제어기들의 제2 서브세트는 제2 별개의 반도체 기판 상의 제2 집적 회로 상에 구현될 수 있다. 인터럽트 제어기는 제2 서브세트에 전달하려고 시도하기 전에, 제1 서브세트에 인터럽트 요청들을 연속으로 어서트하도록 구성될 수 있다. 일 실시예에서, 제2 집적 회로는 제2 인터럽트 제어기를 포함하고, 인터럽트 제어기는 제1 서브세트가 인터럽트를 거부하는 것에 응답하여 제2 인터럽트 제어기에 인터럽트 요청을 통신하도록 구성될 수 있다. 제2 인터럽트 제어기는 제2 서브세트에 인터럽트를 전달하려고 시도하도록 구성될 수 있다.
일 실시예에서, 프로세서는 재정렬 버퍼, 로드/저장 유닛, 및 재정렬 버퍼 및 로드/저장 유닛에 커플링된 제어 회로를 포함한다. 재정렬 버퍼는 프로세서에 의해 페치되고 프로세서에 의해 리타이어되지 않은 명령어들에 대응하는 복수의 명령어 동작들을 추적하도록 구성될 수 있다. 로드/저장 유닛은 로드/저장 동작들을 실행하도록 구성될 수 있다. 제어 회로는, 재정렬 버퍼가 인터럽트가능한 포인트에 명령어 동작들을 리타이어할 것이고 로드/저장 유닛이 특정 시간 기간 내에 인터럽트가능한 포인트에 대한 로드/저장 동작들을 완료할 것이라는 결정에 기초하여 프로세서에 의해 수신된 인터럽트 요청에 대한 확인응답(Ack) 응답을 생성하도록 구성될 수 있다. 제어 회로는 재정렬 버퍼 및 로드/저장 유닛 중 적어도 하나가 특정 시간 기간 내에 인터럽트가능한 포인트에 도달하지 않을 것이라는 결정에 기초하여 인터럽트 요청에 대한 비-확인응답(Nack) 응답을 생성하도록 구성될 수 있다. 일 실시예에서, 결정은 재정렬 버퍼가 임계치보다 큰 잠재적 실행 레이턴시를 갖는 적어도 하나의 명령어 동작을 갖는 것에 기초한 Nack 응답일 수 있다. 일 실시예에서, 결정은 재정렬 버퍼가 인터럽트들이 마스킹되게 하는 적어도 하나의 명령어 동작을 갖는 것에 기초한 Nack 응답일 수 있다. 일 실시예에서, 결정은 로드/저장 유닛이 현저한 디바이스 어드레스 공간에 대한 적어도 하나의 로드/저장 동작을 갖는 것에 기초한 Nack 응답이다.
일 실시예에서, 방법은 인터럽트 제어기에서 제1 인터럽트 소스로부터 인터럽트를 수신하는 단계를 포함한다. 방법은 인터럽트를 복수의 클러스터 인터럽트 제어기들에 전달하려고 연속으로 시도하는 제1 반복을 수행하는 단계를 더 포함할 수 있다. 복수의 프로세서들을 포함하는 개개의 프로세서 클러스터와 연관된 복수의 클러스터 인터럽트 제어기들의 개개의 클러스터 인터럽트 제어기는 제1 반복에서, 파워 온되는 개개의 프로세서 클러스터 내의 복수의 프로세서들의 서브세트에 인터럽트를 전달하려고 시도하고, 서브세트에 포함되지 않은 개개의 프로세서 클러스터 내의 복수의 프로세서들 중의 프로세서들에 인터럽트를 전달하려고 시도하지 않도록 구성될 수 있다. 방법은 제1 반복에서 복수의 클러스터 인터럽트 제어기들로부터의 비-확인응답(Nack) 응답들에 기초하여, 인터럽트 제어기에 의해 복수의 클러스터 인터럽트 제어기들을 통해 제2 반복을 수행하는 단계를 더 포함할 수 있다. 제2 반복에서, 주어진 클러스터 인터럽트 제어기는 개개의 프로세서 클러스터에서 파워 오프되는 복수의 프로세서들 중의 프로세서들을 파워 온시키고 복수의 프로세서들에 인터럽트를 전달하려고 시도하도록 구성될 수 있다. 일 실시예에서, 복수의 클러스터 인터럽트 제어기들에 인터럽트를 전달하려고 연속으로 시도하는 단계는 복수의 클러스터 인터럽트 제어기들 중 하나로부터의 확인응답 응답에 기초하여 종료된다.
***
본 개시내용은 "실시예" 또는 "실시예들의 그룹들"(예를 들어, "일부 실시예들" 또는 "다양한 실시예들")에 대한 언급들을 포함한다. 실시예들은 개시된 개념들의 상이한 구현들 또는 인스턴스들이다. "실시예", "일 실시예", "특정 실시예" 등에 대한 언급들은 반드시 동일한 실시예를 지칭하는 것은 아니다. 구체적으로 개시된 것들 뿐만 아니라, 본 개시내용의 사상 또는 범주 내에 속하는 수정들 또는 대안들을 포함하는 많은 가능한 실시예들이 고려된다.
본 개시내용은 개시된 실시예들로부터 발생할 수 있는 잠재적인 이점들을 논의할 수 있다. 이들 실시예들의 모든 구현들이 반드시 잠재적인 이점들 중 임의의 또는 모든 것을 나타내는 것은 아닐 것이다. 특정 구현에 대해 이점이 실현되는지 여부는 많은 인자들에 의존하며, 이들 중 일부는 본 개시내용의 범위를 벗어난다. 실제로, 청구항들의 범위 내에 속하는 구현이 임의의 개시된 이점들 중 일부 또는 전부를 나타내지 않을 수 있는 많은 이유들이 있다. 예를 들어, 특정 구현은 개시된 실시예들 중 하나와 함께, 하나 이상의 개시된 이점들을 무효화하거나 약화시키는, 본 개시내용의 범위 밖의 다른 회로부를 포함할 수 있다. 더욱이, 특정 구현의 차선의 설계 실행(예를 들어, 구현 기법들 또는 도구들)은 또한 개시된 이점들을 무효화하거나 약화시킬 수 있다. 숙련된 구현을 가정하더라도, 이점들의 실현은 구현이 전개되는 환경 상황들과 같은 다른 인자들에 여전히 의존할 수 있다. 예를 들어, 특정 구현에 공급되는 입력들은 본 개시내용에서 해결되는 하나 이상의 문제들이 특정 기회에 발생하는 것을 방지할 수 있으며, 그 결과, 그 해결책의 이익이 실현되지 않을 수 있다. 본 개시내용 외부의 가능한 인자들의 존재를 고려할 때, 본 명세서에서 설명되는 임의의 잠재적인 이점들은, 침해를 입증하기 위해 충족되어야 하는 청구항 제한들로서 해석되지 않아야 한다는 것이 명백하게 의도된다. 오히려, 그러한 잠재적 이점들의 식별은 본 개시내용의 이익을 갖는 설계자들에게 이용가능한 개선의 유형(들)을 예시하도록 의도된다. 그러한 이점들이 허용가능하게 설명된다는 것(예를 들어, 특정 이점이 "발생할 수 있다"고 언급함)은 그러한 이점들이 실제로 실현될 수 있는지에 대한 의구심을 전달하도록 의도되는 것이 아니라, 그러한 이점들의 실현이 종종 부가적인 인자들에 의존한다는 기술적 현실을 인식하도록 의도된다.
달리 언급되지 않는 한, 실시예들은 비제한적이다. 즉, 개시된 실시예들은, 특정 특징에 대해 단일 예만이 설명되는 경우에도, 본 개시내용에 기초하여 작성되는 청구항들의 범위를 제한하도록 의도되지 않는다. 개시된 실시예들은, 이에 반하는 본 개시내용의 어떠한 진술도 없이, 제한적이기보다는 예시적인 것으로 의도된다. 따라서, 본 출원은 개시된 실시예들을 커버하는 청구항들뿐만 아니라, 본 개시내용의 이익을 갖는 당업자에게 명백할 그러한 대안들, 수정들 및 등가물들을 허용하도록 의도된다.
예를 들어, 본 출원에서의 특징들은 임의의 적합한 방식으로 조합될 수 있다. 따라서, 특징부들의 임의의 그러한 조합에 대해 본 출원(또는 그에 대한 우선권을 주장하는 출원)의 심사 동안에 새로운 청구범위가 작성될 수 있다. 특히, 첨부된 청구항들을 참조하면, 종속 청구항들로부터의 특징들은 다른 독립 청구항들로부터 의존하는 청구항들을 포함하여, 적절한 경우 다른 종속 청구항들의 특징들과 조합될 수 있다. 유사하게, 개개의 독립 청구항들로부터의 특징들은 적절한 경우 조합될 수 있다.
따라서, 첨부된 종속 청구항들은 각각이 단일의 다른 청구항들에 의존하도록 작성될 수 있지만, 부가적인 종속성들이 또한 고려된다. 본 개시내용과 일치하는 종속물에서의 특징들의 임의의 조합들이 고려되며, 이러한 또는 다른 애플리케이션에서 청구될 수 있다. 간단히 말하면, 조합들은 첨부된 청구항들에 구체적으로 열거된 것들로 제한되지 않는다.
적절한 경우, 하나의 포맷 또는 법정 유형(예를 들어, 장치)으로 작성된 청구항들은 다른 포맷 또는 법정 유형(예를 들어, 방법)의 대응하는 청구항들을 지원하도록 의도되는 것으로 또한 고려된다.
***
본 개시내용은 법적인 문서이기 때문에, 다양한 용어들 및 문구들은 행정적 및 사법적 해석의 대상이 될 수 있다. 본 개시내용 전반에 걸쳐 제공되는 정의들뿐만 아니라 다음의 단락들이 본 개시내용에 기초하여 작성되는 청구항들을 해석하는 방법을 결정하는 데 사용될 것이라는 공지가 본 명세서에 주어진다.
물품의 단수 형태(즉, "a", "an" 또는 "the"가 선행되는 명사 또는 명사 문구)에 대한 언급들은, 문맥상 명확하게 달리 지시되지 않는 한, "하나 이상"을 의미하는 것으로 의도된다. 따라서, 청구항에서 "항목"에 대한 언급은, 수반되는 상황 없이, 항목의 추가적인 인스턴스들을 배제하지 않는다. "복수"의 항목들은 항목들 중 2개 이상의 세트를 지칭한다.
"~할 수 있다"라는 단어는 본 명세서에서 강제적인 의미(즉, ~ 해야 하는)가 아니라 허용적인 의미(즉, ~할 가능성을 갖는, ~할 수 있는)로 사용된다.
용어들 "포함하는"("comprising" 및 "including") 및 이들의 형태는 개방형(open-ended)이며, "포함하지만 이로 한정되지 않는"을 의미한다.
용어 "또는"이 옵션들의 리스트에 관하여 본 개시내용에서 사용될 때, 문맥이 달리 제공하지 않는 한, 일반적으로 포괄적인 의미로 사용되는 것으로 이해될 것이다. 따라서, "x 또는 y"의 언급은 "x 또는 y, 또는 둘 모두"와 동등하고, 따라서 1) x지만 y 아님, 2) y지만 x 아님 및 3) x 및 y 둘 모두를 커버한다. 반면에, "둘 모두가 아니라 x 또는 y 중 어느 하나"와 같은 문구는 "또는"이 배타적인 의미로 사용되고 있다는 것을 명확하게 한다.
"w, x, y, 또는 z, 또는 이들의 임의의 조합" 또는 "... w, x, y, 및 z 중 적어도 하나"의 언급은 세트 내의 요소들의 총 개수까지 단일 요소를 수반하는 모든 가능성들을 커버하도록 의도된다. 예를 들어, 세트 [w, x, y, z]가 주어지면, 이러한 문구들은 세트의 임의의 단일 요소(예를 들어, w지만 x, y, 또는 z 아님), 임의의 2개의 요소들(예를 들어, w 및 x지만 y 또는 z 아님), 임의의 3개의 요소들(예를 들어, w, x 및 y지만, z 아님) 및 4개의 요소들 모두를 커버한다. 따라서, "... w, x, y, 및 z 중 적어도 하나"라는 문구는 세트 [w, x, y, z]의 적어도 하나의 요소를 지칭하고, 이로써 요소들의 이러한 리스트 내의 모든 가능한 조합들을 커버한다. 이 문구는 w의 적어도 하나의 인스턴스, x의 적어도 하나의 인스턴스, y의 적어도 하나의 인스턴스, 및 z의 적어도 하나의 인스턴스가 있음을 요구하도록 해석되지 않아야 한다.
본 개시내용에서 다양한 "라벨들"이 명사들 또는 명사 문구들에 선행할 수 있다. 문맥이 달리 제공하지 않는 한, 특징에 대해 사용되는 상이한 라벨들(예를 들어, "제1 회로", "제2 회로", "특정 회로", "주어진 회로" 등)은 특징의 상이한 인스턴스들을 지칭한다. 부가적으로, 특징에 적용될 때, "제1", "제2" 및 "제3" 라벨들은, 달리 언급되지 않는 한, 어떠한 유형의 순서화(예를 들어, 공간적, 시간적, 논리적 등)를 의미하지 않는다.
문구 "기초하여"는 결정에 영향을 주는 하나 이상의 인자들을 설명하기 위해 사용된다. 이러한 용어는 부가적인 인자들이 결정에 영향을 줄 수 있는 가능성을 배제하지 않는다. 즉, 결정은 단지 특정된 인자들에 기초하거나 또는 그 특정된 인자들뿐만 아니라 다른, 불특정된 인자들에 기초할 수 있다. "B에 기초하여 A를 결정한다"라는 문구를 고려한다. 이러한 문구는 B가 A를 결정하는 데 사용되거나 A의 결정에 영향을 주는 인자라는 것을 명시한다. 이러한 문구는 A의 결정이 C와 같은 일부 다른 인자에 또한 기초할 수 있음을 배제하지 않는다. 또한, 이 문구는 A가 B만에 기초하여 결정되는 실시예를 커버하도록 의도된다. 본 명세서에서 사용되는 바와 같이, "에 기초하여"라는 문구는 "적어도 부분적으로 기초하여"라는 문구와 동의어이다.
문구들 "~ 에 응답하여" 및 "~ 에 응답으로"는 효과를 트리거하는 하나 이상의 인자들을 설명한다. 이러한 문구는 부가적인 인자들이 특정 인자들과 공동으로 또는 특정 인자들과는 독립적으로 영향을 주거나 또는 달리 효과를 트리거할 수 있는 가능성을 배제하지 않는다. 즉, 효과는 단지 이들 인자들에만 응답할 수 있거나 또는 특정 인자들 뿐만 아니라 다른 불특정 인자들에 응답할 수 있다. "B에 응답하여 A를 수행한다"라는 문구를 고려한다. 이러한 문구는 B가 A의 수행을 트리거하는 또는 A에 대한 특정 결과를 트리거하는 인자라는 것을 명시한다. 이러한 문구는 A를 수행하는 것이 C와 같은 일부 다른 인자에 또한 응답할 수 있음을 배제하지 않는다. 이러한 문구는 또한 A를 수행하는 것이 B와 C에 응답하여 공동으로 수행될 수 있다는 것을 배제하지 않는다. 이러한 문구는 또한 A가 B에만 응답하여 수행되는 실시예를 커버하도록 의도된다. 본 명세서에서 사용되는 바와 같이, 문구 "응답하여"는 문구 "적어도 부분적으로 응답하여"와 동의어이다. 유사하게, 문구 "~ 에 응답하여"는 문구 "적어도 부분적으로 응답하여"와 동의어이다.
***
본 개시내용 내에서, 상이한 엔티티들(이는, "유닛들", "회로들", 다른 컴포넌트들 등으로 다양하게 지칭될 수 있음)은 하나 이상의 태스크들 또는 동작들을 수행하도록 "구성된" 것으로 설명되거나 또는 청구될 수 있다. 이러한 표현-[하나 이상의 태스크들을 수행]하도록 구성된 [엔티티]-은 본 명세서에서 구조(즉, 물리적인 것)를 지칭하는 데 사용된다. 더 상세하게는, 이러한 표현은 이러한 구조가 동작 동안 하나 이상의 태스크들을 수행하도록 배열됨을 나타내는 데 사용된다. 구조는 그 구조가 현재 동작되고 있지 않더라도 일부 태스크를 수행하도록 "구성된다"고 말할 수 있다. 따라서, 일부 태스크를 수행"하도록 구성된" 것으로 설명된 또는 언급된 엔티티는 디바이스, 회로, 태스크를 구현하도록 실행가능한 프로그램 명령어들을 저장하는 메모리 및 프로세서 유닛을 갖는 시스템 등과 같은 물리적인 것을 지칭한다. 이러한 문구는 본 명세서에서 무형인 것을 지칭하기 위해 사용되지는 않는다.
일부 경우들에서, 다양한 유닛들/회로들/컴포넌트들은 태스크 또는 동작들의 세트를 수행하는 것으로 본 명세서에서 설명될 수 있다. 이들 엔티티들은, 구체적으로 언급되지 않더라도, 그러한 태스크들/동작들을 수행하도록 "구성"된다는 것이 이해된다.
용어 "~ 하도록 구성된"은 "~하도록 구성가능한"을 의미하도록 의도되지 않는다. 예를 들어, 프로그래밍되지 않은 FPGA는 특정 기능을 수행하도록 "구성된" 것으로 간주되지 않을 것이다. 그러나, 이러한 프로그래밍되지 않은 FPGA는 그 기능을 수행하도록 "구성가능"할 수 있다. 적절한 프로그래밍 후에, 이어서 FPGA는 특정 기능을 수행하도록 "구성된다"고 말할 수 있다.
본 개시내용에 기초한 미국 특허 출원들의 목적들을 위해, 구조가 하나 이상의 태스크들을 수행하도록 "구성"된다고 청구항에서 언급하는 것은 명백히 그 청구항 요소에 대하여 35 U.S.C. §112(f)를 적용하지 않도록 의도된다. 출원인이 본 개시내용에 기초하여 미국 특허 출원의 심사 동안 섹션 112(f)의 적용을 원하면, [기능을 수행]"하기 위한 수단" 구조를 이용하여 청구항 요소들을 열거할 것이다.
상이한 "회로들"이 본 개시내용에서 설명될 수 있다. 이러한 회로들 또는 "회로부"는 조합 로직, 클로킹된 저장 디바이스들(예를 들어, 플립-플롭들, 레지스터들, 래치들 등), 유한 상태 머신들, 메모리(예를 들어, 랜덤 액세스 메모리, 내장형 동적 랜덤 액세스 메모리), 프로그래밍가능 로직 어레이들 등과 같은 다양한 유형들의 회로 요소들을 포함하는 하드웨어를 구성한다. 회로부는 맞춤 설계되거나 표준 라이브러리들로부터 취해질 수 있다. 다양한 구현들에서, 회로부는 적절하게 디지털 컴포넌트들, 아날로그 컴포넌트들, 또는 둘 모두의 조합을 포함할 수 있다. 특정 유형들의 회로들은 일반적으로 "유닛들"(예를 들어, 디코딩 유닛, 산술 로직 유닛(ALU), 기능 유닛, 메모리 관리 유닛(MMU) 등)로 지칭될 수 있다. 그러한 유닛들은 또한 회로들 또는 회로를 지칭한다.
따라서, 도면들에 예시되고 본 명세서에서 설명된 개시된 회로들/유닛들/컴포넌트들 및 다른 요소들은 이전 단락에서 설명된 것들과 같은 하드웨어 요소들을 포함한다. 많은 경우들에서, 특정 회로 내의 하드웨어 요소들의 내부 배열은 그 회로의 기능을 설명함으로써 특정될 수 있다. 예를 들어, 특정 "디코딩 유닛"은 "명령어의 오피코드를 프로세싱하고 그 명령어를 복수의 기능 유닛들 중 하나 이상에 라우팅하는" 기능을 수행하는 것으로 설명될 수 있으며, 이는 디코딩 유닛이 이러한 기능을 수행하도록 "구성됨"을 의미한다. 이러한 기능의 규격은, 컴퓨터 분야의 당업자들에게, 회로에 대한 가능한 구조들의 세트를 암시하기에 충분하다.
다양한 실시예들에서, 이전 단락에서 논의된 바와 같이, 회로들, 유닛들, 및 이들이 구현하도록 구성된 기능들 또는 동작들에 의해 정의된 다른 요소들, 배열 및 그러한 회로들/유닛들/컴포넌트들은 서로에 대해 그리고 이들이 상호작용하는 방식으로, 마이크로 아키텍처 정의의 물리적 구현을 형성하도록 집적 회로에서 궁극적으로 제조되거나 FPGA로 프로그래밍되는 하드웨어의 마이크로 아키텍처 정의를 형성한다. 따라서, 마이크로아키텍처 정의는 많은 물리적 구현들이 유도될 수 있는 구조로서 당업자들에 의해 인식되며, 이들 모두는 마이크로아키텍처 정의에 의해 설명된 더 넓은 구조에 속한다. 즉, 본 개시내용에 따라 공급되는 마이크로아키텍처 정의를 제공받는 당업자는, 과도한 실험 없이 그리고 통상의 기술의 적용으로, 회로들/유닛들/컴포넌트들의 디스크립션을 베릴로그 또는 VHDL과 같은 하드웨어 디스크립션 언어(HDL)로 코딩함으로써 구조를 구현할 수 있다. HDL 디스크립션은 종종, 기능적으로 보일 수 있는 방식으로 표현된다. 그러나, 당업자들에게, 이러한 HDL 디스크립션은 회로, 유닛 또는 컴포넌트의 구조를 다음 레벨의 구현 세부사항으로 변환하는 데 사용되는 방식이다. 그러한 HDL 디스크립션은 (통상적으로 합성가능하지 않은) 거동 코드, (거동 코드와는 대조적으로, 통상적으로 합성가능한) 레지스터 전송 언어(RTL) 코드, 또는 구조적 코드(예를 들어, 로직 게이트들 및 그들의 연결성을 특정하는 넷리스트)의 형태를 취할 수 있다. HDL 디스크립션은 주어진 집적 회로 제조 기술을 위해 설계된 셀들의 라이브러리에 대해 순차적으로 합성될 수 있고, 타이밍, 전력 및 다른 이유들로 인해 수정되어 최종 설계 데이터베이스를 생성할 수 있으며, 이는 파운드리(foundry)로 송신되어 마스크들을 생성하고 궁극적으로 집적 회로를 생성할 수 있다. 일부 하드웨어 회로들 또는 그의 부분들은 또한 회로도 편집기(schematic editor)로 맞춤 설계될 수 있고 합성된 회로부와 함께 집적 회로 설계 내로 캡처될 수 있다. 집적 회로들은 트랜지스터들, 및 다른 회로 요소들(예를 들어, 커패시터들, 저항기들, 인덕터들 등과 같은 수동 요소들) 및 트랜지스터들과 회로 요소들 사이의 상호연결부를 포함할 수 있다. 일부 실시예들은 하드웨어 회로들을 구현하기 위해 함께 커플링된 다수의 집적 회로들을 구현할 수 있고, 그리고/또는 일부 실시예들에서는 이산 요소들이 사용될 수 있다. 대안적으로, HDL 설계는 FPGA(Field Programmable Gate Array)와 같은 프로그래밍가능 로직 어레이로 합성될 수 있으며 FPGA에서 구현될 수 있다. 회로들의 그룹의 설계와 이들 회로들의 후속 저레벨 구현 사이의 이러한 디커플링은 일반적으로, 회로 또는 로직 설계자가 회로가 무엇을 하도록 구성되는지의 설명을 넘어서 저레벨 구현에 대한 특정 세트의 구조들을 특정하지 않는 시나리오를 도출하는데, 이는 이러한 프로세스가 회로 구현 프로세스의 상이한 스테이지에서 수행되기 때문이다.
회로 요소들의 많은 상이한 저-레벨 조합들이 회로의 동일한 규격을 구현하는 데 사용될 수 있다는 사실은 그 회로에 대한 다수의 등가 구조들을 초래한다. 언급된 바와 같이, 이러한 저레벨 회로 구현들은 제조 기술의 변화들, 집적 회로를 제조하기 위해 선택된 파운드리, 특정 프로젝트를 위해 제공된 셀들의 라이브러리 등에 따라 변할 수 있다. 많은 경우들에서, 이들 상이한 구현들을 생성하기 위해 상이한 설계 도구들 또는 방법론들에 의해 이루어지는 선택들은 임의적일 수 있다.
게다가, 회로의 특정 기능 규격의 단일 구현이 주어진 실시예에 대해 많은 수의 디바이스들(예를 들어, 수백만 개의 트랜지스터들)을 포함하는 것이 일반적이다. 따라서, 엄청난 볼륨의 이러한 정보는, 등가의 가능한 구현들의 방대한 어레이는 말할 것도 없이, 단일 실시예를 구현하는 데 사용되는 저레벨 구조의 완전한 설명을 제공하는 것을 비실용적으로 만든다. 이러한 이유로, 본 개시내용은 업계에서 일반적으로 사용되는 기능적 속기(shorthand)를 사용하여 회로들의 구조를 설명한다.
일단 위의 개시내용이 완전히 이해되면 다수의 변형들 및 수정들이 당업자들에게 명백해질 것이다. 다음의 청구범위는 모든 그러한 변형들 및 수정들을 망라하는 것으로 해석되도록 의도된다.

Claims (20)

  1. 시스템으로서,
    제1 인터럽트 제어기를 포함하는 제1 집적 회로(IC); 및
    상기 제1 IC와 공동 패키징된 제2 IC를 포함하고, 상기 제2 IC는,
    제2 복수의 클러스터 인터럽트 제어기들 - 상기 제2 복수의 클러스터 인터럽트 제어기들의 주어진 클러스터 인터럽트 제어기는 제2 복수의 프로세서들과 연관됨 -; 및
    상기 제2 복수의 클러스터 인터럽트 제어기들에 커플링된 제2 인터럽트 제어기를 포함하고, 상기 제2 인터럽트 제어기는,
    상기 제2 IC 상의 제1 인터럽트 소스로부터의 인터럽트에 응답하여, 상기 제2 복수의 클러스터 인터럽트 제어기들에 상기 인터럽트를 전달하려고 시도하고; 그리고
    상기 제2 복수의 클러스터 인터럽트 제어기들로부터 비-확인응답(NACK) 응답들을 수신하는 것에 응답하여, 상기 제1 인터럽트 제어기에 상기 인터럽트를 통신하도록 구성되는, 시스템.
  2. 제1항에 있어서, 상기 제2 IC 및 상기 제1 IC는 이종(heterogeneous)인, 시스템.
  3. 제1항에 있어서, 상기 제1 IC는 제1 복수의 클러스터 인터럽트 제어기들을 더 포함하고, 상기 제1 복수의 클러스터 인터럽트 제어기들의 주어진 클러스터 인터럽트 제어기는 제1 복수의 프로세서들과 연관되고;
    상기 제1 인터럽트 제어기는 상기 제1 복수의 클러스터 인터럽트 제어기들에 상기 인터럽트를 전달하려고 시도하도록 구성되는, 시스템.
  4. 제3항에 있어서, 상기 제1 인터럽트 제어기는,
    상기 제1 복수의 클러스터 인터럽트 제어기들의 특정 클러스터 인터럽트 제어기로부터 확인응답(ACK) 응답을 수신하는 것에 응답하여, 상기 제2 인터럽트 제어기에 ACK를 전송하도록 추가로 구성되고;
    상기 제2 인터럽트 제어기는 상기 인터럽트를 전달하려는 시도들을 중단하도록 추가로 구성되는, 시스템.
  5. 제1항에 있어서, 상기 제2 인터럽트 제어기는,
    상기 제2 복수의 클러스터 인터럽트 제어기들에 상기 인터럽트를 전달하려는 시도에서 상기 제2 복수의 클러스터 인터럽트 제어기들의 적어도 특정 클러스터 인터럽트 제어기에 상기 인터럽트를 통신하도록 추가로 구성되고;
    상기 특정 클러스터 인터럽트 제어기는,
    상기 제2 IC 내의 상기 제2 복수의 프로세서들의 특정 서브세트에 상기 인터럽트를 전달하려고 시도하도록 구성되는, 시스템.
  6. 제5항에 있어서, 상기 특정 클러스터 인터럽트 제어기는,
    상기 프로세서들의 상기 특정 서브세트 중 어느 것도 상기 인터럽트를 취할 수 없다고 결정하는 것에 응답하여, 상기 제2 인터럽트 제어기에 NACK를 전송하도록 추가로 구성되는, 시스템.
  7. 제6항에 있어서, 상기 제2 인터럽트 제어기는,
    상기 특정 클러스터 인터럽트 제어기로부터 상기 NACK를 수신하는 것에 응답하여, 상기 제2 복수의 클러스터 인터럽트 제어기들의 적어도 상이한 클러스터 인터럽트 제어기에 상기 인터럽트를 통신하도록 추가로 구성되고;
    상기 상이한 클러스터 인터럽트 제어기는,
    상기 제2 IC 내의 상기 제2 복수의 프로세서들의 상이한 서브세트에 상기 인터럽트를 전달하려고 시도하도록 구성되는, 시스템.
  8. 제5항에 있어서, 상기 특정 클러스터 인터럽트 제어기는,
    상기 제2 인터럽트 제어기로부터의 표시를 사용하여, 상기 인터럽트를 전달하려는 시도 동안 상기 제2 IC 내의 상기 제2 복수의 프로세서들의 상기 특정 서브세트의 하나 이상의 프로세서들을 파워 온시킬지 여부를 결정하도록 추가로 구성되는, 시스템.
  9. 제5항에 있어서, 상기 특정 클러스터 인터럽트 제어기는,
    프로세서들의 상기 특정 서브세트의 적어도 하나의 프로세서가 상기 인터럽트를 취할 수 있다고 결정하는 것에 응답하여, 상기 제2 인터럽트 제어기에 ACK를 전송하도록 추가로 구성되고;
    상기 제2 인터럽트 제어기는,
    상기 특정 클러스터 인터럽트 제어기로부터 상기 ACK를 수신하는 것에 응답하여, 상기 인터럽트를 전달하려는 시도들을 중단하도록 추가로 구성되는, 시스템.
  10. 방법으로서,
    제1 집적 회로(IC) 상의 제1 인터럽트 제어기에 의해 상기 제1 IC와 공동 패키징된 제2 IC 상의 제2 인터럽트 제어기로부터, 상기 제2 IC 상의 특정 인터럽트 소스로부터의 인터럽트를 수신하는 단계;
    상기 제1 인터럽트 제어기에 의해, 상기 제1 IC 상의 제1 클러스터 인터럽트 제어기에 상기 인터럽트를 전달하려고 시도하는 단계; 및
    상기 제1 클러스터 인터럽트 제어기로부터 비-확인응답(NACK) 응답을 수신하는 것에 응답하여, 상기 제1 인터럽트 제어기에 의해, 상기 인터럽트를 제2 클러스터 인터럽트 제어기에 전달하려고 시도하는 단계를 포함하는, 방법.
  11. 제10항에 있어서, 상기 제2 클러스터 인터럽트 제어기는 상기 제2 IC 상에 포함되는, 방법.
  12. 제11항에 있어서, 상기 제2 클러스터 인터럽트 제어기에 상기 인터럽트를 전달하려고 시도하는 단계는 상기 제1 인터럽트 제어기에 의해, 상기 제2 인터럽트 제어기에 상기 인터럽트를 통신하는 단계를 포함하는, 방법.
  13. 제11항에 있어서, 상기 제2 클러스터 인터럽트 제어기로부터 NACK 응답을 수신하는 것에 응답하여, 상기 제1 인터럽트 제어기에 의해, 제3 IC 상에 포함된 제3 클러스터 인터럽트 제어기에 상기 인터럽트를 전달하려고 시도하는 단계를 더 포함하는, 방법.
  14. 제13항에 있어서, 상기 제1 인터럽트 제어기에 의해, 가장 최근에 전달된 알고리즘을 사용하여 전달을 시도하기 위해 상기 제1, 제2, 및 제3 클러스터 인터럽트 제어기들 중 특정 클러스터 인터럽트 제어기를 선택하는 단계를 더 포함하는, 방법.
  15. 장치로서,
    제1 집적 회로(IC); 및
    제2 IC를 포함하고,
    상기 제1 IC는,
    제1 복수의 클러스터 인터럽트 제어기들 - 상기 제1 복수의 클러스터 인터럽트 제어기들의 개개의 클러스터 인터럽트 제어기는 제1 복수의 프로세서들과 연관됨 -; 및
    상기 제1 복수의 클러스터 인터럽트 제어기들에 커플링된 제1 인터럽트 제어기를 포함하고,
    상기 제2 IC는 상기 제1 IC와 공동 패키징되고 제2 인터럽트 제어기를 포함하고, 상기 제2 인터럽트 제어기는,
    상기 제2 IC 상의 특정 인터럽트 소스로부터의 인터럽트에 응답하여, 상기 제1 인터럽트 제어기에 상기 인터럽트를 통신하도록 구성되고;
    상기 제1 인터럽트 제어기는 상기 제1 복수의 클러스터 인터럽트 제어기들에 상기 인터럽트를 전달하려고 시도하도록 구성되는, 장치.
  16. 제15항에 있어서, 제3 인터럽트 제어기를 포함하는 제3 IC를 더 포함하고;
    상기 제1 인터럽트 제어기는,
    상기 제1 복수의 클러스터 인터럽트 제어기들로부터 비-확인응답(NACK) 응답들을 수신하는 것에 응답하여, 상기 제3 인터럽트 제어기에 상기 인터럽트를 통신하도록 구성되는, 장치.
  17. 제16항에 있어서, 상기 제3 인터럽트 제어기는 상기 제3 IC 내의 제3 복수의 프로세서들과 연관된 제3 복수의 클러스터 인터럽트 제어기들에 상기 인터럽트를 전달하려고 시도하도록 구성되는, 장치.
  18. 제17항에 있어서, 상기 제3 인터럽트 제어기는,
    상기 제1 인터럽트 제어기로부터, 상기 인터럽트를 전달하려는 시도들 동안 상기 제3 IC에서 상기 제3 복수의 프로세서들 중 유휴 프로세서들을 파워 온시킬지 여부의 표시를 수신하도록 추가로 구성되는, 장치.
  19. 제17항에 있어서, 상기 제3 인터럽트 제어기는,
    상기 제3 복수의 프로세서들 중 적어도 하나의 프로세서가 상기 인터럽트를 취할 수 있다고 결정하는 것에 응답하여, 상기 제1 인터럽트 제어기에 확인응답(ACK) 응답을 전송하도록 추가로 구성되고;
    상기 제1 인터럽트 제어기는,
    상기 제3 인터럽트 제어기로부터 상기 ACK를 수신하는 것에 응답하여, 상기 인터럽트를 전달하려는 추가 시도들을 중단하도록 추가로 구성되는, 장치.
  20. 제15항에 있어서, 상기 제1 인터럽트 제어기는,
    상기 인터럽트를 전달하려고 시도하기 위해 상기 제1 복수의 클러스터 인터럽트 제어기들을 통해 제1 반복을 수행하는 것; 및
    상기 제1 반복에서 상기 제1 복수의 클러스터 인터럽트 제어기들로부터의 비-확인응답(NACK) 응답들에 기초하여, 상기 제1 복수의 클러스터 인터럽트 제어기들을 통해 제2 반복을 수행하는 것
    에 의해 상기 제1 복수의 클러스터 인터럽트 제어기들에 상기 인터럽트를 전달하려고 시도하도록 추가로 구성되고, 상기 제2 반복은 상기 제1 반복과 상이한 유형의 전달 요청을 포함하는, 장치.
KR1020237042801A 2020-09-11 2021-09-10 스케일러블 인터럽트들 KR20230170995A (ko)

Applications Claiming Priority (6)

Application Number Priority Date Filing Date Title
US202063077375P 2020-09-11 2020-09-11
US63/077,375 2020-09-11
US17/246,311 US11630789B2 (en) 2020-09-11 2021-04-30 Scalable interrupts
US17/246,311 2021-04-30
PCT/US2021/049780 WO2022056207A1 (en) 2020-09-11 2021-09-10 Scalable interrupts
KR1020237008723A KR102614515B1 (ko) 2020-09-11 2021-09-10 스케일러블 인터럽트들

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020237008723A Division KR102614515B1 (ko) 2020-09-11 2021-09-10 스케일러블 인터럽트들

Publications (1)

Publication Number Publication Date
KR20230170995A true KR20230170995A (ko) 2023-12-19

Family

ID=80626671

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020237042801A KR20230170995A (ko) 2020-09-11 2021-09-10 스케일러블 인터럽트들
KR1020237008723A KR102614515B1 (ko) 2020-09-11 2021-09-10 스케일러블 인터럽트들

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020237008723A KR102614515B1 (ko) 2020-09-11 2021-09-10 스케일러블 인터럽트들

Country Status (5)

Country Link
US (2) US11630789B2 (ko)
KR (2) KR20230170995A (ko)
CN (1) CN116157777A (ko)
DE (1) DE112021004724T5 (ko)
WO (1) WO2022056207A1 (ko)

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7191349B2 (en) 2002-12-26 2007-03-13 Intel Corporation Mechanism for processor power state aware distribution of lowest priority interrupt
US7003611B2 (en) * 2003-09-30 2006-02-21 International Business Machines Corporation Method and apparatus for handling interrupts using a set of interrupts servers associated with presentation controllers
JP2008065713A (ja) 2006-09-08 2008-03-21 Canon Inc マルチプロセッサシステム及び割込み制御方法
KR20080048307A (ko) * 2006-11-28 2008-06-02 삼성전자주식회사 멀티 프로세서 시스템의 인터럽트 전달 장치 및 방법
KR20080057150A (ko) * 2006-12-19 2008-06-24 삼성전자주식회사 무선 네트워크 시스템 및 상기 무선 네트워크 시스템을구성하는 방법
US7849247B2 (en) * 2008-10-14 2010-12-07 Freescale Semiconductor, Inc. Interrupt controller for accelerated interrupt handling in a data processing system and method thereof
US8260996B2 (en) 2009-04-24 2012-09-04 Empire Technology Development Llc Interrupt optimization for multiprocessors
KR101717494B1 (ko) * 2010-10-08 2017-03-28 삼성전자주식회사 인터럽트 처리 장치 및 방법
US8959270B2 (en) 2010-12-07 2015-02-17 Apple Inc. Interrupt distribution scheme
US8458386B2 (en) * 2010-12-07 2013-06-04 Apple Inc. Atomic interrupt masking in an interrupt controller to prevent delivery of same interrupt vector for consecutive interrupt acknowledgements
EP2490100B1 (en) 2011-02-14 2014-10-15 2236008 Ontario Inc. Suspendable interrupts for processor idle management
US8963933B2 (en) 2012-07-23 2015-02-24 Advanced Micro Devices, Inc. Method for urgency-based preemption of a process
US9009368B2 (en) 2012-10-23 2015-04-14 Advanced Micro Devices, Inc. Interrupt latency performance counters
US9678564B2 (en) * 2012-12-21 2017-06-13 Nxp B.V. Multiprocessor system with interrupt distributor
US9442869B2 (en) 2014-01-24 2016-09-13 Texas Instruments Incorporated Programmable interrupt routing in multiprocessor devices
ES2929512T3 (es) 2014-09-26 2022-11-29 Intel Corp Aparato y método para configurar conjuntos de interrupciones
US10394730B2 (en) * 2014-11-14 2019-08-27 Cavium, Llc Distributed interrupt scheme in a multi-processor system
US10067892B2 (en) * 2015-03-06 2018-09-04 Microchip Technology Incorporated Microcontroller or microprocessor with dual mode interrupt
US9747225B2 (en) * 2015-05-05 2017-08-29 Microsoft Technology Licensing, Llc Interrupt controller
US10585826B2 (en) * 2016-01-25 2020-03-10 Advanced Micro Devices, Inc. Using processor types for processing interrupts in a computing device
US11113216B2 (en) * 2019-03-20 2021-09-07 Mediatek Inc. Dispatching interrupts in a multi-processor system based on power and performance factors
US11327786B2 (en) * 2020-07-21 2022-05-10 Arm Limited Distributing interrupt request to be handled by target virtual processor

Also Published As

Publication number Publication date
WO2022056207A1 (en) 2022-03-17
US20230251985A1 (en) 2023-08-10
KR20230069927A (ko) 2023-05-19
KR102614515B1 (ko) 2023-12-19
DE112021004724T5 (de) 2023-07-27
US11630789B2 (en) 2023-04-18
US20220083484A1 (en) 2022-03-17
CN116157777A (zh) 2023-05-23

Similar Documents

Publication Publication Date Title
TWI731908B (zh) 使用硬體佇列裝置的多核心通訊加速的設備
US20090037932A1 (en) Mechanism for broadcasting system management interrupts to other processors in a computer system
US20140375658A1 (en) Processor Core to Graphics Processor Task Scheduling and Execution
US11803471B2 (en) Scalable system on a chip
US11650825B2 (en) Coprocessor synchronizing instruction suppression
US11893413B2 (en) Virtual channel support using write table
US20240045680A1 (en) Coprocessor Register Renaming
US20240095037A1 (en) Coprocessor Prefetcher
US11755331B2 (en) Writeback hazard elimination using a plurality of temporary result-storage elements
KR102614515B1 (ko) 스케일러블 인터럽트들
US20160350120A1 (en) Mechanism to preclude load replays dependent on long load cycles in an out-of-order processor
KR20230076814A (ko) 제외 영역을 갖는 dsb 동작
EP3032405B1 (en) Mechanism to preclude load replays dependent on off-die control element access in an out-of-order processor
US11741009B1 (en) Request ordering in a cache
US11809874B2 (en) Conditional instructions distribution and execution on pipelines having different latencies for mispredictions
US20230244494A1 (en) Conditional Instructions Prediction
US11556485B1 (en) Processor with reduced interrupt latency
US11886340B1 (en) Real-time processing in computer systems
Garside et al. The amulet chips: Architectural development for asynchronous microprocessors
WO2023150114A1 (en) Conditional instructions prediction
US10514925B1 (en) Load speculation recovery
EP3055768B1 (en) Mechanism to preclude uncacheable-dependent load replays in out-of-order processor
EP3055769B1 (en) Mechanism to preclude load replays dependent on page walks in out-of-order processor
US11630771B2 (en) Poison mechanisms for deferred invalidates
US11513848B2 (en) Critical agent identification to modify bandwidth allocation in a virtual channel

Legal Events

Date Code Title Description
A107 Divisional application of patent