KR20230028145A - 상호 연결된 장치들 간의 데이터 전송을 위한 시스템, 방법 및 장치 - Google Patents

상호 연결된 장치들 간의 데이터 전송을 위한 시스템, 방법 및 장치 Download PDF

Info

Publication number
KR20230028145A
KR20230028145A KR1020220088581A KR20220088581A KR20230028145A KR 20230028145 A KR20230028145 A KR 20230028145A KR 1020220088581 A KR1020220088581 A KR 1020220088581A KR 20220088581 A KR20220088581 A KR 20220088581A KR 20230028145 A KR20230028145 A KR 20230028145A
Authority
KR
South Korea
Prior art keywords
data
consumer
interconnect
memory
prefetcher
Prior art date
Application number
KR1020220088581A
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 KR20230028145A publication Critical patent/KR20230028145A/ko

Links

Images

Classifications

    • 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
    • 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/0866Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
    • G06F12/0868Data transfer between cache memory and other subsystems, e.g. storage devices or host systems
    • 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/1668Details of memory controller
    • G06F13/1689Synchronisation and timing concerns
    • 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/0813Multiuser, multiprocessor or multiprocessing cache systems with a network or matrix configuration
    • 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/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • 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/0866Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
    • G06F12/0873Mapping of cache memory to specific storage devices or parts thereof
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • 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
    • G06F2212/1024Latency reduction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/15Use in a specific computing environment
    • G06F2212/152Virtualized environment, e.g. logically partitioned system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/15Use in a specific computing environment
    • G06F2212/154Networked environment
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/25Using a specific main memory architecture
    • G06F2212/254Distributed memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/31Providing disk cache in a specific location of a storage system
    • G06F2212/311In host system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/454Vector or matrix data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/6024History based prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/6028Prefetching based on hints or prefetch instructions

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

데이터를 전송하는 방법은 생산 장치로부터 인터커넥트(interconnect)를 통해 저장 장치에 데이터를 기입하는 단계, 데이터에 대한 소비자 장치를 결정하는 단계, 저장 장치로부터 데이터를 프리페칭(prefetching)하는 단계 및 결정에 기초하여, 인터커넥트를 통해 데이터를 소비자 장치로 전송하는 단계를 포함할 수 있다. 방법은 저장 장치에 대한 프리페처(prefetcher)에서, 생산 장치와 소비자 장치 간의 관계의 표시를 수신하는 단계 및 표시에 기초하여 소비자 장치를 결정하는 단계를 더 포함할 수 있다. 방법은 생산 장치와 소비자 장치 간의 관계에 기초하여 저장 장치의 스트림에 데이터를 배치하는 단계를 더 포함할 수 있다. 표시는 소비자 장치와 연관된 애플리케이션에 의해 제공될 수 있다. 표시를 수신하는 단계는 인터커넥트에 대한 일관성 있는 메모리 프로토콜을 통해 표시를 수신하는 단계를 포함할 수 있다.

Description

