KR20240060857A - 칩에 상주하는 파라미터를 갖는 신경망 가속기 - Google Patents

칩에 상주하는 파라미터를 갖는 신경망 가속기 Download PDF

Info

Publication number
KR20240060857A
KR20240060857A KR1020247013902A KR20247013902A KR20240060857A KR 20240060857 A KR20240060857 A KR 20240060857A KR 1020247013902 A KR1020247013902 A KR 1020247013902A KR 20247013902 A KR20247013902 A KR 20247013902A KR 20240060857 A KR20240060857 A KR 20240060857A
Authority
KR
South Korea
Prior art keywords
neural network
memory
tile
accelerator
tiles
Prior art date
Application number
KR1020247013902A
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 KR20240060857A publication Critical patent/KR20240060857A/ko

Links

Classifications

    • 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
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3893Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
    • G06F9/3895Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator for complex operations, e.g. multidimensional or interleaved address generators, macros
    • 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
    • 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/048Activation functions

Landscapes

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

Abstract

가속기의 일 실시예는, 컴퓨팅 유닛; 입력 활성화를 저장하기 위한 제1 메모리 뱅크 및 연산 수행에 사용되는 파라미터를 저장하기 위한 제2 메모리 뱅크를 포함하며, 제2 메모리 뱅크는 특정 레벨 이상의 처리량과 특정 레벨 이하의 지연시간을 허용하기에 충분한 양의 신경망 파라미터를 컴퓨팅 유닛에 저장하도록 구성된다. 컴퓨팅 유닛은 제2 메모리 뱅크로부터 파라미터를 수신하고 연산을 수행하는 적어도 하나의 MAC 오퍼레이터를 포함하는 적어도 하나의 셀을 포함한다. 컴퓨팅 유닛은 MAC 오퍼레이터에 의해 액세스 가능한 데이터 버스에 입력 활성화가 제공되도록 제어 신호를 제1 메모리 뱅크에 제공하는 제1 트래버스 유닛을 더 포함한다. 컴퓨팅 유닛은 데이터 어레이의 적어도 하나의 요소와 관련된 연산을 수행하며, 하나 이상의 연산은 MAC 오퍼레이터에 의해 수행된다.

Description

