KR20220094180A - 병합 조인 동작들의 가속을 위한 시스템, 방법, 및 장치 - Google Patents

병합 조인 동작들의 가속을 위한 시스템, 방법, 및 장치 Download PDF

Info

Publication number
KR20220094180A
KR20220094180A KR1020210190218A KR20210190218A KR20220094180A KR 20220094180 A KR20220094180 A KR 20220094180A KR 1020210190218 A KR1020210190218 A KR 1020210190218A KR 20210190218 A KR20210190218 A KR 20210190218A KR 20220094180 A KR20220094180 A KR 20220094180A
Authority
KR
South Korea
Prior art keywords
keys
data
stream
memory
results
Prior art date
Application number
KR1020210190218A
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 KR20220094180A publication Critical patent/KR20220094180A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/22Arrangements for sorting or merging computer data on continuous record carriers, e.g. tape, drum, disc
    • G06F7/32Merging, i.e. combining data contained in ordered sequence on at least two record carriers to produce a single carrier or set of carriers having all the original data in the ordered sequence merging methods in general
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation
    • G06F16/24532Query optimisation of parallel queries
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/06Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
    • H04L9/065Encryption by serially and continuously modifying data stream elements, e.g. stream cipher systems, RC4, SEAL or A5/3
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation
    • G06F16/24534Query rewriting; Transformation
    • G06F16/24537Query rewriting; Transformation of operators
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24553Query execution of query operations
    • G06F16/24558Binary matching operations
    • G06F16/2456Join operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24568Data stream processing; Continuous queries
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • 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/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30018Bit or string instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30021Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/12Details relating to cryptographic hardware or logic circuitry
    • H04L2209/125Parallelization or pipelining, e.g. for accelerating processing of cryptographic operations

Abstract

데이터 프로세싱 방법은 제 1 데이터와 관련된 제 1 키들의 스트림을 수신하는 단계, 제 2 데이터와 관련된 제 2 키들의 스트림을 수신하는 단계, 상기 제 1 키들의 배치 및 상기 제 2 키들의 배치를 병렬로 비교하는 단계, 상기 비교하는 단계로부터 하나 이상의 결과들을 수집하는 단계, 및 상기 수집하는 단계로부터 하나 이상의 결과들을 모으는 단계를 포함할 수 있다. 상기 수집하는 단계는 인덱스 매트릭스 및 마스크 매트릭스를 감소시키는 단계를 포함할 수 있다. 상기 하나 이상의 결과들을 모으는 단계는 상기 수집하는 단계로부터의 상기 하나 이상의 결과들의 적어도 일부를 잔여 벡터에 저장하는 단계를 포함할 수 있다. 상기 하나 이상의 결과들을 모으는 단계는 제 1 사이클에서 상기 잔여 벡터의 적어도 일부와, 제 2 사이클에서 상기 수집하는 단계로부터의 상기 하나 이상의 결과들의 적어도 일부를 결합하는 단계를 더 포함할 수 있다.

Description

병합 조인 동작들의 가속을 위한 시스템, 방법, 및 장치{SYSTEMS, METHODS, AND DEVICES FOR ACCELERATION OF MERGE JOIN OPERATIONS}
본 개시는 일반적으로 데이터 프로세싱에 관한 것으로, 좀 더 상세하게는 병합 조인(merge join) 동작들의 가속에 관한 것이다.
데이터 프로세싱 시스템은 병합 조인(merge join)과 같은 데이터 프로세싱 동작들의 성능을 향상시키기 위한 가속 방식들을 구현할 수 있다.
본 항목에 개시된 상기 정보는 오직 발명의 배경 지식의 이해를 향상시키기 위한 것으로, 선행 기술을 구성하지 않는 정보를 포함할 수 있다.
본 개시는 병합 조인(merge join) 동작들의 가속을 위한 시스템, 방법, 및 장치를 제공한다.
데이터 처리 방법은 제 1 데이터와 관련된 제 1 키들의 스트림을 수신하는 단계, 제 2 데이터와 관련된 제 2 키들의 스트림을 수신하는 단계, 상기 제 1 키들의 배치 및 상기 제 2 키들의 배치를 병렬로 비교하는 단계, 상기 비교하는 단계로부터 하나 이상의 결과들을 수집하는 단계, 및 상기 수집하는 단계로부터 하나 이상의 결과들을 모으는 단계를 포함할 수 있다. 상기 비교하는 단계는 상기 제 1 키들의 상기 배치 및 상기 제 2 키들의 상기 배치에 기반하여 적어도 하나의 매트릭스를 생성하는 단계를 포함할 수 있다. 상기 수집하는 단계는 상기 적어도 하나의 매트릭스를 감소시키는 단계를 포함할 수 있다. 상기 적어도 하나의 매트릭스는 인덱스 매트릭스 및 마스크 매트릭스를 포함할 수 있고, 상기 적어도 하나의 매트릭스를 감소시키는 단계는 상기 인덱스 매트릭스를 인덱스 벡터로 감소시키는 단계, 및 상기 마스크 매트릭스를 마스크 벡터로 감소시키는 단계를 포함할 수 있다. 상기 방법은 상기 마스크 벡터에 기반하여 오프셋 벡터를 생성하는 단계를 더 포함할 수 있다. 상기 하나 이상의 결과들을 수집하는 단계는 오프셋 및 상기 제 1 키들 중 대응하는 하나에 기반하여 결과 벡터를 생성하는 단계를 포함할 수 있다. 상기 하나 이상의 결과들을 모으는 단계는 상기 수집하는 단계로부터의 상기 하나 이상의 결과들의 적어도 일부를 잔여 벡터에 저장하는 단계를 포함할 수 있다. 상기 하나 이상의 결과들을 모으는 단계는 제 1 사이클에서 상기 잔여 벡터의 적어도 일부와, 제 2 사이클에서 상기 수집하는 단계로부터의 상기 하나 이상의 결과들의 적어도 일부를 결합하는 단계를 더 포함할 수 있다. 상기 제 1 데이터는 상기 제 1 키들 중 대응하는 키들과 관련된 행들을 나타내는 인덱스들을 포함할 수 있다. 상기 비교하는 단계, 상기 수집하는 단계, 및 상기 모으는 단계는 병합 조인(merge join) 동작을 수행할 수 있다.
장치는 병합 코어를 포함할 수 있고, 제 1 데이터와 관련된 제 1 키들의 스트림을 수신하고, 제 2 데이터와 관련된 제 2 키들의 스트림을 수신하고, 그리고 상기 제 1 키들의 배치 및 상기 제 2 키들의 배치를 병렬로 비교하는 병렬 비교 회로, 상기 병렬 비교 회로로부터의 하나 이상의 결과들을 수집하는 수집 회로, 및 상기 수집 회로로부터의 하나 이상의 결과들을 모으는 개더링(gathering) 회로를 포함할 수 있다. 상기 장치는 메모리로부터 상기 제 1 키들의 스트림을 읽는 제 1 읽기 장치, 및 상기 메모리로부터 상기 제 2 키들의 스트림을 읽는 제 2 읽기 장치를 더 포함할 수 있다. 상기 제 1 읽기 장치는 상기 메모리로부터 상기 제 1 데이터의 스트림을 더 읽을 수 있고, 상기 제 2 읽기 장치는 상기 메모리로부터 상기 제 2 데이터의 스트림을 더 읽을 수 있다. 상기 장치는 상기 개더링 회로로부터 상기 메모리로 출력 키들의 스트림을 기록하는 쓰기 장치를 더 포함할 수 있다. 상기 제 1 읽기 장치는 상기 메모리로부터 상기 제 1 데이터의 스트림을 더 읽을 수 있고 상기 제 2 읽기 장치는 상기 메모리로부터 상기 제 2 데이터의 스트림을 더 읽을 수 있고, 그리고 상기 쓰기 장치는 상기 개더링 회로로부터 상기 메모리로 출력 키들의 상기 스트림과 관련된 출력 데이터의 스트림을 더 기록할 수 있다. 상기 병렬 비교 회로, 상기 수집 회로, 및 상기 개더링 회로는 가속기 장치 상에 통합될 수 있다. 상기 가속기 장치는 FPGA(field programmable gate array)를 포함할 수 있다.
시스템은 스토리지 장치, 상기 스토리지 장치로부터 데이터셋을 수신하는 메모리, 및 상기 스토리지 장치에 연결되는 가속기 장치를 포함하되, 상기 가속기 장치는 상기 메모리로부터 상기 데이터셋의 제 1 데이터와 관련된 제 1 키들의 스트림을 수신하고, 상기 메모리로부터 상기 데이터셋의 제 2 데이터와 관련된 제 2 키들의 스트림을 수신하고, 그리고 상기 제 1 키들의 배치 및 상기 제 2 키들의 배치를 병렬로 비교하는 병렬 비교 회로, 상기 병렬 비교 회로로부터 하나 이상의 결과들을 수집하는 수집 회로, 및 상기 수집 회로로부터 하나 이상의 결과들을 모으는 개더링(gathering) 회로를 포함할 수 있다. 상기 시스템은 상기 스토리지 장치 및 상기 가속기 장치 사이에 포인트-투-포인트 연결을 더 포함할 수 있다. 상기 메모리 및 상기 가속기 장치는 상기 스토리지 장치 상에 통합될 수 있다.
본 개시의 실시 예에 따르면 병합 조인(merge join)과 같은 데이터 프로세싱 동작들의 성능을 향상시키기 위한 시스템, 방법, 및 장치를 구현할 수 있다.
도면들은 반드시 일정한 비율로 도시된 것은 아니며, 유사한 구조들 또는 기능들의 구성 요소들은 일반적으로 도면 전체에 걸쳐 설명을 위한 목적으로 유사한 참조 번호들 또는 그 일부들로 표시될 수 있다. 도면은 여기에 설명된 다양한 실시 예들의 설명을 용이하게 하기 위한 것일 뿐이다. 도면은 여기에 개시된 교시의 모든 측면들을 설명하지 않으며, 청구 범위들을 제한하지 않는다. 도면이 불명확해지는 것을 방지하기 위해 모든 구성 요소나 연결 등이 표시되지 않을 수 있고, 모든 구성 요소들에 참조 번호들이 표시되지 않을 수 있다. 그러나 요소의 구성 패턴들은 도면에서 쉽게 알 수 있다. 첨부된 도면은 본 명세서와 함께 본 개시의 실시 예들을 도시한 것으로, 상세한 설명과 함께 본 개시의 원리를 설명하기 위한 것이다.
도 1은 본 개시의 실시 예에 따라 구현될 수 있는 조인 동작의 예를 나타낸다.
도 2는 본 개시의 실시 예에 따른 병합 코어 구조의 예를 나타낸다.
도 3은 본 개시의 실시 예에 따른 병합 조인 동작의 예에서 발생할 수 있는 일부 가능한 데이터 의존성 케이스들을 나타낸다.
도 4는 본 개시의 실시 예에 따른 완전히 파이프라이닝된 병렬 비교 및 결과 수집 동작의 예를 나타낸다.
도 5 내지 도 6은 본 개시의 실시 예에 따른 출력 개더링 동작들의 제 1 및 제 2 예들을 나타낸다.
도 7은 본 개시의 실시 예에 따른 병렬 비교, 결과 수집, 및 출력 개더링 동작들의 예를 나타내는 흐름도이다.
도 8은 본 개시의 실시 예에 따른 니어-스토리지 프로세싱 장치의 예를 나타낸다.
도 9는 본 개시의 실시 예에 따른 니어-스토리지 프로세싱 장치의 예를 나타낸다.
도 10은 본 개시의 실시 예에 따른 읽기 장치의 예를 나타낸다.
도 11은 본 개시의 실시 예에 따른 컬럼 읽기 장치의 예를 나타낸다.
도 12는 본 개시의 실시 예에 따른 쓰기 장치의 예를 나타낸다.
도 13은 본 개시의 실시 예에 따른 컬럼 쓰기 장치의 예를 나타낸다.
도 14는 본 개시의 실시 예에 따른 데이터 프로세싱 방법의 예를 나타낸다.
개관
본 개시의 일부 원리들은 병합 조인(merge join) 및/또는 다른 동작들을 가속시킬 수 있는 병렬 처리 기술들에 관련된 것이다. 예를 들어, 일부 실시 예들은 결과 수집 및/또는 출력 개더링 동작들과 함께 병렬 비교 방식을 구현할 수 있다. 구현의 세부 사항들에 따라, 이는 확장성을 개선하고, 계산 효율성(예를 들어, 처리량)을 증가시키고, 에너지 효율을 증가시키고, 데이터 의존성 문제들을 감소시킬 수 있다.
일부 실시 예들은 키 레벨의 병렬 처리를 하드웨어 가속에 특히 적합할 수 있는 동시 데이터 구조들로 변형할 수 있다. 예를 들어, 일부 실시 예들에서, 확장성은 서로 다른 메모리 대역폭 및/또는 프로세싱 리소스들에 적합하도록 구성될 수 있는 배치들로 입력 데이터를 조직화함으로써 향상될 수 있다. 그러므로, 일부 실시 예들은 서로 다른 레벨들의 병렬 처리로 구성될 수 있다.
일부 실시 예들에서, 병렬 비교, 결과 수집, 및 출력 개더링 구조는 배치들의 쌍 사이의 비교들이 단일 클록 사이클 내에 완료될 수 있는 파이프라이닝된 구성 상에 배치될 수 있다. 그러므로, 구현의 세부 사항들에 따라, 배치들의 새로운 쌍은 각 사이클 동안 처리될 수 있고, 처리량이 증가할 수 있다.
일부 실시 예들에서, 병렬 비교, 결과 수집, 및 출력 개더링에 의해 생성된 결과들은 추가적인 프로세싱 단계 없이 후속 동작에 의해 직접적으로 사용될 수 있다. 구현의 세부 사항들에 따라, 이는 확장성을 더 향상시킬 수 있다. 나아가, 일부 실시 예들에서, 개더링 동작은 결과들을 예를 들어, 일부 실시 예들에서 데이터 의존성 문제들을 감소 또는 제거할 수 있는 버퍼링 동작을 이용하여, 결과들을 조밀하게 패킹할 수 있다.
일부 실시 예들은 병렬 비교, 결과 수집, 및 출력 개더링 구조를 구현할 수 있는 스토리지 장치 및 가속기 장치 사이에 포인트-투-포인트(point-to-point; P2P) 통신들을 사용할 수 있다. 예를 들어, 일부 실시 예들에서, 가속기 장치 및 스토리지 장치는 P2P 상호 연결이 존재하는 보드, 모듈 등과 스토리지 장치 사이에 위치할 수 있다. 일부 실시 예들에서, 병렬 비교, 결과 수집, 및 출력 개더링 구조는 계산 스토리지 장치의 가속기 장치 상에 구현될 수 있다. 구현의 세부 사항들에 따라, 이러한 구성들은 호스트 CPU의 관여 및/또는 스토리지, 호스트 메모리, 및/또는 가속기 장치와 관련된 장치 메모리 사이의 데이터 이동을 감소 또는 제거할 수 있다.
본 명세서에 개시된 원리들은 독립적인 활용성을 갖고, 개별적으로 구현될 수 있으며, 반드시 모든 실시 예들이 모든 원리들을 활용하지 않는다. 그러나, 원리들은 또한 다양한 조합들 상에 구현될 수 있고, 그 중 일부는 개별적인 원리들의 장점들을 시너지 방식으로 증폭시킬 수 있다.
병합 조인(Merge Join) 동작
도 1은 본 개시의 실시 예에 따라 구현될 수 있는 조인 동작의 예를 나타낸다. 도 1에 나타난 실시 예에서, 좌측 테이블로 지칭될 수 있는 제 1 테이블은, 우측 테이블로 지칭될 수 있는 제 2 테이블과 함께 조인 동작에서 결합되어, 조인된 테이블로 지칭될 수 있는 제 3 테이블을 생성할 수 있다. 일부 실시 예들에서, 좌측 및 우측 테이블들은 행들 및 열들로 배치된 데이터를 포함할 수 있다. 각 테이블의 열은 조인 키로서 선택될 수 있고, 일치하는 조인 키들을 갖는 좌측 및 우측 테이블들의 서로 다른 행들의 데이터는 조인된 테이블의 단일 행으로 결합될 수 있다. 예를 들어, 도 1에 나타난 실시 예에서, 좌측 및 우측 테이블에서 오직 숫자들만을 갖는 열들은 조인 키로서 선택될 수 있다. 좌측 테이블의 위에서부터 두번째 행의 조인 키(3)가 우측 테이블의 맨 위 행의 조인 키(3)와 일치하기 때문에, 좌측 테이블의 위에서부터 두번째 행의 데이터(3, r3)와, 우측 테이블의 맨 위 행의 데이터(3, R3)는 단일 행(3, r3, R3)으로 결합될 수 있고, 조인된 테이블에 위치할 수 있다. 유사하게, 일치하는 조인 키(6)를 갖는 행들은 단일의 행(6, r6, R6)으로 결합될 수 있고, 조인된 테이블에 위치할 수 있다.
일부 실시 예들에서, 좌측 및 우측 테이블에서 다른 테이블에 일치하는 키들을 갖지 않는 행들의 데이터는 도 1에 나타난 바와 같이 조인된 테이블에서 생략될 수 있고, 이 경우 조인 동작은 이너 조인(inner join)으로 지칭될 수 있다. 그러나, 본 개시의 원리들은 다양한 유형들의 아우터 조인(outer join)과 같은 다른 유형들의 조인 동작들에 적용될 수도 있다.
일부 실시 예들에서, 1, 3, 4, 5, 6, 및 8과 같은 조인 키들은 실제 데이터일 수 있고, 좌측 및/또는 우측 테이블들의 r3, R3, r6, R6 등과 같은 데이터는 데이터 자체보다는 데이터에 대한 인덱스들일 수 있다. 그러므로, 일부 실시 예들에서, 좌측 및/또는 우측 테이블들은 r3, R3, r6, R6과 같은 데이터가 실제 데이터 및/또는 다른 테이블들에서 실제 데이터의 행들을 가리킬 수 있는 인덱스 테이블들로서 구현될 수 있다.
일치하는 키들을 갖는 행들의 위치를 알아내기 위해, 조인 동작은 정렬 병합 조인(또는 병합 조인 동작으로 지칭될 수도 있는)으로서 구현될 수 있다. 정렬 병합 조인 동작에서, 좌측 및 우측 테이블들은 먼저 숫자 오름차순 또는 내림차순과 같은 순차적 순서로 키들을 배열하기 위해 정렬될 수 있다. 이는 조인 키들을 비교함으로써 진행할 수 있는 테이블들의 병합을 단순화 및/또는 가속시킬 수 있다. 정렬 병합 조인 동작은 두 데이터 테이블들이 비교적 대형인 애플리케이션들에 대해 유용할 수 있다. 일부 실시 예들에서, 파티셔닝(partitioning) 및 셔플링(shuffling)과 함께, 정렬 병합 조인 동작은 다양한 노드들에서 병렬로 수행될 수 있다.
병합 조인 동작은 메모리 집약적일 수 있다. 예를 들어, 일부 데이터베이스 벤치마크들에서, CPU는 조인 동작들에서 실행 시간의 거의 50%를 소모할 수 있다. 나아가, 병합 조인 동작들을 위한 데이터는 스트리밍 방법으로 처리될 수 있고, 병합 조인을 수행하는 CPU는 메모리 인터페이스의 전체 대역폭을 활용하지 못할 수 있다. 예를 들어, 일부 실시 예들에서, 범용 CPU는 5GB/s에 달하는 대역폭에 대응하는 속도로 병합 조인 동작을 처리할 수 있으나, CPU는 100GB/s의 속도로 데이터를 전송할 수 있는 메모리 인터페이스를 가질 수 있다. 그러므로, CPU 기반의 병합 조인 동작은 메모리 대역폭을 낭비할 수 있다. 추가적으로, 병합 조인 동작의 CPU 구현은 비효율적일 수 있는데, CPU의 캐시 계층 구조가 추가적인 지연을 초래할 수 있기 때문이다. 게다가, 병합 조인 동작은 다른 애플리케이션들의 성능에 영향을 미칠 수 있는 캐시를 플러시(flush)할 수 있다.
일부 실시 예들에서, 하드웨어 가속은 병합 조인 동작의 성능을 향상시키기 위해 사용될 수 있다. 예를 들어, 일부 실시 예들에서, 호스트 CPU는 하드웨어 가속기로 정렬 동작을 오프로드(offload)할 수 있다. 그러나, 호스트 CPU는 하드웨어 가속의 이점을 제한할 수 있는 정렬 병합 조인 동작 상에서는 관여한 채로 남을 수 있다. 나아가, 이러한 유형의 구현은 또한 스토리지 및 호스트 메모리, 그리고 호스트 메모리 및 가속기 메모리 사이의 대용량의 데이터 전송을 수반할 수 있다. 이는 지연을 초래할 수 있고, 에너지 소비를 증가시킬 수 있다.
일부 실시 예들에서, 병합 조인 동작을 위한 하드웨어 가속기 구조는 다수의 기록들을 병렬로 비교할 수 있다. 그러나, 이는 구조의 확장성을 제한할 수 있는 입력 쌍들 간의 직접적인 비교를 수반할 수 있다. 다른 실시 예들에서, 병합 장치에 기반한 병렬 병합 조인 방식은 공동-그룹핑(co-grouping)을 포함할 수 있고, 및/또는 추상화 방식은 후속 동작에 의해 사용될 수 있는 완전한 결과를 획득하기 위해 추가적인 프로세싱을 수반할 수 있다. 그러므로, 일부 실시 예들에서, 프로세싱 결과들과 관련된 오버헤드는 가속기 구조를 확장하고자 시도하는 경우 지배적일 수 있다. 이러한 구조들은 또한 호스트 CPU 동작들 및/또는 스토리지, 호스트 메모리, 및 가속기 메모리 사이의 데이터 전송을 수반할 수 있다. 나아가, 이러한 구조들은 정렬 동작과 병합 조인 동작을 밀접하게 연결시킬 수 있는데, 이는 이미 쿼리 파이프라인 상에서 수행되었을 수 있는 정렬 동작들과 같은 다른 리소스들을 이용하기 위해 유연성을 희생할 수 있다.
코어 구조
도 2는 본 개시의 실시 예에 따른 병합 코어 구조의 예를 나타낸다. 도 2에 나타난 실시 예는 병합 코어(202)를 포함할 수 있고, 이는 병렬 비교 회로(204), 결과 수집 회로(206), 및 출력 개더링 회로(208)를 포함할 수 있다. 병합 코어(202)는 제 1 입력 스트림(210) 및 제 2 입력 스트림(212)을 각각 제 1 동작(216) 및 제 2 동작(218)으로부터 수신할 수 있다. 병합 코어(202)는 제 3 동작(220)으로 제 3 스트림(214)을 출력할 수 있다.
예를 들어, 제 1 스트림(210) 및 제 2 스트림(212)은 각각 좌측 테이블 및 우측 테이블에 대한 조인 동작을 위한 조인 키들 및 데이터를 포함할 수 있고, 제 3 스트림(214)은 조인된 테이블에 대한 조인 동작으로부터의 결과 조인 키들 및 데이터 출력을 포함할 수 있다. 일부 실시 예들에서, 제 1 스트림(210), 제 2 스트림(212), 및/또는 제 3 스트림(214)의 키들 및/또는 데이터는 인덱스들로서 구현될 수 있다.
일부 실시 예들에서, 병렬 비교 회로(204)는 제 1 스트림(210) 및 제 2 스트림(212)로부터 대응하는 레지스터들로 키들의 쌍을 불러올 수 있고, 인덱스 매트릭스 및/또는 마스크 매트릭스와 같은 하나 이상의 결과 매트릭스들을 생성하기 위해 병렬 비교 동작을 수행할 수 있다. 결과 수집 회로(206)는 하나 이상의 매트릭스들을 인덱스 벡터 및/또는 마스크 벡터와 같은 하나 이상의 벡터들로 감소시킬 수 있다. 결과 수집 회로(206)는 그 후 결과들을 수집할 수 있고, 결과 벡터 안에 저장할 수 있다. 예를 들어, 일부 실시 예들에서 결과 수집 회로(206)는 마스크 벡터로부터 오프셋 벡터를 생성할 수 있고, 오프셋 벡터 및 인덱스 벡터에 기반하여 결과 벡터에 대한 대응하는 구성 요소들을 수집할 수 있다. 출력 개더링 회로(208)는 하나 이상의 결과 벡터들의 내용들을 조직화하여 제 3 동작(220)에 의한 사용을 위해 제 3 스트림(214)을 통해 출력될 수 있는 하나 이상의 출력 벡터들로 패킹할 수 있다. 일부 실시 예들에서, 출력 개더링 회로(208)는 예를 들어, 다수의 사이클들로부터 결과들을 개더링하고 조밀한 벡터들로 더 타이트하게 패킹할 수 있는 버퍼링 방식을 구현할 수 있다.
예를 들어, 제 1 동작(216) 및 제 2 동작(218)은 메모리로부터의 읽기 동작, 정렬 동작, 필터 동작 등으로서 구현될 수 있다. 제 3 동작(220)은 메모리로의 기록 동작, 정렬 동작, 필터 동작 등으로서 구현될 수 있다. 예를 들어, 일부 실시 예들에서, 병합 코어(202)는 메모리로부터 좌측 및 우측 테이블들을 읽을 수 있고, 병합 조인 동작을 수행할 수 있고, 메모리로 결과들을 기록할 수 있는 독립형 커널로서 동작할 수 있다. 또 다른 예로서, 일부 다른 실시 예들에서, 병합 코어(202)는 제 1 스트림(210), 제 2 스트림(212), 및/또는 제 3 스트림(214)에 대한 하나 이상의 스트리밍 인터페이스를 통해 병합 코어(202)가 하나 이상의 다른 커널들로 연결되는 쿼리 파이프라인의 단계로서 동작할 수 있다.
구현의 세부 사항들에 따라, 도 2에 나타난 실시 예는 예를 들어, 다양한 데이터베이스 애플리케이션들에서 메모리 대역폭 활용성을 증가시킬 수 있는 디자인 유연성을 제공할 수 있다. 도 2에 나타난 실시 예는 또한 확장성을 향상시킬 수 있는 서로 다른 레벨들의 병렬 처리로 구성될 수 있다. 추가적으로, 도 2에 나타난 실시 예는 리소스 활용 및/또는 처리량을 향상시킬 수 있는 파이프라인 구성(예를 들어, 완전히 파이프라이닝된 구조) 상에 구현될 수 있다. 나아가, 출력 개더링 회로(208) 및/또는 도 2에 나타난 다른 구성 요소들 또는 실시 예는 확장성을 증가시키고 및/또는 의존성 문제들을 감소시킬 수 있는 연속적인 동작들에 의해 직접적으로 사용될 수 있는 출력 결과들을 생성할 수 있다.
도 2에 나타난 실시 예뿐만 아니라 본 명세서에 개시된 임의의 방법들, 기술들, 프로세스들은 하드웨어, 소프트웨어, 또는 이들의 조합으로서 구현될 수 있다. 예를 들어, 일부 실시 예들에서, 임의의 동작들은 결합 로직, 순차 로직, 하나 이상의 타이머들, 카운터들, 레지스터들, 상태 머신들, DRAM 및/또는 SRAM과 같은 휘발성 메모리들, 플래시 메모리와 같은 비휘발성 메모리, CPLD(complex programmable logic device), FPGA(field programmable gate array), ASIC(application specific integrated circuit), CISC(complex instruction set computer) 프로세서 및/또는 RISC(reduced instruction set computer) 프로세서, 및/또는 유사한 실행 명령들 등뿐만 아니라 GPU, NPU 등을 이용하여 구현될 수 있다.
도 2에 나타난 실시 예와 관련되어 설명되는 동작들 및/또는 구성 요소들뿐만 아니라, 본 명세서에 개시된 모든 다른 실시 예들은 동작들 및/또는 구성 요소들의 예이다. 일부 실시 예들에서, 일부 동작들 및/또는 구성 요소들은 생략될 수 있고, 및/또는 다른 동작들 및/또는 구성 요소들이 포함될 수 있다. 나아가, 일부 실시 예들에서, 동작들 및/또는 구성 요소들의 시간적 및/또는 공간적 순서는 다양할 수 있다. 비록 일부 구성 요소들이 개별적인 구성 요소들로서 나타나 있지만, 일부 실시 예들에서, 개별적으로 나타난 일부 구성 요소들은 단일의 구성 요소들로 통합될 수도 있고, 그리고/또는 단일의 구성 요소들로서 나타난 일부 구성 요소들은 다수의 구성 요소들로서 구현될 수 있다.
데이터 의존성
도 3은 본 개시의 실시 예에 따른 병합 조인 동작의 예에서 발생할 수 있는 일부 가능한 데이터 의존성 케이스들을 나타낸다. 도 3에 나타난 케이스들 각각에서, 빗금이 칠해진 바들은 조인 키들의 우측 배치의 범위들을 나타낼 수 있고, 빗금이 칠해지지 않은 바들은 조인 키들의 좌측 배치의 범위들을 나타낼 수 있다. 도 3 우측의 관계들에서, lmin 및 lmax는 좌측 키들의 최소 및 최대값들을 나타낼 수 있고, rmin 및 rmax는 우측 키들의 최소 및 최대값들을 나타낼 수 있다. 좌측 및 우측 키들의 다음 배치들을 로딩할 때, 일부 실시 예들은 다음 두 조건들 중 하나 또는 모두가 만족될 수 있도록 배치들을 로드하려는 시도를 할 수 있다: (1) 좌측 키들의 범위들 및 우측 키들의 범위들 사이에 겹치는 구간이 있을 것; 그리고 (2) 다음 배치를 로딩하기 전에 대응하는 범위 내에서 현재 배치의 각 요소가 비교되었을 것. 조건 (1)이 만족되지 않은 경우, 좌측 및 우측 키들의 배치들 사이에 일치하는 키들이 없을 수 있고, 비교 사이클들이 낭비될 수 있다. 조건 (2)가 만족되지 않은 경우, 하나 이상의 출력 결과들이 소실될 수 있다.
다음의 분석은 배치 로딩 단계가 비교 루프의 헤드에서 발생하고, 현재 배치들이 비교된 것을 가정할 수 있다. 또한, 다음의 분석은 좌측 테이블이 고유의 키들을 갖는(즉, 중복된 키들이 없는) 것을 가정할 수 있다. 케이스 1 및 케이스 5의 경우, 조건 (1)이 만족되지 않을 수 있고, 좌측 및 우측 데이터의 배치들 사이에 일치하는 키들이 없을 수 있기 때문에 비교 사이클들이 낭비될 수 있다. 그러므로, 일부 실시 예들은(예를 들어, 케이스 1 또는 케이스 5는 아님) 좌측 및 우측 배치들의 키들 사이에 어떤 오버랩이 존재할 때까지 우측 데이터의 연속적인 다음 배치들을 계속 로딩할 수 있다. 케이스 2의 경우, lmax보다 큰 구성 요소들은 적절한 범위 내에서 비교되지 않을 수 있고, 다음 좌측 배치가 로딩될 수 있다. 케이스 3 및 케이스 4의 경우, 모든 우측 배치 구성 요소들이 적절히 비교되었을 수 있고, 다음 우측 배치가 로딩될 수 있다. 우측 테이블에 중복되는 키들이 존재할 수 있기 때문에, 최대 값을 갖는 구성 요소는 다음 우측 배치에 나타날 수 있다. 그러므로, 케이스 3의 경우, 최대값과 최소값이 동일한 경우라 할지라도, 일부 실시 예에서는 다음 우측 배치가 로딩될 수 있다.
파이프라이닝된 동작
일부 실시 예들에서, 입력 데이터 테이블들 중 하나 또는 모두는 오직 고유한 키들만을 가질 수 있다(즉, 중복된 키들이 없을 수 있다). 설명의 일관성 및 편의성을 위해, 좌측 테이블은 오직 고유한 키들만을 가지는 것으로 가정하고, 우측 테이블은 중복된 키들을 가지거나 또는 가지지 않을 수 있다.
도 4는 본 개시의 실시 예에 따른 완전히 파이프라이닝된 병렬 비교 및 결과 수집 동작의 예를 나타낸다. 예를 들어, 도 4에 나타난 실시 예는 도 2에 나타난 실시 예를 이용하여 구현될 수 있다. 비록 도 4에 나타난 실시 예는 완전히 파이프라이닝될 수 있으나, 본 개시에 따른 다른 실시 예들은 완전히 파이프라이닝 없이 구현될 수도 있다.
도 4를 참조하면, 비교 사이클의 시작 단계에서, 좌측 키들의 배치는 좌측 배치 레지스터(402)로 로딩될 수 있다. 이 예에서, 좌측 키들의 값들은 각각 레지스터 위치들 0, 1, 2, 및 3에 존재하는 1, 2, 3, 및 8일 수 있다. 우측 키들의 배치는 우측 배치 레지스터(404)로 로딩될 수 있다. 이 예에서, 우측 키들의 값들은 각각 레지스터 위치들 0, 1, 2, 및 3에 존재하는 0, 1, 3, 및 4일 수 있다. 도 4에 나타난 행렬들 및 벡터들에서, 유효한 데이터는 음영이 칠해진 셀들로 나타나 있고, 널(null) 데이터로 지칭될 수도 있는 유효하지 않은 데이터는 음영이 칠해지지 않은 셀들로 나타나 있다.
병렬 매트릭스 비교 동작(401)은 우측 배치의 각 구성 요소와 좌측 배치의 각 구성 요소를 비교함으로써 좌측 및 우측 데이터의 배치들 상에서 수행되어 인덱스 매트릭스(406) 및 마스크 매트릭스(408)를 생성할 수 있다. 2차원 어레이로 지칭될 수도 있는 인덱스 매트릭스(406)에서, 각 유효한 구성 요소들은 대응하는 우측 키와 일치하는 좌측 키의 인덱스를 포함할 수 있다. 2차원 어레이로 지칭될 수도 있는 마스크 매트릭스(408)에서, 각 유효한 구성 요소들은 현재 좌측 및 우측 키들이 일치함을 나타낼 수 있다.
결과 수집 동작(403)은 그 후 좌측 테이블 차원을 따라 인덱스 매트릭스(406)를 감소시킴으로써 화살표(412)에 의해 나타난 바와 같이 인덱스 벡터(410)를 생성할 수 있다. 예를 들어, 일부 실시 예들에서, 인덱스 매트릭스(406)는 각 행의 인덱스들의 합을 계산함으로써 좌측 테이블 차원(행 차원)을 따라 감소될 수 있는데, 각 유효하지 않은 또는 널 구성 요소는 0으로 취급될 수 있다.
결과 수집 동작(403)은 또한 좌측 테이블 차원을 따라 마스크 매트릭스(408)을 감소시킴으로써 화살표(416)에 의해 나타난 바와 같이 마스크 벡터(414)를 생성할 수 있다. 예를 들어, 일부 실시 예들에서, 마스크 매트릭스(408)는 유효한 구성 요소들이 1로 취급되고, 유효하지 않은 또는 널 구성 요소가 0으로 취급되는 로직 OR-감소를 수행함으로써 좌측 테이블 차원(행 차원)을 따라 감소될 수 있다.
좌측 테이블은 오직 고유한 키들만 가질 수 있기 때문에, 각 우측 테이블 키에 대해, 좌측 테이블에는 많아야 하나의 일치하는 키가 있을 수 있고, 감소 동작은 결과를 손상시키지 않을 수 있다. 그러므로, 인덱스 매트릭스(406)의 각 행에는 오직 하나의 유효한 인덱스만 있을 수 있고, 인덱스 벡터(410)의 각 위치에는 하나의 유효한 인덱스만 있을 수 있다. 유사하게, 마스크 매트릭스(408)의 각 행에는 오직 하나의 유효한 구성 요소만 있을 수 있고, 마스크 벡터(414)의 각 위치에는 하나의 유효한 성분만 있을 수 있다.
결과 수집 동작(403)은 그 후 화살표(420)에 의해 나타난 바와 같이 마스크 벡터(414)로부터 오프셋 벡터(418)를 생성할 수 있다. 일부 실시 예들에서, 오프셋 벡터(418)의 각 위치는 마스크 벡터(414)의 대응하는 위치에 대한 키가 기록될 수 있는 결과 벡터(422)의 대응하는 위치를 나타낼 수 있다. 일부 실시 예들에서, 오프셋 벡터(418)의 각 위치에 대한 오프셋은 가장 낮은 인덱스부터 시작하여 자기 자신을 포함하지 않고, 좌측 배치로부터 유효한 구성 요소들의 수를 카운팅함으로써 계산될 수 있다.
결과 수집 동작(403)은 그 후 결과들을 수집할 수 있고, 결과 벡터(422)에 저장할 수 있다. 일부 실시 예들에서, 결과 수집 동작(403)은 결과 벡터(422)의 위치들을 따라 순환할 수 있다. 좌측 키(및 관련된 데이터)는 (a) 출력 벡터의 현재 인덱스와 동일한 값을 갖는 오프셋 벡터의 구성 요소의 인덱스를 찾고, (b) 오프셋 벡터 인덱스에 기반하여 좌측 인덱스를 페칭(fetching)함으로써 획득될 수 있다. 우측 테이블의 인덱스는 대응하는 오프셋 벡터 구성 요소의 인덱스일 수 있다. 결과 키들의 값들은 결과 벡터(422)의 대응하는 위치들로 저장될 수 있다.
일부 실시 예들에서, 결과 벡터(422)는 각 키와 관련된 좌측 및 우측 테이블 데이터(인덱스들일 수 있는)가 저장될 수 있는 관련된 데이터 구조(미도시)를 포함할 수 있다. 나타난 임의의 매트릭스들 및/또는 벡터들은 대응하는 고유 버퍼들에 저장될 수 있거나, 그리고/또는 집계된 버퍼들 상에 결합될 수 있다.
도 5 내지 도 6은 본 개시의 실시 예에 따른 출력 개더링 동작들의 제 1 및 제 2 예들을 나타낸다. 예를 들어, 도 5 내지 도 6에 나타난 실시 예들은 도 2에 나타난 실시 예를 이용하여 구현될 수 있다. 예를 들어, 도 5 내지 도 6에 나타난 실시 예들은 도 4에 나타난 실시 예들에 의해 생성되는 결과들의 프로세싱을 계속하기 위해 사용될 수 있다.
일부 실시 예들에서, 수집된 결과 벡터(422)를 이용하여, 결과들은 컴팩트 벡터(1차원 배열로 지칭될 수 있는) 패킹될 수 있는데, 모든 위치들은 채워져서(병합 조인 프로세스가 완료되지 않아, 결과 벡터(422)가 포함할 결과가 더 없을 수 있는 경우가 아니라면) 결과들이 출력될(예를 들어, 메모리로 기록되거나 후속 동작으로 스트리밍되는) 수 있다. 일부 실시 예들에서, 잔여 버퍼는 결과들을 개더링하는 데 사용될 수 있고, 구현의 세부 사항들에 따라, 의존성 문제들을 감소 또는 제거할 수 있다. 도 5 내지 도 6에 나타난 실시 예들은 결과 수집 동작으로부터의 결과 벡터와 잔여 버퍼 상의 현재 잔여 벡터의 내용들과 결합됨으로써 얼마나 많은 유효한 구성 요소들이 출력될 수 있는지 계산할 수 있다. 결합된 결과가 출력 벡터를 채울 만큼 충분히 큰 경우, 결과들은 출력 벡터 상에서 결합될 수 있고, 개더링 프로세스로부터 출력될 수 있다. 결과 어레이로부터 임의의 남아 있는 구성 요소들은 잔여 버퍼 상의 잔여 벡터로 기록될 수 있다.
도 5는 Valid_cnt+lo_cnt<P인 실시 예를 나타내는데, Valid_cnt는 도 4에 나타난 결과 수집 동작(403)과 같은 결과 수집 동작으로부터 출력 개더링 동작에 의해 수신된 결과 벡터(502)의 유효한 성분들의 수를 나타낼 수 있고, lo_cnt는 잔여 벡터(504)의 성분들의 수를 나타낼 수 있고, P는 병렬 팩터를 나타낼 수 있는데, 본 실시 예에서 P는 4일 수 있다.
도 5에 나타난 바와 같이, 결과 벡터(502)는 각각 위치들 0, 1, 및 2에서 키 값들 4, 6, 및 8을 가질 수 있다(Valid_cnt=3). 잔여 벡터(504)는 초기에 비어있을 수 있다(lo_cnt=0). 그러므로, 결과 벡터(502)에는 잔여 벡터(504)를 채울 만큼 충분한 값들이 존재하지 않을 수 있다. 결과 벡터(502)의 내용들은 화살표(510)에 의해 나타난 바와 같이 잔여 벡터(504)로 기록될 수 있고, 출력 개더링 동작이 다음 사이클까지 완결될 수 있다.
도 6은 Valid_cnt+lo_cnt≥P인 실시 예를 나타낸다. 구체적으로, 결과 벡터(602)는 각각 위치들 0, 1, 및 2에서 키 값들 4, 6, 및 8을 가질 수 있고(Valid_cnt=3), 잔여 벡터(604)는 위치들 0 및 1에서 각각 키 값들 1 및 3을 가질 수 있다(lo_cnt=2).
그러므로, 결과 벡터(602)에는 잔여 벡터(604)를 채울 만큼 충분한 키들이 존재할 수 있고, 여전히 잔여 값들을 가질 수 있으므로, 출력 결과들의 배치는 출력 개더링 동작으로부터 출력될 수 있다. 구체적으로, 잔여 벡터(604)의 위치들 1 및 0에 각각 위치하는 키 값들 1 및 3은 출력 벡터(606)의 위치들 0 및 1로 이동될 수 있고, 이는 잔여 벡터(604)를 비어 있게 할 수 있다. 결과 벡터(602)의 위치들 0 및 1에 각각 위치하는 키 값들 4 및 6은 출력 벡터(606)의 위치들 2 및 3으로 각각 기록될 수 있다. 출력 벡터(606)는 그 후 화살표(608)에 의해 나타난 바와 같이 출력 개더링 동작에 의해 출력될(예를 들어, 메모리로 기록되거나 후속 동작들로 스트리밍될) 수 있다.
결과 벡터(602)의 위치 2에 위치하는 잔여 키 값 8은 화살표(610)에 의해 나타난 바와 같이 잔여 벡터(604)의 위치 0으로 기록될 수 있고, 출력 개더링 동작은 다음 사이클까지 완결될 수 있다.
일부 실시 예들에서, 출력 벡터(606)는 도 4에 나타난 실시 예와 유사하게 각 키와 관련된 좌측 및 우측 테이블 데이터(인덱스들일 수 있는)가 저장될 수 있는 관련된 데이터 구조(미도시)를 포함할 수 있다.
도 5 내지 도 6에 나타난 실시 예들에서, 잔여 벡터는 왼쪽 아래 방향의 빗금으로 나타날 수 있고, 결과 벡터는 우측 아래 방향의 빗금으로 나타날 수 있고, 그리고 출력 벡터는 교차된 빗금으로 나타날 수 있다. 유효한 데이터는 음영이 칠해진 셀들로 나타날 수 있고, 유효하지 않은 또는 널 데이터는 음영이 칠해지지 않은 셀들로 나타날 수 있다. 도 5 내지 도 6에 나타난 실시 예들에서, 임의의 벡터들은 대응하는 고유 버퍼들에 저장될 수 있거나, 그리고/또는 집계된 버퍼들 상에 결합될 수 있다.
도 7은 본 개시의 실시 예에 따른 병렬 비교, 결과 수집, 및 출력 개더링 동작들의 예를 나타내는 흐름도이다. 도 7에 나타난 실시 예에서, 우측 및 좌측 데이터의 배치들은 각각 고유 레지스터들 R 및 L로 로딩되었을 수 있다. 동작들 702 및 704에서, 우측 및 좌측 데이터의 배치들의 각 구성 요소는 병렬 비교 동작을 수행하기 위해 중간 데이터 구조로 복사될 수 있다. 동작 706에서, 마스크 매트릭스 Mi,j 및 인덱스 매트릭스 Indi,j를 생성하기 위해 병렬 비교가 수행될 수 있다. 동작 708에서, 마스크 매트릭스 Mi,j 및 인덱스 매트릭스 Indi,j는 마스크 벡터 mi 및 인덱스 벡터 Ii를 생성하기 위해 감소될 수 있다. 동작 710에서, 오프셋 벡터 Oi는 마스크 벡터 mi로부터 생성될 수 있다. 동작 712에서, 결과들은 인덱스 벡터 Indi의 대응하는 인덱스들에 기반하여 결과 벡터 Res 상에 수집될 수 있다. 동작 714에서, 우측 키들 및 대응하는 우측 데이터(인덱스들일 수 있는) 그리고 대응하는 좌측 데이터는 검색될 수 있고, 출력에 대한 유효한 구성 요소들의 수 n이 카운팅될 수 있다. 동작 716에서, 결과 벡터 Res 상의 데이터의 양이 잔여 버퍼를 채울 만큼 충분하지 않은 경우, 결과 벡터 Res 상의 데이터는 동작 718에서 잔여 버퍼로 기록될 수 있고, 방법은 다음 사이클까지 완결될 수 있다. 그러나 동작 716에서, 결과 벡터 Res 상의 데이터의 양이 잔여 버퍼를 채울 만큼 충분한 경우, 방법은 동작 720으로 진행할 수 있고, 잔여 버퍼 상의 데이터와, 결과 벡터 Res의 아래쪽 위치들 상의 충분한 데이터와 결합되어, 예를 들어 메모리로 기록함으로써 출력될 수 있는 출력 벡터 Out을 채울 수 있다. 결과 벡터 Res에 남아 있는 임의의 데이터는 동작 722에서 잔여 버퍼로 기록될 수 있고, 방법은 다음 사이클까지 완결될 수 있다.
니어-스토리지 구현
비록 본 명세서에 개시된 원리들이 특정 애플리케이션들에 제한되는 것은 아니지만, 일부 실시 예들에서, 기술들은 특히 니어-스토리지 데이터 프로세싱에 적용되었을 때 장점이 많을 수 있다. 예를 들어, FPGA와 같은 가속기 장치를 갖는 솔리드 스테이트 드라이브(SSD)와 같은 계산 스토리지 장치는 높은 수준의 병렬 처리 및/또는 효율성을 제공할 수 있고, 이는 본 개시의 실시 예에 따른 병합 조인 동작의 성능을 향상시킬 수 있다.
도 8은 본 개시의 실시 예에 따른 니어-스토리지 프로세싱 시스템의 예를 나타낸다. 도 8에 나타난 실시 예는 P2P 연결(806)을 통해 연결될 수 있는 가속기 장치(802) 및 스토리지 장치(804)를 포함할 수 있다. 가속기 장치(802)는 본 명세서에 개시된 임의의 병렬 처리 방식들을 구현할 수 있는 병합 코어(808)를 포함할 수 있고, 이는 병렬 비교, 결과 수집, 및 출력 개더링 프로세스를 포함한다.
스토리지 장치(804)는 SSD, HDD, 광학 드라이브, 대량의 저항 변화를 갖는 크로스-그리드된 불휘발성 메모리와 같은 임의의 유형의 영구 메모리 및/또는 이들의 조합과 같은 임의의 유형의 스토리지 장치를 이용하여 구현될 수 있다. 가속기 장치(802) 및 병합 코어(808)는 결합 로직, 순차 로직, 하나 이상의 타이머들, 카운터들, 레지스터들, 상태 머신들, DRAM 및/또는 SRAM과 같은 휘발성 메모리들에 저장된 유사한 실행 명령들, 플래시 메모리와 같은 비휘발성 메모리, CPLD, FPGA, ASIC, CISC 프로세서 및/또는 RISC 프로세서, 및/또는 유사한 실행 명령들 등뿐만 아니라 GPU, NPU 등을 포함하는 하드웨어, 소프트웨어, 또는 이들의 조합을 이용하여 구현될 수 있다.
P2P 연결(806)은 PCIe(Peripheral Component Interconnect Express), CXL(Compute Express Link), AXI(Advanced eXtensible Interface) 등과 같은 인터커넥트, SATA, SAS, NVMe 등과 같은 스토리지 연결 및/또는 프로토콜, 이더넷, 광섬유 채널, 인피니밴드 등과 같은 네트워크 통신 및/또는 프로토콜뿐만 아니라 NVMe-oF(NVMe over Fabric) 등과 같은 이들의 조합을 이용하여 구현될 수 있다.
예를 들어, 도 8에 나타난 실시 예는 3.5인치, 2.5인치, 1.8인치, M.2 등과 같은 폼 팩터를 갖고, 그리고/또는 SATA, SAS, U.2 등과 같은 임의의 커넥터 설정을 이용하는 스토리지 장치와 같이 임의의 형태 또는 구성을 이용하여 구현될 수 있다. 또 다른 예로서, 도 8에 나타난 실시 예는 절반-높이 또는 전체-높이 PCIe 애드인 카드와 같은 애드인 카드에 전체적으로 또는 부분적으로 구현될 수 있다. 일부 실시 예들은 서버 샤시(chassis), 서버 랙(rack), 데이터 룸, 데이터센터, 엣지 데이터센터, 모바일 엣지 데이터센서, 및/또는 이들의 조합 등을 이용하여 전체적으로 또는 부분적으로 구현될 수 있다.
도 9는 본 개시의 실시 예에 따른 니어-스토리지 프로세싱 시스템의 예를 나타낸다. 예를 들어, 도 9에 나타난 예는 도 8에 나타난 예를 구현하기 위해 사용될 수 있고, 그러므로 상술한 임의의 구현의 세부 사항들을 이용하여 구현될 수 있다.
도 9에 나타난 실시 예는 P2P 연결(906)을 통해 연결될 수 있는 가속기 장치(902) 및 스토리지 장치(904)를 포함할 수 있다. 호스트(910)는 연결(912)을 통해 가속기(902) 및/또는 스토리지 장치(904)로 연결될 수 있다.
가속기 장치(902)는 본 명세서에 개시된 임의의 병렬 처리 방식들을 구현할 수 있는 병합 코어(908)를 포함할 수 있고, 이는 병렬 비교, 결과 수집, 및 출력 개더링 프로세스를 포함한다. 그러므로, 병합 코어(908)는 병렬 비교 회로(909), 결과 수집 회로(911), 및 출력 개더링 회로(913)를 포함할 수 있다. 가속기 장치(902)는 제 1 읽기 장치(914), 제 2 읽기 장치(916), 및 버스(922)를 통해 메모리(920)로 인터페이싱될 수 있는 쓰기 장치(918)를 더 포함할 수 있다.
일부 실시 예들에서, 도 9에 나타난 구조는 병합 조인 동작들을 가속시키기 위해 사용될 수 있다. 예를 들어, 예를 들어, 가속기 장치(902)는 P2P 연결(906)을 이용하여 스토리지 장치(904)로부터 메모리(920)로 좌측 및 우측 테이블들을 갖는 데이터셋을 직접적으로 읽을 수 있다. 제 1 읽기 장치(914)는 메모리(920)의 좌측 테이블로부터 키들 및 대응하는 데이터(예를 들어, 인덱스들일 수 있는)를 읽을 수 있고, 제 2 읽기 장치(916)는 메모리(920)의 우측 테이블로부터 키들 및 대응하는 데이터(예를 들어, 인덱스들일 수 있는)를 읽을 수 있다. 병합 코어(908)는 좌측 및 우측 테이블들에 대해 병합 조인 동작을 수행하여 쓰기 장치(918)에 의해 메모리(920)로 기록될 수 있는 결과적인 조인된 테이블을 생성할 수 있다. 일부 실시 예들에서, 읽기 장치들(914, 916) 및 쓰기 장치(918)는 스트리밍 인터페이스들을 구현할 수 있다.
일부 실시 예들에서, 도 9에 나타난 구조는 예를 들어, 서로 다른 메모리 폭 및/또는 데이터 유형 설정들에 적합하도록 템플릿-기반 구성으로서 구현될 수 있다. 일부 실시 예들에서, 읽기 및/또는 쓰기 요청들은 메모리 인터페이스(915)의 폭을 완전히 활용할 수 있는 비트 폭들로 패킹될 수 있다. 개별적인 읽기 장치들(914, 916)은 각 테이블을 읽고, 그리고/또는 설정된 병렬 처리에 기반하여 구성 요소들을 언패킹하고, 병합 코어(908)로 입력되는 스트림들로 입력시키기 위해 병렬로 동작할 수 있다. 병합 코어(908)는 각 사이클마다 키들의 쌍들의 특정 수(예를 들어, P=4일 때 사이클 별로 16 키들의 쌍들)를 비교할 수 있는 비트 폭(예를 들어, 병렬 팩터 P)을 갖는 병렬 비교, 결과 수집, 및 출력 개더링 프로세스를 수행하기 위해 구성될 수 있다. 쓰기 장치(918)는 메모리 인터페이스의 폭을 완전히 활용할 수 있는 비트 폭들로 결과들을 패킹하도록 구성될 수 있다.
도 10은 본 개시의 실시 예에 따른 읽기 장치의 예를 나타낸다. 예를 들어, 도 10에 나타난 실시 예는 도 9에 나타난 읽기 장치들(914, 916) 중 어느 하나를 구현하기 위해 사용될 수 있다. 도 10에 나타난 실시 예(1002)는 패킹된 키들을 키 스트림으로 변환하기 위해 배치되는 제 1 컬럼 읽기 장치(1004) 및 키들과 관련된 패킹된 데이터를 데이터 스트림으로 변환하기 위해 배치되는 제 2 컬럼 읽기 장치(1006)를 포함할 수 있다. 일부 실시 예들에서, 패킹된 데이터 및 데이터 스트림은 다른 데이터로의 인덱스들일 수 있다. 테이블 크기 입력은 얼마나 많은 데이터를 읽어야 하는지를 컬럼 읽기 장치들(1004, 1006)로 알릴 수 있고, 최종 스트림 출력은 키 스트림이 언제 완료되었는지를 나타낼 수 있다.
도 11은 본 개시의 실시 예에 따른 컬럼 읽기 장치의 예를 나타낸다. 예를 들어, 도 11에 나타난 실시 예는 도 10에 나타난 컬럼 읽기 장치들(1004, 1006) 중 어느 하나를 구현하기 위해 사용될 수 있다. 도 11에 나타난 실시 예(1104)는 예를 들어, 도 9에 나타난 버스(922)의 폭에서 메모리로부터 데이터를 수신할 수 있는 읽기 큐(1110)를 포함할 수 있다. 읽기 큐(1110)로부터의 데이터는 예를 들어, 도 9에 나타난 메모리(920)와 연결된 인터페이스의 폭을 갖는 버퍼(1114)로 데이터를 로딩할 수 있는 언팩 모듈(1112)로 전송될 수 있다. 직렬화기(1116)는 버퍼(1114)로부터의 데이터를 출력 스트림으로 변환할 수 있다. 카운터(1120)는 테이블 크기 데이터를 사용하여 최종 스트림 신호를 생성할 수 있다.
도 12는 본 개시의 실시 예에 따른 쓰기 장치의 예를 나타낸다. 예를 들어, 도 12에 나타난 실시 예는 도 9에 나타난 쓰기 장치(918)를 구현하기 위해 사용될 수 있다. 도 12에 나타난 실시 예(1218)는 키 스트림을 패킹된 키들로 변환하기 위한 제 1 컬럼 쓰기 장치(1222), 좌측 데이터 스트림을 패킹된 좌측 데이터로 변환하기 위한 제 2 컬럼 쓰기 장치(1224), 그리고 우측 데이터 스트림을 패킹된 우측 데이터로 변환하기 위한 제 3 컬럼 쓰기 장치(1226)를 포함할 수 있다. 최종 분배 회로(1240)는 세 개의 컬럼 쓰기 장치들로 최종 스트림 신호를 분배할 수 있다.
도 13은 본 개시의 실시 예에 따른 컬럼 쓰기 장치의 예를 나타낸다. 예를 들어, 도 13에 나타난 실시 예는 도 12에 나타난 쓰기 장치들(1222, 1224, 1226) 중 어느 하나를 구현하기 위해 사용될 수 있다. 도 13에 나타난 실시 예(1322)는 예를 들어, 도 9에 나타난 메모리(920)와 연결된 인터페이스의 폭을 가질 수 있는 패킹 버퍼(1352)를 갖는 패킹 회로(1350)를 포함할 수 있다. 카운터(1356)은 최종 스트림 신호에 기반하여 출력 길이 신호를 생성할 수 있다. 병렬화기(1360)는 패킹 버퍼(1352)로부터의 데이터를, 도 9에 나타난 버스(922)를 통해 메모리(920)로 기록되기 전에 쓰기 큐(1362)에 저장될 수 있는 패킹된 데이터로 변환할 수 있다.
도 14는 본 개시의 실시 예에 따른 데이터 프로세싱 방법의 예를 나타낸다. 도 14에 나타난 실시 예는 동작 1402에서 시작할 수 있다. 동작 1404에서, 방법은 제 1 데이터와 관련된 제 1 키들의 스트림을 수신할 수 있다. 동작 1406에서, 방법은 제 2 데이터와 관련된 제 2 키들의 스트림을 수신할 수 있다. 동작 1408에서, 방법은 제 1 키들의 배치 및 제 2 키들의 배치를 병렬로 비교할 수 있다. 동작 1410에서, 방법은 비교하는 단계로부터 하나 이상의 결과들을 수집할 수 있다. 동작 1412에서, 방법은 수집하는 단계로부터 하나 이상의 결과들을 개더링할 수 있다. 방법은 동작 1414에서 종료할 수 있다.
도 14에 나타난 실시 예와 관련되어 설명되는 동작들 및/또는 구성 요소들뿐만 아니라, 본 명세서에 개시된 모든 다른 실시 예들은 동작들 및/또는 구성 요소들의 예이다. 일부 실시 예들에서, 일부 동작들 및/또는 구성 요소들은 생략될 수 있고, 및/또는 다른 동작들 및/또는 구성 요소들이 포함될 수 있다. 나아가, 일부 실시 예들에서, 동작들 및/또는 구성 요소들의 시간적 및/또는 공간적 순서는 다양할 수 있다.
일부 실시 예들에서, 구현의 세부 사항들에 따라, 본 명세서에 개시된 실시 예들은 임의의 수의 다음 특징들을 구현할 수 있고, 그리고/또는 임의의 수의 다음 이점들을 제공할 수 있다.
구조의 유연성은 일부 실시 예들로 하여금 쿼리 파이프라인 상의 다른 리소스들을 이용할 수 있도록 할 수 있다. 예를 들어, 일부 데이터베이스 쿼리 파이프라인들에서, 정렬 동작은 이미 좌측 및/또는 우측 테이블들에 대해 수행되었을 수 있다. 그러므로, 본 개시에 따른 실시 예들은 정렬된 데이터에 대해 병합 조인 동작을 수행하기 매우 적합할 수 있다.
본 개시의 실시 예에 따른 병합 조인 동작들의 병렬 처리는 스칼라 기반의 CPU 구조 상에서의 동작들에 비해 더 계산 및/또는 에너지 효율적일 수 있다.
본 명세서에 개시된 기술들은 임의의 다른 데이터 집약 동작들을 최적화하기 위해 범용화될 수 있다. 그러므로, 병렬 비교 동작은 임의의 유형의 병렬 데이터 프로세싱을 이용하여 구현될 수 있고, 본 개시의 실시 예에 따른 비교-수집-개더링 메커니즘은 스트리밍 데이터플로우를 갖는 임의의 병렬 구조 디자인 상에 구현될 수 있다.
본 명세서에 개시된 기술들은 타이밍 오버헤드가 거의 없거나 또는 없는 데이터의 서로 다른 배치 사이즈들에 대해 확장성을 제공할 수 있고, 그러므로 파이프라인 스케쥴링(pipeline scheduling)에 영향을 미치지 않을 수 있다.
본 명세서에 개시된 기술들은 백프레셔(backpressure)가 거의 없이 또는 없이 부분적으로 또는 완전히 파이프라이닝될 수 있고, 그러므로 클록 주파수에 영향을 거의 또는 아예 미치지 않고 확장될 수 있다.
본 명세서에 개시된 기술들은 계산 스토리지 장치의 가속 프레임워크로 통합될 수 있고, 다른 모듈들과 유연하게 같이 작동할 수 있다.
본 명세서에 개시된 기술들은 컴파일 과정에서 임의의 데이터 길이들 및/또는 데이터 유형들을, 그리고/또는 런타임에서 임의의 데이터 유형의 세트를 수용할 수 있다.
본 명세서에 개시된 기술들은 타이밍 오버헤드가 거의 없거나 또는 없는 서로 다른 배치 사이즈들로 확장성을 제공하기 위해 수집-개더링 방식을 활용할 수 있다.
본 명세서에 개시된 기술들은 예를 들어, 데이터 패킹/언패킹 방식을 갖는 메모리 버스 폭을 완전히 활용할 수 있다.
상술한 실시 예들은 다양한 구현의 세부 사항들의 맥락에서 설명되었으나, 본 개시의 원리들은 이러한 또는 다른 세부 사항들에 제한되지 않는다. 예를 들어, 일부 기능은 특정 구성 요소들에 의해 구현되는 것으로 설명되었으나, 다른 실시 예들에서, 그 기능은 서로 다른 위치들에 존재하고 다양한 사용자 인터페이스들을 갖는 서로 다른 시스템들 및 구성 요소들 사이에 분배될 수 있다. 특정 실시 예들은 특정 프로세스들, 동작들 등을 갖는 것으로 설명되었으나, 이러한 용어들은 또한 특정 프로세스, 동작 등이 다수의 프로세스들, 동작들 등을 이용하여 구현될 수 있거나, 다수의 프로세스들, 동작들 등이 단일의 프로세스, 단계 등으로 통합될 수 있는 실시 예들을 포함할 수 있다. 구성 요소 또는 요소에 대한 참조는 해당 구성 요소 또는 요소의 오직 일부를 지칭할 수 있고, 블록에 대한 참조는 전체 블록 또는 하나 이상의 서브블록들을 지칭할 수 있다. 본 개시 및 청구 범위에서 “제 1”및 “제 2”와 같은 용어들의 사용은 그들이 변형하는 것들을 구별하기 위한 목적일 뿐이며, 내용으로부터 명확하지 않은 이상 그 어떤 공간적 또는 시간적 순서도 나타내지 않을 수 있다. 일부 실시 예들에서, 특정 사항에 대한 참조는 그 특정 사항의 적어도 일부를 지칭할 수 있다. 예를 들어, “에 기반하여”는 “에 적어도 부분적으로 기반하여”를 나타낼 수 있다. 일부 실시 예들에서, “비활성화된”은 “적어도 부분적으로 비활성화된”을 나타낼 수 있다. 첫 번째 요소로의 참조는 두 번째 요소의 존재를 암시하지 않을 수 있다. 섹션의 제목과 같이 다양한 구조적 보조 요소들 등은 편의를 위해 제공될 수 있으나, 이러한 보조 요소들에 따라 배열되는 주제 및 본 개시의 원리들은 이러한 구조적인 보조 요소들에 제한되지 않는다.
상술한 다양한 세부 사항들 및 실시 예들은 본 개시의 원리들에 따라 추가적인 실시 예들을 생성하기 위해 결합될 수 있다. 본 개시의 원리들은 발명의 개념을 벗어나지 않는 범위 내에서 배열 및 세부 사항이 변화할 수 있으므로, 이러한 변화들 및 변경들은 다음 청구 범위에 속하는 것으로 간주된다.

Claims (20)

  1. 제 1 데이터와 관련된 제 1 키들의 스트림을 수신하는 단계;
    제 2 데이터와 관련된 제 2 키들의 스트림을 수신하는 단계;
    상기 제 1 키들의 배치 및 상기 제 2 키들의 배치를 병렬로 비교하는 단계;
    상기 비교하는 단계로부터 하나 이상의 결과들을 수집하는 단계; 및
    상기 수집하는 단계로부터 하나 이상의 결과들을 모으는 단계를 포함하는 데이터 프로세싱 방법.
  2. 제 1 항에 있어서,
    상기 비교하는 단계는 상기 제 1 키들의 상기 배치 및 상기 제 2 키들의 상기 배치에 기반하여 적어도 하나의 매트릭스를 생성하는 단계를 포함하는 데이터 프로세싱 방법.
  3. 제 2 항에 있어서,
    상기 수집하는 단계는 상기 적어도 하나의 매트릭스를 감소시키는 단계를 포함하는 데이터 프로세싱 방법.
  4. 제 3 항에 있어서,
    상기 적어도 하나의 매트릭스는 인덱스 매트릭스 및 마스크 매트릭스를 포함하고,
    상기 적어도 하나의 매트릭스를 감소시키는 단계는:
    상기 인덱스 매트릭스를 인덱스 벡터로 감소시키는 단계; 및
    상기 마스크 매트릭스를 마스크 벡터로 감소시키는 단계를 포함하는 데이터 프로세싱 방법.
  5. 제 4 항에 있어서,
    상기 마스크 벡터에 기반하여 오프셋 벡터를 생성하는 단계를 더 포함하는 데이터 프로세싱 방법.
  6. 제 1 항에 있어서,
    상기 하나 이상의 결과들을 수집하는 단계는 오프셋 및 상기 제 1 키들 중 대응하는 하나에 기반하여 결과 벡터를 생성하는 단계를 포함하는 데이터 프로세싱 방법.
  7. 제 1 항에 있어서,
    상기 하나 이상의 결과들을 모으는 단계는 상기 수집하는 단계로부터의 상기 하나 이상의 결과들의 적어도 일부를 잔여 벡터에 저장하는 단계를 포함하는 데이터 프로세싱 방법.
  8. 제 7 항에 있어서,
    상기 하나 이상의 결과들을 모으는 단계는 제 1 사이클에서 상기 잔여 벡터의 적어도 일부와, 제 2 사이클에서 상기 수집하는 단계로부터의 상기 하나 이상의 결과들의 적어도 일부를 결합하는 단계를 더 포함하는 데이터 프로세싱 방법.
  9. 제 1 항에 있어서,
    상기 제 1 데이터는 상기 제 1 키들 중 대응하는 키들과 관련된 행들을 나타내는 인덱스들을 포함하는 데이터 프로세싱 방법.
  10. 제 1 항에 있어서,
    상기 비교하는 단계, 상기 수집하는 단계, 및 상기 모으는 단계는 병합 조인(merge join) 동작을 수행하는 데이터 프로세싱 방법.
  11. 병합 코어를 포함하는 장치에 있어서,
    제 1 데이터와 관련된 제 1 키들의 스트림을 수신하고, 제 2 데이터와 관련된 제 2 키들의 스트림을 수신하고, 그리고 상기 제 1 키들의 배치 및 상기 제 2 키들의 배치를 병렬로 비교하는 병렬 비교 회로;
    상기 병렬 비교 회로로부터의 하나 이상의 결과들을 수집하는 수집 회로; 및
    상기 수집 회로로부터의 하나 이상의 결과들을 모으는 개더링(gathering) 회로를 포함하는 장치.
  12. 제 11 항에 있어서,
    메모리로부터 상기 제 1 키들의 스트림을 읽는 제 1 읽기 장치; 및
    상기 메모리로부터 상기 제 2 키들의 스트림을 읽는 제 2 읽기 장치를 더 포함하는 장치.
  13. 제 12 항에 있어서,
    상기 제 1 읽기 장치는 상기 메모리로부터 상기 제 1 데이터의 스트림을 더 읽고, 상기 제 2 읽기 장치는 상기 메모리로부터 상기 제 2 데이터의 스트림을 더 읽는 장치.
  14. 제 13 항에 있어서,
    상기 개더링 회로로부터 상기 메모리로 출력 키들의 스트림을 기록하는 쓰기 장치를 더 포함하는 장치.
  15. 제 14 항에 있어서,
    상기 제 1 읽기 장치는 상기 메모리로부터 상기 제 1 데이터의 스트림을 더 읽고, 상기 제 2 읽기 장치는 상기 메모리로부터 상기 제 2 데이터의 스트림을 더 읽고, 그리고 상기 쓰기 장치는 상기 개더링 회로로부터 상기 메모리로 출력 키들의 상기 스트림과 관련된 출력 데이터의 스트림을 더 기록하는 장치.
  16. 제 11 항에 있어서,
    상기 병렬 비교 회로, 상기 수집 회로, 및 상기 개더링 회로는 가속기 장치 상에 통합되는 장치.
  17. 제 16 항에 있어서,
    상기 가속기 장치는 FPGA(field programmable gate array)를 포함하는 장치.
  18. 스토리지 장치;
    상기 스토리지 장치로부터 데이터셋을 수신하는 메모리; 및
    상기 스토리지 장치에 연결되는 가속기 장치를 포함하되,
    상기 가속기 장치는:
    상기 메모리로부터 상기 데이터셋의 제 1 데이터와 관련된 제 1 키들의 스트림을 수신하고, 상기 메모리로부터 상기 데이터셋의 제 2 데이터와 관련된 제 2 키들의 스트림을 수신하고, 그리고 상기 제 1 키들의 배치 및 상기 제 2 키들의 배치를 병렬로 비교하는 병렬 비교 회로;
    상기 병렬 비교 회로로부터 하나 이상의 결과들을 수집하는 수집 회로; 및
    상기 수집 회로로부터 하나 이상의 결과들을 모으는 개더링(gathering) 회로를 포함하는 시스템.
  19. 제 18 항에 있어서,
    상기 스토리지 장치 및 상기 가속기 장치 사이에 포인트-투-포인트 연결을 더 포함하는 시스템.
  20. 제 19 항에 있어서,
    상기 메모리 및 상기 가속기 장치는 상기 스토리지 장치 상에 통합되는 시스템.
KR1020210190218A 2020-12-28 2021-12-28 병합 조인 동작들의 가속을 위한 시스템, 방법, 및 장치 KR20220094180A (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US202063131307P 2020-12-28 2020-12-28
US63/131,307 2020-12-28
US17/174,350 2021-02-11
US17/174,350 US20220207040A1 (en) 2020-12-28 2021-02-11 Systems, methods, and devices for acceleration of merge join operations

Publications (1)

Publication Number Publication Date
KR20220094180A true KR20220094180A (ko) 2022-07-05

Family

ID=82118701

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020210190218A KR20220094180A (ko) 2020-12-28 2021-12-28 병합 조인 동작들의 가속을 위한 시스템, 방법, 및 장치

Country Status (4)

Country Link
US (1) US20220207040A1 (ko)
KR (1) KR20220094180A (ko)
CN (1) CN114696995A (ko)
TW (1) TW202230176A (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11599529B2 (en) * 2021-08-02 2023-03-07 Keygen Data Llc Method of batch processing data that is stored in multiple tables as a plurality of rows of data by reading out and batch processing data from only a portion of a row from each of tables that is to be used in batch processing logic

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6732228B1 (en) * 2001-07-19 2004-05-04 Network Elements, Inc. Multi-protocol data classification using on-chip CAM
JP5480395B2 (ja) * 2010-10-06 2014-04-23 株式会社日立製作所 ストリームデータ処理方法及び装置
US9674249B1 (en) * 2013-03-11 2017-06-06 DataTorrent, Inc. Distributed streaming platform for real-time applications
JP6442951B2 (ja) * 2014-09-25 2018-12-26 富士通株式会社 データ処理方法、データ処理プログラム及びデータ処理装置
US10002154B1 (en) * 2017-08-24 2018-06-19 Illumon Llc Computer data system data source having an update propagation graph with feedback cyclicality
US11321288B2 (en) * 2020-08-05 2022-05-03 Ocient Holdings LLC Record deduplication in database systems
US11675757B2 (en) * 2020-10-29 2023-06-13 Ocient Holdings LLC Maintaining row durability data in database systems

Also Published As

Publication number Publication date
TW202230176A (zh) 2022-08-01
US20220207040A1 (en) 2022-06-30
CN114696995A (zh) 2022-07-01

Similar Documents

Publication Publication Date Title
Koo et al. Summarizer: trading communication with computing near storage
Fang et al. In-memory database acceleration on FPGAs: a survey
US10606787B2 (en) Methods and apparatuses for providing data received by a state machine engine
Stalzer FlashBlades: System Architecture and Applications
Jun et al. Scalable multi-access flash store for big data analytics
US11847395B2 (en) Executing a neural network graph using a non-homogenous set of reconfigurable processors
CN114647635B (zh) 数据处理系统
Qiao et al. FANS: FPGA-accelerated near-storage sorting
Jun et al. Bluedbm: Distributed flash storage for big data analytics
Sun et al. FPGA-based compaction engine for accelerating LSM-tree key-value stores
TW202221514A (zh) 用於處理資料的方法及系統、儲存節點、以及用於對資料進行分區的方法
KR20220094180A (ko) 병합 조인 동작들의 가속을 위한 시스템, 방법, 및 장치
Salamat et al. NASCENT2: Generic near-storage sort accelerator for data analytics on SmartSSD
Yoshimi et al. An FPGA-based tightly coupled accelerator for data-intensive applications
Kumaigorodski et al. Fast CSV loading using GPUs and RDMA for in-memory data processing
Kobayashi et al. A high performance fpga-based sorting accelerator with a data compression mechanism
CN110554886B (zh) 数据拆分结构、方法及其片上实现
Contini et al. Enabling Reconfigurable HPC through MPI-based Inter-FPGA Communication
Zou et al. PSACS: Highly-Parallel Shuffle Accelerator on Computational Storage.
Petrut et al. Configurable fpga architecture for hardware-software merge sorting
Dann et al. GraphScale: Scalable Processing on FPGAs for HBM and Large Graphs
Qiao Customized Computing: Acceleration of Big-Data Applications
KR102593034B1 (ko) 다차원 데이터베이스를 위한 스토리지내 데이터 재구성 가속기
Nie An FPGA-based smart database storage engine
Istvan Building Distributed Storage with Specialized Hardware