상호 연결된 장치들 간의 데이터 전송을 위한 시스템, 방법 및 장치{SYSTEMS, METHODS, AND APPARATUS FOR TRANSFERRING DATA BETWEEN INTERCONNECTED DEVICES}
본 개시는 일반적으로 데이터 전송에 관한 것이고, 보다 상세하게는 상호 연결된 장치들 간의 데이터 전송을 위한 시스템, 방법 및 장치에 관한 것이다.
몇몇 처리 시스템에서, 계산 작업량은 각각이 프로세서 및 메모리를 포함할 수 있는 복수의 컴퓨팅 장치들 중으로 분할될 수 있다. 컴퓨팅 장치들 중 제1 장치에 의한 제1 계산의 결과로 생성된 데이터는 저장 장치에 저장될 수 있고, 그런 다음 컴퓨팅 장치들 중 제2 장치로 전송되어, 제2 계산의 입력으로 사용될 수 있다. 호스트 장치는 컴퓨팅 장치들과 저장 장치 간의 데이터 이동을 조정할 수 있다.
배경 기술에서 개시된 위의 정보는 발명의 배경에 대한 이해를 향상시키기 위한 것일 뿐이므로 선행 기술을 구성하지 않는 정보를 포함할 수 있다.
본 개시는 적어도 상술한 문제점들 및/또는 단점들을 다루고, 적어도 후술되는 장점들을 제공하기 위해 이루어진다.
데이터를 전송하는 방법은 생산 장치로부터 인터커넥트(interconnect)를 통해 저장 장치에 데이터를 기입하는 단계, 데이터에 대한 소비자 장치를 결정하는 단계, 저장 장치로부터 데이터를 프리페칭(prefetching)하는 단계 및 결정에 기초하여, 인터커넥트를 통해 데이터를 소비자 장치로 전송하는 단계를 포함할 수 있다. 방법은 저장 장치에 대한 프리페처(prefetcher)에서, 생산 장치와 소비자 장치 간의 관계의 표시를 수신하는 단계 및 표시에 기초하여 소비자 장치를 결정하는 단계를 더 포함할 수 있다. 방법은 생산 장치와 소비자 장치 간의 관계에 기초하여 저장 장치의 스트림에 데이터를 배치하는 단계를 더 포함할 수 있다. 표시는 소비자 장치와 연관된 애플리케이션에 의해 제공될 수 있다. 표시를 수신하는 단계는 인터커넥트에 대한 일관성 있는 메모리 프로토콜을 통해 표시를 수신하는 단계를 포함할 수 있다. 일관성 있는 메모리 프로토콜을 통해 표시를 수신하는 단계는 일관성 있는 메모리 프로토콜의 하나 이상의 필드를 통해 생산자 ID(identifier) 및 소비자 ID를 수신하는 단계를 포함할 수 있다. 방법은, 저장 장치에 대한 프리페처에서, 생산 장치 및 소비자 장치의 액세스 패턴을 검출하는 단계 및 액세스 패턴에 기초하여 소비자 장치를 결정하는 단계를 더 포함할 수 있다. 방법은, 호스트에 의해, 데이터에 대한 소비자 장치의 메모리를 할당하는 단계를 더 포함할 수 있다. 방법은, 저장 장치에 의해, 데이터에 대한 소비자 장치의 메모리를 할당하는 단계를 더 포함할 수 있다. 소비자 장치의 메모리는 예비 메모리를 포함할 수 있다. 방법은, 호스트에 의해, 소비자 장치의 메모리에 대한 매핑을 업데이트하는 단계를 더 포함할 수 있다. 전송은 소비자 장치의 계산 동작과 중첩될 수 있다. 방법은 기입 상태를 저장 장치에 대한 프리페처에 통지하는 단계를 더 포함할 수 있다. 통지하는 단계는 메모리 위치에 기입하는 단계를 포함할 수 있다.
장치는 인터커넥트 인터페이스, 저장 매체 및 프리페처를 포함하고, 프리페처는 저장 매체 내에 저장된 데이터에 대한 소비자 장치의 결정을 수행하고, 장치로부터 데이터를 프리페치(prefetch)하고, 결정에 기초하여, 인터커넥트 인터페이스를 통해 소비자 장치로 데이터를 전송할 수 있다.
장치는 데이터의 생산자 장치와 소비자 장치 간의 관계에 대한 정보를 저장하는 데이터 구조를 더 포함할 수 있다. 데이터 구조는 관계를 위한 생산자 ID(identifier) 및 소비자 ID를 포함할 수 있다. 장치는 관계에 기초하여 저장 매체의 스트림에 인터커넥트 인터페이스를 통해 수신된 데이터를 저장하는 멀티-스트림 인터페이스를 더 포함할 수 있다. 프리페처는 소비자 장치 및 데이터의 생산자 장치에 대한 액세스 패턴을 결정하는 검출 로직을 포함할 수 있다.
시스템은 인터커넥트, 인터커넥트에 연결된 생산자 장치, 인터커넥트에 연결된 소비자 장치, 인터커넥트에 연결되고, 인터커넥트를 통해 생산자 장치로부터 수신된 데이터를 저장하는 저장 장치 및 인터커넥트에 연결된 프리페처를 포함하고, 프리페처는 생산자 장치에 기초하여 소비자 장치의 결정을 수행하고, 데이터를 프리페치하고, 결정에 기초하여, 인터커넥트를 통해 소비자 장치에 데이터를 전송할 수 있다.
생산자 장치는 인터커넥트를 통해 생산자 장치로부터 수신된 데이터의 상태를 프리페처에 통지할 수 있다. 시스템은 인터커넥트에 연결된 호스트 장치를 더 포함할 수 있다. 호스트 장치는, 인터커넥트를 통해, 생산자 장치와 소비자 장치 간의 관계에 대한 정보를 프리페처로 보낼 수 있다. 호스트 장치는 생산자 장치, 소비자 장치 및 저장 장치 간의 메모리 일관성을 유지하기 위한 일관성 엔진을 포함할 수 있다.
도면들은 반드시 일정한 비율로 그려진 것은 아니며, 유사한 구조들 또는 기능들의 요소들은 일반적으로 도면 전체에 걸쳐 예시적인 목적들로 유사한 참조 부호들 또는 부분들로 표시될 수 있다. 도면들은 이하에서 설명된 다양한 실시예들의 설명을 용이하게 하기 위한 것일 뿐이다. 도면들은 이하에서 개시된 교시들의 모든 측면을 설명하지 않고, 청구항들의 범위를 제한하지 않는다. 도면들이 흐려지는 것을 방지하기 위해 모든 구성요소들, 연결들 및 유사한 사항이 도시되지 않을 수 있으며, 모든 구성요소들이 참조 부호를 가지지 않을 수 있다. 그러나, 컴포넌트 구성들의 패턴들은 도면들로부터 쉽게 알 수 있다. 첨부된 도면들은, 본 명세서와 함께, 본 개시의 예시적인 실시예들을 도시한 것으로, 상세한 설명과 함께 본 개시의 원칙들을 설명하기 위한 것이다.
도 1은 본 개시의 예시적인 실시예들에 따른 다수의 컴퓨팅 장치들 중에서 처리 작업량을 분할하기 위한 시스템의 실시예를 도시한다.
도 2는 본 개시의 예시적인 실시예들에 따른 데이터 프리페칭 및 전송을 하는 시스템의 실시예를 도시한다.
도 3은 본 개시의 예시적인 실시예들에 따른 데이터 프리페칭 및 전송을 하는 시스템의 예시적인 실시예를 도시한다.
도 4는 본 개시의 예시적인 실시예들에 따른 데이터를 저장하기 위한 방법의 예시적인 실시예를 도시한다.
도 5는 본 개시의 예시적인 실시예들에 따른 데이터의 저장, 프리페칭 및 전송을 위한 방법의 예시적인 실시예를 도시한다.
도 6은 본 개시의 예시적인 실시예들에 따른 데이터의 프리페칭을 위한 방법의 예시적인 실시예를 도시한다.
도 7은 본 개시의 예시적인 실시예들에 따른 호스트-기반의 메모리 할당 방법의 예시적인 실시예를 도시한다.
도 8은 본 개시의 예시적인 실시예들에 따른 통합된 메모리 구조의 예시적인 실시예를 도시한다.
도 9는 본 개시의 예시적인 실시예들에 따른 저장 장치-기반의 메모리 할당 방법의 예시적인 실시예를 도시한다.
도 10은 본 개시의 예시적인 실시예들에 따른 메모리 할당 방법의 예시적인 실시예를 도시한다.
도 11은 본 개시의 예시적인 실시예들에 따른 데이터의 저장, 프리페칭 및 전송을 위한 방법의 예시적인 실시예를 도시한다.
도 12는 본 개시의 예시적인 실시예들에 따른 이종 메모리 제어 시스템의 예시적인 실시예를 도시한다.
도 13은 본 개시의 예시적인 실시예들에 따른 데이터 프리페칭 및 전송을 구현하기 위해 사용될 수 있는 호스트 장치의 예시적인 실시예를 도시한다.
도 14는 본 개시의 예시적인 실시예들에 따른 데이터 프리페칭 및 전송을 구현하기 위해 사용될 수 있는 장치의 예시적인 실시예를 도시한다.
도 15는 본 개시의 예시적인 실시예들에 따른 데이터 전송을 위한 방법의 실시예를 도시한다.
본 개시의 예시적인 실시예에 따른 저장 장치는 저장 장치에 저장된 데이터를 프리페치(prefetch)하고, 이를 계산 또는 다른 처리를 위해 데이터를 사용할 수 있는 소비자 장치로 전송할 수 있다. 몇몇 실시예에서, 이는 장치들 간의 데이터 전송에서 병목이 될 수 있는 호스트의 관여를 감소시키거나 제거할 수 있다. 구현 세부 사항들에 따라, 데이터의 프리페칭(prefetching)과 소비자 장치로의 전송은 액세스 지연시간 및/또는 동기화 오버헤드를 감소시키거나, 데이터 I/O(Input and/or Output) 동작이 소비자 장치에서의 데이터 처리 동작들과 중첩 가능하도록 하여, 처리량을 향상시킵니다.
몇몇 실시예에서, 생산자 장치 및 소비자 장치는 ML(Machine Learning) 훈련 및/또는 추론과 같은 분산된 계산들을 수행하기 위해 파이프라인 구성의 인터커넥트(interconnect)를 통해 연결될 수 있다. 예를 들어, 생산자 장치(예로, 가속기, GPU(Graphics Processing Unit) 및/또는 유사한 장치와 같은 컴퓨팅 장치)는 인터커넥트를 통해 저장 장치에 계산의 첫 번째 단계 결과들을 기입할 수 있다. 소비자 장치(예로, 가속기, GPU 및/또는 유사한 장치와 같은 다른 컴퓨팅 장치)는 저장 장치로부터 결과들을 독출할 수 있고, 계산의 다음 단계를 위해 결과들을 사용할 수 있다. 몇몇 실시예에서, 저장 장치 내의 프리페처(prefetcher)는 생산자 장치에 의해 저장된 결과들을 프리페치할 수 있고, 계산의 다음 단계를 위해 결과들을 사용할 소비자 장치를 예상하여 소비자 장치로 결과들을 전송할 수 있다. 구현 세부사항들에 따라, 이는 소비자 장치에 의해 수행되는 다른 처리들과 병렬로 소비자 장치로 데이터가 전송되는 것을 가능하게 함으로써, 메모리 및/또는 저장 장치의 액세스 지연시간을 줄이거나 숨길 수 있다.
저장 장치는 본 개시의 예시적인 실시예들에 따른 다양한 기술들에 기초하여 프리페치된 데이터를 전송할 소비자 장치를 결정할 수 있다. 예를 들어, 몇몇 실시예들에서, 저장 장치를 위한 프리페처는 하나 이상의 생산자 장치 및 하나 이상의 소비자 장치 간의 생산자-소비자 관계를 나타내는 애플리케이션(예로, 인터커넥트에 연결된 호스트에서 동작하는 애플리케이션)으로부터 정보를 수신할 수 있다. 따라서, 특정 생산자 장치가 저장 장치(예로, 특정 위치에 기입된 특정 양의 데이터)에 데이터를 기입할 때, 프리페처는 데이터를 프리페치하고 특정 소비자 장치로 이를 전송할 수 있다. 다른 예로, 몇몇 실시예들에서, 프리페처는 어느 소비자 장치가 특정 생산자 장치에 의해 저장된 데이터를 사용할 지 예측할 수 있도록 하는 하나 이상의 액세스 패턴을 검출하기 위해 저장 장치에 대한 독출 및/또는 기입 동작들을 감시할 수 있다.
소비자 장치에 프리페치된 데이터의 기입을 위한 대상 위치를 제공하기 위해, 저장 장치는 본 개시의 예시적 실시예에 따른 다양한 기술들에 기초하여 소비자 장치에 메모리를 할당할 수 있다. 예를 들어, 몇몇 실시예들에서, 저장 장치는 소비자 장치에 대상 메모리를 할당할 수 있는 호스트에 메모리 할당 요청을 보낼 수 있다(예로, 호스트의 VMM(Virtual Memory Manager)에). 다른 예로서, 저장 장치는 대상 메모리 자체를 할당할 수 있다(예로, 프리페처에서 VMM을 사용하여). 저장 장치가 대상 메모리를 할당하는 몇몇 실시예들에서, 저장 장치는 소비자 장치의 메모리의 예약된 영역에 프리페치된 데이터를 복사할 수 있다.
몇몇 실시예들에서, 생산자 장치, 소비자 장치, 저장 장치 및/또는 호스트 간의 인터커넥트는 최소한 부분적으로 일관성 있는 메모리 인터페이스와 함께 및/또는 일관성 있는 메모리 프로토콜들을 사용하여 구현될 수 있다. 이러한 실시예들에서, 일관성 있는 메모리 인터페이스 및/또는 프로토콜의 하나 이상의 측면은 본 개시의 예시적인 실시예에 따라 하나 이상의 특징을 구현하기 위해 사용될 수 있다. 예를 들어, 몇몇 실시예들에서, 일관성 엔진은 태그 필드와 같은 하나 이상의 프로토콜 필드들을 사용하여 하나 이상의 생산자-소비자 관계에 관한 정보를 프리페처로 보낼 수 있다.
몇몇 실시예들에서, 저장 장치는 하나 이상의 생산자 장치로부터의 데이터를 저장 장치의 하나 이상의 스트림에 저장할 수 있다. 예를 들어, 유사한 수명들 및/또는 유사한 생산자-소비자 관계들을 가지는 데이터는 동일한 스트림들에 배치될 수 있다. 따라서, 몇몇 실시예들에서, 동일한 소비자 장치로 향한 데이터는 동일한 스트림에 배치될 수 있다. 구현 세부사항들에 따라, 이는, 예를 들어, 특정 소비자 장치로 전송된 몇몇 또는 모든 데이터가 동시에 효력을 잃기 때문에, 저장 장치에서 가비지 콜렉션 및/또는 블록 소거 동작들을 향상시킬 수 있다.
여기에 개시된 원칙들은 독립적인 유용성을 가지고 개별적으로 구현될 수 있으며, 모든 실시예가 모든 원칙을 활용할 수 있는 것은 아니다. 그러나, 원칙들은 또한 다양한 조합들로 구현될 수 있고, 그 중 일부는 시너지 효과로 개별 원칙들의 이점들을 증폭시킬 수 있다.
도 1은 본 개시의 예시적인 실시예들에 따른 다수의 컴퓨팅 장치들 중에서 처리 작업량을 분할하기 위한 시스템의 실시예를 도시한다. 도 1에 도시된 시스템은 호스트 장치(102), 네 개의 컴퓨팅 장치들(104a, 104b, 104c, 104d; 이는 집합적으로 104로 참조될 수 있다), 및 두 개의 저장 장치들(106a, 106b; 이는 집합적으로 106으로 참조될 수 있다). 호스트 장치(102), 컴퓨팅 장치들(104) 및 저장 장치들(106)은 인터커넥트(108)를 통해 통신할 수 있다. 컴퓨팅 장치들(104) 각각은, 이 실시예에서, 신경망으로서 구현될 수 있는 ML 작업량(310)에 대응되는 단계들을 처리할 수 있다. 따라서, 컴퓨팅 장치들(104a, 104b, 104c, 104d)은 신경망 작업량(110)에 대응되는 단계들(110a, 110b, 110c, 110d) 각각을 처리할 수 있다. 마지막 단계(110d)는, 예를 들어, 하나 이상의 FC(Fully Connected) 층들 및 소프트맥스 함수를 포함할 수 있다.
호스트 장치(102)는 CPU(Central Processing Unit; 112) 및 일 실시예에서 DRAM(Dynamic Random Access Memory)으로 구현될 수 있는 메모리(114)를 포함할 수 있다. 컴퓨팅 장치들(104a, 104b, 104c, 104d) 각각은 대응되는 GPU(116a, 116b, 116c, 116d) 각각을 포함할 수 있다(각각, GPU0, GPU1, GPU2, GPU3으로 표시). GPU들(116a, 116b, 116c, 116d)은 집합적으로 116으로 참조될 수 있다. 컴퓨팅 장치들(104a, 104b, 104c, 104d) 각각은 대응되는 로컬 메모리(118a, 118b, 118c, 118d) 각각을 더 포함할 수 있다(각각, DRAM0, DRAM1, DRAM2, DRAM3으로 표시).
로컬 메모리(118a, 118b, 118c, 118d)들은 집합적으로 118로 참조될 수 있다. 저장 장치들(106a, 106b) 각각은 대응되는 로컬 저장 매체(120a, 120b) 각각을 포함할 수 있다(각각, Storage0, Storage1로 표시). 로컬 저장 매체(120a, 120b)는 집합적으로 120으로 참조될 수 있다. 저장 장치들(106a, 106b) 각각은 대응되는 컨트롤러(122a, 122b) 각각을 더 포함할 수 있다(각각 Controller0, Controller1로 표시). 컨트롤러(122a, 122b)는 집합적으로 122로 참조될 수 있다.
몇몇 실시예들에서, 호스트 장치(102)에서 실행되는 애플리케이션은 개별 로컬 메모리들 간의 데이터 이동을 조정할 수 있다. 예를 들어, 호스트 장치(102)는 컴퓨팅 장치들(104) 중 하나의 로컬 메모리(118)로부터 저장 장치(106)의 로컬 저장 매체(120)로 데이터를 전송하기 위해 하나 이상의 명령을 저장 장치들(106) 중 하나로 보낼 수 있다. 이는 로컬 메모리(118)로부터 데이터를 풀(pull)하는 것으로 참조될 수 있다. 호스트 장치(102)는 또한 저장 장치(106)의 로컬 저장 매체(120)로부터 컴퓨팅 장치들(104) 중 하나의 로컬 메모리(118)로 데이터를 전송하기 위해 하나 이상의 명령을 저장 장치들(106) 중 하나로 보낼 수 있다. 이는 로컬 메모리(118)로 데이터를 푸시(push)하는 것으로 참조될 수 있다.
도 1에 도시된 실시예에서, 호스트 장치(102)의 CPU(112)에 의해 조정된 예시적 데이터 흐름은 데이터 전송들 (1), (2), (3), (4), (5), (6) 및 (7)로 보여진다. 따라서, 동작 (1)에서, 제1 데이터는 먼저 Storage0으로부터 DRAM0으로 푸시될 수 있고, 이는 GPU0에 의해 수행되는 계산의 입력으로 독출되고 사용될 수 있다. 동작 (2)에서, 제2 데이터는 Storage0으로부터 DRAM1으로 푸시될 수 있다. 그러나, GPU1에서 제2 데이터를 사용한 계산은 GPU0에 의해 수행된 계산의 결과가 DRAM0에 제3 데이터로 저장된 후 동작 (3)에서 DRAM1으로 전송될 때까지 대기할 수 있다. 제2 및 제3 데이터는 GPU1에 의해 수행된 계산의 입력으로 사용될 수 있고, 이의 결과는 DRAM1에 제4 데이터로 기입될 수 있다. 제4 데이터는 그 다음 동작 (4)에서 Storage1로 풀될 수 있다. 제5 데이터는 동작 (5)에서 Storage1로부터 DRAM2로 푸시될 수 있다. 제5 데이터는 GPU2에 의한 계산의 입력으로 사용될 수 있고, 이의 출력은 DRAM2에 제6 데이터로 기입될 수 있다. 제6 데이터는 동작 (6)에서 DRAM3으로 전송된 후, GPU3에 의해 수행되는 계산의 입력으로 사용될 수 있고, 이의 출력은 DRAM3에 제7 데이터로 기입될 수 있다. 제7 데이터는 그 다음 동작 (7)에서 Storage1로 풀될 수 있다.
구현 세부사항들에 따라, 호스트 장치(102)는 몇몇 또는 모든 데이터 전송들을 조정하는 것에 관여할 수 있기 때문에 장치들 간의 데이터 이동에 대한 병목이 될 수 있다. 따라서, 저장 장치들(106)은 데이터 이동에 수동적인 참가자들일 수 있다. 또한, 몇몇 실시예들에서, 로컬 메모리들(118) 및 로컬 저장 매체(120) 간의 데이터 전송들은 처리 커널(kernel)이 대응되는 GPU(116)에서 실행되지 않는 동안 발생할 수 있다.
도 2는 본 개시의 예시적인 실시예들에 따른 데이터 프리페칭 및 전송을 하는 시스템의 실시예를 도시한다. 도 2에 도시된 시스템은 제1 컴퓨팅 장치(204a), 제2 컴퓨팅 장치(204b), 저장 장치(206) 및 프리페처(224)를 포함할 수 있고, 이들 모두는 인터커넥트(208)를 통해 통신할 수 있다. 제1 및 제2 컴퓨팅 장치(204a, 204b) 각각은 대응되는 프로세서 또는 다른 GI(General Initiator)(216a, 216b) 각각 및 대응되는 메모리(218a, 218b) 각각을 포함할 수 있다. 저장 장치(206)는 저장 매체(220)를 포함할 수 있다.
몇몇 실시예들에서, 하나 이상의 컴퓨팅 장치들(204)은 소비자 장치로서 동작할 수 있는 하나 이상의 컴퓨팅 장치들(204)에 의해 소비될 수 있는 데이터를 생산(예로, 계산 또는 다른 처리의 결과로서)할 수 있는 생산자 장치로서 동작할 수 있다. 몇몇 상황들에서, 컴퓨팅 장치(204)는 생산자 장치 및 소비자 장치 둘 다로서 동작할 수 있다.
프리페처(224)는 본 개시의 예시적인 실시예들에 따른 인터커넥트(208)를 통해 액세스할 수 있는 하나 이상의 컴퓨팅 장치들(204) 및/또는 다른 장치들로부터/로 저장 및/또는 전송을 위한 하나 이상의 기술을 구현할 수 있다. 예를 들어, 프리페처(224)는 저장 장치(206)(예로, 저장 매체(220))의 로컬 메모리로부터 데이터를 프리페치하고 하나 이상의 컴퓨팅 장치(204)(예로, 프로세서 또는 데이터를 사용할 수 있는 다른 GI(216)를 가진 장치의 메모리, 또는 프로세서 또는 데이터를 사용할 수 있는 다른 GI에 가장 가깝거나 상대적으로 가까울 수 있는 장치의 메모리)의 로컬 메모리(218)로 푸시할 수 있는 프로그래밍 가능한 프리페처로 구현될 수 있다. 따라서, 몇몇 실시예들에서, 소비자 장치는 프로세서 또는 전송된 데이터를 사용할 수 있는 다른 GI를 포함할 수 있는 컴퓨팅 장치(204)거나, 소비자 장치는 컴퓨팅 장치(204) 또는 프로세서 또는 전송된 데이터를 사용할 수 있는 다른 GI(예로, 인터커넥트(208)에 연결된 또 다른 장치)를 위해 전송된 데이터를 저장할 수 있는 메모리를 가지는 다른 장치일 수 있다.
몇몇 실시예들에서, 프리페처(224)는 하나 이상의 생산자 장치 및 하나 이상의 소비자 장치 간의 하나 이상의 생산자-소비자 관계들을 나타내는 애플리케이션(예로, 인터커넥트에 연결된 호스트에서 실행되는 애플리케이션)으로부터 프리페처가 수신할 수 있는 정보에 기초하여, 데이터를 프리페치 및/또는 푸시할 소비자 장치를 결정할 수 있다. 몇몇 실시예들에서, 프리페처(224)는 어느 소비자 장치가 특정 생산자 장치에 의해 저장된 데이터를 사용할 지 예측할 수 있도록 하는 하나 이상의 액세스 패턴을 검출하기 위해 하나 이상의 저장 장치에 대한 하나 이상의 독출 및/또는 기입 동작을 감시함으로써 소비자 장치를 결정할 수 있다. 몇몇 실시예들에서, 프리페처(224)는 독출 및/또는 기입 동작들을 감시 및/또는 하나 이상의 액세스 패턴을 검출하는 검출 로직(225)을 포함할 수 있다.
몇몇 실시예들에서, 프리페처(224)는 호스트 장치에 의한 메모리 할당을 요청함으로써, 직접 메모리를 할당함으로써, 또는 임의의 다른 방식으로 소비자 장치에 메모리를 할당할 수 있다.
구현 세부사항들에 따라, 도 2에 도시된 실시예는 하나 이상의 컴퓨팅 장치, 저장 장치들 및/또는 인터커넥트(208)를 통해 액세스 가능한 다른 장치들에 대한 메모리 및/또는 저장 장치 액세스 지연시간을 감소, 제거 및/또는 숨길 수 있다. 이는 데이터 이동을 조정하기 위한 호스트 및/또는 CPU에 대한 의존을 감소 또는 제거할 수 있고, 그 결과로 CPU 활용을 줄일 수 있게 한다. 또한, 구현 세부사항들에 따라, 소비자 및/또는 생산자 장치들로부터/로의 데이터 전송들은 소비자 및/또는 생산자 장치들에서의 다른 처리(예로, 커널 실행)와 중첩될 수 있고, 이에 따라 처리량을 향상시킬 수 있다.
몇몇 실시예들에서, 프리페처(224)는 저장 장치(206)와 통합될 수 있다. 예를 들어, 몇몇 실시예들에서 프리페처는 저장 장치(206)에 대한 저장 장치 컨트롤러의 일부로 부분적으로 또는 전체적으로 구현될 수 있다. 다른 예로서, 몇몇 실시예뜰에서, 프리페처(224)는 호스트 장치 및/또는 하나 이상의 컴퓨팅 장치(204)의 일부로 부분적으로 또는 전체적으로 구현될 수 있다.
컴퓨팅 장치들(204)은 메모리 및/또는 프로세서 또는 저장 장치(206)에 저장될 수 있는 데이터를 생산 및/또는 사용할 수 있는 다른 GI(216)를 포함할 수 있는 장치의 임의의 형태로 구현될 수 있다. 예시들은 GPU들, 가속기들, NPU(Neural Processing Unit)들, TPU(Tensor Processing Unit)들, NIC(Network Interface Card)들 및/또는 유사한 사항을 포함할 수 있다.
임의의 메모리들(218a, 218b) 및/또는 저장 매체(220)는 임의의 유형의 고체 상태 매체, 자기 매체, 광학 매체 및/또는 유사한 사항을 포함하는 임의의 유형의 메모리 및/또는 저장 매체, DRAM, SRAM(Static Random Access Memory) 및/또는 유사한 사항과 같은 임의의 유형의 휘발성 메모리, NAND 플래시 메모리와 같은 플래시 메모리, 교차 그리드 비휘발성 메모리와 같은 PMEM(Persistent Memory), 벌크 저항 변화가 있는 메모리, PCM(Phase Change Memory) 등을 포함하는 임의의 유형의 비휘발성 메모리 및/또는 유사한 사항 또는 이들의 임의의 조합으로 구현될 수 있다.
인터커넥트(208)는 임의의 유형의 인터페이스 및/또는 PCIe(Peripheral Component Interconnect Express), NVMe(Nonvolatile Memory Express), NVMe-oF(NVMe-over-fabric), 이더넷(Ethernet), TCP/IP(Transmission Control Protocol/Internet Protocol), RDMA(Remote Direct Memory Access), ROCE(RDMA over Converged Ethernet), 파이버채널(FibreChannel), 인피니밴드(InfiniBand), SATA(Serial ATA), SCSI(Small Computer Systems Interface), SAS(Serial Attached SCSI), iWARP, 및/또는 유사한 사항 또는 이들의 임의의 조합을 포함하는 프로토콜 중 하나 이상으로 구현될 수 있다. 몇몇 실시예들에서, 인터커넥트(208)는 하나 이상의 메모리 시멘틱(Semantic) 및/또는 일관성 있는 메모리 인터페이스 및/또는 CXL(Compute Express Link), 및/또는 CXL.mem, CXL.io, 및/또는 CXL.cache, Gen-Z, CAPI(Coherent Accelerator Processor Interface), CCIX(Cache Coherent Interconnect for Accelerators), 및/또는 유사한 사항 또는 이들의 임의의 조합과 같은 프로토콜들로 구현될 수 있다.
도시의 목적들 상, 도 2에 도시된 실시예는 저장 장치로서 구현된 장치(206)를 포함할 수 있다. 그러나, 본 개시의 원칙들은 본 개시의 예시적인 실시예들에 따라 데이터를 저장, 프리페치 및/또는 전송을 위해 사용될 수 있는 임의의 유형의 장치로 구현될 수 있다. 데이터를 프리페치 및 전송할 수 있는 장치들의 예시들은 캐싱 장치들(예로, CXL 유형 1 장치들), 메모리가 있는 가속기들(예로, CXL 유형 2 장치들), 메모리 버퍼 장치들(예로, CXL 유형 3 장치들), 메모리가 있는 NIC들 및/또는 유사한 사항을 포함할 수 있다.
도 3은 본 개시의 예시적인 실시예들에 따른 데이터 프리페칭 및 전송을 하는 시스템의 예시적인 실시예를 도시한다. 도 3에 도시된 실시예는, 예를 들어, 도 2에 도시된 시스템 및/또는 여기에 개시된 임의의 프리페칭 및/또는 데이터 전송 특징들을 구현하기 위해 사용될 수 있다.
도 3을 참조하면, 시스템은 호스트 장치(302), 임의의 개수(이 예시에서는 4개)의 컴퓨팅 장치들(304a, 304b, 304c, 304d; 이는 집합적으로 304로 참조될 수 있다) 및 임의의 개수(이 예시에서는 2개)의 저장 장치들(306a, 306b; 이는 집합적으로 306으로 참조될 수 있다). 호스트 장치(302), 컴퓨팅 장치들(304), 및/또는 저장 장치들(306)은 인터커넥트(308)를 통해 통신할 수 있다.
도시의 목적들 상, 컴퓨팅 장치들(304) 각각은, 이 실시예에서, 신경망으로서 구현될 수 있는 ML 작업량(310)에 대응되는 단계들을 처리할 수 있다. 따라서, 컴퓨팅 장치들(304a, 304b, 304c, 304d)은 신경망 작업량(310)에 대응되는 단계들(310a, 310b, 310c, 310d) 각각을 처리할 수 있다. 마지막 단계(310d)는, 예를 들어, 하나 이상의 FC(Fully Connected) 층들 및 소프트맥스 함수를 포함할 수 있다. 그러나, 도 3에 도시된 시스템은 임의의 다른 유형의 계산들 및/또는 처리를 위해 사용될 수 있다.
호스트 장치(302)는 CPU(Central Processing Unit; 312) 및 일 실시예에서 DRAM(Dynamic Random Access Memory)으로 구현될 수 있으나, 임의의 다른 유형의 메모리로 또한 구현될 수 있는 메모리(314)를 포함할 수 있다.
도시의 목적들 상, 컴퓨팅 장치들(304a, 304b, 304c, 304d) 각각은 대응되는 GPU(316a, 316b, 316c, 316d) 각각을 포함할 수 있다(각각, GPU0, GPU1, GPU2, GPU3으로 표시). GPU들(316a, 316b, 316c, 316d)은 집합적으로 316으로 참조될 수 있다. 그러나, 임의의 다른 유형의 컴퓨팅 및/또는 처리 장치가 사용될 수 있다.
컴퓨팅 장치들(304a, 304b, 304c, 304d) 각각은 대응되는 로컬 메모리(318a, 318b, 318c, 318d) 각각을 더 포함할 수 있다(각각, DRAM0, DRAM1, DRAM2, DRAM3으로 표시). 로컬 메모리(318a, 318b, 318c, 318d)들은 집합적으로 318로 참조될 수 있다. 도시의 목적들 상, 메모리들(318)은 도 3에 보여지는 DRAM으로 구현될 수 있으나, 임의의 다른 유형의 메모리가 사용될 수 있다.
저장 장치들(306a, 306b) 각각은 대응되는 로컬 저장 매체(320a, 320b) 각각을 포함할 수 있다(각각, Storage0, Storage1로 표시). 로컬 저장 매체(320a, 320b)는 집합적으로 320으로 참조될 수 있다. 도시의 목적들 상, 저장 매체(320)는 NAND 플래시 메모리인 것으로 가정될 수 있으나, 임의의 다른 유형의 메모리 및/또는 저장 매체가 사용될 수 있다.
저장 장치들(306a, 306b) 각각은 대응되는 프리페처(324a, 324b) 각각을 더 포함할 수 있다(각각 Prefetcher0, Prefetcher1로 표시). 프리페처(324a, 324b)는 집합적으로 324로 참조될 수 있다.
도시의 목적들 상, 인터커넥트(308)는 CXL로 구현될 수 있으나, 임의의 다른 유형의 인터커넥트(들) 및/또는 프로토콜(들)이 사용될 수 있다.
하나 이상의 CPU(312), GPU들(316) 및/또는 프리페처들(324)은, 예를 들어, 호스트 장치(302)에 의해 GI ID(General Initiator Identifier)에 할당될 수 있다. 도 3에 도시된 실시예에서, CPU(312), GPU들(316a, 316b, 316c, 316d) 및 프리페처들(324a, 324b)은 각각 GI ID 0, GI ID 1, GI ID 2, GI ID 3, GI ID 4, GI ID 5 및 GI ID 6에 할당될 수 있다. GI ID들은, 예를 들어, 생산자-소비자 관계들의 추적 및/또는 시스템을 통한 데이터, 명령 및/또는 유사한 사항의 전송을 용이하게 하기 위해 사용될 수 있다.
임의의 프리페처들(324)은 인터커넥트(308)를 통한 연결들을 사용하여 임의의 메모리들(314 및/또는 318)로 데이터를 푸시할 수 있고, 이의 몇몇 예시들이 점선 화살표들(326)에 의해 보여진다. 임의의 프리페처들(324)은 인터커넥트(308)를 통한 연결들을 사용하여 임의의 GPU들(316) 및/또는 CPU(312)와 통신할 수 있고, 이의 몇몇 예시들이 실선 화살표들(328)에 의해 보여진다.
도 4는 본 개시의 예시적인 실시예들에 따른 데이터를 저장하기 위한 방법의 예시적인 실시예를 도시한다. 도 4에 도시된 실시예는, 예를 들어, 도 2 및/또는 도 3에 도시된 것을 포함하여, 여기에 개시된 임의의 시스템들과 함께 사용될 수 있다.
도 4를 참조하면, 저장 장치(406)는 멀티-스트림 인터페이스(430), FTL(Flash Translation Layer; 432) 및 저장 매체(420)(이 예시에서는, NAND 플래시 메모리)를 포함할 수 있다.
호스트 장치(402)에서 실행되는 애플리케이션(403)은 프리페처(424)에 하나 이상의 생산자-소비자 관계들의 표시를 제공할 수 있다. 하나 이상의 표시(힌트들로서 참조될 수도 있음)는 프리페처(424)에 의해 저장될 수 있는 표 1에 도시된 바와 같이 생산자 GI ID, 소비자 GI ID, 데이터 주소 및/또는 데이터 사이즈(바이트들, 페이지들, 블록들 및/또는 유사한 사항들로 표현)와 같은 정보를 포함할 수 있다.
생산자 GI ID 소비자 GI ID 데이터 주소 데이터 크기
1 2 0x10000000 128
2 3 0x20000000 1024
3 4 0x30000000 512
몇몇 실시예들에서, 애플리케이션(403)은, 예를 들어, 태그 필드 및/또는 메타값 필드 및 메타필드 필드와 같은 하나 이상의 CXL 필드를 사용하여 데이터 독출 및/또는 기입 중에 프리페처에 생산자 및/또는 소비자 GI ID들을 전달할 수 있다. 호스트 장치(402) 및/또는 애플리케이션(403)은, 예를 들어, 화살표(434)에 의해 보여진 도 3에 도시된 대응되는 호스트 장치(302)와 함께 구현될 수 있다. 몇몇 실시예들에서, 애플리케이션(403)은 프로그램적으로, 예를 들어, API(Application Programming Interface)를 통해 프리페처를 프로그래밍함으로써, 프리페처(424)에 하나 이상의 생산자-소비자 관계들의 표시를 제공할 수 있다. 몇몇 실시예들에서, 프리페처(424)는 하나 이상의 생산자-소비자 관계를 검출하기 위해 데이터 독출 및/또는 기입을 감시하기 위한 검출 로직(425)을 더 포함할 수 있다.
도 4를 참조하면, 몇몇 실시예들에서, 애플리케이션(403) 및/또는 생산자 장치에 의해 제공된 데이터는 하나 이상의 스트림 및/또는, 예를 들어, 하나 이상의 생산자-소비자 관계 및/또는 하나 이상의 데이터 수명에 기초하여 저장 장치의 저장 매체(420) 내의 스트림들에 연관된 블록에 저장될 수 있다. 예를 들어, 도 4에 보여진 바와 같이, 애플리케이션(403) 내의 데이터 페이지들(Data0, Data1, Data2, Data3, Data4 및/또는 Data5)은 도 4에 보여진 다양한 음영으로 표시된 생산자-소비자 관계들 및/또는 데이터 수명들을 가질 수 있다. 애플리케이션(403)은 화살표(436)로 보여진 바와 같이 프리페처(424)에 데이터 페이지(Data1)에 대한 생산자 GI ID 1 및 소비자 GI ID 2를 제공하는 것으로 보여지고 있다. 표 1에 보여진 것과 같은 생산자-소비자 관계들 및/또는 데이터 수명들에 기초하여, 프리페처는, 다중-스트림 인터페이스(430) 및 FTL(432)을 통해, 스트림 식별자들(Stream ID 0, Stream ID 1, Stream ID 2, Stream ID 3) 각각에 의해 식별되는 하나 이상의 스트림에 연관된 저장 매체(420)의 Block0, Block1, Block2 및/또는 Block3 내의 데이터를 저장할 수 있다.
도 4에 도시된 예시에서, Data1 및 Data5는 Block0에 배치될 수 있고, Data0 및 Data4는 Block1에 저장될 수 있고, Data3은 Block2에 저장될 수 있고, Data2는 Block3에 저장될 수 있다.
따라서, 몇몇 실시예들에서, 프리페처는 동일한 스트림에 연관된 데이터를 배치하기 위하여 스트림-기반 배치를 위한 기존 장치를 활용할 수 있고, 구현 세부사항들에 따라, 컴퓨팅 장치로 데이터가 프리페치 및/또는 푸시되기 위한 효율적인 저장 기술을 제공할 수 있다.
도 5는 본 개시의 예시적인 실시예들에 따른 데이터의 저장, 프리페칭 및 전송을 위한 방법의 예시적인 실시예를 도시한다. 도 5에 도시된 실시예는, 예를 들어, 여기에 개시된 임의의 시스템들 및/또는 방법들과 함께 사용될 수 있다.
도 5를 참조하면, 동작 502에서, 애플리케이션은 저장 장치의 프리페처에 하나 이상의 생산자-소비자 관계의 하나 이상의 표시들을 포함하는 정보를 보낼 수 있다. 프리페처는 GI ID들 및/또는, 예를 들어, 표 1과 같은 데이터 구조의 관계들을 포함할 수 있는 정보를 저장할 수 있다.
동작 504에서, 저장 장치는 장치에 데이터를 저장하기 위해, 예를 들어, 애플리케이션으로부터의 하나 이상의 표시에 기초하여 하나 이상의 데이터 배치 결정을 내릴 수 있다(예로, 프리페처를 사용하여). 예를 들어, 프리페처는 생산자-소비자 관계들의 하나 이상의 표시에 기초하여 호스트 장치 및/또는 하나 이상의 생산자 장치로부터 수신되는 데이터를 저장하기 위한 하나 이상의 스트림을 선택할 수 있다. 동작 506에서, 그 다음 프리페처는 저장 장치의 멀티-스트림 인터페이스를 통해 선택된 스트림들 내에 데이터를 저장할 수 있다.
동작 508에서, 저장 장치는 하나 이상의 생산자 장치와 하나 이상의 소비자 장치 간의 생산자-소비자 관계를 표시할 수 있는 하나 이상의 액세스 패턴을 검출할 수 있다(예로, 프리페처 내의 검출 로직을 사용하여). 액세스 패턴들의 검출은 애플리케이션 및/또는 호스트 장치에 의해 제공된 생산자-소비자 관계의 표시들에 추가되거나 대체될 수 있다. 하나 이상의 표시된 생산자-소비자 관계 및/또는 하나 이상의 검출된 액세스 패턴에 기초하여, 프리페처는 데이터를 프리페치하기 위한 하나 이상의 소비자 장치 및 데이터를 프리페치하기 위한 하나 이상의 시간을 선택할 수 있다. 예를 들어, 프리페처는 소비자 장치의 메모리 내에 데이터를 위한 여유 공간이 있을 때 특정 소비자 장치에 대한 데이터를 프리페치할 수 있다.
동작 510에서, 프리페처는 CXL과 같은 인터커넥트를 통해 소비자 장치에 프리페치된 데이터를 푸시할 수 있다. 몇몇 실시예들에서, 프리페처는 아래에 보다 상세히 개시된 바와 같이 데이터를 푸시하기에 앞서 소비자 장치에 데이터를 위한 대상 공간을 할당하기 위한 하나 이상의 동작을 수행할 수 있다.
몇몇 실시예들에서, 애플리케이션은 프로그램적으로, 예를 들어, API(Application Programming Interface)를 통해 프리페처를 프로그래밍함으로써, 프리페처에 하나 이상의 생산자-소비자 관계들의 표시를 제공할 수 있다. 이러한 배열은, 예를 들어, 사용자 또는 프로그래머가 작업량의 데이터 액세스 패턴들에 대한 통찰력을 가질 수 있는 경우에 사용될 수 있다. 프리페처로 하나 이상의 표시(예로, 힌트들)를 보내기 위한 절차에 대한 의사코드(pseudocode) 정의의 예시는 다음과 같을 수 있다:
send_prefetch_hint (const void * prefetcher, size_t producer_id, size_t consumer_id, const void * buffer_ptr, size_t size, string access_pattern);
<하나 이상의 계산 동작들>
생산자-소비자 관계의 표시와 함께 제공될 수 있는 파라미터들의 예시들은 다음과 같을 수 있다:
Prefetcher: 프리페처 장치
Producer_id: 생산자 장치의 ID
Consumer_id: 소비자 장치의 ID
Buffer_ptr: 생산자에 의해 기입되고 소비자에 의해 독출되는 메모리에 대한 포인터
Size: 생산자에 의해 기입된 메모리의 사이즈
Access_pattern: 순차적, 임의의 또는 런타임에 의해 결정될 수 있는 액세스 패턴
프리페처에 하나 이상의 표시를 보내기 위한 절차의 예시적인 적용은 애플리케이션이 프리페처가 식별할 액세스 패턴을 제공할 수 있는 경우에 다음과 같을 수 있다(예로, 프리페처는 GPU0의 커널 실행의 종료 전에 GPU1에 데이터를 푸시할 수 있다):
send_prefetch_hint (,,,,,"sequential"), 1->4
액세스 패턴이 런타임에 프리페처에 의해 결정될 수 있는 경우에 대한 절차의 예시적인 적용은 다음과 같을 수 있다:
send_prefetch_hint (,,,,,"runtime"), 1->2->3->4
도 6은 본 개시의 예시적인 실시예에 따른 데이터의 프리페칭을 위한 방법의 예시적인 실시예를 도시한다. 도 6에 도시된 실시예는, 예를 들어, 여기에 개시된 임의의 시스템들 및/또는 방법들과 함께 사용될 수 있으나, 도시의 목적들 상, 도 6에 도시된 실시예는 도 3에 도시된 시스템의 맥락에서 설명될 수 있다.
도 6을 참조하면, 동작 1에서, GPU(316a)(GPU0)는 점선(638)으로 표시된 바와 같이 저장 매체(320a)(Staroge0)에 16개의 데이터 요소들을 기입할 수 있다. 기입이 완료되었음을 프리페처(324a)(Prefetcher0)에 통지하기 위해, GPU0은, 예를 들어, CXL 인터커넥트를 사용하여 미리 결정된 메모리 위치에 임의의 데이터를 기입할 수 있다.
프리페처가 런타임에 액세스 패턴을 결정하는 구현에서, Prefetcher0은, 동작에서, GPU0이 데이터(638)를 기입한 후 GPU1이 데이터 요소들(640a, 640b, 640c, 640d)을 순서대로 독출할 수 있음을 관찰할 수 있다. 동작 3에서, 관찰된 액세스 페턴에 기초하여, Prefetcher0은 GPU0이 데이터(638)를 기입하는 것을 관찰할 때 데이터(640)를 프리페치할 수 있다. 대안적으로, 또는 추가적으로, Prefetcher0는 GPU1이 데이터 요소들(640a, 640b, 640c, 640d)을 순차적으로 독출하는 것을 관찰할 수 있고, 따라서 GPU1이 다음에 해당 데이터 요소들을 독출할 것이라는 가정 하에 데이터 요소들(640e, 640f, 640g, 640i)을 프리페치할 수 있다.
GPU0과 GPU1 간의 생산자-소비자 관계가 프리페처에 제공되는 구현에서, Prefetcher0은 동작 2에서 데이터 기입을 관찰할 필요가 없고, 대신, 동작 3에서, Prefetcher0은 GPU0이 데이터(638)를 기입할 때 생산자-소비자 관계에 기초하여 데이터(640)를 프리페치할 수 있다.
몇몇 실시예들에서, Prefetcher0은 소비자 장치의 메모리(318b)(DRAM1)에 사용 가능한 여유 메모리가 있는지 먼저 검증하지 않는 한 프리페치 동작을 수행하지 않을 수 있다. 몇몇 실시예들에서, 프리페처(324a)는, 예를 들어, 조합 및/또는 순차 로직, 하나 이상의 신경망 및/또는 유사한 사항을 사용하여 구현될 수 있다.
동작 4에서, Prefetcher0은 소비자 장치의 DRAM1에 프리페치된 데이터(640)를 푸시할 수 있다.
몇몇 실시예들에서, GPU1은 본 개시의 예시적인 실시예들에 따른 다양한 기술들을 사용하여 푸시된 데이터의 존재를 알게 될 수 있다. 예를 들어, 프리페처가 푸시된 데이터를 위한 메모리를 할당할 수 있는 실시예들에서, GPU1은 푸시된 데이터를 위해 할당될 수 있는 예약된 메모리 영역을 확인할 수 있다. 다른 예로서, GPU1은 페이지 테이블 데이터를 확인하여 푸시된 데이터의 존재를 알 수 있다.
도 7은 본 개시의 예시적인 실시예에 따른 호스트-기반의 메모리 할당 방법의 예시적인 실시예를 도시한다. 도 7에 도시된 실시예는, 예를 들어, 여기에 개시된 임의의 시스템들 및/또는 방법들과 함께 사용될 수 있으나, 도시의 목적들 상, 도 7에 도시된 실시예는 도 7에 단순화된 형태로 보여지는 도 3에 도시된 시스템의 맥락에서 설명될 수 있다.
도 7을 참조하면, 동작 1에서, GPU0은 Prefetcher0에 의해 관찰될 수 있는 제1 데이터를 Storage0에 기입할 수 있다. 동작 2에서, GPU1은 Storage0으로부터 Prefetcher0에 의해 관찰될 수 있는 제1 데이터를 독출할 수 있다. 동작 1 및 2에 기초하여, Prefetcher0는 GPU0와 GPU1 간의 액세스 패턴을 검출할 수 있다. 따라서, 동작 3에서, Prefetcher0은 DRAM1에 추가적인 데이터 전송들을 위해 DRAM1에 타겟 메모리를 할당하기 위하여 호스트 장치(302)에 요청을 보낼 수 있다. 요청은, 예를 들어, GPU1에 대한 소비자 GI ID, 전송할 데이터의 크기(양), 전송할 데이터의 위치를 나타내는 LBA(Logical Block Address)가 포함할 수 있다.
동작 4에서, 호스트 장치(302)는 DRAM1에 요청된 메모리 공간을 할당할 수 있다. 몇몇 실시예뜰에서, 호스트 장치(302)의 CPU(312)는 동작 5에서 수행될 수 있는 Storage0으로부터 DRAM1으로의 제2 데이터의 DMA(Direct Memory Access) 전송을 개시할 수 있다. 다른 실시예들에서, Prefetcher0은 호스트 장치(302)가 메모리 할당을 완료한 후에 데이터 전송을 개시 및/또는 수행할 수 있다(예로, 데이터를 프리페치하고 이를 DRAM1에 푸시함으로써) .
도 8은 본 개시의 예시적인 실시예들에 따른 통합된 메모리 구조의 예시적인 실시예를 도시한다. 도 8에 도시된 실시예는, 예를 들어, 도 7에 도시된 호스트-기반의 메모리 할당 방법을 구현하기 위해 사용될 수 있다. 도시의 목적들 상, 도 8에 도시된 실시예는 도 3에 도시된 시스템의 맥락에서 설명될 수 있다.
도 8을 참조하면, 아키텍처는 CPU(312)가 DRAM0, DRAM1, DRAM2, 및 DRAM3에서의 메모리 사용량을 알 수 있도록 VMA(Virtual Memory Address)들을 가지는 공유된 가상 주소 공간(842)을 구현할 수 있다. 메모리 관리자(844)(예로, VMM)는 호스트 장치(302)가 메모리 할당을 수행 가능할 수 있도록 호스트 장치(302)에 위치될 수 있다. 호스트 장치(302)는 또한 애플리케이션(803)을 실행하고, 장치 커널 드라이버(805)를 실행할 수 있다. 몇몇 실시예들에서, 공유된 가상 주소 공간(842)은, 예를 들어, T1(Tier 1) 메모리, T2(Tier 2) 메모리, 및/또는 호스트 메모리를 하나 이상의 컴퓨팅 장치(304) 및/또는 저장 장치(306)에 매핑하는 데 사용될 수 있다. 몇몇 실시예들에서, 일관성 엔진(예로, 호스트 장치(302)의 CXL 일관성 엔진)은 도 8에 도시된 메모리들 간의 일관성을 유지할 수 있다.
도 9는 본 개시의 예시적인 실시예들에 따른 저장 장치-기반의 메모리 할당 방법의 예시적인 실시예를 도시한다. 도 9에 도시된 실시예는, 예를 들어, 여기에 개시된 임의의 시스템들 및/또는 방법들과 함께 사용될 수 있으나, 도시의 목적들 상, 도 9에 도시된 실시예는 도 9에 단순화된 형태로 보여지는 도 3에 도시된 시스템의 맥락에서 설명될 수 있다.
도 9를 참조하면, 메모리들(314, 318a, 318b, 318c, 318d)은 각각 예약된 영역들(315, 319a, 319b, 319c, 319d)을 포함할 수 있다. 동작 1에서, GPU0은 Storage0에 Prefetcher0에 의해 관찰될 수 있는 제1 데이터를 기입할 수 있다. 동작 2에서, GPU1은 Storage0으로부터 Prefetcher0에 의해 관찰될 수 있는 제1 데이터를 독출할 수 있다. 동작 1 및 2에 기초하여, Prefetcher0는 GPU0와 GPU1 간의 액세스 패턴을 검출할 수 있다. 따라서, 동작 3에서, Prefetcher0은 DRAM1에 추가적인 데이터 전송들을 위해 DRAM1의 예약된 공간(319b)에 대상 메모리 공간을 할당할 수 있다. Prefetcher0은, 예를 들어, 저장 장치(306a)의 VMM을 사용하여 대상 메모리 공간을 할당할 수 있다.
Prefetcher0은 그런 다음 DRAM1의 예약된 공간(319b) 내의 할당된 대상 공간에 추가적인 데이터를 프리페치하고 복사할 수 있다. 동작 4에서, Prefetcher0은 새로 할당된 공간의 하나 이상의 페이지 테이블 매핑을 업데이트하기 위해 호스트 장치(302)로 요청을 보낼 수 있다.
도 10은 본 개시의 예시적인 실시예들에 따른 메모리 할당 방법의 예시적인 실시예를 도시한다. 도 10에 도시된 실시예는, 예를 들어, 여기에 개시된 임의의 시스템들 및/또는 방법들과 함께 사용될 수 있다.
도 10을 참조하면, 동작 1002에서, 프리페처는, 예를 들어, 호스트를 통한 요청에 의해 또는 프리페처 자체에 의해 수행될 수 있는 메모리 할당 동작을 개시할 수 있다. 만약 프리페처가 호스트에 의해 메모리 할당이 수행되도록 결정하면, 프리페처는 호스트 장치의 CPU에 메모리 할당 요청을 보낼 수 있는 동작 1004로 향할 수 있다. 프리페처는, 예를 들어, 시스템의 호스트 CPU 측의 VMM으로 요청을 보낼 수 있다. 동작 1006에서, 요청의 일부로서, 프리페처는 메모리가 할당될 소비자 장치의 GPU에 대한 소비자 GI ID, 전송할 데이터의 크기(양) 및 전송할 데이터의 위치를 가리키는 LBA와 같은 정보를 포함할 수 있다. 동작 1008에서, 호스트 디바이스의 VMM은 GPU의 GI ID에 대응되는 소비자 디바이스의 디바이스 메모리에 요청된 메모리를 할당할 수 있다. 동작 1010에서, 소비자 장치에 대한 대상 메모리 공간을 할당한 후, 호스트 장치는 요청하는 프리페처가 위치한 저장 장치, 및 소비자 장치의 대상 메모리로부터 데이터의 DMA 전송을 트리거할 수 있다. 호스트 장치는 또한 소비자 장치에서 새로 할당된 대상 메모리를 반영하도록 페이지 테이블을 업데이트할 수 있다.
만약, 그러나, 프리페처가 타겟 메모리 자체를 할당하기로 결정하면, 동작 1012에서, 프리페처는 프리페처의 VMM과 함께 할당을 시작할 수 있다. 동작 1014에서, VMM은, 예를 들어, 예약된 메모리 공간으로부터 소비자 장치의 대상 메모리를 할당할 수 있다. 동작 1016에서, 프리페처는 데이터를 프리페치하고 소비자 장치의 대상 메모리에 이를 복사할 수 있다. 동작 1018에서, 프리페처는 소비자 장치에서 새롭게 할당된 대상 메모리를 반영하기 위하여 페이지 테이블을 업데이트하도록 호스트 장치에 요청할 수 있다.
도 11은 본 개시의 예시적인 실시예들에 따른 데이터의 저장, 프리페칭 및 전송을 위한 방법의 예시적인 실시예를 도시한다. 도 11에 도시된 실시예는, 예를 들어, 여기에 개시된 임의의 시스템들 및/또는 방법들과 함께 사용될 수 있으나, 도시의 목적들 상, 도 11에 도시된 실시예는 도 3에 도시된 시스템의 맥락에서 설명될 수 있다. 따라서, GPU0, DRAM1, GPU1, CPU, Prefetcher0 및 저장 장치는, 각각, 도 3의 요소들(316a, 318b, 316b, 312, 324a, 306a)을 참조할 수 있다.
도 11을 참조하면, 방법은 CPU가 Prefetcher0에 생산자-소비자 관계들의 하나 이상의 표시를 보낼 수 있을 때 동작 1102에서 시작할 수 있다. 동작 1104에서, Prefetcher0은 하나 이상의 GI ID 및/또는 생산자-소비자 관계들에 대한 정보를 저장할 수 있다.
동작 1106에서, GPU0은, 생산자 장치(106a)에서, 저장 장치에 제1 데이터를 기입하기 시작할 수 있다. 동작 1108에서, CPU 일관성 엔진은, 예를 들어, 태그 필드와 같은 하나 이상의 cxl.mem 필드를 사용하여 Prefetcher0에 GPU0에 대한 생산자(예를 들어, 개시자) GI ID를 보낼 수 있다. 동작 1110에서, Prefetcher0은, 예를 들어, 저장된 표시들 중 하나 이상 및/또는 결정된 배치에 기초하여 GPU0으로부터 제1 데이터를 배치하고 멀티-스트림 인터페이스를 통해 제1 데이터를 저장할 스트림을 결정할 수 있다. 동작 1112에서, GPU0은, 예를 들어, 미리 결정된 메모리 위치에 임의의 데이터를 기록함으로써 제1 데이터의 기록 동작이 완료되었음을 Prefetcher0에 통지할 수 있다.
동작 1114에서, GPU1은 저장 장치로부터의 제1 데이터의 독출 동작을 시작할 수 있다(GPU0에 의해 기입된). 동작 1116에서, CPU 일관성 엔진은, 예를 들어, 태그 필드와 같은 하나 이상의 cxl.mem 필드를 사용하여 Prefetcher0에 GPU1에 대한 소비자 GI ID를 보낼 수 있다. 동작 1118에서, Prefetcher0은 저장 장치로부터 GPU1으로 제1 데이터를 보낼 수 있다. 동작 1120에서, Prefetcher0은 기입 및 독출 동작들(1106, 1114)에 기초하여 GPU0 및 GPU1 간의 런타임 액세스 패턴을 검출할 수 있다. 몇몇 실시예들에서, 프리페처는, 예를 들어, 만약 CPU가 GPU0과 GPU1 간의 생산자-소비자 관계의 하나 이상의 표시를 보내면, 이 패턴을 검출하지 못할 수 있다.
단계 1122에서, Prefetcher0은 VMM과 함꼐 DRAM1의 대상 메모리에 대한 메모리 할당을 개시할 수 있다. 만약 프리페처가 호스트 CPU에 메모리 할당을 요청하여 메모리 할당을 개시하면, 호스트 장치에 위치한 VMM은 할당을 수행할 수 있다. 만약, 그러나, Prefetcher0이 자체적으로 메모리 할당을 수행하면, 이는 저장 장치에 위치한 VMM을 사용할 수 있다. 동작 1124에서, VMM(호스트 CPU 또는 저장 장치 어디에 있든)은 DRAM1에 대상 공간을 할당할 수 있다. 동작 1126에서, Prefetcher0은 데이터가 저장된 스트림으로부터 데이터를 프리패치할 수 있다. 동작 1128에서, Prefetcher0은 DRAM1으로 프리페치된 데이터를 푸시할 수 있다. 동작 1130에서, Prefetcher0은 DRAM1에 푸시된 데이터에 대한 페이지 테이블을 업데이트하기 위해 호스트 CPU에 요청할 수 있다.
도 12는 본 개시의 예시적인 실시예들에 따른 이종 메모리 제어 시스템의 예시적인 실시예를 도시한다.
도 12에 도시된 실시예는 ACPI(Advanced Configuration and Power Interface) 루트 테이블(1202), SRAT(System Resource Affinity Table)(1204), 및 차례로 하나 이상의 메모리 근접 도메인(1216), 하나 이상의 근접 도메인(1214), 및/또는 하나 이상의 근접 도메인 번호(1218)를 구현할 수 있는 메모리 근접 도메인 속성 구조(들)(1208), 시스템 지역 지연시간 및 대역폭 정보 구조(들)(1210), 및 메모리 측 캐시 정보 구조(들)(1212)를 구현하는 데 사용될 수 있는 HMAT(Heterogeneous Memory Attributes Table)(1206)을 포함할 수 있다.
도 12에 도시된 실시예는, 예를 들어, 컴퓨팅 장치들의 하나 이상의 GPU, 저장 장치들의 프리페처, I/O 장치들 및/또는 유사한 사항에 대한 GI ID를 획득하기 위한 하나 이상의 CXL 기능들을 사용하기 위해 사용될 수 있다. 추가로, ACPI 루트 테이블(1202), SRAT(1204), 및/또는 HMAT(1206)은 프로세서들, 메모리 범위들, GI들(예를 들어, 이기종 프로세서들, 가속기들, GPU들 및/또는 통합된 계산 또는 DMA 엔진들이 있는 I/O 장치들)에 대한 정보를 제공할 수 있다. 몇몇 구현들에서, 제1 CXL 장치로부터 제2 CXL 장치로의 일부 또는 모든 요청들은 호스트를 통해 발송될 수 있다. 그러나, 본 개시의 예시적인 실시예들에 따른 몇몇 시스템들에서, 호스트 CPU는 프리페처(예로, 스토리지 컨트롤러에서)로 생산자 및/또는 소비자 GI ID 정보, 예를 들어 cxl.mem 태그 및/또는 메타값 + 메타필드 필드들,을 전달할 수 있다.
도 13은 본 개시의 예시적인 실시예들에 따른 데이터 프리페칭 및 전송을 구현하기 위해 사용될 수 있는 호스트 장치의 예시적인 실시예를 도시한다. 도 13에 도시된 호스트 장치(1300)는 메모리 컨트롤러(1304)를 포함할 수 있는 프로세서(1302), 시스템 메모리(1306), 메모리 할당기(1308), VMM(1310) 및/또는, 예를 들어 CXL을 사용하여 구현될 수 있는 인터커넥트 인터페이스(1312)를 포함할 수 있다. 도 13에 도시된 구성요소 중 일부 또는 전부는 하나 이상의 시스템 버스들(1314)을 통해 통신할 수 있다. 몇몇 실시예들에서, 도 13에 도시된 호스트 장치(1300)는 프리페처에 생산자-소비자 관계의 하나 이상의 표시를 제공하는 것 및/또는 푸시된 데이터에 대해 컴퓨팅 유닛에 메모리를 할당하는 것과 관련된 기능 중 임의의 것을 포함하는 여기에 개시된 임의의 호스트 기능을 구현하는 데 사용될 수 있다. 몇몇 실시예들에서, 도 13에 도시된 하나 이상의 구성요소들은 다른 구성요소들을 사용하여 구현될 수 있다. 예를 들어, 몇몇 실시예들에서, 하나 이상의 메모리 할당기(1308) 및/또는 VMM(1310)은, 예를 들어, 시스템 메모리(1306) 또는 다른 메모리에 저장된 명령어들을 실행하는 프로세서(1302)를 통해 구현될 수 있다.
도 14는 본 개시의 예시적인 실시예들에 따른 데이터 프리페칭 및 전송을 구현하기 위해 사용될 수 있는 장치의 예시적인 실시예를 도시한다. 장치(1400)는 장치 제어기(1402), 검출 로직(1406)을 포함할 수 있는 프리페처(1404), 멀티-스트림 인터페이스(1408), VMM(1410), 미디어 변환 계층(1412), 저장 매체(1414), 및 인터커넥트 인터페이스(1416)를 포함할 수 있다. 도 14에 도시된 구성요소들은 하나 이상의 장치 버스들(1418)을 통해 통신할 수 있다. 몇몇 실시예들에서, 도 14에 예시된 장치(1400)는 여기에 개시된 프리페칭 및/또는 데이터 푸시 기능 중 임의의 것을 구현하기 위해 사용될 수 있다.
도 1 내지 14에 대하여 도시된 임의의 호스트 기능, 장치 기능, 및/또는 유사한 사항을 포함하는 여기에 개시된 임의의 기능, 예를 들어, 프리페처, 검출 로직, 및/또는 유사한 사항은, 하드웨어, 소프트웨어, 또는 조합 로직, 순차 로직, 하나 이상의 타이머, 카운터들, 레지스터들, 상태 머신들, DRAM 및/또는 SRAM과 같은 휘발성 메모리, 비휘발성 메모리 및/또는 이들의 임의의 조합, 임의의 유형의 메모리에 저장된 명령어들을 실행하는 CPLD(Complex Programmable Logic Device)들, FPGA(Field Programmable Gate Array)들, ASIC(Application Specific Integrated Circuit)들, x86 프로세서들 및/또는 ARM 프로세서들, GPU들, NPU들, 및/또는 유사한 사항과 같은 RISC(Reduced Instruction Set Computer) 프로세서들과 같은 CISC(Complex Instruction Set Computer) 프로세서들과 같은 CPU들을 포함하는 이들의 임의의 조합으로 구현될 수 있다. 몇몇 실시예들에서, 하나 이상의 구성요소는 SOC(System-On-Chip)으로서 구현될 수 있다.
여기에 개시된 임의의 저장 장치들은 SATA(Serial ATA), SCSI(Small Computer System Interface), SAS(Serial Attached SCSI), U.2 및/또는 이와 유사한 사항과 같은 임의의 커넥터 구성을 사용하여, 3.5인치, 2.5인치, 1.8인치, M.2, EDSFF(Enterprise and Data Center SSD Form Factor), NF1 및/또는 유사한 사항과 같은 임의의 폼 팩터로 구현될 수 있다. 여기에 개시된 임의의 저장 장치들은 서버 섀시(chassis), 서버 랙(rack), 데이터룸, 데이터센터, 에지 데이터센터, 모바일 에지 데이터센터, 및/또는 이들의 임의의 조합과 함께 전체적으로 또는 부분적으로 구현되고/되거나 이와 관련하여 사용될 수 있다.
도 15는 본 개시의 예시적인 실시예들에 따른 데이터 전송을 위한 방법의 실시예를 도시한다. 방법은 동작 1502에서 시작할 수 있다. 동작 1504에서, 방법은, 생성 장치로부터, 인터커넥트를 통해 저장 장치에 데이터를 기입할 수 있다. 예를 들어, GPU는 저장 장치에 제1 데이터로서 제1 계산의 결과들을 기입할 수 있다. 동작 1506에서, 방법은 데이터에 대한 소비자 장치를 결정할 수 있다. 예를 들어, 데이터에 대한 소비자 장치는 다음 단계에서 계산을 위한 입력으로써 제1 데이터를 사용할 수 있는 파이프라인의 다음 단계를 형성할 수 있다. 동작 1508에서, 방법은 저장 장치로부터 데이터를 프리페치할 수 있다. 동작 1510에서, 방법은, 결정에 기초하여, 인터커넥트를 통해 소비자 장치로 데이터를 전송할 수 있다. 예를 들어, 프리페처는 소비자 장치의 메모리에 프리페치된 데이터를 푸시할 수 있다.
도 15에 도시된 실시예 및 여기에 개시된 다른 모든 실시예들은 예시적인 동작들 및/또는 구성요소들이다. 몇몇 실시예들에서, 몇몇 동작들 및/또는 구성요소들은 생략될 수 있고/있거나 다른 동작들 및/또는 구성요소들이 포함될 수 있다. 더욱이, 몇몇 실시예들에서, 동작들 및/또는 구성요소들의 시간적 및/또는 공간적 순서는 달라질 수 있다. 비록 몇몇 구성요소들 및/또는 동작들이 개별 구성요소로서 도시될 수 있지만, 몇몇 실시예들에서, 별도로 보여진 몇몇 구성요소들 및/또는 동작들은 단일 구성요소 및/또는 동작으로 통합될 수 있고/있거나, 몇몇 구성요소들 및/또는 단일 구성요소 및/또는 동작으로 도시된 동작들은 여러 구성요소들 및/또는 동작들로 구현될 수 있다.
위에 개시된 몇몇 실시예는 다양한 구현 세부사항들의 맥락에서 설명되었으나, 본 개시의 원칙들은 이들 또는 임의의 다른 특정 세부사항들로 제한되지 않는다. 예를 들어, 몇몇 기능은 특정 구성요소들에 의해 구현되는 것으로 설명되었으나, 다른 실시예들에서, 상기 기능은 상이한 시스템들과 상이한 위치들에 있고 다양한 사용자 인터페이스들을 가지는 구성요소들 간에 분산될 수 있다. 특정 실시예들은 특정 프로세스들, 동작들 등을 가지는 것으로 설명되었으나, 이러한 용어들은 또한 특정 프로세스, 동작 등이 다수의 프로세스들, 동작들 등으로 구현될 수 있거나, 다수의 프로세스들, 동작들 등이 하나의 처리, 단계 등으로 통합될 수 있는 실시예들을 포함할 수 있다. 구성요소 또는 요소에 대한 참조는 구성요소 또는 요소의 일부만을 나타낼 수 있다. 예를 들어, 블록에 대한 참조는 전체 블록 또는 하나 이상의 서브블록들을 참조할 수 있다. 본 개시 및 청구항들에서 "제1" 및 "제2"와 같은 용어들의 사용은 그들이 수정하는 것을 구별하기 위한 목적들로만 사용될 수 있으며 문맥에서 다른 것이 명백하지 않는 한 공간적 또는 시간적 순서를 가리키지 않을 수 있다. 몇몇 실시예들에서, 사물에 대한 언급은 사물의 적어도 일부를 참조할 수 있고, 예를 들어, "~에 기초하여"는 "~에 적어도 부분적으로 기초하여" 및/또는 유사한 사항을 참조할 수 있다. 제1 요소에 대한 참조는 제2 요소의 존재를 내포하지 않을 수 있다. 여기에 개시된 원칙들은 독립적인 유용성을 가지고 개별적으로 구현될 수 있으며, 모든 실시예가 모든 원칙을 활용할 수 있는 것은 아니다. 그러나, 원칙들은 또한 다양한 조합들로 구현될 수 있고, 그 중 일부는 시너지 효과로 개별 원칙들의 이점들을 증폭시킬 수 있다.
위에서 설명된 다양한 세부사항들 및 실시예들은 본 특허 개시의 독창적인 원칙들에 따른 추가 실시예들을 생산하기 위해 조합될 수 있다. 본 특허 개시의 독창적인 원칙들은 독창적인 개념들로부터 벗어나지 않고 배열 및 세부사항에서 수정될 수 있으므로, 이러한 변경들 및 수정들은 다음 청구 범위들의 관점 내에 속하는 것으로 간주된다.

