KR20200122256A - 뉴럴 프로세서 - Google Patents
뉴럴 프로세서 Download PDFInfo
- Publication number
- KR20200122256A KR20200122256A KR1020200046422A KR20200046422A KR20200122256A KR 20200122256 A KR20200122256 A KR 20200122256A KR 1020200046422 A KR1020200046422 A KR 1020200046422A KR 20200046422 A KR20200046422 A KR 20200046422A KR 20200122256 A KR20200122256 A KR 20200122256A
- Authority
- KR
- South Korea
- Prior art keywords
- ifm
- weight
- group
- value
- tile
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/52—Multiplying; Dividing
- G06F7/523—Multiplying only
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Health & Medical Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- General Engineering & Computer Science (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Optimization (AREA)
- Mathematical Analysis (AREA)
- Computational Mathematics (AREA)
- Computing Systems (AREA)
- Neurology (AREA)
- Molecular Biology (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- General Health & Medical Sciences (AREA)
- Evolutionary Computation (AREA)
- Data Mining & Analysis (AREA)
- Computational Linguistics (AREA)
- Artificial Intelligence (AREA)
- Complex Calculations (AREA)
Abstract
프로세서는 레지스터, 논-제로 웨이트 값 선택기, 및 승수기를 포함한다. 상기 레지스터는 제1 그룹의 웨이트 값들 및 제2 그룹의 웨이트 값들을 보유한다. 각 그룹의 웨이트 값들은 적어도 하나의 웨이트 값을 포함하고, 그리고 상기 제1 그룹의 웨이트 값들 내 각 웨이트 값은 상기 제2 그룹의 웨이트 값들 내 웨이트 값에 대응한다. 상기 논-제로 웨이트 값 선택기는 상기 제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 큐의 출력 레지스터는 0을 포함한다.
일부 실시 예들에 따르면, 상기 프로세서는 제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 큐의 출력 레지스터은 0을 포함한다.
일부 실시 예들에 따르면, 상기 프로세싱 회로는 제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 웨이트 레지스터에 입력하고, 그리고 제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 큐의 출력 레지스터는 0을 포함한다.
일부 실시 예들에 따르면, 상기 프로세서는 제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 큐의 출력 레지스터가 0을 포함하는지 여부를 결정하고, 제1 큐의 출력 레지스터가 0을 포함한다는 결정에 응답하여, 제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 큐의 출력 레지스터는 0을 포함한다.
일부 실시 예들에 따르면, 상기 프로세싱 회로는 제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 큐의 출력 레지스터는 0을 포함한다.
일부 실시 예들에 따르면, 상기 프로세서는 제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 큐의 출력 레지스터가 0을 포함하는지 여부를 결정하고, 제1 큐의 출력 레지스터가 0을 포함한다는 결정에 응답하여, 제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 큐의 출력은 0을 포함한다.
일부 실시 예들에 따르면, 상기 프로세싱 회로는 제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 큐의 출력은 0을 포함한다.
일부 실시 예들에 따르면, 상기 프로세서는 제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 큐의 출력 레지스터가 0을 포함하는지 여부를 결정하고, 제1 큐의 출력 레지스터가 0을 포함한다는 결정에 응답하여, 제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 큐의 출력은 0을 포함한다.
일부 실시 예들에 따르면, 상기 프로세싱 회로는 제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 큐의 출력 레지스터가 0을 포함하는지 여부를 결정하는 단계 그리고 제1 큐의 출력 레지스터가 0을 포함한다는 결정에 응답하여, 제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는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 7a는 IFM 슬라이스들 내 레인들뿐만 아니라 IFM 슬라이스들 내 분포된 0 값들의 비교적 균일한 분포를 갖는 IFM 데이터의 한 예시를 도시한다.
도 7b는 인접한 IFM 슬라이스들의 동일한 IFM 레인들에 0 값들이 클러스터링된 IFM 데이터의 다른 예시를 도시한다.
도 7c는 본 명세서에 개시된 실시 예에 따라서, IFM 슬라이스 내에서 논-제로 값들의 클러스터들을 분산시키기 위해 IFM 셔플러(shuffler)를 사용하여 각각의 IFM 슬라이스 내에서 값들을 유사-랜덤하게 치환(permute)하는 시스템의 예시적인 실시 예의 블록도를 도시한다.
도 7d는 본 명세서에 개시된 실시 예에 따라 16-채널 버터플라이 셔플러(butterfly shuffler)의 예시적인 실시 예의 블록도를 도시한다.
도 7e는 본 명세서에 개시된 실시 예에 따라 버터플라이 셔플러에 결합된 유사-랜덤 생성기의 예시적인 실시 예의 블록도를 도시한다.
도 8a는 본 명세서에 개시된 실시 예에 따라 베이스라인 승산기 유닛(baseline multiplier unit)의 예시적인 실시 예의 블록도를 도시한다.
도 8b는 본 명세서에 개시된 실시 예에 따라 제로 값 활성화(zero-value activation) 및 제로 값 웨이트 스키핑(zero-value weight skipping) 모두에 대한 듀얼 희소성(dual sparsity)을 지원하는 승산기 유닛의 예시적인 실시 예의 블록도를 도시한다.
도 8c는 본 명세서에 개시된 실시 예에 따라 제로 값 활성화(zero-value activation) 및 제로 값 웨이트들(zero-value weights)을 균질화(homogenize)하도록 IFM 셔플러을 사용하여 각 IFM 슬라이스 내에서 값들을 유사-랜덤하게 치환하는 시스템의 예시적인 실시 예의 블록도를 도시한다.
도 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는 본 명세서에 개시된 실시 예들에 따라서 뉴럴 프로세서의 일부를 도시한 블록도이다.
도 7a는 IFM 슬라이스들 내 레인들뿐만 아니라 IFM 슬라이스들 내 분포된 0 값들의 비교적 균일한 분포를 갖는 IFM 데이터의 한 예시를 도시한다.
도 7b는 인접한 IFM 슬라이스들의 동일한 IFM 레인들에 0 값들이 클러스터링된 IFM 데이터의 다른 예시를 도시한다.
도 7c는 본 명세서에 개시된 실시 예에 따라서, IFM 슬라이스 내에서 논-제로 값들의 클러스터들을 분산시키기 위해 IFM 셔플러(shuffler)를 사용하여 각각의 IFM 슬라이스 내에서 값들을 유사-랜덤하게 치환(permute)하는 시스템의 예시적인 실시 예의 블록도를 도시한다.
도 7d는 본 명세서에 개시된 실시 예에 따라 16-채널 버터플라이 셔플러(butterfly shuffler)의 예시적인 실시 예의 블록도를 도시한다.
도 7e는 본 명세서에 개시된 실시 예에 따라 버터플라이 셔플러에 결합된 유사-랜덤 생성기의 예시적인 실시 예의 블록도를 도시한다.
도 8a는 본 명세서에 개시된 실시 예에 따라 베이스라인 승산기 유닛(baseline multiplier unit)의 예시적인 실시 예의 블록도를 도시한다.
도 8b는 본 명세서에 개시된 실시 예에 따라 제로 값 활성화(zero-value activation) 및 제로 값 웨이트 스키핑(zero-value weight skipping) 모두에 대한 듀얼 희소성(dual sparsity)을 지원하는 승산기 유닛의 예시적인 실시 예의 블록도를 도시한다.
도 8c는 본 명세서에 개시된 실시 예에 따라 제로 값 활성화(zero-value activation) 및 제로 값 웨이트들(zero-value weights)을 균질화(homogenize)하도록 IFM 셔플러을 사용하여 각 IFM 슬라이스 내에서 값들을 유사-랜덤하게 치환하는 시스템의 예시적인 실시 예의 블록도를 도시한다.
첨부된 도면들과 관련하여 아래에 설명되는 상세한 설명은 본 개시에 따라 제공되는 뉴럴 프로세서의 예시적인 실시 예들의 설명으로서 의도되고, 본 개시가 구성되거나 이용될 수 있는 유일한 형태들을 나타내도록 의도되지 않는다. 본 설명은 도시된 실시 예들과 관련하여 본 명세서에 개시된 주제의 특징들을 설명한다. 그러나, 동일하거나 동등한 기능 및 구조는 본 명세서에 개시된 주제의 범위 내에 포함되도록 의도된 상이한 실시 예에 의해 이루어 질 수 있도록 의도될 수 있다. 본 명세서의 다른 곳에 인용된 바와 같이, 유사한 구성요소의 번호는 유사한 구성요소 또는 특징을 나타내도록 의도된다. 또한, 본 명세서에서 사용된 바와 같이, "예시적인"이라는 단어는 "예, 사례, 또는 예시로서 제공하는"을 의미한다. 본 명세서에서 "예시적인"것으로 설명된 임의의 실시 예는 다른 실시 예보다 반드시 바람직하거나 유리한 것으로 해석되지 않는다.
본 명세서에서 사용된 바와 같이, 용어 "모듈"은 모듈과 관련하여 본 명세서에서 기술된 기능을 제공하도록 구성된 소프트웨어, 펌웨어 및/또는 하드웨어의 임의의 조합을 나타낸다. 소프트웨어는 소프트웨어 패키지, 코드 및/또는 명령어 세트 또는 명령어로서 구현 될 수 있다. 본 명세서에 설명된 임의의 구현에서 사용되는 상기 용어 "하드웨어"는 예를 들어, 단독으로 또는 임의의 조합으로, 하드와이어 회로, 프로그래머블 회로, 상태 머신 회로, 및/또는 프로그래머블 회로에 의해 실행되는 명령을 저장하는 펌웨어를 포함 할 수 있다. 집합적으로 또는 개별적으로, 모듈은 더 큰 시스템의 일부를 형성하는 회로로서, 예를 들어 집적 회로 (integrated circuit; IC), 시스템 온 칩(system on-chip; SoC) 등을 형성하는 회로로서 구현될 수 있다. 본 명세서에 개시된 다양한 구성 요소들 및/또는 기능 블록들은 다양한 구성 요소 및/또는 기능 블록과 관련하여 본 명세서에 설명된 기능을 제공하는 소프트웨어, 펌웨어 및/또는 하드웨어를 포함 할 수 있는 모듈로서 구현될 수 있다.
도 1a는 본 명세서에 개시된 주제에 따른 뉴럴 프로세서(100)의 하이레벨 블록도를 도시한다. 출력 특징 맵(output feature map (OFM))을 형성하기 위해, 뉴럴 프로세서(100)는 웨이트의 다차원 적 어레이(또는 텐서)를 갖는 입력 특징 맵(input feature map (IFM)) (또는"활성화"의 텐서)의 컨벌루션 및/또는 텐서 곱을 효율적으로 결정 또는 계산하도록 구성 될 수 있다. 뉴럴 프로세서(100)는 또한 특징 맵 풀링 및/또는 활성화 기능을 결정하거나 계산하도록 구성될 수 있다. 그러나, 명확성 및 간결성을 위해, 풀링 및 활성화 기능은 여기에서 논의하지 않는다.
복수의 메모리 뱅크 세트(109)(각각 여러개, 예를 들어, 도 4ab 및 도 4ac에서 4 개의 메모리 뱅크(108)를 포함하는)는 후속 계산을 위해 상기 메모리 뱅크 세트 (109)에 저장된 입력 활성화 맵을 상기 타일들 (102)로 가져 오는 IFM 전달 패브릭(104)을 통해 멀티플라이 앤 리듀스(Multiply-and-Reduce (MR)) 타일들(102)(아래에 더 자세히 설명)에 연결될 수 있다. 아래에서 더 상세히 논의되는 바와 같이, 상기 타일들(102)은 승산기 유닛들 (Multiplier Units (MUs)) (103)의 어레이를 포함한다. 또한, 타일(102)은 저장을 위해 타일(102)로부터 메모리 뱅크 세트(109)로 계산된 결과를 전송하는 OFM 전달 패브릭(106)을 통해 메모리 뱅크 세트(109)에 연결된다. 하나의 실시 예에서, 상기 메모리 뱅크 세트(109)는 static ram access memory (SRAM) 메모리 뱅크 세트 일 수 있다. 따라서, 상기 메모리 뱅크 세트(109)는 상기 SRAM 뱅크 세트(109) 또는 간단히 상기 SRAM(109)으로 지칭될 수 있다. 다른 실시예에서, 상기 메모리 뱅크 세트(109)는 휘발성 및/또는 비휘발성 메모리 뱅크 세트를 포함할 수 있다.
IFM 전달 패브릭(104)은 세그먼트 버스일 수 있고(아래에서 논의되는 바와 같이), 결과적으로, 상기 SRAM 뱅크 세트들(109)의 각각은 상기 프레임들(102) 중 하나와 관련될 수 있다. 중앙 컨트롤러(110)는 유틸리티 버스(112)를 통해 상기 시스템 내 레지스터들을 제어하기 위한 제어 워드들을 공급할 수 있다. 데이터는 AXI (Advanced Extensible Interconnect by ARM Ltd) 인터커넥트(114)를 통해 뉴럴 프로세서로 전달 될 수 있으며, 뉴럴 프로세서(100)에 의해 수행된 처리 동작의 결과는 AXI 인터커넥트(114)를 통해 유사하게 검색될 수 있다. 마이크로 컨트롤러(116)는 뉴럴 프로세서(100)와 외부 메모리(120) 사이의 DMA 컨트롤러(118)를 사용하여 데이터 전송을 조정 및 실행할뿐만 아니라, 중앙 컨트롤러(110)를 적절한 방법으로 구성함으로써 계산을 조정하는데 사용될 수 있다. 본 명세서에 기술된 상기 뉴럴 프로세서 각각의 상이한 구성 요소들 및/또는 기능 블록들은 개별 구성 요소 및/또는 모듈로서 구현 될 수 있다.
각각의 타일(102)은 MR 어레이(122)의 MR 열(133)를 포함할 수 있다. 도 1b는 일부 실시 예들에서 구성될 수 있는 MR 어레이(122)를 도시한다. 각각의 MR 어레이(122)는 8 개의 MR 열(133)을 포함 할 수 있으며, 그 중 2 개의 MR 열만이 명확성을 위해 도시된다. 각각의 MR 열(133)은 16 개의 MU(103)를 포함 할 수 있으며, 그 중 4 개의 MU(103)만이 명확성을 위해 도시되고, 2 개의 가산기 트리(128A 및 128B)를 더 포함할 수 있다.
각 MU(103)는 복수의 레지스터들, 예를 들어 "웨이트 레지스터"로 지칭 될 수 있는 18 개의 9 비트 레지스터를 포함하는 레지스터 파일(127) 및 승산기(126)를 포함할 수 있다. 승산기(126)는 입력 활성화들에 레지스터 파일(127) 내 웨이트들을 곱한다. 이어서, 각각의 MR 열(133)의 가산기 트리(128A 및 128B)는 열 내 16 개의 Mu(103)로부터의 곱들을 합산(즉, 감소)하여 도트 곱을 형성한다. 아래에 설명된 바와 같이, 상기 합산은 특정 방식으로 수행될 수 있다.
또한, 각각의 타일(102)은 IFM 캐시(139) 및 활성화 브로드캐스트 유닛(ABU)(141)을 포함할 수 있다. 상기 IFM 캐시(139)는 상기 SRAM(109)으로부터 수신된 IFM 값들을 캐싱함으로써 입력 특징 맵들에 대한 SRAM 판독을 감소시킬 수 있다. 각각의 MR 열(133)이 16 개의 MU(103)를 포함 할 수 있는 것과 같이, IFM 캐시(139)는 16 개의 병렬 "활성화 레인들"을 포함할 수 있다. 각 활성화 레인(137)은 MR 어레이(122)에서 MU들(103)의 "행(row)"에 효과적으로 대응한다.
상기 활성화 브로드캐스트 유닛(141)은 입력 활성화들의 준비를 담당할 수 있다. 상기 준비 프로세스에서 제1 단계는 컨벌루션 시퀀스에 따라 IFM 캐시(139)로부터 IFM 활성화 버퍼(124)로 입력 활성화들을 페치하는 동시에 스파스 활성화 계산 기능(sparse activation computation functionality)을 구현할 수 있을 때 제로 값 활성화를 생략하는 단계를 포함할 수 있다. 스파스 활성화 계산 기능은 선택적으로 비활성화 될 수 있으며, 그로 인하여 "덴스(dense)" 텐서 계산 모드가 된다. 상기 준비 프로세스에서 제2 단계는 숫자 유형의 활성화들을 부호 및 8 비트 크기(sign-and-8bit-magnitude) 포맷으로 변환하는 단계를 포함 할 수 있으며, 이는 8 비트를 초과하는 비트 폭을 갖는 데이터 유형을 일련의 부호 및 8 비트 크기 값들로 타입 변환기(135)를 이용하여 분할하는 단계를 포함할 수 있다. "제로 포인트" 인코딩을 사용하여 활성화들이 인코딩된 경우, 예를 들어, 구글 텐서 플로우 (Google TensorFlow)에 의해 지원되는 바와 같이, 상기 값을 부호 및 8 비트 크기 포맷으로 변환하기 전에 활성화들에 제로 포인트 상수 값(Z)가 추가 될 수 있다.
각각의 MR 열(133)이 16 개의 MU들(103)를 포함할 수 있는 것과 같이, 상기 ABU(141), 상기 IFM 버퍼(124) 및 상기 타입 변환기(135)는 각각 16 개의 레인을 포함 할 수 있다. 상기 변환된 16 개의 활성화 값은 상기 MR 어레이(122)와 병렬로 브로드캐스트되므로, 각각의 활성화 레인은 8 개의 MU들(103)의 대응하는 행에 입력 활성화 값을 가져온다.
또한, 각각의 MR 열(133)은 상기 가산기 트리들(128A 및 128B) 각각에 대해 누산기들(130A 및 130B)를 포함 할 수 있다. 본 명세서에서 사용된 바와 같이, "누산기"는 레지스터의 컨덴츠(contents)에 입력 값을 합하고 레지스터의 컨덴츠를 합의 결과로 오버라이트(overwrite)하도록 구성된 가산기와 레지스터의 조합이다.
전술 한 바와 같이, MR 어레이(122)의 MU들(103)는 복수의 행들, 예를 들어 16 개의 행들로 배열될 수 있다. 도 1b는 명확성을 위해 16 개 중 4 개의 행만을 도시하고, 예를 들어 열들(또는 "OFM 채널들")은 8 개의 열들 중 O0" 및 "O7" 로 레이블된 2 개의 열들만이 도 1b에 도시된다.
16 개의 값들의 길이를 갖는 IFM 벡터는 "IFM 슬라이스"로 지칭 될 수 있다. IFM 슬라이스는 연관된 IFM 텐서 (예: IFM[x,y,d:d+15]) 에 대한 인덱스들로서 연관된 평면 좌표 (x, y) 및 연관된 뎁스(depth) 채널 인덱스(d)를 가질 수 있다. 일반적인 경우에, 타일(102)은 온칩 메모리 또는 SRAM으로부터 3D IFM 텐서를 포함하는 IFM 슬라이스를 한 번에 하나씩 수신한다. 상기 3D IFM 텐서에는, 각각의 입력 IFM 슬라이스는 입력 층에서의 평면 위치 (x, y)에서 인덱스(d)에서인덱스(d+15)까지의 16 개의 뎁스 채널에 대한 값을 포함한다.
유사하게, 8 개의 값들의 길이를 갖는 OFM 벡터는 "OFM 슬라이스"로 지칭될 수 있다. OFM 슬라이스는 연관된 OFM 텐서 (예: OFM[x, y, d:d+7]) 에 대한 인덱스들로서 연관된 평면 좌표 (x, y) 및 연관된 뎁스 채널 인덱스(d)를 가질 수 있다. 일반적인 경우에, 타일(102)은 OFM 슬라이스를 출력으로서 생성한다. 이하에서 알 수 있는 바와 같이, 타일이 정지되지 않을 때, 일부 실시 예들에서, 상기 출력 레이트는 클록 당 하나의 OFM 슬라이스에서 예를 들어 클록 당 최대 2 개의 OFM 슬라이스까지 변할 수있다. SRAM (109)에 저장하기 위해 OFM 전달 패브릭(106)을 통해 최종 OFM 벡터 결과를 전송하기 전에 OFM 벡터 계산을 완료하기 위하여, 타일(102)과 타일(102)로부터 출력되는 OFM 출력 벡터 (OFM 슬라이스)는 리덕션 패브릭(111)에 의해 추가로 감소될 필요가 있을 수 있다.
IFM 및 OFM 텐서 모두 제4 "배치"치수를 가질 수 있음을 알 수 있다. 그러나 뉴럴 프로세서(100)의 주요 목적은 뉴럴 네트워크 모델 실시간 추론을 가속화하는 것이고, 뉴럴 네트워크 모델 훈련과 달리, 실시간 추론은 일반적으로 1의 배치 사이즈(batch size)에 대하여 수행된다. 설명의 편의를 위해, 배치 디멘션(batch dimension)은 이하의 설명에서 대부분 생략될 것이고 배치 디멘션의 세부 사항은 추후 개별적으로 설명될 것이다.
상기 뉴럴 프로세서(100)는 동기 로직 내에서 구현 될 수 있고, 각각의 MR 열(133)은 전체적으로 하나의 클록 도메인 내에 있을 수 있다. 일부 실시 예들에 따르면, 각각의 동작 사이클 동안 (예를 들어, 각각의 클록 사이클 동안), 16 개의 승산기들(126) 각각은 그것의 입력으로써 2 개의 피승수들(multiplicands)(또는 오퍼랜드들(operands))으로부터 대응하는 곱(product)을 형성 할 수 있다. 가산기(128) 각각은 가산기(128)의 입력에서 16 개의 곱들 일부 또는 전부의 합을 형성 할 수 있다(도시된 4 개의 레인에 대하여 도 1b에 도시된 바와 같이). 각 누산기(130)의 가산기는 (i) 누산기(130)의 레지스터의 현재 값에 (ii) 대응하는 가산기(128)의 출력을 더한 합계를 형성할 수 있다. 다음 클록 사이클의 시작에서, 각 누산기(130)의 각 가산기의 출력은 누산기(130)의 레지스터에 기입될 수 있다.
일부 실시 예들에 따르면, 타일 (102)에 의해 제공되는 계산은 파이프 라인으로 처리될 수 있다. 또한, 예를 들어, 회로가 동작하는 클록 속도에서 적절한 타이밍 마진을 제공하기 위하여, 추가적인 레지스터들(즉, 플립 플롭들의 어레이)이 도 1b에 도시된 요소들 사이에 존재할 수 있다. 한 실시 예에서, 처리량은 동일할 수 있다 (즉, 추가 레지스터가 없는 경우와 동일, 예를 들어 클럭 주기 당 하나의 곱셈 및 덧셈). 그러나 (i) 승산기들(126)에 입력되는 입력 데이터 및 (ii) 누산기(130)의 레지스터에 기록되는 곱셈 및 덧셈의 최종 결과 사이의 레이턴시는 더 클 수있다 (예를 들어, 몇 개의 클록 사이클).
도 1c 내지 도 1h는 동작의 예를 도시한다. 상기 동작에서, 뉴럴 프로세서(100)는 IFM 데이터의 요소가 0 일 때 0으로 곱셈을 달리 수행하는 승산기(126)를 이용하기 위해 특정 곱셈 및 덧셈 연산들을 순서를 바꾸어 먼저 진행시킴으로써 IFM 데이터에서 희소성을 이용하여 계산의 완료를 가속화할 수 있다. IFM 데이터는 SRAM 뱅크 세트(109)에 저장될 수 있다. 그리고, SRAM 뱅크 세트(109)로부터 IFM 데이터의 페칭(fetching)은 활성화 버퍼(124)가 복수의 큐로서 동작하도록 스케줄링될 수 있다. 도 1b에 도시된 바와 같이, 활성화 버퍼(124)에 의해 형성된 각각의 큐는 하나의 데이터 행에 대응하고, 각각의 큐는 IFM 데이터를 MR 어레이(122)의 각각의 레인으로 출력한다.
설명의 편의를 위해, SRAM(109)과 활성화 버퍼(124) 사이의 IFM 캐시(139)는 디스 에이블되고 바이패스된 것으로 가정한다. 또한, 활성화들의 데이터 유형은 uint8이고 웨이트들의 데이터 유형은 int8이라고 가정한다. 이 경우, 타입 변환기(135)는 변경되지 않고 활성화 값을 통과시키도록 작용하고, MU(103)에서의 곱셈은 1 클록 사이클을 취한다. 도 1b에 도시된 바와 같이, 다른 가정은 SRAM 뱅크 세트(109)가 예시적인 동작의 시작시에 일부 샘플 IFM 값들을 포함하고 하나의 타일만이 사용되고 있다는 것이다.
또 다른 가정은 웨이트 텐서 W[0...15,0...7, a...j]는 16 개의 IFM 레인들, 8 개의 OFM 열들, 및 10 개의 IFM 입력 벡터들(a 내지 j)가 해당 MU 레지스터 파일들에 사전에 로드된다는 것이다 (즉, 파일들(127) 등록).
일단 예시적인 동작이 시작되면, 도 1c로부터 알 수 있듯이, 도시된 예에서, SRAM (109)으로부터의 2 개의 가장 오른쪽 열들에있는 2 개의 IFM 벡터 a[] 및 b[] 가 활성화 버퍼(124) 내로 페치된다. 따라서, 활성화 버퍼(124)의 제1 열(즉, 오른쪽 열 a[])은 IFM의 제1 벡터 (즉, 요소 a0 내지 a3)를 포함하고 활성화 버퍼(124)의 제2 열 (즉, 왼쪽 열 b[])은 IFM의 제2 벡터 (즉, 요소 b0 내지 b3, b1 = 0)를 포함한다. 도 1c에서, 제2 큐는 제1 요소로서 a1을 포함하고 (MR 어레이(122)에 가장 가까운), 제2 큐는 제2 요소로서 제로(0)를 포함한다 (즉, b1 = 0).
활성화 버퍼 (124)의 전방에 있기 때문에, IFM 벡터 a [0...3]은 MR 어레이(122)로 브로드캐스트된다. 즉, IFM 값(a0)은 최상위 행의 8 개의 승산기들(126) 각각에 대한 입력으로서 최상위 활성화 레인(137)을 통해 브로드캐스트된다. 동시에, 열 (0 내지 7)의 최상단 행 승산기들(126)는 각각의 승산기들(126)에 대한 제2 입력으로서 각각의 로컬 레지스터 파일들(127)로부터 웨이트들 W[0,0...7,a]를 수신한다.
유사하게, 값(a1)은 위에서부터 두번째 행의 승산기들(126)의 입력으로서 위에서부터 두번째의 활성화 레인(137)을 통해 브로드캐스트된다. 동시에, 열 (0 내지 7)의 위에서부터 두번째 행의 승산기들(126)는 각각의 승산기들(126)에 대한 제2 입력으로서 각각의 로컬 레지스터 파일들(127)로부터 웨이트들 W[1,0...7,a]를 수신한다.
동작에서, IFM의 제1 벡터 (즉, 요소 a0 내지 a3)와 대응하는 웨이트들의 곱들은 승산기들(126)의 (16x8) 어레이 각각에 형성 될 수 있다. 바람직한 도트 곱에 대응하는 곱들의 합들은 제1 가산기들(128A)에 형성되고 제1 누산기들(130A)에 저장될 수 있다. 즉, 제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에서 A,0...7로 표시됨)로 완료되고 OFM 전달 패브릭(106)으로 출력되도록 준비될 수 있다. 이어서, 각각의 칼럼의 누산기(130A)가 클리어될 수 있다.
도 1d에서, IFM의 상기 제1 벡터가 처리된 후, 상기 IFM(즉, 0인 c2를 가지는 요소 c0 내지 c3)의 제3 벡터는 상기 활성화 버퍼(124)로 판독될 수 있다. 제2 레인의 각각의 승산기(126)에서 제로 값 및 대응하는 웨이트의 곱을 형성하는 것을 수반하는 IFM의 두 번째 벡터의 모든 요소 (즉, 요소 b0 내지 b3, b1 = 0)와 웨이트의 곱을 형성하는 대신, IFM의 제3 벡터의 제2 요소 (즉, 요소 c1)는 순서를 바꾸어 먼저 진행되고 제2 레인의 각각의 승산기(126)에서 대응하는 웨이트로 곱해진다.
동시에, 레인들 (0, 2, 및 3)의 승산기들(126)는 상응하는 각 로컬 레지스터 파일들로부터 웨이트들 W[0,0...7,b], W[2,0...7,b] 및 W[3,0...7,b]를 수신하고 있다. 활성화 (b1 = 0)이 생략되어 레인 1이 순서를 바꾸어 먼저 작동하기 때문에, 레인 1의 승산기는 IFM 벡터("픽셀") b와 관련된 웨이트가 아니라 IFM 벡터("픽셀") c와 관련된 웨이트 W[0,0...7,c]를 수신한다.
타일(122)은 이제 2 개의 픽셀을 동시에 처리하기 때문에 (픽셀 b 및 픽셀 c의 일부), 곱들을 열에서 합하는 것은 잘못된 결과를 유도할 수 있다. 정확한 결과를 얻기 위해, 2 개의 가산기 트리들(128) 중 하나는 픽셀 b에 대한 도트 곱을 계산하는데 사용되고, 2 개의 가산기 트리들(128) 중 나머지는 픽셀 c에 대한 도트 곱을 계산하기 위해 사용된다.
제2 레인의 각 승산기(126)에 의해 형성된 결과는 제2 가산기(128B) (도 1c에서 B, 0... 7로 표시됨)에 입력된다. 반면, 다른 레인의 승산기(126)에 의해 형성된 결과는 제1 가산기(128A)에 입력된다. 요소 (c1)의 순서를 변경한 이동은 활성화 버퍼(124)에서 "홀(hole)"을 형성하며, 이는 순서를 바꾸어 진행함으로써 후속 클록 사이클에서 다른 요소를 순서를 변경하여 이동시킬 수 있는 장점이 있다 (도 1e에 도시된 바와 같이, 요소 d1이 순서를 바꾸어 먼저 진행될 때).
대응하는 웨이트들과 IFM 데이터의 제2 벡터의 논-제로 요소의 곱들이 결정되거나 계산되면, 그 합이 각 열의 제1 누산기(130A)에 있으며, 각 열의 제1 누산기(130A)는 열의 웨이트 벡터와 IFM의 제2 벡터 (b[])의 도트 곱을 포함하고, 이를 OFM 전달 패브릭(106)으로 출력될 수 있다. 이어서, 각각의 칼럼의 제1 누산기(130A)가 클리어될 수 있다. 즉, 클리닝 전의 각 열의 상기 제1 누산기(130)의 컨텐츠는 다음을 포함한다.
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)의 도트 곱의 한 항만을 포함한다. 즉, 제2 누산기(130B)의 컨텐츠는 다음을 포함한다.
SB,0 = c1*w1,0,c
...
SB,7 = c1*w1,7,c.
도 1e를 참조하면, 후속 동작(예: 다음 클럭 사이클 동안)에서, 대응하는 웨이트 벡터와 IFM의 제3 벡터 (c0, c3)의 요소들의 나머지 곱들은 MR 어레이(122)의 각 열의 제1 및 제4 승산기들(126)에 의해 형성될 수 있다. 제2 누산기 (130B)에서, 대응하는 웨이트 벡터들과 IFM의 제3 벡터 (c[])의 도트 곱들을 완료하기 위하여, 각각의 곱들은 제2 누산기(130B)에 이미 저장된 하나의 곱에 추가 될 수있다. 즉, 제2 누산기(130B)의 컨텐츠는 다음을 포함한다.
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(즉, 요소 d0 ~ d3, d00 = d4 = 0)의 제4 벡터의 도트 곱들은 요소들 (d1) (c1과 관련된 곱이 이전 사이클에 대하여 수행되었기 때문에 활성화 버퍼 124에 "홀"을 남김)와 요소들 (d2) (c2 = 0이기 때문에)을 모두 순서를 바꾸어 진행함으로써 동시에 결정되거나 계산 될 수 있다. 제1 누산기(130A)의 컨텐츠는 다음을 포함한다.
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 데이터의 계산이 완료된다.
유사한 방식으로, 활성화 버퍼에 상보적 희소성(complementary sparsity)을 갖는 두 개의 벡터 e[] 및 f[]가 포함된 경우, 도 1f에 도시된 바와 같이, MR 열(122)의 각 컬럼은 동시에 2 개의 도트 곱을 형성 할 수 있다. 도 1f에 도시된 예시에서, 예를 들어, 각각의 웨이트 벡터와 IFM 데이터(즉, 요소 e0 ~ e3, e0 = e1 = 0)의 제5 벡터의 도트 곱은 각각의 웨이트 벡터와 IFM 데이터(즉, 요소 f0 ~ f3, f2 = f3 = 0)의 제6 벡터의 도트 곱과 동시에 형성되고, 제6 벡터의 논-제로(non-zero) 요소들은 모두 순서를 벗어나 먼저 진행된다.
도 1g는 IFM 데이터(즉, 요소들 g0 ~ g3, g1 = g2 = g3 = 0)의 제7 벡터 g[]가 활성화 버퍼(124)의 제1 열에 있고 IFM 데이터(즉, 요소들 h0 ~ h3, h2 = h3 = 0)의 제8 벡터가 활성화 버퍼(124)의 제2 열에 있는 상태를 도시한다. 도 1g는 제8 벡터의 (논-제로) 요소들이 IFM 데이터의 제7 벡터의 (논-제로) 요소들과 동시에 처리되도록 IFM 데이터의 제8 벡터의 (논-제로) 요소들을 선행, 진행시킴으로써 각각의 대응하는 웨이트와 IFM 데이터의 제8 벡터 h[]의 도트 곱을 각각의 해당 웨이트와 IFM 데이터의 제7 벡터의 도트 곱과 동시에 형성하는 방법을 도시한다. IFM (h0)의 제8 벡터의 (논-제로) 요소들 중 하나가 IFM (g0)의 제7 벡터의 (논-제로) 요소들와 동일한 레인에 있기 때문에, IFM 데이터의 제8 벡터의 (논-제로) 요소들 각각은 이러한 요소들이 순서를 변경하여 진행될 수 있도록 MR 열(122)의 인접한 레인으로 시프트된다.
IFM 데이터의 제8 벡터 h[]의 제1 요소(h0)를 각 열(이 위치에는 제로 요소를 가지기 때문에, IFM 데이터의 제7 벡터 g[]에는 사용되지 않음)의 위에서 두번째 승산기(126)로 입력하는 것과 IFM 데이터의 제8 벡터 h[]의 제2 요소(h1)를 각 열(IFM 데이터의 제7 벡터 g[]에도 사용되지 않음)의 제3 승산기(126)에 입력하는 것은 IFM 데이터의 제8 벡터의 논-제로 요소가 IFM 데이터의 제7 벡터의 논-제로 요소와 동시에 처리 될 수 있게 한다. 또한, 제8 벡터 h[]에 대한 웨이트 벡터들의 대응 요소도 시프트된다. 더 구체적으로, 최상위 레인과 연관된 각각의 MU(103)는 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)의 위에서 두번째 레인으로 입력된다. 마지막으로, 위에서 두번째 레인의 MU들(103) 각각은 웨이트 w1,0..7.h (h1과 관련됨)를 페치하고, 이들 웨이트들을 1 레인 아래로 h1을 수신하는 동일한 열에서 위에서 세번째 레인까지 쉬프트시킨다.
도 1g에 도시된 상태에서, 하부 레인 내 각 MR 열(122)의 각 승산기(126)는 한 사이클 동안 사용되지 않는다. 일부 실시 예에서, 더 깊은 (예: 3-deep) 활성화 버퍼(124)를 갖도록 MR 타일(102)을 구성함으로써 모든 승산기들(126)를 완전히 이용하는 이러한 이벤트의 가능성은 감소 될 수 있다. 따라서, 각 활성화 레인은 선택할 동일한 채널로부터 더 많은 값(예: 3 개)을 가질 수 있다. 논-제로 활성화들로 0 값의 활성화들을 대체함에 있어서, 하나의 레인 이상 떨어진 레인에서 논-제로 활성화들을 가져오는 것은 (시프팅하는 것)은 더 많은 유연성을 제공한다. 두 세트 이상의 가산기 트리들과 관련된 누산기들을 사용되면, 승산기 활용도가 증가될 수 있다.
도 1h는 도 1g에 도시된 사이클에 따른 후속 사이클을 도시한다. 상기 후속 사이클 내에서, 활성화 버퍼(124)의 제1 열은 IFM 데이터(완전히 0을 포함)의 제9 벡터를 포함하고, 활성화 버퍼(124)의 제2 열은 IFM 데이터(즉, 요소 j0 ~ j3)의 제10 벡터를 포함한다. 도 1h에 도시된 상태에서, IFM 데이터의 10 번째 벡터의 모든 요소들은 순서를 변경하여 먼저 진행될 수 있다. 그리고, 각각의 웨이트 벡터와 IFM 데이터의 제10 벡터 j[]의 도트 곱은 IFM 데이터의 제9 벡터의 처리를 위한 한 사이클의 지연을 발생시키지 않고 계산될 수 있다.
상기 예시에서 도시된 바와 같이, 승산기(126)의 출력은 몇 클록 사이클들 동안 가산기 트리(128A)에 입력 될 수 있고, 다른 클록 사이클들 동안 가산기 트리(128B)에 입력될 수 있다. 승산기(126)의 출력이 가산기 트리(128A 또는 128B)에 입력되지 않을 때, 가산기 트리로의 입력은 0으로 설정될 수 있다. 도 1i는 예를 들어, 도 1d 내지 도 1h에 도시된 동작들을 지원하기 위하여, 임의의 승산기(126)의 출력을 제1 가산기(128A) 또는 제2 가산기(128B)로 보내도록 멀티플렉서(132)를 사용하는 예시적인 구성을 도시한다. 여기서, 캐시로부터 IFM 벡터를 페치하는 것, 활성화 버퍼로부터 활성화 레인으로의 논-제로 활성화들의 선택 및 멀티플렉싱하는 것, 각 IFM 벡터와 함께 사용할 가산기 트리의 선택, 올바른 가산기에 멀티플렉서 단위 출력들의 멀티플렉싱하는 것, 및 컬럼 누산기들을 클리어링하는 것을 포함하는 타일(102) 내에서 계산을 조정하기 위하여, 멀티플렉서 제어 신호들(sel_adder_tree [0... 15])은 타일 제어 로직(144) (도 1O)으로부터 전송된다.
승산기(126)의 출력은 항상 가산기 트리(128A) 또는 가산기 트리(128B)에 입력되지만, 가산기 트리(128A 및 128B) 둘 다 동시에 동시에 입력되지 않기 때문에, 더 적은 로직을 사용하여 가산기 트리(128A 및 128B) 모두를 구현할 수 있다. 도 1j는 상기 제1 가산기(128A) 및 상기 제2 가산기 (128B)가 하나의 물리적 가산기 트리 및 적합한 멀티플렉서(도시되지 않음)로 구현된 논리적 개념들일 수 있는 방법을 도시한다. 명확성을 위해 2 개의 가산기 트리들을 구성할 것이 요구된다. 각 가산기 트리는 4 개의 입력들을 포함한다. 4-입력 가산기 트리는 3 개의 가산기들을 사용하여 구현될 수 있다. 간단한 접근 방식으로, 각 가산기 트리는 세 개의 가산기 요소를 사용하므로, 2 개의 4-입력 가산기 트리들을 구성하려면, 6 개의 가산기 서브요소들이 사용된다. 2 개의 4-입력 가산기 트리들은 여러 여분의 멀티플렉서들과 함께 3 개의 가산기 요소들만 사용하여 구성될 수 있다. 여기서는 고려해야 할 세 가지의 중요한 경우가 있다. (i) 제1 경우에, 4 개의 상기 입력들 모두가 상기 제1 논리 가산기(128A)에 의해 합산된다 (그리고 상기 제2 논리 가산기(128B)의 출력은 0 임). (ii) 제2 경우에, 3 개의 상기 입력들이 상기 제1 논리 가산기(128A)에 의해 합산된다 (그리고 상기 제2 논리 가산기(128B)의 출력은 나머지 입력과 동일함). (iii) 제3 경우에, 상기 입력들 중 2 개의 입력들은 상기 제1 논리 가산기(128A)에 의해 합산되고, 상기 입력들 중 2 개의 입력들은 상기 제2 논리 가산기(128B)에 의해 합산된다. 2 개의 추가 경우 (도 1j에 도시되지 않음)에서, 상기 제2 논리 가산기(128B)는 입력들 중 3 개 또는 4개 전부를 합산하며, 제1 논리 가산기(128A)는 나머지 입력과 동일하거나 0과 동일하다. 본원에 사용된 바와 같이, 도 1j의 상기 예시에서와 같이, "가산기"는 합을 생성하기 위하여 적어도 두 개 이상의 숫자들을 더하기 위한 물리적 회로이거나 물리적 가산기들 및 멀티플렉서들의 조합으로 형성된 복수의 논리적 가산기들 중 하나이다. 도 1J에서 알 수 있듯이, 6 개가 아닌 오직 3 개의 가산기 요소들로(도시되지 않은 일부 추가 멀티플렉서들을 포함) 모든 가능한 경우를 구현하기에 충분하다.
도 1k는 본 명세서에 개시된 실시 예들에 따라서 승산기 유닛(103)의 내부 회로도를 도시한다. 승산기 유닛(103)은 부호없는 8 비트 곱하기 부호없는 8 비트의 승산기(126), 로컬 웨이트들을 보유 할 수 있는 레지스터 파일(127), 승산기(126)에 대한 입력 웨이트를 선택할 수 있는 로직(143), 로컬 웨이트를 인접한 레인으로 쉬프트시킬 수 있는 로직 (149 및 151), multiply-by-zero 상황을 검출하고, 승산기(126)를 아이들 상태로 만들어 동적 전력 소비를 감소시킬 수 있는 로직들 (145, 136, 157, 155 및 159), 그리고 웨이트 로딩 로직 (157)를 포함 할 수 있다.
상기 레지스터 파일 (127)은 웨이트를 저장한다. 하나의 레지스터는 단일 int8 또는 uint8 웨이트에 해당한다. 큰 비트 폭을 가지는 웨이트들은 하나 이상의 레지스터들을 점유한다. 예를 들어 int16 또는 uint16 웨이트는 두 개의 레지스터들을 점유할 수 있다. 레지스터 파일(127)은 18 개의 int8 또는 uint8 웨이트들 또는 이에 상응하는 9 개의 int16 또는 uint16 웨이트들을 보유 할 수 있다. 후술하는 바와 같이, 레지스터들의 수는 부분 결과의 생성에 의지하지 않고 16-비트 웨이트들을 사용하여 3x3 컨볼루션을 계산할 수 있도록 선택 될 수 있다.
레지스터 파일(127)은 버티컬 웨이트 로드 버스(vertical weight load bus) (101)를 통해 웨이트들 {swt_in[C], wt_abs_ld_in[7:0][C]}을 로드하기 위한 단일 입력 포트를 포함한다(도 1n). 각각의 MR 컬럼(133 C)은 C가 0에서 7까지의 범위인 자체 웨이트 로드 버스를 수신한다. 웨이트 레지스터 인덱스 버스(weight register index bus) (wt_ld_idx[4:0]) 상에서 목적 레지스터(0에서 17까지)의 인덱스를 지정하고 웨이트들을 레인(L)에 로드하기 위하여 레인 웨이트 로드 인에이블(lane weight load enable) wt_ld_en_lane[L]를 선언(assert)함으로써, 웨이트들은 수직 웨이트 로드 버스(101) 상에 웨이트 값들 "{swt_in[C], wt_abs_ld_in[7:0][C]}" 을 배치함으로써 웨이트 디컴프레션 유닛(Weight Decompression Unit)(138) (도 1n)으로부터 한 번에(즉, 단일 레인 내의 8 개 열들 모두에서 동시에) 하나의 전체 레인으로 로딩된다.
도 1k로부터, 단일 레인 내 모든 웨이트들을 로드하기 위하여 18 싸이클이 걸리고, 전체 MU 어레이(122) 내 모든 웨이트들을 로드하기 위하여 총 18*16 = 288 클록 사이클이 걸린다. 어떤 상황에서는, 특히 완전히-연결된 (fully-connected: FC) 레이어를 계산할 때, 웨이트 로딩의 속도가 충분하지 않을 수 있다. 컨볼루션 레이어계산과 달리, FC 레이어 계산 동안 각 웨이트는 한 번만 사용된 후 폐기된다. 따라서, FC 레이어를 계산할 때, 승수기(126)의 최대 활용을 유지하기 위하여, 클록마다 각각의 승산기 유닛(103)에 하나의 웨이트를 로드할 필요가 있으며, 이는 도 1k에 도시된 베이스 회로(base circuit)보다 16 배 더 빠르다. 이 경우, 예를 들어, 웨이트 로딩을 가속화하기 위해 상기 실시 예는 추가 웨이트 로드 버스(101) "{swt_in[C0], wt_abs_ld_in[7:0][C0]}, {swt_in[C1], wt_abs_ld_in[7:0][C1]}, 등"를 포함하도록 수정될 수 있다.
도 1k에서, 웨이트들 중 하나가 1 레인 위로 쉬프트되고, 제2 웨이트가 1 레인 아래로 쉬프트되고, 제3 웨이트가 로컬로(locally) 소비(consumed)되는 경우, 3 개의 웨이트들을 동시에 가져올 수 있도록 웨이트 레지스터 파일(127)은 3 개의 출력 포트들을 포함한다.
로컬 소비(local consumption)를 위해 로컬 레지스터 파일(local register file)로부터 웨이트를 인출하는 것은 멀티플렉서(147)를 사용하여 달성된다. 예를 들어, 도 1c에서, 멀티플렉서(147)는 IFM 값(a0)과 곱해질 로컬리-저장된 웨이트(w0,0,a)를 선택한다. 다른 예를 들어, 도 1d에서, 멀티플렉서(147)는 IFM 값(c1)과 곱해질 로컬리-저장된 웨이트(w1,0,c)를 선택한다.
로컬 레지스터 파일(134)로부터 웨이트를 페치하고 그 웨이트를 하위 레인으로 시프트시키는 것은 멀티플렉서(149)를 사용하여 달성된다. 예를 들어, 도 1g에서, 로컬리-저장된 웨이트(w0,0,h)는 IFM 값(h0)과 곱해지도록 1 레인 아래로 시프트된다.
마지막으로, 로컬 레지스터 파일(127)로부터 웨이트를 페치하고 그 웨이트를 상위 레인으로 시프트시키는 것은 멀티플렉서(151)를 사용하여 달성된다.
왜냐하면 활성화 브로드캐스팅 유닛(141)는 각 활성화 레인의 이동 및 브로드캐스트되는(활성화 레인으로) 각 IFM 값과 관련된 활성화 버퍼로의 오프셋에 관한 완전한 정보를 갖기 때문에, 활성화 브로드캐스팅 유닛(141)은 신호들(sel_wt_self[4:0], sel_wt_dn1[4:0])과 신호들(sel_wt_up1[4:0])을 사용하여 3 개의 레지스터 파일 페치 멀티플렉서들(register-file fetch multiplexers) (147, 149 및 151)를 각각 제어한다.
MR 열(133)의 영역을 감소시키기 위해, 예를 들면, 레지스터 파일(127)의 출력 포트의 수는 동일한 레지스터 파일로부터 동시에 웨이트들을 위/아래로 시프팅되는 것을 허용하지 않음으로써 3 개에서 2 개로 감소 될 수 있다. 예를 들어, 모든 웨이트들의 이동을 허용하지 않거나 하나의 시프트만 허용하거나 로컬로 웨이트를 소비함으로써, 레지스터 파일 (127)의 출력 포트의 수는 하나로 더 감소 될 수 있다. 그러나 쉬프팅 및 최대 쉬프팅 거리를 제한하는 것은 승수기 활용률(multiplier utilization)을 감소시킬 수 있다. MR 열(133) 및 활성화 브로드캐스트 유닛(141)의 복잡성, 면적 및 전력을 줄이면서 승수기 활용률을 최적화하도록 활성화 버퍼 뎁스(activation buffer depth)를 가진 시프트 타겟 레인 선택들의 다양한 변형들과 조합들이 고안될 수 있다. 관련된 개시(attorney docket no. 1535-467CON2)에 기술된 바와 같이, 최적화된 승산기 활용을 달성하기 위한 특히 효과적인 방법 및 장치는 관련 웨이트들을 로딩하면서, 유사-랜덤 방식으로 활성화 레인들을 셔플링(퍼뮤팅)한다.
도 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]}"로 표시된다. 왜냐하면 활성화 브로드캐스팅 유닛(141)는 각 활성화 레인의 이동 및 브로드캐스트되는(활성화 레인으로) 각 IFM 값과 관련된 활성화 버퍼 오프셋(activation buffer offset)에 관한 완전한 정보를 갖기 때문에, 활성화 브로드캐스팅 유닛(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" 내 위에서 두번째 승산기(126)에 의해 IFM 값(h0)과 곱해질 웨이트(w0,0,h)를 수반하는 "{swt_dn, wt_abs_dn[7:0]}"을 선택한다.
도 1k에 도시된 바와 같이, 각각의 레지스터 파일(127)은 8 비트들은 웨이트 크기를 나타내며, 1 비트는 부호 및 8 비트 크기 형식(적용가능할 때 미리 추가된 "zero-point"상수(Z))으로 저장된 웨이트 부호를 나타내는 9의 비트 폭을 가진다. 웨이트가 레지스터 파일(127)로부터 페치(fetch)될 때, 부호있는 int8 유형을 부호 및 8 비트 크기 표현(적용가능할 때 zero-point 추가를 포함)으로 변환하는 로직을 추가함으로써, 레지스터 파일(127)의 비트 폭은 8 비트로 줄어들 수 있다. 레지스터 파일(127)의 크기가 앞서 기술된 영역의 절약을 야기하기에 충분히 크게 선택 될 때, 온더플라이 변화(on-the-fly conversion) 은 중요하다.
활성화 브로드캐스트 유닛(141)은 승산기(126)에 대한 입력으로서 사용될 활성화 "{sact, act_abs[7:0]}"를 브로드캐스트(broadcast)한다. 로직 게이트들(145 및 159)은 wt_zero 및 act_zero 신호들(ABU부터의 보조 신호)을 사용하여 웨이트(곱셈에 사용될)는 0이거나 활성화(곱셈에 사용될)는 0 이거나 둘 모두인 multiply-by-zero 상황을 체크(check)한다. multiply-by-zero 상황이 발생하면 결과 신호(mult_by_zero)가 선언(assert)된다. 따라서, 웨이트 및 활성화 승수기 입력 레지스터에 대한 클럭이 mult_in_ce 신호를 사용하여 게이트되도록 한다. 입력 승수 레지스터의 클럭을 게이팅하는 것은 승수기 입력들 및 승수기 내부 신호들이 이전 상태를 유지(고정)시켜 스위칭 활동을 방지함으로써 다이나믹 전력을 감소시킨다. 이러한 활동과 병행하여, 로직 게이트(155)가 0으로의 승산에 대응하는 승산기 출력(mult_result[15:0])을 제로화하는 mult_out_zero 신호를 생성하도록 플립 플롭 게이트(157)는 한 사이클만큼 mult_in_ce 신호를 지연시킨다. 후술하는 바와 같이, 전체 타일의 계산이 중단 될 때마다, ABU (141)는 또한 모든 승산기들(126)를 유휴시키기 위해 en_mult 신호를 전송한다.
도 1k의 신호 이름들은 다음의 규칙을 따른다. "act"는 활성화를 나타낸다. "wt"는 웨이트를 나타낸다. "sact", "swt", "mult_out_s", "s_in_a" 등의 "s"는 "sign"을 나타낸다. "wt_abs", "act_abs" 등의 "abs"는 절대 값(크기)을 나타낸다.
ABU(141)는 부호 및 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]}"을 생성하기 위하여, 레지스터들(136a 및 136b)은 각각 곱해질 활성화 및 웨이트를 래치(latch)한다. 일부 실시 예들에 따르면, 두 개의 절대 8-비트 값들을 곱하고 두 부호들을 배타적 논리합(exclusive ORing)을 수행함으로써 승수기(126)는 상기 곱을 계산한다. 따라서, 부호 및 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 비트 크기(sign-and-16-bit-magnitude) 결과를 가산기 트리에 입력 될 16-비트의 부호있는 출력으로 변환한다. 마지막으로, 전술 한 바와 같이, 로직(155)은 multiply-by-zero 경우들에서 "mult_out[15:0]" 을 제로화한다.
곱셈 제어에 대한 ABU(141)의 역할을 요약하면, ABU(141)은 기호 및 8 비트 크기 형식의 입력 IFM 데이터, 레인-업 및 레인-다운 시프팅을 포함하는 웨이트 선택 제어, 그리고, 브로드캐스트되고있는 현재 활성화를 나타내며 0과 동일한 보조 신호(act_zero)를 제공한다. act_zero 신호가 선언(assert)되면, "{sact, act_abs[7:0]}"의 실제 값은 활성 화 레인 스위칭 활동을 줄이기 위하여 변경되지 않을 수 있다. 값이 0 인(zero-valued) 활성화가 브로드캐스트되는 경우들이 발생할 수 있음에도 불구하고, 일부 실시 예들은 그러한 발생을 최소화 할 수 있다.
도 1b 내지 도 1h는 가능하면 ABU(141) 내부의 IFM 버퍼(124)로부터 0이 아닌 값의(non-zero-valued) 활성화를 페치하고, 올바른 도트 곱을 얻기 위하여 연관된 웨이트들을 승수기(126)로 다중화함으로써 스파스 활성화들(sparse activations)를 지원하는 계산을 도시한다. IFM 버퍼(124)는 캐시(139)로부터 IFM 값들을 페치하고 활성화 스테이징(activation staging) FIFO (165)에서 페치된 IFM 값들을 스테이징한다 (도 1l 및 도 1ma 참조). 이어서, IFM 스테이징 FIFO(165)로부터 논-제로 활성화들을 페치하기 위하여 복수의 활성화 멀티플렉서들(166)는 동작한다, 따라서, 페치 활성화뿐만 아니라 활성화들은 인접한 레인들로부터 위 또는 아래로 순서를 바꾸어 "쉬프트"될 수 있다.
도 1ma 및 1mb (하기에서 설명됨)에서, "룩-어헤드(look-ahead)"거리(h)는 동일한 채널에서의 검색 거리이다. "룩-어사이드(look-aside)"거리(d)는 측면에서 검색 거리입니다. 그리고 FIFO 뎁스(F)는 활성화 FIFO(165)의 뎁스이다. 용어의 명확성을 위해, 활성화 멀티플렉서(163)의 복수의 활성화 멀티플렉서들(166)는 IFM 스테이징 FIFO (165)로부터의 입력으로서 IFM 채널을 받아들이고, 룩-어헤드 및 룩-어사이드를 적용하여 활성화들을 페치하고, 그리고 결과인 값들을 활성화 "레인들"(채널들이 아닌)로 출력한다. "레인"이라는 용어를 사용하는 것은 텐서 내의 뎁스 "채널"의 논리적 인덱싱 개념과 물리적 하드웨어 "레인들"을 따라 흐르는 활성화를 구별 할 수 있다.
IFM 스테이징 FIFO (165) 내부의 레지스터 (161)는 선택적일 수 있고 설명의 명확성을 위해 도시된다. 어떤 경우에는, 활성화 스테이징 FIFO 레지스터(161)를 제거하고, IFM 멀티플렉서(163)를 다중 포트 캐시 출력에 직접 연결하고, 그리고 캐시(139)로부터 IFM 값들을 올바른 순서로 멀티플렉서들(163)에 직접 페치하도록 IFM 캐시 리드 로직(read logic)을 수정함으로써, 면적과 전력을 줄일 수 있다.
도 1ma는 같은 레인의 값과 다른 레인들의 값들을 포함하고, 활성화 스테이징 FIFO 레지스터(161)로부터 MR 어레이(122)로 (타입 변환기(135)를 통해) 브로드캐스트되고 활성화 FIFO(165)에 저장된 몇몇 가능한 값들 중 어느 하나로부터 타일(예: 하나의 타일에 총 16 개 레인들)의 복수의 레인들 중 임의의 레인에서 승수 (126)로 입력 될 활성화를 선택하는 데 사용될 멀티플렉서(163)의 구성을 도시한다. 보다 일반적인 경우, 각 셀은 2 * d 멀티플렉서로 갈 수 있고, 레인 1 및 레인 16은 말단(end)에 있기 때문에 h*(d+1) 소스를 갖는 것을 제외하고, 각각의 목적지는 소스들 (2*h*d)의 수와 동일한 수를 가질 수있다.
각각의 MR 열의 ARU(Accumulate and Return Unit) (167)에 상주하는 출력 캐시의 크기로서 (도 1n), 출력 캐시 사이즈 (C)는 정의된다. 입력 대역폭(I)을 IFM 스트리밍 대역폭 (클럭 주기 당 16 바이트 길이의 IFM 벡터들의 수)으로 정의된다. 출력 대역폭 (O)을 OFM 전달 패브릭 대역폭 (클럭 주기 당 8 바이트 길이 OFM 벡터 결과의 수)으로 정의된다. 또한, 원시 희소성(raw sparsity) (sr%)은 활성화 텐서에서 제로 원소들을 카운트하는 것에 기초하여 관찰된 희소성으로 정의될 수 있다 (활성화 텐서의 총 활성화들의 수에 비례하여). 실제 희소성(actual sparsity) (sa%)은 컨볼루션 스트라이드(convolution stride)을 고려하고 (예: 컨볼루션 스트라이드는 특정 제로 값의 활성화들를 사용하지 않거나 특정 제로 값의 활성화들을 여러 번 포함 할 수 있음) 컨볼루션 패딩(convolution padding)을 고려하는 활성화 텐서에 대한 2 차원 컨벌루션 (conv2d) 프로세스 동안 적용된 제로 요소들의 실제 수로 정의 될 수 있다 (활성화 텐서의 총 활성화들의 수에 비례하여). 승수기 활용률(UM)은 승수기들이 유효한 곱셈들을 수행하는 주기의 백분율로 정의 될 수 있다 (논-제로 활성화들을 곱함). 예를 들어 1x1 컨볼루션의 경우, 활성화 텐서가 sr%의 원시 희소성 sr %을 가지는 경우, 심플 나이브 접근(simple, naive approach) 방식 (즉, 제로-스키핑이 없는 "밀도" 계산 모드)을 사용하면, 승수기 활용률은 (1-sr%)이다. 1x1이 아닌 컨볼루션의 경우, 심플 나이브(밀도) 계산(simple, naive (dense) computation)을 사용할 때 승수 사용률은 (1-sa%)이다.
도 1mb는 (i) 도 1mb의 좌측의 제1 구성(도 1ma에 도시된 구성)에서 도 1ma의 회로의 4 열들의 확대도, (ii) 도 1mb의 중앙의 제2 구성에서 도 1ma의 회로의 4 개의 행들의 확대도, 그리고 (iii) 도 1mb의 우측의 제3 구성에서 도 1ma의 회로의 4 개의 행들의 확대도를 도시한다. 제1 구성에서 룩-어사이드 멀티플렉서(look-aside multiplexer) 입력들은 위와 아래 행들에서 오고, 동일한 행으로부터 룩-어헤드(look-ahead) 입력들은 오지 않는다. 제1 구성은 일반적으로 다른 두 개의 구성들보다 와이어의 수가 적고, 논-제로 활성화 값들에 대한 검색을 다른 채널들 (즉, 더 적은 행들)로 분산시킨다. 이는 하나의 채널이 연속적인 제로들을 갖는 경향이 있는 경우에 유리할 수 있다. 또한 2배의 스피드업을 목표로 하면 두 위치들로 충분할 수 있다. 그리고 채널들(1 및 16)은 상기 구성(h = 2, d = 1)에서 같은 수의 후보들을 가진다. 제2 구성은 "풀 멀티 플렉스 방식(full multiplex scheme)"이라고 지칭 될 수 있다. 이 구성에서, 룩-어사이드 멀티플렉서(look-aside multiplexer) 입력들은 위와 아래 채널들에서 오고, 다음 뎁스의 동일한 채널로부터 룩-어헤드(look-ahead) 입력들이 온다. 제3 구성에서, 룩-어사이드 멀티플렉서 입력들은 사용되지 않으며 룩-어헤드 멀티플렉서 입력들은 동일한 채널에서만 올 수 있다 (즉, look-aside d = 0). 제3 구성은 상대적으로 복잡도가 낮다. 즉, 멀티플렉서 및 와이어의 절반보다 더 적은 수가 요구된다. 그리고, 제3 구성은 다소 감소된 승수기 활용률의 비용에서 단순한 웨이트 스킵 지원을 허용할 수 있다.
도 1n은 8 개의 MR 열들(133) 및 16 개의 행들로 구성된 MU들(126)의 그리드를 포함하는 MR 어레이(122)를 포함하는 타일(102)의 최상위 레벨 다이어그램을 도시한다. 각각의 MU (126) 요소는 MR 어레이(122) 내에서 상기 MU의 행 및 열 좌표에 대응하는 첨자들(MUrow,col)을 포함한다. 웨이트 압축해제 유닛(138)은 타일에 로컬로 위치한 SRAM 뱅크 세트(109)로부터 압축된 웨이트들을 수신 할 수 있고, 웨이트 레지스터(127)에 기록하는 프로세스 동안 웨이트들을 압축 해제 할 수 있다. 웨이트는 웨이트의 희소성(sparsity)을 이용하기 위해 압축 될 수 있고, 이에 의해 웨이트를 저장하기 위해 사용되는 메모리를 감소시키고 웨이트를 승산기 유닛들(126)로 전송하는데 사용되는 버스 대역폭을 감소시킨다. 대안적으로, 웨이트들은 압축되지 않은 채로 SRAM 뱅크 세트(109)에 저장 될 수 있다. IFM 전달 패브릭(104)의 병목 현상을 감소시키기 위해 IFM 캐시(139)는 IFM 데이터를 캐시하는데 사용될 수있다, 그리고, 도 1d 내지 도 1h의 컨텍스트(context)에서 설명된 바와 같이, 제로 값의 활성화들의 스키핑(skipping) (또는 "활성화 스키핑(activation skipping)")를 구현하기 위하여 ABU(141)는 사용될 수 있다.
도 1o은 뉴럴 프로세서 제어의 계층을 도시한다. 뉴럴 프로세서(100)는 도 1a에 도시된 다양한 요소들을 제어 할 수 있는 상태 머신(state machines), 또는 "제어 유한 상태 머신(control finite state machines)"(제어 FSM) 또는 "제어 로직(control logic)"을 가질 수 있다. 제어 계층(control hierarchy)에는 "글로벌(global)"레벨과 "로컬(local)"레벨을 포함하는 두 가지 레벨들을 가질 수 있다. 이 동작에서, 글로벌 제어(global control; GC) FSM(140)은 웨이트로드 단계(weight load phase) 시작, 제어 단계 시작, 그리고 계산 단계 시작을 포함하는 로컬 제어 상태 머신(local control state machines) (142 및 144)의 동작을 조절(orchestrate)한다. 타일(102)는 논-제로 활성화의 스키핑(skipping)을 지원하기 때문에, 타일(102)의 출력 레이트는 각각의 타일(102)에 의해 수신되는 IFM 슬라이스의 실제 희소성(actual sparsity)에 따라 다소 변할 수 있다. 따라서, 상기 타일들(102)에서의 계산은 몇 클럭 앞뒤에서 실행될 수 있다. 따라서, 글로벌 제어 로직(140)은 로컬 타일 제어 로직 (144)의 동작을 조정하고, 복수의 타일들(102)로부터의 출력을 다시 동기화시키고, 그리고 리덕션 패브릭(reduction fabric) (111)을 사용하여 감소를 완료한다. 글로벌 제어 로직(140)은 OFM 전달 패브릭(106)을 통해 최종 OFM 결과들을 SRAM 뱅크 세트(109)로 전송한다. 예를 들어, 타일 출력 FIFO 198이 가득 차는 극단적인 경우에, 출력 FIFO가 가득 찬 타일(102)을 다른 타일들이 따라 잡을 수 있도록 스로틀 링(throttling) (스톨링(stalling))함으로써, ARU(167) 내부에서 작은 출력 FIFO(198) (또한 179) (도 1x)를 사용하여 복수의 타일들(102)의 출력들의 동기화는 달성될 수 있다.
복수의 SRAM 제어(SC) FSM들(142) 각각은 SRAM 뱅크 세트(109) 내의 각각의 SRAM 뱅크에 대한 SRAM 어드레스들 및 리드/라이트(read/write) 신호들을 생성 할 수 있다. 활성화들이 0의 값을 가질 때, 복수의 타일 제어 (TC) FSM들(144) 각각은 활성화들을 스킵(skip)할 수 있다. 동작을 준비하기 위하여, 호스트 CPU(미도시)는 각각의 IFM 및 OFM 텐서의 시작 어드레스 및 사이즈(높이, 폭, 깊이, 또는 배치 사이즈(batch size))를 SRAM 제어 FSM(142)에 로드하고, 동작 유형(즉, 완전히 연결된(FC) 또는 컨볼루션) 및 IFM, OFM, 웨이트 데이터 유형을 글로벌 제어 FSM(140)에 로드한다. IFM 및 OFM 웨이트 싸이클링 구성, IFM 트래버셜(traversal)의 순서, IFM 통과 횟수 (나중에 설명) 및 기타 계산 매핑 설정, 활성화 기능 및 풀링의 선택 (만약에 있다면)을 로드하고, 부분 결과 생성을 활성화 또는 비활성화하고, 웨이트 텐서 사이즈(높이, 너비, 또는 입출력 뎁스 채널들의 수)를 로드하고, 지그-재그(Z) 높이를 로드하고(아래에서 설명됨); 그리고, 컨볼루션 패딩 및 컨볼루션 스트라이드에 대한 옵션들을 FSM의 구성 레지스터에 로드한다. 또한, 각각의 SRAM 뱅크 세트 109) 내의 IFM 및 OFM 텐서의 어드레스를 포함하는 동작 파라미터들(operational parameters)에 따라 접속성을 구성하기 위하여, 호스트 CPU는 IFM 전달 패브릭(104), OFM 전달 패브릭(106), 및 리덕션 패브릭(RF) (111)과 관련된 레지스터에 라이트(write)한다. 동작을 시작하기 위해, 호스트 CPU는 글로벌 제어 FSM(140)의 레지스터에 라이트한다. 이어서, 시작하기 위하여, 글로벌 제어 FSM(140)은 SRAM 제어 FSM(142) 및 타일 제어 FSM(144)에 신호를 보낸다.
일부 실시 예들에 따르면, 글로벌 제어 FSM(140)은 컨볼루션 윈도우 내에서의 스캐닝을 제어하고, 컨볼루션 윈도우를 변환하며, 그리고 IFM 텐서를 트래버스하여 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 전달 패브릭(104 및 106)의 언더플라이 재구성(on-the-fly reconfiguration)에 영향을 미치면서, 글로벌 제어 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 리드(read)을 스킵하도록 리드 신호(read signal)를 비활성으로 유지한다. IFM 캐시 관리를 단순화하기 위해, IFM 전달 패브릭으로부터의 각 IFM 슬라이스는 모든 관련된 대상 타일들(나중에 설명됨, 맵핑에 의해 규정됨) 및 타일의 대상 번호에 관계없이 IFM 캐시 내의 동일한 주소에서 그것들의 각 IFM 캐시들에 라이트된다. 불균일한 활성화 희소성(activation sparsity)으로 인해 타일 계산은 약간 다른 속도로 실행되므로, 각 타일에 대한 제어 로직은 다른 타일들과 독립적으로 로컬에서 독출하는 IFM 캐시(139)를 관리한다.
일부 실시 예들에 따르면, OFM 결과를 작성하는 프로세스는 IFM 값을 독출하는 것과 유사하다. 그러나 활성화 스키핑(activation skipping)으로 인해 계산 지연은 변화될 수 있다. 각 타일 제어 FSM(144)은 그 타일 내 모든 열들이 계산을 완료하는 시점을 나타내는 정보를 가진다. 각 타일의 타일 제어 FSM(144)은 ofm_ready 신호를 글로벌 제어 FSM(140)으로 전송한다. ofm_ready 신호는 SRAM 제어 FSM(142)에게 OFM 전달 패브릭(106)으로부터의 OFM 슬라이스를 OFM 텐서에 적절한 (x, y, d) 인덱스로 SRAM 뱅크에 라이트하도록 지시한다. OFM 텐서 트래버셜(OFM tensor traversal) 동안, 글로벌 제어 FSM(140)은 IFM 텐서 트래버셜 동안 IFM (x, y, d) 슬라이스 좌표의 생성과 유사한 방식으로 OFM (x, y, d) OFM 슬라이스 좌표를 생성한다. 일단 계산이 완료되면, 글로벌 제어 FSM(140)은 호스트 CPU에 인터럽트를 전송한다.
전술 한 바와 같이, 활성화 스킵핑(activation skipping)으로 인해, 예를 들어, 타일(102)은 클록 당 최대 2 개의 출력 결과들을 생성할 수 있다. 따라서, 승수기 활용률의 감소를 피하기 위하여, IFM 전달 패브릭(104)은 클록 당 최대 2 개의 IFM 슬라이스들를 공급할 필요가 있다. 따라서, 로컬 타일 제어 FSM(144)은 캐시 내의 남아있는 처리될 데이터의 양에 대해 글로벌 제어 FSM(140)에 알릴 수 있다. 그 결과로서, 글로벌 제어 FSM(140)은 IFM 캐시 언더플로우(IFM caches underflow)를 피하기 위해 SRAM 제어 로직(142)이 IFM 데이터의 페치를 재개하도록 지시 할 수 있다. 타일 IFM 캐시 (139) 중 하나가 가득 차면, 글로벌 제어 FSM(140)은 SRAM (109)으로부터 IFM 슬라이스를 판독하고 타일 캐시(139)에 IFM 슬라이스를 기록하는 것을 포함하여 IFM 텐서 트래버셜을 일시 정지(pause)하도록 SRAM 제어 FSM (142)에 지시한다.
도 1p를 참조하면, 일부 실시 예들에서, IFM 캐시(139)는 16 개의 레인들(170)을 포함한다. 각 레인은 이중 입력 포트들(dual input ports)와 이중 출력 포트들(dual output ports)을 가지는 레지스터 파일(169)을 포함한다. 활성화 스키핑(MU 열당 2 개의 가산기 트리들을 가짐)으로 인해 시스템 타일(102)이 클록 당 최대 2 개의 활성화들을 처리 할 수 있기 때문에 (제로 활성화들이 충분할 때) 듀얼 포트들이 사용될 수 있다. 예를 들어 활성화를 더 빠르게 처리하기 위하여, 클록 당 3 개의 IFM 슬라이스들, 3 중 입력 포트, 3 중 출력 포트, 3 중 IFM 전달 패브릭 대역폭, 3 중 OFM 전달 패브릭 대역폭, 및 MU 열당 3 개의 가산기 트리들이 사용될 수 있다.
활성화들은 최대 2 배의 속도로 IFM 전달 패브릭(104)을 거쳐 SRAM(109)으로부터 입력된다. 타일 제어 FSM(144)은 각각의 캐시 레인(146)에서 처리되도록 남아있는 IFM 데이터의 양을 추적한다. 캐시 레인들 중 하나가 방금 가득 찰 때, 타일 제어 FSM(144)은 적어도 하나의 레인 캐시가 방금 가득 찼음을 글로벌 제어 FSM(140)에 알릴 수 있다. 캐시 공간이 확보 될 때까지 타일 캐시 레인(들) 오버플로우를 방지하기 위하여, 글로벌 제어 FSM(140)은 SRAM 제어 FSM(142)에 의해 제어되는 IFM 판독을 스로틀(throttle)(스톨 (stall))할 수있다.
컨볼루션 윈도우 스캔(convolution window scan)이 완료되고 IFM 사이클링이 완료된 경우 (그리고 상기 윈도우는 다음 위치로 변환된다), 글로벌 제어 FSM(140)은 또한 타일 제어 FSM (144)에 통지 할 수있다. 따라서, 타일들이 열 누산기들을 올바르게 재설정하고 한 위치의 컨볼루션과 다음 위치에서 컨볼루션을 혼합하지 않는다. IFM 사이클링의 개념은 나중에 정의되고 설명된다.
타일 제어 FSM(144)은 각각의 레지스터 파일의 출력 포트에 대한 리드 어드레스(read address) 및 리드 인에이블(read enable)을 포함하여 각각의 캐시 레인 레지스터 파일(169)로부터 IFM 데이터를 판독하는데 필요한 신호들을 생성한다. 각각의 클록 사이클에서, 결과들은 리덕션 패브릭(111)에 의해 감소될 수 있도록 타일(102)이 처리를 완료하고 다른 타일이 처리를 완료하기를 기다리지 않으면, 타일 제어 FSM(144)은 하나 또는 두 개의 데이터 값을 리드(read)한다(하나의 포트 또는 두 캐시 포트로부터 부응하여). 단일 클럭 당 하나 또는 두 바이트를 독출되는 지 여부는 활성화 희소성에 의존한다. ABU IFM 스테이징(staging) FIFO(165)가 하나의 슬롯과 2 바이트emfdmf 비우는 경우와 ABU IFM 스테이징 FIFO(165)가 두 개의 슬롯들을 비우는 경우, ABU (141) 내의 IFM 버퍼 (124)는 활성화가 희소한지를 체크(check)하고, 타일 컨트롤 FSM(144)가 1 바이트를 로드하도록 타일 제어 FSM (144)에 통지 할 수 있다.
도 1q의 표는 컨볼루션 윈도우가 어느 위치(x, y)에서 다음 위치로 평면 방향으로 슬라이드됨에 따라, SRAM(109)부터 중복되는 읽기를 방지하기 위하여 1x1, 2x2, 3x3, 및 4x4의 컨볼루션 윈도우 사이즈로 컨볼루션 동작을 수행하는 동안, 모든 IFM 슬라이스들을 보유하기에 충분한 캐시 사이즈를 나타낸다. 표의 데이터는 SRAM(109)으로부터의 단일 독출은 전형적으로 로컬 레지스터 파일(169)로부터의 단일 독출에 비해 상당히 많은 전력을 소비하기에, "지그-재그" 스캔 시퀀스는 IFM 캐시(139)의 사용을 최대화하여 SRAM(109)으로부터의 독출 및 전력 소비를 최소화하도록 작용할 수 있기 때문에, 승산기 유닛(103)의 레지스터 파일(134)이 18 개의 웨이트 레지스터들을 포함하고 컨볼루션 윈도우가 입력 텐서(input tensor)를 "지그-재그"시퀀스(아래에서 설명됨)로 스캔한다고 가정한다.
예를 들어, 지그-재그 스캔 값 또는 매개 변수, 2로 설정된 Z(아래에 더 설명됨), 그리고 18 개의 웨이트들(2 개의 3x3 8-비트 컨볼루션 커널 또는 1 개의 3x3 16-비트 컨볼루션 커널을 보유하기에 충분함)을 보유하는 Mu(103)과 함께, 레지스터 파일(169)은 20 바이트 크기를 가질 필요가 있다.
뉴럴 네트워크은 적어도 하나의 피승수(활성화 및/또는 웨이트)이 0 인 피승수들의 50% 내지 90%를 가질 수 있다. 예를 들어, 이것은 웨이트 프루닝(weight pruning)을 적용한 후 Inception v3 뉴럴 네트워크의 경우일 수 있다. MR 타일(102)이 multiply-by-zero 발생들을 효율적으로 스킵하면, MR 타일(102)은 제로 스키핑(zero skipping)없이 처리하는데 걸리는 시간 (예를 들어, 100% - 80% = 20%) 내의 데이터를 5 배 더 빠르게 처리 할 수 있다. 전술 한 바와 같이, 일부 실시 예들에서, MR 구현은 캐시가 2 개 이상의 피승수 입력들을 사용하여 데이터(곱셈에 사용되거나 생략될)를 충분히 빠르게 전달하도록 구성 될 수 있다. 본 명세서의 일부 블록도에서, 설명의 단순성 및 명확성을 위해 듀얼 입력 대역폭 (그리고 단지 두 개의 딥(deep)인 활성화 버퍼(124))만이 도시된다. 그러나, IFM 활성화 버퍼(124)의 뎁스는 2 보다 클 수 있고, 대응하는 속도 증가(0으로 곱셈을 건너 뛰지 않는 구성에서)는 충분한 스파스 데이터(sparse data)에 대해서는 2배보다 더 클 수 있다는 것이 이해 될 것이다.
도 1b 내지 도 1h와 관련하여 위에서 설명한 바와 같이, 그리고 다음 단락에 설명 된대로, IFM 캐시(139) 및 ABU(141)의 적절한 동작에 의해 데이터 희소성은 처리 연산량을 크게 개선하기 위해 사용될 수 있다. 도 1R은 입력 레이어 컨벌루션을 개시하기 위해 IFM 텐서(SRAM(109)에 저장된) 내의 시작 위치에 위치한 3x3 컨볼루션 윈도우를 도시한다. 레이어 컨벌루션 동작을 시작하기 위하여, 9 개의 IFM 슬라이스들(a0[0..15] ~ i0[0..15])가 SRAM(109)으로부터 독출되고, IFM 패브릭(104)을 거쳐 타겟 타일(102)으로 전달되고, 각각의 타겟 타일(102)의 IFM 캐시(139)에 라이트된다. 도 1s는 요소들 중 몇몇은 0 인 데이터의 다른 예시를 도시한다.
도 1t는 레이어 컨벌루션 동작이 시작되기 직전에 (SRAM으로부터) 도착 순서대로 정렬된 값을 이용하여 데이터가 IFM 캐시(139)에 논리적으로 저장될 수 있는 방법을 도시한다. 그리고, 도 1t은 반드시 값의 실제 저장 주소에 따른 그것들의 배열을 보여주지는 않는다. 본 예시에서, 3x3 컨볼루션이 수행된다. 명확성을 위해, 도면들은 비록 캐시는 컨볼루션 윈도우의 움직임을 수용하기 위해 더 저장할 수 있음에도 불구하고, 9 개의 (3 x 3 = 9) 8-비트 활성화 값들을 도시한다. 유사하게, 도 1u는 0 값들을 갖는 일부 활성화들을 명시적으로 가지는 도 1t로부터의 본 예시를 도시한다.
도 1v는 일부 실시 예들에 따른 활성화 브로드캐스트 유닛(141)의 단일 레인(171)을 도시한다. 각각의 ABU 레인(171)은 레지스터 파일를 사용하여 구현 될 수 있는 IFM 레인 스테이징 FIFO(173), 레인 멀티플렉서(multiplexer)(163), 레인 제어 로직 모듈(lane control logic module) (146) 및 활성화 레인 숫자타입 변환 회로(activation lane numeric type conversion circuit) (148)를 포함한다. 각각의 ABU 레인(141)은 타일 제어 FSM (144) 및 다른 ABU 레인과 함께 그 레인에서 활성화 스키핑, 즉 0의 값을 갖는 활성화 요소들의 스키핑을 제어 할 수 있다.
uint8, int8, uint16, int16, uint24, int24, uint32, int32 등을 포함한 다양한 비트 폭들의 부호있는 및 부호없는 데이터를 처리하는 승수기 회로들(multiplier circuits)을 단순화하기 위하여, 활성화 레인 숫자타입 변환 회로(148)는 부호있는 2의 보수 숫자 인코딩으로부터 부호 및 8 비트 크기 포맷으로 활성화들을 더 변환 할 수 있다. 또한, 각각의 ABU 레인(171)은 신호들의 활성화 레인(137) 세트의 일부로서 MR 열들(133) 내의 연관된 행의 승산기 유닛들 (126)로 활성화들을 브로드캐스트할 수 있다.
레인 IFM 스테이징 FIFO(173)는 2 개의 입력 포트들과 2 개의 출력 포트들을 가지며, 두 값들의 딥(two-values deep)일 수 있다. 2 개의 입력 포트들은 클록 사이클 당 최대 2 개의 활성화들(바이트)의 속도로 IFM 캐시(139)로부터 활성화들을 가져 오는 데 사용될 수 있다. 따라서 제로 값의 활성화들이 충분하면, MU 컬럼들 내 2 개의 가산기 트리들, 2 개의 입력 포트들 및 2 개의 출력 포트들을 갖는 레인 캐시, 및 2의 뎁스를 갖는 스테이징 버퍼(173)를 갖는 결과로서 클록 사이클 당 최대 2 개의 활성화들을 처리할 수 있다. 일부 실시 예들에 따르면, 클럭 당 더 많은 수의 활성화들(예: 클록 당 3 개의 활성화들)을 달성할 수 있을 정도로 IFM 데이터가 충분히 희박할 것으로 예상되는 경우, 상기 활성화들은 MU 열당 3 개의 가산기 트리들, 3 개의 레인 캐시 입력/ 출력 포트들, 3 개의 스테이징 FIFO 입력 포트들, 및 3 의 스테이징 FIFO 뎁스를 갖는 회로를 사용하여 처리될 수 있다 (이 컨텍스트에서 "스테이징 FIFO"는 IFM 레인 스테이징 FIFO(173)이다).
활성화가 제로인지 아닌지를 승산기(126)에 통지하기 위하여, 레인 제어 로직(146)은 신호들의 활성화 레인(137) 세트의 일부로서 승산기(126)의 연관된 행으로 제어 신호들의 세트를 브로드캐스트할 수 있다. 활성화가 0이면, 제어 신호들은 레인의 위치와 스테이징 FIFO의 깊이(오프셋)를 포함하여 0을 대체하기 위해 논-제로 활성화가 다중화되고 있음을 나타내므로, 각 승수기(126)는 곱셈에 사용할 정확한 웨이트 및 가산기 트리를 선택할 수 있다. 비슷하게, 올바른 인접 IFM 채널에 위치된 올바른 스테이징 FIFO(173)의 깊이 오프셋으로부터 활성화 레인(137)으로 활성화들을 다중화하기 위하여 레인 제어 로직(146)은 또한 레인 멀티플렉서(163)를 제어한다.
도 1v는 2 개의 버퍼링된 활성화들 중 하나를 인접한 레인의 위로 제공하고, 2 개의 버퍼링된 활성화들 중 하나를 인접한 레인의 아래로 제공하고, 2 개의 버퍼링된 활성화들을 레인 활성화 멀티플렉서(163)로 제공하기에 충분한 4 개의 출력 논리 연결들을 갖는 IFM 레인 스테이징 FIFO(173)을 도시한다. 도 1v는 4 개의 출력 논리 연결들을 갖는 스테이징 FIFO(173)을 도시하지만, 도시된 실시 예에서 FIFO(173)는 단지 2-값-깊이(two-value-deep)이고 따라서 동시 출력을 위해 이용 가능한 2 개의 값들만을 보유하기 때문에, FIFO(173)에는 2 개의 물리적 출력 포트들만을 가진다.
도 1wa는 IFM의 처음 두 벡터들이 독출된 후 (도 1C에 도시된 바와 같이), 4 개의 개별 IFM 레인 스테이징 FIFO들(173)(명확한 설명을 위해 16이 아님)를 갖는 IFM 스테이징 FIFO(165)의 컨텐츠를 도시한다. 이 상태에서, FIFO는 어느 활성화 값이 0이고 어느 것이 0이 아닌지를 체크할 수 있다. 일부 실시 예들에 따르면, 각 FIFO 레지스터는 제로 검출기(예: 8-입력 NOR 로직)을 포함한다. 각 레인 스테이징 FIFO(173)은 해당 레인에서 어떤 활성화들이 사용되었는지(예: 빌려서, 도 1d에 도시된 바와 같이 "홀(hole)"을 생성하도록 빌리는)를 추적하는 각 레인 제어 로직(146)로 어떤 활성화들이 0인지를 보고한다. 각 레인에 대한 제어 로직(146)은 어느 활성화들이 0 인지를 포함하는 레인 스테이징 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)은 이 정보(활성화들은 0 또는 "홀들(holes)인)를 타일 제어 FSM(144)로 전달한다. 타일 제어 FSM(144)은 (i) 다중화될 데이터(도 1wb 및 1d에서, b0는 레인 0에, c1은 레인 1에, b2는 레인 2에, b3은 레인 3에, 등) 그리고 (ii) 모든 레인으로부터의 제어 로직(146)으로부터의 입력을 사용하는 것에 관하여 결정하고, 전체 FIFO 열이 홀들 및/또는 제로들을 포함하는지 여부를 검출하므로 생략 될 수 있다. 후자가 발생하면, 타일 제어 FSM(144)은 (i) 캐시로 하여금 두 개의 값 (하나 대신에)을 페치하도록 하고그리고 (ii) FIFO로 하여금 이러한 두 값들(하나 대신에)을 받아들이도록 하여 전체 홀- 및/또는-제로(hole-and/or-zero) FIFO 열을 스킵할 수 있다. 또한, 그 레인(전체 열과 대조적으로)과 관련된 IFM 레인 스테이징 FIFO(173) 내 복수의 값들이 제로들 및/또는 홀들을 포함하는 경우, 레인 제어 로직은 캐시로 하여금 두 값들을 페치하도록 한다.
예를 들어, 레인 1 (출력 c1)은 출력할 6 가지 선택들을 가질수 있다: c0, c1, c2 (c2는 0) 및 b0, b1(b1은 또한 0) 및 b2. 멀티플렉서(163)는 이들 6 가지 선택들 중 하나를 출력한다. 출력할 선택은 타일 제어 FSM(144)에 의해 결정된다. 이를 달성하기 위해, 멀티플렉서(163)는 하나의 레인 위의 두 FIFO 열들, 하나의 레인 아래의 FIFO의 두 열들, 및 멀티플렉서(163)와 동일한 레인 내 두 개의 FIFO 열들로부터 데이터를 가져올 수 있도록 구성 될 수 있다. 이 능력은 예를 들어 도 1ma 및 1mb에 도시된 것과 유사한 회로를 사용하여 구현될 수 있다. 앞서 이러한 도면들의 설명에서 언급한 바와 같이, 위와 아래의 한 레인에서 데이터를 검색 (및 다중화)하는 능력을 "룩-어사이드(look-aside) of 1"이라고 한다. Second-from-right FIFO 열까지 데이터를 검색하고 (멀티플렉싱)하는 능력을 "룩-어헤드(look-ahead) of 2"라고 한다. 각각의 IFM 스테이징 FIFO(165) 열 및 레인 조합은 이와 관련된 별도의 룩-어헤드 및/또는 룩-어사이드 값을 가질 수 있다. 그러나, 명확성 및 단순화를 위해, IFM 스테이징 FIFO(165) 내에서 모든 열들 및 레인들은 동일한 관련 룩-어사이드 값 및 동일한 룩-어헤드 값을 갖는 것으로 가정될 수 있다. 또한, 룩-어헤드와 룩-어사이드의 개념들에 의하여 커버되지 않고, 예를 들어 스테이징 FIFO로부터 입력을 동일한 활성화 레인으로 전달하는 것과 레인 0과 15를 2 개의 인접한 레인들 중 하나를 갖지 않는 레인 0과 15를 보상하기 위한 더 유연한 방식으로 연결하는 것을 방지하는 것을 포함하며, 각각의 멀티플렉서(163)가 얼마나 많은 입력들을 가지고 있는지, 그리고 그 입력들이 어디에 연결되어 있는지에 기초하여 다른 변형들이 채택될 수 있다.
룩-어헤드 및/또는 룩-어사이드는 2 보다 클 수 있다. 더 큰 숫자들은 제로 활성화들을 보다 최적으로 스키핑하여 더 좋은 성능을 도출한다. 따라서, 타일 계산 시간을 더욱 감소될 수 있다. 룩-어사이드 및/또는 룩-어헤드 수들이 더 커질 때, 각 레인은 논-제로 활성화를 검색할 위치에 관한 더 많은 선택들을 가지기 때문에, 이 장점은 달성 될 수 있다. 논-제로 활성화들의 더 많은 선택들은 모든 레인에 논-제로 활성화들을 더 고르게 분산시킬 수 있다. 그로 인하여, 가장 큰 활성화들을 가지는 레인이 계산을 완료 할 때까지 타일 처리가 완료 되기를 기다려야 하는 서로 다른 수의 활성화를 갖는 다른 일부 레인들과는 대조적으로 각 레인은 거의 동일한 수의 거의 동일한 수의 논-제로 활성화들을 갖는다. 앞서 언급 한 바와 같이, 별도의 관련된 공개 (attorney docket no. 1535-467CON2)에 기재된 바와 같이, 논-제로 활성화들의 확산은 활성화 레인들 및 관련 웨이트들을 유사-랜덤하게 섞음(shuffling)으로써 달성될 수 있다.
도 1wc는 룩-어헤드는 2이고 룩-어사이드는 각각의 FIFO 열에 대해 2이며, 멀티플렉서(163)는 10 개의 입력들을 가지는 구성을 도시한다. 이러한 실시 예에서, 상기 FIFO는 2-뎁스(two-deep)일 수 있고, 이에 따라 2 개의 출력 포트들을 가질 수 있다.
도 1wd는 룩-어헤드가 3이고 룩-어사이드가 1이고, 멀티플렉서(163)가 9 개의 입력들을 갖는 구성을 도시한다. 이러한 실시 예에서, 상기 FIFO는 3 뎁스일 수 있고 3 개의 출력 포트들을 가질 수 있다.
도 1wde는 룩-어헤드 와 룩-어사이드 모두 3이고, 멀티플렉서(163)가 15 개의 입력들을 갖는 구성을 도시한다. 이러한 실시 예에서, 상기 FIFO는 3 뎁스일 수 있고 3 개의 출력 포트들을 가질 수 있다.
활성화 브로드캐스트 유닛(141) 및 타일 제어 FSM(144)은 도 1e 내지 도 1g에 도시된 동작에 유사하게 관련될 수 있다. 예를 들어, 도 1e는 이전 클럭 사이클에서 c1을 빌린(가장 오른쪽에서 두 번째 열부터 다중화 됨) 경우, 레인 제어 로직(146)(c1이 원래 있던 레인에서)이 추적하는 "홀"이 생성되는 것을 도시한다. 각각의 레인 제어 로직(146)은 타일 제어 FSM(144)에게 IFM 스테이징 FIFO(165) 내의 어느 데이터 셀이 제로 또는 비어 있는지를 통지하여 타일 제어 FSM(144)은 활성화 멀티플렉서(163)를 적절히 제어 할 수 있다. 타일 제어 FSM(144)은 멀티플렉서 제어가 활성화들을 확산시켜 처리량을 증가시키거나 최적화하도록 결정한다. 일부 레인들은 (동일 타일 내)은 대부분 제로들을 가지면서 일부 레인들은 많은 논-제로 활성화들을 가지도록 불균형하게 하는 것과는 대조적으로, 모든 레인들이 동일한 수의 논-제로 활성화들을 가지면, 최적의 처리량이 달성 될 수 있다. 대부분 제로들을 가지는 레인들은 많은 논-제로 활성화들을 가지는 레인들보다 더 빨리(즉, 모든 논-제로 활성화들을 더 빨리 출력 할 수 있음) 계산을 완료할 수 있다. 이것은 타일의 계산 종료를 지연시키고 제로-리치(zero-rich) 레인에서 승수기 활용률을 감소시킬 수 있다.
다른 예로서, 레인 제어 로직(146)은, 도 1g에 도시된 상태에서, 또한 타일 제어 FSM(144)으로부터 멀티플렉서 선택 신호를 수신하여 (i) 생성된 홀들 및 (ii) 활성화가 멀티플렉싱된 곳을 추적한다. 레인 제어 로직(146)은 이 정보를 승산기 유닛(126)의 연관된 행으로 브로드캐스트하여 활성화가 비순차적으로(예를 들어, 도 1g에서, "순서대로(in order)"는 활성화 버퍼로부터 g0이 g0으로 표시된 활성화 레인으로 출력됨을 의미한다) 다중화될 때, 그 행의 각각의 승산기 유닛(126)은 그 비순차적 활성화(out-of-order activation)를 그에 대응하는 웨이트로 곱할 수 있다.
예를 들어, 상기 활성화가 가장 오른쪽부터 두 번째(second-from-rightmost) 스테이징 FIFO 열로부터 한 레인에서 위로부터 멀티플렉싱된 경우, 이 활성화를 곱하기 위한 해당 웨이트는, 도시된 바와 같이 (각 칼럼에 대해) 하나의 레인 위의 승수기 단위로 위치한다.
룩-어헤드가 2 보다 큰 경우(예: 3) 그리고 가장 오른쪽에서 세 번째(third-from-rightmost) 열에서 활성화가 검색되면, 검색될 해당 웨이트는 3 - 1 = 2 어헤드(ahead)이다. 즉, 순차적 활성화가 웨이트 "w[row, col, i]"와 곱해지면, 곱하기에 적절한 웨이트는 대신"w[row, col, i+2]"이다.
도 1H는 활성화들이 다중화될 때 (더 비순차적), 전체 FIFO 열 (16 개 레인들 모두)이 비어있게 되는 (0들 또는 홀들만 포함) (처리량 관점에서 유리한) 상황을 도시한다. 타일 제어 FSM (144)은 이 조건을 검출하고, IFM 캐시(139)에게 두 개의 FIFO 열들이 동시에 소비되기(가장 오른쪽에있는 모든 제로 열은 스킵하고(삭제) 가장 오른쪽에 있는 열은 계산을 위해 브로드캐스트된다) 때문에 두 개의 값들을 FIFO에 로드하도록 지시한다. 이것은 타일 내 계산 지연을 한 클럭 사이클만큼 감소시킨다.
도 1x는 누적-및-리턴(accumulate-and-return) 유닛 (ARU) (167)을 도시한다. ARU 167의 역할은 도트-곱 계산을 완료하고 활성화 기능을 적용하여 (적용 가능한 경우) 저장을 위해 OFM 전달 패브릭을 통해 저장을 위한 SRAM으로 전송을 준비하는 완료된 출력 특징 맵(OFM)을 생성한다. 도 1N에 도시된 바와 같이, 각각의 MR 열(133)은 가산기 트리(128A 또는 128B) 당 하나씩 2 개의 ARU들(167)를 포함한다.
ARU (167)는 하나의 로컬 가산기 트리(128A) (또는 128B) 및 하나의 리덕션 패브릭(111)으로부터 2 개의 입력들을 가진다. 각각의 ARU (167)의 중앙에는 가산기(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)를 통해 OFM 전달 패브릭(106)으로 가는 도중에 스케일링, 바이어스 및 활성화 기능을 바이패스하여 FIFO (198)를 출력 할 수 있다. 가산기(181)를 바이패스하는 멀티플렉서(183)는 예를 들어 축적을 개시하도록 가산기 트리 값을 누산기(130A)에 직접 로딩할 수 있게 한다.
멀티플렉서(174)는 (i) ARU(167)가 위치한 동일한(로컬) 타일 내의 가산기 트리들, 그리고 (ii) 로컬("인트라-타일(intra-tile)") 가산기 트리들 (128A 및 128B)을 다수의 타일들로부터 승수기 단위(예: 32 또는 64 또는 128 또는 256 가산기 단위들)의 곱들을 감소시킬 수 있는 더 큰 ("인터-타일(inter-tile)") 가산기 트리들로 결합하는 구성 가능한 가산기 트리를 포함하는 리덕션 패브릭(111) 사이의 (적용 가능한 경우, 부분 경로와 함께 스케일, 바이어스 및 활성화 응용 프로그램) "리턴"을 위해 ARU (167)에 대한 입력 소스를 선택할 수 있다.
타일 제어 FSM은 각각의 MR 열(133)의 어느 레인 및 가산기 트리가 각각의 부분 IFM 감소를 얻기 위해 사용되었는지 추적하기 때문에, 타일 ARU(167)는 타일 제어 FSM(144)에 의해 제어된다. ARU(167)는 하나는 FIFO(198)와 온더플라이 풀링 로직(196)를 통해 OFM 전달 패브릭(106)을 연결하는 하나와 FIFO (179)를 통해 리덕션 패브릭(111)에 연결하는 하나를 포함하여 두 개의 출력들을 가진다. 또한, 타일 제어 FSM(144)은 출력 FIFO들(198 및 179)의 상태를 추적한다. 각각의 타일(102)은 제로 활성화 스킵핑(zero activation skipping)의 예측불가능성(unpredictability)으로 인해 약간 다른 속도로 계산을 수행하기 때문에, 다른 타일들보다 (더 빨리) 앞서 실행되는 타일들로부터의 출력들을 지연시킴으로써 각 출력 FIFO들(198 및 179)는 타일 출력들의 동기화를 복원한다. 타일 출력들이 리덕션 패브릭(111)에 의해 추가로 감소 될 수 있고 이것은 추가 가산기 트리 스테이지들의 세트로 간주할 수 있고 따라서, (타일들로부터) 그것의 입력들이 병렬로 동기화되어 도착되기 때문에, FIFO(179)에 의해 동기화된 타일 출력들을 가지는 것이 요구될 수 있다. 유사하게, 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 전달 패브릭 (106)을 거쳐 결과들을 전송하고, 그 결과를 SRAM (109)에 저장하기 위해 함께 작동한다.
활성화를 위하여 하나의 데이터 유형을 그리고 웨이트들을 위하여 다른 데이터 유형을 임의적으로 사용할 수있는 것을 포함하여 다양한 비트 폭의 부호있는 및 부호없는 입력 및 출력 데이터 유형을 지원하기 위하여 활성화 숫자타입 변환기(135)는 누산-및-리턴 유닛(167)과 함께 작동한다 ("믹싱 데이터 유형(mixing data types)"을 참조).
일부 실시 예들에 따르면, 다음과 같은 데이터 유형이 사용될 수 있다: 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 데이터 유형을 자유롭게 선택할 수도 있다.
다음과 같이 동작들 위해 활성화들은 준비될 수 있다. 사용자에 의해 지정된 바와 같이, 활성화들은 SRAM (109)에 예를 들어 int8 또는 uint8, 또는 int16 또는 uint16으로 저장될 수 있다. 도 1l에 도시된 바와 같이, IFM 데이터는 캐시로 (즉, IFM 캐시(139)로) 페치된 다음, 활성화 숫자유형 변환기(135)를 포함하는 활성화 브로드캐스팅 유닛(141)을 통과할 수 있다. 제1 단계로서, 구글 텐서플로우(Google TensorFlow)에서 사용된 바와 같이 "제로 포인트" 오프셋 양자화를 사용하여 활성화들이 양자화되면, 타입 변환기(135)는 "제로 포인트" 오프셋을 활성화들에 추가한다. 이어서, 8 비트 부호없는 승산기들(126)를 사용하여 부호있는 또는 부호없는 8 비트보다 넓은 데이터 유형(예: 16 비트 웨이트 및/또는 16 비트 활성화)을 곱할 수 있도록 적절한 변환을 적용함으로써 숫자타입 변환기(135)는 활성화들을 준비한다. 도 1k에 도시된 바와 같이, 각 레인마다, 활성화 브로드캐스트 유닛 (141)은 1-비트 부호 sact와 함께 활성화의 8 비트 절대 값(act_abs[7:0]) 을 브로드캐스트한다. 활성화 수치 타입 변환기(135)에 의해 적용된 변환은 int8/uint8을 "부호 및 8-비트 절대 값(sign and 8-bit absolute value)"으로 변환한다. 입력 활성화가 uint8이면, 타입 변환기(135)는 출력 브로드캐스트 8-비트 절대 값을 입력 uint8 값 (즉, 변환 없음)과 동일하게 설정하고, 브로드캐스트 부호를 0으로 설정한다 (이는 음이 아닌 값(non-negative value)이 표시됨을 의미).
입력 활성화 데이터 유형이 int8이면, 활성화 수치 타입 변환기(135)는 출력 절대 값을 활성화의 절대 값으로 설정하고, 활성화가 음성이면 출력 부호를 1로 설정하고, 그렇지 않으면 출력 부호를 0으로 설정한다.
다음과 같이 동작들 위해 웨이트들은 준비될 수 있다. 사용자에 의해 지정된 바와 같이, 웨이트들은 SRAM (109)에 int8 또는 uint8, 또는 int16 또는 uint16으로 저장될 수 있다. 웨이트들이 MU 레지스터들에 로드되면, 상기 웨이트들은 웨이트 압축 해제 유닛(138) 내에서 (활성화들을 변환하기 위해 활성화 숫자타입 변환기(141)에 의해 사용된 것과 동일한 변환을 사용하여) 변환된다. 웨이트들은 8-비트 절대 값과 1-비트 부호로 저장된다. 도 1K 및 1N을 참조하면, 웨이트들이 SRAM(109)으로부터 MU 레지스터들로 로딩되고 버티컬 웨이트로드 버스들(101)를 거쳐 승산기 유닛(103)으로 입력 될 때, int8 및 uint8로 표시된 값들은 8 비트 절대 값(wt_abs_ld_in[7:0][C])과 1-비트 부호 표현(swt_in[C])으로 변환된다.
8-비트 곱셈은 다음과 같이 수행 될 수 있다. 승산기(126)는 부호없는 8-비트와 부호없는 8-비트를 처리하는 승수기일 수 있다. 곱셈 연산은 8-비트 절대 값 및 1-비트 부호 표현(8-bit-absolute-value-and-1-bit-sign representation) 으로 표현되는 활성화 및 웨이트를 입력으로써 취할 수 있다. 승산기(126)는 2 개의 8-비트 절대 값들을 곱하고, 2 개의 부호들을 배타적 논리합(exclusive OR)한다. 두 개의 8-비트 절대 값들의 곱이 0이면 출력 부호가 0으로 설정된다. 승산기(126) (그것의 부호가 수반되는 16-비트 절대 값)의 출력은 int17로 변환되어 가산기 트리(128A) (또는 128B)로 전달된다. 이어서, 가산기 트리(128)는 열 승수기 유닛들으로부터 수신된 부호있는 int17 값들을 감소시키고, 상기 부호있는 합계를 가산기 트리와 연관된 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 사이클 출력은 변환(8-비트 웨이트와의 곱셈의 경우)에 의해 발생된 16-비트 절대 값 및 부호의 최하위 바이트 (LSB) 일 수 있다. 활성화 브로드캐스트 유닛(141)의 제2 사이클 출력은 변환(8-비트 웨이트와의 곱셈의 경우)에 의해 발생된 16-비트 절대 값 및 부호의 최상위 바이트 (MSB) 일 수 있다. MSB 곱이 부호 확장 시프트(sign extended shift) (175) (및 멀티플렉서(177))를 이용하여 8 비트들 위로 시프트 될 수 있다는 점을 제외하고, (각각 부호있는 int17로 변환되는) 두 부분 곱 결과들 모두는 컬럼의 누산기(130A 또는 130B)로 (통상적으로, 열 가산기 트리(128A 또는 128B)를 통해 열 누적-및-리턴 유닛(column accumulate-and-return unit) (167)에) 전송 될 수 있고, 누산기(130A) (또는 130B)에 의해 함께 가산 될 수 있다.
상기 웨이트가 16-비트(uint16 또는 int16)이면, 4 개의 클럭 사이클들을 사용하여 (16-비트) 활성화 및 웨이트의 곱셈을 수행할 수 있다. 활성화 브로드캐스트 유닛(141)의 제1 사이클 출력은 활성화의 변환으로부터 발생된 16-비트 절대 값 및 부호의 LSB(least significant byte)일 수 있다. 승산기(126)는 동시에 웨이트의 16-비트 절대 값의 LSB를 입력할 수 있다. 그리고, 제1 곱셈이 수행될 수 있다. 제2 싸이클 동안, 활성화의 동일한 부분이 (즉, 16-비트 절대 값의 LSB 및 활성화의 변환으로부터 발생된 부호) 웨이트의 16-비트 절대 값의 MSB와 함께 승산기에 다시 입력될 수 있고, 제2 곱셈이 수행될 수 있다.
활성화 브로드캐스트 유닛(141)의 제3 사이클 출력은 활성화의 변환으로부터 발생된 16-비트 절대 값 및 부호의 MSB(most significant byte)일 수 있다. 승산기는 동시에 웨이트의 16-비트 절대 값의 LSB를 입력할 수 있다. 그리고, 제3 곱셈이 수행될 수 있다. 제4 싸이클 동안, 활성화의 동일한 부분이 (즉, 16-비트 절대 값의 MSB 및 활성화의 변환으로부터 발생된 부호) 웨이트의 16-비트 절대 값의 MSB와 함께 승산기(126)에 다시 입력될 수 있고, 제4 곱셈이 수행될 수 있다. 제2 및 제3 부분 곱 각각은 부호 확장된 업-시프터(175) 및 멀티플렉서(177)를 사용하여 제4 부분 곱에 대해 8 비트들 및 16 비트들만큼 가산되기 전에 프리 시프트될 수 있다는 것을 제외하고, 4 개의 부분 곱 결과들은 각각 (일반적으로, 열의 관련 가산기 트리(128A 또는 128B)를 통해 열의 누적-및-반환 단위로) 열 누산기(130A) (또는 130B)로 출력되고 함께 합해질 수 있다.
컨볼루션 동작을 수행하는 것은 SRAM(109)에 저장된 IFM 텐서의 트래버싱(traversing) 그리고 IFM 전달 패브릭(104)을 통해 전달되는 일련의 IFM 슬라이스들로서 IFM 텐서의 컨텐츠를 하나 이상의 타일들(102)로 스트리밍하는 것과 관련된다. IFM 텐서는 (그리고 설명의 명확성을 위해 지금 생략되는 배치 인덱스) (x, y, d)로 표현된 좌표를 갖는 3 차원을 가지며, x 및 y 인덱스들은 활성화의 평면 좌표에 대응하고 인덱스 d는 뎁스 채널에 대응한다. 뉴럴 프로세서(100)는 특정 시퀀스 내에서 (x, y, d) 인덱스 값들을 통해 사이클링함으로써 IFM 텐서를 트러버스(traverse)한다. 본 명세서에 사용된 바와 같이, (x, y) 좌표상에서의 사이클링은 "평면" 트래버셜 및 그리고, d 좌표 관련 사이클링은 "뎁스-와이즈(depth-wise)" 트래버셜을 나타낸다.
다음 몇 개의 단락들은 IFM 캐시(139)의 사용을 포함하여 평면 트래버셜을 설명한다. 도 1n을 참조하면, IFM 전달 패브릭(104)은 IFM 캐시(139)를 통해 IFM 타일(102)로 연결될 수 있다. 각각의 타일(102) 당 하나의 IFM 캐시(139)가 있으며, 각각은 연관된 타일에 국부적으로 배치된다. (각 타일마다) IFM 캐시(139)를 사용하는 것은 SRAM(109)으로부터의 독출들의 수를 감소시키는 데 도움이 된다. SRAM (109)으로부터의 독출들의 수를 감소시키는 것은 (i) 뉴럴 프로세서의 전체 전력 소비에 대한 SRAM(109)의 기여를 감소시키는 것, (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 슬라이스 독출, 하나 또는 두 개의 OFM 슬라이스들의 기입, 부분 결과 독출 또는 기입, 및 AXI 인터커넥트(114)에 의해 요청된 슬라이스 독출 또는 기입일 수 있다.
4 개 이상의 I/O 동작들이 동일한 SRAM 뱅크 (109)에 상주하는 데이터에 동시에 액세스해야하거나 하나 이상의 I/O 동작들이 동일한 뱅크의 데이터에 액세스해야함으로써, SRAM 뱅크 중재 로직(SRAM bank arbitration logic)으로 하여금 AXI 액세스 또는 IFM 데이터 페치 또는 OFM 데이터 쓰기 또는 부분 결과 I/O가 중단되도록 하여 잠재적으로 계산이 중단되면, 뱅크 액세스 충돌(bank access collision)이 발생할 수 있다. 따라서, IFM 캐시(139)는 SRAM 유닛들(109)로부터의 IFM 독출을 감소시킬 수 있고, 이에 의해 이러한 유형들의 스톨들(stalls) 기회를 감소시키는 작용을 할 수 있다.
나중에 더 자세히 설명하겠지만, 웨이트 커널 사이즈가 특히 크면, 계산은 여러번에 걸쳐 수행된다. 그리고 부분적으로 완료된(partially-finished) 계산 결과들("부분 결과들"또는 "부분들")은 SRAM(109)에 저장될 수 있다. 수용 가능한 계산 정밀도를 유지하기 위하여, 일반적으로 부분 결과물은 IFM 데이터 및 OFM 데이터와 비교해 볼 때 상당히 긴 비트 폭 (예: 4 또는 6 바이트들)을 갖는다. SRAM으로의(부터의) 긴 비트 폭을 갖는 부분 결과물을 기록하고 판독하는 것은 대응적으로 더 높은 SRAM 대역폭을 소비한다. 이는 SRAM 뱅크 액세스 충돌의 기회들을 증가시키고 결과적으로 AXI 및/또는 계산의 중단될 수 있다. 따라서, IFM 캐시(139)는 특히 부분 결과들을 사용하는 계산들에 대하여 SRAM I/O 병목 현상의 완화를 도울 수 있다.
통신 버스 영역이 중요한 경우, IFM 전달 패브릭 트래픽을 줄이는 것은 중요하다. 도 1p에 도시된 바와 같이, IFM 전달 패브릭(104)은 클록 당 최대 2 개의 IFM 슬라이스들을 IFM 캐시(139)에 전달할 수 있음이 앞서 기술되었다. IFM 전달 패브릭이 동시에, 예를 들어 매 단일 클록마다, N 개의 슬라이스들을 IFM 캐시(139)에 전달할 때, IFM 전달 패브릭(104)은 "N 슬라이스들의 폭"을 갖는 것으로 지칭될 수 있다. 각 타일로 국부적으로(locally) IFM 슬라이스들을 캐싱함으로써, 계산에 필요한 IFM 슬라이스가 이미 타일에 의해 로컬로 캐싱되어 처리 가능하도록 준비됨으로써, IFM 전달 패브릭(104)은 유휴 상태를 유지할 수 있다. 유휴 사이클을 갖는 IFM 전달 패브릭(104)은 (100% 미만의 활용률을 가지는) 유휴 사이클들(idle cycles)을 사용하여 여분의 IFM 슬라이스들을 전송하는 것을 가능하게 한다. 따라서 전체적인 "유효한(effective)" IFM 전달 대역폭은 2 배를 초과한다. 따라서, IFM 전달 패브릭(104)의 면적이 부족한 경우, 전체 IFM 전달 대역폭을 1x 이상으로 계속해서 유지하고 때로는 2x 이상에 도달하는 동안, IFM 전달 패브릭(104)의 폭은 예를 들어 2 개의 슬라이스들에서 1 개의 슬라이스로 감소 될 수 있다.
아래에서 알 수 있듯이, IFM 캐시(139)는 1보다 큰 커널 평면 폭 및/또는 높이를 가지는 컨볼루션 동작들에 대한 가장 큰 이점을 제공한다. "뎁스-와이즈(depth-wise)" 컨볼루션들 (커널 폭과 높이가 모두 1 인 것들) 및 완전히 연결된 계산들(fully-connected computations)은 IFM 캐싱으로부터 이점을 얻을 수 있지만 일반적으로 드문 상황에서만 가능하다.
일 실시 예에 의해 제공되는 솔루션을 이해하기 위하여, IFM 캐시 히트율은 증가시키도록 설계된 "지그-재그" 평면 트래버셜(planar traversal)라고 하며, 도 2aa 내지 도 2ad에 도시된 바와 같이, 먼저 2x2x16x16 웨이트 커널을 사용하여 단순하고 나이브한 방식으로 IFM 텐서를 평면적으로 트래버셜하는 것을 고려할 필요가 있다. 여기서, 2x2는 웨이트 커널의 평면 높이 및 폭을 나타낸다. 16은 IFM 뎁스(즉, 하나의 슬라이스)를 나타낸다. 1은 OFM 뎁스를 나타낸다. 그러나, 설명의 명확성을 위해, 컨벌루션은 순전하게 평면, 즉 2x2x1x1로 취급될 수 있다. 도 2aa는 IFM 텐서의 좌측 상단 코너에 위치한 컨볼루션 (커널 웨이트) 윈도우와 함께 시작하는 컨볼루션 동작을 도시한다. 그 위치에서 2x2 컨벌루션을 계산 한 후, 윈도우는 오른쪽으로 한 픽셀만큼 슬라이드한다. 윈도우가 IFM 텐서의 우측 상단 코너에 도달 할 때까지, 슬라이딩 과정이 뒤따르는 계산이 반복된다. 오른쪽 상단에서 한 번 컨벌루션이 계산된다. 그리고 도 2ab에 도시된 바와 같이, 컨볼루션 윈도우는 이제 오른쪽 대신 한 행 아래로 슬라이드된다. 이어서, 컨볼루션 윈도우가 IFM 텐서의 좌측 에지에 도달할 때까지, 컨볼루션 윈도우가 왼쪽으로 계속적으로 슬라이드되는 것을 제외하고, 도 2ac에 도시된 바와 같이, 동일한 계산-및-슬라이드 단계들(compute-and-slide steps)가 더 반복된다. 도 2AD에 도시된 바와 같이, 컨볼루션 윈도우는 다시 한 번 한 행 아래로 슬라이드된다. 이러한 단계들을 반복하면, 결국 IFM 텐서의 완전한 평면의 스캔(트래버셜)이 발생된다. 윈도우가 지배적으로 수평적으로 슬라이드되기 때문에 (즉, 내부 루프는 x 좌표를 순환하기 때문에), 이러한 스캔은 "수평적"(수직과 대조적으로) 이라 칭할 수 있다.
도 2ba 내지 도 2bl에 도시된 바와 같이, 단순하고 나이브한 "수평적"스캔과 연동되어 IFM 캐시(139)를 사용하는 것을 고려한다. 컨볼루션 동작의 시작에서, IFM 캐시(139)가 클리어되고, 2x2 컨볼루션 윈도우는 IFM 텐서의 왼쪽 상단 코너에 배치된 다음 해당 시작 위치에서 컨볼루션을 계산하는 데 필요한 4 개의 IFM 값들을 검색한다. 도 2ba에 도시된 바와 같이, 4 개의 IFM 값들 중 첫 번째는 IFM 센서 내에서 가장 좌측 상단 위치로부터 검색된다. 이 위치는 행 0 그리고 열 0에 있다고 칭할 수 있다. 캐시가 클리어되었기 때문에, 행 0, 열 0에서 IFM 값은 IFM 캐시(139)가 아니라 SRAM(109)으로부터 검색되어야 한다. 따라서, 캐시 미스가 발생하고, 상기 캐시 미스는 도 2ba에서 "M"으로 표시된다. 일단 검색되면, 상기 IFM 값이 캐시된다. 도 2bb는 행 0, 열 1에서 검색된 (상기 4의)상기 제2 IFM 값을 도시한다. 상기 캐시는 그 위치(행 0, 열 1)와 관련된 값을 포함하지 않으므로, "M"으로 표시된 다른 캐시 미스가 발생한다. 행 0, 열 0에있는 위치의 옅은 음영(light shading)은 이전 단계에서 검색된 IFM 값이 캐시되었음을 나타낸다. 도 2bc 및 2bd는 각각 캐시 미스를 초래하는 나머지 2 개의 IFM 값들의 검색을 도시한다. 이 시점에서 네 개의 IFM 값들이 모두 검색되었다. 현재 위치에서의 컨벌루션 계산이 완료될 수 있다. 네 개의 IFM 값들도 모두 캐시되었다. 컨볼루션 윈도우은 하나의 열만큼 오른쪽으로 이동한다.
도 2be 내지 도 bh는 새로운 위치에서의 컨볼루션을 계산하기 위해 4 개의 IFM 값들의 검색을 도시한다. 도 2be에서, 행 0, 열 1에서 IFM 값을 검색하면 캐시 히트가 발생하여 SRAM 리드가 필요없게 된다. 유사하게, 도 2bg는 각각 캐시 미스를 유발하는 다른 2 개의 IFM 값들을 검색하는 동안, 행 1, 열 2에서 다른 캐시 히트를 도시한다.
컨볼루션 윈도우가 계속 슬라이딩됨에 따라, 도 2bi 내지 도 2bl (및 도 2be 내지 도 2bh)에서 어두운 음영(dark shading)으로 표시된 바와 같이, 컨볼루션 윈도우가 가장 오른쪽 가장자리의 IFM 텐서까지 완전히 슬라이딩하고, 하나의 로우 아래로 슬라이드하고, 그리고 캐시된 값으로 다시 슬라이드할 때까지, 가장 최근에 캐시 된IFM 값은 오랜 시간 동안 또는 전혀 계산에 참여하지 않을 것이다. 따라서, 일단 컨벌루션 윈도우가 슬라이딩하면, 캐시 사이즈를 작게 유지하기 위해 이러한 값은 캐시로부터 제거될 수 있다.
도 2bl 내지 도 2bl은 두 개의 캐시 히트들과 두 개의 캐시 미스들이 발생하는 다음 4 개의 IFM 값들을 검색하여 다음 위치에서 (오른쪽으로 한 스텝) 컨볼루션을 계산하는 것을 도시한다. 도 2bm에 도시된 바와 같이, 컨볼루션 윈도우가 오른쪽으로 한 단계씩 움직일 때마다 4 개의 IFM 값들(옅은 음영으로 표시) 중 2 개가 한 번 재사용되므로, 2x2 컨벌루션 동안 IFM 값을 수평적으로 캐싱하는 것은 약 50% 캐시 히트 확률(비율)을 발생시킨다. 더 일반적으로, 수평적 캐싱과 연동하여 HxW 평면 커널 사이즈를 사용하고 충분한 크기의 캐시를 가정하는 컨볼루션은 H*(W-1)/(H*W) 캐시 히트율을 초래한다. 이러한 컨볼루션에 충분한 캐시 사이즈는 타일 당 레인 당 (W-1) 바이트일 수 있다. 그러나, 후술하는 바와 같이, 뉴럴 프로세서(100)는 또한 "IFM 웨이트 사이클링"을 사용하여 도트-곱 계산 동안 승산기 단위들의 웨이트들을 순차적으로 사이클링함으로써 여러 IFM 채널들을 도트 곱으로 누적할 수 있다. 그러므로 나중에 분명해지겠지만, 가장 일반적인 경우, 최대 캐시 사이즈는 타일 당 레인 당 (8-비트 웨이트 데이터 유형들의 경우 18과 동일) MU 웨이트 레지스터 파일(127)에 저장된 웨이트들의 수와 같다.
도 2ba 내지 도 2bm, 캐시 사이즈를 상대적으로 작게 유지하기 위하여 캐시 값들은 적극적으로 제거될 필요가 있다. 도 2bm를 참조하면, 컨볼루션 윈도우가 행 R (행 2) 위로 슬라이딩함에 따라, 이전 행 R-1 (행 1)로부터의 IFM 값들이 캐시로부터 제거된다 (행 1, 열 2에서 캐시 미스 "M"으로 나타낸다). 캐시 히트율을 "H*(W-1)/(H*W)"이상으로 높이려면, 예를 들어, IFM 텐서의 하나 이상의 행들의 캐싱 값들(caching values)이 고려될 수 있다. 그러나 전체 IFM 텐서 행을 캐싱하기 위하여 캐시 사이즈를 증가시킬 필요가 있다. 따라서, 일반적으로 캐시 사이즈는 IFM 텐서 폭의 함수가 된다. IFM 텐서 폭은 일반적으로 ASIC 설계시에는 알 수 없고, IFM 텐서 폭이 상대적으로 크기 때문에, IFM 행들을 캐싱하는 것은 실리콘 면적의 측면에서 비싸다. 따라서, 바람직하지 않다. 컨볼루션 윈도우가 주로 수평 대신에 (즉, 평면 좌표 내부 루프는 행 번호를 반복한다) 수직으로 스캔 될 때, 대칭적인 경우에 동일한 추론이 적용된다.
단순하고 나이브한 평면 스캔과는 대조적으로, 일부 실시 예는 컨벌루션 동작 동안 "지그-재그" 형태로 IFM 텐서의 평면 트래버셜(planar traversal)을 수행한다. 캐시 사이즈를 작게 유지하는 동안, 지그-재그 평면 트래버셜은 캐시 히트율을 높이데 도움이 될 수 있다. 도 2c는 이러한 실시 예에서 컨볼루션 윈도우가 변위(슬라이드) 될 수있는 아래-오른쪽-위-오른쪽-위-오른쪽 지그-재그 경로를 도시한다. 단순하고 나이브한 수평 트래버셜과는 달리, 하나가 아니라 두 개의 컨벌루션들(수직으로 인접한 위치들에서)을 계산 한 후, 도 2c의 컨볼루션 윈도우는 오른쪽으로 슬라이딩한다. 따라서, 단순하고 나이브한 수평 트래버셜에 의한 한 행의 결과들과 대조적으로, 컨볼루션 윈도우에 의한 IFM 텐서의 단일의 완전한 레프트-투-라이트(left-to-right) 엣지-투-엣지(edge-to-edge) 스윕은 컨볼루션 결과들의 두 행들을 생성한다.
더 일반적인 경우, 지그-재그 트래버셜는 단일 수평 IFM 텐서 스윕에서 처리된 출력 행들의 수에 대응하는 "Z 번호"를 사용하여 매개 변수화될 수 있다. 예를 들어, 도 2c에서 Z 번호는 2와 동일하다. 나중에 알게 되듯이, Z 번호가 높을수록 캐시 히트율이 높아진다.
도 2c에서, 단일 수평 스윕 당 결과물들의 두 행을 생성하는 지그-재그 트래버셜은 폭이 2 배이지만 높이는 절반인 IFM 텐서 상에서 나이브한 수평 트래버셜을 수행하는 것으로 상상될 수 있다. 더 일반적으로, 지그-재그 트래버셜 경로(zig-zag traversal path)는 H와 W는 각각 IFM 텐서의 높이와 너비인 IFM 텐서 컨볼루션을 완료하기 위하여 총 H/Z 스윕들을 사용한 H*Z 컬럼들의 길이의 단일(수평) 스윕으로 "언롤드(unrolled)"되는 것으로 판단된다. 예를 들어, 도 2c에서, Z = 2이다. 따라서, 단순하고 나이브한 스캐닝에 의해 HxW IFM 레이어를 트래버싱하는 대신, 화살표 경로의 길이는 대략 H*Z = W*2 이다. 그래서, 논리 IFM 레이어 폭은 "W*Z = 2W"이다. 반면에, 논리 IFM 레이어 높이는 "H/Z = H/2"이다. 단순하고 나이브한 수평면(horizontal)은 "Z = 1"인 지그-재그 트래버셜과 동일 할 수 있다.
도 2da 내지 도 2dd는 컨볼루션 윈도우의 제1 위치에 대해 "Z = 1"인 지그-재그 트래버셜을 도시한다. 네 개의 IFM 값들을 모두 검색하는 경우, 캐시 누락이 발생하여 네 개의 SRAM 독출들이 발생한다. 컨볼루션 윈도우의 다음 위치에 관해, 두 개의 IFM 값들을 더 페치하면 캐시 미스가 발생한다. 반면에, 다른 두 개의 IFM 페치 위치들이 컨볼루션 윈도우의 이전 위치와 중복되므로, 도 2de 내지 도 2dh에 도시된 바와 같이, 2 개의 캐시 히트들이 발생한다.
도 2di 내지 도 2dl에 도시된 바와 같이, 컨볼루션 윈도우의 다음 위치에 관해, 2 개의 IFM 값들은 캐시 미스들이고, 2 개의 IFM 값들은 컨볼루션 윈도우의 이전 위치와 겹치며 각각에는 캐시 히트가 발생한다. 컨볼루션 윈도우의 다음 위치에 대해, 하나의 IFM 값은 캐시 미스이다. 세 개의 IFM 값들은 컨볼루션 윈도우의 이전 위치와 겹치고, 도 2dm 내지 도 2dp에 도시된 바와 같이, 캐시 히트이다. 이와 같이, 도 2DQ-2DX를 추가로 참조하면, 지그-재그 경로의 사용은 캐시 히트와 캐시 미스의 비율을 크게 향상시킨다.
도 2e는 이상적인 캐시(즉, 무한대의 용량을 가지며 어떤 값들을 제거하지 않는 캐시) 내 SRAM 독출들의 수에 대하여 지그-재그 트래버셜과 관련된 실제 SRAM 독출들의 수를 도시한 테이블이다. 따라서, 도 2e의 표는 지그-재그 트래버셜 측정 효율이다. 이 테이블은 단일 스윕을 수행하는 동안 주어진 Z에 대해 캐시 사이즈들이 충분하다고 가정한다. 즉, 이전 스윕으로부터의 값은 제거된다. 테이블에서 작은 숫자는 더 높은 효율성에 대응한다. 그리고 "1.0"이 이상적인 경우이다. 컨벌루션 사이즈(Conv size)는 제곱 웨이트 커널들의 평면 크기(planar dimensions)를 나타낸다. 예를 들어, "Z = 2"인 지그-재그 트래버셜을 사용한 3x3 컨볼루션은 이상적인 캐시를 사용하는 3x3 컨볼루션에 비하여 2 배 더 많은 SRAM 독출들을 발생시킨다. 그러나, "Z = 1", (즉 단순하고 나이브한 (예를 들어, 수평) 트래버셜)을 갖는 지그-재그 트래버셜을 사용하는 3x3 컨볼루션은 이상적인 캐시를 사용하는 것에 비하여 3 배 더 많은 SRAM 독출들을 발생시킨다. 따라서, 이 경우, "Z = 2"인 지그-재그 트래버셜은 단순하고 나이브한 트래버셜에 비해 SRAM 독출들의 횟수를 "3/2 = 1.5x"만큼 줄인다. 반면에, 아래에 기술된 공식에 의해 계산된 바와 같이, zig-zag "Z = 2" 및 "Z = 1" 둘 다에 대한 캐시 사이즈는 단순하고 나이브한 트래버셜은 거의 변경되지 않는다. 캐시 Z가 많을수록 SRAM 독출 카운트는 더 크게 줄어든다. 예를 들어, 캐시 Z를 4로 증가시키면, 3x3 컨볼루션에 대해 "3/1.5 = 2x" SRAM 독출이 절감된다.
도 2f는 IFM 캐시를 공급하기 위해 사용되고 클록 당 하나의 IFM 슬라이스가 처리되는 것으로 가정하는 클록 당 평균 예상 IFM SRAM 독출들의 테이블을 도시한다. 예를 들어, 캐시없는 100% (즉, 모든 클록)와 비교하면 그리고 (예: 단순하고 나이브한 트래버셜 방식) 캐시 "Z = 1"을 사용하여 시간의 20%와 비교하면, 캐시 "Z = 4"를 이용한 5x5 컨볼루션은 평균 시간의 8%만의 SRAM 독출을 수행한다.
도 2ga 내지 도 2gb는 캐시 히트/미스 카운트들 및 캐시 사이즈의 도출을 도시한다. 지그-재그 트래버셜은 컨볼루션 윈도우가 "Z-1" 행씩 수직으로 슬라이드하고 나서 한 열씩 옆으로 슬라이드하는 2 단계 시퀀스 반복에 수반한다. 단순성을 위해 IFM 텐서 엣지들에서 특별한 경우들을 무시하면, 하나의 열만큼 옆으로 (도 2ga에서 오른쪽으로) 슬라이딩하는 평면 사이즈 WxH의 컨볼루션 윈도우는 H 캐시 미스들("m"으로 마크됨) 및 H*(W-1) 히트들을 발생시킨다. Z-1 행들을 수직으로 (도 2gb에서 아래로) 슬라이딩하는 다음 단계는 (Z-1) 캐시 미스들 및 (Z-1)*(H*W-1) 캐시 히트들을 발생시킨다.
따라서, 일단 컨볼루션 윈도우가 수평적으로 한 열 만큼 슬라이드하면, 컨볼루션 윈도우는 현재 계산을 위한 커널 윈도우 내부에서 이전에 캐시된 (이전의 수직 변환 동안 캐시된, 도 2GA에서 "c"로 마크됨) 값들을 사용할 수 있다. 또한, 윈도우가 (아래, 2ga에서) 수직으로 슬라이딩하기 시작할 때, 커널 윈도우 (아래, 2ga에서) 외부에서 "c"로 마크된 이전에 캐시된 값들은 캐시에 저장되어 있어야 한다. 또한, 컨볼루션 윈도우가 Z-1 행을 아래로 그리고 한 열만큼 오른쪽으로 슬라이드하고 그리고 복원된 후, SRAM으로부터 페치된 값들("m"으로 마크됨)을 현재 위치에서 계산에 사용될 캐시에 추가해야 한다. 다음, 컨볼루션 윈도우가 한 행 아래로 슬라이딩할 때마다, 하나의 캐시 값(왼쪽 상단)이 제거되고 SRAM으로부터 하나의 값("m"으로 마크됨)이 추가된다. 따라서, 도 2gb에서 "c" 마크들의 수를 카운트하면, 필요한 캐시 사이즈는 "(H+(H+Z-1)*(W-1))"이다.
후술하는 바와 같이, 웨이트 사이클링(weight cycling)이 사용되면, 캐시 사이즈는 임의의 타일에 동시에 저장된 커널들의 수와 동일한 인자만큼 증가될 수 있다. 전술하는 바와 같이, 컨볼루션 커널이 작을 때, 상기 시스템은 여러 평면 커널들을 각 MU(103)에 저장할 수 있다. 예를 들어, MU(103)가 18 개의 웨이트 레지스터들을 가지며 컨볼루션이 2x2이면, 4 개의 2x2 커널들이 MU 웨이트 레지스터들(127)에 저장될 수 있다. 예를 들어, 64 개의 채널들 "0 ... 63"을 갖는 IFM 데이터의 도트 곱은 시간에 따라 4 개의 저장된 커널들을 싸이클링함으로써 OFM 0... 7로 계산될 수 있다. 상기 시스템은 채널(0 ... 15)를 유지하는 IFM 슬라이스를 페치하고, (4 개 중) 첫 번째 커널을 곱하고, 그리고 타일의 누산기 내에 결과를 유지할 수 있다. 상기 시스템은 채널이 "16 ... 31" 인 IFM 슬라이스를 페치하고, (4 개 중) 두 번째 2x2 커널을 곱하고, 그리고 이미 저장된 누산기 값에 결과를 합할 수 있다. 상기 시스템은 세 번째 커널과 네 번째 커널에 대하여 상기 단계들을 반복 할 수 있다. 또한, 이러한 IFM들 캐시될 수 있고, 이에 따라 캐시 사이즈가 증가된다. (나이브한, 지그-재그, 다른 어떤) 평면 변환 방법의 선택에 관계없이 IFM 캐시 사이즈는 상한(upper limit)을 가진다. 그러나, 이는 승산기 단위 웨이트 레지스터 파일(127)의 사이즈의 함수이다. 이는 각 캐시된 IFM 슬라이스는 곱해질 웨이트 레지스터 파일 내에서 해당 웨이트를 가져야하기 때문이다. 그리고, 웨이트 레지스터 파일 자체는 예를 들어 18 웨이트들로 제한된다. 또한, 동일한 추론은 웨이트 레지스터 파일 사이즈와 같은 하한(lower bound)을 갖는 IFM 캐시 사이즈로 변환된다.
따라서, IFM 캐시 사이즈는 최대 "(H + (H+Z-1)*(W-1)-1)"로 설정해야 하며, MU_WEIGHTS는 가능한 모든 지원되는 H 및 W 조합들에 인수된다. 여기서, MU_WEIGHTS는 승수기 단위 웨이트 레지스터 파일(127)의 사이즈와 동일하다 (예: 18). 예를 들어, 뉴럴 프로세서(100)가 승산기 유닛(103) 당 18 웨이트들을 가지면, 뉴럴 프로세서(100)는 "Z = 2"의 지그-재그 트래버셜 및 커널 웨이트 평면 사이즈에 대한 모든 자연수 H 및 W를 지원한다. 따라서, "H*W <18"이 되도록 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 데이터를 저장할 수 있다. 따라서, 9 개의 16-비트 웨이트들을 저장할 수있는 MU 웨이트 레지스터(127)와 유사하게, IFM 캐시(139)는 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-비트, 또는 그 이상인 경우, 지그-재그 (단순하고 나이브한) 캐싱이 사용될 수 있다. 그러나 (IFM cache(139)의 사이즈와) MU 웨이트 레지스터 파일(127)의 사이즈를 IFM_DATA_TYPE의 3x3xsize_of(IFM_DATA_TYPE)로 늘리는 것이 추천된다. 이것은 부분 결과물의 사용에 의지함이 없이, 자주 사용되는 3x3 평면 사이즈의 웨이트 커널이 관련(convolve)될 수 있다. 이것은, 후술하는 바와 같이 바람직하지 않을 수 있다.
앞에서 설명한 것처럼, SRAM IFM 페칭, IFM 전달 패브릭(104)을 통한 IFM 슬라이스들의 전송, 로컬 타일들(102) 내에서 IFM 값들을 캐싱하는 것, (대개 각 활성화 레인마다 다소 다른 비율로) 캐시된 IFM 값들 검색하는 것, 그리고 타일들(102) 사이에서 OFM 결과들을 재동기화하는 것의 적절한 제어를 실행하기 위하여, 글로벌, 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)을 적용하기 위해 나중에 값을 독출함이 없이 즉석에서 풀링(pooling)을 계산하기 위해 OFM 값들을 수신 할 수 있다. ARU(167)은 도 2ha 내지 도 2hd에 도시된 바와 같이, 각 컨벌루션 OFM 결과를 전송하지 않고 각 풀링 출력이 완료 될 때까지 풀링 로직(196)의 레지스터 에 컨벌루션 결과를 유지함으로써, 풀링 윈도우가 겹치지 않는 경우 풀링을 수행 할 수 있다. 각 풀링 출력이 완료된 후에만, ARU(167)는 풀링 출력을 SRAM(109)에 기록한다. 최대 풀링의 경우, ARU(167) 레지스터의 출력 레지스터는 최대 값을 갖고, 이 값은 컨벌루션 출력과 비교되고, 최신 OFM 출력이 현재 최대 값을 초과 할 때 업데이트된다. 일단 풀링 윈도우가 슬라이드되면, 최대 동작을 새로 시작하기 위해 ARU(167)의 출력 레지스터가 리셋된다. 평균 풀링을 위해, 풀링 윈도우가 슬라이드될 때까지, ARU(167)의 누산기가 OFM 출력을 계속 추가할 것을 유지할 수 있다. 그리고 나서, 누산기는 평균을 계산하기 위하여 "1/(POOLING_WIDTH*POOLING_HEIGHT)"에 의하여 곱해진다. 그리고 상기 평균은 라운드(round)되고, SRAM 109에 라이트된다. 일단 풀링 윈도우가 슬라이드되면, 누적기가 재설정되어 평균화(averaging)을 새로 시작한다.
예를 들어, 도 2ha는 (각 풀링 윈도우에서) OFM 값들을 순차적으로 계산하는 방식으로 IFM 레이어가 트래버스되는 2x2 평면 풀링과 함께 "Z = 2"가 수행된 지그-재그 평면 트래버셜을 도시한다. ARU(167)의 출력은 각각의 4 개의 OFM 값들을 생성하여 각각의 풀링을 하나씩 계산하기 때문에, ARU 풀링 로직(196)은 최대 풀링을 계산하기 위해 4 개의 연속 결과들 중 최대 값을 취할 수 있다. 도 2hb는 "Z = 3" 및 3x3 평면 풀링(planar pooling)을 갖는 지그-재그 평면 트래버셜을 도시한다. Z 값이 풀링 커널 높이와 같기 때문에, 지그-재그 방식으로 IFM 계층을 트래버싱하는 경우, 자연스럽게 각 풀링 윈도우 내 OFM 데이터가 발생된다. 여기서, 상기 OFM 데이터는 최대 및 평균 폴링에 적합한 순서로 생성된다. 도 2hc는 "Z = H = 4"의 추가적인 예시를 제공한다. 여기서 H는 풀링 커널의 높이를 나타낸다.
도 2hd는 Z = 4이고 풀링 커널의 높이는 2가 되도록 Z 값이 풀링 커널의 높이와 일치하지 않는 경우를 도시한다. 이 경우, 풀링 로직(196)은 풀링을 (도시된 바와 같이, 상위 2x2 및 하위 2x2) 두 영역들로 세분화하고 추가 레지스터를 사용하여 (도 2hd에서 하위 2x2) 두 풀링 영역들 중 하나로부터 미완성된 결과들을 일시적으로 저장할 수 있다. 더 일반적으로, 지그-재그 풀링 윈도우 높이는 지그-재그 트래버셜의 높이의 자연수의 배수일 수 있다. 적절한 숫자들은 2, 3 및 4를 포함할 수 있다. 전술한 바와 같이, 지그재그 풀링 수직 스트라이드(zig-zag pooling vertical stride)은 지그재그 트래버셜 높이와 같아야 하며, 이것은 이 경우에만 온더플라이 풀링을 제한한다. 출력 풀링 로직(196)이 풀링 로직의 충분한 카피(copy)를 갖는 한, 풀링 윈도우는 수평적으로 겹칠 수 있지만, 그러한 모든 수평적-오버랩핑 풀링 윈도우들(horizontally-overlapping pooling windows)에 대해 각각의 수평적-오버랩핑 풀링 윈도우들을 병렬로 처리한다. 일반적으로 지그재그 풀링 윈도우 폭 및 스트라이드는 임의적으로 예를 들어 2, 3 및 4를 포함하는 적절한 풀링 윈도우 폭의 수들을 가질 수 있다.
풀링 윈도우가 수직으로 겹치는 경우, 온더플라이 풀링에 문제가 있거나 및/또는 (최대 및 평균이 아닌) 커스텀 풀링(custom pooling)이 필요한 경우 풀링은 (i) SRAM 뱅크(109) (도시되지 않음) 근처에 리드-수정-라이트(read-modify-write) 로직을 배치하는 것 및/또는 (ii) AXI 인터페이스를 통해 SRAM을 외부 CPU, GPU, DSP, 또는 다른 유형의 컴퓨팅 코어로 독출하는 것, 풀링을 수행하는 것, 그리고 AXI 인터페이스를 통해 NPU SRAM에 결과들을 다시 라이트하는 것에 의하여 수행될 수 있다. 또한, SRAM 뱅크들(109) 근처의 리드-수정-라이트 로직은 부분 결과들을 다시 타일들로 전송하지 않고 부분 결과들을 효율적으로 합하기 위해 재사용될 수 있다.
특정 동작(예: 컨볼루션 또는 완전히 연결된 레이어 계산)을 수행하도록 구성하기 위하여, 뉴럴 프로세서(100)는 동작(예: 동작 유형, 스트라이드, 등)의 파라미터들 및 이용 가능한 하드웨어에 "매핑"되는 계산과 함께 IFM 및 OFM 텐서 사이즈들은 고려되어야 한다. 각각의 개별 타일(102)은 고정된 수의 16 IFM 뎁스 채널 입력들 및 8 개의 OFM 뎁스 채널 출력들만을 가질 수 있다. 반면에, 딥 러닝 뉴럴 네트워크 모델 레이어의 뎁스 채널들의 수는 다양하며 일반적으로 16과 8을 훨씬 초과한다. 매핑 알고리즘은 큰 IFM 및 OFM 텐서를 부분들(서브-텐서들)로 세분화하기 위해 오프라인으로 (런타임 시간과 대조적으로 컴파일 시간 동안) 실행되고, 계산을 위한 이용 가능한 타일들에 상기 부분들을 할당하고, 그리고 이용 가능한 타일들로부터의 출력이 어떻게 계산을 완료하기 위해 재조립될 수 있는지에 대한 설명(구성)을 생성 할 수 있다. 아래에보다 더 상세히 설명되는 바와 같이, 또한, 매핑 알고리즘은 평면 방향 및 특히 깊이 방향으로 IFM (그리고 상응하는 OFM) 텐서 트래버셜의 순서를 결정할 수 있다. 특정 매핑 문제, 즉 주어진 IFM, OFM, 및 웨이트 텐서 사이즈들 및 동작 파라미터들에 대한 복수의 솔루션들이 있을 수 있기 때문에, 매핑 알고리즘은 또한 최저 전력, 최저 SRAM 사이즈, (승수기 활용률을 최대화하여 달성) 최저 계산 대기 시간, 및/또는 이들의 조합(예: 사용 가능한 고정된 SRAM 사이즈에 의하여 주어진 최저 전력)에 대한 솔루션을 최적화할지를 나타내는 파라미터를 받아들일 수 있다.
사소한 것으로부터 점점 더 진보된 예시들로의 진행으로서, 일부 실시 예들의 매핑 동작의 양상들은 일련의 예시들로부터 이해될 수 있다. 설명의 명확성을 위해, 제로 활성화 스키핑과 관련된 특징들은 무시될 필요가 있다. 그리고, 활성화 스키핑은 매핑에 크게 영향을 미치지 않음에 따라, 오직 하나의 가산기 트리와 누산기만 가지도록 (즉, 계산이 "덴스(dense)"하다) 각 OFM 열은 가정된다. 지그재그 평면 번환 방법을 포함한 캐싱은 또한 무시할 필요가 있다. 그리고 왜냐하면, 캐싱은 매핑에 크게 영향을 미치지 않기 때문에 컨벌루션 윈도우는 래스터 방식으로 움직인다 (평면 방향으로 슬라이딩). 도 3aa 내지 도 3ak에 도시된 제1 예시에서, 3x3x16x8 컨볼루션은 단일 타일(102)을 사용하여 계산된다. 도 3aa는 16 개의 뎁스 채널들을 갖는 IFM 슬라이스를 입력들으로서 수용하고 8 개의 뎁스 채널들을 갖는 OFM 슬라이스를 생성하는 타일(102)을 도시한다. 예를 들면, 도 3ab에 도시된 바와 같이, IFM 텐서(304)의 사이즈는 64x64x16이다. OFM 텐서(303)의 사이즈는 64x64x8이다. 그리고, 웨이트 텐서(302)의 사이즈는 3x3x16x8이다.
처음에는, 도 3ac에 도시된 바와 같이, 웨이트들은 SRAM(109)으로부터 MU 웨이트 레지스터 파일(127)로 미리 로드된다. 웨이트 커널(302)의 사이즈는 3x3x16x8이다. 3x3의 평면 크기를 가지면, 웨이트 커널(302)은 도 3ac에서 A 내지 I로 표시되는 "3*3 = 9" 평면 "위치들"을 가진다. 각각의 평면 위치는 하나의 OFM 채널에 대해 16-길이 IFM 값 벡터를 갖는 도트 곱을 계산하는데 사용되는 16-길이 웨이트 벡터와 연관된다. 도 3ac에 도시된 바와 같이, 8 개 OFM 채널들이 있으므로, 웨이트 커널(302)은 각각의 OFM 채널에 대해 하나의 3D 텐서를 갖는 것으로 생각될 수 있다.
구체적으로, 웨이트들은 다음과 같이 MU 웨이트 레지스터 파일들(127)에 로딩될 수 있다. 전체 MR 어레이(122) 내의 복수의 MU 웨이트 레지스터 파일들은 디멘젼(dimensions) (MU 당 18 개의 웨이트들, 16 개의 MU 행들 및 8 개의 MU 열들) 3x3x16x8의 텐서로 생각될 수 있다. 여기서, 텐서는 전체 웨이트 커널을 보유하기에 충분한 18x16x8 사이즈를 갖는다. 18x16x8의 웨이트 레지스터 파일 텐서 크기는 "(3x3)x16x8"로 다시 기입될 수도 있다. "(3x3)x16x8"에서, R 행, C 열에서 각 MU 웨이트 레지스터 파일은 "3x3 = 9" 평면 위치들(x, y)의 9 개의 웨이트들을 웨이트 텐서 W x H x R x C에 저장하고, 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]}", 등을 저장한다. 타일들(102)은 열방향 가산기 트리를 사용하여 도트 곱을 "수직적으로" 계산하므로, 로드된 웨이트의 기술된 순서는 각 평면 위치 "A... I"에서 IFM 입력의 도트 곱을 계산할 수 있다는 것을 알 수있다.
도 3ad을 참조하면, 컨볼루션 윈도우가 시작 위치에 위치될 수 있고, 8 개의 누산기들(130)(전술 한 바와 같이 맵핑 설명의 명확성을 위해 8 개의 OFM 채널들 각각에 대해 1 개가 존재한다)이 클리어될 수 있다.
도 3ae를 참조하면, 타일(102)은 SRAM(109)으로부터 IFM a[0 ... 15]("a ... z"는 IFM의 평면 위치를 나타내고 "0 ... 15"는 IFM 깊이 채널을 나타냄)를 리드(read)하고, 그 값들을 타일(102)의 8 개의 열들로 브로드캐스트할 수 있다. 제1 열에는 사전로드된 웨이트들 "A0[0] ... A0[15]"와 "a[0 ... 15]"가 요소별로 곱해질 수 있고, 제2 열에는 사전로드된 웨이트들 "A1[0] ... A1[15]"와 "a[0 ... 15]"가 요소별로 곱해질 수 있다. 결과 곱들은 각 열의 가산기 트리를 사용하여 수직으로 합산(감소)될 수 있고, 해당 누적기(130)에 더해질 수 있다. 하나의 위치에서 3x3 컨볼루션을 완료하기 위하여 (3*3 = 9 개 중에서) 8 개 이상의 평면 위치들이 처리되어야 하므로, 결과 도트 곱은 아직 완성된 결과가 아니다.
도 3af를 참조하면, 타일(102)은 SRAM(109)으로부터 IFM b[0 ... 15]를 리드하고, 그 값들을 타일(102)의 8 개의 열들로 브로드캐스트할 수 있다. 제1 열에는 사전로드된 웨이트들 "B0[0] ... B0[15]"와 "b[0 ... 15]"가 요소별로 곱해질 수 있고, 제2 열에는 사전로드된 웨이트들 "B1[0] ... B1[15]"와 "b[0 ... 15]"가 요소별로 곱해질 수 있다. 결과 곱들은 수직으로 합산될 수 있고, 해당 누적기(130)에 더해질 수 있다. 도 3ag를 참조하면, 타일(102)은 SRAM(109)으로부터 IFM c[0 ... 15]를 리드하고, 그 값들을 타일(102)의 8 개의 열들로 브로드캐스트할 수 있다. 제1 열에는 사전로드된 웨이트들 "C0[0] ... C0[15]"와 "c[0 ... 15]"가 요소별로 곱해질 수 있고, 제2 열에는 사전로드된 웨이트들 "C1[0] ... C1[15]"와 "c[0 ... 15]"가 요소별로 곱해질 수 있다. 결과 곱들은 수직으로 합산될 수 있고, 해당 누적기(130)에 더해질 수 있다.
도 3ah를 참조하면, 타일(102)은 SRAM으로부터 IFM g[0 ... 15]를 리드하고, 그 값들을 타일(102)의 8 개의 열들로 브로드캐스트할 수 있다. 제1 열에는 사전로드된 웨이트들 "D0[0] ... D0[15]"와 "g[0 ... 15]"가 요소별로 곱해질 수 있고, 제2 열에는 사전로드된 웨이트들 "D1[0] ... D1[15]"와 "g[0 ... 15]"가 요소별로 곱해질 수 있다. 결과 곱들은 수직으로 합산될 수 있고, 해당 누적기(130)에 더해질 수 있다. 도 3al를 참조하면, 타일(102)은 SRAM으로부터 IFM h[0 ... 15]를 리드하고, 그 값들을 타일(102)의 8 개의 열들로 브로드캐스트할 수 있다. 제1 열에는 사전로드된 웨이트들 "E0[0] ... E0[15]"와 "h[0 ... 15]"가 요소별로 곱해질 수 있고, 제2 열에는 사전로드된 웨이트들 "E1[0] ... E1[15]"와 "h[0 ... 15]"가 요소별로 곱해질 수 있다. 결과 곱들은 수직으로 합산될 수 있고, 해당 누적기(130)에 더해질 수 있다.
도 3aj를 참조하면, a 내지 o로 라벨링된 커널의 9 개의 위치들 중 나머지 위치에 대하여 유사한 동작이 수행될 수 있다. 누산기(130)에 저장된 값은 8-비트 출력 OFM 결과를 형성하기 위해 라운드될 수 있고, 모든 8 개의 OFM 결과들은 SRAM(109)에 라이트될 수 있다. 이것은 하나의 컨볼루션의 계산을 완료한다. 도 3ak에 도시된 바와 같이, 컨볼루션 윈도우는 하나의 열마다 평면 방향으로 변환될 수 있고, 그 동작들은 반복될 수 있다.
도 3ba 내지 도 3bc에 도시된 제2 예시에서, 3x3x16x128 컨볼루션은 단일 타일(102)을 사용하여 결정되거나 계산된다. 전술한 바와 같이, 편의상, 용어 "IFM 슬라이스"는 16 개의 IFM 뎁스 채널(즉, IFM 읽기 및 타일 입력의 단위)을 의미하도록 정의될 수 있다. 도 3ba에 도시된 바와 같이, 용어 "OFM 슬라이스"는 8 개의 OFM 뎁스 채널 (즉, 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를 스테핑하는 것"으로 지칭될 수 있다. 16 개의 단계들은 16 개의 직사각형들에 대응할 수 있다. 제1, 제2, 및 제16 직사각형들은 도 3bc에 도시된다. 16 단계들이 완료되면 3x3x16x128 컨볼루션들이 계산되는 것을 도 3bb 및 3bc부터 알 수 있다.
가설적으로, OFM을 충분히 작은 조각들로 간단히 분할함으로써 무제한의 OFM 채널들은 이러한 방식으로 처리될 수 있다. 시스템이 "OFM의 스텝(steps the OFM)"를 수행할 때마다, IMF는 전체적으로 다시 리드한다 (이 예시에서는 16 번). (전체) IFM의 각각의 독출은 "IFM 패스(pass)"로 지칭될 수 있고, 이러한 각 IFM 패스는 동작이 반복적으로 수행되는 경우 상당한 양의 에너지(또는 파워)를 소비할 수 있다. 특히 모바일 스마트폰과 같이 배터리로 구동되는 장치의 경우, 전력 소비를 감소시키는 것이 매우 바람직하다. 다음 예시는 에너지 코스트 중 일부를 피하기 위한 접근을 도시한다.
도 3ca 및 도 3cb에 도시된 제3 예시에서, 3x3x16x128 컨볼루션은 이번에 하나의 타일과는 대조적으로 16 개의 타일들을 사용하여 결정되거나 계산된다. 각각의 타일(102)은 "16*8 = 128" 승산기(126)를 가지므로, 16 개의 타일들은 "128 * 16 = 2,048" 승산기들을 가진다. IFM[0..15]는 모든 16 개의 타일들(102)로 브로드캐스트될 수 있다. 따라서, 타일(1)이 OFM[0..7]을 계산하고, 타일(2)는 OFM[8..15]을 계산하고, 등등 계속해서, 타일(16)은 OFM[120..127]을 계산한다. 본 발명에서 사용된 바와 같이, 용어 IFM "브로드캐스트"은 여러 MR 타일들(102)에 동시에 IFM을 입력하는 것을 의미한다. 타일(102)의 설명과는 대조적으로, 여기서 브로드캐스트는 단일 타일을 가지는 모든 MU 열들로 ABU 출력을 입력하는 것을 나타낸다.
뉴럴 프로세서(100)는 다수의 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 채널들이 생성될 수 있다. 그러므로 2 개의 OFM 단계들은 실행될 수 있다. 제1 단계는 OFM[0..127]을 계산하는데 사용되고 제2 단계는 OFM[128..255]를 계산하는데 사용된다. 두 개의 IFM 패스들이 사용될 수 있으므로, IFM을 완전히 두 번 독출한다. 두 단계를 통해 OFM을 형성하는 것은 도 3da에 도시된다.
도 3ea 내지 도 3eb에 도시된 제5 예시에서, 3x3x32x64 컨볼루션은 16 개의 타일들을 사용하여 결정되거나 계산된다. 16 개의 IFM 채널들을 가지는 앞선 예시와 다르게, 이 예시는 32 개의 IFM 채널들을 수반한다. 모든 32 IFM 채널들 (2 슬라이스들)은 SRAM(109)으로부터 동시에 독출될 수 있다. 뉴럴 프로세서(100)는 여러 SRAM 뱅크 세트들을 가질 수 있다. (매핑 실시 예에서) 각각의 뱅크 세트는 클록 사이클 당 1 슬라이스를 스트리밍할 수 있다. 따라서, 2 슬라이스들 (32 IFM 채널들)를 동시에 독출(스트림)하기 위하여, 2 개의 뱅크 세트들이 사용될 수 있다. 이 중에서, 제1 뱅크 세트는 IFM[0..15]을 스트리밍할 수 있고, 제2 뱅크 세트는 IFM[16..31]을 스트리밍할 수 있다.
도 3eb를 참조하면, OFM[0..7]의 계산은 타일(1) 및 타일(9)에 걸쳐 스플릿될 수 있다. 타일(1)은 IFM[0..15]를 미완료 OFM[0..7]로 감소(합)할 수 있다. 타일(2)은 IFM[16..31]를 미완료 OFM[0..7]로 합할 수 있다. 다음으로, OFM[0..7]의 계산은 타일(1)과 타일(2)의 출력들을 합함으로써 (및 바이어스, 활성화 기능, 등을 적용함으로써) 완료될 수 있다. 이러한 합을 수행하기 위하여, 타일(1) 및 타일(2)의 가산기 트리들은 하나 이상의 추가 하드웨어 가산기 스테이지들을 사용하여 "결합"될 수 있다. 리덕션 패브릭(111)은 이러한 추가 하드웨어 가산기 스테이지들을 제공한다. OFM[8..15](타일(2) 및 타일(10) 추가), ... OFM[56..63] (타일(8) 및 타일(16) 추가)에 대해 유사한 동작들이 사용될 수 있다. 도 3eb를 참조하면, 이 예시에서 타일들 (1..8)로부터 SRAM(109)으로의 출력은 없다. 후술하는 바와 같이, 타일들(9..16)만이 OFM들을 SRAM(109)에 저장한다.
도 3fa 내지 도 3fc에 도시된 제6 예시에서, 3x3x32x512 컨볼루션은 16 개의 타일들을 사용하여 결정되거나 계산된다. 도 3fa를 참조하면, 제5 예시에서와 같이, 2 개의 IFM 슬라이스들(IFM[0..31])가 2 개의 SRAM 뱅크들로부터 독출될 수 있고, 2 개의 IFM 슬라이스들 각각은 8 개의 타일들로 브로드캐스트될 수 있다. 이러한 8 개의 타일들의 2 개의 세트들은 함께 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 슬라이스들" 동작이 8 개의 OFM 단계들로 스플릿되었다. 각 OFM 단계는 "8 개의 OFM 슬라이스에 의한 2 개의 IFM 슬라이스들"와 관련된다. 도 3fc를 참조하면, 일부 실시 예들에서, 가상 SRAM 뱅크들은 (약 32 kB의 용량을 가질 수있는) SRAM 뱅크에 IFM 데이터가 부족하거나 OFM 데이터가 채워지는 경우들을 처리하기 위해 사용될 수 있다.
이러한 경우에, 뉴럴 프로세서(100)의 데이터 패브릭은 투명하게 다른 SRAM 뱅크 세트를 연결하도록 (IFM 스트림을 수신하는 타일로) 스위칭할 수 있다. 앞서 언급 한 바와 같이, IFM 및 OFM 텐서들은 하나의 SRAM 뱅크 세트(109)에 저장하기에 너무 클 수 있고, 따라서, 저장을 위한 SRAM 뱅크 세트(109)에 적합하도록 충분히 작은 서브-텐서들로 분할될 필요가 있다. 글로벌 제어 로직(140)은 각 서브-텐서가 연관된 SRAM 뱅크 세트 내에 저장되는 주소들뿐만 아니라 IFM 및 OFM 서브-텐서 색인들, 사이즈들, 각 서브-텐서를 저장하는 SRAM 뱅크 세트의 색인을 포함하여, IFM 및 OFM 텐서들이 분할되고 SRAM 뱅크 세트들에 저장되는 방법을 지정하는 구성 레지스터들을 포함한다.
계산이 진행되고 IFM(OFM) 트래버셜이 하나의 SRAM 뱅크 세트(109)에 저장된 서브-텐서로부터 다른 SRAM 뱅크 세트(109)에 저장된 다른 서브-텐서로 이동함에 따라, 글로벌 제어 FSM(140)은 IFM 및 OFM 전달 패브릭들의 온-더-플라이 재구성을 조정하여 IFM 소스 (및 OFM 대상) SRAM 뱅크 세트를 현재 1 개에서 다음 1 개로 전환한다. 일부 실시 예들에 따르면, 상기 재구성은 IFM (및 출력들을 생성하는 타일)을 소비하는 타일들에 대해 투명한 방식으로 성취되고 버스 스위치-오버(bus switch-over) 동안 계산을 정지 시키거나 늦추지 않는다.
앞서 언급 한 바와 같이, "매퍼(mapper)"로 지칭되는 하나의 소프트웨어는 SRAM 뱅크 세트들 및 물리적 SRAM 뱅크들에 걸쳐 웨이트 커널 저장 및 부분 결과들뿐만 아니라 전체 IFM 및 OFM 스토리지를 분할하는 방법을 (컴파일 타임에) 정적으로 결정할 수 있다. 명확하게 설명하기 위해, 복수의 SRAM 뱅크 세트들에서 물리적 IFM 및 OFM 스토리지의 세부 사항은 무시될 수 있다, 그리고, 도 3fc에 도시된 바와 같이, SRAM 뱅크 세트들은 IFM 및 OFM에 대한 "가상"또는 "논리적" 뷰들(views) (306)인 것으로 간주 될 수 있다.
도 3ga 내지 도 3gd에 도시된 제7 예시에서, 3x3x32x512 컨볼루션은 16 개의 타일들을 사용하여 결정되거나 계산된다. 이 예시에서는, 에너지를 절약을 위하여 더 적은 수의 IFM 패스들을 사용하여 제6 예시에서와 동일한 컨볼루션을 계산한다. 도 3ga를 참조하면, 각각의 승산기 단위 웨이트 레지스터 파일(127)은 18 개의 웨이트들을 가질 수 있으며, 그 중 6 개는 3x3 컨볼루션을 위해 제6 예시에서 9 개만이 사용되었다. 이와 같이, 3x3 웨이트들의 (하나와 대조적으로) 2 개의 세트들이 저장될 수 있고, 시간이 지남에 따라 "사이클드(cycled)"될 수 있다. 특히, 3x3x32x512 컨볼루션은 시간에 맞게 인터리빙된 2 개의 3x3x16x512 컨볼루션들로 분할될 수 있다. 도 3gb를 참조하면, 제3 예시의 그것과 유사한 방식으로 3x3x16x512 컨볼루션이 16 개의 물리적 타일들에 매핑될 수 있다. 각각의 IFM 패스에 대해, 하나의 IFM 슬라이스는 SRAM 뱅크 세트로부터 리드되어 128 개의 OFM 채널들을 8 개의 SRAM 뱅크 세트들로 출력하는 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]의 계산을 완료하기 위해 제2 세트의 3x3 웨이트들 및 입력 IFM[16..31]으로 전환될 수 있다. 이 프로세스는 "IFM 웨이트 사이클링(weight cycling)"으로 지칭될 수 있다. 이어서, 제3 단계에서, OFM[0..127]이 SRAM에 저장될 수 있고, 누산기가 클리어될 수 있다. 이러한 세 단계들은 계산이 완료 될 때까지 반복될 수 있다.
도 3ga를 참조하면, 일부 실시 예들에서, 논리적 타일들은 복수의 웨이트 세트들을 저장하는 물리적 타일들로서 정의될 수 있다. 본 예시 (제7 예시)에서, 2 개의 3x3 세트들의 웨이트들을 저장함으로써 (시간에 맞게 인터리빙된) 16 개의 그러한 논리적 타일들 (즉, 32 개의 논리적 타일들)의 2 개의 세트들가 형성됨을 알 수 있다. 제7 예시에서, 32 개의 논리적 타일들은 각각의 IFM 패스에서 더 많은 (예를 들어, 더 넓은) OFM을 물리적으로 계산할 수 있다, 따라서 IFM 통과들의 수 (그리고 SRAM IFM 독출 에너지)는 제6 예시에 비해 2배만큼 감소된다.
도 3ha 내지 도 3hc에 도시된 제8 예시에서, 3x3x512x256 컨볼루션은 16 개의 물리적 타일들을 사용하여 먼저 결정되거나 계산된다. 이 예시에서, IFM 및 OFM 채널들 (각각 512 및 256)의 수는 모두 상당히 크다. 아래에 더 상세히 설명되는 바와 같이, 컨볼루션 커널이 너무 커서 계산될 수 없는 경우 부분 결과들 또는 "부분들"이 사용될 수 있다. 그러나, 이 예시는 부분들을 사용하지 않고 큰 웨이트 커널을 이용하여 컨볼루션을 수행할 수 있는 방법을 보여준다. 도 3hb에 도시된 바와 같이, 3x3x512x256 컨볼루션은 계산 될 수 있다. 3x3 8-비트 컨볼루션의 경우, 2 세트의3x3 8-비트 웨이트들은 각 승수기 단위에 저장한다. 따라서, (2 세트들의 웨이트들) * (16 개의 물리적 타일들) = 32 논리적 타일들이다. 32 개의 논리적 타일들은 32 개의 IFM 슬라이스들을 감소시킬 수 있다. 그래서, 부분들을 사용하지 않는 처리될 수 있는 최대 IFM 채널들의 수는
(32 슬라이스들) * (슬라이스 당 16 개의 IFM 채널들) = 512 개의 IFM 채널들이다. 따라서, 부분들을 사용함이 없이 'N'이 어떤 양의 정수인 3x3x512xN 컨볼루션을 계산할 수 있다.
도 3hb 및 3hc를 참조하면, 클록 당 256 IFM 채널들이 리덕션 패브릭(111)과 결합된 타일 가산기 트리들을 사용하여 감소될 수 있다. 모든 512 IFM 채널들을 줄이기 위하여 (그리고 8 개의 OFM 채널들을 생성하기 위해), 두 번의 웨이트 사이클들이 수행된다. 웨이트 사이클(1)에서, 도 3hb에 도시된 바와 같이, IFM[0...15]는 타일(1)에 입력될 수 있고, IFM[16..31]은 타일(2)에 입력 될 수 있다. 등등 계속해서, IFM[240..255]은 타일(16)에 입력될 수 있다. 하드웨어 트리들은 리덕션 패브릭(111)에 의해 제공되는 하드웨어 가산기 스테이지들을 사용하여 (각 열당) 모든 16 개의 타일들에 걸쳐 결합될 수 있다. 가산기 트리 루트는 (후에 논의될 바와 같이, 리덕션 패브릭(11), OFM 전달 패브릭, 및 가산기 트리의 맥락 내에서) 타일 (16)에서 종료 될 수 있다. 따라서 타일(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는 도 3ha 내지 도 3hc에 도시된 3x3x512x256 컨볼루션이 32 IFM 패스들 (32 OFM 단계들) 대신에 64 IFM 패스들(64 OFM 단계들)을 수행함으로써 3x3x512x512 컨볼루션으로 변경되는 방법을 추가로 도시한다.
도 3ia 내지 도 3if에 도시된 제9 예시에서, 3x3x512x256 컨볼루션은 16 개의 타일들과 부분 결과들을 사용하여 결정되거나 계산된다. 일부 경우에, 부분들을 사용하면 SRAM 독출들의 수를 감소시킴으로써 (예를 들어, 제8 예와 비교하면) 에너지를 절약할 수 있다. 부분들을 사용할 때, 맵핑 알고리즘은 웨이트 텐서들을 여러 부분들에서, 특히 뎁스 채널 방향으로 분할하여 (로드딩 웨이트 텐서(loading weight tensor), 트래버싱 IFM, 라이팅 OFM을 포함하여) 단일 컨벌루션 연산을 둘 또는 그 이상의 컨볼루션 연산으로 변환 할 수 있다. 둘 또는 그 이상의 컨볼루션들의 출력들은 나중에 최종 결과를 생성하기 위하여 결합된다.
먼저, 도 3hb 내지 도 3hc는 부분들 없이 계산된 3x3x512x256 컨볼루션을 도시한다. 도 3ia 내지 도 3ib 그리고 도 3ic 내지 도 3id는 웨이트 텐서 (그리고 대응하는 IFM 및 OFM) 512 IFM 채널들이 각각 3x3x256x256 사이즈의 2 개의 개별 컨벌루션들에 대응하는 256 및 256으로 분할된 후, 연관된 하드웨어 자원 맵핑들을 도시한다.
도 3ia 내지 도 3ib는 2 개의 3x3x256x256 컨볼루션들 중 첫 번째를 도시한다. 웨이트 커널 평면 크기가 3x3 = 9이기 때문에, 18 개의 8-비트 웨이트들을 보유 할 수 있는 각 MU 웨이트 레지스터 파일은 두 세트들의 3x3 웨이트들을 저장하기에 충분한 용량을 가지므로, 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 단계들에 해당)을 수행함으로써 계산된다.
이 맵핑 예시에서, 두 개의 부분 패스들을 사용하면, 물리적으로 그리고 동시에 생성되는 OFM이 하나의 패스 내에 2배로 (하나의 OFM 슬라이스로부터 두 개의 OFM 슬라이스들까지)로 넓어진다(확장된다). 또한, 각 부분 패스 동안에 처리된 IFM 텐서의 사이즈는 HxWx512부터 HxWx256까지 2배로 감소된다.
IFM[256 ... 383]이 제1 웨이트 사이클 동안 입력되는 것을 을 제외하고는, 제2 부분들 IFM 패스는 제1 부분과 동일 할 수 있다. 그리고, 도 3c 및 3d에 각각 도시된 바와 같이, IFM[384 ... 511]은 제2 웨이트 사이클 동안 입력될 수 있다.
오리지널 3x3x512x256 컨볼루션의 완료는 ARU(167)와 유사한, (요소 별로 두 개의 3x3x256x256 컨볼루션들로부터) 부분 결과들을 합하고 그리고 스케일링 적용, 바이어스 및 활성화 기능을 포함한다. (i) ARU(167)가 제2 부분 컨볼루션 동안 최종 결과들을 생성하도록 요소별로 제1 부분 컨볼루션에 의해 생성된 부분 결과들을 리드하고, IFM 전달 패브릭(104)을 거쳐 부분들을 부분 결과들의 제2 세트와 합산되도록 타일 ARU들(167)로 전송하는 것, 그리고 (ii) 두 개의 부분 컨볼루션들 동안 ARU들(167)의 부분 출력을 갖는 것, SRAM 뱅크 세트들(109) 내에 추가적인 로직을 가지면서 부분들을 추가하기 위하여 리드-수정-라이트를 수행하는 것, 그리고, 활성화 기능을 적용하는 것을 포함하여, 상기 최종 단계를 수행하는 몇 가지 방법이 있을 수 있다. 더 구체적으로, 부분들을 완료하기 위한 추가 로직은 제2 부분 컨볼루션 동안 부분 결과들을 수신하고, 제1 부분 컨볼루션의 SRAM 결과들로부터 리드하고, 상기 결과들을 합산하고 활성화 함수를 즉시 적용하고, 그리고 최종 결과를 SRAM에 다시 라이트한다. (iii) 상기 추가 로직은 SRAM 뱅크 세트들(109) 내에 추가 로직을 가진다. 여기서, SRAM 뱅크 세트들(109) 내 상기 추가 로직은 활성화 기능을 적용함이 없이 요소별로 두 개 이상의 부분 연산들으로부터 부분 결과들을 계속 추가하기 위해, 마지막 부분 연산 라운드 동안 완료되도록 부분 결과들을 타일 ARU들(167)로 읽기 및 전송함으로써 부분들에 대하여 리드(read)-애드(add)-라이트(write) 동작을 수행한다.
부분들이 사용되지 않는 경우와 달리, 부분들이 사용되는 경우, 컨볼루션 연산이 정렬될 때, OFM 높이와 너비는 고려되어야 한다. 도 3Iie를 참조하면, 4 개의 바이트들이 각각의 (IFM 및 OFM이 모두 8 비트인 것으로 가정) 부분 결과를 저장하기 위해 사용될 수 있다. 이 경우, 부분 결과들의 SRAM 스토리지 사이즈는 "(OFM height)*(OFM width)*(OFM depth)*(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 부분 컨볼루션으로서 SRAM에 라이트된 부분들은 결정되거나 계산됨에 따라, 부분들은 요소별로 추가되고 활성화 기능이 즉시 적용된다.
앞서 언급 한 바와 같이, 요소별 부분들과 추가 및 활성화 기능의 적용을 위한 MR 타일들(102)의 사용은 선택적이다. 대신에, 요소별 및 평면(채널을 통한 감소 없음) 동작-전용의 APAP(Auxiliary Planar & Activation Processing) 유닛들이 사용될 수 있다. 이들 유닛들은 SRAM 뱅크 세트들(109) 내에 위치 할 수 있고 SRAM 뱅크 세트들에 도달하는 부분들뿐만 아니라 SRAM에 로컬로 저장된 부분들에 액세스 할 수 있다. 상기 APAP 유닛은 완성된 결과를 상기 SRAM(109)에 라이트한다.
제9 예시에 따라 수행된 결정 또는 계산은 2 번의 통과들을 수행함으로써 상당한 양의 에너지를 절약할 수 있다. IFM 패스들의 수가 32 개에서 16 개로 줄어들었으므로, IFM 데이터 독출량은 (IFM 높이) * (IFM 너비) * (IFM 채널들) * (IFM 패스들) = 10*10*512*(32-16)) = 819,200 바이트들 (캐싱 무시함). SRAM에 라이트된 상기 부분 데이터의 양(amount)은 "(OFM 높이) * (OFM 폭) * (OFM 채널) * (부분 컨볼루션들의 수 - 1) * (4 바이트)) * 4 = 102,400 바이트들"이다. 다시 말해, 제2 부분 패스가 결과를 평면/활성화 유닛들(planar/activation units)에 대한 결과를 직접 입력하는 대신 SRAM(109)에 상기 결과를 저장하는 경우, 2 배의 양(amount)이 발생할 것이다. 또한, SRAM(109)으로부터 리드(read)된 부분 데이터의 양은 "(OFM 높이) * (OFM 폭) * (부분 컨볼루션들의 수 - 1) * (4 바이트들) = 10*10*256*(2-1)*4 = 102,400 바이트들"이다. 다시 말해, 제2 부분 패스가 결과를 평면/활성화 유닛들(planar/activation units)에 대한 결과를 직접 입력하는 대신 SRAM(109)에 상기 결과를 저장하는 경우, 2 배의 양(amount)이 발생할 것이다. 이와 같이, 상기 예시에서 부분들을 사용하거나 부분들이 없이 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" 웨이트들을 가지며, 이것은 하나의 승수기 단위에 적합하지 않다. 예를 들면, 하나의 승산기 유닛 (103)은 18 개의 웨이트들만을 저장할 수 있다. 따라서, 도 3ja에 도시 된 바와 같이, 64 개의 웨이트들은 4 개의 타일들(102)로 분할될 수 있다. 따라서, 타일(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]을 계산하기 위하여, 상기 시스템이 전체 타일들을 추가(축소)할 수 있다, 따라서, 효과적으로, 각 타일은 4 개의 타일들을 사용하여 동시에 수행되는 2x8x16x64 컨볼루션과 4 개의 2x8x16x64 컨볼루션들을 수행하여 하나의 8x8x16x64 컨볼루션으로 집계된다. 각 2x8x16x64 컨볼루션은 IFM 웨이트 사이클링(IFM weight cycling)을 사용하여 결합된 2 개의 1x8x16x64 컨볼루션들을 더 포함한다.
도 3jb는 IFM 웨이트 사이클링의 제1 단계를 도시한다. 여기서 컨볼루션 윈도우 내의 (홀수는 아닌) 짝수 행이 컨볼브(convolve)된다. 여기서, 타일(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,*,*,*]"을 컨볼루션한다. 승수기 유닛들(103)의 곱들은 리덕션 패브릭(111)에 의해 제공된 가산기 트리 스테이지들을 사용하고 또한 타일들 내의 타일 가산기 트리들을 사용하여 감소되고, (IFM 값들 "a*, b*, ... h*"는 IFM 전달 패브릭(104)을 거쳐 4 개의 타일들로 스트리밍됨에 따라) 타일(4)의 누산기 레지스터(130) 내 누적된다.
도 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 웨이트 사이클링 단계와 유사하게, 승수기 유닛들(103)의 곱들은 리덕션 패브릭(111)에 의해 제공된 가산기 트리 스테이지들을 사용하고 또한 타일들 내의 타일 가산기 트리들을 사용하여 감소되고, (IFM 값들 "a*, b*, ... h*"는 IFM 전달 패브릭(104)을 거쳐 4 개의 타일들로 스트리밍됨에 따라) 타일(4)의 누산기 레지스터(130) 내 누적된다. 제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 그룹ing)"라는 용어는 타일 가산기 트리들을 단일 가산기 트리(열(column) 당)에 연결하여 단일 물리적 타일(102)에서는 수행하기 어려운 큰 연산을 수행하도록 정의된다.
도 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 패스를 다시 독출하기 위해 더 많은 IFM 패스들을 수행하는 더 많은 OFM 단계들을 추가함으로써 부분들을 사용함이 없이 이것은 가능하다. 어떤 상황들에서, 예를 들어, "8x8x128x64" 컨볼루션을 결정하거나 계산하기 위해 더 많은 IFM 채널들이 필요하다. 그러한 경우에서, (i) 물리적 타일들의 수가 증가하지 않거나 (ii) 승수기 당 웨이트들의 수가 증가하지 않으면, 부분들을 사용할 필요가 있다. 일부 어플리케이션들에서는, 그러나, 8x8과 같은 큰 사이즈의 컨볼루션은 RGB 이미지들 또는 IFM 채널이 거의 없는 이미지에만 적용할 수 있다. N 개의 웨이트들을 보유하는 MU 웨이트 레지스터 파일(127)은 컨볼루션 커널은 최대 "H*W < N"까지 수용 할 수있다. 여기서 H 와 W는 웨이트 커널의 평면의 높이와 너비를 나타낸다."" 예를 들어, 18 개의 8-비트 웨이트들의 용량을 갖는 MU(103)는 "4x4, 5x3, 3x5, 6x2, 2x6, 7x2, 2x7, 8x2, 2x8, 9x2, 2x9, 18x1 및 1x18"을 포함하는 컨볼루션 커널들을 보유할 수 있다. 실제로, 8x8x128x64 컨볼루션을 계산할 필요성은 희소하기 때문에 뉴럴 프로세서(100) 대신 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 개의 논리적 타일들) = 6084,608 개의 채널들"의 사이즈까지 IFM들을 수용할 수 있다. 1x1x1024x64 컨볼루션은 부분들을 사용하지 않고 이용 가능한 4,608 IFM 채널들 중 1024 IFM 채널들 만 필요로 한다. 따라서, IFM 패스 당 계산 될 수있는 OFM 슬라이스들의 수는 "플로어((4,608 최대 IFM 채널들)/(1024 IFM 채널들)) = 4 OFM 슬라이스들"이다.
결정 또는 계산은 다음과 같이 수행될 수 있다. 먼저, 1x1 웨이트들의 16 개의 세트들은 각 MU에 저장될 수 있다. 각 OFM 단계(IFM 패스) 동안, 64 개의 슬라이스들 (모두 1024 IFM 채널들)은 독출될 수 있다. 물리적으로, 이것은 (64 IFM 슬라이스들)/(MU 당 1x1 웨이트들의 16 세트들) = 4 개의 IFM 슬라이스들를 한 번에 독출하는 것에 대응된다. 1 개의 OFM 단계 (및 1 개의 IFM 패스)에서 4 개의 OFM 슬라이스들을 계산하기 위하여, 4 개의 IFM 슬라이스들 각각은 "(16 개의 물리적 타일들)/(4 개의 IFM 슬라이스들) = 4 개의 타일들"로 브로드캐스트될 수 있다. 상기 OFM들은 "(8 개의 OFM 슬라이스들)/(4 개의 타일들을 통한 브로드캐스트) = 2 개의 OFM 단계들 (및 2 개의 IFM 패스들)"를 사용하여 계산될 수 있다. 상기 IFM 웨이트들은 16 회 싸이클될 수 있다.
구체적으로, 도 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 단계에서, 상기 시스템은 "타일(1..4)에 의해 계산된 도트 곱을 OFM[0..7]에, 타일(5..8)에 의해 계산된 도트 곱은 OFM[8..15]에, 타일(9..12)의 도트 곱은 OFM[16..23]에, 그리고 타일(13..16)의 도트 곱은 OFM[24..31]에 " 도트 곱을 중간(미완성) 결과로서 타일(4, 8, 12 및 16)의 누산기 레지스터들에서 각각 누적한다.
도 3lb를 참조하면, 제4 단계에서, 상기 누산기들이 클리어되지 않고, MU들(103)는 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 단계에서, 상기 시스템은 타일(1..4)에 의해 계산된 도트 곱을 OFM[0..7]에, 타일(5..8)에 의해 계산된 도트 곱을 OFM[8..15]에, 타일(9..12)에 의해 계산된 도트 곱을 OFM[16..23]에, 타일(13..16)에 의해 계산된 도트 곱을 OFM[24..31]에, 도트 곱을 중간(미완성) 결과로서 타일(4, 8, 12 및 16)의 누산기 레지스터들에서 각각 누적한다.
도 3lc을 참조하면, 상기 계산은 진행되고, IFM 웨이트를 계속 순환하고 (총 16 개의 IFM 웨이트 사이클링 단계들 동안), IFM을 페치하고 브로드캐스트하며, 마지막 IFM 슬라이스에 도달 할 때까지 도트 곱을 계산 및 누적할 수 있다 (채널들(960 ~ 1023)). 이 단계에서, 상기 누산기들이 클리어되지 않고, MU들(103)는 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[32 ~ 63]에 대한 시간 동안, 상기 시스템은 (다른 IFM 패스를 수행함으로써) 다음 OFM 단계로 진행하고, 상기 계산을 반복한다. 상기 시스템은 다음 OFM 단계를 위해 웨이트 슬라이스를 로드한다: W[0,0,0..1023,32..63]. 웨이트 로딩(Weight loading)은 수직 웨이트 로딩 버스들(vertical weight loading buses) (101)를 이용하여 계산과 동시에 발생할 수 있다. 도 1k 및 도 1n에 도시된 바와 같이, 이 경우 웨이트 로딩 프로세스에 의한 발생된 추가 지연은 없다. 상기 시스템은 어큐뮬레이터를 클리어하고, MU들(103)을 1x1 웨이트들의 제1 세트로 전환할 수 있다. 그리고 나서, 상기 시스템은 OFM[32..63]을 계산하기 위하여, 도 3la 내지 도 3lc의 컨텍스트(context)에서 설명된 바와 같이 상기 동작을 반복할 수 있다.
도 3ld에 도시된 바와 같이 (도 3lc의 경우와 유사), 일단 상기 시스템이 16 개의 IFM 웨이트 사이클들 중 15 개를 통과하고, 해당 IFM 슬라이스를 패치하고, 중간 도트-곱 결과들을 계산하고 누적하면, 상기 시스템은 IFM 웨이트 싸이링의 마지막 (제16) 라운드에 도달한다. 이 라운드에서, 상기 누산기들이 클리어되지 않고, Mu들(103)는 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..63]에, 각각 누적한다. 이 과정의 끝에서, 상기 시스템은 (타일들(4, 8, 12 및 16) 내에) 활성화 기능들(197)을 누적기(130) (타일들(4, 8, 12 및 16) 내) 내에 저장된 완성된 도트 곱에 적용하고, 컨벌루션 연산을 완료하기 위해 최종 OFM[32..63] 결과를 SRAM에 라이트한다.
컨볼루션 연산과 대조적으로, 이제 완전히 연결된(FC) 레이어 계산을 고려하는 것이 필요하다. 먼저, 단일 타일과 단일 IFM 샘플을 사용하는 16x8 FC 계산의 사소한 사례를 고려하는 것이 필요하다. 상기 웨이트들은 IFM과 곱해진 후에 버려지는 것을 제외하고, FC 레이어 계산은 (이전 예시에서 설명된) 1x1 컨벌루션과 유사하다. 하나의 웨이트를 각 MU에 로드하고, 단일 IFM[0 ... 15] 슬라이스를 페치하고, 타일의 가산기 트리들을 사용하여 도트 곱을 계산하고, 상기 결과 도트 곱에 활성화 기능을 적용하고, 그리고 완성된 OFM[0 ... 7] 결과를 SRAM(109)에 라이트함으로써 하나의 16x8 FC 계산은 달성될 수 있다.
단일 타일(102) 및 단일 IFM 샘플에 의해 16x16 FC를 결정 또는 계산하는 경우를 고려할 필요가 있다. 2 개의 웨이트들을 각 MU(103)에 로드하고, 단일 IFM[0 ... 15]을 페치하고, 그리고 곱하기를 위한 2 개의 사전로드된 웨이트들 중 첫 번째를 선택하는 Mu(103)를 가지도록함으로써, 단일 16x16 FC 계산은 달성될 수 있다. 전술된 바와 같이, OFM[0 ... 7]은 계산될 수 있다. MU(103)는 곱셈을 위한 2 개의 미리로드된 웨이트들 중 두 번째를 선택하고, OFM[8..15]을 계산할 수 있다. 동일한 IFM으로부터 복수의 OFM들을 계산하기 위하여, MU 웨이트들을 통한 사이클링의 프로세스는 "OFM 웨이트 사이클링"이라고 한다.
16x16 FC 계산은 하나의 IFM 패스를 사용하지만 (두 개의 OFM 웨이트 사이클들에 해당) 두 개의 OFM 단계를 사용하여 수행된다. 따라서, 대부분의 다른 예시에서 관찰된 바와 같이, OFM 단계들의 수는 OFM 웨이트 사이클링이 사용되지 않는 한 전형적으로 IFM 패스들의 수와 동일하다.
단일 타일 및 단일 IFM 샘플에 의해 16x128 FC를 결정 또는 계산하는 다른 심플 경우를 고려할 필요가 있다. 이것은 16 개의 웨이트들을 각 MU(103)에 로딩하고 단일 IFM 슬라이스를 페치함으로써 달성될 수 있다. 16 개의 OFM 단계들이 OFM 웨이트 사이클에 의해, (즉, OFM[0 ... 7], OFM[8..15], ... OFM[120..127]을 차례로 계산하기 위하여 MU 웨이트들을 통해 사이클링함으로써) 수행될 수 있다.
18 개의 IFM 샘플들(즉, IFM 텐서 모양은 1x16x18로 표현될 수 있다)의 배치에 대하여 단일 타일을 사용하여 16x8 FC를 결정하거나 계산하는 간단한 경우를 고려하는 것이 필요하다. 참고로, 뉴럴 프로세서(100)가 (훈련 아닌) 추론을 수행하기 때문에, 매핑 예시들은 추론 어플리케이션들에서 일반적으로 1의 IFM 배치 사이즈를 묵시적으로 가정한다. 1 보다 큰 IFM 배치 사이즈를 가지는 계산도 하드웨어에 매핑될 수 있다. 예를 들어, IFM 배치에서 각각의 샘플에 대해 이미 설명된 바와 같이, 계산들이 반복될 수 있다. 그러나, 18 개의 IFM 샘플들의 배치에 대한 16x8 FC 단일 타일 계산은 MU 웨이트 레지스터 파일 용량을 활용하여 18 개의 웨이트들을, 각각의 IFM 샘플에 대해 1 개의 웨이트씩 각각의 MU(103)에 미리 로드할 수 있다. 그후, 첫 번째 (18의 배치로부터) IFM[0..15][0] 샘플을 페치하고, 각각의 MU에서 18 개의 웨이트들 중 첫 번째와 상기 페치된 IFM 샘플의 도트 곱을 계산하고, 활성화 기능을 적용하고, 그리고 결과 OFM[0..7][0]을 SRAM에 라이트함으로써, 계산이 이루어질 수있다. 다음으로, 활성화 함수 적용 후 OFM[0..7][1]을 얻기 위하여, IFM[0..15][1] 샘플은 페치되고 각각의 MU(103)에서 18 개의 웨이트들 중 두 번째와 곱해진다. IFM[0..15][0..17] 샘플들(총 18 개)의 전체 배치가 처리 될 때까지, 이 순서는 계속되어 OFM[0..7] [0..17] 샘플의 배치를 생성한다. 배치의 IFM 샘플들을 처리하기 위하여, MU 웨이트들을 통한 사이클링은 "IFM 배치 사이클링(batch cycling)"으로 지칭될 수 있다. MU 웨이트 레지스터 파일 용량이 충분하다면, IFM 웨이트 사이클링, OFM 사이클링 및 IFM 배치 사이클링이 계산들을 수행하기 위해 결합될 수 있다.
도 3ma 및 3mb에 도시된 제13 예시에서, 288x8 완전히 연결된(fully connected) 결정 또는 계산은 단일 타일을 사용하여 수행된다. 도 3ma를 참조하면, 앞서 언급 된 바와 같이, 완전히 연결된 계산은 컨볼루션 윈도우가 변환되지 않고 웨이트들이 재사용되지 않고 한 번의 사용 후에 폐기되어야하는 1x1 컨볼루션과 유사할 수 있다. 하나의 타일(102)은 8 개의 OFM 채널들을 병렬로 (즉, 1 개의 OFM 슬라이스) 계산할 수 있다. 288 개의 IFM 채널들은 "288/(MR 타일 당 16 행들) = 18" 슬라이스에 해당할 수 있다. 상기 시스템은 각 MU(103)에서 18 개의 웨이트들을 사용하여 FC 웨이트들의 모든 18 슬라이스들을 저장할 수 있다.
완전히 연결된 계산을 수행하기 위하여, 상기 시스템은 (이것은 어느 정도, 동시에, 수행 될 수 있음, 즉, 시간 상에서 중첩될 수 있음) 다음 단계들을 실행할 수 있다. 제1 단계에서, 상기 웨이트들은 SRAM(109)으로부터 로드될 수 있다. 예를 들면, 도 1k 및 도 1n에 도시된 바와 같이, 상기 웨이트는 수직 웨이트 로딩 버스(101)를 사용하여 계산과 동시에 로드될 수 있다. 이와 같이, 상기 시스템은 FC 웨이트들은 SRAM(109)에 배치되는 것을 보장할 수 있다. 제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 컨볼루션과 유사하기 때문에, "(MU 당 18 개의 웨이트들)*(16 물리적 타일들) = 최대 288 개"의 논리적 타일이 존재할 수 있다. 상기 288 개"의 논리적 타일들 각각은 1x1 컨볼루션을 수행한다. 이와 같이, 부분들을 피하기 위하여, 상기 시스템은 단일 라운드에서 모든 1024 IFM 채널들 (1024/16 = 32 IFM 슬라이스들)을 독출할 수 있다.
32 개의 IFM 슬라이스들을 모두 독출하기 위하여, 32 개의 논리적 타일들이 사용될 수 있다. 이 계산은 32 OFM들 (4 OFM 슬라이스들)의 계산을 포함할 수 있다. 하나의 패스에서 이것을 수행하기 위하여 (모든 OFM들을 한 번에 계산하기 위하여), "(32 개의 IFM 슬라이스들)*(4 개의 OFM 슬라이스들) = 128 개의 논리적 타일들"이 사용될 수 있다. 이와 같이, 논리적 타일들(288)의 이용 가능한 수는 충분하다. (MU(103) 당 최대 18 개의 웨이트들을 저장하는 대신) 각각의 MU(103)에 8 개의 웨이트들을 저장함으로써 논리적 타일들의 수는 필요한 128로 감소될 수 있다.
상기 계산은 다음과 같이 진행될 수 있다. 상기 시스템은 MU(103) 당 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 단계에서, OFM 누산기들에 곱들의 합을 추가함으로써, 상기 시스템은 (아직 미완성(not-yet-finished)) OFM[0..31] (4 OFM 슬라이스들)의 계산을 계속할 수 있다. 도 3oc를 참조하면, 모든 IFM이 처리될 때까지, 상기 시스템은 사이클 웨이트들을 계속하고 OFM 결과들을 누적할 수 있다. 마지막 단계로서, 상기 시스템은 IFM[960..1023]을 페치하여 OFM[0..31]에 축적한 다음, 활성화 기능을 상기 축적된 OFM[0..31]에 적용하고 그 결과를 SRAM(109)에 라이트할 수 있다.
도 3pa 내지 도 3pc에 도시된 제16 예시에서, 4096x1024 완전히 연결된 결정 또는 계산은 16 개의 타일들 및 1의 배치 사이즈를 사용하여 수행된다. 이 계산은 "(타일 당 4096/16 IFM 채널들) = 256 IFM 슬라이스들, 그리고 (타일 당 1,024/8 OFM 채널들) = 128 OFM 슬라이스들"을 사용할 수 있다. 전술된 다른 예시들 중 일부에서와 같이, 부분들을 피하기 위하여 전체 IFM을 독축하는 것이 유리할 수 있다. "최대 (MU 당 18 개의 웨이트들)*(16 개의 물리적 타일들) = 288 개의 논리적 타일들"은 상기 계산을 실행하는 데 이용 가능할 수 있다. 전체 IFM을 독출하기 위하여, 256 개의 논리적 타일들이 사용될 수 있다. 이와 같이, 논리적 타일들(288)의 이용 가능한 수는 충분하다. 웨이트들의 16 개의 세트을 각각의 MU(103)에 로딩함으로써, 상기 시스템은 256 개의 논리적 타일들을 사용하도록 구성될 수 있다. 256 개의 IFM 슬라이스들을 하나의 라운드 내에서 (부분들없이) 독출하기 위하여, 모든 256 개의 논리적 타일들은 사용될 수 있다. 따라서, (256 개의 논리적 타일들/256 개의 IFM 슬라이스들) = 1 개의 OFM 슬라이스는 IFM 패스마다 생성될 수 있다. 그리고 상기 계산을 완료하기 위해 (128 개의 OFM 슬라이스들)/(IFM 패스 당 1 OFM 슬라이스) = 128 OFM 단계들 (따라서 128 개의 IFM 패스들)은 수행될 수 있다.
상기 물리적 구성은 도 3pa에 도시된다. 상기 리덕션 패브릭(111)은 모든 16 타일들의 출력들을 단일 OFM 슬라이스로 감소시키도록 구성될 수 있다. 16 개의 IFM 슬라이스들(16 개의 가상 SRAM 뱅크들로부터)가 페치되고, 각각은 오직 하나의 타일(102)로 "브로드캐스트"될 수 있다.
상기 계산은 다음과 같이 여러 단계들로 수행될 수 있다. 제1 단계에서, OFM[0..7] 누산기들이 클리어된다. 제2 단계에서, 16 개의 IFM 슬라이스들(IFM[0..255])이 페치되고, 중간(미완성) 결과들로서 OFM[0..7] 누산기들로 감소된다.
제3 단계에서, OFM[0..7] 누산기들은 클리어되지 않고, 상기 시스템은 Mu들(103) 내에 설정된 다음 IFM 웨이트로 전환된다. 제4 단계에서, 다음 16 개의 IFM 슬라이스들(IFM[256..511])이 페치되고, 감소되어 OFM[0..7] 누산기들에 추가된다. 도 3pb에 도시된 바와 같이, (IMF[4080..4095]까지 그리고 포함하여) 모든 IFM을 처리할 때까지 상기 단계들은 계속될 수 있다. 상기 활성화 기능은 누적된 도트 곱들 (타일(16) 내)에 적용될 수 있고, 상기 최종 결과는 SRAM(109)에 라이트될 수 있다. 이것은 OFM[0 ~ 7]의 계산을 완료한다. 도 3pc을 참조하면, 다음 OFM 단계를 수행하기 위하여, 상기 시스템은 웨이트들 "W[0..4095,8..15]"을 로딩하는 OFM[8..15]에 대한 이전 계산을 반복할 수 있고, 모든 OFM들이 계산될 때까지 (즉, 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 웨이트 레지스터 파일(127)은 6 개의 24-비트 웨이트들 또는 4 개의 32-비트 웨이트들을 보유하기에 충분한 용량을 갖는다.
선택적으로, 동작을 모든 사용 가능한 물리적 타일들에 매핑하는 것 외에도, 뉴럴 프로세서는 각각 더 적은 수의 타일들을 갖는 여러 개의 뉴럴 프로세서들로 논리적으로 세분될 수 있다. 예를 들어, 16 개의 물리적 타일들을 갖는 뉴럴 프로세서는 논리적으로 2 개의 뉴럴 프로세서들로 볼 수 있다. 상기 2 개의 뉴럴 프로세서들 각각은 원래 타일들의 수의 절반 (예: 각각 8 개의 타일들)을 가질 수 있다. 또는, 4 개의 뉴럴 프로세서들 각각은 원래 타일들의 수의 4분의 1 (예: 각각 4 개의 타일들)을 가질 수 있다. 상기 분할 후에 남아있는 물리적 타일들의 수를 고려할 때, 이러한 세분화로 인한 각 뉴럴 프로세서는 위에서 설명한 것과 같은 실질적으로 동일한 매핑 원리들을 따른다. 뉴럴 프로세서를 복수의 더 작은 복수의 뉴럴 프로세서들로 세분화하는 것은 비교적 적은 IFM 감소 및 비교적 적은 생성된 OFM 채널 (보다 구체적으로 그것의 곱)을 요구하는 동작들에 바람직할 수 있다. 예를 들어, 1x1x32x32 컨벌루션 매핑은 4 개의 타일들만을 요구한다. 만약 16 개의 타일들에 매핑되면, 1x1x32x32 컨볼루션은 16 개 타일들 중 12 개가 사용되지 않으므로, 승수기 사용률이 상당히 감소된다. 이와 같은 경우들에서, 16 개의 물리적 타일들을 갖는 뉴럴 프로세서는 각각 4 개의 타일을 갖는 4 개의 뉴럴 프로세서들로 세분 될 수 있다. 상기 4 개의 뉴럴 프로세서들 각각은 4개의 타일들을 가지고, 1x1x32x32 컨볼루션을 4 개의 결과 뉴럴 프로세서들 각각에 매핑하고, IFM 텐서(예를 들면, 그것의 사이즈는 HxWx32)를 사이즈(H/2xW/2x32)를 가지는 4 개의 비중첩(non-overlapping) 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)에 인접 (로컬)하는 분산 방식으로 배치될 수 있다. 이것은 모든 타일(102)과 그것의 로컬 SRAM(109) 사이에서 IFM 및 OFM 데이터를 매우 병렬적인 방식으로 스트리밍할 수 있게 한다. 즉, 만약 SRAM이 더 큰 스토리지 배열들로 합쳐지고 타일들로부터 더 멀리 떨어지면(즉, 메모리가 분산되지 않은 경우), SRAM과 존재할 수있는 컴퓨팅 타일 사이의 대역폭 병목 현상을 피하기 위해 상기 병렬적인 방식에서는 최대 16 개의 IFM 및/또는 스트림들 병렬로 실행되도록 한다.
도 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 웨이트 레지스터 파일(127)은 "18*16*8 = 2,304 바이트들 = 144 개의 워드들" 사이즈의 웨이트 커널을 수용할 수 있다. 여기서, 각각의 워드는 128 비트들을 갖는다. 예를 들어, 만약 뉴럴 프로세서(100)에 이용 가능한 총 SRAM 용량이 2M 바이트들이면, 각각의 SRAM 뱅크 세트는 (2M 바이트들)/(16 개의 SRAM 뱅크 세트들) = 128K 바이트들을 갖는다. 또한, 만약 각 SRAM 뱅크 세트는 4 개의 SRAM 뱅크들을 포함하면, 각 SRAM 뱅크 사이즈는 "(SRAM 뱅크 세트 사이즈)/(SRAM 뱅크 세트 당 SRAM 뱅크들) = 128K/4 = 32K 바이트들이다. 따라서, 4 개의 로컬 SRAM 뱅크들 각각은 "144/4 = (이용 가능한 2048 워드들 중) 36 워드들"을 저장할 수 있다.
도 4ac는 타일과 그것의 로컬 SRAM 뱅크 세트 사이의 로컬 OFM 연결들을 도시한다. 타일(102)은 완성된 또는 부분적인 결과들을 OFM 전달 패브릭으로 출력한다. 상기 OFM 전달 패브릭은 그 데이터를 그밖에 다른 SRAM 뱅크 세트들뿐만 아니라 로컬 SRAM 뱅크 세트로 전송하고 그 데이터를 디멀티플렉서(de-multiplexer) (405)를 통해 SRAM 뱅크들(B0 내지 B3)에 이용 가능하게 한다.
다음의 여러 단락들은 IFM 데이터 전달 패브릭(104) 및 OFM 데이터 전달 패브릭(106)에 대하여 설명한다. 상기 IFM 전달 패브릭(104)은 연결들을 형성하고 SRAM 뱅크 세트들(109)로부터 타일들(102)로 데이터를 전송한다. 반면에, 상기 OFM 전달 패브릭(106)은 연결들을 형성하고 타일들(102)로부터 SRAM 뱅크 세트들(109)로 데이터를 다시 전송한다.
IFM 데이터를 SRAM 뱅크 세트들로부터 타일들로 가져오고 OFM을 타일들로부터 SRAM으로 다시 가져 오는 작업을 고려하면, SRAM 뱅크 세트들와 타일들 사이의 연결은 전체적으로 있어야하고 타일들과 SRAM 뱅크 세트들 사이의 연결 또한 전체적으로 있어야 한다. 모든 연결들을 가지려면 크로스바 스위치들(cross-bar switches) (예: 16-to-16)이 요구된다. 이는 이와 같은 경우에 매우 큰 실리콘 면적을 소비 할 수 있고 따라서 매우 바람직하지 않다. 더 구체적으로, 풀 크로스바 스위치의 면적은 O(NM)에 비례하며, 여기서 N은 스위치 입력들의 수이고 M은 스위치 출력들의 수이다. N = M = T = 16의 경우, 여기서 T는 물리적 타일들의 개수이다. 따라서, 타일들의 수에서 2차인 "O(NM) = O(T2)"를 만들고, 실리콘 면적에 대해 특히 비싸게 타일들의 수(예를 들어, 32로부터 32 또는 64로)를 증가(스케일-업)시킨다.
그러나, 아래에서 더 자세히 설명함에 따라, 타일들과 SRAM 뱅크 세트들 사이의 모든 연결들은 필요하지 않다. 통신 패브릭의 사이즈와 복잡성을 감소시키기 위하여, 어떤 실시 예들은 SRAM을 비중첩 스토리지로 분할함으로써 OFM들이 (각각의 물리적 타일들에 의해) 생성될 위치에 OFM들을 국부적으로 저장하는 것을 목표로 한다. IFM 데이터는 다양한 SRAM 뱅크 세트들(109)로부터 각 타일(102)로 여전히 전달된다. 그러나, IFM 전달 패브릭 구성은 타일들 사이 감소의 5 가지 주요 패턴들에 대응하여 5 가지 필수 패턴으로 감소될 수 있다. OFM들을 국부적으로 저장하고 분산된(글로벌) 방식으로 IFM을 페칭하는 대신, OFM 결과들을 분산된(글로벌) 방식으로 라이트하면서 IFM을 국부적으로 페치하도록 IFM 및 OFM 전달 패브릭(104 및 106)을 구성할 수도 있다.
일반적으로, 컨볼루션 또는 완전히 연결된 레이어 계산은 인터-타일 감소에 대하여 이러한 5 가지 구성들 중 하나로 분해될 수 있다. (1) 도 4ad에 도시된 바와 같이, 16 개의 OFM 슬라이스들을 모두 생성하는 모든 16 개의 타일들(102)에 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 개의 타일들(102)로 브로드캐스트되고 4 개의 타일들(102)의 출력이 감소되기 때문에 경우(3)는 "브로드캐스트 4 감소 4" 경우라고 지칭될 수 있다. 각각의 IFM 슬라이스가 2 개의 타일들(102)로 브로드캐스트되고 8 개의 타일들(102)의 출력이 감소되기 때문에 경우(4)는 "브로드캐스트 2 감소 8" 경우라고 지칭될 수 있다. 각각의 IFM 슬라이스가 오직 하나의 타일(102)로 브로드캐스트되고 (즉, 브로드캐스트되지 않음) 모든 16 개의 타일들(102)의 출력이 감소되기 때문에, 경우(5)는 "브로드캐스트 1 감소 16" 경우라고 지칭될 수 있다. IFM 슬라이스가 16 개의 타일들(102)로 브로드캐스트되고 1 개의 타일(102)의 출력이 감소(즉, 감소 없음)하기 때문에, 경우(1)는 "브로드캐스트 16 감소 1" 경우라고 지칭될 수 있다.
5 개의 인터-타일 감소 구성은 IFM 및 OFM 전달 패브릭들(104 및 106)이 5 개의 감소 구성 경우들 각각에서 어떤 연결 패턴들을 지원해야 하는지에 관하여 더 상세하게 고려될 수 있다. 더 명확하게하기 위해, 타일들(102) 내부에 가산기 트리들(128A 및 128B)를 사용하여 승산기 단위 곱들의 감소를 지정하는 것으로 지칭되는 "인터-타일 감소"와 대조적으로, 용어 "인터-타일 감소(intra-tile reduction)"는 리덕션 패브릭(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를 포함한다.
인터-타일 감소 경우들의 최대 개수는 N이 뉴럴 프로세서(100) 내 물리적 타일들의 개수인 LOG2(N)과 동일하다. N 개의 타일들을 가지는 뉴럴 프로세서에서 사용 가능한 인터-타일 감소 구성들은 구성(BN-R1) (m = N 및 n = 1)부터 시작하여 m을 2로 나누고 m이 1에 도달할 때까지 다음 구성마다 n을 2로 곱함으로써 구성된다. 예를 들어, 만약 뉴럴 프로세서(100)가 8 개의 타일들만을 갖는 경우, B8-R1, B4-R2, B2-R4 및 B1-R8을 포함하여 4 개의 인터-타일 구성들이 이용 가능할 수 있다. 32 개의 타일들을 갖는 뉴럴 프로세서(100)는 B32-R1, B16-R2, B8-R4, B4-R8, B2-R16 및 B1-R32를 포함하여 최대 6 개의 인터-타일 구성들을 제공할 수 있다.
계산은 부분 결과들뿐만 아니라 (예를 들어, 적용된 활성화 함수들과) 최종 결과들을 생성 할 수 있기 때문에, 각 인터-타일 구성은 OFM 전달 경로에 대하여 고려해야 할 두 가지 경우들을 가질 수 있다. 두 가지 경우들은 "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에서 오른쪽 가산기 트리)에 의해 합산된다.
서로 떨어져 퍼져있는 타일들(102)의 출력들을 추가하는 것과 대조적으로, 리덕션 패브릭(111)의 구성 가능한 가산기 트리는 서로 인접한 타일들(102)의 출력들을 추가하도록 설계되어 있다. 따라서 리덕션 패브릭 배선의 구성 가능한 가산기 트리를 소형화하고 트리 자체를 "분산"한다. 또한, 이전 예시에서와는 달리, 여기서 16 개의 타일들은 T0 내지 15로 식별되고, 아래 예시들에서 표기법을 단순화하기 위해 타일 식별자들의 순서는 (매핑 예시들에서 사용된 표기법과 비교하여) 변경된다.
각각의 인터-타일 감소 구성들은 하나씩 자세히 검사될 수 있다. 제1 예시적 케이스는 B16-R1 동작들을 포함한다. "store-OFM-as-locally-as-possible"에 따르면, (SRAM 뱅크 세트로부터) IFM 글로벌리 원리(globally principle)를 페치하는 동안, 이 구성에서 입력 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 구성에서, 각 타일(102)의 가산기 유닛은 그 타일의 결과만을 누적하도록 인터-타일 감소가 없다. 후술하는 바와 같이, OFM 완료 또는 부분 결과는 근처의 SRAM 뱅크 세트(109)에 라이트될 것이다. 그래서, 결과들이 최종이거나 부분 결과들의 스트림이면, B16-R1 구성에서 16 개의 타일들(102) 각각은 OFM 슬라이스들의 스트림을 생성한다. 특히, 부분들의 경우에서, 8-비트 IFM 및 OFM 또는 48-비트 폭으로 작업 할 때 16-비트 IFM 및 OFM 데이터를 가정하면, 각 값은 최대 32-비트-폭(32-bits-wide)일 수 있다. 그리고 도 4bb에서 화살표들(106)로 표시된 바와 같이, 각 부분 결과는 로컬로 저장될 수 있다. 이 경우, 각 SRAM 뱅크 세트(109)는 부분 결과들을 저장하는 목적지로서 작용한다. 더욱이, 각각의 SRAM 뱅크 세트(109)는 그것의 로컬 타일로부터 데이터를 수신한다. 예를 들면, SRAM 뱅크 세트(S8)은 타일(T8)로부터 데이터를 수신하고, SRAM 뱅크 세트(S8)은 타일(T0)로부터 데이터를 수신한다. 각각의 SRAM 뱅크 세트(109)는 4 개의 SRAM 뱅크들(108)을 가지기 때문에, 각각의 SRAM 뱅크 세트(109)는 일반적으로 클록 당 16 개의 4-바이트 부분 결과들을 저장할 수 있다. 그러나, 일부 경우들에서 SRAM 뱅크 세트의 이용 가능한 총 대역폭을 초과할 수 있는 부분 결과들을 라이트하는 동안, 현재 소스 SRAM 뱅크 세트(109)는 IFM 데이터를 동시에 페치해야 한다. 이와 같은 경우에, IFM 캐시(139)는 컨볼루션 평면 커널 크기가 1x1보다 큰 경우, 소스 SRAM 뱅크 세트(109)로부터의 IFM 독출들을 감소 시키는데 도움이 될 수 있다. 또한, 1x1보다 큰 IFM 웨이트 사이클링 및/또는 컨벌루션 평면 커널 크기를 사용하는 동작들은 여러 클럭들에서 한 번 출력을 생성하므로(매 클록 당 하나의 결과와 대조적으로), OFM 대역폭에 대한 요구를 감소시키고 SRAM 액세스 병목 현상을 피할 수 있다.
최종 결과들을 생성 할 때, 각각의 최종 값은 8-비트 (또는 16-비트 등)로 양자화될 수 있고, 그 값들은 SRAM 뱅크 세트들 "[S0..S7] 또는 [S8..S15]"에 라이트될 수 있다. 도 4bc 및 도 4bd는 OFM 전달 패브릭 연결 및 구성 선택들을 도시한다. OFM 슬라이스 너비는 IFM 슬라이스 너비의 절반이므로 (8 개의 뎁스 채널들 대 16), 두 개의 수직으로 인접한 타일들("타일 열")의 출력들은 짧은 로컬 연결을 통해 상위 SRAM 뱅크 세트 또는 하위 SRAM 뱅크 세트로 전송될 수 있다. 각 SRAM 뱅크 세트는 16 개의 채널들을 가진 슬라이스들을 처리할 수 있으므로(16 개의 채널들을 가지는 IFM 슬라이스로 인하여), 각각의 SRAM 뱅크 세트(109)는 또한 2 개의 OFM 슬라이스들을 수용할 수 있다. 예를 들어, 타일 열을 함께 포함하는 타일들(T0 및 T8)의 출력들은 함께 그룹화되어 로컬 짧은 연결부들(106)를 통해 도 4bc에 도시된 바와 같이, T8 바로 아래에 위치한 SRAM 뱅크 세트(S8) 또는 도 4bd에 도시된 바와 같이, T0 바로 아래에 위치한 SRAM 뱅크 세트(S0)에 전송될 수 있다. 유사하게, 타일 열(T4 또는 T12) 출력은 그룹화되어 SRAM 뱅크 세트(S4 또는 S12)에 로컬로 전송될 수 있다. 타일 열(T10 또는 T2) 출력은 그룹화되어 SRAM 뱅크 세트(S10 또는 S2)에 로컬로 전송될 수 있다. 타일 열(T7 또는 T15) 출력은 그룹화되어 SRAM 뱅크 세트(S7 또는 S15)에 로컬로 전송될 수 있다. 타일 열(T3 또는 T11) 출력은 그룹화되어 SRAM 뱅크 세트(S3 또는 S11)에 로컬로 전송될 수 있다. 타일 열(T13 또는 T5) 출력은 그룹화되어 SRAM 뱅크 세트(S13 또는 S15)에 로컬로 전송될 수 있다. 타일 열(T9 또는 T1) 출력은 그룹화되어 SRAM 뱅크 세트(S9 또는 S1)에 로컬로 전송될 수 있다.
제2 예시적 케이스는 B8-R2 동작들을 도시한다. 도 4ca에 도시된 바와 같이, 하나의 IFM 슬라이스는 상위 SRAM 뱅크 세트들(109)로부터 공급될 수 있으며, 여기서 "상위"라는 용어는 S0, S4, S10, S14, S7, S3, S13 및 S9를 포함하도록 정의된다. 그리고, 하나의 IFM 슬라이스는 "더 낮은"이라는 용어가 S8, S12, S2, S6, S15, S11, S5 및 S1을 포함하도록 정의된 하부 SRAM 뱅크 세트(109)로부터 공급 될 수 있다. 더 구체적으로, 임의의 상위 SRAM 뱅크 세트들(109)는 모든 상부 타일들(T0, T4, T10, T14, T7, T3, T13 및 T9)에 IFM 슬라이스를 송신(브로드캐스팅)하는 소스로서 작용할 수 있다. 예를 들어, IFM 전달 패브릭(104)은 S10으로부터 IFM 슬라이스를 리드하고 그 IFM 슬라이스를 T0, T4, T10, T14, T7, T3, T13 및 T9로 브로드캐스트하도록 구성될 수 있다. 또는, 예를 들어, IFM 전달 패브릭(104)은 S3으로부터 IFM 슬라이스를 리드하고 그 IFM 슬라이스를 T0, T4, T10, T14, T7, T3, T13 및 T9로 브로드캐스트하도록 구성될 수 있다.
유사하게, 임의의 하위 SRAM 뱅크 세트들(109)는 모든 하부 타일들(T8, T12, T2, T6, T15, T11, T5 및 T1)에 IFM 슬라이스를 송신(브로드캐스팅)하는 소스로서 작용할 수 있다. 예를 들어, IFM 전달 패브릭(104)은 S11으로부터 IFM 슬라이스를 리드하고 그 IFM 슬라이스를 T8, T12, T2, T6, T15, T11, T5 및 T1로 브로드캐스트하도록 구성될 수 있다. 또는, 예를 들어, IFM 전달 패브릭(104)은 S8으로부터 IFM 슬라이스를 리드하고 그 IFM 슬라이스를 T8, T12, T2, T6, T15, T11, T5 및 T1로 브로드캐스트하도록 구성될 수 있다.
또한, 도 4ca를 참조하면, SRAM 뱅크 세트들(109)은 IFM 슬라이스들을 전송하기 위해 페어링되어 하나의 (클럭) 사이클 데이터가 다음 쌍들 "[S0, S1] [S2, S3] [S4, S5] [S6, S7] [S8, S9] [S10, S11] [S12, S13] 및 [S14, S15]" 중 하나로부터 수신된다. 예를 들어,도 4ca에서, IFM 슬라이스들은 SRAM 뱅크 세트들(109)의 [S10, S11] 쌍으로부터 공급된다.
도 4cb는 각각의 IFM 슬라이스가 8 개의 타일들로 브로드캐스트되고 2 개의 타일들의 출력들이 열 방향의 방식으로 감소되는 2 개의 IFM 슬라이스들을 입력하는 것을 도시한다. 예를 들어,도 4af에 이어, T0의 출력은 T8의 출력과 함께 감소하여 하나의 결과를 생성한다. T4 및 T12 출력이 감소하여 다른 결과를 생성한다. T10 및 T2 출력이 감소하여 또 다른 결과를 생성한다. T14 및 T6 출력이 감소하여 또 다른 결과를 생성한다. T7 및 T15 출력이 감소되어 또 다른 결과가 생성한다. T3 및 T11 출력이 감소하여 또 다른 결과가 생성한다. T13 및 T5 출력이 감소하여 또 다른 결과를 생성한다. T9 및 T1 출력이 감소하여 또 다른 결과를 생성한다.
부분 결과들의 경우, 8 개의 감소 결과들은 두 그룹들의 SRAM 뱅크 세트들([S0..S7] 및 [S8..15]) 중 하나에 저장될 수 있다. 예를 들어,도 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 슬라이스가 평면도의 각 쿼터(quarter)로부터 공급될 수 있다. 도 4db를 참조하면, 상기 동작은 4 개의 IFM 슬라이스들을 브로드캐스팅하고 감소 후에 4 개의 결과들을 생성하는 것에 관련될 수 있다. 도 4db에 도시된 바와 같이 결과들이 부분이면, IFM 슬라이스들이 "[S0..S3], [S4..S7], [S8..S11] 및 [S12..S15]"를 포함하는 4 개 그룹들에서 온 경우 그리고 출력들이 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]"의 경우, IFM 전달 패브릭(104) 및 OFM 전달 패브릭(106)은 하나의 (클럭) 사이클 내에서 입력들을 전송하고 출력들을 수신하도록 관리할 수 있다.
도 4aj를 참조하면, 각각의 감소 그룹(407)은 하나의 출력 결과를 생성한다. 상단 부분(top part)에 두 개의 결과들이 저장되고 하단 부분(bottom part)에 두 개의 결과들이 저장될 수 있다. 최종 결과들을 포함하는 OFM 슬라이스는 8 바이트들의 크기를 가지므로, OFM 전달 패브릭(104)은 2 개의 인접 열들의 결과들을 병합할 수 있다. 도 4ah는 또한 감소 후 4 개의 출력 결과들을 형성하기 위하여 브로드캐스트되고 있는 4 개의 IFM 슬라이스들을 도시한다.
제4 예시적 케이스는 B2-R8 동작을 도시한다. 도 4ea에 도시된 바와 같이, 하나의 IFM 슬라이스는 평면도의 각 8 분의 1로부터 공급될 수 있다. 도 4eb를 참조하면, 상기 동작은 감소 후 2 개의 결과들을 생성하기 위하여 8 개의 IFM 슬라이스들을 브로드캐스팅하는 것에 관여될 수 있다.
상기 결과들이 부분적이면 [S0..S7] 및 [S8..S15]를 포함하는 두 그룹들 중 하나로부터 입력이 오는 경우 그리고 출력이 8 개의 그룹들 "[S0 S1], [S2 S3], [S4 S5], [S6 S7], [S8 S9], [S10 S11], [S12 S13] 및 [S14 S15]" 중 하나에 기록되는 경우 그리고 상기 결과들이 최종인 경우 임의의 SRAM 뱅크 세트(109)에서, IFM 전달 패브릭(104) 및 OFM 전달 패브릭(106)은 하나의 (클록) 사이클로 입력들을 전송하고 출력들을 수신하도록 관리할 수 있다.
도 4ea는 제4 예시적 케이스의 경우 브로드캐스트되고 있는 소스 데이터를 도시한다. 도 4eb는 제4 예시적 케이스의 경우에 형성되고 있는 부분 결과들을 도시하고, 도 4ec는 제4 예시적 케이스의 경우에 형성되고 있는 최종적 결과들을 도시한다. 도 4aj를 참조하면, 각 섹션(407)은 축소 후 하나의 결과를 생성한다. 두 결과들 중 하나가 상단 부분에 저장되고, 반면에, 나머지 결과가 하단 부분에 저장될 수 있다. 최종적 결과들을 포함하는 OFM 슬라이스는 8 바이트의 사이즈를 가지기 때문에, OFM 전달 패브릭(106)은 2 개의 인접 열들의 결과들을 병합할 수 있다. 도 4ak는 또한 감소 후 2 개의 출력 결과들을 형성하기 위하여 브로드캐스트되고 있는 4 개의 IFM 슬라이스들을 도시한다.
제5 예시적 케이스는 B1-R16 동작을 도시한다. 도 4fa에 도시 된 바와 같이, 하나의 IFM 슬라이스가 하나의 브로드캐스트에 대응하는 각각의 SRAM 뱅크 세트(109)로부터 공급될 수 있다. 도 4fb를 참조하면, 동작은 모든 16 타일들(102)의 출력을 감소시켜 결과가 부분적일 때 및 결과가 최종일 때의 경우에 대한 임의의 SRAM 뱅크 세트(109)에 저장될 수 있는 하나의 결과를 생성하는 것에 관련될 수 있다.
최종 결과들을 포함하는 OFM 슬라이스는 8 바이트들의 크기를 가지므로, OFM 전달 패브릭(106)은 2 개의 인접 열들의 결과들을 병합할 수 있다. 도 4am은 또한 감소 후 단일 출력 결과를 형성하기 위하여 16 개의 IFM 슬라이스 입력들을 도시한다.
상술 된 예시를 포함하는 IFM 및 OFM 전달 패브릭(104 및 106)은 다음의 동작이 결과들을 소비하는 방식으로 SRAM(109)에 계산 및 저장하는 것을 항상 가능하게 하는 방식으로 설계될 수 있다. 다음 동작이 현재 및 다음 동작들의 리덕션 구성에 대한 모든 순열에 대한 결과를 페치할 수 있다. 예를 들어, 현재 동작은 B4-R4 감소 구성을 사용하고 그것의 결과들을 B4-R4 감소 구성과 관련된 OFM 전달 패브릭(106) 연결 선택에 따르는 SRAM 뱅크 세트(109)에 저장할 수 있다. 이전 B4-R4 동작에 의해 계산되고 저장된 데이터를 성공적으로 페치하면서, 상기 다음 (또는 다음) 동작은 IFM 전달 패브릭(106) 연결을 위한 관련 선택들과 함께 B2-R8 감소 구성을 사용할 수 있다.
도 4g는 앞서 설명된 모든 리덕션 구성들에 대한 모든 IFM 전달 패브릭 연결 옵션들을 지원하는 IFM 전달 패브릭(104)의 하나의 가능한 구현을 도시한다. 이 패브릭은 4 개의 양방향 멀티 드롭 버스들을 포함하며, 양방향 버스들 중 두 개는 상단 SRAM 뱅크 세트들과 상단 타일들 사이에 배치되고 양방향 버스들 중 나머지 2 개는 하단 SRAM 뱅크 세트들과 하단 타일들 사이에 배치된다. 상기 버스들은 상위 버스들로부터의 데이터가 하위 버스들로 흐르고 다시 돌아올 수 있도록 레지스터(411)에 의해 원형 방식으로 연결될 수 있다. IFM 전달 패브릭(104)에 존재할 수있는 추가 파이프라이닝 레지스터들은 설명의 명확성을 위해 도 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 노드(520)는 부분적으로 감소된 결과들, 즉 활성화 기능 어플리케이션 전의 선형 결과들 상에서 동작한다. RAA 노드(520)는 RAA 노드가 위치한 동일한 타일 열 ARU (167)로부터의 입력들 또는 다른 RAA 노드들로부터의 입력들을 수신한다. RAA 노드(520)는 가산기 트리 내에서 더 위 RAA 노드로 또는 ARU(167)로 출력들을 전송한다. 계속해서, 결과들이 최종이면, ARU(167)는 활성화 기능을 적용하고 최종 결과들을 OFM 전달 패브릭(106)으로 전달한다. 또는, 결과들이 부분적이면, ARU(167)는 활성화 기능을 바이패스하면서 부분 결과들을 OFM 전달 패브릭(106)으로 전달한다.
도 5b는 R16 구성을 위해 구성된 리덕션 패브릭(111)을 도시한다. 여기서, ARU 모듈(167)은 (인터-타일 가산기 트리들(128A 및 128B)로부터) 부분적으로 감소된 결과를 생성하고, 도 1x에 도시된 바와 같이 "리덕션 패브릭으로" 출력을 통해 부분적으로 감소된 결과들을 RAA 노드들(502)의 제1 레벨로 스트리밍한다. RAA 노드(502)의 제1 레벨은 부분적으로 감소된 데이터의 16 개의 ARU 스트림들을 부분적으로 감소된 데이터의 8 개의 스트림들로 쌍으로 감소시킨다. 제2 레벨의 RAA(504)는 제1 레벨의 RAA 노드(502)에 의해 생성된 8 개의 스트림들을 부분적으로 감소된 데이터의 4 개의 스트림들로 쌍으로 감소시킨다. 제3 및 제4 레벨 RAA 노드들(506 및 508)은 (최종적 결과들을 생성할 때) 활성화 기능 적용을 위해 타일(T14)의 ARU(167)로 전달되고 OFM 전달 패브릭 (106)으로 출력되는 완전히 감소된 데이터의 하나의 스트림을 생성하기 위한 리덕션 프로세스(reduction process)를 완료한다. 타일(T14)은 물리적으로 트리 루트 RAA 노드(508) 근처에 위치하고 도 4fb에서 타일(T14)의 ARU(167)에 대응한다.
도 5c는 R8 구성을 위해 구성된 리덕션 패브릭(111)을 도시한다. R16 구성과 달리, R8 구성에는 4 개 레벨들과는 대조적으로, 각 가산기 트리가 3 개 레벨을 갖는 2 개의 가산기 트리들(하나가 아닌)가 포함된다. 제1 가산기 트리는 타일들(T0, T8, T4, T12, T10, T2, T14 및 T6)의 ARU들로부터 부분적으로 감소된 데이터를 감소시키고, 완전히 감소된 결과를 타일(T12)의 ARU(167)로 전달하여 데이터 리턴을 완료한다. 제2 가산기 트리는 타일들(T7, T15, T2, T11, T13, T5, T9 및 T1)의 ARU들(167)로부터 부분적으로 감소된 데이터를 감소시키고, 완전히 감소된 결과를 타일(T13)의 ARU(167)로 전달하여 데이터 리턴을 완료한다. 타일들(T12 및 T13)은 각각 물리적으로 각각의 트리 루트 RAA 노드들(506) 근처에 위치하고, 도 4fb에서 각각 타일들(T12 및 T3)의 ARU들(167)에 대응한다.
도 5d는 각각의 가산기 트리가 4 개의 타일들로부터 부분적으로 감소된 출력들을 감소시키는 4 개의 가산기 트리들을 갖는 구성 R4를 도시한다. 도 4db는 4 개의 트리 루트 노드들와 관련된 ARU들(167)의 물리적 위치들을 도시한다.
도 5e는 각각의 가산기 트리가 2 개의 타일들(102)로부터 부분적으로 감소된 출력들을 감소시키는 8 개의 가산기 트리들을 갖는 구성 R2를 도시한다. 도 4cb는 8 개의 트리 루트 노드들와 관련된 ARU들의 물리적 위치들을 도시한다.
마지막으로, 도 5f는 리덕션 패브릭(111)을 필요로하지 않고 OFM 전달 패브릭(106)에 직접 결과들을 출력하는 가산기 트리 및 타일 ARU들(167)를 갖지 않는 구성 R1을 도시한다. 도 4bb는 이 경우에 ARU들(167)의 물리적 위치들을 도시한다. 도 4bb, 도 4bc, 도 4bd, 도 4cb, 도 4cc, 도 4db, 도 4dc, 도 4eb, 도 4ec 및 도 4db에서, ARU(167) 내부의 숫자는 도 5b 내지 도 5f에 도시된 바와 같이 RAA 트리 노드 레벨을 나타낸다. 여기서, 레벨 0은 구성 R1에 해당한다(리덕션 패브릭을 사용하지 않음). 구성 R1은 ARU 멀티플렉서(174)에 의해 누산기(130A) (또는 130B)로부터 (비트 범위 선택 유닛(187)과 함께 시작하는) 활성화 기능 및 부분 경로들로 직접 데이터를 전달하는 ARU 멀티플렉서(174)에 의해 구현된다. 따라서, 도 1x에 도시된 바와 같이 리덕션 패브릭(111)을 바이패스한다. 스파스 활성화 지지(sparse activation support)의 경우에 리덕션 패브릭(111)을 적절하게 바이패스하기 위해 요구되는 일부 보조 로직은 일반적인 설명을 명확하게하기 위해 도시되지 않는다.
도 5g는 RAA 노드들 (502, 504, 506, 및 508)로부터 형성된 리덕션 패브릭(111)을 도시한다. 각각의 RAA 노드는 물리적으로 정확히 하나의 타일(102) 근처에 위치한다. 각각의 RAA 노드(502)는 노드(502)가 위치한 타일 열 내 두 타일들로부터 입력들을 수신한다. 타일 열당 정확히 하나의 RAA 노드(502)가 있다. RAA 노드(508)는 노드들(506)로부터 그것의 입력들을 수신한다. 상기 노드들(506)은 노드(504)로부터 그것들의 입력들을 차례차례 수신하고, 노드(502)로부터 입력들을 차례차례 수신한다. 15 개의 트리 노드들이 있고 반면에 물리적 타일들의 수는 16이므로, 타일(T12)은 그와 연관된 RAA 노드(502)를 가지지 않는다.
도 5a에 도시 된 바와 같이, 각 RAA 노드(520)는 누산기(518) 및 가산기(514)를 사용하여 감소된 결과들을 누적하는 것뿐만 아니라 가산기(512)를 사용하여 2 개의 입력들(A 및 B)을 감소시키는 것을 포함하는 2 개의 기능들을 가진다. 예를 들어 IFM 웨이트 사이클링을 시작하기 위하여, 멀티플렉서(516)는 누적의 시작시 가산기(518)에 가산기(512)로부터 감소된 결과를 로딩한다. 또한, 멀티플렉서(516)는 예를 들어 IFM 웨이트 사이클링이 시간에 따라 진행됨으로서 감소된 결과들을 누적할 수 있게 한다.
압축된 형식으로 웨이트를 저장하면, 특히 완전히 연결된 레이어 계산 중에, 웨이트를 저장하는 데 필요한 SRAM (및 오프-칩 DDR) 스토리지의 양을 감소시키고, 페칭 웨이트들과 관련된 SRAM (및 오프 칩 DDR)의 전력을 감소시키고, 웨이트 로딩 속도를 높이는 데 도움이 될 수 있다. 일부 실시 예들에 따르면, 유휴 사이클들은 승수기 단위 웨이트들을 로드하는 데 사용될 수 있다. 또한, 일부 실시 예들에서, MR 열 당 단지 하나의 웨이트 로딩 버스를 도시하는 도 1k과는 대조적으로, 복수의 수직 웨이트 로딩 버스들(101)가 웨이트 로딩을 가속화하기 위해 사용될 수 있다.
더 구체적으로, 도 4ab에 앞서 도시된 바와 같이, 웨이트들은 각각의 타일(102)에 로컬인 4 개의 SRAM 뱅크들(108)에 저장된다. 그리고 각각의 타일(102)은 4 개의 뱅크들 모두를 병렬로 리드할 수 있다. 각각의 SRAM 뱅크(108)는 16 개의 8-비트 웨이트들을 페치한다. 각 타일(102)은 8 개의 MR 열들을 가지기 때문에, 웨이트들이 압축되지 않은 경우 활성화 레인 당 하나의 8-비트 웨이트를 로드하기 위하여 "(타일 당 8 개의 MR 열들)/(타일 당 4 개의 로컬 SRAM 뱅크들) = 2 클럭들"이 필요하다. 또한, 각각의 타일(102)은 타일 당 웨이트 압축 해제 유닛(138)을 포함하며, 이는 FC 및 컨벌루션 웨이트들을 압축 해제하는데 사용될 수 있다. 예를 들어, 각각의 승산기 유닛(103)은 18 개의 웨이트들을 가질 수 있다. 모든 MU 웨이트를 로딩하기 위해 (MU 당 18 개의 웨이트들)*(웨이트 로드 당 2 클럭들) = 36 클럭 사이클들이 걸릴 수 있다. 18 개의 웨이트들을 모두 사용하지 않는 더 작은 커널은 더 빨리 로드 될 수 있다.
대규모 FC 계산 중에 승수기 활용률을 높게 유지하기 위해, FC 계산과 동시에 진행되는 웨이트 스트리밍은 완전히 연결된 계산들에서 처리량을 향상시키는 데 사용될 수 있다. 전술한 바와 같이, FC 계산은 웨이트들을 재사용하지 않는다. 따라서, FC 계산 중에 웨이트들을 빠르게 스트리밍할 필요가 있다. 특히, 모든 승산기들(126)을 완전히 활용하기 위하여, 1의 IFM 웨이트 사이클링을 갖는 FC 계산은 각 MU에 클록 당 하나의 웨이트를 제공 할 것을 요구한다. 모든 승산기들을 완전히 활용하기 위하여, 2의 IFM 웨이트 사이클링은 2 개의 클럭들 당 하나의 웨이트를 각 MU(103)에 제공할 것을 요구한다. 더 일반적으로, 모든 승산기들(126)을 완전히 활용하기 위하여, N의 IFM 웨이트 사이클링은 MU(103) 당 N 클록들 당 하나의 웨이트를 제공 할 것을 요구한다.
다양한 딥 러닝 연구 간행물들에 따르면, 완전히 연결된 레이어 웨이트들은 때로는 2 배 또는 그 이상 압축될 수 있다. 그러한 경우에, 하나의 압축 해제된 웨이트는 두 클록마다 각각의 Mu(103)에 로드되는 것과 대조적으로, 하나의 압축되지 않은 웨이트는 하나의 클록마다 각 Mu(103)에 로드될 수 있다.
또한, IFM 데이터는 웨이트와 함께 SRAM(109)로부터 페치해야 하므로, 웨이트들을 페치할 수 있는 SRAM 대역폭이 감소된다. SRAM(109)으로부터 페치되는 IFM 데이터의 양은 매핑 감소 구성에 의존한다. R1과 같은 더 작은 감소 구성들에 비하여, R16과 같은 더 큰 감소 숫자는 더 많은 채널들을 이용하여 IFM 데이터를 페치할 것을 요구한다.
모든 64 개의 SRAM 뱅크들이 FC 웨이트들을 페치하기에 바쁘기 때문에, SRAM(109)로부터 IFM 데이터를 동시에 리드할 수 없다. 승수기 사용률을 증가시키기 위하여, IFM 데이터는 모든 64 개 뱅크들에 걸쳐 슬라이스되어 저장될 수 있다. 일부 실시 예들에서, IFM 데이터를 페치하기 위하여, 하나의 클록 사이클 동안 웨이트 독출이 중지된다. 그리고 모든 64 개의 뱅크들은 하나의 IFM 데이터를 SRAM(109)의 출력 옆에 위치한 1-deep 캐시 레지스터(cache register)에 의하여 독출하도록 한다. 그리고 나서, IFM 데이터는 캐시된 64 개의 16-바이트 라인으로부터 스트림한다. 더 구체적으로, 64 개의 모든 뱅크들로부터 병렬로 하나의 IFM 데이터를 페치하면, IFM 데이터 독출들의 "R = (64 SRAM 뱅크들)*(브로드캐스트 구성 번호 B)/(물리적 타일들의 수)" 수와 동일하도록 한번에 충분한 데이터는 페치될 수 있다. 따라서, 도 6에 도시된 일부 실시 예들에 대해, 완전히 연결된 레이어 계산을 위한 최대 승산기 활용률은 브로드캐스트 구성 번호 B의 함수로서 "R/(1 + R)"에 따라 계산될 수 있다.
전술한 바와 같이, 로컬 제어 유닛(142 및 144)뿐만 아니라 글로벌 제어(140)는 다양한 구성 레지스터들을 가질 수 있다. 일부 실시 예들에 따르면, 예를 들어, 뉴럴 프로세서(100)가 하나의 동작에서 다른 동작으로 천이함에 따라 또는 하나의 SRAM 뱅크 세트 (109)가 데이터를 소진하고 IFM 전달 패브릭(104)이 다른 SRAM 뱅크 세트(109)로부터 IFM 데이터를 스트리밍 즉시(지연없이) 전환해야하는 경우에, 이들 구성 레지스터들 중 일부의 컨텐츠는 뉴럴 프로세서(100)의 구성을 즉시 변경하기 위해 즉시 전환 할 수 있다. 통상적으로 알려진 디자인 관례들에 따라, 그러한 온-더-플라이 재구성은 구성 레지스터들을 더블 버퍼링함으로써 달성될 수 있고, 2 개의 버퍼들 사이를 전환함으로써 새로운 구성을 실행할 수 있다. 도 1a에 도시된 바와 같이, 중앙 제어(110)는 AXI 버스를 통해 CPU로부터 구성 데이터(configuration data)를 수신할 수 있고, 그 구성 데이터를 유틸리티 버스(112)로 전달할 수 있다. 상기 유틸리티 버스는 ARU 바이어스 레지스터(195), 스케일 레지스터(191), 활성화 기능(197) 구성 레지스터 등을 포함하는 다양한 다른 레지스터들뿐만 아니라 CPU로부터 구성 값들을 제어 로직의 구성 레지스터들(140, 142 및 144)로 전송 및 로드할 수있다. 필요에 따라 다양한 시간에서 많은 수의 이중 버퍼 레지스터들 전환과 관련된 온-더-플라이 구성 변경을 조정하기 위하여, 상기 유틸리티 버스(112)는 구성 레지스터 값들뿐만 아니라 이중 버퍼 레지스터가 그것의 구성을 유효하게 전환해야 하는 시간(클록 카운트)을 로드할 수 있다.
도 1a는 또한 SRAM 뱅크 세트들(109)을 도시한다. 상기 SRAM 뱅크 세트들(109) 각각은 CPU가 IFM 및 웨이트 텐서들을 라이트하고 OFM 결과들을 리드할 수있게 하는 AXI 슬레이브 인터페이스를 갖는다. SRAM 뱅크 세트들은 로컬 웨이트 로드 연결뿐만 아니라 IFM 및 OFM 전달 패브릭들(104 및 106)로부터 I/O 요청들을 처리하므로, AXI 인터페이스(114)를 통한 CPU I/O 요청들은 CPU가 결과를 기다리는 동안 뉴럴 네트워크 계산이 지연없이 계속되도록 하기 위해 중재되고 더 낮은 우선 순위로 할당될 수 있다.
또한, 본 명세서에 개시된 요지는 "버터플라이 셔플러(butterfly shuffler)"로 지칭되는 스케일러블 멀티플렉서 회로 또는 모듈을 제공하며, 이는 스파스 데이터(sparse data)를 균질화하는 것을 포함하는 목적을 위하여 데이터를 효율적으로 치환한다. 입력 특징 맵들과 관련된 데이터와 같은 스파스 데이터가 함께 모여있는 논-제로 값들을 포함 할 수있는 상황들이 있을 수 있다. 즉, 데이터는 비균질 스파스 데이터일 수 있다. 이러한 상황에서, 예를 들어, 입력 특징 맵(IFM) 값들을 병렬로 곱함으로써 스파스 데이터를 병렬 처리 할 수있는 시스템은 유휴 상태(즉, 하나 이상의 피연산자가 0 인 승수기들)의 많은 승수기들을 가져야 한다. 반면에, 작은 그룹들의 승수기들은 대량의 곱셈을 제공하여 병목 현상 상태를 야기할 수 있다.
예를 들어, 도 7a를 참조하면, 메모리 또는 SRAM(109) 내 IFM 데이터는 IFM 슬라이스들 내 레인뿐만 아니라 IFM 슬라이스들 사이에 비교적 균일하게 분포된 제로 값들을 갖는다. 활성화 스키핑을 달성하기 위해, IFM 버퍼(141)는 도 7a로부터 IFM 슬라이스의 스트림을 수신할 수 있고, 비순차적 방식으로 논-제로 활성화들을 성공적으로 멀티플렉싱하기 위해 1의 룩-어사이드와 결합된 1의 룩-어헤드를 사용할 수 있다. 예를 들어, 위치(702)에서 0의 값을 대체하기 위하여, 논-제로 값(701)은 하나의 레인-다운 및 한 개의 위치 앞으로 다중화될 수 있다. 유사하게, IFM 버퍼(141)는 화살표 마커로 표시된 바와 같이 논-제로 값들을 비순차적으로 전달할 수 있다.
도 7b에 도시된 IFM 데이터는 도 7a와 동일한 개수의 제로 값들의 수를 가진다. 그러나, 도 7b 내 제로 값들은 인접한 IFM 슬라이스들의 동일한 IFM 레인 내에 클러스터링된다. 활성화 스키핑을 달성하기 위하여, IFM 버퍼(141)는 위치(704)를 점유하는 제로 값들 대신에 논-제로 활성화들(703)을 다중화하도록 4의 룩-어사이드를 지원해야 할 것이다. 멀티플렉서들(163)이 더 멀리에 위치한 레인들로부터 활성화 값들을 가져 오기 위해 더 많은 입력들을 가지기 때문에, 예를 들어, 1보다 더 큰 넓은 룩-어사이드 범위에 대한 지원은 실리콘 영역의 관점에서 엄청나게 비쌀 수 있다.
도 7c를 참조하면, IFM 슬라이스 내에 논-제로 값의 클러스터를 분산시키기 위하여, IFM 셔플러(720)는 각각의 IFM 슬라이스 내의 값들을 유사-랜덤하게 퍼뮤테이션(permute)하는데 사용될 수 있으므로, 도 7b에 도시된 데이터의 배열은 도 7a에 도시된 데이터의 배열로 변환될 수 있다.
활성화들의 유사-랜덤 순열은 셔플된 활성화들이 올바른 웨이트들에 의하여 곱해지도록 동일한 방식으로 웨이트들의 순열이 수반되어야 한다. 유사-랜덤 순열 시퀀스가 계산에 앞서 알려질 수 있기 때문에, 웨이트들은 각각의 인커밍 IFM 슬라이스에 대해 오프라인으로, 레인-방향으로 순열될 수 있고, 계산이 시작되기 전에 MR 타일(102)로 로딩될 수 있다.
IFM 슬라이스 값들을 레인 단위로 셔플링하는 것 외에도, IFM 셔플러(720)는 IFM 슬라이스들의 시간적 시퀀스를 재정렬할 수도 있다. IFM 슬라이스가 도착하는 변경된 순서와 일치하기 위하여, 도트-곱 계산의 단계와 관련하여 MR 타일 웨이트가 오프라인으로 다시 정렬되어야 한다.
IFM 셔플(720)은 버터플라이 셔플러를 사용하여 효율적으로 구현될 수 있다. 도 7d를 참조하면, 16-채널 (레인) 버터플라이 셔플러(740)는 16 개의 행들(0..15) 및 4 개의 열들(0..3)의 어레이로 배열된 64 개의 2 대1 멀티플렉서들 Mrow, col (730)로 구성될 수 있다. 도시된 바와 같이, 버터플라이 셔플러(740)는 16 개의 입력 레인들을 통해 다른 IFM 슬라이스로 도달하는 IFM 슬라이스 값들을 유연하게 퍼뮤테이션 또는 재배열할 수 있다.
도 7d를 참조하면, 각 열의 멀티플렉서(730)가 쌍을 이루어 2x2 크로스바들을 생성한다. 더 구체적으로, 16-레인 버터플라이 셔플러(740)에서, 각각의 열에서 16 개의 멀티플렉서들(730)는 쌍으로 그룹화되어 8x2x2 크로스바 스위치들을 형성한다. 한 쌍으로 함께 속한 멀티플렉서들의 제어 신호들은 함께 연결된다. 열(0) 내 16 개의 멀티플렉서들(730)는 다음과 같이 8 개의 2x2 크로스바들을 형성하도록 쌍을 이룬다: {M0,0, M1,0}, {M2,0, M3,0}, {M4,0, M5,0}, {M6,0, M7,0}, {M8,0, M9,0}, {M10,0, M11,0}, {M12,0, M13,0}, {M14,0, M15,0}. 8 개의 결과 쌍들은 각각 신호들 sel0..7,0에 의해 제어된다. selx, col이 디-어설트(de-assert)되면, 상기 해당 크로스바가 교차없이 입력들을 그대로 출력들에 전달한다. selx, col이 어설트(assert)되면, 상기 해당 크로스바가 입력들을 출력들로 전달된다. 즉, 입력 신호들이 크로스바의 출력들에서 교환된다. 예를 들어, sel0,0이 디-어설트(de-assert)되면, 멀티플렉서들({M0,0, M1,0})에 의해 형성된 2x2 크로스바가 레인들(0과 1)로 변경없이 레인들(0과 1)을 통과한다. sel0,0이 어설트되면, 멀티플렉서들{M0,0, M1,0}이 레인들(0과 1)을 즉, 스왑된(교차된) 레인들(1과 0)로 출력한다.
열(0)의 멀티플렉서 쌍들은 멀티플렉서들({Mx*2,0, Mx*2+1,0}를 페어링함으로써 형성될 수 있다. 여기서 x는 selx, 0에 의해 제어되는 0 내지 7의 정수이다. 더 일반적으로, N 개의 레인들 및 "M = log2 (N)" 개 컬럼들을 갖는 버터플라이 셔플러에서, 열(c) 내 멀티플렉서들은 selx,c에 의하여 제어되는 "{Mmod (x, k) + floor (x, k) * 2, c, Mmod (x, k) + floor (x, k) * 2 + k, c}"로 짝을 이룬다. 여기서 k = 2c, x [0..2M-1], 각 열은 2M-1 제어 신호들을 가진다. 순열을 제어하는 총 "S = 2M-1*M = N*log2(N)/2 신호들이 있어 총 "2N*log2(N)/2 순열들이 발생한다.
본 명세서에 개시된 버터플라이 셔플러(740)는 완전한 크로스바 멀티플렉서 구성이 아니다. 전체 크로스바 구성은 더 넓은 영역 O(N2)를 가진다. 여기서, N은 데이터의 레인들의 수이다. 반면에, 버터플라이 셔플러(740)의 영역은 O(N*log (N))이며, 여기서, N은 데이터의 레인들의 수이다. 일반적으로, 전체 크로스바는 N!을 제공한다. 반면에, N 개의 레인들을 가지는 버터플라이 셔플러는 2N * log2 (N)/2 순열들을 생성한다. 예를 들어, 16-레인 버터플라이 셔플러는 16 개의 채널들에 대해 216*4/2 = 232 순열들을 가진다.
도 7e는 버터플라이 셔플러의 데이터 경로(740)의 순열을 제어하는 유사-랜덤 생성기(741), 예를 들어 선형 피드백 시프트 레지스터를 도시한다. 계산이 시작되기 전에, 예를 들면, 어떤 위치에서 컨볼루션을 계산하기 위하여, MR 타일의 제어 로직은 유사-랜덤 생성기(741)를 초기화하여 인커밍 슬라이스들 내 데이터의 셔플에 관하여 순열들의 잘 알려진 유사-랜덤 시퀀스를 생성할 수 있다. 앞서 언급된 바와 같이, 각각의 IFM 슬라이스 내에서 레인들의 셔플 후 순서는 웨이트들의 레인 인덱스들과 일치하도록 이 계산에 사용될 MR 타일(102)에 사전로드된 웨이트들은 오프라인으로 미리 셔플링되어야 한다.
전술된 바와 같이, 제로 활성화 희소성(zero activation sparsity)은 룩-어사이드 및 룩-어헤드 메커니즘에 의해 지원될 수 있고, 버터플라이 셔플러(740)와 같은 타입 IFM 셔플러에 의해 더 증강될 수 있다. MU 열 당 2 개의 가산기 트리들을 사용한 제로 활성화 스키핑에서, 최대 속도가 약 2 배, 평균 속도가 약 1.5 배가 된다. 그러나 메모리(SRAM)뿐만 아니라 입력 기능 맵 패브릭의 대역폭은 제한될 수 있다. 전술된 바와 같이, 예시적인 실시 예에서 입력 특징 맵 패브릭 대역폭은 제로 활성화 스키핑에 의해 획득된 2 배의 최대 속도와 일치하도록 2 배로 제한될 수 있다. 따라서, 제로 활성화 스킵핑이 비활성화된 계산과 비교하여, 제로 활성화 스킵핑으로 인한 2 배 최대 속도는 OFM 패브릭 처리량이 2 배가 되도록 한다. OFM 패브릭 처리량은 계산 처리량과도 일치해야 하므로, 2 배의 대역폭이 제공된다.
예를 들어 IFM 전달 패브릭 대역폭과 관련된 SRAM 클록 주파수 또는 영역 또는 전력 제약으로 인해, 메모리(SRAM) 및/또는 IFM 전달 패브릭이 2 배로 제한되는 경우, 데이터가 처리되기를 기다리는 동안 SRAM 및/또는 IFM 전달 패브릭이 데이터 전달에서 병목 현상이 발생하고 MR 타일 승수기들이 유휴 상태가되면, 제로 활성화 스키핑의 추가 증가는 제한될 수 있다. 더 일반적으로, 제로 활성화 및 제로 웨이트 스키핑을 포함한 모든 메커니즘에 의한 계산 가속이 제한될 수 있다. 전술된 바와 같이, 제로 활성화 스키핑을 위한 방법 및 장치가 제시되었다. 그러나, 컨볼루션 및 완전히 연결된 레이어 웨이트는 일반적으로 희소성(sparseness)을 나타낸다. 즉, 웨이트 커널들은 많은 수의 제로 웨이트들을 가질 수 있다. 따라서, IFM 전달 패브릭 및/또는 메모리(SRAM)의 대역폭에 의해 부과되는 유한 대역폭 제약 사항을 유념하는 동안, 제로 활성화 스키핑뿐만 아니라 제로 웨이트 곱셈 스키핑을 탐색하는 것이 유리할 수 있다.
예를 들어, 웨이트 희소성(weight sparsity)을 활성화 희소성(activation sparsity)과 조합하는 것을 포함하여, 웨이트 희소성을 지원하는 방법 및 장치이 고려된다. IFM 전달 패브릭 대역폭이 기준 대역폭의 2 배로 제한된다고 가정하면, 즉 모든 곱셈 스키핑 방법들이 비활성화된 동안, 웨이트 희소성 방식의 전체 처리량은 기준 처리량의 2 배로 제한될 수 있다. 이런 이유로 웨이트 희소성 지원을 위해, 특히 계산 속도를 2 배 이상 향상시키기 위하여 활성화 희소성 지원과 결합될 때, IFM 전달에 직교하는 다른 접근법, 즉 IFM 전달 패브릭 대역폭의 추가 증가를 요구하지 않는 접근법을 이용하는 것이 유리할 수 있다.
그러한 하나의 접근법은 출력 특징 맵 계산일 수 있다. 더 구체적으로, IFM 전달 패브릭 대역폭을 변경하지 않는 동안, MU 열은 OFM 사이클 당 하나 이상의 출력을 생성할 수 있다. 도 8a는 명확성을 위해 생략된 제로 활성화 스키핑 로직을 가지는 베이스라인 Mu(810)과 제로 웨이트 스키핑 로직을 가지지 않는 베이스라인 MU(810)을 도시한다. 여기서, 웨이트 레지스터 파일(805)은 18 개의 웨이트들(815)를 가진다. 승산기(822)는 18-대-1 멀티플렉서(820)를 사용하여 활성화 및 레지스터 파일(805)의 웨이트를 수신하여 도트-곱 계산을 계속하기 위해 가산기 트리로 공급되는 텀 곱(term product)을 계산한다. 도 8b는 이중 희소성(dual sparsity), 즉 제로 값 활성화 및 제로 값 웨이트 스키핑 모두 지원하는 MU(850)를 도시한다. 웨이트 레지스터 파일(805)은 9 개의 웨이트들을 포함하는 2 개의 그룹들(811 및 812)으로 논리적으로 분할되었다. 여기서, 9 개의 웨이트들의 제1 그룹은 하나의 출력 채널에 속하고, 9 개의 웨이트들의 제2 그룹은 제2 출력 채널에 속한다. 다시 말하면, 출력 사이클링은 항상 적어도 2로 유지된다. 본 발명자들에 의해 수행된 맵핑 실험은 출력 사이클링을 적어도 2로 유지하는 것이 대중적인 뉴럴 네트워크 모델들의 대부분의 층들에 실용적일 수 있음을 보여준다. 반면에, 나머지 계층들의 경우 논리적 웨이트 레지스터 그룹화가 비활성화될 수 있다.
이 경우, 그룹(1)에서 다음 웨이트를 사용하는 대신에, 제로-값의 웨이트 스키핑은 그룹(0)에서 곧 있을 곱셈으로 예정된 웨이트 값이 0과 같은지 체크한다. 그룹들(0 및 1)의 웨이트들이 모두 0 값을 갖는 경우, MU는 다음 픽셀을 처리할 수 있다.
본 명세서에 개시된 요지의 다른 측면에서, 도 8C를 참조하면, ABU는 다음 활성화들에 대응하는 활성화들의 추가 세트(850)를 브로드캐스트할 수 있고, 제로 스키핑 룩-어헤드 및 룩-어사이드 애플리케이션의 결과로서 IFM 버퍼(124)에 의해 스케쥴링된 활성화들의 순서, 즉 일반적으로 현재 브로드캐스트 활성화들(750)를 따르는 활성화들의 순서를 참조한다. 도 8b를 참조하면, MU(850)는 활성화 브로드캐스트 버스들의 두 세트들을 수신할 수 있다. 특히, 추가적 활성화 버스는 더 빠른 열들, 즉 제로 활성화 및/또는 제로 웨이트로 인해 곱셈을 스킵할 수 있는 모든 Mu들을 가지는 열들이 다음 픽셀로 진행하도록 할 수 있다. 또한, 일부 열들은 비순차적으로 다음 픽셀을 계산할 수 있다. 그러나, MU 행 당 활성화 버스들의 수는 열이 비순차적으로 얼마나 멀리 진행할 수 있는지를, 즉, 도 8b에 도시 된 예시에서만 하나의 픽실만큼 제한한다.
전술한 바와 같이, 논-제로 값들의 클러스터가 분산될 때, 즉, 균질화 될 때, IFM 셔플링은 각 주기마다 활성화들의 두 세트를 전송하는 데 특히 도움이 될 수 있다.
요약하자면, 활성화 희소성 외에도, 상기 제안된 이중 희소성 접근법(dual sparsity approach)은 높은 IFM 및/또는 SRAM 대역폭을 요구함이 없이 웨이트 희소성을 이용하는 이점을 가진다. 반면에, 2 배 이상의 속도로 IFM 데이터를 수신하는 동안, 상기 제안된 이중 희소성 접근법은 계산 속도를 2 배로 늘리고, 즉, 기준(희소성 지원이 비활성화된 상태)보다 2 배 더 빠르게 계산한다. 상기 제안된 이중 희소성 접근법의 다른 장점은 웨이트가 물리적이 아닌 논리적으로 그룹화 될 때 웨이트 선택 멀티플렉서(820)의 재사용일 수 있다. 하나의 특정 실시 예는 제로 활성화 스키핑을 위해 룩-어사이드를 사용하지 않도록 선택할 수 있다. 따라서 룩-어사이드 로직 및 멀티플렉서들이 인접한 Mu들로부터 웨이트들을 가져(빌려) 오도록 필요가 없다. IFM 셔플링을 가지면, 룩-어사이드 로직이 없는 이러한 실시 예에 특히 유리할 것이다. 최종적으로, 논리적으로, 계산 매핑 목적으로, 이러한 계산은 16x8 승산기들을 사용하여, 8과 반대로, 16 개의 출력 열들을 처리하는 각각의 타일로 본질적으로 취급될 수 있다.
본 명세서에서 사용되는 바와 같이, 용어 "멀티플렉서" 및 "디멀티플렉서"는 상호 교환적으로 사용된다. 각 용어는 일측("멀티 포트"측)에 복수의 데이터 단자들(예: 데이터 입력 또는 데이터 출력)가 있고 다른 측("단일 포트"측)에 하나의 데이터 단자(예: 데이터 출력 또는 데이터 입력)가 있는 교환 가능한 장치를 의미한다. 디바이스는 디바이스의 제어 입력에서 수신된 제어 신호에 따라 선택된 일측의 복수의 데이터 단자들을 다른 측의 단일 데이터 단자에 연결되도록 구성된다.
"프로세싱 유닛"이라는 용어는 본 명세서에서 데이터 또는 디지털 신호를 처리하는데 사용되는 하드웨어, 펌웨어 및 소프트웨어의 임의의 조합을 포함하도록 사용된다. 프로세싱 유닛 하드웨어는 예를 들어, ASIC(application specific integrated circuit), 범용 또는 특수 목적의 중앙 처리 장치(CPU), 디지털 신호 프로세서(DSP), 그래픽 처리 장치(GPU) 및 필드 프로그래머블 게이트 어레이(FPGA)와 같은 프로그램 가능 논리 장치들을 포함할 수 있다. 본 명세서에서 사용되는 프로세싱 유닛에서, 각각의 기능은 그 기능을 수행하도록 구성된 하드웨어, 즉 하드 와이어(hard-wired), 또는 비일시적 저장 매체에 저장된 명령을 실행하도록 구성된 CPU와 같은 보다 일반적인 목적의 하드웨어에 의해 수행된다. 프로세싱 유닛은 단일 인쇄 회로 기판(PCB) 상에 제조되거나 여러 개의 상호 연결된 PCB들에 걸쳐서 분산될 수 있다. 프로세싱 유닛은 다른 프로세싱 유닛들을 포함할 수 있다. 예를 들어, 프로세싱 유닛은 PCB 상에 상호 연결된 2 개의 프로세싱 유닛들, FPGA 및 CPU를 포함할 수 있다.
비록 "제1", "제2", "제3" 등의 용어가 본 명세서에서 다양한 요소, 구성 요소, 영역, 층 및/또는 섹션을 설명하기 위해 사용될지라도 이들 요소, 구성 요소, 영역, 층 및/또는 섹션은 이러한 용어에 의해 제한되어서는 안된다는 것이 이해 될 것이다. 이들 용어는 하나의 요소, 구성 요소, 영역, 층 또는 섹션을 다른 요소, 구성요소, 영역, 층 또는 섹션과 구별하기 위해서만 사용된다. 따라서, 본 발명의 사상 및 범위를 벗어나지 않으면서, 본 명세서에서 논의되는 제1 요소, 구성 요소, 영역, 층, 또는 섹션은 제2 요소, 구성 요소, 영역, 층, 또는 섹션으로 지칭 될 수 있다.
도면에 도시된 바와 같이, 한 요소 또는 특징과 다른 요소 또는 특징의 관계를 설명하기 위하여 "아래", "아래", "아래", "아래", "위", "위" 등과 같은 공간적으로 상대적인 용어는 본 명세서에서 설명의 편의를 위해 사용될 수 있다. 도면에 도시된 방향 외에도, 이러한 공간적으로 상대적인 용어는 사용 중이거나 동작 중인 장치의 다른 방향을 포함하도록 의도 된것으로 이해 될 것이다. 예를 들어, 도면 내 장치가 뒤집어지면, 다른 요소 또는 특징의 "아래"또는 "아래"또는 "아래"로 기술된 요소는 다른 요소 또는 특징의 "위"에 지향될 것이다. 따라서, "아래" 및 "밑"라는 예시적인 용어는 위와 아래의 방향을 모두 포함할 수 있다. 장치는 다르게 배향(예: 90도 회전 또는 다른 방향으로 회전)될 수있다. 그러므로 본 명세서에서 사용되는 공간적 상대 디스크립터는 이에 따라 해석되어야 한다. 추가적으로, 하나의 층이 두 층 "사이"로 언급 될 때, 그것은 두 층 사이의 층일 수 있거나, 또는 하나 이상의 개재 층들이 존재할 수 있음을 이해할 것이다.
본 명세서에서 사용한 용어는 단지 특정한 실시 예를 설명하기 위해 사용 된것으로, 본 명세서에 개시된 요지를 제한하는 것은 의도되지 않는다. 본 발명에에 사용된 바와 같이,'용어들 "실질적으로', '약', 이와 유사한 용어는 정도의 용어들이 아니라 근사 값의 용어로 사용된다. 그리고, 상기 용어는 당업자가 인식 할 수있는 측정 또는 계산된 값의 고유 편차들을 설명하기 위한 것이다.
문맥 상 명백하게 다르게 뜻하지 않는 한, 단수의 표현은 복수의 표현을 포함한다. 본 명세서에서 사용될 때 "포함한다" 및/또는 "포함하는"이라는 용어는 언급된 특징, 정수, 단계, 연산, 요소 및/또는 구성요소의 존재를 특정하나 하나 이상의 다른 특징, 정수, 단계, 연산, 요소, 구성요소 및/또는 이들의 그룹의 존재 또는 추가를 배제하지는 않는다. 본 발명에 사용된 용어 "및/또는"은 하나 이상의 관련된 열거된 항목들의 임의의 그리고 모든 조합들을 포함한다. 요소들의 목록 앞에있을 때, "적어도 하나"와 같은 표현은 전체 요소들의 목록을 수정하고 상기 목록의 개별 요소들을 수정하지 않는다. 또한, 본 명세서에 개시된 요지의 실시 예들을 설명 할 때 "할 수있는"의 사용은 "본 발명의 하나 이상의 실시 예들"을 지칭한다. 또한, "예시적인"이라는 용어는 예시 또는 도시를 지칭하는 것으로 의도된다. 본 명세서에 사용 된 바와 같이, 용어 "사용", "사용하는" 및 "사용 된"은 각각 "유용하다", "유효한" 및 "유효되는"라는 용어와 동의어로 간주될 수 있다.
요소 또는 층이 다른 요소 또는 층에 "위", "에 연결된", "결합된"또는 "에 인접한" 것으로 언급될 때, 다른 요소 또는 층에 직접 연결되거나, 연결되거나, 결합되거나 또는 인접할 수 있거나, 하나 이상의 개재 요소 또는 층이 존재하는 것으로 이해할 수 있다. 대조적으로, 요소 또는 층이 다른 요소 또는 층에 "상에 직접", "에 직접 연결되어", "에 직접 결합되어"있거나 "바로 인접한" 것으로 언급 될 때, 개재 요소 또는 층이 존재하지 않는다.
본 발명에 인용된 임의의 수치 범위는 인용된 범위 내에 포함된 동일한 수치 정밀도의 모든 서브-범위들을 포함하는 것으로 의도된다. 예를 들어, "1.0 내지 10.0"의 범위는 언급된 최소값 1.0과 언급된 최대값 10.0 사이의 (즉, 최소값이 1.0 이상이고 최대값이 10.0 이하, 예를 들어 2.4 내지 7.6을 가지는) 모든 서브-범위들을 포함하도록 의도된다. 여기서 인용된 임의의 최대 수치 제한은 그 안에 포함된 모든 하위 수치 제한을 포함하도록 의도된다. 그리고, 본 명세서에 인용된 임의의 최소 수치 제한은 그에 포함된 모든 더 높은 수치 제한을 포함하도록 의도된다.
뉴럴 프로세서의 예시적인 실시 예들이 본 명세서에서 구체적으로 설명되고 예시되었지만, 많은 수정 및 변형이 당업자들에게 명백할 것이다. 따라서, 본 발명의 원리에 따라 구성된 뉴럴 프로세서는 본 명세서에서 구체적으로 설명된 것과 다르게 구현될 수 있음을 이해해야 한다. 또한, 본 발명은 다음의 청구 범위 및 그 등가물 내에서 정의된다.
Claims (20)
- 프로세서에 있어서,
제1 그룹의 웨이트 값들 및 제2 그룹의 웨이트 값들을 보유하는 레지스터, 각 그룹의 웨이트 값들은 적어도 하나의 웨이트 값을 포함하고, 그리고 상기 제1 그룹의 웨이트 값들 내 각 웨이트 값은 상기 제2 그룹의 웨이트 값들 내 웨이트 값에 대응하고;
상기 제1 그룹의 웨이트 값들 내 웨이트 값 또는 상기 제1 그룹의 웨이트 값들 내 상기 웨이트 값에 대응하는 상기 제2 그룹의 웨이트 값들 내 논-제로(non-zero) 웨이트 값으로부터 논-제로 웨이트 값을 선택하는 논-제로 웨이트 값 선택기; 및
상기 선택된 논-제로 웨이트 값 및 상기 선택된 논-제로 웨이트 값에 대응하는 활성화 값을 곱하여 출력 곱 값을 생성하는 승산기를 포함하는 프로세서.
- 제1항에 있어서,
상기 제1 그룹의 웨이트 값들 내 상기 웨이트 값 그리고 상기 제1 그룹의 웨이트 값들 내 상기 웨이트 값에 대응하는 상기 제2 그룹의 웨이트 값들 내 상기 웨이트 값은 모두 제로-값의 웨이트(zero-value weight) 값들을 포함하고, 및
상기 논-제로 웨이트 값 선택기는 상기 승산기를 제어하여 상기 승산기가 상기 출력 곱 값을 형성하는 것을 방지하는 프로세서.
- 제1항에 있어서,
상기 제1 그룹의 웨이트 값들 내 제1 웨이트 값 그리고 상기 제1 그룹의 웨이트 값들 내 상기 제1 웨이트 값에 대응하는 상기 제2 그룹의 웨이트 값들 내 상기 웨이트 값은 모두 제로-값의 웨이트 값들을 포함하고,
상기 논-제로 웨이트 값 선택기는 상기 제1 그룹의 웨이트 값들 내 제2 웨이트 값 및 상기 제1 그룹의 웨이트 값들 내 상기 제2 웨이트 값에 대응하는 상기 제2 그룹의 웨이트 값들 내 제2 웨이트 값으로부터 논-제로 웨이트 값을 선택하고, 및
상기 제1 그룹의 웨이트 값들 내 상기 제2 웨이트 값은 상기 제1 그룹의 웨이트 값들 내 상기 제1 웨이트 값과 다른 프로세서.
- 제1항에 있어서,
상기 제1 그룹의 웨이트 값들은 9 개의 웨이트 값들을 포함하고, 상기 제2 그룹의 웨이트 값들은 9 개의 웨이트 값들을 포함하는 프로세서.
- 제1항에 있어서,
상기 레지스터 및 상기 승산기 사이에 결합된 멀티플렉서(multiplexer)를 더 포함하고,
상기 논-제로 웨이트 값 선택기는 상기 선택된 논-제로 웨이트 값을 상기 승산기에 결합하도록 상기 멀티플렉서를 제어하는 프로세서.
- 제1항에 있어서,
상기 프로세서는 뉴럴 프로세서의 일부인 프로세서.
- 제1항에 있어서,
상기 선택된 논-제로 웨이트 값은 uint8 값을 포함하는 프로세서.
- 프로세서에 있어서,
복수의 N 개의 웨이트 값들을 수신하는 레지스터, 상기 N은 1보다 큰 양의 짝수이고, 상기 복수의 N 개의 웨이트 값들은 제1 그룹 및 제2 그룹으로 논리적으로 배열되고, 상기 제1 그룹 및 상기 제2 그룹은 동일한 사이즈를 가지며, 상기 제1 그룹 내 각 웨이트 값은 상기 제2 그룹 내 웨이트 값에 대응하고;
상기 레지스터에 결합하는 멀티플렉서, 상기 멀티플렉서는 상기 제1 그룹 내 웨이트 값 또는 상기 제1 그룹 내 상기 웨이트 값에 대응하는 상기 제2 그룹 내 웨이트 값으로부터 논-제로 웨이트 값을 선택하고 출력하고; 그리고
상기 멀티플렉서로부터 출력된 상기 논-제로 웨이트 값과 상기 멀티플렉서로부터 출력된 상기 논-제로 웨이트 값에 대응하는 활성화 값을 곱하여 출력 곱 값을 생성하는 승산기를 포함하는 프로세서.
- 제8항에 있어서,
상기 멀티플렉서를 제어하여 상기 제1 그룹 내 상기 웨이트 값이 제로 값과 동일한 지 그리고 상기 제1 그룹 내 상기 웨이트 값에 대응하는 상기 제2 그룹 내 상기 웨이트 값이 제로 값과 동일한 지에 기초하여 상기 논-제로 웨이트 값을 출력하는 웨이트 값 선택기를 더 포함하는 프로세서.
- 제9항에 있어서,
상기 제1 그룹 내 상기 웨이트 값 그리고 상기 제1 그룹 내 상기 웨이트 값에 대응하는 상기 제2 그룹 내 상기 웨이트 값은 모두 제로-값의 웨이트 값들을 포함하고, 및
상기 웨이트 값 선택기는 상기 승산기를 더 제어하여 상기 승산기가 상기 출력 곱 값을 형성하는 것을 방지하는 프로세서.
- 제9항에 있어서,
상기 제1 그룹 내 제1 웨이트 값 그리고 상기 제1 그룹 내 상기 제1 웨이트 값에 대응하는 상기 제2 그룹 내 상기 웨이트 값은 모두 제로-값의 웨이트 값들을 포함하고,
상기 웨이트 값 선택기는 상기 제1 그룹 내 제2 웨이트 값 및 상기 제1 그룹 내 상기 제2 웨이트 값에 대응하는 상기 제2 그룹 내 제2 웨이트 값으로부터 논-제로 웨이트 값을 선택하고, 및
상기 제1 그룹 내 상기 제2 웨이트 값은 상기 제1 그룹 내 상기 제1 웨이트 값과 다른 프로세서.
- 제8항에 있어서,
상기 제1 그룹은 9 개의 웨이트 값들을 포함하고, 상기 제2 그룹은 9 개의 웨이트 값들을 포함하는 프로세서.
- 제8항에 있어서,
상기 프로세서는 뉴럴 프로세서의 일부인 프로세서.
- 제8항에 있어서,
상기 멀티플렉서로부터 출력된 상기 논-제로 웨이트 값은 uint8 값을 포함하는 프로세서.
- 프로세서에 있어서,
복수의 N 개의 웨이트 값들을 수신하는 제1 레지스터, 상기 N은 1보다 큰 양의 짝수이고, 상기 복수의 N 개의 웨이트 값들은 제1 그룹 및 제2 그룹으로 논리적으로 배열되고, 상기 제1 그룹 및 상기 제2 그룹은 동일한 사이즈를 가지며, 상기 제1 그룹 내 각 웨이트 값은 상기 제2 그룹 내 웨이트 값에 대응하고;
상기 제1 레지스터에 결합하는 멀티플렉서, 상기 멀티플렉서는 상기 제1 그룹 내 웨이트 값 또는 상기 제1 그룹 내 상기 웨이트 값에 대응하는 상기 제2 그룹 내 웨이트 값으로부터 논-제로 웨이트 값을 선택하고 출력하고;
복수의 활성화 값들을 수신하는 제2 레지스터; 및
상기 멀티플렉서 및 상기 제2 레지스터에 결합되는 승산기, 상기 승산기는 상기 멀티플렉서로부터 출력된 상기 논-제로 웨이트 값과 상기 멀티플렉서로부터 출력된 상기 논-제로 웨이트 값에 대응하고, 제2 레지스터로부터 수신된 활성화 값을 곱하여 출력 곱 값을 생성하는 프로세서.
- 제15항에 있어서,
상기 멀티플렉서를 제어하여 상기 제1 그룹 내 상기 웨이트 값이 제로 값과 동일한 지 그리고 상기 제1 그룹 내 상기 웨이트 값에 대응하는 상기 제2 그룹 내 상기 웨이트 값이 제로 값과 동일한 지에 기초하여 상기 논-제로 웨이트 값을 출력하는 웨이트 값 선택기를 더 포함하는 프로세서.
- 제16항에 있어서,
상기 제1 그룹 내 상기 웨이트 값 그리고 상기 제1 그룹 내 상기 웨이트 값에 대응하는 상기 제2 그룹 내 상기 웨이트 값은 모두 제로-값의 웨이트 값들을 포함하고, 및
상기 웨이트 값 선택기는 상기 승산기를 더 제어하여 상기 승산기가 상기 출력 곱 값을 형성하는 것을 방지하는 프로세서.
- 제16항에 있어서,
상기 제1 그룹 내 제1 웨이트 값 그리고 상기 제1 그룹 내 상기 제1 웨이트 값에 대응하는 상기 제2 그룹 내 상기 웨이트 값은 모두 제로-값의 웨이트 값들을 포함하고,
상기 웨이트 값 선택기는 상기 제1 그룹 내 제2 웨이트 값 및 상기 제1 그룹 내 상기 제2 웨이트 값에 대응하는 상기 제2 그룹 내 제2 웨이트 값으로부터 논-제로 웨이트 값을 선택하고, 및
상기 제1 그룹 내 상기 제2 웨이트 값은 상기 제1 그룹 내 상기 제1 웨이트 값과 다른 프로세서.
- 제15항에 있어서,
상기 제1 그룹은 9 개의 웨이트 값들을 포함하고, 상기 제2 그룹은 9 개의 웨이트 값들을 포함하는 프로세서.
- 제15항에 있어서,
상기 프로세서는 뉴럴 프로세서의 일부인 프로세서.
Applications Claiming Priority (12)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201962835496P | 2019-04-17 | 2019-04-17 | |
US62/835,496 | 2019-04-17 | ||
US201962841606P | 2019-05-01 | 2019-05-01 | |
US201962841590P | 2019-05-01 | 2019-05-01 | |
US201962841819P | 2019-05-01 | 2019-05-01 | |
US62/841,590 | 2019-05-01 | ||
US62/841,819 | 2019-05-01 | ||
US62/841,606 | 2019-05-01 | ||
US16/446,610 | 2019-06-19 | ||
US16/446,610 US12099912B2 (en) | 2018-06-22 | 2019-06-19 | Neural processor |
US16/842,700 | 2020-04-07 | ||
US16/842,700 US11620491B2 (en) | 2018-06-22 | 2020-04-07 | Neural processor |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20200122256A true KR20200122256A (ko) | 2020-10-27 |
Family
ID=72913628
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020200046422A KR20200122256A (ko) | 2019-04-17 | 2020-04-17 | 뉴럴 프로세서 |
Country Status (2)
Country | Link |
---|---|
KR (1) | KR20200122256A (ko) |
CN (1) | CN111832716A (ko) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20230032748A (ko) * | 2021-08-31 | 2023-03-07 | 한국과학기술원 | 심층 강화학습을 위한 심층 신경망 학습 가속 장치 및 그 방법 |
-
2020
- 2020-04-17 KR KR1020200046422A patent/KR20200122256A/ko active Search and Examination
- 2020-04-17 CN CN202010306599.7A patent/CN111832716A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20230032748A (ko) * | 2021-08-31 | 2023-03-07 | 한국과학기술원 | 심층 강화학습을 위한 심층 신경망 학습 가속 장치 및 그 방법 |
Also Published As
Publication number | Publication date |
---|---|
CN111832716A (zh) | 2020-10-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20200234099A1 (en) | Neural processor | |
JP7349438B2 (ja) | ニューラル・ネットワーク・アクセラレータ | |
CN110516801B (zh) | 一种高吞吐率的动态可重构卷积神经网络加速器 | |
Albericio et al. | Cnvlutin: Ineffectual-neuron-free deep neural network computing | |
CN106940815B (zh) | 一种可编程卷积神经网络协处理器ip核 | |
TWI848207B (zh) | 記憶體內運算架構及將應用程式映射至記憶體內運算架構的電腦實施方法 | |
CN1272705C (zh) | 包括纯量算术逻辑单元的单指令多数据处理机 | |
KR20180123846A (ko) | 합성곱 신경망을 위한 논리적 3차원 구조의 재구성형 연산 가속기 | |
Yu et al. | A data-center FPGA acceleration platform for convolutional neural networks | |
Wang et al. | A low-latency sparse-winograd accelerator for convolutional neural networks | |
CN110414672B (zh) | 卷积运算方法、装置及系统 | |
Yang et al. | ISOSceles: Accelerating sparse CNNs through inter-layer pipelining | |
KR20200122256A (ko) | 뉴럴 프로세서 | |
Filippas et al. | Streaming dilated convolution engine | |
Fong et al. | A cost-effective CNN accelerator design with configurable PU on FPGA | |
CN112766479B (zh) | 一种基于fpga的支持通道分离卷积的神经网络加速器 | |
Zong et al. | Pit: Processing-in-transmission with fine-grained data manipulation networks | |
Li | Towards efficient hardware acceleration of deep neural networks on fpga | |
Zou et al. | CAP: communication-aware automated parallelization for deep learning inference on CMP architectures | |
Gondimalla et al. | Barrier-free large-scale sparse tensor accelerator (BARISTA) for convolutional neural networks | |
Wang et al. | Design exploration of multi-fpgas for accelerating deep learning | |
Zhang et al. | Thread: Towards fine-grained precision reconfiguration in variable-precision neural network accelerator | |
US20230023859A1 (en) | Methods and Apparatus for Accessing External Memory in a Neural Network Processing System | |
Gondimalla | ACCELERATING SPARSE MACHINE LEARNING INFERENCE | |
Lin et al. | ORSAS: An Output Row-Stationary Accelerator for Sparse Neural Networks |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination |