KR20170007151A - 인공 신경 네트워크를 실행하는 방법 및 장치 - Google Patents

인공 신경 네트워크를 실행하는 방법 및 장치 Download PDF

Info

Publication number
KR20170007151A
KR20170007151A KR1020160085593A KR20160085593A KR20170007151A KR 20170007151 A KR20170007151 A KR 20170007151A KR 1020160085593 A KR1020160085593 A KR 1020160085593A KR 20160085593 A KR20160085593 A KR 20160085593A KR 20170007151 A KR20170007151 A KR 20170007151A
Authority
KR
South Korea
Prior art keywords
macro
data set
data
mode
neural network
Prior art date
Application number
KR1020160085593A
Other languages
English (en)
Inventor
존 더블유. 브라더스
이주훈
Original Assignee
삼성전자주식회사
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 삼성전자주식회사 filed Critical 삼성전자주식회사
Publication of KR20170007151A publication Critical patent/KR20170007151A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/049Temporal neural networks, e.g. delay elements, oscillating neurons or pulsed inputs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/15Correlation function computation including computation of convolution operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • 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

Landscapes

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

Abstract

신경 네트워크를 구현하는 것은, 신경 네트워크 프로세서의 제어부가 신경 네트워크를 구현하기 위한 매크로 명령을 수신하는 것을 포함한다. 매크로 명령은 제 1 데이터 세트, 제 2 데이터 세트, 신경 네트워크에 대한 매크로 동작 및 매크로 동작을 수행하기 위한 동작의 모드를 나타낼 수 있다. 매크로 동작은, 동작의 모드에 기초하여, 제 1 데이터 세트에 제 2 데이터 세트를 적용함으로써, 신경 네트워크 프로세서의 처리부를 이용하여 자동으로 착수될 수 있다.

Description

인공 신경 네트워크를 실행하는 방법 및 장치{METHOD AND APPARATUS FOR EXECUTING ARTIFICIAL NEURAL NETWORKS}
본 개시는 인공 신경 네트워크 및 더 구체적으로는 인공 신경 네트워크를 실행하는 방법 및 인공 신경 네트워크를 실행하기 위한 신경 네트워크 프로세서에 관한 것이다.
신경 네트워크(neural networks)는 생물학적 두뇌를 모델로 하는 연산 아키텍처를 의미한다. 뉴런으로 언급되는, 신경 네트워크 내의 노드들은 상호 연결될 수 있고, 입력 데이터를 처리하기 위해 단체로 동작할 수 있다. 신경 네트워크의 다른 유형의 예는, CNNs(Convolutional Neural Networks), RNNs(Recurrent Neural Networks), DBNs(Deep Belief Networks), RBM(Restricted Boltzman Machine)을 포함할 수 있으나, 이에 제한되지 않는다. 피드-포워드 신경 네트워크(feed-forward neural network)에서, 신경 네트워크의 뉴런들은 다른 뉴런들에 대한 링크들을 갖는다. 링크들은 신경 네트워크를 통해서, 전진 방향과 같이 오직 한 방향으로만 확장한다.
신경 네트워크는 복잡한 입력 데이터로부터 "특징들(features)"을 추출하는 데 사용될 수 있다. 신경 네트워크는 복수의 층들을 포함할 수 있다. 각 층은 입력 데이터를 수신하고, 층에서 입력 데이터를 처리함으로써 출력 데이터를 생성할 수 있다. 출력 데이터는, 입력 이미지 또는 특징 맵(feature map)을 컨볼루션 커널들(convolution kernels)과 함께 컨벌브(convolve)함으로써, 신경 네트워크가 생성하는 입력 데이터의 특징 맵일 수 있다. 신경 네트워크의 초기 층들은 이미지와 같은 입력으로부터, 모서리(edge) 및/또는 변화도(gradient)와 같은 낮은 레벨 특징들을 추출하도록 동작할 수 있다. 또한, 신경 네트워크의 초기 층들은 특징 추출 층(feature extraction layers)으로 언급될 수 있다. 특징 분류 층(feature classification layers)으로 언급되는 신경 네트워크의 차후 층들은 눈, 코와 같이 점점 더 복잡한 특징들을 추출하거나 감지할 수 있다. 또한 특징 분류 층은 "완전히 연결된 층(fully-connected layers)"으로 언급될 수 있다.
인공 신경 네트워크를 실행하기 위한 신경 네트워크 프로세서를 제공하는 데 있다. 본 실시예가 이루고자 하는 기술적 과제는 상기된 바와 같은 기술적 과제들로 한정되지 않으며, 이하의 실시예들로부터 또 다른 기술적 과제들이 유추될 수 있다.
하나 이상의 실시예들은 방법을 포함한다. 방법은, 신경 네트워크 프로세서의 제어부가 신경 네트워크를 구현하기 위한 매크로 명령을 수신하는 것을 포함한다. 매크로 명령은 제 1 데이터 세트, 제 2 데이터 세트, 신경 네트워크에 대한 매크로 동작 및 매크로 동작을 수행하기 위한 동작의 모드를 나타낼 수 있다. 또한, 방법은 동작의 모드에 기초하여, 제 1 데이터 세트에 제 2 데이터 세트를 적용함으로써, 신경 네트워크 프로세서의 처리부를 이용하여 자동으로 착수하는 것을 포함한다.
하나 이상의 실시예들은 장치를 포함한다. 장치는, 매크로 명령을 수신하는 제어부를 포함한다. 매크로 명령은 제 1 데이터 세트, 제 2 데이터 세트, 신경 네트워크에 대한 매크로 동작 및 매크로 동작을 수행하기 위한 동작의 모드를 나타낼 수 있다. 장치는 제어부와 연결된 메모리부를 포함한다. 메모리부는 데이터 세트들을 저장한다. 또한, 장치는 메모리부와 연결된 처리부를 포함한다. 처리부는 동작의 모드에 기초하여, 제 1 데이터 세트에 제 2 데이터 세트를 적용함으로써, 매크로 동작을 자동으로 착수한다.
하나 이상의 실시예들은 프로그램 코드를 갖는 컴퓨터 판독 가능 매체를 포함하는 컴퓨터 프로그램 제품을 포함한다. 프로그램 코드는 프로세서에 의해, 신경 네트워크를 구현을 위한 매크로 명령을 수신하기 위해, 실행될 수 있다. 매크로 명령은 제 1 데이터 세트, 제 2 데이터 세트, 신경 네트워크에 대한 매크로 동작 및 매크로 동작을 수행하기 위한 동작의 모드를 나타낼 수 있다. 또한, 프로그램 코드는 프로세서에 의해, 동작의 모드에 기초하여 제 1 데이터 세트에 제 2 데이터 세트를 적용함으로써, 매크로 동작을 자동으로 착수하기 위해 실행될 수 있다.
또한, 일 측면에 따르면, 상기 방법을 컴퓨터에서 실행시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 비일시적(non-transitory) 기록매체를 제공한다.
상기된 바에 따르면, 신경 네트워크 프로세서는 매크로 명령을 수신하여, 자동으로 매크로 동작을 착수하는 효과를 얻을 수 있다.
도 1은 신경 네트워크 프로세서의 일 실시예를 설명하기 위한 블록도이다.
도 2는 신경 네트워크 프로세서의 제어부의 일 실시예를 설명하기 위한 블록도이다.
도 3은 신경 네트워크 프로세서의 동작 방법의 일 실시예을 도시한 흐름도이다.
도 4a 내지 도 4b는 신경 네트워크 프로세서의 처리부의 일 실시예를 전체적으로 설명하기 위한 도면이다.
도 5는 신경 네트워크 프로세서의 처리부의 다른 일 실시예를 설명하기 위한 도면이다.
도 6은 LSTM(Long Short Term Memory) 셀을 처리하는 일 실시예를 설명하기 위한 기능도(functional diagram)이다.
도 7은 신경 네트워크 프로세서의 행렬 곱셈부의 일 실시예를 설명하기 위한 블럭도이다.
도 8은 행렬 곱셈부와 함께 사용하기 위한 로그 가산기의 일 실시예를 설명하기 위한 블럭도이다.
도 9는 신경 네트워크 프로세서의 행렬 곱셈부의 또 다른 실시예를 설명하기 위한 블럭도이다.
도 10은 행렬 곱셈부를 위한 실행 테이블의 일 실시예를 설명하기 위한 도면이다.
도 11은 일 실시예에 따라 행렬 곱셈부의 동작을 설명하기 위한 도면이다.
아래에서는 첨부한 도면을 참조하여 본 개시가 속하는 기술 분야에서 통상의 지식을 가진 자가 용이하게 실시할 수 있도록 본 개시의 실시예를 상세히 설명한다. 그러나 본 개시는 여러 가지 상이한 형태로 구현될 수 있으며 여기에서 설명하는 실시예에 한정되지 않는다. 본 개시에서 사용되는 용어는, 본 개시에서 언급되는 기능을 고려하여 현재 사용되는 일반적인 용어로 기재되었으나, 이는 당 분야에 종사하는 기술자의 의도 또는 판례, 새로운 기술의 출현 등에 따라 다양한 다른 용어를 의미할 수 있다. 따라서 본 개시에서 사용되는 용어는 용어의 명칭만으로 해석되어서는 안되며, 용어가 가지는 의미와 본 개시의 전반에 걸친 내용을 토대로 해석되어야 한다.
본 개시는 수치 계산 방법 및 장치들 중에서 신경 네트워크 (Neural Networks)에 관한 것이다. 본 개시의 예시적인 실시예들은 신경 네트워크를 실행 및/또는 구현할 수 있는, 신경 네트워크 프로세서(이하에서는 "NN 프로세서"로 언급한다.)에 관한 것이다. 본 개시의 일 실시예에 따라, 컴퓨터 기반 유틸리티(computer-based utility)는 명령들의 서열을 생성하기 위한 신경 네트워크의 프로그램 명세(programmatic description)와 같은, 명세(description)를 처리할 수 있다. 생성된 명령들은 실행을 위해 NN 프로세서에 제공될 수 있다. NN 프로세서는 명령들을 실행할 때, 신경 네트워크를 구현하거나 실행한다. 예를 들어, NN 프로세서는 명령들을 분석하고, 신경 네트워크를 실행하기 위해 NN 프로세서 내에 포함된 하나 이상의 처리부들의 동작을 제어할 수 있다. 예시적인 실시예들은 신경 네트워크 처리와 관련하여 설명되어 있지만, 신경 네트워크는 단지 설명을 위해 사용되며, 본 개시는 벡터 또는 행렬 처리와 같은 임의의 어플리케이션에 적용될 수 있음은 이해될 것이다.
하나 이상의 실시예들에서, 명령들은 매크로 명령들로 구현된다. 매크로 명령은, NN 프로세서에 의해 실행될 때, NN 프로세서내에 있는 하나 이상의 처리부들이 매크로 동작을 수행하는 것을 야기한다. 예를 들어, 매크로 동작은 다수의 클럭 주기에 걸쳐, NN 프로세서의 하나 이상의 처리부들에 의해 수행된 복수의 낮은 레벨 동작(lower level operations)들이다. 매크로 명령은 신경 네트워크 처리의 종류 또는 일부를 구현하는 명령과 일치할 수 있다.
단일 매크로 명령을 실행함으로써, NN 프로세서는 많은 주기들에 걸쳐 발생할 수 있는 복잡한 동작들을 구현할 수 있다. 예를 들어, NN 프로세서는 컨볼루션(convolution) 수행, 벡터 외적(vector products) 결정, 풀링(pooling) 수행, 서브-샘플링(sub-sampling) 수행, LSTM(Long Short Term Memory) 셀들의 게이트 평가 및 데이터를 NN 프로세서의 내부로 및/또는 외부로 이동하는 것과 같은, 신경 네트워크 실행의 유형들을 지시하는 매크로 명령들을 실행할 수 있다. 매크로 명령들은 NN 프로세서가 각 개별적인 덧셈, 곱셈 또는 다른 낮은 레벨 동작들 위한 명령들을 이용하는 것과 대조적으로, 더 높은 레벨에서 동작하는 것을 가능하게 한다.
하나 이상의 다른 실시예들은 신경 네트워크 특징 추출을 목표로 하는 전력 및 최적화된 성능의 행렬 곱셈부를 제공한다. 하나 이상의 실시예들은, 이미지, 비디오, 오디오 및 행렬 곱셈을 통해 데이터가 필터링되는 일반적인 컴퓨터 시각 및/또는 오디오 처리의 일부로서 다른 데이터에 적용되는 일반적인 필터링 동작들(예를 들어, 컨볼루션)뿐 아니라, 신경 네트워크의 특징 분류 층에 적용할 수 있다.
하나 이상의 다른 실시예들에서, 명령들은 저 레벨 명령들로 구현된다. 저 레벨 명령들은 입력 특징 맵들(input feature maps)을 효율적으로 처리하기 위해 행렬 곱셈부에 제공될 수 있다. 행렬 곱셈부에 의해 실행된 바와 같이, 저 레벨 명령들은 효율적인 방식으로 입력 특징 맵들로부터 출력 특징 맵들(output feature maps)의 생성을 촉진한다.
일 측면에서, 명령들은 저 레벨 또는 매크로 여부, 동작의 특정 모드를 지정할 수 있다. 동작의 모드는 어떻게 특정 동작이 수행되거나 구현되는지를 의미할 수 있다. 예를 들어, 컨볼루션 동작을 위한 동작의 모드는, 컨볼루션 동작이 본 개시에서 상세하게 기술되는, 동작의 스캐터 모드(scatter mode) 또는 동작의 수집 모드(gather mode)를 사용하여 수행되는 것인지 여부를 의미할 수 있으나, 이에 제한되지 않는다.
하나 이상의 실시예들에서, NN 프로세서 또는 NN 프로세서의 일부분들은 로그 모드에서 동작하도록 구성된다. 로그 모드에서, 값들은 선형(linear) 포맷과 대조적으로, LNS (Log number space) 포맷이거나, LNS로 변환될 수 있다. 값들을 위해 LNS 포맷을 사용함으로써, 곱셈 동작들은 효율적인 처리를 위해 덧셈 동작들로 변환될 수 있다. 예를 들어, 곱셈 누적 동작들은 덧셈 누적 동작들로 단순화될 수 있고, 그렇게 함으로써 NN 프로세서의 아키텍처를 단순화하고, NN 프로세서의 동작 속도 및/또는 처리량을 향상시킬 수 있다.
하나 이상의 다른 실시예들에서, 값들의 변수 정밀도(variable precision)는 뒷받침된다. 변수 정밀도는 매크로 명령들 또는 저 레벨 명령들을 이용할지 여부에 뒷받침될 수 있다. 이에 대한 구체적인 내용들은 이하 도면들을 참조하여 상세하게 설명될 것이다.
본 개시에서, 설명을 위해, 제어 신호들(예를 들어, 선, 와이어 또는 무선 채널로 물리적으로 전달되는 제어 신호들)은 점선으로 도시되고, 데이터 신호들은 실선으로 도시되었다. 또한, 화살표들은 일반적으로 구성 요소간 제어 흐름을 의미한다. 이에 관해, 둘 또는 그 이상 구성 요소들을 연결하는 방향성을 갖는 화살표의 신호는 구성 요소들간 양 방향성 통신을 의미할 수 있다. 또한, 제어 흐름의 적어도 일부가 화살표로 지시하지 않는 방향성을 가질 수 있음은 이해될 것이다.
도 1은 신경 네트워크 프로세서의 일 실시예를 설명하기 위한 블록도이다. NN 프로세서(100)는 신경 네트워크의 특징 추출 층들에서 출력 특징 맵들을 생성하기 위해 가중치들을 적용함으로써, 입력 특징 맵들을 처리할 수 있다. 또한, NN 프로세서(100)는 신경 네트워크의 특징 분류 층들을 구현하기 위해, 값들에 가중치들을 적용할 수 있다. 일반적으로, 도 1은 명령들(예를 들어, 매크로 명령들)을 실행하도록 구성된 아키텍처를 나타낸다. 매크로 명령의 실행에 응답하여, NN 프로세서(100)는 매크로 동작을 구현한다. 매크로 동작은 NN 프로세서(100)의 하나 이상의 처리부들을 사용하여 수행된다.
일 측면에서, NN 프로세서(100)는 반도체 집적회로로 구현된다. 따라서, 도 1에 기재된 각 블록들은 NN 프로세서(100)의 회로를 나타낸다. 일 실시예에서, NN 프로세서(100)는 FPGA(field programmable gate array)와 같은 프로그래밍 가능한 통합 회로로 구현될 수 있다. 다른 실시예들에서, NN 프로세서(100)는 사용자 지정 집적 회로 또는 주문형 집적 회로로 구현될 수 있다.
도 1과 같이, NN 프로세서(100)는 제어부(102)를 포함한다. 제어부(102)는 NN 프로세서(100)의 처리부들의 동작을 제어한다. NN 프로세서(100)의 처리부들은 입력 데이터 경로(104-1 내지 104-4), 하나 이상의 연산 누적 어레이(arithmetic accumulate, AAC)(106) 및 데이터 리턴부(data return unit, DRU)(108)를 포함한다. 또한, NN 프로세서(100)는 제 1 메모리부(110-1 내지 110-4)를 포함한다. 제 1 메모리부(110-1 내지 110-4)는 SRAM(static random access memory) 유닛들로 구현될 수 있다. 또한, 도 1은 제 2 메모리부(112)를 나타낸다. 제 2 메모리부(112)는 DRAM(dynamic RAM) 유닛으로 구현될 수 있다. 일 실시예에서, 제 2 메모리부(112)는 제어부(102)에 의해 주소가 부여될 수 있으나, NN 프로세서(100)와 동일한 기판에 구현되지 않는다. 이러한 점에서, 제 2 메모리부(112)는 "오프칩(off-chip)" 또는 "외부" 메모리이다. 이와 비교하여, 제 1 메모리부(110-1 내지 110-4)는 "온칩(on-chip)" 또는 "내부" 메모리이다.
제어부(102)는 도시된 제어 신호로 NN 프로세서(100)의 처리부들의 동작을 제어할 수 있다. 일 실시예에서, 제어부(102)는 하나 이상의 매크로 명령들을 제 2 메모리부(112)로부터 불러온다. 제어부(102)는 매크로 명령들을 실행할 수 있다. 매크로 명령들을 실행할 때, 제어부(102)는 제어 신호들을 생성한다. NN 프로세서(100)의 다양한 구성 요소들에 배포된 제어 신호들은, 다양한 처리부들(예를 들어, 입력 데이터 경로(104-1 내지 104-4), AAC 어레이(106) 및 DRU(106) 및/또는 이들의 일부)이 이하에서 설명된 동작들을 수행하도록 야기한다.
일 실시예에서, 매크로 명령들은 일대일로 처리부에 제공될 수 있다. 예를 들어, 하나의 매크로 명령은 NN 프로세서(100)의 최대 하나의 처리부에 제공된다. 다른 실시예에서, 하나의 매크로 명령은 NN 프로세서(100)의 하나 이상의 처리부들에 제공될 수 있고, NN 프로세서(100)의 하나 이상의 처리부들에서 동작들을 착수할 수 있다.
또한, 제어부(102)는 제 2 메모리부(112)로부터 입력 데이터 및 가중치들을 불러올 수 있다. 입력 데이터는, 신경 네트워크의 특징 추출 층들을 구현하기 위한 영역들로 불리는 입력 특징 맵들 또는 그들의 일부일 수 있다. 입력 데이터는 신경 네트워크의 특징 분류 층들을 구현하기 위한 값들일 수 있다. 또한, 입력 데이터는 특징 추출 및/또는 특징 분류 층들을 구현하는 동안 생성된 중간 데이터일 수 있다. 제어부(102)는 제 1 메모리부(110-1 내지 110-4) 중 하나에 입력 데이터 및 가중치들을 저장할 수 있다. 입력 데이터 경로(104-1 내지 104-4)는, 제어부(102)의 제어 하에서, 제 1 메모리부 (110-1 내지 110-4)로부터 데이터를 읽고 AAC 어레이(106)에 데이터(예를 들어, 입력 데이터 및 가중치들)를 제공한다.
도 1과 같이, 입력 데이터 경로(104-1 내지 104-4)는 데이터 준비부(data staging units)(120-1 내지 120-4) 및 가중치 압축 해제기(weight decompressor)(122-1 내지 122-4)를 포함한다. 데이터 준비부(120-1 내지 120-4)는 데이터(예를 들어, 제 1 메모리부(110-1 내지 110-4)로부터 특징 맵들, 값들 및/또는 중간 결과들과 같은 입력 데이터)를 수신하도록 구성된다. 또한, 데이터 준비부(120-1 내지 120-4)는 제 1 메모리부(110-1 내지 110-4)로부터 획득된 데이터를 AAC 어레이(106)에 제공하도록 구성된다. 가중치 압축 해제기(122-1 내지 122-4)는 압축된 형태로 저장된 가중치들을 제 1 메모리부(110-1 내지 110-4)로부터 읽어, 압축 해제하도록 구성된다. 가중치 압축 해제기(122-1 내지 122-4)는 제 1 메모리부(110-1 내지 110-4)로부터 읽은 가중치들을 압축 해제할 수 있고, AAC 어레이(106)에 압축 해제된 가중치들을 제공할 수 있다.
각 AAC 어레이(106)는 제어부(102)에 제어 하에 동작하는 복수의 연산 누적부(arithmetic accumulate units, AAUs)(130)를 포함한다. 도 1의 예시에서, 각 AAC 어레이(106)는 16개 AAU들(130)을 포함한다. 도 1의 예시에서, NN 프로세서(100)는 도시된 바와 같이 두 AAC 어레이(106)를 포함하고, 각 AAC 어레이(106)는 동시에 동작할 수 있는(예를 들어, 병렬적으로) 16개 AAU(130)들을 포함한다. 또한, 제어부(102)의 제어 하에, AAC 어레이(106)에 의해 생성된 결과들은 DRU(108)에 제공될 수 있다.
일 실시예에서, AAC 어레이(106)는 곱셈 누적 동작(multiply accumulate, MAC)을 수행하도록 구성된다. AAU(130)는 곱셈 누적부(multiply accumulate unit, MAU)로 구현된다. 예를 들어, AAU(130)는 수신된 값들을 곱할 수 있고, 곱셈 결과를 내부적으로 저장 및/또는 누적할 수 있다. AAC 어레이(106)는 컨볼루션 동작들 및 벡터 외적 동작들을 수행할 수 있다. 매크로 명령들을 실행할 때, 제어부(102)는, AAC 어레이(106)에 제공되기 위한 입력 데이터 및 가중치들이 컨볼루션 동작들 및/또는 벡터 외적들의 성능을 향상시키는 것을 야기한다. MAC 동작들을 수행할 때, AAC 어레이(106)에 의해 사용된 데이터는 선형 포맷으로 특정된다. 일 실시예에서, AAC 어레이(106) 및/또는 AAU(130)를 구현하는 데 사용되는 요소들의 구현은 이하에서 도 9를 참조하여 설명된다.
다른 일 실시예에서, NN 프로세서(102)가 로그 모드에서 동작하도록 구성될 때, AAC 어레이(106)는 덧셈 누적 동작들을 수행하도록 구성된다. 이러한 경우, 각 AAU들(130)은 덧셈 누적부로 구현된다. 예를 들어, AAU(130)는 수신된 값들을 LNS 포맷으로 더하고, LNS 포맷의 덧셈 결과를 내부적으로 저장 및/또는 누적할 수 있다. 일 실시예에서, AAC 어레이(106) 및/또는 AAU(130)를 구현하는 데 사용되는 요소들의 구현은 이하에서 도 7a, 도 7b 및 도 8을 참조하여 설명된다.
DRU(108)은 AAC 어레이(106) 및 제 1 메모리부(110-1 내지 110-4)와 연결된다. DRU(108)은 다양한 동작들을 수행하도록 구성된다. 예를 들어, DRU(108)은 부분적으로 계산된 결과들을 위해, AAC 어레이(106) 누적기 값들을 저장(saving) 및 재저장(restoring)하고, AAU(130)에 있는 누적기의 값을 0 또는 현재 출력 맵을 위해 저장된 바이어스 값으로 초기화할 수 있다. DRU(108)은 수치적인 형식의 변환을 수행하고, 활성화 함수들을 적용하고, 풀링을 수행하고, 서브-샘플링을 수행하고, 특징 맵 재포맷팅을 수행하고, 선택적으로 압축을 수행하고, 입력 스트라이트 데이터(stride data) 재포맷팅을 수행하고, 제 1 메모리부(110-1 내지 110-4)에 읽기 및 쓰기를 위해 주소들을 생성하고, 특징 맵 재배열 및/또는 리매핑을 수행하고, 제 1 메모리부(110-1 내지 110-4)에 있는 상태 및 출력들을 갱신하는 것에 대응하여 LSTM 셀들을 평가하고, 최종 Winograd 변환을 적용하고 및/또는 바이어스를 추가할 수 있다.
도 1을 참조하면, DRU(108)은 서브-샘플링부(140), 풀링부(142), 활성화 함수부(activation function unit, AFU)(144) 및 프로세서부(processor unit)(146)를 포함하는 다양한 서브 시스템을 포함한다. 본 개시에서, DRU(108)의 서브 시스템들은 처리부(processing units)로 언급될 수 있다. 또한, DRU(108)은 서브-샘플링부 (140)를 이용하여 서브-샘플링하는 것, 풀링부(142)를 이용하여 풀링하는 것, AFU(144)를 적용하는 것과 같은 동작들을 수행할 수 있다. 일 실시예에서, 프로세서부(146)는 특징 맵 재포맷팅, 압축, 입력 스트라이드 재포맷팅, 주소 생성, 특징 맵 재배열 및/또는 재매핑 수행, LSTM 셀 평가, 최종 Winograd 변환을 적용 및/또는 바이어스 추가와 같은 동작들을 수행할 수 있다.
DRU(108)은 제어부(102)의 제어 하에 동작한다. 또한, DRU(108)의 각 처리부는 제어부(102)의 제어 하에 동작한다. 일반적으로, DRU(108)는 AAC 어레이(106)로부터 선형 포맷 또는 LNS 포맷인 누적된 데이터를 수신하고, 매크로 명령들을 실행할 때 제어부(102)로부터 수신된 제어 신호들에 기초하여 데이터에 대한 동작들을 수행한다. 이에 관해, DRU(108)은 동작의 선형 모드에서 동작하도록 구성될 수 있거나, AAC 어레이(106)의 특정 환경 설정(configuration)을 맞추기 위해 로그 모드에서 동작하도록 구성될 수 있다. DRU(108)에 의해 생성된 임의의 결과들은 추후 처리를 위해 제 1 메모리부(110-1 내지 110-4)에 저장될 수 있다. 일 측면에서, 제어부(102)는 생성된 데이터를 제 1 메모리부(110-1 내지 110-4)에 저장하고, 그 후 제 1 메모리부(110-1 내지 110-4)로부터 생성된 데이터를 제 2 메모리부(112)로 이동시키도록, DRU(108)에게 지시할 수 있다. 서브-샘플링부(140), 풀링부(142) 및 프로세서부(146)를 위한 예시적인 구현은 이하에서 도 4 내지 도 6을 참조하여 설명된다.
도 1 에 기재된 아키텍처는 단지 설명을 위한 목적으로 제공되었음은 이해되어야 한다. 다양한 유닛들(예를 들어, 제 1 메모리부(110-1 내지 110-4), AAC 어레이(106) 등)의 수는 이에 제한되지 않는다. NN 프로세서(100)는 더 적거나 더 많은 처리부들을 포함할 수 있다. 또한, 일 실시예에서, 하나 이상의 처리부들은 단일 또는 더 큰 처리부와 결합될 수 있다. 다른 예들에서, 하나 이상의 개별적인 처리부들은 복수의 작은 처리부들로 분할될 수 있다.
도 2는 신경 네트워크 프로세서의 제어부의 일 실시예를 설명하기 위한 블록도이다. 일 실시예에서, 제어부(200)는 도 1의 NN 프로세서(100)를 참조하여 설명된 제어부(102)를 구현하는 데 사용된다. 제어부(200)는 버스 인터페이스(202), DMA부(direct memory access unit)(204), 커맨드 파서(command parser)(206), 버퍼(208), 제어 인터페이스(210) 및 데이터 포맷터(data formatter)(212)를 포함한다. 또한, 도 2의 제 1 메모리부(110)는 도 1의 제 1 메모리부(110-1 내지 110-4)를 포함할 수 있다.
일반적으로, 커맨드 파서(206)는 버스 인터페이스(202), DMA부(204), 제어 인터페이스(210) 및 데이터 포맷터(data formatter)(212)의 동작을 제어한다. 커맨드 파서(206)는 버스 인터페이스(202)를 통해서, 제 2 메모리부(112)로부터 데이터를 읽거나 및/또는 제 2 메모리부(112)에 데이터를 쓸수 있다. 일 실시예에서, 버스 인터페이스(202)는 영국 캠브릿지 Arm사에서 출시된 하나 이상의 ARM®, AMBA® 사양에 의해 정의된, AXI(Advanced eXtensible Interface) 호환가능한 버스로 구현될 수 있지만, 이에 제한되지 않는다. 버스 인터페이스(202)는 잘 알려진 버스 기술들 및/또는 통합 회로들을 위한 버스 연계 기술들 중 어느 하나를 이용하여 구현될 수 있다. 따라서, 커맨드 파서(206)는 제 2 메모리부(112)로부터 매크로 명령들을 읽을 수 있고, 제 2 메모리부(112)로부터 입력 데이터 및 가중치들을 읽을 수 있고, 버스 인터페이스(202)를 통해 제 2 메모리부(112)에 데이터를 쓸 수 있다.
커맨드 파서(206)는 DMA 부(204)를 통해 제 1 메모리부(110-1 내지 110-4)로부터 데이터를 읽거나 및/또는 제 1 메모리부(110-1 내지 110-4)에 데이터를 쓸 수 있다. 버퍼(208)는 데이터를 일시적으로 저장하도록 구성된다. 일 측면에서, 버퍼(208)는 SRAM 버퍼로 구현된다. 일 실시예에서, 버퍼(208)는 32 KB SRAM 버퍼로 구현된다. 버퍼(208)는 데이터 포맷터(212)에 데이터를 제공하기 위해 사용될 수 있다. 데이터 포맷터(212)는 한 포맷에서 다른 포맷으로 데이터를 변환할 수 있다. 예를 들어, 데이터 포맷터(212)는 로그 포맷에서 로그 포맷이 아닌 포맷(예를 들어, 선형 포맷)으로 값들을 변환할 수 있다.
또한, 커맨드 파서(206)는 매크로 명령들을 분석하고, 매크로 명령을 실행하는 일부로서 매크로 명령을 제어 인터페이스(210)에 제공할 수 있다. 제어 인터페이스(210)는 커맨드 파서(206)로부터 수신된 매크로 명령을 하나 이상의 제어 신호들로 변환할 수 있다. 제어 인터페이스(210)는 도 1에 기재된 NN 프로세서(100)의 처리부들로 제어 신호들을 제공한다.
도 3은 신경 네트워크 프로세서의 동작 방법의 일 실시예을 도시한 흐름도이다. 방법(300)은 NN 프로세서는 신경 네트워크를 실행한 상태에서 시작할 수 있다. 따라서, 단계 305에서 신경 네트워크는 외부 메모리로부터 하나 이상의 명령들(예를 들어, 매크로 명령들)을 검색한다. 일 실시예에서, 제어부(102)는 외부 메모리로부터 하나 이상의 매크로 명령들 또는 매크로 명령들의 세트를 검색하도록 구성된다.
단계 310에서, NN 프로세서는 수신된 매크로 명령들을 분석한다. 예를 들어, 제어부(102)의 커맨드 파서(206)는 단계 305에서 검색된 매크로 명령들을 분석한다. 단계 315에서, NN 프로세서는 실행을 위한 특정 매크로 명령을 선택한다. 예를 들어, 커맨드 파서(206)는, 매크로 명령을 선택할 때, 선택된 매크로 명령을 제어 인터페이스(210)에 제공할 수 있다.
단계 320에서, NN 프로세서는 NN 프로세서에 포함된 하나 이상의 처리부들을 위해 선택된 매크로 명령에 기초하여, 제어 신호들을 생성한다. 예를 들어, 제어 인터페이스는 커맨드 파서(206)로부터 매크로 명령을 수신하는 것에 응답하여, 매크로 명령에 기초하여 제어 신호들을 생성한다. 제어 신호들은 매크로 명령을 실행하는데 사용되고, 매크로 명령에 응답하여 매크로 동작을 수행하는, 하나 이상의 처리부들에 제공되거나 배포된다.
단계 325에서, NN 프로세서는 단계 305에서 검색된 세트에서 다른 매크로 명령들이 남아 있는지를 판단한다. 만약 그렇다면, 방법(300)은 처리를 계속하기 위해, 단계 310로 루프를 되돌아갈 수 있다. 만약 그렇지 않으면, 방법(300)은 외부 메모리로부터 추가로 처리를 위한 매크로 명령을 검색하기 위해, 단계 305로 루프를 되돌아갈 수 있다.
간략하게 논의된 바와 같이, 컴퓨터 기반 유틸리티는 매크로 명령들을 생성하기 위해 신경 네트워크의 명세를 처리할 수 있다. 이러한 매크로 명령들은 기재된 대로 NN 프로세서에 의해 실행될 수 있다. 컴퓨터 기반 유틸리티에 의해 생성될 수 있고, 신경 네트워크 구현을 위해 기 설정된 서열에서 NN 프로세서에 제공될 수 있는 다양한 매크로 명령들의 예들은 이하에서 상세하게 설명될 것이다.
매크로 명령들은 매크로 동작을 구현하는 데 사용되는 다른 정보를 포함하거나, 이들을 의미하는 것일 수 있다. 일 실시예에서, 매크로 명령은 제 1 데이터 세트, 제 2 데이터 세트 및 매크로 동작을 의미할 수 있다. 매크로 동작은 제 1 데이터 세트 및 제 2 데이터 세트를 이용하여 수행될 수 있다. 다른 실시예에서, 매크로 명령은 매크로 동작을 수행하기 위한 동작의 모드를 의미할 수 있다. 어느 경우에서, 동작의 모드는 동작의 기본 모드를 위한 기본 값일 수 있다. 다른 경우에서, 동작의 모드는 동작의 복수의 다른 모드들 중 하나를 의미하는 값일 수 있다. 매크로 명령들의 예들은 이하에서 상세하게 설명될 것이다.
NN 프로세서에 의해 실행될 수 있는 다른 매크로 명령들의 예들은 컨볼루션 매크로 명령들, 벡터 외적 매크로 명령들, 풀링 매크로 명령들, 서브-샘플링 매크로 명령들, 활성화 함수 매크로 명령들, LSTM 매크로 명령들 및 데이터 이동 매크로 명령들을 포함하지만, 이에 제한되지 않는다. 어느 경우에, 매크로 명령들은 수행되기 위한 동작들을 위한 변수 정밀도를 지정할 수 있다. 매크로 명령들의 각각 다른 종류들은 제어 신호를 통해 NN 프로세서에 있는 하나 이상의 특정 처리부들에 제공될 수 있다. 예를 들어, 제어부(102)는 수신된 매크로 명령을 처리하고, 수신된 매크로 명령이 속하는 특정 처리부들을 결정하고, 매크로 명령(들)에 의해 특정된 매크로 동작을 구현하기 위해, 처리부들에 필요한 제어 신호들을 생성할 수 있다.
예를 들어, 제어부(102)는 데이터 이동 매크로 명령을 실행할 수 있다. 제어부(102)는 외부 메모리로부터 입력 데이터(예를 들어, 특징 맵들 또는 값들) 및 컨볼루션 커넬들(가중치들)의 검색을 야기하는 제어 신호들을 생성한다. 데이터 이동 매크로 명령의 실행은 입력 데이터(예를 들어, 제 1 데이터 세트) 및 가중치들(제 2 데이터 세트)이 제 2 메모리부(112)로부터 검색되고, 하나 이상의 제 1 메모리부(110-1 내지 110-4)에 저장되는 것을 야기한다. 데이터 이동 매크로 명령의 실행 이후에, 동작될 때 기초가 되는 데이터 블록은 제 1 메모리부(110-1 내지 110-4)에 저장되고, NN 프로세서(100)에 있는 다른 처리부들을 사용하는 처리를 위해 사용될 수 있다.
또 다른 예를 들어, 데이터 이동 매크로 명령의 실행은 제 1 메모리부(110-1 내지 110-4)에 저장된 데이터가 제 2 메모리부(112)에 이동되는 것을 야기한다. 예를 들어, DRU(108)에 의해 생성된 결과들은 제 1 메모리부(110-1 내지 110-4)에 저장될 수 있다. 데이터 이동 매크로 명령을 실행할 때, 제어부(102)는 제 1 메모리부(110-1 내지 110-4)에 저장된 데이터를 제 2 메모리부(112)로 이동시키거나 제 2 메모리부(112)에 저장되는 것을 야기한다.
다른 측면에서, 데이터 이동 매크로 명령은 데이터에 적용되어야 하는 포맷 변환(format conversion)의 종류를 의미할 수 있다. 포맷 변환은 제어부(102)의 데이터 포맷터(212)에 의해 적용될 수 있다. 일 측면에서, 데이터는 선형에서 LNS 포맷 또는 반대로 변환될 수 있다. 예를 들어, 포맷 변환을 특정하는 데이터 이동 매크로 명령을 실행할 때, 제어부(102)는 버퍼(208)를 통해서 제 2 메모리부(112) 및/또는 제 1 메모리부(110-1 내지 110-4)로부터 값들을 획득하여 데이터 포맷터(212)를 이용하여 포맷 변환을 수행하고, 포맷이 변환된 데이터를 제 2 메모리부(112) 및/또는 제 1 메모리부(110-1 내지 110-4)에 버퍼(208)를 통해서 전송할 수 있다. 일 실시예에서, 포맷 변환이 수행되었는지 여부 및 포맷 변환의 종류(예를 들어, 선형 도메인에서 로그 도메인 또는 로그 도메인에서 선형 도메인)는 데이터 이동 매크로 명령의 동작의 모드의 일부로 나타낼 수 있다.
제어부(102)는 컨볼루션 매크로 명령을 실행할 수 있다. 일반적으로, 컨볼루션 매크로 명령은 AAC 어레이(106)가 컨볼루션을 수행하고 결과들을 누적하는 것을 야기한다. 일 실시예에서, 컨볼루션 매크로 명령을 실행할 때, 제어부(102)는 입력 데이터 경로(104-1 내지 104-4)가 제 1 메모리부(110-1 내지 110-4)로부터 입력 데이터 및 가중치들의 일부를 읽고, 입력 데이터 및 가중치들을 AAC 어레이(106)에 제공하는 것을 야기한다. 논의된 바와 같이, 입력 데이터 경로(104-1 내지 104-4)에 있는 가중치 압축 해제기(122)는 AAC 어레이(106)가 압축 해제된 가중치들을 수신할 수 있도록, 가중치들을 압축 해제할 수 있다.
AAC 어레이(106)는, 제어부(102)로부터 제어 신호들에 응답하여, 동일한 컨볼루션 매크로 명령을 실행할 때, 출력 특징 맵 또는 출력 특징 맵의 일부를 생성하기 위해, 입력 특징 맵(예를 들어, 입력 데이터)의 x-y 영역(예를 들어, N 이 1보다 큰 정수일 때, N x N 영역)에 복수의 가중치들을 컨벌브(convolve) 할 수 있다. 예를 들어, 매크로 컨볼루션 명령은 처리하기 위한 특정 입력 특징 맵들, 처리하기 위한 입력 특징 맵들의 특정 x-y 영역들 및 다양한 영역들에 적용되기 위한 가중치들을 의미할 수 있다.
AAC 어레이들(106)은 입력 특징 맵들의 세트를 통해 루핑(looping)할 수 있고, 대응하는 필터 커넬들 세트를 적용할 수 있다. 예를 들어, 하나의 매크로 명령으로부터, AAC 어레이(106)는 각 영역에 서로 다른 3x3 커넬들을 적용하고, 결과들을 누적하여, 출력 특징 맵을 생성함으로써, 16 개 입력 특징 맵들의 각각으로부터 x-y영역을 처리할 수 있다. 비 제한적인 예시로서, 영역들은 4x4 영역들일 수 있다. 또한, 복수의 출력 특징 맵들을 위한 결과들은 단일 매크로 명령으로 생성될 수 있다. 기재된 동작들은 단일 매크로 컨볼루션 명령을 실행하는 결과로, 다수의 주기들에 걸쳐 발생할 수 있다.
일 실시예에서, 0 가중치들 및/또는 0 값들 건너뛰기(skip)와 같은 기능들은 0 값을 갖는 가중치들 "G/또는 0 값을 갖는 입력 데이터의 어플리케이션을 건너뛰는 회로를 이용하는 AAC 어레이(106)에서 자동으로 수행될 수 있다.
언급된 바와 같이, 여러 매크로 명령들은 변수 정밀도를 지원한다. 설명을 위한 목적으로, AAU들(130)은 N 비트 값들을 처리하기 위해 구현될 수 있다. 하나 이상의 가중치들이 N 비트들보다 많은 경우(예를 들어, 2N 비트), 매크로 명령들은 요구되는 정밀도의 변화를 처리할 수 있다. 일 실시예에서, 매크로 컨볼루션 명령들은 가중치의 특정 부분이 적용되기 위한 것임을 의미할 수 있다.
AAU들(130)이 8 비트 동작을 위해 구성되는 예시를 고려해본다. AAU들(130)은 각 매크로 명령이 가중치의 다른 부분을 입력 데이터에 적용할 때, 둘 이상의 매크로 명령들로 계산을 분할함으로써, 더 높은 정밀도의 계산(예를 들어, 16비트)을 수행할 수 있다. 예시에서, 제어부(102)는 가중치의 하반부(예를 들어, 16 비트 가중치의 하단 8비트)를 이용하여 AAC 어레이(106)가 입력 특징 맵들의 세트를 처리하는 것을 야기하는, 제 1 매크로 명령을 실행할 수 있다. 그리고 나서, 제어부(102)는 AAC 어레이(106)가 가중치의 상반부(예를 들어, 16 비트 가중치의 상단 8비트)에 적용되는 것을 야기하는, 제 2 매크로 명령을 실행할 수 있다. 이러한 가중치들은 AAU들(130)에 있는 누적된 각 매크로 명령으로부터 결과와 함께 선택된 정밀도를 이용해서 적용될 수 있다. 이때 컨볼루션 매크로 명령이 AAC 어레이(106)가 로그 도메인에서 동작되도록 구성될 때, 덧셈 누적 동작들을 수행하는 것을 야기하는 것임은 이해될 수 있다. AAC 어레이(106)는 선형 도메인에서 동작되도록 구성될 때, 컨볼루션 매크로 명령은 AAC 어레이(106)가 곱셈 누적 동작들을 수행하는 것을 야기한다.
다른 측면에서, 컨볼루션 매크로 명령들은 동작의 스캐터 모드 또는 동작의 수집 모드가 AAC 어레이(106)를 이용하여 구현되었는지 여부를 의미할 수 있다. 일 실시예에서, 스캐터 모드 또는 수집 모드의 징후(indication)는 컨볼루션 매크로 명령의 동작의 모드의 일부로서 특정된다. 동작의 스캐터 모드에서, 둘 이상의 행렬 곱셈들은 신경 네트워크의 다음 층을 위한 여러 출력 특징 맵들에 대한, 각 입력 특징 맵의 기여도(contribution)를 생성하기 위해, 각 입력 특징 맵에 적용될 수 있다. 처리된 각 입력 맵은 여러 출력 맵에 흩어진다. 스캐터 모드 동작의 예로서, 컨볼루션 매크로 명령은 AAC 어레이(106)가 16개 입력 특징 맵들을 처리하고, 복수의 출력 특징 맵들의 각각에 기여도를 생성하는 것을 야기한다. 예를 들어, 하나의 컨볼루션 매크로 명령에 응답하여, AAC 어레이(106)가 4개의 커넬들을 적용함으로써 제 1 입력 특징 맵을 처리할 수 있다. 각 커넬 어플리케이션은 출력 특징 맵들 1 내지 4의 부분을 생성하는 결과를 야기한다. 더 나아가, 컨볼루션 매크로 명령은 AAC 어레이(106)가 다음 입력 특징 맵을 선택하고, 출력 특징 맵들 1 내지 4의 부분들을 초래하는 4개의 커넬들을 적용하는 것을 야기할 수 있다.
동작의 수집 모드에서, 여러 입력 특징 맵들은 컨벌브되고, 그 결과들은 단일 출력 특징 맵에 출력을 생성하기 위해 조합된다. 동작의 수집 모드의 예로서, AAC 어레이(106)는 단일 출력 특징 맵을 생성하기 위해, 1개 입력 특징 맵들에 16개 커넬들을 적용할 수 있다. AAC 어레이(106)는 추가적으로 출력 특징 맵들을 생성하기 위해 동작의 수집 모드를 수행할 수 있다. 신경 네트워크의 N 층으로부터 모든 특징 맵들을 처리하여 신경 네트워크의 N+1 층에서 모든 특징 맵들을 생성하기 위해서, AAC 어레이(106)는 스캐터 및 수집 모드들의 조합을 이용할 수 있다. 사용하기 위한 어느 모드의 선택은, 전체 연산량 및 다음 층을 생성하는 것이 유지되기 위한 중간 데이터의 풋프린트(footprint) 저장소를 최소화하기 위해 실행되는 특정 매크로 명령들에 의해 특정될 수 있다. 이러한 방식으로, AAC 어레이(106)는 스캐터 모드 또는 수집 모드에서 동적으로 동작할 수 있다.
또한, 제어부(102)는 벡터 외적 매크로 명령을 실행할 수 있다. 일반적으로, 벡터 외적 매크로 연산은 AAC 어레이(106)가 입력 데이터 세트에서 벡터 외적 세트를 수행하고 그 결과들을 누적하는 것을 야기한다. 벡터 외적 매크로 명령 실행에서, 제어부(102)는 입력 데이터 경로(104-1 내지 104-4)가 제 1 메모리부(110-1 내지 110-4)로부터 값들(예를 들어, 특징 분류 값들) 및 가중치들(예를 들어, 신경 네트워크의 특징 분류 층을 위한 가중치들)을 읽고, 동일한 값을 AAC 어레이(106)에 제공하도록 지시할 수 있다. AAC 어레이(106)는 벡터 외적을 수행할 수 있고, 처리한 것을 누적할 수 있다. 예를 들어, 단일 벡터 외적 매크로 명령은 AAC 어레이(106)가 4096개 입력 값들에 4096개 가중치들의 16 세트들을 적용하고, 병렬적으로, 16개 결과들을 누적하는 것을 야기한다. 그러므로, 벡터 외적 매크로 명령은 여러 입력 값들, 적용되어야 할 여러 가중치들을 지정하고, 나아가 그 결과들의 누적을 야기할 수 있다.
다른 예를 들어, 벡터 외적 매크로 명령은 컨볼루션 매크로 명령과 관련하여 설명된 것과 같이, 다른 정밀도를 지정할 수 있다. 예를 들어, 다른 벡터 외적 매크로 명령은 제 2 경로 동안 누적된 결과들과 함께, 입력 값들에 가중치들의 상단 부분의 어플리케이션을 야기하는 중에, 하나의 벡터 외적 매크로 명령은 제 1 경로 동안, 입력 값들에 가중치들의 하단 부분의 어플리케이션을 야기할 수 있다. 결과들은 동일한 16개 누적기들(예를 들어, AAU들(130)을 사용하는 것)에 누적될 수 있다. 로그 도메인에서 동작되도록 구성된 경우, 벡터 외적 매크로 명령이 AAC 어레이(106)가 덧셈 누적 동작을 수행하는 것을 야기할 수 있음은 이해되어야 한다. AAC 어레이 (106)가 선형 도메인에서 동작되도록 구성된 경우, 벡터 외적 매크로 명령은 AAC 어레이(106)가 곱셈 누적 동작들을 수행하는 것을 야기한다.
제어부(102)는 풀링 매크로 명령 및/또는 서브-샘플링 매크로 명령을 실행할 수 있다. 매크로 명령은 풀링 또는 서브-샘플링이 수행되어야 하는지 여부를 의미할 수 있다. 또한, 매크로 명령은 지정된 동작들이 수직적으로, 수평적으로 또는 수직 및 수평적으로 수행되어야 하는지 여부를 의미할 수 있다. 일 실시예에서, 풀링 매크로 명령 또는 서브-샘플링 매크로 명령에 응답하여, AAC 어레이(106)로부터 제공된, 누적된 결과들은 DRU(108)에 제공된다. DRU(108)에서, 서브-샘플링부(140) 및/또는 풀링부(142)는 수신된 매크로 명령에 기초하여, 수평적 및/또는 수직적으로 동작할 수 있다.
예를 들어, 출력 특징 맵의 하나의 출력 4x4 영역을 생성할 수 있는 것과 같이, 서브-샘플링부(140) 및 풀링부(142)는 영역들(예를 들어, 출력 특징 맵들의 4x4 영역들)의 가변 수(variable number)를 읽을 수 있고, 풀링 또는 서브-샘플링을 수행할 수 있다. 매크로 명령은, 하나의 출력 4x4 영역을 생성하기 위해 처리되어야 하는 입력 4x4 영역의 수를 의미할 수 있다. 매크로 명령은 최종 4x4 출력 영역을 생성하기 위한 관련 유닛에 추가적인 입력을 공급하는 각 주기와 함께, 다수의 주기들에 걸쳐 구현될 수 있다.
다른 예로서, 서브-샘플링부(140)는 매크로 명령에 응답하여, 수평으로 스케일링된 하나의 4x4 영역을 생성하기 위한 4의 인수(factor)에 의해, 4개의 4x4 영역들을 서브-샘플링할 수 있다. 매크로 명령은 데이터의 4x16 행을 생성하기 위해, 첫번째 아래부터 수평으로 4x4 영역의 3 이상의 열 세트들을 줄이기 위한 추가적인 매크로 명령들에 의해, 이어질 수 있다. 뒤따른 매크로 명령은 4개의 각 지시(방향)에 의해 서브-샘플링된 입력 영역을 나타내는 최종 4x4을 생성하기 위해, 열에서 수직으로 4개의 4x4 영역을 줄일 수 있다. 서브-샘플링부(140) 및 풀링부(142)의 동작은 이하에서 도 4를 참조하여 상세하게 설명될 것이다.
제어부(102)는 LSTM 매크로 명령을 실행할 수 있다. LSTM 매크로 명령은 처리부(예를 들어, 프로세서부(146) 또는 DRU(108)에 있는 또 다른 프로세서부)가 LSTM 셀들의 세트에 대한 게이트를 평가하는 것을 야기할 수 있다. 예를 들어, 벡터 외적 매크로 명령은 LSTM 매크로 명령 이전에 실행되었을 수 있다. LSTM 매크로 명령을 실행할 때, 제어부(102)는 관련 처리부가 벡터 외적 매크로 명령의 결과를 입력으로 수신하는 것을 야기한다. 처리부는 LSTM 셀들의 세트에 대한 게이트 평가를 병렬로 수행한다. 예를 들어, 처리부는 16개의 다른 LSTM 셀들의 망각 게이트(forget gate)들을 평가하기 위해, 벡터 외적 결과들의 두 세트들을 조합할 수 있다. LSTM 게이트 처리는 이하에서 도 5 및 도 6을 참조하여 상세하게 설명될 것이다.
제어부(102)는 활성화 함수 매크로 명령을 실행할 수 있다. 활성화 함수 매크로 명령을 실행할 때, 제어부(102)는 AFU(144)가 특정(예를 들어 선택된) 활성화 함수를 누적된 결과들에 적용하는 것을 야기한다. 활성화 함수 매크로 명령은 복수의 다른 사용 가능한 활성화 함수들에서 특정 활성화 함수를 의미할 수 있고, 선택된 활성화 함수는 특정 누적된 결과에 적용되어야 하는 것을 야기한다. 예를 들어, 다른 활성화 함수들은 실행된 활성화 함수 매크로 명령에 기초하여, 다른 누적된 결과들에 적용될 수 있다.
도 4a 내지 도 4b는 신경 네트워크 프로세서의 처리부의 일 실시예를 전체적으로 설명하기 위한 도면이다. 일 측면에서, 처리부(400)는 도 1의 서브-샘플링부(140) 구현에 사용될 수 있다. 또 다른 측면에서, 처리부(400)는 도 1 의 풀링부(142) 구현에 사용될 수 있다. 도 4 의 예에서, 처리부(400)는 출력으로 데이터의 4x4 영역을 생성하기 위해, 복수의 주기들(예를 들어, 가변 수)에 거쳐, 레지스터(402)에 저장된 데이터에서 동작할 수 있다. 데이터는 수평적으로 또는 수직적으로 처리될 수 있다.
처리부(400)의 동작은 명령 레지스터(450)에 저장된 매크로 명령 및 매크로 명령의 일부에 의해 결정될 수 있다. 매크로 명령(예를 들어, 풀링 또는 서브-샘플링 매크로 명령)을 실행하는 것에 응답하여, 명령 레지스터(450)에 저장된 매크로 명령은 제어부(102)로부터 처리부(400)에 제공되는 제어 신호들로부터 획득된다. 일 측면에서, 이하에서 상세하게 설명되는 것과 같이, 명령 레지스터(450)에 저장된 명령의 다른 부분들은 처리부(400)의 다른 구성 요소들을 제어한다.
예를 들어, 입력 데이터의 4x4 영역(예를 들어, 특징 맵의 4x4 영역)은 DRU(108)의 DRU 프로세서 레지스터(432)로부터 읽힐 수 있고, 처리를 위해 레지스터(402)에 저장될 수 있다. 각 주기 동안, 하나의 열(또는 경우에 따라 하나의 행)은 레지스터(502)로부터 선택되고, 제 1 멀티플렉서(404-1 내지 404-12) 및 제 2 멀티플렉서(406-1 내지 406-4)를 통해 출력되고, 동작부(408-1 내지 408-4)에 공급된다. 동작부(408-1 내지 408-4)에 공급된 데이터는 누적기 유닛(410-1 내지 410-4)에 쓰여진다. 후속 열들(또는 경우에 따라 하나의 행들)은 누적기 유닛(410-1 내지 410-4)에 저장된 값들과 조합된다.
이 서브-샘플링의 경우, 선택된 행들 또는 열들은 (도 4b의 신호들(414)를 통해) 누적기 유닛(410-1 내지 410-4)을 통과해 출력 레지스터(416-1 내지 416-4)로 넘어간다. 도시된 바와 같이, 명령 레지스터(450)로부터 매크로 명령의 D12 비트는 수평적으로 또는 수직적으로 동작들을 제어하고, 제 1 멀티플렉서(404-1 내지 404-12)에 제어 신호로서 제공된다. 동작부(426)는 MAX 동작, ADD 동작, 또는 MOVE 동작을 수행할 수 있다. 명령 레지스터(450)에 저장된 매크로 명령의 D5:D4 비트들은 동작 선택기(426)에 제공된다. 동작 선택기(426)는 동작부(408-1 내지 408-4)가 MAX 값 동작, ADD 동작 또는 MOVE 동작을 수행할지 여부를 지시한다. 예를 들어, 풀링의 경우, 동작부(408-1 내지 408-4)는 결과들이 누적기 유닛(410-1 내지 410-4)에 쓰여진 경우, MAX 동작 또는 ADD 동작을 수행할 수 있다.
명령 레지스터(450)에 저장된 매크로 명령의 D11:D8 비트들은 입력 스트라이드를 제어하는 제어 신호로 가산기(420)에 제공된다. 일 실시예에서, 가산기(420)는 4 비트 가산기(4-bit position adder)로 구현된다. 가산기(420)는 입력 열/행 선택기(422)에 제공되는 제어 신호를 생성할 수 있다. 입력 행/열 선택기(422)는 제 2 멀티플렉서(406-1 내지 406-4)에 제공되는 선택 신호를 생성한다.
D7:D6 비트들은 샘플 카운터(424)에 제어 신호로 제공된다. 일 실시예에서, 샘플 카운터(424)는 2 비트 샘플 카운터이다. 또한, 샘플 카운터(424)는 가산기(420)를 초기화하는 때를 의미하는 제어 신호로 수행 비트(a carry out bit)를 제공한다. 샘플 카운터(424)는 제어 신호(430)을 통해 출력 카운터(428)에 출력으로 샘플 카운트를 제공한다. 각 시프트 및 라운드 회로(shift and round circuit)(412-1 내지 412-4)가 수신된 데이터를 시프트 시키기 위한 비트 위치의 수를 나타내는, 오른쪽 시프트 제어 신호로서, 매크로 명령의 D3:D2 비트들은 시프트 및 라운드 회로들(412-1 내지 412-4)에 제공된다. D1:D0 비트들은 처리되어야 하는 행들 및/또는 열들의 수를 나타내기 위해 출력 카운터(428)에 제공된다. 출력 카운터(428)는 매크로 명령의 D1:D0 비트들로부터 값들이 비교된, 수신된 샘플 카운트에 기초하여 4x4 영역이 준비된 때를 나타내기 위해, DRU 프로세서 레지스터(432)에 출력 제어 신호를 생성할 수 있다.
열들 및 행들은 순차적으로 출력 레지스터(416-1 내지 416-4)에 (데이터 신호(414-1 내지 414-4)에 의해) 쓰여진다. 4개 행들 또는 4개 열들 중 하나(또는 출력 카운터(428)에 의해 유지되는 출력 카운트에 따라 더 적은 수)가 처리될 때, 데이터는 출력 레지스터(416-1 내지 416-4)로부터 DRU 프로세서 레지스터(432)에 쓰여진다. 언급된 바와 같이, 데이터는 데이터의 행들이 될 수 있다(예를 들어, 출력 레지스터(416-1 내지 416-4)의 각각은 하나의 행에 저장된다). 각 출력 레지스터(416-1 내지 416-4)가 비트를 출력할 때, 데이터는 데이터의 열들이 될 수 있다. 수직 동작들에서, 출력 열 쓰기 가능 회로(460)는 출력 레지스터(416-1 내지 416-4)의 개별적인 레지스터들(비트 위치들)의 선택된 열에 쓰기가 가능하다. 수평 동작들에서, 출력 행 쓰기 가능 회로(462)는 출력 레지스터(416-1 내지 416-4)의 선택된 행에 쓰기가 가능하다. 도시된 바와 같이, 출력 열 쓰기 가능 회로(460) 및 출력 열 쓰기 가능 회로(462)의 각각은 출력 데이터의 때를 나타내기 위해, 제어 신호(430)를 샘플 카운터(424)로부터 수신한다.
도시된 바와 같이, 명령 레지스터(450)에서 적절한 값을 설정하는 것은 처리부 (400)에 걸쳐 서로 다른 복수의 동작을 개시한다. 일 실시예에서, 명령 레지스터(450)에 저장된 매크로 명령은 제어부(102)에 의해 지정될 수 있다. 제어부(102)는 처리부(400)에 제어 신호를 생성하는 단일 매크로 명령을 실행함으로써, 명령 레지스터(450)에 명령을 저장한다.
도 4를 참조하여 설명된 아키텍처는 단지 예시의 목적으로 제공된다. 예를 들어, 처리부(400)는 도시된 것보다 더 적거나 더 많은 구성 요소들을 포함할 수 있다. 또한, 도 4를 참조하여 설명된 매크로 명령 구현은 단지 예시의 목적으로 제공된 것으로, 본 개시는 이에 제한되지 않는다.
도 5는 신경 네트워크 프로세서의 처리부의 다른 일 실시예를 설명하기 위한 도면이다. 처리부(500)는 LSTM 셀 평가를 지원하는 동작들을 수행할 수 있다. 예를 들어, 처리부(500)는 LSTM 셀의 하나 이상의 게이트들을 평가하도록 구성된다. 일 실시예에서, 처리부(500)는 도 1의 DRU(108)의 프로세서부(146)를 구현하는 데 사용될 수 있다. 또 다른 일 실시예에서, 처리부(500)는 도 1에 기재되지 않은 추가적인 처리부로서, DRU(108)에 포함될 수 있다.
처리부(500)는 제어부(102)에 의해 생성되고, 제어부(102)로부터 제공된 제어 신호들로부터 결정될 때, 매크로 명령 또는 그 일부(예를 들어, 제어 신호들)와 함께 로딩될 수 있는 명령 레지스터(502)를 포함한다. 도 5를 참조하면, 명령 레지스터(502)는 제 3 멀티플렉서(508-1, 508-2)의 동작을 제어하고, 경로 통과 회로(pass through circuit)(510), 마스크 회로(mask circuit)(512), AFU(514) 및 출력 선택 회로(output select circuit)(516)를 통과하는 복수의 다른 필드들을 포함한다. 입력 포트(504)는 AAC 어레이(106)로부터 데이터를 수신한다. 입력 포트(504)는 수신된 데이터를 제 3 멀티플렉서(508-1, 508-2)에 통과시킨다. 유사하게, 중간 결과 회로(intermediate results circuit)(506)는 레지스터들을 포함하고, 수신된 데이터를 제 3 멀티플렉서(508-1, 508-2)에 통과시킨다. 일 측면에서, 중간 결과 회로(506)는 두 레지스터들을 포함한다.
제 3 멀티플렉서(508-1)는 명령 레지스터(502)에 저장된 매크로 명령의 D4 및 D3 비트들에 의해 제어된다. 더 구체적으로, D4 및 D3 비트들은 제 3 멀티플렉서(508-1)를 위해 선택 신호로 사용된다. (D4, D3) 비트들이 (0, 0)일 때, 제 3 멀티플렉서(508-1)는 null 값을 통과시킨다. (D4, D3) 비트들이 (0, 1)일 때, 멀티플렉서(508-1)는 입력 포트의 값을 통과시킨다. (D4, D3) 비트들이 (1, 0)일 때, 제 3 멀티플렉서(508-1)는 중간 결과 회로(506)의 제 1 레지스터의 값을 통과시킨다. (D4, D3) 비트들이 (1, 1)일 때, 제 3 멀티플렉서(508-1)는 중간 결과 회로(506)의 제 2 레지스터의 값을 통과시킨다.
제 3 멀티플렉서(508-2)는 명령 레지스터(502)에 저장된 매크로 명령의 D6 및 D5 비트들에 의해 제어된다. 더 구체적으로, D6 및 D5 비트들은 제 3 멀티플렉서(508-2)를 위해 선택 신호로 사용된다. (D6, D5) 비트들이 (0, 0)일 때, 제 3 멀티플렉서(508-2)는 null 값을 통과시킨다. (D6, D5) 비트들이 (0, 1)일 때, 제 3 멀티플렉서(508-2)는 입력 포트의 값을 통과시킨다. (D6, D5) 비트들이 (1, 0)일 때, 제 3 멀티플렉서(508-2)는 중간 결과 회로(506)의 제 1 레지스터의 값을 통과시킨다. (D6, D5) 비트들이 (1, 1)일 때, 제 3 멀티플렉서(508-2)는 중간 결과 회로(506)의 제 2 레지스터의 값을 통과시킨다.
경로 통과 회로 (510)는 D8 및 D7 비트들에 의해 제어된다. (D8, D7) 비트들이 (0, 0)일 때, 경로 통과 회로(510)는 제 3 멀티플렉서(508-1 내지 508-2)로부터 수신된 값들의 덧셈 동작을 수행한다. (D8, D7) 비트들이 (0, 1)일 때, 통과 회로(510)는 제 3 멀티플렉서(508-1 내지 508-2)로부터 수신된 값들의 곱셈 동작을 수행한다. (D8, D7) 비트들이 (1, 0)일 때, 경로 통과 회로(510)는 제 3 멀티플렉서(508-1)의 값을 통과시킨다. (D8, D7) 비트들이 (1, 1)일 때, 경로 통과 회로(510)는 제 3 멀티플렉서(508-2)의 값을 통과시킨다.
마스크 회로(512)는 경로 통과 회로(510)로부터 수신된 값의 부호 비트를 초기화하거나 부호 비트를 유지하는 것을 허용할 수 있다. 마스크 회로(512)는 명령 레지스터(502)에 저장된 매크로 명령의 D2 비트에 의해 제어된다. 예를 들어, D2 비트가 0이면, 마스크 회로(512)는 경로 통과 회로(510)로부터 수신된 값의 부호 비트를 초기화한다. D2 비트가 1이면, 마스크 회로(512)는 경로 통과 회로(510)로부터 수신된 값의 부호 비트를 그대로 유지한다.
AFU(514)는 마스크 회로(512)의 출력을 수신한다. 도 5를 참조하면, AFU(514)는 보간 회로(520), 제 1 LUT(lookup table)(522), 제 2 LUT(524) 및 제 4 멀티플렉서(526)를 포함한다. AFU(514)는 명령 레지스터(502)에 저장된 매크로 명령의 D1 및 D0 비트들에 의해 제어된다. 예를 들어, D1 비트가 0이면, 제 1 LUT(522) 및 제 2 LUT(524)는 생략된다. D0 비트가 1로 설정되면, 마스크 회로(512)로부터 수신된 신호는 제 1 LUT(522) 및/또는 제 2 LUT(524)를 거치게 된다(예를 들어, 처리된다). D1 비트가 0으로 설정될 때, 제 2 LUT(524)는 마스크 회로(512)로부터 수신된 신호를 처리하기 위한 사용을 위해 선택된다. D1 비트가 1로 설정될 때, 제 1 LUT(522)는 마스크 회로(512)로부터 수신된 신호를 처리하기 위한 사용을 위해 선택된다.
일 실시예에서, AFU(514)를 위해 설명된 아키텍처는 도 1의 AFU(144) 구현을 위해 사용될 수 있다. 예를 들어, 도 1의 AFU(144)는 도시된 바와 같이, 보간 회로 및 멀티플렉서와 함께 조합된 LUT들을 이용하여 구현될 수 있다. 또 다른 예에서, AFU(144)는 도 5에 도시된 바와 같이, 프로세서부(146)와 연결되거나, 결합될 수 있다. 도 1 및 도 5에 설명된 예시들은 단지 설명을 위한 목적으로 제공된 것으로, 본 개시는 이에 제한되지 않는다.
출력 선택 회로(516)는 AFU(514)로부터 수신된 결과들을 출력 포트(518) 또는 중간 결과 회로(506)에 전송하도록 구성된다. 출력 선택 회로(516)는 명령 레지스터(502)에 저장된 매크로 명령의 D10 및 D9 비트들에 의해 제어된다. 예를 들어, (D10, D9) 비트들이 (0, 0)으로 설정될 때, 출력 선택 회로(516)는 AFU(514)로부터 수신된 값을 출력 포트(518)에 제공한다. (D10, D9) 비트들이 (0, 1)인 경우는 남겨둘 수 있다(reserved). (D10, D9) 비트들이 (1, 0)으로 설정될 때, 출력 선택 회로(516)는 AFU(514)로부터 수신된 값을 중간 결과 회로(506)에 있는 제 1 레지스터에 제공한다. (D10, D9) 비트들이 (1, 1)로 설정될 때, 출력 선택 회로(516)는 AFU(514)로부터 수신된 값을 중간 결과 회로(506)에 있는 제 2 레지스터에 제공한다.
도시된 바와 같이, 명령 레지스터(502)에서 적절한 값을 설정하는 것은 처리부(500)에 걸쳐 서로 다른 복수의 동작을 개시한다. 일 실시예에서, 명령 레지스터(502)에 저장된 매크로 명령은 제어부(102)에 의해 지정될 수 있다. 처리부(500)에 제어 신호를 생성하는 단일 매크로 명령을 실행함으로써, 명령 레지스터(502)에 명령을 저장한다.
도 5를 참조하여 설명된 아키텍처는 단지 예시의 목적으로 제공된다. 예를 들어, 처리부(500)는 도시된 것보다 더 적거나 더 많은 구성 요소들을 포함할 수 있다. 또한, 도 5를 참조하여 설명된 매크로 명령 구현은 단지 예시의 목적으로 제공된 것으로, 본 개시는 이에 제한되지 않는다.
도 6은 LSTM(Long Short Term Memory) 셀을 처리하는 일 실시예를 설명하기 위한 기능도(functional diagram)이다. 도 5를 참조하여 설명된 처리부(500)는 도 6에 기재된 동작들을 수행할 수 있다. 도시된 바와 같이, LSTM 셀(600)은 입력 게이트(605), 출력 게이트(610), 망각 게이트(615), 후보 메모리(620) 및 메모리 셀(625)을 포함한다. 도 6에 기재된 기호 ""는 원소별 곱셈(element wise multiplication)을 나타내기 위해 사용된다. 기호 "x"는 벡터 외적(vector product) 동작들을 나타내기 위해 사용된다. 기호 "+"는 원소별 덧셈(element wise add) 동작들을 나타내기 위해 사용된다. 활성화 동작들은 "Sigmoid" 및 "Tanh"로 쓰여진 블록들을 이용하여 나타낸다. 다른 활성화 함수들이 사용될 수 있고, 도 6에 기재된 요소들은 단지 설명의 목적을 위한 것임은 이해되어야 한다.
설명의 목적을 위해, 입력 게이트(605)는 입력 데이터(xt 및 ht - 1)와 가중치들(Wxi 및 Whi)을 수신한다. 입력 게이트(605)는 각 벡터 외적 동작들을 이용하여 입력 데이터 및 가중치들의 벡터 외적을 계산한다. 예를 들어, 처리부(500)는 제어부(102)로부터 복수의 매크로 명령들을 수신한다. 제 1 매크로 명령은 프로세서(500)가 입력 게이트(605)에 대응하는 입력 데이터(xt) 및 가중치(Wxi)를 이용하여 벡터 외적을 계산하는 것을 야기한다. 예를 들어, 입력 데이터 및 가중치들은 벡터 외적들을 생성하기 위해 입력 포트(504)를 통해 수신될 수 있고, 경로 통과 회로(510)에 제공될 수 있다. 벡터 외적들은 중간 결과 회로(506)에 저장될 수 있다. 예를 들어, 제어부(102)로부터 제 1 매크로 명령은 처리부(500)가 16개 벡터 외적을 도출하는, 16개의 LSTM 셀들의 각각을 위한 하나의 벡터 외적을 생성하는 것을 야기한다.
제어부(102)로부터 제 2 매크로 명령에 응답하여, 처리부(500)는 입력 게이트(605)를 위해 입력 데이터(ht -1) 및 가중치(Whi)를 이용하여 벡터 외적을 생성할 수 있다. 입력 포트(504)를 통해 수신된 입력 데이터 및 가중치들은 벡터 외적을 생성하기 위해 경로 통과 회로(510)에 의해 처리될 수 있고, 중간 결과 회로(506)에 저장될 수 있다. 또한, 처리부(500)는 제 2 명령에 응답하여, 16개 LSTM 셀들의 각각을 위해 하나의 벡터 외적을 생성할 수 있다.
제어부(102)로부터 제 3 매크로 명령은 입력 게이트(605)가 처리를 계속하기 위해, 처리부(500)가 제 1 매크로 명령 및 제 2 매크로 명령을 이용하여 생성된 벡터 외적들을 더하는 것을 야기한다. 처리부(500)는 중간 결과 회로(506)로부터 벡터 외적들을 읽을 수 있고, 경로 통과 회로(510)를 이용하여 벡터 외적을 더할 수 있다. 합산된 벡터 외적들은 다시 중간 결과 회로(506)에 저장될 수 있다. 제어부(102)로부터 제 4 매크로 명령은 프로세서(500)가 합산된 벡터 외적들에 활성화 함수(예를 들어, 입력 게이트(605)의 Sigmoid 동작)를 적용하는 것을 야기한다. 예를 들어, 합산된 벡터 외적들은 중간 결과 회로(506)로부터 읽힐 수 있고, 통과되고, 사용 가능한 활성화 함수를 적용할 수 있는 AFU(514)를 이용하여 처리될 수 있다. 적용되어야 하는 특정 활성화 함수가 수신된 매크로 명령에 의해 지정되는 것임은 이해되어야 한다. 예를 들어, AFU(514)에서 사용되는 특정 LUT에 기초하여, 적용되는 활성화 함수와는 다를 것이다.
처리부(500)는 입력 게이트(605)를 참조하여 설명된 바와 같이, 다른 게이트들(610, 615)의 각각 및 후보 메모리(620)를 위해 동작들을 수행할 수 있다. 각 매크로 명령의 실행은 복수의 주기들을 거쳐 수행되어야 할 복수의 동작들을 야기한다. 도 5 내지 도 6에 도시된 바와 같이, 매크로 명령들은 수행된 동작들 및 설명된 동작들을 수행하기 위해 처리부(500)를 통한 데이터 라우팅을 제어할 수 있다.
도 7은 신경 네트워크 프로세서의 행렬 곱셈부의 일 실시예를 설명하기 위한 블럭도이다. 행렬 곱셈부(matrix multiply unit, MMU)(700)는 하나 이상의 출력 특징 맵들의 대응하는 영역을 생성하기 위해, 하나 이상의 입력 특징 맵들의 사각형 부분에 동작할 수 있다. MMU(700)는 NN 프로세서에 통합될 수 있다. 일 실시예에서, MMU(700) 또는 MMU(700)의 일부는 AAC 어레이(106)의 요소로서 사용될 수 있다. 다른 일 실시예에서, 포스트 프로세서(724)에 포함된 기능에 따라, MMU(700)는 NN 프로세서를 구현하는 데 사용될 수 있다. 언급된 바와 같이, NN 프로세서는 통합 회로로 구현될 수 있다. 이와 같이, 도 7에 기재된 다양한 블록들은 이러한 프로세서 또는 유닛의 회로를 나타낸다.
일 측면에서, 신경 네트워크의 다음 층을 위해, 각 입력 특징 맵의 출력 특징 맵들에 곱해지는 기여도(contribution)를 생성하기 위해, 하나 이상의 행렬 곱셈이 각 입력 특징 맵에 적용될 때, MMU(700)는 스캐터 모드에서 동작할 수 있다. 각각 처리된 입력 맵은 여러 출력 맵들에 흩어진다. 다른 측면에서, 여러 입력 특징 맵들이 컨벌브되고, 이 결과들이 단일 출력 특징 맵에 출력을 생성하기 위해 조합될 때, MMU(700)는 수집 모드로 동작할 수 있다.
신경 네트워크의 N+1 층에서 모든 특징 맵들을 생성하기 위해, 신경 네트워크의 N 층으로부터 모든 특징 맵들을 처리하기 위해서는, MMU(700)는 스캐터 및 수집 행렬 곱셈 동작들의 조합을 이용할 수 있다. 사용하기 위한 어느 모드의 선택은, 네트워크 최적화 유틸리티에 의해, 전체 연산량 및 다음 층을 생성하는 것이 유지되기 위한 중간 데이터의 풋프린트(footprint) 저장소가 최소화되는 것으로 지정된다.
MMU(700)는 제어부(704)를 포함한다. 제어부(704)는 처리되고 있는 하나 이상의 입력 특징 맵들의 현재 (x, y) 위치들의 데이터 표현(data representative)(예를 들어, 제 1 데이터 세트) 및 적용되어야 하는 하나 이상의 메트릭(가중치)(예를 들어, 제 2 데이터 세트)을 정의하는 가중치 테이블(708)을 저장하는, 하나 이상의 레지스터들(706)을 포함한다. 또한, MMU(700)는 레지스터들(706) 중에서, 하나 이상의 메트릭의 특정 세트로부터 하나 이상의 입력 특징 맵들로부터 하나 이상의 출력 특징 맵들을 생성하는 출력을 지시하기 위해, 행렬을 적용하는 입력 데이터 및 누적기(720)에서 누적기들을 특정하는 하나의 레지스터를 포함할 수 있다. 제어부(704)는 "실행 서열(execution sequence)"로 언급되는 명령들의 서열을 저장 및/또는 실행할 수 있다. 메트릭의 데이터 표현 및 실행 서열의 구체적이 내용은 이하에서 도 10을 참조하여 설명된다.
또한, MMU(700)는 데이터 저장부(702), 정렬기/변환기들(710, 712), 가산기 어레이들(714, 716, 718) 누적기(720), 변환기(722), 포스트 프로세서(724)를 포함한다. 제어부(704) 및 데이터 저장부(702)는 입력을 수신하기 위한 메모리 인터페이스와 연결된다. 제어부(704)는 입력으로 가중치 선택 신호를 수신하고, 이에 응답하여, 입력 특징 맵들을 어드레싱하기 위해 데이터 저장부(702)에 주소를 출력한다. 또한, 제어부(704)는 출력으로, 정렬기/변환기들(710, 712)에 현재 (x, y)위치, 현재 행렬의 가중치와 관련된 (x, y) 오프셋 및 입력/출력 맵 주소들을 의미하는 선택 필드들을 제공한다.
제어부(704)로부터 주소 데이터에 기초하여, 데이터 저장부(702)는 입력 특징 맵 데이터를 정렬기/변환기들(710, 712)에 제공한다. 입력 특징 맵의 제공된 부분들은 현재 (x, y)위치 및 현재 행렬의 가중치와 관련된 y-오프셋에 기초하여 수직적으로 정렬된다. 정렬기/변환기들(710, 712)는 입력 특징 맵의 수신된 부분들을 수평적으로 정렬하고, 일부 실시예에서, 수치적인 포맷 변환을 수행한다. 예를 들어, 정렬기/변환기들(710, 712)는 수들을 선형 포맷에서 로그 또는 LNS 포맷으로 변환할 수 있다. 또 다른 실시예에서, 정렬기/변환기들(710, 712)이 다른 변환 동작들을 수행할 필요가 없도록, MMU(700)는 특징 맵들 및/또는 가중치들을 LNS 포맷에서 수신할 수 있다.
특징 맵들의 수평적 또는 수직적으로 정렬된 부분들은 가산기 어레이들(714, 716)의 제 1 세트에 제공된다. 출력은 누적기(720)에서 생성된 결과들을 저장하는 가산기 어레이(718)에 제공된다. 누적기(720)는 그 출력을 변환기(722)에 제공한다. 일 실시예에서, 변환기(722)는 고정 소수점 포맷 값을 부동 소수점 포맷 값들로 변환한다. 변환기(722)는 데이터 저장부(702)에서 생성된 출력을 저장할 수 있다.
하나 이상의 실시예들에서, MMU(700)는 포스트 프로세서(724)를 포함한다. 포스트 프로세서(724)는 행렬 곱셈 결과를 처리할 수 있다. 포스트 프로세서(724)는 하나 이상의 풀링부, 서브-샘플링부 및/또는 재규격화부(renormalization units)를 포함할 수 있다.
동작의 스캐터 모드에서, MMU(700)는 출력 특징 맵들과 대응하는 부분을 생성하기 위해 하나의 입력 특징 맵의 사각형 영역에 동작할 수 있다. 이러한 경우, 데이터 저장부(702)에 저장된 MMU(700)의 입력들은 행렬 가중치들 및 입력 특징 맵의 사각형 부분이다. 예를 들어, 가중치들은 각 가중치를 위한 수평적 또는 수직적 구성 요소들의 이동 위치에 대응하도록 포맷된다. 또한, 언급된 바와 같이, 가중치들은 LNS 포맷에서 지정될 수 있다. 또한, 0에 대응하는 가중치들은, 처리될 필요가 없기 때문에, 포함되지 않는다. 또한, 입력 특징 맵은 LNS 포맷으로 저장될 수 있다.
MMU(700)는 각 주기마다 영역으로 불리는 입력 특징 맵의 사각형 경로에 N(예를 들어, 4 또는 8) 가중치들을 적용할 수 있다. 예를 들어, 영역은 16x16이다. MMU(700)는, 1024개 가중치 적용된 샘플들을 생성하기 위해, 한 주기에 4개 가중치들을 한 영역에 적용할 수 있다. 가중치들은 16x16 입력 영역 및 기여도(일반적으로 행렬에 근접한 한 주기에서 적용된 쌍 또는 가중치들로부터)의 쌍들을 합산한, 적절한 로그-가산기의 입력에 곱해진 결과들 각각에 적용된다.
MMU(700)가 로그 공간에서 동작할 때, 가중치들은 덧셈 동작을 수행하여, 입력 데이터에 적용된다. MMU(700)는 표준 덧셈 동작들(standard add operations)을 교체하기 위해, 로그-가산(log(A) 및 log(B)의 함수를 log(A+B)으로 교체)을 사용한다. 이러한 로그-가산들은 함수 log(1+2x)의 구분적 선형 근사(piecewise linear approximation)를 이용하여 수행될 수 있다.
일 실시예에서, 높은 정밀도 덧셈 동작들을 요구하는 큰 가중치들은 오프라인 네트워크 최적화 유틸리티에 의해 한 주기에 처리될 수 있는 가중치의 부분에 대응하는 여러 가중치들로 압축 해제된다. MMU(700)는 로그-가산기와 함께 구현되는 누적 단계에 분리된 기여도를 합산할 수 있다.
또 다른 실시예에서, 추가적인 로직은 log(0)에 대응하는 입력 특징 맵 데이터를 추적 및/또는 검출하고, 최종 결과에 기여도가 없는 영역들이 있으므로, 행렬에서 우회되거나 건너뛰게 되는 영역들을 야기한다. 제로 특징 맵 값들 및/또는 가중치들의 추적 영역들에서, 처리 주기들은 평균 처리량을 증가하도록 제거된다.
가중치들의 세트가 한 주기에 적용되고, 결과들의 각 쌍이 함께 합산된 후, 이 결과들은 하나로 누적된 결과가 생성될 때까지 반복적으로 짝을 지어 합산되고, 적절한 목표 출력 맵의 중간 결과(내부 저장소의 형태로 유지되는)에 추가된다. 일단 모든 행렬 곱셈은 주어진 입력 특징 맵에 대해 수행되고, 입력 특징 맵을 위해 필요한 저장소는 새로운 중간 결과들(새로운 출력 특징 맵들)을 생성하기 위해 풀리고(released), 재순환된다.
컨벌브된 입력 특징 맵들이 이와 대응하는 출력 특징 맵들에 대해, 누적기(720)의 적절한 누적기들에 가산된 후, 이 누적된 결과들은 신경 네트워크 정의에 따라 처리된다. 일반적으로, 포스트 프로세서(724)는 활성화 함수를 적용한다. 활성화 함수는 포스트 프로세서(724)에 의해 구분적 선형 근사로 적용될 수 있다. 더 나아가, 포스트 프로세서(724)는 다음 층의 특징 맵의 최종 값을 생성하기 위해, 최대 또는 평균 풀링, 서브-샘플링 및/또는 국소 재규격화 동작들을 수행할 수 있다. 또한, 이러한 동작들은 매우 최적화된 연산 및 이에 대응하는 실리콘 영역의 감소 및 향상된 전력 효율성을 야기하는 LNS에서 수행될 수 있다.
도 8은 행렬 곱셈부와 함께 사용하기 위한 로그 가산기의 일 실시예를 설명하기 위한 블럭도이다. 로그 가산기(800)는 도 7의 가산기 어레이들(714, 716 또는 718)의 구성 요소들 중 하나와 대응할 수 있다. 다른 측면에서, 로그 가산기(800)는 로그 도메인에서 AAU들(130)이 동작할 때, AAU들(130)에 있는 구성 요소들 중 하나를 구현하기 위해 사용될 수 있다. 로그 가산기(800)는 합산의 로그로 근사화된 출력(예를 들어, 주어진 입력 log(A) 및 log(B)에 대해 log(A+B))을 계산할 수 있다. 로그 가산기(800)는 회로 블록(802, 804, 806), 제 3 LUT(808), 레지스터(810), 보간부(812), 제 4 멀티플렉서(814), 제 5 멀티플렉서(816), 가산기(818) 및 레지스터(820)를 포함한다.
회로 블록(802)은 log(A) - log(B)를 계산할 수 있고, 분리된 출력들로, 결과의 부호 및 크기를 제공할 수 있다. 회로 블록들(804, 806)은 크기 출력을 수신하고, 룩업 테이블 및 보간 동작을 수행하는 로직을 우회하는데 사용되는 사용 높고 낮은 값들에 크기를 각각 비교한다. 우회 값들은 0 또는 원본 크기 값 중 하나이다. 우회 경로가 주어지지 않으면, 크기 출력은 구분적 선형 근사를 이용하여 log(l +2x)를 근사화하기 위한 보간을 수행하기 위해, 제 3 LUT(808) 및 보간부(812)에 통과되고, 이때 x는 log(A) - log(B)의 절대값을 나타낸다. 부호 출력은 제 5 멀티플렉서(816)에 통과되고, 또한 로그 가산기(800)의 출력(820)의 부호를 결정하는 데 이용된다.
가산기(818)는 제 4 멀티플렉서(814) 및 제 5 멀티플렉서(816)의 출력들을 입력으로 수신하고, 출력으로 합산을 계산한다. 합계는 레지스터(820)에 저장된다. 제 4 멀티플렉서(814)는 회로 블록들(804, 806)에 의해 생성된 우회 신호에 기초하여, 회로 블록들(804, 806) 또는 보간부(812)의 출력 중 하나를 선택적으로 제공한다. 즉, 다시 말해서 제 4 멀티플렉서(814)는 우회 신호에 응답하여 제 1 입력을 통과시키거나, 그렇지 않으면 제 2 입력을 제공 또는 통과시킨다. 제 5 멀티플렉서(816)는 log(A) - log(B)의 부호에 기초하여, 선택적으로 log(A) 또는 log(B) 중 하나를 출력으로 제공한다. 즉, 제 5 멀티플렉서(816)는 양의 값을 의미하는 부호 출력에 응답하여, log(A)를 제공하고, 음의 값을 의미하는 부호 출력에 응답하여, log(B)를 제공한다.
도 9는 신경 네트워크 프로세서의 행렬 곱셈부의 또 다른 실시예를 설명하기 위한 블럭도이다. MMU(900)는 도 7을 참조하여 설명된 MMU(700)와 실질적으로 유사하다. 도시된 바와 같이, MMU(900)는 레지스터(906)를 갖는 제어부(904), 가중치 테이블(908), 데이터 저장부(902), 배열기들(910, 912), 곱셈 어레이들(915, 916), 누적기(920), 변환기(922) 및 포스트 프로세서(924)를 포함한다. MMU(900)는 MMU(700)와 다르게, 선형 숫자들을 이용하여 동작한다. 따라서, 정렬기/변환기들(710, 712)은 정렬기들(910, 912)과 대체된다. 또한, 가산기 어레이들(714, 716)은 누적기(920)에 결과들을 저장하는 곱셈 어레이들(914, 916)과 대체된다.
도 10은 행렬 곱셈부를 위한 실행 테이블의 일 실시예를 설명하기 위한 도면이다. 실행 테이블(1002)은 MMU에 의해 실행될 수 있는 명령들의 실행 서열을 나타낸다. 메트릭(M0, M1)은 동일하거나 유사한 값들(예를 들어, A 구성 요소들)을 갖는 여러 구성 요소들 및 0 요소들을 가진다. 실행 테이블(1002)은 효율적인 방식으로 출력 특징 맵들을 계산하기 위한 동작들을 생성하기 위한 특성들을 고려한다.
실행 테이블(1002)의 제 1 열은 실행 단계 수를 나타낸다. 실행 테이블(1002)의 제 2 열은 적절한 행렬의 가중치들의 값을 나타낸다. 실행 테이블(1002)의 제 3 열은 특징 맵의 현재 x 위치에 추가할 x 오프셋들을 나타낸다. 실행 테이블(1002)의 제 4 열은 값과 함께 특징 맵에 가중치를 주기 위해, 특징 맵의 현재 y 위치에 추가할 y 오프셋들을 나타낸다. 이러한 방식으로, x 오프셋 및 y 오프셋 값은 입력 특징 맵들에서 윈도우를 이동시키기 위해 기준 주소를 갱신한다. 윈도우는 가중치들이 적용되기 이전 또는 이후에 이동될 수 있다.
실행 테이블(1002)의 제 5 열은 가중치가 적용되어야 하는지 여부를 나타낸다. 예를 들어, 입력 특징 맵 데이터가 이미 이전 단계에서 가중치와 곱해진 경우, 가중치는 선택될 수 있으나, 적용되지 않는다. 가중치들을 적용한 후, 적절한 정렬을 통해 완수될 수 있다. 실행 테이블(1002)의 제 6 열은 다수의 입력 특징 맵들로부터 특징 맵의 선택을 나타낸다. 실행 테이블(1002)의 제 7 열은 결과를 적용하기 위해, 다수의 출력 특집 맵들로부터 특징 맵의 선택(예를 들어, 특정 누적기와 대응하는)을 나타낸다.
예를 들어, 입력 특징 맵 선택들이 동일한 경우, 도 7 또는 도 9에 관련하여 설명된 MMU는 스캐터 모드에서 동작한다. 입력 특징 맵 선택들이 다르고, 출력 특징 맵 선택들이 동일한 경우, MMU는 수집 모드에서 동작한다. 이러한 경우, MMU는 스캐터, 수집 및 일대일 모드들에서 동적으로 동작할 수 있다. 모드의 선택은, 연산량 및/또는 중간 저장소 부담을 줄이는 것에 기초로 할 수 있다. 또한, 도 10의 예를 들어, 실행 테이블(1002)은 합쳐진 두 메트릭들(M0, M1)을 위한 서열을 나타냄으로써, 가중치 A가 M0에는 두번 사용되고, M1에는 한번 사용되었음에도 불구하고, 가중치 A가 한번 적용될 수 있는 방법을 설명한다.
도 11은 일 실시예에 따라 행렬 곱셈부의 동작을 설명하기 위한 도면이다. 예를 들어, 도 11은 본 개시의 도 7 및/또는 도 9를 참조하여 설명된 MMU의 동작을 설명한다.
메모리(1102)는 입력 특징 맵 데이터를 저장한다. 일 실시예에서, 메모리(1102)는 SRAM(예를 들어, 제 1 메모리부(110) 또는 데이터 저장부(702 또는 904))과 일치할 수 있고, 128x32 구성 요소들의 2개 뱅크들을 포함할 수 있다. MMU는 제 1 가중치 w0를 위해 결정된 주소 y_current + y_offset 에 기초하여, 제 1 데이터 세트에 접근한다. 제 1 데이터 세트는 처리를 위한 제 1 데이터 세트를 수직으로 정렬하기 위해, 버퍼들(1104)에 저장된다. MMU는 제 2 가중치 w1를 위해 결정된 주소 y_current + y_offset 에 기초하여, 제 2 데이터 세트에 접근한다. 제 2 데이터 세트는 처리를 위한 제 2 데이터 세트를 수직으로 정렬하기 위해, 버퍼들(1106)에 저장된다.
버퍼들(1104, 1106)은 데이터를 수평으로 정렬하기 위해, 각 회로 블록들(1108, 1110)에 데이터를 통과시키고, 일부 실시예에서, 부동 소수점 형식을 고정 소수점 형식으로 변환한다. 회로 블록들(1108, 1110)의 수직적이고 수평적인 정렬된 데이터는 가중치들 w0 및 w1에 대응하는 특징 맵을 추가하기 위해, 회로 블록들(1112, 1114)에 통과된다. 예를 들어, 특징 맵 데이터는 버퍼들(1116, 1122)에 저장된다. 버퍼링된 데이터는 가산기들(1118, 1124)에 입력으로 통과된다. 가산기들(1118, 1124)은 가중치들 w0 및 w1에 대응하는 제 2 입력으로 수신한다. 왜냐하면, 일부 실시예들에서, 데이터는 LNS 형식에서, 데이터의 추가는 선형 수 시스템에서 곱셈과 일치하기 때문이다.
선형 수들이 사용되는 실시예에서, 가산기들(1118, 1124)은 곱셈기들과 교체될 수 있다. 가산기들(1118, 1124)의 로그 가산기(1128)에 입력으로 제공되는 출력들은 버퍼들(1120, 1126)에 저장된다. 일 실시예에서, 로그 가산기(1128)는 도 8의 로그 가산기(800)와 일치할 수 있다. 도 11에 도시된 바와 같이, 블록들(1112, 1114)은 병렬로 덧셈을 수행할 수 있는 가산기들의 어레이를 형성한다. 선형 수들이 사용되는 실시예에서, 곱셈기들의 출력들은 로그 가산기(1128)와 함께 누적기에 제공될 수 있다.
일 실시예에서, 선택된 가중치들은 다른 것보다 더 정밀하게 적용될 수 있다. 선택된 가중치들은 동일한(예를 들어, 단일) 행렬에서도 다른 가중치들보다 더 정밀하게 적용될 수 있다. 예를 들어, MMU는 가중치/시퀀서 스트림(sequencer stream)(예를 들어, 도 10)을 생성하는 소프트웨어 컴파일러에 의해, 더 높은 정밀도 동작을 지원할 수 있다. 소프트웨어 컴파일러는 높은 정밀도 가중치들을 2 또는 더 낮은 정밀도 가중치들로 분할할 수 있다. 예를 들어, 가중치들은 짧은 부동 소수점일 수 있고, 2배 높은 정밀도 가중치의 반을 위한 지수 필드는 기본 동작을 위해 사용되는 정밀도의 비트의 수에 의해 증가될 수 있다. 만약, MMU가 5비트를 더하면, 상위 절반 가중치의 지수의 상위 절반은 5에 의해 증가될 수 있고, 가수의 상위 5비트들의 가수 필드일 수 있다. 이때, 두 절반들은 결국 동일한 누적기로 이동되기 때문에, 가중치의 하위 절반과 함께 수행되거나 적용될 필요가 없는, 다른 순서로 적용된 다른 가중치가 된다. 가중치의 두 절반들을 적용할 때 분리를 허용함으로써, MMU는 중복해서 가중치의 한 절반으로 곱하는 것을 피하기 위해, 낮은 절반들 및 높은 절반들처럼 모일 수 있다. 일 실시예에서, 정밀도는 지수 필드 수로 확장될 수 있다, 예를 들어, 만약 MMU가 반복적으로 5 비트를 추가한다면, 결국 MMU는 오버 플로우 없이 지수 필드에 더 많은 5 비트들을 추가할 수 없다.
도면에서 본 개시를 명확하게 설명하기 위해서 설명과 관계없는 부분은 생략하였으며, 명세서 전체를 통하여 유사한 부분에 대해서는 유사한 도면 부호를 붙였다.
또한, 본 개시에서 사용된 용어는 단지 특정한 실시 예를 설명하기 위해 사용된 것이며, 본 개시를 한정하려는 의도로 사용되는 것이 아니다.
본 개시에 기재된, 단수의 표현은 문맥상 명백하게 단수를 뜻하지 않는 한, 복수의 의미를 포함한다. 본 개시에 기재된, "또 다른"은 적어도 2 이상을 의미한다. 본 개시에 기재된, "적어도 하나", "하나 이상" 및 "및/또는"이란 용어들은 다른 언급이 없는 한, 개방형 표현이다. 예를 들어, "A, B 및 C 중 적어도 하나", "A, B 또는 C 중 적어도 하나", "A, B 및 C 중 하나 이상", "A, B 또는 C 중 하나 이상" 및 "A, B 및/또는 C"는 A 단독, B 단독, C 단독, A 및 B, A 및 C, B 및 C 또는, A, B 및 C를 의미한다. 본 개시에 기재된, "자동으로"라는 용어는 사용자의 개입이 없는 것을 의미한다.
본 개시에 기재된, "컴퓨터 판독 가능 매체"는 컴퓨터에 의해 액세스될 수 있는 임의의 기록 매체일 수 있고, 휘발성 및 비휘발성 매체, 분리형 및 비분리형 매체를 포함할 수 있다. 컴퓨터 판독 가능 매체는 마그네틱 저장매체, 예를 들면, 롬, 플로피 디스크, 하드 디스크 등을 포함하고,) 광학적 판독 매체, 예를 들면, 시디롬, DVD 등과 같은 저장 매체를 포함할 수 있으나, 이에 제한되지 않는다. 또한, 컴퓨터 판독 가능 매체는 컴퓨터 저장 매체 및 통신 매체를 포함할 수 있다
또한, 명세서 전체에서, 어떤 부분이 다른 부분과 "연결"되어 있다고 할 때, 이는 "직접적으로 연결"되어 있는 경우뿐 아니라, 그 중간에 다른 소자를 사이에 두고 "전기적으로 연결"되어 있는 경우도 포함한다. 또한 어떤 부분이 어떤 구성 요소를 "포함"한다고 할 때, 이는 특별히 반대되는 기재가 없는 한 다른 구성 요소를 제외하는 것이 아니라 다른 구성 요소를 더 포함할 수 있는 것을 의미한다.
본 실시예들에서 사용되는 "구성된다" 또는 "포함한다" 등의 용어는 명세서 상에 기재된 여러 구성 요소들, 또는 여러 단계들을 반드시 모두 포함하는 것으로 해석되지 않아야 하며, 그 중 일부 구성 요소들 또는 일부 단계들은 포함되지 않을 수도 있고, 또는 추가적인 구성 요소 또는 단계들을 더 포함할 수 있는 것으로 해석되어야 한다.
본 실시예들에서 사용되는 "~에 응답하여"용어는 동작 또는 이벤트에 기꺼이 응답하거나 반응하는 것을 의미한다. 그러므로, 만약 제 2 동작이 제 1 동작에 응답하여 수행된 경우, 제 1 동작의 발생과 제 2 동작의 발생간 인과 관계가 존재한다. "~에 응답하여"용어는 인과 관계를 의미한다.
본 명세서에서 다양한 곳에 등장하는 "일부 실시예에서" 또는 "일 실시예에서" 등의 어구는 반드시 모두 동일한 실시예를 가리키는 것은 아니다. 또한, 본 개시에 기재된, "실시간(real-time)"은 사용자 또는 시스템이 특정 프로세스 또는 프로세서가 어느 외부 프로세스를 인식하기 위한 판단을 위해, 충분히 빨리 감지하는, 처리 반응성의 정도를 의미한다.
본 개시에 기재된, "출력"은 물리적 메모리 요소들(예를 들어, 디스플레이 또는 다른 외부 출력 장치에 쓰거나, 다른 시스템에 전송하는 장치들 및 이와 유사한 장치들)에 저장되는 것을 의미한다.
본 개시에 기재된, "프로세서"는 프로그램 코드에 포함된 명령들을 수행하기 위해 구성되는 하나 이상의 하드웨어 회로를 의미한다. 하드웨어 회로는 IC(Integrated Circuit)일 수 있다. 프로세서는 CPU(central processing unit), GPU(graphics processing unit), 배열 프로세서, 벡터 프로세서, DSP(digital signal processor), FPGA(field-programmable gate array), PLA(programmable logic array), ASIC(application specific integrated circuit), 프로그램 가능한 논리 회로, 컨트롤러 등을 포함할 수 있으나, 이에 제한되지 않는다.
또한, 제1, 제2 등의 용어는 다양한 구성 요소들을 설명하는데 사용될 수 있지만, 구성 요소들은 이 용어들에 의해 한정되어서는 안 된다. 이 용어들은 하나의 구성 요소를 다른 구성 요소로부터 구별하는 목적으로 사용된다.
컴퓨터 프로그램 제품은 프로세서가 본 개시의 측면들을 수행하는 것을 야기하기 위해, 컴퓨터 판독 가능 프로그램 명령들을 포함하는 컴퓨터 판독 가능 매체(또는 미디어)를 포함할 수 있다. 본 개시에 기재된, "프로그램 코드"용어는 "컴퓨터 판독 가능 프로그램 명령들"과 혼용하여 사용되었다. 본 개시에 기재된, 컴퓨터 판독 가능 프로그램 명령들은 컴퓨터 판독 가능 매체 또는 외부 컴퓨터 또는 외부 저장 장치로부터 네트워크를 통해, 각각 컴퓨팅/프로세싱 장치에 다운로드될 수 있고, 이때 네트워크는 예를 들어, 인터넷, LAN, WAN 및/또는 무선 네트워크일 수 있다. 네트워크는 구리 전송 케이블들, 광 섬유, 무선 전송, 라우터, 방화벽, 스위치, 게이트웨이 컴퓨터 및/또는 엣지 서버를 포함하는 엣지 장치들을 포함할 수 있다. 각 컴퓨팅/프로세싱 장치에 있는 네트워크 어댑터 카드 또는 네트워크 인터페이스는 네트워크로부터 컴퓨터 판독 가능 프로그램 명령들을 수신하고, 각 컴퓨팅/프로세싱 장치에 있는 컴퓨터 판독 가능 저장 매체에 저장하기 위해, 컴퓨터 판독 가능 프로그램 명령을 전달한다.
본 개시에 기재된 동작들을 수행하기 위한 컴퓨터 판독 가능 프로그램 명령들은 어셈플러 명령어, 명령어 집합 아키텍처(instruction-set-architecture, ISA) 명령어, 기계 명령어, 기계 종속 명령어, 마이크로코드, 펌웨어 명령어 또는 다른 소스 코드 또는 객체 지향 프로그래밍 언어 및/또는 절차 지향 프로그래밍 언어를 포함하는, 다른 프로그래밍 언어의 임의의 조합으로 쓰여진 객체 코드일 수 있다. 컴퓨터 판독 가능 프로그램 명령들은 상태-설정 데이터를 지정할 수 있다. 컴퓨터 판독 가능 프로그램 명령들은 독립형 소프트웨어 패키지로 사용자의 컴퓨터에서 전체 또는, 사용자의 컴퓨터에서 일부가 실행될 수 있고, 사용자의 컴퓨터에서 일부와 원격 컴퓨터에서 일부가 실행될 수 있고, 원격 컴퓨터 또는 서버에서 전체가 실행될 수 있다. 마지막 시나리오에서, 원격 컴퓨터는 LAN 또는 WAN를 포함하는 네트워크의 임의의 종류를 통해 사용자의 컴퓨터에 연결될 수 있고, 연결은 외부 컴퓨터로 이루어질 수 있다(예를 들어, 인터넷 서비스 제공자를 이용한 인터넷을 통해). 이러한 경우들에서, 본 개시를 실시하기 위한, 전자 회로의 개인화를 위해 컴퓨터 판독 가능 명령들의 상태 정보를 이용함으로써, 프로그램 가능한 논리 회로, FPGA 또는 PLA를 포함하는 전자 회로는 컴퓨터 판독 가능 명령들을 실행할 수 있다.
또한, 도면에 도시된 구성 요소들 간의 연결 선 또는 연결 부재들은 기능적인 연결 및/또는 물리적 또는 회로적 연결들을 예시적으로 나타낸 것일 뿐이다. 실제 장치에서는 대체 가능하거나 추가된 다양한 기능적인 연결, 물리적인 연결, 또는 회로 연결들에 의해 구성 요소들 간의 연결이 나타내어질 수 있다.
본 개시의 실시예들과 관련된 기술 분야에서 통상의 지식을 가진 자는 상기 기재의 본질적인 특성에서 벗어나지 않는 범위에서 변형된 형태로 구현될 수 있음을 이해할 수 있을 것이다.
본 개시는 다양한 변환을 가할 수 있고 여러 가지 실시 예를 가질 수 있는바, 본 개시는 명세서에 기재된 특정한 실시 형태에 의해 한정되는 것이 아니며, 본 개시의 사상 및 기술 범위에 포함되는 모든 변환, 균등물 내지 대체물이 본 개시에 포함되는 것으로 이해되어야 한다. 그러므로, 개시된 실시예들은 한정적인 관점이 아닌 설명적 관점에서 이해되어야 한다.
본 실시예의 범위는 상기 상세한 설명보다는 후술하는 특허청구범위에 의하여 나타내어지며, 특허청구범위의 의미 및 범위 그리고 그 균등 개념으로부터 도출되는 모든 변경 또는 변형된 형태가 포함되는 것으로 해석되어야 한다.

Claims (19)

  1. 신경 네트워크를 신경 네트워크 프로세서의 제어부에 구현하기 위한 매크로 명령을 수신하고, 상기 매크로 명령은 제 1 데이터 세트, 제 2 데이터 세트, 신경 네트워크에 대한 매크로 동작 및 상기 매크로 동작을 수행하기 위한 동작의 모드를 의미하는 것인 단계; 및
    상기 동작의 모드에 기초하여, 상기 제 1 데이터 세트에 상기 제 2 데이터 세트를 적용함으로써, 상기 신경 네트워크 프로세서의 처리부를 이용한 상기 매크로 동작을 자동으로 착수하는 단계;
    를 포함하는 방법.
  2. 제 1 항에 있어서,
    상기 매크로 동작은 컨볼루션 및 동작의 수집 모드 및 동작의 스캐터 모드로 이루어진 그룹으로부터 선택된 동작의 모드를 포함하는, 방법.
  3. 제 1 항에 있어서,
    상기 매크로 동작은 컨볼루션 및 벡터 외적들로 이루어진 그룹으로부터 선택된 동작의 모드를 포함하는, 방법.
  4. 제 3 항에 있어서,
    상기 매크로 동작은 컨볼루션, 선택된 특징 맵의 영역의 선택된 영역인 상기 제 1 데이터 세트 및 선택된 커넬의 복수의 가중치들인 상기 제 2 데이터 세트를 포함하는, 방법.
  5. 제 3 항에 있어서,
    상기 매크로 동작은 벡터 외적들, 복수의 특징 분류 값들인 상기 제 1 데이터 세트 및 상기 신경 네트워크의 특징 분류 층을 위한 복수의 가중치들인 상기 제 2 데이터 세트를 포함하는, 방법.
  6. 제 1 항에 있어서,
    상기 매크로 동작은 LSTM(Long Short Term Memory) 셀의 게이트를 평가하는 것을 포함하는, 방법.
  7. 제 1 항에 있어서,
    상기 매크로 동작은 누적된 데이터 및 복수의 활성화 함수들로부터 선택된 활성화 함수를 나타내는 동작의 모드에 활성화 함수를 적용하는 것을 포함하는, 방법.
  8. 제 1 항에 있어서,
    상기 처리부는 로그 도메인에서 상기 매크로 동작을 수행하는 것인, 방법.
  9. 제 1 항에 있어서,
    상기 동작의 모드는 상기 매크로 동작을 수행할 때, 상기 처리부에 의해 사용된 복수의 서로 다른 수치적 정밀도들로부터 선택된 수치적 정밀도를 나타내는 것인, 방법.
  10. 제 9 항에 있어서,
    상기 매크로 동작은 상기 선택된 수치적 정밀도에 기초하여, 상기 제 1 데이터 세트에 상기 제 2 데이터 세트의 각 아이템의 선택된 부분을 적용하는 것인, 방법.
  11. 매크로 명령을 수신하고, 상기 매크로 명령은 제 1 데이터 세트, 제 2 데이터 세트, 신경 네트워크에 대한 매크로 동작 및 상기 매크로 동작을 수행하기 위한 동작의 모드를 의미하는 것인, 제어부;
    상기 제어부에 연결되어, 상기 제 1 데이터 세트 및 상기 제 2 데이터 세트를 저장하는, 메모리부; 및
    상기 메모리부에 연결되어, 상기 동작의 모드에 기초하여, 상기 제 1 데이터 세트에 상기 제 2 데이터 세트를 적용함으로써, 상기 매크로 동작을 자동으로 착수하는 처리부;
    를 포함하는, 장치.
  12. 제 11 항에 있어서,
    상기 처리부는,
    컨볼루션을 수행하고, 상기 동작의 모드는 동작의 스캐터 모드 및 동작의 수집 모드로 이루어진 그룹으로부터 선택된 것인, 연산 누적 어레이;
    를 포함하는, 장치.
  13. 제 11 항에 있어서,
    상기 처리부는,
    매크로 동작을 수행하고, 상기 매크로 동작은 동작의 컨볼루션 및 벡터 외적들로 이루어진 그룹으로부터 선택된 것인, 연산 누적 어레이;
    를 포함하는, 장치.
  14. 제 11 항에 있어서,
    상기 매크로 동작은 LSTM(Long Short Term Memory) 셀의 게이트를 평가하는 것을 포함하는, 장치.
  15. 제 11 항에 있어서,
    상기 처리부는,
    누적된 데이터 및 복수의 활성화 함수들로부터 선택된 활성화 함수를 나타내는 동작의 모드에 활성화 함수를 적용하는, 활성화 함수부;
    를 포함하는, 장치.
  16. 제 11 항에 있어서,
    상기 처리부는 로그 도메인에서 상기 매크로 동작을 수행하는 것인, 장치.
  17. 제 11 항에 있어서,
    상기 동작의 모드는 상기 매크로 동작을 수행할 때, 상기 처리부에 의해 사용된 복수의 서로 다른 수치적 정밀도들로부터 선택된 수치적 정밀도를 나타내는 것인, 장치.
  18. 제 17 항에 있어서,
    상기 매크로 동작은 상기 선택된 수치적 정밀도에 기초하여, 상기 제 1 데이터 세트에 상기 제 2 데이터 세트의 각 아이템의 선택된 부분을 적용하는 것인, 장치.
  19. 제1항 내지 제9항 중 어느 한 항의 방법을 컴퓨터에서 실행시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 비일시적(non-transitory) 기록매체.
KR1020160085593A 2015-07-10 2016-07-06 인공 신경 네트워크를 실행하는 방법 및 장치 KR20170007151A (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201562191266P 2015-07-10 2015-07-10
US62/191,266 2015-07-10
US15/193,741 US11244225B2 (en) 2015-07-10 2016-06-27 Neural network processor configurable using macro instructions
US15/193,741 2016-06-27

Publications (1)

Publication Number Publication Date
KR20170007151A true KR20170007151A (ko) 2017-01-18

Family

ID=57731151

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020160085593A KR20170007151A (ko) 2015-07-10 2016-07-06 인공 신경 네트워크를 실행하는 방법 및 장치

Country Status (2)

Country Link
US (1) US11244225B2 (ko)
KR (1) KR20170007151A (ko)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20190062129A (ko) * 2017-11-27 2019-06-05 삼성전자주식회사 컨볼루션 신경망 계산을 위한 저전력 하드웨어 가속 방법 및 시스템
KR20190116434A (ko) * 2017-05-17 2019-10-14 구글 엘엘씨 저 레이턴시 행렬 곱셈 유닛
KR20190117714A (ko) * 2017-05-17 2019-10-16 구글 엘엘씨 하드웨어에서 매트릭스 곱셈을 수행
KR102149495B1 (ko) 2019-08-19 2020-08-28 고려대학교 산학협력단 환경 예측 모델의 훈련지표 최적화 장치 및 그 동작방법
US11514290B2 (en) 2017-03-28 2022-11-29 Samsung Electronics Co., Ltd. Convolutional neural network (CNN) processing method and apparatus

Families Citing this family (111)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11244225B2 (en) * 2015-07-10 2022-02-08 Samsung Electronics Co., Ltd. Neural network processor configurable using macro instructions
US11295506B2 (en) 2015-09-16 2022-04-05 Tmrw Foundation Ip S. À R.L. Chip with game engine and ray trace engine
US10380481B2 (en) * 2015-10-08 2019-08-13 Via Alliance Semiconductor Co., Ltd. Neural network unit that performs concurrent LSTM cell calculations
US10474627B2 (en) * 2015-10-08 2019-11-12 Via Alliance Semiconductor Co., Ltd. Neural network unit with neural memory and array of neural processing units that collectively shift row of data received from neural memory
CN105488565A (zh) * 2015-11-17 2016-04-13 中国科学院计算技术研究所 加速深度神经网络算法的加速芯片的运算装置及方法
US10013640B1 (en) * 2015-12-21 2018-07-03 Google Llc Object recognition from videos using recurrent neural networks
US10891538B2 (en) 2016-08-11 2021-01-12 Nvidia Corporation Sparse convolutional neural network accelerator
US10997496B2 (en) * 2016-08-11 2021-05-04 Nvidia Corporation Sparse convolutional neural network accelerator
WO2018034681A1 (en) * 2016-08-13 2018-02-22 Intel Corporation Apparatuses, methods, and systems for access synchronization in a shared memory
KR20180034853A (ko) * 2016-09-28 2018-04-05 에스케이하이닉스 주식회사 합성곱 신경망의 연산 장치 및 방법
CN106557332A (zh) * 2016-11-30 2017-04-05 上海寒武纪信息科技有限公司 一种指令生成过程的复用方法及装置
US10515302B2 (en) * 2016-12-08 2019-12-24 Via Alliance Semiconductor Co., Ltd. Neural network unit with mixed data and weight size computation capability
US10586148B2 (en) * 2016-12-31 2020-03-10 Via Alliance Semiconductor Co., Ltd. Neural network unit with re-shapeable memory
US10565492B2 (en) * 2016-12-31 2020-02-18 Via Alliance Semiconductor Co., Ltd. Neural network unit with segmentable array width rotator
US10565494B2 (en) * 2016-12-31 2020-02-18 Via Alliance Semiconductor Co., Ltd. Neural network unit with segmentable array width rotator
US10650303B2 (en) 2017-02-14 2020-05-12 Google Llc Implementing neural networks in fixed point arithmetic computing systems
US11934945B2 (en) 2017-02-23 2024-03-19 Cerebras Systems Inc. Accelerated deep learning
US11238334B2 (en) 2017-04-04 2022-02-01 Hailo Technologies Ltd. System and method of input alignment for efficient vector operations in an artificial neural network
US11551028B2 (en) 2017-04-04 2023-01-10 Hailo Technologies Ltd. Structured weight based sparsity in an artificial neural network
US11615297B2 (en) 2017-04-04 2023-03-28 Hailo Technologies Ltd. Structured weight based sparsity in an artificial neural network compiler
US11544545B2 (en) 2017-04-04 2023-01-03 Hailo Technologies Ltd. Structured activation based sparsity in an artificial neural network
US10387298B2 (en) 2017-04-04 2019-08-20 Hailo Technologies Ltd Artificial neural network incorporating emphasis and focus techniques
EP3388981B1 (en) * 2017-04-13 2021-09-01 Nxp B.V. Convolutional processing system
WO2018189728A1 (en) 2017-04-14 2018-10-18 Cerebras Systems Inc. Floating-point unit stochastic rounding for accelerated deep learning
US11232347B2 (en) 2017-04-17 2022-01-25 Cerebras Systems Inc. Fabric vectors for deep learning acceleration
WO2018193352A1 (en) 2017-04-17 2018-10-25 Cerebras Systems Inc. Dataflow triggered tasks for accelerated deep learning
US10795836B2 (en) 2017-04-17 2020-10-06 Microsoft Technology Licensing, Llc Data processing performance enhancement for neural networks using a virtualized data iterator
US11488004B2 (en) 2017-04-17 2022-11-01 Cerebras Systems Inc. Neuron smearing for accelerated deep learning
US11164071B2 (en) 2017-04-18 2021-11-02 Samsung Electronics Co., Ltd. Method and apparatus for reducing computational complexity of convolutional neural networks
US10186011B2 (en) * 2017-04-28 2019-01-22 Intel Corporation Programmable coarse grained and sparse matrix compute hardware with advanced scheduling
US11113603B1 (en) 2017-05-01 2021-09-07 Perceive Corporation Training network with discrete weight values
US10338925B2 (en) 2017-05-24 2019-07-02 Microsoft Technology Licensing, Llc Tensor register files
US10372456B2 (en) 2017-05-24 2019-08-06 Microsoft Technology Licensing, Llc Tensor processor instruction set architecture
KR102301232B1 (ko) 2017-05-31 2021-09-10 삼성전자주식회사 다채널 특징맵 영상을 처리하는 방법 및 장치
US11275996B2 (en) * 2017-06-21 2022-03-15 Arm Ltd. Systems and devices for formatting neural network parameters
US10872290B2 (en) * 2017-09-21 2020-12-22 Raytheon Company Neural network processor with direct memory access and hardware acceleration circuits
US10762637B2 (en) * 2017-10-27 2020-09-01 Siemens Healthcare Gmbh Vascular segmentation using fully convolutional and recurrent neural networks
KR102452953B1 (ko) 2017-10-30 2022-10-11 삼성전자주식회사 뉴럴 네트워크의 컨볼루션 연산을 수행하는 방법 및 장치
CN109726807B (zh) * 2017-10-31 2023-11-24 上海寒武纪信息科技有限公司 神经网络处理器、运算方法及存储介质
KR20190052893A (ko) * 2017-11-09 2019-05-17 삼성전자주식회사 뉴럴 네트워크 연산을 위한 전처리 장치 및 방법
EP3721340A4 (en) * 2017-12-04 2021-09-08 Optimum Semiconductor Technologies Inc. NEURONAL NETWORK ACCELERATOR SYSTEM AND ARCHITECTURE
US11216250B2 (en) * 2017-12-06 2022-01-04 Advanced Micro Devices, Inc. Dynamic, variable bit-width numerical precision on field-programmable gate arrays for machine learning tasks
WO2019114842A1 (zh) * 2017-12-14 2019-06-20 北京中科寒武纪科技有限公司 一种集成电路芯片装置
CN109978155A (zh) * 2017-12-28 2019-07-05 北京中科寒武纪科技有限公司 集成电路芯片装置及相关产品
CN111582464B (zh) * 2017-12-29 2023-09-29 中科寒武纪科技股份有限公司 神经网络处理方法、计算机系统及存储介质
WO2019127507A1 (zh) * 2017-12-29 2019-07-04 深圳市大疆创新科技有限公司 数据处理方法、设备、dma控制器及计算机可读存储介质
KR102637735B1 (ko) * 2018-01-09 2024-02-19 삼성전자주식회사 근사 곱셈기를 구비하는 뉴럴 네트워크 처리 장치 및 이를 포함하는 시스템온 칩
US20190220739A1 (en) * 2018-01-16 2019-07-18 Electronics And Telecommunications Research Institute Neural network computing device and operation method thereof
DE102018203709A1 (de) * 2018-03-12 2019-09-12 Robert Bosch Gmbh Verfahren und Vorrichtung zum speichereffizienten Betreiben eines neuronalen Netzes
US11301951B2 (en) 2018-03-15 2022-04-12 The Calany Holding S. À R.L. Game engine and artificial intelligence engine on a chip
US10621489B2 (en) 2018-03-30 2020-04-14 International Business Machines Corporation Massively parallel neural inference computing elements
WO2019200545A1 (zh) * 2018-04-17 2019-10-24 深圳鲲云信息科技有限公司 网络模型的运行方法及相关产品
US20210097391A1 (en) * 2018-04-17 2021-04-01 Shenzhen Corerain Technologies Co., Ltd. Network model compiler and related product
US11769036B2 (en) * 2018-04-18 2023-09-26 Qualcomm Incorporated Optimizing performance of recurrent neural networks
US11222257B1 (en) 2018-04-20 2022-01-11 Perceive Corporation Non-dot product computations on neural network inference circuit
US11531727B1 (en) 2018-04-20 2022-12-20 Perceive Corporation Computation of neural network node with large input values
US11531868B1 (en) 2018-04-20 2022-12-20 Perceive Corporation Input value cache for temporarily storing input values
US11568227B1 (en) 2018-04-20 2023-01-31 Perceive Corporation Neural network inference circuit read controller with multiple operational modes
US11210586B1 (en) 2018-04-20 2021-12-28 Perceive Corporation Weight value decoder of neural network inference circuit
US11783167B1 (en) 2018-04-20 2023-10-10 Perceive Corporation Data transfer for non-dot product computations on neural network inference circuit
US11049013B1 (en) 2018-04-20 2021-06-29 Perceive Corporation Encoding of weight values stored on neural network inference circuit
US10740434B1 (en) 2018-04-20 2020-08-11 Perceive Corporation Reduced dot product computation circuit
US11580353B2 (en) 2018-05-04 2023-02-14 Apple Inc. Neural network processor for handling differing datatypes
US11120327B2 (en) 2018-05-04 2021-09-14 Apple Inc. Compression of kernel data for neural network operations
US11340936B2 (en) 2018-05-04 2022-05-24 Apple Inc. Compiling and scheduling transactions in neural network processor
US11487846B2 (en) 2018-05-04 2022-11-01 Apple Inc. Performing multiply and accumulate operations in neural network processor
US11537838B2 (en) * 2018-05-04 2022-12-27 Apple Inc. Scalable neural network processing engine
US10432240B1 (en) 2018-05-22 2019-10-01 Micron Technology, Inc. Wireless devices and systems including examples of compensating power amplifier noise
KR102006220B1 (ko) 2018-05-24 2019-08-02 주식회사 윈스 시그니처 재구성 장치 및 방법
US20190392287A1 (en) 2018-06-22 2019-12-26 Samsung Electronics Co., Ltd. Neural processor
US11775805B2 (en) * 2018-06-29 2023-10-03 Intel Coroporation Deep neural network architecture using piecewise linear approximation
WO2020044208A1 (en) * 2018-08-29 2020-03-05 Cerebras Systems Inc. Isa enhancements for accelerated deep learning
KR20200029661A (ko) * 2018-09-07 2020-03-19 삼성전자주식회사 뉴럴 프로세싱 시스템
CN110956257A (zh) * 2018-09-26 2020-04-03 龙芯中科技术有限公司 神经网络加速器
CN109359730B (zh) * 2018-09-26 2020-12-29 中国科学院计算技术研究所 面向固定输出范式Winograd卷积的神经网络处理器
KR20200066953A (ko) 2018-12-03 2020-06-11 삼성전자주식회사 Pim을 채용하는 반도체 메모리 장치 및 그 동작 방법
US11347297B1 (en) 2019-01-23 2022-05-31 Perceive Corporation Neural network inference circuit employing dynamic memory sleep
KR102214837B1 (ko) * 2019-01-29 2021-02-10 주식회사 디퍼아이 컨벌루션 신경망 파라미터 최적화 방법, 컨벌루션 신경망 연산방법 및 그 장치
US11194585B2 (en) 2019-03-25 2021-12-07 Flex Logix Technologies, Inc. Multiplier-accumulator circuitry having processing pipelines and methods of operating same
US11671111B2 (en) 2019-04-17 2023-06-06 Samsung Electronics Co., Ltd. Hardware channel-parallel data compression/decompression
US11211944B2 (en) 2019-04-17 2021-12-28 Samsung Electronics Co., Ltd. Mixed-precision compression with random access
US11880760B2 (en) 2019-05-01 2024-01-23 Samsung Electronics Co., Ltd. Mixed-precision NPU tile with depth-wise convolution
US11625585B1 (en) 2019-05-21 2023-04-11 Perceive Corporation Compiler for optimizing filter sparsity for neural network implementation configuration
US11531893B2 (en) 2019-06-03 2022-12-20 Samsung Electronics Co., Ltd. Method and apparatus with neural network parameter quantization
US10763905B1 (en) 2019-06-07 2020-09-01 Micron Technology, Inc. Wireless devices and systems including examples of mismatch correction scheme
US11625884B2 (en) 2019-06-18 2023-04-11 The Calany Holding S. À R.L. Systems, methods and apparatus for implementing tracked data communications on a chip
US11222092B2 (en) * 2019-07-16 2022-01-11 Facebook Technologies, Llc Optimization for deconvolution
US20210089873A1 (en) * 2019-09-24 2021-03-25 Alibaba Group Holding Limited Apparatus and system for execution of neural network
US11768911B2 (en) 2019-09-24 2023-09-26 Alibaba Group Holding Limited Method and apparatus for execution of neural network
US11455368B2 (en) * 2019-10-02 2022-09-27 Flex Logix Technologies, Inc. MAC processing pipeline having conversion circuitry, and methods of operating same
KR20210045225A (ko) 2019-10-16 2021-04-26 삼성전자주식회사 뉴럴 네트워크에서 연산을 수행하는 방법 및 장치
US12015428B2 (en) 2019-11-05 2024-06-18 Flex Logix Technologies, Inc. MAC processing pipeline using filter weights having enhanced dynamic range, and methods of operating same
US11693625B2 (en) 2019-12-04 2023-07-04 Flex Logix Technologies, Inc. Logarithmic addition-accumulator circuitry, processing pipeline including same, and methods of operation
US11960856B1 (en) 2020-01-15 2024-04-16 Flex Logix Technologies, Inc. Multiplier-accumulator processing pipeline using filter weights having gaussian floating point data format
KR20210092980A (ko) * 2020-01-17 2021-07-27 삼성전자주식회사 스토리지 컨트롤러, 이를 포함하는 스토리지 시스템 및 스토리지 컨트롤러의 동작 방법
CN111352896B (zh) * 2020-03-03 2022-06-24 腾讯科技(深圳)有限公司 人工智能加速器、设备、芯片以及数据处理方法
US10972139B1 (en) 2020-04-15 2021-04-06 Micron Technology, Inc. Wireless devices and systems including examples of compensating power amplifier noise with neural networks or recurrent neural networks
US11442881B2 (en) 2020-04-18 2022-09-13 Flex Logix Technologies, Inc. MAC processing pipelines, circuitry to control and configure same, and methods of operating same
US11604645B2 (en) 2020-07-22 2023-03-14 Flex Logix Technologies, Inc. MAC processing pipelines having programmable granularity, and methods of operating same
US11496341B2 (en) 2020-08-13 2022-11-08 Micron Technology, Inc. Wireless devices and systems including examples of compensating I/Q imbalance with neural networks or recurrent neural networks
US20220076105A1 (en) * 2020-09-09 2022-03-10 Allegro MicroSystems, LLC, Manchester, NH Method and apparatus for trimming sensor output using a neural network engine
US11526965B2 (en) * 2020-09-28 2022-12-13 Robert Bosch Gmbh Multiplicative filter network
US11263077B1 (en) 2020-09-29 2022-03-01 Hailo Technologies Ltd. Neural network intermediate results safety mechanism in an artificial neural network processor
US11874900B2 (en) 2020-09-29 2024-01-16 Hailo Technologies Ltd. Cluster interlayer safety mechanism in an artificial neural network processor
US11237894B1 (en) 2020-09-29 2022-02-01 Hailo Technologies Ltd. Layer control unit instruction addressing safety mechanism in an artificial neural network processor
US11811421B2 (en) 2020-09-29 2023-11-07 Hailo Technologies Ltd. Weights safety mechanism in an artificial neural network processor
US11221929B1 (en) 2020-09-29 2022-01-11 Hailo Technologies Ltd. Data stream fault detection mechanism in an artificial neural network processor
US11853759B2 (en) * 2020-11-02 2023-12-26 Electronics And Telecommunications Research Institute Neural network accelerator with type conversion units and operating method thereof
US11665363B2 (en) * 2020-11-26 2023-05-30 Electronics And Telecommunications Research Institute Method, apparatus, system and computer-readable recording medium for feature map information
US20220245435A1 (en) * 2021-01-28 2022-08-04 Nxp B.V. Neural network accelerator
CN117195989B (zh) * 2023-11-06 2024-06-04 深圳市九天睿芯科技有限公司 向量处理器、神经网络加速器、芯片及电子设备

Family Cites Families (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2703010B2 (ja) 1988-12-23 1998-01-26 株式会社日立製作所 ニユーラルネツト信号処理プロセツサ
US5208900A (en) * 1990-10-22 1993-05-04 Motorola, Inc. Digital neural network computation ring
CA2135857A1 (en) * 1994-01-03 1995-07-04 Shay-Ping Thomas Wang Neural network utilizing logarithmic function and method of using same
US6125194A (en) * 1996-02-06 2000-09-26 Caelum Research Corporation Method and system for re-screening nodules in radiological images using multi-resolution processing, neural network, and image processing
GB9902115D0 (en) 1999-02-01 1999-03-24 Axeon Limited Neural networks
US6549646B1 (en) * 2000-02-15 2003-04-15 Deus Technologies, Llc Divide-and-conquer method and system for the detection of lung nodule in radiological images
US7016529B2 (en) * 2002-03-15 2006-03-21 Microsoft Corporation System and method facilitating pattern recognition
US8712942B2 (en) * 2003-03-24 2014-04-29 AEMEA Inc. Active element machine computation
US7724957B2 (en) * 2006-07-31 2010-05-25 Microsoft Corporation Two tiered text recognition
US8103606B2 (en) 2006-12-08 2012-01-24 Medhat Moussa Architecture, system and method for artificial neural network implementation
US8301963B2 (en) 2007-10-23 2012-10-30 Spansion Llc Low-density parity-check code based error correction for memory device
US8131659B2 (en) 2008-09-25 2012-03-06 Microsoft Corporation Field-programmable gate array based accelerator system
US8442927B2 (en) * 2009-07-30 2013-05-14 Nec Laboratories America, Inc. Dynamically configurable, multi-ported co-processor for convolutional neural networks
US9153230B2 (en) 2012-10-23 2015-10-06 Google Inc. Mobile speech recognition hardware accelerator
US9263036B1 (en) * 2012-11-29 2016-02-16 Google Inc. System and method for speech recognition using deep recurrent neural networks
US9047566B2 (en) * 2013-03-12 2015-06-02 Oracle International Corporation Quadratic regularization for neural network with skip-layer connections
US9323498B2 (en) 2013-03-13 2016-04-26 Wisconsin Alumni Research Foundation Multiplier circuit with dynamic energy consumption adjustment
US9384168B2 (en) 2013-06-11 2016-07-05 Analog Devices Global Vector matrix product accelerator for microprocessor integration
CN104346622A (zh) * 2013-07-31 2015-02-11 富士通株式会社 卷积神经网络分类器及其分类方法和训练方法
US9978014B2 (en) 2013-12-18 2018-05-22 Intel Corporation Reconfigurable processing unit
US9613001B2 (en) 2013-12-20 2017-04-04 Intel Corporation Processing device for performing convolution operations
US9645974B1 (en) * 2015-03-11 2017-05-09 Google Inc. Optimized matrix multiplication using vector multiplication of interleaved matrix values
US10438112B2 (en) * 2015-05-26 2019-10-08 Samsung Electronics Co., Ltd. Method and apparatus of learning neural network via hierarchical ensemble learning
US11244225B2 (en) * 2015-07-10 2022-02-08 Samsung Electronics Co., Ltd. Neural network processor configurable using macro instructions
US20170193361A1 (en) * 2015-12-31 2017-07-06 Microsoft Technology Licensing, Llc Neural network training performance optimization framework

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11514290B2 (en) 2017-03-28 2022-11-29 Samsung Electronics Co., Ltd. Convolutional neural network (CNN) processing method and apparatus
US11599601B2 (en) 2017-05-17 2023-03-07 Google Llc Low latency matrix multiply unit
KR20190117714A (ko) * 2017-05-17 2019-10-16 구글 엘엘씨 하드웨어에서 매트릭스 곱셈을 수행
US10831862B2 (en) 2017-05-17 2020-11-10 Google Llc Performing matrix multiplication in hardware
US10970362B2 (en) 2017-05-17 2021-04-06 Google Llc Low latency matrix multiply unit
KR20210062739A (ko) * 2017-05-17 2021-05-31 구글 엘엘씨 하드웨어에서 매트릭스 곱셈을 수행
US11500961B2 (en) 2017-05-17 2022-11-15 Google Llc Low latency matrix multiply unit
KR20190116434A (ko) * 2017-05-17 2019-10-14 구글 엘엘씨 저 레이턴시 행렬 곱셈 유닛
US11907330B2 (en) 2017-05-17 2024-02-20 Google Llc Low latency matrix multiply unit
US11989258B2 (en) 2017-05-17 2024-05-21 Google Llc Performing matrix multiplication in hardware
US11989259B2 (en) 2017-05-17 2024-05-21 Google Llc Low latency matrix multiply unit
KR20190062129A (ko) * 2017-11-27 2019-06-05 삼성전자주식회사 컨볼루션 신경망 계산을 위한 저전력 하드웨어 가속 방법 및 시스템
KR102149495B1 (ko) 2019-08-19 2020-08-28 고려대학교 산학협력단 환경 예측 모델의 훈련지표 최적화 장치 및 그 동작방법

Also Published As

Publication number Publication date
US11244225B2 (en) 2022-02-08
US20170011288A1 (en) 2017-01-12

Similar Documents

Publication Publication Date Title
KR20170007151A (ko) 인공 신경 네트워크를 실행하는 방법 및 장치
US20210117810A1 (en) On-chip code breakpoint debugging method, on-chip processor, and chip breakpoint debugging system
KR101959376B1 (ko) 멀티 코어 최적화된 순환 신경망을 위한 시스템 및 방법
US20210224125A1 (en) Operation Accelerator, Processing Method, and Related Device
JP7325158B2 (ja) ニューラル・ネットワーク・コアにおける動的精度のためのデータ表現
EP3480742A1 (en) Activation functions for deep neural networks
CN111047031B (zh) 用于神经网络中的数据重用的移位装置
JP2021508895A (ja) ニューラルネットワークアレイの性能の改善
CN108629406B (zh) 用于卷积神经网络的运算装置
JP2017130036A (ja) 情報処理装置、演算方法、および演算プログラム
CN109074516A (zh) 计算处理装置和计算处理方法
CN117751366A (zh) 神经网络加速器及神经网络加速器的数据处理方法
JP2023519565A (ja) 機械学習ジョブ中の改善されたメモリ圧縮転送のためのスパース性に基づく特徴の再順序付け
US11900577B2 (en) Processing apparatus for performing processing using a convolutional neural network
CN114662646A (zh) 实现神经网络的方法和装置
CN112784951B (zh) Winograd卷积运算方法及相关产品
US11748100B2 (en) Processing in memory methods for convolutional operations
JP7410961B2 (ja) 演算処理装置
CN109740730B (zh) 运算方法、装置及相关产品
US20210004701A1 (en) Inference device, convolution computation method and program
US11704562B1 (en) Architecture for virtual instructions
US11636569B1 (en) Matrix transpose hardware acceleration
JP2010244363A (ja) 遺伝的処理装置、遺伝的処理方法およびプログラム
CN117063182A (zh) 一种数据处理方法和装置
Brassai et al. Neural control based on RBF network implemented on FPGA

Legal Events

Date Code Title Description
A201 Request for examination