칩에 상주하는 파라미터를 갖는 신경망 가속기{NEURAL NETWORK ACCELERATOR WITH PARAMETERS RESIDENT ON CHIP}
본 명세서는 칩에 상주하는 파라미터를 갖는 신경망 가속기에 관한 것이다.
본 명세서는 일반적으로 DNN(Deep Neural Networks) 계층의 연산을 위한 신경망(NN) 컴퓨팅 타일에 관한 것이다.
일반적으로, 본 명세서에 기술된 요지의 하나의 혁신적인 양태는 신경망의 파라미터를 가속기에 저장하는 것으로 구현될 수 있다. 신경망은 작업 세트(working set), 즉 전체 계산에 필요한 총 저장 공간이 실제로 제한되어 있다는 점에서 일반적인 연산(계산) 워크로드에서 벗어난다. 이 작업 세트는 일반적으로 수십만에서 수십억에 이르는 파라미터의 수에 해당한다. 이 저장 용량은 기존 하드웨어 저장 기술과 호환된다.
이러한 사실에도 불구하고, 현재 가속기는 파라미터가 전달되는, 예를 들어, 파라미터가 칩에 영구적으로 상주하지 않는 파라미터에 대한 로컬 저장소를 포함한다. 오히려 파라미터는 각각의 새로운 추론에 대해 외부 메모리에서 스트리밍(stream)된다.
따라서 외부 메모리 대역폭은 모든 신경망(NN) 가속기의 주요 제한사항이다. 본 명세서에 기술된 실시 예는 파라미터에 대한 일시적인 로컬 스토리지를 파라미터에 대한 온칩 스토리지(on-chip storage)로 대체하며, 즉, 실시 예는 NN의 모든 파라미터를 가속기에 상주시키고 더 이상 외부 메모리로부터 스트리밍하지 않는다. 온칩 파라미터 저장은 NN 가속기의 성능 한계 극복하고; 성능 한계가 극복되었기 때문에 MAC(multiply accumulate)오파레이터의 수가 급증하고; 외부 메모리 액세스는 일반적으로 로컬 메모리 액세스보다 적어도 10배 이상의 에너지를 필요로 하기 때문에 저전력 신경망 가속기를 제공하는 장점을 포함한다.
특정 실시 예에서, 가속기는 컴퓨팅 유닛을 포함한다. 컴퓨팅 유닛은, 입력 활성화들(activations) 또는 출력 활성화들을 저장하기 위한 제1 메모리 뱅크; 연산 수행에 사용되는 신경망 파라미터들을 저장하는 제2 메모리 뱅크 -상기 제2 메모리 뱅크는 소정의 NN 모델 및 아키텍처에 대해 지정된 레벨 이상의 처리량과 함께 지정된 레벨 이하의 레이턴시(지연시간)(latency)를 허용하도록 충분한 양의 신경망 파라미터들을 컴퓨팅 유닛에 저장하도록 구성됨 -; 상기 제2 메모리 뱅크로부터 파라미터들을 수신하고 연산을 수행하는 적어도 하나의 MAC 오퍼레이터를 포함하는 적어도 하나의 셀; 적어도 상기 제1 메모리 뱅크와 데이터 통신하는 제1 트래버스(traversal) 유닛을 포함하며; 상기 제1 트래버스 유닛은 상기 MAC 오퍼레이터에 의해 액세스 가능한 데이터 버스에 입력 활성화가 제공되도록 제어 신호를 상기 제1 메모리 뱅크에 제공하도록 구성되며; 상기 가속기는 데이터 어레이의 적어도 하나의 요소(element)와 관련된 하나 이상의 연산을 수행하며; 하나 이상의 연산은 MAC 오퍼레이터에 의해 수행되고, 부분적으로 데이터 버스로부터 수신된 입력 활성화 및 제2 메모리 뱅크로부터 수신된 파라미터의 곱셈 연산을 포함한다. 파라미터들의 저장 공간이 모든 신경망 파라미터들을 보유하기에 충분한 경우, 가속기의 성능은 메모리 대역폭에 의해 결정되지 않는다. 이 경우 사이클마다 모든 MAC에 파라미터들을 공급할 수 있다.
본 명세서에 기술된 요지의 다른 혁신적인 양태는 텐서 연산을 가속시키기 위한 컴퓨터 구현 방법(컴퓨터로 구현되는 방법)으로 구현될 수 있다. 컴퓨터 구현 방법은, 제1 메모리 뱅크에 의해, 제어 신호를 수신하는 제1 메모리 뱅크에 응답하여 제1 입력 활성화를 전송하는 단계 -상기 제1 입력 활성화는 데이터 버스에 의해 전송됨 -; 적어도 하나의 MAC 오퍼레이터에 의해, 연산을 수행하는데 사용되는 신경망 파라미터들을 저장하기 위해 제2 메모리 뱅크로부터 하나 이상의 파라미터들을 수신하는 단계 -상기 제2 메모리 뱅크는 소정의 NN 모델 및 아키텍처에 대해 지정된 임계치 이상의 처리량 및 지정된 임계치 미만의 레이턴시를 허용하기 위해 컴퓨팅 유닛에 충분한 양의 신경망 파라미터들을 저장함 -; 그리고 상기 MAC 오퍼레이터에 의해, 데이터 어레이의 적어도 하나의 요소와 관련된 하나 이상의 연산을 수행하는 단계를 포함하며, 하나 이상의 연산은 데이터 버스로부터 액세스된 제1 입력 활성화 및 제2 메모리 뱅크로부터 수신된 적어도 하나의 파라미터의 곱셈 연산을 부분적으로 포함한다.
본 명세서에 기술된 요지의 다른 혁신적인 양태는 연산을 가속화하기 위한 방법으로 구현될 수 있다. 이 방법은, 실행 전에, 신경망 가중치 파라미터들을 신경망 가속기에 로드하는 단계; 그리고 실행 동안, 가속기 외부의 신경망 가중치 파라미터들에 실질적으로 액세스하지 않고 가속기로의 입력을 처리하는 단계를 포함한다. 본 발명은, 신경망 가중치 파라미터들의 수가 단일 가속기 다이에 피트(fit)하기에 너무 크면(too large), 신경망 가중치 파라미터들을 다수의 밀착(tightly) 연결된 가속기 다이들(accelerator dies)에 로딩하는 단계; 그리고 밀착 연결된 가속기 다이들 외부의 신경망 가중치 파라미터들에 액세스하지 않고 가속기 다이들로의 입력을 처리하는 단계를 더 포함한다.
본 명세서에서 설명된 요지는 다음의 장점들 중 하나 이상을 실현하기 위해 특정 실시 예들에서 구현될 수 있다. 레지스터를 사용하여 메모리 주소 값을 추적하면 프로그램이 하나의 명령어로 심층 네이트 루프(deeply nested loop)를 반복할 수 있다. 단일 컴퓨팅 타일에서, 내로우(narrow) 메모리 및 와이드(wide) 메모리 장치에서 액세스할 수 있는 텐서는 레지스터에서 검색된 메모리 주소값을 기반으로 트래버스된다(traversed). 메모리 주소 값은 텐서의 요소에 대응한다. 텐서 연산은 심층 루프 네이트 실행을 기반으로 개별 컴퓨팅 타일에서 발생한다. 연산은 여러 타일에 분산될 수 있다. 여러 컴퓨팅 타일에 걸쳐 다층 신경망에 대한 텐서 연산을 분배함으로써 연산 효율이 향상되고 가속화된다. 텐서가 트래버스될 수 있고, 텐서 연산은 적은 수의 명령어들로 수행될 수 있다.
본 명세서에 기술된 실시 예는 신경망(NN) 가속기 오퍼레이션 및 설계에 영향을 미친다. 실시 예는 낮은 레이턴시 및 높은 처리량의 조합인 신경망 가속기 설계의 주목할 만한 한계 중 하나에 대해 작동한다. 칩에 상주하는 파라미터들을 사용하면 높은 처리량과 소정의 NN 모델 및 아키텍처에서 레이턴시가 크게 줄어든다. 가속기는 높은 메모리 대역폭을 필요로하지 않으며 에너지가 줄어든다.
본 명세서에 기술된 바와 같이 타일 배열을 갖는 것은 컴파일 타입 지역성(locality)을 제공한다. 예를 들어, SRAM 옆에 완전히 연결된 모델을 배치하면 캐시 모델보다 내부 대역폭이 더 커진다. 본 명세서에 기술된 실시 예는 종래의 신경망 가속기보다 빠르게 오퍼레이팅한다. 특정 실시 예는 더 많은 오퍼레이터들을 가진다(오퍼레이터에게 공급하기 위해 가속기는 더 많은 내부 대역폭이 필요하다). 이 요구를 해결하기 위해 아키텍처는 메모리를 분배하고 파라미터들을 가속기로 가져온다.
본 명세서에 기술된 요지는 또한 다른 장점을 실현하기 위해 특정 실시 예에서 구현될 수 있다. 예를 들어, 좁은(내로우)(narrow) 저 대역폭 메모리와 높은 대역폭의 넓은(와이드) 메모리를 결합하는 메모리 계층 구조를 사용하면 매우 다른 차원과 지역성의 DNN 계층에 대해 MAC 오퍼레이터를 많이 활용할 수 있다. 좁은 저 대역폭 메모리는 다차원 어레이를 임의의 순서로 트래버스할 수 있는 어드레싱 유연성을 허용할 수 있다.
이 양태 및 다른 양태의 다른 구현 예는 컴퓨터 저장 장치에 인코딩된 방법의 동작을 수행하도록 구성된 시스템, 장치 및 컴퓨터 프로그램을 포함한다. 하나 이상의 컴퓨터로 구성된 시스템은 시스템으로 하여금 동작들을 수행하게 하는 오퍼레이션으로 시스템에 설치된 소프트웨어, 펌웨어, 하드웨어 또는 이들의 조합으로 구성될 수 있다. 하나 이상의 컴퓨터 프로그램은 데이터 처리 장치에 의해 실행될 때 장치로 하여금 동작을 수행하게 하는 명령어들을 가짐으로써 구성될 수 있다.
본 명세서에서 설명된 요지의 하나 이상의 구현의 세부사항은 첨부 도면 및 이하의 설명에서 설명된다. 본 요지의 다른 잠재적 특징, 양태 및 장점은 상세한 설명, 도면 및 청구 범위로부터 명백해질 것이다.
도 1은 예시적인 연산 시스템의 블록도이다.
도 2는 예시적인 신경망 연산 타일을 도시한다.
도 3은 예시적인 TTU(Tensor Traversal Unit) 구조를 도시한다.
도 4는 하나 이상의 MAC 오퍼레이터들에 입력 활성화를 제공하는 내로우(narrow) 메모리 유닛(NMU)을 포함하는 예시적인 아키텍처를 도시한다.
도 5는 도 2 및 도 4의 내로우 메모리 유닛에 출력 활성화를 제공하는 출력 버스를 포함하는 예시적인 아키텍처를 도시한다.
도 6은 도 2의 신경망 컴퓨팅 타일을 사용하여 텐서 연산을 수행하기 위한 프로세스의 예시적인 흐름도이다.
도 7은 연산 시스템의 대안적인 실시 예이다.
도 8은 신경망 컴퓨팅 타일의 대안적인 실시 예이다.
도 9는 신경망 가중치 파라미터를 신경망 가속기에 로드함으로써 연산을 가속화하기 위한 프로세스의 예시적인 흐름도이다.
다양한 도면에서 유사한 참조 번호 및 명칭은 유사한 요소를 나타낸다.
본 명세서에 기술된 요지는 연산을 가속화하기 위한 방법에 관한 것이다. 이 방법은 실행 전에 신경망 가중치 파라미터를 신경망 가속기에 로드하는 단계 및 실행하는 동안 실질적으로 가속기 외부의 신경망 가중치 파라미터에 액세스하지 않고 가속기로의 입력을 처리(프로세싱)하는 단계를 포함한다. 상기 방법은 신경망 가중치 파라미터의 수가 너무 커서 단일 가속기 다이에 맞지 않을 경우, 신경망 가중치 파라미터를 다수의 연결된(tightly connected) 가속기 다이에 로딩하는 단계; 그리고 상기 연결된 가속기 다이 외부의 신경망 가중치 파라미터에 액세스하지 않고 실질적으로 가속기 다이로의 입력을 처리하는 단계를 포함한다.
본 명세서에서 설명된 요지는 또한 신경망 계층의 기계 학습 추론 워크로드를 가속화하도록 구성된 다수의 컴퓨팅 유닛을 포함하는 하드웨어 컴퓨팅 시스템에 관한 것이다. 하드웨어 컴퓨팅 시스템의 각각의 컴퓨팅 유닛은 자체 포함되며 멀티-계층 신경망의 주어진 계층에 필요한 연산(계산)을 독립적으로 실행할 수 있다. 본 명세서는 일반적으로 특정 NN(neural network) 모델 및 아키텍처에 대해 지정된 레벨 이상의 처리량으로 지정된 레벨 이하의 지연시간(latency)을 허용하기 위해 칩에 상주하는 파라미터를 갖는 DNN(Deep Neural Networks) 계층의 연산을 위한 신경망 컴퓨팅 타일(Tile)과 관련이 있다.
추론을 연산(컴퓨팅)하기 위해 다중 계층을 갖는 신경망을 사용할 수 있다. 예를 들어, 입력이 주어지면 신경망은 입력에 대한 추론을 연산할 수 있다. 신경망은 신경망의 각 계층을 통해 입력을 처리하여 이 추론을 연계한다. 특히, 신경망의 계층은 각각 가중치 세트를 갖는다. 각 계층은 입력을 수신하고 출력을 생성하기 위해 계층의 가중치 세트에 따라 입력을 처리한다.
따라서, 수신된 입력으로부터 추론을 연산하기 위해, 신경망은 입력을 수신하여 추론을 생성하기 위해 각각의 신경망 계층을 통해 이를 처리하고, 하나의 신경망 계층으로부터의 출력은 다음 신경망 계층에 입력으로서 제공된다. 신경망 계층에 대한 데이터 입력, 예를 들어, 신경망으로의 입력 또는 시퀀스 내의 계층 아래의 계층의 출력 중 하나를 신경망 계층에 입력하는 것은 계층에 대한 활성화(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를 참조하여 이하에서보다 상세하게 설명될 것이다. 와이드 그리고 내로우 지정은 명세서 전반에 걸쳐 사용되며, 일반적으로 하나 이상의 메모리 유닛의 폭(비트/바이트)의 대략적인 크기를 나타낸다. 본 명세서에 사용된 바와 같이, "내로우(narrow)"는 각각 16비트 미만의 크기 또는 폭을 갖는 하나 이상의 메모리 유닛을 지칭할 수 있고, "와이드"는 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는 일반적으로 내로우 메모리(210) 및 와이드 메모리(212)에 상주하는 하나 이상의 텐서의 어레이 요소를 트래버스하기 위해 컴퓨팅 타일(200)에 의해 사용된다.
일부 구현 예에서, 연산 타일(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에 더 상세히 기술되어 있으며, 그 전체 내용은 여기에 전체적으로 참조로 포함된다.
다음은 특수화된 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)는 하나 이상의 텐서 상태 요소 및 산술 로직 유닛을 포함할 수 있다. 각각의 텐서 상태 요소는 저장 요소, 예를 들어 레지스터 또는 임의의 다른 적절한 저장 회로일 수 있다. 일부 구현 예에서, 텐서 상태 요소는 물리적으로 또는 논리적으로 상이한 그룹으로 배열될 수 있다.
도 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)에 로딩된 병렬 로드 양(parallel load quantities)은 여전히 연산 타일 내의 MAC 셀의 수와 일치하지만, 유효값만이 시프트 아웃되어 내로우 메모리(210)에 커밋된다.
도 6은 도 2의 컴퓨팅 타일(200)과 같은 신경망(NN) 컴퓨팅 타일을 사용하여 텐서 연산을 수행하기 위한 프로세스(600)의 예시적인 흐름도이다. 프로세스(600)는 소정의 NN 모델 및 아키텍처에 대해 지정된 레벨 이상의 처리량 및 지정된 레벨 이하의 레이턴시를 허용하기 위해 충분한 파라미터를 제2 메모리 온 칩(second memory on chip)에 로딩함으로써 블록(602)에서 시작한다. 처리량: 많은 요청/추론이 있을 때 달성되는 최대 성능이다. 레이턴시(지연시간)은 단일 요청을 연산하는 데 걸리는 최소 시간이다. 프로세스(600)는 블록(604)에서 계속되고, 컴퓨팅 타일(200)의 내로우(좁은) 메모리(210)는 활성화를 입력 활성화 데이터 버스(216)에 하나씩 전송(즉, 브로드캐스트)한다. 활성화 값은 좁은 메모리(210)에 저장된다. 좁은 메모리(210)는 입력량에 액세스하기 위해 특정 메모리 위치로 어드레싱하는 것을 허용하는 SRAM(static random access memory) 뱅크의 집합(collection)일 수 있다. 메모리(210)로부터 판독된 활성화는 입력 활성화 버스(216)를 통해 다수의 MAC 오퍼레이터(215) 및 합 레지스터(sum registers)(220)를 포함하는 MAC 어레이(214)의 선형 셀(즉, 선형 유닛)에 브로드캐스트된다. 프로세스(600)의 블록(606)에서, 컴퓨팅 타일(200)의 MAC 오퍼레이터(215)는 각각 2개의 입력을 수신하는 데, 하나는 입력 활성화 버스(216)로부터 수신되는 입력(활성화)이고; 다른 하나는 와이드 메모리(212)로부터 수신되는 입력(파라미터)이다. 따라서, 활성화는 각각의 MAC 오퍼레이터(215)의 입력들 중 하나를 공급하고 그리고 MAC 어레이(214)의 셀들 내의 각각의 MAC 오퍼레이터(215)는 와이드 메모리(212)로부터 제2 승산기(multiplier) 입력을 얻는다.
프로세스(600)의 블록(608)에서, 컴퓨팅 타일(200)의 MAC 어레이(214)는 메모리로부터 액세스된 데이터 어레이 구조의 요소(elements)에 기초하여 내적 연산을 포함하는 텐서 연산을 수행한다. 와이드 메모리(212)는 선형 유닛의 폭(예를 들어, 32비트)과 동일한 비트 폭을 가질 수 있다. 선형 유닛(LU)은 따라서 벡터 메모리(즉, 와이드 메모리(212))로부터 데이터를 수신하는 SIMD 벡터 ALU(arithmetic logic unit) 유닛이다. 일부 구현들에서, MAC 오퍼레이터들(215)은 또한 와이드 메모리(212)로부터 누산기(accumulator) 입력들(부분 합들)을 얻을 수 있다. 일부 구현들에서, 2개의 상이한 피연산자(operands)(파라미터 및 부분 합)에 관한 판독 및/또는 기록을 위한 넓은 메모리(212) 포트에 대한 시간 공유가 존재한다. 일반적으로, 영역을 최적화하기 위해, 넓은 메모리(212)는 제한된 수의 포트를 가질 수 있다. 결과적으로, 넓은 메모리(212)로부터 피연산자(예를 들어, 파라미터)를 판독하고 동시에 피연산자(예를 들어, 부분 합)를 넓은 메모리(212)에 기록할 필요가 있을 때, 특정 피연산자와 관련된 파이프라인 정지(stalled)될 수 있다.
블록(610)에서, 컴퓨팅 타일(200)의 컴퓨팅 셀(MAC 오퍼레이터(215) 및 합 레지스터(220)를 갖는)은 MAC/컴퓨팅 셀에 의해 수행된 곱셈 연산에 기초하여 적어도 하나의 출력 활성화를 생성한다. MAC 셀 오퍼레이션의 결과는 메모리에 다시 기록되는 부분 합(부분 합 산술 오퍼레이션 동안) 또는 출력 버스(218)로 전송되는 출력 활성화를 포함한다. 컴퓨팅 타일(200)의 NLU(222)는 비선형 활성화 함수를 출력 활성화에 적용하고 활성화를 좁은 메모리(210)에 기록할 수 있다. 일부 구현들에서, 출력 버스(218)는 시프트 레지스터이고, MAC 오퍼레이터(215)로부터 결과/출력 활성화의 병렬 로드(parallel load)를 축적하고, 기록 오퍼레이션 및 비선형 함수의 적용을 동일한 타일의 좁은 메모리(210)로 한 번에 하나씩 시프트시킬 수 있다.
본 명세서에 기술된 실시 예는 다음의 두 갈래의 관찰을 이용한다. 1) 대부분의 기존 신경망(NN) 가속기의 병목현상(bottleneck)은 파라미터라고도 하는 NN 가중치를 로드하는 데 필요한 메모리 대역폭이다. 2) 프로덕션 모델의 파라미터가 크지만(예: 수 KB에서 수 GB까지)(대부분의 모델에서 수 MB에서 수백 MB 사이의 범위에 있지만), 이 수치는 예를 들어, 타일들에 분산된 메모리를 사용하는 온칩 메모리를 포함하는 하드웨어로 구현된다.
모든 파라미터를 포함하기 위해 다이(die)에 큰 메모리(예: 캐시 또는 스크래치패드(scratchpad))를 추가하는 것만으로는 충분하지 않다. 메모리 대역폭 제한을 극복하는 목표는 아키텍처 성능을 확장하는 것이다. 즉, 오퍼레이터의 수(일반적으로 MAC)가 증가한다. 그러나 고성능을 달성하려면 매 주기마다 파라미터(매개 변수)를 이러한 오퍼레이터에게 공급할 수 있어야 한다. "성능"을 처리량뿐만 아니라 레이턴시로도 이해하는 것이 중요하며, 이는 많은 사용자-대면 애플리케이션의 경우에 해당한다.
다른 방식으로 말하면, 신경망(NN) 가속기에서 한 번에 한 계층씩 파라미터를 로드하는 것은 매우 비용이 많이 든다. 칩에 파라미터를 사전 로드할 수 있으면 런타임에 활성화하는 것만 로드하면 된다. 다시 말해서, 실시 예들은 대규모(large scale) 온칩 메모리를 포함한다.
본 명세서에 기술된 실시 예는 신경망(NN) 가속기 오퍼레이션 및 설계에 영향을 미친다. 실시 예는 낮은 레이턴시 및 높은 처리량의 조합인 신경망 가속기 설계의 주목할만한 한계 중 하나에 대해 작동한다. NN 가속기는 전체 신경망을 나타내는 것으로 고려한다. 입력에는 작은 이미지 또는 사운드와 같은 일부 데이터가 있다. NN 가속기는 계층을 차례로 실행한다. 성능 및 에너지 측면에서 비용이 많이 드는 것은 계층의 파라미터를 차례로 로드하는 것이다. NN 가속기(accelerator)는 계층의 파라미터를 로드하고 연산을 수행하며 계층의 출력을 유지한 후 다음 계층의 파라미터를 로드한다. 이 과정에서 대부분의 메모리 대역폭이 소비된다.
칩에 상주(resident)하는 파라미터를 사용하면 높은 처리량과 소정의 NN 모델 및 아키텍처에서 지연시간(latency)이 크게 줄어든다. 가속기는 몇 바이트의 사운드만 로드하면 가속기가 매우 빠르게 진행된다. 가속기는 높은 메모리 대역폭을 필요로하지 않으며 에너지가 줄어든다.
메모리가 메모리에서 CPU로 로드되는 "폰 노이만(Von Neumann)" 모델은 일반적인 아키텍처이다. 메모리가 다이의 한쪽 끝에 존재하고 다이의 다른 쪽 끝에 있는 연산 오퍼레이터는 많은 수의 오퍼레이터로 불가능하지는 않지만 실용적이지 않은 전형적인 폰 노이만과 같은 아키텍처이다(메모리(또는 메모리 뱅크)에서 오퍼레이터로 데이터를 라우팅하기 위해 수많은 와이어가 필요하기 때문이다), 대신에, 본 발명의 실시 예는 (도 2 및 8에 도시된 바와 같이) 타일 구조로 아키텍처를 배열하기 위해 NN 연산의 메모리 위치 특성을 활용하며, 여기서 메모리는 타일 전체에 분산된다.
NN은 크지(large)만 거대(huge)하지 않기 때문에 칩에서 하나 또는 몇 개의 NN의 모든 파라미터를 효과적으로 피트(fit)할 수 있는 포인트에 근접할 수 있다. NN 가속기는 독립적인 아키텍처로 이동한다. 타일 아키텍처가 주어지면 칩 내부의 메모리를 분할할 수 있다. 칩의 일 코너에 하나의 큰 SRAM을 갖는 대신에, 실시 예는 모든 타일에 SRAM(right SRAM)을 할당하고 온칩 대역폭 문제도 회피한다. 특정 실시 예에서, 각각의 타일 내의 넓은 메모리는 파라미터를 포함하고, 넓은 링(wide ring)(대략 넓은 메모리와 유사한 폭을 갖는)은 넓은 메모리를 높은 대역폭으로 공급한다. 본 명세서에서 설명된 실시 예는 아키텍처 변형을 고려한다. NN 계층 속성에 따라, 실시 예는 적어도 다음의 2개의 NN 아키텍처를 가질 수 있다.
완전히 연결된 계층으로 크게 구성된 신경망의 경우 계층 전체에서 파라미터의 재사용이 적다. 완전히 연결된 계층의 뉴런은 이전 계층의 모든 활성화에 완전히 연결된다. 파라미터가 재사용되지 않는 완전히 연결된 신경망을 고려한다(배치(batch) 처리(예: 실시간 애플리케이션)가 없는 경우 고려). 모든 파라미터가 넓은(와이드) 메모리에 포함되지 않은 경우, 파라미터는 링 버스를 통해 외부 메모리에서 페치(fetched)되어야 한다. 이 경우 전체 디자인의 성능이 외부 메모리 대역폭에 의해 제한된다. 모든 파라미터가 넓은 메모리에 상주하는 경우, 외부 메모리 액세스가 필요하지 않으며 모든 오퍼레이터에게 매 주기(사이클)마다 파라미터를 제공하여 최대 성능을 달성할 수 있다. 파라미터를 페치하기 위해 외부 메모리만을 사용하는 대신에, 본 명세서에서 설명된 실시 예는 파라미터를 와이드 메모리에 상주시킨다.
예를 들어, 완전히 연결된 계층들(layers)에서 50M 파라미터 (또는 단순성을 위해 50MB)가 있는 모델을 가정한다. 1GHz로 작동하는 16384개의 MAC들을 갖는 가속기를 가정한다. 모델의 입력이 16KB라고 가정한다. 모든 값은 현재 애플리케이션에 대해 적합하다. 최대 성능은 50 * 10 ^ 6 / (16384 * 10 ^ 9) = 3.05 * 10 ^ -6 초의 모델 실행에 해당한다. 즉, (50 * 10 ^ 6 + 16,384) / (3.05 * 10 ^ -6) = 16.40 TB / s의 메모리 대역폭에 해당한다. 비교 포인트로서, 일반적인 DRAM 칩은 약 10GB/s의 속도를 제공하고, 최신 고 대역폭 메모리(HBM)는 약 256GB/s를 제공한다.
컨벌루션 신경망은 한 타일에서 다른 타일로 파라미터를 전달한다. 파라미터가 뉴런에 걸쳐 재사용되는(활성화라고도 함) 컨벌루션 계층으로 구성된 신경망의 경우, 메모리 대역폭 요구량(requirements)은 높지 않지만 일반적으로 외부 메모리보다 높다. 링 대역폭은 링과 동일한 폭의 대형 온-다이(on-die) 메모리에 연결되어있는 경우 파라미터를 타일에 로드하기에 충분할 수 있다. 서로 다른 방식으로, 각 추론에 대해, 타일은 모델의 모든 파라미터에 액세스/로드해야 하며, 이는 모든 모델에 해당된다. 신경망에서 완전히 연결된 계층의 유일한 차이점은 각 파라미터는 한 번의 추론 동안 한 번만 사용된다는 것이며, 컨벌루션 계층의 경우 계층 내에서 파라미터가 여러 번 사용된다.
예를 들어, 컨벌루션 계층에 50M 파라미터가 있는 모델을 가정한다. 이러한 계층 중 일부는 매우 작고 다른 계층은 커질 수 있으므로 파라미터의 재사용은 다양하며, 모델 전체의 합리적인 평균은 파라미터 당 약 100회 재사용이다. 따라서 위와 동일한 추론을 사용하면 대역폭 요구량이 16.40 TB/s / 100~164 GB/s로 떨어진다. 여전히 비용 효율적인 DRAM에 대한 대역폭 요구량은 여전히 높다. 그러나 위의 아키텍처에서, 동일한 폭의 큰 메모리에 연결된 164 * 8 = 1312 비트 와이드 링은 타일을 적절한 속도로 서비스할 수 있다.
완전히 연결된 모델에서 계층들의 모든 파라미터를 포함할 만큼 메모리가 충분히 큰 제1 실시 예를 가정한다. 모든 타일이 하나의 계층에서 동시에 작동하려면 파라미터를 타일 전체에 분산시켜야 한다. 실시 예는 타일 전체에 각 계층의 출력 뉴런/활성화를 분할(partition)하고; 실행하는 동안, 각 타일은 계층의 서브 세트를 처리하고, 해당 부분 합을 연산하여 이를 이웃에 전달한다(즉, 부분 합은 링 주위(around the ring)를 회전하고, 완전 회전 후에, 타일은 최종 합을 생성한다).
제2 실시 예는, 타일이 동시에 동일한 파라미터를 사용하기 때문에, 모든 타일에서 (현재 사용되는) 파라미터의 동일한 서브 세트를 사전로딩/캐싱하는 것을 포함한다. 실행하는 동안, 부분 활성화 합계가 아닌 파라미터(서브세트)가 링 주위를 회전(rotate)한다.
타일들의 수는 스케일링 팩터(scaling factor)이다. 본 명세서에 기술된 실시 예를 사용함으로써 메모리 요구를 증가시키지 않으면서 지연시간 및 처리량을 개선함으로써 강력한 스케일링을 달성할 수 있다. 그러나 컴퓨팅 기능을 스케일링하기 위해 타일을 배치(batching)처리하면 메모리 요구량과 필요한 활성화 수가 증가한다. 기존 메모리 옵션보다 메모리 대역폭을 늘리지 않으면서 배치 타입 스케일링을 수행하기가 어렵다. 배치(Batching)에는 종종 실시간 애플리케이션이 필요하며 지연시간 및 처리량 요구량(throughput requirements)이 모두 포함된다.
캐시에 파라미터를 갖는 것은 타일 배열의 일부로서 넓은 메모리에 파라미터를 갖는 것과는 다르다는 점에 주목할 필요가 있다. 본 명세서에 기술된 바와 같이 타일 배열을 갖는 것은 컴파일 타입 지역성을 제공한다. 예를 들어 SRAM 옆에 완전히 연결된 모델을 배치하면 캐시 모델보다 내부 대역폭이 더 커진다.
본 명세서에 기술된 실시 예는 종래의 신경망 가속기보다 빠르게 오퍼레이팅한다. 특정 실시 예는 더 많은 오퍼레이터를 갖으며; 오퍼레이터에게 공급하기 위해 가속기는 더 많은 내부 대역폭이 필요하다. 이 요구를 해결하기 위해 아키텍처는 메모리를 분배하고 파라미터를 가속기로 가져온다.
가장 큰 현재 칩은 약 650 평방 밀리미터이다. 따라서, 칩에 가질 수 있는 SRAM의 양에는 제한이 있다. 실시 예는 3D 스태킹(stacking)을 포함하여 소정의 공간 제약에서 고밀도 메모리를 사용하는 것을 포함한다.
본 명세서에 기술된 실시 예는 추론(포스트 트레인(post trained)) 모드 및 학습(훈련) 모드 모두에 적용된다.
추가된 뉘앙스(nuance)로 또 다른 레벨의 계층이 있으며; 메모리 계층이 있으며; 일반적으로 레지스터 파일 계층도 있다. 파라미터가 레지스터에 로드된 다음 메모리 대역폭 확장을 달성하기 위해 레지스터가 재사용되며; 메모리뿐만 아니라 레지스터 파일에도 메모리 대역폭이 있다. 즉, 메모리에서 레지스터 파일로, 레지스터 파일에서 컴퓨팅으로의 배선이 줄어들어 추가 비용 절감이 있다. 본 명세서에서 설명된 실시 예들에서, 레지스터 파일과 관련된 배선 비용이 감소되고; 파라미터는 SRAM에서 직접 주소지정(addressing)으로 소비된다. 다시 말해, 메모리는 알루스(alus)에 직접 공급한다.
도 7은 심층 신경망(DNN)과 관련된 텐서 연산을 가속화하기 위한 컴퓨팅 시스템(700)의 대안적인 실시 예의 블록도를 도시한다. 시스템(700)은 일반적으로 제어기/언코어(uncore)(702), 메모리 인터페이스(708), 제1 타일 세트(712) 및 제2 타일 세트(714)를 포함하는 다수의 타일을 포함한다. 제어기(702)는 일반적으로 데이터 메모리(704), 명령(명령어) 메모리(706) 및 컴퓨터 판독 가능 저장 매체에 인코딩된 하나 이상의 명령을 실행하도록 구성된 적어도 하나의 프로세서를 포함한다. 명령어 메모리(706)는 제어기(702)의 하나 이상의 프로세서에 의해 실행 가능한 하나 이상의 기계 판독 가능 명령어를 저장할 수 있다. 데이터 메모리(704)는 시스템(700) 내에서 발생하는 연산에 관한 다양한 데이터를 저장하고 이어서 액세스하기 위한 임의의 다양한 데이터 저장 매체일 수 있다.
제어기(702)는 명령 메모리(706)에 저장된 명령을 포함하여 시스템(700) 내의 텐서 연산에 관한 하나 이상의 명령을 실행하도록 구성된다. 일부 구현들에서, 데이터 메모리(704) 및 명령 메모리(706)는 휘발성 메모리 유닛(들)이다. 일부 다른 구현들에서, 데이터 메모리(704) 및 명령 메모리(706)는 비휘발성 메모리 유닛 또는 유닛들이다. 데이터 메모리(704) 및 명령 메모리(706)는 플로피 디스크 장치, 하드 디스크 장치, 광 디스크 장치 또는 테이프 장치, 플래시 메모리 또는 다른 유사한 솔리드 스테이트 메모리 장치와 같은 다른 형태의 컴퓨터 판독 가능 매체이거나, 또는 SAN(Storage Area Network)의 장치 또는 기타 구성을 포함한 장치의 어레이일 수 있다. 다양한 구현에서, 제어기(702)는 또한 코어 관리자(core manager)(702)로 지칭되거나 지칭될 수 있다.
메모리 인터페이스(708)는 I/O 링크로부터 명령 및 데이터 파라미터를 수신하고 명령 및 파라미터를 제어기(702)에 제공한다. 일반적으로, 명령 버스를 통해 시스템(700)의 하나 이상의 장치에 명령이 제공될 수 있고 (제어기와 타일 사이의 명령 버스는 도시되지 않음), 파라미터는 링 버스(728)를 통해 시스템(700)의 하나 이상의 장치에 제공될 수 있다. 일부 구현들에서, 명령어들은 초기에 호스트 인터페이스(708)로부터 제어기(702)에 의해 수신되고 나중에 제어기(702)에 의한 실행을 위해 명령어 메모리(706)에 저장된다.
링 버스(728)는 제어기(102)로부터 시작되며, 링의 타일(712, 714)을 제어기(702)로 다시 연결하는 버스 데이터 경로를 통한 통신 결합을 제공한다. 다양한 구현에서, 링 버스(728)는 일반적으로 모든 타일(712, 714)의 모든 넓은 메모리 유닛을 연결하거나 결합(커플링)한다. 따라서, 링 버스(728)의 페이로드 폭은 타일 세트(712, 714)의 각각의 타일 내에 배치된 넓은 메모리 유닛의 폭에 대응한다. 전술한 바와 같이, 링 버스(728)는 또한 링 버스(728)를 통해 전달되는 명령 또는 파라미터를 포함하는 페이로드 데이터를 소비해야 하는 타일을 나타내는 비트맵 헤더를 포함한다.
정보를 수신하는 것에 응답하여, 링 버스(728)를 통해 특정 타일에서 수신된 데이터(즉, 페이로드)와 관련하여, 각 타일은 데이터를 다른 타일로 전달하기 전에 수신 타일에 고유한 비트맵 헤더에 표시된 위치 데이터를 제로(즉, 소거)한다. 따라서, 헤더 비트맵에 페이로드를 수신할 특정 타일을 나타내는 나머지 비트 세트 데이터가 없으면, 페이로드를 다른 타일로 전달하는 것이 중지될 것이다. 페이로드 데이터는 일반적으로 심층 네이트 루프(deeply nested loop)의 실행을 기반으로 수행된 텐서 연산 중 하나 이상의 타일에서 사용되는 활성화 및 가중치를 나타낸다.
일부 구현들에서, 제어기(702)는 링 버스(728)의 일부인 것으로 설명될 수 있다. 일 예에서, 특정 타일 내에서 실행된 DMAOp 명령에 대해, 제어기(702)는 링 버스 스톱(stops)으로부터 데이터/페이로드를 팝(pop)하고 링의 다음 타일에서 링 버스 스톱으로 페이로드를 전달하는데 사용될 수 있다. 제어기(702)는, 또한 그러한 동작이 비트맵 헤더의 명령에 의해 요구된다면 페이로드 데이터가 타일의 하나 이상의 넓은 메모리 유닛에 커밋되도록 할 수 있다. 데이터가 기록될 필요가 있는 하나 이상의 와이드 메모리 유닛의 어드레스는 특정 타일 내에서 DMAOp 명령에 의해 생성될 수 있다.
다양한 구현에서, 타일 세트(712, 714)의 각각의 타일은 페이로드 데이터의 프로듀서(producer) 또는 페이로드 데이터의 컨슈머(consumer)일 수 있다. 타일이 페이로드 데이터의 프로듀서일 때, 타일은 하나 이상의 넓은 메모리 유닛으로부터 데이터를 판독하고 하나 이상의 다른 타일에 의한 소비(consumption)를 위해 링 버스(728)를 통해 데이터를 멀티캐스트한다. 타일이 페이로드 데이터의 컨슈머일 때, 타일은 데이터를 수신하여 타일 내의 하나 이상의 넓은 메모리 유닛에 그 데이터를 기록하고, 하나 이상의 다른 타일에 의한 소비를 위해 페이로드 데이터를 전달한다. 링 버스(728)를 통한 페이로드 데이터의 이동과 관련하여, 일반적으로 임의의 소정의 시간에 링 버스(728) 상에 하나의 데이터 프로듀서/마스터(master)만이 존재할 것이다. 모든 타일에서의 DMAOp 명령 실행 순서(예를 들어, FIFO 제어 방식)는 소정의 시간에 링 버스(728) 상에 오직 하나의 데이터 프로듀서/마스터가 존재하도록 보장할 것이다.
일부 구현들에서, 제어기(702)는 소정의 시간에 링 버스(728) 상에 하나의 페이로드 데이터의 프로듀서/마스터가 존재하도록 하기 위해 동기화 플래그 제어 아키텍처를 사용한다. 일례에서, 타일이 링 출력에 기록할 때마다 동기 플래그 카운트의 증가를 트리거할 것이다. 제어기(702)는 페이로드 데이터를 검사하여 페이로드를 구성하는 데이터 청크 또는 세그먼트의 수를 결정할 수 있다. 제어기(702)는 타일에 의한 실행을 모니터링하여 다른 타일이 마스터 모드에서 실행되기 전에 타일에 의해 예상된 데이터 세그먼트 수가 전송 및/또는 소비되도록 한다.
소정의 시간에 링 버스(728) 상에 하나의 데이터 프로듀서/마스터만 있는 것을 보장하는 예외는 링 버스(728)를 통해 연결된 로컬 멀티 캐스트 그룹이 링 버스 상에 오버랩 영역을 갖지 않는 경우 발생한다. 이 듀얼 마스터 멀티 캐스트 방법론의 중요한 요구 사항은 패킷 오버랩이 발생하여 하나 이상의 데이터 연산 오류가 발생할 수 있으므로 서로 다른 멀티 캐스트 그룹이 서로의 데이터 패킷을 볼 수 없도록해야 한다는 것이다.
도 1과 대조적으로. 도 7의 타일은 지그재그 또는 구불구불한(serpentine) 방식으로 링 버스로 연결되며 타일 자체는 사각형(square) 패턴을 형성한다. 예시된 실시 예에서, 가속기는 각각 8 및 16 타일을 포함한다. 대안적인 실시 예에서, 가속기는 더 많은 타일을 포함할 수 있다.
도 8은 도 2의 컴퓨팅 타일의 단순화된 예시이다.
도 9는 도 2의 컴퓨팅 타일(200)과 같은 신경망(NN) 컴퓨팅 타일을 사용하여 텐서 연산을 수행하기 위한 프로세스(900)의 예시적인 흐름도이다. 프로세스(900)는 예를 들어 실행 전에 NN 가중치 파라미터를 NN 가속기에 로드함으로써 블록(902)에서 시작한다. 프로세스(900)는 가속기 외부의 신경망 가중치 파라미터에 실질적으로 액세스하지 않고 가속기에 대한 입력을 처리함으로써 블록(904)에서 계속된다. 블록(906)에서, 프로세스는 가속기로의 입력 처리에 기초하여 적어도 하나의 출력 활성화를 생성한다.
본 명세서에서 설명된 요지 및 기능적 동작의 실시 예는 디지털 전자 회로, 유형적으로 구현된 컴퓨터 소프트웨어 또는 펌웨어, 컴퓨터 하드웨어로 구현될 수 있으며, 이 명세서 및 구조적 등가물에 개시된 구조 또는 이들 중 하나 이상의 조합을 포함한다. 본 명세서에서 설명된 본 발명의 실시 예는 하나 이상의 컴퓨터 프로그램, 즉 데이터 처리 장치에 의해 실행되거나 데이터 처리 장치의 동작을 제어하기 위한 유형적인 비-일시적인 프로그램 캐리어상에 인코딩된 컴퓨터 프로그램 명령어의 하나 이상의 모듈로서 구현될 수 있다. 선택적으로 또는 부가적으로, 프로그램 명령어는 데이터 처리 장치에 의한 실행을 위해 적절한 수신기 장치로의 송신을 위해 정보를 인코딩하기 위해 생성된, 인위적으로 생성된 전파된 신호, 예를 들어, 기계-생성 전기, 광학 또는 전자기 신호 상에 인코딩될 수 있다. 컴퓨터 저장 매체는 기계 판독 가능 저장 장치, 기계 판독 가능 저장 기판, 랜덤 또는 시리얼 액세스 메모리 장치, 또는 이들 중 하나 이상의 조합일 수 있다.
본 명세서에서 설명된 프로세스 및 로직 흐름은 입력 데이터를 오퍼레이팅하고 출력을 생성함으로써 기능을 수행하기 위해 하나 이상의 컴퓨터 프로그램을 실행하는 하나 이상의 프로그램 가능 컴퓨터에 의해 수행될 수 있다. 프로세스 및 로직 흐름은 또한 특수 목적 로직 회로에 의해 수행될 수 있고, 장치는 FPGA(field programmable gate array), ASIC(application specific integrated circuit) 또는 GPGPU(General purpose graphics processing unit)와 같은 특수 목적의 로직 회로에 의해 수행될 수 있다.
컴퓨터 프로그램의 실행에 적합한 컴퓨터는 예를 들어 범용 또는 특수 목적 마이크로프로세서 또는 둘 모두, 또는 임의의 다른 종류의 중앙 처리 장치를 기반으로 할 수 있다. 일반적으로, 중앙 처리 장치는 판독 전용 메모리 또는 랜덤 액세스 메모리 또는 둘 모두로부터 명령어 및 데이터를 수신할 것이다. 컴퓨터의 필수 구성 요소는 명령어를 수행하거나 실행하기 위한 중앙 처리 장치 및 명령어 및 데이터를 저장하기 위한 하나 이상의 메모리 장치이다. 일반적으로, 컴퓨터는 데이터를 저장하기 위한 하나 이상의 대용량 저장 장치(예를 들어, 자기, 광 자기 디스크 또는 광 디스크)로부터 데이터를 수신하거나 또는 그 이상의 대용량 저장 장치로 데이터를 전송하거나 둘 모두를 포함하거나 동작 가능하도록 결합될 것이다. 반면, 컴퓨터는 이러한 장치를 가질 필요는 없다.
컴퓨터 프로그램 명령어 및 데이터를 저장하기에 적합한 컴퓨터 판독 가능 매체는 예를 들어 EPROM, EEPROM 및 플래시 메모리 장치, 내부 하드 디스크 또는 이동식 디스크와 같은 자기 디스크와 같은 반도체 메모리 장치를 포함하는 모든 형태의 비휘발성 메모리, 매체 및 메모리 장치를 포함한다. 프로세서 및 메모리는 특수 목적 로직 회로에 의해 보충되거나 또는 그 안에 포함될 수 있다.
본 명세서는 많은 구현 세부 사항을 포함하지만, 이들은 임의의 발명 또는 청구되는 범위에 대한 제한으로 해석되어서는 안되며, 오히려 특정 발명의 특정 실시 예에 특정할 수 있는 특징에 대한 설명으로 해석되어야 한다. 별도의 실시 예와 관련하여 본 명세서에서 설명되는 특정 특징은 또한 단일 실시 예에서 조합하여 구현될 수 있다. 반대로, 단일 실시 예의 컨텍스트에서 설명된 다양한 특징은 또한 다수의 실시 예에서 개별적으로 또는 임의의 적합한 하위 조합으로 구현될 수 있다. 더욱이, 특징들은 특정 조합으로 작용하는 것으로 상기에서 설명될 수 있고, 심지어 처음에는 그러한 것으로서 주장될지라도, 청구된 조합으로부터의 하나 이상의 특징이 어떤 경우 조합으로부터 제거될 수 있고, 청구된 조합은 부분 조합 또는 서브 조합의 변형으로 유도될 수 있다.
유사하게, 동작들이 특정 순서로 도면들에 도시되어 있지만, 이는 바람직한 동작을 달성하기 위해 이러한 동작이 도시된 순서 또는 순차적인 순서로 수행되거나 도시된 모든 동작이 수행될 것을 요구하는 것으로 이해되어서는 안된다. 특정 상황에서 멀티태스킹 및 병렬 처리가 유리할 수 있다. 또한, 상술한 실시 예들에서 다양한 시스템 모듈들 및 컴포넌트들의 분리는 모든 실시 예들에서 그러한 분리를 요구하는 것으로 이해되어서는 안되며, 서술된 프로그램 컴포넌트들 및 시스템들은 일반적으로 단일 소프트웨어 제품에 함께 통합되거나 다중 소프트웨어 제품들로 패키징될 수 있다는 것을 이해해야 한다.
본 발명의 특정 실시 예가 설명되었다. 다른 실시 예들은 다음의 청구항들의 범위 내에 있다. 예를 들어, 청구 범위에서 열거된 동작은 상이한 순서로 수행될 수 있으며 여전히 바람직한 결과를 달성한다. 하나의 예로서, 첨부된 도면에 도시된 프로세스는 바람직한 결과를 달성하기 위해 도시된 특정 순서 또는 순차적 순서를 반드시 필요로 하지는 않는다. 특정 구현예에서, 멀티태스킹 및 병렬 처리가 유리할 수 있다.

