KR20220028899A - 가속기, 가속기의 동작 방법 및 이를 포함한 전자 장치 - Google Patents

가속기, 가속기의 동작 방법 및 이를 포함한 전자 장치 Download PDF

Info

Publication number
KR20220028899A
KR20220028899A KR1020200110530A KR20200110530A KR20220028899A KR 20220028899 A KR20220028899 A KR 20220028899A KR 1020200110530 A KR1020200110530 A KR 1020200110530A KR 20200110530 A KR20200110530 A KR 20200110530A KR 20220028899 A KR20220028899 A KR 20220028899A
Authority
KR
South Korea
Prior art keywords
input data
accelerator
target operation
filter
memory
Prior art date
Application number
KR1020200110530A
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 KR1020200110530A priority Critical patent/KR20220028899A/ko
Priority to US17/182,439 priority patent/US11741026B2/en
Priority to CN202110494484.XA priority patent/CN114118348A/zh
Priority to EP21188191.7A priority patent/EP3965018A1/en
Publication of KR20220028899A publication Critical patent/KR20220028899A/ko
Priority to US18/364,872 priority patent/US20240004809A1/en

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/22Microcontrol or microprogram arrangements
    • G06F9/28Enhancement of operational speed, e.g. by using several microcontrol devices operating in parallel
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44505Configuring for program initiating, e.g. using registry, configuration files
    • 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/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
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • Evolutionary Computation (AREA)
  • Data Mining & Analysis (AREA)
  • Mathematical Physics (AREA)
  • Computational Linguistics (AREA)
  • Artificial Intelligence (AREA)
  • Neurology (AREA)
  • Complex Calculations (AREA)

Abstract

가속기, 가속기의 동작 방법 및 이를 포함한 전자 장치가 개시된다. 개시된 타겟 연산을 수행하는 가속기의 동작 방법은 가속기 내 메모리의 워드 폭 및 타겟 연산에 적용되는 필터의 공간 사이즈에 기초하여 결정된 데이터 레이아웃으로 입력 데이터를 패킹하여 메모리에 저장하는 단계 및 메모리에서 동일 워드에 저장된 입력 데이터의 부분과 필터의 가중치들 간 타겟 연산을 수행하는 단계를 포함한다.

Description

가속기, 가속기의 동작 방법 및 이를 포함한 전자 장치{ACCELERATOR, METHOD FOR OPERATING THE SAME, AND ELECTRONIC DEVICE INCLUDING THE SAME}
아래 실시예들은 가속기, 가속기의 동작 방법 및 이를 포함한 전자 장치에 관한 것이다.
인공 지능(Artificial Intelligence; AI) 기술이 발전함에 따라 인공 지능만을 위한 독자적인 하드웨어의 필요성이 증가하고 있다. 인공 지능은 예를 들어, 특정한 연산을 통해 추론과 학습을 수행할 수 있다. 이와 같이 인공 지능을 구현하고 실행하기 위한 전용 하드웨어로서 다양한 장치들이 개발되고 있다.
최근에는, 심층 신경망(Deep Neural Network, DNN)을 효율적으로 사용하기 위한 하드웨어 가속기에 대한 연구가 활발히 진행되고 있다. 뉴럴 네트워크를 처리하는 장치는 복잡한 입력 데이터에 대한 많은 양의 연산을 필요로 한다. 특히, 메모리의 저장 효율과 액세스 비용은 많은 프로세스 시스템들에서 중요한 성능 병목(performance bottleneck)의 원인이 될 수 있다.
일실시예에 따른 가속기의 동작 방법은 가속기 내 메모리의 워드 폭(word width) 및 상기 타겟 연산에 적용되는 필터의 공간 사이즈(spatial size)에 기초하여 결정된 데이터 레이아웃으로 입력 데이터를 패킹(packing)하여 상기 메모리에 저장하는 단계; 및 상기 메모리에서 동일 워드에 저장된 입력 데이터의 부분과 상기 필터의 가중치들 간 상기 타겟 연산을 수행하는 단계를 포함한다.
일실시예에 따른 가속기의 동작 방법에서 상기 저장하는 단계는 상기 데이터 레이아웃에 따라 복수의 필터들에 대응하는 입력 데이터를 한 워드로 패킹하여 상기 메모리에 저장할 수 있다.
일실시예에 따른 가속기의 동작 방법에서 상기 복수의 필터들의 개수는 상기 필터의 가로 사이즈 및 세로 사이즈, 상기 입력 데이터의 채널수, 상기 필터의 스트라이드 사이즈(stride size) 및 상기 타겟 연산을 수행하는 연산기가 동시에 처리 가능한 피연산자 페어(operand pair)의 개수에 기초하여 결정될 수 있다.
일실시예에 따른 가속기의 동작 방법에서 상기 저장하는 단계는 상기 메모리의 워드 폭 및 상기 필터의 공간 사이즈에 기초하여 결정된 가상 필터의 공간 사이즈 및 스트라이드 사이즈에 따라 im2col 변환을 수행함으로써, 상기 입력 데이터를 패킹하여 상기 메모리에 저장할 수 있다.
일실시예에 따른 가속기의 동작 방법에서 상기 타겟 연산을 수행하는 단계는 상기 메모리에서 동일 워드에 저장된 입력 데이터를 입력 레지스터에 패치(fetch)하고, 상기 필터의 가중치들을 필터 레지스터에 패치하고, 상기 입력 레지스터에 패치된 입력 데이터의 제1 부분과 상기 가중치들 간 제1 타겟 연산을 수행하고, 상기 입력 레지스터에 패치된 입력 데이터의 제2 부분과 상기 가중치들 간 상기 제2 타겟 연산을 수행할 수 있다.
일실시예에 따른 가속기의 동작 방법에서 상기 입력 데이터의 제1 부분과 상기 제2 부분은 중복된 데이터를 포함할 수 있다.
일실시예에 따른 가속기의 동작 방법에서 상기 타겟 연산을 수행하는 단계는 상기 제1 타겟 연산에 이용된 가중치들을 먹싱(muxing)하고, 상기 입력 데이터의 상기 제2 부분과 상기 먹싱된 가중치들 간 상기 제2 타겟 연산을 수행할 수 있다.
일실시예에 따른 가속기의 동작 방법에서 상기 타겟 연산을 수행하는 단계는 상기 제1 타겟 연산 후 상기 입력 레지스터에 패치된 상기 입력 데이터의 상기 제2 부분을 먹싱하고, 상기 먹싱된 제2 부분과 상기 가중치들 간 상기 제2 타겟 연산을 수행할 수 있다.
일실시예에 따른 가속기의 동작 방법에서 상기 타겟 연산을 수행하는 단계는 상기 제1 타겟 연산에 이용된 가중치들을 먹싱해서 상기 필터 레지스터에 재저장하고, 상기 입력 데이터의 상기 제2 부분과 상기 재저장된 가중치들 간 상기 제2 타겟 연산을 수행할 수 있다.
일실시예에 따른 가속기의 동작 방법에서 상기 타겟 연산을 수행하는 단계는 상기 제1 타겟 연산 후 상기 입력 레지스터에 패치된 상기 입력 데이터의 상기 제2 부분과 먹싱해서 상기 입력 레지스터에 재저장하고, 상기 재저장된 제2 부분과 상기 가중치들 간 상기 제2 타겟 연산을 수행할 수 있다.
일실시예에 따른 가속기의 동작 방법에서 상기 타겟 연산은 상기 가속기에서 실행되는 뉴럴 네트워크에서 수행되는 컨볼루션 연산을 포함할 수 있다.
일실시예에 따른 가속기의 동작 방법에서 상기 타겟 연산을 수행하는 단계는 상기 동일 워드에 저장된 입력 데이터의 부분과 상기 필터의 가중치들이 입력된 멀티-피연산자 MAC(multiplier-accumulator)에서 수행될 수 있다.
일실시예에 따른 가속기의 동작 방법에서 상기 가속기는 상기 타겟 연산이 수행되는 뉴럴 네트워크를 통해 추론하고자 하는 데이터가 입력되는 사용자 단말 또는 상기 사용자 단말로부터 상기 추론하고자 하는 데이터를 수신한 서버에 포함될 수 있다.
일실시예에 따른 타겟 연산을 수행하는 가속기는 메모리의 워드 폭 및 상기 타겟 연산에 적용되는 필터의 공간 사이즈에 기초하여 결정된 데이터 레이아웃으로 패킹된 입력 데이터를 저장하는 메모리; 및 상기 메모리에서 동일 워드에 저장된 입력 데이터의 부분과 상기 필터의 가중치들 간 상기 타겟 연산을 수행하는 연산기를 포함한다.
일실시예에 따른 전자 장치는 타겟 연산이 수행되는 뉴럴 네트워크를 가속기에서 처리하기 위한 요청에 응답하여 상기 가속기에 의해 실행 가능한 명령어를 생성하는 호스트 프로세서; 및 상기 명령어가 실행되면, 내부 메모리의 워드 폭 및 상기 타겟 연산에 적용되는 필터의 공간 사이즈에 기초하여 결정된 데이터 레이아웃으로 입력 데이터를 패킹하여 상기 내부 메모리에 저장하고, 상기 내부 메모리에서 동일 워드에 저장된 입력 데이터의 부분과 상기 필터의 가중치들 간 상기 타겟 연산을 수행하는 가속기를 포함한다.
도 1은 일실시예에 따른 전자 장치를 나타낸 도면이다.
도 2는 일실시예에 따른 가속기를 나타낸 도면이다.
도 3 및 도 4는 일실시예에 따른 연산기를 설명하기 위한 도면이다.
도 5 내지 도 8은 일실시예에 따른 데이터 레이아웃으로 입력 데이터를 패킹하여 메모리에 저장하는 과정을 설명하기 위한 도면이다.
도 9 내지 도 21은 일실시예에 따른 타겟 연산을 수행하는 과정을 설명하기 위한 도면이다.
도 22는 일실시예에 따른 가속기의 동작 방법을 나타낸 도면이다.
도 23 및 도 24는 일실시예에 따른 전자 장치의 예시들을 설명하기 위한 도면이다.
실시예들에 대한 특정한 구조적 또는 기능적 설명들은 단지 예시를 위한 목적으로 개시된 것으로서, 다양한 형태로 변경되어 실시될 수 있다. 따라서, 실시예들은 특정한 개시형태로 한정되는 것이 아니며, 본 명세서의 범위는 기술적 사상에 포함되는 변경, 균등물, 또는 대체물을 포함한다.
제1 또는 제2 등의 용어는 다양한 구성요소들을 설명하는데 사용될 수 있지만, 이런 용어들은 하나의 구성요소를 다른 구성요소로부터 구별하는 목적으로만 해석되어야 한다. 예를 들어, 제1 구성요소는 제2 구성요소로 명명될 수 있고, 유사하게 제2 구성요소는 제1 구성요소로도 명명될 수 있다.
어떤 구성요소가 다른 구성요소에 "연결되어" 있다고 언급된 때에는, 그 다른 구성요소에 직접적으로 연결되어 있거나 또는 접속되어 있을 수도 있지만, 중간에 다른 구성요소가 존재할 수도 있다고 이해되어야 할 것이다.
단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 명세서에서, "포함하다" 또는 "가지다" 등의 용어는 설명된 특징, 숫자, 단계, 동작, 구성요소, 부분품 또는 이들을 조합한 것이 존재함으로 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성요소, 부분품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 해당 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 가진다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥상 가지는 의미와 일치하는 의미를 갖는 것으로 해석되어야 하며, 본 명세서에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.
이하, 실시예들을 첨부된 도면을 참조하여 상세하게 설명한다. 아래의 특정한 구조적 내지 기능적 설명들은 단지 실시예들을 설명하기 위한 목적으로 예시된 것으로, 실시예의 범위가 본문에 설명된 내용에 한정되는 것으로 해석되어서는 안된다. 관련 기술 분야에서 통상의 지식을 가진 자라면 이러한 기재로부터 다양한 수정 및 변형이 가능하다. 또한, 각 도면에 제시된 동일한 참조 부호는 동일한 부재를 나타내며, 공지된 기능 및 구조는 생략하도록 한다.
도 1은 일실시예에 따른 전자 장치를 나타낸 도면이다.
도 1을 참조하면, 일실시예에 따른 전자 장치(100)은 호스트 프로세서(110), 오프-칩 메모리(off-chip memory)(120), 메모리 컨트롤러(130) 및 가속기(140)를 포함할 수 있다. 호스트 프로세서(110), 오프-칩 메모리(120), 메모리 컨트롤러(130) 및 가속기(140)는 버스(bus)를 통하여 서로 통신할 수 있다.
호스트 프로세서(110)는 전자 장치(100)에 포함된 컴포넌트들의 동작을 제어하는 장치로, 예를 들어, 중앙 처리 장치(CPU; Central Processing Unit)를 포함할 수 있다. 호스트 프로세서(110)는 뉴럴 네트워크를 가속기(140)에서 처리하기 위한 요청을 수신하고, 해당 요청에 응답하여 가속기(140)에서 실행 가능한 명령어를 생성한다. 요청은 뉴럴 네트워크에 기반한 데이터 추론을 위한 것으로, 예를 들어, 객체 인식, 패턴 인식, 컴퓨터 비전, 음성 인식, 기계 번역, 기계 통역 등을 위해 가속기(140)로 하여금 뉴럴 네트워크를 실행하게 하여 데이터 추론 결과를 얻기 위한 것일 수 있다. 호스트 프로세서(110)는 추론 대상 데이터와 뉴럴 네트워크의 파라미터들을 가속기(140)로 전달할 수 있다.
오프-칩 메모리(120)는 가속기(140)의 외부에 배치된 메모리로서, 예를 들어, 전자 장치(100)의 메인 메모리로 활용되는 DRAM(Dynamic Random Access Memory)일 수 있다. 오프-칩 메모리(120)는 메모리 컨트롤러(130)를 통해 액세스될 수 있다. 오프-칩 메모리(120)는 추론 대상 데이터 및/또는 가속기(140)에서 실행할 뉴럴 네트워크의 파라미터들을 저장할 수 있으며, 저장된 데이터는 이후 추론 수행을 위해 가속기(140)로 전달될 수 있다. 또한, 오프-칩 메모리(120)는 가속기(140)에서 뉴럴 네트워크를 실행하는 데 가속기(140) 내부의 온-칩 메모리(on-chip memory)가 충분하지 않은 경우에 활용될 수도 있다.
가속기(140)는 호스트 프로세서(110)의 명령어에 따른 뉴럴 네트워크를 실행하여 입력되는 데이터를 추론하는 AI 가속기(Artificial Intelligence accelerator)로서, 호스트 프로세서(110)와 구별되는 별도의 프로세서일 수 있다. 예를 들어, 가속기(140)은 NPU(Neural Processing Unit), GPU, TPU(Tensor Processing Unit) 등일 수 있다.
가속기(140)는 뉴럴 네트워크에 따른 연산들의 특성 상 범용의 호스트 프로세서(110)에서 처리되기 보다는 별도의 전용 프로세서(다시 말해, 가속기(140))에서 처리되는 것이 보다 효율적인 작업들을 처리할 수 있다. 이때 가속기(140)에 포함된 하나 이상의 프로세싱 엘리먼트들(PEs; Processing Elements) 및 온-칩 메모리가 활용될 수 있다. 온-칩 메모리는 가속기(140) 내부에 포함된 글로벌 버퍼(global buffer)로서, 가속기(140) 외부에 위치하는 오프-칩 메모리(120)와 구분될 수 있다. 예를 들어, 온-칩 메모리는 주소 공간(address space)을 통해 액세스 가능한 스크래치패드 메모리(scratchpad memory), SRAM(Static Random Access Memory) 등일 수 있다.
뉴럴 네트워크는 복수의 레이어들을 포함한다. 일실시예에서, 뉴럴 네트워크는 입력 레이어, 복수의 히든 레이어들 및 출력 레이어를 포함한다. 각각의 레이어들은 인공 뉴런이라고도 불리는 복수의 노드들을 포함한다. 각 노드는 하나 이상의 입력 및 출력을 가지는 계산 단위를 나타내고, 노드들은 상호 연결될 수 있다. 노드들 간의 연결에는 가중치가 설정될 수 있으며, 이러한 가중치는 조정 또는 변경될 수 있다. 가중치는 연관된 데이터 값을 증폭, 감소 또는 유지시킴으로써 해당 데이터 값이 최종 결과에 미치는 영향도를 결정할 수 있다. 출력 레이어에 포함된 각각의 노드에는 이전 레이어에 포함된 노드들의 가중된 입력들이 입력될 수 있다. 가중된 데이터가 임의의 레이어로부터 다음 레이어로 입력되는 과정을 전파(propagation)라고 지칭할 수 있다.
일실시예에 따른 뉴럴 네트워크에서 컨볼루션 연산이 수행될 수 있다. 컨볼루션 연산은 입력 데이터에 필터(또는, 커널)를 적용함으로써 입력 데이터의 특징을 추출하기 위한 것으로, 연산 특성을 고려하여 컨볼루션 연산을 보다 효율적으로 수행하기 위한 방안이 새로 제안된다. 이하, 도면들을 참조하여 상세히 설명한다.
도 2는 일실시예에 따른 가속기를 나타낸 도면이다.
도 2를 참조하면, 일실시예에 따른 가속기(200)는 입력/필터 메모리(210), 멀티-피연산자 MAC(220), 출력 메모리(230), DMA(Direct Memory Access)(240), 디스패처(dispatcher)(250), im2col 엔진(260), CPU(270)를 포함할 수 있다. 가속기(200)의 내부 엘리먼트들은 버스를 통하여 서로 통신할 수 있다.
입력/필터 메모리(210)는 가속기(200) 내부의 온-칩 메모리(예컨대, SRAM)로서, 입력 데이터와 필터의 가중치들을 저장할 수 있다. 멀티-피연산자 MAC(220)은 입력/필터 메모리(210)로부터의 복수의 피연산자들에 타겟 연산(예컨대, 뉴럴 네트워크에 포함된 컨볼루션 연산 등)을 수행할 수 있다. 이를테면, 멀티-피연산자 MAC(220)은 앞서 설명한 가속기(200) 내 프로세싱 엘리먼트에 해당될 수 있다. 출력 메모리(230)는 멀티-피연사자 MAC(220)에서 수행된 연산의 결과 데이터를 저장하는 온-칩 메모리(예컨대, SRAM)일 수 있다. 본 명세서에서 멀티-피연산자 MAC(220)은 설명의 편의를 위하여 연산기라고도 표현될 수 있다.
DMA(240)는 입력/필터 메모리(210) 및/또는 출력 메모리(230)의 데이터 입출력을 제어할 수 있다. 디스패처(250)는 타겟 연산을 디스패칭함으로써 해당 연산이 멀티-피연산자 MAC(220)에서 수행되게끔 제어할 수 있다. im2col 엔진(260)은 미리 정해진 공간 사이즈 및 스트라이드 사이즈에 따라 2차원의 영상 데이터를 1차원의 열 데이터로 변환할 수 있다. 이러한 im2col 변환을 입력 데이터에 적용시킴으로써, im2col 변환된 입력 데이터의 행렬 곱으로도 컨볼루션 연산 결과를 동일하게 얻을 수 있다. 일실시예에서, im2col 변환은 im2col 엔진(260)뿐만 아니라 DMA(240), 디스패처(250) 및 CPU(270) 등을 포함한 다양한 조합에 의해 수행될 수도 있다. im2col 변환이 적용되는 공간 사이즈와 스트라이드 사이즈는 컨볼루션 연산에 적용되는 필터와 상이하며, 이에 대해서는 추후 상세히 설명한다.
도 3 및 도 4는 일실시예에 따른 연산기를 설명하기 위한 도면이다.
도 3을 참조하면, 일실시예에 따른 연산기(330)는 멀티-피연산자 MAC의 한 형태인 애더 트리(adder tree) 기반 멀티-피연산자 MAC을 포함할 수 있다. 연산기(330)는 복수의 곱셈기들을 이용하여 컨볼루션 연산을 수행할 수 있다. 컨볼루션 연산은 뉴럴 네트워크에서 수행되는 것으로 MAC 연산으로도 지칭될 수 있으며, 컨볼루션 연산에 이용되는 필터의 가중치들은 뉴럴 네트워크의 파라미터에 포함될 수 있다.
연산기(330)는 입력 메모리(310)로부터 입력 데이터를 수신하고, 필터 메모리(320)로부터 필터의 가중치들을 수신할 수 있다. 입력 메모리(310)와 필터 메모리(320) 각각은 연산기(330)의 계산 스루풋(computational throughput)에 대응되는 데이터 스루풋을 가지도록 설계될 수 있다. 이를 테면, 입력 메모리(310)와 필터 메모리(320) 각각의 한 워드는 연산기(330)에 포함된 곱셈기들와 동일한 개수의 엘리먼트들을 저장할 수 있다. 도 3의 예시에서, 연산기(330)에 16개의 곱셈기가 포함되고, 입력 메모리(310) 및 필터 메모리(320) 각각의 한 워드는 16개의 엘리먼트들을 저장할 수 있다. 도 3의 입력 메모리(310) 및 필터 메모리(320) 각각에서 한 워드는 한 열로 표현될 수 있다. 입력 메모리(310)와 필터 메모리(320) 각각에서 서로 대응되는 입력 데이터와 가중치가 곱셈기로 전달되어 곱해질 수 있으며, 이러한 곱셈 결과들이 더해져서 컨볼루션 값이 결정될 수 있다. 도 3의 연산기(330)는 한 번에 총 16개의 곱셈을 수행 가능한 계산 스루풋을 가질 수 있다.
도 3에서는 설명의 편의를 위해 연산기(330)에 16개의 곱셈기들이 포함되고, 입력 메모리(310)와 필터 메모리(320) 각각의 한 워드가 16개의 엘리먼트들을 포함하는 것으로 도시되어 있으나, 이외에도 다양한 실시예들이 제한 없이 적용될 수 있다.
도 4를 참조하면, 일실시예에 따라 입력 데이터 맵과 필터 간 컨볼루션 연산에 기초하여 출력 데이터 맵이 결정되는 예시가 도시된다. 입력 데이터 맵은 입력 특징 맵(input feature map), 이미지 데이터(image data)로도 지칭될 수 있다. 입력 데이터 맵에 포함된 각 입력 데이터는 입력 활성(input activation)으로도 지칭될 수 있다.
앞서 설명한 im2col 변환을 이용하면, 입력 데이터 맵의 채널 방향으로 연속적인 데이터들에 관한 컨볼루션 연산이 도 4에 도시된 것처럼 입력 데이터 맵의 공간 방향(spatial direction)으로 연속적인 데이터들에 대한 컨볼루션 연산으로 변환될 수 있다. 이 경우 연산기에 포함된 복수의 곱셈기 중 일부만 피연산자 페어를 입력 받을 수 있다. 달리 표현하면, 한 사이클에서 연산기에 포함된 16개의 곱셈기들 중에서 9개만이 연산을 수행하게 되어 연산기의 활용성이 낮아지게 된다.
도 5 내지 도 8은 일실시예에 따른 데이터 레이아웃으로 입력 데이터를 패킹하여 메모리에 저장하는 과정을 설명하기 위한 도면이다.
도 5를 참조하면, 일실시예에 따라 메모리의 저장 효율성을 향상시킬 수 있는 입력 데이터의 패킹을 설명하기 위한 예시가 도시된다. 설명의 편의를 위해, 컨볼루션 연산에서 입력 데이터 맵에 적용되는 필터는 3x3 사이즈를 가지고, 스트라이드 사이즈는 1인 경우를 가정한다. 도 6에 도시된 입력 데이터 맵, 필터 및 입력 메모리(570) 등의 사이즈는 단지 설명의 편의를 위한 것으로 이외에도 다양한 실시예들이 제한 없이 적용될 수 있다.
입력 데이터 맵에서 필터가 첫 번째로 적용되는 제1 입력 데이터(510)는 입력 메모리(570)의 첫 번째 워드(오른쪽에서 첫 번째 열)에 모두 저장될 수 있다. 그리고, 입력 데이터 맵에서 필터가 두 번째로 적용되는 제2 입력 데이터(520)는 제1 입력 데이터(510)와 일부 중복된 데이터를 포함할 수 있다. 중복된 데이터는 이미 입력 메모리(570)에 저장되어 있으므로, 제2 입력 데이터(520)에서 중복되지 않은 데이터만 입력 메모리(570)의 첫 번째 워드에 이어서 저장될 수 있다. 그리고, 입력 데이터 맵에서 필터가 세 번째로 적용되는 제3 입력 데이터(530)는 제2 입력 데이터(520)와 일부 중복된 데이터를 포함할 수 있다. 마찬가지로, 중복된 데이터는 이미 입력 메모리(570)에 저장되어 있으므로, 제3 입력 데이터(530)에서 중복되지 않은 데이터만 입력 메모리(570)의 첫 번째 워드에 이어서 저장될 수 있다.
입력 데이터 맵에서 필터가 네 번째로 적용되는 제4 입력 데이터(540)는 제3 입력 데이터(530)와 일부 중복된 데이터를 포함할 수 있다. 다만, 입력 메모리(570)의 첫 번째 워드는 제4 입력 데이터(540)에서 중복되지 않은 데이터를 저장하기에 충분하지 않다. 따라서, 제4 입력 데이터(540)는 입력 메모리(570)의 두 번째 워드(오른쪽에서 두 번째 열)에 모두 저장될 수 있다. 제4 입력 데이터(540)는 제3 입력 데이터(530)와 일부 중복된 데이터를 포함하지만, 입력 메모리(570)에서 제3 입력 데이터(530)와 다른 워드에 저장되므로, 제4 입력 데이터(540) 전부가 입력 메모리(570)의 두 번째 워드에 저장될 수 있다. 마찬가지로, 입력 데이터 맵에서 필터가 다섯 번째로 적용되는 제5 입력 데이터(550)와 필터가 여섯 번째로 적용되는 제6 입력 데이터(560)는 중복되지 않은 데이터만 입력 메모리(570)의 두 번째 워드에 이어서 저장될 수 있다.
이처럼, 입력 메모리(570)의 워드 폭, 다시 말해, 한 워드에 포함되는 엘리먼트 개수(예컨대, 도 5에서는 16) 및 필터의 공간 사이즈(예컨대, 도 5에서는 9)에 기초하여, 입력 데이터의 중복 저장이 최소화되도록 데이터 레이아웃이 결정될 수 있다. 결과적으로, 복수의 필터들에 대응하는 입력 데이터를 패킹하여 입력 메모리(570)의 한 워드에 저장함으로써, 한 워드에서 데이터가 저장되지 않은 엘리먼트가 최소화되어 입력 메모리(570)의 저장 효율성을 상당히 향상시킬 수 있다. 또한, 6번의 컨볼루션 연산을 위해 입력 메모리(570)의 워드가 2개만 필요하게 되어, 하나의 컨볼루션 연산에 필요한 데이터를 한 워드에 저장할 때 필요한 6개의 워드와 비교하면 3배의 메모리 효율성을 기대할 수 있다.
도 6을 참조하면, 일실시예에 따라 im2col 변환에 기반한 데이터 패킹을 통해 컨볼루션 연산이 수행되는 예시가 도시된다. 도 6에 도시된 입력 데이터 맵 및 필터의 사이즈, 연산기에 포함된 곱셈기 개수 등은 단지 설명의 편의를 위한 것으로 이외에도 다양한 실시예들이 제한 없이 적용될 수 있다.
앞선 설명처럼, 복수의 필터들에 대응하는 입력 데이터가 한 워드로 패킹되어 입력 메모리에 저장될 수 있다. 이러한 데이터 패킹은 im2col 변환에 적용되는 필터 사이즈를 조절함으로써 손쉽게 구현될 수 있다. 이를 테면, im2col 변환에 적용되는 필터 사이즈를 한 워드로 패킹되는 입력 데이터에 대응한 복수의 필터들을 합친 사이즈로 결정할 수 있다. 예를 들어, 도 5에서 필터 사이즈는 3x3이고, 3개의 필터들에 대응한 입력 데이터가 한 워드로 패킹된 것을 고려하여, im2col 변환에 적용되는 필터 사이즈는 5x3으로 결정될 수 있다. 달리 표현하면, 일반적으로 정사각형의 필터와 달리, im2col 변환에 적용되는 필터는 스트라이드 방향(다시 말해, 컨볼루션 연산이 수행됨에 따라 필터가 이동하는 방향)으로 긴 직사각형일 수 있다. 이러한 입력 데이터 패킹을 통해, 15개의 입력 데이터와 9개의 필터 가중치가 연산기로 한 사이클에 입력될 수 있다. 본 명세서에서, im2col 변환에 적용되는 필터는 컨볼루션 연산에 적용되는 필터와 구별을 위하고, 실제 컨볼루션 연산에 적용되지 않는 점을 고려하여 가상 필터로 지칭할 수 있다.
도 7을 참조하면, 일실시예에 따라 입력 데이터에 컨볼루션 연산을 수행하는 과정을 설명하기 위한 플로우차트가 도시된다.
단계(710)에서, 공간 컨볼루션 연산이 수행될 필요가 있는지 여부가 판단될 수 있다. 예를 들어, 입력 데이터 맵 및/또는 필터의 채널수가 미리 정해진 기준보다 많은 경우에는 공간 컨볼루션 연산이 수행될 필요가 없는 것으로 판단될 수 있다. 반대로, 입력 데이터 맵 및/또는 필터의 채널수가 미리 정해진 기준보다 적은 경우에 채널 방향으로의 컨볼루션은 연산 효율성이 상당히 낮아지므로, 공간 컨볼루션 연산이 수행될 필요가 있는 것으로 판단될 수 있다.
만약 공간 컨볼루션 연산이 수행될 필요가 없는 것으로 판단되면, 단계(750)가 이어서 수행되어, 일반적인 HWC(Height Width Channel) 컨볼루션 연산이 수행될 수 있다. 여기서, HWC 컨볼루션 연산은 입력 데이터 맵의 채널 방향으로 연속적인 데이터들에 관한 컨볼루션 연산을 나타낸다.
만약 공간 컨볼루션 연산이 수행될 필요가 있는 것으로 판단되면, 단계(720)가 이어서 수행될 수 있다. 단계(720)에서, 한 워드로 패킹할 입력 데이터에 대응하는 필터의 최대 개수 nmax가 아래의 수학식을 통해 결정될 수 있다.
Figure pat00001
위의 수학식 1에서, R은 필터의 가로 사이즈(다시 말해, x방향 사이즈), S는 필터의 세로 사이즈(다시 말해, y방향 사이즈), C는 입력 데이터 맵의 채널수, X는 연산기가 동시에 처리 가능한 피연산자 페어의 개수, T는 컨볼루션 연산에 적용되는 필터의 스트라이드 사이즈를 나타낸다. 도 5 및 도 6의 예시에서, R=S=3, C=1, X=16, T=1이기 때문에, nmax=3으로 결정될 수 있다.
단계(730)에서, nmax가 1인지 여부가 판단될 수 있다. 만약 nmax가 1이라면, 단계(770)이 이어서 수행될 수 있다. nmax가 1인 것은 1개의 필터에 대응하는 입력 데이터를 한 워드로 패킹하는 것을 나타내는 것인데, 실질적으로 데이터 패킹이 발생하지 않으므로 도 4에서 설명한 것처럼 언패킹 컨볼루션 연산이 수행될 수 있다.
반대로, 만약 nmax가 1이 아니라면, 단계(740)에서, 아래의 수학식을 통해 im2col 변환에 적용할 가상 필터가 결정되어 입력 데이터 맵에 im2col 변환이 수행됨으로써, 입력 데이터가 패킹되어 입력 메모리에 저장될 수 있다.
Figure pat00002
위의 수학식 2에서, R'는 im2col에 적용될 가상 필터의 가로 사이즈, S'는 im2col에 적용될 가상 필터의 세로 사이즈, T'는 im2col에 적용될 가상 필터의 스트라이드 사이즈를 나타낸다. 도 5 및 도 6의 예시를 적용하면, R'=5, S'=3, T'=3으로 결정될 수 있다.
단계(760)에서, 패킹된 입력 데이터와 필터의 가중치들 간 컨볼루션 연산이 수행될 수 있다. 이를 패킹된 컨볼루션이라 지칭할 수 있으며, 이에 대해서는 도 9 내지 도 21을 통해 상세히 설명한다.
도 8을 참조하면, 일실시예에 따라 가상 필터의 공간 사이즈 및 스트라이드 사이즈에 따라 im2col 변환을 수행함으로써, 입력 데이터를 패킹하여 입력 메모리(830)에 저장하는 예시가 도시된다.
도 7의 예시에서, 가상 필터의 공간 사이즈는 5x3으로, 스트라이드는 3으로 결정되었으므로, 가상 필터가 첫 번째로 적용되는 제1 입력 데이터(810)가 입력 메모리(830)의 첫 번째 워드(오른쪽에서 첫 번째 열)에 모두 저장될 수 있다. 그리고, 가상 필터가 두 번째로 적용되는 제2 입력 데이터(820)가 입력 메모리(830)의 두 번째 워드(오른쪽에서 두 번째 열)에 모두 저장될 수 있다. 이처럼, 가상 필터에 기반한 im2col 변환을 통해 입력 데이터의 패킹을 간단하게 구현할 수 있다.
도 8에서는 도시되지 않았으나, 앞서 설명한 가상 필터에 기반한 im2col 변환은 입력 데이터에 대해 수행되는 것으로, 필터의 가중치들에 대해서는 일반적인 im2col 변환이 적용될 수 있다. 필터가 3x3 사이즈를 가지므로, 필터 메모리에는 9개의 가중치들이 한 워드에 저장될 수 있다.
앞선 설명들은 x방향으로의 입력 데이터 패킹을 기준으로 서술되었으나 이로 실시예를 한정하는 것은 아니고, 실시예에 따라서는 y방향으로의 입력 데이터 패킹도 마찬가지로 적용될 수 있다.
도 9 내지 도 21은 일실시예에 따른 타겟 연산을 수행하는 과정을 설명하기 위한 도면이다.
도 9를 참조하면, 일실시예에 따라 설명된 데이터 레이아웃을 이용한 타겟 연산, 즉 컨볼루션 연산의 수행과정을 설명하기 위한 예시가 도시된다. 컨볼루션 연산 수행을 위해 입력 메모리에 저장된 입력 데이터가 워드 단위로 입력 레지스터로 패치될 수 있다. 입력 레지스터에 패치된 입력 데이터에 대해 컨볼루션 연산이 미리 정해진 개수만큼 완료되면, 입력 메모리에서 다음 워드에 저장된 입력 데이터가 입력 레지스터에 패치될 수 있다. 컨볼루션 연산에 적용되는 필터의 가중치들은 필터 레지스터에 패치될 수 있다. 도 9에서 연산기의 곱셈기에 연결된 박스들 각각은 입력 레지스터 또는 필터 레지스터에 포함된 엘리먼트들을 나타내고, 이 중 내부가 채워진 박스는 유효한 데이터가 저장된 것을 나타내고, 내부가 빈 박스는 '0'이 저장된 것을 나타낸다. 도 9의 연산기는 애더 트리 기반 멀티-피연산자 MAC을 포함할 수 있다.
도 6의 예시에 따라 입력 레지스터에 15개의 입력 데이터가 저장되고, 필터 레지스터에는 9개의 가중치들이 저장될 수 있다. 입력 레지스터에 저장된 15개의 입력 데이터의 부분과 가중치들 간 컨볼루션 연산이 수행될 수 있다. 다시 말해, 입력 레지스터에 저장된 입력 데이터 중에서 처음 9개의 입력 데이터 각각이 대응하는 가중치에 곱해지고, 곱셈 결과들이 더해짐으로써, 첫 번째 컨볼루션 연산이 수행될 수 있다. 두 번째 컨볼루션 연산은 입력 레지스터에 저장된 15개의 입력 데이터의 다른 부분에 기반하여 수행될 수 있으며, 이를 구현시킬 수 있는 실시예들에 대해서는 도 10 내지 도 21을 참조하여 상세히 설명한다. 이처럼, 입력 메모리에서 동일 워드에 패킹된 입력 데이터를 입력 레지스터로 한 번 패치하면 여러 컨볼루션 연산들을 수행할 수 있어, 컨볼루션 연산 특성에 따른 데이터 재사용율을 향상시켜 높은 메모리 효율성을 기대할 수 있다.
도 10을 참조하면, 일실시예에 따른 데이터 레이아웃을 이용한 컨볼루션 연산을 수행하는 가속기의 제1 실시예가 도시된다. 가속기는 입력 SRAM(1010), 필터 SRAM(1020), 입력 레지스터(1030), 필터 레지스터(1040), MUX(multiplexer)(1050), MAC(1060), 출력 레지스터(1070) 및 출력 SRAM(1080)을 포함할 수 있다.
입력 SRAM(1010)은 앞서 설명한 데이터 레이아웃에 따라 복수의 필터들에 대응하는 입력 데이터를 한 워드에 패킹하여 저장할 수 있다. 입력 레지스터(1030)는 컨볼루션 연산 수행을 위해 입력 SRAM(1010)로부터 워드 단위로 패치된 입력 데이터를 저장할 수 있다.
필터 SRAM(1020)은 컨볼루션 연산에 적용되는 필터의 가중치들을 저장할 수 있다. 필터 레지스터(1040)는 필터 SRAM(1020)로부터 패치된 저장된 가중치들을 저장할 수 있다.
MUX(1050)는 여러 데이터 중 하나를 선택하여 전달하는 장치로서, 필터 레지스터(1040)와 MAC(1060) 사이에 배치되어 MAC(1060)에서 가중치를 입력 받는 곱셈기들 각각에 필터 레지스터(1040)에 저장된 가중치들 중 하나를 선택적으로 전달할 수 있다. 이러한 MUX(1050)를 통해, 입력 SRAM(1010)에서 한 워드로 패킹된 입력 데이터를 입력 레지스터(1030)에 한 번 패치하더라도 여러 컨볼루션 연산들이 수행되게끔 할 수 있다. 설명의 편의를 위해, 이러한 구조를 가중치 먹싱(Weight MUXing) 구조라고 지칭한다.
MAC(1060)은 입력 레지스터(1030)에 저장된 입력 데이터의 부분과 MUX(1050)로부터 먹싱된 가중치 간 컨볼루션 연산을 수행할 수 있다. 출력 레지스터(1070)는 MAC(1060)의 연산 결과를 임시적으로 저장할 수 있으며, 출력 SRAM(1080)은 출력 레지스터(1070)로부터 연산 결과를 전달 받아 적절한 주소에 저장할 수 있다.
도 11을 참조하면, 일실시예에 따른 가중치 먹싱 구조에서 도 9의 연산이 수행된 이후 사이클에서 컨볼루션 연산이 수행되는 예시가 도시된다. 도 9의 컨볼루션 연산 후 각 가중치는 미리 정해진 개수(예컨대, 필터의 가로 사이즈 또는 세로 사이즈)만큼 떨어진 곱셈기로 입력되도록 먹싱될 수 있다. 이를 통해, 필터에 적용되는 입력 데이터를 변화시킬 수 있어, 도 5의 제2 입력 데이터(520)에 대응하는 두 번째 컨볼루션 연산이 간단하게 구현될 수 있다. 도 11에서 설명의 편의를 위해 MUX는 생략되었으며, 연산기 내 첫 번째 내지 세 번째 곱셈기(도 11의 좌측에서 첫 번째부터 세 번째 곱셈기)로 가중치 대신 '0'이 입력되는 것이 생략된다.
도 12를 참조하면, 일실시예에 따른 가중치 먹싱 구조에서, 도 11의 연산이 수행된 이후 사이클에서 컨볼루션 연산이 수행되는 예시가 도시된다. 도 11의 컨볼루션 연산 후 각 가중치는 미리 정해진 개수만큼 떨어진 곱셈기로 입력되도록 먹싱될 수 있다. 이를 통해, 필터에 적용되는 입력 데이터를 변화시킬 수 있어, 도 5의 제3 입력 데이터(530)에 대응하는 세 번째 컨볼루션 연산이 간단하게 구현될 수 있다. 이처럼, 한 워드로 패킹된 입력 데이터를 입력 레지스터에 패치한 후 입력 데이터의 부분을 달리하여 여러 컨볼루션 연산을 수행함으로써, 데이터 재사용을 통한 메모리 효율성을 극대화시킬 수 있다.
도 13을 참조하면, 일실시예에 따른 데이터 레이아웃을 이용한 컨볼루션 연산을 수행하는 가속기의 제2 실시예가 도시된다. 도 10에서 설명한 것과 달리, MUX(1320)가 입력 레지스터(1310)와 MAC(1330) 사이에 배치되어 MAC(1330)에서 가중치를 입력 받는 곱셈기들 각각에 입력 레지스터(1310)에 저장된 입력 데이터 중 하나를 선택적으로 전달할 수 있다. 설명의 편의를 위해, 이러한 구조를 입력 데이터 먹싱(input data muxing) 구조라고 지칭한다. MAC(1330)은 입력 레지스터(1310)에 저장된 입력 데이터의 부분 또는 먹싱된 부분과 필터 레지스터에 저장된 가중치들 간 컨볼루션 연산을 수행할 수 있다.
도 14를 참조하면, 일실시예에 따른 입력 데이터 먹싱 구조에서 도 9의 연산이 수행된 이후 사이클에서 컨볼루션 연산이 수행되는 예시가 도시된다. 도 9에서 입력 데이터의 제1 부분(예컨대, 1 내지 9번째 입력 데이터)에 대해 컨볼루션 연산을 수행한 후 입력 데이터의 제2 부분(예컨대, 4 내지 12번째 입력 데이터)이 미리 정해진 곱셈기로 입력되도록 먹싱될 수 있다. 여기서, 미리 정해진 곱셈기는 가중치들이 입력되는 1 내지 9번째 곱셈기들을 나타낼 수 있다. 이를 통해, 필터에 적용되는 입력 데이터를 변화시킬 수 있어, 도 5의 제2 입력 데이터(520)에 대응하는 두 번째 컨볼루션 연산이 간단하게 구현될 수 있다. 도 14에서 설명의 편의를 위해 MUX는 생략되었으며, 연산기 내 열 번째 내지 열 두 번째 곱셈기(도 14의 좌측에서 열 번째부터 열 두 번째 곱셈기)로 입력 데이터 대신 '0'이 입력되는 것이 생략된다.
도 15를 참조하면, 일실시예에 따른 입력 데이터 먹싱 구조에서 도 14의 연산이 수행된 이후 사이클에서 컨볼루션 연산이 수행되는 예시가 도시된다. 도 14에서 입력 데이터의 제2 부분에 대해 컨볼루션 연산을 수행한 후 입력 데이터의 제3 부분(예컨대, 7 내지 15번째 입력 데이터)이 미리 정해진 곱셈기로 입력되도록 먹싱될 수 있다. 이를 통해, 필터에 적용되는 입력 데이터를 변화시킬 수 있어, 도 5의 제3 입력 데이터(530)에 대응하는 세 번째 컨볼루션 연산이 간단하게 구현될 수 있다.
도 16을 참조하면, 일실시예에 따른 데이터 레이아웃을 이용한 컨볼루션 연산을 수행하는 가속기의 제3 실시예가 도시된다. 도 10에서 설명한 것과 달리, MUX(1620)가 필터 SRAM(1610)과 필터 레지스터(1630) 사이에 배치되어 필터 레지스터(1630)에서 가중치를 저장하는 엘리먼트들 각각에 필터 SRAM(1610)에 저장된 가중치 또는 필터 레지스터(1630)에 기 저장되었던 가중치 중 하나를 선택적으로 전달할 수 있다. 이러한 구조를 통해, 필터 레지스터(1630)에 저장된 가중치들의 순서가 변경되어 다시 필터 레지스터(1630)에 저장될 수 있다. 설명의 편의를 위해, 이러한 구조를 가중치 시프팅(weight shifting) 구조라고 지칭한다.
도 10에 도시된 가중치 먹싱 구조와 비교하면, MUX(1050, 1620)의 위치에서 차이점이 발생한다. 도 10의 가중치 먹싱 구조에서는 MUX(1050)가 MAC(1060)에 직접 연결되고, 도 16의 가중치 시프팅 구조에서는 MUX(1620)가 크리티컬 패스(critical path)가 작은 SRAM에 직접 연결되는 구조적 차이점이 존재한다. 이로 인해, 가중치 시프팅 구조가 가중치 먹싱 구조보다는 전력소모가 작으며 더 적은 물리적인 면적을 차지할 수 있다. 설명의 편의를 위해 가중치 먹싱 구조와 가중치 시프팅 구조를 비교하여 설명하였으나, 이러한 설명은 입력 데이터 먹싱 구조와 입력 데이터 시프팅 구조 간에도 마찬가지로 적용될 수 있다.
도 17을 참조하면, 일실시예에 따른 가중치 시프팅 구조에서 도 9의 연산이 수행된 이후 사이클에서 컨볼루션 연산이 수행되는 예시가 도시된다. 도 9의 컨볼루션 연산 후 각 가중치는 미리 정해진 개수(예컨대, 필터의 가로 사이즈 또는 세로 사이즈)만큼 떨어진 곱셈기로 입력되도록 먹싱되어 필터 레지스터에 재저장될 수 있다. 도 17에 도시된 필터 레지스터의 각 엘리먼트들은 먹싱 후 필터 레지스터에 재저장된 가중치들을 포함할 수 있다. 이를 통해, 필터에 적용되는 입력 데이터를 변화시킬 수 있어, 도 5의 제2 입력 데이터(520)에 대응하는 두 번째 컨볼루션 연산이 간단하게 구현될 수 있다. 도 17에서 필터 레지스터의 엘리먼트들 사이를 연결하는 화살표들은 도 17의 컨볼루션 연산이 완료된 후 먹싱을 통해 가중치가 시프팅되는 것을 나타낼 수 있다. 도 17에서 설명의 편의를 위해 MUX는 생략되었다.
도 18을 참조하면, 일실시예에 따른 가중치 시프팅 구조에서 도 17의 연산이 수행된 이후 사이클에서 컨볼루션 연산이 수행되는 예시가 도시된다. 도 17의 컨볼루션 연산 후 각 가중치는 미리 정해진 개수만큼 떨어진 곱셈기로 입력되도록 먹싱되어 필터 레지스터에 재저장될 수 있다. 도 18에 도시된 필터 레지스터의 각 엘리먼트들은 먹싱 후 필터 레지스터에 재저장된 가중치들을 포함할 수 있다. 이를 통해, 필터에 적용되는 입력 데이터를 변화시킬 수 있어, 도 5의 제3 입력 데이터(530)에 대응하는 세 번째 컨볼루션 연산이 간단하게 구현될 수 있다. 도 18에서 필터 레지스터의 엘리먼트들 사이를 연결하는 화살표들은 도 18의 컨볼루션 연산이 완료된 후 먹싱을 통해 가중치가 시프팅되는 것을 나타낼 수 있다.
도 19를 참조하면, 일실시예에 따른 데이터 레이아웃을 이용한 컨볼루션 연산을 수행하는 가속기의 제4 실시예가 도시된다. 도 10에서 설명한 것과 달리, MUX(1920)가 입력 SRAM(1910)과 입력 레지스터(1930) 사이에 배치되어 입력 레지스터(1930)에서 입력 데이터를 저장하는 엘리먼트들 각각에 입력 SRAM(1910)에 저장된 입력 데이터 또는 입력 레지스터(1930)에 기 저장되었던 입력 데이터 중 하나를 선택적으로 전달할 수 있다. 이러한 구조를 통해, 입력 레지스터(1930)에 저장된 입력 데이터의 순서가 변경되어 다시 입력 레지스터(1930)에 저장될 수 있다. 설명의 편의를 위해, 이러한 구조를 입력 데이터 시프팅 구조라고 지칭한다.
도 20을 참조하면, 일실시예에 따른 입력 데이터 시프팅 구조에서 도 9의 연산이 수행된 이후 사이클에서 컨볼루션 연산이 수행되는 예시가 도시된다. 도 9에서 입력 데이터의 제1 부분에 대해 컨볼루션 연산을 수행한 후 입력 데이터의 제2 부분이 미리 정해진 곱셈기로 입력되도록 먹싱되어 입력 레지스터에 재저장될 수 있다. 도 20에서 입력 레지스터의 엘리먼트들 사이를 연결하는 화살표들은 도 9의 컨볼루션 연산이 완료된 후 먹싱을 통해 가중치가 시프팅되는 것을 나타낼 수 있다. 도 20에 도시된 입력 레지스터의 각 엘리먼트들은 먹싱 후 입력 레지스터에 재저장된 입력 데이터를 포함할 수 있다. 이를 통해, 필터에 적용되는 입력 데이터를 변화시킬 수 있어, 도 5의 제2 입력 데이터(520)에 대응하는 두 번째 컨볼루션 연산이 간단하게 구현될 수 있다. 도 20에서 설명의 편의를 위해 MUX는 생략되었다.
도 21을 참조하면, 일실시예에 따른 입력 데이터 시프팅 구조에서 도 20의 연산이 수행된 이후 사이클에서 컨볼루션 연산이 수행되는 예시가 도시된다. 도 20에서 입력 데이터의 제2 부분에 대해 컨볼루션 연산을 수행한 후 입력 데이터의 제3 부분이 미리 정해진 곱셈기로 입력되도록 먹싱되어 입력 레지스터에 재저장될 수 있다. 도 20에 도시된 입력 레지스터의 각 엘리먼트들은 먹싱 후 입력 레지스터에 재저장된 입력 데이터를 포함할 수 있다. 이를 통해, 필터에 적용되는 입력 데이터를 변화시킬 수 있어, 도 5의 제3 입력 데이터(530)에 대응하는 세 번째 컨볼루션 연산이 간단하게 구현될 수 있다.
앞서 설명한 가속기의 제1 내지 4 실시예들은 입력 레지스터 또는 필터 레지스터의 앞 또는 뒤에 MUX들을 배치함으로써 간단하게 구현될 수 있다. 또한, 이러한 MUX들을 제어하는 회로도 간단한 상태 머신(state machine)으로 구현될 수 있다. 이러한 회로 추가로 인해 전력 오버헤드가 발생할 수는 있겠으나, 앞선 구조로 입력 데이터에 대한 메모리 액세스가 상당히 감소함에 따른 메모리 읽기 에너지 감소와 메모리를 읽지 않는 동안 메모리를 불능(disable)시키는 것에 따른 누설 전력(leakage power) 감소로 충분히 만회할 수 있으며, 많은 경우에 전체 시스템의 에너지 소모를 상당히 감소시킬 수 있다.
앞선 도면들에서는 8x8의 입력 데이터 맵, 3x3의 필터, 애더 트리 기반 16-피연산자 MAC을 가정하였으나, 설명의 편의를 위한 것으로 실시예가 이로 제한되지 않으며, 다양한 구조, 크기의 입력 데이터 맵, 필터, MAC에 기반한 컨볼루션 연산에도 상술된 설명들이 마찬가지로 적용될 수 있다.
일례로, 32-피연산자 MAC에서 5x5 필터, 스트라이드 1의 컨볼루션 연산이 수행되는 경우에도 앞서 설명한 가중치/입력 데이터 먹싱 구조, 가중치/입력 데이터 시프팅 구조가 모두 적용될 수 있다. 이 경우, 수학식 1에 의해 nmax는 2로 결정되어, 입력 메모리에서 한 워드로 패킹된 입력 데이터를 한 번 읽으면 두 개의 필터들에 대응하는 컨볼루션 연산들을 수행할 수 있다.
다른 일례로, 16-피연산자 MAC에서 3x3 필터, 스트라이드 2의 컨볼루션 연산이 수행되는 경우에도 앞서 설명한 가중치/입력 데이터 먹싱 구조, 가중치/입력 데이터 시프팅 구조가 모두 적용될 수 있다. 이 경우, 수학식 1에 의해 nmax는 2로 결정되어, 입력 메모리에서 한 워드로 패킹된 입력 데이터를 한 번 읽으면 두 개의 필터들에 대응하는 컨볼루션 연산들을 수행할 수 있다.
도 22는 일실시예에 따른 가속기의 동작 방법을 나타낸 도면이다.
도 22를 참조하면, 일실시예에 따른 가속기의 동작 방법은 가속기 내 메모리의 워드 폭 및 타겟 연산에 적용되는 필터의 공간 사이즈에 기초하여 결정된 데이터 레이아웃으로 입력 데이터를 패킹하여 메모리에 저장하는 단계(2210) 및 메모리에서 동일 워드에 저장된 입력 데이터의 부분과 필터의 가중치들 간 타겟 연산을 수행하는 단계(2220)를 포함한다. 도 22에 도시된 각 단계들에는 도 1 내지 도 21을 통하여 전술한 사항들이 그대로 적용되므로, 보다 상세한 설명은 생략한다.
일실시예에서, 앞선 설명들은 전자 장치에 포함된 가속기에 적용되어, 메모리의 저장 공간 효율을 높이고, 입력 메모리에서 입력 데이터를 읽는 횟수를 줄임으로써 해당 전자 장치의 전력 소모를 효과적으로 감소시킬 수 있다.
도 23 및 도 24는 일실시예에 따른 전자 장치의 예시들을 설명하기 위한 도면이다.
도 23을 참조하면, 일실시예에 따른 전자 장치는 사용자 단말(2300)로 구현될 수 있다. 도 23에서는 설명의 편의를 위해 사용자 단말(2300)이 스마트 폰으로 도시되었지만, 이외에도 태블릿, 랩탑, 퍼스널 컴퓨터 등 다양한 컴퓨팅 장치, 스마트 시계, 스마트 안경 등 다양한 웨어러블 기기, 스마트 스피커, 스마트 TV, 스마트 냉장고 등 다양한 가전장치, 스마트 자동차, 스마트 키오스크, IoT(Internet of Things) 기기, 로봇 등 제한 없이 적용될 수 있다. 사용자 단말(2300)은 뉴럴 네트워크를 이용하여 추론하고자 하는 데이터를 직접 획득할 수 있다. 호스트 프로세서(2310)는 타겟 연산이 수행되는 뉴럴 네트워크를 가속기(2320)에서 처리하기 위한 요청에 응답하여 가속기(2320)에 의해 실행 가능한 명령어를 생성할 수 있다. 가속기(2320)는 명령어가 실행되면, 내부 메모리의 워드 폭 및 타겟 연산에 적용되는 필터의 공간 사이즈에 기초하여 결정된 데이터 레이아웃으로 입력 데이터를 패킹하여 내부 메모리에 저장하고, 내부 메모리에서 동일 워드에 저장된 입력 데이터의 부분과 필터의 가중치들 간 타겟 연산을 수행한다. 사용자 단말(2300)은 타겟 연산을 포함한 뉴럴 네트워크를 통해 추론한 결과를 그대로 사용자로 제공하거나, 또는 해당 결과에 기반한 후속 동작을 호스트 프로세서(2310)를 통해 수행할 수 있다.
도 24을 참조하면, 일실시예에 따른 전자 장치는 서버(2400)로 구현될 수 있다. 서버(2400)는 사용자에 의해 제어되는 사용자 단말과 구분되는 별도의 장치로서, 유선 및/또는 무선 네트워크를 통해 사용자 단말과 통신을 수행할 수 있다. 뉴럴 네트워크를 이용하여 추론하고자 하는 데이터는 사용자 단말에서 수집되어 네트워크를 통해 서버(2400)로 전달될 수 있다. 앞서 설명한 것처럼, 호스트 프로세서(2410)는 타겟 연산이 수행되는 뉴럴 네트워크를 가속기(2420)에서 처리하기 위한 요청에 응답하여 가속기(2420)에 의해 실행 가능한 명령어를 생성할 수 있다. 가속기(2420)는 명령어가 실행되면, 내부 메모리의 워드 폭 및 타겟 연산에 적용되는 필터의 공간 사이즈에 기초하여 결정된 데이터 레이아웃으로 입력 데이터를 패킹하여 내부 메모리에 저장하고, 내부 메모리에서 동일 워드에 저장된 입력 데이터의 부분과 필터의 가중치들 간 타겟 연산을 수행한다. 서버(2400)는 타겟 연산을 포함한 뉴럴 네트워크를 통해 추론한 결과를 사용자 단말로 리턴하며, 사용자 단말은 서버(2400)로부터 수신된 추론 결과를 단순히 사용자로 제공하거나, 또는 추론 결과에 기반한 후속 동작을 수행할 수 있다.
이상에서 설명된 실시예들은 하드웨어 구성요소, 소프트웨어 구성요소, 및/또는 하드웨어 구성요소 및 소프트웨어 구성요소의 조합으로 구현될 수 있다. 예를 들어, 실시예들에서 설명된 장치, 방법 및 구성요소는, 예를 들어, 프로세서, 콘트롤러, ALU(arithmetic logic unit), 디지털 신호 프로세서(digital signal processor), 마이크로컴퓨터, FPGA(field programmable gate array), PLU(programmable logic unit), 마이크로프로세서, 또는 명령(instruction)을 실행하고 응답할 수 있는 다른 어떠한 장치와 같이, 하나 이상의 범용 컴퓨터 또는 특수 목적 컴퓨터를 이용하여 구현될 수 있다. 처리 장치는 운영 체제(OS) 및 상기 운영 체제 상에서 수행되는 하나 이상의 소프트웨어 애플리케이션을 수행할 수 있다. 또한, 처리 장치는 소프트웨어의 실행에 응답하여, 데이터를 접근, 저장, 조작, 처리 및 생성할 수도 있다. 이해의 편의를 위하여, 처리 장치는 하나가 사용되는 것으로 설명된 경우도 있지만, 해당 기술분야에서 통상의 지식을 가진 자는, 처리 장치가 복수 개의 처리 요소(processing element) 및/또는 복수 유형의 처리 요소를 포함할 수 있음을 알 수 있다. 예를 들어, 처리 장치는 복수 개의 프로세서 또는 하나의 프로세서 및 하나의 콘트롤러를 포함할 수 있다. 또한, 병렬 프로세서(parallel processor)와 같은, 다른 처리 구성(processing configuration)도 가능하다.
소프트웨어는 컴퓨터 프로그램(computer program), 코드(code), 명령(instruction), 또는 이들 중 하나 이상의 조합을 포함할 수 있으며, 원하는 대로 동작하도록 처리 장치를 구성하거나 독립적으로 또는 결합적으로(collectively) 처리 장치를 명령할 수 있다. 소프트웨어 및/또는 데이터는, 처리 장치에 의하여 해석되거나 처리 장치에 명령 또는 데이터를 제공하기 위하여, 어떤 유형의 기계, 구성요소(component), 물리적 장치, 가상 장치(virtual equipment), 컴퓨터 저장 매체 또는 장치, 또는 전송되는 신호 파(signal wave)에 영구적으로, 또는 일시적으로 구체화(embody)될 수 있다. 소프트웨어는 네트워크로 연결된 컴퓨터 시스템 상에 분산되어서, 분산된 방법으로 저장되거나 실행될 수도 있다. 소프트웨어 및 데이터는 하나 이상의 컴퓨터 판독 가능 기록 매체에 저장될 수 있다.
실시예에 따른 방법은 다양한 컴퓨터 수단을 통하여 수행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 상기 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 상기 매체에 기록되는 프로그램 명령은 실시예를 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다. 컴퓨터 판독 가능 기록 매체의 예에는 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체(magnetic media), CD-ROM, DVD와 같은 광기록 매체(optical media), 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical media), 및 롬(ROM), 램(RAM), 플래시 메모리 등과 같은 프로그램 명령을 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다. 프로그램 명령의 예에는 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드를 포함한다. 상기된 하드웨어 장치는 실시예의 동작을 수행하기 위해 하나 이상의 소프트웨어 모듈로서 작동하도록 구성될 수 있으며, 그 역도 마찬가지이다.
이상과 같이 실시예들이 비록 한정된 도면에 의해 설명되었으나, 해당 기술분야에서 통상의 지식을 가진 자라면 상기를 기초로 다양한 기술적 수정 및 변형을 적용할 수 있다. 예를 들어, 설명된 기술들이 설명된 방법과 다른 순서로 수행되거나, 및/또는 설명된 시스템, 구조, 장치, 회로 등의 구성요소들이 설명된 방법과 다른 형태로 결합 또는 조합되거나, 다른 구성요소 또는 균등물에 의하여 대치되거나 치환되더라도 적절한 결과가 달성될 수 있다.

Claims (20)

  1. 타겟 연산을 수행하는 가속기의 동작 방법에 있어서,
    상기 가속기 내 메모리의 워드 폭(word width) 및 상기 타겟 연산에 적용되는 필터의 공간 사이즈(spatial size)에 기초하여 결정된 데이터 레이아웃으로 입력 데이터를 패킹(packing)하여 상기 메모리에 저장하는 단계; 및
    상기 메모리에서 동일 워드에 저장된 입력 데이터의 부분과 상기 필터의 가중치들 간 상기 타겟 연산을 수행하는 단계
    를 포함하는
    가속기의 동작 방법.
  2. 제1항에 있어서,
    상기 저장하는 단계는
    상기 데이터 레이아웃에 따라 복수의 필터들에 대응하는 입력 데이터를 한 워드로 패킹하여 상기 메모리에 저장하는
    가속기의 동작 방법.
  3. 제2항에 있어서,
    상기 복수의 필터들의 개수는
    상기 필터의 가로 사이즈 및 세로 사이즈, 상기 입력 데이터의 채널수, 상기 필터의 스트라이드 사이즈(stride size) 및 상기 타겟 연산을 수행하는 연산기가 동시에 처리 가능한 피연산자 페어(operand pair)의 개수에 기초하여 결정되는,
    가속기의 동작 방법.
  4. 제1항에 있어서,
    상기 저장하는 단계는
    상기 메모리의 워드 폭 및 상기 필터의 공간 사이즈에 기초하여 결정된 가상 필터의 공간 사이즈 및 스트라이드 사이즈에 따라 im2col 변환을 수행함으로써, 상기 입력 데이터를 패킹하여 상기 메모리에 저장하는,
    가속기의 동작 방법.
  5. 제1항에 있어서,
    상기 타겟 연산을 수행하는 단계는
    상기 메모리에서 동일 워드에 저장된 입력 데이터를 입력 레지스터에 패치(fetch)하고,
    상기 필터의 가중치들을 필터 레지스터에 패치하고,
    상기 입력 레지스터에 패치된 입력 데이터의 제1 부분과 상기 가중치들 간 제1 타겟 연산을 수행하고,
    상기 입력 레지스터에 패치된 입력 데이터의 제2 부분과 상기 가중치들 간 상기 제2 타겟 연산을 수행하는,
    가속기의 동작 방법.
  6. 제5항에 있어서,
    상기 입력 데이터의 상기 제1 부분과 상기 제2 부분은 중복된 데이터를 포함하는,
    가속기의 동작 방법.
  7. 제5항에 있어서,
    상기 타겟 연산을 수행하는 단계는
    상기 제1 타겟 연산에 이용된 가중치들을 먹싱(muxing)하고, 상기 입력 데이터의 상기 제2 부분과 상기 먹싱된 가중치들 간 상기 제2 타겟 연산을 수행하는,
    가속기의 동작 방법.
  8. 제5항에 있어서,
    상기 타겟 연산을 수행하는 단계는
    상기 제1 타겟 연산 후 상기 입력 레지스터에 패치된 상기 입력 데이터의 상기 제2 부분을 먹싱하고, 상기 먹싱된 제2 부분과 상기 가중치들 간 상기 제2 타겟 연산을 수행하는,
    가속기의 동작 방법.
  9. 제5항에 있어서,
    상기 타겟 연산을 수행하는 단계는
    상기 제1 타겟 연산에 이용된 가중치들을 먹싱해서 상기 필터 레지스터에 재저장하고, 상기 입력 데이터의 상기 제2 부분과 상기 재저장된 가중치들 간 상기 제2 타겟 연산을 수행하는,
    가속기의 동작 방법.
  10. 제5항에 있어서,
    상기 타겟 연산을 수행하는 단계는
    상기 제1 타겟 연산 후 상기 입력 레지스터에 패치된 상기 입력 데이터의 상기 제2 부분을 먹싱해서 상기 입력 레지스터에 재저장하고, 상기 재저장된 제2 부분과 상기 가중치들 간 상기 제2 타겟 연산을 수행하는,
    가속기의 동작 방법.
  11. 제1항에 있어서,
    상기 타겟 연산은 상기 가속기에서 실행되는 뉴럴 네트워크에서 수행되는 컨볼루션 연산을 포함하는,
    가속기의 동작 방법.
  12. 제1항에 있어서,
    상기 타겟 연산을 수행하는 단계는
    상기 동일 워드에 저장된 입력 데이터의 부분과 상기 필터의 가중치들이 입력된 멀티-피연산자 MAC(multiplier-accumulator)에서 수행되는,
    가속기의 동작 방법.
  13. 제1항에 있어서,
    상기 가속기는
    상기 타겟 연산이 수행되는 뉴럴 네트워크를 통해 추론하고자 하는 데이터가 입력되는 사용자 단말 또는 상기 사용자 단말로부터 상기 추론하고자 하는 데이터를 수신한 서버에 포함되는,
    가속기의 동작 방법.
  14. 제1항 내지 제13항 중에서 어느 하나의 항의 방법을 실행시키기 위한 프로그램이 기록된 컴퓨터 판독 가능한 저장 매체.
  15. 타겟 연산을 수행하는 가속기에 있어서,
    메모리의 워드 폭 및 상기 타겟 연산에 적용되는 필터의 공간 사이즈에 기초하여 결정된 데이터 레이아웃으로 패킹된 입력 데이터를 저장하는 메모리; 및
    상기 메모리에서 동일 워드에 저장된 입력 데이터의 부분과 상기 필터의 가중치들 간 상기 타겟 연산을 수행하는 연산기
    를 포함하는
    가속기.
  16. 제15항에 있어서,
    상기 메모리는
    상기 데이터 레이아웃에 따른 복수의 필터들에 대응하는 입력 데이터를 패킹하여 동일 워드에 저장하는
    가속기.
  17. 제15항에 있어서,
    상기 메모리는
    상기 메모리의 워드 폭 및 상기 필터의 공간 사이즈에 기초하여 결정된 가상 필터의 공간 사이즈 및 스트라이드 사이즈에 따른 im2col 변형을 수행함으로써 패킹된 상기 입력 데이터를 저장하는,
    가속기.
  18. 제15항에 있어서,
    상기 메모리에서 동일 워드에 저장된 입력 데이터가 패치된 입력 레지스터; 및
    상기 필터의 가중치들이 패치된 필터 레지스터
    를 더 포함하고,
    상기 연산기는
    상기 입력 레지스터에 패치된 상기 입력 데이터의 제1 부분과 상기 가중치들 간 제1 타겟 연산을 수행하고,
    상기 입력 레지스터에 패치된 상기 입력 데이터의 제2 부분과 상기 가중치들 간 상기 제2 타겟 연산을 수행하는,
    가속기.
  19. 제18항에 있어서,
    상기 입력 데이터의 제1 부분과 상기 제2 부분은 중복된 데이터를 포함하는,
    가속기.
  20. 타겟 연산이 수행되는 뉴럴 네트워크를 가속기에서 처리하기 위한 요청에 응답하여 상기 가속기에 의해 실행 가능한 명령어를 생성하는 호스트 프로세서; 및
    상기 명령어가 실행되면, 내부 메모리의 워드 폭 및 상기 타겟 연산에 적용되는 필터의 공간 사이즈에 기초하여 결정된 데이터 레이아웃으로 입력 데이터를 패킹하여 상기 내부 메모리에 저장하고, 상기 내부 메모리에서 동일 워드에 저장된 입력 데이터의 부분과 상기 필터의 가중치들 간 상기 타겟 연산을 수행하는 가속기
    를 포함하는
    전자 장치.
KR1020200110530A 2020-08-31 2020-08-31 가속기, 가속기의 동작 방법 및 이를 포함한 전자 장치 KR20220028899A (ko)

Priority Applications (5)

Application Number Priority Date Filing Date Title
KR1020200110530A KR20220028899A (ko) 2020-08-31 2020-08-31 가속기, 가속기의 동작 방법 및 이를 포함한 전자 장치
US17/182,439 US11741026B2 (en) 2020-08-31 2021-02-23 Accelerator, method of operating an accelerator, and electronic device including an accelerator
CN202110494484.XA CN114118348A (zh) 2020-08-31 2021-05-07 加速器、操作加速器的方法以及包括加速器的电子装置
EP21188191.7A EP3965018A1 (en) 2020-08-31 2021-07-28 Accelerator, method of operating an accelerator, and electronic device including an accelerator
US18/364,872 US20240004809A1 (en) 2020-08-31 2023-08-03 Accelerator, method of operating an accelerator, and electronic device including an accelerator

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020200110530A KR20220028899A (ko) 2020-08-31 2020-08-31 가속기, 가속기의 동작 방법 및 이를 포함한 전자 장치

Publications (1)

Publication Number Publication Date
KR20220028899A true KR20220028899A (ko) 2022-03-08

Family

ID=77103976

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020200110530A KR20220028899A (ko) 2020-08-31 2020-08-31 가속기, 가속기의 동작 방법 및 이를 포함한 전자 장치

Country Status (4)

Country Link
US (2) US11741026B2 (ko)
EP (1) EP3965018A1 (ko)
KR (1) KR20220028899A (ko)
CN (1) CN114118348A (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102647178B1 (ko) * 2023-12-28 2024-03-13 주식회사 모빌린트 합성곱 연산을 위한 방법 및 장치

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11429771B2 (en) * 2020-01-31 2022-08-30 Fotonation Limited Hardware-implemented argmax layer

Family Cites Families (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10255547B2 (en) * 2014-12-04 2019-04-09 Nvidia Corporation Indirectly accessing sample data to perform multi-convolution operations in a parallel processing system
US20180260687A1 (en) 2016-04-26 2018-09-13 Hitachi, Ltd. Information Processing System and Method for Operating Same
US11003985B2 (en) 2016-11-07 2021-05-11 Electronics And Telecommunications Research Institute Convolutional neural network system and operation method thereof
US10417560B2 (en) * 2016-12-01 2019-09-17 Via Alliance Semiconductor Co., Ltd. Neural network unit that performs efficient 3-dimensional convolutions
US10438115B2 (en) * 2016-12-01 2019-10-08 Via Alliance Semiconductor Co., Ltd. Neural network unit with memory layout to perform efficient 3-dimensional convolutions
US10395165B2 (en) * 2016-12-01 2019-08-27 Via Alliance Semiconductor Co., Ltd Neural network unit with neural memory and array of neural processing units that collectively perform multi-word distance rotates of row of data received from neural memory
KR102415508B1 (ko) 2017-03-28 2022-07-01 삼성전자주식회사 컨볼루션 신경망 처리 방법 및 장치
KR102606825B1 (ko) 2017-09-13 2023-11-27 삼성전자주식회사 뉴럴 네트워크 모델을 변형하는 뉴럴 네트워크 시스템, 이를 포함하는 어플리케이션 프로세서 및 뉴럴 네트워크 시스템의 동작방법
US11507429B2 (en) 2017-09-14 2022-11-22 Electronics And Telecommunications Research Institute Neural network accelerator including bidirectional processing element array
US10749502B2 (en) 2017-09-29 2020-08-18 Intel Corporation Apparatus and method for performing horizontal filter operations
US10460416B1 (en) * 2017-10-17 2019-10-29 Xilinx, Inc. Inline image preprocessing for convolution operations using a matrix multiplier on an integrated circuit
US11429848B2 (en) * 2017-10-17 2022-08-30 Xilinx, Inc. Host-directed multi-layer neural network processing via per-layer work requests
CN108108811B (zh) 2017-12-18 2021-07-30 南京地平线机器人技术有限公司 神经网络中的卷积计算方法和电子设备
US11256977B2 (en) 2017-12-29 2022-02-22 Facebook, Inc. Lowering hardware for neural networks
KR102487535B1 (ko) 2018-02-20 2023-01-12 삼성전자주식회사 시스톨릭 배열(Systolic Array)을 이용하여 딥 러닝(Deep Learning) 연산을 수행하는 방법 및 장치
US11188814B2 (en) * 2018-04-05 2021-11-30 Arm Limited Systolic convolutional neural network
US11341397B1 (en) * 2018-04-20 2022-05-24 Perceive Corporation Computation of neural network node
KR102126857B1 (ko) 2018-05-10 2020-06-25 서울대학교산학협력단 행 단위 연산 뉴럴 프로세서 및 이를 이용한 데이터 처리 방법
US11443176B2 (en) * 2018-05-17 2022-09-13 International Business Machines Corporation Acceleration of convolutional neural networks on analog arrays
US11106968B1 (en) * 2018-05-24 2021-08-31 Xilinx, Inc. Circuit arrangements and methods for traversing input feature maps
WO2019236251A1 (en) * 2018-06-04 2019-12-12 Lightmatter, Inc. Convolutional layers for neural networks using programmable nanophotonics
US10411709B1 (en) * 2018-07-25 2019-09-10 Xilinx, Inc. Circuit arrangements and methods for dividing a three-dimensional input feature map
US10572225B1 (en) * 2018-09-26 2020-02-25 Xilinx, Inc. Circuit arrangements and methods for performing multiply-and-accumulate operations
US10970201B2 (en) * 2018-10-24 2021-04-06 Arm Limited System, method and apparatus for data manipulation
EP3674982A1 (en) * 2018-12-27 2020-07-01 IMEC vzw Hardware accelerator architecture for convolutional neural network
US11740870B2 (en) * 2019-03-29 2023-08-29 Stmicroelectronics S.R.L. Convolutional network hardware accelerator device, system and method
US11726950B2 (en) * 2019-09-28 2023-08-15 Intel Corporation Compute near memory convolution accelerator
US11599181B1 (en) * 2019-12-23 2023-03-07 Meta Platforms, Inc. Systems and methods for reducing power consumption of convolution operations of artificial neural networks
US11783163B2 (en) * 2020-06-15 2023-10-10 Arm Limited Hardware accelerator for IM2COL operation

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102647178B1 (ko) * 2023-12-28 2024-03-13 주식회사 모빌린트 합성곱 연산을 위한 방법 및 장치

Also Published As

Publication number Publication date
EP3965018A1 (en) 2022-03-09
US11741026B2 (en) 2023-08-29
CN114118348A (zh) 2022-03-01
US20220066960A1 (en) 2022-03-03
US20240004809A1 (en) 2024-01-04

Similar Documents

Publication Publication Date Title
CN109992743B (zh) 矩阵乘法器
CN110546611A (zh) 通过跳过处理操作来减少神经网络处理器中的功耗
JP7179853B2 (ja) オンチップの計算ネットワーク
US11934826B2 (en) Vector reductions using shared scratchpad memory
US20240004809A1 (en) Accelerator, method of operating an accelerator, and electronic device including an accelerator
CN112633490B (zh) 执行神经网络模型的数据处理装置、方法及相关产品
Que et al. Mapping large LSTMs to FPGAs with weight reuse
US20210319289A1 (en) Frequency domain neural network accelerator
EP3964945A1 (en) Electronic device with storage device implementation
Gonçalves et al. Exploring data size to run convolutional neural networks in low density fpgas
KR20220049325A (ko) 가속기 및 이를 포함한 전자 장치
KR20220114228A (ko) 프로세서, 프로세서의 동작 방법 및 이를 포함한 전자 장치
CN114595811A (zh) 用于执行深度学习操作的方法和设备
JP7495480B2 (ja) 共有スクラッチパッドメモリを用いたベクトル縮小
Que Reconfigurable acceleration of recurrent neural networks
EP4206999A1 (en) Artificial intelligence core, artificial intelligence core system, and loading/storing method of artificial intelligence core system
CN113469333B (zh) 执行神经网络模型的人工智能处理器、方法及相关产品
KR102578762B1 (ko) 뉴럴 프로세서
US11544213B2 (en) Neural processor
US20240184462A1 (en) Electronic device with storage device data conversion
Gupta et al. Trends in Hardware-Based AL and ML
Ha et al. Hardware–Software Codesign of an Adder-Tree Type CNN Accelerator
Ciobanu et al. Separable 2D convolution with polymorphic register files
CN113469365A (zh) 基于神经网络模型的推理和编译方法及其相关产品
KR20220033314A (ko) 호스트 프로세서 및 가속기의 동작 방법 및 이들을 포함한 전자 장치