KR102299084B1 - 하드웨어 가속기의 출력 데이터를 메모리에 저장하는 방법, 하드웨어 가속기의 입력 데이터를 메모리로부터 읽는 방법, 및 이를 위한 하드웨어 가속기 - Google Patents

하드웨어 가속기의 출력 데이터를 메모리에 저장하는 방법, 하드웨어 가속기의 입력 데이터를 메모리로부터 읽는 방법, 및 이를 위한 하드웨어 가속기 Download PDF

Info

Publication number
KR102299084B1
KR102299084B1 KR1020200106462A KR20200106462A KR102299084B1 KR 102299084 B1 KR102299084 B1 KR 102299084B1 KR 1020200106462 A KR1020200106462 A KR 1020200106462A KR 20200106462 A KR20200106462 A KR 20200106462A KR 102299084 B1 KR102299084 B1 KR 102299084B1
Authority
KR
South Korea
Prior art keywords
data
dimension direction
input
array
output
Prior art date
Application number
KR1020200106462A
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 KR1020200106462A priority Critical patent/KR102299084B1/ko
Priority to EP20951679.8A priority patent/EP4202650A1/en
Priority to CN202080106208.5A priority patent/CN116490850A/zh
Priority to PCT/KR2020/015491 priority patent/WO2022045449A1/ko
Application granted granted Critical
Publication of KR102299084B1 publication Critical patent/KR102299084B1/ko

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/10Program control for peripheral devices
    • G06F13/12Program control for peripheral devices using hardware independent of the central processor, e.g. channel or peripheral processor
    • G06F13/122Program control for peripheral devices using hardware independent of the central processor, e.g. channel or peripheral processor where hardware performs an I/O function other than control of data transfer
    • 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
    • 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
    • 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
    • G06F13/1673Details of memory controller using buffers
    • 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/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • 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/3017Runtime instruction translation, e.g. macros
    • G06F9/30178Runtime instruction translation, e.g. macros of compressed or encrypted instructions
    • 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5038Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)
  • Computing Systems (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Memory System (AREA)

Abstract

입력어레이의 제2디멘젼 방향보다 제1디멘젼 방향에 우선순위를 두어 상기 각 요소들을 데이터 연산부에 순차적으로 입력해야 하는 것으로 판단된 경우에, 상기 복수 개의 비압축데이터그룹들 또는 상기 각각의 비압축데이터그룹에 대응하는 복수 개의 압축데이터그룹들을 상기 제2디멘젼 방향보다 상기 제1디멘젼 방향에 우선순위를 두어 메모리로부터 순차적으로 읽어 들이는 데이터 처리방법을 공개한다.

Description

하드웨어 가속기의 출력 데이터를 메모리에 저장하는 방법, 하드웨어 가속기의 입력 데이터를 메모리로부터 읽는 방법, 및 이를 위한 하드웨어 가속기{Method for storing output data of a hardware accelerator, method for reading input date for a hardware accelerator from memory, and a hardware accelerator for the same}
본 발명은 컴퓨팅 기술에 관한 것으로서, 하드웨어 가속기의 입출력 데이터를 효과적으로 관리하는 기술에 관한 것이다.
본 발명의 대상인 하드웨어 가속기의 일종인 신경망 가속기의 구조에 대한 예시를 시작으로 본 발명에 대한 설명을 시작한다.
<신경망>
신경망은 인공지능을 구현하는 기술의 하나로서 이용되는 잘 알려진 기술이다.
도 1은 본 발명의 이해를 돕기 위해 제시한 신경망의 일부 구성을 개념적으로 나타낸 것이다.
일 실시예에 따른 신경망(600)은 복수 개의 레이어들을 포함할 수 있다. 개념적으로, 상기 복수 개의 레이어들 중 제1레이어(610)는 소위 피쳐맵 또는 액티베이션이라고 지칭되는 출력데이터(611)를 출력할 수 있다. 그리고 상기 제1레이어(610)에서 출력한 출력데이터(611)는 제1레이어(610)보다 하류에 있는 제2레이어(620)의 입력데이터로서 제공될 수 있다.
각각의 상기 레이어는, 입력되는 입력데이터를 소정의 출력데이터로 변환하는 데이터 변환 기능모듈 또는 데이터 연산부로서 간주될 수도 있다. 예컨대 제1레이어(610)는 제1레이어(610)에 입력되는 입력데이터(609)를 출력데이터(611)로 변환하는 데이터 변환 기능모듈로서 간주될 수도 있다. 이러한 데이터 변환 기능모듈을 구현하기 위하여, 제1레이어(610)의 구조가 정의되어야 한다. 상기 제1레이어(610)의 구조에 맞추어 제1레이어(610)에 입력되는 입력데이터(609)가 저장되는 입력변수들이 정의되어야 하고, 그리고 제1레이어(610)로부터 출력되는 출력데이터(611)를 나타내는 출력변수들이 정의되어야 한다. 상기 제1레이어(610)는 그 기능을 수행하기 위하여 한 세트의 가중치들(612)을 이용할 수 있다. 상기 한 세트의 가중치들(612)은 상기 입력변수들로부터 상기 출력변수들을 산출하기 위해 상기 입력변수들에게 곱해지는 값들일 수 있다. 상기 한 세트의 가중치(612)들은 신경망(600)이 갖는 다양한 파라미터들 중 하나일 수 있다.
신경망(600) 중 예컨대 제1레이어(610)에 입력되는 입력데이터(609)로부터 제1레이어(610)로부터 출력되는 출력데이터(611)를 산출하기 위한 연산과정은 소프트웨어로서 구현될 수도 있지만 하드웨어로서 구현될 수도 있다.
<신경망 연산의 하드웨어 구현>
도 2는 신경망의 기능을 하드웨어로 구현한 신경망 가속부를 포함하는 신경망 연산장치 및 이를 포함하는 컴퓨팅 장치 중 일부의 주요 구조를 나타낸 것이다.
컴퓨팅 장치(1)는, DRAM(Dynamic Random Access Memory)(10), 신경망 연산장치(neural network operating device)(100), DRAM(10)와 신경망 연산장치(100)를 연결하는 버스(700), 및 버스(700)에 연결된 타 하드웨어들(99)을 포함할 수 있다.
그 밖에 컴퓨팅 장치(1)는 도시되지 않은 전원부, 통신부, 메인 프로세서, 사용자 인터페이스, 저장부, 및 주변 장치부들을 더 포함할 수 있다. 버스(700)는 신경망 연산장치(100)와 타 하드웨어들(99)이 공유할 수도 있다.
신경망 연산장치(100)는 DMA부(Direct Memory Access part)(20), 제어부(40), 내부 메모리(30), 압축부(620), 디코딩부(630), 및 신경망 가속부(60)를 포함할 수 있다.
본 명세서에서 디코딩은 압축해제라고 지칭될 수도 있다. 따라서 디코딩은 영문으로는 decoding 또는 decompress라고 표현될 수 있다.
또한 본 명세서에서 압축은 인코딩이라고 표현될 수도 있다. 따라서 압축은 compress 또는 encoding으로 번역될 수 있다.
신경망 가속부(60)가 동작하기 위해서는 입력어레이(310)가 신경망 가속부(60)의 입력데이터로서 제공되어야 한다.
입력어레이(310)는 다차원의 어레이형태의 데이터의 집합일 수 있다. 입력어레이(310)는 예컨대 도 1에 설명한 입력데이터(609) 및 한 세트의 가중치(612)를 포함할 수 있다. 본 명세서에서 입력어레이는 입력데이터라고 지칭될 수도 있다.
신경망 가속부(60)에게 제공되는 입력어레이(310)는 내부 메모리(30)로부터 출력되는 것일 수 있다.
내부 메모리(30)는 입력어레이(310) 중 적어도 일부 또는 전부를 버스(700)를 통해 DRAM(10)으로부터 제공받을 수 있다. 이때, DRAM(10)에 저장되어 있는 데이터를 내부 메모리(30)로 이동시키기 위하여, 제어부(40)와 DMA부(20)가 내부 메모리(30) 및 DRAM(10)을 제어할 수도 있다.
신경망 가속부(60)가 동작하면 입력어레이(310)를 기초로 출력어레이(330)가 생성될 수 있다.
출력어레이(330)는 다차원의 어레이형태의 데이터의 집합일 수 있다. 본 명세서에서 출력어레이는 출력데이터라고 지칭될 수도 있다.
생성된 출력어레이(330)는 우선 내부 메모리(30)에 저장될 수 있다.
내부 메모리(30)에 저장된 출력어레이(330)는 제어부(40) 및 DMA부(20)의 제어에 의해 DRAM(10)에 기록될 수 있다.
제어부(40)는 DMA부(20), 내부 메모리(30), 및 신경망 가속부(60)의 동작을 총괄하여 제어할 수 있다.
일 구현예에서, 신경망 가속부(60)는 제1시구간 동안에는 예컨대 도 1에 나타낸 제1레이어(610)의 기능을 수행하고, 제2시구간 동안에는 예컨대 도 1에 나타낸 제2레이어(620)의 기능을 수행할 수 있다.
일 실시예에서, 도 2에 나타낸 신경망 가속부(60)는 복수 개 제공되어 각각 제어부(40)에 의해 요청된 연산을 병렬적으로 수행할 수도 있다.
일 구현예에서, 신경망 가속부(60)는 출력어레이(330)의 모든 데이터를 한 번에 출력하지 않고 시간에 따라 주어진 순서에 따라 순차적으로 출력할 수 있다.
압축부(620)는 출력된 출력어레이(330)의 데이터 량을 감소시키도록 출력어레이(330)를 압축하여 내부 메모리(30)에 제공할 수 있다. 결국, 출력어레이(330)는 압축된 상태로 DRAM(10)에 저장될 수 있다.
신경망 가속부(60)에 입력되는 입력어레이(310)는 DRAM(10)으로부터 읽어 들인 것일 수 있다. DRAM(10)으로부터 읽어 들인 데이터는 압축된 것일 수 있으며, 상기 압축된 데이터는 신경망 가속부(60)에 제공되기 전에 디코딩부(630)에 의해 디코딩되어 입력어레이(310)로 전환될 수 있다.
<하드웨어를 이용한 신경망 연산의 특징>
도 2에 나타낸 신경망 가속부(60)가 제1시구간 동안 그 입력어레이(310)로부터 출력어레이(330)를 생성하기 위해 연산 작업을 수행하는 동안, 내부 메모리(30)는 DRAM(10)으로부터 새로운 데이터를 획득하는 것이 바람직하다.
즉, 예컨대, 신경망 가속부(60)가 제1시구간 동안 도 1의 입력어레이(609) 및 제1세트의 가중치(612)를 입력받아 제1레이어(610)의 기능을 수행할 수 있다.
그리고 신경망 가속부(60)가 제2시구간 동안 도 1의 입력어레이(611) 및 제2세트의 가중치(622)를 입력받아 제2레이어(620)의 기능을 수행할 수 있다.
이때, 신경망 가속부(60)가 제1레이어(610)의 기능을 수행하는 동안, 내부 메모리(30)는 입력어레이(611) 및 제2세트의 가중치(622)를 DRAM(10)으로부터 획득하는 것이 바람직하다.
도 3은 도 2의 출력어레이(330)의 구조를 도시화한 것이다.
출력어레이(330)는 다차원의 구조를 갖는 데이터의 집합일 수 있다. 도 3에서는 편의를 위하여 2차원 구조를 갖는 데이터인 것으로 예시하였으나, 이후 설명되는 본 발명의 개념은 출력어레이(330)가 3차원 이상의 구조를 갖는 경우에도 그대로 적용될 수 있다.
일 구현예에서, 출력어레이(330)를 여러 개의 비압축데이터그룹(NCG)으로 분할하여 정의하고, 이 중 제1비압축데이터그룹만을 먼저 내부 메모리(30)에 기록하고, 그 다음, 내부 메모리(30)에 기록된 상기 제1비압축데이터그룹은 DRAM(10)으로 이동된 후 내부 메모리(30)에서 삭제될 수 있다. 그 다음, 출력어레이(330) 중 제2비압축데이터그룹만을 먼저 내부 메모리(30)에 기록하고, 그 다음, 내부 메모리(30)에 기록된 상기 제2비압축데이터그룹은 DRAM(10)으로 이동된 후 내부 메모리(30)에서 삭제될 수 있다. 이러한 방식은 예컨대, 내부 메모리(30)의 크기가 한 세트의 출력어레이(330)를 모두 저장하기에 충분히 크지 않은 경우에 채택될 수 있다.
나아가 출력어레이(330) 중 임의의 비압축데이터그룹(NCG)을 내부 메모리(30)에 기록할 때에, 상기 임의의 비압축데이터그룹(NCG)을 그대로 기록하는 대신, 상기 임의의 비압축데이터그룹(NCG)을 먼저 데이터 압축하여 얻은 압축데이터그룹(CG)을 내부 메모리(30)에 기록할 수 있다. 그 다음 내부 메모리(30)에 기록된 압축데이터그룹(CG)은 DRAM(10)으로 이동될 수 있다.
상기 각 비압축데이터그룹을 압축하여 상기 각각의 압축데이터그룹을 생성하기 위하여 도 2에 도시하지 않은 별도의 데이터 버퍼가 제공될 수도 있다.
도 4는 일부 실시예에서 발생할 수 있는 제약조건으로서 본 발명에서 고려하는 일부 제약조건을 설명하기 위한 다이어그램이다.
도 4의 (a)를 살펴보면, 제1시구간(T1)에서 신경망 가속부(60)는 레이어 k (610)의 기능을 수행하도록 되어 있을 수 있다. 이때, 신경망 가속부(60)는 출력어레이(330)를 출력할 수 있는데, 출력데이터(330)의 각 요소들을 한 번에 출력하지 않고, 도 4에 나타낸 인덱스 1, 2, 3, 4, ...., 15, 16의 순서로(도 4의 (a)의 지그재그 화살표 참고) 출력할 수 있다. 상기 제1시구간(T1)에 출력된 출력어레이(330)는 DRAM(10)에 저장될 수 있다.
그리고 도 4의 (b)를 살펴보면, 제2시구간(T2)에서 신경망 가속부(60)는 레이어 k+1 (620)의 기능을 수행하도록 되어 있을 수 있다. 이를 위하여 신경망 가속부(60)는 DRAM(10)에 기록되어 있던 상기 출력어레이(330)를 입력데이터로서 요구할 수 있다. 이때, 신경망 가속부(60)가 출력어레이(330)의 구성요소들을 인덱스 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16의 순서(도 4의 (b)의 지그재그 화살표 참고)로 입력받아야 하는 제약이 존재할 수 있다.
이러한 제약 하에서, 데이터의 가공 및 입출력이 적절하게 설계되어 있지 않다면, 데이터 처리에 걸리는 시간이 증가하고, 내부 메모리(30)의 활용효율이 떨어지는 문제가 발생할 수 있다. 이러한 문제점을 도 4 및 후술하는 도 5a 내지 도 5c를 참조하여 설명한다.
도 5a 내지 도 5c는 일 실시예에 따른 데이터 처리 방법에 위한 문제점을 설명하기 위하여 제시한 다이어그램이다.
도 5a를 참조하여 설명하면, 제1시구간(T1)에서 신경망 가속부(60)는 레이어 k (610)의 기능을 수행하도록 되어 있을 수 있다. 이때, 신경망 가속부(60)는 출력어레이(330) 중 제1비압축데이터그룹(NCG1)에 속한 인덱스 1 내지 인덱스 8에 해당하는 구성요소들은 순차적으로 출력하여 제1비압축데이터그룹(NCG1)의 출력을 완료할 수 있다. 그 다음, 압축부(620)는 완성된 제1비압축데이터그룹(NCG1)을 압축하여 제1압축데이터그룹(CG1)을 생성할 수 있다. 제1압축데이터그룹(CG1)은 내부 메모리(30)에 잠시 저장되었다고 DRAM(10)으로 이동할 수 있다.
압축부(620)는 데이터 버퍼를 포함할 수 있다.
그 다음, 도 5b를 참조하여 설명하면, 제1시구간(T1)에서, 신경망 가속부(60)는 출력어레이(330) 중 제2비압축데이터그룹(NCG2)에 속한 인덱스 9 내지 인덱스 16에 해당하는 구성요소들은 순차적으로 출력하여 제2비압축데이터그룹(NCG2)의 출력을 완료할 수 있다. 그 다음, 압축부(620)는 완성된 제2비압축데이터그룹(NCG2)을 압축하여 제2압축데이터그룹(CG2)을 생성할 수 있다. 제2압축데이터그룹(CG2)은 내부 메모리(30)에 잠시 저장되었다가 DRAM(10)으로 이동할 수 있다.
이제, 도 5c를 참조하여 설명하면, 제2시구간(T2)에서 신경망 가속부(60)는 레이어 k+1 (620)의 기능을 수행하도록 되어 있을 수 있다. 이때, 상술한 바와 같이, 레이어 k+1 (620)의 기능을 수행하는 신경망 가속부(60)가 인덱스 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16의 순서로 입력받아야 한다는 제약이 있을 수 있다.
이때, DRAM(10)으로부터 제1압축데이터그룹(CG1)의 일부 및 제2압축데이터그룹(CG2)의 일부만을 읽어 들인다면, 이렇게 읽어 들인 데이터만을 이용해서는 신경망 가속부(60)에 데이터를 입력할 수 없다. 왜냐하면 제1비압축데이터그룹(NCG1)을 복원하기 위해서는 제1압축데이터그룹(CG1)의 전체가 필요하고, 제2비압축데이터그룹(NCG2)을 복원하기 위해서는 제2압축데이터그룹(CG2)의 전체가 필요하기 때문이다.
따라서 우선 제1압축데이터그룹(CG1)을 DRAM(10)으로부터 모두 읽어 들여 내부 메모리(30)에 저장하고, 내부 메모리(30)에 저장된 제1압축데이터그룹(CG1)을 디코딩부(630)를 이용하여 복원하여 제1비압축데이터그룹(NCG1)을 준비할 수 있다. 그런데 상기 준비된 제1비압축데이터그룹(NCG1)에는 인덱스 9 및 인덱스 13에 대응하는 요소가 존재하지 않으므로, 인덱스 1 및 인덱스 5에 대응하는 요소를 신경망 가속부(60)에 입력한 다음에 인덱스 9 및 인덱스 13에 대응하는 요소를 신경망 가속부(60)에 입력할 수 없다. 따라서, 이를 해결하기 위하여 결국 제2압축데이터그룹(CG2)를 복원해야만 한다. 결국, 출력어레이(330)를 구성하는 모든 비압축데이터그룹을 복원한 이후에야 신경망 가속부(60)에 데이터 입력을 끊임없이 진행할 수가 없다는 문제가 있다.
이 경우 디코딩부(630)가 출력한 각 그룹별 데이터를 저장해두어야 하는 별도의 버퍼가 요구되거나, 내부 메모리(30)의 일정 공간을 빌려 사용해야 하기 때문에 컴퓨팅 자원의 사용효율이 크게 떨어진다는 문제가 있다. 또한, DRAM(10)으로부터 읽어 들인 데이터를 실시간으로 사용할 수 없다는 문제도 있다.
상술한 내용은 본 발명의 발명자가 본 발명을 창작하기 위한 배경지식으로서 알고 있던 것으로서, 상술한 내용 모두가 본 특허출원의 출원 시점에서 불특정 다수에게 알려진 것으로 간주 되어서는 안 된다. 또한 상술한 내용의 적어도 일부는 본 발명의 실시예들을 구성할 수 있다.
본 발명에서는 상술한 문제점을 해결하기 위하여 하드웨어 가속기의 데이터 연산부가 출력하는 출력어레이의 요소들을 그룹화(파편화)하여 압축하는 방법, 그룹화(파편화)되어 DRAM에 저장되어 있는 데이터들을 불러들이는 스케쥴링 기술을 제공하고자 한다.
본 발명의 일 관점에 따라, 데이터 연산부(610)를 포함하는 하드웨어 가속기(110)가, 상기 데이터 연산부에 입력되어야 하는 입력어레이(310)로서, 복수 개의 비압축데이터그룹들로 이루어진 상기 입력어레이를 처리하는 데이터 처리방법이 제공될 수 있다. 상기 처리방법은, 상기 하드웨어 가속기가, 상기 입력어레이의 제2디멘젼 방향(92)보다 제1디멘젼 방향(91)에 우선순위를 두어 상기 각 요소들을 상기 데이터 연산부에 순차적으로 입력해야 하는 것으로 판단된 경우에, 상기 복수 개의 비압축데이터그룹들 또는 상기 각각의 비압축데이터그룹에 대응하는 복수 개의 압축데이터그룹들을 상기 제2디멘젼 방향보다 상기 제1디멘젼 방향에 우선순위를 두어 메모리(11)로부터 순차적으로 읽어 들이는 단계; 및 상기 하드웨어 가속기가, 상기 제1디멘젼 방향을 따라 배치된 상기 입력어레이의 일렬의 요소들(a series of elements of the input array)이 모두 준비되면, 상기 일렬의 요소들을 상기 데이터 연산부에 입력하는 단계;를 포함한다.
이때, 상기 입력어레이는 2의 디멘젼을 갖는 행렬이거나 또는 3 이상의 디멘젼을 갖는 어레이일 수 있다.
이때, 상기 각 요소는 상기 입력어레이를 구성하는 최소단위의 정보일 수 있다. 예컨대 상기 입력어레이가 2차원 행렬인 경우 상기 각각의 요소는 상기 행렬의 특정 행 및 특정 열에서 교차하는 데이터일 수 있다.
이때, 상기 읽어 들이는 단계는 상기 복수 개의 비압축데이터그룹들 또는 상기 복수 개의 압축데이터그룹들을 순차적으로 읽어 들일 때에 그룹별로 읽어 들일 수 있다.
이때, 상기 입력어레이에는 상기 제2디멘젼 방향을 따라 2개 이상의 데이터그룹들이 정의되어 있을 수 있다.
이때, 상기 메모리에 저장된 상기 입력어레이를 구성하는 상기 복수 개의 비압축데이터그룹들 또는 상기 복수 개의 압축데이터그룹들은, 상기 입력어레이의 상기 제1디멘젼 방향보다 상기 제2디멘젼 방향에 우선순위를 두어 상기 메모리에 순차적으로 저장된 것일 수 있다.
이때, 상기 입력어레이(310)는, 상기 획득하는 단계 이전에, 상기 데이터 연산부가 출력한 출력데이터이며, 상기 출력데이터는 상기 데이터 연산부가 상기 출력어레이의 상기 제1디멘젼 방향보다 상기 제2디멘젼 방향에 우선순위를 두어 출력한 것일 수 있다.
이때, 상기 메모리에 저장된 상기 입력어레이를 구성하는 상기 복수 개의 비압축데이터그룹들 또는 상기 복수 개의 압축데이터그룹들은, 상기 입력어레이의 상기 제2디멘젼 방향보다 상기 제1디멘젼 방향에 우선순위를 두어 상기 메모리에 순차적으로 저장된 것일 수 있다.
이때, 상기 입력어레이(310)는, 상기 획득하는 단계 이전에, 상기 데이터 연산부가 출력한 출력데이터이며, 상기 출력데이터는 상기 데이터 연산부가 상기 출력어레이의 상기 제2디멘젼 방향보다 상기 제1디멘젼 방향에 우선순위를 두어 출력한 것일 수 있다.
이때, 상기 하드웨어 가속기는, 상기 입력어레이의 제2디멘젼 방향(92)보다 제1디멘젼 방향(91)에 우선순위를 두어 상기 각 요소들을 상기 데이터 연산부에 순차적으로 입력해야 하는 것으로 판단된 경우에, 상기 입력어레이를 구성하는 상기 복수 개의 비압축데이터그룹들에 각각 대응하는 복수 개의 압축데이터그룹들을 상기 제2디멘젼 방향보다 상기 제1디멘젼 방향에 우선순위를 두어 메모리(11)로부터 순차적으로 읽어 들이도록 되어 있을 수 있다. 그리고 상기 입력하는 단계는, 상기 읽어 들인 압축데이터그룹들을 각각 디코딩하여 상기 각각의 압축데이터그룹에 대응하는 상기 각각의 비압축데이터그룹(NCG)을 생성하는 단계; 및 상기 생성된 비압축데이터그룹들로부터 상기 제1디멘젼 방향을 따라 배치된 상기 입력어레이의 일렬의 요소들이 모두 준비되면, 상기 일렬의 요소들을 상기 데이터 연산부에 입력하는 단계;를 포함할 수 있다.
본 발명의 다른 관점에 따라, 제1시구간에서, 하드웨어 가속기(110)의 데이터 연산부(610)가 출력어레이를 출력하되, 상기 출력어레이의 제1디멘젼 방향보다 제2디멘젼 방향에 우선순위를 두어 상기 출력어레이의 요소들을 순차적으로 출력하는 단계; 상기 하드웨어 가속기가 상기 출력어레이를 복수 개의 그룹들로 나누어 메모리에 저장하되, 상기 제1디멘젼 방향보다 제2디멘젼 방향에 우선순위를 두어 상기 복수 개의 그룹들을 순차적으로 상기 메모리에 저장하는 단계; 및 제2시구간에서, 상기 하드웨어 가속기가, 상기 메모리에 저장된 상기 복수 개의 그룹들을 상기 데이터 연산부에 입력하기 위한 입력어레이로서 읽어 들여, 상기 데이터 연산부에 입력하는 단계;를 포함하는 데이터 처리방법이 제공될 수 있다. 이때, 상기 입력하는 단계는, 상기 하드웨어 가속기가, 상기 메모리에 저장된 상기 복수 개의 그룹들을 상기 제2디멘젼 방향보다 상기 제1디멘젼 방향에 우선순위를 두어 상기 메모리로부터 순차적으로 읽어 들이는 단계; 및 상기 하드웨어 가속기가, 상기 제1디멘젼 방향을 따라 배치된 상기 입력어레이의 일렬의 요소들이 모두 준비되면, 상기 일렬의 요소들을 상기 데이터 연산부에 입력하는 단계;를 포함한다.
이때, 상기 출력어레이 내에서 상기 제1디멘젼 방향을 따라 제1개수의 그룹들이 정의되고, 상기 출력어레이 내에서 상기 제2디멘젼 방향을 따라 제2개수의 그룹들이 정의되며, 상기 복수 개의 그룹들 중 적어도 일부 또는 전부는 서로 동일한 그룹사이즈를 가지며, 상기 제2디멘젼 방향을 따라 연장된 1개 열에 포함된 데이터그룹들의 전체 크기는, 상기 제1시구간에서 상기 데이터 연산부가 출력하는 상기 출력어레이의 일부를 수용하는 출력버퍼의 크기보다 작거나 같으며, 상기 제1디멘젼 방향을 따라 연장된 1개 열에 포함된 데이터그룹들의 전체 크기는, 상기 제2시구간에서 상기 데이터 연산부가 입력받는 상기 입력어레이의 일부를 수용하는 입력버퍼의 크기보다 작거나 같을 수 있다.
이때, 상기 데이터 연산부는 상기 제2시구간에서 상기 입력어레이의 제2디메젼 방향보다 상기 제1디멘젼방향에 우선순위를 두어 상기 입력어레이의 요소들을 순차적으로 입력받도록 되어 있을 수 있다.
본 발명의 일 관점에 따라, 제어부(40); 및 복수 개의 비압축데이터그룹들(NCG)로 이루어진 입력어레이(310)를 입력받아 처리하는 데이터 연산부(610);를 포함하는 하드웨어 가속기가 제공될 수 있다. 이때, 상기 제어부는, 상기 입력어레이의 제2디멘젼 방향(92)보다 제1디멘젼 방향(91)에 우선순위를 두어 상기 각 요소들을 상기 데이터 연산부에 순차적으로 입력해야 하는 것으로 판단된 경우에, 상기 복수 개의 비압축데이터그룹 또는 상기 복수 개의 비압축데이터그룹에 대응하는 복수 개의 압축데이터그룹들을 상기 제2디멘젼 방향보다 상기 제1디멘젼 방향에 우선순위를 두어 메모리(11)로부터 순차적으로 읽어 들이도록 되어 있고, 그리고 상기 제1디멘젼 방향을 따라 배치된 상기 입력어레이의 일렬의 요소들이 모두 준비되면, 상기 일렬의 요소들을 상기 데이터 연산부에 입력하도록 되어 있다.
이때, 상기 하드웨어 가속기는 디코딩부(630);를 더 포함할 수 있다. 그리고 상기 제어부는, 상기 입력어레이의 제2디멘젼 방향(92)보다 제1디멘젼 방향(91)에 우선순위를 두어 상기 각 요소들을 상기 데이터 연산부에 순차적으로 입력해야 하는 것으로 판단된 경우에, 상기 입력어레이를 구성하는 상기 복수 개의 비압축데이터그룹에 대응하는 복수 개의 압축데이터그룹들을 상기 제2디멘젼 방향보다 상기 제1디멘젼 방향에 우선순위를 두어 메모리(11)로부터 순차적으로 읽어 들이도록 되어 있고, 상기 읽어 들인 복수 개의 압축데이터그룹들을 각각 디코딩하여 상기 각각의 압축데이터그룹에 대응하는 각각의 상기 비압축데이터그룹(NCG)을 생성하도록 되어 있고, 그리고 상기 생성된 비압축데이터그룹들로부터 상기 제1디멘젼 방향을 따라 배치된 상기 입력어레이의 일렬의 요소들이 모두 준비되면, 상기 일렬의 요소들을 상기 데이터 연산부에 입력하도록 되어 있을 수 있다.
이때, 상기 입력어레이에는 상기 제2디멘젼 방향을 따라 2개 이상의 데이터그룹들이 정의되어 있을 수 있다.
이때, 상기 메모리에 저장된 상기 입력어레이를 구성하는 상기 복수 개의 비압축데이터그룹들 또는 상기 복수 개의 압축데이터그룹들은, 상기 입력어레이의 상기 제1디멘젼 방향보다 상기 제2디멘젼 방향에 우선순위를 두어 상기 메모리에 순차적으로 저장된 것일 수 있다.
이때, 상기 입력어레이(310)는, 상기 획득하는 단계 이전에, 상기 데이터 연산부가 출력한 출력데이터이며, 상기 출력데이터는 상기 데이터 연산부가 상기 출력어레이의 상기 제1디멘젼 방향보다 상기 제2디멘젼 방향에 우선순위를 두어 출력한 것일 수 있다.
본 발명의 다른 관점에 따라, 제어부(40); 및 복수 개의 비압축데이터그룹들(NCG)로 이루어진 입력어레이(310)를 입력받아 처리하는 데이터 연산부(610);를 포함하는 하드웨어 가속기가 제공될 수 있다. 이때, 상기 데이터 연산부는 제1시구간에서 출력어레이를 출력하되, 상기 출력어레이의 제1디멘젼 방향보다 제2디멘젼 방향에 우선순위를 두어 상기 출력어레이의 요소들을 순차적으로 출력하도록 되어 있으며, 상기 제어부는, 상기 출력어레이를 복수 개의 그룹들로 나누어 메모리에 저장하되, 상기 제1디멘젼 방향보다 제2디멘젼 방향에 우선순위를 두어 상기 복수 개의 그룹들을 순차적으로 상기 메모리에 저장하도록 되어 있으며, 상기 제어부는 제2시구간에서 상기 메모리에 저장된 상기 복수 개의 그룹들을 상기 데이터 연산부에 입력하기 위한 입력어레이로서 읽어 들여, 상기 데이터 연산부에 입력하는 단계를 수행하도록 되어 있고, 상기 입력하는 단계에서, 상기 제어부가 상기 메모리에 저장된 상기 복수 개의 그룹들을 상기 제2디멘젼 방향보다 상기 제1디멘젼 방향에 우선순위를 두어 상기 메모리로부터 순차적으로 읽어 들이고, 그리고 상기 제1디멘젼 방향을 따라 배치된 상기 입력어레이의 일렬의 요소들이 모두 준비되면 상기 일렬의 요소들을 상기 데이터 연산부에 입력하도록 되어 있다.
이때, 상기 하드웨어 가속기는, 상기 제1시구간에서 상기 데이터 연산부가 출력하는 상기 출력어레이의 일부를 수용하는 출력버퍼; 및 상기 제2시구간에서 상기 데이터 연산부가 입력받는 상기 입력어레이의 일부를 수용하는 입력버퍼;를 더 포함할 수 있다. 그리고 상기 출력어레이 내에서 상기 제1디멘젼 방향을 따라 제1개수의 그룹들이 정의되고, 상기 출력어레이 내에서 상기 제2디멘젼 방향을 따라 제2개수의 그룹들이 정의되며, 상기 복수 개의 그룹들 중 적어도 일부 또는 전부는 서로 동일한 그룹사이즈를 가지며, 상기 제2디멘젼 방향을 따라 연장된 1개 열에 포함된 데이터그룹들의 전체 크기는 상기 출력버퍼의 크기보다 작거나 같으며, 상기 제1디멘젼 방향을 따라 연장된 1개 열에 포함된 데이터그룹들의 전체 크기는 상기 입력버퍼의 크기보다 작거나 같을 수 있다.
본 발명의 또 다른 관점에 따라, 데이터 연산부(610); 압축부(620); 제어부(40); 및 디코딩부(630);를 포함하는, 하드웨어 가속기(110)가 제공될 수 있다. 상기 데이터 연산부(610)는, 제1연산 시구간(T1)(a first operation time period) 동안, 상기 데이터 연산부(610)에 입력되는 제1입력어레이(311)를 기초로 제1출력어레이(331)를 출력하도록 되어 있고, 상기 제1출력어레이(331)는 제1디멘젼 방향(91) 및 제2디멘젼 방향(92)로 각각 N1개 및 N2개의 세그먼트들을 갖는 N1*N2 개의 비압축데이터그룹들(NCG)로 이루어지며(단, N1은 1 이상의 자연수, N2는 2 이상의 자연수), 상기 압축부(620)는, 각각의 상기 비압축데이터그룹(NCG)을 압축하여 N1*N2 개의 압축데이터그룹(CG)들을 생성하도록 되어 있고, 상기 제1디멘젼 방향(91)의 pth엔트리에 속한 N2개의 상기 비압축데이터그룹들(NCG)이 상기 제2디멘젼 방향(92)을 따라 순차적으로 압축된 이후에, 상기 제1디멘젼 방향(91)의 p+1th엔트리(p+1th행)에 속한 N2개의 상기 비압축데이터그룹들(NCG)이 상기 제2디멘젼 방향(92)을 따라 순차적으로 압축되도록 되어 있으며(단, p는 N1 이하의 자연수), 상기 제어부(40)는, 상기 N1*N2 개의 압축데이터그룹들(CG)을 메모리부(30, 11)에 저장하도록 되어 있고, 상기 제어부(40)는, 상기 제2디멘젼 방향(92)의 qth엔트리에 속한 N1개의 상기 압축데이터그룹들(CG)을 상기 제1디멘젼 방향(91)을 따라 순차적으로 상기 메모리부(30, 11)로부터 획득하여 상기 디코딩부(630)에 제공한 이후에, 상기 제2디멘젼 방향(92)의 q+1th엔트리에 속한 N1개의 상기 압축데이터그룹들(CG)을 상기 제1디멘젼 방향(91)을 따라 순차적으로 상기 메모리부(30, 11)로부터 획득하여 상기 디코딩부(630)에 제공하도록 되어 있고, 상기 디코딩부(630)는, 상기 제공된 N1*N2 개의 상기 압축데이터그룹들을 각각 디코딩하여 상기 N1*N2개의 비압축데이터그룹들을 복원하도록 되어 있으며, 상기 데이터 연산부(610)는, 제2연산 시구간(T2) 동안, 상기 디코딩부(630)가 복원한 상기 N1*N2개의 상기 비압축데이터그룹들을 기초로 제2출력어레이(332)를 출력하도록 되어 있다.
이때, 상기 데이터 연산부는, 상기 제1연산 시구간 동안, 상기 제1입력어레이를 처리하여 2차 이상의 디멘젼을 갖는 상기 제1출력어레이를 출력하도록 되어 있으며, 상기 제1출력어레이 중 상기 제1디멘젼 방향(91)의 kth엔트리(kth행)에 속한 요소들을 상기 제2디멘젼 방향(92)을 따라 순차적으로 출력한 이후에 상기 제1디멘젼 방향(91)의 k+1th엔트리(k+1th행)에 속한 요소들을 상기 제2디멘젼 방향(92)을 따라 순차적으로 출력하도록 되어 있을 수 있다.
상기 데이터 연산부는 상기 제2시구간에서 상기 입력어레이의 제2디메젼 방향보다 상기 제1디멘젼방향에 우선순위를 두어 상기 입력어레이의 요소들을 순차적으로 입력받도록 되어 있을 수 있다.
본 발명의 다른 관점에 따라, 제어부(40); 및 데이터 연산부(610);를 포함하는 하드웨어 가속기를 제공할 수 있다. 상기 데이터 연산부는 제1시구간에서 출력어레이를 출력하되, 상기 출력어레이의 제1디멘젼 방향보다 제2디멘젼 방향에 우선순위를 두어 상기 출력어레이의 요소들을 순차적으로 출력하도록 되어 있으며, 상기 제어부는, 상기 출력어레이를 복수 개의 데이터그룹들로 나누어 메모리에 저장하되, 상기 제1디멘젼 방향보다 제2디멘젼 방향에 우선순위를 두어 상기 복수 개의 데이터그룹들을 순차적으로 상기 메모리에 저장하도록 되어 있으며, 상기 제어부는 제2시구간에서 상기 메모리에 저장된 상기 복수 개의 데이터그룹들을 상기 데이터 연산부에 입력하기 위한 입력어레이로서 읽어 들여, 상기 데이터 연산부에 입력하는 단계를 수행하도록 되어 있고, 상기 입력하는 단계에서, 상기 제어부가 상기 메모리에 저장된 상기 복수 개의 데이터그룹들을 상기 제2디멘젼 방향보다 상기 제1디멘젼 방향에 우선순위를 두어 상기 메모리로부터 순차적으로 읽어 들이고, 그리고 상기 제1디멘젼 방향을 따라 배치된 상기 입력어레이의 일렬의 요소들이 모두 준비되면 상기 일렬의 요소들을 상기 데이터 연산부에 입력하도록 되어 있을 수 있다.
이때, 상기 하드웨어 가속기는, 상기 제1시구간에서 상기 데이터 연산부가 출력하는 상기 출력어레이의 일부를 수용하는 출력버퍼; 및 상기 제2시구간에서 상기 데이터 연산부가 입력받는 상기 입력어레이의 일부를 수용하는 입력버퍼를 더 포함할 수 있다. 이때, 상기 제2디멘젼 방향을 따라 연장된 1개 열에 포함된 데이터그룹들의 전체 크기는, 상기 출력버퍼의 크기보다 작거나 같으며, 상기 제1디멘젼 방향을 따라 연장된 1개 열에 포함된 데이터그룹들의 전체 크기는, 상기 입력버퍼의 크기보다 작거나 같을 수 있다.
본 발명의 일 관점에 따라, 상술한 하드웨어 가속기를 포함하는 컴퓨팅 장치가 제공될 수 있다.
본 발명에 따르면 하드웨어 가속기의 데이터 연산부가 출력하는 출력어레이의 요소들을 그룹화(파편화)하는 압축하는 방법, 그룹화(파편화)되어 DRAM에 저장되어 있는 데이터들을 불러들이는 스케쥴링 기술을 제공하고자 한다.
도 1은 본 발명의 이해를 돕기 위해 제시한 신경망의 일부 구성을 개념적으로 나타낸 것이다.
도 2는 신경망의 기능을 하드웨어로 구현한 신경망 가속부를 포함하는 신경망 연산장치 및 이를 포함하는 컴퓨팅 장치 중 일부의 주요 구조를 나타낸 것이다.
도 3은 도 2의 출력어레이(330)의 구조를 도시화한 것이다.
도 4는 일부 실시예에서 발생할 수 있는 제약조건으로서 본 발명에서 고려하는 일부 제약조건을 설명하기 위한 다이어그램이다.
도 5a 내지 도 5c는 일 실시예에 따른 데이터 처리 방법에 위한 문제점을 설명하기 위하여 제시한 다이어그램이다.
도 6은 본 발명의 일 실시예에 따라 제공되는 하드웨어 가속기 및 이를 포함하는 컴퓨팅 장치 중 일부의 주요 구조를 나타낸 것이다.
도 7은 본 발명의 일 실시예에 따라 데이터 연산부가 시간에 따라 동작하는 방식을 예시한 다이어그램이다.
도 8a 및 도 8b는 본 발명의 일 실시예에 따라 데이터 연산부가 출력한 출력어레이를 그룹화하여 압축하는 방법을 설명한 것이고, 도 8c는 본 발명의 일 실시예에 따라 메모리부로부터 압축데이터그룹들을 읽어들이는 순서 및 상기 압축데이터그룹들을 디코딩하는 순서를 나타낸 다이어그램이다.
도 9a 및 도 9b는 본 발명의 다른 실시예에 따라 데이터 연산부가 출력한 출력어레이를 그룹화하여 압축하여 메모리부에 저장하는 순서를 나타낸 것이며, 도 9c는 메모리부에 저장된 그룹들을 읽어들여 압축을 해제(디코딩)하는 순서를 나타낸 것이다.
도 10a, 도 10b, 및 도 10c는 본 발명의 일 실시예에 따른, 각 데이터그룹의 크기와 출력버퍼 및 입력버퍼의 크기의 상호 관계를 설명하기 위한 것이다.
도 11은 본 발명의 일 실시예에 따라 제공되는 신경망 가속부의 입력어레이 또는 출력어레이의 형태를 나타낸 개념도이다.
이하, 본 발명의 실시예를 첨부한 도면을 참고하여 설명한다. 그러나 본 발명은 본 명세서에서 설명하는 실시예에 한정되지 않으며 여러 가지 다른 형태로 구현될 수 있다. 본 명세서에서 사용되는 용어는 실시예의 이해를 돕기 위한 것이며, 본 발명의 범위를 한정하고자 의도된 것이 아니다. 또한, 이하에서 사용되는 단수 형태들은 문구들이 이와 명백히 반대의 의미를 나타내지 않는 한 복수 형태들도 포함한다.
도 6은 본 발명의 일 실시예에 따라 제공되는 하드웨어 가속기 및 이를 포함하는 컴퓨팅 장치 중 일부의 주요 구조를 나타낸 것이다.
컴퓨팅 장치(1)는, 메모리(11), 하드웨어 가속기(110), 메모리(11)와 하드웨어 가속기(110)를 연결하는 버스(700), 및 버스(700)에 연결된 타 하드웨어들(99)을 포함할 수 있다.
그 밖에 컴퓨팅 장치(1)는 도시되지 않은 전원부, 통신부, 메인 프로세서, 사용자 인터페이스, 저장부, 및 주변 장치부들을 더 포함할 수 있다. 버스(700)는 하드웨어 가속기(110)와 타 하드웨어들(99)이 공유할 수도 있다.
하드웨어 가속기(110)는 DMA부(Direct Memory Access part)(20), 제어부(40), 내부 메모리(30), 압축부(620), 디코딩부(630), 데이터 연산부(610), 출력버퍼(640), 및 입력버퍼(650)를 포함할 수 있다.
도 6에서는 디코딩부(630), 압축부(620), 출력버퍼(640), 입력버퍼(650), 및 내부 메모리(30)와는 서로 다른 개별적인 구성요소인 것으로 되어 있지만, 변형된 실시예에서, 디코딩부(630), 압축부(620), 출력버퍼(640), 입력버퍼(650), 및 내부 메모리(30)는 한 개의 단일 기능부로서 제공될 수도 있다.
메모리(11), 하드웨어 가속기(110), 및 데이터 연산부(610)는 예컨대, 각각 도 2에 제시한 DRAM(10), 신경망 연산장치(100), 및 신경망 가속부(60)일 수 있다. 그러나 이에 한정되는 것은 아니다.
데이터 연산부(610)가 동작하기 위해서는 입력어레이(310)가 데이터 연산부(610)에게 제공되어야 한다. 입력어레이(310)는 다차원의 어레이형태의 데이터의 집합일 수 있다.
데이터 연산부(610)에게 제공되는 입력어레이(310)는 내부 메모리(30)로부터 출력되는 것일 수 있다.
내부 메모리(30)는 입력어레이(310) 중 적어도 일부 또는 전부를 버스(700)를 통해 메모리(11)부터 제공받을 수 있다. 이때, 메모리(11)에 저장되어 있는 데이터를 내부 메모리(30)로 이동시키기 위하여, 제어부(40) 및 DMA부(20)가 내부 메모리(30) 및 메모리(11)을 제어할 수도 있다.
데이터 연산부(610)가 동작하면 입력어레이(310)를 기초로 출력어레이(330)가 생성될 수 있다. 출력어레이(330)는 다차원의 어레이형태의 데이터의 집합일 수 있다.
생성된 출력어레이(330)는 우선 내부 메모리(30)에 저장될 수 있다.
내부 메모리(30)에 저장된 출력어레이(330)는 제어부(40) 및 DMA부(20)의 제어에 의해 메모리(11)에 기록될 수 있다.
제어부(40)는 DMA부(20), 내부 메모리(30), 및 데이터 연산부(610)의 동작을 총괄하여 제어할 수 있다.
일 구현예에서, 데이터 연산부(610)는 제1시구간 동안에는 제1기능을 수행하고, 제2시구간 동안에는 제2기능을 수행할 수 있다. 상기 제2기능은 상기 제1기능과는 다를 수 있다.
예컨대, 데이터 연산부(610)는 제1시구간 동안에는 예컨대 도 1에 나타낸 제1레이어(610)의 기능을 수행하고, 제2시구간 동안에는 예컨대 도 1에 나타낸 제2레이어(620)의 기능을 수행할 수 있다.
일 실시예에서, 도 6에 나타낸 데이터 연산부(610)는 복수 개 제공되어 각각 제어부(40)에 의해 요청된 연산을 병렬적으로 수행할 수도 있다.
일 구현예에서, 데이터 연산부(610)은 출력어레이(330)의 모든 데이터를 한 번에 출력하지 않고 시간에 따라 순차적으로 출력할 수 있다.
압축부(620)는 출력된 출력어레이(330)의 데이터량을 감소시키도록 출력어레이(330)를 압축하여 내부 메모리(30)에 제공할 수 있다. 결국, 출력어레이(330)는 압축된 상태의 어레이(340)로 메모리(11)에 저장될 수 있다.
출력버퍼(640)는 출력어레이(330)의 크기보다 작은 저장공간을 갖고 있을 수 있다. 출력어레이(330)를 구성하는 데이터는 시간의 흐름에 따라 순차적으로 출력될 수 있다. 우선, 출력어레이(330) 중 먼저 출력된 일부인 제1서브데이터만이 출력버퍼(640)에 저장될 수 있고, 출력버퍼(640)에 저장된 상기 제1서브데이터는 압축부(620에 의해 압축되어 메모리(11)에게 전달될 수 있다. 그 이후 출력어레이(330) 중 나중에 출력된 다른 일부인 제2서브데이터가 동일한 과정을 거쳐 메모리(11)에게 전달될 수 있다.
데이터 연산부(610)에 입력되는 입력어레이(310)는 메모리(11)부터 읽어 들인 것일 수 있다. 메모리(11)부터 읽어 들인 데이터는 압축된 것일 수 있으며, 데이터 연산부(610)에 제공되기 전에 디코딩부(630)에 의해 디코딩되어 입력어레이(310)로 전환될 수 있다.
입력버퍼(650)는 입력어레이(비압축)(310)의 크기보다 작은 저장공간을 갖고 있을 수 있다. 입력어레이(압축)(320)를 구성하는 데이터는 시간의 흐름에 따라 순차적으로 제공될 수 있다. 우선, 입력어레이(압축)(320) 중 먼저 제공된 일부인 제1서브데이터만이 입력버퍼(650)에 저장될 수 있고, 입력버퍼(650)에 저장된 상기 제1서브데이터는 디코딩부(630)에 의해 디코딩되어 데이터 연산부(610)에게 입력될 수 있다. 그 이후 입력어레이(압축)(320) 중 나중에 제공된 다른 일부인 제2서브데이터가 동일한 과정을 거쳐 데이터 연산부(610)에게 입력될 수 있다.
도 7은 본 발명의 일 실시예에 따라 데이터 연산부가 시간에 따라 동작하는 방식을 예시한 다이어그램이다.
도 8a 및 도 8b는 본 발명의 일 실시예에 따라 데이터 연산부가 출력한 출력어레이를 그룹화하여 압축하는 방법을 설명한 것이다.
이하 도 6, 도 7, 도 8a, 및 도 8b를 함께 참조하여 설명한다.
데이터 연산부(610)는, 제1연산 시구간(T1) 동안 데이터 연산부(610)에 입력되는 제1입력어레이(311)를 기초로 제1출력어레이(331)를 출력하도록 되어 있을 수 있다(도 7).
제1출력어레이(331)는 제1디멘젼 방향(91) 및 제2디멘젼 방향(92)로 각각 N1개 및 N2개의 세그먼트들을 갖는 N1*N2 개의 비압축데이터그룹들로 이루어질 수 있다. 단, N1은 1 이상의 자연수이며 N2는 2 이상의 자연수일 수 있다(도 8).
도 8a에서 제시한 예에서 N1=10이고 N2=2이다. 도 8a에서 점선으로 표시한 각 영역이 한 개의 비압축데이터그룹에 대응한다.
도 8b는 도 8a에 도시한 점선부분만을 표시함으로써 상기 비압축데이터그룹들의 개념을 좀 더 명확하게 나타낸 것이다. 도 8b를 살펴보면 비압축데이터그룹(NCG101) 내지 비압축데이터그룹(NCG120)까지 총 20개의 비압축데이터그룹들이 제시되어 있다. 도 8b와 비교해 보면, 도 8a에서는 도면 상 표현의 제약 때문에 비압축데이터그룹(NCG101) 내지 비압축데이터그룹(NCG104)에 대해서만 참조번호를 제시하였다.
이하, 본 명세서에서 각각의 서로 다른 참조부호로 제시되어 있는 각 비압축데이터그룹을 통칭하여 NCG(Non-Compressed data Group)라는 참조부호를 부여할 수 있다.
압축부(620)는, 각각의 상기 비압축데이터그룹(NCG)을 압축하여 N1*N2 개의 압축데이터그룹(CG)을 생성하도록 되어 있을 수 있다.
도 8b에는, 도 8b에 제시한 20개의 비압축데이터그룹들(NCG) 각각에 대응하는 압축데이터그룹들(CG)이 CG(Compressed Group)라는 참조부호를 이용하여 제시되어 있다.
이하, 본 명세서에서 각각의 서로 다른 참조부호로 제시되어 있는 각 압축데이터그룹을 통칭하여 CG(Compressed data Group)이라는 참조부호를 부여할 수 있다.
본 명세서에서 상술한 NCG와 CG는 통칭하여 데이터그룹(G)이라고 지칭될 수 있다.
임의의 제k비압축데이터그룹이 갖는 데이터량은 상기 임의의 제k비압축데이터그룹에 대응하는 제k압축데이터그룹이 갖는 데이터량보다 크다.
일 실시에에서, 상기 제k압축데이터그룹의 생성을 시작하기 위해서는 상기 제k비압축데이터그룹의 모든 데이터가 준비되어야 할 수 있다. 또한 상기 제k압축데이터그룹으로부터 상기 임의의 제k비압축데이터그룹을 복원하려면 제k압축데이터그룹에 속한 모든 데이터가 요구될 수 있다.
본 발명의 일 실시예에서, 제1디멘젼 방향(91)의 pth엔트리(도 8b의 pth행)에 속한 N2개의 상기 비압축데이터그룹들(NCG)이 상기 제2디멘젼 방향(92)을 따라 순차적으로 압축된 이후에, 상기 제1디멘젼 방향(91)의 p+1th엔트리(도 8b의 p+1th행)에 속한 N2개의 상기 비압축데이터그룹들(NCG)이 상기 제2디멘젼 방향(92)을 따라 순차적으로 압축되도록 되어 있을 수 있다. 이때, p는 N1 이하의 자연수일 수 있다.
즉, 본 발명의 일 실시예에서, 데이터 연산부(610)가 출력한 출력어레이 내에 정의된 비압축데이터그룹들의 압축순서는 제1디멘젼 방향(91)보다 제2디멘젼 방향(92)을 우선으로 한다고 말할 수 있다(The compression order of the plurality of data groups takes priority in the second dimension direction over the first dimension direction). 도 8b에서 상기 비압축데이터그룹들을 압축하는 제1처리순서는 참조부호 CO1으로 지시되어 있다.
이와 관련하여, 도 8b에 제시한 예에서, 한 개의 상기 pth엔트리에는 총 2개의 비압축데이터그룹들이 포함되어 있다. 도 8b에서, 상기 pth엔트리를 예컨대 비압축데이터그룹(NCG101) 및 비압축데이터그룹(NCG102)가 속한 행인 것으로 가정한다면, 상기 pth엔트리와 상기 p+1th엔트리에 속한 비압축데이터그룹들의 압축순서는 G101, G102, G103, G104가 된다.
다시 도 6을 참조하면, 제어부(40)는, 상기 N1*N2 개의 압축데이터그룹들(CG)을 메모리부(13)에 저장하도록 되어 있을 수 있다. 여기서 메모리부(13)는 하드웨어 가속기(110) 내부의 내부 메모리(30) 및 하드웨어 가속기(110) 외부의 메모리(11)를 통칭하는 것일 수 있다. 이러한 구성에서, 실제로 각각의 압축데이터그룹(CG)은 우선 내부 메모리(30)를 거쳐 메모리(11)에 저장될 수 있다. 내부 메모리(30)는 메모리(11)에 비해 메모리 용량이 현저히 작을 수 있다.
다시 도 7을 참조하면, 데이터 연산부(610)는, 제2연산 시구간(T2) 동안 데이터 연산부(610)에 입력되는 제2입력어레이(312)를 기초로 제2출력어레이(332)를 출력하도록 되어 있을 수 있다.
이때, 상기 제2입력어레이(312)는 메모리부(13)에 저장되어 있던 상기 N1*N2 개의 압축데이터그룹들(CG)로부터 획득되는 것일 수 있다.
도 8c는 본 발명의 일 실시예에 따라 메모리부로부터 압축데이터그룹들을 읽어들이는 순서 및 상기 압축데이터그룹들을 디코딩하는 순서를 나타낸 다이어그램이다.
제어부(40)는 메모리부(13)로부터 획득되는 상기 N1*N2 개의 압축데이터그룹들(CG)을 상기 제1처리순서(CO1)와는 다른 순서인 제2처리순서(CO2)에 따라 액세스할 수 있다.
제어부(40)는, 제2디멘젼 방향(92)의 qth엔트리(도 8a의 q번째 열)에 속한 N1개의 상기 압축데이터그룹들(CG)을 상기 제1디멘젼 방향(91)을 따라 순차적으로 상기 메모리부(13)로부터 획득하여 상기 디코딩부(630)에 제공한 이후에, 상기 제2디멘젼 방향(92)의 q+1th엔트리(도 8a의 q+1번째 열)에 속한 N1개의 상기 압축데이터그룹들(CG)을 상기 제1디멘젼 방향(91)을 따라 순차적으로 상기 메모리부(30, 11)로부터 획득하여 상기 디코딩부(630)에 제공하도록 되어 있을 수 있다.
즉, 상기 제2처리순서와 관련하여, 본 발명의 일 실시예에서, 제2연산 시구간(T2)에서 데이터 연산부(610)에 입력되어야 하는 압축데이터그룹들의 디코딩순서는 제2디멘젼 방향(92)보다 제1디멘젼 방향(91)을 우선으로 한다고 말할 수 있다. 다른 말로, 압축데이터그룹들의 디코딩순서에 대하여, 제2디멘젼 방향(92)에 대하여 제1디멘젼 방향(91)이 우선순위를 갖는다.
이와 같이 본 발명의 일 실시예에서 제1연산시구간(T1)에서 생성된 출력어레이에 정의된 비압축데이터그룹/압축데이터그룹을 위한 압축순서와, 상기 출력어레이를 다시 이용하기 위해 재구성하기 위한 디코딩순서와는 다를 수 있다.
또한, 이와 같이 본 발명의 일 실시예에서 제1연산시구간(T1)에서 생성된 출력어레이에 정의된 비압축데이터그룹/압축데이터그룹을 메모리에 기록하는 순서는, 상기 출력어레이를 다시 이용하기 위해 상기 비압축데이터그룹/압축데이터그룹을 상기 메모리로부터 읽어 들이는 순서와 다를 수 있다.
상기 제2처리순서(CO2)는 데이터 연산부(610)가 제2연산 시구간(T2) 동안 입력데이터를 입력받는 순서와 연관되어 있을 수 있다. 예컨대, 제2연산 시구간(T2) 동안, 데이터 연산부(610)가, 데이터 연산부(610)에 입력되어야 하는 입력어레이의 요소들을 제2디멘젼 방향(92)보다 제1디멘젼 방향(91)을 우선하여 입력받도록 되어 있다면, 제2연산 시구간(T2)에서 데이터 연산부(610)에 입력되어야 하는 압축데이터그룹들의 디코딩순서 역시 제2디멘젼 방향(92)보다 제1디멘젼 방향(91)을 우선으로 할 수 있다.
이와 반대로, 제2연산 시구간(T2) 동안, 데이터 연산부(610)가, 데이터 연산부(610)에 입력되어야 하는 입력어레이의 요소들을 제1디멘젼 방향(91)보다 제2디멘젼 방향(92)을 우선하여 입력받도록 되어 있다면, 제2연산 시구간(T2)에서 데이터 연산부(610)에 입력되어야 하는 압축데이터그룹들의 디코딩순서 역시 제1디멘젼 방향(91)보다 제2디멘젼 방향(92)을 우선으로 할 수 있다.
따라서 제어부(40)는, 데이터 연산부(610)가 제2연산 시구간(T2) 동안 데이터 연산부(610)에 입력되어야 하는 입력어레이의 요소들을 입력받는 순서를 미리 알고 있어야 하며, 이러한 순서에 따라 메모리부(13)로부터 상기 압축데이터그룹들을 읽어 들일 수 있다.
상술한 본 발명의 구성에 따라 다음과 같은 효과를 얻을 수 있다. 즉, 도 8c를 참조하면, 데이터 연산부(610)에 입력되어야 하는 입력어레이의 요소들을 제2디멘젼 방향(92)보다 제1디멘젼 방향(91)을 우선하여 입력받도록 되어 있다고 가정한다면, 비압축데이터그룹들(NCG101, NCG103, NCG105, NCG107, NCG109, NCG111, NCG113, NCG115, NCG117, NCG119)만 준비완료 된다면, 데이터 연산부(610)에 필요한 입력데이터를 연속적으로 용이하게 입력할 수 있다. 그리고 데이터 연산부(610)에 상기 데이터를 입력하는 동안, 다른 비압축데이터그룹들(NCG102, NCG104, NCG106, NCG108, NCG110, NCG112, NCG114, NCG116, NCG118, NCG120)을 메모리부(13)로부터 읽어들여 준비할 수 있다.
만일, 예컨대 압축데이터그룹(CG101)과 압축데이터그룹(CG102)가 도 8c에 도시한 것과 같이 2개 이상으로 구분되어 저장되어 있지 않고, 한 개의 단일그룹으로서 압축되어 있다면, 메모리부(13)에 저장되어 있던 상기 출력어레이(331)에 관련된 모든 압축데이터그룹들을 모두 읽어 들여 디코딩을 완료하기 전에는 데이터 연산부(610)에 필요한 입력데이터를 연속적으로 입력하는 데에 문제가 발생할 수 있다.
본 발명의 주요 사상 중 하나는, 메모리부(13)에 그룹 별로 압축되어 저장되어 있는 데이터를, 그 데이터를 입력받아야하는 데이터 연산부의 입력요구조건에 맞추어 최적화하여 준비할 수 있도록, 특정 디멘젼 방향으로 2그룹 이상으로 분할한 후 압축하여 저장한다는 점이다.
또한 본 발명의 주요 사상 중 다른 하나는, 그룹별로 압축되어 저장되어 있는 데이터를 메모리부(13)로부터 읽어 들이기 이전에, 이를 통제하는 제어부(40)가, 상기 데이터를 입력받아야 하는 데이터 연산부의 입력데이터 입력순서를 미리 획득하여, 상기 획득한 입력순서에 따라 각각의 압축데이터그룹을 읽어 들이고, 또한 이 순서에 맞추어 각각의 압축데이터그룹을 디코딩한다는 점이다.
디코딩부(630)는, 상기 제공된 N1*N2 개의 상기 압축데이터그룹들을 각각 디코딩하여 상기 N1*N2개의 비압축데이터그룹들을 복원하도록 되어 있을 수 있다. 제2연산 시구간(T2) 동안, 데이터 연산부(610)는, 디코딩부(630)가 복원한 상기 N1*N2개의 상기 비압축데이터그룹들을 기초로 제2출력어레이(332)를 출력하도록 되어 있을 수 있다.
도 9a 및 도 9b는 본 발명의 다른 실시예에 따라 데이터 연산부가 출력한 출력어레이를 그룹화하여 압축하여 메모리부에 저장하는 순서를 나타낸 것이며, 도 9c는 메모리부에 저장된 그룹들을 읽어들여 압축을 해제(디코딩)하는 순서를 나타낸 것이다.
도 9a, 도 9b, 및 도 9c는 각각, 도 8a, 도 8b, 및 도 8c에 대응한다. 따라서 도 8a, 도 8b, 및 도 8c과 관련하여 제시한 상술한 설명내용은 도 9a, 도 9b, 및 도 9c에도 그대로 적용될 수 있다.
도 9a, 도 9b, 및 도 9c는 본 발명의 실시예에 따라 입력어레이 또는 출력어레이의 요소들을 그룹화하는 다양한 방식을 설명하기 위한 것이며, 한 개의 데이터그룹의 디멘젼은 자유롭게 설정될 수 있다. 단, 특정 방향의 디멘젼을 따라서는 복수 개의 그룹들로 구분될 수 있는 것이 바람직하다.
도 10a, 도 10b, 및 도 10c는 본 발명의 일 실시예에 따른, 각 데이터그룹의 크기와 출력버퍼 및 입력버퍼의 크기의 상호 관계를 설명하기 위한 것이다.
도 10a를 참조하면, 데이터 연산부(610)는 출력어레이(330)를 출력할 수 있다. 출력어레이(330)는 제1디멘젼 방향(91)을 따라 5개(=N1개)의 데이터그룹들로 구분되고, 제2디멘젼 방향(92)을 따라 5개(=N2개)의 데이터그룹들로 구분될 수 있다.
각각의 데이터그룹(NCG)은 제1디멘젼 방향(91)을 따라 복수 개의 요소들을 갖고, 제2디멘젼 방향(92)을 따라 복수 개의 요소들을 가질 수 있다.
출력버퍼(640)는 출력어레이(330)의 전체 크기보다 작을 수 있다.
이때, 데이터 연산부(610)는 출력어레이(330)의 구성요소들을 제2디멘젼 방향(92)에 우선순위를 두어 순차적으로 출력할 수 있다. 도 10c에 나타낸 일 열의 데이터그룹들(OI1)에 표시한 바와 같이, 출력어레이(330)의 각 구성요소들은 (1)에서 (2)의 순서로 순차적으로 출력될 수 있다. 도 10a를 참조하면, 데이터 연산부(610)가 출력어레이(330)의 각 요소들을 순차적으로 출력함에 따라, 각 데이터그룹들은 참조번호 101부터 시작하여 참조번호의 숫자가 증가하는 순서대로 완성될 수 있다.
도 10a에서 제1 행(row)의 데이터그룹들(OI1)이 출력버퍼(640)에 저장되면, 출력버퍼(640)에 저장된 데이터들은 데이터그룹별로 메모리에 전달되거나, 데이터그룹별로 압축되어 메모리에 전달될 수 있다. 그 다음 출력버퍼(640)에 저장되어 있던 데이터는 삭제되고 제2 행의 데이터그룹들(OI2)이 위 과정을 반복할 수 있다.
이때, 상기 (1)에서 (2)의 순서로 순차적으로 출력되는 요소들을 상술한 데이터그룹별로 압축하기 위해서는 출력버퍼(640)의 크기가 제1 행(row)의 데이터그룹들(OI1)의 크기보다 크거나 같아야 한다.
도 10b를 참조하면, 데이터 연산부(610)는 입력어레이(310)를 입력받을 수 있다. 입력어레이(310)는 도 10a에 도시한 출력어레이(330)와 동일한 데이터를 갖고 있는 것일 수 있다.
입력버퍼(650)는 입력어레이(310)의 전체 크기보다 작을 수 있다.
이때, 데이터 연산부(610)는 입력어레이(330)의 구성요소들을 제1디멘젼 방향(91)에 우선순위를 두어 순차적으로 입력받을 수 있다. 도 10c에 나타낸 일 열의 데이터그룹들(II1)에 표시한 바와 같이, 입력어레이(310)의 각 구성요소들은 (3)에서 (4)의 순서로 순차적으로 입력될 수 있다. 도 10b를 참조하면, 입력어레이(310)의 각 그룹들을 제1디멘젼 방향(91)에 우선순위를 두어 메모리로부터 읽어 들임으로써, 데이터그룹(NCG101), 데이터그룹(NCG106), 데이터그룹(NCG111), 데이터그룹(NCG116), 및 데이터그룹(NCG121), ... 의 순서로 데이터그룹들을 확보할 수 있다.
도 10b에서 제1 열(column)의 데이터그룹들(II1)이 입력버퍼(650)에 저장되면, 입력버퍼(650)에 저장된 요소들은 데이터 연산부(610)에 입력될 수 있다. 그 다음 입력버퍼(650)에 저장되어 있던 데이터는 삭제되고 제2 열의 데이터그룹들(II2)이 위 과정을 반복할 수 있다.
이때, 상기 (3)에서 (4)의 순서로 순차적으로 입력되어야 하는 요소들을 준비하기 위해서는, 입력버퍼(640)의 크기가 제1 열(column의 데이터그룹들(II1)의 크기보다 크거나 같아야 한다.
도 10a에서 각 데이터그룹(NCG)이 크기가 모두 동일한 예를 제시하였다. 바람직한 실시예에서는 모든 데이터그룹들의 크기가 서로 동일할 수 있다. 그러나 다른 실시예에서는, 데이터 어레이가 입출력버퍼의 정확히 정수배가 아닌 경우 등이 발생할 수 있기 때문에, 일부 가장자리에 존재하는 데이터그룹들은 더 작은 크기를 가질 수 있다. 예컨대 도 10a에서 가장 오른쪽 가장자리에 존재하는 데이터그룹인 NCG(105), NCG(110), NCG(115), NCG(120), 및 NCG(125)가 첫 번째로 생성되는 데이터그룹인 NCG(101) 보다 더 작은 크기를 가질 수도 있다. 또는 예컨대, 도 10a에서 가장 아래쪽에 존재하는 데이터그룹인 NCG(121), NCG(122), NCG(123), NCG(124), 및 NCG(125)가 첫 번째로 생성되는 데이터그룹인 NCG(101) 보다 더 작은 크기를 가질 수도 있다. 마찬가지의 상황은 도 10b에 나타낸 각 데이터그룹(NCG)에 대해서도 적용될 수 있다는 점은 쉽게 이해될 수 있다.
본 발명의 일 실시예에서, 상기 출력어레이 내에서 상기 제1디멘젼 방향을 따라 제1개수(N1)의 데이터그룹들이 정의되고, 상기 출력어레이 내에서 상기 제2디멘젼 방향을 따라 제2개수(N2)의 데이터그룹들이 정의될 수 있다.
이때, 본 발명의 바람직한 일 실시예에서, 출력어레이 내에서 제2디멘젼 방향을 따라 제2개수의 데이터그룹들이 정의되며, 상기 복수 개의 데이터그룹들 전부는 서로 동일한 그룹사이즈를 가지며, 상기 제2개수에 상기 그룹사이즈를 곱한 값은 상기 출력버퍼의 크기보다 작거나 같을 수 있다. 즉, 상기 제2디멘젼 방향을 따라 연장된 1개 열의 데이터그룹들의 전체 크기는 상기 출력버퍼의 크기보다 작거나 같을 수 있다.
또는, 본 발명의 다른 실시예에서, 출력어레이 내에서 제2디멘젼 방향을 따라 제2개수의 데이터그룹들이 정의되며, 상기 복수 개의 데이터그룹들 중 일부의 데이터그룹들(예컨대 N2-1 개의 데이터그룹들)은 서로 동일한 그룹사이즈를 가지며 나머지 일부의 데이터그룹들(예컨대 상기 제2디멘젼 방향을 따라 제공되는 가장 마지막의 1개의 데이터그룹)은 상기 동일한 그룹사이즈보다 작은 그룹사이즈를 가질 수 있다. 이때, 상기 제2디멘젼 방향을 따라 연장된 1개 열의 데이터그룹들의 전체 크기는 상기 출력버퍼의 크기보다 작거나 같을 수 있다.
또한, 본 발명의 바람직한 일 실시예에서, 출력어레이 내에서 제1디멘젼 방향을 따라 제1개수의 데이터그룹들이 정의되며, 상기 복수 개의 데이터그룹들 전부는 서로 동일한 그룹사이즈를 가지며, 상기 제1개수에 상기 그룹사이즈를 곱한 값은 상기 입력버퍼의 크기보다 작거나 같을 수 있다. 즉, 상기 제1디멘젼 방향을 따라 연장된 1개 열의 데이터그룹들의 전체 크기는 상기 입력버퍼의 크기보다 작거나 같을 수 있다.
또는, 본 발명의 다른 실시예에서, 출력어레이 내에서 제1디멘젼 방향을 따라 제1개수의 데이터그룹들이 정의되며, 상기 복수 개의 데이터그룹들 중 적어도 일부의 데이터그룹들(예컨대 N1-1 개의 데이터그룹들)은 서로 동일한 그룹사이즈를 가지며 나머지 일부의 데이터그룹들(예컨대 상기 제1디멘젼 방향을 따라 제공되는 가장 마지막의 1개의 데이터그룹)은 상기 동일한 그룹사이즈보다 작은 그룹사이즈를 가질 수 있다. 이때, 상기 제1디멘젼 방향을 따라 연장된 1개 열의 데이터그룹들의 전체 크기는 상기 입력버퍼의 크기보다 작거나 같을 수 있다.
도 11은 본 발명의 일 실시예에 따라 제공되는 신경망 가속부의 입력어레이 또는 출력어레이의 형태를 나타낸 개념도이다.
도 1 내지 도 9에서는 출력어레이 및 입력어레이가 2차원 어레이형태를 갖는 것으로 제시하였으나, 출력어레이 또는 입력어레이는 도 10과 같이 3차원 어레이형태를 가질 수 있다. 또한, 도시되지 않은 4차원 이상의 디멘젼을 갖는 어레이형태를 가질 수도 있다. 그러나 본 발명은 상기 출력어레이 또는 입력어레이가 3차원 이상의 다차원인 경우에도 적용될 수 있음을 이해할 수 있다.
본 발명의 변형된 실시예에서는 도 6의 압축부(620) 및 디코딩부(630)가 생략될 수 있다. 즉, 비압축데이터그룹이 압축과정을 거치지 않고 그대로 메모리부(13)에 저장될 수 있다.
상술한 본 발명의 실시예들을 이용하여, 본 발명의 기술 분야에 속하는 자들은 본 발명의 본질적인 특성에서 벗어나지 않는 범위 내에 다양한 변경 및 수정을 용이하게 실시할 수 있을 것이다. 특허청구범위의 각 청구항의 내용은 본 명세서를 통해 이해할 수 있는 범위 내에서 인용관계가 없는 다른 청구항에 결합될 수 있다.

Claims (16)

  1. 데이터 연산부(610)를 포함하는 하드웨어 가속기(110)가, 상기 데이터 연산부에 입력되어야 하는 입력어레이(310)로서, 복수 개의 비압축데이터그룹들로 이루어진 상기 입력어레이를 처리하는 데이터 처리방법으로서,
    상기 하드웨어 가속기가, 상기 입력어레이의 제2디멘젼 방향(92)보다 제1디멘젼 방향(91)에 우선순위를 두어 상기 각 요소들을 상기 데이터 연산부에 순차적으로 입력해야 하는 것으로 판단된 경우에, 상기 복수 개의 비압축데이터그룹들 또는 상기 각각의 비압축데이터그룹에 대응하는 복수 개의 압축데이터그룹들을 상기 제2디멘젼 방향보다 상기 제1디멘젼 방향에 우선순위를 두어 메모리(11)로부터 순차적으로 읽어 들이는 단계; 및
    상기 하드웨어 가속기가, 상기 제1디멘젼 방향을 따라 배치된 상기 입력어레이의 일렬의 요소들(a series of elements of the input array)이 모두 준비되면, 상기 일렬의 요소들을 상기 데이터 연산부에 입력하는 단계;
    를 포함하며,
    상기 메모리에 저장된 상기 입력어레이를 구성하는 상기 복수 개의 비압축데이터그룹들 또는 상기 복수 개의 압축데이터그룹들은, 상기 입력어레이의 상기 제1디멘젼 방향보다 상기 제2디멘젼 방향에 우선순위를 두어 상기 메모리에 순차적으로 저장된 것을 특징으로 하는,
    데이터 처리방법.
  2. 제1항에 있어서, 상기 입력어레이에는 상기 제2디멘젼 방향을 따라 2개 이상의 데이터그룹들이 정의되어 있는 것을 특징으로 하는, 데이터 처리방법.
  3. 삭제
  4. 제1항에 있어서,
    상기 입력어레이(310)는, 상기 읽어 들이는 단계 이전에, 상기 데이터 연산부가 출력한 출력데이터이며,
    상기 출력데이터는 상기 데이터 연산부가 출력어레이의 상기 제1디멘젼 방향보다 상기 제2디멘젼 방향에 우선순위를 두어 출력한 것을 특징으로 하는,
    데이터 처리방법.
  5. 제1항에 있어서,
    상기 하드웨어 가속기는, 상기 입력어레이의 제2디멘젼 방향(92)보다 제1디멘젼 방향(91)에 우선순위를 두어 상기 각 요소들을 상기 데이터 연산부에 순차적으로 입력해야 하는 것으로 판단된 경우에, 상기 입력어레이를 구성하는 상기 복수 개의 비압축데이터그룹들에 각각 대응하는 복수 개의 압축데이터그룹들을 상기 제2디멘젼 방향보다 상기 제1디멘젼 방향에 우선순위를 두어 메모리(11)로부터 순차적으로 읽어 들이도록 되어 있으며,
    상기 입력하는 단계는,
    상기 읽어 들인 압축데이터그룹들을 각각 디코딩하여 상기 각각의 압축데이터그룹에 대응하는 상기 각각의 비압축데이터그룹(NCG)을 생성하는 단계; 및
    상기 생성된 비압축데이터그룹들로부터 상기 제1디멘젼 방향을 따라 배치된 상기 입력어레이의 일렬의 요소들이 모두 준비되면, 상기 일렬의 요소들을 상기 데이터 연산부에 입력하는 단계;
    를 포함하는,
    데이터 처리방법.
  6. 제1시구간에서, 하드웨어 가속기(110)의 데이터 연산부(610)가 출력어레이를 출력하되, 상기 출력어레이의 제1디멘젼 방향보다 제2디멘젼 방향에 우선순위를 두어 상기 출력어레이의 요소들을 순차적으로 출력하는 단계;
    상기 하드웨어 가속기가 상기 출력어레이를 복수 개의 데이터그룹들로 나누어 메모리에 저장하되, 상기 제1디멘젼 방향보다 제2디멘젼 방향에 우선순위를 두어 상기 복수 개의 데이터그룹들을 순차적으로 상기 메모리에 저장하는 단계; 및
    제2시구간에서, 상기 하드웨어 가속기가, 상기 메모리에 저장된 상기 복수 개의 데이터그룹들을 상기 데이터 연산부에 입력하기 위한 입력어레이로서 읽어 들여, 상기 데이터 연산부에 입력하는 단계;
    를 포함하며,
    상기 입력하는 단계는,
    상기 하드웨어 가속기가, 상기 메모리에 저장된 상기 복수 개의 데이터그룹들을 상기 제2디멘젼 방향보다 상기 제1디멘젼 방향에 우선순위를 두어 상기 메모리로부터 순차적으로 읽어 들이는 단계; 및
    상기 하드웨어 가속기가, 상기 제1디멘젼 방향을 따라 배치된 상기 입력어레이의 일렬의 요소들이 모두 준비되면, 상기 일렬의 요소들을 상기 데이터 연산부에 입력하는 단계;
    를 포함하는,
    데이터 처리방법.
  7. 제6항에 있어서,
    상기 제2디멘젼 방향을 따라 연장된 1개 열에 포함된 데이터그룹들의 전체 크기는, 상기 제1시구간에서 상기 데이터 연산부가 출력하는 상기 출력어레이의 일부를 수용하는 출력버퍼의 크기보다 작거나 같으며,
    상기 제1디멘젼 방향을 따라 연장된 1개 열에 포함된 데이터그룹들의 전체 크기는, 상기 제2시구간에서 상기 데이터 연산부가 입력받는 상기 입력어레이의 일부를 수용하는 입력버퍼의 크기보다 작거나 같은,
    데이터 처리방법.
  8. 제7항에 있어서, 상기 데이터 연산부는 상기 제2시구간에서 상기 입력어레이의 제2디메젼 방향보다 상기 제1디멘젼방향에 우선순위를 두어 상기 입력어레이의 요소들을 순차적으로 입력받도록 되어 있는, 데이터 처리방법.
  9. 제어부(40); 및 복수 개의 비압축데이터그룹들(NCG)로 이루어진 입력어레이(310)를 입력받아 처리하는 데이터 연산부(610);를 포함하며,
    상기 제어부는,
    상기 입력어레이의 제2디멘젼 방향(92)보다 제1디멘젼 방향(91)에 우선순위를 두어 상기 각 요소들을 상기 데이터 연산부에 순차적으로 입력해야 하는 것으로 판단된 경우에, 상기 복수 개의 비압축데이터그룹 또는 상기 복수 개의 비압축데이터그룹에 대응하는 복수 개의 압축데이터그룹들을 상기 제2디멘젼 방향보다 상기 제1디멘젼 방향에 우선순위를 두어 메모리(11)로부터 순차적으로 읽어 들이도록 되어 있고, 그리고
    상기 제1디멘젼 방향을 따라 배치된 상기 입력어레이의 일렬의 요소들이 모두 준비되면, 상기 일렬의 요소들을 상기 데이터 연산부에 입력하도록 되어 있으며,
    상기 메모리에 저장된 상기 입력어레이를 구성하는 상기 복수 개의 비압축데이터그룹들 또는 상기 복수 개의 압축데이터그룹들은, 상기 입력어레이의 상기 제1디멘젼 방향보다 상기 제2디멘젼 방향에 우선순위를 두어 상기 메모리에 순차적으로 저장된 것을 특징으로 하는,
    하드웨어 가속기.
  10. 제9항에 있어서, 상기 입력어레이에는 상기 제2디멘젼 방향을 따라 2개 이상의 데이터그룹들이 정의되어 있는 것을 특징으로 하는, 하드웨어 가속기.
  11. 삭제
  12. 제9항에 있어서,
    상기 입력어레이(310)는, 상기 복수 개의 비압축데이터그룹 또는 상기 복수 개의 압축데이터그룹들을 상기 메모리로부터 순차적으로 읽어 들이기 이전에, 상기 데이터 연산부가 출력한 출력데이터이며,
    상기 출력데이터는 상기 데이터 연산부가 출력어레이의 상기 제1디멘젼 방향보다 상기 제2디멘젼 방향에 우선순위를 두어 출력한 것을 특징으로 하는,
    하드웨어 가속기.
  13. 제9항, 제10항, 및 제12항 중 어느 한 항의 하드웨어 가속기를 포함하는, 컴퓨팅 장치.
  14. 제어부(40); 및 데이터 연산부(610);를 포함하며,
    상기 데이터 연산부는 제1시구간에서 출력어레이를 출력하되, 상기 출력어레이의 제1디멘젼 방향보다 제2디멘젼 방향에 우선순위를 두어 상기 출력어레이의 요소들을 순차적으로 출력하도록 되어 있으며,
    상기 제어부는, 상기 출력어레이를 복수 개의 데이터그룹들로 나누어 메모리에 저장하되, 상기 제1디멘젼 방향보다 제2디멘젼 방향에 우선순위를 두어 상기 복수 개의 데이터그룹들을 순차적으로 상기 메모리에 저장하도록 되어 있으며,
    상기 제어부는 제2시구간에서 상기 메모리에 저장된 상기 복수 개의 데이터그룹들을 상기 데이터 연산부에 입력하기 위한 입력어레이로서 읽어 들여, 상기 데이터 연산부에 입력하는 단계를 수행하도록 되어 있고,
    상기 입력하는 단계에서, 상기 제어부가 상기 메모리에 저장된 상기 복수 개의 데이터그룹들을 상기 제2디멘젼 방향보다 상기 제1디멘젼 방향에 우선순위를 두어 상기 메모리로부터 순차적으로 읽어 들이고, 그리고 상기 제1디멘젼 방향을 따라 배치된 상기 입력어레이의 일렬의 요소들이 모두 준비되면 상기 일렬의 요소들을 상기 데이터 연산부에 입력하도록 되어 있는,
    하드웨어 가속기.
  15. 제14항에 있어서,
    상기 제1시구간에서 상기 데이터 연산부가 출력하는 상기 출력어레이의 일부를 수용하는 출력버퍼; 및
    상기 제2시구간에서 상기 데이터 연산부가 입력받는 상기 입력어레이의 일부를 수용하는 입력버퍼;
    를 더 포함하며,
    상기 제2디멘젼 방향을 따라 연장된 1개 열에 포함된 데이터그룹들의 전체 크기는, 상기 출력버퍼의 크기보다 작거나 같으며,
    상기 제1디멘젼 방향을 따라 연장된 1개 열에 포함된 데이터그룹들의 전체 크기는, 상기 입력버퍼의 크기보다 작거나 같은 것을 특징으로 하는,
    하드웨어 가속기.
  16. 제14항 내지 제15항 중 어느 한 항의 하드웨어 가속기를 포함하는, 컴퓨팅 장치.
KR1020200106462A 2020-08-24 2020-08-24 하드웨어 가속기의 출력 데이터를 메모리에 저장하는 방법, 하드웨어 가속기의 입력 데이터를 메모리로부터 읽는 방법, 및 이를 위한 하드웨어 가속기 KR102299084B1 (ko)

Priority Applications (4)

Application Number Priority Date Filing Date Title
KR1020200106462A KR102299084B1 (ko) 2020-08-24 2020-08-24 하드웨어 가속기의 출력 데이터를 메모리에 저장하는 방법, 하드웨어 가속기의 입력 데이터를 메모리로부터 읽는 방법, 및 이를 위한 하드웨어 가속기
EP20951679.8A EP4202650A1 (en) 2020-08-24 2020-11-06 Method for storing output data of hardware accelerator in memory, method for reading input data of hardware accelerator from memory, and hardware accelerator therefor
CN202080106208.5A CN116490850A (zh) 2020-08-24 2020-11-06 将硬件加速器的输出数据存储于存储器的方法,从存储器读取硬件加速器的输入数据的方法及为其的硬件加速器
PCT/KR2020/015491 WO2022045449A1 (ko) 2020-08-24 2020-11-06 하드웨어 가속기의 출력 데이터를 메모리에 저장하는 방법, 하드웨어 가속기의 입력 데이터를 메모리로부터 읽는 방법, 및 이를 위한 하드웨어 가속기

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020200106462A KR102299084B1 (ko) 2020-08-24 2020-08-24 하드웨어 가속기의 출력 데이터를 메모리에 저장하는 방법, 하드웨어 가속기의 입력 데이터를 메모리로부터 읽는 방법, 및 이를 위한 하드웨어 가속기

Publications (1)

Publication Number Publication Date
KR102299084B1 true KR102299084B1 (ko) 2021-09-07

Family

ID=77796904

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020200106462A KR102299084B1 (ko) 2020-08-24 2020-08-24 하드웨어 가속기의 출력 데이터를 메모리에 저장하는 방법, 하드웨어 가속기의 입력 데이터를 메모리로부터 읽는 방법, 및 이를 위한 하드웨어 가속기

Country Status (4)

Country Link
EP (1) EP4202650A1 (ko)
KR (1) KR102299084B1 (ko)
CN (1) CN116490850A (ko)
WO (1) WO2022045449A1 (ko)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20180048938A (ko) * 2015-09-03 2018-05-10 퀄컴 인코포레이티드 하드웨어-가속화된 스토리지 압축
KR102038390B1 (ko) * 2018-07-02 2019-10-31 한양대학교 산학협력단 고효율 병렬 처리를 위한 인공 신경망 모듈 및 이의 스케쥴링 방법
JP2020521195A (ja) * 2017-05-19 2020-07-16 グーグル エルエルシー ニューラルネットワーク処理のスケジューリング

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8572251B2 (en) * 2008-11-26 2013-10-29 Microsoft Corporation Hardware acceleration for remote desktop protocol
US10330773B2 (en) * 2016-06-16 2019-06-25 Texas Instruments Incorporated Radar hardware accelerator

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20180048938A (ko) * 2015-09-03 2018-05-10 퀄컴 인코포레이티드 하드웨어-가속화된 스토리지 압축
JP2020521195A (ja) * 2017-05-19 2020-07-16 グーグル エルエルシー ニューラルネットワーク処理のスケジューリング
KR102038390B1 (ko) * 2018-07-02 2019-10-31 한양대학교 산학협력단 고효율 병렬 처리를 위한 인공 신경망 모듈 및 이의 스케쥴링 방법

Also Published As

Publication number Publication date
EP4202650A1 (en) 2023-06-28
WO2022045449A1 (ko) 2022-03-03
CN116490850A (zh) 2023-07-25

Similar Documents

Publication Publication Date Title
US11127167B2 (en) Efficient matrix format suitable for neural networks
Tian et al. Cusz: An efficient gpu-based error-bounded lossy compression framework for scientific data
US11651224B2 (en) Method for formatting a weight matrix, accelerator using the formatted weight matrix, and system including the accelerator
JP3378257B2 (ja) 希薄データセットをネスト状分割コード化するシステム及び方法
CN112292816A (zh) 处理核心数据压缩和存储系统
WO2022037257A1 (zh) 卷积计算引擎、人工智能芯片以及数据处理方法
CN112200300A (zh) 卷积神经网络运算方法及装置
US11791838B2 (en) Near-storage acceleration of dictionary decoding
US11948069B2 (en) Compression of neural network activation data
CN109993293B (zh) 一种适用于堆叠式沙漏网络的深度学习加速器
US9137336B1 (en) Data compression techniques
JP6834097B1 (ja) 推論のニューラルネットワークアクセラレータのハードウェア固有分割
CN114503125A (zh) 结构化剪枝方法、系统和计算机可读介质
Wang et al. Application-driven compression for visualizing large-scale time-varying data
CN116521611A (zh) 一种深度学习处理器的泛化架构设计方法
JP6911949B2 (ja) 情報処理装置、制御方法、及びプログラム
KR102299084B1 (ko) 하드웨어 가속기의 출력 데이터를 메모리에 저장하는 방법, 하드웨어 가속기의 입력 데이터를 메모리로부터 읽는 방법, 및 이를 위한 하드웨어 가속기
KR102384587B1 (ko) 하드웨어 가속기의 출력 데이터를 압축하는 방법, 하드웨어 가속기로의 입력 데이터를 디코딩하는 방법, 및 이를 위한 하드웨어 가속기
CN115480919A (zh) 卷积优化运算方法、装置、计算机设备及存储介质
Wu et al. Accelerating a lossy compression method with fine-grained parallelism on a gpu
JP2022182225A (ja) データ処理システムおよびデータ処理方法
JPH09160898A (ja) 粒子座標及び時系列粒子座標圧縮方法
CN113642724B (zh) 一种高带宽存储的cnn加速器
CN212873459U (zh) 一种用于数据压缩存储的系统
EP4137972A1 (en) Accelerator to reduce data dimensionality and associated systems and methods

Legal Events

Date Code Title Description
E701 Decision to grant or registration of patent right
GRNT Written decision to grant