KR20220054220A - 탑케이 연산을 위한 방법 및 시스템 - Google Patents

탑케이 연산을 위한 방법 및 시스템 Download PDF

Info

Publication number
KR20220054220A
KR20220054220A KR1020210141835A KR20210141835A KR20220054220A KR 20220054220 A KR20220054220 A KR 20220054220A KR 1020210141835 A KR1020210141835 A KR 1020210141835A KR 20210141835 A KR20210141835 A KR 20210141835A KR 20220054220 A KR20220054220 A KR 20220054220A
Authority
KR
South Korea
Prior art keywords
register
elements
vector data
value
subset
Prior art date
Application number
KR1020210141835A
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 KR20220054220A publication Critical patent/KR20220054220A/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/24Sorting, i.e. extracting data from one or more carriers, rearranging the data in numerical or other ordered sequence, and rerecording the sorted data on the original carrier or on a different carrier or set of carriers sorting methods in general
    • 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/30098Register arrangements
    • 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/2457Query processing with adaptation to user needs
    • G06F16/24578Query processing with adaptation to user needs using ranking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/30Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
    • G06F16/33Querying
    • G06F16/3331Query processing
    • G06F16/334Query execution
    • G06F16/3347Query execution using vector based model
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/01Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising
    • 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/02Comparing digital values
    • 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/76Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data
    • 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/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • 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/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Mathematical Optimization (AREA)
  • Computer Hardware Design (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Pure & Applied Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Computational Linguistics (AREA)
  • Mathematical Physics (AREA)
  • Complex Calculations (AREA)

Abstract

본 발명의 방법은 벡터 데이터의 가장 높은 K 요소를 정렬하기 위해 TopK 명령을 수신하는 단계를 포함한다. 벡터 데이터의 제 1 K 요소들은 정렬되어 제 1 레지스터에 저장된다. 벡터 데이터의 다른 요소가 판독되어 상기 다른 요소가 제 1 K 요소들의 값들의 범위보다 크거나 상기 범위 내에 있는지 여부가 결정된다. 상기 다른 요소가 상기 값들의 범위 내에 있는 값을 갖는 경우, 제 1 K 요소들 내에서 상기 다른 요소의 위치가 결정된다. 제 1 K 요소들 중 상기 다른 요소보다 작은 요소 서브세트는, 제 1 K 요소들 내에서 상기 다른 요소의 위치를 결정한 후에 시프트 다운된다. 시프팅 이후, 결정된 위치에 상기 다른 요소가 삽입된다. 벡터 데이터의 나머지 각 요소에 대해 프로세스가 반복된다.

Description

탑케이 연산을 위한 방법 및 시스템{A METHOD AND SYSTEM FOR TOPK OPERATION}
관련 출원에 대한 상호 참조
본 출원은 2020년 10월 23일자로 미국에 출원된 미국 가출원(출원번호 63/105,140)의 우선권을 주장하며, 상기 미국 가출원은 본 발명에 대한 참조로서 본 명세서에 그 전체 내용이 통합된다.
전자 기기는 일상 생활의 중요한 부분이 되었다. 많은 전자 어플리케이션은 탑케이(또는 'TopK'라 함) 연산을 이용한 결과 랭킹(ranking of results)을 사용한다. 예를 들어, 머신 러닝(ML)의 특정 어플리케이션에서 TopK는 예컨대, 수천 개의 클래스들 중에서 이미지를 분류하는 것과 같이, 데이터 엔트리들의 대규모 세트 중에서 가장 높은 확률을 가진 상위(top) K개의 인덱스들 또는 엔트리들을 식별하는데 사용된다. 유사하게, TopK 연산은, 관계형(relational) 데이터베이스, 문서 및 멀티미디어 데이터베이스 등에서 애드-혹 검색 및 회수(ad-hoc search and retrieval)와 같은 다른 어플리케이션들에서 공통 연산자가 되었다.
일반적으로 TopK를 수행하기 위해, 벡터의 요소들을 서로 비교하여 정렬된 순서대로 가장 큰 K 값들을 식별하고 그리고 가장 큰 K 값들 각각과 관련된 인덱스 위치들도 동시에 추적된다. 머신 러닝(ML) 어플리케이션의 증가 뿐만 아니라 호환되는 데이터의 양이 증가함에 따라, 프로세싱되는 데이터의 양이 최근 몇 년 동안 상당히 증가하였다. 정렬된 순서대로 가장 큰 K 값들을 식별하기 위해 벡터의 요소들을 비교하는 것은 작은 벡터들의 경우 용이할 수도 있지만, 상위 K개 요소들에도 없는 벡터의 요소들을 정렬할 때 많은 양의 계산 능력이 낭비되기 때문에, 더 큰 벡터 길이(특히 데이터 양의 증가를 감안할 때)에 대해서는 계산 비용이 많이 소요된다. 기존의 다른 방법들은, 주어진 벡터 내에서 최대값을 순차적으로 식별하고 그리고 상위 K 값들이 정렬될 때까지 다음 최대값에 대해 이를 반복한다. 불행하게도, 정렬된 방식으로 상위 K 값들을 획득하기 위해 최대값들을 순차적으로 식별하는 것은, 소정의 명령들을 여러 번 반복해야만 하며(예를 들어, 벡터 요소들을 여러 번 판독하고, 비교 명령들을 여러 번 수행하는 등), 결과적으로 계산 효율성을 저하시킨다.
본 발명의 양상들은 첨부된 도면들과 함께 읽혀질 때 다음의 상세한 설명으로부터 가장 잘 이해될 것이다. 해당 산업계의 표준 관행에 따라 다양한 피처들이 축척에 맞게 그려지지 않는다는 점에 유의해야 한다. 사실, 다양한 피처들의 치수는 논의의 명확성을 위해 임의로 증가 또는 감소될 수 있다.
도 1은 본 실시예의 일 양상에 따른 TopK 연산을 수행하도록 구성된 하드웨어 기반 시스템의 예시적인 도면이다.
도 2a 내지 도 2d는 본 실시예의 일 양상에 따른 TopK 연산을 위한 다양한 하위 연산들을 수행하도록 구성된 하드웨어 기반 시스템의 예시적인 도면들이다.
도 3은 본 실시예의 일 양상에 따른 TopK 연산을 수행하기 위한 흐름도이다.
다음의 개시는 본 발명의 주제의 다양한 피처들을 구현하기 위한 많은 다른 실시예들 또는 일례들을 제공한다. 본 개시를 단순화하기 위해 컴포넌트들 및 배열들의 특정 일례들이 아래에 설명된다. 물론 이는 예시에 불과하며 제한하려는 의도가 아니다. 또한, 본 개시는 다양한 일례들에서 참조 번호들 및/또는 문자들을 반복할 수 있다. 이러한 반복은 단순함과 명료함을 위한 것이며, 그 자체로는 논의된 다양한 실시예들 및/또는 구성들 간의 관계를 나타내지 않는다.
다양한 실시예들을 상세히 설명하기에 앞서, 이러한 실시예의 요소들이 달라질 수 있으므로, 상기 실시예들은 제한적인 것이 아님을 이해해야한다. 마찬가지로 여기에 설명 및/또는 예시된 특정 실시예는 특정 실시예로부터 쉽게 분리될 수 있고 선택적으로는 여러 다른 실시예 중 임의의 것과 결합되거나 또는 여기에 설명된 임의의 다른 여러 실시예들의 요소들을 대체할 수 있는 요소들을 갖는다는 것을 이해해야 한다. 또한, 본 명세서에서 사용된 용어는 소정의 개념을 설명하기 위해 사용된 것으로, 상기 용어는 한정하려는 의도가 아님을 이해해야 한다. 달리 정의되지 않는 한, 여기에서 사용되는 모든 기술 용어 및 과학 용어는 실시예가 속하는 기술 분야에서 일반적으로 이해되는 것과 동일한 의미를 갖는다.
논의된 바와 같이, TopK 연산은 머신 러닝(ML) 어플리케이션들과 같은 다양한 어플리케이션들에서 결과들을 랭킹하는데 널리 이용되고 있다. 불행하게도, TopK 연산은 불필요한 메모리 사용, 과도한 프로세싱 파워 등과 같이 비효율적이고 낭비적인 방식으로 전통적으로 구현되어 왔다. 따라서, TopK 연산을 수행하는데 사용되는 예컨대, 메모리, 프로세싱 파워 등과 같은 컴퓨팅 리소스의 양을 감소시킬 필요성이 발생했다. 더욱이, 가능한한 빨리 TopK 연산을 수행할 필요가 생겼다. 본 명세서에 제시된 일부 실시예는 효율적인 방식으로 TopK 연산을 수행하기 위하여, ML 하드웨어 내의 산술 논리 유닛(ALU) 및 레지스터들(예를 들어, 레지스터 깊이들)을 활용한다. 다음을 유의해야 하는바, 일부 실시예에서, 작은 K의 경우(레지스터 및 ALU의 상대적 사이즈에 따라 다름), 벡터를 통한 단일 경로로 충분할 수 있는 반면, 큰 K의 경우 데이터 프로세싱의 중간 스테이지들이 온-칩 메모리들에 저장되는 동안(여러 번의 읽기(또는 판독)/쓰기가 발생할 수 있음) 오리지널 벡터가 저장된 메모리로부터 벡터가 한번 판독된다.
일반적으로, TopK 연산은 가장 큰 데이터를 갖는 벡터의 상위 K개의 인덱스 위치들을 식별한다. 설명을 위한 목적으로, 벡터 데이터는 V = [100, 2, 101, 53, 33, 53, 67, 94]일 수 있으며 그리고 8개의 요소들을 가질 수 있다. K=4에 대한 TopK 연산은 가장 큰 4개 값들에 대한 인덱스들(예시적인 본 실시예에서 인덱스는 0부터 시작하지만, 다른 실시예에서 인덱스는 1부터 시작할 수 있음)을 식별한다. 즉, 인덱스 2는 요소 101에 해당하고, 인덱스 0은 요소 100에 해당하고, 인덱스 7은 요소 94에 해당하고, 인덱스 6은 요소 67에 해당한다. 따라서, K = 4인 TopK 연산의 결과는 [2, 0, 7, 6] 이다. 만일, 벡터 데이터의 2개의 요소들이 동일한 값을 갖는다면(예컨대, 요소 53에 대한 인덱스 3 및 인덱스 5), 상기 요소의 첫 번째로 출현되는 인덱스(즉, 인덱스 3)이 취해진 다음, 후속 요소(즉, 인덱스 5)가 뒤따른다.
제안된 접근법은 ML 하드웨어 기반 시스템의 구조를 활용 및 이용하는바, 일부 실시예에서 이는 데이터의 이동량을 제한하기 위해 효율적인 방식으로 프로세싱 요소 레지스터들을 이용하는 명령 세트 아키텍처(ISA: instruction set architecture)로 구현된다. 일부 실시예에 따르면, TopK 연산을 수행할 때 상위 K개 값들을 추적하는데 레지스터 폭이 이용된다. 설명을 위해, 레지스터의 폭은 8이고 K도 8이라고 가정한다. 하지만, 레지스터 폭은 임의의 폭일 수 있고 K의 값은 임의의 값일 수 있음을 이해해야 한다. 이와 같이, 8 이라는 레지스터 폭 및 8 이라는 K 값이 예시적인 목적으로 사용되며, 본 발명의 범위를 제한하는 것으로 해석되어서는 안된다. 벡터 데이터는 임의의 개수의 요소들, 예를 들어 1000개 요소, 1024개 요소, 256개 요소 등을 가질 수 있다. 일반적으로 K 값은 레지스터의 폭 보다 작거나 같은 것으로 이해된다.
일부 실시예에서, 벡터 데이터의 처음 K개의 요소들이 판독, 정렬 및 레지스터에 저장된다. 벡터 데이터의 새로운 요소를 판독할 때, 새로 판독된 요소가 레지스터에 정렬 및 저장된 처음 K개의 요소들의 범위 또는 그 이상의 값을 갖지 않으면, 다음 요소가 판독되고 그리고 프로세스가 반복된다. 하지만, 새로 판독된 요소가 레지스터에 정렬 및 저장된 처음 K개의 요소들의 범위 내의 값을 갖는다면, 판독된 요소 보다 작은 레지스터 내의 요소들이 이동 및 시프트되어, 판독된 새로운 요소를 위한 공간을 만들어준다. 판독된 요소 보다 크거나 같은 레지스터 내의 요소들도 또한 이동되며 그리고 새로게 판독된 요소가 비어있는 위치에 삽입된다. 이와 같이, 레지스터는 새로운 상위 K 요소들로 업데이트된다. 벡터 데이터의 모든 요소들이 프로세싱되고 그리고 최종 상위 K 요소들이 얻어질 때까지, 상기 프로세스가 반복된다는 것이 이해된다. 벡터 데이터의 각 요소와 연관된 인덱스는 프로세스 전반에 걸쳐 추적될 수 있다는 것이 이해된다.
도 1은 본 실시예의 일 양상에 따라 TopK 연산을 수행하도록 구성된 하드웨어 기반 시스템(100)의 예시적인 도면이다. 비록 도 1은 컴포넌트들을 기능적으로 분리된 것으로 묘사하지만 이러한 묘사는 단지 설명을 위한 것이다. 도 1에 도시된 컴포넌트들은 임의로 결합되거나 별도의 소프트웨어, 펌웨어 및/또는 하드웨어 구성요소로 분할될 수 있음이 자명할 것이다. 또한, 그러한 컴포넌트들이 어떻게 결합되거나 분할되는지에 관계없이 동일한 호스트 또는 다중 호스트에서 실행될 수 있고, 다중 호스트가 하나 이상의 네트워크에 의해 결합될 수 있음이 또한 자명할 것이다. 소프트웨어 명령이 실행될 때, 하나 이상의 하드웨어 컴포넌트는 TopK 연산을 수행하기 위한 특수 목적의 하드웨어 컴포넌트가 된다.
도 1의 일례에서, 데이터 벡터는 N개의 요소들을 포함하고 레지스터(110)에 저장된다. 비제한적인 일례에서, 프로세서(120)에 의해 TopK 명령(102)이 수신된다. 프로세서(120)는 처음 K개의 요소들을 레지스터(110)로부터 페치(fetch)한다(122). 다음을 유의해야 하는바, 처음 K개의 요소들은 (도시된 바와 같이) 순차적일 수 있으며 또는 특정 패턴, 예를 들어, 스트라이드(strides)에 기초하여 페치될 수 있다. 이러한 비제한적인 일례에서, K는 8이고 그리고 레지스터(110)의 처음 K개의 요소들에 대응하는 m1, m2, …, m8이 프로세서(120)에 의해 판독 및 정렬된다. 프로세서(120)는 레지스터(110)에 저장되도록 상기 정렬된 처음 K개의 요소들을 통신한다. 레지스터(130)는 K 보다 큰 폭, 예를 들어, 8, 9, 10, …, 16 등을 가질 수 있다는 것이 이해된다. 이러한 비제한적인 일례에서, m3가 가장 높은 값을 가지며, 그 다음은 각각 m1, m8, m2, m5, m7, m4, 및 m6 순서이다. 이와 같이, m3, m1, m8, m2, m5, m7, m4, 및 m6 이 레지스터(130)에 저장된다. 각각의 요소와 연관된 인덱스가 또한 추적될 수 있다는 것이 이해된다. 즉, m3에 해당하는 인덱스 i3이 추적되며 다른 요소들도 마찬가지이다. 인덱스는 예를 들어, 레지스터에서 추적될 수 있다.
다음을 유의해야 하는바, 벡터 데이터의 다음 요소 즉, m9 가 판독될 수 있다. 일단 판독되면, 프로세서(120)는 새로운 요소, 즉 m9가 레지스터(130)에 이미 저장된 값들의 범위 내의 값 또는 그 이상의 값을 갖는지를 결정할 수 있다. 즉, m9가 가장 높은 값을 갖는 요소인 m3와 가장 낮은 값을 갖는 요소인 m6 사이의 값을 갖는지 또는 이 보다 높은 값을 갖는지를 결정할 수 있다. 예시적인 목적으로, m9는 m6보다 작은 값을 갖는 것으로 결정된다. 따라서, 벡터 데이터의 요소 m9에 대해 더 이상의 프로세싱이 수행되지 않는다.
레지스터(110)에 저장된 벡터 데이터로부터 다음 요소, 즉, m10이 프로세서(120)에 의해 판독된다. m9과 유사하게, 프로세서(120)는 새롭게 판독된 요소 m10이, 레지스터(130)에 저장된 요소들에 대응하는 값들의 범위 내의 값 또는 이 보다 큰 값을 갖는지를 판별한다(즉, 본 일례에서는 가장 높은 값 요소(m3)와 가장 낮은 값 요소(m6) 사이).
비제한적인 일례에서, m10은 요소 m7보다는 크지만 요소 m5보다는 작은 것으로 결정된다. 이와 같이, 프로세서(120)는 m10이 삽입될 위치(126)를 식별한다. 가장 작은 값의 요소(즉, 본 일례에서 m6)는 더 이상 상위 K 요소에 속하지 않기 때문에 밖으로 시프트될 것이다. 일부 실시예에서, m7, m4 및 m6과 같은 요소들의 서브세트가 시프트된다. 따라서, m7 및 m4의 위치가 변경되는 동안 m6은 레지스터(130)에서 제거된다. 이에 따라, 요소 m10을 삽입하기 위한 빈 자리가 생성된다. m10이 삽입되면, 그것의 인덱스 i10도 추적될 수 있다. 이와 같이, 레지스터(130)는 레지스터(110)로부터 판독된 벡터 데이터의 처음 10개 요소들 중 업데이트된 상위 K개(이 예에서는 상위 8개)의 요소들을 포함한다. 모든 요소들이 판독되고 상위 K개의 요소들이 업데이트될 때까지, 레지스터(110)에 저장된 벡터 데이터의 나머지 요소 각각에 대해 프로세스가 반복된다. 모든 요소들이 판독 및 프로세싱되면, 상술한 바와 같이, 레지스터(130)는 벡터 데이터의 상위 K개의 요소들을 포함할 것이다.
상기 일례에서 예시된 바와 같이, 종래의 방법에 비하여, 데이터 이동 및 데이터 판독의 개수가 감소된다. 예를 들어, 레지스터(110)에 저장된 벡터 데이터의 요소들은 한번 판독된다. 중간 값들이 다른 레지스터들에 저장되고 필요에 따라 업데이트되어 업데이트된 상위 K개 요소들을 형성하므로, 리소스 사용량(예컨대, 프로세싱 파워, 메모리 사용량, 데이터 이동 등)이 감소한다.
도 2a 내지 도 2d는 본 실시예의 일 양상에 따른 TopK 연산을 위한 다양한 하위 연산들을 수행하도록 구성된 하드웨어 기반 시스템의 예시적인 도면이다. 구체적으로 도 2a를 참조하면, 도 1과 유사한 프로세스가 예시된다. 이 실시예에서, 레지스터(110)에 저장된 벡터 데이터로부터 판독되는 다음 요소가, 레지스터(130)에 저장된 요소들의 값들의 범위보다 크거나 그 범위 내에 있는지 여부를 결정하기 위한 구현예가 예시되지만, 본 발명의 범위를 제한하는 것으로 해석되어서는 안된다. 이러한 비제한적인 일례에서, 레지스터(110)에 저장된 벡터 데이터로부터 다음 요소 m9가 판독된다. 요소 m9는 레지스터(142)에 저장되고 그 인덱스는 예를 들어, 다른 레지스터에서 추적된다. 일부 실시예에서, 요소 m9는 레지스터의 각 요소로 브로드캐스트된다. 예를 들어, 레지스터(142)의 m9는 시프트되어 레지스터(143)에 저장될 수 있다. 레지스터(142, 143)는 논리적으로 함께 OR되고 그 결과는 레지스터(144)에 저장될 수 있다. 다음을 유의해야 하는바, 레지스터의 각 요소가 요소 m9를 포함할 때까지 프로세스가 반복된다. 예를 들어, 레지스터(144)의 요소들이 시프트되어 레지스터(143)에 저장된다. 레지스터들(143 및 144)은 논리적으로 함께 OR되며 그리고 그 결과는 레지스터(144)에 저장될 수 있다. m9가 레지스터(143)의 각 요소에 브로드캐스트될 때까지 프로세스가 반복된다. 즉, 레지스터(143)는 그것의 K 요소들 각각에 대해 m9를 포함한다. 프로세서(120)는 레지스터(143)의 요소를 레지스터(130)의 요소와 비교하는 비교 블록(210)을 포함할 수 있다. 비교 출력(212)은 비교의 결과를 출력한다. 본 일례에서, m9는 레지스터(130)의 가장 작은 요소(따라서 m6) 보다 작은 것으로 결정된다. 따라서 m9에 대해서는 더 이상의 프로세싱이 수행되지 않는다.
이제 도 2b를 참조하면, 레지스터(110)로부터의 벡터 데이터의 다음 요소(즉, m10)가 판독되고, 도 2a와 유사한 프로스세가 수행될 수 있다. 설명을 위해 그리고 도 1에서 논의된 바와 같이, m10은 요소 m3과 m6 사이의 값을 갖는다고 가정하자. 이와 같이, 레지스터(143)의 콘텐츠가 레지스터(130)의 콘텐츠와 비교될 때, m10이 레지스터(130)에 삽입되어야 하는지가 결정된다. 일부 실시예에서, 상기 비교가 제 1 레지스터의 한 요소가 제 2 레지스터의 다른 요소보다 크고 그 이후에 제 1 레지스터의 후속 요소가 제 2 레지스터의 후속 요소보다 작다라는 2개의 비교를 나타낼 때, m10이 레지스터(130)에 삽입될 위치가 결정될 수 있다. 본 일례에서는 m3>m10, m1>m10, m8>m10, m2>m10, m5>m10 이지만 m7<m10 이다. 이와 같이 m10이 삽입될 위치는 m7 이후에 오픈되는 빈 위치로 결정되고, 그리고 후속 요소들은 오른쪽으로 시프트된다.
이제 도 2c를 참조하면, 요소가 상위 K개의 요소들에 삽입되어야 한다고 결정된 후, 레지스터(130)로부터의 요소들의 서브세트(이 예에서는 m3, m1, m8, m2 및 m5)가 레지스터(146)로 이동되고 그리고 레지스터(130)로부터의 요소들의 다른 서브세트(이 예에서는 m7, m4 및 m6)는 레지스터(145)로 이동된다. 이동될 서브세트는 새로운 요소(이 예에서는 m10)가 삽입될 위치에 기초하여 결정됨에 유의하자. 된다. 이러한 예시적인 일례에서, m10보다 작은 요소들의 서브세트는 레지스터(145)로 이동되는 반면, m10보다 크거나 같은 요소들은 레지스터(146)로 이동된다. 요소들의 인덱스들도 추적될 수 있다(예컨대, 다른 레지스터를 사용하여). 서브세트 m7, m4, 및 m6이 레지스터(145)로 이동되면, 상위 위치들은 0으로 채워진다. 레지스터(145)의 내용은 아래로 시프트되고(shift down), m6이 드롭되는 반면에, 요소 m7 및 m4의 위치가 변경된다(하나 더 낮은 순위 비트를 가짐). 이러한 시프트가 발생하면, m7보다 큰 요소 m10이, m7이 있던 위치에 삽입될 수 있다(즉, 3 번째로 낮은 순위의 요소). m10보다 작은 요소들에 해당하는 레지스터(146)의 하위 위치들은 0으로 채워진다.
일부 실시예에서, 레지스터들(146 및 145)은 더 높은 순위의 서브세트 요소들 및 더 낮은 순위의 서브세트 요소들을 각각 포함한다. 따라서, 병합되면, 그 결과는 업데이트된 상위 K개 요소들을 포함할 것이다. 프로세서(120)는 레지스터(146, 145) 사이의 병합(220) 연산을 수행하고 그 결과를 레지스터(130)에 저장할 수 있다. 일부 실시예에서, 병합 연산은 2개의 레지스터들 사이의 논리적 OR 연산일 수 있다. 이와 같이, 이제, 레지스터(130)는 업데이트된 상위 K 요소를 포함한다. 이러한 프로세스는, 모든 요소들이 이와 같이 프로세싱되고 그리고 상위 K 요소들이 레지스터(130)에서 업데이트될 때까지, 레지스터(110)에 저장된 벡터 데이터의 나머지 각 요소에 대해 반복된다.
이제 도 2d를 참조하면, m10을 삽입할 위치를 식별하기 위한 다른 구현예가 예시되어 있다. 이 예에서, 레지스터(147)가 사용되며, 여기서 m10보다 작은 요소들에 대응하는 요소들은 1로 채워지고 다른 요소들은 0으로 채워진다. 레지스터(147)의 값은 레지스터(148)에서 반전된다. 레지스터(147)의 요소는 예로서 1 만큼 시프트되어 레지스터(149)에 저장된다. 이어서, 1의 값이 레지스터(149)의 최상위 비트 위치(most significant bit position)에 삽입되고, 그 결과가 레지스터(148)에 저장된다. 일부 실시예에서, 상기 결과는 레지스터(149)에 대신 저장될 수 있다는 것이 이해된다. 일 실시예에 따르면, 레지스터(147 및 148)는 230에서 함께 논리적으로 AND되고 그리고 결과 [0, 0, 0, 0, 0, 1, 0, 0]는 레지스터(149)에 저장된다. 값 1에 해당하는 위치는 m10 요소가 삽입될 위치이다. 이와 같이, 다른 요소들은 0인 레지스터(149)에 의해 식별되는 것과 같은 위치에서, m10이 레지스터(152)에 삽입된다. 레지스터들(152 및 145)은, 2개의 더 작은 요소들인 m7 및 m4가 후속되는 적절한 위치에 m10 요소를 삽입하기 위하여, 240에서 함께 OR 연산된다. 그 결과는 레지스터(145)에 저장될 수 있으며, 레지스터(145)는 레지스터(130)의 상위 K 값들을 업데이트하기 위해 레지스터(146)와의 병합 연산에서 후속적으로 사용될 수 있음이 이해된다. 각 요소와 연관된 인덱스가 또한 추적될 수 있다는 것이 이해된다.
도 3은 본 실시예의 일 양상에 따른 TopK 연산을 수행하기 위한 흐름도의 일례를 도시한다. 일부 실시예에서, 벡터 요소의 값 및/또는 인덱스가 추적될 수 있다는 것이 이해된다. 아래에 설명된 프로세스 단계들은 임의의 순서로(예: 병렬 처리 및 파이프라이닝 명령으로) 수행될 수 있으며, 여기에 제시된 특정 순서는 예시를 위한 것이며 실시예들의 범위를 제한하는 것으로 해석되어서는 안된다. 단계 310에서, 도 1 및 도 2a 내지 도 2b에 설명된 바와 같이, TopK 명령이 수신된다. TopK 명령은 도 1-2D에서 전술한 바와 같이 n개의 요소들을 갖는 벡터 데이터와 연관될 수 있다. 단계 320에서, 도 1 내지 도 2d에서 논의된 바와 같이, 벡터 데이터의 처음 K개의 요소들이 정렬되고 하나 이상의 레지스터에 저장된다. 단계 330에서, 전술한 바와 같이 벡터 데이터의 다른 요소가 판독된다. 단계 340에서, 도 1-2b를 참조하여 전술한 바와 같이, 상기 다른 요소가 처음 K개의 요소들의 값 보다 큰 값을 가지거나 또는 처음 K개의 요소들의 값들의 범위 내의 값을 갖는지가 결정된다. 즉, 다른 요소가 처음 K개의 요소들의 가장 작은 값보다 더 작은 값을 갖는지 아닌지가 판별된다. 단계 350에서, 상기 다른 요소가 처음 K개의 요소들 중 가장 작은 값보다 큰 값을 갖는 것으로 결정되면, 도 1 및 도 2c-2d에 설명된 바와 같이, 처음 K개의 요소들에 대한 상기 다른 요소의 위치가 결정된다. 즉, 상기 다른 요소를 어디에 삽입할지가 결정된다. 단계 360에서, 처음 K개의 요소들 중 상기 다른 요소보다 작은 요소들의 서브세트가 1 만큼 시프트 다운되며, 이는 도 1 및 도 2c-2d를 참조하여 서술한 바와 같이, 상기 다른 요소를 위한 비어있는(vacant) 위치를 생성하기 위한 것이다. 단계 370에서, 도 1 및 도 2c-2d에 기술된 바와 같이, 업데이트된 처음 K개의 요소들을 형성하기 위해, 요소들의 서브세트가 시프트 다운된 후, 상기 다른 요소가 결정된 위치에 삽입된다. 단계 380에서, 도 1-2d에 기술된 바와 같이 벡터 데이터에 대한 상위 K개의 요소들을 형성하기 위해, 단계 330 내지 단계 370가 벡터 데이터의 각각의 나머지 요소에 대해 반복된다는 것이 이해된다.
청구된 본 발명의 주제의 다양한 실시예들에 대한 전술한 설명은 예시 및 설명의 목적으로 제공되었다. 이것은 개시된 정확한 형태들만으로 청구된 본 발명의 주제를 속속들이 규명한다던가 제한하려는 의도가 아니다. 많은 수정예들 및 변형예들이 당업자에게 명백할 것이다. 실시예들은 본 발명의 원리와 그 실제 적용을 가장 잘 설명하기 위해 선택 및 설명되었으므로, 관련 기술 분야의 다른 기술자가 청구된 주제, 다양한 실시예들 및 고려되는 특정 용도에 적합한 다양한 수정예들을 이해할 수 있게 한다.

Claims (22)

  1. 컴퓨터로 구현되는 방법으로서,
    (a) n개의 요소들을 갖는 벡터 데이터의 가장 높은 K개의 요소들을 정렬하기 위한 TopK 명령을 수신하는 단계;
    (b) 벡터 데이터의 처음 K개의 요소들을 제 1 레지스터에 검색, 정렬 및 저장하는 단계;
    (c) 벡터 데이터의 다른 요소를 판독하는 단계;
    (d) 벡터 데이터의 상기 다른 요소가 상기 처음 K개의 요소들의 값들의 범위보다 크거나 같은 값을 갖는지 여부를 결정하는 단계;
    (e) 상기 다른 요소가 상기 값들의 범위보다 크거나 같은 값을 갖는 경우, 제 1 레지스터의 처음 K개의 요소들 내에서의 상기 다른 요소의 위치를 결정하는 단계;
    (f) 처음 K개의 요소들 내에서의 상기 다른 요소의 위치를 결정한 이후, 처음 K개의 요소들 중 상기 다른 요소보다 작은 요소들의 서브세트를 아래로(down)시프트하는 단계;
    (g) 업데이트된 처음 K개의 요소들을 형성하도록 상기 시프트 이후의 비어있는 위치인 결정된 위치에 상기 다른 요소를 삽입하는 단계; 및
    (h) 벡터 데이터의 각 요소가 프로세싱될 때까지 벡터 데이터의 나머지 각각의 요소에 대해 단계 (c), (d), (e), (f) 및 (g)를 반복하는 단계
    를 포함하는 것을 특징으로 하는 방법.
  2. 제1항에 있어서,
    상기 단계 (d)는,
    상기 벡터 데이터의 다른 요소를 상기 제 1 레지스터와 동일한 크기를 갖는 제 2 레지스터 내의 각 위치에 브로드캐스팅하는 단계; 및
    제 2 레지스터 내의 상기 다른 요소와 제 1 레지스터 내의 요소들을 비교하는 단계를 포함하는 것을 특징으로 하는 방법.
  3. 제1항에 있어서,
    상기 단계 (e) 이후 및 상기 단계 (f) 이전에 상기 방법은,
    요소들의 서브세트를 제 1 레지스터로부터 상기 제 1 레지스터와 동일한 크기를 갖는 제 3 레지스터로 이동시키는 단계를 더 포함하고,
    제 3 레지스터의 나머지 위치들에 0 값이 저장되고, 상기 단계 f)의 시프트는 제 3 레지스터에 대해 수행되는 것을 특징으로 하는 방법.
  4. 제3항에 있어서,
    비제로 값을 갖는 제 3 레지스터의 요소들을 시프트하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  5. 제1항에 있어서,
    상기 단계 (e) 이후에 상기 방법은,
    상기 요소들의 서브세트 이외의 요소들을 제 4 레지스터로 이동시키는 단계를 더 포함하며, 상기 제 4 레지스터는 제 1 레지스터와 동일한 크기를 가지며, 제 4 레지스터의 나머지 위치들에 0 값이 저장되는 것을 특징으로 하는 방법.
  6. 제1항에 있어서,
    상기 요소들의 서브세트를 제 1 레지스터로부터 상기 제 1 레지스터와 동일한 크기를 갖는 제 3 레지스터로 이동시키는 단계, 상기 제 3 레지스터의 나머지 위치들에 0 값이 저장되며;
    비제로 값을 갖는 제 3 레지스터의 요소들을 1만큼 시프트하는 단계;
    상기 요소들의 서브세트 이외의 요소들을 제 1 레지스터와 동일한 크기를 갖는 제 4 레지스터로 이동시키는 단계, 상기 제 4 레지스터의 나머지 위치들에 0 값이 저장되며; 그리고
    업데이트된 처음 K개의 요소들을 형성하도록, 상기 제 3 레지스터와 제 4 레지스터 사이의 논리 OR 연산을 수행하는 단계
    를 더 포함하는 것을 특징으로 하는 방법.
  7. 제6항에 있어서,
    상기 업데이트된 처음 K개의 요소들을 제 1 레지스터에 저장하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  8. 제1항에 있어서,
    벡터 데이터와 연관된 인덱스 위치를 추적하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  9. 제1항에 있어서,
    상기 단계 (e)는,
    상기 요소들의 서브세트의 각 요소의 위치에 대응하는 비트 값을 제 5 레지스터에서 어서팅하는 단계, 상기 제 5 레지스터는 제 1 레지스터와 동일한 크기를 가지며;
    상기 요소들의 서브세트 이외의 요소들의 위치에 대응하는 비트 값을 제 5 레지스터에서 디어서팅(de-asserting)하는 단계;
    상기 요소들의 서브세트 이외의 요소들의 위치에 대응하는 비트 값을 제 6 레지스터에서 어서팅하는 단계, 상기 제 6 레지스터는 제 1 레지스터와 동일한 크기를 가지며;
    제 6 레지스터 내의 요소들을 시프트하는 단계;
    어서팅된 비트 값을 제 6 레지스터의 최상위 비트 위치(most significant bit position)에 삽입하는 단계; 및
    제 5 레지스터와 제 6 레지스터 사이에서 논리적 AND 연산을 수행하는 단계
    를 포함하며,
    상기 어서팅된 비트 값은 상기 단계 (e)에서 상기 다른 요소의 위치를 식별하는 것을 특징으로 하는 방법.
  10. 제1항에 있어서,
    상기 단계 (d)는,
    상기 다른 요소의 값과 상기 처음 K개의 요소들 중 가장 작은 값을 비교하는 단계를 포함하는 것을 특징으로 하는 방법.
  11. 하드웨어 기반 시스템으로서,
    실행가능한 명령들을 수신하도록 구성된 프로세서, 상기 프로세서는 또한 TopK 명령을 수신하도록 구성되고, 상기 프로세서는 TopK 명령에 응답하여 n개의 요소들을 갖는 벡터 데이터의 처음 K개의 요소들을 판독하도록 구성되며; 그리고
    TopK 명령을 수행하기 위한 데이터를 저장하도록 구성된 하나 이상의 레지스터들을 포함하고, 벡터 데이터의 처음 K개의 요소들은 상기 하나 이상의 레지스터들에 정렬 및 저장되며,
    벡터 데이터의 각각의 요소에 대해 상기 프로세서는:
    (a) 벡터 데이터의 각각의 요소가 처음 K개의 요소들의 값들의 범위보다 크거나 같은 값을 갖는지 여부를 결정하고,
    (b) 각각의 요소가 상기 처음 K개의 요소들의 값들의 범위보다 크거나 같은 값을 갖는 경우, 처음 K개의 요소들에서 상기 각각의 요소의 위치를 결정하고,
    (c) 각각의 요소의 위치를 결정한 이후, 처음 K개의 요소들 중 상기 각각의 요소보다 작은 요소들의 서브세트를 아래로(down)시프트하고;
    (d) 업데이트된 처음 K개의 요소들을 형성하도록, 시프트 이후에 결정된 위치에 상기 각각의 요소를 삽입하며; 그리고
    (e) 벡터 데이터의 각각의 요소가 프로세싱될 때까지 벡터 데이터의 나머지 각각의 요소에 대해 (a), (b), (c) 및 (d)를 반복하도록 구성되는 것을 특징으로 하는 하드웨어 기반 시스템.
  12. 제11항에 있어서,
    상기 각각의 요소는 상기 하나 이상의 레지스터들 중 하나의 레지스터의 각각의 위치로 브로드캐스팅되고, 상기 하나의 레지스터는 상기 하나 이상의 레지스터들 중 처음 K개의 요소들을 저장하는 다른 하나의 레지스터와 비교되며, 상기 하나의 레지스터와 상기 다른 하나의 레지스터는 동일한 크기를 가지며, 상기 비교는 상기 벡터 데이터의 각각의 요소가 처음 K개의 요소들의 값들의 범위보다 크거나 같은 값을 갖는지를 결정하는 것을 특징으로 하는 하드웨어 기반 시스템.
  13. 제11항에 있어서,
    상기 (b) 이후 및 상기 (c) 이전에 상기 프로세서는 또한,
    요소들의 서브세트를 상기 하나 이상의 레지스터들 중 처음 K개의 요소들을 저장하는 하나의 레지스터로부터 상기 하나 이상의 레지스터들 중 제 2 레지스터로 이동시키도록 구성되며, 상기 제 2 레지스터는 제 1 레지스터와 같은 크기를 가지며, 제 2 레지스터의 나머지 위치들에는 0 값이 저장되고, 상기 (c)가 제 2 레지스터에 대해 수행되는 것을 특징으로 하는 하드웨어 기반 시스템.
  14. 제13항에 있어서,
    상기 프로세서는 또한, 비제로 값을 갖는 제 2 레지스터 내의 요소들을 시프트하도록 구성되는 것을 특징으로 하는 하드웨어 기반 시스템.
  15. 제11항에 있어서,
    상기 (b) 이후에 상기 프로세서는, 상기 요소들의 서브세트 이외의 요소들을 상기 하나 이상의 레지스터들 중 제 3 레지스터로 이동시키도록 구성되고, 제 3 레지스터는 처음 K개의 요소들을 저장하는 제 1 레지스터와 동일한 크기를 가지며, 제 3 레지스터의 나머지 위치들에는 0 값이 저장되는 것을 특징으로 하는 하드웨어 기반 시스템.
  16. 제11항에 있어서,
    상기 프로세서는 또한,
    하나 이상의 레지스터들 중 제 1 레지스터로부터 상기 제 1 레지스터와 동일한 크기를 갖는 제 3 레지스터로 상기 요소들의 서브세트를 이동시키고, 제 3 레지스터의 나머지 위치들에는 0 값이 저장되고;
    비제로 값을 갖는 상기 제 3 레지스터의 요소들을 1만큼 시프트하며;
    상기 제 1 레지스터와 동일한 크기를 갖는 제 4 레지스터로 상기 요소들의 서브세트 이외의 요소들을 이동시키고, 제 4 레지스터의 나머지 위치들에는 0 값이 저장되고; 그리고
    업데이트된 처음 K개의 요소들을 형성하기 위해, 제 3 레지스터와 제 4 레지스터 사이의 논리적 OR 연산을 수행하도록 구성되는 것을 특징으로 하는 하드웨어 기반 시스템.
  17. 제16항에 있어서,
    상기 프로세서는 또한, 업데이트된 처음 K개의 요소들을 상기 제 1 레지스터에 저장하도록 구성되는 것을 특징으로 하는 하드웨어 기반 시스템.
  18. 제11항에 있어서,
    상기 프로세서는 또한, 벡터 데이터와 연관된 인덱스 위치를 추적하도록 구성되는 것을 특징으로 하는 하드웨어 기반 시스템.
  19. 제11항에 있어서,
    상기 위치를 결정하기 위하여 상기 프로세서는,
    상기 요소들의 서브세트의 각 요소의 위치에 대응하는 비트 값을 제 5 레지스터에서 어서트하고, 상기 제 5 레지스터는 처음 K개의 요소들을 저장하는 제 1 레지스터와 동일한 크기를 가지며;
    상기 요소들의 서브세트 이외의 요소들의 위치에 대응하는 비트 값을 제 5 레지스터에서 디어서트하고(de-assert);
    상기 요소들의 서브세트 이외의 요소들의 위치에 대응하는 비트 값을 제 6 레지스터에서 어서트하고, 상기 제 6 레지스터는 제 1 레지스터와 동일한 크기를 가지며;
    제 6 레지스터 내의 요소들을 시프트하고;
    어서트된 비트 값을 제 6 레지스터의 최상위 비트 위치(most significant bit position)에 삽입하고; 그리고
    제 5 레지스터와 제 6 레지스터 사이에서 논리적 AND 연산을 수행하도록 구성되며,
    상기 어서트된 비트 값은 상기 (b)에서 상기 각각의 요소의 위치를 식별하는 것을 특징으로 하는 하드웨어 기반 시스템.
  20. 제11항에 있어서,
    상기 (a)를 수행하기 위해 상기 프로세서는, 상기 각각의 요소의 값과 상기 처음 K개의 요소들 중 가장 작은 값을 비교하도록 구성되는 것을 특징으로 하는 하드웨어 기반 시스템.
  21. 하드웨어 기반 시스템으로서,
    (a) n개의 요소들을 갖는 벡터 데이터의 가장 높은 K개의 요소들을 정렬하기 위한 TopK 명령을 수신하는 수단;
    (b) 벡터 데이터의 처음 K개의 요소들을 제 1 레지스터에 정렬 및 저장하는 수단;
    (c) 벡터 데이터의 다른 요소를 판독하는 수단;
    (d) 벡터 데이터의 상기 다른 요소가 상기 처음 K개의 요소들의 값들의 범위보다 크거나 같은 값을 갖는지 여부를 결정하는 수단;
    (e) 상기 다른 요소가 상기 값들의 범위보다 크거나 같은 값을 갖는 경우, 제 1 레지스터의 처음 K개의 요소들 내에서의 상기 다른 요소의 위치를 결정하는 수단;
    (f) 처음 K개의 요소들 내에서의 상기 다른 요소의 위치를 결정한 이후, 처음 K개의 요소들 중 상기 다른 요소보다 작은 요소들의 서브세트를 아래로(down)시프트하는 수단;
    (g) 업데이트된 처음 K개의 요소들을 형성하도록 상기 시프트 이후의 비어있는 위치인 결정된 위치에 상기 다른 요소를 삽입하는 수단; 및
    (h) 벡터 데이터의 각 요소가 프로세싱될 때까지 벡터 데이터의 나머지 각각의 요소에 대해 상기 (c), (d), (e), (f) 및 (g)를 반복하는 수단
    을 포함하는 것을 특징으로 하는 하드웨어 기반 시스템.
  22. 컴퓨터로 구현되는 방법으로서,
    (a) n개의 요소들을 갖는 벡터 데이터의 가장 높은 K개의 요소들을 정렬하기 위한 TopK 명령을 수신하는 단계;
    (b) 벡터 데이터의 처음 N개의 요소들을 제 1 레지스터에 검색, 정렬 및 저장하는 단계, N은 K 보다 작거나 같으며;
    (c) 벡터 데이터의 다른 요소를 판독하는 단계;
    (d) 벡터 데이터의 상기 다른 요소가 상기 처음 N개의 요소들의 값들의 범위보다 크거나 같은 값을 갖는지 여부를 결정하는 단계;
    (e) 상기 다른 요소가 상기 값들의 범위보다 크거나 같은 값을 갖는 경우, 제 1 레지스터의 처음 N개의 요소들 내에서의 상기 다른 요소의 위치를 결정하는 단계;
    (f) 처음 N개의 요소들 내에서의 상기 다른 요소의 위치를 결정한 이후, 처음 N개의 요소들 중 상기 다른 요소보다 작은 요소들의 서브세트를 아래로(down)시프트하는 단계;
    (g) 업데이트된 처음 N개의 요소들을 형성하도록 상기 시프트 이후의 비어있는 위치인 결정된 위치에 상기 다른 요소를 삽입하는 단계; 및
    (h) 벡터 데이터의 각 요소가 프로세싱될 때까지 벡터 데이터의 나머지 각각의 요소에 대해 단계 (c), (d), (e), (f) 및 (g)를 반복하는 단계
    를 포함하는 것을 특징으로 하는 방법.
KR1020210141835A 2020-10-23 2021-10-22 탑케이 연산을 위한 방법 및 시스템 KR20220054220A (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US202063105140P 2020-10-23 2020-10-23
US63/105,140 2020-10-23
US17/507,247 US20220129270A1 (en) 2020-10-23 2021-10-21 Method and system for topk operation
US17/507,247 2021-10-21

Publications (1)

Publication Number Publication Date
KR20220054220A true KR20220054220A (ko) 2022-05-02

Family

ID=81258364

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020210141835A KR20220054220A (ko) 2020-10-23 2021-10-22 탑케이 연산을 위한 방법 및 시스템

Country Status (4)

Country Link
US (1) US20220129270A1 (ko)
KR (1) KR20220054220A (ko)
CN (1) CN114489794A (ko)
CA (1) CA3135463A1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20220222081A1 (en) * 2021-01-14 2022-07-14 Oracle International Corporation Vectorized sorted-set intersection using conflict-detection instructions optimized for small unpadded ordered sets

Also Published As

Publication number Publication date
CA3135463A1 (en) 2022-04-23
US20220129270A1 (en) 2022-04-28
CN114489794A (zh) 2022-05-13

Similar Documents

Publication Publication Date Title
US10776685B2 (en) Image retrieval method based on variable-length deep hash learning
US9442929B2 (en) Determining documents that match a query
US5014327A (en) Parallel associative memory having improved selection and decision mechanisms for recognizing and sorting relevant patterns
Papadopoulos et al. Structure-based similarity search with graph histograms
CN107784110B (zh) 一种索引建立方法及装置
CN107341507B (zh) 一种基于gpu与级联哈希的快速图像sift特征匹配方法
US20110305399A1 (en) Image clustering
KR20060033733A (ko) 비트 벡터 인덱스들을 사용하는 다차원 데이터 객체 검색
Wehr et al. Parallel kd-tree construction on the gpu with an adaptive split and sort strategy
CN112085644B (zh) 多列数据排序方法、装置、可读存储介质和电子设备
CN111801665A (zh) 用于大数据应用的分层局部敏感哈希(lsh)分区索引
KR20220054220A (ko) 탑케이 연산을 위한 방법 및 시스템
Alexe et al. Exploiting spatial overlap to efficiently compute appearance distances between image windows
CN117251641A (zh) 向量数据库检索方法、系统、电子设备及存储介质
Hayfron-Acquah et al. Improved selection sort algorithm
Feng et al. Real-time SLAM relocalization with online learning of binary feature indexing
CN116521733A (zh) 一种数据查询方法及装置
CN116957041A (zh) 压缩神经网络模型的方法、装置和计算设备
KR100667741B1 (ko) 특징 벡터 데이터 공간의 인덱싱 방법
Muja Scalable nearest neighbour methods for high dimensional data
Antaris et al. Similarity search over the cloud based on image descriptors' dimensions value cardinalities
Appiah et al. Magnetic bubble sort algorithm
Yan et al. Fast approximate matching of binary codes with distinctive bits
Feng et al. Effective optimizations of cluster-based nearest neighbor search in high-dimensional space
CN113474785A (zh) 提取处理方法及相关产品