KR20220161485A - 다수의 누산기들을 구비한 시스톨릭 어레이 셀들 - Google Patents

다수의 누산기들을 구비한 시스톨릭 어레이 셀들 Download PDF

Info

Publication number
KR20220161485A
KR20220161485A KR1020227039598A KR20227039598A KR20220161485A KR 20220161485 A KR20220161485 A KR 20220161485A KR 1020227039598 A KR1020227039598 A KR 1020227039598A KR 20227039598 A KR20227039598 A KR 20227039598A KR 20220161485 A KR20220161485 A KR 20220161485A
Authority
KR
South Korea
Prior art keywords
matrix
input
multiplication
cell
sub
Prior art date
Application number
KR1020227039598A
Other languages
English (en)
Inventor
제레미아 윌콕
Original Assignee
구글 엘엘씨
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 구글 엘엘씨 filed Critical 구글 엘엘씨
Publication of KR20220161485A publication Critical patent/KR20220161485A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/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
    • 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
    • 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
    • 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
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/38Indexing scheme relating to groups G06F7/38 - G06F7/575
    • G06F2207/3804Details
    • G06F2207/386Special constructional features
    • G06F2207/3884Pipelining
    • G06F2207/3892Systolic array

Landscapes

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

Abstract

이 명세서는 하드웨어 처리 유닛들의 시스톨릭 어레이들을 설명한다. 일 양태에서, 행렬 계산 유닛은 시스톨릭 어레이로 배열된 다수의 셀들을 포함한다. 각 셀은 입력 행렬들의 요소들 또는 부분 행렬들의 곱을 결정하도록 구성된 곱셈 회로, 입력 누산 값과 상기 곱셈 회로에 의해 출력된 곱의 합을 결정하도록 구성된 합산 회로, 상기 합산 회로의 출력에 접속된 다수의 누산기들, 및 상기 누산기들 중에서, 상기 합산 회로에 의해 출력된 합을 수신할 주어진 누산기를 선택하도록 구성된 제어기 회로를 포함한다.

Description

다수의 누산기들을 구비한 시스톨릭 어레이 셀들
관련 출원들에 대한 상호 참조
본 출원은 35 U.S.C. §119의 규정에 따라, 2020년 11월 30일에 출원된 미국 가출원 제63/119,556호에 대한 이익을 주장하고, 그 전체 내용이 인용에 의해 본 명세서에 포함된다.
기술 분야
이 명세서는 하드웨어 처리 유닛들의 시스톨릭 어레이들에 관한 것이다.
시스톨릭 어레이는 네트워크를 통해 데이터를 계산하고 전달하는 처리 유닛들의 네트워크이다. 시스톨릭 어레이 내의 데이터는 파이프라인 방식으로 처리 유닛들 사이를 흐르고 각 처리 유닛은 그의 업스트림 이웃 처리 유닛들로부터 수신된 데이터에 기초하여 부분 결과를 독립적으로 계산할 수 있다. 셀들이라고도 지칭될 수 있는 처리 유닛들은 함께 하드-와이어링되어 업스트림 처리 유닛들로부터 다운스트림 처리 유닛들로 데이터를 전달할 수 있다. 시스톨릭 어레이들은, 예를 들어, 행렬 곱셈들을 수행하기 위해, 기계 학습 애플리케이션들에서 사용된다.
일반적으로, 본 명세서에서 설명된 주제의 하나의 혁신적인 양태는 시스톨릭 어레이로 배열된 다수의 셀들을 포함하는 행렬 계산 유닛으로 구현될 수 있다. 각 셀은 입력 행렬들의 요소들 또는 부분 행렬들의 곱을 결정하도록 구성된 곱셈 회로, 입력 누산 값과 상기 곱셈 회로에 의해 출력된 곱의 합을 결정하도록 구성된 합산 회로, 상기 합산 회로의 출력에 접속된 다수의 누산기들, 및 상기 다수의 누산기들 중에서, 상기 합산 회로에 의해 출력된 합을 수신할 주어진 누산기를 선택하도록 구성된 제어기 회로를 포함한다.
이들 및 기타 구현들은 각각 다음의 특징들 중 하나 이상을 옵션으로 포함할 수 있다. 일부 양태들에서, 상기 제어기 회로는 상기 셀에 의해 수신된 선택기 데이터에 기초하여 상기 곱셈 회로에 의해 결정된 다수의 곱들 각각에 대해 상기 주어진 누산기를 선택하도록 구성된다.
일부 양태들에서, 각 셀은 제1 부분 행렬을 수신하도록 구성된 제1 입력 레지스터 및 제2 부분 행렬을 수신하도록 구성된 제2 입력 레지스터를 포함하고, 상기 곱셈 회로에 의해 결정된 곱은 상기 제1 부분 행렬과 상기 제2 부분 행렬의 곱을 포함한다. 각 셀은 추가로 선택기 데이터를 수신하도록 구성된 하나 이상의 선택기 레지스터를 포함할 수 있다. 상기 제어기 회로는 상기 선택기 데이터에 기초하여 상기 곱셈 회로에 의해 결정된 다수의 곱들 각각에 대해 상기 주어진 누산기를 선택하도록 구성될 수 있다.
일부 양태들에서, 상기 선택기 데이터는 상기 제1 부분 행렬 내에서 0이 아닌 요소의 위치를 나타내는 상기 제1 부분 행렬의 희소성 패턴을 정의하는 데이터를 포함할 수 있다. 상기 선택기 데이터는 상기 제2 부분 행렬 내에서 0이 아닌 요소의 위치를 나타내는 상기 제2 부분 행렬의 희소성 패턴을 정의하는 데이터를 포함할 수 있다.
일부 양태들에서, 상기 선택기 데이터는 상기 제1 부분 행렬이 속하는 제1 부분 곱셈을 나타낼 수 있다. 상기 선택기 데이터는 상기 제2 부분 행렬이 속하는 제2 부분 곱셈을 나타낼 수 있다. 상기 제1 부분 곱셈이 상기 제2 부분 곱셈과 일치할 때, 상기 제어기 회로는 상기 제1 부분 곱셈 및 상기 제2 부분 곱셈에 대응하는 상기 주어진 누산기를 선택하도록 구성될 수 있다. 상기 제1 부분 곱셈이 상기 제2 부분 곱셈과 일치하지 않을 때, 상기 제어기는 상기 복수의 누산기 모두에 대한 기입 입력을 디스에이블하도록 구성될 수 있다.
일부 양태들에서, 각 누산기는 입력 행렬들의 주어진 세트에 대해 상기 합산 회로에 의해 출력된 값들을 누산한다.
일반적으로, 본 명세서에서 설명된 주제의 또 다른 혁신적인 양태는 데이터 처리 셀로 구현될 수 있다. 상기 데이터 처리 셀은 입력 행렬들의 부분 행렬들의 곱을 결정하도록 구성된 곱셈 회로, 입력 누산 값과 상기 곱셈 회로에 의해 출력된 곱의 합을 결정하도록 구성된 합산 회로, 상기 합산 회로의 출력에 접속된 다수의 누산기들, 및 상기 다수의 누산기들 중에서, 상기 합산 회로에 의해 출력된 합을 수신할 주어진 누산기를 선택하도록 구성된 제어기 회로를 포함할 수 있다.
이들 및 기타 구현들은 각각 다음의 특징들 중 하나 이상을 옵션으로 포함할 수 있다. 일부 양태들에서, 상기 제어기 회로는 상기 데이터 처리 셀에 의해 수신된 선택기 데이터에 기초하여 상기 곱셈 회로에 의해 결정된 다수의 곱들 각각에 대해 상기 주어진 누산기를 선택하도록 구성된다.
일부 양태들에서, 상기 데이터 처리 셀은 제1 부분 행렬을 수신하도록 구성된 제1 입력 레지스터 및 제2 부분 행렬을 수신하도록 구성된 제2 입력 레지스터를 포함한다. 상기 곱셈 회로에 의해 결정된 곱은 상기 제1 부분 행렬과 상기 제2 부분 행렬의 곱을 포함한다. 상기 데이터 처리 셀은 선택기 데이터를 수신하도록 구성된 하나 이상의 선택기 레지스터를 포함할 수 있다. 상기 제어기 회로는 상기 선택기 데이터에 기초하여 상기 곱셈 회로에 의해 결정된 다수의 곱들 각각에 대해 상기 주어진 누산기를 선택하도록 구성될 수 있다.
일부 양태들에서, 상기 선택기 데이터는 상기 제1 부분 행렬 내에서 0이 아닌 요소의 위치를 나타내는 상기 제1 부분 행렬의 희소성 패턴을 정의하는 데이터를 포함한다. 상기 선택기 데이터는 상기 제2 부분 행렬 내에서 0이 아닌 요소의 위치를 나타내는 상기 제2 부분 행렬의 희소성 패턴을 정의하는 데이터를 포함할 수 있다.
일부 양태들에서, 상기 선택기 데이터는 상기 제1 부분 행렬이 속하는 제1 부분 곱셈을 나타낸다. 상기 선택기 데이터는 상기 제2 부분 행렬이 속하는 제2 부분 곱셈을 나타낼 수 있다. 상기 제1 부분 곱셈이 상기 제2 부분 곱셈과 일치할 때, 상기 제어기는 상기 제1 부분 곱셈 및 상기 제2 부분 곱셈에 대응하는 상기 주어진 누산기를 선택하도록 구성될 수 있다. 상기 제1 부분 곱셈이 상기 제2 부분 곱셈과 일치하지 않을 때, 상기 제어기는 상기 복수의 누산기 모두에 대한 기입 입력을 디스에이블하도록 구성될 수 있다.
일부 양태들에서, 상기 다수의 누산기들의 각 누산기는 입력 행렬들의 주어진 세트에 대해 상기 합산 회로에 의해 출력된 값들을 누산한다.
이들 및 기타 구현들은 각각 다음의 특징들 중 하나 이상을 옵션으로 포함할 수 있다. 일부 양태들에서, 행렬들을 곱하기 위한 방법은, 셀의 제1 입력 레지스터에 의해, 제1 입력 부분 행렬을 수신하는 단계; 상기 셀의 제2 입력 레지스터에 의해, 제2 입력 부분 행렬을 수신하는 단계; 상기 셀의 제어기에 의해, 상기 셀의 다수의 누산기들 중에서, (i) 상기 제1 입력 부분 행렬과 상기 제2 입력 부분 행렬의 곱과 (ii) 상기 주어진 누산기의 현재 누산 값의 합을 수신할 주어진 누산기를 선택하는 단계; 상기 셀의 곱셈 회로에 의해, 상기 제1 입력 행렬과 상기 제2 입력 행렬의 곱을 생성하는 단계; 상기 셀의 합산 회로에 의해, 상기 제1 입력 행렬과 상기 제2 입력 행렬의 곱을 상기 현재 누산 값에 가산함으로써 업데이트된 누산 값을 생성하는 단계; 및 상기 업데이트된 누산 값을 상기 주어진 누산기에 저장하는 단계를 포함한다.
이들 및 기타 구현들은 각각 다음의 특징들 중 하나 이상을 옵션으로 포함할 수 있다. 일부 양태들에서, 상기 곱셈 회로에 의해 결정된 곱은 상기 제1 부분 행렬과 상기 제2 부분 행렬의 곱을 포함한다. 일부 양태들은, 상기 셀의 하나 이상의 선택기 레지스터에 의해, 선택기 데이터를 수신하는 단계를 포함한다. 상기 주어진 누산기를 선택하는 단계는 상기 선택기 데이터에 기초하여 상기 주어진 누산기를 선택하는 단계를 포함할 수 있다.
일부 양태들에서, 상기 선택기 데이터는 상기 제1 부분 행렬 내에서 0이 아닌 요소의 위치를 나타내는 상기 제1 입력 부분 행렬의 희소성 패턴을 정의하는 데이터를 포함한다. 상기 선택기 데이터는 상기 제2 부분 행렬 내에서 0이 아닌 요소의 위치를 나타내는 상기 제2 입력 부분 행렬의 희소성 패턴을 정의하는 데이터를 포함한다.
일부 양태들에서, 상기 선택기 데이터는 상기 제1 입력 부분 행렬이 속하는 제1 부분 곱셈을 나타낸다. 상기 선택기 데이터는 상기 제2 입력 부분 행렬이 속하는 제2 부분 곱셈을 나타낼 수 있다. 상기 제1 부분 곱셈이 상기 제2 부분 곱셈과 일치할 때, 상기 제어기는 상기 제1 부분 곱셈 및 상기 제2 부분 곱셈에 대응하는 상기 주어진 누산기를 선택할 수 있다. 상기 제1 부분 곱셈이 상기 제2 부분 곱셈과 일치하지 않을 때, 상기 제어기는 상기 다수의 누산기들 모두에 대한 기입 입력을 디스에이블한다.
일부 양태들에서, 상기 다수의 누산기들의 각 누산기는 입력 행렬들의 주어진 세트에 대해 상기 합산 회로에 의해 출력된 값들을 누산한다.
본 명세서에서 설명된 주제는 다음의 이점들 중 하나 이상을 실현하도록 특정 실시예들에서 구현될 수 있다. 이 문서에서 설명된 시스톨릭 어레이 셀들은 다수의 누산기들 및 제어기 회로를 포함할 수 있고, 이는 셀들이 여러 가지 다양한 행렬 곱셈 계산들을 수행하는 것을 가능하게 한다. 이는 시스톨릭 어레이 내에서 추가적인 유연성을 제공하고 더 적은 하드웨어를 사용하여 행렬 계산들의 효율성을 증가시킨다. 예를 들어, 제어기 회로와 다수의 누산기들의 사용은 희소 행렬에 대해 수행되는 연산들이 조밀 행렬들에 대해 직접 연산들을 수행하는 것보다 더 빠르고 더 효율적으로 수행되는 것을 가능하게 할 수 있다. 제어기 회로와 다수의 누산기들은 또한 셀들이 상이한 희소성 패턴들, 예를 들어, 타일 공유 및 부분 행렬들을 갖는 n개 중 1개 패턴들(1-of-n patterns)에 대해 행렬 계산들을 수행하는 것도 가능하게 한다.
전술한 주제의 다양한 특징들 및 이점들이 도면들과 관련하여 아래에 설명된다. 추가적인 특징들 및 이점들은 본 명세서에서 설명된 주제 및 청구항들로부터 명백하다.
도 1은 행렬 계산 유닛을 포함하는 예시적인 처리 시스템을 도시한다.
도 2는 행렬 계산 유닛을 포함하는 예시적인 아키텍처를 도시한다.
도 3은 시스톨릭 어레이 내부의 셀의 예시적인 아키텍처를 도시한다.
도 4는 행렬 곱셈을 수행하기 위한 예시적인 프로세스의 흐름도이다.
다양한 도면들에서 유사한 참조 번호들 및 명칭들은 유사한 요소들을 나타낸다.
일반적으로, 이 문서는 다수의 누산기들을 포함하는 셀들의 시스톨릭 어레이를 설명한다. 셀들은, 계산들을 수행하기 위한, 계산 유닛들, 예를 들어, 곱셈 및/또는 덧셈 회로를 포함할 수 있다. 예를 들어, 시스톨릭 어레이는 입력 행렬들에 대해 행렬-행렬 곱셈을 수행할 수 있고 각 셀은 각 입력 행렬의 일부의 부분 행렬 곱을 결정할 수 있다. 셀들의 시스톨릭 어레이는 처리 시스템의 행렬 계산 유닛, 예를 들어, 기계 학습 모델들을 훈련시키고 및/또는 기계 학습 계산들을 수행하기 위해 사용되는 특수 목적 기계 학습 프로세서, 그래픽 처리 유닛(GPU), 또는 행렬 곱셈들을 수행하는 다른 적절한 처리 시스템의 일부일 수 있다.
이 시스톨릭 어레이는 각 셀이 입력 행렬들의 요소들의 일부의 곱들의 부분 합을 계산하는 출력 고정 행렬 곱셈 기법을 수행할 수 있다. 출력 고정 기법에서, 입력 행렬들의 요소들은 시스톨릭 어레이의 행들을 가로질러, 또는 열들을 가로질러 반대 방향 또는 직교 방향으로 시프트될 수 있다. 셀이 2개의 부분 행렬을 수신할 때마다, 셀은 그 부분 행렬들의 곱을 결정하고 2개의 입력 부분 행렬 중 그것의 부분에 대해 셀에 의해 결정된 모든 곱들의 부분 합을 누산한다.
시스톨릭 어레이 셀들은 시스톨릭 어레이들이 다양한 행렬 연산들, 예컨대 상이한 희소성 패턴들을 갖는 상이한 행렬들에 대한 연산들을 지원하는 것을 가능하게 하는 제어기, 예를 들어, 제어 회로, 및 다수의 누산기들을 포함할 수 있다. 희소성 패턴은 행렬 내에서 0이 아닌 요소들의 수를 나타내며, y개 중 x개 희소성 패턴(x-of-y sparsity pattern)으로서 표시될 수 있는데, 여기서 x는 0이 아닌 요소들의 최대 수이고 y는 요소들의 총수이다. 예를 들어, 4개 중 1개 희소성 패턴은 행렬이 4개의 요소를 포함하며, 그 요소들 중 많아야 1개가 0이 아닌 것을 나타낼 수 있다. 제어기는 셀에 의해 수신된 선택기 데이터에 기초하여 곱이 누산되는 누산기를 제어할 수 있다. 예를 들어, 선택기 데이터는 부분 행렬의 희소성 데이터 및 부분 행렬에서 0이 아닌 요소를 식별하는 데이터를 포함할 수 있다. 이 데이터에 기초하여, 제어기는 누산기들 중 하나가 0이 아닌 요소와 다른 행렬 요소의 곱을 누산하는 것을 가능하게 할 수 있다.
시스톨릭 어레이들은 기계 학습 모델들을 훈련시키고 기계 학습 계산들을 수행할 때 희소 행렬들을 보다 효율적으로 처리하도록 적응되어, 조밀 행렬들에 대해 직접 동일하거나 유사한 계산들을 수행하는 것보다 더 적은 계산 리소스들을 사용하여 훈련 및 계산들이 더 빨라진다. 다수의 누산기들 및 제어 회로의 포함은 시스톨릭 어레이들의 하드웨어를 조정할 필요 없이 상이한 희소성 패턴들을 갖는 행렬들을 효율적으로 동적으로 처리하는 유연성을 제공한다. 대신, 입력 행렬들의 희소성 패턴에 기초하여 각 계산에 적절한 누산기를 선택하기 위해 제어 회로와 제어 입력들이 사용될 수 있고, 이는 상이한 희소성 패턴들을 보다 효율적으로 처리하는 동적 유연성을 제공한다.
도 1은 행렬 계산 유닛(112)을 포함하는 예시적인 처리 시스템(100)을 도시한다. 시스템(100)은 다수의 누산기들을 갖는 셀들의 시스톨릭 어레이를 갖는 행렬 계산 유닛(112)이 구현될 수 있는 시스템의 일례이다.
시스템(100)은 하나 이상의 컴퓨팅 코어(103)를 포함할 수 있는 프로세서(102)를 포함한다. 각 컴퓨팅 코어(103)는 다수의 누산기들을 갖는 셀들의 시스톨릭 어레이를 사용하여 행렬-행렬 곱셈을 수행하기 위해 사용될 수 있는 행렬 계산 유닛(112)을 포함할 수 있다. 시스템(100)은 특수 목적 하드웨어 칩의 형태일 수 있다.
일부 구현들에서, 컴퓨팅 코어(103), 또는 그의 다른 컴포넌트는 제어 정보와 함께 행렬들을 행렬 계산 유닛(112)에 전송할 수 있다. 제어 정보는 행렬 계산 유닛(112)에 의해 수행될 연산들을 정의할 수 있다. 제어 정보는 또한 행렬 계산 유닛(112)의 시스톨릭 어레이를 통한 데이터 흐름을 정의하거나 달리 제어할 수 있다. 예를 들어, 제어 정보는 각 입력 행렬의 개별 요소들 또는 부분 행렬들이 시스톨릭 어레이를 통해 시프트되어야 할지를 정의할 수 있다. 부분 행렬들의 경우, 제어 정보는 부분 행렬들의 차원들, 예를 들어, 2x2, 2x4 등, 적절한 경우 부분 행렬들의 희소성 패턴들, 및/또는 각 부분 행렬의 0이 아닌 요소를 정의할 수 있다. 더 큰 입력 행렬의 일부인 단일 요소를 갖는 부분 행렬, 예를 들어, 1x1 부분 행렬은 행렬 요소라고도 지칭될 수 있다. 각 부분 행렬에 대한 희소성 패턴 및 0이 아닌 요소를 정의하는 정보는, 아래에서 더 상세히 설명되는 바와 같이, 예를 들어, 부분 행렬들과 함께 시스톨릭 어레이를 통해 시프트될 수 있다.
각 행렬 계산 유닛(112)은 기계 학습 모델의 훈련 또는 사용 동안 행렬 곱셈 계산들을 수행하기 위해 사용될 수 있다. 예를 들어, 행렬 곱셈은 심층 신경망 모델들과 같은 심층 학습 모델들의 훈련 및 사용 동안 수행되는 흔한 계산이다. 행렬 계산 유닛(112)의 시스톨릭 어레이는 기계 학습 모델들을 훈련시키고 기계 학습 계산들을 수행할 때 희소 행렬들을 보다 효율적으로 처리하도록 적응되어, 조밀 행렬들에 대해 동일하거나 유사한 계산들을 수행하는 것보다 더 적은 계산 자원을 사용하여 훈련 및 계산들이 더 빨라진다. 심층 학습 모델의 많은 행렬 계산들에 걸쳐 집계되어, 이는 상당한 성능 향상을 가져온다.
도 2는 행렬 계산 유닛을 포함하는 예시적인 아키텍처를 도시한다. 행렬 계산 유닛은 2차원 시스톨릭 어레이(206)이다. 2차원 시스톨릭 어레이(206)는 정사각형 어레이일 수 있다. 어레이(206)는 다수의 셀들(204)을 포함한다. 일부 구현들에서, 시스톨릭 어레이(206)의 제1 차원(220)은 셀들의 열들에 대응하고 시스톨릭 어레이(206)의 제2 차원(222)은 셀들의 행들에 대응한다. 시스톨릭 어레이(206)는 열보다 더 많은 행, 행보다 더 많은 열, 또는 동일한 수의 열과 행을 가질 수 있다. 따라서, 시스톨릭 어레이(206)는 정사각형 이외의 형상들을 가질 수 있다. 도 1의 행렬 계산 유닛(112)은 시스톨릭 어레이(206)로 구현될 수 있다.
시스톨릭 어레이(206)는 행렬 곱셈 또는 다른 계산들, 예를 들어, 컨볼루션, 상관, 또는 데이터 정렬을 위해 사용될 수 있다. 예를 들어, 시스톨릭 어레이(206)는 신경망 계산들을 위해 사용될 수 있다.
시스톨릭 어레이(206)는 값 로더들(202) 및 값 로더들(208)을 포함한다. 값 로더들(202)은 부분 행렬들을 어레이(206)의 행들에 전송할 수 있고 값 로더들(208)은 부분 행렬들을 어레이의 열들에 전송할 수 있다. 그러나, 일부 다른 구현들에서, 값 로더들(202 및 208)은 부분 행렬들을 시스톨릭 어레이(206)의 열들의 반대측들에 전송할 수 있다. 다른 예에서, 값 로더들(202)은 부분 행렬들을 시스톨릭 어레이(206)의 행들을 가로질러 전송할 수 있는 반면, 값 로더들은 부분 행렬들을 시스톨릭 어레이(206)의 열들을 가로질러 부분 행렬을 전송하거나, 또는 그 반대이다. 신경망 예에서, 값 로더들(202)은 활성화 입력들을 어레이(206)의 행들(또는 열들)에 전송할 수 있고 값 로더들(208)은 가중치 입력들을 값 로더들(202)과 반대측(또는 직교측)으로부터 어레이(206)의 행들(또는 열들)에 전송할 수 있다. 또 다른 예에서, 값 로더들(202)은 활성화 입력들을 어레이(206)를 가로질러 대각선으로 전송할 수 있고 값 로더들(208)은 가중치 입력들을 어레이(206)를 가로질러 대각선으로, 예를 들어, 값 로더들(202)과 반대 방향으로 또는 값 로더들(202)의 방향과 직교하는 방향으로 전송할 수 있다.
값 로더들(202)은 통합 버퍼 또는 다른 적절한 소스로부터 부분 행렬들을 수신할 수 있다. 각 값 로더(202)는 대응하는 부분 행렬을 어레이(206)의 별개의 최좌측 셀에 전송할 수 있다. 최좌측 셀은 어레이(206)의 최좌측 열을 따른 셀일 수 있다. 예를 들어, 값 로더(202A)는 부분 행렬을 셀(214)에 전송할 수 있다. 값 로더(202A)는 또한 부분 행렬을 인접한 값 로더에 전송할 수 있고, 부분 행렬은 어레이(206)의 다른 최좌측 셀에서 사용될 수 있다. 이는 부분 행렬들이 어레이(206)의 다른 특정 셀에서의 사용을 위해 시프트되도록 한다.
값 로더들(208)은 또한 통합 버퍼 또는 다른 적절한 소스로부터 부분 행렬을 수신할 수 있다. 각 값 로더(208)는 대응하는 부분 행렬을 어레이(206)의 별개의 최상부 셀에 전송할 수 있다. 최상부 셀은 어레이(206)의 최상부 행을 따른 셀일 수 있다. 예를 들어, 값 로더(208A)는 부분 행렬을 셀(214)에 전송할 수 있다. 값 로더(208A)는 또한 부분 행렬을 인접한 값 로더에 전송할 수 있고, 부분 행렬은 어레이(206)의 다른 최상부 셀에서 사용될 수 있다. 이는 부분 행렬들이 어레이(206)의 다른 특정 셀에서의 사용을 위해 시프트되도록 한다.
일부 구현들에서, 호스트 인터페이스는 부분 행렬들(예를 들어, 활성화 입력들)을 어레이(206) 전체에 걸쳐 1차원을 따라, 예를 들어, 오른쪽으로 시프트시키는 반면, 부분 행렬들(예를 들어, 가중치 입력들)을 어레이(206) 전체에 걸쳐 직교 차원을 따라, 예를 들어, 아래로 시프트시킨다. 예를 들어, 1 클록 사이클 동안, 셀(214)의 부분 행렬(활성화 입력)은 셀(214)의 오른쪽에 있는 셀(215) 내의 레지스터로 시프트할 수 있다. 유사하게, 셀(214)의 부분 행렬(예를 들어, 가중치 입력)은 셀(215)의 아래에 있는 셀(218) 내의 레지스터로 시프트할 수 있다. 다른 예들에서, 가중치 입력들은 활성화 입력들과는 반대 방향으로(예를 들어, 오른쪽에서 왼쪽으로) 시프트될 수 있다.
값 로더들(202 및 208)은 또한 어레이(206)에 전송하는 각 부분 행렬과 함께 선택기 데이터를 전송할 수 있다. 희소 행렬 애플리케이션들에서 사용될 때, 선택기 데이터는 부분 행렬의 희소성 패턴을 정의하는 희소성 데이터를 포함할 수 있다. 그러한 애플리케이션들에서는, 부분 행렬의 요소들 중 하나만 0이 아닌 값을 가질 수 있다. 희소성 패턴은 부분 행렬에서 0이 아닌 값을 가질 수 있는 하나의 요소의 위치를 나타낼 수 있다. 이 데이터는 선택기 데이터와 함께 포함될 수 있는데 그 이유는 부분 행렬에서 0이 아닌 값을 가질 수 있는 요소는 그럼에도 불구하고 0의 값을 가질 수도 있기 때문이다.
출력 고정 기법을 사용하여, 2개의 행렬, 예를 들어 활성화 입력들을 나타내는 하나의 행렬과 가중치들을 나타내는 하나의 행렬의 곱을 결정하기 위해, 각 셀은 셀로 시프트된 행렬 요소들의 곱들의 합을 누산한다. 각 클록 사이클에서, 각 셀은 주어진 가중치 입력과 주어진 활성화 입력을 처리하여 2개의 입력의 곱을 결정할 수 있다. 셀은 셀의 각 곱을 누산기에 의해 유지된 누산 값에 가산할 수 있다. 예를 들어, 셀(215)은 2개의 행렬 요소, 예를 들어, 제1 활성화 입력 및 제1 가중치 입력의 제1 곱을 결정하고, 그 곱을 누산기에 저장할 수 있다. 셀(215)은 활성화 입력을 셀(216)로 시프트시키고 가중치 입력을 셀(218)로 시프트시킬 수 있다. 유사하게, 셀(215)은 셀(214)로부터 제2 활성화 입력 및 값 로더(208B)로부터 제2 가중치 입력을 수신할 수 있다. 셀(215)은 제2 활성화 입력과 제2 가중치 입력의 곱을 결정할 수 있다. 셀(215)은 이를 이전 누산 값에 가산하여 업데이트된 누산 값을 생성할 수 있다.
희소성, 타일 공유, 및 다른 애플리케이션들을 위해, 셀들은 셀들의 다수의 누산기들 각각에서 값들을 누산할 수 있다. 셀에 의해 수신된 부분 행렬들의 각 쌍에 대해, 셀은 2개의 부분 행렬의 곱을 결정하고 그 결과를 누산기들 중 하나에 저장할 수 있다. 각 셀의 제어기는, 아래에서 더 상세히 설명되는 바와 같이, 부분 행렬들과 함께 셀로 시프트된 선택기 데이터에 기초하여 적절한 누산기를 선택할 수 있다.
모든 행렬 요소들이 시스톨릭 어레이의 행들을 통과한 후, 각 셀은 그것의 누산 값을 행렬 곱셈의 부분 결과로서 밖으로 시프트시킬 수 있다. 이들 누산 값은 그 후 기계 학습 모델의 훈련 또는 사용 동안 추가 계산들을 위해 사용될 수 있다. 예시적인 개별 셀은 도 3을 참조하여 아래에서 더 설명된다.
셀들은 출력을 그들의 열들을 따라, 예를 들어, 어레이(206) 내의 열의 최하부를 향하여 전달, 예를 들어, 시프트시킬 수 있다. 일부 구현들에서, 각 열의 최하부에, 어레이(206)는 각 열로부터의 각 출력을 저장하고 누산하는 누산기 유닛들(210)을 포함할 수 있다. 누산기 유닛들(210)은 그것의 열의 각 출력을 누산하여 최종 누산 값을 생성할 수 있다. 최종 누산 값은 벡터 계산 유닛 또는 다른 적절한 컴포넌트에 전송될 수 있다.
시스톨릭 어레이(206)의 셀들(204)은 인접 셀들에 하드와이어링될 수 있다. 예를 들어, 셀(215)은 와이어들의 세트를 사용하여 셀(214) 및 셀(216)에 하드와이어링될 수 있다. 일부 구현들에서, 출력 데이터를 셀로부터 누산기 유닛(210)으로 밖으로 시프트시킬 때, 셀은 단일 클록 사이클에서 수치 값을 출력할 수 있다. 그렇게 하기 위해, 셀은 출력 값을 나타내기 위해 사용되는 컴퓨터 숫자 형식의 각 비트에 대한 출력 와이어를 가질 수 있다. 예를 들어, 출력 값이 32비트 부동 소수점 형식, 예를 들어, float32 또는 FP32를 사용하여 표현된다면, 셀은 단일 클록 사이클에서 전체 출력 값을 밖으로 시프트시키기 위해 32개의 출력 와이어를 가질 수 있다.
일부 경우들에서, 셀의 계산 유닛들에 대한 및/또는 누산기들에 대한 입력은 계산 유닛 및/또는 누산기의 내부 정밀도보다 낮은 정밀도를 갖는다. 예를 들어, 입력 행렬의 부동 소수점 값들은 16비트, 예를 들어, bfloat16 또는 BF16 형식일 수 있다. 그러나, 곱셈 회로, 합산 회로, 및/또는 누산기는 더 높은 정밀도 숫자들, 예를 들어, FP32 숫자들에 작용할 수 있다. 이 예에서, 업스트림 셀의 누산기의 출력은 FP32 숫자일 수 있다. 따라서, 1 클록 사이클에서 FP32 숫자를 출력하기 위해, 업스트림 셀은 다운스트림 셀에 대한 32개의 출력 와이어를 가질 수 있다. 셀들(204)은 다른 정밀도 레벨들을 갖는 다른 숫자 형식들과 함께 작동할 수 있다.
도 3은 시스톨릭 어레이 내부의 셀의 예시적인 아키텍처(300)를 도시한다. 예를 들어, 도 2의 시스톨릭 어레이(206)의 셀들(204)은 아키텍처(300)를 사용하여 구현될 수 있다. 셀들은 2개의 입력 행렬의 행렬-행렬 곱셈을 수행하기 위해 사용될 수 있다. 셀들은 행렬-행렬 곱셈을 수행하는 관점에서 설명될 것이지만, 셀들은 다른 계산들, 예를 들어, 컨볼루션, 상관, 또는 데이터 정렬을 수행하기 위해 사용될 수 있다.
셀은, 입력 레지스터들(302) 및 입력 레지스터들(304)을 포함한, 입력 레지스터들을 포함할 수 있다. 입력 레지스터들(302)은 A 레지스터(303) 및 A-선택기 레지스터(304)를 포함한다. A 레지스터(302)는 시스톨릭 어레이 내의 셀의 위치에 따라 오른쪽 인접 셀(예를 들어, 주어진 셀의 오른쪽에 위치한 인접 셀)로부터 또는 다른 컴포넌트(예를 들어, 도 2의 시스톨릭 어레이(206)에서 사용된다면 값 로더(208))로부터 입력 행렬의 부분 행렬들을 수신한다. A-선택기 레지스터(304)는 시스톨릭 어레이 내의 셀의 위치에 따라 오른쪽 인접 셀 또는 값 로더(208)로부터 각 수신된 부분 행렬에 대한 선택기 데이터를 수신하는 선택기 레지스터이다. 신경망 구현에서, A 레지스터(303)는 가중치 입력 행렬의 부분 행렬들을 수신할 수 있다. 부분 행렬들 및 선택기 데이터는 하나 이상의 와이어를 포함할 수 있는 버스(330)를 통해 수신된다.
입력 레지스터들(306)은 B 레지스터(307) 및 B-선택기 레지스터(308)를 포함한다. B 레지스터(307)는 시스톨릭 어레이 내의 셀의 위치에 따라 왼쪽 인접 셀(예를 들어, 주어진 셀의 왼쪽에 위치한 인접 셀)로부터 또는 다른 컴포넌트(예를 들어, 도 2의 시스톨릭 어레이(206)에서 사용된다면 값 로더(202))로부터 입력 행렬의 부분 행렬들을 수신한다. B-선택기 레지스터(308)는 시스톨릭 어레이 내의 셀의 위치에 따라 왼쪽 인접 셀 또는 값 로더(202)로부터 각 수신된 부분 행렬에 대한 선택기 데이터를 수신하는 선택기 레지스터이다. 신경망 구현에서, B 레지스터(307)는 활성화 입력 행렬의 부분 행렬들을 수신할 수 있다. 부분 행렬들 및 선택기 데이터는 하나 이상의 와이어를 포함할 수 있는 버스(332)를 통해 수신된다. 신경망들과 같은 기계 학습 모델들을 훈련 및 사용 중에, 활성화 입력들은, 행렬들의 형태일 수 있는, 대응하는 가중치들과 곱해질 수 있다.
셀(300)은 곱셈 회로(312), 합산 회로(314), 제어기(310), N개의 누산기(316-1 내지 316-N)(여기서 N은 2 이상의 정수임), 및 멀티플렉서(330)를 포함하며, 이들 각각은 하드웨어 회로로 구현될 수 있다. 멀티플렉서(330)는 옵션이며 셀(300)을 포함하는 시스톨릭 어레이에 대한 애플리케이션에 따라 제외될 수 있다.
일반적으로, 곱셈 회로(312)는 레지스터들(303 및 306)에 저장된 부분 행렬들의 곱들을 결정할 수 있다. 합산 회로(314)는 그 곱과 누산기들(316) 중 하나의 누산기의 현재 누산 값의 합을 결정하고 그 합을 저장을 위해 그 하나의 누산기(316)에 전송할 수 있다.
제어기(310)는 A-선택기 레지스터(304)의 선택기 데이터 및/또는 B-선택기 레지스터(308)의 선택기 데이터에 기초하여 곱이 가산되어야 하는 누산기(316)를 선택할 수 있다. 선택기 데이터에 기초하여 누산기를 선택하기 위해 선택기 데이터가 어떻게 사용되는지에 대한 예들이 아래에 제공된다. 어느 경우에도, 제어기(310)는 합산 회로(314)로부터의 기입을 가능하게 하기 위해 선택된 누산기(316)의 기입 인에이블들을 설정할 수 있다. 예를 들어, 제어기(310)는 합산 연산에 대응하는 클록 사이클 동안 합산 회로(314)로부터의 기입을 가능하게 하기 위해 선택된 누산기(316)의 기입 인에이블들을 설정한다.
일부 구현들에서, 셀(300)은 단일 선택기 레지스터 또는 2개보다 많은 선택기 레지스터를 포함할 수 있다. 예를 들어, 하나 이상의 선택기 레지스터는 제어기(310)에 의해 사용될 선택기 데이터를 수신할 수 있다.
유사하게, 합산 회로가 선택된 누산기의 현재 누산 값에 곱을 가산하는 것을 가능하게 하기 위해, 제어기(310)는 멀티플렉서(330)가 합산 회로(314)에 대한 입력으로서 선택된 누산기(316)의 현재 값을 전달하도록 멀티플렉서의 선택기 값들을 설정할 수 있다.
입력 행렬들의 모든 요소들에 대해 곱셈이 완료된 후, 각 누산기(316)는 그 누산 값을 셀(300) 밖으로 시프트시킬 수 있다. 일부 구현들에서, 도 3에 도시된 바와 같이, 각 누산기(316)는 셀(300)로부터 그 누산 값을 시프트시키기 위한 각각의 버스(334-1 내지 334-N)를 갖는다. 일부 구현들에서, 멀티플렉서(330) 또는 다른 멀티플렉서는 셀(300)로부터의 각 출력을 하나의 버스를 통해, 예를 들어, 한 번에 하나씩 시프트시키기 위해 사용될 수 있다.
셀은 다른 셀들로부터 안으로 그리고 다른 셀들로 밖으로 행렬 요소들을 시프트시키기 위한 버스들을 또한 포함한다. 예를 들어, 셀은 왼쪽 인접 셀로부터 행렬 요소들을 수신하기 위한 버스(332) 및 오른쪽 인접 셀로 행렬 요소들을 시프트시키기 위한 버스(338)를 포함한다. 유사하게, 셀은 상부 인접 셀로부터 행렬 요소들을 수신하기 위한 버스(330) 및 하부 인접 셀로 행렬 요소들을 시프트시키기 위한 버스(340)를 포함한다. 셀은 상부 인접 셀로부터 누산 값들을 수신하기 위한 버스들(334-1 내지 334-N) 및 하부 인접 셀로 누산 값들을 시프트시키기 위한 버스들(342-1 내지 342-N)을 또한 포함한다. 각 버스는 와이어들의 세트로 구현될 수 있다.
셀(300)을 포함하는 시스톨릭 어레이들은 다양한 행렬 계산 애플리케이션들에서 사용될 수 있다. 이들 애플리케이션에서는, 더 조밀한 행렬들을 처리하기 위해 동일한 입력 행렬들의 변형들에 대한 다수의 패스들이 사용될 수 있다. 예를 들어, 4개 중 2개 희소성 패턴을 갖는 행렬이 4개 중 1개 희소성 패턴들을 갖는 2개의 행렬의 합으로 분할될 수 있고 해당 서브파트들이 시스톨릭 어레이의 셀들에 의해 별도로 처리될 수 있다. 다른 예에서, 4개 중 2개 희소성 패턴을 갖는 행렬이 3개 중 1개 희소성 패턴들을 갖는 2개의 행렬로 분할될 수 있고 그 결과들을 적절히 시프트 및 가산하여 조합된 결과를 생성할 수 있다. 다른 예에서, 패턴에 맞도록 희소성을 증가시키기 위해 하나 또는 양쪽 행렬의 크기가 증가될 수 있고 다른 행렬은 확장되지 않은 입력들의 경우와 동일한 결과를 생성하도록 조정될 수 있다.
하나의 예시적인 애플리케이션은 기본 희소성(basic sparsity)이다. 이 애플리케이션에서는, 행렬이 각 블록에 많아야 1개의 0이 아닌 요소, 즉, k개 중 1개 희소성 패턴을 갖는 kx1 또는 1xk 블록들로 분할된다. 이 예에서, 하나의 행렬만 희소 행렬이고 다른 하나는 조밀 행렬이면, A-선택기 레지스터(304) 또는 B-선택기 레지스터(308) 중 하나만이 사용되어야 한다. 이는 시스톨릭 어레이에 전송될 필요가 있는 데이터의 양을 저감시키고 시스톨릭 어레이에 의해 수행되는 제어 동작의 수를 저감시켜, 더 빠르고 더 효율적인 계산들을 야기할 수 있다. 하나의 예는 k개 중 1개 희소성을 갖는 kx1 블록들의 행렬 A와 조밀 행렬 B(사소한 1개 중 1개 희소성을 갖는 1x1 블록들)를 곱하는 것이다. 이 예에서, 출력은, 어레이 셀당 하나의 블록과 누산기(316)당 블록의 하나의 요소로, kx1 블록들로부터도 구축될 수 있다. 즉, 블록들이 3x1 블록들이면, 3개의 요소 각각에 대해 하나씩, 3개의 누산기(316)가 사용될 수 있다. A에서 0이 아닌 요소의 위치는 A-선택기 레지스터(304)로 시프트된 선택기 데이터를 사용하여 인코딩될 수 있고 이 값은 곱셈 결과를 가산할 누산기에 직접 인코딩될 수 있다.
이 예에서, 새로운 1xk 블록이 A 레지스터(307)로 시프트되고 새로운 1x1 블록이 B 레지스터(303)로 시프트될 때마다, 제어기(310)는 선택기 데이터를 사용하여 0이 아닌 값을 식별하고 그것의 대응하는 누산기(316)를 선택할 수 있다. 그 후 제어기(310)는 합산 회로(314)가 선택된 누산기(316)의 현재 누산 값에 곱을 가산하고 그 합이 선택된 누산기(316)에 저장되도록 선택된 누산기(316)의 기입 인에이블들 및 멀티플렉서(303)의 선택기 값들을 설정할 수 있다. 1xk 블록들은 값 로더들(213)로부터 행들을 따라 시프트될 수 있고 1x1 블록들은 값 로더들(202)로부터 행들을 따라 시프트될 수 있다.
또 다른 예시적인 애플리케이션은 단일 A 또는 B 입력 요소가 많아야 1개의 0이 아닌 요소를 갖는 작은 부분 행렬을 나타내는 블록들 내의 희소성이다. 그러면 A-선택기 레지스터(304) 및 B-선택기 레지스터(308)의 선택기 데이터는 어느 요소가 0이 아닌지를 나타낼 것이다. 예를 들어, 각 요소는 2x2 부분 행렬일 수 있다. 2개의 부분 행렬의 곱은 많아야 1개의 스칼라 곱으로 계산될 수 있고 동일한 형태의 다른 부분 행렬이거나 모두 0이다. 그 후 각 셀(300)은 그것의 누산기들(316) 각각에 하나의 요소를 갖는 출력 부분 행렬을 나타낸다. 특히, A가 위치(ar, ac)에서 값 x를 갖는 부분 행렬을 나타내고 B가 위치(br, bc)에서 값 y를 갖는 부분 행렬을 나타낸다면, 결과는 ac ≠br이면 0이고 그렇지 않으면 값 x*y를 갖는 부분 행렬이다. 이는 제어기(310)에 의해 이 결과적인 부분 행렬을 셀의 현재 값들에 가산하기 위해 멀티플렉서의 선택기 값들 및 누산기의 기입 인에이블들을 설정하는 데 사용될 수 있다.
상이한 희소성 패턴들을 적응시킴으로써, 시스톨릭 어레이들은 행렬 계산들을 보다 효율적으로 수행할 수 있다. 예를 들어, 이는 시스톨릭 어레이에 입력되는 행렬들을 조정할 필요 없이 0이 아닌 값들에 대해서만 계산들이 수행되도록(또는 적어도 0 값들을 수반하는 계산의 수를 저감시키도록) 보장할 수 있다.
또 다른 예시적인 애플리케이션은 동일한 더 큰 어레이 내에서 다수의 더 작은 곱셈들이 실행되는 타일 공유이다. 예를 들어, A 및 B 행렬들 내의 각 행렬 요소에는 특정 부분 곱셈이 할당될 수 있고, 각 부분 곱셈은 상이한 누산기(316)로 들어간다. A-선택기 레지스터(304) 및 B-선택기 레지스터(308)의 선택기 데이터는 A 및 B의 각 요소에 그 요소가 속하는 부분 곱셈으로 태깅하기 위해 사용된다. 레지스터들(303 및 307)에 각각 저장된 A 및 B 요소들이 동일한 부분 곱셈에 속하지 않는다면, 누산기들(316)의 기입 인에이블들은 제어기(310)에 의해 디스에이블될 수 있다. 동일한 셀 내에 다수의 누산기들이 없다면, 각 부분 곱셈을 수행하기 위해 다수의 셀들을 사용하지 않고는 그러한 타일 공유가 가능하지 않을 것이다. 따라서 동일한 셀에서 다수의 누산기들을 사용하고 누산기들을 인에이블/디스에이블하기 위해 제어 회로를 사용하면 동일한 동작들을 수행하는 데 필요한 계산 리소스들의 양(예를 들어, 셀의 수)이 저감되어 단일 누산기 셀들에 비해 상당한 속도 및 다른 성능 이점들을 야기할 수 있다.
예를 들어, 제어기(310)는, 레지스터들(303 및 307)로 시프트된 요소들의 각 쌍에 대해, 그 2개의 요소가 속하는 부분 곱셈을 결정할 수 있다. 요소들이 동일한 부분 곱셈에 속한다면, 제어기(310)는 부분 곱셈에 대응하는 누산기(316)가 인에이블되고 다른 누산기들의 기입 인에이블들이 디스에이블되도록 누산기들(316)의 기입 인에이블들을 설정할 수 있다. 제어기(310)는 또한 합산 회로(314)가 대응하는 누산기(316)의 현재 누산 값에 곱을 가산하도록 멀티플렉서에 대한 선택기 값들을 설정할 수 있다. 2개의 요소가 상이한 부분 곱셈들에 속한다면, 제어기(310)는 모든 누산기들(316)에 대한 기입 인에이블들을 디스에이블할 수 있다. 추가 로직으로, 동일한 행렬 요소들이 부분 곱셈들 간에 공유되는 것이 가능하다.
제어기(310)는, 예를 들어, 코어 또는 다른 컴포넌트로부터 수신된 제어 신호들에 기초하여 다양한 애플리케이션들을 처리하도록 구성 가능할 수 있다. 제어기(310)는 또한 단일 누산기를 사용하여, 예를 들어, A-선택기 레지스터(304) 또는 B-선택기 레지스터(308)의 선택기 데이터를 사용하지 않고 곱과 단일 누산기의 현재 누산기 값의 합을 다시 단일 누산기에 전송함으로써, 조밀 행렬들에 대한 행렬 계산들을 수행할 수 있다. 다수의 누산기들(316)과 함께 제어기(310)의 사용은 하드웨어 변경을 요구하지 않고 다양한 애플리케이션들에 대해 가장 효율적인 방식으로 각 애플리케이션을 처리하는 유연성을 제공한다.
도 5는 행렬 곱셈을 수행하기 위한 예시적인 프로세스(500)의 흐름도이다. 프로세스(500)는 곱셈 유닛의 시스톨릭 어레이의 하나 이상의 셀 각각에 의해 수행될 수 있다. 프로세스(500)는 각 셀에 의해 여러 번 수행될 수 있고 각 셀에 의해 계산된 결과(들)는 최종 행렬 곱셈 결과를 결정하기 위해 사용될 수 있다.
셀의 제1 입력 레지스터가 제1 입력 부분 행렬을 수신한다(502). 예를 들어, 셀(300)의 A 레지스터(303)가 제1 입력 부분 행렬을 수신할 수 있다. 제1 입력 부분 행렬은 가중치 입력을 나타낼 수 있다. 제1 입력 부분 행렬과 함께, 제1 선택기 레지스터, 예를 들어, A-선택기 레지스터(304)가 제1 선택기 데이터를 수신할 수 있다. 제1 선택기 데이터는, 예를 들어, 제1 입력 부분 행렬의 희소성과 제1 입력 부분 행렬에서 0이 아닌 요소의 위치를 정의할 수 있다. 다른 예에서, 제1 선택기 데이터는 제1 입력 부분 행렬이 속하는 제1 부분 곱셈을 나타낼 수 있다.
셀의 제2 입력 레지스터가 제2 입력 부분 행렬을 수신한다(504). 예를 들어, 셀(300)의 B 레지스터(307)가 제2 입력 부분 행렬을 수신할 수 있다. 제2 입력 부분 행렬은 활성화 입력을 나타낼 수 있다. 제2 입력 부분 행렬과 함께, 제2 선택기 레지스터, 예를 들어, B-선택기 레지스터(308)가 제2 선택기 데이터를 수신할 수 있다. 제2 선택기 데이터는, 예를 들어, 제2 입력 부분 행렬의 희소성과 제2 입력 부분 행렬에서 0이 아닌 요소의 위치를 정의할 수 있다. 다른 예에서, 제2 선택기 데이터는 제2 입력 부분 행렬이 속하는 제2 부분 곱셈을 나타낼 수 있다.
셀의 제어기가 셀의 다수의 누산기들 중에서 하나 이상의 누산기를 선택한다(506). 제어기는 제1 선택기 값들 및/또는 제2 선택기 값들에 기초하여 하나 이상의 누산기를 선택할 수 있다. 예를 들어, 선택기 데이터가 입력 부분 행렬들 중 하나에 대해 0이 아닌 요소의 희소성과 위치를 정의한다면, 제어기는 0이 아닌 요소에 대응하는 누산기(들)를 선택할 수 있다. 제어기는 선택된 누산기에 대한 기입 입력들을 인에이블할 수 있다. 제어기는 다수의 가산기들, 예를 들어, 합산 회로들 간에 동일한 곱셈기, 예를 들어, 곱셈 회로를 공유하기 위해 다수의 누산기들을 사용할 수 있다.
제1 선택기 데이터가 제1 입력 부분 행렬이 속하는 제1 부분 곱셈을 나타내고 제2 선택기 데이터가 제2 입력 부분 행렬이 속하는 제2 부분 곱셈을 나타낸다면, 제어기는 제1 부분 곱셈이 제2 부분 곱셈과 일치하는지를 결정할 수 있다. 그렇다면, 제어기는 일치하는 부분 곱셈에 대응하는 누산기를 선택하고 선택된 누산기에 대한 기입 입력들을 인에이블할 수 있다. 그렇지 않다면, 셀은 곱셈을 수행하지 않을 수 있고 제어기는 모든 누산기들에 대한 기입 입력들을 디스에이블할 수 있다.
셀의 곱셈 회로가 제1 입력 부분 행렬과 제2 입력 부분 행렬의 곱을 결정한다(508). 예를 들어, 곱셈 회로는 제1 입력 부분 행렬의 대응하는 요소들을 제2 입력 부분 행렬의 대응하는 요소들과 한번에 하나씩 곱함으로써 행렬-행렬 곱셈을 수행할 수 있다.
셀의 합산 회로가 그 곱과 선택된 누산기의 현재 누산 값의 합을 결정한다(510). 예를 들어, 제어기는 선택된 누산기의 출력이 합산 회로의 입력에 전달되도록 누산기들의 출력들과 합산 회로에 대한 입력 사이에 배열된 멀티플렉서에 대한 선택기 값들을 설정할 수 있다. 합은 저장을 위해 선택된 누산기에 전송될 수 있다.
본 명세서에서 설명된 주제 및 기능 동작들의 실시예들은 디지털 전자 회로로, 유형적으로 구현된(tangibly-embodied) 컴퓨터 소프트웨어 또는 펌웨어로, 본 명세서에 개시된 구조들 및 그들의 구조적 등가물들을 포함하는 컴퓨터 하드웨어로, 또는 그들 중 하나 이상의 것의 조합으로 구현될 수 있다. 본 명세서에서 설명된 주제의 실시예들은 하나 이상의 컴퓨터 프로그램으로서, 즉, 데이터 처리 장치에 의한 실행을 위해, 또는 그것의 동작을 제어하기 위해 유형의 비일시적 프로그램 캐리어 상에 인코딩된 컴퓨터 프로그램 명령어들의 하나 이상의 모듈로서 구현될 수 있다. 대안적으로 또는 추가로, 프로그램 명령어들은 데이터 처리 장치에 의한 실행을 위해 적합한 수신기 장치로의 송신을 위한 정보를 인코딩하도록 생성되는 인공적으로 생성된 전파 신호, 예를 들어, 머신 생성된 전기, 광학, 또는 전자기 신호일 수 있다. 컴퓨터 저장 매체는 머신 판독가능 저장 디바이스, 머신 판독가능 저장 기판, 랜덤 또는 직렬 액세스 메모리 디바이스, 또는 이들 중 하나 이상의 것의 조합일 수 있다.
본 명세서에서 설명된 프로세스들 및 로직 흐름들은 입력 데이터에 작용하여 출력을 생성함으로써 기능들을 수행하기 위해 하나 이상의 컴퓨터 프로그램을 실행하는 하나 이상의 프로그램 가능한 컴퓨터들에 의해 수행될 수 있다. 프로세스들 및 로직 흐름들은 특수 목적 로직 회로, 예를 들어, FPGA(field programmable gate array), ASIC(application specific integrated circuit), 또는 GPGPU(General purpose graphics processing unit)에 의해 수행될 수도 있고, 장치가 그러한 특수 목적 로직 회로로서 구현될 수도 있다.
컴퓨터 프로그램의 실행에 적합한 컴퓨터들은, 예로서, 범용 또는 특수 목적 마이크로프로세서들 또는 양쪽 모두, 또는 임의의 다른 종류의 중앙 처리 유닛을 포함하고, 그에 기초할 수 있다. 일반적으로, 중앙 처리 유닛은 판독 전용 메모리 또는 랜덤 액세스 메모리 또는 양쪽 모두로부터 명령어들 및 데이터를 수신할 것이다. 컴퓨터의 필수 요소들은 명령어들을 수행하기 위한 중앙 처리 유닛 및 명령어들 및 데이터를 저장하기 위한 하나 이상의 메모리 디바이스이다. 일반적으로, 컴퓨터는 데이터를 저장하기 위한 하나 이상의 대용량 저장 디바이스, 예를 들어, 자기, 광자기 디스크, 또는 광 디스크를 또한 포함하거나, 그로부터 데이터를 수신하거나 그것에 데이터를 전송하거나, 또는 양쪽 모두를 수행하기 위해 동작 가능하게 결합될 것이다. 그러나, 컴퓨터는 그러한 디바이스들을 가질 필요는 없다. 더욱이, 컴퓨터는 다른 디바이스로, 예를 들어, 몇 가지만 말하자면, 모바일 전화, 개인 휴대 정보 단말기(PDA), 모바일 오디오 또는 비디오 플레이어, 게임 콘솔, GPS(Global Positioning System) 수신기, 또는 휴대용 저장 디바이스, 예를 들어, USB(universal serial bus) 플래시 드라이브에 임베드될 수 있다.
컴퓨터 프로그램 명령어들 및 데이터를 저장하기에 적합한 컴퓨터 판독가능 매체들은, 예로서, 반도체 메모리 디바이스들, 예를 들어, EPROM, EEPROM, 및 플래시 메모리 디바이스들; 자기 디스크들, 예를 들어, 내부 하드 디스크 또는 이동식 디스크들; 광자기 디스크들; 및 CD ROM 및 DVD-ROM 디스크들을 포함하여, 모든 형태의 비휘발성 메모리, 매체 및 메모리 디바이스들을 포함한다. 프로세서 및 메모리는 특수 목적 로직 회로에 의해 보완되거나 그에 통합될 수 있다.
본 명세서는 많은 특정 구현 세부 사항들을 포함하지만, 이들은 임의의 발명의 또는 청구될 수 있는 것의 범위에 대한 제한들로서 해석되어서는 안 되고, 그보다는 특정 발명들의 특정 실시예들에 특정할 수 있는 특징들의 설명들로서 해석되어야 한다. 별개의 실시예들의 컨텍스트에서 본 명세서에서 설명되는 특정 특징들이 단일 실시예에서 조합하여 구현될 수도 있다. 반대로, 단일 실시예의 컨텍스트에서 설명되는 다양한 특징들이 다수의 실시예들에서 개별적으로 또는 임의의 적합한 부분 조합(subcombination)으로 구현될 수도 있다. 더욱이, 특징들이 특정 조합들로 작용하는 것으로 위에 설명될 수 있고 심지어 처음에는 그와 같이 청구될 수도 있지만, 청구된 조합으로부터의 하나 이상의 특징이 일부 경우들에서 조합으로부터 삭제될 수 있고, 청구된 조합은 부분 조합 또는 부분 조합의 변형에 관한 것일 수 있다.
유사하게, 동작들이 특정 순서로 도면들에서 묘사되지만, 이는 바람직한 결과들을 달성하기 위해, 그러한 동작들이 도시된 특정 순서로 또는 순차적인 순서로 수행될 것을, 또는 모든 예시된 동작들이 수행될 것을 요구하는 것으로 이해되어서는 안 된다. 특정 상황들에서는, 멀티태스킹 및 병렬 처리가 유리할 수 있다. 더욱이, 위에 설명된 실시예들에서의 다양한 시스템 모듈들 및 컴포넌트들의 분리는 모든 실시예들에서 그러한 분리를 요구하는 것으로 이해되어서는 안 되고, 설명된 프로그램 컴포넌트들 및 시스템들은 일반적으로 단일 소프트웨어 제품에 함께 통합되거나 다수의 소프트웨어 제품들로 패키징될 수 있다는 것을 이해해야 한다.
본 주제의 특정 실시예들이 설명되었다. 다른 실시예들이 다음의 청구항들의 범위 내에 있다. 예를 들어, 청구항들에 열거된 액션들은 상이한 순서로 수행될 수 있고 그럼에도 바람직한 결과들을 달성할 수 있다. 하나의 예로서, 첨부 도면들에서 묘사된 프로세스들은, 바람직한 결과들을 달성하기 위해, 반드시 도시된 특정 순서, 또는 순차적인 순서를 요구하는 것은 아니다. 특정 구현들에서는, 멀티태스킹 및 병렬 처리가 유리할 수 있다.

Claims (14)

  1. 데이터 처리 셀로서,
    입력 행렬들의 부분 행렬들의 곱을 결정하도록 구성된 곱셈 회로;
    상기 곱셈 회로에 의해 출력된 곱과 입력 누산 값의 합을 결정하도록 구성된 합산 회로;
    상기 합산 회로의 출력에 접속된 복수의 누산기; 및
    상기 복수의 누산기 중에서, 상기 합산 회로에 의해 출력된 합을 수신할 주어진 누산기를 선택하도록 구성된 제어기 회로를 포함하는, 데이터 처리 셀.
  2. 제1항에 있어서,
    상기 제어기 회로는 상기 데이터 처리 셀에 의해 수신된 선택기 데이터에 기초하여 상기 곱셈 회로에 의해 결정된 다수의 곱들 각각에 대해 상기 주어진 누산기를 선택하도록 구성되는, 데이터 처리 셀.
  3. 제1항 또는 제2항에 있어서,
    제1 부분 행렬을 수신하도록 구성된 제1 입력 레지스터 및 제2 부분 행렬을 수신하도록 구성된 제2 입력 레지스터를 추가로 포함하고, 상기 곱셈 회로에 의해 결정된 곱은 상기 제1 부분 행렬과 상기 제2 부분 행렬의 곱을 포함하는, 데이터 처리 셀.
  4. 제3항에 있어서,
    선택기 데이터를 수신하도록 구성된 하나 이상의 선택기 레지스터를 추가로 포함하고, 상기 제어기 회로는 상기 선택기 데이터에 기초하여 상기 곱셈 회로에 의해 결정된 다수의 곱들 각각에 대해 상기 주어진 누산기를 선택하도록 구성되는, 데이터 처리 셀.
  5. 제4항에 있어서,
    상기 선택기 데이터는 상기 제1 부분 행렬 내에서 0이 아닌 요소의 위치를 나타내는 상기 제1 부분 행렬의 희소성 패턴을 정의하는 데이터를 포함하고/하거나;
    상기 선택기 데이터는 상기 제2 부분 행렬 내에서 0이 아닌 요소의 위치를 나타내는 상기 제2 부분 행렬의 희소성 패턴을 정의하는 데이터를 포함하는, 데이터 처리 셀.
  6. 제4항에 있어서,
    상기 선택기 데이터는 상기 제1 부분 행렬이 속하는 제1 부분 곱셈을 나타내고;
    상기 선택기 데이터는 상기 제2 부분 행렬이 속하는 제2 부분 곱셈을 나타내고;
    상기 제1 부분 곱셈이 상기 제2 부분 곱셈과 일치할 때, 상기 제어기는 상기 제1 부분 곱셈 및 상기 제2 부분 곱셈에 대응하는 상기 주어진 누산기를 선택하도록 구성되고;
    상기 제1 부분 곱셈이 상기 제2 부분 곱셈과 일치하지 않을 때, 상기 제어기는 상기 복수의 누산기 모두에 대한 기입 입력을 디스에이블하도록 구성되는, 데이터 처리 셀.
  7. 제1항 내지 제6항 중 어느 한 항에 있어서,
    상기 복수의 누산기의 각 누산기는 입력 행렬들의 주어진 세트에 대해 상기 합산 회로에 의해 출력된 값들을 누산하는, 데이터 처리 셀.
  8. 제1항의 복수의 상기 데이터 처리 셀을 포함하는, 행렬 계산 유닛.
  9. 행렬들을 곱하기 위한 방법으로서,
    셀의 제1 입력 레지스터에 의해, 제1 입력 부분 행렬을 수신하는 단계;
    상기 셀의 제2 입력 레지스터에 의해, 제2 입력 부분 행렬을 수신하는 단계;
    상기 셀의 제어기에 의해, 상기 셀의 복수의 누산기 중에서, (i) 상기 제1 입력 부분 행렬과 상기 제2 입력 부분 행렬의 곱과 (ii) 주어진 누산기의 현재 누산 값의 합을 수신할 상기 주어진 누산기를 선택하는 단계;
    상기 셀의 곱셈 회로에 의해, 상기 제1 입력 행렬과 상기 제2 입력 행렬의 곱을 생성하는 단계;
    상기 셀의 합산 회로에 의해, 상기 제1 입력 행렬과 상기 제2 입력 행렬의 곱을 상기 현재 누산 값에 가산함으로써 업데이트된 누산 값을 생성하는 단계; 및
    상기 업데이트된 누산 값을 상기 주어진 누산기에 저장하는 단계를 포함하는, 방법.
  10. 제9항에 있어서,
    상기 곱셈 회로에 의해 결정된 곱은 상기 제1 부분 행렬과 상기 제2 부분 행렬의 곱을 포함하는, 방법.
  11. 제9항 또는 제10항에 있어서,
    상기 셀의 하나 이상의 선택기 레지스터에 의해, 선택기 데이터를 수신하는 단계를 추가로 포함하고, 상기 주어진 누산기를 선택하는 단계는 상기 선택기 데이터에 기초하여 상기 주어진 누산기를 선택하는 단계를 포함하는, 방법.
  12. 제11항에 있어서,
    상기 선택기 데이터는 상기 제1 부분 행렬 내에서 0이 아닌 요소의 위치를 나타내는 상기 제1 입력 부분 행렬의 희소성 패턴을 정의하는 데이터를 포함하고/하거나;
    상기 선택기 데이터는 상기 제2 부분 행렬 내에서 0이 아닌 요소의 위치를 나타내는 상기 제2 입력 부분 행렬의 희소성 패턴을 정의하는 데이터를 포함하는, 방법.
  13. 제11항에 있어서,
    상기 선택기 데이터는 상기 제1 입력 부분 행렬이 속하는 제1 부분 곱셈을 나타내고;
    상기 선택기 데이터는 상기 제2 입력 부분 행렬이 속하는 제2 부분 곱셈을 나타내고;
    상기 제1 부분 곱셈이 상기 제2 부분 곱셈과 일치할 때, 상기 제어기는 상기 제1 부분 곱셈 및 상기 제2 부분 곱셈에 대응하는 상기 주어진 누산기를 선택하고;
    상기 제1 부분 곱셈이 상기 제2 부분 곱셈과 일치하지 않을 때, 상기 제어기는 상기 복수의 누산기 모두에 대한 기입 입력을 디스에이블하도록 구성되는, 방법.
  14. 제9항에 있어서,
    상기 복수의 누산기의 각 누산기는 입력 행렬들의 주어진 세트에 대해 상기 합산 회로에 의해 출력된 값들을 누산하는, 방법.
