KR20210124888A - 뉴럴 네트워크 연산 수행을 위한 뉴럴 네트워크 장치, 뉴럴 네트워크 장치의 동작 방법 및 뉴럴 네트워크 장치를 포함하는 애플리케이션 프로세서 - Google Patents

뉴럴 네트워크 연산 수행을 위한 뉴럴 네트워크 장치, 뉴럴 네트워크 장치의 동작 방법 및 뉴럴 네트워크 장치를 포함하는 애플리케이션 프로세서 Download PDF

Info

Publication number
KR20210124888A
KR20210124888A KR1020210001056A KR20210001056A KR20210124888A KR 20210124888 A KR20210124888 A KR 20210124888A KR 1020210001056 A KR1020210001056 A KR 1020210001056A KR 20210001056 A KR20210001056 A KR 20210001056A KR 20210124888 A KR20210124888 A KR 20210124888A
Authority
KR
South Korea
Prior art keywords
floating
data
neural network
point
mantissa
Prior art date
Application number
KR1020210001056A
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 삼성전자주식회사
Priority to US17/217,398 priority Critical patent/US20210312012A1/en
Priority to CN202110366760.4A priority patent/CN113495717A/zh
Priority to DE102021108622.1A priority patent/DE102021108622A1/de
Publication of KR20210124888A publication Critical patent/KR20210124888A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/499Denomination or exception handling, e.g. rounding or overflow
    • G06F7/49905Exception handling
    • G06F7/4991Overflow or underflow
    • G06F7/49915Mantissa overflow or underflow in handling floating-point numbers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/01Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising
    • G06F5/012Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising in floating-point computations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/50Adding; Subtracting
    • 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)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Pure & Applied Mathematics (AREA)
  • Biomedical Technology (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Mathematical Optimization (AREA)
  • Biophysics (AREA)
  • Computational Linguistics (AREA)
  • Artificial Intelligence (AREA)
  • Neurology (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Image Analysis (AREA)

Abstract

본 개시의 예시적 실시예에 따른 뉴럴 네트워크 연산 수행을 위한 뉴럴 네트워크 장치에 있어서, 내적 연산 및 누적 연산을 수행하도록 구성된 부동 소수점 연산 회로 및 상기 부동 소수점 연산 회로로부터 생성된 제1 누적 데이터가 저장된 버퍼를 포함하고, 상기 부동 소수점 연산 회로는, 상기 내적 연산 및 상기 누적 연산에서, 복수의 부동 소수점 데이터 쌍들 각각에 대응하는 복수의 지수부 덧셈 연산 결과들 및 상기 제1 누적 데이터의 지수 값으로부터 확인된 최대값을 기반으로 상기 복수의 부동 소수점 데이터 쌍들 각각에 대응하는 복수의 가수부 곱셈 연산 결과들 및 상기 제1 누적 데이터의 가수부를 각각 정렬 쉬프트한 후 합산하도록 구성된 것을 특징으로 한다.

Description

뉴럴 네트워크 연산 수행을 위한 뉴럴 네트워크 장치, 뉴럴 네트워크 장치의 동작 방법 및 뉴럴 네트워크 장치를 포함하는 애플리케이션 프로세서{Neural network device for neural network operation, operating method of neural network device and application processor comprising neural network device}
본 개시의 기술적 사상은 뉴럴 네트워크에 관한 것으로서, 더욱 상세하게는, 부동 소수점 연산 회로를 포함하는 뉴럴 네트워크 장치의 부동 소수점 연산 방법 및 장치에 관한 것이다.
뉴럴 네트워크(Neural Network)는 동물의 두뇌를 구성하는 생물학적 네트워크를 모델링한 컴퓨터 과학적 아키텍쳐(computational architecture)를 지칭한다. 최근 뉴럴 네트워크 기술이 발전함에 따라, 다양한 종류의 전자 시스템에서 뉴럴 네트워크 기반으로 동작하는 뉴럴 네트워크 장치를 사용하여 입력 데이터를 분석하고 유효한 정보를 추출하는 연구가 활발히 진행되고 있다.
뉴럴 네트워크 장치는 복잡한 입력 데이터에 대한 많은 양의 연산을 필요로 한다. 뉴럴 네트워크 장치가 입력을 실시간으로 분석하고, 정보를 추출하기 위해서 뉴럴 네트워크의 연산(operation)들을 효율적으로 처리할 수 있는 기술이 요구된다. 특히, 스마트폰과 같은, 저전력 고성능 시스템은 제한된 리소스를 가지므로, 복잡한 입력 데이터를 처리하는데 필요한 연산량을 감소시키면서도 인공 뉴럴 네트워크의 성능을 최대화 할 수 있는 기술이 요구된다.
본 개시의 기술적 사상은 부동 소수점 연산 회로가 포함된 뉴럴 네트워크 장치에서, 뉴럴 네트워크의 부동 소수점 연산 방법 및 장치를 제공하는 데 있다.
본 개시의 예시적 실시예에 따른 뉴럴 네트워크 연산 수행을 위한 뉴럴 네트워크 장치에 있어서, 내적 연산 및 누적 연산을 수행하도록 구성된 부동 소수점 연산 회로 및 상기 부동 소수점 연산 회로로부터 생성된 제1 누적 데이터가 저장된 버퍼를 포함하고, 상기 부동 소수점 연산 회로는, 상기 내적 연산 및 상기 누적 연산에서, 복수의 부동 소수점 데이터 쌍들 각각에 대응하는 복수의 지수부 덧셈 연산 결과들 및 상기 제1 누적 데이터의 지수 값으로부터 확인된 최대값을 기반으로 상기 복수의 부동 소수점 데이터 쌍들 각각에 대응하는 복수의 가수부 곱셈 연산 결과들 및 상기 제1 누적 데이터의 가수부를 각각 정렬 쉬프트한 후 합산하도록 구성된 것을 특징으로 한다.
본 개시의 예시적 실시예에 따른 뉴럴 네트워크 장치의 동작 방법은, 복수의 부동 소수점 데이터 쌍들 및 제1 누적 데이터를 수신하는 단계 및 상기 복수의 부동 소수점 데이터 쌍들 및 상기 제1 누적 데이터를 이용하여 제2 누적 데이터를 생성하기 위한 연산을 수행하는 단계를 포함하고, 상기 연산을 수행하는 단계는, 상기 복수의 부동 소수점 데이터 쌍들 각각에 대응하는 복수의 지수부 덧셈 연산 결과들 및 상기 제1 누적 데이터의 지수 값으로부터 최대값을 확인하는 단계, 상기 최대값을 기반으로 상기 복수의 부동 소수점 데이터 쌍들 각각에 대응하는 복수의 가수부 곱셈 연산 결과들 및 상기 제1 누적 데이터의 가수부를 정렬 쉬프트하는 단계 및 정렬된 상기 복수의 가수부 곱셈 연산 결과들과 정렬된 상기 제1 누적 데이터의 가수부를 합산하는 단계를 포함하는 것을 특징으로 한다.
본 개시의 예시적 실시예에 따른 애플리케이션 프로세서는, 내적 연산 및 누적 연산을 수행하도록 구성된 뉴럴 네트워크 장치를 포함하고, 상기 뉴럴 네트워크 장치는, 상기 내적 연산 및 상기 누적 연산에서, 상기 복수의 부동 소수점 데이터 쌍들에 대한 복수의 지수부 덧셈 연산 결과들 및 제1 누적 데이터의 지수 값을 기반으로 상기 복수의 부동 소수점 데이터 쌍들 각각에 대응하는 복수의 가수부 곱셈 연산 결과들 및 상기 제1 누적 데이터의 가수부를 각각 일괄적으로 정렬 쉬프트한 후에 합산하도록 구성된 것을 특징으로 한다.
본 개시의 예시적 실시예에 따른 뉴럴 네트워크 장치는 뉴럴 네트워크 연산 정확도에 영향을 미치지 않을 정도로 정렬 쉬프터 및 가산기 등의 구성을 간소화하고, 간소화된 구성들을 이용하여 효과적인 네트워크 연산을 수행함으로써 뉴럴 네트워크 장치의 전력 소모 및 설계 면적이 감소될 수 있고, 연산 속도가 향상될 수 있다.
본 개시의 예시적 실시예들에서 얻을 수 있는 효과는 이상에서 언급한 효과들로 제한되지 아니하며, 언급되지 아니한 다른 효과들은 이하의 기재로부터 본 개시의 예시적 실시예들이 속하는 기술분야에서 통상의 지식을 가진 자에게 명확하게 도출되고 이해될 수 있다. 즉, 본 개시의 예시적 실시예들을 실시함에 따른 의도하지 아니한 효과들 역시 본 개시의 예시적 실시예들로부터 당해 기술분야의 통상의 지식을 가진 자에 의해 도출될 수 있다.
도 1은 본 개시의 예시적 실시예에 따른 뉴럴 네트워크 시스템을 개략적으로 나타내는 블록도이다.
도 2는 뉴럴 네트워크 구조의 일 예를 나타낸다.
도 3a 내지 도 3c는 부동 소수점 데이터 포맷의 타입의 예들을 설명하기 위한 도면이고, 도 3d는 정수 데이터의 일 예를 설명하는 도면이다.
도 4는 본 개시의 예시적 실시예에 따른 뉴럴 네트워크 장치의 동작 방법을 설명하기 위한 순서도이다.
도 5는 본 개시의 예시적 실시예에 따른 뉴럴 네트워크 시스템의 동작을 나타내는 도면이다.
도 6은 본 개시의 예시적 실시예에 따른 뉴럴 네트워크 장치를 나타내는 도면이다.
도 7a는 본 개시의 예시적 실시예에 따른 내적 연산을 수행하는 부동 소수점 연산 회로를 나타내는 도면이고, 도 7b는 부동 소수점 연산 회로에 입력되는 부동 소수점 데이터 쌍의 포맷 타입을 설명하기 위한 도면이다.
도 8a 및 도 8b는 부동 소수점 데이터의 포맷의 타입에 따른 비트 확장을 수행하는 곱셈기를 설명하기 위한 도면이다.
도 9 내지 도 12는 본 개시의 예시적 실시예에 따른 부동 소수점 연산 회로의 동작을 설명하기 위한 도면이다.
도 13은 본 개시의 예시적 실시예에 따른 뉴럴 네트워크 장치에 포함된 연산 회로를 나타내는 블록도이다.
도 14는 본 개시의 예시적 실시예에 따른 애플리케이션 프로세서를 나타내는 블록도이다.
이하, 첨부한 도면을 참조하여 본 개시의 실시예들에 대해 상세히 설명한다.
도 1은 본 개시의 예시적 실시예에 따른 뉴럴 네트워크 시스템(100)을 개략적으로 나타내는 블록도이다.
뉴럴 네트워크 시스템(100)은 뉴럴 네트워크를 훈련(train)(또는 학습(learn))하거나, 뉴럴 네트워크를 이용하여 입력 데이터를 분석함으로써 입력 데이터에 포함된 정보를 추론(inference)할 수 있다. 뉴럴 네트워크 시스템(100)은 추론된 정보를 기초로 상황 판단을 하거나 또는 뉴럴 네트워크 시스템(100)이 탑재되는 전자 장치의 구성들을 제어할 수 있다. 예컨대, 뉴럴 네트워크 시스템(100)은 뉴럴 네트워크를 이용한 음성 인식, 영상 인식, 영상 분류 등을 수행하는 스마트 폰, 태블릿 디바이스, 스마트 TV, AR(Augmented Reality) 디바이스, IoT(Internet of Things) 디바이스, 자율주행 자동차, 로보틱스, 의료기기, 드론(drone), 첨단 운전자 보조 시스템(Advanced Drivers Assistance System; ADAS), 영상 표시 장치, 계측 장치 등에 적용될 수 있으며, 이 외에도 뉴럴 네트워크 시스템(100)은 다양한 종류의 전자 장치 중 하나에 탑재될 수 있다. 실시예에 있어서, 도 1의 뉴럴 네트워크 시스템(100)은 애플리케이션 프로세서일 수 있다.
도 1을 참조하면, 뉴럴 네트워크 시스템(100)은 CPU(Central Processing Unit)(110), 뉴럴 네트워크 장치(120), 메모리(130) 및 센서 모듈(140)을 포함할 수 있다. 뉴럴 네트워크 시스템(100)은 입출력 모듈, 보안 모듈, 전력 제어 장치 등을 더 포함할 수 있으며, 또한 다양한 종류의 프로세서를 더 포함할 수 있다. 일부 실시예에 있어서, 뉴럴 네트워크 시스템(100)의 구성들(예컨대, CPU(110), 뉴럴 네트워크 장치(120), 메모리(130), 및 센서 모듈(140))중 일부 또는 전부는 하나의 반도체 칩에 형성될 수 있다. 예컨대, 뉴럴 네트워크 시스템(100)은 시스템-온 칩(SoC)으로서 구현될 수 있다. 뉴럴 네트워크 시스템(100)의 구성들은 버스(150)를 통해 서로 통신할 수 있다. 한편, 도 1에는 도시되지는 않았으나, 뉴럴 네트워크 시스템(100)은 다른 IP(Intellectual Property) 블록들과의 통신을 위한 인터페이스들(미도시)을 더 포함할 수 있다.
CPU(110)는 뉴럴 네트워크 시스템(100)의 전반적인 동작을 제어한다. CPU(110)는 하나의 프로세서 코어(Single Core)를 포함하거나, 복수의 프로세서 코어들(Multi-Core)을 포함할 수 있다. CPU(110)는 메모리(130)와 같은 저장 영역에 저장된 프로그램들 및/또는 데이터를 처리 또는 실행할 수 있다.
예를 들어서, CPU(110)는 응용 프로그램(application)을 실행하고, 응용 프로그램의 실행에 따라 요구되는 뉴럴 네트워크 기반의 태스크들을 수행하도록 뉴럴 네트워크 장치(130)를 제어할 수 있다. 뉴럴 네트워크는 CNN(Convolution Neural Network), R-CNN(Region with Convolution Neural Network), RPN(Region Proposal Network), RNN(Recurrent Neural Network), S-DNN(Stacking-based deep Neural Network), S-SDNN(State-Space Dynamic Neural Network), Deconvolution Network, DBN(Deep Belief Network), RBM(Restricted Boltzman Machine), Fully Convolutional Network, LSTM(Long Short-Term Memory) Network, Classification Network 등 다양한 종류의 뉴럴 네트워크 모델들 중 적어도 하나를 포함할 수 있다.
뉴럴 네트워크 장치(120)는 수신되는 입력 데이터를 기초로 뉴럴 네트워크 연산을 수행할 수 있다. 뉴럴 네트워크 장치(120)는 뉴럴 네트워크 연산의 수행 결과를 기초로 정보 신호를 생성할 수 있다. 뉴럴 네트워크 장치(120)는 뉴럴 네트워크 연산 가속기, 코프로세서(coprocessor), DSP(Digital Signal Processor), ASIC(Application Specific Integrated Circuit) 등으로 구현될 수 있다. 일부 실시에에서, 뉴럴 네트워크 장치(120)는 복수의 뉴럴 프로세싱 회로들로 구성된 적어도 하나의 클러스터(cluster)를 포함할 수 있다.
한편, 본 개시의 예시적 실시예에 따른 뉴럴 네트워크 장치(120)는 부동 소수점 연산 회로(20)를 포함하며, 부동 소수점 연산을 기반으로 뉴럴 네트워크 연산을 수행할 수 있다. 부동 소수점 연산 회로(20)는 복수의 부동 소수점 데이터들에 대한 내적 연산을 수행하고, 생성된 연산 결과를 누적하는 연산을 수행할 수 있다. 복수의 부동 소수점 데이터들은 내적 연산을 위한 복수의 부동 소수점 데이터 쌍들로 구분되어 부동 소수점 연산 회로(20)에 입력될 수 있다.
뉴럴 네트워크는 실수, 예컨대 부동 소수점 수로 표현되는 부동 소수점 데이터를 포함할 수 있다. 예컨대, 부동 소수점 데이터는, 피처 맵, 커널(웨이트 맵), 바이어스 등을 포함할 있다. 부동 소수점으로 데이터를 나타냄으로써 데이터가 광범위한 값들을 가질 수 있도록 표현될 수 있으며, 실수의 근사치를 나타내기에 적합할 수 있다.
예시적 실시예로, 부동 소수점 연산 회로(20)는 다양한 타입의 포맷을 갖는 부동 소수점 데이터들에 대한 내적 연산을 지원할 수 있다. 부동 소수점 연산 회로(20)는 상이한 타입의 포맷을 갖는 부동 소수점 데이터들에 대한 일괄적인 내적 연산을 위해 데이터의 지수부 비트 영역 및 가수부 비트 영역 중 적어도 하나를 미리 약속된 비트 너비에 부합하도록 확장할 수 있다.
예시적 실시예로, 부동 소수점 연산 회로(20)는 내적 연산에서 부동 소수점 데이터 쌍들에 대한 지수부 덧셈 연산을 수행하고, 부동 소수점 데이터 쌍들에 대한 가수부 곱셈 연산을 수행하여 부동 소수점 데이터 쌍들 각각에 대응하는 지수부 덧셈 연산 결과들 및 가수부 곱셈 연산 결과들을 생성할 수 있다.
예시적 실시예로, 부동 소수점 연산 회로(20)는 내적 연산에서 가수부 곱셈 연산 결과들을 합산할 때에, 누적 데이터도 함께 합산함으로써 누적 연산을 수행할 수 있다. 누적 데이터는 부동 소수점 연산 회로(20)로부터 내적 연산의 결과들이 누적되어 생성된 데이터를 의미할 수 있으며, 부동 소수점 연산 회로(20) 내의 버퍼(미도시)에 저장될 수 있다.
예시적 실시예로, 부동 소수점 연산 회로(20)는 가수부 곱셈 연산 결과들 및 누적 데이터를 합산하기에 앞서 가수부 곱셈 연산 결과들 및 누적 데이터의 부동 소수점을 맞추기 위해 각각을 정렬 쉬프트할 수 있다. 부동 소수점 연산 회로(20)는 지수부 덧셈 연산 결과들 및 누적 데이터의 지수 값으로부터 확인된 최대값을 기반으로 가수부 곰셈 연산 결과들 및 누적 데이터의 가수부를 각각 정렬 쉬프트할 수 있다.
한편, 부동 소수점 연산 회로(20)에 포함된 내적 연산을 위한 정렬 쉬프터의 쉬프트 가능한 비트 너비는 뉴럴 네트워크 시스템(100)이 요구하는 연산 정확도에 영향을 미치지 않는 정도로 줄일 수 있다. 이를 통해, 정렬 쉬프터의 사이즈를 줄이고, 전력 소모를 최소화하는 동시에 내적 연산 속도의 향상시킬 수 있다. 한편, 뉴럴 네트워크 시스템(100)이 요구하는 연산 정확도가 비교적 높은 구현예에서는, 부동 소수점 연산 회로(20)의 정렬 쉬프터는 비교적 높은 비트 너비만큼 데이터를 정렬할 수 있도록 설계될 수 있고, 뉴럴 네트워크 장치(120)가 요구하는 연산 정확도가 비교적 낮은 구현예에서는, 상기 정렬 쉬프터는 비교적 낮은 비트 너비만큼 데이터를 정렬할 수 있도록 설계될 수 있다.
예시적 실시예로, 부동 소수점 연산 회로(20)는 정렬된 가수부 곱셈 연산 결과들과 정렬된 누적 데이터의 가수부를 일괄적으로 합산함으로써 내적 연산과 누적 연산을 동시에 수행할 수 있다. 이를 위해 부동 소수점 연산 회로(20)는 정렬된 가수부 곱셈 연산 결과들과 정렬된 누적 데이터의 가수부가 함께 입력되는 가산기(미도시)를 포함할 수 있다.
예시적 실시예로, 부동 소수점 연산 회로(20)의 가산기(미도시)는 분리된 제1 및 제2 가산 회로를 포함할 수 있다. 일 예로, 제1 가산 회로는 정렬된 가수부 곱셈 연산 결과들의 상위 비트들과 정렬된 누적 데이터의 가수부의 상위 비트들을 합산하고, 제2 가산 회로는 정렬된 가수부 곱셈 연산 결과들의 하위 비트들과 정렬된 누적 데이터의 가수부의 하위 비트들을 합산할 수 있다. 구분된 제1 및 제2 가산 회로의 구성을 통해서 이후, 가산기(미도시)로부터 출력된 합산 결과 데이터에 대한 리딩 원 검출(leading one detection)에 유리하고, 가산기(미도시) 이후의 로직(예를 들면, 포스트 가산기)을 최적화할 수 있다. 리딩 원 검출 방법에 구체적인 실시예는 후술한다.
뉴럴 네트워크 장치(120)는 정수 곱셈 연산을 수행하기 위한 정수 곱셈기(미도시)를 더 포함할 수 있으며, 제1 및 제2 가산 회로 중 어느 하나는 정수 곱셈기(미도시)와 공유될 수 있다. 이를 통해, 정수 곱셈 연산을 수행하기 위해 별도의 가산기가 필요없게 되어 뉴럴 네트워크 장치(120)의 사이즈 및 불필요한 전력 소모를 줄일 수 있다. 부동 소수점 연산 회로(20)의 정수 연산 모드에서의 동작 관련 구체적인 실시예는 후술한다.
예시적 실시예로, 부동 소수점 연산 회로(20)는 가산기(미도시)로부터 출력된 합산 결과 데이터에 대하여 정규화(normalization) 및 반올림(rounding) 등의 동작을 수행하여 새로운 누적 데이터를 생성할 수 있다. 새로운 누적 데이터는 부동 소수점 연산 회로(20) 내의 버퍼(미도시)에 저장될 수 있다.
예시적 실시예로, 부동 소수점 연산 회로(20)에 포함된 정렬 쉬프터(미도시) 및 가산기(미도시) 등은 비교적 사이즈가 작은 정렬 쉬프터, 가산기 등을 포함할 수 있으며, 이를 통해 부동 소수점 연산 회로(20)는 내적 연산을 수행할 때에, 비교적 빠르고, 전력 소모가 적은 동시에 하드웨어 자원(resource) 사용량을 줄일 수 있다.
뉴럴 네트워크 장치(120)는 메모리(130)에 저장된 복수의 부동 소수점 데이터들(FPD)을 입력 데이터들로서 수신하고, 부동 소수점 연산 회로(20)를 이용하여 부동 소수점 데이터들(FPD)에 대한 내적 연산을 수행할 수 있다. 뉴럴 네트워크 장치(120)는 부동 소수점 연산 회로(20)를 이용하여 복수의 내적 연산 결과들을 누적시킬 수 있다. 누적 데이터는 뉴럴 네트워크 장치(120) 내의 버퍼(미도시)에 저장될 수 있다.
뉴럴 네트워크 장치(120)는 부동 소수점 데이터들(FPD)을 이용하여 뉴럴 네트워크 연산을 수행하고, 연산 결과를 메모리(130)에 저장할 수 있다. 또한, 뉴럴 네트워크 장치(120)는 연산 결과 생성된 부동 소수점 데이터(FPD)를 출력할 수 있다. 예시적 실시예로, 부동 소수점 연산 회로(20)에 입력되는 입력 데이터의 포맷 타입은 부동 소수점 연산 회로(20)로부터 출력되는 출력 데이터의 포맷 타입과 상이할 수 있다. 일 예로, 상기 입력 데이터는 FP16(Floating Point 16) 타입 또는 BF16(Brain Float 16) 타입의 포맷을 가지고, 상기 출력 데이터는 FP32(Floating Point 32) 타입의 포맷을 가질 수 있다. 즉, 부동 소수점 연산 회로(20)에는 '16' 비트의 데이터가 입력되고, 내적 연산 및 누적 연산 결과로 '32' 비트의 데이터가 출력될 수 있다. 다만, 이는 예시적 실시예로, 이에 국한되지 않으며, 부동 소수점 연산 회로(20)는 뉴럴 네트워크 시스템(100)에 적용되는 표준에 따른 제1 타입의 포맷을 갖는 데이터를 입력받아 내적 연산 및 누적 연산 후에 제2 타입의 포맷을 갖는 데이터를 출력할 수 있다.
뉴럴 네트워크 장치(120)는 부동 소수점 연산 회로(20)를 이용하여 메모리(130)로부터 입력된 부동 소수점 데이터들(FPD)에 대한 내적 연산 및 누적 연산을 수행하고, 연산 결과인 부동 소수점 데이터들(FPD)을 메모리(130)에 저장할 수 있다. 일부 실시예에 있어서, 뉴럴 네트워크 장치(120)는 CPU(110)의 개입없이 버스(150)를 통해 메모리(130)와 부동 소수점 데이터들(FPD)을 송수신할 수 있다. 즉, 뉴럴 네트워크 장치(120)와 메모리(130) 간에 직접적으로 부동 소수점 데이터들(FPD)이 송수신될 수 있다.
메모리(130)는 뉴럴 네트워크 시스템(100)에서 사용되는 프로그램들 및/또는 데이터를 저장할 수 있다. 메모리(130)는 또한, 뉴럴 네트워크를 위한 연산 파라미터(예컨대, 웨이트(weight) 값들, 바이어스(bias) 값들 등), 뉴럴 네트워크의 양자화를 위한 파라미터(예컨대, 스케일 펙터(scale factor), 바이어스 값들 등), 입력 데이터(예컨대, 입력 피처 맵(input feature map)) 및 출력 데이터(예컨대 출력 피처 맵(output feature map))를 저장할 수 있다. 상기 연산 파라미터, 양자화 파라미터, 입력 데이터 및 출력 데이터는 부동 소수점 데이터들(FPD)일 수 있다.
메모리(130)는 DRAM(Dynamic random Access Memory)일 수 있으나, 이에 한정되는 것은 아니다. 메모리(130)는 휘발성 메모리(volatile memory) 또는 불휘발성 메모리(nonvolatile memory) 중 적어도 하나를 포함할 수 있다. 불휘발성 메모리는 ROM (Read Only Memory), PROM (Programmable ROM), EPROM (Electrically Programmable ROM), EEPROM (Electrically Erasable and Programmable ROM), 플래시 메모리, PRAM (Phase-change RAM), MRAM (Magnetic RAM), RRAM (Resistive RAM), FRAM (Ferroelectric RAM) 등을 포함한다. 휘발성 메모리는 DRAM (Dynamic RAM), SRAM (Static RAM), SDRAM (Synchronous DRAM), PRAM (Phase-change RAM), MRAM (Magnetic RAM), RRAM (Resistive RAM), FeRAM (Ferroelectric RAM) 등을 포함한다. 실시예에 있어서, 메모리(14)는 HDD(Hard Disk Drive), SSD(Solid State Drive), CF(compact flash) 카드, SD(secure digital) 카드, Micro-SD(micro secure digital) 카드, Mini-SD(mini secure digital) 카드, xD(extreme digital) 카드 또는 Memory Stick 중 적어도 하나를 포함할 수 있다.
센서 모듈(140)은 뉴럴 네트워크 시스템(100)이 탑재되는 전자 장치 주변의 정보를 수집할 수 있다. 센서 모듈(140)은 전자 장치의 외부로부터 신호(예컨대 영상 신호, 음성 신호, 자기 신호, 생체 신호, 터치 신호 등)를 센싱 또는 수신하고, 센싱 또는 수신된 신호를 센싱 데이터로 변환할 수 있다. 이를 위해, 센서 모듈(450)은 센싱 장치, 예컨대 마이크, 촬상 장치, 이미지 센서, 라이더(LIDAR; light detection and ranging) 센서, 초음파 센서, 적외선 센서, 바이오 센서, 및 터치 센서 등 다양한 종류의 센싱 장치 중 적어도 하나를 포함할 수 있다.
센싱 데이터는 뉴럴 네트워크 장치(120)에 입력 데이터로서 제공되거나, 또는 메모리(130)에 저장될 수 있다. 메모리(130)에 저장된 센싱 데이터는 뉴럴 네트워크 장치(120)로 제공될 수 있다. 실시예에 있어서, 뉴럴 네트워크 장치(100)는 영상 데이터를 처리하는 GPU(Graphic Processing Unit)를 더 포함하고, 센싱 데이터는 GPU에서 가공 처리된 후, 메모리(130) 또는 뉴럴 네트워크 장치(120)에 제공될 수 있다.
예를 들어, 센서 모듈(140)은 이미지 센서를 포함할 수 있으며, 전자 장치의 외부 환경을 촬영하여 영상 데이터를 생성할 수 있다. 센서 모듈(140)에서 출력되는 영상 데이터 또는 GPU에서 가공 처리된 영상 데이터는 부동 소수점 데이터일 수 있으며, 영상 데이터는 뉴럴 네트워크 장치(20)에 직접 제공되거나 또는 메모리(130)에 저장된 후, 뉴럴 네트워크 장치(20)에 제공될 수 있다. 일부 실시예에 있어서, 뉴럴 네트워크 시스템(100)은 뉴럴 네트워크 장치(120)에 입력되는 데이터를 처리하는 프리 프로세서 또는 뉴럴 네트워크 장치(120)로부터 출력되는 데이터를 처리하는 포스트 프로세서를 더 포함할 수 있다.
한편, 일부 실시예에서는, 도 1의 뉴럴 네트워크 시스템(100)은 센서 모듈(140)을 포함하지 않고, 인터페이스를 통해 별도로 구비된 센서 모듈(미도시) 등으로부터 입력 데이터를 수신할 수도 있다.
도 2는 뉴럴 네트워크 구조의 일 예를 나타낸다. 도 2를 참조하면, 뉴럴 네트워크(NN)는 복수의 레이어들(L1 내지 Ln)을 포함할 수 있다. 이와 같은 멀티-레이어드 구조의 뉴럴 네트워크는 딥 뉴럴 네트워크(deep neural network; DNN) 또는 딥 러닝 구조(deep learning architecture)로 지칭될 수 있다. 복수의 레이어들(L1 내지 Ln) 각각은 선형 레이어 또는 비선형 레이어일 수 있으며, 실시예에 있어서, 적어도 하나의 레이어 및 적어도 하나의 비선형 레이어가 겹합되어 하나의 레이어로 지칭될 수도 있다. 예시적으로, 선형 레이어는 컨볼루션 레이어(convolution), 풀리 커넥티드(fully connected) 레이어를 포함할 수 있으며, 비선형 레이어는 풀링(pooling) 레이어, 액티베이션 레이어를 포함할 수 있다.
예시적으로, 제1 레이어(L1)는 컨볼루션 레이어이고, 제2 레이어(L2)는 풀링(pooling) 레이어이고, 제n 레이어(Ln)는 출력 레이어로서 풀리 커넥티드(fully connected) 레이어일 수 있다. 뉴럴 네트워크(NN)는 활성(activation) 레이어를 더 포함할 수 있으며, 다른 종류의 연산을 수행하는 레이어를 더 포함할 수 있다.
복수의 레이어들(L1 내지 Ln) 각각은 입력되는 이미지 프레임 또는 이전 레이어에서 생성된 피처 맵을 입력 피처 맵으로서 수신하고, 입력 피처 맵을 연산하여 출력 피처 맵 또는 인식 신호(REC)를 생성할 수 있다. 이때, 피처 맵은 입력 데이터의 다양한 특징이 표현된 데이터를 의미한다. 피처 맵들(FM1, FM2, FM3, FMn)은 예컨대 복수의 피처 값들을 포함하는 2차원 매트릭스 또는 3차원 매트릭스(또는 텐서(tensor)라고 함) 형태를 가질 수 있다. 피처 맵들(FM1, FM2, FM3, FMn)은 너비(W)(또는 칼럼이라고 함), 높이(H)(또는 로우라고 함) 및 깊이(D)를 가지며, 이는 좌표상의 x축, y축 및 z축에 각각 대응할 수 있다. 이때, 깊이(D)는 채널 수로 지칭될 수 있다.
제1 레이어(L1)는 제1 피처 맵(FM1)을 웨이트 맵(WM)과 컨볼루션하여 제2 피처 맵(FM2)을 생성할 수 있다. 웨이트 맵(WM)은 복수의 웨이트 값들을 포함하는 2차원 매트릭스 또는 3차원 매트릭스 형태를 가질 수 있다. 웨이트 맵(WM)은 커널로 지칭될 수 있다. 웨이트 맵(WM)은 제1 피처 맵(FM1)을 필터링할 수 있으며, 필터 또는 커널로 지칭될 수 있다. 웨이트 맵(WM)의 깊이, 즉 채널 개수는 제1 피처 맵(FM1)의 깊이, 즉 채널 개수와 동일하며, 웨이트 맵(WM)과 제1 피처 맵(FM1)의 동일한 채널끼리 컨볼루션될 수 있다. 웨이트 맵(WM)이 제1 입력 피처 맵(FM1)을 슬라이딩 윈도로하여 횡단하는 방식으로 쉬프트된다. 각 쉬프트동안, 웨이트 맵(WM)에 포함되는 웨이트들 각각이 제1 피처 맵(FM1)과 중첩된 영역에서의 모든 피처값과 곱해지고 더해질 수 있다. 제1 피처 맵(FM1)과 웨이트 맵(WM)이 컨볼루션 됨에 따라, 제2 피처 맵(FM2)의 하나의 채널이 생성될 수 있다. 도 2에는 하나의 웨이트 맵(WM)이 표시되었으나, 실질적으로는 복수개의 웨이트 맵이 제1 피처 맵(FM1)과 컨볼루션됨으로써, 제2 피처 맵(FM2)의 복수개의 채널이 생성될 수 있다. 다시 말해, 제2 피처 맵(FM2)의 채널의 수는 웨이트 맵의 개수에 대응할 수 있다.
제2 레이어(12)는 풀링을 통해 제2 피처 맵(FM2)의 공간적 크기(spatial size)를 변경함으로써, 제3 피처 맵(FM3)을 생성할 수 있다. 풀링은 샘플링 또는 다운-샘플링으로 지칭될 수 있다. 2 차원의 풀링 윈도우(PW)가 풀링 윈도우(PW)의 사이즈 단위로 제2 피처 맵(FM2) 상에서 쉬프트되고, 풀링 윈도우(PW)와 중첩되는 영역의 피처값들 중 최대값(또는 피처값들의 평균값)이 선택될 수 있다. 이에 따라, 제2 피처 맵(FM2)으로부터 공간적 사이즈가 변경된 제3 피처 맵(FM3)이 생성될 수 있다. 제3 피처 맵(FM3)의 채널과 제2 피처 맵(FM2)의 채널 개수는 동일하다.
제n 레이어(Ln)는 제n 피처 맵(FMn)의 피처들을 조합하여 입력 데이터의 클래스(class)(CL)를 분류할 수 있다. 또한, 클래스에 상응하는 인식 신호(REC)를 생성할 수 있다. 예를 들어, 입력 데이터가 영상 데이터이고, 뉴럴 네트워크(NN)가 영상 인식을 수행할 경우, 제n 레이어(Ln)는 이전 레이어로부터 제공되는 제n 피처 맵(FMn)을 기초로 영상 데이터가 나타내는 이미지의 사물에 해당하는 클래스를 추출함으로써 사물을 인식하고, 인식된 사물에 상응하는 인식 신호(REC)를 생성할 수 있다.
도 2를 참조하여 설명한 바와 같이, 뉴럴 네트워크(NN)는 복잡한 아키텍처로 구현될 수 있으며, 뉴럴 네트워크 연산을 수행하는 뉴럴 네트워크 장치는 수억에서 수백억에 다다를 정도로 매우 많은 연산(operation count)을 수행하게 된다. 본 개시의 예시적 실시예에 따른 뉴럴 네트워크 장치(120, 도 1)는 뉴럴 네트워크 연산 정확도에 영향을 미치지 않을 정도로 정렬 쉬프터 및 가산기 등의 구성을 간소화하고, 간소화된 구성들을 이용하여 효과적인 네트워크 연산을 수행함으로써 뉴럴 네트워크 장치(120, 도 1)의 전력 소모 및 설계 면적이 감소될 수 있고, 연산 속도가 향상될 수 있다.
도 3a 내지 도 3c는 부동 소수점 데이터 포맷의 타입의 예들을 설명하기 위한 도면이고, 도 3d는 정수 데이터의 일 예를 설명하는 도면이다.
도 3a를 참조하면, 부동 소수점 데이터는 부호와,
Figure pat00001
의 형식으로 표현될 수 있고, b는 지수부(exponent), a는 가수부(fraction)에 해당된다. 부동 소수점 연산에 대한 IEEE(Institute of Electrical and Electronics Engineers) 표준인 IEEE754-2008 표준에 따르면, 제1 타입의 포맷을 갖는 때에 32비트의 부동 소수점 데이터에서 '1' 비트는 부호를 나타내고, '8' 비트는 지수부를 나타내며, '23' 비트는 가수부를 나타낸다. 도 3a에 도시된 바와 같이, MSB(Most Significant Bit)는 부호를 나타내고, MSB 이후의 '8' 비트는 지수부를, 나머지 '23' 비트는 가수부(또는 분수, 유효수)를 나타낼 수 있다. 이하, 제1 타입의 포맷을 갖는 부동 소수점 데이터는 FP32(Floating Point 32)로 지칭될 수 있다.
도 3b를 참조하면, 제2 포맷을 갖는 때에 '16' 비트의 부동 소수점 데이터에서 IEEE754-2008 표준에 따라 '1' 비트는 부호를 나타내고, '5' 비트는 지수부를 나타내며, '10' 비트는 가수부를 나타낸다. 즉, MSB 이후의 '5' 비트는 지수부를, 나머지 '10' 비트는 가수부(또는 분수, 유효수)를 나타낼 수 있다. 이하, 제2 타입의 포맷을 갖는 부동 소수점 데이터는 FP16(Floating Point 16)로 지칭될 수 있다.
도 3c를 참조하면, 제3 포맷을 갖는 때에 '16' 비트의 부동 소수점 데이터에서 '1' 비트는 부호를 나타내고, '8' 비트는 지수부를 나타내며, '7' 비트는 가수부를 나타낸다. 즉, MSB 이후의 '8' 비트는 지수부를, 나머지 '7' 비트는 가수부(또는 분수, 유효수)를 나타낼 수 있다. 이하, 제3 타입의 포맷을 갖는 부동 소수점 데이터는 BF16(Brain Float 16)로 지칭될 수 있다.
도 3d를 참조하면, 정수 포맷의 데이터는 부호의 유무 및 데이터 사이즈(비트 수)에 따라서 다양한 타입으로 표현될 수 있다. 일 예로서, 일반적으로 컴퓨팅 연산에 사용되는 정수는 도 3d에 도시된 바와 같이 부호를 포함하는 8비트의 데이터(2's complement) 로 표현될 수 있으며, 이 때, signed 수인 경우 MSB는 부호를 나타내고, 이후의 7비트는 정수부(INTn)를 나타내고 그 크기는
Figure pat00002
가 된다. unsigned 수인 경우에는 양수이며
Figure pat00003
의 크기는 갖는다.
예시적 실시예에 따른 뉴럴 네트워크 장치는 제1 타입 내지 제3 타입 중 적어도 하나의 포맷에 해당하는 부동 소수점 데이터들을 입력받아 내적 연산 및 누적 연산을 수행할 수 있다. 일 예로, 뉴럴 네트워크 장치는 FP16 타입, BF16 타입 및 FP32 타입의 포맷 중 적어도 하나에 해당하는 복수의 부동 소수점 데이터들을 입력받아 내적 연산 및 누적 연산을 수행하여 FP32 타입의 포맷을 갖는 누적 데이터를 출력할 수 있다. 한편, 이는 예시적 실시예에 불과한 바, 이에 국한되지 않으며, 뉴럴 네트워크 장치는 더 다양한 타입의 포맷들을 갖는 부동 소수점 데이터들을 입력받아 내적 연산 및 누적 연산을 수행하고, 뉴럴 네트워크 시스템에서 요구하는 미리 약속된 포맷을 갖는 누적 데이터를 출력할 수 있다.
도 4는 본 개시의 예시적 실시예에 따른 뉴럴 네트워크 장치의 동작 방법을 설명하기 위한 순서도이다. 도 4는 뉴럴 네트워크 연산을 위한 뉴럴 네트워크 장치(도 1의 120)에서 수행될 수 있다. 이해의 편의를 위해 도 1을 함께 참조하여 설명한다.
도 4를 참조하면, 단계 S100에서 뉴럴 네트워크 장치(120)는 메모리(130)로부터 복수의 부동 소수점 데이터 쌍들을 수신할 수 있다. 부동 소수점 데이터 쌍들은 뉴럴 네트워크 연산에 필요한 입력 피처 값들, 웨이트 값, 함수의 계수들 등을 포함할 수 있다. 또한, 뉴럴 네트워크 장치(120)가 양자화된 뉴럴 네트워크를 처리하는 경우에는 부동 소수점 데이터 쌍들은 양자화 파라미터들을 포함할 수 있다. 예컨대, 양자화 파라미터는 스케일 값(또는, 역스케일 값), 바이어스 값 등을 포함할 수 있다.
단계 S110에서 뉴럴 네트워크 장치(120)는 부동 소수점 데이터 쌍들의 비트 영역을 확장할 수 있다. 뉴럴 네트워크 장치(120)는 부동 소수점 데이터 쌍들에 대한 일괄적인 내적 연산을 위해 데이터의 지수부 비트 영역 및 가수부 비트 영역 중 어느 하나를 미리 약속된 비트 너비에 부합하도록 확장할 수 있다. 이에 대한 구체적인 실시예는 도 8a 및 도 8b에서 서술한다.
단계 S120에서 뉴럴 네트워크 장치(120)는 부동 소수점 데이터 쌍들 각각에 대한 내적 연산 및 누적 연산을 수행할 수 있다. 뉴럴 네트워크 장치(120)는 부동 소수점 데이터 쌍들에 대한 지수부 덧셈 연산 및 가수부 곱셈 연산을 수행할 수 있다. 뉴럴 네트워크 장치(120)는 부동 소수점 데이터 쌍들 각각에 대응하는 지수부 덧셈 결과들 및 누적 데이터의 지수 값으로부터 최대값을 확인할 수 있다. 뉴럴 네트워크 장치(120)는 상기 최대값을 기반으로 부동 소수점 데이터 쌍들 각각에 대응하는 가수부 곱셈 연산 결과들 및 누적 데이터의 가수부를 정렬 쉬프트할 수 있으며, 정렬된 가수부 곱셈 연산 결과들 및 정렬된 누적 데이터의 가수부는 일괄적으로 합산될 수 있다. 뉴럴 네트워크 장치(120)는 합산 결과 데이터를 이용하여 새로운 누적 데이터를 생성할 수 있다. 한편, 단계 S120에서 뉴럴 네트워크 장치(120)는 내적 연산 외의 컨볼루션, 풀링 등을 포함하는 뉴럴 네트워크 연산을 더 수행할 수 있다.
단계 S130에서 뉴럴 네트워크 장치(120)는 단계 S120에서 생성된 최종 데이터를 메모리(130)에 저장할 수 있다.
도 5는 본 개시의 예시적 실시예에 따른 뉴럴 네트워크 시스템(100)의 동작을 나타내는 도면이다.
도 5를 참조하면, 뉴럴 네트워크 장치(120)는 메모리(130)로부터 부동 소수점 입력 데이터들(FPID)을 수신할 수 있다(S1). 일부 실시예에 있어서, 부동 소수점 입력 데이터들(FPID)은 CPU(110)의 개입 없이, 버스(150)를 통해 메모리(130)로부터 뉴럴 네트워크 장치(120)로 전송될 수 있다. 예컨대 뉴럴 네트워크 장치(120)는 DMA(Direct Memory Access) 컨트롤러를 포함할 수 있으며, DMA 컨트롤러가 메모리(130)를 액세스하여 부동 소수점 입력 데이터들(FPID)을 독출할 수 있다. 뉴럴 네트워크 장치(120)는 부동 소수점 연산 회로(20)를 이용하여 부동 소수점 입력 데이터들(FPID)에 대한 내적 연산 및 누적 연산을 포함하는 뉴럴 네트워크 연산을 수행할 수 있다. 뉴럴 네트워크 장치(120)는 뉴럴 네트워크 연산 수행 결과로서 부동 소수점 출력 데이터(FPOD)를 생성하고, 메모리(150)에 전송할 수 있다.
전술한 바와 같이, 본 개시의 실시예에 따른 뉴럴 네트워크 장치(120)는 내적 연산 및 누적 연산을 적은 전력 소모로 빠르고, 효과적으로 수행할 수 있다.
도 6은 본 개시의 예시적 실시예에 따른 뉴럴 네트워크 장치(120)를 나타내는 도면이다. 설명의 편의를 위하여 메모리(130)를 함께 도시한다.
도 6을 참조하면, 뉴럴 네트워크 장치(120)는 DMA 컨트롤러(10) 및 뉴럴 네트워크 프로세서(30)를 포함할 수 있다. 예시적 실시예로, 뉴럴 네트워크 프로세서(30)는 본 개시의 예시적 실시예들에 따른 누적 연산 및 내적 연산을 수행할 수 있는 부동 소수점 연산 회로(20)를 포함할 수 있다.
DMA 컨트롤러(10)는 메모리(130)와 직접 통신할 수 있다. DMA 컨트롤러(10)는 다른 프로세서(예컨대 CPU, GPU 등)의 개입 없이 메모리(130)로부터 입력 데이터들(예컨대 부동 소수점 입력 데이터들(FPID))을 수신하고, 메모리(130)에 뉴럴 네트워크 연산 결과로 생성된 출력 데이터들(FPOD)을 전송할 수 있다. 예컨대 부동 소수점 입력 데이터들(FPID)은 입력 피처 맵(IFM), 연산 파라미터(PM), 또는 웨이트 맵(WM, 커널 파라미터) 등을 포함할 수 있다. 또한, 부동 소수점 입력 데이터들(FPID)은 양자화 파라미터를 포함할 수 있다.
부동 소수점 연산 회로(20)는 부동 소수점 입력 데이터들(FPID)에 대한 내적 연산 및 누적 연산을 수행할 수 있다. 부동 소수점 연산 회로(20)는 부동 소수점 입력 데이터들(FPID)이 상호 내적되는 데이터들로 이뤄진 쌍으로 분류된 부동 소수점 데이터 쌍들 각각에 대한 내적 연산을 수행할 수 있다. 부동 소수점 연산 회로(20)는 부동 소수점 데이터 쌍들 각각에 대한 지수부 덧셈 연산 및 가수부 곱셈 연산을 포함하는 내적 연산을 수행할 수 있다.
예시적 실시예로, 부동 소수점 연산 회로(20)는 내적 연산 및 누적 연산에서 부동 소수점 데이터 쌍들 각각에 대응하는 지수부 덧셈 연산 결과들 및 누적 데이터의 지수 값을 기반으로 부동 소수점 데이터 쌍들 각각에 대응하는 가수부 곱셈 연산 결과들 및 누적 데이터의 가수부를 일괄적으로 정렬 쉬프팅시킨 후에 합산할 수 있다. 예시적 실시예로, 부동 소수점 연산 회로(20)는 상기 지수부 덧셈 연산 결과들 및 누적 데이터의 지수 값으로부터 최대값을 확인하고, 복수의 지수부 덧셈 연산 결과들 각각과 확인된 최대값 간의 차이에 부합하는 방향 및 비트 수만큼 가수부 곱셈 연산 결과들을 정렬 쉬프트하고, 누적 데이터의 지수 값과 확인된 최대값 간의 차이에 부합하는 방향 및 비트 수만큼 누적 데이터의 가수부를 정렬 쉬프트할 수 있다. 부동 소수점 연산 회로(20)는 정렬된 가수부 곱셈 연산 결과들과 정렬된 누적 데이터의 가수부를 합산하여 내적 연산 및 누적 연산을 함께 수행함으로써 새로운 누적 데이터를 생성할 수 있다.
뉴럴 네트워크 프로세서(30)는 부동 소수점 연산 회로(20)의 연산 동작에 선행 또는 후속하여 부동 소수점 연산 이외의 컨볼루션, 풀링 등의 뉴럴 네트워크 연산을 수행할 수 있으며, 부동 소수점 출력 데이터들(FPOD)을 생성할 수 있다. 예컨대 부동 소수점 출력 데이터(FPOD)는 출력 피처 맵(OFM)을 포함할 수 있다.
뉴럴 네트워크 프로세서(30)는 복수의 프로세싱 소자들을 포함하는 프로세싱 소자 어레이를 포함할 수 있다. 도시되지 않았으나 뉴럴 네트워크 프로세서(30)는 뉴럴 네트워크 파라미터, 예컨대 바이어스 값들, 웨이트 값들, 입력 피처들 및 출력 피처들을 저장하기 위한 버퍼 및 컨트롤러를 포함할 수 있다. 복수의 프로세싱 소자들은 부동 소수점 연산 회로(20)를 구성할 수 있으며, 뉴럴 네트워크 프로세서(30)는 부동 소수점 연산 회로(20)를 이용하여 본 개시의 예시적 실시예들에 따른 부동 소수점 기반 연산을 포함하는 뉴럴 네트워크 연산을 수행할 수 있다.
이하, 부동 소수점 연산 회로(20)의 구성 및 동작에 대하여 설명하기로 한다.
도 7a는 본 개시의 예시적 실시예에 따른 내적 연산을 수행하는 부동 소수점 연산 회로(20)를 나타내는 도면이고, 도 7b는 부동 소수점 연산 회로(20)에 입력되는 부동 소수점 데이터 쌍(P1, P2, P3)의 포맷 타입을 설명하기 위한 도면이다.
도 7a를 참조하면, 부동 소수점 연산 회로(20)는 곱셈기(21)(또는, 부동 소수점 곱셈기), 부호 및 지수 계산기(22), 정렬 쉬프터(23), 가산기(24), 포스트 가산기(25) 및 버퍼(26)를 포함할 수 있다. 포스트 가산기(25)는 가산기(24) 이후의 로직들을 통칭하는 것으로, 리딩 원 검출 회로(25_1), 정규화 및 반올림 회로(25_2) 및 누적 데이터 생성 회로(25_3)를 포함할 수 있다.
부동 소수점 연산 회로(20)는 버퍼(26)로부터 저장된 제1 누적 데이터(ACC1)를 수신할 수 있다. 제1 누적 데이터(ACC1)의 부호(ACC1_S) 및 지수부(ACC1_E)는 부호 및 지수 계산기(22)에 입력되고, 가수부(ACC1_F)는 정렬 쉬프터(23)에 입력될 수 있다.
부동 소수점 연산 회로(20)는 입력되는 제1 내지 제4 부동 소수점 데이터 쌍들에 대한 내적 연산을 수행할 수 있다. 제1 부동 소수점 데이터 쌍은 제1 및 제2 부동 소수점 데이터(IN_A1, IN_B1)를 포함하고, 제2 부동 소수점 데이터 쌍은 제3 및 제4 부동 소수점 데이터(IN_A2, IN_B2)를 포함하고, 제3 부동 소수점 데이터 쌍은 제5 및 제6 부동 소수점 데이터(IN_A3, IN_B3)를 포함하며, 제4 부동 소수점 데이터 쌍은 제7 및 제8 부동 소수점 데이터(IN_A4, IN_B4)를 포함할 수 있다. 제1 내지 제8 부동 소수점 데이터(IN_A1, IN_B1, IN_A2, IN_B2, IN_A3, IN_B3, IN_A4, IN_B4)의 부호들(Sa1, Sb1, Sa2, Sb2, Sa3, Sb3, Sa4, Sb4) 및 지수부들(Ea1, Eb1, Ea2, Eb2, Ea3, Eb3, Ea4, Eb4)은 부호 및 지수 계산기(22)에 입력되고, 가수부들(Fa1, Fb1, Fa2, Fb2, Fa3, Fb3, Fa4, Fb4)은 곱셈기(21)에 입력될 수 있다.
곱셈기(21)는 가수부들(Fa1, Fb1, Fa2, Fb2, Fa3, Fb3, Fa4, Fb4)에 대한 곱셈 연산을 수행하여 제1 내지 제4 가수부 곱셈 결과(F_mul1, F_mul2, F_mul3, F_mul4)를 생성하고, 정렬 쉬프터(23)에 제공할 수 있다. 한편, 예시적 실시예로, 곱셈기(21)는 11비트 곱셈기로 구현될 수 있으며, 더 나아가, 확장된 비트 수를 갖는 24 또는 32비트 곱셈기로 구현될 수 있다.
부호 및 지수 계산기(22)는 부호들(Sa1, Sb1, Sa2, Sb2, Sa3, Sb3, Sa4, Sb4) 및 지수부들(Ea1, Eb1, Ea2, Eb2, Ea3, Eb3, Ea4, Eb4)을 기반으로 부호를 결정하고, 지수부 덧셈 연산을 수행하여, 지수 정보(EI) 및 부호 정보(SI)를 생성할 수 있다.
예시적 실시예로, 부호 및 지수 계산기(22)는 지수부 덧셈 연산 결과들 및 제1 누적 데이터(ACC1)의 지수부(ACC1_E)의 값(또는, 지수 값)으로부터 최대값을 확인할 수 있고, 확인된 최대값을 기반으로 정렬 쉬프터(23)에 제공되는 제1 쉬프팅 정보(SH1)를 생성할 수 있다. 제1 쉬프팅 정보(SH1)는 곱셈기(21)로부터 제공된 제1 내지 제4 가수부 곱셈 결과(F_mul1, F_mul2, F_mul3, F_mul4), 제1 누적 데이터(ACC1)의 가수부(ACC1_F) 각각에 대응하는 쉬프팅 방향, 쉬프팅량에 관한 정보를 포함할 수 있다. 구체적으로, 부호 및 지수 계산기(22)는 복수의 지수부 덧셈 연산 결과들, 제1 누적 데이터(ACC1)의 가수부(ACC1_F) 각각과 상기 최대값 간의 차이에 부합하는 방향 및 비트 수만큼 제1 내지 제4 가수부 곱셈 결과(F_mul1, F_mul2, F_mul3, F_mul4), 제1 누적 데이터(ACC1)의 가수부(ACC1_F) 각각이 정렬 쉬프트되도록 하기 위한 제1 쉬프팅 정보(SH1)를 생성할 수 있다.
예시적 실시예로, 정렬 쉬프터(23)는 제1 쉬프팅 정보(SH1)를 기반으로 제1 내지 제4 가수부 곱셈 결과(F_mul1, F_mul2, F_mul3, F_mul4), 제1 누적 데이터(ACC1)의 가수부(ACC1_F)를 각각 정렬 쉬프팅시켜 정렬된 제1 내지 제4 가수부 곱셈 결과(F_align1, F_align2, F_align3, F_align4), 정렬된 가수부(ACC1_F_align)를 가산기(24)에 제공할 수 있다.
예시적 실시예로, 가산기(24)는 내적 연산 및 누적 연산을 함께 수행할 수 있도록 정렬된 제1 내지 제4 가수부 곱셈 결과(F_align1, F_align2, F_align3, F_align4) 및 정렬된 가수부(ACC1_F_align)를 동시에 입력받을 수 있다. 가산기(24)는 제1 가산 회로(24_1) 및 제2 가산 회로(24_2)를 포함할 수 있다. 제1 가산 회로(24_1)는 정렬된 제1 내지 제4 가수부 곱셈 결과(F_align1, F_align2, F_align3, F_align4) 및 정렬된 가수부(ACC1_F_align)의 MSB(Most Significant Bit)가 포함된 상위 비트들을 합산하여 제1 합산 결과 데이터(F_add1)를 생성할 수 있다. 제2 가산 회로(24_2)는 정렬된 제1 내지 제4 가수부 곱셈 결과(F_align1, F_align2, F_align3, F_align4) 및 정렬된 가수부(ACC1_F_align)의 LSB(Least Significant Bit)가 포함된 하위 비트들을 합산하여 제2 합산 결과 데이터(F_add2)를 생성할 수 있다.
예시적 실시예에 따른 가산기(24)의 제1 및 제2 가산 회로(24_1, 24_2) 중 어느 하나는 정수 곱셈 연산을 위한 정수 곱셈기와 공유되어 부동 소수점 연산, 정수 연산 등에 모두 이용될 수 있으며, 이에 따라, 부동 소수점 연산 회로(20)를 포함하는 뉴럴 네트워크 장치의 사이즈를 효과적으로 줄일 수 있다.
예시적 실시예로, 포스트 가산기(25)는 제1 및 제2 합산 결과 데이터(F_add1, F_add2)를 수신하여 새로운 제2 누적 데이터(ACC2)를 생성할 수 있다.
리딩 원 검출 회로(25_1)는 제1 및 제2 합산 결과 데이터(F_add1, F_add2)가 합산된 제3 합산 결과 데이터에서 MSB를 포함하는 제1 개수의 상위 비트들에 대한 제1 리딩 원 검출과 제3 합산 결과 데이터에서 LSB를 포함하는 제2 개수의 하위 비트들에 대한 제2 리딩 원 검출을 병렬적으로 수행할 수 있다. 즉, 리딩 원 검출 회로(25_1)는 제1 리딩 원 검출 시에 MSB부터 낮은 비트 방향으로 제3 합산 결과 데이터의 상위 비트들을 쉬프팅시키면서 '1'을 검출할 수 있으며, 이 때, 최대 쉬프트 가능한 비트 수는 제1 개수에 부합할 수 있다. 또한, 리딩 원 검출 회로(25_2)는 제2 리딩 원 검출 시에 LSB부터 높은 비트 방향으로 제3 합산 결과 데이터의 하위 비트들을 쉬프팅시키면서 '1'을 검출할 수 있으며, 이 때, 최대 쉬프트 가능한 비트 수는 제2 개수에 부합할 수 있다. 예시적 실시예로, 제1 개수는 제2 개수와 상이할 수 있으며, 일 예로, 제1 개수는 제2 개수보다 적을 수 있다. 리딩 원 검출 회로(25_1)는 제1 및 제2 리딩 원 검출 결과를 기반으로 제3 합산 결과 데이터를 쉬프팅시킬 수 있다. 구체적으로, 리딩 원 검출 회로(25_1)는 제1 및 제2 리딩 원 검출 결과 중 '1'이 검출된 리딩 원 검출 결과를 참조하여 이에 부합하는 비트 수 및 쉬프팅 방향으로 제3 합산 결과 데이터를 쉬프팅시킬 수 있다.
정규화 및 반올림 회로(25_2)는 쉬프팅된 제3 합산 결과 데이터에 대하여 '1'의 위치에 따른 정규화 및 부동 소수점 연산 회로(20)로부터 출력되는 데이터의 포맷의 비트 수에 부합하도록 반올림을 수행할 수 있다.
누적 데이터 생성 회로(25_3)는 지수 정보(EI) 및 부호 정보(SI)를 기반으로 정규화 및 반올림된 제3 합산 결과 데이터에 부합하는 지수 값 및 부호를 반영하여 제2 누적 데이터(ACC2)를 생성하여 버퍼(26)에 저장할 수 있다.
도 7b를 참조하면, 제1 케이스(Case1)에서 부동 소수점 연산 회로(20)는 내적 연산을 위해 상호 동일한 타입의 포맷을 갖는 제1 및 제2 부동 소수점 데이터(IN_A, IN_B)가 입력될 수 있다. 제1 및 제2 부동 소수점 데이터(IN_A, IN_B)의 부호 비트 영역(Sa, Sb)의 너비, 지수부 비트 영역(Ea, Eb)의 너비 및 가수부 비트 영역(Fa, Fb)의 너비는 동일할 수 있다. 일 예로, 제1 및 제2 부동 소수점 데이터(IN_A, IN_B)는 FP16 타입의 포맷을 가질 수 있다.
제2 케이스(Case2)에서 부동 소수점 연산 회로(20)는 내적 연산을 위해 상이한 타입의 포맷을 갖는 제1 및 제2 부동 소수점 데이터(IN_A, IN_B)가 입력될 수 있다. 제1 및 제2 부동 소수점 데이터(IN_A, IN_B)의 부호 비트 영역(Sa, Sb)의 너비는 동일하나, 지수부 비트 영역(Ea, Eb)의 너비 및 가수부 비트 영역(Fa, Fb)의 너비는 상이할 수 있다. 일 예로, 제1 및 제2 부동 소수점 데이터(IN_A, IN_B)는 각각 FP16, BF16 타입의 포맷을 가질 수 있다.
제3 케이스(Case3)에서 부동 소수점 연산 회로(20)는 내적 연산을 위해 상호 동일한 타입의 포맷을 갖는 제1 및 제2 부동 소수점 데이터(IN_A, IN_B)가 입력될 수 있다. 제1 및 제2 부동 소수점 데이터(IN_A, IN_B)의 부호 비트 영역(Sa, Sb)의 너비, 지수부 비트 영역(Ea, Eb)의 너비 및 가수부 비트 영역(Fa, Fb)의 너비는 동일할 수 있다. 일 예로, 제1 및 제2 부동 소수점 데이터(IN_A, IN_B)는 BF16 타입의 포맷을 가질 수 있다.
한편, 도 7a 및 도 7b에 도시된 부동 소수점 연산 회로(20) 관련 내용은 예시적인 실시예에 불과한 바, 이에 국한되지 않고, 부동 소수점 연산 회로(20)는 본 개시의 기술적 사상이 적용될 수 있는 다양한 예들로 구현될 수 있으며, 다양한 타입의 포맷을 갖는 부동 소수점 데이터들을 다양한 개수만큼 수신하고, 이에 대한 내적 연산을 수행할 수 있다.
도 8a 및 도 8b는 부동 소수점 데이터의 포맷의 타입에 따른 비트 확장을 수행하는 곱셈기(21)를 설명하기 위한 도면이다.
도 8a를 참조하면, 곱셈기(21)는 비트 확장 회로(21_1)를 포함할 수 있다. 예시적 실시예로, 비트 확장 회로(21_1)는 부동 소수점 데이터의 포맷의 타입에 따라 부동 소수점 데이터에 포함된 지수부 비트 영역 및 가수부 비트 영역 중 적어도 하나를 확장할 수 있다. 일 예로, 비트 확장 회로(21_1)는 제1 타입의 부동 소수점 데이터(INtype1)를 수신하여 부동 소수점 데이터(INtype1)의 지수부(Etype1)를 그대로 출력하고, 가수부(Ftype1)의 비트 영역을 미리 약속된 제1 비트 너비로 확장할 수 있다. 미리 약속된 제1 비트 너비는 제2 타입의 부동 소수점 데이터(INtype2)의 가수부(Ftype2)의 비트 너비, 도 7a의 곱셈기(21)의 비트 너비, 부동 소수점 연산 회로의 출력 데이터의 비트 수 및 출력 데이터의 포맷 타입 중 적어도 하나와 연관될 수 있다.
도 8b를 참조하면, 비트 확장 회로(21_1)는 제2 타입의 부동 소수점 데이터(INtype2)를 수신하여 부동 소수점 데이터(INtype2)의 지수부(Etype2)의 비트 영역을 미리 약속된 제2 비트 너비로 확장하고, 가수부(Ftype2)를 그대로 출력할 수 있다. 미리 약속된 제2 비트 너비는 제1 타입의 부동 소수점 데이터(INtype1)의 지수부(Etype1)의 비트 너비와 연관될 수 있다.
일 예로, 제1 타입은 BF16이고, 제2 타입은 FP16인 때에, 제1 비트 너비는 FP16에서의 가수부(Ftype2) 비트 너비에 따른 11비트(FP16의 가수부(Ftype2) 비트 너비인 10비트와 1비트의 합)로 미리 약속될 수 있다. 즉, BF16의 포맷을 갖는 부동 소수점 데이터(INtype1)의 가수부(Ftype1)는 FP16의 포맷을 갖는 부동 소수점 데이터(INtype2)의 가수부(Ftype2) 비트 너비에 부합하도록 확장된 후, 곱셈 연산이 수행될 수 있다.
또한, 일 예로, 제2 비트 너비는 BF16에서의 지수부(Etype1) 비트 너비에 따른 8비트로 미리 약속될 수 있다. 즉, FP16의 포맷을 갖는 부동 소수점 데이터(INtype2)의 지수부(Etype2)는 BF16의 포맷을 갖는 부동 소수점 데이터(INtype1)의 지수부(Etype1) 비트 너비에 부합하도록 확장된 후, 덧셈 연산이 수행될 수 있다.
도 9 내지 도 12는 본 개시의 예시적 실시예에 따른 부동 소수점 연산 회로(20a, 20b, 20c, 20d)의 동작을 설명하기 위한 도면이다.
도 9를 참조하면, 부동 소수점 연산 회로(20a)는 제1 내지 제6 멀티플렉서(M11~M61), XOR 회로(XOR), 맥스 트리 회로(MT), 제1 덧셈 회로(AC11) 및 곱셈 회로(MC)를 포함할 수 있다.
제1 내지 제6 멀티플렉서(M11~M61)는 부동 소수점 연산 회로(20a)가 정수 연산 모드로 동작하는 때에, 'IS_FLOAT' 신호에 응답하여 '0'을 출력할 수 있다. 제1 내지 제6 멀티플렉서(M11~M61)로부터 출력된 '0'으로 인해 부동 소수점 연산 회로(20a) 내의 부동 소수점 연산을 위한 구성들이 비활성화될 수 있다. 이하에서는, 부동 소수점 연산 회로(20a)가 부동 소수점 연산 모드로 동작하는 것을 중심으로 서술한다.
부동 소수점 연산 회로(20a)는 제1 내지 제8 부동 소수점 데이터(IN_A1, IN_B1, IN_A2, IN_B2, IN_A3, IN_B3, IN_A4, IN_B4) 및 제1 누적 데이터(ACC1)를 수신할 수 있다. 제1 멀티플렉서(M11)는 제1, 제3, 제5 및 제7 부동 소수점 데이터(IN_A1, IN_A2, IN_A3, IN_A4)의 부호들(Sa)을 순차적으로 XOR 회로(XOR)로 출력할 수 있다. 제2 멀티플렉서(M21)는 제2, 제4, 제6 및 제8 부동 소수점 데이터(IN_B1, IN_B2, IN_B3, IN_B4)의 부호들(Sb)을 순차적으로 XOR 회로(XOR)로 출력할 수 있다. XOR 회로(XOR)는 수신된 부호들(Sa, Sb)에 대한 XOR 연산을 수행하여 부호 정보(SI)를 생성할 수 있다.
제3 멀티플렉서(M31)는 제1, 제3, 제5 및 제7 부동 소수점 데이터(IN_A1, IN_A2, IN_A3, IN_A4)의 제1 지수부들(Ea)을 순차적으로 맥스 트리 회로(MT)와 덧셈 회로(AC)에 각각 출력할 수 있다. 제4 멀티플렉서(M41)는 제2, 제4, 제6 및 제8 부동 소수점 데이터(IN_B1, IN_B2, IN_B3, IN_B4)의 제2 지수부들(Eb)을 순차적으로 맥스 트리 회로(MT)와 덧셈 회로(AC)에 각각 출력할 수 있다.
맥스 트리 회로(MT)는 제1 누적 데이터(ACC1)의 제3 지수부(ACC1_E), 제1 및 제2 지수부들(Ea, Eb)을 수신하여 정렬 쉬프트를 위한 최대값(Max_E)을 확인하여 출력할 수 있다. 예시적 실시예로, 맥스 트리 회로(MT)는 제1 및 제2 지수부들(Ea, Eb)로부터 각각에 대응하는 지수부끼리 덧셈 연산을 수행하고, 복수의 지수부 덧셈 결과들 및 제3 지수부(ACC1_E)의 값을 비교하여 가장 큰 지수 값을 최대값(Max_E)으로서 출력할 수 있다.
덧셈 회로(AC)는 제1 및 제2 지수부들(Ea, Eb)로부터 각각에 대응하는 지수부들끼리의 덧셈 연산을 수행함으로써, 제1 내지 제4 지수부 덧셈 연산 결과(E_add1~E_add4)를 출력할 수 있다.
제5 멀티플렉서(M51)는 제1, 제3, 제5 및 제7 부동 소수점 데이터(IN_A1, IN_A2, IN_A3, IN_A4)의 제1 가수부들(Fa)을 순차적으로 곱셈 회로(MC)에 각각 출력할 수 있다. 제6 멀티플렉서(M61)는 제2, 제4, 제6 및 제8 부동 소수점 데이터(IN_B1, IN_B2, IN_B3, IN_B4)의 제2 가수부들(Fb)을 순차적으로 곱셈 회로(MC)에 각각 출력할 수 있다.
곱셈 회로(MC)는 제1 및 제2 가수부들(Fa, Fb)로부터 각각에 대응하는 가수부들끼리의 곱셈 연산을 수행함으로써, 제1 내지 제4 가수부 곱셈 연산 결과(F_mul1~F_mul4)를 출력할 수 있다.
도 10을 더 참조하면, 부동 소수점 연산 회로(20b)는 제1 내지 제4 인버터(IVT1~IVT4), 제7 내지 제10 멀티플렉서(M12~M42), 제1 내지 제5 쉬프트 회로(SHT11~SHT51), 제1 내지 제5 뺄셈 회로(SC1~SC5)를 포함할 수 있다.
제7 멀티플렉서(M12)는 제1 가수부 곱셈 연산 결과(F_mul1)와 제1 인버터(IVT1)에 의해 반전된 제1 가수부 곱셈 연산 결과를 수신할 수 있다. 제8 멀티플렉서(M22)는 제2 가수부 곱셈 연산 결과(F_mul2)와 제2 인버터(IVT2)에 의해 반전된 제2 가수부 곱셈 연산 결과를 수신할 수 있다. 제9 멀티플렉서(M32)는 제3 가수부 곱셈 연산 결과(F_mul3)와 제3 인버터(IVT3)에 의해 반전된 제3 가수부 곱셈 연산 결과를 수신할 수 있다. 제10 멀티플렉서(M42)는 제4 가수부 곱셈 연산 결과(F_mul4)와 제4 인버터(IVT4)에 의해 반전된 제4 가수부 곱셈 연산 결과를 수신할 수 있다.
제7 내지 제10 멀티플렉서(M12~M42)는 부호 정보(SI) 중 각각 자신에 대응되는 부호에 응답하여 비반전된 가수부 곱셈 연산 결과를 출력하거나, 반전된 가수부 곱셈 연산 결과를 출력할 수 있다. 예를 들어, 제7 멀티플렉서(M12)는 제1 가수부 곱셈 연산 결과(F_mul1)가 양수인 경우, 제1 가수부 곱셈 연산 결과(F_mul1)를 그대로 출력하고, 제1 가수부 곱셈 연산 결과(F_mul1)가 음수인 경우 반전된 제1 가수부 곱셈 연산 결과를 출력할 수 있다.
제1 뺄셈 회로(SC1)는 최대값(Max_E)과 제1 지수부 덧셈 연산 결과(E_add1)를 뺄셈 연산하여 연산 결과를 제1 쉬프트 회로(SHT11)에 제공할 수 있다. 제1 쉬프트 회로(SHT11)는 제7 멀티플렉서(M12)로부터의 출력을 최대값(Max_E)과 제1 지수부 덧셈 연산 결과(E_add1) 간의 차이에 부합하는 방향 및 비트 수로 쉬프팅시킴으로써 정렬된 제1 가수부 곱셈 연산 결과(F_align1)를 출력할 수 있다.
제2 뺄셈 회로(SC2)는 최대값(Max_E)과 제2 지수부 덧셈 연산 결과(E_add2)를 뺄셈 연산하여 연산 결과를 제2 쉬프트 회로(SHT21)에 제공할 수 있다. 제2 쉬프트 회로(SHT21)는 제8 멀티플렉서(M22)로부터의 출력을 최대값(Max_E)과 제2 지수부 덧셈 연산 결과(E_add2) 간의 차이에 부합하는 방향 및 비트 수로 쉬프팅시킴으로써 정렬된 제2 가수부 곱셈 연산 결과(F_align2)를 출력할 수 있다.
제3 뺄셈 회로(SC3)는 최대값(Max_E)과 제3 지수부 덧셈 연산 결과(E_add3)를 뺄셈 연산하여 연산 결과를 제3 쉬프트 회로(SHT31)에 제공할 수 있다. 제3 쉬프트 회로(SHT31)는 제9 멀티플렉서(M32)로부터의 출력을 최대값(Max_E)과 제3 지수부 덧셈 연산 결과(E_add3) 간의 차이에 부합하는 방향 및 비트 수로 쉬프팅시킴으로써 정렬된 제3 가수부 곱셈 연산 결과(F_align3)를 출력할 수 있다.
제4 뺄셈 회로(SC4)는 최대값(Max_E)과 제4 지수부 덧셈 연산 결과(E_add4)를 뺄셈 연산하여 연산 결과를 제4 쉬프트 회로(SHT41)에 제공할 수 있다. 제4 쉬프트 회로(SHT41)는 제10 멀티플렉서(M42)로부터의 출력을 최대값(Max_E)과 제4 지수부 덧셈 연산 결과(E_add4) 간의 차이에 부합하는 방향 및 비트 수로 쉬프팅시킴으로써 정렬된 제4 가수부 곱셈 연산 결과(F_align4)를 출력할 수 있다.
제5 뺄셈 회로(SC5)는 최대값(Max_E)과 제1 누적 데이터(ACC1)의 제3 지수부(ACC1_E)를 뺄셈 연산하여 연산 결과를 제5 쉬프트 회로(SHT51)에 제공할 수 있다. 제5 쉬프트 회로(SHT51)는 제1 누적 데이터(ACC1)의 가수부(ACC1_F)를 최대값(Max_E)과 제3 지수부(ACC1_E) 간의 차이에 부합하는 방향 및 비트 수로 쉬프팅시킴으로써 정렬된 가수부(ACC1_F_align)를 출력할 수 있다.
예시적 실시예로, 제1 내지 제5 쉬프트 회로(SHT11~SHT51)의 최대 쉬프트 양은 뉴럴 네트워크 장치가 요구하는 연산 정확도를 해치지 않는 선에서 제한되어, 쉬프트 회로의 사이즈 및 전력 소모를 줄일 수 있다.
도 11을 더 참조하면, 부동 소수점 연산 회로(20c)는 제1 내지 제8 부호 확장 회로(SE1~SE8), 제1 내지 제8 제로 확장 회로(ZE1~ZE8), 제11 내지 제18 멀티플렉서(M13~M83), 제2 내지 제9 덧셈 회로(AC12~AC82)를 포함할 수 있다. 이하에서, 서술의 편의상 정렬된 제1 내지 제4 가수부 곱셈 연산 결과(F_align1~F_align4)은 제1 내지 제4 가수부 곱셈 연산 결과로 서술한다.
제11 멀티플렉서(M13)는 제1 부호 확장 회로(SE1)에 의해 제1 가수부 곱셈 연산 결과(F_align1)의 상위 비트들로부터 확장된 비트들에 부호가 복사되어 '1'이 채워진 제1 가수부 곱셈 연산 결과(F_align1)의 확장된 제1 상위 비트들과 제1 제로 확장 회로(ZE1)에 의해 제1 가수부 곱셈 연산 결과(F_align1)의 상위 비트들로부터 확장된 비트들에 '0'이 채워진 제1 가수부 곱셈 연산 결과(F_align1)의 확장된 제2 상위 비트들을 수신할 수 있다.
이와 같은 방식으로, 제12 내지 제14 멀티플렉서(M23~M43)는 제2 내지 제4 부호 확장 회로(SE2~SE4)에 의해 확장된 비트들에 부호가 복사되어 '1'이 채워진 제2 내지 제4 가수부 곱셈 연산 결과(F_align2~F_align4)의 확장된 제1 상위 비트들과 제2 내지 제4 제로 확장 회로(ZE2~ZE4)에 의해 확장된 비트들에 '0'이 채워진 제2 내지 제4 가수부 곱셈 연산 결과(F_align2~F_align4)의 확장된 제2 상위 비트들을 각각 수신할 수 있다.
제15 멀티플렉서(M53)는 제5 부호 확장 회로(SE5)에 의해 제1 가수부 곱셈 연산 결과(F_align1)의 하위 비트들로부터 확장된 비트들에 부호가 복사되어 '1'이 채워진 제1 가수부 곱셈 결과(F_align1)의 확장된 제1 하위 비트들과 제5 제로 확장 회로(ZE5)에 의해 확장된 비트들에 '0'이 채워진 제1 가수부 곱셈 연산 결과(F_align1)의 확장된 제2 하위 비트들을 수신할 수 있다.
이와 같은 방식으로, 제16 내지 제18 멀티플렉서(M53~M83)는 제6 내지 제8 부호 확장 회로(SE6~SE8)에 의해 확장된 비트들에 부호가 복사되어 '1'이 채워진 제2 내지 제4 가수부 곱셈 연산 결과(F_align2~F_align4)의 확장된 제1 하위 비트들과 제6 내지 제8 제로 확장 회로(ZE6~ZE8)에 의해 확장된 비트들에 '0'이 채워진 제2 내지 제4 가수부 곱셈 연산 결과(F_align2~F_align4)의 확장된 제2 하위 비트들을 각각 수신할 수 있다.
예시적 실시예로, 부동 소수점 연산 모드(예를 들면, IS_Float=1)일 때, 제11 내지 제14 멀티플렉서(M13~M43)는 부호 정보(SI) 중 각각 자신에 대응되는 부호에 응답하여 부호 확장 회로(SE1~SE4)에 의해 확장된 제1 상위 비트들을 출력할 수 있다. 또한, 부동 소수점 연산 모드(예를 들면, IS_Float=1)일 때, 제15 내지 제18 멀티플렉서(M53~M83)는 제로 확장 회로(ZE5~ZE8)에 의해 확장된 제2 하위 비트들을 출력할 수 있다.
일부 실시예에 있어서, 정수 연산 모드(예를 들면, IS_Float=0)일 때, 제11 내지 제14 멀티플렉서(M13~M43)는 부호 정보(SI) 중 각각 자신에 대응되는 부호에 응답하여 부호 확장 회로(SE1~SE4)에 의해 확장된 제1 상위 비트들을 출력하거나, 제로 확장 회로(ZE1~ZE4)에 의해 확장된 제2 상위 비트들을 출력할 수 있다. 또한, 정수 연산 모드(예를 들면, IS_Float=0)일 때, 제15 내지 제18 멀티플렉서(M53~M83)는 부호 정보(SI) 중 각각 자신에 대응되는 부호에 응답하여 부호 확장 회로(SE5~SE8)에 의해 확장된 제1 하위 비트들을 출력하거나, 제로 확장 회로(ZE5~ZE8)에 의해 확장된 제2 하위 비트들을 출력할 수 있다. 한편, 정수 연산 모드에서 정렬된 제1 내지 제4 가수부 곱셈 연산 결과(F_align1~F_align4)는 정수 곱셈 연산 결과들로 대체될 수 있다.
제2 덧셈 회로(AC12)는 제11 및 제12 멀티플렉서(M13, M23)로부터의 출력들을 합산하고, 제3 덧셈 회로(AC22)는 제13 및 제14 멀티플렉서(M33, M43)로부터의 출력들을 합산할 수 있다. 제4 덧셈 회로(AC32)는 제2 및 제3 덧셈 회로(AC12, AC22)의 출력들을 합산할 수 있다. 제5 덧셈 회로(AC42)는 제4 덧셈 회로(AC32)의 출력과 정렬된 가수부(ACC1_F_align)의 상위 비트들을 합산하여 제1 합산 결과 데이터(F_add1)를 생성할 수 있다. 한편, 도시되지는 않았으나, 제5 덧셈 회로(AC42)에 입력되는 정렬된 가수부(ACC1_F_align)의 상위 비트들은 부호 확장된 데이터일 수 있다.
제6 덧셈 회로(AC52)는 제15 및 제16 멀티플렉서(M53, M63)로부터의 출력들을 합산하고, 제7 덧셈 회로(AC62)는 제17 및 제18 멀티플렉서(M73, M83)로부터의 출력들을 합산할 수 있다. 제8 덧셈 회로(AC72)는 제6 및 제7 덧셈 회로(AC52, AC62)로부터의 출력들을 합산할 수 있다. 제9 덧셈 회로(AC82)는 제8 덧셈 회로(AC72)의 출력과 정렬된 가수부(ACC1_F_align)의 하위 비트들을 합산하여 제2 합산 결과 데이터(F_add2)를 생성할 수 있다. 한편, 도시되지는 않았으나, 제9 덧셈 회로(AC82)에 입력되는 정렬된 가수부(ACC1_F_align)의 하위 비트들은 제로 확장된 데이터일 수 있다.
도 12를 더 참조하면, 부동 소수점 연산 회로(20d)는 제19 내지 제21 멀티플렉서(M14~M34), 제10 내지 제13 덧셈 회로(AC13~AC33), 제1 및 제2 리딩 원 검출기(LOD_1, LOD_2), 제6 및 제7 쉬프트 회로(SHT12, SHT22), 정규화 및 반올림 회로(NR) 및 누적 데이터 생성 회로(ACG)를 포함할 수 있다.
제19 및 제20 멀티플렉서(M14, M24)는 부동 소수점 연산 회로(20d)가 정수 연산 모드로 동작하는 때에, 'IS_FLOAT' 신호에 응답하여 '0'을 출력할 수 있다. 제19 및 제20 멀티플렉서(M14, M24)로부터 출력된 '0'으로 인해 부동 소수점 연산 회로(20d) 내의 부동 소수점 연산을 위한 구성들이 비활성화될 수 있다. 이하에서는, 부동 소수점 연산 회로(20d)가 부동 소수점 연산 모드로 동작하는 것을 중심으로 서술한다.
제19 멀티플렉서(M14)는 제1 합산 결과 데이터(F_add1)를 제10 덧셈 회로(AC13)로 출력하고, 제20 멀티플렉서(M24)는 제2 합산 결과 데이터(F_add2)를 제10 덧셈 회로(AC13)로 출력할 수 있다.
제10 덧셈 회로(AC13)는 제1 및 제2 합산 결과 데이터(F_add1, F_add2)를 합산하여 제3 합산 결과 데이터를 생성할 수 있다. 제1 리딩 원 검출기(LOD_1)는 부호를 나타내는 적어도 하나의 비트가 제거된 제3 합산 결과 데이터의 MSB를 포함하는 k(단, k는 1 이상의 정수)개의 상위 비트들에 대한 제1 리딩 원 검출을 수행할 수 있다. 제2 리딩 원 검출기(LOD_2)는 부호를 나타내는 적어도 하나의 비트가 제거된 제3 합산 결과 데이터의 LSB를 포함하는 n(단, n은 1 이상의 정수)개의 하위 비트들에 대한 제2 리딩 원 검출을 수행할 수 있다. 제1 및 제2 리딩 원 검출기(LOD_1, LOD_2)는 각각 병렬적으로 동작할 수 있다. 일 예로, k개는 n개보다 적을 수 있다. 한편, 제3 합산 결과 데이터의 부호를 나타내는 적어도 하나의 비트는 누적 데이터 생성 회로(CDG)에 제공될 수 있다.
제6 쉬프트 회로(SHT12)는 제1 리딩 원 검출기(LOD_1)에 의해 제3 합산 결과 데이터를 제1 방향으로 쉬프팅시킬 수 있고, 제7 쉬프트 회로(SHT22)는 제2 리딩 원 검출기(LOD_2)에 의해 제3 합산 결과 데이터를 제2 방향으로 쉬프팅시킬 수 있다. 일 예로, 제1 방향과 제2 방향은 반대일 수 있으며, 제1 방향은 상위 비트에서 하위 비트 방향이고, 제2 방향은 하위 비트에서 상위 비트 방향일 수 있다.
제11 덧셈 회로(AC23)는 제1 및 제2 리딩 원 검출기(LOD_1, LOD_2)로부터 검출 결과에 따른 쉬프팅 정보 및 최대값(Max_E)을 수신하여 합산할 수 있다. 쉬프팅 정보는 제3 합산 결과 데이터로부터 '1'이 검출된 위치를 나타내는 것으로 제1 및 제2 리딩 원 검출기(LOD_1, LOD_2) 중 어느 하나로부터 생성된 정보일 수 있다.
제21 멀티플렉서(M34)는 제6 및 제7 쉬프트 회로(SHT12, SHT22)로부터의 출력들 중 '1'을 검출한 리딩 원 검출기에 대응하는 출력을 정규화 및 반올림 회로(NR)에 제공할 수 있다.
정규화 및 반올림 회로(NR)는 제6 쉬프트 회로(SHT12) 또는 제7 쉬프트 회로(SHT22)로부터 쉬프트된 제3 합산 결과 데이터에 대한 정규화 및 반올림을 수행할 수 있으며, 제12 덧셈 회로(AC33)에 지수 업데이트 정보를 제공할 수 있다.
제12 덧셈 회로(AC33)는 지수 업데이트 정보 및 제11 덧셈 회로(AC23)의 출력을 합산하여 누적 데이터 생성 회로(CDG)에 제공할 수 있다.
누적 데이터 생성 회로(CDG)는 제3 합산 결과 데이터의 부호, 정규화 및 반올림 회로(NR)의 출력 및 제12 덧셈 회로(AC33)의 출력을 이용하여 새로운 제2 누적 데이터(ACC2)를 생성할 수 있다.
도 13은 본 개시의 예시적 실시예에 따른 뉴럴 네트워크 장치에 포함된 연산 회로(1000)를 나타내는 블록도이다.
도 13을 참조하면, 연산 회로(1000)는 부동 소수점 곱셈기(1010), 정수 곱셈기(1020), 정렬 쉬프터(1030), 가산기(1040), 제1 포스트 가산기(1050), 제2 포스트 가산기(1060) 및 버퍼(1070)를 포함할 수 있다. 도 13에 도시된 구성들 외에도 연산 회로(1000)는 다양한 뉴럴 네트워크 연산을 수행할 수 있도록 복수의 구성들을 더 포함할 수 있다. 가산기(1040)는 논리적 또는 물리적으로 상호 분리된 제1 및 제2 가산 회로(1041, 1042)를 포함할 수 있다. 예시적 실시예로, 연산 회로(1000)는 부동 소수점 데이터들에 대한 내적 연산 및 누적 연산, 정수 데이터들에 대한 내적 연산을 수행할 수 있다.
예시적 실시예로, 가산기(1040)의 제1 및 제2 가산 회로(1041, 1042) 중 제2 가산 회로(1042)는 부동 소수점 곱셈기(1010) 및 정수 곱셈기(1020)에 공유될 수 있다. 또한, 부동 소수점 곱셈기(1010)는 연산 회로(1000)가 정수 모드인 때에, 정수 곱셈 연산을 지원할 수 있다.
예시적 실시예로, 연산 회로(1000)가 부동 소수점 연산 모드인 때에는 부동 소수점 곱셈기(1010)는 부동 소수점 연산을 수행한 후, 제1 및 제2 가산 회로(1041, 1042)에 정렬 쉬프터(1030)를 거친 가수부 곱셈 결과들을 제공할 수 있다. 연산 회로(1000)가 정수 모드인 때에는, 정수 곱셈기(1020)는 정수 연산을 수행한 후, 제1 정수 곱셈 연산 결과들을 제2 가산 회로(1042)에 제공할 수 있으며, 부동 소수점 곱셈기(1010)는 정수 연산을 수행한 후, 제2 정수 곱셈 연산 결과들을 정렬 쉬프트(1030)를 거치지 않고, 제1 가산 회로(1041)에 바로 제공할 수 있다.
예시적 실시예로, 연산 회로(1000)는 부동 소수점 연산 모드인 때에 가산기(1040)는 부동 소수점 데이터들의 정렬된 가수부 곱셈 결과들과 누적 데이터의 가수부를 일괄적으로 합산하여 제1 포스트 가산기(1050)에 제공할 수 있다. 제1 포스트 가산기(1050)는 수신한 합산 결과 데이터에 대한 리딩 원 검출, 정규화 및 반올림 등을 수행하고, 업데이트된 지수를 반영하여 새로운 제2 누적 데이터를 생성한 후, 버퍼(1070)에 저장할 수 있다.
예시적 실시예로, 연산 회로(1000)는 정수 연산 모드인 때에 가산기(1040)는 정수 데이터들의 정수부 곱셈 결과들을 일괄적으로 합산하여 제2 포스트 가산기(1060)에 제공할 수 있다. 제2 포스트 가산기(1060)는 수신한 합산 결과를 기반으로 제2 출력 데이터를 생성하고, 버퍼(1070)에 저장할 수 있다.
한편, 일부 실시예에 있어서, 제1 포스트 가산기(1050)와 제2 포스트 가산기(1060)는 통합될 수 있고, 다른 실시예에 있어서, 제1 포스트 가산기(1050)와 제2 포스트 가산기(1060)는 분리될 수 있다.
도 14는 본 개시의 예시적 실시예에 따른 애플리케이션 프로세서(2000)를 나타내는 블록도이다.
도 14를 참조하면, 애플리케이션 프로세서(2000)는 CPU(2100), RAM(Random Access Memory, 2200), GPU(2300), 뉴럴 네트워크 장치(2400), 센서 인터페이스(2500), 디스플레이 인터페이스(2600) 및 메모리 인터페이스(2700)를 포함할 수 있다. 이 외에도 애플리케이션 프로세서(2000)는 통신 모듈을 더 포함할 수 있으며, 애플리케이션 프로세서(2000)의 각 구성(CPU(2100), RAM(Random Access Memory, 2200), GPU(2300), 뉴럴 네트워크 장치(2400), 센서 인터페이스(2500), 디스플레이 인터페이스(2600) 및 메모리 인터페이스(2700))은 버스(2800)를 통해 서로 데이터를 송수신할 수 있다.
CPU(2100)는 애플리케이션 프로세서(2000)의 전반적인 동작을 제어할 수 있다. CPU(2100)는 하나의 프로세서 코어(Single Core)를 포함하거나, 복수의 프로세서 코어들(Multi-Core)을 포함할 수 있다. CPU(2100)는 메모리(2710)에 저장된 프로그램들 및/또는 데이터를 처리 또는 실행할 수 있다. 일 실시예에 있어서, CPU(2100)는 메모리(2710)에 저장된 프로그램들을 실행함으로써, 뉴럴 네트워크 장치(2400)의 기능을 제어할 수 있다.
RAM(2200)은 프로그램들, 데이터, 및/또는 명령들(instructions)을 일시적으로 저장할 수 있다. 실시 예에 따라, RAM(2200)은 DRAM(dynamic RAM) 또는 SRAM(static RAM)으로 구현될 수 있다. RAM(2200)은 인터페이스들(2500, 2600)을 통해 입출력되거나, GPUU(2300) 또는 메인 CPU(2100)에서 생성되는 이미지를 일시적으로 저장할 수 있다.
애플리케이션 프로세서(2000)는 ROM(Read Only Memory)를더 구비할 수 있다. ROM은 지속적으로 사용되는 프로그램들 및/또는 데이터를 저장할 수 있다. ROM은 EPROM(erasable programmable ROM) 또는 EEPROM(electrically erasable programmable ROM) 등으로 구현될 수 있다.
GPU(2300)는 영상 데이터에 대한 이미지 처리를 수행할 수 있다. 컨대 GPU(2300)는 센서 인터페이스(2500)를 통해 수신되는 영상 데이터에 대한 이미지 처리를 수행할 수 있다. 실시예에 있어서, GPU(2300)는 부동 소수점 연산을 수행할 수 있다.
GPU(2300)에서 처리된 영상 데이터는 메모리(2710)에 저장되거나 또는 디스플레이 인터페이스(2600)를 통해 디스플레이 장치(2610)로 제공될 수 있다. 메모리(2710)에 저장된 영상 데이터는 뉴럴 네트워크 장치(2400)에 제공될 수 있다.
센서 인터페이스(2500)는 애플리케이션 프로세서(2000)에 연결되는 센서(2510)로부터 입력되는 데이터(예컨대, 영상 데이터, 음성 데이터 등)를 인터페이싱할 수 있다.
디스플레이 인터페이스(2600)는 디스플레이 장치(2610)로 출력되는 데이터(예컨대, 이미지)를 인터페이싱할 수 있다. 디스플레이 장치(2610)는 이미지 또는 영상에 대한 데이터를 LCD(Liquid-crystal display), AMOLED(active matrix organic light emitting diodes) 등의 디스플레이를 통해 출력할 수 있다.
메모리 인터페이스(2700)는 애플리케이션 프로세서(2000)의 외부에 있는 메모리(2710)로부터 입력되는 데이터 또는 메모리(2710)로 출력되는 데이터를 인터페이싱할 수 있다. 실시예에 따라, 메모리(2710)는 DRAM이나 SRAM 등의 휘발성 메모리 또는 ReRAM, PRAM 또는 NAND flash 등의 비휘발성 메모리로 구현될 수 있다. 메모리(2710)는 메모리 카드(MMC, eMMC, SD, micro SD) 등으로 구현될 수도 있다.
뉴럴 네트워크 장치(2400)는 도 1 내지 도 13에 따른 부동 소수점 연산을 수행하는 부동 소수점 연산 회로(20)를 포함할 수 있다. 부동 소수점 연산 회로(20)는 다양한 타입의 포맷을 갖는 부동 소수점 데이터들에 대한 내적 연산 및 누적 연산을 수행할 수 있으며, 연산 정확도를 해치지 않는 선에서 정렬 쉬프터의 쉬프트 가능한 비트 너비를 줄임으로써 부동 소수점 연산 회로(20)의 사이즈 및 전력 소모를 최적화할 수 있다. 부동 소수점 연산 회로(20)는 내적 연산에서 부동 소수점 데이터들의 지수부 덧셈 연산 결과들 및 누적 데이터의 지수 값으로부터 최대값을 확인하고, 최대값을 기반으로 부동 소수점 데이터들의 가수부 곱셈 연산 결과들 및 누적 데이터의 가수부를 일괄적으로 정렬 쉬프팅시킨 후 합산할 수 있다. 부동 소수점 연산 회로(20)의 구체적인 실시예들은 전술된 바, 이하 생략한다.

Claims (20)

  1. 뉴럴 네트워크 연산 수행을 위한 뉴럴 네트워크 장치에 있어서,
    내적 연산 및 누적 연산을 수행하도록 구성된 부동 소수점 연산 회로; 및
    상기 부동 소수점 연산 회로로부터 생성된 제1 누적 데이터가 저장된 버퍼를 포함하고,
    상기 부동 소수점 연산 회로는,
    상기 내적 연산 및 상기 누적 연산에서, 복수의 부동 소수점 데이터 쌍들 각각에 대응하는 복수의 지수부 덧셈 연산 결과들 및 상기 제1 누적 데이터의 지수 값으로부터 확인된 최대값을 기반으로 상기 복수의 부동 소수점 데이터 쌍들 각각에 대응하는 복수의 가수부 곱셈 연산 결과들 및 상기 제1 누적 데이터의 가수부를 각각 정렬 쉬프트한 후 합산하도록 구성된 것을 특징으로 하는 뉴럴 네트워크 장치.
  2. 제1항에 있어서,
    상기 부동 소수점 연산 회로는,
    상기 합산을 통해 생성된 합산 결과 데이터에서 MSB(Most Significant Bit) 를 포함하는 제1 개수의 상위 비트들에 대한 제1 리딩 원 검출(leading one detection)과 LSB(Least Significant Bit)를 포함하는 제2 개수의 하위 비트들에 대한 제2 리딩 원 검출을 병렬적으로 수행하고, 상기 제1 및 제2 리딩 원 검출 결과를 기반으로 상기 합산 결과 데이터를 쉬프팅한 후, 정규화 및 반올림하여 제2 누적 데이터를 생성하도록 구성된 것을 특징으로 하는 뉴럴 네트워크 장치.
  3. 제2항에 있어서,
    상기 제1 개수는, 상기 제2 개수보다 적은 것을 특징으로 하는 뉴럴 네트워크 장치.
  4. 상기 부동 소수점 연산 회로는,
    상기 제2 누적 데이터를 상기 버퍼에 저장하도록 구성된 것을 특징으로 하는 뉴럴 네트워크 장치.
  5. 제1항에 있어서,
    상기 부동 소수점 연산 회로는,
    상기 내적 연산 및 상기 누적 연산을 같이 수행하기 위해 상기 복수의 부동 소수점 데이터 쌍들과 상기 제1 누적 데이터를 입력받도록 구성된 것을 특징으로 하는 뉴럴 네트워크 장치.
  6. 제1항에 있어서,
    상기 복수의 부동 소수점 데이터 쌍들에 포함된 복수의 입력 데이터들은,
    상기 제1 누적 데이터와 상이한 타입의 포맷을 갖는 것을 특징으로 하는 뉴럴 네트워크 장치.
  7. 제1항에 있어서,
    상기 복수의 부동 소수점 데이터 쌍들에 포함된 복수의 데이터들은,
    FP16(Floating Point 16) 타입 또는 BF16(Brain Float 16) 타입의 포맷을 갖는 것을 특징으로 하는 뉴럴 네트워크 장치.
  8. 제7항에 있어서,
    상기 제1 누적 데이터는,
    FP32(Floating Point 32) 타입의 포맷을 갖는 것을 특징으로 하는 뉴럴 네트워크 장치.
  9. 제7항에 있어서,
    상기 부동 소수점 연산 회로는,
    상기 복수의 데이터들 중 상기 FP16 타입의 포맷을 갖는 제1 데이터의 지수부 비트 영역을 확장하고, 상기 BF16 타입의 포맷을 갖는 제2 데이터의 가수부 비트 영역을 확장하도록 구성된 것을 특징으로 하는 뉴럴 네트워크 장치.
  10. 제1항에 있어서,
    상기 부동 소수점 연산 회로는,
    정렬된 상기 복수의 가수부 곱셈 연산 결과들과 정렬된 상기 제1 누적 데이터의 가수부를 합산하도록 구성된 가산기를 포함하며,
    상기 가산기는,
    정렬된 상기 복수의 가수부 곱셈 연산 결과들의 상위 비트들과 정렬된 상기 제1 누적 데이터의 가수부의 상위 비트들을 합산하도록 구성된 제1 가산 회로; 및
    정렬된 상기 복수의 가수부 곱셈 연산 결과들의 하위 비트들과 정렬된 상기 상기 제1 누적 데이터의 가수부의 하위 비트들을 합산하도록 구성된 제2 가산 회로를 포함하는 것을 특징으로 하는 뉴럴 네트워크 장치.
  11. 제10항에 있어서,
    상기 제1 및 제2 가산 회로 중 어느 하나는,
    상기 뉴럴 네트워크 장치에 포함되어 정수 곱셈 연산을 수행하도록 구성된 정수 곱셈기와 공유되도록 구성된 것을 특징으로 하는 뉴럴 네트워크 장치.
  12. 제10항에 있어서,
    상기 부동 소수점 연산 회로는,
    상기 제1 가산 회로로부터 출력된 제1 합산 결과 데이터와 상기 제2 가산 회로로부터 출력된 제2 합산 결과 데이터를 합산하고, 이를 정규화 및 반올림하여 제2 누적 데이터를 생성하고, 상기 제2 누적 데이터를 상기 버퍼에 저장하도록 구성된 것으ㄹ 특징으로 하는 뉴럴 네트워크 장치.
  13. 제1항에 있어서,
    상기 부동 소수점 연산 회로는,
    상기 복수의 지수부 덧셈 연산 결과들 각각과 상기 최대값 간의 차이에 부합하는 방향 및 비트 수만큼 상기 복수의 가수부 곱셈 연산 결과들을 각각 정렬 쉬프트하고, 상기 제1 누적 데이터의 가수부와 상기 최대값 간의 차이에 부합하는 방향 및 비트 수만큼 상기 제1 누적 데이터의 가수부를 정렬 쉬프트하도록 구성된 정렬 쉬프터를 포함하는 것을 특징으로 하는 뉴럴 네트워크 장치.
  14. 제13항에 있어서,
    상기 정렬 쉬프터의 쉬프트 가능한 비트 너비는, 상기 뉴럴 네트워크 장치로부터 생성된 데이터를 이용하는 애플리케이션의 연산 정확도 요구 정도에 기반되어 결정되는 것을 특징으로 하는 뉴럴 네트워크 장치.
  15. 뉴럴 네트워크 장치의 동작 방법에 있어서,
    복수의 부동 소수점 데이터 쌍들 및 제1 누적 데이터를 수신하는 단계; 및
    상기 복수의 부동 소수점 데이터 쌍들 및 상기 제1 누적 데이터를 이용하여 제2 누적 데이터를 생성하기 위한 연산을 수행하는 단계를 포함하고,
    상기 연산을 수행하는 단계는,
    상기 복수의 부동 소수점 데이터 쌍들 각각에 대응하는 복수의 지수부 덧셈 연산 결과들 및 상기 제1 누적 데이터의 지수 값으로부터 최대값을 확인하는 단계;
    상기 최대값을 기반으로 상기 복수의 부동 소수점 데이터 쌍들 각각에 대응하는 복수의 가수부 곱셈 연산 결과들 및 상기 제1 누적 데이터의 가수부를 정렬 쉬프트하는 단계; 및
    정렬된 상기 복수의 가수부 곱셈 연산 결과들과 정렬된 상기 제1 누적 데이터의 가수부를 합산하는 단계를 포함하는 것을 특징으로 하는 뉴럴 네트워크의 동작 방법.
  16. 제15항에 있어서,
    상기 정렬 쉬프트하는 단계는,
    상기 복수의 지수부 덧셈 연산 결과들 각각과 상기 최대값 간의 차이에 부합하는 방향 및 비트 수만큼 상기 복수의 가수부 곱셈 연산 결과들을 각각 정렬 쉬프트하는 단계; 및
    상기 제1 누적 데이터의 가수부와 상기 최대값 간의 차이에 부합하는 방향 및 비트 수만큼 상기 제1 누적 데이터의 가수부를 정렬 쉬프트하는 단계를 포함하는 것을 특징으로 하는 뉴럴 네트워크의 동작 방법.
  17. 제15항에 있어서,
    상기 합산 단계에서 생성된 합산 결과 데이터에 대한 정규화 및 반올림을 수행하여 제2 누적 데이터를 생성하는 단계를 더 포함하는 것을 특징으로 하는 뉴럴 네트워크의 동작 방법.
  18. 제17항에 있어서,
    상기 제2 누적 데이터를 생성하는 단계는,
    상기 합산 결과 데이터에서 MSB 비트를 포함하는 제1 개수의 상위 비트들에 대한 제1 리딩 원 검출을 수행하는 단계;
    상기 합산 결과 데이터에서 LSB 비트를 포함하는 제2 개수의 하위 비트들에 대한 제2 리딩 원 검출을 수행하는 단계; 및
    상기 제1 및 제2 리딩 원 검출 결과를 기반으로 상기 합산 결과 데이터를 쉬프팅하는 단계를 포함하는 것을 특징으로 하는 뉴럴 네트워크의 동작 방법.
  19. 제18항에 있어서,
    상기 제1 리딩 원 검출은, 상기 제2 리딩 원 검출과 병렬적으로 수행되는 것을 특징으로 하는 뉴럴 네트워크의 동작 방법.
  20. 애플리케이션 프로세서에 있어서,
    내적 연산 및 누적 연산을 수행하도록 구성된 뉴럴 네트워크 장치를 포함하고,
    상기 뉴럴 네트워크 장치는,
    상기 내적 연산 및 상기 누적 연산에서, 상기 복수의 부동 소수점 데이터 쌍들에 대한 복수의 지수부 덧셈 연산 결과들 및 제1 누적 데이터의 지수 값을 기반으로 상기 복수의 부동 소수점 데이터 쌍들 각각에 대응하는 복수의 가수부 곱셈 연산 결과들 및 상기 제1 누적 데이터의 가수부를 각각 일괄적으로 정렬 쉬프트한 후에 합산하도록 구성된 것을 특징으로 하는 애플리케이션 프로세서.
KR1020210001056A 2020-04-07 2021-01-05 뉴럴 네트워크 연산 수행을 위한 뉴럴 네트워크 장치, 뉴럴 네트워크 장치의 동작 방법 및 뉴럴 네트워크 장치를 포함하는 애플리케이션 프로세서 KR20210124888A (ko)

Priority Applications (3)

Application Number Priority Date Filing Date Title
US17/217,398 US20210312012A1 (en) 2020-04-07 2021-03-30 Neural network device, method of operating the neural network device, and application processor including the neural network device
CN202110366760.4A CN113495717A (zh) 2020-04-07 2021-04-06 神经网络装置、操作神经网络装置的方法和应用处理器
DE102021108622.1A DE102021108622A1 (de) 2020-04-07 2021-04-07 Neuronale netzvorrichtung , verfahren zum betrieb der neuronalen netzvorrichtung und anwendungsprozessor, der die neuronale netzvorrichtung umfasst

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
KR20200042408 2020-04-07
KR1020200042408 2020-04-07

Publications (1)

Publication Number Publication Date
KR20210124888A true KR20210124888A (ko) 2021-10-15

Family

ID=78151049

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020210001056A KR20210124888A (ko) 2020-04-07 2021-01-05 뉴럴 네트워크 연산 수행을 위한 뉴럴 네트워크 장치, 뉴럴 네트워크 장치의 동작 방법 및 뉴럴 네트워크 장치를 포함하는 애플리케이션 프로세서

Country Status (1)

Country Link
KR (1) KR20210124888A (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023068489A1 (ko) * 2021-10-18 2023-04-27 삼성전자 주식회사 상이한 데이터 타입들을 지원하는 npu를 포함하는 전자 장치 및 그 제어 방법
CN116127255A (zh) * 2022-12-14 2023-05-16 北京登临科技有限公司 卷积运算电路、及具有该卷积运算电路的相关电路或设备

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023068489A1 (ko) * 2021-10-18 2023-04-27 삼성전자 주식회사 상이한 데이터 타입들을 지원하는 npu를 포함하는 전자 장치 및 그 제어 방법
CN116127255A (zh) * 2022-12-14 2023-05-16 北京登临科技有限公司 卷积运算电路、及具有该卷积运算电路的相关电路或设备
CN116127255B (zh) * 2022-12-14 2023-10-03 北京登临科技有限公司 卷积运算电路、及具有该卷积运算电路的相关电路或设备

Similar Documents

Publication Publication Date Title
CN113449857B (zh) 一种数据处理方法和数据处理设备
US11429838B2 (en) Neural network device for neural network operation, method of operating neural network device, and application processor including the neural network device
EP3627397B1 (en) Processing method and apparatus
US20190095212A1 (en) Neural network system and operating method of neural network system
CN112258512B (zh) 点云分割方法、装置、设备和存储介质
TWI834729B (zh) 神經網路處理器及其卷積操作方法
CN111368656A (zh) 一种视频内容描述方法和视频内容描述装置
EP4318313A1 (en) Data processing method, training method for neural network model, and apparatus
KR20210124888A (ko) 뉴럴 네트워크 연산 수행을 위한 뉴럴 네트워크 장치, 뉴럴 네트워크 장치의 동작 방법 및 뉴럴 네트워크 장치를 포함하는 애플리케이션 프로세서
US20200167637A1 (en) Neural network processor using dyadic weight matrix and operation method thereof
US20210182670A1 (en) Method and apparatus with training verification of neural network between different frameworks
EP3809337A1 (en) Method and apparatus with neural network operation
CN113449859A (zh) 一种数据处理方法及其装置
JP2021197176A (ja) 浮動小数点演算を行うニューラルネットワーク装置及びその動作方法
US20230289601A1 (en) Integrated circuit that extracts data, neural network processor including the integrated circuit, and neural network
US20210174179A1 (en) Arithmetic apparatus, operating method thereof, and neural network processor
KR20210124894A (ko) 뉴럴 네트워크 연산 수행을 위한 뉴럴 네트워크 장치, 뉴럴 네트워크 장치의 동작 방법 및 뉴럴 네트워크 장치를 포함하는 애플리케이션 프로세서
US20210312012A1 (en) Neural network device, method of operating the neural network device, and application processor including the neural network device
US20210311703A1 (en) Neural network device for neural network operation, operating method of the neural network device, and application processor including the same
US20210312269A1 (en) Neural network device for neural network operation, method of operating neural network device, and application processor including neural network device
US20230025626A1 (en) Method and apparatus for generating process simulation models
KR20210124883A (ko) 뉴럴 네트워크 연산 수행을 위한 뉴럴 네트워크 장치, 뉴럴 네트워크 장치의 동작 방법 및 뉴럴 네트워크 장치를 포함하는 애플리케이션 프로세서
US11335045B2 (en) Combining feature maps in an artificial intelligence semiconductor solution
KR20220084845A (ko) 채널 수에 기초하여 컨볼루션 연산을 수행하는 npu 장치 및 이의 동작 방법
CN115146757A (zh) 一种神经网络模型的训练方法及装置