KR20190066058A - 신경망 연산 타일 - Google Patents

신경망 연산 타일 Download PDF

Info

Publication number
KR20190066058A
KR20190066058A KR1020197014238A KR20197014238A KR20190066058A KR 20190066058 A KR20190066058 A KR 20190066058A KR 1020197014238 A KR1020197014238 A KR 1020197014238A KR 20197014238 A KR20197014238 A KR 20197014238A KR 20190066058 A KR20190066058 A KR 20190066058A
Authority
KR
South Korea
Prior art keywords
unit
operations
memory
memory bank
data
Prior art date
Application number
KR1020197014238A
Other languages
English (en)
Other versions
KR102317668B1 (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 구글 엘엘씨
Priority to KR1020217033780A priority Critical patent/KR102387334B1/ko
Publication of KR20190066058A publication Critical patent/KR20190066058A/ko
Application granted granted Critical
Publication of KR102317668B1 publication Critical patent/KR102317668B1/ko

Links

Images

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
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • 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
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30065Loop control instructions; iterative instructions, e.g. LOOP, REPEAT
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3824Operand accessing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • G06N3/0454
    • 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

Abstract

입력 활성화를 저장하기 위한 제1 메모리 뱅크 및 연산을 수행하는데 사용되는 파라미터를 저장하기 위한 제2 메모리 뱅크를 포함하는 컴퓨팅 유닛이 개시된다. 연산 유닛은 제2 메모리 뱅크로부터 파라미터를 수신하고 연산을 수행하는 적어도 하나의 MAC(multiply accumulate) 오퍼레이터를 포함하는 적어도 하나의 셀을 포함한다. 연산 유닛은 제1 메모리 뱅크에 제어 신호를 제공하여 MAC 오퍼레이터에 의해 액세스 가능한 데이터 버스에 입력 활성화가 제공되도록 하는 제1 트래버스 유닛을 더 포함한다. 연산 유닛은 데이터 어레이의 적어도 하나의 요소와 관련된 하나 이상의 연산을 수행하며, 하나 이상의 연산은 MAC 오퍼레이터에 의해 수행되며, 부분적으로, 상기 데이터 버스로부터 수신된 상기 입력 활성화 및 상기 제2 메모리 뱅크로부터 수신된 파라미터의 곱셈 연산을 포함한다.

Description

신경망 연산 타일
본 명세서는 신경망 연산 타일에 관한 것이다.
본 명세서는 일반적으로 감소된 명령어 대역폭 및 명령어 메모리를 허용하는 심층 신경망(DNN: Deep Neural Network) 계층들의 연산을 위한 신경망 연산 타일에 관한 것이다.
일반적으로, 본 명세서에 기술된 요지의 하나의 혁신적인 양태는 텐서(tensor) 연산(컴퓨팅)을 가속화하기 위한 연산 유닛에서 구현될 수 있다. 연산 유닛은 입력 활성화들 또는 출력 활성화들 중 적어도 하나를 저장하기 위한 제1 데이터 폭을 갖는 제1 메모리 뱅크, 및 연산을 수행하는데 사용되는 하나 이상의 파라미터를 저장하기 위한 제1 데이터 폭보다 큰 제2 데이터 폭을 갖는 제2 메모리 뱅크를 포함한다. 연산 유닛은 제2 메모리 뱅크로부터 파라미터를 수신하고, 연산을 수행하는 적어도 하나의 MAC(multiply accumulate) 오퍼레이터를 포함하는 적어도 하나의 셀을 더 포함할 수 있다. 연산 유닛은 적어도 제1 메모리 뱅크와 데이터 통신하는 제1 트래버스(traversal) 유닛을 더 포함하며, 상기 제1 트래버스 유닛은 상기 MAC 오퍼레이터에 의해 액세스 가능한 데이터 버스에 입력 활성화가 제공되도록 상기 제1 메모리 뱅크에 제어 신호를 제공하도록 구성된다. 연산 유닛은 데이터 어레이의 적어도 하나의 요소(element)와 관련된 하나 이상의 연산을 수행하며, 하나 이상의 연산은 상기 MAC 오퍼레이터에 의해 수행되며, 상기 데이터 버스로부터 수신된 상기 입력 활성화 및 상기 제2 메모리 뱅크로부터 수신된 파라미터의 곱셈 연산을 부분적으로 포함한다.
본 명세서에 기술된 요지의 또 다른 혁신적인 양태는 텐서 연산을 가속화하기 위한 컴퓨터로 구현되는 방법으로 구현될 수 있다. 컴퓨터로 구현되는 방법은, 제1 데이터 폭을 갖는 제1 메모리 뱅크에 의해, 제1 트래버스 유닛으로부터 제어 신호를 수신하는 상기 제1 메모리 뱅크에 응답하여 제1 입력 활성화를 전송하는 단계 -상기 제1 메모리 뱅크는 연산 유닛에 배치되고, 상기 제1 입력 활성화는 상기 연산 유닛의 적어도 하나의 셀에 의해 액세스 가능한 데이터 버스에 의해 제공된다. 상기 방법은, 상기 적어도 하나의 셀에 의해, 상기 제1 데이터 폭보다 큰 제2 데이터 폭을 갖는 제2 메모리 뱅크로부터 하나 이상의 파라미터를 수신하는 단계를 더 포함하며, 적어도 하나의 셀은 적어도 하나의 MAC 오퍼레이터를 포함한다. 상기 방법은, 상기 MAC 오퍼레이터에 의해, 데이터 어레이의 적어도 하나의 요소와 관련된 하나 이상의 연산을 수행하는 단계를 더 포함하며, 상기 하나 이상의 연산은 상기 데이터 버스로부터 액세스된 적어도 제1 입력 활성화 및 상기 제2 메모리 뱅크로부터 수신된 적어도 하나의 파라미터의 곱셈 연산을 부분적으로 포함한다.
본 명세서에 기술된 요지의 또 다른 혁신적인 양태는 비-일시적인 컴퓨터 판독 가능 저장 매체에서 구현될 수 있다. 상기 비-일시적인 컴퓨터 판독 가능 저장 매체는 하나 이상의 프로세서에 의해 실행될 때 상기 하나 이상의 프로세서로 하여금 동작을 수행하게 하는 명령어들을 포함하며, 상기 동작은 제1 데이터 폭을 갖는 제1 메모리 뱅크에 의해, 제1 트래버스 유닛으로부터 제어 신호를 수신하는 상기 제1 메모리 뱅크에 응답하여 제1 입력 활성화를 전송하는 동작을 포함하며, 상기 제1 메모리 뱅크는 연산 유닛에 배치되고, 상기 제1 입력 활성화는 상기 연산 유닛의 적어도 하나의 셀에 의해 액세스 가능한 데이터 버스에 의해 제공된다. 상기 수행된 동작은 적어도 하나의 셀에 의해, 제1 데이터 폭보다 큰 제2 데이터 폭을 갖는 제2 메모리 뱅크로부터 하나 이상의 파라미터를 수신하는 동작을 더 포함하며, 적어도 하나의 셀은 적어도 하나의 MAC 오퍼레이터를 포함한다. 상기 수행된 동작은 MAC 오퍼레이터에 의해, 데이터 어레이의 적어도 하나의 요소와 관련된 하나 이상의 연산을 수행하는 동작을 더 포함하며, 상기 하나 이상의 연산은 적어도 상기 데이터 버스로부터 액세스된 제1 입력 활성화 및 상기 제2 메모리 뱅크로부터 수신된 적어도 하나의 파라미터의 곱셈 연산을 부분적으로 포함한다.
이러한 양태 및 다른 양태의 다른 구현 예는 컴퓨터 저장 장치상에 인코딩된 방법의 동작을 수행하도록 구성된 해당 시스템, 장치 및 컴퓨터 프로그램을 포함한다. 하나 이상의 컴퓨터로 이루어진 시스템은 소프트웨어, 펌웨어, 하드웨어 또는 이들이 조합되어 시스템상에 설치됨으로써 시스템으로 하여금 동작을 수행하도록 구성될 수 있다. 하나 이상의 컴퓨터 프로그램은 데이터 처리 장치에 의해 실행될 때 장치로 하여금 동작을 수행하게 하는 명령어들을 갖도록 구성될 수 있다.
본 명세서에 기술된 요지는 또한 이미지 인식 및/또는 분류 방법/시스템에 관한 것이다. 상기 시스템은 개시된 기술 및 하드웨어 컴퓨팅 유닛 또는 연산 타일을 갖는 설명된 하드웨어 컴퓨팅 시스템을 사용하여 구현될 수 있다. 컴퓨팅 유닛은 다수의 신경망 계층을 갖는 신경망을 사용하여 추론을 연산하기 위한 텐서 연산을 처리한다.
본 명세서에서 설명된 요지는 다음의 장점들 중 하나 이상을 실현하도록 특정 실시 예에서 구현될 수 있다. 레지스터를 사용하여 메모리 주소값을 추적하면 프로그램이 하나의 명령어로 DNL(deeply-nested loop)들을 반복할 수 있다. 내로우(narrow) 메모리와 와이드(wide) 메모리 유닛에서 액세스할 수 있는 텐서는, 단일 연산 타일에서, 레지스터에서 검색한 메모리 주소 값을 기반으로 트래버스된다. 메모리 주소 값은 텐서 요소에 해당한다. 텐서 연산은 DLN(deep loop nest)의 실행을 기반으로 개별 연산 타일에서 발생한다. 연산은 여러 타일에 분산될 수 있다. 여러 연산 타일에 걸쳐 다층 신경망에 대한 텐서 연산을 분산하여 연산 효율성이 향상되고 가속화된다. 텐서는 트래버스될 수 있으며, 텐서 연산은 감소된 수의 명령어로 수행될 수 있다.
본 명세서에서 설명된 요지는 또한 다른 장점을 실현하도록 특정 실시 예에서 구현될 수 있다. 예를 들어, 높은 대역폭의 외이드 메모리를 사용하여 임의의 순서로 다차원 어레이를 트래버스하는 어드레싱 유연성(addressing flexibility)을 허용하는 내로우 저 대역폭 메모리를 연결하는 메모리 계층(hierarchy)을 사용함으로써, 매우 다른 차원의 DNN 계층에 대해 MAC 오퍼레이터의 높은 활용도를 달성할 수 있으며 연산에서 지역성(locality)을 최대한 활용할 수 있다.
본 명세서에서 설명된 요지의 하나 이상의 구현예의 세부 사항은 첨부된 도면 및 이하의 설명에서 설명된다. 요지의 다른 잠재적인 특징, 양태 및 장점은 상세한 설명, 도면 및 청구 범위로부터 명백해질 것이다.
도 1은 예시적인 연산 시스템의 블록도이다.
도 2는 예시적인 신경망 연산 타일을 도시한다.
도 3은 예시적인 TTU(Tensor Traversal Unit) 구조를 도시한다.
도 4는 하나 이상의 MAC 오퍼레이터들에 입력 활성화를 제공하는 내로우(narrow) 메모리 유닛(NMU)을 포함하는 예시적인 아키텍처를 도시한다.
도 5는 도 2 및 도 4의 내로우 메모리 유닛에 출력 활성화를 제공하는 출력 버스를 포함하는 예시적인 아키텍처를 도시한다.
도 6은 도 2의 신경망 연산 타일을 사용하여 텐서 연산을 수행하는 프로세스의 예시적인 흐름도이다.
다양한 도면에서 유사한 참조 번호 및 명칭은 동일한 요소를 나타낸다.
본 명세서에 기술된 요지는 신경망 계층의 기계 학습 추론 작업 부하를 가속화하도록 구성된 다수의 컴퓨팅 유닛을 포함하는 하드웨어 컴퓨팅 시스템에 관한 것이다. 하드웨어 연산 시스템의 각 연산 유닛은 자체 포함되어 있으며 다층 신경망의 소정의 계층에 필요한 연산을 독립적으로 실행할 수 있다.
추론을 연산(컴퓨팅)하기 위해 다중 계층을 갖는 신경망을 사용할 수 있다. 예를 들어, 입력이 주어지면 신경망은 입력에 대한 추론을 연산할 수 있다. 신경망은 신경망의 각 계층을 통해 입력을 처리하여 이 추론을 연계한다. 특히, 신경망의 계층은 각각 가중치 세트를 갖는다. 각 계층은 입력을 수신하고 출력을 생성하기 위해 계층의 가중치 세트에 따라 입력을 처리한다.
따라서, 수신된 입력으로부터 추론을 연산하기 위해, 신경망은 입력을 수신하여 추론을 생성하기 위해 각각의 신경망 계층을 통해 이를 처리하고, 하나의 신경망 계층으로부터의 출력은 다음 신경망 계층에 입력으로서 제공된다. 신경망 계층에 대한 데이터 입력, 예를 들어, 신경망으로의 입력 또는 시퀀스 내의 계층 아래의 계층의 출력 중 하나를 신경망 계층에 입력하는 것은 계층에 대한 활성화(activation) 입력으로 지칭될 수 있다.
일부 구현 예에서, 신경망의 계층들은 시퀀스로 배열된다. 다른 구현예에서, 계층들은 유향 그래프(directed graph)로 배열된다. 즉, 특정 계층은 다중 입력, 다중 출력 또는 둘 모두를 수신할 수 있다. 신경망의 계층은 또한 계층의 출력이 이전 계층에 대한 입력으로서 되돌려 보내질 수 있도록 배열될 수 있다.
본 명세서에서 설명된 하드웨어 컴퓨팅 시스템은 다수의 연산 타일에 텐서 연산을 분산시킴으로써 신경망 계층의 연산을 수행할 수 있다. 신경망 계층 내에서 수행되는 연산 프로세스는 입력 활성화를 포함하는 입력 텐서와 가중치를 포함하는 파라미터 텐서의 곱을 포함할 수 있다. 연산은 하나 이상의 사이클에서 입력 활성화에 가중치를 곱하고 여러 사이클에 걸쳐 곱의 누적을 수행하는 것을 포함한다.
텐서는 다차원 기하학적 객체이며, 예를 들어 다차원 기하학적 객체는 행렬 및 데이터 배열을 포함한다. 일반적으로, 소프트웨어 알고리즘은 연산 타일에 의해 실행되어 N 차원 텐서를 트래버스하기 위해 중첩(네스트) 루프(nested loop)를 처리함으로써 텐서 연산을 수행한다. 일 예시적인 연산 프로세스에서, 각각의 루프는 N 차원 텐서의 특정 차원을 트래버스하는 것을 담당할 수 있다. 소정의 텐서 구조에 대해, 연산 타일은 텐서와 관련된 복수의 점곱(dot product) 연산을 실행하기 위해 특정 텐서의 요소에 대한 액세스를 요구할 수 있다. 연산은 내로우 메모리 구조에 의해 제공되는 입력 활성화가 와이드 메모리 구조에 의해 제공되는 파라미터 또는 가중치와 곱해질 때 발생한다. 텐서가 메모리에 저장되기 때문에 텐서 인덱스의 세트는 메모리 주소의 세트로 변환해야 할 수 있다. 일반적으로, 연산 타일의 텐서 트래버스 유닛(tensor traversal unit)은 연산을 수행하기 위해 인덱스 요소가 트래버스되는 순서 및 텐서와 관련된 각 차원의 인덱스를 제공하는 제어 연산을 실행한다. 곱셈 결과가 출력 버스에 쓰여지고 메모리에 저장되면 텐서 연산이 종료한다.
도 1은 심층 신경망(DNN)과 관련된 텐서 연산을 가속화하기 위한 예시적인 연산 시스템(100)의 블록도를 도시한다. 시스템(100)은 일반적으로 제어기(102), 호스트 인터페이스(108), 입/출력(I/O) 링크(110), 제1 타일 세트(112) 및 제2 타일 세트(114)를 포함하는 다중 타일, 분류기 부분(118), 버스 맵(118)(명확성을 위해 도시되었지만 시스템(100)에 포함되지 않음)에서 식별된 데이터 버스를 포함한다. 제어기(102)는 일반적으로 데이터 메모리(104), 명령어 메모리(106), 및 컴퓨터 판독 가능 저장 매체에 인코딩된 하나 이상의 명령어를 실행하도록 구성된 적어도 하나의 프로세서를 포함한다. 명령어 메모리(106)는 제어기(102)의 하나 이상의 프로세서에 의해 실행 가능한 하나 이상의 기계 판독 가능 명령어를 저장할 수 있다. 데이터 메모리(104)는 시스템(100) 내에서 발생하는 연산에 관련된 다양한 데이터를 저장하고 이어서 액세스하기 위한 다양한 데이터 저장 매체 중 임의의 것일 수 있다.
제어기(102)는 명령어 메모리(106)에 저장된 명령어를 포함하여, 시스템(100) 내의 텐서 연산에 관한 하나 이상의 명령어를 실행하도록 구성된다. 일부 구현 예에서, 데이터 메모리(104) 및 명령어 메모리(106)는 휘발성 메모리 유닛(들)이다. 일부 다른 구현 예에서, 데이터 메모리(104) 및 명령어 메모리(106)는 비휘발성 메모리 유닛(들)이다. 데이터 메모리(104) 및 명령어 메모리(106)는 또한 플로피 디스크 장치, 하드 디스크 장치, 광학 디스크 장치 또는 테이프 장치, 플래시 메모리 또는 다른 유사한 고체 메모리 장치 또는 저장 영역 네트워크 또는 다른 구성의 장치를 포함하는 장치의 어레이와 같은 컴퓨터 판독 가능 매체의 다른 형태일 수 있다. 다양한 구현 예에서, 제어기(102)는 또한 코어 관리자(102)로서 불릴 수 있다.
도시된 바와 같이, 호스트 인터페이스(108)는 I/O 링크(110), 제어기(102) 및 분류기 부분(116)에 연결된다. 호스트 인터페이스(108)는 I/O 링크(110)로부터 명령어 및 데이터 파라미터를 수신하고, 명령어 및 파라미터를 제어기(102)에 제공한다. 일반적으로, 명령어는 명령 버스(124)(후술함)를 통해 시스템(100) 내의 하나 이상의 장치에 제공될 수 있고, 파라미터는 링 버스(ring bus)(128)(후술함)를 통해 시스템(100)의 하나 이상의 장치에 제공될 수 있다. 일부 구현 예에서, 명령어는 초기 시간에 호스트 인터페이스(118)로부터 제어기(102)에 의해 수신되고, 나중에 제어기(102)에 의한 실행을 위해 명령 메모리(106)에 저장된다.
분류기 부분(116)은 마찬가지로 제어기(102) 및 제2 타일 세트(114)의 타일(tile)(7)에 연결된다. 일부 구현 예에서, 분류기 부분(116)은 시스템(100) 내의 별도의 타일로서 구현된다. 다른 구현 예에서, 분류기 부분(116)은 제어기(102)의 서브 회로 또는 서브 장치(디바이스)로서 제어기(102) 내에 배치되거나 위치된다. 분류기 부분(116)은 일반적으로 완전 연결(fully connected) 계층들의 출력들로서 수신된 누적된 사전 활성화 값들에 대해 하나 이상의 기능을 수행하도록 구성된다. 완전 연결 계층들은 타일 세트들(112 및 114) 내의 타일들에 걸쳐 분할될 수 있다. 따라서, 각각의 타일은 타일의 메모리 유닛(들)에 저장될 수도 있는 사전 활성화 값(즉, 선형 출력)의 서브 세트를 생성하도록 구성된다. 분류 결과 버스(120)는 분류기 부분(116)으로부터 제어기(102) 로의 데이터 경로를 제공한다. 사후 기능(post-function) 값(즉, 결과)을 포함하는 데이터는 분류 결과 버스(120)를 통해 분류기 부분(116)으로부터 제어기(102)로 제공된다.
버스 맵(118)은 제1 타일 세트(112)와 제2 타일 세트(114)의 타일들 사이에 하나 이상의 상호 연결된 데이터 통신 경로를 제공하는 데이터 버스를 도시한다. 버스 맵(118)은 도 1에 도시된 바와 같이 분류 결과 버스(120), CSR/마스터 버스(122), 명령어 버스(124), 메쉬 버스(126) 및 링 버스(128)를 식별하기 위한 범례(legend)를 제공한다. 일반적으로, 타일은 시스템(100)의 가속기 구조 내의 핵심 컴포넌트이며, 시스템에서 발생하는 텐서 연산을 위한 중심점(focal point)이다. 각각의 타일은 개별적인 연산 유닛이고, 다중 타일은 시스템 내의 다른 타일과 상호 작용하여 다층 신경망의 하나 이상의 계층에 걸친 연산(예를 들어, 텐서 연산)을 가속화할 수 있다. 예를 들어 연산은 여러 타일에 분산될 수 있다. 다중 계층 신경망에 대한 텐서 연산을 여러 연산 타일에 분산하여 연산 효율을 높이고 가속화할 수 있다. 타일 세트(112, 114) 내의 타일은 소정의 명령어와 관련된 텐서 연산의 실행을 공유할 수 있지만, 개별 연산 유닛은 타일 세트들(112, 114) 내의 다른 해당 타일들에 대해 독립적으로 텐서 연산들의 서브세트를 실행하도록 구성된 독립적인 연산 컴포넌트이다.
제어 및 상태 레지스터(CSR) 버스(122)는 제어기(102)가 프로그램 구성을 설정하고 하나 이상의 타일과 연관된 상태 레지스터를 판독하는 하나 이상의 명령어를 전송할 수 있게 하는 단일 마스터 다중 슬레이브 버스이다. CSR 버스(122)는 하나의 마스터 버스 세그먼트 및 다수의 슬레이브 버스 세그먼트를 갖는 단일 데이지 체인 구성(daisy chain configuration)으로 연결될 수 있다. 도 1에 도시된 바와 같이, CSR 버스(122)는 타일 세트(112, 114)의 타일과 제어기(102)를 링에서 호스트 인터페이스(110)로 연결하는 버스 데이터 경로를 통해 통신 커플링을 제공한다. 일부 구현 예에서, 호스트 인터페이스(110)는 CSR 버스 링의 단일 마스터이고, 전체 CSR 버스 어드레스 공간은 호스트 인터페이스(110)의 메모리 공간에 매핑된 메모리이다.
CSR 버스(122)는 예를 들어, 제어기(102)가 명령어 메모리(106)로부터 명령어를 인출하기 시작할 수 있게 하기 위해 제어기(102) 내의 메모리 버퍼 포인터를 프로그래밍하고, 하나 이상의 연산 동안 정적(static)으로 유지되는 다양한 타일 설정(예를 들어, 다항식 근사 계산을 위한 계수 테이블)을 업데이트/프로그래밍하는 것, 및/또는 펌웨어를 분류기 부분(116)에 로딩/재로딩하는 것을 포함하는 하나 이상의 동작을 수행하기 위해 호스트 인터페이스(110)에 의해 사용될 수 있다. 일 예시에서, 펌웨어 재로딩은 선형 출력(즉, 사전 활성화 값)에 적용될 새로운 기능(functions)을 포함할 수 있다. 따라서, CSR 버스(122)에 액세스하는 모든 슬레이브는 슬레이브에 묶여 있고 그것을 식별하는 별개의 노드 식별자(노드 ID)를 가질 것이다. 노드 ID는 명령어 어드레스의 일부분이며, CSR 슬레이브(즉, 제어기(102), 타일(112, 114) 및 분류기(116))에 의해 사용, 검사 또는 조사되어 CSR 패킷이 슬레이브에 어드레스되었는지를 결정한다.
일부 구현 예에서, 하나 이상의 명령어들은 제어기(102)를 통해 호스트 인터페이스(102)에 의해 전송될 수 있다. 명령어들은 예를 들어 명령어를 수신하고 실행하는 명령어 어드레스(주소)/목적지를 나타내는 헤더 정보를 포함하는 처음 7비트를 갖는 32비트 폭일 수 있다. 상기 헤더의 처음 7비트는 특정 노드 ID를 나타내는 데이터 파라미터를 포함할 수 있다. 따라서, CSR 버스 링상의 슬레이브(예를 들어, 각각의 타일)는 명령어의 헤더를 검사하여 마스터(호스트 인터페이스(110))에 의한 요청이 헤더를 검사하는 타일에 어드레스되었는지 여부를 결정할 수 있다. 헤더의 노드 ID가 상기 목적지가 검사 타일임을 나타내지 않으면, 검사 타일은 다음 타일로 검사할 수 있도록 CSR 입력 패킷을 다음 타일에 연결된 CSR 버스 입력에 복사합니다. 입력 CSR 명령어 패킷을 다음 타일로 검사하기 위해 다음 타일에 연결된 CSR 버스 입력에 카피(copy)한다.
명령어 버스(124)는 제어기(102)로부터 시작되며, CSR 버스(122)와 유사하게, 링 내의 타일 세트들(112, 114) 내의 타일들을 제어기(102)에 연결시키는 버스 데이터 경로를 통해 통신 커플링을 제공한다. 일 실시 예에서, 제어기(102)는 명령어 버스(124)를 통해 하나 이상의 명령어를 전송(broadcast)한다. 제어기(102)에 의해 전송되는 명령어는 CSR 버스(122)를 통해 제공된 명령어와 다를 수 있다. 그러나, 타일이 버스(124)를 통해 수신된 명령어를 수신 및/또는 소비 또는 실행하는 방식은 CSR 버스(122)를 통해 수신된 명령어를 실행하기 위한 프로세스와 유사할 수 있다.
일 예시에서, 명령어의 헤더(즉, 비트맵)는 수신 타일이 명령어와 관련된 비트맵에 기초하여 특정 명령어를 소비할 필요가 있음을 수신 타일에 나타낸다. 상기 비트맵은 비트 단위로 정의된 특정 폭을 가질 수 있다. 명령어는 일반적으로 명령어의 파라미터를 기반으로 한 타일에서 다음 타일로 전달된다. 일 실시 예에서, 명령어 버스(124)의 폭은 명령어의 크기/폭보다 작도록 구성될 수 있다. 따라서, 이러한 구성에서, 명령어들의 전송은 여러 사이클을 거치며, 명령어 버스(124)의 버스 스톱(bus stops)은 타일에서 수신된 명령어를 그 타일과 연관된 적절한 타겟 명령어 버퍼에 배치하기 위한 디코더를 가질 것이다.
아래에서 더 설명하는 바와 같이, 타일 세트들(112, 114) 내의 타일들은 일반적으로 2개의 광범위한 카테고리의 명령어들을 지원하도록 구성된다. 2개의 광범위한 카테고리는 명령어 유형이라고도 한다. 명령어 유형은 텐서 연산(TensorOp) 명령어와 직접 메모리 액세스(DMAOp) 명령어를 포함한다. 일부 구현 예에서, DMAOp 명령어에는 동시 처리가 허용되는 하나 이상의 스펙(specialization)이 있다. 하나 이상의 스펙은 DMAOp 명령어 서브 유형 또는 연산 코드(opcode)라고 할 수 있다. 일부 경우에, 모든 유일하고 유효한 DMAOp 명령어 유형/서브 유형 튜플(tuple)은 특정 타일 내에 별도의 명령어 버퍼를 가질 것이다.
타일들(112, 114) 중 특정 타일에서, 명령어 버스(124)와 연관된 버스 스톱은 명령어 유형/서브유형을 결정하기 위해 헤더 비트맵을 조사할 것이다. 명령어는 타일에 의해 수신될 수 있고 이어서 타일에 의한 명령어의 실행 이전에 타일의 명령어 버퍼에 기록될 수 있다. 명령어가 기록되는 타일의 명령어 버퍼는 명령어의 유형 및 서브 유형 인디케이터(indicator)/필드에 의해 결정될 수 있다. 명령어 버퍼는 하나 이상의 관련 명령어의 소비를 우선시하는 FIFO(first-in first-out) 제어 구조를 포함할 수 있다. 따라서, 이 FIFO 제어 구조하에서, 동일한 유형/서브 유형의 명령어는 명령이 명령어 버스에 도착한 순서로 항상 실행될 것이다.
타일 내의 다른 명령어 버퍼는 TensorOp 명령어 버퍼 및 DMAOp 명령어 버퍼이다. 상기한 바와 같이, 명령어 유형은 TensorOp 명령어와 DMAOp 명령어를 포함한다. DMAOp 명령어와 관련하여, 명령 서브유형(버퍼 위치에 기록("write-to")을 지시함)은 1) 메쉬 인바운드 명령어 버퍼; 2) 아웃 바운드 명령어 버퍼 메쉬; 3) 내로우-와이드(narrow-wide) DMA 명령어 버퍼; 4) 외이드-내로우(narrow-wide) DMA 명령어 버퍼; 그리고 5) 링 버스 DMA 명령어 버퍼를 포함한다. 이들 버퍼 위치는 도 2를 참조하여 이하에서보다 상세하게 설명될 것이다. 와이드 그리고 내로우 지정은 명세서 전반에 걸쳐 사용되며, 일반적으로 하나 이상의 메모리 유닛의 폭(비트/바이트)의 대략적인 크기를 나타낸다. 본 명세서에 사용된 바와 같이, "내로우"는 각각 16비트 미만의 크기 또는 폭을 갖는 하나 이상의 메모리 유닛을 지칭할 수 있고, "와이드"는 각각 64비트 미만의 크기 또는 폭을 갖는 하나 이상의 메모리 유닛을 지칭할 수 있다.
메쉬(mesh) 버스(126)는 CSR 버스(122), 명령어 버스(124), 및 링 버스(128)(후술함)와 구별되는 데이터 통신 경로를 제공한다. 도 1에 도시된 바와 같이, 메쉬 버스(126)는 X 및 Y 차원 모두에서 각각의 타일을 그 해당 이웃(인접한) 타일에 연결하거나 커플링하는 통신 경로를 제공한다. 다양한 구현 예에서, 메쉬 버스(126)는 인접한 타일들 내의 하나 이상의 내로우 메모리 유닛들 사이에서 입력 활성화 양(input activation quantities)을 전송하는데 사용될 수 있다. 도시된 바와 같이, 메쉬 버스(126)는 인접하지 않은 타일들에 입력 활성화 데이터의 직접 전달을 허용하지 않는다.
다양한 구현 예에서, 메쉬 버스(126) 및 메쉬 버스(126)를 통해 연결된 다양한 타일은 다음과 같은 구성을 가질 수 있다. 메쉬의 네 코너(Four corner) 타일에는 두 개의 아웃 바운드 포트와 두 개의 인바운드 포트가 있다. 메쉬의 네 에지(Four edge) 타일은 세 개의 인바운드 포트와 세 개의 아웃 바운드 포트를 가지고 있다. 에지가 아닌 모든 비-코너 타일에는 4개의 인바운드 포트와 4개의 아웃 바운드 포트가 있다. 일반적으로, 예시적인 N × N 타일 레이아웃이 주어지면, 에지 타일은 단지 3개의 인접 타일을 갖는 타일이고, 코너 타일은 2개의 인접 타일을 갖는 타일이다. 메쉬 버스(126)를 통한 데이터 흐름 방법에 관해서는, 일반적으로, 특정 타일에 대한 메쉬 버스(126)를 통해 도착한 모든 입력 활성화는 타일의 하나 이상의 내로우 메모리 유닛에 커밋(committed)되어야 한다. 또한, 인바운드 포트가 4개 미만인 타일 구성의 경우, DMAOp 명령어는 결여된 입력 포트에서 데이터를 기다리는 대신 타일의 내로우 메모리에 있는 위치에 0 값을 기록(쓰기)할 수 있다. 마찬가지로, 아웃 바운드 포트가 4개 미만인 타일 구성의 경우, DMAOp 명령어는 결여된 포트에 대한 전송과 관련된 내로우 메모리 읽기 및 포트 쓰기를 실행하지 않을 것이다.
일부 구현 예에서, 특정 입력 활성화가 쓰여지거나 읽히는 내로우 메모리 유닛(들)의 위치 또는 주소는 메쉬 버스(126)를 통해 제공된 인바운드/아웃 바운드 DMAOp를 기반으로 TTU(Tensor Traversal Unit)에 의해 생성될 것이다. 인바운드 DMAOp 및 아웃 바운드 DMAOp는 동시에 실행될 수 있고, 임의의 필요한 동기화는 제어기(102)에 의해 관리되는 동기 플래그 제어 방식을 통해 관리될 것이다. TTU는 도 2 및도 3을 참조하여 이하에서 더 상세하게 설명된다.
링 버스(128)는 제어기(102)로부터 시작되며, CSR 버스(122) 및 명령어 버스(124)와 유사하게, 링의 타일(112, 114)을 제어기(102)에 다시 연결시키는 버스 데이터 경로를 통해 통신 커플링을 제공한다. 다양한 구현 예에서, 링 버스(128)는 일반적으로 모든 타일(112, 114)에서 모든 와이드 메모리 유닛(도 2를 참조하여 이하에서보다 상세하게 설명됨)을 연결하거나 커플링한다. 따라서, 링 버스(128)의 페이로드 폭은 타일 세트들(112, 114)의 각각의 타일 내에 배치된 와이드 메모리 유닛들의 폭에 대응한다. 상술한 바와 같이, 링 버스(128)는 또한 링 버스(128)를 통해 전달되는 명령어들 또는 파라미터들을 포함하는 페이로드 데이터를 소비할 필요가 있는 타일들을 나타내는 비트맵 헤더를 포함한다.
링 버스(128)를 통해 특정 타일에서 수신된 데이터(즉, 페이로드)와 관련하여, 정보의 수신에 응답하여, 각각의 타일은 다른 타일로 데이터를 전송하기 전에 수신 타일에 고유한 비트맵 헤더에 표시된 위치 데이터를 제로(즉, 클리어 아웃(clear out))로 할 것이다. 따라서, 헤더 비트맵이 페이로드를 수신할 특정 타일을 나타내는 잔여 비트 세트 데이터를 갖지 않으면, 페이로드를 다른 타일로 전달하는 것이 중지될 것이다. 페이로드 데이터는 일반적으로 심층 중첩된(네스트) 루프(deeply nested loop)의 실행을 기반으로 수행되는 텐서 연산 중 하나 이상의 타일에서 사용되는 활성화 및 가중치를 나타낸다.
일부 구현 예에서, 제어기(102)는 링 버스(128)의 일부인 것으로 설명될 수 있다. 일 예시에서, 특정 타일 내에서 실행되는 DMAOp 명령어의 경우, 제어기(102)는 링 버스 스톱으로부터 데이터/페이로드를 팝핑(pop)하고 페이로드를 링 내의 다음 타일의 링 버스 스톱에 전송하는데 사용될 수 있다. 제어기(102)는 비트맵 헤더 내의 명령어들에 의해 그러한 동작이 요구되는 경우 페이로드 데이터가 타일의 하나 이상의 와이드 메모리 유닛들에 커밋되도록 할 수 있다. 데이터가 기록(write)될 필요가 있는 하나 이상의 와이드 메모리 유닛의 어드레스(주소)는 특정 타일 내의 DMAOp 명령어에 의해 생성될 수 있다.
다양한 구현 예에서, 타일 세트(112, 114)의 각 타일은 페이로드 데이터의 컨슈머(consumer) 또는 페이로드 데이터의 프로듀서(producer)일 수 있다. 타일이 페이로드 데이터의 프로듀서일 때, 타일은 하나 이상의 와이드 메모리 유닛들로부터 데이터를 읽고(read), 하나 이상의 다른 타일들에 의한 소비를 위해 링 버스(128)를 통해 데이터를 멀티캐스트한다. 타일이 페이로드 데이터의 프로듀서일 때, 타일은 타일 내의 하나 이상의 와이드 메모리 유닛에 데이터를 수신 및 기록하고, 하나 이상의 다른 타일에 의해 소비되도록 페이로드 데이터를 전송한다. 링 버스(128)를 통한 페이로드 데이터의 이동과 관련하여, 임의의 소정 시간에 링 버스(128) 상의 데이터의 하나의 프로듀서/마스터만이 일반적으로 존재할 것이다. 모든 타일에서의 DMAOp 명령어 실행 순서(예를 들어, FIFO 제어 구조)는 소정 시간에 링 버스(128) 상의 데이터의 단지 하나의 프로듀서/마스터만이 있음을 보장할 것이다.
일부 구현 예에서, 제어기(102)는 동기화 플래그 제어 구조를 사용하여 소정 시간에 링 버스(128)상의 페이로드 데이터의 단지 하나의 프로듀서/마스터가 있음을 보장한다. 일 예시에서, 링 출력에 대한 타일에 의한 모든 기록(write)은 대응하는 동기 플래그 카운트의 증가를 트리거할 것이다. 제어기(102)는 페이로드 데이터를 조사하여 페이로드를 포함하는 세그먼트 또는 데이터 청크(chunk)의 수를 결정할 수 있다. 그 다음, 제어기(102)는 타일에 의한 실행을 모니터하여, 다른 타일이 마스터 모드에서 실행되기 전에 데이터 세그먼트의 예상된 수가 타일에 의해 전송 및/또는 소비(consumed)되도록 보장한다.
소정 시간에 링 버스(128)상의 단지 하나의 데이터의 프로듀서/마스터가 존재한다는 것을 보장하는 예외는 링 버스 상에 중첩 영역을 가지지 않는 링 버스(128)를 통해 연결된 로컬 멀티캐스트 그룹이 있을 때 발생한다. 예를 들어, 타일 0(마스터)은 타일 0-타일 3 그룹핑에서 타일로 멀티 캐스팅(즉, data produce) 할 수 있는 반면, 타일 4(마스터)는 타일 4-타일 7 그룹화에서 타일을 동일하게 할 수 있다. 이 듀얼 마스터 멀티 캐스트 방법론의 중요한 요구 사항은 패킷이 겹쳐져 하나 이상의 데이터 연산 오류가 발생할 수 있기 때문에 서로 다른 멀티 캐스트 그룹이 서로의 데이터 패킷을 볼 수 없도록 해야한다는 것이다.
도 1에 도시된 바와 같이, 제어기(102)는 타일 세트들(112, 114) 내의 타일들을 I/O(110)에 연결하거나 커플링하는 통신 데이터 경로를 제공하며 일부 핵심 기능들을 포함한다. 제어기(102)의 핵심 기능은 일반적으로 I/O(110)로부터 수신된 하나 이상의 입력 활성화들 및 파라미터들을 타일들에 공급하는 타일 세트들(112, 114) 내의 타일들에 하나 이상의 I/O 입력 활성화들을 공급하고, I/O(110)로부터 수신된 하나 이상의 명령어를 타일들에 공급하고, I/O 출력 활성화를 호스트 인터페이스(108)에 전송하고, CSR 버스(122) 및 링 버스(128)에 대한 링 스톱으로서 기능하는 것을 포함한다. 아래에서보다 상세하게 설명되는 바와 같이, 제1 타일 세트(112) 및 제2 타일 세트(114)는 각각 내부 및 외부 루프로 구성된 DLN(deep loop nest)에 기초하여 실행되는 하나 이상의 텐서 연산을 수행하는데 사용되는 다수의 타일을 포함한다.
시스템(100)은 일반적으로 다음과 같이 동작한다. 호스트 인터페이스(108)는 주어진 연산을 위해 발생하는 직접 메모리 액세스 동작(DMAOp)을 정의하는 하나 이상의 명령어를 제어기(102)에 제공할 것이다. 제어기(102)에 공급된 명령어와 관련된 디스크립터(Descriptor)는 다차원 데이터 어레이(텐서)와 관련된 대규모의 점곱 연산을 용이하게 하기 위해 제어기에 의해 요구되는 정보를 포함할 것이다. 일반적으로, 제어기(102)는 신경망의 소정 계층에 대한 텐서 연산을 실행하기 위한 입력 활성화, 타일 명령어 및 모델 파라미터(즉, 가중치)를 호스트 인터페이스(108)로부터 수신한다. 그 후, 제어기(102)는 명령어들이 명령(들)에 의해 정의된 데이터 흐름 방식으로 타일들(112, 114)에 멀티캐스팅되도록 할 수 있다. 전술한 바와 같이, 명령어를 소비하는 타일은 명령어 헤더 내의 비트맵 데이터에 기초하여 새로운/후속 명령어의 다른 타일로의 브로드캐스트(전송)를 개시할 수 있다.
데이터 흐름과 관련하여, 입력 활성화 및 파라미터는 링 버스(128)를 통해 타일 세트(112, 114)의 타일로 전송된다. 타일들(112, 114) 각각은 그 특정 타일에 할당된 출력 활성화들의 서브세트를 연산하는데 필요한 입력 활성화들의 서브세트를 저장할 것이다.
타일에 대한 DMAOp 명령어는 입력 활성화가 와이드 메모리에서 내로우 메모리로 이동하게 할 것이다. 타일 내의 연산은 필요한 입력 활성화, 파라미터/가중치 및 연산 명령어(TTU 동작, 메모리 주소 등)가 타일에서 사용 가능할 때 시작한다. 타일 내의 MAC 오퍼레이터(아래에서 설명됨)가 명령어 세트에 의해 정의된 모든 점곱 연산을 완료하고 사전 활성화 함수가 곱셈 연산의 결과(즉, 출력 활성화)에 적용될 때 타일 내에서 발생하는 연산이 종료된다.
하나 이상의 텐서 연산의 결과는 연산을 수행하는 타일의 내로우 메모리 유닛(들)에 연산 계층의 출력 활성화를 기록하는 것을 포함한다. 특정 텐서 연산에 대해, 메쉬 버스(126)를 통해 인접한 타일로 출력 에지 활성화가 전송될 것이다. 인접한 타일로 출력 에지 활성화를 전송하는 것은 연산이 여러 계층에 걸쳐있을 때 후속 계층에 대한 출력 활성화를 연산하는 데 필요하다. 모든 계층에 대한 연산이 완료되면, DMAOp는 최종 활성화를 링 버스(128)를 통해 분류기 타일(116)로 이동시킬 것이다. 그 다음 제어기(102)는 분류기 타일(116)로부터 최종 활성화를 판독(read)하고 DMAOp를 실행하여 최종 활성화를 호스트 인터페이스(108)로 이동시킨다. 일부 구현 예에서, 분류기 부분(116)은 NN(신경망)의 출력층(즉, 최종 계층)의 연산을 수행한다. 다른 구현예에서, NN의 출력층은 분류기 계층, 회귀(regression) 계층 또는 일반적으로 신경망과 관련된 다른 계층 유형 중 하나이다.
도 2는 예시적인 신경망(NN) 연산 타일(200)을 도시한다. 일반적으로, 예시적인 타일(200)은 도 1을 참조하여 전술한 제1 타일 세트(112) 및 제2 타일 세트(114) 내의 타일들 중 임의의 타일에 대응할 수 있다. 다양한 구현 예에서, 연산 타일(200)은 연산 유닛(200)으로 참조되거나 지칭될 수도 있다. 각각의 연산(계산) 타일(200)은 타일 세트들(112, 114) 내의 다른 대응하는 타일들에 대해 독립적으로 명령어들을 실행하도록 구성된 독립적인 연산 유닛이다. 위에서 간략히 설명한 것처럼, 각 연산 타일(200)은 TensorOp 명령어와 DMAOp 명령어의 두 가지 유형의 명령어를 실행한다. 일반적으로, 각 명령어 유형은 DLN(deep loop nests)과 연관된 연산 동작을 포함하므로 각 명령 유형은 일반적으로 모든 루프 반복의 완료를 보장하기 위해 여러 시간대에 걸쳐 실행할 것이다.
아래에서보다 상세하게 설명되는 바와 같이, 상이한 명령어 유형은 연산 타일(200) 내에서 관리되는 동기 플래그 제어를 통해 데이터를 동기화하는 연산 타일(200) 내의 독립적인 제어 유닛에 의해 실행된다. 동기 플래그 제어는 연산 타일(200) 내의 상이한 명령어 유형의 실행 사이의 동시성을 관리한다. 각각의 명령어 유형과 연관된 각각의 연산 동작은 발행의 엄격한 순서(즉, 선입 선출(First-In First-Out))로 실행될 것이다. 두 개의 명령어 유형, TensorOP 및 DMAOp에 관련하여, 이들 상이한 명령어 유형 간에는 순서 보장이 없으며, 각각의 유형은 별도의 제어 스레드로서 연산 타일(200)에 의해 처리된다.
데이터 흐름 구성과 관련하여, 연산 타일(200)은 일반적으로 연산 타일(200)에 대한 데이터 흐름을 위한 통신 경로를 제공하는 데이터 경로(202) 및 데이터 경로(205)를 포함한다. 상기 설명된 바와 같이, 시스템(100)은 링 구성(ring configuration)으로 배치된 3개의 개별 데이터 버스 구조(CSR 버스(122), 명령어 버스(124) 및 링 버스(128))를 포함한다. 도 2에서, 데이터 경로(205)는 명령어 버스(124)에 대응하고, 데이터 경로(202)는 일반적으로 CSR 버스(122) 및 링 버스(128) 중 하나에 대응한다. 도시된 바와 같이, 데이터 경로(202)는 연산 타일(200)을 떠나는 데이터에 대한 출력 경로를 제공하는 링 출력(203) 및 연산 타일(200)에 들어가는 데이터에 대한 입력 경로를 제공하는 링 입력(204)을 포함한다.
연산 타일(200)은 TensorOp 텐서 트래버스 유닛(TTU)(226)을 포함하는 TensorOP 제어부(control)(206) 및 DMAOp TTU(228)를 포함하는 DMAOp 제어부(DMA control)(208)를 더 포함한다. TensorOp 제어부(206)는 일반적으로 TensorOp TTU 레지스터(register)(232)에 대한 기록 및 TensorOp TTU 레지스터(232)로부터의 판독을 관리하고, TensorOp TTU(226)에 의한 실행을 위한 트래버스 동작(traversal operation)을 관리한다. 마찬가지로, DMAOp 제어부(208)는 일반적으로 DMAOp TTU 레지스터(234)로의 기록 및 DMAOp TTU 레지스터(234)로부터의 판독을 관리하고, DMAOp TTU(228)에 의한 실행을 위한 트래버스 동작을 관리한다. TTU 레지스터(232)는 TensorOp 제어부(control)(206)에 의한 명령어들의 실행시 TensorOp TTU(226)에 의해 수행될 동작들을 포함하는 하나 이상의 명령어들을 저장하기 위한 명령어 버퍼를 포함한다. 마찬가지로, TTU 레지스터(234)는 DMAOp 제어부(208)에 의한 명령어들의 실행시 TTU(228)에 의해 수행될 동작들을 포함하는 하나 이상의 명령어들을 저장하기 위한 명령어 버퍼를 포함한다.
아래에서 더 설명하는 바와 같이, TTU들(226 및/또는 228)은 일반적으로 내로우 메모리(210) 및 와이드 메모리(212)에 상주하는 하나 이상의 텐서들의 어레이 요소들을 트래버스하기 위해 연산 타일(200)에 의해 사용된다. 일부 구현 예에서, TTU(226)는 TensorOp 제어부(206)에 의해 사용되어 DLN(deep loop nest)의 실행에 기초하여 다차원 텐서의 차원을 트래버스하는 텐서 연산을 제공한다.
일부 구현 예에서, 연산 타일(200)에 의한 실행을 위한 특정 명령어들은 데이터 경로(205)(즉, 명령어 버스(124)의 일부)를 통해 타일에 도달한다. 연산 타일(200)은 헤더 비트맵을 조사하여 명령어 유형(TensorOp 또는 DMAOp) 및 명령어 서브유형(판독 동작 또는 기록 동작)을 결정할 것이다. 연산 타일(200)에 의해 수신된 명령어(들)는 이후에 명령어 유형에 따라 특정 명령어 버퍼에 기록된다. 일반적으로, 연산 타일(200)의 컴포넌트에 의한 명령어의 실행 이전에 명령어들이 수신되어 저장된다(즉, 버퍼에 기록된다). 도 2에 도시된 바와 같이, 명령어 버퍼(즉, TensorOp TTU 레지스터(232) 및 DMAOp TTU 레지스터(234))는 각각 하나 이상의 관련 명령어(명령)의 소비(실행)를 우선시하는 선입선출(FIFO) 제어 구조를 포함할 수 있다.
위에서 간략히 설명한 것처럼, 텐서는 다차원 기하학적 객체이고, 예를 들어 다차원 기하학적 객체는 행렬 및 데이터 어레이(배열)를 포함한다. 심층 중첩된(네스트) 루프(deeply nested loop)를 포함하는 알고리즘은 하나 이상의 중첩된 루프를 반복하여 N 차원 텐서를 트래버스함으로써 텐서 연산을 수행하도록 연산 타일(200)에 의해 실행될 수 있다. 일례의 연산 프로세스에서, 루프 네스트(loop nest)의 각 루프는 N 차원 텐서의 특정 차원을 트래버스할 책임이 있다. 본 명세서에 기술된 바와 같이, TensorOp 제어부(206)는 일반적으로 심층 네스트 루프에 의해 정의된 연산을 완료하기 위해 특정 텐서 구조의 차원 요소가 트래버스되고 액세스되는 시퀀스를 구동하는 하나 이상의 텐서 연산을 관리한다.
연산 타일(200)은 내로우 메모리(210) 및 와이드 메모리(212)를 더 포함한다. 내로우 및 와이드 지정은 일반적으로 내로우 메모리(210) 및 와이드 메모리(212)의 메모리 유닛의 폭(비트/바이트)의 크기를 지칭한다. 일부 구현 예에서, 내로우 메모리(210)는 각각 16비트 미만의 폭 또는 크기를 갖는 메모리 유닛을 포함하고, 외이드 메모리(212)는 각각 32비트 미만의 폭 또는 크기를 갖는 메모리 유닛을 포함한다. 일반적으로, 연산 타일(200)은 데이터 경로(205)를 통해 입력 활성화를 수신하고, DMA 제어부(208)는 입력 활성화를 내로우 메모리(210)에 기록하기 위한 동작을 실행한다. 마찬가지로, 연산 타일(200)은 데이터 경로(202)를 통해 파라미터(가중치)를 수신하고, DMA 제어부(208)는 파라미터를 와이드 메모리(212)에 기록하기 위한 동작을 실행한다. 일부 구현 예에서, 내로우 메모리(210)는 각각의 메모리 사이클에 대해 어떤 제어 장치(예를 들어, TensorOp 제어부(206) 또는 DMAOp 제어부(208))가 내로우 메모리(210)의 공유 메모리 유닛에 액세스하도록 허용될지를 결정하기 위해 공유 메모리 시스템에서 통상적으로 사용되는 메모리 아비터(arbiter)를 포함할 수 있다.
연산 타일(200)은 MAC 오퍼레이터(215) 및 합 레지스터(sum register)(220)를 각각 포함하는 다수의 셀을 포함하는 MAC 어레이(214) 및 입력 활성화 버스(216)를 더 포함한다. 일반적으로, MAC 어레이(214)는, 다수의 셀에 걸쳐 MAC 오퍼레이터들(215) 및 합 레지스터들(220)을 사용하여, 점곱 연산에 관련된 산술 연산들을 포함하는 텐서 계산을 실행한다. 입력 활성화 버스(216)는 내로우 메모리(210)에 의해, 입력 활성화가 MAC 어레이(214)의 각 MAC 오퍼레이터(215)에 의한 각각의 액세스에 대해 하나씩 제공되는 데이터 경로를 제공한다. 따라서, 입력 활성화의 1대1 전송에 기초하여, 특정 셀의 단일 MAC 오퍼레이터(215)는 각각 입력 활성화를 수신할 것이다. MAC 어레이(214)의 MAC 오퍼레이터에 의해 수행되는 산술 연산은 일반적으로 내로우 메모리(210)에 의해 제공된 입력 활성화에 와이드 메모리(212)로부터 액세스된 파라미터를 곱하여 단일 출력 활성화 값을 생성하는 것을 포함한다.
산술 연산 동안, 부분 합(partial sum)이 누적되어 대응하는 예를 들어 합 레지스터(220)에 저장되거나 와이드 메모리(212)에 기록되고 후속 곱(곱셈) 연산을 완료하기 위해 MAC 어레이(214)의 특정 셀에 의해 다시 액세스될 수 있다. 텐서 연산은 제1 부분 및 제2 부분을 갖는 것으로 설명될 수 있다. 제1 부분은 곱셈 연산이 출력 활성화를 생성할 때 완료되는데, 예를 들어 입력 활성화와 파라미터의 곱셈을 완료하여 출력 활성화를 생성함으로써 완료한다. 제2 부분은 출력 활성화에 대한 비선형 함수의 적용을 포함하고, 제2 부분은 출력 활성화가 그 함수의 적용 후에 내로우 메모리(210)에 기록될 때 완료된다.
연산 타일(200)은 출력 활성화 버스(218), 출력 활성화 파이프라인(Pipeline)(224)을 포함하는 비선형 유닛(NLU, Non-Linear Unit)(222), NLU 제어부(238) 및 연산 타일(200) 내의 컴포넌트의 핵심(Core) 속성을 나타내는 참조 맵(230)을 더 포함한다. 참조 맵(230)은 명확성을 위해 도시되었지만, 연산 타일(200)에는 포함되지 않는다. 핵심 속성에는 특정 컴포넌트가 유닛, 저장 장치, 오퍼레이터, 제어 장치 또는 데이터 경로 중 어느 것인지 여부가 포함된다. 일반적으로, 텐서 연산의 제1 부분의 완료시, 출력 활성화는 출력 활성화 버스(218)를 통해 MAC 어레이(214)에서 NLU(222)로 제공된다. NLU(222)에 도착한 후에, 활성화 파이프라인(224)을 통해 수신된 활성화 함수를 특정하는 데이터가 출력 활성화에 인가되고, 출력 활성화가 내로우 메모리(Narrow memory)(210)에 기록된다. 일부 구현 예에서, 출력 활성화 버스(218)는 적어도 하나의 파이프라인된 시프트 레지스터(REG)(236)를 포함하고, 텐서 연산의 제2 부분을 완료하는 것은 출력 활성화를 내로우 메모리(210)로 시프트시키기 위해 활성화 버스(218)의 시프트 레지스터(236)를 사용하는 것을 포함한다.
단일 연산 타일(200)에 대해, 예를 들어 2개의 다차원 데이터 어레이의 점곱 연산과 관련하여, MAC 어레이(214)는 강력한(robust) 단일 명령어 다중 데이터(SIMD) 기능을 제공한다. SIMD는 일반적으로 모든 병렬 유닛(다중 MAC 오퍼레이터(215))이 (심층 루프 네스트에 기초하여) 동일한 명령어를 공유하지만, 각각의 MAC 오퍼레이터(operator)(215)는 상이한 데이터 요소에 대해 명령어를 실행한다는 것을 의미한다. 하나의 기본 예에서, 한 사이클에 어레이[6,8,10,12]를 얻기 위해 요소별로 어레이[1,2,3,4]와 [5,6,7,8]를 가산하는 것은 일반적으로 각 요소에 대해 연산을 실행하기 위해 4개의 연산 유닛을 요구할 것이다. SIMD를 사용함으로써, 4개의 유닛은 동일한 명령어(예를 들어, "가산")를 공유하고 병렬로 연산을 수행할 수 있다. 명령어가 공유되므로 명령어 대역폭 및 명령어 메모리에 대한 요구사항이 줄어들어 효율성이 높아진다. 따라서, 시스템(100) 및 연산 타일(200)은 종래의 방법에 비해 텐서 연산에서 향상된 가속도 및 병렬성을 제공한다.
하나의 예에서, 이하에서 보다 상세하게 설명되는 바와 같이, 단일 명령어는 다수의 MAC 어레이(214)에 의한 소비를 위해 제어기(102)에 의해 다수의 컴퓨팅 타일(200)(도 1의 타일 세트(112, 114) 참조)에 제공될 수 있다. 일반적으로, 신경망 계층은 다수의 출력 뉴런을 포함할 수 있고, 출력 뉴런은 출력 뉴런의 서브세트와 연관된 텐서 연산이 타일 세트(112, 114)의 특정 타일에 할당될 수 있도록 분할될 수 있다. 타일 세트(112, 114)의 각각의 타일은 소정의 계층에 대한 뉴런의 상이한 그룹에 관한 관련 텐서 연산을 수행할 수 있다. 따라서, 연산 타일(200)은 다음과 같은 적어도 두 가지 형태의 병렬 처리를 제공할 수 있으며, 1) 하나의 형태는 타일 세트(112, 114)의 다수의 타일 사이에서 출력 활성화(출력 뉴런의 서브세트에 대응함)를 분할하는 것을 포함하며; 그리고 2) 다른 형태는 타일 세트들(112, 114)의 타일들 사이의 분할에 기초하여 출력 뉴런들의 다수의 서브 세트들의 동시 연산(단일 명령어로)을 포함한다.
도 3은 8개의 뎁스(depth)를 각각 트랙킹하는 4개의 텐서를 포함하는 예시적인 TTU(ensor Traversal Unit) 구조(300)를 도시한다. TTU(300)는 일반적으로 카운터 텐서(counters tensor)(302), 스트라이드(stride) 텐서(304), 초기화(init) 텐서(306) 및 한계(limit) 텐서(308)를 포함한다. TTU(300)는 또한 가산기 뱅크(310) 및 텐서 어드레스 인덱스(index)(312)를 포함한다. 상기 설명한 바와 같이, 텐서는 다차원적인 기하학적 객체이고, 텐서의 요소에 접근하기 위해서는 각 차원의 인덱스가 제공되어야 한다. 텐서가 내로우 메모리(210) 및 와이드 메모리(212)에 저장되기 때문에, 텐서 인덱스의 세트는 메모리 어드레스의 세트로 변환되어야 한다. 일부 구현 예에서, 인덱스의 메모리 어드레스로의 변환은 메모리 어드레스를 텐서 어드레스 인덱스(312)를 통해 인덱스와 반사 어드레스의 선형 조합으로 만듦으로써 이루어진다.
제어 스레드 당 TTU가 있으며, 연산 타일(200)의 명령어 유형(TensorOP 및 DMAOp)마다 제어 스레드가 있다. 따라서, 전술한 바와 같이, 연산 타일(200)에 2개의 TTU 세트(1) TensorOp TTU(226); 및 2) DMAOp TTU(228))가 있다. 다양한 구현 예에서, TensorOp 제어부(206)는 특정 텐서 연산의 시작시에 TTU(300)가 TensorOp TTU 카운터(302), 한계(308) 및 스트라이드 값(304)을 로드하게 하고, 명령어가 폐기되기 전에 레지스터 값을 변경하지 않을 것이다. 2개의 TTU 각각은 연산 타일(200) 내의 다음 메모리 어드레스 포트에 대한 어드레스를 생성할 필요가 있을 것이며, 다음 메모리 어드레스 포트는 1) 와이드 메모리(212) 어드레스(주소) 포트 및 2) 4개의 어드레스 포트로서 제공되는 4개의 독립적으로 중재된 뱅크를 갖는 내로우 메모리(210)를 포함한다.
전술한 바와 같이, 일부 구현 예에서, 내로우 메모리(210)는 각각의 메모리 사이클에 대해 어떤 제어 장치(예를 들어, TensorOp 제어부(206) 또는 DMAOp 제어부(208))가 내로우 메모리(210)의 공유 메모리 리소스에 액세스하도록 허용될지를 결정하기 위해 공유 메모리 시스템에서 통상적으로 사용되는 메모리 아비터를 포함할 수 있다. 일 예시에서, 다른 명령어 유형(TensorOp 및 DMAOp)은 중재가 필요한 메모리 액세스를 요청하는 독립적인 제어 스레드이다. 특정 제어 스레드가 텐서 요소를 메모리에 커밋(commit)할 때, 제어 스레드는 메모리에 커밋된 텐서 참조(reference)의 카운터(302)를 증가시킨다.
일 예시에서, TensorOP 제어부(206)가 텐서의 특정 요소에 액세스하기 위한 명령어를 실행할 때, TTU(300)는 텐서의 특정 요소의 어드레스를 결정할 수 있어서, 제어부(206)는 특정 요소의 활성화 값을 나타내는 데이터를 판독하기 위해 내로우 메모리(210)와 같은 스토리지(저장소)를 액세스할 수 있다. 일부 구현 예에서, 프로그램은 네스트 루프(nested loop)를 포함할 수 있고, 제어부(206)는 네스트 루프와 관련된 현재 인덱스 변수 값에 따라 상기 네스트 루프 내의 2차원 어레이 변수의 요소에 액세스하는 명령어를 실행할 수 있다.
TTU(300)는 동시에 주어진 텐서(들)에 대해 최대 X개의 TTU 로우(row)에 대한 트래버스 상태(traversal state)를 유지할 수 있다. TTU(300)에 동시에 상주하는 각 텐서는 전용 하드웨어 텐서 제어 디스크립터(descriptor)를 차지한다. 하드웨어 제어 디스크립터는 로우 차원당 최대 X 개의 TTU 카운터를 갖는 텐서를 지원하는 한계 레지스터(308), 스트라이드(304) 및 로우(row) 위치당 최대 X 개의 TTU 카운터로 구성할 수 있다. 일부 구현 예에서, 로우 수와 로우 당 카운터 수는 다를 수 있다.
소정의 위치 레지스터의 경우, 최종 메모리 어드레스는 위치 레지스터를 함께 추가하는 것을 포함하는 가산 동작으로부터 계산된다. 기본 어드레스는 카운터(302)에 통합된다. 동일한 메모리에 있는 텐서 참조에 대해 하나 이상의 가산기가 공유된다. 일 구현예에서, 사이클의 소정의 포트에는 단일 로드/저장소만 있을 수 있기 때문에, 동일한 내로우 또는 와이드 메모리에 있는 여러 텐서 참조가 소정의 사이클에서 카운터를 증가시키지 않도록 하는 루프 네스트 제어(oop nest control)의 함수가 될 것이다.
오프셋 값들의 결정을 포함하는 메모리 액세스 어드레스 값들을 연산하기 위한 레지스터들의 사용은 2016년 2월 3일자로 출원된 "Matrix Processing Apparatus"라는 제목의 미국 특허 출원 번호 15/014,265에 더 상세히 기술되어 있으며, 그 전체 내용은 여기에 전체적으로 참조로 포함된다.
예를 들어, 소프트웨어 알고리즘이 N 차원 텐서를 처리할 때, 네스트 루프가 사용될 수 있으며, 여기서 각 루프는 N 차원 텐서의 각 차원을 트래버스하는 역할을 한다. 다차원 텐서는 행렬 또는 다차원 행렬들일 수 있다. N 차원 텐서의 각 차원은 하나 이상의 요소를 포함할 수 있으며, 각 요소는 각각의 데이터 값을 저장할 수 있다. 예를 들어, 텐서는 프로그램에서 변수일 수 있으며, 여기서 변수는 3차원을 가질 수 있다. 제1 차원은 300개의 요소 길이를 가질 수 있으며, 제2 차원은 천 개의 요소 길이를 가질 수 있으며, 제3 차원은 20개의 요소 길이를 가질 수 있다.
네스트 루프에서 텐서를 트래버스하는 것은 요소의 해당 데이터 값을 로드하거나 저장하기 위해 요소의 메모리 어드레스(주소) 값을 연산해야 한다. 예를 들어, "for-loop"는 네스트 루프이며, 여기서 3개의 루프 인덱스 변수에 의해 트랙킹된 3개의 루프는 3차원 텐서를 통해 트래버스하도록 네스트될 수 있다. 일부 경우에, 프로세서는 외부 루프 인덱스 변수로 내부 루프의 루프 바운드를 설정하는 것과 같이 루프 바운드 조건을 실행해야 할 수 있다. 예를 들어, 네스트 루프의 가장 안쪽 루프(inner-most loop)를 종료할지 여부를 결정할 때, 상기 프로그램은 가장 안쪽 루프의 루프 인덱스 변수의 현재 값을 네스트 루프의 가장 바깥쪽 루프(outer-most loop)의 루프 인덱스 변수의 현재 값과 비교할 수 있다.
일반적으로, 연산 타일의 프로세싱 유닛이 텐서의 특정 요소에 액세스하기 위한 명령어를 실행할 때, 텐서 트래버스 유닛은 프로세싱(처리) 유닛이 저장 매체(메모리)에 액세스하여 특정 요소의 값을 나타내는 데이터를 판독하도록 텐서의 특정 요소의 어드레스를 결정한다. 예를 들어, 프로그램은 네스트 루프(nested loop)를 포함할 수 있고, 프로세싱 유닛은 네스트 루프와 연관된 현재 인덱스 변수 값에 따라 네스트 루프 내의 2차원 어레이 변수의 요소에 액세스하기 위한 명령어를 실행할 수 있다. 네스트 루프와 관련된 현재 인덱스 변수 값에 따라, 텐서 트래버스 유닛은 2차원 어레이 변수의 제1 요소로부터의 오프셋을 나타내는 오프셋 값을 결정할 수 있다. 그 후, 프로세싱 유닛은 오프셋 값을 사용하여 메모리로부터 2차원 어레이 변수의 특정 요소에 액세스할 수 있다.
다음은 특수화된 TTU(300)를 인스턴스화하는 데 사용할 수 있는 템플릿 파라미터를 제공하며, 이는 1) TTU 로우의 X 개수; 2) 로우당 TTU 카운터의 X 개수; 3) TTU 가산기 유닛의 X 개수; 4) TTU 로우당 공유된 가산기 참조 표시; 그리고 5) 카운터당 X 카운터 크기[TTU][로우][뎁스] 표시를 포함한다. 모든 TTU 레지스터는 구조적으로 볼 수 있다. 연산을 위해 액세스될 필요가 있는 특정 텐서 요소(즉, 텐서 어드레스(312))의 어드레스는 카운터의 가산 결과이다. 증가 신호가 제어 스레드로부터 TTU의 로우로 발행될 때, TTU(300)는 단일 사이클 동작을 실행하고, 그 차원의 스트라이드(stride)(304)에 의해 가장 안쪽의 차원(innermost dimension)을 증가시키고 모든 뎁스를 통해 롤오버(rollover)를 전파한다.
일반적으로, TTU(300)는 하나 이상의 텐서와 관련된 상태를 결정한다. 상태는 루프 바운드 값, 현재 루프 인덱스 변수 값, 메모리 어드레스 값을 연산하기 위한 차원 곱셈 및/또는 브랜치 루프 바운드를 처리하기 위한 프로그램 카운터 값을 포함할 수 있다. TTU(300)는 하나 이상의 텐서 상태 요소 및 산술 로직 유닛을 포함할 수 있다. 각각의 텐서 상태 요소는 저장 요소, 예를 들어 레지스터 또는 임의의 다른 적절한 저장 회로일 수 있다. 일부 구현 예에서, 텐서 상태 요소는 미국 특허 출원번호 15/014,265호에서 보다 상세히 기술된 바와 같이 물리적으로 또는 논리적으로 상이한 그룹으로 배열될 수 있다.
도 4는 입력 버스(216)를 통해 하나 이상의 MAC (multiply accumulate) 오퍼레이터에 활성화(404)를 브로드캐스팅하는 내로우 메모리(210)를 포함하는 예시적인 아키텍처를 도시한다. 시프트 레지스터(404)는 시프트 기능을 제공하며, 활성화(404)가 MAC 셀(410) 내의 하나 이상의 MAC 오퍼레이터(215)에 의한 수신을 위해 입력 버스(216)에 한번에 하나씩 전송된다. 일반적으로, MAC 오퍼레이터(215)를 포함하는 MAC 셀(410)은 부분 합(partial sum)을 계산하는 연산 셀로서 정의될 수 있고, 일부 구현 예에서는 부분 합 데이터를 출력 버스(218)에 기록하도록 구성된다. 보여진 바와 같이, 셀들(410)은 하나 이상의 MAC 오퍼레이터(operator)로 구성될 수 있다. 일 실시 예에서, MAC 셀(410) 내의 MAC 오퍼레이터(215)의 수는 셀의 발행 폭(issue width)으로 참조된다. 예로서, 듀얼 발행(issue) 셀은 (와이드 메모리(212)로부터의) 두 개의 파라미터와 (내로우 메모리(210)로부터의) 두 개의 활성화 값의 곱을 계산하고, 현재 부분합과 두 개의 곱셈의 결과들 간의 합산을 수행할 수 있는 두 개의 MAC 오퍼레이터를 갖는 셀을 나타낸다.
상기 설명한 바와 같이, 입력 버스(216)는 선형 유닛(즉, MAC 어레이(214))의 MAC 오퍼레이터(215)에 입력 활성화를 제공하는 브로드캐스트(전송) 버스이다. 일부 구현 예에서, 동일한 입력은 모든 MAC 오퍼레이터(215)간에 공유된다. 입력 버스(216)의 폭은 브로드캐스트 입력을 소정의 MAC 어레이(214)에 대한 해당 수의 셀에 공급하기에 충분히 와이드(wide)해야만한다. 입력 버스(216)의 구조를 설명하기 위해 다음의 예를 고려한다. 선형 유닛 내의 셀들의 수가 4와 같고, 활성화 폭이 8비트와 같을 때, 입력 버스(216)는 매 사이클마다 최대 4개의 입력 활성화를 제공하도록 구성될 수 있다. 이 예에서, MAC 어레이(214) 내의 모든 셀은 브로드캐스트되는 4개의 활성화들 중 하나를 액세스할 뿐이다.
연산 타일(200)에 의해 수신된 명령어의 TensorOp 필드 설정에 기초하여, MAC 어레이(214)의 셀은 동일한 입력 활성화를 사용하여 연산을 수행할 필요가 있을 수 있다. 이는 MAC 어레이(214)의 셀 내에서 "Zout 파티셔닝(Zout partitioning)"으로 지칭될 수 있다. 마찬가지로, 셀 내의 "Zin 파티셔닝"은 MAC 어레이(214)의 셀이 연산을 수행하기 위해 상이한 활성화를 필요로 할 때 발생한다. 전자의 경우, 단일 입력 활성화는 4번 복제되고, 내로우 메모리(210)로부터 판독된 4개의 활성화는 4 사이클 동안 브로드캐스트된다. 후자의 경우, 내로우 메모리(210)의 판독이 매 사이클마다 요구된다. 전술한 예에서, TensorOp 제어부(206)는 제어기(102)로부터 수신된 명령어들의 실행에 기초하여 이 브로드캐스트 방법론을 조정한다.
도 5는 도 2 및 도 4의 내로우 메모리 유닛(210)에 출력 활성화를 제공하기 위한 출력 버스(218)를 포함하는 예시적인 아키텍처를 도시한다. 일반적으로, 연산 타일(200) 내의 MAC 어레이(214)의 모든 MAC 셀(215)은 상이한 출력 활성화를 연산한다. 그러나, 출력 피처(feature) 어레이와 관련하여, 출력 피처 뎁스가 연산 타일(200) 내의 MAC 셀(215)의 수보다 적은 경우, 셀은 하나 이상의 셀 그룹을 형성하도록 그룹화될 수 있다. 셀 그룹의 모든 MAC 셀(215)은 동일한 출력(즉, 출력 피처 맵)을 연산하지만, 각 셀은 Zin 차원의 서브 세트에 대응하는 출력의 서브 세트만을 연산한다. 결과적으로, MAC 셀(215)의 출력은 최종 선형 출력이 아닌 부분 합(partial sum)이다. 일부 구현 예에서, NLU(222)는 NLU 제어부(238)에 의해 NLU(222)에 제공된 제어 신호에 기초하여 이들 부분 합을 최종 선형 출력으로 합산할 것이다.
상기 설명한 바와 같이, 출력 버스(218)는 파이프라인된 시프트 레지스터이다. 다양한 구현 예에서, TensorOp 제어부(206) 및 텐서 연산 종료의 제1 부분이 부분 합이 기록될 필요가 있음을 (명령어를 실행함으로써) 나타낼 때, 출력 버스(218)에 제공되는 부분 합의 병렬 로드(parallel load)가 존재할 것이다. 병렬 로드의 수는 연산 타일(200) 내의 MAC 셀의 수에 대응할 것이다. 그 다음, TensorOP 제어부(206)는 부분 합이 시프트 아웃(shifted out)되어 비선형 파이프라인을 통해 전송되게 할 것이다. 일부 구현 예에서, 타일 내의 모든 MAC 셀들이 실제로 연산을 수행하는데 이용되는 것은 아닌 상황이 있을 수 있다. 이러한 상황에서, 출력 버스로 시프트된 모든 부분 합이 유효하지는 않는다. 이 예에서, TensorOp 제어부(206)는 MAC 어레이(214)에 제어 신호를 제공하여 시프트 아웃되어야 하는 유효 셀들의 수를 나타낼 수 있다. 출력 버스(218)에 로딩된 병렬 로드 양은 여전히 연산 타일 내의 MAC 셀의 수와 일치하지만, 유효값만이 시프트 아웃되어 내로우 메모리(210)에 커밋된다.
도 6은 도 2의 신경망 연산 타일(200)을 사용하여 텐서 연산을 수행하기 위한 프로세스(600)의 예시적인 흐름도이다. 프로세스(600)는 블럭(602)에서 시작하고 연산 타일(200)의 내로우 메모리(210)는 입력 활성화 데이터 버스(216)에 활성화를 하나씩 전송(즉, 브로드캐스트)한다. 활성화 값은 내로우 메모리(210)에 저장된다. 내로우 메모리(210)는 입력량(input quantities)에 액세스하기 위한 특정 메모리 위치에 대한 어드레싱을 허용하는 정적 랜덤 액세스 메모리(SRAM) 뱅크의 집합일 수 있다. 내로우 메모리(210)로부터 판독된 활성화는 입력 활성화 버스(216)를 통해 다수의 MAC 오퍼레이터(215) 및 합 레지스터(220)를 포함하는 MAC 어레이(214)(즉, 선형 유닛)의 선형 셀로 전송된다. 프로세스(600)의 블록(604)에서, 연산 타일(200)의 MAC 오퍼레이터(215)는 각각 2개의 입력을 수신하며, 2개의 입력중 하나는 입력 활성화 버스(216)로부터 수신된 하나의 입력(활성화)이고; 2개의 입력중 다른 하나는 와이드 메모리(212)로부터 수신된 다른 입력(파라미터)이다. 따라서, 활성화는 각 MAC 오퍼레이터(215)의 입력들 중 하나를 공급하고, MAC 어레이(214)의 셀에서 각각의 MAC 오퍼레이터(215)는 와이드 메모리(212)로부터 그들의 제2 곱셈(multiplier) 입력을 얻는다.
프로세스(600)의 블록(606)에서, 연산 타일(200)의 MAC 어레이(214)는 메모리로부터 액세스된 데이터 어레이 구조의 요소에 기초하여 점곱 연산을 포함하는 텐서 연산을 수행한다. 와이드 메모리(212)는 선형 유닛의 폭(32비트)과 동일한 비트 폭을 갖는다. 따라서, 선형 유닛(LU, linear unit)은 벡터 메모리(즉, 와이드 메모리(212))로부터 데이터를 수신하는 SIMD 벡터 ALU(arithmetic logic unit) 유닛이다. 일부 구현 예에서, MAC 오퍼레이터(215)는 또한 와이드 메모리(212)로부터 어큐뮬레이터(accumulator) 입력(부분 합)을 또한 얻을 수 있다. 일부 구현 예에서, 2개의 상이한 피연산자(operand)(파라미터 및 부분 합)에 관한 판독(read) 및/또는 기록(write)을 위해 와이드 메모리(212) 포트에 대한 시간 공유가 있다. 일반적으로, 영역을 최적화하기 위해, 와이드 메모리(212)는 제한된 수의 포트를 가질 수 있다. 결과적으로, 동시에 와이드 메모리(212)로부터 피연산자(예를 들어, 파라미터)를 판독하고 동시에 피연산자(예를 들어 부분 합)를 와이드 메모리(212)에 기록할 필요가 있는 경우, 특정 피연산자와 관련된 파이프라인이 정지(stalled)될 수 있다.
블록(608)에서, 연산 타일(200)의 연산 셀(MAC 오퍼레이터(215) 및 합 레지스터(220)를 가짐)은 MAC/연산 셀에 의해 수행된 곱셈 연산에 기초하여 적어도 하나의 출력 활성화를 생성한다. MAC 셀 동작의 결과는 출력 메모리(218)에 전송되는 출력 활성화 또는 와이드 메모리에 다시 기록되는 부분 합을 포함한다. 블록(610)에서, 연산 타일(200)의 NLU(222)는 비선형 활성화 함수를 출력 활성화에 적용한 다음 그 활성화를 내로우 메모리(210)에 기록한다. 일부 구현 예에서, 출력 버스(218)는 시프트 레지스터이고, MAC 오퍼레이터(215)로부터의 결과/출력 활성화의 병렬 로드를 누적(accumulate)할 수 있지만, 비선형 함수 및 기록 연산을 동일한 타일의 내로우 메모리(210)에 적용하기 위해 한번에 하나씩 시프트한다.
본 명세서에서 설명된 요지 및 기능적 동작의 실시 예는 디지털 전자 회로, 유형적으로 구현된 컴퓨터 소프트웨어 또는 펌웨어, 컴퓨터 하드웨어로 구현될 수 있으며, 이 명세서 및 구조적 등가물에 개시된 구조 또는 이들 중 하나 이상의 조합을 포함한다. 본 명세서에서 설명된 본 발명의 실시 예는 하나 이상의 컴퓨터 프로그램, 즉 데이터 처리 장치에 의해 실행되거나 데이터 처리 장치의 동작을 제어하기 위한 유형적인 비-일시적인 프로그램 캐리어상에 인코딩된 컴퓨터 프로그램 명령어의 하나 이상의 모듈로서 구현될 수 있다. 선택적으로 또는 부가적으로, 프로그램 명령어는 데이터 처리 장치에 의한 실행을 위해 적절한 수신기 장치로의 송신을 위해 정보를 인코딩하기 위해 생성된, 인위적으로 생성된 전파된 신호, 예를 들어, 기계-생성 전기, 광학 또는 전자기 신호 상에 인코딩될 수 있다. 컴퓨터 저장 매체는 기계 판독 가능 저장 장치, 기계 판독 가능 저장 기판, 랜덤 또는 시리얼 액세스 메모리 장치, 또는 이들 중 하나 이상의 조합일 수 있다.
본 명세서에서 설명된 프로세스 및 로직 흐름은 입력 데이터를 오퍼레이팅하고 출력을 생성함으로써 기능을 수행하기 위해 하나 이상의 컴퓨터 프로그램을 실행하는 하나 이상의 프로그램 가능 컴퓨터에 의해 수행될 수 있다. 프로세스 및 로직 흐름은 또한 특수 목적 로직 회로에 의해 수행될 수 있고, 장치는 FPGA(field programmable gate array), ASIC(application specific integrated circuit) 또는 GPGPU(General purpose graphics processing unit)와 같은 특수 목적의 로직 회로에 의해 수행될 수 있다.
컴퓨터 프로그램의 실행에 적합한 컴퓨터는 예를 들어 범용 또는 특수 목적 마이크로프로세서 또는 둘 모두, 또는 임의의 다른 종류의 중앙 처리 장치를 기반으로 할 수 있다. 일반적으로, 중앙 처리 장치는 판독 전용 메모리 또는 랜덤 액세스 메모리 또는 둘 모두로부터 명령어 및 데이터를 수신할 것이다. 컴퓨터의 필수 구성 요소는 명령어를 수행하거나 실행하기 위한 중앙 처리 장치 및 명령어 및 데이터를 저장하기 위한 하나 이상의 메모리 장치이다. 일반적으로, 컴퓨터는 데이터를 저장하기 위한 하나 이상의 대용량 저장 장치(예를 들어, 자기, 광 자기 디스크 또는 광 디스크)로부터 데이터를 수신하거나 또는 그 이상의 대용량 저장 장치로 데이터를 전송하거나 둘 모두를 포함하거나 동작 가능하도록 결합될 것이다. 반면, 컴퓨터는 이러한 장치를 가질 필요는 없다.
컴퓨터 프로그램 명령어 및 데이터를 저장하기에 적합한 컴퓨터 판독 가능 매체는 예를 들어 EPROM, EEPROM 및 플래시 메모리 장치, 내부 하드 디스크 또는 이동식 디스크와 같은 자기 디스크와 같은 반도체 메모리 장치를 포함하는 모든 형태의 비휘발성 메모리, 매체 및 메모리 장치를 포함한다. 프로세서 및 메모리는 특수 목적 로직 회로에 의해 보충되거나 또는 그 안에 포함될 수 있다.
본 명세서는 많은 구현 세부 사항을 포함하지만, 이들은 임의의 발명 또는 청구되는 범위에 대한 제한으로 해석되어서는 안되며, 오히려 특정 발명의 특정 실시 예에 특정할 수 있는 특징에 대한 설명으로 해석되어야 한다. 별도의 실시 예와 관련하여 본 명세서에서 설명되는 특정 특징은 또한 단일 실시 예에서 조합하여 구현될 수 있다. 반대로, 단일 실시 예의 컨텍스트에서 설명된 다양한 특징은 또한 다수의 실시 예에서 개별적으로 또는 임의의 적합한 하위 조합으로 구현될 수 있다. 더욱이, 특징들은 특정 조합으로 작용하는 것으로 상기에서 설명될 수 있고, 심지어 처음에는 그러한 것으로서 주장될지라도, 청구된 조합으로부터의 하나 이상의 특징이 어떤 경우 조합으로부터 제거될 수 있고, 청구된 조합은 부분 조합 또는 서브 조합의 변형으로 유도될 수 있다.
유사하게, 동작들이 특정 순서로 도면들에 도시되어 있지만, 이는 바람직한 동작을 달성하기 위해 이러한 동작이 도시된 순서 또는 순차적인 순서로 수행되거나 도시된 모든 동작이 수행될 것을 요구하는 것으로 이해되어서는 안된다. 특정 상황에서 멀티태스킹 및 병렬 처리가 유리할 수 있다. 또한, 상술한 실시 예들에서 다양한 시스템 모듈들 및 컴포넌트들의 분리는 모든 실시 예들에서 그러한 분리를 요구하는 것으로 이해되어서는 안되며, 서술된 프로그램 컴포넌트들 및 시스템들은 일반적으로 단일 소프트웨어 제품에 함께 통합되거나 다중 소프트웨어 제품들로 패키징될 수 있다는 것을 이해해야 한다.
추가 구현예는 다음 예제에 요약되어 있다.
예 1: 텐서 연산을 가속화하기 위한 연산(컴퓨팅) 유닛으로서, 입력 활성화 또는 출력 활성화 중 적어도 하나를 저장하기 위한 제1 데이터 폭을 갖는 제1 메모리 뱅크; 연산을 수행하는데 사용되는 하나 이상의 파라미터를 저장하기 위해 상기 제1 데이터 폭보다 큰 제2 데이터 폭을 갖는 제2 메모리 뱅크; 상기 제2 메모리 뱅크로부터 파라미터를 수신하고 연산을 수행하는 적어도 하나의 MAC(multiply accumulate) 오퍼레이터를 포함하는 적어도 하나의 셀; 적어도 상기 제1 메모리 뱅크와 데이터 통신하는 제1 트래버스(traversal) 유닛을 포함하며, 상기 제1 트래버스 유닛은 상기 MAC 오퍼레이터에 의해 액세스 가능한 데이터 버스에 입력 활성화가 제공되도록 상기 제1 메모리 뱅크에 제어 신호를 제공하도록 구성되며; 상기 연산 유닛은 데이터 어레이의 적어도 하나의 요소와 관련된 하나 이상의 연산을 수행하고, 상기 하나 이상의 연산은 상기 MAC 오퍼레이터에 의해 수행되며, 상기 데이터 버스로부터 수신된 상기 입력 활성화 및 상기 제2 메모리 뱅크로부터 수신된 파라미터의 곱셈 연산을 부분적으로 포함한다.
예 2: 예 1의 연산 유닛에 있어서, 상기 연산 유닛은 복수의 루프를 포함하는 루프 네스트(loop nest)를 실행함으로써 상기 연산 중 하나 이상을 수행하고, 상기 루프 네스트의 구조는 데이터 어레이의 하나 이상의 차원을 트래버스하기 위해 상기 제1 트래버스 유닛에 의해 사용되는 각각의 루프를 포함한다.
예 3: 예 2의 연산 유닛에 있어서, 상기 하나 이상의 연산은 상기 제1 트래버스 유닛에 의해 제공되는 텐서 연산에 부분적으로 기초하여 수행되고, 상기 텐서 연산은 상기 데이터 어레이의 하나 이상의 요소에 액세스하기 위한 루프 네스트 구조를 포함한다.
예 4: 예 1 내지 3중 어느 하나의 연산 유닛은, 상기 연산 유닛의 외부에 있는 소스로부터 수신된 명령어에 기초하여 상기 제1 메모리 뱅크의 적어도 하나의 메모리 위치 및 상기 제2 메모리 뱅크의 적어도 하나의 메모리 위치에 액세스하도록 구성된 제2 트래버스 유닛을 더 포함한다.
예 5: 예 4의 연산 유닛에 있어서, 상기 제1 트래버스 유닛은 텐서 연산 트래버스 유닛이고, 상기 제2 트래버스 유닛은 직접 메모리 액세스 트래버스 유닛이며, 상기 데이터 어레이는 복수의 요소를 포함하는 텐서에 대응한다.
예 6: 예 1 내지 5중 하나의 연산 유닛에 있어서, 상기 연산 유닛은 비선형 유닛을 포함하고, 연산들의 제1 부분은 상기 곱셈 연산에 기초하여 하나 이상의 출력 활성화들을 생성하는 것을 포함하고, 상기 연산들의 제2 부분은 상기 비선형 유닛에 의해, 상기 하나 이상의 출력 활성화들에 비선형 함수를 적용하는 것을 포함한다.
예 7: 예 6의 연산 유닛에 있어서, 상기 연산 유닛에 의해 수행되는 상기 하나 이상의 연산들은 시프트 레지스터를 사용하여 상기 출력 활성화들을 상기 제1 메모리 뱅크로 시프트하는 것을 포함한다.
예 8: 예 1 내지 8중 하나의 연산 유닛은 연산 유닛의 외부로 연장되는 링 버스의 부분을 더 포함하고, 상기 링 버스는 상기 제1 메모리 뱅크와 다른 인접한 연산 유닛의 메모리 뱅크 사이 및 상기 제2 메모리 뱅크와 다른 인접한 연산 유닛의 메모리 뱅크 사이의 데이터 경로를 제공한다.
예 9: 예 1 내지 8중 하나의 연산 유닛에 있어서, 상기 제2 메모리 뱅크는 부분 합들 또는 하나 이상의 풀링 계층 입력들 중 적어도 하나를 저장하도록 구성된다.
예 10: 텐서 연산을 가속화하기 위한 컴퓨터로 구현되는 방법으로서,
제1 데이터 폭을 갖는 제1 메모리 뱅크에 의해, 제1 트래버스 유닛으로부터 제어 신호를 수신하는 상기 제1 메모리 뱅크에 응답하여 제1 입력 활성화를 전송하는 단계 -상기 제1 메모리 뱅크는 연산 유닛에 배치되고, 상기 제1 입력 활성화는 상기 연산 유닛의 적어도 셀에 의해 액세스 가능한 데이터 버스에 의해 제공됨-; 상기 적어도 하나의 셀에 의해, 상기 제1 데이터 폭보다 큰 제2 데이터 폭을 갖는 제2 메모리 뱅크로부터 하나 이상의 파라미터를 수신하는 단계 -상기 적어도 하나의 셀은 적어도 하나의 MAC(multiply accumulate) 오퍼레이터를 포함함 -; 그리고 상기 MAC 오퍼레이터에 의해, 데이터 어레이의 적어도 하나의 요소와 관련된 하나 이상의 연산들을 수행하는 단계를 포함하며, 상기 하나 이상의 연산들은 상기 데이터 버스로부터 액세스된 적어도 제1 입력 활성화 및 상기 제2 메모리 뱅크로부터 수신된 적어도 하나의 파라미터의 곱셈 연산을 부분적으로 포함한다.
예 11: 예 10의 컴퓨터로 구현되는 방법에 있어서, 상기 하나 이상의 연산들은 복수의 루프를 포함하는 루프 네스트를 실행하는 상기 연산 유닛에 부분적으로 기초하여 수행되며, 상기 루프 네스트의 구조는 상기 데이터 어레이의 하나 이상의 차원을 트래버스하기 위해 상기 제1 트래버스 유닛에 의해 사용되는 각각의 루프를 포함한다.
예 12: 예 11의 컴퓨터로 구현되는 방법은, 제1 트래버스 유닛에 의해, 데이터 어레이의 하나 이상의 요소에 액세스하기 위한 루프 네스트 구조를 포함하는 텐서 연산을 제공하는 단계를 더 포함한다.
예 13: 예 10 내지 12중 하나의 컴퓨터로 구현되는 방법에 있어서, 상기 제1 트래버스 유닛은 텐서 연산 트래버스 유닛이고, 상기 제2 트래버스 유닛은 직접 메모리 액세스 트래버스 유닛이며, 상기 데이터 어레이는 복수의 요소들을 포함하는 텐서에 대응한다.
예 14: 예 10 내지 예 13중 하나의 컴퓨터로 구현되는 방법은, 상기 곱셈 연산에 기초하여 적어도 하나의 출력 활성화를 생성함으로써 상기 하나 이상의 연산들의 제1 부분을 수행하는 단계를 더 포함한다.
예 15: 예 14의 컴퓨터로 구현되는 방법은, 비-선형 함수를 상기 하나 이상의 출력 활성화에 적용함으로써 상기 하나 이상의 연산들의 제2 부분을 수행하는 단계를 더 포함한다.
예 16: 하나 이상의 프로세서에 의해 실행 가능한 명령어를 포함하는 비 일시적 컴퓨터 판독 가능 저장 매체로서, 상기 명령어는 실행시에, 상기 하나 이상의 프로세서로 하여금 동작들을 수행하게 하며, 상기 동작들은, 제1 데이터 폭을 갖는 제1 메모리 뱅크에 의해, 제1 트래버스 유닛으로부터 제어 신호를 수신하는 상기 제1 메모리 뱅크에 응답하여 제1 입력 활성화를 전송하는 동작 -상기 제1 메모리 뱅크는 연산 유닛에 배치되고, 상기 제1 입력 활성화는 상기 연산 유닛의 적어도 셀에 의해 액세스 가능한 데이터 버스에 의해 제공됨-; 상기 적어도 하나의 셀에 의해, 상기 제1 데이터 폭보다 큰 제2 데이터 폭을 갖는 제2 메모리 뱅크로부터 하나 이상의 파라미터를 수신하는 동작 -상기 적어도 하나의 셀은 적어도 하나의 MAC(multiply accumulate) 오퍼레이터를 포함함 -; 그리고 상기 MAC 오퍼레이터에 의해, 데이터 어레이의 적어도 하나의 요소와 관련된 하나 이상의 연산들을 수행하는 동작을 포함하며, 상기 하나 이상의 연산들은 상기 데이터 버스로부터 액세스된 적어도 제1 입력 활성화 및 상기 제2 메모리 뱅크로부터 수신된 적어도 하나의 파라미터의 곱셈 연산을 부분적으로 포함한다.
예 17: 예 16의 비 일시적 컴퓨터 판독 가능 매체에 있어서, 상기 하나 이상의 연산들은 복수의 루프들을 포함하는 루프 네스트를 실행하는 상기 연산 유닛에 부분적으로 기초하여 수행되며, 상기 루프 네스트의 구조는 상기 데이터 어레이의 하나 이상의 차원을 트래버스하기 위해 상기 제1 트래버스 유닛에 의해 사용되는 각각의 루프들을 포함한다.
예 18: 예 17의 비 일시적 컴퓨터 판독 가능 매체는, 제1 트래버스 유닛에 의해, 데이터 어레이(배열)의 하나 이상의 요소에 액세스하기 위한 루프 네스트 구조를 포함하는 텐서 연산을 제공하는 동작을 더 포함한다.
예 19: 예 16 내지 예 18중 어느 하나의 비 일시적 컴퓨터 판독 가능 매체는, 상기 곱셈 연산에 기초하여 적어도 하나의 출력 활성화를 생성함으로써 상기 하나 이상의 연산들의 제1 부분을 수행하는 동작을 더 포함한다.
예 20: 예 19의 비 일시적 컴퓨터 판독 가능 매체는, 비-선형 함수를 상기 하나 이상의 출력 활성화에 적용함으로써 상기 하나 이상의 연산들의 제2 부분을 수행하는 동작을 더 포함한다.
본 발명의 특정 실시 예가 설명되었다. 다른 실시 예들은 다음의 청구항들의 범위 내에 있다. 예를 들어, 청구 범위에서 열거된 동작은 상이한 순서로 수행될 수 있으며 여전히 바람직한 결과를 달성한다. 하나의 예로서, 첨부된 도면에 도시된 프로세스는 바람직한 결과를 달성하기 위해 도시된 특정 순서 또는 순차적 순서를 반드시 필요로 하지는 않는다. 특정 구현예에서, 멀티태스킹 및 병렬 처리가 유리할 수 있다.

Claims (20)

  1. 텐서 연산들을 가속화하기 위한 연산 유닛으로서,
    입력 활성화들 또는 출력 활성화들 중 적어도 하나를 저장하기 위한 제1 데이터 폭을 갖는 제1 메모리 뱅크;
    연산들을 수행하는데 사용되는 하나 이상의 파라미터들을 저장하기 위해 상기 제1 데이터 폭보다 큰 제2 데이터 폭을 갖는 제2 메모리 뱅크;
    상기 제2 메모리 뱅크로부터 파라미터들을 수신하고 그리고 상기 연산들을 수행하는 적어도 하나의 MAC(multiply accumulate) 오퍼레이터를 포함하는 적어도 하나의 셀;
    적어도 상기 제1 메모리 뱅크와 데이터 통신하는 제1 트래버스(traversal) 유닛을 포함하며, 상기 제1 트래버스 유닛은 상기 MAC 오퍼레이터에 의해 액세스 가능한 데이터 버스에 입력 활성화가 제공되도록 상기 제1 메모리 뱅크에 제어 신호를 제공하도록 구성되며;
    상기 연산 유닛은 데이터 어레이의 적어도 하나의 요소와 관련된 하나 이상의 연산들을 수행하고, 상기 하나 이상의 연산들은 상기 MAC 오퍼레이터에 의해 수행되며, 상기 데이터 버스로부터 수신된 상기 입력 활성화 및 상기 제2 메모리 뱅크로부터 수신된 파라미터의 곱셈 연산을 부분적으로 포함하는 것을 특징으로 하는 텐서 연산들을 가속화하기 위한 연산 유닛.
  2. 제1항에 있어서,
    상기 연산 유닛은 복수의 루프들을 포함하는 루프 네스트(loop nest)를 실행함으로써 상기 연산들 중 하나 이상을 수행하고, 상기 루프 네스트의 구조는 데이터 어레이의 하나 이상의 차원들을 트래버스하기 위해 상기 제1 트래버스 유닛에 의해 사용되는 각각의 루프들을 포함하는 것을 특징으로 하는 텐서 연산들을 가속화하기 위한 연산 유닛.
  3. 제2항에 있어서,
    상기 하나 이상의 연산들은 상기 제1 트래버스 유닛에 의해 제공되는 텐서 연산에 부분적으로 기초하여 수행되고, 상기 텐서 연산은 상기 데이터 어레이의 하나 이상의 요소에 액세스하기 위한 루프 네스트 구조를 포함하는 것을 특징으로 하는 텐서 연산들을 가속화하기 위한 연산 유닛.
  4. 제1항에 있어서,
    상기 연산 유닛의 외부에 있는 소스로부터 수신된 명령어들에 기초하여 상기 제2 메모리 뱅크의 적어도 하나의 메모리 위치 및 상기 제1 메모리 뱅크의 적어도 하나의 메모리 위치에 액세스하도록 구성된 제2 트래버스 유닛을 더 포함하는 것을 특징으로 하는 텐서 연산들을 가속화하기 위한 연산 유닛.
  5. 제4항에 있어서,
    상기 제1 트래버스 유닛은 텐서 연산 트래버스 유닛이고, 상기 제2 트래버스 유닛은 직접 메모리 액세스 트래버스 유닛이며, 상기 데이터 어레이는 복수의 요소들을 포함하는 텐서에 대응하는 것을 특징으로 하는 텐서 연산들을 가속화하기 위한 연산 유닛.
  6. 제1항에 있어서,
    상기 연산 유닛은 비-선형 유닛을 포함하고, 연산들의 제1 부분은 상기 곱셈 연산에 기초하여 하나 이상의 출력 활성화들을 생성하는 것을 포함하고, 상기 연산들의 제2 부분은 상기 비-선형 유닛에 의해, 상기 하나 이상의 출력 활성화들에 비-선형 함수를 적용하는 것을 포함하는 것을 특징으로 하는 텐서 연산들을 가속화하기 위한 연산 유닛.
  7. 제6항에 있어서,
    상기 연산 유닛에 의해 수행되는 상기 하나 이상의 연산들은 시프트 레지스터를 사용하여 상기 출력 활성화들을 상기 제1 메모리 뱅크로 시프트하는 것을 포함하는 것을 특징으로 하는 텐서 연산들을 가속화하기 위한 연산 유닛.
  8. 제1항에 있어서, 상기 연산 유닛은,
    연산 유닛의 외부로 연장되는 링 버스의 부분을 더 포함하고, 상기 링 버스는 상기 제1 메모리 뱅크와 다른 인접한 연산 유닛의 메모리 뱅크 사이 그리고 상기 제2 메모리 뱅크와 다른 인접한 연산 유닛의 메모리 뱅크 사이의 데이터 경로를 제공하는 것을 특징으로 하는 텐서 연산들을 가속화하기 위한 연산 유닛.
  9. 제1항에 있어서, 상기 제2 메모리 뱅크는 부분 합들 또는 하나 이상의 풀링 계층 입력들 중 적어도 하나를 저장하도록 구성되는 것을 특징으로 하는 텐서 연산들을 가속화하기 위한 연산 유닛.
  10. 텐서 연산들을 가속화하기 위한 컴퓨터로 구현되는 방법으로서,
    제1 데이터 폭을 갖는 제1 메모리 뱅크에 의해, 제1 트래버스 유닛으로부터 제어 신호를 수신하는 상기 제1 메모리 뱅크에 응답하여 제1 입력 활성화를 전송하는 단계 -상기 제1 메모리 뱅크는 연산 유닛에 배치되고, 상기 제1 입력 활성화는 상기 연산 유닛의 적어도 하나의 셀에 의해 액세스 가능한 데이터 버스에 의해 제공됨-;
    상기 적어도 하나의 셀에 의해, 상기 제1 데이터 폭보다 큰 제2 데이터 폭을 갖는 제2 메모리 뱅크로부터 하나 이상의 파라미터들을 수신하는 단계 -상기 적어도 하나의 셀은 적어도 하나의 MAC(multiply accumulate) 오퍼레이터를 포함함 -; 그리고
    상기 MAC 오퍼레이터에 의해, 데이터 어레이의 적어도 하나의 요소와 관련된 하나 이상의 연산들을 수행하는 단계를 포함하며, 상기 하나 이상의 연산들은 상기 데이터 버스로부터 액세스된 적어도 제1 입력 활성화 및 상기 제2 메모리 뱅크로부터 수신된 적어도 하나의 파라미터의 곱셈 연산을 부분적으로 포함하는 것을 특징으로 하는 텐서 연산들을 가속화하기 위한 컴퓨터로 구현되는 방법.
  11. 제10항에 있어서,
    상기 하나 이상의 연산들은 복수의 루프들을 포함하는 루프 네스트(loop nest)를 실행하는 상기 연산 유닛에 부분적으로 기초하여 수행되며, 상기 루프 네스트의 구조는 상기 제1 트래버스 유닛이 상기 데이터 어레이의 하나 이상의 차원들을 트래버스하는 방식을 나타내는 것을 특징으로 하는 텐서 연산들을 가속화하기 위한 컴퓨터로 구현되는 방법.
  12. 제11항에 있어서, 상기 컴퓨터로 구현되는 방법은,
    제1 트래버스 유닛에 의해, 데이터 어레이의 하나 이상의 요소들에 액세스하기 위한 루프 네스트 구조를 포함하는 텐서 연산을 제공하는 단계를 더 포함하는 것을 특징으로 하는 텐서 연산들을 가속화하기 위한 컴퓨터로 구현되는 방법.
  13. 제10항에 있어서,
    상기 제1 트래버스 유닛은 텐서 연산 트래버스 유닛이고, 상기 제2 트래버스 유닛은 직접 메모리 액세스 트래버스 유닛이며, 상기 데이터 어레이는 복수의 요소들을 포함하는 텐서에 대응하는 것을 특징으로 하는 텐서 연산들을 가속화하기 위한 컴퓨터로 구현되는 방법.
  14. 제10항에 있어서, 상기 컴퓨터로 구현되는 방법은, 상기 곱셈 연산에 기초하여 적어도 하나의 출력 활성화를 생성함으로써 상기 하나 이상의 연산들의 제1 부분을 수행하는 단계를 더 포함하는 것을 특징으로 하는 텐서 연산들을 가속화하기 위한 컴퓨터로 구현되는 방법.
  15. 제10항에 있어서, 상기 컴퓨터로 구현되는 방법은, 비-선형 함수를 상기 하나 이상의 출력 활성화들에 적용함으로써 상기 하나 이상의 연산들의 제2 부분을 수행하는 단계를 더 포함하는 것을 특징으로 하는 텐서 연산들을 가속화하기 위한 컴퓨터로 구현되는 방법.
  16. 하나 이상의 프로세서들에 의해 실행 가능한 명령어들을 포함하는 비 일시적 컴퓨터 판독 가능 저장 매체로서, 상기 명령어들은 실행시에, 상기 하나 이상의 프로세서들로 하여금 동작들을 수행하게 하며, 상기 동작들은,
    제1 데이터 폭을 갖는 제1 메모리 뱅크에 의해, 제1 트래버스 유닛으로부터 제어 신호를 수신하는 상기 제1 메모리 뱅크에 응답하여 제1 입력 활성화를 전송하는 동작 -상기 제1 메모리 뱅크는 연산 유닛에 배치되고, 상기 제1 입력 활성화는 상기 연산 유닛의 적어도 셀에 의해 액세스 가능한 데이터 버스에 의해 제공됨-;
    상기 적어도 하나의 셀에 의해, 상기 제1 데이터 폭보다 큰 제2 데이터 폭을 갖는 제2 메모리 뱅크로부터 하나 이상의 파라미터들을 수신하는 동작 -상기 적어도 하나의 셀은 적어도 하나의 MAC(multiply accumulate) 오퍼레이터를 포함함 -; 그리고
    상기 MAC 오퍼레이터에 의해, 데이터 어레이의 적어도 하나의 요소와 관련된 하나 이상의 연산들을 수행하는 동작을 포함하며, 상기 하나 이상의 연산들은 상기 데이터 버스로부터 액세스된 적어도 제1 입력 활성화 및 상기 제2 메모리 뱅크로부터 수신된 적어도 하나의 파라미터의 곱셈 연산을 부분적으로 포함하는 것을 특징으로 하는 비 일시적 컴퓨터 판독 가능 저장 매체.
  17. 제16항에 있어서, 상기 하나 이상의 연산들은 복수의 루프들을 포함하는 루프 네스트를 실행하는 상기 연산 유닛에 부분적으로 기초하여 수행되며, 상기 루프 네스트의 구조는 상기 제1 트래버스 유닛이 상기 데이터 어레이의 하나 이상의 차원을 트래버스하는 방식을 나타내는 것을 특징으로 하는 비 일시적 컴퓨터 판독 가능 저장 매체.
  18. 제17항에 있어서, 상기 비 일시적 컴퓨터 판독 가능 매체는, 상기 제1 트래버스 유닛에 의해, 데이터 어레이의 하나 이상의 요소들에 액세스하기 위한 루프 네스트 구조를 포함하는 텐서 연산을 제공하는 것을 더 포함하는 것을 특징으로 하는 비 일시적 컴퓨터 판독 가능 저장 매체.
  19. 제16항에 있어서, 상기 비 일시적 컴퓨터 판독 가능 매체는, 상기 곱셈 연산에 기초하여 적어도 하나의 출력 활성화를 생성함으로써 상기 하나 이상의 연산들의 제1 부분을 수행하는 것을 더 포함하는 것을 특징으로 하는 비 일시적 컴퓨터 판독 가능 저장 매체.
  20. 제19항에 있어서, 상기 비 일시적 컴퓨터 판독 가능 매체는, 비-선형 함수를 상기 하나 이상의 출력 활성화들에 적용함으로써 상기 하나 이상의 연산들의 제2 부분을 수행하는 것을 더 포함하는 것을 특징으로 하는 비 일시적 컴퓨터 판독 가능 저장 매체.
KR1020197014238A 2016-10-27 2017-08-15 신경망 연산 타일 KR102317668B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020217033780A KR102387334B1 (ko) 2016-10-27 2017-08-15 신경망 연산 타일

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/335,769 US10175980B2 (en) 2016-10-27 2016-10-27 Neural network compute tile
US15/335,769 2016-10-27
PCT/US2017/046963 WO2018080617A1 (en) 2016-10-27 2017-08-15 Neural network compute tile

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020217033780A Division KR102387334B1 (ko) 2016-10-27 2017-08-15 신경망 연산 타일

Publications (2)

Publication Number Publication Date
KR20190066058A true KR20190066058A (ko) 2019-06-12
KR102317668B1 KR102317668B1 (ko) 2021-10-26

Family

ID=59296600

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020197014238A KR102317668B1 (ko) 2016-10-27 2017-08-15 신경망 연산 타일
KR1020217033780A KR102387334B1 (ko) 2016-10-27 2017-08-15 신경망 연산 타일

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020217033780A KR102387334B1 (ko) 2016-10-27 2017-08-15 신경망 연산 타일

Country Status (10)

Country Link
US (4) US10175980B2 (ko)
EP (1) EP3533001A1 (ko)
JP (2) JP6995851B2 (ko)
KR (2) KR102317668B1 (ko)
CN (2) CN108009106A (ko)
DE (2) DE202017105708U1 (ko)
GB (1) GB2555936B (ko)
HK (1) HK1254698A1 (ko)
SG (1) SG11201903684RA (ko)
WO (1) WO2018080617A1 (ko)

Families Citing this family (105)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9875104B2 (en) 2016-02-03 2018-01-23 Google Llc Accessing data in multi-dimensional tensors
JP6898359B2 (ja) * 2016-06-14 2021-07-07 タータン エーアイ リミテッド ディープニューラルネットワーク用のアクセラレータ
US10360163B2 (en) * 2016-10-27 2019-07-23 Google Llc Exploiting input data sparsity in neural network compute units
US9959498B1 (en) * 2016-10-27 2018-05-01 Google Llc Neural network instruction set architecture
US10175980B2 (en) * 2016-10-27 2019-01-08 Google Llc Neural network compute tile
US10891534B2 (en) 2017-01-11 2021-01-12 International Business Machines Corporation Neural network reinforcement learning
US11132599B2 (en) * 2017-02-28 2021-09-28 Microsoft Technology Licensing, Llc Multi-function unit for programmable hardware nodes for neural network processing
US10365987B2 (en) 2017-03-29 2019-07-30 Google Llc Synchronous hardware event collection
US9875167B1 (en) 2017-03-29 2018-01-23 Google Inc. Distributed hardware tracing
US10817293B2 (en) * 2017-04-28 2020-10-27 Tenstorrent Inc. Processing core with metadata actuated conditional graph execution
CN108875956B (zh) * 2017-05-11 2019-09-10 广州异构智能科技有限公司 原生张量处理器
US11169732B2 (en) * 2017-05-18 2021-11-09 Kabushiki Kaisha Toshiba Computing device
US10248908B2 (en) 2017-06-19 2019-04-02 Google Llc Alternative loop limits for accessing data in multi-dimensional tensors
CN109284130B (zh) * 2017-07-20 2021-03-23 上海寒武纪信息科技有限公司 神经网络运算装置及方法
US10879904B1 (en) 2017-07-21 2020-12-29 X Development Llc Application specific integrated circuit accelerators
US10790828B1 (en) 2017-07-21 2020-09-29 X Development Llc Application specific integrated circuit accelerators
GB2568776B (en) 2017-08-11 2020-10-28 Google Llc Neural network accelerator with parameters resident on chip
US11360934B1 (en) 2017-09-15 2022-06-14 Groq, Inc. Tensor streaming processor architecture
US11868804B1 (en) * 2019-11-18 2024-01-09 Groq, Inc. Processor instruction dispatch configuration
US11243880B1 (en) 2017-09-15 2022-02-08 Groq, Inc. Processor architecture
US11114138B2 (en) 2017-09-15 2021-09-07 Groq, Inc. Data structures with multiple read ports
US11170307B1 (en) 2017-09-21 2021-11-09 Groq, Inc. Predictive model compiler for generating a statically scheduled binary with known resource constraints
CN111149090B (zh) * 2017-09-21 2023-12-01 华为技术有限公司 多线程脉动阵列
US11694066B2 (en) 2017-10-17 2023-07-04 Xilinx, Inc. Machine learning runtime library for neural network acceleration
US11620490B2 (en) * 2017-10-17 2023-04-04 Xilinx, Inc. Multi-layer neural network processing by a neural network accelerator using host communicated merged weights and a package of per-layer instructions
US11222256B2 (en) 2017-10-17 2022-01-11 Xilinx, Inc. Neural network processing system having multiple processors and a neural network accelerator
GB2568086B (en) 2017-11-03 2020-05-27 Imagination Tech Ltd Hardware implementation of convolution layer of deep neutral network
US10936942B2 (en) * 2017-11-21 2021-03-02 Google Llc Apparatus and mechanism for processing neural network tasks using a single chip package with multiple identical dies
CN117762234A (zh) 2017-11-21 2024-03-26 谷歌有限责任公司 具有机器学习功能的低功率环境计算系统
US20190179635A1 (en) * 2017-12-11 2019-06-13 Futurewei Technologies, Inc. Method and apparatus for tensor and convolution operations
US10747631B2 (en) * 2018-01-19 2020-08-18 DinoplusAI Holdings Limited Mission-critical AI processor with record and replay support
SG11202007532TA (en) * 2018-02-16 2020-09-29 Governing Council Univ Toronto Neural network accelerator
US10908879B2 (en) 2018-03-02 2021-02-02 Neuchips Corporation Fast vector multiplication and accumulation circuit
US11614941B2 (en) 2018-03-30 2023-03-28 Qualcomm Incorporated System and method for decoupling operations to accelerate processing of loop structures
US10657442B2 (en) * 2018-04-19 2020-05-19 International Business Machines Corporation Deep learning accelerator architecture with chunking GEMM
US11250326B1 (en) 2018-04-20 2022-02-15 Perceive Corporation Splitting neural network filters for implementation by neural network inference circuit
US11468145B1 (en) 2018-04-20 2022-10-11 Perceive Corporation Storage of input values within core of neural network inference circuit
US10977338B1 (en) 2018-04-20 2021-04-13 Perceive Corporation Reduced-area circuit for dot product computation
US11568227B1 (en) 2018-04-20 2023-01-31 Perceive Corporation Neural network inference circuit read controller with multiple operational modes
US20190325295A1 (en) * 2018-04-20 2019-10-24 International Business Machines Corporation Time, space, and energy efficient neural inference via parallelism and on-chip memory
US11783167B1 (en) 2018-04-20 2023-10-10 Perceive Corporation Data transfer for non-dot product computations on neural network inference circuit
US11556762B2 (en) * 2018-04-21 2023-01-17 Microsoft Technology Licensing, Llc Neural network processor based on application specific synthesis specialization parameters
US20190332925A1 (en) * 2018-04-30 2019-10-31 International Business Machines Corporation Neural hardware accelerator for parallel and distributed tensor computations
US20190392287A1 (en) * 2018-06-22 2019-12-26 Samsung Electronics Co., Ltd. Neural processor
US11663461B2 (en) 2018-07-05 2023-05-30 International Business Machines Corporation Instruction distribution in an array of neural network cores
US20200019836A1 (en) * 2018-07-12 2020-01-16 International Business Machines Corporation Hierarchical parallelism in a network of distributed neural network cores
CN110796244B (zh) * 2018-08-01 2022-11-08 上海天数智芯半导体有限公司 用于人工智能设备的核心计算单元处理器及加速处理方法
CN109117949A (zh) * 2018-08-01 2019-01-01 南京天数智芯科技有限公司 用于人工智能设备的灵活数据流处理器和处理方法
US10817042B2 (en) * 2018-09-27 2020-10-27 Intel Corporation Power savings for neural network architecture with zero activations during inference
US10834024B2 (en) * 2018-09-28 2020-11-10 International Business Machines Corporation Selective multicast delivery on a bus-based interconnect
US20210382691A1 (en) * 2018-10-15 2021-12-09 The Board Of Trustees Of The University Of Illinois In-Memory Near-Data Approximate Acceleration
KR102637733B1 (ko) 2018-10-31 2024-02-19 삼성전자주식회사 뉴럴 네트워크 프로세서 및 그것의 컨볼루션 연산 방법
US11537687B2 (en) 2018-11-19 2022-12-27 Groq, Inc. Spatial locality transform of matrices
US11361050B2 (en) 2018-11-20 2022-06-14 Hewlett Packard Enterprise Development Lp Assigning dependent matrix-vector multiplication operations to consecutive crossbars of a dot product engine
US11263011B2 (en) 2018-11-28 2022-03-01 International Business Machines Corporation Compound instruction set architecture for a neural inference chip
JP7189000B2 (ja) * 2018-12-12 2022-12-13 日立Astemo株式会社 情報処理装置、車載制御装置、車両制御システム
US20200202198A1 (en) * 2018-12-21 2020-06-25 Waymo Llc Neural network processor
US11144282B2 (en) * 2019-01-16 2021-10-12 Mediatek Inc. Mathematical accelerator for artificial intelligence applications
US11347297B1 (en) 2019-01-23 2022-05-31 Perceive Corporation Neural network inference circuit employing dynamic memory sleep
WO2020163171A1 (en) * 2019-02-07 2020-08-13 quadric.io, Inc. Systems and methods for implementing a random access augmented machine perception and dense algorithm integrated circuit
US11023379B2 (en) 2019-02-13 2021-06-01 Google Llc Low-power cached ambient computing
US11748599B2 (en) * 2019-02-21 2023-09-05 Texas Instruments Incorporated Super-tiling in neural network processing to enable analytics at lower memory speed
CN111782133A (zh) * 2019-04-04 2020-10-16 安徽寒武纪信息科技有限公司 数据处理方法及装置以及相关产品
US11176493B2 (en) * 2019-04-29 2021-11-16 Google Llc Virtualizing external memory as local to a machine learning accelerator
US11868901B1 (en) 2019-05-21 2024-01-09 Percieve Corporation Compiler for optimizing memory allocations within cores
JP7278150B2 (ja) 2019-05-23 2023-05-19 キヤノン株式会社 画像処理装置、撮像装置、画像処理方法
US20210026686A1 (en) * 2019-07-22 2021-01-28 Advanced Micro Devices, Inc. Chiplet-integrated machine learning accelerators
GB2586279B (en) 2019-08-16 2022-11-23 Siemens Ind Software Inc Routing messages in a integrated circuit chip device
GB2586277B (en) * 2019-08-16 2022-11-23 Siemens Ind Software Inc Broadcasting event messages in a system on chip
GB2586278B (en) 2019-08-16 2022-11-23 Siemens Ind Software Inc Addressing mechanism for a system on chip
EP4004730A1 (en) * 2019-10-07 2022-06-01 Google LLC Redistributing tensor elements between machine learning computing units
US11327690B2 (en) 2019-11-13 2022-05-10 Google Llc Enhanced input of machine-learning accelerator activations
CN112990421B (zh) * 2019-12-02 2023-09-05 杭州海康威视数字技术股份有限公司 优化深度学习网络的运行过程的方法、装置及存储介质
KR20210071471A (ko) 2019-12-06 2021-06-16 삼성전자주식회사 뉴럴 네트워크의 행렬 곱셈 연산을 수행하는 장치 및 방법
EP3999937A1 (en) 2019-12-17 2022-05-25 Google LLC Low-power vision sensing
KR20210077352A (ko) * 2019-12-17 2021-06-25 에스케이하이닉스 주식회사 데이터 처리 시스템 및 이를 위한 가속 장치
WO2021127174A1 (en) 2019-12-18 2021-06-24 Google Llc Machine learning based privacy processing
US20230119126A1 (en) * 2019-12-19 2023-04-20 Google Llc Processing sequential inputs using neural network accelerators
KR20210085461A (ko) 2019-12-30 2021-07-08 삼성전자주식회사 프로세싱 장치 및 프로세싱 장치에서 부동 소수점 연산을 처리하는 방법
US11537323B2 (en) * 2020-01-07 2022-12-27 SK Hynix Inc. Processing-in-memory (PIM) device
DE102020201182A1 (de) * 2020-01-31 2021-08-05 Robert Bosch Gesellschaft mit beschränkter Haftung Hardwarebeschleunigte Berechnung von Faltungen
US11630991B2 (en) 2020-02-04 2023-04-18 Apple Inc. Broadcasting mode of planar engine for neural processor
US11226816B2 (en) 2020-02-12 2022-01-18 Samsung Electronics Co., Ltd. Systems and methods for data placement for in-memory-compute
US11281554B2 (en) 2020-03-17 2022-03-22 Samsung Electronics Co., Ltd. System and method for in-memory computation
US11928176B2 (en) * 2020-07-30 2024-03-12 Arm Limited Time domain unrolling sparse matrix multiplication system and method
US11954580B2 (en) 2020-09-16 2024-04-09 Meta Platforms, Inc. Spatial tiling of compute arrays with shared control
US20220114440A1 (en) * 2020-10-14 2022-04-14 Google Llc Queue Allocation in Machine Learning Accelerators
US11704562B1 (en) 2020-11-04 2023-07-18 Meta Platforms, Inc. Architecture for virtual instructions
US11709783B1 (en) 2020-11-11 2023-07-25 Meta Platforms, Inc. Tensor data distribution using grid direct-memory access (DMA) controller
US20220188492A1 (en) * 2020-12-10 2022-06-16 Memryx Incorporated Chiplet based artificial intelligence accelerators and configuration methods
US11922306B2 (en) 2020-12-28 2024-03-05 Meta Platforms, Inc. Tensor controller architecture
US11790611B2 (en) 2020-12-30 2023-10-17 Meta Platforms, Inc. Visual editor for designing augmented-reality effects that utilize voice recognition
CN112596684B (zh) 2021-03-08 2021-06-22 成都启英泰伦科技有限公司 一种用于语音深度神经网络运算的数据存储方法
US20220405557A1 (en) * 2021-06-10 2022-12-22 Samsung Electronics Co., Ltd. Sram-sharing for reconfigurable neural processing units
US11669331B2 (en) 2021-06-17 2023-06-06 International Business Machines Corporation Neural network processing assist instruction
US11269632B1 (en) 2021-06-17 2022-03-08 International Business Machines Corporation Data conversion to/from selected data type with implied rounding mode
US11797270B2 (en) 2021-06-17 2023-10-24 International Business Machines Corporation Single function to perform multiple operations with distinct operation parameter validation
US11675592B2 (en) 2021-06-17 2023-06-13 International Business Machines Corporation Instruction to query for model-dependent information
US11693692B2 (en) 2021-06-17 2023-07-04 International Business Machines Corporation Program event recording storage alteration processing for a neural network accelerator instruction
US11734013B2 (en) 2021-06-17 2023-08-22 International Business Machines Corporation Exception summary for invalid values detected during instruction execution
US11694733B2 (en) 2021-08-19 2023-07-04 Apple Inc. Acceleration of in-memory-compute arrays
US11494321B1 (en) * 2021-09-30 2022-11-08 Amazon Technologies, Inc. State buffer memloc reshaping
KR102395743B1 (ko) * 2021-11-09 2022-05-09 오픈엣지테크놀로지 주식회사 1차원 어레이 풀링 방법 및 이를 위한 장치
CN115599442B (zh) * 2022-12-14 2023-03-10 成都登临科技有限公司 一种ai芯片、电子设备及张量处理方法
CN117093509B (zh) * 2023-10-18 2024-01-26 上海为旌科技有限公司 一种基于贪婪算法的片上内存地址分配方法和系统

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03131965A (ja) * 1989-10-10 1991-06-05 Hnc Inc ニューラルネットワーク用二次元収縮アレイ及びその方法
US5742741A (en) * 1996-07-18 1998-04-21 Industrial Technology Research Institute Reconfigurable neural network
US20110145447A1 (en) * 2009-12-14 2011-06-16 Maxeler Technologies Ltd. Method of transferring data, a method of processing data, an accelerator, a computer system and a computer program
JP2013037488A (ja) * 2011-08-05 2013-02-21 Mega Chips Corp 画像認識装置