KR1020227039598A 2020-11-30 2021-11-30 다수의 누산기들을 구비한 시스톨릭 어레이 셀들 KR20220161485A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US202063119556P 2020-11-30 2020-11-30
US63/119,556 2020-11-30
PCT/US2021/061198 WO2022115783A1 (en) 2020-11-30 2021-11-30 Systolic array cells with multiple accumulators

Publications (1)

Publication Number Publication Date
KR20220161485A true KR20220161485A (ko) 2022-12-06

Family

ID=79093069

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020227039598A KR20220161485A (ko) 2020-11-30 2021-11-30 다수의 누산기들을 구비한 시스톨릭 어레이 셀들

Country Status (6)

Country Link
US (1) US20220171605A1 (ko)
EP (1) EP4136552A1 (ko)
JP (1) JP2023542261A (ko)
KR (1) KR20220161485A (ko)
CN (1) CN115552396A (ko)
WO (1) WO2022115783A1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11635958B1 (en) * 2022-01-03 2023-04-25 Globalfoundries U.S. Inc. Multi-port register file for partial-sum accumulation

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11328037B2 (en) * 2017-07-07 2022-05-10 Intel Corporation Memory-size- and bandwidth-efficient method for feeding systolic array matrix multipliers

Also Published As

Publication number Publication date
EP4136552A1 (en) 2023-02-22
WO2022115783A1 (en) 2022-06-02
JP2023542261A (ja) 2023-10-06
US20220171605A1 (en) 2022-06-02
CN115552396A (zh) 2022-12-30

