KR20230076814A - 제외 영역을 갖는 dsb 동작 - Google Patents

제외 영역을 갖는 dsb 동작 Download PDF

Info

Publication number
KR20230076814A
KR20230076814A KR1020237008732A KR20237008732A KR20230076814A KR 20230076814 A KR20230076814 A KR 20230076814A KR 1020237008732 A KR1020237008732 A KR 1020237008732A KR 20237008732 A KR20237008732 A KR 20237008732A KR 20230076814 A KR20230076814 A KR 20230076814A
Authority
KR
South Korea
Prior art keywords
processor
load
store
operation request
data barrier
Prior art date
Application number
KR1020237008732A
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 KR20230076814A publication Critical patent/KR20230076814A/ko

Links

Images

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/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/522Barrier synchronisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0831Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
    • G06F12/0833Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means in combination with broadcast means (e.g. for invalidation or updating)
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30047Prefetch instructions; cache control instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30101Special purpose registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7807System on chip, i.e. computer system on a single chip; System in package, i.e. computer system on one or more chips in a single package
    • G06F15/781On-chip cache; Off-chip memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7839Architectures of general purpose stored program computers comprising a single central processing unit with memory
    • G06F15/7842Architectures of general purpose stored program computers comprising a single central processing unit with memory on one IC chip (single chip microcontrollers)
    • G06F15/7846On-chip cache and off-chip main memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/68Details of translation look-aside buffer [TLB]
    • G06F2212/683Invalidation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Multi Processors (AREA)

Abstract

데이터 동기화 장벽 동작들에 관한 기법들이 개시된다. 시스템은, 시스템에 포함되는 제2 프로세서로부터 데이터 장벽 동작 요청을 수신할 수 있는 제1 프로세서를 포함한다. 제2 프로세서로부터 그 데이터 장벽 동작 요청을 수신하는 것에 기초하여, 제1 프로세서는, 제외 영역 외부의 어드레스들에 관한 제1 프로세서에 의해 실행되는 미처리된 로드/저장 동작들이 완료되었다는 것을 보장할 수 있다. 제1 프로세서가 데이터 장벽 동작 요청이 완료된다고 응답할 때 제외 영역 내의 어드레스들에 관한 하나 이상의 로드/저장 동작들이 미처리되고 완료되지 않은 경우에도, 제1 프로세서는, 데이터 장벽 동작 요청이 제1 프로세서에서 완료된다고 제2 프로세서에 응답할 수 있다.

Description