Claims (19)

  1. 복수의 타일들을 포함하는 신경망 가속기를 이용하여 신경망의 오퍼레이션을 수행하는 방법으로서 -상기 복수의 타일들 중 각각의 타일은 하나 이상의 오퍼레이터를 포함하고, 각각의 오퍼레이터는 신경망 연산을 수행하도록 구성되고, 상기 복수의 타일들 중 각각의 타일은 하나 이상의 로컬 메모리 뱅크를 가짐-,
    각 타일이 신경망의 하나 이상의 각 계층의 연산을 수행하는 데 필요한 가중치를 하나 이상의 로컬 메모리 뱅크에 저장하도록 상기 복수의 타일들에 걸쳐 상기 신경망의 가중치를 분배(distributing)하는 단계; 그리고
    각 타일에 의해, 타일의 하나 이상의 로컬 메모리 뱅크에 저장된 가중치를 타일의 하나 이상의 오퍼레이터에 제공하는 것을 포함하는 상기 신경망의 하나 이상의 각 계층의 오퍼레이션을 실행하는 단계를 포함하는, 복수의 타일들을 포함하는 신경망 가속기를 이용하여 신경망의 오퍼레이션을 수행하는 방법.
  2. 제1항에 있어서, 상기 방법은,
    각 타일에 의해, 다른 타일 또는 이전 계층에서 출력된 입력 활성화를 상기 타일의 하나 이상의 오퍼레이터에 제공하는 단계를 더 포함하는, 복수의 타일들을 포함하는 신경망 가속기를 이용하여 신경망의 오퍼레이션을 수행하는 방법.
  3. 제1항에 있어서, 상기 신경망의 하나 이상의 각 계층의 오퍼레이션을 실행하는 단계는 상기 복수의 타일들에 걸쳐 분배된 가중치만을 이용하여 상기 신경망의 오퍼레이션을 실행하는 단계를 포함하는, 복수의 타일들을 포함하는 신경망 가속기를 이용하여 신경망의 오퍼레이션을 수행하는 방법.
  4. 제3항에 있어서, 상기 신경망의 하나 이상의 각 계층의 오퍼레이션을 실행하는 단계는 하나 이상의 타일 중 어느 것에도 로컬이 아닌 메모리로부터 가중치를 검색하지 않고 상기 신경망의 오퍼레이션을 실행하는 단계를 포함하는, 복수의 타일들을 포함하는 신경망 가속기를 이용하여 신경망의 오퍼레이션을 수행하는 방법.
  5. 제1항에 있어서, 타일의 로컬 메모리 뱅크는 SRAM 메모리 뱅크인, 복수의 타일들을 포함하는 신경망 가속기를 이용하여 신경망의 오퍼레이션을 수행하는 방법.
  6. 제1항에 있어서, 상기 신경망의 가중치를 분배하는 단계는 복수의 로컬 메모리 뱅크에 걸쳐 100,000개 이상, 1,000,000개 이상, 또는 100,000,000개 이상의 가중치를 분배(distributing)하는 단계를 포함하는, 복수의 타일들을 포함하는 신경망 가속기를 이용하여 신경망의 오퍼레이션을 수행하는 방법.
  7. 제1항에 있어서, 타일들은 논리적으로 링으로 배열되고, 상기 신경망의 하나 이상의 각 계층의 오퍼레이션을 실행하는 단계는 하나의 타일의 출력을 다른 타일에 대한 입력 활성화로서 제공하는 단계를 포함하는, 복수의 타일들을 포함하는 신경망 가속기를 이용하여 신경망의 오퍼레이션을 수행하는 방법.
  8. 제1항에 있어서, 상기 신경망의 가중치를 분배하는 단계는 복수의 타일들의 복수의 로컬 메모리 뱅크에 걸쳐 상기 신경망의 모든 가중치를 분배하는 단계를 포함하는, 복수의 타일들을 포함하는 신경망 가속기를 이용하여 신경망의 오퍼레이션을 수행하는 방법.
  9. 텐서 연산을 가속화하기 위한 가속기로서,
    신경망 계층의 복수의 가중치를 저장하도록 구성된 메모리;
    메모리 위치에서 상기 신경망 계층에 대한 입력을 검색하는 데 사용되는 텐서 유닛 -상기 입력은 데이터 어레이의 요소(element)임-; 그리고
    상기 신경망 계층과 연관된 하나 이상의 연산을 수행하도록 구성된 오퍼레이터를 포함하며,
    상기 하나 이상의 연산은 상기 신경망 계층에 대한 입력과 상기 메모리에 저장된 해당 가중치의 곱셈 연산을 포함하고; 상기 하나 이상의 연산은 임계 지연시간(latency) 미만 및 임계 처리량 초과에서 실행되고; 상기 메모리, 텐서 유닛 및 오퍼레이터는 동일한 다이(die)에 위치되는, 텐서 연산을 가속화하기 위한 가속기.
  10. 제9항에 있어서, 상기 메모리는 하나 이상의 신경망 계층의 100,000개 이상의 가중치를 저장하도록 구성되는, 텐서 연산을 가속화하기 위한 가속기.
  11. 제9항에 있어서, 상기 메모리는 하나 이상의 신경망 계층의 1,000,000개 이상의 가중치를 저장하도록 구성되는, 텐서 연산을 가속화하기 위한 가속기.
  12. 제9항에 있어서, 상기 메모리는 하나 이상의 신경망 계층의 100,000,000개 이상의 가중치를 저장하도록 구성되는, 텐서 연산을 가속화하기 위한 가속기.
  13. 제9항에 있어서, 상기 메모리는 SRAM을 포함하는, 텐서 연산을 가속화하기 위한 가속기.
  14. 제9항에 있어서, 상기 가속기는,
    상기 오퍼레이터에 의해 액세스 가능한 데이터 버스를 더 포함하는, 텐서 연산을 가속화하기 위한 가속기.
  15. 제14항에 있어서, 상기 텐서 유닛은 상기 신경망 계층에 대한 입력이 상기 오퍼레이터에 의해 액세스 가능한 상기 데이터 버스에 제공되도록 제어 신호를 제공하도록 구성되는, 텐서 연산을 가속화하기 위한 가속기.
  16. 제9항에 있어서, 상기 신경망 계층에 대한 입력은 상기 신경망 계층의 노드에 대한 입력 활성화를 포함하는, 텐서 연산을 가속화하기 위한 가속기.
  17. 제15항에 있어서, 상기 가속기는,
    상기 신경망 계층에 대한 입력이 저장되는 다른 메모리를 더 포함하는, 텐서 연산을 가속화하기 위한 가속기.
  18. 제17항에 있어서, 상기 신경망 계층에 대한 입력은 상기 신경망 계층에 대한 복수의 입력들을 포함하고, 상기 오퍼레이터는 복수의 오퍼레이터들을 포함하는, 텐서 연산을 가속화하기 위한 가속기.
  19. 제18항에 있어서, 상기 다른 메모리는 상기 복수의 오퍼레이터들 각각이 상기 복수의 입력들 중 각각의 입력을 수신하도록 상기 신경망 계층에 대한 입력들을 상기 데이터 버스에 하나씩 브로드캐스트하도록 구성되는, 텐서 연산을 가속화하기 위한 가속기.
