KR20190049735A - 하이브리드 입력/출력 코히어런트 기록 - Google Patents

하이브리드 입력/출력 코히어런트 기록 Download PDF

Info

Publication number
KR20190049735A
KR20190049735A KR1020197007701A KR20197007701A KR20190049735A KR 20190049735 A KR20190049735 A KR 20190049735A KR 1020197007701 A KR1020197007701 A KR 1020197007701A KR 20197007701 A KR20197007701 A KR 20197007701A KR 20190049735 A KR20190049735 A KR 20190049735A
Authority
KR
South Korea
Prior art keywords
coherent
write request
hybrid
coherent write
processing device
Prior art date
Application number
KR1020197007701A
Other languages
English (en)
Other versions
KR102008131B1 (ko
Inventor
앤드류 에드먼드 터너
보후슬라프 리칠릭
Original Assignee
퀄컴 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 퀄컴 인코포레이티드 filed Critical 퀄컴 인코포레이티드
Publication of KR20190049735A publication Critical patent/KR20190049735A/ko
Application granted granted Critical
Publication of KR102008131B1 publication Critical patent/KR102008131B1/ko

Links

Images

Classifications

    • 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/0804Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with main memory 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/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0817Cache consistency protocols using directory methods
    • G06F12/0828Cache consistency protocols using directory methods with concurrent directory accessing, i.e. handling multiple concurrent coherency transactions
    • 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/0835Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means for main memory peripheral accesses (e.g. I/O or DMA)
    • 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/084Multiuser, multiprocessor or multiprocessing cache systems with a shared cache
    • 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/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1605Handling requests for interconnection or transfer for access to memory bus based on arbitration
    • G06F13/1652Handling requests for interconnection or transfer for access to memory bus based on arbitration in a multiprocessor architecture
    • G06F13/1663Access to shared memory
    • 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/38Information transfer, e.g. on bus
    • G06F13/40Bus structure
    • G06F13/4004Coupling between buses
    • G06F13/4022Coupling between buses using switching circuits, e.g. switching matrix, connection or expansion network
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0613Improving I/O performance in relation to throughput
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/065Replication mechanisms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • G06F3/0685Hybrid storage combining heterogeneous device types, e.g. hierarchical storage, hybrid arrays
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/62Details of cache specific to multiprocessor cache arrangements
    • G06F2212/621Coherency control relating to peripheral accessing, e.g. from DMA or I/O device
    • 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)
  • Human Computer Interaction (AREA)
  • Mathematical Physics (AREA)
  • Computer Hardware Design (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

양태들은 하이브리드 입력/출력 (I/O) 코히어런트 기록 요청을 수신하는 것, I/O 코히어런트 기록 요청으로부터 제 1 하이브리드 I/O 코히어런트 기록 요청 및 제 2 하이브리드 I/O 코히어런트 기록 요청을 생성하는 것, I/O 코히어런트 기록 요청의 제 1 하이브리드 I/O 코히어런트 기록 요청 및 I/O 코히어런트 기록 데이터를 공유된 메모리로 전송하는 것, 및 I/O 코히어런트 기록 요청의 I/O 코히어런트 기록 데이터 없이 제 2 하이브리드 I/O 코히어런트 기록 요청을 코히어런시 도메인으로 전송하는 것을 포함하는 컴퓨팅 디바이스 상에서 하이브리드 I/O 코히어런트 기록 요청을 구현하는 컴퓨팅 디바이스들, 장치 및 이 장치에 의해 구현되는 방법들을 포함한다.

Description

하이브리드 입력/출력 코히어런트 기록
가속기는 중앙 프로세싱 유닛 (central processing unit; CPU) 프로세스 워크로드들을 돕는데 이용할 수 있다. 워크로드들은 종종 CPU 캐시로부터의 데이터를 이용할 필요가 있다. 가속기들은 워크로드 실행들로부터 랜덤 랜덤 액세스 메모리 (random access memory; RAM) 에 데이터를 기록할 수 있다. 입출력 (I/O) 코히어런트 모드에서, 데이터를 RAM 에 기록하라는 요청을 송신하는 것 및 RAM 에 기록할 데이터를 송신하는 것은 상호접속부를 통하여 RAM 으로 그리고 코히어런시 도메인을 통하여 RAM 으로 라우팅된다. RAM 에 데이터 기록을 요청하는 경로 및 데이터가 RAM 에 기록될 경로는 상호접속부로부터 RAM 으로, 상호접속부로부터 코히어런시 도메인으로, 그리고나서 RAM 으로 전달되도록 복제된다. 상호접속부로부터 RAM 으로의 중복 경로들은 I/O 코히어런트 능력들을 갖는 디바이스에서의 영역 비용들을 증가시킨다. 또한, 코히어런트 도메인을 통한 중복 경로들은 상호접속부로부터 RAM 으로의 경로보다 덜 효율적일 수 있다. 더 낮은 효율 경로는 속도, 레이턴시 및/또는 전력 패널티들을 초래할 수 있다.
여러 개시된 양태들은 컴퓨팅 디바이스 상에서의 하이브리드 입력/출력 (I/O) 코히어런트 기록 요청을 구현하기 위한 장치들 및 방법들을 포함할 수도 있다. 여러 양태들은 I/O 코히어런트 기록 요청을 수신하는 것, I/O 코히어런트 기록 요청으로부터 제 1 하이브리드 I/O 코히어런트 기록 요청 및 제 2 하이브리드 I/O 코히어런트 기록 요청을 생성하는 것, I/O 코히어런트 기록 요청의 제 1 하이브리드 I/O 코히어런트 기록 요청 및 I/O 코히어런트 기록 데이터를 공유된 메모리로 전송하는 것, 및 I/O 코히어런트 기록 요청의 I/O 코히어런트 기록 데이터 없이 제 2 하이브리드 I/O 코히어런트 기록 요청을 코히어런시 도메인으로 전송하는 것을 포함할 수도 있다.
일부 양태들은 하이브리드 I/O 코히어런트 기록 모드가 인에이블되는지의 여부를 결정하는 것을 더 포함할 수도 있고, I/O 코히어런트 기록 요청으로부터 제 1 하이브리드 I/O 코히어런트 기록 요청 및 제 2 하이브리드 I/O 코히어런트 기록 요청을 생성하는 것은 하이브리드 I/O 코히어런트 기록 모드가 인에이블된다고 결정하는 것에 응답하여 I/O 코히어런트 기록 요청으로부터 제 1 하이브리드 I/O 코히어런트 기록 요청 및 제 2 하이브리드 I/O 코히어런트 기록 요청을 생성하는 것을 포함할 수도 있다.
일부 양태들은 하이브리드 I/O 코히어런트 기록 모드가 인에이블된다고 결정하는 것에 응답하여, I/O 코히어런트 기록 요청을 하이브리드 I/O 코히어런트 기록 요청으로서 마킹하는 것을 더 포함할 수도 있다.
일부 양태들은 공유된 메모리로부터 제 1 하이브리드 I/O 코히어런트 기록 요청의 확인응답을 수신하는 것, 및 제 1 하이브리드 I/O 코히어런트 기록 요청의 확인응답을, I/O 코히어런트 기록 요청을 발행하였던 프로세싱 디바이스로 전송하는 것을 더 포함할 수도 있다.
일부 양태들은 코히어런시 도메인에서 제 2 하이브리드 I/O 코히어런트 기록 요청을 수신하는 것, 제 2 하이브리드 I/O 코히어런트 기록 요청에 의해 특정된 I/O 코히어런트 기록 데이터의 어드레스에 대한 코히어런스 체크를 실행하는 것, 및 공유된 메모리로부터 제 1 하이브리드 I/O 코히어런트 기록 요청의 확인응답을 수신하는 것을 더 포함할 수도 있다.
일부 양태들은 코히어런트 상호접속부로부터, 공유된 메모리에서 제 1 하이브리드 I/O 코히어런트 기록 요청 및 I/O 코히어런트 기록 데이터를 수신하는 것, 제 1 하이브리드 I/O 코히어런트 기록 요청을 실행하는 것, 및 제 1 하이브리드 I/O 코히어런트 기록 요청의 확인응답을 코히어런트 상호접속부로 전송하는 것을 더 포함할 수도 있다.
일부 양태들은 코히어런트 상호접속부로부터 코히어런시 도메인에 의해 제 1 하이브리드 I/O 코히어런트 기록 요청의 확인응답을 수신하는 것, 및 코히어런트 상호접속부로부터 I/O 코히어런트 기록 요청을 발행하였던 프로세싱 디바이스에 의해 제 1 하이브리드 I/O 코히어런트 기록 요청의 확인응답을 수신하는 것을 더 포함할 수도 있다.
일부 양태들은 프로세싱 디바이스에 의해 I/O 코히어런트 모드를 이용한 실행을 위한 워크로드를 하드웨어 가속기로 오프로드하는 것, 프로세싱 디바이스에 의해, 워크로드가 하드웨어 가속기에 의해 실행되는 동안 비-하이브리드 I/O 코히어런트 기록 모드로부터 하이브리드 I/O 코히어런트 기록 모드로 코히어런스 상호접속부를 스위칭하기 위한 동적 트리거를 검출하는 것, 및 동적 트리거를 검출하는 것에 응답하여 히어런트 상호접속부를 비-하이브리드 I/O 코히어런트 기록 모드로부터 하이브리드 I/O 코히어런트 기록 모드로 스위칭하는 것을 더 포함할 수도 있다.
추가의 양태들은 위에 요약된 방법들의 동작들을 실행하도록 구성되는 공유된 메모리, 프로세싱 디바이스, 코히어런시 도메인 및 코히어런스 상호접속부를 갖는 컴퓨팅 디바이스를 포함한다. 추가의 양태들은 위에 요약된 방법들의 기능들을 수행하기 위한 수단을 갖는 컴퓨팅 디바이스를 포함한다. 추가의 양태들은 컴퓨팅 디바이스의 프로세싱 디바이스로 하여금 위에 요약된 방법들의 동작들을 수행하게 하도록 구성되는 프로세서 실행가능 명령들이 그 위에 저장되는 비일시적 프로세서 판독가능 저장 매체를 포함한다.
본원에 통합되고 이 명세서의 부분을 구성하는 첨부의 도면들은 여러 양태들의 일 예의 양태들을 예시하며, 위에서 주어진 일반적인 설명 및 아래 주어진 상세한 설명은 청구항들의 특징들을 설명하도록 돕는다.
도 1 은 일 양태를 구현하기 위해 적합한 컴퓨팅 디바이스의 컴포넌트 블록도이다.
도 2 는 일 양태를 구현하기 위해 적합한 일 예의 멀티코어 프로세서의 컴포넌트 블록도이다.
도 3a 는 일 양태를 구현하기 위해 적합한 코히어런트 상호접속부를 갖는 일 예의 이종 컴퓨팅 디바이스를 예시하는 블록도이다.
도 3b 는 일 양태에 따라 I/O 코히어런트 기록을 구현하는 일 예의 이종 컴퓨팅 디바이스를 예시하는 블록 및 시그널링도이다.
도 3c 는 일 양태에 따라 하이브리드 I/O 코히어런트 기록을 구현하는 일 예의 이종 컴퓨팅 디바이스를 예시하는 블록 및 시그널링도이다.
도 4 는 일 양태를 구현하기 위한 비-I/O 코히어런트 워크로드 프로세싱의 일 예를 예시하는 신호 및 프로세스 다이어그램이다.
도 5 는 일 양태를 구현하기 위한 I/O 코히어런트 워크로드 프로세싱의 일 예를 예시하는 신호 및 프로세스 다이어그램이다.
도 6 은 일 양태를 구현하기 위한 동적 I/O 코히어런트 워크로드 프로세싱의 일 예를 예시하는 신호 및 프로세스 다이어그램이다.
도 7 은 일 양태를 구현하기 위한 동적 I/O 코히어런트 워크로드 프로세싱의 일 예를 예시하는 신호 및 프로세스 다이어그램이다.
도 8 은 일 양태를 구현하기 위한 하이브리드 I/O 코히어런트 기록을 갖는 I/O 코히어런트 워크로드 프로세싱을 구현하기 위한 방법을 예시하는 신호 및 프로세스 다이어그램이다.
도 9 는 일 양태를 구현하기 위한 하이브리드 I/O 코히어런트 기록을 갖는 동적 I/O 코히어런트 워크로드 프로세싱을 구현하기 위한 방법을 예시하는 신호 및 프로세스 다이어그램이다.
도 10 은 일 양태에 따라 하이브리드 I/O 코히어런트 기록을 구현하기 위한 방법을 예시하는 프로세스 흐름도이다.
도 11 은 일 양태에 따라 하이브리드 I/O 코히어런트 기록을 구현하기 위한 방법을 예시하는 프로세스 흐름도이다.
도 12 는 일 양태에 따라 하이브리드 I/O 코히어런트 기록을 구현하기 위한 방법을 예시하는 프로세스 흐름도이다.
도 13 은 일 양태에 따라 하이브리드 I/O 코히어런트 기록을 갖는 동적 I/O 코히어런트 워크로드 프로세싱을 구현하기 위한 방법을 예시하는 프로세스 흐름도이다.
도 14 는 양태들에 따라 하이브리드 I/O 코히어런트 기록을 갖는 I/O 코히어런트 및/또는 동적 I/O 코히어런트 워크로드 프로세싱을 구현하기 위한 방법을 예시하는 프로세스 흐름도이다.
도 15 는 여러 양태들에 이용하기에 적합한 일 예의 모바일 컴퓨팅 디바이스를 예시하는 컴포넌트 블록도이다.
도 16 은 여러 양태들에 이용하기에 적합한 일 예의 모바일 컴퓨팅 디바이스를 예시하는 컴포넌트 블록도이다.
도 17 은 여러 양태들에 이용하기에 적합한 일 예의 서버를 예시하는 컴포넌트 블록도이다.
여러 양태들은 첨부한 도면들을 참조하여 보다 상세하게 설명될 것이다. 가능한 경우에는 언제든지, 동일한 참조 부호들이, 동일하거나 유사한 부분들을 지칭하기 위해 도면들 전반에 걸쳐 이용될 것이다. 특정 예들 및 구현형태들에 대해 이루어진 참조들은 예시용이고, 본 청구범위를 제한하려고 의도되지는 않는다.
여러 양태들은 비-입력/출력 (I/O) 코히어런스 성능 및 I/O 코히어런스 이점들을 갖고 랜덤 액세스 메모리 (random access memory; RAM) 로 하드웨어 가속기에 의해 오프로드된 워크로드들에 대한 I/O 코히어런트 기록 동작들을 구현하는 방법들 및 이러한 방법들을 구현하는 시스템들 및 디바이스들을 포함할 수도 있다. 다수의 프로세서들은 멀티코어 프로세서들일 수도 있다. 여러 양태들의 장치 및 방법들은 상호접속부로부터 코히어런시 도메인으로의 기록 데이터 경로를 선행시키는 것, 및 상호접속부로부터 코히어런시 도메인 및 RAM 으로의 기록 요청 경로에 대해 상호접속부에서 기록 요청을 분할하는 것을 포함할 수도 있다.
용어 "컴퓨팅 디바이스" 및 "모바일 컴퓨팅 디바이스"는 세룰라 전화기들, 스마트폰들, 퍼스널 또는 모바일 멀티-미디어 플레이어들, 개인휴대 정보 단말기들 (PDA들), 랩탑 컴퓨터들, 테블릿 컴퓨터들, 컨버터블 랩탑들/테블릿들 (2-인-1 컴퓨터들), 스마트북들, 울트라북들, 넷북들, 팜-탑 컴퓨터들, 무선 전자 메일 수신기들, 멀티미디어 인터넷 실행된 셀룰라 전화기들, 모바일 게이밍 콘솔들, 무선 게이밍 제어기들, 및 메모리를 포함하는 유사한 퍼스널 전자 디바이스들을 지칭하기 위해 본원에서 상호교환적으로 이용된다. 용어 "컴퓨팅 디바이스"는 퍼스널 컴퓨터, 데스크탑 컴퓨터들, 올-인-원 컴퓨터들, 워크스테이션들, 수퍼 컴퓨터들, 메인프레임 컴퓨터들, 임베디드 컴퓨터들, 서버들, 홈 시어터 컴퓨터들 및 게임 콘솔들을 포함하는 정지형 컴퓨팅 디바이스들을 추가로 지칭할 수도 있다.
비-I/O 코히어런트 시스템들에 대한 기록 동작들은 코히어런시 도메인을 구현할 필요성이 없기 때문에 I/O 코히어런트 시스템들보다 적은 하드웨어를 요구할 수도 있다. 비-I/O 코히어런트 시스템들에 대한 기록 요청들은 보다 적은 하드웨어 컴포넌트들 사이의 기록 데이터를 송신함에 있어서 수반되는 더 적은 단계들에 기인하여 보다 신속하게 실행될 수도 있다. 또한, I/O 코히어런트 시스템들에서 하드웨어 가속기와 RAM 사이의 코히어런시 도메인으로의 데이터 경로들은 비-I/O 코히어런트 시스템에서의 가속기와 RAM 사이의 데이터 경로보다 덜 효율적일 수도 있다. 그러나, 비-I/O 코히어런트 시스템 기록 동작들은 I/O 코히어런트 시스템 기록 동작들 보다 더 큰 메모리 메인터넌스 동작 오버헤드 패널티들을 일으킬 수도 있다. 이는, I/O 코히어런트 시스템들이 비-I/O 코히어런트 시스템들에서와 같이 기록 동작들 전 및 후에 메모리 메인터넌스 동작들을 실행해야 하기 보다는 메모리 코히어런시를 지속적으로 관리할 수도 있기 때문이다.
하이브리드 I/O 코히어런트 기록은 상호접속부로부터 코히어런시 도메인으로 또한 송신하기 위해 상호접속부로부터 RAM 으로의 기록 요청만을 복제할 수도 있다. 하이브리드 I/O 코히어런트 기록은 상호접속부로부터 코히어런시 도메인으로의 데이터 경로를 선행하여 가속기로부터 상호접속부를 통하여 RAM 으로의 데이터 경로를 따라 데이터를 송신할 수도 있다. 코히어런시 도메인으로의 중복 데이터 경로를 제거하는 것은 면적, 전력 및 대역폭을 절감하고 레이턴시를 감소킬 수도 있는 한편, 코히어런시 도메인으로의 중복 요청 경로는 메모리 코히어런시 동작들이 구현되는 것을 허용할 수도 있다.
하이브리드 I/O 코히어런트 기록을 구현하기 위해, 하이브리드 I/O 코히어런트 기록이 인에이블될 때, 상호접속부는 가속기로부터의 연관된 기록 데이터와 함께 기록 요청을 수신하고, 기록 요청에서의 기존 필드를 추가하거나 또는 이용하는 것에 의해 기록 요청을 하이브리드 I/O 코히어런트 기록 요청으로서 마킹할 수도 있다. 상호접속은 하이브리드 I/O 코히어런트 기록 요청을 복제하고 하이브리드 I/O 코히어런트 기록 요청의 제 1 복제본을 RAM 으로 전송하고 하이브리드 I/O 코히어런트 기록 요청의 제 2 복제본을 코히어런시 도메인으로 전송할 수도 있다. 상호접속부는 또한, 기록 데이터를 복제하고 기록데이터를 코히어런시 도메인으로 전송함이 없이 기록 데이터를 RAM 으로 전송할 수도 있다. RAM 은 2 개의 경로들을 따라 하이브리드 I/O 코히어런트 기록 요청에 대한 중복 확인응답들을 전송할 수도 있다. 제 1 중복 확인응답은 상호접속부를 통하여 가속기로 다시 제 1 확인응답 경로를 통하여 전송될 수도 있고 제 2 중복 확인응답은 제 2 확인응답 경로를 통하여 코히어런시 도메인으로 전송될 수도 있다.
코히어런시 도메인은 하이브리드 I/O 코히어런트 기록 요청의 제 2 복제본 및 제 2 중복 확인응답에 기초하여 메모리의 코히어런시를 관리할 수도 있다. 코히어런시 도메인은 하이브리드 I/O 코히어런트 기록 요청의 제 2 복제본에 기초하여 코히어런시 체크들 및 검증들을 구현할 수도 있다. 코히어런시 도메인은 제 2 복제 확인응답에 기초하여 소거를 구현할 수도 있다. 메모리 드라이버는 코히어런시 도메인이 메모리의 코히어런시를 관리할 수도 있기 때문에 메모리 무효화 메인터넌스를 이용하는 것을 선행할 수도 있다.
상호접속부로부터 코히어런시 도메인으로의 기록 요청 경로는 기록 요청에 대해 필수적인 대역폭만을 지원하기 위해 필요할 수도 있고 기록 요청 데이터에 대한 대역폭을 지원하기 위해 필요하지 않을 수도 있다. 여러 양태들에서, 기록 요청에 대한 대역폭은 상호접속부와 코히어런시 도메인 사이의 경로의 전체 대역폭의 1/2 이하일 수도 있다.
도 1 은 여러 양태들에 이용하기 위하여 적절한 컴퓨팅 디바이스 (10) 를 포함하는 시스템을 예시한다. 컴퓨팅 디바이스 (10) 는 프로세서 (14), 메모리 (16), 통신 인터페이스 (18) 및 저장 메모리 인터페이스 (20) 와 함께 시스템 온 칩 (system-on-chip; SoC)(12) 을 포함할 수도 있다. 컴퓨팅 디바이스 (10) 는 통신 컴포넌트 (22), 이를 테면, 유선 또는 무선 모뎀, 저장 메모리 (24), 및 무선 통신 링크를 확립하기 위한 안테나 (26) 를 더 포함할 수도 있다. 프로세서 (14) 는 여러 프로세서 디바이스들의 어느 것, 예를 들어, 복수의 프로세서 코어들을 포함할 수도 있다.
용어 "시스템-온-칩" (SoC) 은 본원에서 통상적이지만 비배타적으로 프로세싱 디바이스, 메모리, 및 통신 인터페이스를 포함하는 상호접속된 전자 회로들을 지칭하기 위해 이용된다. 프로세싱 디바이스는 여러 상이한 유형들의 프로세서들 (14) 및 프로세서 코어들, 이를 테면, 범용 프로세서, 중앙 프로세싱 유닛 (CPU), 디지털 신호 프로세서 (DSP), 그래픽 프로세싱 유닛 (GPU), 가속화된 프로세싱 유닛 (APU), 보조 프로세서, 단일 코어 프로세서 및 멀티코어 프로세서를 포함할 수도 있다. 프로세싱 디바이스는 하드웨어 및 하드웨어 조합들, 이를 테면, 필드 프로그래밍가능 게이트 어레이 (FPGA), 응용주문형 집적 회로 (ASIC), 다른 프로그래밍가능 로직 디바이스, 이산 게이트 로직, 트랜지스터 로직, 성능 모니터링 하드웨어, 워치독 (watchdog) 하드웨어 및 시간 레퍼런스를 추가로 구현할 수도 있다. 집적 회로들은 집적 회로의 컴포넌트들이 단일 피스의 반도체 재료, 이를 테면, 실리콘 상에 상주하도록 구성될 수도 있다.
SoC (12) 는 하나 이상의 프로세서들 (14) 을 포함할 수도 있다. 컴퓨팅 디바이스 (10) 는 하나 보다 많은 SoC (12) 를 포함할 수도 있고, 이에 의해 프로세서들 (14) 및 프로세서 코어들의 수를 증가시킨다. 컴퓨팅 디바이스 (10) 는 또한 SoC (12) 와 연관되지 않은 프로세서들 (14) 을 포함할 수도 있다. 개별적인 프로세서들 (14) 은 도 2 를 참조하여 아래 설명된 바와 같이 멀티코어 프로세서들일 수도 있다. 프로세서들 (14) 은 각각, 컴퓨팅 디바이스 (10) 의 다른 프로세서들 (14) 과 동일하거나 상이할 수도 있는 특수 목적을 위해 구성될 수도 있다. 동일 또는 상이한 구성들의 프로세서들 (14) 및 프로세서 코어들 중 하나 이상은 함께 그룹화될 수도 있다. 프로세서들 (14) 또는 프로세서 코어들의 그룹은 멀티-프로세서 클러스터로서 지칭될 수도 있다.
SoC (12) 의 메모리 (16) 는 프로세서 (14) 에 의한 액세스를 위한 데이터 및 프로세서 실행가능 코드를 저장하기 위한 휘발성 또는 비휘발성 메모리일 수도 있다. 컴퓨팅 디바이스 (10) 및/또는 SoC (12) 는 여러 목적들을 위하여 구성되는 하나 이상의 메모리들 (16) 을 포함할 수도 있다. 하나 이상의 메모리들 (16) 은 휘발성 메모리들, 이를 테면, 랜덤 액세스 메모리 (RAM) 또는 메인 메모리 또는 캐시 메모리를 포함할 수도 있다. 이들 메모리들 (16) 은 데이터 센서 또는 서브시스템으로부터 수신된 제한된 양의 데이터, 비휘발성 메모리로부터 요청되고 여러 팩터들에 기초하여 추후 액세스를 고려하여 비휘발성 메모리 (16) 로부터 메모리들로 로딩된 데이터 및/또는 프로세서 실행가능 코드 명령들, 및/또는 프로세서 (14) 에 의해 생성되고 비휘발성 메모리에 저장됨이 없이 추후 고속 액세스를 위하여 임시 저장된 중간 프로세싱 데이터 및/또는 프로세서 실행가능 코드 명령들을 임시적으로 홀딩하도록 구성될 수도 있다.
메모리 (16) 는 프로세서들 (14) 중 하나 이상에 의한 액세스를 위하여 다른 메모리 디바이스, 이를 테면, 다른 메모리 (16) 또는 저장 메모리 (24) 로부터 메모리 (16) 로 로딩된 적어도 일시적으로 데이터 및/또는 프로세서 실행가능 코드를 저장하도록 구성될 수도 있다. 메모리 (16) 에 로딩된 데이터 또는 프로세서 실행가능 코드는 프로세서 (14) 에 의한 기능의 실행에 응답하여 로딩될 수도 있다. 기능의 실행에 응답하여, 데이터 또는 프로세서 실행가능 코드를 메모리 (16) 로 로딩하는 것은, 요청된 데이터 또는 프로세싱 실행가능 코드가 메모리 (16) 에 로케이션되지 않기 때문에 성공적이지 못하거나 또는 "누락"한 메모리 (16) 로의 메모리 액세스 요청으로부터 야기될 수도 있다. 누락에 응답하여, 다른 메모리 (16) 또는 저장 메모리 (24) 로의 메모리 액세스 요청은 다른 메모리 (16) 또는 저장 메모리 (24) 로부터 메모리 디바이스 (16) 로의 요청된 데이터 또는 프로세서 실행가능 코드를 로딩시키기 위해 이루어질 수도 있다. 기능의 실행에 응답하여 메모리 (16) 로 데이터 또는 프로세서 실행가능 코드를 로딩하는 것은 다른 메모리 (16) 또는 저장 메모리 (24) 로의 메모리 액세스 요청으로부터 야기될 수도 있고 데이터 또는 프로세서 실행가능 코드는 추후 액세스를 위하여 메모리 (16) 에 로딩될 수도 있다.
저장 메모리 인터페이스 (20) 및 저장 메모리 (24) 는 컴퓨팅 디바이스 (10) 가 비휘발성 저장 매체 상에 데이터 및 프로세서 실행가능 코드를 저장하는 것을 허용하도록 동조하여 작업할 수도 있다. 저장 메모리 (24) 는 메모리 (16) 의 일 양태와 매우 유사하게 구성될 수도 있고 저장 메모리 (24) 가 프로세서들 (14) 의 하나 이상에 의한 액세스를 위하여 데이터 또는 프로세서 실행가능 코드를 저장할 수 있다. 비휘발성인 저장 메모리 (24) 는 컴퓨팅 디바이스 (10) 의 전력이 차단된 후에 정보를 유지할 수도 있다. 전력이 다시 턴온되고 컴퓨팅 디바이스 (10) 가 리부팅할 때, 저장 메모리 (24) 상에 저장된 정보는 컴퓨팅 디바이스 (10) 에 대해 이용가능할 수도 있다. 저장 메모리 인터페이스 (20) 는 저장 메모리 (24) 에 대한 액세스를 제어하고 프로세서 (14) 가 저장 메모리 (24) 로부터의 데이터를 판독하고 저장 메모리 (24) 에 데이터를 기록하게 허용할 수도 있다.
컴퓨팅 디바이스 (10) 의 컴포넌트들의 일부 또는 전부는 여러 양태들의 기능들을 여전히 서비스하면서 상이하게 배열되고/되거나 결합될 수도 있다. 컴퓨팅 디바이스 (10) 는 컴포넌트들 각각의 하나로 제한되지 않을 수도 있고, 각각의 컴포넌트의 다수의 인스턴스들이 컴퓨팅 디바이스 (10) 의 여러 구성들에 포함될 수도 있다.
도 2 는 일 양태를 구현하기 위해 적합한 멀티코어 프로세서를 예시한다. 멀티코어 프로세서 (14) 는 예를 들어, 중앙 프로세싱 유닛, 그래픽 프로세싱 유닛 및/또는 디지털 프로세싱 유닛을 포함하는 다수의 프로세서 유형들을 포함할 수도 있다. 멀티코어 프로세서 (14) 는 또한 기능들의 특수 세트를 구현하도록 구성되는 커스텀 프로세싱 하드웨어 및/또는 범용 하드웨어를 포함할 수도 있는 커스텀 하드웨어 가속기를 포함할 수도 있다.
멀티코어 프로세서는 복수의 동종 또는 이종 프로세서 코어들 (200, 201, 202, 203) 을 가질 수도 있다. 동종 멀티코어 프로세서는 복수의 동종 프로세서 코어들을 포함할 수도 있다. 프로세서 코어들 (200, 201, 202, 203) 은 멀티코어 프로세서 (14) 의 프로세서 코어들 (200, 201, 202, 203) 이 동일한 목적을 위하여 구성될 수도 있고 동일하거나 유사한 성능 특징들을 가질 수도 있다는 점에서 동종일 수도 있다. 예를 들어, 멀티코어 프로세서 (14) 는 범용 프로세서일 수도 있고 프로세서 코어들 (200, 201, 202, 203) 은 동종 범용 프로세서 코어들일 수도 있다. 멀티코어 프로세서 (14) 는 그래픽 프로세싱 유닛 또는 디지털 신호 프로세서일 수도 있고 프로세서 코어들 (200, 201, 202, 203) 은 각각 동종 그래픽 프로세서 코어들 또는 디지털 신호 프로세서 코어들일 수도 있다. 멀티코어 프로세서 (14) 는 동종 프로세서 코어들 (200, 201, 202, 203) 을 갖는 커스텀 하드웨어 가속기일 수도 있다. 용이한 참조를 위하여, 용어 "커스텀 하드웨어 가속기", "프로세서" 및 "프로세서 코어" 는 본원에서 상호교환적으로 이용될 수도 있다.
이종 멀티코어 프로세서는 복수의 이종 프로세서 코어들을 포함할 수도 있다. 프로세서 코어들 (200, 201, 202, 203) 은 멀티코어 프로세서 (14) 의 프로세서 코어들 (200, 201, 202, 203) 이 상이한 목적들을 위하여 구성될 수도 있고/있거나 상이한 성능 특징들을 가질 수도 있다는 점에서 이종일 수도 있다. 이러한 이종 프로세서 코어들의 이종성은 상이한 명령 세트 아키텍처, 파이프라인들, 동작 주파수들 등을 포함할 수도 있다. 이러한 이종 프로세서 코어들의 일 예는 "big.LITTLE" 로서 알려진 것을 포함할 수도 있으며, 여기에서 더 느리고, 낮은 전력의 프로세서 코어들이 더 강력하고 더 많은 전력을 요구하는 프로세서 코어들과 커플링될 수도 있다. 유사한 양태들에서, SoC (예를 들어, 도 1 의 SoC (12)) 는 임의의 수의 동종 또는 이종 멀티코어 프로세서들 (14) 을 포함할 수도 있다. 여러 양태들에서, 이종 멀티코어 프로세서가 적어도 하나의 이종 프로세서 코어를 포함하는 프로세서 코어들 (200, 201, 202, 203) 중 임의의 조합을 포함할 수도 있을 때, 프로세서 코어들 (200, 201, 202, 203) 의 모두가 이종 프로세서 코어들일 필요가 있는 것은 아니다.
멀티코어 프로세서 (14) 의 프로세서 코어들 (200, 201, 202, 203) 각각은 지정된 프로세서 코어 (200, 201, 202, 203) 에 의한 판독 및/또는 기록 액세스에 대해 전용될 수도 있는 지정된 프라이빗 캐시 (210, 212, 214, 216) 일 수도 있다. 프라이빗 캐시 (210, 212, 214, 216) 는 데이터 및/또는 명령들을 저장할 수도 있고 저장된 데이터 및/또는 명령들을 프로세서 코어들 (200, 201, 202, 203) 에 의한 실행을 위한 이용을 위하여 프라이빗 캐시 (210, 212, 214, 216) 가 전용되는 프로세서 코어들 (200, 201, 202, 203) 로 이용가능하게 할 수도 있다. 프라이빗 캐시 (210, 212, 214, 216) 는 도 1 의 메모리 (16) 를 참조하여 본원에 설명된 바와 같은 휘발성 메모리를 포함할 수도 있다.
멀티코어 프로세서 (14) 는 프로세서 코어들 (200, 201, 202, 203) 에 의한 판독 및/또는 기록 액세스를 위하여 구성될 수도 있는 공유된 캐시 (230) 를 더 포함할 수도 있다. 프라이빗 캐시 (210, 212, 214, 216) 는 데이터 및/또는 명령들을 저장할 수도 있고 저장된 데이터 및/또는 명령들을 프로세서 코어들 (200, 201, 202, 203) 에 의한 실행을 위한 이용을 위하여 프로세서 코어들 (200, 201, 202, 203) 로 이용가능하게 할 수도 있다. 공유된 캐시 (230) 는 또한, 멀티코어 프로세서 (14) 에 입력 및/또는 프로세서에 출력된 데이터 및/또는 명령들에 대한 버퍼로서 기능할 수도 있다. 공유된 캐시 (230) 는 도 1 의 메모리 (16) 를 참조하여 본원에 설명된 바와 같은 휘발성 메모리를 포함할 수도 있다.
도 2 에 예시된 예에서, 멀티코어 프로세서 (14) 는 4 개의 프로세서 코어들 (200, 201, 202, 203)(즉, 프로세서 코어 0, 프로세서 코어 1, 프로세서 코어 2 및 프로세서 코어 3) 를 포함한다. 예에서, 각각의 프로세서 코어 (200, 201, 202, 203) 는 개별적인 프라이빗 캐시 (210, 212, 214, 216)(즉, 프로세서 코어 0 및 프라이빗 캐시 0, 프로세서 코어 1 및 프라이빗 캐시 1, 프로세서 코어 2 및 프라이빗 캐시 2, 프로세서 코어 3 및 프라이빗 캐시 3) 로 지정된다. 용이한 설명을 위하여, 본원에서의 예들은 도 2 에 예시된 4 개의 프로세서 코어들 (200, 201, 202, 203) 및 4 개의 프라이빗 캐시들 (210, 212, 214, 216) 을 지칭할 수도 있다. 그러나, 본원에 설명되고 도 2 에 예시된 4 개의 프로세서 코어들 (200, 201, 202, 203) 및 4 개의 프라이빗 캐시들 (210, 212, 214, 216) 은 단지 일 예로만 제공되는 것이며, 어떠한 식으로도, 4 개의 지정된 프라이빗 캐시들을 갖는 4-코어 프로세서 시스템으로 여러 양태들을 제한하는 것을 의미하지 않는다. 컴퓨팅 디바이스 (10), SoC (12) 또는 멀티코어 프로세서 (14) 는 본원에 예시되고 설명된 4 개 보다 적거나 많은 프로세서 코어들 (200, 201, 202, 203) 및 프라이빗 캐시들 (210, 212, 214, 216) 을 개별적으로 또는 조합하여 포함할 수도 있다.
도 3a 내지 도 3c 는 코히어런트 상호접속부를 갖는 이종 컴퓨팅 디바이스의 일 예의 양태들을 예시한다. 하이브리드 I/O 코히어런트 기록 및/또는 동적 I/O 코히어런시 시스템 (300) 을 구현하도록 구성되는 이종 컴퓨팅 디바이스 (예를 들어, 도 1 에서의 컴퓨팅 디바이스 (10)) 는 적어도 2 개의 그러나 임의의 정수개 ("N") 까지의 프로세싱 디바이스들 (예를 들어, 도 1 및 도 2 에서의 프로세서 (14)); 예를 들어, 프로세싱 디바이스 (예를 들어, CPU)(302), 하드웨어 가속기 (예를 들어, GPU)(306a), 하드웨어 가속기 (예를 들어, DSP)(306b) 및/또는 커스텀 하드웨어 가속기 (306c) 를 포함할 수도 있다. 각각의 프로세싱 디바이스 (302, 306a, 306b, 306c) 는 프로세싱 디바이스 캐시 (예를 들어, 도 2 의 프라이빗 캐시들 (210, 212, 214, 216) 및/또는 공유된 캐시 (230)) 와 연관될 수도 있다. 예를 들어, 프로세싱 디바이스 (302) 는 프로세싱 디바이스 캐시 (예를 들어, CPU 캐시)(308) 를 포함할 수도 있고 하드웨어 가속기 (306a) 는 하드웨어 가속기 캐시 (예를 들어, GPU 캐시)(310a) 를 포함할 수도 있고, 하드웨어 가속기 (306b) 는 하드웨어 가속기 캐시 (예를 들어, DSP)(310b) 를 포함할 수도 있고/있거나 커스텀 하드웨어 가속기 (306c) 는 커스텀 하드웨어 가속기 캐시 (310c) 를 포함할 수도 있다. 본원에 논의된 바와 같이, 프로세싱 디바이스들 (302, 306a, 306b, 306c) 각각은 서로에 대하여 그리고/또는 이들 개별적인 프로세서 코어들 (예를 들어, 도 2 의 프로세서 코어들 (200, 201, 202, 203)) 중에서 동종 및/또는 이종일 수도 있다.
코히어런트 상호접속부 (312) 은 프로세싱 디바이스들 (302, 306a, 306b, 306c) 및 임의의 수의 메인 메모리 또는 랜덤 액세스 메모리 컴포넌트들, 이를 테면, 공유된 메모리 (304)(예를 들어, 도 1 의 메모리 (16, 24)) 에 통신적으로 접속될 수도 있다. 코히어런트 상호접속부 (312) 는 여러 접속된 컴포넌트들 사이의 데이터의 송신을 인에이블 및 제어하도록 구성될 수도 있다. I/O 코히어런트 모드에서 동작하는 프로세싱 디바이스 캐시 (308, 310a, 310b, 310c) 및/또는 공유된 메모리 (304) 에 대해, 코히어런시 메카니즘들은 코히어런트 상호접속부 (312) 에 의해 연속적으로 구현되어 프로세싱 디바이스 캐시 (308, 310a, 310b, 310c) 및/또는 공유된 메모리 (304) 에서 데이터의 정확성을 보장할 수도 있다. 코히어런트 상호접속부 (312) 는 프로세싱 디바이스들 (302, 306a, 306b, 306c) 사이에 데이터를 송신하도록 구성될 수도 있어, 프로세싱 디바이스들 (302, 306a, 306b, 306c) 이 워크로드의 프로세싱을 공유하고 워크로드 프로세싱의 결과들을 출력할 수도 있게 된다. 결과들이 정확하기 위하여, 프로세싱 디바이스들 (302, 306a, 306b, 306c) 에 입력되고 이로부터 출력되는 데이터는 I/O 코히어런트 모드가 활성상태인 동안 코히어런트 상호접속부 (312) 의 코히어런시 메카니즘들에 의해 구현될 수도 있는 코히어런시 요건들을 적용받을 수도 있다. 여러 양태들에서, 코히어런시 도메인 (314) 또는 코히어런트 상호접속부 (312) 의 다른 코히어런시 메카니즘들, 이를 테면, 스누프 필터 (도시 생략) 는 프로세싱 디바이스 캐시 (308, 310a, 310b, 310c) 및/또는 공유된 메모리 (304) 로의 메모리 액세스 요청들의 수신에 기초하여 코히어런시 체크들 및 무효화들을 수행하도록 구성될 수도 있다. 또한, 코히어런시 도메인 (314) 은 프로세싱 디바이스들 (302, 306a, 306b, 306c) 및/또는 공유된 메모리 (304) 사이의 트랜잭션들의 확인응답들의 수신에 기초하여 트랜잭션들을 소거하도록 구성될 수도 있다.
I/O 코히어런트 모드가 비활성이거나, 또는 프로세싱 디바이스 캐시 (308, 310a, 310b, 310c) 및/또는 공유된 메모리 (304) 가 비-I/O 코히어런트 모드에 있는 동안, 프로세싱 디바이스들 (302, 306a, 306b, 306c) 로의 입력되고 이것으로부터 출력되는 데이터의 정확도는 프로세싱 디바이스들 (302, 306a, 306b, 306c) 자체에 의해 관리될 수도 있다. 여러 양태들에서, 캐시 관리 동작들은 프로세싱 디바이스 캐시 (308, 310a, 310b, 310c) 에 저장된 데이터에 대해 프로세싱 디바이스들 (302, 306a, 306b, 306c) 에 의해 구현될 수도 있다. 여러 양태들에서, 캐시 관리 디바이스들 (도시 생략) 및/또는 프로세서 코어들을 포함하는 프로세싱 디바이스들 (302, 306a, 306b, 306c) 의 컴포넌트들은 캐시 메인터넌스 동작들을 구현하도록 구성될 수도 있다. 코히어런트 상호접속부 (312) 는 코히어런시 동작들을 수행함이 없이 프로세싱 디바이스들 (302, 306a, 306b) 및/또는 공유된 메모리 (304) 사이에서 데이터를 여전히 송신할 수도 있다.
도 3b 는 I/O 코히어런트 기록 요청을 구현하는 코히어런트 상호접속부를 갖는 이종 컴퓨팅 디바이스의 일 예의 양태들을 예시한다. 도 3b 의 예는 I/O 코히어런트 기록 요청 데이터와 함께 I/O 코히어런트 기록 요청을 발행하는 하드웨어 가속기 (306a, 306b) 의 어느 것에 의해 대체될 수도 있는 커스텀 하드웨어 가속기 (306c) 를 예시한다. 커스텀 하드웨어 가속기 (306c) 는 공유된 메모리 (304) 로 I/O 코히어런트 기록 요청을 발행할 수도 있다. I/O 코히어런트 기록 요청은 I/O 코히어런트 기록 요청 경로 (324a, 324b, 324c, 324d) 를 따를 수도 있고 I/O 코히어런트 기록 요청 데이터는 I/O 코히어런트 기록 데이터 경로 (320a, 320b, 320c, 320d) 를 따를 수도 있다. I/O 코히어런트 기록 요청을 발행시, 커스텀 하드웨어 가속기 (306c) 는 I/O 코히어런트 기록 요청을 I/O 코히어런트 기록 요청 경로 (324a) 를 따라 코히어런트 상호접속부 (312) 로 전송할 수도 있고, I/O 코히어런트 기록 요청 데이터를 I/O 코히어런트 기록 데이터 경로 (320a) 를 따라 코히어런트 상호접속부 (312) 로 전송할 수도 있다.
코히어런트 상호접속부 (312) 는 I/O 코히어런트 기록 요청 경로 (324b) 를 따라 코히어런시 도메인 (314) 으로 I/O 코히어런트 기록 요청을 보내고, I/O 코히어런트 기록 데이터 경로 (320b) 를 따라 코히어런시 도메인 (314) 으로 I/O 코히어런트 기록 요청 데이터를 보낸다. 본원에 설명된 바와 같이, 코히어런시 도메인 (314) 은 I/O 코히어런트 기록 요청 데이터의 정확도를 보장하기 위하여 여러 코히어런시 동작들을 실행할 수도 있다. 코히어런시 도메인 (314) 은 I/O 코히어런트 기록 요청을 I/O 코히어런트 기록 요청 경로 (324c) 를 따라 코히어런트 상호접속부 (312) 로 다시 전송할 수도 있고 I/O 코히어런트 기록 요청 데이터를 I/O 코히어런트 기록 데이터 경로 (320c) 를 따라 코히어런트 상호접속부 (312) 로 다시 전송할 수도 있다. 코히어런트 상호접속부 (312) 는 I/O 코히어런트 기록 요청을 I/O 코히어런트 기록 요청 경로 (324d) 를 따라 공유된 메모리 (304) 로 전송할 수도 있고 I/O 코히어런트 기록 요청 데이터를 I/O 코히어런트 기록 데이터 경로 (320d) 를 따라 공유된 메모리 (304) 로 전송할 수도 있다.
I/O 코히어런트 기록 요청에 응답하여, 공유된 메모리 (304) 는 I/O 코히어런트 확인응답 경로 (326a, 326b, 326c, 326d) 를 따라 커스텀 하드웨어 가속기 (306c) 및 코히어런시 도메인 (314) 으로 확인응답을 리턴할 수도 있다. I/O 코히어런트 확인응답 경로 (326a, 326b, 326c, 326d) 는 공유된 메모리 (304) 로부터 커스텀 하드웨어 가속기 (306c) 로 역방향으로 I/O 코히어런트 기록 요청 경로 (324a, 324b, 324c, 324d) 를 따를 수도 있고 I/O 코히어런트 확인응답 경로 (326a, 326b, 326c, 326d) 로서 지칭될 수도 있다. 공유된 메모리 (304) 는 I/O 코히어런트 확인응답 경로 (326a) 를 따라 코히어런트 상호접속부 (312) 로 확인응답을 전송할 수도 있다. 코히어런트 상호접속부 (312) 는 I/O 코히어런트 확인응답 경로 (326b) 를 따라 코히어런시 도메인 (314) 으로 확인응답을 전송할 수도 있다. 코히어런트 상호접속부 (312) 는 I/O 코히어런트 확인응답 경로 (326c) 를 따라 코히어런트 상호접속부 (312) 로 다시 확인응답을 전송할 수도 있다. 코히어런트 상호접속부 (312) 는 I/O 코히어런트 확인응답 경로 (326d) 를 따라 커스텀 하드웨어 가속기 (306c) 로 확인응답을 전송할 수도 있다.
도 3b 에 예시된 이 예는 비-I/O 코히어런트 기록 데이터와 함께 비-I/O 코히어런트 기록 요청에 비해, 코히어런트 상호접속부 (312) 를 통한 I/O 코히어런트 기록 요청 경로 (324a, 324b, 324c, 324d) 및 I/O 코히어런트 기록 데이터 경로 (320a, 320b, 320c) 에서 다이버전스를 나타낸다. 예시된 바와 같이, I/O 코히어런트 기록 요청 및 I/O 코히어런트 기록 요청 데이터는 코히어런시 도메인 (314) 을 통하여 전송될 수도 있다. 비-I/O 코히어런트 기록 요청 및 비-I/O 코히어런트 기록 데이터는 코히어런시 도메인 (314) 으로 전송됨이 없이 코히어런트 상호접속부 (312) 에 의해 공유된 메모리 (304) 로 직접 전송될 수도 있다. 커스텀 하드웨어 가속기 (306c) 로부터 공유된 메모리 (304) 로의 경로들 각각은 그들 자신의 레이턴시를 가질 수도 있다. 도 3b 에 예시된 예는 I/O 코히어런트 기록 하이 레이턴시 경로 (322a, 322b, 322c, 322d) 를 도시한다. I/O 코히어런트 기록 요청 및/또는 I/O 코히어런트 기록 요청 데이터를 송신하기 위한 레이턴시는 커스텀 하드웨어 가속기 (306c) 로부터 코히어런트 상호접속부 (312) 로의 I/O 코히어런트 기록 하이 레이턴시 경로 (322a) 를 따라; 코히어런트 상호접속부 (312) 로부터 코히어런시 도메인 (314) 로의 I/O 코히어런트 기록 하이 레이턴시 경로 (322b) 를 따라; 코히어런시 도메인 (314) 으로부터 다시 코히어런트 상호접속부 (312) 로의 I/O 코히어런트 기록 하이 레이턴시 경로 (322c) 를 따라; 그리고 코히어런트 상호접속부 (312) 로부터 공유된 메모리 (304) 로의 I/O 코히어런트 기록 하이 레이턴시 경로 (322d) 를 따를 수도 있다.
도 3c 는 하이브리드 I/O 코히어런트 기록 요청을 구현하는 코히어런트 상호접속부를 갖는 이종 컴퓨팅 디바이스의 일 예의 양태들을 예시한다. 도 3c 의 예는 하이브리드 I/O 코히어런트 기록 모드가 인에이블된 I/O 코히어런트 기록 요청 데이터와 함께 I/O 코히어런트 기록 요청을 발행하는 하드웨어 가속기들 (306a, 306b) 의 어느 것에 의해 대체될 수도 있는 커스텀 하드웨어 가속기 (306c) 를 예시한다. 커스텀 하드웨어 가속기 (306c) 는 공유된 메모리 (304) 로 I/O 코히어런트 기록 요청을 발행할 수도 있다. I/O 코히어런트 기록 요청은 하이브리드 I/O 코히어런트 기록 요청 경로 (334a, 334b, 334d) 를 따를 수도 있고 I/O 코히어런트 기록 요청 데이터는 하이브리드 I/O 코히어런트 기록 데이터 경로 (330a, 330d) 를 따를 수도 있다. I/O 코히어런트 기록 요청을 발행시, 커스텀 하드웨어 가속기 (306c) 는 I/O 코히어런트 기록 요청을 하이브리드 I/O 코히어런트 기록 요청 경로 (334a) 를 따라 코히어런트 상호접속부 (312) 로 전송할 수도 있고 I/O 코히어런트 기록 요청 데이터를 하이브리드 I/O 코히어런트 기록 데이터 경로 (330a) 를 따라 코히어런트 상호접속부 (312) 로 전송할 수도 있다.
코히어런트 상호접속부 (312) 는 하이브리드 I/O 코히어런트 기록 모드가 인에이블된다고 결정하고, I/O 코히어런트 기록 요청을 하이브리드 I/O 코히어런트 기록 요청으로서 마킹하고, 하이브리드 I/O 코히어런트 기록 요청을 하이브리드 I/O 코히어런트 기록 요청 경로 (334b) 를 따라 코히어런시 도메인 (314) 으로 보낼 수도 있다. 코히어런트 상호접속부 (312) 는 I/O 코히어런트 기록 요청 데이터를 코히어런시 도메인 (314) 으로 보내지 않을 수도 있다. 본원에 설명된 바와 같이, 코히어런시 도메인 (314) 은 I/O 코히어런트 기록 요청 데이터의 정확도를 보장하기 위하여 여러 코히어런시 동작들을 실행할 수도 있다. 코히어런시 도메인 (314) 은 I/O 코히어런트 기록 요청 데이터를 수신하지 않을 수도 있기 때문에, 코히어런시 도메인 (314) 은 하이브리드 I/O 코히어런트 기록 요청 및/또는 I/O 코히어런트 기록 요청 데이터를 공유된 메모리 (304) 로 전송하지 않을 수도 있다. 코히어런트 상호접속부 (312) 는 하이브리드 I/O 코히어런트 기록 요청을 하이브리드 I/O 코히어런트 기록 요청 경로 (334d) 를 따라 공유된 메모리 (304) 로 전송하고 I/O 코히어런트 기록 요청 데이터를 I/O 코히어런트 기록 데이터 경로 (330d) 를 따라 공유된 메모리 (304) 로 전송할 수도 있다.
하이브리드 I/O 코히어런트 기록 요청에 응답하여, 공유된 메모리 (304) 는 하이브리드 I/O 코히어런트 확인응답 경로 (336a, 336b, 336c) 를 따라 커스텀 하드웨어 가속기 (306c) 및 코히어런시 도메인 (314) 으로 확인응답을 리턴할 수도 있다. 공유된 메모리 (304) 는 하이브리드 I/O 코히어런트 확인응답 경로 (336a) 를 따라 코히어런트 상호접속부 (312) 로 확인응답을 전송할 수도 있다. 여러 양태들에서, 코히어런트 상호접속부 (312) 는 하이브리드 I/O 코히어런트 확인응답 경로 (336b) 를 따라 코히어런시 도메인 (314) 으로 확인응답을 전송할 수도 있다. 여러 양태들에서, 공유된 메모리 (304) 는 하이브리드 I/O 코히어런트 확인응답 경로 (336a, 336b) 를 따라 코히어런시 도메인 (314) 으로 확인응답을 전송할 수도 있다. 코히어런트 상호접속부 (312) 는 하이브리드 I/O 코히어런트 확인응답 경로 (336c) 를 따라 커스텀 하드웨어 가속기 (306c) 로 확인응답을 전송할 수도 있다.
도 3c 에 예시된 이 예는 코히어런트 상호접속부 (312) 를 통하는 하이브리드 I/O 코히어런트 기록 요청 경로 (334a, 334b, 334d) 및 하이브리드 I/O 코히어런트 기록 데이터 경로 (330a, 330d) 에서의 다이버전스를 도시한다. 예시된 바와 같이, 하이브리드 I/O 코히어런트 기록 요청은 코히어런시 도메인 (314) 으로 그리고 코히어런트 상호접속부 (312) 에 의해 공유된 메모리 (304) 로 직접 전송될 수도 있다. 그러나, 도 3b 의 예와 달리, I/O 코히어런트 기록 요청 데이터는 코히어런트 상호접속부 (312) 에 의해 공유된 메모리 (304) 로 직접 전송될 수 있고 코히어런시 도메인 (314) 으로 전송되지 않을 수도 있다. 커스텀 하드웨어 가속기 (306c) 로부터 공유된 메모리 (304) 로의 경로들 각각은 그들 자신의 레이턴시를 가질 수도 있다. 도 3b 에 예시된 예는 I/O 코히어런트 기록 하이 레이턴시 경로 (322a, 322b, 322c, 322d) 가 코히어런트 상호접속부 (312) 및 코히어런시 도메인 (314) 을 통과하는 것을 도시한다. 도 3c 에 예시된 예는 하이브리드 I/O 코히어런트 기록 하이 레이턴시 경로 (332a, 332d) 를 도시한다. 하이브리드 I/O 코히어런트 기록 요청 및/또는 I/O 코히어런트 기록 요청 데이터를 송신하기 위한 레이턴시는 커스텀 하드웨어 가속기 (306c) 로부터 코히어런트 상호접속부 (312) 로의 하이브리드 I/O 코히어런트 기록 하이 레이턴시 경로 (332a) 를 따라 그리고 코히어런트 상호접속부 (312) 로부터 공유된 메모리 (304) 로의 하이브리드 I/O 코히어런트 기록 하이 레이턴시 경로 (332d) 를 따를 수도 있다.
I/O 코히어런트 기록 요청 경로 (324a, 324b, 324c, 324d) 및 I/O 코히어런트 기록 데이터 경로 (320a, 320b, 320c) 가 코히어런시 도메인 (314) 을 통과할 수 있기 때문에, 도 3b 에 예시된 예에서의 I/O 코히어런트 기록 하이 레이턴시 경로 (322a, 322b, 322c, 322d) 는 코히어런시 도메인 (314) 을 통과할 수 있다. 그러나, 도 3c 에 예시된 예에서, 하이브리드 I/O 코히어런트 기록 데이터 경로 (330a, 330d) 가 코히어런시 도메인 (314) 을 통과하지 않을 수도 있기 때문에, 하이브리드 I/O 코히어런트 기록 하이 레이턴시 경로 (332a, 332d) 는 코히어런시 도메인 (314) 을 통과함이 없이 코히어런트 상호접속부 (312) 를 통과할 수도 있다. 레이턴시에서의 차이는 I/O 코히어런트 기록에 비해 하이브리드 I/O 코히어런트 기록의 거리, 클록 도메인 크로싱들의 수 및 연관된 로직에 대한 레이턴시의 관점에서 더 짧은 경로에 의해 표현될 수도 있다. 하이브리드 I/O-코히어런트 기록은 공유된 메모리 (304) 에서의 실행 및 공유된 메모리로의 기록 요청들의 횡단과 코히어런시 동작들을 오버랩하는 것에 의해 I/O 코히어런트 기록에 비해 성능 속도 이점을 제공할 수도 있다. 따라서, 하이브리드 I/O 코히어런트 기록 하이 레이턴시 경로 (332a, 332d) 는 I/O 코히어런트 기록 하이 레이턴시 경로 (322a, 322b, 322c, 322d) 보다 더 낮은 레이턴시를 나타낼 수도 있다. 이와 유사하게, I/O 코히어런트 기록 요청들 대 하이브리드 I/O 코히어런트 기록 요청들의 더 느린 성능은 코히어런시 도메인 (314) 을 통과함이 없이 코히어런트 상호접속부 (312) 를 통한 하이브리드 I/O 코히어런트 기록 데이터 경로 (330a, 330d) 보다, 코히어런시 도메인 (314) 을 통한 I/O 코히어런트 기록 데이터 경로 (320a, 320b, 320c, 320d) 를 따르는 더 낮은 대역폭 이용가능성으로 설명될 수도 있다.
도 3a 내지 도 3c 는 하이브리드 I/O 코히어런트 기록 시스템 및/또는 동적 I/O 코히어런시 시스템을 구현하도록 구성되는 이종 컴퓨팅 디바이스의 비제한적 예들을 예시한다. 본원에 예시되어 설명된 예들, 특히 도 3a 내지 도 3c 를 참조하여 관련되어 설명된 것들은 비제한적인 것이다. 하이브리드 I/O 코히어런트 기록 시스템 및/또는 동적 I/O 코히어런시 시스템을 구현하도록 구성되는 이종 컴퓨팅 디바이스는 프로세싱 디바이스들, 프로세서 코어들, 프로세싱 디바이스 캐시들 (예를 들어, 프라이빗 캐시들 및/또는 공유된 캐시들), 코히어런트 상호접속부들, 공유된 메모리들, 및 이들 컴포넌트들 사이의 접속들의 임의의 수 및/또는 조합을 포함할 수도 있다.
도 4 내지 도 9 는 워크로드 오프로딩의 예시 양태들을 예시한다. 이들 예들은 프로세싱 디바이스 (예를 들어, CPU)(302) 로부터 하드웨어 가속기 (예를 들어, GPU, DSP, 커스텀 하드웨어 가속기 등)(306) 로의 워크로드 오프로딩을 예시한다. 이들 예들은 프로세싱 디바이스 (302) 와 단일 하드웨어 가속기 (306) 사이의 워크로드 오프로딩을 예시한다. 여러 양태들에서, 프로세싱 디바이스 (302) 와 하드웨어 가속기 (306) 사이에 송신되는 데이터는 공유된 메모리 (예를 들어, 도 3a 내지 도 3c 에서의 공유된 메모리 (304)) 로의 판독들/기록들을 통하여 송신될 수도 있고 캐시 미스 메카니즘을 통하여 트리거링될 수 있다. 여러 양태들에서, 공유된 메모리를 통하는 것을 포함하는 데이터 송신은 오프로딩된 워크로드의 실행 전반에 걸쳐 발생할 수도 있다. 1 대 1 워크로드 오프로딩의 이들 예들은 비제한적인 것이며, 프로세싱 디바이스 (302) 는 임의의 수의 공유된 메모리들을 통하는 것을 포함한 임의의 수의 하드웨어 가속기들 (306) 및/또는 다른 프로세싱 디바이스들 (302) 로 워크로드의 부분들을 오프로딩할 수도 있다.
도 4 내지 도 9 에 예시된 예들 각각에서, 프로세싱 디바이스 (302) 는 워크로드를 실행하는 것으로 동작될 수도 있다. 프로세싱 디바이스 (302) 는 하드웨어 가속기 (306) 로 워크로드의 부분들을 오프로딩하도록 구성될 수도 있다. 오프로딩된 워크로드에 대한 데이터는 프로세싱 디바이스 캐시 (예를 들어, 도 3a 에서의 프로세싱 디바이스 캐시 (308)) 에 저장될 수도 있다. 데이터는 코히어런트 상호접속부 (예를 들어, 도 3a 내지 도 3c 에서의 코히어런트 상호접속부 (312)) 를 통하여 하드웨어 가속기 (306) 로 송신될 수도 있다. 여러 양태들에서, 데이터는 코히어런트 상호접속부를 통신적으로 접속되거나 또는 일체화된 공유된 메모리를 통하여 송신될 수도 있다. 하드웨어 가속기 (306) 는 송신된 데이터를 이용하여 오프로딩된 워크로드를 실행할 수도 있고 프로세싱 디바이스 (302) 로, 프로세싱 디바이스 캐시에 기록될 결과들을 다시 송신할 수도 있다.
도 4 는 비-I/O 코히이런트 워크로드 프로세싱의 일 예의 양태를 예시한다. 하드웨어 가속기 (306) 로 오프로딩된 워크로드에 대한 데이터를 송신하기 위하여, 그리고 하드웨어 가속기 (306) 로부터 수신된 결과들을 출력하기 위하여, 프로세싱 디바이스 (302) 는 공유된 메모리로 이어서 하드웨어 가속기 (306) 로 또는 코히어런트 상호접속부를 통하여 하드웨어 가속기 (306) 로 직접 데이터를 기록하도록 캐시 메인터넌스 동작들을 구현할 수도 있다. 본원에 주지된 바와 같이, 비-I/O 코히어런트 데이터 송신들 동안, 코히어런트 상호접속부는 프로세싱 디바이스 (302) 와 공유된 메모리 및/또는 하드웨어 가속기 (306) 사이의 데이터를 코히어런시 동작들을 수행함이 없이 송신할 수도 있다.
오프로딩된 워크로드에 대한 데이터를 하드웨어 가속기 (306) 로 송신하기 위하여, 프로세싱 디바이스 (302) 는 코히어런트 상호접속부를 통하여 공유된 메모리 및/또는 하드웨어 가속기 (306) 로 데이터를 기록하기 위해 캐시 플러시 메인터넌스 동작 (400) 을 구현할 수도 있다. 데이터를 다수의 목적지에 기록하는 캐시 플러시 메인터넌스 동작 (400) 은 오버헤드 (404a) 를 생성하며, 이는 오프로딩된 워크로드에 대하여 기록되는 프로세싱 디바이스 캐시에서의 데이터의 양에 따라 다를 수도 있다. 프로세싱 디바이스 캐시에 저장된 데이터는 파티션들 또는 버퍼들에 저장될 수도 있고 캐시 플러시 메인터넌스 동작 (400) 은 프로세싱 디바이스 캐시의 이러한 특정 부분들에 대해 구현될 수도 있다. 그렇지 않으면, 캐시 플러시 메인터넌스 동작 (400) 은 전체 프로세싱 디바이스 캐시에 대해 구현될 수도 있다. 오버헤드 (404a) 는 하드웨어 가속기 (306) 에 의한 오프로딩된 워크로드 실행의 시작을 지연할 수도 있다.
캐시 플러시 메인터넌스 동작 (400) 의 오버헤드 (404a) 에 상관하는 시간 동안, 프로세싱 디바이스 (302) 는 하드웨어 가속기 (306) 로의 워크로드의 부분들을 오프로딩하는 것을 완료할 수도 있다. 여러 양태들에서, 하드웨어 가속기 (306) 로 워크로드의 부분을 오프로딩하는 것은 프로세싱 디바이스 캐시 및/또는 공유된 메모리에 액세스하는 하드웨어 가속기 (306) 에 의한 데이터 판독들 및 기록들을 포함할 수도 있다. 공유된 메모리로의 액세스는 프로세싱 디바이스 캐시의 캐시 미스들에 대한 캐시 미스 메카니즘들을 통하여 구현될 수도 있다. 하드웨어 가속기 (306) 는 데이터를 국부적으로 캐시할 필요 없이, 프로세싱 디바이스 캐시 및/또는 공유된 메모리로부터 취출된 데이터를 이용하여 오프로딩된 워크로드를 실행할 수도 있다. 여러 양태들에서, 하드웨어 가속기 (306) 는 오프로딩된 워크로드에 대한 임의의 송신된 데이터를 자신의 하드웨어 가속기 캐시 (예를 들어, 도 3a 내지 도 3c 에서의 프로세싱 디바이스 캐시 (310a, 310b, 310c)) 에 저장할 수도 있다. 하드웨어 가속기 (306) 는 오프로딩된 워크로드의 실행을 론칭할 수도 있고 (408), 오프로딩된 워크로드를 실행할 수도 있다 (406a). 오프로딩된 워크로드를 실행하는데 소요되는 시간의 길이는 오프로딩된 워크로드의 사이즈 및/또는 복잡성, 전력, 컴퓨팅 전력, 메모리 공간, 통신 대역폭을 포함하는 하드웨어 가속기 (306) 의 리소스 이용 및/또는 하드웨어 가속기의 및/또는 가속기에 대한 이용가능성 및/또는 온도를 포함하는 환경 팩터를 포함하는 여러 팩터들에 의존할 수도 있다. 하드웨어 가속기 (306) 는 오프로딩된 워크로드 실행 (410) 을 완료할 수도 있고, 오프로딩된 워크로드 실행 (406a) 의 결과들을 코히어런트 상호접속부를 통하여 프로세싱 디바이스 (302) 로 리턴할 수도 있다.
오프로딩된 워크로드 실행의 결과들을 프로세싱 디바이스 (302) 에 대해 이용가능하게 하기 위해, 프로세싱 디바이스 (302) 는 캐시 무효화 메인터넌스 동작 (402) 을 구현하여, 하드웨어 가속기 (306) 에 의해 결과들이 출력된 후 미스로서 결과들을 현재 저장하는 공유된 메모리로 프로세싱 디바이스 캐시 공간의 향후 판독들을 전달할 수도 있다. 캐시 무효화 메인터넌스 동작 (402) 은 또한 오버헤드 (404b) 를 형성할 수도 있고, 이는 저장된 오프로딩된 워크로드 결과들의 데이터의 양 또는 오프로딩된 워크로드 결과들을 저장하기 위해 프로세싱 디바이스 캐시에 이용된 공간에 따라 변할 수도 있다. 오버헤드 (404b) 는 프로세싱 디바이스 (302) 에 의한 액세스에 대한 오프로딩된 워크로드 결과들의 이용가능성을 지연시킬 수도 있다. 캐시 무효화 메인터넌스 동작 (402) 의 완료시, 오프로딩된 워크로드 결과들은 프로세싱 디바이스 (302) 에 의해 오프로딩된 워크로드 결과들의 액세스, 이용 및/또는 출력을 위하여 이용가능하게 될 수도 있다 (412). 프로세싱 디바이스 (302) 는 오프로딩된 워크로드 실행 (406a) 의 결과들을 수신할 수도 있고 그 결과들을 자신의 프로세싱 디바이스 캐시에 저장할 수도 있다.
도 5 는 I/O 코히이런트 워크로드 프로세싱의 일 예의 양태를 예시한다. 오프로딩된 워크로드에 대한 데이터를 하드웨어 가속기 (306) 로 송신하고, 그리고 하드웨어 가속기 (306) 로부터 수신된 결과들을 출력하기 위해, 코히어런시 메카니즘들 (예를 들어, 도 3a 내지 도 3c 에서의 코히어런시 도메인 (314) 및/또는 스누프 필터) 이 프로세싱 디바이스 캐시 및/또는 공유된 메모리에서의 데이터의 정확도를 보장하기 위해 코히어런트 상호접속부에 의해 연속적으로 구현될 수도 있다. 따라서, 프로세싱 디바이스 캐시 및/또는 공유된 메모리가 I/O 코히어런트 모드에 있는 동안, 프로세싱 디바이스 (302) 는 디바이스가 비-I/O 코히어런트 모드에 대하여 구현할 수도 있는 캐시 메인터넌스 동작들을 구현하지 않을 수도 있다.
프로세싱 디바이스 (302) 는 하드웨어 가속기 (306) 로의 워크로드의 부분을 오프로드할 수도 있다. 여러 양태들에서, 하드웨어 가속기 (306) 로의 워크로드의 부분을 오프로딩하는 것은 프로세싱 디바이스 캐시 및/또는 공유된 메모리에 액세스하는 하드웨어 가속기 (306) 에 의한 데이터 판독들 및 기록들을 포함할 수도 있다. 공유된 메모리로의 액세스는 프로세싱 디바이스 캐시의 캐시 미스들에 대한 캐시 미스 메카니즘들을 통하여 구현될 수도 있다. 하드웨어 가속기 (306) 는 데이터를 국부적으로 캐시할 필요 없이, 프로세싱 디바이스 캐시 및/또는 공유된 메모리로부터 취출된 데이터를 이용하여 오프로딩된 워크로드를 실행할 수도 있다. 여러 양태들에서, 하드웨어 가속기 (306) 는 오프로딩된 워크로드에 대한 임의의 송신된 데이터를 자신의 하드웨어 가속기 캐시 (예를 들어, 도 3a 내지 도 3c 에서의 프로세싱 디바이스 캐시 (310a, 310b, 310c)) 에 저장할 수도 있다. 하드웨어 가속기 (306) 는 오프로딩된 워크로드의 실행을 론칭할 수도 있고 (408), 오프로딩된 워크로드를 실행할 수도 있다 (406b). 비-I/O 코히어런트 모드에서 프로세싱 디바이스 캐시 및/또는 공유된 메모리에 대한 오프로딩된 워크로드 데이터를 송신하기 위한 오버헤드를 발생시키기 보다는, 오프로딩된 워크로드의 실행을 론칭 (408) 하기 전에 오버헤드가 발생하지 않도록 데이터가 전달되는 동안 I/O 코히어런트 모드에서, 코히어런시가 유지될 수 있다.
오버헤드 (404c) 에서의 증가는 오프로딩된 워크로드의 실행 (406b) 동안 여전히 발생할 수도 있다. 이 오버헤드 (404c) 는 오프로딩된 워크로드 결과의 데이터가 진행하는 코히어런트 경로의 성능에 의해 야기될 수도 있다. 하드웨어 가속기 (306) 가 오프로딩된 워크로드 결과를 작성하자마자 신속하게, 코히어런트 상호접속부가 코히어런시 메카니즘들을 구현하고 오프로딩된 워크로드 결과를 전달하지 못할 수도 있다. 코히어런트 상호접속부는 추가된 오버헤드 (404c) 를 가져오는 코히어런시 메카니즘들을 구현하는 동안, 오프로딩된 워크로드 결과에 대한 병목현상을 야기할 수도 있다. 여러 양태들에서, 오버헤드 (404c) 는 오프로딩된 워크로드의 실행 (406b) 을 위한 하드웨어 가속기 (306) 의 런타임에 비례하거나 대략적으로 비례할 수도 있다.
코히어런트 상호접속부의 코히어런시 메카니즘들이 프로세싱 디바이스 캐시 및/또는 공유된 메모리에서의 오프로딩된 워크로드 결과의 정확도를 보장하기 위하여 자신들의 동작들을 완료하면, 오프로딩된 워크로드 결과는 프로세싱 디바이스 (302) 에 의해 오프로딩된 워크로드 결과들의 액세스, 이용 및/또는 출력을 위하여 이용가능하게 될 수도 있다 (412).
도 6 및 도 7 은 동적 I/O 코히이런트 워크로드 프로세싱의 예시 양태들을 예시한다. 도 6 및 도 7 의 예에서, 프로세싱 디바이스 (302) 에 의한 워크로드 오프로딩은 I/O 코히어런트 모드에서 프로세싱 디바이스 캐시 및/또는 공유된 메모리로 시작할 수도 있다. 따라서, 오프로딩된 워크로드에 대한 데이터를 하드웨어 가속기 (306) 로 송신하고, 그리고 하드웨어 가속기 (306) 로부터 수신된 결과들을 출력하기 위해, 코히어런시 메카니즘들 (예를 들어, 도 3a 내지 도 3c 에서의 코히어런시 도메인 (314) 및/또는 스누프 필터) 이 프로세싱 디바이스 캐시 및/또는 공유된 메모리에서의 데이터의 정확도를 보장하기 위해 코히어런트 상호접속부에 의해 연속적으로 구현될 수도 있다. 따라서, 프로세싱 디바이스 캐시 및/또는 공유된 메모리가 I/O 코히어런트 모드에 있는 동안, 프로세싱 디바이스 (302) 는 디바이스가 비-I/O 코히어런트 모드에 대하여 구현할 수도 있는 캐시 메인터넌스 동작들을 구현하지 않을 수도 있다.
프로세싱 디바이스 (302) 는 하드웨어 가속기 (306) 로의 워크로드의 부분을 오프로드할 수도 있다. 여러 양태들에서, 하드웨어 가속기 (306) 로의 워크로드의 부분을 오프로딩하는 것은 프로세싱 디바이스 캐시 및/또는 공유된 메모리에 액세스하는 하드웨어 가속기 (306) 에 의한 데이터 판독들 및 기록들을 포함할 수도 있다. 공유된 메모리로의 액세스는 프로세싱 디바이스 캐시의 캐시 미스들에 대한 캐시 미스 메카니즘들을 통하여 구현될 수도 있다. 하드웨어 가속기 (306) 는 데이터를 국부적으로 캐시할 필요 없이, 프로세싱 디바이스 캐시 및/또는 공유된 메모리로부터 취출된 데이터를 이용하여 오프로딩된 워크로드를 실행할 수도 있다. 여러 양태들에서, 하드웨어 가속기 (306) 는 오프로딩된 워크로드에 대한 임의의 송신된 데이터를 자신의 하드웨어 가속기 캐시 (예를 들어, 도 3a 내지 도 3c 에서의 프로세싱 디바이스 캐시 (310a, 310b, 310c)) 에 저장할 수도 있다. 하드웨어 가속기 (306) 는 오프로딩된 워크로드의 실행을 론칭할 수도 있고 (408) 오프로딩된 워크로드를 실행할 수도 있다 (406c, 406d). 비-I/O 코히어런트 모드에서 프로세싱 디바이스 캐시 및/또는 공유된 메모리에 대한 오프로딩된 워크로드 데이터를 송신하기 위한 오버헤드를 발생시키기 보다는, 오프로딩된 워크로드의 실행을 론칭 (408) 하기 전에 오버헤드가 발생하지 않도록 데이터가 전달되는 동안 I/O 코히어런트 모드에서, 코히어런시가 유지될 수 있다.
도 6 에 예시된 예는 하드웨어 가속기 (306) 에 의한 단기 구동 오프로딩된 워크로드 실행을 위한 동적 I/O 코히이런트 워크로드 프로세싱의 구현이다. 본원에 설명된 바와 같이, 오버헤드 (404d) 는 오프로딩된 워크로드의 실행 (406c) 동안 여전히 발생될 수도 있다. 동적 I/O 코히이런트 워크로드 프로세싱에서, 오버헤드 (404d) 가 오버헤드 임계값 미만으로 유지되는 한, 오프로딩된 워크로드의 실행 (406c) 은 I/O 코히어런스 모드에서 프로세싱 디바이스 캐시 및/또는 공유된 메모리로 계속될 수도 있다. 따라서, 오버헤드 (404d) 는 본원에 설명된 오프로딩된 워크로드 결과를 송신하는 코히어런트 상호접속부의 성능에 의해 야기되는 오버헤드로 제한된다. 코히어런트 상호접속부의 코히어런시 메카니즘들이 프로세싱 디바이스 캐시 및/또는 공유된 메모리에서의 오프로딩된 워크로드 결과의 정확도를 보장하기 위하여 자신들의 동작들을 완료하면, 오프로딩된 워크로드 결과는 프로세싱 디바이스 (302) 에 의해 오프로딩된 워크로드 결과들의 액세스, 이용 및/또는 출력을 위하여 이용가능하게 될 수도 있다 (412).
도 7 에 예시된 예는 하드웨어 가속기 (306) 에 의한 장기 구동 오프로딩된 워크로드 실행을 위한 동적 I/O 코히이런트 워크로드 프로세싱의 구현이다. 본원에 설명된 바와 같이, 오버헤드 (404e) 는 오프로딩된 워크로드의 실행 (406c) 동안 여전히 발생될 수도 있다. 동적 I/O 코히이런트 워크로드 프로세싱에서, 장기 구동 오프로딩된 워크로드는 오버헤드 임계값을 초과하는 오버헤드 (404e) 를 생성할 수도 있다. 여러 방법들은 본원에 추가로 설명된 바와 같이 프로세싱 디바이스 (302) 가 아이들 상태에 진입하는 것, 경과된 시간 및/또는 오프로딩된 워크로드의 실행의 수행을 포함하는, 오버헤드 임계값을 초과하는 장기 구동 워크로드를 검출하기 위해 이용될 수도 있다.
장기 구동 오프로딩된 워크로드를 검출하는 것에 응답하여, 프로세싱 디바이스 (302) 는 프로세싱 디바이스 캐시 및/또는 공유된 메모리를 I/O 코히어런트 모드로부터 비-I/O 코히어런트 모드로 동적으로 트랜지션할 수도 있다. I/O 코히어런트 모드로부터 비-I/O 코히어런트 모드로 트랜지션하기 위하여, 프로세싱 디바이스 (302) 는 프로세싱 디바이스 캐시 및/또는 공유된 메모리가 I/O 코히어런트 모드로 유지되는 동안 캐시 메인터넌스 동작들을 구현하기 시작할 수도 있다. 예를 들어, 하드웨어 가속기가 오프로딩된 워크로드 실행 (404d) 을 계속하는 동안 프로세싱 디바이스 (302) 는 캐시 플러시 메인터넌스 동작 (400) 을 구현할 수도 있다. 캐시 플러시 메인터넌스 동작 (400) 동안, 오프로딩된 워크로드 실행 (404d) 은 I/O 코히어런트 모드 오버헤드 (404e) 발생시키는 것을 계속할 수도 있지만, 캐시 플러시 메인터넌스 동작 (400) 에 오버헤드가 발생되지 않을 수도 있다. 따라서, 오버헤드 (404d) 는 본원에 설명된 오프로딩된 워크로드 결과를 송신하는 코히어런트 상호접속부의 성능에 의해 야기되는 오버헤드로 제한될 수도 있다.
캐시 플러시 메인터넌스 동작 (400) 의 완료시, 프로세싱 디바이스 캐시 및/또는 공유된 메모리는 I/O 코히어런트 모드로부터 비-I/O 코히어런트 모드로 동적으로 스위칭할 수도 있다 (414). I/O 코히어런트 모드와 비-I/O 코히어런트 모드 사이의 스위칭 (414) 은 오프로딩된 워크로드 실행 (404d) 을 인터럽트하지 않을 수도 있다. 오프로딩된 워크로드 실행 (404d) 이 계속되는 동안, 더 이상 I/O 코히어런트 모드 오버헤드 (404e) 가 발생되지 않을 수도 있다. 하드웨어 가속기 (306) 는 오프로딩된 워크로드 실행을 완료할 수 있고 (410), 오프로딩된 워크로드 실행 (406d) 의 결과들을 코히어런트 상호접속부 및/또는 공유된 메모리를 통하여 프로세싱 디바이스 (302) 로 리턴시킬 수도 있다.
오프로딩된 워크로드 실행의 결과들을 프로세싱 디바이스 (302) 에 대해 이용가능하게 하기 위해, 프로세싱 디바이스 (302) 는 아래 보다 논의된 바와 같이 캐시 무효화 메인터넌스 동작 (402) 을 구현할 수도 있다. 캐시 무효화 메인터넌스 동작 (402) 은 오버헤드 (404b) 를 형성할 수도 있고, 이는 저장된 오프로딩된 워크로드 결과들의 데이터의 양 또는 오프로딩된 워크로드 결과들을 저장하기 위해 프로세싱 디바이스 캐시에 이용된 공간에 따라 변할 수도 있다. 오버헤드 (404b) 는 프로세싱 디바이스 (302) 에 의한 액세스에 대한 오프로딩된 워크로드 결과들의 이용가능성을 지연시킬 수도 있다. 캐시 무효화 메인터넌스 동작 (402) 의 완료시, 오프로딩된 워크로드 결과들은 프로세싱 디바이스 (302) 에 의해 오프로딩된 워크로드 결과들의 액세스, 이용 및/또는 출력을 위하여 이용가능하게 될 수도 있다 (412). 프로세싱 디바이스 (302) 는 오프로딩된 워크로드 실행 (406a) 의 결과들을 수신할 수도 있고 그 결과들을 자신의 프로세싱 디바이스 캐시에 저장할 수도 있다.
도 8 은 하이브리드 I/O 코히어런트 기록을 갖는 I/O 코히이런트 워크로드 프로세싱의 일 예의 양태를 예시한다. 오프로딩된 워크로드에 대한 데이터를 하드웨어 가속기 (306) 로 송신하고, 그리고 하드웨어 가속기 (306) 로부터 수신된 결과들을 출력하기 위해, 코히어런시 메카니즘들 (예를 들어, 도 3a 내지 도 3c 에서의 코히어런시 도메인 (314)) 이 프로세싱 디바이스 캐시에서의 데이터의 정확도를 보장하기 위해 코히어런트 상호접속부에 의해 연속적으로 구현될 수도 있다. 따라서, 프로세싱 디바이스 캐시가 I/O 코히어런트 모드에 있는 동안, 프로세싱 디바이스 (302) 는 디바이스가 비-I/O 코히어런트 모드에 대하여 구현할 수도 있는 캐시 메인터넌스 동작들을 구현하지 않을 수도 있다.
하이브리드 I/O 코히어런트 기록을 갖는 I/O 코히이런트 워크로드 프로세싱은 도 5 를 참조하여 본원에 설명된 I/O 코히이런트 워크로드 프로세싱과 유사할 수도 있다. 그러나, I/O 코히이런트 워크로드 프로세싱과 동일한 코히어런시 메카니즘들을 통하여 하이브리드 I/O 코히어런트 기록없이 송신하는 것에 의해 I/O 코히어런트 기록 데이터를 송신하는 것이 금지될 수 있기 때문에 I/O 코히이런트 워크로드 프로세싱에서의 하이브리드 I/O 코히어런트 기록의 포함은 발생되는 오버헤드의 양을 감소시킬 수도 있다.
프로세싱 디바이스 (302) 는 하드웨어 가속기 (306) 로의 워크로드의 부분을 오프로드할 수도 있다. 하드웨어 가속기 (306) 는 오프로딩된 워크로드에 대한 임의의 송신된 데이터를 자신의 하드웨어 가속기 캐시 (예를 들어, 3a 내지 도 3c 에서의 프로세싱 디바이스 캐시 (310a, 310b, 310c)) 에 저장할 수도 있고, 인에이블된 하이브리드 I/O 코히어런트 기록의 실행을 론칭하고 (800), 오프로딩된 워크로드를 실행할 수도 있다 (406b). 비-I/O 코히어런트 모드에서 프로세싱 디바이스 캐시에 대한 오프로딩된 워크로드 데이터를 송신하기 위한 오버헤드를 발생시키기 보다는, 오프로딩된 워크로드의 실행을 론칭 (408) 하기 전에 오버헤드가 발생하지 않도록 데이터가 전달되는 동안 I/O 코히어런트 모드에서, 코히어런시가 유지될 수 있다.
오프로딩된 워크로드 (406b) 의 실행 동안, 도 5 에서의 오버헤드 (404c) 에서의 감소는 오버헤드 (404f) 로 예시된 바와 같이 실현될 수도 있다. 오버헤드에서의 감소는 I/O 코히어런트 기록 데이터를 코히어런시 메카니즘들을 통하여 전송하는 것을 우회하는 하이브리드 I/O 코히어런트 기록 요청들을 실행하는 것에 의해 I/O 코히어런트 기록 요청을 실행시에 감소된 레이턴시로부터 일어날 수도 있다. 하드웨어 가속기 (306) 는 오프로딩된 워크로드 실행을 완료할 수도 있고 (410), 오프로딩된 워크로드 결과는 프로세싱 디바이스 (302) 가 오프로딩된 워크로드 결과를 출력하기 위해 이용가능하게 될 수도 있다 (412).
도 9 는 하이브리드 I/O 코히어런트 기록을 갖는 동적 I/O 코히이런트 워크로드 프로세싱의 일 예의 양태를 예시한다. 도 9 에 예시된 예에서, 프로세싱 디바이스 (302) 에 의한 워크로드 오프로딩은 I/O 코히어런트 모드에 있는 프로세싱 디바이스 캐시로 시작할 수도 있다. 따라서, 오프로딩된 워크로드에 대한 데이터를 하드웨어 가속기 (306) 로 송신하고, 그리고 하드웨어 가속기 (306) 로부터 수신된 결과들을 출력하기 위해, 코히어런시 메카니즘들 (예를 들어, 도 3a 내지 도 3c 에서의 코히어런시 도메인 (314)) 이 프로세싱 디바이스 캐시에서의 데이터의 정확도를 보장하기 위해 코히어런트 상호접속부에 의해 연속적으로 구현될 수도 있다. 따라서, 프로세싱 디바이스가 I/O 코히어런트 모드에 있는 동안, 프로세싱 디바이스 (302) 는 디바이스가 비-I/O 코히어런트 모드에 대하여 구현할 수도 있는 캐시 메인터넌스 동작들을 구현하지 않을 수도 있다.
하이브리드 I/O 코히어런트 기록을 갖는 I/O 코히이런트 워크로드 프로세싱은 도 7 을 참조하여 본원에 설명된 I/O 코히이런트 워크로드 프로세싱과 유사할 수도 있다. 그러나, I/O 코히이런트 워크로드 프로세싱과 동일한 코히어런시 메카니즘들을 통하여 하이브리드 I/O 코히어런트 기록없이 송신하는 것에 의해 I/O 코히어런트 기록 데이터를 송신하는 것이 금지될 수 있기 때문에 I/O 코히이런트 워크로드 프로세싱에서의 하이브리드 I/O 코히어런트 기록의 포함은 발생되는 오버헤드의 양을 감소시킬 수도 있다. 동적 트리거를 검출하는 것에 응답하여 이용되는 비-I/O 코히이런트 워크로드 프로세싱과 반대로, 하이브리드 I/O 코히어런트 기록이 I/O 코히어런트할 수도 있기 때문에, I/O 코히이런트 워크로드 프로세싱에서의 하이브리드 I/O 코히어런트 기록의 포함은 발생되는 오버헤드의 양을 감소시킬 수도 있다. 따라서, 하이브리드 I/O 코히어런트 기록을 가진 동적 I/O 코히이런트 워크로드 프로세싱 동안 실행되는 I/O 코히어런시 동작들이 프로세싱 디바이스 캐시의 부분들을 무효화할 필요성을 생략할 수도 있기 때문에, 무효화 캐시 메인터넌스 동작이 스킵될 수도 있다.
프로세싱 디바이스 (302) 는 하드웨어 가속기 (306) 로의 워크로드의 부분을 오프로드할 수도 있다. 하드웨어 가속기 (306) 는 오프로딩된 워크로드에 대한 임의의 송신된 데이터를 자신의 하드웨어 가속기 캐시 (예를 들어, 도 3a 내지 도 3c 에서의 프로세싱 디바이스 캐시 (310a, 310b, 310c)) 에 저장할 수도 있고, 오프로딩된 워크로드의 실행을 론칭할 수도 있고 (408), 오프로딩된 워크로드를 실행할 수도 있다 (406d). 비-I/O 코히어런트 모드에서 프로세싱 디바이스 캐시에 대한 오프로딩된 워크로드 데이터를 송신하기 위한 오버헤드를 발생시키기 보다는, 오프로딩된 워크로드의 실행을 론칭 (408) 하기 전에 오버헤드가 발생하지 않도록 데이터가 전달되는 동안 I/O 코히어런트 모드에서, 코히어런시가 유지될 수 있다.
도 9 에 예시된 예는 하드웨어 가속기 (306) 에 의한 장기 구동 오프로딩된 워크로드 실행을 위한 동적 I/O 코히이런트 워크로드 프로세싱의 구현이다. 본원에 설명된 바와 같이, 오버헤드 (404e) 는 오프로딩된 워크로드의 실행 (406c) 동안 여전히 발생될 수도 있다. 동적 I/O 코히이런트 워크로드 프로세싱에서, 장기 구동 오프로딩된 워크로드는 오버헤드 임계값을 초과하는 오버헤드 (404e) 를 생성할 수도 있다. 여러 방법들은 본원에 추가로 설명된 바와 같이 프로세싱 디바이스 (302) 가 아이들 상태에 진입하는 것, 경과된 시간 및/또는 오프로딩된 워크로드의 실행의 수행을 포함하는, 오버헤드 임계값을 초과하는 장기 구동 워크로드를 검출하기 위해 이용될 수도 있다.
장기 구동 오프로딩된 워크로드를 검출하는 것에 응답하여, 코히어런트 상호접속부는 하이브리드 I/O 코히어런트 기록 모드로 동적으로 트랜지션할 수도 있다. I/O 코히어런트 모드로부터 비-I/O 코히어런트 모드로 트랜지션하기 위하여, 프로세싱 디바이스 (302) 은 코히어런트 상호접속부가 비-하이브리드 I/O 코히어런트 기록 모드로 유지되는 동안 캐시 메인터넌스 동작들을 구현하기 시작할 수도 있다. 예를 들어, 하드웨어 가속기가 오프로딩된 워크로드 실행 (404d) 을 계속하는 동안 프로세싱 디바이스 (302) 는 캐시 플러시 메인터넌스 동작 (400) 을 구현할 수도 있다. 캐시 플러시 메인터넌스 동작 (400) 동안, 오프로딩된 워크로드 실행 (404d) 은 I/O 코히어런트 모드 오버헤드 (404e) 발생시키는 것을 계속할 수도 있지만, 캐시 플러시 메인터넌스 동작 (400) 에 오버헤드가 발생되지 않을 수도 있다. 따라서, 오버헤드 (404d) 는 본원에 설명된 오프로딩된 워크로드 결과를 송신하는 코히어런트 상호접속부의 성능에 의해 야기되는 오버헤드로 제한될 수도 있다.
캐시 플러시 메인터넌스 동작 (400) 의 완료시, 코히어런트 상호접속부는 하이브리드 I/O 코히어런트 기록 모드로 동적으로 트랜지션할 수도 있다 (900). 비-하이브리드 I/O 코히어런트 기록 모드와 하이브리드 I/O 코히어런트 기록 모드 사이의 스위칭 (414) 은 오프로딩된 워크로드 실행 (404d) 을 인터럽트하지 않을 수도 있다. 오프로딩된 워크로드 실행 (404d) 이 계속되는 동안 코히어런시 메카니즘들을 통하여 I/O 코히어런트 기록을 송신하지 않는 결과로서 I/O 코히어런트 모드 오버헤드 (404e) 가 거의 또는 전혀 발생하지 않을 수도 있다. 하드웨어 가속기 (306) 는 오프로딩된 워크로드 실행을 완료할 수도 있고 (410), 오프로딩된 워크로드 실행 (406d) 의 결과들을 코히어런트 상호접속부를 통하여 프로세싱 디바이스 (302) 로 리턴하고, 오프로딩된 워크로드 결과는 프로세싱 디바이스 (302) 가 오프로딩된 워크로드 결과를 출력하기 위해 이용가능하게 될 수도 있다 (412). 본원에 주지된 바와 같이, 오프로딩된 워크로드 결과들이 이용하게 되기 (412) 전에 캐시 무효화 메인터넌스 동작의 실행은 비-I/O 코히어런트 모드로 트랜지션하는 것에 반하여, I/O 코히어런트 모드로 유지시키는 것에 의해 생략될 수도 있고, 이에 의해 캐시 무효화 메인터넌스 동작 (예를 들어, 도 7 에서의 오버헤드 (404b)) 과 관련된 오버헤드를 제거한다.
도 10 은 일 양태에 따라 하이브리드 I/O 코히어런트 기록을 구현하기 위한 방법 (1000) 을 예시한다. 방법 (1000) 은 컴퓨팅 디바이스에서, 프로세서 (예를 들어, 도 1 및 도 2 의 프로세서 (14) 및 도 3 내지 도 9 에서의 프로세싱 디바이스 (302) 에서 실행하는 소프트웨어에서, 범용 하드웨어에서, 전용 하드웨어 (예를 들어, 도 3a 내지 도 3c 에서의 코히어런트 상호접속부 (312)) 에서, 또는 소프트웨어 구성된 프로세서 및 전용 하드웨어의 조합에서, 이를 테면, 다른 개별 컴포넌트들을 포함하는 동적 I/O 코히어런시 시스템 및/또는 하이브리드 I/O 코히어런트 기록 시스템 (예를 들어, 도 3a 내지 도 3c) 내의 프로세서 실행 소프트웨어에서 구현될 수도 있다. 여러 양태들에서 실행되는 대안의 구성들을 수반하기 위하여, 방법 (1000) 을 구현하는 하드웨어는 "프로세싱 디바이스"로서 본원에서 지칭된다.
블록 1002 에서, 프로세싱 디바이스는 I/O 코히어런트 기록 요청 및 I/O 코히어런트 기록 데이터를 하드웨어 가속기 (예를 들어, 도 3a 내지 도 3c 에서의 GPU (306a), DSP (306b), 및 커스텀 하드웨어 가속기 (306c), 및 도 4 내지 도 9 에서의 하드웨어 가속기 (306)) 로부터 수신할 수도 있다.
결정 블록 1004 에서, 프로세싱 디바이스는 하이브리드 I/O 코히어런트 기록 모드가 인에이블되는지의 여부를 결정할 수도 있다. 하이브리드 I/O 코히어런트 기록 모드가 인에이블되지 않는다는 결정에 응답하여 (즉, 결정 블록 1004 = "아니오"), 블록 1016 에서, 프로세싱 디바이스는 기록 요청이 I/O 코히어런트 기록 요청인지 비-I/O 코히어런트 기록 요청인지를 결정할 수도 있고 기록 요청 및 기록 데이터를 지정된 컴포넌트들로 전송할 수도 있다. I/O 코히어런트 기록 요청에 대해, 프로세싱 디바이스는 블록 1016 에서, I/O 코히어런트 기록 요청 및 I/O 코히어런트 기록 데이터를 공유된 메모리 (예를 들어, 도 3a 내지 도 3c 에서의 공유된 메모리 (304)) 로 그리고 코히어런시 도메인 (예를 들어, 도 3a 내지 도 3c 에서의 코히어런시 도메인 (314)) 으로 전송할 수도 있다. 비-I/O 코히어런트 기록 요청에 대해, 프로세싱 디바이스는 블록 1016 에서, 비-I/O 코히어런트 기록 요청 및 비-I/O 코히어런트 기록 데이터를 공유된 메모리로 전송할 수도 있다.
하이브리드 I/O 코히어런트 기록 모드가 인에이블되는 결정에 응답하여 (즉, 결정 블록 1004 = "예"), 프로세싱 디바이스는 선택 블록 1006 에서 I/O 코히어런트 기록 요청을 하이브리드 I/O 코히어런트 기록 요청으로서 마킹한다. 프로세싱 디바이스는 I/O 코히어런트 기록 요청이 하이브리드 I/O 코히어런트 기록 요청임을 표시하기 위해 I/O 코히어런트 기록 요청에 마크, 이를 테면, 특정된 비트 또는 값에 의해 필드를 추가하고/하거나 재이용하는 것에 의해 I/O 코히어런트 기록 요청을 마킹할 수도 있다.
블록 1008 에서, 프로세싱 디바이스는 마킹된 I/O 코히어런트 기록 요청으로부터 제 1 하이브리드 I/O 코히어런트 기록 요청 및 제 2 하이브리드 I/O 코히어런트 기록 요청을 생성할 수도 있다. 여러 양태들에서, 제 1 하이브리드 I/O 코히어런트 기록 요청 및 제 2 하이브리드 I/O 코히어런트 기록 요청의 일방 또는 양방은 마킹된 I/O 코히어런트 기록 요청들의 카피본일 수도 있다.
선택 블록 1006 에서 I/O 코히어런트 기록 요청을 하이브리드 I/O 코히어런트 기록 요청하기 보다는, 하이브리드 I/O 코히어런트 기록 모드가 인에이블된다는 결정에 응답하여 (즉, 결정 블록 1004 = "예"), 프로세싱 디바이스는 제 1 하이브리드 I/O 코히어런트 기록 요청 및 제 2 하이브리드 I/O 코히어런트 기록 요청을 블록 1008 에서 생성된 하이브리드 I/O 코히어런트 기록 요청들로서 마킹할 수도 있다.
블록 1010 에서, 프로세싱 디바이스는 제 1 하이브리드 I/O 코히어런트 기록 요청 및 I/O 코히어런트 기록 데이터를 공유된 메모리로 전송하고 제 2 하이브리드 I/O 코히어런트 기록 요청을 코히어런시 도메인으로 전송할 수도 있다. 본원에 주지된 바와 같이, 프로세싱 디바이스는 하이브리드 I/O 코히어런트 기록 요청 동안 또는 하이브리드 I/O 코히어런트 기록 모드가 인에이블될 때 I/O 코히어런트 기록 데이터를 코히어런시 도메인으로 전송하는 것을 우회할 수도 있다.
블록 1012 에서, 프로세싱 디바이스는 제 1 하이브리드 I/O 코히어런트 기록 요청의 확인응답을 공유된 메모리로부터 수신할 수도 있다.
블록 1014 에서, 프로세싱 디바이스는 제 1 하이브리드 I/O 코히어런트 기록 요청의 확인응답을 하드웨어 가속기 및/또는 코히어런시 도메인으로 전송할 수도 있다. 본원에 추가로 설명된 바와 같이, 여러 양태들에서, 확인응답은 코히어런트 상호접속부로 전송된 다음 코히어런트 상호접속부에 의해 코히어런시 도메인으로 전송될 수도 있다. 여러 양태들에서, 확인응답은 코히어런트 상호접속부 및 코히어런시 도메인으로 전송될 수도 있고 코히어런트 상호접속부는 확인응답을 코히어런시 도메인으로 전송할 필요는 없을 수도 있다.
도 11 은 일 양태에 따라 하이브리드 I/O 코히어런트 기록을 구현하기 위한 방법 (1100) 을 예시한다. 방법 (1100) 은 컴퓨팅 디바이스에서, 프로세서 (예를 들어, 도 1 및 도 2 의 프로세서 (14) 및 도 3 내지 도 9 에서의 프로세싱 디바이스 (302) 에서 실행하는 소프트웨어에서, 범용 하드웨어에서, 전용 하드웨어 (예를 들어, 공유된 메모리 (304) 에 대해 판독/기록 메모리 액세스 요청을 구현하고 액세스를 제어하도록 구성되는 공유된 메모리 제어기 (도시 생략) 를 포함하는 3a 내지 도 3c 에서의 공유된 메모리 (304)) 또는 소프트웨어 구성된 프로세서 및 전용 하드웨어의 조합에서, 이를 테면, 다른 개별 컴포넌트들을 포함하는 동적 I/O 코히어런시 시스템 및/또는 하이브리드 I/O 코히어런트 기록 시스템 (예를 들어, 도 3a 내지 도 3c) 내의 프로세서 실행 소프트웨어에서 구현될 수도 있다. 여러 양태들에서 실행되는 대안의 구성들을 수반하기 위하여, 방법 (1000) 을 구현하는 하드웨어는 "프로세싱 디바이스"로서 본원에서 지칭된다.
블록 1102 에서, 프로세싱 디바이스는 I/O 코히어런트 기록 요청을 수신할 수도 있다. 여러 양태들에서, I/O 코히어런트 기록 요청은 코히어런트 상호접속부 (예를 들어, 도 3a 내지 도 3c 에서의 코히어런트 상호접속부 (312)) 로부터 또는 코히어런시 도메인 (예를 들어, 도 3a 내지 도 3c 에서의 코히어런시 도메인 (314)) 으로부터 수신될 수도 있다. 여러 양태들에서, I/O 코히어런트 기록 요청은 하이브리드 I/O 코히어런트 기록 요청일 수도 있고 이는 본원에 설명된 제 1 하이브리드 I/O 코히어런트 기록 요청 또는 제 2 하이브리드 I/O 코히어런트 기록 요청을 포함한다.
선택적 블록 1104 에서, 프로세싱 디바이스는 I/O 코히어런트 기록 데이터를 수신할 수도 있다. 여러 양태들에서, I/O 코히어런트 기록 데이터는 코히어런트 상호접속부로부터 또는 코히어런시 도메인으로부터 수신될 수도 있다. 블록 1104 은 프로세싱 디바이스가 하이브리드 I/O 코히어런트 기록 요청에 대해 I/O 코히어런트 기록 데이터를 코히어런시 도메인으로부터 수신하지 않을 수도 있기 때문에 선택적이다.
결정 블록 1106 에서, 프로세싱 디바이스는 수신된 I/O 코히어런트 기록 요청이 하이브리드 I/O 코히어런트 기록 요청인지의 여부를 결정할 수도 있다. 하이브리드 I/O 코히어런트 기록 요청은 제 1 하이브리드 I/O 코히어런트 기록 요청 또는 제 2 하이브리드 I/O 코히어런트 기록 요청을 포함할 수도 있다. 프로세싱 디바이스는 수신된 I/O 코히어런트 기록 요청이 하이브리드 I/O 코히어런트 기록 요청이라는 지정된 표시자, 이를 테면 특정 비트 또는 값을 갖는 수신된 I/O 코히어런트 기록 요청의 특정 필드에 대해 체크하도록 구성될 수도 있다.
수신된 I/O 코히어런트 기록 요청이 하이브리드 I/O 코히어런트 기록 요청이 아니라는 결정 (즉, 결정 블록 1106 = "아니오") 에 응답하여, 프로세싱 디바이스는 비-하이브리드 I/O 코히어런트 기록 요청을 블록 1118 에서 실행할 수도 있다.
수신된 I/O 코히어런트 기록 요청이 하이브리드 I/O 코히어런트 기록 요청이라는 결정에 응답하여 (즉, 결정 블록 1106 = "예"), 프로세싱 디바이스는 하이브리드 I/O 코히어런트 기록 요청이 코히어런트 상호접속부로부터 수신되는지의 여부를 결정 블록 1108 에서 결정할 수도 있다. 여러 양태들에서, 프로세싱 디바이스는 대안적으로, 하이브리드 I/O 코히어런트 기록 요청이 코히어런시 도메인으로부터 수신되는지의 여부를 결정하고 코히어런트 상호접속부 및 코히어런시 도메인 중 어느 것으로부터 하이브리드 I/O 코히어런트 기록 요청이 수신되는지를 결정할 수도 있다. 여러 양태들에서, 프로세싱 디바이스는 하이브리드 I/O 코히어런트 기록 요청과 함께 포함된, 하이브리드 I/O 코히어런트 기록 요청의 소스를 식별하고 프로세싱 디바이스의 지정된 하드웨어 로케이션에서 하이브리드 I/O 코히어런트 기록 요청을 수신하는 표시자를 포함하는 복수의 식별자들의 어느 것을 이용함에 있어서 하이브리드 I/O 코히어런트 기록 요청의 소스, 및/또는 I/O 코히어런트 기록 데이터가 또한 하이브리드 I/O 코히어런트 기록 요청과 동일한 소스로부터 수신되었는지의 여부의 결정들을 행할 수도 있다. 코히어런트 상호접속부로부터의 하이브리드 I/O 코히어런트 기록 요청은 제 1 하이브리드 I/O 코히어런트 기록 요청을 포함할 수도 있고 코히어런시 도메인으로부터의 하이브리드 I/O 코히어런트 기록 요청은 제 2 하이브리드 I/O 코히어런트 기록 요청을 포함할 수도 있다.
하이브리드 I/O 코히어런트 기록 요청이 코히어런트 상호접속부로부터 수신된다는 결정 (즉, 결정 블록 1108 = "예") 에 응답하여, 프로세싱 디바이스는 블록 1110 에서 I/O 코히어런트 기록 데이터를 공유된 메모리에 저장하는 것에 의해 하이브리드 I/O 코히어런트 기록 요청을 실행하고 블록 1112 에서 하이브리드 I/O 코히어런트 기록 요청의 확인응답을 코히어런트 상호접속부로 전송한다. 일부 양태들에서, 프로세싱 디바이스는 블록 1112 에서 하이브리드 I/O 코히어런트 기록 요청의 확인응답을 코히어런트 상호접속부로 전송하고 I/O 코히어런트 기록 데이터가 블록 1110 에서 공유된 메모리에 저장될 때 블록 1116 에서 하이브리드 I/O 코히어런트 기록 요청의 확인응답을 코히어런시 도메인으로 전송하도록 구성될 수도 있다. 이러한 양태들에서, 프로세싱 디바이스는 확인응답을 코히어런시 도메인으로 전송할 수 있거나 또는 코히어런트 상호접속부는 확잉응답을 코히어런시 도메인으로 전송할 수도 있다. 하이브리드 I/O 코히어런트 기록 요청은 제 1 하이브리드 I/O 코히어런트 기록 요청 또는 제 2 하이브리드 I/O 코히어런트 기록 요청을 포함할 수도 있다.
하이브리드 I/O 코히어런트 기록 요청이 코히어런트 상호접속부로부터 수신되지 않는다고 결정하는 것 (즉, 결정 블록 1108 = "아니오") 에 응답하여 (즉, 하이브리드 I/O 코히어런트 기록 요청이 코히어런시 도메인으로부터 수신될 때), 블록 1114 에서 프로세싱 디바이스는 블록 1110 에서의 I/O 코히어런트 기록 데이터를 공유된 메모리로 저장하는 것을 대기할 수도 있다. 일부 양태들에서, 블록 1112 에서 프로세싱 디바이스는 블록 1114 에서 기록 데이터를 저장하는 것을 대기한 후 I/O 코히어런트 기록 데이터가 블록 1110 에서 공유된 메모리에 저장될 때 하이브리드 I/O 코히어런트 기록 요청의 확인응답을 코히어런트 상호접속부로 전송할 수도 있다. 일부 양태들에서, 블록 1116 에서 프로세싱 디바이스는 블록 1114 에서 기록 데이터를 저장하는 것을 대기한 후 I/O 코히어런트 기록 데이터가 블록 1110 에서 공유된 메모리에 저장될 때 하이브리드 I/O 코히어런트 기록 요청의 확인응답을 코히어런시 도메인으로 전송할 수도 있다. 여러 양태들에서, 하이브리드 I/O 코히어런트 기록 요청은 제 1 하이브리드 I/O 코히어런트 기록 요청 또는 제 2 하이브리드 I/O 코히어런트 기록 요청을 포함할 수도 있다.
도 12 는 일 양태에 따라 하이브리드 I/O 코히어런트 기록을 구현하기 위한 방법 (1200) 을 예시한다. 방법 (1200) 은 컴퓨팅 디바이스에서, 프로세서 (예를 들어, 도 1 및 도 2 의 프로세서 (14) 및 도 3 내지 도 9 에서의 프로세싱 디바이스 (302) 에서 실행하는 소프트웨어에서, 범용 하드웨어에서, 전용 하드웨어 (예를 들어, 도 3a 내지 도 3c 에서의 코히어런시 도메인들 (314)) 에서, 또는 소프트웨어 구성된 프로세서 및 전용 하드웨어의 조합에서, 이를 테면, 다른 개별 컴포넌트들을 포함하는 동적 I/O 코히어런시 시스템 및/또는 하이브리드 I/O 코히어런트 기록 시스템 (예를 들어, 도 3a 내지 도 3c) 내의 프로세서 실행 소프트웨어에서 구현될 수도 있다. 여러 양태들에서 실행되는 대안의 구성들을 수반하기 위하여, 방법 (1000) 을 구현하는 하드웨어는 "프로세싱 디바이스"로서 본원에서 지칭된다.
블록 1202 에서, 프로세싱 디바이스는 I/O 코히어런트 기록 요청을 수신할 수도 있다. 여러 양태들에서, I/O 코히어런트 기록 요청은 코히어런트 상호접속부 (예를 들어, 도 3a 내지 도 3c 에서의 코히어런트 상호접속부 (312)) 로부터 수신될 수도 있다. 하이브리드 I/O 코히어런트 기록 요청은 제 2 하이브리드 I/O 코히어런트 기록 요청을 포함할 수도 있다.
선택적 블록 1204 에서, 프로세싱 디바이스는 I/O 코히어런트 기록 데이터를 수신할 수도 있다. 여러 양태들에서, I/O 코히어런트 기록 데이터는 코히어런트 상호접속부로부터 수신될 수도 있다. 블록 1204 은 프로세싱 디바이스가 하이브리드 I/O 코히어런트 기록 요청에 대해 I/O 코히어런트 기록 데이터를 코히어런시 상호접속부로부터 수신하지 않을 수도 있기 때문에 선택적이다.
결정 블록 1206 에서, 프로세싱 디바이스는 수신된 I/O 코히어런트 기록 요청이 하이브리드 I/O 코히어런트 기록 요청인지의 여부를 결정할 수도 있다. 프로세싱 디바이스는 수신된 I/O 코히어런트 기록 요청이 하이브리드 I/O 코히어런트 기록 요청이라는 지정된 표시자, 이를 테면 특정 비트 또는 값을 갖는 수신된 I/O 코히어런트 기록 요청의 특정 필드에 대해 체크하도록 구성될 수도 있다. 하이브리드 I/O 코히어런트 기록 요청은 제 2 하이브리드 I/O 코히어런트 기록 요청을 포함할 수도 있다.
수신된 I/O 코히어런트 기록 요청이 하이브리드 I/O 코히어런트 기록 요청이 아니라는 결정 (즉, 결정 블록 1206 = "아니오") 에 응답하여, 프로세싱 디바이스는 블록 1218 에서 수신된 I/O 코히어런트 기록 데이터에 대한 코히어런시 체크 및 무효화 동작들을 실행할 수도 있다. 블록 1220 에서, 프로세싱 디바이스는 비-하이브리드 I/O 코히어런트 기록 요청 및 I/O 코히어런트 기록 데이터를 공유된 메모리 (예를 들어, 도 3a 내지 도 3c 에서의 공유된 메모리 (304)) 로 전송할 수도 있다. 여러 양태들에서, 프로세싱 디바이스는 비-하이브리드 I/O 코히어런트 기록 요청 및 I/O 코히어런트 기록 데이터를 코히어런트 상호접속부를 통하여 공유된 메모리로 전송할 수도 있다.
수신된 I/O 코히어런트 기록 요청이 하이브리드 I/O 코히어런트 기록 요청이 아니라는 결정 (즉, 결정 블록 1206 = "예") 에 응답하여, 프로세싱 디바이스는 블록 1208 에서 수신된 I/O 코히어런트 기록 데이터에 대한 코히어런시 체크 및 무효화 동작들을 실행할 수도 있다. 여러 양태들에서, 코히어런시 체크 및 무효화 동작들은 제 2 하이브리드 I/O 코히어런트 기록 요청을 포함하는 하이브리드 I/O 코히어런트 기록 요청에 의해 특정된 I/O 코히어런시 기록 데이터의 어드레스에 대해 실행될 수도 있다. 블록 1210 에서, 프로세싱 디바이스는 하이브리드 I/O 코히어런트 기록 요청의 확인응답을 공유된 메모리로부터 수신할 수도 있다. 확인응답은 제 1 하이브리드 I/O 코히어런트 기록 요청 및/또는 제 2 하이브리드 I/O 코히어런트 기록 요청에 대해 행해질 수도 있다.
결정 블록 1212 에서, 프로세싱 디바이스는 확인응답이 이미 수신된 하이브리드 I/O 코히어런트 기록 요청에 대한 것인지의 여부를 결정할 수도 있다. 여러 양태들에서, 하이브리드 I/O 코히어런트 기록 요청에 대응하는 확인응답은 하이브리드 I/O 코히어런트 기록 요청 전에 코히어런시 도메인에서 수신될 수도 있다. 이는 예를 들어, 코히어런시 도메인의 입력에 대한 혼잡에 의해 야기될 수도 있다. 하이브리드 I/O 코히어런트 기록 요청을 프로세싱하기 전에 확인응답을 프로세싱하는 것을 회피하기 위하여, 코히어런시 도메인은 대응하는 하이브리드 I/O 코히어런트 기록 요청들이 프로세싱될 때까지 확인응답들을 버퍼링하도록 구성될 수도 있다. 확인응답은 제 1 하이브리드 I/O 코히어런트 기록 요청 및/또는 제 2 하이브리드 I/O 코히어런트 기록 요청에 대해 행해질 수도 있다. 여러 실시형태들에서, 확인응답은 제 1 하이브리드 I/O 코히어런트 기록 요청에 대한 것일 수도 있고 수신된 하이브리드 I/O 코히어런트 기록 요청은 제 2 하이브리드 I/O 코히어런트 기록 요청에 대한 것일 수도 있다. 제 2 하이브리드 I/O 코히어런트 기록 요청은 이것이 제 1 하이브리드 I/O 코히어런트 기록 요청과 동일할 수도 있기 때문에 확인응답에 여전히 대응할 수도 있다.
확인응답이 이미 수신된 하이브리드 I/O 코히어런트 기록 요청에 대한 것이 아니라고 결정하는 것 (즉, 결정 블록 1212 = "아니오") 에 응답하여, 프로세싱 디바이스는 블록 1214 에서 확인응답을 버퍼링할 수도 있다. 프로세싱 디바이스는 로컬 및/또는 프라이빗 메모리 (예를 들어, 도 1 에서의 메모리 (16, 24)) 에서의 확인응답을 버퍼링할 수도 있다. 프로세싱 디바이스는 블록 1202 에서 대응하는 하이브리드 I/O 코히어런트 기록 요청을 수신하는 버퍼 유닛에서 확인응답을 유지하고 결정 블록 1212 에서 확인응답이 이미 수신된 하이브리드 I/O 코히어런트 기록 요청에 대한 것이라고 결정하는 것에 의해 확인응답의 프로세싱을 금지할 수도 있다. 하이브리드 I/O 코히어런트 기록 요청은 제 1 하이브리드 I/O 코히어런트 기록 요청 및/또는 제 2 하이브리드 I/O 코히어런트 기록 요청을 포함할 수도 있다.
확인응답이 이미 수신된 하이브리드 I/O 코히어런트 기록 요청에 대한 것이라고 결정하는 것 (즉, 결정 블록 1212 = "예") 에 응답하여, 프로세싱 디바이스는 블록 1216 에서 하이브리드 I/O 코히어런시 기록 요청 트랜잭션을 소거할 수도 있다. 하이브리드 I/O 코히어런트 기록 요청은 제 2 하이브리드 I/O 코히어런트 기록 요청을 포함할 수도 있다.
도 13 은 일 양태에 따라 하이브리드 I/O 코히어런트 기록을 갖는 동적 I/O 코히어런트 워크로드 프로세싱을 구현하기 위한 방법 (1300) 을 예시한다. 방법 (1300) 은 컴퓨팅 디바이스에서, 프로세서 (예를 들어, 도 1 및 도 2 의 프로세서 (14) 및 도 3 내지 도 7 에서의 프로세싱 디바이스 (302) 에서 실행하는 소프트웨어에서, 범용 하드웨어에서, 전용 하드웨어에서, 또는 소프트웨어 구성된 프로세서 및 전용 하드웨어의 조합에서, 이를 테면, 다른 개별 컴포넌트들을 포함하는 동적 I/O 코히어런시 시스템 (예를 들어, 도 3a 내지 도 3c) 내의 프로세서 실행 소프트웨어에서 구현될 수도 있다. 여러 양태들에서 실행되는 대안의 구성들을 수반하기 위하여, 방법 (1300) 을 구현하는 하드웨어는 "프로세싱 디바이스"로서 본원에서 지칭된다.
블록 1302 에서, 프로세싱 디바이스는 프로세싱 디바이스 캐시 (예를 들어, 도 3a 에서의 프로세싱 디바이스 캐시 (308)) 및/또는 공유된 메모리 (예를 들어, 도 3a 내지 도 3c 에서의 공유된 메모리 (304)) 에 대해 I/O 코히어런트 모드를 "on" 으로 설정할 수도 있다. 대안적으로, 프로세싱 디바이스는 프로세싱 디바이스 캐시 및/또는 공유된 메모리에 대해 비-I/O 코히어런트 모드를 "off"로 설정할 수도 있다. 여러 양태들에서, I/O 코히어런트 모드는 프로세싱 디바이스 캐시 및/또는 공유된 메모리에 대한 디폴트 상태로서 "on" 으로 설정될 수도 있고, 이에 따라 I/O 코히어런트 모드를 "on" 으로 설정하는 것이 불필요할 수도 있다. I/O 코히어런트 모드를 "on"으로 설정하는 것은 "on" 이 디폴트 I/O 코히어런트 모드 상태인 경우에도 예방 대책일 수도 있다.
블록 1304 에서, 프로세싱 디바이스는 I/O 코히어런트 모드를 이용하여 하드웨어 가속기 (예를 들어, 도 3a 내지 도 3c 에서의 GPU (306a), DSP (306b), 및 커스텀 하드웨어 가속기 (306c), 및 도 4 내지 도 9 에서의 하드웨어 가속기 (306)) 상에서의 오프로딩된 워크로드 실행을 론칭할 수도 있다. 본원에 논의된 바와 같이, 실행을 론칭하는 것은 I/O 코히어런트 모드를 이용하는 실행을 위하여 프로세싱 디바이스로부터 하드웨어 가속기로 데이터를 송신하는 것에 대해 어떠한 오버헤드도 발생되지 않을 수도 있기 때문에 하드웨어 가속기에 대한 워크로드의 오프로딩에 대해 즉각적일 수도 있다. 프로세싱 디바이스와 하드웨어 가속기 사이에 데이터를 송신하라는 메모리 액세스 요청들은 코히어런트 상호접속부 (예를 들어, 도 3a 내지 도 3c 에서의 코히어런시 도메인 (314)) 의 I/O 코히어런트 경로를 통하여 라우팅될 수도 있다. 프로세싱 디바이스와 하드웨어 가속기 사이에 송신되는 데이터는 오프로딩된 워크로드를 실행하기 위한 프로세싱 디바이스로부터 하드웨어 가속기로의 데이터 및 실행된 오프로딩된 워크로드의 결과들로서 하드웨어 가속기로부터 프로세싱 디바이스로의 데이터를 포함할 수도 있다. 프로세싱 디바이스와 하드웨어 가속기 사이에 송신되는 데이터는 공유된 메모리를 통하여 송신될 수도 있다.
결정 블록 1306 에서, 프로세싱 디바이스는 오프로딩된 워크로드가 하드웨어 가속기에 의해 완료되었는지의 여부를 결정할 수도 있다.
오프로딩된 워크로드가 하드웨어 가속기에 의해 완료된다고 결정하는 것 (즉, 결정 블록 1306 = "예") 에 응답하여, 프로세싱 디바이스는 블록 1318 에서 하드웨어 가속기로부터 오프로딩된 워크로드의 실행의 결과들을 수신할 수도 있다. 오프로딩된 워크로드의 실행의 결과들은 하드웨어 가속기에 의해 공유된 메모리로 출력될 수도 있고 프로세싱 디바이스에 의해 공유된 메모리로부터 취출될 수도 있다. I/O 코히어런트 모드에서의 오프로딩된 워크로드의 완전한 실행의 완료는 캐시 메인터넌스 동작들이 데이터의 코히어런시를 관리하는 코히어런트 상호접속부의 I/O 코히어런트 메카니즘들의 결과로서 불필요함을 의미할 수도 있다.
오프로딩된 워크로드가 하드웨어 가속기에 의해 완료되지 않는다고 결정하는 것 (즉, 결정 블록 1306 = "아니오") 에 응답하여, 프로세싱 디바이스는 블록 1308 에서 I/O 코히어런트 모드와 비-I/O 코히어런트 모드 사이의 스위칭을 위한 동적 트리거가 검출되는지의 여부를 결정할 수도 있다. 동적 트리거는 I/O 코히어런트 모드 오버헤드 패널티가 원하지 않거나 허용가능하지 않을 수도 있는 지점까지 오프로딩된 워크로드가 커질 수도 있을 때를 결정하기 위해 이용될 수도 있다. 동적 트리거가 검출되는지의 여부를 결정하는 것은 여러 방식의 임의의 조합으로 실현될 수도 있다.
일부 양태들에서, 동적 트리거는 미리 설정된 또는 계산된 경과 시간을 포함할 수도 있고 동적 트리거를 검출하는 것은 시간이 경과한 것을 검출하는 것을 포함할 수도 있다. 여러 양태들에서, 시간은 하드웨어 가속기에 의해 오프로딩된 워크로드의 실행을 위한 예상되는 시간 양에 기초하여 미리 설정되거나 또는 계산될 수도 있다. 오프로딩된 워크로드의 예상되는 실행 시간은 오프로딩된 워크로드의 사이즈 및/또는 복잡성, 전력, 컴퓨팅 전력, 메모리 공간, 통신 대역폭을 포함하는 하드웨어 가속기의 리소스 이용 및/또는 하드웨어 가속기의 및/또는 가속기에 대한 이용가능성 및/또는 온도를 포함하는 환경 팩터를 포함하는 여러 팩터들에 의존할 수도 있다. 여러 양태들에서, 시간은 I/O 코히어런트 모드와 비-I/O 코히어런트 모드 사이에서 즉각적인 스위칭을 트리거하기 위해 단순 값, 이를 테면, 영 (0) 으로서 미리 설정되거나 또는 계산될 수도 있다.
일부 양태들에서, 동적 트리거는 프로세싱 디바이스가 아이들 상태로 트랜지션하고/하거나 아이들 상태에 있는 것을 감지하는 것을 포함할 수도 있다. 프로세싱 디바이스가 작업을 모두 소진하고 하드웨어 가속기가 오프로딩된 워크로드를 완료하는 것을 대기하고 있기 때문에, 아이들 상태는 하드웨어 가속기가 예상된 것보다 더 느리게 오프로딩된 워크로드를 실행할 수도 있음을 표시할 수도 있다. 워크로드들을 오프로딩하는 목적은 워크로드들을 실행하기 위해 컴퓨팅 리소스들을 효율적으로 이용하는 것이다. 따라서, 프로세싱 디바이스가 아이들 상태로 트랜지션하고/하거나 아이들 상태에 있는 것은 컴퓨팅 리소스들의 비효율적인 이용을 표시할 수도 있다.
일부 양태들에서, 동적 트리거는 오프로딩된 워크로드의 실행이 I/O 코히어런트 경로를 이용하는 것을 겪고 있다는 표시자들을 포함할 수도 있다. 오프로딩된 워크로드 문제는 여러 메트릭들에 기초하여 검출될 수도 있다. 증강된 워크로드들은 드라이버에게 성능을 통지할 수도 있다. 테스트 또는 랜덤 테스트를 통한 워크로드 분류에 기초한 방법 또는 정적 배정의 이용은 워크로드 문제를 표시하는 신호들 또는 표준 타임-아웃들로 이어질 수도 있다. 하드웨어 성능 레지스터들을 폴링하는 것은 워크로드 문제를 표시하는 데이터를 제공할 수도 있다. 지속적으로 높은 상호접속 동작 레벨들, 이를 테면, 대역폭 및/또는 중요한 트랜잭션들이 최대값 근방이면 스로틀링을 표시할 수도 있다. 하이 가속기 메모리 레이턴시는 레이턴시 제약들을 표시할 수도 있다. 하이 가속기 메모리 배압은 대역폭 스로틀링을 표시할 수도 있다. 하이 점유도 메모리 요청 큐들과 연계한 메모리에 기인한 하이 가속기 아이들은 대역폭이 제한됨을 표시할 수도 있다.
I/O 코히어런트 모드와 비-I/O 코히어런트 모드 사이의 스위칭을 위한 동적 트리거가 검출되지 않는다고 결정하는 것 (즉, 결정 블록 1308 = "아니오") 에 응답하여, 결정 블록 1306 에서 프로세싱 디바이스는 오프로딩된 워크로드가 하드웨어 가속기에 의해 완료되는지의 여부를 결정할 수도 있다.
I/O 코히어런트 모드와 비-I/O 코히어런트 모드 사이의 스위칭을 위한 동적 트리거가 검출된다고 결정하는 것 (즉, 결정 블록 1308 = "예") 에 응답하여, 블록 1310 에서 프로세싱 디바이스는 지연된 프로세싱 디바이스 캐시 메인터넌스를 실행할 수도 있다. 본원에 논의된 바와 같이, I/O 코히어런트 모드로부터 비-I/O 코히어런트 모드로의 스위칭을 준비함에 있어, 프로세싱 디바이스는 프로세싱 디바이스 캐시에 대한 캐시 플러시 메인터넌스 동작을 실행할 수도 있다. 블록 1310 에서 프로세싱 디바이스가 캐시 플러시 메인터넌스 동작을 실행하는 동안 하드웨어 가속기는 오프로딩된 워크로드를 실행하는 것을 계속할 수도 있다.
결정 블록 1312 에서, 프로세싱 디바이스는 오프로딩된 워크로드가 하드웨어 가속기에 의해 완료되는지의 여부를 결정할 수도 있다.
오프로딩된 워크로드가 하드웨어 가속기에 의해 완료된다고 결정하는 것 (즉, 결정 블록 1312 = "예") 에 응답하여, 프로세싱 디바이스는 블록 1318 에서 하드웨어 가속기로부터 오프로딩된 워크로드의 실행의 결과들을 수신할 수도 있다. I/O 코히어런트 모드에서의 오프로딩된 워크로드의 완전한 실행의 완료는 캐시 메인터넌스 동작들이 데이터의 코히어런시를 관리하는 코히어런트 상호접속부의 I/O 코히어런트 메카니즘들의 결과로서 불필요함을 의미할 수도 있다. 캐시 플러시 메인터넌스 동작이 이미 실행될 수 있었지만, I/O 코히어런트 모드에 있는 오프로딩된 워크로드의 실행과 병행하는 캐시 플러시 메인터넌스 동작들의 실행에 기인하여, 캐시 플러시 메인터넌스 동작의 실행에 의해 추가적인 오버헤드가 발생되지 않을 수도 있다.
오프로딩된 워크로드가 하드웨어 가속기에 의해 완료되지 않는다고 결정하는 것 (즉, 결정 블록 1312 = "아니오") 에 응답하여, 프로세싱 디바이스는 블록 1314 에서 코히어런트 상호접속부를 비-하이브리드 I/O 코히어런트 기록 모드로부터 하이브리드 I/O 코히어런트 기록 모드로 스위칭할 수도 있다. 블록 1314 에서 비-하이브리드 I/O 코히어런트 기록 모드로부터 하이브리드 I/O 코히어런트 기록 모드로의 스위칭은 하이브리드 I/O 코히어런트 기록 모드의 상태를 "on" 으로 설정하는 것 또는 비-하이브리드 I/O 코히어런트 기록 모드의 상태를 "off" 로 설정하는 것을 포함할 수도 있다. 비-하이브리드 I/O 코히어런트 기록 모드로부터 하이브리드 I/O 코히어런트 기록 모드로의 스위칭은 도 3b 및 도 3c 및 도 8 내지 도 12 를 참조하여 본원에 추가로 설명된 코히어런트 상호접속부 및 코히어런시 도메인을 통한 I/O 코히어런트 기록 데이터 및 I/O 코히어런트 기록 요청들의 라우팅을 변경할 수도 있다.
블록 1316 에서, 코히어런트 상호접속부가 본원에 추가 설명된 바와 같이 하이브리드 I/O 코히어런트 기록 모드에 있는 동안 하드웨어 가속기는 오프로딩된 워크로드를 계속 실행할 수도 있다.
도 14 는 일 양태에 따라 하이브리드 I/O 코히어런트 기록을 갖는 I/O 코히어런트 및/또는 동적 I/O 코히어런트 워크로드 프로세싱을 구현하기 위한 방법 (1400) 을 예시한다. 방법 (1400) 은 컴퓨팅 디바이스에서, 프로세서 (예를 들어, 도 1 및 도 2 의 프로세서 (14) 및 도 3 내지 도 7 에서의 프로세싱 디바이스 (302) 에서 실행하는 소프트웨어에서, 범용 하드웨어에서, 전용 하드웨어에서, 또는 소프트웨어 구성된 프로세서 및 전용 하드웨어의 조합에서, 이를 테면, 다른 개별 컴포넌트들을 포함하는 동적 I/O 코히어런시 시스템 (예를 들어, 도 3a 내지 도 3c) 내의 프로세서 실행 소프트웨어에서 구현될 수도 있다. 여러 양태들에서 실행되는 대안의 구성들을 수반하기 위하여, 방법 (1400) 을 구현하는 하드웨어는 "프로세싱 디바이스"로서 본원에서 지칭된다. 여러 양태들에서, 방법 (1400) 은 하이브리드 I/O 코히어런트 기록을 갖는 I/O 코히이런트 워크로드 프로세싱을 구현하는 단독 방법일 수도 있고 하이브리드 I/O 코히이런트 기록을 갖는 동적 I/O 코히어런트 워크로드 프로세싱을 구현하기 위한 방법 (1300) 의 블록들 1314 및 1316 을 추가로 기술할 수도 있다.
블록 1402 에서, 프로세싱 디바이스는 코히어런트 상호접속부 (예를 들어, 도 3a 내지 도 3c 에서의 코히어런트 상호접속부 (312)) 에 대해 하이브리드 I/O 코히어런트 기록 모드를 "on" 으로 설정할 수도 있다. 대안적으로, 프로세싱 디바이스는 코히어런트 상호접속부에 대해 비-하이브리드 I/O 코히어런트 기록 모드를 "off" 로 설정할 수도 있다.
블록 1404 에서, 하이브리드 I/O 코히어런트 기록을 갖는 I/O 코히이런트 워크로드 프로세싱을 구현하기 위하여 프로세싱 디바이스는 하이브리드 I/O 코히어런트 기록 모드를 이용하여 하드웨어 가속기 (예를 들어, 도 3a 내지 도 3c 에서의 GPU (306a), DSP (306b), 및 커스텀 하드웨어 가속기 (306c), 및 도 4 내지 도 7 에서의 하드웨어 가속기 (306)) 상에서의 오프로딩된 워크로드 실행을 론칭할 수도 있다. 본원에 논의된 바와 같이, 실행을 론칭하는 것은 I/O 코히어런트 모드를 이용할 때 프로세싱 디바이스로부터 하드웨어 가속기로 데이터를 송신하는 것에 대해 어떠한 오버헤드도 발생되지 않을 수도 있기 때문에 하드웨어 가속기에 대한 워크로드의 오프로딩에 대해 즉각적일 수도 있다. 블록 1404 에서, 하이브리드 I/O 코히어런트 기록을 갖는 동적 I/O 코히이런트 워크로드 프로세싱을 구현하기 위하여, 하이브리드 I/O 코히어런트 기록 모드가 코히어런트 상호접속부에 대해 인에이블되는 동안, 하드웨어 가속기는 나머지 오프로딩된 워크로드를 실행할 수도 있다.
결정 블록 1406 에서, 프로세싱 디바이스는 나머지 오프로딩된 워크로드가 하드웨어 가속기에 의해 완료되는지의 여부를 결정할 수도 있다.
오프로딩된 워크로드가 하드웨어 가속기에 의해 완료되지 않는다고 결정하는 것 (즉, 결정 블록 1406 = "아니오") 에 응답하여, 프로세싱 디바이스는 블록 1406 에서 하드웨어 가속기에 의해 나머지 오프로딩된 워크로드가 완료되었는지의 여부를 계속해서 결정할 수도 있다. 오프로딩된 워크로드가 하드웨어 가속기에 의해 완료되지 않지만, 하드웨어 가속기는 블록 1404 에서 나머지 오프로딩된 워크로드를 실행하는 것을 계속할 수도 있다. 하드웨어 가속기에 의한 나머지 오프로딩된 워크로드의 실행 동안, 코히어런트 상호접속부는 하이브리드 I/O 코히어런트 기록 모드로 스위칭하였기 때문에, 나머지 워크로드는 더 이상 오버헤드를 발생시키지 않을 수도 있거나 코히어런시 상호접속부의 코히어런시 메카니즘들 (예를 들어, 도 3a 내지 도 3c 에서의 코히어런시 도메인 (314)) 을 우회하도록 I/O 코히어런시 기록 데이터를 라우팅하는 것에 기인하는 만큼의 오버헤드를 발생시킬 수도 있다.
오프로딩된 워크로드가 하드웨어 가속기에 의해 완료된다고 결정하는 것 (즉, 결정 블록 1406 = "예") 에 응답하여, 프로세싱 디바이스는 블록 1408 에서 오프로딩된 워크로드 결과들을 수신할 수도 있다. 프로세싱 디바이스는 프로세싱 디바이스 캐시에, 오프로딩된 워크로드의 실행의 결과들을 수신하여 저장할 수도 있다. 본원에 논의된 바와 같이, 하이브리드 I/O 코히어런시 기록 요청에 대하여 실행된 코히어런시 동작들은 프로세싱 디바이스에 의한 출력에 오프로딩된 워크로드 결과들이 이용가능하게 되도록 하기 위해 무효화 캐시 메인터넌스 동작들을 포함하는 추가의 메모리 메인터넌스 동작들을 실행할 필요성을 제거할 수도 있다.
(도 1 내지 도 14 를 참조하여 상기 설명된 양태들을 포함한, 하지만 이에 제한되지 않는) 다양한 양태들은 모바일 컴퓨팅 디바이스들을 포함한 매우 다양한 컴퓨팅 시스템들에서 구현될 수도 있으며, 다양한 양태들과의 이용에 적합한 그 예는 도 15 에 예시된다. 모바일 컴퓨팅 디바이스 (1500) 는 터치스크린 제어기 (1504) 및 내부 메모리 (1506) 에 커플링된 프로세서 (1502) 를 포함할 수도 있다. 프로세서 (1502) 는 일반 또는 특정 프로세싱 태스크들을 위해 지정된 하나 이상의 멀티코어 집적 회로들일 수도 있다. 내부 메모리 (1506) 는 휘발성 또는 비휘발성 메모리일 수도 있으며, 또한 보안 및/또는 암호화된 메모리, 또는 미보안 및/또는 미-암호화된 메모리, 또는 이들의 임의의 조합일 수도 있다. 레버리징될 수 있는 메모리 유형들의 예들은 DDR, LPDDR, GDDR, WIDEIO, RAM, SRAM, DRAM, P-RAM, R-RAM, M-RAM, STT-RAM 및 임베디드 DRAM 을 포함하지만 이에 제한되지 않는다. 터치스크린 제어기 (1504) 및 프로세서 (1502) 는 또한, 저항 감지 터치스크린, 용량 감지 터치스크린, 적외선 감지 터치스크린 등과 같은 터치스크린 패널 (1512) 에 커플링될 수도 있다. 부가적으로, 컴퓨팅 디바이스 (1500) 의 디스플레이는 터치 스크린 능력을 가질 필요는 없다.
모바일 컴퓨팅 디바이스 (1500) 는, 서로에 및/또는 프로세서 (1502) 에 커플링된, 통신물들을 전송 및 수신하기 위한 하나 이상의 무선 신호 트랜시버들 (1508) (예를 들어, 피넛, 블루투스, 지그비, Wi-Fi, RF 라디오 등) 및 안테나들 (1510) 을 가질 수도 있다. 트랜시버들 (1508) 및 안테나들 (1510) 은 상기 언급된 회로부와 함께 사용되어 다양한 무선 송신 프로토콜 스택들 및 인터페이스들을 구현할 수도 있다. 모바일 컴퓨팅 디바이스 (1500) 는, 셀룰러 네트워크를 통해 통신을 가능케 하고 프로세서에 커플링된 셀룰러 네트워크 무선 모뎀 칩 (1516) 을 포함할 수도 있다.
모바일 컴퓨팅 디바이스 (1500) 는, 프로세서 (1502) 에 커플링된 주변기기 디바이스 접속 인터페이스 (1518) 를 포함할 수도 있다. 주변기기 디바이스 접속 인터페이스 (1518) 는 일 유형의 커넥션을 수용하도록 단수로 구성될 수도 있거나, 또는 범용 직렬 버스 (USB), 파이어와이어, 썬더볼트, 또는 PCIe 와 같이 공통의 또는 독점적인 다양한 유형들의 물리 및 통신 커넥션들을 수용하도록 구성될 수도 있다. 주변기기 디바이스 접속 인터페이스 (1518) 는 또한, 유사하게 구성된 주변기기 디바이스 접속 포트 (도시 안됨) 에 커플링될 수도 있다.
모바일 컴퓨팅 디바이스 (1500) 는 또한, 오디오 출력들을 제공하기 위한 스피커들 (1514) 을 포함할 수도 있다. 모바일 컴퓨팅 디바이스 (1500) 는 또한, 본 명세서에서 설명된 컴포넌트들의 모두 또는 그 일부를 포함하기 위한 플라스틱, 금속, 또는 재료들의 조합으로 구성된 하우징 (1520) 을 포함할 수도 있다. 모바일 컴퓨팅 디바이스 (1500) 는 처분가능 또는 재충전가능 배터리와 같이 프로세서 (1502) 에 커플링된 전력 소스 (1522) 를 포함할 수도 있다. 재충전가능 배터리는 또한, 모바일 컴퓨팅 디바이스 (1500) 외부의 소스로부터 충전 전류를 수신하기 위해 주변기기 디바이스 접속 포트에 커플링될 수도 있다. 모바일 컴퓨팅 디바이스 (1500) 는 또한, 사용자 입력들을 수신하기 위한 물리적 버튼 (1524) 을 포함할 수도 있다. 모바일 컴퓨팅 디바이스 (1500) 는 또한, 모바일 컴퓨팅 디바이스 (1500) 를 턴온 및 턴오프하기 위한 파워 버튼 (1526) 을 포함할 수도 있다.
(도 1 내지 도 15 를 참조하여 상기 설명된 양태들을 포함한, 하지만 이에 제한되지 않는) 다양한 양태들은 랩탑 컴퓨터 (1600) 를 포함한 매우 다양한 컴퓨팅 시스템들에서 구현될 수도 있으며, 그 예는 도 16 에 예시된다. 다수의 랩탑 컴퓨터들은, 컴퓨터의 포인팅 디바이스로서 기능하고 따라서 터치 스크린 디스플레이가 장비되고 상기 설명된 컴퓨팅 디바이스들 상에 구현된 것들과 유사한 드래그, 스크롤, 및 플릭 제스처들을 수용할 수도 있는 터치패드 터치 표면 (1617) 을 포함한다. 랩탑 컴퓨터 (1600) 는 통상적으로, 휘발성 메모리 (1612) 및 플래시 메모리의 디스크 드라이브 (1613) 와 같은 대용량 비휘발성 메모리에 커플링된 프로세서 (1611) 를 포함할 것이다. 부가적으로, 컴퓨터 (1600) 는 프로세서 (1611) 에 커플링된 셀룰러 전화 트랜시버 (1616) 및/또는 무선 데이터 링크에 접속될 수도 있는 전자기 방사를 전송 및 수신하기 위한 하나 이상의 안테나 (1608) 를 가질 수도 있다. 컴퓨터 (1600) 는 또한, 프로세서 (1611) 에 커플링된 플로피 디스크 드라이브 (1614) 및 컴팩트 디스크 (CD) 드라이브 (1615) 를 포함할 수도 있다. 노트북 구성에 있어서, 컴퓨터 하우징은, 모두가 프로세서 (1611) 에 커플링된 터치 패드 (1617), 키보드 (1618), 및 디스플레이 (1619) 를 포함한다. 컴퓨팅 디바이스의 다른 구성들은 널리 공지된 바와 같이 (예를 들어, USB 입력을 통해) 프로세서에 커플링된 컴퓨터 마우스 또는 트랙볼을 포함할 수도 있으며, 이는 또한 다양한 양태들과 함께 사용될 수도 있다.
(도 1 내지 도 14 를 참조하여 상기 설명된 양태들을 포함한, 하지만 이에 제한되지 않는) 다양한 양태들은 또한, 임의의 다양한 상업적으로 입수가능한 서버들과 같은 고정된 컴퓨팅 시스템들에서 구현될 수도 있다. 예시적인 서버 (1700) 가 도 17 에 예시된다. 그러한 서버 (1700) 는 통상적으로, 휘발성 메모리 (1702) 및 디스크 드라이브 (1704) 와 같은 대용량 비휘발성 메모리에 커플링된 하나 이상의 멀티코어 프로세서 어셈블리들 (1701) 을 포함한다. 도 17 에 예시된 바와 같이, 멀티코어 프로세서 어셈블리들 (1701) 은 어셈블리의 랙들에 이들을 삽입함으로써 서버 (1700) 에 부가될 수도 있다. 서버 (1700) 는 또한, 프로세서 (1701) 에 커플링된 플로피 디스크 드라이브, 컴팩트 디스크 (CD) 또는 디지털 다기능 디스크 (DVD) 디스크 드라이브 (1706) 를 포함할 수도 있다. 서버 (1700) 는 또한, 다른 브로드캐스트 시스템 컴퓨터들 및 서버들에 커플링된 로컬 영역 네트워크, 인터넷, 공중 스위칭 전화 네트워크, 및/또는 셀룰러 데이터 네트워크 (예를 들어, CDMA, TDMA, GSM, PCS, 3G, 4G, LTE, 또는 임의의 다른 유형의 셀룰러 데이터 네트워크) 와 같은 네트워크 (1705) 와 네트워크 인터페이스 접속들을 확립하기 위해 멀티코어 프로세서 어셈블리들 (1701) 에 커플링된 네트워크 액세스 포트들 (1703) 을 포함할 수도 있다.
다양한 양태들의 동작들을 실행하기 위한 프로그래밍가능 프로세서 상에서의 실행을 위한 컴퓨터 프로그램 코드 또는 "프로그램 코드" 는 C, C++, C#, 스몰토크, 자바, 자바스크립트, 비주얼 베이직, 구조화된 쿼리 언어 (예를 들어, 트랜잭트-SQL), 펄과 같은 하이 레벨 프로그래밍 언어로, 또는 다양한 다른 프로그래밍 언어들로 기입될 수도 있다. 본 출원에서 사용된 바와 같은 컴퓨터 판독가능 저장 매체 상에 저장된 프로그램 코드 또는 프로그램들은, 그 포맷이 프로세서에 의해 이해가능한 기계어 코드 (예컨대, 오브젝트 코드) 를 참조할 수도 있다.
전술한 방법 설명들 및 프로세스 플로우 다이어그램들은 단지 예시적인 예들로서 제공될 뿐이고, 다양한 양태들의 동작들이 제시된 순서로 수행되어야만 함을 요구 또는 의미하도록 의도되지 않는다. 당업자에 의해 인식될 바와 같이, 전술한 양태들에 있어서의 동작들의 순서는 임의의 순서로 수행될 수도 있다. "그 이후", "그 후", "다음" 등과 같은 단어들은 동작들의 순서를 제한하도록 의도되지 않으며; 이들 단어들은 방법들의 설명을 통해 독자를 안내하도록 단순히 사용된다. 추가로, 예를 들어, 관사들 ("a," "an" 또는 "the") 을 사용하여 단수로의 청구항 엘리먼트들에 대한 임의의 참조는 그 엘리먼트를 단수로 제한하는 것으로서 해석되지는 않는다.
다양한 양태들과 관련하여 설명된 다양한 예시적인 논리 블록들, 모듈들, 회로들, 및 알고리즘 동작들은 전자 하드웨어, 컴퓨터 소프트웨어, 또는 이들 양자의 조합으로서 구현될 수도 있다. 하드웨어와 소프트웨어의 이러한 상호 대체 가능성을 분명히 예시하기 위하여, 다양한 예시적인 컴포넌트들, 블록들, 모듈들, 회로들 및 동작들이 일반적으로 그들의 기능의 관점에서 상기 기술되었다. 그러한 기능이 하드웨어로서 구현될지 또는 소프트웨어로서 구현될지는 전체 시스템에 부과된 설계 제약들 및 특정 어플리케이션에 의존한다. 당업자는 설명된 기능을 각각의 특정 어플리케이션에 대하여 다양한 방식으로 구현할 수도 있지만, 그러한 구현의 결정들이 청구항들의 범위로부터의 일탈을 야기하는 것으로서 해석되지는 않아야 한다.
본 명세서에 개시된 양태들과 관련하여 설명된 다양한 예시적인 로직들, 논리 블록들, 모듈들, 및 회로들을 구현하는데 사용되는 하드웨어는 범용 프로세서, 디지털 신호 프로세서 (DSP), 주문형 집적 회로 (ASIC), 필드 프로그래밍가능 게이트 어레이 (FPGA) 또는 다른 프로그래밍가능 로직 디바이스, 이산 게이트 또는 트랜지스터 로직, 이산 하드웨어 컴포넌트들, 또는 본 명세서에서 설명된 기능들을 수행하도록 설계되는 이들의 임의의 조합으로 구현 또는 수행될 수도 있다. 범용 프로세서는 마이크로프로세서일 수도 있지만, 대안적으로, 그 프로세서는 임의의 종래의 프로세서, 제어기, 마이크로 제어기, 또는 상태 머신일 수도 있다. 프로세서는 또한, 컴퓨팅 디바이스들의 조합, 예를 들어, DSP 와 마이크로프로세서의 조합, 복수의 마이크로프로세서들, DSP 코어와 결합된 하나 이상의 마이크로프로세서들, 또는 임의의 기타 다른 구성물로서 구현될 수도 있다. 대안적으로, 일부 동작들 또는 방법들은, 소정의 기능에 특정한 회로부에 의해 수행될 수도 있다.
하나 이상의 양태들에 있어서, 설명된 기능들은 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 임의의 조합에서 구현될 수도 있다. 소프트웨어에서 구현된다면, 그 기능들은 하나 이상의 명령들 또는 코드로서 비일시적인 컴퓨터 판독가능 매체 또는 비일시적인 프로세서 판독가능 매체 상에 저장될 수도 있다. 본 명세서에 개시된 방법 또는 알고리즘의 동작들은, 비일시적인 컴퓨터 판독가능 또는 프로세서 판독가능 저장 매체 상에 상주할 수도 있는 프로세서 실행가능 소프트웨어 모듈에서 구현될 수도 있다. 비일시적인 컴퓨터 판독가능 또는 프로세서 판독가능 저장 매체들은 컴퓨터 또는 프로세서에 의해 액세스될 수도 있는 임의의 저장 매체일 수도 있다. 제한이 아닌 예로서, 그러한 비일시적인 컴퓨터 판독가능 또는 프로세서 판독가능 매체들은 RAM, ROM, EEPROM, 플래시 메모리, CD-ROM 또는 다른 광학 디스크 저장부, 자기 디스크 저장부 또는 다른 자기 저장 디바이스들, 또는 원하는 프로그램 코드를 명령들 또는 데이터 구조들의 형태로 저장하는데 이용될 수도 있고 컴퓨터에 의해 액세스될 수도 있는 임의의 다른 매체를 포함할 수도 있다. 본 명세서에서 사용된 바와 같은 디스크 (disk) 및 디스크 (disc) 는 컴팩트 디스크 (CD), 레이저 디스크, 광학 디스크, 디지털 다기능 디스크 (DVD), 플로피 디스크 및 블루레이 디스크를 포함하며, 여기서, 디스크 (disk) 는 통상적으로 데이터를 자기적으로 재생하지만 디스크 (disc) 는 레이저를 이용하여 데이터를 광학적으로 재생한다. 상기의 조합들이 또한, 비일시적인 컴퓨터 판독가능 및 프로세서 판독가능 매체들의 범위 내에 포함된다. 부가적으로, 방법 또는 알고리즘의 동작들은, 코드들 및/또는 명령들 중 하나 또는 그 임의의 조합 또는 그 세트로서 비일시적인 프로세서 판독가능 매체 및/또는 컴퓨터 판독가능 매체 상에 상주할 수도 있으며, 이들은 컴퓨터 프로그램 제품에 통합될 수도 있다.
개시된 양태들의 전술한 설명은 당업자로 하여금 청구항들을 실시 또는 이용하게 할 수 있도록 제공된다. 이들 양태들에 대한 다양한 수정들은 당업자에게 용이하게 자명할 것이며, 본 명세서에서 정의된 일반적 원리들은 청구항들의 범위로부터 일탈함없이 다른 양태들 및 구현들에 적용될 수도 있다. 따라서, 본 개시는 본 명세서에서 설명된 양태들 및 구현들로 제한되도록 의도되지 않으며, 본 명세서에 개시된 원리들 및 신규한 특징들 및 다음의 청구항들과 부합하는 최광의 범위를 부여받아야 한다.

Claims (30)

  1. 하이브리드 입력/출력 (I/O) 코히어런트 기록 요청을 컴퓨팅 디바이스 상에서 구현하는 방법으로서,
    I/O 코히어런트 기록 요청을 수신하는 단계;
    상기 I/O 코히어런트 기록 요청으로부터 제 1 하이브리드 I/O 코히어런트 기록 요청 및 제 2 하이브리드 I/O 코히어런트 기록 요청을 생성하는 단계;
    상기 I/O 코히어런트 기록 요청의 상기 제 1 하이브리드 I/O 코히어런트 기록 요청 및 I/O 코히어런트 기록 데이터를 공유된 메모리로 전송하는 단계; 및
    상기 I/O 코히어런트 기록 요청의 상기 I/O 코히어런트 기록 데이터 없이 상기 제 2 하이브리드 I/O 코히어런트 기록 요청을 코히어런시 도메인으로 전송하는 단계를 포함하는, 하이브리드 입력/출력 (I/O) 코히어런트 기록 요청을 컴퓨팅 디바이스 상에서 구현하는 방법.
  2. 제 1 항에 있어서,
    하이브리드 I/O 코히어런트 기록 모드가 인에이블되는지의 여부를 결정하는 단계를 더 포함하고,
    상기 I/O 코히어런트 기록 요청으로부터 제 1 하이브리드 I/O 코히어런트 기록 요청 및 제 2 하이브리드 I/O 코히어런트 기록 요청을 생성하는 단계는 상기 하이브리드 I/O 코히어런트 기록 모드가 인에이블된다고 결정하는 것에 응답하여 상기 I/O 코히어런트 기록 요청으로부터 상기 제 1 하이브리드 I/O 코히어런트 기록 요청 및 상기 제 2 하이브리드 I/O 코히어런트 기록 요청을 생성하는 단계를 포함하는, 하이브리드 입력/출력 (I/O) 코히어런트 기록 요청을 컴퓨팅 디바이스 상에서 구현하는 방법.
  3. 제 2 항에 있어서,
    상기 하이브리드 I/O 코히어런트 기록 모드가 인에이블된다고 결정하는 것에 응답하여, 상기 I/O 코히어런트 기록 요청을 하이브리드 I/O 코히어런트 기록 요청으로서 마킹하는 단계를 더 포함하는, 하이브리드 입력/출력 (I/O) 코히어런트 기록 요청을 컴퓨팅 디바이스 상에서 구현하는 방법.
  4. 제 1 항에 있어서,
    상기 공유된 메모리로부터 상기 제 1 하이브리드 I/O 코히어런트 기록 요청의 확인응답을 수신하는 단계; 및
    상기 제 1 하이브리드 I/O 코히어런트 기록 요청의 확인응답을, 상기 I/O 코히어런트 기록 요청을 발행하였던 프로세싱 디바이스로 전송하는 단계를 더 포함하는, 하이브리드 입력/출력 (I/O) 코히어런트 기록 요청을 컴퓨팅 디바이스 상에서 구현하는 방법.
  5. 제 1 항에 있어서,
    상기 코히어런시 도메인에서 상기 제 2 하이브리드 I/O 코히어런트 기록 요청을 수신하는 단계;
    상기 제 2 하이브리드 I/O 코히어런트 기록 요청에 의해 특정된 I/O 코히어런시 기록 데이터의 어드레스에 대한 코히어런시 체크를 실행하는 단계; 및
    상기 공유된 메모리로부터 상기 제 1 하이브리드 I/O 코히어런트 기록 요청의 확인응답을 수신하는 단계를 더 포함하는, 하이브리드 입력/출력 (I/O) 코히어런트 기록 요청을 컴퓨팅 디바이스 상에서 구현하는 방법.
  6. 제 1 항에 있어서,
    코히어런트 상호접속부로부터, 상기 공유된 메모리에서 상기 제 1 하이브리드 I/O 코히어런트 기록 요청 및 상기 I/O 코히어런트 기록 데이터를 수신하는 단계;
    상기 제 1 하이브리드 I/O 코히어런트 기록 요청을 실행하는 단계; 및
    상기 제 1 하이브리드 I/O 코히어런트 기록 요청의 확인응답을 상기 코히어런트 상호접속부로 전송하는 단계를 더 포함하는, 하이브리드 입력/출력 (I/O) 코히어런트 기록 요청을 컴퓨팅 디바이스 상에서 구현하는 방법.
  7. 제 6 항에 있어서,
    상기 코히어런트 상호접속부로부터 상기 코히어런시 도메인에 의해 상기 제 1 하이브리드 I/O 코히어런트 기록 요청의 확인응답을 수신하는 단계; 및
    상기 코히어런트 상호접속부로부터 상기 I/O 코히어런트 기록 요청을 발행하였던 프로세싱 디바이스에 의해 상기 제 1 하이브리드 I/O 코히어런트 기록 요청의 확인응답을 수신하는 단계를 더 포함하는, 하이브리드 입력/출력 (I/O) 코히어런트 기록 요청을 컴퓨팅 디바이스 상에서 구현하는 방법.
  8. 제 1 항에 있어서,
    프로세싱 디바이스에 의해, I/O 코히어런트 모드를 이용하여 실행하기 위한 워크로드를 하드웨어 가속기로 오프로딩하는 단계;
    상기 프로세싱 디바이스에 의해, 상기 워크로드가 상기 하드웨어 가속기에 의해 실행되는 동안 비-하이브리드 I/O 코히어런트 기록 모드로부터 하이브리드 I/O 코히어런트 기록 모드로 코히어런트 상호접속부를 스위칭하기 위한 동적 트리거를 검출하는 단계; 및
    상기 동적 트리거를 검출하는 것에 응답하여 상기 코히어런트 상호접속부를 비-하이브리드 I/O 코히어런트 기록 모드로부터 상기 하이브리드 I/O 코히어런트 기록 모드로 스위칭하는 단계를 더 포함하는, 하이브리드 입력/출력 (I/O) 코히어런트 기록 요청을 컴퓨팅 디바이스 상에서 구현하는 방법.
  9. 컴퓨팅 디바이스로서,
    공유된 메모리;
    프로세싱 디바이스;
    코히어런시 도메인; 및
    상기 공유된 메모리, 상기 프로세싱 디바이스, 및 상기 코히어런시 도메인에 커플링된 코히어런트 상호접속부를 포함하고,
    상기 코히어런트 상호접속부는,
    I/O 코히어런트 기록 요청을 수신하는 것;
    상기 I/O 코히어런트 기록 요청으로부터 제 1 하이브리드 I/O 코히어런트 기록 요청 및 제 2 하이브리드 I/O 코히어런트 기록 요청을 생성하는 것;
    상기 I/O 코히어런트 기록 요청의 상기 제 1 하이브리드 I/O 코히어런트 기록 요청 및 I/O 코히어런트 기록 데이터를 상기 공유된 메모리로 전송하는 것; 및
    상기 I/O 코히어런트 기록 요청의 상기 I/O 코히어런트 기록 데이터 없이 상기 제 2 하이브리드 I/O 코히어런트 기록 요청을 상기 코히어런시 도메인으로 전송하는 것을 포함하는 동작들을 수행하도록 구성되는, 컴퓨팅 디바이스.
  10. 제 9 항에 있어서,
    상기 코히어런트 상호접속부는 하이브리드 I/O 코히어런트 기록 모드가 인에이블되는지의 여부를 결정하는 것을 더 포함하는 동작들을 수행하도록 구성되고,
    상기 코히어런트 상호접속부는, 상기 I/O 코히어런트 기록 요청으로부터 제 1 하이브리드 I/O 코히어런트 기록 요청 및 제 2 하이브리드 I/O 코히어런트 기록 요청을 생성하는 것이 상기 하이브리드 I/O 코히어런트 기록 모드가 인에이블된다고 결정하는 것에 응답하여 상기 I/O 코히어런트 기록 요청으로부터 상기 제 1 하이브리드 I/O 코히어런트 기록 요청 및 상기 제 2 하이브리드 I/O 코히어런트 기록 요청을 생성하는 것을 포함하도록 하는 동작들을 수행하도록 구성되는, 컴퓨팅 디바이스.
  11. 제 10 항에 있어서,
    상기 코히어런트 상호접속부는 상기 하이브리드 I/O 코히어런트 기록 모드가 인에이블된다고 결정하는 것에 응답하여, 상기 I/O 코히어런트 기록 요청을 하이브리드 I/O 코히어런트 기록 요청으로서 마킹하는 것을 더 포함하는 동작들을 수행하도록 구성되는, 컴퓨팅 디바이스.
  12. 제 9 항에 있어서,
    상기 코히어런트 상호접속부는,
    상기 공유된 메모리로부터 상기 제 1 하이브리드 I/O 코히어런트 기록 요청의 확인응답을 수신하는 것; 및
    상기 제 1 하이브리드 I/O 코히어런트 기록 요청의 확인응답을, 상기 I/O 코히어런트 기록 요청을 발행하였던 상기 프로세싱 디바이스로 전송하는 것을 더 포함하는 동작들을 수행하도록 구성되는, 컴퓨팅 디바이스.
  13. 제 9 항에 있어서,
    상기 코히어런시 도메인은,
    상기 제 2 하이브리드 I/O 코히어런트 기록 요청을 수신하는 것; 및
    상기 제 2 하이브리드 I/O 코히어런트 기록 요청에 의해 특정된 I/O 코히어런시 기록 데이터의 어드레스에 대한 코히어런시 체크를 실행하는 것; 및
    상기 공유된 메모리로부터 상기 제 1 하이브리드 I/O 코히어런트 기록 요청의 확인응답을 수신하는 것을 포함하는 동작들을 수행하도록 구성되는, 컴퓨팅 디바이스.
  14. 제 9 항에 있어서,
    상기 공유된 메모리는,
    상기 코히어런트 상호접속부로부터, 상기 제 1 하이브리드 I/O 코히어런트 기록 요청 및 상기 I/O 코히어런트 기록 데이터를 수신하는 것;
    상기 제 1 하이브리드 I/O 코히어런트 기록 요청을 실행하는 것; 및
    상기 제 1 하이브리드 I/O 코히어런트 기록 요청의 확인응답을 상기 코히어런트 상호접속부로 전송하는 것을 포함하는 동작들을 수행하도록 구성되는, 컴퓨팅 디바이스.
  15. 제 14 항에 있어서,
    상기 코히어런시 도메인은,
    상기 코히어런트 상호접속부로부터 상기 제 1 하이브리드 I/O 코히어런트 기록 요청의 확인응답을 수신하는 것을 포함하는 동작들을 수행하도록 구성되고,
    상기 프로세싱 디바이스는,
    상기 코히어런트 상호접속부로부터 상기 제 1 하이브리드 I/O 코히어런트 기록 요청의 확인응답을 수신하는 것으로서, 상기 프로세싱 디바이스가 상기 I/O 코히어런트 기록 요청을 발행한, 상기 확인응답을 수신하는 것을 포함하는 동작들을 수행하도록 구성되는, 컴퓨팅 디바이스.
  16. 제 9 항에 있어서,
    상기 프로세싱 디바이스는 하드웨어 가속기이고, 상기 컴퓨팅 디바이스는 상기 코히어런트 상호접속부에 커플링되는 제 2 프로세싱 디바이스를 더 포함하고,
    상기 제 2 프로세싱 디바이스는,
    I/O 코히어런트 모드를 이용하여 실행하기 위한 워크로드를 상기 하드웨어 가속기로 오프로딩하는 것;
    상기 워크로드가 상기 하드웨어 가속기에 의해 실행되는 동안 코히어런트 상호접속부를 비-하이브리드 I/O 코히어런트 기록 모드로부터 하이브리드 I/O 코히어런트 기록 모드로 스위칭하기 위한 동적 트리거를 검출하는 것; 및
    상기 동적 트리거를 검출하는 것에 응답하여 상기 코히어런트 상호접속부를 비-하이브리드 I/O 코히어런트 기록 모드로부터 상기 하이브리드 I/O 코히어런트 기록 모드로 스위칭하는 것을 포함하는 동작들을 수행하도록 구성되는, 컴퓨팅 디바이스.
  17. 컴퓨팅 디바이스로서,
    공유된 메모리;
    코히어런시 도메인; 및
    I/O 코히어런트 기록 요청을 수신하기 위한 수단;
    상기 I/O 코히어런트 기록 요청으로부터 제 1 하이브리드 I/O 코히어런트 기록 요청 및 제 2 하이브리드 I/O 코히어런트 기록 요청을 생성하기 위한 수단;
    상기 I/O 코히어런트 기록 요청의 상기 제 1 하이브리드 I/O 코히어런트 기록 요청 및 I/O 코히어런트 기록 데이터를 상기 공유된 메모리로 전송하기 위한 수단; 및
    상기 I/O 코히어런트 기록 요청의 I/O 코히어런트 기록 데이터 없이 상기 제 2 하이브리드 I/O 코히어런트 기록 요청을 상기 코히어런시 도메인으로 전송하기 위한 수단을 포함하는, 컴퓨팅 디바이스.
  18. 제 17 항에 있어서,
    하이브리드 I/O 코히어런트 기록 모드가 인에이블되는지의 여부를 결정하기 위한 수단을 더 포함하고,
    상기 I/O 코히어런트 기록 요청으로부터 제 1 하이브리드 I/O 코히어런트 기록 요청 및 제 2 하이브리드 I/O 코히어런트 기록 요청을 생성하기 위한 수단은 상기 하이브리드 I/O 코히어런트 기록 모드가 인에이블된다고 결정하는 것에 응답하여 상기 I/O 코히어런트 기록 요청으로부터 상기 제 1 하이브리드 I/O 코히어런트 기록 요청 및 상기 제 2 하이브리드 I/O 코히어런트 기록 요청을 생성하기 위한 수단을 포함하는, 컴퓨팅 디바이스.
  19. 제 18 항에 있어서,
    상기 하이브리드 I/O 코히어런트 기록 모드가 인에이블된다고 결정하는 것에 응답하여, 상기 I/O 코히어런트 기록 요청을 하이브리드 I/O 코히어런트 기록 요청으로서 마킹하기 위한 수단을 더 포함하는, 컴퓨팅 디바이스.
  20. 제 17 항에 있어서,
    상기 공유된 메모리로부터 상기 제 1 하이브리드 I/O 코히어런트 기록 요청의 확인응답을 수신하기 위한 수단; 및
    상기 제 1 하이브리드 I/O 코히어런트 기록 요청의 확인응답을, 상기 I/O 코히어런트 기록 요청을 발행하였던 프로세싱 디바이스로 전송하기 위한 수단을 더 포함하는, 컴퓨팅 디바이스.
  21. 제 17 항에 있어서,
    상기 코히어런시 도메인에서 상기 제 2 하이브리드 I/O 코히어런트 기록 요청을 수신하기 위한 수단;
    상기 제 2 하이브리드 I/O 코히어런트 기록 요청에 의해 특정된 I/O 코히어런시 기록 데이터의 어드레스에 대한 코히어런시 체크를 실행하기 위한 수단; 및
    상기 공유된 메모리로부터 상기 제 1 하이브리드 I/O 코히어런트 기록 요청의 확인응답을 수신하기 위한 수단을 더 포함하는, 컴퓨팅 디바이스.
  22. 제 17 항에 있어서,
    코히어런트 상호접속부로부터, 상기 공유된 메모리에서 상기 제 1 하이브리드 I/O 코히어런트 기록 요청 및 상기 I/O 코히어런트 기록 데이터를 수신하기 위한 수단;
    상기 제 1 하이브리드 I/O 코히어런트 기록 요청을 실행하기 위한 수단; 및
    상기 제 1 하이브리드 I/O 코히어런트 기록 요청의 확인응답을 상기 코히어런트 상호접속부로 전송하기 위한 수단을 더 포함하는, 컴퓨팅 디바이스.
  23. 제 22 항에 있어서,
    상기 코히어런트 상호접속부로부터 상기 코히어런시 도메인에 의해 상기 제 1 하이브리드 I/O 코히어런트 기록 요청의 확인응답을 수신하기 위한 수단; 및
    상기 코히어런트 상호접속부로부터 상기 I/O 코히어런트 기록 요청을 발행하였던 프로세싱 디바이스에 의해 상기 제 1 하이브리드 I/O 코히어런트 기록 요청의 확인응답을 수신하기 위한 수단을 더 포함하는, 컴퓨팅 디바이스.
  24. 프로세서 실행가능 명령들을 저장한 비일시적 프로세서 판독가능 저장 매체로서,
    상기 프로세서 실행가능 명령들은 컴퓨팅 디바이스의 프로세싱 디바이스로 하여금,
    I/O 코히어런트 기록 요청을 수신하는 것;
    상기 I/O 코히어런트 기록 요청으로부터 제 1 하이브리드 I/O 코히어런트 기록 요청 및 제 2 하이브리드 I/O 코히어런트 기록 요청을 생성하는 것;
    상기 I/O 코히어런트 기록 요청의 상기 제 1 하이브리드 I/O 코히어런트 기록 요청 및 I/O 코히어런트 기록 데이터를 공유된 메모리로 전송하는 것; 및
    상기 I/O 코히어런트 기록 요청의 I/O 코히어런트 기록 데이터 없이 상기 제 2 하이브리드 I/O 코히어런트 기록 요청을 코히어런시 도메인으로 전송하는 것을 포함하는 동작들을 수행하게 하도록 구성되는, 프로세서 실행가능 명령들을 저장한 비일시적 프로세서 판독가능 저장 매체.
  25. 제 24 항에 있어서,
    저장된 상기 실행가능 명령들은 상기 컴퓨팅 디바이스의 프로세싱 디바이스로 하여금, 하이브리드 I/O 코히어런트 기록 모드가 인에이블되는지의 여부를 결정하는 것을 더 포함하는 동작들을 수행하게 하도록 구성되고,
    상기 I/O 코히어런트 기록 요청으로부터 제 1 하이브리드 I/O 코히어런트 기록 요청 및 제 2 하이브리드 I/O 코히어런트 기록 요청을 생성하는 것은 상기 하이브리드 I/O 코히어런트 기록 모드가 인에이블된다고 결정하는 것에 응답하여 상기 I/O 코히어런트 기록 요청으로부터 상기 제 1 하이브리드 I/O 코히어런트 기록 요청 및 상기 제 2 하이브리드 I/O 코히어런트 기록 요청을 생성하는 것을 포함하는, 프로세서 실행가능 명령들을 저장한 비일시적 프로세서 판독가능 저장 매체.
  26. 제 25 항에 있어서,
    상기 저장된 실행가능 명령들은 상기 컴퓨팅 디바이스의 프로세싱 디바이스로 하여금, 상기 하이브리드 I/O 코히어런트 기록 모드가 인에이블된다고 결정하는 것에 응답하여, 상기 I/O 코히어런트 기록 요청을 하이브리드 I/O 코히어런트 기록 요청으로서 마킹하는 것을 더 포함하는 동작들을 수행하게 하도록 구성되는, 프로세서 실행가능 명령들을 저장한 비일시적 프로세서 판독가능 저장 매체.
  27. 제 24 항에 있어서,
    저장된 상기 실행가능 명령들은 상기 컴퓨팅 디바이스의 프로세싱 디바이스로 하여금,
    상기 공유된 메모리로부터 상기 제 1 하이브리드 I/O 코히어런트 기록 요청의 확인응답을 수신하는 것; 및
    상기 제 1 하이브리드 I/O 코히어런트 기록 요청의 확인응답을, 상기 I/O 코히어런트 기록 요청을 발행하였던 제 2 프로세싱 디바이스로 전송하는 것을 더 포함하는 동작들을 수행하게 하도록 구성되는, 프로세서 실행가능 명령들을 저장한 비일시적 프로세서 판독가능 저장 매체.
  28. 제 24 항에 있어서,
    저장된 상기 실행가능 명령들은 상기 컴퓨팅 디바이스의 프로세싱 디바이스로 하여금,
    상기 제 2 하이브리드 I/O 코히어런트 기록 요청을 수신하는 것; 및
    상기 제 2 하이브리드 I/O 코히어런트 기록 요청에 의해 특정된 I/O 코히어런시 기록 데이터의 어드레스에 대한 코히어런시 체크를 실행하는 것; 및
    상기 공유된 메모리로부터 상기 제 1 하이브리드 I/O 코히어런트 기록 요청의 확인응답을 수신하는 것을 더 포함하는 동작들을 수행하게 하도록 구성되는, 프로세서 실행가능 명령들을 저장한 비일시적 프로세서 판독가능 저장 매체.
  29. 제 24 항에 있어서,
    저장된 상기 실행가능 명령들은 상기 컴퓨팅 디바이스의 프로세싱 디바이스로 하여금,
    코히어런트 상호접속부로부터, 상기 제 1 하이브리드 I/O 코히어런트 기록 요청 및 상기 I/O 코히어런트 기록 데이터를 수신하는 것;
    상기 제 1 하이브리드 I/O 코히어런트 기록 요청을 실행하는 것; 및
    상기 제 1 하이브리드 I/O 코히어런트 기록 요청의 확인응답을 상기 코히어런트 상호접속부로 전송하는 것을 더 포함하는 동작들을 수행하게 하도록 구성되는, 프로세서 실행가능 명령들을 저장한 비일시적 프로세서 판독가능 저장 매체.
  30. 제 29 항에 있어서,
    저장된 상기 실행가능 명령들은 상기 컴퓨팅 디바이스의 프로세싱 디바이스로 하여금,
    상기 코히어런트 상호접속부로부터 상기 제 1 하이브리드 I/O 코히어런트 기록 요청의 확인응답을 수신하는 것; 및
    상기 제 1 하이브리드 I/O 코히어런트 기록 요청의 확인응답을 수신하는 것으로서, 상기 프로세싱 디바이스가 상기 코히어런트 상호접속부로부터 상기 I/O 코히어런트 기록 요청을 발행하는, 상기 제 1 하이브리드 I/O 코히어런트 기록 요청의 확인응답을 수신하는 것을 더 포함하는 동작들을 수행하게 하도록 구성되는, 프로세서 실행가능 명령들을 저장한 비일시적 프로세서 판독가능 저장 매체.
KR1020197007701A 2016-09-19 2017-08-22 하이브리드 입력/출력 코히어런트 기록 KR102008131B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/268,791 US10248565B2 (en) 2016-09-19 2016-09-19 Hybrid input/output coherent write
US15/268,791 2016-09-19
PCT/US2017/047982 WO2018052671A1 (en) 2016-09-19 2017-08-22 Hybrid input/output coherent write

Publications (2)

Publication Number Publication Date
KR20190049735A true KR20190049735A (ko) 2019-05-09
KR102008131B1 KR102008131B1 (ko) 2019-10-21

Family

ID=59762089

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020197007701A KR102008131B1 (ko) 2016-09-19 2017-08-22 하이브리드 입력/출력 코히어런트 기록

Country Status (7)

Country Link
US (1) US10248565B2 (ko)
EP (1) EP3516524A1 (ko)
JP (1) JP6665346B2 (ko)
KR (1) KR102008131B1 (ko)
CN (1) CN109690501A (ko)
BR (1) BR112019004930A2 (ko)
WO (1) WO2018052671A1 (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10817462B1 (en) * 2019-04-26 2020-10-27 Xilinx, Inc. Machine learning model updates to ML accelerators
US20200133649A1 (en) * 2019-12-23 2020-04-30 Intel Corporation Processor controlled programmable logic device modification

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040117561A1 (en) * 2002-12-17 2004-06-17 Quach Tuan M. Snoop filter bypass
US20140040552A1 (en) * 2012-08-06 2014-02-06 Qualcomm Incorporated Multi-core compute cache coherency with a release consistency memory ordering model
US20170091092A1 (en) * 2015-09-30 2017-03-30 Samsung Electronics Co., Ltd. Coherent interconnect for managing snoop operation and data processing apparatus including the same

Family Cites Families (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5842038A (en) * 1996-10-10 1998-11-24 Unisys Corporation Optimized input/output memory access request system and method
JP2001522090A (ja) 1997-11-05 2001-11-13 ユニシス コーポレーション ディレクトリベースのキャッシュコヒーレンスシステム
US6711632B1 (en) 1998-08-11 2004-03-23 Ncr Corporation Method and apparatus for write-back caching with minimal interrupts
US6925537B2 (en) 2001-06-11 2005-08-02 Hewlett-Packard Development Company, L.P. Multiprocessor cache coherence system and method in which processor nodes and input/output nodes are equal participants
US7627721B2 (en) 2002-10-08 2009-12-01 Rmi Corporation Advanced processor with cache coherency
US7113578B2 (en) * 2002-11-12 2006-09-26 Electronic Locking Specialties, Inc. Vandal proof intercom system for apartment buildings
US6976132B2 (en) 2003-03-28 2005-12-13 International Business Machines Corporation Reducing latency of a snoop tenure
US7827362B2 (en) 2004-08-24 2010-11-02 Symantec Corporation Systems, apparatus, and methods for processing I/O requests
US8145847B2 (en) * 2004-01-20 2012-03-27 Hewlett-Packard Development Company, L.P. Cache coherency protocol with ordering points
EP2049633A2 (en) * 2006-08-03 2009-04-22 The Lubrizol Corporation Mannich post-treatment of pibsa dispersants for improved dispersion of egr soot
US7657710B2 (en) 2006-11-17 2010-02-02 Sun Microsystems, Inc. Cache coherence protocol with write-only permission
US20080229325A1 (en) * 2007-03-15 2008-09-18 Supalov Alexander V Method and apparatus to use unmapped cache for interprocess communication
US8255673B2 (en) * 2008-04-25 2012-08-28 Arm Limited Monitoring transactions in a data processing apparatus
US8287347B2 (en) * 2008-11-06 2012-10-16 Shuffle Master, Inc. Method, apparatus and system for egregious error mitigation
US9569349B2 (en) * 2008-12-19 2017-02-14 Ati Technologies Ulc Method and apparatus for reallocating memory content
US9645866B2 (en) * 2010-09-20 2017-05-09 Qualcomm Incorporated Inter-processor communication techniques in a multiple-processor computing platform
GB2484088B (en) * 2010-09-28 2019-08-07 Advanced Risc Mach Ltd Coherency control with writeback ordering
US9317102B2 (en) * 2013-01-03 2016-04-19 Apple Inc. Power control for cache structures
US9311011B2 (en) * 2013-08-07 2016-04-12 Qualcomm Incorporated Dynamic address negotiation for shared memory regions in heterogenous multiprocessor systems
US10013351B2 (en) * 2014-06-27 2018-07-03 International Business Machines Corporation Transactional execution processor having a co-processor accelerator, both sharing a higher level cache
US9858196B2 (en) * 2014-08-19 2018-01-02 Qualcomm Incorporated Power aware padding
US9612971B2 (en) * 2014-08-19 2017-04-04 Qualcomm Incorporated Supplemental write cache command for bandwidth compression
US9665489B2 (en) * 2015-02-11 2017-05-30 Qualcomm Incorporated Methods of selecting available cache in multiple cluster system
US9606925B2 (en) 2015-03-26 2017-03-28 Intel Corporation Method, apparatus and system for optimizing cache memory transaction handling in a processor
US9823730B2 (en) * 2015-07-08 2017-11-21 Apple Inc. Power management of cache duplicate tags
US10474526B2 (en) * 2016-09-30 2019-11-12 Intel Corporation System and method for granular in-field cache repair

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040117561A1 (en) * 2002-12-17 2004-06-17 Quach Tuan M. Snoop filter bypass
US20140040552A1 (en) * 2012-08-06 2014-02-06 Qualcomm Incorporated Multi-core compute cache coherency with a release consistency memory ordering model
US20170091092A1 (en) * 2015-09-30 2017-03-30 Samsung Electronics Co., Ltd. Coherent interconnect for managing snoop operation and data processing apparatus including the same

Also Published As

Publication number Publication date
CN109690501A (zh) 2019-04-26
US20180081809A1 (en) 2018-03-22
WO2018052671A1 (en) 2018-03-22
US10248565B2 (en) 2019-04-02
JP2019533855A (ja) 2019-11-21
KR102008131B1 (ko) 2019-10-21
BR112019004930A2 (pt) 2019-06-04
EP3516524A1 (en) 2019-07-31
JP6665346B2 (ja) 2020-03-13

Similar Documents

Publication Publication Date Title
KR102062507B1 (ko) 동적 입력/출력 코히어런시
US10339058B2 (en) Automatic cache coherency for page table data
US10628321B2 (en) Progressive flush of cache memory
US10503656B2 (en) Performance by retaining high locality data in higher level cache memory
US20220113901A1 (en) Read optional and write optional commands
US20160026436A1 (en) Dynamic Multi-processing In Multi-core Processors
CN109716305B (zh) 实现异步高速缓存维护操作的方法、计算设备以及介质
US20180336136A1 (en) Input/output-coherent Look-ahead Cache Access
KR102132571B1 (ko) 하드웨어 제어형 분할된 스누프 디렉토리들을 사용한 코히어런트 인터커넥트 전력 감소
CN109791510B (zh) 在异构计算中管理数据流
KR102008131B1 (ko) 하이브리드 입력/출력 코히어런트 기록
JP2018511111A (ja) ビクティムキャッシュモードを向上させるためのプロセススケジューリング
KR20180069801A (ko) 임계 실행 경로를 시그널링 오프하는 태스크

Legal Events

Date Code Title Description
A201 Request for examination
A302 Request for accelerated examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant