KR20210128903A - 심층 신경망용 컴퓨팅 수행을 위한 계산 유닛 및 방법 - Google Patents
심층 신경망용 컴퓨팅 수행을 위한 계산 유닛 및 방법 Download PDFInfo
- Publication number
- KR20210128903A KR20210128903A KR1020210021808A KR20210021808A KR20210128903A KR 20210128903 A KR20210128903 A KR 20210128903A KR 1020210021808 A KR1020210021808 A KR 1020210021808A KR 20210021808 A KR20210021808 A KR 20210021808A KR 20210128903 A KR20210128903 A KR 20210128903A
- Authority
- KR
- South Korea
- Prior art keywords
- input
- tensor
- values
- accumulator
- output
- Prior art date
Links
- 238000013528 artificial neural network Methods 0.000 title claims abstract description 17
- 238000000034 method Methods 0.000 title claims description 35
- 238000004364 calculation method Methods 0.000 claims description 68
- 241001442055 Vipera berus Species 0.000 description 29
- 238000013527 convolutional neural network Methods 0.000 description 25
- 238000010586 diagram Methods 0.000 description 11
- 238000013135 deep learning Methods 0.000 description 5
- 239000000758 substrate Substances 0.000 description 4
- 238000013473 artificial intelligence Methods 0.000 description 3
- 230000002547 anomalous effect Effects 0.000 description 1
- 230000001186 cumulative effect Effects 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000036316 preload Effects 0.000 description 1
- 230000003252 repetitive effect Effects 0.000 description 1
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
- 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
- G06N3/065—Analogue 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/491—Computations with decimal numbers radix 12 or 20.
- G06F7/498—Computations with decimal numbers radix 12 or 20. using counter-type accumulators
- G06F7/4981—Adding; Subtracting
-
- 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/50—Adding; Subtracting
- G06F7/501—Half or full adders, i.e. basic adder cells for one denomination
-
- 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
- G06F7/53—Multiplying only in parallel-parallel fashion, i.e. both operands being entered in parallel
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30032—Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30101—Special purpose registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/545—Interprogram communication where tasks reside in different layers, e.g. user- and kernel-space
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N20/00—Machine learning
- G06N20/10—Machine learning using kernel methods, e.g. support vector machines [SVM]
-
- 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
-
- 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)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Biophysics (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Artificial Intelligence (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- Computational Linguistics (AREA)
- Molecular Biology (AREA)
- General Health & Medical Sciences (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Optimization (AREA)
- Neurology (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Medical Informatics (AREA)
- Complex Calculations (AREA)
Abstract
신경망 계층의 계산을 수행하는 계산 유닛이 개시된다. 다수의 PE(processing element) 유닛이 어레이에 배열된다. 제1 입력 값이 제1 프로세싱 사이클 동안 상기 어레이의 입력 차원에서 병렬로 제공되고, 제2 입력 값이 제2 프로세싱 사이클 동안 입력 차원에서 병렬로 제공된다. PE 유닛에 의해 저장된 가중치에 기초하여 계산이 수행된다. 가산기는 제1 PE 유닛 세트에 결합되어 제1 프로세싱 사이클 동안 제1 PE 유닛 세트에 의해 계산된 결과인 제1 합을 생성하고, 제2 프로세싱 사이클 동안 계산의 결과인 제2 합을 생성한다. 제1 가산기는 상기 제1 가산기에 결합되며, 상기 제1 합을 저장하고, 제2 합이 저장되기 전에 상기 제1 합을 제2 누산기로 이동시킨다.
Description
본 개시에 따른 실시예들의 하나 이상의 양상들은 심층 신경망에 관한 것으로, 특히 하드웨어 효율적인 방식으로 심층 신경망의 계산을 가속화하는 것에 관한 것이다.
인공 지능(AI) 기계는 심층 신경망을 사용하여 다양한 유형의 자율 작업을 수행 할 수 있다. 예를 들어, 자율 주행 차량은 심층 신경망을 사용하여 환경에서 물체를 인식하여 사람의 입력이 거의 또는 전혀없이 안전하게 환경을 돌아 다닐 수 있다.
심층 신경망의 예는 컨볼루션 신경망(convolutional neural network, CNN)이다. CNN의 컨볼루션 계층은 입력 특징 맵과 함께 컨볼루션 연산을 수행하는 데 사용되는 컨볼루션 커널(필터라고도 함)을 포함할 수 있다. 컨볼루션 연산은 필터의 필터가 이동하는 현재 컨볼루션 창에서 커널 가중치와 입력 특징 맵의 값 사이의 내적 연산을 수행하는 것을 포함한다. 내적 연산의 결과는 출력 특징 맵의 픽셀에 저장된다. 필터는 다른 내적 연산이 수행되는 새로운 컨볼루션을 형성하기 위해 특정 스트라이드 값(예 : 스트라이드 값 = 1)만큼 입력 특성 맵 위로 미끄러진다. 이 프로세스는 전체 입력 특징 맵이, 내적 연산이 수행되는 동안, 필터에 의해 순회되고 및 출력 특징 맵의 픽셀이 내적 연산의 결과로 채워질 때까지 계속된다.
당업자가 인식해야하는 바와 같이, 컨볼루션 연산을 수행하는 것은 계산 집약적일 수 있고, 반복되는 곱셈 연산 및 메인 메모리에 대한 액세스로 인해 에너지를 소비하고 대역폭을 차지할 수 있다. 따라서, 하드웨어 효율적인 방식으로 하나 이상의 컨볼루션 계층의 계산을 가속화하기 위한 시스템 및 방법이 요구된다.
본 개시가 해결하고자 하는 과제는 하나 이상의 컨볼루션 계층의 계산을 가속화하는 시스템 및 방법을 제공하는 것이다.
본 개시의 일 실시예에 따르면, 입력 텐서, 커널 텐서 및 출력 텐서와 관련된 신경망 계층의 계산을 수행하기 위한 계산 유닛으로서, 상기 계산 유닛은: 어레이에 배열된 프로세싱 요소(PE) 유닛의 수 (R x B), R은 상기 어레이의 입력 차원에 있는 입력의 수이고, B는 상기 어레이의 출력 차원에 있는 출력의 수이고, 제1 입력 값 세트는 제1 프로세싱 사이클 동안 상기 어레이의 상기 입력 차원에서 병렬로 제공되고, 제2 입력 값 세트는 제2 프로세싱 사이클 동안 상기 어레이의 상기 입력 차원에서 병렬로 제공되고, 상기 출력 차원에 배치된 제1 및 제2 PE 유닛 세트는 각각 상기 커널 텐서의 특정 차원과 연관된 제1 및 제2 가중치 값 세트를 저장하고, 상기 제1 PE 유닛 세트는 상기 제1 프로세싱 사이클 동안 상기 제1 입력 값 세트 및 상기 제1 가중치 값에 기초하여 병렬 계산을 수행하도록 구성되며, 및 상기 제2 프로세싱 사이클 동안 상기 제2 입력 값 세트와 상기 제1 가중치 값 세트에 기초하여 병렬 계산을 수행하도록 더 구성되고, 상기 제2 PE 유닛 세트는 상기 제2 프로세싱 사이클 동안 상기 제2 입력 값 세트와 상기 제2 가중치 값 세트에 기초하여 병렬 계산을 수행하도록 구성되며, 상기 제1 PE 유닛 세트에 결합되는 제1 가산기 유닛, 상기 제1 가산기 유닛은 상기 제1 프로세싱 사이클 동안 상기 제1 PE 유닛 세트에 의한 상기 계산의 결과인 제1 합을 생성하도록 구성되고, 상기 제1 프로세싱 사이클 동안 상기 제1 PE 유닛 세트에 의해 상기 계산의 결과인 제2 합을 생성하도록 더 구성되며; 상기 제2 PE 유닛 세트에 결합되는 제2 가산기 유닛, 상기 제2 가산기 유닛은 상기 제2 프로세싱 사이클 동안 상기 제2 PE 유닛 세트에 의한 상기 계산의 결과인 제3 합을 생성하도록 구성되고; 상기 제1 가산기 유닛에 결합되는 제1 누산기; 상기 제1 누산기 및 상기 제2 가산기에 결합되는 제2 누산기; 상기 제1 누산기는 상기 제1 가산기에 의해 생성되는 상기 제1 합을 저장하도록 구성되고, 상기 제2 합을 저장하기 전에 상기 제1 합을 상기 제2 누산기로 이동시키도록 더 구성되며, 상기 제2 누산기는 상기 제3 합과 함께 상기 제1 합을 누산하기 위해 상기 제1 합을 수신하도록 구성되고, 상기 제2 누산기는 상기 출력 텐서의 픽셀 값으로 저장하기 위해 상기 누산된 제1 및 제3 합을 메모리로 이동시키도록 더 구성된다.
일 실시예에 따르면, 상기 제1 누산기는 상기 출력 텐서의 제1 픽셀에 대한 부분 값을 저장하도록 구성되고, 및 상기 제2 누산기는 상기 출력 텐서의 제2 픽셀에 대한 부분 값을 저장하도록 구성된다.
일 실시예에 따르면, 상기 병렬 계산은 병렬 곱셈 계산을 포함한다.
일 실시예에 따르면, 상기 제1 입력 값 세트는 상기 입력 텐서의 제1 입력 채널에 연관된 제1 싱글 입력 값과, 상기 입력 텐서의 제2 입력 채널에 연관된 제2 싱글 입력 값을 포함하고, 상기 제2 입력 값 세트는 상기 제1 입력 채널과 연관된 제3 싱글 입력 값과, 상기 제2 입력 채널과 연관된 제4 싱글 입력 값을 포함한다.
일 실시예에 따르면, 제1 입력 값 세트는 상기 입력 텐서의 제1 입력 채널에 대한 컨볼루션 윈도우 내의 제1 입력 값 열과 상기 입력 텐서의 제2 입력 채널에 대한 컨볼루션 윈도우 내의 제2 입력 값 열을 포함하고, 상기 제2 입력 값 세트는 상기 제1 입력 채널에 대한 상기 컨볼루션 윈도우에 연관된 제3 입력 값 열과 상기 제2 입력 채널에 대한 상기 컨볼루션 윈도우와 연관된 제4 입력 값 열을 포함한다.
일 실시예에 따르면, 상기 제1 또는 제2 입력 채널에 대한 상기 컨볼루션 윈도우는 상기 커널 텐서의 커널 높이에 대응하는 높이와 상기 커널 텐서의 커널 폭에 대응하는 폭을 갖는다.
일 실시예에 따르면, 상기 커널 텐서의 상기 특정 차원은 커널 폭을 포함하고, 상기 제1 가중치 값 세트는 상기 커널 텐서의 제1 열에 저장된 가중치 값에 대응하고, 상기 제2 가중치 값 세트는 상기 커널 텐서의 제2 열에 저장된 가중치 값에 대응한다.
일 실시예에 따르면, 상기 복수의 PE 유닛은 가중치-고정 PE 유닛이고, 상기 제1 가중치 값 세트는 상기 제2 PE 유닛 세트의 레지스터들에 저장되고, 상기 제2 가중치 값 세트는 상기 제2 PE 유닛 세트의 레지스터들에 저장된다.
일 실시예에 따르면, 상기 제1 및 제3 합은 상기 출력 텐서의 제1 출력 픽셀에 연관된 값이고, 상기 제2 합은 상기 출력 텐서의 제2 출력 픽셀에 연관된 값이다.
본 개시의 실시예들에 따른 입력 텐서, 커널 텐서, 및 출력 텐서에 연관된 신경망 계층의 계산을 수행하는 방법에 있어서, 상기 계산은 어레이에 배열된 프로세싱 요소(PE) 유닛의 (R x B)를 통해 수행되며, R은 상기 어레이의 입력 차원에 있는 입력의 수이고, B는 상기 어레이의 출력 차원에 있는 출력의 수이고, 상기 방법은 상기 출력 차원에 배치된 제1 및 제2 PE 유닛 세트에 의해, 상기 커널 텐서의 특정 차원에 연관된 제1 및 제2 가중치 값 세트를 각각 저장하는 것; 제1 프로세싱 사이클 동안 상기 어레이의 상기 입력 차원에 병렬인 제1 입력 값 세트를 수신하고, 상기 제1 PE 유닛 세트에 의해, 상기 제1 프로세싱 사이클 동안 상기 제1 입력 값 세트와 상기 제1 가중치 값 세트에 기초하여 병렬 계산을 수행하는 것; 제2 프로세싱 사이클 동안 상기 어레이의 상기 입력 차원에 병렬인 제2 입력 값 세트를 수신하고, 상기 제1 PE 유닛 세트에 의해, 상기 제2 프로세싱 사이클 동안 제1 입력 값 세트와 제1 가중치 값 세트에 기초하여 병렬 계산을 수행하는 것; 상기 제1 PE 유닛 세트에 결합된 제1 가산기를 통해, 상기 제1 프로세싱 사이클 동안 상기 제1 PE 유닛에 의한 계산의 결과인 제1 합을 생성하는 것; 상기 제1 가산기에 결합된 제1 누산기에 의해, 상기 제1 가산기에 의해 생성된 상기 제1 합을 저장하는 것; 제1 가산기를 통해, 상기 제2 프로세싱 사이클 동안 제1 PE 유닛 세트에 의한 계산의 결과인 제2 합을 생성하는 것; 상기 제2 PE 유닛 세트에 결합된 제2 가산기를 통해, 상기 제2 프로세싱 사이클 동안 상기 계산의 결과인 제3 합을 생성하는 것, 상기 제3 합은 상기 제2 가산기 유닛과 상기 누산기에 결합된 제2 누산기에 저장되고; 상기 제1 누산기에 의해, 상기 제1 누산기가 상기 제2 합을 저장하기 전에 상기 제1 합을 상기 제2 누산기로 이동시키고; 상기 제2 누산기에 의해 상기 제1 누산기로부터 상기 제1 합을 상기 제3 합과 누산하기 위한 상기 제1 합을 수신하는 것; 및 상기 출력 텐서의 픽셀 값으로서 저장하기 위해 상기 누산된 제1 및 제3 합을 메모리로 이동시키는 것을 포함한다. 분류 작업은 상기 출력 텐서에 기초하여 수행된다.
당해 기술분야의 통상의 기술자가 이해할 수 있는 바와 같이, 본 개시의 실시예는 입력, 가중치 및 출력 텐서의 하나 이상의 차원에서 CNN 계층의 계산의 언롤링/병렬화에 의해 신경망에 의해 수행되는 계산의 효율성과 전개/속도가 개선되는데 도움을 준다. 또한, 본 개시의 실시예는 다른 출력 픽셀 값을 계산하기 위해, 제1 및 제2 PE 유닛 세트로 입력 데이터를 제공하는 것에 의해 입력 데이터의 재사용성을 증가시킨다. 입력 데이터의 재사용은 메인 메모리의 안팎에서 데이터의 이동을 최적화하는데 도움이 된다.
이들 특징 및 다른 특징들은, 이하의 상세한 설명, 첨부된 청구범위, 및 첨부된 도면들과 함께 고려될 때, 본 개시의 실시예들의 양상과 이점이 더 완전히 이해될 것이다. 물론, 본 발명의 실제 범위는 첨부된 청구범위에 의해 정의된다.
본 실시예의 비제한적이고 비포괄적인 실시예는 다음의 도면을 참조하여 설명되며, 여기서 동일한 참조 번호는 달리 명시되지 않는 한 다양한 도면에 걸쳐 동일한 부분을 지칭한다.
도 1은 본 개시의 일 실시예에 따른 컨볼루션 계층의 개념적 레이아웃 다이어그램이다.
도 2는 본 개시의 일 실시예에 따른 컨볼루션 계층을 계산하기 위한 계산 유닛의 블록도이다.
도 3은 본 개시의 일 실시예에 따른 프로세싱 유닛의 상세한 블록도이다.
도 4a 내지 4j는 본 개시의 일 실시예에 따른 입력 채널(C) 차원, 커널 폭(Fx) 차원 및 출력 채널(K) 차원에서 CNN 계층의 계산을 펼치도록 구성된 타일(100)의 블록도이다.
도 5는 도 4a 내지 4j의 실시예에 따른 CNN 계층을 계산하기 위한 프로세스의 흐름도이다.
도 6은 본 개시의 일 실시예에 따른, 입력 채널(C) 차원, 커널 높이(Fy) 차원, 커널 폭(Fx) 차원 및 출력 채널(K) 차원에서 CNN 계층의 계산을 언롤(unroll)하도록 구성된 타일의 블록도이다.
도 1은 본 개시의 일 실시예에 따른 컨볼루션 계층의 개념적 레이아웃 다이어그램이다.
도 2는 본 개시의 일 실시예에 따른 컨볼루션 계층을 계산하기 위한 계산 유닛의 블록도이다.
도 3은 본 개시의 일 실시예에 따른 프로세싱 유닛의 상세한 블록도이다.
도 4a 내지 4j는 본 개시의 일 실시예에 따른 입력 채널(C) 차원, 커널 폭(Fx) 차원 및 출력 채널(K) 차원에서 CNN 계층의 계산을 펼치도록 구성된 타일(100)의 블록도이다.
도 5는 도 4a 내지 4j의 실시예에 따른 CNN 계층을 계산하기 위한 프로세스의 흐름도이다.
도 6은 본 개시의 일 실시예에 따른, 입력 채널(C) 차원, 커널 높이(Fy) 차원, 커널 폭(Fx) 차원 및 출력 채널(K) 차원에서 CNN 계층의 계산을 언롤(unroll)하도록 구성된 타일의 블록도이다.
이하, 첨부 된 도면을 참조하여 예시적인 실시 예를보다 상세하게 설명하며, 여기서 동일한 참조 번호는 전체에 걸쳐 동일한 요소를 지칭한다. 그러나 본 발명은 여러 가지 상이한 형태로 구현될 수 있으며 여기에서 예시된 실시예에 한정되는 것으로 해석되어서는 안된다. 오히려, 이들 실시예는 본 개시가 철저하고 완전하고 본 개시의 양태 및 특징을 당업자에게 완전히 전달할 수 있도는 예로서 제공된다. 따라서, 본 개시 내용의 양태 및 특징의 완전한 이해를 위해 당업자에게 필요하지 않은 프로세스, 요소 및 기술은 설명되지 않을 수있다. 별도의 언급이없는 한, 동일한 도면 부호는 첨부된 도면 및 설명을 통해 동일한 구성 요소를 나타내므로 그 설명은 반복되지 않을 수 있다. 또한, 도면에서, 요소, 층 및 영역의 상대적 크기는 명확성을 위해 과장 및/또는 단순화 될 수 있다.
일반적으로, 본 발명의 실시예는 예를 들어 CNN 알고리즘과 같은 딥 러닝 알고리즘의 계산을 가속화하기 위한 시스템 및 방법에 관한 것이다. 일 실시예에서, 딥 러닝 알고리즘의 계산을 가속화하는 시스템은 계산 유닛에 의해 이용되는 기판의 공간 영역 사용을 최적화하면서 계산 대기 시간을 줄이는 것을 목표로하는 하드웨어 아키텍처를 갖는 계산 유닛을 포함한다.
일 실시 예에서, 딥 러닝 알고리즘의 계산은 계산 중 적어도 일부를 병렬로 수행함으로써 가속화될 수있다. 이와 관련하여, 시스템은 하나 이상의 컨볼루션 차원에서 기판 상에 공간적으로 계산을 "언롤(unroll)"하도록 (병렬화라고도 함) 구성된 프로세싱 요소(PE) 유닛의 2 차원(2D) 어레이를 포함한다. 용어 "언롤링(unrolling)"은 일반적으로 기판 상의 PE 유닛을 사용하는 병렬 계산을 지칭하기 위해 본원에서 사용될 수 있다. 병렬성이 달성될 수 있는 컨볼루션의 차원은 입력 특징 맵, 컨볼루션 커널 및/또는 출력 특징 맵의 하나 이상의 차원을 포함할 수 있다.
일 실시예에서, PE 유닛의 2D 어레이는 CNN의 컨볼루션 계층과 같은 신경망의 계층을 병렬로 계산하기 위한 내적 계산을 수행하기 위해 호출된다. 일 실시예에서, PE 유닛은 입력 특징 맵, 컨볼루션 커널 및/또는 출력 특징 맵의 하나 이상의 선택된 차원에서 언롤되고, 언롤된 차원(들)에서 병렬 내적 계산을 수행하도록 구성된다. 이에 따라 병렬화는 신경망 계층의 계산을 가속화할 수 있다.
딥 러닝 알고리즘의 계산은 내적 계산 중에 호출된 특정 값의 재사용성을 증가시킴으로써 가속화될 수도 있다. 특정 데이터의 재사용을 늘림으로써, 메인 메모리 안팎으로의 데이터 이동(또는 데이터 흐름이라고도 함)을 줄여 전력 사용량과 계산 시간을 줄일 수 있다.
본 개시의 일 실시예는 내적 계산을 수행하는 승수 유닛에 가까운 레지스터 파일(RF)에 컨볼루션 커널의 가중치 값을 미리 로드하는 가중치 고정 데이터 흐름 아키텍처를 사용한다. 이와 관련하여, 가중치 데이터는 레지스터 파일(또는 버퍼라고도 함)에 고정되어있을 수 있는 반면, 입력 및 출력 데이터는 메인 메모리 안팎으로 흐를 수 있다. 가중치 고정 데이터 흐름 아키텍처가 예로서 사용되지만, 본 개시의 실시예는 예를 들어, 출력 고정 아키텍처와 같은 다른 데이터 흐름 아키텍처에 적용될 수 있다.
가중치 고정 데이터 흐름 아키텍처가 사용되는 실시 예에서, 비정상 데이터의 이동은 이러한 데이터가 메인 메모리로부터 인출되는 횟수를 줄임으로써 최적화될 수 있다. 일 실시예에서, 입력 특징 데이터의 움직임은 더 많은 에너지 효율 계산을 위해 인출된 입력 데이터를 재사용함으로써 최적화된다. 이와 관련하여, 특정 입력 데이터가 인출될 때, 인출된 입력 데이터는 출력 특징 맵의 다른 출력 채널에 대한 계산을 수행하기 위해 및/또는 특정 출력 채널에 대한 출력 특징 맵의 다른 출력 픽셀에 대한 계산을 수행하기 위해 어레이의 다양한 PE 유닛으로 브로드캐스트된다. 이것은 출력 특징 맵의 하나의 출력 채널 또는 픽셀에 대한 계산을 수행하기 위해, 그리고 입력 데이터를 다시 인출하는데 전력과 시간을 소비하기 위해, 다음 출력 채널 또는 픽셀에 대한 계산을 수행하는데 데이터를 재사용하는 것에 대해, 입력 데이터를 메모리로부터 인출하는 시스템과 대조될 수 있다.
가중치 고정 데이터 흐름 아키텍처에서, 가중치 데이터가 다양한 PE 유닛의 레지스터 파일에 미리로드 될 수 있다는 점을 고려하면, 내적 계산이 수행될 때 가중치의 데이터 이동이 제거될 수 있다. 그러나 이해해야 할 것처럼, 각 PE 유닛에 대해 서로 다른 커널 크기를 수용하려면 더 큰 레지스터 파일(RF)이 필요할 수 있다. 가중치 고정 데이터 흐름 아키텍처에서 레지스터 파일은 하드웨어 오버 헤드의 원인이다. 일 실시예에서, PE 당 레지스터 파일(RF/PE)의 크기는 커널 차원 중 하나 또는 두 개에서 언롤링함으로써 감소된다. PE 당 레지스터 파일(RF/PE) 계수를 줄이면 하드웨어 효율성(예 : 계산 단위당 영역 오버 헤드)이 증가한다.
일 실시예에서, 공간 영역 효율은 하나 이상의 커널 차원에서 내적 계산을 언롤링함으로써 최적화될 수 있다. 일 실시예에서, 동일한 입력을 사용하여 출력 특징 맵의 다양한 픽셀의 병렬 계산을 허용하기 위해 커널 폭이 다양한 PE 유닛에 걸쳐 언롤될 수 있다.
일 실시예에서, 딥 러닝 알고리즘의 계산을 가속화하기 위한 시스템은 누산기의 시스톨릭 배열을 형성하기 위해 서로 결합된 둘 이상의 누산기/레지스터를 더 포함한다. 일 실시예에서, 누산기는 전체 합이 계산될 때까지 출력 픽셀의 부분 합을 저장하도록 구성된다. 부분 합은 제1 누산기에서 인접한 제2 누산기로 특정 방향으로 이동될 수 있으며, 부분 합의 계산을 출력 특징 맵의 대응하는 픽셀로 조정한다.
도 1은 일 실시예에 따른 컨볼루션 계층(CNN 계층이라고도 함)(100)의 개념적 레이아웃 다이어그램이다. 컨볼루션 계층(100)은 입력 특징 값을 저장하는 입력 특징 맵(Input Feature Map, IFM)(102), 커널 가중치를 저장하는 컨볼루션 커널(104), 입력 특징 맵(102)과 컨볼루션 커널(104) 사이의 컨볼루션 연산으로 인한 출력 특징 값을 저장하는 출력 특징 맵(Output Feature Map, OFM)(106)을 포함한다. 일 실시예에서, 입력 특징 맵(102), 컨볼루션 커널/필터(104) 및 출력 특징 맵(106)은 3D 텐서 (예를 들어, 이미지 매트릭스 또는 텐서)이지만, 본 발명의 실시예는 이에 제한되지 않는다.
일 실시예에서, 입력 특징 맵(102)은 차원(H, W, C)을 갖는 텐서이고, 여기서 H는 입력 높이를 나타내고, W는 입력 폭을 나타내고, C는 입력 채널을 나타낸다. 입력 특징 맵(102)은 또한 입력 텐서라고도 한다.
일 실시예에서, 컨볼루션 커널(104)은 차원(K, C, Fy, Fx)을 갖는 텐서이고, 여기서 K는 출력 채널을 나타내고, C는 입력 채널을 나타내고, Fy는 커널 높이를 나타내고, Fx는 커널 폭을 나타낸다. 도 1의 예에서 컨볼루션 커널(104)의 차원(K, C, Fy, Fx)은 (8, 16, 3, 3)이다. 일 실시예에서, 다수의 필터 세트는 출력 채널의 수에 대응한다. 도 1의 실시예에서, 8개의 필터 세트가 출력 채널 K0-K7에 사용된다. 컨볼루션 커널(104)은 커널 텐서라고도 한다.
일 실시예에서, 출력 특징 맵(106)은 차원(Ho, Wo 및 K)를 갖는 텐서이고, 여기서 Ho는 출력 높이를 나타내고, Wo는 출력 폭을 나타내고, K는 출력 채널을 나타낸다. 출력 특징 맵(106)은 출력 텐서라고도 한다.
컨볼루션 계층(100)의 계산은 입력 특징 맵(102)의 입력 채널(예 : 입력 채널 0-15)에 대해, 컨볼션 윈도우(110)의 입력 값/픽셀과 컨볼루션 커널(104)의 가중치 사이에서 내적 연산(108)을 수행하는 것을 포함한다. 내적 연산의 결과는 특정 출력 채널에 대한 출력 특징 맵(106)의 출력 픽셀(112)에 저장된다. 예를 들어, 도 1의 예에서 입력 값 및 필터 가중치를 사용한다고 가정하면, 출력 픽셀(112)의 값은 다음 공식에 따라 계산된다: (a*B0 + g*B1 + m*B2 + b*G0 + h*G1 + n*G2 + c*R0 + i*R1 + o*R2), 여기서 내적 계산은 다른 입력 채널에 대한 컨볼루션 윈도우(110)의 입력 값에 대해 반복되고, 최종 출력 픽셀 값 a를 렌더링하기 위해 함께 합산된다.
표 1은 입력 텐서(102), 커널 텐서(104) 및 출력 텐서(106)를 기반으로 중첩 된 "for 루프"를 통해 하나의 컨볼루션 계층을 재귀적으로 계산하기 위한 의사코드이다.
본 개시의 실시예에 따른 계산 유닛은, 예를 들어, 입력 특징 맵 데이터와 같은 데이터의 재사용성을 증가시킴으로써 하드웨어 오버 헤드를 최적화하면서 하나 이상의(예를 들어, 최대 6개) "for 루프"의 계산의 언롤링을 허용한다. 특정 "for 루프"에서 수행된 계산의 언롤링이 이해될 수 있듯이, PE 유닛에 의해 병렬로 상기 계산을 수행하는 것은, "for 루프"의 반복적인 실행을 제거하는데 도움이되며, 이는 차례로 컨볼루션 계층을 가속화하는데 도움이 된다.
도 2는 본 개시의 일 실시예에 따른 컨볼루션 계층을 계산하기 위한 계산 유닛(타일이라고도 함)(200)의 블록 다이어그램이다. 타일은 예를 들어, 2차원 어레이와 같이 어레이에 배열된 개수 (R x B)의 PE 유닛(202)을 포함하며, 여기서 R은 입력 차원(204)에서 입력의 수(예를 들어, 행의 수)이고, B는 출력 차원(206)에서 출력의 수(예를 들어, 열의 수)이다. 일 실시예에서, 입력 데이터는 PE 유닛(202)에 의한 병렬 계산을 수행하고 다양한 출력을 생성하기 위해 타일 입력 차원(204)의 행에 제공된다.
특정 타일의 차원 및/또는 타일의 총 수는 타일(들)이 구축되는 기판의 면적 예산에 따라 달라질 수 있다. 더 작은 영역은 타일에 더 적은 수의 PE 유닛(202)을 요구할 수 있고, 더 큰 영역은 더 많은 수의 PE 유닛(202)을 요구할 수 있다. 일부 실시예에서, 컨볼루션 계산은 PE 유닛(202)의 수가 특정 컨볼루션 차원의 크기보다 작은 시나리오에서 단계적으로 수행될 수 있으며, 상기 특정 컨볼루션 차원은 PE 유닛(202)에 의한 병렬 실행을 위해 언롤되는 중일 수 있다. 예를 들어, 입력 특징 맵의 입력 채널이 타일 입력 차원(204)에서 언롤된다고 가정해 본다. 또한 언롤되는 입력 채널의 수가 16개이지만, 타일 입력 차원의 행의 수는 10개라고 가정한다. 이 시나리오에서, 16개의 입력 채널 중 10개는 타일의 10개 행을 활용하여 계산의 첫 번째 단계에서 언롤될 수 있으며, 나머지 6개의 입력 채널은 두 번째 계산 단계에서 언롤될 수 있다. 두 번째 단계에서는, 타일의 10개 행 중 6개가 나머지 6개의 입력 채널을 언롤하는데 사용된다. 상기 예는 개시된 주제가 제한되지 않는 예시적인 예일 뿐이다.
일 실시예에서, 타일(200)은 타일의 출력 차원(206)에서 B개의 출력에 대응하는 B개의 가산기 트리(가산기 유닛이라고도 함)(210a, 210b)를 더 포함한다. 타일의 동일한 열에 있는 PE 유닛(202)의 출력은 열과 관련된 가산기 트리(예를 들어, 가산기 트리(210a))를 사용하여 감소될 수 있다. 이와 관련하여, 가산기 트리는 열에 대한 내적 결과를 계산하기 위해 열에서 PE 유닛(202)에 의해 수행된 계산 결과를 더하도록 구성된 하나 이상의 가산기 논리 회로를 포함할 수 있다.
타일(200)은 또한 B개의 가산기 트리에 결합되며, 시스톨릭 배열을 형성하도록 서로 결합되는 B개의 누산기(208)를 포함할 수 있다. 누산기는 레지스터 및 가산 로직의 형태를 취할 수 있으며, 여기서 타일(200)의 특정 열과 관련된 특정 레지스터(예를 들어, 레지스터(208a))는 해당 가산기 트리(예를 들어, 가산기 트리(210a))에 의해 제공된 누적 합계를 현재 레지스터 값에 따라 일시적으로 저장한다. 따라서, 누산기의 새 레지스터 값은 가산기 트리 출력과 현재 레지스터 값의 합이다. 일 실시예에 따르면, 누산기(208)가 시스톨릭 배열을 형성한다는 점을 감안할 때, 특정 누산기 (예를 들어, 누산기(208a))는 자신이 저장하는 값을 다운 스트림 이웃 누산기(예를 들어, 누산기(208b))로 이동하도록 구성된다. 다양한 실시 예에 따르면, 시스톨릭 배열이 데이터를 오른쪽에서 왼쪽으로 이동하는 것으로 간주되지만, 당업자는 데이터가 본 발명의 사상 및 범위를 벗어나지 않고 왼쪽에서 오른쪽으로 이동할 수도 있음을 인식할 수 있다.
도 3은 본 개시의 일 실시예에 따른 PE 유닛(202)의 보다 상세한 블록 다이어그램이다. PE 유닛(202)은 하나 이상의 레지스터(레지스터 파일이라고도 함)(300), 멀티플렉서(302) 및 곱셈기 로직(304)을 포함할 수 있다. 레지스터(300)는 또한 버퍼로 지칭될 수 있다.
레지스터(300)는 곱셈 연산을 수행하기 위해 곱셈기 로직(304)에 의해 사용되는 데이터로 미리 로드될 수 있다. 일 실시예에서, 레지스터(300)는 컨볼루션 커널(104)의 커널 가중치(예를 들어, B0, B1, B2)의 열을 저장한다. 수신된 입력 데이터(예를 들어, 입력 g)(306)와 선택된 가중치 값 사이의 곱셈 연산을 수행하도록 곱셈기 유닛(304)에 의해 사용되기 위한 멀티플렉서(302)에 의해 적절한 가중치 값(예를 들어, B1)이 선택될 수 있다. 수신된 입력 데이터는 예를 들어, 입력 특징 맵의 값일 수 있다. 곱셈 연산의 결과(308)는 동일한 열의 다른 PE 유닛(202)에 의한 다른 곱셈 연산의 출력과 함께 더해 지도록 가산기 트리(210)에 출력된다.
일 실시예에서, 계산 유닛(100)은, 예를 들어 입력 채널(C), 커널 폭(Fx) 및 출력 채널(K)과 같은 컨볼루션의 (3개 "for-루프"와 관련된) 3차원에서 컨볼루션 계층의 계산을 언롤하도록 구성될 수 있다. 일 실시예에서, 입력 채널(C)은 타일 입력 차원(204)에서 언롤/병렬화 되고, 커널 폭(Fx) 및 출력 채널(K)은 타일 출력 차원(206)에서 언롤된다. 입력, 가중치 및 출력 텐서의 여러 차원에서 컨볼루션 계산을 공간적으로 언롤하는 것에 의해 계산 대기 시간이 줄어들 수 있다.
도 4a 내지 4j(통칭하여 도 4라고 함)는 입력 채널(C) 차원, 커널 폭(Fx) 차원, 및 출력 채널(K) 차원에서 CNN 계층의 계산을 언롤하도록 구성된 타일(100a)(도 2의 타일 100과 유사)의 블록 다이어그램이다. 도 1의 CNN 계층의 값은 설명 목적으로 사용된다. 도 1 예에서, 컨볼루션 커널(104)은 차원 (K, C, Fy, Fx) = (8, 16, 3, 3)을 갖는다. 필터(104)가 입력 특징 맵(102) 위로 슬라이드하는 것에 의한 스트라이드의 값은 1인 것으로 가정된다.
도 4의 예에서 타일(100a)의 차원는 16 x 24이고, 타일 입력 차원(204a)에서 16행의 PE 유닛 (404) 및 타일 출력 차원(206a)에서 24 열의 PE 유닛(400, 402, 404)을 갖는다. 타일 입력 차원(204a)에서 도 1의 입력 특징 맵(110)의 16개의 입력 채널(C)을 언롤하는 것에서, 16개의 입력 채널 각각에 대한 입력 특징 맵(102)의 단일 입력 값은 병렬로 타일의 16개 행에 대한 입력 데이터로서 제공된다.
8개의 출력 채널(K0-K7)에 대한 커널 폭(Fx) 차원에서 커널 가중치의 3개 열을 언롤할 때, 타일 출력 차원(206a)의 타일의 24개 열이 사용될 수 있다. 일 실시예에서, 타일(100a)은 가중치-고정 타일이고, 여기서 커널 가중치 값의 열은 특정 PE 유닛(202)의 레지스터 파일(300)(도 3)에 저장(예를 들어, 미리 로드 됨)된다. 도 4의 예에서, 출력 채널 K0의 경우, 타일의 열(400)에 있는 PE 유닛은 컨볼루션 커널(104a)의 열(406)의 커널 가중치 값 (B0-B2)를 저장하고, 타일의 열(402)에있는 PE 유닛은 커널(104a)의 열(408)의 커널 가중치 값 (G0-G2)를 저장하며, 타일의 열(404)에 있는 PE 유닛은 커널(104a)의 열(410)의 가중치 값 (R0-R2)를 저장한다. 일 실시예에서, 타일 열의 특정 레지스터는 대응하는 입력 채널의 커널 열을 저장한다. 예를 들어, 열(404)의 레지스터(460)는 입력 채널 0에 커널 열(410)을 저장하고, 열(404)의 레지스터(462)는 또한 커널 열(410)을 저장하지만 입력 채널 1에 저장하며, 다양한 입력 채널에 대해서도 마찬가지이다. 타일의 나머지 열은 나머지 출력 채널 K1-K7의 커널 가중치 열을 저장한다.
도 4에 도시된 바와 같이, 커널 가중치 열의 각 세트(406, 408, 410)는 입력 특징 맵(102)의 동일한 입력을 사용하여, 출력 특징 맵(106)의 3개의 픽셀(예를 들어, 픽셀 a, b, c)을 계산하는데 사용될 수 있다. 입력 데이터를 재사용하면 주 메모리로의 이동이 줄어들어 보다 에너지와 시간 효율적인 방식으로 계산을 수행할 수 있다.
일 실시예에서, 제1 컨볼루션 윈도우(110a)의 입력 특징 값은 컨볼루션 커널(104)의 대응하는 커널 가중치로 내적 계산을 수행하기 위해 타일 입력 차원(204a)에서 순차적으로 공급된다. 이와 관련하여, 도 4에 도시된 바와 같이, 컨볼루션 윈도우(110a)에 입력 특징 데이터는 a, g, m, b, h, n, c, i, o의 순서로 타일에 대한 입력 데이터로서 순차적으로 공급된다. 첫번째 열(430)(a, g, m)의 픽셀 데이터가 타일의 행(412, 414, 416)에 공급될 때, 3개 열의 모든 세트(예를 들어, 열 400, 402, 404)의 첫번째 열(예를 들어, 열 400)의 출력은 타일의 출력 픽셀 a에 해당한다. 이와 관련하여, 첫번째 열에 대한 누산기(예를 들어, 누산기(424))는 채널 0에 대한 픽셀 "a"의 부분 합(a 0 으로 지칭 됨)을 보유한다. 도 4에 도시된 바와 같이, 누산기(424)는 누산기(426 및 428)와 함께 시스톨릭 배열로 배열된다. 누산기(424, 426, 428)는 도 2의 누산기(208)와 동일하거나 유사할 수 있다.
제1 컨볼루션 윈도우(110a)의 두번째 열(432)(b, h, n)의 픽셀 데이터가 타일의 행(412, 414, 416)에 공급되기 전에, a 0 의 부분 합은 시스톨릭 배열에서 인접한 누산기(예를 들어, 누산기 426)로 이동된다. 제1 컨볼루션 윈도우(110a)의 두번째 열(432)의 데이터가 공급됨에 따라, 타일의 첫번째 열에 대한 누산기(예를 들어, 누산기(424))는 채널 0에 대한 출력 픽셀 "b"의 부분 합(b 0 으로 지칭 됨)을 누산하고, 타일의 두번째 열에 대한 누산기(예를 들어, 누산기(426))는 누산기(424)로부터 수신된 a 0 의 부분 합에 더해지는 새로운 부분 합인 a 0 를 누산한다.
제1 컨볼루션 윈도우(110a)의 두번째 열(432)의 데이터를 사용한 내적 계산이 완료되면, 시스톨릭 배열의 부분 합이 다운 스트림 누산기로 한단계 더 이동되고, 제1 컨볼루션 윈도우(110a)의 세번째 열(434)의 픽셀 데이터(c, i 및 o)는 타일의 행(412, 414, 416)에 공급된다. 제1 컨볼루션 윈도우(110a)의 세번째(434)의 데이터가 공급됨에 따라, 첫번째 열에 대한 누산기(예를 들어, 누산기 424)는 채널 0에 대한 출력 픽셀 "c"의 부분 합(c 0 으로 지칭됨)을 누산하고, 두번째 열에 대한 누산기(예를 들어, 누산기 (426)는 출력 픽셀 b 0 의 부분 합을 누산하고, 및 타일의 세번째 열에 대한 누산기(예를 들어, 누산기(428))는 출력 픽셀 a 0 의 특정 합을 누산한다.
제1 컨볼루션 윈도우(110a)의 데이터가 컨볼루션 커널(104)의 가중치와 컨볼루션되면, 출력 픽셀 a 0 의 누산된 합이 출력 특징 맵(106)에 대한 최종 출력 픽셀 a 0 로서 메인 메모리로 발송되어, 누적된 합을 유지하도록 누산기를 비운다. 이어서, 컨볼루션 윈도우는 제2 컨볼루션 윈도우(110b)(도 4j)를 생성하기 위해 입력 특징 맵에 걸쳐 하나의 스트라이드 값만큼 슬라이드할 수 있다. 제2 컨볼루션 윈도우(110b)는 필터 커널(104)의 가중치로 내적 계산이 아직 수행되지 않은 입력 픽셀 데이터(d, j, p)인 새로운 열(436)을 포함한다. 그러나, 열(432 및 434)의 입력 데이터를 포함하여 지금까지 수행된 내적 계산은 각각 누산기(428 및 426)에서 유지되며, 제2 컨볼루션 윈도우(110b)에 대해 재계산될 필요가 없다.
컨볼루션 윈도우는 출력 특징 맵(106)의 첫 번째 행(438)이 채워질 때까지 스트라이드 값에 기초하여 입력 특징 맵 위로 계속 슬라이드 한다.
상기 프로세스는 출력 특징 맵(106)의 모든 값이 채워질 때까지 출력 특징 맵(106)의 다음 행 (440)에 대해 반복된다.
입력 값을 순차적으로 공급하는 위의 실시예는 본 명세서에서 더 상세히 설명되며, 도 1의 CNN 계층의 값을 사용하는 것이 예로서 사용된다. 설명의 단순화를 위해, 출력 채널 K0에 대한 출력 픽셀 a 0 , b 0 및 c 0 의 계산으로 설명이 제한된다. 설명은 나머지 출력 채널 K1-K7에 대한 출력 픽셀뿐만 아니라, 출력 채널 K0에 대한 나머지 출력 픽셀의 계산으로 확장될 수 있다.
도 4a를 참조하면, 계산이 시작되고, 다양한 입력 채널(입력 a0-a15)에 대한 제1 컨볼루션 윈도우(110a)의 첫번째 열(430)에 있는 제1 입력 픽셀 값(a)이 제1 프로세싱 사이클에서 메인 메모리로부터 검색되고, 타일 입력 차원(204a)에서 PE 유닛에 공급된다. 예를 들어, 입력 a0은 타일의 행(412)에있는 PE 유닛에 공급되고, 입력 a1은 타일의 행(414)에있는 PE 유닛에 공급되고, 입력 a15는 타일의 행(416)에있는 PE 유닛에 공급된다. 제1 프로세싱 사이클 동안 컨볼루션 계산을 수행할 때, (다양한 입력 채널에서) 입력 a0-a15는 타일의 열(400)의 PE 유닛에 저장된 커널 열(406)의 가중치 B0와 곱해져, 출력 픽셀 a 0 의 부분 합을 생성한다. 다른 커널 가중치를 저장하는 타일의 열(402 및 404)의 PE 유닛은 수신된 입력 a0-a15로 곱셈 연산을 수행하지 않는다. 입력 a0-a15를 사용하는 곱셈 연산은 제1 프로세싱 사이클 동안 타일의 적절한 열(예를 들어, 세 번째 열마다)에 의해 수행되며, 출력 차원 K1-K7의 경우, 이러한 출력 차원에 대한 출력 픽셀 a 1 -a 7 의 부분 합계를 누산하기 위함이다.
타일의 열(400)에서 PE 유닛에 의한 곱셈 연산의 출력은 가산기 트리(418)(가산기 트리(210)와 유사)에 의해 더해지고, 열(400)에 할당된 누산기(424)에 임시로 저장된다.
도 4b를 참조하면, 다양한 입력 채널(입력 g0-g15)에 대한 제1 컨볼루션 윈도우(110a)의 제1 열(430)의 제2 입력 픽셀 값(g)은 제2 프로세싱 사이클 동안 타일 입력 차원(204a)의 PE 유닛에 공급된다. 제2 프로세싱 사이클 동안 컨볼루션 계산을 수행할 때, 누산기(424)에 저장된 출력 픽셀 a 0 의 부분 합에 추가하기 위해, (다양한 입력 채널에서) 입력 g0-g15에 타일의 열(400)의 PE 유닛에도 저장된 커널 열(406)의 가중치 B1을 곱한다. 다른 커널 가중치를 저장하는 타일의 열(402 및 404)의 PE 유닛는 수신된 입력 g0-g15로 다시 곱셈 연산을 수행하지 않는다.
도 4c에서, 다양한 입력 채널(입력 m0-m15)에 대한 제1 컨볼루션 윈도우(110a)의 첫번째 열(430)의 제3 입력 픽셀 값(m)이 제3 프로세싱 사이클 동안 타일 입력 차원(204a)의 PE 유닛에 공급된다. 제3 프로세싱 사이클 동안 컨볼루션 계산을 수행할 때, 누산기(424)에 저장된 출력 픽셀 a 0 의 부분 합에 추가하기 위해, (다양한 입력 채널에서) 입력 m0-m15는 타일의 열(400)의 PE 유닛에도 저장된 커널 열(406)의 가중치 B2와 곱해지며, 그리고 컨볼루션 윈도우(110a)의 첫번째 열(430)의 계산이 완료된다.
컨볼루션 윈도우(110a)의 두 번째 열(432)(b, h, n)의 데이터가 타일 입력 차원(204a)의 PE 유닛에 공급되기 전에, 누산기(424)의 출력 픽셀 a 0 의 부분 합이 시스톨릭 배열의 누산기(426)로 이동되어, 누산기(424)를 비운다. 제1 컨볼루션 윈도우(110a)의 두번째 열(432) (b, h, n)은 이제, 동일한 입력 데이터 (b, h, n)에 기초하여, 두 출력 픽셀 a 0 및 b 0 의 부분 합을 계산하기 위해 타일에 공급될 수 있다.
이와 관련하여, 도 4d를 참조하면, 다양한 입력 채널(입력 b0-b15)에 대한 제1 컨볼루션 윈도우(110a)의 두번째 열(432)의 제1 입력 픽셀 값(b)은 제4 프로세싱 사이클 동안 타일 입력 차원(204a)의 PE 유닛에 공급된다. 제4 프로세싱 사이클 동안 컨볼루션 계산을 수행할 때, 출력 픽셀 b 0 의 부분 합을 생성하도록, (다양한 입력 채널에서) 입력 b0-b15는 타일의 열(400)의 PE 유닛에 저장된 커널 열(406)의 가중치 B0와 곱해진다. 타일의 열(400)에 있는 PE 유닛에 의한 곱셈 연산의 출력은 가산기 트리(418)에 의해 더해지고, 이제 비워진 열(400)에 할당된 누산기(424)에 임시로 저장되며, 이제 출력 픽셀 b 0 의 부분 합계를 저장할 수 있다.
또한, 입력 b0-b15는 출력 픽셀 a 0 의 부분 합을 계속 계산하기 위해, (다양한 입력 채널에서) 타일의 열(402)의 PE 유닛에 저장되는 커널 열(408)의 가중치 G0와 곱해진다. 타일의 열(402)에 있는 PE 유닛에 의한 곱셈 연산의 출력은 가산기 트리(420)에 의해 더해지고, 누산기(424)로부터 수신된, 이전 단계로부터의 a 0 의 부분 합이 누산되도록 누산기(426)에 제공된다. 다른 커널 가중치를 저장하는 타일의 열(404)에 있는 PE 유닛은, 수신된 입력 b0-b15로 곱하기 연산을 수행하지 않는다.
도 4e 및 도 4f에 도시된 바와 같이, 프로세스는 출력 픽셀 a 0 및 b 0 의 부분 합을 계속 계산하고, 누산기(426 및 424)에 누산하기 위해, 제1 컨볼루션 윈도우(110a)의 두번째 열(432)에서 입력 값 "h" 및 "n"과 함께 계속된다. 이와 관련하여, 누산기(424)에서 유지되는 출력 픽셀 b 0 의 부분 합에 더 기여하기 위해, (다양한 입력 채널에서) 입력 픽셀 값 "h"는 타일의 열(400)의 PE 유닛에 저장되는 커널 열(406)의 가중치 B1과 곱해진다. 입력 값 "h"는 또한, 누산기(426) 내에서 유지되는 출력 픽셀 a 0 의 부분 합에 추가로 기여하기 위해, (다양한 입력 채널에서) 타일의 PE 유닛에 저장되는 커널 열(408)의 가중치 G1과 곱해진다. 또한, 입력 값 "n"은 누산기(424) 내에서 유지되는 출력 픽셀 b 0 의 부분 합에 추가로 기여하기 위해, (다양한 입력 채널에서) 타일의 열(400)의 PE 유닛에 저장되는 커널 열(406)의 가중치 B2와 곱해진다. 입력 값 "n"은 또한 누산기(426)에서 유지되는 출력 픽셀 a0의 부분 합에 추가로 기여하기 위해, (다양한 입력 채널에서) 타일의 열(402)의 PE 유닛에 저장되는 커널 열(408)의 가중치 G2와 곱해진다.
제1 컨볼루션 윈도우(110a)의 두번째 열(432)의 계산이 완료되면, 누산기(426)의 출력 픽셀 a 0 의 부분 합이 누산기(428)로 이동되고, 누산기(424)의 출력 픽셀 b 0 의 부분 합이 누산기(426)로 이동된다. 이제 입력 데이터(c, i, o)를 사용하여, 3개의 출력 픽셀 a 0 , b 0 및 c 0 모두의 부분 합을 계산하기 위해 제1 컨볼루션 윈도우(110a)의 세번째 열(434)(c, i, o)이 타일에 공급될 수 있다.
이와 관련하여, 도 4g 내지 도 4i를 참조하면, 제 1 컨볼루션 윈도우(110a)의 세번째 열(434)의 입력 값 (c, i, o)는 타일 입력 차원(204a)의 PE 유닛에 순차적으로 공급된다. 컨볼루션 계산을 수행할 때, 입력 c0-c15은 출력 픽셀 c 0 의 부분 합을 생성하기 위해 (타일의 열(400)의 PE 유닛에 저장된) 다양한 입력 채널에서 커널 열(406)의 가중치 B0와 곱해지며, 출력 픽셀 b 0 의 부분 합을 생성하기 위해 (타일의 열(402)의 PE 유닛에 저장된) 다양한 입력 채널에서 커널 열(408)의 가중치 G0와 더 곱해지고, 출력 픽셀 a 0 의 부분 합을 생성하기 위해 (타일의 열(404)의 PE 유닛에 저장된) 다양한 입력 채널에서 커널 열(410)의 가중치 R0와 여전히 더 곱해진다.
입력 i0-i15는 출력 픽셀 c 0 의 부분 합을 생성하기 위해 (타일의 열(400)의 PE 유닛에 저장된) 다양한 입력 채널에서 커널 열(406)의 가중치 B1과 곱해지고, 출력 픽셀 b 0 의 부분 합을 생성하기 위해 (타일의 열(402)의 PE 유닛에 저장된) 다양한 입력 채널에서 커널 열(408)의 가중치 G1에 더 곱해지고, 출력 픽셀 a 0 의 부분 합을 생성하기 위해 (타일의 열(404)의 PE 유닛에 저장된) 다양한 입력 채널에서 커널 열(410)의 가중치 R1과 여전히 더 곱해진다.
입력 o0-o15는 출력 픽셀 c 0 의 부분 합을 생성하도록 (타일의 열(400)의 PE 유닛에 저장된) 다양한 입력 채널에서 커널 열(406)의 가중치 B2와 곱해지고, 출력 픽셀 b 0 의 부분 합을 생성하도록 (타일의 열(402)에 저장된 PE 유닛에 저장된) 다양한 입력 채널에서 커널 열(408)의 가중치 G2와 더 곱해지고, 출력 픽셀 a 0 의 부분 합을 생성하기 위해, (타일의 열(404)의 PE 유닛에 저장된) 다양한 입력 채널에 커널 열(410)의 가중치 R2와 여전히 더 곱해진다. 제1 컨볼루션 윈도우(110a)의 계산이 종료되고, 누산기(424)의 출력 픽셀 c 0 의 누산된 합이 누산기(426)로 이동하고, 누산기(426)의 출력 픽셀 b 0 의 누산된 합이 누산기(428)로 이동한다. 누산기(428)의 출력 픽셀 a 0 의 누산된 합은 비워지고 출력 특징 맵(106)의 최종 출력 픽셀 a 0 로서 메인 메모리에 저장된다.
제1 컨볼루션 윈도우(110a)의 계산을 완료하면, 윈도우는 스트라이드 값 1만큼 입력 특징 맵 (102) 위에서 이동하고, 제2 컨볼루션 윈도우(110b)는 입력 특징 데이터의 다음 3개의 열(432, 434, 436)로 형성된다. 제2 컨볼루션 윈도우(110b)는 필터 커널(104)의 가중치로 내적 계산이 아직 수행되지 않은 입력 데이터(d, j, p)의 새로운 열(436)을 포함한다. 그러나, 열(432 및 434)의 입력 데이터를 포함하여 지금까지 수행된 내적 계산은 각각 누산기(428 및 426)에서 유지되며, 제2 컨볼루션 윈도우(110b)에 대해 재계산될 필요가 없다.
도 5는 도 1의 실시예에 따른 CNN 계층을 계산하기 위한 프로세스의 흐름도이다. 프로세스가 시작되고, 블록 500에서, 컨볼루션 윈도우(110)의 입력의 값 세트가 현재 프로세싱 사이클 동안 타일 입력 차원(204)에 입력된다. 입력 값의 세트는 입력 특징 맵(110)의 하나 이상의 입력 채널(C)에 대한 입력 값을 포함할 수 있다.
블록 502에서, 입력 값의 세트를 수신하는 하나 이상의 PE 유닛(202)의 세트는 현재 프로세싱 사이클 동안 하나 이상의 계산을 수행한다. 특정 PE 유닛(202)에 의해 수행되는 계산은 입력 값의 세트에서 특정 입력 값과 PE 유닛에서 저장된 가중치 값의 열의 특정 가중치 값에 기초한 곱셈 계산일 수 있다. PE 유닛(202)의 특정 세트는 타일(예를 들어, 타일의 열)의 출력 차원(206)에 배치된 PE 유닛일 수 있다.
블록 504에서, 하나 이상의 PE 유닛(202)의 세트 각각에 대해, PE 유닛의 특정 세트에 의한 계산 결과가 추가되고, 결과 합이 대응하는 누산기(208)에 저장된다.
블록 506에서, 컨볼루션 윈도우의 열의 계산이 완료되었는지에 대한 결정이 내려진다. 대답이 예이면, 계산될 컨볼루션 윈도우의 열이 더 있는지에 대한 결정이 블록 508에서 이루어진다. 대답이 아니오이면, 현재 컨볼루션 윈도우의 계산이 완료되고, 윈도우에 대한 최종 출력 픽셀 값을 저장하는 마지막 다운 스트림 누산기의 값이 블록 510에서 누산기 밖으로 이동되고, 주 메모리에 저장된다. 나머지 다른 누산기에 저장된 모든 값은 다른 컨볼루션 윈도우와 관련된 출력 픽셀의 부분 합계이며, 이러한 값은 인접한 누산기를 향해 다운스트림으로 이동된다.
블록 512에서, CNN 계층의 계산이 완료되었는지에 대한 결정이 내려진다.(예를 들어, 출력 특징 맵(106)의 모든 출력 픽셀 값이 계산되었는지). 대답이 예이면 프로세스가 종료된다. 대답이 아니오이면, 컨볼루션 윈도우는 블록 514에서 스트라이드 값만큼 슬라이드되고, 프로세스는 블록 500을 계속하여 CNN 계층의 계산을 계속하기 위한 입력 값의 다른 세트를 공급한다.
다시 블록 508을 참조하면, 계산될 컨볼루션 윈도우의 열이 더 있는 경우, 누산기에 저장된 값은 출력 특징 맵(106)의 하나 이상의 출력 픽셀의 부분 합일 뿐이며, 부분 합은 블록 516의 시스톨릭 어레이의 이웃하는 누산기를 향해 다운스트림으로 이동된다. 프로세스는 하나 이상의 출력 픽셀의 계산을 계속하기 위해 입력 값의 다른 세트가 타일에 공급되는 블록(500)을 계속한다.
일 실시예에서, 계산 유닛(100)은 예를 들어, 입력 채널(C), 커널 높이(Fy ), 출력 채널(K) 및 커널 너비(Fx)와 같은 컨볼루션의 4가지 차원에서 컨볼루션 계층의 계산을 언롤하도록 구성된다. 일 실시예에서, 입력 채널(C) 및 커널 높이(Fy)는 타일 입력 차원(204)에서 언롤되거나/병렬화되고, 커널 폭(Fx) 및 출력 채널(K)은 타일 출력 차원(206)에서 언롤된다.
도 6은 입력 채널(C) 차원, 커널 높이(Fy) 차원, 커널 폭(Fx) 차원 및 출력 채널(K) 차원에서 CNN 계층의 계산을 언롤하도록 구성된 타일(100b)의 블록도이다. 도 1의 CNN 계층의 값은 설명 목적으로 사용된다.
도 6의 실시예에서 타일(100b)은, 타일 입력 차원(204b)에서 입력 특징 맵(102)의 16 입력 채널(C)을 단지 언롤하는 것을 대신하여, 커널 높이(Fy)에 대응하는 컨볼루션 윈도우(110)에서의 데이터의 열(예를 들어, 열(432))이 또한 타일 입력 차원에서 언롤/병렬화되는 것을 제외하면, 도 4의 실시예의 타일(100a)과 유사하다. 따라서, 도 4의 실시예에서는, 입력 특징 데이터는 타일 입력 차원에서 한 번에 하나씩 순차적으로 공급되고, 도 6의 실시예는 입력 특성 데이터를 한 번에 한 열씩 공급한다.
도 6의 실시예에서, 타일(100b)의 차원은 48 x 24일 수 있으며, 타일 입력 차원(204b)에서 48행의 PE 유닛(202) 및 타일 출력 차원(206b)에서 24열의 PE 유닛을 갖는다. 본 발명의 실시예는 도 6에 도시된 차원에 제한되지 않으며, 다른 차원이 가능함이 또한 이해될 수 있다. 컨볼루션 윈도우(110)의 입력 데이터의 열(예를 들어, 열(434))을 언롤할 때, 16개의 입력 채널(C)에 대해, 타일 입력 차원(204b)의 타일의 48개 행이 병렬로 입력 데이터의 열을 수신하는데 사용될 수 있다. 입력 값(c, i, o)가 있는 입력 열(434)을 예로 들어, 첫번째 입력 채널 C0에 대한 입력 값 (c0, i0, o0)는, 다른 입력 채널의 열에 대한 입력 값을 따라(예를 들어, 행(606-610)에 대해 평행으로 공급되는 입력 채널 C15에 대한 입력 값(c15, i15, o15)), 타일의 행(600-604)에 대해 병렬로 공급된다.
컨볼루션 커널(104a)의 열(406)의 커널 가중치 값을 저장하는 타일의 열(400)의 PE 유닛은 출력 픽셀 c를 계산하기 위해, 수신된 입력 값의 열과 커널 가중치 값 중 대응하는 것들을 기반으로 병렬 계산을 수행할 수 있다. 컨벌루션 커널(104a)의 열(408)의 커널 가중치 값을 저장하는 타일의 열(402)에 있는 PE 유닛은, 출력 픽셀 b를 계산하기 위해, 동일한 입력 값의 열 및 커널 가중치 값의 대응하는 것들에 기반하여 병렬 계산을 수행할 수 있다. 컨벌루션 커널(104a)의 열(410)의 커널 가중치 값을 저장하는 타일의 열(404)에 있는 PE 유닛은, 출력 픽셀 a를 계산하기 위해, 동일한 입력 값의 열 및 커널 가중치 값의 대응하는 것들에 기반하여 병렬 계산을 수행할 수 있다.
도 6의 실시예에 따른 CNN 계층을 계산하는 프로세스는, 블록 506의 과정을 생략할 수 있는 것을 제외하고는, 도 5의 실시예의 프로세스와 유사할 수 있다. 또한, 블록 500에서 타일 입력 차원에 공급되는 입력 값의 세트는 입력 특징 맵(110)의 하나 이상의 입력 채널에 대한, 컨볼루션 윈도우(110)의 입력 값의 열이다.
본 개시의 다양한 실시예에 따른 계산 유닛(100)은 컨볼루션 신경망의 하나 이상의 CNN 계층을 계산하기 위해 컴퓨터 모듈에 의해 호출될 수 있다. 하나 이상의 CNN 계층이 계산되면, 그것들은 하나 이상의 다른 유형의 분류 작업에 사용될 수 있다. 분류 작업은, 예를 들어, 사람의 입력이 거의 또는 전혀없이 환경에서 안전하게 이동하기 위해 환경에서 객체를 인식/분류하기 위한 AI 기계(예를 들어, 자율 주행 차량)에 의한 이미지 분류 작업일 수 있다. 예를 들어, AI 기계에 의해 캡처된 이미지는 하나 이상의 CNN 계층을 계산하기 위해 처리 될 수 있으며, CNN 계층의 출력은 이미지에서 하나 이상의 객체(예를 들어, 보행자, 자동차 등)를 분류하는 데 사용될 수 있다. 계산된 CNN 계층은 다양한 수준의 추상화에서 입력 이미지의 특징을 추출할 수 있다. CNN 계층의 출력은 (일부 처리 후) 분류를 수행하기 위해 피드-포워드 신경망에 공급될 수 있다.
비록 용어 "제 1", "제 2", "제 3"등이 본원에서 다양한 요소, 구성 요소, 영역, 층 및/또는 섹션, 이러한 요소, 구성 요소, 영역, 층 및/또는 섹션을 설명하기 위해 사용될 수 있으나, 이러한 용어에 의해 요소, 구성 요소, 영역, 층 및/또는 섹션이 제한되는 것은 아님이 이해될 수 있다. 이러한 용어는 한 요소, 구성 요소, 영역, 층 또는 섹션을 다른 요소, 구성 요소, 영역, 층 또는 섹션과 구별하는 데만 사용된다. 따라서, 본 명세서에서 논의된 제1 요소, 제1 구성 요소, 제1 영역, 제1 층 또는 제1 섹션은 본 발명의 개념의 사상 및 범위를 벗어나지 않고 제2 요소, 제2 구성 요소, 제2 영역, 제2 층 또는 제2 섹션으로 지칭될 수 있다.
본 명세서에서 사용된 용어는 특정 실시예를 설명하기 위한 것이며 본 발명을 제한하려는 의도가 아니다. 본 명세서에서 사용되는 용어 "실질적으로", "약" 및 이와 유사한 용어는 정도의 용어가 아니라 근사값의 용어로 사용되며, 당해 분야의 통상의 기술자에 의해 인식될 측정 또는 계산된 값의 고유한 편차를 설명하기 위한 것이다.
본 명세서에서 사용 된 바와 같이, 단수 형태는 문맥 상 명백하게 달리 나타내지 않는 한 복수 형태도 포함하도록 의도된다. 본 명세서에서 사용될 때 "포함하다" 및/또는 "포함하는"이라는 용어는 언급된 특징, 정수, 단계, 연산, 요소 및/또는 구성 요소의 존재를 지정하지만 또는 하나 이상의 다른 특징, 정수, 단계, 연산, 요소, 구성 요소 및/또는 그 그룹의 추가의 존재를 배제하지는 않는다는 것이 추가로 이해될 것이다. 본 명세서에서 사용되는 용어 "및/또는"은 하나 이상의 연관된 열거된 항목의 임의의 및 모든 조합을 포함한다. "최소 하나 이상의"와 같은 표현식은 요소 목록 앞에 올 때 전체 요소 목록을 수정하고 목록의 개별 요소를 수정하지 않는다. 또한, 본 발명의 실시예를 설명할 때 "할 수 있다"라는 용어는 "본 발명의 하나 이상의 실시 예"를 의미한다. 또한, "예시적인"이라는 용어는 예 또는 예시를 나타내는 것으로 의도된다. 본 명세서에서 사용되는 용어 "사용하다", "사용하는" 및 "사용된"은 각각 "활용하다", "활용하는" 및 "활용된"라는 용어와 동의어로 간주될 수 있다.
요소 또는 계층이 다른 요소 또는 계층에 "상에", "연결되는", "결합되는" 또는 "인접한"것으로 언급될 때, 다른 요소 또는 계층에 직접적으로 위에 놓이거나, 연결되거나, 결합되거나 또는 인접할 수 있으며, 또는 하나 이상의 중간 요소 또는 계층이 존재할 수 있다. 대조적으로, 요소 또는 계층이 다른 요소 또는 계층에 "직접 위에", "직접 연결된", "직접 결합된" 또는 "바로 인접한"것으로 언급될 때, 중간 요소 또는 계층이 존재하지 않는다.
본 명세서에서 인용된 임의의 수치 범위는 인용된 범위 내에 포함된 동일한 수치 정밀도의 모든 하위 범위를 포함하도록 의도된다. 예를 들어, "1.0 내지 10.0"의 범위는 언급된 최소값 1.0과 언급된 최대값 10.0 사이의 모든 하위 범위를 포함한다. 즉, 예를 들어, 2.4 내지 7.6와 같이, 최소값이 1.0 이상이고 최대값이 10.0 이하인 경우를 가질 수 있다. 본 명세서에 언급된 임의의 최대 수치 제한은 그 안에 포함된 모든 더 낮은 수치 제한을 포함하도록 의도되고, 본 명세서에 언급된 임의의 최소 수치 제한은 거기에 포함된 모든 더 높은 수치 제한을 포함하도록 의도된다.
심층 신경망에 대한 계산을 수행하기 위한 시스템 및 방법의 예시적인 실시예가 본 명세서에서 구체적으로 설명되고 예시되었지만, 많은 수정 및 변형이 당업자에게 명백할 것이다. 따라서, 본 개시의 원리에 따라 구성된 심층 신경망에 대한 계산을 수행하기 위한 시스템 및 방법은 본 명세서에서 구체적으로 설명된 것과 다르게 구현될 수 있음을 이해해야한다. 본 개시는 또한 다음의 청구범위 및 그 균등물에서 정의된다.
Claims (18)
- 입력 텐서, 커널 텐서 및 출력 텐서와 관련된 신경망 계층의 계산을 수행하기 위한 계산 유닛으로서, 상기 계산 유닛은:
어레이에 배열된 프로세싱 요소(PE) 유닛의 수 (R x B),
R은 상기 어레이의 입력 차원에 있는 입력의 수이고, B는 상기 어레이의 출력 차원에 있는 출력의 수이고,
제1 입력 값 세트는 제1 프로세싱 사이클 동안 상기 어레이의 상기 입력 차원에서 병렬로 제공되고, 제2 입력 값 세트는 제2 프로세싱 사이클 동안 상기 어레이의 상기 입력 차원에서 병렬로 제공되고,
상기 출력 차원에 배치된 제1 및 제2 PE 유닛 세트는 각각 상기 커널 텐서의 특정 차원과 연관된 제1 및 제2 가중치 값 세트를 저장하고,
상기 제1 PE 유닛 세트는 상기 제1 프로세싱 사이클 동안 상기 제1 입력 값 세트 및 상기 제1 가중치 값에 기초하여 병렬 계산을 수행하도록 구성되며, 및 상기 제2 프로세싱 사이클 동안 상기 제2 입력 값 세트와 상기 제1 가중치 값 세트에 기초하여 병렬 계산을 수행하도록 더 구성되고,
상기 제2 PE 유닛 세트는 상기 제2 프로세싱 사이클 동안 상기 제2 입력 값 세트와 상기 제2 가중치 값 세트에 기초하여 병렬 계산을 수행하도록 구성되며,
상기 제1 PE 유닛 세트에 결합되는 제1 가산기 유닛, 상기 제1 가산기 유닛은 상기 제1 프로세싱 사이클 동안 상기 제1 PE 유닛 세트에 의한 상기 계산의 결과인 제1 합을 생성하도록 구성되고, 상기 제1 프로세싱 사이클 동안 상기 제1 PE 유닛 세트에 의해 상기 계산의 결과인 제2 합을 생성하도록 더 구성되며;
상기 제2 PE 유닛 세트에 결합되는 제2 가산기 유닛, 상기 제2 가산기 유닛은 상기 제2 프로세싱 사이클 동안 상기 제2 PE 유닛 세트에 의한 상기 계산의 결과인 제3 합을 생성하도록 구성되고;
상기 제1 가산기 유닛에 결합되는 제1 누산기;
상기 제1 누산기 및 상기 제2 가산기에 결합되는 제2 누산기;
상기 제1 누산기는 상기 제1 가산기에 의해 생성되는 상기 제1 합을 저장하도록 구성되고, 상기 제2 합을 저장하기 전에 상기 제1 합을 상기 제2 누산기로 이동시키도록 더 구성되며,
상기 제2 누산기는 상기 제3 합과 함께 상기 제1 합을 누산하기 위해 상기 제1 합을 수신하도록 구성되고,
상기 제2 누산기는 상기 출력 텐서의 픽셀 값으로 저장하기 위해 상기 누산된 제1 및 제3 합을 메모리로 이동시키도록 더 구성되는, 계산 유닛.
- 제1항에 있어서,
상기 제1 누산기는 상기 출력 텐서의 제1 픽셀에 대한 부분 값을 저장하도록 구성되고, 및
상기 제2 누산기는 상기 출력 텐서의 제2 픽셀에 대한 부분 값을 저장하도록 구성되는, 계산 유닛.
- 제1항에 있어서,
상기 병렬 계산은 병렬 곱셈 계산을 포함하는, 계산 유닛.
- 제1항에 있어서,
상기 제1 입력 값 세트는 상기 입력 텐서의 제1 입력 채널에 연관된 제1 싱글 입력 값과, 상기 입력 텐서의 제2 입력 채널에 연관된 제2 싱글 입력 값을 포함하고, 상기 제2 입력 값 세트는 상기 제1 입력 채널과 연관된 제3 싱글 입력 값과, 상기 제2 입력 채널과 연관된 제4 싱글 입력 값을 포함하는, 계산 유닛.
- 제1항에 있어서,
제1 입력 값 세트는 상기 입력 텐서의 제1 입력 채널에 대한 컨볼루션 윈도우 내의 제1 입력 값 열과 상기 입력 텐서의 제2 입력 채널에 대한 컨볼루션 윈도우 내의 제2 입력 값 열을 포함하고,
상기 제2 입력 값 세트는 상기 제1 입력 채널에 대한 상기 컨볼루션 윈도우에 연관된 제3 입력 값 열과 상기 제2 입력 채널에 대한 상기 컨볼루션 윈도우와 연관된 제4 입력 값 열을 포함하는, 계산 유닛.
- 제5항에 있어서,
상기 제1 또는 제2 입력 채널에 대한 상기 컨볼루션 윈도우는 상기 커널 텐서의 커널 높이에 대응하는 높이와 상기 커널 텐서의 커널 폭에 대응하는 폭을 갖는, 계산 유닛.
- 제1항에 있어서,
상기 커널 텐서의 상기 특정 차원은 커널 폭을 포함하고, 상기 제1 가중치 값 세트는 상기 커널 텐서의 제1 열에 저장된 가중치 값에 대응하고, 상기 제2 가중치 값 세트는 상기 커널 텐서의 제2 열에 저장된 가중치 값에 대응하는, 계산 유닛.
- 제1항에 있어서,
상기 복수의 PE 유닛은 가중치-고정 PE 유닛이고, 상기 제1 가중치 값 세트는 상기 제2 PE 유닛 세트의 레지스터들에 저장되고, 상기 제2 가중치 값 세트는 상기 제2 PE 유닛 세트의 레지스터들에 저장되는, 계산 유닛.
- 제1항에 있어서,
상기 제1 및 제3 합은 상기 출력 텐서의 제1 출력 픽셀에 연관된 값이고, 상기 제2 합은 상기 출력 텐서의 제2 출력 픽셀에 연관된 값인, 계산 유닛.
- 입력 텐서, 커널 텐서, 및 출력 텐서에 연관된 신경망 계층의 계산을 수행하는 방법에 있어서, 상기 계산은 어레이에 배열된 프로세싱 요소(PE) 유닛의 (R x B)를 통해 수행되며,
R은 상기 어레이의 입력 차원에 있는 입력의 수이고, B는 상기 어레이의 출력 차원에 있는 출력의 수이고,
상기 방법은
상기 출력 차원에 배치된 제1 및 제2 PE 유닛 세트에 의해, 상기 커널 텐서의 특정 차원에 연관된 제1 및 제2 가중치 값 세트를 각각 저장하는 것;
제1 프로세싱 사이클 동안 상기 어레이의 상기 입력 차원에 병렬인 제1 입력 값 세트를 수신하고, 상기 제1 PE 유닛 세트에 의해, 상기 제1 프로세싱 사이클 동안 상기 제1 입력 값 세트와 상기 제1 가중치 값 세트에 기초하여 병렬 계산을 수행하는 것;
제2 프로세싱 사이클 동안 상기 어레이의 상기 입력 차원에 병렬인 제2 입력 값 세트를 수신하고, 상기 제1 PE 유닛 세트에 의해, 상기 제2 프로세싱 사이클 동안 제1 입력 값 세트와 제1 가중치 값 세트에 기초하여 병렬 계산을 수행하는 것;
상기 제1 PE 유닛 세트에 결합된 제1 가산기를 통해, 상기 제1 프로세싱 사이클 동안 상기 제1 PE 유닛에 의한 계산의 결과인 제1 합을 생성하는 것;
상기 제1 가산기에 결합된 제1 누산기에 의해, 상기 제1 가산기에 의해 생성된 상기 제1 합을 저장하는 것;
제1 가산기를 통해, 상기 제2 프로세싱 사이클 동안 제1 PE 유닛 세트에 의한 계산의 결과인 제2 합을 생성하는 것;
상기 제2 PE 유닛 세트에 결합된 제2 가산기를 통해, 상기 제2 프로세싱 사이클 동안 상기 계산의 결과인 제3 합을 생성하는 것, 상기 제3 합은 상기 제2 가산기 유닛과 상기 누산기에 결합된 제2 누산기에 저장되고;
상기 제1 누산기에 의해, 상기 제1 누산기가 상기 제2 합을 저장하기 전에 상기 제1 합을 상기 제2 누산기로 이동시키고;
상기 제2 누산기에 의해 상기 제1 누산기로부터 상기 제1 합을 상기 제3 합과 누산하기 위한 상기 제1 합을 수신하는 것; 및
상기 출력 텐서의 픽셀 값으로서 저장하기 위해 상기 누산된 제1 및 제3 합을 메모리로 이동시키는 것을 포함하는, 방법.
- 제10항에 있어서,
상기 제1 누산기는 상기 출력 텐서의 제1 픽셀에 대한 부분 값을 저장하도록 구성되고,
상기 제2 누산기는 상기 출력 텐서의 제2 픽셀의 부분 값을 저장하도록 구성되는, 방법.
- 제10항에 있어서,
상기 병렬 계산은 병렬 곱셈 계산을 포함하는, 방법.
- 제10항에 있어서,
상기 제1 입력 값 세트는 상기 입력 텐서의 제1 입력 채널에 연관된 제1 싱글 입력 값과, 상기 입력 텐서의 제2 입력 채널에 연관된 제2 싱글 입력 값을 포함하고, 상기 제2 입력 값 세트는 상기 제1 입력 채널과 연관된 제3 싱글 입력 값과, 상기 제2 입력 채널과 연관된 제4 싱글 입력 값을 포함하는, 방법.
- 제10항에 있어서,
제1 입력 값 세트는 상기 입력 텐서의 제1 입력 채널에 대한 컨볼루션 윈도우 내의 제1 입력 값 열과 상기 입력 텐서의 제2 입력 채널에 대한 컨볼루션 윈도우 내의 제2 입력 값 열을 포함하고,
상기 제2 입력 값 세트는 상기 제1 입력 채널에 대한 상기 컨볼루션 윈도우에 연관된 제3 입력 값 열과 상기 제2 입력 채널에 대한 상기 컨볼루션 윈도우와 연관된 제4 입력 값 열을 포함하는, 방법.
- 제14항에 있어서,
상기 제1 또는 제2 입력 채널에 대한 상기 컨볼루션 윈도우는 상기 커널 텐서의 커널 높이에 대응하는 높이와 상기 커널 텐서의 커널 폭에 대응하는 폭을 갖는, 방법.
- 제10항에 있어서,
상기 커널 텐서의 상기 특정 차원은 커널 폭을 포함하고, 상기 제1 가중치 값 세트는 상기 커널 텐서의 제1 열에 저장된 가중치 값에 대응하고, 상기 제2 가중치 값 세트는 상기 커널 텐서의 제2 열에 저장된 가중치 값에 대응하는, 방법.
- 제10항에 있어서,
상기 복수의 PE 유닛은 가중치-고정 PE 유닛이고, 상기 제1 가중치 값 세트는 상기 제2 PE 유닛 세트의 레지스터들에 저장되고, 상기 제2 가중치 값 세트는 상기 제2 PE 유닛 세트의 레지스터들에 저장되는, 방법.
- 제10항에 있어서,
상기 제1 및 제3 합은 상기 출력 텐서의 제1 출력 픽셀에 연관된 값이고, 상기 제2 합은 상기 출력 텐서의 제2 출력 픽셀에 연관된 값인, 방법.
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US202063011613P | 2020-04-17 | 2020-04-17 | |
US63/011,613 | 2020-04-17 | ||
US16/900,845 US11507817B2 (en) | 2020-04-17 | 2020-06-12 | System and method for performing computations for deep neural networks |
US16/900,845 | 2020-06-12 |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20210128903A true KR20210128903A (ko) | 2021-10-27 |
Family
ID=75539155
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020210021808A KR20210128903A (ko) | 2020-04-17 | 2021-02-18 | 심층 신경망용 컴퓨팅 수행을 위한 계산 유닛 및 방법 |
Country Status (3)
Country | Link |
---|---|
US (2) | US11507817B2 (ko) |
EP (1) | EP3896615A1 (ko) |
KR (1) | KR20210128903A (ko) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US12105628B2 (en) | 2021-10-19 | 2024-10-01 | Electronics And Telecommunications Research Institute | Apparatus and method for managing cache memory including cache lines with variable cache line configuration |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US12014505B2 (en) * | 2019-01-31 | 2024-06-18 | Samsung Electronics Co., Ltd. | Method and apparatus with convolution neural network processing using shared operand |
US11676068B1 (en) | 2020-06-30 | 2023-06-13 | Cadence Design Systems, Inc. | Method, product, and apparatus for a machine learning process leveraging input sparsity on a pixel by pixel basis |
US11823018B1 (en) | 2020-06-30 | 2023-11-21 | Cadence Design Systems, Inc. | Method, product, and apparatus for a machine learning process using weight sharing within a systolic array having reduced memory bandwidth |
US11615320B1 (en) | 2020-06-30 | 2023-03-28 | Cadence Design Systems, Inc. | Method, product, and apparatus for variable precision weight management for neural networks |
US11651283B1 (en) | 2020-06-30 | 2023-05-16 | Cadence Design Systems, Inc. | Method, product, and apparatus for a machine learning process using dynamic rearrangement of sparse data and corresponding weights |
US11687831B1 (en) * | 2020-06-30 | 2023-06-27 | Cadence Design Systems, Inc. | Method, product, and apparatus for a multidimensional processing array for hardware acceleration of convolutional neural network inference |
CN112200310B (zh) * | 2020-08-28 | 2023-11-24 | 星宸科技股份有限公司 | 智能处理器、数据处理方法及存储介质 |
US20220309336A1 (en) * | 2021-03-26 | 2022-09-29 | Nvidia Corporation | Accessing tensors |
WO2024021266A1 (en) * | 2022-07-25 | 2024-02-01 | Intel Corporation | Apparatus, method, system, and storage medium for deep learning operation on workloads with dynamic shapes |
Family Cites Families (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB9027663D0 (en) * | 1990-12-20 | 1991-02-13 | Sandoz Ltd | Light-stabilizing compositions |
JP2004362460A (ja) * | 2003-06-06 | 2004-12-24 | Nippon Precision Circuits Inc | 画像検出処理装置 |
US8924455B1 (en) | 2011-02-25 | 2014-12-30 | Xilinx, Inc. | Multiplication of matrices using systolic arrays |
US9747546B2 (en) | 2015-05-21 | 2017-08-29 | Google Inc. | Neural network processor |
US9805303B2 (en) | 2015-05-21 | 2017-10-31 | Google Inc. | Rotating data for neural network computations |
US10049322B2 (en) | 2015-05-21 | 2018-08-14 | Google Llc | Prefetching weights for use in a neural network processor |
US11074492B2 (en) | 2015-10-07 | 2021-07-27 | Altera Corporation | Method and apparatus for performing different types of convolution operations with the same processing elements |
US10733505B2 (en) | 2016-11-10 | 2020-08-04 | Google Llc | Performing kernel striding in hardware |
US10037490B2 (en) | 2016-12-13 | 2018-07-31 | Google Llc | Performing average pooling in hardware |
US10241972B2 (en) | 2017-03-16 | 2019-03-26 | International Business Machines Corporation | Matrix multiplication on a systolic array |
US10824938B2 (en) | 2017-04-24 | 2020-11-03 | Intel Corporation | Specialized fixed function hardware for efficient convolution |
US10698974B2 (en) | 2017-05-17 | 2020-06-30 | Google Llc | Low latency matrix multiply unit |
CN111133452B (zh) | 2017-05-19 | 2024-07-23 | 莫维迪乌斯有限公司 | 用于提高卷积效率的方法、系统和装置 |
US10671349B2 (en) | 2017-07-24 | 2020-06-02 | Tesla, Inc. | Accelerated mathematical engine |
US10990648B2 (en) * | 2017-08-07 | 2021-04-27 | Intel Corporation | System and method for an optimized winograd convolution accelerator |
GB2568776B (en) | 2017-08-11 | 2020-10-28 | Google Llc | Neural network accelerator with parameters resident on chip |
KR102606825B1 (ko) | 2017-09-13 | 2023-11-27 | 삼성전자주식회사 | 뉴럴 네트워크 모델을 변형하는 뉴럴 네트워크 시스템, 이를 포함하는 어플리케이션 프로세서 및 뉴럴 네트워크 시스템의 동작방법 |
EP3682330B1 (en) | 2017-09-21 | 2022-08-24 | Huawei Technologies Co., Ltd. | Multi-thread systolic array |
US10482337B2 (en) | 2017-09-29 | 2019-11-19 | Infineon Technologies Ag | Accelerating convolutional neural network computation throughput |
US20190164036A1 (en) | 2017-11-29 | 2019-05-30 | Electronics And Telecommunications Research Institute | Method and apparatus for generating address of data of artificial neural network |
AU2017279610A1 (en) | 2017-12-19 | 2019-07-04 | Canon Kabushiki Kaisha | Memory access optimisation using per-layer computational mapping and memory allocation for CNN application |
US10459876B2 (en) | 2018-01-31 | 2019-10-29 | Amazon Technologies, Inc. | Performing concurrent operations in a processing element |
US10445638B1 (en) | 2018-02-28 | 2019-10-15 | Amazon Technologies, Inc. | Restructuring a multi-dimensional array |
WO2019177639A1 (en) | 2018-03-16 | 2019-09-19 | Cornell University | Artificial intelligence system and methods for performing image analysis |
US11188814B2 (en) | 2018-04-05 | 2021-11-30 | Arm Limited | Systolic convolutional neural network |
EP3557485B1 (en) | 2018-04-19 | 2021-05-26 | Aimotive Kft. | Method for accelerating operations and accelerator apparatus |
US11042370B2 (en) | 2018-04-19 | 2021-06-22 | Intel Corporation | Instruction and logic for systolic dot product with accumulate |
US10387122B1 (en) | 2018-05-04 | 2019-08-20 | Olsen Ip Reserve, Llc | Residue number matrix multiplier |
US10817042B2 (en) | 2018-09-27 | 2020-10-27 | Intel Corporation | Power savings for neural network architecture with zero activations during inference |
EP3654247A1 (en) * | 2018-11-15 | 2020-05-20 | IMEC vzw | Convolution engine for neural networks |
-
2020
- 2020-06-12 US US16/900,845 patent/US11507817B2/en active Active
-
2021
- 2021-02-18 KR KR1020210021808A patent/KR20210128903A/ko active Search and Examination
- 2021-04-15 EP EP21168553.2A patent/EP3896615A1/en active Pending
-
2022
- 2022-10-14 US US17/966,488 patent/US11681907B2/en active Active
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US12105628B2 (en) | 2021-10-19 | 2024-10-01 | Electronics And Telecommunications Research Institute | Apparatus and method for managing cache memory including cache lines with variable cache line configuration |
Also Published As
Publication number | Publication date |
---|---|
US20230047273A1 (en) | 2023-02-16 |
US11507817B2 (en) | 2022-11-22 |
US11681907B2 (en) | 2023-06-20 |
US20210326686A1 (en) | 2021-10-21 |
EP3896615A1 (en) | 2021-10-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR20210128903A (ko) | 심층 신경망용 컴퓨팅 수행을 위한 계산 유닛 및 방법 | |
US20210224125A1 (en) | Operation Accelerator, Processing Method, and Related Device | |
KR102459855B1 (ko) | 심층 신경망용 가속기 | |
Alwani et al. | Fused-layer CNN accelerators | |
CN107239829B (zh) | 一种优化人工神经网络的方法 | |
CN111897579B (zh) | 图像数据处理方法、装置、计算机设备和存储介质 | |
KR102523263B1 (ko) | 하드웨어 기반 풀링을 위한 시스템 및 방법 | |
KR101788829B1 (ko) | 콘볼루션 신경망 컴퓨팅 장치 | |
JP6393058B2 (ja) | 情報処理装置、情報処理方法 | |
EP3674982A1 (en) | Hardware accelerator architecture for convolutional neural network | |
KR20180123846A (ko) | 합성곱 신경망을 위한 논리적 3차원 구조의 재구성형 연산 가속기 | |
Chen et al. | Tight compression: Compressing CNN model tightly through unstructured pruning and simulated annealing based permutation | |
CN113159285B (zh) | 神经网络加速器 | |
US20210150313A1 (en) | Electronic device and method for inference binary and ternary neural networks | |
KR20230050340A (ko) | 테이블 형식의 컨볼루션 및 가속 | |
US20230082952A1 (en) | Neural processing unit for binarized neural network | |
Niu et al. | SPEC2: Spectral sparse CNN accelerator on FPGAs | |
CN117474061B (zh) | 一种抗辐射低延迟神经网络推理加速芯片 | |
Unnikrishnan et al. | LayerPipe: Accelerating deep neural network training by intra-layer and inter-layer gradient pipelining and multiprocessor scheduling | |
Morì et al. | Accelerating and pruning cnns for semantic segmentation on fpga | |
JP2023534314A (ja) | 深層学習ネットワークのトレーニングを加速させるためのシステム及び方法 | |
US20230065725A1 (en) | Parallel depth-wise processing architectures for neural networks | |
CN116090518A (zh) | 基于脉动运算阵列的特征图处理方法、装置以及存储介质 | |
Moshovos et al. | Value-based deep-learning acceleration | |
Lee et al. | TT-SNN: Tensor Train Decomposition for Efficient Spiking Neural Network Training |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination |