KR102360452B1 - 뉴럴 네트워크 프로세서의 컨벌루션 연산 처리 방법 및 장치 - Google Patents

뉴럴 네트워크 프로세서의 컨벌루션 연산 처리 방법 및 장치 Download PDF

Info

Publication number
KR102360452B1
KR102360452B1 KR1020190072062A KR20190072062A KR102360452B1 KR 102360452 B1 KR102360452 B1 KR 102360452B1 KR 1020190072062 A KR1020190072062 A KR 1020190072062A KR 20190072062 A KR20190072062 A KR 20190072062A KR 102360452 B1 KR102360452 B1 KR 102360452B1
Authority
KR
South Korea
Prior art keywords
data
unit
convolutional
sequencer
input
Prior art date
Application number
KR1020190072062A
Other languages
English (en)
Other versions
KR20200144276A (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 KR1020190072062A priority Critical patent/KR102360452B1/ko
Priority to PCT/KR2020/007133 priority patent/WO2020256312A1/ko
Priority to US17/620,308 priority patent/US20220245436A1/en
Publication of KR20200144276A publication Critical patent/KR20200144276A/ko
Priority to KR1020220004142A priority patent/KR102467203B1/ko
Application granted granted Critical
Publication of KR102360452B1 publication Critical patent/KR102360452B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • 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
    • 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
    • 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
    • G06F17/153Multidimensional correlation or convolution
    • 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
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/0464Convolutional networks [CNN, ConvNet]

Landscapes

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

Abstract

본 발명의 일 실시예는, 뉴럴 네트워크에 있어서, 폭 x 높이 x 입력 채널의 형태로 구성되는 입력 데이터와 상기 입력 데이터의 형태에 대응되도록 K x K x 입력 채널 혹은 K x K(K는 1이상의 정수)의 형태로 형성되는 필터의 컨벌루션 연산을 처리하여, 폭 x 높이 x 출력 채널의 형태로 구성되는 출력 데이터를 생성하도록 구성되는 컨벌루션 연산 처리 장치로서, 상기 입력 데이터가 저장된 메모리에서 연산기의 단위 데이터 처리량보다 많은 데이터를 갖는 데이터군을 순차적으로 읽어오고 상기 데이터군을 구성하는 데이터 중 적어도 어느 하나 이상의 데이터가 상기 컨벌루션 연산에 재사용되도록 상기 데이터군을 상기 연산기로 제공하는 페치 유닛, 그리고, 하나 이상의 상기 연산기를 이용하여 상기 단위 데이터 처리량에 맞춰 상기 데이터군을 구성하는 데이터와 상기 필터의 컨벌루션 연산을 복수회 수행하는 연산 유닛을 포함하는 컨벌루션 연산 처리 장치를 제공한다.

Description

뉴럴 네트워크 프로세서의 컨벌루션 연산 처리 방법 및 장치{METHOD AND APPARATUS FOR PROCESSING CONVOLUTIONAL OPERATION OF NEURAL NETWORK PROCESSOR}
본 발명은 뉴럴 네트워크 프로세서의 컨벌루션 연산 처리 방법 및 장치에 관한 것으로, 더욱 상세하게는, 뉴럴 네트워크에서의 컨벌루션 연산에 있어서 메모리로부터 읽어온 데이터를 컨벌루션 연산에 여러 번 재사용함으로써 컨벌루션 연산 처리 속도와 효율을 높일 수 있도록 하는 컨벌루션 연산 방법 및 장치에 관한 것이다.
인공 신경망(Artificial Neural Network, ANN)은 인간의 뇌를 구성하고 있는 뉴런들을 수학적으로 모델링한 인공 뉴런들을 서로 연결하여 인공 지능을 구현한 것이다. ANN의 한 형태인 심층 신경망(Deep neural network, DNN)은 입력층(Input layer)과 출력층(output layer) 사이에 다중의 은닉층(hidden layer)을 포함하는 인공 신경망(ANN: Artificial Neural Network)이며, 인공 뉴런(노드)들이 계층화된 네트워크 구조(Layered network architecture)를 갖는다. 심층 신경망은 알고리즘에 따라 비지도 학습 방법(Unsupervised learning)을 기반으로 하는 심층 신뢰 신경망(DBN: Deep Belief Network), 심층 오토인코더(Deep autoencoder) 등이 있고, 이미지 데이터 처리를 위한 합성곱 신경망(CNN: Convolutional Neural Network), 시계열 데이터 처리를 위한 순환 신경망(RNN: Recurrent Neural Network) 등이 있다.
이 중에서도, 합성곱 신경망(CNN)은 DNN의 한 형태로서, DNN을 구성하는 뉴럴 네트워크의 레이어(Layer)들 중 하나 이상의 컨벌루션 레이어(Convolution Layer)를 포함하는 DNN을 의미한다. 컨벌루션 레이어는 입력 액티베이션(Input activation)들이 폭(Width) x 높이(Height) x 입력 채널(Input Channel)의 형태로 구성되어 있을 때, K x K x 입력 채널의 형태를 갖는 필터(Filter)를 각각의 입력 액티베이션에 적용하여 출력 액티베이션(Output Activation)을 계산하는 레이어이다. 일반적으로 필터는 출력 채널의 수만큼 존재하며, 필터의 크기는 K x K x 입력 채널 x 출력 채널의 형태를 갖는다.
컨벌루션 레이어에서 이루어지는 컨벌루션 연산은 패딩(Padding) 또는 스트라이드(Stride) 방식에 따라 연산의 방식이 일부 상이하며, 여기서, 패딩은 입력 액티베이션의 바운더리(Boundary)에 패드(Pad)를 0 또는 어떤 숫자를 추가하거나 또는 패드를 추가하지 않는 것을 의미하고, 스트라이드(Stride)는 컨벌루션 연산이 이루어지는 입력 액티베이션 포인트들 간의 간격을 의미한다. 단순한 형태인 "Stride = 1, Padding = Same"일 경우, 출력 액티베이션의 크기는 Width x 높이 x Output 채널이 된다.
한편, CNN에서는 컨벌루션 연산이 전체 네트워크 연산의 90% 이상을 차지 하므로, 컨벌루션 연산의 속도와 효율을 높이는 것이 딥 러닝 액셀레이터(Deep Learning Accelerator)의 성능 및 에너지 효율을 증대시키는 것에 중요한 요소이다. 여기서, 딥 러닝 액셀레이터(Deep Learning Accelerator)는 DNN을 구성하고 있는 노드들의 연산에 특화된 프로세서를 나타내는 용어이다.
종래에는, 3차원 형태의 입력인 텐서(Tensor) 등의 입력 액티베이션에 대한 k x k 컨벌루션을 수행할 경우, 입력 텐서(Input tensor)를 구성하는 하나의 액티베이션은 출력 계산을 위해 K2회 사용되어야 하므로, 해당 액티베이션을 메모리로부터 K2회 읽어와서 컨벌루션 연산을 처리하였다. 그러나, 하나의 액티베이션을 K2회 읽어와서 컨벌루션 연산을 처리하게 되면, 액티베이션이 저장되어 있는 메모리(예컨대, SRAM)의 읽기 횟수가 증가하게 되고, 이에 따라, 불필요한 에너지를 소모하게 되는 문제가 발생한다. 또한, 이 경우, 한정된 메모리 읽기 대역폭(예컨대, SRAM read bandwidth)으로 인해, 액티베이션을 읽어오는 속도에 병목이 발생하여 컨벌루션 연산의 속도가 저하되는 문제가 발생한다.
또한, 종래의 대부분의 딥 러닝 액셀레이터는 컨벌루션 연산을 위한 입력/출력 텐서의 형태, 필터의 크기, 컨벌루션 파라미터에 따라 특정 입력에 대해 최적화되어 있었다. 상술한 DNN과 같이 다양한 종류의 입력/출력 텐서의 형태, 필터의 크기, 컨벌루션 파라미터가 적용되는 컨벌루션 연산에서, 위와 같이 특정 입력에 대해 최적화되어 있는 종래의 딥 러닝 액셀레이터는 특정 형태를 제외한 다른 형태의 입력에 대한 데이터 재사용률이 떨어지는 문제를 갖고 있고, 이에 따라, 액셀레이터의 처리 성능 및 효율이 저하되는 문제가 발생하였다.
본 발명은 상기한 문제점을 해결하기 위해 안출된 것으로, 본 발명이 이루고자 하는 주된 기술적 과제는 뉴럴 네트워크에서의 컨벌루션 연산에 있어서 메모리로부터 읽어온 데이터를 컨벌루션 연산에 여러 번 재사용함으로써 컨벌루션 연산 처리 속도와 효율을 높일 수 있도록 하는 컨벌루션 연산 방법 및 장치를 제공하는 것이다.
본 발명이 이루고자 하는 기술적 과제는 이상에서 언급한 기술적 과제로 제한되지 않으며, 언급되지 않은 또 다른 기술적 과제들은 아래의 기재로부터 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에게 명확하게 이해될 수 있을 것이다.
상기 기술적 과제를 해결하기 위해 본 발명의 일 실시예는, 뉴럴 네트워크에 있어서, 폭 x 높이 x 입력 채널의 형태로 구성되는 입력 데이터와 상기 입력 데이터의 형태에 대응되도록 K x K x 입력 채널 또는 K x K(K는 1이상의 정수)의 형태로 형성되는 필터의 컨벌루션 연산을 처리하여, 폭 x 높이 x 출력 채널의 형태로 구성되는 출력 데이터를 생성하도록 구성되는 컨벌루션 연산 처리 장치로서, 상기 입력 데이터가 저장된 메모리에서 연산기의 단위 데이터 처리량보다 많은 데이터를 갖는 데이터군을 순차적으로 읽어오고 상기 데이터군을 구성하는 데이터 중 적어도 어느 하나 이상의 데이터가 상기 컨벌루션 연산에 재사용되도록 상기 데이터군을 상기 연산기로 제공하는 페치 유닛, 그리고, 하나 이상의 상기 연산기를 이용하여 상기 단위 데이터 처리량에 맞춰 상기 데이터군을 구성하는 데이터와 상기 필터의 컨벌루션 연산을 복수회 수행하는 연산 유닛을 포함하는 컨벌루션 연산 처리 장치를 제공한다.
본 실시예에 있어서, 상기 페치 유닛은, 입력 데이터 큐와 쉬프트 버퍼를 포함하는 컨벌루션 피드 모듈 및 컨벌루션 시퀀서 모듈을 포함하고, 상기 컨벌루션 피드 모듈은, 상기 컨벌루션 시퀀서 모듈의 제어에 의해, 상기 입력 데이터가 저장된 메모리에서 상기 연산기의 단위 데이터 처리량보다 많은 데이터를 갖는 상기 데이터군을 순차적으로 읽어와 상기 입력 데이터 큐에 저장하고, 상기 입력 데이터 큐에 저장된 데이터군들 중 특정된 하나의 데이터군을 상기 쉬프트 버퍼로 전송할 수 있다.
본 실시예에 있어서, 상기 컨벌루션 시퀀서 모듈은, 상기 연산기의 단위 데이터 처리량과 동일한 데이터양을 갖는 데이터열이 상기 쉬프트 버퍼에서 상기 연산 유닛으로 전송되도록 제어하고, 상기 연산기의 단위 데이터 처리량과 동일한 데이터양을 갖되 상기 데이터열과 상이한 다른 데이터열이 상기 쉬프트 버퍼에서 상기 연산 유닛으로 전송되도록 제어하며, 상기 데이터열과 상기 다른 데이터열은 상기 특정된 하나의 데이터군을 구성하는 데이터의 순차적인 일부에 해당하고, 서로 동일한 데이터 부분과 상이한 데이터 부분을 갖도록 구성될 수 있다.
본 실시예에 있어서, 상기 연산 유닛은, 연산기를 이용하여, 상기 특정된 하나의 데이터군을 구성하는 데이터 중 적어도 어느 하나 이상의 데이터가 재사용되도록, 상기 쉬프트 버퍼로부터 전송 받은 데이터열들 각각과 상기 필터의 컨벌루션 연산을 수행할 수 있다.
본 실시예에 있어서, 상기 컨벌루션 시퀀서 모듈은, 상기 입력 데이터 큐에 저장된 데이터군들이 순차적으로 상기 쉬프트 버퍼로 전송되도록 제어하고, 상기 쉬프트 버퍼에 저장된 데이터군의 데이터열들이 상기 연산 유닛으로 전송되도록 제어하여, 상기 입력 데이터 큐에 저장된 데이터군을 구성하는 데이터 중 적어도 어느 하나 이상의 데이터가 상기 컨벌루션 연산에 재사용되도록 제어하는 반복 시퀀서, 그리고, 상기 반복 시퀀서로부터 상기 입력 데이터 큐에 저장된 데이터군들에 대한 제어 완료 통지를 받은 경우, 상기 연산기의 단위 데이터 처리량보다 많은 데이터를 갖고 상기 입력 데이터 큐에 저장된 데이터군들과 상이한 데이터군들을 상기 입력 데이터가 저장된 메모리에서 순차적으로 읽어와 상기 입력 데이터 큐에 저장하도록 제어하고, 상기 상이한 데이터군들에 대한 상기 반복 시퀀서의 제어가 실행되도록 제어하는 제어 시퀀서를 포함할 수 있다.
본 실시예에 있어서, 상기 데이터열이 갖는 데이터양은 상기 연산기의 단위 데이터 처리량인UnitSize(#MAC)과 동일하고, 상기 데이터군이 갖는 데이터양은 상기 연산기의 단위 데이터 처리량인UnitSize(#MAC)에 K/2의 최대 정수값인 floor(K/2)를 두 번 더한 식 {floor(K/2)+UnitSize(#MAC)+floor(K/2)} 혹은 그 이상의 값에 의해 정의되며, 여기서 K는 상기 필터의 형태 K x K에 따라 결정되는 상수로서 1이상의 정수일 수 있다.
본 실시예에 있어서, 상기 다른 데이터열은 상기 쉬프트 버퍼가 전송 받은 데이터군에서 상기 데이터열로부터 기 설정된 기준에 따라 쉬프트된 영역의 데이터열일 수 있다.
본 실시예에 있어서, 상기 컨벌루션 시퀀서 모듈에 의해, 상기 특정된 하나의 데이터군에 대하여 상기 쉬프트 버퍼에서 상기 연산 유닛으로 전송되도록 제어되는 데이터열의 개수는 상기 K개이고, 상기 연산기에 의해, 상기 쉬프트 버퍼로부터 전송 받은 데이터열 하나당 상기 필터와 상기 K회의 컨벌루션 연산이 수행됨에 따라, 상기 특정된 하나의 데이터군의 데이터 사용 횟수는 K2회가 될 수 있다.
본 실시예에 있어서, 상기 입력 데이터가 저장되는 메모리와 상기 연산 유닛에 의해 계산된 결과 데이터를 기설정된 형태로 변형하여 상기 메모리에 저장하는 커밋 유닛을 더 포함할 수 있다.
본 실시예에 있어서, 상기 페치 유닛은, 상기 메모리에 저장된 데이터가 페치되는 페치 버퍼, 상기 메모리로부터 상기 페치 버퍼로 페치할 데이터를 제어하는 페치 시퀀서, 그리고, 페치된 데이터를 상기 컨벌루션 피드 모듈로 전달하는 페치 네트워크를 더 포함할 수 있다.
또한, 상기 기술적 과제를 해결하기 위해 본 발명의 다른 실시예는, 뉴럴 네트워크에 있어서, 폭 x 높이 x 입력 채널의 형태로 구성되는 입력 데이터와 상기 입력 데이터의 형태에 대응되도록 K x K x 입력 채널 또는 K x K(K는 1이상의 정수)의 형태로 형성되는 필터의 컨벌루션 연산을 처리하여, 폭 x 높이 x 출력 채널의 형태로 구성되는 출력 데이터를 생성하도록 구성되는 컨벌루션 연산 처리 장치를 이용한 컨벌루션 연산 처리 방법으로서, 상기 컨벌루션 연산 처리 장치의 페치 유닛이, 상기 입력 데이터가 저장된 메모리에서 연산기의 단위 데이터 처리량보다 많은 데이터를 갖는 데이터군을 순차적으로 읽어오고 상기 데이터군을 구성하는 데이터 중 적어도 어느 하나 이상의 데이터가 상기 컨벌루션 연산에 재사용되도록 상기 데이터군을 상기 연산기로 제공하는 페치 단계, 그리고, 상기 컨벌루션 연산 처리 장치의 연산 유닛이, 하나 이상의 상기 연산기를 이용하여 상기 단위 데이터 처리량에 맞춰 상기 데이터군을 구성하는 데이터와 상기 필터의 컨벌루션 연산을 복수회 수행하는 연산 단계를 포함하는 컨벌루션 연산 처리 방법을 제공한다.
본 실시예에 있어서, 상기 페치 유닛은, 입력 데이터 큐와 쉬프트 버퍼를 포함하는 컨벌루션 피드 모듈 및 컨벌루션 시퀀서 모듈을 포함하고, 상기 페치 단계는, 상기 컨벌루션 시퀀서 모듈의 제어에 의해 상기 컨벌루션 피드 모듈이, 상기 입력 데이터가 저장된 메모리에서 상기 연산기의 단위 데이터 처리량보다 많은 데이터를 갖는 상기 데이터군을 순차적으로 읽어와 상기 입력 데이터 큐에 저장하는 단계, 그리고, 상기 컨벌루션 시퀀서 모듈의 제어에 의해 상기 컨벌루션 피드 모듈이, 상기 입력 데이터 큐에 저장된 데이터군들 중 특정된 하나의 데이터군을 상기 쉬프트 버퍼로 전송하는 단계를 포함할 수 있다.
본 실시예에 있어서, 상기 페치 단계는, 상기 컨벌루션 시퀀서 모듈이, 상기 연산기의 단위 데이터 처리량과 동일한 데이터양을 갖는 데이터열이 상기 쉬프트 버퍼에서 상기 연산 유닛으로 전송되도록 제어하는 단계, 그리고, 상기 컨벌루션 시퀀서 모듈이, 상기 연산기의 단위 데이터 처리량과 동일한 데이터양을 갖되 상기 데이터열과 상이한 다른 데이터열이 상기 쉬프트 버퍼에서 상기 연산 유닛으로 전송되도록 제어하는 단계를 더 포함하고, 상기 데이터열과 상기 다른 데이터열은 상기 특정된 하나의 데이터군을 구성하는 데이터의 순차적인 일부에 해당하고, 서로 동일한 데이터 부분과 상이한 데이터 부분을 갖도록 구성될 수 있다.
본 실시예에 있어서, 상기 연산 단계는, 상기 연산 유닛이, 연산기를 이용하여, 상기 특정된 하나의 데이터군을 구성하는 데이터 중 적어도 어느 하나 이상의 데이터가 재사용되도록, 상기 쉬프트 버퍼로부터 전송 받은 데이터열들 각각과 상기 필터의 컨벌루션 연산을 수행하는 단계를 포함할 수 있다.
본 실시예에 있어서, 상기 컨벌루션 시퀀서 모듈은 반복 시퀀서를 포함하고, 상기 페치 단계는, 상기 반복 시퀀서가, 상기 입력 데이터 큐에 저장된 데이터군들이 순차적으로 상기 쉬프트 버퍼로 전송되도록 제어하는 단계, 상기 반복 시퀀서가, 상기 쉬프트 버퍼에 저장된 데이터군의 데이터열들이 상기 연산 유닛으로 전송되도록 제어하는 단계, 그리고, 상기 반복 시퀀서가, 상기 입력 데이터 큐에 저장된 데이터군을 구성하는 데이터 중 적어도 어느 하나 이상의 데이터가 상기 컨벌루션 연산에 재사용되도록 제어하는 단계를 더 포함할 수 있다.
본 실시예에 있어서, 상기 컨벌루션 시퀀서 모듈은 제어 시퀀서를 더 포함하고, 상기 반복 시퀀서로부터 상기 입력 데이터 큐에 저장된 데이터군들에 대한 제어 완료 통지를 받은 경우, 상기 페치 단계는, 상기 제어 시퀀서가, 상기 연산기의 단위 데이터 처리량보다 많은 데이터를 갖고 상기 입력 데이터 큐에 저장된 데이터군들과 상이한 데이터군들을 상기 입력 데이터가 저장된 메모리에서 순차적으로 읽어와 상기 입력 데이터 큐에 저장하도록 제어하는 단계, 그리고, 상기 제어 시퀀서가, 상기 상이한 데이터군들에 대한 상기 반복 시퀀서의 제어가 실행되도록 제어하는 단계를 더 포함할 수 있다.
본 실시예에 있어서, 상기 데이터열이 갖는 데이터양은 상기 연산기의 단위 데이터 처리량인UnitSize(#MAC)과 동일하고, 상기 데이터군이 갖는 데이터양은 상기 연산기의 단위 데이터 처리량인UnitSize(#MAC)에 K/2의 최대 정수값인 floor(K/2)를 두 번 더한 식 {floor(K/2)+UnitSize(#MAC)+floor(K/2)} 또는 그 이상으로 정의되며, 여기서 K는 상기 필터의 형태 K x K x 입력 채널 혹은 K x K에 따라 결정되는 상수로서 1이상의 정수일 수 있다.
본 실시예에 있어서, 상기 다른 데이터열은 상기 쉬프트 버퍼가 전송 받은 데이터군에서 상기 데이터열로부터 기 설정된 기준에 따라 쉬프트된 영역의 데이터열일 수 있다.
본 실시예에 있어서, 상기 컨벌루션 시퀀서 모듈에 의해, 상기 특정된 하나의 데이터군에 대하여 상기 쉬프트 버퍼에서 상기 연산 유닛으로 전송되도록 제어되는 데이터열의 개수는 상기 K개이고, 상기 연산기에 의해, 상기 쉬프트 버퍼로부터 전송 받은 데이터열 하나당 상기 필터와 상기 K회의 컨벌루션 연산이 수행됨에 따라, 상기 특정된 하나의 데이터군의 데이터 사용 횟수는 K2회가 될 수 있다.
본 발명에 따르면, 뉴럴 네트워크에서의 컨벌루션 연산에서 입력으로부터 읽어온 데이터를 컨벌루션 연산에 재사용하여 데이터 재사용률을 높이고, 이를 통해, 컨벌루션 연산 처리 속도와 효율을 높일 수 있다.
또한, 본 발명에 따르면, 순차적으로 메모리에서 읽어온 데이터를 연산 특성에 맞게 순차적으로 여러 번 MAC 유닛에 넣어줄 수 있는 프로그래머블(Programmable)한 컨벌루션 연산 장치를 제공할 수 있고, 이에 따라, 곱셈-축적(Multiply-Accumulate) 연산을 수행하는 MAC 유닛이 대량으로 구비되어 있는 연산 모듈에서 컨벌루션과 같은 복잡한 연산의 처리 속도와 효율을 높일 수 있다.
또한, 본 발명에 따르면, 메모리의 읽기 횟수를 줄임으로써 메모리의 읽기에 사용되는 에너지를 저감할 수 있고, 기 정해진 메모리 데이터 대역폭을 이용하여 대량의 MAC 유닛의 이용률을 극대화할 수 있으며, 다양한 형태의 입력 텐서와 컨벌루션 파라미터에 대해 높은 성능과 에너지 효율을 달성할 수 있도록 프로그래머블한 컨벌루션 연산 처리 장치의 구현이 가능하다.
본 발명의 효과는 상기한 효과로 한정되는 것은 아니며, 본 발명의 상세한 설명 또는 특허청구범위에 기재된 발명의 구성으로부터 추론 가능한 모든 효과를 포함하는 것으로 이해되어야 한다.
도 1은 본 발명의 일 실시예에 따른 컨벌루션 연산 처리 장치의 구성들을 개략적으로 도시한 블록도이다.
도 2는 도 1의 컨벌루션 연산 처리 장치의 세부 구성들을 도시한 도면이다.
도 3은 도 1의 페치 유닛의 세부 구성들을 구체적으로 설명하기 위해 도시한 도면이다.
도 4는 본 발명의 일 실시예에 따른 컨벌루션 연산 처리 장치를 이용하여 컨벌루션 연산을 수행하는 방법을 설명하기 위해 도시한 개념도이다.
도 5 내지 도 17은 본 발명의 일 실시예에 따라 컨벌루션 연산 처리가 수행되는 세부 과정들을 설명하기 위해 도시한 도면들이다.
도 18은 본 발명의 일 실시예에 따른 컨벌루션 연산 처리 방법의 절차들을 나타낸 흐름도이다.
도 19는 도 18에 도시된 페치 단계와 연산 단계의 세부 절차들을 설명하기 위해 도시한 흐름도이다.
도 20은 본 발명의 컨벌루션 시퀀서 모듈이 수행하는 세부 절차들을 설명하기 위해 도시한 도면이다.
이하에서는 첨부한 도면을 참조하여 본 발명을 상세히 설명하기로 한다. 그러나 본 발명은 여러 가지 상이한 형태로 구현될 수 있으며, 따라서 여기에서 설명하는 실시예로 한정되는 것은 아니다. 또한, 첨부된 도면은 본 명세서에 개시된 실시 예를 쉽게 이해할 수 있도록 하기 위한 것일 뿐, 첨부된 도면에 의해 본 명세서에 개시된 기술적 사상이 제한되지 않으며, 본 발명의 사상 및 기술 범위에 포함되는 모든 변경물, 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다. 그리고 도면에서 본 발명을 명확하게 설명하기 위해서 설명과 관계없는 부분은 생략하였으며, 도면에 나타난 각 구성요소의 크기, 형태, 형상은 다양하게 변형될 수 있고, 명세서 전체에 대하여 동일/유사한 부분에 대해서는 동일/유사한 도면 부호를 붙였다.
이하의 설명에서 사용되는 구성요소에 대한 접미사 "모듈" 및 "부"는 명세서 작성의 용이함만이 고려되어 부여되거나 혼용되는 것으로서, 그 자체로 서로 구별되는 의미 또는 역할을 갖는 것은 아니다. 또한, 본 명세서에 개시된 실시예를 설명함에 있어서 관련된 공지 기술에 대한 구체적인 설명이 본 명세서에 개시된 실시 예의 요지를 흐릴 수 있다고 판단되는 경우 그 상세한 설명을 생략하였다.
명세서 전체에서, 어떤 부분이 다른 부분과 "연결(접속, 접촉 또는 결합)"되어 있다고 할 때, 이는 "직접적으로 연결(접속, 접촉 또는 결합)"되어 있는 경우뿐만 아니라, 그 중간에 다른 부재를 사이에 두고 "간접적으로 연결(접속, 접촉 또는 결합)"되어 있는 경우도 포함한다. 또한 어떤 부분이 어떤 구성요소를 "포함(구비 또는 마련)"한다고 할 때, 이는 특별히 반대되는 기재가 없는 한 다른 구성요소를 제외하는 것이 아니라 다른 구성요소를 더 "포함(구비 또는 마련)"할 수 있다는 것을 의미한다.
본 명세서에서 사용한 용어는 단지 특정한 실시예를 설명하기 위해 사용된 것으로, 본 발명을 한정하려는 의도가 아니다. 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함하며, 분산되어 실시되는 구성요소들은 특별한 제한이 있지 않는 한 결합된 형태로 실시될 수도 있다. 본 명세서에서, "포함하다" 또는 "가지다" 등의 용어는 명세서상에 기재된 특징, 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
또한, 본 명세서에서 사용되는 제1, 제2 등과 같이 서수를 포함하는 용어는 다양한 구성 요소들을 설명하는데 사용될 수 있지만, 상기 구성 요소들은 상기 용어들에 의해 한정되어서는 안 된다. 상기 용어들은 하나의 구성요소를 다른 구성요소로부터 구별하는 목적으로만 사용된다. 예를 들어, 본 발명의 권리 범위를 벗어나지 않으면서 제1구성요소는 제2구성요소로 명명될 수 있고, 유사하게 제2구성요소도 제1구성 요소로 명명될 수 있다.
도 1은 본 발명의 일 실시예에 따른 컨벌루션 연산 처리 장치의 구성들을 개략적으로 도시한 블록도이다.
도 1에 도시된 바와 같이, 컨벌루션 연산 처리 장치(10)는 메모리(100), 페치 유닛(200), 연산 유닛(300) 및 커밋 유닛(400)을 포함하도록 구성될 수 있다. 다만, 반드시 도 1에 도시된 바와 같이 컨벌루션 연산 처리 장치(10)가 메모리(100), 페치 유닛(200), 연산 유닛(300) 및 커밋 유닛(400)을 모두 포함하는 형태로 구성되어야만 하는 것은 아니다. 예컨대, 메모리(100), 커밋 유닛(400)은 컨벌루션 연산 처리 장치(10)의 외부에 배치될 수도 있다.
메모리(100)는 본 발명의 실시예에 따른 컨벌루션 연산에 사용되는 데이터를 저장하는 공간으로서, 여기서, 데이터는 3차원 입력의 일종인 텐서 형태의 데이터일 수 있다. 메모리(100)는 SRAM과 같은 데이터 메모리 형태로 형성될 수 있으나, 반드시 그러한 것은 아니다. 도 2를 참조하면, 메모리(100)는 기 설정된 읽기 대역폭(Read Bandwidth)(101)을 갖도록 구성될 수 있다.
페치 유닛(200)은 메모리(100)에 저장된 입력 데이터에서 컨벌루션 연산에 필요한 데이터를 읽어와 연산 유닛(300)에 제공한다. 입력 데이터가 텐서인 경우, 페치 유닛(200)은 메모리(100)에 저장되어 있는 텐서를 읽어와 연산 유닛(300)의 형태에 맞춰 연산 유닛(300)에 피드할 수 있다. 이러한 페치 유닛(200)은 메모리(100)로부터 연산 유닛(300)에 하나 이상 구비되는 연산기의 단위 데이터 처리량보다 같거나 많은 데이터를 갖는 데이터군을 순차적으로 읽어와서 연산 유닛(300)에 피드(Feed)할 수 있다. 여기서, 연산기는 일반적인 MAC의 형태로 구성될 수 있다.
연산 유닛(300)은 페치 유닛(200)으로부터 전송 받은 입력 데이터와 필터의 컨벌루션 연산을 처리하여 출력을 형성한다. 연산 유닛(300)은 수행할 연산의 형태에 맞춰(대응되도록) 구성되고, 페치 유닛(200)으로부터 피드되는 데이터를 스트리밍(streaming) 방식으로 처리한다. 연산 유닛(300)은 하나 이상의 연산기를 포함할 수 있다. 이러한 연산기는 곱셈-축적 연산을 수행하는 MAC으로 구성될 수 있으며, 컨벌루션 시퀀서 모듈(250)의 제어에 따라 입력 데이터와 필터의 컨벌루션 연산을 수행할 수 있다.
커밋 유닛(400)은 연산 유닛(300) 으로부터 스트리밍 방식으로 출력되는 연산 결과를 메모리(100)에 저장한다. 커밋 유닛(400)은 연산 유닛(300)에 의해 계산 및 산출된 출력을 다음 연산에서 필요로 하는 형태로 변형하여 메모리(100)에 저장할 수 있다. 다시 말해, 커밋 유닛(400)은 연산 유닛(300)에 의해 계산된 결과 데이터를 기설정된 형태로 변형하여 메모리(100)에 저장할 수 있다.
도 2는 도 1의 컨벌루션 연산 처리 장치의 세부 구성들을 도시한 도면이다. 도 2를 참조하여, 앞서 설명한 메모리(100), 페치 유닛(200), 연산 유닛(300) 및 커밋 유닛(400)에 대하여 더욱 상세하게 설명하도록 한다.
메모리(100)는 본 명세서 상에서 설명되는 데이터 중 적어도 어느 하나 이상의 데이터가 저장되도록 구성될 수 있다. 예컨대, 메모리(100)는 이하에서 설명되는 입력 데이터, 텐서, 출력 데이터, 필터, 연산 유닛의 연산 결과 데이터, 페치 유닛에 사용되는 모든 데이터 등을 저장할 수 있다.
페치 유닛(200)은 메모리(100)로부터 페치 버퍼(220)로 페치(Fetch)할 데이터를 제어하는 페치 시퀀서(210), 메모리(100)에 저장된 데이터가 페치되는 페치 버퍼(220), 페치된 데이터를 컨벌루션 피드 모듈(240)로 전달하는 페치 네트워크(230), 입력 데이터가 피드되는 컨벌루션 피드 모듈(240), 그리고, 컨벌루션 연산을 위해 피드된 입력 데이터를 제어하여 연산 유닛(300)이 연산을 수행하도록 하는 컨벌루션 시퀀서 모듈(250)을 포함한다.
페치 유닛(200)은, 상기 데이터군을 구성하는 데이터 중 적어도 어느 하나 이상의 데이터가 연산 유닛(300)에서 상기 컨벌루션 연산에 여러 번 재사용되도록, 상기 데이터군을 구성하는 데이터들의 처리와 제어를 수행한다.
페치 유닛(200)은 연산 유닛(300)에 포함된 복수개의 MAC들이 각각, 자신의 단위 데이터 처리량에 맞춰 상기 데이터군을 구성하는 데이터와 상기 필터의 컨벌루션 연산을 1회 이상 수행하여 출력 데이터를 생성하도록 할 수 있다.
연산 유닛(300)은 병렬적으로 프로세싱 가능한 다수의 닷 프로덕트 엔진(Dot product engine)(310)을 포함할 수 있으며, 예컨대 256개의 닷 프로덕트 엔진(310)을 포함할 수 있다. 여기서 닷 프로덕트 엔진(310)은 하나 이상의 연산기, 즉 MAC를 포함하도록 구성될 수 있다.
닷 프로덕트 엔진(310)과 관련하여, 페치 유닛(200)은 메모리(100)에서 데이터를 읽어와 연산 유닛(300)의 닷 프로덕트 엔진(310)으로 피드해주는 역할을 수행할 수 있다. 복수의 MAC(예컨대, 32개)을 사용하여 닷 프로덕트를 수행하는 닷 프로덕트 엔진(310)에서 본 명세서에서 설명되는 컨벌루션 연산이 수행될 수 있다.
또한, 메모리(100)는 일차원의 연속적인 메모리 주소공간으로 구성되고, 메모리(100)의 내부 구조는 독립적으로 접근 가능한 슬라이스 구조로 구성될 수 있다. 예컨대, 메모리(100)는 복수개의 데이터 메모리 슬라이스를 구비할 수 있다. 이 때, 슬라이스의 개수는 연산 유닛(300)에 포함되어 있는 닷 프로덕트 엔진(310)의 개수와 동일할 수 있다. 예컨대, 입력 데이터인 텐서는 상기 슬라이스에 분할되어 저장될 수 있다.
컨벌루션 연산 처리 장치(10)는 "폭 x 높이 x 입력 채널"의 형태로 구성되는 입력 데이터와 상기 입력 데이터의 형태에 대응되도록 "K x K x 입력 채널" 혹은 "K x K"(K는 1이상의 정수)의 형태로 형성되는 필터의 컨벌루션 연산을 처리하여, "폭 x 높이 x 출력 채널의 형태"로 구성되는 출력 데이터를 생성하도록 구성될 수 있는데, 설명의 편의를 위해 이하에서는, 입력 데이터가 높이(Height) X 폭(Width) X 채널(Channel)을 갖는 3차원 형태의 텐서인 경우를 예로 든다.
이 경우, 텐서는 채널 방향과 높이 방향으로 슬라이싱되어 메모리(100)에 저장될 수 있다. 예컨대, 16개의 데이터 메모리 슬라이스와 4개의 채널로 구성된 텐서는 각 채널의 높이 방향으로 4개로 분할되고, 16분할된 데이터 각각이 16개의 데이터 메모리 슬라이스에 저장될 수 있다. 연산 유닛(300)의 닷 프로덕트 엔진(310)도 채널과 높이 방향으로 분할되어 출력 액티베이션(Output actcivation)을 생성하도록 곱셈-축적 연산을 수행할 수 있다.
2차원 컨벌루션의 경우, 모든 입력 채널의 값들이 각각의 출력 액티베이션을 계산하는 닷 프로덕트 엔진(310)에 모두 입력되어야 한다. 따라서, 페치 유닛(200)은 채널 방향으로 순서대로 읽은 입력 액티베이션 값들을 브로드캐스트(Broadcast) 방식으로 닷 프로덕트 엔진(310)에 피드한다. 또한, 페치 유닛(200)은 각각의 입력 텐서 슬라이스에서 연산 유닛(300)에 입력되어야할 데이터를 순차적으로 읽기 위해 페치 시퀀서(210)를 사용한다. 페치 시퀀서(210)에 의해 메모리 슬라이스에서 읽힌 각각의 데이터는 페치 유닛(200)의 페치 네트워크(230)를 통해 연산 유닛(300)으로 전달된다.
페치 유닛(200)의 페치 네트워크(230)는 텐서 연산과 텐서 형태에 따라 상이한 구조로 구성될 수 있다. 즉, 페치 네트워크(230)는 연산 유닛(300)에서 필요로 하는 형태의 토폴로지로 소프트웨어에 의해 구성될 수 있다. 또한, 페치 네트워크(230)는 입력 텐서의 형태와 연산 유닛(300)의 형태에 따라 토폴로지를 결정하며, 수행하는 텐서 연산에 따라 Direct, Vertical Broadcast, Channel Broadcast, Vertical Nearest Neighbor 등의 커뮤니케이션 형태를 지원한다.
이와 같이, 페치 유닛(200)은 메모리(100)에서 텐서 슬라이스들을 병렬적으로 읽어서 연산 유닛(300)이 연산할 수 있는 형태로 연산 유닛(300)에 피드하는 역할을 수행할 수 있다. 여기서, 페치 네트워크(230)는 메모리(100)에서 읽은 데이터를 필요로 하는 연산 유닛(300)에 전달하도록 페치 네트워크(230)를 구성하고 매니징하는 페치 네트워크 컨트롤러(도시하지 않음)를 더 포함할 수 있다.
앞서 설명한 바와 같이, 커밋 유닛(400)은 연산 유닛(300)에 의해 계산된 출력 액티베이션을 다음 연산에서 필요로 하는 형태로 변형하여 메모리(100)에 저장할 수 있다.
예컨대, 뉴럴 네트워크에 있어서, 특정 계층 레이어에서의 연산에 따른 출력 액티베이션이 다음 레이어에서의 연산에 사용될 수 있도록, 커밋 유닛(400)은 출력 액티베이션을 메모리에 저장할 수 있다. 또한, 다음 레이어의 텐서 연산에서 필요로 하는 텐서 형태에 따라, 커밋 유닛(400)은 트랜스포즈(Transpose)와 같은 텐서 매니퓰레이션(Tensor manipulation)을 수행하며, 결과물들을 커밋 네트워크(도시하지 않음)를 통해 메모리(100)로 전달하여 저장할 수 있다.
이처럼, 커밋 유닛(400)은 연산 유닛(300)에 의해 텐서 연산이 수행된 후, 출력된 텐서를 원하는 형태로 메모리(100)에 저장한다. 출력 텐서를 원하는 형태로 저장하기 위해, 커밋 유닛(400)은 텐서 트랜스포즈 모듈(도시하지 않음)과 커밋 네트워크 모듈(도시하지 않음) 및 커밋 시퀀서(Commit Sequencer)(410)를 사용하여 텐서 트랜스포즈(Tensor Transpose)를 수행할 수 있다.
또한, 닷 프로덕트 엔진(310)은 MAC을 연산하기 위한 오퍼랜드(Operand, 연산자)로서 페치 유닛(200)으로부터 입력받은 입력 텐서와, 닷 프로덕트 엔진(310)에 위치한 텐서 레지스터 파일로부터 입력받은 레지스터 값, 그리고 어큐뮬레이터(Accumulator)로부터 입력받은 축적 값(Accumulation Value)을 사용한다. 그리고, 연산 결과는 다시 어큐물레이터에 저장되거나, 출력 텐서로 메모리(100)에 저장되기 위해 커밋 유닛(400)으로 전달된다.
본 발명의 실시예에서, 닷 프로덕트 엔진(310)은 웨이트(Weight, 가중치)와 액티베이션의 곱을 일시적 축적(Temporal Accumulation)과 공간적 가중(Spatial Sum)의 조합으로 축적할 수 있다. 예컨대, 닷 프로덕트 엔진(310)은 다수의 어큐물레이터를 갖는 32 열의 MAC과 32-to-1 덧셈 트리(Adder Tree)로 구성될 수 있다. 여기서, 어큐물레이터가 축적 카운트 레지스터(Accumulation Count Register)에 의해 설정된만큼 축적을 수행하여 축적 카운트마다 결과를 덧셈 트리로 전달하는 것에 따라 일시적 축적이 이루어진다. 또한, 덧셈 트리는 공간적 가중 깊이 레지스터(Spatial Sum Depth Register)에 의해 구성되어, 해당 깊이의 덧셈 트리 결과가 아웃풋 버퍼로 출력되도록 할 수 있다.
연산 유닛(300)은 닷 프로덕트 엔진(310) 외에도 레지스터 파일(도시하지 않음)과, 레지스터 인덱서(도시하지 않음), 레지스터 네트워크 모듈(도시하지 않음), 어큐물레이터 인덱서(도시하지 않음)를 더 포함할 수 있다.
레지스터 파일은, 닷 프로덕트 엔진(310)이 MAC 연산 수행할 때 상대적으로 자주 사용 또는 재사용되는 연산자 중 하나를 일시적으로 저장하는 저장 공간이다. 예컨대, 레지스터 파일은 SRAM 형태로 구성될 수 있다.
본 발명의 실시예에 따라 뉴럴 네트워크에서의 컨벌루션 연산을 수행할 때, 액티베이션의 크기가 큰 일반적인 컨벌루션 레이어의 경우 웨이트는 레지스터 파일에 저장되고 액티베이션은 메모리에 저장될 수 있다. 또한, 액티베이션 크기에 비해 웨이트 크기가 더 큰 형태의 완전 연결 레이어(Fully Connected layer)의 경우, 웨이트는 메모리에 저장되고 액티베이션은 레지스터 파일에 저장될 수 있다.
레지스터 인덱서(Register Indexer)는 레지스터 파일에서 닷 프로덕트 엔진(310)으로 피드해야할 레지스터를 지정하며, 시퀀서(Sequencer) 형태로 구현될 수 있다.
레지스터 네트워크 모듈(Register Network Module)은 레지스터 파일에서 레지스터 인덱서에 의해 지정되어 읽힌 레지스터 값을 닷 프로덕트 엔진(310)에 전달한다. 컨벌루션이나 완전 연결 레이어와 같이 연산(Operation)의 종류에 따라 전체 MAC에 단일한 레지스터 값이 브로드캐스트되거나, 혹은 각각의 MAC에 상이한 레지스터의 값들이 각각 전달되어야 할 수 있다. 또한 컨벌루션 연산에 있어서 수평 스트라이드(Horizontal Stride)가 2 이상인 경우, 연산의 수행 방법에 따라 2개 단위로 레지스터 값이 전체 MAC에 브로드캐스트되어야 할 수도 있다. 레지스터 네트워크 모듈은 레지스터들을 전달하는 연결 형태를 소프트웨어에 의해 구성할 수 있도록 한다.
어큐물레이터 인덱서(Accumulator Indexer)는 어큐물레이터에서 MAC으로 피드해야할 어큐물레이터의 인덱스를 지정하며, 시퀀서 형태로 구현될 수 있다.
도 3은 도 1의 페치 유닛의 세부 구성들을 구체적으로 설명하기 위해 도시한 도면이다.
도 3에 도시된 바와 같이, 컨벌루션 피드 모듈(240)은 입력 데이터 큐(241)와 쉬프트 버퍼(242)를 포함할 수 있다.
입력 데이터 큐(241)는 컨벌루션 피드 모듈(240)이 메모리(100)에 저장된 데이터에서 순차적으로 읽어온 데이터군들이 저장되는 공간이다.
쉬프트 버퍼(242)는 입력 데이터 큐(241)에 입력된 데이터군들 중 특정된 하나의 데이터군이 저장되는 공간이며 쉬프트 버퍼(242)에서 데이터의 재사용을 위한 쉬프트(Shift)가 수행된다.
또한, 도 3에 도시된 바와 같이, 컨벌루션 시퀀서 모듈(250)은 반복 시퀀서(251)와 제어 시퀀서(252)를 포함할 수 있다.
반복 시퀀서(251)는 입력 데이터 큐(241)에 저장된 데이터군들이 순차적으로 쉬프트 버퍼(242)로 전송되도록 제어한다. 또한, 반복 시퀀서(251)는 쉬프트 버퍼(242)에 저장된 데이터군의 데이터열들이 연산 유닛(300)으로 전송되도록 제어하여, 연산기가 필터와 데이터열들의 컨벌루션 연산이 수행하도록 제어한다.
예컨대, 반복 시퀀서(251)는 쉬프터 버퍼(242)를 제어하여, 쉬프트 버퍼(242)가 쉬프트 또는 버퍼를 수행하도록 제어할 수 있다. 이를 통해, 반복 시퀀서(251)는 입력 데이터 큐(241)에 저장된 데이터군을 구성하는 데이터 중 적어도 어느 하나 이상의 데이터가 컨벌루션 연산에 재사용되도록 제어한다.
또한, 반복 시퀀서(251)는 자신이 제어하는 데이터 처리가 끝나면, 제어 시퀀서(252)에게 그 사실을 통지할 수 있다.
제어 시퀀서(252)는 반복 시퀀서(251)로부터 입력 데이터 큐(241)에 저장된 데이터군들에 대한 제어 완료 통지를 받은 경우, 연산기의 단위 데이터 처리량보다 많은 데이터를 갖고 입력 데이터 큐(241)에 저장된 데이터군들과 상이한 데이터군들을 입력 데이터가 저장된 메모리(100)에서 순차적으로 읽어와 입력 데이터 큐(241)에 저장하도록 제어한다. 또한, 상기 상이한 데이터군들에 대한 반복 시퀀서(252)의 제어가 실행되도록 제어한다.
이를 통해, 제어 시퀀서(252)는 새로운 데이터군들에 대한 반복 시퀀서(251)의 제어가 실행되도록 제어한다. 즉, 제어 시퀀서(252)의 제어에 의해 반복 시퀀서(251)는, 반복적으로 데이터군들의 데이터가 재사용되도록 하는 컨벌루션 연산을 제어한다.
예컨대, 제어 시퀀서(252)는 반복 시퀀서(251)의 제어가 실행되기 위해 필요한 구성들을 제어하여 반복 시퀀서(25)가 수행하는 절차가 반복되도록 할 수 있다. 이에 따라, 반복 시퀀서(25)가 주어진 절차를 실행한 후, 제어 시퀀서(252)는 반복 시퀀서(25)가 그 다음 절차를 실행하여 동일한 절차를 반복하도록 제어할 수 있다.
도 4는 컨벌루션 연산 처리 장치(10)를 이용하여 컨벌루션 연산을 수행하는 방법을 설명하기 위해 도시한 개념도이다. 앞서 설명한 내용과 도 4를 토대로, 컨벌루션 연산 처리 장치(10)를 이용하여 입력 데이터와 필터를 컨벌루션하고 출력 데이터를 생성하는 개략적인 과정을 설명하도록 한다.
도 4를 참조하면, 본 명세서상에서 설명되는 데이터군은 입력 액티베이션(401)의 3(높이) X 8(폭)의 형태를 갖는 데이터 집단(401a) 각각을 의미하고, 402는 읽어온 데이터군 각각을 입력 데이터 큐에 입력하여 완성한 모습을 나타낸다. 또한, 입력 데이터와 컨벌루션 연산되는 필터(403)는 복수개의 단위 웨이트(weight, 가중치)를 갖는 다양한 행렬 형태로 구성될 수 있다.
도 3 및 도 4를 참조하면, 입력 데이터와 필터를 컨벌루션하여 출력 데이터를 생성하기 위해, 먼저, 컨벌루션 시퀀서 모듈(250)의 제어에 의해, 컨벌루션 피드 모듈(240)은 메모리(100)에 저장된 입력 데이터에서 연산 유닛(300)의 MAC의 단위 데이터 처리량보다 많은 데이터를 갖는 데이터군(401)을 순차적으로 읽어와서 입력 데이터 큐(402)에 저장한다.
다음 컨벌루션 시퀀서 모듈(250)의 제어에 의해, 컨벌루션 피드 모듈(240)은 입력 데이터 큐(402)에 저장된 데이터군들 중 특정된 하나의 데이터군을 쉬프트 버퍼(242)로 전송한다.
다음, 컨벌루션 시퀀서 모듈(250)은 상기 연산기의 단위 데이터 처리량과 동일한 데이터양을 갖는 데이터열이 쉬프트 버퍼(242)에서 연산 유닛(300)으로 전송되도록 제어한다.
다음, 컨벌루션 시퀀서 모듈(250)은 데이터 재사용을 위해 상기 연산기의 단위 데이터 처리량과 동일한 데이터양을 갖되 데이터 쉬프트로 인해 상기 데이터열과 약간 상이한 다른 데이터열이 쉬프트 버퍼(242)에서 연산 유닛(300)으로 전송되도록 제어한다.
상기 데이터열과 상기 다른 데이터열은 상기 특정된 하나의 데이터군을 구성하는 데이터의 순차적인 일부에 해당한다. 다만, 상기 데이터열과 상기 다른 데이터열은 상술한 데이터 쉬프트로 인해 서로 동일한 데이터 부분과 상이한 데이터 부분을 갖도록 구성된다.
다음, 연산 유닛(300)은, 상기 연산기를 이용하여, 상기 특정된 하나의 데이터군을 구성하는 데이터 중 적어도 어느 하나 이상의 데이터가 재사용되도록 쉬프트 버퍼(242)로부터 전송 받은 데이터열들 각각과 상기 필터의 컨벌루션 연산을 수행한다.
상기한 과정에서, 상기 데이터열이 갖는 데이터양은 연산기의 단위 데이터 처리량인UnitSize(#MAC)과 동일하고, 데이터군이 갖는 데이터양은 상기 연산기의 단위 데이터 처리량인UnitSize(#MAC)에 K/2의 최대 정수값인floor(K/2)를 두 번 더한 식 {floor(K/2)+UnitSize(#MAC)+floor(K/2)} 혹은 그 이상으로에 의해 정의될 수 있다. 즉, 데이터군이 갖는 데이터양은 페치 유닛과 연산 유닛 등의 하드웨어 구성에 따라 {floor(K/2)+UnitSize(#MAC)+floor(K/2)}이거나 또는 그 이상이 될 수 있다.
이 때, 쉬프트 버퍼(242)에서 연산 유닛(300)으로 전송되는 데이터열의 개수는 K개이고, 연산 유닛(300)은 쉬프트 버퍼(242)로부터 전송 받은 데이터열 하나당 상기 필터와 K회의 컨벌루션 연산을 수행한다.
다시 말해, 컨벌루션 시퀀서 모듈(250)에 의해, 상기 특정된 하나의 데이터군에 대하여 쉬프트 버퍼(242)에서 연산 유닛(300)으로 전송되도록 제어되는 데이터열의 개수는 K개이다. 또한, 연산 유닛(300)은 쉬프트 버퍼(242)로부터 전송 받은 데이터열 하나당 상기 필터와 K회의 컨벌루션 연산이 수행한다. 따라서, 상기 특정된 하나의 데이터군의 데이터 사용 횟수는 K2회가 된다.
도 5 내지 도 17은 본 발명의 일 실시예에 따라 컨벌루션 피드 모듈(240)과 컨벌루션 시퀀서 모듈(250)에 의해 데이터가 재사용되도록 컨벌루션 연산 처리가 수행되는 세부 과정들을 설명하기 위해 도시한 도면들이다. 도 5 내지 도 17에 도시된 예와 같이, 상술한 페치 유닛(200)과 연산 유닛(300)이 10개의 단위 데이터를 포함하는 데이터군과 3 X 3 형태의 필터를 이용하여, 8개의 단위 데이터가 포함된 데이터열과 해당 필터를 컨벌루션하는 과정을 순차적으로 상세하게 설명하도록 한다.
본 예에서, 연산기의 단위 데이터 처리량에 해당하는 어큐물레이터들(Accumulators)(505) 각각의 폭은 입력 데이터 큐(501)의 폭보다 좌우로 한칸씩 감소한 형태인데, 이는 컨벌루션 연산에 따른 출력값이 필터(503)의 크기에 따라 감소하기 때문이다.
앞서 설명한 바와 같이, 본 예에서, 데이터열이 갖는 데이터양은 상기 연산기의 단위 데이터 처리량인UnitSize(#MAC)과 동일하고, 데이터군이 갖는 데이터양은 상기 연산기의 단위 데이터 처리량인UnitSize(#MAC)에 K/2의 최대 정수값인floor(K/2)를 두 번 더한 식 {floor(K/2)+UnitSize(#MAC)+floor(K/2)} 혹은 그 이상으로 정의된다.
여기서 K는 상기 필터의 형태 K x K에 따라 결정되는 상수로서 1이상의 정수이다. 따라서, 본 예에서, 데이터열은 8개의 단위 데이터를 포함할 수 있도록 구성되므로, 데이터군은 데이터열의 좌우로floor(3/2) 만큼씩 데이터가 추가로 구성된다 결국, 본 예에서 데이터열이 갖는 데이터양은 8이고, K는 3이므로, 데이터군이 갖는 데이터양은 "1 + 8 +1 = 10"이 된다.
또한 본 예에서, 이전에 이미 acc0와 acc1 과 같이, 일부 반복 수행된 동작이 있었음을 가정하였는 바, acc0과 acc1의 count가 각각 6, 3 인 상태로 가정한다. 또한, 연산 유닛(300)은 복수개의 MAC(MACs)을 포함하고 있으나 설명의 편의를 위해 단일의 MAC에서 수행되는 컨벌루션 연산만을 설명하도록 한다.
도 5를 참조하면, 먼저, 컨벌루션 피드 모듈(240)은 컨벌루션 시퀀서 모듈(250)의 제어에 의해, 메모리(100)에 저장된 상기 입력 텐서의 데이터에서 MACs(504)의 단위 데이터 처리량보다 많은 데이터를 갖는 데이터군들을 순차적으로 읽어와서 입력 데이터 큐(501)에 저장한다.
다음, 컨벌루션 피드 모듈(240)은 컨벌루션 시퀀서 모듈(250)의 제어에 의해, 입력 데이터 큐(501)에서 기 설정된 순서에 따라 단위 데이터 a0,0, a0,1, … , a0,9를 포함하는 제일 아래층의 데이터군을 팝하여 쉬프트 버퍼(502)로 전송하여 저장한다. 여기서, 입력 데이터 큐(501)의 빈 공간이 없는 경우 제일 아래층의 데이터군이 팝되어 쉬프트 버퍼(502)로 전송될 수 있다.
도 6을 참조하면, 컨벌루션 피드 모듈(240)은 컨벌루션 시퀀서 모듈(250)의 제어에 의해, 쉬프트 버퍼(502)와 MAC (504)의 정렬(align)을 맞추기 위해, 쉬프트 버퍼(502)에 포함된 단위 데이터들을 오른쪽으로 1 (= floor(K/2) = floor(3/2)) 만큼 쉬프트한다. 이 과정은 쉬프트 버퍼(502)와 MACs(504)의 정렬을 맞추는 과정이 필요치 않은 경우 생략될 수 있다.
도 5 및 도 6에서는 아직 데이터군에 포함된 단위 데이터들이 컨벌루션 연산에 사용되지 않은 경우이므로, 데이터 사용 횟수는 0이 된다.
이어서, 도 7을 참조하면, 컨벌루션 시퀀서 모듈(250)은 연산에 필요한 웨이트에 해당하는 필터값(w2,0)을 MACs(504)에 제공하고, 쉬프트 버퍼(502)로부터 MACs(504)의 단위 데이터 처리량에 해당하는 데이터열을 MACs(504)에 제공하도록 컨벌루션 피드 모듈(240)을 제어한다. 그러면, MACs(504)는 해당 필터값 w2,0과 해당 데이터열에 포함된a0,0, …, a0,7을 곱한 뒤, 지정된 acc0 와 합연산을 수행하여 그 결과를 acc0에 저장한다. 여기서 필터값은 레지스트 인덱서에 의해 결정될 수 있고, acc0은 어큐물레이터 인덱서에 의해 결정될 수 있다.
이와 같은 연산이 수행되고 나면 쉬프트 버퍼(502)에 있는 데이터군이 컨벌루션 연산에 사용된 횟수는 1회가 된다. 또한, acc0에 누적하여 합한 횟수에 해당하는 count가 1 증가하여 7이 된다.
이어서, 도 8을 참조하면, 도 7을 참조하여 설명한 바와 유사하게, 컨벌루션 시퀀서 모듈(250)은 필터값(w1,0)을 MACs(504)에 제공하고, 쉬프트 버퍼(502)로부터 MACs(504)의 단위 데이터 처리량에 해당하는 데이터열을 MACs(504)에 제공하도록 컨벌루션 피드 모듈(240)을 제어한다. 그러면, MACs(504)는 해당 필터값 w1,0과 해당 데이터열에 포함된a0,0, …, a0,7을 곱한 뒤, 지정된 acc1 와 합연산을 수행하여 그 결과를 acc1에 저장한다. 여기서도 마찬가지로 필터값은 레지스트 인덱서에 의해 결정될 수 있고, acc1은 어큐물레이터 인덱서에 의해 결정될 수 있다.
이와 같은 연산이 수행되고 나면 쉬프트 버퍼(502)에 있는 데이터군이 컨벌루션 연산에 사용된 횟수는 1 증가하여 2회가 된다. 또한, acc1에 누적하여 합한 횟수에 해당하는 count가 1 증가하여 4가 된다.
복수개의 어큐물레이터를 컨벌루션 연산에 사용하는 이유는 컨벌루션 연산에서 필터의 높이방향으로 데이터군의 데이터 재사용을 하기 위함이다. 본 예에서 필터(503)의 높이인 3 만큼의 어큐물레이터를 로테이션 방식으로 컨벌루션 연산에 사용함으로써, 데이터군에 포함된 데이터를 해당 필터(503)의 필터값들에 대해 완전한 재사용이 가능하도록 한다.
이어서, 도 9를 참조하면, 컨벌루션 시퀀서 모듈(250)은 필터값(w0,0)을 MACs(504)에 제공하고, 쉬프트 버퍼(502)로부터 MACs(504)의 단위 데이터 처리량에 해당하는 데이터열을 MACs(504)에 제공하도록 컨벌루션 피드 모듈(240)을 제어한다. 그러면, MACs(504)는 해당 필터값 w0,0과 해당 데이터열에 포함된a0,0, …, a0,7을 곱한 뒤, 지정된 acc2 와 합연산을 수행하여 acc2에 그 결과를 저장한다.
이와 같은 연산이 수행되고 나면 쉬프트 버퍼(502)에 있는 데이터군이 컨벌루션 연산에 사용된 횟수는 1 증가하여 3회가 된다. 또한, acc2에 누적하여 합한 횟수에 해당하는 count가 1 증가하여 1이 된다.
이어서, 도 10을 참조하면, 어큐물레이터 3개의 카운트가 각각 1씩 증가하여 쉬프트 버퍼(502)로부터 MACs(504)에 제공된 첫번째 데이터열(a0,0, …, a0,7을 포함)과 필터(503)의 연산이 종료된 후, 첫번째 데이터열과 상이한 단위 데이터들을 포함하는 두번째 데이터열이 MACs(504)에 제공된다. 즉, 컨벌루션 시퀀서 모듈(250)의 제어에 의해 쉬프트 버퍼(502)는, 저장된 데이터군(a0,0 ,,, a0,9)을 왼쪽으로 한 칸 쉬프트 한다. 이는 폭(Width) 방향으로 데이터군의 데이터 재사용을 하기 위함이다.
이어서, 도 11을 참조하면, 컨벌루션 시퀀서 모듈(250)은 필터값(w2,1)을 MACs(504)에 제공하고, 쉬프트 버퍼(502)로부터 MACs(504)의 단위 데이터 처리량에 해당하는 데이터열을 MACs(504)에 제공하도록 컨벌루션 피드 모듈(240)을 제어한다. 그러면, MACs(504)는 해당 필터값 w2,1과 해당 데이터열에 포함된a0,1, …, a0,8을 곱한 뒤, 지정된 acc0 와 합연산을 수행하여 그 결과를 acc0에 저장한다.
이에 따라, 쉬프트 버퍼(502)에 있는 데이터군이 컨벌루션 연산에 사용된 횟수는 1 증가하여 4회가 되고, acc0에 누적하여 합한 횟수에 해당하는 count가 1 증가하여 8이 된다.
이어서, 도 12를 참조하면, 컨벌루션 시퀀서 모듈(250)은 필터값(w1,1)을 MACs(504)에 제공하고, 쉬프트 버퍼(502)로부터 MACs(504)의 단위 데이터 처리량에 해당하는 데이터열을 MACs(504)에 제공하도록 컨벌루션 피드 모듈(240)을 제어한다. 그러면, MACs(504)는 해당 필터값 w1,1과 해당 데이터열에 포함된a0,1, …, a0,8을 곱한 뒤, 지정된 acc1 와 합연산을 수행하여 그 결과를 acc1에 저장한다.
이에 따라, 쉬프트 버퍼(502)에 있는 데이터군이 컨벌루션 연산에 사용된 횟수는 1 증가하여5회가 되고, acc1에 누적하여 합한 횟수에 해당하는 count가 1 증가하여 5가 된다.
이어서, 도 13을 참조하면, 컨벌루션 시퀀서 모듈(250)은 필터값(w0,1)을 MACs(504)에 제공하고, 쉬프트 버퍼(502)로부터 MACs(504)의 단위 데이터 처리량에 해당하는 데이터열을 MACs(504)에 제공하도록 컨벌루션 피드 모듈(240)을 제어한다. 그러면, MACs(504)는 해당 필터값 w0,1과 해당 데이터열에 포함된a0,1, …, a0,8을 곱한 뒤, 지정된 acc2 와 합연산을 수행하여 acc2에 저장한다.
이에 따라, 쉬프트 버퍼(502)에 있는 데이터군이 컨벌루션 연산에 사용된 횟수는 1 증가하여6회가 되고, acc2에 누적하여 합한 횟수에 해당하는 count가 1 증가하여 2가 된다.
이어서, 도 14를 참조하면, 어큐물레이터 3개의 카운트가 각각 1씩 증가하여 쉬프트 버퍼(502)로부터 MACs(504)에 제공된 두번째 데이터열(a0,1, …, a0,0을 포함)과 필터(503)의 연산이 종료된 후, 첫번째 및 두번째 데이터열과 상이한 단위 데이터들을 포함하는 세번째 데이터열이 MACs(504)에 제공된다. 이를 위해, 컨벌루션 시퀀서 모듈(250)의 제어에 따라 쉬프트 버퍼(502)는, 저장된 데이터군(a0,0 ,,, a0,9)을 왼쪽으로 한 칸 쉬프트 한다.
이어서, 도 15를 참조하면, 컨벌루션 시퀀서 모듈(250)은 필터값(w2,2)을 MACs(504)에 제공하고, 쉬프트 버퍼(502)로부터 MACs(504)의 단위 데이터 처리량에 해당하는 데이터열을 MACs(504)에 제공하도록 컨벌루션 피드 모듈(240)을 제어한다. 그러면, MACs(504)는 해당 필터값 w2,2과 해당 데이터열에 포함된a0,2, …, a0,9을 곱한 뒤, 지정된 acc0 와 합연산을 수행하여 그 결과를 acc0에 저장한다.
이에 따라, 쉬프트 버퍼(502)에 있는 데이터군이 컨벌루션 연산에 사용된 횟수는 1 증가하여7회가 되고, acc0에 누적하여 합한 횟수에 해당하는 count가 1 증가하여 9가 된다.
이어서, 도 16을 참조하면, 컨벌루션 시퀀서 모듈(250)은 필터값(w1,2)을 MACs(504)에 제공하고, 쉬프트 버퍼(502)로부터 MACs(504)의 단위 데이터 처리량에 해당하는 데이터열을 MACs(504)에 제공하도록 컨벌루션 피드 모듈(240)을 제어한다. 그러면, MACs(504)는 해당 필터값 w1,2과 해당 데이터열에 포함된a0,2, …, a0,9을 곱한 뒤, 지정된 acc1 와 합연산을 수행하여 그 결과를 acc1에 저장한다.
이에 따라, 쉬프트 버퍼(502)에 있는 데이터군이 컨벌루션 연산에 사용된 횟수는 1 증가하여8회가 되고, acc1에 누적하여 합한 횟수에 해당하는 count가 1 증가하여 6 이 된다.
이어서, 도 17을 참조하면, 컨벌루션 시퀀서 모듈(250)은 필터값(w0,2)을 MACs(504)에 제공하고, 쉬프트 버퍼(502)로부터 MACs(504)의 단위 데이터 처리량에 해당하는 데이터열을 MACs(504)에 제공하도록 컨벌루션 피드 모듈(240)을 제어한다. 그러면, MACs(504)는 해당 필터값 w0,2과 해당 데이터열에 포함된a0,2, …, a0,9을 곱한 뒤, 지정된 acc2와 합연산을 수행하여 그 결과를 acc2에 저장한다.
이에 따라, 쉬프트 버퍼(502)에 있는 데이터군이 컨벌루션 연산에 사용된 횟수는 1 증가하여9회가 되고, acc2에 누적하여 합한 횟수에 해당하는 count가 1 증가하여 3이 된다.
이와 같이, 필터(503)의 크기 및 형태에 따라, 데이터군의 데이터 사용횟수 및 재사용횟수가 정해질 수 있다. 위 예에서, 필터(503)가 3 X 3의 형태를 가지므로(K=3), 쉬프트 버퍼(502)가 연산 유닛의 MACs(504)으로 전송하는 동일한 데이터열의 개수는 K값에 따라 3개로 정의되고, MACs(504)은 쉬프트 버퍼(502)로부터 전송 받은 데이터열 하나당 필터(503)와 K값에 따라 3회의 컨벌루션 연산을 수행한다. 또한, 쉬프트 버퍼(502)에서 수행되는 쉬프트 횟수는 K-1에 따라 2회로 정의된다.
즉, 위 예에서, 하나의 데이터군이 쉬프트되어 상기 3회의 컨벌루션 연산 절차가 두 번 더 수행된다. 이에 따라, 쉬프트 버퍼(502)에 저장된 하나의 데이터군에 대하여 총 3 X 3 = 9번의 데이터 사용(8번의 데이터 재사용)이 이루어진다.
도 18은 본 발명의 일 실시예에 따른 컨벌루션 연산 처리 방법의 절차들을 나타낸 흐름도이고, 도 19는 도 18에 도시된 페치 단계와 연산 단계의 세부 절차들을 설명하기 위해 도시한 흐름도이다.
본 실시예에 따른 컨벌루션 연산 처리 방법은, 앞서 도 1 내지 도 17을 참조하여 설명한 컨벌루션 연산 처리 장치(10)를 이용한 방법으로서, 상술한 설명과 중복되는 내용은 이하에서 생략하도록 한다.
도 18을 참조하면, 본 실시예에 따른 컨벌루션 연산 처리 방법은, 뉴럴 네트워크에 있어서, 폭 x 높이 x 입력 채널의 형태로 구성되는 입력 데이터와 상기 입력 데이터의 형태에 대응되도록 K x K x 입력 채널 혹은 K x K(K는 1이상의 정수)의 형태로 형성되는 필터의 컨벌루션 연산을 처리하여, 폭 x 높이 x 출력 채널의 형태로 구성되는 출력 데이터를 생성하도록 구성되는 컨벌루션 연산 처리 장치를 이용한 컨벌루션 연산 처리 방법으로서, 페치 단계(S1810)와 연산 단계(S1820) 단계를 포함한다.
또한, 본 실시예에 따른 컨벌루션 연산 처리 방법은, 페치 단계(S1810)에 이전에 상기 컨벌루션 연산에 사용되는 데이터를 메모리에 저장하는 단계와, 상기 연산 단계(S1820) 이후에 이루어지는 커밋 단계(S1830)를 더 포함할 수 있다.
페치 단계(S1810)는 상기 컨벌루션 연산 처리 장치의 페치 유닛이, 상기 입력 데이터가 저장된 메모리에서 연산기의 단위 데이터 처리량보다 많은 데이터를 갖는 데이터군을 순차적으로 읽어오고 상기 데이터군을 구성하는 데이터 중 적어도 어느 하나 이상의 데이터가 상기 컨벌루션 연산에 재사용되도록 상기 데이터군을 상기 연산기로 제공하는 단계이다. 여기서, 페치 유닛은 상술한 바와 같이, 입력 데이터 큐와 쉬프트 버퍼를 포함하는 컨벌루션 피드 모듈, 그리고, 반복 시퀀서와 제어 시퀀서를 포함하는 컨벌루션 시퀀서 모듈을 포함할 수 있다.
연산 단계(S1820)는 상기 컨벌루션 연산 처리 장치의 연산 유닛이, 하나 이상의 상기 연산기를 이용하여 상기 단위 데이터 처리량에 맞춰 상기 데이터군을 구성하는 데이터와 상기 필터의 컨벌루션 연산을 복수회 수행하는 단계이다. 여기서 연산 유닛은 상술한 바와 같이 복수의 연산기를 포함할 수 있다.
커밋 단계(S1830)는 상기 컨벌루션 연산 처리 장치의 커밋 유닛이, 상기 연산 유닛에 의해 계산된 결과 데이터를 기설정된 형태로 변형하여 상기 메모리에 저장하는 단계이다.
도 19를 참조하면, 페치 단계(S1810)는, 상기 컨벌루션 시퀀서 모듈의 제어에 의해 상기 컨벌루션 피드 모듈이, 상기 입력 데이터가 저장된 메모리에서 상기 연산기의 단위 데이터 처리량보다 많은 데이터를 갖는 상기 데이터군을 순차적으로 읽어와 상기 입력 데이터 큐에 저장하는 단계(S1910), 그리고, 상기 컨벌루션 시퀀서 모듈의 제어에 의해 상기 컨벌루션 피드 모듈이, 상기 입력 데이터 큐에 저장된 데이터군들 중 특정된 하나의 데이터군을 상기 쉬프트 버퍼로 전송하는 단계(S1920)를 포함할 수 있다.
나아가, 페치 단계(S1810)는, 상기 컨벌루션 시퀀서 모듈이, 상기 연산기의 단위 데이터 처리량과 동일한 데이터양을 갖는 데이터열이 상기 쉬프트 버퍼에서 상기 연산 유닛으로 전송되도록 제어하는 단계(S1930), 그리고, 상기 컨벌루션 시퀀서 모듈이, 데이터 재사용을 위해 상기 연산기의 단위 데이터 처리량과 동일한 데이터양을 갖되 데이터 쉬프트로 인해 상기 데이터열과 약간 상이한 다른 데이터열이 상기 쉬프트 버퍼에서 상기 연산 유닛으로 전송되도록 제어하는 단계(S1940)를 더 포함할 수 있다.
여기서, 상기 데이터열과 상기 다른 데이터열은 상기 특정된 하나의 데이터군을 구성하는 데이터의 순차적인 일부에 해당하고, 데이터 쉬프트로 인해 서로 동일한 데이터 부분과 상이한 데이터 부분을 갖도록 구성될 수 있다.
페치 단계(S1810)의 S1940 단계에 이어서 진행되는 연산 단계는, 상기 연산 유닛이, 상기 연산기를 이용하여, 상기 특정된 하나의 데이터군을 구성하는 데이터 중 적어도 어느 하나 이상의 데이터가 재사용되도록, 상기 쉬프트 버퍼로부터 전송 받은 데이터열들 각각과 상기 필터의 컨벌루션 연산을 수행하는 단계(S1950)일 수 있다.
도 20은 본 발명의 컨벌루션 시퀀서 모듈이 수행하는 세부 절차들을 더욱 구체적으로 설명하기 위해 도시한 도면이다.
도 20을 참조하면, 페치 단계(S1810)는, 상기 반복 시퀀서가, 상기 입력 데이터 큐에 저장된 데이터군들이 순차적으로 상기 쉬프트 버퍼로 전송되도록 제어하는 단계(S2010), 상기 반복 시퀀서가, 상기 쉬프트 버퍼에 저장된 데이터군의 데이터열들이 상기 연산 유닛으로 전송되도록 제어하는 단계(S2020), 그리고, 상기 반복 시퀀서가, 상기 입력 데이터 큐에 저장된 데이터군을 구성하는 데이터 중 적어도 어느 하나 이상의 데이터가 상기 컨벌루션 연산에 재사용되도록 제어하는 단계(S2030)를 포함할 수 있다.
또한, 본 발명의 실시예에 있어서, 상기 반복 시퀀서로부터 상기 입력 데이터 큐에 저장된 데이터군들에 대한 제어 완료 통지를 받은 경우, 상기 제어 시퀀서가, 상기 연산기의 단위 데이터 처리량보다 많은 데이터를 갖고 상기 입력 데이터 큐에 저장된 데이터군들과 상이한 데이터군들을 상기 입력 데이터가 저장된 메모리에서 순차적으로 읽어와 상기 입력 데이터 큐에 저장하도록 제어하는 단계(S2040), 그리고, 상기 제어 시퀀서가, 상기 상이한 데이터군들에 대한 상기 반복 시퀀서의 제어가 실행되도록 제어하는 단계(S2050)가 더 수행될 수 있다.
본 실시예에 있어서, 상기 데이터열이 갖는 데이터양은 상기 연산기의 단위 데이터 처리량인UnitSize(#MAC)과 동일할 수 있다. 또한, 상기 데이터군이 갖는 데이터양은 상기 연산기의 단위 데이터 처리량인UnitSize(#MAC)에 K/2의 최대 정수값인floor(K/2)를 두 번 더한 식 {floor(K/2)+UnitSize(#MAC)+floor(K/2)} 혹은 그 이상으로 정의될 수 있다. 즉, 데이터군이 갖는 데이터양은 페치 유닛과 연산 유닛 등의 하드웨어 구성에 따라 {floor(K/2)+UnitSize(#MAC)+floor(K/2)}이거나 또는 그 이상이 될 수 있다. 여기서 K는 상기 필터의 형태 K x K에 따라 결정되는 상수로서 1이상의 정수일 수 있다. 마찬가지로, 상기 다른 데이터열은 상기 쉬프트 버퍼가 전송 받은 데이터군에서 상기 데이터열로부터 기 설정된 기준에 따라 쉬프트된 영역의 데이터열일 수 있다.
본 실시예에 있어서, 상기 컨벌루션 시퀀서 모듈에 의해, 상기 특정된 하나의 데이터군에 대하여 상기 쉬프트 버퍼에서 상기 연산 유닛으로 전송되도록 제어되는 데이터열의 개수는 K개일 수 있다. 또한, 상기 연산기에 의해, 상기 쉬프트 버퍼로부터 전송 받은 데이터열 하나당 상기 필터와 K회의 컨벌루션 연산이 수행될 수 있다. 이에 따라, 상기 특정된 하나의 데이터군의 데이터 사용 횟수는 K2회가 될 수 있다.
상술한 본 발명의 설명은 예시를 위한 것이며, 본 발명이 속하는 기술분야의 통상의 지식을 가진 자는 본 발명의 기술적 사상이나 필수적인 특징을 변경하지 않고서 다른 구체적인 형태로 쉽게 변형이 가능하다는 것을 이해할 수 있을 것이다. 그러므로 이상에서 기술한 실시예들은 모든 면에서 예시적인 것이며 한정적이 아닌 것으로 이해해야만 한다. 본 발명의 범위는 후술하는 특허청구범위에 의하여 나타내어지며, 특허청구범위의 의미 및 범위 그리고 그 균등 개념으로부터 도출되는 모든 변경 또는 변형된 형태가 본 발명의 범위에 포함되는 것으로 해석되어야 한다.

Claims (20)

  1. 뉴럴 네트워크에 있어서, 폭 x 높이 x 입력 채널의 형태로 구성되는 입력 데이터와 상기 입력 데이터의 형태에 대응되도록 K x K x 입력 채널 또는 K x K(K는 1이상의 정수)의 형태로 형성되는 필터의 컨벌루션 연산을 처리하여, 폭 x 높이 x 출력 채널의 형태로 구성되는 출력 데이터를 생성하도록 구성되는 컨벌루션 연산 처리 장치로서,
    상기 입력 데이터가 저장된 메모리에서 연산기의 단위 데이터 처리량보다 많은 데이터를 갖는 데이터군을 순차적으로 읽어오고 상기 데이터군을 구성하는 데이터 중 적어도 어느 하나 이상의 데이터가 상기 컨벌루션 연산에 재사용되도록 상기 데이터군을 상기 연산기로 제공하는 페치 유닛; 및
    하나 이상의 상기 연산기를 이용하여 상기 단위 데이터 처리량에 맞춰 상기 데이터군을 구성하는 데이터와 상기 필터의 컨벌루션 연산을 복수회 수행하는 연산 유닛;을 포함하고
    상기 페치 유닛은, 입력 데이터 큐와 쉬프트 버퍼를 포함하는 컨벌루션 피드 모듈 및 컨벌루션 시퀀서 모듈을 포함하고,
    상기 컨벌루션 피드 모듈은, 상기 컨벌루션 시퀀서 모듈의 제어에 의해, 상기 입력 데이터가 저장된 메모리에서 상기 연산기의 단위 데이터 처리량보다 많은 데이터를 갖는 상기 데이터군을 순차적으로 읽어와 상기 입력 데이터 큐에 저장하고, 상기 입력 데이터 큐에 저장된 데이터군들 중 특정된 하나의 데이터군을 상기 쉬프트 버퍼로 전송하고,
    상기 컨벌루션 시퀀서 모듈은,
    상기 연산기의 단위 데이터 처리량과 동일한 데이터양을 갖는 데이터열이 상기 쉬프트 버퍼에서 상기 연산 유닛으로 전송되도록 제어하고,
    상기 연산기의 단위 데이터 처리량과 동일한 데이터양을 갖되 상기 데이터열과 상이한 다른 데이터열이 상기 쉬프트 버퍼에서 상기 연산 유닛으로 전송되도록 제어하며,
    상기 데이터열과 상기 다른 데이터열은 상기 특정된 하나의 데이터군을 구성하는 데이터의 순차적인 일부에 해당하고, 서로 동일한 데이터 부분과 상이한 데이터 부분을 갖도록 구성되고,
    상기 데이터열이 갖는 데이터양은 상기 연산기의 단위 데이터 처리량인UnitSize(#MAC)과 동일하고,
    상기 데이터군이 갖는 데이터양은 상기 연산기의 단위 데이터 처리량인UnitSize(#MAC)에 K/2의 최대 정수값인floor(K/2)를 두 번 더한 식 {floor(K/2)+UnitSize(#MAC)+floor(K/2)} 혹은 그 이상으로 정의되며,
    여기서 K는 상기 필터의 형태 K x K x 입력채널 혹은 K x K에 따라 결정되는 상수로서 1이상의 정수인 것을 특징으로 하는 컨벌루션 연산 처리 장치.
  2. 제1항에 있어서,
    상기 페치 유닛은, 입력 데이터 큐와 쉬프트 버퍼를 포함하는 컨벌루션 피드 모듈 및 컨벌루션 시퀀서 모듈을 포함하고,
    상기 컨벌루션 피드 모듈은, 상기 컨벌루션 시퀀서 모듈의 제어에 의해, 상기 입력 데이터가 저장된 메모리에서 상기 연산기의 단위 데이터 처리량보다 많은 데이터를 갖는 상기 데이터군을 순차적으로 읽어와 상기 입력 데이터 큐에 저장하고, 상기 입력 데이터 큐에 저장된 데이터군들 중 특정된 하나의 데이터군을 상기 쉬프트 버퍼로 전송하는 것을 특징으로 하는 컨벌루션 연산 처리 장치.
  3. 삭제
  4. 제1항에 있어서,
    상기 연산 유닛은, 연산기를 이용하여, 상기 특정된 하나의 데이터군을 구성하는 데이터 중 적어도 어느 하나 이상의 데이터가 재사용되도록, 상기 쉬프트 버퍼로부터 전송 받은 데이터열들 각각과 상기 필터의 컨벌루션 연산을 수행하는 것을 특징으로 하는 컨벌루션 연산 처리 장치.
  5. 제1항에 있어서,
    상기 컨벌루션 시퀀서 모듈은,
    상기 입력 데이터 큐에 저장된 데이터군들이 순차적으로 상기 쉬프트 버퍼로 전송되도록 제어하고, 상기 쉬프트 버퍼에 저장된 데이터군의 데이터열들이 상기 연산 유닛으로 전송되도록 제어하여, 상기 입력 데이터 큐에 저장된 데이터군을 구성하는 데이터 중 적어도 어느 하나 이상의 데이터가 상기 컨벌루션 연산에 재사용되도록 제어하는 반복 시퀀서; 및
    상기 반복 시퀀서로부터 상기 입력 데이터 큐에 저장된 데이터군들에 대한 제어 완료 통지를 받은 경우, 상기 연산기의 단위 데이터 처리량보다 많은 데이터를 갖고 상기 입력 데이터 큐에 저장된 데이터군들과 상이한 데이터군들을 상기 입력 데이터가 저장된 메모리에서 순차적으로 읽어와 상기 입력 데이터 큐에 저장하도록 제어하고, 상기 상이한 데이터군들에 대한 상기 반복 시퀀서의 제어가 실행되도록 제어하는 제어 시퀀서를 포함하는 것을 특징으로 하는 컨벌루션 연산 처리 장치.
  6. 삭제
  7. 제1항에 있어서,
    상기 다른 데이터열은 상기 쉬프트 버퍼가 전송 받은 데이터군에서 상기 데이터열로부터 기 설정된 기준에 따라 쉬프트된 영역의 데이터열인 것을 특징으로 하는 컨벌루션 연산 처리 장치.
  8. 제1항에 있어서,
    상기 컨벌루션 시퀀서 모듈에 의해, 상기 특정된 하나의 데이터군에 대하여 상기 쉬프트 버퍼에서 상기 연산 유닛으로 전송되도록 제어되는 데이터열의 개수는 K개이고,
    상기 연산기에 의해, 상기 쉬프트 버퍼로부터 전송 받은 데이터열 하나당 상기 필터와 K회의 컨벌루션 연산이 수행됨에 따라,
    상기 특정된 하나의 데이터군의 데이터 사용 횟수는 K2회가 되는 것을 특징으로 하는 컨벌루션 연산 처리 장치.
  9. 제1항에 있어서,
    상기 입력 데이터가 저장되는 메모리와 상기 연산 유닛에 의해 계산된 결과 데이터를 기설정된 형태로 변형하여 상기 메모리에 저장하는 커밋 유닛을 더 포함하는 것을 특징으로 하는 컨벌루션 연산 처리 장치.
  10. 제1항에 있어서,
    상기 페치 유닛은, 상기 메모리에 저장된 데이터가 페치되는 페치 버퍼, 상기 메모리로부터 상기 페치 버퍼로 페치할 데이터를 제어하는 페치 시퀀서, 그리고, 페치된 데이터를 상기 컨벌루션 피드 모듈로 전달하는 페치 네트워크를 더 포함하는 것을 특징으로 하는 컨벌루션 연산 처리 장치.
  11. 뉴럴 네트워크에 있어서, 폭 x 높이 x 입력 채널의 형태로 구성되는 입력 데이터와 상기 입력 데이터의 형태에 대응되도록 K x K x 입력 채널 혹은 K x K(K는 1이상의 정수)의 형태로 형성되는 필터의 컨벌루션 연산을 처리하여, 폭 x 높이 x 출력 채널의 형태로 구성되는 출력 데이터를 생성하도록 구성되는 컨벌루션 연산 처리 장치를 이용한 컨벌루션 연산 처리 방법으로서,
    상기 컨벌루션 연산 처리 장치의 페치 유닛이, 상기 입력 데이터가 저장된 메모리에서 연산기의 단위 데이터 처리량보다 많은 데이터를 갖는 데이터군을 순차적으로 읽어오고 상기 데이터군을 구성하는 데이터 중 적어도 어느 하나 이상의 데이터가 상기 컨벌루션 연산에 재사용되도록 상기 데이터군을 상기 연산기로 제공하는 페치 단계; 및
    상기 컨벌루션 연산 처리 장치의 연산 유닛이, 하나 이상의 상기 연산기를 이용하여 상기 단위 데이터 처리량에 맞춰 상기 데이터군을 구성하는 데이터와 상기 필터의 컨벌루션 연산을 복수회 수행하는 연산 단계;를 포함하되
    상기 페치 유닛은, 입력 데이터 큐와 쉬프트 버퍼를 포함하는 컨벌루션 피드 모듈 및 컨벌루션 시퀀서 모듈을 포함하고,
    상기 페치 단계는,
    상기 컨벌루션 시퀀서 모듈의 제어에 의해 상기 컨벌루션 피드 모듈이, 상기 입력 데이터가 저장된 메모리에서 상기 연산기의 단위 데이터 처리량보다 많은 데이터를 갖는 상기 데이터군을 순차적으로 읽어와 상기 입력 데이터 큐에 저장하는 단계;
    상기 컨벌루션 시퀀서 모듈의 제어에 의해 상기 컨벌루션 피드 모듈이, 상기 입력 데이터 큐에 저장된 데이터군들 중 특정된 하나의 데이터군을 상기 쉬프트 버퍼로 전송하는 단계;
    상기 컨벌루션 시퀀서 모듈이, 상기 연산기의 단위 데이터 처리량과 동일한 데이터양을 갖는 데이터열이 상기 쉬프트 버퍼에서 상기 연산 유닛으로 전송되도록 제어하는 단계; 및
    상기 컨벌루션 시퀀서 모듈이, 상기 연산기의 단위 데이터 처리량과 동일한 데이터양을 갖되 상기 데이터열과 상이한 다른 데이터열이 상기 쉬프트 버퍼에서 상기 연산 유닛으로 전송되도록 제어하는 단계;를 포함하고,
    상기 데이터열과 상기 다른 데이터열은 상기 특정된 하나의 데이터군을 구성하는 데이터의 순차적인 일부에 해당하고, 서로 동일한 데이터 부분과 상이한 데이터 부분을 갖도록 구성되고,
    상기 데이터열이 갖는 데이터양은 상기 연산기의 단위 데이터 처리량인UnitSize(#MAC)과 동일하고,
    상기 데이터군이 갖는 데이터양은 상기 연산기의 단위 데이터 처리량인UnitSize(#MAC)에 K/2의 최대 정수값인floor(K/2)를 두 번 더한 식 {floor(K/2)+UnitSize(#MAC)+floor(K/2)} 혹은 그 이상으로 정의되며,
    여기서 K는 상기 필터의 형태 K x K x입력 채널 혹은 K x K에 따라 결정되는 상수로서 1이상의 정수인 것을 특징으로 하는 컨벌루션 연산 처리 방법.
  12. 삭제
  13. 삭제
  14. 제11항에 있어서,
    상기 연산 단계는,
    상기 연산 유닛이, 상기 연산기를 이용하여, 상기 특정된 하나의 데이터군을 구성하는 데이터 중 적어도 어느 하나 이상의 데이터가 재사용되도록, 상기 쉬프트 버퍼로부터 전송 받은 데이터열들 각각과 상기 필터의 컨벌루션 연산을 수행하는 단계를 포함하는 것을 특징으로 하는 컨벌루션 연산 처리 방법.
  15. 제11항에 있어서,
    상기 컨벌루션 시퀀서 모듈은 반복 시퀀서를 포함하고,
    상기 페치 단계는,
    상기 반복 시퀀서가, 상기 입력 데이터 큐에 저장된 데이터군들이 순차적으로 상기 쉬프트 버퍼로 전송되도록 제어하는 단계;
    상기 반복 시퀀서가, 상기 쉬프트 버퍼에 저장된 데이터군의 데이터열들이 상기 연산 유닛으로 전송되도록 제어하는 단계; 및
    상기 반복 시퀀서가, 상기 입력 데이터 큐에 저장된 데이터군을 구성하는 데이터 중 적어도 어느 하나 이상의 데이터가 상기 컨벌루션 연산에 재사용되도록 제어하는 단계를 더 포함하는 것을 특징으로 하는 컨벌루션 연산 처리 방법.
  16. 제15항에 있어서,
    상기 컨벌루션 시퀀서 모듈은 제어 시퀀서를 더 포함하고,
    상기 반복 시퀀서로부터 상기 입력 데이터 큐에 저장된 데이터군들에 대한 제어 완료 통지를 받은 경우, 상기 페치 단계는,
    상기 제어 시퀀서가, 상기 연산기의 단위 데이터 처리량보다 많은 데이터를 갖고 상기 입력 데이터 큐에 저장된 데이터군들과 상이한 데이터군들을 상기 입력 데이터가 저장된 메모리에서 순차적으로 읽어와 상기 입력 데이터 큐에 저장하도록 제어하는 단계; 및
    상기 제어 시퀀서가, 상기 상이한 데이터군들에 대한 상기 반복 시퀀서의 제어가 실행되도록 제어하는 단계를 더 포함하는 것을 특징으로 하는 컨벌루션 연산 처리 방법.
  17. 삭제
  18. 제11항에 있어서,
    상기 다른 데이터열은 상기 쉬프트 버퍼가 전송 받은 데이터군에서 상기 데이터열로부터 기 설정된 기준에 따라 쉬프트된 영역의 데이터열인 것을 특징으로 하는 컨벌루션 연산 처리 방법.
  19. 제11항에 있어서,
    상기 컨벌루션 시퀀서 모듈에 의해, 상기 특정된 하나의 데이터군에 대하여 상기 쉬프트 버퍼에서 상기 연산 유닛으로 전송되도록 제어되는 데이터열의 개수는 K개이고,
    상기 연산기에 의해, 상기 쉬프트 버퍼로부터 전송 받은 데이터열 하나당 상기 필터와 K회의 컨벌루션 연산이 수행됨에 따라,
    상기 특정된 하나의 데이터군의 데이터 사용 횟수는 K2회가 되는 것을 특징으로 하는 컨벌루션 연산 처리 방법.
  20. 제11항에 있어서,
    상기 컨벌루션 연산 처리 장치의 커밋 유닛이, 상기 연산 유닛에 의해 계산된 결과 데이터를 기설정된 형태로 변형하여 상기 메모리에 저장하는 단계를 더 포함하는 것을 특징으로 하는 컨벌루션 연산 처리 방법.
KR1020190072062A 2019-06-18 2019-06-18 뉴럴 네트워크 프로세서의 컨벌루션 연산 처리 방법 및 장치 KR102360452B1 (ko)

Priority Applications (4)

Application Number Priority Date Filing Date Title
KR1020190072062A KR102360452B1 (ko) 2019-06-18 2019-06-18 뉴럴 네트워크 프로세서의 컨벌루션 연산 처리 방법 및 장치
PCT/KR2020/007133 WO2020256312A1 (ko) 2019-06-18 2020-06-02 뉴럴 네트워크 프로세서의 컨벌루션 연산 처리 방법 및 장치
US17/620,308 US20220245436A1 (en) 2019-06-18 2020-06-02 Method and device for processing convolution operation of neural network processor
KR1020220004142A KR102467203B1 (ko) 2019-06-18 2022-01-11 뉴럴 네트워크 프로세서의 컨벌루션 연산 처리 방법 및 장치

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020190072062A KR102360452B1 (ko) 2019-06-18 2019-06-18 뉴럴 네트워크 프로세서의 컨벌루션 연산 처리 방법 및 장치

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020220004142A Division KR102467203B1 (ko) 2019-06-18 2022-01-11 뉴럴 네트워크 프로세서의 컨벌루션 연산 처리 방법 및 장치

Publications (2)

Publication Number Publication Date
KR20200144276A KR20200144276A (ko) 2020-12-29
KR102360452B1 true KR102360452B1 (ko) 2022-02-11

Family

ID=74037283

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020190072062A KR102360452B1 (ko) 2019-06-18 2019-06-18 뉴럴 네트워크 프로세서의 컨벌루션 연산 처리 방법 및 장치
KR1020220004142A KR102467203B1 (ko) 2019-06-18 2022-01-11 뉴럴 네트워크 프로세서의 컨벌루션 연산 처리 방법 및 장치

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020220004142A KR102467203B1 (ko) 2019-06-18 2022-01-11 뉴럴 네트워크 프로세서의 컨벌루션 연산 처리 방법 및 장치

Country Status (3)

Country Link
US (1) US20220245436A1 (ko)
KR (2) KR102360452B1 (ko)
WO (1) WO2020256312A1 (ko)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102540274B1 (ko) 2021-05-21 2023-06-02 연세대학교 산학협력단 인공지능 알고리즘의 효율적인 하드웨어 구현을 위한 수용 영역의 분할 연산 방법
US20220129320A1 (en) * 2021-11-05 2022-04-28 Debabrata Mohapatra Schedule-aware dynamically reconfigurable adder tree architecture for partial sum accumulation in machine learning accelerators
KR20230082280A (ko) 2021-12-01 2023-06-08 (주)네오와인 컨벌루션 가속장치
US20240104361A1 (en) * 2022-09-19 2024-03-28 Texas Instruments Incorporated Neural network processor
KR20240054054A (ko) 2022-10-18 2024-04-25 (주)네오와인 Mac 어레이 프로세서 구조를 이용한 깊이방향 컨벌루션 가속장치

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20190065954A1 (en) 2015-06-25 2019-02-28 Microsoft Technology Licensing, Llc Memory bandwidth management for deep learning applications

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105512723B (zh) * 2016-01-20 2018-02-16 南京艾溪信息科技有限公司 一种用于稀疏连接的人工神经网络计算装置和方法
KR20180034853A (ko) * 2016-09-28 2018-04-05 에스케이하이닉스 주식회사 합성곱 신경망의 연산 장치 및 방법
KR102415508B1 (ko) * 2017-03-28 2022-07-01 삼성전자주식회사 컨볼루션 신경망 처리 방법 및 장치
CN107229598B (zh) * 2017-04-21 2021-02-26 东南大学 一种面向卷积神经网络的低功耗电压可调卷积运算模块
KR20180123846A (ko) * 2017-05-10 2018-11-20 울산과학기술원 합성곱 신경망을 위한 논리적 3차원 구조의 재구성형 연산 가속기

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20190065954A1 (en) 2015-06-25 2019-02-28 Microsoft Technology Licensing, Llc Memory bandwidth management for deep learning applications

Also Published As

Publication number Publication date
KR20200144276A (ko) 2020-12-29
KR20220009483A (ko) 2022-01-24
WO2020256312A1 (ko) 2020-12-24
KR102467203B1 (ko) 2022-11-16
US20220245436A1 (en) 2022-08-04

Similar Documents

Publication Publication Date Title
KR102360452B1 (ko) 뉴럴 네트워크 프로세서의 컨벌루션 연산 처리 방법 및 장치
CN107301456B (zh) 基于向量处理器的深度神经网络多核加速实现方法
US10482380B2 (en) Conditional parallel processing in fully-connected neural networks
CN111242289B (zh) 一种规模可扩展的卷积神经网络加速系统与方法
Bethke Comparison of genetic algorithms and gradient-based optimizers on parallel processors: Efficiency of use of processing capacity
US20180260709A1 (en) Calculating device and method for a sparsely connected artificial neural network
Everstine A comparasion of three resequencing algorithms for the reduction of matrix profile and wavefront
Dennis, Jr et al. Direct search methods on parallel machines
JP6715900B2 (ja) ニューラルネットワークのパラメータを適応させるための方法および装置
Hu et al. Distributed inference with deep learning models across heterogeneous edge devices
EP3872713A2 (en) Mapping convolution to a partition channel convolution engine
EP3859543A1 (en) Parallel processing of reduction and broadcast operations on large datasets of non-scalar data
EP3937085A1 (en) Mapping convolution to a channel convolution engine
CN112734020B (zh) 卷积神经网络的卷积乘累加硬件加速装置、系统以及方法
CN113496279A (zh) 使用点对点连接的通道卷积引擎的分组卷积
CN111381968A (zh) 一种高效运行深度学习任务的卷积运算优化方法及系统
KR20200094056A (ko) 컨벌루션 신경망 파라미터 최적화 방법, 컨벌루션 신경망 연산방법 및 그 장치
CN112836823B (zh) 基于循环重组和分块的卷积神经网络反向传播映射方法
CN111738276A (zh) 基于多核卷积神经网络的图像处理方法、装置及设备
KR20210015990A (ko) 학습된 파라미터의 형태변환을 이용한 컨벌루션 신경망 파라미터 최적화 방법, 컨벌루션 신경망 연산방법 및 그 장치
CN113627592B (zh) 面向Winograd参数可调的卷积张量优化方法及系统
Wu Review on FPGA-based accelerators in deep learning
EP4052188B1 (en) Neural network instruction streaming
KR101987475B1 (ko) 하드웨어 구현에 적합한 신경망 파라미터 최적화 방법, 신경망 연산방법 및 그 장치
CN111047025A (zh) 一种卷积计算方法及装置

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
A107 Divisional application of patent