KR20220030196A - 계산 장치들에서 요청들을 배칭하기 위한 시스템 및 방법 - Google Patents

계산 장치들에서 요청들을 배칭하기 위한 시스템 및 방법 Download PDF

Info

Publication number
KR20220030196A
KR20220030196A KR1020210116695A KR20210116695A KR20220030196A KR 20220030196 A KR20220030196 A KR 20220030196A KR 1020210116695 A KR1020210116695 A KR 1020210116695A KR 20210116695 A KR20210116695 A KR 20210116695A KR 20220030196 A KR20220030196 A KR 20220030196A
Authority
KR
South Korea
Prior art keywords
request
batch
storage unit
requests
present disclosure
Prior art date
Application number
KR1020210116695A
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 KR20220030196A publication Critical patent/KR20220030196A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • G06F3/0607Improving or facilitating administration, e.g. storage management by facilitating the process of upgrading existing storage systems, e.g. for improving compatibility between host and storage device
    • 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
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5077Logical partitioning of resources; Management or configuration of virtualized resources
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/48Indexing scheme relating to G06F9/48
    • G06F2209/482Application

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Advance Control (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

시스템이 설명된다. 상기 시스템은 프로세서를 포함할 수 있다. 소프트웨어는 배치 요청을 생성하기 위해 프로세서 상에서 실행될 수 있는데, 상기 배치 요청은 적어도 제 1 요청 및 제 2 요청을 포함할 수 있다. 상기 시스템은 저장 장치 및 상기 저장 장치와 관련된 계산 저장 유닛을 포함할 수 있는데, 상기 계산 저장 유닛은 상기 배치 요청을 실행할 수 있다.

Description

계산 장치들에서 요청들을 배칭하기 위한 시스템 및 방법{SYSTEMS AND METHOD FOR BATCHING REQUESTS IN COMPUTATIONAL DEVICES}
본 개시는 저장 장치에 관한 것으로, 좀 더 상세하게는 계산 저장 기능들을 이용하기 위한 요청들을 배칭하는 시스템 및 방법에 관한 것이다.
호스트 프로세서가 저장 장치로 요청을 전송하여 데이터를 읽거나, 데이터를 쓰거나, 또는 일부 니어-스토리지(near-storage) 프로세서가 데이터를 처리하도록 하는 경우, 요청은 보통 세 단계들을 포함한다. 첫 번째로, 커맨드(및 일부 데이터)가 저장 장치로 전송된다. 두 번째로, 저장 장치가 요청을 실행한다. 세 번째로, 저장 장치가 결과(및 일부 데이터)를 호스트 프로세서로 다시 전송한다.
니어-스토리지 프로세싱이 사용될 때, 저장 장치 근처 데이터의 핸들링을 개선하기 위한 필요가 있다.
본 개시는 계산 저장 기능들을 이용하기 위한 요청들을 배칭하는 시스템 및 방법을 제공한다.
본 개시의 실시 예는 애플리케이션에 의해 사용될 수 있는 배치 요청을 생성하는 메커니즘을 포함한다. 상기 배치 요청은 두 개 이상의 요청들을 포함할 수 있다. 상기 애플리케이션은 계산 저장 유닛으로 상기 배치 요청을 전송할 수 있는데, 상기 계산 저장 유닛은 상기 배치 요청의 다수의 요청들을 실행할 수 있고, 결과를 상기 애플리케이션으로 반환할 수 있다. 이로써, 상기 애플리케이션은 개별적인 응답들을 전송할 수 있는 계산 저장 유닛으로 다수의 개별적인 요청들을 전송하기보다, 두 개 이상의 개별적인 요청들을 포함하는 하나의 배치 요청을 전송할 수 있고, 상기 계산 저장 유닛은 상기 하나의 배치 요청에 응답할 수 있다.
본 개시의 실시 예에 따르면 계산 저장 기능들을 이용하기 위한 요청들을 배칭할 수 있다.
이하에서 설명되는 도면들은 본 개시의 실시 예들이 어떻게 구현될 수 있는지 예를 나타내며, 본 개시의 실시 예들을 제한하기 위한 것이 아니다. 본 개시의 개별적인 실시 예들은 특정 도면들에 나타나지 않은 구성 요소들을 포함할 수 있거나, 및/또는 특정 도면들에 나타난 구성 요소들을 생략할 수 있다. 도면들은 도시를 목적으로 하며, 실제와 비율이 맞지 않을 수도 있다.
도 1은 본 개시의 실시 예에 따른 배치 요청들을 지원하는 계산 저장 유닛을 포함하는 시스템을 나타낸다.
도 2는 본 개시의 실시 예에 따른 도 1의 기계의 세부 사항들을 나타낸다.
도 3a는 본 개시의 실시 예에 따른 도 1의 저장 장치와 관련될 수 있는 계산 저장 유닛의 배치의 첫 번째 예를 나타낸다.
도 3b는 본 개시의 실시 예에 따른 도 1의 저장 장치와 관련될 수 있는 계산 저장 유닛의 배치의 두 번째 예를 나타낸다.
도 3c는 본 개시의 실시 예에 따른 도 1의 저장 장치와 관련될 수 있는 계산 저장 유닛의 배치의 세 번째 예를 나타낸다.
도 3d는 본 개시의 실시 예에 따른 도 1의 저장 장치와 관련될 수 있는 계산 저장 유닛의 배치의 네 번째 예를 나타낸다.
도 4a는 본 개시의 실시 예에 따른 도 1의 계산 저장 유닛이 개별 요청들을 핸들링하는 것을 나타낸다.
도 4b는 본 개시의 실시 예에 따른 도 1의 계산 저장 유닛이 배치 요청을 핸들링하는 것을 나타낸다.
도 5a는 본 개시의 실시 예에 따른 도 4b의 배치 요청들에 대한 첫 번째 구조를 나타낸다.
도 5b는 본 개시의 실시 예에 따른 도 4b의 배치 요청들에 대한 두 번째 구조를 나타낸다.
도 5c는 본 개시의 실시 예에 따른 도 4b의 배치 요청들에 대한 세 번째 구조를 나타낸다.
도 6은 본 개시의 실시 예에 따른 도 4b의 배치 요청의 처리 동안 데이터를 저장하기 위해 사용되는 버퍼들을 갖는 배치 요청의 예를 나타낸다.
도 7은 본 개시의 실시 예에 따라 데이터가 재사용되고 있는 도 4b의 배치 요청의 다른 예를 나타낸다
도 8은 본 개시의 실시 예에 따른 배치 요청들을 생성하기 위해 사용되는 소프트웨어의 세부 사항들을 나타낸다.
도 9는 본 개시의 실시 예에 따른 도 4b의 배치 요청을 저장하기 위해 사용될 수 있는 데이터 구조들의 다양한 예를 나타낸다.
도 10은 본 개시의 실시 예에 따른 도 4b의 배치 요청을 사용할 수 있는 코드 스니펫의 예를 나타낸다.
도 11은 본 개시의 실시 예에 따라 배치 요청들을 처리하기 위해 디자인된 도 1의 계산 저장 유닛의 세부 사항들을 나타낸다.
도 12는 본 개시의 실시 예에 따라 도 7의 배치 요청에 대해 도 11의 다이렉티드 그래프 생성기에 의해 생성된 다이렉티드 그래프의 예의 세부 사항들을 나타낸다.
도 13은 본 개시의 실시 예에 따라 도 8의 소프트웨어를 이용하여 도 4b의 배치 요청을 생성하기 위한 과정의 예를 나타내는 흐름도이다.
도 14a는 본 개시의 실시 예에 따라 도 8의 생성 소프트웨어를 이용하여 도 4b의 배치 요청을 생성하기 위한 과정의 예를 나타내는 흐름도이다.
도 14b는 본 개시의 실시 예에 따라 도 8의 생성 소프트웨어를 이용하여 도 4b의 배치 요청을 생성하기 위한 과정의 다른 예를 나타내는 흐름도이다.
도 15는 본 개시의 실시 예에 따라 도 1의 계산 저장 유닛이 도 4b의 배치 요청을 처리하는 과정의 예를 나타내는 흐름도이다.
도 16a는 본 개시의 실시 예에 따라 도 1의 계산 저장 유닛이 도 4b의 배치 요청을 처리하는 과정의 예를 나타내는 흐름도이다.
도 16b는 본 개시의 실시 예에 따라 도 1의 계산 저장 유닛이 도 4b의 배치 요청을 처리하는 과정의 다른 예를 나타내는 흐름도이다.
도 17은 본 개시의 실시 예에 따라 도 11의 스케줄러가 도 4b의 배치 요청의 다양한 요청들을 실행을 위해 스케줄링하는 과정의 예를 나타내는 흐름도이다.
도 18은 본 개시의 실시 예에 따라 도 11의 스케줄러가 도 4b의 배치 요청의 다양한 요청들을 실행을 위해 스케줄링하는 과정의 다른 예를 나타내는 흐름도이다.
본 개시의 기술적 사상의 실시 예들이 참조되며, 이들의 예들이 첨부된 도면들에 도시된다. 후술되는 상세한 설명에서, 다양한 특정한 세부 사항들이 본 개시의 충분한 이해를 돕기 위하여 제공된다. 그러나 이 분야에 통상적인 기술을 가진 자들은 이러한 특정한 세부 사항들 없이도 본 개시를 구현할 수 있다. 다른 예들로서, 잘 알려진 방법들, 절차들, 구성 요소들, 회로들, 그리고 네트워크들은 실시 예들의 측면들을 불필요하게 모호하게 하지 않기 위해 상세하게 설명되지 않는다.
여기에서 제 1, 제 2 등과 같은 용어들이 다양한 구성 요소들을 설명하기 위하여 사용되지만, 이러한 구성 요소들은 이러한 용어들에 의해 한정되지 않는다. 이러한 용어들은 하나의 구성 요소를 다른 하나의 구성 요소와 구별하기 위해서만 사용된다. 예를 들어, 본 개시의 범위로부터 멀어지지 않으면서 제 1 모듈은 제 2 모듈로 명명될 수 있다. 마찬가지로, 제 2 모듈은 제 1 모듈로 명명될 수 있다.
본 개시의 설명에서 사용되는 용어들은 특정한 실시 예들을 설명하기 위한 목적으로만 사용되며, 본 개시를 한정하는 것으로 의도되지 않는다. 본 개시의 설명 및 첨부된 청구항들에서 사용되는 바와 같이, 맥락에서 명확하게 명시되지 않으면 단수 표현들은 복수 표현들 또한 포함하는 것으로 의도된다. "및/또는"의 용어는 하나 또는 그보다 많은 연관된 항목들의 임의의 그리고 가능한 모든 조합들을 포함하는 것으로 참조된다. "포함한다" 및/또는 "포함하는"의 용어들은 상세한 설명에서 사용된 때에 언급된 특성들, 정수들, 단계들, 동작들, 원소들, 그리고/또는 구성 요소들의 존재를 명시하며, 하나 또는 그보다 많은 다른 특성들, 정수들, 단계들, 동작들, 원소들, 구성 요소들, 그리고/또는 그것들의 그룹들의 존재 또는 추가를 배제하지 않는다. 도면들의 구성 요소들 및 특성들은 실제 비율에 필수적으로 비례하지 않는다.
호스트 프로세서가 저장 장치로 하여금 단일의 요청을 수행하도록 요청할 경우, 패브릭에 가해지는 부하는 수용 가능할 수 있다. 그러나 호스트 프로세서가 일부 시퀀스에서 수 개의 요청들이 수행되기를 원할 경우, 이 부하는 보틀넥이 될 수 있다. 예를 들어, 호스트 프로세서가 저장 장치로부터 일부 데이터를 읽어들이고, 읽어들인 데이터에 대해 일부 처리를 수행하고, 처리된 데이터를 다시 저장 장치로 기록할 필요가 있는 상황을 고려하자. 이 시퀀스가 세 개의 별도의 요청들을 수반하기 때문에, 한 번은 각 요청과 임의의 서포팅 데이터를 전송하기 위해, 그리고 한 번은 각 결과를 반환하기 위해, 호스트 프로세서와 저장 장치 사이의 패브릭은 정보 또는 데이터를 여섯 번 운반해야 한다.
이러한 패브릭은 보틀넥이 될뿐만 아니라, 많은 양들의 데이터를 주고 받는 데 사용될 수 있다. 위의 예를 계속 들자면, 읽기 요청이 가령 저장 장치로부터 5GB의 데이터를 읽는 것을 수반한다면, 패브릭은 읽기 요청 이후 저장 장치로부터 호스트 프로세서로 5GB의 데이터를 운반하여, 동일한 5GB의 데이터를 저장 장치로 다시 운반하여 니어-스토리지 프로세싱을 수행할 뿐이다. 유사하게, 니어-스토리지 프로세싱 이후, 패브릭은 처리된 데이터를 저장 장치로부터 호스트 프로세서로 운반하여, 동일한 처리된 데이터를 저장 장치로 다시 운반하여 데이터를 기록할 뿐이다. 그러므로, 패브릭은 결국 패브릭 사이에서 전송될 필요가 없던 데이터를 운반하게 될 것이다.
본 개시의 실시 예들은 애플리케이션이 배치 요청을 생성하는 것을 가능하게 함으로써 패브릭 부담의 문제를 해결한다. 이러한 배치 요청은, 저장 장치로부터 데이터를 읽거나 저장 장치로 데이터를 쓰는 것, 호스트 메모리와 저장 장치 사이에서 데이터를 전송하는 것, 및 로컬 처리 요청들을 포함하는 임의의 수의 처리 요청들을 포함할 수 있다. 일단 배치 요청이 조합되고 나면, 저장 장치는 배치 요청을 파싱(parsing)할 수 있다. 저장 장치는 배치 요청 상에서 각 개별 요청의 의존도(dependency)를 나타내는 다이렉티드(directed; 유향(有向), 방향성) 그래프를 생성할 수 있고, 그들의 의존도에 기반하여 적절한 순서로 개별 요청들을 실행할 수 있다. 결과적으로, 배치 요청은 직렬로, 병렬로, 또는 임의의 조합으로(혼합 배치 요청이라고 지칭됨) 실행될 요청들의 세트를 나타낼 수 있다.
일치하는 요청에서 개별 요청들은 서로 관련될 수 있다. 예를 들어, 개별 요청들은 유사한 계산 장치들을 사용하거나, 유사한 네트워크를 사용하거나, 유사한 저장 자원 요구 사항들을 사용하거나, 또는 유사한 대역폭 요구 사항들을 사용한다는 측면에서 서로 관련될 수 있다. 나아가, 개별 요청들은 자원 관리의 측면에서 서로 관련될 수 있다. 예를 들어, 두 개의 요청들은 서로 다른(경쟁하지 않는) 계산 장치 자원들을 실행 효율을 개선하기 위해 사용한다는 측면에서 서로 관련될 수 있다.
본 개시의 일부 실시 예들에서, API(Application Programming Interface)를 사용함으로써, 애플리케이션은 저장 장치가 어떻게 배치 요청의 개별 요청들을 실행할 것인지 자세히 나타내는 코드 및 명령들을 무시할 수 있다. 애플리케이션은 또한 저장 장치의 능력에 영향을 받지 않을 수 있다. 저장 장치가 특정 요청을 실행하기 위한 적절한 하드웨어 및/또는 소프트웨어를 포함하지 않을 경우, 저장 장치는 다른 니어-스토리지 처리 구성 요소들 또는 호스트 프로세서로 요청들을 발행하여 이러한 요청들을 실행할 수 있다.
도 1은 본 개시의 실시 예에 따른 배치 요청들을 지원하는 계산 저장 유닛을 포함하는 시스템을 나타낸다. 도 1에서, 호스트라고도 지칭될 수 있는 기계(105)는 프로세서(110), 메모리(115), 및 저장 장치(120)를 포함할 수 있다. 프로세서(110)는 임의의 다양한 프로세서일 수 있다. 프로세서(110)는, 이하 기술되는 다른 구성 요 소들과 함께, 도시의 간략화를 위해 기계 외부에 나타나 있으나, 본 개시의 실시 예들은 이러한 구성 요소들을 기계 내부에 포함할 수 있다. 도 1이 단일의 프로세서(110)를 나타내기는 하지만, 기계(105)는 임의의 수의 프로세서들을 포함할 수 있고, 각 프로세서는 단일 코어 또는 다중 코어 프로세서일 수 있고, 각 프로세서는 RSIC(Reduced Instruction Set Computer) 구조 또는 CISC(Complex Instruction Set Computer) 구조를 구현할 수 있고, 그리고 임의의 원하는 조합에 따라 혼합될 수 있다.
프로세서(110)는 메모리(115)에 연결될 수 있다. 메모리(15)는 플래시 메모리, DRAM, SRAM, PRAM, FRAM, 또는 MRAM 등과 같은 비휘발성 RAM과 같은 임의의 다양한 메모리일 수 있다. 메모리(115)는 임의의 원하는 서로 다른 메모리 유형들의 조합일 수 있고, 메모리 컨트롤러(125)에 의해 관리될 수 있다. 메모리(115)는 “단기(short-term)”이라고 지칭될 수 있는 데이터, 즉 장기간 저장되지 않을 것으로 예상되는 데이터를 저장하기 위해 사용될 수 있다. 단기 데이터의 예들은 임시 파일들, 애플리케이션들에 의해 로컬하게 사용되는 데이터(다른 저장 위치들로부터 복사되었을 수 있는) 등을 포함할 수 있다.
프로세서(110) 및 메모리(115)는 또한 다양한 애플리케이션들이 실행될 수 있는 운영 체제를 지원할 수도 있다. 이러한 애플리케이션들은 메모리(115) 또는 저장 장치(120)로부터 데이터를 읽거나, 메모리(115) 또는 저장 장치(120)로 데이터를 쓰기 위해 요청들(또한 명령들로 지칭될 수도 있는)을 발행할 수 있다.
저장 장치(120)는 계산 저장 유닛(135)과 관련될 수 있다. 이하 도 3a 내지 3d를 참조하여 설명되는 바와 같이, 계산 저장 유닛(135)는 저장 장치(120)의 일부일 수도 있고, 또는 저장 장치(120)와 분리되어 있을 수도 있다. “관련된”이라는 표현은 계산 저장 유닛을 포함하는 저장 장치와, 저장 장치 자체의 부분은 아닌 계산 저장 유닛과 페어링된(paired) 저장 장치를 모두 나타내는 것으로 의도된다. 다시 말해서, 저장 장치와 계산 저장 유닛은, 그들이 물리적으로 분리된 장치들이지만 서로 통신할 수 있도록 하는 방법으로 연결된 경우 “페어링된(paired)”다고 지칭될 수 있다.
나아가, 저장 장치 및 페어링된 계산 저장 유닛 사이의 연결은 두 장치들이 통신할 수 있도록 할 수 있지만, 하나(또는 두) 장치가 서로 다른 파트너와 일하도록 할 수는 없다. 즉, 저장 장치는 또 다른 계산 저장 유닛과 통신할 수 없을 수 있고, 및/또는 계산 저장 유닛은 또 다른 저장 장치와 통신할 수 없을 수 있다. 예를 들어, 저장 장치 및 페어링된 계산 저장 유닛은 패브릭에 직렬로(어떤 순서로든) 연결되어, 계산 저장 유닛으로 하여금, 또 다른 계산 저장 유닛이 얻을 수 없는 방법으로 저장 장치로부터의 정보에 액세스할 수 있도록 할 수 있다.
프로세서(105) 및 저장 장치(120)는 패브릭(140)에 연결되는 것으로 나타난다. 패브릭(140)은 정보가 통과될 수 있는 임의의 패브릭을 나타내는 것으로 의도된다. 패브릭(140)은 기계(105)의 내부의 패브릭들을 포함할 수 있는데, 이들은 PCIe(Peripheral Component Interconnect Express), SATA(Serial AT Attachment), SCSI(Small Computer Systems Interface)와 같은 인터페이스들을 사용할 수 있다. 패브릭(140)은 또한 기계(105)의 외부의 패브릭들을 포함할 수 있는데, 이들은 이더넷, 인피니밴드(Infiniband), 또는 광채널과 같은 인터페이스들을 사용할 수 있다. 나아가, 패브릭(140)은 NVMe(NVM Express), NVMe-oF(NVMe over Fabrics), 또는 SSDP(Simple Service Discovery Protocol)과 같은 하나 이상의 프로토콜들을 지원할 수 있다. 그러므로, 패브릭(140)은 저장 장치(120)(좀 더 상세하게는, 저장 장치(120)와 관련된 계산 저장 유닛)로 직접적으로 또는 간접적으로 명령들이 전송될 수 있는 내부 및 외부 네트워크 연결들을 포함하는 것으로 간주될 수 있다.
도 1이 “저장 장치”라는 일반적인 용어를 사용하지만, 본 개시의 실시 예들은 데이터 품질 메트릭의 사용으로부터 이익을 얻을 수 있는 임의의 저장 장치 형식들을 포함할 수 있으며, 그 예는 하드 디스크 드라이브 및 솔리드 스테이트 드라이브(SSD)를 포함할 수 있다. 이하에서 SSD에 대한 임의의 참조는 이러한 본 개시의 다른 실시 예들을 포함하는 것으로 이해되어야만 한다. 나아가, 상술한(그리고 후술할) 설명들이 저장 장치(120)가 계산 저장 유닛과 관련되고 있는 것에 중점을 두고 있지만, 본 개시의 실시 예들은 계산 저장 유닛을 포함하는, 또는 관련된 저장 장치들 외의 다른 장치들로 확장될 수 있다. 상술한(그리고 후술할) 저장 장치에 대한 임의의 참조는 또한 계산 저장 유닛과 관련될 수 있는 다른 장치들을 포함하는 것으로 이해될 수 있다.
도 2는 본 개시의 실시 예에 따른 도 1의 기계(105)의 세부 사항을 나타낸다. 도 2에서, 전형적으로, 기계(105)는 기계의 구성 요소들의 동작들을 조정하는 데 사용될 수 있는 메모리 컨트롤러들(120) 및 클록들(205)을 포함할 수 있는, 하나 이상의 프로세서들(110)을 포함한다. 프로세서들(110)은 RAM, ROM, 또는 다른 상태 보존 매체를 예로서 포함할 수 있는 메모리들(115)에 연결될 수 있다. 프로세서들(110)은 또한 저장 장치들(125), 및, 예를 들어, 이더넷 커넥터 또는 무선 커넥터일 수 있는 네트워크 커넥터(210)에 연결될 수도 있다. 프로세서들(110)은 또한 사용자 인터페이스들(220) 및 입출력(I/O) 엔진들(225)을 사용하여 관리될 수 있는 I/O 인터페이스 포트들로 부착될 수 있는 버스들(215)에 연결될 수도 있다.
도 3a 내지 3d는 본 개시의 실시 예에 따른 도 1의 저장 장치(120)와 관련될 수 있는 도 1의 계산 저장 유닛(135)(“계산 장치” 또는 “장치”라고 지칭될 수도 있는)의 다양한 배치들을 나타낸다. 도 3a에서, 저장 장치(305)와 계산 장치(310-1)이 나타나 있다. 저장 장치(305)는 컨트롤러(315)와 스토리지(320-1)을 포함할 수 있고, 큐 페어들(queue pairs)을 통해 도달 가능할 수 있다. 큐 페어들(325)은 저장 장치(305)의 관리 및 저장 장치(305)의 I/O를 제어하기 위해 사용될 수 있다.
계산 장치(310-1)는 저장 장치(305)와 페어링될 수 있다. 계산 장치(310-1)는 임의의 수(하나 이상)의 프로세서들(330)을 포함할 수 있는데, 이들은 하나 이상의 서비스들(335-1, 335-2)을 제공할 수 있다. 더 명확히 설명하자면, (비록 본 개시의 실시 예들은 정확히 두 개의 서비스들(335-1, 335-2)을 포함하는 계산 장치(310-1)를 포함할지라도) 각 프로세서(330)는 임의의 수(하나 이상)의 서비스들(335-1, 335-2)을 제공할 수 있다. 계산 장치(310-1)는 큐 페어들(340)을 통해 도달 가능할 수 있는데, 이들은 계산 장치(310-1)의 관리 및/또는 계산 장치(310-1)의 I/O를 제어하기 위해 사용될 수 있다.
프로세서(330)는 니어-스토리지 프로세싱, 즉, 도 1의 프로세서(110)에 비해 저장 장치(305)에 가까운 프로세싱으로서 간주될 수 있다. 프로세서(330)가 저장 장치(305)에 가깝기 때문에, 프로세서(330)는 도 1의 프로세서(110)가 명령들을 실행하는 것보다 더 빠르게 저장 장치(305)에 저장된 데이터에 대해 명령들을 실행할 수 있다. 도 3a에 나타나지는 않았지만, 프로세서(330)는 저장 장치(305)에 저장된 데이터에 대한 명령들의 로컬 실행을 위해 사용될 수 있는 관련된 메모리를 가질 수 있다. 이러한 관련된 메모리는 도 1의 메모리(115)와 유사한 로컬 메모리, (메모리(115)와 같은 메모리보다 빠를 수 있으나, 생산하기에 더 비쌀 수 있는) 온-칩 메모리, 또는 둘 다를 포함할 수 있다.
도 3a가 패브릭(140)을 통해 별도로 도달 가능한 저장 장치(305) 및 계산 장치(310-1)을 나타내지만, 본 개시의 실시 예들은 (도 1에 나타나는 바와 같이) 저장 장치(305)와 계산 장치(310-1)가 직렬로 연결되는 것을 포함할 수도 있다. 즉, 저장 장치(305) 및 계산 장치(310-1)로 지시되는 명령들은 패브릭(140)으로의 동일한 물리적 연결에서 수신될 수 있고, 다른 장치로 도달하기 위해 한 장치를 통과할 수 있다. 예를 들어, 계산 장치(310-1)가 저장 장치(305) 및 패브릭(140) 사이에 위치하는 경우, 계산 장치(310-1)는 계산 장치(310-1) 및 저장 장치(305) 모두로 지시되는 명령들을 수신할 수 있다. 즉, 계산 장치(310-1)는 계산 장치(310-1)로 지시되는 명령들을 처리할 수 있고, 저장 장치(305)로 지시되는 명령들을 저장 장치(305)로 전송할 수 있다. 유사하게, 저장 장치(305)가 계산 장치(310-1) 및 패브릭(140) 사이에 위치하는 경우, 저장 장치(305)는 저장 장치(305) 및 계산 장치(310-1) 모두로 지시되는 명령들을 수신할 수 있다. 즉, 저장 장치(305)는 저장 장치(305)로 지시되는 명령들을 처리할 수 있고, 계산 장치(310-1)로 지시되는 명령들을 계산 장치(310-1)로 전송할 수 있다.
서비스들(335-1, 335-2)은 저장 장치(305)에 저장된 데이터에 대해 실행될 수 있는 서로 다른 다수의 기능들을 제공할 수 있다. 예를 들어, 서비스들(335-1, 335-2)은 데이터의 부호화, 복호화, 압축, 및/또는 압축 해제, 이레이저 코딩, 및/또는 정규식의 적용과 같은 미리 정의된 기능들을 제공할 수 있다. 또는, 서비스들(335-1, 335-2)는 데이터 검색 및/또는 SQL 기능들과 같은 더 일반적인 기능들을 제공할 수 있다. 서비스들(335-1, 335-2)은 또한 특정 애플리케이션을 위한 코드를 실행하는 것을 지원할 수 있다. 즉, 서비스들(335-1, 335-2)을 이용하는 애플리케이션은 저장 장치(305) 상의 데이터를 이용하여 실행될 수 있는 고유의 코드를 제공할 수 있다. 서비스들(335-1, 335-2)은 이러한 기능들의 임의의 조합들을 제공할 수 있다. 표 1은 프로세서(330)에 의해 제공될 수 있는 서비스들의 일부 예들을 나타낸다.
압축
부호화
데이터베이스 필터
이레이저 코딩
RAID
해시/CRC
RegEx(패턴 매칭)
스캐터/개더
파이프라인
비디오 압축
데이터 중복 제거
운영 체제 이미지 로더
컨테이너 이미지 로더
BPF(Berkeley packet filter) 로더
FPGA 비트스트림 로더
대형 데이터셋
프로세서들(330)(그리고, 사실은 계산 장치(310-1))는 임의의 원하는 방법으로 구현될 수 있다. 구현들의 예는 중앙 처리 장치(Central Processing Unit; CPU), 그래픽 처리 장치(Graphics Processing Unit; GPU), 범용 GPU, 데이터 처리 장치(Data Processing Unit; DPU), 및 텐서 처리 장치(Tensor Processing Unit; TPU)와 같은 로컬 프로세서를 포함할 수 있다. 프로세서들(330)은 또한 FPGA(Field Programmable Gate Array) 또는 ASIC(Application Specific Integrated Circuit)를 이용하여 구현될 수도 있다. 계산 장치(310-1)가 하나 이상의 프로세서(330)를 포함하는 경우, 각 프로세서는 상술한 바와 같이 구현될 수 있다. 예를 들어, 계산 장치(310-1)는 CPU, TPU, 및 FPGA를 각각 하나씩 가질 수 있고, 또는 계산 장치(310-1)는 두 개의 FPGA들을 가질 수 있고, 또는 계산 장치(310-1)는 두 개의 CPU들과 하나의 ASIC를 가질 수 있는 등이다.원하는 해석에 따라, 계산 장치(310-1) 또는 프로세서(들)(330)은 계산 저장 유닛으로서 간주될 수 있다.
도 3a가 저장 장치(305)와 계산 장치(310-1)를 별도의 장치들로서 나타내는 반면, 도 3b에서 이들은 결합될 수 있다. 그러므로, 계산 장치(310-2)는 컨트롤러(315), 스토리지(320-1), 및 서비스들(335-1, 335-2)을 제공하는 프로세서(들)(330)을 포함할 수 있다. 도 3a의 저장 장치(305) 및 계산 장치(310-1)에서와 같이, 관리 및 I/O 명령들은 큐 페어들(340)을 통해 수신될 수 있다. 비록 계산 장치(310-2)가 스토리지(320-1)와 프로세서(들)(330)을 모두 포함하는 것으로 나타나 있으나, 도 3b는 여전히 계산 저장 유닛과 관련된 저장 장치를 포함하는 것으로 간주될 수 있다.
도 3c에 나타난 또 다른 변형에서, 계산 장치(310-3)이 나타나 있다. 계산 장치(310-3)는 컨트롤러(315)와 스토리지(320-1)뿐만 아니라 서비스들(335-1, 335-2)을 제공하는 프로세서(들)(330)을 포함할 수 있다. 그러나 비록 계산 장치(310-3)이 컨트롤러(315), 스토리지(320-1), 및 프로세서(들)(330)을 포함하는 단일의 구성 요소로 간주될 수 있지만(그리고, 또한 계산 저장 유닛과 관련되는 저장 장치로서 간주될 수도 있지만), 도 3b에 나타난 구현과 다르게, 컨트롤러(315) 및 프로세서(들)(330)은 각각 고유의 큐 페어들(325, 340)을 포함할 수 있다(관리 및/또는 I/O를 위해 사용될 수 있는). 큐 페어들(325)을 포함함으로써, 컨트롤러(315)는 (프로세서(들)(330)을 통해 진행되는 모든 통신들을 필요로 하는 대신에) 스토리지(320-1)로 투명한 액세스를 제공할 수 있다.
나아가, 프로세서(들)(330)은 스토리지(320-1)에 액세스하기 위해 사용할 수 있는 프록시된 스토리지 액세스(345)를 가질 수 있다. 그러므로, 컨트롤러(315)를 통한 라우팅 액세스 요청들 대신, 프로세서(들)(330)은 스토리지(320-1)로부터의 데이터를 직접적으로 액세스할 수 있다.
도 3c에서, 컨트롤러(315)와 프록시된 스토리지 액세스(345)는 그들이 선택적인 구성 요소들이라는 것을 나타내기 위해 점선으로 나타나 있으며, 구현에 따라 생략될 수도 있다.
마지막으로, 도 3d는 또 다른 구현을 나타낸다. 도 3d에서, 어레이를 포함할 수 있는 계산 장치(310-4)가 나타나 있다. 도 3c의 계산 장치(310-3)과 유사하게, 어레이는 하나 이상의 스토리지(320-1~320-4)를 포함할 수 있다. 도 3d가 4개의 스토리지 구성 요소들을 나타내지만, 본 개시의 실시 예들은 임의의 수(하나 이상)의 스토리지 구성 요소들을 포함할 수 있다. 나아가, 개별적인 스토리지 구성 요소들은 도 3a 내지 3d에 나타나는 그것들과 같은 다른 저장 장치들일 수도 있다.
계산 장치(310-4)가 하나 이상의 스토리지 구성 요소(320-1~320-4)를 포함할 수 있기 때문에, 계산 장치(310-4)는 어레이 컨트롤러(350)를 포함할 수 있다. 어레이 컨트롤러(350)는 스토리지 구성 요소들(320-1~320-4)에 데이터가 어떻게 저장될 수 있는지, 스토리지 구성 요소들(320-1~320-4)로부터 데이터가 어떻게 검색될 수 있는지 관리할 수 있다. 예를 들어, 스토리지 구성 요소들(320-1~320-4)이 일정 레벨의 RAID들로 구현되는 경우, 어레이 컨트롤러(350)는 RAID 컨트롤러일 수 있다. 스토리지 구성 요소들(320-1~320-4)이 이레이저 코딩의 일부 형태를 이용하여 구현되는 경우, 어레이 컨트롤러(350)는 이레이저 코딩 컨트롤러일 수 있다.
도 4a 내지 4b는 본 개시의 실시 예에 따른 도 1의 계산 저장 유닛(135)이 개별적인 요청들을 핸들링하는 것과 배치 요청들을 핸들링하는 것을 비교한다. 도 4a에서, 애플리케이션(405)는 데이터 읽기 요청(410), 데이터 처리 요청(415), 및 데이터 쓰기 요청(420)과 같은 개별적인 요청들을 전송할 수 있다. 예를 들어, 데이터 읽기 요청(410)은 데이터베이스로부터 데이터를 읽기 위한 요청일 수 있고, 데이터 처리 요청(415)은 일부 기준(데이터 처리 요청(415)에 부착된 데이터(425)로서 계산 저장 유닛(135)으로 제공되는)에 따라 데이터를 필터링하기 위한 요청일 수 있고, 그리고 데이터 쓰기 요청(420)은 필터링된 데이터(430)를 다시 도 1의 저장 장치(120)에 쓰기 위한 요청일 수 있다. 계산 장치 유닛(135)이, 애플리케이션(405)이 이러한 단계들을 수행하기 위한 특정 요청들을 전송할 필요 없이, 도 1의 저장 장치(120)로부터 데이터를 읽을 수 있고, 필터링된 데이터를 도 1의 저장 장치(120)로 다시 쓸 수 있는 경우, 계산 장치 유닛(135)이 제공된 서비스로서 이 시퀀스를 수행할 수 있음을 주목할 것이다. 이 예는 실제 상황을 나타내기보다는, 이해를 쉽게 하기 위한 단순화된 예로서 의도된다. 나아가, 데이터 읽기 요청(410) 및 데이터 쓰기 요청(420) 사이의 추가적인 처리 요청들의 도입은 계산 저장 유닛(135)가 개별적인 처리 요청들로 전송될 필요가 있음을 의미할 수도 있다.
요청들(410, 415, 420) 각각이 별도의 요청으로 간주될 수 있기 때문에, 계산 저장 유닛(135)은 각 요청에 대해 순서대로 응답할 수 있고, 그로부터 결과를 반환할 수 있다. 그러므로, 계산 저장 유닛(135)이 데이터 읽기 요청(410)을 실행한 후(처리(435)로 나타남), 계산 저장 유닛(135)은 데이터 읽기 결과(440)를 반환할 수 있고, 이는 도 1의 저장 장치(120)로부터 읽은 데이터(425)를 포함할 수 있다. 유사하게, 계산 저장 유닛(135)이 데이터 처리 요청(415)을 실행한 후(처리(445)로 나타남), 계산 저장 유닛(135)은 데이터 처리 결과(45)를 반환할 수 있고, 이는 필터링된 데이터(430)를 포함할 수 있다. 그리고 계산 저장 유닛(135)이 데이터 쓰기 요청(420)을 실행한 후(처리(455)로 나타남), 계산 저장 유닛(135)은 데이터 쓰기 결과(460)를 반환할 수 있다.
각 요청이 계산 저장 유닛(135)로부터 반환된 결과와 함께 미러링되기 때문에, 애플리케이션(405)과 계산 저장 유닛(135) 사이에 다수의 메시지들이 전송되는 것을 주목해야 한다. 각 요청은 두 개의 메시지들을 포함한다(하나는 요청을 전송하기 위한 것이고, 다른 하나는 결과를 반환하기 위한 것이다). 나아가, 일부 메시지들은 애플리케이션(405)과 계산 저장 유닛(135) 사이에 전송되는 데이터를 포함할 수 있다. 전송될 데이터의 규모가 큰 경우, 데이터를 전송하는 것은 애플리케이션(405)(또는 보다 일반적으로, 다른 애플리케이션들 또는 프로세스들 또한 실행할 수 있는 도 1의 프로세서(110))과 계산 저장 유닛(135) 사이에 전송될 수 있는 다른 데이터(또는 메시지들)을 제한할 수 있다.
또한, 다양한 메시지들은 데이터의 중복 송신을 포함할 수 있는 것을 주목해야 한다. 예를 들어, 데이터 읽기 결과(440)는 애플리케이션(405)이 읽기를 요청한 데이터를 포함하는 데이터(425)를 포함할 수 있다. 그러나 애플리케이션(405)는 그 후 즉시 데이터(425)를 데이터 처리 요청(415)으로 다시 전송할 수 있는데, 이는 데이터가 두 번, 즉 한 번은 계산 저장 유닛(135)으로부터 애플리케이션(405)으로, 그리고 다른 한 번은 애플리케이션(405)으로부터 다시 계산 저장 유닛(135)으로 전송되었음을 나타낸다. 데이터(425)가 이미 저장 장치(120) 상에 있었기 때문에, 이러한 방법으로 데이터를 주고 받는 것은 대역폭을 거의 사용하지 않는다. 필터링된 데이터(430)를 계산 장치 유닛(135)과 애플리케이션(405) 사이에 주고 받는 것은 유사하게 거의 목적을 달성하지 못 한다.
개별적인 요청들(410, 415, 420)을 전송하는 대신, 애플리케이션(405)는 모든 세 개의 개별적인 요청들을 구체화하는 단일의 배치 요청(batch request)을 전송할 수 있다. 계산 저장 유닛(135)은 그 후 모든 세 개의 요청들을 그들이 단일의 요청인 것처럼 처리할 수 있고, 전체 배치 요청의 단일 결과를 반환할 수 있다. 이러한 상황은 도 4b에 나타난다.
도 4b에서, 애플리케이션(405)은 배치 요청(465)를 전송할 수 있는데, 이는 계산 저장 유닛(135)이 도 4a의 요청들(410, 415, 420)의 시퀀스를 어떻게 실행하는지 명령할 수 있다. 계산 저장 유닛(135)은 그 후 각 개별적인 요청(처리(435, 445, 455)로 나타난)를 실행할 수 있고, 배치 요청(465)의 배치 결과(470)를 반환할 수 있다. 그러므로, 계산 저장 유닛(135)은 도 4a의 메시지들(440, 450)을 생략함으로써 프로세서(110)와 계산 저장 유닛(135) 사이의 대역폭을 절약할 수 있다. 나아가, 계산 저장 유닛(135)이 도 4a의 데이터(425)를 애플리케이션(405)으로 다시 전송하는 것을 피할 수 있기 때문에, 프로세서(110)와 계산 저장 유닛(135) 사이의 대역폭은 도 4a의 데이터(425) 및 도 4a의 필터링된 데이터(430) 크기의 두 배만큼 더 감소될 수 있다(각 데이터가 두 번, 즉 한 번은 계산 저장 유닛(135)으로부터 애플리케이션(405)으로, 그리고 다른 한 번은 애플리케이션(405)으로부터 계산 저장 유닛(135)으로 전송되기 때문에).
위의 예는, 이해를 위해 간략화된 것 말고도, 요청들의 직렬 시퀀스를 가정한다. 즉, 도 4a의 데이터 읽기 요청(410)이 첫 번째로 실행되고, 그 다음 도 4a의 데이터 처리 요청(415)이 실행되고, 그 다음 도 4a의 데이터 쓰기 요청(420)이 실행된다. 그러나, 배치 요청들은 직렬 요청들 외에 다른 구조들을 지원할 수도 있고, 이는 도 5a 내지 5c를 참조하여 설명된다.
도 5a 내지 5c는 본 개시의 실시 예에 따른 도 4b의 배치 요청(465)을 위한 세 개의 서로 다른 구조들을 나타낸다. 도 5a에서, 직렬 배치 요청(465-1)이 나타나 있다. 위의 도 4b의 예와 유사하게, 직렬 배치 요청(465-1)은 입력 요청(505-1), 계산 요청(510-1), 및 출력 요청(515-1)의 세 개의 요청들을 포함할 수 있다. 입력 요청(505-1)은 도 4a의 데이터 읽기 요청(410)과 유사할 수 있다. 도 1의 저장 장치(120)로부터 데이터를 읽는 것 외에도, 데이터는 도 1의 메모리(115)로부터 도 1의 계산 저장 유닛(135)으로 전송될 수 있다. 다른 입력 요청들 또한 사용될 수 있다. 계산 요청(510-1)은 도 4a의 데이터 처리 요청(415)과 유사할 수 있고, 어떤 방법으로 데이터를 조작하기 위한 임의의 요청일 수 있다. 출력 요청(515-1)은 도 4a의 데이터 쓰기 요청(420)과 유사할 수 있다. 도 1의 저장 장치(120)로 데이터를 쓰는 것 외에도, 데이터는 도 1의 계산 저장 유닛(135)으로부터 도 1의 메모리(115)로 전송될 수 있다. 다른 쓰기 요청들 또한 사용될 수 있다. 도 5a가 직렬 배치 요청(465-1)의 세 개의 요청들을 나타내지만, 직렬 배치 요청(465-1)은 임의의 수의 요청들을 포함할 수 있고(비록 배치 요청(465-1)은 전형적으로 적어도 두 개의 요청들을 포함할 수 있지만), 이는 임의의 수의(0 이상) 입력 요청들(505-1), 계산 요청들(510-1), 및/또는 출력 요청들(515-1)을 임의의 원하는 순서대로 포함할 수 있다.
도 5b에서, 병렬 배치 요청(465-2)이 나타나 있다. 병렬 배치 요청(465-2)는 5개의 계산 요청들(510-2~510-6)을 포함하는 것으로 나타나 있는데, 이는 병렬로 실행될 수 있다. 요청들이 병렬로 실행되기 위해, 요청들은 서로에게 의존하지 않을 수 있다. 즉, 계산 요청들(510-2~510-6) 중 임의의 한 쌍, 예를 들어, 계산 요청들(510-2, 510-3)의 경우, 계산 요청(510-2)은 계산 요청(510-3)에 의존하지 않을 수 있고, 계산 요청(510-3)은 계산 요청(510-2)에 의존하지 않을 수 있다. 비유로서, 병렬 컴퓨팅에서 단일 명령, 다중 데이터(Single Instruction, Multiple Data; SIMD)와, 다중 명령, 단일 데이터(Multiple Instruction, Single Data; MISD)를 예로 들면, 동일한 데이터는 수 개의 서로 다른 계산 요청들을 사용하여 처리될 수 있고, 또는 동일한 계산 요청은 수 개의 서로 다른 데이터에 적용될 수 있다. 하나의 요청 및 다른 요청 사이의 의존도가 없는 이상, 요청들은 병렬로 수행될 수 있다. 물론, 병렬 배치 요청(465-2)는 각각 서로 다른 데이터에 적용되는 서로 다른 계산 요청들을 포함할 수 있다.
도 5b가 병렬 배치 요청(465-2)의 다섯 개의 계산 요청들(510-2~510-6)을 나타내지만, 병렬 배치 요청(465-2)는 임의의 수(0 이상, 비록 병렬 배치 요청(465-2)은 전형적으로 적어도 둘 이상을 포함할 수 있지만)의 계산 요청들을 포함할 수 있다. 나아가, 병렬 배치 요청(465-2)가 오직 계산 요청들만을 포함하지만, 병렬 배치 요청(465-2)은 입력 요청들, 출력 요청들, 또는 입력, 계산, 출력 요청들의 임의의 원하는 조합을 포함할 수 있다.
마지막으로, 도 5c는 혼합 배치 요청(465-3)을 나타낸다. 혼합 배치 요청(465-3)은 병렬로 이루어진 일부 요청들과, 직렬로 이루어진 일부 요청들을 포함할 수 있다. 예를 들어, 입력 요청들(505-7, 505-8)은 병렬로 실행될 수 있고, 계산 요청들(510-7, 510-8)과 계산 요청들(510-9, 510-10) 또한 마찬가지이다. 그러나, 계산 요청들(510-9, 510-10)은 모두 계산 요청(510-11)을 위한 데이터를 제공할 수 있고, 출력 요청(515-7)이 직렬로 이어질 수 있다. 다시 말해, 혼합 배치 구조는 배치 요청이 엄격하게 직렬도 아니고, 엄격하게 병렬도 아닌 경우 사용될 수 있다.
혼합 배치 요청(465-3)은 전체 8개의 요청들(2개의 입력 요청들, 5개의 계산 요청들, 그리고 한 개의 출력 요청)을 나타낸다. 직렬 배치 요청(465-1) 및 병렬 배치 요청(465-2)과 같이, 혼합 배치 요청(465-3)은 임의의 수(0 이상, 비록 혼합 배치 요청(465-3)은 전형적으로 적어도 둘 이상을 포함할 수 있지만)의 요청들을 임의의 원하는 조합으로 포함할 수 있다.
위의 설명이 배치 요청의 다양한 요청들 사이에 특정 관계가 있을 수 있음을 암시하지만, 배치 요청 상의 요청들 사이의 관계(들)의 구체적인 본성은 비교적 넓을 수 있다. 후술되는 것들은 요청들 사이에 존재할 수 있는 관계들의 예이다(본 개시의 실시 예들은 또한 다른 관계들을 포함할 수도 있다).
본 개시의 일부 실시 예들에서, 두 개(또는 그 이상)의 요청들은 서로 다른 다이/NVM 세트/네임스페이스들로부터 병렬로 스토리지 데이터를 불러올 수 있다. 스토리지의 서로 다른 부분들로부터 데이터를 불러오는 요청들을 가짐으로써, 이러한 요청들을 병렬로 수행하는 것이 가능할 수 있고, 잠재적으로 전체 실행 시간이 감소할 수 있다.
본 개시의 일부 실시 예들에서, 두 개(또는 그 이상)의 요청들은 큰 작업을 유사한 계산 장치들에서 실행될 수 있는 작은 작업들로 분할할 수 있다. 서로 다른 계산 장치들을 이용하여 실행되는 요청들을 가짐으로써, 이러한 요청들을 병렬로 수행하는 것이 가능할 수 있고, 잠재적으로 전체 실행 시간이 감소할 수 있다.
본 개시의 일부 실시 예들에서, 두 개(또는 그 이상)의 요청들은 특정 계산 서비스들에 대해 더 가까운/빠른 특정 장치 메모리에 의존할 수 있다. 예를 들어, FPGA 로컬 프라이빗 메모리와, FPGA 공유 DRAM의 경우이다. 계산 서비스들에 대해 더 가까운 또는 빠른 메모리를 이용함으로써, 전체 실행 시간이 감소할 수 있다.
본 개시의 일부 실시 예들에서, 두 개(또는 그 이상)의 요청들은 특정 장치 DMA 엔진들에 대해 단일 요청보다 더 효율적일 수 있고, 더 나은 성능을 제공할 수 있다. 예를 들어, 완료를 위해 계속적으로 진행되는 단일 요청을 실행하는 계산 장치를 갖는 것에 비해, 다른 요청들과 함께 산재될 수 있는 여러 요청들(각각은 더 작을 수 있음)을 사용하는 것이 더 효율적일 수 있다.
본 개시의 일부 실시 예들에서, 두 개(또는 그 이상)의 요청들은 또 다른 배치 요청과 겹치는 것을 회피하는 방법으로 장치 메모리를 사용하기 위해 배치 요청의 계산 및 스토리지 요청들을 관리할 수 있다. 예를 들어, 계산 장치가 장치 메모리로서 두 개의 메모리 뱅크들을 포함하는 경우, 첫 번째 배치 할당들은 하나의 메모리 뱅크를 사용할 수 있고, 두 번째 배치 할당들은 다른 메모리를 사용할 수 있으며, 이로써 메모리 경합을 피할 수 있다. 서로 다른 스토리지 영역들을 사용하는 요청들을 가짐으로써, 이러한 요청들을 병렬로 수행하는 것이 가능할 수 있고, 잠재적으로 전체 실행 시간이 감소할 수 있다.
본 개시의 일부 실시 예들에서, 두 개(또는 그 이상)의 요청들은 단독 요청으로서보다 배치 요청에서 더 나은 성능을 보일 수 있는 구성 요소의 사용을 활용하기 위해 배칭될(batched) 수 있다. 예를 들어, 특정 서비스는 호스트로 다시 보고할 때는 안 좋은 지연 시간을 가질 수 있고, 계산 장치의 다른 구성 요소로 보고할 때는 더 나은 지연 시간을 가질 수 있는 하드웨어 ASIC 상에 구현될 수 있다. 전체 실행에 가장 적합한 구성 요소들을 사용하여 처리된 요청들을 가짐으로써, 전체 실행 시간을 감소시키는 것이 가능할 수 있다.
도 6은 본 개시의 일부 실시 예들에 따라 도 4b의 배치 요청의 처리 동안 데이터를 저장하기 위해 사용되는 버퍼들을 갖는 배치 요청의 예를 나타낸다. 도 6에서, 배치 요청(465-4)가 나타나 있다. 나타난 바와 같이, 배치 요청(465-4)는 순차적으로 실행될 다수의 요청들을 포함하는데, 이는 배치 요청(465-4)이 직렬 배치 요청일 수 있음을 의미한다. 배치 요청(465-4)는 데이터베이스의 데이터를 처리하기 위한 배치 요청의 예일 수 있다.
배치 요청(465-4)은 도 1의 저장 장치(120) 상의 데이터베이스로부터 데이터를 읽기 위한 읽기 요청(605)으로 시작한다. 읽기 요청(605)은 입력 요청의 한 형태일 수 있다. 복호화 요청(610)은, 이하의 다양한 요청들과 같이, 계산 요청의 한 형태일 수 있고, 데이터베이스로부터 부호화된 데이터를 복호화하기 위해 실행될 수 있다. 복호화 이후, (복호화된) 데이터를 압축 해제하기 위해 압축 해제 요청(615)이 실행될 수 있다. 압축 해제 이후, 데이터를 필터링하기 위해 데이터베이스 필터 요청(620)이 실행될 수 있다. 필터링 이후, 필터링된 데이터를 원하는 방법으로 결합하기 위해 집계 요청(625)이 실행될 수 있다. 마지막으로, 출력 요청의 한 형태일 수 있는 쓰기 요청(630)은, 처리된 데이터를 나중에 사용하기 위해 도 1의 저장 장치(120)로 다시 쓸 수 있다.
각 요청(605~630)은 입력 및/또는 출력(또한, 요청들에 대한 소스 및 도착지로 지칭될 수도 있는)을 위해 사용될 수 있는 다양한 버퍼들을 특정할 수 있다. 예를 들어, 버퍼(635)는 읽기 요청(605)에 의해 읽힌 데이터가 저장될 수 있는 출력 버퍼로서 사용될 수 있다. 버퍼(635)는 복호화 요청(610)에 대한 입력 버퍼로서의 역할을 할 수 있고, 버퍼(640)는 복호화 요청(610)에 대한 출력 버퍼로서의 역할을 할 수 있다. 버퍼들(640, 645)은 각각 압축 해제 요청(615)에 대한 입력 및 출력 버퍼로서 역할을 할 수 있다.
데이터베이스 필터 요청(620)은 버퍼(645)를 입력 버퍼로서 특정할 수 있고, 두 개의 출력 버퍼들(650, 655)을 특정할 수 있음을 주목할 것이다. 유사하게, 집계 요청(625)은 버퍼들(650, 655)를 모두 입력 버퍼들로 특정할 수 있고, 버퍼(660)을 출력 버퍼로서 특정할 수 있음을 주목할 것이다. 그러므로, 특정 요청은 하나 이상의 입력 버퍼 및/또는 하나 이상의 출력 버퍼를 특정할 수 있다. 예를 들어, 데이터베이스 필터 요청(620)은 두 개의 서로 다른 축을 따르는 데이터베이스로부터 데이터를 필터링할 수 있고, 집계 요청(625)은 원하는 방법에 따라 이러한 필터의 결과들을 결합할 수 있다. 마지막으로, 쓰기 요청(630)은 버퍼(660)를 입력 버퍼로서 특정할 수 있고, 출력 버퍼는 갖지 않을 수 있다.
다양한 버퍼들(635~660)은 데이터가 임시로 저장될 수 있는 일부 메모리(DRAM 또는 도 1의 계산 저장 유닛(135)의 온-칩 메모리와 같은)의 위치들로서 특정될 수 있다. 예를 들어, 버퍼들(635~660)은 이러한 일부 메모리의 다양한 어드레스 범위들을 포함할 수 있다. 데이터는 다양한 요청들에 의해 이러한 버퍼들에 쓰일 수 있고 및/또는 버퍼들로부터 읽힐 수 있다. 이러한 버퍼들은 특정 요청이 다른 요청으로부터의 데이터에 의존하는지 여부를 판단하는 데 사용될 수 있다. 예를 들어, 읽기 요청(605)은 버퍼(635)에 데이터를 쓸 수 있고, 복호화 요청(610)은 버퍼(635)로부터 데이터를 읽을 수 있기 때문에, 복호화 요청(610)은 읽기 요청(605)이 먼저 완료된 것에 의존하여 결정될 수 있다. 이러한 의존도 정보가 어떻게 결정되는지는 이하 도 12를 참조하여 더 설명된다.
도 7은 본 개시의 실시 예에 따라 데이터가 재사용되고 있는 도 4b의 배치 요청의 다른 예를 나타낸다. 도 7에서, 배치 요청(465-5)이 나타나 있다. 배치 요청(465-5)은 예를 들어, 행렬 곱셈 시퀀스 (AB)B를 수행하기 위한 배치 요청을 나타낼 수 있다. 읽기 요청들(705, 710)은 다양한 소스들로부터 행렬들 A와 B를 읽을 수 있다. 예를 들어, 행렬 A는 도 1의 저장 장치(120)로부터 읽힐 수 있고, 행렬 B는 도 1의 메모리(115)로부터 전송될 수 있다. 곱셈 요청(715)은 그 후 첫 번째 행렬 곱셈 (AB)를 수행할 수 있다. 곱셈 요청(720)은 그 후 두 번째 행렬 곱셈 (AB)B을 수행할 수 있다. 마지막으로, 쓰기 요청(725)은 도 1의 저장 장치(120) 또는 메모리(115) 중 원하는 곳으로 행렬 곱셈의 결과를 다시 쓸 수 있다.
도 7에서, 읽기 요청(710)의 결과가, 먼저 곱셈 요청(715)에 의해, 그리고 다시 곱셈 요청(720)에 의해, 두 번 사용됨을 주목할 것이다. 이는 특정 버퍼(도 7에는 도시되지 않음)가 다수의 연속적인 요청들에 대한 입력들로 사용될 수 있음을 나타낸다. 버퍼는 다음 요청이 수행된 후 다시 사용되기 위해 꼭 비워질 필요는 없다. 버퍼가 안전하게 삭제되기 이전에, 버퍼를 액세스하기 위한 마지막 요청은 반드시 완료되어야 한다.
도 8은 본 개시의 실시 예에 따른 배치 요청들을 생성하기 위해 사용되는 소프트웨어의 세부 사항들을 나타낸다. 도 8에서, 장치 드라이버(130)가 나타나 있다. 장치 드라이버(130)는 생성 소프트웨어(805)와 실행 소프트웨어(810)를 포함하는 것으로 나타나 있고, 생성 소프트웨어(805)는 배치 생성 소프트웨어(815)와 요청 추가 소프트웨어(820)를 포함한다. 생성 소프트웨어(805)는 도 4b의 배치 요청(그리고 도 5a 내지 5c, 도 6, 및 도 7에 나타난 모든 변형들)을 생성하기 위한 역할을 할 수 있다. 배치 생성 소프트웨어(815)는 도 4b의 애플리케이션(405)에 의해 새로운 배치 요청이 생성될 것을 요청하기 위해 사용될 수 있다. 요청 추가 소프트웨어(820)는 존재하는 배치 요청으로 요청을 추가하기 위해 사용될 수 있다. 요청 추가 소프트웨어(820)를 생성하는 데 있어서, 도 4b의 애플리케이션(405)은 새로운 요청이 어느 배치 요청으로 추가되어야 하는지, 새로 추가될 요청에 대한 정보, 배치 요청의 구조 상 어디에 새로운 요청이 삽입되어야 하는지에 대한 정보(예를 들어, 새로운 요청은 배치 요청의 존재하는 요청들 이전에 및/또는 이후에 삽입되어야 한다는 것), 그리고 새로운 요청에 대한 데이터의 입력과 출력을 위해 사용될 버퍼(들)에 대한 정보를 식별할 수 있다.
한편, 실행 소프트웨어(810)는 도 1의 계산 저장 유닛(135)으로 배치 요청을 전송하기 위해 사용될 수 있다. 도 4b의 애플리케이션(405)는 처리될 배치 요청의 식별자와 함께, 배치 요청이 전송되어야 하는 계산 저장 유닛(적어도, 도 1의 시스템(105)내의 고유한 일부 식별자를 이용하여 식별될 수 있는)을 특정할 수 있다. 실행 소프트웨어(810)는 또한, 소프트웨어가 도 1의 계산 저장 유닛(135)에 의해 실행되기 위한 배치 요청에 대한 큐를 생성한다는 점에서, 큐잉 소프트웨어라고 지칭될 수도 있다.
배치 소프트웨어(805)와 실행 소프트웨어(820)는, 도 1의 저장 장치 (120) 및/또는 도 1의 계산 저장 유닛(135)으로의 인터페이스로서의 장치 드라이버(130)가 도 1의 계산 저장 유닛(135)으로 도 4b의 배치 요청(465)을 전송할 수 있을 것이라는 이론 하에, 장치 드라이버(130)의 일부로서 나타나 있다. 그러나 배치 소프트웨어(805)와 실행 소프트웨어(820)는 도 1의 시스템(105) 어디에도 위치할 수 있다. 배치 소프트웨어(805)와 실행 소프트웨어(820)를 API의 일부로 만듦으로써, 도 4b의 배치 요청(465)의 생성 및 사용은 도 4b의 애플리케이션(405)(그리고 도 1의 기계(105)의 하드웨어) 그리고 도 1의 계산 저장 유닛(135)으로부터 모두 추상화될 수 있다. 즉, 배치 소프트웨어(805)와 실행 소프트웨어(820)가 API의 일부인 이상, 도 4b의 배치 요청(465)은 특정 하드웨어 및/또는 도 1의 계산 저장 유닛(135)에 의해 제공되는 기능에 대한 아무 지식 없이도 생성될 수 있다. 이러한 방법으로, 도 4b의 배치 요청(465)은 도 1의 시스템(105) 내에 이용 가능한 임의의 계산 저장 유닛과 함께 사용될 수 있다. 이러한 일반화는, 도 1의 계산 저장 유닛(135)이 도 4b의 배치 요청(465)을 실행할 하드웨어를 전부 또는 일부 포함하지 않는 경우 어떻게 되는지에 대한 중요한 질문을 야기하는데, 이는 도 11을 참조하여 이하에서 설명될 것이다.
도 8에는 나타나지 않았지만, 다른 소프트웨어도 배치 소프트웨어(805)의 일부로서 포함될 수 있다. 예를 들어, 배치 생성 소프트웨어(815)를 미러링하기 위해, 더 이상 필요하지 않은 존재하는 배치 요청을 삭제하기 위한 소프트웨어가 있을 수 있다. 또한, 배치 요청의 크기를 재조절하고, 더 많은 요청들을 위한 공간을 추가하고, 요청들에 대해 더 이상 필요하지 않은 공간을 삭제하고, 그리고 배치 요청을 재설정하기 위한 명령들과 같은 다른 명령들도 배치 소프트웨어(805)의 일부로서 존재할 수 있다. 표 2는 설명들 및 파라미터 리스트와 함께, 사용될 수 있는 다양한 명령들을 나타내지만, 표 2는 이러한 명령들의 전체 목록으로 간주되어서는 안 될 것이다. 명령의 이름들과 파라미터 리스트들은 본 개시의 실시 예들에 따라 달라질 수 있다.
명령 이름 기능 파라미터
csAllocBatchRequest 새로운 배치 요청을 생성 Mode: 배치 요청의 구조(직렬, 병렬, 또는 혼합)MaxReqs: 이 배치 요청에 대해 예상되는 요청들의 최대 수
BatchHandle: 배치 요청을 저장하고 있는 데이터 구조로의 포인터
csFreeBatchRequest 존재하는 배치 요청에 의해 사용되던 공간을 제거 BatchHandle: 배치 요청을 저장하고 있는 데이터 구조로의 포인터
csAddBatchEntry 존재하는 배치 요청으로 요청을 추가 BatchHandle: 배치 요청을 저장하고 있는 데이터 구조로의 포인터Req: 배치 요청을 추가하기 위한 새로운 요청
Before: 추가된 배치 요청 이전에 올 요청의 식별자
After: 추가된 배치 요청 이후에 올 요청의 식별자
csHelperConfigBatchEntry 존재하는 배치 요청의 파라미터를 변경 BatchHandle: 배치 요청을 저장하고 있는 데이터 구조로의 포인터Entry: 설정될 요청의 식별자
Req: 설정 정보를 갖는 데이터 구조로의 포인터
csHelperResizeBatchRequest 존재하는 배치 요청의 요청들의 수를 증가 또는 감소 BatchHandle: 배치 요청을 저장하고 있는 데이터 구조로의 포인터MaxReqs: 이 배치 요청에 대한 요청들의 새로운 최대 수
csQueueBatchRequest 계산 저장 유닛에 의해 실행되기 위한 배치 요청에 대한 큐를 생성 BatchHandle: 배치 요청을 저장하고 있는 데이터 구조로의 포인터ReqContext: 배치 요청에 대한 내용
CallbackFn: 배치 요청이 완료된 경우 호출될 함수로의 포인터
EventHandle: 배치 요청이 완료되었을 때 트리거링될 이벤트의 식별자
도 9는 본 개시의 실시 예에 따른 도 4b의 배치 요청(465)을 저장하기 위해 사용될 수 있는 데이터 구조들의 다양한 예를 나타낸다. 도 9에서, 데이터 구조들(905, 910, 915)가 나타나 있다. 데이터 구조들(905, 910, 915)는 도 4b의 배치 요청(465)이 저장될 수 있는 다양한 서로 다른 방법들이다. 도 9는 도 4b의 배치 요청(465)을 저장하기 위해 사용될 수 있는 데이터 구조들의 전체 목록을 나타내는 것이 아니며, 다른 데이터 구조들 또한 사용될 수 있다.데이터 구조(905)에서, 도 4b의 배치 요청(465)은, 도 4b의 배치 요청(465)에 대한 구조의 유형(직렬, 병렬, 또는 혼합)(열거형은 설명적인 상수 이름들에 값을 부여하기 위해 사용된다), 도 4b의 배치 요청(465)의 길이(즉, 도 4b의 배치 요청(465)의 개별 요청들의 수), 그리고 세 가지의 서로 다른 데이터 구조들 중 하나(메모리로 또는 메모리로부터 데이터를 복사하고, 데이터를 처리하고, 또는 저장 장치(120)로부터 데이터를 읽고 쓰기 위해 사용되는)를 포함할 수 있다. 이러한 데이터 구조들은 그 자체로 (예를 들어, 어레이에 저장되어 있거나 링크드 리스트로서 연결되는) 다수의 개별 요청들을 포함할 수 있고, (스토리지로부터) 데이터가 읽히고, (스토리지로) 쓰이고, 또는 (메모리로 또는 메모리로부터) 복사될 어드레스와 같은 설정 정보를 포함할 수 있다.
데이터 구조(910)는, 데이터 구조(910)가 (API가 이러한 관리를 하도록 두기보다는) 실행을 위해 큐잉될 수 있는 다음 배치 요청으로의 포인터와, 도 4b의 배치 요청(465)의 요청들과 관련된 의존도 정보를 명시적으로 포함하는 것을 제외하면, 데이터 구조(905)와 유사하다. 열거형으로 모드를 레이블링하는 것 대신, 데이터 구조(910)에서는 서로 다른 데이터 구조가 이러한 정보를 위해 사용되지만, 그 효과는 동일하다.
데이터 구조(915)는 데이터 구조(910)와 유사하지만, 다음에 큐잉된 배치 요청으로의 포인터 또는 의존도 정보를 저장하지 않는다. 데이터 구조(915)가 배치 요청의 특정 요청을 설명하기 위해 사용될 때, 이러한 데이터 구조들의 어레이가 전체 배치 요청을 설명하기 위해 사용될 수 있고, 어레이의 각 엔트리는 배치 요청의 하나의 특정 요청을 나타낸다.
도 10은 본 개시의 실시 예에 따른 도 4b의 배치 요청(465)을 사용할 수 있는 코드 스니펫의 예를 나타낸다. 도 10에, 코드(1005)가 나타나 있다. 코드(1005)는 단순히 예에 불과하며, 완성되지 않았음을 이해해야 할 것이다. 프로그램을 완성하기 위해, 다른 코드가 필요할 수 있다.
코드(1005)에서, 1행에서, 도 4b의 배치 요청(465)이 생성될 수 있다. 2행~4행에서, 도 4b의 배치 요청(465)으로 저장하고, 계산하고, 그리고 (메모리로부터) 복사하는 요청들이 추가된다. 개별 요청들은 마지막부터 첫 번째 순서대로 추가된다. 저장 요청은 도 4b의 배치 요청(465)에서 처리될 마지막 요청일 수 있고, 복사 요청은 도 4b의 배치 요청(465)에서 처리될 첫 번째 요청일 수 있다.
5행에서, 파일이 여전히 처리할 데이터를 갖고 있는 동안 동작하는 루프가 시작된다. 6행에서, 도 4b의 배치 요청(465)은 도 1의 계산 저장 유닛(135)에 의해 실행되기 위해 큐잉될 수 있다. 7행에서, 파일의 크기는 처리될 데이터의 양만큼 감소할 수 있고, 그리고 8행에서, 다음 데이터 더미가 저장될 위치가 식별될 수 있다. 9행에서, 데이터가 저장될 위치에 대한 업데이트와 함께, 도 4b의 배치 요청(465)의 저장 요청이 재설정될 수 있다. 이 시점에서, (5행에서 시작된) 루프는 완료되고, 상술한 바와 같이 파일의 모든 데이터가 처리될 때까지 반복될 수 있다. 마지막으로, 10행에서, 도 4b의 배치 요청(465)이 더 이상 필요하지 않기에, 도 4b의 배치 요청(465)은 제거될 수 있고, 도 4b의 배치 요청(465)에 의해 사용되는 스토리지는 회수될 수 있다.
도 11은 본 개시의 실시 예에 따라 배치 요청들을 처리하기 위해 디자인된 도 1의 계산 저장 유닛(135)의 세부 사항들을 나타낸다. 도 11에서, 계산 저장 유닛(135)은 리시버(1105), 파서(1110), 다이렉티드 그래프 생성기(1115), 베리파이어(1120), 스케줄러(1125), 하드웨어(1130), 및 트랜스미터(1135)를 포함할 수 있다. 리시버(1105)는 도 4b의 애플리케이션(405)으로부터 도 4b의 배치 요청(465)을 수신할 수 있다. 더 정확히는, 리시버(1105)는 API 또는 다른 소프트웨어로부터 도 4b의 배치 요청(465)을 수신할 수 있으나, 이러한 구성 요소들이 도 4b의 애플리케이션(405)을 대신하여 기능을 수행할 수 있으므로, 이러한 구성 요 소들은 도 4b의 애플리케이션(405) 대신 동작하는 에이전트들로 간주될 수 있다. 파서(1110)는 도 4b의 배치 요청(465)의 일부인 개별 요청들을 식별하기 위해 도 4b의 배치 요청(465)의 데이터 구조를 파싱할 수 있다. 파서(1110)는 도 4b의 배치 요청(465)을 위해 데이터 구조 내에 정의된 바와 같이, 도 4b의 배치 요청(465)을 이루는 요청들을 따라 동작할 수 있다.
다이렉티드 그래프 생성기(1115)는 도 4b의 배치 요청(465)의 다양한 요청들 사이의 의존도들을 나타내는 다이렉티드(directed) 그래프를 생성할 수 있다. 베리파이어(1120)는 다이렉티드 그래프 생성기(1115)에 의해 생성된 다이렉티드 그래프가 어사이클릭(acyclic; 비순환)하다는 것을 검증할 수 있다. 다이렉티드 그래프 생성기(1115)와 베리파이어(1120)의 동작은 이하에서 도 12를 참조하여 더 상세히 설명된다.
스케줄러(1125)는 다이렉티드 그래프 생성기(1115)에 의해 생성된 다이렉티드 그래프를 갖고, 그 정보를 이용하여 도 4b의 배치 요청(465)의 다양한 요청들을 실행을 위해 스케줄링할 수 있다. 개별 요청이 의존도를 갖지 않거나, 모든 의존도들이 만족된 경우, 스케줄러(1125)는 그 요청을 즉시 실행할 수 있도록 스케줄링할 수 있다. 다른 요청들은 그들이 실행되기 이전에, 그들의 의존도가 만족될 때까지 대기할 수 있다.
스케줄러(1125)는 또한 도 4b의 두 개 이상의 배치 요청들(465)에 대한 요청들을 스케줄링하는 것을 관리할 수 있고, 그들의 상대적인 실행을 관리할 수 있다. 예를 들어, 하드웨어의 특정 부분이 실행되기를 기다리는 도 4b의 두 개 이상의 배치 요청들(465)이 있는 경우, 스케줄러(1125)는 이러한 하나의 요청이 실행되도록 스케줄링하고, 다른 하나의 요청은 첫 번째 요청이 완료될 때까지 대기하도록 할 수 있다. 물론, 다수의 이러한 요청들이 도 1의 계산 저장 유닛(135) 또는 저장 장치(120)의 능력들에 기반하여 병렬로 실행될 수 있는 경우, 모든 요청들은 병렬로 실행될 수 있다.
스케줄러(1125)는 또한 병렬로 실행되어야 하는 요청들을 관리할 수 있다. 다수의 요청들이 병렬로 실행되는 것을 지원할 충분한 하드웨어가 존재하는 경우, 스케줄러(1125)는 병렬 실행을 위해 이러한 하드웨어를 사용할 수 있다. 그렇지 않은 경우, 스케줄러(1125)는 하드웨어 내부에 시간 공유(time-sharing) 배치를 구현하여, 비록 각 요청이 다른 요청이 실행되기 위해 중지될 수 있지만, 다수의 요청들이 동일한 시간 부근에 모두 진행될 수 있도록 한다. 이는 단일 코어/단일 스레드 프로세서가 동시에 다수의 프로그램들을 어떻게 실행할 수 있는지와 유사하다. 각 프로그램은 다른 프로그램이 실행되는 것을 허용하기 위해 프로세서에서 제거되기 이전에 약간의 시간 동안 프로세서를 사용한다.
스케줄러(1125)는 또한 계산 저장 유닛(135)이 개별 요청을 실행하기 위해 필수적인 하드웨어를 포함하지 않을 수 있는지를 인지할 수 있다. 예를 들어, 도 4b의 배치 요청(465)의 개별 요청은 도 4b의 애플리케이션(405)에 의해 제공되는 고유 코드를 실행하는 것을 수반할 수 있다. 계산 저장 유닛(135)이 이 고유 코드를 실행할 수 있는 프로세서를 포함하고 있지 않는 경우, 스케줄러(1125)는 계산 저장 유닛(135) 외부의 일부 다른 하드웨어로 이 특정 요청을 처리하도록 요청할 수 있다. 이러한 다른 하드웨어는, 예를 들어, 도 1의 시스템(105)의 프로세서(110), 또는 도 1의 시스템(105)의 또 다른 계산 저장 유닛(135)일 수 있다. 스케줄러(1125)는 또한 도 1의 계산 저장 유닛(135)으로 하여금 도 4b의 배치 요청(465)의 개별 요청이 만족되지 않는 경우, 에러를 도 4b의 애플리케이션(405)으로 다시 반환하도록 할 수 있다.
하드웨어(1130)는 개별 요청을 실행하기 위한 임의의 하드웨어(그리고 또한 적절한 소프트웨어를 포함할 수 있는)일 수 있다. 하드웨어(1130)는 FPGA로서 나타나 있으나, 하드웨어(1130)는 CPU, GPU, 범용 GPU, TPU, DPU, BPF 프로세서, 또는 ASIC를 이용하여 구현될 수도 있다. 계산 저장 유닛(135)은 하드웨어(1130)의 다수의 예들을 또한 포함할 수 있는데, 이는 동일한 또는 서로 다른 유형들의 하드웨어일 수 있고, 동일한, 유사한, 또는 서로 다른 기능들을 제공할 수 있다(예를 들어, 서로 다른 계산 요청들을 구현하기 위한 서로 다른 하드웨어(1130)). 예를 들어, 하드웨어(1130)의 한 예는 특정 서비스를 구현하기 위해 디자인된 FPGA를 포함할 수 있고, 하드웨어(1130)의 또 다른 예는 도 4b의 애플리케이션(405)으로부터 다운로드되는 프로그램들을 지원할 수 있는 CPU를 포함할 수 있다. 마지막으로, 트랜스미터(1135)는 도 4b의 배치 결과(470)(도 4b의 배치 요청(465)의 실행 결과)를 도 4b의 애플리케이션(405)으로 다시 전송할 수 있다.
도 11에 나타나지 않은 것은, 리시버(1105)가 도 4b의 애플리케이션(405)으로부터 도 4b의 배치 요청(465)을 수신하고, 트랜스미터(1135)가 도 4b의 애플리케이션(405)으로 도 4b의 배치 결과(470)를 전송하는 물리적인 인터페이스이다. 도 11에 나타난 다양한 구성 요소들은 하드웨어 또는 적절한 프로세서 상에서 실행되는 소프트웨어를 이용하여 구현될 수도 있다.
도 12는 본 개시의 실시 예에 따라 도 7의 배치 요청(465-5)에 대해 도 11의 다이렉티드 그래프 생성기(1115)에 의해 생성된 다이렉티드 그래프의 예의 세부 사항들을 나타낸다. 도 12에서, 다이렉티드 그래프(1205)가 나타나 있다. 다이렉티드 그래프(1205)는 노드들(1210, 1215, 1220, 1225, 1230)과, 소스 및 싱크 노드들(도 7의 배치 요청(465-5)의 시작 지점과 종료 지점을 표시하는)을 포함한다. 노드들(1210, 1215, 1220, 1225, 1230)은 각각 요청들(705, 710, 715, 720, 725)를 나타낸다. 다이렉티드 그래프(1205)에서 노드들을 연결하는 화살표들은 의존도를 나타낼 수 있다. 노드들(1210, 1215)는 이전의 요청들에 의존하지 않으며, 노드(1220)는 노드들(1210, 1215)에 모두 의존하고, 노드(1225)는 노드들(1220, 1215)에 모두 의존하고, 그리고 노드(1230)는 노드(1225)에 의존한다. 화살표의 방향은 의존도의 방향을 나타내며, 의존적인 노드가 화살표 머리에 닿아 있는 것으로 나타난다.
화살표가 방향을 갖고 있지 않은 경우(즉, 노드들 사이의 엣지들에 대해 방향이 없는 경우), 노드들(1215, 1220, 1225)은 사이클(폐쇄된 루프)을 이룰 것임을 주목할 것이다. 동일한 내용은 소스 노드와 노드들(1210, 1215, 1220)에 대해서도 적용된다고 할 수 있으나, 소스 노드는 보통 그래프 내부의 노드로 간주되지 않는다. 그러나, 노드들 사이의 엣지들이 방향을 갖고 있기 때문에(엣지들은 방향이 없는 선 대신 화살표로서 나타나 있음), 노드들(1215, 1220, 1225)는 사이클을 형성하지 않는다.
한편, 노드들(1215, 1225) 사이의 화살표가 반대인 경우(즉, 화살표가 노드(1215)를 향하고 있을 경우), 노드들(1215, 1220, 1225)은 사이클을 형성할 것이다. 노드(1215)는 노드(1225)에 의존할 것이고, 노드(1225)는 노드(1220)에 의존할 것이고, 노드(1220)는 노드(1215)에 의존할 것이다. 도 4b의 배치 요청(465)을 다이렉티드 그래프로 나타낸 것에 사이클이 존재한다는 것은, 사이클의 각 노드가 자기 자신에 의존할 것이므로, 실행될 수 없는 요청들의 부분집합이 존재한다는 것을 나타낼 수 있다. 여기서 설명된 의존도는 간접적일 수 있으나, 다이렉티드 그래프에서 나타날 수 있듯, 화살표가 노드로부터 나가서 노드로 돌아오는 경우, 노드가 자기 자신에 의존하는 것 또한 가능하다.
다이렉티드 그래프가 사이클을 포함하는 경우, 다이렉티드 그래프에 의해 나타나는 배치 요청은 만족되지 못할 수 있다. 도 11의 베리파이어(1120)는 다이렉티드 그래프(1205)의 화살표들을 따라, 노드에서 나와서 다시 자기 자신으로 돌아가는 경로가 있는지 검증할 수 있다. 이러한 경로가 존재하는 경우, 다이렉티드 그래프는 사이클릭(cyclic)하다고 한다. 이렇게 노드로부터 나와서 다시 자기 자신으로 돌아가는 경로가 없는 경우, 다이렉티드 그래프는 어사이클릭(acyclic)하다고 한다. 배치 요청을 나타내는 다이렉티드 그래프가 어사이클릭한 경우, 배치 요청을 실행하는 것이 가능할 수 있다. 이러한 실행이 실제로 가능한 지 여부는 도 1의 계산 저장 유닛(135)이 도 4b의 배치 요청(465)의 요청들을 실행하기 위해 필요한 도 11의 하드웨어(1130)를 포함하는지 여부에 기반할 수 있다.
도 13은 본 개시의 실시 예에 따라 도 8의 소프트웨어를 이용하여 도 4b의 배치 요청(465)을 생성하기 위한 과정의 예를 나타내는 흐름도이다. 도 13에서, 블록(1305)에서, 도 8의 배치 생성 소프트웨어(815)는 도 4b의 배치 요청(465)를 생성하기 위한 요청을 수신할 수 있다. 블록(1310)에서, 도 8의 요청 추가 소프트웨어(820)는 도 4b의 배치 요청(465)으로 추가할 요청을 수신할 수 있다. 블록(1315)에서, 도 8의 요청 추가 소프트웨어(820)는 도 4b의 배치 요청(465)에 추가할 두 번째 요청을 수신할 수 있다. 마지막으로, 블록(1320)에서, 도 8의 생성 소프트웨어(805)는 도 4b의 배치 요청(465)을 저장할 수 있다.
도 14a 내지 14b는 본 개시의 실시 예에 따라 도 8의 생성 소프트웨어(805)를 이용하여 도 4b의 배치 요청(465)을 생성하기 위한 과정의 예를 나타내는 흐름도이다. 도 14a 내지 14b는 도 13과 유사하지만, 더 일반적이고, 추가적인 블록들이 존재한다. 도 14a에서, 블록(1305)에서, 도 8의 배치 생성 소프트웨어(815)는 도 4b의 배치 요청(465)를 생성하기 위한 요청을 수신할 수 있다. 블록(1310)에서, 도 8의 요청 추가 소프트웨어(820)는 도 4b의 배치 요청(465)으로 추가할 요청을 수신할 수 있다. 블록(1405)에서, 도 8의 요청 추가 소프트웨어(820)는 도 4b의 배치 요청(465)으로 추가할 요청에 대한 도 6의 입력 버퍼(635~660)의 식별자를 수신할 수 있고, 블록(1410)에서 도 8의 요청 추가 소프트웨어(820)는 도 4b의 배치 요청(465)으로 추가할 요청에 대한 도 6의 출력 버퍼(635~660)의 식별자를 수신할 수 있다. 요청에 따라, 요청은 입력 버퍼(635~660)을 생략할 수 있거나, 출력 버퍼(635~660)을 생략할 수 있거나, 둘 다 생략할 수 있음을 주목할 것이다.
도 14b의 블록(1315)에서, 도 8의 요청 추가 소프트웨어(820)는 도 4b의 배치 요청(465)으로 추가할 두 번째 요청을 수신할 수 있다. 블록(1415)에서, 도 8의 요청 추가 소프트웨어(820)는 도 4b의 배치 요청(465)으로 추가할 두 번째 요청에 대한 도 6의 입력 버퍼(635~660)의 식별자를 수신할 수 있고, 블록(1420)에서, 도 8의 요청 추가 소프트웨어(820)는 도 4b의 배치 요청(465)으로 추가할 두 번째 요청에 대한 도 6의 출력 버퍼(635~660)의 식별자를 수신할 수 있다. 점선 1425에 의해 나타나듯이, 도 4b의 배치 요청(465)으로 추가할 요청이 더 있는 경우, 블록(1315)로 되돌아갈 수 있다.
블록(1430)에서, 도 8의 생성 소프트웨어(805)는 도 4b의 배치 요청(465)의 요청들 중 하나와 관련된 설정 정보를 수신할 수 있다. 더 많은 요청들이 설정되어야 할 경우, 점선 1435에 의해 나타나듯이, 블록(1430)은 반복될 수 있다. 블록(1435)은 또한 점선 1440에 의해 나타나듯이, 설정을 필요로 하는 요청이 없는 경우 생략될 수 있다. 마지막으로, 블록(1320)에서 도 8의 생성 소프트웨어(805)는 도 4b의 배치 요청(465)을 저장할 수 있다.
도 15는 본 개시의 실시 예에 따라 도 1의 계산 저장 유닛(135)이 도 4b의 배치 요청(465)을 처리하는 과정의 예를 나타내는 흐름도이다. 도 15에서, 블록(1505)에서, 도 11의 리시버(1105)는 도 4b의 배치 요청(465)을 수신할 수 있다. 블록(1510)에서, 도 11의 파서(1110)는 도 4b의 배치 요청(465)을 파싱하여 도 4b의 배치 요청(465)의 개별 요청들을 식별할 수 있다. 블록(1515)에서, 도 11의 하드웨어(1130)(또는 도 1의 계산 저장 유닛(135)의 일부 다른 하드웨어)는 첫 번째 요청을 실행할 수 있고, 도 11의 하드웨어(1130)(또는 도 1의 계산 저장 유닛(135)의 일부 다른 하드웨어)는 두 번째 요청을 실행할 수 있다. 마지막으로, 블록(1520)에서, 도 11의 트랜스미터(1135)는 도 4b의 애플리케이션(405)으로 도 4b의 배치 결과(470)를 전송하여, 도 4b의 배치 요청(465)의 결과를 보고할 수 있다.
도 16a 내지 16b는 본 개시의 실시 예에 따라 도 1의 계산 저장 유닛(135)이 도 4b의 배치 요청(465)을 처리하는 과정의 예를 나타내는 흐름도이다. 도 16a 내지 16b는 도 15와 유사하지만, 더 일반적이고, 추가적인 블록들이 존재한다. 도 16a엣허, 블록(1505)에서, 도 11의 리시버(1105)는 도 4b의 배치 요청(465)을 수신할 수 있다. 블록(1510)에서, 도 11의 파서(1110)는 도 4b의 배치 요청(465)을 파싱하여 도 4b의 배치 요청(465)의 개별 요청들을 식별할 수 있다. 블록(1605)에서, 도 11의 다이렉티드 그래프 생성기(1115)는 도 4b의 배치 요청(465)의 요청들의 의존도를 나타내는, 도 12의 다이렉티드 그래프(1205)를 생성할 수 있다.
블록(1610)에서, 도 11의 베리파이어(1120)는 도 12의 다이렉티드 그래프(1205)가 어사이클릭한지 여부를 검증할 수 있다. 어사이클릭하지 않은 경우, 도 4b의 배치 요청(465)은 만족될 수 없기 때문에, 블록(1615)에서 도 1의 계산 저장 유닛(135)은 에러를 보고할 수 있다. 어사이클릭한 경우, 도 16b의 블록(1620)에서, 스케줄러(1125)는 도 4b의 배치 요청(465)의 개별 요청들(전형적으로 적어도 두 개인)을 스케줄링할 수 있다. 블록(1625)에서, 도 11의 하드웨어(1130)(또는 도 1의 계산 저장 유닛(135)의 일부 다른 하드웨어)는 첫 번째 요청을 실행할 수 있고, 블록(1630)에서, 도 11의 하드웨어(1130)(또는 도 1의 계산 저장 유닛(135)의 일부 다른 하드웨어)는 두 번째 요청을 실행할 수 있다. 점선 1635에 의해 나타나듯이, 도 4b의 배치 요청(465)에 요청들이 더 있을 경우 블록(1630)은 반복될 수 있다. 마지막으로, 블록(1520)에서, 도 11의 트랜스미터(1135)는 도 4b의 애플리케이션(405)으로 도 4b의 배치 결과(470)를 전송하여, 도 4b의 배치 요청(465)의 결과를 보고할 수 있다.
도 17 내지 도 18은 본 개시의 실시 예에 따라 도 11의 스케줄러(1125)가 도 4b의 배치 요청(465)의 다양한 요청들을 실행을 위해 스케줄링하는 과정의 예를 나타내는 흐름도이다. 도 17에서, 블록(1705)에서, 도 11의 스케줄러(1125)는 개별 요청에 대한 모든 의존도들(하나라도 있다는 가정 하에)이 완료되었는지(즉, 현재 요청에 의해 사용되는 데이터를 생성하는 요청들이 모두 그 실행을 완료하였는지) 여부를 결정할 수 있다. 완료되지 않은 경우, 블록(1710)에서 도 11의 스케줄러(1125)는 모든 의존도들이 완료될 때까지 요청을 대기하게 할 수 있다. 완료된 경우, 블록(1715)에서, 도 11의 스케줄러(1125)는 실행을 위해 요청을 스케줄링할 수 있다.
도 18에서, 블록(1805)에서, 도 11의 스케줄러(1125)는 도 1의 계산 저장 유닛(135)이 도 4b의 배치 요청(465)의 특정 요청을 실행하기 위해 필요한 하드웨어 및/또는 소프트웨어를 포함하고 있는지 여부를 결정할 수 있다. 포함하고 있지 않은 경우, 블록(1810)에서, 도 11의 스케줄러(1125)는 (도 1의 프로세서(110) 또는 도 1의 시스템(105)의 다른 계산 저장 유닛(135)과 같은) 다른 하드웨어로 요청을 실행해 달라고 요청할 수 있다. 대안적으로, 도 11의 스케줄러(1125)는 요청을 실행하기 위한 적절한 하드웨어 및/또는 소프트웨어가 없다는 이유로 도 4b의 배치 요청(465)을 실패하게 할 수도 있다. 포함하는 경우, 블록(1815)에서, 도 11의 스케줄러(1125)는 도 1의 계산 저장 유닛(135) 상의 실행을 위해 요청을 스케줄링할 수 있다.
도 14a 내지 14b, 도 15, 도 16a 내지 16b, 도 17, 및 도 18에서, 본 개시의 일부 실시 예들이 도시되었다. 그러나, 통상의 기술자는 블록들의 순서를 변경하거나, 블록들을 생략하거나, 또는 도면에 나타나지 않은 링크들을 포함시킴으로써, 본 개시의 다른 실시 예들 또한 가능하다는 것을 인지할 것이다. 흐름도들의 이러한 모든 변형들은 직접적으로 설명되었든, 설명되지 않았든, 본 개시의 실시 예들로 간주될 것이다.
본 개시의 실시 예들은 선행 기술에 비해 기술적인 이점들을 제공한다. 배치 요청을 생성하고, 개별적인 요청들을 별도로 전송하는 대신 배치 요청을 계산 저장 유닛으로 제출함에 따라, 계산 저장 유닛과 배치 요청을 통신하는 부분으로서 전송되는 데이터의 양이 감소할 수 있고, 다른 목적들을 위한 더 많은 대역폭을 이용 가능 하도록 할 수 있다. 나아가, 배치 요청들은 재설정 및/또는 재사용될 수 있어, 단지 미세하게 다른 다수의 요청들의 세트를 통신하는 데 필요한 에너지를 줄일 수 있다. 특히 API를 통한 배치 요청들의 이용은 또한 배치 요청을 사용하는 애플리케이션으로부터 계산 저장 유닛을 추상화할 수 있고, 이로써 애플리케이션이 계산 저장 유닛이 배치 요청을 구현하는 데 필요한 하드웨어 및/또는 소프트웨어를 갖고 있는지 여부를 결정할 필요가 없도록 한다.
이하의 설명은 본 개시의 특정 측면이 구현될 수 있는 적합한 기계 또는 기계들에 대한 간략하고 일반적인 설명을 제공하기 위한 것이다. 기계 또는 기계들은 적어도 부분적으로 키보드, 마우스 등과 같은 종래의 입력 장치의 입력뿐만 아니라, 다른 기계로부터 수신된 지시, 가상 현실(VR) 환경과의 상호 작용, 생체 피드백, 또는 다른 입력 신호에 의해 제어될 수도 있다. 본 명세서에 사용된 바와 같이, 용어 "기계(머신; machine)"는 단일 기계, 가상 기계, 또는 통신적으로 결합된 기계, 가상 기계, 또는 함께 작동하는 장치의 시스템을 광범위하게 포함하는 것으로 의도된다. 기계의 예는 PC, 워크스테이션, 서버, 휴대용 컴퓨터, 핸드헬드 장치, 전화기, 태블릿 등과 같은 컴퓨팅 장치뿐만 아니라 자동차, 기차, 택시 등과 같은 개인 또는 대중 교통과 같은 운송 장치를 포함한다.
기계 또는 기계들은 프로그래밍 가능 또는 프로그래밍 불가 논리 장치 또는 어레이, ASIC, 내장형 컴퓨터, 스마트 카드 등과 같은 내장형 컨트롤러를 포함할 수 있다. 기계 또는 기계들은 네트워크 인터페이스, 모뎀, 또는 기타 통신 커플링을 통해 하나 이상의 원격 기계에 대한 하나 이상의 연결을 활용할 수 있다. 기계들은 인트라넷, 인터넷, 근거리 통신망, 광역 통신망 등과 같은 물리적 및/또는 논리적 네트워크를 통해 상호 연결될 수 있다. 통상의 기술자는 네트워크 통신이 다양한 유선 및/또는 RF(무선 주파수), 위성, 마이크로파, IEEE(Institute of Electrical and Electronics Engineers) 802.11, Bluetooth®광학, 적외선, 케이블, 레이저 등을 포함한 무선 단거리 또는 장거리 캐리어 및 프로토콜을 활용할 수 있음을 이해할 것이다.
본 개시의 실시 예들은, 기계에 의해 액세스될 때 기계가 작업을 수행하거나, 추상 데이터 유형 또는 낮은 레벨 하드웨어 컨텍스트를 정의하는 경우, 기능, 절차, 데이터 구조, 애플리케이션 프로그램 등을 포함하는 관련 데이터를 참조하거나 관련하여 설명될 수 있다. 관련 데이터는, 예를 들어, RAM, ROM 등과 같은 휘발성 및/또는 비휘발성 메모리에 저장되거나, 하드 드라이브, 플로피 디스크, 광학 스토리지, 테이프, 플래시 메모리, 메모리 스틱, 디지털 비디오 디스크, 생물학적 스토리지 등을 포함한 기타 저장 장치 및 관련 저장 매체에 저장될 수 있다. 관련 데이터는 패킷, 직렬 데이터, 병렬 데이터, 전파된 신호 등의 형태로 물리적 및/또는 논리적 네트워크를 포함한 전송 환경을 통해 전달될 수 있고, 압축되거나 암호화된 형식으로 사용될 수 있다. 관련된 데이터는 분산 환경에서 사용될 수 있으며, 기계 액세스를 위해 로컬 및/또는 원격으로 저장될 수 있다.
본 개시의 실시 예들은 하나 이상의 프로세서에 의해 실행 가능한 명령들을 포함하는 유형의 비일시적 기계 판독가능 매체를 포함할 수 있으며, 이 명령들은 본 명세서에 기재된 바와 같이 본 개시의 구성 요소들을 수행하기 위한 명령들을 포함한다.
상술한 방법들의 다양한 동작들은 다양한 하드웨어 및/또는 소프트웨어 구성요소(들), 회로들, 및/또는 모듈(들)과 같은 동작을 수행할 수 있는 임의의 적절한 수단에 의해 수행될 수 있다. 소프트웨어는 논리적 기능을 구현하기 위한 실행 가능한 명령들의 순서화된 목록을 포함할 수 있고, 단일 또는 다중 코어 프로세서 또는 프로세서를 포함하는 시스템과 같은 명령 실행 시스템, 장치, 또는 디바이스와 관련하여 사용되기 위해 임의의 “프로세서 판독 가능 매체”로서 구현될 수 있다.
본 명세서에 개시된 실시 예들과 관련하여 설명된 방법 또는 알고리즘 및 기능들의 블록들 또는 단계들은 하드웨어, 프로세서에 의해 실행되는 소프트웨어 모듈, 또는 이 둘의 조합으로 직접 구현될 수 있다. 소프트웨어로 구현되는 경우, 기능은 유형의 비일시적 컴퓨터 판독 가능 매체에 하나 이상의 명령들 또는 코드로 저장되거나 전송될 수 있다. 소프트웨어 모듈은 RAM, 플래시 메모리, ROM, EPROM, EEPROM, 레지스터, 하드 디스크, 이동식 디스크, CD ROM, 또는 통상의 기술자에게 알려진 임의의 다른 형태의 저장 매체에 있을 수 있다.
도시된 실시 예들을 참조하여 본 개시의 원리를 설명하고 나타냈지만, 도시된 실시 예들의 배열 및 세부 사항은 이러한 원리를 벗어나지 않는 범위에서 수정될 수 있고, 임의의 원하는 방식으로 결합될 수 있음을 인식할 것이다. 그리고, 상술한 논의가 특정 실시 예들에 초점을 맞추었지만, 다른 구성들도 고려된다. 특히, 본 명세서에서 "본 개시의 실시 예에 따라" 등의 표현이 사용되더라도, 이러한 문구는 일반적으로 실시 예의 가능성을 언급하기 위한 것이지, 본 개시를 특정 실시 예의 구성으로 제한하려는 의도는 아니다. 본 명세서에서 사용된 바와 같이, 이들 용어는 다른 실시 예들로 결합될 수 있는 동일하거나 서로 다른 실시 예들을 참조할 수 있다.
상술한 실시 예들은 본 개시를 제한하는 것으로 해석되어서는 안 된다. 몇몇 실시 예들이 설명되었지만, 통상의 기술자는 본 개시의 신규한 교시 및 이점을 실질적으로 벗어나지 않으면서, 이러한 실시 예들에 대한 많은 수정이 가능하다는 것을 쉽게 이해할 것이다. 따라서, 이러한 모든 수정은 청구범위에 정의된 바와 같이 본 개시의 범위 내에 포함되도록 의도된다.
본 개시의 실시 예들은 제한 없이, 아래의 진술들로 확장될 수 있다.
진술 1. 본 개시의 실시 예는 프로세서, 상기 프로세서에서 실행되고 배치 요청을 생성하는 소프트웨어, 저장 장치, 및 상기 저장 장치와 관련되고 상기 배치 요청을 처리하는 계산 저장 유닛을 포함하되, 상기 배치 요청은 적어도 제 1 요청 및 제 2 요청을 포함하는 시스템을 포함한다.
진술 2. 본 개시의 실시 예는 진술 1에 있어서, 상기 계산 저장 유닛은 상기 프로세서에서 실행되는 애플리케이션으로부터 상기 배치 요청을 수신하고, 상기 제 1 요청 및 상기 제 2 요청에 적어도 부분적으로 기반하여 상기 애플리케이션으로 상기 배치 요청의 배치 결과를 반환하는 시스템을 포함한다.
진술 3. 본 개시의 실시 예는 진술 1에 있어서, 상기 소프트웨어가 장치 드라이버를 포함하는 시스템을 포함한다.
진술 4. 본 개시의 실시 예는 진술 1에 있어서, 상기 소프트웨어가 API(Application Programming Interface)를 포함하는 시스템을 포함한다.
진술 5. 본 개시의 실시 예는 진술 1에 있어서, 상기 소프트웨어가 상기 제 1 요청을 상기 배치 요청으로 추가하는 요청 추가 소프트웨어를 포함하는 시스템을 포함한다.
진술 6. 본 개시의 실시 예는 진술 5에 있어서, 상기 요청 추가 소프트웨어가 상기 배치 요청의 상기 제 2 요청 이전에 상기 배치 요청으로 상기 제 1 요청을 추가하는 시스템을 포함한다.
진술 7. 본 개시의 실시 예는 진술 5에 있어서, 상기 요청 추가 소프트웨어가 상기 배치 요청의 상기 제 2 요청 이후에 상기 배치 요청으로 상기 제 1 요청을 추가하는 시스템을 포함한다.
진술 8. 본 개시의 실시 예는 진술 1에 있어서, 상기 배치 요청이 직렬 구조, 병렬 구조, 또는 혼합 구조 중 하나를 포함하는 시스템을 포함한다.
진술 9. 본 개시의 실시 예는 진술 1에 있어서, 상기 배치 요청을 상기 계산 저장 유닛으로 전송하는 제 2 소프트웨어를 더 포함하는 시스템을 포함한다.
진술 10. 본 개시의 실시 예는 진술 9에 있어서, 상기 제 2 소프트웨어가 API를 포함하는 시스템을 포함한다.
진술 11. 본 개시의 실시 예는 진술 9에 있어서, 상기 제 2 소프트웨어가 장치 드라이버를 포함하는 시스템을 포함한다.
진술 12. 본 개시의 실시 예는 진술 1에 있어서, 상기 제 1 요청 및 상기 제 2 요청이 관련되는 상기 제 1 요청 및 상기 제 2 요청에 적어도 부분적으로 기반하여 상기 배치 요청에 포함되는 시스템을 포함한다.
진술 13. 본 개시의 실시 예는 진술 1에 있어서, 상기 계산 저장 유닛이 상기 프로세서에서 실행되는 애플리케이션으로부터 상기 배치 요청을 수신하는 리시버, 상기 배치 요청을 적어도 상기 제 1 요청 및 상기 제 2 요청으로 파싱하는 파서, 적어도 상기 제 1 요청 및 상기 제 2 요청으로부터 다이렉티드(directed) 그래프를 생성하는 그래프 생성기, 상기 다이렉티드 그래프에 적어도 부분적으로 기반하여, 실행을 위해 상기 제 1 요청 및 상기 제 2 요청을 스케줄링하는 스케줄러, 및 적어도 상기 제 1 요청을 실행하는 하드웨어를 포함하는 시스템을 포함한다.
진술 14. 본 개시의 실시 예는 프로세서에서 실행되는 애플리케이션으로부터 배치 요청을 수신하는 리시버, 상기 배치 요청을 적어도 제 1 요청 및 제 2 요청으로 파싱하는 파서, 적어도 상기 제 1 요청 및 상기 제 2 요청으로부터 다이렉티드(directed) 그래프를 생성하는 그래프 생성기, 상기 다이렉티드 그래프에 적어도 부분적으로 기반하여, 실행을 위해 상기 제 1 요청 및 상기 제 2 요청을 스케줄링하는 스케줄러, 상기 스케줄러에 적어도 부분적으로 기반하여 적어도 상기 제 1 요청을 실행하는 하드웨어, 및 상기 제 1 요청 및 상기 제 2 요청에 적어도 부분적으로 기반하여 상기 프로세서에서 실행되는 상기 애플리케이션으로 상기 배치 요청의 배치 결과를 전송하는 트랜스미터를 포함하는 계산 저장 유닛을 포함한다.
진술 15. 본 개시의 실시 예는 진술 14에 있어서, 상기 제 2 요청을 실행하기 위한 제 2 하드웨어를 더 포함하는 계산 저장 유닛을 포함한다.
진술 16. 본 개시의 실시 예는 진술 15에 있어서, 상기 제 2 하드웨어가 상기 하드웨어인 계산 저장 유닛을 포함한다.
진술 17. 본 개시의 실시 예는 진술 14에 있어서, 상기 하드웨어가 CPU, 프로세서, GPU, 범용 GPU, TPU, DPU, BPF 프로세서, FPGA, 또는 ASIC를 포함하는 세트로부터 추출되는 계산 저장 유닛을 포함한다.
진술 18. 본 개시의 실시 예는 진술 14에 있어서, 상기 다이렉티드 그래프가 어사이클릭(acylic)인지를 검증하기 위한 베리파이어를 더 포함하는 계산 저장 유닛을 포함한다.
진술 19. 본 개시의 실시 예는 진술 14에 있어서, 상기 스케줄러가 상기 제 1 요청이 상기 제 2 요청에 독립적임을 나타내는 상기 다이렉티드 그래프에 적어도 부분적으로 기반하여 실행할 상기 제 1 요청을 스케줄링하는 계산 저장 유닛을 포함한다.
진술 20. 본 개시의 실시 예는 진술 19에 있어서, 상기 스케줄러가 상기 제 1 요청이 상기 제 2 요청에 독립적임을 나타내는 상기 다이렉티드 그래프에 적어도 부분적으로 기반하여 상기 제 1 요청과 병렬로 실행할 상기 제 2 요청을 스케줄링하고, 상기 하드웨어는 상기 제 1 요청과 상기 제 2 요청의 병렬 처리를 지원하는 계산 저장 유닛을 포함한다.
진술 21. 본 개시의 실시 예는 진술 14에 있어서, 상기 스케줄러가 상기 제 2 요청의 완료, 및 상기 제 1 요청이 상기 제 2 요청에 의존한다는 것을 나타내는 상기 다이렉티드 그래프에 적어도 부분적으로 기반하여 실행할 상기 제 1 요청을 스케줄링하는 계산 저장 유닛을 포함한다.
진술 22. 본 개시의 실시 예는 진술 14에 있어서, 상기 스케줄러가 상기 제 2 요청을 상기 계산 저장 유닛의 설정에 적어도 부분적으로 기반하여 실행할 상기 프로세서를 스케줄링하는 계산 저장 유닛을 포함한다.
진술 23. 본 개시의 실시 예는 배치 요청을 생성하기 위한 배치 생성 요청을 수신하는 단계, 상기 배치 요청으로 제 1 요청을 추가하기 위한 제 1 추가 요청을 수신하는 단계, 상기 배치 요청으로 제 2 요청을 추가하기 위한 제 2 추가 요청을 수신하는 단계, 및 상기 배치 요청을 저장하는 단계를 포함하는 방법을 포함한다.
진술 24. 본 개시의 실시 예는 진술 23에 있어서, 상기 배치 요청으로 상기 제 2 요청을 추가하기 위한 상기 제 2 추가 요청을 수신하는 단계가 상기 제 2 요청을 상기 제 1 요청과 직렬로 상기 배치 요청으로 추가하기 위한 상기 제 2 추가 요청을 수신하는 단계를 포함하는 방법을 포함한다.
진술 25. 본 개시의 실시 예는 진술 24에 있어서, 상기 제 2 요청을 상기 제 1 요청과 직렬로 상기 배치 요청으로 추가하기 위한 상기 제 2 추가 요청을 수신하는 단계가 상기 제 2 요청을 상기 제 1 요청과 직렬로 그리고 상기 제 1 요청 이후에 상기 배치 요청으로 추가하기 위한 상기 제 2 추가 요청을 수신하는 단계를 포함하는 방법을 포함한다.
진술 26. 본 개시의 실시 예는 진술 24에 있어서, 상기 제 2 요청을 상기 제 1 요청과 직렬로 상기 배치 요청으로 추가하기 위한 상기 제 2 추가 요청을 수신하는 단계가 상기 제 2 요청을 상기 제 1 요청과 직렬로 그리고 상기 제 1 요청 이전에 상기 배치 요청으로 추가하기 위한 상기 제 2 추가 요청을 수신하는 단계를 포함하는 방법을 포함한다.
진술 27. 본 개시의 실시 예는 진술 23에 있어서, 상기 배치 요청으로 상기 제 2 요청을 추가하기 위한 상기 제 2 추가 요청을 수신하는 단계가 상기 제 2 요청을 상기 제 1 요청과 병렬로 상기 배치 요청으로 추가하기 위한 상기 제 2 추가 요청을 수신하는 단계를 포함하는 방법을 포함한다.
진술 28. 본 개시의 실시 예는 진술 23에 있어서, 상기 배치 요청으로 상기 제 1 요청을 추가하기 위한 상기 제 1 추가 요청을 수신하는 단계가 상기 제 1 요청을 위한 입력 버퍼의 식별자를 수신하는 단계, 및 상기 제 1 요청을 위한 출력 버퍼의 식별자를 수신하는 단계를 포함하는 방법을 포함한다.
진술 29. 본 개시의 실시 예는 진술 23에 있어서, 상기 배치 요청을 설정하는 단계를 더 포함하는 방법을 포함한다.
진술 30. 본 개시의 실시 예는 진술 29에 있어서, 상기 배치 요청을 설정하는 단계가 상기 배치 요청의 파라미터를 값으로 설정하는 단계를 포함하는 방법을 포함한다.
진술 31. 본 개시의 실시 예는 진술 30에 있어서, 상기 배치 요청의 상기 파라미터를 상기 값으로 설정하는 단계가 상기 제 1 요청의 상기 파라미터를 상기 값으로 설정하는 단계를 포함하는 방법을 포함한다.
진술 32. 본 개시의 실시 예는 진술 23에 있어서, 상기 배치 요청은 저장 장치의 하드웨어 또는 상기 저장 장치와 관련된 계산 저장 유닛과 독립적인 방법을 포함한다.
진술 33. 본 개시의 실시 예는 진술 23에 있어서, 상기 배치 요청은 제 1 데이터 및 제 2 데이터를 위해 사용될 수 있는 방법을 포함한다.
진술 34. 본 개시의 실시 예는 진술 23에 있어서, 상기 제 1 요청 및 상기 제 2 요청이 관련되는 상기 제 1 요청 및 상기 제 2 요청에 적어도 부분적으로 기반하여 상기 배치 요청에 포함되는 방법을 포함한다.
진술 35. 본 개시의 실시 예는 저장 장치와 관련된 계산 저장 유닛의 호스트 프로세서에서 실행되는 애플리케이션으로부터, 적어도 제 1 요청 및 제 2 요청을 포함하는 배치 요청을 수신하는 단계, 상기 제 1 요청 및 상기 제 2 요청을 식별하기 위해 상기 배치 요청을 파싱하는 단계, 상기 제 1 요청 및 상기 제 2 요청을 실행하는 단계, 및 상기 호스트 프로세서에서 실행되는 상기 애플리케이션으로 상기 배치 요청의 배치 결과를 반환하는 단계를 포함하는 방법을 포함한다.
진술 36. 본 개시의 실시 예는 진술 35에 있어서, 상기 계산 장치 유닛의 상기 호스트 프로세서에서 실행되는 상기 애플리케이션으로부터 상기 배치 요청을 수신하는 단계가 상기 제 1 요청 및 상기 제 2 요청에 적어도 부분적으로 기반하는 상기 배치 요청에 대한 다이렉티드(directed) 그래프를 생성하는 단계를 포함하는 방법을 포함한다.
진술 37. 본 개시의 실시 예는 진술 36에 있어서, 상기 계산 저장 유닛의 상기 호스트 프로세서에서 실행되는 상기 애플리케이션으로부터 상기 배치 요청을 수신하는 단계가 상기 다이렉티드 그래프가 어사이클릭(acyclic)인지를 검증하는 단계를 더 포함하는 방법을 포함한다.
진술 38. 본 개시의 실시 예는 진술 37에 있어서, 상기 계산 저장 유닛의 상기 호스트 프로세서에서 실행되는 상기 애플리케이션으로부터 상기 배치 요청을 수신하는 단계가 상기 다이렉티드 그래프가 사이클릭(cyclic)인 것에 적어도 부분적으로 기반하여 에러를 보고하는 단계를 더 포함하는 방법을 포함한다.
진술 39. 본 개시의 실시 예는 진술 36에 있어서, 상기 제 1 요청 및 상기 제 2 요청을 실행하는 단계가 상기 계산 저장 유닛에 의해 상기 다이렉티드 그래프에 적어도 부분적으로 기반하여 상기 제 1 요청 및 상기 제 2 요청을 스케줄링하는 단계를 포함하는 방법을 포함한다.
진술 40. 본 개시의 실시 예는 진술 39에 있어서, 상기 계산 저장 유닛에 의해 상기 다이렉티드 그래프에 적어도 부분적으로 기반하여 상기 제 1 요청 및 상기 제 2 요청을 스케줄링하는 단계가, 상기 계산 저장 유닛에 의해, 상기 제 1 요청이 상기 제 2 요청에 독립적임을 나타내는 상기 다이렉티드 그래프에 적어도 부분적으로 기반하여 상기 제 1 요청을 실행하기 위한 상기 계산 저장 유닛을 스케줄링하는 단계를 포함하는 방법을 포함한다.
진술 41. 본 개시의 실시 예는 진술 40에 있어서, 상기 계산 저장 유닛에 의해 상기 다이렉티드 그래프에 적어도 부분적으로 기반하여 상기 제 1 요청 및 상기 제 2 요청을 스케줄링하는 단계가, 상기 계산 저장 유닛에 의해, 상기 제 2 요청이 상기 제 1 요청에 독립적임을 나타내는 상기 다이렉티드 그래프에 적어도 부분적으로 기반하여 상기 제 1 요청과 병렬로 상기 제 2 요청을 실행하기 위한 상기 계산 저장 유닛을 스케줄링하는 단계를 포함하고, 상기 계산 저장 유닛은 병렬 처리를 지원하는 방법을 포함한다.
진술 42. 본 개시의 실시 예는 진술 39에 있어서, 상기 계산 저장 유닛에 의해 상기 다이렉티드 그래프에 적어도 부분적으로 기반하여 상기 제 1 요청 및 상기 제 2 요청을 스케줄링하는 단계가, 상기 계산 저장 유닛에 의해, 상기 제 2 요청의 완료에 적어도 부분적으로 기반하여 실행하기 위한 상기 제 1 요청을 스케줄링하는 단계를 포함하고, 상기 다이렉티드 그래프는 상기 제 1 요청이 상기 제 2 요청에 의존함을 나타내는 방법을 포함한다.
진술 43. 본 개시의 실시 예는 진술 39에 있어서, 상기 계산 저장 유닛에 의해 상기 다이렉티드 그래프에 적어도 부분적으로 기반하여 상기 제 1 요청 및 상기 제 2 요청을 스케줄링하는 단계가, 상기 계산 저장 유닛에 의해, 상기 계산 저장 유닛이 상기 제 1 요청을 지원하지 않는다는 것에 적어도 부분적으로 기반하여 상기 제 1 요청을 실행하기 위한 상기 호스트 프로세서에 대해 스케줄링하는 단계를 포함하는 방법을 포함한다.
진술 44. 본 개시의 실시 예는 진술 35에 있어서, 상기 제 1 요청 및 상기 제 2 요청을 실행하는 단계가 상기 계산 저장 유닛 상에서 상기 제 1 요청 및 상기 제 2 요청을 실행하는 단계를 포함하는 방법을 포함한다.
진술 45. 본 개시의 실시 예는 진술 35에 있어서, 상기 호스트 프로세서에서 실행되는 상기 애플리케이션으로 상기 배치 요청의 상기 배치 결과를 반환하는 단계가 상기 제 1 요청 및 상기 제 2 요청에 적어도 부분적으로 기반하여 상기 호스트 프로세서에서 실행되는 상기 애플리케이션으로 상기 배치 요청의 상기 배치 결과를 반환하는 단계를 포함하는 방법을 포함한다.
진술 46. 본 개시의 실시 예는 명령들을 저장하는 비일시적 저장 매체를 포함하는 물품을 포함한다. 상기 비일시적 저장 매체는 기계에 의해 실행되었을 때 상기 명령들이 배치 요청을 생성하기 위한 배치 생성 요청을 수신하고, 상기 배치 요청으로 제 1 요청을 추가하기 위한 제 1 추가 요청을 수신하고, 상기 배치 요청으로 제 2 요청을 추가하기 위한 제 2 추가 요청을 수신하고, 그리고 상기 배치 요청을 저장하도록 한다.
진술 47. 본 개시의 실시 예는 진술 46에 있어서, 상기 배치 요청으로 상기 제 2 요청을 추가하기 위한 상기 제 2 추가 요청을 수신하는 것이 상기 제 2 요청을 상기 제 1 요청과 직렬로 상기 배치 요청으로 추가하기 위한 상기 제 2 추가 요청을 수신하는 것을 포함하는 물품을 포함한다.
진술 48. 본 개시의 실시 예는 진술 47에 있어서, 상기 제 2 요청을 상기 제 1 요청과 직렬로 상기 배치 요청으로 추가하기 위한 상기 제 2 추가 요청을 수신하는 것이 상기 제 2 요청을 상기 제 1 요청과 직렬로 그리고 상기 제 1 요청 이후에 상기 배치 요청으로 추가하기 위한 상기 제 2 추가 요청을 수신하는 것을 포함하는 물품을 포함한다.
진술 49. 본 개시의 실시 예는 진술 47에 있어서, 상기 제 2 요청을 상기 제 1 요청과 직렬로 상기 배치 요청으로 추가하기 위한 상기 제 2 추가 요청을 수신하는 것이 상기 제 2 요청을 상기 제 1 요청과 직렬로 그리고 상기 제 1 요청 이전에 상기 배치 요청으로 추가하기 위한 상기 제 2 추가 요청을 수신하는 것을 포함하는 물품을 포함한다.
진술 50. 본 개시의 실시 예는 진술 46에 있어서, 상기 배치 요청으로 상기 제 2 요청을 추가하기 위한 상기 제 2 추가 요청을 수신하는 것이 상기 제 2 요청을 상기 제 1 요청과 병렬로 상기 배치 요청으로 추가하기 위한 상기 제 2 추가 요청을 수신하는 것을 포함하는 방법을 포함한다.
진술 51. 본 개시의 실시 예는 진술 46에 있어서, 상기 배치 요청으로 상기 제 1 요청을 추가하기 위한 상기 제 1 추가 요청을 수신하는 것이 상기 제 1 요청을 위한 입력 버퍼의 식별자를 수신하는 것, 및 상기 제 1 요청을 위한 출력 버퍼의 식별자를 수신하는 것을 포함하는 물품을 포함한다.
진술 52. 본 개시의 실시 예는 진술 46에 있어서, 상기 비일시적 저장 매체는 기계에 의해 실행되었을 때 상기 명령들이 상기 배치 요청을 더 설정하도록 하는 물품을 포함한다.
진술 53. 본 개시의 실시 예는 진술 52에 있어서, 상기 배치 요청을 설정하는 것이 상기 배치 요청의 파라미터를 값으로 설정하는 것을 포함하는 물품을 포함한다.
진술 54. 본 개시의 실시 예는 진술 53에 있어서, 상기 배치 요청의 상기 파라미터를 상기 값으로 설정하는 것이 상기 제 1 요청의 상기 파라미터를 상기 값으로 설정하는 것을 포함하는 물품을 포함한다.
진술 55. 본 개시의 실시 예는 진술 46에 있어서, 상기 배치 요청은 저장 장치의 하드웨어 또는 상기 저장 장치와 관련된 계산 저장 유닛과 독립적인 방법을 포함한다.
진술 56. 본 개시의 실시 예는 진술 46에 있어서, 상기 배치 요청은 제 1 데이터 및 제 2 데이터를 위해 사용될 수 있는 물품을 포함한다.
진술 57. 본 개시의 실시 예는 진술 46에 있어서, 상기 제 1 요청 및 상기 제 2 요청이 관련되는 상기 제 1 요청 및 상기 제 2 요청에 적어도 부분적으로 기반하여 상기 배치 요청에 포함되는 물품을 포함한다.
진술 58. 본 개시의 실시 예는 명령들을 저장하는 비일시적 저장 매체를 포함하는 물품을 포함한다. 상기 비일시적 저장 매체는 기계에 의해 실행되었을 때 상기 명령들이 저장 장치와 관련된 계산 저장 유닛의 호스트 프로세서에서 실행되는 애플리케이션으로부터, 적어도 제 1 요청 및 제 2 요청을 포함하는 배치 요청을 수신하고, 상기 제 1 요청 및 상기 제 2 요청을 식별하기 위해 상기 배치 요청을 파싱하고, 상기 제 1 요청 및 상기 제 2 요청을 실행하고, 및 상기 호스트 프로세서에서 실행되는 상기 애플리케이션으로 상기 배치 요청의 배치 결과를 반환하도록 하는 물품을 포함한다.
진술 59. 본 개시의 실시 예는 진술 58에 있어서, 상기 계산 장치 유닛의 상기 호스트 프로세서에서 실행되는 상기 애플리케이션으로부터 상기 배치 요청을 수신하는 것이 상기 제 1 요청 및 상기 제 2 요청에 적어도 부분적으로 기반하는 상기 배치 요청에 대한 다이렉티드(directed) 그래프를 생성하는 단계를 포함하는 것을 포함한다.
진술 60. 본 개시의 실시 예는 진술 59에 있어서, 상기 계산 저장 유닛의 상기 호스트 프로세서에서 실행되는 상기 애플리케이션으로부터 상기 배치 요청을 수신하는 것이 상기 다이렉티드 그래프가 어사이클릭(acyclic)인지를 검증하는 것을 더 포함하는 물품을 포함한다.
진술 61. 본 개시의 실시 예는 진술 60에 있어서, 상기 계산 저장 유닛의 상기 호스트 프로세서에서 실행되는 상기 애플리케이션으로부터 상기 배치 요청을 수신하는 것이 상기 다이렉티드 그래프가 사이클릭(cyclic)인 것에 적어도 부분적으로 기반하여 에러를 보고하는 것을 더 포함하는 방법을 포함한다.
진술 62. 본 개시의 실시 예는 진술 59에 있어서, 상기 제 1 요청 및 상기 제 2 요청을 실행하는 것이 상기 계산 저장 유닛에 의해 상기 다이렉티드 그래프에 적어도 부분적으로 기반하여 상기 제 1 요청 및 상기 제 2 요청을 스케줄링하는 것을 포함하는 물품을 포함한다.
진술 63. 본 개시의 실시 예는 진술 62에 있어서, 상기 계산 저장 유닛에 의해 상기 다이렉티드 그래프에 적어도 부분적으로 기반하여 상기 제 1 요청 및 상기 제 2 요청을 스케줄링하는 것이, 상기 계산 저장 유닛에 의해, 상기 제 1 요청이 상기 제 2 요청에 독립적임을 나타내는 상기 다이렉티드 그래프에 적어도 부분적으로 기반하여 상기 제 1 요청을 실행하기 위한 상기 계산 저장 유닛을 스케줄링하는 것을 포함하는 물품을 포함한다.
진술 64. 본 개시의 실시 예는 진술 63에 있어서, 상기 계산 저장 유닛에 의해 상기 다이렉티드 그래프에 적어도 부분적으로 기반하여 상기 제 1 요청 및 상기 제 2 요청을 스케줄링하는 것이, 상기 계산 저장 유닛에 의해, 상기 제 2 요청이 상기 제 1 요청에 독립적임을 나타내는 상기 다이렉티드 그래프에 적어도 부분적으로 기반하여 상기 제 1 요청과 병렬로 상기 제 2 요청을 실행하기 위한 상기 계산 저장 유닛을 스케줄링하는 것을 포함하고, 상기 계산 저장 유닛은 병렬 처리를 지원하는 물품을 포함한다.
진술 65. 본 개시의 실시 예는 진술 62에 있어서, 상기 계산 저장 유닛에 의해 상기 다이렉티드 그래프에 적어도 부분적으로 기반하여 상기 제 1 요청 및 상기 제 2 요청을 스케줄링하는 것이, 상기 계산 저장 유닛에 의해, 상기 제 2 요청의 완료에 적어도 부분적으로 기반하여 실행하기 위한 상기 제 1 요청을 스케줄링하는 것을 포함하고, 상기 다이렉티드 그래프는 상기 제 1 요청이 상기 제 2 요청에 의존함을 나타내는 물품을 포함한다.
진술 66. 본 개시의 실시 예는 진술 62에 있어서, 상기 계산 저장 유닛에 의해 상기 다이렉티드 그래프에 적어도 부분적으로 기반하여 상기 제 1 요청 및 상기 제 2 요청을 스케줄링하는 것이, 상기 계산 저장 유닛에 의해, 상기 계산 저장 유닛이 상기 제 1 요청을 지원하지 않는다는 것에 적어도 부분적으로 기반하여 상기 제 1 요청을 실행하기 위한 상기 호스트 프로세서에 대해 스케줄링하는 것을 포함하는 물품을 포함한다.
진술 67. 본 개시의 실시 예는 진술 58에 있어서, 상기 제 1 요청 및 상기 제 2 요청을 실행하는 것이 상기 계산 저장 유닛 상에서 상기 제 1 요청 및 상기 제 2 요청을 실행하는 것을 포함하는 방법을 포함한다.
진술 68. 본 개시의 실시 예는 진술 58에 있어서, 상기 호스트 프로세서에서 실행되는 상기 애플리케이션으로 상기 배치 요청의 상기 배치 결과를 반환하는 것이 상기 제 1 요청 및 상기 제 2 요청에 적어도 부분적으로 기반하여 상기 호스트 프로세서에서 실행되는 상기 애플리케이션으로 상기 배치 요청의 상기 배치 결과를 반환하는 것을 포함하는 물품을 포함한다.
결과적으로, 여기에 설명된 실시 예들에 대한 다양한 조합들의 관점에서, 이 상세한 설명 및 수반되는 자료는 단지 도시하기 위한 목적인 것으로 의도되고, 본 개시의 범위를 제한하는 것으로 간주되어서는 안 된다. 따라서, 본 개시로 청구되는 것은, 다음 청구 범위 및 그에 상응하는 범위 및 정신 내에서 올 수 있는 모든 변형들이다.

Claims (20)

  1. 프로세서;
    상기 프로세서에서 실행되고 배치 요청을 생성하는 소프트웨어;
    저장 장치; 및
    상기 저장 장치와 관련되고 상기 배치 요청을 처리하는 계산 저장 유닛을 포함하되,
    상기 배치 요청은 적어도 제 1 요청 및 제 2 요청을 포함하는 시스템.
  2. 제 1 항에 있어서,
    상기 계산 저장 유닛은 상기 프로세서에서 실행되는 애플리케이션으로부터 상기 배치 요청을 수신하고, 상기 제 1 요청 및 상기 제 2 요청에 적어도 부분적으로 기반하여 상기 애플리케이션으로 상기 배치 요청의 배치 결과를 반환하는 시스템.
  3. 제 1 항에 있어서,
    상기 소프트웨어는 상기 제 1 요청을 상기 배치 요청으로 추가하는 요청 추가 소프트웨어를 포함하는 시스템.
  4. 제 1 항에 있어서,
    상기 배치 요청은 직렬 구조, 병렬 구조, 또는 혼합 구조 중 하나를 포함하는 시스템.
  5. 제 1 항에 있어서,
    상기 소프트웨어는 제 1 소프트웨어이고,
    상기 배치 요청을 상기 계산 저장 유닛으로 전송하는 제 2 소프트웨어를 더 포함하는 시스템.
  6. 제 1 항에 있어서,
    상기 제 1 요청 및 상기 제 2 요청은 관련되는 상기 제 1 요청 및 상기 제 2 요청에 적어도 부분적으로 기반하여 상기 배치 요청에 포함되는 시스템.
  7. 제 1 항에 있어서,
    상기 계산 저장 유닛은:
    상기 프로세서에서 실행되는 애플리케이션으로부터 상기 배치 요청을 수신하는 리시버;
    상기 배치 요청을 적어도 상기 제 1 요청 및 상기 제 2 요청으로 파싱하는 파서;
    적어도 상기 제 1 요청 및 상기 제 2 요청으로부터 다이렉티드(directed) 그래프를 생성하는 그래프 생성기;
    상기 다이렉티드 그래프에 적어도 부분적으로 기반하여, 실행을 위해 상기 제 1 요청 및 상기 제 2 요청을 스케줄링하는 스케줄러; 및
    적어도 상기 제 1 요청을 실행하는 하드웨어를 포함하는 시스템.
  8. 프로세서에서 실행되는 애플리케이션으로부터 배치 요청을 수신하는 리시버;
    상기 배치 요청을 적어도 제 1 요청 및 제 2 요청으로 파싱하는 파서;
    적어도 상기 제 1 요청 및 상기 제 2 요청으로부터 다이렉티드(directed) 그래프를 생성하는 그래프 생성기;
    상기 다이렉티드 그래프에 적어도 부분적으로 기반하여, 실행을 위해 상기 제 1 요청 및 상기 제 2 요청을 스케줄링하는 스케줄러;
    상기 스케줄러에 적어도 부분적으로 기반하여 적어도 상기 제 1 요청을 실행하는 하드웨어; 및
    상기 제 1 요청 및 상기 제 2 요청에 적어도 부분적으로 기반하여 상기 프로세서에서 실행되는 상기 애플리케이션으로 상기 배치 요청의 배치 결과를 전송하는 트랜스미터를 포함하는 계산 저장 유닛.
  9. 제 8 항에 있어서,
    상기 하드웨어는 제 1 하드웨어이고,
    상기 제 2 요청을 실행하기 위한 제 2 하드웨어를 더 포함하는 계산 저장 유닛.
  10. 제 8 항에 있어서,
    상기 다이렉티드 그래프가 어사이클릭(acylic)인지를 검증하기 위한 베리파이어를 더 포함하는 계산 저장 유닛.
  11. 제 8 항에 있어서,
    상기 스케줄러는 상기 제 1 요청이 상기 제 2 요청에 독립적임을 나타내는 상기 다이렉티드 그래프에 적어도 부분적으로 기반하여 실행할 상기 제 1 요청을 스케줄링하는 계산 저장 유닛.
  12. 제 8 항에 있어서,
    상기 스케줄러는 상기 제 2 요청의 완료, 및 상기 제 1 요청이 상기 제 2 요청에 의존한다는 것을 나타내는 상기 다이렉티드 그래프에 적어도 부분적으로 기반하여 실행할 상기 제 1 요청을 스케줄링하는 계산 저장 유닛.
  13. 배치 요청을 생성하기 위한 배치 생성 요청을 수신하는 단계;
    상기 배치 요청으로 제 1 요청을 추가하기 위한 제 1 추가 요청을 수신하는 단계;
    상기 배치 요청으로 제 2 요청을 추가하기 위한 제 2 추가 요청을 수신하는 단계; 및
    상기 배치 요청을 저장하는 단계를 포함하는 방법.
  14. 제 13 항에 있어서,
    상기 배치 요청으로 상기 제 2 요청을 추가하기 위한 상기 제 2 추가 요청을 수신하는 단계는 상기 제 2 요청을 상기 제 1 요청과 직렬로 상기 배치 요청으로 추가하기 위한 상기 제 2 추가 요청을 수신하는 단계를 포함하는 방법.
  15. 제 13 항에 있어서,
    상기 배치 요청으로 상기 제 2 요청을 추가하기 위한 상기 제 2 추가 요청을 수신하는 단계는 상기 제 2 요청을 상기 제 1 요청과 병렬로 상기 배치 요청으로 추가하기 위한 상기 제 2 추가 요청을 수신하는 단계를 포함하는 방법.
  16. 제 13 항에 있어서,
    상기 배치 요청으로 상기 제 1 요청을 추가하기 위한 상기 제 1 추가 요청을 수신하는 단계는:
    상기 제 1 요청을 위한 입력 버퍼의 식별자를 수신하는 단계; 및
    상기 제 1 요청을 위한 출력 버퍼의 식별자를 수신하는 단계를 포함하는 방법.
  17. 제 13 항에 있어서,
    상기 배치 요청을 설정하는 단계를 더 포함하는 방법.
  18. 제 17 항에 있어서,
    상기 배치 요청을 설정하는 단계는 상기 배치 요청의 파라미터를 값으로 설정하는 단계를 포함하는 방법.
  19. 제 13 항에 있어서,
    상기 배치 요청은 저장 장치의 하드웨어 또는 상기 저장 장치와 관련된 계산 저장 유닛과 독립적인 방법.
  20. 제 13 항에 있어서,
    상기 배치 요청은 제 1 데이터 및 제 2 데이터를 위해 사용될 수 있는 방법.
KR1020210116695A 2020-09-02 2021-09-02 계산 장치들에서 요청들을 배칭하기 위한 시스템 및 방법 KR20220030196A (ko)

Applications Claiming Priority (10)

Application Number Priority Date Filing Date Title
US202063073922P 2020-09-02 2020-09-02
US63/073,922 2020-09-02
US202163141970P 2021-01-26 2021-01-26
US63/141,970 2021-01-26
US202163142485P 2021-01-27 2021-01-27
US63/142,485 2021-01-27
US202163144469P 2021-02-01 2021-02-01
US63/144,469 2021-02-01
US17/359,495 2021-06-25
US17/359,495 US20220066821A1 (en) 2020-09-02 2021-06-25 Systems and method for batching requests in computational devices

Publications (1)

Publication Number Publication Date
KR20220030196A true KR20220030196A (ko) 2022-03-10

Family

ID=77316842

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020210116695A KR20220030196A (ko) 2020-09-02 2021-09-02 계산 장치들에서 요청들을 배칭하기 위한 시스템 및 방법

Country Status (5)

Country Link
US (1) US20220066821A1 (ko)
EP (1) EP3964957A1 (ko)
KR (1) KR20220030196A (ko)
CN (1) CN114201111A (ko)
TW (1) TW202211039A (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20230112448A1 (en) * 2021-10-12 2023-04-13 Seagate Technology Llc Computational storage drive using fpga implemented interface
US11880568B2 (en) 2021-11-17 2024-01-23 Seagate Technology Llc On demand configuration of FPGA interfaces

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8943504B2 (en) * 2012-04-20 2015-01-27 Qualcomm Incorporated Tracking and releasing resources placed on a deferred unlock list at the end of a transaction
US10795726B2 (en) * 2014-11-17 2020-10-06 Hitachi, Ltd. Processing requests received online and dividing processing requests for batch processing
US11474974B2 (en) * 2018-12-21 2022-10-18 Home Box Office, Inc. Coordinator for preloading time-based content selection graphs

Also Published As

Publication number Publication date
TW202211039A (zh) 2022-03-16
CN114201111A (zh) 2022-03-18
US20220066821A1 (en) 2022-03-03
EP3964957A1 (en) 2022-03-09

Similar Documents

Publication Publication Date Title
CN109844730B (zh) 用于评估数据库查询的方法、计算机***、介质和装置
KR20220030196A (ko) 계산 장치들에서 요청들을 배칭하기 위한 시스템 및 방법
US11494386B2 (en) Distributed metadata-based cluster computing
CN111831330B (zh) 用于联邦学习的异构计算***设备交互方案
US11514022B2 (en) Streams on shared database objects
CN105208135B (zh) 一种文件传输方法和设备
KR20190027812A (ko) 컴퓨팅 시스템을 위한 애플리케이션 구동형 스토리지 시스템
Simonet et al. Active Data: A programming model to manage data life cycle across heterogeneous systems and infrastructures
US11620310B1 (en) Cross-organization and cross-cloud automated data pipelines
US11467987B1 (en) Computational pipelines for computational storage devices
US20240004853A1 (en) Virtual data source manager of data virtualization-based architecture
AU2021218131A1 (en) A mechanism to discover computational storage functions and devices
US20220365709A1 (en) Computational storage for logical volumes that span physical devices
KR20210156218A (ko) 데이터 처리 코디네이터를 포함하는 저장 장치, 물품 및 방법
CN107204998B (zh) 处理数据的方法和装置
US11461325B2 (en) Checkpoints in batch file processing
US11263026B2 (en) Software plugins of data virtualization-based architecture
Klasky et al. A view from ORNL: Scientific data research opportunities in the big data age
US11960616B2 (en) Virtual data sources of data virtualization-based architecture
Al-Kiswany et al. A cross-layer optimized storage system for workflow applications
KR20230117692A (ko) 하이브리드 데이터베이스 가속 장치, 시스템 및 방법
TW202314490A (zh) 用於管理通訊的系統及方法、以及包括非暫時性儲存媒體的物品
KR20230110213A (ko) 연산 장치들 내부의 툴들과 통신하는 상호작용 메커니즘
US12019632B2 (en) Checkpoints in batch file processing
US20130117336A1 (en) Data channel utilization management in multi-user system