KR20220011183A - 하이브리드 하드웨어-소프트웨어 코히런트 프레임워크 - Google Patents

하이브리드 하드웨어-소프트웨어 코히런트 프레임워크 Download PDF

Info

Publication number
KR20220011183A
KR20220011183A KR1020217042707A KR20217042707A KR20220011183A KR 20220011183 A KR20220011183 A KR 20220011183A KR 1020217042707 A KR1020217042707 A KR 1020217042707A KR 20217042707 A KR20217042707 A KR 20217042707A KR 20220011183 A KR20220011183 A KR 20220011183A
Authority
KR
South Korea
Prior art keywords
accelerator
memory
data set
accelerator device
host
Prior art date
Application number
KR1020217042707A
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 KR20220011183A publication Critical patent/KR20220011183A/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/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/0815Cache consistency protocols
    • G06F12/0837Cache consistency protocols with software control, e.g. non-cacheable data
    • 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/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4204Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus
    • G06F13/4234Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus being a memory bus
    • 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/0604Improving or facilitating administration, e.g. storage management
    • 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
    • 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/067Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
    • 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

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)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

가속기 디바이스(140)는 호스트 컴퓨팅 디바이스(105)의 하드웨어 엘리먼트들과 동일한 코히런트 도메인을 공유한다. 하드웨어와 소프트웨어의 코히런시의 혼합은, 큰 청크들의 데이터가 호스트로부터 가속기 디바이스로 이동될 때 데이터를 관리하는 오버헤드를 감소시킨다. 호스트 상에서 실행되는 가속기 애플리케이션(125)은, 프로세싱될, 가속기 디바이스로 송신하고자 하는 데이터 세트(130)를 식별한다. 가속기 애플리케이션은 호스트의 홈 에이전트(135)로부터 가속기 디바이스로 소유권을 이전한다. 그런 다음, 슬레이브 에이전트(155)는 데이터의 소유권을 취할 수 있다. 결과적으로, 가속기 디바이스의 요청 에이전트(145)로부터 수신되는 임의의 메모리 동작 요청들은, 슬레이브 에이전트가 호스트의 홈 에이전트로부터의 허가를 얻지 않고, 슬레이브 에이전트를 통해 로컬 메모리(160)의 데이터 세트에 액세스할 수 있다.

Description

하이브리드 하드웨어-소프트웨어 코히런트 프레임워크
본 개시내용의 예들은 일반적으로, 호스트와 가속기 디바이스 사이에서 데이터를 송신하기 위해 협업 하드웨어-소프트웨어 코히런트 프레임워크(collaborative hardware-software coherent framework)를 사용하는 가속기에 관한 것이다.
통상적인 I/O 모델에서, 호스트 컴퓨팅 시스템은, 주변 I/O 디바이스(예를 들어, 가속기)에 고유한 맞춤형 I/O 디바이스 드라이버들을 사용하여 가속기 작업들 또는 기능들을 실행할 때, 주변 I/O 디바이스와 인터페이싱한다. 이 모델의 단점은, 모든 가속기-메모리 상호작용들이, 때로 서버 호스트로 지칭되는, 메인 CPU-메모리 콤플렉스(CPU-memory complex)의 홈 에이전트 노드를 거쳐야 한다는 것이다. 이 모델은 하드웨어 강제 코히런시(hardware enforced coherency)를 사용하므로, 가속기-메모리 데이터 풋프린트가 캐시라인(cacheline)보다 몇 십배(MB, GB 또는 심지어 TB) 큰지 여부와 관계없이, 모든 가속기-메모리 상호작용들은, 서버 호스트 상의 프로세서(프로듀서)가 결국 가속기가 컴퓨테이션(computation)들을 끝까지 수행한 해당 데이터 풋프린트의 일부(fraction)에만 액세스할 수 있는 경우에도, 홈 에이전트 노드에 의해 서비스도 되고 추적도 된다. 다른 단점은, 가속기에 의해 액세스되고 캐시되는 모든 메모리가 원격의 서버 호스트 부착 메모리라는 점이다. 이 모델의 추가적인 단점은, PCIe I/O 기반 가속기가 메모리를 캐시할 수 없다는 점이다. 가속기-메모리 상호작용들은 단지 서버 호스트 부착 메모리와 그리고 해당 접근방식의 레이턴시, 대역폭 및 프로토콜 메시징 오버헤드 단점들로 발생한다.
한편, 하드웨어 캐시-코히런트 공유-메모리 멀티프로세서 패러다임은, 멀티프로세서 CPU들 상에서의 실행 작업들 또는 기능들에 인터페이싱하는 일반 ISA(instruction set architecture)-독립적 모델을 활용한다. 인터페이싱하는 일반 ISA-독립적(예를 들어, C-코드) 모델은, 프로세싱 유닛들의 수 및 그 프로세싱 유닛들이 이용할 수 있는 공유 메모리의 양 둘 다에 따라 스케일링된다. 통상적으로, 주변 I/O 디바이스들은 호스트 컴퓨팅 시스템 상에서 실행되는 CPU들에 의해 사용되는 코히런트 패러다임의 혜택을 이용할 수 없었다.
데이터 세트의 소유권(ownership)을 가속기 디바이스로 이전하기 위한 기법들이 설명된다. 일 예는 컴퓨팅 시스템이며, 이는, 프로세싱 유닛, 홈 에이전트(HA: home agent) 및 가속기 애플리케이션을 포함하는 호스트, 및 호스트에 통신가능하게 커플링된 가속기 디바이스를 포함하며, 가속기 디바이스는, 적어도 하나의 가속기 기능을 수행하도록 구성된 요청 에이전트(RA: request agent), 슬레이브 에이전트(SA: slave agent), 및 로컬 메모리를 포함하고, 여기서, 로컬 메모리는 호스트의 프로세싱 유닛과 동일한 코히런트 도메인의 일부이다. 가속기 애플리케이션은 데이터 세트의 소유권을 HA로부터 가속기 디바이스로 이전하도록 구성되고, 그리고 가속기 디바이스는, 데이터 세트의 최신 카피(copy)를 로컬 메모리에 저장하고, SA를 사용하여 RA로부터의 메모리 요청을 서비스하고 그리고 데이터 세트의 소유권을 HA로 다시 이전하도록 구성된다.
일부 실시예들에서, 가속기 애플리케이션은 데이터 세트를 식별하도록 구성되며, 데이터 세트는 메모리 블록 또는 메모리 페이지의 하위 부분이다.
일부 실시예들에서, HA로부터 가속기 디바이스로 데이터 세트의 소유권을 이전한 후에, 메모리 블록 또는 메모리 페이지의 나머지 부분은 HA에 의해 계속 호밍된다.
일부 실시예들에서, SA를 사용하여 RA로부터의 메모리 요청을 서비스하는 것은 HA로부터의 허가를 수신하지 않고 수행된다.
일부 실시예들에서, 프로세싱 유닛들은 캐시를 포함하며, 캐시는 수정된 버전의 데이터 세트를 저장한다.
일부 실시예들에서, 가속기 디바이스는, 데이터 세트의 소유권이 가속기 디바이스로 이전된 후, 수정된 버전의 데이터 세트가 로컬 메모리로 이동되도록, 프로세싱 유닛에게 캐시를 플러시하게 명령하는 플러시 커맨드(flush command)를 HA에 송신하도록 구성된다.
일부 실시예들에서, 프로세싱 유닛들은, 플러시 커맨드에 대한 응답으로, 캐시에 있는 수정된 버전의 데이터 세트를 무효화하는 것 또는 향후 저-레이턴시 재-참조를 위한 수정된 버전의 데이터 세트의 캐시된 클린 카피를 유지하는 것 중 하나를 위해 구성된다.
일부 실시예들에서, 가속기 애플리케이션은, 데이터 세트의 소유권이 가속기 디바이스로 이전되기 전에, 수정된 버전의 데이터 세트가 로컬 메모리로 이동되도록, 프로세싱 유닛에게 캐시를 플러시하게 명령하는 플러시 커맨드를 HA에 송신하도록 구성된다.
일부 실시예들에서, 가속기 애플리케이션은, 데이터 세트의 소유권이 가속기 디바이스로 이전되기 전에, 프로세싱 유닛에게 캐시를 무효화하게 명령하는 무효화 커맨드(invalidate command)를 HA에 송신하도록 구성된다.
본원에서 설명되는 일 예는 가속기 디바이스이며, 이는, 적어도 하나의 가속기 기능을 수행하도록 구성된 컴퓨트 엔진(compute engine)을 포함하는 RA, 메모리 제어기를 포함하는 SA 및 메모리를 포함한다. RA는, 가속기 디바이스에 커플링된 호스트의 HA로부터 SA로의 데이터 세트의 소유권을 수신하도록 구성되고, 여기서 소유권은 소프트웨어 애플리케이션에 의해 이전된다. 메모리 제어기는, 일단 소유권이 SA로 이전되면, 메모리에 저장된 데이터 세트에 액세스하기 위해, 컴퓨트 엔진에 의해 송신되는 요청을 서비스하도록 구성된다. RA는 소유권을 SA로부터 HA로 다시 이전하도록 구성된다.
일부 실시예들에서, 데이터 세트는 메모리 블록 또는 메모리 페이지의 하위 부분이며, HA로부터 SA로 데이터 세트의 소유권을 이전한 후에, 메모리 블록 또는 메모리 페이지의 나머지 부분은 HA에 의해 계속 호밍되고, 요청을 서비스하는 것은 HA로부터의 허가를 수신하지 않고 수행된다.
일부 실시예들에서, 가속기 디바이스는, 가속기 디바이스에 메모리 및 SA를 포함하도록 호스트의 코히런트 도메인을 연장시키기 위해, 코히런트 상호연결 프로토콜을 사용하여 호스트와 통신하도록 구성된다.
본원에서 설명되는 일 예는, 호스트의 HA로부터 가속기 디바이스로 데이터 세트의 소유권을 이전하는 단계 ―가속기 디바이스는 호스트에 통신가능하게 커플링되고 그리고 호스트의 코히런트 도메인은 가속기 디바이스로 연장됨―, 데이터 세트를 가속기 디바이스의 로컬 메모리로 이동하는 단계, 가속기 디바이스의 SA를 사용하여 가속기 디바이스의 RA로부터의 메모리 요청을 서비스하는 단계, 및 가속기 디바이스로부터의 소유권을 HA로 다시 이전하는 단계를 포함하는 방법이다.
일부 실시예들에서, 이 방법은 호스트 상에서 실행되는 가속기 애플리케이션을 사용하여 데이터 세트를 식별하는 단계를 포함하며, 데이터 세트는 메모리 블록 또는 메모리 페이지의 하위 부분이고, HA로부터 가속기 디바이스로 데이터 세트의 소유권을 이전한 후에, 메모리 블록 또는 메모리 페이지의 나머지 부분은 HA에 의해 계속 호밍된다.
일부 실시예들에서, 이 방법은, 가속기 디바이스로 소유권을 이전한 후에, 가속기 디바이스에 의해 발행되는 CMO(cache maintenance operation)에 대한 응답으로, 캐시의 수정된 데이터 세트를 무효화하는 단계를 포함한다.
위에서 언급된 특징들이 상세히 이해될 수 있는 방식으로, 위에서 간략하게 요약된 더 구체적인 설명이 예시적인 구현들을 참조하여 이루어질 수 있으며, 그 예시적인 구현들 중 일부는 첨부된 도면들에 예시되어 있다. 그러나, 첨부된 도면들이 통상적인 예시적인 구현들만을 예시하는 것이므로, 그 구현들의 범위를 제한하는 것으로 간주되지 않아야 한다는 것이 주목되어야 한다.
도 1은, 일 예에 따른 가속기 디바이스에 커플링된 호스트의 블록도이다.
도 2는, 일 예에 따른 가속기 디바이스에 커플링된 호스트의 블록도이다.
도 3은, 일 예에 따른 협업 하드웨어-소프트웨어 코히런트 프레임워크를 사용하기 위한 흐름도이다.
도 4는, 일 예에 따른 협업 하드웨어-소프트웨어 코히런트 프레임워크를 사용하기 위한 흐름도이다.
도 5는, 일 예에 따른 프로그램가능 IC의 필드 프로그램가능 게이트 어레이 구현을 예시한다.
다양한 특징들이 도면들을 참조하여 아래에서 설명된다. 도면들이 실척대로 도시될 수 있거나 또는 도시되지 않을 수 있으며 그리고 유사한 구조들 또는 기능들의 엘리먼트들이 도면들 전반에 걸쳐 유사한 참조 번호들로 표현된다는 것이 주목되어야 한다. 도면들은 단지 특징들의 설명을 용이하게 하는 것으로만 의도된다는 것이 주목되어야 한다. 이들은 상세한 설명의 포괄적인 설명으로 또는 청구항들의 범위에 대한 제한으로 의도되지 않는다. 부가적으로, 예시된 예가 도시된 모든 양상들 또는 이점들을 가질 필요는 없다. 특정한 예와 함께 설명된 양상 또는 이점이 반드시 그 예로 제한되는 것은 아니며, 그렇게 예시되지 않거나 또는 그렇게 명시적으로 설명되지 않더라도 임의의 다른 예들로 실시될 수 있다.
본원에서의 예들은, 호스트 컴퓨팅 디바이스의 하드웨어 엘리먼트들과 동일한 코히런트 도메인을 공유하는 가속기 디바이스(예를 들어, 주변 I/O 디바이스 또는 가속기-부착 메모리)를 설명한다. 결과적으로, 가속기 디바이스의 코히런트 도메인에서의 컴퓨트 리소스들은 호스트에서의 CPU 간(CPU-to-CPU) 통신과 유사한 방식으로 호스트와 통신할 수 있다. 이는, 컴퓨트 리소스들이 (어드레스 변환 없이) 직접 통신, 보다 효율적인 메모리 사용, NUMA(non-uniform memory access) 인식 등과 같은 코히런시 타입 기능들을 활용할 수 있다는 것을 의미한다. 코히런트 메모리는, 홈 에이전트 노드가 캐시라인 레벨에서 메모리를 관리하는 파인-그레인드(fine-grained) 메모리 관리에 의존한다.
그러나, 가속기 작업들은 통상적으로, 하드웨어 코히런시보다는 소프트웨어 코히런시를 사용하여 더 잘 관리될 수 있는 큰 청크들의 메모리를 처리하며, 여기서, 호스트의 홈 에이전트는 가속기 디바이스에 의해 처리되는 데이터를 관리한다. 예를 들어, 하드웨어 코히런시 모델이 갖는 단점은, 모든 가속기-메모리 상호작용들이 여전히 먼저 서버 호스트를 거친다는 점이다. 이 모델은, 가속기-메모리 데이터 풋프린트가 캐시라인보다 몇 십배(MB, GB 또는 심지어 TB) 큰지 여부와 관계없이 그리고 메모리가 가속기-부착되는지 여부와 관계없이, 하드웨어 강제 코히런시를 사용하며, 모든 가속기-메모리 상호작용들은 여전히, 프로세서(프로듀서)가 결국 가속기가 컴퓨테이션들을 끝까지 수행한 해당 데이터 풋프린트의 일부에만 액세스할 수 있는 경우에도, 호스트에 의해 먼저 서비스되고 추적된다. 대조적으로, 소프트웨어 코히런시는, 통상적인 호스트-I/O 모델과 유사하게, 가속기 디바이스가 그의 메모리에 저장된 데이터를 관리하는 경우이며, 여기서 호스트는 큰 청크의 데이터를 I/O 디바이스로 송신하고, 디바이스는 그 데이터를 프로세싱하고 그리고 I/O 디바이스는, 프로세싱된 데이터가 준비되면 호스트에 통지한다. 한편, 소프트웨어 코히런시 모델은, I/O 가속기가 프로세싱된 데이터를 준비할 때까지, 호스트가 데이터에 액세스하지 않는 것을 보증한다.
본원의 실시예들은 하이브리드 하드웨어-소프트웨어 프레임워크를 생성하기 위한 하드웨어 및 소프트웨어 코히런시의 혼합을 설명하며, 이는 호스트와 가속기가 동일한 코히런트 도메인에 있을 때 큰 청크들의 데이터를 호스트로부터 가속기 디바이스로 이동하는 경우 데이터를 관리하는 오버헤드를 감소시킨다. 일 실시예에서, 호스트 상에서 실행되는 가속기 애플리케이션은, 프로세싱될, 가속기 디바이스로 송신하고자 하는 데이터 세트를 식별한다. 가속기 애플리케이션은, 데이터에 관한 메타데이터를 수정하거나 가속기 디바이스에 의해 액세스되는 제어 데이터 구조를 수정함으로써, 소프트웨어 코히런트 방법들을 통해 가속기 디바이스에 통지한다. 이에 대한 응답으로, 가속기 디바이스는, 하드웨어 코히런트 기법들을 사용하여, 가장 최신(most up-to-date) 버전의 데이터 세트를 청하고 데이터 세트의 어떠한 캐시된 카피들도 호스트에 남아 있지 않도록 하는 요청을 호스트에 송신한다. 그런 다음, 하드웨어 코히런트 기법들을 사용하여, 호스트는, 가장 최신 버전의 데이터가 가속기 디바이스의 메모리에 저장되는 것을 보장하고, 그리고 CPU 캐시의 데이터 세트의 모든 카피들을 무효화한다. 가속기 디바이스의 요청 에이전트는 가속 애플리케이션에 따라 슬레이브 에이전트를 통해 로컬 메모리에 있는 데이터 세트의 프로세싱을 시작한다. 일 실시예에서, 요청 에이전트는 로컬 메모리의 서브세트들을 캐시하고 캐시된 카피를 프로세싱할 수 있다. 소프트웨어 코히런시는, 가속기 디바이스의 요청 에이전트로부터 수신되는 임의의 메모리 동작 요청들이, 슬레이브 에이전트가 호스트로부터 허가를 얻지 않고도, 슬레이브 에이전트를 통해 로컬 메모리의 데이터 세트에 액세스할 수 있게 보증한다. 예를 들어, 슬레이브 에이전트는, 보다 최신 버전의 데이터 세트가 있는지 여부를 홈 에이전트와 체크하거나 또는 가속기 디바이스에 의해 프로세싱될 데이터의 캐시된 카피가 남아 있는지를 체크할 필요가 없다. 가속기 디바이스가 데이터 세트의 프로세싱을 행한 경우, 가속기 디바이스는 캐시된 서브세트들을 플러시하고, 로컬 메모리를 업데이트하고, 그리고 예를 들어, 호스트 프로세서들에 의해 액세스되는 제어 데이터 구조 또는 메타데이터를 수정하는 가속기 디바이스에 의해, 소프트웨어 코히런트 방법들을 통해 호스트의 홈 에이전트로 소유권을 다시 이전한다. 이는, 가속기 디바이스가 호스트와 상이한 도메인에 있는 통상적인 호스트 I/O 모델에서 작업이 완료되는 경우와 유사하게, 시스템의 나머지 부분과 데이터 세트의 하드웨어 코히런시의 강제자(enforcer)로서 호스트를 재설정한다. 따라서, 가속기 디바이스 및 호스트는, 동일한 코히런시 도메인에 있고 하드웨어 코히런시 강제에 의존함으로써, 소프트웨어 방법들을 통해, 큰 청크들의 데이터의 소유권을 가속기 디바이스의 로컬 메모리로 이전할 때 발생하는 높은 오버헤드를 방지한다. 가속기 디바이스와 호스트는, 동일한 코히런시 도메인에 있음으로써, 가속기 디바이스의 로컬 메모리로부터의 프로세싱된 데이터를 호스트로 다시 이동하는 높은 오버헤드를 또한 피할 수 있다.
도 1은, 일 예에 따른 가속기 디바이스(140)에 커플링된 호스트(105)를 포함하는 컴퓨팅 시스템(100)의 블록도이다. 가속기 디바이스(140)는 호스트(105)에 의해 발행된 작업들을 수행하는 임의의 디바이스(예를 들어, 주변 I/O 디바이스)일 수 있다. 일 실시예에서, 호스트(105)는 PCIe 연결을 사용하여 가속기 디바이스(140)에 통신가능하게 커플링된다. 다른 실시예에서, 가속기 디바이스(140)는 별도의 I/O 디바이스라기 보다는 호스트-부착 메모리의 일부이다. 호스트(105)는 단일 컴퓨터(예를 들어, 서버) 또는 상호연결된 다수의 물리적 컴퓨팅 시스템들을 표현할 수 있다. 어쨌든, 호스트(105)는 다수의 CPU들(110), 메모리(115), 및 홈 에이전트(135)를 포함한다.
메모리(115)는 본원에 설명된 기능들을 수행할 수 있는 임의의 OS일 수 있는 OS(operating system)(120)를 포함한다. 일 실시예에서, OS(120)(또는 하이퍼바이저 또는 커널)는 CPU들(110) 및 메모리(115)에 대한 캐시-코히런트 공유-메모리 멀티프로세서 패러다임을 설정한다. 일 실시예에서, CPU들(110) 및 메모리(115)는, 캐시-코히런트 공유-메모리 멀티프로세서 패러다임을 따르는 코히런트 도메인을 형성하도록 OS 관리(또는 커널/하이퍼바이저 관리)된다.
본원의 실시예들에서, 공유-메모리 멀티프로세서 패러다임은, 모든 성능 이점들, 소프트웨어 유연성 및 해당 패러다임의 감소된 오버헤드와 함께, 가속기 디바이스(140)가 이용가능하다. 추가로, 가속기 디바이스(140)의 컴퓨트 리소스들을 CPU들(110) 및 메모리(115)와 동일한 코히런트 도메인에 부가하는 것은, 일반 ISA-독립적 개발 환경을 허용한다.
일 실시예에서, 가속기 디바이스(140) 및 호스트(105)는, 호스트(105)의 코히런트 도메인을 가속기 디바이스(140)로 연장시키기 위해 코히런트 상호연결 프로토콜을 사용한다. 예를 들어, 가속기 디바이스(140)는 디바이스(140) 내의 코히런트 도메인을 연장시키기 위해 CCIX(cache coherent interconnect for accelerators)를 사용할 수 있다. CCIX는 이기종 시스템 아키텍처(heterogeneous system architecture)들을 위한 캐시 코히런트 프레임워크를 제공하는 고성능 칩-대-칩 상호연결 아키텍처이다. CCIX는 가속기 디바이스(140)에 커널 관리 의미론(kernel managed semantics)을 제공한다. 캐시 코히런스는, 호스트(105) 상의 CPU(들)(110)와, 임의의 수의 주변 I/O 디바이스들 상에 배치될 수 있는 시스템의 다양한 다른 가속기들 사이에서 자동으로 유지된다.
그러나, 가속기 디바이스(140)에 컴퓨트 리소스들을 포함시키도록 호스트(105)의 코히런트 도메인을 연장시키기 위해, QPI(QuickPath Interconnect), 옴니-패스(Omni-Path), 인피니티 패브릭(Infinity Fabric), NVLink 또는 OpenCAPI와 같은, CCIX 이외의 다른 코히런트 상호연결 프로토콜들이 사용될 수 있다. 즉, 가속기 디바이스(140)는, 가속기 디바이스(140)에 컴퓨트 리소스들을 포함하는 코히런트 도메인의 형성을 용이하게 하는 임의의 타입의 코히런트 상호연결 프로토콜을 지원하도록 맞춤화될 수 있다.
일 실시예에서, HA(135)는, 시스템(100)의 메모리(호스트(105)의 메모리(115) 및 가속기 디바이스(140)의 메모리(160) 둘 다)에 대한 코히런시 액션들을 실행한다. 코히런트 시스템에서, 메모리 어드레스 범위들은 지정된 HA에 의해 호밍되며, 이는 가속기 디바이스(140)의 요청 에이전트(145)뿐만 아니라 호스트(105)의 CPU들(110)에 의해 액세스되는 캐시 라인들에 대한 신속한 코히어런시 분석(coherency resolution)의 이점을 제공한다. HA(135)는, 상이한 위치들(또는 캐시들)에 동시에 저장될 수 있는 가장 최신 버전들의 데이터가, 해당 데이터를 판독하거나 수정하라는 요청이 수신될 때 리트리브되는 것을 보장한다. 이러한 요청들은, 부착된 가속기 디바이스(140)의 요청 에이전트(예를 들어, 요청 에이전트(145)) 또는 CPU(110)로부터 발신될 수 있다. 하나의 HA(135)가 도시되지만, 컴퓨팅 시스템(100)은, 각각의 HA가 상이한 메모리 어드레스 범위들로서 홈에 대해 서빙하는 경우 임의의 수의 HA들을 가질 수 있다.
가속기 디바이스(140)는, 플러깅가능 카드(pluggable card)(호스트(105)의 확장 슬롯에 플러깅됨), SoC(system on a chip), GPU(graphics processing unit), FPGA(field programmable gate array) 등과 같은 여러 상이한 타입들의 주변 디바이스들일 수 있다. 예를 들어, 가속기 디바이스(140)는, 프로그램가능 로직(예를 들어, 프로그램가능 로직 어레이)를 포함할 수 있거나, 또는 임의의 프로그램가능 로직을 포함하지 않지만, 대신에 오로지 강화된 회로(hardened circuit)(소프트웨어 프로그램가능할 수 있음)만을 포함할 수 있다.
가속기 디바이스(140)는 RA(request agent)(145), SA(slave agent)(155), 및 메모리(160)(또한, 로컬 메모리로 불림)를 포함한다. 일 실시예에서, RA(145)는 특별한 컴퓨테이션을 수행하도록 최적화된 컴퓨트 엔진이다. 일 실시예에서, RA(145)는 하드웨어, 펌웨어, 또는 이들의 조합이다. 예를 들어, RA(145)는 프로그램가능한 로직으로 구현되는 하나 이상의 컴퓨트 엔진들일 수 있다. 다른 예에서, RA(145)는 강화된 회로부(예를 들어, GPU 또는 다른 ASIC의 코어)로부터 형성된 컴퓨트 엔진일 수 있다. 어쨌든, RA(145)는 가속기 디바이스에 대한 가속기 기능들(150)을 수행한다. 이들 기능들(150)은 머신 러닝 가속기, 암호화 가속기, 그래픽 가속기, 서치 가속기, 압축해제/압축 가속기 등의 일부일 수 있다. 일 실시예에서, 가속기 기능들(150)은 가속기 디바이스(140)에서 프로그램가능 로직(예를 들어, 프로그램가능 로직 어레이)으로 구현된다. 다른 실시예에서, 가속기 기능들(150)은 프로세싱 코어들 또는 엔진들과 같은 강화된 로직(소프트웨어 구성가능할 수 있음)으로 구현된다.
일반적으로, RA(145)의 컴퓨트 엔진 또는 엔진들은, 가속기 기능들(150)을, 호스트(105)의 CPU들(110) 중 하나 이상을 사용하여 그 동일한 기능들이 수행되는 경우보다 더 빠르게 또는 더 효율적으로 수행한다. 하나의 가속기 기능(150)이 도시되고 하나의 가속기 애플리케이션(125)이 도시되지만, 컴퓨팅 시스템(100)은 임의의 수의 가속기 기능들을 가질 수 있으며, 여기서 각각의 가속기 기능은 메모리에서 상이한 데이터 세트를 프로세싱하는 것이다.
일 실시예에서, SA(155)는 메모리(160)로부터 데이터를 판독하거나 또는 메모리(160)에 데이터를 기입하기 위한 요청들을 서비스하는 메모리 제어기(하드웨어 회로일 수 있음)이다. RA(145)는, RA(145)로부터 메모리(160)로 데이터 메모리 동작들이 수행될 때 코히런시가 유지되는 것을 보장한다. 예를 들어, RA(145)가 메모리(160)로부터 데이터를 판독하기를 원하면, RA(145)는, 보다 최신 버전의 데이터가 시스템(100)의 다른 곳에서 이용가능한지 여부를 결정하기 위한 요청을 HA(135)에 먼저 전송할 수 있다. 추가로, 메모리(160)가 가속기 디바이스(140) 내에 도시되지만, 다른 실시예에서, 메모리(160)는 가속기 디바이스(140)를 형성하는 집적 회로와 별개의 칩(예를 들어, 부착된 메모리)에 있을 수 있다.
아래에서 더 자세히 설명되는 바와 같이, SA(155)는 시스템(100)의 현재 페이즈(phase) 또는 구성에 따라 상이한 기능들을 갖는다. 일 페이즈에서, HA(135)는 메모리(160)에 저장된 데이터에 대한 유일한 에이전트이고, SA(155)는 코히런트 시스템에서 통상적인 메모리 제어기처럼 기능한다. 그러나, 다른 페이즈에서, 소프트웨어 코히런시는 로컬 메모리(160)에 저장된 데이터의 소유권을 SA(155)에 제공했으며, RA(145)는 메모리(160)에 저장된 데이터를 프로세싱할 때 HA(135)에게 허가를 청할 필요가 없다. 예를 들어, RA(145)가 가속기 기능들(150)을 수행하기 위해 메모리(160)로부터 데이터를 판독하길 원할 때, 제2 페이즈에서, SA(155)는, RA(145)가, 시스템(100)의 어딘가에 (예를 들어, 메모리(115) 또는 CPU들(110) 중 하나의 CPU 내의 칩-내(in-chip) 캐시에 저장된) 해당 데이터의 더 최신 버전이 있는지 여부를 확인하기 위해 먼저 HA(135)에 대해 검사하지 않고 해당 데이터를 제공할 수 있다.
RA(145)가 메모리(160)에 대해 별개인 것으로 예시되어 있지만, 일 실시예에서, RA(145)는, 메모리(160) 내에 내장되고 메모리-내(in-memory) 컴퓨테이션을 수행하는 컴퓨트 엔진일 수 있다. 그런 경우에, 가속기 디바이스(140)가 도 1에 도시된 바와 같이 물리적으로 구별되는 RA(145) 및 SA(155)를 갖는 것이 아니라, 가속기 장소(locality)는, 논리적으로 구별되고 메모리-내 컴퓨테이션을 수행하는, RA(145) 및 SA(155)를 갖는 메모리-내일 수 있다.
도 2는, 일 예에 따라, 가속기 디바이스(140)에 커플링된 호스트(105)의 블록도이다. 통상적인 I/O 모델과는 달리, 가속기 디바이스(140)의 메모리(160) 및 프로세싱 엘리먼트들(예를 들어, RA(145) 및 SA(155))은 호스트(105)의 CPU(110) 및 메모리와 동일한 코히런트 도메인에 있다. 이로써, 호스트(105)의 HA(135)는, 호스트(105) 및 가속기 디바이스(140)에 저장된 데이터가 코히런트하게 저장되어, 호스트(105)에서 발신된 것이든 또는 가속기 디바이스(140)에서 발신된 것인든, 메모리 동작에 대한 요청이, 해당 데이터가 호스트(105) 또는 가속기 디바이스(140)의 메모리에 저장된 것인지 여부와 여부에 관계없이, 가장 최신 버전의 데이터를 수신하는 것을 보장한다.
일부 애플리케이션들에서, 데이터를 프로세싱할 때의 병목화(bottleneck)는, 해당 데이터를 프로세싱하는 데 걸리는 시간 때문이 아니라, 해당 데이터를 프로세싱하는 컴퓨트 유닛으로의 데이터 이동으로부터 발생한다. 달리 말하면, 프로세서 또는 컴퓨트 엔진으로 그리고 이로부터 데이터를 이동시키는 것은, 프로세서 또는 컴퓨트 엔진을 병목화시키는 대신, 동작이 수행될 수 있는 속도를 제한하는 것이다. 이러한 상황은 종종 가속기들이 사용될 때 발생하는데, 이는 가속기들이 특정 타입들의 기능들을 예외적으로 빠르게 수행할 수 있는 특화된 컴퓨트 엔진들(예를 들어, 가속기 엔진들)을 가지고 있기 때문이다. 종종, 가속기 사용의 효율성을 제한하는 것은, 컴퓨트 엔진들이 아니라 프로세싱을 위해 데이터를 가속기로 이동하는 시스템의 능력이다. 데이터를 컴퓨트 엔진으로 이동하는 것이 작업을 완료하는 데 요구되는 시간을 제한하는 상황들이 컴퓨테이셔널 메모리 병목화로 지칭된다. 컴퓨트 엔진을 데이터에 더 가깝게 이동하는 것은 이 문제를 완화하는 데 도움이 될 수 있다.
제1 실시예에서, 큰 청크들의 데이터가 호스트(105)로부터 가속기 디바이스(140)로 이동되는 경우 통상적인 I/O 데이터 공유 모델이 사용될 수 있다. 그러나, 호스트(105) 및 가속기 디바이스(140)는 더 이상 동일한 코히런시 도메인에 있지 않다. 결과적으로, I/O 기반 가속기 디바이스는 메모리를 캐시할 수 없고, 이는 그가 프로세싱할 필요가 있는 데이터로부터 컴퓨트 엔진(예를 들어, RA(145))을 추가로 분리한다. 하드웨어 코히런시를 사용하는 대신에, 소프트웨어 코히런시는, 소프트웨어 애플리케이션(예를 들어, 가속기 애플리케이션(125))이, 그가 관리하고 가속기 디바이스(140)(예를 들어, 데이터 세트(130))로 송신하고자 하는 어떤 데이터를 HA(135)와 함께 설정하는 경우 사용된다. 일단 가속기 디바이스(140)가 데이터 프로세싱을 완료하면, 가속기 애플리케이션(125)은 다시 데이터의 소유권을 취할 수 있고 HA(135)와 해당 데이터에 대한 하드웨어 코히런시를 유지(또는 재설정)할 수 있다.
제2 실시예에서, 호스트(105) 및 가속기 디바이스(140)는, 데이터가 가속기 디바이스(140)에 캐싱되어 컴퓨테이셔널 메모리 병목화를 완화시키는 데 도움이 될 수 있도록 동일한 코히런트 도메인을 공유할 수 있다. 예를 들어, 메모리는 호스트(105)에 부착(예를 들어, 호스트 부착 메모리)될 수 있는 반면, 데이터는 RA(145)의 캐시 내에 저장될 수 있다. 그러나, 이 모델의 단점은, 모든 가속기-메모리 상호작용들이 호스트(105)의 메인 CPU-메모리 콤플렉스에서 HA(135)를 거친다는 점이다. 이 실시예는 또한 하드웨어 강제 코히런시를 사용하므로, 가속기-메모리 데이터 풋프린트가 캐시라인보다 몇 십배(MB, GB 또는 심지어 TB) 큰지 여부와 관계없이, 모든 가속기-메모리 상호작용들은, CPU(110)(프로듀서)가 결국 가속기 디바이스(140)가 컴퓨테이션을 끝까지 수행한 해당 데이터 풋프린트의 일부에만 액세스할 수 있는 경우에도 HA(135)에 의해 서비스되고 추적된다. 달리 말하면, HA(135)는, CPU(110A)가 해당 데이터의 작은 부분에만 액세스할 수 있는 경우에도, RA(145)의 캐시로 송신된 모든 데이터를 추적해야 한다. 다른 단점은, 가속기 디바이스(140)에 의해 액세스되고 캐시되는 모든 메모리가 원격의 호스트 부착 메모리라는 점이다.
제3 실시예에서, 가속기 디바이스(140)에 의해 프로세싱되는 데이터를 저장하는 메모리는 가속기 디바이스(140)(예를 들어, 메모리(160))에 (또는 이 내부에) 부착되지만, 호스트(105)의 HA(135)에 의해 호밍된다. 이 실시예에서, 모든 가속기-메모리 상호작용들이 여전히 호스트(105)의 HA(135)를 거친다는 점에서 제2 실시예의 단점이 또한 적용된다. 그러나, 이전 실시예와 달리, 일단 캐시 라인의 소유권이 가속기 디바이스(140)에 의해 획득되면, 데이터 세트(130)에 대한 업데이트들이 메모리(160)에 대해 국부적으로 발생할 수 있다. 이 실시예는 또한 하드웨어 강제 코히런시를 사용하므로, 제2 실시예의 다른 단점이 또한, 가속기-메모리 데이터 풋프린트가 캐시라인보다 몇 십배(MB, GB 또는 심지어 TB) 큰지 여부와 관계없이 그리고 메모리가 가속기-부착되었는지 여부에 관계없이, 모든 가속기-메모리 상호작용들이, CPU(110A)가 결국 가속기 디바이스(140)에 의해 프로세싱된 해당 데이터 세트(130)의 일부에만 액세스할 수 있는 경우에도 HA(135)에 의해 계속 먼저 서비스되고 추적된다는 점에서, 적용된다.
위의 3가지 실시예들 대신에, 위의 제1 실시예, 제2 실시예 및 제3 실시예의 혜택들이 그들의 단점들을 피하면서 시스템에 통합되는 경우, 협업 프레임워크가 사용될 수 있다. 위의 혜택들 외에도, 협업 프레임워크에는 추가의 이점들이 있다. 일 실시예에서, 메모리는 호스트(105)의 HA(135)에 의해 계속 호밍되어, 호스트(105)의 CPU들(110)에 의해 액세스되는 캐시 라인들에 대한 신속한 코히런시 분석의 이점이 계속 제공된다. 또한, 메모리에 대한 모든 가속기 액세스가 제1 실시예에서와 같이 코스 레벨(coarse level)로 소프트웨어 코히런시에 의해 추적되거나 또는 메모리에 대한 모든 가속기 액세스가 제2 및 제3 실시예들에서와 같이 파인-그레인드 추적을 갖도록 요구하는 것과는 달리, 협업 프레임워크에서는 가속기-메모리 상호작용들의 파인-그레인드 서브세트만이 소유권을 주장하기 위해 먼저 HA(135)를 거친다.
협업 프레임워크의 또 다른 이점에 관해서, 모든 메모리 페이지들 또는 전체 메모리 블록이 CPU 캐시들(예를 들어, 캐시(210))로부터 플러시될 수 있는 소프트웨어 코히런시와 달리, HA(135)로 가는 가속기-메모리 상호작용들의 서브세트에 대해, 호스트 CPU(110)에 캐시된 부분만이 CPU 캐시(210)에서 스누핑된다(snooped). CPU 캐시(210)의 콘텐츠들을 터치하지 않는 가속기-메모리 상호작용들은, 계속해서 캐시되어 CPU들(110)(및 그들의 코어(205))에 해당 데이터에 대한 저 레이턴시 액세스를 제공할 수 있다.
협업 프레임워크의 또 다른 이점에 관해서, 가속기-메모리 상호작용들이 호스트 부착 메모리에서만 발생하는 제2 및 제3 실시예들 그리고 해당 접근방식의 레이턴시, 대역폭 및 프로토콜 메시징 오버헤드 단점들과 달리, 협업 프레임워크를 사용하면, 가속기-메모리 상호작용들은 가속기 부착 메모리(160)에서 발생할 수 있고, 여기서 가속기 장소는, 저 레이턴시, 고-대역폭 전용 경로를 제공하며 RA(145)와 SA(155) 간의 후속 비공개(private) 가속기-메모리 상호작용들로 인한 프로토콜 메시징 오버헤드를 최소화하는 메모리-근처(near-memory) 또는 메모리-내이다.
협업 프레임워크의 또 다른 이점에 관해서, 가속기 장소가 메모리-근처 또는 메모리-내임에도 불구하고 메모리와의 상호작용들이 홈 노드 소유권을 요구하는 제3 실시예와 달리, 협업 프레임워크에서는, 일단 가속기 디바이스(140)가 컴퓨테이션이 수행되고 있는 데이터 세트(130)의 소유권을 주장하면, 소유권이 HA(135)에 반환될 때까지 모든 후속 컴퓨테이셔널 메모리 액션들이 HA(135)와의 상호작용들 없이 발생한다.
다음의 실시예들은 협업 프레임워크를 사용하여 위의 이점들을 달성하기 위한 상이한 기법들을 설명한다. 그러나, 협업 프레임워크는 이러한 이점들로 제한되지 않는다. 프레임워크의 일부 구현들은 위에서 나열된 것들보다 적은 이점들을 가질 수 있지만, 다른 구현들은 나열되지 않은 상이한 이점들을 가질 수 있다.
도 3은, 일 예에 따라, 협업 하드웨어-소프트웨어 코히런트 프레임워크를 사용하기 위한 방법(300)의 흐름도이다. 블록(305)에서, 가속기 애플리케이션은 프로세싱을 위해 가속기에 전송할 데이터 세트를 식별한다. 일 실시예에서, 가속기 애플리케이션은 가속기 디바이스로부터 혜택을 얻을 수 있는 작업을 수행하는 소프트웨어 애플리케이션이다. 예를 들어, 가속기 애플리케이션은 가속기 디바이스가 하나 이상의 머신 러닝 엔진들을 포함하는 머신 러닝 애플리케이션, 가속기 디바이스가 그래픽 프로세싱을 수행하는 비디오 애플리케이션, 가속기 디바이스가 특정 단어 또는 어구를 서치하는 서치 엔진, 또는 가속기 디바이스가 데이터에 대한 암호화/암호해독 알고리즘들을 수행하는 보안 애플리케이션일 수 있다.
어쨌든, 가속기 디바이스는, 호스트와 가속기 디바이스가 동일한 코히런시 도메인을 공유하는 동안 호스트 상의 HA로부터 가속기 디바이스 상의 SA로 데이터의 소유권이 이전되게 허용하는 협업 프레임워크를 인식할 수 있다. 이로써, 가속기 디바이스는, 협업 프레임워크의 일부로서, 그가 가속기 디바이스에 송신하길 원하는 데이터 세트를 식별할 수 있다.
블록(310)에서, 가속기 애플리케이션(예를 들어, 또는 일부 다른 소프트웨어 애플리케이션)은 서버 호스트로부터 가속기 디바이스로 데이터 세트의 소유권을 이전한다. 일 실시예에서, 가속기 애플리케이션은 가속기 디바이스에 의해 모니터링되는 플래그 또는 메타데이터를 업데이트한다. 이를 업데이트하는 것은, 데이터 세트의 소유권을 HA로부터 가속기 디바이스(예를 들어, 가속기 디바이스의 RA)로 이전한다. 이러한 소유권의 이전을 통해, 가속기 디바이스의 하드웨어는 호스트의 HA에 대해 걱정하지 않고 그가 데이터 세트에서 작동할 수 있음을 알 수 있다(이는, 가속기 디바이스가 이제 데이터 세트를 소유하기 때문임).
일 실시예에서, 가속기 애플리케이션은, 컴퓨테이셔널 메모리 액션들이 수행될 데이터의 서브세트에 대해서만 소유권을 이전한다. 즉, 가속기 애플리케이션은 가속기 디바이스가 그의 가속기 기능들의 일부로서 프로세싱할 데이터만을 식별할 수 있다. 이로써, 호스트의 가속기 애플리케이션은 가속기 디바이스가 프로세싱할 데이터에 대한 소유권만 이전할 수 있다. 이는, 모든 페이지들 또는 전체 메모리 블록이, 그저 요구되는 데이터 세트(이 페이지들 및 메모리 블록들의 하위 부분(subportion)일 수 있음)가 아닌 CPU 캐시들에서 플러시되는 통상적인 I/O 모델 및 소프트웨어 코히런시에 비해 이점이다.
블록(315)에서, 가속기 디바이스(또는 더 구체적으로, RA)는 서버 호스트로부터 데이터 세트의 최신 카피를 요청함으로써 데이터 세트에 대한 자신의 소유권을 행사한다. 이렇게 하는 것은, 데이터 세트를 가속기 디바이스의 로컬 메모리로 이동시킨다. 일 실시예에서, 데이터 세트는 호스트와 가속기 디바이스 간에 하드웨어 코히런시 유지하는 것의 일부로서 가속기 디바이스의 로컬 메모리에 있도록 보증될 수 있다. 그런 경우, 블록(305)에서 식별된 데이터 세트는, 블록(310)에서 가속기 애플리케이션이 소유권을 이전하기 전에, 가속기의 로컬 메모리에 이미 저장되었을 수 있다. 그러나, 다른 실시예에서, RA(또는 가속기 디바이스)는, 플러시 및/또는 무효화 커맨드를 사용하여 데이터 세트가 가속기 디바이스의 로컬 메모리로 이동되고 그리고/또는 어떠한 캐시된 카피들도 남지 않는 것을 보장할 수 있다. 가속기 디바이스의 로컬 메모리가 가장 최신 버전의 데이터 세트를 보유하는 것을 보장하기 위한 다양한 기법들은 도 4에서 나중에 더 상세히 설명된다.
블록(320)에서, RA는 SA를 사용하여 메모리 요청을 서비스한다. SA가 가속기 디바이스에서 메모리 요청들을 서비스하는 경우, SA는, 예를 들어, 시스템의 다른 곳에서 더 최신 버전의 데이터를 이용할 수 있는지 여부를 HA와 먼저 체크하지 않고도 이러한 요청들을 서비스할 수 있다. 즉, 데이터 세트는 이제 가속기 디바이스에 의해 호밍된다.
일 실시예에서, 데이터 세트가 가속기 디바이스에 의해 호밍되는 동안, HA는 데이터 세트에 대한 어떠한 수정들도 추적하지 않는다. 이는, SA가 먼저 HA로부터의 허가를 필요로 하지 않고도 RA가 데이터 세트를 판독하고 수정할 수 있기 때문에, 시스템의 오버헤드를 감소시킨다. 위에서 논의한 바와 같이, HA는 캐시 라인별로 데이터를 추적하며, 이는 데이터 세트의 각각의 캐시 라인이 메모리 동작들을 서비스하기 전에 HA에 의해 체크되어야 함을 의미한다. 그러나, 이제 SA가 데이터 세트를 호밍하므로, 이 기능은 호스트의 HA로부터의 도움 없이 SA에서만 수행된다.
또한, 데이터 세트가 RA에 의해 프로세싱되는 동안 RA가 프로세싱이 완료되었다고 표시하지 않는 한, 소프트웨어 코히런시는, 호스트의 CPU가 데이터 세트를 기입할 수는 없고 단지 판독만 할 수 있는 것을 보장한다. 소프트웨어 코히런시는 또한, CPU가 아직 업데이트되지 않은 데이터를 판독하는 경우, CPU는, 해당 판독을 수행할 시에, "상실(stale)" 값을 판독으로부터 임의의 의미를 도출해서는 안된다는 것을 보장한다. 가속기가 소유권을 소프트웨어/HA로 다시 넘겨준 후에야, CPU들은 업데이트된 데이터에서의 값으로부터 의미를 도출할 수 있다.
블록(325)에서, RA는 그가 데이터 세트를 끝냈는지 여부를 결정한다. RA가 데이터 세트에 대한 그의 가속기 기능들의 수행을 끝내지 않은 경우, 방법(300)은, RA가 데이터 세트의 일부들에 대한 추가 메모리 요청들을 SA에 계속 송신하는 320으로 반복된다. 그러나, 일단 RA가 데이터 세트를 프로세싱하는 것을 완료했다면, 방법(300)은 RA가 데이터 세트의 소유권을 HA로 다시 이전하는 블록(330)으로 진행한다. 따라서, 블록(330)에서, 가속기 디바이스가 데이터 세트로 완료되었음을 가속기 애플리케이션에 표시하는 소프트웨어 액세스가능 메타데이터를 설정하는 것은, 블록(310)에서 수행되는 바와 같이 소유권을 이전하는 소프트웨어가 아니라, 가속기 디바이스의 하드웨어이다. 일 실시예에서, RA가 데이터 세트에 대한 가속기 기능들의 수행을 완료한 때를 프로듀서-컨슈머 모델이 CPU에 통지할 것을 요구하는 경우에 RA는 메타데이터를 업데이트한다. HA는, 해당 데이터(수정됨)의 하드웨어 코히런시가 CPU들의 캐시들 및 호스트-부착 메모리와 같은 호스트내 엔티티들과 유지(또는 재설정)되는 것을 보장할 수 있다. 달리 말하면, 소프트웨어(예를 들어, 가속기 애플리케이션)는 HA를 사용하여 암시적으로 데이터 세트의 소유권을 행사한다. 가속기 애플리케이션은 HA를 코히런시 강제자로만 알고 있다.
일 실시예에서, 방법(400)에 도시된 바와 같이 데이터 세트의 소유권을 HA로부터 SA로 그리고 다시 HA로 이전하는 것은, 통상적인 I/O 모델에서 사용되는 소프트웨어 코히런시와 상이하지만, 타겟 데이터 세트가 식별되고 호스트의 캐시들(예를 들어, CPU 캐시들)을 플러시하는 것/무효화하는 것이 요구되지 않기 때문에, 일 타입의 소프트웨어 코히런시로 고려될 수 있다.
도 4는, 일 예에 따라, 협업 하드웨어-소프트웨어 코히런트 방식을 사용하기 위한 방법(400)의 위한 흐름도이다. 일반적으로, 방법(400)은, 방법(300)에 설명된 바와 같이, HA가 데이터의 소유권을 SA로 이전할 수 있도록, 호스트의 다양한 메모리 엘리먼트들로부터 가속기 디바이스의 로컬 메모리로 데이터를 이동시키기 위한 상이한 기법들을 설명한다.
블록(405)에서, CPU는 데이터 세트의 적어도 일부를 캐시한다. 즉, 가속기 애플리케이션이 데이터 세트의 소유권을 이전하기 전에, 데이터 세트의 일부가 CPU의 캐시에 저장될 수 있다. 블록(410)에서, CPU는 그의 캐시에 저장된 데이터 세트의 일부를 수정한다. 즉, 가속기 애플리케이션이 방법(300)의 블록(310)에서 소유권을 이전하기 전에, 데이터 세트의 일부가 호스트의 다양한 캐시들 및 메모리에 저장될 수 있다. 다양한 캐시들에 저장된 데이터 세트는, 호스트에 있는 메모리의 복제 카피들이거나 소프트웨어(예를 들어, 가속기 애플리케이션)가 HA를 사용하여 암시적으로 데이터 세트의 소유권을 행사한 결과로서 데이터 세트에 대한 업데이트들일 수 있다. 이로써, 가속기 디바이스에서 데이터 세트의 소유권을 SA로 이전하기 전에, 시스템은 가장 최근의 최신 버전의 데이터 세트가 가속기 부착 메모리(즉, 로컬 메모리)에 저장되는 것을 보장하기 위한 기법을 필요로 한다.
블록(415)에서, 방법(400)은, 소프트웨어 또는 하드웨어가 가속기 디바이스에 수정된 데이터 세트를 전송하는 데 사용되는지 여부에 따라 세분된다. 즉, 가속기 디바이스가 가장 최신 데이터 세트를 갖는 것을 보장하기 위한 작업은, 가속기 디바이스의 하드웨어(예를 들어, RA) 또는 소프트웨어(예를 들어, 가속기 애플리케이션)에 의해 수행될 수 있다.
이 작업이 소프트웨어에 할당된다고 가정하면, 방법(400)은, 호스트의 가속기 애플리케이션이 수정된 데이터가 가속기 디바이스에 송신되는 것을 보장하는 블록(420)으로 진행한다. 일 실시예에서, 블록(420)은, 가속기 디바이스가 호스트의 HA로부터 가속기 디바이스로 데이터 세트의 소유권을 이전하기 전에(예를 들어, 방법(300)에서 블록(310) 전에) 수행된다.
서버의 수정된 데이터를 가속기 디바이스로 이동시키기 위한 적어도 2개의 상이한 옵션들이 있으며, 이들은 대안적인 서브-블록들(425, 430)로 예시되어 있다. 블록(425)에서, HA는 가속기 애플리케이션으로부터 플러시 커맨드만을 수신한다. 일 실시예에서, 이 플러시 커맨드는, 모든 수정된 데이터(예를 들어, CPU 캐시들의 수정된 데이터)가 가속기 디바이스의 타겟 메모리 또는 영구적(즉, 비휘발성) 메모리에서 업데이트되었음을 보장하기 위한, 타겟에 대한 플러시 또는 영구적 플러시이다. 플러시 커맨드에 대한 응답으로, HA는 수정된 데이터가 호스트의 다양한 캐시들로부터 플러시되고 가속기 디바이스의 로컬 메모리로 카피되는 것을 보장한다.
호스트의 CPU들은, 캐시를 무효화하거나, 또는 향후 저-레이턴시 재-참조를 위한 데이터 세트에 대응하는 콘텐츠들의 캐시된 클린 카피를 유지한다. 이 예에서, HA는, 가속기 애플리케이션으로부터 명시적 무효화 커맨드를 수신하지 못할 수 있지만, CPU들은 계속 진행해서, 그들의 캐시들에 저장된 그들의 데이터 세트의 일부를 무효화할 수 있다. 다른 예에서, 데이터가 가속기 디바이스의 SA에 의해 호밍되고 있는 동안 CPU들은 (그들이 수정할 수 있는) 데이터 세트의 자체 로컬 카피들을 유지할 수 있다.
대안적인 실시예에서, 블록(430)에서, HA는 가속기 애플리케이션으로부터 플러시 및 무효화 커맨드들을 수신한다. 이에 대한 응답으로, 호스트의 CPU들은 그들의 캐시들을 플러시하고 무효화한다.
일 실시예에서, 블록들(425, 430)에서 설명되는 플러시 및 무효화 커맨드들은, 수정된 데이터 세트(예를 들어, 가장 최근의 최신 데이터 세트)가 로컬 메모리에 저장되는 것을 자동으로 보장하는 CMO(cache maintenance operation)들이다. 일 실시예에서, 가속기 애플리케이션이 발행할 수 있는 2개의 타입들의 CMO들이 있다: 하나는, 가장 최근의 최신 데이터 세트가 로컬 메모리에 저장되는 것만을 보증하지만 CPU가 캐시된 카피를 유지(예를 들어, 플러시 커맨드만)하도록 허용하는 것, 그리고 다른 하나는, 가장 최근의 최신 데이터 세트가 로컬 메모리에 저장되는 것뿐만 아니라 어떠한 캐시된 카피들도 남아 있지 않는 것(예를 들어, 플러시 및 무효화 커맨드들)을 보증하는 것임.
블록(415)으로 돌아가서, 소프트웨어가 아닌, 가속기 디바이스의 하드웨어가 수정된 데이터 세트를 수신하는 것을 보장하는 임무를 받은 경우, 방법은, (방법(300)의 블록(310)에서 논의된 바와 같이) 가속기 애플리케이션이 데이터 세트의 소유권을 가속기 디바이스로 이전할 때까지 하드웨어가 대기하는 블록(435)으로 진행한다. 이러한 소유권의 이전이 발생하면, 방법(400)은, 수정된 데이터가 가속기 디바이스로 송신되는 것을 보장하기 위해, 가속기 디바이스(예를 들어, RA)의 하드웨어가, 하나 이상의 CMO들을 발행하는 블록(435)으로 진행한다. 블록(420)과 마찬가지로, 호스트의 수정된 데이터를 가속기 디바이스로 이동시키기 위한 적어도 2개의 상이한 옵션들이 있으며, 이들은 대안적인 서브-블록들(445, 450)로 예시되어 있다. 블록(445)에서, HA는 RA로부터 플러시 커맨드만을 수신한다. 호스트의 CPU들에 의해 취해질 있는 액션들은, 블록(425)에서 설명된 액션들과 동일할 수 있으므로, 여기에서는 반복하지 않는다.
대안적으로, 블록(450)에서, HA는 RA로부터의 플러시 및 무효화 커맨드들을 수신한다. 이에 대한 응답으로, 호스트의 CPU들은, 블록(430)에서 설명된 바와 같이, 그들의 캐시들을 플러시하고 무효화한다.
일 실시예에서, HA는 최종 레벨 캐시를 가질 수 있다. 소유권을 이전하는 경우, HA는, 최신 데이터 세트가 마지막 레벨 캐시에 고정되지 않고 대신 가속기 디바이스의 로컬 메모리에 카피되는 것을 보장할 수 있다. 마지막 레벨 캐시의 최종 상태는, CPU 캐시의 상태와 동일하며 그리고 블록(420) 또는 블록(440)으로부터 초래되는, CPU 캐시의 액션들과 일치한다.
도 3 및 도 4에 설명된 기법들의 일부 추가적인 비-제한적 이점들은, 메모리가 호스트의 HA에 의해 계속 호밍되는 경우(데이터가 가속기의 상의 SA에 의해 호밍되지 않는 경우), 메모리에 대한 CPU들에 의한 모든 캐싱 및 코히런시 액션들은, 로컬 HA에 의해 신속하게 분석되므로, 협업 프레임워크가 병렬로 존재하더라도 고성능 CPU-메모리 액세스를 유지한다는 점이다. 추가로, 협업 프레임워크는 HA에 대한 별개의 또는 결합된 CMO 및 소유권 요청을 행사하기 위해 오직 가속기-메모리 상호작용들의 서브세트만의 소유권을 요청할 수 있다. 오직 관련 서브세트에 대한 소유권을 이전함으로써, 가속기는, 통상적인 I/O 모델의 순수 소프트웨어 코히런시 모델에 요구되는 것처럼 전체 데이터 세트의 소유권을 주장하지 않아도 되므로 성능 이점을 갖는다.
추가의 이점은, CPU-메모리 상호작용들이, 가속기-메모리 상호작용들과 겹치지 않는 서브세트가 고성능 CPU-메모리 액세스를 유지하는 로컬 HA에 의해 계속 서비스된다는 점에서 또한 성능 이점을 얻을 수 있다는 것이다. 또한, 일 실시예에서, CPU와 가속기 간에 공유되는 데이터 서브세트만이 CPU 캐시들에서 플러시되고 그리고 가속기와 공유되지 않은 콘텐츠들은 CPU들에 계속 캐시되어 CPU들에 해당 데이터에 대한 저 레이턴시 액세스를 제공할 수 있다. 또한, 컴퓨테이셔널 메모리 도메인 특정 아키텍처의 실행에서 가속기-메모리 상호작용들은 CPU-메모리 상호작용들과 독립적인 저-레이턴시 고-대역폭 전용 경로에서 발생한다. 협업 프레임워크의 소프트웨어 코히런시 서브세트는, 호스트와 가속기 간의 메타데이터 핸드오프가 독립적인 CPU-메모리 실행 및 가속기-메모리 실행을 허용하여, CPU와 가속기 디바이스 둘 다의 전체 단면 대역폭, 레이턴스 및 프로그램 실행 성능을 향상시키는 것을 보증할 수 있다.
추가로, 위의 실시예들은 컴퓨테이셔널 메모리 병목화들에 대한 하이브리드 하드웨어-소프트웨어 코히런시 프레임워크를 구체적으로 설명하지만, 유사한 기법들이 관련된 CPU-가속기 공유 메모리 애플리케이션들에 적용될 수 있다.
도 5는 가속기 디바이스(140)의 FPGA(500) 구현을 예시하며, 보다 구체적으로는, 트랜시버들(37), CLB들(33), BRAM들(34), 입력/출력 블록들("IOB"들)(36), 구성 및 클로킹 로직("CONFIG/CLOCKS")(42), DSP 블록들(35), 특수 입력/출력 블록들("IO")(41)(예를 들어, 구성 포트들 및 클록 포트들), 및 다른 프로그램가능 로직(39), 이를테면 디지털 클록 관리기들, 아날로그-디지털 변환기들, 시스템 모니터링 로직 등을 포함하는 다수의 상이한 프로그램가능 타일들을 포함하는 PL 어레이를 갖는 FPGA를 예시한다. FPGA는 또한, PCIe 인터페이스들(40), 아날로그-디지털 변환기들(ADC)(38) 등을 포함할 수 있다.
일부 FPGA들에서, 각각의 프로그램가능 타일은, 도 5의 상단에 포함된 예들에 의해 도시된 바와 같이, 동일한 타일 내의 프로그램가능 로직 엘리먼트의 입력 및 출력 단자들(48)에 대한 연결들을 갖는 적어도 하나의 프로그램가능 상호연결 엘리먼트("INT")(43)를 포함할 수 있다. 각각의 프로그램가능 상호연결 엘리먼트(43)는 또한, 동일한 타일 또는 다른 타일(들)에서 인접한 프로그램가능 상호연결 엘리먼트(들)의 세그먼트들(49)을 상호연결시키기 위한 연결들을 포함할 수 있다. 각각의 프로그램가능 상호연결 엘리먼트(43)는 또한, 로직 블록들(도시되지 않음) 사이에서 일반적인 라우팅 리소스들의 세그먼트들(50)을 상호연결시키기 위한 연결들을 포함할 수 있다. 일반적인 라우팅 리소스들은, 상호연결 세그먼트들(예를 들어, 상호연결 세그먼트들(50))의 트랙들을 포함하는 로직 블록들(도시되지 않음)과 상호연결 세그먼트들을 연결시키기 위한 스위치 블록들(도시되지 않음) 사이의 라우팅 채널들을 포함할 수 있다. 일반적인 라우팅 리소스들의 상호연결 세그먼트들(예를 들어, 상호연결 세그먼트들(50))은 하나 이상의 로직 블록들에 걸쳐 있을 수 있다. 일반적인 라우팅 리소스들과 함께 취해진 프로그램가능 상호연결 엘리먼트들(43)은 예시된 FPGA에 대한 프로그램가능 상호연결 구조("프로그램가능 상호연결")를 구현한다.
예시적인 구현에서, CLB(33)는, 사용자 로직 플러스 단일 프로그램가능 상호연결 엘리먼트("INT")(43)를 구현하도록 프로그램될 수 있는 구성가능한 로직 엘리먼트("CLE")(44)를 포함할 수 있다. BRAM(34)은 하나 이상의 프로그램가능 상호연결 엘리먼트들에 부가하여 BRAM 로직 엘리먼트("BRL")(45)를 포함할 수 있다. 통상적으로, 타일에 포함된 상호연결 엘리먼트들의 수는 타일의 높이에 의존한다. 도시된 예에서, BRAM 타일은 5개의 CLB들과 동일한 높이를 갖지만, 다른 개수들(예를 들어, 4개)이 또한 사용될 수 있다. DSP 블록(35)은 적절한 수의 프로그램가능 상호연결 엘리먼트들에 부가하여 DSP 로직 엘리먼트(DSPL)(46)를 포함할 수 있다. IOB(36)는, 예를 들어, 프로그램가능 상호연결 엘리먼트(43)의 하나의 인스턴스에 부가하여 입력/출력 로직 엘리먼트("IOL")(47)의 2개의 인스턴스들을 포함할 수 있다. 당업자들에게 자명할 바와 같이, 예를 들어, I/O 로직 엘리먼트(47)에 연결된 실제 I/O 패드들은 통상적으로, 입력/출력 로직 엘리먼트(47)의 구역으로 한정되지 않는다.
도시된 예에서, (도 5에 도시된) 다이의 중심 근방의 수평 구역은 구성, 클록 및 다른 제어 로직을 위해 사용된다. 이러한 수평 구역 또는 컬럼(column)으로부터 연장되는 수직 컬럼들(51)은, FPGA의 폭에 걸쳐 클록들 및 구성 신호들을 분배하는 데 사용된다.
도 5에 예시된 아키텍처를 활용하는 일부 FPGA들은, FPGA의 많은 부분을 구성하는 규칙적인 컬럼형 구조를 방해하는 부가적인 로직 블록들을 포함한다. 부가적인 로직 블록들은 프로그램가능 블록들 및/또는 전용 로직일 수 있다.
도 5가 예시적인 FPGA 아키텍처만을 예시하도록 의도됨을 유의한다. 예를 들어, 로우 내의 로직 블록들의 수, 로우들의 상대적인 폭, 로우들의 수 및 순서, 로우들에 포함된 로직 블록들의 타입들, 로직 블록들의 상대적인 사이즈들, 도 5의 상단에 포함된 상호연결/로직 구현들은 순전히 예시적이다. 예를 들어, 실제 FPGA에서, CLB들이 등장하는 곳마다, 사용자 로직의 효율적인 구현을 용이하게 하기 위해 CLB들의 1개 초과의 인접한 로우가 통상적으로 포함되지만, 인접한 CLB 로우들의 수는 FPGA의 전체 사이즈에 따라 변한다.
앞에서, 본 개시내용에 제시된 실시예들에 대한 참조가 이루어진다. 그러나, 본 개시내용의 범위는 특정한 설명된 실시예들로 제한되지 않는다. 대신에, 설명된 특징들 및 엘리먼트들의 임의의 조합은, 상이한 실시예들과 관련되든 관련되지 않든, 고려되는 실시예들을 구현하고 실시하는 것으로 고려된다. 더욱이, 본원에서 개시되는 실시예들은 다른 가능한 솔루션들보다 또는 종래 기술보다 이점들을 달성할 수 있지만, 주어진 실시예에 의해 특별한 이점이 달성되는지 여부는 본 개시내용의 범위의 제한이 아니다. 따라서, 이전 양상들, 특징들, 실시예들 및 이점들은, 단지 예시일 뿐이며 청구항(들)에 명시적으로 언급된 경우를 제외하고는 첨부된 청구항들의 엘리먼트들 또는 제한들로 고려되지 않는다.
당업자에 의해 인식되는 바와 같이, 본원에서 개시되는 실시예들은 시스템, 방법 또는 컴퓨터 프로그램 제품으로 구현될 수 있다. 이에 따라, 양상들은 완전히 하드웨어 실시예, (펌웨어, 상주 소프트웨어, 마이크로 코드 등을 포함하는) 완전히 소프트웨어 실시예, 또는 소프트웨어와 하드웨어 양상들을 결합한 실시예의 형태를 취할 수 있으며, 이들은 모두 일반적으로 본원에서 "회로, 모듈" 또는 "시스템"으로 지칭될 수 있다. 더욱이, 양상들은 컴퓨터 판독가능 프로그램 코드가 구현된 하나 이상의 컴퓨터 판독가능 매체(들)로 구현되는 컴퓨터 프로그램 제품의 형태를 취할 수 있다.
하나 이상의 컴퓨터 판독가능 매체(들)의 임의의 조합이 활용될 수 있다. 컴퓨터 판독가능 매체는 컴퓨터 판독가능 신호 매체 또는 컴퓨터 판독가능 저장 매체일 수 있다. 컴퓨터 판독가능 저장 매체는 예를 들어, 전자, 자기, 광학, 전자기, 적외선 또는 반도체 시스템, 장치 또는 디바이스, 또는 상기한 것들의 임의의 적절한 조합일 수 있지만, 이에 제한되는 것은 아니다. 컴퓨터 판독가능 저장 매체의 보다 구체적인 예들(총망라한 것은 아닌 리스트)은, 하나 이상의 와이어들을 갖는 전기 연결, 휴대용 컴퓨터 디스켓, 하드 디스크, RAM(random access memory), ROM(read-only memory), 소거가능 프로그램가능 판독-전용 메모리(erasable programmable read-only memory)(EPROM 또는 플래시 메모리), 광섬유, 휴대용 CD-ROM(compact disc read-only memory), 광 저장 디바이스, 자기 저장 디바이스, 또는 상기한 것들의 임의의 적절한 조합을 포함할 것이다. 본원의 맥락에서, 컴퓨터 판독가능 저장 매체는 명령 실행 시스템, 장치 또는 디바이스에 의해 또는 이와 관련하여 사용하기 위한 프로그램을 포함 또는 저장할 수 있는 임의의 유형의 매체일 수 있다.
컴퓨터 판독가능 신호 매체는, 예를 들어, 기저대역에서 또는 반송파의 일부로서, 컴퓨터 판독가능 프로그램 코드가 구현된 전파 데이터 신호를 포함할 수 있다. 이러한 전파 신호는, 전자기, 광학 또는 이들의 임의의 적절한 조합을 포함하지만 이에 제한되지 않는 다양한 형태들 중 임의의 것을 취할 수 있다. 컴퓨터 판독가능 신호 매체는, 컴퓨터 판독가능 저장 매체가 아니고 명령 실행 시스템, 장치 또는 디바이스에 의해 또는 이와 관련하여 사용하기 위한 프로그램을 통신하거나, 전파시키거나 또는 송신할 수 있는 임의의 컴퓨터 판독가능 매체일 수 있다.
컴퓨터 판독가능 매체 상에 구현되는 프로그램 코드는, 이로 제한되는 것은 아니지만, 무선, 유선, 광섬유 케이블, RF 등, 또는 이들의 임의의 적절한 조합을 포함하는 임의의 적절한 매체를 사용하여 송신될 수 있다.
본 개시내용의 양상들에 대한 동작들을 실행하기 위한 컴퓨터 프로그램 코드는, Java, Smalltalk, C++ 등과 같은 객체 지향 프로그래밍 언어, 및 "C" 프로그래밍 언어나 비슷한 프로그래밍 언어들과 같은 종래의 절차적 프로그래밍 언어들을 포함하는 하나 이상의 프로그래밍 언어들의 임의의 결합으로 작성될 수 있다. 프로그램 코드는 사용자의 컴퓨터 상에서 전체적으로, 사용자의 컴퓨터 상에서 부분적으로, 독립형 소프트웨어 패키지로서, 사용자의 컴퓨터 상에서 부분적으로 그리고 원격 컴퓨터 상에서 부분적으로, 또는 원격 컴퓨터나 서버 상에서 전체적으로 실행될 수 있다. 후자의 시나리오에서, 원격 컴퓨터는, LAN(local area network) 또는 WAN(wide area network)를 포함하는 임의의 타입의 네트워크를 통해 사용자의 컴퓨터에 연결될 수 있고, 또는 외부 컴퓨터에 대해 (예를 들어, 인터넷 서비스 제공자를 이용해 인터넷을 통해) 연결이 이루어질 수 있다.
본 개시내용의 양상들은, 본 개시내용에서 제시된 실시예들에 따른 방법들, 장치(시스템들) 및 컴퓨터 프로그램 제품들의 흐름도 예시들 및/또는 블록도들을 참조하여 아래에서 설명된다. 흐름도 예시들 및/또는 블록도들의 각각의 블록, 그리고 흐름도 예시들 및/또는 블록도들의 블록들의 결합들은, 컴퓨터 프로그램 명령들에 의해 구현될 수 있다고 이해될 것이다. 이러한 컴퓨터 프로그램 명령들은, 범용 컴퓨터, 특수 목적 컴퓨터, 또는 머신을 생산하기 위한 다른 프로그램가능 데이터 프로세싱 장치의 프로세서에 제공될 수 있어, 컴퓨터 또는 다른 프로그램가능 데이터 프로세싱 장치의 프로세서를 통해 실행되는 명령들이 흐름도 및/또는 블록도의 블록 또는 블록들에서 특정되는 기능들/동작들을 구현하기 위한 수단을 생성하게 된다.
특정한 방식으로 기능하도록 컴퓨터, 다른 프로그램가능 데이터 프로세싱 장치 또는 다른 디바이스들에 명령할 수 있는 이러한 컴퓨터 프로그램 명령들이 또한 컴퓨터 판독가능 매체에 저장될 수 있어, 컴퓨터 판독가능 매체에 저장된 명령들은 흐름도 및/또는 블록도의 블록 또는 블록들에서 특정된 기능/동작을 구현하는 명령들을 포함하는 제조 물품을 생산한다.
컴퓨터 프로그램 명령들은 또한, 일련의 동작 단계들이 컴퓨터, 다른 프로그램가능 장치 또는 다른 디바이스들 상에서 수행되어 컴퓨터 구현 프로세스를 생성하게 하도록, 컴퓨터, 다른 프로그램가능 데이터 프로세싱 장치 또는 다른 디바이스들로 로딩될 수 있어, 컴퓨터 또는 다른 프로그램가능 장치 상에서 실행되는 명령들이 흐름도 및/또는 블록도의 블록 또는 블록들에서 특정된 기능들/동작들을 구현하기 위한 프로세스들을 제공한다.
도면들에서의 흐름도 및 블록도들은, 본 발명의 다양한 예들에 따른, 시스템들, 방법들, 및 컴퓨터 프로그램 제품들의 가능한 구현들의 아키텍처, 기능, 및 동작을 예시한다. 이와 관련하여, 흐름도 또는 블록도들 내의 각각의 블록은, 특정된 로직 기능(들)을 구현하기 위한 하나 이상의 실행가능한 명령들을 포함하는 모듈, 세그먼트, 또는 명령들의 일부를 표현할 수 있다. 일부 대안적인 구현들에서, 블록에서 언급된 기능들은 도면들에서 언급된 순서를 벗어나게 발생할 수 있다. 예를 들어, 수반된 기능에 의존하여, 연속적으로 도시된 2개의 블록들은 사실상, 실질적으로 동시에 실행될 수 있거나 또는 블록들은 때때로 역순으로 실행될 수 있다. 블록도들 및/또는 흐름도의 각각의 블록 및 블록도들 및/또는 흐름도의 블록들의 결합들이 특정된 기능들 또는 동작들을 수행하거나 또는 특수 목적 하드웨어 및 컴퓨터 명령들의 조합들을 수행하는 특수 목적 하드웨어-기반 시스템들에 의해 구현될 수 있음이 또한 유의될 것이다.
전술한 것이 특정한 예들에 관한 것이지만, 다른 및 추가적인 예들이 본 개시내용의 기본적인 범위를 벗어나지 않으면서 고안될 수 있으며, 본 개시내용의 범위는 후속하는 청구항들에 의해 결정된다.

Claims (15)

  1. 프로세싱 유닛, 홈 에이전트(HA: home agent) 및 가속기 애플리케이션을 포함하는 호스트; 및
    상기 호스트에 통신가능하게 커플링된 가속기 디바이스
    를 포함하며, 상기 가속기 디바이스는, 적어도 하나의 가속기 기능을 수행하도록 구성된 요청 에이전트(RA: request agent), 슬레이브 에이전트(SA: slave agent), 및 로컬 메모리를 포함하고, 상기 로컬 메모리는 상기 호스트의 프로세싱 유닛과 동일한 코히런트 도메인(coherent domain)의 일부이며,
    상기 가속기 애플리케이션은 데이터 세트의 소유권(ownership)을 상기 HA로부터 상기 가속기 디바이스로 이전하도록 구성되고,
    상기 가속기 디바이스는,
    상기 데이터 세트의 최신 카피(copy)를 상기 로컬 메모리에 저장하고,
    상기 SA를 사용하여 상기 RA로부터의 메모리 요청을 서비스하고, 그리고
    상기 데이터 세트의 소유권을 상기 HA로 다시 이전하도록 구성되는, 컴퓨팅 시스템.
  2. 제1항에 있어서,
    상기 가속기 애플리케이션은 상기 데이터 세트를 식별하도록 구성되며, 상기 데이터 세트는 메모리 블록 또는 메모리 페이지의 하위 부분(subportion)인, 컴퓨팅 시스템.
  3. 제2항에 있어서,
    상기 HA로부터 상기 가속기 디바이스로 상기 데이터 세트의 소유권을 이전한 후에, 상기 메모리 블록 또는 상기 메모리 페이지의 나머지 부분은 상기 HA에 의해 계속 호밍되는(homed), 컴퓨팅 시스템.
  4. 제1항에 있어서,
    상기 SA를 사용하여 상기 RA로부터의 메모리 요청을 서비스하는 것은 상기 HA로부터의 허가를 수신하지 않고 수행되는, 컴퓨팅 시스템.
  5. 제1항에 있어서,
    상기 프로세싱 유닛은 캐시를 포함하며, 상기 캐시는 수정된 버전의 데이터 세트를 저장하는, 컴퓨팅 시스템.
  6. 제5항에 있어서,
    상기 가속기 디바이스는, 상기 데이터 세트의 소유권이 상기 가속기 디바이스로 이전된 후, 상기 수정된 버전의 데이터 세트가 상기 로컬 메모리로 이동되도록, 상기 프로세싱 유닛에게 상기 캐시를 플러시하게 명령하는 플러시 커맨드(flush command)를 상기 HA에 송신하도록 구성되는, 컴퓨팅 시스템.
  7. 제6항에 있어서,
    상기 프로세싱 유닛은, 상기 플러시 커맨드에 대한 응답으로,
    상기 캐시 내의 상기 수정된 버전의 데이터 세트를 무효화하는 것; 및
    향후 저-레이턴시 재-참조(re-reference)를 위해 상기 수정된 버전의 데이터 세트의 캐시된 클린 카피를 유지하는 것
    중 하나를 위해 구성되는, 컴퓨팅 시스템.
  8. 제5항에 있어서,
    상기 가속기 애플리케이션은, 상기 데이터 세트의 소유권이 상기 가속기 디바이스로 이전되기 전에, 상기 수정된 버전의 데이터 세트가 상기 로컬 메모리로 이동되도록, 상기 프로세싱 유닛에게 상기 캐시를 플러시하게 명령하는 플러시 커맨드를 상기 HA에 송신하도록 구성되는, 컴퓨팅 시스템.
  9. 제8항에 있어서,
    상기 가속기 애플리케이션은, 상기 데이터 세트의 소유권이 상기 가속기 디바이스로 이전되기 전에, 상기 프로세싱 유닛에게 상기 캐시를 무효화하게 명령하는 무효화 커맨드를 상기 HA에 송신하도록 구성되는, 컴퓨팅 시스템.
  10. 적어도 하나의 가속기 기능을 수행하도록 구성된 컴퓨트 엔진(compute engine)을 포함하는 요청 에이전트(RA);
    메모리 제어기를 포함하는 슬레이브 에이전트(SA); 및
    메모리
    를 포함하며, 상기 RA는, 상기 가속기 디바이스에 커플링된 호스트의 홈 에이전트(HA)로부터 상기 SA로의 데이터 세트의 소유권을 수신하도록 구성되고, 상기 소유권은 소프트웨어 애플리케이션에 의해 이전되고,
    상기 메모리 제어기는, 상기 소유권이 상기 SA로 이전되면, 상기 메모리에 저장된 데이터 세트에 액세스하기 위해, 상기 컴퓨트 엔진에 의해 송신되는 요청을 서비스하도록 구성되고, 그리고
    상기 RA는 소유권을 상기 SA로부터 상기 HA로 다시 이전하도록 구성되는, 가속기 디바이스.
  11. 제10항에 있어서,
    상기 데이터 세트는 메모리 블록 또는 메모리 페이지의 하위 부분이고, 상기 HA로부터 상기 SA로 상기 데이터 세트의 소유권을 이전한 후에, 상기 메모리 블록 또는 상기 메모리 페이지의 나머지 부분은 상기 HA에 의해 계속 호밍되고, 상기 요청을 서비스하는 것은 상기 HA로부터의 허가를 수신하지 않고 수행되는, 가속기 디바이스.
  12. 제10항에 있어서,
    상기 가속기 디바이스는, 상기 가속기 디바이스에 상기 메모리 및 상기 SA를 포함하도록 상기 호스트의 코히런트 도메인을 연장하기 위해, 코히런트 상호연결 프로토콜(coherent interconnect protocol)을 사용하여 상기 호스트와 통신하도록 구성되는, 가속기 디바이스.
  13. 호스트의 홈 에이전트(HA)로부터 가속기 디바이스로 데이터 세트의 소유권을 이전하는 단계 ―상기 가속기 디바이스는 상기 호스트에 통신가능하게 커플링되고 그리고 상기 호스트의 코히런트 도메인은 상기 가속기 디바이스로 연장됨―;
    상기 데이터 세트를 상기 가속기 디바이스의 로컬 메모리로 이동하는 단계;
    상기 가속기 디바이스의 슬레이브 에이전트(SA)를 사용하여 상기 가속기 디바이스의 요청 에이전트(RA)로부터의 메모리 요청을 서비스하는 단계; 및
    상기 가속기 디바이스로부터의 소유권을 상기 HA로 다시 이전하는 단계를 포함하는, 방법.
  14. 제13항에 있어서,
    상기 호스트 상에서 실행되는 가속기 애플리케이션을 사용하여 상기 데이터 세트를 식별하는 단계를 더 포함하며,
    상기 데이터 세트는 메모리 블록 또는 메모리 페이지의 하위 부분이고, 상기 HA로부터 상기 가속기 디바이스로 상기 데이터 세트의 소유권을 이전한 후에, 상기 메모리 블록 또는 상기 메모리 페이지의 나머지 부분은 상기 HA에 의해 계속 호밍되는, 방법.
  15. 제13항에 있어서,
    상기 가속기 디바이스로 소유권을 이전한 후에, 상기 가속기 디바이스에 의해 발행되는 CMO(cache maintenance operation)에 대한 응답으로, 상기 캐시의 수정된 데이터 세트를 무효화하는 단계를 더 포함하는, 방법.
KR1020217042707A 2019-05-29 2020-05-08 하이브리드 하드웨어-소프트웨어 코히런트 프레임워크 KR20220011183A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/425,841 US11586369B2 (en) 2019-05-29 2019-05-29 Hybrid hardware-software coherent framework
US16/425,841 2019-05-29
PCT/US2020/032198 WO2020242748A1 (en) 2019-05-29 2020-05-08 Hybrid hardware-software coherent framework

Publications (1)

Publication Number Publication Date
KR20220011183A true KR20220011183A (ko) 2022-01-27

Family

ID=70919121

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020217042707A KR20220011183A (ko) 2019-05-29 2020-05-08 하이브리드 하드웨어-소프트웨어 코히런트 프레임워크

Country Status (6)

Country Link
US (1) US11586369B2 (ko)
EP (1) EP3977297B1 (ko)
JP (1) JP2022534496A (ko)
KR (1) KR20220011183A (ko)
CN (1) CN113924557A (ko)
WO (1) WO2020242748A1 (ko)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11714755B2 (en) 2020-07-31 2023-08-01 Hewlett Packard Enterprise Development Lp System and method for scalable hardware-coherent memory nodes
US11573898B2 (en) * 2020-08-17 2023-02-07 Hewlett Packard Enterprise Development Lp System and method for facilitating hybrid hardware-managed and software-managed cache coherency for distributed computing
CN112765086B (zh) * 2020-12-30 2023-09-08 北京泽石科技有限公司 固态存储中一种基于cache一致性的软硬件交互方法
EP4191419A1 (en) * 2021-12-01 2023-06-07 Samsung Electronics Co., Ltd. Operating method of an electronic device
WO2023173276A1 (en) * 2022-03-15 2023-09-21 Intel Corporation Universal core to accelerator communication architecture

Family Cites Families (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6608813B1 (en) 1998-11-04 2003-08-19 Agere Systems Inc Method and apparatus for achieving fault tolerance in packet switching systems with inverse multiplexing
US6914907B1 (en) 1999-08-05 2005-07-05 Alcatel Canada Inc. Method and apparatus for providing multi-cast transmissions using a distributed router
US7480770B2 (en) 2006-06-14 2009-01-20 Sun Microsystems, Inc. Semi-blocking deterministic directory coherence
US20090006668A1 (en) 2007-06-28 2009-01-01 Anil Vasudevan Performing direct data transactions with a cache memory
JP4734374B2 (ja) 2008-06-04 2011-07-27 アラクサラネットワークス株式会社 ネットワーク中継装置、および、ネットワーク中継装置方法
US8732496B2 (en) 2011-03-24 2014-05-20 Nvidia Corporation Method and apparatus to support a self-refreshing display device coupled to a graphics controller
JP5561620B2 (ja) 2011-05-27 2014-07-30 日立金属株式会社 ネットワークシステム及びネットワークシステムの運用方法
JP5776618B2 (ja) 2012-04-16 2015-09-09 日立金属株式会社 ネットワークスイッチ
JP5935666B2 (ja) 2012-11-22 2016-06-15 日立金属株式会社 通信システムおよびネットワーク中継装置
US9170946B2 (en) * 2012-12-21 2015-10-27 Intel Corporation Directory cache supporting non-atomic input/output operations
CN104734993B (zh) 2013-12-24 2018-05-18 杭州华为数字技术有限公司 数据分流方法及分流器
JP6278800B2 (ja) 2014-04-03 2018-02-14 APRESIA Systems株式会社 中継システムおよびスイッチ装置
JP6189783B2 (ja) 2014-04-08 2017-08-30 APRESIA Systems株式会社 中継システムおよびスイッチ装置
US9720714B2 (en) 2015-08-26 2017-08-01 International Business Machines Corporation Accelerator functionality management in a coherent computing system
US10587534B2 (en) 2017-04-04 2020-03-10 Gray Research LLC Composing cores and FPGAS at massive scale with directional, two dimensional routers and interconnection networks
US10296369B2 (en) * 2017-04-27 2019-05-21 Dell Products L.P. Systems and methods for protocol termination in a host system driver in a virtualized software defined storage architecture
US20190004990A1 (en) 2017-07-01 2019-01-03 Stephen R. Van Doren Techniques to support mulitple interconnect protocols for an interconnect
US11194753B2 (en) 2017-09-01 2021-12-07 Intel Corporation Platform interface layer and protocol for accelerators
US11249779B2 (en) 2017-09-01 2022-02-15 Intel Corporation Accelerator interconnect assignments for virtual environments
US11263143B2 (en) * 2017-09-29 2022-03-01 Intel Corporation Coherent accelerator fabric controller
US10599568B2 (en) 2018-04-09 2020-03-24 Intel Corporation Management of coherent links and multi-level memory
US10528513B1 (en) 2018-04-30 2020-01-07 Xilinx, Inc. Circuit for and method of providing a programmable connector of an integrated circuit device
US10606785B2 (en) 2018-05-04 2020-03-31 Intel Corporation Flex bus protocol negotiation and enabling sequence
US10409743B1 (en) 2018-06-29 2019-09-10 Xilinx, Inc. Transparent port aggregation in multi-chip transport protocols
US11477049B2 (en) 2018-08-02 2022-10-18 Xilinx, Inc. Logical transport over a fixed PCIE physical transport network
US10761985B2 (en) 2018-08-02 2020-09-01 Xilinx, Inc. Hybrid precise and imprecise cache snoop filtering
US10698824B1 (en) 2018-09-25 2020-06-30 Xilinx, Inc. Scalable coherence management independent of transport protocol

Also Published As

Publication number Publication date
EP3977297A1 (en) 2022-04-06
WO2020242748A1 (en) 2020-12-03
US11586369B2 (en) 2023-02-21
EP3977297B1 (en) 2024-04-17
US20200379664A1 (en) 2020-12-03
JP2022534496A (ja) 2022-08-01
CN113924557A (zh) 2022-01-11

Similar Documents

Publication Publication Date Title
US11586369B2 (en) Hybrid hardware-software coherent framework
JP6381541B2 (ja) データ処理システム中で命令を処理する方法、回路構成、集積回路デバイス、プログラム製品(リモート処理ノード中のアドレス変換データ構造を更新するための変換管理命令)
US9792210B2 (en) Region probe filter for distributed memory system
KR101385430B1 (ko) 영구 메모리들을 위한 캐시 일관성 프로토콜
JP3963372B2 (ja) マルチプロセッサ・システム
US10628314B2 (en) Dual clusters of fully connected integrated circuit multiprocessors with shared high-level cache
US10761986B2 (en) Redirecting data to improve page locality in a scalable data fabric
EP4026005B1 (en) Producer-to-consumer active direct cache transfers
US20200341941A1 (en) Machine learning model updates to ml accelerators
CN113892091A (zh) 通过通信网络连接的操作系统间存储器服务
Kozhin et al. The 5th generation 28nm 8-core VLIW Elbrus-8C processor architecture
US10339059B1 (en) Global socket to socket cache coherence architecture
KR102383040B1 (ko) 홈 에이전트 기반 캐시 전송 가속 기법
US9411730B1 (en) Private memory table for reduced memory coherence traffic
Vermij et al. An architecture for near-data processing systems
US9842050B2 (en) Add-on memory coherence directory
Pei et al. Fusion coherence: scalable cache coherence for heterogeneous kilo-core system
US10482015B2 (en) Ownership tracking updates across multiple simultaneous operations
US11556344B2 (en) Hardware coherent computational expansion memory
JP6565729B2 (ja) 演算処理装置、制御装置、情報処理装置及び情報処理装置の制御方法
KR101192423B1 (ko) 멀티코어 시스템 및 멀티코어 시스템의 메모리 관리 장치