Similar Documents

Publication Publication Date Title
KR102511911B1 (ko) Gemm 데이터플로우 가속기 반도체 회로
EP2017743B1 (en) High speed and efficient matrix multiplication hardware module
CN109324827B (zh) 用于处理用于访问数据的指令的装置、方法和系统
JP2022084674A (ja) 代替ループ限界値
JP2018055677A (ja) 外積累算演算のためのプロセッサおよび方法
TW202123093A (zh) 實行卷積運算的系統及方法
CN112395092A (zh) 数据处理方法及人工智能处理器
US20080126467A1 (en) Technique for transposing nonsymmetric sparse matrices
EP4206996A1 (en) Neural network accelerator with configurable pooling processing unit
CN115186802A (zh) 基于卷积神经网络的块稀疏方法、装置及处理单元
KR20220161485A (ko) 다수의 누산기들을 구비한 시스톨릭 어레이 셀들
Chen et al. Tight compression: Compressing CNN through fine-grained pruning and weight permutation for efficient implementation
CN114329329A (zh) 硬件中的稀疏矩阵乘法
US20220156344A1 (en) Systolic array cells with output post-processing
CN116301727A (zh) 数据处理方法及加速单元
CN111742331B (zh) 神经网络加速器
CN117492838A (zh) 访问序言和结尾数据
Khan et al. Systolic Architectures for artificial neural nets
KR20230085128A (ko) 컨볼루션 신경망을 위한 저전력 하드웨어 아키텍처
CN114443146A (zh) 基于存算一体存储器的矢量处理器及其运行方法
Scrofano et al. Energy-Efficient Discrete Cosine Transform on FPGAs.
CN116738130A (zh) 人工智能加速方法及器件、芯片、电子设备、存储介质
CN113220626A (zh) 人工智能加速器及其处理方法
CN118194951A (zh) 用于处置具有稀疏权重和离群值的处理的系统和方法
CN118349189A (zh) 交织式计算单元与存储模块的阵列结构、相关方法及装置