Claims (20)

  1. 데이터 전송 방법에 있어서,
    생산 장치로부터, 인터커넥트(interconnect)를 통해 저장 장치에 데이터를 기입하는 단계;
    상기 데이터에 대한 소비자 장치를 결정하는 단계;
    상기 저장 장치로부터 상기 데이터를 프리페칭(prefetching)하는 단계; 및
    상기 결정에 기초하여, 상기 인터커넥트를 통해 상기 데이터를 상기 소비자 장치로 전송하는 단계를 포함하는 방법.
  2. 제1항에 있어서,
    상기 저장 장치에 대한 프리페처(prefetcher)에서, 상기 생산 장치와 상기 소비자 장치 간의 관계의 표시를 수신하는 단계; 및
    상기 표시에 기초하여 상기 소비자 장치를 결정하는 단계를 더 포함하는 방법.
  3. 제2항에 있어서,
    상기 생산 장치와 상기 소비자 장치 간의 관계에 기초하여 상기 저장 장치의 스트림에 상기 데이터를 배치하는 단계를 더 포함하는 방법.
  4. 제2항에 있어서,
    상기 표시는 상기 소비자 장치와 연관된 애플리케이션에 의해 제공되는 방법.
  5. 제2항에 있어서,
    상기 표시를 수신하는 단계는 인터커넥트에 대한 일관성 있는 메모리 프로토콜을 통해 표시를 수신하는 단계를 포함하는 방법.
  6. 제5항에 있어서,
    상기 일관성 있는 메모리 프로토콜을 통해 상기 표시를 수신하는 단계는
    상기 일관성 있는 메모리 프로토콜의 하나 이상의 필드를 통해 생산자 ID(identifier) 및 소비자 ID를 수신하는 단계를 포함하는 방법.
  7. 제1항에 있어서,
    상기 저장 장치에 대한 프리페처에서, 상기 생산 장치 및 상기 소비자 장치의 액세스 패턴을 검출하는 단계; 및
    상기 액세스 패턴에 기초하여 상기 소비자 장치를 결정하는 단계를 더 포함하는 방법.
  8. 제1항에 있어서,
    호스트에 의해, 상기 데이터에 대한 상기 소비자 장치의 메모리를 할당하는 단계를 더 포함하는 방법.
  9. 제1항에 있어서,
    상기 저장 장치에 의해, 상기 데이터에 대한 상기 소비자 장치의 메모리를 할당하는 단계를 더 포함하는 방법.
  10. 제9항에 있어서,
    상기 소비자 장치의 상기 메모리는 예비 메모리를 포함하는 방법.
  11. 제9항에 있어서,
    호스트에 의해, 상기 소비자 장치의 상기 메모리에 대한 매핑을 업데이트하는 단계를 더 포함하는 방법.
  12. 제1항에 잇어서,
    상기 전송은 상기 소비자 장치의 계산 동작과 중첩되는 방법.
  13. 제1항에 있어서,
    상기 기입의 상태를 상기 저장 장치에 대한 프리페처에 통지하는 단계를 더 포함하는 방법.
  14. 장치에 있어서,
    인터커넥트(interconnect) 인터페이스;
    저장 매체; 및
    프리페처(prefetcher)를 포함하고,
    상기 프리페처는
    상기 저장 매체 내에 저장된 데이터에 대한 소비자 장치의 결정을 수행하고,
    상기 장치로부터 상기 데이터를 프리페치(prefetch)하고,
    상기 결정에 기초하여, 상기 인터커넥트 인터페이스를 통해 상기 소비자 장치로 데이터를 전송하는 장치.
  15. 제14항에 있어서,
    상기 데이터의 생산자 장치와 상기 소비자 장치 간의 관계에 대한 정보를 저장하는 데이터 구조를 더 포함하는 장치.
  16. 제15항에 있어서,
    상기 관계에 기초하여 상기 저장 매체의 스트림에 상기 인터커넥트 인터페이스를 통해 수신된 상기 데이터를 저장하는 멀티-스트림 인터페이스를 더 포함하는 장치.
  17. 제14항에 있어서,
    상기 프리페처는 상기 소비자 장치 및 상기 데이터의 생산자 장치에 대한 액세스 패턴을 결정하는 검출 로직을 포함하는 장치.
  18. 시스템에 있어서,
    인터커넥트(interconnect);
    상기 인터커넥트에 연결된 생산자 장치;
    상기 인터커넥트에 연결된 소비자 장치;
    상기 인터커넥트에 연결되고, 상기 인터커넥트를 통해 상기 생산자 장치로부터 수신된 데이터를 저장하는 저장 장치; 및
    상기 인터커넥트에 연결된 프리페처(prefetcher)를 포함하고,
    상기 프리페처는
    상기 생산자 장치에 기초하여 상기 소비자 장치의 결정을 수행하고,
    상기 데이터를 프리페치(prefetch)하고,
    상기 결정에 기초하여, 상기 인터커넥트를 통해 상기 소비자 장치에 상기 데이터를 전송하는 시스템.
  19. 제18항에 있어서,
    상기 생산자 장치는 상기 인터커넥트를 통해 상기 생산자 장치로부터 수신된 상기 데이터의 상태를 상기 프리페처에 통지하는 시스템.
  20. 제18항에 있어서,
    상기 인터커넥트에 연결되고, 상기 인터커넥트를 통해 상기 생산자 장치와 상기 소비자 장치 간의 관계에 대한 정보를 상기 프리페처로 보내는 호스트 장치를 더 포함하는 시스템.
