KR20190054770A - 커널을 이용한 컨볼루션 연산 처리 방법 및 장치 - Google Patents

커널을 이용한 컨볼루션 연산 처리 방법 및 장치 Download PDF

Info

Publication number
KR20190054770A
KR20190054770A KR1020170151722A KR20170151722A KR20190054770A KR 20190054770 A KR20190054770 A KR 20190054770A KR 1020170151722 A KR1020170151722 A KR 1020170151722A KR 20170151722 A KR20170151722 A KR 20170151722A KR 20190054770 A KR20190054770 A KR 20190054770A
Authority
KR
South Korea
Prior art keywords
data
processor
kernel
divided blocks
output block
Prior art date
Application number
KR1020170151722A
Other languages
English (en)
Other versions
KR102561261B1 (ko
Inventor
김경훈
박영환
서동관
케샤바 프라사드
김대현
김석진
조한수
김현중
Original Assignee
삼성전자주식회사
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 삼성전자주식회사 filed Critical 삼성전자주식회사
Priority to KR1020170151722A priority Critical patent/KR102561261B1/ko
Priority to CN201880070720.1A priority patent/CN111295675B/zh
Priority to PCT/KR2018/012123 priority patent/WO2019098538A1/en
Priority to EP18878124.9A priority patent/EP3639207B1/en
Priority to US16/163,772 priority patent/US11675997B2/en
Publication of KR20190054770A publication Critical patent/KR20190054770A/ko
Application granted granted Critical
Publication of KR102561261B1 publication Critical patent/KR102561261B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0215Addressing or allocation; Relocation with look ahead addressing means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/15Correlation function computation including computation of convolution operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N5/00Computing arrangements using knowledge-based models
    • G06N5/04Inference or reasoning models
    • G06N5/046Forward inferencing; Production systems
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

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

Abstract

뉴럴 네트워크에서 컨볼루션 연산을 처리하는 방법 및 장치는, 메모리에 저장된 입력 데이터의 분할된 블록들 중 하나를 상기 메모리로부터 리드(read)하고, 상기 분할된 블록들 중 하나를 커널(Kernel)과 컨볼루션 연산하여 출력 블록을 생성하고, 상기 출력 블록을 이용하여 특징맵을 생성하고, 상기 특징맵을 상기 메모리에 라이트(write)한다.

Description

커널을 이용한 컨볼루션 연산 처리 방법 및 장치 {APPARATUS AND METHOD FOR PROCESSING CONVOLUTION OPERATION USING KERNEL}
본 개시는 커널을 이용한 컨볼루션 연산 처리 방법 및 장치에 관련된 것이다. 구체적으로, 본 개시는 뉴럴 내트워크에서 입력 데이터의 분할된 블록들에 대해 커널을 적용하여 컨볼루션 동작을 수행하는 기술에 관한 것이다.
인공지능(Artificial Intelligence, AI) 시스템은 인간 수준의 지능을 구현하는 컴퓨터 시스템이며, 기존 Rule 기반 스마트 시스템과 달리 기계가 스스로 학습하고 판단하며 똑똑해지는 시스템이다. 인공지능 시스템은 사용할수록 인식률이 향상되고 사용자 취향을 보다 정확하게 이해할 수 있게 되어, 기존 Rule 기반 스마트 시스템은 점차 딥러닝 기반 인공지능 시스템으로 대체되고 있다.
인공지능 기술은 기계학습(딥러닝) 및 기계학습을 활용한 요소 기술들로 구성된다.
기계학습은 입력 데이터들의 특징을 스스로 분류/학습하는 알고리즘 기술이며, 요소기술은 딥러닝 등의 기계학습 알고리즘을 활용하여 인간 두뇌의 인지, 판단 등의 기능을 모사하는 기술로서, 언어적 이해, 시각적 이해, 추론/예측, 지식 표현, 동작 제어 등의 기술 분야로 구성된다.
인공지능 기술이 응용되는 다양한 분야는 다음과 같다. 언어적 이해는 인간의 언어/문자를 인식하고 응용/처리하는 기술로서, 자연어 처리, 기계 번역, 대화시스템, 질의 응답, 음성 인식/합성 등을 포함한다. 시각적 이해는 사물을 인간의 시각처럼 인식하여 처리하는 기술로서, 객체 인식, 객체 추적, 영상 검색, 사람 인식, 장면 이해, 공간 이해, 영상 개선 등을 포함한다. 추론 예측은 정보를 판단하여 논리적으로 추론하고 예측하는 기술로서, 지식/확률 기반 추론, 최적화 예측, 선호 기반 계획, 추천 등을 포함한다. 지식 표현은 인간의 경험정보를 지식데이터로 자동화 처리하는 기술로서, 지식 구축(데이터 생성/분류), 지식 관리(데이터 활용) 등을 포함한다. 동작 제어는 차량의 자율 주행, 로봇의 움직임을 제어하는 기술로서, 움직임 제어(항법, 충돌, 주행), 조작 제어(행동 제어) 등을 포함한다.
다양한 실시예들에 따라 컨볼루션 연산을 처리하는 방법 및 장치를 제공한다. 본 실시예가 이루고자 하는 기술적 과제는 상기된 바와 같은 기술적 과제들로 한정되지 않으며, 이하의 실시예들로부터 또 다른 기술적 과제들이 유추될 수 있다.
상술한 기술적 과제를 해결하기 위한 일 실시예에 따른 컨볼루션 연산 처리 장치는, 메모리; 및 상기 메모리에 저장된 입력 데이터의 분할된 블록들 중 하나를 상기 메모리로부터 리드(read)하고, 상기 분할된 블록들 중 하나를 커널(Kernel)과 컨볼루션 연산하여 출력 블록을 생성하고, 상기 출력 블록을 이용하여 특징맵을 생성하고, 상기 특징맵을 상기 메모리에 라이트(write)하는 프로세서를 포함한다.
또한, 일 실시예에 따른 컨볼루션 연산 처리 장치에 있어서, 상기 출력 블록의 크기는 상기 분할된 블록들 중 하나의 크기보다 클 수 있다.
또한, 일 실시예에 따른 컨볼루션 연산 처리 장치에 있어서, 상기 출력 블록의 크기는 상기 커널의 크기에 따라 가변할 수 있다.
또한, 일 실시예에 따른 컨볼루션 연산 처리 장치에 있어서, 상기 분할된 블록들에 대해 상기 분할된 블록들 각각에 대응하는 어드레스(Address)가 할당되며, 상기 분할된 블록들은 상기 메모리의 복수의 뱅크에 각각 저장되어 상기 어드레스에 의해 액세스 가능할 수 있다.
또한, 일 실시예에 따른 컨볼루션 연산 처리 장치에 있어서, 상기 프로세서는, 상기 분할된 블록들 중 하나의 어드레스를 참조하여 상기 복수의 뱅크 중 하나의 뱅크에 대한 충돌 없는(conflict-free) 액세스를 수행하고, 상기 액세스에 기초하여 상기 하나의 뱅크로부터 상기 분할된 블록들 중 하나의 데이터를 리드할 수 있다.
또한, 일 실시예에 따른 컨볼루션 연산 처리 장치에 있어서, 상기 프로세서는, 상기 분할된 블록들 중 하나에 대해 상기 커널을 적어도 부분적으로 적용 하여 상기 분할된 블록들 중 하나의 내부 위치 및 외부 위치 에 대응하는 각각의 출력 값들을 생성하고, 상기 각각의 출력 값들을 이용하여 상기 출력 블록을 생성할 수 있다.
또한, 일 실시예에 따른 컨볼루션 연산 처리 장치에 있어서, 상기 프로세서는, 상기 컨볼루션 연산 수행 시 스택 오버플로우(stack overflow)를 방지하기 위해 커널 정보를 임시 저장하는 코드를 실행할 수 있다.
또한, 일 실시예에 따른 컨볼루션 연산 처리 장치에 있어서, 상기 장치는 버퍼(Buffer)를 더 포함하고, 상기 프로세서는, 상기 출력 블록을 상기 버퍼에 라이트하여, 상기 버퍼에 기저장된 다른 출력들과 누산(Accumulation)하고, 상기 버퍼에 누산된 결과에 기초하여 상기 특징맵을 생성할 수 있다.
또한, 일 실시예에 따른 컨볼루션 연산 처리 장치에 있어서, 상기 프로세서는, 상기 출력 블록의 수직 형태의 데이터를 수평 형태의 데이터로 변환하여 상기 버퍼에 라이트할 수 있다.
또한, 일 실시예에 따른 컨볼루션 연산 처리 장치에 있어서, 상기 프로세서는, 상기 버퍼에 저장된 데이터의 어드레스 정보 및 블록 형태 정보를 나타내는 태그 정보를 이용하여 상기 누산을 수행할 수 있다.
일 실시예에 따른 컨볼루션 연산 처리 방법은, 메모리에 저장된 입력 데이터의 분할된 블록들 중 하나를 상기 메모리로부터 리드(read)하는 단계; 상기 분할된 블록들 중 하나를 커널(Kernel)과 컨볼루션 연산하여 출력 블록을 생성하는 단계; 상기 출력 블록을 이용하여 특징맵을 생성하는 단계; 및 상기 특징맵을 상기 메모리에 라이트(write)하는 단계를 포함한다.
또한, 일 실시예에 따른 컨볼루션 연산 처리 방법에 있어서, 상기 출력 블록의 크기는 상기 분할된 블록들 중 하나의 크기보다 클 수 있다.
또한, 일 실시예에 따른 컨볼루션 연산 처리 방법에 있어서, 상기 출력 블록의 크기는 상기 커널의 크기에 따라 가변할 수 있다.
또한, 일 실시예에 따른 컨볼루션 연산 처리 방법에 있어서, 상기 분할된 블록들에 대해 상기 분할된 블록들 각각에 대응하는 어드레스(Address)가 할당되며, 상기 분할된 블록들은 상기 메모리의 복수의 뱅크에 각각 저장되어 상기 어드레스에 의해 액세스 가능할 수 있다.
또한, 일 실시예에 따른 컨볼루션 연산 처리 방법에 있어서, 상기 리드하는 단계는, 상기 분할된 블록들 중 하나의 어드레스를 참조하여 상기 복수의 뱅크 중 하나의 뱅크에 대한 충돌 없는(conflict-free) 액세스를 수행하는 단계; 및 상기 액세스에 기초하여 상기 하나의 뱅크로부터 상기 분할된 블록들 중 하나의 데이터를 리드하는 단계를 포함할 수 있다.
또한, 일 실시예에 따른 컨볼루션 연산 처리 방법에 있어서, 상기 출력 블록을 생성하는 단계는, 상기 분할된 블록들 중 하나에 대해 상기 커널을 적어도 부분적으로 적용하여 상기 분할된 블록들 중 하나의 내부 위치 및 외부 위치에 대응하는 각각의 출력 값들을 생성하는 단계; 및 상기 각각의 출력 값들을 이용하여 상기 출력 블록을 생성하는 단계를 포함할 수 있다.
또한, 일 실시예에 따른 컨볼루션 연산 처리 방법에 있어서, 상기 컨볼루션 연산 수행 시 스택 오버플로우(stack overflow)를 방지하기 위해 커널 정보를 임시 저장하는 코드를 실행할 수 있다.
또한, 일 실시예에 따른 컨볼루션 연산 처리 방법에 있어서, 상기 특징맵을 생성하는 단계는, 상기 출력 블록을 버퍼(Buffer)에 라이트하여, 상기 버퍼에 기저장된 다른 출력들과 누산(Accumulation)하는 단계; 및 상기 버퍼에 누산된 결과에 기초하여 상기 특징맵을 생성하는 단계를 포함할 수 있다.
또한, 일 실시예에 따른 컨볼루션 연산 처리 방법에 있어서, 상기 누산하는 단계는, 상기 출력 블록의 수직 형태의 데이터를 수평 형태의 데이터로 변환하여 상기 버퍼에 라이트하는 단계를 포함할 수 있다.
일 실시예에 따른 컴퓨터로 읽을 수 있는 기록매체는 상술한 방법을 컴퓨터에서 실행시키기 위한 프로그램을 기록한 기록매체를 포함한다.
도 1은 뉴럴 네트워크의 구조를 예시하는 도면이다.
도 2는 뉴럴 네트워크 기반 컨볼루션 연산 처리 과정을 나타내는 도면이다.
도 3은 일 실시예에 따른 컨볼루션 연산 처리 장치의 블록도를 도시하는 도면이다.
도 4는 레이어의 입력 및 출력을 나타내는 도면이다.
도 5는 어드레스(address)를 이용하여 데이터를 리드(read)하는 방법을 도식화한 도면이다.
도 6은 일 실시예에 따른 레이어의 입력 및 출력을 나타내는 도면이다.
도 7은 일 실시예에 따라 뱅크(bank)에 대한 충돌 없는 액세스가 이루어지는 일 예를 나타낸 도면이다.
도 8a는 일 실시예에 따라 생성되는 각각의 출력 블록을 나타내는 도면이다.
도 8b는 일 실시예에 따라 생성된 각각의 출력 블록을 누산(accumulation)하는 방법을 나타내는 도면이다.
도 9는 일 실시예에 따른 데이터 플로우를 제어하는 방법을 나타내는 도면이다.
도 10은 일 실시예에 따른 프로세서의 구조를 나타내는 도면이다.
도 11은 일 실시예에 따른 어드레스 할당 방법을 나타내는 도면이다.
도 12는 일 실시예에 따른 누산에 이용되는 버퍼를 나타내는 도면이다.
도 13은 일 실시예에 따른 누산을 수행하는 방법을 나타내는 도면이다.
도 14는 일 실시예에 따른 컨볼루션 연산 처리 방법을 나타내는 흐름도이다.
개시된 실시 예들에서 사용되는 용어는 본 발명에서의 기능을 고려하면서 가능한 현재 널리 사용되는 일반적인 용어들을 선택하였으나, 이는 당 분야에 종사하는 기술자의 의도 또는 판례, 새로운 기술의 출현 등에 따라 달라질 수 있다. 또한, 특정한 경우는 출원인이 임의로 선정한 용어도 있으며, 이 경우 해당되는 발명의 설명 부분에서 상세히 그 의미를 기재할 것이다. 따라서 본 발명에서 사용되는 용어는 단순한 용어의 명칭이 아닌, 그 용어가 가지는 의미와 본 발명의 전반에 걸친 내용을 토대로 정의되어야 한다.
명세서 전체에서 어떤 부분이 어떤 구성요소를 "포함"한다고 할 때, 이는 특별히 반대되는 기재가 없는 한 다른 구성요소를 제외하는 것이 아니라 다른 구성요소를 더 포함할 수 있음을 의미한다. 또한, 명세서에 기재된 "...부", "...모듈" 등의 용어는 적어도 하나의 기능이나 동작을 처리하는 단위를 의미하며, 이는 하드웨어 또는 소프트웨어로 구현되거나 하드웨어와 소프트웨어의 결합으로 구현될 수 있다.
아래에서는 첨부한 도면을 참고하여 본 발명의 실시 예에 대하여 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자가 용이하게 실시할 수 있도록 상세히 설명한다. 그러나 본 발명은 여러 가지 상이한 형태로 구현될 수 있으며 여기에서 설명하는 실시 예에 한정되지 않는다.
이하에서는 도면을 참조하여 본 발명의 실시 예들을 상세히 설명한다.
도 1은 뉴럴 네트워크의 구조를 예시하는 도면이다.
뉴럴 네트워크(Neural Network; 100)는 생물학적 뇌를 모델링한 컴퓨터 과학적 아키텍쳐(Computational Architecture)를 참조한다. 뉴럴 네트워크 내에서, 뇌의 뉴런들에 해당되는 노드들은 서로 연결되어 있고, 입력 데이터를 처리하기 위하여 집합적으로 동작한다. 다양한 종류의 뉴럴 네트워크들을 예로 들면, 컨볼루션 뉴럴 네트워크(Convolutional Neural Network; CNN), 회귀 뉴럴 네트워크(Recurrent Neural Network; RNN), 딥 빌리프 네트워크(Deep Belief Network; DBN), 제한된 볼츠만 기계(Restricted Boltzman Machine; RBM) 방식 등이 있으나, 이에 제한되지 않는다. 피드-포워드(feed-forward) 뉴럴 네트워크에서, 뉴럴 네트워크의 뉴런들은 다른 뉴런들과의 연결들(links)을 갖는다. 이와 같은 연결들은 뉴럴 네트워크를 통해, 한 방향으로, 예를 들어 순방향(forward direction)으로 확장될 수 있다.
도 1을 참조하면, 뉴럴 네트워크(100)에 입력 데이터(110)가 입력되고, 하나 이상의 레이어를 보유한 컨볼루션 뉴럴 네트워크(120)를 통해 출력 데이터(130)가 출력되는 구조가 도시된다. 뉴럴 네트워크(100)는 2개 이상의 레이어를 보유한 딥 뉴럴 네트워크(Deep Neural Network)일 수 있다.
컨볼루션 뉴럴 네트워크(120)는 복잡한 입력 데이터(110)로부터 테두리, 선 색 등과 같은 "특징들(features)"을 추출하기 위해 이용될 수 있다. 컨볼루션 뉴럴 네트워크(120)는 복수의 레이어들(layers)을 포함할 수 있다. 각각의 레이어는 데이터를 수신할 수 있고, 해당 레이어에 입력되는 데이터를 처리하여 해당 레이어에서 출력되는 데이터를 생성할 수 있다. 레이어에서 출력되는 데이터는, 컨볼루션 뉴럴 네트워크(120)가 입력된 영상 또는 입력된 특징맵(Feature Map)을 하나 이상의 필터 또는 하나 이상의 커널(Kernel)과 컨볼루션하여 생성한 특징맵일 수 있다. 컨볼루션 뉴럴 네트워크(120)의 초기 레이어들은 입력으로부터 에지들 또는 그레디언트들과 같은 낮은 레벨의 특징들을 추출하도록 동작될 수 있다. 컨볼루션 뉴럴 네트워크(120)의 다음 레이어들은 눈, 코 등과 같은 점진적으로 더 복잡한 특징들을 추출할 수 있다.
컨볼루션 뉴럴 네트워크(120) 내에서 특징맵을 입력받고 출력하는 하나 이상의 또는 모든 레이어들은 히든(hidden) 레이어들(예를 들어, 히든 컨볼루션 레이어들)일 수 있다. 한편, 컨볼루션 뉴럴 네트워크(120)는 특징맵에 컨볼루션 커널을 적용하는 연산 이외에 다른 프로세싱 연산들을 수행할 수 있다. 이와 같은 다른 프로세싱 연산들의 예들은, 활성화 함수(activation function), 풀링(pooling), 리샘플링 등의 연산들을 포함할 수 있으나, 이에 제한되지 않는다.
컨볼루션 뉴럴 네트워크(120)는 계산 집약적(compute-intensive)일 수 있다. 예를 들어, 컨볼루션 뉴럴 네트워크(120)는 각 특징맵에 대하여 많은 연산들을 수행하고, 많은 가중치들을 요구하며, 많은 중간 결과 트래픽을 생성한다. 또한, 컨볼루션 뉴럴 네트워크(120)는 각각의 영상마다 GOPS(giga-operation per second)를 수행하고, 대략 수억 내지 수천억 개의 커널 가중치들을 이용하고, 수백 기가바이트의 중간 데이터들을 생성할 수 있다. 이와 같은 커널 가중치 및 중간 데이터 트래픽은 전력 효율 측면에서 높은 비용을 갖는다. 트래픽이 증가하면 컨볼루션 뉴럴 네트워크(120)를 실행시키는데 소모되는 전력이 차지하는 비중이 증가하게 되고, 그에 따라 제한된 전력을 사용하는 모바일 디바이스, 애플리케이션 또는 컴퓨팅 환경에서 컨볼루션 뉴럴 네트워크(120)의 사용에 제약이 생기게 된다.
개시된 실시예는 상술한 컨볼루션 뉴럴 네트워크(120) 내의 레이어에서 특징맵을 처리하는 방법 및 장치와 관련된다. 보다 구체적으로, 개시된 실시예는 컨볼루션 뉴럴 네트워크(120)를 기반으로 한 컨볼루션 연산 처리 과정에 있어서, 컨볼루션 뉴럴 네트워크(120)의 메모리 액세스 및 내부 네트워크 대역폭 소모를 감소시키는 것과 관련된다. 개시된 실시예는 내부 메모리의 효율적인 사용을 증진시키고, 컨볼루션 연산 처리 과정에서 수행되는 외부 메모리 또는 하이-레벨 캐시 메모리에 대한 데이터 액세스들의 빈도를 감소시킬 수 있다.
또한, 개시된 실시예는 컨볼루션 뉴럴 네트워크(120)가 실행되는(forward execution) 동안의 중간 결과들에 관한 데이터 트래픽 및 연관된 저장 용량을 감소시킬 수 있다. 여기서, 컨볼루션 뉴럴 네트워크(120)를 실행한다는 의미는 레이어를 이용하여(예를 들어, 프로세서, 컴퓨팅 유닛 등과 같은 디바이스를 이용하여) 컨볼루션 뉴럴 네트워크(120)의 데이터를 처리함을 의미할 수 있다. 또한, "데이터의 처리"의 예시는, 특징맵을 생성하는 레이어에 대하여 입력으로 제공된 데이터에 커널을 적용시키는 것을 포함한다. 또한, "중간 결과"는 특징맵의 처리 과정에서 생성되는 특징맵 보다 작은 단위의 출력 데이터 또는 출력 블록들을 의미할 수 있다.
개시된 컨볼루션 연산 처리 기술에 따르면, 컨볼루션 뉴럴 네트워크(120) 내의 데이터 트래픽이 감소될 수 있으며, 계산 결과들을 구하는데 요구되는 전력이 감소될 수 있다. 또한, 메모리로부터 특징맵 또는 중간 결과들에 관한 데이터를 리드(read)하는 빈도가 감소함으로써, 실행 속도의 증가, 전력 소모의 감소 및 메모리 저장 부담의 감소가 이뤄질 수 있다.
도 2는 뉴럴 네트워크 기반 컨볼루션 연산 처리 과정을 나타내는 도면이다.
뉴럴 네트워크 기반의 컨볼루션 연산 처리 과정은, 각각의 레이어에서 입력 데이터와 커널과의 컨볼루션 연산이 수행되는 과정이다. 이 때, 입력 데이터는 특징맵일 수 있다. 도 2를 참조하면, 현재 레이어에 입력된 입력 데이터(210)에 대한 출력 픽셀을 생성하기 위해 N x N x K 크기의 커널(220, 230, 240, 250, 260)을 적용하는 과정이 시각적으로 도시된다. 이 때, N은 커널의 가로 및 세로 길이를 나타내고, K는 커널의 깊이(depth)로서 입력 데이터 (210)의 채널(channel) 길이와 동일한 값을 갖는다. 한편, 입력 데이터 (210)의 채널 길이는 현재 레이어 이전의 레이어에서 사용된 커널의 개수에 따라 결정될 수 있다.
도 2를 참조하면, 현재 레이어에서 입력 데이터 (210)의 좌측 상단으로부터 우측 하단까지 일정한 크기의 커널(220, 230, 240, 250, 260)을 적용하여 입력 데이터 (210)의 특징을 추출하는 과정이 도시되어 있다.
예를 들어, 먼저, 입력 데이터(210)의 좌측 상단 3x3xK 픽셀에 커널(220)을 적용하여 좌측 상단 3x3xK 픽셀에 매핑되는 하나의 픽셀값이 생성된다. 이후, 입력 데이터 (210)의 좌측 상단 3x3xK 픽셀에서 우측으로 한 픽셀 이동시킨 3x3xK 픽셀에 커널(230)을 적용하여 우측으로 한 픽셀 이동된 3x3xK 픽셀에 매핑되는 하나의 픽셀값이 생성된다. 이후, 동일한 과정으로, 입력 데이터 (210) 내에서 컨볼루션 연산의 대상을 좌측에서 우측으로, 그리고 상단에서 하단으로 한 픽셀씩 스캔하면서 커널의 가중치를 곱하여 픽셀값들이 생성된다. 이 때, 컨볼루션 연산의 대상이 되는 데이터는 한 픽셀씩 이동하면서 스캔될 수도 있으나, 2개 픽셀 또는 그 이상의 픽셀 개수만큼 이동하면서 스캔될 수도 있다. 스캔 과정에서 입력 데이터가 이동하는 픽셀의 개수를 스트라이드(stride)라고 하며, 스트라이드의 크기에 따라 출력되는 특징맵의 크기가 결정될 수 있다.
컨볼루션 연산을 위한 구체적인 수식은 다음과 같이 수학식 1의 형태로 나타낼 수 있다.
Figure pat00001
수학식 1에서, x 및 y 는 입력 데이터 내의 픽셀 위치를 나타내고, l 은 출력 특징맵의 채널 길이를 나타낸다. K와 N은 각각 채널 방향 및 행/열 방향의 커널의 크기를 나타내며, b 는 상수를 나타낸다. 또한, w[l][k][m][n] 은 커널의 가중치를 나타내고, p[k][x+m][y+n] 는 현재 레이어에 입력되는 입력 데이터(210)의 픽셀값을 나타내며, y[l][x][y] 는 현재 레이어에서 컨볼루션 연산을 통해 생성되는 특징맵의 픽셀값을 나타낸다. 수학식 1에 따르면, 컨볼루션 뉴럴 네트워크의 레이어에서 수행되는 컨볼루션 연산은 픽셀 단위로 수행된다.
도 3은 일 실시예에 따른 컨볼루션 연산 처리 장치의 블록도를 도시하는 도면이다.
도 3을 참조하면, 컨볼루션 연산 처리 장치(300)는 프로세서(310), 메모리(320) 및 버퍼(330)를 포함할 수 있다.
일 실시예에 따른 프로세서(310)는 연산에 필요한 데이터를 읽어오고 연산 결과를 다시 저장하기 위해 메모리(320)에 접근할 수 있다. 예를 들어, 프로세서(310)는 메모리(320)로부터 데이터를 읽는 로드 명령어(Load Instruction) 및 메모리(320)에 데이터를 저장하는 저장 명령어(Store Instruction)을 실행할 수 있다.
일 실시예에 따른 메모리(320)는 기억 장치를 구성하는 전체 또는 일부 영역을 의미할 수 있다. 일 실시예에 따른 메모리(310)는 메모리 충돌을 최소화시키기 위해 하나 이상의 메모리 뱅크(Memory Bank)(이하 '뱅크'라 한다)로 구성된 다중 뱅크 구조일 수 있다.
일 실시예에 따른 프로세서(310)는 뉴럴 네트워크(100) 내의 레이어에서 입력 데이터와 커널의 컨볼루션 연산을 수행한다. 프로세서(310)는 현재 레이어의 입력 데이터를 메모리(320)로부터 리드(read)하고, 컨볼루션 연산 수행 결과 생성된 출력 특징맵을 메모리(320)에 라이트(write)한다. 입력 데이터는 현재 레이어 이전의 레이어에서 생성되어 출력된 결과물(즉, 특징맵)일 수 있으며, 출력 특징맵은 현재 레이어에 후속하는 레이어의 입력으로 사용될 수 있다.
일반적으로 뉴럴 네트워크(100)는 각각의 레이어마다 많은 연산들을 수행하기 때문에 방대한 중간 결과 트래픽을 생성한다. 따라서, 제한된 성능을 갖는 프로세서(310)를 이용하여 뉴럴 네트워크(100)의 연산을 수행하는 데는 한계가 따른다. 이에 따라, 일 실시예에 따른 프로세서(310)는 현재 레이어에 입력되는 입력 데이터를 분할한 블록 단위의 데이터에 대해 컨볼루션 연산을 수행할 수 있다.
일 실시예에 따른 프로세서(310)는 출력 특징맵을 생성하기 위해 버퍼(330)를 이용하여 컨볼루션 연산 과정에서 생성되는 중간 결과물들을 누산(accumulation)할 수 있다. 일 실시예에 따른 프로세서(310)는 입력 데이터로부터 분할된 블록과 커널을 컨볼루션 연산한 중간 결과를 버퍼(330)에 저장하고, 버퍼(330)에 저장된 데이터들을 합하여 출력 특징맵을 생성할 수 있다. 이하, 입력 데이터로부터 분할된 블록을 현재 레이어의 '입력 블록'이라고 지칭하고, 입력 블록과 커널을 컨볼루션 연산하여 생성한 중간 결과를 현재 레이어의 '출력 블록'이라고 지칭하기로 한다.
일 실시예에 따른 컨볼루션 연산 처리 장치(300)는 프로세서(310)가 메모리(320)로부터 리드하는 입력 블록(즉, 입력 데이터로부터 분할된 블록 단위의 데이터)의 크기를 일정한 크기로 유지함으로써 데이터 트래픽을 감소시킬 수 있다. 일 실시예에 따른 프로세서(310)는 데이터를 리드(read)하는 빈도를 줄임으로써, 뉴럴 네트워크(100)의 실행 속도를 증가시키고, 컨볼루션 연산 처리 장치(300)의 전력 소모를 감소시키며, 메모리(320) 저장 부담을 감소시킬 수 있다.
일 실시예에 따라 컨볼루션 연산 처리 장치(300)가 컨볼루션 연산을 처리하는 방법에 대해서는 도 6 내지 도 13을 통해 후술하기로 한다.
도 4는 레이어의 입력 및 출력을 나타내는 도면이다.
도 4를 참조하면, 현재 레이어에 입력되는 입력 데이터(410)와 현재 레이어에서 출력되는 특징맵(420)이 도시된다. 특징맵(410)은 메모리(320)로부터 리드되고 프로세서(310)에 의해 처리될 수 있다. 프로세서(310)가 입력 데이터(410)를 컨볼루션 연산 처리하여 생성한 특징맵(420)은 다음 레이어로의 진행을 위해 메모리(320)에 라이트될 수 있다.
경우에 따라, 프로세서(310)의 하드웨어 성능은 요구되는 소정 사이클 내에 입력 데이터(410) 전체를 처리하지 못할 수 있다. 따라서, 프로세서(310)는 입력 데이터(410)를 분할하여 분할된 각각의 일부 데이터들을 복수의 사이클 동안 처리할 수 있다. 프로세서(310)는 각각의 일부 데이터들을 처리한 결과들을 합산하여 출력으로서의 특징맵(420)을 생성할 수 있다. 프로세서(310)는 메모리(320)로부터 입력 데이터(410) 대신 입력 데이터(410)의 일부인 데이터(415)를 리드하기 때문에, 프로세서(310)가 가용하는 자원을 유효하게 이용할 수 있고, 컨볼루션 연산 처리에 소요되는 사이클을 최소화할 수 있다.
도 4의 경우, 프로세서(310)는 입력 데이터(410)의 데이터(415) 내에서 좌측 상단으로부터 우측 하단까지 일정한 크기의 커널(412)을 적용하여 데이터(415)의 특징을 추출한다. 추출된 특징들은 픽셀값으로 표현될 수 있으며, 이들 픽셀값들은 데이터(415)에 대한 출력 데이터로서 나타내어진다. 이 때, 출력 데이터는 블록 형태의 데이터, 즉 출력 블록(425)이 될 것이다. 프로세서(310)는 상기와 같은 방식으로 입력 데이터(410) 내의 구획된 데이터들에 대해 각각 컨볼루션 연산을 수행하여 나머지 출력 블록들을 생성한다. 프로세서(310)는 생성된 출력 블록들을 합하여 현재 레이어의 출력으로서의 특징맵(420)을 생성할 수 있다.
도 4를 참조하면, 프로세서(310)가 생성하는 출력 블록(425)은 입력 데이터(410)로부터 분할된 블록의 크기에 대응한다. 그러나, 프로세서(310)가 메모리(320)로부터 리드하는 데이터(415)의 크기는 입력 데이터(410)로부터 분할된 블록의 크기보다 크다. 즉, 데이터(415)는 입력 데이터(410)로부터 분할된 블록들 중 하나의 블록에 대응하는 것이 아니라, 복수 개의 블록에 걸쳐 부분적으로 대응하게 된다. 이 경우, 프로세서(310)는 데이터(415)를 리드하기 위해 복수 개의 블록 각각의 어드레스에 액세스를 수행해야 하기 때문에, 리드 지연(read latency) 및 리드 오버헤드(read overhead)가 발생하게 된다. 리드 지연 및 리드 오버헤드가 발생하는 이유에 대해서는 도 5를 참조하여 상세히 설명하기로 한다.
도 4를 참조하면, 리드(430), 컨볼루션 연산(440) 및 라이트(450)의 각 단계의 흐름이 시간적인 순서에 따라 도식화되어 있다. 먼저, 프로세서(310)가 데이터(415)에 대한 리드(430)를 수행한다. 데이터(415)에 대한 리드(430)가 완료되어야만 데이터(415)와 커널(412) 간의 컨볼루션 연산(440)이 수행될 수 있다. 컨볼루션 연산(440)이 완료되면 생성된 출력 블록(425)이 메모리(320)에 라이트(450)된다.
도 5는 어드레스(address)를 이용하여 데이터를 리드(read)하는 방법을 도식화한 도면이다.
도 5를 참조하면, 메모리(320)에 저장된 입력 데이터(510)가 도시된다. 입력 데이터(510)는 각각의 블록들('블록 1' 내지 '블록 9')로 분할될 수 있다. 각각의 블록들에 대해서는 메모리(320) 내의 저장 위치를 나타내는 어드레스(Address)가 할당될 수 있다.
또한, 도 5를 참조하면, 메모리(320)의 복수의 뱅크(520)에 블록들이 저장되는 형태가 도시된다. 블록들은 각각의 뱅크(520)에 저장되어 프로세서(310)의 어드레스 호출에 의해 액세스될 수 있다.
도 4에서 전술한 바와 같이, 프로세서(310)는 제한된 가용 자원을 고려하여, 입력 데이터(510)의 부분적 입력 데이터(515)만을 처리할 수 있다. 이 때, 부분적 입력 데이터(515)는 복수 개의 블록에 적어도 부분적으로 대응하게 된다. 예를 들어, 부분적 입력 데이터(515)는 입력 데이터(510)로부터 분할된 블록들 중 '블록 5'를 포함하면서도, 나머지 '블록 1' 내지 '블록 4' 및 '블록 6' 내지 '블록 9'도 부분적으로 포함한다. 그런데, 각각의 블록에는 서로 다른 어드레스가 할당되므로, 프로세서(310)가 부분적 입력 데이터(515)에 액세스하기 위해서는 모든 블록(즉, '블록 1' 내지 '블록 9')의 어드레스를 호출해야 한다.
한편, 메모리(320)로부터 복수의 어드레스를 동시에 호출할 때, 메모리(320) 내의 동일한 뱅크(520)에 접근하는 경우가 빈번히 발생한다. 이 경우 뱅크 충돌(Bank Conflict)의 발생으로 스톨(Stall)을 야기하여 시스템의 성능이 저하되는 문제가 발생할 수 있다. 따라서, 프로세서(310)가 복수의 어드레스를 동시에 호출하기 위해서는, 뱅크 충돌을 예측하고 예측을 기반으로 메모리(320) 접근을 스케줄링하여 충돌의 발생을 최소화할 수 있는 전용 하드웨어가 추가적으로 필요할 수 있다.
그러나, 추가적인 하드웨어로 인해 프로세서(310)의 전체 면적이 증가될 수 있으며, 설계의 복잡도는 높아질 수 있다. 또한 소프트웨어의 복잡한 구현은 프로세서(310)의 또 다른 성능저하를 야기할 수 있다.
나아가, 프로세서(310)가 각각의 뱅크(520)에 저장된 데이터에 액세스하기 위해서는 뱅크(520) 내의 데이터를 행(row) 단위로 리드해야 한다. 예를 들어, '블록 1'의 영역 중에서 부분적 입력 데이터(515)에 해당하는 영역의 데이터(524)에 액세스하기 위해서는 뱅크(520) 내의 행 단위의 데이터(522)를 모두 리드해야 한다. 즉, 프로세서(310)가 컨볼루션 연산의 입력으로서의 부분적 입력 데이터(515)를 사용하기 위해서는, 부분적 입력 데이터(515)의 크기를 초과하는 데이터를 리드해야 할 수 있다. 이 경우, 불필요한 데이터 액세스로 인해 리드 지연 및 리드 오버헤드가 발생하게 된다.
도 6은 일 실시예에 따른 레이어의 입력 및 출력을 나타내는 도면이다.
도 6을 참조하면, 현재 레이어에 입력되는 입력 데이터(610)와 현재 레이어에서 출력되는 특징맵(620)이 도시된다. 일 실시예에 따른 입력 데이터(610)는 메모리(320)로부터 리드되고 프로세서(310)에 의해 처리될 수 있다. 일 실시예에 따른 프로세서(310)가 입력 데이터(610)를 컨볼루션 연산 처리하여 생성한 특징맵(620)은 다음 레이어로의 진행을 위해 메모리(320)에 라이트될 수 있다.
일 실시예에 따른 프로세서(310)는 입력 데이터(610)의 일부 데이터를 메모리(320)로부터 리드할 수 있다. 일 실시예에 따라 입력 데이터(610)로부터 분할된 블록들 중 하나의 블록이 컨볼루션 연산을 위한 입력이 될 수 있다. 즉, 현재 레이어에 입력되는 데이터의 크기는 고정된 크기일 수 있다 일 실시예에 따라 현재 레이어에 입력되는 데이터는 입력 블록(615)일 수 있다.
일 실시예에 따른 프로세서(310)는 입력 블록(615)에 대해 일정한 크기의 커널(612)을 적용하여 입력 블록(615)의 특징을 추출할 수 있다. 추출된 특징들은 픽셀값으로 표현될 수 있으며, 이들 픽셀값들은 입력 블록(615)에 대한 출력 블록(625)으로서 나타내어진다. 이 때, 출력 블록(625)의 크기는 입력 블록(615)의 크기보다 크거나 같을 수 있다. 한편, 일 실시예에 따른 출력 블록(625)의 크기는 스트라이드 및 사용된 커널(612)의 크기에 따라 가변할 수 있다. 일 실시예에 따른 출력 블록(625)의 크기는 입력 블록(615)에 대해 커널(612)이 스캔될 때, 커널(612)의 중심이 이동되는 영역의 크기로서 결정될 수 있다.
일 실시예에 따른 출력 블록(625)의 크기가 입력 블록(615)의 크기보다 큰 것은, 컨볼루션 연산 시, 커널(612)이 입력 블록(615)의 내부 영역 뿐만 아니라 입력 블록(615)의 외부 영역에 대해서도 적용되기 때문이다. 일 실시예에 따른 프로세서(310)는 입력 블록(615)에 대해 커널(612)을 적어도 부분적으로 적용할 수 있다. 다시 말해, 프로세서(310)는 입력 블록(615)의 모서리 또는 외곽 영역에서, 입력 블록(615)과 커널(612)을 완전히 오버랩시키지 않고, 부분적으로 오버랩시킬 수 있다. 이 때, 커널(612)이 입력 블록(615)의 내부를 벗어나는 영역에 대해서는 별도의 연산이 수행되지 않을 수 있다. 따라서, 커널(612)이 입력 블록(615)의 내부를 벗어나는 형태로 입력 블록(615)의 데이터와 곱해지는 경우, 그에 따른 출력 값은 입력 데이터(610)의 특징이 온전하게 추출되지 않은 출력 값, 즉, 부분적인(partial) 출력 값이라고 해석할 수 있다. 일 실시예에 따른 프로세서(310)는 입력 블록(615)에 대해 커널(615)을 적어도 부분적으로 적용하여 입력 블록(615)의 내부 위치 및 외부 위치에 대응하는 각각의 출력 값들을 생성하고, 각각의 출력 값들을 이용하여 출력 블록(625)을 생성할 수 있다.
도 6을 참조하면, 출력 블록(625) 중에서 입력 블록(615)의 크기에 대응하는 영역을 제외한 영역의 출력 값은, 컨볼루션 연산 과정에서 일부 입력 데이터에 대한 결과값이 반영되지 않은 값일 수 있다. 따라서, 일 실시예에 따른 프로세서(310)는 입력 데이터(610)로부터 분할된 블록들 각각에 대한 출력 블록들을 누산(accumulate)하는 방식으로 현재 레이어의 출력으로서의 특징맵(620)을 생성할 수 있다. 각각의 출력 블록들을 누산하는 방식에 대해서는 도 7 내지 도 8을 참조하여 후술하기로 한다.
도 6을 참조하면, 프로세서(310)가 메모리(320)로부터 리드하는 입력 블록(615)은 입력 데이터(610)로부터 분할된 블록의 크기에 대응한다. 따라서, 일 실시예에 따른 프로세서(310)는 입력 블록(615)을 리드하기 위해 입력 블록(615)에 대해 할당된 어드레스만을 호출하면 된다. 즉, 일 실시예에 따른 프로세서(310)는 입력 블록(615)을 리드하기 위해 입력 블록(615)을 제외한 나머지 블록들에 대한 액세스를 수행할 필요가 없다. 따라서, 일 실시예에 따른 프로세서(310)는 지연 없이 입력 블록(615)을 리드할 수 있다. 또한, 일 실시예에 따른 프로세서(310)는 입력 블록(615)의 어드레스만을 참조하여 하나의 뱅크에 대한 충돌 없는(conflict-free) 액세스를 수행할 수 있다.
도 7은 일 실시예에 따라 뱅크(bank)에 대한 충돌 없는 액세스가 이루어지는 일 예를 나타낸 도면이다.
도 7을 참조하면, 메모리(320)의 복수의 뱅크에 각각의 입력 블록에 대응하는 데이터가 저장된다. 예를 들어, 도 6에서 전술한 입력 블록(615)에 대응하는 데이터는 복수의 뱅크 중에서 '블록 5'로 도시된 영역(710) 내에 저장될 수 있다. 일 실시예에 따른 입력 블록(615)의 데이터는 뱅크에 분산되어 저장되지 않으므로, 프로세서(310)는 메모리(320)로부터 일 영역(710)에 대한 어드레스만을 호출할 수 있고, 이에 따라 뱅크에 대한 충돌 없는 액세스가 수행될 수 있다.
다시, 도 6을 참조하면, 리드(630), 컨볼루션 연산(640) 및 라이트(650)의 각 단계의 흐름이 시간적인 순서에 따라 도식화되어 있다. 일 실시예에 따른 프로세서(310)는 입력 블록(615)에 대한 리드(630)를 우선적으로 수행한다. 이 때, 리드(630)는 도 4의 리드(430)에 비해 적은 리드 지연을 가질 수 있다. 일 실시예에 따른 프로세서(310)는 입력 블록(615)에 대한 리드(630)가 완료되면 컨볼루션 연산(640)을 수행할 수 있다. 일 실시예에 따른 프로세서(310)는 컨볼루션 연산(640)이 완료될 때까지 대기할 필요 없이, 컨볼루션 연산(640) 과정에서 도출되는 결과 값들을 즉각적으로 출력하여 컨볼루션 연산 처리 장치(300) 내의 메모리(320)에 라이트(650)할 수 있다.
도 8a는 일 실시예에 따라 생성되는 각각의 출력 블록을 나타내는 도면이다.
일 실시예에 따른 프로세서(310)는 메모리(320)로부터 입력 블록(812, 822, 832, 842)을 리드할 수 있다. 이 때, 입력 블록(812, 822, 832, 842)은 특징맵(800)으로부터 분할된 블록들일 수 있다. 일 실시예에 따른 프로세서(310)는 컨볼루션 연산을 수행하여 입력 블록(812, 822, 832, 842) 각각에 대한 출력 블록(810, 820, 830, 840)을 생성할 수 있다. 이 때, 출력 블록(810, 820, 830, 840)의 크기는 특징맵(800)으로부터 분할된 블록의 크기보다 크다.
일 실시예에 따른 프로세서(310)는 출력 블록(810, 820, 830, 840)을 이용하여 레이어의 출력으로서 출력 특징맵을 생성할 수 있다. 일 실시예에 따른 프로세서(310)는 각각의 출력 블록(810, 820, 830, 840)을 누산하여 출력 특징맵을 생성할 수 있다.
도 8b는 일 실시예에 따라 생성된 각각의 출력 블록을 누산(accumulation)하는 방법을 나타내는 도면이다.
도 8b를 참조하면, 출력 블록(810, 820, 830, 840)을 누산하는 방법이 도시된다. 도 8b에 도시된 출력 블록(810, 820, 830, 840)의 각각은 도 8a에 도시된 출력 블록(810, 820, 830, 840)과 대응한다.
도 8b를 참조하면, 출력 블록(810, 820, 830, 840)의 결과 값이 중복되는 영역(850)에서 출력 블록(810, 820, 830, 840)의 각 결과 값이 누산된다. 출력 블록(810, 820)의 결과 값이 중복되는 영역(815)에서는 출력 블록(810, 820)의 각 결과 값이 누산된다. 출력 블록(810, 830)의 결과 값이 중복되는 영역(825)에서는 출력 블록(810, 830)의 각 결과 값이 누산된다. 출력 블록(820, 840)의 결과 값이 중복되는 영역(835)에서는 출력 블록(820, 840)의 각 결과 값이 누산된다. 출력 블록(830, 840)의 결과 값이 중복되는 영역(845)에서는 출력 블록(830, 840)의 각 결과 값이 누산된다.
도 6을 통해 전술한 바와 같이, 일 실시예에 따른 커널이 입력 블록에 대해 부분적으로 적용되므로, 출력 블록(810, 820, 830, 840) 사이에서 결과 값들이 서로 중복되는 영역(815, 825, 835, 845, 850)이 발생할 수 있다. 커널이 입력 블록의 외곽을 벗어나는 형태로 적용되는 경우, 그에 따른 출력 값은 입력 데이터의 부분적인 출력 값이라고 해석할 수 있다. 따라서, 일 실시예에 따른 프로세서(310)는 전술한 방식을 이용하여 현재 레이어의 모든 출력 블록들의 결과 값을 누산하여 현재 레이어의 출력으로서의 특징맵을 생성할 수 있다.
도 9는 일 실시예에 따른 데이터 플로우를 제어하는 방법을 나타내는 도면이다.
전술하였듯이, 일 실시예에 따른 프로세서(310)는 고정된 크기의 입력 블록을 메모리(320)로부터 리드하여 출력 블록을 생성할 수 있다. 또한, 일 실시예에 따른 프로세서(310)는 컨볼루션 연산 수행 과정에서 입력 블록에 대해 부분적으로 커널을 적용할 수 있다. 이 경우, 커널이 입력 블록의 내부를 벗어날 수 있으며, 이 때, 커널이 출력 블록의 영역을 벗어나는 상황이 필연적으로 발생하게 된다.
도 9를 참조하면, 출력 블록의 영역(910)이 도시된다. 일 실시예에 따른 컨볼루션 연산 과정에서, 출력 블록의 영역(910)의 외부(920)에 존재하는 커널의 정보는 출력 값에 영향을 주지 못하는 요소이다. 따라서, 프로세서(310)는 출력 블록의 영역(910)에 대한 태스크를 수용할 만큼의 자원, 예를 들어, 프로세싱 엘리먼트(Processing Element)를 구비할 수 있다. 이러한 프로세싱 엘리먼트에는 고정적으로 저장되어 반복 사용되기 위한 데이터가 저장될 수 있다. 그런데, 출력 블록의 영역(910)의 외부(920)에 존재하는 커널은, 프로세서(310)에게 주어지지 않은 자원 영역을 침범하여 자신의 정보를 저장시킨다는 문제점을 발생시킨다. 이와 같은 현상을 스택 오버플로우(stack overflow)라고 한다.
일 실시예에 따른 프로세서(310)는 출력 블록의 영역(910)에 대한 태스크를 수용하기 위한 자원 뿐만 아니라, 출력 블록의 영역(910)의 외부(920)에 존재하는 커널에 대한 데이터 플로우(data flow)를 처리하기 위한 스택 프로세싱 엘리먼트(Stack Processing Element)를 구비할 수 있다. 상기 스택 프로세싱 엘리먼트에는 데이터 플로우의 컨트롤(control)을 위해 잠깐 사용하고 삭제할 예정인 정보가 저장될 수 있다.
일 실시예에 따른 스택 프로세싱 엘리먼트의 연결 구조에 대해서는 도 10을 참조하여 후술하기로 한다.
도 10은 일 실시예에 따른 프로세서의 구조를 나타내는 도면이다.
일 실시예에 따른 프로세서(1000)는 프로세싱 엘리먼트(1010), 스택 프로세싱 엘리먼트(1030) 및 스킵을 위한 프로세싱 엘리먼트(1040)를 포함할 수 있다. 한편, 도 10의 프로세서(1000)는 도 3의 프로세서(310)에 대응하는 것일 수 있다.
일 실시예에 따른 프로세서(1000)는 출력 블록의 영역(910)에 대한 태스크를 수용할 만큼의 자원으로서 프로세싱 엘리먼트(1040)를 구비할 수 있다. 그러나, 일 실시예에 따르면 출력 블록의 영역(910)의 외부(920)에 존재하는 커널에 대한 데이터 플로우를 처리할 필요가 있으므로, 스택 오버플로우를 방지하기 위해 스택 프로세싱 엘리먼트(1030)를 구비함이 바람직하다. 스택 프로세싱 엘리먼트(1030)의 데이터 입출력 구조는 LIFO(Last In First Out) 및 FILO(First In Last Out) 방식으로 이루어질 수 있다. 데이터 플로우의 운용이 정상적으로 이루어지는 상태에서 일시적으로 사용될 데이터의 저장 명령이 있으면, 프로세서(1000)는 스택 프로세싱 엘리먼트(1030)에 해당 데이터를 LIFO 및 FILO 방식에 따라 임시 저장할 수 있다.
일 실시예에 따른 프로세서(1000)가 컨볼루션 연산을 수행함에 있어서, 입력 블록을 행(row) 별로 상단에서 하단으로 스캔하는 경우, 스택 프로세싱 엘리먼트를 출력 블록의 영역(910)의 좌측 또는 우측에 구비하여 프로세서(1000)의 가용 자원보다 큰 영역에 대한 데이터 플로우를 유지할 수 있다. 이 때, 출력 블록의 영역(910)의 외부이자 출력 블록의 영역(910)의 하단에 커널이 존재하는 경우, 해당 커널은 더 이상 연산에 이용되지 않으므로, 해당 정보를 저장하지 않고 스킵(skip)하여도 무방하다. 따라서, 일 실시예에 따른 프로세서(1000)는 출력 블록의 영역(910)의 하단에 존재하는 커널의 정보를 스킵할 수 있다.
일 실시예에 따른 프로세서(1000)가 컨볼루션 연산을 수행함에 있어서, 입력 블록을 열(column) 별로 좌측에서 우측으로 스캔하는 경우, 스택 프로세싱 엘리먼트를 출력 블록의 영역(910)의 상단 또는 하단에 구비하여 프로세서(1000)의 가용 자원보다 큰 영역에 대한 데이터 플로우를 유지할 수 있다. 이 때, 출력 블록의 영역(910)의 외부이자 출력 블록의 영역(910)의 우측에 커널이 존재하는 경우, 해당 커널은 더 이상 연산에 이용되지 않으므로, 해당 정보를 저장하지 않고 스킵하여도 무방하다. 따라서, 일 실시예에 따른 프로세서(1000)는 출력 블록의 영역(910)의 우측에 존재하는 커널의 정보를 스킵할 수 있다.
다양한 실시예에 따르면, 입력 블록에 대한 커널의 스캔 순서에 따라 프로세서(1000) 내의 스택 프로세싱 엘리먼트의 구비 위치가 다양하게 결정될 수 있다.
일 실시예에 따른 프로세서(1000)는 소정 스캔 순서로 일정 픽셀씩 이동하면서 커널의 가중치를 곱하여 출력 값을 생성할 수 있다. 일 실시예에 따른 스캔 순서는 래스터 스캔(raster scan), Z 스캔(Z-scan), N 스캔(N-scan), 수평적 스캔(horizontal scan), 수직적 스캔(vertical scan) 등 다양한 순서 중 하나일 수 있으나, 상기 스캔 순서들에 한정되는 것은 아니다.
도 11은 일 실시예에 따른 어드레스 할당 방법을 나타내는 도면이다.
일 실시예에 따른 프로세서(310)는 컨볼루션 연산을 수행할 때 특정 순서에 따라 커널을 처리하기 위해 프로세싱 엘리먼트 각각에 특정 패턴의 어드레스를 지정하여 저장할 수 있다.
예를 들어, 커널을 상단에서 하단의 순서로 처리하고자 할 때, 프로세서(310)는 프로세싱 엘리먼트의 상단에서 하단 방향으로 순차적인 순서(1110)에 따라 어드레스 값을 지정할 수 있다.
그러나, 전술하였듯이, 일 실시예에 따른 컨볼루션 연산 과정에서 커널은 입력 블록의 내부를 부분적으로 벗어난 상태로 위치하여 입력 블록과 곱해질 수 있다. 이 경우, 입력 블록의 영역의 외부이자 입력 블록의 상단 또는 하단에 존재하는 커널의 연산은 가장 마지막에 수행하는 것이 효율적일 수 있다.
따라서, 일 실시예에 따른 프로세서(310)는 프로세싱 엘리먼트의 상단 및 하단을 제외한 중간 영역에 대해 선순위(1120)의 어드레스 값을 지정하고, 그 이후 프로세싱 엘리먼트의 상단 및 하단 영역에 대해 후순위의 어드레스 값을 지정할 수 있다.
도 12는 일 실시예에 따른 누산에 이용되는 버퍼를 나타내는 도면이다.
일 실시예에 따른 컨볼루션 연산 처리 장치(300)는 스크래치 패드 메모리(Scratch Pad Memory; SPM; 1210) 및 버퍼(1220)를 포함할 수 있다. 도 12의 버퍼(1220)는 도 3의 버퍼(320)과 대응하는 것일 수 있다.
일 실시예에 따른 스크래치 패드 메모리(1210)는 메모리(320)에 포함되는 것일 수 있다. 스크래치 패드 메모리(1210)는 컨볼루션 연산 과정에서 생성되는 중간 결과를 유지하기 위해 사용될 수 있으며, 레지스터, 캐시 기억 장치 등의 소용량 기억 장치를 포함할 수 있다.
일 실시예에 따른 버퍼(1220)는 프로세서(310)가 컨볼루션 연산을 통해 생성하는 출력 블록들을 임시로 저장하기 위한 임시 기억 장소이다. 또한, 버퍼(1220)에 저장되는 데이터는 1차원의 어레이 형식으로 존재할 수 있다.
일 실시예에 따른 프로세서(310)는 컨볼루션 연산 수행 시 입력 블록에 대해 커널을 부분적으로 적용하여 출력 블록을 생성할 수 있다. 도 8을 통해 전술하였듯이, 출력 블록들 사이에서 결과 값들이 서로 중복되는 영역이 발생할 수 있다. 따라서, 일 실시예에 따른 프로세서(310)는 컨볼루션 연산을 통해 생성되는 출력 블록들의 결과 값을 버퍼(1220)에 누산하여 완전한 형태의 출력 특징맵을 생성할 수 있다.
일 실시예에 따라 도 12를 참조하면, '타일 1' 내지 '타일 4'의 데이터가 버퍼(1220)에 저장되어 누산될 수 있다. 도 12에 도시된 '타일 1' 내지 '타일 4'는 예를 들어, 도 8에 도시된 출력 블록(815, 825, 835, 845)에 각각 대응하는 것일 수 있다. '타일 1' 내지 '타일 4'는 특징맵의 부분적인 출력 값으로서, 이들 데이터의 누산된 값은 스크래치 패드 메모리(1210)에 전송되어 저장될 수 있다.
도 13은 일 실시예에 따른 누산을 수행하는 방법을 나타내는 도면이다.
일 실시예에 따른 컨볼루션 연산 처리 장치(300)는 전치부(1310) 및 태그 및 블록 관리부(1320)를 포함할 수 있다.
일 실시예에 따른 전치부(1310)는 컨볼루션 연산의 중간 결과(즉, 출력 블록)를 버퍼(330)에 저장하기 용이한 형태로 데이터를 전치(transpose)할 수 있다. 일 실시예에 따른 출력 블록은 두 개의 영역으로 구분될 수 있다. 첫 째는, 입력 블록에 커널의 전체 영역이 곱해져서 생성된 출력 값들로 이루어진 제 1 영역(1330)이다. 둘 째는, 입력 블록에 커널의 일부 영역이 곱해져서 생성된 출력 값들로 이루어진 제 2 영역(1340)이다. 이와 같은 제 1 영역(1330) 및 제 2 영역(1340)의 데이터는 버퍼(330)의 서로 상이한 위치에 저장되어 관리될 수 있다.
일 실시예에 따른 버퍼(330)는 1차원의 어레이 형식으로 데이터를 저장할 수 있다. 예를 들어, 버퍼(330)는 행(row) 형태로 존재하는 복수 개의 단방향 슬롯(one-way slot)에 데이터를 저장할 수 있다.
또한, 일 실시예에 따른 버퍼(330)는 블록 데이터(1350)를 저장하는 영역과 별도로 태그 데이터(1360)를 저장하는 영역을 포함할 수 있다.
일 실시예에 따른 제 1 영역(1330) 및 제 2 영역(1340)의 데이터는 블록 데이터(1350)로서 버퍼(330)에 저장될 수 있다. 이 때, 일 실시예에 따른 전치부(1310)는 제 2 영역(1340)의 데이터 중 일부 데이터에 대해 전치를 수행할 수 있고, 프로세서(310)는 전치된 데이터를 버퍼(330)에 저장할 수 있다. 일 실시예에 따른 제 2 영역(1340)의 데이터는 행 방향의 데이터 및 열 방향의 데이터를 포함할 수 있다. 행 방향의 데이터는 행 형태로 존재하는 버퍼(330) 내의 단방향 슬롯에 용이하게 저장될 수 있으나, 열 방향의 데이터가 버퍼(330)에 저장되기 위해서는 지나치게 많은 용량을 차지하게 된다. 따라서, 일 실시예에 따른 전치부(1310)가 열 방향의 데이터를 행 방향의 형태로 전치함으로써 열 방향의 데이터는 버퍼(330)에 저장되기 쉬운 형태로 존재 가능하게 된다.
일 실시예에 따라 블록 데이터(1350) 영역에 저장된 데이터는 어드레스를 부여받을 수 있다. 버퍼(330)에 저장된 데이터에 어드레스가 부여됨으로써 프로세서(310)는 필요한 데이터를 빠르게 액세스할 수 있다.
일 실시예에 따른 태그 및 블록 관리부(1320)는 버퍼(330)에 저장되는 데이터들에 대해 어드레스를 태깅(tagging)할 수 있다. 태깅된 데이터들의 태그 정보는 태그 데이터(1360) 영역에 저장되어 태그 및 블록 관리부(1320)에 의해 관리될 수 있다. 즉, 태그 및 블록 관리부(1320)는 데이터에 부여된 어드레스를 통해 데이터가 저장된 실제 위치를 파악할 수 있다.
또한, 일 실시예에 따른 태그 및 블록 관리부(1320)는 전치부(1310)가 전치한 데이터의 전치 정보(transpose information)를 생성할 수 있다. 일 실시예에 따라 생성된 전치 정보는 태그 데이터(1360) 영역에 저장되어 태그 및 블록 관리부(1320)에 의해 관리될 수 있다.
도 14는 일 실시예에 따른 컨볼루션 연산 처리 방법을 나타내는 흐름도이다.
단계 S1410에서, 컨볼루션 연산 처리 장치(300)는 메모리에 저장된 입력 데이터의 분할된 블록들 중 하나를 메모리로부터 리드(read)할 수 있다.
단계 S1420에서, 컨볼루션 연산 처리 장치(300)는 분할된 블록들 중 하나를 커널(Kernel)과 컨볼루션 연산하여 출력 블록을 생성할 수 있다.
단계 S1430에서, 컨볼루션 연산 처리 장치(300)는 출력 블록을 이용하여 특징맵을 생성할 수 있다.
단계 S1440에서, 컨볼루션 연산 처리 장치(300)는 특징맵을 메모리에 라이트(write)할 수 있다.
상기 살펴 본 실시예들에 따른 장치는 프로세서, 프로그램 데이터를 저장하고 실행하는 메모리, 디스크 드라이브와 같은 영구 저장부(permanent storage), 외부 장치와 통신하는 통신 포트, 터치 패널, 키(key), 버튼 등과 같은 사용자 인터페이스 장치 등을 포함할 수 있다. 소프트웨어 모듈 또는 알고리즘으로 구현되는 방법들은 상기 프로세서상에서 실행 가능한 컴퓨터가 읽을 수 있는 코드들 또는 프로그램 명령들로서 컴퓨터가 읽을 수 있는 기록 매체 상에 저장될 수 있다. 여기서 컴퓨터가 읽을 수 있는 기록 매체로 마그네틱 저장 매체(예컨대, ROM(read-only memory), RAM(random-access memory), 플로피 디스크, 하드 디스크 등) 및 광학적 판독 매체(예컨대, 시디롬(CD-ROM), 디브이디(DVD: Digital Versatile Disc)) 등이 있다. 컴퓨터가 읽을 수 있는 기록 매체는 네트워크로 연결된 컴퓨터 시스템들에 분산되어, 분산 방식으로 컴퓨터가 판독 가능한 코드가 저장되고 실행될 수 있다. 매체는 컴퓨터에 의해 판독가능하며, 메모리에 저장되고, 프로세서에서 실행될 수 있다.
본 실시 예는 기능적인 블록 구성들 및 다양한 처리 단계들로 나타내어질 수 있다. 이러한 기능 블록들은 특정 기능들을 실행하는 다양한 개수의 하드웨어 또는/및 소프트웨어 구성들로 구현될 수 있다. 예를 들어, 실시 예는 하나 이상의 마이크로프로세서들의 제어 또는 다른 제어 장치들에 의해서 다양한 기능들을 실행할 수 있는, 메모리, 프로세싱, 로직(logic), 룩 업 테이블(look-up table) 등과 같은 직접 회로 구성들을 채용할 수 있다. 구성 요소들이 소프트웨어 프로그래밍 또는 소프트웨어 요소들로 실행될 수 있는 것과 유사하게, 본 실시 예는 데이터 구조, 프로세스들, 루틴들 또는 다른 프로그래밍 구성들의 조합으로 구현되는 다양한 알고리즘을 포함하여, C, C++, 자바(Java), 어셈블러(assembler) 등과 같은 프로그래밍 또는 스크립팅 언어로 구현될 수 있다. 기능적인 측면들은 하나 이상의 프로세서들에서 실행되는 알고리즘으로 구현될 수 있다. 또한, 본 실시 예는 전자적인 환경 설정, 신호 처리, 및/또는 데이터 처리 등을 위하여 종래 기술을 채용할 수 있다. "매커니즘", "요소", "수단", "구성"과 같은 용어는 넓게 사용될 수 있으며, 기계적이고 물리적인 구성들로서 한정되는 것은 아니다. 상기 용어는 프로세서 등과 연계하여 소프트웨어의 일련의 처리들(routines)의 의미를 포함할 수 있다.

Claims (20)

  1. 뉴럴 네트워크에서 컨볼루션 연산을 처리하는 장치에 있어서,
    메모리; 및
    상기 메모리에 저장된 입력 데이터의 분할된 블록들 중 하나를 상기 메모리로부터 리드(read)하고, 상기 분할된 블록들 중 하나를 커널(Kernel)과 컨볼루션 연산하여 출력 블록을 생성하고, 상기 출력 블록을 이용하여 특징맵을 생성하고, 상기 특징맵을 상기 메모리에 라이트(write)하는 프로세서를 포함하는, 컨볼루션 연산 처리 장치.
  2. 제 1 항에 있어서,
    상기 출력 블록의 크기는 상기 분할된 블록들 중 하나의 크기보다 큰, 컨볼루션 연산 처리 장치.
  3. 제 1 항에 있어서,
    상기 출력 블록의 크기는 상기 커널의 크기에 따라 가변하는, 컨볼루션 연산 처리 장치.
  4. 제 1 항에 있어서,
    상기 분할된 블록들에 대해 상기 분할된 블록들 각각에 대응하는 어드레스(Address)가 할당되며,
    상기 분할된 블록들은 상기 메모리의 복수의 뱅크에 각각 저장되어 상기 어드레스에 의해 액세스 가능한, 컨볼루션 연산 처리 장치.
  5. 제 4 항에 있어서,
    상기 프로세서는,
    상기 분할된 블록들 중 하나의 어드레스를 참조하여 상기 복수의 뱅크 중 하나의 뱅크에 대한 충돌 없는(conflict-free) 액세스를 수행하고, 상기 액세스에 기초하여 상기 하나의 뱅크로부터 상기 분할된 블록들 중 하나의 데이터를 리드하는, 컨볼루션 연산 처리 장치.
  6. 제 1 항에 있어서,
    상기 프로세서는,
    상기 분할된 블록들 중 하나에 대해 상기 커널을 적어도 부분적으로 적용하여 상기 분할된 블록들 중 하나의 내부 위치 및 외부 위치에 대응하는 각각의 출력 값들을 생성하고, 상기 각각의 출력 값들을 이용하여 상기 출력 블록을 생성하는, 컨볼루션 연산 처리 장치.
  7. 제 1 항에 있어서,
    상기 프로세서는,
    상기 컨볼루션 연산 수행 시 스택 오버플로우(stack overflow)를 방지하기 위해 커널 정보를 임시 저장하는 코드를 실행하는, 컨볼루션 연산 처리 장치.
  8. 제 1 항에 있어서,
    상기 장치는 버퍼(Buffer)를 더 포함하고,
    상기 프로세서는,
    상기 출력 블록을 상기 버퍼에 라이트하여, 상기 버퍼에 기저장된 다른 출력들과 누산(Accumulation)하고, 상기 버퍼에 누산된 결과에 기초하여 상기 특징맵을 생성하는, 컨볼루션 연산 처리 장치.
  9. 제 8 항에 있어서,
    상기 프로세서는,
    상기 출력 블록의 수직 형태의 데이터를 수평 형태의 데이터로 변환하여 상기 버퍼에 라이트하는, 컨볼루션 연산 처리 장치.
  10. 제 8 항에 있어서,
    상기 프로세서는,
    상기 버퍼에 저장된 데이터의 어드레스 정보 및 블록 형태 정보를 나타내는 태그 정보를 이용하여 상기 누산을 수행하는, 컨볼루션 연산 처리 장치.
  11. 뉴럴 네트워크에서 프로세서가 컨볼루션 연산을 처리하는 방법에 있어서,
    메모리에 저장된 입력 데이터의 분할된 블록들 중 하나를 상기 메모리로부터 리드(read)하는 단계;
    상기 분할된 블록들 중 하나를 커널(Kernel)과 컨볼루션 연산하여 출력 블록을 생성하는 단계;
    상기 출력 블록을 이용하여 특징맵을 생성하는 단계; 및
    상기 특징맵을 상기 메모리에 라이트(write)하는 단계를 포함하는 컨볼루션 연산 처리 방법.
  12. 제 11 항에 있어서,
    상기 출력 블록의 크기는 상기 분할된 블록들 중 하나의 크기보다 큰, 컨볼루션 연산 처리 방법.
  13. 제 11 항에 있어서,
    상기 출력 블록의 크기는 상기 커널의 크기에 따라 가변하는, 컨볼루션 연산 처리 방법.
  14. 제 11 항에 있어서,
    상기 분할된 블록들에 대해 상기 분할된 블록들 각각에 대응하는 어드레스(Address)가 할당되며,
    상기 분할된 블록들은 상기 메모리의 복수의 뱅크에 각각 저장되어 상기 어드레스에 의해 액세스 가능한, 컨볼루션 연산 처리 방법.
  15. 제 14 항에 있어서,
    상기 리드하는 단계는,
    상기 분할된 블록들 중 하나의 어드레스를 참조하여 상기 복수의 뱅크 중 하나의 뱅크에 대한 충돌 없는(conflict-free) 액세스를 수행하는 단계; 및
    상기 액세스에 기초하여 상기 하나의 뱅크로부터 상기 분할된 블록들 중 하나의 데이터를 리드하는 단계를 포함하는, 컨볼루션 연산 처리 방법.
  16. 제 11 항에 있어서,
    상기 출력 블록을 생성하는 단계는,
    상기 분할된 블록들 중 하나에 대해 상기 커널을 적어도 부분적으로 적용하여 상기 분할된 블록들 중 하나의 내부 위치 및 외부 위치에 대응하는 각각의 출력 값들을 생성하는 단계; 및
    상기 각각의 출력 값들을 이용하여 상기 출력 블록을 생성하는 단계를 포함하는, 컨볼루션 연산 처리 방법.
  17. 제 11 항에 있어서,
    상기 컨볼루션 연산 수행 시 스택 오버플로우(stack overflow)를 방지하기 위해 커널 정보를 임시 저장하는 코드를 실행하는, 컨볼루션 연산 처리 방법.
  18. 제 11 항에 있어서,
    상기 특징맵을 생성하는 단계는,
    상기 출력 블록을 버퍼(Buffer)에 라이트하여, 상기 버퍼에 기저장된 다른 출력들과 누산(Accumulation)하는 단계; 및
    상기 버퍼에 누산된 결과에 기초하여 상기 특징맵을 생성하는 단계를 포함하는, 컨볼루션 연산 처리 방법.
  19. 제 18 항에 있어서,
    상기 누산하는 단계는,
    상기 출력 블록의 수직 형태의 데이터를 수평 형태의 데이터로 변환하여 상기 버퍼에 라이트하는 단계를 포함하는, 컨볼루션 연산 처리 방법.
  20. 제 11 항의 방법을 컴퓨터에서 실행시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체.
KR1020170151722A 2017-11-14 2017-11-14 커널을 이용한 컨볼루션 연산 처리 방법 및 장치 KR102561261B1 (ko)

Priority Applications (5)

Application Number Priority Date Filing Date Title
KR1020170151722A KR102561261B1 (ko) 2017-11-14 2017-11-14 커널을 이용한 컨볼루션 연산 처리 방법 및 장치
CN201880070720.1A CN111295675B (zh) 2017-11-14 2018-10-15 用于使用内核来处理卷积运算的设备和方法
PCT/KR2018/012123 WO2019098538A1 (en) 2017-11-14 2018-10-15 Device and method for processing convolution operation using kernel
EP18878124.9A EP3639207B1 (en) 2017-11-14 2018-10-15 Device and method for processing convolution operation using kernel
US16/163,772 US11675997B2 (en) 2017-11-14 2018-10-18 Device and method for processing convolution operation using kernel

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020170151722A KR102561261B1 (ko) 2017-11-14 2017-11-14 커널을 이용한 컨볼루션 연산 처리 방법 및 장치

Publications (2)

Publication Number Publication Date
KR20190054770A true KR20190054770A (ko) 2019-05-22
KR102561261B1 KR102561261B1 (ko) 2023-07-28

Family

ID=66431286

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020170151722A KR102561261B1 (ko) 2017-11-14 2017-11-14 커널을 이용한 컨볼루션 연산 처리 방법 및 장치

Country Status (5)

Country Link
US (1) US11675997B2 (ko)
EP (1) EP3639207B1 (ko)
KR (1) KR102561261B1 (ko)
CN (1) CN111295675B (ko)
WO (1) WO2019098538A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112633470A (zh) * 2020-12-11 2021-04-09 苏州浪潮智能科技有限公司 优化神经网络卷积残差结构的方法、系统、设备及介质

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10387740B2 (en) * 2016-10-10 2019-08-20 Gyrfalcon Technology Inc. Object detection and recognition apparatus based on CNN based integrated circuits
CN111727108B (zh) * 2018-03-05 2023-09-15 欧姆龙株式会社 用于控制机器人的方法、装置及系统以及存储介质
GB2582782A (en) * 2019-04-02 2020-10-07 Graphcore Ltd Graph conversion method
US20210103793A1 (en) * 2019-10-08 2021-04-08 National Tsing Hua University Block-based inference method for memory-efficient convolutional neural network implementation and system thereof
CN112633462A (zh) * 2019-10-08 2021-04-09 黄朝宗 卷积神经网络的存储器优化的区块式推论方法及其系统
FR3109833B1 (fr) 2020-04-30 2022-05-13 St Microelectronics Rousset Procédé d’allocation de données intermédiaires d’un réseau de neurones artificiel
FR3117626B1 (fr) * 2020-12-16 2023-12-01 St Microelectronics Rousset Procédé d’allocation de mémoire pendant l’exécution d’un réseau de neurones
WO2022259427A1 (ja) * 2021-06-09 2022-12-15 日本電信電話株式会社 画像処理装置、画像処理方法、及び画像処理プログラム
CN114089911B (zh) * 2021-09-07 2024-01-05 上海新氦类脑智能科技有限公司 基于数据复用的块切分拼接处理方法、装置、设备及介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160179434A1 (en) * 2014-12-19 2016-06-23 Intel Corporation Storage device and method for performing convolution operations
WO2017129325A1 (en) * 2016-01-29 2017-08-03 Fotonation Limited A convolutional neural network
WO2017139927A1 (en) * 2016-02-17 2017-08-24 Intel Corporation Region proposal for image regions that include objects of interest using feature maps from multiple layers of a convolutional neural network model

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9811775B2 (en) 2012-12-24 2017-11-07 Google Inc. Parallelizing neural networks during training
US11551076B2 (en) * 2014-09-05 2023-01-10 Qualcomm Incorporated Event-driven temporal convolution for asynchronous pulse-modulated sampled signals
US9805303B2 (en) * 2015-05-21 2017-10-31 Google Inc. Rotating data for neural network computations
US9747546B2 (en) 2015-05-21 2017-08-29 Google Inc. Neural network processor
US10417555B2 (en) * 2015-05-29 2019-09-17 Samsung Electronics Co., Ltd. Data-optimized neural network traversal
US20160358069A1 (en) * 2015-06-03 2016-12-08 Samsung Electronics Co., Ltd. Neural network suppression
KR101788829B1 (ko) * 2015-08-24 2017-10-20 (주)뉴로컴즈 콘볼루션 신경망 컴퓨팅 장치
CN105243399B (zh) * 2015-09-08 2018-09-25 浪潮(北京)电子信息产业有限公司 一种实现图像卷积的方法和装置、实现缓存的方法和装置
US10614354B2 (en) * 2015-10-07 2020-04-07 Altera Corporation Method and apparatus for implementing layers on a convolutional neural network accelerator
US9904874B2 (en) * 2015-11-05 2018-02-27 Microsoft Technology Licensing, Llc Hardware-efficient deep convolutional neural networks
KR102601848B1 (ko) 2015-11-25 2023-11-13 삼성전자주식회사 데이터 인식 모델 구축 장치 및 방법과 데이터 인식 장치
US9665799B1 (en) * 2016-01-29 2017-05-30 Fotonation Limited Convolutional neural network
US11055063B2 (en) * 2016-05-02 2021-07-06 Marvell Asia Pte, Ltd. Systems and methods for deep learning processor
CN106530210B (zh) * 2016-10-31 2019-09-06 北京大学 基于阻变存储器件阵列实现并行卷积计算的设备和方法
CN107239824A (zh) 2016-12-05 2017-10-10 北京深鉴智能科技有限公司 用于实现稀疏卷积神经网络加速器的装置和方法
US10726583B2 (en) * 2016-12-30 2020-07-28 Intel Corporation System and method of encoding and decoding feature maps and weights for a convolutional neural network
US11132619B1 (en) * 2017-02-24 2021-09-28 Cadence Design Systems, Inc. Filtering in trainable networks

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160179434A1 (en) * 2014-12-19 2016-06-23 Intel Corporation Storage device and method for performing convolution operations
WO2017129325A1 (en) * 2016-01-29 2017-08-03 Fotonation Limited A convolutional neural network
WO2017139927A1 (en) * 2016-02-17 2017-08-24 Intel Corporation Region proposal for image regions that include objects of interest using feature maps from multiple layers of a convolutional neural network model

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112633470A (zh) * 2020-12-11 2021-04-09 苏州浪潮智能科技有限公司 优化神经网络卷积残差结构的方法、系统、设备及介质
CN112633470B (zh) * 2020-12-11 2023-01-06 苏州浪潮智能科技有限公司 优化神经网络卷积残差结构的方法、系统、设备及介质

Also Published As

Publication number Publication date
KR102561261B1 (ko) 2023-07-28
WO2019098538A1 (en) 2019-05-23
EP3639207A1 (en) 2020-04-22
EP3639207B1 (en) 2022-03-09
CN111295675A (zh) 2020-06-16
CN111295675B (zh) 2024-03-05
EP3639207A4 (en) 2020-07-22
US20190147319A1 (en) 2019-05-16
US11675997B2 (en) 2023-06-13

Similar Documents

Publication Publication Date Title
KR20190054770A (ko) 커널을 이용한 컨볼루션 연산 처리 방법 및 장치
CN108765247B (zh) 图像处理方法、装置、存储介质及设备
WO2020073211A1 (zh) 运算加速器、处理方法及相关设备
US11093225B2 (en) High parallelism computing system and instruction scheduling method thereof
WO2021233342A1 (zh) 一种神经网络构建方法以及系统
EP3685319A1 (en) Direct access, hardware acceleration in neural network
JP7451614B2 (ja) オンチップの計算ネットワーク
CN107766292B (zh) 一种神经网络处理方法及处理系统
WO2021218517A1 (zh) 获取神经网络模型的方法、图像处理方法及装置
CN111401557B (zh) 智能体决策制定方法、ai模型训练方法、服务器及介质
CN110659069B (zh) 用于执行神经网络计算的指令调度方法及相应计算系统
KR20190099931A (ko) 시스톨릭 배열(Systolic Array)을 이용하여 딥 러닝(Deep Learning) 연산을 수행하는 방법 및 장치
US11934866B2 (en) Operator operation scheduling method and apparatus to determine an optimal scheduling policy for an operator operation
JP7226696B2 (ja) 機械学習方法、機械学習システム及び非一時的コンピュータ可読記憶媒体
CN108875914B (zh) 对神经网络数据进行预处理和后处理的方法和装置
CN115545145A (zh) 优化神经网络模型的方法及执行该方法的神经网络模型处理系统
US11567778B2 (en) Neural network operation reordering for parallel execution
CN114846382A (zh) 具有卷积神经网络实现的显微镜和方法
KR20210014561A (ko) 다수 컨벌루션 윈도우 중의 이미지 데이터를 추출하는 방법, 장치, 기기 및 컴퓨터 판독 가능한 저장매체
CN112200310A (zh) 智能处理器、数据处理方法及存储介质
US20230196093A1 (en) Neural network processing
JP2020155111A (ja) イメージ検索のためのマルチグローバルディスクリプタを組み合わせるフレームワーク
WO2024082679A1 (zh) 计算图的处理方法和装置
CN113743567A (zh) 一种将深度学习模型部署到加速单元的方法
CN109670598A (zh) 一种基于深度学习的数据处理方法

Legal Events

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