본 발명의 대상인 하드웨어 가속기의 일종인 신경망 가속기의 구조에 대한 예시를 시작으로 본 발명에 대한 설명을 시작한다.
<신경망>
신경망은 인공지능을 구현하는 기술의 하나로서 이용되는 잘 알려진 기술이다.
도 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)이 갖는 다양한 파라미터들 중 하나일 수 있다. 상기 한 세트의 가중치(612)는 결정되어 있는 레이어에 대한 상수일 수 있는데, 실제 구현예에서는 상기 한 세트의 가중치(612)는 상기 레이어 외부의 메모리에 저장되어 있다가, 상기 레이어가 동작할 때에 상기 메모리로부터 상기 레이어에게 입력될 수 있다. 즉, 구현예에 따라서는 상기 한 세트의 가중치(612) 역시 상기 레이어에 입력되는 데이터로 취급될 수도 있다.
신경망(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)의 입력데이터로서 제공되어야 한다.
일 실시예에서, 특정 연산 시구간에서 신경망 가속부(60)는 신경망의 모든 레이어의 기능을 수행하는 것이 아니라, 특정 한 개의 레이어만의 기능을 수행하도록 되어 있을 수 있다.
입력어레이(310)는 다차원의 어레이형태의 데이터의 집합일 수 있다. 입력어레이(310)는 예컨대 도 1에 설명한 입력데이터(609) 및 한 세트의 가중치(612)를 포함할 수 있다. 본 명세서에서 입력어레이는 입력데이터라고 지칭될 수도 있다.
신경망 가속부(60)에게 제공되는 입력어레이(310)는 내부 메모리(30)로부터 출력되는 것일 수 있다.
일 실시예에서 상기 내부 메모리(30)는 상기 신경망 가속부(60)가 구현된 웨이퍼와 동일한 웨이퍼 상에 제공된 것일 수 있다. 예컨대 도 2에 나타낸 신경망 연산장치(100)로 표현된 블록 내부의 기능모듈들은 모두 동일한 웨이퍼 상에서 구현된 것일 수도 있다.
내부 메모리(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) 및 이와 연관된 기능모듈들은 신경망 연산장치(100) 내에서 복수 개 제공되어 각각 제어부(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에 도시하지 않은 별도의 데이터 버퍼가 제공될 수도 있다.
도 4a는 일부 실시예에서 발생할 수 있는 제약조건으로서 본 발명에서 고려하는 일부 제약조건을 설명하기 위한 다이어그램이다.
도 4a의 (a)를 살펴보면, 제1시구간(T1)에서 신경망 가속부(60)는 레이어 k (610)의 기능을 수행하도록 되어 있을 수 있다. 이때, 신경망 가속부(60)는 출력어레이(330)를 출력할 수 있는데, 출력데이터(330)의 각 요소들을 한 번에 출력하지 않고, 도 4a에 나타낸 인덱스 1, 2, 3, 4, ...., 15, 16의 순서로(도 4a의 (a)의 지그재그 화살표 참고) 출력할 수 있다. 상기 제1시구간(T1)에 출력된 출력어레이(330)는 DRAM(10)에 저장될 수 있다.
그리고 도 4a의 (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의 순서(도 4a의 (b)의 지그재그 화살표 참고)로 입력받아야 하는 제약이 존재할 수 있다.
도 4b는 도 4a와는 다른 조건에서의 데이터 입출력 특성을 설명하는 도면이다.
도 4b의 (a)를 살펴보면, 신경망 가속부(60)가 출력어레이(330)를 출력할 때에 도 4b에 나타낸 인덱스 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16의 순서로(도 4b의 (a)의 지그재그 화살표 참고) 출력할 수 있다.
그리고 도 4b의 (b)를 살펴보면, 제2시구간(T2)에서 신경망 가속부(60)가 출력어레이(330)의 구성요소들을 인덱스 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15, 4, 8, 12, 16의 순서(도 4b의 (b)의 지그재그 화살표 참고)로 입력받을 수 있다.
도 5a 내지 도 5d는 일 실시예에 따라 신경망 가속부(60)의 출력어레이(330)를 여러 그룹으로 분할하고, 분할된 각 그룹의 데이터를 압축하여 저장하는 방법을 나타낸 것이다.
도 5a를 참조하여 설명하면, 제1시구간(T1)에서 신경망 가속부(60)는 레이어 k (610)의 기능을 수행하도록 되어 있을 수 있다. 이때, 신경망 가속부(60)는 출력어레이(330) 중 제1비압축데이터그룹(NCG1)에 속한 인덱스 1, 5, 9, 13, 14, 2, 6, 10, 및 14에 해당하는 구성요소들은 순차적으로 출력하여 제1비압축데이터그룹(NCG1)의 출력을 완료할 수 있다. 그 다음, 압축부(620)는 완성된 제1비압축데이터그룹(NCG1)을 압축하여 제1압축데이터그룹(CG1)을 생성할 수 있다. 제1압축데이터그룹(CG1)은 내부 메모리(30)에 잠시 저장되었다가 DRAM(10)으로 이동할 수 있다.
압축부(620)는 출력 데이터 버퍼를 포함할 수 있다. 또는 상기 출력 데이터 버터는 압축부(620)에 외부에 별도의 기능모듈로서 제공될 수도 있다.
그 다음, 도 5b를 참조하여 설명하면, 제1시구간(T1)에서, 신경망 가속부(60)는 출력어레이(330) 중 제2비압축데이터그룹(NCG2)에 속한 인덱스 3, 7, 11, 15, 4, 8, 12, 및 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)을 읽어 들여 내부 메모리(30)에 저장한 다음, 내부 메모리(30)에 저장된 제1압축데이터그룹(CG1)을 디코딩하여 제1비압축데이터그룹(NCG1)을 생성할 수 있다.
이때, 도 5d에 나타낸 것과 같이, 만일 제1비압축데이터그룹(NCG1)의 각 구성요소가 생성되는 순서가 동작클럭(6301)에 따라 인덱스 14, 10, 6, 2, 13, 9, 5, 1의 순서로 생성된다면, 인덱스 1의 데이터가 신경망 가속부(60)에 입력되기 위해서는 제1압축데이터그룹(CG1)의 디코딩을 시작한 시점으로부터 총 8개의 클럭들을 기다려야 한다. 이렇게 되면 신경망 가속부(60)에 데이터를 입력하는 과정에서 레이턴시가 발생하게 된다는 문제가 있다.
상술한 내용은 본 발명의 발명자가 본 발명을 창작하기 위한 배경지식으로서 알고 있던 것으로서, 상술한 내용 모두가 본 특허출원의 출원 시점에서 불특정 다수에게 알려진 것으로 간주 되어서는 안 된다. 또한 상술한 내용의 적어도 일부는 본 발명의 실시예들을 구성할 수 있다.
이하, 본 발명의 실시예를 첨부한 도면을 참고하여 설명한다. 그러나 본 발명은 본 명세서에서 설명하는 실시예에 한정되지 않으며 여러 가지 다른 형태로 구현될 수 있다. 본 명세서에서 사용되는 용어는 실시예의 이해를 돕기 위한 것이며, 본 발명의 범위를 한정하고자 의도된 것이 아니다. 또한, 이하에서 사용되는 단수 형태들은 문구들이 이와 명백히 반대의 의미를 나타내지 않는 한 복수 형태들도 포함한다.
도 6a는 본 발명의 일 실시예에 따라 제공되는 하드웨어 가속기 및 이를 포함하는 컴퓨팅 장치 중 일부의 주요 구조를 나타낸 것이다.
컴퓨팅 장치(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)를 포함할 수 있다.
도 6a에서는 디코딩부(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)의 기능을 수행할 수 있다.
일 실시예에서, 도 6a에 나타낸 데이터 연산부(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)에게 입력될 수 있다.
도 6b는 본 발명의 일 실시예에 따라 데이터 연산부가 시간에 따라 동작하는 방식을 예시한 다이어그램이다.
데이터 연산부(610)는, 제1연산 시구간(T1) 동안 데이터 연산부(610)에 입력되는 제1입력어레이(311)를 기초로 제1출력어레이(331)를 출력하도록 되어 있을 수 있다.
데이터 연산부(610)는, 제2연산 시구간(T2) 동안 데이터 연산부(610)에 입력되는 제2입력어레이(312)를 기초로 제2출력어레이(332)를 출력하도록 되어 있을 수 있다.
이때, 상기 제2입력어레이(312)는 상기 제1출력어레이(331)와 동일한 것일 수 있다. 다만, 제1출력어레이(331)는 압축되어 메모리에 저장되었다가, 상기 메모리로부터 다시 디코딩되어 상기 제2입력어레이(312)로서 제공될 수 있다.
<실시예 1>
도 7a 내지 도 7e는 본 발명의 일 실시예에 따라 제공되는 데이터 압축 방법을 설명하기 위해 제공된 것이다.
도 7a는 본 발명의 일 실시예에 따라 제1연산 시구간에서 데이터 연산부로부터 출력되는 출력어레이의 구조를 나타낸 것이다.
도 7a에 나타낸 출력어레이(비압축)(330)는 제1연산 시구간(T1)에서 데이터 연산부(610)로부터 출력된 것으로서 총 100개의 비압축구성요소들을 포함하고 있다. 각각의 상기 비압축구성요소들은 실수값 또는 허수값을 가질 수 있으며, 압축되지 않은 값이다.
도 7a에서는 출력어레이(비압축)(330)가 제1디멘젼 방향(91)을 따라 N1(=1)개의 비압축데이터그룹들(NCG)로 구분될 수 있고, 제2디멘젼 방향(92)을 따라 N2(=5)개의 비압축데이터그룹들(NCG)로 구분될 수 있다. 각각의 상기 비압축데이트그룹들은 복수 개의 비압축구성요소들로 이루어질 수 있다.
도 7b 및 도 7c는 출력어레이(비압축)(330)를 구성하는 비압축구성요소들이 데이터 연산부(610)로부터 순차적으로 출력되는 순서를 나타낸 것이다. 데이터 연산부(610)는 제1디멘젼 방향(91)보다 제2디멘젼 방향(92)에 우선순위를 두어 상기 비압축구성요소들을 출력한다. 즉, 도 7b에서 제k행에 속한 비압축구성요소들이 좌측에서 우측으로 순차적으로 출력된 다음, 제k+1행에 속한 비압축구성요소들이 좌측에서 우측으로 순차적으로 출력될 수 있다.
도 7c를 살펴보면, 비압축구성요소들의 인덱스 1, 2, 3, ... 의 순서로 순차적으로 출력되다가, 인덱스 92까지 출력되면 비로소 제1비압축데이터그룹(NCG101)이 완전히 준비될 수 있다.
제1비압축데이터그룹(NCG101)의 적어도 일부 또는 전부가 준비되면, 압축부(620)는, 제1비압축데이터그룹(NCG101)을 압축하여 제1압축데이터그룹(CG101)을 생성할 수 있다.
본 발명의 바람직한 일 실시예에서는, 제1비압축데이터그룹(NCG101)를 구성하는 모든 비압축구성요소들이 준비되지 않더라도, 준비된 일부의 비압축구성요소들만으로 압축을 수행할 수 있다.
그리고 제1압축데이터그룹(CG101)을 구성하는 복수 개의 압축구성요소들은 한 순간에 생성되는 것이 아니라, 순차적으로 생성될 수 있다.
제1비압축데이터그룹(NCG101)에 속한 비압축구성요소들이 인덱스 92까지 모두 출력되면 제1비압축데이터그룹(NCG101)로부터 제1압축데이터그룹(CG101)을 생성하는 과정을 완료할 수 있다.
도 7d를 참조하여 설명하면, 제어부(40)는, 압축부(620)로 하여금, 출력어레이(압축)(340)에 포함된 압축구성요소들을 제1디멘젼 방향(91)에 우선순위를 두어 순차적으로 생성하도록 할지, 아니면 제2디멘젼 방향(91)에 우선순위를 두어 순차적으로 생성하도록 할지 여부를 결정할 수 있다.
한편, 데이터 연산부(610)는, 제1연산 시구간(T1) 이후의 시구간인 제2연산 시구간(T2)에서, 완성된 제1압축데이터그룹(CG101)을 디코딩하여 복원된 제1비압축데이터그룹(NCG101)에 속한 비압축구성요소들을 입력받을 수 있다.
만일, 데이터 연산부(610)가, 제2연산 시구간(T2)에서, 상기 비압축구성요소들을 제1디멘젼 방향(91)에 우선순위를 두어 입력받도록 되어 있다면, 제어부(40)는, 압축부(620)로 하여금, 상기 압축구성요소들을 제1디멘젼 방향(91)에 우선순위를 두어 순차적으로 생성하도록 제어할 수 있다. 이와 달리, 데이터 연산부(610)가, 제2연산 시구간(T2)에서, 상기 비압축구성요소들을 제2디멘젼 방향(92)에 우선순위를 두어 입력받도록 되어 있다면, 제어부(40)는, 압축부(620)로 하여금, 상기 압축구성요소들을 제2디멘젼 방향(92)에 우선순위를 두어 순차적으로 생성하도록 제어할 수 있다. 제어부(40)는 상술한 두 가지 경우를 구분할 수 있어야 한다.
따라서, 제어부(40)는, 데이터 연산부(610)가 제2연산 시구간(T2)에서 상기 비압축구성요소들을 제1디멘젼 방향(91)과 제2디멘젼 방향(92) 중 어느 것에 우선순위를 두어 순차적으로 입력받을지에 대한 정보를 미리 획득해야 할 수 있다. 이러한 정보는 제어부(40)에 설정되어 있을 수도 있고, 또는 시간에 따라 동적으로 제어부(40)가 획득하도록 되어 있을 수도 있다.
도 7d에서는 데이터 연산부(610)가, 제2연산 시구간(T2)에서, 상기 비압축구성요소들을 제1디멘젼 방향(91)에 우선순위를 두어 입력받도록 되어 있는 시나리오를 가정하였다. 생성된 각각의 압축데이터그룹들은 각각 내부 메모리(30)를 거쳐 메모리(11)에게 저장될 수 있다.
도 7e는 본 발명의 일 실시예에 따라, 한 개의 비압축데이터그룹을 압축하여 압축데이터그룹을 생성하는 방법을 나타낸 것이다.
도 7e는 제1압축데이터그룹(CG101)의 압축구성요소들을 제1디멘젼 방향(91)에 우선순위를 두어 생성하는 예를 나타낸 것이다.
도 7e의 (a)에 나타낸 것과 같이, 제1압축데이터그룹(CG101)에서 제1디멘젼 방향(91)에 우선순위를 두어 첫 번째로 생성되는 제1압축구성요소(ex: 인덱스=1)는 제1비압축데이터그룹(NCG101)에서 제1디멘젼 방향(91)에 우선순위를 두어 카운트되는 첫 번째 인덱스를 갖는 제1비압축구성요소(ex: 인덱스=1)를 기초로 생성될 수 있다.
도 7e의 (b)에 나타낸 것과 같이, 제1압축데이터그룹(CG101)에서 제1디멘젼 방향(91)에 우선순위를 두어 두 번째로 생성되는 압축구성요소(ex: 인덱스=11)는 제1비압축데이터그룹(NCG101)에서 제1디멘젼 방향(91)에 우선순위를 두어 카운트되는 두 번째 인덱스를 갖는 제2비압축구성요소(ex: 인덱스=11) 및 상기 두 번째로 생성되는 압축구성요소(ex: 인덱스=11)를 생성하는 시점까지 이미 사용되었던 제1비압축데이터그룹(NCG101)의 비압축구성요소들(ex: 인덱스 1)만을 기초로 생성될 수 있다.
도 7e의 (c)에 나타낸 것과 같이, 제1압축데이터그룹(CG101)에서 제1디멘젼 방향(91)에 우선순위를 두어 k 번째로 생성되는 압축구성요소(ex: 인덱스=51)는 ① 제1비압축데이터그룹(NCG101)에서 제1디멘젼 방향(91)에 우선순위를 두어 카운트되는 k 번째 인덱스를 갖는 제k비압축구성요소(ex: 인덱스=51), ② 상기 k 번째로 생성되는 압축구성요소(ex: 인덱스=51)를 생성하는 시점까지 이미 사용되었던 제1비압축데이터그룹(NCG101)의 비압축구성요소들(ex: 인덱스 1, 11, 21, 31, 및 41), 및 ③ 상기 k 번째로 생성되는 압축구성요소(ex: 인덱스=51)를 생성하는 시점까지 이미 생성되어 있는 제1압축데이터그룹(CG101)의 압축구성요소들(ex: 인덱스 1, 11, 21, 31, 및 41)만을 기초로 생성될 수 있다.
즉, 상기 제1비압축데이터그룹(NCG101)에서 제1디멘젼 방향(91)에 우선순위를 두어 카운트되는 k 번째 인덱스를 갖는 제k비압축구성요소는 반드시 이용하되, 제1비압축데이터그룹(NCG101)의 비압축구성요소들(ex: 인덱스 1, 11, 21, 31, 및 41) 및 제1압축데이터그룹(CG101)의 압축구성요소들(ex: 인덱스 1, 11, 21, 31, 및 41) 중 적어도 일부 또는 전체를 이용하여 상기 k 번째로 생성되는 압축구성요소를 생성할 수 있다.
도 7e의 (d)에 나타낸 것과 같이, 제1압축데이터그룹(CG101)에서 제1디멘젼 방향(91)에 우선순위를 두어 p 번째로 생성되는 압축구성요소(ex: 인덱스=62)는 제1비압축데이터그룹(NCG101)에서 제1디멘젼 방향(91)에 우선순위를 두어 카운트되는 p 번째 인덱스를 갖는 제p비압축구성요소(ex: 인덱스=62) 및 상기 p 번째로 생성되는 압축구성요소(ex: 인덱스=62)를 생성하는 시점까지 이미 사용되었던 제1비압축데이터그룹(NCG101)의 비압축구성요소들(ex: 인덱스 1, 11, 21, 31, 41, 51, 61, 71, 81, 91, 2, 12, 22, 32, 42, 및 52)만을 기초로 생성될 수 있다.
도 8a 내지 도 8b는 본 발명의 일 실시예에 따라 제공되는 데이터 디코딩 방법을 설명하기 위해 제공된 것이다.
도 8a에 나타낸 입력어레이(압축)(320)는 제2연산 시구간(T2)에서 데이터 연산부(610)에게 입력되어야 하는 것으로서, 총 5개의 압축데이터그룹들(CG)을 포함하고 있다. 각각의 압축데이터그룹들(CG)들은 내부 메모리(30)를 통해 메모리(11)로부터 디코딩부(630)에게 순차적으로 제공될 수 있다. 도 8a에 도시한 입력어레이(압축)(320)는 도 7d의 메모리(11)에 저장된 출력어레이(압축)(340)과 동일한 것일 수 있다.
도 8a에서는 입력어레이(압축)(320)가 제1디멘젼 방향(91)을 따라 N1(=1)개의 압축데이터그룹들(CG)로 구분될 수 있고, 제2디멘젼 방향(92)을 따라 N2(=5)개의 압축데이터그룹들(CG)로 구분될 수 있다.
도 8b에 나타낸 것과 같이, 디코딩부(630)는 입력어레이(압축)(320)로부터 입력어레이(비압축)(310)를 복원할 수 있다. 도 8b에 나타낸 것과 같이, 복원된 입력어레이(비압축)(310)에 속한 비압축구성요소들은 제2디멘젼 방향(92)보다 제1디멘젼 방향(91)에 우선순위를 두어 데이터 연산부(610)에 입력될 수 있다.
도 8a를 살펴보면, 제1압축데이터그룹(CG101)을 메모리(11)로부터 읽어온 후, 제1압축데이터그룹(CG101)(320)으로부터 제1비압축데이터그룹(NCG101)(310)을 복원하면 데이터 연산부(610)에 제1비압축데이터그룹(NCG101)(310)에 속한 비압축구성요소들을 제1디멘젼 방향에 우선순위를 두어 순차적으로 입력할 수 있다.
이때, 제1비압축데이터그룹(NCG101)(310)을 구성하는 비압축구성요소들은 한 순간에 복원되는 것이 아니라, 순차적으로 복원될 수 있다.
도 8b를 참조하여 설명하면, 제어부(40)는, 디코딩부(630)로 하여금, 상기 비압축구성요소들을 제1디멘젼 방향(91)에 우선순위를 두어 순차적으로 복원하도록 할 수 있다.
도 8c는 제1비압축데이터그룹(NCG101)의 비압축구성요소들을 제1디멘젼 방향(91)에 우선순위를 두어 복원하는 예를 나타낸 것이다.
도 8c의 (a)에 나타낸 것과 같이, 제1비압축데이터그룹(NCG101)에서 제1디멘젼 방향(91)에 우선순위를 두어 첫 번째로 복원되는 제1비압축구성요소(ex: 인덱스=1)는 제1압축데이터그룹(CG101)에서 제1디멘젼 방향(91)에 우선순위를 두어 카운트되는 첫 번째 인덱스를 갖는 제1압축구성요소(ex: 인덱스=1)를 기초로 복원될 수 있다.
도 8c의 (b)에 나타낸 것과 같이, 제1비압축데이터그룹(CG101)에서 제1디멘젼 방향(91)에 우선순위를 두어 두 번째로 복원되는 비압축구성요소(ex: 인덱스=11)는 제1압축데이터그룹(CG101)에서 제1디멘젼 방향(91)에 우선순위를 두어 카운트되는 두 번째 인덱스를 갖는 제2압축구성요소(ex: 인덱스=11) 및 상기 두 번째로 복원되는 비압축구성요소(ex: 인덱스=11)를 복원하는 시점까지 이미 복원되어 있던 제1비압축데이터그룹(NCG101)의 비압축구성요소들(ex: 인덱스 1)만을 기초로 복원될 수 있다.
도 8c의 (c)에 나타낸 것과 같이, 제1비압축데이터그룹(NCG101)에서 제1디멘젼 방향(91)에 우선순위를 두어 k 번째로 복원되는 비압축구성요소(ex: 인덱스=51)는 제1압축데이터그룹(CG101)에서 제1디멘젼 방향(91)에 우선순위를 두어 카운트되는 k 번째 인덱스를 갖는 제k압축구성요소(ex: 인덱스=51) 및 상기 k 번째로 복원되는 비압축구성요소(ex: 인덱스=51)를 복원하는 시점까지 이미 복원되어 있던 제1비압축데이터그룹(NCG101)의 비압축구성요소들(ex: 인덱스 1, 11, 21, 31, 및 41)만을 기초로 복원될 수 있다.
도 8c의 (d)에 나타낸 것과 같이, 제1비압축데이터그룹(CG101)에서 제1디멘젼 방향(91)에 우선순위를 두어 p 번째로 복원되는 비압축구성요소(ex: 인덱스=62)는 제1압축데이터그룹(CG101)에서 제1디멘젼 방향(91)에 우선순위를 두어 카운트되는 p 번째 인덱스를 갖는 제p압축구성요소(ex: 인덱스=62) 및 상기 p 번째로 복원되는 비압축구성요소(ex: 인덱스=62)를 복원하는 시점까지 이미 복원되어 있던 제1비압축데이터그룹(NCG101)의 비압축구성요소들(ex: 인덱스 1, 11, 21, 31, 41, 51, 61, 71, 81, 91, 2, 12, 22, 32, 42, 및 52)만을 기초로 복원될 수 있다.
도 7e를 통해 설명한 것과 같이, 특정 압축데이터그룹에서 제1디멘젼 방향(91)에 우선순위를 두어 p 번째로 생성되는 압축구성요소는, 특정 비압축데이터그룹에서 제1디멘젼 방향(91)에 우선순위를 두어 카운트되는 p 번째 인덱스를 갖는 제p비압축구성요소 및 상기 p 번째로 생성되는 압축구성요소를 생성하는 시점까지 이미 사용되었던 상기 특정 비압축데이터그룹 비압축구성요소들 만을 기초로 생성될 수 있다.
도 8c를 통해 설명한 것과 같이, 특정 비압축데이터그룹에서 제1디멘젼 방향(91)에 우선순위를 두어 p 번째로 복원되는 비압축구성요소는, 특정 압축데이터그룹에서 제1디멘젼 방향(91)에 우선순위를 두어 카운트되는 p 번째 인덱스를 갖는 제p압축구성요소 및 상기 p 번째로 복원되는 비압축구성요소를 복원하는 시점까지 이미 복원되었던 상기 특정 비압축데이터그룹의 비압축구성요소들 만을 기초로 복원될 수 있다.
이렇게 함으로써, 상기 특정 비압축데이터그룹에 속한 모든 비압축구성요소들을 모두 복원한 상태가 아니더라도, 상기 특정 압축데이터그룹으로부터 상기 비압축구성요소들을 복원하면서, 실시간으로 상기 복원된 비압축구성요소들을 데이터 연산부에 제공할 수 있다는 효과가 있다.
상술한 실시예 1은 본 발명의 기본 사상을 설명한 것이다. 후술하는 실시예 2는 본 발명의 바람직한 일 실시예에 관한 것이다.
<실시예 2>
도 9a 내지 도 9d는 본 발명의 다른 실시예에 따라 제공되는 데이터 압축 방법을 설명하기 위해 제공된 것이다.
도 9a에 나타낸 출력어레이(비압축)(330)는 도 7a에 나타낸 출력어레이(비압축)(330)와 동일하다. 제1연산 시구간(T1)에 데이터 연산부로부터 출력된 출력어레이(비압축)(330)는 제2연산 시구간(T2)에 데이터 연산부로 입력되어야 하는 입력어레이(310)와 동일할 수 있다.
다만, 도 9a에서는 출력어레이(비압축)(330)가 제1디멘젼 방향(91)을 따라 N1(=2)개의 비압축데이터그룹들(NCG)로 구분될 수 있고, 제2디멘젼 방향(92)을 따라 N2(=5)개의 비압축데이터그룹들(NCG), 즉 복수 개의 비압축데이터그룹들(NCG)로 구분될 수 있다는 점만이 다르다. 이와 같은 차이점을 제외하고는, 도 9a에 나타낸 내용은 도 7a에 관한 내용과 동일하다.
도 9b를 살펴보면, 비압축구성요소들이 데이터 연산부로부터 인덱스 1, 2, 3, ... 의 순서로 순차적으로 출력되다가, 인덱스 42까지 출력되면 비로소 제1비압축데이터그룹(NCG101)이 완전히 준비될 수 있다. 이러한 점을 제외하고는, 도 9b에 나타낸 내용은 도 7c에 관한 내용과 동일하다.
도 9c에 제시한 내용은, 비압축데이턱그룹 및 압축데이터그룹의 크기가 도 7d에 나타낸 것과 차이가 있다는 점을 제외하고는 도 7d에 관한 내용과 동일하다.
도 9d에 제시한 내용은, 비압축데이터그룹 및 압축데이터그룹의 크기에서 차이가 있다는 점을 제외하고는 도 7e에 관한 내용과 동일하다.
이와 같이, 도 9a 내지 도 9d 및 이에 관한 내용은 상술한 도 7a 내지 도 7e에 관한 내용으로부터 자명하게 이해될 수 있다.
도 10a 내지 도 10d는 본 발명의 다른 실시예에 따라 제공되는 데이터 디코딩 방법을 설명하기 위해 제공된 것이다.
도 10a에 나타낸 입력어레이(압축)(320)는 제2연산 시구간(T2)에서 데이터 연산부(610)에게 입력되어야 하는 것으로서, 총 10개의 압축데이터그룹들(CG)을 포함하고 있다. 압축데이터그룹들(CG)들은 내부 메모리(30)를 통해 메모리(11)로부터 디코딩부(630)에게 순차적으로 제공될 수 있다. 도 10a에 도시한 입력어레이(압축)(320)는 도 9c에서 메모리(11)에 저장된 출력어레이(압축)(340)과 동일한 것일 수 있다.
도 10b에 나타낸 것과 같이, 디코딩부(630)는 입력어레이(압축)(320)로부터 입력어레이(비압축)(310)를 복원할 수 있다. 도 10b에 나타낸 것과 같이, 복원된 입력어레이(비압축)(310)에 속한 비압축구성요소들은 제2디멘젼 방향(92)보다 제1디멘젼 방향(91)에 우선순위를 두어 데이터 연산부(610)에 입력될 수 있다. 따라서 다시 도 10a를 참조하여 설명하면, 압축데이터그룹들(CG)들은 CG101, CG106, CG102, CG107, CG103, CG108, CG104, CG109, CG105, CG110의 순서로 메모리(11)로부터 획득될 수 있다. 즉, 압축데이터그룹들(CG)들도 제2디멘젼 방향(92)보다 제1디멘젼 방향(91)에 우선순위를 두어 메모리(11)로부터 획득될 수 있다.
도 10a를 살펴보면, 제1압축데이터그룹(CG101) 및 제6압축데이터그룹(CG106)을 메모리(11)로부터 읽어온 후, 제1비압축데이터그룹(NCG101) 및 제6비압축데이터그룹(NCG106)을 복원하면, 제1비압축데이터그룹(NCG101) 및 제6비압축데이터그룹(NCG106)에 속한 비압축구성요소들을 제1디멘젼 방향에 우선순위를 두어 데이터 연산부(610)에 순차적으로 입력할 수 있다.
이때, 제1비압축데이터그룹(NCG101) 또는 제6비압축데이터그룹(NCG106)을 구성하는 비압축구성요소들은 한 순간에 복원되는 것이 아니라, 순차적으로 복원될 수 있다.
도 10b를 참조하여 설명하면, 제어부(40)는, 디코딩부(630)로 하여금, 비압축데이터그룹에 속한 상기 비압축구성요소들을 제1디멘젼 방향(91)에 우선순위를 두어 순차적으로 복원하도록 할 수 있다.
도 10c 및 도 10d는 제1비압축데이터그룹(NCG101)의 비압축구성요소들을 제1디멘젼 방향(91)에 우선순위를 두어 복원하고, 제6비압축데이터그룹(NCG106)의 비압축구성요소들을 제1디멘젼 방향(91)에 우선순위를 두어 복원하는 예를 나타낸 것이다.
도 10c 및 도 10d에서 비압축구성요소들을 복원하는 원리는, 도 8c에서 설명한 원리와 동일하다.
이때, 도 8c에 설명한 방법과 도 10c 및 도 10d에서 설명하는 방법은 다음과 같은 차이가 있다.
즉, 도 8c에서 설명한 방법에 따르면, 한 개의 비압축데이터그룹(NCG)를 모두 복원한 후에 다른 비압축데이터그룹(NCG)를 복원하더라도 상관없다.
그러나 도 10c 및 도 10d에서는 제1비압축데이터그룹(NCG101)의 일부만을 복원한 상태에서, 제1비압축데이터그룹(NCG101)의 다른 부분을 복원하는 것을 멈추고, 그 대신 제6비압축데이터그룹(NCG106)의 일부의 복원을 시작한다. 또한, 제6비압축데이터그룹(NCG106)의 일부만을 복원한 상태에서 제6비압축데이터그룹(NCG106)의 다른 부분을 복원하는 것을 멈추고, 그 대신 제1압축데이터그룹(NCG101)의 다른 부분의 복원을 시작한다. 그리고 제1압축데이터그룹(NCG101)을 모두 복원한 후에, 다시 제6비압축데이터그룹(NCG106)의 다른 부분을 모두 복원한다.
즉, 본 발명의 다른 실시예는 다음과 같은 특징을 갖는다.
첫째, 제2연산 시구간에서 데이터 연산부에 입력되어야 하는 입력어레이(압축)는 적어도 제1디멘젼과 제2디멘젼을 갖는다.
둘째, 상기 입력어레이(압축)는 상기 제1디멘젼 방향을 따라 복수 개의 압축데이터그룹들(CG)을 포함한다. 또한, 입력어레이(압축)는 상기 제2디멘젼 방향을 따라 복수 개의 압축데이터그룹들(CG)을 포함할 수 있다.
셋째, 상기 입력어레이(압축)로부터 복원된 입력어레이(비압축)에 속한 비압축구성요소들이 상기 제1디멘젼 방향에 우선순위를 두어 상기 데이터 연산부에 순차적으로 입력되며, 상기 압축데이터그룹들(CG)들도 상기 제1디멘젼 방향에 우선순위를 두어 메모리(11)로부터 순차적으로 획득될 수 있다.
넷째, 상기 각각의 압축데이터그룹들로부터 복원된 각각의 비압축데이터그룹들은 상기 제1디멘젼 방향을 따라 복수 개의 비압축구성요소들을 갖고, 그리고 상기 제2디멘젼 방향을 따라 복수 개의 비압축구성요소들을 가질 수 있다.
다섯째, 상기 제2디멘젼 방향의 한 지점에서 제1디멘젼 방향을 따라 정렬되는 복수 개의 비압축데이터그룹들에 속한 비압축구성요소들을 디코딩한다. 이때, 상기 제2디멘젼 방향의 특정 지점에서 제1디멘젼 방향을 따라 복수 개의 비압축데이터그룹들에 걸쳐 정렬되는 일 열의 비압축구성요소들은 상기 제1디멘젼 방향을 따라 순차적으로 디코딩된다.
여섯째, 상기 제1디멘젼 방향과는 다른 제2디멘젼 방향의 제2지점에서 상기 제1디멘젼 방향을 따라 정렬되는 임의의 비압축데이터그룹(NCG)에 속한 임의의 구성요소를 디코딩하기 이전에, 상기 제2디멘젼 방향의 제1지점에서 상기 제1디멘젼 방향을 따라 정렬되는 모든 복수 개의 비압축데이터그룹(NCG)들에 속한 모든 비압축구성요소들을 디코딩하도록 되어 있을 수 있다.
일곱째, 상기 제2디멘젼 방향의 한 지점에서 상기 제1디멘젼 방향을 따라 정렬된 상기 복수 개의 비압축데이터그룹들 중 특정 비압축데이터그룹에서 제1디멘젼 방향(91)에 우선순위를 두어 p 번째로 복원되는 비압축구성요소는 상기 특정 압축데이터그룹에서 제1디멘젼 방향(91)에 우선순위를 두어 카운트되는 p 번째 인덱스를 갖는 제p압축구성요소 및 상기 p 번째로 복원되는 비압축구성요소를 복원하는 시점까지 이미 복원되었던 상기 특정 비압축데이터그룹의 비압축구성요소들만을 기초로 복원될 수 있다.
여덟째, 상기 특정 압축데이터그룹에서 제1디멘젼 방향(91)에 우선순위를 두어 p 번째로 생성되는 압축구성요소는, 상기 특정 비압축데이터그룹에서 제1디멘젼 방향(91)에 우선순위를 두어 카운트되는 p 번째 인덱스를 갖는 제p비압축구성요소 및 상기 p 번째로 생성되는 압축구성요소를 생성하는 시점까지 이미 사용되었던 상기 특정 비압축데이터그룹 비압축구성요소들만을 기초로 생성된 것일 수 있다.
상술한 실시예 2는 제1연산 시구간에서 데이터 연산부가 제1디멘젼 방향에 우선순위를 두어 출력어레이를 출력하고, 제2연산 시구간에서 데이터 연산부가 제2디멘젼 방향에 우선순위를 두어 입력어레이를 입력받는 예를 나타낸 것이다. 즉, 데이터 출력 시의 출력 우선순위와 데이터 입력 시의 입력 우선순위가 서로 다른 예를 나타낸 것이다.
후술하는 실시예 3에서는 데이터 출력 시의 출력 우선순위와 데이터 입력 시의 입력 우선순위가 서로 동일한 예를 설명한다.
<실시예 3>
도 11는 본 발명의 일 실시예에 따라 제1연산 시구간에서 데이터 연산부가 출력하는 출력어레이(비압축)(330)을 나타낸 것이다.
도 11에 나타낸 출력어레이(비압축)(330)는 도 9a에 나타낸 출력어레이(비압축)(330)와 동일한 것이다. 다만, 도 11에서는 제1연산 시구간에서 데이터 연산부가 제1디멘젼 방향에 우선순위를 두어 출력어레이(비압축)(330)의 비압축구성요소들을 순차적으로 출력한 것이라는 점에서 다르다.
도 11을 살펴보면, 비압축구성요소들이 데이터 연산부로부터 인덱스 1, 11, 21, 31, 41, 51, 61, 71, 81, 91, 2, 12, 22, 32, 42,... 의 순서로 순차적으로 출력되다가, 인덱스 42까지 출력되면 비로서 제1비압축데이터그룹(NCG101)이 완전히 준비될 수 있다.
이와 같이 도 11의 출력어레이(비압축)(330)의 비압축구성요소들이 출력되는 순서가 다르다는 점을 제외하고는, 도 11의 출력어레이(비압축)(330)에 대하여 도 9c에 설명한 과정들이 그대로 적용될 수 있다는 점은 쉽게 이해될 수 있다.
한편, 도 9c 및 도 7d에 제시된 바와 같이 제어부(40)는, 데이터 연산부(610)가 제2연산 시구간(T2)에서 상기 비압축구성요소들을 제1디멘젼 방향(91)과 제2디멘젼 방향(92) 중 어느 방향에 우선순위를 두어 순차적으로 입력받을지에 대한 정보를 미리 획득할 수 있다. 도 11에 나타낸 실시예에서는 데이터 연산부(610)가 제2연산 시구간(T2)에서 상기 비압축구성요소들을 제1디멘젼 방향(91)에 우선순위를 두어 순차적으로 입력받는 것으로 가정한 것이다.
본 발명의 바람직한 일 실시예에서, 압축부(620)는 데이터 연산부(610)가 제2연산 시구간(T2)에서 데이터를 입력받는 우선순위와 동일한 우선순위로 압축을 진행할 수 있다. 즉, 도 11의 예에서, 데이터 연산부(610)가 제2연산 시구간(T2)에서 상기 비압축구성요소들을 제1디멘젼 방향(91)에 우선순위를 두어 순차적으로 입력받기 때문에, 압축부(620)도 상기 제1디멘젼 방향(91)에 우선순위를 두어 데이터를 압축한다. 즉, 도 7e, 도 10c, 및 도 10d에 나타낸 것과 같이, 주어진 압축데이터그룹(CG)에서 제1디멘젼 방향에 우선순위를 두어 p 번째로 생성되는 압축구성요소는 주어진 비압축데이터그룹(NCG)에서 제1디멘젼 방향에 우선순위를 두어 카운트되는 p 번째 인덱스를 갖는 제p비압축구성요소 및 상기 p 번째로 생성되는 압축구성요소를 생성하는 시점까지 이미 사용되었던 상기 주어진 비압축데이터그룹(NCG)의 비압축구성요소들만을 기초로 생성될 수 있다.
상술한 실시예 2 및 실시예 3을 함께 살펴보면, 압축부(620)가 데이터를 압축하는 구체적인 방법은, 압축부(620)에 제공되는 상기 출력어레이(비압축)(330)의 비압축구성요소들이 출력되는 순서와는 무관하다.
본 발명의 바람직한 일 실시예에서, 압축부(620)는, 데이터 연산부(610)가 제1연산 시구간(T1)에서 출력한 상기 출력어레이(비압축)(330)를 압축하여 출력어레이(압축)(340)를 생성할 수 있다. 이때, 상기 압축은 상기 출력어레이(비압축)(330)를 구성하는 데이터그룹 별로 수행될 수 있다. 즉, 압축부(620)는, 상기 출력어레이(비압축)(330)의 특정 비압축데이터그룹(NCG)을 압축하여 압축데이터그룹(CG)을 생성할 수 있다.
그리고, 디코딩부(630)는, 출력어레이(압축)(340)을 디코딩하여 입력어레이(비압축)(310)를 복원할 수 있다. 이때, 상기 디코딩은 상기 출려어레이(압축)(340)를 구성하는 데이터그룹 별로 수행될 수 있다. 즉, 디코딩부(630)는, 상기 출력어레이(압축)(340)의 특정 압축데이터그룹(CG)을 디코딩하여 이에 대응하는 비압축데이터그룹(CG)을 복원할 수 있다.
상기 복원된 입력어레이(비압축)(310)를 구성하는 비압축구성요소들은 미리 결정된 우선순위에 따라 데이터 연산부에 순차적으로 입력될 수 있다.
본 발명의 바람직한 일 실시예에서, 압축부(620)가 데이터를 압축하는 구체적인 방법은, 상기 우선순위에 따라 결정된다는 점을 이해할 수 있다.
즉, 상기 데이터 연산부가 상기 복원된 입력어레이(비압축)(310)를 구성하는 비압축구성요소들을 제k디멘젼 방향에 우선순위를 두어 순차적으로 입력을 받는 것으로 설정되어 있다고 가정할 수 있다.
이때, 압축부(620) 역시, 주어진 출력어레이(비압축)(330)를 압축하여 출력어레이(압축)(340)를 생성할 때에, 상기 출력어레이(압축)(340)를 구성하는 압축구성요소들을 상기 제k디멘젼 방향에 우선순위를 두어 순차적으로 생성할 수 있다.
즉, 압축부(620)는, 출력어레이(비압축)(330)를 구성하는 특정 비압축데이터그룹(NCG)을 압축하여 출력어레이(압축)(340)를 구성하는 압축데이터그룹(CG)을 생성할 때에, 상기 압축데이터그룹(CG)을 구성하는 압축구성요소들을 상기 제k디멘젼 방향에 우선순위를 두어 순차적으로 생성할 수 있다.
구체적으로, 상기 압축데이터그룹(CG)을 내에서 p 번째로 생성되는 압축구성요소는 대응되는 상기 비압축데이터그룹(NCG)에서 상기 제k디멘젼 방향에 우선순위를 두어 카운트되는 p 번째 인덱스를 갖는 제p비압축구성요소 및 상기 p 번째로 생성되는 압축구성요소를 생성하는 시점까지 이미 사용되었던 상기 비압축데이터그룹(NCG)의 비압축구성요소들만을 기초로 생성되도록 되어 있다.
이때, 디코딩부(630) 역시, 주어진 출력어레이(압축)(340)를 디코딩하여 입력어레이(비압축)(310)를 생성할 때에, 상기 입력어레이(비압축)(310)를 구성하는 비압축구성요소들을 상기 제k디멘젼 방향에 우선순위를 두어 순차적으로 생성할 수 있다.
즉, 디코딩부(630)는, 출력어레이(압축)(340)를 구성하는 특정 압축데이터그룹(CG)을 디코딩하여 입력어레이(비압축)(310)를 구성하는 비압축데이터그룹(NCG)을 생성할 때에, 상기 비압축데이터그룹(NCG)을 구성하는 비압축구성요소들을 상기 제k디멘젼 방향에 우선순위를 두어 순차적으로 생성할 수 있다.
구체적으로, 상기 비압축데이터그룹(NCG)에서 상기 제k디멘젼 방향에 우선순위를 두어 p 번째로 복원되는 비압축구성요소는 상기 압축데이터그룹(CG)에서 상기 제k디멘젼 방향에 우선순위를 두어 카운트되는 p 번째 인덱스를 갖는 제p압축구성요소 및 상기 p 번째로 복원되는 비압축구성요소를 복원하는 시점까지 이미 복원되어 있던 상기 비압축데이터그룹(NCG)의 비압축구성요소들만을 기초로 복원될 수 있다.
상술한 실시예들에서 제1연산 시구간에서 출력어레이를 출력하는 데이터 연산부는 제2연산 시구간에서 입력어레이를 입력받는 데이터 연산부와 동일한 것으로 가정하였다.
그러나 다른 실시예에서는 제1연산 시구간에서 출력어레이를 출력하는 제1데이터 연산부는 제2연산 시구간에서 입력어레이를 입력받는 제2데이터 연산부는 서로 다른 것일 수 있다. 즉, 상기 제1데이터 연산부와 상기 제2데이터 연산부는 도 6a에 나타낸 하드웨어 가속기(110)가 구현된 웨이퍼 상에서 서로 다른 위치에 구현된 하드웨어 기능모듈일 수 있다.
<실시예 4>
이하 도 6a, 도 6b, 도 9a, 도 9b 도 9c, 도 9d, 도 10c, 도 10d,
본 발명의 일 실시예에 따라 제공되는 하드웨어 가속기(110)는, 데이터 연산부(610), 상기 데이터 연산부(610)가 제1연산 시구간(T1)에서 출력한 출력어레이(330)를 압축하여 압축된 출력어레이(340)를 생성하는 압축부(620), 및 상기 압축된 출력어레이(340)로부터 입력어레이(310)를 복원하고, 상기 복원한 입력어레이(310)를 제2연산 시구간(T2)에서 상기 데이터 연산부(610)에게 제공하는 디코딩부(640)를 포함할 수 있다.
상기 제2연산 시구간(T2)에서 상기 입력어레이(310)의 구성요소(=비압축구성요소)들은 미리 결정된 디멘젼 방향(ex: 제1디멘젼 방향)(91)에 우선순위를 두어 상기 데이터 연산부(610)에게 순차적으로 입력되도록 되어 있을 수 있다.
그리고 상기 압축부(620)는, 상기 출력어레이(330)를 압축하여 상기 압축된 출력어레이(340)를 생성할 때에, 상기 압축된 출력어레이(340)를 구성하는 구성요소(=압축구성요소)들을 상기 미리 결정된 디멘젼 방향(91)에 우선순위를 두어 순차적으로 생성하도록 되어 있을 수 있다.
이때, 상기 출력어레이(330)는 복수 개의 비압축데이터그룹(NCG)들로 구분될 수 있다.
그리고 상기 압축부(620)는, 각각의 상기 비압축데이터그룹(NCG)을 각각 압축하여 상기 비압축데이터그룹(NCG)에 대응하는 압축데이터그룹(CG)을 생성하도록 되어 있을 수 있다.
이때, 상기 압축된 출력어레이(340)는 복수 개의 상기 생성된 압축데이터그룹들로 구성될 수 있다.
그리고 상기 압축부(620)는, 각각의 상기 비압축데이터그룹(NCG)을 압축하여 상기 압축데이터그룹(CG)을 생성할 때에, 상기 압축데이터그룹(CG)을 구성하는 구성요소들을 상기 미리 결정된 디멘젼 방향(91)에 우선순위를 두어 순차적으로 생성하도록 되어 있을 수 있다.
이때, 상기 압축데이터그룹(CG)을 내에서 p 번째로 생성되는 구성요소는, 상기 압축데이터그룹(CG)에 대응되는 상기 비압축데이터그룹(NCG)에서 상기 미리 결정된 디멘젼 방향(91)에 우선순위를 두어 카운트되는 p 번째 인덱스를 갖는 구성요소 및 상기 p 번째로 생성되는 구성요소를 생성하는 시점까지 이미 사용되었던 상기 비압축데이터그룹(NCG)의 구성요소들만을 기초로 생성될 수 있다.
이때, 상기 디코딩부(630)는, 상기 압축된 출력어레이(340)를 디코딩하여 상기 입력어레이(310)를 복원할 때에, 상기 입력어레이(310)를 구성하는 구성요소들을 상기 미리 결정된 디멘젼 방향(91)에 우선순위를 두어 순차적으로 복원하도록 되어 있을 수 있다.
이때, 상기 압축된 출력어레이(340)는 복수 개의 압축데이터그룹(CG)들로 구분될 수 있다.
그리고 상기 디코딩부(630)는, 각각의 상기 압축데이터그룹(CG)을 디코딩하여 상기 압축데이터그룹(CG)에 대응하는 비압축데이터그룹(NCG)을 복원하도록 되어 있을 수 있다.
이때, 상기 복원된 입력어레이(310)는 복수 개의 상기 복원된 비압축데이터그룹(NCG)들로 구성될 수 있다.
그리고 상기 디코딩부(630)는, 각각의 상기 압축데이터그룹(CG)을 디코딩하여 상기 비압축데이터그룹(NCG)을 복원할 때에, 상기 비압축데이터그룹(NCG)을 구성하는 구성요소들을 상기 미리 결정된 디멘젼 방향(91)에 우선순위를 두어 순차적으로 복원하도록 되어 있을 수 있다.
이때, 상기 비압축데이터그룹(NCG)에서 상기 미리 결정된 디멘젼 방향(91)에 우선순위를 두어 p 번째로 복원되는 구성요소는 상기 압축데이터그룹(CG)에서 상기 미리 결정된 디멘젼 방향(91)에 우선순위를 두어 카운트되는 p 번째 인덱스를 갖는 구성요소 및 상기 p 번째로 복원되는 구성요소를 복원하는 시점까지 이미 복원되어 있던 상기 비압축데이터그룹(NCG)의 구성요소들만을 기초로 복원될 수 있다.
이때, 상기 출력어레이(330)는 복수 개의 비압축데이터그룹(NCG)들로 구분될 수 있다.
그리고 상기 압축부(620)는, 각각의 상기 비압축데이터그룹(NCG)을 압축하여 상기 비압축데이터그룹(NCG)에 대응하는 압축데이터그룹(CG)을 생성하도록 되어 있을 수 있다.
이때, 상기 압축된 출력어레이(340)는 복수 개의 상기 생성된 압축데이터그룹(CG)들로 구성될 수 있다.
그리고 상기 압축된 출력어레이(340)를 메모리(11, 13)에 저장하기 위해 상기 생성된 복수 개의 상기 압축데이터그룹(CG)들을 상기 메모리에 제공하도록 되어 있을 수 있다.
이때, 상기 압축된 출력어레이(340)로부터 입력어레이(310)를 복원하기 위해 상기 메모리로부터 복수 개의 상기 압축데이터그룹(CG)들을 순차적으로 읽어 들이도록 되어 있을 수 있다.
이때, 상기 출력어레이(330)는 상기 미리 결정된 디멘젼 방향(91)을 따라 복수 개의 비압축데이터그룹(NCG)들을 포함할 수 있다.
그리고 상기 압축된 출력어레이(340)는 상기 미리 결정된 디멘젼 방향(91)을 따라 복수 개의 압축데이터그룹(NCG)들을 포함할 수 있다.
이때, 상기 압축된 출력어레이(340)로부터 입력어레이(310)를 복원하기 위해 상기 메모리로부터 복수 개의 상기 압축데이터그룹(CG)들을 읽어 들일 때에, 상기 미리 결정된 디멘젼 방향(91)에 우선순위를 두어 복수 개의 상기 압축데이터그룹(CG)들을 읽어 들일 수 있다.
이하, 특히 도 9a를 참조하여 설명한다.
이때, 상기 미리 결정된 디멘젼 방향(91)과는 다른 디멘젼 방향(92)의 제2지점(ex: 102)에서 상기 미리 결정된 디멘젼 방향(91)을 따라 정렬되는 임의의 비압축데이터그룹(NCG102, NCG107)에 속한 임의의 구성요소를 디코딩하기 이전에, 상기 다른 디멘젼 방향(92)의 제1지점에(ex: 101)서 상기 미리 결정된 디멘젼 방향(91)을 따라 정렬되는 모든 복수 개의 비압축데이터그룹(NCG101, NCG106)들로 구성된 제1열의 비압축데이터그룹(NCG101, NCG106)들에 속한 모든 구성요소들을 디코딩하도록 되어 있을 수 있다.
이때. 상기 제1열의 비압축데이터그룹(NCG101, NCG106)들에 속한 모든 구성요소들을 디코딩할 때에, 상기 입력어레이(310)의 구성요소들 중 상기 다른 디멘젼 방향(92)의 제4지점(ex: 114)에서 상기 미리 결정된 디멘젼 방향(91)을 따라 배치되는 임의의 구성요소(ex: 인덱스 2, 12, 22, 32, 42, 52, 62, 72, 82, 또는 92)를 디코딩하기 이전에, 상기 입력어레이(310)의 구성요소들 중 상기 다른 디멘젼 방향(92)의 제3지점(ex: 113)에서 상기 미리 결정된 디멘젼 방향을 따라 배치되는 모든 구성요소들(ex: 인덱스 1, 11, 21, 31, 41, 51, 61, 71, 81, 및 91)을 디코딩하도록 되어 있을 수 있다.
이때, 상기 제1열의 비압축데이터그룹(NCG101, NCG106)들에 속한 모든 구성요소들을 디코딩할 때에, 상기 제1열의 비압축데이터그룹(NCG101, NCG106)들 중 제1비압축데이터그룹(NCG101)에 속한 일부의 구성요소인 제1세트의 구성요소들(ex: 인덱스 1, 11, 21, 31, 41)을 디코딩한 이후에, 상기 제1열의 비압축데이터그룹(NCG101, NCG106)들 중 제2비압축데이터그룹(NCG106)에 속한 일부의 구성요소인 제2세트의 구성요소들(ex: 인덱스 51, 61, 71, 81, 91)을 디코딩하고, 상기 제2세트의 구성요소들을 디코딩한 이후에 상기 제1비압축데이터그룹(NCG101)에 속한 다른 일부의 구성요소인 제3세트의 구성요소들(ex: 인덱스 2, 12, 22, 32, 42)을 디코딩하도록 되어 있을 수 있다.
본 발명의 일 실시예에 따라 상술한 하드웨어 가속기(110) 및 메모리(ex: DRAM, 11, 13), 버스(700), 및 타 하드웨어들(99)를 포함하는, 컴퓨팅 장치(1)가 제공될 수 있다.
도 12는 본 발명의 일 실시예에 따라 제공되는 신경망 가속부의 입력어레이 또는 출력어레이의 형태를 나타낸 개념도이다.
도 1 내지 도 11에서는 출력어레이 및 입력어레이가 2차원 어레이형태를 갖는 것으로 제시하였으나, 출력어레이 또는 입력어레이는 도 12와 같이 3차원 어레이형태를 가질 수 있다. 또한, 도시되지 않은 4차원 이상의 디멘젼을 갖는 어레이형태를 가질 수도 있다. 그러나 본 발명은 상기 출력어레이 또는 입력어레이가 3차원 이상의 다차원인 경우에도 적용될 수 있음을 이해할 수 있다.
상술한 본 발명의 실시예들을 이용하여, 본 발명의 기술 분야에 속하는 자들은 본 발명의 본질적인 특성에서 벗어나지 않는 범위 내에 다양한 변경 및 수정을 용이하게 실시할 수 있을 것이다. 특허청구범위의 각 청구항의 내용은 본 명세서를 통해 이해할 수 있는 범위 내에서 인용관계가 없는 다른 청구항에 결합될 수 있다.