KR1020247013902A 2017-08-11 2018-08-09 칩에 상주하는 파라미터를 갖는 신경망 가속기 KR20240060857A (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201762544171P 2017-08-11 2017-08-11
US62/544,171 2017-08-11
KR1020227035835A KR102662211B1 (ko) 2017-08-11 2018-08-09 칩에 상주하는 파라미터를 갖는 신경망 가속기
PCT/US2018/045974 WO2019032808A1 (en) 2017-08-11 2018-08-09 NEURONAL NETWORK ACCELERATOR WITH CHIP RESIDENTIAL PARAMETERS

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020227035835A Division KR102662211B1 (ko) 2017-08-11 2018-08-09 칩에 상주하는 파라미터를 갖는 신경망 가속기

Publications (1)

Publication Number Publication Date
KR20240060857A true KR20240060857A (ko) 2024-05-08

Family

ID=63449663

Family Applications (3)

Application Number Title Priority Date Filing Date
KR1020227035835A KR102662211B1 (ko) 2017-08-11 2018-08-09 칩에 상주하는 파라미터를 갖는 신경망 가속기
KR1020247013902A KR20240060857A (ko) 2017-08-11 2018-08-09 칩에 상주하는 파라미터를 갖는 신경망 가속기
KR1020197036387A KR102456464B1 (ko) 2017-08-11 2018-08-09 칩에 상주하는 파라미터를 갖는 신경망 가속기

Family Applications Before (1)

Application Number Title Priority Date Filing Date
KR1020227035835A KR102662211B1 (ko) 2017-08-11 2018-08-09 칩에 상주하는 파라미터를 갖는 신경망 가속기

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020197036387A KR102456464B1 (ko) 2017-08-11 2018-08-09 칩에 상주하는 파라미터를 갖는 신경망 가속기

Country Status (9)

Country Link
US (4) US10504022B2 (ko)
EP (1) EP3665622A1 (ko)
JP (2) JP7171622B2 (ko)
KR (3) KR102662211B1 (ko)
CN (1) CN109389214A (ko)
DE (2) DE202018104609U1 (ko)
GB (1) GB2568776B (ko)
TW (2) TWI679590B (ko)
WO (1) WO2019032808A1 (ko)

Families Citing this family (71)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10366328B2 (en) * 2017-09-19 2019-07-30 Gyrfalcon Technology Inc. Approximating fully-connected layers with multiple arrays of 3x3 convolutional filter kernels in a CNN based integrated circuit
US10832753B2 (en) * 2017-07-31 2020-11-10 General Electric Company Components including structures having decoupled load paths
GB2568776B (en) 2017-08-11 2020-10-28 Google Llc Neural network accelerator with parameters resident on chip
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
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
US10803379B2 (en) 2017-12-12 2020-10-13 Amazon Technologies, Inc. Multi-memory on-chip computational network
US10846621B2 (en) 2017-12-12 2020-11-24 Amazon Technologies, Inc. Fast context switching for computational networks
US10621489B2 (en) 2018-03-30 2020-04-14 International Business Machines Corporation Massively parallel neural inference computing elements
US11144316B1 (en) 2018-04-17 2021-10-12 Ali Tasdighi Far Current-mode mixed-signal SRAM based compute-in-memory for low power machine learning
US11966835B2 (en) 2018-06-05 2024-04-23 Nvidia Corp. Deep neural network accelerator with fine-grained parallelism discovery
US11640533B2 (en) 2018-08-03 2023-05-02 Arm Limited System, method and apparatus for training neural networks using multiple datasets
US20210201124A1 (en) * 2018-08-27 2021-07-01 Neuralmagic Inc. Systems and methods for neural network convolutional layer matrix multiplication using cache memory
US10747845B2 (en) * 2018-08-31 2020-08-18 Arm Limited System, method and apparatus for computationally efficient data manipulation
US11769040B2 (en) 2018-09-10 2023-09-26 Nvidia Corp. Scalable multi-die deep learning system
CN109359732B (zh) * 2018-09-30 2020-06-09 阿里巴巴集团控股有限公司 一种芯片及基于其的数据处理方法
US20200117988A1 (en) * 2018-10-11 2020-04-16 International Business Machines Corporation Networks for distributing parameters and data to neural network compute cores
US10970201B2 (en) 2018-10-24 2021-04-06 Arm Limited System, method and apparatus for data manipulation
EP3674982A1 (en) * 2018-12-27 2020-07-01 IMEC vzw Hardware accelerator architecture for convolutional neural network
US11410014B2 (en) 2019-02-11 2022-08-09 Apple Inc. Customizable chip for AI applications
US11748599B2 (en) * 2019-02-21 2023-09-05 Texas Instruments Incorporated Super-tiling in neural network processing to enable analytics at lower memory speed
US20220121936A1 (en) * 2019-02-27 2022-04-21 Huawei Technologies Co., Ltd. Neural Network Model Processing Method and Apparatus
US11061738B2 (en) * 2019-02-28 2021-07-13 Movidius Limited Methods and apparatus to store and access multi dimensional data
US11270197B2 (en) * 2019-03-12 2022-03-08 Nvidia Corp. Efficient neural network accelerator dataflows
CN110032374B (zh) * 2019-03-21 2023-04-07 深兰科技(上海)有限公司 一种参数提取方法、装置、设备及介质
US10534747B2 (en) * 2019-03-29 2020-01-14 Intel Corporation Technologies for providing a scalable architecture for performing compute operations in memory
CN111831337B (zh) * 2019-04-19 2022-11-29 安徽寒武纪信息科技有限公司 数据同步方法及装置以及相关产品
EP3800547A4 (en) * 2019-04-04 2022-03-23 Cambricon Technologies Corporation Limited DATA PROCESSING METHOD AND DEVICE AND RELEVANT PRODUCT
CN111782577B (zh) 2019-04-04 2023-03-24 安徽寒武纪信息科技有限公司 数据处理装置及方法以及相关产品
CN111985628B (zh) * 2019-05-24 2024-04-30 澜起科技股份有限公司 计算装置及包括所述计算装置的神经网络处理器
US11941512B2 (en) * 2019-06-26 2024-03-26 Western Digital Technologies, Inc. Neural network engine utilizing a serial bus
CN112148391A (zh) * 2019-06-26 2020-12-29 北京百度网讯科技有限公司 生成基于芯片的计算功能的方法、装置、设备和存储介质
WO2021000281A1 (en) * 2019-07-03 2021-01-07 Huaxia General Processor Technologies Inc. Instructions for operating accelerator circuit
US20220405221A1 (en) * 2019-07-03 2022-12-22 Huaxia General Processor Technologies Inc. System and architecture of pure functional neural network accelerator
KR20210006120A (ko) * 2019-07-08 2021-01-18 에스케이하이닉스 주식회사 데이터 저장 장치, 데이터 처리 시스템 및 이를 위한 가속 장치
CN112541581A (zh) * 2019-09-23 2021-03-23 阿里巴巴集团控股有限公司 一种加速计算单元和加速计算系统
CN110633153A (zh) * 2019-09-24 2019-12-31 上海寒武纪信息科技有限公司 一种用多核处理器实现神经网络模型拆分方法及相关产品
US10915298B1 (en) 2019-10-08 2021-02-09 Ali Tasdighi Far Current mode multiply-accumulate for compute in memory binarized neural networks
DE102019127795A1 (de) * 2019-10-15 2021-04-15 Infineon Technologies Ag Schaltung und ein Verfahren zum Bestimmen einer Lage eines Magneten und Joystick
US11341086B2 (en) * 2019-11-22 2022-05-24 Rambus Inc. Compute accelerator with 3D data flows
US11127442B2 (en) 2019-12-06 2021-09-21 Xilinx, Inc. Data transfers between a memory and a distributed compute array
KR20210077352A (ko) * 2019-12-17 2021-06-25 에스케이하이닉스 주식회사 데이터 처리 시스템 및 이를 위한 가속 장치
WO2021126194A1 (en) * 2019-12-18 2021-06-24 Google Llc Parameter caching for neural network accelerators
US11610104B1 (en) 2019-12-30 2023-03-21 Ali Tasdighi Far Asynchronous analog accelerator for fully connected artificial neural networks
US11615256B1 (en) 2019-12-30 2023-03-28 Ali Tasdighi Far Hybrid accumulation method in multiply-accumulate for machine learning
US11922292B2 (en) 2020-01-27 2024-03-05 Google Llc Shared scratchpad memory with parallel load-store
DE102020201182A1 (de) * 2020-01-31 2021-08-05 Robert Bosch Gesellschaft mit beschränkter Haftung Hardwarebeschleunigte Berechnung von Faltungen
EP4100887A4 (en) * 2020-03-05 2023-07-05 Huawei Cloud Computing Technologies Co., Ltd. METHOD AND SYSTEM FOR SHARING AND BITWIDTH ALLOCATION OF DEEP LEARNING MODELS FOR INFERENCE ON DISTRIBUTED SYSTEMS
US20210295145A1 (en) * 2020-03-23 2021-09-23 Mentium Technologies Inc. Digital-analog hybrid system architecture for neural network acceleration
US11507817B2 (en) 2020-04-17 2022-11-22 Samsung Electronics Co., Ltd. System and method for performing computations for deep neural networks
CN113568665B (zh) * 2020-04-29 2023-11-17 北京希姆计算科技有限公司 一种数据处理装置
US11501151B2 (en) * 2020-05-28 2022-11-15 Arm Limited Pipelined accumulator
CN113806246A (zh) * 2020-06-16 2021-12-17 安徽寒武纪信息科技有限公司 数据处理装置及方法以及相关产品
US11556312B2 (en) 2020-07-10 2023-01-17 International Business Machines Corporation Photonic in-memory co-processor for convolutional operations
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
US11972349B1 (en) 2020-11-12 2024-04-30 Meta Platforms, Inc. Flexible compute array utilization in a tensor processor
WO2022123722A1 (ja) * 2020-12-10 2022-06-16 日本電信電話株式会社 命令処理方法及び命令処理回路
US20220198249A1 (en) * 2020-12-18 2022-06-23 Hewlett Packard Enterprise Development Lp Execution of neural networks
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
US11477007B1 (en) * 2021-04-13 2022-10-18 International Business Machines Corporation Packing arbitrary tensors into tiles with descriptive shapes
US11656909B2 (en) * 2021-04-15 2023-05-23 National Taiwan University Tensor accelerator capable of increasing efficiency of data sharing
CN114004347A (zh) 2021-08-30 2022-02-01 平头哥(上海)半导体技术有限公司 用于加速图神经网络属性访问的硬件加速器、系统和方法
US11966745B2 (en) 2021-11-15 2024-04-23 Google Llc Sparse SIMD cross-lane processing unit
US11972263B2 (en) 2021-11-22 2024-04-30 Google Llc Cooperative instruction prefetch on multicore system
WO2023139990A1 (ja) * 2022-01-24 2023-07-27 LeapMind株式会社 ニューラルネットワーク回路およびニューラルネットワーク演算方法
US11977499B2 (en) * 2022-03-22 2024-05-07 Google Llc Streaming transfers and ordering model
CN115586885B (zh) * 2022-09-30 2023-05-05 晶铁半导体技术(广东)有限公司 一种存内计算单元和加速方法
US11886974B1 (en) * 2023-07-20 2024-01-30 Chromatic Inc. Neural network chip for ear-worn device

Family Cites Families (49)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03121581A (ja) * 1989-10-04 1991-05-23 Olympus Optical Co Ltd 文字読取装置
JP3102027B2 (ja) 1990-11-20 2000-10-23 日本電気株式会社 ループ制御のネスティング管理機構
US5958048A (en) 1996-08-07 1999-09-28 Elbrus International Ltd. Architectural support for software pipelining of nested loops
JP2001117900A (ja) 1999-10-19 2001-04-27 Fuji Xerox Co Ltd ニューラルネットワーク演算装置
GB2359641B (en) 2000-02-25 2002-02-13 Siroyan Ltd Mapping circuitry and method
WO2001090888A1 (en) 2000-05-23 2001-11-29 Theis Jean Paul A data processing system having an address generation unit with hardwired multidimensional memory indexing support
US7117421B1 (en) * 2002-05-31 2006-10-03 Nvidia Corporation Transparent error correction code memory system and method
US6952821B2 (en) 2002-08-19 2005-10-04 Hewlett-Packard Development Company, L.P. Method and system for memory management optimization
US7107199B2 (en) 2002-10-31 2006-09-12 Hewlett-Packard Development Company, L.P. Method and system for the design of pipelines of processors
US7047480B2 (en) * 2002-11-12 2006-05-16 Microsoft Corporation Matrix multiplication in a Galois field for forward error correction
US7225439B2 (en) 2003-03-21 2007-05-29 Sun Microsystems, Inc. Combining write-barriers within an inner loop with fixed step
CN1259617C (zh) 2003-09-09 2006-06-14 大唐微电子技术有限公司 一种加快rsa加/解密过程的方法及其模乘、模幂运算电路
US8539211B2 (en) 2005-01-25 2013-09-17 Nytell Software LLC Allocating registers for loop variables in a multi-threaded processor
US8806183B1 (en) 2006-02-01 2014-08-12 Ixys Ch Gmbh Blank bit and processor instructions employing the blank bit
US8904155B2 (en) 2006-03-17 2014-12-02 Qualcomm Incorporated Representing loop branches in a branch history register with multiple bits
US8438365B2 (en) 2006-10-06 2013-05-07 Calos Fund Limited Liability Company Efficient data loading in a data-parallel processor
DE602007005790D1 (de) 2007-06-26 2010-05-20 Ericsson Telefon Ab L M Datenverarbeitungseinheit für Anweisungen in geschachtelten Schleifen
US20100122066A1 (en) 2008-11-12 2010-05-13 Freescale Semiconductor, Inc. Instruction method for facilitating efficient coding and instruction fetch of loop construct
US20100274972A1 (en) 2008-11-24 2010-10-28 Boris Babayan Systems, methods, and apparatuses for parallel computing
CA2684226A1 (en) 2009-10-30 2011-04-30 Ibm Canada Limited - Ibm Canada Limitee Eleminating redundant operations for common properties using shared real registers
US20130185540A1 (en) 2011-07-14 2013-07-18 Texas Instruments Incorporated Processor with multi-level looping vector coprocessor
CN104081341B (zh) 2011-12-23 2017-10-27 英特尔公司 用于多维数组中的元素偏移量计算的指令
US9165243B2 (en) * 2012-02-15 2015-10-20 Microsoft Technology Licensing, Llc Tensor deep stacked neural network
US9292787B2 (en) * 2012-08-29 2016-03-22 Microsoft Technology Licensing, Llc Computer-implemented deep tensor neural network
US20140181171A1 (en) 2012-12-24 2014-06-26 Pavel Dourbal Method and system for fast tensor-vector multiplication
US20140188961A1 (en) 2012-12-27 2014-07-03 Mikhail Plotnikov Vectorization Of Collapsed Multi-Nested Loops
US8842117B1 (en) 2014-02-13 2014-09-23 Raycast Systems, Inc. Computer hardware architecture and data structures for lookahead flags to support incoherent ray traversal
CN105260322B (zh) 2014-06-30 2020-09-01 中兴通讯股份有限公司 一种对循环缓冲区消除循环移位的方法和装置
US20160026912A1 (en) 2014-07-22 2016-01-28 Intel Corporation Weight-shifting mechanism for convolutional neural networks
US9830193B1 (en) * 2014-09-30 2017-11-28 Amazon Technologies, Inc. Automatic management of low latency computational capacity
EP3035249B1 (en) 2014-12-19 2019-11-27 Intel Corporation Method and apparatus for distributed and cooperative computation in artificial neural networks
CN105184366B (zh) * 2015-09-15 2018-01-09 中国科学院计算技术研究所 一种时分复用的通用神经网络处理器
US10380479B2 (en) * 2015-10-08 2019-08-13 International Business Machines Corporation Acceleration of convolutional neural network training using stochastic perforation
US10353860B2 (en) * 2015-10-08 2019-07-16 Via Alliance Semiconductor Co., Ltd. Neural network unit with neural processing units dynamically configurable to process multiple data sizes
CN105488565A (zh) * 2015-11-17 2016-04-13 中国科学院计算技术研究所 加速深度神经网络算法的加速芯片的运算装置及方法
US11170294B2 (en) * 2016-01-07 2021-11-09 Intel Corporation Hardware accelerated machine learning
US9875104B2 (en) 2016-02-03 2018-01-23 Google Llc Accessing data in multi-dimensional tensors
CN105892989B (zh) * 2016-03-28 2017-04-12 中国科学院计算技术研究所 一种神经网络加速器及其运算方法
CN108416436B (zh) * 2016-04-18 2021-06-01 中国科学院计算技术研究所 使用多核心处理模块进行神经网络划分的方法及其系统
US10817802B2 (en) * 2016-05-07 2020-10-27 Intel Corporation Apparatus for hardware accelerated machine learning
US11120329B2 (en) * 2016-05-07 2021-09-14 Intel Corporation Multicast network and memory transfer optimizations for neural network hardware acceleration
CA2990709C (en) * 2016-05-26 2018-09-04 The Governing Council Of The University Of Toronto Accelerator for deep neural networks
US10498855B2 (en) * 2016-06-17 2019-12-03 Cisco Technology, Inc. Contextual services in a network using a deep learning agent
CN106485317A (zh) * 2016-09-26 2017-03-08 上海新储集成电路有限公司 一种神经网络加速器以及神经网络模型的实现方法
US10175980B2 (en) * 2016-10-27 2019-01-08 Google Llc Neural network compute tile
CN106557332A (zh) * 2016-11-30 2017-04-05 上海寒武纪信息科技有限公司 一种指令生成过程的复用方法及装置
CN106875011B (zh) * 2017-01-12 2020-04-17 南京风兴科技有限公司 二值权重卷积神经网络加速器的硬件架构及其计算流程
CN106909970B (zh) * 2017-01-12 2020-04-21 南京风兴科技有限公司 一种基于近似计算的二值权重卷积神经网络硬件加速器计算装置
GB2568776B (en) 2017-08-11 2020-10-28 Google Llc Neural network accelerator with parameters resident on chip

Also Published As

Publication number Publication date
JP2020532780A (ja) 2020-11-12
GB2568776B (en) 2020-10-28
KR102662211B1 (ko) 2024-05-07
KR20200005638A (ko) 2020-01-15
DE202018104609U1 (de) 2018-11-29
US20200005128A1 (en) 2020-01-02
US11727259B2 (en) 2023-08-15
DE102018119513A1 (de) 2019-02-14
US10504022B2 (en) 2019-12-10
GB201812820D0 (en) 2018-09-19
KR102456464B1 (ko) 2022-10-19
CN109389214A (zh) 2019-02-26
US20190050717A1 (en) 2019-02-14
JP2023022028A (ja) 2023-02-14
EP3665622A1 (en) 2020-06-17
TW201911140A (zh) 2019-03-16
US11501144B2 (en) 2022-11-15
US20240078417A1 (en) 2024-03-07
WO2019032808A1 (en) 2019-02-14
TW202044124A (zh) 2020-12-01
GB2568776A (en) 2019-05-29
TWI679590B (zh) 2019-12-11
TWI737145B (zh) 2021-08-21
US20230162015A1 (en) 2023-05-25
JP7171622B2 (ja) 2022-11-15
KR20220143969A (ko) 2022-10-25

Similar Documents

Publication Publication Date Title
KR102662211B1 (ko) 칩에 상주하는 파라미터를 갖는 신경망 가속기
US11816480B2 (en) Neural network compute tile
US11237880B1 (en) Dataflow all-reduce for reconfigurable processor systems
US20220198114A1 (en) Dataflow Function Offload to Reconfigurable Processors
US20220245453A1 (en) Redistributing tensor elements between machine learning computing units
EP4097957A1 (en) Queue allocation in machine learning accelerators
JP2024075608A (ja) ニューラルネットワーク計算タイル

Legal Events

Date Code Title Description
A107 Divisional application of patent