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

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

Info

Publication number
KR20210124894A
KR20210124894A KR1020210014396A KR20210014396A KR20210124894A KR 20210124894 A KR20210124894 A KR 20210124894A KR 1020210014396 A KR1020210014396 A KR 1020210014396A KR 20210014396 A KR20210014396 A KR 20210014396A KR 20210124894 A KR20210124894 A KR 20210124894A
Authority
KR
South Korea
Prior art keywords
data
integer
floating
neural network
circuit
Prior art date
Application number
KR1020210014396A
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/212,474 priority Critical patent/US20210311703A1/en
Priority to CN202110364898.0A priority patent/CN113496278A/zh
Priority to DE102021108536.5A priority patent/DE102021108536A1/de
Publication of KR20210124894A publication Critical patent/KR20210124894A/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
    • 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/52Multiplying; Dividing
    • 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)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Computing Systems (AREA)
  • Mathematical Analysis (AREA)
  • Pure & Applied Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Optimization (AREA)
  • Biomedical Technology (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Biophysics (AREA)
  • Data Mining & Analysis (AREA)
  • Artificial Intelligence (AREA)
  • Computational Linguistics (AREA)
  • Neurology (AREA)
  • Evolutionary Computation (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Image Analysis (AREA)

Abstract

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

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 곱셈기, 제2 곱셈기, 정렬 쉬프터, 및 상기 제1 곱셈기와 상기 제2 곱셈기가 공유하도록 구성된 가산기를 포함하고, 복수의 부동 소수점 데이터 쌍들에 대한 제1 내적 연산 또는 복수의 정수 데이터 쌍들에 대한 제2 내적 연산을 수행하도록 구성된 연산 회로를 포함하고, 상기 연산 회로는, 상기 제1 내적 연산에서, 상기 제1 곱셈기를 이용하여 상기 복수의 부동 소수점 데이터 쌍들 각각에 대한 복수의 가수부 곱셈 연산 결과들을 획득하고, 상기 정렬 시프터를 이용하여 상기 복수의 부동 소수점 데이터 쌍들 각각에 대응하는 복수의 지수부 덧셈 연산 결과들로부터 확인된 최대값을 기반으로 상기 복수의 가수부 곱셈 연산 결과들을 각각 정렬 쉬프트한 후, 상기 가산기를 이용하여 정렬된 상기 복수의 가수부 곱셈 연산 결과들을 합산하여 제1 누적 데이터를 출력하고, 상기 제2 내적 연산에서, 상기 제2 곱셈기를 이용하여 상기 복수의 정수 데이터 쌍들 각각에 대한 복수의 정수 곱셈 연산 결과들을 획득하고, 상기 가산기를 이용하여 상기 복수의 정수 곱셈 연산 결과들을 합산하여 제2 누적 데이터를 출력하도록 할 수 있다.
본 개시의 예시적 실시예에 따른 뉴럴 네트워크 장치의 동작 방법은, 복수의 데이터 쌍들을 수신하는 단계, 상기 복수의 데이터 쌍들이 부동 소수점 포맷을 갖는 경우 부동 소수점 연산을 수행하는 단계, 상기 복수의 데이터 쌍들이 정수 포맷을 갖는 경우 정수 연산을 수행하는 단계 및 상기 부동 소수점 연산 또는 상기 정수 연산을 통해 생성된 최종 데이터를 메모리에 저장하는 단계를 포함하고, 상기 부동 소수점 연산을 수행하는 단계는, 부동 소수점 곱셈기를 이용하여 상기 복수의 데이터 쌍들 각각에 대응하는 복수의 가수부 곱셈 연산 결과들을 획득하고, 가산기를 이용하여 상기 복수의 가수부 곱셈 연산 결과들을 합산하여 제1 누적 데이터를 생성하고, 상기 정수 연산을 수행하는 단계는, 정수 곱셈기를 이용하여 상기 복수의 데이터 쌍들 각각에 대응하는 복수의 정수 곱셈 연산 결과들을 획득하고, 상기 가산기를 이용하여 상기 복수의 정수 곱셈 연산 결과들을 합산하여 제2 누적 데이터를 생성할 수 있다.
본 개시의 예시적 실시예에 따른 애플리케이션 프로세서는, 제1 곱셈기, 제2 곱셈기, 정렬 쉬프터, 및 상기 제1 곱셈기와 상기 제2 곱셈기가 공유하도록 구성된 가산기를 포함하고, 복수의 부동 소수점 데이터 쌍들에 대한 제1 내적 연산 또는 복수의 정수 데이터 쌍들에 대한 제2 내적 연산을 수행하도록 구성된 뉴럴 네트워크 장치를 포함하고, 상기 뉴럴 네트워크 장치는, 상기 제1 내적 연산에서, 상기 제1 곱셈기를 이용하여 상기 복수의 부동 소수점 데이터 쌍들 각각에 대한 복수의 가수부 곱셈 연산 결과들을 획득하고, 상기 정렬 쉬프터를 이용하여 상기 복수의 부동 소수점 데이터 쌍들 각각에 대응하는 복수의 지수부 덧셈 연산 결과들로부터 확인된 최대값을 기반으로 상기 복수의 가수부 곱셈 연산 결과들을 각각 정렬 쉬프트한 후, 상기 가산기를 이용하여 정렬된 상기 복수의 가수부 곱셈 연산 결과들을 합산하여 제1 누적 데이터를 출력하고, 상기 제2 내적 연산에서, 상기 제1 곱셈기 및 상기 제2 곱셈기를 이용하여 상기 복수의 정수 데이터 쌍들 각각에 대한 복수의 정수 곱셈 연산 결과들을 획득하고, 상기 가산기를 이용하여 상기 복수의 정수 곱셈 연산 결과들을 합산하여 제2 누적 데이터를 출력할 수 있다.
본 개시의 예시적 실시예에 따른 뉴럴 네트워크 장치는 부동 소수점 곱셈 연산을 위한 부동 소수점 곱셈기 및 정수 곱셈 연산을 수행하기 위한 정수 곱셈기를 포함하고, 상기 부동 소수점 곱셈기 및 상기 정수 곱셈기는 적어도 하나의 가산기를 공유하도록 구성함으로써, 뉴럴 네트워크 장치의 전력 소모 및 설계 면적이 감소될 수 있다.
본 개시의 예시적 실시예들에서 얻을 수 있는 효과는 이상에서 언급한 효과들로 제한되지 아니하며, 언급되지 아니한 다른 효과들은 이하의 기재로부터 본 개시의 예시적 실시예들이 속하는 기술분야에서 통상의 지식을 가진 자에게 명확하게 도출되고 이해될 수 있다. 즉, 본 개시의 예시적 실시예들을 실시함에 따른 의도하지 아니한 효과들 역시 본 개시의 예시적 실시예들로부터 당해 기술분야의 통상의 지식을 가진 자에 의해 도출될 수 있다.
도 1은 본 개시의 예시적 실시예에 따른 뉴럴 네트워크 시스템을 개략적으로 나타내는 블록도이다.
도 2는 뉴럴 네트워크 구조의 일 예를 나타낸다.
도 3a 내지 도 3c는 부동 소수점 데이터 포맷의 타입의 예들을 설명하기 위한 도면이고, 도 3d는 정수 데이터의 일 예를 설명하는 도면이다.
도 4는 본 개시의 예시적 실시예에 따른 뉴럴 네트워크 장치의 동작 방법을 설명하기 위한 순서도이다.
도 5는 본 개시의 예시적 실시예에 따른 뉴럴 네트워크 시스템의 동작을 나타내는 도면이다.
도 6은 본 개시의 예시적 실시예에 따른 뉴럴 네트워크 장치를 나타내는 도면이다.
도 7a 내지 도 7c는 본 개시의 예시적 실시예에 따른 뉴럴 네트워크 장치에 포함된 연산 회로를 나타내는 블록도이다.
도 8a는 연산 회로(20)에 입력되는 데이터 쌍의 포맷 타입을 설명하기 위한 도면이고, 도 8b는 본 개시의 예시적 실시예에 따른 부동 소수점 모드에서 내적 연산을 수행하는 연산 회로(20)를 나타내는 도면이고, 도 8c는 본 개시의 예시적 실시예에 따른 정수 연산 모드에서 내적 연산을 수행하는 연산 회로(20)를 나타내는 도면이다.
도 9a 및 도 9b는 부동 소수점 데이터의 포맷의 타입에 따른 비트 확장을 수행하는 부동 소수점 곱셈기를 설명하기 위한 도면이다.
도 10 내지 도 15는 본 개시의 예시적 실시예에 따른 연산 회로의 동작을 설명하기 위한 도면이다.
도 16은 본 개시의 예시적 실시예에 따른 애플리케이션 프로세서를 나타내는 블록도이다.
이하, 첨부한 도면을 참조하여 본 개시의 실시예들에 대해 상세히 설명한다.
도 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)는 지수부 덧셈 연산 결과들 및 누적 데이터의 지수 값으로부터 확인된 최대값을 기반으로 가수부 곱셈 연산 결과들 및 누적 데이터의 가수부를 각각 정렬 쉬프트할 수 있다.
한편, 연산 회로(20)에 포함된 내적 연산을 위한 정렬 쉬프터의 쉬프트 가능한 비트 너비는 뉴럴 네트워크 시스템(100)이 요구하는 연산 정확도에 영향을 미치지 않는 정도로 줄일 수 있다. 이를 통해, 정렬 쉬프터의 사이즈를 줄이고, 전력 소모를 최소화하는 동시에 내적 연산 속도의 향상시킬 수 있다. 한편, 뉴럴 네트워크 시스템(100)이 요구하는 연산 정확도가 비교적 높은 구현예에서는, 연산 회로(20)의 정렬 쉬프터는 비교적 높은 비트 너비만큼 데이터를 정렬할 수 있도록 설계될 수 있고, 뉴럴 네트워크 장치(120)가 요구하는 연산 정확도가 비교적 낮은 구현예에서는, 상기 정렬 쉬프터는 비교적 낮은 비트 너비만큼 데이터를 정렬할 수 있도록 설계될 수 있다.
예시적 실시예로, 연산 회로(20)는 정렬된 가수부 곱셈 연산 결과들과 정렬된 누적 데이터의 가수부를 일괄적으로 합산함으로써 내적 연산과 누적 연산을 동시에 수행할 수 있다. 이를 위해 연산 회로(20)는 정렬된 가수부 곱셈 연산 결과들과 정렬된 누적 데이터의 가수부가 함께 입력되는 가산기(미도시)를 포함할 수 있다.
예시적 실시예로, 연산 회로(20)의 가산기(미도시)는 분리된 제1 및 제2 가산 회로를 포함할 수 있다. 일 예로, 제1 가산 회로는 정렬된 가수부 곱셈 연산 결과들의 상위 비트들과 정렬된 누적 데이터의 가수부의 상위 비트들을 합산하고, 제2 가산 회로는 정렬된 가수부 곱셈 연산 결과들의 하위 비트들과 정렬된 누적 데이터의 가수부의 하위 비트들을 합산할 수 있다. 구분된 제1 및 제2 가산 회로의 구성을 통해서 이후, 가산기(미도시)로부터 출력된 합산 결과 데이터에 대한 리딩 원 검출(leading one detection)에 유리하고, 가산기(미도시) 이후의 로직(예를 들면, 포스트 가산기)을 최적화할 수 있다. 리딩 원 검출 방법에 구체적인 실시예는 후술한다.
한편, 전술한 실시예들은, 연산 회로(20)가 내적 연산과 누적 연산을 동시에 수행하는 것을 전제로 설명되었으나, 본 개시는 이에 한하지 않으며, 연산 회로(20)는 내적 연산만을 수행하도록 구현될 수도 있다. 이 경우, 연산 회로(20)는 지수부 덧셈 연산 결과들로부터 확인된 최댓값을 기반으로 가수부 곱셈 연산 결과들 각각을 정렬 쉬프트하고, 정렬된 가수부 곱셈 연산 결과들만을 합산할 수 있다.
본 개시의 예시적 실시예에 따른 뉴럴 네트워크 장치(120)는 정수 연산을 기반으로 뉴럴 네트워크 연산을 수행할 수 있다. 연산 회로(20)는 복수의 정수 데이터들에 대한 내적 연산을 수행하고, 생성된 연산 결과를 누적하는 연산을 수행할 수 있다. 복수의 정수 데이터들은 내적 연산을 위한 복수의 정수 데이터 쌍들로 구분되어 연산 회로(20)에 입력될 수 있다.
예시적 실시예로, 연산 회로(20)는 정수 데이터 쌍들에 대한 정수부 곱셈 연산을 수행하여 정수 데이터 쌍들 각각에 대응하는 정수부 곱셈 연산 결과들을 생성할 수 있다. 그리고 연산 회로(20)는 정수부 곱셈 연산 결과들을 합산하여 내적 연산 결과를 생성할 수 있다. 예시적 실시예로, 연산 회로(20)는 내적 연산에서 정수부 곱셈 결과들을 합산할 때에, 누적 데이터도 함께 합산함으로써 누적 연산을 수행할 수 있으며, 누적 데이터는 연산 회로(20) 내의 버퍼(미도시)에 저장될 수 있다.
예시적 실시예로, 연산 회로(20)는 전술한 부동 소수점 가수부 곱셈 연산을 수행하기 위한 부동 소수점 곱셈기(미도시) 뿐만 아니라 정수 곱셈 연산을 수행하기 위한 정수 곱셈기(미도시)를 더 포함할 수 있으며, 제1 및 제2 가산 회로 중 어느 하나는 부동 소수점 곱셈기(미도시) 및 정수 곱셈기(미도시)와 공유될 수 있다. 예시적 실시예로, 연산 회로(20)는 상기 부동 소수점 곱셈기(미도시) 및 정수 곱셈기(미도시) 중 적어도 하나를 이용하여 정수 데이터 쌍들에 대한 정수부 곱셈 연산을 수행하고, 제1 및 제2 가산 회로 중 적어도 하나를 이용하여 정수부 곱셈 결과들 및 누적 데이터를 합산할 수 있다.
한편, 전술한 실시예들은, 연산 회로(20)가 내적 연산과 누적 연산을 동시에 수행하는 것을 전제로 설명되었으나, 본 개시는 이에 한하지 않으며, 연산 회로(20)는 내적 연산만을 수행하도록 구현될 수도 있다. 이 경우, 연산 회로(20)는 정수부 곱셈 연산 결과들만을 합산할 수 있다.
이를 통해, 정수 곱셈 연산을 수행하기 위해 별도의 가산기가 필요 없게 되어 뉴럴 네트워크 장치(120)의 사이즈 및 불필요한 전력 소모를 줄일 수 있다. 연산 회로(20)의 정수 연산 모드에서의 동작 관련 구체적인 실시예는 후술한다.
예시적 실시예로, 연산 회로(20)는 부동 소수점 연산 모드로 동작 시, 가산기(미도시)로부터 출력된 합산 결과 데이터에 대하여 정규화(normalization) 및 반올림(rounding) 등의 동작을 수행하여 새로운 누적 데이터를 생성할 수 있다. 또한, 연산 회로(20)는 정수 연산 모드로 동작 시, 가산기(미도시)로부터 출력된 합산 결과를 누적 데이터로서 생성할 수 있다. 새로운 누적 데이터는 연산 회로(20) 내의 버퍼(미도시)에 저장될 수 있다.
뉴럴 네트워크 장치(120)는 메모리(130)에 저장된 복수의 부동 소수점 데이터들(FPD) 또는 정수 데이터들(ID)을 입력 데이터들로서 수신하고, 연산 회로(20)를 이용하여 부동 소수점 데이터들(FPD) 또는 정수 데이터들(ID)에 대한 내적 연산을 수행할 수 있다. 뉴럴 네트워크 장치(120)는 연산 회로(20)를 이용하여 복수의 내적 연산 결과들을 누적시킬 수 있다. 누적 데이터는 뉴럴 네트워크 장치(120) 내의 버퍼(미도시)에 저장될 수 있다.
뉴럴 네트워크 장치(120)는 부동 소수점 데이터들(FPD) 또는 정수 데이터들(ID)을 이용하여 뉴럴 네트워크 연산을 수행하고, 연산 결과를 메모리(130)에 저장할 수 있다. 또한, 뉴럴 네트워크 장치(120)는 연산 결과 생성된 부동 소수점 데이터(FPD) 또는 정수 데이터(ID)를 출력할 수 있다.
예시적 실시예로, 연산 회로(20)에 입력되는 입력 데이터의 포맷 타입은 연산 회로(20)로부터 출력되는 출력 데이터의 포맷 타입과 상이할 수 있다. 일 예로, 상기 입력 데이터는 FP16(Floating Point 16) 타입 또는 BF16(Brain Float 16) 타입의 포맷을 가지고, 상기 출력 데이터는 FP32(Floating Point 32) 타입의 포맷을 가질 수 있다. 즉, 연산 회로(20)에는 '16' 비트의 데이터가 입력되고, 내적 연산 및 누적 연산 결과로 '32' 비트의 데이터가 출력될 수 있다. 또 다른 예로, 상기 입력 데이터는 INT8(8-bit integer) 포맷을 가지고, 상기 출력 데이터는 INT32(32-bit integer) 포맷을 가질 수 있다. 즉, 연산 회로(10)에는 '8'비트의 데이터가 입력되고, 내적 연산 및 누적 연산 결과로 '32'비트의 데이터가 출력될 수 있다. 다만, 이는 예시적 실시예로, 이에 국한되지 않으며, 연산 회로(20)는 뉴럴 네트워크 시스템(100)에 적용되는 표준에 따른 제1 타입의 포맷을 갖는 데이터를 입력받아 내적 연산 및 누적 연산 후에 제2 타입의 포맷을 갖는 데이터를 출력할 수 있다.
뉴럴 네트워크 장치(120)는 연산 회로(20)를 이용하여 메모리(130)로부터 입력된 부동 소수점 데이터들(FPD) 또는 정수 데이터들(ID)에 대한 내적 연산 및 누적 연산을 수행하고, 연산 결과인 부동 소수점 데이터들(FPD) 또는 정수 데이터들(ID)을 메모리(130)에 저장할 수 있다. 일부 실시예에 있어서, 뉴럴 네트워크 장치(120)는 CPU(110)의 개입 없이 버스(150)를 통해 메모리(130)와 부동 소수점 데이터들(FPD) 또는 정수 데이터들(ID)을 송수신할 수 있다. 즉, 뉴럴 네트워크 장치(120)와 메모리(130) 간에 직접적으로 부동 소수점 데이터들(FPD) 또는 정수 데이터들(ID)이 송수신될 수 있다.
메모리(130)는 뉴럴 네트워크 시스템(100)에서 사용되는 프로그램들 및/또는 데이터를 저장할 수 있다. 메모리(130)는 또한, 뉴럴 네트워크를 위한 연산 파라미터(예컨대, 웨이트(weight) 값들, 바이어스(bias) 값들 등), 뉴럴 네트워크의 양자화를 위한 파라미터(예컨대, 스케일 펙터(scale factor), 바이어스 값들 등), 입력 데이터(예컨대, 입력 피처 맵(input feature map)) 및 출력 데이터(예컨대 출력 피처 맵(output feature map))를 저장할 수 있다. 상기 연산 파라미터, 양자화 파라미터, 입력 데이터 및 출력 데이터는 부동 소수점 데이터들(FPD) 또는 정수 데이터들(ID)일 수 있다.
메모리(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) 등을 포함한다. 실시예에 있어서, 메모리(130)는 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)은 전자 장치의 외부로부터 신호(예컨대 영상 신호, 음성 신호, 자기 신호, 생체 신호, 터치 신호 등)를 센싱 또는 수신하고, 센싱 또는 수신된 신호를 센싱 데이터로 변환할 수 있다. 이를 위해, 센서 모듈(140)은 센싱 장치, 예컨대 마이크, 촬상 장치, 이미지 센서, 라이더(LIDAR; light detection and ranging) 센서, 초음파 센서, 적외선 센서, 바이오 센서, 및 터치 센서 등 다양한 종류의 센싱 장치 중 적어도 하나를 포함할 수 있다.
센싱 데이터는 뉴럴 네트워크 장치(120)에 입력 데이터로서 제공되거나, 또는 메모리(130)에 저장될 수 있다. 메모리(130)에 저장된 센싱 데이터는 뉴럴 네트워크 장치(120)로 제공될 수 있다. 실시예에 있어서, 뉴럴 네트워크 장치(100)는 영상 데이터를 처리하는 GPU(Graphic Processing Unit)를 더 포함하고, 센싱 데이터는 GPU에서 가공 처리된 후, 메모리(130) 또는 뉴럴 네트워크 장치(120)에 제공될 수 있다.
예를 들어, 센서 모듈(140)은 이미지 센서를 포함할 수 있으며, 전자 장치의 외부 환경을 촬영하여 영상 데이터를 생성할 수 있다. 센서 모듈(140)에서 출력되는 영상 데이터 또는 GPU에서 가공 처리된 영상 데이터는 부동 소수점 데이터일 수 있으며, 영상 데이터는 뉴럴 네트워크 장치(120)에 직접 제공되거나 또는 메모리(130)에 저장된 후, 뉴럴 네트워크 장치(120)에 제공될 수 있다. 일부 실시예에 있어서, 뉴럴 네트워크 시스템(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 표준에 따르면, 제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비트는 정수부(In)를 나타내고 그 크기는
Figure pat00002
가 된다. unsigned 수인 경우에는 양수이며
Figure pat00003
의 크기를 갖는다.
예시적 실시예에 따른 뉴럴 네트워크 장치는 제1 타입 내지 제3 타입 중 적어도 하나의 포맷에 해당하는 부동 소수점 데이터들 또는 정수 데이터들을 입력받아 내적 연산 및 누적 연산을 수행할 수 있다. 일 예로, 뉴럴 네트워크 장치는 부동 소수점 연산 모드에서 FP16 타입, BF16 타입 및 FP32 타입의 포맷 중 적어도 하나에 해당하는 복수의 부동 소수점 데이터들을 입력받아 내적 연산 및 누적 연산을 수행하여 FP32 타입의 포맷을 갖는 누적 데이터를 출력할 수 있다. 또 다른 예로, 뉴럴 네트워크 장치는 정수 연산 모드에서 INT8 타입의 포맷에 해당하는 복수의 정수 데이터들을 입력받아 내적 연산 및 누적 연산을 수행하여 INT32 타입의 포맷을 갖는 누적 데이터를 출력할 수 있다.
한편, 이는 예시적 실시예에 불과한 바, 이에 국한되지 않으며, 뉴럴 네트워크 장치는 더 다양한 타입의 포맷들을 갖는 부동 소수점 데이터들 또는 정수 데이터들을 입력받아 내적 연산 및 누적 연산을 수행하고, 뉴럴 네트워크 시스템에서 요구하는 미리 약속된 포맷을 갖는 누적 데이터를 출력할 수 있다.
도 4는 본 개시의 예시적 실시예에 따른 뉴럴 네트워크 장치의 동작 방법을 설명하기 위한 순서도이다. 도 4는 뉴럴 네트워크 연산을 위한 뉴럴 네트워크 장치(도 1의 120)에서 수행될 수 있다. 이해의 편의를 위해 도 1을 함께 참조하여 설명한다.
도 4를 참조하면, 단계 S100에서 뉴럴 네트워크 장치(120)는 메모리(130)로부터 복수의 데이터 쌍들을 수신할 수 있다. 데이터 쌍들은 뉴럴 네트워크 연산에 필요한 입력 피처 값들, 웨이트 값, 함수의 계수들 등을 포함할 수 있다. 또한, 뉴럴 네트워크 장치(120)가 양자화된 뉴럴 네트워크를 처리하는 경우에는 데이터 쌍들은 양자화 파라미터들을 포함할 수 있다. 예컨대, 양자화 파라미터는 스케일 값(또는, 역스케일 값), 바이어스 값 등을 포함할 수 있다. 상기 데이터 쌍들은 다양한 포맷을 갖는 부동 소수점 데이터들 또는 정수 데이터들로 구성될 수 있다.
단계 S110에서 뉴럴 네트워크 장치(120)는 상기 복수의 데이터 쌍들이 부동 소수점 포맷을 갖는 경우, 부동 소수점 연산을 수행할 수 있다. 예시적 실시예에서, 뉴럴 네트워크 장치(120)는 부동 소수점 곱셈기를 이용하여 복수의 데이터 쌍들 각각에 대응하는 복수의 가수부 곱셈 연산 결과들을 획득하고, 가산기를 이용하여 복수의 가수부 곱셈 연산 결과들을 합산하여 새로운 누적 데이터를 생성할 수 있다.
구체적으로, 뉴럴 네트워크 장치(120)는 복수의 데이터 쌍들 각각에 대응하는 복수의 지수부 덧셈 연산 결과들로부터 확인된 최대값을 기반으로 복수의 가수부 곱셈 연산 결과들을 각각 정렬 쉬프트한 후, 가산기를 이용하여 정렬된 복수의 가수부 곱셈 연산 결과들을 합산하여 새로운 누적 데이터를 생성할 수 있다.
예시적 실시예에서, 뉴럴 네트워크 장치(120)는 가산기에 포함된 제1 가산 회로를 이용하여 정렬된 복수의 가수부 곱셈 연산 결과들의 상위 비트들을 합산하고, 가산기에 포함된 제2 가산 회로를 이용하여 정렬된 복수의 가수부 곱셈 연산 결과들의 하위 비트들을 합산하고, 제1 가산 회로 및 제2 가산 회로의 연산 결과들을 합산하여 새로운 누적 데이터를 생성할 수 있다.
예시적 실시예에서, 뉴럴 네트워크 장치(120)가 내적 연산 및 누적 연산을 동시에 수행하는 경우, 뉴럴 네트워크 장치(120)는 버퍼에 저장된 기존의 누적 데이터를 입력받고, 기존의 누적 데이터의 지수부 및 복수의 지수부 덧셈 연산 결과들로부터 확인된 최대값을 기반으로 복수의 가수부 곱셈 연산 결과들 및 기존의 누적 데이터의 가수부를 각각 정렬 쉬프트할 수 있다. 그리고 뉴럴 네트워크 장치(120)는 제1 가산 회로를 이용하여 정렬된 복수의 가수부 곱셈 연산 결과들의 상위 비트들 및 정렬된 기존의 누적 데이터의 가수부의 상위 비트들을 합산할 수 있다. 그리고 뉴럴 네트워크 장치(120)는 제2 가산 회로를 이용하여 정렬된 복수의 가수부 곱셈 연산 결과들의 하위 비트들 및 정렬된 기존의 누적 데이터의 가수부의 하위 비트들을 합산할 수 있다.
단계 S120에서 뉴럴 네트워크 장치(120)는 상기 복수의 데이터 쌍들이 정수 포맷을 갖는 경우, 정수 연산을 수행할 수 있다. 예시적 실시예에서, 뉴럴 네트워크 장치(120)는 정수 곱셈기를 이용하여 복수의 데이터 쌍들 각각에 대응하는 복수의 정수 곱셈 연산 결과들을 획득하고, 가산기를 이용하여 복수의 정수 곱셈 연산 결과들을 합산하여 새로운 누적 데이터를 생성할 수 있다.
예시적 실시예에서, 뉴럴 네트워크 장치(120)는 정수 곱셈기를 이용하여 복수의 데이터 쌍들 중 제1 데이터 쌍들 각각에 대응하는 제1 정수 곱셈 연산 결과들을 획득할 수 있다. 또한, 뉴럴 네트워크 장치(120)는 부동 소수점 곱셈기를 이용하여 복수의 데이터 쌍들 중 나머지 제2 데이터 쌍들 각각에 대응하는 제2 정수 곱셈 연산 결과들을 획득할 수 있다. 뉴럴 네트워크 장치(120)는 제1 정수 곱셈 연산 결과들 및 제2 정수 곱셈 연산 결과들을 합산하여 새로운 누적 데이터를 생성할 수 있다.
예시적 실시예에서, 뉴럴 네트워크 장치(120)는 제1 가산 회로를 이용하여 제1 정수 곱셈 연산 결과들을 합산하고, 제2 가산 회로를 이용하여 제2 정수 곱셈 연산 결과들을 합산하고, 제1 가산 회로 및 제2 가산 회로의 연산 결과들을 합산하여 새로운 누적 데이터를 생성할 수 있다.
예시적 실시예에서, 뉴럴 네트워크 장치(120)가 내적 연산 및 누적 연산을 동시에 수행하는 경우, 뉴럴 네트워크 장치(120)는 버퍼에 저장된 기존의 누적 데이터를 입력받고, 가산기를 이용하여 복수의 정수 곱셈 연산 결과들 및 기존의 누적 데이터를 합산하여 새로운 누적 데이터를 생성할 수 있다.
한편, 단계 S110 및 S120에서 뉴럴 네트워크 장치(120)는 내적 연산 외의 컨볼루션, 풀링 등을 포함하는 뉴럴 네트워크 연산을 더 수행할 수 있다.
단계 S130에서 뉴럴 네트워크 장치(120)는 단계 S110 및 S120에서 생성된 최종 데이터를 메모리(130)에 저장할 수 있다.
도 5는 본 개시의 예시적 실시예에 따른 뉴럴 네트워크 시스템(100)의 동작을 나타내는 도면이다.
도 5를 참조하면, 뉴럴 네트워크 장치(120)는 메모리(130)로부터 부동 소수점 입력 데이터들(FPID) 또는 정수 입력 데이터들(IID)을 수신할 수 있다(S1). 일부 실시예에 있어서, 부동 소수점 입력 데이터들(FPID) 또는 정수 입력 데이터들(IID)은 CPU(110)의 개입 없이, 버스(150)를 통해 메모리(130)로부터 뉴럴 네트워크 장치(120)로 전송될 수 있다. 예컨대 뉴럴 네트워크 장치(120)는 DMA(Direct Memory Access) 컨트롤러를 포함할 수 있으며, DMA 컨트롤러가 메모리(130)를 액세스하여 부동 소수점 입력 데이터들(FPID) 또는 정수 입력 데이터들(IID)을 독출할 수 있다. 뉴럴 네트워크 장치(120)는 연산 회로(20)를 이용하여 부동 소수점 입력 데이터들(FPID) 또는 정수 입력 데이터들(IID)에 대한 내적 연산 및 누적 연산을 포함하는 뉴럴 네트워크 연산을 수행할 수 있다. 뉴럴 네트워크 장치(120)는 뉴럴 네트워크 연산 수행 결과로서 부동 소수점 출력 데이터(FPOD) 또는 정수 출력 데이터들(IOD)를 생성하고, 메모리(150)에 전송할 수 있다.
전술한 바와 같이, 본 개시의 실시예에 따른 뉴럴 네트워크 장치(120)는 내적 연산 및 누적 연산을 적은 전력 소모로 빠르고, 효과적으로 수행할 수 있다.
도 6은 본 개시의 예시적 실시예에 따른 뉴럴 네트워크 장치(120)를 나타내는 도면이다. 설명의 편의를 위하여 메모리(130)를 함께 도시한다.
도 6을 참조하면, 뉴럴 네트워크 장치(120)는 DMA 컨트롤러(10) 및 뉴럴 네트워크 프로세서(30)를 포함할 수 있다. 예시적 실시예로, 뉴럴 네트워크 프로세서(30)는 본 개시의 예시적 실시예들에 따른 누적 연산 및 내적 연산을 수행할 수 있는 연산 회로(20)를 포함할 수 있다.
DMA 컨트롤러(10)는 메모리(130)와 직접 통신할 수 있다. DMA 컨트롤러(10)는 다른 프로세서(예컨대 CPU, GPU 등)의 개입 없이 메모리(130)로부터 입력 데이터들(예컨대 부동 소수점 입력 데이터들(FPID) 또는 정수 입력 데이터들(IID))을 수신하고, 메모리(130)에 뉴럴 네트워크 연산 결과로 생성된 출력 데이터들(FPOD 또는 IOD)을 전송할 수 있다. 예컨대 부동 소수점 입력 데이터들(FPID) 또는 정수 입력 데이터들(IID)은 입력 피처 맵(IFM), 연산 파라미터(PM), 또는 웨이트 맵(WM, 커널 파라미터) 등을 포함할 수 있다. 또한, 부동 소수점 입력 데이터들(FPID) 또는 정수 입력 데이터들(IID)은 양자화 파라미터를 포함할 수 있다.
연산 회로(20)는 부동 소수점 입력 데이터들(FPID) 또는 정수 입력 데이터들(IID)에 대한 내적 연산 및 누적 연산을 수행할 수 있다. 연산 회로(20)는 부동 소수점 입력 데이터들(FPID) 또는 정수 입력 데이터들(IID)이 상호 내적되는 데이터들로 이뤄진 쌍으로 분류된 데이터 쌍들 각각에 대한 내적 연산을 수행할 수 있다.
연산 회로(20)는 부동 소수점 데이터 쌍들 각각에 대한 지수부 덧셈 연산 및 가수부 곱셈 연산을 포함하는 내적 연산을 수행할 수 있다. 예시적 실시예로, 연산 회로(20)는 내적 연산 및 누적 연산에서 부동 소수점 데이터 쌍들 각각에 대응하는 지수부 덧셈 연산 결과들 및 누적 데이터의 지수 값을 기반으로 부동 소수점 데이터 쌍들 각각에 대응하는 가수부 곱셈 연산 결과들 및 누적 데이터의 가수부를 일괄적으로 정렬 쉬프팅시킨 후에 합산할 수 있다. 예시적 실시예로, 연산 회로(20)는 상기 지수부 덧셈 연산 결과들 및 누적 데이터의 지수 값으로부터 최대값을 확인하고, 복수의 지수부 덧셈 연산 결과들 각각과 확인된 최대값 간의 차이에 부합하는 방향 및 비트 수만큼 가수부 곱셈 연산 결과들을 정렬 쉬프트하고, 누적 데이터의 지수 값과 확인된 최대값 간의 차이에 부합하는 방향 및 비트 수만큼 누적 데이터의 가수부를 정렬 쉬프트할 수 있다. 연산 회로(20)는 정렬된 가수부 곱셈 연산 결과들과 정렬된 누적 데이터의 가수부를 합산하여 내적 연산 및 누적 연산을 함께 수행함으로써 새로운 누적 데이터를 생성할 수 있다.
또한, 연산 회로(20)는 정수 데이터 쌍들 각각에 대한 정수 곱셈 연산을 포함하는 내적 연산을 수행할 수 있다. 예시적 실시예로, 연산 회로(20)는 정수 데이터 쌍들 각각에 대응하는 정수부 곱셈 연산 결과들 및 누적 데이터의 정수부를 합산하여 내적 연산 및 누적 연산을 함께 수행함으로써 새로운 누적 데이터를 생성할 수 있다.
뉴럴 네트워크 프로세서(30)는 연산 회로(20)의 연산 동작에 선행 또는 후속하여 부동 소수점 연산 및 정수 연산 이외의 컨볼루션, 풀링 등의 뉴럴 네트워크 연산을 수행할 수 있으며, 부동 소수점 출력 데이터들(FPOD) 또는 정수 출력 데이터들(IOD)을 생성할 수 있다. 예컨대 부동 소수점 출력 데이터(FPOD) 또는 정수 출력 데이터(IOD)는 출력 피처 맵(OFM)을 포함할 수 있다.
뉴럴 네트워크 프로세서(30)는 복수의 프로세싱 소자들을 포함하는 프로세싱 소자 어레이를 포함할 수 있다. 도시되지 않았으나 뉴럴 네트워크 프로세서(30)는 뉴럴 네트워크 파라미터, 예컨대 바이어스 값들, 웨이트 값들, 입력 피처들 및 출력 피처들을 저장하기 위한 버퍼 및 컨트롤러를 포함할 수 있다. 복수의 프로세싱 소자들은 연산 회로(20)를 구성할 수 있으며, 뉴럴 네트워크 프로세서(30)는 연산 회로(20)를 이용하여 본 개시의 예시적 실시예들에 따른 부동 소수점 연산 및 정수 연산을 포함하는 뉴럴 네트워크 연산을 수행할 수 있다.
이하, 연산 회로(20)의 구성 및 동작에 대하여 설명하기로 한다.
도 7a는 본 개시의 예시적 실시예에 따른 뉴럴 네트워크 장치에 포함된 연산 회로(20)를 나타내는 블록도이다. 상세하게는, 도 7a는 AISC으로 구현된 연산 회로(20)를 나타내는 블록도이다.
도 7a를 참조하면, 연산 회로(20)는 부동 소수점 곱셈기(21), 정수 곱셈기(27), 정렬 쉬프터(23), 가산기(24), 제1 포스트 가산기(25), 제2 포스트 가산기(28) 및 버퍼(26)를 포함할 수 있다. 도 7a에 도시된 구성들 외에도 연산 회로(20)는 다양한 뉴럴 네트워크 연산을 수행할 수 있도록 복수의 구성들을 더 포함할 수 있다. 가산기(24)는 논리적 또는 물리적으로 상호 분리된 제1 및 제2 가산 회로(24_1, 24_2)를 포함할 수 있다. 예시적 실시예로, 연산 회로(20)는 부동 소수점 데이터들에 대한 내적 연산 및 누적 연산, 정수 데이터들에 대한 내적 연산 및 누적 연산을 수행할 수 있다.
예시적 실시예로, 가산기(24)의 제1 및 제2 가산 회로(24_1, 24_2) 중 제2 가산 회로(24_2)는 부동 소수점 곱셈기(21) 및 정수 곱셈기(27)에 공유될 수 있다. 그리고 부동 소수점 곱셈기(21)는 연산 회로(20)가 부동 소수점 연산 모드인 때에, 부동 소수점 데이터 쌍들에 대한 부동 소수점 연산을 지원할 수 있고, 연산 회로(20)가 정수 모드인 때에, 정수 데이터 쌍들에 대한 정수 연산을 지원할 수 있다.
예시적 실시예로, 연산 회로(20)가 부동 소수점 연산 모드인 때에는 부동 소수점 곱셈기(21)는 부동 소수점 연산을 수행한 후, 제1 및 제2 가산 회로(24_1, 24_2)에 정렬 쉬프터(23)를 거친 가수부 곱셈 결과들을 제공할 수 있다.
예시적 실시예로, 연산 회로(20)는 부동 소수점 연산 모드인 때에 가산기(24)는 부동 소수점 데이터들의 정렬된 가수부 곱셈 결과들과 누적 데이터의 가수부를 일괄적으로 합산하여 제1 포스트 가산기(24_1)에 제공할 수 있다. 제1 포스트 가산기(24_1)는 수신한 합산 결과 데이터에 대한 리딩 원 검출, 정규화 및 반올림 등을 수행하고, 업데이트된 지수를 반영하여 새로운 누적 데이터를 생성한 후, 버퍼(26)에 저장할 수 있다.
연산 회로(20)가 정수 모드인 때에는, 정수 곱셈기(27)는 정수 연산을 수행한 후, 제1 정수 곱셈 연산 결과들을 제2 가산 회로(24_2)에 제공할 수 있으며, 부동 소수점 곱셈기(21)는 정수 연산을 수행한 후, 제2 정수 곱셈 연산 결과들을 정렬 쉬프트(23)를 바이패스하여, 제1 가산 회로(24_1)에 제공할 수 있다.
예시적 실시예로, 연산 회로(20)는 정수 연산 모드인 때에 가산기(24)는 정수 데이터들의 정수부 곱셈 결과들과 누적 데이터를 일괄적으로 합산하여 제2 포스트 가산기(28)에 제공할 수 있다. 제2 포스트 가산기(28)는 수신한 합산 결과를 기반으로 새로운 누적 데이터를 생성하고, 버퍼(26)에 저장할 수 있다.
한편, 일부 실시예에 있어서, 제1 포스트 가산기(25)와 제2 포스트 가산기(28)는 통합될 수 있고, 다른 실시예에 있어서, 제1 포스트 가산기(25)와 제2 포스트 가산기(28)는 분리될 수 있다.
도 7b 및 도 7c는 본 개시의 예시적 실시예에 따른 뉴럴 네트워크 장치에 포함된 연산 회로(20a, 20b)를 나타내는 블록도이다. 상세하게는, 도 7b 및 7c는 적어도 일부가 DSP로 구현된 연산 회로(20a, 20b)를 나타내는 블록도이다. 적어도 일부가 DSP로 구현된 연산 회로(20a, 20b)는 적어도 하나의 명령어를 수신하고, 수신한 명령어에 따라 연산을 수행할 수 있다.
일부 실시예에서, 도 7b의 연산 회로(20a)는 하나의 명령어를 기초로 부동 소수점 연산 또는 정수 연산을 수행하는 DSP로 구현될 수 있다. 도 7b를 참조하면, 연산 회로(20a)는 부동 소수점 곱셈기(21a), 정수 곱셈기(27a), 정렬 쉬프터(23a), 가산기(24a), 제1 포스트 가산기(25a), 제2 포스트 가산기(28a) 및 버퍼(26a)를 포함할 수 있다. 가산기(24a)는 논리적 또는 물리적으로 상호 분리된 제1 및 제2 가산 회로(24_1a, 24_2a)를 포함할 수 있다.
도 7b의 연산 회로(20a)의 버퍼(26a)는 부동 소수점 데이터들 및 정수 데이터들을 저장할 수 있다. 버퍼(26a)에 저장되는 부동 소수점 데이터들 및 정수 데이터들은 외부로부터 연산 회로(20a)로 입력된 부동 소수점 데이터들 및 정수 데이터들이거나, 연산 회로(20a)의 연산 결과인 부동 소수점 데이터 및/또는 정수 데이터이다. 버퍼(26a)는 레지스터 파일(register file)을 포함할 수 있다.
연산 회로(20a)는 외부로부터 부동 소수점 연산 또는 정수 연산에 대한 하나의 명령어를 수신하고, 명령어에 기초하여 부동 소수점 연산 또는 정수 연산을 수행할 수 있다. 구체적으로, 버퍼(26a)는 연산 회로(20a)에 입력된 명령어에 따라, 명령어의 오퍼랜드(operand)에 대응하는 엔트리로부터 부동 소수점 데이터들 또는 정수 데이터들을 독출하여 부동 소수점 곱셈기(21a) 및 정수 곱셈기(27a)에 전송할 수 있다. 그리고 부동 소수점 곱셈기(21a) 및 정수 곱셈기(27a) 각각은 수신한 부동 소수점 데이터들 또는 정수 데이터들에 대하여 상기 명령어에 대응하는 부동 소수점 연산 또는 정수 연산을 수행할 수 있다. 또한, 부동 소수점 곱셈기(21a) 및 정수 곱셈기(27a) 이후의 연산을 수행하는 구성 요소들(예컨대, 정렬 쉬프터(23a), 가산기(24a), 제1 포스트 가산기(25a), 제2 포스트 가산기(28a), 버퍼(26a)) 중 적어도 하나는 부동 소수점 곱셈기(21a) 및 정수 곱셈기(27a)의 연산 결과를 기초로 상기 명령어에 대응하는 동작을 이어서 수행할 수 있다. 연산 회로(20a)의 최종 연산 결과인 부동 소수점 데이터 또는 정수 데이터는 버퍼(26a)에 저장될 수 있다.
도 7b의 연산 회로(20a)의 부동 소수점 곱셈기(21a), 정수 곱셈기(27a), 정렬 쉬프터(23a), 가산기(24a), 제1 포스트 가산기(25a), 제2 포스트 가산기(28a) 및 버퍼(26a) 각각은, 도 7a의 연산 회로(20)의 부동 소수점 곱셈기(21), 정수 곱셈기(27), 정렬 쉬프터(23), 가산기(24), 제1 포스트 가산기(25), 제2 포스트 가산기(28) 및 버퍼(26) 각각에 대응할 수 있으므로, 구체적인 동작에 대한 중복 설명은 생략한다.
일부 실시예에서, 도 7c의 연산 회로(20b)는 복수의 명령어를 기초로 부동 소수점 연산 또는 정수 연산을 수행하도록 구현될 수 있다. 도 7c를 참조하면, 연산 회로(20b)는 곱셈기 모듈(30b), 지수 연산 모듈(40b), 벡터 ALU 모듈(50b), 가산기 모듈(60b), 포스트 가산기 모듈(70b), 벡터 레지스터 파일(80b) 및 스칼라 레지스터 파일(90b)를 포함할 수 있다.
곱셈기 모듈(30b)은 부동 소수점 곱셈기(21b) 및 정수 곱셈기(27b)를 포함하고, 지수 연산 모듈(40b)은 맥스 트리(Max Tree)(22_1b) 및 지수 가산기(22_2b)를 포함하고, 벡터 ALU 모듈(50b)은 정렬 쉬프터(23_1b) 및 ALU(23_2b)를 포함하고, 가산기 모듈(60b)은 제1 가산 회로(24_1b) 및 제2 가산 회로(24_2b)를 포함하고, 포스트 가산기 모듈(70b)은 제1 포스트 가산기(25b) 및 제2 포스트 가산기(28b)를 포함할 수 있다.
도 7c의 연산 회로(20b)의 벡터 레지스터 파일(80b) 및 스칼라 레지스터 파일(90b)은 부동 소수점 연산 또는 정수 연산과 관련된 각종 데이터들을 저장할 수 있다. 예를 들어, 벡터 레지스터 파일(80b)은 외부로부터 연산 회로(20b)로 입력된 부동 소수점 데이터들 및 정수 데이터들을 저장하거나, 부동 소수점 연산 또는 정수 연산의 수행 과정에서 산출되는 각종 데이터들을 저장할 수 있고, 스칼라 레지스터 파일(90b)은 연산 회로(20a)의 연산 결과인 부동 소수점 데이터 및/또는 정수 데이터를 저장하거나, 부동 소수점 연산 또는 정수 연산의 수행 과정에서 산출되는 각종 데이터들을 저장할 수 있다. 한편, 도 7c에는 벡터 레지스터 파일(80b) 및 스칼라 레지스터 파일(90b)이 개별적인 구성인 것으로 도시하였으나, 실시예에 따라 하나의 버퍼로 구현될 수도 있다.
연산 회로(20b)는 외부로부터 부동 소수점 연산 또는 정수 연산에 대한 복수의 명령어를 수신하고, 복수의 명령어에 기초하여 부동 소수점 연산 또는 정수 연산을 수행할 수 있다. 상기 복수의 명령어는 하나의 부동 소수점 연산 또는 정수 연산에 대응하는 명령어 조합에 해당할 수 있으며, 전술한 모듈들 각각에 대응하는 명령어들을 포함할 수 있다.
구체적으로, 도 7c의 연산 회로(20b)의 벡터 레지스터 파일(80b)은 입력된 명령어의 오퍼랜드에 대응하는 엔트리로부터 부동 소수점 데이터들 또는 정수 데이터들을 독출하여 부동 소수점 곱셈기(21b) 및 정수 곱셈기(27b)에 전송할 수 있다.
그리고 부동 소수점 곱셈기(21b) 및 정수 곱셈기(27b) 각각은 입력된 명령어에 따라 벡터 레지스터 파일(80b)로부터 수신한 부동 소수점 데이터들 또는 정수 데이터들에 대한 곱셈 연산을 수행하고, 곱셈 연산 결과들을 제2 명령어의 오퍼랜드에 대응하는 벡터 레지스터 파일(80b)의 엔트리에 저장할 수 있다.
그리고 지수 연산 모듈(40b)은 부동 소수점 연산에서, 입력된 명령어의 오퍼랜드에 대응하는 벡터 레지스터 파일(80b)의 엔트리로부터 부동 소수점 데이터들을 수신하고, 맥스 트리(22_1b)를 이용하여 부동 소수점 데이터들의 지수부들을 기초로 최대 지수 값을 산출하고, 지수 가산기(22_2b)를 이용하여 상기 지수부들에 대한 덧셈 연산을 수행할 수 있다. 그리고 지수 연산 모듈(40b)은 입력된 명령어의 오퍼랜드에 대응되는 스칼라 레지스터 파일(90b)의 엔트리에 최대 지수 값을 저장하고, 입력된 명령어의 오퍼랜드에 대응하는 벡터 레지스터 파일(80b)의 엔트리에 지수부 덧셈 연산 결과들을 저장할 수 있다.
그리고 벡터 ALU 모듈(50b)은 부동 소수점 연산에서, 입력된 명령어의 오퍼랜드에 대응하는 스칼라 레지스터 파일(90b)의 엔트리로부터 최대 지수 값을 수신하고, 입력된 명령어의 오퍼랜드에 대응하는 벡터 레지스터 파일(80b)의 엔트리로부터 지수부 덧셈 연산 결과들을 수신할 수 있다. 그리고 벡터 ALU 모듈(50b)은 ALU(23_2b)를 이용하여 쉬프트 양을 산출할 수 있고, 산출한 쉬프트 양을 입력된 명령어의 오퍼랜드에 대응하는 벡터 레지스터 파일(80b)의 엔트리에 저장할 수 있다. 그리고 벡터 ALU 모듈(50b)은 다음으로 입력된 명령어의 오퍼랜드에 대응하는 벡터 레지스터 파일(80b)의 엔트리로부터 쉬프트 양 및 부동 소수점 데이터들의 가수부 곱셈 연산 결과들을 수신할 수 있고, 정렬 쉬프터(23_1b)를 이용하여 가수부 곱셈 연산 결과들을 상기 쉬프트 양만큼 쉬프트한 후, 명령어의 오퍼랜드에 대응하는 벡터 레지스터 파일(80b)에 정렬된 가수부 곱셈 연산 결과들을 저장할 수 있다. 전술한 일련의 연산들은 DSP의 구조에 따라 하나 또는 두 개 이상의 명령어 조합으로 표현될 수 있으며, 전술한 일련의 연산들 각각은 멀티 사이클로 구현될 수 있다.
그리고 가산 모듈(60b)은 부동 소수점 연산에서, 입력된 명령어의 오퍼랜드에 대응하는 벡터 레지스터 파일(80b)의 엔트리로부터 정렬된 가수부 곱셈 연산 결과들을 수신할 수 있다. 그리고 가산 모듈(60b)은 제1 가산 회로(24_1b) 및 제2 가산 회로(24_2b)를 이용하여 입력된 명령어의 옵코드(opcode)에 따라 정렬된 가수부 곱셈 결과들에 대한 합산 연산을 수행한 후, 합산 연산 결과를 입력된 명령어의 오퍼랜드에 대응하는 스칼라 레지스터 파일(90b)의 엔트리에 저장할 수 있다.
그리고 가산 모듈(60b)은 정수 연산에서, 입력된 명령어의 오퍼랜드에 대응하는 벡터 레지스터 파일(80b)의 엔트리로부터 정수 데이터들의 곱셈 연산 결과들을 수신할 수 있다. 그리고 가산 모듈(60b)은 제1 가산 회로(24_1b) 및 제2 가산 회로(24_2b)를 이용하여 입력된 명령어의 옵코드(opcode)에 따라 정수 데이터들의 곱셈 연산 결과들에 대한 합산 연산을 수행한 후, 합산 연산 결과를 입력된 명령어의 오퍼랜드에 대응하는 스칼라 레지스터 파일(90b)의 엔트리에 저장할 수 있다.
그리고 포스트 가산기 모듈(70b)은 입력된 명령어의 오퍼랜드에 대응하는 스칼라 레지스터 파일(90b)로부터 합산 연산 결과를 수신할 수 있다. 그리고 포스트 가산기 모듈(70b)은 입력된 명령어의 옵코드에 따라 선택된 제1 포스트 가산기(25b) 또는 제 2 포스트 가산기(28b)를 이용하여 포스트 가산 연산을 수행할 수 있다.
도 7b의 연산 회로(20a)와 도 7c의 연산 회로(20b)를 비교하면, 도 7b의 연산 회로(20a)는 하나의 명령어를 기초로 동작하나, 도 7c의 연산 회로(20b)는 복수의 명령어를 기초로 동작할 수 있다. 한편, 도 7c과 관련하여, 연산 회로(20b)의 동작과 관련하여 언급된 명령어들은 하나의 예시일뿐, 연산 회로(20b)는 더 적은 개수의 명령어 또는 더 많은 개수의 명령어를 기초로 부동 소수점 연산 또는 정수 연산을 수행하도록 구현될 수 있다.
도 7c의 연산 회로(20b)의 부동 소수점 곱셈기(21b), 정수 곱셈기(27b), 정렬 쉬프터(23b), ALU(23_2b), 제1 가산 회로(24_1b), 제2 가산 회로(24_2b), 제1 포스트 가산기(25b) 및 제2 포스트 가산기(28b)는, 도 7a의 연산 회로(20)의 부동 소수점 곱셈기(21), 정수 곱셈기(27), 정렬 쉬프터(23), 제1 가산 회로(24_1), 제2 가산 회로(24_2), 제1 포스트 가산기(25) 및 제2 포스트 가산기(28) 각각에 대응할 수 있으므로, 구체적인 동작에 대한 중복 설명은 생략한다.
일부 실시예에서, 도 7c의 연산 회로(20b)는 DSP의 일부 기능 블록으로써 구현될 수 있다. 예를 들어, 곱셈기 모듈(30b), 벡터 ALU 모듈(50b) 및 가산기 모듈(60b)은 일반적인 DSP로 구현되거나, 기존 DSP의 연산 모듈과 공유될 수 있으며, 지수 연산 모듈(40b) 및 포스트 가산기 모듈(70b)은 새로 추가되어 일련의 연산을 완성할 수 있다. 한편, 연산 회로(20b)가 복수의 연산 장치로 구현되는 예는 전술한 예에 한하지 않으며, 연산 회로(20b)는 다양한 조합의 복수의 연산 장치로 구현될 수 있다.
한편, 도 7b 및 도 7c에 도시된 구성들 외에도 연산 회로(20a, 20b)는 다양한 뉴럴 네트워크 연산을 수행할 수 있도록 복수의 구성 요소들을 더 포함할 수 있다. 또한, 이하에서는 설명의 편의를 위해 연산 회로(20)를 기준으로 설명하나, 설명된 내용이 연산 회로(20a, 20b)에도 유사하게 적용될 수 있음은 물론이다.
도 8a는 연산 회로(20)에 입력되는 데이터 쌍의 포맷 타입을 설명하기 위한 도면이고, 도 8b는 본 개시의 예시적 실시예에 따른 부동 소수점 모드에서 내적 연산을 수행하는 연산 회로(20)를 나타내는 도면이고, 도 8c는 본 개시의 예시적 실시예에 따른 정수 연산 모드에서 내적 연산을 수행하는 연산 회로(20)를 나타내는 도면이다.
도 8a를 참조하면, 제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 타입의 포맷을 가질 수 있다.
제4 케이스(Case4)에서 연산 회로(20)는 내적 연산을 위해 상호 동일한 타입의 포맷을 갖는 정수 데이터인 제1 및 제2 입력 데이터(IN_A, IN_B)가 입력될 수 있다. 제1 및 제2 입력 데이터(IN_A, IN_B)의 정수부 비트 영역(Ia, Ib)의 너비는 동일할 수 있다. 제1 및 제2 입력 데이터(IN_A, IN_B)가 signed 수를 표현하는 경우, 부호 비트를 포함할 수 있고, unsigned 수를 표현하는 경우, 부호 비트가 생략될 수 있다. 일 예로, 제1 및 제2 입력 데이터(IN_A, IN_B)는 INT8 타입의 포맷을 가질 수 있다.
예시적 실시예에서, 연산 회로(20)에 입력되는 제1 및 제2 입력 데이터(IN_A, IN_B)는 각각이 한 쌍의 정수 데이터를 포함하도록 구현될 수 있다. 예를 들어, 연산 회로(20)가 n비트(n은 양의 정수)의 입력 데이터에 대하여 연산을 수행하고, k비트(k는 양의 정수)의 곱셈 연산을 수행할 수 있는 부동 소수점 곱셈기를 포함하는 경우, 정수 데이터가 k비트와 같거나 작고, n비트의 1/2과 같거나 작은 m개(m은 양의 정수)의 비트로 표현 가능하면, 제1 및 제2 입력 데이터(IN_A, IN_B)에는 한 쌍의 정수 데이터가 포함될 수 있다. 이하에서는, 쉬운 이해를 위해, 연산 회로(20)가 16비트의 입력 데이터에 대해 연산을 수행하고, 8비트 또는 11비트의 곱셈 연산을 수행할 수 있는 부동 소수점 곱셈기를 포함하며, 정수 데이터가 8비트로 표현 가능한 경우를 전제로 설명한다. 즉, 제1 및 제2 입력 데이터(INT_A, INT_B)가 정수 포맷을 갖는 경우, 각각 8비트로 표현되는 한 쌍의 정수 데이터가 포함될 수 있고, 제1 및 제2 입력 데이터(INT_A, INT_B)가 부동 소수점 포맷을 갖는 경우, 각각 16비트로 표현되는 하나의 부동 소수점 데이터가 포함되는 것을 전제로 설명한다. 한편, 전술한 전제는 하나의 실시예에 불과하며, 본 개시는 이에 한하지 않는다. 도 8b를 참조하면, 연산 회로(20)는 부동 소수점 곱셈기(21), 정수 곱셈기(27), 부호 및 지수 계산기(22), 정렬 쉬프터(23), 가산기(24), 제1 포스트 가산기(25), 제2 포스트 가산기(28) 및 버퍼(26)를 포함할 수 있다. 가산기(24)는 제1 가산 회로(24_1) 및 제2 가산 회로(24_2)를 포함할 수 있다. 제1 포스트 가산기(25)는 리딩 원 검출 회로(25_1), 정규화 및 반올림 회로(25_2) 및 누적 데이터 생성 회로(25_3)를 포함할 수 있다. 제2 포스트 가산기(28)는 제3 가산 회로(28_1)를 포함할 수 있다.
연산 회로(20)는 부동 소수점 연산을 수행하는 부동 소수점 연산 모드, 또는 정수 연산을 수행하는 정수 연산 모드로 동작할 수 있다. 먼저 부동 소수점 연산 모드에서의 연산 회로(20)의 동작을 설명한다.
도 8b를 참조하면, 부동 소수점 연산 모드에서, 연산 회로(20)는 버퍼(26)로부터 저장된 제1 누적 데이터(ACC1)를 수신할 수 있다. 제1 누적 데이터(ACC1)의 부호(ACC1_S) 및 지수부(ACC1_E)는 부호 및 지수 계산기(22)에 입력되고, 가수부(ACC1_F)는 정렬 쉬프터(23)에 입력될 수 있다. 한편, 연산 회로(20)가 누적 연산을 수행하지 않는 경우, 연산 회로(20)의 제1 누적 데이터(ACC1)의 수신 동작은 생략될 수 있다.
연산 회로(20)는 입력되는 제1 내지 제4 입력 데이터 쌍들에 대한 내적 연산을 수행할 수 있다. 그리고 제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 가수부 곱셈 결과(mul1, mul2, mul3, 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 가수부 곱셈 결과(mul1, mul2, mul3, mul4), 제1 누적 데이터(ACC1)의 가수부(ACC1_F) 각각에 대응하는 쉬프팅 방향, 쉬프팅량에 관한 정보를 포함할 수 있다. 구체적으로, 부호 및 지수 계산기(22)는 복수의 지수부 덧셈 연산 결과들, 제1 누적 데이터(ACC1)의 가수부(ACC1_F) 각각과 상기 최대값 간의 차이에 부합하는 방향 및 비트 수만큼 제1 내지 제4 가수부 곱셈 결과(mul1, mul2, mul3, mul4), 제1 누적 데이터(ACC1)의 가수부(ACC1_F) 각각이 정렬 쉬프트되도록 하기 위한 제1 쉬프팅 정보(SH1)를 생성할 수 있다.
예시적 실시예로, 정렬 쉬프터(23)는 제1 쉬프팅 정보(SH1)를 기반으로 제1 내지 제4 가수부 곱셈 결과(mul1, mul2, mul3, 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)를 생성할 수 있다.
예시적 실시예로, 제1 포스트 가산기(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 리딩 원 검출 시에 오른쪽 방향으로 제3 합산 결과 데이터의 제1 개수의 상위 비트들을 쉬프팅시키면서 '1'을 검출할 수 있다. 또한, 리딩 원 검출 회로(25_1)는 제2 리딩 원 검출 시에 오른쪽 방향으로 제3 합산 결과 데이터의 제1 개수의 상위 비트들을 제외한 나머지 제2 개수의 하위 비트들을 쉬프팅시키면서 '1'을 검출할 수 있다. 예시적 실시예로, 제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)에 저장할 수 있다. 한편, 부동 소수점 연산 모드에서, 정수 연산과 관련된 정수 곱셈기(27), 제2 포스트 가산기(28)는 게이팅(gating)될 수 있다.
다음으로, 정수 연산 모드에서의 연산 회로(20)의 동작을 설명한다.
도 8c를 참조하면, 정수 연산 모드에서, 연산 회로(20)는 버퍼(26)로부터 정수 데이터인 제1 누적 데이터(ACC1)를 수신할 수 있다. 제1 누적 데이터(ACC1)는 가산기(24)에 입력될 수 있다. 한편, 연산 회로(20)가 누적 연산을 수행하지 않는 경우, 연산 회로(20)의 제1 누적 데이터(ACC1)의 수신 동작은 생략될 수 있다.
정수 연산 모드에서, 연산 회로()는 입력되는 제1 내지 제8 입력 데이터(IN_A1, IN_B1, IN_A2, IN_B2, IN_A3, IN_B3, IN_A4, IN_B4)에 대한 내적 연산을 수행할 수 있다. 제1 내지 제8 입력 데이터(IN_A1, IN_B1, IN_A2, IN_B2, IN_A3, IN_B3, IN_A4, IN_B4)는 각각 한 쌍의 정수 데이터를 포함할 수 있다. 제1 입력 데이터(IN_A1)는 제1 정수 데이터(Ia1) 및 제2 정수 데이터(Ia2)를 포함하고, 제2 입력 데이터(IN_B1)는 제3 정수 데이터(Ib1) 및 제4 정수 데이터(Ib2)를 포함하고, 제3 입력 데이터(IN_A2)는 제5 정수 데이터(Ia3) 및 제6 정수 데이터(Ia4)를 포함하고, 제4 입력 데이터(IN_B2)는 제7 정수 데이터(Ib3) 및 제8 정수 데이터(Ib4)를 포함하고, 제5 입력 데이터(IN_A3)는 제9 정수 데이터(Ia5) 및 제10 정수 데이터(Ia6)를 포함하고, 제6 입력 데이터(IN_B3)는 제11 정수 데이터(Ib5) 및 제12 정수 데이터(Ib6)를 포함하고, 제7 입력 데이터(IN_A4)는 제13 정수 데이터(Ia7) 및 제14 정수 데이터(Ia8)를 포함하고, 제8 입력 데이터(IN_B4)는 제15 정수 데이터(Ib7) 및 제16 정수 데이터(Ib8)를 포함할 수 있다.
제1 내지 제8 정수 데이터(Ia1, Ib1, Ia2, Ib2, Ia3, Ia3, Ia4, Ib4)는 부동 소수점 곱셈기(21)에 입력되고, 제9 내지 제16 정수 데이터(Ia5, Ib5, Ia6, Ib6, Ia7, Ia7, Ia8, Ib8)는 정수 곱셈기(27)에 입력될 수 있다. 부동 소수점 곱셈기(21)는 제1 내지 제8 정수 데이터(Ia1, Ib1, Ia2, Ib2, Ia3, Ia3, Ia4, Ib4)에 대한 곱셈 연산을 수행하여 제1 내지 제4 정수부 곱셈 결과(mul1, mul2, mul3, mul4)를 생성하고, 정렬 쉬프터(23)를 바이패스하여 가산기(24) 중 제1 가산 회로(24_1)에 제공할 수 있다.
정수 곱셈기(27)는 제9 내지 제16 정수 데이터(Ia5, Ib5, Ia6, Ib6, Ia7, Ia7, Ia8, Ib8)에 대한 곱셈 연산을 수행하여 제5 내지 제8 정수부 곱셈 결과(mul5, mul6, mul7, mul8)를 생성하고, 가산기(24) 중 제2 가산 회로(24_2)에 제공할 수 있다. 제1 가산 회로(24_1)는 제1 내지 제4 정수부 곱셈 결과(mul1, mul2, mul3, mul4) 및 누적 데이터(ACC1)의 MSB가 포함된 상위 비트들을 합산하여 제1 합산 결과 데이터(I_add1)를 생성할 수 있다. 제2 가산 회로(24_2)는 제5 내지 제8 정수부 곱셈 결과(mul5, mul6, mul7, mul8) 및 누적 데이터(ACC1)의 LSB가 포함된 하위 비트들을 합산하여 제2 합산 결과 데이터(I_add2)를 생성할 수 있다.
이와 같이, 예시적 실시예에 따른 가산기(24)의 제1 및 제2 가산 회로(24_1, 24_2) 중 어느 하나는 정수 곱셈 연산을 위한 정수 곱셈기와 공유되어 부동 소수점 연산, 정수 연산 등에 모두 이용될 수 있으며, 이에 따라, 연산 회로(20)를 포함하는 뉴럴 네트워크 장치의 사이즈를 효과적으로 줄일 수 있다.
예시적 실시예로, 제2 포스트 가산기(28)는 제1 및 제2 합산 결과 데이터(I_add1, I_add2)를 수신하여 새로운 제2 누적 데이터(ACC2)를 생성할 수 있다. 제2 포스트 가산기(28)는 제3 가산 회로(28_1)를 포함할 수 있고, 제3 가산 회로(28_1)는 제1 및 제2 합산 결과 데이터(I_add1, I_add2)를 합산하여 제2 누적 데이터(ACC2)를 생성할 수 있다. 한편, 정수 연산 모드에서, 부호 및 지수 연산과 관련된 부호 및 지수 계산기(21), 정렬 쉬프터(23) 및 제1 포스트 가산기(25)는 게이팅(gating)될 수 있다.
한편, 도 8a 내지 8c에 도시된 연산 회로(20) 관련 내용은 예시적인 실시예에 불과한 바, 이에 국한되지 않고, 연산 회로(20)는 본 개시의 기술적 사상이 적용될 수 있는 다양한 예들로 구현될 수 있으며, 다양한 타입의 포맷을 갖는 입력 데이터들을 다양한 개수만큼 수신하고, 이에 대한 내적 연산을 수행할 수 있다.
도 9a 및 도 9b는 부동 소수점 데이터의 포맷의 타입에 따른 비트 확장을 수행하는 부동 소수점 곱셈기(21)를 설명하기 위한 도면이다.
도 9a를 참조하면, 부동 소수점 곱셈기(21)는 비트 확장 회로(21_1)를 포함할 수 있다. 예시적 실시예로, 비트 확장 회로(21_1)는 부동 소수점 데이터의 포맷의 타입에 따라 부동 소수점 데이터에 포함된 지수부 비트 영역 및 가수부 비트 영역 중 적어도 하나를 확장할 수 있다. 일 예로, 비트 확장 회로(21_1)는 제1 타입의 부동 소수점 데이터(INtype1)를 수신하여 부동 소수점 데이터(INtype1)의 지수부(Etype1)를 그대로 출력하고, 가수부(Ftype1)의 비트 영역을 미리 약속된 제1 비트 너비로 확장할 수 있다. 미리 약속된 제1 비트 너비는 제2 타입의 부동 소수점 데이터(INtype2)의 가수부(Ftype2)의 비트 너비, 도 8b 및 8c의 부동 소수점 곱셈기(21)의 비트 너비, 부동 소수점 연산 회로의 출력 데이터의 비트 수 및 출력 데이터의 포맷 타입 중 적어도 하나와 연관될 수 있다.
도 9b를 참조하면, 비트 확장 회로(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) 비트 너비에 부합하도록 확장된 후, 덧셈 연산이 수행될 수 있다.
도 10 내지 도 15는 본 개시의 예시적 실시예에 따른 연산 회로(20a, 20b, 20c, 20d, 20e, 20f)의 동작을 설명하기 위한 도면이다.
도 10을 참조하면, 연산 회로(20a)는 제1 내지 제6 멀티플렉서(M11~M61), XOR 회로(XOR), 맥스 트리 회로(MT), 제1 덧셈 회로(AC11) 및 제1 곱셈 회로(MC1)를 포함할 수 있다.
먼저, 연산 회로(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)와 제1 덧셈 회로(AC11)에 각각 출력할 수 있다. 제4 멀티플렉서(M41)는 제2, 제4, 제6 및 제8 입력 데이터(IN_B1, IN_B2, IN_B3, IN_B4)의 제2 지수부들(Eb)을 순차적으로 맥스 트리 회로(MT)와 제1 덧셈 회로(AC11)에 각각 출력할 수 있다.
맥스 트리 회로(MT)는 제1 누적 데이터(ACC1)의 제3 지수부(ACC1_E), 제1 및 제2 지수부들(Ea, Eb)을 수신하여 정렬 쉬프트를 위한 최대값(Max_E)을 확인하여 출력할 수 있다. 예시적 실시예로, 맥스 트리 회로(MT)는 제1 및 제2 지수부들(Ea, Eb)로부터 각각에 대응하는 지수부끼리 덧셈 연산을 수행하고, 복수의 지수부 덧셈 결과들 및 제3 지수부(ACC1_E)의 값을 비교하여 가장 큰 지수 값을 최대값(Max_E)으로서 출력할 수 있다.
제1 덧셈 회로(AC11)는 제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)을 순차적으로 제1 곱셈 회로(MC1)에 각각 출력할 수 있다. 제6 멀티플렉서(M61)는 제2, 제4, 제6 및 제8 입력 데이터(IN_B1, IN_B2, IN_B3, IN_B4)의 제2 가수부들(Fb)을 순차적으로 제1 곱셈 회로(MC1)에 각각 출력할 수 있다.
제1 곱셈 회로(MC1)는 제1 및 제2 가수부들(Fa, Fb)로부터 각각에 대응하는 가수부들끼리의 곱셈 연산을 수행함으로써, 제1 내지 제4 가수부 곱셈 연산 결과(F_mul1~F_mul4)를 출력할 수 있다.
이하에서는, 연산 회로(20a)가 정수 연산 모드로 동작하는 것을 중심으로 서술한다.
제1 내지 제6 멀티플렉서(M11~M61)는 연산 회로(20a)가 정수 연산 모드로 동작하는 때에, 'IS_FLOAT' 신호에 응답하여 '0'을 출력할 수 있다. 제1 내지 제4 멀티플렉서(M11~M41)로부터 출력된 '0'으로 인해 연산 회로(20a) 내의 부동 소수점 연산을 위한 구성들이 비활성화될 수 있다.
예시적 실시예에서, 연산 회로(20a)는 정수 데이터인 제1 내지 제4 입력 데이터(IN_A1, IN_B1, IN_A2, IN_B2, IN_A3, IN_B3)를 수신할 수 있다. 그리고 제1 내지 제4 입력 데이터(IN_A1, IN_B1, IN_A2, IN_B2, IN_A3, IN_B3) 각각은 한 쌍의 정수 데이터를 포함할 수 있다. 제5 멀티플렉서(제51)는 제1 및 제3 입력 데이터(IN_A1, IN_A2)에 포함된 제1 정수 데이터들(Ia)은 순차적으로 제1 곱셈 회로(MC1)에 각각 출력할 수 있다. 제6 멀티플렉서(M61)는 제2 및 제4 입력 데이터(IN_B1, IN_B2)의 제2 정수 데이터들(Ib)을 순차적으로 제1 곱셈 회로(MC1)에 각각 출력할 수 있다. 한편, 제5 내지 제8 입력 데이터(IN_A3, IN_B3, IN_A4, IN_B4)는 후술하는 연산회로(20b)에 입력될 수 있다.
제1 곱셈 회로(MC1)는 제1 및 제2 정수 데이터들들(Ia, Ib)로부터 각각에 대응하는 정수 데이터들끼리의 곱셈 연산을 수행함으로써, 제1 내지 제4 정수부 곱셈 연산 결과(mul1~mul4)를 출력할 수 있다.
도 11을 더 참조하면, 연산 회로(20b)는 제7 및 제8 멀티플렉서(M71, M81), 제2 곱셈 회로(MC2)를 포함할 수 있다. 제7 및 제8 멀티플렉서(M71, M81), 제2 곱셈 회로(MC2)는 정수 연산 모드에서 이용될 수 있다.
연산 회로(20b)는 정수 데이터인 제5 내지 제8 입력 데이터(IN_A3, IN_B3, IN_A4, IN_B4)를 수신할 수 있다. 그리고 제5 내지 제8 입력 데이터(IN_A3, IN_B3, IN_A4, IN_B4) 각각은 한 쌍의 정수 데이터를 포함할 수 있다. 제7 멀티플렉서(제71)는 제5 및 제7 입력 데이터(IN_A3, IN_A4)에 포함된 제3 정수 데이터들(Ia)은 순차적으로 제2 곱셈 회로(MC2)에 각각 출력할 수 있다. 제8 멀티플렉서(M81)는 제6 및 제8 입력 데이터(IN_B3, IN_B4)의 제4 정수 데이터들(Ib)을 순차적으로 제2 곱셈 회로(MC2)에 각각 출력할 수 있다.
제2 곱셈 회로(MC2)는 제3 및 제4 정수 데이터들(Ia, Ib)로부터 각각에 대응하는 정수 데이터들끼리의 곱셈 연산을 수행함으로써, 제5 내지 제8 정수부 곱셈 연산 결과(mul5~mul8)를 출력할 수 있다.
도 12를 더 참조하면, 연산 회로(20c)는 제1 내지 제4 인버터(IVT1~IVT4), 제9 내지 제12 멀티플렉서(M12~M42), 제1 내지 제5 쉬프트 회로(SHT11~SHT51), 제1 내지 제5 뺄셈 회로(SC1~SC5)를 포함할 수 있다. 제1 내지 제4 인버터(IVT1~IVT4), 제9 내지 제12 멀티플렉서(M12~M42), 제1 내지 제5 쉬프트 회로(SHT11~SHT51), 제1 내지 제5 뺄셈 회로(SC1~SC5)는 부동 소수점 연산 모드에서 이용될 수 있고, 정수 연산 모드에서는 비활성화될 수 있다.
제9 멀티플렉서(M12)는 제1 가수부 곱셈 연산 결과(mul1)와 제1 인버터(IVT1)에 의해 반전된 제1 가수부 곱셈 연산 결과를 수신할 수 있다. 제10 멀티플렉서(M22)는 제2 가수부 곱셈 연산 결과(mul2)와 제2 인버터(IVT2)에 의해 반전된 제2 가수부 곱셈 연산 결과를 수신할 수 있다. 제11 멀티플렉서(M32)는 제3 가수부 곱셈 연산 결과(mul3)와 제3 인버터(IVT3)에 의해 반전된 제3 가수부 곱셈 연산 결과를 수신할 수 있다. 제12 멀티플렉서(M42)는 제4 가수부 곱셈 연산 결과(mul4)와 제4 인버터(IVT4)에 의해 반전된 제4 가수부 곱셈 연산 결과를 수신할 수 있다.
제9 내지 제12 멀티플렉서(M12~M42)는 부호 정보(SI) 중 각각 자신에 대응되는 부호에 응답하여 비반전된 가수부 곱셈 연산 결과를 출력하거나, 반전된 가수부 곱셈 연산 결과를 출력할 수 있다. 예를 들어, 제9 멀티플렉서(M12)는 제1 가수부 곱셈 연산 결과(mul1)가 양수인 경우, 제1 가수부 곱셈 연산 결과(mul1)를 그대로 출력하고, 제1 가수부 곱셈 연산 결과(F_mul1)가 음수인 경우 반전된 제1 가수부 곱셈 연산 결과를 출력할 수 있다.
제1 뺄셈 회로(SC1)는 최대값(Max_E)과 제1 지수부 덧셈 연산 결과(E_add1)를 뺄셈 연산하여 연산 결과를 제1 쉬프트 회로(SHT11)에 제공할 수 있다. 제1 쉬프트 회로(SHT11)는 제9 멀티플렉서(M12)로부터의 출력을 최대값(Max_E)과 제1 지수부 덧셈 연산 결과(E_add1) 간의 차이에 부합하는 방향 및 비트 수로 쉬프팅시킴으로써 정렬된 제1 가수부 곱셈 연산 결과(F_align1)를 출력할 수 있다.
제2 뺄셈 회로(SC2)는 최대값(Max_E)과 제2 지수부 덧셈 연산 결과(E_add2)를 뺄셈 연산하여 연산 결과를 제2 쉬프트 회로(SHT21)에 제공할 수 있다. 제2 쉬프트 회로(SHT21)는 제10 멀티플렉서(M22)로부터의 출력을 최대값(Max_E)과 제2 지수부 덧셈 연산 결과(E_add2) 간의 차이에 부합하는 방향 및 비트 수로 쉬프팅시킴으로써 정렬된 제2 가수부 곱셈 연산 결과(F_align2)를 출력할 수 있다.
제3 뺄셈 회로(SC3)는 최대값(Max_E)과 제3 지수부 덧셈 연산 결과(E_add3)를 뺄셈 연산하여 연산 결과를 제3 쉬프트 회로(SHT31)에 제공할 수 있다. 제3 쉬프트 회로(SHT31)는 제11 멀티플렉서(M32)로부터의 출력을 최대값(Max_E)과 제3 지수부 덧셈 연산 결과(E_add3) 간의 차이에 부합하는 방향 및 비트 수로 쉬프팅시킴으로써 정렬된 제3 가수부 곱셈 연산 결과(F_align3)를 출력할 수 있다.
제4 뺄셈 회로(SC4)는 최대값(Max_E)과 제4 지수부 덧셈 연산 결과(E_add4)를 뺄셈 연산하여 연산 결과를 제4 쉬프트 회로(SHT41)에 제공할 수 있다. 제4 쉬프트 회로(SHT41)는 제12 멀티플렉서(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)의 최대 쉬프트 양은 뉴럴 네트워크 장치가 요구하는 연산 정확도를 해치지 않는 선에서 제한되어, 쉬프트 회로의 사이즈 및 전력 소모를 줄일 수 있다.
한편, 정수 연산 모드로 동작 시에는, 도 10에서 전술한 제1 내지 제4 정수부 곱셈 연산 결과(F_mul1~F_mul4)는 상기 연산 회로(20c)의 구성 요소들을 바이패스할 수 있다.
도 13a을 더 참조하면, 연산 회로(20d)는 제1 내지 제8 부호 확장 회로(SE1~SE8), 제1 내지 제8 제로 확장 회로(ZE1~ZE8), 제13 내지 제20 멀티플렉서(M13~M83), 제2 내지 제9 덧셈 회로(AC12~AC82)를 포함할 수 있다. 이하에서는, 부동 소수점 연산 모드로 동작 시를 전제로 설명하며, 서술의 편의상 정렬된 제1 내지 제4 가수부 곱셈 연산 결과(F_align1~F_align4)는 제1 내지 제4 가수부 곱셈 연산 결과로 서술한다.
제13 멀티플렉서(M13)는 제1 부호 확장 회로(SE1)에 의해 제1 가수부 곱셈 연산 결과(F_align1)의 상위 비트들로부터 확장된 비트들에 부호가 복사되어 '1'이 채워진 제1 가수부 곱셈 연산 결과(F_align1)의 확장된 제1 상위 비트들과 제1 제로 확장 회로(ZE1)에 의해 제1 가수부 곱셈 연산 결과(F_align1)의 상위 비트들로부터 확장된 비트들에 '0'이 채워진 제1 가수부 곱셈 연산 결과(F_align1)의 확장된 제2 상위 비트들을 수신할 수 있다.
이와 같은 방식으로, 제14 내지 제16 멀티플렉서(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 상위 비트들을 각각 수신할 수 있다.
제17 멀티플렉서(M53)는 제5 부호 확장 회로(SE5)에 의해 제1 가수부 곱셈 연산 결과(F_align1)의 하위 비트들로부터 확장된 비트들에 부호가 복사되어 '1'이 채워진 제1 가수부 곱셈 결과(F_align1)의 확장된 제1 하위 비트들과 제5 제로 확장 회로(ZE5)에 의해 확장된 비트들에 '0'이 채워진 제1 가수부 곱셈 연산 결과(F_align1)의 확장된 제2 하위 비트들을 수신할 수 있다.
이와 같은 방식으로, 제18 내지 제20 멀티플렉서(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)일 때, 제13 내지 제15 멀티플렉서(M13~M43)는 부호 정보(SI) 중 각각 자신에 대응되는 부호에 응답하여 부호 확장 회로(SE1~SE4)에 의해 확장된 제1 상위 비트들을 출력할 수 있다. 또한, 부동 소수점 연산 모드(예를 들면, IS_FLOAT=1)일 때, 제17 내지 제20 멀티플렉서(M53~M83)는 제로 확장 회로(ZE5~ZE8)에 의해 확장된 제2 하위 비트들을 출력할 수 있다.
제2 덧셈 회로(AC12)는 제13 및 제14 멀티플렉서(M13, M23)로부터의 출력들을 합산하고, 제3 덧셈 회로(AC22)는 제15 및 제16 멀티플렉서(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)는 제17 및 제18 멀티플렉서(M53, M63)로부터의 출력들을 합산하고, 제7 덧셈 회로(AC62)는 제19 및 제20 멀티플렉서(M73, M83)로부터의 출력들을 합산할 수 있다. 제8 덧셈 회로(AC72)는 제6 및 제7 덧셈 회로(AC52, AC62)로부터의 출력들을 합산할 수 있다. 제9 덧셈 회로(AC82)는 제8 덧셈 회로(AC72)의 출력과 정렬된 가수부(ACC1_F_align)의 하위 비트들을 합산하여 제2 합산 결과 데이터(F_add2)를 생성할 수 있다. 한편, 도시되지는 않았으나, 제9 덧셈 회로(AC82)에 입력되는 정렬된 가수부(ACC1_F_align)의 하위 비트들은 제로 확장된 데이터일 수 있다.
도 13b를 더 참조하면, 연산 회로(20d)가 정수 모드로 동작 시, 제1 내지 제4 가수부 곱셈 연산 결과 대신 도 10에서 전술한 제1 내지 제4 정수부 곱셈 연산 결과(mul1~mul4)가 연산 회로(20c)의 구성 요소들을 바이패스하여 제1 내지 제4 부호 확장 회로(SE1~SE4) 및 제1 내지 제4 제로 확장 회로(ZE1~ZE4)에 입력될 수 있다.
이에 따라, 제13 멀티플렉서(M13)는 제1 부호 확장 회로(SE1)에 의해 제1 정수부 곱셈 연산 결과(mul1)의 비트들로부터 확장된 비트들에 부호가 복사되어 '1'이 채워진 제1 정수부 곱셈 연산 결과(mul1)의 확장된 제1 비트들과 제1 제로 확장 회로(ZE1)에 의해 제1 정수부 곱셈 연산 결과(mul1)의 상위 비트들로부터 확장된 비트들에 '0'이 채워진 제1 정수부 곱셈 연산 결과(mul1)의 확장된 제2 비트들을 수신할 수 있다.
이와 같은 방식으로, 제14 내지 제16 멀티플렉서(M23~M43)는 제2 내지 제4 부호 확장 회로(SE2~SE4)에 의해 확장된 비트들에 부호가 복사되어 '1'이 채워진 제2 내지 제4 정수부 곱셈 연산 결과(mul2~mul4)의 확장된 제1 비트들과 제2 내지 제4 제로 확장 회로(ZE2~ZE4)에 의해 확장된 비트들에 '0'이 채워진 제2 내지 제4 정수부 곱셈 연산 결과(mul2~mul4)의 확장된 제2 비트들을 각각 수신할 수 있다.
그리고 도 11에서 전술한 제5 내지 제8 정수부 곱셈 연산 결과(F_mul5~F_mul8)가 제5 내지 제8 부호 확장 회로(SE5~SE8) 및 제5 내지 제8 제로 확장 회로(ZE5~ZE8)에 입력될 수 있다.
이에 따라, 제17 멀티플렉서(M53)는 제5 부호 확장 회로(SE5)에 의해 제5 정수부 곱셈 연산 결과(mul5)의 비트들로부터 확장된 비트들에 부호가 복사되어 '1'이 채워진 제5 정수부 곱셈 연산 결과(mul5)의 확장된 제1 비트들과 제5 제로 확장 회로(ZE5)에 의해 제5 정수부 곱셈 연산 결과(mul5)의 상위 비트들로부터 확장된 비트들에 '0'이 채워진 제5 정수부 곱셈 연산 결과(mul5)의 확장된 제2 비트들을 수신할 수 있다.
이와 같은 방식으로, 제18 내지 제20 멀티플렉서(M63~M83)는 제6 내지 제8 부호 확장 회로(SE6~SE8)에 의해 확장된 비트들에 부호가 복사되어 '1'이 채워진 제6 내지 제8 정수부 곱셈 연산 결과(mul6~mul8)의 확장된 제1 비트들과 제6 내지 제8 제로 확장 회로(ZE6~ZE8)에 의해 확장된 비트들에 '0'이 채워진 제6 내지 제8 정수부 곱셈 연산 결과(mul6~mul8)의 확장된 제2 비트들을 각각 수신할 수 있다.
일부 실시예에 있어서, 정수 연산 모드(예를 들면, IS_Float=0)일 때, 제13 내지 제16 멀티플렉서(M13~M43)는 각각 자신에 입력된 정수부 곱셈 연산 결과의 부호에 기초하여 부호 확장 회로(SE1~SE4)에 의해 확장된 제1 비트들을 출력하거나, 제로 확장 회로(ZE1~ZE4)에 의해 확장된 제2 비트들을 출력할 수 있다. 또한, 정수 연산 모드(예를 들면, IS_Float=0)일 때, 제17 내지 제20 멀티플렉서(M53~M83)는 각각 자신에 입력된 정수부 곱셈 연산 결과의 부호에 응답하여 부호 확장 회로(SE5~SE8)에 의해 확장된 제1 비트들을 출력하거나, 제로 확장 회로(ZE5~ZE8)에 의해 확장된 제2 비트들을 출력할 수 있다.
제2 덧셈 회로(AC12)는 제13 및 제14 멀티플렉서(M13, M23)로부터의 출력들을 합산하고, 제3 덧셈 회로(AC22)는 제15 및 제16 멀티플렉서(M33, M43)로부터의 출력들을 합산할 수 있다. 제4 덧셈 회로(AC32)는 제2 및 제3 덧셈 회로(AC12, AC22)의 출력들을 합산할 수 있다. 제5 덧셈 회로(AC42)는 제4 덧셈 회로(AC32)의 출력과 제1 누적 데이터(ACC1)의 상위 비트들을 합산하여 제1 합산 결과 데이터(I_add1)를 생성할 수 있다.
제6 덧셈 회로(AC52)는 제17 및 제18 멀티플렉서(M53, M63)로부터의 출력들을 합산하고, 제7 덧셈 회로(AC62)는 제19 및 제20 멀티플렉서(M73, M83)로부터의 출력들을 합산할 수 있다. 제8 덧셈 회로(AC72)는 제6 및 제7 덧셈 회로(AC52, AC62)로부터의 출력들을 합산할 수 있다. 제9 덧셈 회로(AC82)는 제8 덧셈 회로(AC72)의 출력과 제1 누적 데이터(ACC1)의 하위 비트들을 합산하여 제2 합산 결과 데이터(I_add2)를 생성할 수 있다.
도 14를 더 참조하면, 연산 회로(20e)는 제21 내지 제23 멀티플렉서(M14~M34), 제10 내지 제12 덧셈 회로(AC13~AC33), 제1 및 제2 리딩 원 검출기(LOD_1, LOD_2), 제6 및 제7 쉬프트 회로(SHT12, SHT22), 정규화 및 반올림 회로(NR) 및 누적 데이터 생성 회로(ACG)를 포함할 수 있다. 제21 내지 제23 멀티플렉서(M14~M34), 제10 내지 제12 덧셈 회로(AC13~AC33), 제1 및 제2 리딩 원 검출기(LOD_1, LOD_2), 제6 및 제7 쉬프트 회로(SHT12, SHT22), 정규화 및 반올림 회로(NR) 및 누적 데이터 생성 회로(ACG)는 부동 소수점 연산 모드에서 이용될 수 있고, 정수 연산 모드에서는 비활성화될 수 있다.
구체적으로, 제21 및 제22 멀티플렉서(M14, M24)는 연산 회로(20e)가 정수 연산 모드로 동작하는 때에, 'IS_FLOAT' 신호에 응답하여 '0'을 출력할 수 있다. 제21 및 제22 멀티플렉서(M14, M24)로부터 출력된 '0'으로 인해 연산 회로(20e) 내의 부동 소수점 연산을 위한 구성들이 비활성화될 수 있다. 이하에서는, 연산 회로(20e)가 부동 소수점 연산 모드로 동작하는 것을 중심으로 서술한다.
제21 멀티플렉서(M14)는 제1 합산 결과 데이터(F_add1)를 제10 덧셈 회로(AC13)로 출력하고, 제22 멀티플렉서(M24)는 제2 합산 결과 데이터(F_add2)를 제10 덧셈 회로(AC13)로 출력할 수 있다.
제10 덧셈 회로(AC13)는 제1 및 제2 합산 결과 데이터(F_add1, F_add2)를 합산하여 제3 합산 결과 데이터를 생성할 수 있다. 이 때, 제1 합산 결과 데이터(F_add1)는 하위 비트들의 개수만큼 쉬프트된 후, 합산될 수 있다. 하위 비트들의 개수는 도 13a의 가수부 곱셈 연산 결과의 하위 비트들의 개수와 동일할 수 있다. 제1 리딩 원 검출기(LOD_1)는 부호를 나타내는 적어도 하나의 비트가 제거된 제3 합산 결과 데이터의 MSB를 포함하는 k(단, k는 1 이상의 정수)개의 상위 비트들에 대한 제1 리딩 원 검출을 수행할 수 있다. 제2 리딩 원 검출기(LOD_2)는 상기 k개의 상위 비트들이 제거된 제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) 중 어느 하나로부터 생성된 정보일 수 있다.
제22 멀티플렉서(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)를 생성할 수 있다.
도 15를 더 참조하면, 연산 회로(20f)는 제24 및 제25 멀티플렉서(M15~M25) 및 제13 덧셈 회로(AC14)를 포함할 수 있다. 제24 및 제25 멀티플렉서(M15~M25) 및 제13 덧셈 회로(AC14)는 정수 연산 모드에서 이용될 수 있고, 부동 소수점 연산 모드에서는 비활성화될 수 있다.
구체적으로, 제24 및 제25 멀티플렉서(M15, M25)는 연산 회로(20f)가 정수 연산 모드로 동작하는 때에, 'IS_FLOAT' 신호에 응답하여 '0'을 출력할 수 있다. 이하에서는, 연산 회로(20f)가 정수 연산 모드로 동작하는 것을 중심으로 서술한다.
제24 멀티플렉서(M15)는 제1 합산 결과 데이터(F_add1)를 제13 덧셈 회로(AC14)로 출력하고, 제25 멀티플렉서(M25)는 제2 합산 결과 데이터(F_add2)를 제13 덧셈 회로(AC14)로 출력할 수 있다. 제14 덧셈 회로(AC14)는 제24 및 제25 멀티플렉서(M15, M25)로부터의 출력들을 합산하여 새로운 제2 누적 데이터(ACC2)를 생성할 수 있다.
도 16은 본 개시의 예시적 실시예에 따른 애플리케이션 프로세서(2000)를 나타내는 블록도이다.
도 16을 참조하면, 애플리케이션 프로세서(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)을 통해 입출력되거나, GPU(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 내지 도 15에 따른 부동 소수점 연산 및 정수 연산을 수행하는 연산 회로(20, 20a, 20b)를 포함할 수 있다. 연산 회로(20, 20a, 20b)는 다양한 타입의 포맷을 갖는 부동 소수점 데이터들 및 정수 연산에 대한 내적 연산 및 누적 연산을 수행할 수 있으며, 부동 소수점 곱셈 연산을 위한 부동 소수점 곱셈기 및 정수 곱셈 연산을 수행하기 위한 정수 곱셈기를 포함하고, 상기 부동 소수점 곱셈기 및 상기 정수 곱셈기는 적어도 하나의 가산기를 공유하도록 구성함으로써, 뉴럴 네트워크 장치의 전력 소모 및 설계 면적이 감소될 수 있다. 연산 회로(20, 20a, 20b)의 구체적인 실시예들은 전술된 바, 이하 생략한다.

Claims (20)

  1. 뉴럴 네트워크 연산 수행을 위한 뉴럴 네트워크 장치에 있어서,
    제1 곱셈기, 제2 곱셈기, 정렬 쉬프터, 및 상기 제1 곱셈기와 상기 제2 곱셈기가 공유하도록 구성된 가산기를 포함하고, 복수의 부동 소수점 데이터 쌍들에 대한 제1 내적 연산 또는 복수의 정수 데이터 쌍들에 대한 제2 내적 연산을 수행하도록 구성된 연산 회로를 포함하고,
    상기 연산 회로는,
    상기 제1 내적 연산에서, 상기 제1 곱셈기를 이용하여 상기 복수의 부동 소수점 데이터 쌍들 각각에 대한 복수의 가수부 곱셈 연산 결과들을 획득하고, 상기 정렬 쉬프터를 이용하여 상기 복수의 부동 소수점 데이터 쌍들 각각에 대응하는 복수의 지수부 덧셈 연산 결과들로부터 확인된 최대값을 기반으로 상기 복수의 가수부 곱셈 연산 결과들을 각각 정렬 쉬프트한 후, 상기 가산기를 이용하여 정렬된 상기 복수의 가수부 곱셈 연산 결과들을 합산하여 제1 누적 데이터를 출력하고,
    상기 제2 내적 연산에서, 상기 제2 곱셈기를 이용하여 상기 복수의 정수 데이터 쌍들 각각에 대한 복수의 정수 곱셈 연산 결과들을 획득하고, 상기 가산기를 이용하여 상기 복수의 정수 곱셈 연산 결과들을 합산하여 제2 누적 데이터를 출력하도록 구성된 것을 특징으로 하는 뉴럴 네트워크 장치.
  2. 제1항에 있어서,
    상기 가산기는,
    상기 제1 내적 연산에서, 정렬된 상기 복수의 가수부 곱셈 연산 결과들의 상위 비트들을 합산하도록 구성된 제1 가산 회로; 및
    상기 제1 내적 연산에서 정렬된 상기 복수의 가수부 곱셈 연산 결과들의 하위 비트들을 합산하거나, 상기 제2 내적 연산에서, 상기 복수의 정수 곱셈 연산 결과들을 합산하도록 구성된 제2 가산 회로;를 포함하는 것을 특징으로 하는 뉴럴 네트워크 장치.
  3. 제2항에 있어서,
    상기 연산 회로는,
    상기 제1 내적 연산에서, 상기 제1 가산 회로로부터 출력된 합산 결과 데이터와 상기 제2 가산 회로로부터 출력된 합산 결과 데이터를 합산하고, 이를 정규화 및 반올림하여 상기 제1 누적 데이터를 출력하는 제1 포스트 가산기; 및
    상기 제2 내적 연산에서, 상기 제2 가산 회로로부터 출력된 합산 결과 데이터를 합산하여 상기 제2 누적 데이터를 출력하는 제2 포스트 가산기;를 포함하는 것을 특징으로 하는 뉴럴 네트워크 장치.
  4. 제3항에 있어서,
    상기 연산 회로는,
    제1 정수 데이터 쌍들 및 제2 정수 데이터 쌍들을 포함하는 상기 복수의 정수 데이터 쌍들을 수신하고,
    상기 제2 내적 연산에서, 상기 제1 곱셈기를 이용하여 상기 제1 정수 데이터 쌍들에 대한 제1 정수 곱셈 연산 결과들을 획득하고, 상기 제2 곱셈기를 이용하여 상기 제2 정수 데이터 쌍들에 대한 제2 정수 곱셈 연산 결과들을 획득하도록 구성된 것을 특징으로 하는 뉴럴 네트워크 장치.
  5. 제4항에 있어서,
    상기 제1 가산 회로는,
    상기 제2 내적 연산에서, 상기 제1 정수 곱셈 연산 결과들을 합산하고,
    상기 제2 가산 회로는
    상기 제2 내적 연산에서, 상기 제2 정수 곱셈 연산 결과들을 합산하는 것을 특징으로 하는 뉴럴 네트워크 장치.
  6. 제5항에 있어서,
    상기 제2 포스트 가산기는,
    상기 제2 내적 연산에서, 상기 제1 가산 회로로부터 출력된 합산 결과 데이터 및 상기 제2 가산 회로로부터 출력된 합산 결과 데이터를 합산하여 상기 제2 누적 데이터를 생성하는 것을 특징으로 하는 뉴럴 네트워크 장치.
  7. 제3항에 있어서,
    상기 연산 회로는,
    상기 제1 내적 연산을 수행 시, 상기 제2 곱셈기 및 상기 제2 포스트 가산기를 게이팅(gating)하고,
    상기 제2 내적 연산을 수행 시, 상기 정렬 쉬프터 및 상기 제1 포스트 가산기를 게이팅하는 것을 특징으로 하는 뉴럴 네트워크 장치.
  8. 제1항에 있어서,
    상기 복수의 부동 소수점 데이터 쌍들에 포함된 복수의 입력 데이터들은,
    상기 제1 누적 데이터와 상이한 타입의 포맷을 갖고,
    상기 복수의 정수 데이터 쌍들에 포함된 복수의 입력 데이터들은,
    상기 제2 누적 데이터와 상이한 타입의 포맷을 갖는 것을 특징으로 하는 뉴럴 네트워크 장치.
  9. 제8항에 있어서,
    상기 복수의 부동 소수점 데이터 쌍들에 포함된 복수의 데이터들은,
    FP16(Floating Point 16) 타입 또는 BF16(Brain Float 16) 타입의 포맷을 갖고,
    상기 제1 누적 데이터는,
    FP32(Floating Point 32) 타입의 포맷을 갖는 것을 특징으로 하는 뉴럴 네트워크 장치.
  10. 제9항에 있어서,
    상기 연산 회로는,
    상기 복수의 데이터들 중 상기 FP16 타입의 포맷을 갖는 제1 데이터의 지수부 비트 영역을 확장하고, 상기 BF16 타입의 포맷을 갖는 제2 데이터의 가수부 비트 영역을 확장하도록 구성된 것을 특징으로 하는 뉴럴 네트워크 장치.
  11. 제8항에 있어서,
    상기 복수의 정수 데이터 쌍들에 포함된 복수의 데이터들은,
    INT8(Integer 8) 타입의 포맷을 갖고,
    상기 제2 누적 데이터는,
    INT32(Integer 32) 타입의 포맷을 갖는 것을 특징으로 하는 뉴럴 네트워크 장치.
  12. 제1항에 있어서,
    상기 뉴럴 네트워크 장치는,
    상기 연산 회로로부터 생성된 부동 소수점 데이터인 제3 누적 데이터가 저장된 버퍼;를 포함하고,
    상기 연산 회로는,
    상기 제1 내적 연산에서, 상기 복수의 부동 소수점 데이터 쌍들과 상기 제3 누적 데이터를 입력받도록 구성되고, 상기 복수의 지수부 덧셈 연산 결과들과 상기 제3 누적 데이터의 지수부로부터 확인된 최대값을 기반으로 상기 복수의 가수부 곱셈 연산 결과들과 상기 제3 누적 데이터의 가수부를 각각 정렬 쉬프트 한 후, 상기 가산기를 이용하여 정렬된 상기 복수의 가수부 연산 결과들과 정렬된 상기 제3 누적 데이터의 가수부를 합산하여 상기 제1 누적 데이터를 출력하도록 구성된 것을 특징으로 하는 뉴럴 네트워크 장치.
  13. 제12항에 있어서,
    상기 버퍼는,
    상기 연산 회로로부터 생성된 정수 데이터인 제4 누적 데이터를 저장하고,
    상기 연산 회로는,
    상기 제2 내적 연산에서, 상기 복수의 정수 데이터 쌍들과 상기 제4 누적 데이터를 입력받도록 구성되고, 상기 가산기를 이용하여 상기 복수의 정수 곱셈 연산 결과들과 상기 제4 누적 데이터를 합산하여 상기 제2 누적 데이터를 출력도록 구성된 것을 특징으로 하는 뉴럴 네트워크 장치.
  14. 제13항에 있어서,
    상기 연산 회로는,
    상기 제1 누적 데이터 및 상기 제2 누적 데이터를 상기 버퍼에 저장하도록 구성된 것을 특징으로 하는 뉴럴 네트워크 장치.
  15. 뉴럴 네트워크 장치의 동작 방법에 있어서,
    복수의 데이터 쌍들을 수신하는 단계;
    상기 복수의 데이터 쌍들이 부동 소수점 포맷을 갖는 경우 부동 소수점 연산을 수행하는 단계;
    상기 복수의 데이터 쌍들이 정수 포맷을 갖는 경우 정수 연산을 수행하는 단계; 및
    상기 부동 소수점 연산 또는 상기 정수 연산을 통해 생성된 최종 데이터를 메모리에 저장하는 단계;를 포함하고,
    상기 부동 소수점 연산을 수행하는 단계는,
    부동 소수점 곱셈기를 이용하여 상기 복수의 데이터 쌍들 각각에 대응하는 복수의 가수부 곱셈 연산 결과들을 획득하고, 가산기를 이용하여 상기 복수의 가수부 곱셈 연산 결과들을 합산하여 제1 누적 데이터를 생성하고,
    상기 정수 연산을 수행하는 단계는,
    정수 곱셈기를 이용하여 상기 복수의 데이터 쌍들 각각에 대응하는 복수의 정수 곱셈 연산 결과들을 획득하고, 상기 가산기를 이용하여 상기 복수의 정수 곱셈 연산 결과들을 합산하여 제2 누적 데이터를 생성하는 것을 특징으로 하는 뉴럴 네트워크 장치의 동작 방법.
  16. 제15항에 있어서,
    상기 부동 소수점 연산을 수행하는 단계는,
    상기 복수의 데이터 쌍들 각각에 대응하는 복수의 지수부 덧셈 연산 결과들로부터 확인된 최대값을 기반으로 정렬 쉬프터를 이용하여 상기 복수의 가수부 곱셈 연산 결과들을 각각 정렬 쉬프트한 후, 상기 가산기를 이용하여 정렬된 상기 복수의 가수부 곱셈 연산 결과들을 합산하여 상기 제1 누적 데이터를 생성하는 것을 특징으로 하는 뉴럴 네트워크 장치의 동작 방법.
  17. 제16항에 있어서,
    상기 부동 소수점 연산을 수행하는 단계는,
    상기 가산기에 포함된 제1 가산 회로를 이용하여 정렬된 상기 복수의 가수부 곱셈 연산 결과들의 상위 비트들을 합산하고, 상기 가산기에 포함된 제2 가산 회로를 이용하여 정렬된 상기 복수의 가수부 곱셈 연산 결과들의 하위 비트들을 합산하고, 상기 제1 가산 회로 및 제2 가산 회로의 연산 결과들을 합산하여 상기 제1 누적 데이터를 생성하는 것을 특징으로 하는 뉴럴 네트워크 장치의 동작 방법.
  18. 제17항에 있어서,
    상기 정수 연산을 수행하는 단계는,
    상기 부동 소수점 곱셈기를 이용하여 상기 복수의 데이터 쌍들 중 제1 데이터 쌍들 각각에 대응하는 제1 정수 곱셈 연산 결과들을 획득하고,
    상기 정수 곱셈기를 이용하여 상기 복수의 데이터 쌍들 중 제2 데이터 쌍들 각각에 대응하는 제2 정수 곱셈 연산 결과들을 획득하는 것을 특징으로 하는 뉴럴 네트워크 장치의 동작 방법.
  19. 제18항에 있어서,
    상기 정수 연산을 수행하는 단계는,
    상기 제1 가산 회로를 이용하여 상기 제1 정수 곱셈 연산 결과들을 합산하고, 상기 제2 가산 회로를 이용하여 상기 제2 정수 곱셈 연산 결과들을 합산하고, 상기 제1 가산 회로 및 상기 제2 가산 회로의 연산 결과들을 합산하여 상기 제2 누적 데이터를 생성하는 것을 특징으로 하는 뉴럴 네트워크 장치의 동작 방법.
  20. 애플리케이션 프로세서에 있어서,
    제1 곱셈기, 제2 곱셈기, 정렬 쉬프터, 및 상기 제1 곱셈기와 상기 제2 곱셈기가 공유하도록 구성된 가산기를 포함하고, 복수의 부동 소수점 데이터 쌍들에 대한 제1 내적 연산 또는 복수의 정수 데이터 쌍들에 대한 제2 내적 연산을 수행하도록 구성된 뉴럴 네트워크 장치를 포함하고,
    상기 뉴럴 네트워크 장치는,
    상기 제1 내적 연산에서, 상기 제1 곱셈기를 이용하여 상기 복수의 부동 소수점 데이터 쌍들 각각에 대한 복수의 가수부 곱셈 연산 결과들을 획득하고, 상기 정렬 쉬프터를 이용하여 상기 복수의 부동 소수점 데이터 쌍들 각각에 대응하는 복수의 지수부 덧셈 연산 결과들로부터 확인된 최대값을 기반으로 상기 복수의 가수부 곱셈 연산 결과들을 각각 정렬 쉬프트한 후, 상기 가산기를 이용하여 정렬된 상기 복수의 가수부 곱셈 연산 결과들을 합산하여 제1 누적 데이터를 출력하고,
    상기 제2 내적 연산에서, 상기 제1 곱셈기 및 상기 제2 곱셈기를 이용하여 상기 복수의 정수 데이터 쌍들 각각에 대한 복수의 정수 곱셈 연산 결과들을 획득하고, 상기 가산기를 이용하여 상기 복수의 정수 곱셈 연산 결과들을 합산하여 제2 누적 데이터를 출력하도록 구성된 것을 특징으로 하는 애플리케이션 프로세서.
KR1020210014396A 2020-04-07 2021-02-01 뉴럴 네트워크 연산 수행을 위한 뉴럴 네트워크 장치, 뉴럴 네트워크 장치의 동작 방법 및 뉴럴 네트워크 장치를 포함하는 애플리케이션 프로세서 KR20210124894A (ko)

Priority Applications (3)

Application Number Priority Date Filing Date Title
US17/212,474 US20210311703A1 (en) 2020-04-07 2021-03-25 Neural network device for neural network operation, operating method of the neural network device, and application processor including the same
CN202110364898.0A CN113496278A (zh) 2020-04-07 2021-04-02 神经网络设备及其操作方法、以及应用处理器
DE102021108536.5A DE102021108536A1 (de) 2020-04-07 2021-04-06 Neuronale netzvorrichtung für den betrieb eines neuronalen netzes, verfahren zum betreiben einer neuronalen netzvorrichtung und anwendungsprozessor, der diese umfasst

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
KR20200042409 2020-04-07
KR1020200042409 2020-04-07

Publications (1)

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

Family

ID=78151051

Family Applications (1)

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

Country Status (1)

Country Link
KR (1) KR20210124894A (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2024117562A1 (ko) * 2022-11-29 2024-06-06 한국전자통신연구원 곱셈 누적 연산 방법 및 장치

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2024117562A1 (ko) * 2022-11-29 2024-06-06 한국전자통신연구원 곱셈 누적 연산 방법 및 장치

Similar Documents

Publication Publication Date Title
US20220335284A1 (en) Apparatus and method with neural network
US11429838B2 (en) Neural network device for neural network operation, method of operating neural network device, and application processor including the neural network device
Pestana et al. A full featured configurable accelerator for object detection with YOLO
CN115456161A (zh) 一种数据处理方法和数据处理系统
Jawandhiya Hardware design for machine learning
TWI834729B (zh) 神經網路處理器及其卷積操作方法
US11562046B2 (en) Neural network processor using dyadic weight matrix and operation method thereof
EP4318313A1 (en) Data processing method, training method for neural network model, and apparatus
CN111368656A (zh) 一种视频内容描述方法和视频内容描述装置
US20210182670A1 (en) Method and apparatus with training verification of neural network between different frameworks
CN113449859A (zh) 一种数据处理方法及其装置
US20230289601A1 (en) Integrated circuit that extracts data, neural network processor including the integrated circuit, and neural network
KR20210124888A (ko) 뉴럴 네트워크 연산 수행을 위한 뉴럴 네트워크 장치, 뉴럴 네트워크 장치의 동작 방법 및 뉴럴 네트워크 장치를 포함하는 애플리케이션 프로세서
US20210174179A1 (en) Arithmetic apparatus, operating method thereof, and neural network processor
CN113126953A (zh) 针对浮点处理的方法和装置
US11537860B2 (en) Neural net work processing
Kim FPGA based neural network accelerators
CN113627422A (zh) 一种图像分类方法及其相关设备
KR20210124894A (ko) 뉴럴 네트워크 연산 수행을 위한 뉴럴 네트워크 장치, 뉴럴 네트워크 장치의 동작 방법 및 뉴럴 네트워크 장치를 포함하는 애플리케이션 프로세서
JP7413549B2 (ja) 並列ロードストアを有する共有スクラッチパッドメモリ
CN113496278A (zh) 神经网络设备及其操作方法、以及应用处理器
US20210312012A1 (en) Neural network device, method of operating the neural network device, and application processor including the neural network device
US20210312269A1 (en) Neural network device for neural network operation, method of operating neural network device, and application processor including neural network device
KR20210124883A (ko) 뉴럴 네트워크 연산 수행을 위한 뉴럴 네트워크 장치, 뉴럴 네트워크 장치의 동작 방법 및 뉴럴 네트워크 장치를 포함하는 애플리케이션 프로세서
CN116266274A (zh) 一种神经网络的调整方法及相应装置