제외된 지역을 갖는 DSB 동작
본 개시내용은 대체적으로 집적 회로, 더 구체적으로는, 데이터 동기화 장벽(data synchronization barrier, DSB) 동작들에 관한 것이다.
현대의 컴퓨터 시스템들은 대개 다양한 메모리 디바이스들(예를 들어, 랜덤 액세스 메모리(random access memory, RAM), 그 자체의 메모리를 갖는 그래픽 처리 장치 등)에 결합된 다수의 프로세서들을 포함한다. 동작 동안, 그들 프로세서들은 사용자 소프트웨어 애플리케이션들 및 운영 체제와 같은 다양한 소프트웨어 루틴들을 구현하기 위해 명령어들을 실행한다. 그들 소프트웨어 루틴들을 구현하는 것의 일부로서, 프로세서들은 종종 데이터를 취출하고, 데이터를 조작하고, 이어서 그 데이터를 프로세서들에 결합된 다양한 메모리 디바이스들 중 하나에 다시 저장한다. 데이터를 관리하기 위해, 프로세서는 로드/저장 동작들을 실행한다. 로드 동작들은 메모리 디바이스로부터 프로세서로 데이터를 판독하는 한편, 저장 동작들은 프로세서로부터 메모리 디바이스로 데이터를 기입한다(그러나 캐시들을 포함하는 구현예들은 주어진 로드 또는 저장 동작을 캐시 내에서 완료할 수 있음). 일례로서, 프로세서는 주변 디바이스(예를 들어, 네트워크 카드)로부터 프로세서 내로 데이터를 판독하기 위한 로드 동작을 실행할 수 있다.
정의된 제외 메모리 영역을 타깃화하는 모든 미처리된 로드/저장 동작들을 완료할 필요 없이 완료될 수 있는 DSB 동작을 구현하는 것에 관한 다양한 실시예들이 개시되어 있다. 대체적으로 말해서, 시스템 온 칩(system on a chip, SOC)은 주변 디바이스의 메모리와 같은 외부 메모리 및/또는 시스템 메모리에, 데이터에 대한 요청들을 발행하는 것을 수반할 수 있는 로드/저장 동작들을 실행하도록 구성된 프로세서들을 포함한다. 동작 동안, 제1 프로세서는 데이터 장벽 명령어를 실행하는 것에 응답하여, DSB 동작 요청을 제2 프로세서에 발행할 수 있다. 제1 프로세서로부터 DSB 동작 요청을 수신하는 것에 기초하여, 제2 프로세서는, 제외 영역 외부의 어드레스들에 관한 제2 프로세서에 의해 실행되는 미처리된 로드/저장 동작들이 완료되었다는 것을 보장할 수 있다. 일부 경우들에서, 제외 영역은 주변 디바이스의 메모리 공간에 맵핑된다. 제2 프로세서가 DSB 동작 요청이 완료된다고 응답할 때 제외 영역 내의 어드레스들에 관한 하나 이상의 로드/저장 동작들이 미처리되고 완료되지 않은 경우에도, 제2 프로세서는, DSB 동작 요청이 제2 프로세서에서 완료된다고 제1 프로세서에 다시 응답할 수 있다. 일부 경우들에서, DSB 동작 요청을 처리하는 동안, 제2 프로세서는 다른 프로세서로부터 다른 DSB 동작 요청을 수신할 수 있고, 그 DSB 동작은 제1 프로세서에 의해 요청된 DSB 동작과는 상이한 유형의 것일 수 있다. 그들 DSB 동작들이 상이한 유형들의 DSB 동작들에 대응한다는 것에 기초한, 제2 프로세서는 그들을 병렬로 처리할 수 있다.
도 1은 일부 실시예들에 따른, 메모리에 결합된 시스템 온 칩(SOC)의 예시적인 요소들을 예시하는 블록도이다.
도 2는 일부 실시예들에 따른, DSB 동작을 수반하는 2개의 프로세서들 사이의 상호작용의 예시적인 요소들을 예시하는 블록도이다.
도 3은 일부 실시예들에 따른, 동시적 DSB 동작들을 수반하는 3개의 프로세서들 사이의 상호작용의 예시적인 요소들을 예시하는 블록도이다.
도 4는 일부 실시예들에 따른, DSB 동작들을 구현하도록 구성된 프로세서의 예시적인 요소들을 예시하는 블록도이다.
도 5 및 도 6은 일부 실시예들에 따른, DSB 동작 요청을 처리하는 것과 관련된 예시적인 방법들을 예시하는 흐름도들이다.
도 7은 일부 실시예들에 따른, SOC의 적어도 일부를 제조하는 예시적인 처리를 예시하는 블록도이다.
도 8은 일부 실시예들에 따른, 다양한 유형들의 시스템들에서 사용가능한 예시적인 SOC를 예시하는 블록도이다.
많은 경우들에서, 프로세서가 국부적인 변경(예를 들어, 변환 페이지를 리맵핑하고, 변환 색인 버퍼(translation lookaside buffer, TLB)의 엔트리들을 무효화함)을 행할 때, 프로세서는 변경의 영향들이 시스템 내의 다른 프로세서들에 의해 실현되고 설명되는 것을 보장해야 한다. 변경의 영향들이 실현되는 것을 보장하기 위해, 프로세서는, 그 프로세서가 다른 프로세서들과 함께 모든 그들의 미처리된 로드/저장 동작들 및 다른 메모리에 영향을 미치는 명령어들, 예컨대 TLB의 엔트리들을 무효화하는 TLB 무효화 명령어들을 완료하게 하는 데이터 동기화 장벽(DSB) 명령어를 실행할 수 있다. 일부 경우들에서, DSB 개시 프로세서는, 그 자체의 미처리된 로드/저장 동작들 및 다른 메모리에 영향을 미치는 명령어들이, 그것이 DSB 동작 요청을 다른 프로세서들로 브로드캐스팅하기 전에, (프로그램 순서대로) 완료되었다는 것을 보장한다. DSB 동작 요청을 수신하는 것에 응답하여, 다른 프로세서들은 DSB 개시 프로세서로 다시 확인응답을 전송하기 전에 그들의 미처리된 로드/저장 동작들 및 다른 메모리에 영향을 미치는 명령어들을 완료한다.
그러나, 일부 경우들에서, DSB 개시 코어로부터 DSB 동작을 수신하는 프로세서(예를 들어, "수신 프로세서")의 미처리된 로드/저장 동작들 중 적어도 하나는 완료되는 데 긴 시간이 걸릴 수 있다. 로드/저장 동작이 미처리되었기 때문에, 그것은 통상 DSB 동작을 완료하기 전에 완료될 필요가 있을 것이다. 예를 들어, 프로세서는, 고온 플러그 뽑기(hot unplug), 타깃 디바이스에 대한 PCIe(peripheral component interconnect express) 링크의 전원 켜기/끄기(power-up/down) 등과 같은 다양한 이유들로 응답하는 데 긴 시간이 걸리는(예를 들어, 비-응답 타깃 디바이스는 50 밀리초 지연을 야기할 수 있음) 데이터 요청을, 로드/저장 동작의 일부로서, 타깃 디바이스에 발행할 수 있다. 로드/저장 동작이 완료되는 데 긴 시간이 걸리기 때문에, 프로세서는 DSB 개시 프로세서에 DSB 동작의 완료를 확인응답하는 데에 있어서 상당히 지연된다. DSB 개시 프로세서가 그 다른 프로세서로부터 완료 확인응답을 수신하는 이후까지 그의 정상 실행을 재개하지 않기 때문에, DSB 개시 프로세서는 다른 프로세서에 의해 발행된 긴 레이턴시 데이터 요청으로 인해 부정적인 영향을 받는다(긴 지연을 겪음). 이러한 개시내용은, 다른 것들 중에서도, DSB 개시 프로세서가 다른 프로세서들에 의한 긴 레이턴시 동작들로 인해 부정적인 영향을 받는 이러한 기술적인 문제를 다룬다.
본 개시내용은 특정 어드레스 공간을 타깃화하는 모든 미처리된 로드/저장 동작들을 완료할 필요 없이 완료될 수 있는 DSB 동작을 구현하기 위한 다양한 기법들을 설명한다. 본 명세서에 사용된 바와 같이, 이러한 DSB 동작은 "온화한(mild) DSB 동작" 또는 단순히 "온화한 DSB"로서 지칭된다. 이것은, 모든 미처리된 로드/저장 동작들이 강한 DSB 동작 전에 완료되어야 하는 전술된 "강한 DSB 동작" 또는 "강한 DSB"와는 대조적이다. 대체로 말하면, DSB 동작은, 시스템 내의 다수의 프로세서들이 (예를 들어, 프로세서의 메모리 콘텐츠 뷰가 메모리 동작들이 완료되는 예측불가능할 수 있는 순서에 의존하는 경쟁 조건들 또는 다른 상황들을 피하기 위해) 공유된 메모리의 모순이 없고 일관적인 뷰를 공유할 수 있게 하는 동기화 명령어(때때로 "장벽" 또는 "방벽(fence)" 명령어로서 지칭됨)의 유형으로 간주된다. 강한 유형들의 동기화 명령어들(예를 들어, 강한 DSB)은 전형적으로, 모든 미처리된 로드/저장 동작들을, 메모리 상태에 가시적으로 영향을 미칠 그들의 가능성에서 동등한 것으로 취급한다. 처리가 계속될 수 있기 전에 모든 그러한 동작들이 완료되도록 요구함으로써, 강한 동기화 명령어들은 성능을 잠재적으로 희생시키면서 메모리 보증에 관하여 최대 보증을 제공한다. 대조적으로, 미처리된 로드/저장 동작들 사이의 구별은 올바른 프로그램 실행을 보존하기 위해 엄격하게 순서화될 필요가 없는 소정 로드/저장 동작들의 식별을 가능하게 할 수 있다. 온화한 DSB와 같은 "약화된" 또는 "이완된" 동기화 명령어들은 이러한 구별을 이용하여 정확성을 보존하면서 성능을 개선할 수 있다.
후술되는 다양한 실시예들에서, 시스템은 메모리 디바이스들의 세트에 결합된 프로세서들의 세트를 포함한다. 프로세서들은, 다른 메모리에 영향을 미치는 명령어들과 함께 그들 메모리 디바이스들로부터 데이터를 로드하거나 그들에 데이터를 저장하기 위한 로드/저장 명령어들을 포함하는, 다양한 명령어들을 실행하도록 구성된다. 다양한 실시예들에서, 프로세서들은 DSB 명령어들을 실행하여 시스템의 프로세서들의 세트가 DSB 동작을 수행하게 하도록 구성된다. DSB 명령어는 다양한 이벤트들 중 임의의 것의 발생에 응답하여 프로세서에 의해 실행될 수 있다. 예를 들어, 프로세서는 페이지 맵핑들을 무효화하여, 그들 맵핑들을 캐싱하고 있는 다른 프로세서들에 영향을 미칠 수 있다. 결과적으로, 프로세서는 DSB 명령어를 실행하여 시스템의 프로세서들 사이에서 무효화들을 전체적으로 동기화할 수 있다. 프로세서는, 메모리에 영향을 미치는 명령어들(예를 들어, 페이지 맵핑 무효화들)이 특정 메모리 영역에 대응하는 메모리 어드레스들에 영향을 미치는지에 기초하여 2개의 DSB 명령어들 중 하나를 실행할 수 있다. 프로세서가, 메모리에 영향을 미치는 명령어들이 특정 메모리 영역과 연관되지 않는다고 결정하는 경우, 이어서 프로세서는 다른 프로세서들이 온화한 DSB 동작을 수행하게 하기 위한 제1 유형의 DSB 명령어를 실행할 수 있고; 그렇지 않은 경우, 프로세서는 다른 프로세서들이 강한 DSB 동작을 수행하게 하기 위한 제2 유형의 DSB 명령어를 실행할 수 있다.
온화한 DSB 동작을 수행하기 위한 DSB 동작 요청을 수신하는 것에 응답하여, 다양한 실시예들에서, 프로세서는, 특정 메모리 영역 외부의 메모리 어드레스들을 타깃화하는, 프로세서에 의해 실행되는 미처리된 로드/저장 동작들이 온화한 DSB 동작을 완료하기 전에 완료되는 것을 보장한다. 그러나, 프로세서는 특정 메모리 영역 내의 어드레스들을 타깃화하는 미처리된 로드/저장 동작들이 온화한 DSB 동작을 완료하기 전에 완료되었다는 것은 보장하지 않는다. 일부 경우들에서, 특정 메모리 영역은 PCIe 어드레스 공간과 연관된 메모리 어드레스들에 대응할 수 있다. 그 결과, 프로세서는 DSB 개시 프로세서로 다시 확인응답하기 전에, PCIe 어드레스를 타깃화하는 미처리된 로드/저장 동작들이 완료되기를 기다리지 않는다. 온화한 DSB 동작 대신 강한 DSB 동작을 수행하기 위한 DSB 동작 요청을 수신하는 것에 응답하여, 다양한 실시예들에서, 프로세서는 프로세서에 의해 실행되는 모든 미처리된 로드/저장 동작들이 강한 DSB 동작을 완료하기 전에 완료되는 것을 보장한다. 일부 실시예들에서, 프로세서는 강한 DSB 동작 요청 및 온화한 DSB 동작 요청을 비교적 동시에 수신할 수 있다. 프로세서는, 온화한 DSB 동작 요청이 두 번째로 수신되었더라도 온화한 DSB 동작이 강한 DSB 동작 전에 완료될 수 있도록, 그들 DSB 동작 요청들을 적어도 부분적으로 병렬로 처리할 수 있다.
이러한 본 개시내용의 기법들은, 다른 프로세서에 의해 개시되는 긴 레이턴시 동작이 DSB 동작이 완료되기 전에 완료되어야 하는 것에서부터 제외될 수 있기 때문에, 그 기법들이 DSB 개시 프로세서가 그 동작에 의해 부정적인 영향을 받지 않게 하므로, 종래의 접근법들에 비해 유리하다. 예를 들어, PCIe 어드레스들을 타깃화하는 로드/저장 동작들이 긴 레이턴시들에 더 민감하기 때문에, 그들 동작들은 제외될 수 있다. 그 결과, DSB 개시 프로세서는 긴 레이턴시 PCIe 연관 로드/저장 동작에 의해 정상 실행을 재개하는 것을 방해하지 않는다. 본 기법들은 또한, 온화한 DSB 동작이 먼저 수신되고 개시된 강한 DSB 동작에 의해 차단되지 않도록, 다수의 DSB 동작들이 프로세서에 의해 적어도 부분적으로 병렬로 수행되게 함으로써, 추가적인 이점들을 제공한다. 즉, 병렬성을 허용함으로써, 온화한 DSB 동작의 이점들이 무의미해지지 않는데, 이는 온화한 DSB 동작이 긴 레이턴시의 강한 DSB 동작에 의해 차단되어야 했을 경우에 초래될 수 있다. 이들 기법들의 예시적인 적용이 이제, 도 1에 대한 참조를 시작으로 논의될 것이다.
이제 도 1을 참조하면, 메모리(110)에 결합된 예시적인 시스템 온 칩(SOC)(100)의 블록도가 도시되어 있다. 명칭에서 암시되는 바와 같이, SOC(100)의 컴포넌트들은 집적 회로 "칩"으로서 단일 반도체 기판 상에 집적될 수 있다. 일부 실시예들에서, 컴포넌트들은 컴퓨팅 시스템 내의 2개 이상의 별개의 칩들 상에 구현된다. 예시된 실시예에서, SOC(100)의 컴포넌트들은 중앙 처리 장치(central processing unit, CPU) 컴플렉스(120), 메모리 제어기(memory controller, MC)(130), 하나 이상의 주변 컴포넌트들(140)(더 간단하게는, "주변기기들"), 및 통신 조직(communication fabric)(150)을 포함한다. 컴포넌트들(120, 130, 140)은 모두 묘사된 바와 같이 통신 조직(150)에 결합되고, 메모리 제어기(130)는 사용 동안 메모리(110)에 결합될 수 있다. 또한 도시된 바와 같이, CPU 컴플렉스(120)는 적어도 2개의 프로세서들(125)(도 1의 P(125))을 포함한다. 일부 실시예들에서, SOC(100)는 도시된 것과는 상이하게 구현된다. 예를 들어, SOC(100)는 "올웨이즈-온(always-on)" 컴포넌트, 디스플레이 제어기, 전력 관리 회로 등을 포함할 수 있다. SOC(100)의 컴포넌트들의 수(및 CPU 컴플렉스(120) 내에서와 같은, 도 1에 도시된 것들에 대한 서브컴포넌트들의 수)는 실시예들 간에 다를 수 있다는 것에 유의한다. 이에 따라, 도 1에 도시된 수보다 더 많거나 더 적은 각각의 컴포넌트 또는 서브컴포넌트가 있을 수 있다.
다양한 실시예들에서, 메모리(110)는, SOC(100) 및 메모리(110)를 갖는 시스템이 본 명세서에 설명된 동작들을 구현하게 하도록, CPU 컴플렉스(120)에 의해 실행가능한 프로그램 명령어들 및 데이터를 저장하는 데 사용가능하다. 메모리(110)는 하드 디스크 저장소, 플로피 디스크 저장소, 착탈식 디스크 저장소, 플래시 메모리, 랜덤 액세스 메모리(RAM-SRAM, EDO RAM, SDRAM, DDR SDRAM, 램버스 RAM 등), 판독 전용 메모리(PROM, EEPROM 등) 등과 같은 상이한 물리적 메모리 매체를 사용하여 구현될 수 있다. SOC(100)에 이용가능한 메모리는 메모리(110)와 같은 일차 저장소로 제한되지 않는다. 오히려, SOC(100)는 CPU 컴플렉스(120) 내에 캐시 메모리(예를 들어, L1 캐시, L2 캐시 등)와 같은 다른 형태들의 저장소를 추가로 포함할 수 있다.
다양한 실시예들에서, CPU 컴플렉스(120)는 SOC(100)의 CPU로서 서빙(serving)할 수 있는 프로세서들(125)의 세트를 포함한다. 프로세서들(125)은 운영 체제와 같은 시스템의 메인 제어 소프트웨어를 실행할 수 있다. 일반적으로, 사용 동안 CPU에 의해 실행되는 소프트웨어는 시스템의 원하는 기능을 실현하기 위해 시스템의 다른 컴포넌트들을 제어한다. 프로세서들(125)은 다른 소프트웨어, 예컨대 애플리케이션 프로그램들을 추가로 실행할 수 있다. 애플리케이션 프로그램들은 사용자에게 기능을 제공할 수 있고, 하위 레벨 디바이스 제어, 스케줄링, 메모리 관리 등을 위해 운영 체제에 의존할 수 있다. 결과적으로, 프로세서들(125)은 또한 애플리케이션 프로세서들로서 지칭될 수 있다. CPU 컴플렉스(120)는 다른 하드웨어, 예컨대, L2 캐시 및/또는 시스템의 다른 컴포넌트들에 대한 인터페이스(예컨대, 통신 조직(150)에 대한 인터페이스)를 추가로 포함할 수 있다.
다양한 실시예들에서, 프로세서(125)는 그 프로세서(125)에 의해 구현된 명령어 세트 아키텍처에 정의된 명령어들을 실행하도록 구성된 임의의 회로부 및/또는 마이크로코드를 포함한다. 프로세서(125)는 SOC(100)의 다른 컴포넌트들과 함께 집적 회로 상에서 구현될 수 있다. 프로세서들(125)은 데이터 및 프로그램 명령어들을 저장하기 위해 그들 자체의 각각의 캐시들(예를 들어, L0 캐시 및 L1 캐시)을 포함하면서 공통 마지막 레벨 캐시(예를 들어, L2 캐시)를 공유할 수 있다. 도 2와 관련하여 논의된 바와 같이, 프로세서들(125)은 공통 마지막 레벨 캐시에 포함된 회로부를 통해 서로 통신할 수 있다. 예를 들어, 프로세서는 공통 마지막 레벨 캐시를 통해 DSB 동작 요청을 다른 프로세서에 발행하여, 그 다른 프로세서가 DSB 동작을 구현하게 할 수 있다. 프로세서들(125)은 별개의 마이크로프로세서들, 멀티칩 모듈 구현들 내에 집적된 프로세서들 및/또는 마이크로프로세서들, 다수의 집적 회로들로서 구현된 프로세서들 등을 추가로 포함할 수 있다.
다양한 실시예들에서, 메모리 제어기(130)는 메모리(110)로부터의 데이터에 액세스하는 것과 같은 메모리 동작들을 수행하기 위한 메모리 요청들(예를 들어, 로드/저장 요청들)을, SOC(100)의 다른 컴포넌트들로부터 수신하도록 구성된 회로부를 포함한다. 메모리 제어기(130)는 앞서 논의된 것과 같은 임의의 유형의 메모리(110)에 액세스하도록 구성될 수 있다. 다양한 실시예들에서, 메모리 제어기(130)는 메모리 동작들을 저장하기 위한, 동작들을 순서화하기 위한 그리고 잠재적으로 재순서화하기 위한, 그리고 동작들을 메모리(110)에 제시하기 위한 큐(queue)들을 포함한다. 메모리 제어기(130)는 메모리(110)로의 기입을 기다리는 기입 데이터 및 메모리 동작의 소스로의 복귀를 기다리는 판독 데이터를 저장하기 위한 데이터 버퍼들을 추가로 포함할 수 있다. 일부 실시예들에서, 메모리 제어기(130)는 최근에 액세스된 메모리 데이터를 저장하기 위한 메모리 캐시를 포함할 수 있다. SOC 구현들에서, 예를 들어, 메모리 캐시는, 메모리(110)로부터의 데이터가 다시 곧 액세스될 것으로 예상되는 경우에 그것의 재-액세스를 회피시킴으로써 SOC(100)에서의 전력 소비를 감소시킬 수 있다. 일부 경우들에서, 메모리 캐시는 또한, 소정 컴포넌트들만을 서빙하는 프로세서들(125) 내의 전용 캐시들(예를 들어, L1 캐시들)과는 대조적으로, 시스템 캐시로서 지칭될 수 있다. 그러나, 일부 실시예들에서, 시스템 캐시는 메모리 제어기(130) 내에 위치될 필요가 없다.
다양한 실시예들에서, 주변기기들(140)은 SOC(100)에 포함된 추가적인 하드웨어 기능의 세트들이다. 예를 들어, 주변기기들(140)은 비디오 주변기기들, 예컨대 카메라 또는 다른 이미지 센서로부터의 이미지 캡처 데이터를 처리하도록 구성된 이미지 신호 프로세서, GPU들, 비디오 인코더/디코더들, 스케일러(scaler)들, 로테이터(rotator)들, 블렌더(blender)들, 디스플레이 제어기들 등을 포함할 수 있다. 다른 예들로서, 주변기기들(140)은 오디오 주변기기들, 예컨대 마이크로폰들, 스피커들, 마이크로폰들 및 스피커들에 대한 인터페이스들, 오디오 프로세서들, 디지털 신호 프로세서들, 믹서들 등을 포함할 수 있다. 주변기기들(140)은, USB(Universal Serial Bus), PCIe를 포함한 PCI(peripheral component interconnect), 직렬 및 병렬 포트들 등과 같은 SOC(100) 외부의 다양한 인터페이스들을 위한 인터페이스 제어기들을 포함할 수 있다. 외부 디바이스들에 대한 상호접속은 도 1에서, SOC(100) 외부로 연장되는 파선 화살표로 예시되어 있다. 주변기기들(140)은 매체 액세스 제어기(media access controller, MAC)들과 같은 네트워킹 주변기기들을 포함할 수 있다.
통신 조직(150)은 SOC(100)의 컴포넌트들 사이에서 통신하기 위한 임의의 통신 상호접속부 및 프로토콜일 수 있다. 예를 들어, 통신 조직(150)은 프로세서들(125)이 데이터에 액세스하고, 데이터를 저장하고 조작하기 위한 요청들을 발행하고 요청들을 주변기기들(140)로부터 수신할 수 있게 할 수 있다. 일부 실시예들에서, 통신 조직(150)은 공유 버스 구성들, 크로스 바(cross bar) 구성들, 및 브리지들을 갖는 계층구조적 버스들을 포함하는 버스-기반이다. 일부 실시예들에서, 통신 조직(150)은 패킷-기반이고, 브리지들을 갖는 계층구조, 크로스 바, 포인트-투-포인트(point-to-point), 또는 다른 상호접속부들일 수 있다.
이제 도 2를 참조하면, CPU 컴플렉스(120) 내의 2개의 프로세서들(125) 사이의 예시적인 DSB 기반 상호작용의 블록도가 도시되어 있다. 예시된 실시예에서, CPU 컴플렉스(120) 및 주변기기들(140)의 세트가 있으며, 이들 모두는 통신 조직(150)에 결합된다. 또한 도시된 바와 같이, CPU 컴플렉스(120)는 마지막 레벨 캐시(205)에 결합된 프로세서들(125A, 125B)을 포함한다. 프로세서(125A, 125B)가 동일한 CPU 컴플렉스(120) 내에 있는 것으로 예시되어 있지만, 일부 실시예들에서, 그들은 SOC(100)의 상이한 CPU 컴플렉스들(120)의 일부이다. 추가로, 2개의 프로세서들(125)이 예시되어 있지만, CPU 컴플렉스(120)는 DSB 기반 상호작용에 수반되는 더 많은 프로세서들(125)을 포함할 수 있다.
예시된 실시예에서, 프로세서(125A)는 초기에, 로드/저장 동작과 연관된 주변기기 요청(210)을 마지막 레벨 캐시(205) 및 통신 조직(150)을 통해 주변기기(140)에 발행한다. 그 주변기기 요청(210)은 데이터를 특정 메모리 어드레스에 저장하기 위한 요청 또는 주변기기(140)에서의 특정 메모리 어드레스에 저장된 데이터에 대한 요청일 수 있다. 도 2에 도시된 바와 같이, 그 주변기기 요청(210)은 마지막 레벨 캐시(205) 및 통신 조직(150)을 거쳐 트레블링(traveling)한다. 다양한 실시예들에서, 마지막 레벨 캐시(205)는 CPU 컴플렉스(120)에 포함된 최고 레벨 캐시에 대응한다. 예를 들어, 마지막 레벨 캐시(205)는 L2 캐시일 수 있다. 많은 경우들에서, 주변기기 요청(210)이 데이터에 대한 요청일 때, 데이터가 마지막 레벨 캐시(205)에 위치되지 않은 경우에 주변기기 요청(210)을 대응하는 주변기기(140)에 전송하기 전에, 마지막 레벨 캐시(205)가 요청된 데이터에 대해 체크될 수 있다. 다양한 실시예들에서, 마지막 레벨 캐시(205)는 프로세서들(125)과 인터페이싱하기 위한 회로부를 포함하여 그들 프로세서들(125) 내의 국부적인 캐시들의 관리를 용이하게 하는데, 예를 들어, 그러한 회로부는 프로세서들(125)이, 그들 프로세서들(125) 사이의 캐시 일관성을 보장하기 위해 그들의 국부적인 캐시들의 소정 부분들을 무효화하게 하도록 구성될 수 있다. 마지막 레벨 캐시(205)는 SOC(100)의 다른 CPU 컴플렉스들(120)에 포함된 프로세서들(125) 사이의 캐시 일관성을 보장하기 위한 회로부를 추가로 포함할 수 있다.
프로세서(125A)가 주변기기(140)로부터 주변기기 응답(240)을 기다리고 있는 동안, 프로세서(125A)는 DSB 동작을 수행하기 위한 DSB 동작 요청(220)을 프로세서(125B)로부터 수신할 수 있다. DSB 동작 요청(220)이 프로세서(125B)로부터 프로세서(125A)로 바로 트레블링하는 것으로 묘사되어 있지만, 많은 경우들에서, DSB 동작 요청(220)은 마지막 레벨 캐시(205)에 전송되고, 마지막 레벨 캐시는 그 DSB 동작 요청(220)을 프로세서(125A)로 라우팅한다. 다양한 실시예들에서, 프로세서(125B)는 대응하는 DSB 명령어를 실행하는 것에 응답하여 DSB 동작 요청(220)을 발행한다. DSB 명령어는 전역 동기화가 요망되는 이벤트의 발생 후에 실행될 수 있다. 일례로서, TLB 무효화들의 세트를 국부적으로 수행한 후, 프로세서(125B)는 이어서, 다른 프로세서들(125) 사이에서 그들 TLB 무효화들을 전체적으로 동기화하기 위해 DSB 명령어를 실행할 수 있다.
다양한 실시예들에서, 2개의 DSB 명령어들이 있다: 온화한 DSB 동작을 개시하기 위한 것 및 강한 DSB 동작을 개시하기 위한 것. 온화한 DSB 명령어가 실행되는지 또는 강한 DSB 명령어가 실행되는지는 전역 동기화가 소정 메모리 영역에 영향을 미치는지에 의존할 수 있다. 일부 실시예들에서, 운영 체제는 그 메모리 영역이 영향을 받는지에 대해 결정한다. 일례로서, PCIe 또는 다른 그러한 인터페이스에 대한 디바이스 어드레스 공간 내에서의 변환 페이지들의 리맵핑들은 운영 체제 루틴에 의해 수행될 수 있다. 결과적으로, 운영 체제는 PCIe 어드레스 공간이 리맵핑들에 의해 영향을 받고 있다고 결정하고 이어서 강한 DSB 동작이 발생되게 할 수 있다. 그러나, 리맵핑들(또는 다른 메모리에 영향을 미치는 동작들)이 PCIe 어드레스 공간에 관한 것이 아닌 경우, 이어서 운영 체제는 온화한 DSB 동작이 수행되게 할 수 있는데, 여기서 그 메모리 어드레스 영역에 관한 로드/저장 동작들은 온화한 DSB 동작 전에 완료되어야 하는 것으로부터 제외된다. 일부 경우들에서, 운영 체제는 온화한 DSB 동작이 수행되어야 하는지 또는 강한 DSB 동작이 수행되어야 하는지를 나타내는 비트를 설정할 수 있다.
온화한 DSB 동작을 수행하기 위한 DSB 동작 요청(220)을 프로세서(125B)로부터 수신하는 것에 기초하여, 프로세서(125A)는 정의된 제외 메모리 어드레스 영역 외부의 메모리 어드레스들에 관한 미처리된 로드/저장 동작들이 완료되었다는 것을 보장할 수 있다. 일부 실시예들에서, 프로세서(125)는 제외 메모리 어드레스 영역을 정의하도록 프로그래밍가능한 하나 이상의 레지스터들을 포함한다. 발행된 주변기기 요청(210)이 제외 메모리 어드레스 영역에 속하는 메모리 어드레스에 관한 것인 경우, 이어서 프로세서(125A)는 온화한 DSB 동작을 완료하기 전에 주변기기 응답(240)을 기다리지 않는다. 다양한 실시예들에서, 프로세서(125)는 메모리 어드레스 비교에 기초하여, 로드/저장 동작(이는 주변기기 요청(210)에 대응할 수 있음)이 제외 메모리 어드레스 영역에 속하는 메모리 어드레스에 관한 것인지를 결정한다. 메모리 어드레스가 제외 메모리 어드레스 영역 내에 있는 경우, 이어서 로드/저장 동작이 제외 메모리 어드레스 영역과 연관된다는 것을 나타내는 비트가 로드/저장 동작에 대해 설정될 수 있다. 이와 같이, 프로세서(125)는, 그 비트가 설정된 미처리된 로드/저장 동작들만이 있다는 것을 보장함으로써, 제외 메모리 어드레스 영역 외부의 어드레스들에 관해서는 어떠한 미처리된 로드/저장 동작들도 없다는 것을 보장할 수 있다.
제외 메모리 어드레스 영역 외부의 메모리 어드레스들에 관한 미처리된 로드/저장 동작들이 완료되었다는 것을 보장한 후, 다양한 실시예들에서, 프로세서(125A)는, 온화한 DSB 동작이 완료되는 것을 나타내는 DSB 확인응답(230)을 프로세서(125B)로 전송한다. DSB 확인응답(230)은 주변기기 응답(240)을 수신하지 않으면서 전송될 수 있다. 예를 들어, 예시된 실시예에 도시된 바와 같이, DSB 확인응답(230)을 전송한 후, 프로세서(125A)는 주변기기(140)로부터 주변기기 응답(240)을 수신한다. 주변기기 응답(240)은 주변기기 요청(210)이 처리되었다는 확인응답 및/또는 데이터를 포함할 수 있다. 강한 DSB 동작을 수행하기 위한 DSB 동작 요청(220)이 수신되는 경우들에 대해, 프로세서(125A)는 강한 DSB 동작을 완료하기 전에, 모든 미처리된 로드/저장 동작들이 완료되는 것을 보장할 수 있다. 결과적으로, 프로세서(125A)는 DSB 확인응답(230)을 프로세서(125B)로 전송하기 전에, 주변기기 응답(240)(또는 연관된 로드/저장 동작이 완료될 수 없다는 표시)을 기다린다.
이제 도 3을 참조하면, 프로세서들(125) 사이의 예시적인 DSB 기반 상호작용의 블록도가 도시되어 있다. 예시된 실시예에서, 프로세서들(125A 내지 125C), 마지막 레벨 캐시(205), 주변기기들(140)의 세트, 및 통신 조직(150)이 있다. 또한 도시된 바와 같이, 프로세서들(125A 내지 125C)은 마지막 레벨 캐시(205)에 결합되는 반면, 마지막 레벨 캐시(205) 및 주변기기들(140)의 세트는 통신 조직(150)에 결합된다. 일부 경우들에서, 프로세서들(125A 내지 125C)은 동일한 CPU 컴플렉스(120)에 포함될 수 있는 반면, 다른 경우들에서, 그들 프로세서들(125) 중 하나 이상은 다른 CPU 컴플렉스(120)의 일부일 수 있다.
예시된 실시예에서, 프로세서(125A)는 초기에, 로드/저장 동작과 연관된 주변기기 요청(210)을 마지막 레벨 캐시(205)를 통해 주변기기(140)에 발행한다. 그 주변기기 요청(210)을 발행한 후, 이어서 프로세서(125A)는 묘사된 바와 같이, 강한 DSB 동작을 수행하기 위한 DSB 동작 요청(220)을 프로세서(125B)로부터 수신한다. 강한 DSB 동작을 수행하는 동안, 프로세서(125A)는 온화한 DSB 동작을 수행하기 위한 DSB 동작 요청(220)을 프로세서(125C)로부터 수신한다. 다양한 실시예들에서, 프로세서(125)는 강한 DSB 동작 및 온화한 DSB 동작을 동시에 처리하도록 구성된다. 그들 DSB 동작들의 동시적 처리는 개별적이고 독립적인 로직 콘(cone)들을 통해 행해질 수 있다. 그 결과, 강한 DSB 동작 요청(220) 이후에 수신되는 온화한 DSB 동작 요청(220)은 강한 DSB 동작 요청(220)이 먼저 완료되는 것을 기다리지 않으면서 완료될 수 있다. 도시된 바와 같이, 강한 DSB 동작 요청(220)이 완료될 수 있도록 주변기기 응답(240)을 수신하기 전에, 프로세서(125A)는 요청된 온화한 DSB 동작이 완료되었다는 DSB 확인응답(230)을 프로세서(125C)로 전송한다. 그 후, 프로세서(125A)는 주변기기 응답(240)을 수신하고, 이어서 DSB 확인응답(230)을 프로세서(125B)에 전송하여, 강한 DSB 동작 요청(220)을 완료한다.
그러나, 프로세서(125)는 직렬 방식으로 동일한 유형의(예를 들어, 온화한) DSB 동작 요청들(220)을 처리하도록 구성될 수 있다. 따라서, 예를 들어, 프로세서(125C)로부터의 온화한 DSB 동작 요청(220)이 여전히 처리 중인 동안 프로세서(125A)가 다른 온화한 DSB 동작 요청(220)을 수신할 경우, 이어서 프로세서(125A)는, 이후 새롭게 수신된 온화한 DSB 동작 요청(220)을 처리하기 전에, 프로세서(125C)로부터의 온화한 DSB 동작 요청(220)이 완료될 때까지 기다릴 수 있다. 다양한 실시예들에서, 프로세서(125)는 동일한 유형의 DSB 동작 요청(220)이 완료되기를 기다리고 있는 DSB 동작 요청들(220)을 저장하기 위해 하나 이상의 큐들을 포함한다. 일례로서, 프로세서(125)는 강한 DSB 동작 요청들(220)에 대한 큐 및 온화한 DSB 동작 요청들(220)에 대한 큐를 포함할 수 있다.
이제 도 4를 참조하면, 예시적인 프로세서(125)의 블록도가 도시되어 있다. 예시된 실시예에서, 프로세서(125)는 페치 및 디코드 유닛(410)(명령어 캐시 또는 "ICache"(415)를 포함함), 맵-디스패치-리네임(map-dispatch-rename, MDR) 유닛(420)(재순서화 버퍼(425)를 포함함), 예약 스테이션(reservation station, RS)들(427 및 432)의 세트, 하나 이상의 실행 유닛들(440), 레지스터 파일(445), 데이터 캐시(DCache)(417), 로드/저장 유닛(load/store unit, LSU)(430), 및 코어 인터페이스 유닛(core interface unit, CIF)(450)을 포함한다. 예시된 바와 같이, 페치 및 디코드 유닛(410)은 RS(427) 및 LSU(430)에 결합된 MDR 유닛(420)에 결합된다. 더 구체적으로, MDR 유닛(420)은 LSU(430) 내의 RS(432)에 결합된다. RS(427)는 실행 유닛들(440)에 결합되고, 재순서화 버퍼(425)는 LSU(430) 내의 로드 큐(load queue, LDQ)(438)에 결합된다. 또한 도시된 바와 같이, 레지스터 파일(445)은 실행 유닛들(440) 및 LSU(430)(더 구체적으로는, RS(432) 및 어드레스 생성 유닛/변환 색인 버퍼(address generation unit/translation lookaside buffer, AGU/TLB)(434))에 결합된다. AGU/TLB(434)는 DCache(417)에 결합되고, DCache(417)는 CIF(450)에 그리고 실행 유닛들(440) 및 레지스터 파일(445)에 결합된 멀티플렉서(447)에 결합된다. 멀티플렉서(447)의 다른 입력부는 다른 데이터(예를 들어, CIF(450)로부터의 채움 전달 데이터(fill forward data) 및/또는 LSU(430) 내의 저장 큐(436)(STQ(store queue)(436))로부터의 전달 데이터)를 수신하도록 결합된다. DCache(417)는 LSU(430) 내의 STQ(436) 및 LDQ(438)에 추가로 결합된다. AGU/TLB(434)는 RS(432), STQ(436) 및 LDQ(438)에 결합된다. STQ(436)는 LDQ(438)에 결합된다. STQ(436) 및 LDQ(438)는 CIF(450)에 결합된다.
다양한 실시예들에서, 페치 및 디코드 유닛(410)은 프로세서(125)에 의한 실행을 위해 명령어들을 페치하도록 그리고 그들 명령어들을 실행을 위해 명령어 동작들(간략하게 "op들")로 디코딩하도록 구성된다. 더 구체적으로, 페치 및 디코드 유닛(410)은 CIF(450)를 통해 메모리(예를 들어, 메모리(110))로부터 페치된 명령어들을 ICache(415) 내에 캐싱하도록 구성될 수 있고, 프로세서(125)를 위한 명령어들의 추론적 경로를 페치하도록 구성될 수 있다. 페치 및 디코드 유닛(410)은, 이전에 실행된 명령어들에 기초하여 페치 어드레스들을 예측하는 것과 같은, 페치 경로를 예측하기 위한 다양한 예측 구조들을 구현할 수 있다. 페치 및 디코드 유닛(410)은 명령어들을 op들로 디코딩하도록 구성될 수 있다. 일부 실시예들에서, 명령어는 명령어의 복잡성에 의존하여, 하나 이상의 명령어 op들로 디코딩될 수 있다. 특히 복잡한 명령어들은 마이크로코딩될 수 있다. 그러한 실시예들에서, 명령어에 대한 마이크로코드 루틴은 op들로 코딩될 수 있다. 그러나, 다른 실시예들에서, 프로세서(125)에 의해 구현된 명령어 세트 아키텍처 내의 각각의 명령어는 단일 op로 디코딩될 수 있고, 이로써, op는 명령어와 같은 뜻일 수 있다(그러나, 그는 디코더에 의해 형태가 수정될 수 있음).
다양한 실시예들에서, ICache(415) 및 DCache(417)는 각각 임의의 원하는 용량, 캐시 라인 크기, 및 구성을 갖는 캐시일 수 있다. 캐시 라인은 캐시에서 단위로서 할당/할당해제될 수 있으며, 이에 따라 캐시에 대한 할당/할당해제의 단위를 정의할 수 있다. 캐시 라인들은 크기가 다를 수 있다(예컨대, 32 바이트, 64 바이트, 또는 더 크거나 더 작음). 상이한 캐시들은 상이한 캐시 라인 크기들을 가질 수 있다. 마지막 레벨 캐시(205)와 같은, ICache(415)/DCache(417)와 메인 메모리 사이의 더 추가적인 레벨들의 캐시가 추가로 있을 수 있다. 다양한 실시예들에서, ICache(415)는 페치된 명령어들을 캐싱하는 데 사용되고, DCache(417)는 프로세서(125)에 의해 페치되거나 생성된 데이터를 캐싱하는 데 사용된다.
다양한 실시예들에서, MDR 유닛(420)은 순서에 맞지 않는 그리고/또는 추론적 실행을 허용하기 위해 페치 및 디코드 유닛(410)으로부터 수신된 op들을 추론적 자원들(예를 들어, 물리적 레지스터들)로 맵핑하도록 구성된다. 도시된 바와 같이, MDR 유닛(420)은 op들을 RS(427) 및 LSU(430) 내의 RS(432)로 디스패칭할 수 있다. op들은 대응하는 명령어들에 사용되는 아키텍처적 레지스터들로부터 레지스터 파일(445) 내의 물리적 레지스터들로 맵핑될 수 있다. 즉, 레지스터 파일(445)은 프로세서(125)에 의해 구현되는 명령어 세트 아키텍처에 의해 특정된 아키텍처적 레지스터들보다 더 많은 수의 물리적 레지스터들의 세트를 구현할 수 있다. MDR 유닛(420)은 아키텍처적 레지스터들과 물리적 레지스터들 사이의 맵핑을 관리할 수 있다. 일부 실시예들에서, 상이한 피연산자 유형들(예를 들어, 정수, 부동소수점 등)에 대해 개별적인 물리적 레지스터들이 있을 수 있다. 그러나, 물리적 레지스터들은 피연산자 유형들에 걸쳐 공유될 수 있다. 다양한 실시예들에서, MDR 유닛(420)은 추론적 실행을 추적하고 op들을 폐기한다(또는 잘못 추론된 op들을 플러시(flush)함). 다양한 실시예들에서, 재순서화 버퍼(425)는 op들의 프로그램 순서를 추적하고 폐기/플러시를 관리하는 데 사용된다.
다양한 실시예들에서, MDR 유닛(420)은 op들을 플러시할 때를 결정하기 위해 사용가능한 3개의 포인터들을 유지한다: 폐기 동작 포인터(retired operations pointer), 분기 및 시스템 해결 포인터(branch and system resolve pointer), 및 온화한 DSB 플러시 포인터(flush pointer). 다양한 실시예들에서, 폐기 동작 포인터는 가장 최근에 폐기된 명령어 op 이후에 순차적으로 있는, MDR 유닛(420) 내의(또는 더 구체적으로, 재순서화 버퍼(425) 내의) 다음 명령어 op를 가리킨다. 결과적으로, 폐기 동작 포인터는 명령어 op의 폐기에 응답하여 다음 명령어 op를 가리키도록 증분될 수 있다. 주어진 명령어 op는, 그것이 완료되었고 그것의 결과들이 마치 순서대로 실행된 것처럼 시스템에 의해 관찰가능할 때 폐기될 수 있다. 예를 들어, 주변기기(140)를 타깃화하는 로드 동작은, 요청된 데이터가 주변기기(140)로부터 프로세서(125)에 의해 수신되었고 그것이 가장 예전의 미처리된 동작일 때, 폐기될 수 있다. 다양한 실시예들에서, 분기 및 시스템 해결 포인터는 이전 분기 명령어들 및 잠재적으로 예외를 유발하는 명령어들이 해결된 가장 신생의(youngest) 명령어 op를 가리킨다.
다양한 실시예들에서, 온화한 DSB 플러시 포인터는, 온화한 DSB 동작 요청(220)이 수신되고 제외 메모리 영역(예를 들어, PCIe 어드레스 공간) 내에 있는 메모리 어드레스를 타깃화하는 적어도 하나의 미처리된 로드/저장 동작이 있을 때 플러시할, 명령어 시퀀스 내의 명령어 op를 가리킨다. 온화한 DSB 플러시 포인터는 폐기 동작 포인터와 분기 및 시스템 해결 포인터가 가리키는 명령어 op들 사이에 있는 명령어 op를 식별할 수 있다. 일부 실시예들에서, 온화한 DSB 플러시 포인터는 완료되고/메모리에 커밋(commit)된 가장 신생의 로드/저장 동작 이후에 순차적으로 있는 명령어 op를 가리키며, 이는 주변기기 요청(210)과 연관된 명령어 op보다 더 신생의 것일 수 있다. (다양한 포인트들에서, 로드/저장 동작들은 다른 로드/저장 동작들보다 더 신생이거나 더 예전의 것으로 지칭된다. 제1 동작이 프로그램 순서에서 제2 동작에 후속하는 경우, 그 제1 동작은 제2 동작보다 더 신생의 것이라고 언급된다. 유사하게, 제1 동작이 프로그램 순서에서 제2 동작에 선행하는 경우, 그 제1 동작은 제2 동작보다 더 예전의 것이다). 그러나, 가리켜진(pointed-to) 명령어 op는 하기 중 임의의 것 이후에 순차적으로 있을 수 있다: 제외 메모리 영역에 관한 가장 신생의 런칭된 저장 동작, LDQ(438)로부터 폐기된 가장 신생의 로드 동작(아래에서 논의됨), STQ(436)로부터 폐기된 가장 신생의 저장 동작, 또는 제외 메모리 어드레스 영역에 대한 가장 신생의 런칭된 로드 동작. 결과적으로, 온화한 DSB 플러시 포인터는, DCache(417)에 대한 히트들이 있거나 마지막 레벨 캐시(205)로부터의 채움 응답들이 있음으로 인해, 로드/저장 동작들이 완료되고/메모리에 커밋됨에 따라, 그들을 통과할 수 있다. 다양한 실시예들에서, 온화한 DSB 플러시 포인터는 제외 메모리 영역 내에 있는 메모리 어드레스를 타깃화하는 미처리된 로드/저장 동작이 있는지에 기초하여 유효하거나 무효할 수 있다. 온화한 DSB 플러시 포인터는 무효한 상태에 있는 동안 이동되고, 이어서 제외 메모리 영역에 대한 미처리된 로드/저장 동작이 있을 때 유효한 상태로 설정될 수 있다. 아래에서 논의되는 바와 같이, 유효할 때, 온화한 DSB 플러시 포인터는 플러시를 수행할 때를 결정하기 위해 MDR 유닛(420)에 의해 사용될 수 있다. 일 실시예에서, 재순서화 버퍼(425)는 단위 또는 그룹으로서 동시에 디코딩된 op들을 추적할 수 있다. 그러한 실시예들에서, 상기 포인터들은 op들의 그룹을 가리킬 수 있다. 그러나, 본 명세서에 설명된 동작은 대체적으로 동일한 방식으로 진행될 수 있다.
다양한 실시예들에서, LSU(430)는 MDR 유닛(420)으로부터의 메모리 동작들을 실행하도록 구성된다. 대체적으로, 메모리 동작(메모리 op)은 메모리에 대한 액세스를 특정하는 명령어 동작이지만, 그 메모리 액세스는 DCache(417)와 같은 캐시 내에서 완료될 수 있다. 따라서, 로드 메모리 동작은 메모리 위치로부터 레지스터로의 데이터의 전송을 특정할 수 있는 반면, 저장 메모리 동작은 레지스터로부터 메모리 위치로의 데이터의 전송을 특정할 수 있다. 로드 메모리 동작들은 로드 메모리 op들, 로드 op들, 또는 로드들로서 지칭되고, 저장 메모리 동작들은 저장 메모리 op들, 저장 op들, 또는 저장들로서 지칭된다. 일부 실시예들에서, 프로세서(125)에 의해 구현되는 명령어 세트 아키텍처는, 상이한 어드레스들에 대한 메모리 액세스들은 순서에 맞지 않게 발생하는 것을 허용하지만, 동일한 어드레스(또는 중첩하는 어드레스들, 여기서 적어도 하나의 바이트가 두 중첩하는 메모리 액세스들에 의해 액세스됨)에 대한 메모리 액세스들은 프로그램 순서대로 발생하도록 요구할 수 있다.
LSU(430)는 다수의 로드 파이프라인들("파이프들")을 구현할 수 있다. 각각의 파이프라인은 다른 파이프라인들 내의 다른 로드들과는 독립적으로 그리고 그들과 병렬로 상이한 로드를 실행할 수 있다. 결과적으로, 예약 스테이션(432)은 동일한 클록 사이클에서 로드 파이프들의 수까지 임의의 수의 로드들을 발행할 수 있다. 유사하게, LSU(430)는 하나 이상의 저장 파이프들을 구현할 수 있다. 그러나, 저장 파이프들의 수는 로드 파이프들의 수와 동일할 필요가 없다. 마찬가지로, 예약 스테이션(432)은 동일한 클록 사이클에서 저장 파이프들의 수까지 임의의 수의 저장들을 발행할 수 있다
다양한 실시예들에서, 로드/저장 op들은 예약 스테이션(432)에서 수신되는데, 예약 스테이션(432)은 각각 로드/저장 op들의 소스 피연산자들을 모니터링하여 그들이 이용가능한 때를 결정하고 이어서 로드 또는 저장 파이프라인들에 op들을 발행하도록 구성될 수 있다. AGU/TLB(434)는 앞서 언급된 파이프라인들의 하나 이상의 초기 스테이지들에 결합될 수 있다. 일부 소스 피연산자들은, 동작들이 예약 스테이션(432)에서 수신될 때 이용가능할 수 있는데, 이는 대응하는 동작에 대한, MDR 유닛(420)으로부터 예약 스테이션(432)에 의해 수신된 데이터에 나타내질 수 있다. 다른 피연산자들은 다른 실행 유닛들(440)에 의한 동작들의 실행을 통해 또는 심지어 이전 로드 op들의 실행을 통해 이용가능해질 수 있다. 피연산자들은 예약 스테이션(432)에 의해 모아질 수 있거나, 도 4에 도시된 바와 같이 예약 스테이션(432)으로부터의 발행 시에 레지스터 파일(445)로부터 판독될 수 있다. 일부 실시예들에서, 예약 스테이션(432)은 피연산자들이 이용가능해짐에 따라 (프로세서(125)에 의해 실행되고 있는 코드 시퀀스 내의 그들의 원래 순서로부터) 순서에 맞지 않게 로드/저장 op들을 발행하도록 구성된다.
다양한 실시예들에서, AGU/TLB(434)는 로드/저장 op가 예약 스테이션(432)으로부터 전송될 때 로드/저장 op에 의해 액세스되는 어드레스를 생성하도록 구성된다. AGU/TLB(434)는 그 어드레스를, 로드/저장 op의 어드레스 피연산자들로부터 생성된 유효 또는 가상 어드레스로부터 메모리를 어드레싱하는 데 실제로 사용될 수 있는 물리적 어드레스로 변환시키도록 추가로 구성될 수 있다. 로드/저장 op의 메모리 어드레스가 AGU/TLB(434)에서 가상 메모리 어드레스로부터 물리적 메모리 어드레스로 변환된 후, LSU(430)는 그 물리적 메모리 어드레스를 제외 메모리 영역과 비교할 수 있다. 일부 경우들에서, 이러한 비교는 로드/저장 동작이 STQ(436) 또는 LDQ(438) 내의 큐에 추가되고 있을 때 이루어진다. 로드/저장 op가 제외 메모리 영역에 관한 것일 경우, 이어서 제외 메모리 영역에 관한 대응하는 요청이 전송될 때, 표시가 MDR 유닛(420)에 전송될 수 있다. 그 표시를 수신하는 것에 응답하여, MDR 유닛(420)은 온화한 DSB 플러시 포인터를 유효한 상태로 설정할 수 있다. 일부 실시예들에서, AGU/TLB(434)는 DCache(417)에 대한 액세스를 생성하도록 구성된다.
다양한 실시예들에서, STQ(436)는 LSU(430)에 의한 초기 실행에서부터 폐기까지 저장들을 추적하고, 메모리 순서화 규칙들이 위반되지 않음을 보장하는 것을 담당할 수 있다. 로드 동작들은 로드 동작들에 미리 할당된 LDQ(438) 엔트리를 업데이트할 수 있고, 저장 동작들은 STQ(436)를 업데이트할 수 있어, 동작들 사이의 순서화가 시행된다. 저장 파이프들은 STQ(436)에 결합될 수 있으며, 이는 실행되었지만 커밋되지 않은 저장 동작들을 보유하도록 구성된다. STQ(436)는, 제1 로드 동작의 실행 동안, STQ(436) 내의 제1 저장 동작에 대해 제1 로드 동작이 히트하는 것을 검출하도록 구성될 수 있고, STQ(436)는 제1 저장 동작에 대한 히트 및 저장 큐 내의 제1 저장 동작과 연관된 제1 저장 데이터의 결여의 검출에 기초하여 제1 로드 동작의 재생(replay)을 야기하도록 구성된다.
다양한 실시예들에서, LDQ(438)는 LSU(430)에 의한 초기 실행에서부터 폐기까지 로드들을 추적한다. LDQ(438)는 (순서에 맞지 않게 실행되는 로드들 사이에서뿐만 아니라, 로드들과 저장들 사이에서) 메모리 순서화 규칙들이 위반되지 않음을 보장하는 것을 담당할 수 있다. 메모리 순서화 위반이 검출되는 이벤트에서, LDQ(438)는 대응하는 로드에 대한 방향전환을 시그널링할 수 있다. 방향전환은 프로세서(125)가 로드 및 프로그램 순서 내의 후속 op들을 플러시하고, 대응하는 명령어들을 리페치하게 할 수 있다. 로드 및 후속 op들에 대한 추론적 상태는 버려지고, op들은 페치 및 디코드 유닛(410)에 의해 리페치되고 다시 실행되도록 재처리될 수 있다.
다양한 실시예들에서, 실행 유닛들(440)은 임의의 유형들의 실행 유닛들을 포함한다. 예를 들어, 실행 유닛들(440)은 정수 op들을 실행하도록 구성된 정수 실행 유닛들, 부동소수점 op들을 실행하도록 구성된 부동소수점 실행 유닛들, 또는 벡터 op들을 실행하도록 구성된 벡터 실행 유닛들을 포함할 수 있다. 대체적으로, 정수 op들은 정수 피연산자들에 대해 정의된 동작(예를 들어, 산술, 논리, 시프트/회전 등)을 수행하는 op들이고, 부동소수점 op들은 부동소수점 피연산자들에 대해 동작하도록 정의된 op들이다. 벡터 op들은 미디어 데이터(예컨대, 픽셀들, 오디오 데이터, 등과 같은 이미지 데이터)를 처리하는 데 사용될 수 있다. 이와 같이, 각각의 실행 유닛(440)은, 그 실행 유닛이 핸들링(handling)하도록 정의된 그들 op들에 대해 정의된 동작들을 수행하도록 구성된 하드웨어를 포함할 수 있다. 실행 유닛들(440)은, 각각의 실행 유닛이 다른 실행 유닛들(440)에 대한 의존성 없이 그 실행 유닛에 발행되었던 op에 대해 동작하도록 구성될 수 있다는 점에서, 대체적으로 서로 독립적일 수 있다. 상이한 실행 유닛들(440)은 상이한 실행 레이턴시들(예를 들어, 상이한 파이프 길이들)을 가질 수 있다. 임의의 수 및 유형의 실행 유닛들(440)이 하나의 실행 유닛(440)을 가진 실시예들, 및 다수의 실행 유닛들(440)을 가진 실시예들을 포함한 다양한 실시예들에 포함될 수 있다.
다양한 실시예들에서, CIF(450)는 프로세서(125)를 대신해, 프로세서(125)를 포함하는 시스템의 나머지와 통신하는 것을 담당한다. 예를 들어, CIF(450)는 ICache(415) 누락들 및 DCache(417) 누락들에 대해 데이터를 요청하도록 구성될 수 있다. 데이터가 반환될 때, CIF(450)는 이어서 대응하는 캐시에 캐시 채움을 시그널링할 수 있다. DCache 채움들에 대해, CIF(450)는 또한 LSU(430)(및 더 구체적으로 LDQ(438))에 통지할 수 있다. 일부 경우들에서, LDQ(438)는 캐시 채움을 기다리고 있는 재생된 로드들을 스케줄링하여, 재생된 로드들이 채움 데이터를, 그것이 DCache(417)에 제공될 때 전달(채움 전달 동작으로 지칭됨)되게 할 수 있다. 재생된 로드가 채움 동안 성공적으로 재생되지 않는 경우, 이어서 그 재생된 로드는 후속적으로 스케줄링되고 DCache(417)를 통해 캐시 히트로서 재생될 수 있다. CIF(450)는 추가로, DCache(417)에 의해 축출되었던 수정된 캐시 라인들을 라이트백(writeback)하고, 캐싱불가능 저장들에 대해 저장 데이터를 병합하는 등을 할 수 있다. 다양한 실시예들에서, CIF(450)는 프로세서(125) 외부의 컴포넌트들에 발행된 미처리된 데이터 요청들의 수를 나타내는 기입 카운터를 추가로 유지한다. 따라서, 주변기기 요청(210)을 주변기기(140)에 전송할 때, CIF(450)는 기입기 카운터를 증분시킬 수 있다. 기입기 카운터는 DSB 동작 요청(220)을 수신한 것에 응답하여 플러시를 수행할 때를 결정하는 데 사용될 수 있다.
이전에 논의된 바와 같이, 프로세서(125)는 SOC(100)의 다른 프로세서들(125)로부터 DSB 동작 요청들(220)을 수신할 수 있다. 다양한 실시예들에서, DSB 동작 요청(220)은 캐시 유지 패킷의 일부로서 LSU(430)에서 수신된다. DSB 동작 요청(220)은 온화한 DSB 동작이 수행되어야 하는지 또는 강한 DSB 동작이 수행되어야 하는지를 나타낼 수 있다. DSB 동작 요청(220)을 수신한 것에 응답하여, LSU(430)는 프로세서(125)의 다양한 회로들을 플러시하기 위한 플러시 요청을 MDR 유닛(420)에 발행할 수 있다. 다양한 실시예들에서, 플러시하기 위한 요청을 수신한 것에 응답하여, MDR 유닛(420)은 그의 분기 및 시스템 해결 포인터를 정지시킨다(freeze). 온화한 DSB 동작이 수행되고 있고 온화한 DSB 플러시 포인터가 유효한 경우, 이어서 MDR 유닛(420)은 op들을 계속 폐기하고, 폐기 동작들 포인터가 온화한 DSB 플러시 포인터에 도달할 때 플러시를 도입한다. 온화한 DSB 동작이 요청되지만 온화한 DSB 플러시 포인터가 유효한 상태에 있지 않거나, 강한 DSB 동작이 요청되는 경우, 이어서 MDR 유닛(420)은 폐기 동작들 포인터가 분기 및 시스템 해결 포인터에 도달할 때 플러시를 도입한다. 그러나, 이전 요청들이 끝나기를 기다리는 동안, 제외 메모리 영역 내의 어드레스에 대한 요청이 런칭되는 경우, 이어서 다양한 실시예들에서, 프로세서(125)는 폐기 동작들 포인터가 온화한 DSB 플러시 포인터에 도달할 때 플러시하는 것으로 전환된다. 플러시의 일부로서, MDR 유닛(420)은 전단 회로(front-end circuit)들의 세트(도시되지 않음) 및 프로세서(125)의 실행 파이프라인들을 플러시하고, 이어서 파이프라인들이 플러시되었다는 표시를 LSU(430)에 발행할 수 있다.
온화한 DSB 플러시 포인터가 무효한 경우, 이어서 다양한 실시예들에서, LSU(430)는 (예를 들어, CIF(450)의 기입 카운터가 0과 같아지도록) CIF(450) 내의 모든 미처리된 요청들 및 LDQ(438) 및 STQ(436)에 저장된 모든 미처리된 로드/저장 동작들이 배출되기를/플러시되어 나가기를 기다린다. 온화한 DSB 플러시 포인터가 유효한 경우, LSU(430)는 제외 메모리 영역에 관한 것들을 제외한 CIF(450) 내의 모든 미처리된 요청들 및 제외 메모리 영역에 관한 것들을 제외한 LDQ(438) 및 STQ(436) 내의 모든 미처리된 로드/저장 동작들이 배출되기를/플러시되어 나가기를 기다린다. 다양한 실시예들에서, 이어서 LSU(430)는 DSB 동작이 완료됨을 나타내는 DSB 확인응답(230)을 DSB 발행 프로세서(125)로 전송한다. LSU(430)는 추가로 MDR 유닛(420)에 재시작 응답을 다시 전송하고, 이에 따라 그것은 리페치를 시작할 수 있게 된다. 온화한 DSB 플러시 포인터에 도달할 때 플러시가 발생하는 경우, 이어서 다양한 실시예들에서, 온화한 DSB 플러시 포인터가 가리키는 op보다 더 신생인 모든 op들은 리페치되고 재변환된다.
다양한 실시예들에서, 제외 메모리 영역 내의 어드레스에 대한 요청(예를 들어, 주변기기 요청(210))보다 더 신생인 로드들/저장들 op들은 (예를 들어, 마지막 레벨 캐시(205)에 대해) 누락 요청들을 하는 것이 허용된다. 그러나, 프로세서(125)가 비가역적 기계 상태로 전이하게 되는, 마지막 레벨 캐시(205)에 대한 누락 요청은 이루어질 수 없다. 예를 들어, 제외 메모리 영역 내의 어드레스에 대한 보류 중인 요청이 있는 경우, 더 신생의 비제외 메모리 영역의, 캐싱불가능 기입 요청은 전송되지 않을 수 있다. 일부 실시예들에서, 제외 메모리 영역에 대한 요청들 및 제외 메모리 영역에 대한 것이 아닌 요청들에 대해 개별적인 가상 채널들이 사용된다. 그 결과, 제외 메모리 영역 내의 어드레스에 대한 보류 중인 요청이 있는 경우, 더 신생의 비제외 메모리 영역의, 캐싱불가능 기입 요청은 전송될 수 있다. 온화한 DSB 플러시 포인터보다 더 신생인 op들로 인한 모든 보류 중인 누락 요청들은 그대로 남겨질 수 있고, (DSB 확인응답(230)을 전송한 후를 포함하여) 이후 언제든지 DCache(417)를 업데이트하도록 허용될 수 있다. 누락 요청들에 의해 취출되고 DCache(417)에 저장되는 데이터는 요청된 DSB 동작과 연관된 변환 색인 버퍼 무효화 동작들의 세트에 의해 영향을 받지 않았던 리페치된 요구 op들에 의해 이용될 수 있다. 다양한 실시예들에서, 제외 메모리 영역에 대한 더 신생의 요청들을 다른 더 예전의 요청들로부터 분리하기 위해, 그들 요청들은, 모든 더 예전의 요구들(캐싱가능 및 캐싱불가능 요청들을 포함함)이 완료되거나 또는 메모리 서브시스템에 커밋된 후에만 전송된다.
이제 도 5를 참조하면, 방법(500)의 흐름도가 도시되어 있다. 방법(500)은, 제2 프로세서(예를 들어, 프로세서(125B))로부터 수신된 데이터 장벽 동작 요청(예를 들어, DSB 동작 요청(220))을 완료하기 위해 제1 프로세서(예를 들어, 프로세서(125A))에 의해 수행되는 방법의 하나의 실시예이다. 일부 경우들에서, 제1 및 제2 프로세서들은 상이한 계산 컴플렉스들(예를 들어, 계산 컴플렉스들(120))의 일부일 수 있고; 다른 경우들에서, 그들은 동일한 계산 컴플렉스의 일부일 수 있다. 일부 실시예들에서, 방법(500)은 도시된 것보다 더 많거나 적은 단계들을 포함할 수 있다. 예를 들어, 제1 프로세서는 제2 프로세서에 데이터 장벽 동작 요청을 발행할 수 있다.
방법(500)은, 단계(510)에서 제1 프로세서가 제2 프로세서로부터 데이터 장벽 동작 요청을 수신하는 것으로 시작된다. 다양한 실시예들에서, 제1 프로세서는, 제1 데이터 장벽 동작 요청을 처리하는 동안, 복수의 프로세서들 중 제3 프로세서(예를 들어, 프로세서(125C))로부터 제2 데이터 장벽 동작 요청을 수신하도록 구성된다. 제2 데이터 장벽 동작 요청이 제1 데이터 장벽 동작 요청과는 상이한 유형의 것임(예를 들어, 강한 DSB 대 온화한 DSB)에 응답하여, 제1 프로세서는 제1 및 제2 데이터 장벽 동작 요청들을 동시에 처리할 수 있다. 제2 데이터 장벽 동작 요청이 제1 데이터 장벽 동작 요청과 동일한 유형의 것임(예를 들어, 둘 모두 온화한 DSB들임)에 응답하여, 제1 프로세서는 제1 및 제2 데이터 장벽 동작들을 순차적으로 처리할 수 있다.
단계(520)에서, 제1 프로세서는, 제외 영역(예를 들어, PCIe 어드레스 영역) 외부의 어드레스들에 관한 제1 프로세서에 의해 실행되는 미처리된 로드/저장 동작들이 완료되었다는 것을 보장한다. 다양한 실시예들에서, 제1 프로세서는 주어진 로드/저장 동작을, 로드/저장 동작이 제외 영역 내의 어드레스에 관한 것인지를 식별하는 표시(예를 들어, 비트)와 연관시키도록 구성된다. 이에 따라, 제외 영역 외부의 어드레스들에 관한 미처리된 로드/저장 동작들이 완료되었다는 것을 보장하기 위해, 제1 프로세서는 미처리된 로드/저장 동작이 제외 영역 외부의 어드레스에 관한 것임을 식별하는 표시를 갖는 미처리된 로드/저장 동작이 있는지를 결정할 수 있다. 일부 실시예들에서, 제1 프로세서는, 주어진 미처리된 로드/저장 동작에 의해 식별되는 어드레스와 제외 영역과 연관된 어드레스 범위 사이의 비교에 기초하여, 주어진 미처리된 로드/저장 동작이 제외 영역 내의 어드레스에 관한 것인지를 결정하도록 구성된다. 일부 경우들에서, 제외 영역은 복수의 프로세서들 외부의 I/O 디바이스에 맵핑된 어드레스들의 세트를 포함한다.
단계(530)에서, 제1 프로세서가 데이터 장벽 동작 요청이 완료된다고 응답할 때 제외 영역 내의 어드레스들에 관한 하나 이상의 로드/저장 동작들이 미처리되고 완료되지 않은 경우에도, 제1 프로세서는, 데이터 장벽 동작 요청이 제1 프로세서에서 완료된다고 제2 프로세서에 응답한다. 다양한 실시예들에서, 제1 프로세서는 제1 및 제2 플러시 포인터들(예를 들어, 온화한 DSB 플러시 포인터와, 분기 및 시스템 해결 포인터)을 유지하도록 구성되며, 이들 각각은 제1 프로세서의 로드/저장 유닛을 플러시할 각각의 로드/저장 동작을 식별한다. 제1 데이터 장벽 동작 요청이 2개의 상이한 유형들 중 제1 유형의 것(예를 들어, 온화한 DSB)이라는 검출에 응답하여, 제1 프로세서는 제1 플러시 포인터에서 로드/저장 유닛을 플러시할 수 있다. 제1 데이터 장벽 동작 요청이 2개의 상이한 유형들 중 제2 유형의 것(예를 들어, 강한 DSB)이라는 검출에 응답하여, 제1 프로세서는 제2 플러시 포인터에서 로드/저장 유닛을 플러시할 수 있다. 미처리된 로드/저장 동작을 완료하는 것에 응답하여, 제1 프로세서는 명령어 순서에서 미처리된 로드/저장 동작 후 다음으로 발생하는 로드/저장 동작을 식별하도록 제1 플러시 포인터를 수정할 수 있다. 제외 영역 내의 어드레스에 관한 로드/저장 동작을 개시하는 것에 응답하여, 제1 프로세서는 제1 플러시 포인터(예를 들어, 온화한 DSB 플러시 포인터)를, 제1 프로세서가 제1 플러시 포인터에서 로드/저장 유닛을 플러시하는 것을 허용하는 유효한 상태로 설정할 수 있다.
이제 도 6을 참조하면, 방법(600)의 흐름도가 도시되어 있다. 방법(600)은, 제2 프로세서(예를 들어, 프로세서(125B))로부터 수신된 데이터 장벽 동작 요청(예를 들어, DSB 동작 요청(220))을 완료하기 위해 제1 프로세서(예를 들어, 프로세서(125A))에 의해 수행되는 방법의 하나의 실시예이다. 일부 실시예들에서, 방법(600)은 도시된 것보다 더 많거나 적은 단계들을 포함할 수 있다. 예를 들어, 제1 프로세서는 제2 프로세서에 데이터 장벽 동작 요청을 발행할 수 있다.
방법(600)은, 제1 프로세서가, 메모리 어드레스 공간의 제외 영역을 정의하기 위해, 제1 프로세서에 포함된 하나 이상의 레지스터들을 설정하는 단계(610)에서 시작한다. 단계(620)에서, 제1 프로세서는 다른, 제2 프로세서로부터 제1 데이터 장벽 동작 요청을 수신한다. 일부 경우들에서, 제1 데이터 장벽 동작 요청을 처리하는 동안, 제1 프로세서는 제3의 상이한 프로세서로부터 제2 데이터 장벽 동작 요청을 수신한다. 제2 데이터 장벽 동작 요청이 제1 데이터 장벽 동작 요청과는 상이한 유형의 것임(예를 들어, 하나는 온화한 DSB 동작이고 다른 것은 강한 DSB 동작임)에 기초하여, 제1 프로세서는 제1 및 제2 데이터 장벽 동작 요청들을 동시에 처리할 수 있다. 제2 데이터 장벽 동작 요청을 처리하는 것의 일부로서, 제1 프로세서는 제1 프로세서에 의해 실행되는 모든 미처리된 로드/저장 동작들이 완료되었다는 것을 보장하고, 이어서 제2 데이터 장벽 동작 요청이 제2 프로세서에서 완료된다고 제2 프로세서에 응답할 수 있다.
단계(630)에서, 제1 데이터 장벽 동작 요청에 기초하여, 제1 프로세서는 제외 영역 외부의 어드레스들에 관한 제1 프로세서에 의해 실행되는 미처리된 로드/저장 동작들이 완료되었다는 것을 보장한다. 일부 실시예들에서, 제1 프로세서는 제1 플러시 포인터 및 제2 플러시 포인터를 유지한다. 제1 데이터 장벽 동작 요청에 기초하여 그리고 제외 영역 내의 어드레스에 관한 적어도 하나의 미처리된 로드/저장 동작이 있다는 것에 기초하여, 제1 프로세서는 제1 플러시 포인터(예를 들어, 온화한 DSB 포인터)에서 제1 프로세서의 로드/저장 유닛(예를 들어, LSU(430))을 플러시한다. 제1 데이터 장벽 동작 요청에 기초하여 그리고 제외 영역 내의 어드레스에 관한 적어도 하나의 미처리된 로드/저장 동작이 없다는 것에 기초하여, 제1 프로세서는 제2 플러시 포인터(예를 들어, 분기 및 시스템 해결 포인터)에서 로드/저장 유닛을 플러시한다. 단계(640)에서, 제1 프로세서가 제1 데이터 장벽 동작 요청이 완료된다고 응답할 때 제외 영역 내의 어드레스들에 관한 하나 이상의 로드/저장 동작들이 미처리되고 완료되지 않은 경우에도, 제1 프로세서는, 제1 데이터 장벽 동작 요청이 제1 프로세서에서 완료된다고 제2 프로세서에 응답한다.
이제 도 7을 참조하면, SOC(100)의 적어도 일부를 제조하는 예시적인 처리를 예시하는 블록도가 도시되어 있다. 예시된 실시예는 비일시적 컴퓨터 판독가능 매체(710), 반도체 제조 시스템(720), 및 생성된 제조된 SOC(100)를 포함한다. 도시된 바와 같이, 비일시적 컴퓨터 판독가능 매체(710)는 설계 정보(715)를 포함한다. 다양한 실시예들에서, SOC(100)는 추가적으로 또는 대안적으로 메모리(110)와 같은 전술한 다른 회로들을 포함한다. 예시된 실시예에서, 반도체 제조 시스템(720)은 설계 정보(715)를 처리하고 SOC(100)를 제조하도록 구성된다.
비일시적 컴퓨터 판독가능 매체(710)는 다양한 적절한 유형들의 메모리 디바이스들 또는 저장 디바이스들 중 임의의 것을 포함할 수 있다. 예를 들어, 비일시적 컴퓨터 판독가능 매체(710)는 설치 매체(예를 들어, CD-ROM, 플로피 디스크들 또는 테이프 디바이스), 컴퓨터 시스템 메모리 또는 랜덤 액세스 메모리(예를 들어, DRAM, DDR RAM, SRAM, EDO RAM, 램버스 RAM 등), 비휘발성 메모리, 예컨대, 플래시, 자기 매체(예를 들어, 하드 드라이브 또는 광학 저장소), 레지스터들, 또는 다른 유형들의 비일시적 메모리 중 적어도 하나를 포함할 수 있다. 비일시적 컴퓨터 판독가능 매체(710)는 상이한 위치들에(예컨대, 네트워크를 통해 접속되는 상이한 컴퓨터 시스템들에) 상주할 수 있는 둘 이상의 메모리 매체들을 포함할 수 있다.
설계 정보(715)는, 제한 없이, VHDL, Verilog, SystemC, Syste㎷erilog, RHDL, M, MyHDL 등과 같은 하드웨어 디스크립션 언어(hardware description language, HDL)들을 포함하는 다양한 적절한 컴퓨터 언어들 중 임의의 것을 사용하여 특정될 수 있다. 설계 정보(715)는 SOC(100)의 적어도 일부분을 제조하기 위해 반도체 제조 시스템(720)에 의해 사용가능할 수 있다. 설계 정보(715)의 포맷은 적어도 하나의 반도체 제조 시스템(720)에 의해 인식될 수 있다. 일부 실시예들에서, 설계 정보(715)는 또한, SOC(100)의 합성 및/또는 레이아웃을 특정하는 하나 이상의 셀 라이브러리들을 포함할 수 있다. 일부 실시예들에서, 설계 정보는 셀 라이브러리 요소들 및 그들의 접속성을 특정하는 넷리스트(netlist)의 형태로 전체적으로 또는 부분적으로 특정된다. 단독으로 취해진 설계 정보(715)는 대응하는 집적 회로(예를 들어, SOC(100))의 제조를 위한 충분한 정보를 포함할 수 있거나 또는 포함하지 않을 수 있다. 예를 들어, 설계 정보(715)는 제조될 회로 요소들을 특정하지만, 그들의 물리적 레이아웃을 특정하지 않을 수 있다. 이러한 경우에, 설계 정보(715)는 특정된 집적 회로를 제조하기 위해 레이아웃 정보와 조합될 수 있다.
반도체 제조 시스템(720)은 집적 회로들을 제조하도록 구성된 다양한 적절한 요소들 중 임의의 것을 포함할 수 있다. 이것은, 예를 들어, 반도체 재료들을 (예컨대, 웨이퍼 상에, 이는 마스킹을 포함할 수 있음) 침착시키는 것, 재료들을 제거하는 것, 침착된 재료들의 형상을 바꾸는 것, 재료들을 (예컨대, 재료들을 도핑하거나 또는 자외선 처리를 사용하여 유전 상수들을 바꿈으로써) 바꾸는 것 등을 위한 요소들을 포함할 수 있다. 반도체 제조 시스템(720)은 또한 정확한 동작을 위해 제조된 회로들의 다양한 테스팅을 수행하도록 구성될 수 있다.
다양한 실시예들에서, SOC(100)는 설계 정보(715)에 의해 특정된 회로 설계에 따라 동작하도록 구성되고, 이는 본 명세서에 기술된 기능 중 임의의 것을 수행하는 것을 포함할 수 있다. 예를 들어, SOC(100)는 도 1 내지 도 4를 참조하여 설명된 다양한 요소들 중 임의의 것을 포함할 수 있다. 추가로, SOC(100)는 다른 컴포넌트들과 함께 본 명세서에 기술된 다양한 기능들을 수행하도록 구성될 수 있다. 본 명세서에 설명된 기능은 다수의 접속된 집적 회로들에 의해 수행될 수 있다.
본 명세서에 사용되는 바와 같이, "~하도록 구성된 회로의 설계를 특정하는 설계 정보"라는 형태의 문구는 요소가 충족되기 위해 문제의 해당 회로가 제조되어야 한다는 것을 의미하지는 않는다. 오히려, 이러한 문구는 설계 정보가, 제조 시에, 표시된 액션들을 수행하도록 구성될 것이거나 특정된 컴포넌트들을 포함할 회로를 설명한다는 것을 나타낸다.
일부 실시예들에서, SOC(100)의 제조를 개시하는 방법이 수행된다. 설계 정보(715)가 하나 이상의 컴퓨터 시스템들을 사용하여 생성되고 비일시적 컴퓨터 판독가능 매체(710)에 저장될 수 있다. 방법은, 설계 정보(715)가 반도체 제조 시스템(720)으로 전송될 때 또는 설계 정보(715)가 반도체 제조 시스템(720)으로 전송되기 전에 종료될 수 있다. 따라서, 일부 실시예들에서, 방법은 반도체 제조 시스템(720)에 의해 수행되는 액션들을 포함하지 않을 수 있다. 설계 정보(715)는 다양한 방식들로 반도체 제조 시스템(720)으로 전송될 수 있다. 예를 들어, 설계 정보(715)는 (예를 들어, 인터넷과 같은 송신 매체를 통해) 비일시적 컴퓨터 판독가능 매체(710)로부터 반도체 제조 시스템(720)으로 (예를 들어, 직접적으로 또는 간접적으로) 송신될 수 있다. 다른 예로서, 비일시적 컴퓨터 판독가능 매체(710)가 반도체 제조 시스템(720)으로 전송될 수 있다. 제조를 개시하는 방법에 응답하여, 반도체 제조 시스템(720)은 SOC(100)를, 위에서 논의된 바와 같이 제조할 수 있다.
다음으로 도 8을 참조하면, 본 명세서에 설명된 방법들 및 메커니즘들을 통합하고/하거나 달리 이용할 수 있는 시스템(800)의 하나의 실시예의 블록도가 도시되어 있다. 예시된 실시예에서, 시스템(800)은 외부 메모리(110), 주변기기들(140), 및 전력 공급부(805)에 결합된 시스템 온 칩(SOC)(100)의 적어도 하나의 인스턴스를 포함한다. SOC(100)에 공급 전압들을 공급할 뿐만 아니라 메모리(110) 및/또는 주변기기들(140)에 하나 이상의 공급 전압들을 공급하는 전력 공급부(805)가 또한 제공된다. 다양한 실시예들에서, 전력 공급부(805)는 배터리(예를 들어, 스마트 폰, 랩톱이나 태블릿 컴퓨터, 또는 다른 디바이스 내의 재충전가능 배터리)를 표현한다. 일부 실시예들에서, SOC(100)의 하나 초과의 인스턴스가 포함된다(그리고 하나 초과의 외부 메모리(110)가 또한 포함됨).
예시된 바와 같이, 시스템(800)은 넓은 범위의 영역들에 적용되는 것으로 도시되어 있다. 예를 들어, 시스템(800)은 데스크톱 컴퓨터(810), 랩톱 컴퓨터(820), 태블릿 컴퓨터(830), 셀룰러 또는 모바일 폰(840), 또는 텔레비전(850)(또는 텔레비전에 결합된 셋톱 박스)의 칩들, 회로부, 컴포넌트들 등의 부분으로서 이용될 수 있다. 스마트워치 및 건강 모니터링 디바이스(860)가 또한 예시된다. 일부 실시예들에서, 스마트워치는 다양한 범용 컴퓨팅 관련 기능들을 포함할 수 있다. 예를 들어, 스마트워치는 이메일, 셀폰 서비스, 사용자 캘린더 등에 대한 액세스를 제공할 수 있다. 다양한 실시예들에서, 건강 모니터링 디바이스는 전용 의료 디바이스일 수 있거나, 또는 그렇지 않으면 전용 건강 관련 기능을 포함할 수 있다. 예를 들어, 건강 모니터링 디바이스는 사용자의 바이탈 사인(vital sign)들을 모니터링하고, 역학적인 사회적 거리두기의 목적을 위해 다른 사용자들에 대한 사용자의 근접도를 추적하고, 접촉을 추적하고, 건강 위험의 경우 응급 서비스에 통신을 제공하는 등일 수 있다. 다양한 실시예들에서, 위에서 언급된 스마트워치는 일부 또는 임의의 건강 모니터링 관련 기능들을 포함할 수 있거나 포함하지 않을 수 있다. 목부 주위에 착용된 디바이스들, 인체에서 이식가능한 디바이스들, 증강 및/또는 가상 현실 경험을 제공하도록 설계된 안경 등과 같은 다른 웨어러블 디바이스들이 또한 고려된다.
시스템(800)은 클라우드 기반 서비스(들)(870)의 일부로서 추가로 사용될 수 있다. 예를 들어, 이전에 언급된 디바이스들, 및/또는 다른 디바이스들은 클라우드 내의 컴퓨팅 자원들(예를 들어, 원격으로 위치된 하드웨어 및/또는 소프트웨어 자원들)에 액세스할 수 있다. 더 추가적으로, 시스템(800)은 이전에 언급된 것들 이외의 홈(home)(880)의 하나 이상의 디바이스들에서 이용될 수 있다. 예를 들어, 홈(880) 내의 기기들은 주의를 요하는 조건들을 모니터링하고 검출할 수 있다. 예를 들어, 홈(880) 내의 다양한 디바이스들(예를 들어, 냉장고, 냉각 시스템 등)은 디바이스의 상태를 모니터링하고, 특정 이벤트가 검출되면 경보를 집주인(또는 예를 들어, 정비 시설)에게 제공할 수 있다. 대안적으로, 서모스탯(thermostat)은 홈(880) 내의 온도를 모니터링할 수 있고, 집주인에 의한 다양한 조건들에 대한 응답들의 이력에 기초하여 가열/냉각 시스템에 대한 조정들을 자동화할 수 있다. 또한, 운송(890)의 다양한 모드들에 대한 시스템(800)의 적용이 도 8에 예시되어 있다. 예를 들어, 시스템(800)은 항공기, 기차들, 버스들, 렌트카(car for hire)들, 개인용 자동차들, 개인용 보트들로부터 유람선(cruise liner)들까지의 수상 선박들, (대여 또는 소유를 위한) 스쿠터들 등의 제어 및/또는 엔터테인먼트 시스템들에서 사용될 수 있다. 다양한 경우들에서, 시스템(800)은 자동화된 안내(예를 들어, 자율-주행 차량들), 일반적인 시스템 제어 등을 제공하기 위해 사용될 수 있다. 이들 임의의 많은 다른 실시예들이 가능하고 고려된다. 도 8에 예시된 디바이스들 및 적용들이 단지 예시적인 것이며 제한하려는 의도가 아니라는 것을 유의한다. 다른 디바이스들이 가능하고 고려된다.
***
본 개시내용은 개시된 개념들의 비제한적인 구현들인 "실시예들"에 대한 참조들을 포함한다. "일 실시예", "하나의 실시예", "특정 실시예", "일부 실시예들", "다양한 실시예들" 등에 대한 언급들은 반드시 동일한 실시예를 지칭하는 것은 아니다. 상세하게 설명된 특정 실시예들뿐만 아니라, 본 개시내용의 사상 또는 범주 내에 속하는 수정들 또는 대안들을 포함하는 많은 가능한 실시예들이 고려된다. 실시예들의 모두가 반드시 본 명세서에 설명된 잠재적인 이점들 중 임의의 또는 모든 것을 나타내는 것은 아닐 것이다.
본 개시내용은 "실시예" 또는 "실시예들의 그룹들"(예를 들어, "일부 실시예들" 또는 "다양한 실시예들")에 대한 언급들을 포함한다. 실시예들은 개시된 개념들의 상이한 구현들 또는 인스턴스들이다. "일 실시예", "하나의 실시예", "특정 실시예" 등에 대한 언급들은 반드시 동일한 실시예를 지칭하는 것은 아니다. 구체적으로 개시된 것들 뿐만 아니라, 본 개시내용의 사상 또는 범주 내에 속하는 수정들 또는 대안들을 포함하는 많은 가능한 실시예들이 고려된다.
본 개시내용은 개시된 실시예들로부터 발생할 수 있는 잠재적인 이점들을 논의할 수 있다. 이들 실시예들의 모든 구현들이 반드시 잠재적인 이점들 중 임의의 또는 모든 것을 나타내는 것은 아닐 것이다. 특정 구현에 대해 이점이 실현되는지 여부는 많은 인자들에 의존하며, 이들 중 일부는 본 개시내용의 범위를 벗어난다. 실제로, 청구항들의 범위 내에 속하는 구현이 임의의 개시된 이점들 중 일부 또는 전부를 나타내지 않을 수 있는 많은 이유들이 있다. 예를 들어, 특정 구현은 개시된 실시예들 중 하나와 함께, 하나 이상의 개시된 이점들을 무효화하거나 약화시키는, 본 개시내용의 범위 밖의 다른 회로부를 포함할 수 있다. 더욱이, 특정 구현의 차선의 설계 실행(예를 들어, 구현 기법들 또는 도구들)은 또한 개시된 이점들을 무효화하거나 약화시킬 수 있다. 숙련된 구현을 가정하더라도, 이점들의 실현은 구현이 전개되는 환경 상황들과 같은 다른 인자들에 여전히 의존할 수 있다. 예를 들어, 특정 구현에 공급되는 입력들은 본 개시내용에서 해결되는 하나 이상의 문제들이 특정 기회에 발생하는 것을 방지할 수 있으며, 그 결과, 그 해결책의 이익이 실현되지 않을 수 있다. 본 개시내용 외부의 가능한 인자들의 존재를 고려할 때, 본 명세서에서 설명되는 임의의 잠재적인 이점들은, 침해를 입증하기 위해 충족되어야 하는 청구항 제한들로서 해석되지 않아야 한다는 것이 명백하게 의도된다. 오히려, 그러한 잠재적 이점들의 식별은 본 개시내용의 이익을 갖는 설계자들에게 이용가능한 개선의 유형(들)을 예시하도록 의도된다. 그러한 이점들이 허용가능하게 설명된다는 것(예를 들어, 특정 이점이 "발생할 수 있다"고 언급함)은 그러한 이점들이 실제로 실현될 수 있는지에 대한 의구심을 전달하도록 의도되는 것이 아니라, 그러한 이점들의 실현이 종종 부가적인 인자들에 의존한다는 기술적 현실을 인식하도록 의도된다.
달리 언급되지 않는 한, 실시예들은 비제한적이다. 즉, 개시된 실시예들은, 특정 특징에 대해 단일 예만이 설명되는 경우에도, 본 개시내용에 기초하여 작성되는 청구항들의 범위를 제한하도록 의도되지 않는다. 개시된 실시예들은, 이에 반하는 본 개시내용의 어떠한 진술도 없이, 제한적이기보다는 예시적인 것으로 의도된다. 따라서, 본 출원은 개시된 실시예들을 커버하는 청구항들뿐만 아니라, 본 개시내용의 이익을 갖는 당업자에게 명백할 그러한 대안들, 수정들 및 등가물들을 허용하도록 의도된다.
예를 들어, 본 출원에서의 특징들은 임의의 적합한 방식으로 조합될 수 있다. 따라서, 특징부들의 임의의 그러한 조합에 대해 본 출원(또는 그에 대한 우선권을 주장하는 출원)의 심사 동안에 새로운 청구범위가 작성될 수 있다. 특히, 첨부된 청구항들을 참조하면, 종속 청구항들로부터의 특징들은 다른 독립 청구항들로부터 의존하는 청구항들을 포함하여, 적절한 경우 다른 종속 청구항들의 특징들과 조합될 수 있다. 유사하게, 개개의 독립 청구항들로부터의 특징들은 적절한 경우 조합될 수 있다.
따라서, 첨부된 종속 청구항들은 각각이 단일의 다른 청구항에 의존하도록 작성될 수 있지만, 부가적인 종속성들이 또한 고려된다. 본 개시내용과 일치하는 종속물에서의 특징들의 임의의 조합들이 고려되며, 이러한 또는 다른 출원에서 청구될 수 있다. 간단히 말하면, 조합들은 첨부된 청구항들에 구체적으로 열거된 것들로 제한되지 않는다.
적절한 경우, 하나의 포맷 또는 법정 유형(예를 들어, 장치)으로 작성된 청구항들은 다른 포맷 또는 법정 유형(예를 들어, 방법)의 대응하는 청구항들을 지원하도록 의도되는 것으로 또한 고려된다.
본 개시내용은 법적인 문서이기 때문에, 다양한 용어들 및 문구들은 행정적 및 사법적 해석의 대상이 될 수 있다. 본 개시내용 전반에 걸쳐 제공되는 정의들뿐만 아니라 다음의 단락들이 본 개시내용에 기초하여 작성되는 청구항들을 해석하는 방법을 결정하는 데 사용될 것이라는 공지가 본 명세서에 주어진다.
물품의 단수 형태(즉, "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로 프로그래밍되는 하드웨어의 마이크로아키텍처 정의를 형성한다. 따라서, 마이크로아키텍처 정의는 많은 물리적 구현들이 유도될 수 있는 구조로서 당업자들에 의해 인식되며, 이들 모두는 마이크로아키텍처 정의에 의해 설명된 더 넓은 구조에 속한다. 즉, 본 개시내용에 따라 공급되는 마이크로아키텍처 정의를 제공받는 당업자는, 과도한 실험 없이 그리고 통상의 기술의 적용으로, 회로들/유닛들/컴포넌트들의 디스크립션을 Verilog 또는 VHDL과 같은 하드웨어 디스크립션 언어(HDL)로 코딩함으로써 구조를 구현할 수 있다. HDL 디스크립션은 종종, 기능적으로 보일 수 있는 방식으로 표현된다. 그러나, 당업자들에게, 이러한 HDL 디스크립션은 회로, 유닛 또는 컴포넌트의 구조를 다음 레벨의 구현 세부사항으로 변환하는 데 사용되는 방식이다. 그러한 HDL 디스크립션은 (통상적으로 합성가능하지 않은) 거동 코드, (거동 코드와는 대조적으로, 통상적으로 합성가능한) 레지스터 전송 언어(RTL) 코드, 또는 구조적 코드(예를 들어, 로직 게이트들 및 그들의 연결성을 특정하는 넷리스트)의 형태를 취할 수 있다. HDL 디스크립션은 주어진 집적 회로 제조 기술을 위해 설계된 셀들의 라이브러리에 대해 순차적으로 합성될 수 있고, 타이밍, 전력 및 다른 이유들로 인해 수정되어 최종 설계 데이터베이스를 생성할 수 있으며, 이는 파운드리(foundry)로 송신되어 마스크들을 생성하고 궁극적으로 집적 회로를 생성할 수 있다. 일부 하드웨어 회로들 또는 그의 부분들은 또한 회로도 편집기(schematic editor)로 맞춤 설계될 수 있고 합성된 회로부와 함께 집적 회로 설계 내로 캡처될 수 있다. 집적 회로는 트랜지스터들, 및 다른 회로 요소들(예를 들어, 커패시터들, 레지스터들, 인덕터들 등과 같은 수동 요소들) 및 트랜지스터들과 회로 요소들 사이의 상호접속부를 포함할 수 있다. 일부 실시예들은 하드웨어 회로들을 구현하기 위해 함께 결합된 다수의 집적 회로들을 구현할 수 있고, 그리고/또는 일부 실시예들에서는 별개의 요소들이 사용될 수 있다. 대안적으로, HDL 설계는 FPGA(Field Programmable Gate Array)와 같은 프로그래밍가능 로직 어레이로 합성될 수 있으며 FPGA에서 구현될 수 있다. 회로들의 그룹의 설계와 이들 회로들의 후속 저레벨 구현 사이의 이러한 분리는 일반적으로, 회로 또는 로직 설계자가 회로가 무엇을 하도록 구성되는지의 설명을 넘어서 저레벨 구현에 대한 특정 세트의 구조들을 결코 특정하지 않는 시나리오를 도출하는데, 이는 이러한 처리가 회로 구현 처리의 상이한 스테이지에서 수행되기 때문이다.
회로 요소들의 많은 상이한 저레벨 조합들이 회로의 동일한 규격을 구현하는 데 사용될 수 있다는 사실은 그 회로에 대한 다수의 등가 구조들을 초래한다. 언급된 바와 같이, 이러한 저레벨 회로 구현들은 제조 기술의 변화들, 집적 회로를 제조하기 위해 선택된 파운드리, 특정 프로젝트를 위해 제공된 셀들의 라이브러리 등에 따라 변할 수 있다. 많은 경우들에서, 이들 상이한 구현들을 생성하기 위해 상이한 설계 도구들 또는 방법론들에 의해 이루어지는 선택들은 임의적일 수 있다.
게다가, 회로의 특정 기능 규격의 단일 구현이 주어진 실시예에 대해 많은 수의 디바이스들(예를 들어, 수백만 개의 트랜지스터들)을 포함하는 것이 일반적이다. 따라서, 엄청난 볼륨의 이러한 정보는, 등가의 가능한 구현들의 방대한 어레이는 말할 것도 없이, 단일 실시예를 구현하는 데 사용되는 저레벨 구조의 완전한 설명을 제공하는 것을 비실용적으로 만든다. 이러한 이유로, 본 개시내용은 업계에서 일반적으로 사용되는 기능적 속기(shorthand)를 사용하여 회로들의 구조를 설명한다.

Claims (20)

  1. 시스템으로서,
    복수의 프로세서들을 포함하고, 상기 복수의 프로세서들 각각은 메모리 어드레스 공간의 제외 영역을 정의하도록 프로그래밍가능한 하나 이상의 레지스터들을 포함하고, 상기 복수의 프로세서들은 통신가능하게 결합되고,
    상기 복수의 프로세서들 중 제1 프로세서는 데이터 장벽 명령어를 실행하는 것에 응답하여 제1 데이터 장벽 동작 요청을 발행하도록 구성되고;
    상기 복수의 프로세서들 중 제2 프로세서는, 상기 제1 프로세서로부터 상기 제1 데이터 장벽 동작 요청을 수신하는 것에 기초하여,
    상기 제외 영역 외부의 어드레스들에 관한 상기 제2 프로세서에 의해 실행되는 미처리된 로드/저장 동작들이 완료되었다는 것을 보장하도록; 그리고
    상기 제2 프로세서가 상기 제1 데이터 장벽 동작 요청이 완료된다고 응답할 때 상기 제외 영역 내의 어드레스들에 관한 하나 이상의 로드/저장 동작들이 미처리되고 완료되지 않은 경우에도, 상기 제1 데이터 장벽 동작 요청이 상기 제2 프로세서에서 완료된다고 상기 제1 프로세서에 응답하도록 구성되는, 시스템.
  2. 제1항에 있어서, 상기 제2 프로세서는,
    로드/저장 동작을, 상기 로드/저장 동작이 상기 제외 영역 내의 어드레스에 관한 것인지를 식별하는 표시와 연관시키도록 구성되고, 상기 제외 영역 외부의 어드레스들에 관한 상기 미처리된 로드/저장 동작들이 완료되었다는 것을 보장하기 위해, 상기 제2 프로세서는 미처리된 로드/저장 동작이 상기 제외 영역 외부의 어드레스에 관한 것임을 식별하는 표시를 갖는 상기 미처리된 로드/저장 동작이 있는지를 결정하도록 추가로 구성되는, 시스템.
  3. 제1항에 있어서, 상기 제2 프로세서는,
    미처리된 로드/저장 동작에 의해 식별되는 어드레스와 상기 제외 영역과 연관된 어드레스 범위 사이의 비교에 기초하여, 상기 미처리된 로드/저장 동작이 상기 제외 영역 내의 어드레스에 관한 것인지를 결정하도록 구성되는, 시스템.
  4. 제1항에 있어서, 상기 제2 프로세서는, 상기 제1 프로세서에 응답할 시기를 고려할 때, 상기 제외 영역 내의 어드레스들에 관한 미처리된 로드/저장 동작들을 포함하도록 상기 제2 프로세서에 지시하는 제2 데이터 장벽 동작 요청을 수신하는 것에 응답하여,
    상기 제2 프로세서에 의해 실행되는 모든 미처리된 로드/저장 동작들이 완료되었다는 것을 보장하도록; 그리고
    상기 제2 데이터 장벽 동작 요청이 상기 제2 프로세서에서 완료된다고 상기 제1 프로세서에 응답하도록 구성되는, 시스템.
  5. 제1항에 있어서, 상기 제2 프로세서는,
    상기 제1 데이터 장벽 동작 요청을 처리하는 동안, 상기 복수의 프로세서들 중 제3 프로세서로부터 제2 데이터 장벽 동작 요청을 수신하도록; 그리고
    상기 제2 데이터 장벽 동작 요청이 상기 제1 데이터 장벽 동작 요청과는 상이한 유형의 것임에 응답하여, 상기 제1 및 제2 데이터 장벽 동작 요청들을 동시에 처리하도록 구성되는, 시스템.
  6. 제1항에 있어서, 상기 제2 프로세서는,
    상기 제1 데이터 장벽 동작 요청을 처리하는 동안, 상기 복수의 프로세서들 중 제3 프로세서로부터 제2 데이터 장벽 동작 요청을 수신하도록; 그리고
    상기 제2 데이터 장벽 동작 요청이 상기 제1 데이터 장벽 동작 요청과 동일한 유형의 것임에 응답하여, 상기 제1 및 제2 데이터 장벽 동작들을 순차적으로 처리하도록 구성되는, 시스템.
  7. 제1항에 있어서, 상기 제외 영역은 상기 복수의 프로세서들 외부의 I/O 디바이스에 맵핑된 어드레스들의 세트를 포함하는, 시스템.
  8. 제1항에 있어서, 상기 제1 프로세서는 2개의 상이한 유형들의 데이터 장벽 동작 요청들을 발행하도록 구성되고, 상기 제2 프로세서는,
    제1 및 제2 플러시 포인터(flush pointer)들을 유지하도록 - 상기 제1 및 제2 플러시 포인터들 각각은 상기 제2 프로세서의 로드/저장 유닛을 플러시할 각각의 로드/저장 동작을 식별함 -;
    상기 제1 데이터 장벽 동작 요청이 상기 2개의 상이한 유형들 중 제1 유형의 것이라는 검출에 응답하여, 상기 제1 플러시 포인터에서 상기 로드/저장 유닛을 플러시하도록; 그리고
    상기 제1 데이터 장벽 동작 요청이 상기 2개의 상이한 유형들 중 제2 유형의 것이라는 검출에 응답하여, 상기 제2 플러시 포인터에서 상기 로드/저장 유닛을 플러시하도록 구성되는, 시스템.
  9. 제8항에 있어서, 상기 제2 프로세서는,
    미처리된 로드/저장 동작을 완료하는 것에 응답하여, 명령어 순서에서 상기 미처리된 로드/저장 동작 후 다음으로 발생하는 로드/저장 동작을 식별하기 위해 상기 제1 플러시 포인터를 수정하도록 구성되는, 시스템.
  10. 제8항에 있어서, 상기 제2 프로세서는,
    상기 제외 영역 내의 어드레스에 관한 로드/저장 동작을 개시하는 것에 응답하여, 상기 제1 플러시 포인터를, 상기 제2 프로세서가 상기 제1 플러시 포인터에서 상기 로드/저장 유닛을 플러시하는 것을 허용하는 유효한 상태로 설정하도록 구성되는, 시스템.
  11. 방법으로서,
    제1 프로세서에 의해, 제2 프로세서로부터 제1 데이터 장벽 동작 요청을 수신하는 단계;
    상기 제2 프로세서로부터 상기 제1 데이터 장벽 동작 요청을 수신하는 것에 기초하여, 상기 제1 프로세서가, 제외 영역 외부의 어드레스들에 관한 상기 제1 프로세서에 의해 실행되는 미처리된 로드/저장 동작들이 완료되었다는 것을 보장하는 단계; 및
    상기 제1 프로세서에 의해, 상기 제1 프로세서가 상기 제1 데이터 장벽 동작 요청이 완료된다고 응답할 때 상기 제외 영역 내의 어드레스들에 관한 하나 이상의 로드/저장 동작들이 미처리되고 완료되지 않은 경우에도, 상기 제1 데이터 장벽 동작 요청이 상기 제1 프로세서에서 완료된다고 상기 제2 프로세서에 응답하는 단계를 포함하는, 방법.
  12. 제11항에 있어서,
    상기 제1 프로세서에 의해, 상기 제1 데이터 장벽 동작 요청을 수신하는 것에 응답하여, 상기 제1 프로세서의 로드/저장 유닛을 플러시할, 명령어 시퀀스 내의 위치를 식별하는 제1 플러시 포인터를 유지하는 단계; 및
    상기 제1 프로세서에 의해, 상기 제1 데이터 장벽 동작 요청과는 상이한 유형의 데이터 장벽 동작 요청을 수신하는 것에 응답하여, 상기 로드/저장 유닛을 플러시할, 상기 명령어 시퀀스 내의 상이한 위치를 식별하는 제2 플러시 포인터를 유지하는 단계를 추가로 포함하는, 방법.
  13. 제12항에 있어서,
    상기 제1 프로세서에 의해, 상기 제외 영역 내의 메모리 어드레스에 관한 저장 동작을 개시하는 단계; 및
    상기 저장 동작을 개시하는 것에 응답하여, 상기 제1 프로세서가 명령어 순서에서 상기 저장 동작 후 다음으로 발생하는 로드/저장 동작을 식별하도록 상기 제1 플러시 포인터를 업데이트하는 단계를 추가로 포함하는, 방법.
  14. 제12항에 있어서,
    상기 제1 프로세서에 의해, 로드/저장 동작을 완료하는 단계; 및
    상기 로드/저장 동작을 완료하는 것에 응답하여, 상기 제1 프로세서가 명령어 순서에서 상기 완료된 로드/저장 동작 후 다음으로 발생하는 로드/저장 동작을 식별하도록 상기 제1 플러시 포인터를 업데이트하는 단계를 추가로 포함하는, 방법.
  15. 제11항에 있어서,
    상기 제1 데이터 장벽 동작 요청을 수신하는 단계 전에, 상기 제1 프로세서가, 제2 데이터 장벽 동작 요청이 상기 제1 프로세서에서 완료된다고 응답하기 전에, 상기 제외 영역 내의 어드레스들에 관한 미처리된 로드/저장 동작들을 완료하도록 상기 제1 프로세서에 지시하는 상기 제2 데이터 장벽 동작 요청을 수신하는 단계를 추가로 포함하고,
    상기 제1 데이터 장벽 동작 요청이 상기 제1 프로세서에서 완료된다고 상기 제2 프로세서에 응답하는 단계는 상기 이전의 수신된 제2 데이터 장벽 동작 요청이 상기 제1 프로세서에서 완료된다고 응답하기 전에 수행되는, 방법.
  16. 하드웨어 집적 회로를 제조하기 위해 설계 정보를 사용하도록 구성된 제조 시스템에 의해 인식되는 포맷으로 회로 설계를 특정하는 상기 설계 정보를 저장하는 비일시적 컴퓨터 판독가능 매체로서, 상기 제조 시스템은,
    복수의 프로세서들을 포함하고, 상기 복수의 프로세서들 각각은 메모리 어드레스 공간의 제외 영역을 정의하도록 프로그래밍가능한 하나 이상의 레지스터들을 포함하고, 상기 복수의 프로세서들은 통신가능하게 결합되고,
    상기 복수의 프로세서들 중 제1 프로세서는 데이터 장벽 명령어를 실행하는 것에 응답하여 제1 데이터 장벽 동작 요청을 발행하도록 구성되고;
    상기 복수의 프로세서들 중 제2 프로세서는,
    메모리 어드레스 공간의 제외 영역을 정의하도록 상기 제2 프로세서에 포함된 하나 이상의 레지스터들을 설정하도록;
    상기 제1 프로세서로부터 상기 제1 데이터 장벽 동작 요청을 수신하도록; 그리고
    상기 제1 데이터 장벽 동작 요청에 기초하여,
    상기 제외 영역 외부의 어드레스들에 관한 상기 제2 프로세서에 의해 실행되는 미처리된 로드/저장 동작들이 완료되었다는 것을 보장하고;
    상기 제2 프로세서가 상기 제1 데이터 장벽 동작 요청이 완료된다고 응답할 때 상기 제외 영역 내의 어드레스들에 관한 하나 이상의 로드/저장 동작들이 미처리되고 완료되지 않은 경우에도, 상기 제1 데이터 장벽 동작 요청이 상기 제2 프로세서에서 완료된다고 상기 제1 프로세서에 응답하도록 구성되는, 매체.
  17. 제16항에 있어서, 상기 제2 프로세서는,
    제1 플러시 포인터 및 제2 플러시 포인터를 유지하도록;
    상기 제1 데이터 장벽 동작 요청을 수신하는 것에 응답하여 그리고 상기 제외 영역 내의 어드레스에 관한 적어도 하나의 미처리된 로드/저장 동작이 있다는 것에 기초하여, 상기 제1 플러시 포인터에서 상기 제2 프로세서의 로드/저장 유닛을 플러시하도록; 그리고
    상기 제1 데이터 장벽 동작 요청을 수신하는 것에 응답하여 그리고 상기 제외 영역 내의 어드레스에 관한 적어도 하나의 미처리된 로드/저장 동작이 없다는 것에 기초하여, 상기 제2 플러시 포인터에서 상기 제2 프로세서의 로드/저장 유닛을 플러시하도록 구성되는, 매체.
  18. 제16항에 있어서, 상기 제2 프로세서는,
    상기 제외 영역 외부의 어드레스들에 관한 로드/저장 동작들을 핸들링하기 위한 제1 가상 채널을 구현하도록; 그리고
    상기 제외 영역 내의 어드레스들에 관한 로드/저장 동작들을 핸들링하기 위한 개별적인, 제2 가상 채널을 구현하도록 구성되는, 매체.
  19. 제16항에 있어서, 상기 제2 프로세서는,
    상기 제1 데이터 장벽 동작 요청을 처리하는 동안, 상기 복수의 프로세서들 중 제3 프로세서로부터 제2 데이터 장벽 동작 요청을 수신하도록; 그리고
    상기 제2 데이터 장벽 동작 요청이 상기 제1 데이터 장벽 동작 요청과는 상이한 유형의 것임에 응답하여, 상기 제1 및 제2 데이터 장벽 동작 요청들을 동시에 처리하도록 구성되는, 매체.
  20. 제16항에 있어서, 상기 제2 프로세서는, 상기 제1 프로세서에 응답할 때를 고려할 때, 상기 제외 영역 내의 어드레스들에 관한 미처리된 로드/저장 동작들을 포함하도록 상기 제2 프로세서에 지시하는 제2 데이터 장벽 동작 요청을 수신하는 것에 응답하여,
    상기 제2 프로세서에 의해 실행되는 모든 미처리된 로드/저장 동작들이 완료되었다는 것을 보장하도록; 그리고
    상기 제2 데이터 장벽 동작 요청이 상기 제2 프로세서에서 완료된다고 상기 제1 프로세서에 응답하도록 구성되는, 매체.
KR1020237008732A 2020-09-11 2021-09-10 제외 영역을 갖는 dsb 동작 KR20230076814A (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US202063077385P 2020-09-11 2020-09-11
US63/077,385 2020-09-11
US17/469,504 US11720360B2 (en) 2020-09-11 2021-09-08 DSB operation with excluded region
US17/469,504 2021-09-08
PCT/US2021/049750 WO2022056187A1 (en) 2020-09-11 2021-09-10 Dsb operation with excluded region

Publications (1)

Publication Number Publication Date
KR20230076814A true KR20230076814A (ko) 2023-05-31

Family

ID=80626642

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020237008732A KR20230076814A (ko) 2020-09-11 2021-09-10 제외 영역을 갖는 dsb 동작

Country Status (6)

Country Link
US (2) US11720360B2 (ko)
KR (1) KR20230076814A (ko)
CN (1) CN116057515A (ko)
DE (1) DE112021004758T5 (ko)
GB (1) GB2614153A (ko)
WO (1) WO2022056187A1 (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20230141290A (ko) 2022-03-31 2023-10-10 리벨리온 주식회사 뉴럴 프로세싱 장치
US12045615B1 (en) 2022-09-16 2024-07-23 Apple Inc. Processing of synchronization barrier instructions

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6636950B1 (en) * 1998-12-17 2003-10-21 Massachusetts Institute Of Technology Computer architecture for shared memory access
US6708269B1 (en) * 1999-12-30 2004-03-16 Intel Corporation Method and apparatus for multi-mode fencing in a microprocessor system
US6678810B1 (en) * 1999-12-30 2004-01-13 Intel Corporation MFENCE and LFENCE micro-architectural implementation method and system
US6748518B1 (en) 2000-06-06 2004-06-08 International Business Machines Corporation Multi-level multiprocessor speculation mechanism
US6978360B2 (en) * 2001-05-11 2005-12-20 International Business Machines Corporation Scalable processor
US7552302B1 (en) * 2004-09-14 2009-06-23 Azul Systems, Inc. Ordering operation
JP4448784B2 (ja) * 2005-03-15 2010-04-14 株式会社日立製作所 並列計算機の同期方法及びプログラム
US7506132B2 (en) 2005-12-22 2009-03-17 International Business Machines Corporation Validity of address ranges used in semi-synchronous memory copy operations
US8368701B2 (en) 2008-11-06 2013-02-05 Via Technologies, Inc. Metaprocessor for GPU control and synchronization in a multiprocessor environment
FR2939922B1 (fr) 2008-12-16 2011-03-04 Bull Sas Gestionnaire physique de barriere de synchronisation entre processus multiples
US8930636B2 (en) 2012-07-20 2015-01-06 Nvidia Corporation Relaxed coherency between different caches
US9442755B2 (en) * 2013-03-15 2016-09-13 Nvidia Corporation System and method for hardware scheduling of indexed barriers
US11119927B2 (en) 2018-04-03 2021-09-14 International Business Machines Corporation Coordination of cache memory operations
JP7064134B2 (ja) * 2018-05-11 2022-05-10 富士通株式会社 演算処理装置及び演算処理装置の制御方法
US11853758B2 (en) * 2019-09-27 2023-12-26 Intel Corporation Techniques for decoupled access-execute near-memory processing

Also Published As

Publication number Publication date
DE112021004758T5 (de) 2023-08-03
GB2614153A (en) 2023-06-28
US11720360B2 (en) 2023-08-08
WO2022056187A1 (en) 2022-03-17
US20230333851A1 (en) 2023-10-19
CN116057515A (zh) 2023-05-02
GB202303389D0 (en) 2023-04-19
US20220083338A1 (en) 2022-03-17

Similar Documents

Publication Publication Date Title
EP2476060B1 (en) Store aware prefetching for a datastream
US20230333851A1 (en) DSB Operation with Excluded Region
US20240045680A1 (en) Coprocessor Register Renaming
US20230359557A1 (en) Request Ordering in a Cache
US12007920B2 (en) Scalable interrupts
US11886340B1 (en) Real-time processing in computer systems
US20230066236A1 (en) Criticality-Informed Caching Policies
US11755331B2 (en) Writeback hazard elimination using a plurality of temporary result-storage elements
US11556485B1 (en) Processor with reduced interrupt latency
CN116194901A (zh) 以缺乏局部性的数据为目标的存储器请求的预取禁用
US11630771B2 (en) Poison mechanisms for deferred invalidates
US12008369B1 (en) Load instruction fusion
US12045615B1 (en) Processing of synchronization barrier instructions
US10747535B1 (en) Handling non-cacheable loads in a non-coherent processor
TWI825910B (zh) 快取子系統的預測確認
US11550716B2 (en) I/O agent
US11983538B2 (en) Load-store unit dual tags and replays
US11809874B2 (en) Conditional instructions distribution and execution on pipelines having different latencies for mispredictions
US12001847B1 (en) Processor implementing parallel in-order execution during load misses
WO2023150114A9 (en) Conditional instructions prediction
TW202422346A (zh) 控制快取原則的系統及方法,及快取區

Legal Events

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