KR1020220088581A 2021-08-20 2022-07-18 상호 연결된 장치들 간의 데이터 전송을 위한 시스템, 방법 및 장치 KR20230028145A (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US202163235666P 2021-08-20 2021-08-20
US63/235,666 2021-08-20
US17/496,759 2021-10-07
US17/496,759 US20230057633A1 (en) 2021-08-20 2021-10-07 Systems, methods, and apparatus for transferring data between interconnected devices

Publications (1)

Publication Number Publication Date
KR20230028145A true KR20230028145A (ko) 2023-02-28

Family

ID=82940013

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020220088581A KR20230028145A (ko) 2021-08-20 2022-07-18 상호 연결된 장치들 간의 데이터 전송을 위한 시스템, 방법 및 장치

Country Status (5)

Country Link
US (1) US20230057633A1 (ko)
EP (1) EP4141682A1 (ko)
KR (1) KR20230028145A (ko)
CN (1) CN115708075A (ko)
TW (1) TW202318217A (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20230176973A1 (en) * 2021-12-08 2023-06-08 Arm Limited Replacement control for candidate producer-consumer relationships trained for prefetch generation
US11989142B2 (en) * 2021-12-10 2024-05-21 Samsung Electronics Co., Ltd. Efficient and concurrent model execution

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5687347A (en) * 1994-09-19 1997-11-11 Matsushita Electric Industrial Co., Ltd. Data providing device, file server device, and data transfer control method
TWI282513B (en) * 2002-06-12 2007-06-11 Mediatek Inc A pre-fetch device of instruction for an embedded system
JP4288978B2 (ja) * 2003-03-27 2009-07-01 株式会社日立製作所 データ先読み方法
JP2005258719A (ja) * 2004-03-10 2005-09-22 Matsushita Electric Ind Co Ltd データ処理システム及びスレーブデバイス
US7383393B2 (en) * 2005-10-28 2008-06-03 Freescale Semiconductor, Inc. System and method for cooperative prefetching
US7761666B2 (en) * 2006-10-26 2010-07-20 Intel Corporation Temporally relevant data placement
US8738863B2 (en) * 2009-09-25 2014-05-27 Intel Corporation Configurable multi-level buffering in media and pipelined processing components
US8453161B2 (en) * 2010-05-25 2013-05-28 International Business Machines Corporation Method and apparatus for efficient helper thread state initialization using inter-thread register copy
WO2013030628A1 (en) * 2011-09-01 2013-03-07 Freescale Semiconductor, Inc. Integrated circuit device, memory interface module, data processing system and method for providing data access control
US9239846B2 (en) * 2012-04-23 2016-01-19 Google Inc. Sharing and synchronizing electronically stored files
US9460024B2 (en) * 2013-03-15 2016-10-04 Vmware, Inc. Latency reduction for direct memory access operations involving address translation
US9749209B2 (en) * 2013-11-01 2017-08-29 The Nielsen Company (Us), Llc Methods and apparatus to credit background applications
KR102336443B1 (ko) * 2015-02-04 2021-12-08 삼성전자주식회사 가상화 기능을 지원하는 스토리지 장치 및 사용자 장치
US10560544B2 (en) * 2015-08-25 2020-02-11 Box, Inc. Data caching in a collaborative file sharing system
US10235102B2 (en) * 2015-11-01 2019-03-19 Sandisk Technologies Llc Methods, systems and computer readable media for submission queue pointer management
US10635590B2 (en) * 2017-09-29 2020-04-28 Intel Corporation Software-transparent hardware predictor for core-to-core data transfer optimization
US11294810B2 (en) * 2017-12-12 2022-04-05 Advanced Micro Devices, Inc. Memory request throttling to constrain memory bandwidth utilization
KR102518095B1 (ko) * 2018-09-12 2023-04-04 삼성전자주식회사 스토리지 장치 및 시스템
US20200104259A1 (en) * 2018-09-28 2020-04-02 Intel Corporation System, method, and apparatus for snapshot prefetching to improve performance of snapshot operations
US11113194B2 (en) * 2019-09-04 2021-09-07 Xilinx, Inc. Producer-to-consumer active direct cache transfers
US11636389B2 (en) * 2020-02-19 2023-04-25 Microsoft Technology Licensing, Llc System and method for improving machine learning models by detecting and removing inaccurate training data

Also Published As

Publication number Publication date
CN115708075A (zh) 2023-02-21
TW202318217A (zh) 2023-05-01
EP4141682A1 (en) 2023-03-01
US20230057633A1 (en) 2023-02-23

Similar Documents

Publication Publication Date Title
Hsieh et al. Transparent offloading and mapping (TOM) enabling programmer-transparent near-data processing in GPU systems
US8103835B2 (en) Low-cost cache coherency for accelerators
TWI651620B (zh) 用於處理多個交易之資料處理系統及方法
US9323672B2 (en) Scatter-gather intelligent memory architecture for unstructured streaming data on multiprocessor systems
US8180981B2 (en) Cache coherent support for flash in a memory hierarchy
US11734192B2 (en) Identifying location of data granules in global virtual address space
US11200168B2 (en) Caching data from remote memories
EP4141682A1 (en) Systems, methods, and apparatus for transferring data between interconnected devices
JP6280214B2 (ja) メモリで制御されるデータ移動及びタイミング
JP7126136B2 (ja) 再構成可能なキャッシュアーキテクチャおよびキャッシュコヒーレンシの方法
US11061676B2 (en) Scatter gather using key-value store
US11914903B2 (en) Systems, methods, and devices for accelerators with virtualization and tiered memory
US10482019B2 (en) Storage apparatus and control method thereof
CN105488012B (zh) 一种基于独占数据的一致性协议设计方法
US9529721B2 (en) Control device, and storage system
Montaner et al. Getting rid of coherency overhead for memory-hungry applications
US11899589B2 (en) Systems, methods, and devices for bias mode management in memory systems
US20230052700A1 (en) Memory expansion with persistent predictive prefetching
JP2007156963A (ja) キャッシュメモリ及びマルチプロセッサシステム
JP6565729B2 (ja) 演算処理装置、制御装置、情報処理装置及び情報処理装置の制御方法
KR20230088236A (ko) 효율적이고 동시적인 모델 실행
KR20230088243A (ko) 커널들 실행을 위한 저-레이턴시 입력 데이터 스테이징
JP6260456B2 (ja) 演算処理装置及び演算処理装置の制御方法
CN118051470A (zh) 用于操作计算装置的方法和存储装置