KR102403277B1 - 어레이 풀링 방법 및 이를 위한 장치 - Google Patents
어레이 풀링 방법 및 이를 위한 장치 Download PDFInfo
- Publication number
- KR102403277B1 KR102403277B1 KR1020210187396A KR20210187396A KR102403277B1 KR 102403277 B1 KR102403277 B1 KR 102403277B1 KR 1020210187396 A KR1020210187396 A KR 1020210187396A KR 20210187396 A KR20210187396 A KR 20210187396A KR 102403277 B1 KR102403277 B1 KR 102403277B1
- Authority
- KR
- South Korea
- Prior art keywords
- index
- pooling
- buffer
- buffers
- window
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
- G06N3/082—Learning methods modifying the architecture, e.g. adding, deleting or silencing nodes or connections
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- General Health & Medical Sciences (AREA)
- General Physics & Mathematics (AREA)
- Evolutionary Computation (AREA)
- Computational Linguistics (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Artificial Intelligence (AREA)
- Neurology (AREA)
- Complex Calculations (AREA)
- Image Input (AREA)
Abstract
짝수 개의 요소들을 풀링하는 풀링 윈도우로 입력 어레이를 풀링하는 방법을 공개한다. 인덱스 k+2p 및 인덱스 k+2p+1 의 엘리먼트로 이루어지는 쌍에 대하여 풀링한 결과값을 제1세트의 버퍼들 중 인덱스 p를 갖는 버퍼에 저장하고, 그리고 인덱스 k+2q+1 및 인덱스 k+2q+2 의 엘리먼트로 이루어지는 쌍에 대하여 풀링한 결과값을 제2세트의 버퍼들 중 인덱스 q를 갖는 버퍼에 저장하는 단계, 및 상기 제1세트의 버퍼들 중 인덱스 0 내지 n-1의 값들에 대하여 풀링한 결과값을 풀링버퍼 중 인덱스 j을 갖는 버퍼에 저장하는 단계를 포함한다.
Description
본 발명은 컴퓨팅 장치에서 풀링을 수행하는 방법 및 이 방법이 적용된 하드웨어 가속기에 관한 것이다.
CNN은 풀링 연산을 포함하는 복수 개의 연산단계를 수행한다. 미국등록특허 US10713816에는 심층 CNN 풀링 레이어를 특징으로서 이용하는 물체검출 방법이 제시되어 있다.
도 1은 일 실시예에 따른 CNN의 연산구조를 나타낸 것이다. 이하 도 1을 참조하여 설명한다.
우선, 내부메모리에 저장된 입력 이미지 데이터(51)에 복수 개의 커널들을 이용한 콘볼루션 연산을 수행하여 콘볼루션 레이어들(52)을 생성할 수 있다. 콘볼루션 레이어들(52)을 생성하는 단계는 상기 콘볼루션 연산을 수행한 결과 얻은 복수 개의 피쳐 맵들에 대하여 비선형 연산(ex: ReLU, Sigmoid, 또는, tanH)을 수행하는 단계를 포함할 수 있다.
그 다음 콘볼루션 레이어들(52)에 대한 풀링을 수행하여 풀링 레이어들(53)을 생성할 수 있다. 각각의 콘볼루션 레이어(52)는 M*N 행렬 형태로 표현될 수 있는 데이터를 포함할 수 있다. 이때, 풀링을 수행하기 위하여 상기 콘볼루션 레이어(52)보다 작은 디멘젼을 갖는 윈도우인 풀링 윈도우가 정의될 수 있다. 풀링 윈도우는 행 및 열 방향에 대하여 각각 Mp 및 Np의 크기를 가질 수 있다. 풀링 윈도우의 크기는 콘볼루션 레이어의 크기보다 작을 수 있다(M>=Mp 이고 N>Np, 또는 M>Mp 이고 N>=Np). 상기 풀링은 상기 콘볼루션 레이어에 상기 풀링 윈도우를 겹쳐 선택하는 Mp*Np 개의 데이터들로부터 이 보다 더 작은 개수의 데이터, 예컨대 1개의 데이터를 생성하는 연산이다. 예컨대 MAX 풀링은 상기 Mp*Np 개의 데이터들 중에서 가장 큰 값 1개를 선택하여 출력하는 연산이다. 예컨대 average 풀링은 상기 Mp*Np 개의 데이터들의 평균값을 출력하는 연산이다. 그 밖에 다른 규칙을 따르는 풀링이 정의될 수 있다. 상기 콘볼루션 레이어에 상기 풀링 윈도우를 겹칠 수 있는 경우의 수는 다양하다. 실시예에 따라 상기 콘볼루션 레이어 상에서 상기 풀링 윈도우를 이동시키는 규칙을 제한할 수 있다. 예컨대, 상기 풀링 윈도우를 상기 콘볼루션 레이어의 행 방향을 따라 SM 칸 씩 건너뛰어서 이동하도록 제한 경우 상기 풀링 연산의 행 방향 Stride는 SM인 것으로 지칭하고, 상기 풀링 윈도우를 상기 콘볼루션 레이어의 열 방향을 따라 SN 칸 씩 건너뛰어서 이동하도록 제한 경우 상기 풀링 연산의 열 방향 Stride는 SN인 것으로 지칭할 수 있다(SM 및 SN 는 자연수). Stride 의 크기가 커질수록, 풀링 연산의 결과로서 출력되는 풀링 레이어의 크기는 더 작아질 수 있다. 상술한 설명 외에도, 풀링 연산에 대한 구체적인 개념은 CNN을 설명하는 선행기술에 잘 제시되어 있다.
그 다음, 상기 풀링 레이어들(53)에 대한 플래트닝(flattening)을 수행하여 신경망(54)에 입력할 어레이를 생성할 수 있다.
그 다음, 상기 어레이를 상기 신경망(54)에 입력하여 상기 신경망(54)으로부터 출력을 생성할 수 있다.
도 1에서는 CNN의 일 실시예를 나타내었지만, CNN을 구현하는 다양한 다른 예가 존재한다. 또한, 도 1에서 풀링 연산이 CNN의 구현을 위해 이용되었지만, 풀링 연산은 CNN이 아닌 다른 컴퓨팅 기술분야에서도 사용될 수 있다.
풀링 연산의 연산량은 풀링 윈도우의 크기가 커지면 커지는 경향이 있고, Stride의 크기가 작을수록 키지는 경향이 있다. 또한 Stride의 크기가 작을수록 풀링 연산을 수행하는 과정에서 동일한 연산이 반복되는 경향이 높아진다.
본 발명에서는 1차원 어레이에 대한 풀링 연산을 위한 연산량을 감소시키는 풀링 방법을 제공하고자 한다.
본 발명의 일 관점에 따라 짝수 개의 요소들을 풀링하는 풀링 윈도우(20)로 입력 어레이(10)를 풀링하는 방법이 제공될 수 있다. 상기 방법은, 컴퓨팅 장치가, 인덱스 k+2p 및 인덱스 k+2p+1 의 엘리먼트로 이루어지는 쌍에 대하여 풀링한 결과값을 제1세트의 버퍼들(40) 중 인덱스 p를 갖는 버퍼에 저장하고, 그리고 인덱스 k+2q+1 및 인덱스 k+2q+2 의 엘리먼트로 이루어지는 쌍에 대하여 풀링한 결과값을 제2세트의 버퍼들(50) 중 인덱스 q를 갖는 버퍼에 저장하는 단계(p=0, ..., n-1; q=0, ... n-2; k는 정수); 및 상기 컴퓨팅 장치가, 상기 제1세트의 버퍼들 중 인덱스 0 내지 n-1의 값들에 대하여 풀링한 결과값을 풀링버퍼(60) 중 인덱스 j을 갖는 버퍼에 저장하는 단계;를 포함한다.
이때, 상기 방법은, 상기 내부메모리에 저장하는 단계 이전에, 상기 컴퓨팅 장치가, 상기 입력 어레이 중 인덱스 k 내지 인덱스 k+2n-1 의 엘리먼트들을 읽어 내부메모리(30)에 저장하는 단계를 더 포함할 수 있다.
이때, 상기 방법은, 상기 인덱스 q를 갖는 버퍼에 저장하는 단계와 상기 인덱스 j를 갖는 버퍼에 저장하는 단계 사이에, 상기 컴퓨팅 장치가, 상기 입력 어레이 중 인덱스 k 내지 인덱스 k+2n-2의 값을 삭제하는 단계를 더 포함할 수 있다.
이때, 상기 방법은, 상기 컴퓨팅 장치가, 인덱스 k+2n-1 및 인덱스 k+2n 의 엘리먼트로 이루어지는 쌍에 대하여 풀링한 결과값을 상기 제2세트의 버퍼들 중 인덱스 n-1을 갖는 버퍼에 저장하는 단계; 및 상기 컴퓨팅 장치가, 상기 제2세트의 버퍼들 중 인덱스 0 내지 n-1의 값들에 대하여 풀링하여 상기 풀링버퍼 중 인덱스 j+1을 갖는 버퍼에 저장하는 단계;를 더 포함할 수 있다.
이때, 상기 방법은, 상기 인덱스 j를 갖는 버퍼에 저장하는 단계와 상기 인덱스 n-1을 갖는 버퍼에 저장하는 단계 사이에, 상기 컴퓨팅 장치가, 상기 입력 어레이 중 인덱스 k+2n의 엘리먼트를 읽어 상기 내부메모리에 저장하는 단계를 더 포함할 수 있다.
이때, 상기 방법은, 상기 인덱스 n-1을 갖는 버퍼에 저장하는 단계와 상기 인덱스 j+1을 갖는 버퍼에 저장하는 단계 사이에, 상기 컴퓨팅 장치가, 상기 입력 어레이 중 인덱스 k+2n-1의 값을 삭제하는 단계를 더 포함할 수 있다.
이때, 상기 방법은, 상기 제1세트의 버퍼들 중 인덱스 0을 갖는 버퍼의 값을, 상기 입력 어레이 중 인덱스 k+2n 및 인덱스 k+2n+1의 엘리먼트로 이루어지는 쌍에 대하여 풀링한 결과값으로 갱신하는 단계; 및 상기 제1세트의 버퍼들 중 인덱스 0 내지 n-1의 값들에 대하여 풀링하여 상기 풀링버퍼 중 인덱스 j+2을 갖는 버퍼에 저장하는 단계;를 더 포함할 수 있다.
이때, 상기 방법은, 상기 인덱스 j+1을 갖는 버퍼에 저장하는 단계와 상기 갱신하는 단계 사이에, 상기 입력 어레이 중 인덱스 k+2n+1의 엘리먼트를 읽어 상기 내부메모리에 저장하는 단계를 더 포함할 수 있다.
이때, 상기 방법은, 상기 갱신하는 단계와 상기 인덱스 j+2을 갖는 버퍼에 저장하는 단계 사이에, 상기 입력 어레이 중 인덱스 k+2n의 값을 삭제하는 단계를 더 포함할 수 있다.
본 발명에 따르면 1차원 어레이에 대한 풀링 연산을 위한 연산량을 감소시키는 풀링 방법을 제공할 수 있다.
도 1은 일 실시예에 따른 CNN의 연산구조를 나타낸 것이다.
도 2는 본 발명의 일 실시예에 따라 제공되는 연산 방법이 적용될 수 있는 하드웨어의 구성예를 나타낸 것이다.
도 3은 본 발명의 일 실시예에 따라 제공되는 풀링 방법을 설명하기 위하여 예시한 입력 어레이를 나타낸 것이다.
도 4는 본 발명의 일 실시에에 따라 입력 어레이를 풀링 윈도우에 의해 풀링하는 방법을 나타낸 것이다.
도 5는 본 발명의 다른 실시에에 따라 입력 어레이를 풀링 윈도우에 의해 풀링하는 방법을 나타낸 것이다.
도 6은 본 발명의 또 다른 실시예에 따라 입력 어레이를 풀링 윈도우에 의해 풀링하는 방법을 나타낸 것이다.
도 7은 본 발명의 또 다른 실시예에 따라 입력 어레이를 풀링 윈도우에 의해 풀링하는 방법을 나타낸 것이다.
도 8은 본 발명의 일 실시예에 따라 풀링을 하는 방법을 나타낸 순서도이다.
도 2는 본 발명의 일 실시예에 따라 제공되는 연산 방법이 적용될 수 있는 하드웨어의 구성예를 나타낸 것이다.
도 3은 본 발명의 일 실시예에 따라 제공되는 풀링 방법을 설명하기 위하여 예시한 입력 어레이를 나타낸 것이다.
도 4는 본 발명의 일 실시에에 따라 입력 어레이를 풀링 윈도우에 의해 풀링하는 방법을 나타낸 것이다.
도 5는 본 발명의 다른 실시에에 따라 입력 어레이를 풀링 윈도우에 의해 풀링하는 방법을 나타낸 것이다.
도 6은 본 발명의 또 다른 실시예에 따라 입력 어레이를 풀링 윈도우에 의해 풀링하는 방법을 나타낸 것이다.
도 7은 본 발명의 또 다른 실시예에 따라 입력 어레이를 풀링 윈도우에 의해 풀링하는 방법을 나타낸 것이다.
도 8은 본 발명의 일 실시예에 따라 풀링을 하는 방법을 나타낸 순서도이다.
이하, 본 발명의 실시예를 첨부한 도면을 참고하여 설명한다. 그러나 본 발명은 본 명세서에서 설명하는 실시예에 한정되지 않으며 여러 가지 다른 형태로 구현될 수 있다. 본 명세서에서 사용되는 용어는 실시예의 이해를 돕기 위한 것이며, 본 발명의 범위를 한정하고자 의도된 것이 아니다. 또한, 이하에서 사용되는 단수 형태들은 문구들이 이와 명백히 반대의 의미를 나타내지 않는 한 복수 형태들도 포함한다.
도 2는 본 발명의 일 실시예에 따라 제공되는 연산 방법이 적용될 수 있는 하드웨어의 구성예를 나타낸 것이다.
도 2는 본 발명의 일 실시예에 따라 제공되는 연산 방법을 하드웨어로 구현한 컴퓨팅 장치 중 일부의 주요 구조를 나타낸 것이다.
컴퓨팅 장치(1)는, DRAM(Dynamic Random Access Memory)(130), 하드웨어 가속기(110), DRAM(130)와 하드웨어 가속기(110)를 연결하는 버스(700), 및 버스(700)에 연결된 타 하드웨어들(99) 및 메인 프로세서(160)를 포함할 수 있다. 여기서 DRAM(130)은 메모리(130)로 지칭될 수 있다.
그 밖에 컴퓨팅 장치(1)는 도시되지 않은 전원부, 통신부, 사용자 인터페이스, 저장부(170), 및 주변 장치부들을 더 포함할 수 있다. 버스(700)는 상기 하드웨어 가속기(110)와 타 하드웨어들(99), 그리고 메인 프로세서(160)가 공유할 수도 있다.
상기 하드웨어 가속기(110)는 DMA부(Direct Memory Access part)(20), 제어부(114), 내부 메모리(30), 입력버퍼(650), 데이터 연산부(610), 및 출력버퍼(640)를 포함할 수 있다.
내부 메모리(30)에 임시 저장되는 데이터의 일부 또는 전부는 버스(700)를 통해 DRAM(130)으로부터 제공될 수 있다. 이때, DRAM(130)에 저장되어 있는 데이터를 내부 메모리(30)로 이동시키기 위하여, 제어부(114)와 DMA부(112)가 내부 메모리(30) 및 DRAM(130)을 제어할 수도 있다.
내부 메모리(30)에 저장되어 있던 데이터는 입력버퍼(650)를 통해 데이터 연산부(610)에게 제공될 수 있다.
상기 데이터 연산부(610)가 동작하여 생성된 출력값들은 출력버퍼(640)을 거쳐 상기 내부 메모리(30)에 저장될 수 있다. 상기 내부 메모리(30)에 저장된 상기 출력값들은 제어부(114) 및 DMA부(112)의 제어에 의해 DRAM(130)에 기록될 수도 있다.
제어부(114)는 DMA부(112), 내부 메모리(30), 및 상기 데이터 연산부(610)의 동작을 총괄하여 제어할 수 있다.
일 구현예에서, 상기 데이터 연산부(610)는 제1시구간 동안에는 제1연산기능을 수행하고 제2시구간 동안에는 제2연산기능을 수행할 수 있다.
도 2에서, 상기 데이터 연산부(610)는 상기 하드웨어 가속기(110) 내에 1개가 제시되어 있다. 그러나 도시하지 않은 변형된 일 실시예에서, 도 2에 나타낸 상기 데이터 연산부(610)는 상기 하드웨어 가속기(110) 내에 복수 개 제공되어 각각 제어부(114)에 의해 요청된 연산을 병렬적으로 수행할 수도 있다.
일 구현예에서, 상기 데이터 연산부(610)는 그 출력데이터를 한 번에 출력하지 않고 시간에 따라 주어진 순서에 따라 순차적으로 출력할 수 있다.
도 3은 본 발명의 일 실시예에 따라 제공되는 풀링 방법을 설명하기 위하여 예시한 입력 어레이를 나타낸 것이다.
입력 어레이(10)는 상기 DRAM(130)에 저장되어 있는 것일 수 있다. 도 3에서는 상기 입력 어레이(10)가 총 13개의 요소로 구성된 것으로 도시하였으나, 이는 설명의 편의를 위한 것이며 상기 입력 어레이(10)에 포함된 요소들의 개수는 이와 다른 값을 가질 수 있다.
상기 제어부(114) 또는 상기 DMA부(112)는 상기 입력 어레이(10)의 전부 또는 일부를 상기 DRAM(130)로부터 읽어 상기 내부 메모리(30)에 저장할 수 있다.
상기 제어부(114)는 상기 내부 메모리(30)에 저장되어 있는 상기 입력 어레이(10)의 전부 또는 일부를 상기 입력버퍼(650)에 저장할 수 있다.
이하 설명하는 풀링방법은 상기 입력 어레이(10)를 미리 결정된 크기를 갖는 풀링 윈도우(20)를 이용하여 풀링하는 방법에 관한 것이다. 이때, 상기 풀링 윈도우(20)에 의해 선택되는 상기 입력 어레이(10)의 요소들의 개수는 짝수(=2n)일 수 있다. 도 3에 나타낸 예에서 상기 풀링 윈도우(20)에 8개의 요소들이 포함된다. 도 3의 예에서 n=4이다.
도 3에서 예시한 풀링은 예컨대 MAX 풀링일 수 있다. 이 경우 상기 풀링 윈도우(20)에 의해 선택되는 8개의 요소들의 값 중 가장 큰 값이 풀링의 결과로서 출력될 수 있다. 그러나 본 발명의 풀링이 상기 MAX 풀링으로 제한되는 것은 아니며, 가능한 다양한 풀링 방법이 적용될 수 있다.
도 3에 나타낸 인덱스 k는 설명의 편의를 위해 도입한 것으로서, 임의의 정수일 수 있다. 상기 인덱스 k는 상기 입력 어레이(10)의 첫 번째 요소를 나타낸다.
이하, 도 4a 내지 도 4d를 통칭하여 도 4라고 지칭한다.
도 4는 본 발명의 일 실시예에 따라 입력 어레이를 풀링 윈도우에 의해 풀링하는 방법을 나타낸 것이다.
도 4a는 상기 입력 어레이 중 풀링 윈도우에 의해 선택된 일부가 저장되어 있는 상기 내부 메모리의 상태를 나타낸 것이다.
이하, 풀링 윈도우의 크기, 즉, 풀링 윈도우에 의해 선택되는 요소들의 개수는 2n인 것으로 가정한다(n은 자연수). 도 4a에서 n은 4이다.
이하 본 명세서에서 '풀링 윈도우(20[+s])'의 s는 풀링 윈도우(20)가 최초의 위치에서 스트라이드 s만큼 이동한 상태의 풀링 윈도우를 의미한다(s는 정수). 예컨대, 풀링 윈도우(20[+0])은 입력 어레이(10) 중 인덱스 k+0 내지 인덱스 k+2n-1 의 값들을 선택한다. 마찬가지로 풀링 윈도우(20[+s])은 입력 어레이(10) 중 인덱스 k+s 내지 인덱스 k+2n-1+s 의 값들을 선택한다.
도 4a에서 상기 풀링 윈도우(20[+0])에 의해 선택된 2n개의 요소들은 상기 내부 메모리(30)의 인덱스 k 내지 인덱스 k+2n-1 로 표현된다.
일 실시예에서, 상기 풀링 윈도우(20[+0])에 의해 선택된 2n개의 요소들을 저장하기 위한 2n 크기의 공간이 상기 내부 메모리(30) 내에 할당될 수 있다. 이러한 할당 작업은 상기 제어부(114)에 의해 이루어질 수도 있다.
도 4b는 본 발명의 일 실시예에 따라 상기 풀링 윈도우에 의해 선택된 요소들을 두 개의 서로 다른 세트의 버퍼들에 저장하는 과정을 나타낸 것이다.
상기 서로 다른 세트의 버퍼들은 제1세트의 버퍼들(40) 및 제2세트의 버퍼들(50)일 수 있다. 일 실시예에서, 상기 제1세트의 버퍼들(40) 및 상기 제2세트의 버퍼들(50)은 상기 입력버퍼(650)의 일부일 수 있다.
단계(S100)에서, 상기 제어부(114)는 상기 풀링 윈도우(20[+0])에 의해 선택된 요소들을 내부 메모리(30)로 이동시킬 수 있다.
일 실시예에서, 상기 제어부(114)는 상기 입력 어레이(10)가 저장되어 있는 DRAM(130) 내의 주소를 획득할 수 있다. 그 후, 상기 제어부는 상기 풀링 윈도우(20[+0])에 의해 선택된 요소들을 상기 DRAM(130)으로부터 읽어서 상기 내부 메모리(30)에 준비된 공간으로 이동할 수 있다. 상기 풀링 윈도우(20[+0])에 의해 선택된 요소들은 예컨대, 상기 입력 어레이(10) 중 가장 작은 인덱스를 포함하는 연속적인 2n개의 요소들일 수 있다.
단계(S110)에서, 상기 제어부(114)는, 인덱스 k+2p 및 인덱스 k+2p+1 의 엘리먼트로 이루어지는 쌍에 대하여 풀링하여, 상기 풀링한 결과값을 제1세트의 버퍼들(40) 중 인덱스 p를 갖는 버퍼에 저장할 수 있다(p=0, ... , n-1, 여기서 2n은 풀링 윈도우의 크기). 예컨대, 제1세트의 버퍼들(40) 중 인덱스 0를 갖는 버퍼에는 상기 풀링 윈도우(20[+0])에 의해 선택된 요소들 중 인덱스 k 및 인덱스 k+1 의 엘리먼트로 이루어지는 쌍에 대한 풀링한 결과값인 '8'이 저장될 수 있다. 마찬가지로, 제1세트의 버퍼들(40) 중 인덱스 2를 갖는 버퍼에는 상기 풀링 윈도우(20[+0])에 의해 선택된 요소들 중 인덱스 k+4 및 인덱스 k+5 의 엘리먼트로 이루어지는 쌍에 대한 풀링한 결과값인 '2'이 저장될 수 있다. 도 4b의 예에서, 상기 풀링 윈도우(20[+0])에 의해 선택된 요소들에 의하여 상기 제1세트의 버퍼들(40)의 인덱스 0 내지 인덱스 3(즉, 인덱스 n-1)의 값이 결정될 수 있다.
단계(S120)에서, 상기 제어부(114)는, 인덱스 k+2q+1 및 인덱스 k+2q+2 의 엘리먼트로 이루어지는 쌍에 대하여 풀링하여, 상기 풀링한 결과값을 제2세트의 버퍼들(50) 중 인덱스 q를 갖는 버퍼에 저장할 수 있다(q=0, ... , n-2, 여기서 2n은 풀링 윈도우의 크기). 예컨대, 제2세트의 버퍼들(50) 중 인덱스 0를 갖는 버퍼에는 상기 풀링 윈도우(20[+0])에 의해 선택된 요소들 중 인덱스 k+1 및 인덱스 k+2 의 엘리먼트로 이루어지는 쌍에 대한 풀링한 결과값인 '8'이 저장될 수 있다. 마찬가지로, 제2세트의 버퍼들(50) 중 인덱스 2를 갖는 버퍼에는 상기 풀링 윈도우(20[+0])에 의해 선택된 요소들 중 인덱스 k+5 및 인덱스 k+6의 엘리먼트로 이루어지는 쌍에 대한 풀링한 결과값인 '3'이 저장될 수 있다. 도 4b의 예에서, 상기 풀링 윈도우(20[+0])에 의해 선택된 요소들에 의하여 상기 제2세트의 버퍼들(50)의 인덱스 0 내지 인덱스 2(즉, 인덱스 n-2)의 값이 결정될 수 있다.
단계(S120)에서, 상기 인덱스 k+2q+1 및 인덱스 k+2q+2 의 엘리먼트로 이루어지는 쌍에 대한 풀링인 최소 풀링은 데이터 연산부(610)가 실행할 수 있다. 이때, 상기 제어부(114)는 상기 데이터 연산부(610)가 상기 최소 풀링을 실행하도록 상기 데이터 연산부(610)의 기능을 제어할 수 있다.
상기 단계(S110)와 단계(S120) 간의 실행순서는 변경될 수 있다.
도 4c는, 본 발명의 일 실시예에 따라 상기 풀링 윈도우(20[+0])에 의해 선택된 요소들 중 풀링에 사용된 요소들의 일부를 삭제하는 과정을 나타낸 것이다.
단계(S130)에서, 상기 제어부(114)는, 상기 풀링 윈도우(20[+0])에 의해 선택된 요소들 중 인덱스 k 내지 인덱스 k+2n-2의 값을 삭제할 수 있다(도 4c에서 문자 'X'로 표시). 즉, 상기 풀링 윈도우(20[+0])에 의해 선택된 요소들 중 마지막 인덱스 k+2n-1의 값을 제외한 값들을 삭제할 수 있다.
변형된 실시예에서는 단계(S130)를 반드시 실행하지 않을 수도 있다. 그러나 단계(S130)를 실행하면 상기 내부 메모리(30)의 공간 중 일부를 다른 작업을 위해 할당할 수 있다.
도 4d는, 본 발명의 일 실시예에 따라 풀링된 결과를 풀링버퍼에 저장하는 과정을 나타낸 것이다.
단계(S140)에서, 상기 제어부(114)는, 상기 제1세트의 버퍼들(40) 중 인덱스 0 내지 n-1의 값들에 대하여 풀링을 실행하고, 풀링한 결과값을 풀링버퍼(60) 중 인덱스 j을 갖는 버퍼에 저장할 수 있다. 예컨대, 도 4d에 나타낸 것과 같이, 상기 제1세트의 버퍼들(40) 중 인덱스 0 내지 3의 값들에 대하여 풀링을 실행하고, 상기 풀링한 결과값인 '8'을 풀링버퍼(60) 중 인덱스 j을 갖는 버퍼에 저장할 수 있다.
상기 풀링버퍼(60)는 상기 제1세트의 버퍼들(40) 및 상기 제2세트의 버퍼들(50)과는 다른 버퍼일 수 있으며, 상기 내부 메모리(30)에 포함된 것이거나 또는 상기 입력버퍼(650)에 포함된 것일 수 있다. 도 4d에 나타낸 문자 j는 설명의 편의를 위해 도입한 것으로서, 임의의 정수일 수 있다.
단계(S140)에 의해 상기 풀링 윈도우(20[+0])에 의해 선택된 값들에 대한 풀링 프로세스라 완결되었다. 이제 상기 풀링 윈도우(20[+0])를 소정의 스트라이드만큼 이동하여 상기 입력 어레이(10)로부터 데이터를 새롭게 선택하고, 새로 선택된 데이터에 대한 풀링을 실행할 수 있다. 바람직한 실시예에서, 상기 소정의 스트라이드는 '1'의 값을 가질 수 있다.
도 4b에 제시된 풀링 윈도우(20[+0])로부터 인덱스 k가 증가하는 방향으로 스트라이드 1만큼 이동한 풀링 윈도우를 풀링 윈도우(20[+1])로 표현할 수 있다.
본 발명에서는 위치가 이동된 상기 풀링 윈도우(20[+1])에 의해 입력 어레이(10)로부터 새로 선택된 2n개의 데이터 중 일부만을 이용하여 풀링을 실행할 수 있다. 이하 그 방법에 대하여 설명한다.
스트라이드 1만큼 이동한 상기 풀링 윈도우(20[+1])에 의해 선택되는 데이터는 상기 입력 어레이(10)의 인덱스 k+1 내지 인덱스 k+8이다. 즉, 상기 풀링 윈도우(20[+1])에 의해 상기 입력 어레이(10)의 인덱스 k+1 내지 인덱스 k+2n이 선택될 수 있다.
그러나 본 발명의 일 실시예에서, 상기 입력 어레이(10)의 인덱스 k+1 내지 인덱스 k+6의 각각의 값을 다시 이용되지 않을 수 있다. 즉, 상기 입력 어레이(10)의 인덱스 k+1 내지 인덱스 k+2n-2의 각각의 값은 다시 이용되지 않을 수 있다. 그 대신, 상기 제1세트의 버퍼들(40) 및 상기 제2세트의 버퍼들(50)에 이미 저장되어 있는 데이터를 대신 이용할 수 있으며, 이에 대해서는 뒤에서 따로 설명한다.
본 발명의 일 실시예에서, 상기 입력 어레이(10)의 인덱스 k+8의 값만을 상기 DRAM(130)로부터 읽어서 상기 내부 메모리(30)에 기록할 수 있다. 즉, 상기 입력 어레이(10)의 인덱스 k+2n만을 읽어서 상기 내부 메모리(30)에 기록할 수 있다. 이때, 상기 입력 어레이(10)의 인덱스 k+8의 값은 상기 DRAM(130)가 아닌 다른 곳에서 제공될 수도 있다.
이하, 도 5a 내지 도 5d를 통칭하여 도 5라고 지칭한다.
도 5는 본 발명의 다른 실시예에 따라 입력 어레이를 풀링 윈도우에 의해 풀링하는 방법을 나타낸 것이다.
도 5a는, 본 발명의 일 실시예에 따라 내부 메모리에 상기 입력 어레이(10)의 인덱스 k+8의 값이 저장된 상태를 나타낸다.
단계(S149)에서, 제어부(114)는 DRAM(130)으로부터 입력 어레이 중 인덱스 k+2n (=k+8)의 값을 읽어서 내부 메모리(30)에 저장할 수 있다.
도 5a에 제시된 'X'는 상기 입력 어레이(10)의 인덱스 k+0 내지 인덱스 k+6의 각각의 값은 풀링 연산을 위해 더 이상 필요 없음을 나타낸다.
도 5b는 상기 제2세트의 버퍼들 중 인덱스 n-1을 갖는 버퍼의 값을 결정하는 과정을 나타낸 것이다.
상기 단계(S120)에서, 상기 제2세트의 버퍼들(50) 중 인덱스 n-1 (=3)의 값은 결정되지 않았다. 그러나 이제 상기 입력 어레이(10)의 인덱스 k+2n (=k+8)의 값이 준비되어 있기 때문에, 인덱스 k+2n-1 및 인덱스 k+2n의 값을 풀링하여 상기 제2세트의 버퍼들(50) 중 인덱스 n-1의 값은 결정할 수 있다.
단계(S150)에서, 상기 제어부(114)는, 인덱스 k+2n-1 및 인덱스 k+2n의 엘리먼트로 이루어지는 쌍에 대하여 풀링하여, 상기 풀링한 결과값을 제2세트의 버퍼들(50) 중 인덱스 n-1를 갖는 버퍼에 저장할 수 있다. 즉, 도 5b의 예에서, 인덱스 k+7 및 인덱스 k+8의 엘리먼트로 이루어지는 쌍에 대하여 풀링하여, 상기 풀링한 결과값인 '9'를 제2세트의 버퍼들(50) 중 인덱스 3을 갖는 버퍼에 저장할 수 있다. 이제 상기 제2세트의 버퍼들(50)의 총 n개의 인덱스들의 값이 모두 결정되었다.
도 5c는, 본 발명의 일 실시예에 따라 스트라이드 1만큼 이동한 상기 풀링 윈도우(20[+1])에 의해 선택된 요소들 중 풀링에 사용된 요소들의 일부를 삭제하는 과정을 나타낸 것이다.
단계(S160)에서, 상기 제어부(114)는, 상기 풀링 윈도우(20[+1])에 의해 선택된 요소들 중 인덱스 k+2n-1(=k+7)의 값을 삭제할 수 있다(도 5c에서 문자 'X'로 표시). 즉, 상기 풀링 윈도우(20[+1])에 의해 선택된 요소들 중 마지막 인덱스 k+2n(=k+8)의 값을 제외한 값들을 삭제할 수 있다.
변형된 실시예에서는 단계(S160)를 반드시 실행하지 않을 수도 있다. 그러나 단계(S160)를 실행하면 상기 내부 메모리(30)의 공간 중 일부를 다른 작업을 위해 할당할 수 있다.
도 5d는, 본 발명의 일 실시예에 따라 풀링된 결과를 풀링버퍼에 저장하는 과정을 나타낸 것이다.
단계(S170)에서, 상기 제어부(114)는, 상기 제2세트의 버퍼들(50) 중 인덱스 0 내지 n-1의 값들에 대하여 풀링을 실행하고, 풀링한 결과값을 풀링버퍼(60) 중 인덱스 j+1을 갖는 버퍼에 저장할 수 있다. 예컨대, 도 5d에 나타낸 것과 같이, 상기 제2세트의 버퍼들(50) 중 인덱스 0 내지 3의 값들에 대하여 풀링을 실행하고, 상기 풀링한 결과값인 '9'를 풀링버퍼(60) 중 인덱스 j+1을 갖는 버퍼에 저장할 수 있다.
단계(S170)에 의해 상기 풀링 윈도우(20[+1])에 의해 선택된 값들에 대한 풀링 프로세스가 완결되었다. 이제 상기 풀링 윈도우(20[+1])를 스트라이드 1만큼 더 이동하여 상기 입력 어레이(10)로부터 데이터를 새롭게 선택하고, 새로 선택된 데이터에 대한 풀링을 실행할 수 있다. 상기 풀링 윈도우(20[+1])를 스트라이드 1만큼 더 이동한 풀링 윈도우를 이하 풀리 윈도우(20[+2])라고 지칭할 수 있다.
이하, 도 6a 내지 도 6d를 통칭하여 도 6이라고 지칭한다.
도 6은 본 발명의 또 다른 실시예에 따라 입력 어레이를 풀링 윈도우에 의해 풀링하는 방법을 나타낸 것이다.
도 6a는, 본 발명의 일 실시예에 따라 내부 메모리에 상기 입력 어레이(10)의 인덱스 k+9의 값이 저장된 상태를 나타낸다.
단계(S179)에서, 제어부(114)는 DRAM(130)으로부터 입력 어레이 중 인덱스 k+2n+1(=k+9)의 값을 읽어서 내부 메모리(30)에 저장할 수 있다.
도 6a에 제시된 'X'는 상기 입력 어레이(10)의 인덱스 k+0 내지 인덱스 k+7의 각각의 값은 풀링 연산을 위해 더 이상 필요 없음을 나타낸다.
도 6b은 상기 제1세트의 버퍼들 중 인덱스 0을 갖는 버퍼의 값을 갱신하는 과정을 나타낸 것이다.
상기 단계(S110)에서, 상기 제1세트의 버퍼들(40) 중 인덱스 0 내지 인덱스 n-1을 갖는 버퍼들의 값은 모두 결정되었다. 그러나 이제 상기 단계(S110)의 시점과 비교하여, 상기 풀링 윈도우(20[+2])가 총 스트라이트 2만큼 이동하였기 때문에, 상기 입력 어레이(10)의 인덱스 k+0 및 인덱스 k+1의 값은 필요가 없어졌다. 그 결과, 상기 제1세트의 버퍼들(40) 중 인덱스 0의 값도 필요가 없어졌다. 그 대신, 상기 단계(S110)의 시점과 비교하여, 상기 풀링 윈도우(20[+2])가 총 스트라이드 2만큼 이동하였기 때문에, 상기 입력 어레이(10)의 인덱스 k+2n (=k+8) 및 인덱스 k+2n+1 (=k+9)의 값이 더 준비되었다.
그 결과, 단계(S180)에서, 상기 제어부(114)는, 상기 제1세트의 버퍼들(40) 중 인덱스 0을 갖는 버퍼의 값을 상기 입력 어레이(10)의 인덱스 k+2n 및 인덱스 k+2n+1의 값들로 이루어진 쌍을 풀링한 값으로 갱신할 수 있다.
이제, 도 6b의 예에서, 상기 풀링 윈도우(20[+2])에 의해 선택되는 n개의 데이터들을 2개씩 부분 풀링한 결과값들 모두가 상기 제1세트의 버퍼들(40)에 모두 저장되어 있다. 따라서 상기 제1세트의 버퍼들(40)들을 풀링함으로써 상기 풀링 윈도우(20[+2])에 대한 풀링을 완료할 수 있다.
도 6c는, 본 발명의 일 실시예에 따라 상기 풀링 윈도우(20[+2])에 의해 선택된 요소들 중 풀링에 사용된 요소들의 일부를 삭제하는 과정을 나타낸 것이다.
단계(S190)에서, 상기 제어부(114)는, 상기 풀링 윈도우(20[+2])에 의해 선택된 요소들 중 인덱스 k+2n(=k+8)의 값을 삭제할 수 있다(도 6c에서 문자 'X'로 표시). 즉, 상기 풀링 윈도우(20[+2])에 의해 선택된 요소들 중 마지막 인덱스 k+2n+1(=k+9)의 값을 제외한 값들을 삭제할 수 있다.
변형된 실시예에서는 단계(S190)를 반드시 실행하지 않을 수도 있다. 그러나 단계(S190)를 실행하면 상기 내부 메모리(30)의 공간 중 일부를 다른 작업을 위해 할당할 수 있다.
도 6d는, 본 발명의 일 실시예에 따라 풀링된 결과를 풀링버퍼에 저장하는 과정을 나타낸 것이다.
단계(S200)에서, 상기 제어부(114)는, 상기 제1세트의 버퍼들(40) 중 인덱스 0 내지 n-1의 값들에 대하여 풀링을 실행하고, 풀링한 결과값을 풀링버퍼(60) 중 인덱스 j+2을 갖는 버퍼에 저장할 수 있다. 예컨대, 도 6d에 나타낸 것과 같이, 상기 제1세트의 버퍼들(40) 중 인덱스 0 내지 3의 값들에 대하여 풀링을 실행하고, 상기 풀링한 결과값인 '10'을 풀링버퍼(60) 중 인덱스 j+2을 갖는 버퍼에 저장할 수 있다.
단계(S200)에 의해 상기 풀링 윈도우(20[+2])에 의해 선택된 값들에 대한 풀링 프로세스라 완결되었다. 이제 상기 풀링 윈도우(20[+2])를 스트라이드 1만큼 더 이동하여 상기 입력 어레이(10)로부터 데이터를 새롭게 선택하고, 새로 선택된 데이터에 대한 풀링을 실행할 수 있다.
이하, 도 7a 내지 도 7d를 통칭하여 도 7이라고 지칭한다.
도 7은 본 발명의 일 실시예에 따라 입력 어레이를 풀링 윈도우에 의해 풀링하는 방법을 나타낸 것이다.
도 7a는, 본 발명의 일 실시예에 따라 내부 메모리에 상기 입력 어레이(10)의 인덱스 k+11의 값이 저장된 상태를 나타낸다.
도 7a에 제시된 'X'는 상기 입력 어레이(10)의 인덱스 k+0 내지 인덱스 k+8의 각각의 값은 풀링 연산을 위해 더 이상 필요 없음을 나타낸다.
도 7b는 상기 제2세트의 버퍼들 중 인덱스 0을 갖는 버퍼의 값을 결정하는 과정을 나타낸 것이다.
상기 제어부(114)는, 인덱스 k+2n+1(=k+9) 및 인덱스 k+2n+2(=k+10)의 엘리먼트로 이루어지는 쌍에 대하여 풀링하여, 상기 풀링한 결과값을 제2세트의 버퍼들(50) 중 인덱스 0을 갖는 버퍼에 저장할 수 있다. 즉, 도 7b의 예에서, 인덱스 k+9 및 인덱스 k+10의 엘리먼트로 이루어지는 쌍에 대하여 풀링하여, 상기 풀링한 결과값인 '11'을 제2세트의 버퍼들(50) 중 인덱스 0을 갖는 버퍼에 저장할 수 있다. 이제 상기 제2세트의 버퍼들(50)의 총 n개의 인덱스들의 값이 모두 결정되었다.
도 7c는, 본 발명의 일 실시예에 따라 상기 풀링 윈도우(20[+3])에 의해 선택된 요소들 중 풀링에 사용된 요소들의 일부를 삭제하는 과정을 나타낸 것이다.
상기 제어부(114)는, 상기 풀링 윈도우(20[+3])에 의해 선택된 요소들 중 인덱스 k+2n+1(=k+9)의 값을 삭제할 수 있다(도 7c에서 문자 'X'로 표시). 즉, 상기 풀링 윈도우(20[+3])에 의해 선택된 요소들 중 마지막 인덱스 k+2n+2(=k+10)의 값을 제외한 값들을 삭제할 수 있다.
도 7d는, 본 발명의 일 실시예에 따라 풀링된 결과를 풀링버퍼에 저장하는 과정을 나타낸 것이다.
상기 제어부(114)는, 상기 제2세트의 버퍼들(50) 중 인덱스 0 내지 n-1의 값들에 대하여 풀링을 실행하고, 풀링한 결과값을 풀링버퍼(60) 중 인덱스 j+3을 갖는 버퍼에 저장할 수 있다. 예컨대, 도 7d에 나타낸 것과 같이, 상기 제2세트의 버퍼들(50) 중 인덱스 0 내지 3의 값들에 대하여 풀링을 실행하고, 상기 풀링한 결과값인 '11'를 풀링버퍼(60) 중 인덱스 j+3을 갖는 버퍼에 저장할 수 있다.
이로써 상기 풀링 윈도우(20[+3])에 의해 선택된 값들에 대한 풀링 프로세스가 완결되었다.
도 4 내지 도 7을 이용하여 설명한 본 발명의 실시예들을 다음과 같이 정리할 수 있다.
도 4에 설명한 방법은, 풀링 윈도우(20)를 이용하여 입력 어레이(10)로부터 최초의 풀링을 실행하는 방법을 나타낸 것이다.
도 5에 설명한 방법은, 풀링 윈도우(20)로부터 스트라이드 1만큼 이동한 풀링 윈도우(20[+1])를 이용하여 풀링을 실행하는 방법을 나타낸 것이다.
도 6에 설명한 방법은, 풀링 윈도우(20)로부터 스트라이드 2만큼 이동한 풀링 윈도우(20[+2])를 이용하여 풀링을 실행하는 방법을 나타낸 것이다.
도 7에 설명한 방법은, 풀링 윈도우(20)로부터 스트라이드 3만큼 이동한 풀링 윈도우(20[+3])를 이용하여 풀링을 실행하는 방법을 나타낸 것이다.
도 5와 도 7의 방법을 살펴보면, 풀링 윈도우의 최초의 위치로부터 홀수(1, 3, 5...)의 스트라이드만큼 이동한 풀링 윈도우를 이용한 경우, 그 스트라이드 값만 다를 뿐 그 과정이 동일하다는 것을 이해할 수 있다.
마찬가지로, 풀링 윈도우의 최초의 위치로부터 짝수(2, 4, 6...)의 스트라이드만큼 이동한 풀링 윈도우를 이용한 경우, 그 스트라이드 값만 다를 뿐 그 과정이 동일하다는 것을 이해할 수 있다.
도 4에 나타낸 프로세스를 시작 프로세스(P0)라고 지칭할 수 있다.
도 5에 나타낸 프로세스를 홀수 스트라이드 프로세스(P1)라고 지칭할 수 있다.
도 6에 나타낸 프로세스를 짝수 스트라이드 프로세스(P2)라고 지칭할 수 있다.
본 발명의 일 실시예에 따르면, 상기 시작 프로세스(P0)를 실행한 이후, 상기 홀수 스트라이드 프로세스(P1)와 상기 짝수 스트라이드 프로세스(P2)를 번갈아 실행함으로써(P0→P1→P2→P1→P2→P1→P2→....), 입력 어레이(10)에 대한 풀링 윈도우(20)를 이용한 풀링을 완료할 수 있다. 그 결과 풀링버퍼(60)에 완성된 풀링값을 저장하고, 이를 필요한 다른 프로세스에 이용할 수 있다.
이하, 도 8a, 도 8b, 및 도 8c를 도 8이라고 통칭한다.
도 8a는 본 발명의 일 실시예에 따라 제공되는 풀링 방법을 나타낸 순서도이다.
도 8b는 본 발명의 다른 실시예에 따라 제공되는 풀링 방법을 나타낸 순서도이다.
도 8c는 본 발명의 또 다른 실시예에 따라 제공되는 풀링 방법을 나타낸 순서도이다.
도 8a, 도 8b, 및 도 8c에 나타낸 방법들을 각각, 시작 풀링 프로세스(P0), 홀수 스트라이드 풀링 프로세스(P1), 및 짝수 스트라이드 풀링 프로세스(P2)라고 지칭할 수 있다.
도 8a에 제시한 방법은 다음 단계들을 포함할 수 있다.
단계(S100)에서, 상기 제어부(114)는 상기 풀링 윈도우(20[+0])에 의해 선택된 요소들을 내부 메모리(30)로 이동시킬 수 있다.
단계(S110)에서, 상기 제어부(114)는, 인덱스 k+2p 및 인덱스 k+2p+1 의 엘리먼트로 이루어지는 쌍에 대하여 풀링하여, 상기 풀링한 결과값을 제1세트의 버퍼들(40) 중 인덱스 p를 갖는 버퍼에 저장할 수 있다(p=0, ... , n-1, 여기서 2n은 풀링 윈도우의 크기).
단계(S120)에서, 상기 제어부(114)는, 인덱스 k+2q+1 및 인덱스 k+2q+2 의 엘리먼트로 이루어지는 쌍에 대하여 풀링하여, 상기 풀링한 결과값을 제2세트의 버퍼들(50) 중 인덱스 q를 갖는 버퍼에 저장할 수 있다(q=0, ... , n-2, 여기서 2n은 풀링 윈도우의 크기).
단계(S130)에서, 상기 제어부(114)는, 상기 풀링 윈도우(20[+0])에 의해 선택된 요소들 중 인덱스 k 내지 인덱스 k+2n-2의 값을 삭제할 수 있다(도 4c에서 문자 'X'로 표시).
단계(S140)에서, 상기 제어부(114)는, 상기 제1세트의 버퍼들(40) 중 인덱스 0 내지 n-1의 값들에 대하여 풀링을 실행하고, 풀링한 결과값을 풀링버퍼(60) 중 인덱스 j을 갖는 버퍼에 저장할 수 있다.
도 8b에 제시한 방법은 다음 단계들을 포함할 수 있다.
단계(S149)에서, 제어부(114)는 DRAM(130)으로부터 입력 어레이 중 인덱스 k+2n (=k+8)의 값을 읽어서 내부 메모리(30)에 저장할 수 있다.
단계(S150)에서, 상기 제어부(114)는, 인덱스 k+2n-1 및 인덱스 k+2n의 엘리먼트로 이루어지는 쌍에 대하여 풀링하여, 상기 풀링한 결과값을 제2세트의 버퍼들(50) 중 인덱스 n-1를 갖는 버퍼에 저장할 수 있다.
단계(S160)에서, 상기 제어부(114)는, 상기 풀링 윈도우(20[+1])에 의해 선택된 요소들 중 인덱스 k+2n-1(=k+7)의 값을 삭제할 수 있다.
단계(S170)에서, 상기 제어부(114)는, 상기 제2세트의 버퍼들(50) 중 인덱스 0 내지 n-1의 값들에 대하여 풀링을 실행하고, 풀링한 결과값을 풀링버퍼(60) 중 인덱스 j+1을 갖는 버퍼에 저장할 수 있다.
도 8c에 제시한 방법은 다음 단계들을 포함할 수 있다.
단계(S179)에서, 제어부(114)는 DRAM(130)으로부터 입력 어레이 중 인덱스 k+2n+1(=k+9)의 값을 읽어서 내부 메모리(30)에 저장할 수 있다.
단계(S180)에서, 상기 제어부(114)는, 상기 제1세트의 버퍼들(40) 중 인덱스 0을 갖는 버퍼의 값을 상기 입력 어레이(10)의 인덱스 k+2n 및 인덱스 k+2n+1의 값들로 이루어진 쌍을 풀링한 값으로 갱신할 수 있다.
단계(S190)에서, 상기 제어부(114)는, 상기 풀링 윈도우(20[+2])에 의해 선택된 요소들 중 인덱스 k+2n(=k+8)의 값을 삭제할 수 있다.
단계(S200)에서, 상기 제어부(114)는, 상기 제1세트의 버퍼들(40) 중 인덱스 0 내지 n-1의 값들에 대하여 풀링을 실행하고, 풀링한 결과값을 풀링버퍼(60) 중 인덱스 j+2을 갖는 버퍼에 저장할 수 있다.
상술한 본 발명의 실시예들을 이용하여, 본 발명의 기술 분야에 속하는 자들은 본 발명의 본질적인 특성에서 벗어나지 않는 범위 내에 다양한 변경 및 수정을 용이하게 실시할 수 있을 것이다. 특허청구범위의 각 청구항의 내용은 본 명세서를 통해 이해할 수 있는 범위 내에서 인용관계가 없는 다른 청구항에 결합될 수 있다.
Claims (9)
- 짝수 개의 요소들을 풀링하는 풀링 윈도우(20)로 입력 어레이(10)를 풀링하는 방법으로서,
컴퓨팅 장치가, 인덱스 k+2p 및 인덱스 k+2p+1 의 엘리먼트로 이루어지는 쌍에 대하여 풀링한 결과값을 제1세트의 버퍼들(40) 중 인덱스 p를 갖는 버퍼에 저장하고, 그리고 인덱스 k+2q+1 및 인덱스 k+2q+2 의 엘리먼트로 이루어지는 쌍에 대하여 풀링한 결과값을 제2세트의 버퍼들(50) 중 인덱스 q를 갖는 버퍼에 저장하는 제1단계(p=0, ..., n-1; q=0, ... n-2; k는 정수); 및
상기 컴퓨팅 장치가, 상기 제1세트의 버퍼들 중 인덱스 0 내지 n-1의 값들에 대하여 풀링한 결과값을 풀링버퍼(60) 중 인덱스 j을 갖는 버퍼에 저장하는 단계;
를 포함하는,
풀링 방법. - 제1항에 있어서,
상기 제1단계 이전에,
상기 컴퓨팅 장치가, 상기 입력 어레이 중 인덱스 k 내지 인덱스 k+2n-1 의 엘리먼트들을 읽어 내부메모리(30)에 저장하는 단계를 더 포함하는,
풀링 방법. - 제1항에 있어서,
상기 제1단계와 상기 인덱스 j를 갖는 버퍼에 저장하는 단계 사이에,
상기 컴퓨팅 장치가, 상기 입력 어레이 중 인덱스 k 내지 인덱스 k+2n-2의 값을 삭제하는 단계를 더 포함하는,
풀링 방법. - 제2항에 있어서,
상기 컴퓨팅 장치가, 인덱스 k+2n-1 및 인덱스 k+2n 의 엘리먼트로 이루어지는 쌍에 대하여 풀링한 결과값을 상기 제2세트의 버퍼들 중 인덱스 n-1을 갖는 버퍼에 저장하는 단계; 및
상기 컴퓨팅 장치가, 상기 제2세트의 버퍼들 중 인덱스 0 내지 n-1의 값들에 대하여 풀링하여 상기 풀링버퍼 중 인덱스 j+1을 갖는 버퍼에 저장하는 단계;
를 더 포함하는,
풀링 방법. - 제4항에 있어서,
상기 인덱스 j를 갖는 버퍼에 저장하는 단계와 상기 인덱스 n-1을 갖는 버퍼에 저장하는 단계 사이에,
상기 컴퓨팅 장치가, 상기 입력 어레이 중 인덱스 k+2n의 엘리먼트를 읽어 상기 내부메모리에 저장하는 단계를 더 포함하는,
풀링 방법. - 제4항에 있어서,
상기 인덱스 n-1을 갖는 버퍼에 저장하는 단계와 상기 인덱스 j+1을 갖는 버퍼에 저장하는 단계 사이에,
상기 컴퓨팅 장치가, 상기 입력 어레이 중 인덱스 k+2n-1의 값을 삭제하는 단계를 더 포함하는,
풀링 방법. - 제4항에 있어서,
상기 제1세트의 버퍼들 중 인덱스 0을 갖는 버퍼의 값을, 상기 입력 어레이 중 인덱스 k+2n 및 인덱스 k+2n+1의 엘리먼트로 이루어지는 쌍에 대하여 풀링한 결과값으로 갱신하는 단계;
상기 제1세트의 버퍼들 중 인덱스 0 내지 n-1의 값들에 대하여 풀링하여 상기 풀링버퍼 중 인덱스 j+2을 갖는 버퍼에 저장하는 단계;
를 더 포함하는,
풀링 방법. - 제7항에 있어서,
상기 인덱스 j+1을 갖는 버퍼에 저장하는 단계와 상기 갱신하는 단계 사이에,
상기 입력 어레이 중 인덱스 k+2n+1의 엘리먼트를 읽어 상기 내부메모리에 저장하는 단계를 더 포함하는,
풀링 방법. - 제7항에 있어서,
상기 갱신하는 단계와 상기 인덱스 j+2을 갖는 버퍼에 저장하는 단계 사이에,
상기 입력 어레이 중 인덱스 k+2n의 값을 삭제하는 단계를 더 포함하는,
풀링 방법.
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020210187396A KR102403277B1 (ko) | 2021-12-24 | 2021-12-24 | 어레이 풀링 방법 및 이를 위한 장치 |
PCT/KR2022/007383 WO2023120829A1 (ko) | 2021-12-24 | 2022-05-24 | 어레이 풀링 방법 및 이를 위한 장치 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020210187396A KR102403277B1 (ko) | 2021-12-24 | 2021-12-24 | 어레이 풀링 방법 및 이를 위한 장치 |
Publications (1)
Publication Number | Publication Date |
---|---|
KR102403277B1 true KR102403277B1 (ko) | 2022-05-30 |
Family
ID=81800187
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020210187396A KR102403277B1 (ko) | 2021-12-24 | 2021-12-24 | 어레이 풀링 방법 및 이를 위한 장치 |
Country Status (2)
Country | Link |
---|---|
KR (1) | KR102403277B1 (ko) |
WO (1) | WO2023120829A1 (ko) |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20190266784A1 (en) * | 2018-02-27 | 2019-08-29 | Stmicroelectronics S.R.L. | Data volume sculptor for deep learning acceleration |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7383375B2 (en) * | 2003-12-30 | 2008-06-03 | Sandisk Corporation | Data run programming |
US20190205738A1 (en) * | 2018-01-04 | 2019-07-04 | Tesla, Inc. | Systems and methods for hardware-based pooling |
WO2019227322A1 (zh) * | 2018-05-30 | 2019-12-05 | 深圳市大疆创新科技有限公司 | 池化装置和池化方法 |
KR20210036715A (ko) * | 2019-09-26 | 2021-04-05 | 삼성전자주식회사 | 뉴럴 프로세싱 장치 및 뉴럴 프로세싱 장치에서 뉴럴 네트워크의 풀링을 처리하는 방법 |
-
2021
- 2021-12-24 KR KR1020210187396A patent/KR102403277B1/ko active IP Right Grant
-
2022
- 2022-05-24 WO PCT/KR2022/007383 patent/WO2023120829A1/ko unknown
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20190266784A1 (en) * | 2018-02-27 | 2019-08-29 | Stmicroelectronics S.R.L. | Data volume sculptor for deep learning acceleration |
Also Published As
Publication number | Publication date |
---|---|
WO2023120829A1 (ko) | 2023-06-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20220383067A1 (en) | Buffer Addressing for a Convolutional Neural Network | |
US20030088600A1 (en) | Matrix transposition in a computer system | |
CN109993293B (zh) | 一种适用于堆叠式沙漏网络的深度学习加速器 | |
JPWO2019082859A1 (ja) | 推論装置、畳み込み演算実行方法及びプログラム | |
CN109146065B (zh) | 二维数据的卷积运算方法及装置 | |
CN116010299B (zh) | 一种数据处理方法、装置、设备及可读存储介质 | |
CN113806261B (zh) | 一种面向向量处理器的池化向量化实现方法 | |
KR102403277B1 (ko) | 어레이 풀링 방법 및 이를 위한 장치 | |
CN109726798B (zh) | 一种数据处理方法及装置 | |
US20210049496A1 (en) | Device and methods for a quantum circuit simulator | |
KR102368075B1 (ko) | 고효율 풀링 방법 및 이를 위한 장치 | |
JP7251354B2 (ja) | 情報処理装置、情報処理プログラム、及び情報処理方法 | |
CN109800867B (zh) | 一种基于fpga片外存储器的数据调用方法 | |
CN112905526B (zh) | 一种多种类型卷积的fpga实现方法 | |
CN113128688B (zh) | 通用型ai并行推理加速结构以及推理设备 | |
CN116051345A (zh) | 图像数据处理方法、装置、计算机设备及可读存储介质 | |
KR102395743B1 (ko) | 1차원 어레이 풀링 방법 및 이를 위한 장치 | |
CN115965052A (zh) | 一种卷积神经网络硬件加速器及加速方法 | |
KR102372869B1 (ko) | 인공 신경망을 위한 행렬 연산기 및 행렬 연산 방법 | |
CN111783976A (zh) | 一种基于窗口梯度更新的神经网络训练过程中间值存储压缩方法和装置 | |
US20220172032A1 (en) | Neural network circuit | |
CN114118395B (zh) | 智能处理器装置与降低存储器带宽的方法 | |
CN116721006B (zh) | 特征图处理方法和装置 | |
CN110489819B (zh) | 一种反池化运算方法和电路 | |
JP7420100B2 (ja) | 処理装置、処理方法、およびプログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant |