KR102490862B1 - 양방향 프로세싱 엘리먼트 어레이를 포함하는 신경망 가속기 - Google Patents

양방향 프로세싱 엘리먼트 어레이를 포함하는 신경망 가속기 Download PDF

Info

Publication number
KR102490862B1
KR102490862B1 KR1020180042395A KR20180042395A KR102490862B1 KR 102490862 B1 KR102490862 B1 KR 102490862B1 KR 1020180042395 A KR1020180042395 A KR 1020180042395A KR 20180042395 A KR20180042395 A KR 20180042395A KR 102490862 B1 KR102490862 B1 KR 102490862B1
Authority
KR
South Korea
Prior art keywords
feature map
pes
kernel
register
result
Prior art date
Application number
KR1020180042395A
Other languages
English (en)
Other versions
KR20190030564A (ko
Inventor
여준기
권영수
김찬
김현미
양정민
정재훈
조용철
Original Assignee
한국전자통신연구원
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 한국전자통신연구원 filed Critical 한국전자통신연구원
Priority to US16/038,243 priority Critical patent/US11507429B2/en
Publication of KR20190030564A publication Critical patent/KR20190030564A/ko
Application granted granted Critical
Publication of KR102490862B1 publication Critical patent/KR102490862B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C11/00Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C11/54Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using elements simulating biological cells, e.g. neuron

Landscapes

  • Engineering & Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Physics & Mathematics (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Neurology (AREA)
  • Theoretical Computer Science (AREA)
  • Biophysics (AREA)
  • Artificial Intelligence (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Image Analysis (AREA)
  • Complex Calculations (AREA)

Abstract

본 발명의 실시 예에 따른 레이어들을 포함하는 신경망의 연산을 수행하기 위한 신경망 가속기는, 필터와 관련된 커널 데이터를 저장하는 커널 메모리, 레이어들의 출력들인 피처 맵 데이터를 저장하는 피처 맵 메모리, 및 제 1 방향 및 제 2 방향을 따라 배치되는 프로세싱 엘리먼트들을 포함하는 PE 어레이를 포함할 수 있고, PE들 각각은, 피처 맵 메모리로부터 제 1 방향으로 전송되는 피처 맵 데이터와 커널 메모리로부터 제 2 방향으로 전송되는 커널 데이터를 이용하여 연산을 수행하고 그리고 제 1 방향과 반대인 제 3 방향으로 연산 결과를 피처 맵 메모리로 전송할 수 있다.

Description

양방향 프로세싱 엘리먼트 어레이를 포함하는 신경망 가속기{NEURAL NETWORK ACCELERATOR INCLUDING BIDIRECTIONAL PROCESSING ELEMENT ARRAY}
본 발명은 신경망 가속기에 관한 것으로, 좀 더 상세하게는 양방향 프로세싱 엘리먼트 어레이를 포함하는 신경망 가속기에 관한 것이다.
인공 신경망(Artificial Neural Network; ANN)은 생물학적인 신경망과 유사한 방식으로 데이터 또는 정보를 처리할 수 있다. 이미지 인식을 위한 기술로서 심층 신경망(Deep Neural Network) 기법의 하나인 컨볼루션 신경망(Convolutional Neural Network)이 연구되고 있다. 특히, CNN은 사물, 문자, 필기체, 이미지 등과 같은 다양한 객체 인식에 효과적인 성능을 제공할 수 있다.
다수의 레이어들(Layers)로 구성되는 CNN은 반도체 장치를 이용하여 하드웨어 형태로 구현될 수 있다. CNN이 하드웨어 형태로 구현되는 경우 CNN을 구성하는 다수의 레이어들 각각에서 처리되어야 하는 연산량으로 인하여, CNN을 구현하기 위한 하드웨어 자원의 요구가 증가할 수 있다. 또한, CNN의 연산을 수행하기 위해 요구되는 메모리 접근 빈도도 증가할 수 있다. 따라서, CNN을 하드웨어 형태로 구현하는데 제약을 감소시킬 수 있는 기술이 필요하다.
본 발명은 상술한 기술적 과제를 해결하기 위한 것으로, 본 발명은 양방향 프로세싱 엘리먼트 어레이를 포함하는 신경망 가속기를 제공할 수 있다.
본 발명의 실시 예에 따른 레이어들을 포함하는 신경망의 연산을 수행하기 위한 신경망 가속기는, 필터와 관련된 커널 데이터를 저장하는 커널 메모리, 레이어들의 출력들인 피처 맵 데이터를 저장하는 피처 맵 메모리, 및 제 1 방향 및 제 2 방향을 따라 배치되는 프로세싱 엘리먼트들을 포함하는 PE 어레이를 포함할 수 있고, PE들 각각은, 피처 맵 메모리로부터 제 1 방향으로 전송되는 피처 맵 데이터와 커널 메모리로부터 제 2 방향으로 전송되는 커널 데이터를 이용하여 연산을 수행하고 그리고 제 1 방향과 반대인 제 3 방향으로 연산 결과를 피처 맵 메모리로 전송할 수 있다.
본 발명의 다른 실시 예에 따른 레이어들을 포함하는 신경망의 연산을 수행하기 위한 신경망 가속기는, 필터와 관련된 커널 데이터를 저장하는 커널 메모리, 레이어들의 출력들인 피처 맵 데이터를 저장하는 피처 맵 메모리, 및 제 1 방향 및 제 2 방향을 따라 배치되는 프로세싱 엘리먼트들 그리고 제 2 방향으로 PE들과 피처 맵 메모리 사이에 배치되는 액티베이션 유닛들을 포함하는 PE 어레이를 포함할 수 있고, PE들 각각은, 피처 맵 메모리로부터 제 1 방향으로 전송되는 피처 맵 데이터와 커널 메모리로부터 제 2 방향으로 전송되는 커널 데이터를 이용하여 제 1 연산을 수행하고 그리고 제 1 방향과 반대인 제 3 방향으로 제 1 연산 결과를 액티베이션 유닛들로 전송하고, 그리고 액티베이션 유닛들은 제 1 연산 결과에 대한 제 2 연산을 수행하고 그리고 제 2 연산 결과를 피처 맵 메모리로 전송할 수 있다.
본 발명의 실시 예에 따른 신경망 가속기는 양방향의 PE 어레이 내부에서 컨볼루션 연산, 액티베이션 연산, 노멀라이제이션 연산, 및 풀링 연산을 수행하여 한번에 연산 결과를 메모리로 출력할 수 있다. 또한, 신경망 가속기는 양방향의 PE 어레이로부터 중간 연산 결과인 부분 합을 수신하거나 양방향의 PE 어레이로 부분 합을 전송할 수 있다. 따라서, 신경망 가속기는 메모리로의 접근을 최소화하고 신경망 연산을 효율적으로 수행할 수 있다.
도 1은 본 발명의 실시 예에 따른 CNN을 예시적으로 도시한다.
도 2는 도 1의 CNN의 연산을 수행하기 위한 신경망 가속기를 예시적으로 보여주는 블록도이다.
도 3은 도 2의 PE 어레이를 좀 더 상세하게 보여주는 블록도이다.
도 4는 도 3의 PE를 좀 더 상세하게 보여주는 블록도이다.
도 5는 도 4의 PE가 출력 명령에 응답하여 X축 방향으로 연산 결과를 수신하는 방법을 예시적으로 도시하는 순서도이다.
도 6은 X축 방향으로 출력 명령을 수신하는 제 1 PE 및 제 2 PE를 예시적으로 도시한다.
도 7은 도 4의 PE가 로드 부분 합 명령 또는 패스 부분 합 명령에 응답하여 X축과 반대 방향으로 부분 합을 전송하는 방법을 예시적으로 도시하는 순서도이다.
도 8은 X축과 반대 방향으로 로드 부분 합 명령 및 패스 부분 합 명령을 수신하는 제 1 내지 제 3 PE들을 예시적으로 도시한다.
도 9는 본 발명의 다른 실시 예에 따른 도 2의 PE 어레이를 예시적으로 보여주는 블록도이다.
아래에서는, 본 발명의 기술 분야에서 통상의 지식을 가진 자가 본 발명을 용이하게 실시할 수 있을 정도로, 본 발명의 실시 예들이 명확하고 상세하게 기재될 것이다.
본 발명은 신경망(Neural Network)의 연산을 수행하기 위한 신경망 가속기(Neural Network Accelerator)에 관한 것이다. 본 발명의 신경망은 생물학적인 신경망과 유사한 방식으로 데이터 또는 정보를 처리할 수 있는 인공 신경망(ANN)일 수 있다. 신경망은 생물학적 뉴런과 유사한 인공 뉴런들을 포함하는 다수의 레이어들(Layers)을 포함할 수 있다. 신경망은 객체를 인식하고 분류하는 인공 지능 분야에서 활용될 수 있다. 이하에서, 이미지 인식을 위한 컨볼루션 신경망(Convolutional Neural Network; CNN)이 대표적으로 설명될 것이나, 본 발명의 신경망 가속기는 CNN에 한정되지 않고 CNN이 아닌 다른 신경망을 구현하기 위해서도 사용될 수 있다.
일반적으로, 컨볼루션(Convolution) 연산은 두 함수 간의 상관관계를 검출하기 위한 연산을 나타낼 수 있다. CNN에서 입력 데이터 또는 특정 피처(Feature)를 가리키는 커널(Kernel)과 특정 변수들(예를 들어, 가중치(Weight), 바이어스(Bias) 등) 사이의 컨볼루션 연산이 반복적으로 수행됨으로써, 이미지의 패턴이 결정되거나 또는 이미지의 특징이 추출될 수 있다.
도 1은 본 발명의 실시 예에 따른 CNN을 예시적으로 도시한다. 도 1을 참조하면, CNN(100)은 제 1 내지 제 5 레이어들(L1~L5)을 포함할 수 있다.
CNN은 외부(예를 들면, 호스트, 메모리 등)로부터 제 1 데이터(DATA1)를 수신할 수 있다. 제 1 데이터(DATA1)는 CNN(100)으로 제공되는 입력 이미지 또는 입력 데이터를 나타낼 수 있다. 예를 들어, 입력 이미지는 다수의 픽셀들을 포함하는 이미지 장치로부터 생성될 수 있다. 입력 이미지는 W1 X H1 X D1의 크기를 가질 수 있다. 다른 예를 들어, 제 1 데이터(DATA1)는 다른 레이어의 출력일 수도 있다.
제 1 레이어(L1)는 제 1 커널(K1)을 이용하여 제 1 데이터(DATA1)에 대한 컨볼루션 연산을 수행할 수 있고 제 2 데이터(DATA2)를 생성할 수 있다. 제 1 커널(K1)은 제 1 데이터(DATA1)에서 공간적으로 인접한 값들에 대한 상관관계를 추출하기 위해 사용되는 필터, 마스크, 윈도우 등을 나타낼 수 있다. 제 1 레이어(L1)는 제 1 데이터(DATA1)의 피처(Feature)를 추출할 수 있다. 제 1 데이터(DATA1)와 제 1 레이어(L1)에서 출력된 제 2 데이터(DATA2)는 피처 맵(feature map)으로 각각 지칭될 수 있다.
제 1 레이어(L1)는 제 1 데이터(DATA1)의 입력 값들과 제 1 커널(K1)의 가중치 값들에 대해 곱셈 연산을 수행하고, 곱셈 결과들을 모두 가산하고, 즉, 컨볼루션 연산을 수행하고, 그리고 가산 결과에 대해 액티베이션(Activation) 연산을 수행할 수 있다. 제 1 레이어(L1)는 비선형 함수인 ReLU(Rectified Linear Unit) 함수, Leaky ReLU 함수, Sigmoid 함수, tanh(Hyperbolic Tangent) 함수 등을 이용하여 액티베이션 연산을 수행할 수 있다. 또한, 제 1 레이어(L1)는 액티베이션 연산의 결과들에 대한 노멀라이제이션(normalization) 연산을 수행할 수 있다. 노멀라이제이션 연산을 통해 제 1 레이어(L1)의 출력 값들의 범위들이 일치되거나 제 1 레이어(L1)의 출력 값들의 분포들이 유사해질 수 있다.
제 2 데이터(DATA2)는 W2 X H2 X D2의 크기를 가질 수 있고 제 2 데이터(DATA2)의 크기는 제 1 데이터(DATA1)의 크기와 동일하거나 상이할 수 있다. 예를 들어, 제 1 데이터(DATA1)의 엣지(edge) 영역에 데이터 패딩(Padding)이 존재하면, 도 1에서 도시된 것과 같이, 제 2 데이터(DATA2)의 크기는 제 1 데이터(DATA1)의 크기와 동일할 수 있다.
제 2 레이어(L2)는 제 2 커널(K2)을 이용하여 제 2 데이터(DATA2)에 대한 풀링(Pooling) 연산을 수행할 수 있다. 풀링 연산은 서브 샘플링(Sub Sampling) 연산으로 지칭될 수 있다. 제 2 레이어(L2)는 제 2 커널(K2)에 대응하는 제 2 데이터(DATA2)의 값들 중 고정된 위치에 있는 픽셀의 값을 선택하거나, 제 2 커널(K2)에 대응하는 제 2 데이터(DATA2)의 값들의 평균을 계산하거나(즉, 에버리지 풀링(Average Pooling)), 또는 제 2 커널(K2)에 대응하는 제 2 데이터(DATA2)의 값들 중 가장 큰 값을 선택할 수 있다(즉, 맥스 풀링(Max Pooling)). 제 2 레이어(L2)에서 출력된 제 3 데이터(DATA3)도 피처 맵으로 지칭될 수 있고 제 3 데이터(DATA3)는 W3 X H3 X D3의 크기를 가질 수 있다. 예를 들어, 제 3 데이터(DATA3)의 크기는 제 2 데이터(DATA2)의 크기보다 작을 수 있다.
제 3 레이어(L3)는 제 3 커널(K3)을 이용하여 제 3 데이터(DATA3)에 대한 컨볼루션 연산, 액티베이션 연산, 노멀라이제이션 연산 등을 수행할 수 있다. 그 다음, 제 4 레이어(L4)는 제 4 커널(K4)을 이용하여 제 4 데이터(DATA4)에 대한 풀링 연산을 수행할 수 있다. 제 3 레이어(L3)는 제 1 레이어(L1)와 유사하게 연산을 수행할 수 있다. 예를 들어, 제 1 및 제 3 레이어들(L1, L3)은 컨볼루션 레이어들일 수 있다. 제 4 레이어(L4)는 제 2 레이어(L2)와 유사하게 연산을 수행할 수 있다. 예를 들어, 제 2 및 제 4 레이어들(L2, L4)은 풀링 레이어들일 수 있다.
실시 예에 있어서, 제 1 내지 제 4 레이어들(L1~L4)에서 각각 출력되는 제 2 내지 제 5 데이터(DATA2~DATA5)의 크기들(W2 X H2 X D2, W3 X H3 X D3, W4 X H4 X D4, W5 X H5 X D5)은 서로 동일하거나 상이할 수 있다. CNN(100)이 4개의 레이어들(L1~L4)을 포함하는 것으로 도 1에서 예시적으로 도시되었으나, 실제 CNN(100)은 더 많은 레이어들을 포함할 수 있다.
제 1 데이터(DATA1)의 크기는 제 1 내지 제 4 레이어들(L1~L4)을 통과하면서 감소할 수 있다. 제 5 데이터(DATA5)는 제 1 데이터(DATA1)가 제 1 내지 제 4 레이어들(L1~L4)을 통과하면서 추출된 피처를 포함할 수 있다. 제 5 데이터(DATA5)에 포함된 피처는 제 1 데이터(DATA1)를 대표할 수 있는 피처일 수 있다. 또한, 제 1 내지 제 4 레이어들(L1~L4)의 제 1 내지 제 4 커널들(K1~K4)이 다양하게 설정되면, 제 1 데이터(DATA1)의 다양한 피처들이 추출될 수 있다. 도 1을 참조하면, 제 1 내지 제 4 커널들(K1~K4)의 크기들이 모두 동일한 것으로 도시되었으나, 제 1 내지 제 4 커널들(K1~K4)의 크기들은 서로 동일할 수도 있고 상이할 수도 있다.
제 5 레이어(L5)는 제 5 데이터(DATA5)에 대한 완전 연결(Full Connection) 동작을 수행하고 출력 데이터(OUTPUT DATA)를 생성할 수 있다. 예를 들어, 제 5 레이어(L5)는 완전 연결 레이어(Fully Connected Layer)일 수 있다. 출력 데이터(OUTPUT DATA)는 제 1 데이터(DATA1)가 인식되거나 분류된 결과를 나타낼 수 있다. CNN(100)이 하나의 제 5 레이어(L5)를 포함하는 것으로 도 1에서 예시적으로 도시되었으나, 실제 CNN(100)은 더 많은 레이어들을 포함할 수 있다. CNN(100)의 제 1 내지 제 4 레이어들(L1~L4)의 피처 맵들(DATA1~DATA5)과 커널들(K1~K4)이 간략하게 설명되었다. 이하에서는 CNN(100)을 하드웨어로 구현하기 위한 장치가 설명될 것이다.
도 2는 도 1의 CNN의 연산을 수행하기 위한 신경망 가속기를 예시적으로 보여주는 블록도이다. 도 2는 도 1을 참조하여 설명될 것이다. 신경망 가속기(1000)는 프로세싱 엘리먼트 어레이(Processing Element Array; 이하 PE 어레이, 1100), 피처 맵 메모리(Feature Map Memory, 1200), 커널 메모리(Kernel Memory, 1300), 및 제어기(Controller, 1400)를 포함할 수 있다. 신경망 가속기(1000)는 신경망 장치, 신경망 회로, 하드웨어 가속기, 프로세싱 유닛 등과 같이 신경망 연산을 수행하기 위해 하드웨어적으로 구현된 연산 장치일 수 있다. 예를 들어, 신경망 가속기(1000)는 SoC(System on Chip), ASIC(application specific integrated circuit), CPU(Central Processing Unit), GPU(Graphics Processing Unit), VPU(Vision Processing Unit), 및 NPU(Neural Processing Unit) 등과 같은 다양한 반도체 장치를 이용하여 구현될 수 있다.
PE 어레이(1100)는 X축 및 Y축 방향을 따라 배치되는 프로세싱 엘리먼트(Processing Element; 이하 PE)들을 포함할 수 있다. PE들은 도 3을 참조하여 후술한다. PE 어레이(1100)는 동기 신호(예를 들면, 클럭 신호)에 맞추어서 연산을 수행하는 시스톨릭 어레이(Systolic Array)일 수 있다. 예를 들어, 연산들은 도 1에서 상술한 컨볼루션 연산, 액티베이션 연산, 노멀라이제이션 연산, 및 풀링 연산을 포함할 수 있다.
PE 어레이(1100)는 피처 맵 메모리(1200)로부터 X축 방향으로 전송되는 피처 맵 데이터를 수신할 수 있다. X축 방향은 피처 맵 메모리(1200)로부터 PE 어레이(1100)로 향할 수 있다. PE 어레이(1100)는 커널 메모리(1300)로부터 X축 방향과 수직인 Y축 방향으로 전송되는 커널 데이터를 수신할 수 있다. Y축 방향은 커널 메모리(1300)로부터 PE 어레이(1100)로 향할 수 있다. 여기서, 피처 맵 데이터는 도 1의 제 1 내지 제 5 데이터(DATA1~DATA5, 피처 맵들)를 나타낼 수 있다. 커널 데이터는 도 1의 제 1 내지 제 4 커널들(K1~K4, 또는 필터들, 윈도우들, 마스크들)과 관련될 수 있다.
PE 어레이(1100)는 피처 맵 데이터와 커널 데이터를 이용하여 연산을 수행할 수 있다. PE 어레이(1100)는 X축과 반대 방향으로 연산 결과를 피처 맵 메모리(1200)로 전송할 수 있다. PE 어레이(1100)의 내부에서 CNN(100)의 다양한 연산들이 처리될 수 있으므로, 신경망 가속기(1000)는 CNN(100)의 다양한 연산들을 처리하기 위한 PE 어레이(1100)와 피처 맵 메모리(1200) 사이의 별도의 블록, 회로, 유닛 등을 포함하지 않을 수 있다. PE 어레이(1100)의 연산 결과는 곧바로 피처 맵 메모리(1200)로 전송될 수 있다. PE 어레이(1100)는 X축 방향으로 피처 맵 데이터를 수신하고 X축과 반대 방향으로 연산 결과를 출력하므로, PE 어레이(1100)는 X축을 기준으로 양방향 PE 어레이일 수 있다.
실시 예에 있어서, PE 어레이(1100)의 연산 결과는 도 1의 제 2 내지 제 5 데이터(DATA2~DATA5)에 대응하는 피처 맵 데이터일 수 있다. 또는, PE 어레이(1100)의 연산 결과는 피처 맵 데이터를 생성하기 위한 중간 연산 결과인 부분 합(Partial Sum)일 수 있다. PE 어레이(1100)는 PE들의 개수, 속도 등과 같은 제약으로 인하여 새로운 피처 맵 데이터를 피처 맵 메모리(1200)로 전송하기 전에 새로운 피처 맵 데이터를 생성하기 위한 부분 합을 피처 맵 메모리(1200)로 전송할 수 있다.
피처 맵 메모리(1200)는 도 1의 제 1 내지 제 5 데이터(DATA1~DATA5)에 대응하는 입력 데이터 또는 피처 맵 데이터를 저장할 수 있다. 또한, 피처 맵 메모리(1200)는 PE 어레이(1100)로부터 X축과 반대 방향으로 전송되는 연산 결과를 수신하고 저장할 수 있다. 피처 맵 메모리(1200)는 X축 방향으로 피처 맵 데이터를 PE 어레이(1100)로 전송하거나 또는 X축 방향으로 이전에 저장된 PE 어레이(1100)의 이전의 연산 결과를 PE 어레이(1100)로 전송할 수 있다.
커널 메모리(1300)는 도 1의 제 1 내지 제 4 커널들(K1~K4)에 대응하는 커널 데이터를 저장할 수 있다. 커널 메모리(1300)는 Y축 방향으로 커널 데이터를 PE 어레이(1100)로 전송할 수 있다. 커널 데이터는 컨볼루션 연산에서 사용되는 커널의 가중치 값들을 포함할 수 있다. 가중치 값들은 임의의 레이어 내의 임의의 인공 뉴런과 다른 인공 뉴런간의 결합 세기를 나타낼 수 있다. 실시 예에 있어서, 피처 맵 메모리(1200)와 커널 메모리(1300)는 서로 다른 메모리 장치들에서 각각 구현되거나 또는 하나의 메모리 장치의 서로 다른 영역들에서 각각 구현될 수 있다.
실시 예에 있어서, PE 어레이(1100)에 대한 피처 맵 메모리(1200)와 커널 메모리(1300)의 위치들은 도 2에서 도시된 것으로 한정되지 않는다. 예를 들어, 피처 맵 메모리(1200)는 PE 어레이(1100)의 오른쪽, 위쪽, 또는 아래쪽에 위치할 수도 있고 커널 메모리(1300)는 PE 어레이(1100)의 아래쪽, 왼쪽, 또는 오른쪽에 위치할 수도 있다. 어느 경우든, 피처 맵 메모리(1200)와 커널 메모리(1300)의 위치들과 관계없이, 피처 맵 메모리(1200)와 커널 메모리(1300) 각각은 PE 어레이(1100) 내 상대적으로 가까운 PE들로부터 상대적으로 먼 PE들로 데이터를 전송할 수 있다.
제어기(1400)는 PE 어레이(1100), 피처 맵 메모리(1200), 및 커널 메모리(1300)를 제어하기 위한 명령들을 생성할 수 있다. 제어기(1400)는 PE 어레이(1100), 피처 맵 메모리(1200), 및 커널 메모리(1300)가 동기되는 (글로벌) 클럭 신호를 생성할 수 있다. PE 어레이(1100) 및 피처 맵 메모리(1200)는 클럭 신호에 기초하여 피처 맵 데이터 및 연산 결과를 교환할 수 있다. 커널 메모리(1300)는 클럭 신호에 기초하여 커널 데이터를 PE 어레이(1100)로 전송할 수 있다.
도 3은 도 2의 PE 어레이를 좀 더 상세하게 보여주는 블록도이다. 도 3은 도 1 및 도 2를 참조하여 설명될 것이다. PE 어레이(1100)는 PE들(1110), 피처 맵 입출력 유닛들(Feature Map I/O Unit, 1120), 및 커널 로드 유닛들(Kernel Load Unit, 1130)을 포함할 수 있다.
PE들(1110)은 X축 및 Y축 방향을 따라 배치될 수 있고 2차원 어레이를 구성할 수 있다. PE들(1110) 각각은 피처 맵 메모리(1200)로부터 X축 방향으로 전송되는 피처 맵 데이터와 커널 메모리(1300)로부터 Y축 방향으로 전송되는 커널 데이터를 이용하여 연산을 수행할 수 있다. PE들(1110) 각각은 X축과 반대 방향으로 연산 결과를 피처 맵 메모리(1200)로 전송할 수 있다.
PE들(1110) 각각은 도 2의 제어기(1400)에 의해 생성되는 클럭 신호에 동기될 수 있다. PE들(1110) 각각은 클럭 신호에 기초하여 X축 및 Y축 방향으로 데이터를 인접 PE들(혹은 다음 PE들)로 전송할 수 있다. 좀 더 구체적으로, PE들(1110) 각각은 클럭 신호에 기초하여 X축 방향으로 피처 맵 데이터를 인접 PE로 전송할 수 있다. PE들(1110) 각각은 클럭 신호에 기초하여 X축과 반대 방향으로 연산 결과를 인접 PE로 전송할 수 있다. PE들(1110) 각각은 클럭 신호에 기초하여 Y축을 기준으로 커널 데이터를 인접 PE로 전송할 수 있다. PE들(1110)은 시스톨릭 어레이를 구성할 수 있고 클럭 신호에 기초하여 동시에 동작할 수 있다. PE들(1110)의 개수는 신경망 가속기(1000)의 면적, 속도, 전력, CNN(100)의 연산량 등에 기초하여 결정될 수 있다.
피처 맵 입출력 유닛들(1120)은 Y축 방향을 따라 배치될 수 있다. 피처 맵 입출력 유닛들(1120) 각각은 X축 방향을 따라 배치되고 하나의 로우(row)에 대응하는 PE들(1110)과 데이터를 교환할 수 있다. 예를 들어, 피처 맵 입출력 유닛들(1120) 각각은 피처 맵 메모리(1200)에 저장된 피처 맵 데이터를 수신할 수 있다. 피처 맵 입출력 유닛들(1120) 각각은 X축 방향으로 수신된 피처 맵 데이터를 PE들(1110)로 전송할 수 있다.
X축 방향을 따라 배치되는 PE들(1110)은 수신된 피처 맵 데이터에 대한 연산을 수행하고 그리고 연산 결과(새로운 피처 맵 데이터 혹은 새로운 피처 맵 데이터를 생성하기 위한 부분 합)를 생성할 수 있다. 그 다음, 피처 맵 입출력 유닛들(1120) 각각은 X축과 반대 방향으로 PE들(1110)로부터 연산 결과를 수신하고 수신된 연산 결과를 피처 맵 메모리(1200)로 전송할 수 있다. 피처 맵 입출력 유닛들(1120) 각각은 피처 맵 메모리(1200)로부터 부분 합을 수신하고 X축 방향으로 수신된 부분 합을 다시 PE들(1110)로 전송할 수 있다.
커널 로드 유닛들(1130)은 X축 방향을 따라 배치될 수 있다. 커널 로드 유닛들(1130) 각각은 커널 메모리(1300)에 저장된 커널 데이터를 수신할 수 있다. 커널 로드 유닛들(1130) 각각은 수신된 커널 데이터를 Y축 방향을 따라 배치되고 하나의 컬럼(column)에 대응하는 PE들(1110)로 전송할 수 있다. 피처 맵 데이터가 전송되는 방향(X축 방향 또는 X축과 반대 방향)과 커널 데이터가 전송되는 방향(Y축 방향)은 서로 수직할 수 있다.
도 4는 도 3의 PE를 좀 더 상세하게 보여주는 블록도이다. 도 4는 도 1 내지 도 3을 참조하여 설명될 것이다. 도 4의 PE(1110)는 도 3의 PE 어레이(1100) 내의 PE들 중 임의의 하나일 수 있다. 즉, PE 어레이(1100) 내의 PE들은 서로 동일하게 구현될 수 있다. PE(1110)는 제어 레지스터(1111), 피처 맵 레지스터(1112), 커널 레지스터(1113), 곱셈기(1114), 가산기(1115), 누적 레지스터(1116), 및 출력 레지스터(1117)를 포함할 수 있다.
제어 레지스터(1111)는 X축 방향으로 전송되는 명령을 저장할 수 있다. 명령은 도 2의 제어기(1400)에서 생성될 수 있다. 제어 레지스터(1111)는 저장된 명령에 기초하여 PE(1110) 내 다른 구성 요소들(피처 맵 레지스터(1112), 커널 레지스터(1113), 곱셈기(1114), 가산기(1115), 누적 레지스터(1116), 및 출력 레지스터(1117))을 제어할 수 있다. 제어 레지스터(1111)는 임의의 사이클(cycle)에서 명령을 수신하고 다음 사이클에서 X축 방향으로 저장된 명령을 다른 PE(예를 들면, 오른쪽의 PE)로 전송할 수 있다. 여기서, 사이클은 전술한 클럭 신호의 임의의 한 주기를 나타낼 수 있다. 다른 예시로, 제어 레지스터(1111)는 클럭 신호의 상승 엣지 또는 하강 엣지에서 명령을 수신할 수도 있다.
피처 맵 레지스터(1112)는 임의의 사이클에서 X축 방향으로 전송되는 피처 맵 데이터를 수신하고 저장할 수 있다. 피처 맵 레지스터(1112)는 저장된 피처 맵 데이터를 곱셈기(1114)로 제공할 수 있다. 피처 맵 레지스터(1112)는 다음 사이클에서 X축 방향으로 저장된 피처 맵 데이터를 다른 PE(예를 들면, 오른쪽의 PE)로 전송할 수 있다.
커널 레지스터(1113)는 임의의 사이클에서 Y축 방향으로 전송되는 커널 데이터를 수신하고 저장할 수 있다. 커널 레지스터(1113)는 저장된 커널 데이터를 곱셈기(1114)로 제공할 수 있다. 커널 레지스터(1113)는 다음 사이클에서 Y축 방향으로 저장된 커널 데이터를 다른 PE(예를 들면, 아래쪽의 PE)로 전송할 수 있다. 제어 레지스터(1111), 피처 맵 레지스터(1112), 및 커널 레지스터(1113)는 적어도 하나의 플립 플롭, 적어도 하나의 래치, 적어도 하나의 로직 게이트 등을 이용하여 하드웨어적으로 구현될 수 있다.
곱셈기(1114)는 수신된 피처 맵 데이터의 입력 값과 수신된 커널 데이터의 가중치 값에 대한 곱셈 연산을 수행할 수 있다. 예를 들어, 곱셈기(1114)의 곱셈 결과는 다른 PE로 곧바로 전송되지 않고 누적 레지스터(1116)에 누적될 수 있다. 예를 들어, PE(1110)가 CNN(100)의 액티베이션 연산, 노멀라이제이션 연산 연산, 및 풀링 연산을 수행하면, 연산 결과는 X축과 반대 방향으로 인접 PE(예를 들면, 왼쪽의 PE)로 전송될 수 있다.
가산기(1115)는 곱셈기(1114)의 곱셈 결과 및 이전 사이클에서 누적 레지스터(1116)에 누적된 이전의 연산 결과에 대한 가산 연산을 수행할 수 있다. 누적 레지스터(1116)는 가산기(1115)의 가산 결과를 누적하거나 저장할 수 있다. 누적 레지스터(1116)가 가산기(1115)의 새로운 가산 결과를 수신하면, 내부에 저장되었던 가산 결과는 이전의 연산 결과가 될 수 있다. 즉, 곱셈기(1114)의 곱셈 결과는 누적 레지스터(1116)에 누적될 수 있다.
실시 예에 있어서, PE(1110)는 곱셈기(1114), 가산기(1115), 및 누적 레지스터(1116)를 이용하여 곱셈-누산(Multiply Accumulate; MAC) 연산을 수행할 수 있다. 곱셈기(1114), 가산기(1115), 및 누적 레지스터(1116)는 적어도 하나의 플립 플롭, 적어도 하나의 래치, 적어도 하나의 로직 게이트 등을 이용하여 하드웨어적으로 구현될 수 있다. PE(1110)는 곱셈-누산 연산을 반복적으로 수행하여 도 1에서 전술한 컨볼루션 연산, 액티베이션 연산, 및 노멀라이제이션 연산을 수행할 수 있다.
컨볼루션 연산은 피처 맵 데이터 및 커널 데이터를 곱하고 곱셈 결과들을 모두 더하는 연산이다. 액티베이션 연산 및 노멀라이제이션 연산은 누적 레지스터(1116)에 저장된 컨볼루션 연산의 결과에 특정한 값을 곱하거나 가산하는 연산을 포함할 수 있다. 즉, 누적 레지스터(1116)에 저장된 컨볼루션 연산의 결과는 곱셈기(1114, 실선 화살표 참조) 및 가산기(1115, 점선 화살표 참조)로 제공될 수 있다. 예를 들어, 곱셈기(1114), 가산기(1115), 및 누적 레지스터(1116)를 포함하는 PE(1110)는 ReLU 함수 또는 Leaky ReLU 함수를 이용하여 액티베이션 연산을 수행할 수 있다.
출력 레지스터(1117)는 가산기(1115)의 가산 결과를 저장할 수 있다. 출력 레지스터(1117)에 저장된 가산 결과는 PE(1110)로부터 X축과 반대 방향으로 전송되는 연산 결과이다. 출력 레지스터(1117)는 다른 PE(예를 들면, 오른쪽의 PE)로부터 X축과 반대 방향으로 전송되는 연산 결과를 저장할 수 있다.
실시 예에 있어서, PE(1110)는 곱셈기(1114), 가산기(1115), 누적 레지스터(1116), 및 출력 레지스터(1117)를 이용하여 CNN(100)의 풀링 연산을 더 수행할 수 있다. PE(1110)는 컨볼루션 연산, 액티베이션 연산, 및 노멀라이제이션 연산을 수행한 새로운 연산 결과와 출력 레지스터(1117)에 저장된 이전의 연산 결과를 비교할 수 있다. 여기서, 새로운 연산 결과는 가산기(1115)에서 생성될 수 있다. 가산기(1115)는 새로운 연산 결과와 이전의 연산 결과에 대한 비교 연산을 수행하는 비교기(1115_1)를 더 포함할 수 있다.
맥스 풀링 연산의 경우, 비교기(1115_1)의 비교 결과에 기초하여, 출력 레지스터(1117)는 새로운 연산 결과 또는 이전의 연산 결과 중 더 큰 결과를 저장할 수 있다. 예를 들어, 출력 레지스터(1117)에 이전의 연산 결과보다 큰 새로운 연산 결과가 업데이트되거나 또는 출력 레지스터(1117)에 새로운 연산 결과보다 큰 이전의 연산 결과가 그대로 유지될 수 있다.
에버리지 풀링 연산의 경우, 가산기(1115)는 이전의 연산 결과와 새로운 연산 결과를 더하고 나누기 연산(예를 들면, 쉬프트 연산)을 수행할 수 있다. 예를 들어, 출력 레지스터(1117)에 나누기 연산의 결과가 업데이트될 수 있다.
본 발명의 실시 예에 따른 PE(1110)는 내부적으로 CNN(100)의 컨볼루션 연산, 액티베이션 연산, 노멀라이제이션 연산, 및 풀링 연산 모두를 수행하거나 처리할 수 있다. 이를 통해, 도 2의 PE 어레이(1100), 피처 맵 메모리(1200), 커널 메모리(1300)간의 데이터 교환 횟수가 최소화될 수 있다. 피처 맵 메모리(1200) 및 커널 메모리(1300)로의 접근 빈도가 낮아지므로, 피처 맵 메모리(1200) 및 커널 메모리(1300)의 면적들과 신경망 가속기(1000)의 전력 소모가 개선될 수 있다.
도 5는 도 4의 PE가 출력 명령에 응답하여 X축 방향으로 연산 결과를 수신하는 방법을 예시적으로 도시하는 순서도이다. 도 5는 도 1 내지 도 4를 참조하여 설명될 것이다.
S110 단계에서, 도 4의 PE(1110)는 X축 방향으로 전송되는 명령을 수신할 수 있다. S120 단계에서, PE(1110)는 수신된 명령이 출력 명령인지 여부를 판별할 수 있다. PE(1110)가 출력 명령을 수신하면, S130 단계가 진행될 수 있다. PE(1110)가 출력 명령을 수신하지 않으면, PE(1110)는 출력 명령이 아닌 다른 명령에 대응하는 연산을 처리할 수 있다.
S130 단계에서, PE(1110)는 유효 플래그 비트(Valid Flag Bit)를 활성화할 수 있다. 예를 들어, PE(1110)는 유효 플래그 비트를 1로 설정할 수 있다. 물론, 활성화된 유효 플래그 비트의 논리 값은 상술한 예시로 한정되지 않는다. 출력 레지스터(1117)는 PE(1110)의 연산 결과에 더해 유효 플래그 비트를 더 저장할 수 있다. 출력 레지스터(1117)에 저장된 유효 플래그 비트는 PE(1110)의 연산 결과와 함께 X축과 반대 방향으로 다른 PE로 전송될 수 있다. PE(1110)의 유효 플래그 비트는, X축과 반대 방향을 따라 PE(1110)의 옆에 위치하는 인접 PE가 PE(1110)의 연산 결과를 자신의 출력 레지스터에 저장할지 여부를 판별하는데 사용될 수 있다. PE(1110)의 유효 플래그 비트는 PE(1110)의 연산 결과가 유효한지 여부를 나타낼 수 있다.
S140 단계에서, PE(1110)는 자신의 위치가 마지막 컬럼에 배치되는지 여부를 판별할 수 있다. 여기서, 마지막 컬럼이란, 도 3의 PE들(1110)이 배치되는 컬럼들 중에서 도 3의 피처 맵 입출력 유닛들(1120)이 배치된 컬럼으로부터 X축 방향으로 가장 멀리 떨어진 컬럼을 나타낼 수 있다. 도 3에서 도시된 것과 달리, 피처 맵 입출력 유닛들(1120)은 X축과 평행한 임의의 로우에 배치될 수도 있다. 이 경우, S140 단계에서, PE(1110)는 자신의 위치가 마지막 로우에 배치되는지 여부를 판별할 수 있다.
예를 들어, PE(1110)는 도 2의 제어기(1400)에 의해 제공되는 주소 정보에 기초하여 자신의 위치를 판별할 수 있다. 혹은, 상술한 주소 정보가 마지막 컬럼에 배치되는 PE들에 사전에 프로그램될 수도 있다. 마지막 컬럼에 배치되는 PE(1110)는 S150 단계를 수행할 수 있다. 마지막 컬럼에 배치되지 않는 PE(1110)는 S160 단계를 수행할 수 있다.
S150 단계에서, PE(1110)는 라스트 플래그 비트(Last Flag Bit)를 활성화할 수 있다. 예를 들어, PE(1110)는 라스트 플래그 비트를 1로 설정할 수 있다. 물론, 활성화된 라스트 플래그 비트의 논리 값은 상술한 예시로 한정되지 않는다. 출력 레지스터(1117)는 PE(1110)의 연산 결과 및 유효 플래그 비트에 더해 라스트 플래그 비트를 더 저장할 수 있다. 출력 레지스터(1117)에 저장된 라스트 플래그 비트는 PE(1110)의 연산 결과 및 유효 플래그 비트와 함께 X축과 반대 방향으로 다른 PE로 전송될 수 있다. 라스트 플래그 비트는 PE(1110)가 X축 방향으로 피처 맵 메모리(1200)로부터 가장 멀리 떨어진 컬럼에 배치되는지 여부를 나타낼 수 있다.
S160 단계에서, PE(1110)는 X축 방향을 따라 PE(1110)의 옆에 위치하는 인접 PE의 출력 레지스터에 저장된 연산 결과, 유효 플래그 비트, 및 라스트 플래그 비트를 자신의 출력 레지스터에 저장할 수 있다. PE(1110)는 X축과 반대 방향으로 인접 PE로부터 전송되는 연산 결과, 유효 플래그 비트, 및 라스트 플래그 비트를 수신할 수 있다.
S170 단계에서, PE(1110)는 수신된 라스트 플래그 비트가 활성화되었는지를 판별할 수 있다. 예를 들어, PE(1110)는 수신된 라스트 플래그 비트의 논리 값이 1인지 여부를 판별할 수 있다. 라스트 플래그 비트가 활성화되지 않았으면, PE(1110)는 S160 단계를 다시 수행할 수 있다. 라스트 플래그 비트가 활성화되면, PE(1110)는 S180 단계를 수행할 수 있다. 즉, PE(1110)는 인접 PE로부터 활성화된 라스트 플래그 비트를 수신할 때까지 X축과 반대 방향으로 전송되는 인접 PE의 출력 레지스터에 저장된 연산 결과, 유효 플래그 비트, 및 라스트 플래그 비트를 반복적으로 수신하고 저장할 수 있다.
S180 단계에서, PE(1110)는 활성화된 라스트 플래그 비트에 기초하여 자신의 유효 플래그 비트 및 라스트 플래그 비트를 모두 비활성화할 수 있다. 예를 들어, PE(1110)는 자신의 유효 플래그 비트 및 라스트 플래그 비트를 모두 0으로 설정할 수 있다. S180 단계를 수행하는 PE(1110)는 더 이상 인접 PE로부터 연산 결과를 수신하지 않을 수 있다. PE(1110)는 다른 출력 명령을 수신할 수 있도록 자신의 유효 플래그 비트 및 라스트 플래그 비트를 비활성화할 수 있다. 즉, PE(1110)는 자신의 유효 플래그 비트 및 라스트 플래그 비트를 리셋(Reset)할 수 있다.
도 6은 X축 방향으로 출력 명령을 수신하는 제 1 PE 및 제 2 PE를 예시적으로 도시한다. 도 6은 도 1 내지 도 5를 참조하여 설명될 것이다. 도 6에서, 제 1 PE 및 제 2 PE는 X축을 따라 배치될 수 있다. 제 1 PE는 X축과 반대 방향을 따라 제 2 PE의 옆에 위치할 수 있고, 반대로 제 2 PE는 X축 방향을 따라 제 1 PE의 옆에 위치할 수 있다. 제 1 및 제 2 PE들은 서로 인접할 수 있다. 제 1 및 제 2 PE들 각각은 도 4의 PE(1110)와 동일하게 구현될 수 있다.
제 1 PE는 출력 레지스터(1117)인 제 1 출력 레지스터를 포함할 수 있고 그리고 제 2 PE는 출력 레지스터(1117)인 제 2 출력 레지스터를 포함할 수 있다. 제 1 출력 레지스터는 제 1 유효 플래그 비트 및 제 1 라스트 플래그 비트를 저장할 수 있다. 제 2 출력 레지스터는 제 2 유효 플래그 비트 및 제 2 라스트 플래그 비트를 저장할 수 있다.
제 1 사이클에서, 제 1 PE는 출력 명령을 수신할 수 있다. 제 1 PE는 출력 명령에 기초하여 제 1 유효 플래그 비트를 활성화할 수 있다(S130 단계 참조).
제 2 사이클에서, X축과 반대 방향을 따라 제 1 PE의 옆에 위치하는 인접 PE 또는 피처 맵 입출력 유닛(1120)은 제 1 유효 플래그 비트 및 제 1 라스트 플래그 비트에 기초하여, 제 1 연산 결과, 제 1 유효 플래그 비트, 및 제 1 라스트 플래그 비트를 포함하는 제 1 PE 데이터를 수신하고 저장할 수 있다(S160 단계 참조). 제 1 PE는 출력 명령을 제 2 PE로 전송할 수 있고 그리고 제 2 PE는 출력 명령을 수신할 수 있다. 제 2 PE는 출력 명령에 기초하여 제 2 유효 플래그 비트 또는 제 2 라스트 플래그 비트를 활성화할 수 있다(S130, S150 단계들 참조).
제 3 사이클에서, 제 1 PE는 제 2 유효 플래그 비트 및 제 2 라스트 플래그 비트에 기초하여, 제 2 연산 결과, 제 2 유효 플래그 비트, 및 제 2 라스트 플래그 비트를 포함하는 제 2 PE 데이터를 수신하고 저장할 수 있다(S160 단계 참조). 제 2 PE는 출력 명령을 X축 방향을 따라 제 2 PE의 옆에 위치하는 인접 PE(예를 들면, 제 3 PE)로 출력 명령을 전송할 수 있다.
실시 예에 있어서, 제 1 PE는 반드시 제 1 사이클에서만 제 1 유효 플래그 비트를 활성화하지 않는다. 예를 들어, 제 1 PE는 제 2 사이클 또는 제 1 사이클과 제 2 사이클 사이에서 제 1 유효 플래그 비트를 활성화할 수도 있다. 유사하게, 제 2 PE도 반드시 제 2 사이클에서만 제 2 유효 플래그 비트 또는 제 2 라스트 플래그 비트를 활성화하지 않는다. 예를 들어, 제 2 PE는 제 3 사이클 또는 제 2 사이클과 제 3 사이클 사이에서 제 2 유효 플래그 비트 또는 제 2 라스트 플래그 비트를 활성화할 수도 있다.
제 4 사이클에서, 제 2 PE는 X축 방향을 따라 제 2 PE의 옆에 위치하는 인접 PE의 제 3 PE 데이터를 수신하고 저장할 수 있다(S160 단계 참조). 제 1 PE의 옆에 위치하는 다른 PE 또는 피처 맵 입출력 유닛(1120)은 제 1 PE로 전송된 제 2 PE 데이터를 수신하고 저장할 수 있다(S160 단계 참조).
도 6을 참조하면, 제 1 PE에서 매 사이클마다 PE 데이터가 출력되지 않는다. 제 1 PE에서 제 2 사이클 및 제 4 사이클에서 제 1 PE 데이터 및 제 2 PE 데이터가 각각 출력될 수 있다. 정리하면, PE 어레이(1100)의 연산 결과는 PE들(1110)이 배치되는 컬럼들의 개수의 두 배만큼의 사이클들 동안에 피처 맵 메모리(1200)로 전송될 수 있다.
도 7은 도 4의 PE가 로드 부분 합 명령 또는 패스 부분 합 명령에 응답하여 X축과 반대 방향으로 부분 합을 전송하는 방법을 예시적으로 도시하는 순서도이다. 도 7은 도 1 내지 도 4를 참조하여 설명될 것이다. PE(1110)가 로드 부분 합(Load Partial Sum) 명령 또는 패스 부분 합(Pass Partial Sum) 명령에 응답하여 부분 합을 전송하는 방향과 PE(1110)가 출력 명령에 응답하여 연산 결과를 전송하는 방향은 서로 반대이다.
S210 단계에서, 도 4의 PE(1110)는 X축 방향으로 전송되는 명령을 수신할 수 있다. S220 단계에서, PE(1110)는 수신된 명령이 로드 부분 합 명령인지 여부를 판별할 수 있다. PE(1110)가 로드 부분 합 명령을 수신하면 S230 단계가 진행될 수 있다. PE(1110)가 로드 부분 합 명령을 수신하지 않으면, S250 단계가 진행될 수 있다.
S230 단계에서, PE(1110)는 로드 부분 합 명령에 응답하여, X축 방향으로 로드 부분 합 명령과 함께 전송되는 부분 합을 저장할 수 있다. 여기서, PE(1110)의 피처 맵 레지스터(1112)가 아닌 누적 레지스터(1116)가 수신된 부분 합을 저장할 수 있다. 피처 맵 레지스터(1112)는 피처 맵 데이터를 저장할 수 있고 누적 레지스터(1116)는 새로운 피처 맵 데이터를 생성하기 위한 중간 연산 결과인 부분 합을 저장할 수 있다.
S240 단계에서, PE(1110)는 S210 단계에서 명령을 수신한 이후 다음 사이클에서 X축 방향으로 전송되는 패스 부분 합 명령을 수신할 수 있다. PE(1110)는 패스 부분 합 명령에 응답하여 패스 부분 합 명령과 함께 전송되는 부분 합을 임시로 저장할 수 있다. 패스 부분 합 명령과 함께 전송되는 부분 합은 X축 방향을 따라 위치하는 다른 PE들 중 어느 하나를 위한 것이다. PE(1110)의 제어 레지스터(1111)는 패스 부분 합 명령을 수신한 이후 다음 사이클에서 패스 부분 합 명령 대신에 로드 부분 합 명령과 임시로 저장된 부분 합을 X축 방향으로 인접 PE로 전송할 수 있다.
S250 단계에서, PE(1110)는 S210 단계에서 수신된 명령이 패스 부분 합 명령인지 여부를 판별할 수 있다. PE(1110)가 패스 부분 합 명령을 수신하면 S260 단계가 진행될 수 있다. 여기서, S250 단계에서 PE(1110)로 패스 부분 합 명령이 전송되는 시점(즉, 사이클)과 S240 단계에서 PE(1110)로 패스 부분 합 명령이 전송되는 시점은 상이하다. 예를 들어, PE(1110)는 S240 단계에서 로드 부분 합 명령 이후에 다음 사이클에서 패스 부분 합 명령을 수신할 수 있다. PE(1110)는 S240 단계에서 패스 부분 합 명령을 수신한 이후 다음 사이클에서(즉, S250 단계에서) 패스 부분 합 명령을 더 수신할 수 있다. PE(1110)가 패스 부분 합 명령을 수신하지 않으면, PE(1110)는 패스 부분 합 명령이 아닌 다른 명령에 대응하는 연산을 처리할 수 있다.
S260 단계에서, PE(1110)는 패스 부분 합 명령과 부분 합을 X축 방향으로 인접 PE로 전송할 수 있다. 전술한대로, 패스 부분 합 명령과 함께 전송되는 부분 합은 PE(1110)를 위한 것이 아닌 X축 방향을 따라 위치하는 다른 PE들 중 어느 하나를 위한 것이다. S240 단계에서 제어 레지스터(1111)는 로드 부분 합 명령과 부분 합을 인접 PE로 전송할 수 있으나 S260 단계에서 제어 레지스터(1111)는 패스 부분 합 명령과 부분 합을 인접 PE로 전송할 수 있다.
도 8은 X축과 반대 방향으로 로드 부분 합 명령 및 패스 부분 합 명령을 수신하는 제 1 내지 제 3 PE들을 예시적으로 도시한다. 도 8은 도 1 내지 도 4 및 도 7을 참조하여 설명될 것이다. 도 8에서, 제 1 내지 제 3 PE들은 X축을 따라 배치될 수 있다. X축과 반대 방향을 따라, 제 1 PE는 제 2 PE의 옆에 위치할 수 있고 제 2 PE는 제 3 PE의 옆에 위치할 수 있다. X축 방향을 따라, 제 2 PE는 제 1 PE의 옆에 위치할 수 있고 제 3 PE는 제 2 PE의 옆에 위치할 수 있다. 제 1 및 제 2 PE들은 서로 인접할 수 있고 제 2 및 제 3 PE들은 서로 인접할 수 있다. 제 1 내지 제 3 PE들 각각은 도 4의 PE(1110)와 동일하게 구현될 수 있다.
제 1 사이클에서, 제 1 PE는 X축 방향으로 전송되는 제 1 로드 부분 합 명령(LC1)과 제 1 부분 합(PS1)을 수신할 수 있다. 제 1 PE는 제 1 부분 합(PS1)을 자신의 누적 레지스터(1116)에 저장할 수 있다(S230 단계 참조).
제 2 사이클에서, 제 1 PE는 X축 방향으로 전송되는 제 2 패스 부분 합 명령(PC2)과 제 2 부분 합(PS2)을 수신할 수 있다. 제 2 부분 합(PS2)은 제 1 PE가 아닌 제 2 PE를 위한 것이다. 제 1 PE는 제 2 부분 합(PS2)이 제 2 PE로 전송되도록, 제 2 부분 합(PS2)을 임시로 저장할 수 있다.
제 3 사이클에서, 제 1 PE는 제 2 사이클에서 수신된 제 2 패스 부분 합 명령(PC2) 대신에 X축 방향으로 제 2 로드 부분 합 명령(LC2)과 제 2 부분 합(PS2)을 제 2 PE로 전송할 수 있다(S240 단계 참조). 제 2 PE는 수신된 제 2 부분 합(PS2)을 저장할 수 있다(S230 단계 참조). 또한, 제 1 PE는 X축 방향으로 제 3 패스 부분 합 명령(PC3)과 제 3 부분 합(PS3)을 수신할 수 있다. 제 3 부분 합(PS3)은 제 1 및 제 2 PE들이 아닌 제 3 PE를 위한 것이다. 제 1 PE는 제 3 부분 합(PS3)이 제 3 PE로 전송되도록, 제 3 부분 합(PS3)을 임시로 저장할 수 있다(S260 단계 참조).
제 4 사이클에서, 제 2 PE는 X축 방향으로 제 1 PE로부터 전송되는 제 3 패스 부분 합 명령(PC3)과 제 3 부분 합(PS3)을 수신할 수 있다. 유사하게, 제 2 PE는 제 3 부분 합(PS3)이 제 3 PE로 전송되도록, 제 3 부분 합(PS3)을 임시로 저장할 수 있다.
제 5 사이클에서, 제 2 PE는 제 4 사이클에서 수신된 제 3 패스 부분 합 명령(PC3) 대신에 X축 방향으로 제 3 로드 부분 합 명령(LC3)과 제 3 부분 합(PS3)을 제 3 PE로 전송할 수 있다(S240 단계 참조). 제 3 PE는 수신된 제 3 부분 합(PS3)을 저장할 수 있다(S230 단계 참조).
도 8을 참조하면, 매 사이클마다 제 1 내지 제 3 PE들로 로드 부분 합 명령들이 전송되지 않는다. 제 1 PE는 제 1 사이클에서 제 1 로드 부분 합 명령(LC1)을 수신할 수 있고, 제 2 PE는 제 3 사이클에서 제 2 로드 부분 합 명령(LC2)을 수신할 수 있고, 그리고 제 3 PE는 제 5 사이클에서 제 3 로드 부분 합 명령(LC3)을 수신할 수 있다. 정리하면, 피처 맵 메모리(1200)에 저장된 부분 합은 PE들(1110)이 배치되는 컬럼들의 개수의 두 배만큼의 사이클들 동안에 PE 어레이(1100)로 전송될 수 있다.
도 9는 본 발명의 다른 실시 예에 따른 도 2의 PE 어레이를 예시적으로 보여주는 블록도이다. 도 9는 도 1 내지 도 8을 참조하여 설명될 것이다. PE 어레이(2100)는 PE들(2110), 피처 맵 입출력 유닛들(2120), 커널 로드 유닛들(2130), 액티베이션 유닛들(2140), 및 멀티플렉싱 유닛들(2150)을 포함할 수 있다. PE들(2110), 피처 맵 입출력 유닛들(2120), 및 커널 로드 유닛들(2130)은 도 3의 PE들(1110), 피처 맵 입출력 유닛들(1120), 커널 로드 유닛들(1130)과 실질적으로 동일하게 구현될 수 있다.
액티베이션 유닛들(2140)은 피처 맵 입출력 유닛들(2120)과 PE들(2110) 사이에 Y축을 따라 배치될 수 있다. 액티베이션 유닛들(2140)은 도 5의 순서도에 따른 단계들에 기초하여, PE들(2110)로부터 연산 결과를 수신할 수 있다. 액티베이션 유닛들(2140)은 PE들(2110) 각각이 이용하는 ReLU 함수 또는 Leaky ReLU 함수뿐만 아니라 Sigmoid 함수 또는 tanh(Hyperbolic Tangent) 함수를 이용하여 액티베이션 연산을 수행할 수 있다. 액티베이션 유닛들(2140)은 액티베이션 연산의 결과를 멀티플렉싱 유닛들(2150)로 전송할 수 있다.
멀티플렉싱 유닛들(2150)은 액티베이션 유닛들(2140)과 피처 맵 입출력 유닛들(2120) 사이에 Y축을 따라 배치될 수 있다. 멀티플렉싱 유닛들(2150)은 CNN(100)에 의해 수행되는 연산에 따른 도 2의 제어기(1400)의 제어에 기초하여 PE들(2110)로부터의 연산 결과 또는 액티베이션 유닛들(2140)의 연산 결과 중 어느 하나를 선택할 수 있다. 선택된 연산 결과는 피처 맵 입출력 유닛들(2120)로 전송될 수 있다.
위에서 설명한 내용은 본 발명을 실시하기 위한 구체적인 예들이다. 본 발명에는 위에서 설명한 실시 예들뿐만 아니라, 단순하게 설계 변경하거나 용이하게 변경할 수 있는 실시 예들도 포함될 것이다. 또한, 본 발명에는 상술한 실시 예들을 이용하여 앞으로 용이하게 변형하여 실시할 수 있는 기술들도 포함될 것이다.
1000: 신경망 가속기;
1100: PE 어레이;
1200: 피처 맵 메모리;
1300: 커널 메모리;
1400: 제어기;

Claims (20)

  1. 레이어들(Layers)을 포함하는 신경망(Neural Network)의 연산을 수행하기 위한 신경망 가속기에 있어서:
    필터와 관련된 커널(Kernel) 데이터를 저장하는 커널 메모리;
    상기 레이어들의 출력들인 피처 맵(Feature Map) 데이터를 저장하는 피처 맵 메모리; 및
    제 1 방향 및 제 2 방향을 따라 배치되는 프로세싱 엘리먼트(Processing Element; PE)들을 포함하는 PE 어레이를 포함하되,
    상기 PE들 각각은, 상기 피처 맵 메모리로부터 제 1 방향으로 전송되는 상기 피처 맵 데이터와 상기 커널 메모리로부터 제 2 방향으로 전송되는 상기 커널 데이터를 이용하여 연산을 수행하고 그리고 상기 제 1 방향과 반대인 제 3 방향으로 연산 결과를 상기 피처 맵 메모리로 전송하고,
    상기 PE들 각각은:
    상기 제 1 방향으로 전송되는 명령을 저장하는 제어 레지스터;
    상기 커널 데이터를 저장하는 커널 레지스터;
    상기 피처 맵 데이터를 저장하는 피처 맵 레지스터;
    상기 커널 레지스터 및 상기 피처 맵 레지스터에 저장된 데이터에 대한 곱셈 연산을 수행하는 곱셈기;
    상기 곱셈기의 곱셈 결과 및 이전의 연산 결과에 대한 가산 연산을 수행하는 가산기;
    상기 이전의 연산 결과 또는 상기 가산기의 가산 결과를 누적하는 누적 레지스터; 및
    상기 가산 결과 또는 다른 PE로부터 상기 제 3 방향으로 전송되는 연산 결과를 저장하는 출력 레지스터를 포함하되,
    상기 출력 레지스터는 상기 제어 레지스터로 전송되는 상기 출력 명령에 기초하여, 상기 연산 결과가 유효한지 여부를 나타내는 유효 플래그 비트(Valid Flag Bit)와 PE가 상기 제 1 방향을 기준으로 상기 피처 맵 메모리로부터 가장 멀리 떨어진 컬럼에 배치되는지 여부를 나타내는 라스트 플래그 비트(Last Flag Bit)를 더 저장하고,
    상기 PE들은 제 1 PE 및 상기 제 1 방향으로 상기 제 1 PE의 옆에 위치하는 제 2 PE를 포함하고, 그리고
    상기 제 1 PE는 상기 제 2 PE의 유효 플래그 비트 및 라스트 플래그 비트에 기초하여, 상기 제 3 방향으로 상기 제 2 PE의 연산 결과, 상기 유효 플래그 비트, 및 상기 라스트 플래그 비트를 수신하는 신경망 가속기.
  2. 제 1 항에 있어서,
    상기 연산은 곱셈 연산, 가산 연산, 액티베이션(Activation) 연산, 노멀라이제이션(Normalization) 연산, 및 풀링(Pooling) 연산을 포함하는 신경망 가속기.
  3. 제 2 항에 있어서,
    상기 PE 어레이는:
    상기 제 2 방향으로 상기 커널 데이터를 상기 PE들로 전송하는 커널 로드 유닛들; 및
    상기 제 1 방향으로 상기 피처 맵 데이터를 상기 PE들로 전송하고, 상기 제 3 방향으로 전송되는 상기 연산 결과를 수신하고, 그리고 상기 연산 결과를 상기 피처 맵 메모리로 전송하는 피처 맵 입출력 유닛들을 더 포함하는 신경망 가속기.
  4. 삭제
  5. 제 2 항에 있어서,
    상기 PE들 각각은 ReLU(Rectified Linear Unit) 함수 또는 Leaky ReLU 함수를 이용하여 상기 액티베이션 연산을 수행하는 신경망 가속기.
  6. 제 1 항에 있어서,
    상기 가산기는 상기 출력 레지스터에 저장된 상기 연산 결과와 상기 누적 레지스터에 저장된 누적 결과를 비교하고 그리고 비교 결과에 기초하여, 상기 출력 레지스터에 저장된 상기 연산 결과를 업데이트하는 신경망 가속기.
  7. 제 3 항에 있어서,
    상기 피처 맵 입출력 유닛은 출력 명령에 기초하여, 상기 PE들로부터 새로운 피처 맵 데이터 또는 상기 새로운 피처 맵 데이터를 생성하기 위한 부분 합을 더 수신하고 그리고 상기 새로운 피처 맵 데이터 또는 상기 부분 합을 상기 피처 맵 메모리로 더 전송하는 신경망 가속기.
  8. 삭제
  9. 삭제
  10. 제 1 항에 있어서,
    상기 제 1 PE는 상기 제 2 PE의 상기 라스트 플래그 비트가 활성화될 때까지 상기 제 3 방향으로 상기 제 2 PE의 연산 결과, 상기 유효 플래그 비트, 및 상기 라스트 플래그 비트를 반복적으로 수신하는 신경망 가속기.
  11. 제 7 항에 있어서,
    상기 피처 맵 입출력 유닛은 로드 부분 합(Load Partial Sum) 명령 및 패스 부분 합(Pass Partial Sum) 명령에 기초하여, 상기 제 1 방향으로 상기 피처 맵 메모리로부터 상기 부분 합을 더 수신하고 상기 부분 합을 상기 PE들로 더 전송하는 신경망 가속기.
  12. 제 11 항에 있어서,
    상기 PE들 각각의 상기 누적 레지스터는 상기 제어 레지스터로 전송되는 상기 로드 부분 합 명령에 응답하여, 상기 제 1 방향으로 전송되는 상기 부분 합을 저장하는 신경망 가속기.
  13. 제 12 항에 있어서,
    상기 PE들은 제 1 PE 및 상기 제 1 방향으로 상기 제 1 PE의 옆에 위치하는 제 2 PE를 포함하고, 그리고
    상기 제 1 PE는 상기 로드 부분 합 명령을 수신한 다음 상기 패스 부분 합 명령을 수신하면, 상기 수신된 패스 부분 합 명령 대신에 상기 로드 부분 합 명령을 상기 제 2 PE로 전송하는 신경망 가속기.
  14. 제 13 항에 있어서,
    상기 제 1 PE는 상기 제 1 방향으로 상기 수신된 패스 부분 합 명령과 함께 전송되는 부분 합을 상기 제 2 PE로 전송하는 신경망 가속기.
  15. 레이어들(Layers)을 포함하는 신경망(Neural Network)의 연산을 수행하기 위한 신경망 가속기에 있어서:
    필터와 관련된 커널(Kernel) 데이터를 저장하는 커널 메모리;
    상기 레이어들의 출력들인 피처 맵(Feature Map) 데이터를 저장하는 피처 맵 메모리; 및
    제 1 방향 및 제 2 방향을 따라 배치되는 프로세싱 엘리먼트(Processing Element; PE)들 그리고 상기 제 2 방향으로 상기 PE들과 상기 피처 맵 메모리 사이에 배치되는 액티베이션(Activation) 유닛들을 포함하는 PE 어레이를 포함하되,
    상기 PE들 각각은, 상기 피처 맵 메모리로부터 제 1 방향으로 전송되는 상기 피처 맵 데이터와 상기 커널 메모리로부터 제 2 방향으로 전송되는 상기 커널 데이터를 이용하여 제 1 연산을 수행하고 그리고 상기 제 1 방향과 반대인 제 3 방향으로 제 1 연산 결과를 상기 액티베이션 유닛들로 전송하고,
    상기 액티베이션 유닛들은 상기 제 1 연산 결과에 대한 제 2 연산을 수행하고 그리고 제 2 연산 결과를 상기 피처 맵 메모리로 전송하고, 그리고
    상기 제 1 연산은 곱셈 연산 및 가산 연산을 포함하되,
    상기 PE들 각각은:
    상기 제 1 방향으로 전송되는 명령을 저장하는 제어 레지스터;
    상기 커널 데이터를 저장하는 커널 레지스터;
    상기 피처 맵 데이터를 저장하는 피처 맵 레지스터;
    상기 커널 레지스터 및 상기 피처 맵 레지스터에 저장된 데이터에 대한 상기 곱셈 연산을 수행하는 곱셈기;
    상기 곱셈기의 곱셈 결과 및 이전의 연산 결과에 대한 상기 가산 연산을 수행하는 가산기;
    상기 이전의 연산 결과 또는 상기 가산기의 가산 결과를 누적하는 누적 레지스터; 및
    상기 가산 결과 또는 다른 PE로부터 상기 제 3 방향으로 전송되는 연산 결과를 저장하는 출력 레지스터를 포함하되,
    상기 출력 레지스터는 상기 제어 레지스터로 전송되는 출력 명령에 기초하여, 상기 연산 결과가 유효한지 여부를 나타내는 유효 플래그 비트(Valid Flag Bit)와 PE가 상기 제 1 방향을 기준으로 상기 피처 맵 메모리로부터 가장 멀리 떨어진 컬럼에 배치되는지 여부를 나타내는 라스트 플래그 비트(Last Flag Bit)를 더 저장하고,
    상기 PE들은 제 1 PE 및 상기 제 1 방향으로 상기 제 1 PE의 옆에 위치하는 제 2 PE를 포함하고, 그리고
    상기 제 1 PE는 상기 제 2 PE의 유효 플래그 비트 및 라스트 플래그 비트에 기초하여, 상기 제 3 방향으로 상기 제 2 PE의 연산 결과, 상기 유효 플래그 비트, 및 상기 라스트 플래그 비트를 수신하는 신경망 가속기.
  16. 삭제
  17. 제 15 항에 있어서,
    상기 제 2 연산은 ReLU(Rectified Linear Unit) 함수, Leaky ReLU 함수, Sigmoid 함수, 또는 tanh(Hyperbolic Tangent) 함수를 이용하는 액티베이션 연산, 노멀라이제이션(Normalization) 연산, 및 풀링(Pooling) 연산을 포함하는 신경망 가속기.
  18. 제 17 항에 있어서,
    상기 PE 어레이는:
    상기 제 2 방향으로 상기 커널 데이터를 상기 PE들로 전송하는 커널 로드 유닛들;
    상기 제 1 방향으로 상기 피처 맵 데이터를 상기 PE들로 전송하고, 상기 제 3 방향으로 전송되는 상기 제 1 연산 결과 또는 상기 제 2 연산 결과를 수신하고, 그리고 상기 수신된 연산 결과를 상기 피처 맵 메모리로 전송하는 피처 맵 입출력 유닛들; 및
    상기 제 1 연산 결과 및 상기 제 2 연산 결과 중 어느 하나를 선택하는 멀티플렉싱 유닛들을 포함하는 신경망 가속기.
  19. 제 18 항에 있어서,
    상기 PE들 각각이 상기 ReLU 함수 또는 상기 Leaky ReLU 함수를 이용하여 상기 액티베이션 연산을 수행하면, 상기 멀티플렉싱 유닛들은 상기 제 1 연산 결과를 선택하고 그리고 상기 수신된 연산 결과는 상기 제 1 연산 결과인 신경망 가속기.
  20. 제 18 항에 있어서,
    상기 PE들 각각이 상기 액티베이션 연산을 수행하지 않으면, 상기 멀티플렉싱 유닛들은 상기 제 2 연산 결과를 선택하고 그리고 상기 수신된 연산 결과는 상기 제 2 연산 결과인 신경망 가속기.
KR1020180042395A 2017-09-14 2018-04-11 양방향 프로세싱 엘리먼트 어레이를 포함하는 신경망 가속기 KR102490862B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
US16/038,243 US11507429B2 (en) 2017-09-14 2018-07-18 Neural network accelerator including bidirectional processing element array

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
KR20170118068 2017-09-14
KR1020170118068 2017-09-14

Publications (2)

Publication Number Publication Date
KR20190030564A KR20190030564A (ko) 2019-03-22
KR102490862B1 true KR102490862B1 (ko) 2023-01-26

Family

ID=65949292

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020180042395A KR102490862B1 (ko) 2017-09-14 2018-04-11 양방향 프로세싱 엘리먼트 어레이를 포함하는 신경망 가속기

Country Status (1)

Country Link
KR (1) KR102490862B1 (ko)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102227431B1 (ko) * 2019-07-18 2021-03-15 에스케이텔레콤 주식회사 시스톨릭 어레이
US11853759B2 (en) 2020-11-02 2023-12-26 Electronics And Telecommunications Research Institute Neural network accelerator with type conversion units and operating method thereof
KR102594484B1 (ko) * 2021-01-12 2023-10-27 성균관대학교산학협력단 시스톨릭 어레이를 이용하여 깊이별 합성곱 연산을 수행하는 방법 및 디바이스
KR102651560B1 (ko) * 2021-12-01 2024-03-26 주식회사 딥엑스 프로그램된 활성화 함수 실행 유닛을 포함하는 신경 프로세싱 유닛

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102325602B1 (ko) * 2015-07-06 2021-11-12 삼성전자주식회사 데이터를 병렬적으로 처리하는 장치 및 방법

Non-Patent Citations (5)

* Cited by examiner, † Cited by third party
Title
Chen, Yu-Hsin, et al. Eyeriss: An energy-efficient reconfigurable accelerator for deep convolutional neural networks. IEEE journal of solid-state circuits 52.1. 2016.
Du, Li, et al. A Reconfigurable Streaming Deep Convolutional Neural Network Accelerator for Internet of Things. arXiv preprint arXiv:1707.02973. 2017.7.
Ma, Yufei, et al. An automatic RTL compiler for high-throughput FPGA implementation of diverse deep convolutional neural networks. 2017 27th International Conference on FPL. IEEE. 2017.9.8.*
Qiu, Jiantao, et al. Going deeper with embedded fpga platform for convolutional neural network. Proceedings of the 2016 ACM/SIGDA international symposium on field-programmable gate arrays. 2016.
Sim, Jaehyeong, et al. 14.6 a 1.42 tops/w deep convolutional neural network recognition processor for intelligent ioe systems. 2016 IEEE International Solid-State Circuits Conference(ISSCC).IEEE 2016.

Also Published As

Publication number Publication date
KR20190030564A (ko) 2019-03-22

Similar Documents

Publication Publication Date Title
US11507429B2 (en) Neural network accelerator including bidirectional processing element array
KR102490862B1 (ko) 양방향 프로세싱 엘리먼트 어레이를 포함하는 신경망 가속기
US11449576B2 (en) Convolution operation processing method and related product
US10394929B2 (en) Adaptive execution engine for convolution computing systems
US11775836B2 (en) Hand pose estimation
US11003985B2 (en) Convolutional neural network system and operation method thereof
US11120330B2 (en) Accelerator in convolutional neural network and method for operating the same
US10311342B1 (en) System and methods for efficiently implementing a convolutional neural network incorporating binarized filter and convolution operation for performing image classification
WO2020073211A1 (zh) 运算加速器、处理方法及相关设备
CN108416327B (zh) 一种目标检测方法、装置、计算机设备及可读存储介质
CN108665063B (zh) 用于bnn硬件加速器的双向并行处理卷积加速系统
US11315344B2 (en) Reconfigurable 3D convolution engine
US11741350B2 (en) Efficient utilization of processing element array
CN110766127B (zh) 神经网络计算专用电路及其相关计算平台与实现方法
JP2018116469A (ja) 演算システムおよびニューラルネットワークの演算方法
CN111210019B (zh) 一种基于软硬件协同加速的神经网络推断方法
WO2023179482A1 (zh) 一种图像处理方法、神经网络的训练方法以及相关设备
CN111133457B (zh) 电子设备及其控制方法
WO2018158293A1 (en) Allocation of computational units in object classification
CN110782430A (zh) 一种小目标的检测方法、装置、电子设备及存储介质
KR102586173B1 (ko) 프로세서 및 그 제어 방법
Wang et al. Fire detection in video surveillance using superpixel-based region proposal and ESE-ShuffleNet
JP2022137247A (ja) 複数の入力データセットのための処理
CN112306951A (zh) 一种基于fpga的cnn-svm资源高效型加速架构
CN111563580B (zh) 一种卷积神经网络实现装置及方法

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant