KR102601034B1 - 하드웨어에서의 희소 행렬 곱셈 - Google Patents

하드웨어에서의 희소 행렬 곱셈 Download PDF

Info

Publication number
KR102601034B1
KR102601034B1 KR1020220016772A KR20220016772A KR102601034B1 KR 102601034 B1 KR102601034 B1 KR 102601034B1 KR 1020220016772 A KR1020220016772 A KR 1020220016772A KR 20220016772 A KR20220016772 A KR 20220016772A KR 102601034 B1 KR102601034 B1 KR 102601034B1
Authority
KR
South Korea
Prior art keywords
shard
sparse
input
vector
matrix
Prior art date
Application number
KR1020220016772A
Other languages
English (en)
Other versions
KR20220159257A (ko
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 KR20220159257A publication Critical patent/KR20220159257A/ko
Priority to KR1020230151637A priority Critical patent/KR20230155417A/ko
Application granted granted Critical
Publication of KR102601034B1 publication Critical patent/KR102601034B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8046Systolic arrays
    • 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/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/483Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
    • G06F7/487Multiplying; Dividing
    • G06F7/4876Multiplying
    • 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/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/50Adding; Subtracting
    • G06F7/501Half or full adders, i.e. basic adder cells for one denomination
    • 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/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/5443Sum of products
    • 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
    • G06F7/78Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data for changing the order of data flow, e.g. matrix transposition or LIFO buffers; Overflow or underflow handling therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Mathematical Optimization (AREA)
  • General Engineering & Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Software Systems (AREA)
  • Databases & Information Systems (AREA)
  • Algebra (AREA)
  • Artificial Intelligence (AREA)
  • Evolutionary Computation (AREA)
  • Computer Hardware Design (AREA)
  • Nonlinear Science (AREA)
  • Biophysics (AREA)
  • Biomedical Technology (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • General Health & Medical Sciences (AREA)
  • Computational Linguistics (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Medical Informatics (AREA)
  • Complex Calculations (AREA)
  • Neurology (AREA)

Abstract

본 개시내용의 양상들은 희소 행렬 곱셈을 위한, 컴퓨터 판독 가능 저장 매체를 포함하는 방법들, 시스템들 및 장치들을 제공한다. 행렬 곱셈을 위한 시스템은 희소 샤드들의 어레이를 포함한다. 각각의 희소 샤드는 입력 부분 행렬 및 입력 부분 벡터를 수신하도록 구성될 수 있고, 여기서 입력 부분 행렬은 0이 아닌 미리 결정된 최대 임계치 이하인 수의 0이 아닌 값들을 갖는다. 희소 샤드는, 복수의 곱셈기 회로들에 의해, 입력 부분 행렬의 개개의 0이 아닌 값들과 벡터 값들을 곱한 하나 이상의 곱들을 컴퓨팅할 수 있다. 희소 샤드는, 희소 샤드에 대한 출력으로서 그리고 하나 이상의 곱들을 사용하여, 샤드 입력 벡터를 샤드 입력 행렬에 적용한 곱인 샤드 출력 벡터를 생성할 수 있다.

Description

하드웨어에서의 희소 행렬 곱셈{SPARSE MATRIX MULTIPLICATION IN HARDWARE}
[0001] 희소 행렬(sparse matrix)은 행렬의 요소들로서 0이 아닌 값들에 대해 0 값들의 비율이 더 높은 행렬이다. 상이한 희소 행렬들은 0 대 0이 아닌 값들의 비율에 기반하여 다양한 정도의 희소성(sparsity)을 가질 수 있다. 0이 아닌 값들에 대해 0의 비율이 더 높은 행렬들은 비율이 더 낮은 행렬들보다 더 높은 희소성을 갖는다고 한다.
[0002] 뉴럴 네트워크들은 수신된 입력에 대한 출력을 예측하기 위해 비선형 연산들의 하나 이상의 계층들을 포함하는 머신 학습 모델(machine learning model)들이다. 입력 계층 및 출력 계층 외에도, 일부 뉴럴 네트워크들은 하나 이상의 은닉 계층(hidden layer)들을 포함한다. 각각의 은닉 계층의 출력은 뉴럴 네트워크의 다른 은닉 계층 또는 출력 계층에 입력될 수 있다. 뉴럴 네트워크의 각각의 계층은, 계층에 대한 하나 이상의 모델 파라미터들에 대한 값들에 따라, 수신된 입력으로부터 개개의 출력을 생성할 수 있다. 모델 파라미터들은, 뉴럴 네트워크로 하여금 정확한 출력을 생성하게 하는 트레이닝 알고리즘을 통해 결정되는 가중치들 또는 바이어스들일 수 있다. 뉴럴 네트워크의 계층에 대한 모델 파라미터 값들은 행렬 또는 텐서(tensor)의 요소들로서 표현될 수 있다.
[0003] 본 발명의 양상들은 하드웨어에서의 희소 행렬 밀집 벡터 곱셈에 관한 것이다.
[0004] 본 개시내용의 일 양상은 복수의 곱셈기 회로들을 포함하는 희소 샤드를 포함하는 시스템을 제공하고, 희소 샤드는: 0이 아닌 미리 결정된 최대 임계치 이하인 수의 0이 아닌 값들을 포함하는 샤드 입력 행렬을 수신하고; 복수의 벡터 값들을 포함하는 샤드 입력 벡터를 수신하고; 곱셈기 회로들 각각에 대해, 샤드 입력 행렬의 개개의 0이 아닌 값을 수신하고; 복수의 곱셈기 회로들에 의해, 샤드 입력 행렬의 개개의 0이 아닌 값들과 벡터 값들을 곱한 하나 이상의 곱들을 생성하고; 그리고 희소 샤드에 대한 출력으로서 그리고 하나 이상의 곱들을 사용하여, 샤드 입력 벡터를 샤드 입력 행렬에 적용한 곱인 샤드 출력 벡터를 생성하도록 구성된다.
[0005] 본 개시내용의 다른 양상은 명령들을 저장하는 하나 이상의 비일시적인 컴퓨터 판독 가능 저장 매체들을 제공하고, 명령들은, 복수의 희소 샤드들을 포함하는 시스템에 의해 실행될 때, 시스템으로 하여금 동작들을 수행하게 하고, 동작들은: 복수의 곱셈기 회로들을 포함하는 희소 샤드에 의해, 0이 아닌 미리 결정된 최대 임계치 이하인 수의 0이 아닌 값들을 포함하는 샤드 입력 행렬, 및 복수의 벡터 값들을 포함하는 샤드 입력 벡터를 수신하는 동작; 곱셈기 회로들 각각에 대해, 샤드 입력 행렬의 개개의 0이 아닌 값을 수신하는 동작; 희소 샤드의 복수의 곱셈기 회로들에 의해, 개개의 0이 아닌 값들과 개개의 벡터 값들을 곱한 하나 이상의 곱들을 생성하는 동작; 및 희소 샤드에 대한 출력으로서 그리고 하나 이상의 곱들을 사용하여, 샤드 입력 벡터를 샤드 입력 행렬에 적용한 곱인 샤드 출력 벡터를 생성하는 동작을 포함한다.
[0006] 본 개시내용의 다른 양상은 방법을 제공하고, 방법은: 복수의 곱셈기 회로들을 포함하는 희소 샤드에 의해, 0이 아닌 미리 결정된 최대 임계치 이하인 수의 0이 아닌 값들을 포함하는 샤드 입력 행렬, 및 복수의 벡터 값들을 포함하는 샤드 입력 벡터를 수신하는 단계; 곱셈기 회로들 각각에 대해, 샤드 입력 행렬의 개개의 0이 아닌 값을 수신하는 단계; 희소 샤드의 복수의 곱셈기 회로들에 의해, 샤드 입력 행렬의 개개의 0이 아닌 값들과 개개의 벡터 값들을 곱한 하나 이상의 곱들을 생성하는 단계; 및 희소 샤드에 의해, 희소 샤드에 대한 출력으로서 그리고 하나 이상의 곱들을 사용하여, 샤드 입력 벡터를 샤드 입력 행렬에 적용한 곱인 샤드 출력 벡터를 생성하는 단계를 포함한다.
[0007] 전술한 그리고 다른 양상들 각각은 선택적으로, 다음의 특징들 중 하나 이상을 단독으로 또는 조합하여 포함할 수 있다. 하나의 구현은 다음의 특징들 모두를 조합하여 포함할 수 있다.
[0008] 샤드 출력 벡터의 길이는 1보다 더 크다.
[0009] 희소 샤드는: 시스템 입력 행렬의 부분 행렬들인 복수의 샤드 입력 행렬들을 수신하고; 시스템 입력 벡터의 부분 벡터들인 복수의 샤드 입력 벡터들을 수신하고; 그리고 복수의 희소 샤드들에 의해, 시스템 입력 벡터를 시스템 입력 행렬에 적용한 곱을 나타내는 시스템 출력 벡터를 생성하도록 구성된 복수의 희소 샤드들 중 하나이다.
[0010] 복수의 희소 샤드들은 시스토릭 어레이(systolic array)로서 배열되고, 시스토릭 어레이는 시스토릭 어레이의 열 치수를 따라 희소 샤드들의 하나 이상의 그룹들을 포함하고; 그리고 시스템 출력 벡터를 생성하기 위해, 하나 이상의 프로세서들은: 시스토릭 어레이의 열 치수를 따라 각각의 그룹에 대해, 개개의 열 출력 벡터를 생성하도록 그룹의 각각의 희소 샤드에 대한 개개의 샤드 출력 벡터를 함께 가산하고; 그리고 시스템 출력 벡터를 생성하기 위해 각각의 그룹의 개개의 열 출력 벡터를 연결(concatenate)하도록 추가로 구성된다.
[0011] 각각의 곱셈기 회로는, 희소 샤드에 대한 개개의 샤드 입력 행렬로부터의 개개의 0이 아닌 값을 포함하는 개개의 레지스터에 커플링된다.
[0012] 복수의 곱셈기 회로들 내의 곱셈기 회로들의 수는 0이 아닌 미리 결정된 최대 임계치와 동일하다.
[0013] 희소 샤드는 크로스바 회로를 더 포함하고, 그리고 희소 샤드는: 크로스바 회로에 의해, 샤드 입력 벡터의 복수의 벡터 값들을 수신하고; 그리고 복수의 곱셈기 회로들 각각에 대한 입력으로서 그리고 크로스바 회로에 의해, 복수의 벡터 값들의 벡터 값을 전송하도록 추가로 구성된다.
[0014] 희소 샤드는: 복수의 곱셈기 회로들의 인접한 곱셈기 회로들의 레지스터들에 샤드 입력 행렬의 동일한 열의 0이 아닌 값들을 로딩하도록 추가로 구성된다.
[0015] 희소 샤드는, 적어도 샤드 입력 행렬의 각각의 열을 따라 0이 아닌 값들의 위치들을 지정하는 하나 이상의 제어 값들을 수신하도록 추가로 구성되고; 그리고 희소 샤드에 대한 크로스바 회로는: 하나 이상의 제어 값들을 수신하고; 그리고 하나 이상의 제어 값들에 따라, 샤드 입력 행렬의 동일한 열을 따라 0이 아닌 값들로 곱해질 벡터 값들을 인접한 곱셈기 회로들에 전송하도록 추가로 구성된다.
[0016] 희소 샤드는 복수의 가산기 회로들을 더 포함하고, 희소 샤드는 하나 이상의 세그먼트 마커들을 더 포함하고, 각각의 세그먼트 마커는, 세그먼트 마커에 로딩된 개개의 제어 값에 대한 값에 기반하여, 복수의 가산기 회로들의 개개의 가산기 회로에 대한 입력을 게이팅하도록 구성되고; 그리고 희소 샤드는: 하나 이상의 제어 값들의 적어도 일부를 하나 이상의 세그먼트 마커들에 로딩하고 ― 샤드 입력 행렬의 제1 열에 있는 0이 아닌 값들에 대한 가산기 회로들은, 제1 열과 상이한, 샤드 입력 행렬의 제2 열에 있는 0이 아닌 값들을 포함하는 인접한 가산기 회로들의 입력을 수신하는 것으로부터 게이팅됨 ― ; 그리고 복수의 가산기 회로들에 의해, 하나 이상의 곱들의 하나 이상의 합들을 생성하도록 추가로 구성되고, 하나 이상의 합들 각각은, 샤드 입력 벡터의 하나 이상의 개개의 값들로 곱해진 샤드 입력 행렬의 열의 하나 이상의 0이 아닌 값들의 개개의 세그먼팅된 합이다.
[0017] 복수의 가산기 회로들은 병렬 세그먼팅된 합산 회로를 형성하고, 하나 이상의 세그먼팅된 합들 각각은 세그먼트 마커에 의해 게이팅되지 않은 인접한 가산기 회로들에 대한 출력들의 합들이다.
[0018] 크로스바 회로는 제1 크로스바 회로이고; 그리고 희소 샤드는 제2 크로스바 회로를 더 포함하고, 제2 크로스바 회로는: 하나 이상의 세그먼팅된 합들을 수신하고, 그리고 희소 샤드에 대한 개개의 샤드 출력 벡터를 생성하기 위해, 하나 이상의 제어 값들에 따라, 하나 이상의 세그먼팅된 합들을 배열하도록 구성된다.
[0019] 제2 크로스바 회로는 베네스() 네트워크를 형성할 수 있고, 샤드 입력 행렬은 정사각형 행렬이다.
[0020] 본 개시내용의 다른 양상은 하나 이상의 프로세서들, 및 명령들을 저장하는 하나 이상의 메모리 디바이스들을 포함하는 시스템을 제공하고, 명령들은, 하나 이상의 프로세서들에 의해 실행될 때, 하나 이상의 프로세서들로 하여금 동작들을 수행하게 하고, 동작들은: 0 및 0이 아닌 값들을 포함하는 입력 행렬을 수신하는 동작; 및 입력 행렬을 복수의 부분 행렬들로 파티셔닝하는 동작을 포함하고, 각각의 부분 행렬에 대한 0이 아닌 값들의 수는 0이 아닌 미리 결정된 최대 임계치 이하이고, 그리고 각각의 부분 행렬에 대한 치수들은 미리 결정된 치수 임계치들 이하이다.
[0021] 동작들은, 각각의 부분 행렬에 대해, 부분 행렬의 각각의 열을 따라 0이 아닌 값들의 위치들을 지정하는 하나 이상의 제어 값들을 생성하는 동작들을 더 포함할 수 있다.
[0022] 동작들은, 각각의 부분 행렬 및 각각의 부분 행렬에 대한 하나 이상의 개개의 제어 값들을, 각각의 부분 행렬 및 부분 행렬에 대한 개개의 제어 값들을 프로세싱하도록 구성된 복수의 희소 샤드들에 전송하는 동작을 더 포함할 수 있다.
복수의 희소 샤드들 각각은: 부분 행렬, 부분 행렬에 대한 하나 이상의 개개의 제어 값들, 및 입력 벡터의 적어도 일부를 수신하고; 그리고 부분 행렬 및 입력 벡터의 일부의 곱을 나타내는 개개의 출력 샤드 벡터를 생성하도록 구성된다. 입력 행렬을 파티셔닝하는 동작은, 복수의 희소 샤드들 내의 희소 샤드들의 수와 동일한, 부분 행렬들의 수로 행렬을 파티셔닝하는 동작을 포함한다.
[0023] 본 개시내용의 다른 양상들은 대응하는 시스템들, 장치들, 및 하나 이상의 비일시적인 컴퓨터 판독 가능 저장 매체에 저장된 컴퓨터 프로그램들을 포함한다.
[0024] 도 1은 본 개시내용의 양상들에 따른, 희소 샤드들의 어레이를 포함하는 예시적인 시스템의 블록도이다.
[0025] 도 2는 본 개시내용의 양상들에 따른 예시적인 희소 샤드의 블록도이다.
[0026] 도 3a는 희소 샤드에 대한 예시적인 샤드 입력 행렬의 예시이다.
[0027] 도 3b는 예시적인 샤드 입력 행렬의 0이 아닌 값들의 벡터의 예시이다.
[0028] 도 3c는 예시적인 샤드 입력 행렬에 대한 제어 값들의 벡터들의 예시이다.
[0029] 도 4는 샤드 입력 행렬, 샤드 입력 벡터, 및 샤드 입력 행렬에 대한 제어 값들을 수신하는 희소 샤드에 의한 예시적인 행렬 곱셈을 예시한다.
[0030] 도 5는 본 개시내용의 양상들에 따른, 희소 샤드 상의 희소 행렬의 부분 행렬과 시스템 입력 벡터의 곱셈을 위한 예시적인 프로세스의 흐름도이다.
[0031] 도 6은 다수의 희소 샤드들로부터의 시스템 입력 벡터 및 시스템 입력 행렬의 곱을 나타내는 시스템 출력 벡터를 생성하는 예시적인 프로세스의 흐름도이다.
[0032] 도 7a는 예시적인 시스템 입력 행렬 및 시스템 입력 벡터의 예시이다.
[0033] 도 7b는 시스템 입력 행렬 및 시스템 입력 벡터의 파티셔닝의 예시이다.
[0034] 도 7c는 시스템 입력 행렬과 시스템 입력 벡터를 곱한 곱을 나타내는 파티셔닝된 시스템 입력 행렬 및 시스템 출력 벡터의 예시이다.
[0035] 도 8a는 본 개시내용의 양상들에 따른, 샤드 입력 행렬의 하나 이상의 제어 값들을 사용하여 희소 샤드를 구성하기 위한 예시적인 프로세스의 흐름도이다.
[0036] 도 8b는 도 8a의 프로세스에 따라 구성된 희소 샤드를 사용하여 행렬-벡터 곱셈을 수행하기 위한 예시적인 프로세스의 흐름도이다.
[0037] 도 9는 본 개시내용의 양상들에 따른, 시스템 입력 행렬로부터 부분 행렬들을 생성하기 위한 예시적인 프로세스의 흐름도이다.
[0038] 도 10은 본 개시내용의 양상들에 따른, 희소 행렬 곱셈 시스템을 구현하는 예시적인 컴퓨팅 환경의 블록도이다.
개관
[0039] 본 개시내용의 양상들은, 희소 행렬 밀집 벡터 곱셈(sparse matrix dense vector multiplication)을 위해 구성된 하나 이상의 집적 회로들을 포함하는 시스템에 관한 것이다. 다수의 희소 샤드들의 시스템은, 각각의 희소 샤드에 대해, 입력 시스템 행렬 및 벡터의 부분 행렬 및 부분 벡터를 수신할 수 있다. 각각의 희소 샤드는 집적 회로의 적어도 일부가 될 수 있으며, 곱셈기 및 가산기 회로들과 같은 다수의 산술 유닛들을 구현할 수 있다. 각각의 희소 샤드는, 시스템이, 예컨대, 예컨대, 희소 샤드들 및 선택적으로 본원에 설명된 바와 같은 하나 이상의 다른 구성요소들을 포함하는 칩으로서 구현될 때, 미리 결정될 수 있는 0이 아닌 최대 임계치 이하인 수의 0이 아닌 값들을 갖는 부분 행렬을 수신하도록 구성된다.
[0040] 각각의 희소 샤드는 본원에 설명된 제어 값들과 같은 메타데이터를 부가적으로 수신할 수 있으며, 희소 샤드는 상이한 입력들을 각각의 곱셈기 또는 가산기 회로로 보내고 하나의 유닛으로부터의 출력이 다른 유닛으로 전달될 때 게이팅하기 위해 제어 값들을 사용할 수 있다. 수신된 메타데이터에 따라 희소 샤드들을 구성함으로써, 희소 샤드들은 임의의 크기의 입력 부분 행렬들을 미리 결정된 치수 임계치까지 효율적으로 프로세싱하고, 곱들을 대응하는 길이들의 벡터들로서 입력들에 출력할 수 있다.
[0041] 부분 행렬을 수신하는 것의 일부로서, 각각의 희소 샤드는, 부분 행렬의 각각의 열에 있는 0이 아닌 값들의 위치들을 나타내는 하나 이상의 제어 값들을 수신할 수 있다. 하나 이상의 제어 값들을 사용하여, 희소 샤드는, 부분 행렬 및 부분 벡터의 개별 값들이 곱해지고, 합해지고, 배열되어 희소 샤드로 하여금 부분 행렬 및 부분 벡터의 곱을 나타내는 샤드 출력 벡터를 어떻게 생성하게 하는지를 조정하도록 구성될 수 있다. 시스템은, 예컨대, 시스템 입력 벡터와 시스템 입력 행렬을 곱함으로써 시스템 입력 벡터를 시스템 입력 행렬에 적용한 곱을 나타내는 시스템 출력 벡터를, 각각의 샤드의 샤드 출력 벡터로부터, 생성하도록 추가로 구성될 수 있다.
[0042] 본 개시내용의 양상들은 또한 희소 샤드들의 어레이에 의한 프로세싱을 위해 희소 행렬을 사전 프로세싱하기 위한 시스템에 관한 것이다. 하나 이상의 프로세서들의 시스템은 입력 행렬을 다수의 부분 행렬들로 파티셔닝하도록 구성될 수 있으며, 여기서 각각의 부분 행렬의 치수들은 희소 샤드에 대한 최대 행렬 입력 크기를 지정하는 미리 결정된 치수 임계치 이하이다. 파티셔닝의 부분으로서, 시스템은 부분 행렬들 중 어떤 부분 행렬이 0이 아닌 미리 결정된 최대 임계치보다 큰 수의 0이 아닌 값들을 포함하는지를 식별하고, 이에 응답하여, 식별된 부분 행렬들과 동일한 행 또는 열을 따라 부분 행렬들을 재파티셔닝할 수 있다. 시스템은 각각의 희소 샤드에 대한 부분 행렬을 생성할 때까지 이 프로세스를 반복하여, 부분 행렬에 대한 치수들이 치수 임계치들 내에 있게 하고, 부분 행렬의 0이 아닌 값들의 수는 0이 아닌 미리 결정된 임계치 이하이다.
[0043] 본 개시내용의 양상들에 따라 구현된 시스템들은 희소 행렬들과 벡터의 반복된 곱셈을 수반하는 워크로드(workload)들을 보다 효율적으로 실행할 수 있다. 예컨대, 본 개시내용의 양상들에 따른 SoC(system-on-a-chip)를 구현하는 디바이스는 종래의 접근법들에 비해 더 적은 프로세싱 사이클들에서 벡터들과 희소 행렬들을 곱한 곱들을 생성할 수 있는데, 적어도 디바이스가 최종 곱에 기여하지 않는 행렬들 내의 0 요소들의 중복되는 "0으로 곱하기" 계산들을 생략하기 때문이다. 다른 접근법이 더 높은 희소성 비율들을 갖는 더 큰 행렬들에 대해 성능 손실이 증가하는 것을 경험할 수 있지만, 본원에 설명된 바와 같이 구현된 시스템은 이러한 행렬들을 사용하여 곱들을 훨씬 더 효율적으로 계산할 수 있는데, 적어도 입력 행렬들의 희소성 비율들이 증가함에 따라, 더 높은 비율의 중복 계산들이 생략되기 때문이다.
[0044] 뉴럴 네트워크들을 실행 또는 트레이닝하는 것과 같은 일부 워크로드들은 행렬 곱셈들을 수행하는 것에 크게 의존한다. 하드웨어 가속기들 또는 다른 디바이스들은 행렬 곱셈과 같은 특정 연산들을 효율적으로 수행할 수 있지만, 프로세싱에 제한적인 조건들을 갖는 경우가 많다. 예컨대, 디바이스는 행렬의 0과 0이 아닌 값들 사이에 미리 정의된 희소성 비율을 요구하거나, 프로세싱할 입력들의 크기에 대한 엄격한 제한을 가질 수 있다. 행렬 곱셈은 많은 뉴럴 네트워크 워크로드들에 대한 유비쿼터스 유형(ubiquitous type)의 계산이지만, 프로세싱에 대한 조건들이 제한된 가속기들은, 다양한 희소 비율들을 가진 행렬들의 행렬 곱셈을 수반하는 워크로드들과 같이 가속기들이 지원할 수 있는 워크로드들의 유형들의 수에서 제한된다.
[0045] 본 개시내용의 양상들은 상이한 크기들 및 희소성 비율들의 행렬들을 유연하게 프로세싱할 수 있는 희소 행렬 곱셈을 위한 시스템을 제공한다. 희소 행렬 곱셈을 위해 구성된 희소 샤드들의 시스템의 희소 샤드는, 다수의 열들에 걸쳐 주어진 입력 부분 행렬에서 0이 아닌 값들의 위치를 계속 추적하면서, 입력 행렬의 0 값들을 폐기할 수 있다. 희소 샤드는 0이 아닌 미리 결정된 최대 임계치만큼 많은 레지스터들 및 곱셈기 회로들로만 구성될 수 있고, 입력 부분 행렬의 0이 아닌 값들만을 메모리에 저장할 수 있다. 결과적으로, 희소 샤드는 전체 크기 행렬을 저장하는 것보다 더 적은 자원들로 입력 데이터를 더 효율적으로 저장하고 프로세싱할 수 있다.
[0046] 또한, 희소 샤드는, 인접한 곱셈기 및 가산기 회로들을 따라 각각 입력 벡터의 값들로 곱해질 때, 0이 아닌 값들 및 그들의 곱들을 배열하도록 구성될 수 있다. 희소 샤드는 이러한 인접한 회로들의 출력을 결합함으로써 입력 행렬의 각각의 열에 대한 세그먼팅된 합들을 효율적으로 생성하고, 세그먼팅된 합들을 재배열하여 샤드 출력 벡터를 생성하도록 구성될 수 있다. 희소 샤드는 0이 아닌 값들의 순서를 유지하여 값을 입력 벡터의 대응하는 값들과 정확하게 합하고 곱할 수 있으며, 입력 부분 행렬과 입력 벡터의 곱으로서 샤드 출력 벡터를 정확하게 생성할 수 있다. 희소 샤드는, 입력 행렬의 형상을 변경하기 위한 사전 프로세싱 동작들을 요구하지 않고서, 입력 행렬에 대해 곱셈을 수행할 수 있다.
[0047] 시스템은 또한 입력 벡터와 다수의 희소 샤드들을 곱하기 위한 희소 행렬을 사전 프로세싱하도록 구성된 하나 이상의 프로세서들을 포함할 수 있다. 시스템은, 사용 가능한 희소 샤드들의 수에 의존하여 상이한 수들의 부분 행렬들을 생성하는 것뿐만 아니라, 0이 아닌 상이한 최대 임계치에 대한 부분 행렬들을 생성하는 것을 포함하여, 희소 샤드들의 상이한 구성들을 지원할 수 있다.
[0048] 본원에 설명된 바와 같은 본 개시내용의 양상들은 하나 이상의 프로세서들 및 다수의 희소 샤드들을 포함하는 시스템에 의해 구현될 수 있다. 시스템은, 예컨대, 컴퓨팅 플랫폼의 데이터 센터에 있는 서버 컴퓨팅 디바이스와 같은 컴퓨팅 디바이스에 설치된 칩으로서 구현될 수 있다.
예시적인 시스템들
[0049] 도 1은 희소 샤드들(101A-P)의 어레이(101)를 포함하는 예시적인 시스템(100)의 블록도이다. 어레이(101)는, 행렬 입력들에 대해 행렬 곱셈을 수행하도록 구성된 희소 행렬 곱셈 시스템, 이를테면, 희소 행렬 곱셈 시스템(100)의 적어도 일부일 수 있다.
[0050] 도 2를 참조하여 본원에서 더 상세히 설명되는 바와 같이, 희소 샤드는 산술 연산들을 수행하고, 산술 연산들을 수행하는 회로들 사이에 입력들 및 출력들을 배열하고, 그리고/또는 다른 회로들 사이에 입력 및 출력을 게이팅하도록 구성된 회로들의 집합이다. 예컨대, 희소 샤드는 직사각형 샤드 또는 희소 행렬의 부분들, 및 선형 샤드 또는 벡터의 조각 간의 행렬 곱셈을 수행하도록 구성될 수 있다. 본원에서 더 상세히 설명되는 바와 같이, 희소 샤드는 미리 결정된 최대 임계치까지, 샤드 또는 부분에 임의의 수의 0이 아닌 값들을 갖는 다양한 상이한 샤드들 또는 희소 행렬의 부분들 중 임의의 것을 수신할 수 있다.
[0051] 회로들의 집합은, 본원에 설명된 바와 같이, 각각의 게이트의 상태(즉, 개방 또는 폐쇄됨); 계산되는 피연산자들; 및/또는 각각의 회로에 대한 입력들 및 각각의 회로로부터의 출력들의 배열을 제어하도록 구성될 수 있다. 구성은, 희소 샤드가 입력으로서 수신하도록 구성된 샤드 입력 행렬의 치수들, 및/또는 샤드 입력 행렬의 0이 아닌 값들의 배열 및 수에 적어도 부분적으로 의존할 수 있다. 각각의 희소 샤드는, 희소 행렬과 벡터를 곱하도록 구성된 시스템에 대한 개별 회로 구성요소가 될 수 있다.
[0052] 각각의 희소 샤드(101A-P)는 어레이(101)의 2개 이상의 다른 희소 샤드들과 통신하도록 구성된다. 희소 샤드는 자신의 바로 인접한 이웃들, 예컨대, 희소 샤드들(101A-P)의 직사각형 배열에 의해 정의된 치수를 따라 희소 샤드 바로 앞 또는 뒤에 오는 이웃들과 통신할 수 있다. 희소 샤드들 간의 연결은, 예컨대, 버스 또는 희소 샤드와 자신의 이웃들을 물리적으로 연결하는 하나 이상의 회로 상호 연결부들을 통해 구현될 수 있다. 각각의 희소 샤드(101A-P)는, 행렬의 적어도 일부 및 벡터의 적어도 일부를 수신하고 입력 행렬과 벡터를 곱한 곱을 나타내는 출력 벡터를 생성하도록 구성된 하나 이상의 회로들로서 구현될 수 있다. 일부 예들에서, 희소 샤드들(101A-P)은 시스토릭 어레이로서 조직되지만, 다양한 구현들에서 어레이(101)는 일반적으로 희소 샤드들(101A-P)의 직사각형 배열에 따라 구성되거나 배열된다.
[0053] 어레이(101)는 회로 기판 또는 다른 재료 상에 다수의 구성요소들 및 집적 회로들을 구현하는 시스템 온 칩의 적어도 일부일 수 있다. 어레이(101)는 컴퓨팅 디바이스의 일부로서 설치될 수 있고, 메모리, 프로세서들, 네트워크 구성요소들, 및/또는 주변기기들을 포함하는 디바이스의 다른 구성요소들과 상호작용하도록 구성될 수 있다. 예컨대, 어레이(101)는, 시스템(100)의 일부로서 구현된 하나 이상의 메모리 디바이스들로부터 시스템 입력 벡터(105) 및 시스템 입력 행렬(110)을 수신할 수 있다. 시스템(100)은, 시스템 입력 벡터(105)와 시스템 입력 행렬(110)을 곱한 곱을 나타내는 시스템 출력 벡터(115)를 출력으로서 생성할 수 있다.
[0054] 일부 예들에서, 시스템 출력 벡터(115)는, 시스템(100)을 구현하는 디바이스의 구성요소들 또는 다른 디바이스들에 대한 입력으로서 공급될 수 있다. 예컨대, 시스템 출력 벡터(115)가 모델 파라미터 값과 뉴럴 네트워크에 대한 일부 벡터 입력을 곱한 곱이라면, 시스템 출력 벡터(115)는 출력 벡터(115)에 대한 활성화 함수(activation function)를 컴퓨팅하도록 구성된 하나 이상의 프로세서들에 입력으로서 공급될 수 있다.
[0055] 시스템(100)은 사전 프로세싱 엔진(150)으로부터 시스템 입력 벡터(105) 및 시스템 입력 행렬(110)을 수신할 수 있다. 사전 프로세싱 엔진(150)은, 시스템(100)을 구현하는 디바이스일 수도 있고 아닐 수도 있는 하나 이상의 컴퓨팅 디바이스들 상에서 구현될 수 있다. 시스템 입력 행렬(110)은, 예로서, 뉴럴 네트워크에 대한 모델 파라미터 값의 적어도 일부를 나타내는 값들을 포함할 수 있다. 시스템 입력 행렬(110)은 다차원 어레이 또는 텐서와 같은 더 복잡한 데이터 구조의 일부일 수 있다. 시스템(100)은 3차원 텐서 또는 행렬과 같은 더 큰 데이터 구조의 적어도 일부에 대응하는 각각의 행렬을 수신하고, 시스템 입력 벡터(105)와 곱해질 때 대응하는 출력을 생성하도록 구성될 수 있다. 시스템 입력 벡터(105)는, 예컨대, 모델 파라미터 값들이 시스템 입력 행렬(110)에 대한 값들에 의해 적어도 부분적으로 표현되는 트레이닝된 뉴럴 네트워크에 대한 입력일 수 있다.
[0056] 사전 프로세싱 엔진(150)은, 하나 이상의 제어 값들(111) 및 행렬 파티션 데이터(112)를 생성하기 위해 시스템 입력 행렬(110)을 프로세싱하도록 구성될 수 있다. 사전 프로세싱 엔진(150)은 희소 행렬을 저장하기 위한 다양한 상이한 포맷들로, 예컨대, 자신의 완전한 행-열 형태(0이 아닌 값 및 0 값들 모두를 가짐)로 시스템 입력 행렬(110)을 수신할 수 있다. 다른 예들로서, 사전 프로세싱 엔진(150)은 압축된 희소 열 포맷, 좌표 리스트 포맷, 또는 희소 행렬들을 저장하기 위한 다양한 다른 포맷들 중 임의의 것에 따라 시스템 입력 행렬(110)을 수신할 수 있다.
[0057] 사전 프로세싱 엔진(150)이 시스템 입력 행렬(110)을 자신의 완전한 형태로 수신하는 일부 예들에서, 사전 프로세싱 엔진(150)은 시스템 입력 행렬(110)을 메모리에 저장하기에 적합하도록 미리 결정된 포맷으로 변환하도록 구성된다. 예컨대, 사전 프로세싱 엔진(150)은, 미리 결정된 포맷으로 변환하기 전에, 행렬에서 0 값들을 제거하고, 행렬의 원래 위치에 대해 0이 아닌 값들의 위치를 추적하기 위한 제어 값들을 생성할 수 있다.
[0058] 도 2를 참조하여 본원에서 더 상세히 설명되는 바와 같이, 제어 값들은, 시스템 입력 벡터(105)의 부분 벡터 및 시스템 입력 행렬(110)의 부분 행렬을 수신하고, 이들을 곱하기 위한 각각의 희소 샤드를 구성하는 데 사용된다. 파티션 데이터(112)는 시스템 입력 행렬(110)이 부분 행렬들로 어떻게 분할되어야 하는지를 지정하는 데이터이다. 각각의 부분 행렬은 개개의 희소 샤드에서 입력으로서 수신되고, 파티션 데이터(112)는 어레이(101)의 희소 샤드들만큼 많은 부분 행렬들에 대한 파티셔닝을 지정한다.
[0059] 사전 프로세싱 엔진(150)은 벡터 파티션 데이터(106)를 생성하도록 구성될 수 있다. 도 5a 내지 도 5c를 참조하여 더 상세히 설명되는 바와 같이, 동일한 행 또는 열을 따른 희소 샤드들은 개개의 부분 행렬을 곱하기 위한 입력으로서 동일한 부분 벡터를 수신할 수 있다.
[0060] 시스템 입력 행렬(110) 및 시스템 입력 벡터(105)가 시스템(100)의 좌측 및 우측을 따라 공급되는 것으로 도시되지만, 시스템(100)에 입력 데이터를 공급하는 버스의 정확한 위치 및 배향은 구현마다 다를 수 있다. 예컨대, 시스템(100)과 동일한 칩 상의 다른 구성요소들의 위치에 기반하여, 시스템(100)에 입력을 공급하고 시스템(100)으로부터 출력을 수신하기 위한 버스들 또는 회로 상호연결부들은 그러한 다른 구성요소들의 위치를 감안하기 위해 다르게 배향되거나 위치될 수 있다.
[0061] 도 2는 본 개시내용의 양상들에 따른 예시적인 희소 샤드(200)의 블록도이다. 예컨대, 시스템(100)의 희소 샤드들(101A-P) 각각은 희소 샤드(200)를 참조하여 본원에 설명된 바와 같이 구현될 수 있다.
[0062] 희소 샤드(200)는 샤드 입력 벡터(205) 및 샤드 입력 행렬(210)을 수신하도록 구성된다. 샤드 입력 벡터(205)는 하나 이상의 벡터 값들을 포함하고, 1 x R의 최대 치수를 가질 수 있다. 샤드 입력 행렬은 하나 이상의 0 값들 및 하나 이상의 0이 아닌 값들을 포함하며, R x C의 최대 치수를 갖는다. R(행) 및 C(열)는, 미리 결정되고 희소 샤드가 입력으로서 수신할 수 있는 벡터/행렬의 최대 입력 크기에 대응하는 치수 임계치들이다. 상이한 구현들에서, 희소 샤드는 상이한 치수들 R 및 C에 대해 구성될 수 있다. R 및 C는 서로 동일하거나 상이할 수 있고, 상이한 희소 샤드들은, 예컨대, 희소 샤드가 프로세싱하도록 구성된 상이한 워크로드들의 데이터의 특성에 대한 응답으로 상이한 치수들에 대해 구현될 수 있다. 희소 샤드들의 어레이의 희소 샤드들은 동일한 최대 치수 임계치 내에서 입력을 수신하도록 구성될 수 있다.
[0063] 희소 샤드(200)는, 희소 샤드(200)와 연관된 메모리의 미리 결정된 어드레스 범위들 내에서 샤드 입력 벡터(205) 및 샤드 입력 행렬(210)을 수신하도록 구성될 수 있다. 예컨대, 희소 샤드(200)는 커플링된 메모리의 제1 어드레스 범위로부터 샤드 입력 벡터(205)를 자동으로 리트리브(retrieve)하고, 그리고 메모리의 동일하거나 상이한 어드레스 범위로부터 샤드 입력 행렬(210)을 리트리브하도록 구성된다. 희소 샤드(200)를 갖는 시스템(100)을 구현하는 디바이스들 또는 디바이스의 구성요소들은, 시스템에 의해 구현된 하나 이상의 희소 샤드들 각각에 대응하는 메모리의 위치들에 샤드 입력 행렬들 및 벡터들을 전송하도록 구성될 수 있다. 예컨대, 사전 프로세싱 엔진(150)은, 시스템 입력 행렬 및/또는 시스템 입력 벡터의 프로세싱을 생성한 후, 개별 샤드 입력 행렬들 및 샤드 입력 벡터들로 하여금, 희소 샤드(200)를 포함하여 각각의 희소 샤드에 대응하는 어드레스 범위들에 저장되게 하도록 구성될 수 있다.
[0064] 최대 치수 임계치 외에도, 희소 샤드(200)는 0이 아닌 미리 결정된 최대 임계치 이하인 0이 아닌 카운트를 갖는 샤드 입력 행렬들을 수신하도록 구성된다. 치수 임계치와 마찬가지로, 0이 아닌 최대 임계치는 희소 샤드(200) 및 그의 대응하는 어레이의 구현마다 상이한 값들에 대해 설정될 수 있다. 예컨대, 시스템이 프로세싱하도록 구성된 워크로드에 대한 데이터가 일반적으로 높은 희소성 비율을 갖는 프로세싱 행렬들을 포함하는 경우, 희소 샤드들의 시스템은 상대적으로 0이 아닌 더 높은 최대 임계치로 구성될 수 있다. 본원에 설명된 바와 같이, 희소 샤드의 곱셈기 및 가산기 회로들의 수는 그의 0이 아닌 최대 임계치에 대응하고, 따라서 상대적으로 낮은 0이 아닌 최대 임계치를 갖는 희소 샤드들은 더 높은 0이 아닌 최대 임계치들을 갖는 희소 샤드에 비해 더 적은 회로들로 구축될 수 있다.
[0065] 희소 샤드(200)는 크로스바(215) 및 곱셈기 회로들(220)을 포함할 수 있다. 크로스바(215)는 최대 R개의 벡터 값들을 수신하고, N개의 곱셈기 회로들(220)에 걸쳐 값들을 분배하도록 구성되며, 여기서 N은 희소 샤드(200)에 대한 0이 아닌 최대 임계치와 동일하다. 곱셈기 회로들(220A-C, N)이 도시되지만, 상이한 구현들에서 희소 샤드(200)가 더 많거나 더 적은 곱셈기 회로들을 포함할 수 있다는 것이 이해된다.
[0066] 크로스바(215)는, 입력을 수신하고 그 입력을 하나 이상의 목적지들로 전달하도록 구성된 임의의 회로 또는 회로로서 구현될 수 있고, 목적지들 자체는 곱셈기 회로들(220)과 같은 다른 회로일 수 있다. 곱셈기 회로들(220)은 2개의 피연산자들 사이의 하드웨어 곱셈을 수행하기 위한 다양한 상이한 기법들 중 임의의 것에 따라 구현될 수 있다. 곱셈기 회로에 대한 첫 번째 피연산자는 크로스바(215)에 의해 수신된 벡터 값일 수 있다. 곱셈기 회로에 대한 두 번째 피연산자는 샤드 입력 행렬(210)로부터의 0이 아닌 값일 수 있다. 0이 아닌 각각의 값은 개개의 곱셈기 회로(220A-C, N)의 개개의 레지스터(221A-C, N)에 로딩된다. 0이 아닌 최대 임계치만큼의 곱셈기 회로들을 갖는 것은 0이 아닌 임계치 내의 각각의 샤드 입력 행렬에 대해 사용 가능한 곱셈기 회로를 제공한다. 각각의 곱셈기 회로는 그의 개개의 레지스터에 저장된 0이 아닌 값과 크로스바(215)에 의해 수신된 벡터 값을 곱한다.
[0067] 희소 샤드(200)는 또한 가산기 회로들(225)을 포함할 수 있다. 각각의 가산기 회로(225A-C, N)는 대응하는 곱셈기 회로로부터 입력을 수신하도록 구성된다. 각각의 가산기 회로 사이에는 세그먼트 마커가 있다. 가산기 회로들(225A-C, N) 및 세그먼트 마커들(226A-C, N-1)이 도 2에 도시되지만, 곱셈기 회로들(220)과 마찬가지로, 가산기 회로들 및 세그먼트 마커들의 수는 구현마다 다를 수 있음을 이해해야 한다.
[0068] 가산기 회로는 2개의 피연산자들의 하드웨어 가산을 위한 임의의 기법을 사용하여 구현될 수 있다. 가산기 회로로부터의 첫 번째 피연산자는 곱셈기 회로로부터 수신된 곱일 수 있다. 예컨대, 곱셈기 회로(220A)는 벡터 값과 0이 아닌 값을 곱한 곱을 가산기 회로(225A)에 전달한다. 세그먼트 마커는, 게이트 입력 값에 의존하여, 인접한 가산기 회로들 사이의 입력을 게이팅하도록 구성된 회로 또는 다른 하드웨어 구성요소이다.
[0069] 제어 값들(230)은 샤드 입력 행렬(210) 및 샤드 입력 벡터(205)와 함께 입력으로서 수신될 수 있고, 크로스바(215), 세그먼트 마커들(226) 및/또는 크로스바(235) 중 하나 이상을 구성하는 데 사용될 수 있다. 제어 값들(230)은 샤드 입력 행렬(210)에서 개개의 0이 아닌 값에 각각 대응하는 값들의 시퀀스일 수 있다. 제어 값들(230)은 1과 같은 제1 유형의 값들을 포함할 수 있으며, 이는 샤드 입력 행렬에서 자신의 개개의 열의 0이 아닌 첫 번째 값인 0이 아닌 값들에 대응할 수 있다. 제어 값들(230)은 0과 같은 제2 유형의 값들을 포함할 수 있으며, 이는 샤드 입력 행렬의 동일한 열에서 하나 이상의 다른 0이 아닌 값들이 선행하는 0이 아닌 값들에 대응할 수 있다. 도 3a-c를 참조하여 본원에 설명된 바와 같이, 제어 값들(230)은, 본원에 설명된 바와 같이, 샤드 입력 행렬(210) 및 샤드 입력 벡터(205)를 프로세싱하기 위한 희소 샤드를 구성하는 데 사용될 수 있는 값들의 하나 이상의 벡터들을 또한 포함할 수 있다. 도 4 및 본원에서 그에 대응하는 설명은 희소 샤드를 사용하는 예시적인 행렬 곱셈을 예시한다.
[0070] 일부 구현들에서, 크로스바들(215, 235)은 희소 샤드(200)에 대한 상이한 최대 치수 임계치들을 이용하도록 구현될 수 있다. 예컨대, 치수들 R 및 C가 동일하거나 거의 동일할 때, 크로스바(235)는, 예컨대, 베네스 네트워크로서, 정사각형 또는 거의 정사각형 입력들에 대한 크로스바 재배열을 위한 임의의 기법에 따라 구현될 수 있다.
[0071] 도 3a-3c는 예시적인 샤드 입력 행렬(300A), 샤드 입력 행렬의 0이 아닌 값들의 벡터(300B), 및 샤드 입력 행렬(700A)에 대응하는 제어 값의 벡터(300C)를 도시한다. 도 3c는 또한 추가 제어 벡터들(305C 및 310C)을 도시한다.
[0072] 도 3a는 희소 샤드에 대한 예시적인 샤드 입력 행렬(300A)의 예시이다. 0이 아닌 값들은 명확성을 위해 음영 처리된 셀들로 도시된다. 명확함을 위해, 샤드 입력 행렬(300A)의 열들과 행들을 따라, 그리고 벡터들(300B 및 C)을 따라 인덱스들이 제공된다. 예컨대, 행렬(300A)에서, 행 2, 열 4(2,4)의 값은 1이다.
[0073] 도 3b는 예시적인 샤드 입력 행렬(300A)의 0이 아닌 값들의 벡터(300B)의 예시이다. 벡터(300B)의 0이 아닌 값들은, 좌측에서 우측으로 읽을 때, 샤드 입력 행렬(300A)에서 0이 아닌 값들의 출현 순서에 대응하지만, 정확한 읽기 순서는 구현마다 다를 수 있고, 예컨대, 우측에서 좌측으로 읽을 수 있다.
[0074] 도 3c는 예시적인 샤드 입력 행렬(300A)에 대한 제어 값들의 벡터들(300C, 305C 및 310C)의 예시이다. 일부 예들에서, 벡터들(300C, 305C, 및 310C)은 미리 결정된 순서에 따라 동일한 벡터의 일부일 수 있고, 희소 샤드는, 본원에 설명된 바와 같이, 제어 값들의 벡터들을 수신하고 벡터들(300C, 305C 및 310C)에 따라 희소 샤드의 상이한 구성요소들을 구성하는 데 이를 사용하도록 구성될 수 있다.
[0075] 벡터(300C)는 희소 샤드의 세그먼트 마커들을 구성하는 데 사용되는 제어 값들에 대응한다. 벡터(300C)에서 1의 제어 값(이 예에서는 비트) 값은 행렬(300A)에서 새로운 열의 시작에 대응한다. 인덱스 0에서의 값은 제어 값들의 벡터(300C)의 시작으로서 자동으로 1로 설정될 수 있다. 일부 구현들에서, 시작 제어 값은 생략될 수 있고, 프로세싱 희소 샤드에 의해 상수로 가정될 수 있다. 하드웨어 구현들은 이 값이 1인 것으로 알려져 있다는 사실을 이용함으로써 자신들의 회로부를 단순화할 수 있다. 벡터(300C)의 인덱스 1에서의 값은 또한 벡터(300B)의 인덱스 1에서의 값에 대응하도록 1로 설정되며, 이는 행렬(300A)의 다음 열에서 0이 아닌 첫 번째 값이다. 벡터(300C)의 인덱스 2에서의 값은, 다음 열의 첫 번째 0이 아닌 값이 아닌 벡터(300B)의 0이 아닌 값에 대응하기 때문에 0으로 설정된다.
[0076] 다른 예로서, 벡터(300C)의 인덱스 3에서의 비트는 1로 설정되는데, 왜냐하면 대응하는 0이 아닌 값(벡터(300B)의 인덱스 3에서의 값 1)이 행렬(300A)의 다음 열(구체적으로, 열 2)의 0이 아닌 첫 번째 값이기 때문이다. 벡터(300C)의 시퀀스는, 모든 열들의 모든 0이 아닌 값들이 표시될 때까지 이 설명된 패턴을 따른다.
[0077] 벡터(305C)는 희소 샤드에 대한 입력 크로스바를 구성하기 위한 제어 값들에 대응한다. 벡터(305C)는, 샤드 입력 행렬(300A)의 각각의 0이 아닌 값에 대해, 부분 행렬(300A) 내의 0이 아닌 값의 "y" 좌표를 지정한다. 이 예에서, "y" 치수는 수직으로 희소 행렬(300A)을 위 및 아래로 이동하지만, 다른 예들에서 "y" 치수는 상이하게 정의되는 데, 예컨대, 수평으로 정의될 수 있다. 예컨대, 벡터(305C)의 요소 0에서의 값 "3"은 행렬(300A)의 첫 번째 열에서 0이 아닌 값 "1"의 "y" 좌표에 대응한다. 다른 예로서, 벡터(305C)의 요소 6에서의 값 "4"는 행렬(300A)의 네 번째 열의 최하부에서의 값 "1"에 대응한다.
[0078] 벡터(310C)는, 희소 샤드의 가산기 회로들에 의해 생성된 합들이 샤드 출력 벡터를 생성하기 위해 출력 크로스바에 의해 어떻게 배열되는지를 구성하기 위한 제어 값들에 대응한다.
[0079] 행렬 곱셈의 수학적 정의에 따르면, 희소 행렬의 (x, y) 위치에서의 각각의 값은 y 위치에 있는 입력 벡터의 값으로 곱해진다. 곱셈의 결과가 x 위치에서의 출력에 가산된다. 입력 크로스바는, 동일한 열의 0이 아닌 값들을 희소 샤드의 인접한 곱셈기 회로들에 배열하기 위해 벡터(305C)를 사용한다. 출력 크로스바는, 희소 샤드에 의해 샤드 입력 행렬과 샤드 입력 벡터를 곱한 곱을 나타내는 샤드 출력 벡터에 컴퓨팅된 합들을 정확한 순서로 배열하기 위해 벡터(310C)를 사용한다.
[0080] 도 2로 돌아가면, 크로스바(215)는 제어 값들(230)을 수신하고, 샤드 입력 벡터가 샤드 입력 행렬과 곱해질 때, 샤드 입력 벡터(205)에 대한 각각의 값이, 대응하는 샤드 입력 행렬 열과 매칭하는 하나 이상의 곱셈기 회로들에 대한 입력으로서 수신되도록 샤드 입력 벡터(205)에 대한 각각의 값을 배열하도록 구성될 수 있다.
[0081] 크로스바(235)는 가산기 회로들로부터 하나 이상의 합들을 수신하고, 입력 샤드 행렬과 입력 샤드 벡터를 곱하는 것에 대응하는 정확한 출력 샤드 벡터를 획득하도록 수신된 합들을 재배열하도록 구성될 수 있다. 크로스바(215)에서와 같이, 다양한 상이한 기법들 중 임의의 것이 하나 이상의 회로들로서 크로스바(235)를 구현하기 위해 적용될 수 있다.
[0082] 본원에 설명된 바와 같이, 세그먼트 마커는 세그먼트 마커의 게이트 입력 값에 따라 인접한 가산기 회로들 사이의 입력을 게이팅하도록 구성된다. 예컨대, 세그먼트 마커가 1의 값을 갖는 제어 값을 수신할 때, 세그먼트 마커는 세그먼트 마커에 인접한 제1 가산기 회로로부터의 출력이 세그먼트 마커에 인접한 제2 가산기 회로에 대한 입력으로서 전달되는 것을 방지할 수 있다. 세그먼트 마커가 값이 0인 제어 값을 수신할 때, 세그먼트 마커는 제1 가산기 회로로부터의 출력을 제2 가산기 회로로 전달한다(또는 일부 구현들에서는 그 역도 가능함). 세그먼트 마커의 이러한 구성은 동일한 열의 0이 아닌 값들에 대응하는 합들(상이한 열들의 0이 아닌 값들의 합들과는 별개임)만을 가산하는 것에 대응한다. 도 2를 참조하여 본원에 설명된 바와 같이, 하나 이상의 합들이 크로스바(235)로 전달되고, 샤드 출력 벡터(240)를 생성하도록 재배열될 수 있다.
[0083] 크로스바(235)는, 입력을 폐기할지 또는 입력을 수신할지를 결정하고, 샤드 출력 벡터(240)에서 입력의 정확한 위치와 매칭하도록 입력을 재배열하도록 구성될 수 있다. 도 2에 도시된 바와 같이, 각각의 가산기 회로는 출력을 크로스바(235)에 전달할 수 있다(크로스바(235)에 대한 화살표로 도시됨). 가산기 회로 이후의 다음 세그먼트 마커가 게이팅되지 않은 경우, 크로스바(235)는 해당 가산기 회로에 대한 출력을 폐기할 수 있는데, 왜냐하면 인접한 가산기 회로들 간의 실행되는 합이 끝나지 않았기 때문이다. 다음 세그먼트 마커가 게이팅되면(또는 마지막 가산기 회로(225N)의 경우, 어떠한 세그먼트 마커가 없다면), 열에 대한 실행되는 합이 완료되고, 크로스바(235)는 출력 샤드 벡터(240)의 부분이 될 입력으로서 실행되는 합을 수신한다. 어떤 합들을 무시하고 어떤 합들을 샤드 출력 벡터(240)의 일부로서 포함할지를 추적함으로써, 크로스바(235)는 최대 치수 C까지 다양한 길이들의 출력 벡터들을 생성하기 위해 열 합들을 정확하게 추적할 수 있다.
[0084] 도 4는 샤드 입력 행렬(410), 샤드 입력 벡터(405), 및 샤드 입력 행렬(410)에 대한 제어 값들(430)을 수신하는 희소 샤드(400)의 예시적인 컴퓨테이션을 예시한다.
[0085] 샤드 입력 벡터(405) 및 샤드 입력 행렬(410)에 대한 다음의 예시적인 값들이 고려된다.
[1 3 2](벡터 405) [0 3 0 2 0 4 1 0 0 ] (행렬 410)
[0086] 이 예에서 행렬(410)에 대한 대응하는 제어 벡터들(430-432)은 다음과 같다.
[1 0 1 1] (제어 벡터 430)
[1 2 0 1] (제어 벡터 431)
[0 0 1 2] (제어 벡터 432)
[0087] 설명의 편의를 위해, 곱셈기 회로들(40A-D)은 곱셈기들(A-D)로 단축될 것이고, 세그먼트 마커들(43A-C)은 세그먼트 마커들(A-C)로 단축될 것이고, 가산기 회로들(42A-D)은 가산기들(A-D)로 단축될 것이다.
[0088] 행렬(410)에 대한 0이 아닌 값들에 기반하여, 곱셈기 A에는 값 2가 로딩되고, 곱셈기 B에는 값 1이 로딩되고, 곱셈기 C에는 값 3이 로딩되고, 곱셈기 D에는 값 4가 로딩된다. 이 예에서, 희소 샤드는 4개의 곱셈기들 A-D 및 4개의 가산기들 A-D만을 포함한다는 것이 유의된다.
[0089] 크로스바(415)는 벡터 값들 1, 3, 및 2를 갖는 벡터(405)를 수신한다. 샤드 입력 벡터(405)에서 샤드 출력 벡터(440)로의 데이터 경로를 예시하기 위해 파선(45A), 실선(45B) 및 점선(45C)이 도시된다. 크로스바(415)는 제어 벡터(431)를 수신하고, 제어 벡터(431)의 각각의 값은 샤드 입력 행렬(410)에서 개개의 0이 아닌 값의 "y" 좌표에 대응한다. 제어 벡터(431)의 값들은 1, 2, 0 및 1을 포함한다. 희소 입력 행렬(410)이 3x3의 치수를 갖기 때문에 "y" 좌표 값이 0 내지 2의 범위라는 것이 유의된다. 제어 벡터(431)는, 곱셈기들(A-D) 각각에 대해, 샤드 입력 벡터(405)의 값들 중 어떤 것이 어떤 곱셈기에 전송되어야 하는지를 지정한다.
[0090] 예컨대, 제어 벡터(431)의 첫 번째 값은, 샤드 입력 행렬(410)에서 0이 아닌 첫 번째 값의 "y" 좌표에 대응하는 1이다. "y" 좌표 1이 두 번째 좌표(0 이후)이기 때문에, 크로스바(415)는 샤드 입력 벡터(405)의 두 번째 값을 첫 번째 곱셈기(여기서는 곱셈기 A)로 라우팅한다. 제어 벡터(431)에 대한 두 번째 값은, 샤드 입력 행렬(410)에서 0이 아닌 두 번째 값의 "y" 좌표에 대응하는 2이다. 그런 다음, 크로스바(405)는 샤드 입력 벡터(405)의 세 번째 값을 곱셈기 B로 라우팅하도록 구성될 수 있다. 다른 예로서, 제어 벡터(431)의 세 번째 값은 0의 "y" 좌표를 갖는 다음 0이 아닌 값에 대응하는 0이다. 크로스바(415)는 샤드 입력 벡터(405)의 첫 번째 값을 곱셈기 C로 라우팅한다.
[0091] 행렬(410)의 첫 번째 열에 대해, 크로스바(415)는 값 3을 곱셈기 A로 라우팅하고 값 2를 곱셈기 B로 라우팅한다. 행렬(410)의 두 번째 열에 대해, 크로스바(415)는 값 1을 곱셈기 C로 라우팅한다. 행렬(410)의 세 번째 및 마지막 열에 대해, 크로스바(415)는 값 3을 곱셈기 D로 라우팅한다. 곱셈기들(A-D)에 대한 곱들은 다음과 같이: 곱셈기 A의 경우 6(3 x 2), 곱셈기 B의 경우 2(2 x 1), 곱셈기 C의 경우 3(1 x 3), 곱셈기 D의 경우 12(3 x 4)이다.
[0092] 다음으로, 가산기들(A-D)은 곱셈기들(A-D)에 의해 계산된 곱들을 수신한다. 가산기 A는 곱셈기 A로부터 6인 곱을 수신한다. 첫 번째 제어 값(1)은 폐기된다. 가산기 A는 앞에 어떠한 가산기도 없어서, 합을 세그먼트 마커 A로 전달한다. 제어 값(430)의 두 번째 값이 0이기 때문에, 세그먼트 마커 A는 게이팅되지 않는다. 가산기 B는 가산기 A(6)로부터 현재 합을 수신하고, 이를 곱셈기 B(2)의 곱에 가산한다. 세그먼트 마커 B는 게이팅되어, 가산기 B의 출력(8)이 크로스바(420)로 전달된다(파선(45A)으로 표시됨). 세그먼트 마커 B가 가산기 B로부터의 출력을 게이팅하기 때문에, 가산기 C는 곱셈기 C의 곱(3)을 아무것도 없이 더한다. 세그먼트 마커 C는 게이팅되어, 가산기 C의 출력(3)이 크로스바(420)로 전달된다(점선(45C)으로 표시됨). 마지막으로, 곱셈기 D는 곱셈기 D의 곱(12)을 수신하고, 이는 희소 샤드의 마지막 가산기이기 때문에, 자신의 출력(12)을 자동으로 크로스바(420)로 전달한다(실선(45B)으로 표시됨).
[0093] 크로스바(420)는, 출력 샤드 벡터(440)를 출력하기 위한 정확한 순서에 따라, 수신된 합들 8, 3 및 12를 재배열한다. 크로스바(420)는 값들 0, 0, 2, 및 1을 갖는 제어 벡터(432)를 수신한다. 도 3a 내지 도 3c를 참조하여 본원에 설명된 바와 같이, 출력 크로스바(420)에 대한 제어 벡터의 값들은 0이 아닌 값들의 "x" 좌표 위치들에 대응한다. "y" 좌표와 마찬가지로, 이 예에서, 값의 범위는 0 내지 2이다. 제어 벡터(432)의 첫 번째 2개의 값들은 0이다. 따라서, 크로스바(420)는 수신된 첫 번째 합을 출력 샤드 벡터(440)의 첫 번째 요소로 라우팅한다. 크로스바(432)에서 0들 다음에 오는 다음 값은 2이다. 크로스바(432)는 가산기들(A-D)로부터 수신된 두 번째 합을 출력 벡터(440)의 두 번째 요소로 라우팅하고(선(45C)로 도시됨), 세 번째 합을 세 번째 요소로 라우팅하도록(선(45B)으로 도시됨) 구성된다. 일부 예들에서, 크로스바(420)는, 예컨대, 첫 번째 2개의 0들을 갖는 벡터(432)에 도시된 바와 같이, 벡터(432)에서 연속적인 복제 제어 값들을 건너뛰도록 구성된다. 일부 예들에서, 연속적인 복제 제어 값들을 건너뛰는 대신에, 크로스바(420)는 수신된 입력 합들에 대해 포괄적인 OR 연산을 수행하고, 포괄적인 OR 연산의 결과를 연속적인 복제 제어 값들에 대응하는 출력 벡터(440)의 위치에 출력하도록 구성된다.
[0094] 예컨대, 선(46)은 가산기 A의 잠재적인 입력 소스 내지 출력 크로스바(420)를 보여준다. 세그먼트 마커(43A)가 0의 값을 갖기 때문에, 크로스바(420)에 대한 가산기 A의 출력은 억제되고, 예컨대, 마스킹되거나 0으로 설정된다. 가산기 A의 출력은 대신에 세그먼트 마커(43A)를 통해 가산기 B로 전달된다. 일부 예들에서, 출력 크로스바(420)가 제어 값들(432)을 수신할 때, 출력 크로스바(420)는 첫 번째 수신된 합(선(46)을 통함, 0의 값을 가짐) 및 두 번째 수신된 합(선(45A)을 통함, 가산기 B로부터의 8의 값을 가짐)에 대해 포괄적 OR 연산을 수행한다. 크로스바(420)는 0이 아닌 피연산자를 출력하기 위해 포괄적 OR 연산을 수행하도록 구성될 수 있다. 크로스바(420)는 수신된 합들에 대해 포괄적인 OR 연산(예컨대, 0 OR 8)을 수행한 후 8을 출력하고, 그 결과를 출력 벡터(440)의 첫 번째 위치에 전달할 것이다. 일부 예들에서, 출력 크로스바(420)는 가산기들(A-D)의 적어도 일부로부터 개별 출력들을 수신하고 이를 합할 수 있다.
[0095] 가산기 회로들은 세그먼트들을 정의하는 연속적인 범위들의 숫자들을 가산하기 위한 다양한 상이한 회로 구성들 중 임의의 것에 따라 구현될 수 있으며, 각각의 세그먼트는 대응하는 희소 샤드에 의해 프로세싱되는 샤드 입력 행렬의 개개의 열 내의 값들에 대응한다. 예컨대, 희소 샤드(200 또는 400)의 가산기 회로들은, 샤드 입력 벡터의 개개의 값들과 각각의 열의 0이 아닌 값들을 곱함으로써 곱들의 순차적인 세그먼팅된 합산을 수행하기 위한 하나 이상의 순차적인 세그먼팅된 합산 회로들(예컨대, 희소 샤드(200 또는 400)로 도시됨)로서 구현될 수 있다. 일부 구현들에서, 가산기 회로들은 합산 트리를 병렬 세그먼팅된 합산 회로로서 실행하도록 구성될 수 있다. 개별 가산기 회로들은 대응하는 입력들을 병렬로 가산하고, 본원에 설명된 바와 같이, 임의의 중간 세그먼트 마커들의 게이트 값에 따라 출력 크로스바 및/또는 인접한 가산기 회로들에 그들의 합들을 전달하도록 구성될 수 있다.
[0096] 병렬 세그먼팅된 합산 회로는, 특히, 합산되는 항들의 수가 많을 때, 순차적인 세그먼팅된 합산 회로에 비해 회로의 레이턴시를 줄일 수 있다. 세그먼트 마커들을 게이팅하기 위한 제어 값들은, 적어도, 함께 합산될 값들의 범위들이 상이한 세그먼트들의 값들에 대응하는 가산기 회로들 간의 입력을 게이팅하는 세그먼트 마커들에 대한 게이트 값들에 따라 추적될 수 있기 때문에, 병렬 세그먼팅된 합산을 허용하고, 그리고 값들에 대응하는 가산기 회로들 간의 입력이 동일한 세그먼트에 가산되는 것을 허용한다.
[0097] 일부 구현들에서, 출력 크로스바(420)는 각각의 가산기에 의해 컴퓨팅된 개별 합들을 수신하고, 합들을 가산하고, 제어 벡터(432)를 사용하여 합들을 출력 샤드 벡터(440)의 대응하는 요소에 라우팅하도록 구성된다. 2개 이상의 합들이 동일한 요소로 라우팅되고, 예컨대, 제어 벡터(432)가 벡터(432)의 첫 번째 0들과 동일한 값의 복제들을 포함하면, 출력 크로스바는, 도 4의 선(45A)으로 도시된 바와 같이, 단일 합을 수신하는 대신에, 출력 샤드 벡터(440)의 동일한 요소에 라우팅되도록 각각의 수신된 합을 가산하도록 구성된다.
예시적인 방법들
[0098] 도 5는 본 개시내용의 양상들에 따른, 희소 샤드 상의 희소 행렬의 부분 행렬과 시스템 입력 벡터의 곱셈을 위한 예시적인 프로세스(500)의 흐름도이다. 설명의 편의를 위해, 희소 행렬의 부분 행렬은 샤드 입력 행렬로 지칭된다. 도 9는 본원에서 입력 희소 행렬을 다수의 부분 행렬들로 파티셔닝하기 위한 예시적인 프로세스를 설명한다. 예컨대, 도 2의 희소 샤드(200)와 같은 희소 샤드는 프로세스(500)를 수행한다.
[0099] 희소 샤드는 블록(510)에 따라 샤드 입력 행렬을 수신한다. 샤드 입력 행렬은 미리 결정된 치수 임계치 내에 있고, 0이 아닌 미리 결정된 최대 임계치 이하인 0이 아닌 값 카운트를 갖는다.
[0100] 희소 샤드는, 블록(520)에 따라, 복수의 벡터 값들을 포함하는 샤드 입력 벡터를 수신한다. 샤드 입력 벡터는 시스템 입력 벡터의 부분 벡터이며, 이는 도 1 및 9를 참조하여 본원에 설명된 바와 같이 사전 프로세싱 엔진에 의해 시스템에 대한 사전 프로세싱 입력의 일부로서 생성될 수 있다.
[0101] 희소 샤드는, 블록(530)에 따라, 개개의 0이 아닌 값들과 개개의 벡터 값들을 곱한 하나 이상의 곱들을 생성한다. 본원에서 도 2 및 4를 참조하여 설명된 바와 같이, 희소 샤드는 샤드 입력 행렬에서 0이 아닌 값들의 위치들에 대응하는 제어 값들로 구성될 수 있다. 제어 값들에 기반하여, 희소 샤드는, 부분 벡터의 들어오는 벡터 값들을 대응하는 인접한 곱셈기 회로들에 라우팅하고, 입력 샤드 행렬의 동일한 열을 따라 0이 아닌 값들로 저장하도록 구성될 수 있다. 본원에 설명된 도 8a는 샤드 입력 행렬에 대한 제어 값들을 사용하여 희소 샤드를 구성하기 위한 예시적인 프로세스를 도시한다.
[0102] 희소 샤드는, 블록(540)에 따라, 하나 이상의 곱들의 하나 이상의 합들을 생성한다. 도 2를 참조하여 본원에 설명된 바와 같이, 희소 샤드는, 대응하는 곱셈기 회로로부터 입력을 수신하도록 구성된 다수의 가산기 회로들을 포함한다. 가산기 회로들은, 마커에 인접한 회로들을 게이팅하도록 설정된 세그먼트 마커에 도달할 때까지, 인접한 가산기 회로들을 따라 이러한 입력들을 가산하도록 추가로 구성된다. 세그먼트 마커까지의 가산기 회로 입력들의 합은 크로스바, 예컨대, 도 2의 크로스바(235)로 전달될 수 있다.
[0103] 희소 샤드는, 하나 이상의 합들로부터, 샤드 입력 벡터와 샤드 입력 행렬을 곱한 곱인 샤드 출력 벡터를 생성한다. 예컨대, 제2 크로스바를 통해, 희소 샤드는, 곱셈기 회로들에 의해 생성된 곱들에 대한 피연산자들이 제1 크로스바에 의해 어떻게 정렬되었는지에 의존하여, 수신된 합들을 재배열할 수 있다.
[0104] 도 6은 다수의 희소 샤드들로부터의 시스템 입력 벡터 및 시스템 입력 행렬의 곱을 나타내는 시스템 출력 벡터를 생성하는 예시적인 프로세스(600)의 흐름도이다. 도 1의 희소 행렬 곱셈 시스템(100)과 같은, 희소 샤드들의 시스템은 프로세스(600)를 수행할 수 있다.
[0105] 블록(610)에 따라 그리고 희소 샤드들의 어레이의 열 치수를 따른 희소 샤드들의 각각의 그룹에 대해, 그룹 내의 각각의 희소 샤드에 대한 샤드 출력 벡터를 가산하여 그룹에 대한 열 출력 벡터를 생성한다. 아래에서 설명되는 도 7c는 개개의 샤드 입력 행렬들에 따른 희소 샤드들의 예시적인 그룹화를 도시한다. 희소 샤드들의 그룹이 형성되는 치수는 구현마다 다를 수 있다. 예컨대, 시스템 입력 행렬 및 시스템 입력 벡터가 희소 샤드들의 어레이에 공급되는 방향에 의존하여, 그룹들은, 열들과 반대로, 어레이의 행들을 따를 수 있다.
[0106] 시스템은, 블록(620)에 따라, 시스템 출력 벡터를 생성하기 위해 각각의 열 출력 벡터를 연결한다. 시스템 출력 벡터는 시스템 입력 행렬과 시스템 입력 벡터를 곱한 곱이다. 일부 구현들에서 그리고 도 9를 참조하여 본원에서 더 상세히 설명되는 바와 같이, 시스템은, 예컨대, 희소 샤드들에 할당된 부분 행렬들에 걸쳐 0이 아닌 값들의 발생을 더 고르게 분포시키기 위해, 행렬의 열들이 치환(permute)되는 시스템 입력 행렬을 수신할 수 있다. 이러한 구현들에서, 시스템은, 원래 치환을 역전시키기 위해, 연결된 시스템 출력 벡터의 요소들을 재배열하도록 구성될 수 있다. 시스템은 시스템 입력 행렬, 제어 값들 및 시스템 입력 행렬에 대한 파티셔닝을 정의하는 데이터를 수신하는 것의 일부로서 재정렬을 정의하는 데이터를 수신할 수 있다.
[0107] 도 7a 내지 도 7c 및 대응하는 설명은 예시적인 희소 행렬(700)과 벡터(750) 사이의 예시적인 곱셈을 예시한다. 예시 목적으로, 곱셈은 16개의 희소 샤드들로 구성된 4x4 어레이를 갖는 시스템에서 수행되는 것으로 설명된다.
[0108] 도 7a는 예시적인 시스템 입력 행렬(700) 및 시스템 입력 벡터(750)의 예시이다. 이 예시에서, 시스템 입력 행렬(700)은 정수 값들을 갖는 것으로 도시되지만, 요소들이 다른 값들, 예컨대, 부동 소수점 값들일 수 있음을 이해해야 한다. 또한, 도 7a 내지 도 7c에서, 시스템 입력 행렬(700)을 포함하는 다양한 행렬들의 0이 아닌 값의 요소들은 음영 처리된 셀들로 도시된다.
[0109] 도 7b는 시스템 입력 행렬(700) 및 시스템 입력 벡터(750)의 파티셔닝의 예시이다. 이 예에서, 시스템 입력 행렬(700)은 16개의 부분 행렬들(700A-P)로 파티셔닝되며, 각각의 희소 샤드에 대해 하나의 부분 행렬은 4x4 어레이이다. 시스템 입력 벡터(750)는 4개의 부분 벡터들(750A-D)로 파티셔닝되며, 각각의 열에 대해 하나의 부분 백터는 희소 샤드들의 4x4 어레이이다.
[0110] 부분 벡터들 및 부분 행렬들을 16개의 희소 샤드들(희소 샤드들(A-P)로 지칭됨)에 매핑한 하나의 예가 아래 표 1에 도시된다.
희소 샤드 입력 부분 벡터 입력 부분 행렬
A 750A 700A
B 750A 700B
C 750A 700C
D 750A 700D
E 750B 700E
F 750B 700F
G 750B 700G
H 750B 700H
I 750C 700I
J 750C 700K
K 750C 700K
L 750C 700L
M 750D 700M
N 750D 700N
O 750D 700O
P 750D 700P
[0111] 도 7c는 시스템 입력 행렬과 시스템 입력 벡터(750)를 곱한 곱을 나타내는 파티셔닝된 시스템 입력 행렬(700) 및 시스템 출력 벡터(770)의 예시이다. 도 7c는 열들(705A-D)을 따라 그룹화된 파티셔닝된 행렬들을 도시한다. 도 6을 참조하여 본원에 설명된 바와 같이, 시스템은 희소 샤드들의 어레이의 각각의 열에 대한 샤드 출력 벡터들을 가산하고, 열 출력 벡터를 생성할 수 있다. 도 7c에서, 열 출력 벡터들(710A-D)은 열들(705A-D)에 대응한다. 시스템은, 시스템 입력 행렬과 시스템 입력 벡터를 곱한 곱으로서 시스템 출력 벡터를 생성하기 위해 열 출력 벡터들(710A-D)을 연결할 수 있다.
[0112] 도 8a-b는 본 개시내용의 양상들에 따른, 입력 행렬의 하나 이상의 제어 값들을 사용하여 희소 샤드를 구성하고 행렬 곱셈을 수행하기 위한 예시적인 프로세스들(600A-B)의 흐름도들이다.
[0113] 도 8a는 본 개시내용의 양상들에 따른, 샤드 입력 행렬의 하나 이상의 제어 값들을 사용하여 희소 샤드를 구성하기 위한 예시적인 프로세스(800A)의 흐름도이다. 희소 샤드, 예컨대, 도 2의 희소 샤드(200)는 프로세스(800A)를 수행할 수 있다.
[0114] 희소 샤드는, 블록(810)에 따라, 샤드 입력 행렬의 각각의 열을 따라 0이 아닌 값들의 위치들을 지정하는 하나 이상의 제어 값들을 수신한다.
[0115] 희소 샤드는, 블록(820)에 따라, 샤드 입력 행렬의 0이 아닌 값들을 곱셈기 회로들의 레지스터들에 로딩한다. 도 2를 참조하여 본원에 설명된 바와 같이, 희소 샤드는 시스템에 대해 0이 아닌 미리 결정된 최대 임계치와 동일한 수의 곱셈기 회로들을 구현할 수 있다. 희소 샤드는, 좌측에서 우측과 같이 미리 결정된 읽기 방향을 따라 샤드 입력 행렬을 읽을 때, 출현 순서로 0이 아닌 값들을 로딩할 수 있다.
[0116] 희소 샤드는, 블록(830)에 따라, 희소 샤드의 크로스바들에 하나 이상의 제어 값들을 로딩한다. 도 2의 크로스바(815)와 같은 제1 크로스바는 제어 값들을 수신하고, 행렬-벡터 곱셈의 일부로서 벡터 값으로 곱해진 대응하는 샤드 입력 행렬 열과 매칭하는 하나 이상의 곱셈기 회로들에 대한 입력으로서 수신되도록 샤드 입력 벡터에 대한 각각의 값을 배열하도록 구성될 수 있다. 도 2의 크로스바(235)와 같은 제2 크로스바는 가산기 회로들로부터 하나 이상의 합들을 수신하고, 입력 샤드 행렬과 입력 샤드 벡터를 곱하는 것에 대응하는 정확한 출력 샤드 벡터를 획득하도록 수신된 합들을 재배열하도록 구성될 수 있다.
[0117] 희소 샤드는, 블록(840)에 따라, 제어 값의 값에 기반하여, 가산기 회로들에 대한 입력을 게이팅하도록 구성된 하나 이상의 세그먼트 마커들에 하나 이상의 제어 값들을 로딩한다.
[0118] 도 8b는, 도 8a의 프로세스(800A)에 따라 구성된 희소 샤드를 사용하여 행렬-벡터 곱셈을 수행하기 위한 예시적인 프로세스의 흐름도이다.
[0119] 희소 샤드는, 블록(850)에 따라, 입력 샤드 행렬의 0이 아닌 값들을 수신하고 로딩한다.
[0120] 희소 샤드는, 블록(860)에 따라, 샤드 입력 벡터에 대한 벡터 값들을 수신하고, 이들을 샤드 입력 행렬의 동일한 열들을 따라 0이 아닌 값들을 갖는 곱셈기 회로들로 전송한다.
[0121] 희소 샤드는, 블록(870)에 따라, 세그먼트 마커에 의해 게이팅되지 않은 인접한 가산기 회로들로부터 하나 이상의 세그먼팅된 합들을 생성한다. 도 2 및 8a를 참조하여 본원에 설명된 바와 같이, 희소 샤드는 세그먼트 마커들에 의해 게이팅되지 않은 가산기 회로들 사이의 합들을 어그리게이팅(aggregate)할 수 있고, 샤드 입력 행렬의 상이한 열들로부터의 컴퓨테이션들을 나타내는, 가산기 회로들을 게이팅하기 위한 제어 값들을 사용하여 세그먼트 마커들을 구성할 수 있다. 희소 샤드가 활성 게이트 비트를 갖는 세그먼트 마커에 도달할 때, 희소 샤드는, 세그먼팅된 합들을 재배열하고 샤드 출력 벡터를 생성하도록 구성된 제2 크로스바로 세그먼팅된 합을 전달한다.
[0122] 희소 샤드는, 블록(880)에 따라, 하나 이상의 세그먼팅된 합들로부터 샤드 출력 벡터를 생성한다. 도 2 및 도 8a를 참조하여 본원에 설명된 바와 같이, 크로스바는 희소 샤드의 가산기 회로들로부터 하나 이상의 세그먼팅된 합들을 수신하기 위해 제어 값들을 사용하도록 구성될 수 있다. 크로스바는, 샤드 입력 행렬과 샤드 입력 벡터를 곱한 곱을 나타내는, 정확한 샤드 출력 벡터를 생성하도록 세그먼팅된 합들을 재배열하도록 추가로 구성될 수 있다.
[0123] 도 9는 본 개시내용의 양상들에 따른, 시스템 입력 행렬로부터 부분 행렬들을 생성하기 위한 예시적인 프로세스(900)의 흐름도이다. 하나 이상의 위치들에 있는 하나 이상의 프로세서들이 프로세스(900)를 수행할 수 있다. 예컨대, 도 1의 사전 프로세싱 엔진(150)과 같은 사전 프로세싱 엔진은 프로세스(900)를 수행할 수 있다.
[0124] 사전 프로세싱 엔진은, 블록(910)에 따라, 시스템 입력 행렬을 수신한다. 시스템 입력 행렬은, 예컨대, 도 7a의 시스템 입력 행렬(700)로 도시된 바와 같은 행렬일 수 있다.
[0125] 사전 프로세싱 엔진은, 블록(920)에 따라, 시스템 입력 행렬을 다수의 후보 부분 행렬들로 파티셔닝한다. 파티셔닝의 일부로서, 사전 프로세싱 엔진은 미리 결정된 치수 임계치들을 지정하는 파라미터들, 및 부분 행렬들을 수신하는 시스템에 의해 구현된 희소 샤드들의 수를 나타내는 하나 이상의 파라미터 값들을 수신할 수 있다. 예컨대, 사전 프로세싱 엔진은 8 행들 x 8 열들의 치수 임계치 내에서 16개의 후보 부분 행렬들(희소 샤드들의 4x4 어레이 경우)을 생성하도록 구성될 수 있다. 일부 예들에서, 사전 프로세싱 엔진은, 예컨대, 희소 샤드들의 상이한 치수 임계치 및/또는 구성들을 갖는 상이한 시스템들에 걸쳐 입력을 사전 프로세싱하기 위해, 업데이트된 파라미터 값들을 수신할 수 있다.
[0126] 일부 구현들에서, 사전 프로세싱 엔진이 시스템 입력 행렬을 파티셔닝하기 전에, 사전 프로세싱 엔진은, 후보 부분 행렬들에서 0이 아닌 값들을 고르게 분포시키기 위해 시스템 입력 행렬의 열들을 치환한다. 예컨대, 입력 행렬의 타측보다 일측에서 미리 결정된 허용 오차를 초과하여 0이 아닌 값들이 더 자주 나타나는 경우, 사전 프로세싱 엔진은, 0이 아닌 값들의 출현이 더 확산되고 따라서 파티셔닝 후 희소 샤드들 사이에서 더 고르게 분포되도록, 입력 행렬의 열들의 순서를 변경하도록 구성될 수 있다.
[0127] 사전 프로세싱 엔진이 이러한 정렬을 수행하는 경우, 사전 프로세싱 엔진은, 추가 입력으로서, 예컨대, 희소 샤드들의 어레이를 갖는 시스템으로 전송되는 파티션 데이터의 일부로서 순서를 나타내는 데이터를 시스템에 전달한다. 시스템은, 시스템 입력 행렬의 열들이 치환되기 전에, 시스템 입력 행렬과 시스템 입력 벡터를 곱한 출력과 출력 벡터를 매칭시키기 위해, 순서에 따라 시스템 출력 벡터의 요소들을 재정렬하도록 구성될 수 있다.
[0128] 시스템 입력 행렬의 열들을 치환하는 것은, 시스템 입력 행렬이 희소 샤드들의 시스템에 의해 프로세싱되는 전체 레이트를 향상시킬 수 있다. 예컨대, 열들을 치환함으로써, 특히, 일부 예들에서 일부 희소 샤드들이 0 값들만을 갖는 샤드 입력 행렬들을 수신할 때, 각각의 희소 샤드는 보다 효율적으로 사용될 수 있는 반면에, 다른 샤드들은 0이 아닌 값들만 또는 0이 아닌 임계치까지 많은 0이 아닌 값들을 갖는 샤드 입력 행렬들을 수신할 수 있다.
[0129] 사전 프로세싱 엔진은, 블록(930)에 따라, 0이 아닌 미리 결정된 임계치보다 큰 0이 아닌 값 카운트를 갖는 후보 부분 행렬이 있는지 여부를 결정한다. 사전 프로세싱 엔진이 0이 아닌 미리 결정된 임계치보다 큰 0이 아닌 값 카운트를 갖는 후보 부분 행렬이 있다고 결정하면, 사전 프로세싱 엔진은, 블록(940)에 따라, 후보 부분 행렬과 동일한 행 또는 열을 따라 부분 행렬들을 재파티셔닝한다.
[0130] 도 7b에 도시된 바와 같이, 부분 행렬은 입력 행렬에서의 자신들의 값들의 위치에 기반하여 열들 및 행들을 따라 조직될 수 있다. 사전 프로세싱 엔진이, 예컨대, 부분 행렬(700J)이 0이 아닌 임계치보다 높은 0이 아닌 값 카운트를 포함한다고 결정하는 경우, 사전 프로세싱 엔진은 부분 행렬(700J)(부분 행렬들(700I, 700K 및 700L)을 포함함)의 행을 따라 그리고/또는 부분 행렬(700J)(부분 행렬들(700B, 700F 및 700N)을 포함함)의 열을 따라 부분 행렬들을 재파티셔닝할 수 있다. 재파티셔닝을 수행함에 있어서, 사전 프로세싱 엔진은 미리 결정된 치수 임계치를 사용하고, 후보 부분 행렬들의 수가 동일하게 유지되도록 재파티션을 수행한다. 예컨대, 사전 프로세싱은 후보 부분 행렬을 분할하고, 결정된 후보 부분 행렬의 행들/열들을 따라 부분 행렬들의 행들/열들을 재분배할 수 있다.
[0131] 부분 행렬들을 재파티셔닝한 후, 사전 프로세싱 엔진은, 블록들(930 및 940)에 따라, 0이 아닌 임계치보다 큰 0이 아닌 값 카운트를 갖는 후보 부분 행렬이 있는지 여부를 다시 결정한다. 사전 프로세싱 엔진은, 0이 아닌 값 카운트가 0이 아닌 최대 임계치를 초과하는 후보 부분 행렬들이 없다고 결정할 때까지, 블록들(930 및 940)에 따라 결정 및 재파티셔닝을 반복하고, 블록(950)으로 진행할 수 있다.
[0132] 블록(950)에 도시된 바와 같이, 사전 프로세싱 엔진은 시스템 입력 벡터를 파티셔닝한다. 시스템 입력 벡터의 각각의 부분 벡터는, 희소 샤드들의 어레이에 공급하는 버스들이 어떻게 배열되는지에 의존하여, 희소 샤드들의 각각의 행 또는 열에 입력된다. 사전 프로세싱 엔진은, 벡터 치수가 수신 희소 샤드들의 행렬들과, 예컨대, 학적으로 유효한 행렬 곱셈을 위한 유효한 치수들과 곱해질 수 있도록, 벡터를 파티셔닝한다.
[0133] 예컨대, 도 7b-c 및 표 1에 도시된 바와 같이, 벡터(750)는 부분 벡터들(750A-D)로 파티셔닝되며, 이들 각각은 입력으로서 하나 이상의 희소 샤드들에 전달된다. 또한 도 7b에서, 각각의 부분 벡터(750A-D)의 치수들은 대응하는 부분 행렬(700A-P)과 곱하기 위한 정확한 치수들을 갖는다. 예컨대, 부분 벡터(750B)는 1 x 2(행 x 열)이고, 부분 행렬들(700E-H) 각각은 부분 벡터(750B)와 부분 행렬(700E-H) 간의 유효한 행렬 곱셈을 허용하는 2개의 행들을 갖는다.
[0134] 블록(960)에 도시된 바와 같이, 사전 프로세싱 엔진은 각각의 후보 부분 행렬에 대한 제어 값들을 생성한다. 도 3a 내지 도 3c를 참조하여 설명된 바와 같이, 사전 프로세싱 엔진은 행렬의 각각의 열에 대해 0이 아닌 시작 값을 나타내는 제어 값들의 벡터를 생성할 수 있다. 사전 프로세싱 엔진은 각각의 후보 부분 행렬에 대해 이 생성을 반복하여, 각각의 부분 행렬에 대한 대응하는 제어 값들을 생성한다.
[0135] 사전 프로세싱 엔진은, 블록(970)에 따라, 제어 값들 및 후보 부분 행렬들을 출력한다. 사전 프로세싱 엔진은 시스템 입력 행렬의 파티셔닝을 지정하는 제어 값들 및 데이터를, 예컨대, 도 1에 도시된 시스템(100)에 출력할 수 있다.
예시적인 컴퓨팅 환경
[0136] 도 10은 본 개시내용의 양상들에 따른, 희소 행렬 곱셈 시스템(100) 및 사전 프로세싱 엔진(150)을 구현하는 예시적인 컴퓨팅 환경의 블록도이다. 사전 프로세싱 엔진(150)은, 서버 컴퓨팅 디바이스(1015)에서와 같이, 하나 이상의 위치들에 하나 이상의 프로세서들을 갖는 하나 이상의 디바이스들에서 구현될 수 있다. 사용자 컴퓨팅 디바이스(1012) 및 서버 컴퓨팅 디바이스(1015)는 네트워크(1060)를 통해 하나 이상의 저장 디바이스들(1030)에 통신 가능하게 커플링될 수 있다. 저장 디바이스(들)(1030)는 휘발성 및 비휘발성 메모리의 조합일 수 있고, 컴퓨팅 디바이스들(1012, 1015)과 동일하거나 상이한 물리적 위치들에 있을 수 있다. 예컨대, 저장 디바이스(들)(1030)는, 정보를 저장할 수 있는 임의의 유형의 비일시적인 컴퓨터 판독 가능 매체, 이를테면, 하드 드라이브, 솔리드 스테이트 드라이브, 테이프 드라이브, 광학 저장소, 메모리 카드, ROM, RAM, DVD, CD-ROM, 기록 가능 및 판독 전용 메모리들을 포함할 수 있다.
[0137] 서버 컴퓨팅 디바이스(1015)는 하나 이상의 프로세서들(1013) 및 메모리(1014)를 포함할 수 있다. 메모리(1014)는, 프로세서(들)(1013)에 의해 실행될 수 있는 명령들(1021)을 포함하여, 프로세서(들)(1013)에 의해 액세스 가능한 정보를 저장할 수 있다. 메모리(1014)는 또한 프로세서(들)(1013)에 의해 리트리브, 조작 또는 저장될 수 있는 데이터(1023)를 포함할 수 있다. 메모리(1014)는, 프로세서(들)(1013)에 의해 액세스 가능한 정보를 저장할 수 있는 일종의 비일시적인 컴퓨터 판독 가능 매체, 이를테면, 휘발성 및 비휘발성 메모리일 수 있다. 프로세서(들)(1013)는 하나 이상의 CPU(central processing unit)들, GPU(graphic processing unit)들, FGPA(field-programmable gate array)들, 및/또는 ASIC(application-specific integrated circuit)들, 이를테면, TPU(tensor processing unit)들을 포함할 수 있다.
[0138] 서버 컴퓨팅 디바이스(1015)는 희소 행렬 곱셈 시스템(100)을 하드웨어에서, 예컨대, 시스템 온 칩으로 구현할 수 있다. 시스템(100)은 서버 컴퓨팅 디바이스(1015)에 슬로팅된 또는 설치된 물리적 칩의 일부로서 구현될 수 있다. 시스템(100)은, 이를테면, 서버 컴퓨팅 디바이스(1015)의 다른 구성요소들과 통신하도록 구성된다.
[0139] 명령들(1021)은, 프로세서(들)(1013)에 의해 실행될 때, 하나 이상의 프로세서들로 하여금 명령들에 의해 정의된 동작들을 수행하게 하는 하나 이상의 명령들을 포함할 수 있다. 명령들(1021)은, 프로세서(들)(1013)에 의한 직접 프로세싱을 위한 오브젝트 코드 포맷으로 저장될 수 있거나, 또는 온 디멘드(on demand) 방식으로 해석되거나 미리 컴파일링되는 독립적인 소스 코드 모듈들의 집합들 또는 해석 가능한 스크립트들을 포함하는 다른 포맷들로 저장될 수 있다. 명령들(1021)은 본 개시내용의 양상들과 일치하는 희소 샤드(400)를 구현하기 위한 명령들을 포함할 수 있다. 사전 프로세싱 엔진(150)은 프로세서(들)(1013)를 사용하여, 그리고/또는 서버 컴퓨팅 디바이스(1015)로부터 원격에 위치된 다른 프로세서들을 사용하여 실행될 수 있다.
[0140] 데이터(1023)는 명령들(1021)에 따라 프로세서(들)(1013)에 의해 리트리브, 저장 또는 수정될 수 있다. 데이터(1023)는, 복수의 상이한 필드들 및 레코드들을 갖는 테이블로서, 또는 JSON, YAML, proto 또는 XML 문서들로서, 컴퓨터 레지스터에, 관계형 또는 비관계형 데이터베이스에 저장될 수 있다. 데이터(1023)는 또한 이진 값들, ASCII 또는 유니코드와 같은(이에 제한되지 않음) 컴퓨터 판독 가능한 포맷으로 포맷될 수 있다. 더욱이, 데이터(1023)는 숫자들, 설명 텍스트, 독점 코드들, 포인터들, 다른 네트워크 위치들을 포함하여 다른 메모리들에 저장된 데이터에 대한 참조, 또는 관련 데이터를 계산하기 위해 함수에 의해 사용되는 정보와 같은 관련 정보를 식별하기에 충분한 정보를 포함할 수 있다.
[0141] 사용자 컴퓨팅 디바이스(1012)는 또한, 하나 이상의 프로세서들(1016), 메모리(1017), 명령들(1018), 및 데이터(1019)를 갖는 서버 컴퓨팅 디바이스(1015)와 유사하게 구성될 수 있다. 사용자 컴퓨팅 디바이스(1012)는 또한 사용자 출력(1026) 및 사용자 입력(1024)을 포함할 수 있다. 사용자 입력(1024)은 키보드, 마우스, 기계적 작동기들, 소프트 작동기들, 터치스크린들, 마이크로폰들 및 센서들과 같이, 사용자로부터 입력을 수신하기 위한 임의의 적절한 메커니즘 또는 기법을 포함할 수 있다.
[0142] 서버 컴퓨팅 디바이스(1015)는 사용자 컴퓨팅 디바이스(1012)에 데이터를 전송하도록 구성될 수 있고, 사용자 컴퓨팅 디바이스(1012)는 사용자 출력(1026)의 일부로서 구현된 디스플레이 상에 수신된 데이터의 적어도 일부를 디스플레이하도록 구성될 수 있다. 사용자 출력(1026)은 또한 사용자 컴퓨팅 디바이스(1012)와 서버 컴퓨팅 디바이스(1015) 사이의 인터페이스를 디스플레이하는 데 사용될 수 있다. 사용자 출력(1026)은 대안적으로 또는 추가적으로 하나 이상의 스피커들, 트랜스듀서들 또는 다른 오디오 출력들, 햅틱 인터페이스 또는 사용자 컴퓨팅 디바이스(1012)의 플랫폼 사용자에게 비가시 및 비가청 정보를 제공하는 다른 촉각 피드백을 포함할 수 있다.
[0143] 도 10이 프로세서들(1013, 1016) 및 메모리들(1014, 1017)을 컴퓨팅 디바이스(1015, 1012) 내에 있는 것으로서 예시하지만, 프로세서들(1013, 1016) 및 메모리들(1014, 1017)을 포함하는, 본 명세서에서 설명된 구성요소들은, 동일한 컴퓨팅 디바이스 내에서가 아닌 다른 물리적 위치들에서 동작할 수 있는 다수의 프로세서들 및 메모리들을 포함할 수 있다. 예컨대, 명령들(1021, 1018) 및 데이터(1023, 1019) 중 일부는 이동식 SD 카드에 저장되고, 나머지들은 판독 전용 컴퓨터 칩 내에 저장될 수 있다. 명령들 및 데이터의 일부 또는 전부는 프로세서들(1013, 1016)로부터 물리적으로 멀리 떨어져 있지만 프로세서들(1013, 1016)에 의해 여전히 액세스 가능한 위치에 저장될 수 있다. 유사하게, 프로세서들(1013, 1016)은 동시 및/또는 순차 동작을 수행할 수 있는 프로세서들의 집합을 포함할 수 있다. 컴퓨팅 디바이스들(1015, 1012) 각각은, 컴퓨팅 디바이스들(1015, 1012)에 의해 실행되는 동작들 및 프로그램들에 대한 시간 측정에 사용될 수 있는 타이밍 정보를 제공하는 하나 이상의 내부 클록들을 포함할 수 있다.
[0144] 서버 컴퓨팅 디바이스(1015)는 사용자 컴퓨팅 디바이스(1012)로부터 데이터를 프로세싱하기 위한 요청들을 수신하도록 구성될 수 있다. 예컨대, 환경(1000)은, 플랫폼 서비스들을 노출시키는 다양한 사용자 인터페이스들 및/또는 API들을 통해, 사용자들에게 다양한 서비스들을 제공하도록 구성된 컴퓨팅 플랫폼의 일부일 수 있다. 서비스들을 수행하는 것의 일부로서, 서버 컴퓨팅 디바이스(1015)는 시스템(100)을 사용하여 들어오는 데이터를 프로세싱할 수 있다. 예컨대, 서비스가 머신 학습 모델을 트레이닝하는 경우, 서버 컴퓨팅 디바이스(1015)는, 시스템(100)을 사용하여, 머신 학습 모델을 트레이닝하는 것의 일부로서 곱셈 연산들을 수행하도록 구성될 수 있다.
[0145] 디바이스들(1012, 1015)은 네트워크(1060)를 통한 직접 및 간접 통신이 가능할 수 있다. 디바이스들(1015, 1012)은 정보를 전송 및 수신하기 위한 시작 연결을 수락할 수 있는 청취 소켓(listening socket)들을 설정할 수 있다. 네트워크(1060) 자체는 인터넷, 월드 와이드 웹(World Wide Web), 인트라넷들, 가상 사설 네트워크들, 광역 네트워크들, 로컬 네트워크들, 및 하나 이상의 회사들 소유의 통신 프로토콜들을 사용하는 사설 네트워크들을 포함하는 다양한 구성들 및 프로토콜들을 포함할 수 있다. 네트워크(1060)는 다양한 단거리 및 장거리 연결들을 지원할 수 있다. 단거리 및 장거리 연결들은 2.402GHz 내지 2.480GHz(일반적으로 Bluetooth® 표준과 연관됨), 2.4GHz 및 5GHz(일반적으로 Wi-Fi® 통신 프로토콜과 연관됨)와 같은 상이한 대역폭들을 통해, 또는 무선 광대역 통신을 위한 LTE® 표준과 같은 다양한 통신 표준들을 사용하여 이루어질 수 있다. 추가로 또는 대안적으로, 네트워크(1060)는 또한 다양한 유형들의 이더넷 연결을 통한 것을 포함하여 디바이스들(1012, 1015) 사이의 유선 연결들을 지원할 수 있다.
[0146] 단일 서버 컴퓨팅 디바이스(1015) 및 사용자 컴퓨팅 디바이스(1012)가 도 10에 도시되지만, 본 개시내용의 양상들은, 순차 또는 병렬 프로세싱에 대한 패러다임들을 포함하여 컴퓨팅 디바이스들의 다양한 상이한 구성들 및 수량들에 따라, 또는 다수의 디바이스들의 분산 네트워크를 통해 구현될 수 있다는 것이 이해된다. 일부 구현들에서, 본 개시내용의 양상들은 단일 디바이스, 및 이들의 임의의 조합 상에서 수행될 수 있다. 또한, 사전 프로세싱 엔진 및 희소 행렬 곱셈 시스템(100)이 동일한 서버 컴퓨팅 디바이스(1015)에서 구현되는 것으로 도시되지만, 일부 구현들에서, 사전 프로세싱 엔진(150)은 하나 이상의 서버 컴퓨팅 디바이스, 및/또는 서버 컴퓨팅 디바이스(1015)와 별개인 사용자 컴퓨팅 디바이스(1012)에서 구현된다.
[0147] 본 개시내용의 양상들은 디지털 회로들, 하나 이상의 컴퓨터 프로그램들로서 컴퓨터 판독가능 저장 매체, 또는 전술한 것 중 하나 이상의 조합에서 구현될 수 있다. 컴퓨터 판독 가능 저장 매체들은, 예컨대, 컴퓨팅 디바이스에 의해 실행 가능하고 유형의(tangible) 저장 디바이스에 저장된 하나 이상의 명령들로서 비일시적일 수 있다.
[0148] 본 명세서에서 "하도록 구성된"이라는 문구는 컴퓨터 시스템들, 하드웨어, 또는 컴퓨터 프로그램, 엔진 또는 모듈의 일부와 관련된 상이한 맥락들에서 사용된다. 시스템이 하나 이상의 동작들을 수행하도록 구성되었다고 할 때, 이는, 동작 시에, 시스템으로 하여금 하나 이상의 동작들을 수행하게 하는, 시스템에 설치된 적절한 소프트웨어, 펌웨어 및/또는 하드웨어를 갖는다는 것을 의미한다. 일부 하드웨어가 하나 이상의 동작들을 수행하도록 구성되었다고 할 때, 이는, 하드웨어가, 동작 시에, 입력을 수신하고 입력에 따라 그리고 하나 이상의 동작들에 대응하는 출력을 생성하는 하나 이상의 회로들을 포함한다는 것을 의미한다. 컴퓨터 프로그램, 엔진 또는 모듈이 하나 이상의 동작들을 수행하도록 구성되었다고 할 때, 이는, 컴퓨터 프로그램이, 하나 이상의 프로그램 명령을 포함하고, 명령들은 하나 이상의 컴퓨터들에 의해 실행될 때 하나 이상의 컴퓨터들로 하여금 하나 이상의 동작들을 수행하게 한다는 것을 의미한다.
[0149] 도면들에 도시되고 청구항들에 인용된 동작들이 특정 순서로 도시되지만, 동작들이 도시된 것과 상이한 순서들로 수행될 수 있으며, 일부 동작들이 생략되고, 2회 이상 수행되고 그리고/또는 다른 동작들과 병렬로 및/또는 동시에 수행될 수 있다는 것이 이해된다. 또한, 상이한 동작들을 수행하도록 구성된 상이한 시스템 구성요소들의 분리가 구성요소들이 분리되는 것을 요구하는 것으로 이해되어서는 안 된다. 설명된 구성요소들, 모듈들, 프로그램들 및 엔진들은 단일 시스템으로서 함께 통합되거나 다수의 시스템들의 일부가 될 수 있다.
[0150] 달리 언급되지 않는 한, 전술한 대안적인 예들은 상호 배타적이지 않으며, 고유한 이점들을 달성하기 위해 다양한 조합들로 구현될 수 있다. 위에서 논의된 특징들의 이들 및 다른 변형들 및 조합들은 청구 범위에 의해 정의된 청구 대상을 벗어나지 않고 활용될 수 있으므로, 예들에 대한 전술한 설명은 청구 범위에 의해 정의된 청구 대상의 제한이 아닌 예시의 방식으로 받아들여야 한다. 또한, "이를테면", "포함하는" 등과 같이 표현된 문구들뿐만 아니라 본 명세서에 설명된 예들의 제공은 특정 예들로 청구 범위의 청구 대상을 제한하는 것이 아니라, 오히려 예들이 많은 가능한 구현들 중 하나만을 예시하기 위한 것이라고 해석되어야 한다. 또한, 상이한 도면들 내의 동일한 참조 번호들은 동일한 또는 유사한 요소들을 식별할 수 있다.

Claims (20)

  1. 시스템으로서,
    복수의 곱셈기 회로(multiplier circuit)들을 포함하는 희소 샤드(sparse shard)를 포함하고,
    상기 희소 샤드는:
    미리 결정된 0이 아닌 최대 임계치보다 작거나 같은 개수의 0이 아닌 값들을 포함하고, 상기 희소 샤드에 대한 최대 행렬 입력 크기를 지정하는 미리 결정된 치수 임계치보다 작거나 같은 치수를 갖는 샤드 입력 행렬(shard input matrix)을 수신하고;
    복수의 벡터 값들을 포함하는 샤드 입력 벡터(shard input vector)를 수신하고;
    상기 곱셈기 회로들 각각에 대해, 상기 샤드 입력 행렬의 개개의 0이 아닌 값을 수신하고;
    상기 복수의 곱셈기 회로들에 의해, 상기 샤드 입력 행렬의 상기 개개의 0이 아닌 값들과 벡터 값들을 곱한 하나 이상의 곱(product)들을 생성하고; 그리고
    상기 희소 샤드에 대한 출력으로서 그리고 상기 하나 이상의 곱들을 사용하여, 상기 샤드 입력 벡터를 상기 샤드 입력 행렬에 적용한 곱인 샤드 출력 벡터를 생성하도록 구성되는,
    시스템.
  2. 제1 항에 있어서,
    상기 샤드 출력 벡터의 길이는 1보다 큰,
    시스템.
  3. 제1 항 또는 제2 항에 있어서,
    상기 희소 샤드는:
    시스템 입력 행렬의 부분 행렬들인 복수의 샤드 입력 행렬들을 수신하고;
    시스템 입력 벡터의 부분 벡터들인 복수의 샤드 입력 벡터들을 수신하고; 그리고
    상기 복수의 희소 샤드들에 의해, 상기 시스템 입력 벡터를 상기 시스템 입력 행렬에 적용한 상기 곱을 나타내는 시스템 출력 벡터를 생성하도록
    구성된 복수의 희소 샤드들 중 하나인,
    시스템.
  4. 제3 항에 있어서,
    상기 복수의 희소 샤드들은 시스토릭 어레이(systolic array)로서 배열되고, 상기 시스토릭 어레이는 상기 시스토릭 어레이의 열 치수(column dimension)를 따라 희소 샤드들의 하나 이상의 그룹들을 포함하고; 그리고
    상기 시스템 출력 벡터를 생성하기 위해, 상기 복수의 희소 샤드들은:
    상기 시스토릭 어레이의 상기 열 치수를 따라 각각의 그룹에 대해, 개개의 열 출력 벡터를 생성하도록 상기 그룹의 각각의 희소 샤드에 대한 개개의 샤드 출력 벡터를 함께 가산하고; 그리고
    상기 시스템 출력 벡터를 생성하기 위해 각각의 그룹의 개개의 열 출력 벡터를 연결하도록 추가로 구성되는,
    시스템.
  5. 제1 항 또는 제2 항에 있어서,
    각각의 곱셈기 회로는, 상기 희소 샤드에 대한 상기 개개의 샤드 입력 행렬로부터의 개개의 0이 아닌 값을 포함하는 개개의 레지스터(register)에 커플링된,
    시스템.
  6. 제5 항에 있어서,
    상기 복수의 곱셈기 회로들 내의 곱셈기 회로들의 수는 상기 0이 아닌 미리 결정된 최대 임계치와 동일한,
    시스템.
  7. 제5 항에 있어서,
    상기 희소 샤드는 크로스바 회로(crossbar circuit)를 더 포함하고,
    상기 희소 샤드는:
    상기 크로스바 회로에 의해, 상기 샤드 입력 벡터의 상기 복수의 벡터 값들을 수신하고; 그리고
    상기 복수의 곱셈기 회로들 각각에 대한 입력으로서 그리고 상기 크로스바 회로에 의해, 상기 복수의 벡터 값들의 벡터 값을 전송하도록 추가로 구성되는,
    시스템.
  8. 제7 항에 있어서,
    상기 희소 샤드는:
    상기 복수의 곱셈기 회로들의 인접한 곱셈기 회로들의 레지스터들에 상기 샤드 입력 행렬의 동일한 열의 0이 아닌 값들을 로딩하도록 추가로 구성되는,
    시스템.
  9. 제8 항에 있어서,
    상기 희소 샤드는, 적어도 상기 샤드 입력 행렬의 각각의 열을 따라 0이 아닌 값들의 위치들을 지정하는 하나 이상의 제어 값들을 수신하도록 추가로 구성되고; 그리고
    상기 희소 샤드에 대한 상기 크로스바 회로는:
    상기 하나 이상의 제어 값들을 수신하고; 그리고
    상기 하나 이상의 제어 값들에 따라, 상기 샤드 입력 행렬의 동일한 열을 따라 0이 아닌 값들로 곱해질 벡터 값들을 인접한 곱셈기 회로들에 전송하도록 추가로 구성되는,
    시스템.
  10. 제9 항에 있어서,
    상기 희소 샤드는 복수의 가산기 회로(adder circuit)들을 더 포함하고,
    상기 희소 샤드는 하나 이상의 세그먼트 마커(segment marker)들을 더 포함하고, 각각의 세그먼트 마커는, 상기 세그먼트 마커에 로딩된 개개의 제어 값에 대한 값에 기반하여, 상기 복수의 가산기 회로들의 개개의 가산기 회로에 대한 입력을 게이팅하도록 구성되고; 그리고
    상기 희소 샤드는:
    상기 하나 이상의 제어 값들의 적어도 일부를 상기 하나 이상의 세그먼트 마커들에 로딩하고 ― 상기 샤드 입력 행렬의 제1 열에 있는 0이 아닌 값들에 대한 가산기 회로들은, 상기 제1 열과 상이한, 상기 샤드 입력 행렬의 제2 열에 있는 0이 아닌 값들을 포함하는 인접한 가산기 회로들의 입력을 수신하는 것으로부터 게이팅됨 ― ; 그리고
    상기 복수의 가산기 회로들에 의해, 상기 하나 이상의 곱들의 하나 이상의 합들을 생성하도록 추가로 구성되고,
    상기 하나 이상의 합들 각각은, 상기 샤드 입력 벡터의 하나 이상의 개개의 값들로 곱해진 상기 샤드 입력 행렬의 열의 하나 이상의 0이 아닌 값들의 개개의 세그먼팅된 합인,
    시스템.
  11. 제10 항에 있어서,
    상기 복수의 가산기 회로들은 병렬 세그먼팅된 합산 회로(parallel segmented sum circuit)를 형성하고, 하나 이상의 세그먼팅된 합들 각각은 세그먼트 마커에 의해 게이팅되지 않은 인접한 가산기 회로들에 대한 출력들의 합들인,
    시스템.
  12. 제10 항에 있어서,
    상기 크로스바 회로는 제1 크로스바 회로이고; 그리고
    상기 희소 샤드는 제2 크로스바 회로를 더 포함하고,
    상기 제2 크로스바 회로는:
    하나 이상의 세그먼팅된 합들을 수신하고, 그리고
    상기 희소 샤드에 대한 개개의 샤드 출력 벡터를 생성하기 위해, 상기 하나 이상의 제어 값들에 따라, 상기 하나 이상의 세그먼팅된 합들을 배열하도록 구성되는,
    시스템.
  13. 제12 항에 있어서,
    상기 제2 크로스바 회로는 베네스() 네트워크를 형성하고, 상기 샤드 입력 행렬은 정사각형 행렬인,
    시스템.
  14. 복수의 곱셈기 회로들을 포함하는 희소 샤드에 의해, 미리 결정된 0이 아닌 최대 임계치보다 작거나 같은 개수의 0이 아닌 값들을 포함하고, 상기 희소 샤드에 대한 최대 행렬 입력 크기를 지정하는 미리 결정된 치수 임계치보다 작거나 같은 치수를 갖는 샤드 입력 행렬, 및 복수의 벡터 값들을 포함하는 샤드 입력 벡터를 수신하는 단계;
    상기 곱셈기 회로들 각각에 대해, 상기 샤드 입력 행렬의 개개의 0이 아닌 값을 수신하는 단계;
    상기 희소 샤드의 상기 복수의 곱셈기 회로들에 의해, 상기 샤드 입력 행렬의 상기 개개의 0이 아닌 값들과 개개의 벡터 값들을 곱한 하나 이상의 곱들을 생성하는 단계; 및
    상기 희소 샤드에 의해, 상기 희소 샤드에 대한 출력으로서 그리고 상기 하나 이상의 곱들을 사용하여, 상기 샤드 입력 벡터를 샤드 입력 행렬에 적용한 곱인 샤드 출력 벡터를 생성하는 단계를 포함하는,
    방법.
  15. 제14 항에 있어서,
    상기 희소 샤드에 의해 상기 샤드 출력 벡터를 생성하는 단계는, 1보다 큰 길이를 갖는 상기 샤드 출력 벡터를 생성하는 단계를 포함하는,
    방법.
  16. 제14 항 또는 제15 항에 있어서,
    상기 희소 샤드는:
    시스템 입력 행렬의 부분 행렬들인 복수의 샤드 입력 행렬들을 수신하고;
    시스템 입력 벡터의 부분 벡터들인 복수의 샤드 입력 벡터들을 수신하고; 그리고
    상기 복수의 희소 샤드들에 의해, 상기 시스템 입력 벡터를 상기 시스템 입력 행렬에 적용한 상기 곱을 나타내는 시스템 출력 벡터를 생성하도록
    구성된 복수의 희소 샤드들 중 하나인,
    방법.
  17. 제16 항에 있어서,
    상기 복수의 희소 샤드들은 시스토릭 어레이로서 배열되고, 상기 시스토릭 어레이는 상기 시스토릭 어레이의 열 치수를 따라 희소 샤드들의 하나 이상의 그룹들을 포함하고; 그리고
    상기 시스템 출력 벡터를 생성하는 단계는:
    상기 시스토릭 어레이의 상기 열 치수를 따라 각각의 그룹에 대해, 개개의 열 출력 벡터를 생성하도록 상기 그룹의 각각의 희소 샤드에 대한 개개의 샤드 출력 벡터를 함께 가산하는 단계; 및
    상기 시스템 출력 벡터를 생성하기 위해 각각의 그룹의 개개의 열 출력 벡터를 연결하는 단계를 포함하는,
    방법.
  18. 제14 항 또는 제15 항에 있어서,
    각각의 곱셈기 회로는, 상기 희소 샤드에 대한 상기 개개의 샤드 입력 행렬로부터의 개개의 0이 아닌 값을 포함하는 개개의 레지스터에 커플링된,
    방법.
  19. 제18 항에 있어서,
    상기 복수의 곱셈기 회로들 내의 곱셈기 회로들의 수는 상기 0이 아닌 미리 결정된 최대 임계치와 동일한,
    방법.
  20. 명령들을 저장하는 하나 이상의 비일시적인 컴퓨터 판독 가능 저장 매체들로서,
    상기 명령들은, 복수의 희소 샤드들을 포함하는 시스템에 의해 실행될 때, 상기 시스템으로 하여금 동작들을 수행하게 하고,
    상기 동작들은:
    복수의 곱셈기 회로들을 포함하는 희소 샤드에 의해, 미리 결정된 0이 아닌 최대 임계치보다 작거나 같은 개수의 0이 아닌 값들을 포함하고, 상기 희소 샤드에 대한 최대 행렬 입력 크기를 지정하는 미리 결정된 치수 임계치보다 작거나 같은 치수를 갖는 샤드 입력 행렬, 및 복수의 벡터 값들을 포함하는 샤드 입력 벡터를 수신하는 동작;
    상기 곱셈기 회로들 각각에 대해, 상기 샤드 입력 행렬의 개개의 0이 아닌 값을 수신하는 동작;
    상기 희소 샤드의 상기 복수의 곱셈기 회로들에 의해, 상기 개개의 0이 아닌 값들과 개개의 벡터 값들을 곱한 하나 이상의 곱들을 생성하는 동작; 및
    상기 희소 샤드에 대한 출력으로서 그리고 상기 하나 이상의 곱들을 사용하여, 상기 샤드 입력 벡터를 상기 샤드 입력 행렬에 적용한 곱인 샤드 출력 벡터를 생성하는 동작을 포함하는,
    하나 이상의 비일시적인 컴퓨터 판독 가능 저장 매체들.
KR1020220016772A 2021-05-25 2022-02-09 하드웨어에서의 희소 행렬 곱셈 KR102601034B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020230151637A KR20230155417A (ko) 2021-05-25 2023-11-06 하드웨어에서의 희소 행렬 곱셈

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US17/329,259 US20220382829A1 (en) 2021-05-25 2021-05-25 Sparse matrix multiplication in hardware
US17/329,259 2021-05-25

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020230151637A Division KR20230155417A (ko) 2021-05-25 2023-11-06 하드웨어에서의 희소 행렬 곱셈

Publications (2)

Publication Number Publication Date
KR20220159257A KR20220159257A (ko) 2022-12-02
KR102601034B1 true KR102601034B1 (ko) 2023-11-09

Family

ID=80222142

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020220016772A KR102601034B1 (ko) 2021-05-25 2022-02-09 하드웨어에서의 희소 행렬 곱셈
KR1020230151637A KR20230155417A (ko) 2021-05-25 2023-11-06 하드웨어에서의 희소 행렬 곱셈

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020230151637A KR20230155417A (ko) 2021-05-25 2023-11-06 하드웨어에서의 희소 행렬 곱셈

Country Status (5)

Country Link
US (1) US20220382829A1 (ko)
EP (1) EP4095719A1 (ko)
JP (2) JP7401513B2 (ko)
KR (2) KR102601034B1 (ko)
CN (1) CN114329329A (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11940907B2 (en) * 2021-06-25 2024-03-26 Intel Corporation Methods and apparatus for sparse tensor storage for neural network accelerators

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
HE XIN 등, "Sparse - TPU adapting systolic arrays for sparse matrices", PROCEEDINGS OF THE 34TH ACM INT. CONF. ON SUPERCOMPUTING, ACMPUB27,(2020.6.29.)
QIN ERIC 등, "SIGMA: A Sparse and Irregular GEMM Accelerator with Flexible Interconnects for DNN Training", 2020 IEEE INT. SYM. ON HIGHPERFORMANCE COMPUTER ARCHITECTURE(HPCA), IEEE, (2020.2.22.)
YAN MINGYU 등, "HyGCN: A GCN Accelerator with Hybrid Architecture", 2020 IEEE INT. SYM. ON HIGH PERFORMANCE COMPUTER ARCHITECTURE(HPCA), IEEE, (2020.2.22.)

Also Published As

Publication number Publication date
CN114329329A (zh) 2022-04-12
JP2022181161A (ja) 2022-12-07
JP7401513B2 (ja) 2023-12-19
EP4095719A1 (en) 2022-11-30
JP2024028901A (ja) 2024-03-05
US20220382829A1 (en) 2022-12-01
KR20220159257A (ko) 2022-12-02
KR20230155417A (ko) 2023-11-10

Similar Documents

Publication Publication Date Title
Kung Systolic algorithms for the CMU WARP processor
KR102511911B1 (ko) Gemm 데이터플로우 가속기 반도체 회로
Lu et al. SpWA: An efficient sparse winograd convolutional neural networks accelerator on FPGAs
Kang Accelerator-aware pruning for convolutional neural networks
Peterka et al. A configurable algorithm for parallel image-compositing applications
AU2008202591B2 (en) High speed and efficient matrix multiplication hardware module
JP2022540548A (ja) エネルギー効率的な入力オペランド固定アクセラレータにおいて小チャネルカウント畳み込みを実施するためのシステムおよび方法
KR102354722B1 (ko) 계산 장치 및 방법
CN108170639B (zh) 基于分布式环境的张量cp分解实现方法
US20170206089A1 (en) Information processing apparatus and computational method
KR20230155417A (ko) 하드웨어에서의 희소 행렬 곱셈
Gu et al. DLUX: A LUT-based near-bank accelerator for data center deep learning training workloads
CN109074516A (zh) 计算处理装置和计算处理方法
US11983616B2 (en) Methods and apparatus for constructing digital circuits for performing matrix operations
US20200226201A1 (en) Methods and Apparatus for Constructing Digital Circuits for Performing Matrix Operations
Arredondo-Velazquez et al. A streaming architecture for Convolutional Neural Networks based on layer operations chaining
Hunter et al. Two sparsities are better than one: unlocking the performance benefits of sparse–sparse networks
TWI808259B (zh) 具有壓縮進位之數位電路
Nash Computationally efficient systolic architecture for computing the discrete Fourier transform
Gerdt et al. Some algorithms for calculating unitary matrices for quantum circuits
US10884736B1 (en) Method and apparatus for a low energy programmable vector processing unit for neural networks backend processing
Mozafari et al. Implementing convolutional neural networks using hartley stochastic computing with adaptive rate feature map compression
US20240086719A1 (en) Sparse encoding and decoding at mixture-of-experts layer
Venieris et al. Towards heterogeneous solvers for large-scale linear systems
Shi et al. Trio-ViT: Post-Training Quantization and Acceleration for Softmax-Free Efficient Vision Transformer

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
A107 Divisional application of patent
GRNT Written decision to grant