KR20210013764A - 뉴럴 프로세서 - Google Patents

뉴럴 프로세서 Download PDF

Info

Publication number
KR20210013764A
KR20210013764A KR1020217002292A KR20217002292A KR20210013764A KR 20210013764 A KR20210013764 A KR 20210013764A KR 1020217002292 A KR1020217002292 A KR 1020217002292A KR 20217002292 A KR20217002292 A KR 20217002292A KR 20210013764 A KR20210013764 A KR 20210013764A
Authority
KR
South Korea
Prior art keywords
ifm
register
tile
multiplier
activation
Prior art date
Application number
KR1020217002292A
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 KR20210013764A publication Critical patent/KR20210013764A/ko

Links

Images

Classifications

    • 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/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
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/15Correlation function computation including computation of convolution operations
    • G06F17/153Multidimensional correlation or convolution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/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/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T9/00Image coding
    • G06T9/002Image coding using neural networks
    • 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
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

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

Abstract

뉴럴 프로세서. 일부 실시 예들에서, 프로세서는 제1 타일(tile), 제2 타일, 메모리, 및 버스를 포함한다. 버스는 메모리, 제1 타일, 및 제2 타일에 연결될 수 있다. 제1 타일은 제1 웨이트(weight) 레지스터, 제2 웨이트 레지스터, 활성화 버퍼, 제1 승산기, 및 제2 승산기를 포함할 수 있다. 활성화 버퍼는 제1 승산기와 연결된 제1 큐(queue), 및 제2 승산기와 연결된 제2 큐를 포함하도록 구성될 수 있다. 제1 큐는 제1 레지스터 및 상기 제1 레지스터와 인접한 제2 레지스터를 포함하고, 제1 레지스터는 제1 큐의 출력 레지스터일 수 있다. 제1 타일은, 제1 상태에서, 제1 승산기에서, 제1 웨이트에 제1 큐의 상기 출력 레지스터로부터의 활성화를 곱하고, 그리고 제2 상태에서, 제1 승산기에서, 제1 웨이트에 제1 큐의 제2 레지스터로부터의 활성화를 곱하도록 구성될 수 있다.

Description

뉴럴 프로세서
본 개시에 따른 실시 예들의 하나 이상의 양상들은 프로세싱 회로들에 관한 것이고, 특히 곱셈들 및 덧셈들의 조합을 수행하기 위한 프로세싱 회로에 관한 것이다.
뉴럴 네트워크는, 동작 상, 많은 수의 곱셈들 및 덧셈들을 수반하는 텐서 동작들(예를 들어, 텐서 곱셈들 및 컨볼루션들)을 수행 할 수 있다. 범용 중앙 처리 장치 또는 심지어는 그래픽 처리 장치(이러한 태스크에 더 적합 할 수 있음)에 의해 수행되면, 이러한 동작들의 수행은 상대적으로 느리고 동작별 에너지 비용이 상대적으로 높을 수 있다. 특히, 전력 예산을 엄격하게 제한하는 소형 장치(예: 모바일, 핸드-헬드 장치)에서 범용 중앙 처리 장치 또는 그래픽 처리 장치의 사용과 관련된 전력 소비는 상당히 불리할 수 있다.
따라서, 뉴럴 네트워크 계산을 위한 개선된 처리 회로가 필요하다.
본 발명의 목적은 텐서 동작의 속도가 향상되고 전력 소비가 감소된 뉴럴 프로세서를 제공하는데 있다.
본 발명의 실시 예들에 따르면, 프로세서가 제공된다. 프로세서는 제1 타일(tile), 제2 타일, 메모리, 및 버스를 포함한다. 상기 버스는 상기 메모리, 상기 제1 타일 및 상기 제2 타일에 연결된다. 상기 버스는 상기 메모리, 상기 제1 타일, 및 상기 제2 타일에 연결된다. 상기 제1 타일는 제1 웨이트 레지스터, 제2 웨이트 레지스터, 활성화 버퍼, 제1 승산기, 및 제2 승산기를 포함한다. 상기 제1 타일은 웨이트 커널로 활성화 배열의 컨볼루션을 수행하도록 구성된다. 상기 컨볼루션을 수행하는 단계는 활성화 배열의 제1 서브 어레이와 상기 커널의 텐서 곱을 형성하는 단계, 활성화 어레이의 제2 서브 어레이와 상기 커널의 텐서 곱(tensor product)을 형성하는 단계, 및 활성화 어레이의 제3 서브 어레이와 상기 커널의 텐서 곱을 형성하는 단계를 순서대로 포함한다. 상기 제2 서브 어레이는 제1 방향으로 n 개의 요소에 의해 상기 제1 서브 어레이로부터 오프셋되고, n은 양의 정수이다. 상기 제3 서브 어레이는 상기 제1 방향과 수직하는 제2 방향으로 하나의 요소에 의해 상기 제2 서브 어레이로부터 오프셋된다.
일부 실시 예들에 따르면, 상기 제3 서브 어레이를 이용하여 상기 커널의 텐서 곱을 형성 후, 상기 컨볼루션을 실행하는 단계는 상기 활성화 어레이의 제4 서브 어레이와 상기 커널의 텐서 곱을 형성하는 단계 및 활성화 어레이의 제5 서브 어레이와 상기 커널의 텐서 곱을 형성하는 단계를 순서대로 포함한다. 제4 서브 어레이는 제1 방향과 반대인 제3 방향으로 m 개의 어레이 요소들에 의해 제3 서브 어레이로부터 오프셋된다. m은 양의 정수이다. 제5 서브 어레이는 제2 방향으로 하나의 어레이 요소에 의해 제4 서브 어레이로부터 오프셋된다.
일부 실시 예들에 따르면, m은 n과 같다.
일부 실시 예들에 따르면, n은 1과 같다.
일부 실시 예들에 따르면, 상기 제1 서브어레이와 상기 커널의 곱들을 형성하는 단계 이후, 상기 컨볼루션을 실행하는 단계는 활성화 어레이의 (n-1)개 각각의 서브 어레이로 커널의 (n-1) 곱들(products)을 형성하는 단계를 순서대로 더 포함한다. (n-1) 곱들 중 k번째 곱의 서브어레이는 첫 번째 방향에서 (k+1) 어레이요소에 의해 첫 번째 서브 어레이로부터 오프셋된다.
일부 실시 예들에 따르면, 상기 프로세서는 상기 활성화 버퍼에 연결되고, 그리고 활성화 버퍼에 활성화를 공급하도록 구성된 캐시를 더 포함한다. 상기 캐시는 활성화들 "H+(H+n)*(W-1)-1"를 저장하기에 충분한 크기를 갖는다. H는 제1 방향의 커널의 크기이고, W는 제2 방향의 커널의 크기이다.
일부 실시 예들에 따르면, 상기 활성화 버퍼는 제1 승산기에 연결된 제1 큐(queue) 및 제2 승산기에 연결된 제2 큐를 포함한다. 제1 큐는 제1 레지스터 및 제1 레지스터에 인접한 제2 레지스터를 포함한다. 제1 레지스터는 제1 큐의 출력 레지스터이다. 제1 타일은 제1 상태에서 제1 승산기에서 제1 큐의 출력 레지스터로부터의 활성화와 제1 웨이트를 곱하고, 제2 상태에서 제1 승산기에서 제1 웨이트를 제1 큐의 제2 레지스터로부터의 활성화에 의해 곱하도록 더 구성된다.
일부 실시 예들에 따르면, 상기 제2 상태에서, 상기 제1 큐의 출력 레지스터는 제로(zero)를 포함한다.
일부 실시 예들에 따르면, 상기 프로세서는 제1 가산기를 더 포함한다. 상기 제1 가산기는 상기 제1 상태에서 상기 제1 승산기의 출력과 상기 제2 승산기의 출력에 연결되고 상기 제1 승산기의 출력으로부터 수신된 곱 및 상기 제2 승산기의 출력으로부터 수신된 곱을 덧셈한다.
일부 실시 예들에 따르면, 상기 프로세서는 제2 가산기를 더 포함한다. 상기 제2 가산기는 상기 제2 상태에서 상기 제1 승산기의 출력에 연결되도록 구성된다.
본 발명의 실시 예들에 따르면, 프로세싱 회로를 이용하여 계산하기 위한 방법이 제공된다. 상기 프로세싱 회로는 제1 타일, 제2 타일, 메모리, 및 버스를 포함한다. 상기 버스는 상기 메모리, 상기 제1 타일 및 상기 제2 타일에 연결된다. 상기 제1 타일은 제1 웨이트 레지스터, 제2 웨이트 레지스터, 활성화 버퍼, 제1 승산기, 및 제2 승산기를 포함한다. 상기 방법은 웨이트 커널과 활성화 배열의 컨볼루션을 수행하는 단계를 포함한다. 상기 컨볼루션을 수행하는 단계는 활성화 어레이의 제1 서브 어레이와 상기 커넬의 상기 텐서 곱을 형성하는 단계, 활성화 어레이의 제2 서브 어레이와상기 커널의 텐서 곱을 형성하는 단계, 및 활성화 어레이의 제3 서브 어레이와 상기 커널의 텐서 곱을 형성하는 단계를 순서대로 포함한다. 상기 제2 서브 어레이는 제1 방향으로 n 개의 요소에 의해 상기 제1 서브 어레이로부터 오프셋되고, n은 양의 정수이다. 상기 제3 서브 어레이는 상기 제1 방향과 수직하는 제2 방향으로 하나의 요소에 의해 상기 제2 서브 어레이로부터 오프셋된다.
일부 실시 예들에 따르면, 상기 제3 서브 어레이와상기 커널의 텐서 곱을 형성한 후, 상기 컨볼루션을 실행하는 단계는 상기 활성화 어레이의 제4 서브 어레이와 상기 커널의 텐서 곱을 형성하는 단계 및 활성화 어레이의 제5 서브 어레이와 커널의 텐서 곱을 형성하는 단계를 순서대로 포함한다. 제4 서브 어레이는 제1 방향과 반대인 제3 방향으로 m 개의 어레이 요소만큼 제3 서브 어레이로부터 오프셋된다. m은 양의 정수이다. 제5 서브 어레이는 제2 방향으로 하나의 어레이 요소만큼 제4 서브 어레이로부터 오프셋된다.
일부 실시 예들에 따르면, m은 n과 같다.
일부 실시 예들에 따르면, n은 1과 같다.
일부 실시 예들에 따르면, 상기 제1 서브어레이와 상기 커널의 곱들을 형성하는 단계 이후, 상기 컨볼루션을 실행하는 단계는 활성화 어레이의 (n-1)개 각각의 서브 어레이와 상기 커널의 (n-1)개의 곱들(products)을 형성하는 단계를 순서대로 더 포함한다. (n-1) 곱들 중 k번째 곱의 서브어레이는 첫 번째 방향에서 (k+1) 어레이요소만큼 첫 번째 서브 어레이로부터 오프셋된다.
일부 실시 예들에 따르면, 상기 프로세싱 회로는 상기 활성화 버퍼에 연결되고, 그리고 활성화 버퍼에 활성화를 공급하도록 구성된 캐시를 더 포함한다. 상기 캐시는 활성화들 "H+(H+n)*(W-1)-1"를 저장하기에 충분한 크기를 갖는다. H는 제1 방향의 커널의 크기이고, W는 제2 방향의 커널의 크기이다.
일부 실시 예들에 따르면, 상기 활성화 버퍼는 제1 승산기에 연결된 제1 큐(queue) 및 제2 승산기에 연결된 제2 큐를 포함한다. 제1 큐는 제1 레지스터 및 제1 레지스터에 인접한 제2 레지스터를 포함한다. 제1 레지스터는 제1 큐의 출력 레지스터이다. 제1 타일은 제1 상태에서 제1 승산기에서 제1 큐의 출력 레지스터로부터의 활성화와 제1 웨이트를 곱하고, 제2 상태에서 제1 승산기에서 제1 웨이트를 제1 큐의 제2 레지스터로부터의 활성화와 곱하도록 더 구성된다.
일부 실시 예들에 따르면, 상기 제2 상태에서, 상기 제1 큐의 출력 레지스터은 제로를 포함한다.
일부 실시 예들에 따르면, 상기 프로세싱 회로는 제1 가산기를 더 포함한다. 상기 방법은 상기 제1 상태에서 상기 제1 가산기를 상기 제1 승산기의 출력과 상기 제2 승산기의 출력에 연결하고, 상기 제1 가산기가 상기 제1 승산기의 출력으로부터 수신된 결과 및 상기 제2 승산기의 출력으로부터 수신된 결과를 덧셈하는 단계를 더 포함한다.
본 발명의 실시 예들에 따르면, 프로세싱을 위한 수단으로 계산하기 위한 방법이 제공된다. 프로세싱을 위한 상기 수단은 제1 타일, 제2 타일, 메모리, 및 버스를 포함한다. 상기 버스는 상기 메모리, 상기 제1 타일 및 상기 제2 타일에 연결된다. 상기 제1 타일은 제1 웨이트 레지스터, 제2 웨이트 레지스터, 활성화 버퍼, 제1 승산기, 및 제2 승산기를 포함한다. 상기 방법은 웨이트 커널과 활성화 배열의 컨볼루션을 수행하는 단계를 포함한다. 상기 컨볼루션을 수행하는 단계는 활성화 어레이의 제1 서브 어레이와 상기 커널의 상기 텐서 곱을 형성하는 단계, 활성화 어레이의 제2 서브 어레이와 상기 커널의 텐서 곱을 형성하는 단계, 및 활성화 어레이의 제3 서브 어레이와 상기 커널의 텐서 곱을 형성하는 단계를 순서대로 포함한다. 상기 제2 서브 어레이는 제1 방향으로 n 개의 요소만큼 상기 제1 서브 어레이로부터 오프셋되고, n은 양의 정수이다. 상기 제3 서브 어레이는 상기 제1 방향과 수직하는 제2 방향으로 하나의 요소만큼 상기 제2 서브 어레이로부터 오프셋된다.
본 발명의 실시 예들에 따르면, 프로세서가 제공된다. 상기 프로세서는 제1 타일, 제2 타일, 메모리 및 버스를 포함한다. 상기 버스는 상기 메모리, 상기 제1 타일, 및 상기 제2 타일에 연결된다. 상기 제1 타일은 제1 웨이트 레지스터, 제2 웨이트 레지스터, 활성화 버퍼, 제1 승산기, 및 제2 승산기를 포함한다. 상기 프로세서는 제1 커널 웨이트들과 활성화 어레이와의 제1 컨볼루션을 수행하도록 구성된다. 상기 제1 컨볼루션을 실행하는 단계는 상기 활성화 어레이의 제1 서브어레이를 상기 제1 타일 및 상기 제2 타일에게 브로드캐스팅하는 단계, 제1 텐서 곱을 형성하는 단계, 상기 메모리 내 상기 제1 텐서 곱을 저장하는 단계, 상기 활성화 어레이의 제2 서브어레이를 상기 제1 타일 및 상기 제2 타일에게 브로드캐스팅하는 단계, 및 제2 텐서 곱을 형성하는 단계를 포함한다. 상기 제1 텐서 곱은 상기 활성화 어레이의 상기 제1 서브 어레이와 상기 제1 커널 웨이트들의 제1 서브 어레이의 텐서 곱이다. 상기 제2 텐서 곱은 상기 활성화 어레이의 상기 제2 서브 어레이와 상기 제1 커널 웨이트들의 제2 서브 어레이의 텐서 곱이다.
일부 실시 예들에 따르면, 상기 제1 타일은 복수의 웨이트들이 압축된 형태로 인코딩된 데이터 워드를 압축 해제하여, 제1 웨이트 및 제2 웨이트를 추출하고, 제1 웨이트를 제1 웨이트 레지스터에 피드(feed)하고, 그리고 제2 웨이트를 제2 웨이트 레지스터에 피드하도록 구성된 웨이트 압축 해제 유닛을 더 포함한다.
일부 실시 예들에 따르면, 제1 타일은 또한 제2 커널 웨이트들과 활성화 어레이의 제2 컨볼루션을 수행하도록 더 구성된다. 상기 제2 컨볼루션을 수행하는 단계는 활성화 어레이의 제1 서브 어레이와 제2 커널의 제1 부분의 텐서 곱을 형성하는 단계, 활성화 어레이의 제1 서브 어레이와 제2 커널의 제2 부분의 텐서 곱을 형성하는 단계, 및 활성화 어레이의 제2 서브 어레이와 제2 커널의 제1 부분의 텐서 곱을 형성하는 단계를 순서대로 포함한다. 제2 커널의 제1 부분은 제1 웨이트 레지스터에 저장된 웨이트를 포함하고, 제2 커널의 제2 부분은 제2 웨이트 레지스터에 저장된 웨이트를 포함하고, 그리고 상기 제2 커널의 제1 부분은 제1 웨이트 레지스터에 저장된 웨이트를 포함한다.
일부 실시 예들에 따르면, 상기 활성화 버퍼는 제1 승산기에 연결된 제1 큐(queue) 및 제2 승산기에 연결된 제2 큐를 포함한다. 제1 큐는 제1 레지스터 및 제1 레지스터에 인접한 제2 레지스터를 포함한다. 제1 레지스터는 제1 큐의 출력 레지스터이다. 제1 타일은 제1 상태에서 제1 승산기에서 제1 큐의 출력 레지스터로부터의 활성화와 제1 웨이트를 곱하고, 제2 상태에서 제1 승산기에서 제1 웨이트를 제1 큐의 제2 레지스터로부터의 활성화와 곱하도록 더 구성된다.
일부 실시 예들에 따르면, 상기 제2 상태에서, 상기 제1 큐의 출력 레지스터는 제로를 포함한다.
일부 실시 예들에 따르면, 상기 프로세서는 제1 가산기를 더 포함한다. 상기 제1 가산기는 상기 제1 상태에서 상기 제1 승산기의 출력과 상기 제2 승산기의 출력에 상기 제1 큐에서 연결되고 상기 제1 승산기의 출력으로부터 수신된 결과 및 상기 제2 승산기의 출력으로부터 수신된 결과를 덧셈한다.
일부 실시 예들에 따르면, 상기 프로세서는 제2 가산기를 더 포함한다. 상기 제2 가산기는 상기 제2 상태에서 상기 제1 승산기의 출력에 연결되도록 구성된다.
일부 실시 예들에 따르면, 상기 프로세서는 제1 가산기에 연결된 제1 누산기(accumulator)와, 제2 가산기에 연결된 제2 누산기를 더 포함한다. 제1 누산기는 레지스터를 포함한다. 제1 상태에서, 상기 제1 누산기는 상기 제1 가산기로부터 수신된 합계를 상기 제1 누산기의 레지스터의 값에 더하고, 제1 누산기의 누적된 값을 형성하고, 그리고 제1 누산기의 레지스터에 제1 누산기의 누적된 값을 저장한다.
일부 실시 예들에 따르면, 제2 누산기는 레지스터를 포함한다. 제2 상태에서, 상기 제2 누산기는 상기 제2 가산기로부터 수신된 합계를 상기 제2 누산기의 레지스터의 값에 더하고, 제2 누산기의 누적된 값을 형성하고, 그리고 제2 누산기의 레지스터에 제2 누산기의 누적된 값을 저장한다.
일부 실시 예들에 따르면, 상기 프로세서는 제1 큐의 출력 레지스터가 제로를 포함하는지 여부를 결정하고, 제1 큐의 출력 레지스터가 제로를 포함한다는 결정에 응답하여, 제1 타일이 제2 상태에서 동작하게 하는 활성화 제로 스킵 제어 회로를 더 포함한다.
본 발명의 실시 예들에 따르면, 프로세싱 회로로 계산하는 방법이 제공된다. 상기 프로세싱 회로는 제1 타일, 제2 타일, 메모리 및 버스를 포함한다. 상기 버스는 상기 메모리, 상기 제1 타일, 및 상기 제2 타일에 연결된다. 상기 제1 타일은 제1 버퍼 모듈, 제2 버퍼 모듈, 활성화 버퍼, 제1 승산기, 및 제2 승산기를 포함한다. 상기 방법은 제1 커널웨이트들과 활성화 어레이의 제1 컨볼루션을 수행하도록 구성된다. 상기 제1 컨볼루션을 실행하는 단계는 상기 활성화 어레이의 제1 서브어레이를 상기 제1 타일 및 상기 제2 타일에게 브로드캐스팅하는 단계, 제1 텐서 곱을 형성하는 단계, 상기 메모리 내 상기 제1 텐서 곱을 저장하는 단계, 상기 활성화 어레이의 제2 서브어레이를 상기 제1 타일 및 상기 제2 타일에게 브로드캐스팅하는 단계, 제2 텐서 곱을 형성하는 단계, 및 제1 텐서 곱과 제2 텐서 곱을 합하는 단계를 포함한다. 상기 제1 텐서 곱은 상기 활성화 어레이의 상기 제1 서브 어레이와 제1 커널 웨이트들의 제1 서브 어레이의 텐서 곱이다. 상기 제2 텐서 곱은 상기 활성화 어레이의 상기 제2 서브 어레이와 제1 커널 웨이트들의 제2 서브 어레이의 텐서 곱이다.
일부 실시 예들에 따르면, 상기 제1 타일은 웨이트 압축 해제 유닛을 더 포함한다. 상기 방법은 상기 웨이트 압축 해제 유닛이 복수의 웨이트들이 압축된 형태로 인코딩된 데이터 워드를 압축 해제하여, 제1 웨이트 및 제2 웨이트를 추출하는 단계, 제1 웨이트를 제1 웨이트 레지스터에 피드하는 단계, 그리고 제2 웨이트를 제2 웨이트 레지스터에 피드하는 단계를 더 포함한다.
일부 실시 예들에 따르면, 상기 방법은 웨이트들의 제2 커널과 활성화 어레이의 제2 컨볼루션을 수행하는 단계를 더 포함한다. 상기 제2 컨볼루션을 수행하는 단계는 활성화 어레이의 제1 서브 어레이와 제2 커널의 제1 부분의 텐서 곱을 형성하는 단계, 활성화 어레이의 제1 서브 어레이와 제2 커널의 제2 부분의 텐서 곱을 형성하는 단계, 및 활성화 어레이의 제2 서브 어레이와 제2 커널의 제1 부분의 텐서 곱을 형성하는 단계를 순서대로 포함한다. 제2 커널의 제1 부분은 제1 웨이트 레지스터에 저장된 웨이트를 포함하고, 제2 커널의 제2 부분은 제2 웨이트 레지스터에 저장된 웨이트를 포함하고, 그리고 상기 제2 커널의 제1 부분은 제1 웨이트 레지스터에 저장된 웨이트를 포함한다.
일부 실시 예들에 따르면, 상기 활성화 버퍼는 제1 승산기에 연결된 제1 큐(queue) 및 제2 승산기에 연결된 제2 큐를 포함한다. 제1 큐는 제1 레지스터 및 제1 레지스터에 인접한 제2 레지스터를 포함한다. 제1 레지스터는 제1 큐의 출력 레지스터이다. 제1 타일은 제1 상태에서 제1 승산기에서 제1 큐의 출력 레지스터로부터의 활성화와 제1 웨이트를 곱하고, 제2 상태에서 제1 승산기에서 제1 웨이트와 제1 큐의 제2 레지스터로부터의 활성화를 곱하도록 더 구성된다.
일부 실시 예들에 따르면, 상기 제2 상태에서, 상기 제1 큐의 출력 레지스터는 제로를 포함한다.
일부 실시 예들에 따르면, 상기 프로세싱 회로는 제1 가산기를 더 포함한다. 상기 방법은 상기 제1 상태에서 상기 제1 가산기를 상기 제1 승산기의 출력과 상기 제2 승산기의 출력에 상기 제1 큐에서 연결하는 단계 및 상기 제1 가산기가 상기 제1 승산기의 출력으로부터 수신된 결과 및 상기 제2 승산기의 출력으로부터 수신된 결과를 덧셈하는 단계를 더 포함한다.
일부 실시 예들에 따르면, 상기 프로세싱 회로는 제2 가산기를 더 포함한다. 상기 방법은 상기 제2 상태에서 상기 제2 가산기를 상기 제1 승산기의 출력에 연결하는 단계를 더 포함한다.
일부 실시 예들에 따르면, 상기 프로세싱 회로는 제1 가산기에 연결된 제1 누산기(accumulator)와, 제2 가산기에 연결된 제2 누산기를 더 포함한다. 제1 누산기는 레지스터를 포함한다. 상기 방법은, 제1 상태에서, 상기 제1 누산기가 상기 제1 가산기로부터 수신된 합계를 상기 제1 누산기의 레지스터의 값에 더하는 단계, 제1 누산기의 누적된 값을 형성하는 단계, 그리고 상기 제1 누산기가 제1 누산기의 레지스터에 제1 누산기의 누적된 값을 저장하는 단계를 더 포함한다.
일부 실시 예들에 따르면, 제2 누산기는 레지스터를 포함한다. 상기 방법은, 제2 상태에서, 상기 제2 누산기가 상기 제2 가산기로부터 수신된 합계를 상기 제2 누산기의 레지스터의 값에 더하는 단계, 제2 누산기의 누적된 값을 형성하는 단계, 그리고 상기 제2 누산기가 제2 누산기의 레지스터에 제2 누산기의 누적된 값을 저장하는 단계를 더 포함한다.
본 발명의 실시 예들에 따르면, 프로세싱을 위한 수단을 이용하여 계산하는 방법이 제공된다. 상기 프로세싱을 위한 수단은 제1 타일, 제2 타일, 메모리 및 버스를 포함한다. 상기 버스는 상기 메모리, 상기 제1 타일, 및 상기 제2 타일에 연결된다. 상기 제1 타일은 제1 버퍼 모듈, 제2 버퍼 모듈, 활성화 버퍼, 제1 승산기, 및 제2 승산기를 포함한다. 상기 방법은 제1 커널 웨이트들과 활성화 어레이의 제1 컨볼루션을 수행하도록 구성된다. 상기 제1 컨볼루션을 실행하는 단계는 상기 활성화 어레이의 제1 서브어레이를 상기 제1 타일 및 상기 제2 타일에게 브로드캐스팅하는 단계, 제1 텐서 곱을 형성하는 단계, 상기 메모리 내 상기 제1 텐서 곱을 저장하는 단계, 상기 활성화 어레이의 제2 서브어레이를 상기 제1 타일 및 상기 제2 타일에게 브로드캐스팅하는 단계, 제2 텐서 곱을 형성하는 단계, 및 상기 제1 텐서 곱과 상기 제2 텐서 곱을 합하는 단계를 포함한다. 상기 제1 텐서 곱은 상기 활성화 어레이의 상기 제1 서브 어레이와 제1 커널 웨이트들의 제1 서브 어레이의 텐서 곱이다. 상기 제2 텐서 곱은 상기 활성화 어레이의 상기 제2 서브 어레이와 제1 커널 웨이트들의 제2 서브 어레이의 텐서 곱이다.
본 발명의 실시 예들에 따르면, 프로세서가 제공된다. 상기 프로세서는 제1 타일, 제2 타일, 메모리, 입력 버스 및 출력 버스를 포함한다. 상기 입력 버스는 메모리, 제1 타일 및 제2 타일에 연결된다. 상기 제1 타일은 제1 웨이트 레지스터, 제2 웨이트 레지스터, 활성화 버퍼, 제1 승산기 및 제2 승산기를 포함한다. 상기 제1 타일은 웨이트들의 커널로 활성화들의 어레이의 제1 컨볼루션을 수행하도록 구성된다. 상기 메모리는 제1 메모리 뱅크 세트 및 제2 메모리 뱅크 세트를 포함한다. 상기 입력 버스는 제1 방향으로 데이터를 전파하기 위한 제1 세그먼트 버스 및 제1 방향과 반대 방향인 제2 방향으로 데이터를 전파하기 위한 제2 세그먼트 버스를 포함한다. 상기 제1 세그먼트 버스는 제1 스위치 블록 및 제2 스위치 블록을 포함한다. 상기 제1 스위치 블록은 제1 타일 및 제1 메모리 뱅크 세트에 연결된다. 상기 제2 스위치 블록은 제2 타일 및 제2 메모리 뱅크 세트에 연결된다. 상기 제2 세그먼트 버스는 제3 스위치 블록 및 제4 스위치 블록을 포함한다. 상기 제3 스위치 블록은 제1 타일 및 제1 메모리 뱅크 세트에 연결된다. 상기 제4 스위치 블록은 제2 타일 및 제2 메모리 뱅크 세트에 연결된다. 상기 제1 스위치 블록의 입력은 제2 스위치 블록의 출력에 연결된다. 상기 제3 스위치 블록의 출력은 제4 스위치 블록의 입력에 연결된다.
일부 실시 예들에 따르면, 제1 버스 상태에서, 제1 세그먼트 버스는 제1 메모리 뱅크 세트를 제1 스위치 블록을 통해 제1 타일에 연결하고, 제2 스위치 블록을 통해 제2 메모리 뱅크 세트를 제2 타일에 연결하도록 구성된다.
일부 실시 예들에 따르면, 제2 버스 상태에서, 제1 세그먼트 버스는 제2 메모리 뱅크 세트를 제1 스위치 블록과 제2 스위치 블록을 통해 제1 타일에 연결하고, 제2 스위치 블록을 통해 제2 메모리 뱅크 세트를 제2 타일에 연결하도록 더 구성된다.
일부 실시 예들에 따르면, 상기 활성화 버퍼는 제1 승산기에 연결된 제1 큐(queue) 및 제2 승산기에 연결된 제2 큐를 포함한다. 제1 큐는 제1 레지스터 및 제1 레지스터에 인접한 제2 레지스터를 포함한다. 제1 레지스터는 제1 큐의 출력 레지스터이다. 제1 타일은 제1 상태에서 제1 승산기에서 제1 큐의 출력 레지스터로부터의 활성화와 제1 웨이트를 곱하고, 제2 상태에서 제1 승산기에서 제1 웨이트를 제1 큐의 제2 레지스터로부터의 활성화와 곱하도록 더 구성된다.
일부 실시 예들에 따르면, 상기 제2 상태에서, 상기 제1 큐의 출력 레지스터는 제로를 포함한다.
일부 실시 예들에 따르면, 상기 프로세서는 제1 가산기를 더 포함한다. 상기 제1 가산기는 제1 상태에서 상기 제1 승산기의 출력과 상기 제2 승산기의 출력에 연결되고 상기 제1 승산기의 출력으로부터 수신된 곱 및 상기 제2 승산기의 출력으로부터 수신된 곱을 덧셈한다.
일부 실시 예들에 따르면, 상기 프로세서는 제2 가산기를 더 포함한다. 상기 제2 가산기는 상기 제2 상태에서 상기 제1 승산기의 출력에 연결되도록 구성된다.
일부 실시 예들에 따르면, 상기 프로세서는 제1 가산기에 연결된 제1 누산기(accumulator)와, 제2 가산기에 연결된 제2 누산기를 더 포함한다. 제1 누산기는 레지스터를 포함한다. 제1 상태에서, 상기 제1 누산기는 상기 제1 가산기로부터 수신된 합계를 상기 제1 누산기의 레지스터의 값에 더하고, 제1 누산기의 누적된 값을 형성하고, 그리고 제1 누산기의 레지스터에 제1 누산기의 누적된 값을 저장한다.
일부 실시 예들에 따르면, 제2 누산기는 레지스터를 포함한다. 제2 상태에서, 상기 제2 누산기는 상기 제2 가산기로부터 수신된 합계를 상기 제2 누산기의 레지스터의 값에 더하고, 제2 누산기의 누적된 값을 형성하고, 그리고 제2 누산기의 레지스터에 제2 누산기의 누적된 값을 저장한다.
일부 실시 예들에 따르면, 상기 프로세서는 제1 큐의 출력 레지스터가 제로를 포함하는지 여부를 결정하고, 제1 큐의 출력 레지스터가 제로를 포함한다는 결정에 응답하여, 제1 타일이 제2 상태에서 동작하게 하는 활성화 제로 스킵 제어 회로를 더 포함한다.
일부 실시 예들에 따르면, 상기 프로세서는 멀티플렉서(multiplexer)를 더 포함한다. 상기 멀티플렉서는 멀티플렉서의 단일 포트 측에서 제1 승산기에 연결된 입력을 가지며, 멀티플렉서의 멀티 포트 측에서 제1 가산기에 연결된 제1 출력을 가지며, 그리고 멀티플렉서의 멀티 포트 측에서 제2 가산기에 연결된 제2 출력을 갖는다.
본 발명의 실시 예들에 따르면, 프로세싱 회로로 계산하는 방법이 제공된다. 상기 프로세싱 회로는 제1 타일, 제2 타일, 메모리, 입력 버스 및 출력 버스를 포함한다. 상기 입력 버스는 메모리, 제1 타일 및 제2 타일에 연결된다. 상기 제1 타일은 제1 웨이트 레지스터, 제2 웨이트 레지스터, 활성화 버퍼, 제1 승산기 및 제2 승산기를 포함한다. 상기 제1 타일은 웨이트들의 커널로 활성화들의 어레이의 제1 컨볼루션을 수행하도록 구성된다. 상기 메모리는 제1 메모리 뱅크 세트 및 제2 메모리 뱅크 세트를 포함한다. 상기 입력 버스는 제1 방향으로 데이터를 전파하기 위한 제1 세그먼트 버스 및 제1 방향과 반대 방향인 제2 방향으로 데이터를 전파하기 위한 제2 세그먼트 버스를 포함한다. 상기 제1 세그먼트 버스는 제1 스위치 블록 및 제2 스위치 블록을 포함한다. 상기 제1 스위치 블록은 제1 타일 및 제1 메모리 뱅크 세트에 연결된다. 상기 제2 스위치 블록은 제2 타일 및 제2 메모리 뱅크 세트에 연결된다. 상기 제2 세그먼트 버스는 제3 스위치 블록 및 제4 스위치 블록을 포함한다. 상기 제3 스위치 블록은 제1 타일 및 제1 메모리 뱅크 세트에 연결된다. 상기 제4 스위치 블록은 제2 타일 및 제2 메모리 뱅크 세트에 연결된다. 상기 제1 스위치 블록의 입력은 제2 스위치 블록의 출력에 연결된다. 상기 제1 스위치 블록의 입력은 제2 스위치 블록의 출력에 연결된다. 상기 제3 스위치 블록의 출력은 제4 스위치 블록의 입력에 연결된다. 상기 방법은, 제1 버스 상태에서, 제1 스위치 블록에 의해 제1 타일에 제1 메모리 뱅크 세트를 연결하는 단계 및 제2 스위치 블록에 의해 제2 메모리 뱅크 세트를 제2 타일에 연결하는 단계를 포함한다.
일부 실시 예들에 따르면, 상기 방법은, 제2 버스 상태에서, 제1 스위치 블록 및 제2 스위치 블록에 의해, 제1 타일로 제2 메모리 뱅크 세트를 연결하는 단계 및 제2 스위치 블록에 의해 제2 메모리 뱅크 세트를 두 번째 타일로 연결하는 단계를 더 포함한다.
일부 실시 예들에 따르면, 상기 활성화 버퍼는 제1 승산기에 연결된 제1 큐(queue) 및 제2 승산기에 연결된 제2 큐를 포함한다. 제1 큐는 제1 레지스터 및 제1 레지스터에 인접한 제2 레지스터를 포함한다. 제1 레지스터는 제1 큐의 출력 레지스터이다. 제1 타일은 제1 상태에서 제1 승산기에서 제1 큐의 출력 레지스터로부터의 활성화에 의해 제1 웨이트를 곱하고, 제2 상태에서 제1 승산기에서 제1 웨이트를 제1 큐의 제2 레지스터로부터의 활성화에 의해 곱하도록 더 구성된다.
일부 실시 예들에 따르면, 상기 제2 큐에서, 상기 제1 큐의 출력은 제로를 포함한다.
일부 실시 예들에 따르면, 상기 프로세싱 회로는 제1 가산기를 더 포함한다. 상기 방법은 상기 제1 가산기를 상기 제1 승산기의 출력과 상기 제2 승산기의 출력에 상기 제1 큐에서 연결하는 단계 및 상기 제1 가산기가 상기 제1 승산기의 출력으로부터 수신된 결과 및 상기 제2 승산기의 출력으로부터 수신된 결과를 덧셈하는 단계를 더 포함한다.
일부 실시 예들에 따르면, 상기 프로세싱 회로는 제2 가산기를 더 포함한다. 상기 방법은 상기 제2 상태에서 상기 제2 가산기를 상기 제1 승산기의 출력에 연결하는 단계를 더 포함한다.
일부 실시 예들에 따르면, 상기 프로세싱 회로는 제1 가산기에 연결된 제1 누산기(accumulator)와, 제2 가산기에 연결된 제2 누산기를 더 포함한다. 제1 누산기는 레지스터를 포함한다. 상기 방법은, 제1 상태에서, 상기 제1 누산기가 상기 제1 가산기로부터 수신된 합계를 상기 제1 누산기의 레지스터의 값에 더하는 단계, 제1 누산기의 누적된 값을 형성하는 단계, 그리고 상기 제1 누산기가 제1 누산기의 레지스터에 제1 누산기의 누적된 값을 저장하는 단계를 더 포함한다.
일부 실시 예들에 따르면, 제2 누산기는 레지스터를 포함한다. 상기 방법은, 제2 상태에서, 상기 제2 누산기가 상기 제2 가산기로부터 수신된 합계를 상기 제2 누산기의 레지스터의 값에 더하는 단계, 제2 누산기의 누적된 값을 형성하는 단계, 그리고 상기 제2 누산기가 제2 누산기의 레지스터에 제2 누산기의 누적된 값을 저장하는 단계를 더 포함한다.
본 발명의 실시 예들에 따르면, 프로세싱을 위한 수단을 이용하여 계산하는 방법이 제공된다. 상기 프로세싱을 위한 수단은 제1 타일, 제2 타일, 메모리, 입력 버스 및 출력 버스를 포함한다. 상기 입력 버스는 메모리, 제1 타일 및 제2 타일에 연결된다. 상기 제1 타일은 제1 웨이트 레지스터, 제2 웨이트 레지스터, 활성화 버퍼, 제1 승산기 및 제2 승산기를 포함한다. 상기 제1 타일은 웨이트들의 커널로 활성화들의 어레이의 제1 컨볼루션을 수행하도록 구성된다. 상기 메모리는 제1 메모리 뱅크 세트 및 제2 메모리 뱅크 세트를 포함한다. 상기 입력 버스는 제1 방향으로 데이터를 전파하기 위한 제1 세그먼트 버스 및 제1 방향과 반대 방향인 제2 방향으로 데이터를 전파하기 위한 제2 세그먼트 버스를 포함한다. 상기 제1 세그먼트 버스는 제1 스위치 블록 및 제2 스위치 블록을 포함한다. 상기 제1 스위치 블록은 제1 타일 및 제1 메모리 뱅크 세트에 연결된다. 상기 제2 스위치 블록은 제2 타일 및 제2 메모리 뱅크 세트에 연결된다. 상기 제2 세그먼트 버스는 제3 스위치 블록 및 제4 스위치 블록을 포함한다. 상기 제3 스위치 블록은 제1 타일 및 제1 메모리 뱅크 세트에 연결된다. 상기 제4 스위치 블록은 제2 타일 및 제2 메모리 뱅크 세트에 연결된다. 상기 제1 스위치 블록의 입력은 제2 스위치 블록의 출력에 연결된다. 상기 제3 스위치 블록의 출력은 제4 스위치 블록의 입력에 연결된다. 상기 방법은 제1 버스 상태에서, 제1 스위치 블록에 의해 제1 타일에 설정된 제1 메모리 뱅크를 연결하는 단계 및 제2 스위치 블록에 의해 제2 메모리 뱅크를 제2 타일에 연결하는 단계를 포함한다.
일부 실시 예들에 따르면, 프로세서가 제공된다. 상기 프로세서는 제1 타일, 제2 타일, 메모리 및 버스를 포함한다. 상기 버스는 메모리, 첫 번째 타일 및 두 번째 타일에 연결된다. 상기 제1 타일은 제1 웨이트 레지스터, 제2 웨이트 레지스터, 활성화 버퍼, 제1 승산기 및 제2 승산기를 포함한다. 상기 활성화 버퍼는 제1 승산기에 연결된 제1 큐(queue) 및 제2 승산기에 연결된 제2 큐를 포함한다. 제1 큐는 제1 레지스터 및 제1 레지스터에 인접한 제2 레지스터를 포함한다. 제1 레지스터는 제1 큐의 출력 레지스터이다. 제1 타일은 제1 상태에서 제1 승산기에서 제1 큐의 출력 레지스터로부터의 활성화에 의해 제1 웨이트를 곱하고, 제2 상태에서 제1 승산기에서 제1 웨이트를 제1 큐의 제2 레지스터로부터의 활성화에 의해 곱하도록 구성된다.
일부 실시 예들에 따르면, 상기 제2 큐에서, 상기 제1 큐의 출력은 제로를 포함한다.
일부 실시 예들에 따르면, 상기 프로세서는 제1 가산기를 더 포함한다. 상기 제1 가산기는 상기 제1 승산기의 출력과 상기 제2 승산기의 출력에 상기 제1 큐에서 연결되고 상기 제1 승산기의 출력으로부터 수신된 결과 및 상기 제2 승산기의 출력으로부터 수신된 결과를 덧셈한다.
일부 실시 예들에 따르면, 상기 프로세서는 제2 가산기를 더 포함한다. 상기 제2 가산기는 상기 제2 상태에서 상기 제1 승산기의 출력에 연결되도록 구성된다.
일부 실시 예들에 따르면, 상기 프로세서는 제1 가산기에 연결된 제1 누산기(accumulator)와, 제2 가산기에 연결된 제2 누산기를 더 포함한다. 제1 누산기는 레지스터를 포함한다. 제1 상태에서, 상기 제1 누산기는 상기 제1 가산기로부터 수신된 합계를 상기 제1 누산기의 레지스터의 값에 더하고, 제1 누산기의 누적된 값을 형성하고, 그리고 제1 누산기의 레지스터에 제1 누산기의 누적된 값을 저장한다.
일부 실시 예들에 따르면, 제2 누산기는 레지스터를 포함한다. 제2 상태에서, 상기 제2 누산기는 상기 제2 가산기로부터 수신된 합계를 상기 제2 누산기의 레지스터의 값에 더하고, 제2 누산기의 누적된 값을 형성하고, 그리고 제2 누산기의 레지스터에 제2 누산기의 누적된 값을 저장한다.
일부 실시 예들에 따르면, 상기 프로세서는 제1 큐의 출력 레지스터가 제로를 포함하는지 여부를 결정하고, 제1 큐의 출력 레지스터가 제로를 포함한다는 결정에 응답하여, 제1 타일이 제2 상태에서 동작하게 하는 활성화 제로 스킵 제어 회로를 더 포함한다.
일부 실시 예들에 따르면, 상기 프로세서는 멀티플렉서(multiplexer)를 더 포함한다. 상기 멀티플렉서는 멀티플렉서의 단일 포트 측에서 제1 승산기에 연결된 입력을 가지며, 멀티플렉서의 멀티 포트 측에서 제1 가산기에 연결된 제1 출력을 가지며, 그리고 멀티플렉서의 다중 포트 측에서 제2 가산기에 연결된 제2 출력을 갖는다.
일부 실시 예들에 따르면, 상기 활성화 제로 스킵 제어 회로는 제1 상태에서 멀티플렉서를 제어하여 상기 입력을 제1 출력에 연결하고, 제2 상태에서 상기 입력을 제2 출력에 연결하도록 구성된다.
일부 실시 예들에 따르면, 상기 제2 큐는 제1 레지스터 및 제1 레지스터에 인접한 제2 레지스터를 포함한다. 제1 레지스터는 제2 큐의 출력 레지스터이다. 상기 제1 타일은, 제3 상태에서, 제1 승산기에서, 제1 웨이트를 제2 큐의 제2 레지스터로부터의 활성화에 의해 곱하도록 더 구성된다.
일부 실시 예들에 따르면, 프로세싱 회로로 계산하는 방법이 제공된다. 상기 프로세싱 회로는 제1 타일, 제2 타일, 메모리 및 버스를 포함한다. 상기 버스는 메모리, 첫 번째 타일 및 두 번째 타일에 연결된다. 상기 제1 타일은 제1 웨이트 레지스터, 제2 웨이트 레지스터, 활성화 버퍼, 제1 승산기 및 제2 승산기를 포함한다. 상기 활성화 버퍼는 제1 승산기에 연결된 제1 큐(queue) 및 제2 승산기에 연결된 제2 큐를 포함한다. 제1 큐는 제1 레지스터 및 제1 레지스터에 인접한 제2 레지스터를 포함한다. 제1 레지스터는 제1 큐의 출력 레지스터이다. 상기 방법은 제1 상태에서 제1 승산기에서 제1 큐의 출력 레지스터로부터의 활성화에 의해 제1 웨이트를 곱하는 단계 및 제2 상태에서 제1 승산기에서 제1 웨이트를 제1 큐의 제2 레지스터로부터의 활성화에 의해 곱하는 단계를 포함한다.
일부 실시 예들에 따르면, 상기 제2 큐에서, 상기 제1 큐의 출력은 제로를 포함한다.
일부 실시 예들에 따르면, 상기 프로세싱 회로는 제1 가산기를 더 포함한다. 상기 방법은 상기 제1 가산기를 상기 제1 승산기의 출력과 상기 제2 승산기의 출력에 상기 제1 큐에서 연결하는 단계 및 상기 제1 가산기가 상기 제1 승산기의 출력으로부터 수신된 결과 및 상기 제2 승산기의 출력으로부터 수신된 결과를 덧셈하는 단계를 더 포함한다.
일부 실시 예들에 따르면, 상기 프로세싱 회로는 제2 가산기를 더 포함한다. 상기 방법은 상기 제2 상태에서 상기 제2 가산기를 상기 제1 승산기의 출력에 연결하는 단계를 더 포함한다.
일부 실시 예들에 따르면, 상기 프로세싱 회로는 제1 가산기에 연결된 제1 누산기(accumulator)와, 제2 가산기에 연결된 제2 누산기를 더 포함한다. 제1 누산기는 레지스터를 포함한다. 상기 방법은, 제1 상태에서, 상기 제1 누산기가 상기 제1 가산기로부터 수신된 합계를 상기 제1 누산기의 레지스터의 값에 더하는 단계, 제1 누산기의 누적된 값을 형성하는 단계, 그리고 상기 제1 누산기가 제1 누산기의 레지스터에 제1 누산기의 누적된 값을 저장하는 단계를 더 포함한다.
일부 실시 예들에 따르면, 제2 누산기는 레지스터를 포함한다. 상기 방법은, 제2 상태에서, 상기 제2 누산기가 상기 제2 가산기로부터 수신된 합계를 상기 제2 누산기의 레지스터의 값에 더하는 단계, 제2 누산기의 누적된 값을 형성하는 단계, 그리고 상기 제2 누산기가 제2 누산기의 레지스터에 제2 누산기의 누적된 값을 저장하는 단계를 더 포함한다.
일부 실시 예들에 따르면, 상기 프로세싱 회로는 활성화 제로 스킵 제어 회로를 더 포함한다. 상기 방법은 활성화 제로 스킵 제어 회로에 의하여 제1 큐의 출력 레지스터가 제로를 포함하는지 여부를 결정하는 단계 그리고 제1 큐의 출력 레지스터가 제로를 포함한다는 결정에 응답하여, 제1 타일이 제2 상태에서 동작하게 하는 단계를 더 포함한다.
일부 실시 예들에 따르면, 상기 프로세싱 회로는 멀티플렉서를 더 포함한다. 상기 멀티플렉서는 멀티플렉서의 단일 포트 측에서 제1 승산기에 연결된 입력을 가지며, 멀티플렉서의 멀티 포트 측에서 제1 가산기에 연결된 제1 출력을 가지며, 그리고 멀티플렉서의 다중 포트 측에서 제2 가산기에 연결된 제2 출력을 갖는다.
일부 실시 예들에 따르면, 상기 방법은 상기 활성화 제로 스킵 제어 회로에 의하여 멀티플렉서를 제어하는 단계, 제1 상태에서 상기 입력을 제1 출력에 연결하는 단계, 그리고 제2 상태에서 상기 입력을 제2 출력에 연결하는 단계를 더 포함한다.
일부 실시 예들에 따르면, 프로세싱을 위한 수단을 이용하여 계산하는 방법이 제공된다. 상기 프로세싱을 위한 수단은 제1 타일, 제2 타일, 메모리 및 버스를 포함한다. 상기 버스는 메모리, 첫 번째 타일 및 두 번째 타일에 연결된다. 상기 제1 타일은 제1 웨이트 레지스터, 제2 웨이트 레지스터, 활성화 버퍼, 제1 승산기 및 제2 승산기를 포함한다. 상기 활성화 버퍼는 제1 승산기에 연결된 제1 큐(queue) 및 제2 승산기에 연결된 제2 큐를 포함한다. 제1 큐는 제1 레지스터 및 제1 레지스터에 인접한 제2 레지스터를 포함한다. 제1 레지스터는 제1 큐의 출력 레지스터이다. 상기 방법은 제1 상태에서 제1 승산기에서 제1 큐의 출력 레지스터로부터의 활성화에 의해 제1 웨이트를 곱하는 단계 및 제2 상태에서 제1 승산기에서 제1 웨이트를 제1 큐의 제2 레지스터로부터의 활성화에 의해 곱하는 단계를 포함한다.
본 발명의 실시 예에 따르면, 텐서 동작의 속도가 향상되고 전력 소비가 감소된 뉴럴 프로세서가 제공된다.
본 명세서의 특징들 및 장점들은 아래에서 명세서, 청구 범위 및 첨부 도면을 참조하여 이해 될 것이다. 상기 첨부된 도면은 다음과 같다.
도 1a는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서를 도시한 블록도이다.
도 1b는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 1c는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부 내 데이터 흐름(data flow)을 도시한다.
도 1d는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부 내 데이터 흐름을 도시한다.
도 1e는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부 내 데이터 흐름을 도시한다.
도 1f는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부 내 데이터 흐름을 도시한다.
도 1g는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부 내 데이터 흐름을 도시한다.
도 1h는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부 내 데이터 흐름을 도시한다.
도 1i는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 1j는 본 명세서에 개시된 실시 예들에 따라서 3 가지 경우들에 관한 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 1k는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부의 개략도이다.
도 1l는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 1ma는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 1mb는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 1n는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 1o는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서를 도시한 블록도이다.
도 1p는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 1q는 본 명세서에 개시된 실시 예들에 따라서 크기 테이블(size table)이다.
도 1r는 본 명세서에 개시된 실시 예들에 따라서 텐서 다이어그램(tensor diagram)이다.
도 1s는 본 명세서에 개시된 실시 예들에 따라서 텐서 다이어그램이다.
도 1t는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부 내 데이터 흐름을 도시한다.
도 1u는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부 내 데이터 흐름을 도시한다.
도 1v는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 1wa는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 1wb는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부 내 데이터 흐름을 도시한다.
도 1wc는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부 내 데이터 흐름을 도시한다.
도 1wd는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부 내 데이터 흐름을 도시한다.
도 1we는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부 내 데이터 흐름을 도시한다.
도 1x는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 2aa는 본 명세서에 개시된 실시 예들에 따라서 컨볼루션 다이어그램(convolution diagram)이다.
도 2ab는 본 명세서에 개시된 실시 예들에 따라서 컨볼루션 다이어그램이다.
도 2ac는 본 명세서에 개시된 실시 예들에 따라서 컨볼루션 다이어그램이다.
도 2ad는 본 명세서에 개시된 실시 예들에 따라서 컨볼루션 다이어그램이다.
도 2ba는 본 명세서에 개시된 실시 예들에 따라서 컨볼루션 다이어그램이다.
도 2ba는 본 명세서에 개시된 실시 예들에 따라서 컨볼루션 다이어그램이다.
도 2bc는 본 명세서에 개시된 실시 예들에 따라서 컨볼루션 다이어그램이다.
도 2bd는 본 명세서에 개시된 실시 예들에 따라서 컨볼루션 다이어그램이다.
도 2be는 본 명세서에 개시된 실시 예들에 따라서 컨볼루션 다이어그램이다.
도 2bf는 본 명세서에 개시된 실시 예들에 따라서 컨볼루션 다이어그램이다.
도 2bg는 본 명세서에 개시된 실시 예들에 따라서 컨볼루션 다이어그램이다.
도 2bh는 본 명세서에 개시된 실시 예들에 따라서 컨볼루션 다이어그램이다.
도 2bi는 본 명세서에 개시된 실시 예들에 따라서 컨볼루션 다이어그램이다.
도 2bj는 본 명세서에 개시된 실시 예들에 따라서 컨볼루션 다이어그램이다.
도 2bk는 본 명세서에 개시된 실시 예들에 따라서 컨볼루션 다이어그램이다.
도 2bl는 본 명세서에 개시된 실시 예들에 따라서 컨볼루션 다이어그램이다.
도 2bm는 본 명세서에 개시된 실시 예들에 따라서 컨볼루션 다이어그램이다.
도 2c는 본 명세서에 개시된 실시 예들에 따라서 컨볼루션 다이어그램이다.
도 2da는 본 명세서에 개시된 실시 예들에 따라서 컨볼루션 다이어그램이다.
도 2db는 본 명세서에 개시된 실시 예들에 따라서 컨볼루션 다이어그램이다.
도 2dc는 본 명세서에 개시된 실시 예들에 따라서 컨볼루션 다이어그램이다.
도 2dd는 본 명세서에 개시된 실시 예들에 따라서 컨볼루션 다이어그램이다.
도 2de는 본 명세서에 개시된 실시 예들에 따라서 컨볼루션 다이어그램이다.
도 2df는 본 명세서에 개시된 실시 예들에 따라서 컨볼루션 다이어그램이다.
도 2dg는 본 명세서에 개시된 실시 예들에 따라서 컨볼루션 다이어그램이다.
도 2dh는 본 명세서에 개시된 실시 예들에 따라서 컨볼루션 다이어그램이다.
도 2di는 본 명세서에 개시된 실시 예들에 따라서 컨볼루션 다이어그램이다.
도 2dj는 본 명세서에 개시된 실시 예들에 따라서 컨볼루션 다이어그램이다.
도 2dk는 본 명세서에 개시된 실시 예들에 따라서 컨볼루션 다이어그램이다.
도 2dl는 본 명세서에 개시된 실시 예들에 따라서 컨볼루션 다이어그램이다.
도 2dm는 본 명세서에 개시된 실시 예들에 따라서 컨볼루션 다이어그램이다.
도 2dn는 본 명세서에 개시된 실시 예들에 따라서 컨볼루션 다이어그램이다.
도 2do는 본 명세서에 개시된 실시 예들에 따라서 컨볼루션 다이어그램이다.
도 2dp는 본 명세서에 개시된 실시 예들에 따라서 컨볼루션 다이어그램이다.
도 2dq는 본 명세서에 개시된 실시 예들에 따라서 컨볼루션 다이어그램이다.
도 2dr는 본 명세서에 개시된 실시 예들에 따라서 컨볼루션 다이어그램이다.
도 2ds는 본 명세서에 개시된 실시 예들에 따라서 컨볼루션 다이어그램이다.
도 2dt는 본 명세서에 개시된 실시 예들에 따라서 컨볼루션 다이어그램이다.
도 2dv는 본 명세서에 개시된 실시 예들에 따라서 컨볼루션 다이어그램이다.
도 2dw는 본 명세서에 개시된 실시 예들에 따라서 컨볼루션 다이어그램이다.
도 2dx는 본 명세서에 개시된 실시 예들에 따라서 컨볼루션 다이어그램이다.
도 2e는 본 명세서에 개시된 실시 예들에 따라서 리드 테이블(read table)이다.
도 2f는 본 명세서에 개시된 실시 예들에 따라서 리드 테이블이다.
도 2ga는 본 명세서에 개시된 실시 예들에 따라서 컨볼루션 다이어그램이다.
도 2gb는 본 명세서에 개시된 실시 예들에 따라서 컨볼루션 다이어그램이다.
도 2ha는 본 명세서에 개시된 실시 예들에 따라서 컨볼루션 다이어그램이다.
도 2hb는 본 명세서에 개시된 실시 예들에 따라서 컨볼루션 다이어그램이다.
도 2hc는 본 명세서에 개시된 실시 예들에 따라서 컨볼루션 다이어그램이다.
도 2hd는 본 명세서에 개시된 실시 예들에 따라서 컨볼루션 다이어그램이다.
도 3aa는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 3ab는 본 명세서에 개시된 실시 예들에 따라서 데이터 플로우를 도시한다.
도 3ac는 본 명세서에 개시된 실시 예들에 따라서 데이터 플로우를 도시한다.
도 3ad는 본 명세서에 개시된 실시 예들에 따라서 데이터 플로우를 도시한다.
도 3ae는 본 명세서에 개시된 실시 예들에 따라서 데이터 플로우를 도시한다.
도 3af는 본 명세서에 개시된 실시 예들에 따라서 데이터 플로우를 도시한다.
도 3ag는 본 명세서에 개시된 실시 예들에 따라서 데이터 플로우를 도시한다.
도 3ah는 본 명세서에 개시된 실시 예들에 따라서 데이터 플로우를 도시한다.
도 3ai는 본 명세서에 개시된 실시 예들에 따라서 데이터 플로우를 도시한다.
도 3aj는 본 명세서에 개시된 실시 예들에 따라서 데이터 플로우를 도시한다.
도 3ak는 본 명세서에 개시된 실시 예들에 따라서 데이터 플로우를 도시한다.
도 3ba는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부의 블록도를 도시한다.
도 3bb는 본 명세서에 개시된 실시 예들에 따라서 데이터 다이어그램(data diagram)이다.
도 3bc는 본 명세서에 개시된 실시 예들에 따라서 데이터 다이어그램이다.
도 3ca는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 3cb는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 3da는 본 명세서에 개시된 실시 예들에 따라서 데이터 다이어그램이다.
도 3ea는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 3eb는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 3fa는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 3fb는 본 명세서에 개시된 실시 예들에 따라서 데이터 다이어그램이다.
도 3fc는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 3ga는 본 명세서에 개시된 실시 예들에 따라서 데이터 다이어그램이다.
도 3gb는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 3gc는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 3gd는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 3ha는 본 명세서에 개시된 실시 예들에 따라서 데이터 다이어그램이다.
도 3hb는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 3hc는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 3hd는 본 명세서에 개시된 실시 예들에 따라서 데이터 다이어그램이다.
도 3ia는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 3ib는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 3ic는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 3id는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 3ie는 본 명세서에 개시된 실시 예들에 따른 데이터 다이어그램이다.
도 3if는 본 명세서에 개시된 실시 예들에 따른 데이터 다이어그램이다.
도 3ja는 본 명세서에 개시된 실시 예들에 따른 데이터 플로우 다이어그램이다.
도 3jb는 본 명세서에 개시된 실시 예들에 따라서 데이터 플로우를 도시한다.
도 3jc는 본 명세서에 개시된 실시 예들에 따라서 데이터 플로우를 도시한다.
도 3jd는 본 명세서에 개시된 실시 예들에 따라서 데이터 플로우를 도시한다.
도 3ka는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 3kb는 본 명세서에 개시된 실시 예들에 따라서 데이터 다이어그램이다.
도 3la는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 3lb는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 3lc는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 3ld는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 3ma는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 3mb는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 3na는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 3oa는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 3ob는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 3oc는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 3pa는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 3pb는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 3pc는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 4aa는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 4ab는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 4ac는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 4ad는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 4ae는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 4af는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 4ag는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 4ah는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 4aj는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 4ak는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 4al는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 4am는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 4an는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 4ba는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 4bb는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 4bc는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 4bd는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 4ca는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 4cb는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 4cc는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 4da는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 4db는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 4dc는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 4ea는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 4eb는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 4ec는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 4fa는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 4fb는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 4g는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 4h는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 5a는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 5b는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 5c는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 5d는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 5e는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 5f는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 5g는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 6는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
첨부된 도면들과 관련하여 아래에 설명되는 상세한 설명은 본 개시에 따라 제공되는 뉴럴 프로세서의 예시적인 실시 예들의 설명으로서 의도되고, 본 개시가 구성되거나 이용될 수 있는 유일한 형태들을 나타내도록 의도되지 않는다. 본 설명은 도시된 실시 예들과 관련하여 본 개시의 특징들을 설명한다. 그러나, 동일하거나 동등한 기능 및 구조는 본 개시의 범위 내에 포함되도록 의도된 상이한 실시 예에 의해 이루어 질 수 있도록 의도될 수 있다. 본 명세서의 다른 곳에 인용된 바와 같이, 유사한 구성요소의 번호는 유사한 구성요소 또는 특징을 나타내도록 의도된다.
도 1a는 일부 실시 예들에 따른 뉴럴 프로세서(100)의 하이레벨 블록도를 도시한다. 출력 특징 맵(output feature map (OFM))을 형성하기 위해, 뉴럴 프로세서는 웨이트(weight, 가중치)들의 다차원 적 어레이(또는 텐서)와 입력 특징 맵(IFM; Input Feature Map)(또는, "활성화들"의 텐서)의 컨벌루션 또는 텐서 곱을 효율적으로 계산하도록 구성될 수 있다. 뉴럴 프로세서는 또한 특징 맵 풀링(pooling) 및/또는 활성화 함수를 계산하도록 구성될 수 있으나, 명확성 및 간결성을 위해, 풀링 및 활성화 함수는 본 개시에서 크게 논의되지 않는다.
복수의 SRAM 뱅크 세트들(109)(각각은 여러개, 예를 들어, 도 4ab 및 도 4ac에서의 4개의 SRAM 뱅크(108)를 포함)는 후속 계산을 위해 SRAM 뱅크 세트들 (109)에 저장된 입력 활성화 맵들을 타일들(102)로 가져 오는 IFM(input feature map) 전달 패브릭(104)을 통해 멀티플라이-앤-리듀스(Multiply-and-Reduce, 곱하기-그리고-축소하기, 또는 “MR”) 타일들(102)(이하에서 보다 상세하게 설명됨)에 연결될 수 있다. 이하에서 보다 상세히 논의되는 바와 같이, 타일들(102)은 승산기(곱셈기) 유닛(MU; Multiplier Unit)들(103)의 어레이를 포함한다. 또한, 타일들(102)은 저장을 위해 타일들(102)로부터 SRAM 뱅크 세트들(109)로 계산된 결과들을 전송하는 OFM(output feature map) 전달 패브릭(106)을 통해 SRAM 뱅크 세트들(109)에 연결된다.
IFM 전달 패브릭(104)은 세그먼트(segment, 분할)된 버스일 수 있고(이하에서 논의되는 바와 같이), 결과적으로, SRAM 뱅크 세트들(109) 각각은, 이하에서 보다 상세하게 논의되는 바와 같이, 타일들(102) 중 하나와 관련될 수 있다. 중앙 컨트롤러(110)는 유틸리티 버스(112)를 통해 시스템 내 레지스터들을 제어하는 제어 워드들을 공급할 수 있다. 데이터는 AXI (Advanced Extensible Interconnect by ARM Ltd) 인터커넥트(114)를 통해 뉴럴 프로세서로 전달 될 수 있고, 뉴럴 프로세서에 의해 수행된 처리 동작의 결과들은 AXI 인터커넥트(114)를 통해 유사하게 회수(retrieve)될 수 있다. 마이크로 컨트롤러(MCU; micro-controller)(116)는 뉴럴 프로세서 및 외부 메모리(120) 사이의 DMA 컨트롤러(118)를 사용하여 데이터 전송을 조정 및 실행할 뿐만 아니라, 중앙 컨트롤러를 시기 적절한 방법으로 구성함으로써 계산을 조정하는데 사용될 수 있다.
각각의 타일(102)은 MR(multiply-and-reduce) 열(133)의 MR(multiply-and-reduce) 어레이(122)를 포함할 수 있다. 도 1b는, 일부 실시 예들에서, MR 어레이(122)를 도시한다. 각각의 MR 어레이는 8개의 MR 열(133)을 포함한다. 각각의 MR 열(133)은 16개의 승산기(곱셈기) 유닛(MU; multiplier unit)(103)들을 포함 할 수 있고, 2개의 가산기 트리들(128A 및 128B)을 더 포함할 수 있다. 명확성을 위해 도 1b는 16개의 MU들(103) 중 4개만을 도시했음에 유의해야 한다.
각각의 MU(103)는 복수의 레지스터들, 예를 들어 "웨이트(가중치) 레지스터(weigh register)"로 지칭 될 수 있는 18개의 9-비트 레지스터들을 포함하는 레지스터 파일(127), 및 승산기(126)를 포함할 수 있다. 승산기(126)는 입력 활성화(input activation)들에 웨이트들을 곱한다. 이어서, 각각의 MR 열(133)에서의 가산기 트리들(128A 및 128B)는 열(column) 내에서 16개의 MU들로부터의 결과 곱들을 합산하여 압축(요약)(즉, 감소)하여 내적(dot product)을 형성한다. 합산(요약)은 이하에서 보다 상세하게 설명되는 특정 방식으로 수행될 수 있다.
또한, 각각의 타일(102)은 IFM 캐시(139) 및 활성화 브로드캐스트 유닛(ABU; Activation Broadcast Unit)(141)을 포함할 수 있다. IFM 캐시(139)는 SRAM으로부터 수신된 IFM 값들을 캐싱(caching)함으로써 입력 특징 맵들에 대한 SRAM 리드들을 감소시키는 것을 목적으로 한다. 각각의 MR 열(133)이 16개의 MU(103)들을 포함하는 것처럼, IFM 캐시(139)는 16개의 병렬 "활성화 레인들(active lanes)"을 포함하고, 각 활성화 레인(137)은 MR 어레이(122)에서 승산기 유닛들의 "행(row)"에 효과적으로 대응한다.
활성화 브로드캐스트 유닛은 입력 활성화들의 준비를 담당할 수 있다. 준비 프로세스에서 제1 단계는 필요한 컨볼루션 시퀀스에 따라 IFM 캐시(139)로부터 IFM 활성화 버퍼(124)로 입력 활성화들을 페치하는 동시에, 희소 활성화 계산 기능(sparse activation computation functionality)을 구현할 수 있을 때 제로-값의 활성화(zero-valued activation)들을 생략하는 단계를 포함한다. 희소 활성화 계산 특징은 선택적으로 비활성화 될 수 있으며, 그로 인하여 "덴스(dense)" 텐서 계산 모드가 된다. 준비 프로세스에서 제2 단계는 숫자 타입의 활성화들을 부호-및-8비트-크기(sign-and-8bit-magnitude) 포맷(format)으로 변환하는 단계를 포함하고, 이는 타입 변환기(135)를 이용하여 8비트를 초과하는 비트 폭을 갖는 데이터 타입들을 일련의 부호-및-8비트-크기 값들로 분할(partitioning)하는 단계를 포함한다. 활성화들이 구글 텐서 플로우 (Google TensorFlow)에 의해 지원되는 “제로 포인트(zero point)”를 사용하여 인코딩되면, 활성화들이 부호-및-8비트-크기 포맷으로 변환되기 전에 제로-포인트 상수 값(Z)이 활성화들에 추가될 수 있다.
각각의 MR 열(133)이 16개의 MU들(103)을 포함하는 것처럼, ABU(141), IFM 버퍼(124) 및 타입 변환기(135)는 각각 16개의 레인들을 포함한다. 결과적으로 변환된 16개의 활성화 값들은 MR 어레이(122)와 병렬로 브로드캐스트(broadcast)되고, 각각의 활성화 레인은 8개의 승산기 유닛들의 대응하는 행에 입력 활성화 값을 가져온다.
또한, 각각의 MR 열은 가산기 트리들(128A 및 128B) 각각에 대해 하나씩 누산기들(130A 및 130B)를 포함한다. 본 명세서에서 사용된 바와 같이, "누산기(accumulator)"는 레지스터의 컨텐츠(content)들에 입력 값을 추가하고 레지스터의 컨덴츠들을 합계로 오버라이트(overwrite)하도록 구성된 가산기 및 레지스터의 조합이다.
상술된 바와 같이, MR 어레이(122) 내의 승산기 유닛들은 복수의 행들, 예를 들어 16 개의 행들로 배열될 수 있고, 도 1b는 명확성을 위해 16개 중 4개의 행들만을 도시하며, 열들(또는 "OFM 채널들"), 예를 들어 도 1b에서 도시된 8개의 열들(이 중 2개의 라벨된(labeled) O0" 및 "O7"이 도시됨)로 배열될 수 있다.
16의 길이를 갖는 IFM 벡터는 “IFM 슬라이스”로 지칭된다. IFM 슬라이스는 연관된 IFM 텐서, 예를 들어, IFM[x,y,d:d+15]에 대한 인덱스들로서 이와 연관된 뎁스(깊이, depth) 채널 인덱스(d) 및 연관된 평면 좌표 (x, y)를 가질 수 있다. 일반적인 경우에, 타일(102)은 3D IFM 텐서를 포함하는 온-칩 SRAM으로부터 한 번에 하나의 IFM 슬라이스를 수신하고, 각각의 입력 IFM 슬라이스는 입력 레이어(input layer)의 평면 위치 (x, y)에서의 인덱스(d)에서 인덱스(d+15)까지의 16개의 뎁스 채널들에 대한 값들을 포함한다.
유사하게, 8의 길이를 갖는 OFM 벡터는 "OFM 슬라이스"로 지칭된다. OFM 슬라이스는 연관된 OFM 텐서(예를 들어, OFM[x, y, d:d+7])에 대한 인덱스들로서 연관된 뎁스 채널 인덱스(d) 및 평면 좌표(x, y)를 가질 수 있다. 일반적인 경우에, 타일(102)은 OFM 슬라이스들을 출력으로서 생성한다. 이하에서 볼 수 있는 바와 같이, 타일이 정지되지(stalled) 않으면, 일부 실시 예들에서, 출력 레이트는 클럭 당 하나의 OFM 슬라이스에서, 예를 들어, 클럭 당 최대 2개의 OFM 슬라이스들까지 변할 수 있다. SRAM에 저장하기 위해 OFM 전달 패브릭(106)을 통해 최종 OFM 벡터 결과를 전송하기 전에, OFM 벡터 계산을 완료하기 위하여 타일들(102)로부터의 타일(102) OFM 출력 벡터들(OFM 슬라이스들)은 감소 패브릭(111)에 의해 추가로 감소될 필요가 있음에 유의해야 한다.
IFM 및 OFM 텐서들은 모두 제4 "배치(batch)" 차수를 가질 수도 있음에 유의해야 하지만, 뉴럴 프로세서의 목적은 뉴럴 네트워크 모델 실시간 추론을 가속화하는 것이고, 뉴럴 네트워크 모델 훈련과 달리, 실시간 추론은 일반적으로 1의 배치 크기(batch size)에 대하여 수행된다. 설명의 편의를 위해, 배치 디멘션(차수)(batch dimension)은 이하의 설명에서 대부분 생략될 것이고 배치 디멘션의 세부 사항은 추후에 개별적으로 설명될 것이다.
뉴럴 프로세서(100)는 동기 로직 내에서 구현 될 수 있고, 각각의 MR 열(133)은 전체적으로 하나의 클럭 도메인 내에 있을 수 있다. 일부 실시 예들에서, 동작시, 각각의 동작 사이클(cycle) 동안(예를 들어, 각각의 클럭 사이클 동안), 16개의 승산기들(126) 각각은 그것의 입력에서의 2개의 요소들로부터 각각의 곱(product)을 형성 할 수 있고, 가산기들(128) 각각은 그것의 입력들에서 이러한 16개의 곱들 일부의 합을 형성할 수 있으며(도 1b에서 4개의 레인들에 대하여 도시된 바와 같이), 그리고 각각의 누산기(130)의 가산기는 (i) 누산기9130)의 레지스터의 현재 값에 (ii) 대응하는 가산기(128)의 출력을 더한 합계를 형성할 수 있다. 다음 클럭 사이클의 시작에서, 각각의 누산기(130)의 각각의 가산기의 출력은 누산기(130)의 레지스터에 기입될 수 있다.
일부 실시 예들에서, 계산은 파이프 라인으로 처리될 수 있고, 추가적인 레지스터들(즉, 플립-플롭들의 어레이들)이, 예를 들어, 회로가 동작되는 클럭 속도에서 적절한 타이밍 마진을 제공하기 위해, 도 1b에서 도시된 요소들 사이에 존재할 수 있다. 이러한 실시 예에서 처리량은 동일할 수 있으나(즉, 추가적인 레지스터가 없는 경우와 동일, 예를 들어, 클럭 주기 당 하나의 곱셈 및 덧셈), (i) 승산기들(126)에 피드(feed)되는 입력 데이터 및 (ii) 누산기(130)의 레지스터에 기입되는 곱셈들 및 덧셈들의 최종 결과 사이의 레이턴시는 더 클 수 있다(예를 들어, 여러 개의 클럭 사이클들).
도 1c 내지 도 1h는 동작의 예시를 도시한다. 상기 동작에서, 뉴럴 프로세서는 IFM의 요소가 제로일 때, 제로로 곱셈을 달리 수행하는 승산기를 이용하기 위해, 특정 곱셈 및 덧셈 연산들의 순서를 바꾸어 먼저 진행시킴으로써, IFM에서의 희소성(sparsity)을 활용하여 계산의 완료를 가속화할 수 있다. IFM은 SRAM 뱅크 세트(109)에 저장될 수 있고, SRAM 뱅크 세트(109)로부터의 데이터의 페칭(fetching)은 활성화 버퍼(124)가 복수의 큐들로서 동작하도록 스케줄링 될 수 있고, 각각의 큐는 도 1b에 도시된 데이터의 하나의 행에 대응하고, 각각의 큐는 MR 어레이(122)의 각각의 레인을 피딩(feeding)한다.
설명의 명확성을 위해, SRAM 및 활성화 버퍼(124) 사이의 IFM 캐시(139)는 비활성화(disable) 및 바이패스(bypass)된 것으로 가정한다. 활성화 데이터 타입은 unit8이고 웨이트(가중치) 데이터 타입은 int8이며, 이 경우 타입 변환기(135)는 변경되지 않고 활성화 값들을 통과시키도록 작동하고, MU(103)에서의 곱셈은 1 클럭(즉, 1 클럭 사이클)을 취하는 것으로 가정한다. SRAM 뱅크 세트(109)는 예시적인 동작의 시작에서 도 1b에 도시된 일부 샘플 IFM 값들을 포함하고 오직 하나의 타일이 사용되는 것으로 가정한다.
또한, 16개의 IFM 레인들, 8개의 OFM 열들, 및 10개의 a 내지 j의 IFM 입력 벡터들에 대응하는 웨이트 텐서 W[0...15,0...7, a...j]가 대응하는 MU 레지스터 파일들로 미리-로드(pre-load)된것으로 가정한다.
일단 예시적인 동작이 시작하면, 도 1c로부터 도시된 바와 같이, 예시적인 실시 예에서, 2개의 IFM 벡터들 a[] 및 b[](도 1c에서 가장 오른쪽에 있는 2개의 열들)은 활성화 버퍼(124) 내로 페치되고, 따라서 활성화 버퍼(124)의 제1 열(즉, 도시된 오른쪽 열 a[])은 IFM의 제1 벡터(요소들 a0 내지 a3으로 구성됨)를 포함하고, 활성화 버퍼(124)의 제2 열(즉, 도시된 왼쪽 열 b[])은 IFM의 제2 벡터(요소들 b0 내지 b3로 구성되고, IFM을 형성하는 어레이를 식별하는데 사용되는 표기법에서 b1=0)를 포함한다. 도 1c에서, 제2 큐는 제1 요소(MR 어레이(122)에서 가장 가까운)로서 a1을 포함하고, 제2 큐는 제2 요소(즉, b1=0)로서 제로(0)를 포함한다.
활성화 버퍼(124)의 전면에 있는 IFM 벡터 a[0...3]은 MR 어레이(122)로 브로드캐스트(broadcast) 되며, 즉, IFM 값(a0)은 최상위 행의 8개의 승산기들(126) 각각에 대한 입력으로서 최상위 활성화 레인을 통해 브로드캐스트 된다. 동시에, 0 내지 7 열의 최상단 행의 승산기들은 각각의 승산기들(126)에 대한 제2 입력으로서 각각의 로컬 레지스터 파일들로부터 웨이트들 W[0,0...7,a]를 수신한다.
유사하게, 값(a1)은 상단에서 두 번째 활성화 레인을 통해 승산기들의 상단에서 두 번째 행에 대한 입력으로서 브로드캐스트 된다. 동시에, 0 내지 7 열의 상단에서 두 번째 행의 승산기들은 각각의 승산기들에 대한 제2 입력으로서 그것들의 각각의 로컬 레지스터 파일들로부터의 웨이트들 W[1,0...7,a]을 각각 수신한다.
동작에서, 각각의 웨이트들과 IFM의 제1 벡터(요소 a0 내지 a3로 구성됨)의 곱들은 승산기들(126)의 (16 x 8) 어레이 각각에서 형성되고, 원하는 내적에 대응하는 곱들의 합들은 제1 가산기들(128A)에 형성되고 그리고 제1 누산기들(130A)에 저장될 수 있다. 원하는 내적에 대응하는 곱들은 다음과 같다:
SA,0 = a0*w0,0,a + a1*w1,0,a + a2*w2,0,a + a3*w3,0,a
...
SA,7 = a0*w0,7,a + a1*w1,7,a + a2*w2,7,a + a3*w3,7,a
이 때, IFM a[]에 대응하는 OFM 출력 벡터의 계산이, 누산기(130A)에서 이용 가능한 결과(도 1c에서 SA,0…7로 표시됨)와 함께 완료되고, OFM 전달 패브릭(106)으로 출력되도록 준비된다(그 다음에 각각의 열의 누산기(130A)는 클리어(clear)될 수 있다).
도 1d에서, IFM의 제1 벡터가 처리된 후, IFM의 제3 벡터(요소들 c0 내지 c3로 구성되고, c2=0)는 활성화 버퍼(124)에서 리드된다. IFM의 제2 벡터(요소들 b0 내지 b3로 구성되고, b1=0)의 모든 요소들과 웨이트들의 곱을 형성하는 대신에(이는 제2 레인의 각각의 승산기(126)에서 제로 및 각각의 웨이트의 곱을 형성하는 것을 수반함), IFM의 제3 벡터의 제2 요소(즉, 요소 c1)는 순서를 바꾸어 먼저 진행되고 제2 레인의 각각의 승산기(126)에서의 각각의 웨이트로 곱해진다.
동시에, 레인들(0, 2, 및 3)에서의 승산기들은 그것들의 각각의 로컬 레지스터 파일들로부터 대응하는 웨이트들 W[0,0...7,b], W[2,0...7,b] 및 W[3,0...7,b]을 수신한다. 그러나, 활성화 b1=0이 스킵(skip)되어 레인 1이 순서를 바꾸어 동작하기 때문에, 레인 1의 승산기들은, IFM 벡터("픽셀") b와 관련된 것이 아니라, IFM 벡터("픽셀") c와 관련된 웨이트 W[0,0...7,c]를 수신한다.
타일(122)은 이제 2개의 픽셀을 동시에 처리하므로(픽셀 b 및 픽셀 c의 일부), 열에서 곱셈 곱들을 더하는 것은 잘못된 결과를 유도할 수 있다. 정확한 결과를 얻기 위해, 2개의 가산기 트리들 중 하나는 픽셀 b에 대한 내적을 계산하는데 사용하는 반면에, 다른 가산기 트리를 픽셀 c에 대한 내적의 계산을 시작하기 위해 사용한다.
제2 레인의 각 승산기(126)에 의해 형성된 곱은 각각의 제2 가산기(128B) (도 1c에서 SB,0…7로 표시됨)에 피드되는 반면, 다른 레인들의 승산기들(126)에 의해 형성된 곱들은 각각의 제1 가산기(128A)에 피드된다. 요소(c1)의 미리 순서를 바꾼 이동은 활성화 버퍼(124)에서 "홀(hole)"을 형성하며, 이는 후속 클럭 사이클에서 미리 다른 요소의 순서를 바꾸어 진행할 수 있는 이점이 있다(도 1e에 도시된 바와 같이, 요소(d1)이 미리 순서를 바꾸어 진행됨).
따라서, 각각의 웨이트들과 IFM의 제2 벡터의 논제로(nonzero) 요소들의 곱들이 계산되고 그들의 합이 각 열의 제1 누산기(130A)에 있으면, 각 열의 제1 누산기(130A)는 열의 웨이트 벡터와 IFM의 제2 벡터(b[])의 내적을 포함하고, 그리고 OFM 전달 패브릭(106)으로 출력될 수 있다(그 다음에 각 열의 제1 누산기(130A)는 클리어 될 수 있다).
SA,0 = b0*w0,0,b + b2*w2,0,b + b3*w3,0,b
SA,7 = b0*w0,7,b + b2*w2,7,b + b3*w3,7,b
이 때, 각 열의 제2 누산기(130B)는 각각의 웨이트 벡터와 IFM의 제3 벡터(c1)의 내적의 하나의 항(term)만을 포함한다.
SB,0 = c1*w1,0,c
SB,7 = c1*w1,7,c
도 1e를 참조하면, 후속 동작에서(예를 들어, 다음 클럭 사이클 동안), 웨이트 벡터들과 IFM의 제3 벡터의 요소들(c0, c3)의 나머지 곱들이 형성될 수 있고(MR 어레이(122)의 각 열의 제1 및 제4 승산기들(126)에 의해), 그리고, 제2 누산기(130B)에서, 제2 누산기(130B)에 이미 저장된 하나의 곱에 추가되어, 제2 누산기(130B)에서, 각각의 웨이트 벡터들과 IFM의 제3 벡터(c[])의 내적들을 완성할 수 있다.
SB,0 = c0*w0,0,c + c1*w1,0,c + c3*w3,0,c
SB,7 = c0*w0,7,c + c1*w1,7,c + c3*w3,7,c
웨이트 벡터들과 IFM의 제4 벡터(요소들 d0 내지 d3으로 구성됨, d0 = d4 = 0)의 내적들은, d1(c1과 관련된 곱이 이전 사이클에 대하여 수행되었기 때문에 활성화 버퍼 124에 "홀(hole)"을 남김) 및 d2(c2 = 0이기 때문) 모두 순서를 미리 바꾸어 진행함으로써, 동시에 계산될 수 있다.
SA,0 = d1*w1,0,d + d2*w2,0,d
SA,7 = d1*w1,7,d + d2*w2,7,d
이 시점에서, IFM 벡터 c[] 및 IFM 벡터 d[] 모두에 대한 OFM의 계산이 완료된다.
유사한 방식으로, 도 1f에서 도시된 바와 같이 활성화 버퍼가 상보적 희소성(complementary sparsity)을 갖는 2개의 벡터들 e[] 및 f[]를 포함하면, MR 열(122)의 각 열은 동시에 2개의 내적들을 형성할 수 있다. 도 1f의 예시에서, 예를 들어, 각 가중치(웨이트) 벡터와 IFM의 제5 벡터(요소들 e0 내지 e3로 구성됨, e0 = e1= 0)의 내적은 각 가중치 벡터와 IFM의 제6 벡터(요소들 f0 내지 f3으로 구성됨, f2 = f3 = 0)의 내적과 동시에 형성될 수 있고, 제6 벡터의 논-제로(non-zero) 요소들은 모두 순서를 바꾸어 먼저 진행될 수 있다.
도 1g는 IFM의 제7 벡터 g[](요소들 g0 내지 g3으로 구성됨, g1 = g2 = g3 = 0)가 활성화 버퍼(124)의 제1 열에 있고 IFM의 제8 벡터(요소들 h0 내지 h3으로 구성됨, h2 = h3 = 0)가 활성화 버퍼(124)의 제2 열에 있는 상태를 도시한다. 도 1g는, IFM의 제8 벡터의 (논-제로) 요소들의 순서를 바꾸어 먼저 진행함으로써, 각각의 대응하는 웨이트와 IFM의 제8 벡터 h[]의 내적이 각각의 대응하는 웨이트와 IFM의 제7 벡터의 내적과 동시에 형성되어, IFM의 제7 벡터의 (논-제로) 요소들과 동시에 그들이 처리되는 방법을 도시한다. IFM의 제8 벡터의 (논-제로) 요소들 중 하나(h0)가 IFM의 제7 벡터의 (논-제로) 요소(g0)와 동일한 레인에 있기 때문에, IFM의 제8 벡터의 (논-제로) 요소들 각각은 이러한 요소들이 먼저 순서를 바꾸어 진행될 수 있도록 MR 열(122)의 인접한 레인으로 시프트(shift)된다.
이와 같이, 각 열의 상단에서 두 번째 승산기(126)(이는 이 위치에는 제로 요소를 가지기 때문에, IFM의 제7 벡터 g[]에는 사용되지 않음)로 IFM의 제8 벡터 h[]의 제1 요소(h0)를 피드하고 그리고 각 열의 제3 승산기(126)(이는 또한 IFM의 제7 벡터 g[]에도 사용되지 않음)로 IFM의 제8 벡터 h[]의 제2 요소(h1)를 피드하는 것은, IFM의 제8 벡터의 (논-제로) 요소들이 IFM의 제7 벡터의 (논-제로) 요소들과 동시에 처리되도록 한다. 또한, 웨이트 벡터들의 대응하는 요소들도 시프트된다. 구체적으로, 최상단 레인과 연관된 각 승산기 유닛은 2개의 웨이트들을 페치하고, 하나의 웨이트는 도 1g에서 w0,0..7,g로 라벨링된 g0과 관련되고, 여기서 0..7은 대응하는 열을 가리키고, 그리고 다른 웨이트는 도 1g에서 w0,0..7,h로 라벨링된 h0과 관련된다. 각 웨이트 w0,0..7,g는 g0를 수신하는 최상단 레인 내 그것의 각각의 승산기(126)에 피드된다. 그러나, 각 웨이트 w0,0..7,h는 하나의 레인 아래로 시프트되고, 그리고 h0를 수신하는 상단에서 두 번째 레인의 연관된 승산기(126)로 피드된다. 마지막으로, 상단에서 두 번째 레인에서의 승산기 유닛들은 각각 h1과 관련된 웨이트 w1,0..7.h를 페치하고, 이러한 웨이트들을 하나의 레인 아래, h1을 수신하는 상단에서 세 번째 레인으로 건너서시프트한다.
도 1g에 도시된 상태에서, 하단 레인 내에서 각 MR 열(122)의 각 승산기(126)는 한 사이클 동안 사용되지 않는다. 각 활성화 레인이 동일한 채널로부터 선택할 수 있는 더 많은(예를 들어, 3) 값들을 가질 수 있게, 더 깊은(예를 들어, 3-뎁스(depth)) 활성화 버퍼(124)를 갖도록 MR 타일(102)을 구성함으로써, 일부 실시 예들에서 모든 승산기들(126)을 완전히 이용하지 못하는 이러한 실패들의 가능성은 감소될 수 있다. 레인으로부터 하나보다 더 먼 거리로부터 논-제로 활성화들을 가져오는 것(시프트하는 것)은 또한 제로 값 활성화들을 논-제로값의 활성화들로 대체하는데 더 많은 유연성을 제공한다. 2개의 세트 이상의 가산기 트리들 및 연관된 누산기들이 있으면 승산기의 활용도를 증가시킬 수 있다.
도 1h는 도 1g에 도시된 것의 후속 사이클을 도시하고, 후속 사이클 내에서 활성화 버퍼(124)의 제1 열은 IFM의 제9 벡터(전적으로 제로들로 구성됨)를 포함하고, 그리고 활성화 버퍼(124)의 제2 열은 IFM의 제10 벡터(요소들 j0 내지 j3으로 구성됨)를 포함한다. 도 1h에 도시된 상태에서, IFM의 10 번째 벡터의 모든 요소들은 순서를 바꾸어 먼저 진행될 수 있고, 각각의 웨이트 벡터와 IFM의 제10 벡터 j[]의 내적은 IFM의 제9 벡터의 처리를 위한 한 사이클의 지연을 발생시키지 않고 계산될 수 있다.
상술된 예시에서 도시된 바와 같이, 승산기 유닛(126) 출력은 일부 클럭 사이클들 동안 가산기 트리(128A)에 피드 될 수 있고, 다른 클럭 사이클들 동안 가산기 트리(128B)에 피드될 수 있다. 승산기 유닛(126)이 그것의 출력을 가산기 트리(128A 또는 128B)로 피드하지 않을 때, 대응하는 가산기 트리 입력은 제로로 설정된다. 도 1i는, 예를 들어, 도 1d 내지 도 1h의 동작들을 지원하기 위해, 임의의 승산기(126)의 출력을 제1 가산기(128A) 또는 제2 가산기(128B)로 보내기 위해 멀티플렉서들(132)을 사용하는 구성을 도시한다. 여기서, 캐시로부터 IFM 벡터들을 페치하는 것, 활성화 버퍼로부터 활성화 레인들로의 논-제로 활성화들의 선택 및 멀티플렉싱하는 것, 각 IFM 벡터와 함께 사용할 가산기 트리의 선택, 올바른 가산기 트리들로 승산기 유닛 출력들을 멀티플렉싱하는 것, 그리고 열 누산기들을 클리어(clear)하는 것을 포함하는 타일 내에서 계산을 조정하는 타일 제어 로직(144)으로부터 멀티플렉서 제어 신호들(sel_adder_tree[0... 15])이 온다.
승산기 출력은 항상 가산기 트리(128A) 또는 가산기 트리(128B)에 피드되지만, 동시에 가산기 트리들(128A 및 128B) 모두에 피드되지 않으므로, 적은 로직으로 가산기 트리들(128A 및 128B) 모두를 구현하는 것이 가능하다. 도 1j는 제1 가산기(128A) 및 제2 가산기(128B) 모두가 하나의 물리적 가산기 트리 및 적합한 멀티플렉서(미도시)로 구현되는 논리적 개념들일 수 있는 방법을 도시한다. 설명의 명확성을 위해, 각각이 4개의 입력들을 갖는 2개의 가산기 트리들을 구성하는 것을 고려한다. 4-입력 가산기 트리는 3개의 가산기들을 사용하여 구현될 수 있다. 간단(단순)한 경우에서, 각 가산기 트리는 3개의 가산기 요소들을 요구하므로, 2개의 4-입력 가산기 트리들을 구성하려면 6개의 가산기 서브-요소들이 필요하다. 적은 추가 멀티플렉서들과 함께 3개의 가산기 요소들만 사용하여 2개의 4-입력 가산기 트리들을 구성한다. 고려해야될 중요한 3가지 경우들이 있다. (i) 제1 경우에서, 4개의 입력들 모두는 제1 논리 가산기(128A)에 의해 합산된다(그리고 제2 논리 가산기(128B)의 출력은 제로이다). (ii) 제2 경우에서, 3개의 입력들은 제1 논리 가산기(128A)에 의해 합산된다(그리고 제2 논리 가산기(128B)의 출력은 나머지 입력과 동일하다). (iii) 제3 경우에서, 2개의 입력들은 제1 논리 가산기(128A)에 의해 합산되고, 그리고 2개의 입력들은 제2 논리 가산기(128B)에 의해 합산된다. 2개의 추가 경우들(미도시)에서, 제2 논리 가산기(128B)는 3개 또는 모든 4개의 입력들을 합산하고, 그리고 제1 논리 가산기(128A)는 각각 나머지 입력 또는 제로와 같다. 본 명세서에서 사용되는 바와 같이, “가산기(adder)”는 도 1j의 예시에서처럼 물리적 가산기들 및 멀티플렉서들의 조합으로 형성된 복수의 논리적 가산기들 중 하나이거나 또는 합계를 형성하는 적어도 2개의 숫자들을 더하기 위한 물리적 회로이다. 도 1j에서 도시된 바와 같이, 6개가 아닌, 오직 3개의 가산기 요소들(일부 추가적인 멀티플렉서들과 함께, 미도시)은 모든 가능한 경우들을 구현하기에 충분하다.
도 1k는, 일부 실시 예들에서의, 승산기 유닛(103)의 내부 회로도를 도시한다. 승산기 유닛(103)은 부호없는 8-비트 X 부호없는 8-비트 승산기(126), 로컬 웨이트들을 보유(hold)하는 레지스터 파일(127), 승산기(126)에 대한 입력 웨이트를 선택하는 로직(143), 로컬 웨이트를 인접한 레인으로 “'시프트(shift)”하는 로직(149 및 151), 동적(dynamic) 전력 소비를 감소시키기 위해 멀티플라이-바이-제로(multiply-by-zero) 상황을 검출하고 승산기를 유휴 다운(idle down)하는 로직(145, 136, 157, 155, 및 159) 및 웨이트 로딩 로직(157)을 포함한다.
레지스터 파일(127)은 웨이트들을 보유한다. 하나의 레지스터는 단일 int8 또는 uint8 웨이트에 대응한다. 큰 비트 폭을 갖는 웨이트들은 하나 이상의 레지스터를 점유하고, 예를 들어 int16 또는 uint16 웨이트는 2개의 레지스터들을 점유한다. 레지스터 파일(127)은 18개의 int8 또는 uint8 가중치들을 보유하거나 또는 대응하는 9개의 int16 또는 uint16 가중치들을 보유한다. 후술되는 바와 같이, 레지스터들의 수는 부분 결과들의 생성에 의지하지 않고 16-비트 웨이트들을 사용하는 3-바이-3(3-by-3) 컨불루션을 계산할 수 있도록 선택될 수 있다.
레지스터 파일(127)은 버티컬(수직) 웨이트 로드 버스(vertical weight load bus)(101){swt_in[C], wt_abs_ld_in[7:0][C]}를 통해 웨이트들을 로드하기 위한 단일 입력 포트를 포함한다. 각각의 MR 열(133) C는 C가 제로에서 7까지의 범위인 자체 웨이트 로드 버스를 수신한다. 버티컬 웨이트 로드 버스(101){swt_in[C], wt_abs_ld_in[7:0][C]} 상에서 웨이트 값들을 설정하고, 웨이트 레지스터 인덱스 버스(weight register index bus)(wt_ld_idx[4:0]) 상에서 목적지 레지스터의 인덱스(제로에서 17까지)를 지정하고, 그리고 웨이트들을 레인(L)에 로드하기 위해 레인 웨이트 로드 인에이블(lane weight load enable)(wt_ld_en_lane[L])을 선언(행사)(assert)함으로써, 웨이트들은 웨이트 디컴프레션 유닛(Weight Decompression Unit)(138)(도 1k 참조)으로부터 한 번에 하나의 전체 레인으로 로딩된다.
도 1k에 도시된 바와 같이, 단일 레인 내에서 모든 웨이트들을 로드하기 위해 18 사이클들이 걸리고, 전체 MU 어레이(122) 내에서 모든 웨이트들을 로드하기 위하여 18*16=288 클럭 사이클들이 걸린다. 일부 상황들에서는, 특히 완전히-연결된(FC; fully-connected) 레이어(layer)를 계산할 때, 웨이트 로딩의 속도가 충분하지 않을 수 있다. 컨볼루션 레이어 계산과 달리, FC 레이어 계산 동안 각 웨이트는 한 번만 사용된 후에 폐기된다. 따라서, FC 레이어를 계산할 때 승산기들(126)의 최대 활용을 유지하기 위해, 모든 클럭마다 각각의 승산기 유닛(103)에서 하나의 웨이트를 로드할 필요가 있으며, 이는 도 1k에 도시된 것보다 16배 빠르다. 이 경우에서의 실시 예는, 예를 들어, 웨이트 로딩을 가속화하기 위해 추가 웨이트 로드 버스(101){swt_in[C0], wt_abs_ld_in[7:0][C0]}, {swt_in[C1], wt_abs_ld_in[7:0][C1]}, 등을 포함하도록 수정될 수 있다.
도 1k에서, 웨이트들 중 하나가 하나의 레인 위로 시프트 되는 동안 제2 웨이트가 하나의 레인 아래로 시프트 되고 그리고 제3 웨이트가 지역적(국부적)으로(locally) 소비되는 경우, 웨이트 레지스터 파일(127)은 3개의 웨이트들을 동시에 페치하게 하는 3개의 출력 포트들을 포함한다.
로컬(국부적) 소비(local consumption)를 위해 로컬 레지스터 파일(local register file)로부터 웨이트를 페치하는 것은 멀티플렉서(147)를 사용하여 달성된다. 예를 들어, 도 1c에서, 멀티플렉서(147)는 IFM 값(a0)과 곱해질 지역적으로-저장된 웨이트(w0,0,a)를 선택한다. 또한, 도 1d에서, 멀티플렉서(147)는 IFM 값(c1)과 곱해질 지역적으로-저장된 웨이트(w1,0,c)를 선택한다.
로컬 레지스터 파일(127)로부터 웨이트를 페치하는 것 그리고 해당 웨이트를 하위 레인으로 시프트시키는 것은 멀티플렉서(149)를 사용하여 달성된다. 예를 들어, 도 1g에서, 지역적으로-저장된 웨이트(w0,0,h)는 h0와 곱해지도록 하나의 레인 아래로 시프트된다.
마지막으로, 로컬 레지스터 파일(127)로부터 웨이트를 페치하는 것 그리고 해당 웨이트를 상위 레인으로 시프트시키는 것은 멀티플렉서(151)를 사용하여 달성된다.
ABU(활성화 브로드캐스팅 유닛, 141)는 각 활성화 레인의 시프트 및 브로드캐스트 되는(활성화 레인들로) 각 IFM 값과 관련된 활성화 버퍼로의 오프셋(offset)에 관한 완전한 정보를 가지므로, 활성화 브로드캐스팅 유닛(141)은 신호들(sel_wt_self[4:0], sel_wt_dn1[4:0]) 및 신호들(sel_wt_up1[4:0])을 각각 사용하여 모든 3개의 레지스터 파일 페치 멀티플렉서들(147, 149, 및 151)을 제어한다.
MR 열(133) 영역을 감소시키기 위해, 예를 들어, 동일한 레지스터 파일로부터 웨이트들을 동시에 위로 그리고 아래로 시프트하는 것을 허용하지 않음으로써, 레지스터 파일(127)에서의 출력 포트들의 수는 3개에서 2개로 감소될 수 있다. 예를 들어, 모든 웨이트의 시프트를 허용하지 않거나 또는 하나의 시프트를 허용하거나 지역적으로 웨이트를 소비함으로써, 레지스터 파일(127) 내의 출력 포트들의 수는 하나로 더 감소될 수 있다. 그러나, 시프트 및 최대 시프트 거리를 제한하는 것은 승산기의 이용률을 다소 감소시킬 수 있다. MR 열 및 활성화 브로드캐스트 유닛의 복잡성, 면적 및 전력을 감소시키면서도, 활성화 버퍼 뎁스(activation buffer depth)를 갖는 시프트 타겟 레인 선택들의 다양한 변형들 및 조합들이 승산기의 이용률을 최적화하도록 고안될 수 있다. 관련된 개시에서 기술된 바와 같이, 이를 달성하기 위한 특히 효과적인 방법 및 장치는 의사-랜덤(pseudo-random) 방식으로 활성화 레인들을 셔플링(shuffling) 또는 퍼뮤팅(permuting)하는 것(관련된 웨이트들을 그에 따라 로딩하면서)을 포함한다.
도 1k에서, 멀티플렉서(143)는 승산기(126)에 의한 곱셈에 사용될 입력 웨이트를 선택한다. 전술된 바와 같이, 입력 웨이트는 로컬 웨이트 레지스터 파일(127)로부터 올 수 있거나, 또는 인접한 상부 레인(그리고 일부 실시 예들에서 동일한 열)에서의 웨이트 레지스터 파일로부터 “아래로 시프트(shifted down)”되거나 또는 인접한 하부 레인(그리고 일부 실시 예들에서 동일한 열)에서의 웨이트 레지스터 파일로부터 “위로 시프트(shifted up)”될 수 있고, 이에 따라 신호들 “{swt_self, wt_abs_self[7:0]}, {swt_dn1, wt_abs_dn1[7:0]}, 및 {swt_up1, wt_abs_up1[7:0]}”에 의해 표시될 수 있다. ABU(141)는 각 활성화 레인의 시프트 및 브로드캐스트 되는(활성화 레인들로) 각 IFM 값과 관련된 활성화 버퍼 오프셋에 관한 완전한 정보를 가지므로, 활성화 브로드캐스트 유닛(141)은 신호(sel_mult_wt [1:0])을 이용하여 멀티플렉서(143)를 제어한다.
예를 들어, 도 1c에서, 멀티플렉서(143)는 IFM 값(a1)과 곱해질 웨이트(w0,0,a)를 수반(전달)하는(나르는) "{swt_self, wt_abs_self[7:0]}"를 선택할 것이다. 도 1d에서, 멀티플렉서(143)는 IFM 값(c1)과 곱해질 웨이트(w1,0,c)를 수반하는 "{swt_self, wt_abs_self[7:0]}"를 선택할 것이다. 도 1g에서, 멀티플렉서(143)는 열 제로(0) 내 상단에서 두 번째 승산기에 의해 IFM 값(h0)과 곱해질 웨이트(w0,0,h)를 수반하는 "{swt_dn, wt_abs_dn[7:0]}"을 선택할 것이다.
도 1k에 도시된 바와 같이, 각각의 레지스터 파일(127)은 9의 비트 폭을 갖고, 여기서 8개의 비트들은 웨이트 크기를 보유하고 하나의 비트는 웨이트 부호를 보유하고, 적용 가능한 경우 “영-점(zero-point)” 상수(Z)가 미리-추가된(pre-added), 부호-및-8비트-크기 포맷으로 저장된다. 레지스터 파일(127)로부터 웨이트들이 페치될 때, 부호있는 int8 타입을 부호-및-8비트-크기 표현(적용가능할 때 영-점 추가를 포함) 온-더-플라이(on-the-fly, 즉시)로 변환시키는 로직을 추가함으로써, 레지스터 파일(127)의 비트 폭은 8비트로 감소될 수 있다. 레지스터 파일(134)의 크기가 기술된 영역의 절약을 초래할 만큼 충분히 크게 선택되면, 이러한 온-더-플라이 변환은 중요할 수 있다.
활성화 브로드캐스트 유닛(ABU, 141)은 승산기(126)에 대한 입력으로 사용될 활성화 "{sact, act_abs[7:0]}"를 브로드캐스트(broadcast)한다. 로직 게이트들(145 및 159)은 신호들(wt_zero 및 act_zero)(ABU부터의 보조 신호)을 사용하여 웨이트(곱셈에 사용될)가 제로이거나 또는 활성화(곱셈에 사용될)는 제로이거나 둘 모두인 멀티플라이-바이-제로(multiply-by-zero) 상황을 체크한다. 멀티플라이-바이-제로 상황이 발생하면 결과 신호(mult_by_zero)가 선언(assert)되고, “mult_in_ce” 신호를 사용하여 웨이트 및 활성화 승산기 입력 레지스터들에 대한 클럭이 게이트(gate) 되도록 한다. 입력 승산기 레지스터들의 클럭을 게이트하는 것은 승산기 입력들 및 승산기 내부 신호들이 그것의 이전 상태들을 유지(고정)시키도록 하며, 이에 따라 스위칭 활동을 방지함으로써 동적 전력을 감소시킨다. 이러한 활동과 병행하여, 플립-플롭 게이트(157)는 한 사이클만큼 mult_in_ce 신호를 지연시켜서 mult_out_zero 신호를 생성하고, 이는 로직 게이트(155)가 제로와의 승산에 대응하는 승산기 출력(mult_result[15:0])을 제로화(zero out) 하게 한다. 후술되는 바와 같이, 전체 타일의 계산이 중단(stall)되어야 할 때마다, ABU는 또한 모든 승산기들을 유휴(idle)하기 위해 신호(en_mult)를 전송하는 것에 유의해야 한다.
도 1k의 신호 이름들은 다음의 규칙을 따르는 것에 유의해야 한다. "act"는 활성화를 나타낸다. "wt"는 웨이트를 나타낸다. "sact", "swt", "mult_out_s", "s_in_a" 등에서의 "s"는 "sign"을 나타낸다. 그리고 "wt_abs", "act_abs" 등에서의 "abs"는 절대 값(크기)을 나타낸다.
ABU는 부호-및-8비트-크기(sign-and-8bit-magnitude) 포맷으로 활성화들 "{sact, act_abs[7:0]}"를 브로드캐스트 한다. 유사하게, 선택된(곱셈을 위한) 웨이트 "{mult_swt, mult_wt_abs[7:0]}"는 또한 부호-및-8비트-크기 포맷으로 제공된다. 승산기(126)에 대한 입력 신호들 "{s_in_a, mult_in_a [7:0]}, {s_in_b, mult_in_b[7:0]}"을 생성하기 위하여, 레지스터들(136)은 곱해질 웨이트 및 활성화를 래치(latch)한다. 일부 실시 예들에서, 승산기는 2개의 절대 8-비트 값들을 곱하고 그리고 2개의 부호들의 배타적 논리합(exclusive-or-ing)을 수행함으로써 곱을 계산하고, 결과적으로 부호-및-16비트-크기(sign-and-16bit-magnitude) 출력 "{mult_out_s, mult_out_abs[15:0]}"이 생성된다. 신호(mult_out[15:0])를 생성하기 위해, 곱의 부호가 선언(assert)될 때 곱 절대 크기(mult_out_abs[15:0])를 음수화 함으로써(즉, 곱 결과가 음수), 로직(153)은 부호-및-16비트-크기 결과를 가산기 트리에 피드될 16-비트 부호있는 출력으로 변환한다. 마지막으로, 이미 언급했듯이, 로직(155)은 멀티플라이-바이-제로 경우들에서 "mult_out[15:0]" 을 제로화 한다.
승산 제어에서 ABU의 역할을 요약하면, ABU(141)은 부호-및-8비트-크기 포맷의 입력 IFM, 레인 업 및 레인 다운 시프팅을 포함하는 웨이트 선택 제어, 그리고 브로드캐스트 되는 현재 활성화가 제로임을 가리키는 보조 신호(act-zero)를 제공한다. “act_zero” 신호가 선언되면, "{sact, act_abs[7:0]}"의 실제 값은 활성화 레인 스위칭 활동을 감소시키기 위해 변경되지 않을 수 있음에 유의해야 한다. 제로-값의 활성화(zero-valued activation)가 브로드캐스트 되는 경우들이 발생할 수 있음에도 불구하고, 일부 실시 예들은 이러한 발생들을 최소화하는 것을 목표로 한다.
도 1b 내지 도 1h는 언제든지 가능하면 ABU(141) 내부의 IFM 버퍼(124)로부터 논-제로-값의(non-zero-valued) 활성화들을 페치하고, 올바른 내적들을 획득하기 위해 연관된 웨이트들을 승산기들로 멀티플렉싱 함으로써 희소 활성화들(sparse activations)을 지원하는 계산을 도시한다. IFM 버퍼(124)는 캐시(139)로부터 IFM을 페치하고 그리고 활성화 스테이징(activation staging) FIFO (165)에서 페치된 IFM 값들을 스테이징 한다(도 1l 및 도 1ma 참조). 그 후, 복수의 활성화 멀티플렉서들(166)은 IFM 스테이징 FIFO(165)로부터 논-제로 활성화들을 페치하기 위하여 동작하고(가능하다면), 그 결과 활성화들은 순서를 바꾸어 활성화들을 페치할 뿐만 아니라 인접한 레인들로부터 위 또는 아래로 "시프트(shift)"될 수 있다.
도 1ma 및 1mb에서(이하에서 설명됨), "룩-어헤드(look-ahead)" 거리(h)는 동일한 채널에 따른 검색(search) 거리이고, "룩-어사이드(look-aside)" 거리(d)는 측면으로의 검색 거리이고, 그리고 FIFO 뎁스(F)는 활성화 FIFO(165) 뎁스를 나타낸다. 용어의 명확성을 위해, 활성화 멀티플렉서(163)의 복수(166)는 IFM 스테이징 FIFO (165)로부터의 입력으로서 IFM 채널을 받아들이고, 룩-어헤드 및 룩-어사이드를 적용하여 활성화들을 페치하고, 그리고 결과인 값들을 활성화 "레인들"(채널들이 아님)로 출력한다. 이러한 용어는 텐서 내의 뎁스 "채널들"의 논리적 인덱싱 대(vs.) 물리적 하드웨어 "레인들"을 따라 흐르는 활성화들의 개념을 구별하는 것을 돕는다.
IFM 스테이징 FIFO(165) 내부의 레지스터들(161)은 선택적일 수 있고, 설명의 명확성을 위해 도시되는 것임에 유의해야 한다. 어떤 경우에는, 활성화 스테이징 FIFO 레지스터들(161)을 제거하고, IFM 멀티플렉서들(163)을 다중-포트 캐시 출력에 직접 연결하고, 그리고 캐시(139)로부터 IFM을 올바른 순서로 멀티플렉서들(163)에 직접 페치하기 위해 IFM 캐시 리드 로직(read logic)을 수정함으로써, 면적과 전력을 감소시키는 것이 가능할 수 있다.
도 1ma는 같은 레인의 값과 다른 레인들의 값들을 포함하는, 활성화 FIFO(165)에 저장된 몇몇 가능한 값들 중 어느 하나로부터, 타일의 복수의 레인들(예를 들어, 타일에서 총 16개의 레인들) 중 어느 하나에서 승산기(126)로 피드되고 그리고 (타입 변환기(135)를 통해) MR 어레이(122)로 브로드캐스트 되는 활성화 스테이징 FIFO 레지스터(161)로부터 활성화를 선택하는데 사용될 수 있는 멀티플렉서들(163)의 구성을 도시한다. 보다 일반적인 경우, 각 셀은 2*d 멀티플렉서들로 갈 수 있고, 그리고 말단(end)에 있기 때문에 h*(d+1) 소스(source)들을 갖는 제1 레인 및 제16 레인을 제외하고, 각 목적지는 소스들의 동일한 수(2*h*d)를 가질 수 있다.
도 1n에서 도시된 각각의 MR 열의 ARU(Accumulate and Return Unit) (167)에 상주하는 출력 캐시의 크기로서, 출력 캐시 크기(C)를; 입력 대역폭(I)을 IFM 스트리밍 대역폭(클럭 사이클 당 16-바이트-길이의 IFM 벡터들의 수)으로; 그리고 출력 대역폭(O)을 OFM 전달 패브릭 대역폭(클럭 사이클 당 8-바이트-길이 OFM 벡터 결과들의 수)으로 더 정의한다. 또한, 원시 희소성(raw sparsity)(sr%)은 활성화 텐서에서 제로 요소들을 카운트하는 것에 기초하여 관찰된 희소성이고(활성화 텐서에서의 총 활성화들의 수에 비례하여); 실제 희소성(actual sparsity)(sa%)은 컨볼루션 스트라이드(convolution stride)들을 고려하고(예를 들어, 컨볼루션 스트라이딩(striding)은 특정 제로-값의 활성화들을 사용하지 않거나 특정 제로-값의 활성화들을 여러 번 포함 할 수 있음), 그리고 컨볼루션 패딩(convolution padding)을 고려하는, 활성화 텐서에 대한 2-차원 컨볼루션(conv2d) 프로세스 동안 적용된 제로 요소들의 실제 수이고(활성화 텐서에서의 총 활성화들의 수에 비례하여); 그리고 승산기 이용률(UM)은 승산기들이 유효한 곱셈들(논-제로 활성화들을 곱함)을 수행하는 동안의 사이클들의 백분율로 정의 될 수 있다. 예를 들어, 1x1 컨볼루션에 대해, 활성화 텐서가 sr%의 원시 희소성을 가지면, “나이브(naive, 단순)” 접근법(제로-스키핑이 없는 “밀도가 높은(dense)” 계산 모드)를 사용하는 경우 승산기 이용률은 (1-sr%)이고, 그리고 논(non)-1x1 컨볼루션에 대해, 나이브(밀도가 높은) 계산을 사용하면 승산기 이용률은 (1-sa%)이다.
도 1mb는 (i) 도 1ma에서 도시된 제1 구성에서 도 1ma의 회로의 4개의 행들의 확대도, (ii) 제2 구성에서 도 1ma의 회로의 4개의 행들의 확대도, 및 (iii) 제3 구성에서 도 1ma의 회로의 4개의 행들의 확대도를 도시한다. 제1 구성에서, 멀티플렉서 입력들은 위 및 아래 행들로부터 오지만, 동일한 행으로부터 오지 않는다. 제1 구성은 더 적은 와이어(wire)들을 갖고, 검색을 다른 채널들(즉, 더 적은 행들)로 분산시키므로, 이는 하나의 채널이 연속적인 제로들을 갖는 경향이 있는 경우에 유리할 수 있다. 또한, 2배의 스피드-업을 목표로 하면, 2개의 위치들은 충분할 수 있고, 채널들(1 및 16)은 구성(h = 2, d = 1)에서 같은 수의 후보들을 가진다. 제2 구성은 “풀 멀티플렉스 방식(full multiplex scheme)”으로 지칭될 수 있다. 이러한 구성에서, 멀티플렉서 입력들은 위 및 아래 채널들로부터 오고 다음 뎁스의 동일한 채널로부터 온다. 제3 구성에서, 멀티플렉서 입력들은 동일한 채널로부터만 온다(즉, 룩-어사이드(look-aside) d = 0). 제3 구성은 낮은 복잡도를 갖고(즉, 멀티플렉서들 및 와이어들의 절반보다 적게 요구됨), 그리고 다소 감소된 승산기 이용률의 희생을 치르며 단순한 웨이트 스키핑(건너 뛰기) 지원을 허용한다.
도 1n은 8개의 MR 열들(133) 및 16개의 행들로 구성된 승산기 유닛들(126)의 그리드(grid)를 포함하는 MR 어레이(122)를 포함하는 타일(102)의 최상위-레벨 다이어그램을 도시한다. MU로 라벨된, 각각의 승산기 유닛(126) 요소는 MR 어레이(122) 내에서 승산기 유닛의 행 및 열 좌표에 대응하는 첨자들(MUrow,col)을 포함한다. 웨이트 압축해제 유닛(weight decompression unit)(138)은 타일에 로컬(local)로 위치한 SRAM 뱅크 세트(109)로부터 압축된 웨이트들을 수신하는데 사용될 수 있고, 웨이트 레지스터(134)에 웨이트들을 기록하는 프로세스 동안 웨이트들을 압축해제 할 수 있다. 웨이트들은 웨이트들의 희소성을 이용하기 위해 압축될 수 있고, 이들을 저장하기 위해 요구되는 메모리 그리고 승산기 유닛들(126)로 이들을 전송하는데 필요한 버스 대역폭을 감소시킨다. 대안적으로, 웨이트들은 압축되지 않고 SRAM에 저장될 수 있다. IFM 전달 패브릭(104)의 병목 현상을 감소시키기 위해 IFM 캐시(139)는 데이터를 캐시(cache)하는데 사용될 수 있고, 그리고 예를 들어, 도 1d 내지 도 1h의 문맥(context)에서 설명된 바와 같이, 제로-값의 활성화들의 스키핑(또는 “활성화 스키핑(activation skipping)”)을 구현하기 위해 활성화 브로드캐스트 유닛(ABU; activation broadcast unit)(141)이 사용될 수 있다.
도 1o은 뉴럴 프로세서 제어의 계층(hierarchy)을 도시한다. 뉴럴 프로세서는 도 1a에서 도시된 다양한 요소들을 제어할 수 있는 상태 머신(state machine)들, 또는 “제어 유한 상태 머신(control finite state machine)들”(제어 FSM들)이나 “제어 로직(control logic)”을 포함할 수 있다. 제어 계층은 “글로벌(global)” 및 “로컬(local)”을 포함하는 2개의 레벨들을 포함할 수 있다. 동작에서, 글로벌 제어(GC; global control) FSM(140)은 웨이트 로드 단계(weight load phase)를 시작하는 것, 그리고 계산 단계(computation phase)를 시작하는 것과 제어하는 것을 포함하는 로컬 제어 상태 머신(local control state machine)들(142 및 144)의 동작을 조절(orchestrate)한다. 타일들(102)은 제로-값의 활성화들 스키핑을 지원하므로, 타일들(102)의 출력 레이트들은 각각의 타일(102)에 의해 수신되는 IFM 슬라이스들의 실제 희소성에 의존하여 다소 변할 수 있다. 그러므로, 타일들(102)에서의 계산은 몇 클럭 앞에서 또는 뒤에서 실행될 수 있다. 따라서, 글로벌 제어 로직(140)은 로컬 타일 제어 로직(144)의 동작을 조정하여, 복수의 타일들(102)로부터의 출력을 다시 동기화하고, 감소 패브릭(111)을 사용하여 감소를 완료하고, 그리고 OFM 전달 패브릭(106)을 통해 최종 OFM 결과들을 SRAM 뱅크 세트들(109)로 전송한다. 복수의 타일들의 출력들의 동기화는, 예를 들어, ARU 내부에서 작은 출력 FIFO(198)(또한 179)를 사용하여 그리고, 타일 출력 FIFO(198)이 가득 차는 극단적인 경우에는, 출력 FIFO가 가득찬 타일을스로틀링(throttling)(또는 중단(stalling))하여, 다른 타일들이 따라잡을 수 있도록 함으로써, 달성될 수 있다.
복수의 SRAM 제어(SC) FSM들(142) 각각은 SRAM 뱅크 세트(109) 내의 각각의 SRAM 뱅크에 대한 SRAM 어드레스들 및 리드/라이트(read/write) 신호들을 생성할 수 있다. 복수의 타일 제어(TC; tile control) FSM들(144) 각각은 활성화들을 스킵(skip)할 수 있다(예를 들어, 그들이 제로의 값을 가질 때). 동작을 준비하기 위해, 호스트 CPU는 각각의 IFM 및 OFM 텐서의 시작 어드레스 및 크기(높이, 폭, 깊이, 또는 배치 크기(batch size))를 SRAM 제어 FSM(142)에 로드하고, 동작 타입(완전히 연결된(FC; fully connected) 또는 컨볼루션) 그리고 IFM, OFM, 및 웨이트 데이터 타입들을 글로벌 제어 FSM(140)에 로드하고, IFM 및 OFM 웨이트 사이클링 구성, IFM 트래버셜(traversal)의 순서, IFM 통과 횟수(나중에 상세히 설명됨) 및 다른 계산 매핑 설정들, 활성화 함수 및 풀링의 선택(만약에 있다면)을 로드하고, 부분 결과 생성을 활성화 또는 비활성화 하고, 웨이트 텐서 크기(높이, 너비, 또는 입력 및 출력 뎁스 채널들의 수)를 로드하고, 지그-재그(Z) 높이를 로드하고(이하에서 더 상세하게 설명됨), 그리고 컨볼루션 패딩 및 컨볼루션 스트라이드에 대한 옵션들을 로드한다. 각각의 SRAM 뱅크 세트(109) 내의 IFM 및 OFM 텐서들의 어드레스들을 포함하는 동작 파라미터들에 의해 요구되는 접속성을 구성하기 위해 호스트 CPU는 IFM 전달 패브릭, OFM 전달 패브릭, 및 감소 패브릭(RF)과 관련된 레지스터들에 더 라이트(write)한다. 동작을 시작하기 위해, 호스트 CPU는 글로벌 제어 FSM(140)의 레지스터들에 라이트한다. 그 후, 글로벌 제어 FSM(140)은 시작하기 위해 SRAM 제어 FSM들(142) 및 타일 제어 FSM들(144)에 신호를 보낸다.
일부 실시 예들에서, 글로벌 제어 FSM(140)은 컨볼루션 윈도우 내에서 스캐닝을 제어하고, 컨볼루션 윈도우를 변환하고, 그리고 IFM 텐서를 트래버스(traverse)하여(가로지르면서) IFM 슬라이스들의 스트림을 생성한다. 글로벌 제어 FSM(140)은 평면 픽셀(x, y) 좌표, 뎁스 채널 인덱스(d), 그리고 IFM 슬라이스 및 리드 신호들을 SRAM 제어 FSM들(142)로 전송한다. 각각의 SRAM 제어 FSM들(142)은 시작 어드레스들을 추가하고, 적절한 IFM 데이터를 페치하고, 그리고 데이터를 IFM 전달 패브릭(104)으로 출력한다. 일반적으로, IFM(및 OFM) 텐서 크기가 너무 커서 단일 SRAM 뱅크 세트(109)에 적합하지 않아서, IFM(및 OFM) 텐서들이 부분들로 작게-나뉘어 다수의 SRAM 뱅크 세트들(109)에 저장되게 끔 한다. 계산하는 동안, 올바른 SRAM 뱅크 세트(109)로부터 IFM을 페치하고 OFM을 라이트하기 위해 IFM 및 OFM 전달 패브릭들의 온-더-플라이 재구성에도 영향을 또한 미치면서, 글로벌 제어 FSM(140)은 트래버스될(특정 순서로 페치되거나 저장되는) IFM 및 (해당하는) OFM 텐서들을 조절한다.
모든 타일 캐시들(139)은 실질적으로 동시에 해당 데이터를 수신할 수 있다. 글로벌 제어 FSM(140)은 (i) 각 인커밍 데이터를 저장하는 IFM 캐시(139) 레지스터 파일에 대한 어드레스 그리고 (ii) IFM 전달 패브릭(104)으로부터 캐시(139)로 데이터를 라이트하기 위한 라이트 인에이블(write enable) 신호를 이용하여 모든 타일 제어 FSM들(144)을 계산하고 제공한다. IFM 슬라이스가 IFM 전달 패브릭(104)을 통해 SRAM 뱅크 세트(109)로부터 오는 경우, 라이트 인에이블 신호는 활성화되고, IFM 슬라이스가 이미 캐시(cache)된 경우, 라이트 인에이블 신호는 비활성화된다. 글로벌 제어 FSM(140)이 특정 순서로 IFM 레이어(텐서)를 트래버스(traverse)함에 따라, 글로벌 제어 FSM(140)은 또한 계산을 위해 필요한 IFM 슬라이스들이 캐시 되었는지 추적하고, IFM 캐시들(139)에 이미-존재하지 않는 데이터를 리드할때 SRAM 제어 FSM들(142)에 신호를 보낸다. 데이터가 타일 캐시(139)에 이미 캐시 되었으면, 글로벌 제어 FSM(140)은 SRAM 제어 FSM(142)이 SRAM 리드를 스킵하도록 리드 신호를 비활성으로 유지한다. IFM 캐시들의 관리를 단순화하기 위해, IFM 전달 패브릭으로부터의 각 IFM 슬라이스는 모든 관련된 대상 타일들(나중에 설명됨, 매핑에 의해 규정됨) 및 대상 타일의 번호에 관계없이 IFM 캐시들(139) 내의 동일한 어드레스들에서 그것들(모든 관련된 대상 타일들) 각각의 IFM 캐시들에 라이트됨에 유의해야 한다. 그러나, 불균일한 활성화 희소성으로 인해 타일 계산들은 다소 다른 속도(레이트)들로 실행되므로, 각 타일의 제어 로직은 다른 타일들과 독립적으로 IFM 캐시(139) 리딩(reading)을 지역적으로 관리한다.
일부 실시 예들에서, OFM 결과들을 라이트하는 프로세스는 유사하다. 그러나, 활성화 스키핑으로 인해, 계산 지연은 변할 수 있다. 각 타일 제어 FSM(144)은 해당 타일 내 모든 열들이 계산을 완료하는 시점을 가리키는 정보를 포함한다. 각 타일의 타일 제어 FSM(144)은 “ofm_ready” 신호를 글로벌 제어 FSM(140)으로 전송하고, 이 글로벌 제어 FSM(140)은 SRAM 제어 FSM(142)에게 OFM 전달 패브릭(106)으로부터의 OFM 슬라이스를 OFM 텐서에 적절한 (x, y, d) 인덱스로 SRAM 뱅크들에 라이트하도록 지시한다. OFM 텐서 트래버셜 동안, 글로벌 제어 FSM(140)은 IFM 텐서 트래버셜 동안 IFM(x, y, d) 슬라이스 좌표의 생성과 유사한 방식으로 OFM(x, y, d) OFM 슬라이스 좌표를 생성한다. 계산이 완료되면, 글로벌 제어 FSM(140)은 호스트 CPU에 인터럽트를 전송한다.
전술된 바와 같이, 활성화 스키핑으로 인해, 예를 들어, 타일은 클럭 당 최대 2개의 출력 결과들을 생성할 수 있다. 그러므로, 승산기 이용률의 감소를 피하기 위해 IFM 전달 패브릭(104)은 클럭 당 최대 2개의 IFM 슬라이스들을 공급할 수 있어야 한다. 따라서, 로컬 타일 제어 FSM들(102)은 캐시 내의 처리될 나머지 데이터의 양에 대해 글로벌 제어 FSM(140)에 알림으로써, 글로벌 제어 FSM(140)은 IFM 캐시 언더플로우(IFM caches underflow)를 피하기 위해 SRAM 제어 로직(140)이 IFM 데이터의 페치를 재개(resume)하도록 지시 할 수 있다. 타일 IFM 캐시들 중 어느 하나가 가득 차면, 글로벌 제어 FSM(140)은 SRAM 제어 FSM (142)에 지시하여, SRAM으로부터 IFM 슬라이스들을 리드하는 것 및 타일 캐시들에 IFM 슬라이스들을 라이트하는 것을 포함하는 IFM 텐서 트래버셜을 일시 정지(pause)시킨다.
도 1p를 참조하면, 일부 실시 예들에서, IFM 캐시(139)는 16개의 레인들(170)을 포함한다. 각 레인은 이중 입력 포트들 및 이중 출력 포트들을 갖는 레지스터 파일(169)을 포함한다. 활성화 스키핑(그리고 MU 열 당 2개의 가산기 트리들을 포함)으로 인해 시스템 타일(102)이 클럭 당 최대 2개의 활성화들을 처리 할 수 있기 때문에(제로 활성화들이 충분할 때) 듀얼 포트들이 사용될 수 있다. 활성화들을 더 빠르게 처리하기 위해, 예를 들어 클럭 당 3개의 IFM 슬라이스들, 3개의 입력 포트, 3개의 출력 포트, 3중 IFM 전달 패브릭 대역폭, 3중 OFM 전달 패브릭 대역폭, 및 MU 열 당 3개의 가산기 트리들이 사용될 수 있다.
활성화들은 최대 2배의 속도로 IFM 전달 패브릭을 통해 SRAM으로부터 들어온다. 타일 제어 FSM(144)은 각각의 캐시 레인(146)에서 처리될 나머지 IFM 데이터의 양을 추적한다. 캐시 레인들 중 어느 하나가 가득 차려고 하면, 타일 제어 FSM들(144)은 적어도 하나의 레인 캐시가 곧 가득 찰 것임을 글로벌 제어 FSM(140)에 알리고, 그리고 캐시 공간이 확보 될 때까지 타일 캐시 레인(들) 오버플로우(overflow)를 방지하기 위해 글로벌 제어 FSM(140)은 SRAM 제어 FSM(142)에 의해 제어되는 IFM 리드들을 스로틀(throttle)(또는 중단(stall)) 할 수 있다.
컨볼루션 윈도우 스캔이 완료되고(그리고 윈도우는 다음 위치로 옮겨진다) 그리고 IFM 사이클링이 완료되면 글로벌 제어 FSM(140)은 또한 타일 제어 FSM들(144)에 알리며 -이에 따라, 타일들은 열 누산기들을 올바르게 재설정하고 그리고 한 위치의 컨볼루션의 수행과 다음 위치에서의 컨볼루션의 수행을 혼합하지 않는다. IFM 사이클링의 개념은 나중에 보다 상세하게 정의되고 설명된다.
타일 제어 FSM(144)은 각각의 레지스터 파일의 출력 포트에 대한 리드 어드레스(read address) 및 리드 인에이블(read enable)을 포함하는 각각의 캐시 레인 레지스터 파일(169)로부터 IFM 데이터를 리드하는데 요구되는 신호들을 생성한다. 각 클럭 사이클에서, 타일이 처리를 완료하고 그리고 다른 타일들이 그들의 처리를 완료하기를 기다리지 않는 한, 타일 제어 FSM(144)은 하나 또는 2개의 데이터 값(상응되게 하나의 포트 또는 2개의 캐시 포트들로부터)을 리드한다(이에 따라, 결과들은 감소 패브릭에 의해 감소될 수 있도록 이용 가능하게 된다). 단일 클럭 당 하나 또는 2개의 바이트가 읽어지는지 여부는 활성화 희소성에 의존한다. 활성화 브로드캐스트 유닛(141) 내의 IFM 버퍼(124)는 활성화들이 희소한지 여부를 체크하고 그리고 타일 제어 FSM(144)에 알림으로써, 타일 제어 FSM(144)은, ABU IFM 스테이징 FIFO(165)가 하나의 슬롯을 비우는 경우 하나의 바이트를 그리고 ABU IFM 스테이징 FIFO(165)가 2개의 슬롯들을 비우는 경우 두 바이트를 로드할 것이다.
도 1q의 표는 컨볼루션 윈도우가 어느 위치(x, y)에서 다음 위치로 평면-방향(planar-wise)으로 슬라이딩 함에 따라, SRAM(109)부터 중복되는 읽기들을 피하기 위해 1x1, 2x2, 3x3, 및 4x4의 컨볼루션 윈도우 크기들로 컨볼루션 동작을 수행하는 동안, 모든 IFM 슬라이스들을 보유하기에 충분한 캐시 크기를 도시한다. SRAM으로부터의 단일 읽기는 일반적으로 로컬 레지스터 파일(169)로부터의 단일 독출에 비해 상당히 많은 전력을 소비하므로, “지그-재그(zig-zag)” 스캔 시퀀스는 IFM 캐시의 사용을 최대화하여 SRAM으로부터의 읽기들 및 전력 소모를 최소화하도록 작용할 수 있기 때문에, 이하에서 보다 상세히 논의되는 바와 같이, 표의 데이터는 승산기 유닛의 레지스터 파일(134)이 18개의 웨이트 레지스터들을 포함하고 그리고 해당 컨볼루션 윈도우가 입력 텐서를 “지그-재그” 시퀀스로 스캔한다고 가정한다.
예를 들어, 지그-재그 스캔 파라미터(Z)(이하에서 보다 상세하게 설명됨)를 2로 설정하고 그리고 MU가 18개의 웨이트들을 보유하면(2개의 3x3 8-비트 컨볼루션 커널들 또는 1개의 3x3 16-비트 컨볼루션 커널들을 보유하기에 충분함), 레지스터 파일(169)은 20 바이트의 크기를 포함해야 한다.
뉴럴 네트워크들은 적어도 하나의 곱셈 인수(활성화 및/또는 웨이트)가 제로인 승산기들을50% 및 90% 사이에서 가질 수 있다. 예를 들어, 이것은 웨이트 프루닝(weight pruning)을 적용한 후, Inception v3 뉴럴 네트워크의 경우일 수 있다. MR 타일(102)이 멀티플라이-바이-제로(multiply-by-zero) 발생들을 효율적으로 스킵할 수 있으면, MR 타일(102)은, 예를 들어, 스키핑 없는 시간의 100% - 80% = 20% 내에 데이터를 처리할 수 있고, 이는 5배 더 빠르다. 이에 대응하여, 전술된 바와 같이, 일부 실시 예들에서, MR 구현은 캐시가 2개 이상의 입력들을 사용하여 충분히 빠르게 데이터(곱해지거나 또는 스킵될)를 전송하도록 구성될 수 있다. 본 명세서의 일부 블록도들에서, 설명의 간결성 및 명확성을 위해 더블 입력 대역폭(그리고, 대응하는, 단지 2개의 깊이인 활성화 버퍼(124))만이 도시된다. 그러나, IFM 활성화 버퍼(124)의 뎁스는 2보다 클 수 있고, 대응하는 속도 증가(제로에 의한 곱셈들을 스킵하지 않는 구성 대비)는 충분한 희소 데이터에 대해, 2배보다 클 수 있음이 이해될 것이다.
도 1b 내지 도 1h의 문맥에서 상술된 바와 같이, 그리고 다음 단락들에서 더 자세히 설명된 바와 같이, IFM 캐시 및 ABU의 적절한 동작에 의해, 데이터 희소성은 프로세싱 처리량(throughput)을 크게 향상시키기 위해 사용될 수 있다. 도 1r은, 입력 레이어 컨벌루션을 개시하기 위해, SRAM에 저장된, IFM 텐서 내의 시작 위치에 포지션된 3x3 컨볼루션 윈도우를 도시한다. 레이어 컨볼루션 동작을 시작하기 위해, 9개의 IFM 슬라이스들(a0[0..15] ~ i0[0..15])이 SRAM으로부터 리드되고, IFM 패브릭을 통해 타겟 타일들로 전달되고, 그리고 각각의 타겟 타일의 IFM 캐시(139)에 라이트 된다. 도 1s는 몇몇의 요소들이 제로인, 이러한 데이터의 다른 예시를 도시한다.
도 1t는, 레이어 컨벌루션 동작이 시작하기 직전에, (SRAM으로부터) 도착 순서대로 정렬된 값들을 이용하여, 데이터가 IFM 캐시(139)에 논리적으로 저장될 수 있는 방법을 도시하고, 그리고 값들의 실제 저장 어드레스들에 따른 그것들의 배열을 반드시 보여주는 것은 아니다. 본 예시에서, 3x3 컨볼루션이 수행되고, 비록 캐시는 컨볼루션 윈도우의 움직임을 수용하기 위해 더 저장할 수 있음에도 불구하고, 명확성을 위해 도면들은 9개(3 x 3 = 9)의 8-비트 활성화 값들을 도시한다. 유사하게, 도 1u는 제로의 값을 갖는 일부 활성화들을 명시적으로 포함하는 도 1t로부터의 본 예시를 도시한다.
도 1v는 일부 실시 예들에 따른 활성화 브로드캐스트 유닛(141)의 단일 레인(171)을 도시한다. 각각의 ABU 레인(171)은 레지스터 파일을 사용하여 구현될 수 있는 IFM 레인 스테이징 FIFO(173), 레인 멀티플렉서(163), 레인 제어 로직 모듈(146), 및 활성화 레인 숫자 타입 변환 회로(148)를 포함한다. 각각의 ABU 레인(171)은(타일 제어 FSM(144) 및 다른 ABU 레인들과 함께) 해당 레인에서 활성화 스키핑, 즉, 제로의 값을 갖는 활성화 요소들의 스키핑을 제어할 수 있다.
승산기 회로들의 uint8, int8, uint16, int16, uint24, int24, uint32, int32 등을 포함하는 다양한 비트 폭의 부호있는 및 부호없는 데이터 처리를 단순화하기 위해, 그것(각각의 ABU 레인(171))은 부호있는 2의 보수 숫자 인코딩으로부터 부호-및-8비트-크기 포맷으로 활성화들을 더 변환할 수 있다. 또한, 신호들의 활성화 레인(137) 세트의 일부로서, 각각의 ABU 레인(171)은 MR 열(133) 내의 승산기 유닛들(126)의 연관된 행에 활성화들을 브로드캐스트 할 수 있다.
IFM 레인 스테이징 FIFO(173)는 2개의 입력 포트들과 2개의 출력 포트들을 가지며, 투-벨류 딥(two-value deep, 2 값의 깊이(뎁스))일 수 있다. 2개의 입력 포트들은, 클럭 사이클 당 최대 2개의 활성화들(바이트들)의 속도로, IFM 캐시로부터 활성화들을 가져오는데 사용될 수 있다. 이와 같이, 제로 활성화들이 충분하면, MU 열들 내에서 2개의 가산기 트리들, 2개의 입력 포트들 및 2개의 출력 포트들을 갖는 레인 캐시, 및 2의 뎁스를 갖는 스테이징 버퍼(173)를 포함하는 결과로서, 클럭 사이클 당 최대 2개의 활성화들을 처리할 수 있다. 일부 실시 예들에서, 클럭 당 더 많은 수의 활성화들, 예를 들어, 클럭 당 3개의 활성화들을 정당화(justify)하기에 충분히 희소(sparse)할 것으로 예상되는 경우, MU 열 당 3개의 가산기 트리들, 3개의 레인 캐시 입력/출력 포트들, 3개의 스테이징 FIFO 입력 포트들, 및 3의 스테이징 FIFO 뎁스(여기서 “스테이징 FIFO”는, 문맥에서, IFM 레인 스테이징 FIFO(173)을 가리킴)를 갖는 회로를 사용하여 활성화들이 처리될 수 있다.
활성화가 제로인지 아닌지. - 그리고 활성화가 제로이면, 어느 레인으로부터 그리고 스테이징 FIFO에서 얼마나 깊은지(깊이 속으로의 오프셋)을 포함하는, 제로를 대체하기 위해 어느 논-제로 활성화가 멀티플렉싱되는지를 승산기 유닛들(126)에 알리기 위해, 레인 제어 로직(146)은, 신호들의 활성화 레인(137) 세트의 일부로서, 승산기 유닛들(126)의 연관된 행으로 제어 신호들의 세트를 브로드캐스트 할 수 있으며, 그 결과 각각의 승산기는 곱셈에 사용할 올바른 웨이트 및 가산기 트리를 선택할 수 있다. 유사하게, 올바른 인접 IFM 채널에 위치된 올바른 스테이징 FIFO(173) 뎁스 오프셋으로부터 활성화 레인(137)으로 활성화를 멀티플렉싱 하기 위해 레인 제어 로직(146)은 또한 레인 멀티플렉서(163)를 제어한다.
도 1v는 2개의 버퍼(buffer)된 활성화들 중 하나를 인접한 레인의 위로 제공하고, 2개의 버퍼된 활성화들 중 하나를 인접한 레인의 아래로 제공하고, 그리고 2개의 버퍼된 활성화들을 레인 활성화 멀티플렉서(163)에 제공하기에 충분한, 4개의 출력 논리적 연결들을 포함하는 IFM 레인 스테이징 FIFO(173)를 도시한다. 비록 도 1v는 4개의 출력 논리적 연결들을 포함하는 스테이징 FIFO(173)를 도시하지만, 도시된 실시 예에서, FIFO(173)는 단지 2-값-깊이(two-value-deep)이고 따라서 동시 출력을 위해 이용 가능한 2개의 값들만을 보유하기 때문에, FIFO(173)는 2개의 물리적 출력 포트들만을 가진다.
도 1wa는, IFM의 처음 2개의 벡터들이 리드된 후(도 1c에서도 도시된 바와 같이), 4개의 개별 IFM 레인 스테이징 FIFO들(173)(설명의 명확성을 위해 16이 아님)을 갖는, IFM 스테이징 FIFO(165)의 컨텐츠들을 도시한다. 이 상태에서, FIFO는 어느 활성화 값들이 제로이고 어느 것이 제로가 아닌지를 체크할 수 있다. 일부 실시 예들에서, 각 FIFO 레지스터는 제로 검출기(예를 들어, 8-입력 NOR 로직)를 포함한다. 각 레인 스테이징 FIFO(173)는 해당 레인에서 어떤 활성화들이 다 사용되었는지(예를 들어, 빌려서, 이는 도 1d에 도시된 바와 같이 “홀(hole)”을 생성하게 함)를 추적하는, 각 레인 제어 로직(146)으로 어떤 활성화들이 제로인지를 보고한다. 각 레인의 제어 로직(146)은 어느 활성화들이 제로인지를 포함하는, 레인 스테이징 FIFO 점유에 대한 정보를 타일 제어 FSM(144)에 전달한다. 활성화들(a0, a1, a2 및 a3)은 숫자 포맷 변환(활성화들이 int8 또는 int16과 같은 부호있는 활성화들인 경우)을 거쳐서, 8-비트 값들(활성화 비트 너비가 8을 초과하는 경우, 예를 들어, uint16, int16, uint24, int24, uint32, int32, 등)로 세분화되고, 그리고 승산기 유닛들(126)의 각각의 행들로 브로드캐스트 된다.
다음 클럭 사이클에서, IFM 스테이징 FIFO(165)는 도 1wb(및 도 1d)에서 도시된 값들을 포함할 수 있다. 이 시점에서, 활성화들(a0..a3)이 처리되었고, b0, b2 및 b3는 승산기 유닛들(126)의 각각의 행들로 브로드캐스트 되고 있다. b1이 0이므로, b1의 레인은 사용되지 않는다. 각 레인의 제어 로직(146)은 이러한 정보(어떤 활성화들이 제로 또는 "홀(hole)들” 인지)를 타일 제어 FSM(144)으로 전달한다. 이 후, 타일 제어 FSM(144)은 (i) 멀티플렉싱하여 출력할 데이터(도 1wb 및 1d에서, 레인 0의 b0, 레인 1의 c1, 레인 2의 b2, 레인 3의 b3, 등) 그리고 (ii) 모든 레인의 제어 로직(146)으로부터의 입력들을 사용하여, 전체 FIFO 열이 홀들 및/또는 제로들로 구성되었는지를 검출하고, 따라서 스킵될 수 있는 것에 관하여 결정한다. 후자가 발생하면, 타일 제어 FSM(144)은 (i) 2개의 값들(하나 대신에)을 페치하는 캐시 그리고 (ii) 이러한 2개의 값들(하나 대신에) 수용할 FIFO를 야기함에 따라, 전체 홀- 및/또는-제로(hole-and/or-zero) FIFO 열을 스킵할 수 있다. 또한, 해당 레인(전체 열과 대조적으로)과 관련된 IFM 레인 스테이징 FIFO(173) 내 복수의 값들이 제로들 및/또는 홀들을 포함하는 경우, 레인 제어 로직은 또한 캐시가 2개의 값들을 페치하도록 한다.
예를 들어, 레인 1(c1 출력함)은 출력할 6 가지 선택들을 가질 수 있다: c0, c1, c2(c2는 제로) 그리고 b0, b1(b1은 또한 제로) 및 b2. 멀티플렉서(163)는 이들 6 가지 선택들 중 하나를 출력한다. 출력할 선택은 타일 제어 FSM(144)에 의해 결정된다. 이를 달성할 수 있기 위해, 멀티플렉서(163)는 하나의 레인 위의 두 FIFO 열들, 하나의 레인 아래의 두 FIFO의 열들, 및 멀티플렉서(163)와 동일한 레인 내 두 FIFO 열들로부터 데이터를 회수(retrieve)할 수 있도록 구성 될 수 있다. 이 능력은, 예를 들어 도 1ma 및 1mb에 도시된 것들과 유사한 회로들을 사용하여 구현될 수 있다. 이러한 도면들의 설명에서 앞서 언급된 바와 같이, 위 및 아래의 한 레인으로부터 데이터를 회수(및 멀티플렉싱)하는 능력을 “1의 룩-어사이드(look-aside of 1)”이라 하고, 그리고 오른쪽에서 두 번째 FIFO 열까지 데이터를 회수(및 멀티플렉싱)하는 능력을 “2의 룩-어헤드(look-ahead of 2)”라고 한다. 각각의 IFM 스테이징 FIFO(165) 열 및 레인 조합은 이와 관련된 별도의 룩-어헤드 및/또는 룩-어사이드 값을 가질 수 있으나, 설명의 명확성을 위해 IFM 스테이징 FIFO(165) 내에서 모든 열들 및 레인들은 동일한 관련 룩-어사이드 값 및 동일한 룩-어헤드 값을 갖는 것으로 가정한다. 또한, 룩-어헤드와 룩-어사이드의 개념들에 의해 커버되지 않고, 예를 들어, 스테이징 FIFO로부터 입력을 동일한 활성화 레인으로 전달하는 것 그리고 레인들(0 및 15)은 2개의 인접한 레인들 중 하나를 갖지 않는 것을 보상하기 위해 레인들(0 및 15)을 더 유연한 방식으로 연결하는 것을 방지하는 것을 포함하여, 각각의 멀티플렉서(163)가 얼마나 많은 입력들을 가지고 있는지 그리고 그 입력들이 어디에 연결되어 있는지에 대한 다른 변형들을 채택할 수 있다.
룩-어사이드 및/또는 룩-어헤드는 2보다 클 수 있다. 더 큰 숫자들은 더 좋은 성능을 도출한다 - 제로 활성화들을 보다 최적으로 스킵함으로써 타일 계산 시간이 더 감소된다. 룩-어사이드 및/또는 룩-어헤드 수들이 더 커질 때, 각 레인은 논-제로 활성화를 회수할 위치에 관한 더 많은 선택들을 가지기 때문에, 이 장점은 달성될 수 있다. 논-제로 활성화들의 더 많은 선택들은 모든 레인들에서 논-제로 활성화들을 더 고르게 분산시킬 수 있고, 가장 큰 활성화들을 가지는 레인이 계산을 완료 할 때까지 타일 처리가 완료를 기다리게 하는 것을 잠재적으로 야기 하는, 일부 레인들은 많고 및 다른 레인들은 적은 것과 대조적으로 각 레인은 거의 동일한 수의 논-제로 활성화들을 갖는다. 앞서 언급된 바와 같이, 논-제로 활성화들의 확산은 별도의 관련된 개시에서 설명된 바와 같이 활성화 레인들 및 관련 웨이트들을 의사-랜덤으로 섞음(shuffling)으로써 달성될 수 있다.
도 1wc는 룩-어헤드는 2이고 룩-어사이드는 2이며, 각각의 FIFO 열에 대해, 멀티플렉서(163)는 10개의 입력들을 갖는 구성을 도시한다. 이러한 실시 예에서, FIFO는 2-깊이(two-deep)일 수 있고, 이에 따라 2개의 출력 포트들을 가질 수 있다.
도 1wd는 룩-어헤드가 3이고 룩-어사이드가 1이고, 멀티플렉서(163)가 9개의 입력들을 갖는 구성을 도시한다. 이러한 실시 예에서, FIFO는 3 깊이일 수 있고 3개의 출력 포트들을 가질 수 있다.
도 1we는 룩-어헤드 및 룩-어사이드 모두 3이고, 멀티플렉서(163)가 15개의 입력들을 갖는 구성을 도시한다. 이러한 실시 예에서, FIFO는 3 깊이일 수 있고 3개의 출력 포트들을 가질 수 있다.
활성화 브로드캐스트 유닛(141) 및 타일 제어 FSM(144)은 도 1e 내지 도 1g에 도시된 동작들과 유사하게 관련될 수 있다. 예를 들어, 도 1e는 이전 클럭 사이클에서 c1을 빌린(가장 오른쪽에서 두 번째 열로부터 멀티플렉싱 됨) 경우, 레인 제어 로직(146)(c1이 원래 있었던 레인에서)이 추적하는 "홀(hole)"이 생성되는 것을 도시한다. 각각의 레인 제어 로직(146)은 타일 제어 FSM(144)에게 IFM 스테이징 FIFO(165) 내의 어느 데이터 셀들이 제로이거나 또는 비어있는지(empty)를 알려서, 타일 제어 FSM(144)은 활성화 멀티플렉서들(163)을 적절히 제어 할 수 있다. 타일 제어 FSM(144)은 멀티플렉서 제어를 결정하여 활성화들을 확산시킴으로써, 처리량을 증가시키거나 최적화한다. 다른 레인들(동일한 타일에서)은 주로 제로들을 가지면서, 일부 레인들은 많은 논-제로 활성화들을 갖도록 불균형하게 하는 것과 대조적으로, 모든 레인들이 동일한 수의 논-제로 활성화들을 가지면 최적의 처리량이 달성될 수 있다. 이러한 불균형한 경우에, 주로 제로들을 갖는 레인들은 많은 논-제로 활성화들을 갖는 레인들보다 더 빨리(즉, 모든 논-제로 활성화들을 더 빨리 출력할 수 있음) 계산을 완료할 수 있고, 이는 해당 타일의 계산의 종료를 지연시킬 수 있고 제로-리치(zero-rich) 레인에서 승산기 이용률을 감소시킬 수 있다.
다른 예시로서, 도 1g에 도시된 상태에서, 레인 제어 로직(146)은 또한 타일 제어 FSM(144)으로부터 멀티플렉서 선택 신호를 수신하여 (i) 생성된 홀들 및 (ii) 어떤 활성화가 어디로부터 멀티플렉싱되었는지를 추적한다. 이 후, 레인 제어 로직(146)은 이러한 정보를 승산기 유닛들(126)의 연관된 행으로 브로드캐스트 하여, 활성화가 비순차적으로(예를 들어, 도 1g에서, "순서대로(in order)"는 활성화 버퍼로부터 g0가 g0로 표시된 활성화 레인으로 출력됨을 의미) 멀티플렉싱될 때, 해당 행의 각각의 승산기 유닛(126)은 해당 비순차적(out-of-order) 활성화에 그것의 대응하는 웨이트를 곱할 수 있다.
예를 들어, 활성화가 가장 오른쪽에서 두 번째 스테이징 FIFO 열로부터, 한 레인 위로부터 멀티플렉싱된 경우, 이러한 활성화를 곱하기 위한 대응하는 웨이트는, 도시된 바와 같이, (각 열에 대해) 하나의 레인 위의 승산기 유닛들에 위치한다.
룩-어헤드가 2 보다 크고(예를 들어, 3), 그리고 가장 오른쪽에서 세 번째 열로부터 활성화가 회수되면, 회수될 대응하는 웨이트는 3 - 1 = 2 어헤드이고, 만약 순차적 활성화가 웨이트 "w[row, col, i]"와 곱해진다면, 곱하기에 적절한 웨이트는 대신"w[row, col, i+2]"인 것을 의미한다.
도 1h는 활성화들이 다중화될 때(비순차적으로 앞당겨 질 때), 전체 FIFO 열(16개 레인들 모두)이 비어있게 되는(제로들 또는 홀들만 포함) (처리량 관점에서 유리한) 상황을 도시한다. 타일 제어 FSM(144)은 이러한 조건을 검출하고 그리고 IFM 캐시(139)에 지시하여 2개의 값들을 FIFO로 로드하는데, 이는 두 개의 FIFO 열들이 동시에 소비되기 때문이다 - 가장 오른쪽에 있는 모든-제로 열은 스킵(삭제)되고 그리고 가장 오른쪽에서 두 번째 열은 계산을 위해 브로드캐스트 되고 소진된다. 이것은 타일 내에서 계산 지연을 한 클럭 사이클만큼 감소시킨다.
도 1x는 누적-및-반환(accumulate-and-return) 유닛(ARU)(167)을 도시한다. ARU의 역할은 내적 계산을 완료하고 활성화 함수를 적용하여(적용 가능한 경우) 저장을 위한 SRAM으로 다시 OFM 전달 패브릭을 통해 전송을 준비하는 완료된 출력 특징 맵(OFM)을 생성한다. 도 1n에서 도시된 바와 같이, 각각의 MR 열(133)은 가산기 트리(128A 및 128B) 당 하나씩, 2개의 ARU들(167)을 포함한다.
ARU(167)는 2개의 입력들을 포함하고, 하나는 로컬 가산기 트리(128A 또는 128B)로부터의 입력이고 하나는 감소 패브릭(111)으로부터의 입력이다. 각각의 ARU의 중앙에는 가산기(181) 및 누산기 레지스터(130A)가 있으며, 후술되는 바와 같이, 이는 누적(시간에 따라)에 따라 내적 계산을 완료 할 수 있다. OFM 계산을 완료하려면, 완전히 감소된 내적은 유닛(187)을 사용하여 (선택적으로) 절단될 수 있고(라운딩을 통해), 승산기(189)를 사용하는 팩터(factor)(191)에 의해 스케일링되고, 가산기(193)를 이용하여 OFM 바이어스 항(OFM bias term) (195)과 합산 될 수 있고, 그리고 활성화 함수(197)를 통과할 수 있다. 활성화 함수 모듈(197)은 정류된 선형 유닛(rectified linear unit; ReLU), 시그모이드(sigmoid), 쌍곡 탄젠트(hyperbolic tangent) 등과 같은 활성화 함수들을 지원할 수 있다. 내적 감소를 완료할 수 없는 경우(이에 대한 이유들은 나중에 자세히 설명됨), 누산기(130A)(또는 130B)로부터의 부분 내적, 또는 단지 “부분 곱”은 멀티플렉서(199) 및 출력 FIFO(198)를 통해 OFM 전달 패브릭으로 가는 도중에 스케일링, 바이어스 및 활성화 함수들을 바이패스 할 수 있다. 가산기(181)를 바이패스하는 멀티플렉서(183)는, 예를 들어, 누적을 개시하기 위해, 가산기 트리 값을 누산기(130A)에 직접 로딩할 수 있게 한다.
멀티플렉서(174)는 (i) ARU(167)가 위치한 동일한(로컬) 타일 내의 가산기 트리들, 그리고 (ii) 로컬("인트라-타일(intra-tile)") 가산기 트리들 (128A 및 128B)을 다수의 타일들로부터(예를 들어, 32 또는 64 또는 128 또는 256 승산기 유닛들로부터) 승산기 유닛 곱들을 감소시킬 수 있는 더 큰 ("인터-타일(inter-tile)") 가산기 트리들로 결합하는 구성 가능한 가산기 트리를 포함하는 감소 패브릭 사이의 (적용 가능한 경우, 부분 경로와 함께 스케일, 바이어스 및 활성화 애플리케이션) "반환(return)"을 위해 ARU에 대한 입력 소스를 선택한다.
타일 제어 FSM(144)은 각각의 MR 열(133)에서의 어느 레인 및 가산기 트리가 각각의 부분 IFM 감소를 얻기 위해 사용되었는지 추적하기 때문에, 타일 ARU들(167)은 타일 제어 FSM(144)에 의해 제어된다. ARU(167)는 2개의 출력들을 포함하고, 2개의 출력들은 FIFO(198) 및 온-더-플라이 풀링 로직(196)를 통해 OFM 전달 패브릭(106, 도 1a)을 연결하는 하나를 포함하고, FIFO(179)를 통해 감소 패브릭(111)에 연결하는 하나를 포함한다. 또한, 타일 제어 FSM(144)은 출력 FIFO들(198 및 179)의 상태를 추적한다. 각각의 타일(102)은 약간 다른 속도로 계산을 수행하기 때문에(제로 활성화 스키핑의 예측 불가능성으로 인해), 다른 타일들보다 앞서(더 빨리) 실행되게 되는 타일들로부터의 출력들을 지연시킴으로써 출력 FIFO들(198 및 179) 각각은 타일 출력들의 동기화를 복원하는 역할을 한다. FIFO(179)에 의해 타일 출력들을 동기화되게 하는 것은, 타일 출력들은 감소 패브릭(111)에 의해 추가적인 감소를 겪을 수 있기 때문이고, 이것은 추가 가산기 트리 스테이지들의 세트로 간주될 수 있고 그리고 따라서 (타일들로부터) 그것(추가 가산기 트리 스테이지들의 세트)의 입력들이 병렬로 동기화되어 도착하는 것을 요구할 수 있다. 유사하게, OFM 슬라이스의 모든 채널들을 동시에 OFM 전달 패브릭으로 출력하기 위해 FIFO(179)에 의해 동기화된 타일 출력들이 되게하는 것이 요구될 수 있다. 많은 경우들에서, 4개 이하의 엔트리들의 출력 FIFO들(198 및 179) 크기들은 각각 충분할 수 있다. 출력 FIFO(198 또는 179)가 하나 이상의 타일 내에서 거의 오버플로우 되는 경우, 타일 제어 FSM(144)은 출력 FIFO(198 또는 179)가 비워 질 때까지 계산을 중단할 수 있다. 출력 FIFO(198 또는 179)는 2개의 가산기 트리 (A 및 B) 경로들로부터의 결과들을 병합하기 위해 2개의 입력 포트들을 포함할 수 있다.
마지막으로, 타일 제어 FSM들(144) 및 SRAM 제어들(142)은 출력 FIFO(198)로부터 데이터를 읽고, 감소 패브릭 프로세싱을 수행하고, OFM 전달 패브릭을 통해 결과들을 전송하고, 그리고 SRAM에 저장하기 위해 함께 동작한다.
이하에서 “혼합 데이터 타입들”로 불리는, 활성화들을 위해 하나의 데이터 타입 그리고 웨이트들을 위해 다른 데이터 타입을 임의적으로 사용할 수 있는 것을 포함하여, 다양한 비트 폭의 부호있는 및 부호없는 입력 및 출력 데이터 타입들을 지원하기 위해, 활성화 숫자 타입 변환기(Activation Numeric Type Converter)(135)가 누산-및-반환 유닛(167)와 함께 작동하는 방법을 검토한다.
일부 실시 예들에서, 다음의 데이터 타입들이 사용될 수 있다: IFM, OFM, 및 웨이트들을 위한 int8, uint8, int16, uint16, int24, uint24, int32 및 uint32. 이하에서 상세하게 설명되는 바와 같이, IFM 및 웨이트 데이터 타입들은 자유롭게 혼합될 수 있다. 예를 들어, uint8 활성화들 및 int8 웨이트들, 또는 int8 활성화들 및 int8 웨이트들, 또는 int16 활성화들 및 int8 웨이트들, 또는 int16 활성화들 및 int16 웨이트들, 등을 사용하여 컨볼루션 또는 완전히-연결된(fully-connected) 레이어 계산을 수행할 수 있다. 스케일링, 라운딩 및 활성화 함수 선택의 조합들을 적용함으로써 uint8, int8, uint16, int16, uint24, int24, uint32, int32 등을 포함하여, OFM 데이터 타입은 또한 자유롭게 선택될 수도 있다.
활성화들은 다음과 같이 동작들을 위해 준비될 수 있다. 활성화들은, 예를 들어, 사용자에 의해 지정된 바와 같이, int8 또는 uint8 또는 int16 또는 uint16으로, SRAM 내에 저장될 수 있다. 도 1l에 도시된 바와 같이, 이러한 IFM 데이터는 캐시로(즉, IFM 캐시(139)로 페치된 다음, 활성화 숫자 타입 변환기(135)를 포함하는 활성화 브로드캐스트 유닛(141)을 통해 통과할 수 있다. 제1 단계로서, 구글 텐서플로우(Google TensorFlow)에서 사용된 바와 같이, 활성화들이 “제로 포인트(zero point)” 오프셋을 사용하여 양자화 된다면, 타입 변환기(135)는 “제로 포인트” 오프셋을 활성화들에 추가한다. 그 후, 숫자 타입 변환기(135)는 적절한 변환(transform 또는 transformation)을 적용함으로써 활성화들을 준비하고, 이는 8 비트 부호없는 승산기들(126)을 이용하여 수행되는, 예를 들어, 부호있는 또는 부호없는, 16-비트 웨이트 및/또는 16-비트 활성화들과 같은, 8 비트보다 넓은 데이터 타입들을 사용하는 곱셈들을 가능하게 한다. 도 1k에 도시된 바와 같이, 각 레인에 대해, 활성화 브로드캐스트 유닛(141)은 1-비트 부호 색트(sact)가 동반되는 활성화의 8-비트 절대 값(act_abs[7:0])을 브로드캐스트 한다. 활성화 숫자 타입 변환기(135)에 의해 적용된 변환은 int8/uint8을 "부호 및 8-비트 절대 값(sign and 8-bit absolute value)"으로 변환한다. 입력 활성화가 uint8이면, 타입 변환기(135)는 출력 브로드캐스트 8-비트 절대 값을 입력 uint8 값과 동일하게 설정하고(즉, 변환 없음), 브로드캐스트 부호를 제로로 설정한다(이는 음수가-아닌(non-negative) 값이 표시됨을 의미 함).
입력 활성화 데이터 타입이 int8이면, 활성화 숫자 타입 변환기(135)는 출력 절대 값을 활성화의 절대 값으로 설정하고, 활성화가 음수이면 출력 부호를 1로 설정하고, 그렇지 않으면 출력 부호를 0으로 설정한다.
웨이트들은 동작들을 위해 다음과 같이 준비될 수 있다. 사용자에 의해 지정된 바와 같이, 웨이트들은 int8 또는 uint8 또는 int16 또는 uint16으로 SRAM에 저장될 수 있다. 웨이트들이 MU 레지스터들에 로드됨에 따라, 웨이트들은 웨이트 압축 해제 유닛(138) 내에서 변환된다(활성화들을 변환하기 위해 활성화 숫자 타입 변환기(141)에 의해 사용된 것과 동일한 변환을 사용함). 웨이트들은 8-비트 절대 값 및 1-비트 부호로 저장된다. 도 1k 및 도 1n을 참조하면, 웨이트들이 SRAM으로부터 MU 레지스터들로 로드되고 버티컬 웨이트 로드 버스들(vertical weight load buses)(101)을 통해 승산기 유닛들로 피드됨에 따라, int8 및 uint8로 표시된 값들은 8-비트 절대 값(wt_abs_ld_in[7:0][C]) 및 1-비트 부호 표현(swt_in[C])으로 변환된다.
8-비트 곱셈은 다음과 같이 수행 될 수 있다. 승산기는 부호없는 8-비트 곱하기(X) 부호없는 8-비트의 승산기일 수 있다. 곱셈 동작은 활성화 및 웨이트 모두 8-비트-절대-값 및 1-비트-부호 표현인 입력으로 취할 수 있다. 이 후, 승산기는 2개의 8-비트 절대 값들을 곱하고, 2개의 부호들을 배타적 논리합(exclusive-or) 한다. 2개의 8-비트 절대 값들의 곱이 제로이면, 출력 부호는 제로로 설정된다. 이 후, 승산기 결과(그것의 부호를 동반한 16-비트 절대 값)는 int 17로 변환되고 가산기 트리로 전달된다. 이어서, 가산기 트리는 열 승산기 유닛들로부터 수신된 부호있는 int 17 값들을 감소시키고, 가산기 트리와 연관된 ARU(167)로 부호있는 합계를 전달한다.
일부 실시 예들에서, 16-비트 및 8-비트 입력 데이터 타입들은 다음과 같이 혼합 될 수 있다. 8-비트 웨이트 및 8-비트 활성화는 한 사이클 내에서 곱해질 수 있다. 일부 실시 예들에서, 예를 들어, uint8 활성화 x int8 웨이트, int8 활성화 x int8 웨이트, uint8 활성화 x uint8 웨이트, 및 int8 활성화 x int8 웨이트와 같은, 8-비트 숫자 데이터 타입의 모든 가능한 조합들이 지원된다. (i) 16-비트 웨이트 및 8-비트 활성화의 곱, 또는 (ii) 16-비트 활성화 및 8-비트 웨이트의 곱은 2개의 사이클들을 사용하여 계산될 수 있다. 16-비트 활성화 및 16-비트 웨이트의 곱은 4개의 사이클들을 사용하여 계산될 수 있다. 예를 들어, uint16 활성화 x int8 웨이트, int16 활성화 x int8 웨이트, uint16 활성화 x int16 웨이트, uint8 활성화 x int16 웨이트, int16 활성화 x int16 웨이트, 및 이와 같은, 8-비트 및 16-비트 숫자 데이터 타입들의 모든 가능한 조합들이 지원될 수 있다.
일부 실시 예들에서, 16-비트 활성화들은 다음과 같이 처리될 수 있다. 활성화들이 uint16 또는 int16이면, 타입 변환기(135)는 변환(상술된 8-비트 변환과 유사)을 적용하여 데이터를 준비할 수 있다. uint16 또는 int16 포맷에서의 값들은 16-비트-절대 값 및 부호 포맷으로 변환될 수 있다. 8 비트(uint8 또는 int8) 웨이트가 사용되는 경우, 활성화 브로드캐스트 유닛(141)의 제1 사이클 출력은 변환에 의해 발생한 부호 및 16-비트 절대 값의 최하위 바이트(LSB; least significant byte)일 수 있고(8-비트 웨이트와의 곱셈을 위한), 그리고 활성화 브로드캐스트 유닛(141)의 제2 사이클 출력은 변환에 의해 발생한 부호 및 16-비트 절대 값의 최상위 바이트(MSB; most significant byte)일 수 있다(또한 8-비트 웨이트와의 곱셈을 위한). 각각 부호있는 int17로 변환되는 2개의 부분 곱 결과들은 이 후에 열의 누산기(130A 또는 130B)로 전송될 수 있고(통상적으로, 열의 가산기 트리(128A 또는 128B)를 통해 열의 누적-및-반환 유닛(167)으로), 그리고 누산기(130A)(또는 130B)에 의해 함께 가산될 수 있다 (단, 가산되기 전에 최상위 바이트 곱이 부호 확장 시프트(sign extended shift)(175)(그리고 멀티플렉서(177))를 이용하여 8 비트들 위로 시프트도 또한 될 수 있다는 것을 제외하고서).
웨이트가 16-비트(uint16 또는 int16)이면, 그러면 4개의 클럭 사이클들이 (16-비트) 활성화 및 웨이트의 곱셈을 수행하는데 사용될 수 있다. 활성화 브로드캐스트 유닛(141)의 제1 사이클 출력은 활성화의 변환으로부터 발생하는 부호 및 16-비트 절대 값의 최하위 바이트(least significant byte)일 수 있고, 승산기에 웨이트의 16-비트-절대-값의 최하위 바이트가 동시에 피드될 수 있고, 그리고 제1 곱셈이 수행될 수 있다. 제2 사이클 동안, 활성화의 동일한 부분의 곱이(즉, 활성화의 변환으로부터 발생한 부호 및 16-비트 절대 값의 최하위 바이트) 웨이트의 16-비트-절대-값의 최상위 바이트와 함께, 승산기에 다시 피드될 수 있고, 그리고 제2 곱셈이 수행될 수 있다.
활성화 브로드캐스트 유닛(141)의 제3 사이클 출력은 활성화의 변환으로부터 발생하는 부호 및 16-비트-절대 값의 최상위 바이트(most significant byte)일 수 있고, 승산기에 웨이트의 16-비트-절대-값의 최하위 바이트(least significant byte)가 동시에 피드될 수 있고, 그리고 제3 곱셈이 수행될 수 있다. 제4 사이클 동안, 활성화의 동일한 부분의 곱이(즉, 활성화의 변환으로부터 발생한 부호 및 16-비트-절대 값의 최상위 바이트) 웨이트의 16-비트-절대-값의 최상위 바이트와 함께, 승산기에 다시 피드될 수 있고, 그리고 제4 곱셈이 수행될 수 있다. 부호 확장된 업-시프터(175) 및 멀티플렉서(177)를 사용하여 제4 부분 곱에 대해 8 비트들만큼 그리고 16 비트들만큼 덧셈 전에 제2 및 제3 부분 곱이 각각 프리-시프트(pre-shift)될 수 있다는 것을 제외하고, 모든 4개의 부분 곱 결과들은 각각 열의 누산기(130A)(또는 130B)로 전송될 수 있고(통상적으로, 연관된 열의 가산기 트리(128A 또는 128B)를 통해 그 열의 누적 및 반환 유닛으로), 그리고 함께 가산될 수 있다.
컨볼루션 동작을 수행하는 것은 SRAM(109)에 저장된 IFM 텐서를 트래버스(traverse, 가로지르는)하는 것, IFM 전달 패브릭(104)을 통해 전달되는 일련의 IFM 슬라이스들로서 IFM 텐서의 컨텐츠들을 하나 이상의 타일(102)로 스트림하는 것과 관련된다. IFM 텐서는 (x, y, z)(그리고 설명의 명확성을 위해 지금 생략되는 배치 인덱스(batch index))로 표현된 좌표들을 갖는 3차원들을 포함하고, 여기서 x 및 y 인덱스들은 활성화의 평면 좌표에 대응하고 그리고 인덱스 d는 뎁스 채널에 대응한다. 뉴럴 프로세서는 특정 시퀀스 내에서 (x, y, d) 인덱스 값들을 통해 사이클링(cycling)함으로써 IFM 텐서를 트래버스한다. (x, y) 좌표들을 통한 사이클링을 “평면” 트래버셜(traversal)이라 지칭하고, d 좌표를 통한 사이클링을 “뎁스-방향(depth-wise)” 트래버셜이라 지칭하기로 한다.
다음의 몇몇의 단락들은 IFM 캐시(139)의 사용을 포함하는 평면 트래버셜을 설명한다. 도 1n을 참조하면, IFM 전달 패브릭(104)은 IFM 캐시(139)를 통해 IFM 타일(102)로 연결될 수 있다. 각각의 타일 당 하나의 IFM 캐시(139)가 있으며, 연관된 타일로 지역(국부)적으로 각각 위치한다. IFM 캐시(139)를 (각 타일 마다) 이용하는 것은 SRAM(109)으로부터의 리드(read)들의 수를 감소시키는데 도움이 된다. SRAM(109)으로부터의 리드들의 수를 감소시키는 것은, (i) 뉴럴 프로세서의 전체 전력 소비에 대한 SRAM의 기여를 감소시키는 것, (ii) SRAM 읽기 또는 쓰기 중단들의 기회들을 감소시키는 것, 그리고 (iii) IFM 전달 패브릭(104)을 통해 흐르는 트래픽의 양을 감소시키는 것을 포함하는, 3가지 측면들에서 유리할 수 있다.
실제로 발생할 수 있는, 플립-플롭 레지스터 전력 소비와 비교하여 SRAM(109)이 상당히 높은 전력을 소비하면, SRAM 전력 소비 감소 측면은 중요 할 수 있다. 각 SRAM 유닛(109)에 위치된, SRAM 뱅크들의 수가 수행될 입출력(I/O, 리드 또는 라이트) 동작들의 수에 비해 작으면, SRAM 중단(stall) 측면이 특히 중요 할 수 있다. 예를 들어, 후술되는 바와 같이, 각각의 SRAM 뱅크 세트 유닛(109)은 4개의 SRAM 뱅크들을 포함할 수 있으므로, 최대 4개의 I/O 동작들을 (각 클럭 주기마다) 동시에 실행할 수 있다. 이러한 I/O 동작들은 IFM 슬라이스 리드, 하나 또는 2개의 OFM 슬라이스들의 라이트, 부분 결과 리드 또는 라이트, 및 AXI 인터커넥트(114)에 의해 요청된 슬라이스 리드 또는 라이트일 수 있다.
4개 이상의 이러한 I/O 동작들이 동일한 SRAM 뱅크에 거주하는(residing) 데이터에 동시에 액세스해야되거나 또는 하나 이상의 I/O 동작이 동일한 뱅크 내의 데이터에 반드시 액세스해야될 때 뱅크 액세스 충돌이 발생할 수 있고, 이는 SRAM 뱅크 중재 로직(SRAM bank arbitration logic)이 AXI 액세스 또는 IFM 페치 또는 OFM 라이트 또는 부분 결과 I/O를 중단시키도록 할 수 있고, 잠재적으로 계산 중단을 일으킬 수 있다. 따라서, SRAM 유닛들(109)로부터의 IFM 리드들을 감소시키는 IFM 캐시(139)는 이러한 타입들의 중단(stall)들을 포함하는 기회들을 감소시키는 역할을 한다.
나중에 보다 상세하게 설명될 것이지만, 웨이트 커널 크기가 특히 큰 경우들에서, 계산은 여러 부분들로 나뉘어질 수 있거나 나누어야 하고, 그리고 부분적으로-완료된 계산 결과들(“부분 결과들(partial results)” 또는 “부분들(partials)”)은 SRAM에 저장될 수 있다. 수용 가능한 계산 정밀도를 유지하기 위해, 부분 결과들은 일반적으로 IFM 및 OFM와 비교하여 상당히 긴 비트 폭(예를 들어, 4 또는 6 바이트들)을 갖는다. SRAM으로의(또는 부터의) 긴 비트 폭을 갖는 부분 결과들을 라이트하는 것 그리고 리드하는 것은 대응하는 높은 SRAM 대역폭을 소비하고, 이는 SRAM 뱅크 액세스 충돌의 기회들을 증가시킬 수 있고 그러므로 AXI 또는 계산이 중단될 수 있다. 따라서, IFM 캐시(139)를 포함하는 것은 부분 결과들을 사용하는 계산들에 대해 특히 SRAM I/O 병목 현상을 완화하는데 도움이 될 수 있다.
통신 버스 영역이 중요하면(품귀해 지면) IFM 전달 패브릭 트래픽을 감소시키는 것은 중요할 수 있다. 도 1p에 도시된 바와 같이, IFM 전달 패브릭은 클럭 당 최대 2개의 IFM 슬라이스들을 IFM 캐시(139)에 전달할 수 있음을 상기할 수 있다. IFM 전달 패브릭이 동시에, 예를 들어, 모든 단일 클럭마다, N개의 슬라이스들을 IFM 캐시(139)에 전달할 수 있으면, IFM 전달 패브릭은 “N개의 슬라이스들의 폭”을 갖는 것으로 지칭한다. IFM 슬라이스들을 (각 타일로) 지역적으로 캐싱함으로써, 계산에 요구되는 IFM 슬라이스가 이미 타일에 의해 지역적으로 캐시되었고 처리를 위해 쉽게 이용 가능해 지면, IFM 전달 패브릭(104)은 유휴(idle)를 유지할 수 있다. 유휴 사이클들을 포함하는 IFM 전달 패브릭(104)(100%보다 적은 이용률을 가짐)은 유휴 사이클들을 사용하여 여분의 IFM 슬라이스들을 전송하는 것을 가능하게 하고, 따라서 전체의 “효과적인” IFM 전달 대역폭이 2배를 초과하게 만든다. 그러므로, IFM 전달 패브릭 영역이 중요하면, 전체의 IFM 전달 대역폭을 1배 또는 그 이상으로, 때로는 2배 또는 그 이상에 도달하게 여전히 유지하면서도, IFM 전달 패브릭(104)의 폭은, 예를 들어, 2개의 슬라이스들에서 하나로 감소될 수 있다.
이하에서 보여지는 바와 같이, IFM 캐시(139)는 1보다 큰 커널 평면 폭 및/또는 높이를 가지는 컨볼루션 동작들에 대해서 가장 큰 이점들을 제공한다. "뎁스-방향(depth-wise)" 컨볼루션들(커널 폭 및 높이가 모두 1인 것들) 및 완전히-연결된 계산들은 또한 IFM 캐싱으로부터 이점을 얻을 수 있지만, 일반적으로 드문 상황들에서만 이점을 얻을 수 있다.
IFM 캐시 히트율을 증가시키기 위해 설계된, “지그-재그” 평면 트래버셜로 불리는 일 실시 예의 해결책을 이해(인식)하기 위해, 도 2aa 내지 도 2ad에서 도시된 바와 같이, 2x2x16x1 웨이트 커널을 사용하는, “나이브” 방식에서 IFM 텐서를 평면-방향(planar-wise)로 트래버스하는 것을 우선 고려한다. 여기서, 2x2는 웨이트 커널의 평면 높이 및 폭을 가리키고, 16은 IFM 뎁스(즉, 하나의 슬라이스)를 가리키고, 그리고 1은 OFM 뎁스를 가리킨다. 그러나, 설명의 명확성을 위해, 우리는 컨볼루션을 순수한 평면으로, 즉, 2x2x1x1로 취급할 수 있다. 도 2aa는 IFM 텐서의 좌측 상단 코너에 위치한 컨볼루션(커널 웨이트) 윈도우와 함께 시작하는 컨볼루션 동작을 도시한다. 해당 위치에서 2x2 컨벌루션을 계산한 후, 윈도우는 오른쪽으로 한 픽셀만큼 슬라이딩 한다. 윈도우가 IFM 텐서의 우측-상단-코너에 도달 할 때까지, 슬라이딩 과정이 뒤따르는 계산이 반복된다. 우측 상단 코너에서 한번, 컨볼루션이 계산되고 그리고 도 2ab에서 도시된 바와 같이, 컨볼루션 윈도우는 이제 한 행 아래로(오른쪽으로 대신) 슬라이딩 한다. 이어서, 컨볼루션 윈도우가 IFM 텐서의 좌측 에지(edge)(도 2ad에 도시된 바와 같이, 여기서 원도우는 한 행 아래로 다시 슬라이딩 한다)에 도달할 때까지, 컨볼루션 윈도우가 이제 왼쪽으로 계속적으로 슬라이딩 하는 것을 제외하고, 도 2ac에 도시된 바와 같이, 동일한 계산-및-슬라이드(compute-and-slide) 단계들이 더 반복된다. 이러한 단계들을 반복하면 결국 IFM 텐서의 완전한 평면 스캔(트래버셜)이 발생한다. 윈도우는 주로 수평적으로(horizontally) 슬라이딩 하므로, 즉, 내부 루프 사이클들은 x 좌표를 통해 순환하므로, 이러한 스캔은 수평적(수직적(vertical)에 반대)이라고 지칭한다.
도 2ba 내지 도 2bl에 도시된 바와 같이, 나이브 “수평적” 스캔과 함께 IFM 캐시(139)를 사용하는 것을 고려한다. 컨볼루션 동작의 시작에서 IFM 캐시(139)가 클리어되고, 2x2 컨볼루션 윈도우는 IFM 텐서의 좌측 상단 코너에 위치한 다음, 해당 시작 위치에서 컨볼루션 계산에 요구되는 4개의 IFM 값들을 회수한다. 도 2ba에 도시된 바와 같이, 4개의 IFM 값들 중 첫 번째는 IFM 센서 내에서 가장 좌측 상단 위치로부터 회수된다. 해당 위치는 행 0, 열 0에 있는 것으로 지칭한다. 캐시가 클리어되었으므로, 행 0, 열 0에서 IFM 값은, IFM 캐시가 아니라, SRAM으로부터 회수되어야 하고, 도 2ba에서 “M”으로 표시된 바와 같이, 캐시 미스가 발생한다. 일단 회수되면, IFM 값이 캐시된다. 도 2bb는 행 0, 열 1에서 회수된 제2 IFM 값(상기 4개의 IFM 값들 중에서의)을 도시한다. 캐시는 해당 위치와 연관된 값을 포함하지 않으므로, “M”으로 표시된 다른 캐시 미스가 발생한다. 행 0, 열 0에 있는 위치의 옅은 음영(light shading)은 이전 단계에서 회수된 IFM 값이 캐시되었음을 가리킨다. 도 2bc 및 도 2bd는 각각 캐시 미스를 발생시키는 나머지 2개의 IFM 값들의 회수를 도시한다. 이 시점에서 모든 4개의 IFM 값들은 회수되었고, 현재 위치에서의 컨볼루션 계산이 완료될 수 있고, 모든 4개의 IFM 값들은 또한 캐시될 수 있고, 그리고 컨볼루션 윈도우는 하나의 열만큼 오른쪽으로 슬라이딩 할 수 있다.
도 2be 내지 도 bh는 새로운 위치에서의 컨볼루션을 계산하기 위한 4개의 추가 IFM 값들의 회수를 도시한다. 도 2be에서, 행 0, 열 1에서의 IFM 값을 회수하는 것은 캐시 히트를 발생시키므로, SRAM 리드를 배제한다. 유사하게, 도 2bg는 행 1, 열 2에서의 다른 캐시 히트를 도시하며, 반면에 다른 2개의 IFM 값들을 회수하는 것은 캐시 미스를 유발한다.
컨볼루션 윈도우가 계속 슬라이딩 함에 따라, 도 2bi 내지 도 2bl(및 도 2be 내지 도 2bh)에서의 어두운 음영(dark shading)으로 표시된 바와 같이, 컨볼루션 윈도우가 IFM 텐서 가장 오른쪽 에지 끝까지 쭉 슬라이딩 하고, 하나의 로우(행) 아래로 슬라이딩 하고, 그리고 캐시된 값으로 되돌아 끝까지 슬라이딩 할 때까지, 가장 왼쪽의 최근에-캐시된 IFM 값들은 오랜 기간 동안 또는 전혀 계산에 참여하지 않을 것이다. 그러므로, 컨볼루션 윈도우가 슬라이딩 하면, 이러한 값들은 캐시 크기를 작게 유지하기 위해 캐시로부터 제거될 수 있다.
도 2bi 내지 도 2bl은 2개의 캐시 히트들 및 2개의 캐시 미스들을 발생시키는, 다음 위치(오른쪽으로 한 스텝)에서의 컨볼루션을 계산하기 위한 다음 4개의 IFM 값들을 회수하는 것을 도시한다. 도 2bm에 도시된 바와 같이, 컨볼루션 윈도우가 오른쪽으로 한 단계씩 슬라이딩 할 때마다 4개의 IFM 값들중 2개(옅은 음영으로 표시됨)가 한 번 재-사용되므로, 2x2 컨벌루션 동안 IFM 값들을 수평적으로 캐싱하는 것은, 대략적으로, 50% 캐시 히트 확률(비율)을 발생시킨다. 보다 일반적으로, 수평적 캐싱과 함께 H x W 평면 커널 크기를 사용하고 충분한 크기의 캐시를 가정하는 컨볼루션은 H*(W-1) / (H*W) 캐시 히트 비율을 발생시킨다. 이러한 컨볼루션에 충분한 캐시 크기는 타일 당, 레인 당, (W-1) 바이트들일 수 있다. 그러나, 후술되는 바와 같이, 뉴럴 프로세서는 또한 "IFM 웨이트 사이클링"(승산기 유닛들의 웨이트들을 순차적으로 사이클링 함으로써 여러 IFM 채널들을 내적에 누적시키기 위함)을 내적 계산 동안 사용할 수 있다. 그러므로, 나중에 명확해질 것이지만, 가장 일반적인 경우에서, 최대 캐시 크기는 타일 당, 레인 당, MU 웨이트 레지스터 파일(127)에 저장된 웨이트들의 수(8-비트 웨이트 데이터 타입들의 경우 18과 동일)와 같다.
도 2ba 내지 도 2bm에서, 캐시 크기를 상대적으로 작게 유지하려면 캐시 값들을 적극적으로 제거해야 한다. 도 2bm을 참조하면, 컨볼루션 윈도우가 행 R(행 2)을 통해 슬라이딩 하므로, 이전 행 R-1(행 1)로부터의 IFM 값들은 캐시로부터 오랫동안 제거되어 있었다(행 1, 열 2에서 캐시 미스 "M"으로 표시됨). 캐시 히트 비율을 H*(W-1) / (H*W) 이상으로 높이기 위해, 예를 들어, IFM 텐서의 하나 이상의 행의 값들을 캐싱하는 것을 고려할 수 있다. 그러나, 전체 IFM 텐서 행을 캐싱하려면 캐시 크기를 증가시켜야 하므로, 일반적으로, 캐시 크기는 IFM 텐서 폭의 함수가 된다. IFM 텐서 폭은 보통 ASIC 설계시에 알 수 없고, IFM 텐서 폭은 상대적으로 클 수 있으므로, IFM 행들을 캐싱하는 것은 실리콘 면적의 측면에서 비용이 많이 들기 ‹š문에 바람직하지 않다. 컨볼루션 윈도우가 수평 대신에 수직으로(평면 좌표 내부 루프는 행 번호를 따라 반복) 주로 스캔하는 대칭적인 경우에서 동일한 추론이 적용된다.
나이브 평면 스캔과는 대조적으로, 일부 실시 예들은 컨볼루션 동작 동안 “지그-재그” 형태로 IFM 텐서의 평면 트래버셜을 수행한다. 캐시 크기를 작게 유지하면서도, 지그-재그 평면 트래버셜은 캐시 히트 확률을 높이는데 도움이 된다. 이러한 실시 예에서, 도 2c는 컨볼루션 윈도우가 변위(displace)(또는 슬라이드)될 수 있는 아래-오른쪽-위-오른쪽 지그-재그 경로를 도시한다. 나이브 수평 트래버셜과 달리, 하나가 아닌, 2개의 컨볼루션들(수직적으로 인접한 위치에서의)을 계산한 후, 도 2c의 컨볼루션 윈도우는 오른쪽으로 슬라이딩 한다. 그러므로, 나이브 수평 트래버셜에 의한 결과들의 하나의 행(1개 행의 결과들)과 대조적으로, 컨볼루션 윈도우에 의한 IFM 텐서의 단일의 완전한 왼쪽-에서-오른쪽(left-to-right) 에지-에서-에지(edge-to-edge) 스윕(sweep)은 컨볼루션 결과들의 2개의 행들(2개 행들의 컨볼루션 결과들)을 생성한다.
보다 일반적인 경우에서, 지그-재그 트래버셜은 단일 수평 IFM 텐서 스윕에서 처리된 출력 행들의 수에 대응하는 “Z 번호”를 사용하여 파라미터화 될 수 있다. 예를 들어, 도 2c에서 Z 번호는 2와 동일하다. 후술되는 바와 같이, 높은 Z 번호는 높은 캐시 히트 비율을 초래한다.
도 2c에서, 단일 수평 스윕 당 결과들의 2개의 행들을 생성하는 지그-재그 트래버셜은 폭은 2배이지만 높이는 절반인 IFM 텐서 상에서의 나이브 수평 트래버셜을 수행하는 것으로 생각될 수 있다. 보다 일반적으로, IFM 텐서 컨볼루션을 완료하기 위해 총 H/Z 스윕들을 요구하는, H*Z 컬럼들의 길이의 단일(수평) 스윕으로 "언롤드(unrolled)"되는(펴진) 지그-재그 트래버셜 경로를 볼 수 있고, 여기서 H 및 W는 각각 IFM 텐서의 높이 및 폭이다. 예를 들어, 도 2c에서 Z=2인 경우, 나이브 스캐닝에 의해, H x W IFM 레이어를 트래버스 하는 대신, 화살표 경로의 길이는 대략 H*Z=W*2이므로, 논리적 IFM 레이어 높이가 H/Z=H/2가 되는 반면에, 논리적 IFM 레이어 폭은 W*Z=2W가 된다. 나이브 수평은 Z=1인 지그-재그 트래버셜과 동일하다.
도 2da 내지 도 2dd는 컨볼루션 윈도우의 제1 위치에 대해, 캐시 미스들을 초래하는 모든 4개의 IFM 값들을 회수하는 것, 4개의 SRAM 리드들을 발생시키는 것을 도시한다. 컨볼루션 윈도우의 다음 위치에 대해, 2개 IFM 값들을 더 페치하면 캐시 미스들이 발생하는 반면, 다른 2개의 IFM 페치 위치들이 컨볼루션 윈도우의 이전 위치와 겹치므로(overlap), 도 2de 내지 도 2dh에 도시된 바와 같이, 2개의 캐시 히트들을 발생시킨다.
도 2di 내지 도 2dl에 도시된 바와 같이, 컨볼루션 윈도우의 다음 위치에 대해, 2개의 IFM 값들은 캐시 미스들이고, 2개의 IFM 값들은 컨볼루션 윈도우의 이전 위치와 겹치며, 각각은 캐시 히트를 발생시킨다. 컨볼루션 윈도우의 다음 위치에 대해, 하나의 IFM 값은 캐시 미스이고, 3개의 IFM 값들은 컨볼루션 윈도우의 이전 위치와 겹치고, 도 2dm 내지 도 2dp에 도시된 바와 같이, 캐시 히트이다. 이와 같이, 도 2dq 내지 도 2dx를 더 참조하면, 지그-재그 경로의 사용은 캐시 미스에 대한 캐시 히트의 비율을 크게 향상시킨다.
도 2e는 지그-재그 트래버셜 효율의 척도인 이상적인 캐시 내에서 SRAM 리드들의 수를 참조하여 지그-재그 트래버셜과 연관된 SRAM 리드들의 실제 수를 도시하는 테이블이다. 테이블은 단일 스윕을 수행하는 동안 주어진 Z에 대해 캐시 크기들이 충분한 것으로 가정하고, 즉, 이전 스윕으로부터의 값들은 제거된다. 테이블에서 더 낮은 숫자는 더 높은 효율에 대응하고, 1.0은 이상적인 경우이다. 컨볼루션 크기는 정사각형 웨이트 커널들의 평면 디멘션(planar dimensions)를 나타낸다. 예를 들어, Z=2인 지그-재그 트래버셜을 갖는 3x3 컨볼루션은 이상적인 캐시 (즉, 무한한 용량을 갖고 어떤 값들도 제거하지 않는다)를 사용하는 3x3 컨볼루션에 비해 2배 많은 SRAM 리드들을 발생시킨다. 그러나, Z=1인 지그-재그 트래버셜을 사용하는 3x3 컨볼루션은, 즉, 나이브(예를 들어, 수평) 트래버셜은, 이상적인 캐시를 사용하는 것에 비해 3배 더 많은 SRAM 리드들을 발생시킨다. 따라서, 이 경우에서, Z=2인 지그-재그 트래버셜은 나이브 트래버셜에 비해 SRAM 리드 횟수를 3/2 = 1.5배로 감소시키는 반면에, 이하에서 설명되는 공식들에 의해 계산되는 바와 같이, 양 지그-재그 Z=2 및 Z=1 나이브 트래버셜들에 대한 캐시 크기는 거의 변경되지 않는다. Z의 수가 클수록 SRAM 리드 횟수가 더 크게 절약된다. 예를 들어, 캐시 Z를 4로 증가시키면, 3x3 컨볼루션에 대해 3/1.5=2배의 SRAM 리드가 절약된다.
도 2f는 각 클럭 당 하나의 IFM 슬라이스가 처리된다고 가정할 때, IFM 캐시를 제공하는데 필요한, 클럭 당, 평균 예상되는 IFM SRAM 리드들의 테이블을 도시한다. 예를 들어, 캐시없는 100%(즉, 모든 클럭)와 비교하면 그리고 캐시 Z=1(즉, 나이브 트래버셜 방식)을 사용하는 시간의 20%와 비교하면, 캐시 Z=4를 사용하는 5x5 컨볼루션은, 평균적으로, 시간의 8%만의 SRAM 리드를 수행한다.
도 2ga 내지 도 2gb는 캐시 히트/미스 카운트들 및 캐시 크기의 도출을 도시한다. 지그-재그 트래버셜은, 컨볼루션 윈도우가 Z-1 행들만큼 수직으로 슬라이드한 다음에, 한 열만큼 옆으로 슬라이드 하는, 2개의-단계(two-step) 시퀀스의 반복을 포함한다. 단순성을 위해 IFM 텐서 에지들에서의 특수한 경우들을 무시하면, 하나의 열만큼 옆으로(도 2ga에서 오른쪽으로) 슬라이드 하는 평면 크기 W x H의 컨볼루션 윈도우는 H개의 캐시 미스들(“m”으로 표시됨) 및 H*(W-1)개의 히트들을 발생시킨다. Z-1개의 행들을 수직으로(도 2gb에서 아래로) 슬라이딩 하는 다음 단계는 (Z-1)개의 캐시 미스들 및 (Z-1)*(H*W-1)개의 캐시 히트들을 발생시킨다.
이에 따라, 컨볼루션 윈도우가 수평적으로 한 열 만큼 슬라이드 하면, 컨볼루션 윈도우는 현재 계산을 위한 커널 윈도우 내부에서 이전에-캐시된 값들(도 2ga에서 “c”로 표시됨, 이전의 수직 변환 동안 캐시된)을 사용할 수 있다. 윈도우가 (아래, 도 2ga에서) 수직으로 슬라이딩하기 시작할 것이므로, 커널 윈도우 외부(아래, 2ga에서) 에서 "c"로 표시된 이전에-캐시된 값들은 또한 사용될 수 있도록 캐시에 남아있어야 한다. 또한, SRAM으로부터 페치된 값들("m"으로 표시됨)은 캐시에 추가되어야 하는데 현재 위치에서뿐만 아니라 컨볼루션 윈도우가 Z-1 행들 아래로 슬라이드 하고, 한 열만큼 오른쪽으로 슬라이드하고, 그리고 다시 위로 간 이후의 나중에, 계산에 사용되기 위해서이다. 다음으로, 컨볼루션 윈도우가 한 행 아래로 슬라이드 할 때마다, 하나의 캐시 값(왼쪽 상단)은 제거될 수 있고 그리고 SRAM으로부터의 하나의 값은 추가될 수 있다(“m”으로 표시됨). 그러므로, 도 2gb에서 "c" 마크들의 수를 카운트하려면, 요구되는 캐시 사이즈는 "(H + (H+Z-1)*(W-1))"이다.
후술되는 바와 같이, 웨이트 사이클링(weight cycling)이 사용되면, 캐시 사이즈는 임의의 타일에 동시에 저장된 커널들의 수와 동일한 인자(factor)만큼 증가될 수 있다. 상술된 바와 같이, 컨볼루션 커널이 작으면, 시스템은 여러 평면 커널들을 각 MU에 저장할 수 있다. 예를 들어, MU가 18 개의 웨이트 레지스터들을 포함하고 컨볼루션이 2x2이면, 4개의 2x2 커널들이 MU 웨이트 레지스터들에 저장될 수 있다. 예를 들어, 64개의 채널들(0 ... 63)을 포함하는 IFM의 내적은, 시간에 따라, 4개의 저장된 커널들을 싸이클링함으로써 OFM 0... 7로 계산될 수 있다. 시스템은 채널들(0 ... 15)을 보유하는 IFM 슬라이스를 페치하고, (4개 중) 제1 커널을 곱하고, 그리고 타일의 누산기 내에 결과를 보관할 수 있고; 채널들(16 ... 31)을 포함하는 IFM 슬라이스를 페치하고, (4개 중) 제2 2x2 커널을 곱하고, 그리고 결과를 이미-저장된 누산기 값에 더하고; 그리고 제3 및 제4 커널에 대해 반복한다. 이러한 IFM들은 또한 캐시될 수 있고, 이에 따라 캐시 크기를 증가시킨다. 그러나, 평면 변환 방법(나이브 또는 지그-재그 또는 다른 어떤)의 선택에 관계 없이, IFM 캐시 크기는 상한을 갖고, 이것(상한)은 승산기 유닛 웨이트 레지스터 파일의 크기의 함수이다. 이것은 각각의 캐시된 IFM이 곱해질 웨이트 레지스터 파일 내에서 대응하는 웨이트를 가져야하기 때문이고, 웨이트 레지스터 파일 자체는, 예를 들어, 18 웨이트들로 제한된다. 동일한 이유가 또한 웨이트 레지스터 파일 크기와 같은 하한(lower bound)을 갖는 IFM 캐시 크기로 전환되는 것에 유의해야 한다.
그러므로, IFM 캐시 크기는, 모든 가능한 지원되는 H 및 W 조합들을 인계받아, 최대의 "(H + (H+Z-1) * (W-1) - 1)" 및 MU_WEIGHTS로 설정되어야 하고, 여기서 MU_WEIGHTS는 승산기 유닛 웨이트 레지스터 파일 크기, 예를 들어 18과 동일하다. 예를 들어, 뉴럴 프로세서가 승산기 유닛 당 18개의 웨이트들을 포함하고, Z=2인 지그-재그 트래버셜 및 “H*W <=18", 예를 들어, 1x1, 1x2, 2x1, … 4x4, 9x2, 2x9가 되도록, 커널 웨이트 평면 크기에 대한 모든 자연수 H 및 W를 지원하면, IFM 캐시 크기는 (1 + (1+2-1) * (1-1) - 1) = 0, (1 + (1+2-1) * (2-1) - 1) = 2, (2 + (2+2-1) * (1-1) - 1) = 2, ... (4 + (4+2-1) * (4-1) - 1) = 18, (2 + (2+2-1) * (9-1) - 1) = 25, (9 + (2+2-1) * (2-1) - 1) = 11 및 18에서 최대, 즉, 25이다.
일부 실시 예들에서, MU 웨이트 레지스터 파일 용량은 18개의 8-비트 웨이트들(uint8 또는 int8)과 같거나, 또는, 동등하게, 9개의 16-비트 웨이트들(uint16 또는 int16)와 같다. IFM 데이터가 16-비트(uint16 또는 int16)이면, IFM 캐시는 하나의 16-비트 IFM 당 2 바이트들을 할당함으로써, 16-비트 IFM 데이터를 저장할 수 있다. 그러므로, MU 웨이트 레지스터가 9개의 16-비트 웨이트들을 저장할 수 있는 것과 유사하게, IFM 캐시는 9개의 16-비트 IFM 값들을 저장할 수 있다. 지그-재그(뿐만 아니라 나이브도) 평면 트래버셜은 8-비트 값들에 적용되는 방법과 유사하게 16-비트 IFM 값들에 적용될 수 있다. 이러한 경우들에서, 상술된 캐시 크기는 또한, "(H + (H+Z-1) * (W-1) - 1) * size_of (IFM_DATA_TYPE)"과 같은, 최대 함수 내에서의 추가적인 W 및 H 항들을 포함해야 하고, 여기서 size_of (IFM_DATA_TYPE)는 IFM 값들의 데이터 타입의 크기(바이트 크기로)를 나타낸다(예를 들어, 24-비트 IFM 값들의 경우 3 바이트들, 32-비트 IFM 값들의 경우 4 바이트들). IFM 데이터 타입이 24-비트, 32-비트, 또는 그 이상인 경우들에서 지그-재그(그리고 나이브) 캐싱이 사용될 수 있지만, MU 웨이트 레지스터 파일(127) 크기(그리고 IFM 캐시 크기)를 3 x 3 x size_of(IFM_DATA_TYPE)으로 증가시키는 것이 추천된다. 나중에 상세히 설명되는 바와 같이, 이는 바람직하지 않을 수 있는, 부분 결과들의 사용에 의지함 없이, 자주 사용되는 3x3 평면 크기의 웨이트 커널들이 컨볼루션 되도록 할 수 있다.
앞서 설명된 바와 같이, SRAM IFM 페칭, IFM 전달 패브릭을 통한 IFM 슬라이스들의 전송, 로컬 타일들 내에서 IFM 값들을 캐싱하는 것, (일반적으로 각 활성화 레인마다 다소 다른 비율들로) 캐시된 IFM 값들 회수하는 것, 그리고 타일들 사이에서 OFM 결과들을 재-동기화(re-synchronizing)하는 것의 적절한 제어를 실행하기 위해, 글로벌, SRAM, 타일, 및 레인 제어 로직 유닛들(140, 142, 144 및 146)이 함께 작동한다. IFM 및 OFM 평면 트래버셜을 구성하기 위해, 호스트 CPU는 지그-재그 높이(Z)를 포함하여, 계산 파라미터들을 글로벌 제어 FSM(140) 및 SRAM 제어 로직(142)에 로드한다. 이 후, 글로벌 제어 FSM(140)은 SRAM 제어 FSM들(142) 및 타일 제어 FSM(144)을 조정하여 계산을 시작하고 수행한다.
컨벌루션 원도우가 지그-재그 평면-방향 방식으로 입력 및 출력 레이어들을 트래버스 하면, 각각의 누적-및-반환(accumulate-and-return) 유닛(167)은, 프리-풀링(pre-pooling) 결과들을 SRAM에 저장하지 않고 그리고 풀링(pooling)을 적용하기 위해 나중에 그것들을 리드하는 것 없이 유리하게, 온-더-플라이로 풀링을 계산하기 위해 필요한 OFM 값들을 수신할 수 있다. ARU는 도 2ha 내지 도 2hd에 도시된 바와 같이, 각 컨벌루션 OFM 결과를 전송하지 않는 대신에, 각 풀링 출력이 완료 될 때까지 ARU의 풀링 로직(196)의 레지스터에서 컨벌루션 결과를 유지함으로써, 풀링 윈도우가 겹치지 않는 경우들에서 풀링을 수행 할 수 있다. 각 풀링 출력이 완료된 후에만, ARU는 풀링 출력을 SRAM(109)에 라이트한다. 최대 풀링의 경우, ARU 출력 레지스터는 최대 값을 유지할 수 있고, 이 값은 컨벌루션 출력들과 비교되고, 최신 OFM 출력이 현재 최대 값을 초과할 때 업데이트 된다. 풀링 윈도우가 슬라이드 하면, ARU 출력 레지스터는 최대 동작을 새로 시작하기 위해 리셋된다. 평균 풀링의 경우, ARU 누산기는 풀링 윈도우가 막 슬라이드 할 때까지 OFM 출력을 추가하는 것을 유지한다. 이 후, 평균을 계산하기 위해 누산기에 "1/(POOLING_WIDTH * POOLING_HEIGHT)"이 곱해지고, 평균이 라운드(round)되어 SRAM에 라이트된다. 풀링 윈도우가 슬라이드 되면, 누산기는 다시 평균화를 시작하기 위해 리셋된다.
예를 들어, 도 2ha는 2x2 평면 풀링과 함께 수행된 Z=2인 지그-재그 평면 트래버셜을 도시하고, 여기서 IFM 레이어는 OFM 값들(각각의 풀링 윈도우에서)이 순차적으로 계산되도록 하는 이러한 방식으로 트래버스된다. ARU 출력은 각각의 4개의 OFM 값들(각각의 풀링을 계산하기 위해 필요)을 차례대로 생성하므로, ARU 풀링 로직(196)은 최대 풀링을 계산하기 위해 4개의 연속 결과들 중 최대 값을 취할 수 있다. 도 2hb는 3x3 평면 풀링 및 "Z = 3"을 갖는 지그-재그 평면 트래버셜을 도시한다. Z 값이 풀링 커널 높이와 같으므로, 지그-재그 방식으로 IFM 레이어를 트래버스 하면, 최대 및 평균 폴링에 적합한 순서로 생성된 각 풀링 윈도우에서의 OFM이 자연스럽게 발생한다. 도 2hc는 "Z=H=4"의 추가적인 예시를 제공하고, 여기서 H는 풀링 커널의 높이를 나타낸다.
도 2hd는 Z=4이고 풀링 커널의 높이가 2가 되도록, Z 값이 풀링 커널의 높이와 일치하지 않는 경우를 도시한다. 이 경우, 풀링 로직(196)은 풀링을 2개의 영역들(도시된 바와 같이, 상위 2x2 및 하위 2x2)로 세분화하고 그리고 추가 레지스터를 사용하여 2개의 풀링 영역들 중 하나(도 2hd에서 하위 2x2)로부터의 미완료된 결과들을 일시적으로 저장할 수 있다. 보다 일반적으로, 지그-재그 풀링 윈도우 높이는 지그-재그의 트래버셜 높이의 자연수의 배수일 수 있다. 합리적인 숫자들은 2, 3 및 4를 포함할 수 있다. 이전에 언급된 바와 같이, 지그-재그 풀링 수직 스트라이드(stride)는 지그-재그 트래버셜 높이와 같아야 하고, 이는 온-더-플라이 풀링을 이러한 경우들에서만 가능하도록 제한한다. 그러나, 출력 풀링 로직(196)이 풀링 로직의 충분한 사본(copy)들을 갖는 한 풀링 윈도우들은 수평적으로 겹칠 수 있고, 풀링 로직의 충분한 사본(copy)들 각각은 모든 이러한 수평적으로-겹치는 풀링 윈도우들에 대해 병렬적으로 각각의 수평적으로-겹치는 풀링 윈도우를 처리할 수 있다. 지그-재그 풀링 윈도우 폭 및 스트라이드는, 예를 들어, 2, 3, 및 4를 포함하는, 합리적인 풀링 윈도우 폭 숫자처럼, 일반적으로 임의적일 수 있다.
풀링 윈도우들이 수직으로 겹치는 경우들에서, 이에 따라 온-더-플라이 풀링이 문제가 발생하고, 그리고/또는 커스텀 풀링(custom pooling, 최대 및 평균이 아닌)이 필요한 경우, 풀링은 (i) SRAM 뱅크들 근처에 리드-수정-라이트(read-modify-write) 로직을 배치하는 것(현재 발명에서 개시되지 않음) 및/또는 (ii) AXI를 통해 외부 CPU, GPU, DSP, 또는 컴퓨팅 코어의 다른 타입으로 SRAM을 독출(read out)하는 것, 풀링을 수행하는 것, 그리고 AXI를 통해 NPU SRAM에 다시 결과들을 라이트하는 것에 의해 수행될 수 있다. 또한, SRAM 뱅크들 근처의 커스텀 리드-수정-라이트 로직은, 부분 결과들을 타일들로 다시 전송하지 않고, 부분 결과들을 효율적으로 합하기 위해 재-사용될 수 있다.
뉴럴 프로세서가 특정 동작(예를 들어, 컨볼루션 또는 완전히-연결된 레이어 계산)을 수행하도록 구성하기 위해, IFM 및 OFM 텐서 크기들을 고려할 필요가 있고, 그리고 동작의 파라미터들(예를 들어, 동작 타입, 스트라이드, 등)과 함께 이용 가능한 하드웨어에 계산을 “매핑(mapping)”할 필요가 있다. 각각의 개별 타일은 오직 고정된 숫자의 16개의 IFM 뎁스 채널 입력들 및 8개의 OFM 뎁스 채널 출력들을 가질 수 있는 반면, 딥 러닝 뉴럴 네트워크 모델 레이어들에서의 뎁스 채널들의 수는 다양하고 그리고 일반적으로 16 및 8을 훨씬 초과한다. “매핑 알고리즘(mapping algorithm)”은 오프라인으로 실행되어(런 타임과 대조적으로 컴파일 시간 동안) 이러한 큰 IFM 및 OFM 텐서들을 부분들(서브-텐서들)로 세분화하고, 이러한 부분들을 계산을 위한 이용 가능한 타일들에 할당하고, 그리고 이용 가능한 타일들로부터의 출력들이 어떻게 계산을 완료하기 위해 재-조립(re-assemble)될 수 있는지에 대한 설명(구성)을 생성 할 수 있다. 이하에서 보다 상세하게 설명되는 바와 같이, 매핑 알고리즘은 또한 IFM(및 대응하는 OFM) 텐서 트래버셜의 순서를 평면-방향 및 특히 뎁스-방향 모두로 결정할 수 있다. 특정 매핑 문제, 즉, 주어진 IFM, OFM, 및 웨이트 텐서 크기들 및 동작 파라미터들에 대한 다양한 솔루션들이 있을 수 있으므로, 매핑 알고리즘은 또한 최저 전력, 최저 SRAM 크기, (승산기 이용률을 최대화하여 달성된) 최저 계산 레이턴시, 또는 이들의 조합(예를 들어, 사용 가능한 고정된 SRAM 크기가 주어진 최저 전력)에 대한 솔루션을 최적화할지를 가리키는 파라미터를 수용할 수 있다.
사소한 것으로부터 점점 더 진보된 경우들로의 진행으로서, 일부 실시 예들의 매핑 동작의 양상들은 예시들의 세트로부터 이해될 수 있다. 활성화 스키핑은 매핑에 크게 영향을 미치지 않으므로, 설명의 명확성을 위해, 제로 활성화 스키핑과 관련된 특징들을 무시하기로 하고, 각각의 OFM 열은 하나의 가산기 트리 및 누산기만 포함(즉, 계산이 “덴스(dense)”함)하는 것으로 가정한다. 캐싱은 매핑에 크게 영향을 미치지 않으므로, 지그-재그 평면 변환 방법을 포함하는 캐싱을 무시하기로 하고, 그리고 컨볼루션 윈도우는 래스터(raster) 방식으로 이동(평면-방향으로 슬라이드)하는 것으로 가정한다. 도 3aa 내지 3ak에서 도시된, 제1 예시에서, 단일 타일을 사용하여, 3x3x16x8 컨볼루션이 계산된다. 도 3aa는 입력들로서 16개의 뎁스 채널들을 갖는 IFM(하나의 IFM 슬라이스)를 수용하고 그리고 8개의 뎁스 채널들을 갖는 OFM(하나의 OFM 슬라이스)을 생성하는 타일을 도시한다. 도 3ab에서 도시된 바와 같이, IFM 텐서(304) 크기는 64x64x16이고, OFM 텐서 크기는 64x64x8이고, 그리고, 웨이트 텐서 크기는 3x3x16x8이다.
처음에는, 도 3ac에 도시된 바와 같이, 웨이트들은 SRAM으로부터 MU 웨이트 레지스터 파일들(127)로 미리-로드된다. 웨이트 커널(302) 크기는 3x3x16x8이다. 3x3의 평면 크기를 가지면, 웨이트 커널은 "3*3=9" 평면 "위치들"을 갖고, 도 3ac에서 A 내지 I로 표시된다. 각각의 평면 위치는 하나의 OFM 채널에 대해 16-길이 IFM 값 벡터를 갖는 내적을 계산하는데 사용되는 16-길이 웨이트 벡터와 연관된다. 8개의 OFM 채널들이 있으므로, 도 3ac에서 도시된 바와 같이, 웨이트 커널은 각각의 OFM에 대해 하나의 3D 텐서를 갖는 것으로 생각될 수 있다.
구체적으로, 웨이트들은 다음과 같이 MU 웨이트 레지스터 파일들(127)에 로드될 수 있다. 전체 MR 어레이(122) 내의 복수의 MU 웨이트 레지스터 파일들은 디멘션 18x16x8(MU 당 18개의 웨이트들, 16개의 MU 행들 및 8개의 MU 열들)을 포함하는 텐서로 생각될 수 있고, 텐서는 크기 3x3x16x8의 전체 웨이트 커널을 보유하기에 충분할 수 있다. 18x16x8의 웨이트 레지스터 파일 텐서 크기는 또한 (3x3)x16x8로 리-라이트(re-write)될 수 있고, 여기서 행(R), 열(C)에서 각각의 MU 웨이트 레지스터 파일은 웨이트 텐서(W x H x R x C)에서의 3x3 = 9 평면 위치들(x, y)의 모든 9개의 웨이트들을 저장할 수 있고, 여기서 W 및 H는 웨이트 커널 평면 폭 및 높이, 즉, W=3 및 H=3이다. 예를 들어, 도 3ac를 참조하면, 행 0, 열 0에서 웨이트 레지스터 파일은 웨이트들 "{A0[0], B0[0], C0[0], D0[0], E0[0], F0[0], G0[0], H0[0], I0[0]}"을 저장하고, 여기서 표기법은 "A... I" 다음에 OFM 열 "0... 7" 및 IFM 행 "[0...15]"이다. 이에 따라, 행 15, 열 0에서 웨이트 레지스터 파일은 웨이트들 "{A0[15], B0[15], C0[15], D0[15], E0[15], F0[15], G0[15], H0[15], I0[15]}"를 저장하고, 행 15, 열 7에서 웨이트 레지스터 파일은 웨이트들 "{A7[15], B7[15], C7[15], D7[15], E7[15], F7[15], G7[15], H7[15], I7[15]}"를 저장한다, 그리고 기타등등. 타일들은 내적을 “수직적으로” 계산하므로(열-와이즈(방향)(column-wise) 가산기 트리들을 사용하여), 로드된 웨이트들의 기술된 순서는 각각의 평면 위치(A…I)에서 IFM 입력의 내적 계산을 허용하는 것을 볼 수 있다.
도 3ad을 참조하면, 이 후 컨볼루션 윈도우는 시작 위치에 위치될 수 있고, 그리고 8개의 누산기들(전술된 바와 같이, 매핑 설명의 명확성을 위해 8개의 OFM 채널들 각각에 대해 하나씩 존재)이 클리어될 수 있다.
도 3ae를 참조하면, 이 후 타일은 SRAM으로부터 IFM a[0 ... 15](여기서 "a ... z"는 IFM의 평면 위치들을 나타내고 "0 ... 15"는 IFM 뎁스 채널들을 나타냄)를 리드할 수 있고, 그리고 이러한 값들을 타일의 8개의 열들로 브로드캐스트 할 수 있다. 제1 열은 "a[0 ... 15]"를 요소별(element-wise)로 미리-로드된 웨이트들 "A0[0] ... A0[15]"에 곱할 수 있고, 제2 열은 "a[0 ... 15]"를 요소별로 미리-로드된 웨이트들 "A1[0] ... A1[15]"에 곱할 수 있다, 등등. 결과 곱들은 수직적으로(각각의 열의 가산기 트리를 사용하여) 합산(또는 감소)될 수 있고, 그리고 해당 누적기에 더해질 수 있다. 단일 위치에서 3x3 컨볼루션을 완료하기 위해, 8개 이상(3*3=9 중에서)의 평면 위치들이 처리되기 위해 남아있으므로, 결과 내적은 아직 완성된 결과가 아니다.
도 3af를 참조하면, 이 후 타일은 SRAM으로부터 IFM b[0 ... 15]를 리드할 수 있고, 그리고 이러한 값들을 타일의 8개의 열들로 브로드캐스트 할 수 있다. 제1 열은 "b[0 ... 15]"를 요소별로 사전로드된 웨이트들 "B0[0] ... B0[15]"에 곱할 수 있고, 제2 열은 "b[0 ... 15]"를 요소별로 사전로드된 웨이트들 "B1[0] ... B1[15]"에 곱할 수 있다, 등등. 결과 곱들은 수직적으로 합산될 수 있고, 그리고 해당 누적기에 더해질 수 있다. 도 3ag를 참조하면, 이 후 타일은 SRAM으로부터 IFM c[0 ... 15]를 리드할 수 있고, 그리고 이러한 값들을 타일의 8개의 열들로 브로드캐스트 할 수 있다. 제1 열은 "c[0 ... 15]"를 요소별로 사전로드된 웨이트들 "C0[0] ... C0[15]"에 곱할 수 있고, 제2 열은 "c[0 ... 15]"를 요소별로 사전로드된 웨이트들 "C1[0] ... C1[15]"에 곱할 수 있다, 등등. 결과 곱들은 수직적으로 합산될 수 있고, 그리고 해당 누적기에 더해질 수 있다.
도 3ah를 참조하면, 이 후 타일은 SRAM으로부터 IFM g[0 ... 15]를 리드할 수 있고, 그리고 이러한 값들을 타일의 8개의 열들로 브로드캐스트 할 수 있다. 제1 열은 "g[0 ... 15]"를 요소별로 사전로드된 웨이트들 "D0[0] ... D0[15]"에 곱할 수 있고, 제2 열은 "g[0 ... 15]"를 요소별로 사전로드된 웨이트들 "D1[0] ... D1[15]"에 곱할 수 있다, 등등. 결과 곱들은 수직적으로 합산될 수 있고, 그리고 해당 누적기에 더해질 수 있다. 도 3ai를 참조하면, 이 후 타일은 SRAM으로부터 IFM h[0 ... 15]를 리드할 수 있고, 그리고 이러한 값들을 타일의 8개의 열들로 브로드캐스트 할 수 있다. 제1 열은 "h[0 ... 15]"를 요소별로 사전로드된 웨이트들 "E0[0] ... E0[15]"에 곱할 수 있고, 제2 열은 "h[0 ... 15]"를 요소별로 사전로드된 웨이트들 "E1[0] ... E1[15]"에 곱할 수 있다, 등등. 결과 곱들은 수직적으로 합산될 수 있고, 그리고 해당 누적기에 더해질 수 있다.
도 3aj를 참조하면, a 내지 o로 라벨된, 커널의 9개의 위치들 중 나머지 위치에 대해 유사한 동작들이 수행될 수 있다. 이 후, 누산기들에 저장된 값들은 8-비트 출력 OFM을 형성하기 위해 라운드될 수 있고, 모든 8개의 OFM 결과들은 SRAM에 라이트될 수 있다. 이는 하나의 컨볼루션의 계산을 완료한다. 도 3ak에 도시된 바와 같이, 이 후, 컨볼루션 윈도우는 하나의 열마다 평면-와이즈로 옮겨질 수 있고, 그리고 그 동작들은 반복될 수 있다.
도 3ba 내지 도 3bc에 도시된, 제2 예시에서, 3x3x16x128 컨볼루션은 단일 타일을 사용하여 계산된다. 전술된 바와 같이, 편의를 위해, 도 3ba에서 도시된 것처럼 용어 "IFM 슬라이스"는 16개의 IFM 뎁스 채널들, IFM 리드의 단위(그리고 타일 입력)을 의미하도록 정의될 수 있고, 용어 "OFM 슬라이스"는 8개의 IFM 뎁스 채널들, OFM 타일 출력의 단위를 의미하도록 정의될 수 있다. 동작 매핑을 직사각형으로 설명하는 것이 편리할 수 있고, 여기서 도 3bb에 도시된 바와 같이 직사각형의 높이는 IFM 채널들의 수에 대응하고, 그리고 직사각형의 폭은 OFM 채널들의 수를 나타낸다. 3x3x16x128 컨볼루션은 그것을 16개의 3x3x16x8 컨볼루션들로 분할함으로써 수행될 수 있으므로, 3x3x16x8 컨볼루션을 수행하는 이전 예시가 16번 반복될 수 있다. 제1 단계에서, OFM[0..7]에 대한 3x3x16x8 컨볼루션이 계산될 수 있고, 제2 단계에서, OFM[8..15]에 대한 3x3x16x8 컨볼루션이 계산될 수 있고, 등등 계속해서, 제16 단계에서, OFM[120..127]에 대한 3x3x16x8 컨볼루션까지 계산될 수 있다. OFM 채널들의 다음 서브세트를 처리하는 것은 "OFM을 스테핑하는 것(stepping the OFM)"으로 지칭될 수 있다. 16개의 단계들은 16개의 직사각형들에 대응할 수 있고, 직사각형들 중 제1, 제2, 및 제16 직사각형들은 도 3bc에 도시되고, 그리고 16 단계들이 완료되면, 3x3x16x128 컨볼루션이 계산되는 것을 도 3bb 및 3bc로부터 볼 수 있다.
가설적으로, OFM을 충분히 작은 조각들로 간단히 분할함으로써, 이러한 방식으로 무제한 수의 OFM 채널들은 처리될 수 있다. 시스템이 "OFM의 스텝(steps the OFM)"을 수행할 때마다, IMF는 전체적으로 다시-리드된다(이 예시에서, 16번). (전체) IFM의 각각의 리드는 "IFM 패스(pass)"로 지칭될 수 있고, 그리고 각각의 이러한 IFM 패스는 상당한 양의 에너지(또는 파워, 동작이 반복적으로 수행되는 경우)를 소비할 수 있다. 특히 모바일 스마트폰들과 같은 배터리-구동(battery-powered) 장치들의 경우, 전력 소비를 감소시키는 것이 매우 바람직하다. 다음 예시는 이러한 에너지 비용 중 일부를 피하기 위한 접근을 도시한다.
도 3ca 및 도 3cb에 도시된, 제3 예시에서, 3x3x16x128 컨볼루션이 계산되고, 이 경우 16개의 타일들(하나의 타일과 대조적)을 사용한다. 각각의 타일은 “16*8 = 128” 승산기들을 포함하므로, 16개의 타일들은 총 “128 * 16 = 2,048” 승산기들을 포함한다. IFM[0..15]는 모든 16개의 타일들로 브로드캐스트될 수 있으므로, 타일(1)은 OFM[0..7]을 계산할 것이고, 타일(2)는 OFM[8..15]을 계산할 것이고, 등등 계속해서, 타일(16)은 OFM[120..127]을 계산할 것이다. 본 명세서에서 사용된 바와 같이, 브로드캐스트는 단일 타일을 갖는 모든 MU 열들로 ABU 출력을 피드하는 것을 의미하는 타일(102)의 설명과 대조적으로, IFM "브로드캐스트"는 여러 MR 타일들(102)에 동시에 IFM을 피드하는 것을 의미함에 유의해야 한다.
뉴럴 프로세서는 다수의 SRAM 뱅크 세트들(109)(도 1a 및 도 3ac)를 포함한다. 이와 같이, 도 3cb를 참조하면, 입력 "IFM[0..15]"는 SRAM 뱅크 세트(0)로부터 피드될 수 있다. 타일(1)의 출력(OFM[0..7])은 타일(2)의 출력(OFM[8..15])과 함께 16-채널 "OFM[0..15]"로 연결되어 SRAM 뱅크 세트(1)에 저장될 수 있다. 유사하게, 타일(2)의 출력은 타일(3)의 출력과 연결되어 SRAM 뱅크 세트(2)에 저장 될 수 있고, 등등 계속해서, 타일(15)의 출력은 타일(16)의 출력과 연결되어 SRAM 뱅크 세트(8)에 저장된다. 제3 예시에서, IFM 브로드캐스트를 사용한 결과로서, IFM 데이터가 한번만 리드되므로, 모든 OFM들이 단일 "패스" 내에서 계산되고(즉, 전체 IFM을 한 번 리드함) 그리고 다수의 IFM 패스들을 수행함으로써 제2 예시에서 발생한 대부분의 에너지 소비를 피하는 것을 볼 수 있다.
도 3da에 도시된, 제4 예시에서, 3x3x16x256 컨볼루션이 계산되고, 16개의 타일들을 사용한다. 16개의 타일들은 단일 패스에서 최대 "16*8 = 128" OFM 채널들만 생성할 수 있고; 이러한 예시에서, 256개의 OFM 채널들이 생성될 수 있다. 그러므로, OFM[0..127]을 계산하는데 사용되는 제1 단계 및 OFM[128..255]를 계산하는데 사용되는 제2 단계를 갖는, 2개의 OFM 단계들이 실행될 수 있다. 2개의 IFM 패스들이 사용될 수 있다(IFM을 완전히 2번 리드함). 2개의 단계들에서 OFM을 형성하는 것은 도 3da에서 도시된다.
도 3ea 및 도 3eb에 도시된, 제5 예시에서, 3x3x32x64 컨볼루션이 계산되고, 16개의 타일들을 사용한다. 16개의 IFM 채널들을 가졌던 앞선 예시들과 달리, 이 예시는 32개의 IFM 채널들을 포함한다. 모든 32개의 IFM 채널들(2개의 슬라이스들)은 SRAM으로부터 동시에 리드될 수 있다. 뉴럴 프로세서는 여러 SRAM 뱅크 세트들을 포함할 수 있다. 각각의 뱅크 세트는(매핑 예시들에서) 클럭 사이클 당 1개의 슬라이스를 스트림(stram) 할 수 있다. 따라서, 2개의 슬라이스들(32개의 IFM 채널들)을 동시에 리드(또는 스트림)하기 위해, 2개의 뱅크 세트들이 사용될 수 있고, 이 중에서 제1 뱅크 세트는 IFM[0..15]을 스트림할 수 있고, 그리고 이 중에서 제2 뱅크 세트는 IFM[16..31]을 스트림 할 수 있다.
도 3eb를 참조하면, OFM[0..7]의 계산은 타일(1) 및 타일(9)에 걸쳐 분할(split)될 수 있다. 타일(1)은 IFM[0..15]를 미완료 OFM[0..7]로 감소시킬(또는 합할) 수 있다. 타일(2)는 IFM[16..31]을 미완료 OFM[0..7]로 감소시킬 수 있다. 이 후, OFM[0..7]의 계산은 타일(1)과 타일(2)의 출력들을 합함으로써(그리고 바이어스, 활성화 함수, 등을 적용함으로써) 완료될 수 있다. 이러한 합을 수행하기 위해, 타일(1) 및 타일(2)의 가산기 트리들은 하나 이상의 추가 하드웨어 가산기 스테이지를 사용하여 "결합(join)"될 수 있다. 감소 패브릭(111)은 이러한 추가 하드웨어 가산기 스테이지들을 제공한다. OFM[8..15](타일(2) 및 타일(10) 추가), ... OFM[56..63] (타일(8) 및 타일(16) 추가)에 대해 유사한 동작들이 사용될 수 있다. 도 3eb를 참조하면, 이 예시에서, 타일들(1..8)로부터 SRAM으로의 출력이 없고; 후술되는 바와 같이, 타일들(9..16)만이 OFM을 SRAM에 저장한다.
도 3fa 내지 도 3fc에 도시된, 제6 예시에서, 3x3x32x512 컨볼루션이 계산되고, 16개의 타일들을 사용한다. 도 3fa를 참조하면, 제5 예시에서와 같이, 2개의 IFM 슬라이스들(IFM[0..31])이 2개의 SRAM 뱅크들로부터 리드될 수 있고, 그리고 2개의 IFM 슬라이스들 각각은 8개의 타일들로 브로드캐스트될 수 있다. 2개의 이러한 8개의 타일들의 세트들은 함께 OFM[0..63]을 계산할 수 있고, 이러한 결과들은 4개의 SRAM 뱅크 세트들에 저장될 수 있다. 도 3fb를 참조하면, IFM 패스 당 64개의 OFM들이 계산될 수 있다(즉, 64개의 OFM들을 계산하기 위해 전체 IFM이 리드될 수 있다). 이와 같이, 제4 예시의 방식과 유사한 방식으로, 512개의 OFM들이 8개의 IFM 패스들(그리고, 동등하게, 8개의 OFM “단계”)에서 계산될 수 있다. OFM[0..63]은 제1 IFM 패스 동안 계산될 수 있고, OFM[64..127]은 제2 IFM 패스 동안 계산될 수 있고, 등등 계속해서, OFM[448..511]은 제8 IFM 패스 동안 계산될 수 있다. 이러한 예시에서, "64개의 OFM 슬라이스들에 의한 2개의 IFM 슬라이스들(2개의 IFM 슬라이스들 X 64개의 OFM 슬라이스들)" 동작이 8개의 OFM 단계들로 분할(split)되었다. 각 OFM 단계는 "8개의 OFM 슬라이스에 의한 2개의 IFM 슬라이스들(2개의 IFM 슬라이스들 X 8개의 OFM 슬라이스들)"을 컨볼루션 한다. 도 3fc를 참조하면, 일부 실시 예들에서, 가상 SRAM 뱅크들은 SRAM 뱅크(약 32 kB의 용량을 가질 수 있는)에 IFM 데이터가 바닥나거나 또는 OFM 데이터가 가득 채워지는 경우들을 처리하기 위해 사용될 수 있다.
이러한 경우에서, 뉴럴 프로세서의 데이터 패브릭은 투명하게 (IFM 스트림들을 수신하는 타일들로) 전환(switch)하여 다른 SRAM 뱅크 세트를 연결할 수 있다. 앞서 언급된 바와 같이, IFM 및 OFM 텐서들은 단일 SRAM 뱅크 세트에 저장되기에 너무 클 수 있고, 따라서, 저장을 위한 SRAM 뱅크 세트에 적합하도록 충분히 작은 서브-텐서들로 분할될 필요가 있다. 글로벌 제어 로직(140)은 각 서브-텐서가 연관된 SRAM 뱅크 세트 내에 저장되는 주소들뿐만 아니라 IFM 및 OFM 서브-텐서 인덱스들, 크기들, 각 서브-텐서를 저장하는 SRAM 뱅크 세트의 인덱스를 포함하여, IFM 및 OFM 텐서들이 분할되고 SRAM 뱅크 세트들에 저장되는 방법을 지정하는 구성 레지스터들을 포함한다.
계산이 진행되고 IFM(OFM) 트래버셜이 하나의 SRAM 뱅크 세트(109)에 저장된 서브-텐서로부터 다른 SRAM 뱅크 세트(109)에 저장된 다른 서브-텐서로 이동함에 따라, 글로벌 제어 FSM(140)은 IFM 및 OFM 전달 패브릭들의 온-더-플라이 재구성을 조정하여, IFM 소스(및 OFM 목적지) SRAM 뱅크 세트를 현재의 것에서 다음의 것으로 전환한다. 일부 실시 예들에서, 재구성은 IFM을 소비하는 타일들(및 출력들을 생성하는 타일들)에 투명한 방식으로 수행되고, 그리고 버스 스위치-오버(bus switch-over) 동안 계산을 정지(stall)시키거나 늦추지 않는다.
앞서 언급된 바와 같이, "매퍼(mapper)"로 지칭되는, 소프트웨어의 일부는 웨이트 커널 저장(스토리지) 및 부분 결과들뿐만 아니라 SRAM 뱅크 세트들 및 물리적 SRAM 뱅크들에 걸쳐 전체 IFM 및 OFM 스토리지를 분할하는 방법을 정적으로(컴파일 시에) 결정할 수 있다. 매핑 설명의 명확성을 위해, 복수의 SRAM 뱅크 세트들에서 물리적 IFM 및 OFM 스토리지의 세부 사항들은 무시하고, 그리고 도 3fc에서 도시된 바와 같이, SRAM 뱅크 세트들은 IFM 및 OFM에 대한 "가상" 또는 "논리적" 뷰(view)들(306)인 것으로 간주한다.
도 3ga 내지 도 3gd에 도시된, 제7 예시에서, 3x3x32x512 컨볼루션이 계산되고, 16개의 타일들을 사용한다. 이러한 예시에서, 에너지를 절약하기 위해 더 적은 IFM 패스들을 사용하여, 제6 예시에서와 동일한 컨볼루션이 계산된다. 도 3ga를 참조하면, 각각의 승산기 유닛 웨이트 레지스터 파일(127)은 18개의 웨이트들을 가질 수 있고, 3x3 컨볼루션에 대해, 이들 중 9개의 웨이트들이 제6 예시에서 사용되었다. 이와 같이, 3x3 웨이트들의 2개의 세트들(하나와 대조적)이 저장될 수 있고, 그리고 시간이 지남에 따라 “사이클(cycle)”될 수 있다. 특히, 3x3x32x512 컨볼루션은 시간적으로 인터리브(interleave)된 2개의 3x3x16x512 컨볼루션들로 분할될 수 있다. 도 3gb를 참조하면, 제3 예시의 방식과 유사한 방식으로, 3x3x16x512 컨볼루션이 16개의 물리적 타일들로 매핑될 수 있다. 각각의 IFM 패스에 대해, 하나의 IFM 슬라이스는 리드(SRAM 뱅크 세트로부터)될 수 있고, 그리고 (8개의 SRAM 뱅크 세트들로) 128개의 OFM 채널들을 출력하는 16개의 물리적 타일들로 브로드캐스트 할 수 있다. 이러한 예시에서, OFM 계산을 완료하기 위해 4개의 IFM 패스들(그리고 4개의 OFM 단계들)이 필요하다.
도 3gc를 참조하면, 일부 실시 예들에서, 제1 단계에서, OFM 위치(x, y)에서 OFM[0..127]에 대한 컨벌루션을 계산하기 위해 IFM[0..15]가 피드될 수 있지만, OFM 결과는 SRAM에 이를 라이트하는 대신에, 누산기에 보관될 수 있다. 도 3gd를 참조하면, 제2 단계에서, 이 후 각 승산기 유닛 웨이트 레지스터 파일(127)은 OFM[0..127] 계산을 완료하기 위해 3x3 웨이트들의 제2 세트로 전환하고 그리고 IFM[16..31]에 피드(제공)할 수 있다. 이러한 프로세스는 "IFM 웨이트 사이클링"으로 지칭될 수 있다. 이 후, 제3 단계에서, OFM[0..127]은 SRAM에 저장될 수 있고, 그리고 누산기는 클리어될 수 있다. 이러한 3개의 단계들은 계산이 완료될 때까지 반복될 수 있다.
도 3ga를 참조하면, 일부 실시 예들에서, 논리적 타일들은 복수의 웨이트들의 세트들을 저장하는 물리적 타일들로 정의될 수 있다. 본 예시(제7 예시)에서, 웨이트들의 3x3 세트들 2개를 저장함으로써, 16개의 이러한 논리적 타일들(시간에 따라 인터리브된)의 세트들 2개(즉, 32개의 논리적 타일들)이 형성됨을 볼 수 있다. 제7 예시에서, 32개의 논리적 타일들은 각각의 IFM 패스에서 더 많은(예를 들어, 더 넓은) OFM을 물리적으로 계산할 수 있으므로, IFM 패스들의 수(그리고 SRAM IFM 리드 에너지)는 제6 예시에 비해 2배만큼 감소된다.
도 3ha 내지 도 3hc에 도시된, 제8 예시에서, 3x3x512x256 컨볼루션이 먼저 계산되고, 16개의 물리적 타일들을 사용한다. 이 예시에서, IFM 및 OFM 채널들의 수(각각 512 및 256)는 모두 상당히 크다는 것에 유의해야 한다. 이하에서 보다 상세히 설명되는 바와 같이, 컨볼루션 커널이 너무 커서 계산될 수 없으면 부분 결과들, 또는 "부분들"이 사용될 수 있다. 그러나, 이 예시는 부분들을의 사용 없이 큰 웨이트 커널을 사용하여 컨볼루션을 계속 수행할 수 있는 방법을 보여준다. 3x3x512x256 컨볼루션은 도 3hb에서 도시된 바와 같이 계산될 수 있다. 3x3 8-비트 컨볼루션의 경우, 3x3 8-비트 웨이트들의 세트 2개는 각 승산기 유닛에 저장될 수 있으므로, (웨이트들의 2개 세트들) * (16개의 물리적 타일들) = 32개의 논리적 타일들이 있다. 32개의 논리적 타일들은 32개의 IFM 슬라이스들을 감소시킬 수 있으므로, 부분들을 사용하지 않고 처리될 수 있는 IFM 채널들의 최대 수는 (32개의 슬라이스들) * (슬라이스 당 16개의 IFM 채널들) = 512개의 IFM 채널들이다. 따라서, 부분들을 사용하지 않고, 3x3x512xN 컨볼루션을 계산하는 것이 가능하고, 여기서 N은 임의의 양의 정수이다.
도 3hb 및 3hc를 참조하면, 클럭 당 256개의 IFM 채널들이 감소 패브릭과 결합된 타일 가산기 트리들을 사용하여 감소될 수 있다. 모든 512개의 IFM 채널들을 감소시키기 위해(그리고 8개의 OFM 채널들을 생성하기 위해), 2개의 웨이트 사이클들을 수행한다. 웨이트 사이클(1)에서, 도 3hb에 도시된 바와 같이, IFM[0...15]는 타일(1)에 피드될 수 있고, IFM[16..31]은 타일(2)에 피드될 수 있고, 등등 계속해서, IFM[240..255]은 타일(16)에 피드될 수 있다. 하드웨어 트리들은 감소 패브릭에 의해 제공되는 하드웨어 가산기 스테이지들을 사용하여 모든 16개의 타일들(각 열당)에 걸쳐 결합될 수 있다. 가산기 트리 루트(root)는 타일(16)에서 종료될 수 있으므로(나중에 보다 상세하게 논의되는 바와 같이, 감소 패브릭, OFM 전달 패브릭, 및 가산기 트리의 문맥에서), 타일(16)만 결과를 생성하는 반면에, 타일들(1 … 15)의 누산기들은 이 구성에서 사용되지 않는다. 도 3hc에 도시된, 웨이트 사이클(2)에서, IFM[256 ... . 271]은 타일(1)에 피드될 수 있고, IFM[272 ... 287]은 타일(2)에 피드될 수 있고, 등등 계속해서, IFM[496 ... 511]은 타일(16)에 피드될 수 있다. 이 후, 타일(16)은 완료된 OFM[0..7](x, y) 결과를 SRAM 뱅크(16)에 라이트할 수 있다. 마지막으로, OFM[0 ... 7], 다음에 OFM[8 ... 15], 등등 계속해서, OFM[248 ... 255]를 계산하기 위해, 32개의 IFM 패스들(32개의 OFM 단계들)이 수행될 수 있다. 이러한 특정 예시에서 IFM 패스 및 OFM 단계 개수들은 동일하지만, 이후의 예시들에서 IFM 패스 및 OFM 단계 사이의 차이는 더 명확해질 것임에 유의해야 한다.
도 3hd는 32개의 IFM 패스들(32개의 OFM 단계들) 대신에 64개의 IFM 패스들(64개의 OFM 단계들)을 수행함으로써 도 3ha 내지 도 3hc에 도시된 3x3x512x256 컨볼루션이 3x3x512x512 컨볼루션으로 간단히 변경되는 방법을 추가로 도시한다.
도 3ia 내지 도 3if에 도시된, 제9 예시에서, 3x3x512x256 컨볼루션은 16개의 타일들을 사용하고 그리고 부분 결과들을 사용하여 계산된다. 일부 경우들에서, SRAM 읽기들의 수를 감소시킴으로써(예를 들어, 제8 예시와 비교하여), 부분들을 사용하는 것은 에너지 절약을 가능하게 할 수 있다. 부분들을 사용하면, 매핑 알고리즘은 웨이트 텐서를 여러 부분들로 분할할 수 있고, 특히 뎁스 채널-와이즈(channel-wise)에서, 단일 컨볼루션 연산(웨이트 텐서를 로드하는 것, IFM를 트래버스하는 것, OFM을 라이트하는 것을 포함함)을 2개 이상으로 변환할 수 있다. 이러한 2개 이상의 결과 컨볼루션들의 출력들은 최종 결과를 생성하기 위해 나중에 결합된다.
우선, 부분들 없이 계산된 3x3x512x256 컨볼루션을 도시하는 도 3hb 내지 도 3hc를 상기한다. 도 3ia 내지 도 3ib 그리고 도 3ic 내지 도 3id는 웨이트 텐서(그리고 대응하는 IFM 및 OFM) 512 IFM 채널들이, 각각 3x3x256x256 크기의, 2개의 개별 컨벌루션들에 대응하는, 256 및 256으로 분할된 후, 연관된 하드웨어 자원 매핑들을 도시한다.
도 3ia 내지 도 3ib는 2개의 3x3x256x256 컨볼루션들 중 첫 번째를 도시한다. 웨이트 커널 평면 크기가 3x3 = 9이므로, 18개의 8-비트 웨이트들을 보유할 수 있는 각각의 MU 웨이트 레지스터 파일은 3x3 웨이트들의 2개 세트들을 저장하기에 충분한 용량을 가지므로, 32개의 논리적 타일들이 계산에 사용될 수 있다.
이 후, 8개의 IFM 슬라이스들이 로드될 수 있다. 이 후, 각각의 IFM 슬라이스는 2개의 물리적 타일들로 브로드캐스트될 수 있다. 16개의 OFM 단계들(16개의 IFM 패스들)이 수행될 수 있다. 도 3ia에 도시된 바와 같이, 제1 웨이트 사이클 동안, 3x3 IFM[0 ... 127]이 피드되고, 3x3 웨이트들의 제1 세트와 컨볼루션되고, 가산기 트리들을 사용하여 감소되고, 그리고 타일들(8 및 16)의 누산기 레지스터들에 누적될 수 있다. 도 3ib를 참조하면, 제2 웨이트 사이클 동안, 3x3 IFM[128 ... 255]이 피드되고, 3x3 웨이트들의 제2 세트와 컨볼루션되고, 가산기 트리들을 사용하여 감소되고, 그리고 타일들(8 및 16) 내 누산기 레지스터들에 더 누적될 수 있다. 이 시점에서, 대응하는 3x3x256x16 웨이트 커널과 3x3 IFM[0..255]의 컨볼루션이 OFM 채널들(0 ... 15)에 대해 완료되고 그리고 부분 결과로서 가상 SRAM 뱅크 세트들(8 및 9)에 라이트될 수 있다. 이것은 부분 결과이므로, 완료된 결과와 대조적으로, 누산기(130) 값들은 SRAM으로 가는 도중에 활성화 함수 모듈(197)을 바이패스한다. 선택적으로, SRAM 크기 요구 사항 및 전력 소비를 감소시키기 위해, 비트 범위 선택 모듈(187)은, 예를 들어, 8-비트 활성화들 및 웨이트들을 사용할 때 4 바이트까지 또는 16-비트 활성화들 및 웨이트들을 사용할 때 6 바이트까지 라운딩함으로써, 부분 결과 비트 폭을 감소시킬 수 있다.
전체 IFM[0...255]가 처리될 때까지, 즉, 모든 원하는 평면(x, y) 위치들에 대해서, 위의 단계들은 반복되고, IFM[0 ... 255]를 통한 하나의 패스(경로)에 대응해서, OFM[0 ... 15]에 대해 계산된 부분 결과들의 대응하는 세트를 발생시킨다. 나머지 OFM 채널들[16 ... 255]에 대한 부분 결과들은 IFM[0 ... 255]를 통한 15개 이상의 패스들(15개 이상의 OFM 단계들에 대응함)을 수행함으로써 계산된다.
이 매핑 예시에서, 2개의 부분 패스들의 사용은, 물리적으로 그리고 동시에 생성되는 OFM이, 하나의 패스에서, 2배로(하나의 OFM 슬라이스로부터 2개로), 넓어지게(또는 확장되게) 한다. 또한, 각 부분들 패스 동안에 처리된 IFM 텐서의 크기는, HxWx512에서 HxWx256로, 2배로 감소된다.
도 3ic 및 3id에 각각 도시된 바와 같이, IFM[256 ... 383]이 제1 웨이트 사이클 동안 피드될 수 있고 그리고 IFM[384 ... 511]이 제2 웨이트 사이클 동안 피드될 수 있는 것을 제외하고는, 제2 부분들 IFM 패스는 첫 번째와 동일할 수 있다.
오리지널 3x3x512x256 컨볼루션을 완료하는 것은 부분 결과들(요소-별로, 2개의 3x3x256x256 컨볼루션들로부터의)을 더하는 것 그리고 ARU와 유사하게 스케일링, 바이어스 및 활성화 함수를 적용하는 것을 요구한다. 이러한 마지막 단계를 달성하기 위한 여러 방법들이 있는데, 다음을 포함한다. (i) ARU가 제2 부분 컨볼루션 동안 최종 결과들을 생성하도록, 제1 부분 컨볼루션에 의해 생성된 부분 결과들을 리드하고, 요소별로, 부분 결과들의 제2 세트와 합산되도록, IFM 전달 패브릭을 통해 타일 ARU들로 부분들을 전송하는 것; 그리고 (ii) 양 부분 컨볼루션들 동안 ARU들이 부분 결과들을 출력하게 하는 한편, 부분들을 추가하고 그리고 활성화 함수를 적용하기 위해 SRAM 뱅크 세트들에 추가적인 로직이 리드-수정-라이트를 수행하도록 하는 것. 더 구체적으로, 부분들을 완료하기 위한 추가 로직은 제2 부분 컨볼루션 동안 부분 결과들을 수신하고, 제1 부분 컨볼루션의 결과들을 SRAM으로부터 리드하고, 이러한 결과들을 합산하고 활성화 함수를 온-더-플라이로 적용하고 최종 결과를 SRAM에 다시 라이트하고; (iii) 활성화 함수를 적용함 없이, 요소 별로, 2개 이상의 부분 동작들로부터 부분 결과들을 계속 추가하기 위해, 부분들에 대한 리드-추가-라이트(read-add-write) 동작이 가능한 SRAM 뱅크 세트들 내에서 추가 로직을 포함하고, 이어서 마지막 부분 동작 라운드 동안 완료되기 위해 부분 결과들을 타일 ARU들로 읽고 전송한다.
부분들이 사용되지 않는 경우들과 달리, 부분들이 사용되면, 컨볼루션 동작을 배열할 때 OFM 높이 및 폭이 고려할 필요가 있을 수 있다. 도 3ie를 참조하면, 4개의 바이트들이 각각의 부분 결과를 저장하기 위해 사용될 수 있다(IFM 및 OFM 모두 8-비트인 것으로 가정). 이 경우에서 부분 결과들에 대한 SRAM 스토리지 크기는 "(OFM 높이) * (OFM 폭) * (OFM 뎁스) * (4 바이트)"와 같다. 부분 결과들을 위한 SRAM(온-칩(on-chip)) 스토리지 용량이 부족하면, 도시된 바와 같이, OFM은 서브-윈도우들로 분할될 수 있고 한 번에 하나씩 처리될 수 있다. 그러나, 서브-윈도우가 처리될 때마다, 커널 웨이트들의 전체 세트를 로드(또는 리-로드(re-load))할 필요가 있을 수 있고, 이는 에너지 소비를 증가시킬 수 있다. 예를 들어, OFM 평면 크기가 10x10으로 설정되고, IFM 평면 크기가 OFM 평면 크기와 동일하게 설정된다고 가정한다. 이 경우에서 커널 웨이트 크기는, "3*3*512*256 = 1.2 MB"로, 상대적으로 크다. 전체 부분 결과(전체 부분 결과를 평면 서브-윈도우들로 세분화하지 않고, 전체 IFM 평면 크기에 대해)를 저장하기 위한 SRAM 크기는 "10*10*256*4 = 102,400 바이트"이다. 단순화를 위해, 서브-윈도우들의 사용이 필요하지 않도록, SRAM이 충분한 용량을 가진다고 더 가정한다.
도 3if는 이 예시에서 컨벌루션을 계산하는 프로세스를 요약하는데, IFM[0..255] 및 모든 OFM 부분들[0..255]에 대한 부분들의 제1 세트는 계산 및 저장되고, IFM[0..255] 및 모든 OFM[0..255]에 대한 부분들의 제2 세트는 계산되고(그러나 이것이 마지막 부분 라운드이므로 SRAM에 라이트되지 않음), 그리고 제2 부분 컨볼루션이 계산됨에 따라 요소별로 부분들이 더해지고 활성화 함수가 즉시(on-the-fly) 적용되고 SRAM에 라이트된다.
앞서 언급된 바와 같이, 활성화 함수의 적용 및 요소별 부분들의 추가를 위해 MR 타일들을 사용하는 것은 선택적이다. 대신에, 요소별 및 평면(채널들을 통한 감소 없음) 동작들 전용의 APAP(Auxiliary Planar and Activation Processing) 유닛들이 사용될 수 있다. 이러한 유닛들은 SRAM 뱅크 세트들 내에 위치 할 수 있고, SRAM 뱅크 세트들에 도달하는 부분들뿐만 아니라 SRAM에 지역적으로 저장된 이러한 부분들로의 액세스를 할 수 있다. 이 후, APAP 유닛들은 완료된 결과들을 SRAM에 라이트한다.
이러한 제9 예시에 따라 수행된 계산은 2개의 패스들을 수행함으로써 상당한 양의 에너지를 절약할 수 있다. IFM 패스들의 수가 32에서 16으로 감소되었으므로, IFM 데이터 리드의 양은 “높이) * (IFM 너비) * (IFM 채널들) * (IFM 패스들) = 10*10*512*(32-16)) = 819,200 바이트들”(캐싱 무시)이고, SRAM에 라이트된 부분 데이터의 양은 "(OFM 높이) * (OFM 폭) * (OFM 채널들) * (부분 컨볼루션들의 수 - 1) * (4 바이트) = 10*10*256*(2-1)*4 = 102,400 바이트들"이다. 다시 말해서, 제2 부분 패스가 결과를 평면/활성화 유닛들에 직접 피드하는 대신에 결과를 SRAM에 저장했다면, 2배의 양이 발생할 것이다. 또한, SRAM으로부터 리드된 부분 데이터의 양은 "(OFM 높이) * (OFM 폭) * (부분 컨볼루션들의 수 - 1) * (4 바이트들) = 10*10*256*(2-1)*4 = 102,400 바이트들"이다. 다시 말해서, 제2 부분 패스가 결과를 평면/활성화 유닛들에 직접 피드하는 대신에 결과를 SRAM에 저장했다면, 2배의 양이 발생할 것이다. 이와 같이, 우리의 예시에서 부분들을 사용한 대(vs.) 부분들 없이 3x3x512x256 (8-비트) 컨볼루션을 수행하는 것은, SRAM으로부터 리드된 적은 819,000 IFM 바이트들이 발생하는 반면에, SRAM에 부분들을 라이트하기 위해 추가적인 102,400 바이트가 발생하고, SRAM으로부터 부분들을 리드하기 위해 또 다른 102,400 바이트가 발생한다.
하나의 SRAM 라이트의 에너지가 하나의 SRAM 리드의 에너지의 약 2배로 가정하면, 총 절약된 SRAM 에너지는 "819,000 - 2 * 102,400 - 102,400 = 511,800 * (SRAM 리드 당 에너지)”와 동일하다.
도 3ja 내지 도 3jd에 도시된, 제10 예시에서, 8x8x16x64 컨볼루션이 계산되고, 4개의 타일들을 사용한다. 8x8 컨볼루션은 "8*8 = 64" 웨이트들을 갖고, 이것은 단일 승산기 유닛에 적합하지 않을 수 있고, 이것은 예를 들어, 18개의 웨이트들만 저장할 수 있다. 그러므로, 도 3ja에 도시된 바와 같이, 64개의 웨이트들은 4개의 타일들로 분할될 수 있으므로, 타일(1)은 "W[0..1,0..7,*,*]"를 저장하고, 타일(2)은 "W[2..3,0..7,*,*]"를 저장하고, 타일(3)은 "W[4..5,0..7,*,*]"를 저장하고, 그리고 타일(4)은 "W[6..7,0..7,*,*]"를 저장하고, 여기서 웨이트 커널 표기법은 "W[행, 열, IFM 채널, OFM 채널]"이고 "*"는 전체 적용 가능한 범위를 나타낸다. 이 후, OFM[0..7]을 계산하기 위해, 시스템이 타일들을 추가(또는 감소시킬) 수 있고, 따라서, 효과적으로, 각 타일은 2x8x16x64 컨볼루션을 수행하고, 그리고 4개의 타일들을 사용하여 동시에 수행되는, 4개의 2x8x16x64 컨볼루션들은 하나의 8x8x16x64 컨볼루션으로 집계(aggregate)된다. 각 2x8x16x64 컨볼루션은 IFM 웨이트 사이클링(IFM weight cycling)을 사용하여 함께 결합된, 2개의 1x8x16x64 컨볼루션들로 더 구성된다.
도 3jb는 IFM 웨이트 사이클링의 제1 단계를 도시하고, 여기서 컨볼루션 윈도우 내의 짝수(아직 홀수가 아닌) 행들이 컨볼루션 된다. 여기서 타일(1)은 IFM 값들 "a0, b0, c0, d0, e0, f0, g0, h0"과 컨볼루션 윈도우의 행(0) "W[0,*,*,*]"을 컨볼루션 하는 반면에, 타일(2)는 IFM 값들 "a2, b2, c2, d2, e2, f2, g2, h2"과 컨볼루션 윈도우의 행(2) "W[2,*,*,*]"을 컨볼루션 하고, 타일(3)은 IFM 값들 "a4, b4, c4, d4, e4, f4, g4, h4"과 컨볼루션 윈도우의 행(4) "W[4,*,*,*]"을 컨볼루션 하고, 그리고 타일(4)는 IFM 값들 "a6, b6, c6, d6, e6, f6, g6, h6"과 컨볼루션 윈도우의 행(6) "W[6,*,*,*]"을 컨볼루션한다. 승산기 유닛 곱들은 리덕션(감소) 패브릭에 의해 제공된 추가 가산기 트리 스테이지들을 사용하고 또한 타일들 내의 타일 가산기 트리들을 사용하여 감소되고, 또한 타일(4)의 누산기 레지스터(130) 내에 누적(IFM 값들 "a*, b*, ... h*"가 IFM 전달 패브릭을 통해 4개의 타일들로 스트림됨에 따라)된다.
도 3jc는 IFM 웨이트 사이클링의 제2 단계를 도시하고, 여기서 컨볼루션 윈도우 내의 홀수 행들이 컨볼루션 된다. 여기서 타일(1)은 IFM 값들 "a1, b1, c1, d1, e1, f1, g1, h1"과 컨볼루션 윈도우의 행(1) "W[1,*,*,*]"을 컨볼루션 하는 반면에, 타일(2)는 IFM 값들 "a3, b3, c3, d3, e3, f3, g3, h3"과 컨볼루션 윈도우의 행(3) "W[3,*,*,*]"을 컨볼루션 하고, 타일(3)은 IFM 값들 "a5, b5, c5, d5, e5, f5, g5, h5"와 컨볼루션 윈도우의 행(5) "W[5,*,*,*]"을 컨볼루션 하고, 그리고 타일(4)는 IFM 값들 "a7, b7, c7, d7, e7, f7, g7, h7"과 컨볼루션 윈도우의 행(7) "W[7,*,*,*]"을 컨볼루션한다. 제1 IFM 웨이트 사이클링 단계와 유사하게, 승산기 유닛 곱들은 리덕션 패브릭에 의해 제공된 추가 가산기 트리 스테이지들을 사용하고 또한 타일들 내의 타일 가산기 트리들을 사용하여 감소되고, 타일(4)의 누산기 레지스터(130) 내 누적(IFM 값들 "a*, b*, ... h*"는 IFM 전달 패브릭(104)을 통해 4개의 타일들로 스트림됨에 따라)된다. 그러나, 제1 IFM 웨이트 사이클링 단계 동안과 다르게, 누산기 레지스터들(130)은 제2 IFM 웨이트 사이클 단계의 시작에서 클리어되지 않으므로, 일단 양 IFM 웨이트 사이클링 단계들이 완료되면, 누산기 레지스터들(130)은 짝수 및 홀수 행들 모두에 대한 내적을 포함한다.
이 후, 결과 OFM[0 ... 7]은 SRAM(109)에 라이트될 수 있으므로, 하나의 OFM 위치에 대한 8x8x16x8 윈도우의 컨볼루션하는 것(convolving)이 완료된다. 도 3jd에 도시된 바와 같이, 계산을 계속하기 위해, 이 후 컨볼루션 윈도우는 다음 8x8 컨볼루션을 계산하도록 변환될 수 있고, 그리고 OFM 전체가 완료될 때까지 프로세스가 반복될 수 있다.
도 3ka 내지 도 3kb에 도시된, 제11 예시에서, 8x8x64x64 컨볼루션이 계산되고, 16개의 타일들을 사용한다. 8x8 컨벌루션이 16개의 타일들에 적용될 수 있고, 더 많은 IFM 및 OFM 채널들이 사용될 수 있다. 8x8 컨벌루션을 4개의 물리적 타일들에 분할하면, 도 3ka에 도시된 바와 같이, "논리적" 타일들의 수가 4배 감소(예를 들어, (16개의 물리적 타일들) / (동작 당 4개의 물리적 타일들) = 4개의 논리적 타일들)한다. 본 명세서에서 사용된 바와 같이, 물리적 타일들의 "물리적 그룹화(physical grouping)”은 단일 물리적 타일에 대해 너무 큰 동작을 수행하기 위해 타일 가산기 트리들을 단일 가산기 트리(열(column) 당)에 연결함으로써 정의된다.
도 3ka를 참조하면, 8x8 컨벌루션이 너무 커서 단일 타일(102)에 맞지 않을 수 있으므로, 8x8 컨벌루션은 4개의 타일들로 분할될 수 있다. 4개의 타일들로부터 가산기 트리들을 단일 가산기 트리에 연결함으로써, 4개의 타일들은 하나의 논리적 타일로 물리적으로 그룹화될 수 있다. 도 3kb를 참조하면, "8x8x64x64"를 16개의 물리적 타일들에 매핑하는 것은 "8x8x64x64"를 4개의 논리적 타일들에 매핑하는 것으로 논리적으로 변환되고, 여기서 각 논리 타일은 "8x8 = 64" 컨볼루션 웨이트들에 충분히 적합한, "18*4 = 72" 웨이트들을 포함한다.
도 3kb는 "8x8x64x64" 컨볼루션 동작을 4개의 논리적(그리고 따라서 16개의 물리적) 타일들에 매핑하는 것을 도시한다. 변환된 동작은 다음과 같이 수행될 수 있다. 첫 번째, 4개의 IFM 슬라이스들이 리드되고; 부분들을 피하기 위해 모든 IFM 채널들이 한번에 리드될 수 있다. 두 번째, 각 IFM 슬라이스는 하나의 논리적 타일로 "브로드캐스트"될 수 있다. 세 번째, 8개의 OFM들(하나의 OFM 슬라이스)은 하나의 IFM 패스에서 계산될 수 있다. 이것은 반복될 수 있으므로, 모든 OFM 채널들을 계산하기 위해 "(64개의 OFM들) / (패스 당 8개의 OFM들) = 8개의 IFM 패스들(8개의 OFM 단계들)”이 수행될 수 있다.
일부 상황들에서, 예를 들어, "8x8x64x1024" 컨볼루션을 계산하기 위해, 더 많은 OFM 채널들이 필요할 수 있다. IFM을 다시-리드(re-read)하기 위해 더 많은 IFM 패스들을 수행하는 것에 의해 더 많은 OFM 단계들을 추가함으로써, 부분들을 사용하지 않고, 이것은 가능하다. 일부 상황들에서, 예를 들어, "8x8x128x64" 컨볼루션을 계산하기 위해 더 많은 IFM 채널들이 필요할 수 있다. 이러한 경우에서, (i) 물리적 타일들의 수가 증가하지 않거나 또는 (ii) 승산기 당 웨이트들의 수가 증가하지 않으면, 부분들을 사용할 필요가 있을 수 있다. 그러나, 일부 애플리케이션들에서는, 8x8과 같은 큰 크기의 컨볼루션이 IFM 채널들이 적은 이미지들 또는 RGB 이미지들에만 적용될 수 있다. N개의 웨이트들을 보유하는 MU 웨이트 레지스터 파일은 최대 "H*W < N"까지 컨볼루션 커널을 수용할 수 있고, 여기서 H 및 W는 웨이트 커널의 평면 높이 및 폭을 나타낸다. 예를 들어, 18개의 8-비트 웨이트 용량을 갖는 MU는 "4x4, 5x3, 3x5, 6x2, 2x6, 7x2, 2x7, 8x2, 2x8, 9x2, 2x9, 18x1 및 1x18"을 포함하는 컨볼루션 커널들을 보유할 수 있다. 실제로는, “”컨볼루션을 계산할 필요성은 희박할 수 있으므로, 뉴럴 프로세서 대신에 CPU에 의해 수행될 수 있고, 따라서 연관된 뉴럴 프로세서 추가 하드웨어 로직을 선택적이게 한다. 명확성을 위해, 이 예시에서 설명된 바와 같이, IFM, OFM, 및 감소 패브릭의 설명들은 "H*W > N"의 연결들이 요구되는 경우들을 생략할 것이다.
도 3la 내지 도 3ld에 도시된, 제12 예시에서, 1x1x1024x64 컨볼루션이 계산되고, 16개의 타일들을 사용한다. 각 MU는 18개의 웨이트들을 포함할 수 있다. 1x1 컨볼루션은 겨우 "1x1 = 1" 웨이트를 요구하므로, "(승산기 당 18개의 웨이트들) / (컨볼루션 윈도우 당 1개의 웨이트) = 1x1 컨볼루션 웨이트들의 18개의 세트들"은 각 타일에 적합할 수 있다. 논리적 타일들의 수는 "(16개의 물리적 타일들) * (승산기 당 18개의 컨볼루션 웨이트 세트들) = 288개의 논리적 타일들"로 계산될 수 있다. 16개의 물리적 타일들을 사용하는 1x1x1024x16 컨볼루션의 계산은 288개의 논리적 타일들을 사용하는 1x1x1024x16 컨볼루션의 계산으로 변환될 수 있다. 부분들을 피하기 위해, 모든(1024) IFM 채널들은 하나의 IFM 패스에서 리드될 수 있다. 288개의 논리적 타일들을 사용하여, "(IFM 슬라이스 당 16개의 IFM 채널들) * (288개의 논리적 타일들) = 4,608개의 채널들"의 크기까지의 IFM들을 수용하는 것이 가능할 수 있다. 1x1x1024x64 컨볼루션은 부분들을 사용하지 않고 이용 가능한 4,608개 중에서 1024개의 IFM 채널들만을 요구한다. 그러므로, IFM 패스 당 계산될 수 있는 OFM 슬라이스들의 수는 "floor((4,608개의 최대 IFM 채널들) / (1024개의 IFM 채널들)) = 4개의 OFM 슬라이스들"이다.
계산은 다음과 같이 수행될 수 있다. 첫 번째, 1x1 웨이트들의 16개의 세트들은 각 MU에 저장될 수 있다. 각 OFM 단계(IFM 패스) 동안, 64개의 슬라이스들(모두 1024개의 IFM 채널들)이 리드될 수 있다. 물리적으로, 이것은 “(64개의 IFM 슬라이스들) / (MU 당 1x1 웨이트들의 16개의 세트들) = 4개의 IFM 슬라이스들”을 한 번에 리드하는 것에 대응한다. 하나의 OFM 단계(그리고 하나의 IFM 패스)에서 4개의 OFM 슬라이스들을 계산하기 위해, 4개의 IFM 슬라이스들 각각은 "(16개의 물리적 타일들) / (4개의 IFM 슬라이스들) = 4개의 타일들"로 브로드캐스트될 수 있다. OFM들은 "(8개의 OFM 슬라이스들) / (4개의 타일들을 통한 브로드캐스트) = 2개의 OFM 단계들(그리고 2개의 IFM 패스들)"을 사용하여 계산될 수 있다. IFM 웨이트들은 16번 순환(cycle)될 수 있다.
구체적으로, 도 3la를 참조하면, 컨볼루션의 계산은 다음 단계들을 따라 진행될 수 있다. 제1 단계에서, 누산기들은 클리어된다. 제2 단계에서, IFM[0..15], IFM[16..31], IFM[32..47] 및 IFM[48..63]은 페치되어 각각 타일들(1, 5, 9 및 13), 타일들(2, 6, 10 및 14), 타일들(3, 7, 11 및 15), 그리고 타일(4, 8, 12 및 16)으로 브로드캐스트된다. 제3 단계에서, 타일들(4, 8, 12, 및 16)의 누산기 레지스터들 내에 중간(미완료된) 결과들로서, 시스템은 타일들(1..4)에 의해 계산된 내적을 OFM[0..7]로, 타일들(5..8)에 의해 계산된 내적을 OFM[8..15]로, 타일들(9..12)에 의해 계산된 내적을 OFM[16..23]로, 그리고 타일들(13..16)에 의해 계산된 내적을 OFM[24..31]로 각각 누적한다.
도 3lb를 참조하면, 제4 단계에서, 누산기들은 클리어되지 않고, 그리고 MU들은 IFM 웨이트 사이클링에서의 단계에 대응하는 1x1 웨이트들의 다음 세트를 사용하도록 전환된다. 제5 단계에서, IFM[64..79], IFM[80..95], IFM[96..111] 및 IFM[112..127]은 페치되어 타일들(1, 5, 9 및 13), 타일들(2, 6, 10 및 14), 타일들(3, 7, 11 및 15), 그리고 타일들(4, 8, 12 및 16)으로 각각 브로드캐스트된다. 제12 단계에서, 타일들(4, 8, 12, 및 16)의 누산기 레지스터들 내에 중간(미완료된) 결과들로서, 시스템은 타일들(1..4)에 의해 계산된 내적을 OFM[0..7]로, 타일들(5..8)에 의해 계산된 내적을 OFM[8..15]로, 타일들(9..12)에 의해 계산된 내적을 OFM[16..23]로, 그리고 타일들(13..16)에 의해 계산된 내적을 OFM[24..31]로 각각 누적한다.
도 3lc을 참조하면, 계산이 진행될 수 있고, IFM 웨이트들을 계속 순환하고(총 16개의 IFM 웨이트 사이클링 단계들에 대해), IFM들을 페치 및 브로드캐스트 하고, 마지막 IFM 슬라이스들(채널들 960 내지 1023)에 도달할 때까지 내적을 계산 및 누적할 수 있다. 이 단계에서, 누산기들이 클리어되지 않고, MU들은 IFM 웨이트 사이클링 내 마지막 단계에 대응하는 1x1 웨이트들의 다음(마지막 제16) 세트로 전환된다. 다음 단계에서, IFM[960..975], IFM[976..991], IFM[992..1007], 및 IFM[1008..1023]은 타일들(1, 5, 9 및 13), 타일들(2, 6, 10 및 14), 타일들(3, 7, 11 및 15), 그리고 타일(4, 8, 12 및 16)로 각각 페치되고 브로드캐스트 된다. 다음 단계에서, 시스템은 완료된 내적 결과들을 각각 획득하기 위해 타일들(1..4)에 의해 계산된 내적을 OFM[0..7]로, 타일들(5..8)에 의해 계산된 내적을 OFM[8..15]로, 타일들(9..12)에 의해 계산된 내적을 OFM[16..23]로, 그리고 타일들(13..16)에 의해 계산된 내적을 OFM[24..31]로, 타일들(4, 8, 12, 및 16)의 누산기 레지스터들 내에 각각 누적한다. 다음 단계에서, 활성화가 타일들(4, 8, 12, 및 16)의 누산기 레지스터들에 누적된 내적 결과들에 적용되고, 4개의 결과 OFM 슬라이스들은 SRAM에 라이트된다. 이것으로 OFM[0 ~ 31]의 계산이 완료된다.
도 3ld를 참조하면, 이 후 시스템은 다음 OFM 단계를 진행하고(다른 IFM 패스를 수행함으로써), 계산을 반복하고, 이번에는 OFM[32 ~ 63]에 대한 것이다. 시스템은 다음 OFM 단계를 위해 웨이트들의 슬라이스를 로드한다: (W[0,0,0..1023,32..63]). 웨이트 로딩(Weight loading)은, 도 1k 및 도 1n에 도시된 바와 같이, 수직 웨이트 로딩 버스들(vertical weight loading buses)(101)을 사용하여 계산과 동시에 발생할 수 있고, 이 경우 웨이트 로딩 프로세스에 의해 발생되는 추가적인 지연은 없다. 시스템은 누산기들을 클리어할 수 있고, 그리고 MU들을 1x1 웨이트들의 제1 세트로 전환할 수 있다. 이 후, 시스템은 OFM[32..63]을 계산하기 위해 도 3la 내지 도 3lc의 문맥에서 설명된 바와 같이 동작들을 반복할 수 있다.
도 3ld에 도시된 바와 같이(도 3lc의 경우와 유사), 일단 시스템이 16개의 IFM 웨이트 사이클들 중 15개를 통과하고, 대응하는 IFM 슬라이스들을 패치하고, 중간 내적 결과들을 계산 및 누적하면, 시스템은 IFM 웨이트 사이클링의 마지막(제 16) 라운드에 도달한다. 이 라운드에서, 누산기들이 클리어되지 않고, MU들은 1x1 웨이트들의 다음(마지막 제16) 세트(마지막, 제16 IFM 웨이트 사이클링 단계)로 전환된다. 시스템은 IFM[960..975], IFM[976..991], IFM[992..1007], 및 IFM[1008..1023]을 페치하고 타일들(1, 5, 9 및 13), 타일들(2, 6, 10 및 14), 타일들(3, 7, 11 및 15), 그리고 타일(4, 8, 12 및 16)로 각각 브로드캐스트 한다. 다음으로, 시스템은 타일들(1..4)에 의해 계산된 내적을 OFM[32..39]로, 타일들(5..8)에 의해 계산된 내적을 OFM[40..47]로, 타일들(9..12)에 의해 계산된 내적을 OFM[48..55]로, 그리고 타일들(13..16)에 의해 계산된 내적을 OFM[56..63]로 누적한다. 이 프로세스의 끝에서, 시스템은 활성화 함수들(197)(타일들(4, 8, 12 및 16) 내에서)을 누산기들(130)(타일들(4, 8, 12 및 16) 내에서)에 저장된 완료된 내적에 적용하고, 그리고 컨볼루션 동작을 완료하기 위해 최종 OFM[32..63] 결과를 SRAM에 라이트한다.
이제 완전히-연결된(FC) 레이어 계산(컨볼루션과 대조적)을 고려한다. 먼저, 단일 타일 및 단일 IFM 샘플을 사용하는 16x8 FC 계산의 사소한 경우를 고려한다. 웨이트들이 IFM과 곱해진 후에 버려지는 것을 제외하고, FC 레이어 계산은 1x1 컨볼루션(이전 예시에서 설명됨)와 유사하다는 것에 유의해야 한다. 하나의 웨이트를 각 MU에 로드하고, 단일 IFM[0 ... 15] 슬라이스를 페치하고, 타일의 가산기 트리들을 사용하여 내적을 계산하고, 결과 내적에 활성화 함수를 적용하고, 그리고 완료된 OFM[0 ... 7] 결과를 SRAM에 라이트함으로써, 단일 16x8 FC 계산이 달성될 수 있다.
단일 타일 및 단일 IFM 샘플에 의해 16x16 FC를 계산하는 경우를 고려한다. 2개의 웨이트들을 각 MU에 로드하고, 단일 IFM[0 ... 15]를 페치하고, 곱셈을 위한 2개의 미리-로드된 웨이트들 중 첫 번째를 MU가 선택하게 하고, 상술된 바와 같이 OFM[0 ... 7]을 계산하고, 곱셈을 위한 2개의 미리-로드된 웨이트들 중 두 번째를 MU가 선택하게 하고 그리고 OFM[8..15]을 계산 함으로써, 단일 16x16 FC 계산이 달성될 수 있다. 동일한 IFM으로부터 복수의 OFM을 계산하기 위한, MU 웨이트들을 통한 사이클링의 이러한 프로세스를 "OFM 웨이트 사이클링"이라고 한다.
16x16 FC 계산은 하나의 IFM 패스를 사용하지만, 2개의 OFM 단계들(2개의 OFM 웨이트 사이클들에 대응)을 사용하여 수행되었음에 유의해야 한다. 그러므로, 다른 예시들에서 관찰된 바와 같이, OFM 단계들의 수는 OFM 웨이트 사이클링이 사용되지 않는한 일반적으로 IFM 패스들의 수와 동일하다.
단일 타일 및 단일 IFM 샘플을 사용하는 16x128 FC를 계산하는 다른 간단한 경우를 고려한다. 16개의 웨이트들을 각 MU에 로딩하고, 단일 IFM 슬라이스를 페치하고, OFM 웨이트 사이클링을 통해, 즉, OFM[0 ... 7], OFM[8..15], ... OFM[120..127]을 차례로 계산하기 위해 MU 웨이트들을 통해 사이클링함으로써 16개의 OFM 단계들을 수행함으로써, 이것이 달성될 수 있다.
18개의 IFM 샘플들의 배치(batch)에 대해 단일 타일을 사용하는 16x8 FC를 계산하는 간단한 경우를 고려한다(즉, IFM 텐서 모양은 1x16x18로 표현될 수 있다). 참고로, 뉴럴 프로세서가 추론(훈련이 아닌)을 수행하기 때문에, 매핑 예시들은 추론 애플리케이션들에 대해 일반적인, 1의 IFM 배치 크기를 묵시적으로 가정한다. 1보다 큰 IFM 배치 크기를 갖는 계산들도 또한 하드웨어에 매핑될 수 있다. 예를 들어, IFM 배치에서 각각의 샘플에 대해 이미-설명된 바와 같이, 계산들이 반복될 수 있다. 그러나, 18개의 IFM 샘플들의 배치(batch)에 대한 16x8 FC 단일-타일 계산은 MU 웨이트 레지스터 파일 용량을 활용하여, 각각의 IFM 샘플에 대해 하나의 웨이트씩, 각각의 MU에 18개의 웨이트들을 미리-로드할 수 있다. 그 후, 첫 번째(18의 배치(batch)로부터) IFM[0..15][0] 샘플을 페치하고, 각각의 MU에서 18개의 웨이트들 중 첫 번째와 페치된 IFM 샘플의 내적을 계산하고, 활성화 함수를 적용하고, 그리고 결과 OFM[0..7][0]을 SRAM에 라이트함으로써, 계산이 달성될 수 있다. 다음으로, 활성화 함수 적용 후 OFM[0..7][1]을 얻기 위해, IFM[0..15][1] 샘플은 페치되고 그리고 각 MU에서 18 개의 웨이트들 중 두 번째와 곱해진다. IFM[0..15][0..17] 샘플들(총 18개)의 전체 배치가 처리 될 때까지, 이 순서는 계속되어 OFM[0..7] [0..17] 샘플의 배치를 생성한다. IFM[0..15][0..17] 샘플들(총 18 개)의 전체 배치가 처리 될 때까지, 단계들의 이러한 시퀀스는 계속되고, OFM[0..7][0..17] 샘플들의 배치를 생성한다. IFM 샘플들의 배치(batch)를 처리하기 위해 MU 웨이트들을 통한 사이클링을 “IFM 배치 사이클링”으로 칭한다. MU 웨이트 레지스터 파일 용량이 충분하다면, IFM 웨이트 사이클링, OFM 사이클링 및 IFM 배치 사이클링은 계산들을 수행하기 위해 결합될 수 있다.
도 3ma 및 도 3mb에 도시된, 제13 예시에서, 288x8 완전히 연결된(fully connected) 계산은 단일 타일을 사용하여 수행된다. 도 3ma를 참조하면, 이전에 언급된 바와 같이, 완전히 연결된 계산은 1x1 컨볼루션과 유사할 수 있고, 여기서 컨볼루션 윈도우는 변환되지 않고 그리고 웨이트들은 재사용되지 않고 한 번의 사용 후에 폐기되어야 한다. 하나의 타일은 8개의 OFM 채널들을 병렬로(즉, 1개의 OFM 슬라이스) 계산할 수 있다. 288개의 IFM 채널들은 "288 / (MR 타일 당 16개의 행들) = 18개의 슬라이스들"에 대응할 수 있다. 시스템은 각 MU에서 18개의 웨이트들을 사용하여 FC 웨이트들의 모든 18개의 슬라이스들을 저장할 수 있다.
완전히 연결된 계산을 수행하기 위해, 시스템은 다음 단계들(이것은 어느 정도, 동시에, 수행될 수 있음, 즉, 시간적으로 겹칠 수 있음)을 실행할 수 있다. 제1 단계에서, 웨이트들은 SRAM으로부터 로드될 수 있다. 예를 들어, 도 1k 및 도 1n에 도시된 수직 웨이트 로딩 버스들(101)을 사용하여, 웨이트들은 계산과 동시에 로드될 수 있다. 이와 같이, 시스템은 FC 웨이트들이 SRAM에 위치하게 되는 것을 보장할 수 있다. 제2 단계에서, OFM[0..7]에 대한 누산기가 클리어될 수 있다. 제3 단계에서, IFM[0..15]의 하나의 샘플이 타일에 피드될 수 있고, 그리고 결과는 중간(미완료) 결과를 형성하기 위해 OFM[0..7] 누산기들(130)에 더해질 수 있다.
제4 단계에서, OFM[0..7] 누산기들은 클리어되지 않고 남을 수 있고, 그리고 시스템은 FC 웨이트들의 다음 세트(IFM 웨이트들을 순환함(사이클링))로 전환될 수 있다. 제5 단계에서, IFM[16..31]이 타일에 피드될 수 있고, 그리고 결과는 OFM[0..7] 누산기들에 더해질 수 있다. 도 3mb를 참조하면, 모든 IFM 채널들(그리고 관련 웨이트들)이 사이클될 때까지, 이러한 단계들은 마지막 슬라이스인 IFM[280..287]까지 반복될 수 있다. 마지막으로, 활성화 함수는 누적된 내적에 적용될 수 있고 그리고 최종 OFM[0..7] 결과는 SRAM에 라이트될 수 있다. 이것으로 완전히 연결된 계산이 완료된다.
도 3na에 도시된, 제14 예시에서, 288x64 완전히 연결된 계산이 수행된다. 이 예시에서, OFM 채널 카운트는 8(제13 예시에서)로부터 64로 증가된다. 시스템이 FC 288x64 계산을 288x8 크기의 8개의 더 작은 FC 계산들로 분할하고 분할된 계산들을 하나씩 수행하면(예를 들어, 8개의 OFM 단계들에서), 이것은 제13 예시와 동일하다. 이것은 8개의 IFM 패스들을 발생시킨다.
도 3oa 내지 도 3oc에 도시된, 제15 예시에서, 1024x32 완전히 연결된 계산은 단일 IFM 샘플(즉, 1의 배치 크기)에 대해 수행된다. 도 3oa를 참조하면, FC는 1x1 컨볼루션과 유사하므로, 각각 1x1 컨볼루션을 수행하는 “(MU 당 18개의 웨이트들) * (16개의 물리적 타일들) = 최대 288개의 논리적 타일들”이 존재할 수 있다. 이와 같이, 시스템은 부분들을 피하기 위해 단일 라운드에서 모든 1024개의 IFM 채널들(1024/16 = 32개의 IFM 슬라이스들)을 리드할 수 있다.
모든 32개의 IFM 슬라이스들을 리드하기 위해, 32개의 논리적 타일들이 사용될 수 있다. 이 계산은 32개의 OFM들(4개의 OFM 슬라이스들)의 계산을 포함할 수 있다. 하나의 패스에서 이것을 하기 위해(한번에 모든 OFM들을 계산), “(32개의 IFM 슬라이스들) * (4개의 OFM 슬라이스들) = 128개의 논리적 타일들"이 사용될 수 있다. 이와 같이, 이용 가능한 논리적 타일들의 수(288)는 충분하다. 각 MU에서 8개의 웨이트들을 저장함으로써(MU당 최대 18개의 웨이트들을 저장하는 대신), 논리적 타일들의 수는 필요한 128개로 감소될 수 있다.
계산은 다음과 같이 진행될 수 있다. 시스템은 MU 당 IFM FC 웨이트들의 8개의 세트들을 저장하고, 128개의 논리적 타일들을 사용(상술된 바와 같이)할 수 있다. 4개의 OFM 슬라이스들을 계산함으로써, 전체 계산은 단일 IFM 패스에서 완료될 수 있다. 4개의 IFM 슬라이스들 각각은 페치될 수 있고, 4개의 타일들로 브로드캐스트될 수 있다. 각 MU에 8개의 IFM 웨이트 세트들이 저장되므로, 웨이트들은 8번 사이클될 수 있다. 시퀀스는 다음의 단계들을 포함할 수 있다. 제1 단계에서, OFM 누산기들이 클리어될 수 있다. 제2 단계에서, IFM[0..63](4개의 IFM 슬라이스들)이 페치될 수 있고, 각 슬라이스는 4개의 타일들로 브로드캐스트될 수 있다. 제3 단계에서, 아직-완료되지-않은 OFM[0..31](4개의 OFM 슬라이스들)이 계산될 수 있고, OFM 누산기들에 더해질 수 있다.
도 3ob를 참조하면, 제4 단계에서, OFM 누산기들은 클리어되지 않고 남을 수 있고, 그리고 웨이트들의 다음 세트가 사용될 수 있다. 제5 단계에서, IFM[64..127](4개의 IFM 슬라이스들)이 페치될 수 있다. 제6 단계에서, 곱들-의-합계(sum-of-products)를 OFM 누산기들에 더함으로써, 시스템은 OFM[0..31](4개의 OFM 슬라이스들) 계산을 계속(아직-완료되지 않음)할 수 있다. 도 3oc를 참조하면, 모든 IFM이 처리될 때까지, 시스템은 웨이트들의 사이클링 및 OFM 결과들의 누적을 계속할 수 있다. 마지막 단계에서, 시스템은 IFM[960..1023]을 페치하고 OFM[0..31]에 누적한 후, 활성화 함수를 누적된 OFM[0..31]에 적용하고 그리고 결과를 SRAM에 라이트할 수 있다.
도 3pa 내지 도 3pc에 도시된, 제16 예시에서, 4096x1024 완전히 연결된 계산이 수행되고, 16개의 타일들 및 1의 배치 크기를 사용한다. 이 계산은 “(타일 당 4096 / 16 IFM 채널들) = 256개의 IFM 슬라이스들”, 그리고 “(타일 당 1024 / 8 OFM 채널들) = 128개의 OFM 슬라이스들”을 사용할 수 있다. 상술된 다른 예시들 중 일부에서와 같이, 부분들을 피하기 위해 전체 IFM을 리드하는 것이 유리할 수 있다. 최대 “당 18개의 웨이트들) * (16개의 물리적 타일들) = 288개의 논리적 타일들"이 계산의 실행에서 이용 가능할 수 있다. 전체 IFM을 리드하기 위해, 256개의 논리적 타일들이 사용될 수 있다. 이와 같이, 이용 가능한 논리적 타일들의 수(288)는 충분하다. 시스템은 각 MU에서 웨이트들의 16개의 세트들을 로드함으로써 256개의 논리적 타일들을 사용하도록 구성될 수 있다. 하나의 라운드에서(부분들 없이) 256개의 IFM 슬라이스들을 리드하기 위해, 모든 256개의 논리적 타일들이 사용될 수 있다. 따라서, “(256개의 논리적 타일들 / 256개의 IFM 슬라이스들) = 1개의 OFM 슬라이스”가 IFM 패스 당 생성될 것이고, 그리고 계산을 완료하기 위해, “(128개의 OFM 슬라이스들) / (IFM 패스 당 1개의 OFM 슬라이스) = 128개의 OFM 단계들(즉, 128개의 IFM 패스들)”이 수행될 것이다.
물리적 구성이 도 3pa에 도시된다. 감소 패브릭은 모든 16개의 타일들의 출력들을 단일 OFM 슬라이스로 감소시키도록 구성될 수 있다. 16개의 IFM 슬라이스들(16개의 가상 SRAM 뱅크들로부터의)이 페치될 것이고, 그리고 각각은 오직 하나의 타일로만 “브로드캐스트” 할 것이다.
계산은, 다음과 같이, 여러 단계들로 수행될 수 있다. 제1 단계에서, OFM[0..7] 누산기들이 클리어된다. 제2 단계에서, 16개의 IFM 슬라이스들(IFM[0..255])이 페치되고, 그리고 중간(미완료) 결과들로서 OFM[0..7] 누산기들로 감소된다.
제3 단계에서, OFM[0..7] 누산기들은 클리어되지-않고 남고, 그리고 시스템은 MU들 내에 설정된 다음 IFM 웨이트로 전환된다. 제4 단계에서, 다음 16개의 IFM 슬라이스들(IFM[256..511])이 페치되고, OFM[0..7] 누산기들로 감소 및 추가된다. 도 3pb에 도시된 바와 같이, 모든 IFM(IMF[4080..4095]까지 포함)이 처리될 때까지 이러한 단계들은 계속될 수 있다. 활성화 함수는 누적된 내적들(타일(16) 내에서의)에 적용될 수 있고, 그리고 최종 결과는 SRAM에 라이트될 수 있다. 이것은 OFM[0 ~ 7]의 계산을 완료한다. 도 3pc을 참조하면, 다음 OFM 단계를 수행하기 위해, 시스템은 웨이트들 "W[0..4095,8..15]"을 로드하는 OFM[8..15]에 대한 이전 계산을 반복할 수 있고, 그리고 전체 FC 계산을 완료하기 위해, OFM[1016..1023]까지, 모든 OFM들이 계산될 때까지 OFM들을 스테핑(stepping)하는 것을 계속할 수 있다.
IFM이 "(18개의 웨이트들) * (IFM 슬라이스 당 16개의 IFM 채널들) * (16개의 물리적 타일들) = 4,608개의 채널들"을 초과하는 FC 계산 경우들이 있을 수 있다. 이 경우, IFM 채널들을 부분들(기존 물리적 하드웨어에 매핑되기에 충분한 크기의)로 분할하고, 각 부분에 대한 FC를 개별적으로 계산하고, 전술된 바와 같이 요소별로 부분 결과들(SRAM에 저장된)을 계속 추가(합산)하고, 그리고 활성화 함수를 적용하여 계산을 완료함으로써, 부분들을 사용하도록 강요받을 수 있다.
웨이트들이 16 비트인 경우, MU 웨이트 레지스터 파일 용량은 18(8-비트 웨이트들) 대신에 9(16-비트 웨이트들)가 되고, 그리고 계산들은 앞서 설명된 바와 같이, 다중-사이클링(multi-cycling)을 사용하여 수행될 수 있다. 더 큰 웨이트 비트 길이, 예를 들어, 24-비트 또는 32-비트에 대해서도, 유사한 추론이 적용되고, 여기서, 예를 들어, MU 웨이트 레지스터 파일은 6개의 24-비트 웨이트들을 보유하거나 또는 4개의 32-비트 웨이트들을 보유하기에 충분한 용량을 갖는다.
선택적으로, 동작을 모든 사용 가능한 물리적 타일들에 매핑하는 것 외에도, 뉴럴 프로세서는 각각 더 적은 수의 타일들을 갖는 여러 뉴럴 프로세서들로 논리적으로 세분될 수 있다. 예를 들어, 16개의 물리적 타일들을 포함하는 뉴럴 프로세서는 논리적으로 2개의 뉴럴 프로세서들로 보일 수 있고, 각각은 원래 타일들의 수의 절반, 예를 들어, 각각 8개의 타일들을 포함하고, 또는 4개의 뉴럴 프로세서들로 보일 수 있고, 각각은 원래 타일들의 수의 4분의 1, 예를 들어, 각각 4개의 타일들을 포함할 수 있다 기타등등. 분할 후에 남은 물리적 타일들의 수를 고려할 때, 이러한 세분화로 인한 각 뉴럴 프로세서는 상술된 것과 실질적으로 같은 매핑 원리를 따른다. 뉴럴 프로세서를 복수의 더 작은 복수의 뉴럴 프로세서들로 세분화하는 것은, 비교적 적은 IFM 감소들 및 비교적 적은 생성된 OFM 채널들(보다 구체적으로 그것의 곱)을 요구하는 동작들에 바람직할 수 있다. 예를 들어, 1x1x32x32 컨벌루션 매핑은 4개의 타일들만을 요구한다. 만약 16 개의 타일들에 매핑되면, 1x1x32x32 컨볼루션으로 인해 16개의 타일들 중 12개가 사용되지 않으므로, 승산기 이용률이 상당히 감소된다. 이와 같은 경우들에서, 16개의 물리적 타일들을 포함하는 뉴럴 프로세서는 4개의 뉴럴 프로세서들로 세분화될 수 있고, 각각은 4개의 타일들을 포함하고, 1x1x32x32 컨볼루션을 4개의 결과 뉴럴 프로세서들 각각에 매핑하고, IFM 텐서(예를 들어, HxWx32 크기의)를 4개의 겹치지-않는(non-overlapping) 크기(H/2xW/2x32)의 IFM 텐서들로 세분화하고, 이러한 쿼터-크기(1/4 크기) IFM 텐서를 4개의 작은 뉴럴 프로세서들 중 하나에 할당하고, 그리고 따라서 병렬적으로 모든 4개의 IFM 서브-텐서들에 대한 컨볼루션을 계산한다. 이러한 작은 웨이트 텐서 크기들은 비교적 흔하지 않을 수 있고, 이와 같은 동작 모드는 IFM, OFM, 및 감소 패브릭들에 의한 적절한 지원을 필요로 함에 유의해야 한다.
이용 가능한 하드웨어로의 뉴럴 네트워크 레이어 동작들의 다양한 매핑들은 IFM 전달 패브릭(104), OFM 전달 패브릭(106) 및 감소 패브릭(111)의 지원을 필요로 한다. 도 4aa는 16개의 하드웨어 타일들(102) 및 16개의 SRAM 뱅크 세트들(109)을 포함하는 뉴럴 프로세서의 물리적 레이아웃 스케치를 도시한다. 일 실시 예에서, SRAM 뱅크 세트들(109) 메모리는 분산 방식으로 위치할 수 있고, 여기서 각 SRAM 뱅크 세트(109)는 타일-앤-SRAM-뱅크-세트 유닛(tile-and-SRAM-bank-set unit)(401)을 형성하는 정확히 하나의 타일(102)에 인접한다(로컬(국부적)이다). 이것은 모든 타일 및 그것의 로컬 SRAM(109) 사이에서의 IFM 및 OFM 데이터를 매우 병렬적인 방식으로(즉, 최대 16개의 IFM 및/또는 스트리밍들이 병렬적으로 실행되게 함) 스트리밍하는 것을 허용하며, 이는 만약 SRAM이 더 큰 스토리지 배열들로 집계(aggregate)되고(합쳐지고) 타일들로부터 더 멀리 떨어지는 경우에(즉, 메모리가 분산되지 않은 경우) 존재할 수 있는 컴퓨팅 타일들 및 SRAM사이의 대역폭 병목 현상을 피하기 위해서 이다.
도 4ab 및 4ac는 SRAM 뱅크 세트(109)의 컨텐츠들뿐만 아니라, 타일(102) 및 그것의 로컬 SRAM 뱅크 세트(109) 사이의 연결들을 도시한다. IFM, OFM 전달 패브릭들, AXI 포트를 통한 CPU 액세스(미도시), 부분 결과들의 리드 및 라이트, 그리고 웨이팅 로딩을 제공하기 위한 동시 리드-라이트 동작들을 위한 충분한 대역폭을 제공하기 위해, 각 SRAM 뱅크 세트(109)는 4개의 SRAM 뱅크들(B0, B1, B2, B3)을 포함할 수 있다. 도 4ab는 멀티플렉서(403)를 통한 뱅크들(B0, B1, B2, B3)과 IFM 전달 패브릭(104) 사이의 경로를 도시한다. 제로 스킵을 활성화할 수 있는 타일들에 충분한 IFM 데이터를 공급하기 위해, 이 경로는 계산 클럭 당 최대 2개의 IFM 슬라이스들을 전달할 수 있다. IFM 전달 패브릭(104)은 타일(102)에 연결되어 다른 15개의 SRAM 뱅크 세트들뿐만 아니라 로컬 SRAM 뱅크 세트로부터 IFM 데이터를 가져온다. 또한, 각 SRAM 뱅크 세트(109)는 그것의 로컬 타일(102)로, 특히 로컬 타일(139) 내부의 웨이트 압축 해제 유닛(138)으로 웨이트들을 직접 공급한다. 웨이트 로딩을 빠르게 하기 위해, 모든 4개의 SRAM 뱅크들(B0 내지 B3)은 WDU(139)에 웨이트들을 병렬로 페치 및 피드할 수 있다. 컨볼루션에서와 달리, FC 웨이트들은 각 곱셈 후에 버려져야 하므로, 완전히-연결된 레이어 계산 동안 가능한 빠르게 타일들에 웨이트들을 로드하는 것이 특히 중요하다.
각 MR 타일(102) 내의 복수의 MU 웨이트 레지스터 파일들은 "18*16*8 = 2,304 바이트들 = 144개의 워드들" 크기의 웨이트 커널을 수용할 수 있고, 여기서 각 워드는 128 비트들을 갖는다. 예를 들어, 만약 뉴럴 프로세서에 이용 가능한 총 SRAM 용량이 2MB이면, 각 SRAM 뱅크 세트는 “B) / (16개의 SRAM 뱅크 세트들) = 128KB”을 갖는다. 또한, 만약 각 SRAM 뱅크 세트가 4개의 SRAM 뱅크들을 포함하면, 각 SRAM 뱅크 크기는 "(SRAM 뱅크 세트 크기) / (SRAM 뱅크 세트 당 SRAM 뱅크들) = 128KB / 4 = 32KB”이다. 그러므로, 4개의 로컬 SRAM 뱅크들 각각은 "144/4 = 36개의 워드들(이용 가능한 2048개 중에서)”을 저장할 수 있다.
도 4ac는 타일 및 그것의 로컬 SRAM 뱅크 세트 사이의 로컬 OFM 연결들을 도시한다. 타일(102)은 완료된 또는 부분 결과들을 OFM 전달 패브릭으로 출력하고, OFM 전달 패브릭은 해당 데이터를 그 밖에 다른 SRAM 뱅크 세트들뿐만 아니라 로컬 SRAM 뱅크 세트로 전송하고, 해당 데이터를 디-멀티플렉서(de-multiplexer)(405)를 통해 SRAM 뱅크들(B0 내지 B3)에 이용 가능하게 한다.
다음의 여러 단락들은 IFM 및 OFM 데이터 전달 패브릭들을 논의한다. IFM 전달 패브릭은 SRAM 뱅크 세트들(109)로부터 타일들(102)로 연결들을 형성하고 그리고 데이터를 전송하는 반면에, OFM 전달 패브릭(106)은 타일들(102)로부터의 역으로 SRAM 뱅크 세트들(109)로 연결들을 형성하고 그리고 데이터를 전송한다.
IFM을 SRAM 뱅크 세트들로부터 타일들로 가져오고 OFM을 타일들로부터 SRAM으로 다시 가져 오는 작업을 고려하면, SRAM 뱅크 세트들과 타일들 사이의 연결들은 전부-대-전부(all-to-all)여야 하고, 타일들과 SRAM 뱅크 세트들 사이의 연결들 또한 전부-대-전부(all-to-all)여야 한다. 전부-대-전부 연결들을 하게 하려면 크로스-바(cross-bar) 스위치들(예를 들어, 16-투(to)-16)의 사용이 필요할 수 있고, 이는 이와 같은 경우에서 엄청나게 큰 실리콘 면적을 소비 할 수 있고 따라서 매우 바람직하지 않다. 보다 구체적으로, 완전(full) 크로스-바 스위치의 면적은 O(NM)에 비례하고, 여기서 N은 스위치 입력들의 수이고 M은 스위치 출력들의 수이다. N = M = T = 16의 경우에서, 여기서 T는 물리적 타일들의 개수이고, 따라서 타일들의 수에서 2차(quadratic)인 "O(NM) = O(T2)"를 만들고, 실리콘 면적에 대해 특히 비싸게 타일들의 수를 증가(또는 스케일링 업)시킨다(예를 들어, 32에서 32로 또는 64로).
그러나, 아래에서 더 자세히 논의되는 바와 같이, 타일들 및 SRAM 뱅크 세트들 사이의 전부-대-전부 연결들은 필요하지 않다. 통신 패브릭의 크기 및 복잡성을 감소시키기 위해, 일부 실시 예들은 SRAM을 겹치지-않는(non-overlapping) 스토리지로 분할함으로써, OFM들이 생성될 위치에(각각의 물리적 타일들에 의해) OFM들을 지역적으로 저장하는 것을 목표로 한다. IFM 데이터는 다양한 SRAM 뱅크 세트들로부터 각 타일로 여전히 전달되지만, IFM 전달 패브릭 구성은 타일들 사이 감소의 5가지 주요 패턴들에 대응하는 5가지 필수 패턴들로 감소될 수 있다. OFM들을 지역적으로로 저장하고 분산된(글로벌) 방식으로 IFM을 페치하는 대신에, OFM 결과들을 분산된(글로벌) 방식으로 라이트하면서 IFM을 지역적으로 페치하도록 IFM 및 OFM 전달 패브릭들을 구성하는 것이 가능함에 유의해야 한다.
일반적으로, 컨볼루션 또는 완전히-연결된 레이어 계산은 인터-타일(inter-tile) 감소에 대해 이러한 5가지 구성들 중 하나로 분해될 수 있다: (1) 도 4ad에 도시된 바와 같이, 16개의 OFM 슬라이스들을 모두 함께 생성하는 모든 16개의 타일들에 IFM 슬라이스를 브로드캐스트 함으로써 하나의 IFM 슬라이스를 피드하고, (2) 도 4ae에 도시된 바와 같이, 2개의 IFM 슬라이스들 각각을 8개의 타일들로 브로드캐스트 함으로써, 2개의 IFM 슬라이스들을 병렬적으로 피드하고, (3) 도 4ag에 도시된 바와 같이, 4개의 IFM 슬라이스들 각각을 4개의 타일들로 브로드캐스트 함으로써, 4개의 IFM 슬라이스들을 병렬적으로 피드하고, (4) 도 4aj에 도시된 바와 같이, 4개의 IFM 슬라이스들 각각을 2개의 타일들로 브로드캐스트 함으로써, 8개의 IFM 슬라이스들을 병렬적으로 피드하고, (5) 도 4al에 도시된 바와 같이, 16개의 IFM 슬라이스들 각각을 하나의 타일로 브로드캐스트 함으로써, 16개의 IFM 슬라이스들을 병렬적으로 피드한다.
완성된(또는 부분) 결과를 얻기 위해 각각의 IFM 슬라이스가 8개의 타일들로 브로드캐스트 되고 2개의 타일들의 출력이 감소(감소 패브릭(111)에 의해)되므로, 경우 (2)를 “브로드캐스트 8 감소 2” 경우로 지칭한다. 유사하게, 각각의 IFM 슬라이스가 4개의 타일들로 브로드캐스트 되고 4개의 타일들의 출력이 감소되므로, 경우 (3)을 "브로드캐스트 4 감소 4" 경우라고 지칭하고, 각각의 IFM 슬라이스가 2개의 타일들로 브로드캐스트 되고 8개의 타일들의 출력이 감소되므로, 경우 (4)를 "브로드캐스트 2 감소 8" 경우라고 지칭하고, 각각의 IFM 슬라이스가 오직 하나의 타일로 브로드캐스트 되고(즉, 브로드캐스트 없음) 16개의 타일들의 출력이 감소되므로, 경우 (5)를 "브로드캐스트 1 감소 16" 경우라고 지칭하고, 그리고 IFM 슬라이스가 16개의 타일들로 브로드캐스트 되고 하나의 타일의 출력이 감소되므로(즉, 감소 없음), 경우 (1)은 "브로드캐스트 16 감소 1" 경우라고 지칭한다.
5개의 인터-타일 감소 구성을 보다 상세히 고려하고 5개의 감소 구성 경우들 각각에서 IFM 및 OFM 전달 패브릭이 지원해야 하는 연결 패턴들이 정확히 무엇인지 고려한다. 더 명확하기 위해, "인트라-타일(intra-tile)” 감소가 타일들 내부에 가산기 트리들(128A 및 128B)을 사용하여 승산기 유닛 곱들의 감소를 지정하는 것으로 지칭한 것과 대조적으로, “인터-타일(inter-tile)” 감소는 타일 출력들의 감소(감소 패브릭(111)에 의해 제공되는 재구성 가능한 가산기 트리를 사용)를 지정하는 것으로 지칭한다.
인터커넥트 패브릭(interconnect fabric)이 사용되는 경우들을 식별하기 위해 다음 표기법이 사용될 수 있다. 표기법 "Bm-Rn-"는 각 IFM 슬라이스가 m개의 타일들로 브로드캐스트되고 결과를 얻기 위해 n개의 타일들의 출력이 감소하는(인터-타일 감소 패브릭(111)에 의해) 경우를 나타낸다. 16개의 물리적 타일들이 이용 가능함에 따라, 5개의 인터-타일 감소 경우들은, 도 4ad에 도시된 B16-R1, 도 4af에 도시된 B8-R2, 도 4ah에 도시된 B4-R4, 도 4ak에 도시된 B2-R8, 및 도 4am에 도시된 B1-R16을 포함한다.
인터-타일 감소 경우들의 최대 개수는 LOG2(N)과 동일하고, 여기서 N은 뉴럴 프로세서 내에서 물리적 타일들의 개수이다. N개의 타일들을 갖는 뉴럴 프로세서에서 사용 가능한 인터-타일 감소 구성들은 구성(BN-R1)(m = N 그리고 n = 1)부터 시작하여, 이어서 m이 1에 도달할 때까지 각 다음 구성마다 m을 2로 나누고 그리고 n에 2를 곱함으로써 구성된다. 예를 들어, 만약 뉴럴 프로세서가 8개의 타일들만을 갖는 경우, B8-R1, B4-R2, B2-R4 및 B1-R8을 포함하는, 4개의 인터-타일 구성들이 이용 가능할 수 있다. 32개의 타일들을 갖는 뉴럴 프로세서는 B32-R1, B16-R2, B8-R4, B4-R8, B2-R16 및 B1-R32를 포함하는 최대 6개의 인터-타일 구성들을 제공할 수 있다.
계산은 부분 결과들뿐만 아니라 최종 결과들(예를 들어, 활성화 함수가 적용됨)을 생성할 수 있으므로, 각 인터-타일 구성은 OFM 전달 경로에 대해 고려해야 할 2가지 경우들을 가질 수 있다. 최종 결과들을 생성하는 경우를 "Bm-Rn-F"라 지칭하고, 그리고 부분 결과들을 생성하는 경우를 "Bm-Rn-P"라 지칭한다.
도 4ae, 도 4ag, 도 4aj, 도 4al, 및 도 4an은 5개의 감소 구성들 각각에서 감소 패브릭(111)에 의해 함께 합해진 타일 출력들을 추가적으로 도시한다. 예를 들어, 도 4al은 하나의 가산기 트리(도 4ak에서 왼쪽 가산기 트리)에 의해 합산된 8개의 타일들(T0, T8, T4, T12, T10, T2, T14 및 T6)의 출력들을 갖는 B2-R8 구성을 도시하는데, 8개의 타일들(T7, T15, T3, T11, T13, T5, T9 및 T1)의 출력은 다른 가산기 트리(도 4ak에서 오른쪽 가산기 트리)에 의해 합산된다.
서로 떨어져서 퍼진 타일들의 출력들을 추가하는 것과 대조적으로, 감소 패브릭(111)의 구성 가능한 가산기 트리는 서로 인접한 타일들의 출력들을 더하도록 설계되어 있으므로, 감소 패브릭의 구성 가능한 가산기 트리 배선을 간결하게 만들고 트리 자체를 “분산(distribute)”되게 한다. 또한, 이전 예시들에서와 다르게, 16개의 타일들은 여기서 T0 내지 T15로 식별되고 그리고 이하 예시들에서 표기법을 단순화하기 위해 식별자들의 순서가 변경(매핑 예시들에서 사용된 표기법과 비교하여)되었다.
각각의 인터-타일 감소 구성들을 하나씩 자세하게 검토한다. 제1 예시 경우는 B16-R1 동작들을 포함한다. "(임의의 SRAM 뱅크 세트로부터) IFM을 글로벌하게(globally, 전역적으로) 페치하는 반면에 가능한-지역적(국부적)(으로-OFM-저장(store-OFM-as-locally-as-possible) 원칙"에 따라, 이 구성에서 입력 IFM은 임의의 SRAM 뱅크 세트(S0..S15)로부터 스트림할 수 있다. 도 4ba에 도시된 바와 같이, SRAM 뱅크 세트(S10)는 IFM 전달 패브릭(104)을 통해 모든 16개의 타일들(T0 내지 T15)로 IFM 슬라이스들의 스트림을 제공(도 4ad에 도시된 바와 같이, 모든 16개의 타일들로 하나의 IFM 슬라이스를 브로드캐스트)한다. 예를 들어, 하나의 SRAM 뱅크 세트(예를 들어, S10)가 IFM 데이터를 모두 소진하면, 다른 SRAM 뱅크 세트(예를 들어, S11)가 데이터 소스가되어 IFM 데이터를 타일들에 계속 스트림할 수 있다. 이러한 단계들은 전체 IFM 텐서가 스트림될 때까지 계속될 수 있다. 복수의 IFM 패스들이 요구되는 경우, IFM 텐서 스트리밍 시퀀스는 필요에 따라 반복될 수 있다.
B16-R1 구성에서 인터-타일 감소가 없고, 이에 따라 각 타일의 가산기 유닛은 해당 타일의 결과만을 누적하고, 그리고 OFM 완료 또는 부분 결과는 후술되는 바와 같이 근처의 SRAM에 라이트될 것이다. 따라서, B16-R1에서 16개의 타일들 각각은 “부분 결과들의 스트림” 또는 결과들이 “최종일 때는 OFM 슬라이스들의 스트림”을 생성한다. 특히, 부분들의 경우에서, 각 값은, 8-비트 IFM 및 OFM으로 작업하는 경우 32-비트-폭(32-bits-wide)이거나 또는 16-비트 IFM 및 OFM을 가정하면 48-비트-폭까지일 수 있고, 그리고 도 4bb에서 화살표들(106)로 표시된 바와 같이 각 부분 결과는 지역적으로 저장될 것이다. 이 경우, 각 SRAM 뱅크 세트는 부분 결과들을 저장하는 목적지로서 작용한다. 더욱이, 각 SRAM 뱅크 세트(109)는 그것(각 SRAM 뱅크 세트(109))의 로컬 타일로부터 데이터를 수신하고, 예를 들어, SRAM 뱅크 세트(S8)은 타일(T8)로부터 데이터를 수신하고, SRAM 뱅크 세트(S0)는 타일(T0)로부터 데이터를 수신한다. 그리고 등등.. 각각의 SRAM 뱅크 세트(109)는 4개의 SRAM 뱅크들(108)을 포함하므로, 각각의 SRAM 뱅크 세트(109)는 일반적으로 클럭 당 16개의 4-바이트 부분 결과들을 저장할 수 있다. 그러나, 현재 소스 SRAM 뱅크 세트는, 부분 결과들을 또한 라이트하면서, IFM을 동시에 페치해야만 하는데, 이는 일부 경우들에서 SRAM 뱅크 세트의 이용 가능한 총 대역폭을 초과할 수 있다. 이와 같은 경우들에서, 컨볼루션 평면 커널 크기가 1x1보다 클 때 소스 SRAM 뱅크 세트로부터 IFM 리드들을 감소시키는 IFM 캐시(139)가 도움이 될 수 있다. 또한, 1x1보다 큰 컨벌루션 평면 커널 크기 및/또는 IFM 웨이트 사이클링을 사용하는 동작들은 여러 클럭들에서 한 번 출력을 생성하므로(매 클럭 당 하나의 결과와 대조적으로), OFM 대역폭에 대한 요구를 감소시키고 SRAM 액세스 병목 현상을 방지한다.
최종 결과들을 생성할 때, 각각의 최종 값은 8-비트(또는 16-비트 등)로 양자화될 것이고, 그리고 그 값들은 SRAM 뱅크 세트들 "[S0..S7] 또는 [S8..S15]"에 라이트될 수 있다. 도 4bc 및 도 4bd는 OFM 전달 패브릭 연결 및 구성 선택들을 도시한다. OFM 슬라이스 폭은 IFM 슬라이스 폭의 절반이므로(8개의 뎁스 채널들 대 16), 2개의 수직으로-인접한 타일들("타일 열")의 출력들은 짧은 로컬 연결을 통해 상위 SRAM 뱅크 세트 또는 하위 SRAM 뱅크 세트로 전송될 수 있다. 각 SRAM 뱅크 세트는 16개의 채널들을 포함하는 슬라이스들을 처리할 수 있으므로(16개의 채널들을 포함하는 IFM 슬라이스로 인해), 각각의 SRAM 뱅크 세트는 또한 2개의 OFM 슬라이스들을 수용할 수 있다. 예를 들어, 타일 열을 함께 포함(구성)하는 타일들(T0 및 T8)의 출력들은 함께 그룹화될 수 있고, 로컬 짧은 연결들(106)을 통해, 도 4bc에 도시된 T8 바로 아래에 위치한 SRAM 뱅크 세트(S8) 또는 도 4bd에 도시된 T0 바로 아래에 위치한 SRAM 뱅크 세트(S0)에 전송될 수 있다. 유사하게, 타일 열(T4 또는 T12) 출력들은 그룹화되어 SRAM 뱅크 세트(S4 또는 S12)에 지역적으로 전송될 수 있고, 타일 열(T10 또는 T2) 출력들은 SRAM 뱅크 세트(S10 또는 S2)로, 타일 열(T14 또는 T6) 출력들은 SRAM 뱅크 세트(S14 또는 S6)로, 타일 열(T7 또는 T15) 출력들은 SRAM 뱅크 세트(S7 또는 S15)로, 타일 열(T3 또는 T11) 출력들은 SRAM 뱅크 세트(S3 또는 S11)로, 타일 열(T13 또는 T5) 출력들은 SRAM 뱅크 세트(S13 또는 S5)로, 그리고 타일 열(T9 또는 T1) 출력들은 SRAM 뱅크 세트(S9 또는 S1)로 그룹화되어 지역적으로 전송될 수 있다.
제2 예시 경우는 B8-R2 동작들을 도시한다. 도 4ca에 도시된 바와 같이, 하나의 IFM 슬라이스는 상위 SRAM 뱅크 세트들(109)로부터 공급되고, 여기서 "상위(upper)"는 “S4, S10, S14, S7, S3, S13 및 S9”를 포함하도록 정의되고, 하나의 IFM 슬라이스는 하위 SRAM 뱅크 세트들(109)로부터 공급되고, 여기서 “하위(lower)”는 “S8, S12, S2, S6, S15, S11, S5 및 S1”을 포함하도록 정의된다. 보다 구체적으로, 임의의 상위 SRAM 뱅크 세트들(109)은 모든 상위 타일들(T0, T4, T10, T14, T7, T3, T13 및 T9)에 IFM 슬라이스를 전송(브로드캐스팅)하는 소스로서 작용할 수 있다. 예를 들어, IFM 전달 패브릭은 S10으로부터 IFM 슬라이스를 리드하고 그리고 해당 IFM 슬라이스를 T0, T4, T10, T14, T7, T3, T13 및 T9로 브로드캐스트 하도록 구성될 수 있다. 대안적으로, 예를 들어, IFM 전달 패브릭은 S3으로부터 IFM 슬라이스를 리드하고 그리고 해당 IFM 슬라이스를 T0, T4, T10, T14, T7, T3, T13 및 T9로 브로드캐스트 하도록 구성될 수 있다.
유사하게, 임의의 하위 SRAM 뱅크 세트들(109)은 모든 하위 타일들(T8, T12, T2, T6, T15, T11, T5 및 T1)에 IFM 슬라이스를 전송(브로드캐스팅)하는 소스로서 작용할 수 있다. 예를 들어, IFM 전달 패브릭은 S11로부터 IFM 슬라이스를 리드하고 그리고 해당 IFM 슬라이스를 T8, T12, T2, T6, T15, T11, T5 및 T1로 브로드캐스트 하도록 구성될 수 있다. 대안적으로, 예를 들어, IFM 전달 패브릭은 S8로부터 IFM 슬라이스를 리드하고 그리고 해당 IFM 슬라이스를 T8, T12, T2, T6, T15, T11, T5 및 T1로 브로드캐스트 하도록 구성될 수 있다.
추가적으로, 도 4ca를 참조하면, 하나의 (클럭) 사이클에서 데이터가 다음 페어들(pairs) "[S0, S1] [S2, S3] [S4, S5] [S6, S7] [S8, S9] [S10, S11] [S12, S13] 및 [S14, S15]" 중 하나로부터 수신되도록, SRAM 뱅크 세트들은 IFM 슬라이스들을 전송하기 위해 페어(pair)될 수 있다. 예를 들어, 도 4ca에서, IFM 슬라이스들은 SRAM 뱅크 세트들의 페어 “[S10, S11]”로부터 공급된다.
도 4cb는 2개의 IFM 슬라이스들을 피드하는 것을 도시하고, 각 IFM 슬라이스는 8개의 타일들로 브로드캐스트 되고 그리고 2개의 타일들의 출력들이 열-와이즈(방향) 방식으로 감소한다. 예를 들어, 도 4af를 따라가 보면, T0의 출력은 T8의 출력과 함께 감소되어 하나의 결과를 생성하고, T4 및 T12 출력들이 감소되어 다른 결과를 생성하고, T10 및 T2 출력들이 감소되어 또 다른 결과를 생성하고, T14 및 T6 출력들이 감소되어 또 다른 결과를 생성하고, T7 및 T15 출력들이 감소되어 또 다른 결과를 생성하고, T3 및 T11 출력들이 감소되어 또 다른 결과를 생성하고, T13 및 T5 출력들이 감소되어 또 다른 결과를 생성하고, 그리고 T9 및 T1 출력들이 감소되어 또 다른 결과를 생성한다.
부분 결과들의 경우에서, 8개의 감소 결과들은 SRAM 뱅크 세트들([S0..S7] 및 [S8..15])의 2개의 그룹들 중 하나에 저장될 수 있다. 예를 들어, 도 4cb는 SRAM 뱅크 세트들([S0..S7])에 저장된 8개의 부분 결과들을 도시한다. 최종 결과들의 경우에, OFM 전달 패브릭(106)은 “[S0..S3], [S4..S7], [S8..S11] 및 [S12..S15]”를 포함하는, 4개의 SRAM 뱅크 세트 그룹들 중 하나에 저장된, 2개의 이웃한 타일 열들의 결과들을 병합할 수 있다. 예를 들어, 도 4cc는 SRAM 뱅크 세트들([S4..S7])에 저장된 8개의 최종 결과들을 도시한다.
제3 예시 경우는 B4-R4 동작을 도시한다. 도 4da에 도시된 바와 같이, 하나의 IFM 슬라이스가 평면도(floorplan)의 각 쿼터(quarter)로부터 공급된다. 도 4db를 참조하면, 동작은 4개의 IFM 슬라이스들을 브로드캐스트 하는 것 그리고 감소 후에 4개의 결과들을 생성하는 것을 포함할 수 있다. IFM 전달 패브릭 및 OFM 전달 패브릭은, 다음의 경우들이 만족되는 한, 하나의 (클럭) 사이클 내에서 입력들을 전송하고 그리고 출력들을 수신하도록 관리할 수 있다. i) IFM 슬라이스들이, "[S0..S3], [S4..S7], [S8..S11] 및 [S12..S15]"를 포함하는 4개의 그룹들의 하나에서 온 경우 그리고 ii) 출력들이, 도 4db에 도시된 바와 같이, 결과들이 부분이면, 4개의 그룹들 "[S0..S3], [S4..S7], [S8..S11] 및 [S12..S15]" 중 하나에, 그리고 도 4dc에 도시된 바와 같이, 결과들이 최종이면, 8개의 그룹들 "[S0 S1], [S2 S3], [S4 S5], [S6 S7], [S8 S9], [S10 S11], [S12 S13] 및 [S14 S15]" 중 하나에 라이트되는 경우.
도 4aj를 참조하면, 각각의 감소 그룹(407)은 하나의 출력 결과를 생성하는 것에 유의해야 한다. 2개의 결과들이 상단 부분(top part)에 저장될 것이고, 그리고 2개의 결과들이 하단 부분(bottom part)에 저장될 것이다. 최종 결과들을 포함하는 OFM 슬라이스는 8 바이트의 크기를 가지므로, OFM 전달 패브릭은 2개의 이웃한 열들의 결과들을 병합할 수 있다. 도 4ah는 또한 감소 후 4개의 출력 결과들을 형성하기 위해 브로드캐스트 되는 4개의 IFM 슬라이스들을 도시한다.
제4 예시 경우는 B2-R8 동작을 도시한다. 도 4ea에 도시된 바와 같이, 하나의 IFM 슬라이스는 평면도의 각각의 8분의 1로부터 공급될 수 있다. 도 4eb를 참조하면, 동작은 감소 후 2개의 결과들을 생성하기 위해 8개의 IFM 슬라이스들을 브로드캐스트 하는 것을 포함할 수 있다.
i) 입력이 [S0..S7] 및 [S8..S15]를 포함하는 2개의 그룹들 중 하나로부터 오는 한, 그리고 ii) 출력들이, 결과들이 부분적이면 8개의 그룹들 "[S0 S1], [S2 S3], [S4 S5], [S6 S7], [S8 S9], [S10 S11], [S12 S13] 및 [S14 S15]" 중 하나에, 그리고 결과들이 최종이면 임의의 SRAM 뱅크 세트에 라이트되는 한, IFM 전달 패브릭 및 OFM 전달 패브릭은 하나의 (클럭) 사이클에서 입력들을 전송하고 그리고 출력들을 수신하도록 관리할 수 있다
제4 예시 경우에 대해, 도 4ea는 브로드캐스트 되는 소스 데이터를 도시하고, 도 4eb는 형성되는 부분 결과들을 도시하고, 그리고 도 4ec는 형성되는 최종 결과들을 도시한다. 도 4aj를 참조하면, 각 섹션(407)은 감소 후 하나의 결과를 생성한다. 2개의 결과들 중 하나는 상단 부분에 저장될 수 있는 반면에, 다른 결과는 하단 부분에 저장될 수 있다. 최종 결과들을 포함하는 OFM 슬라이스는 8 바이트의 크기를 가지므로, OFM 전달 패브릭은 2개의 이웃한 열들의 결과들을 병합할 수 있다. 또한, 도 4ak는 감소 후 2개의 출력 결과들을 형성하기 위해 브로드캐스트 되는 4개의 IFM 슬라이스들을 도시한다.
제5 예시 경우는 B1-R16 동작을 도시한다. 도 4fa에 도시된 바와 같이, 하나의 브로드캐스트(B1)에 대응하여, 하나의 IFM 슬라이스가 각각의 SRAM 뱅크 세트로부터 공급된다. 도 4fb를 참조하면, 동작은 모든 16개의 타일들의 출력들을 감소시켜 하나의 결과를 생성하는 것을 포함하고, 하나의 결과는 그 결과가 부분적인 경우 및 최종인 경우 모두에서 임의의 SRAM 뱅크 세트에 저장될 수 있다.
최종 결과들을 포함하는 OFM 슬라이스는 8 바이트의 크기를 가지므로, OFM 전달 패브릭은 2개의 이웃한 열들의 결과들을 병합할 수 있다. 또한, 도 4am은 감소 후 단일 출력 결과를 형성하기 위해 피드된 16개의 IFM 슬라이스들을 도시한다.
현재 및 후속 동작들의 감소 구성들의 모든 순열(permutation)들에 대해, 후속 동작(이전 동작의 결과들을 소비함)이 해당 결과들을 페치하는 것이 가능한 이러한 방식을 통해, 하나의 동작으로 계산 및 SRAM에 저장이 항상 가능하게 만드는, 상술된 예시를 포함하는, 방식으로 IFM 및 OFM 전달 패브릭들이 설계될 수 있다. 예를 들어, 현재 동작은 B4-R4를 사용할 수 있고, B4-R4와 연관된 OFM 전달 패브릭 연결 선택들에 따라 그것(현재 동작)의 결과들을 SRAM 뱅크 세트들에 저장할 수 있다. 이전 B4-R4 동작에 의해 계산되고 저장된 데이터를 성공적으로 페치할 수 있으면서도, 후속(또는 다음) 동작은 IFM 전달 패브릭 연결을 위한 관련 선택들과 함께 B2-R8 감소 구성을 사용할 수 있다.
도 4g는 앞서 설명된, 모든 감소 구성들에 대한 모든 IFM 전달 패브릭 연결 옵션들을 지원하는 IFM 전달 패브릭(104)의 하나의 가능한 구현을 도시한다. 이 패브릭은 4개의 투-웨이(two-way) 멀티-드롭(multi-drop) 버스들로 구성되고, 투-웨이 버스들 중 2개는 상위(upper) SRAM 뱅크 세트들 및 상위 타일들 사이에 위치하고, 그리고 다른 2개의 투-웨이 버스들은 하위(lower) SRAM 뱅크 세트들 및 하위 타일들 사이에 위치한다. 버스들은 레지스터들(411)에 의해 원형 방식(circular fashion)으로 연결되므로, 상위 버스들로부터의 데이터는 하위 버스들로 흐를 수 있고 다시 돌아올 수 있다. 설명의 명확성을 위해, IFM 전달 패브릭(104) 내에 존재할 수 있는 추가 파이프라이닝(pipelining) 레지스터들이 도 4g에서 생략되었음에 유의해야 한다.
도 4h는 앞서 설명된, 모든 감소 구성들에 대한 모든 OFM 전달 패브릭 연결 옵션들을 지원하는 OFM 전달 패브릭(106)의 하나의 가능한 구현을 도시한다. 패브릭은 감소 구성들(B2-R8 및 B1-R16)을 지원하기 위해 4개의 투-웨이 16-바이트-폭 멀티-드롭 버스들로 구성된다. 설명의 명확성을 위해, OFM 전달 패브릭(106) 내에 존재할 수 있는 파이프라이닝 레지스터들이 도 4h에서 생략되었음에 유의해야 한다.
감소 패브릭(111)은 R1(인터-타일 감소가 없는 경우)을 제외한 모든 구성, 예를 들어 B8-R2, B4-R4, B2-R8 및 B1-R16에 대해 "인터-타일(inter-tile)" 감소(가산기 트리들(128A 및 128B)에 의해 달성된 인트라-타일 감소와 대조적으로)를 수행할 수 있다. 감소 패브릭(111)은 도 5a에 도시된 RAA(reduce-and-accumulate) 노드들(520)로 구성된 재구성 가능한 가산기 트리로 구성된다. 각 RAA 노드는 부분적으로 감소된 결과들, 즉 활성화 함수 애플리케이션(적용) 전의 선형 결과들상에서 동작한다. RAA 노드는 그 RAA 노드가 위치한 동일한 타일 열 ARU들(167)로부터의 입력들 또는 다른 RAA 노드들로부터의 입력들을 수신한다. RAA는 가산기 트리 내에서 더 위의 RAA 노드들로 또는 다시 ARU로 출력들을 전송한다. 그 후, 결과들이 최종이면, ARU는 활성화 함수를 적용하고 그리고 최종 결과들을 OFM 전달 패브릭으로 전달한다. 대안적으로, 결과들이 부분이면, ARU는 활성화 함수를 바이패스 하면서 부분 결과들을 OFM 전달 패브릭으로 전달한다.
도 5b는 R16 구성을 위해 구성된 감소 패브릭(111)을 도시한다. 여기서, ARU 모듈(167)은 부분적으로 감소된 결과들(인트라-타일 가산기 트리들(128A 및 128B)로부터의)을 생성하고, 도 1x에 도시된 바와 같이 “감소 패브릭으로(To reduction fabric)” 출력을 통해 이러한 부분적으로 감소된 결과들을 RAA 노드들(502)의 제1 레벨로 스트림한다. RAA 노드들(502)은 부분적으로 감소된 데이터의 16개의 ARU 스트림들을 부분적으로 감소된 데이터의 8개의 스트림들로 쌍별로(pairwise) 감소시킨다. RAA 제2-레벨 노드들(504)은 RAA 노드들(502)에 의해 생성된 8개의 스트림들을 부분적으로 감소된 데이터의 4개의 스트림들로 쌍별로 더 감소시킨다. 제3 및 제4 레벨 RAA 노드들은, (최종 결과들을 생성할 때) 활성화 함수 애플리케이션을 위해 타일(T14)의 ARU로 전달되는 완전히-감소된 데이터의 하나의 스트림을 생성하는 감소 프로세스를 완료하고 그리고 OFM 전달 패브릭으로 출력한다. 타일(T14)은 물리적으로 트리 루트 RAA 노드(508) 근처에 위치하고, 그리고 도 4fb에서의 타일(T14)의 ARU(167)에 대응한다는 것에 유의해야 한다.
도 5c는 R8 구성을 위해 구성된 감소 패브릭(111)을 도시한다. R16 구성과 달리, R8 구성은 2개의 가산기 트리들(하나가 아닌)을 포함하고, 각 가산기 트리는 3개의 레벨들(4개가 아닌)을 포함한다. 제1 가산기 트리는 타일들(T0, T8, T4, T12, T10, T2, T14 및 T6)의 ARU들로부터의 부분적으로-감소된 데이터를 감소시키고, 그리고 완전히-감소된 결과를 타일(T12)의 ARU로 전달하여 데이터 리턴을 완료한다. 제2 가산기 트리는 타일들(T7, T15, T2, T11, T13, T5, T9 및 T1)의 ARU들로부터의 부분적으로-감소된 데이터를 감소시키고, 그리고 완전히-감소된 결과를 타일(T13)의 ARU로 전달하여 데이터 리턴을 완료한다. 타일들(T12 및 T13)은 각각 물리적으로 각각의 트리 루트 RAA 노드들(506) 근처에 위치하고, 그리고 도 4fb에서의 타일들(T12 및 T13)의 ARU들(167)에 각각 대응한다는 것에 유의해야 한다.
도 5d는 4개의 가산기 트리들을 포함하는 구성 R4를 도시하고, 각 가산기 트리는 4개의 타일들로부터의 부분적으로-감소된 출력들을 감소시킨다. 도 4db는 4개의 트리 루트 노드들과 관련된 ARU들의 물리적 위치들을 도시한다.
도 5e는 8개의 가산기 트리들을 포함하는 구성 R2를 도시하고, 각 가산기 트리는 2개의 타일들로부터의 부분적으로-감소된 출력들을 감소시킨다. 도 4cb는 8개의 트리 루트 노드들와 관련된 ARU들의 물리적 위치들을 도시한다.
마지막으로, 도 5f는 감소 패브릭(111)을 필요로 하지 않고, OFM 전달 패브릭으로 직접 결과들을 출력하는 타일 ARU들을 포함하지만 어떠한 가산기 트리들도 포함하지 않는 구성 R1을 도시한다. 도 4bb는 이 경우에서 ARU들의 물리적 위치들을 도시한다. 도 4bb, 도 4bc, 도 4bd, 도 4cb, 도 4cc, 도 4db, 도 4dc, 도 4eb, 도 4ec 및 도 4db에서, ARU들(167) 내부의 숫자는 도 5b 내지 도 5f에 도시된 것처럼 RAA 트리 노드 레벨을 나타내고, 여기서 레벨 0은 구성 R1에 대응한다(감소 패브릭을 사용하지 않음). 누산기(130A)(또는 130B)로부터 활성화 함수 및 부분 경로들(비트 범위 선택 유닛(187)과 함께 시작)로 데이터를 직접 전달하는 ARU에서 ARU 멀티플렉서(174)에 의해 구성 R1이 구현되므로, 도 1x에 도시된 바와 같이, 감소 패브릭을 바이패스 한다. 희소 활성화 지원(sparse activation support)의 경우에서 감소 패브릭을 적절하게 바이패스하기 위해 요구되는 일부 보조 로직이 일반적인 설명의 명확성을 위해 도시되지 않았음에 유의해야 한다.
도 5g는 RAA 노드들(502, 504, 506, 508)로 구성된 감소 패브릭(111)을 도시한다. 각각의 RAA 노드는 물리적으로 정확히 하나의 타일 근처에 위치한다는 것에 다시 유의해야 한다. 각각의 RAA 노드(502)는 노드(502)가 위치한 타일 열 내의 양 타일들로부터 입력들을 수신한다. 타일 열당 정확히 하나의 RAA 노드(502)가 있다. RAA 노드(508)는 노드들(506)로부터 그것의 입력들을 수신하고, 노드들(506)은 차례로 노드들(504)로부터 그것들의 입력들을 수신하고, 노드들(504)은 차례로 노드들(502)로부터 입력들을 수신한다. 물리적 타일들의 수는 16인 반면에 15개의 트리 노드들이 있으므로, 타일(T12)은 이와 관련된 RAA 노드를 포함하지 않는다는 것에 유의해야 한다.
도 5a에 도시된 바와 같이, 각 RAA 노드는 누산기(518) 및 가산기(514)를 사용하여 감소된 결과들을 누적하는 것뿐만 아니라 가산기(512)를 사용하여 2개의 입력들(A 및 B)을 감소시키는 것을 포함하는 2개의 기능들을 갖는다. 예를 들어 IFM 웨이트 사이클링을 시작하기 위해, 멀티플렉서(516)는 누적의 시작시 가산기(512)로부터 감소된 결과를 누산기(518)로 직접적으로 로드하게 한다. 멀티플렉서(516)는 또한, 예를 들어 IFM 웨이트 사이클링이 시간에 따라 진행됨에 따라 감소된 결과들을 누적할 수 있게 한다.
압축된 포맷으로 웨이트들을 저장하는 것은, 특히 완전히-연결된 레이어 계산 동안에, 웨이트들을 저장하는데 필요한 SRAM(및 오프-칩 DDR) 스토리지의 양을 감소시키고, 웨이트들을 페치하는 것과 관련된 SRAM(및 오프 칩 DDR)의 전력을 감소시키고, 그리고 웨이트 로딩 속도를 높이는데 도움이 될 수 있다. 일부 실시 예들에서, 유휴(idle) 사이클들은 승산기 유닛 웨이트들을 로드하는데 사용될 수 있다. 또한, 일부 실시 예들에서, MR 열 당 단지 하나의 웨이트 로딩 버스를 도시하는 도 1k와 대조적으로, 복수의 수직 웨이트 로딩 버스들(101)은 웨이트 로딩을 가속화하기 위해 사용될 수 있다.
보다 구체적으로, 도 4ab에서 이전에 도시된 바와 같이, 웨이트들은 각 타일(102)에 로컬인 4개의 SRAM 뱅크들(108)에 저장되고, 각 타일은 모든 4개의 뱅크들을 병렬적으로 리드할 수 있다. 각 SRAM 뱅크는 16개의 8-비트 웨이트들을 페치한다. 각 타일은 8개의 MR 열들을 가지므로, 웨이트들이 압축되지 않은 경우에서 활성화 레인 당 하나의 8-비트 웨이트를 로드하기 위해 "(타일 당 8개의 MR 열들) / (타일 당 4개의 로컬 SRAM 뱅크들) = 2개의 클럭들"이 필요하다. 각 타일은 또한 타일 당 웨이트 압축 해제 유닛(138)을 포함하고, 이는 FC 및 컨볼루션 웨이트들을 압축 해제하는데 사용될 수 있다. 예를 들어, 각 승산기 유닛은 18개의 웨이트들을 포함할 수 있고, 모든 MU 웨이트들을 로드하기 위해 “(MU 당 18개의 웨이트들) * (웨이트 로드 당 2개의 클럭들) = 36개의 클럭 사이클들”이 필요할 수 있다. 18개의 웨이트들을 모두 사용하지 않는 더 작은 커널들은 더 빠르게 로드될 수 있다.
FC 계산과 동시에 진행되는 웨이트 스트리밍은 완전히 연결된 계산들에서 처리량을 향상시키는데 사용될 수 있으므로, 대규모 FC 계산들 동안 승산기 이용률을 높게 유지할 수 있다. 앞서 언급된 바와 같이, FC 계산은 웨이트들을 재사용하지 않는다. 그러므로, 이와 같이, FC 계산 동안 웨이트들을 빠르게 스트림 할 필요가 있다. 구체적으로, 모든 승산기들을 완전히 이용하기 위해, 1의 IFM 웨이트 사이클링을 갖는 FC 계산은 각 MU에 클럭 당 하나의 웨이트를 제공할 것을 요구한다. 모든 승산기들을 완전히 이용하기 위해, 2의 IFM 웨이트 사이클링은 각 MU에 2개의 클럭 당 하나의 웨이트를 제공할 것을 요구한다. 보다 일반적으로, 모든 승산기들을 완전히 이용하기 위해, N의 IFM 웨이트 사이클링은 MU 당 N 클럭들 당 하나의 웨이트를 제공할 것을 요구한다.
다양한 딥 러닝 연구 간행물들에 따르면, 완전히-연결된 레이어 웨이트들은 때로는 2배 이상으로 압축될 수 있다. 이러한 경우들에서, 2개의 클럭들 당 각 MU로 하나의 압축되지 않은 웨이트를 로드하는 것과 대조적으로, 하나의 압축되지 않은 웨이트는 하나의 클럭 당 각 MU에 로드될 수 있다.
그러나, 추가적으로, IFM 데이터는 또한 웨이트들과 함께 SRAM으로부터 페치되어야 하므로, 웨이트들을 페치하는데 이용 가능한 SRAM 대역폭을 감소시킨다. SRAM으로부터 페치되는 IFM 데이터의 양은, 결국, 매핑 감소 구성에 의존한다. 큰 감소 숫자, 예를 들어, R16은, 작은 감소 구성들, 예를 들어, R1에 비해 더 많은 채널들을 이용하여 IFM을 페치할 것을 요구한다.
모든 64개의 SRAM 뱅크들이 FC 웨이트들을 페치하기에 바쁘기 때문에, SRAM으로부터 IFM을 동시에 리드하는 것은 불가능할 수 있다. 승산기 이용률을 증가시키기 위해, IFM은 모든 64개의 뱅크들에 걸쳐 스플라이스(splice, 이어져서)되어 저장될 수 있다. 일부 실시 예들에서, IFM을 페치하기 위해, 하나의 클럭 사이클 동안 웨이트 리드가 중지되고, 모든 64개의 뱅크들은 하나의 IFM을 SRAM 출력 옆에 위치한 원-딥(1-deep) 캐시 레지스터(cache register)로 리드하게 한다. 이 후, IFM은 캐시된 64개의 16-바이트 라인으로부터 스트림한다. 보다 구체적으로, 64개의 모든 뱅크들로부터 병렬로 하나의 IFM을 페치하면, IFM 리드들의 수 "R = (64개의 SRAM 뱅크들) * (브로드캐스트 구성 번호 B) / (물리적 타일들의 수)"와 동일하도록 한번에 충분한 데이터가 페치될 수 있다. 따라서, 도 6에서 도시된 바와 같이, 일부 실시 예들에 대해, 완전히-연결된 레이어 계산을 위한 최대 승산기 이용률은 브로드캐스트 구성 번호 B의 함수로서 "R / (1 + R)"에 따라 계산될 수 있다.
앞서 언급된 바와 같이, 로컬 제어 유닛들(142, 144)뿐만 아니라 글로벌 제어(140)는 다양한 구성 레지스터들을 포함할 수 있다. 일부 실시 예들에서, 예를 들어, 뉴럴 프로세서가 하나의 동작에서 다른 동작으로 천이(transition)하거나 또는 하나의 SRAM 뱅크 세트가 데이터를 소진하고 그리고 IFM 전달 패브릭이 다른 SRAM 뱅크 세트로부터 IFM 데이터를 온-더-플라이(지연 없이) 스트림하게 전환해야 하듯이, 이러한 구성 레지스터들 중 일부의 컨텐츠들은 뉴럴 프로세서 구성을 즉시 변경하기 위해 온-더-플라이로 전환할 수 있다. 일반적으로-알려진 디자인 관례들(실무)에 따라, 이러한 온-더-플라이 재구성은 구성 레지스터들을 더블-버퍼(double-buffered)되게 함으로써 달성될 수 있고, 2개의 버퍼들 사이를 전환함으로써 새로운 구성을 적용할 수 있다. 도 1a에 도시된 바와 같이, 중앙 제어(110)는 AXI 버스를 통해 CPU로부터 구성 데이터를 수신할 수 있고, 해당 구성 데이터를 유틸리티 버스(112)로 전달할 수 있고, 유틸리티 버스(112)는 ARU 바이어스 레지스터(195), 스케일 레지스터(191), 활성화 함수(197) 구성 레지스터 등을 포함하는 다양한 다른 레지스터들뿐만 아니라 제어 로직(140, 142, 및 144와 같은)의 구성 레지스터들로 CPU로부터의 구성 값들을 전송 및 로드할 수 있다. 필요에 따라 다양한 시간에서 많은 수의 더블-버퍼(double-buffer)된 레지스터들의 전환을 수반하는 온-더-플라이 구성 변경들을 조정하기 위해, 유틸리티 버스(112)는 구성 레지스터 값들뿐만 아니라 더블-버퍼된 레지스터가 그것의 구성을 유효하게 전환해야 하는 시간(클럭 카운트)을 로드할 수 있다.
도 1a는 또한 AXI 슬레이브 인터페이스를 각각 포함하는 SRAM 뱅크 세트들(109)을 도시하고, AXI 슬레이브 인터페이스는 CPU가 IFM 및 웨이트 텐서들을 라이트하게 하고 그리고 OFM 결과들을 다시 리드할 수 있게 한다. SRAM 뱅크 세트들은 로컬 웨이트 로드 연결들뿐만 아니라 IFM 및 OFM 전달 패브릭들로부터 오는 I/O 요청들을 처리하므로, CPU가 결과들을 기다리는 동안 지연 없이 뉴럴 네트워크 계산이 지속되도록 하기 위해, AXI 인터페이스를 통한 CPU I/O 요청들은 중재되고(arbitrated) 그리고 더 낮은 우선 순위로 할당될 수 있다.
본 명세서에서 사용된 바와 같이, 용어들 “멀티플렉서(multiplexer)” 및 “디멀티플렉서(demultiplexer)”는 상호 교환적으로 사용된다. 각 용어는 하나의 측(“다중-포트(multi-port)” 측)에서 복수의 데이터 단자들(예를 들어, 데이터 입력들 또는 데이터 출력들) 그리고 다른 측(“단일-포트(single-port)” 측)에서 단일 데이터 단자(예를 들어, 데이터 출력 또는 데이터 입력)를 갖는 전환 가능한 장치를 의미하고, 그 장치는 그 장치의 제어 입력에서 수신된 제어 신호에 따라 선택된, 하나의 측에 복수의 데이터 단자들을 연결하고, 다른 측에 단일 데이터 단자를 연결하도록 구성된다.
용어 "프로세싱 유닛"은 본 명세서에서 데이터 또는 디지털 신호들을 처리하는데 사용되는 하드웨어, 펌웨어, 및 소프트웨어의 임의의 조합을 포함하도록 사용된다. 프로세싱 유닛 하드웨어는 예를 들어, ASIC(application specific integrated circuit), 일반적인 또는 특수 목적의 중앙 처리 장치(CPU), 디지털 신호 프로세서(DSP), 그래픽 처리 장치(GPU), 및 필드 프로그래머블 게이트 어레이(FPGA)와 같은 프로그램 가능 로직 장치들을 포함할 수 있다. 본 명세서에서 사용되는, 프로세싱 유닛에서, 각각의 기능은 그 기능을 수행하도록 구성, 즉, 하드-와이어(hard-wire)된 하드웨어, 또는 비-일시적 스토리지 매체에 저장된 명령어들을 실행하도록 구성된 CPU와 같은, 보다 일반적인 목적의 하드웨어에 의해 수행된다. 프로세싱 유닛은 단일 인쇄 회로 기판(PCB) 상에 제조되거나 여러 개의 상호 연결된 PCB들에 걸쳐서 분산될 수 있다. 프로세싱 유닛은 다른 프로세싱 유닛들을 포함할 수 있다. 예를 들어, 프로세싱 유닛은 PCB 상에서 서로 연결된 2개의 프로세싱 유닛들, FPGA 및 CPU를 포함할 수 있다.
비록 용어들 "제1", "제2", "제3" 등은, 본 명세서에서 다양한 요소, 구성 요소, 영역, 레이어 및/또는 섹션을 설명하기 위해 사용될지라도, 이러한 요소, 구성 요소, 영역, 레이어 및/또는 섹션은 이러한 용어에 의해 제한되지 않아야 한다고 이해될 것이다. 이러한 용어는 하나의 요소, 구성 요소, 영역, 레이어 또는 섹션을 다른 요소, 구성요소, 영역, 레이어 또는 섹션과 구별하기 위해서만 사용된다. 따라서, 본 발명의 사상 및 범위를 벗어나지 않으면서, 본 명세서에서 논의되는 제1 요소, 구성 요소, 영역, 레이어, 또는 섹션은 제2 요소, 구성 요소, 영역, 레이어, 또는 섹션으로 지칭 될 수 있다.
도면들에 도시된 바와 같이, 한 요소 또는 특징과 다른 요소 또는 특징의 관계를 설명하기 위하여 "아래(beneath)", "이하(below)", "낮은(lower)", "밑(under)", "이상(above)", "위(upper)" 등과 같은 공간적으로 상대적인 용어는 본 명세서에서 설명의 편의를 위해 사용될 수 있다. 도면에 도시된 방향 외에도, 이러한 공간적으로 상대적인 용어는 사용 중이거나 동작 중인 장치의 다른 방향을 포함하도록 의도 된것으로 이해될 것이다. 예를 들어, 도면 내 장치가 뒤집어지면, 다른 요소 또는 특징의 "이하" 또는 "아래" 또는 "밑"으로 기술된 요소는 다른 요소 또는 특징의 "이상"에 지향될 것이다. 즉, "이하" 및 "밑"이라는 예시적인 용어는 위와 아래의 방향을 모두 포함할 수 있다. 장치는 다르게 배향(예를 들어, 90도 회전 또는 다른 방향으로 회전)될 수 있다. 그러므로 본 명세서에서 사용되는 공간적으로 상대적인 설명은 이에 따라 해석되어야 한다. 추가적으로, 하나의 레이어가 2개의 레이어들 "사이"로 언급 될 때, 그것은 2개의 레이어들 사이의 레이어일 수 있거나, 또는 하나 이상의 개재하는(intervening) 레이어들이 존재할 수 있음을 또한 이해할 것이다.
본 명세서에서 사용한 용어는 단지 특정한 실시 예를 설명하기 위해 사용 된 것으로, 본 명세서에 개시된 개념을 제한하는 것은 의도되지 않는다. 본 명세서에서 사용된 바와 같이, 용어들 "실질적으로(substantially)', '약(about)', 및 이와 유사한 용어들은 정도의 용어들이 아니라 추정(approximation)의 용어들로 사용되고, 용어들은 본 발명이 속한 기술 분야에서의 통상의 기술자에 의해 인식될 수 있는 측정 또는 계산된 값들의 고유한 편차들을 설명하기 위한 것이다.
문맥 상 명백하게 다르게 지시하지 않는 한, 단수의 표현은 복수의 표현을 포함한다. 본 명세서에서 사용될 때, "포함하다(comprises)" 및/또는 "포함하는(comprising)"이라는 용어들은 언급된 특징, 정수, 단계, 연산, 요소 및/또는 구성요소의 존재를 특정하지만, 하나 이상의 다른 특징, 정수, 단계, 연산, 요소, 구성요소 및/또는 이들의 그룹의 존재 또는 추가를 배제하지는 않는다. 본 명세서에서 사용된, 용어 "및/또는"은 하나 이상의 관련된 열거된 항목들의 임의의 그리고 모든 조합들을 포함한다. 요소들의 목록 앞에 있을 때, "적어도 하나"와 같은 표현은 전체 요소들의 목록을 수정하고, 목록의 개별 요소들을 수정하지 않는다. 더욱이, 본 명세서에 개시된 요지의 실시 예들을 설명 할 때 "할 수 있는(may)"의 사용은 "본 개시의 하나 이상의 실시 예들"을 지칭한다. 또한, "예시적인(exemplary)"이라는 용어는 예시 또는 도시를 지칭하는 것으로 의도된다. 본 명세서에 사용 된 바와 같이, 용어들 "사용하다(use)", "사용하는(using)", 및 "사용된(used)"은 각각 용어들 "이용하다(utilize)", "이용하는(utilizing)", 및 "이용된(utilized)"과 동의어로 각각 간주될 수 있다.
요소 또는 레이어가 다른 요소 또는 레이어 "위에", "에 연결된", "에 결합된" 또는 "에 인접한" 것으로 언급될 때, 다른 요소 또는 레이어에 직접 연결되거나, 연결되거나, 결합되거나 또는 인접할 수 있거나, 하나 이상의 개재 요소 또는 레이어가 존재하는 것으로 이해할 수 있다. 대조적으로, 요소 또는 레이어가 다른 요소 또는 레이어 "위에 직접", "에 직접 연결되어", "에 직접 결합되어" 또는 "에 바로 인접한" 것으로 언급 될 때, 개재 요소 또는 레이어가 존재하지 않는다.
본 명세서에서 인용된 임의의 수치 범위는 인용된 범위 내에 포함된 동일한 수치 정밀도의 모든 서브-범위(sub-range)들을 포함하는 것으로 의도된다. 예를 들어, "1.0 내지 10.0"의 범위는 언급된 최소값 1.0과 언급된 최대값 10.0 사이의, 즉, 최소값이 1.0 이상이고 최대값이 10.0 이하의, 예를 들어, 2.4 내지 7.6의, 모든 서브 범위들을 포함하도록 의도된다. 여기서 인용된 임의의 최대 수치 제한은 그 안에 포함된 모든 하위 수치 제한을 포함하도록 의도되고,, 본 명세서에 인용된 임의의 최소 수치 제한은 그에 포함된 모든 더 높은 수치 제한을 포함하도록 의도된다.
일부 실시 예들은 다음의 넘버링된 절들의 제1 세트의 특징들을 포함한다.
제1 절. 프로세서가 제공된다. 상기 프로세서는 제1 타일(tile), 제2 타일, 메모리, 및 버스를 포함한다. 상기 버스는 상기 메모리, 상기 제1 타일 및 상기 제2 타일에 연결된다. 상기 버스는 상기 메모리, 상기 제1 타일, 및 상기 제2 타일에 연결된다. 상기 제1 타일는 제1 웨이트 레지스터, 제2 웨이트 레지스터, 활성화 버퍼, 제1 승산기, 및 제2 승산기를 포함한다. 상기 제1 타일은 웨이트 커널로 활성화 배열의 컨볼루션을 수행하도록 구성된다. 상기 컨볼루션을 수행하는 단계는 활성화 배열의 제1 서브 어레이와 상기 커널의 텐서 곱을 형성하는 단계, 활성화 어레이의 제2 서브 어레이와 상기 커널의 텐서 곱(tensor product)을 형성하는 단계, 및 활성화 어레이의 제3 서브 어레이와 상기 커널의 텐서 곱을 형성하는 단계를 순서대로 포함한다. 상기 제2 서브 어레이는 제1 방향으로 n 개의 요소에 의해 상기 제1 서브 어레이로부터 오프셋되고, n은 양의 정수이다. 상기 제3 서브 어레이는 상기 제1 방향과 수직하는 제2 방향으로 하나의 요소에 의해 상기 제2 서브 어레이로부터 오프셋된다.
제2 절. 상기 제1 절의 상기 프로세서에서, 상기 제3 서브 어레이를 이용하여 상기 커널의 텐서 곱을 형성 후, 상기 컨볼루션을 실행하는 단계는 상기 활성화 어레이의 제4 서브 어레이와 상기 커널의 텐서 곱을 형성하는 단계 및 활성화 어레이의 제5 서브 어레이와 상기 커널의 텐서 곱을 형성하는 단계를 순서대로 포함한다. 제4 서브 어레이는 제1 방향과 반대인 제3 방향으로 m 개의 어레이 요소들에 의해 제3 서브 어레이로부터 오프셋된다. m은 양의 정수이다. 제5 서브 어레이는 제2 방향으로 하나의 어레이 요소에 의해 제4 서브 어레이로부터 오프셋된다.
제3 절. 상기 제2 절의 상기 프로세서에서, m은 n과 같다.
제4 절. 상기 제3 절의 상기 프로세서에서, n은 1과 같다.
제5 절. 상기 제1 절의 상기 프로세서에서, 상기 제1 서브어레이와 상기 커널의 곱들을 형성하는 단계 이후, 상기 컨볼루션을 실행하는 단계는 활성화 어레이의 (n-1)개 각각의 서브 어레이로 커널의 (n-1) 곱들(products)을 형성하는 단계를 순서대로 더 포함한다. (n-1) 곱들 중 k번째 곱의 서브어레이는 첫 번째 방향에서 (k+1) 어레이요소에 의해 첫 번째 서브 어레이로부터 오프셋된다.
제6 절. 상기 제5 절의 상기 프로세서에서, 상기 프로세서는 상기 활성화 버퍼에 연결되고, 그리고 활성화 버퍼에 활성화를 공급하도록 구성된 캐시를 더 포함한다. 상기 캐시는 활성화들 "H+(H+n)*(W-1)-1"를 저장하기에 충분한 크기를 갖는다. H는 제1 방향의 커널의 크기이고, W는 제2 방향의 커널의 크기이다.
제7 절. 상기 제1 절의 상기 프로세서에서, 상기 활성화 버퍼는 제1 승산기에 연결된 제1 큐(queue) 및 제2 승산기에 연결된 제2 큐를 포함한다. 제1 큐는 제1 레지스터 및 제1 레지스터에 인접한 제2 레지스터를 포함한다. 제1 레지스터는 제1 큐의 출력 레지스터이다. 제1 타일은 제1 상태에서 제1 승산기에서 제1 큐의 출력 레지스터로부터의 활성화와 제1 웨이트를 곱하고, 제2 상태에서 제1 승산기에서 제1 웨이트를 제1 큐의 제2 레지스터로부터의 활성화에 의해 곱하도록 더 구성된다.
제8 절. 상기 제7 절의 상기 프로세서에서, 상기 제2 상태에서, 상기 제1 큐의 출력 레지스터는 제로(zero)를 포함한다.
제9 절. 상기 제7 절의 상기 프로세서에서, 상기 프로세서는 제1 가산기를 더 포함한다. 상기 제1 가산기는 상기 제1 상태에서 상기 제1 승산기의 출력과 상기 제2 승산기의 출력에 연결되고 상기 제1 승산기의 출력으로부터 수신된 곱 및 상기 제2 승산기의 출력으로부터 수신된 곱을 덧셈한다.
제10 절. 상기 제9 절의 상기 프로세서에서, 상기 프로세서는 제2 가산기를 더 포함한다. 상기 제2 가산기는 상기 제2 상태에서 상기 제1 승산기의 출력에 연결되도록 구성된다.
제11 절. 프로세싱 회로를 이용하여 계산하기 위한 방법이 제공된다. 상기 프로세싱 회로는 제1 타일, 제2 타일, 메모리, 및 버스를 포함한다. 상기 버스는 상기 메모리, 상기 제1 타일 및 상기 제2 타일에 연결된다. 상기 제1 타일은 제1 웨이트 레지스터, 제2 웨이트 레지스터, 활성화 버퍼, 제1 승산기, 및 제2 승산기를 포함한다. 상기 방법은 웨이트 커널과 활성화 배열의 컨볼루션을 수행하는 단계를 포함한다. 상기 컨볼루션을 수행하는 단계는 활성화 어레이의 제1 서브 어레이와 상기 커넬의 상기 텐서 곱을 형성하는 단계, 활성화 어레이의 제2 서브 어레이와상기 커널의 텐서 곱을 형성하는 단계, 및 활성화 어레이의 제3 서브 어레이와 상기 커널의 텐서 곱을 형성하는 단계를 순서대로 포함한다. 상기 제2 서브 어레이는 제1 방향으로 n 개의 요소에 의해 상기 제1 서브 어레이로부터 오프셋되고, n은 양의 정수이다. 상기 제3 서브 어레이는 상기 제1 방향과 수직하는 제2 방향으로 하나의 요소에 의해 상기 제2 서브 어레이로부터 오프셋된다.
제12 절. 상기 제11 절의 상기 방법에서, 상기 제3 서브 어레이와상기 커널의 텐서 곱을 형성한 후, 상기 컨볼루션을 실행하는 단계는 상기 활성화 어레이의 제4 서브 어레이와 상기 커널의 텐서 곱을 형성하는 단계 및 활성화 어레이의 제5 서브 어레이와 커널의 텐서 곱을 형성하는 단계를 순서대로 포함한다. 제4 서브 어레이는 제1 방향과 반대인 제3 방향으로 m 개의 어레이 요소만큼 제3 서브 어레이로부터 오프셋된다. m은 양의 정수이다. 제5 서브 어레이는 제2 방향으로 하나의 어레이 요소만큼 제4 서브 어레이로부터 오프셋된다.
제13 절. 상기 제12 절의 상기 방법에서, m은 n과 같다.
제14 절. 상기 제13 절의 상기 방법에서, n은 1과 같다.
제15 절. 상기 제11 절의 상기 방법에서, 상기 제1 서브어레이와 상기 커널의 곱들을 형성하는 단계 이후, 상기 컨볼루션을 실행하는 단계는 활성화 어레이의 (n-1)개 각각의 서브 어레이와 상기 커널의 (n-1)개의 곱들(products)을 형성하는 단계를 순서대로 더 포함한다. (n-1) 곱들 중 k번째 곱의 서브어레이는 첫 번째 방향에서 (k+1) 어레이요소만큼 첫 번째 서브 어레이로부터 오프셋된다.
제16 절. 상기 제15 절의 상기 방법에서, 상기 프로세싱 회로는 상기 활성화 버퍼에 연결되고, 그리고 활성화 버퍼에 활성화를 공급하도록 구성된 캐시를 더 포함한다. 상기 캐시는 활성화들 "H+(H+n)*(W-1)-1"를 저장하기에 충분한 크기를 갖는다. H는 제1 방향의 커널의 크기이고, W는 제2 방향의 커널의 크기이다.
제17 절. 상기 제11 절의 상기 방법에서, 상기 활성화 버퍼는 제1 승산기에 연결된 제1 큐(queue) 및 제2 승산기에 연결된 제2 큐를 포함한다. 제1 큐는 제1 레지스터 및 제1 레지스터에 인접한 제2 레지스터를 포함한다. 제1 레지스터는 제1 큐의 출력 레지스터이다. 제1 타일은 제1 상태에서 제1 승산기에서 제1 큐의 출력 레지스터로부터의 활성화와 제1 웨이트를 곱하고, 제2 상태에서 제1 승산기에서 제1 웨이트를 제1 큐의 제2 레지스터로부터의 활성화와 곱하도록 더 구성된다.
제18 절. 상기 제17 절의 상기 방법에서, 상기 제2 상태에서, 상기 제1 큐의 출력 레지스터은 제로를 포함한다.
제19 절. 상기 제17 절의 상기 방법에서, 상기 프로세싱 회로는 제1 가산기를 더 포함한다. 상기 방법은 상기 제1 상태에서 상기 제1 가산기를 상기 제1 승산기의 출력과 상기 제2 승산기의 출력에 연결하고, 상기 제1 가산기가 상기 제1 승산기의 출력으로부터 수신된 결과 및 상기 제2 승산기의 출력으로부터 수신된 결과를 덧셈하는 단계를 더 포함한다.
제20 절. 프로세싱을 위한 수단으로 계산하기 위한 방법이 제공된다. 프로세싱을 위한 상기 수단은 제1 타일, 제2 타일, 메모리, 및 버스를 포함한다. 상기 버스는 상기 메모리, 상기 제1 타일 및 상기 제2 타일에 연결된다. 상기 제1 타일은 제1 웨이트 레지스터, 제2 웨이트 레지스터, 활성화 버퍼, 제1 승산기, 및 제2 승산기를 포함한다. 상기 방법은 웨이트 커널과 활성화 배열의 컨볼루션을 수행하는 단계를 포함한다. 상기 컨볼루션을 수행하는 단계는 활성화 어레이의 제1 서브 어레이와 상기 커널의 상기 텐서 곱을 형성하는 단계, 활성화 어레이의 제2 서브 어레이와 상기 커널의 텐서 곱을 형성하는 단계, 및 활성화 어레이의 제3 서브 어레이와 상기 커널의 텐서 곱을 형성하는 단계를 순서대로 포함한다. 상기 제2 서브 어레이는 제1 방향으로 n 개의 요소만큼 상기 제1 서브 어레이로부터 오프셋되고, n은 양의 정수이다. 상기 제3 서브 어레이는 상기 제1 방향과 수직하는 제2 방향으로 하나의 요소만큼 상기 제2 서브 어레이로부터 오프셋된다.
일부 실시 예들은 다음의 넘버링된 절들의 제2 세트의 특징들을 포함한다.
제1 절. 프로세서가 제공된다. 상기 프로세서는 제1 타일, 제2 타일, 메모리 및 버스를 포함한다. 상기 버스는 상기 메모리, 상기 제1 타일, 및 상기 제2 타일에 연결된다. 상기 제1 타일은 제1 웨이트 레지스터, 제2 웨이트 레지스터, 활성화 버퍼, 제1 승산기, 및 제2 승산기를 포함한다. 상기 프로세서는 제1 커널 웨이트들과 활성화 어레이와의 제1 컨볼루션을 수행하도록 구성된다. 상기 제1 컨볼루션을 실행하는 단계는 상기 활성화 어레이의 제1 서브어레이를 상기 제1 타일 및 상기 제2 타일에게 브로드캐스팅하는 단계, 제1 텐서 곱을 형성하는 단계, 상기 메모리 내 상기 제1 텐서 곱을 저장하는 단계, 상기 활성화 어레이의 제2 서브어레이를 상기 제1 타일 및 상기 제2 타일에게 브로드캐스팅하는 단계, 및 제2 텐서 곱을 형성하는 단계를 포함한다. 상기 제1 텐서 곱은 상기 활성화 어레이의 상기 제1 서브 어레이와 상기 제1 커널 웨이트들의 제1 서브 어레이의 텐서 곱이다. 상기 제2 텐서 곱은 상기 활성화 어레이의 상기 제2 서브 어레이와 상기 제1 커널 웨이트들의 제2 서브 어레이의 텐서 곱이다.
제2 절. 상기 제1 절의 상기 프로세서에서, 상기 제1 타일은 복수의 웨이트들이 압축된 형태로 인코딩된 데이터 워드를 압축 해제하여, 제1 웨이트 및 제2 웨이트를 추출하고, 제1 웨이트를 제1 웨이트 레지스터에 피드(feed)하고, 그리고 제2 웨이트를 제2 웨이트 레지스터에 피드하도록 구성된 웨이트 압축 해제 유닛을 더 포함한다.
제3 절. 상기 제1 절의 상기 프로세서에서, 제1 타일은 또한 제2 커널 웨이트들과 활성화 어레이의 제2 컨볼루션을 수행하도록 더 구성된다. 상기 제2 컨볼루션을 수행하는 단계는 활성화 어레이의 제1 서브 어레이와 제2 커널의 제1 부분의 텐서 곱을 형성하는 단계, 활성화 어레이의 제1 서브 어레이와 제2 커널의 제2 부분의 텐서 곱을 형성하는 단계, 및 활성화 어레이의 제2 서브 어레이와 제2 커널의 제1 부분의 텐서 곱을 형성하는 단계를 순서대로 포함한다. 제2 커널의 제1 부분은 제1 웨이트 레지스터에 저장된 웨이트를 포함하고, 제2 커널의 제2 부분은 제2 웨이트 레지스터에 저장된 웨이트를 포함하고, 그리고 상기 제2 커널의 제1 부분은 제1 웨이트 레지스터에 저장된 웨이트를 포함한다.
제4 절. 상기 제1 절의 상기 프로세서에서, 상기 활성화 버퍼는 제1 승산기에 연결된 제1 큐(queue) 및 제2 승산기에 연결된 제2 큐를 포함한다. 제1 큐는 제1 레지스터 및 제1 레지스터에 인접한 제2 레지스터를 포함한다. 제1 레지스터는 제1 큐의 출력 레지스터이다. 제1 타일은 제1 상태에서 제1 승산기에서 제1 큐의 출력 레지스터로부터의 활성화와 제1 웨이트를 곱하고, 제2 상태에서 제1 승산기에서 제1 웨이트를 제1 큐의 제2 레지스터로부터의 활성화와 곱하도록 더 구성된다.
제5 절. 상기 제4 절의 상기 프로세서에서, 상기 제2 상태에서, 상기 제1 큐의 출력 레지스터는 제로를 포함한다.
제6 절. 상기 제4 절의 상기 프로세서에서, 상기 프로세서는 제1 가산기를 더 포함한다. 상기 제1 가산기는 상기 제1 상태에서 상기 제1 승산기의 출력과 상기 제2 승산기의 출력에 상기 제1 큐에서 연결되고 상기 제1 승산기의 출력으로부터 수신된 결과 및 상기 제2 승산기의 출력으로부터 수신된 결과를 덧셈한다.
제7 절. 상기 제6 절의 상기 프로세서에서, 상기 프로세서는 제2 가산기를 더 포함한다. 상기 제2 가산기는 상기 제2 상태에서 상기 제1 승산기의 출력에 연결되도록 구성된다.
제8 절. 상기 제7 절의 상기 프로세서에서, 상기 프로세서는 제1 가산기에 연결된 제1 누산기(accumulator)와, 제2 가산기에 연결된 제2 누산기를 더 포함한다. 제1 누산기는 레지스터를 포함한다. 제1 상태에서, 상기 제1 누산기는 상기 제1 가산기로부터 수신된 합계를 상기 제1 누산기의 레지스터의 값에 더하고, 제1 누산기의 누적된 값을 형성하고, 그리고 제1 누산기의 레지스터에 제1 누산기의 누적된 값을 저장한다.
제9 절. 상기 제8 절의 상기 프로세서에서, 제2 누산기는 레지스터를 포함한다. 제2 상태에서, 상기 제2 누산기는 상기 제2 가산기로부터 수신된 합계를 상기 제2 누산기의 레지스터의 값에 더하고, 제2 누산기의 누적된 값을 형성하고, 그리고 제2 누산기의 레지스터에 제2 누산기의 누적된 값을 저장한다.
제10 절. 상기 제8 절의 상기 프로세서에서, 상기 프로세서는 제1 큐의 출력 레지스터가 제로를 포함하는지 여부를 결정하고, 제1 큐의 출력 레지스터가 제로를 포함한다는 결정에 응답하여, 제1 타일이 제2 상태에서 동작하게 하는 활성화 제로 스킵 제어 회로를 더 포함한다.
제11 절. 프로세싱 회로로 계산하는 방법이 제공된다. 상기 프로세싱 회로는 제1 타일, 제2 타일, 메모리 및 버스를 포함한다. 상기 버스는 상기 메모리, 상기 제1 타일, 및 상기 제2 타일에 연결된다. 상기 제1 타일은 제1 버퍼 모듈, 제2 버퍼 모듈, 활성화 버퍼, 제1 승산기, 및 제2 승산기를 포함한다. 상기 방법은 제1 커널웨이트들과 활성화 어레이의 제1 컨볼루션을 수행하도록 구성된다. 상기 제1 컨볼루션을 실행하는 단계는 상기 활성화 어레이의 제1 서브어레이를 상기 제1 타일 및 상기 제2 타일에게 브로드캐스팅하는 단계, 제1 텐서 곱을 형성하는 단계, 상기 메모리 내 상기 제1 텐서 곱을 저장하는 단계, 상기 활성화 어레이의 제2 서브어레이를 상기 제1 타일 및 상기 제2 타일에게 브로드캐스팅하는 단계, 제2 텐서 곱을 형성하는 단계, 및 제1 텐서 곱과 제2 텐서 곱을 합하는 단계를 포함한다. 상기 제1 텐서 곱은 상기 활성화 어레이의 상기 제1 서브 어레이와 제1 커널 웨이트들의 제1 서브 어레이의 텐서 곱이다. 상기 제2 텐서 곱은 상기 활성화 어레이의 상기 제2 서브 어레이와 제1 커널 웨이트들의 제2 서브 어레이의 텐서 곱이다.
제12 절. 상기 제11 절의 상기 방법에서, 상기 제1 타일은 웨이트 압축 해제 유닛을 더 포함한다. 상기 방법은 상기 웨이트 압축 해제 유닛이 복수의 웨이트들이 압축된 형태로 인코딩된 데이터 워드를 압축 해제하여, 제1 웨이트 및 제2 웨이트를 추출하는 단계, 제1 웨이트를 제1 웨이트 레지스터에 피드하는 단계, 그리고 제2 웨이트를 제2 웨이트 레지스터에 피드하는 단계를 더 포함한다.
제13 절. 상기 제11 절의 상기 방법에서, 상기 방법은 웨이트들의 제2 커널과 활성화 어레이의 제2 컨볼루션을 수행하는 단계를 더 포함한다. 상기 제2 컨볼루션을 수행하는 단계는 활성화 어레이의 제1 서브 어레이와 제2 커널의 제1 부분의 텐서 곱을 형성하는 단계, 활성화 어레이의 제1 서브 어레이와 제2 커널의 제2 부분의 텐서 곱을 형성하는 단계, 및 활성화 어레이의 제2 서브 어레이와 제2 커널의 제1 부분의 텐서 곱을 형성하는 단계를 순서대로 포함한다. 제2 커널의 제1 부분은 제1 웨이트 레지스터에 저장된 웨이트를 포함하고, 제2 커널의 제2 부분은 제2 웨이트 레지스터에 저장된 웨이트를 포함하고, 그리고 상기 제2 커널의 제1 부분은 제1 웨이트 레지스터에 저장된 웨이트를 포함한다.
제14 절. 상기 제11 절의 상기 방법에서, 상기 활성화 버퍼는 제1 승산기에 연결된 제1 큐(queue) 및 제2 승산기에 연결된 제2 큐를 포함한다. 제1 큐는 제1 레지스터 및 제1 레지스터에 인접한 제2 레지스터를 포함한다. 제1 레지스터는 제1 큐의 출력 레지스터이다. 제1 타일은 제1 상태에서 제1 승산기에서 제1 큐의 출력 레지스터로부터의 활성화와 제1 웨이트를 곱하고, 제2 상태에서 제1 승산기에서 제1 웨이트와 제1 큐의 제2 레지스터로부터의 활성화를 곱하도록 더 구성된다.
제15 절. 상기 제14 절의 상기 방법에서, 상기 제2 상태에서, 상기 제1 큐의 출력 레지스터는 제로를 포함한다.
제16 절. 상기 제14 절의 상기 방법에서, 상기 프로세싱 회로는 제1 가산기를 더 포함한다. 상기 방법은 상기 제1 상태에서 상기 제1 가산기를 상기 제1 승산기의 출력과 상기 제2 승산기의 출력에 상기 제1 큐에서 연결하는 단계 및 상기 제1 가산기가 상기 제1 승산기의 출력으로부터 수신된 결과 및 상기 제2 승산기의 출력으로부터 수신된 결과를 덧셈하는 단계를 더 포함한다.
제17 절. 상기 제16 절의 상기 방법에서, 상기 프로세싱 회로는 제2 가산기를 더 포함한다. 상기 방법은 상기 제2 상태에서 상기 제2 가산기를 상기 제1 승산기의 출력에 연결하는 단계를 더 포함한다.
제18 절. 상기 제17 절의 상기 방법에서, 상기 프로세싱 회로는 제1 가산기에 연결된 제1 누산기(accumulator)와, 제2 가산기에 연결된 제2 누산기를 더 포함한다. 제1 누산기는 레지스터를 포함한다. 상기 방법은, 제1 상태에서, 상기 제1 누산기가 상기 제1 가산기로부터 수신된 합계를 상기 제1 누산기의 레지스터의 값에 더하는 단계, 제1 누산기의 누적된 값을 형성하는 단계, 그리고 상기 제1 누산기가 제1 누산기의 레지스터에 제1 누산기의 누적된 값을 저장하는 단계를 더 포함한다.
제19 절. 상기 제18 절의 상기 방법에서, 제2 누산기는 레지스터를 포함한다. 상기 방법은, 제2 상태에서, 상기 제2 누산기가 상기 제2 가산기로부터 수신된 합계를 상기 제2 누산기의 레지스터의 값에 더하는 단계, 제2 누산기의 누적된 값을 형성하는 단계, 그리고 상기 제2 누산기가 제2 누산기의 레지스터에 제2 누산기의 누적된 값을 저장하는 단계를 더 포함한다.
제20 절. 프로세싱을 위한 수단을 이용하여 계산하는 방법이 제공된다. 상기 프로세싱을 위한 수단은 제1 타일, 제2 타일, 메모리 및 버스를 포함한다. 상기 버스는 상기 메모리, 상기 제1 타일, 및 상기 제2 타일에 연결된다. 상기 제1 타일은 제1 버퍼 모듈, 제2 버퍼 모듈, 활성화 버퍼, 제1 승산기, 및 제2 승산기를 포함한다. 상기 방법은 제1 커널 웨이트들과 활성화 어레이의 제1 컨볼루션을 수행하도록 구성된다. 상기 제1 컨볼루션을 실행하는 단계는 상기 활성화 어레이의 제1 서브어레이를 상기 제1 타일 및 상기 제2 타일에게 브로드캐스팅하는 단계, 제1 텐서 곱을 형성하는 단계, 상기 메모리 내 상기 제1 텐서 곱을 저장하는 단계, 상기 활성화 어레이의 제2 서브어레이를 상기 제1 타일 및 상기 제2 타일에게 브로드캐스팅하는 단계, 제2 텐서 곱을 형성하는 단계, 및 상기 제1 텐서 곱과 상기 제2 텐서 곱을 합하는 단계를 포함한다. 상기 제1 텐서 곱은 상기 활성화 어레이의 상기 제1 서브 어레이와 제1 커널 웨이트들의 제1 서브 어레이의 텐서 곱이다. 상기 제2 텐서 곱은 상기 활성화 어레이의 상기 제2 서브 어레이와 제1 커널 웨이트들의 제2 서브 어레이의 텐서 곱이다.
일부 실시 예들은 다음의 넘버링된 절들의 제3 세트의 특징들을 포함한다.
제1 절. 프로세서가 제공된다. 상기 프로세서는 제1 타일, 제2 타일, 메모리, 입력 버스 및 출력 버스를 포함한다. 상기 입력 버스는 메모리, 제1 타일 및 제2 타일에 연결된다. 상기 제1 타일은 제1 웨이트 레지스터, 제2 웨이트 레지스터, 활성화 버퍼, 제1 승산기 및 제2 승산기를 포함한다. 상기 제1 타일은 웨이트들의 커널로 활성화들의 어레이의 제1 컨볼루션을 수행하도록 구성된다. 상기 메모리는 제1 메모리 뱅크 세트 및 제2 메모리 뱅크 세트를 포함한다. 상기 입력 버스는 제1 방향으로 데이터를 전파하기 위한 제1 세그먼트 버스 및 제1 방향과 반대 방향인 제2 방향으로 데이터를 전파하기 위한 제2 세그먼트 버스를 포함한다. 상기 제1 세그먼트 버스는 제1 스위치 블록 및 제2 스위치 블록을 포함한다. 상기 제1 스위치 블록은 제1 타일 및 제1 메모리 뱅크 세트에 연결된다. 상기 제2 스위치 블록은 제2 타일 및 제2 메모리 뱅크 세트에 연결된다. 상기 제2 세그먼트 버스는 제3 스위치 블록 및 제4 스위치 블록을 포함한다. 상기 제3 스위치 블록은 제1 타일 및 제1 메모리 뱅크 세트에 연결된다. 상기 제4 스위치 블록은 제2 타일 및 제2 메모리 뱅크 세트에 연결된다. 상기 제1 스위치 블록의 입력은 제2 스위치 블록의 출력에 연결된다. 상기 제3 스위치 블록의 출력은 제4 스위치 블록의 입력에 연결된다.
제2 절. 상기 제1 절의 상기 프로세서에서, 제1 버스 상태에서, 제1 세그먼트 버스는 제1 메모리 뱅크 세트를 제1 스위치 블록을 통해 제1 타일에 연결하고, 제2 스위치 블록을 통해 제2 메모리 뱅크 세트를 제2 타일에 연결하도록 구성된다.
제3 절. 상기 제2 절의 상기 프로세서에서, 제2 버스 상태에서, 제1 세그먼트 버스는 제2 메모리 뱅크 세트를 제1 스위치 블록과 제2 스위치 블록을 통해 제1 타일에 연결하고, 제2 스위치 블록을 통해 제2 메모리 뱅크 세트를 제2 타일에 연결하도록 더 구성된다.
제4 절. 상기 제1 절의 상기 프로세서에서, 상기 활성화 버퍼는 제1 승산기에 연결된 제1 큐(queue) 및 제2 승산기에 연결된 제2 큐를 포함한다. 제1 큐는 제1 레지스터 및 제1 레지스터에 인접한 제2 레지스터를 포함한다. 제1 레지스터는 제1 큐의 출력 레지스터이다. 제1 타일은 제1 상태에서 제1 승산기에서 제1 큐의 출력 레지스터로부터의 활성화와 제1 웨이트를 곱하고, 제2 상태에서 제1 승산기에서 제1 웨이트를 제1 큐의 제2 레지스터로부터의 활성화와 곱하도록 더 구성된다.
제5 절. 상기 제4 절의 상기 프로세서에서, 상기 제2 상태에서, 상기 제1 큐의 출력 레지스터는 제로를 포함한다.
제6 절. 상기 제4 절의 상기 프로세서에서, 상기 프로세서는 제1 가산기를 더 포함한다. 상기 제1 가산기는 제1 상태에서 상기 제1 승산기의 출력과 상기 제2 승산기의 출력에 연결되고 상기 제1 승산기의 출력으로부터 수신된 곱 및 상기 제2 승산기의 출력으로부터 수신된 곱을 덧셈한다.
제7 절. 상기 제6 절의 상기 프로세서에서, 상기 프로세서는 제2 가산기를 더 포함한다. 상기 제2 가산기는 상기 제2 상태에서 상기 제1 승산기의 출력에 연결되도록 구성된다.
제8 절. 상기 제7 절의 상기 프로세서에서, 상기 프로세서는 제1 가산기에 연결된 제1 누산기(accumulator)와, 제2 가산기에 연결된 제2 누산기를 더 포함한다. 제1 누산기는 레지스터를 포함한다. 제1 상태에서, 상기 제1 누산기는 상기 제1 가산기로부터 수신된 합계를 상기 제1 누산기의 레지스터의 값에 더하고, 제1 누산기의 누적된 값을 형성하고, 그리고 제1 누산기의 레지스터에 제1 누산기의 누적된 값을 저장한다.
제9 절. 상기 제8 절의 상기 프로세서에서, 제2 누산기는 레지스터를 포함한다. 제2 상태에서, 상기 제2 누산기는 상기 제2 가산기로부터 수신된 합계를 상기 제2 누산기의 레지스터의 값에 더하고, 제2 누산기의 누적된 값을 형성하고, 그리고 제2 누산기의 레지스터에 제2 누산기의 누적된 값을 저장한다.
제10 절. 상기 제8 절의 상기 프로세서에서, 상기 프로세서는 제1 큐의 출력 레지스터가 제로를 포함하는지 여부를 결정하고, 제1 큐의 출력 레지스터가 제로를 포함한다는 결정에 응답하여, 제1 타일이 제2 상태에서 동작하게 하는 활성화 제로 스킵 제어 회로를 더 포함한다.
제11 절. 상기 제10 절의 상기 프로세서에서, 상기 프로세서는 멀티플렉서(multiplexer)를 더 포함한다. 상기 멀티플렉서는 멀티플렉서의 단일 포트 측에서 제1 승산기에 연결된 입력을 가지며, 멀티플렉서의 멀티 포트 측에서 제1 가산기에 연결된 제1 출력을 가지며, 그리고 멀티플렉서의 멀티 포트 측에서 제2 가산기에 연결된 제2 출력을 갖는다.
제12 절. 프로세싱 회로로 계산하는 방법이 제공된다. 상기 프로세싱 회로는 제1 타일, 제2 타일, 메모리, 입력 버스 및 출력 버스를 포함한다. 상기 입력 버스는 메모리, 제1 타일 및 제2 타일에 연결된다. 상기 제1 타일은 제1 웨이트 레지스터, 제2 웨이트 레지스터, 활성화 버퍼, 제1 승산기 및 제2 승산기를 포함한다. 상기 제1 타일은 웨이트들의 커널로 활성화들의 어레이의 제1 컨볼루션을 수행하도록 구성된다. 상기 메모리는 제1 메모리 뱅크 세트 및 제2 메모리 뱅크 세트를 포함한다. 상기 입력 버스는 제1 방향으로 데이터를 전파하기 위한 제1 세그먼트 버스 및 제1 방향과 반대 방향인 제2 방향으로 데이터를 전파하기 위한 제2 세그먼트 버스를 포함한다. 상기 제1 세그먼트 버스는 제1 스위치 블록 및 제2 스위치 블록을 포함한다. 상기 제1 스위치 블록은 제1 타일 및 제1 메모리 뱅크 세트에 연결된다. 상기 제2 스위치 블록은 제2 타일 및 제2 메모리 뱅크 세트에 연결된다. 상기 제2 세그먼트 버스는 제3 스위치 블록 및 제4 스위치 블록을 포함한다. 상기 제3 스위치 블록은 제1 타일 및 제1 메모리 뱅크 세트에 연결된다. 상기 제4 스위치 블록은 제2 타일 및 제2 메모리 뱅크 세트에 연결된다. 상기 제1 스위치 블록의 입력은 제2 스위치 블록의 출력에 연결된다. 상기 제1 스위치 블록의 입력은 제2 스위치 블록의 출력에 연결된다. 상기 제3 스위치 블록의 출력은 제4 스위치 블록의 입력에 연결된다. 상기 방법은, 제1 버스 상태에서, 제1 스위치 블록에 의해 제1 타일에 제1 메모리 뱅크 세트를 연결하는 단계 및 제2 스위치 블록에 의해 제2 메모리 뱅크 세트를 제2 타일에 연결하는 단계를 포함한다.
제13 절. 상기 제12 절의 상기 방법에서, 제2 버스 상태에서, 제1 스위치 블록 및 제2 스위치 블록에 의해, 제1 타일로 제2 메모리 뱅크 세트를 연결하는 단계 및 제2 스위치 블록에 의해 제2 메모리 뱅크 세트를 두 번째 타일로 연결하는 단계를 더 포함한다.
제14 절. 상기 제12 절의 상기 방법에서, 상기 활성화 버퍼는 제1 승산기에 연결된 제1 큐(queue) 및 제2 승산기에 연결된 제2 큐를 포함한다. 제1 큐는 제1 레지스터 및 제1 레지스터에 인접한 제2 레지스터를 포함한다. 제1 레지스터는 제1 큐의 출력 레지스터이다. 제1 타일은 제1 상태에서 제1 승산기에서 제1 큐의 출력 레지스터로부터의 활성화에 의해 제1 웨이트를 곱하고, 제2 상태에서 제1 승산기에서 제1 웨이트를 제1 큐의 제2 레지스터로부터의 활성화에 의해 곱하도록 더 구성된다.
제15 절. 상기 제14 절의 상기 방법에서, 상기 제2 큐에서, 상기 제1 큐의 출력은 제로를 포함한다.
제16 절. 상기 제14 절의 상기 방법에서, 상기 프로세싱 회로는 제1 가산기를 더 포함한다. 상기 방법은 상기 제1 가산기를 상기 제1 승산기의 출력과 상기 제2 승산기의 출력에 상기 제1 큐에서 연결하는 단계 및 상기 제1 가산기가 상기 제1 승산기의 출력으로부터 수신된 결과 및 상기 제2 승산기의 출력으로부터 수신된 결과를 덧셈하는 단계를 더 포함한다.
제17 절. 상기 제16 절의 상기 방법에서, 상기 프로세싱 회로는 제2 가산기를 더 포함한다. 상기 방법은 상기 제2 상태에서 상기 제2 가산기를 상기 제1 승산기의 출력에 연결하는 단계를 더 포함한다.
제18 절. 상기 제17 절의 상기 방법에서, 상기 프로세싱 회로는 제1 가산기에 연결된 제1 누산기(accumulator)와, 제2 가산기에 연결된 제2 누산기를 더 포함한다. 제1 누산기는 레지스터를 포함한다. 상기 방법은, 제1 상태에서, 상기 제1 누산기가 상기 제1 가산기로부터 수신된 합계를 상기 제1 누산기의 레지스터의 값에 더하는 단계, 제1 누산기의 누적된 값을 형성하는 단계, 그리고 상기 제1 누산기가 제1 누산기의 레지스터에 제1 누산기의 누적된 값을 저장하는 단계를 더 포함한다.
제19 절. 상기 제18 절의 상기 방법에서, 제2 누산기는 레지스터를 포함한다. 상기 방법은, 제2 상태에서, 상기 제2 누산기가 상기 제2 가산기로부터 수신된 합계를 상기 제2 누산기의 레지스터의 값에 더하는 단계, 제2 누산기의 누적된 값을 형성하는 단계, 그리고 상기 제2 누산기가 제2 누산기의 레지스터에 제2 누산기의 누적된 값을 저장하는 단계를 더 포함한다.
제20 절. 프로세싱을 위한 수단을 이용하여 계산하는 방법이 제공된다. 상기 프로세싱을 위한 수단은 제1 타일, 제2 타일, 메모리, 입력 버스 및 출력 버스를 포함한다. 상기 입력 버스는 메모리, 제1 타일 및 제2 타일에 연결된다. 상기 제1 타일은 제1 웨이트 레지스터, 제2 웨이트 레지스터, 활성화 버퍼, 제1 승산기 및 제2 승산기를 포함한다. 상기 제1 타일은 웨이트들의 커널로 활성화들의 어레이의 제1 컨볼루션을 수행하도록 구성된다. 상기 메모리는 제1 메모리 뱅크 세트 및 제2 메모리 뱅크 세트를 포함한다. 상기 입력 버스는 제1 방향으로 데이터를 전파하기 위한 제1 세그먼트 버스 및 제1 방향과 반대 방향인 제2 방향으로 데이터를 전파하기 위한 제2 세그먼트 버스를 포함한다. 상기 제1 세그먼트 버스는 제1 스위치 블록 및 제2 스위치 블록을 포함한다. 상기 제1 스위치 블록은 제1 타일 및 제1 메모리 뱅크 세트에 연결된다. 상기 제2 스위치 블록은 제2 타일 및 제2 메모리 뱅크 세트에 연결된다. 상기 제2 세그먼트 버스는 제3 스위치 블록 및 제4 스위치 블록을 포함한다. 상기 제3 스위치 블록은 제1 타일 및 제1 메모리 뱅크 세트에 연결된다. 상기 제4 스위치 블록은 제2 타일 및 제2 메모리 뱅크 세트에 연결된다. 상기 제1 스위치 블록의 입력은 제2 스위치 블록의 출력에 연결된다. 상기 제3 스위치 블록의 출력은 제4 스위치 블록의 입력에 연결된다. 상기 방법은 제1 버스 상태에서, 제1 스위치 블록에 의해 제1 타일에 설정된 제1 메모리 뱅크를 연결하는 단계 및 제2 스위치 블록에 의해 제2 메모리 뱅크를 제2 타일에 연결하는 단계를 포함한다.
뉴럴 프로세서의 예시적인 실시 예들이 본 명세서에서 구체적으로 설명되고 예시되었지만, 많은 수정들 및 변형들이 본 발명이 속한 기술 분야에서의 통상의 가술자들에게 명백할 것이다. 따라서, 본 개시의 원리에 따라 구성된 뉴럴 프로세서는 본 명세서에서 구체적으로 설명된 것과 다르게 구현될 수 있음을 이해해야 한다. 또한, 본 발명은 다음의 청구 범위, 및 그것들의 균등한 범위들 내에서 정의된다.

Claims (20)

  1. 제1 타일(tile);
    제2 타일;
    메모리; 및
    버스를 포함하되,
    상기 버스는:
    상기 메모리;
    상기 제1 타일; 및
    상기 제2 타일에 연결되고,
    상기 제1 타일은:
    제1 웨이트(weight) 레지스터;
    제2 웨이트 레지스터;
    활성화 버퍼;
    제1 승산기; 및
    제2 승산기를 포함하고,
    상기 활성화 버퍼는:
    상기 제1 승산기와 연결된 제1 큐(queue); 및
    상기 제2 승산기와 연결된 제2 큐를 포함하도록 구성되고,
    상기 제1 큐는 제1 레지스터 및 상기 제1 레지스터와 인접한 제2 레지스터를 포함하고, 상기 제1 레지스터는 상기 제1 큐의 출력 레지스터이고,
    상기 제1 타일은:
    제1 상태에서, 상기 제1 승산기에서, 제1 웨이트에 상기 제1 큐의 상기 출력 레지스터로부터의 활성화를 곱하고, 그리고
    제2 상태에서, 상기 제1 승산기에서, 상기 제1 웨이트에 상기 제1 큐의 상기 제2 레지스터로부터의 활성화를 곱하도록 구성된 프로세서.
  2. 제 1 항에 있어서,
    상기 제2 상태에서, 상기 제1 큐의 상기 출력 레지스터는 제로(zero)를 포함하는 프로세서.
  3. 제 1 항에 있어서,
    제1 가산기를 더 포함하되,
    상기 제1 가산기는, 상기 제1 상태에서:
    상기 제1 승산기의 출력 및 상기 제2 승산기의 출력과 연결되고, 그리고
    상기 제1 승산기의 상기 출력으로부터 수신된 곱 및 상기 제2 승산기의 상기 출력으로부터 수신된 곱을 더하도록 구성된 프로세서.
  4. 제 3 항에 있어서,
    상기 제2 상태에서, 상기 제1 승산기의 상기 출력과 연결되도록 구성된 제2 가산기를 더 포함하는 프로세서.
  5. 제 4 항에 있어서,
    상기 제1 가산기와 연결된 제1 누산기(accumulator); 및
    상기 제2 가산기와 연결된 제2 누산기를 더 포함하되,
    상기 제1 누산기는 레지스터를 포함하고 그리고 상기 제1 상태에서:
    상기 제1 가산기로부터 수신된 합계를 상기 제1 누산기의 상기 레지스터 내의 값에 더하여, 상기 제1 누산기의 누적된 값을 형성하고, 그리고
    상기 제1 누산기의 상기 레지스터에 상기 제1 누산기의 상기 누적된 값을 저장하도록 구성된 프로세서.
  6. 제 5 항에 있어서,
    상기 제2 누산기는 레지스터를 포함하고 그리고 상기 제2 상태에서:
    상기 제2 가산기로부터 수신된 합계를 상기 제2 누산기의 상기 레지스터 내의 값에 더하여, 상기 제2 누산기의 누적된 값을 형성하고, 그리고
    상기 제2 누산기의 상기 레지스터에 상기 제2 누산기의 상기 누적된 값을 저장하도록 구성된 프로세서.
  7. 제 5 항에 있어서,
    활성화 제로 스킵 제어 회로를 더 포함하되,
    상기 활성화 제로 스킵 제어 회로는:
    상기 제1 큐의 상기 출력 레지스터가 제로를 포함하는지 여부를 결정하고, 그리고
    상기 제1 큐의 상기 출력 레지스터가 제로를 포함한다고 결정한 것에 응답하여, 상기 제1 타일이 상기 제2 상태에서 동작하게 하도록 구성된 프로세서.
  8. 제 7 항에 있어서,
    멀티플렉서를 더 포함하되,
    상기 멀티플렉서는:
    상기 멀티플렉서의 단일 포트 측에서, 상기 제1 승산기에 연결된 입력;
    상기 멀티플렉서의 멀티 포트 측에서, 상기 제1 가산기에 연결된 제1 출력; 및
    상기 멀티플렉서의 상기 멀티 포트 측에서, 상기 제2 가산기에 연결된 제2 출력을 포함하는 프로세서.
  9. 제 8 항에 있어서,
    상기 활성화 제로 스킵 제어 회로는:
    상기 제1 상태에서, 상기 입력을 상기 제1 출력으로 연결하도록 상기 멀티플렉서를 제어하고, 그리고
    상기 제2 상태에서, 상기 입력을 상기 제2 출력으로 연결하도록 상기 멀티플렉서를 제어하도록 구성된 프로세서.
  10. 제 1 항에 있어서,
    상기 제2 큐는 제1 레지스터 및 상기 제1 레지스터에 인접한 제2 레지스터를 포함하고, 상기 제1 레지스터는 상기 제2 큐의 출력 레지스터이고, 그리고
    상기 제1 타일은, 제3 상태에서, 상기 제1 승산기에서, 상기 제1 웨이트에 상기 제2 큐의 상기 제2 레지스터로부터의 활성화를 곱하도록 구성된 프로세서.
  11. 프로세싱 회로의 계산하는 방법에 있어서, 상기 프로세싱 회로는:
    제1 타일(tile);
    제2 타일;
    메모리; 및
    버스를 포함하고,
    상기 버스는:
    상기 메모리;
    상기 제1 타일; 및
    상기 제2 타일에 연결되고,
    상기 제1 타일은:
    제1 웨이트(weight) 레지스터;
    제2 웨이트 레지스터;
    활성화 버퍼;
    제1 승산기; 및
    제2 승산기를 포함하고,
    상기 활성화 버퍼는:
    상기 제1 승산기와 연결된 제1 큐(queue); 및
    상기 제2 승산기와 연결된 제2 큐를 포함하도록 구성되고,
    상기 제1 큐는 제1 레지스터 및 상기 제1 레지스터와 인접한 제2 레지스터를 포함하고, 상기 제1 레지스터는 상기 제1 큐의 출력 레지스터이고,
    상기 방법은:
    제1 상태에서, 상기 제1 승산기에 의해, 제1 웨이트에 상기 제1 큐의 상기 출력 레지스터로부터의 활성화를 곱하는 단계; 및
    제2 상태에서, 상기 제1 승산기에 의해, 상기 제1 웨이트에 상기 제1 큐의 상기 제2 레지스터로부터의 활성화를 곱하는 단계를 포함하는 방법.
  12. 제 11 항에 있어서,
    상기 제2 상태에서, 상기 제1 큐의 상기 출력 레지스터는 제로(zero)를 포함하는 방법.
  13. 제 11 항에 있어서,
    상기 프로세싱 회로는 제1 가산기를 더 포함하고,
    상기 방법은, 상기 제1 상태에서:
    상기 제1 가산기를 상기 제1 승산기의 출력 및 상기 제2 승산기의 출력과 연결하는 단계; 및
    상기 제1 가산기에 의해, 상기 제1 승산기의 상기 출력으로부터 수신된 곱 및 상기 제2 승산기의 상기 출력으로부터 수신된 곱을 더하는 단계를 더 포함하는 방법.
  14. 제 13 항에 있어서,
    상기 프로세싱 회로는 제2 가산기를 더 포함하고,
    상기 방법은, 상기 제2 상태에서, 상기 제2 가산기를 상기 제1 승산기의 상기 출력과 연결하는 단계를 더 포함하는 방법.
  15. 제 14 항에 있어서,
    상기 프로세싱 회로는:
    상기 제1 가산기와 연결된 제1 누산기(accumulator); 및
    상기 제2 가산기와 연결된 제2 누산기를 더 포함하고,
    상기 제1 누산기는 레지스터를 포함하고,
    상기 방법은, 상기 제1 상태에서:
    상기 제1 누산기에 의해, 상기 제1 가산기로부터 수신된 합계를 상기 제1 누산기의 상기 레지스터 내의 값에 더하여, 상기 제1 누산기의 누적된 값을 형성하는 단계; 및
    상기 제1 누산기에 의해, 상기 제1 누산기의 상기 레지스터에 상기 제1 누산기의 상기 누적된 값을 저장하는 단계를 더 포함하는 방법.
  16. 제 15 항에 있어서,
    상기 제2 누산기는 레지스터를 포함하고,
    상기 방법은, 상기 제2 상태에서:
    상기 제2 누산기에 의해, 상기 제2 가산기로부터 수신된 합계를 상기 제2 누산기의 상기 레지스터 내의 값에 더하여, 상기 제2 누산기의 누적된 값을 형성하는 단계; 및
    상기 제2 누산기에 의해, 상기 제2 누산기의 상기 레지스터에 상기 제2 누산기의 상기 누적된 값을 저장하는 단계를 더 포함하는 방법.
  17. 제 15 항에 있어서,
    상기 프로세싱 회로는 활성화 제로 스킵 제어 회로를 더 포함하고,
    상기 방법은:
    상기 활성화 제로 스킵 제어 회로에 의해, 상기 제1 큐의 상기 출력 레지스터가 제로를 포함하는지 여부를 결정하는 단계; 및
    상기 제1 큐의 상기 출력 레지스터가 제로를 포함한다고 결정한 것에 응답하여, 상기 제1 타일이 상기 제2 상태에서 동작하게 하는 단계를 포함하는 방법.
  18. 제 17 항에 있어서,
    상기 프로세싱 회로는 멀티플렉서를 더 포함하고,
    상기 멀티플렉서는:
    상기 멀티플렉서의 단일 포트 측에서, 상기 제1 승산기에 연결된 입력;
    상기 멀티플렉서의 멀티 포트 측에서, 상기 제1 가산기에 연결된 제1 출력; 및
    상기 멀티플렉서의 상기 멀티 포트 측에서, 상기 제2 가산기에 연결된 제2 출력을 포함하는 방법.
  19. 제 18 항에 있어서,
    상기 활성화 제로 스킵 제어 회로에 의해, 상기 멀티플렉서를 제어하는 단계를 더 포함하고,
    상기 멀티플렉서는:
    상기 제1 상태에서, 상기 입력을 상기 제1 출력으로 연결하도록 제어되고, 그리고
    상기 제2 상태에서, 상기 입력을 상기 제2 출력으로 연결하도록 제어되는 방법.
  20. 프로세싱을 위한 수단의 계산하는 방법에 있어서, 상기 프로세싱을 위한 수단은:
    제1 타일(tile);
    제2 타일;
    메모리; 및
    버스를 포함하고,
    상기 버스는:
    상기 메모리;
    상기 제1 타일; 및
    상기 제2 타일에 연결되고,
    상기 제1 타일은:
    제1 웨이트(weight) 레지스터;
    제2 웨이트 레지스터;
    활성화 버퍼;
    제1 승산기; 및
    제2 승산기를 포함하고,
    상기 활성화 버퍼는:
    상기 제1 승산기와 연결된 제1 큐(queue); 및
    상기 제2 승산기와 연결된 제2 큐를 포함하도록 구성되고,
    상기 제1 큐는 제1 레지스터 및 상기 제1 레지스터와 인접한 제2 레지스터를 포함하고, 상기 제1 레지스터는 상기 제1 큐의 출력 레지스터이고,
    상기 방법은:
    제1 상태에서, 상기 제1 승산기에서, 제1 웨이트에 상기 제1 큐의 상기 출력 레지스터로부터의 활성화를 곱하는 단계; 및
    제2 상태에서, 상기 제1 승산기에서, 상기 제1 웨이트에 상기 제1 큐의 상기 제2 레지스터로부터의 활성화를 곱하는 단계를 포함하는 방법.
KR1020217002292A 2018-06-22 2019-06-21 뉴럴 프로세서 KR20210013764A (ko)

Applications Claiming Priority (11)

Application Number Priority Date Filing Date Title
US201862689008P 2018-06-22 2018-06-22
US62/689,008 2018-06-22
US201962798297P 2019-01-29 2019-01-29
US62/798,297 2019-01-29
US201962841606P 2019-05-01 2019-05-01
US201962841590P 2019-05-01 2019-05-01
US62/841,590 2019-05-01
US62/841,606 2019-05-01
US16/446,610 2019-06-19
US16/446,610 US20190392287A1 (en) 2018-06-22 2019-06-19 Neural processor
PCT/KR2019/007557 WO2019245348A1 (en) 2018-06-22 2019-06-21 Neural processor

Publications (1)

Publication Number Publication Date
KR20210013764A true KR20210013764A (ko) 2021-02-05

Family

ID=68981979

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020217002292A KR20210013764A (ko) 2018-06-22 2019-06-21 뉴럴 프로세서

Country Status (6)

Country Link
US (6) US20190392287A1 (ko)
JP (1) JP7337103B2 (ko)
KR (1) KR20210013764A (ko)
CN (1) CN112513885B (ko)
TW (1) TWI813708B (ko)
WO (1) WO2019245348A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20220153311A (ko) * 2021-05-11 2022-11-18 포항공과대학교 산학협력단 바이너리 뉴럴 네트워크 제어 방법 및 바이너리 뉴럴 네트워크 장치

Families Citing this family (47)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6442230B2 (ja) * 2014-10-31 2018-12-19 キヤノン株式会社 情報処理装置、同期制御方法、及びプログラム
US11966835B2 (en) 2018-06-05 2024-04-23 Nvidia Corp. Deep neural network accelerator with fine-grained parallelism discovery
US11132124B2 (en) * 2018-06-12 2021-09-28 Intel Corporation Memory subsystem operations with unaligned and scatter gather feature to support convolution and dimension shuffle
US20190392287A1 (en) 2018-06-22 2019-12-26 Samsung Electronics Co., Ltd. Neural processor
JP2020000197A (ja) * 2018-06-29 2020-01-09 キヤノン株式会社 計数方法、濃度測定装置及び濃度測定システム
US11769040B2 (en) * 2018-09-10 2023-09-26 Nvidia Corp. Scalable multi-die deep learning system
US11263529B2 (en) * 2018-10-10 2022-03-01 Google Llc Modifying machine learning models to improve locality
JP7227769B2 (ja) * 2019-01-10 2023-02-22 キヤノン株式会社 情報処理装置及びメモリ制御方法
US10963746B1 (en) * 2019-01-14 2021-03-30 Xilinx, Inc. Average pooling in a neural network
CN109976903B (zh) * 2019-02-22 2021-06-29 华中科技大学 一种基于层宽内存分配的深度学习异构计算方法和系统
BR112021016106A2 (pt) * 2019-03-15 2021-11-09 Intel Corp Processador gráfico de propósito geral, método e sistema de processamento de dados
US20220180467A1 (en) 2019-03-15 2022-06-09 Intel Corporation Systems and methods for updating memory side caches in a multi-gpu configuration
US11934342B2 (en) 2019-03-15 2024-03-19 Intel Corporation Assistance for hardware prefetch in cache access
US11211944B2 (en) 2019-04-17 2021-12-28 Samsung Electronics Co., Ltd. Mixed-precision compression with random access
US11671111B2 (en) 2019-04-17 2023-06-06 Samsung Electronics Co., Ltd. Hardware channel-parallel data compression/decompression
US11880760B2 (en) 2019-05-01 2024-01-23 Samsung Electronics Co., Ltd. Mixed-precision NPU tile with depth-wise convolution
US11907827B2 (en) * 2019-06-28 2024-02-20 Intel Corporation Schedule-aware tensor distribution module
US11222092B2 (en) * 2019-07-16 2022-01-11 Facebook Technologies, Llc Optimization for deconvolution
US20210034956A1 (en) * 2019-07-29 2021-02-04 Hysai Inc. Minimum memory digital convolver
US20210110243A1 (en) * 2019-10-10 2021-04-15 Hewlett Packard Enterprise Development Lp Deep learning accelerator system interface
US11513799B2 (en) * 2019-11-04 2022-11-29 Apple Inc. Chained buffers in neural network processor
US11537864B2 (en) 2019-11-26 2022-12-27 Apple Inc. Reduction mode of planar engine in neural processor
RU2732201C1 (ru) * 2020-02-17 2020-09-14 Российская Федерация, от имени которой выступает ФОНД ПЕРСПЕКТИВНЫХ ИССЛЕДОВАНИЙ Метод построения процессоров для вывода в сверточных нейронных сетях, основанный на потоковых вычислениях
US11537865B2 (en) * 2020-02-18 2022-12-27 Meta Platforms, Inc. Mapping convolution to a channel convolution engine
US11797830B2 (en) 2020-03-25 2023-10-24 Western Digital Technologies, Inc. Flexible accelerator for sparse tensors in convolutional neural networks
US11462003B2 (en) * 2020-03-25 2022-10-04 Western Digital Technologies, Inc. Flexible accelerator for sparse tensors in convolutional neural networks
US11604975B2 (en) * 2020-04-09 2023-03-14 Apple Inc. Ternary mode of planar engine for neural processor
US11188778B1 (en) 2020-05-05 2021-11-30 Illumina, Inc. Equalization-based image processing and spatial crosstalk attenuator
US11301214B2 (en) * 2020-06-09 2022-04-12 Verisilicon Microelectronics (Shanghai) Co., Ltd. Device for performing multiply/accumulate operations
US20220066776A1 (en) * 2020-08-25 2022-03-03 Infineon Technologies Ag Accelerating processor based artificial neural network computation
CN112200301B (zh) * 2020-09-18 2024-04-09 星宸科技股份有限公司 卷积计算装置及方法
US11972348B2 (en) 2020-10-30 2024-04-30 Apple Inc. Texture unit circuit in neural network processor
US20220147826A1 (en) * 2020-11-06 2022-05-12 Moffett Technologies Co., Limited Method and system for convolution with workload-balanced activation sparsity
US11665363B2 (en) * 2020-11-26 2023-05-30 Electronics And Telecommunications Research Institute Method, apparatus, system and computer-readable recording medium for feature map information
KR20220078819A (ko) * 2020-12-04 2022-06-13 삼성전자주식회사 딥러닝 연산 수행 방법 및 장치
US20220244916A1 (en) * 2021-01-29 2022-08-04 Taiwan Semiconductor Manufacturing Company, Ltd. Compute in memory
US11455487B1 (en) * 2021-10-26 2022-09-27 Illumina Software, Inc. Intensity extraction and crosstalk attenuation using interpolation and adaptation for base calling
CN117677955A (zh) * 2021-07-27 2024-03-08 高通股份有限公司 用于神经网络加速器中的数据重用的激活缓冲器架构
US20230086802A1 (en) * 2021-09-17 2023-03-23 Qualcomm Incorporated Eliminating memory bottlenecks for depthwise convolutions
US20220012012A1 (en) * 2021-09-24 2022-01-13 Martin Langhammer Systems and Methods for Sparsity Operations in a Specialized Processing Block
US11657260B2 (en) * 2021-10-26 2023-05-23 Edgecortix Pte. Ltd. Neural network hardware accelerator data parallelism
US20230140542A1 (en) * 2021-11-01 2023-05-04 Advanced Energy Industries, Inc. Tensor non-linear signal processing random access memory
KR20230063519A (ko) 2021-11-02 2023-05-09 삼성전자주식회사 뉴럴 네트워크 연산 장치 및 방법
US20220129320A1 (en) * 2021-11-05 2022-04-28 Debabrata Mohapatra Schedule-aware dynamically reconfigurable adder tree architecture for partial sum accumulation in machine learning accelerators
US20240028556A1 (en) * 2022-07-25 2024-01-25 Xilinx, Inc. Reconfigurable neural engine with extensible instruction set architecture
US20240103074A1 (en) * 2022-09-22 2024-03-28 Apple Inc. Functional Circuit Block Harvesting in Computer Systems
CN115878334B (zh) * 2023-03-08 2023-05-12 深圳云豹智能有限公司 一种数据缓存处理方法及其系统、存储介质、电子设备

Family Cites Families (95)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5285403A (en) 1989-12-29 1994-02-08 U.S. Philips Corporation Arithmetic processing module to be associated with a microprocessor central processing unit
US5821885A (en) 1994-07-29 1998-10-13 Discovision Associates Video decompression
US5446916A (en) 1993-03-26 1995-08-29 Gi Corporation Variable length codeword packer
US5499382A (en) 1993-09-20 1996-03-12 Nusinov; Eugene B. Circuit and method of bit-packing and bit-unpacking using a barrel shifter
US5805913A (en) 1993-11-30 1998-09-08 Texas Instruments Incorporated Arithmetic logic unit with conditional register source selection
US5509129A (en) 1993-11-30 1996-04-16 Guttag; Karl M. Long instruction word controlling plural independent processor operations
US6058473A (en) 1993-11-30 2000-05-02 Texas Instruments Incorporated Memory store from a register pair conditional upon a selected status bit
US6016538A (en) 1993-11-30 2000-01-18 Texas Instruments Incorporated Method, apparatus and system forming the sum of data in plural equal sections of a single data word
US6055204A (en) 1997-04-29 2000-04-25 Texas Instruments Incorporated Circuits, systems, and methods for re-mapping memory column redundancy
US6674536B2 (en) 1997-04-30 2004-01-06 Canon Kabushiki Kaisha Multi-instruction stream processor
US5857035A (en) 1997-05-19 1999-01-05 Hewlett-Packard Company Arithmetic coding compressor for encoding multiple bit values
US6490357B1 (en) 1998-08-28 2002-12-03 Qualcomm Incorporated Method and apparatus for generating encryption stream ciphers
US6195026B1 (en) 1998-09-14 2001-02-27 Intel Corporation MMX optimized data packing methodology for zero run length and variable length entropy encoding
US7174047B2 (en) 2002-03-29 2007-02-06 Matsushita Electric Industrial Co., Ltd. Single-instruction multiple-data (SIMD)-based algorithms for processing video data
US7202872B2 (en) 2003-10-29 2007-04-10 Via Technologies, Inc. Apparatus for compressing data in a bit stream or bit pattern
US8223966B2 (en) 2006-05-10 2012-07-17 Mediatek Inc. Multiple stream decrypting and decoding systems and related methods thereof
US7898550B2 (en) 2006-06-09 2011-03-01 Via Technologies, Inc. System and method for memory bandwidth compressor
US8069377B2 (en) 2006-06-26 2011-11-29 Micron Technology, Inc. Integrated circuit having memory array including ECC and column redundancy and method of operating the same
US8285766B2 (en) 2007-05-23 2012-10-09 The Trustees Of Princeton University Microprocessor shifter circuits utilizing butterfly and inverse butterfly routing circuits, and control circuits therefor
US8638850B2 (en) * 2009-05-06 2014-01-28 Advanced Micro Devices, Inc. Execution units for context adaptive binary arithmetic coding (CABAC)
CN104252331B (zh) * 2013-06-29 2018-03-06 华为技术有限公司 乘累加器
US20150161927A1 (en) 2013-12-05 2015-06-11 Innolux Corporation Driving apparatus with 1:2 mux for 2-column inversion scheme
US9978014B2 (en) * 2013-12-18 2018-05-22 Intel Corporation Reconfigurable processing unit
US11100420B2 (en) 2014-06-30 2021-08-24 Amazon Technologies, Inc. Input processing for machine learning
US9785565B2 (en) 2014-06-30 2017-10-10 Microunity Systems Engineering, Inc. System and methods for expandably wide processor instructions
US10216520B2 (en) 2014-10-06 2019-02-26 Via Technologies, Inc. Compressing instruction queue for a microprocessor
KR102276339B1 (ko) 2014-12-09 2021-07-12 삼성전자주식회사 Cnn의 근사화를 위한 학습 장치 및 방법
US9418458B2 (en) 2015-01-05 2016-08-16 Superfish Ltd. Graph image representation from convolutional neural networks
US9805303B2 (en) 2015-05-21 2017-10-31 Google Inc. Rotating data for neural network computations
US10438117B1 (en) * 2015-05-21 2019-10-08 Google Llc Computing convolutions using a neural network processor
US10049322B2 (en) * 2015-05-21 2018-08-14 Google Llc Prefetching weights for use in a neural network processor
US9747546B2 (en) 2015-05-21 2017-08-29 Google Inc. Neural network processor
US20160358069A1 (en) 2015-06-03 2016-12-08 Samsung Electronics Co., Ltd. Neural network suppression
US10460230B2 (en) * 2015-06-04 2019-10-29 Samsung Electronics Co., Ltd. Reducing computations in a neural network
EP3104309B1 (en) 2015-06-10 2020-04-01 Samsung Electronics Co., Ltd. Spiking neural network with reduced memory access and reduced in-network bandwidth consumption
US11244225B2 (en) 2015-07-10 2022-02-08 Samsung Electronics Co., Ltd. Neural network processor configurable using macro instructions
US10509765B2 (en) 2015-10-08 2019-12-17 Via Alliance Semiconductor Co., Ltd. Neural processing unit that selectively writes back to neural memory either activation function output or accumulator value
US10664751B2 (en) 2016-12-01 2020-05-26 Via Alliance Semiconductor Co., Ltd. Processor with memory array operable as either cache memory or neural network unit memory
EP3353656B1 (en) * 2015-10-28 2020-05-06 Google LLC Processing computational graphs
US9904874B2 (en) 2015-11-05 2018-02-27 Microsoft Technology Licensing, Llc Hardware-efficient deep convolutional neural networks
EP3408798B1 (en) 2016-01-29 2020-07-15 FotoNation Limited A convolutional neural network
NL2016285B1 (en) 2016-02-19 2017-09-20 Scyfer B V Device and method for generating a group equivariant convolutional neural network.
FR3050846B1 (fr) 2016-04-27 2019-05-03 Commissariat A L'energie Atomique Et Aux Energies Alternatives Dispositif et procede de distribution de donnees de convolution d'un reseau de neurones convolutionnel
US11055063B2 (en) 2016-05-02 2021-07-06 Marvell Asia Pte, Ltd. Systems and methods for deep learning processor
KR102599073B1 (ko) 2016-05-09 2023-11-10 스트롱 포스 아이오티 포트폴리오 2016, 엘엘씨 산업용 사물 인터넷을 위한 방법들 및 시스템들
CA2990709C (en) 2016-05-26 2018-09-04 The Governing Council Of The University Of Toronto Accelerator for deep neural networks
CN105913823A (zh) 2016-06-23 2016-08-31 武汉华星光电技术有限公司 高解析度解复用器驱动电路
KR20180012439A (ko) 2016-07-27 2018-02-06 삼성전자주식회사 회선 신경망에서 가속기 및 이의 동작 방법
US10997496B2 (en) 2016-08-11 2021-05-04 Nvidia Corporation Sparse convolutional neural network accelerator
US10802992B2 (en) 2016-08-12 2020-10-13 Xilinx Technology Beijing Limited Combining CPU and special accelerator for implementing an artificial neural network
US10621486B2 (en) 2016-08-12 2020-04-14 Beijing Deephi Intelligent Technology Co., Ltd. Method for optimizing an artificial neural network (ANN)
CA3038967A1 (en) * 2016-10-04 2018-04-12 Magic Leap, Inc. Efficient data layouts for convolutional neural networks
US9940534B1 (en) 2016-10-10 2018-04-10 Gyrfalcon Technology, Inc. Digital integrated circuit for extracting features out of an input image based on cellular neural networks
US10175980B2 (en) * 2016-10-27 2019-01-08 Google Llc Neural network compute tile
US9959498B1 (en) * 2016-10-27 2018-05-01 Google Llc Neural network instruction set architecture
US11003985B2 (en) 2016-11-07 2021-05-11 Electronics And Telecommunications Research Institute Convolutional neural network system and operation method thereof
KR20180051987A (ko) 2016-11-09 2018-05-17 삼성전자주식회사 인공 신경망의 연산 처리 경로 관리 방법
US10733505B2 (en) 2016-11-10 2020-08-04 Google Llc Performing kernel striding in hardware
US20180150256A1 (en) 2016-11-29 2018-05-31 Intel Corporation Technologies for data deduplication in disaggregated architectures
US10417560B2 (en) * 2016-12-01 2019-09-17 Via Alliance Semiconductor Co., Ltd. Neural network unit that performs efficient 3-dimensional convolutions
US10423876B2 (en) * 2016-12-01 2019-09-24 Via Alliance Semiconductor Co., Ltd. Processor with memory array operable as either victim cache or neural network unit memory
US20180181864A1 (en) 2016-12-27 2018-06-28 Texas Instruments Incorporated Sparsified Training of Convolutional Neural Networks
CN106844294B (zh) 2016-12-29 2019-05-03 华为机器有限公司 卷积运算芯片和通信设备
US10521488B1 (en) * 2016-12-30 2019-12-31 X Development Llc Dynamic partitioning
US20180189229A1 (en) 2017-01-04 2018-07-05 Stmicroelectronics S.R.L. Deep convolutional network heterogeneous architecture
US10096134B2 (en) * 2017-02-01 2018-10-09 Nvidia Corporation Data compaction and memory bandwidth reduction for sparse neural networks
JP6794854B2 (ja) 2017-02-02 2020-12-02 富士通株式会社 演算処理装置及び演算処理装置の制御方法
US20180253636A1 (en) 2017-03-06 2018-09-06 Samsung Electronics Co., Ltd. Neural network apparatus, neural network processor, and method of operating neural network processor
US10067509B1 (en) 2017-03-10 2018-09-04 TuSimple System and method for occluding contour detection
US10387298B2 (en) 2017-04-04 2019-08-20 Hailo Technologies Ltd Artificial neural network incorporating emphasis and focus techniques
US10860760B2 (en) * 2017-04-21 2020-12-08 Intel Corporation Systems and methods for implementing learned parameter systems on a programmable integrated circuit
US10409614B2 (en) 2017-04-24 2019-09-10 Intel Corporation Instructions having support for floating point and integer data types in the same register
US10410098B2 (en) 2017-04-24 2019-09-10 Intel Corporation Compute optimizations for neural networks
US10706147B1 (en) 2017-05-19 2020-07-07 Amazon Technologies, Inc. Mitigating side-channel attacks via shared cache
US10990648B2 (en) 2017-08-07 2021-04-27 Intel Corporation System and method for an optimized winograd convolution accelerator
US10600147B2 (en) 2017-08-22 2020-03-24 Intel Corporation Efficient memory layout for enabling smart data compression in machine learning environments
US10699160B2 (en) 2017-08-23 2020-06-30 Samsung Electronics Co., Ltd. Neural network method and apparatus
US11803377B2 (en) 2017-09-08 2023-10-31 Oracle International Corporation Efficient direct convolution using SIMD instructions
US20190087713A1 (en) 2017-09-21 2019-03-21 Qualcomm Incorporated Compression of sparse deep convolutional network weights
EP3460724A1 (en) 2017-09-22 2019-03-27 Kabushiki Kaisha Toshiba Operation device and operation system
US10366322B2 (en) 2017-10-06 2019-07-30 DeepCube LTD. System and method for compact and efficient sparse neural networks
CA3066775A1 (en) 2017-10-16 2019-04-25 Illumina, Inc. Deep learning-based techniques for training deep convolutional neural networks
GB2560600B (en) 2017-11-06 2020-03-04 Imagination Tech Ltd Nueral Network Hardware
US11551065B2 (en) * 2017-11-06 2023-01-10 Imagination Technologies Limited Neural network architecture using control logic determining convolution operation sequence
US10721114B2 (en) * 2017-11-23 2020-07-21 Huawei Technologies Co., Ltd. Method and system for symbol sequence generation and transmission for non-orthogonal multiple access transmission
US11010658B2 (en) * 2017-12-22 2021-05-18 Intel Corporation System and method for learning the structure of deep convolutional neural networks
EP3506084B1 (en) * 2017-12-28 2020-09-23 IMEC vzw System and method for tunable precision of dot-product engine
CN108133270B (zh) * 2018-01-12 2020-08-04 清华大学 卷积神经网络加速方法及装置
US10459876B2 (en) 2018-01-31 2019-10-29 Amazon Technologies, Inc. Performing concurrent operations in a processing element
US11341397B1 (en) 2018-04-20 2022-05-24 Perceive Corporation Computation of neural network node
CN112106078A (zh) 2018-05-08 2020-12-18 多伦多大学管理委员会 神经网络处理元件
US20190392287A1 (en) 2018-06-22 2019-12-26 Samsung Electronics Co., Ltd. Neural processor
US20200210517A1 (en) 2018-12-27 2020-07-02 Intel Corporation Systems and methods to accelerate multiplication of sparse matrices
US11671111B2 (en) 2019-04-17 2023-06-06 Samsung Electronics Co., Ltd. Hardware channel-parallel data compression/decompression
US20210011732A1 (en) 2019-07-09 2021-01-14 MemryX Inc. Matrix Data Reuse Techniques in Processing Systems

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20220153311A (ko) * 2021-05-11 2022-11-18 포항공과대학교 산학협력단 바이너리 뉴럴 네트워크 제어 방법 및 바이너리 뉴럴 네트워크 장치

Also Published As

Publication number Publication date
US11775802B2 (en) 2023-10-03
CN112513885B (zh) 2024-02-27
JP2021528764A (ja) 2021-10-21
TW202014935A (zh) 2020-04-16
US11620491B2 (en) 2023-04-04
US20230351151A1 (en) 2023-11-02
US20200026978A1 (en) 2020-01-23
CN112513885A (zh) 2021-03-16
US20190392287A1 (en) 2019-12-26
US20200026980A1 (en) 2020-01-23
US11775801B2 (en) 2023-10-03
WO2019245348A1 (en) 2019-12-26
TWI813708B (zh) 2023-09-01
US20200026979A1 (en) 2020-01-23
JP7337103B2 (ja) 2023-09-01
US20200234099A1 (en) 2020-07-23

Similar Documents

Publication Publication Date Title
KR20210013764A (ko) 뉴럴 프로세서
JP7349438B2 (ja) ニューラル・ネットワーク・アクセラレータ
CN110390384B (zh) 一种可配置的通用卷积神经网络加速器
CN108805266B (zh) 一种可重构cnn高并发卷积加速器
CN110516801A (zh) 一种高吞吐率的动态可重构卷积神经网络加速器架构
CN107657581A (zh) 一种卷积神经网络cnn硬件加速器及加速方法
CN1272705C (zh) 包括纯量算术逻辑单元的单指令多数据处理机
TW201826115A (zh) 具有陣列寬度可分段之旋轉器之神經網路單元
EP3869352A1 (en) Network-on-chip data processing method and device
KR20180123846A (ko) 합성곱 신경망을 위한 논리적 3차원 구조의 재구성형 연산 가속기
CN105975251B (zh) 一种基于粗粒度可重构架构的des算法轮迭代系统及迭代方法
WO2020215124A1 (en) An improved hardware primitive for implementations of deep neural networks
WO2022112739A1 (en) Activation compression method for deep learning acceleration
WO2021201816A1 (en) Inference engine circuit architecture
CN110414672B (zh) 卷积运算方法、装置及系统
Duan et al. Energy-efficient architecture for FPGA-based deep convolutional neural networks with binary weights
KR20200122256A (ko) 뉴럴 프로세서
Zeng et al. Addressing irregularity in sparse neural networks through a cooperative software/hardware approach
KR20210084220A (ko) 부분 판독/기입을 갖는 재구성 가능한 시스톨릭 어레이를 위한 시스템 및 방법
Filippas et al. Streaming dilated convolution engine
CN116301920A (zh) 一种用于部署cnn模型至基于fpga的高性能加速器的编译系统
Norollah et al. 3D-Sorter: 3D design of a Resource-aware Hardware Sorter for Edge Computing Platforms under Area and Energy consumption constraints
Zhang et al. Thread: Towards fine-grained precision reconfiguration in variable-precision neural network accelerator
Wang et al. Design exploration of multi-fpgas for accelerating deep learning
US20230023859A1 (en) Methods and Apparatus for Accessing External Memory in a Neural Network Processing System