KR20230170977A - 희소 simd 크로스-레인 프로세싱 유닛 - Google Patents
희소 simd 크로스-레인 프로세싱 유닛 Download PDFInfo
- Publication number
- KR20230170977A KR20230170977A KR1020237040479A KR20237040479A KR20230170977A KR 20230170977 A KR20230170977 A KR 20230170977A KR 1020237040479 A KR1020237040479 A KR 1020237040479A KR 20237040479 A KR20237040479 A KR 20237040479A KR 20230170977 A KR20230170977 A KR 20230170977A
- Authority
- KR
- South Korea
- Prior art keywords
- data
- processing
- vector
- cells
- input
- Prior art date
Links
- 238000012545 processing Methods 0.000 title claims abstract description 325
- 239000013598 vector Substances 0.000 claims abstract description 221
- 238000000034 method Methods 0.000 claims abstract description 21
- 230000004044 response Effects 0.000 claims description 24
- 238000011144 upstream manufacturing Methods 0.000 claims description 23
- 230000010076 replication Effects 0.000 claims description 17
- 230000001419 dependent effect Effects 0.000 abstract description 27
- 230000008569 process Effects 0.000 abstract description 10
- 239000000203 mixture Substances 0.000 description 31
- 230000015654 memory Effects 0.000 description 29
- 238000010586 diagram Methods 0.000 description 23
- 238000005192 partition Methods 0.000 description 16
- 238000013528 artificial neural network Methods 0.000 description 9
- 238000012549 training Methods 0.000 description 9
- 238000007667 floating Methods 0.000 description 7
- 239000011159 matrix material Substances 0.000 description 7
- 238000004891 communication Methods 0.000 description 6
- 238000010801 machine learning Methods 0.000 description 6
- 238000000638 solvent extraction Methods 0.000 description 5
- 238000004590 computer program Methods 0.000 description 4
- 230000008901 benefit Effects 0.000 description 3
- 230000000295 complement effect Effects 0.000 description 3
- 238000003780 insertion Methods 0.000 description 3
- 230000037431 insertion Effects 0.000 description 3
- 230000001133 acceleration Effects 0.000 description 2
- 239000002131 composite material Substances 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 238000005096 rolling process Methods 0.000 description 2
- 235000010627 Phaseolus vulgaris Nutrition 0.000 description 1
- 244000046052 Phaseolus vulgaris Species 0.000 description 1
- 239000008186 active pharmaceutical agent Substances 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000001174 ascending effect Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 230000001788 irregular Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 238000013515 script Methods 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000012358 sourcing Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
- G06F15/8007—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
- G06F15/8053—Vector processors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
- G06F9/38873—Iterative single instructions for multiple data lanes [SIMD]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- Biophysics (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Mathematical Physics (AREA)
- Biomedical Technology (AREA)
- Artificial Intelligence (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computational Linguistics (AREA)
- Neurology (AREA)
- Multi Processors (AREA)
- Complex Calculations (AREA)
- Advance Control (AREA)
Abstract
본 개시내용의 양상들은 프로세서의 다수의 데이터 프로세싱 레인들에 걸쳐 데이터-의존 연산들을 수행하기 위한 XPU(cross-lane processing unit)에 관한 것이다. 각각의 데이터-의존 연산을 위한 연산-특정 회로들을 구현하기보다는, XPU는, XPU에 스택형 네트워크로서 배열된 크로스바들 및 프로세싱 셀들에 의해 수행되는 개별적인 연산들을 구성하는 입력 신호들에 대한 응답으로 상이한 연산들을 수행하도록 구성될 수 있다. 각각의 프로세싱 셀은 다수의 데이터 프로세싱 레인들에 걸쳐 데이터를 수신하고 프로세싱할 수 있다. 본 개시내용의 양상들은, 복제 카운트를 수행하기 위해 벡터 정렬 네트워크를 사용하도록 XPU를 구성하는 것을 포함하여, 정렬 및 복제 카운팅을 위해 XPU를 별개로 구성할 필요성을 제거한다.
Description
[0001] 본 출원은 2021년 11월 15일자로 출원된 미국 가특허 출원 제63/279,262호의 출원일의 이익을 주장하는, 2022년 10월 25일자로 출원된 미국 특허출원 제17/972,663호의 계속출원이며, 이로써 해당 출원들의 개시내용은 본원에 참조로 포함된다.
[0002] 단일 명령 다중 데이터(SIMD: single instruction, multiple data) 프로세싱 유닛은 입력들 각각에 대해 동일한 연산을 수행함으로써 다수의 데이터 입력들의 병렬 프로세싱을 위한 프로세싱 유닛의 타입이다. SIMD 프로세싱 유닛들에 의해 가속될 연산들은 SIMD 프로세싱 유닛의 설계 시에 미리 결정된다. SIMD 프로세싱 유닛들은 다음의 컴퓨팅 프리미티브(compute primitive)들: 복제 카운트/히스토그램; 정렬; 고유화(uniquify); 스캔/세그먼트화된 스캔; 및/또는 파티셔닝이 빈번하게 사용될 수 있는 희소 컴퓨테이션을 수반할 수 있다. 희소 컴퓨테이션에 대한 양호한 성능을 획득하기 위해, 이들 프리미티브들은 구성가능 방식으로 SIMD 아키텍처 상에서 병렬화되어야 한다. 현재의 기술은 그러한 병렬화를 제공할 수 없다.
[0003] 본 개시내용의 양상들은 프로세서의 다수의 데이터 프로세싱 레인들에 걸쳐 SIMD(single instruction, multiple data) 데이터-의존 연산들을 수행하기 위한 크로스-레인 프로세싱 유닛(XPU: cross-lane processing unit)에 관한 것이다. 각각의 데이터-의존 연산을 위한 연산-특정 회로들을 물리적으로 제작하기보다는, XPU는, 개별적인 연산들을 수행하도록 프로세싱 셀들을 구성하고 크로스바들을 XPU에 스택형 네트워크로서 배열함으로써, 입력 신호들에 대한 응답으로 상이한 연산들을 수행하도록 구성될 수 있다. 본 개시내용의 양상들은, XPU에서 동일한 스택형 네트워크 구성을 재사용함으로써, 입력 벡터에서 고유 값들을 식별하면서 벡터에서 고유 및 비-고유 값들의 복제 카운트를 또한 수행하는 것을 제공한다. 각각의 프로세싱 셀은 다수의 데이터 프로세싱 레인들에 걸쳐 데이터를 수신하고 프로세싱할 수 있다. 본원에 설명된 바와 같은 XPU는 정렬하기 위해, 예를 들어, 입력 벡터에서 고유 값들을 식별하고 입력 벡터에서 복제 값들을 카운팅하기 위해, 하드웨어가 별개로 구성될 필요성을 제거한다. XPU는, 희소 벡터들 또는 행렬들과 같은 희소 데이터 구조들의 가속된 프로세싱으로 조밀 행렬들과 같은 조밀 데이터 구조들의 컴퓨테이션을 보완하는 하드웨어 회로의 일부로서 구현될 수 있다.
[0004] 본 개시내용의 양상은 하드웨어 회로를 제공한다. 하드웨어 회로는 복수의 스테이지들을 포함하며, 여기서 각각의 스테이지는 크로스바 및 2 개 이상의 셀들을 포함한다. 하드웨어 회로는 복수의 스테이지들의 복수의 셀들 및 복수의 크로스바들을 통해 업스트림 입력으로부터 다운스트림 목적지로 개개의 데이터를 스트리밍하는 복수의 데이터 프로세싱 레인들을 더 포함한다. 하드웨어 회로는, 복수의 데이터 프로세싱 레인들을 따라 업스트림 입력으로부터 입력 데이터를 수신하고 제1 연산을 수행하기 위한 제1 명령을 수신하도록 구성된다. 제1 명령을 수신하는 것에 대한 응답으로, 각각의 스테이지에 대해, 하드웨어 회로는, 스테이지의 개개의 프로세싱 셀들에 개개의 제2 명령을 전송하고 ― 각각의 셀은 개개의 데이터 프로세싱 레인으로부터 입력을 수신하는 것에 대한 응답으로 개개의 제2 연산을 수행하도록 구성됨 ―, 그리고 스테이지에 대한 개개의 크로스바에 개개의 제3 명령을 전송하도록 추가로 구성되고, 크로스바는 복수의 데이터 프로세싱 레인들을 따라 스테이지의 각각의 셀로부터 다음 스테이지의 셀들로 출력을 퍼뮤트(permute)하도록 구성된다. 하드웨어 회로는, 개개의 제2 연산들을 수행하도록 구성된 복수의 셀들 및 복수의 데이터 프로세싱 레인들을 따라, 수신된 입력 데이터를 프로세싱함으로써, 제1 연산을 수행하도록 또한 구성된다.
[0005] 예에서, 각각의 셀은, 셀을 통과하는 개개의 데이터 프로세싱 레인으로부터의 개개의 제1 입력 피연산자 및 셀에 업스트림의 스테이지의 개개의 크로스바로부터의 개개의 제2 입력 피연산자를 수신하도록 구성된다. 다른 예에서, 복수의 데이터 프로세싱 레인들의 데이터의 다운스트림 목적지는 벡터 프로세싱 유닛이고, 벡터 프로세싱 유닛은 하드웨어 회로의 출력 데이터에 대해 단일 명령 다중 데이터 벡터 연산들을 수행하도록 구성된다.
[0006] 또 다른 예에서, 셀들 각각은 하나 이상의 수신된 명령들에 대한 응답으로 복수의 미리 결정된 프리미티브 연산(primitive operation)들 중 하나 이상을 수행하도록 구성되고; 하드웨어 회로는 복수의 제어 셀들을 더 포함하고; 그리고 개개의 프로세싱 셀들에 개개의 제2 명령을 전송할 때, 하드웨어 회로는, 각각의 제어 셀에 의해, 제1 명령에 의해 특정된 제1 연산에 기반하여 개개의 제어 신호를 생성하여 각각의 프로세싱 셀에 전송하도록 구성된다. 또 다른 예에서, 각각의 제어 셀에 의해, 개개의 제어 신호를 생성하여 전송할 때, 하드웨어 회로는, 각각의 프로세싱 셀로 하여금 프로세싱 셀이 있는 스테이지 또는 프로세싱 셀을 통과하는 데이터 프로세싱 레인 중 적어도 하나에 기반하여 개개의 산술, 비교 및 우회 연산 중 하나를 수행하게 하기 위한 개개의 제어 신호를 생성하도록 구성된다. 또 다른 예에서, 복수의 셀들 및 복수의 크로스바들은 복수의 스테이지들 및 복수의 데이터 프로세싱 레인들에 걸쳐 연결된 셀들의 프로세싱 네트워크를 형성하고, 연결된 셀들의 프로세싱 네트워크는, 입력 데이터를 수신하고, 입력 데이터에 대해 제1 연산을 수행하는 것에 따라 개개의 출력 데이터를 생성하도록 구성된다. 또 다른 예에서, 연결된 셀들의 프로세싱 네트워크는 결합 벡터 정렬 및 복제 카운트 연산(combined vector sort and duplicate count operation)을 수행하도록 구성되며, 결합 연산은, 프로세싱 네트워크에 의해, 엘리먼트들의 입력 벡터를 수신하는 것; 및 프로세싱 네트워크에 의해 그리고 출력으로서, 입력 벡터에서의 복제 엘리먼트들의 카운트들을 특정하는 데이터 및 정렬된 출력 벡터를 생성하는 것을 포함한다.
[0007] 또 다른 예에서, 입력 데이터는 희소 벡터 데이터를 포함하고, 개개의 제2 및 제3 명령들을 전송한 후에, 하드웨어 회로는 벡터 스캔, 벡터 합산, 벡터 정렬 또는 벡터 복제 카운트 중 하나를 수행하도록 구성된다.
[0008] 본 개시내용의 다른 양상은 하드웨어 회로를 포함하는 시스템을 제공하며, 하드웨어 회로는, 복수의 스테이지들 ― 각각의 스테이지는 크로스바 및 2 개 이상의 셀들을 포함함 ―, 및 복수의 데이터 프로세싱 레인들을 포함하며, 복수의 데이터 프로세싱 레인들은 복수의 스테이지들의 복수의 셀들 및 복수의 크로스바들을 통해 업스트림 입력으로부터 다운스트림 목적지로 개개의 데이터를 스트리밍한다. 하드웨어 회로는, 복수의 데이터 프로세싱 레인들을 따라 업스트림 입력으로부터 입력 데이터를 수신하고 제1 연산을 수행하기 위한 제1 명령을 수신하도록 구성된다. 하드웨어 회로는, 제1 명령을 수신하는 것에 대한 응답으로, 각각의 스테이지에 대해, 스테이지의 개개의 프로세싱 셀들에 개개의 제2 명령을 전송하고 ― 각각의 셀은 개개의 데이터 프로세싱 레인으로부터 입력을 수신하는 것에 대한 응답으로 개개의 제2 연산을 수행하도록 구성됨 ―; 그리고 스테이지에 대한 개개의 크로스바에 개개의 제3 명령을 전송하도록 추가로 구성되고, 크로스바는 복수의 데이터 프로세싱 레인들을 따라 스테이지의 각각의 셀로부터 다음 스테이지의 셀들로 출력을 퍼뮤트하도록 구성된다. 하드웨어 회로는, 개개의 제2 연산들을 수행하도록 구성된 복수의 셀들 및 복수의 데이터 프로세싱 레인들을 따라, 수신된 입력 데이터를 프로세싱함으로써, 제1 연산을 수행하도록 또한 구성된다.
[0009] 예에서, 각각의 셀은, 셀을 통과하는 개개의 데이터 프로세싱 레인으로부터의 개개의 제1 입력 피연산자 및 셀에 업스트림의 스테이지의 개개의 크로스바로부터의 개개의 제2 입력 피연산자를 수신하도록 구성된다. 다른 예에서, 복수의 데이터 프로세싱 레인들의 데이터의 다운스트림 목적지는 벡터 프로세싱 유닛이고, 벡터 프로세싱 유닛은 하드웨어 회로의 출력 데이터에 대해 단일 명령 다중 데이터 벡터 연산들을 수행하도록 구성된다.
[0010] 또 다른 예에서, 셀들 각각은 하나 이상의 수신된 명령들에 대한 응답으로 복수의 미리 결정된 프리미티브 연산들 중 하나 이상을 수행하도록 구성되고; 하드웨어 회로는 복수의 제어 셀들을 더 포함하고; 그리고 개개의 프로세싱 셀들에 개개의 제2 명령을 전송할 때, 하드웨어 회로는, 각각의 제어 셀에 의해, 제1 명령에 의해 특정된 제1 연산에 기반하여 개개의 제어 신호를 생성하여 각각의 프로세싱 셀에 전송하도록 구성된다. 또 다른 예에서, 각각의 제어 셀에 의해, 개개의 제어 신호를 생성하여 전송할 때, 하드웨어 회로는, 각각의 프로세싱 셀로 하여금 프로세싱 셀이 있는 스테이지 또는 프로세싱 셀을 통과하는 데이터 프로세싱 레인 중 적어도 하나에 기반하여 개개의 산술, 비교 및 우회 연산 중 하나를 수행하게 하기 위한 개개의 제어 신호를 생성하도록 구성된다. 또 다른 예에서, 복수의 셀들 및 복수의 크로스바들은 복수의 스테이지들 및 복수의 데이터 프로세싱 레인들에 걸쳐 연결된 셀들의 프로세싱 네트워크를 형성하고, 연결된 셀들의 프로세싱 네트워크는, 입력 데이터를 수신하고, 입력 데이터에 대해 제1 연산을 수행하는 것에 따라 개개의 출력 데이터를 생성하도록 구성된다. 또 다른 예에서, 연결된 셀들의 프로세싱 네트워크는 결합 벡터 정렬 및 복제 카운트 연산을 수행하도록 구성되며, 결합 연산은, 프로세싱 네트워크에 의해, 엘리먼트들의 입력 벡터를 수신하는 것; 및 프로세싱 네트워크에 의해 그리고 출력으로서, 입력 벡터에서의 복제 엘리먼트들의 카운트들을 특정하는 데이터 및 정렬된 출력 벡터를 생성하는 것을 포함한다.
[0011] 또 다른 예에서, 입력 데이터는 희소 벡터 데이터를 포함하고, 개개의 제2 및 제3 명령들을 전송한 후에, 하드웨어 회로는 벡터 스캔, 벡터 합산, 벡터 정렬 또는 벡터 복제 카운트 중 하나를 수행하도록 구성된다.
[0012] 본 개시내용의 또 다른 양상은 컴퓨터-구현 방법을 제공한다. 방법은, 복수의 스테이지들 ― 각각의 스테이지는 크로스바 및 2 개 이상의 셀들을 포함함 ―, 및 복수의 데이터 프로세싱 레인들을 포함하는 하드웨어 회로에 의해 ― 복수의 데이터 프로세싱 레인들은 복수의 스테이지들의 복수의 셀들 및 복수의 크로스바들을 통해 업스트림 입력으로부터 다운스트림 목적지로 개개의 데이터를 스트리밍함 ―, 복수의 데이터 프로세싱 레인들을 따라 업스트림 입력으로부터 입력 데이터를 수신하고, 제1 연산을 수행하기 위한 제1 명령을 수신하는 단계를 포함한다. 방법은, 제1 명령을 수신하는 것에 대한 응답으로, 각각의 스테이지에 대해, 하드웨어 회로에 의해, 스테이지의 개개의 프로세싱 셀들에 개개의 제2 명령을 전송하는 단계 ― 각각의 셀은 개개의 데이터 프로세싱 레인으로부터 입력을 수신하는 것에 대한 응답으로 개개의 제2 연산을 수행하도록 구성됨 ―; 및 하드웨어 회로에 의해, 스테이지에 대한 개개의 크로스바에 개개의 제3 명령을 전송하는 단계를 더 포함하며, 크로스바는 복수의 데이터 프로세싱 레인들을 따라 스테이지의 각각의 셀로부터 다음 스테이지의 셀들로 출력을 퍼뮤트하도록 구성된다. 방법은 또한, 하드웨어 회로에 의해, 개개의 제2 연산들을 수행하도록 구성된 복수의 셀들 및 복수의 데이터 프로세싱 레인들을 따라, 수신된 입력 데이터를 프로세싱함으로써, 제1 연산을 수행하는 단계를 포함한다.
[0013] 예에서, 각각의 셀은, 셀을 통과하는 개개의 데이터 프로세싱 레인으로부터의 개개의 제1 입력 피연산자 및 셀에 업스트림의 스테이지의 개개의 크로스바로부터의 개개의 제2 입력 피연산자를 수신하도록 구성된다. 다른 예에서, 복수의 데이터 프로세싱 레인들의 데이터의 다운스트림 목적지는 벡터 프로세싱 유닛이고, 벡터 프로세싱 유닛은 하드웨어 회로의 출력 데이터에 대해 단일 명령 다중 데이터 벡터 연산들을 수행하도록 구성된다.
[0014] 또 다른 예에서, 셀들 각각은 하나 이상의 수신된 명령들에 대한 응답으로 복수의 미리 결정된 프리미티브 연산들 중 하나 이상을 수행하도록 구성되고; 하드웨어 회로는 복수의 제어 셀들을 더 포함하고; 그리고 개개의 프로세싱 셀들에 개개의 제2 명령을 전송하는 것은, 각각의 제어 셀에 의해, 제1 명령에 의해 특정된 제1 연산에 기반하여 개개의 제어 신호를 생성하여 각각의 프로세싱 셀에 전송하는 것을 포함한다.
[0015] 도 1은 본 개시내용의 양상들에 따른, XPU(cross-lane processing unit)들을 구현하는 예시적인 하드웨어 회로의 블록 다이어그램을 묘사한다.
[0016] 도 2는 본 개시내용의 양상들에 따른, XPU를 구현하는 예시적인 타일의 블록 다이어그램을 묘사한다.
[0017] 도 3은 본 개시내용의 양상들에 따른, 예시적인 XPU의 블록 다이어그램을 묘사한다.
[0018] 도 4는 본 개시내용의 양상들에 따른, 예시적인 XPU 프로세싱 셀 및 대응하는 제어 셀의 블록 다이어그램을 묘사한다.
[0019] 도 5는 본 개시내용의 양상들에 따른, XPU에 의해 수행되는 벡터 스캔 연산들을 위한 예시적인 XPU 구성의 블록 다이어그램을 묘사한다.
[0020] 도 6은 본 개시내용의 양상들에 따른, XPU에 의해 수행되는 벡터 정렬 및 벡터 복제 카운트 연산들을 위한 예시적인 XPU 구성의 블록 다이어그램을 묘사한다.
[0021] 도 7은 본 개시내용의 양상들에 따른, 홀수/짝수 병합 네트워크 및 값 셔플 네트워크를 포함하도록 구성된 예시적인 XPU의 블록 다이어그램을 묘사한다.
[0022] 도 8a는 본 개시내용의 양상들에 따른, 결합 병합 정렬 및 복제 카운트를 수행하기 위한 홀수/짝수 병합 정렬 네트워크의 예시적인 XPU 구성의 흐름도를 묘사한다.
[0023] 도 8b는 본 개시내용의 양상들에 따른, XPU의 홀수/짝수 병합 네트워크(800)의 예시적인 스테이지 1을 묘사한다.
[0024] 도 8c는 본 개시내용의 양상들에 따른, XPU의 홀수/짝수 병합 네트워크의 예시적인 스테이지 2를 묘사한다.
[0025] 도 8d는 본 개시내용의 양상들에 따른, XPU의 홀수/짝수 병합 네트워크의 예시적인 스테이지 3을 묘사한다.
[0026] 도 8e는 본 개시내용의 양상들에 따른, XPU의 홀수/짝수 병합 네트워크의 예시적인 스테이지 4를 묘사한다.
[0027] 도 8f는 본 개시내용의 양상들에 따른, XPU의 홀수/짝수 병합 네트워크의 예시적인 스테이지 5를 묘사한다.
[0028] 도 8g는 본 개시내용의 양상들에 따른, XPU의 홀수/짝수 병합 네트워크의 예시적인 스테이지 6을 묘사한다.
[0029] 도 8h는 본 개시내용의 양상들에 따른, XPU의 홀수/짝수 병합 네트워크의 예시적인 값 셔플 네트워크를 묘사한다.
[0030] 도 9는 본 개시내용의 양상들에 따른, XPU 상에서 구성된 연산(composed operation)을 수행하기 위한 예시적인 프로세스의 흐름도를 묘사한다.
[0031] 도 10은 본 개시내용의 양상들에 따른, XPU로의 입력 벡터에 대한 복제 카운트를 정렬 및 생성하기 위한 예시적인 프로세스의 흐름도를 묘사한다.
[0032] 도 11은 본 개시내용의 양상들에 따른, 하드웨어 회로를 구현하기 위한 예시적인 환경의 블록 다이어그램을 묘사한다.
[0016] 도 2는 본 개시내용의 양상들에 따른, XPU를 구현하는 예시적인 타일의 블록 다이어그램을 묘사한다.
[0017] 도 3은 본 개시내용의 양상들에 따른, 예시적인 XPU의 블록 다이어그램을 묘사한다.
[0018] 도 4는 본 개시내용의 양상들에 따른, 예시적인 XPU 프로세싱 셀 및 대응하는 제어 셀의 블록 다이어그램을 묘사한다.
[0019] 도 5는 본 개시내용의 양상들에 따른, XPU에 의해 수행되는 벡터 스캔 연산들을 위한 예시적인 XPU 구성의 블록 다이어그램을 묘사한다.
[0020] 도 6은 본 개시내용의 양상들에 따른, XPU에 의해 수행되는 벡터 정렬 및 벡터 복제 카운트 연산들을 위한 예시적인 XPU 구성의 블록 다이어그램을 묘사한다.
[0021] 도 7은 본 개시내용의 양상들에 따른, 홀수/짝수 병합 네트워크 및 값 셔플 네트워크를 포함하도록 구성된 예시적인 XPU의 블록 다이어그램을 묘사한다.
[0022] 도 8a는 본 개시내용의 양상들에 따른, 결합 병합 정렬 및 복제 카운트를 수행하기 위한 홀수/짝수 병합 정렬 네트워크의 예시적인 XPU 구성의 흐름도를 묘사한다.
[0023] 도 8b는 본 개시내용의 양상들에 따른, XPU의 홀수/짝수 병합 네트워크(800)의 예시적인 스테이지 1을 묘사한다.
[0024] 도 8c는 본 개시내용의 양상들에 따른, XPU의 홀수/짝수 병합 네트워크의 예시적인 스테이지 2를 묘사한다.
[0025] 도 8d는 본 개시내용의 양상들에 따른, XPU의 홀수/짝수 병합 네트워크의 예시적인 스테이지 3을 묘사한다.
[0026] 도 8e는 본 개시내용의 양상들에 따른, XPU의 홀수/짝수 병합 네트워크의 예시적인 스테이지 4를 묘사한다.
[0027] 도 8f는 본 개시내용의 양상들에 따른, XPU의 홀수/짝수 병합 네트워크의 예시적인 스테이지 5를 묘사한다.
[0028] 도 8g는 본 개시내용의 양상들에 따른, XPU의 홀수/짝수 병합 네트워크의 예시적인 스테이지 6을 묘사한다.
[0029] 도 8h는 본 개시내용의 양상들에 따른, XPU의 홀수/짝수 병합 네트워크의 예시적인 값 셔플 네트워크를 묘사한다.
[0030] 도 9는 본 개시내용의 양상들에 따른, XPU 상에서 구성된 연산(composed operation)을 수행하기 위한 예시적인 프로세스의 흐름도를 묘사한다.
[0031] 도 10은 본 개시내용의 양상들에 따른, XPU로의 입력 벡터에 대한 복제 카운트를 정렬 및 생성하기 위한 예시적인 프로세스의 흐름도를 묘사한다.
[0032] 도 11은 본 개시내용의 양상들에 따른, 하드웨어 회로를 구현하기 위한 예시적인 환경의 블록 다이어그램을 묘사한다.
개요
[0033] 본 개시내용의 양상들은 프로세서의 다수의 데이터 프로세싱 레인들에 걸쳐 데이터-의존 연산들을 수행하기 위한 XPU(cross-lane processing unit)에 관한 것이다. 물리적으로 제작되는, 각각의 데이터-의존 연산을 위한 연산-특정 회로들을 구현하기보다는, XPU는, 프로세싱 셀들에 의해 그리고 크로스바들을 XPU에 스택형 네트워크로서 배열함으로써 수행되는 개별적인 연산들을 구성함으로써 입력 신호들에 대한 응답으로 상이한 연산들을 수행하도록 구성될 수 있다. XPU는 다수의 SIMD 데이터 프로세싱 레인들의 값들에 걸쳐 동작한다. XPU는 SIMD 병렬 프로세싱을 위해 구성된 코-프로세서의 일부로서 구현될 수 있다. XPU를 구현하는 코-프로세서는 데이터-의존 연산들을 수행하도록 구성될 수 있다.
[0034] "입력-의존 연산(input-dependent operation)"으로 또한 지칭되는 데이터-의존 연산은, 연산을 수행하기 위한 컴퓨테이셔널 작업의 양이 사전에 알려지는 것이 아니라 데이터의 성질에 의존하는 연산이다. 컴퓨테이셔널 작업은, 예컨대, 데이터-의존 연산을 수행하기 위해 요구되는 연산들 또는 프로세싱 사이클들의 수로 측정될 수 있다. 예시적인 데이터-의존 연산들은 벡터 정렬, 입력 벡터에서의 고유 값들을 식별하는 것, 벡터 내의 복제 값들을 카운팅하는 것, 및 가변 길이들의 벡터들의 형상 또는 크기를 조작하기 위한 연산들을 포함한다. 데이터-의존 연산들은, 적어도, 상이한 입력들에 대해 동일한 타입의 연산을 수행하기 위한 랜덤 메모리 액세스 패턴들의 차이들 때문에, 불규칙적이다. 결과적으로, 데이터-의존 연산들은, 컴퓨테이셔널 작업이 입력 데이터의 성질, 이를테면 입력 데이터의 형상 또는 정도 또는 희소성에 기반하여 변하지 않는 다른 타입들의 연산들과 대조적으로, 성능을 최적화하기가 어렵다.
[0035] 데이터-의존 연산들은 희소 데이터에 대해 수행되는 연산들을 포함한다. 데이터 구조의 희소성은 데이터 구조의 비어 있지 않은(non-empty) 엘리먼트들 대 비어 있는 엘리먼트들의 비율의 척도이다. 데이터 구조에 의존하여, 비어 있는 엘리먼트는 제로(zero), 즉, 엘리먼트에 대한 값의 부재를 표시하는 예비 워드이거나, 또는 입력으로서 데이터 구조를 이용하여 수행되는 연산에 사소하게 기여하는 것으로 간주될 정도로 작은 값을 가질 수 있다. 데이터 구조가 비어 있지 않은 엘리먼트들보다 더 많이 비어 있으면 그 데이터 구조는 희소이다. 일부 데이터 구조들은 다른 데이터 구조들보다 더 희소하거나 덜 희소할 수 있다.
[0036] 본 개시내용의 양상들은, 프로세싱 파이프라인에서 다운스트림의 코-프로세서에 데이터를 전달하기 전에, XPU가 먼저 희소 데이터를 프로세싱하는 것을 제공하며, 이는 XPU 없이 이전에 가능했던 것보다 효율적인 컴퓨테이션을 위한 더 넓은 워크로드들을 가능하게 한다.
[0037] XPU가 다양한 데이터-의존 연산들을 핸들링할 수 있기 때문에, 기존의 SIMD 아키텍처들 상에서의 프로세싱을 위해 입력 데이터를 미리 정의하는 것의 제한 없이, 프로세싱 파이프라인들 및 대응하는 프로세서들이 설계될 수 있다. XPU 없이, 기존의 SIMD 아키텍처들은, 희소한 특징들의 집합으로부터의 생성을 기계 학습 모델로 임베딩하는 것과 같은 데이터-의존 연산들을 효율적으로 가속할 수 없다.
[0038] 예시적인 데이터-의존 연산들은 입력 트레이닝 예에 대한 임베딩을 생성하는 것을 포함한다. 임베딩은 벡터, 또는 입력으로부터 매핑된 일부 다른 데이터 구조일 수 있으며, 이는 임베딩보다 더 높은 차원성을 갖는다. 임베딩 생성은 파이프라인에 따라 프로세싱되는 워크로드의 일부로서 수행될 수 있다. 다른 예들로서, XPU는 벡터 스캐터 또는 게더링 연산들을 수행하고, 합들을 세그먼팅하고 그리고/또는 희소 특징 텐서들을 파티셔닝할 수 있다. 본원에 설명된 바와 같은 XPU는, SIMD 병렬 프로세싱 패러다임에 따라 구축된 벡터 프로세싱 유닛과 같은, 프로세서의 다른 컴포넌트들 또는 연결된 컴포넌트들에 대한 상보적 프로세싱 유닛일 수 있다. 하나 이상의 XPU들은 더 큰 프로세서의 개개의 프로세서 코어들에서 연결될 수 있으며, 더 큰 프로세서 자체가 특정 워크로드들의 성능을 가속하기 위한 다른 컴포넌트들, 이를테면 트레이닝 뉴럴 네트워크들을 포함할 수 있다.
[0039] 게다가, XPU는 특정 타입의 데이터-의존 연산을 수행하는 것으로 제한되지 않으며, 따라서 프로세서는 다수의 상이한 파이프라인들에 대한 다른 타입들의 프로세싱 유닛들을 보완하기 위해 XPU를 포함하도록 설계될 수 있다. XPU는 워크로드 단위로 구성될 수 있기 때문에, 특수화된 회로들이 희소 데이터의 컴퓨테이션을 위한 상보적 유닛들로서 프로세서 상에 물리적으로 제작되는 다른 접근법들에 비해 XPU의 물리적 풋프린트가 감소된다. XPU의 기능성은 또한 명령 세트의 사용 또는 호스트 프로세서의 기존 명령 세트로의 확장을 통해 확장되어서, 파이프라인 데이터가 변경들을 수신함에 따라 상이한 데이터-의존 연산들의 적응성을 추가로 개선할 수 있다. 명령들은 XPU의 개별적인 프로세싱 셀들 및 크로스바들을 구성하기 위해 명령들을 번역하는 것을 담당하는 XPU의 컴포넌트들에 신호들로서 제공될 수 있다. XPU는 XPU를 구현하는 하드웨어 회로에 대해 대응하는 컴파일러에 의해 컴파일링된 프로그램을 사용하여 구성될 수 있다.
[0040] XPU는 개별적인 프로세싱 셀들의 네트워크를 포함하며, 각각의 셀은 프로세싱 셀들 사이의 크로스바 연결들을 통해 하나 이상의 데이터 프로세싱 레인들을 통과하는 데이터를 프로세싱한다. 각각의 데이터 프로세싱 레인은 프로세싱 동안 데이터를 일시적으로 저장하기 위한 하나 이상의 레지스터들을 포함할 수 있다. 각각의 프로세싱 셀은 다수의 세트들의 피연산자들에 대해 하나 이상의 프리미티브 연산들을 수행하도록 구성된다. 제1 세트의 피연산자들은 프로세싱 셀에 의해 공유되는 프로세서의 데이터 프로세싱 레인으로부터의 입력으로서 제공된다. 제2 세트의 피연산자들은 XPU의 다수의 데이터 프로세싱 레인들에 걸친 데이터 송신을 조정하도록 구성된 크로스바로부터 제공된다.
[0041] XPU는 다수의 파이프라인 스테이지들로 분할될 수 있으며, 각각의 스테이지는 크로스바, 하나 이상의 프로세싱 셀들, 및 각각의 프로세싱 셀에 대한 대응하는 제어 셀을 포함한다. 스테이지들의 수는, 예컨대, XPU가 현재 워크로드에 대해 수행하도록 구성된 합성 연산(composed operation)에 기반하여 변할 수 있다.
[0042] XPU는 프로세싱 엘리먼트들 및 크로스바들의 스택형 네트워크의 파이프라인 스테이지들에 걸쳐 다수의 프리미티브 연산들을 수행함으로써 합성 연산을 수행한다. 합성 연산은 출력을 생성하기 위해 XPU에 의한 입력에 대해 수행되는 연산이다. 프리미티브 연산들은, XPU에 의해 실행될 때 XPU로 하여금 합성 연산을 수행하게 하는, XPU의 개별적인 프로세싱 셀들이 수행하도록 구성되는 연산들이다. 합성 연산을 수행하는 것은 다른 합성 연산들을 수행하는 것을 요구할 수 있다. 예를 들어, 벡터 정렬을 수행하기 위해, XPU는 다수의 프리미티브 연산들로 합성된 다른 연산인 프리픽스 합산을 수행할 수 있다. 예시적인 프리미티브 연산들은 입력 데이터를 비교, 산술 또는 우회하는 것을 위한 연산들을 포함한다. XPU는 XPU에 대해 다수의 파이프라인 스테이지들 중 하나에 따라 배열된 다수의 개별적인 프로세싱 셀들 크로스바들 및 각각을 구성함으로써 합성 연산을 수행한다.
[0043] XPU의 각각의 스테이지에서 수행되는 프리미티브 연산들은 프로그래밍 방식으로 정의될 수 있으며, 워크로드마다 변할 수 있다. 프로세싱 셀이 수행하도록 구성된 프리미티브 연산은 프로세싱 셀에 대한 개개의 제어 셀에 의해 수신된 하나 이상의 제어 신호들 또는 명령들에 의해 결정된다. 프로세싱 셀에 의해 수행되는 정확한 프리미티브 연산들은, 예컨대, XPU가 수행하도록 현재 구성된 합성 연산에 의존할 수 있다. 다른 예들에서, XPU의 상이한 레인들 또는 상이한 스테이지들에서의 프로세싱 셀들은 항상 하나 이상의 미리 결정된 프리미티브 연산들을 수행하도록 구성될 수 있다. XPU가 출력을 생성한 후에, 출력은 다수의 데이터 프로세싱 레인들을 따라, XPU를 구현하는 프로세서의 다른 프로세싱 유닛 또는 메모리 유닛으로 전달될 수 있다.
[0044] 본 개시내용의 양상들은, 입력 벡터를 수신하고, 동일한 스택형 네트워크 구성을 사용하여, 벡터에서의 고유 값들뿐만 아니라 각각의 값에 대한 복제들의 수 둘 모두를 결정하도록 구성된 XPU를 제공한다. XPU는 키에 의해 정렬된, 입력 벡터의 키-값 튜플들의 인-플레이스(in-place)의 안정적인 정렬인 벡터 정렬을 수행할 수 있다. 벡터 복제 카운트는 입력 벡터의 키-값 튜플들의 값들의 실행중인 복제 카운트를 리턴한다. 정렬된 리스트 및 복제 카운트는 입력 벡터로부터 비-고유 값들을 제거하는 데 사용될 수 있다. XPU는 본원에 설명된 바와 같이, 동일한 구성의 프로세싱 셀들 및 크로스바들에 따라 벡터 정렬 및 복제 카운트 둘 모두를 수행하도록 구성된다. 동일한 구성을 사용함으로써, XPU는 합성 연산들 둘 모두를 더 효율적으로 수행할 수 있는데, 이는 적어도, 고유 값들을 식별하기 위해 벡터 정렬을 수행하는 것과 주어진 입력 벡터에 대한 벡터 복제 카운트를 생성하는 것 사이에서 XPU가 재구성될 필요가 없기 때문이다. XPU가 수행하도록 구성된 다른 합성 연산들은 스캔, 세그먼팅된 스캔, 병렬-프리픽스 합, 벡터 파티션, 벡터 히스토그램, 벡터 콤팩트, 벡터 퍼뮤트, 벡터 감소, 벡터 시프트-삽입, 벡터 수집, 벡터 스캐터 등을 포함한다.
[0045] 본 개시내용의 양상들은 다음의 기술적 이점들을 제공할 수 있다. XPU를 구현하는 하드웨어 회로는, 임베딩-클래스 워크로드들 및 효율적으로 병렬화가능하지 않은 다른 데이터-의존 연산들을 위한 더 유연하고 프로그래밍가능한 하드웨어를 제공할 수 있다. XPU는, 특정 연산들만을 효율적으로 수행하도록 XPU가 고정될 것을 요구하지 않으면서, 워크로드 단위로 상이한 클래스들의 데이터-의존 연산들에 대한 가속 경로를 제공한다. 본원 설명된 바와 같이 프로그래밍가능 유닛을 제공함으로써, 구현 하드웨어 회로는 상이한 워크로드들의 요구들에 견고하게 적응할 수 있으며, 이는, 그렇지 않으면 데이터-의존 연산들을 요구하는 워크로드들에 대해 비효율적이거나 비효과적일 수 있는 병렬화가능한 데이터-독립 SIMD 연산들을 보완할 수 있다.
[0046] 주문형 집적 회로와 같은 하드웨어 회로는 워크로드들을 대규모로 추가로 조정 및 분산시키기 위해 상이한 수량들의 XPU들로 설계될 수 있다. 본원에 설명된 바와 같은 XPU는 또한, 동일한 구성을 사용하여 다수의 연산들의 효율적인 수행을 가능하게 하여, 프로세싱 시간 및 구성 시간을 추가로 감소시킨다. 예컨대, XPU는, XPU의 별개의 구성들 및/또는 그러한 연산들을 가속화하기 위한 특수화된 회로들의 별개의 인스턴스들 대신에, 벡터 정렬 및 벡터 복제 카운팅 둘 모두를 수행하도록 구성될 수 있다.
예시적인 시스템들
[0047] 도 1은 본 개시내용의 양상들에 따른, XPU(cross-lane processing unit)들(101A-F)을 구현하는 하드웨어 회로(101)의 블록 다이어그램이다. 하드웨어 회로(101)는 코-프로세서(103), 코-프로세서(104), 고-대역폭 메모리(107), 및 온-칩 인터커넥트(108)를 포함할 수 있다. 코-프로세서(103)는 하나 이상의 타일들(102A-F)을 포함할 수 있고, 각각의 타일은 개개의 XPU(101A-F)를 구현한다. 코-프로세서(103)는 타일들(102A-F)에 걸쳐 입력 및 출력 데이터를 조정하도록 구성된 타일 시퀀서(106)를 포함할 수 있다.
[0048] 코-프로세서(103)는 XPU들(102A-F)을 사용하여 데이터-의존 연산들을 수행하도록 구성된다. 도 2 내지 도 4를 참조하여 본원에서 더 상세히 설명되는 바와 같이, XPU들(102A-F)은 일련의 데이터 프로세싱 레인들에 연결되고, 각각의 레인은 XPU들(102A-F)을 통해 데이터를 스트리밍한다. 스트리밍된 데이터는, 메인 메모리, 캐시, 또는 영구 저장소, 이를테면, 솔리드 스테이트 또는 하드 디스크 저장소를 포함하는 다양한 상이한 메모리 디바이스들 중 임의의 메모리 디바이스일 수 있는 온-칩 메모리(105)로부터 리트리브될 수 있다. 스트리밍된 데이터는 또한, 코-프로세서(104)로부터 리트리브될 수 있고, 고-대역폭 메모리(107)는 코-프로세서들(103 및 104) 중 하나 또는 둘 모두, 및/또는 온-칩 인터커넥트(108)를 통해 하드웨어 회로(101)에 연결된 다른 데이터 소스를 서비스한다.
[0049] 코-프로세서(104)는 행렬-행렬 곱셈, 행렬-벡터 곱셈 등과 같은 특정 연산들의 가속을 위해 구성될 수 있다. 일부 예들에서, 코-프로세서(104)는 하드웨어 회로(101)의 나머지와 상이한 디바이스 상에 있고, 온-칩 인터커넥트(108)를 통해 하드웨어 회로에 데이터를 통신한다. 온-칩 인터커넥트(108)는 데이터 버스, 또는 다양한 통신 표준들 중 임의의 표준에 따른 임의의 형태의 인터커넥트, 예컨대, PCIe일 수 있다.
[0050] 하드웨어 회로(101)에 대한 예시적인 입력은 하드웨어 회로(101)를 사용하여 실행될 기계 학습 모델의 모델 파라미터들 및/또는 입력 데이터를 표현하는 텐서이다. 텐서는 상이한 차원들의 다양한 다른 공통 데이터 구조 타입들을 일반화하는 데이터 구조이다. 텐서는 정수들, 부동 소수점 값들, 부울 값들 등과 같은 하나 이상의 상이한 데이터 타입들일 수 있는 0개 이상의 엘리먼트들을 포함할 수 있다. 각각의 데이터 타입 내에서, 데이터 타입은 특정 레벨의 정밀도, 예컨대, 8-비트, 16-비트, 또는 32-비트 정수 또는 부동-소수점 값에 따라 파라미터화될 수 있다. 텐서의 차원은 자신의 "랭크(rank)"로 지칭된다. 랭크 0의 텐서는 스칼라로 또한 지칭되는 단일 엘리먼트이다. 랭크 1의 텐서는 또한 벡터로 지칭된다. 랭크 2의 텐서는 또한 행렬로 지칭된다. 벡터들 및 행렬들은 또한 상이한 랭크들을 갖는 것으로 지칭될 수 있다. 예컨대, 랭크 2의 벡터는 행렬과 동일하다. 비-제로 랭크의 텐서는 한 랭크 더 낮은 텐서들의 집합으로서 설명될 수 있다. 예컨대, 랭크 1의 벡터는 스칼라 값들의 집합이고, 랭크 2의 행렬은 랭크 1의 벡터들의 집합이다.
[0051] 하드웨어 회로(101)는 뉴럴 네트워크를 트레이닝하기 위한 프로세싱 파이프라인을 적어도 부분적으로 구현할 수 있다. 뉴럴 네트워크들은 수신된 입력에 대한 출력을 예측하기 위한 비선형 연산들의 하나 이상의 계층들을 포함하는 기계 학습 모델들이다. 입력 계층 및 출력 계층 이외에도, 일부 뉴럴 네트워크들은 하나 이상의 은닉 계층들을 포함한다. 각각의 은닉 계층의 출력은 뉴럴 네트워크의 출력 계층 또는 다른 은닉 계층에 입력될 수 있다. 뉴럴 네트워크의 각각의 계층은 계층에 대한 하나 이상의 모델 파라미터들에 대한 값들에 따라 수신된 입력으로부터 개개의 출력을 생성할 수 있다. 모델 파라미터들은, 뉴럴 네트워크로 하여금 정확한 출력을 생성하게 하기 위해 트레이닝 알고리즘을 통해 결정되는 가중치들 또는 바이어스들일 수 있다. 특징은 기계 학습 모델에 의해 수신된 입력 예의 측정가능한 특성이다. 특징 값은 개개의 특징에 대한 값이고, 정수 값일 수 있다.
[0052] 파이프라인은 입력 트레이닝 예들에 대한 임베딩들을 생성하는 것을 포함할 수 있다. 임베딩은 더 적은 데이터를 사용하여 입력 트레이닝 예의 특징들을 표현할 수 있어서, 더 효율적인 프로세싱을 가능하게 한다. 상이한 입력 트레이닝 예들에 대한 특징 텐서는 상이한 정도들의 희소성을 가질 것이며, 이는 대응하는 임베딩을 생성하는 데 요구되는 컴퓨테이셔널 작업의 양에 영향을 미친다. 하드웨어 회로(101)는, 트레이닝 입력 예를 표현하는 특징 값들의 텐서를 수신하고, 특징 텐서보다 더 낮은 랭크를 갖는 텐서로서 임베딩을 생성하도록 구성될 수 있다.
[0053] 임베딩들을 생성하기 위해, 코-프로세서(103)는 XPU들(102A-F) 상에서의 효율적인 희소 데이터 컴퓨테이션을 위해 다양한 데이터-의존 연산들을 구현하도록 구성된다. 이러한 연산들은 희소 벡터들을 정렬 또는 합산하는 것, 입력 벡터들의 콘텐츠들을 요약하기 위한 연산들, 및 희소 행렬들을 하나의 희소 행렬 저장 포맷으로부터 다른 희소 행렬 저장 포맷으로 번역하기 위한 연산들을 포함한다.
[0054] 데이터-의존 연산들의 수행을 가속하기 위한 물리적인 미리 결정된 회로들 대신에, XPU들(102A-F)은 다양한 상이한 데이터-의존 연산들을 수행하도록 구성, 예컨대 프로그래밍될 수 있다. 코-프로세서(103)는, 여전히 상보적 코-프로세서(104)가 매우 효율적이고 병렬화가능한 연산들을 수행할 수 있게 하면서, 희소 데이터를 프로세싱하는 일반화된 지원을 가능하게 한다.
[0055] 하드웨어 회로(101)는 다양한 상이한 타입들의 프로세싱 유닛들, 예컨대, 중앙 프로세싱 유닛(CPU), 그래픽 프로세싱 유닛(GPU), 필드-프로그래밍가능 게이트 어레이(FPGA), 또는 주문형 집적 회로(ASIC), 이를테면 텐서 프로세싱 유닛(TPU) 중 임의의 것일 수 있다. 하드웨어 회로(101)는, 도 11을 참조하여 본원에 설명된 바와 같이, 그 자체가 하나 이상의 디바이스들의 시스템의 일부일 수 있는 컴퓨팅 디바이스 상에 구현될 수 있다.
[0056] 도 2는 XPU(101)를 구현하는 예시적인 타일(102)의 블록 다이어그램이다. XPU(101)는 크로스-레인 제어기(210)에 커플링된다. 크로스-레인 제어기(210)는 XPU(101) 상에서 크로스-레인 명령들을 가능하게 하기 위해 별개의 제어 스레드를 제공한다. 본원에 설명된 바와 같이, XPU는 예컨대 하나 이상의 제어 신호들을 통해 제1 명령을 수신할 수 있으며, 하나 이상의 제어 신호들은 제1 명령에 의해 특정된 합성 연산을 수행하기 위해 하나 이상의 제2 및 제3 명령들로 변환되어 각각 XPU(101)의 프로세싱 셀들 및 크로스바들에 제공될 수 있다. XPU(101)에 대한 명령들은 제어 신호들을 통해 반송될 수 있으며, 여기서 XPU(101)의 프로세싱 셀들 및 크로스바들은 대응하는 프리미티브 연산을 수행하도록 해석하도록 구성된다. 예시적인 명령은 명령 세트 아키텍처(ISA: instruction set architecture)의 오피코드(opcode)일 수 있다.
[0057] 타일(102)은 도 1을 참조하여 설명된 바와 같이, 온-칩 인터커넥트(108)뿐만 아니라 온-칩 메모리(105)로부터 데이터를 수신할 수 있다. XPU는 또한 명령 인터페이스(224)로부터, 예컨대 타일 시퀀서(106)로부터 스칼라 코어(212) 또는 스칼라 코어(220)를 통해 명령들을 수신할 수 있다. 타일(102)의 스캐터/게더 제어기(222)는 착신 데이터를 수신하고, 어떤 데이터가 메모리 스케줄러(214)를 통해 메모리(206)로 전달되는지를 제어할 수 있다. 메모리 스케줄러(214)는 메모리(206)로부터 데이터가 어떻게 액세스되고 리트리브되는지를 조정한다. 메모리(206)는 타일(102)에 대해 전용이며, 타일(102)에 연결된 다른 컴포넌트들, 이를테면 다른 타일들에 의해 액세스가능하지 않다. 아비터(204)는 VPU들(202A-H) 중 어느 것이 예를 들어 클록-사이클 단위로 메모리(206)에 액세스하는지를 관리하도록 구성된다. 타일(102)은 타일(102)에 의해 수행될 태스크들의 태스크 큐(208)를 유지할 수 있다. 타일(102)은 또한 타일(102)을 하드웨어 회로(101) 및 메모리(206)의 다른 타일들과 각각 동기화하기 위해 타일 동기화 플래그들(218) 및/또는 메모리 플래그들(216)의 레지스터들을 유지할 수 있다.
[0058] VPU(vector processing unit)들(202A-H)은 XPU(101)와 VPU들(202A-H) 사이에 실선들에 의해 표시된 데이터 프로세싱 레인들을 통해 XPU(101)에 연결된다. XPU(101)와 VPUS(202A-H) 사이의 파선들은 제어 신호들을 표현하며, 제어 신호들은 수신된 제어 신호들에 대응하는 합성 연산을 수행하도록 XPU(101)를 구성하기 위해 XPU(101)에서의 제어 셀들에 의해 수신될 수 있다. 벡터 프로세싱 유닛은 입력 벡터들에 대한 효율적인 연산을 위해 구성된다. 한번에 타일(102)에 의해 프로세싱되는 벡터들의 길이는 타일에 의해 구현되는 VPU들의 수 또는 폭에 의존할 수 있다. 예를 들어, 8 개의 VPU들(202A-H)은 8-폭이다. VPU들(202A-H)은 동일한 데이터 프로세싱 레인을 따라 데이터를 프로세싱할 수 있다. VPU들(202A-H)은 메모리(206)로부터의 착신 벡터들의 엘리먼트들에 대해 스칼라 연산들을 수행하도록 구성될 수 있다. VPU들(202A-H)은 XPU(101)로부터 데이터를 수신할 수 있고, XPU(101)는, 본원에 설명된 바와 같이, 각각의 VPU(202A-H)에 의해 수행되는 바와 같이 단지 레인들을 따르는 대신에 데이터 프로세싱 레인들에 걸쳐 데이터를 프로세싱할 수 있다.
[0059] 도 3은 예시적인 XPU(300)의 블록 다이어그램이다. XPU(300)는 프로세싱 셀들(301-309), 크로스바들(203-310) 및 제어 셀들(350)을 포함한다. 제어 셀들(350)은 도 3의 블록 다이어그램에서 해칭된 블록들에 의해 표현된다. 데이터는 데이터 프로세싱 레인들(300A-H)을 따라 아래에서 위로 흐르며, 스테이지 1에서 시작하여 스테이지 6에서 끝난다. 스테이지 1은 프로세싱 셀들(301) 및 크로스바(302)를 포함한다. 스테이지 2는 프로세싱 셀들(303) 및 크로스바(304)를 포함한다. 스테이지 3은 프로세싱 셀들(305) 및 크로스바(306)를 포함한다. 스테이지 4는 프로세싱 셀들(307) 및 크로스바(308)를 포함한다. 스테이지 5는 프로세싱 셀들(309) 및 크로스바(310)를 포함한다. 스테이지 6은 프로세싱 셀들(311) 및 크로스바(312)를 포함한다. 상이한 예들에서, XPU는 더 많거나 더 적은 스테이지들을 포함할 수 있다. XPU는 또한 크로스바(399)를 포함할 수 있다.
[0060] 설명의 목적들을 위해, 이전의 스테이지들은 나중의 스테이지들에 대해 "업스트림"으로 간주되고, 나중의 스테이지들은 이전의 스테이지들에 대해 "다운스트림"으로 간주된다. 예컨대, 스테이지 1은 스테이지 5의 업스트림에 있고, 스테이지 4는 스테이지 3의 다운스트림에 있다.
[0061] XPU의 각각의 스테이지에서의 크로스바는 크로스바의 현재 구성에 따라 개개의 레인들로부터의 상이한 입력 값들을 상이한 다른 프로세싱 레인들로 퍼뮤트하도록 구성된 임의의 타입의 회로부일 수 있다. 크로스바는 크로스바와 동일한 스테이지에서 각각의 프로세싱 셀에 대해 제어 셀들로부터 하나 이상의 제어 신호들을 수신할 수 있다. 크로스바는 고정된 패턴에 따라 동일한 스테이지에서의 각각의 프로세싱 셀로부터의 입력 값들을 퍼뮤트하도록 구성된다. 패턴은 XPU가 수행하도록 현재 구성된 합성 연산에 의존하며, 반드시 크로스바로 하여금 매 프로세싱 셀 출력을 퍼뮤트하게 하는 것은 아니다. 다시 말해서, 일부 프로세싱 셀 출력들은 크로스바를 우회하여 동일한 프로세싱 레인을 따라 다음 스테이지로 진행할 수 있다.
[0062] 프로세싱 셀을 구성하기 위해, XPU(300)의 각각의 프로세싱 셀은 프로세싱 셀이 상주하는 개개의 프로세싱 레인을 따라 하나 이상의 제어 신호들을 수신하도록 구성된 개개의 제어 셀(350)을 갖는다. 프로세싱 셀은, 도 4를 참조하여 더 상세히 설명된 바와 같이, 수신된 제어 신호들 또는 명령들에 따라 다양한 상이한 프리미티브 연산들을 수행하고 그러한 연산들을 수행하기 위한 회로부로 구성된다. 제어 셀은, 예컨대 제어 셀의 대응하는 프로세싱 셀이 어느 프리미티브 연산을 수행할지를 결정하기 위해 제어 셀에 의해 해석가능한 하나 이상의 신호들로서 데이터 프로세싱 레인을 따라 명령들을 수신한다. 제어 셀은 제어 신호(들)를 프로세싱 셀에 포워딩하거나, 또는 수신된 명령들 또는 신호들을 프로세싱하고, 프로세싱 셀이 특정된 프리미티브 연산들의 실행을 인에이블하거나 또는 디스에이블하기 위해 수신하도록 구성되는 생성된 제어 신호들을 포워딩할 수 있다.
[0063] 프로세싱 셀들은 또한, 프로세싱 셀에 대한 개개의 프로세싱 레인으로부터 수신된 입력 데이터를 우회하도록 구성될 수 있다. 우회될 때, 수신된 입력은, 수정 없이, 프로세싱 셀로부터 프로세싱 셀과 동일한 스테이지에서의 크로스바로 전달된다. 우회 프로세싱 셀에 의해 이전 스테이지의 크로스바로부터 수신된 입력은 제로에 묶이거나 무시될 수 있다. 우회 프로세싱 셀의 실제 거동은 셀이 있는 파이프라인 스테이지, 및/또는 프로세싱 셀이 있는 프로세싱 레인에 의존할 수 있다. 도 4는 비교, 산술, 및/또는 우회 프리미티브 연산들을 수행하도록 구성된 예시적인 프로세싱 셀을 도시한다.
[0064] XPU(300)는, XPU(300)를 구현하는 프로세서가 적용 및 실행하도록 구성되는, 명령 세트 아키텍처 또는 명령 세트 아키텍처에 대한 확장의 일부로서 정의된 명령들을 수신하도록 구성될 수 있다. 명령들은, XPU 및 개별적인 프로세싱 셀들이 대응하는 연산들로서 각각 실행되도록 구성되는 상이한 합성 및/또는 프리미티브(primitive) 연산들을 특정할 수 있다. 제어 셀들(350)은, 명령 세트 또는 확장의 일부로서 정의된 명령들을 표현하는 데이터를 수신하고 그리고/또는 명령들을 대응하는 프로세싱 셀들을 구성하기 위한 제어 신호들로 변환하도록 구성된다. 예를 들어, 제어 셀들(350)은 XPU(300)를 구현하는 하드웨어 회로 또는 프로세서에 대응하는 명령 세트의 신호들을, XPU가 수행하도록 구성된 연산들에 대한 코드 워드들인 오피코드들로서 수신할 수 있다. XPU(300)가 벡터 정렬 또는 벡터 복제 카운팅과 같은 합성 연산들을 수행하기 위한 명령들을 수신하면, XPU(300)는 XPU로 하여금 명령된 합성 연산을 수행하게 하는 미리 결정된 개개의 프리미티브 연산을 수행하도록 각각의 프로세싱 셀을 구성할 수 있다.
[0065] XPU에 의해 수행되는 연산들은 클록 사이클에 의해 동기화될 수 있다. 예컨대, 각각의 스테이지에서의 프로세싱 셀들에 의해 수행되는 연산들은 하나 이상의 사이클들에서 수행될 수 있다. 예컨대, 각각의 스테이지에서의 연산들은 단일 사이클에서 수행될 수 있다. XPU에 의해 수행되는 상이한 합성 연산들은 수행하는 데 상이한 양들의 클록 사이클들이 걸릴 수 있다. 예를 들어, 벡터 정렬은 6 개의 사이클들에서 XPU에 의해 수행되고, 4 개의 사이클들에서 벡터 프리픽스 합산이 수행되고, 2 개의 사이클들에서 벡터 압축이 수행될 수 있다.
[0066] 도 4와 관련하여 더 상세히 설명된 바와 같이, 프로세싱 셀들은, 부동-소수점 값들 및 부호 있는 또는 부호 없는 정수들을 포함하는, 상이한 타입들의 피연산자들 사이의 덧셈과 같은 산술 연산들을 수행하도록 구성될 수 있다. 덧셈과 같은 산술 연산들은 도 5를 참조하여 본원에 설명된 바와 같이 스캐닝 연산들을 위해 XPU에 의해 수행되는 합성 연산들의 일부를 형성할 수 있다.
[0067] 예시적인 명령들은, XPU에 의해 수행되는 합성 및 프리미티브 연산들뿐만 아니라, XPU를 리셋하고 클록 동기화에 관한 정보를 리트리브하기 위한 명령들을 포함한다. 다른 명령들은 각각의 프로세싱 레인으로부터 피연산자들, 마스크 값들 및/또는 세그먼트 마커들 중 하나 이상을 리트리브하기 위한 명령들을 포함한다. 명령들은 XPU에 의해 지원되는 다양한 상이한 합성 연산들 각각을 특정하는 제어 정보로 XPU에 의해 저장된 데이터 구조에 액세스하기 위한 명령들을 포함할 수 있다. 또 추가적인 예들에서, 명령들은, XPU로 하여금 데이터를 다양한 레지스터들, 래치들 또는 플립-플롭들에 푸시하게 하고, 그리고 전술된 것의 콘텐츠들이 유효한지 여부를 결정하기 위한 명령들을 포함할 수 있다. 푸시된 데이터는 예컨대 합성 연산을 수행하는 것의 일부로서 프로세싱되는 값들 및/또는 마스크 값들을 포함할 수 있다.
[0068] 구성된 XPU(300)는 특정 합성 연산을 수행하기 위한 프로세싱 네트워크를 구현하는 것으로 언급된다. 예를 들어, XPU(300)는 다음과 같이 구성될 수 있는 48 개의 XPU 셀들을 포함한다: 18 개의 셀들은 산술 연산들을 위해 구성될 수 있고, 38 개의 셀들은 입력 값들을 비교하도록 구성되며(하나의 셀은 산술 및 비교 연산들 둘 모두를 위해 구성될 수 있음), 10개의 셀들은 입력을 우회하도록 구성된다. 새로운 명령들에 대한 응답으로, XPU(300)는 상이한 합성 연산을 수행하기 위해 새로운 프로세싱 네트워크를 이용하여 자신을 재구성할 수 있다.
[0069] XPU는 명령 세트 또는 확장에서 상이한 명령들로서 특정될 수 있는 다양한 상이한 연산 모드들에서 연산하도록 구성될 수 있다. 상이한 연산 모드들은 정렬, 복제들을 카운팅하는 것, 고유 값들을 식별하는 것, 스캐닝, 데이터를 파티셔닝하는 것, 및/또는 XPU에 입력된 데이터의 고유 값들을 식별하는 것을 위한 상이한 합성 연산들을 포함할 수 있다. 추가로, 명령들은 수행할 비교 또는 산술 연산의 타입, 예컨대 정렬 또는 스캐닝을 위한 부호 없는 정수 비교, 또는 부동-소수점 덧셈을 특정하는 피연산자들을 포함할 수 있다. 합성 연산들을 수행하기 위한 명령들에 대한 다른 피연산자들은 합성 연산의 출력이 XPU(300)로부터 어느 프로세싱 레인으로부터 나올지를 특정하는 것을 포함한다. 수신된 다른 피연산자들은, 예를 들어 데이터 프로세싱 레인들에 걸쳐 XPU(300)에 의해 수신된 데이터의 다수의 세그먼트들 각각을 정렬하기 위한, 입력 데이터의 세그먼트들에 대해 합성 연산들을 수행하기 위한 세그먼트 마커들을 포함할 수 있다.
[0070] 벡터 정렬 및/또는 벡터 복제 카운트를 수행할 때, XPU(300)는 홀수/짝수 병합 네트워크 및 값 셔플 네트워크를 포함하도록 구성된다. 예시적인 네트워크 구성들이 도 4 내지 도 8g를 참조하여 도시되고 설명된다. 네트워크 구성들은 XPU의 하나 이상의 스테이지들을 포함하며, 각각의 스테이지의 개개의 셀들 및 크로스바들은 하나 이상의 프리미티브 연산들을 수행하도록 구성된다. 벡터를 정렬한 후에, XPU(300)는 입력 벡터에서 비-고유 값들을 식별 및 제거하여, 고유 값들, 예컨대, 프로세싱된 입력 벡터에서 단 한번만 나타나는 값들만을 남길 수 있다.
[0071] XPU(300)는 레지스터 파일들(360A 및 360B)을 포함할 수 있다. 레지스터 파일들(360A-B)은 상이한 스테이지들 사이에서 데이터 프로세싱 레인들(300A-H)에 커플링되고, 데이터를 저장 및 리트리브하는 데 사용될 수 있다. 예를 들어, 스테이지 4에서의 프로세싱 셀들(307) 이후에 일부 데이터가 레지스터 파일(360B)에 저장될 수 있는 한편, XPU(300)에 의해 출력된 데이터는 레지스터 파일(360A)에 저장된다.
[0072] 도 4는 예시적인 XPU 프로세싱 셀(400) 및 대응하는 제어 셀(499)의 블록 다이어그램이다. 프로세싱 셀(400)은 제어 신호에 기반하여, 본원에 설명된 바와 같은 다수의 프리미티브 연산들을 실행하도록 구성될 수 있다. 제어 신호는 XPU를 프로그래밍하기 위한 명령 세트의 일부를 형성하는 오피코드를 표현할 수 있다.
[0073] XPU 프로세싱 셀(400)은 XPU 프로세싱 셀의 가능한 회로 구현의 예이다. 상이한 예들에서, XPU 프로세싱 셀(400)은 상이한 프리미티브 연산들을 수행하도록 구성된 회로를 구현하기 위한 더 많은 또는 더 적은 컴포넌트들을 포함할 수 있다. 일부 예들에서, XPU 프로세싱 셀(400)은 프리미티브 연산들의 서브세트에 대해서만 구성된 회로를 포함할 수 있다. 다른 예들에서, XPU 프로세싱 셀은 프리미티브 연산들 모두를 순차적으로 또는 병렬로 수행하도록 구성된 회로를 포함할 수 있다.
[0074] 각각의 프로세싱 셀은 또한 값들의 입력 튜플을 수신할 수 있다. 전달된 값들은 정수들 또는 부동-소수점 값들과 같은 개별적인 값들, 또는 정수들 또는 부동-소수점 값들의 튜플들 또는 리스트들 등과 같은 값들의 그룹들일 수 있다.
[0075] 소스 입력들은 통칭하여 "소스 입력들"인 x_source_1(401) 및 y_source_1(402)을 포함한다. 소스 입력들은 본원에 설명된 바와 같이, XPU에 의해 프로세싱된 벡터들의 엘리먼트들을 포함할 수 있다. 소스 입력들은 32-비트 부동 소수점 가산기(FP32 ADD)(403), 32-비트 부호 있는 정수 가산기(S32 ADD)(404), 32-비트 부동 소수점 비교기(FP32(405)) 및 32-비트 부호 있는 정수 비교기(U32 CMP)(406) 중 하나 이상을 통과할 수 있다. 가산기들(403, 404)은 소스 입력들의 합을 컴퓨팅하고 출력 합을 멀티플렉서(407)에 전달할 수 있다. 비교기들(405, 406)은 입력 값들을 비교하고, 최대/가장 작은 값을 출력으로서 비교 선택기(492)에 전달한다.
[0076] 비교 선택기(492)는 압축기들(405, 406)의 출력들뿐만 아니라 마스크 값들(x_mask(444) 및 y_mask(446))을 수신할 수 있다. 마스크 값들은 프로세싱 셀(400)에 의해 수신된 일부 또는 모든 입력을 마스킹하기 위해, 본원에 설명된 특정 합성 연산들의 일부로서 사용될 수 있다.
[0077] 비교 선택기(492)는 입력을 선택하고, 입력을 selection_output(472)으로서 멀티플렉서 제어기(440)에 전달한다. 비교 선택기(492)는 또한 비교기(CMP(426))로부터 출력을 수신할 수 있다. 비교기(426)는 레인 식별자들(x_lane_id(422) 및 y_lane_id(424))을 수신하고 레인 식별자를 비교하여 둘 중 더 큰 레인 식별자를 결정할 수 있다. 비교기(426)는 또한 자신의 출력을 멀티플렉서들(472, 476, 478, 및/또는 480)에 전달할 수 있다. 비교기(426)로부터의 출력은 x 레인에 대한 레인 식별자가 y 레인에 대한 레인 식별자보다 더 큰지 여부를 표시하는 부울 값(x_lane_id_greater_y_lane_id(490)로 지칭됨)일 수 있다. selection_output(472)은 도 8a를 참조하여 본원에 설명된 비교 선택기(492)의 구성에 기반하여 결정될 수 있다.
[0078] 멀티플렉서(407)는 (예컨대, 프로세싱 셀(400)이 우회를 수행하도록 구성되는 경우) 직접적으로 소스 입력들(401, 402) 및/또는 가산기(들)(403, 404)의 합(들)을 수신할 수 있다. 멀티플렉서(407)의 출력은 레지스터(408)에 저장되고, 출력으로서 y_source_1_out(484)으로서 프로세싱 셀에 전달될 수 있다. 멀티플렉서(407)는 또한 "x” 개의 데이터가 소싱되는 이전 출력 레인 식별자를 out_lane_id_pre(488)로서 수신할 수 있다.
[0079] 멀티플렉서들(472 및 476)은 복제 카운트들을 표현하는 값들을 x_dup_count(414) 및 y_dup_count(416)로서 수신할 수 있다. 도 8a를 참조하여 본원에 설명된 바와 같이, 프로세싱 셀(400)은, 예컨대 입력 벡터를 정렬하면서, 입력 벡터의 값들의 복제 카운트들을 컴퓨팅하도록 구성될 수 있다. 증분 값들(x_increment(418) 및 y_increment(420))은 또한 멀티플렉서들(478 및 480)에 의해 수신될 수 있고, 본 개시내용의 양상들에 따라 그리고 도 8a를 참조하여 본원에 설명된 바와 같이, 홀수/짝수 병합 네트워크로 복제 카운트를 수행하는 것의 일부로서 사용되는 값들이다.
[0080] 값들(430, 432, 434, 및 436)은 레인 카운트 계산기(428)에 전달된다. 레인 카운트 계산기(428)는 입력 레인들 중 더 큰 레인 카운트를 표현하는 값(larger_lane_count(430)), 입력 레인들 중 더 작은 레인 카운트에 대한 값(smaller_lane_count(432)), 증분 값들(418, 420) 중 더 큰 값(larger_lane_incr(434)), 및 증분 값들(418, 420) 중 더 작은 값(smaller_lane_incr(436))을 사용하여 입력 데이터 프로세싱 레인들(x 및 y)에 걸쳐 복제 값들의 카운트를 컴퓨팅할 수 있다. 레인 카운트 계산기(428)의 예시적인 구현들은 도 8a 및 "MAX" 셀들을 참조하여 본원에 설명된다.
[0081] XPU 프로세싱 셀(400)은 프로세싱 셀(400)과 동일한 스테이지의 크로스바로 전송되는 다수의 출력들을 생성할 수 있다. 레지스터(482)는 출력 값(y_source_2_out(486)), 예컨대, 프로세싱 레인(y)으로부터의 우회된 입력 값을 홀딩할 수 있다. 마스크 값들(444, 446)은 논리 OR 회로(442)를 통과할 수 있고, 그 논리 OR 회로(442)의 출력은 레지스터(487)에 저장될 수 있다. 프로세싱 셀은 프로세싱 셀에 대한 마스크 값을 y_mask_out(482)으로서 출력할 수 있다.
[0082] 멀티플렉서(448)는 레인 카운트 계산기(438)로부터의 smaller_lane_count(432) 및 디폴트 값 0를 수신하고 증분 값(y_incr_out(458))을 출력할 수 있다. 멀티플렉서(448)로의 출력은 레지스터(454)에 저장될 수 있다. 멀티플렉서(452)는 디폴트 값 0 및 복제 카운트들(414, 416)을 수신하고, 프로세싱 셀(400)에 대한 카운트 값(y_count_out(460))을 출력할 수 있다. 멀티플렉서(452)로의 출력은 레지스터(454)에 저장될 수 있다. 멀티플렉서(456)는 레인 식별자들(422 및 424)을 수신하고 레인 식별자(y_lane_id_out(462))를 출력할 수 있다. 멀티플렉서(456)로의 출력은 레지스터(458)에 저장될 수 있다.
[0083] 도 4의 파선들은 프로세싱 셀(400) 및 제어 셀(499)을 통과하는 제어 신호들을 표시한다. 제어 셀(499)은, 예컨대 오피코드(428)로서 명령을 수신할 수 있다. 제어 셀(499)은 예를 들어, 제어 신호들로서 명령들을 멀티플렉서 제어기(440) 및 레인 카운트 계산기(438)에 전송한다. 멀티플렉서 제어기(440)는 수신된 명령에 기반하여 멀티플렉서들(407, 448, 452, 및 456)에 신호들을 전송하도록 구성된다. 레인 카운트 계산기(438)의 출력은 또한 제어 셀(499)로부터의 수신된 신호에 기반한다. 제어 셀(499)에 의해 XPU 셀(400)에 전송된 명령들은 XPU 셀(400)의 스테이지 및 레인에 의존할 수 있다.
[0084] 멀티플렉서들(407, 448, 452, 및 456) 각각은 멀티플렉서 제어기(440)로부터, 예컨대 제어 신호들로서 수신된 명령들에 따라 구성될 수 있다. 수신된 신호들에 따라, 멀티플렉서들(407, 448, 452, 및 456)은 수신된 입력과 상이한 값들을 출력한다.
[0085] 프로세싱 셀(400)에 명령들을 전송하는 것 이외에도, 제어 셀(499)은 또한 (opcode_out(468)으로서) 다운스트림으로 오피코드(428)를 전달하고, (xbar_ctrl_out(470)로서) 제어 셀(499)과 동일한 스테이지에서의 다운스트림 크로스바로 명령을 전송할 수 있다. 크로스바에 전송되는 명령들은 크로스바로 하여금 고정된 패턴에 따라 수신된 입력을 퍼뮤트하게 할 수 있다. XPU의 각각의 제어 셀은 상이한 오피코드를 수신하고, 본원에 설명된 바와 같이 하나 이상의 프리미티브 연산들을 수행하도록 대응하는 프로세싱 셀을 구성할 수 있다. 구성된 프로세싱 셀들 및 크로스바는 합성 연산을 수행하기 위한 프로세싱 네트워크를 형성하며, 이들의 예들은 도 5 및 도 6을 참조하여 본원에 제공된다.
[0086] 레지스터들이 도 4에 설명되지만, 일부 예들에서, 프로세싱 셀(400)은, 예컨대 멀티플렉서 또는 산술 또는 비교 회로로부터의 데이터를 일시적으로 저장하기 위한 다양한 회로들 중 임의의 회로를 사용할 수 있다. 레지스터는 하나 이상의 플립-플롭들 또는 래치들을 포함할 수 있다.
예시적인 방법들
[0087] 벡터 스캔 및 벡터 세그먼트 스캔
[0088] 도 5는 본 개시내용의 양상들에 따른, XPU에 의해 수행되는 벡터 스캔 연산들을 위한 예시적인 XPU 구성(500)의 블록 다이어그램이다. 벡터 스캔은 입력 벡터에서의 엘리먼트들의 롤링 합(rolling sum)이다. 구성(500)을 사용하여 구성되는 경우 XPU는 벡터를 출력할 수 있으며, 여기서 각각의 엘리먼트는 엘리먼트의 인덱스까지의 입력 벡터에서의 엘리먼트들의 롤링 합이다. 예를 들어, 출력 벡터의 제1 엘리먼트는 입력 벡터의 제1 엘리먼트와 동일하고; 출력 벡터의 제2 엘리먼트는 입력 벡터의 제1 엘리먼트 플러스 입력 벡터의 제2 엘리먼트의 합과 동일하고; 출력 벡터의 제3 엘리먼트는 입력 벡터의 제1, 제2 및 제3 엘리먼트의 합과 동일한 식이다.
[0089] 구성(500)은 또한 벡터 스캔들 이외에도 벡터 세그먼트 스캔들에 대해 사용될 수 있다. 구성(500)은 벡터의 세그먼트들을 결정하기 위해 마스크 비트들의 세트를 수신한다. XPU 셀들은 마스크 비트들을 수신하고, 그리고 다운스트림 XPU 셀이 마스크 비트들을 수신하여 개개의 XPU 셀의 값과 동일한 세그먼트에서 입력 엘리먼트를 수신하는지 여부에 따라 데이터를 그 다운스트림 XPU 셀로 우회 또는 번역하도록 구성된다.
[0090] 구성(500)은 출력 튜플, 예컨대, 도 4에 도시된 바와 같은 y_source_1_out, y_mask_out, y_incr_out, y_count_out, 및 y_lane_id_out을 이전 스테이지의 상이한 레인들로부터 현재 레인에서의 입력 튜플, 예컨대, x_source_1, x_mask, x_incr, x_count, 및 x_lane_id로 퍼뮤트하는 크로스바들을 도시한다. 도 5에서, 점선들은 프로세싱 레인들(500A-H)로 스트리밍 다운되는 데이터를 표현한다. 실선들은 구성(500)에서 스테이지들 사이에서 데이터가 어떻게 퍼뮤트되는지를 표현한다. 구성(500)은 4-사이클 구성이다. 4 개 초과의 크로스바들을 갖는 XPU 상에 구현되는 경우, 구성(500)의 일부로서 사용되지 않는 스테이지들에서의 크로스바들은 각각의 레인을 통해 데이터를 우회하도록 구성될 수 있다.
[0091] 스테이지(505)에서 시작하여, 레인(500A)에서의 입력 엘리먼트는 우회되고, 레인들(500A-G)에서의 각각의 엘리먼트는 개개의 셀(501B-H)에 전달된다. 셀(501A)은 레인(500A)으로부터 다음 스테이지로 입력 엘리먼트를 우회한다. 셀들(501B-H)은 시프트된 레인으로부터의 입력 엘리먼트를, 각각의 개개의 셀이 상주하는 레인의 입력 엘리먼트와 합산한다. 셀들(501A-H) 각각의 출력은 다운스트림으로 전달된다.
[0092] 스테이지(510)에서, 레인들(500A-E)의 입력 엘리먼트들은 크로스바(505A)로부터, 입력 엘리먼트의 레인으로부터 2만큼 떨어진 개개의 레인으로 퍼뮤트된다. 셀들(502A 및 502B)은 수신된 입력을 다운스트림으로 다음 스테이지로 우회한다. 셀들(502C-G)은 자신들의 개개의 레인들의 입력 엘리먼트를 개개의 퍼뮤트된 입력 엘리먼트와 합산한다. 셀들(502A-H) 각각의 출력은 다운스트림으로 전달된다.
[0093] 스테이지(515)에서, 셀들(503A-C)은 각각의 셀의 개개의 레인 상의 레지스터들(523)로 자신들의 입력을 우회한다. 셀들(503D-H)은 크로스바(510A)로부터 그리고 개개의 레인에 대해 3만큼 떨어진 레인으로부터, 시프트된 입력을 수신한다. 셀들(503D-H)은 자신들의 개개의 레인의 입력 엘리먼트 그리고 수신된 시프트된 입력과의 합을 생성한다. 각각의 셀(503A-H)의 출력은 다운스트림으로 레지스터들(523)로 전달되고, 후속하여 XPU의 출력 벡터의 일부로서 전달된다.
[0094] 스테이지(520)에서, 스테이지(515)로부터의 출력 데이터는 XPU의 다운스트림의 출력으로서 전달되기 전에 레지스터 파일들(523)에 일시적으로 저장될 수 있다.
[0095] 벡터 정렬 및 벡터 복제 카운트
[0096] 도 6은 본 개시내용의 양상들에 따른, XPU에 의해 수행되는 벡터 정렬 및 벡터 복제 카운트 연산들을 위한 예시적인 XPU 구성(600)의 블록 다이어그램이다. 구성(600)은 6 개의 스테이지들(605-630)을 갖는다.
[0097] 벡터 정렬을 수행하기 위해, XPU는 키들 및 값들의 튜플들을 수신할 수 있다. 예시적인 입력은 다음과 같을 수 있다:
키들
= {5,
5,
10,
1,
512,
8,
1023,
650}
값들
= {a,
b,
c,
d,
e,
f,
g,
h}
[0098] 위의 예시적인 입력으로 벡터 정렬을 수행하기 위한 XPU에 의한 예시적인 출력은 다음과 같다:
키들
= {1,
5,
5,
8,
10,
512,
650,
1023}
값들
= {d,
a,
b,
f,
c,
e,
h,
g}
동점(tie)들의 경우, 더 높은 넘버링된 VPU 레인으로부터 소싱된 키가 동점 값들 중 더 큰 값으로 선택된다. 예컨대, 레인들 0과 1 사이의 동점의 경우, 레인 1로부터의 키가 더 높은 넘버링된 VPU 레인으로부터 오는 것으로서 선택된다.
[099] 벡터 복제 카운트를 수행하기 위해, XPU는 값들의 벡터를 수신하고, 출력으로서 벡터를 생성할 수 있으며, 여기서 각각의 엘리먼트는 고유 값이 그 엘리먼트까지의 입력 벡터에서 나타나는 횟수에 대응한다.
[0100] 예시적인 입력은 다음과 같을 수 있다:
값들
= {10,
5,
10,
5,
10,
5,
5,
10}
[0101] 예시적인 출력은 다음과 같을 수 있다:
카운트
= {1,
1,
2,
2,
3,
3,
4,
4}
[0102] 각각의 스테이지에서, 프로세싱 셀들은 MIN 또는 MAX 셀들로서 구성되고, 도 7 및 도 8a 내지 도 8h를 참조하여 더 상세히 설명되는 홀수/짝수 병합 정렬 네트워크 및 값 셔플 네트워크의 일부를 형성한다. 구성(600)은 6-스테이지 구성이다. 구성을 구현하는 XPU가 6 개 초과의 크로스바들을 갖는 경우, 나머지 크로스바들은 입력 엘리먼트들을 우회하도록 세팅될 수 있다. 본 개시내용의 양상들에 따르면, 동일한 XPU 구성(600)은 각각의 벡터에 대한 복제 엘리먼트들의 카운트를 생성하면서 벡터 엘리먼트들을 정렬하는 것을 가능하게 한다. 벡터 정렬 및 복제 카운팅을 위해 구성된 XPU의 셀들 및 크로스바들에 걸친 데이터의 스트리밍은 도 7 및 도 8a 내지 도 8h를 참조하여 설명된다.
[0103] 결과적인 출력 벡터는 값들의 비-고유 인스턴스들을 제거하기 위해 추가로 프로세싱될 수 있다. 복제 카운트 및 정렬된 리스트가 주어지면, XPU는 다음과 같은 예시적인 출력을 생성하기 위해 리스트를 반복하고 비-고유 값들을 제거할 수 있다:
[0104] 고유 값들
= {1, 2, 3, 4}
[0105] XPU 구성(600)은 정렬 및 복제 카운팅 둘 모두를 가능하게 하기 때문에, XPU는 입력 벡터에 존재하는 각각의 값의 단일 인스턴스만을 포함하는 "고유화된(uniquified)" 출력 벡터를 추가로 생성할 수 있다.
[0106] 도 7은 홀수/짝수 병합 네트워크(705) 및 값 셔플 네트워크(710)를 포함하도록 구성된 예시적인 XPU(700)의 블록 다이어그램이다. 키들 및 값들의 튜플들은 VPU 레인들(700A-N)을 통해 홀수/짝수 병합 네트워크(705)로 전달되며, 여기서 키들이 정렬된다. XPU(700)는 8 개의 데이터 프로세싱 레인들을 포함하지만, 다른 예들에서, XPU(700)는 더 적거나 더 많은 데이터 프로세싱 레인들, 예를 들어, 2의 거듭제곱과 동일한 수의 데이터 프로세싱 레인들을 가질 수 있다. 이러한 예들에서, 홀수/짝수 병합 네트워크(705) 및 값 셔플 네트워크(710)는 그에 따라 그리고 일반성의 손실 없이 팽창 또는 압축된다.
[0107] 값들은 정렬된 네트워크(705)를 통해 점선들에 의해 표시된, 정렬된 네트워크(705)에서의 키들과 함께 이동하는 것이 아니라, 대신에 값 셔플 네트워크(710)를 직접 통과하여 자신들의 대응하는 키들로 재배열된다. 입력 벡터들의 엘리먼트들이 키-값 튜플들로서 설명되지만, 비교될 수 있는 임의의 타입의 데이터, 이를테면, 정수 값들, 부동 소수점 값들 등이 XPU에 대한 입력으로서 수신될 수 있다는 것이 이해된다.
[0108] 일부 예들에서, 배처의 홀수/짝수 병합 정렬은 홀수/짝수 병합 네트워크(705)에서 구현될 수 있다. 도 8a를 참조하여 본원에 설명된 바와 같이, 홀수/짝수 병합 네트워크는 입력 키-값 튜플들을 프로세싱하고 키에 의해 튜플들을 정렬하기 위한 다수의 스테이지들을 포함할 수 있다.
[0109] 튜플들이 키에 의해 정렬된 후에, 값 셔플 네트워크(710)는 값들을 그들의 연관된 키들에 대응하는 레인들에 셔플한다. 값 셔플 네트워크(710)는 8x8 32-비트 크로스바일 수 있다. 크로스바에 대한 입력은 32-비트 값 및 레인 식별자이다. 값 셔플 네트워크(710)는 레인 식별자에 따라 다수의 모드들을 지원할 수 있다. 예를 들어, 값 셔플 네트워크(710)는 소스 레인 식별자가 제공될 때 대응하는 소스 레인으로부터 32비트 값을 라우팅하도록 구성된다. 다른 모드에서, 목적지 레인 식별자는 32-비트 값을 적절한 출력 레인으로 라우팅하는 데 사용된다. 벡터 정렬의 경우, 값 셔플 네트워크(710)는 소스 레인 식별자 모드로 세팅될 수 있는 한편, 벡터 복제 카운팅에서, 본원에 설명된 바와 같이, 값 셔플 네트워크(710)는 목적지 레인 식별자 모드로 세팅된다. 벡터 복제 카운팅의 경우, 값 셔플 네트워크(710)는 카운트 값들을 그들의 대응하는 값들과 셔플한다. 연산 모드는 XPU의 제어 셀들에 의해 제공되는 명령들을 반송하는 하나 이상의 신호들로서 특정될 수 있다.
[0110] 도 8a는 결합 병합 정렬 및 복제 카운트를 수행하기 위한 홀수/짝수 병합 정렬 네트워크(705)의 예시적인 XPU 구성(800)의 흐름도이다. 예시적인 XPU는 0 내지 7로 라벨링된 8 개의 프로세싱 레인들을 갖는다. 홀수/짝수 병합 정렬 네트워크(705)는 6 개의 스테이지들을 갖는다. 6 개의 스테이지들은 스테이지 1(801A)(1x1 홀수/짝수 병합), 스테이지 2(801B)(2x2 병합), 스테이지 3(801C)(2x2 홀수/짝수 병합), 스테이지 4(801D)(병합 페이즈 1), 스테이지 5(801E)(병합 페이즈 2) 및 스테이지 6(홀수/짝수 병합)(각각, "스테이지 1", "스테이지 2", "스테이지 3", "스테이지 4", "스테이지 5" 및 "스테이지 6")이다.
[0111] 각각의 스테이지에서, XPU의 프로세싱 셀들은, 2 개의 입력 피연산자들 중 최소치를 결정하고, 더 작은 피연산자가 수신되게 한 데이터 프로세싱 레인의 레인 식별자를 갖는 더 작은 피연산자를 리턴하기 위한 프리미티브 연산을 수행하도록 구성된다. 도 8a 내지 도 8h에 표시된 각각의 화살표에서, XPU는 입력 피연산자들을 비교하도록 구성된 프로세싱 셀들을 포함한다. 2 개의 입력 피연산자들 중 최소치를 결정하도록 구성된 프로세싱 셀은 MIN 셀로 지칭되는 한편, 프로세싱 셀은 2 개의 입력 피연산자들 중 최대치를 결정하도록 구성된다.
[0112] MIN 셀의 예시적인 의사코드 구현이 표 1에 도시된다. 이러한 그리고 다른 예를 위해, 의사코드는 도 4를 참조하여 도시되고 설명된 바와 같은 변수들 및 입력/출력 값들을 지칭할 수 있다.
표 1
[0113] 표 1에 도시된 바와 같이, x 및 y는 각각 레인 식별자들(x_lane_id 및 y_lane_id)을 갖는 대응하는 레인들을 통해 전달된 값들이다. 예컨대, 스테이지 1에서, 레인 0은 값 x를 전달할 수 있고, 레인 1은 값 y를 전달할 수 있다. 표 1의 라인 1에서, 변수 x_less_than_y_ordered는 부울 값이다. 변수는 2 개의 조건들 하에서 참이다. 첫째, 변수는, 값들 x 및 y가 서로 동일하고 x 값을 갖는 레인에 대한 레인 식별자가 y 값을 갖는 레인에 대한 레인 식별자보다 더 크지 않을 때 참이다. 이러한 조건은, 더 낮은 레인 식별자를 갖는 레인을 비교된 값들의 최소치로서 세팅함으로써, x가 y와 동일할 때 동점들을 깨기 위해 세팅된다. 둘째, 변수는 값 x가 값 y보다 작으면 참이다. 변수 x_less_than_y_ordered가 참이면, 라인들 3 내지 5에서, MIN 셀은 x, y의 최소 값으로서 x를 출력하고, 또한 x_lane_id 레인 식별자를 출력한다. 그렇지 않으면, 라인들 7 내지 9에 도시된 바와 같이, MIN 셀은 y 및 y_lane_id를 출력한다.
[0114] 프로세싱 셀들은 또한 2 개의 입력 피연산자들의 최대치를 결정하기 위한 프리미티브 연산을 수행하도록 구성될 수 있고, MAX 셀들로 지칭된다. 프리미티브 연산들 둘 모두에서, 하나의 피연산자는 개개의 프로세싱 셀에 대한 데이터 프로세싱 레인으로부터 오는 한편, 제2 피연산자는 다른 데이터 프로세싱 레인으로부터 크로스바를 통해 제공된다.
[0115] MAX 셀의 예시적인 의사코드 구현이 표 2에 도시된다:
표 2
[0116] 표 2의 라인 1에서, 변수 x_greater_than_y_ordered는, 값 x가 값 y와 동일하고 값 x에 대응하는 레인에 대한 레인 식별자가 값 y에 대응하는 레인에 대한 레인 식별자보다 클 때; 또는 값 x가 값 y보다 클 때 참인 부울 값이다. MAX 셀은, x_greater_than_y_ordered가 참일 때 x 및 레인 식별자 x_lane_id를 출력하고, 그렇지 않으면 y 및 레인 식별자 y_lane_id를 출력한다. 제1 조건은, 값 x가 값 y와 동일한 경우의 타이브레이커(tiebreaker)이다.
[0117] 입력 엘리먼트들에 대한 복제 카운트들을 또한 획득하도록 홀수/짝수 병합 정렬 네트워크를 구성하기 위해, 다양한 스테이지들에서의 MAX 셀들은 현재 설명된 바와 같이 구성된다. 복제 카운트를 구현하기 위한 MAX 셀들에 대한 수정들은 실질적으로 타이밍 및 로직 복잡도를 추가하지 않으며, 일부 예들에서 XPU에 의해 프로세싱되는 현재 워크로드에 기반하여 인에이블 또는 디스에이블될 수 있다. XPU의 동일한 구성의 일부로서 벡터 정렬 및 복제 카운트 연산들을 결합함으로써, XPU는, 별개로 구성된 하드웨어 없이 그리고/또는 연산들 사이에 XPU를 재구성하지 않고서, 연산들 둘 모두에 대한 값들을 더 효율적으로 획득할 수 있다. MAX 셀은, MAX 셀이 홀수 및 짝수 엘리먼트들이 비교 및 정렬되는 홀수/짝수 병합 스테이지의 일부인지 또는 홀수 엘리먼트들이 짝수 엘리먼트들과 별개로 비교되는 홀수-홀수/짝수-짝수 병합 스테이지의 일부인지에 따라 상이한 연산들을 수행한다. 다음의 설명에서, "값"이라는 용어는 일반적으로, 정렬되는 엘리먼트들을 지칭하기 위해 사용된다. 도 8b 내지 도 8h를 참조하여 도시되고 설명된 바와 같이, 정렬된 값은 키-값 쌍들의 튜플들의 키들일 수 있다.
[0118] 1x1 홀수/짝수 병합 스테이지 1에서, 인접 엘리먼트들은 스테이지 1에서 4 개의 파선 박스들에 의해 도시된, 길이 2의 4 개의 정렬된 리스트들을 형성하도록 비교된다. 2x2 홀수-홀수/짝수-짝수 병합 스테이지 2에서, 인접한 정렬된 리스트들의 홀수 엘리먼트들이 비교된다. 스테이지 2에서 2 개의 파선 박스들에 의해 도시된, 인접한 정렬된 리스트들의 짝수 엘리먼트들이 또한 비교된다. 스테이지 3은, 각각의 i번째 엘리먼트가 i+1번째 엘리먼트와 병합되는 2x2 홀수/짝수 병합 스테이지이다. 스테이지들 4 및 5는 4x4 홀수-홀수/짝수-짝수 병합의 페이즈들 1 및 2이다. 스테이지 4에서, 인접한 정렬된 리스트들의 제1 세트의 홀수 엘리먼트들이 비교된다. 제1 세트의 짝수 엘리먼트들이 또한 비교된다. 스테이지 5에서, 인접한 정렬된 리스트들의 제2 세트의 홀수 엘리먼트들이 비교된다. 제2 세트의 짝수 엘리먼트들이 또한 비교된다. 스테이지 6은, i번째 엘리먼트가 i+1번째 엘리먼트와 정렬되는 4x4 홀수/짝수 병합 페이즈이다. 스테이지 6의 출력은 길이 8의 하나의 정렬된 리스트이다. 정렬 후에, 키에 의한 정렬된 튜플들은 값 셔플 네트워크를 통과하여, XPU에 의해 컴퓨팅된 카운트들을 자신들의 대응하는 키들에 셔플한다. 각각의 스테이지는 도 8b 내지 도 8h를 참조하여 더 상세히 설명된다.
[0119] 스테이지 1에서, XPU는 레인들 0, 1, 2, 3, 4, 5, 6, 및 7에서의 값들을 비교한다. 도 8a의 스테이지 1에서의 파선 블록들은, XPU가 인접 레인들의 쌍들의 값들을 정렬한 후의 4 개의 정렬된 리스트들을 표현한다. 더 낮은 넘버링된 레인에서의 값이 더 높은 넘버링된 레인에서의 값보다 더 높으면, XPU는 레인들 사이에서 값들을 스와핑한다. 출력 레인 l의 경우, 카운트(Cl)는 레인 l에서의 값과 동일한 값을 갖는 레인들의 세트를 통과하는 값들의 합이다. 레인들의 세트(Sl)는, 그 식별자가 현재 레인 이하인 레인들을 포함한다. 예를 들어, 레인 5에 대한 세트 Sl는 레인 1 내지 4를 포함할 수 있지만, 레인 6을 포함하지 않을 수 있다.
[0120] 복제 카운트를 컴퓨팅하기 위해, 스테이지 1에서의 MAX 셀들은 상위 레인의 카운트를 하위 레인의 카운트보다 하나 더 많게 세팅하도록 구성될 수 있다. 상위 및 하위 레인들은, 그 카운트가 증분되는 값을 소싱하는 VPU 레인에 기반하여 결정될 수 있다. 홀수/짝수 병합 스테이지에서 정렬 및 복제 카운트를 구현하기 위한 예시적인 의사코드 구현이 아래의 표 3에 도시된다:
표 3
[0121] 표 3에서, MAX 셀은 라인 1에 따라 변수 x_greater_than_y_ordered의 부울 값을 결정한다. 라인들 3 내지 9에 따르면, MAX 셀은 먼저, 값들 x 및 y를 각각 스트리밍하는 레인들에 대해 x_lane_id 식별자가 y_lane_id보다 큰지를 결정한다. 변수 x_lane_id_greater_than_y_lane_id가 참이면, MAX 셀은 count_large 변수를 값 x를 스트리밍하는 레인의 카운트 변수 x_count로 세팅하고, count_small 변수를 값 y를 스트리밍하는 레인의 카운트 변수 y_count로 세팅한다. 그렇지 않으면, 라인들 7 내지 9에 도시된 바와 같이, 변수 count_large는 y_count로 세팅되고, 변수 count_small은 x_count로 세팅된다.
[0122] 라인 11에 따르면, MAX 셀은 변수 count_large에 대한 값을 증분시킨다. 라인들 13 내지 21에 따르면 그리고 변수 x_greater_than_y_ordered에 대한 값에 기반하여, 입력 값들 x 및 y가 동일할 때마다(라인들 16, 21), 증분된 count_large 변수가 출력되거나, 그렇지 않으면 2 개의 값들 중 더 큰 값의 개개의 카운트가 출력된다. 예컨대, 술어 x_equal_y가 라인 16에서 참이 아니고 x_greater_than_y_ordered가 참이면, 라인 16에서의 out_count =x_count가 출력된다. 유사하게, 술어 x_equal_y가 라인 16에서 참이 아니고 x_greater_than_y_ordered가 참이 아니면, 라인 16에서의 out_count = y_count가 출력된다.
[0123] 스테이지 2는 2x2 홀수-홀수/짝수-짝수 병합 스테이지이다. 스테이지 1로부터의 4 개의 정렬된 리스트들로부터의 인접한 정렬된 리스트들의 홀수 엘리먼트들이 비교되고 필요하다면 스와핑된다. 도 8a에 도시된 바와 같이, 레인 0의 값은 레인 2의 값과 비교되고, 레인 1의 값은 레인 3과 비교되고, 레인 4의 값은 레인 6과 비교되고, 레인 5의 값은 레인 7과 비교된다.
[0124] 홀수-홀수/짝수-짝수 스테이지에서, 짝수 레인 l(예컨대, 레인 0, 레인 2, 레인 4 등)에 대한 카운트 Cl는 레인들의 세트 Sl에서의 값들의 합이다. 레인들의 세트는, 현재 레인 이하의 짝수 레인들에 대해 그리고 레인 l과 동일한 값 Vf을 갖는 레인들로서 정의된다.
[0125] 2x2 홀수-홀수/짝수-짝수 병합 스테이지에서 레인 l에 대한 복제 카운트를 컴퓨팅하기 위해, MAX 셀은 비교된 레인들에서의 동일한 값들의 카운트들을 가산하고 그 합을 상위 레인에 할당한다. 하위 및 상위 레인들은 카운팅되는 값을 소싱한 레인에 기반하여 결정된다.
[0126] 스테이지 3은 2x2 홀수/짝수 병합 스테이지이다. 이 스테이지에서의 XPU는 이전 스테이지로부터의 2 개의 리스트들을 병합하여, 레인들 1 및 2의 값들과 레인들 5 및 6의 값들을 비교한다. 2x2 홀수/짝수 병합 스테이지에서 정렬 및 복제 카운트를 구현하기 위한 예시적인 의사코드 구현이 아래의 표 4에 도시된다:
표 4
[0127] 표 4에서, 변수 count_large는 비교된 레인들 x 및 y로부터의 카운트들의 합이다. MAX 셀은 출력하는데, 입력 값들 x 및 y이 동일할 때마다(라인들 16, 21) count_large 변수가 출력되거나, 그렇지 않으면 2 개의 값들 중 더 큰 값의 개개의 카운트가 출력된다. 예컨대, 술어 x_equal_y가 라인 16에서 참이 아니고 x_greater_than_y_ordered가 참이면, 라인 16에서의 out_count =x_count가 출력된다. 유사하게, 술어 x_equal_y가 라인 16에서 참이 아니고 x_greater_than_y_ordered가 참이 아니면, 라인 16에서의 out_count = y_count가 출력된다.
[0128] 스테이지 4는 4x4 홀수/짝수 병합 스테이지에 대한 제1 페이즈이다. 출력 레인들의 세트는 짝수 레인들의 세트 및 홀수 레인들의 세트를 포함하는 것으로 설명될 수 있다. 제1 페이즈는 2x2 홀수-홀수/짝수-짝수 병합 정렬을 참조하여 본원에 설명된 바와 같이 입력 정렬된 리스트들을 병합하는 것과 유사하다.
[0129] 스테이지 5는 4x4 홀수/짝수 병합을 위한 제2 페이즈이다. 예컨대, 도 8a에 도시된 바와 같이, 정렬 및 병합될 짝수 레인들은 레인들 {2, 4}이고, 정렬 및 병합될 홀수 레인들은 {3, 5}이다. MAX 셀은, 그렇지 않으면 4x4 홀수/짝수 병합 동안 출력 레인에 우연히 가산되었을 수 있는 다수의 복제 카운트들을 관리 및 핸들링하도록 구성된다. 레인 2에 대한 복제 카운트는 레인 6으로부터의 C6 또는 레인 2로부터의 C2일 수 있다(왜냐하면 레인들 2와 6은 페이즈 1 동안 비교되기 때문임). 레인 4에 대한 복제 카운트는 레인 0으로부터의 C0, 레인 4로부터의 C4, 또는 C4 + C0일 수 있다. 페이즈 2에서, 레인들 {2, 4}가 병합될 때, 가능한 출력 조합들은 다음과 같다:
[0130] 페이즈 1에서 4x4 홀수-홀수/짝수-짝수 병합 스테이지에서 복제 카운트를 구현하기 위한 예시적인 의사코드 구현이 표 5에 도시된다:
표 5
[0131] 구현은 예를 들어, 표 4에 도시된 바와 같은 2x2 병합과 유사하지만, 위에서 설명된 Cm 값에 래칭된 out_incr에 의해 표현된 값을 갖는다. out_incr 값은 페이즈 2에서의 4x4 홀수-홀수-/짝수-짝수 병합 스테이지의 최종 복제 카운트를 정정하기 위해 사용된다.
[0132] 아래의 페이즈 2에서 도시되는 4x4 홀수-홀수/짝수-짝수 병합 스테이지에서 복제 카운트를 구현하기 위한 예시적인 의사코드 구현이 표 6에 도시된다:
표 6
[0133] 라인들 3-13에서, 더 큰 증분 값 incr_large은 더 큰 레인의 증분 값으로 세팅되고, 더 작은 증분 값 incr_small은 더 작은 레인의 증분 값으로 세팅된다. 라인들 15-18에서, 더 큰 레인 count_large의 카운트는 이전 스테이지 1로부터의 잠재적인 가산된 복제 값을 보상하도록 조정된다.
[0134] 스테이지 6에서, 4x4 홀수/짝수 병합이 이루어진다. 스테이지 3에서의 2x2 홀수/짝수 병합과 유사하게, i번째 및 i+1번째 엘리먼트들이 비교되고 병합된다. 출력은 길이 8의 하나의 정렬된 리스트이다.
[0135] 스테이지 6 후에, 값 셔플 네트워크는 구성된 XPU에서 수행되는 합성 연산들에 기반하여 값들을 셔플한다. 벡터 정렬 연산의 경우, 소스 레인 모드에서의 값 셔플 네트워크는, 대응하는 정렬된 키가 정렬 이후 결국 어디에 있었는지에 기반하여, 값들을 그들의 오리지널 레인으로부터 적절한 목적지 레인으로 라우팅한다. 복제 카운트 연산들의 경우, 목적지 레인 모드에서의 값 셔플 네트워크는, 대응하는 카운팅된 값이 정렬 이후 결국 어디에 있었는지에 기반하여, 각각의 레인의 카운트를 오리지널 레인으로부터 적절한 목적지 레인으로 라우팅한다.
[0136] 일부 예들에서, XPU는 최소 또는 최대 값들에 대한 입력을 각각 스캐닝하기 위해 부동 소수점 MIN/MAX 스캔들을 수행하도록 구성될 수 있다. XPU는 또한, 예컨대 최대 또는 최소 인덱스를 식별하기 위해, 수신된 튜플들의 인덱스들을 프로세싱 레인들에 걸쳐 스캐닝하도록 구성될 수 있다. 스캐닝 연산들을 위한 합성 연산들을 수행하는 것의 일부로서, 프로세싱 셀들은, 예컨대, 32-비트 부동 소수점 값들과 같은 부동 소수점 값들 사이, 또는 부호 없는 정수들 사이의 비교들을 수행하도록 구성될 수 있다. 비교를 위한 프리미티브 연산들은 또한, 본원에 설명된 바와 같이, 복제 값들을 정렬 또는 카운팅하는 것과 같은 다른 합성 연산들을 위해 사용될 수 있다.
[0137] 도 8b 내지 도 8g는 예시적인 입력에 대한 병합 정렬 네트워크(800A)의 각각의 스테이지를 도시한다. 설명의 목적들을 위해 정렬된 예시적인 키들은 다음과 같다:
키들
= {5,
6,
7,
6,
5,
5,
5,
5}
레인 식별자들
= {0,
1,
2,
3,
4,
5,
6,
7}
각각의 개개의 키를 스트리밍하는 레인에 대한 레인 식별자들이 레퍼런스를 위해 제공된다.
[0138] 도 8b는 XPU의 홀수/짝수 병합 네트워크(800)의 예시적인 스테이지 1(801A)을 도시한다. 스테이지 1(801A)에서, 인접 데이터 프로세싱 셀들로부터의 키들이 개개의 MIN 셀 및 MAX 셀에 의해 프로세싱된다. 예컨대, 스테이지 1에서, 레인 0에서의 MIN 셀은 레인들 0 및 1의 최소 값들을 결정하고, 레인 1에서의 MAX 셀은 레인들 0 및 1의 키들의 최대치를 결정한다. 스테이지 1에서의 크로스바는, 레인 1에서의 키를 MIN 셀에 제공하고, 레인 0에서의 키를 MAX 셀에 제공하도록 구성된다. 스테이지 1의 출력은 각각 길이 2의, 키들의 4 개의 정렬된 리스트들이다. 예에 따르면, 레인들 2 및 3은 자신들의 키들이 스와핑되게 한다. 다른 쌍들의 레인들, 즉, 레인들 0과 1, 레인들 4와 5, 그리고 레인들 6과 7에 대한 키들은, 레인 쌍들에 대한 개개의 키들이 이미 정렬되어 있기 때문에, 스와핑 없이 스테이지 1을 통과한다. 레인들 5 및 7에서의 카운트는 증분된다(개개의 비교된 레인들 중 더 높은 레인들은 동일한 키를 가짐).
[0139] 도 8c는 본 개시내용의 양상들에 따른, XPU의 홀수/짝수 병합 네트워크의 예시적인 스테이지 2(800C)를 도시한다. 제2 스테이지에서, 인접 리스트들이 병합되고, 스테이지 1로부터의 정렬된 리스트들의 홀수로 넘버링된 포지션들에서의 키들이 비교된다. 정렬된 리스트들의 짝수로 넘버링된 포지션들에서의 키들이 유사하게 비교된다. 스테이지 2에서, 예컨대, 레인들 0 및 1에서의 프로세싱 셀들은 MIN 셀들인 한편, 레인들 2 및 3에서의 프로세싱 셀들은 MAX 셀들이다. 비교된 쌍들 (4, 6), (5, 7)의 더 높은 레인들이 모두 키 5를 갖기 때문에, 레인들 6 및 7에 대한 복제 카운트들은 증분된다.
[0140] 도 8d는 본 개시내용의 양상들에 따른, XPU의 홀수/짝수 병합 네트워크의 예시적인 스테이지 3을 도시한다. 제3 스테이지에서, 각각의 정렬된 리스트의 중간 레인들에서의 나머지 키들이 비교되는데, 즉, 레인들 (1, 3) 및 (5, 6)이 비교된다. 레인 3에 대한 복제 카운트는 6=6이기 때문에 증분되고, 레인 6에 대한 복제 카운트는 5=5이기 때문에 증분된다.
[0141] 도 8e는 본 개시내용의 양상들에 따른, XPU의 홀수/짝수 병합 네트워크의 예시적인 스테이지 4를 도시한다. 제4 스테이지는 4x4 짝수-짝수/홀수-홀수 병합의 페이즈 1이다. 레인 0, 4; 1, 5; 2, 6; 그리고 3, 7은 필요에 따라 비교되고 스와핑된다. 레인 4에 대한 복제 카운트가 증분된다(레인 1은 5의 값을 갖고, 레인 4는 5의 값을 가짐). 레인 4에 대한 증분 값은 또한 1(더 큰 레인 4의 카운트)로 세팅된다. 이 예에서, 모든 비교된 쌍들이 스와핑된다.
[0142] 도 8f는 본 개시내용의 양상들에 따른, XPU의 홀수/짝수 병합 네트워크의 예시적인 스테이지 5를 도시한다. 레인들 6 및 4로부터의 값들뿐만 아니라, 레인들 7 및 1로부터의 값들이 비교(및 스와핑)된다. 레인 6에서의 카운트는 1만큼 증분되는데, 이는 레인들 4 및 6이 정렬된 리스트의 동일한 절반에 속하기 때문이다.
[0143] 도 8g는 본 개시내용의 양상들에 따른, XPU의 홀수/짝수 병합 네트워크의 예시적인 스테이지 6을 도시한다. 레인들 5 및 4로부터의 값들이 비교되고 스와핑된다. 레인들 6 및 7로부터의 값들이 비교되고, 레인들 1 및 3으로부터의 값들이 비교된다. 레인들 4, 7, 및 3에 대한 카운트들은 증분된다.
[0144] 도 8h는 본 개시내용의 양상들에 따른, XPU의 홀수/짝수 병합 네트워크의 예시적인 값 셔플 네트워크를 도시한다. 셔플링 후에, 카운트들은 오름차순으로 출력된다: {1, 1, 1, 2, 2, 3, 4, 5}.
다른 예시적인 합성 연산들
[0145] 벡터 정렬 및 복제 카운트 이외에도, XPU는 현재 설명되는 다양한 다른 연산들을 수행하기 위해 셀들 및 크로스바들의 프로세싱 네트워크로 구성될 수 있다. 연산들은, 예컨대, 벡터 파티션, 벡터 히스토그램, 벡터 퍼뮤트, 벡터 시프트 삽입, 벡터 수집, 및 벡터 스캐터를 포함한다.
[0146] 벡터 파티션
[0147] XPU는 다수의 빈들을 정의하는 값들의 범위에 따라 입력 벡터를 엘리먼트별로 파티셔닝하도록 구성될 수 있다. XPU는 입력 엘리먼트를, 그 값이 입력 엘리먼트 이상인 최소 빈으로 파티셔닝한다. XPU는, 입력 희소 행렬을 하나의 포맷으로부터 다른 포맷으로, 이를테면, 압축 행 저장소(CRS: compressed row storage)로부터 좌표 리스트(COO: coordinate list) 포맷으로 변환하기 위한 합성 연산의 일부로서, 예컨대 본원에 설명된 바와 같이, 벡터 파티션을 수행할 수 있다.
[0148] 각각의 데이터 프로세싱 레인에서, 개개의 프로세싱 셀은 파티셔닝될 입력 값, 이를테면 부호 없는 정수를 수신한다. 입력 값은 벡터 또는 다른 데이터 구조의 엘리먼트일 수 있다. 프로세싱 셀은 또한 입력 값에 대한 마스크 값 및 빈 값들의 튜플을 수신한다. 빈 튜플(bin tuple)의 엘리먼트들 및 입력 값들 각각은 동일한 데이터 타입, 이를테면 32-비트 부호 없는 정수를 갖는다. 빈 튜플이 인덱싱되는데, 튜플의 제1 엘리먼트는 제로-인덱싱을 사용하는 XPU의 구현들에서 0의 인덱스를 갖거나, 그렇지 않으면 1을 갖는다. 제2 빈 엘리먼트는 1(또는 2)의 인덱스를 갖고, 제3 빈 엘리먼트는 2(또는 3)의 인덱스를 갖는 식이다.
[0149] 빈 튜플에 대해, bin[y]는 인덱스 y에 있는 튜플의 엘리먼트이다. 일부 예들에서, 마스크 값은 입력 값에 대한 마스크이다. 다른 예들에서, 대신에, 마스크 비트는 하나 이상의 마스크 비트들의 튜플이고, 마스크 튜플에서의 각각의 비트의 인덱스는 입력 빈 튜플에서의 개개의 빈 엘리먼트에 대응한다. 예컨대, 엘리먼트가 마스크[i]가 0이면, 동일한 인덱스 i에 있는 bin 엘리먼트 bin[i]는 마스킹되고, 그리고 XPU에 의해 입력으로서 프로세싱되지 않는다.
[0150] 벡터 파티션으로의 출력은 파티션 식별자이며, 이는 입력 값이 파티셔닝되는 빈 값의 인덱스이다. 파티션 식별자는 빈 값들의 튜플에 의해 정의된 범위들에 기반한다. 파티션 인덱스들은 XPU에 대한 데이터 프로세싱 레인들의 수보다 0 내지 1 적은 값을 취할 수 있다(또는, 파티션 식별자가 제로-인덱싱 대신 1-인덱싱되는 경우들에서, 1 내지 데이터 프로세싱 레인들의 수의 값을 취할 수 있음).
[0151] 입력 벡터의 인덱스 i에 있는 주어진 엘리먼트 값들[i]에 대해, 파티션 식별자는 가장 낮은 값 k이며, 따라서 빈 엘리먼트 bin[k]는 빈 엘리먼트 bin[k+1]보다 작은 값들[i]에 있는 입력 벡터의 엘리먼트 이하이다. 이러한 예들에서, 빈 튜플의 마지막 빈 엘리먼트는 입력 값들 및 빈 엘리먼트들에 대한 데이터 타입의 최대 값으로 세팅된다. 예를 들어, 빈 튜플의 마지막 빈 엘리먼트는, XPU가 32-비트 부호 없는 정수 엘리먼트들의 벡터에 대해 벡터 파티션을 수행할 때, 32-비트 부호 없는 정수의 가장 높은 값을 표현하는 INT_MAX로 세팅된다.
[0152] 값들[i]의 엘리먼트가 빈 엘리먼트의 범위에 있지 않으면, 결과적인 파티션 식별자는 XPU에 의해 출력으로서 전송될 때 마스킹된다. 또한, 빈 튜플이 단조적으로 증가하는 정수 엘리먼트들을 포함하지 않으면, 입력 엘리먼트에 대한 파티션 식별자는 정의되지 않는다. 다시 말해서, 빈 튜플은 엄격하게 증가하는 엘리먼트들의 시퀀스를 포함해야 한다.
[0153] XPU에 대한 입력들의 예시적인 세트는 다음과 같을 수 있다:
값들
= {5,
7,
10,
1,
512,
8,
1023,
0}
마스크
= {0,
1,
0,
0,
1,
1,
1,
1}
빈
= {0,
7,
256,
1024,
1,
0,
0,
1}
[0154] 이 예에서, 마스크 값들은 입력 값들에 대응하고, 빈 값들에 대응하지 않는다. 8-레인 XPU의 각각의 레인은 예를 들어, 입력 벡터로부터 개개의 입력 엘리먼트 및 그의 대응하는 마스크 비트를 수신할 수 있다. 출력 파티션 식별자들은 다음과 같다:
파티션 식별자들:
{0,
1,
1,
0,
2,
1,
2,
0}
[0155] 마스크 값들에 기반하여, 입력 값들 7, 512, 8 및 1023만이 파티셔닝된다. 추가로, 0, 7, 256 및 1024만이 엄격하게 증가하는 정수 값들의 시퀀스이기 때문에, 빈 튜플에 4 개의 빈들이 특정된다. 마스킹된 값들은 0의 파티션 식별자를 갖는다. 나머지 입력 값들 중, 7은 파티션 식별자 1에 매핑된다(제1 빈인 0은 7 이하이지만, 7은 7 미만은 아니기 때문임). 이러한 예들에서, bin[-1]은 입력 값들 및 빈 엘리먼트들에 대한 데이터 타입의 최소 음수 값으로 정의된다. 예를 들어, 빈 튜플의 제1 빈 엘리먼트는, XPU가 32-비트 부호 없는 정수 엘리먼트들의 벡터에 대해 벡터 파티션을 수행할 때, 32-비트 부호 없는 정수의 가장 낮은 값에 -1로 곱셈한 값을 표현하는 -INT_MAX로 세팅된다.
[0156] 일부 예들에서, 값[i]의 값에 대한 파티션 식별자를 결정할 때 XPU에 의해 적용되는 규칙은 빈 엘리먼트 bin[k-1]이 값들[i] 미만이 되고 값들[i]가 bin[k] 이하가 되도록 하는 가장 낮은 값 k이다.
[0157] 벡터 히스토그램
[0158] XPU는 벡터 내의 입력 값의 발생들의 수를 카운팅하도록 구성될 수 있다. XPU에 의한 출력은 고유 엘리먼트들의 발생 카운트에 따른 그들의 리스트이다. XPU에 대한 입력은 또한, 마스킹되지 않은 값들의 발생들의 수만을 카운팅하는, 각각의 입력 값에 대한 마스크 비트를 포함한다.
[0159] XPU에 대한 예시적인 입력은 다음과 같을 수 있다:
값들
= {0,
0,
1,
0,
2,
1,
2,
100}
마스크
= {0,
0,
0,
0,
0,
0,
0,
1}
[0160] 이러한 예에서, 값 100은 마스킹되고, 그리고 벡터 히스토그램 연산에서 XPU에 의해 고려되지 않는다.
[0161] XPU에 의한 예시적인 출력은 다음과 같을 수 있다:
값들
= {0,
1,
2,
0,
0,
0,
0,
0}
카운트
= {3,
2,
2,
0,
0,
0,
0,
0}
마스크
= {0,
0,
0,
1,
1,
1,
1,
1}
[0162] 값들은 먼저 고유 값들, 즉, 0, 1 및 2에 의해 출력된다. 카운트 값들의 리스트 내의 각각의 엘리먼트는 각각의 고유 값의 카운트, 즉, 입력에서의 3 개의 0들, 2 개의 1들 및 2 개의 2들에 대응한다. 마지막으로, XPU는 또한 입력에서 이전에 마스킹되거나 고유 값을 포함하지 않는 나머지 출력 벡터 엘리먼트들에 대한 마스크를 출력한다. 입력 벡터가 미리 정렬되며, 따라서 카운트 값들의 리스트의 각각의 엘리먼트는 대응하는 고유 값을 최소치로부터 최대치로(또는 정렬에 따라 그 반대로) 매칭될 수 있다.
[0163] 벡터 콤팩트
[0164] XPU는, 입력 오프셋에서 시작하는 입력 벡터의 마스킹된 엘리먼트들을 제거하고, 제거된 엘리먼트들의 출력 벡터를 리턴하도록 구성될 수 있다. 각각의 데이터 프로세싱 레인에서, 개개의 프로세싱 셀은 입력 값 및 그 값에 대한 마스크 비트뿐만 아니라 오프셋을 수신한다. 입력 값이 마스킹되지 않으면, 입력 값은 프로세싱 셀에 의해 우회된다.
[0165] XPU에 대한 입력들의 예시적인 세트는 다음과 같을 수 있다:
값들
= {0,
1,
2,
3,
4,
5,
6,
7}
마스크
= {1,
0,
1,
0,
1,
0,
0,
1}
오프셋
= 5
[0166] 수신된 값들로부터, 값들 0, 2, 4, 및 7이 제거를 위해 마스킹된다. 오프셋은 5이므로, XPU에 의한 예시적인 출력은 다음과 같을 수 있다:
값들
= {7,
1,
3,
5,
6,
0,
2,
4}
마스크
= {0,
1,
1,
1,
1,
0,
0,
0,}
[0167] 오프셋은 5이지만, 입력 값들에서의 제5 엘리먼트는 마스킹되지 않으므로, XPU는 입력 값들 내내 제1 마스킹된 값인 7까지 계속된다. 그 다음, XPU는 입력 벡터에서의 이전에 마스킹되지 않은 값들을 출력 벡터에 포함시킨다. 이러한 값들은 이제 마스킹된다. 출력 벡터의 나머지 값들은, 입력 벡터에서 나타나는 순서대로, 입력 벡터의 마스킹된 값들이다.
[0168] 벡터 감소
[0169] XPU는 이를테면, 입력 벡터의 각각의 엘리먼트를 합산하고 합을 리턴하거나 입력 벡터에서의 최대 또는 최소 값 엘리먼트를 리턴함으로써 입력 벡터를 감소시키도록 구성될 수 있다. 예를 들어, XPU는 벡터의 각각의 엘리먼트를 합산함으로써 입력 벡터를 감소시킬 수 있다. 데이터 프로세싱 레인들의 총 수보다 더 큰 벡터들의 경우, XPU는 레인들의 총 수까지의 크기의 입력 벡터의 각각의 세그먼트의 엘리먼트들을 합산하기 위한 누계 합(running sum)을 유지할 수 있다.
[0170] 벡터 퍼뮤트
[0171] XPU는 제공된 패턴에 따라 입력 벡터를 퍼뮤트하도록 구성될 수 있다. 입력 벡터는, 예컨대, 특정 형상의 입력을 요구하는 뉴럴 네트워크 계층에 대한 입력으로서 제공되도록 재형상화될 수 있다. XPU는 XPU에 대한 데이터 프로세싱 레인들의 수만큼 많은 벡터들을 퍼뮤트할 수 있다. 데이터 프로세싱 레인들의 총 수보다 더 많은 벡터들이 레인들의 총 수까지 더 작은 세그먼트들에서 퍼뮤트될 수 있다.
[0172] 벡터 시프트 삽입
[0173] XPU는 피연산자들로서 2 개의 벡터들(v0 및 v1로 지칭됨), 및 스칼라 오프셋 값을 수신하도록 구성될 수 있다. 스칼라 오프셋은, 벡터들 v0 및 v1이 연접된 경우, 제3 벡터 v3에서 시작점을 정의한다. 출력은 벡터 v3에서 오프셋에 있는 제1 값에서 시작하여, XPU 내의 데이터 프로세싱 엘리먼트들의 수만큼 긴 벡터의 선택이다. 오프셋은 데이터 프로세싱 엘리먼트들의 수보다 0 내지 1 작은 정수 값일 수 있다.
[0174] XPU에 대한 입력들의 예시적인 세트는 다음과 같을 수 있다:
벡터 v0
= {1,
2,
3,
4,
5,
6,
7,
8}
벡터 v1
= {a,
b,
c,
d,
e,
f,
g,
h}
스칼라 오프셋 값
= 6
[0175] 이 예에서, 벡터 v1은 XPU가 입력 벡터들 둘 모두로부터 벡터 시프트 삽입에 대한 출력 벡터를 어떻게 생성할 수 있는지를 예시하는 목적들을 위한 문자들을 포함한다. 벡터 시프트 삽입을 수행하는 것으로부터 선택된 벡터는 다음과 같다:
선택된 벡터
= {7,
8,
a,
b,
c,
d,
e,
f}
[0176] 선택된 벡터의 처음 2 개의 엘리먼트들은 7과 8인데, 이는 오프셋 6에 있는 벡터 v0에서의 제1 엘리먼트가 7이기 때문이다. 그 다음, 다음 7 개의 엘리먼트들이 선택되어, 벡터 v0에서 종료하고 벡터 v1까지 계속된다.
[0177] 도 9는 XPU 상에서 합성 연산을 수행하기 위한 예시적인 프로세스(900)의 흐름도이다. 하드웨어 회로는 다수의 스테이지들을 포함하는 XPU로 구성될 수 있다. 각각의 스테이지는 크로스바 및 2 개 이상의 프로세싱 셀들을 포함할 수 있다. 다수의 데이터 프로세싱 레인들은 스테이지들의 셀들 및 크로스바들을 통해, 업스트림 입력으로부터 다운스트림 목적지로 개개의 데이터를 스트리밍한다.
[0178] 블록(910)에 따라, 하드웨어는 데이터 프로세싱 레인들을 따르는 업스트림 입력으로부터의 입력 데이터, 및 제1 연산을 수행하기 위한 제1 명령을 수신한다. 업스트림 입력은 하드웨어 회로의 XPU 상에서의 프로세싱을 위한 데이터가 전송되게 한 프로세서 또는 메모리 디바이스일 수 있다. 제1 연산은 합성 연산, 이를테면 벡터 스캔, 벡터 세그먼트 스캔, 벡터 정렬, 벡터 복제 카운트 등이다. 제1 명령은 합성 연산을 표현하는 제어 신호일 수 있다.
[0179] 블록(920)에 따라, 제1 명령을 수신하는 것에 대한 응답으로, 각각의 스테이지에 대해, 하드웨어 회로는, 스테이지의 개개의 프로세싱 셀들에 개개의 제2 명령을 전송하고, 각각의 셀은, 개개의 데이터 프로세싱 레인으로부터 입력을 수신하는 것에 대한 응답으로, 개개의 제2 연산을 수행하도록 구성된다. 제2 연산들은 프로세싱 셀들에 의해 수행되는 프리미티브 연산들이다. 명령들은 도 3 및 도 4를 참조하여 본원에 설명된 바와 같이, 각각의 프로세싱 셀에 대응하는 개개의 제어 셀로부터 수신될 수 있다.
[0180] 블록(930)에 따라, 제1 명령을 수신하는 것에 대한 응답으로, 각각의 스테이지에 대해, 하드웨어 회로는 각각의 스테이지에 대한 개개의 크로스바에 개개의 제3 명령을 전송한다.
[0181] 블록(940)에 따라, 하드웨어 회로는, 개개의 제2 연산들을 수행하도록 구성된 복수의 셀들 및 복수의 데이터 프로세싱 레인들을 따라, 수신된 입력 데이터를 프로세싱함으로써 제1 연산을 수행한다. 셀들 및 크로스바들은, 이를테면 도 5 및 도 6을 참조하여 도시되고 설명된 구성들(500-600)에서, 제1 연산을 수행하기 위한 프로세싱 네트워크를 형성한다.
[0182] 도 10은 본 개시내용의 양상들에 따른, XPU로의 입력 벡터에 대한 복제 카운트를 정렬 및 생성하기 위한 예시적인 프로세스(1000)의 흐름도이다.
[0183] 블록(1010)에 따라, 하드웨어 회로는 프로세싱 셀들 및 크로스바들의 프로세싱 네트워크를 형성하도록 크로스-레인 프로세싱 유닛을 구성한다. 예를 들어, 하드웨어 회로는, 도 8a 내지 도 8h를 참조하여 본원에 설명된 바와 같이, 벡터 정렬 및 복제 카운트 프로세싱 네트워크를 생성하기 위해, 도 9를 참조하여 본원에 설명된 바와 같은 명령들을 수신할 수 있다.
[0184] 블록(1020)에 따라, 하드웨어 회로는 엘리먼트들의 입력 벡터를 수신한다. 블록(1030)에 따라, 하드웨어 회로는 입력 벡터에서의 복제 엘리먼트들의 카운트들을 특정하는 데이터 및 정렬된 출력 벡터를 생성한다. 복제 카운트들을 특정하는 데이터 및 정렬된 출력 벡터의 예시적인 생성이 도 8a 내지 도 8h를 참조하여 본원에 설명된다.
[0185] 예시적인 컴퓨팅 환경
[0186] 도 11은 하드웨어 회로(101)를 구현하기 위한 예시적인 환경(1100)의 블록 다이어그램이다. 하드웨어 회로(101)는 서버 컴퓨팅 디바이스(1115)에서와 같이 하나 이상의 위치들에 하나 이상의 프로세서들을 갖는 디바이스 상에 구현될 수 있다. 사용자 컴퓨팅 디바이스(1112) 및 서버 컴퓨팅 디바이스(1115)는 네트워크(1160)를 통해 하나 이상의 저장 디바이스들(1130)에 통신가능하게 커플링될 수 있다. 저장 디바이스(들)(1130)는 휘발성 및 비-휘발성 메모리의 조합일 수 있고, 컴퓨팅 디바이스들(1112, 1115)과 동일한 또는 상이한 물리적 위치들에 있을 수 있다. 예를 들어, 저장 디바이스(들)(1130)는 정보를 저장할 수 있는 임의의 타입의 비-일시적 컴퓨터 판독 가능 매체, 이를테면 하드-드라이브, 솔리드 스테이트 드라이브, 테이프 드라이브, 광학 저장소, 메모리 카드, ROM, RAM, DVD, CD-ROM, 기록-가능 및 판독-전용 메모리들을 포함할 수 있다.
[0187] 서버 컴퓨팅 디바이스(1115)는 하나 이상의 프로세서들(1113) 및 메모리(1114)를 포함할 수 있다. 메모리(1114)는 프로세서(들)(1113)에 의해 실행될 수 있는 명령들(1121)을 포함하는, 프로세서(들)(1113)에 의해 액세스가능한 정보를 저장할 수 있다. 메모리(1114)는 또한 프로세서(들)(1113)에 의해 리트리브, 조작 또는 저장될 수 있는 데이터(1123)를 포함할 수 있다. 메모리(1114)는 프로세서(들)(1113)에 의해 액세스가능한 정보를 저장할 수 있는 비-일시적 컴퓨터 판독가능 매체의 타입, 이를테면, 휘발성 및 비-휘발성 메모리일 수 있다. 프로세서(들)(1113)는 하나 이상의 CPU(central processing unit)들, GPU(graphic processing unit)들, FPGA(field-programmable gate array)들, 및/또는 ASIC(application-specific integrated circuit)들, 이를테면 TPU(tensor processing unit)들을 포함할 수 있다. 프로세서(들)(1113)는 도 1을 참조하여 본원에 설명된 바와 같이, 하드웨어 회로의 일부로서 구현된 코-프로세서를 포함할 수 있다.
[0188] 명령들(1121)은, 프로세서(들)(1113)에 의해 실행될 때, 하나 이상의 프로세서들로 하여금, 명령들에 의해 정의된 액션들을 수행하게 하는 하나 이상의 명령들을 포함할 수 있다. 명령들(1121)은 프로세서(들)(1113)에 의한 직접 프로세싱을 위한 오브젝트 코드 포맷으로 저장될 수 있거나, 또는 요구에 따라 해석되거나 사전에 컴파일링되는 독립적인 소스 코드 모듈들의 집합들 또는 해석가능한 스크립트들을 포함하는 다른 포맷들로 저장될 수 있다. 명령들(1121)은 본 개시내용의 양상들과 일치하는 하드웨어 회로(101)의 XPU를 구성하기 위한 명령들을 포함할 수 있다. 서버 컴퓨팅 디바이스(1115) 및/또는 사용자 컴퓨팅 디바이스(1112)는 회로의 XPU를 구성하기 위한 제어 신호들로서 명령들을 생성하여 하드웨어 회로(101)에 전송하기 위한 컴파일러 또는 다른 프로그램을 구현할 수 있다.
[0189] 데이터(1123)는 명령들(1121)에 따라 프로세서(들)(1113)에 의해 리트리브, 저장 또는 수정될 수 있다. 데이터(1123)는 컴퓨터 레지스터들에, 관계형 또는 비-관계형 데이터베이스에, 복수의 상이한 필드들 및 레코드들을 갖는 테이블로서, 또는 JSON, YAML, proto 또는 HTML 문서들로서 저장될 수 있다. 데이터(1123)는 또한, 이진 값들, ASCII 또는 유니코드와 같은(그러나 이에 제한되지는 않음) 컴퓨터-판독가능 포맷으로 포맷화될 수 있다. 게다가, 데이터(1123)는 관련 정보, 이를테면, 숫자들, 설명 텍스트, 독점 코드들, 포인터들, 다른 네트워크 위치들을 포함하는 다른 메모리들에 저장된 데이터에 대한 레퍼런스들, 또는 관련 데이터를 계산하기 위해 함수에 의해 사용되는 정보를 식별하기에 충분한 정보를 포함할 수 있다.
[0190] 사용자 컴퓨팅 디바이스(1112)는 또한 하나 이상의 프로세서들(1116), 메모리(1117), 명령들(1118) 및 데이터(1119)로 서버 컴퓨팅 디바이스(115)와 유사하게 구성될 수 있다. 사용자 컴퓨팅 디바이스(1112)는 또한 사용자 출력(1126) 및 사용자 입력(1124)을 포함할 수 있다. 사용자 입력(1124)은 키보드, 마우스, 기계적 액추에이터들, 소프트 액추에이터들, 터치스크린들, 마이크로폰들 및 센서들과 같은, 사용자로부터 입력을 수신하기 위한 임의의 적절한 메커니즘 또는 기법을 포함할 수 있다.
[0191] 서버 컴퓨팅 디바이스(1115)는 데이터를 사용자 컴퓨팅 디바이스(1112)에 송신하도록 구성될 수 있고, 사용자 컴퓨팅 디바이스(1112)는 사용자 출력(1126)의 일부로서 구현된 디스플레이 상에 수신된 데이터의 적어도 일부를 디스플레이하도록 구성될 수 있다. 사용자 출력(1126)은 또한 사용자 컴퓨팅 디바이스(1112)와 서버 컴퓨팅 디바이스(1115) 사이의 인터페이스를 디스플레이하기 위해 사용될 수 있다. 사용자 출력(1126)은 대안적으로 또는 추가적으로, 사용자 컴퓨팅 디바이스(1112)의 플랫폼 사용자에게 비-시각 및 비-가청 정보를 제공하는 하나 이상의 스피커들, 트랜스듀서들 또는 다른 오디오 출력들, 햅틱 인터페이스 또는 다른 촉각 피드백을 포함할 수 있다.
[0192] 도 11은 컴퓨팅 디바이스들(1115, 1112) 내에 있는 것으로 프로세서들(1113, 1116) 및 메모리들(1114, 1117)을 예시하지만, 프로세서들(1113, 1116) 및 메모리들(1114, 1117)을 포함하여, 본 명세서에서 설명되는 컴포넌트들은, 상이한 물리적 위치들에서 동작할 수 있고 동일한 컴퓨팅 디바이스 내에서 동작하지 않을 수 있는 다수의 프로세서들 및 메모리들을 포함할 수 있다. 예컨대, 명령들(1121, 1118) 및 데이터(1123, 1119) 중 일부는 착탈식 SD 카드 상에 저장될 수 있고, 다른 것들은 판독-전용 컴퓨터 칩 내에 저장될 수 있다. 명령들 및 데이터의 일부 또는 전부는, 프로세서들(1113, 1116)로부터 물리적으로 원격이지만 여전히 프로세서들(1113, 1116)에 의해 액세스가능한 위치에 저장될 수 있다. 유사하게, 프로세서들(1113, 1116)은, 동시적이고 그리고/또는 순차적인 동작을 수행할 수 있는 프로세서들의 집합을 포함할 수 있다. 컴퓨팅 디바이스들(1115, 1112) 각각은, 컴퓨팅 디바이스들(1115, 1112)에 의해 실행되는 동작들 및 프로그램들에 대한 시간 측정을 위해 사용될 수 있는 타이밍 정보를 제공하는 하나 이상의 내부 클록들을 포함할 수 있다.
[0193] 서버 컴퓨팅 디바이스(1115)는 사용자 컴퓨팅 디바이스(1112)로부터 데이터를 프로세싱하기 위한 요청들을 수신하도록 구성될 수 있다. 예를 들어, 환경(1100)은 플랫폼 서비스들을 노출시키는 다양한 사용자 인터페이스들 및/또는 API들을 통해 사용자들에게 다양한 서비스들을 제공하도록 구성된 컴퓨팅 플랫폼의 일부일 수 있다. 하나 이상의 서비스들은 특정된 태스크 및 트레이닝 데이터에 따라 뉴럴 네트워크들 또는 다른 기계 학습 모델들을 생성하기 위한 기계 학습 프레임워크 또는 툴들의 세트일 수 있다. 사용자 컴퓨팅 디바이스(1112)는 하드웨어 회로(101)의 XPU가 수행하도록 구성되어야 하는 합성 연산의 타입 또는 워크로드를 특정하는 데이터를 수신 및 송신할 수 있다. 본원에 설명된 바와 같이, 사용자 컴퓨팅 디바이스(1112)는 명령들을 하드웨어 회로(101)에 직접 전송하거나 또는 서버 컴퓨팅 디바이스(1115)로 하여금 제어 신호들로서 명령들을 생성하여 하드웨어 회로(101)에 전송하게 할 수 있다.
[0194] 디바이스들(1112, 1115)은 네트워크(1160)를 통한 직접 및 간접 통신이 가능할 수 있다. 디바이스들(1115, 1112)은 정보를 전송 및 수신하기 위한 개시 연결을 수락할 수 있는 청취 소켓들을 셋업할 수 있다. 네트워크(1160) 자체는 인터넷, 월드 와이드 웹, 인트라넷들, 가상 사설 네트워크들, 광역 네트워크들, 로컬 네트워크들, 및 하나 이상의 회사들에 독점적인 통신 프로토콜들을 사용하는 사설 네트워크들을 포함하는 다양한 구성들 및 프로토콜들을 포함할 수 있다. 네트워크(1160)는 다양한 단거리 및 장거리 연결들을 지원할 수 있다. 단거리 및 장거리 연결들은 상이한 대역폭들, 이를테면 2.402 GHz 내지 2.480 GHz(일반적으로 Bluetooth® 표준과 연관됨), 2.4 GHz 및 5 GHz(일반적으로 Wi-Fi® 통신 프로토콜과 연관됨); 또는 무선 브로드밴드 통신을 위한 LTE® 표준과 같은 다양한 통신 표준들을 통해 이루어질 수 있다. 이외에도 또는 대안적으로, 네트워크(1160)는 또한, 다양한 타입들의 이더넷 연결을 통한 것을 포함하여, 디바이스들(1112, 1115) 사이의 유선 연결들을 지원할 수 있다.
[0195] 단일 서버 컴퓨팅 디바이스(1115) 및 사용자 컴퓨팅 디바이스(1112)가 도 11에 도시되어 있지만, 본 개시내용의 양상들은, 다수의 디바이스들의 분산 네트워크를 통해, 또는 순차 또는 병렬 프로세싱에 대한 패러다임들을 포함하여, 컴퓨팅 디바이스들의 다양한 상이한 구성들 및 수량들에 따라 구현될 수 있다는 것이 이해된다. 일부 구현들에서, 본 개시내용의 양상들은 단일 디바이스 및 이들의 임의의 조합 상에서 수행될 수 있다.
[0196] 전술된 것을 고려하여, 본 개시내용의 양상들은 프로세서의 다수의 데이터 프로세싱 레인들에 걸쳐 데이터-의존 연산들을 수행하기 위한 XPU(cross-lane processing unit)에 관한 것이다. 각각의 데이터-의존 연산을 위한 연산-특정 회로들을 구현하기보다는, XPU는, XPU에 스택형 네트워크로서 배열된 크로스바들 및 프로세싱 셀들에 의해 수행되는 개별적인 연산들을 구성하는 입력 신호들에 대한 응답으로 상이한 연산들을 수행하도록 구성될 수 있다. 각각의 프로세싱 셀은 다수의 데이터 프로세싱 레인들에 걸쳐 데이터를 수신하고 프로세싱할 수 있다. 본 개시내용의 양상들은, 복제 카운트를 수행하기 위해 벡터 정렬 네트워크를 사용하도록 XPU를 구성하는 것을 포함하여, 정렬 및 복제 카운팅을 위해 XPU를 별개로 구성할 필요성을 제거한다.
[0197] 본 개시내용의 양상들은 디지털 회로들, 컴퓨터-판독가능 저장 매체에서 하나 이상의 컴퓨터 프로그램들, 또는 전술한 것 중 하나 이상의 조합으로서 구현될 수 있다. 컴퓨터-판독가능 저장 매체는, 예컨대, 클라우드 컴퓨팅 플랫폼에 의해 실행가능하고 유형의 저장 디바이스 상에 저장되는 하나 이상의 명령들로서 비-일시적일 수 있다.
[0198] 본 명세서에서, "~하도록 구성된"이라는 문구는 컴퓨터 시스템들, 하드웨어 및 하드웨어 회로들, 또는 컴퓨터 프로그램, 엔진 또는 모듈의 일부와 관련된 상이한 맥락들에서 사용된다. 시스템이 하나 이상의 동작들을 수행하도록 구성된다고 언급될 때, 이는, 시스템이, 동작 시에 시스템으로 하여금 하나 이상의 동작들을 수행하게 하는, 시스템 상에 설치된 적절한 소프트웨어, 펌웨어 및/또는 하드웨어를 가짐을 의미한다. 일부 하드웨어가 하나 이상의 동작들을 수행하도록 구성된다고 언급될 때, 이는, 하드웨어가, 동작 시에 입력을 수신하고 입력에 따른 그리고 하나 이상의 동작들에 대응하는 출력을 생성하는 하나 이상의 회로들을 포함함을 의미한다. 컴퓨터 프로그램, 엔진, 또는 모듈이 하나 이상의 동작들을 수행하도록 구성된다고 언급될 때, 이는, 컴퓨터 프로그램이, 하나 이상의 컴퓨터들에 의해 실행될 때 하나 이상의 컴퓨터들로 하여금 하나 이상의 동작들을 수행하게 하는 하나 이상의 프로그램 명령들을 포함함을 의미한다.
[0199] 도면들에 도시되고 청구항들에서 언급된 동작들이 특정 순서로 도시되지만, 동작들은 도시된 것과 상이한 순서들로 수행될 수 있고, 일부 동작들은 생략될 수 있고, 한번 초과로 수행될 수 있고 그리고/또는 다른 동작들과 병렬로 수행될 수 있다는 것이 이해된다. 추가로, 상이한 동작들을 수행하도록 구성된 상이한 시스템 컴포넌트들의 분리는 컴포넌트들이 분리될 것을 요구하는 것으로 이해되지 않아야 한다. 설명된 컴포넌트들, 모듈들, 프로그램들 및 엔진들은 단일 시스템으로서 함께 통합되거나 또는 다수의 시스템들의 일부일 수 있다.
[0200] 달리 언급되지 않는 한, 전술한 대안적인 예들은 상호 배타적이지 않지만, 고유 이점들을 달성하기 위해 다양한 조합들로 구현될 수 있다. 위에서 논의된 특징들의 이들 및 다른 변형들 및 조합들이 청구항들에 의해 정의된 청구 대상을 벗어나지 않으면서 활용될 수 있기 때문에, 예들의 전술한 설명은 청구항들에 의해 정의된 청구 대상의 제한으로서가 아니라 예시로서 취해져야 한다. 이외에도, 본원에 설명된 예들의 제공뿐만 아니라, "이를테면", "포함하는" 등으로 표현된 조항들은 청구항들의 청구 대상을 특정 예들로 제한하는 것으로 해석되지 않아야 하며; 오히려, 예들은 많은 가능한 구현들 중 단 하나만을 예시하도록 의도된다. 추가로, 상이한 도면들 내의 동일한 참조 번호들은 동일한 또는 유사한 엘리먼트들을 식별할 수 있다.
[0201] 본원에서 실질적으로 임의의 복수 및/또는 단수 용어들, 예컨대 ("엘리먼트"라는 용어는 임의의 시스템, 컴포넌트, 데이터 등을 대신함) "엘리먼트/그 엘리먼트", "하나 이상의 엘리먼트들", "다수의 엘리먼트들", "복수의 엘리먼트들", "적어도 하나의 엘리먼트" 등의 사용과 관련하여, 당해 기술분야에서 통상의 지식을 가진 자들은 설명된 맥락 및/또는 애플리케이션에 적절한 바와 같이 복수로부터 단수로 그리고/또는 단수로부터 복수로 번역할 수 있다. 다양한 단수/복수 퍼뮤테이션들은, 명확하게 표시되지 않는 한, 명확성을 위해 그리고 제한 없이, 본원에 명시적으로 제시될 수 있다.
Claims (20)
- 하드웨어 회로로서,
복수의 스테이지들 ― 각각의 스테이지는 크로스바 및 2 개 이상의 셀들을 포함함 ―; 및
상기 복수의 스테이지들의 복수의 셀들 및 복수의 크로스바들을 통해 업스트림 입력으로부터 다운스트림 목적지로 개개의 데이터를 스트리밍하는 복수의 데이터 프로세싱 레인들을 포함하며,
상기 하드웨어 회로는,
상기 복수의 데이터 프로세싱 레인들을 따라 상기 업스트림 입력으로부터 입력 데이터를 수신하고, 제1 연산을 수행하기 위한 제1 명령을 수신하고;
상기 제1 명령을 수신하는 것에 대한 응답으로, 각각의 스테이지에 대해,
상기 스테이지의 개개의 프로세싱 셀들에 개개의 제2 명령을 전송하고 ― 각각의 셀은 개개의 데이터 프로세싱 레인으로부터 입력을 수신하는 것에 대한 응답으로 개개의 제2 연산을 수행하도록 구성됨 ―; 그리고
상기 스테이지에 대한 개개의 크로스바에 개개의 제3 명령을 전송하고 ― 상기 크로스바는 상기 복수의 데이터 프로세싱 레인들을 따라 상기 스테이지의 각각의 셀로부터 다음 스테이지의 셀들로 출력을 퍼뮤트(permute)하도록 구성됨 ―; 그리고
상기 개개의 제2 연산들을 수행하도록 구성된 상기 복수의 셀들 및 상기 복수의 데이터 프로세싱 레인들을 따라 상기 수신된 입력 데이터를 프로세싱함으로써 상기 제1 연산을 수행하도록 구성되는,
하드웨어 회로. - 제1 항에 있어서,
각각의 셀은, 상기 셀을 통과하는 개개의 데이터 프로세싱 레인으로부터의 개개의 제1 입력 피연산자 및 상기 셀에 업스트림의 스테이지의 개개의 크로스바로부터의 개개의 제2 입력 피연산자를 수신하도록 구성되는,
하드웨어 회로. - 제1 항에 있어서,
상기 복수의 데이터 프로세싱 레인들의 데이터의 상기 다운스트림 목적지는 벡터 프로세싱 유닛이고, 상기 벡터 프로세싱 유닛은 상기 하드웨어 회로의 출력 데이터에 대해 단일 명령 다중 데이터 벡터 연산들을 수행하도록 구성되는,
하드웨어 회로. - 제1 항에 있어서,
상기 셀들 각각은 하나 이상의 수신된 명령들에 대한 응답으로 복수의 미리 결정된 프리미티브 연산(primitive operation)들 중 하나 이상을 수행하도록 구성되고;
상기 하드웨어 회로는 복수의 제어 셀들을 더 포함하고; 그리고
상기 개개의 프로세싱 셀들에 상기 개개의 제2 명령을 전송할 때, 상기 하드웨어 회로는, 각각의 제어 셀에 의해, 상기 제1 명령에 의해 특정된 상기 제1 연산에 기반하여 개개의 제어 신호를 생성하여 각각의 프로세싱 셀에 전송하도록 구성되는,
하드웨어 회로. - 제4 항에 있어서,
각각의 제어 셀에 의해, 상기 개개의 제어 신호를 생성하여 전송할 때, 상기 하드웨어 회로는, 각각의 프로세싱 셀로 하여금 상기 프로세싱 셀이 있는 스테이지 또는 상기 프로세싱 셀을 통과하는 데이터 프로세싱 레인 중 적어도 하나에 기반하여 개개의 산술, 비교 및 우회 연산 중 하나를 수행하게 하기 위한 개개의 제어 신호를 생성하도록 구성되는,
하드웨어 회로. - 제4 항에 있어서,
상기 복수의 셀들 및 상기 복수의 크로스바들은 상기 복수의 스테이지들 및 상기 복수의 데이터 프로세싱 레인들에 걸쳐 연결된 셀들의 프로세싱 네트워크를 형성하고, 상기 연결된 셀들의 프로세싱 네트워크는, 상기 입력 데이터를 수신하고, 상기 입력 데이터에 대해 상기 제1 연산을 수행하는 것에 따라 개개의 출력 데이터를 생성하도록 구성되는,
하드웨어 회로. - 제6 항에 있어서,
상기 연결된 셀들의 프로세싱 네트워크는 결합 벡터 정렬 및 복제 카운트 연산(combined vector sort and duplicate count operation)을 수행하도록 구성되며,
상기 결합 연산은,
상기 프로세싱 네트워크에 의해, 엘리먼트들의 입력 벡터를 수신하는 것; 및
상기 프로세싱 네트워크에 의해 그리고 출력으로서, 상기 입력 벡터에서의 복제 엘리먼트들의 카운트들을 특정하는 데이터 및 정렬된 출력 벡터를 생성하는 것을 포함하는,
하드웨어 회로. - 제1 항에 있어서,
상기 입력 데이터는 희소 벡터 데이터를 포함하고, 개개의 제2 및 제3 명령들을 전송한 후에, 상기 하드웨어 회로는 벡터 스캔, 벡터 합산, 벡터 정렬 또는 벡터 복제 카운트 중 하나를 수행하도록 구성되는,
하드웨어 회로. - 시스템으로서,
하드웨어 회로를 포함하며, 상기 하드웨어 회로는, 복수의 스테이지들 ― 각각의 스테이지는 크로스바 및 2 개 이상의 셀들을 포함함 ―, 및 복수의 데이터 프로세싱 레인들을 포함하며, 상기 복수의 데이터 프로세싱 레인들은 상기 복수의 스테이지들의 복수의 셀들 및 복수의 크로스바들을 통해 업스트림 입력으로부터 다운스트림 목적지로 개개의 데이터를 스트리밍하며,
상기 하드웨어 회로는,
상기 복수의 데이터 프로세싱 레인들을 따라 상기 업스트림 입력으로부터 입력 데이터를 수신하고, 제1 연산을 수행하기 위한 제1 명령을 수신하고;
상기 제1 명령을 수신하는 것에 대한 응답으로, 각각의 스테이지에 대해,
상기 스테이지의 개개의 프로세싱 셀들에 개개의 제2 명령을 전송하고 ― 각각의 셀은 개개의 데이터 프로세싱 레인으로부터 입력을 수신하는 것에 대한 응답으로 개개의 제2 연산을 수행하도록 구성됨 ―; 그리고
상기 스테이지에 대한 개개의 크로스바에 개개의 제3 명령을 전송하고 ― 상기 크로스바는 상기 복수의 데이터 프로세싱 레인들을 따라 상기 스테이지의 각각의 셀로부터 다음 스테이지의 셀들로 출력을 퍼뮤트하도록 구성됨 ―; 그리고
상기 개개의 제2 연산들을 수행하도록 구성된 상기 복수의 셀들 및 상기 복수의 데이터 프로세싱 레인들을 따라 상기 수신된 입력 데이터를 프로세싱함으로써 상기 제1 연산을 수행하도록 구성되는,
시스템. - 제9 항에 있어서,
각각의 셀은, 상기 셀을 통과하는 개개의 데이터 프로세싱 레인으로부터의 개개의 제1 입력 피연산자 및 상기 셀에 업스트림의 스테이지의 개개의 크로스바로부터의 개개의 제2 입력 피연산자를 수신하도록 구성되는,
시스템. - 제9 항에 있어서,
상기 복수의 데이터 프로세싱 레인들의 데이터의 상기 다운스트림 목적지는 벡터 프로세싱 유닛이고, 상기 벡터 프로세싱 유닛은 상기 하드웨어 회로의 출력 데이터에 대해 단일 명령 다중 데이터 벡터 연산들을 수행하도록 구성되는,
시스템. - 제9 항에 있어서,
상기 셀들 각각은 하나 이상의 수신된 명령들에 대한 응답으로 복수의 미리 결정된 프리미티브 연산들 중 하나 이상을 수행하도록 구성되고;
상기 하드웨어 회로는 복수의 제어 셀들을 더 포함하고; 그리고
상기 개개의 프로세싱 셀들에 상기 개개의 제2 명령을 전송할 때, 상기 하드웨어 회로는, 각각의 제어 셀에 의해, 상기 제1 명령에 의해 특정된 상기 제1 연산에 기반하여 개개의 제어 신호를 생성하여 각각의 프로세싱 셀에 전송하도록 구성되는,
시스템. - 제12 항에 있어서,
각각의 제어 셀에 의해, 상기 개개의 제어 신호를 생성하여 전송할 때, 상기 하드웨어 회로는, 각각의 프로세싱 셀로 하여금 상기 프로세싱 셀이 있는 스테이지 또는 상기 프로세싱 셀을 통과하는 데이터 프로세싱 레인 중 적어도 하나에 기반하여 개개의 산술, 비교 및 우회 연산 중 하나를 수행하게 하기 위한 개개의 제어 신호를 생성하도록 구성되는,
시스템. - 제12 항에 있어서,
상기 복수의 셀들 및 상기 복수의 크로스바들은 상기 복수의 스테이지들 및 상기 복수의 데이터 프로세싱 레인들에 걸쳐 연결된 셀들의 프로세싱 네트워크를 형성하고, 상기 연결된 셀들의 프로세싱 네트워크는, 상기 입력 데이터를 수신하고, 상기 입력 데이터에 대해 상기 제1 연산을 수행하는 것에 따라 개개의 출력 데이터를 생성하도록 구성되는,
시스템. - 제14 항에 있어서,
상기 연결된 셀들의 프로세싱 네트워크는 결합 벡터 정렬 및 복제 카운트 연산을 수행하도록 구성되며,
상기 결합 연산은,
상기 프로세싱 네트워크에 의해, 엘리먼트들의 입력 벡터를 수신하는 것; 및
상기 프로세싱 네트워크에 의해 그리고 출력으로서, 상기 입력 벡터의 복제 엘리먼트들의 카운트들을 특정하는 데이터 및 정렬된 출력 벡터를 생성하는 것을 포함하는,
시스템. - 제9 항에 있어서,
상기 입력 데이터는 희소 벡터 데이터를 포함하고, 개개의 제2 및 제3 명령들을 전송한 후에, 상기 하드웨어 회로는 벡터 스캔, 벡터 합산, 벡터 정렬 또는 벡터 복제 카운트 중 하나를 수행하도록 구성되는,
시스템. - 컴퓨터-구현 방법으로서,
복수의 스테이지들 ― 각각의 스테이지는 크로스바 및 2 개 이상의 셀들을 포함함 ―, 및 복수의 데이터 프로세싱 레인들을 포함하는 하드웨어 회로에 의해 ― 상기 복수의 데이터 프로세싱 레인들은 상기 복수의 스테이지들의 복수의 셀들 및 복수의 크로스바들을 통해 업스트림 입력으로부터 다운스트림 목적지로 개개의 데이터를 스트리밍함 ―, 상기 복수의 데이터 프로세싱 레인들을 따라 상기 업스트림 입력으로부터 입력 데이터를 수신하고, 제1 연산을 수행하기 위한 제1 명령을 수신하는 단계;
상기 제1 명령을 수신하는 것에 대한 응답으로, 각각의 스테이지에 대해,
상기 하드웨어 회로에 의해, 상기 스테이지의 개개의 프로세싱 셀들에 개개의 제2 명령을 전송하는 단계 ― 각각의 셀은 개개의 데이터 프로세싱 레인으로부터 입력을 수신하는 것에 대한 응답으로 개개의 제2 연산을 수행하도록 구성됨 ―; 및
상기 하드웨어 회로에 의해, 상기 스테이지에 대한 개개의 크로스바에 개개의 제3 명령을 전송하는 단계 ― 상기 크로스바는 상기 복수의 데이터 프로세싱 레인들을 따라 상기 스테이지의 각각의 셀로부터 다음 스테이지의 셀들로 출력을 퍼뮤트하도록 구성됨 ―; 및
상기 하드웨어 회로에 의해, 상기 개개의 제2 연산들을 수행하도록 구성된 상기 복수의 셀들 및 상기 복수의 데이터 프로세싱 레인들을 따라 상기 수신된 입력 데이터를 프로세싱함으로써 상기 제1 연산을 수행하는 단계를 포함하는,
컴퓨터-구현 방법. - 제17 항에 있어서,
각각의 셀은, 상기 셀을 통과하는 개개의 데이터 프로세싱 레인으로부터의 개개의 제1 입력 피연산자 및 상기 셀에 업스트림의 스테이지의 개개의 크로스바로부터의 개개의 제2 입력 피연산자를 수신하도록 구성되는,
컴퓨터-구현 방법. - 제17 항에 있어서,
상기 복수의 데이터 프로세싱 레인들의 데이터의 상기 다운스트림 목적지는 벡터 프로세싱 유닛이고, 상기 벡터 프로세싱 유닛은 상기 하드웨어 회로의 출력 데이터에 대해 단일 명령 다중 데이터 벡터 연산들을 수행하도록 구성되는,
컴퓨터-구현 방법. - 제17 항에 있어서,
상기 셀들 각각은 하나 이상의 수신된 명령들에 대한 응답으로 복수의 미리 결정된 프리미티브 연산들 중 하나 이상을 수행하도록 구성되고;
상기 하드웨어 회로는 복수의 제어 셀들을 더 포함하고; 그리고
상기 개개의 프로세싱 셀들에 상기 개개의 제2 명령을 전송하는 것은, 각각의 제어 셀에 의해, 상기 제1 명령에 의해 특정된 상기 제1 연산에 기반하여 개개의 제어 신호를 생성하여 각각의 프로세싱 셀에 전송하는 것을 포함하는,
컴퓨터-구현 방법.
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US202163279262P | 2021-11-15 | 2021-11-15 | |
US63/279,262 | 2021-11-15 | ||
US17/972,663 | 2022-10-25 | ||
US17/972,663 US11966745B2 (en) | 2021-11-15 | 2022-10-25 | Sparse SIMD cross-lane processing unit |
PCT/US2022/048919 WO2023086271A1 (en) | 2021-11-15 | 2022-11-04 | Sparse simd cross-lane processing unit |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20230170977A true KR20230170977A (ko) | 2023-12-19 |
Family
ID=84462644
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020237040479A KR20230170977A (ko) | 2021-11-15 | 2022-11-04 | 희소 simd 크로스-레인 프로세싱 유닛 |
Country Status (5)
Country | Link |
---|---|
US (1) | US20240211269A1 (ko) |
EP (1) | EP4433904A1 (ko) |
JP (1) | JP2024522495A (ko) |
KR (1) | KR20230170977A (ko) |
WO (1) | WO2023086271A1 (ko) |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1997007451A2 (en) * | 1995-08-16 | 1997-02-27 | Microunity Systems Engineering, Inc. | Method and system for implementing data manipulation operations |
US10817291B2 (en) * | 2019-03-30 | 2020-10-27 | Intel Corporation | Apparatuses, methods, and systems for swizzle operations in a configurable spatial accelerator |
-
2022
- 2022-11-04 EP EP22821757.6A patent/EP4433904A1/en active Pending
- 2022-11-04 KR KR1020237040479A patent/KR20230170977A/ko unknown
- 2022-11-04 WO PCT/US2022/048919 patent/WO2023086271A1/en active Application Filing
- 2022-11-04 JP JP2023572877A patent/JP2024522495A/ja active Pending
-
2024
- 2024-03-06 US US18/597,005 patent/US20240211269A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
US20240211269A1 (en) | 2024-06-27 |
EP4433904A1 (en) | 2024-09-25 |
JP2024522495A (ja) | 2024-06-21 |
WO2023086271A1 (en) | 2023-05-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Johnson et al. | Billion-scale similarity search with GPUs | |
JP7428787B2 (ja) | 再構成可能プロセッサ回路アーキテクチャ | |
Ben Jmaa et al. | A comparative study of sorting algorithms with FPGA acceleration by high level synthesis | |
CN111164583B (zh) | 可配置的硬件的运行时间优化 | |
US20220382829A1 (en) | Sparse matrix multiplication in hardware | |
KR20230170977A (ko) | 희소 simd 크로스-레인 프로세싱 유닛 | |
US11966745B2 (en) | Sparse SIMD cross-lane processing unit | |
Liu et al. | Fast radix: A scalable hardware accelerator for parallel radix sort | |
Jmaa et al. | An efficient hardware implementation of timsort and mergesort algorithms using high level synthesis | |
Haas et al. | HW/SW-database-codesign for compressed bitmap index processing | |
Li et al. | An extended nonstrict partially ordered set-based configurable linear sorter on FPGAs | |
CN118176494A (zh) | 稀疏simd交叉通道处理单元 | |
JP2024518587A (ja) | データ依存の不規則な演算のためのプログラム可能なアクセラレータ | |
KR20230162120A (ko) | 멀티코어 시스템의 협력적 명령어 프리페치 | |
Lu et al. | Morphling: A reconfigurable architecture for tensor computation | |
Kobayashi et al. | An open-source FPGA library for data sorting | |
Zeng | FPGA-based high throughput merge sorter | |
Asgari et al. | Efficiently solving partial differential equations in a partially reconfigurable specialized hardware | |
Jeon et al. | XEM: Tensor accelerator for AB21 supercomputing artificial intelligence processor | |
Blelloch et al. | Class notes: Programming parallel algorithms | |
KR20240112371A (ko) | 범용 시스톨릭 어레이 | |
Matoba et al. | A rapid turnaround design of a high speed VLSI search processor | |
Zhan et al. | FPGA based co-design of storage-side query filter for big data systems | |
Xu et al. | An Automated Deployment with Reconfigurable Digital Controller for SRAM-based Computation-in-Memory | |
Koonar | A reconfigurable hardware implementation of genetic algorithms for VLSI CAD design |