Family Cites Families (70)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3754128A (en) 1971-08-31 1973-08-21 M Corinthios High speed signal processor for vector transformation
JPS4874139A (ko) 1971-12-29 1973-10-05
JPS5364439A (en) 1976-11-20 1978-06-08 Agency Of Ind Science & Technol Linear coversion system
JPS58134357A (ja) 1982-02-03 1983-08-10 Hitachi Ltd ベクトルプロセッサ
EP0156648B1 (en) 1984-03-29 1992-09-30 Kabushiki Kaisha Toshiba Convolution arithmetic circuit for digital signal processing
US5267185A (en) 1989-04-14 1993-11-30 Sharp Kabushiki Kaisha Apparatus for calculating matrices
JPH03167664A (ja) 1989-11-28 1991-07-19 Nec Corp マトリクス演算回路
JP3210319B2 (ja) * 1990-03-01 2001-09-17 株式会社東芝 ニューロチップおよびそのチップを用いたニューロコンピュータ
JPH05501317A (ja) 1990-05-30 1993-03-11 アダプティブ・ソリューションズ・インコーポレーテッド 仮想ゼロ値を用いるニューラル・ネットワーク
WO1991019267A1 (en) 1990-06-06 1991-12-12 Hughes Aircraft Company Neural network processor
JP3251947B2 (ja) 1991-03-27 2002-01-28 株式会社日立国際電気 自動利得制御回路
JP3318753B2 (ja) 1991-12-05 2002-08-26 ソニー株式会社 積和演算装置および積和演算方法
AU658066B2 (en) 1992-09-10 1995-03-30 Deere & Company Neural network based control system
JPH06139218A (ja) * 1992-10-30 1994-05-20 Hitachi Ltd ディジタル集積回路を用いて神経回路網を完全に並列にシミュレートするための方法及び装置
JPH076146A (ja) * 1993-06-18 1995-01-10 Fujitsu Ltd 並列データ処理システム
US6067536A (en) 1996-05-30 2000-05-23 Matsushita Electric Industrial Co., Ltd. Neural network for voice and pattern recognition
DE69609613D1 (de) 1996-10-01 2000-09-07 Finmeccanica Spa Programmierter Neuronalmodul
US5905757A (en) 1996-10-04 1999-05-18 Motorola, Inc. Filter co-processor
JPH117432A (ja) * 1997-06-16 1999-01-12 Hitachi Ltd 情報処理装置及び半導体装置
US6243734B1 (en) * 1998-10-30 2001-06-05 Intel Corporation Computer product and method for sparse matrices
JP2001117900A (ja) 1999-10-19 2001-04-27 Fuji Xerox Co Ltd ニューラルネットワーク演算装置
US20020044695A1 (en) 2000-05-05 2002-04-18 Bostrom Alistair K. Method for wavelet-based compression of video images
JP2003244190A (ja) 2002-02-19 2003-08-29 Matsushita Electric Ind Co Ltd データフロー制御スイッチ用プロセッサ及びデータフロー制御スイッチ
US7016529B2 (en) 2002-03-15 2006-03-21 Microsoft Corporation System and method facilitating pattern recognition
US7493498B1 (en) 2002-03-27 2009-02-17 Advanced Micro Devices, Inc. Input/output permission bitmaps for compartmentalized security
US20070124565A1 (en) * 2003-06-18 2007-05-31 Ambric, Inc. Reconfigurable processing array having hierarchical communication network
US7426501B2 (en) 2003-07-18 2008-09-16 Knowntech, Llc Nanotechnology neural network methods and systems
US7818729B1 (en) 2003-09-15 2010-10-19 Thomas Plum Automated safe secure techniques for eliminating undefined behavior in computer software
US7693299B2 (en) 2004-01-13 2010-04-06 New York University Method, system, storage medium, and data structure for image recognition using multilinear independent component analysis
GB2436377B (en) 2006-03-23 2011-02-23 Cambridge Display Tech Ltd Data processing hardware
CN101441441B (zh) 2007-11-21 2010-06-30 新乡市起重机厂有限公司 起重机智能防摇控制系统的设计方法
JP4513865B2 (ja) 2008-01-25 2010-07-28 セイコーエプソン株式会社 並列演算装置および並列演算方法
WO2009141789A1 (en) 2008-05-21 2009-11-26 Nxp B.V. A data handling system comprising memory banks and data rearrangement
US8321652B2 (en) 2008-08-01 2012-11-27 Infineon Technologies Ag Process and method for logical-to-physical address mapping using a volatile memory device in solid state disks
JP2010039625A (ja) * 2008-08-01 2010-02-18 Renesas Technology Corp 並列演算装置
JP5376920B2 (ja) 2008-12-04 2013-12-25 キヤノン株式会社 コンボリューション演算回路、階層的コンボリューション演算回路及び物体認識装置
EP2290563B1 (en) 2009-08-28 2017-12-13 Accenture Global Services Limited Accessing content in a network
US8595467B2 (en) 2009-12-29 2013-11-26 International Business Machines Corporation Floating point collect and operate
US8457767B2 (en) 2010-12-31 2013-06-04 Brad Radl System and method for real-time industrial process modeling
US8977629B2 (en) * 2011-05-24 2015-03-10 Ebay Inc. Image-based popularity prediction
US8812414B2 (en) 2011-05-31 2014-08-19 International Business Machines Corporation Low-power event-driven neural computing architecture in neural networks
US8909576B2 (en) 2011-09-16 2014-12-09 International Business Machines Corporation Neuromorphic event-driven neural computing architecture in a scalable neural network
US9201828B2 (en) * 2012-10-23 2015-12-01 Analog Devices, Inc. Memory interconnect network architecture for vector processor
US9153230B2 (en) 2012-10-23 2015-10-06 Google Inc. Mobile speech recognition hardware accelerator
WO2014105057A1 (en) * 2012-12-28 2014-07-03 Intel Corporation Instruction to reduce elements in a vector register with strided access pattern
US9811116B2 (en) * 2013-05-24 2017-11-07 Qualcomm Incorporated Utilization and configuration of wireless docking environments
US20150071020A1 (en) * 2013-09-06 2015-03-12 Sony Corporation Memory device comprising tiles with shared read and write circuits
US20160026912A1 (en) 2014-07-22 2016-01-28 Intel Corporation Weight-shifting mechanism for convolutional neural networks
ES2880316T3 (es) 2014-08-29 2021-11-24 Google Llc Procesamiento de imágenes mediante redes neuronales profundas
CN104463209B (zh) 2014-12-08 2017-05-24 福建坤华仪自动化仪器仪表有限公司 一种基于bp神经网络的pcb板上数字代码识别方法
US10223635B2 (en) 2015-01-22 2019-03-05 Qualcomm Incorporated Model compression and fine-tuning
US10013652B2 (en) 2015-04-29 2018-07-03 Nuance Communications, Inc. Fast deep neural network feature transformation via optimized memory bandwidth utilization
US10262259B2 (en) 2015-05-08 2019-04-16 Qualcomm Incorporated Bit width selection for fixed point neural networks
US10489703B2 (en) * 2015-05-20 2019-11-26 Nec Corporation Memory efficiency for convolutional neural networks operating on graphics processing units
US9747546B2 (en) * 2015-05-21 2017-08-29 Google Inc. Neural network processor
US10275394B2 (en) 2015-10-08 2019-04-30 Via Alliance Semiconductor Co., Ltd. Processor with architectural neural network execution unit
US9875104B2 (en) 2016-02-03 2018-01-23 Google Llc Accessing data in multi-dimensional tensors
US10552119B2 (en) 2016-04-29 2020-02-04 Intel Corporation Dynamic management of numerical representation in a distributed matrix processor architecture
CN106023065B (zh) 2016-05-13 2019-02-19 中国矿业大学 一种基于深度卷积神经网络的张量型高光谱图像光谱-空间降维方法
CN106127297B (zh) 2016-06-02 2019-07-12 中国科学院自动化研究所 基于张量分解的深度卷积神经网络的加速与压缩方法
US9959498B1 (en) 2016-10-27 2018-05-01 Google Llc Neural network instruction set architecture
US10360163B2 (en) 2016-10-27 2019-07-23 Google Llc Exploiting input data sparsity in neural network compute units
US10175980B2 (en) 2016-10-27 2019-01-08 Google Llc Neural network compute tile
US10733505B2 (en) * 2016-11-10 2020-08-04 Google Llc Performing kernel striding in hardware
CN106529511B (zh) 2016-12-13 2019-12-10 北京旷视科技有限公司 图像结构化方法及装置
US10037490B2 (en) * 2016-12-13 2018-07-31 Google Llc Performing average pooling in hardware
US20180189675A1 (en) * 2016-12-31 2018-07-05 Intel Corporation Hardware accelerator architecture and template for web-scale k-means clustering
US11164071B2 (en) * 2017-04-18 2021-11-02 Samsung Electronics Co., Ltd. Method and apparatus for reducing computational complexity of convolutional neural networks
US10621489B2 (en) * 2018-03-30 2020-04-14 International Business Machines Corporation Massively parallel neural inference computing elements
US10572409B1 (en) * 2018-05-10 2020-02-25 Xilinx, Inc. Sparse matrix processing circuitry

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03131965A (ja) * 1989-10-10 1991-06-05 Hnc Inc ニューラルネットワーク用二次元収縮アレイ及びその方法
US5742741A (en) * 1996-07-18 1998-04-21 Industrial Technology Research Institute Reconfigurable neural network
US20110145447A1 (en) * 2009-12-14 2011-06-16 Maxeler Technologies Ltd. Method of transferring data, a method of processing data, an accelerator, a computer system and a computer program
JP2013037488A (ja) * 2011-08-05 2013-02-21 Mega Chips Corp 画像認識装置

Also Published As

Publication number Publication date
GB201714815D0 (en) 2017-11-01
HK1254698A1 (zh) 2019-07-26
US11816480B2 (en) 2023-11-14
DE202017105708U1 (de) 2018-01-03
US20230004386A1 (en) 2023-01-05
KR102387334B1 (ko) 2022-04-15
KR102317668B1 (ko) 2021-10-26
JP7451483B2 (ja) 2024-03-18
CN207895435U (zh) 2018-09-21
GB2555936A (en) 2018-05-16
EP3533001A1 (en) 2019-09-04
US20180121196A1 (en) 2018-05-03
KR20210129270A (ko) 2021-10-27
WO2018080617A1 (en) 2018-05-03
DE102017121825A1 (de) 2018-05-03
US11422801B2 (en) 2022-08-23
SG11201903684RA (en) 2019-05-30
JP2022046552A (ja) 2022-03-23
US10175980B2 (en) 2019-01-08
CN108009106A (zh) 2018-05-08
JP2019537793A (ja) 2019-12-26
GB2555936B (en) 2019-01-30
JP6995851B2 (ja) 2022-01-17
US20190213005A1 (en) 2019-07-11
US9710265B1 (en) 2017-07-18

Similar Documents

Publication Publication Date Title
US11816480B2 (en) Neural network compute tile
KR102456464B1 (ko) 칩에 상주하는 파라미터를 갖는 신경망 가속기
US20220245453A1 (en) Redistributing tensor elements between machine learning computing units
US20230418677A1 (en) Preemption in a machine learning hardware accelerator
US20220414437A1 (en) Parameter caching for neural network accelerators
EP4320513A1 (en) Hierarchical compiling and execution in a machine learning hardware accelerator

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
A107 Divisional application of patent
GRNT Written decision to grant