KR20230020876A - 인 메모리 컴퓨팅을 통해 컨벌루션 뉴럴 네트워크 연산을 수행하는 방법 - Google Patents
인 메모리 컴퓨팅을 통해 컨벌루션 뉴럴 네트워크 연산을 수행하는 방법 Download PDFInfo
- Publication number
- KR20230020876A KR20230020876A KR1020210102818A KR20210102818A KR20230020876A KR 20230020876 A KR20230020876 A KR 20230020876A KR 1020210102818 A KR1020210102818 A KR 1020210102818A KR 20210102818 A KR20210102818 A KR 20210102818A KR 20230020876 A KR20230020876 A KR 20230020876A
- Authority
- KR
- South Korea
- Prior art keywords
- weight
- specific
- convolution
- input
- binary value
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims description 34
- 238000013527 convolutional neural network Methods 0.000 title claims description 19
- 230000015654 memory Effects 0.000 claims abstract description 46
- 238000004364 calculation method Methods 0.000 claims description 21
- 230000003068 static effect Effects 0.000 claims description 4
- 238000013135 deep learning Methods 0.000 description 9
- 238000007792 addition Methods 0.000 description 7
- 230000000694 effects Effects 0.000 description 4
- 230000008901 benefit Effects 0.000 description 3
- 230000001603 reducing effect Effects 0.000 description 3
- 238000010586 diagram Methods 0.000 description 2
- 238000010801 machine learning Methods 0.000 description 2
- 239000011159 matrix material Substances 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 208000017972 multifocal atrial tachycardia Diseases 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 238000013528 artificial neural network Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000003860 storage Methods 0.000 description 1
- 238000010977 unit operation Methods 0.000 description 1
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/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
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/15—Correlation function computation including computation of convolution operations
- G06F17/153—Multidimensional correlation or convolution
-
- 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/04—Architecture, e.g. interconnection topology
- G06N3/0464—Convolutional networks [CNN, ConvNet]
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C11/00—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
- G11C11/54—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using elements simulating biological cells, e.g. neuron
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Health & Medical Sciences (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Biophysics (AREA)
- General Engineering & Computer Science (AREA)
- Molecular Biology (AREA)
- General Health & Medical Sciences (AREA)
- Pure & Applied Mathematics (AREA)
- Computational Linguistics (AREA)
- Artificial Intelligence (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Evolutionary Computation (AREA)
- Neurology (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Computer Hardware Design (AREA)
- Complex Calculations (AREA)
Abstract
인 메모리 컴퓨팅(In-memory Computing)을 통해 컨벌루션 뉴럴 네트워크(Convolution Neural Network) 연산을 수행하는 방법에 있어서, (a) 컨벌루션 인풋 데이터 - 상기 컨벌루션 인풋 데이터는 컨벌루션 대상이 되는 텐서임 - 와 각각 (2n+1) x (2n+1) x CH 볼륨을 가지는 복수의 컨벌루션 필터 - 상기 n은 1 이상의 정수임 - 가 외부 메모리에 저장되거나 상기 컨벌루션 인풋 데이터 및 상기 (2n+1) x (2n+1) x CH 볼륨을 가지는 복수의 컨벌루션 필터 각각에 포함된 각각의 컨벌루션 웨이트가 각각 2^k 비트 데이터 - 상기 k 는 1 이상의 정수임 - 로 변환되어 상기 외부 메모리에 저장된 상태에서, 인 메모리 컴퓨팅 프로세서가, 상기 복수의 컨벌루션 필터에 포함된 각 채널의 지정 위치에 위치한 지정 컨벌루션 웨이트를 제외한 각각의 4n(n+1) x CH x 2^k 개의 웨이트 바이너리 값을 2^m 단위 - 상기 m 은 1 이상의 정수임 - 의 웨이트 비트 데이터로 DRAM에 전송하고, 상기 컨벌루션 인풋 데이터에 대한 인풋 바이너리 값을 2^m 단위의 인풋 비트 데이터로 상기 DRAM에 전송하여, (i) 상기 복수의 컨벌루션 필터에 포함된 각 채널의 상기 지정 컨벌루션 웨이트를 제외한 각각의 4n(n+1) x CH x 2^k 개의 상기 웨이트 바이너리 값에 따라 결정되는 DRAM 뱅크 상의 적어도 하나의 제1 비트라인 및 상기 웨이트 바이너리 값을 저장하고자 하는 상기 DRAM 뱅크 상의 일부 영역에 대응되는 제1 워드라인을 선택하여, 상기 웨이트 바이너리 값을 상기 제1 비트라인 및 상기 제1 워드라인에 대응되는 제1 셀들에 저장하고, (ii) 상기 인풋 바이너리 값에 따라 결정되는 상기 DRAM 뱅크 상의 적어도 하나의 제2 비트라인 및 상기 인풋 바이너리 값을 저장하고자 하는 상기 DRAM 뱅크 상의 다른 일부 영역에 대응되는 제2 워드라인을 선택하여, 상기 인풋 바이너리 값을 상기 제2 비트라인 및 상기 제2 워드라인에 대응되는 제2 셀들에 저장함으로써, 상기 DRAM 뱅크 상의 전체 워드라인 중 일부인 적어도 하나의 상기 제1 워드라인에 대응하는 상기 제1 셀들에는 상기 웨이트 바이너리 값을 저장하고, 상기 전체 워드라인 중 일부인 적어도 하나의 상기 제2 워드라인에 대응하는 상기 제2 셀들에는 상기 인풋 바이너리 값을 저장하는 단계; 및 (b) 상기 인 메모리 컴퓨팅 프로세서가, 상기 DRAM 에 저장된 4n(n+1) x CH x 2^k 개의 상기 웨이트 바이너리 값 중, 특정 채널의 4n(n+1) x 2^k 개의 웨이트 바이너리 값과, 상기 특정 채널의 컨벌루션 웨이트를 사용하여 컨벌루션 연산을 수행하기 위한 수용 필드에 대응되는 상기 컨벌루션 인풋 데이터의 소정 영역에 대한 소정 인풋 바이너리 값 중, 상기 지정 컨벌루션 웨이트에 대응되는 위치의 지정 컨벌루션 인풋 데이터를 제외한 4n(n+1) x 2^k 개의 나머지 인풋 바이너리 값을 사용하여 컨벌루션 연산을 수행하는 단계;를 포함하는 연산 방법이 개시된다.
Description
본 발명은 인 메모리 컴퓨팅을 통해 컨벌루션 뉴럴 네트워크 연산을 수행하는 방법에 관한 것이다.
딥러닝(Deep Learning)이란 머신러닝의 한 분야로, 여러 레이어를 가진 인공신경망(Artificial Neural Network)을 학습하여 데이터 분류, 인식, 감지 등의 태스크를 수행하는 것으로, 딥러닝에서 주어진 태스크에 대한 연산을 효과적으로 수행하기 위해서는 여러 레이어에 대한 연산에 많은 파라미터가 사용되기 때문에 이러한 연산에 최적화된 하드웨어 및 소프트웨어의 설계가 필요하다.
이에, SRAM(Static Random Access Memory)이나 DRAM(Dynamic Random Access Memory) 등과 같은 메모리에 연산에 사용되는 데이터를 적재하여 딥러닝 연산을 수행하는 인 메모리 컴퓨팅(In-Memory Computing) 방식이 딥러닝 연산을 효과적으로 수행하기 위한 하나의 방법으로 제안되고 있다. 이러한 인 메모리 컴퓨팅은, 하드디스크에 전체 데이터가 저장된 상태에서 연산에 필요한 일부 데이터를 메모리에 캐싱하여 단위 연산을 수행하는 과정을 반복하는 디스크 기반 컴퓨팅과 달리, 연산에 사용되는 전체 데이터를 메모리에 저장한 상태에서 연산을 수행하는 것이다.
다만, 인 메모리 컴퓨팅 기반의 딥러닝 연산기에서는 메모리 구조를 딥러닝 연산에 이용되는 네트워크 구조에 어떻게 적용할지를 고려한 하드웨어 및 소프트웨어 설계 방식이 필요하다.
특히, 연산량이 많은 딥러닝 연산을 효과적으로 수행하기 위해 많은 수의 연산기를 병렬적으로 사용하도록 설계하더라도 NAND Flash, DRAM, SRAM 등의 통상적인 메모리의 용량 및 대역폭(bandwidth)에는 한계가 있기 때문에 인 메모리 컴퓨팅에서는 메모리의 성능 및 구조를 고려하여 연산을 위한 하드웨어 및 소프트웨어를 설계해야 한다.
딥러닝 연산이 사용되는 일 예로는 이미지 및 영상 분석에 쓰이는 CNN(Convolutional Neural Network)이 있다. 일반적으로, CNN의 컨벌루션 연산에서는 필터 형태의 웨이트가 연산이 수행되는 대상이 되는 인풋 매트릭스를 스캔하는 방식을 통해 연산이 이루어진다.
여기서, 각 채널의 필터 크기로는 3x3, 즉, 9개의 웨이트로 이루어진 필터 크기가 가장 일반적이며, 5x5, 7x7 등 주로 홀수 크기의 필터가 사용된다. 여기서, 2x2, 4x4와 같은 짝수 크기의 필터가 컨벌루션 연산에 사용되지 않는 이유는 짝수 크기의 필터가 인풋 매트릭스를 스캔하는 경우, 필터를 수용하는 인풋 필드에 대칭 패딩을 추가하더라도 컨벌루션 연산 대상에 대해 비대칭적인 정보를 담고 있는 피처맵을 생성하기 때문이다.
그런데, 이렇듯 컨벌루션 연산에서 3x3, 5x5, 7x7과 같은 사이즈의 필터를 사용하면 전체 필터에 대한 웨이트 개수는 9개, 25개, 49개의 배수 형태를 취하는데, 인 메모리 컴퓨팅에서 이와 같은 홀수의 배수 형태의 웨이트 개수는 불필요한 동작을 추가로 요구한다.
일 예로, 일반적으로 사용되는 DDR4-3200 제품의 DRAM 동작에서는 한 메모리 칩에서 400 MHz의 속도로 64 bit의 데이터를 읽거나 쓸 수 있는데, 컨벌루션 연산에서 1개의 데이터가 8 bit의 레졸루션을 가지고 있다면 400 MHz마다 64 bit의 데이터, 즉 8 개의 데이터를 읽어오는 동작을 수행할 수 있다고 볼 수 있다. 그러나, 각 채널의 필터마다 홀수 개수의 웨이트를 가지고 있는 통상적인 컨벌루션 연산의 경우 메모리에서의 연산을 수행하기 위한 웨이트를 로드하는 데 있어서, 64 bit의 데이터가 되지 않는 일부 웨이트를 로드하기 위한 추가적인 싸이클이 필요할 수 밖에 없다. 따라서, 이러한 추가적인 싸이클에 소모되는 메모리 동작 및 연산기 동작은 인 메모리 컴퓨팅 방식을 이용한 컨벌루션 연산의 효율을 떨어뜨리는 결과를 불러온다.
따라서, 상기 문제점들을 해결하기 위한 개선 방안이 요구되는 실정이다.
본 발명은 상술한 문제점을 모두 해결하는 것을 그 목적으로 한다.
또한, 본 발명은 메모리에 의해 발생하는 병목 현상을 해결하기 위해 메모리 및 연산기의 스루풋(throughput)을 최대로 구현하도록 하는 것을 목적으로 한다.
또한, 본 발명은 메모리의 대역폭(bandwidth)에 최적화된 컨벌루션 연산을 수행하도록 하는 것을 목적으로 한다.
또한, 본 발명은 메모리 및 연산기의 스루풋을 최대로 구현하기 위해 각 채널의 컨벌루션 필터에서 웨이트의 개수 중 2의 거듭제곱개의 웨이트를 선정하여 연산을 수행하도록 하는 것을 또 다른 목적으로 한다.
또한, 본 발명은 DRAM 구조에 적용 가능한 In-Memory Computing을 수행하는 연산기를 구현할 수 있도록 하는 것을 또 다른 목적으로 한다.
상기한 바와 같은 본 발명의 목적을 달성하고, 후술하는 본 발명의 특징적인 효과를 실현하기 위한, 본 발명의 특징적인 구성은 하기와 같다.
본 발명의 일 태양에 따르면, 인 메모리 컴퓨팅(In-memory Computing)을 통해 컨벌루션 뉴럴 네트워크(Convolution Neural Network) 연산을 수행하는 방법에 있어서, (a) 컨벌루션 인풋 데이터 - 상기 컨벌루션 인풋 데이터는 컨벌루션 대상이 되는 텐서임 - 와 각각 (2n+1) x (2n+1) x CH 볼륨을 가지는 복수의 컨벌루션 필터 - 상기 n은 1 이상의 정수임 - 가 외부 메모리에 저장되거나 상기 컨벌루션 인풋 데이터 및 상기 (2n+1) x (2n+1) x CH 볼륨을 가지는 복수의 컨벌루션 필터 각각에 포함된 각각의 컨벌루션 웨이트가 각각 2^k 비트 데이터 - 상기 k 는 1 이상의 정수임 - 로 변환되어 상기 외부 메모리에 저장된 상태에서, 인 메모리 컴퓨팅 프로세서가, 상기 복수의 컨벌루션 필터에 포함된 각 채널의 지정 위치에 위치한 지정 컨벌루션 웨이트를 제외한 각각의 4n(n+1) x CH x 2^k 개의 웨이트 바이너리 값을 2^m 단위 - 상기 m 은 1 이상의 정수임 - 의 웨이트 비트 데이터로 DRAM에 전송하고, 상기 컨벌루션 인풋 데이터에 대한 인풋 바이너리 값을 2^m 단위의 인풋 비트 데이터로 상기 DRAM에 전송하여, (i) 상기 복수의 컨벌루션 필터에 포함된 각 채널의 상기 지정 컨벌루션 웨이트를 제외한 각각의 4n(n+1) x CH x 2^k 개의 상기 웨이트 바이너리 값에 따라 결정되는 DRAM 뱅크 상의 적어도 하나의 제1 비트라인 및 상기 웨이트 바이너리 값을 저장하고자 하는 상기 DRAM 뱅크 상의 일부 영역에 대응되는 제1 워드라인을 선택하여, 상기 웨이트 바이너리 값을 상기 제1 비트라인 및 상기 제1 워드라인에 대응되는 제1 셀들에 저장하고, (ii) 상기 인풋 바이너리 값에 따라 결정되는 상기 DRAM 뱅크 상의 적어도 하나의 제2 비트라인 및 상기 인풋 바이너리 값을 저장하고자 하는 상기 DRAM 뱅크 상의 다른 일부 영역에 대응되는 제2 워드라인을 선택하여, 상기 인풋 바이너리 값을 상기 제2 비트라인 및 상기 제2 워드라인에 대응되는 제2 셀들에 저장함으로써, 상기 DRAM 뱅크 상의 전체 워드라인 중 일부인 적어도 하나의 상기 제1 워드라인에 대응하는 상기 제1 셀들에는 상기 웨이트 바이너리 값을 저장하고, 상기 전체 워드라인 중 일부인 적어도 하나의 상기 제2 워드라인에 대응하는 상기 제2 셀들에는 상기 인풋 바이너리 값을 저장하는 단계; 및 (b) 상기 인 메모리 컴퓨팅 프로세서가, 상기 DRAM 에 저장된 4n(n+1) x CH x 2^k 개의 상기 웨이트 바이너리 값 중, 특정 채널의 4n(n+1) x 2^k 개의 웨이트 바이너리 값과, 상기 특정 채널의 컨벌루션 웨이트를 사용하여 컨벌루션 연산을 수행하기 위한 수용 필드에 대응되는 상기 컨벌루션 인풋 데이터의 소정 영역에 대한 소정 인풋 바이너리 값 중, 상기 지정 컨벌루션 웨이트에 대응되는 위치의 지정 컨벌루션 인풋 데이터를 제외한 4n(n+1) x 2^k 개의 나머지 인풋 바이너리 값을 사용하여 컨벌루션 연산을 수행하는 단계;를 포함하는 연산 방법이 개시된다.
일례로서, 상기 (b) 단계에서, 상기 인 메모리 컴퓨팅 프로세서가, (i) 상기 DRAM 뱅크 상에서 상기 웨이트 바이너리 값들을 저장하고 있는 상기 제1 셀들 중 적어도 하나의 특정 웨이트 바이너리 값을 저장하고 있는 적어도 하나의 특정 제1 셀에 대응되는 특정 제1 워드라인과 적어도 하나의 특정 제1 비트라인을 선택함으로써 제1 센스 앰프들이 상기 특정 제1 셀에 저장된 상기 특정 웨이트 바이너리 값을 상기 특정 제1 비트라인을 통해서 감지하도록 하고, 상기 제1 센스 앰프들이 감지한 상기 특정 웨이트 바이너리 값을 컬럼 멀티플렉서(Column Multiplexer)에 인가하여 상기 특정 채널의 4n(n+1) x 2^k 개의 웨이트 바이너리 값을 순차적으로 출력하도록 하고, (ii) 상기 DRAM 뱅크 상에서 상기 인풋 바이너리 값들을 저장하고 있는 상기 제2 셀들 중 적어도 하나의 특정 인풋 바이너리 값을 저장하고 있는 적어도 하나의 특정 제2 셀에 대응되는 특정 제2 워드라인과 적어도 하나의 특정 제2 비트라인을 선택함으로써 제2 센스 앰프들이 상기 특정 제2 셀에 저장된 상기 특정 인풋 바이너리 값을 상기 특정 제2 비트라인을 통해서 감지하도록 하고, 상기 제2 센스 앰프들이 감지한 상기 특정 인풋 바이너리 값을 상기 컬럼 멀티플렉서에 인가하여, 4n(n+1) x 2^k 개의 상기 나머지 인풋 바이너리 값을 출력하도록 하며, (iii) 가속기를 통해 상기 특정 채널의 웨이트 바이너리 값과 상기 나머지 인풋 바이너리 값에 대한 엘리먼트 와이즈(element-wise) 곱셈을 수행하고 이로부터 나온 결과에 대한 덧셈을 수행하여 상기 특정 채널에 대한 컨벌루션 연산 결과값에 대응하는 아웃풋 바이너리 값을 획득하고, 상기 아웃풋 바이너리 값에 따라 결정되는 상기 DRAM 뱅크 상의 적어도 하나의 제3 비트라인 및 상기 아웃풋 바이너리 값을 저장하고자 하는 상기 DRAM 뱅크 상의 또 다른 일부 영역에 대응되는 제3 워드라인을 선택하여, 상기 아웃풋 바이너리 값을 상기 제3 비트라인 및 상기 제3 워드라인에 대응되는 제3 셀들에 저장하는 단계;를 포함하는 것을 특징으로 하는 연산 방법이 개시된다.
일례로서, 상기 (b) 단계 이후에, 상기 인 메모리 컴퓨팅 프로세서가, 상기 특정 채널에 대한 상기 컨벌루션 연산 결과값을 이용하여 다음 컨벌루션 연산을 수행하는 경우, 상기 DRAM 에 저장된 상기 웨이트 바이너리 값 중, 상기 다음 컨벌루션 연산을 위한 다음 특정 채널의 4n(n+1) x 2^k 개의 웨이트 바이너리 값과, 상기 다음 컨벌루션 연산을 위한 상기 다음 특정 채널의 컨벌루션 웨이트를 사용하여 상기 다음 컨벌루션 연산을 수행하기 위한 수용 필드에 대응되는 상기 컨벌루션 연산 결과값의 소정 영역에 대한 소정 아웃풋 바이너리 값 중, 상기 지정 컨벌루션 웨이트에 대응되는 상기 위치의 지정 컨벌루션 연산 값을 제외한 4n(n+1) x 2^k 개의 나머지 아웃풋 바이너리 값을 사용하여 상기 다음 컨벌루션 연산을 수행하는 것을 특징으로 하는 연산 방법이 개시된다.
일례로서, 상기 인 메모리 컴퓨팅 프로세서가, (i) 채널 방향으로 정렬된 상기 복수의 컨벌루션 필터에서, 특정 위치에서 상기 채널 방향으로 정렬된 소정 컨벌루션 웨이트에 대응되는 소정 웨이트 바이너리 값을 웨이트 컬럼 어드레스에 맵핑한 상태에서, 적어도 하나의 특정 웨이트 컬럼 어드레스에 대응되는 상기 특정 제1 비트라인을 선택하여 상기 특정 웨이트 바이너리 값을 획득하거나, (ii) 상기 채널 방향으로 정렬된 상기 복수의 컨벌루션 인풋 데이터에서, 상기 특정 위치에서 상기 채널 방향으로 정렬된 소정 컨벌루션 인풋 데이터에 대응되는 소정 인풋 바이너리 값을 인풋 컬럼 어드레스에 맵핑한 상태에서, 적어도 하나의 특정 인풋 컬럼 어드레스에 대응되는 상기 특정 제2 비트라인을 선택하여 상기 특정 인풋 바이너리 값을 획득하는 것을 특징으로 하는 연산 방법이 개시된다.
일례로서, 상기 인 메모리 컴퓨팅 프로세서가, 상기 지정 컨벌루션 웨이트의 상기 지정 위치를 정중앙으로 설정하여 상기 복수의 컨벌루션 필터에 포함된 각 채널의 정중앙 위치에 위치한 정중앙 컨벌루션 웨이트를 제외한 각각의 4n(n+1) x CH x 2^k 개의 상기 웨이트 바이너리 값을 상기 DRAM에 전송하는 것을 특징으로 하는 연산 방법이 개시된다.
일례로서, 상기 DRAM 뱅크가 워드라인 당 8192개의 셀을 갖고, 상기 컨벌루션 웨이트와 상기 컨벌루션 인풋 데이터가 각각 8 비트의 비트 데이터로 표현될 때, 상기 컨벌루션 웨이트와 상기 컨벌루션 인풋 데이터는 각각 64 비트 단위로 상기 DRAM에 전송되어 각각 상기 제1 셀들과 상기 제2 셀들에 저장되며, 64개의 상기 특정 채널의 웨이트 바이너리 값과 상기 컨벌루션 연산이 수행될 64개의 상기 나머지 인풋 바이너리 값을 각각 64 비트 단위로 획득하여 상기 엘리먼트 와이즈 곱셈을 수행하고 이로부터 나온 결과에 대한 상기 덧셈을 수행하여 상기 컨벌루션 연산 결과값을 획득하는 것을 특징으로 하는 연산 방법이 개시된다.
본 발명의 다른 태양에 따르면, 인 메모리 컴퓨팅(In-memory Computing)을 통해 컨벌루션 뉴럴 네트워크(Convolution Neural Network) 연산을 수행하는 방법에 있어서, (a) 컨벌루션 인풋 데이터 - 상기 컨벌루션 인풋 데이터는 컨벌루션 대상이 되는 텐서임 - 와 각각 (2n+1) x (2n+1) x CH 볼륨을 가지는 복수의 컨벌루션 필터 - 상기 n은 1 이상의 정수임 - 가 외부 메모리에 저장되거나 상기 컨벌루션 인풋 데이터 및 상기 (2n+1) x (2n+1) x CH 볼륨을 가지는 복수의 컨벌루션 필터 각각에 포함된 각각의 컨벌루션 웨이트가 각각 2^k 비트 데이터 - 상기 k 는 1 이상의 정수임 - 로 변환되어 상기 외부 메모리에 저장된 상태에서, 인 메모리 컴퓨팅 프로세서가, 상기 복수의 컨벌루션 필터에 포함된 각 채널의 지정 위치에 위치한 지정 컨벌루션 웨이트를 제외한 각각의 4n(n+1) x CH x 2^k 개의 웨이트 바이너리 값을 2^m 단위 - 상기 m 은 1 이상의 정수임 - 의 웨이트 비트 데이터로 DRAM에 전송하고, 상기 컨벌루션 인풋 데이터에 대한 인풋 바이너리 값을 2^m 단위의 인풋 비트 데이터로 상기 DRAM에 전송하여, (i) 상기 복수의 컨벌루션 필터에 포함된 각 채널의 상기 지정 컨벌루션 웨이트를 제외한 각각의 4n(n+1) x CH x 2^k 개의 상기 웨이트 바이너리 값에 따라 결정되는 제1 DRAM 뱅크 상의 적어도 하나의 제1 비트라인 및 상기 웨이트 바이너리 값을 저장하고자 하는 상기 제1 DRAM 뱅크 상의 일부 영역에 대응되는 제1 워드라인을 선택하여, 상기 웨이트 바이너리 값을 상기 제1 비트라인 및 상기 제1 워드라인에 대응되는 제1 셀들에 저장하고, (ii) 상기 인풋 바이너리 값에 따라 결정되는 제2 DRAM 뱅크 상의 적어도 하나의 제2 비트라인 및 상기 인풋 바이너리 값을 저장하고자 하는 상기 제2 DRAM 뱅크 상의 일부 영역에 대응되는 제2 워드라인을 선택하여, 상기 인풋 바이너리 값을 상기 제2 비트라인 및 상기 제2 워드라인에 대응되는 제2 셀들에 저장함으로써, 상기 제1 DRAM 뱅크 상의 전체 워드라인 중 일부인 적어도 하나의 상기 제1 워드라인에 대응하는 상기 제1 셀들에는 상기 웨이트 바이너리 값을 저장하고, 상기 제2 DRAM 뱅크 상의 전체 워드라인 중 일부인 적어도 하나의 상기 제2 워드라인에 대응하는 상기 제2 셀들에는 상기 인풋 바이너리 값을 저장하는 단계; 및 (b) 상기 인 메모리 컴퓨팅 프로세서가, 상기 DRAM 에 저장된 4n(n+1) x CH x 2^k 개의 상기 웨이트 바이너리 값 중, 특정 채널의 4n(n+1) x 2^k 개의 웨이트 바이너리 값과, 상기 특정 채널의 컨벌루션 웨이트를 사용하여 컨벌루션 연산을 수행하기 위한 수용 필드에 대응되는 상기 컨벌루션 인풋 데이터의 소정 영역에 대한 소정 인풋 바이너리 값 중, 상기 지정 컨벌루션 웨이트에 대응되는 위치의 지정 컨벌루션 인풋 데이터를 제외한 4n(n+1) x 2^k 개의 나머지 인풋 바이너리 값을 사용하여 컨벌루션 연산을 수행하는 단계;를 포함하는 연산 방법이 개시된다.
일례로서, 상기 (b) 단계에서, 상기 인 메모리 컴퓨팅 프로세서가, (i) 상기 제1 DRAM 뱅크 상에서 상기 웨이트 바이너리 값들을 저장하고 있는 상기 제1 셀들 중 적어도 하나의 특정 웨이트 바이너리 값을 저장하고 있는 적어도 하나의 특정 제1 셀에 대응되는 특정 제1 워드라인과 적어도 하나의 특정 제1 비트라인을 선택함으로써 제1 센스 앰프들이 상기 특정 제1 셀에 저장된 상기 특정 웨이트 바이너리 값을 상기 특정 제1 비트라인을 통해서 감지하도록 하고, 상기 제1 센스 앰프들이 감지한 상기 특정 웨이트 바이너리 값을 제1 컬럼 멀티플렉서(Column Multiplexer)에 인가하여 상기 특정 채널의 4n(n+1) x 2^k 개의 웨이트 바이너리 값을 출력하도록 하고, (ii) 상기 제2 DRAM 뱅크 상에서 상기 인풋 바이너리 값들을 저장하고 있는 상기 제2 셀들 중 적어도 하나의 특정 인풋 바이너리 값을 저장하고 있는 적어도 하나의 특정 제2 셀에 대응되는 특정 제2 워드라인과 적어도 하나의 특정 제2 비트라인을 선택함으로써 제2 센스 앰프들이 상기 특정 제2 셀에 저장된 상기 특정 인풋 바이너리 값을 상기 특정 제2 비트라인을 통해서 감지하도록 하고, 상기 제2 센스 앰프들이 감지한 상기 특정 인풋 바이너리 값을 제2 컬럼 멀티플렉서에 인가하여 4n(n+1) x 2^k 개의 상기 나머지 인풋 바이너리 값을 출력하도록 하며, (iii) 상기 특정 채널의 웨이트 바이너리 값과 상기 나머지 인풋 바이너리 값을 각각 웨이트 SRAM(Static Random Access Memory)과 인풋 SRAM에 저장하고, 상기 웨이트 SRAM과 상기 인풋 SRAM에 저장된 상기 특정 채널의 웨이트 바이너리 값과 상기 나머지 인풋 바이너리 값을 가속기에 입력하여 상기 가속기로부터 상기 특정 채널의 웨이트 바이너리 값과 상기 나머지 인풋 바이너리 값에 대한 곱셈과 덧셈을 수행하여 상기 특정 컨벌루션 채널에 대한 컨벌루션 연산 결과값을 획득하고, 상기 아웃풋 바이너리 값에 따라 결정되는 제3 DRAM 뱅크 상의 적어도 하나의 제3 비트라인 및 상기 아웃풋 바이너리 값을 저장하고자 하는 상기 제3 DRAM 뱅크 상의 일부 영역에 대응되는 제3 워드라인을 선택하여, 상기 아웃풋 바이너리 값을 상기 제3 비트라인 및 상기 제3 워드라인에 대응되는 제3 셀들에 저장하는 단계;를 포함하는 것을 특징으로 하는 연산 방법이 개시된다.
일례로서, 상기 (b) 단계 이후에, 상기 인 메모리 컴퓨팅 프로세서가, 상기 특정 채널에 대한 상기 컨벌루션 연산 결과값을 이용하여 다음 컨벌루션 연산을 수행하는 경우, 상기 DRAM 에 저장된 상기 웨이트 바이너리 값 중, 상기 다음 컨벌루션 연산을 위한 다음 특정 채널의 4n(n+1) x 2^k 개의 웨이트 바이너리 값과, 상기 다음 컨벌루션 연산을 위한 상기 다음 특정 채널의 컨벌루션 웨이트를 사용하여 상기 다음 컨벌루션 연산을 수행하기 위한 수용 필드에 대응되는 상기 컨벌루션 연산 결과값의 소정 영역에 대한 소정 아웃풋 바이너리 값 중, 상기 지정 컨벌루션 웨이트에 대응되는 상기 위치의 지정 컨벌루션 연산 값을 제외한 4n(n+1) x 2^k 개의 나머지 아웃풋 바이너리 값을 사용하여 상기 다음 컨벌루션 연산을 수행하는 것을 특징으로 하는 연산 방법이 개시된다.
일례로서, 상기 인 메모리 컴퓨팅 프로세서가, (i) 채널 방향으로 정렬된 상기 복수의 컨벌루션 필터에서, 특정 위치에서 상기 채널 방향으로 정렬된 소정 컨벌루션 웨이트에 대응되는 소정 웨이트 바이너리 값을 웨이트 컬럼 어드레스에 맵핑한 상태에서, 적어도 하나의 특정 웨이트 컬럼 어드레스에 대응되는 상기 특정 제1 비트라인을 선택하여 상기 특정 웨이트 바이너리 값을 획득하거나, (ii) 상기 채널 방향으로 정렬된 상기 복수의 컨벌루션 인풋 데이터에서, 상기 특정 위치에서 상기 채널 방향으로 정렬된 소정 컨벌루션 인풋 데이터에 대응되는 소정 인풋 바이너리 값을 인풋 컬럼 어드레스에 맵핑한 상태에서, 적어도 하나의 특정 인풋 컬럼 어드레스에 대응되는 상기 특정 제2 비트라인을 선택하여 상기 특정 인풋 바이너리 값을 획득하는 것을 특징으로 하는 연산 방법이 개시된다.
일례로서, 상기 인 메모리 컴퓨팅 프로세서가, 상기 지정 컨벌루션 웨이트의 상기 지정 위치를 정중앙으로 설정하여 상기 복수의 컨벌루션 필터에 포함된 각 채널의 정중앙 위치에 위치한 정중앙 컨벌루션 웨이트를 제외한 각각의 4n(n+1) x CH x 2^k 개의 상기 웨이트 바이너리 값을 상기 DRAM에 전송하는 것을 특징으로 하는 연산 방법이 개시된다.
일례로서, 상기 제1 DRAM 뱅크와 상기 제2 DRAM 뱅크가 워드라인 당 8192개의 셀을 갖고, 상기 컨벌루션 웨이트와 상기 컨벌루션 인풋 데이터가 각각 8 비트의 비트 데이터로 표현될 때, 상기 컨벌루션 웨이트와 상기 컨벌루션 인풋 데이터는 각각 64 비트 단위로 상기 DRAM에 전송되어 각각 상기 제1 셀들과 상기 제2 셀들에 저장되며, 64개의 상기 특정 채널의 웨이트 바이너리 값과 상기 컨벌루션 연산이 수행될 64개의 상기 나머지 인풋 바이너리 값을 각각 64 비트 단위로 획득하여 64개의 상기 특정 채널의 웨이트 바이너리 값과 64개의 상기 나머지 인풋 바이너리 값을 각각 상기 웨이트 SRAM과 상기 인풋 SRAM에 저장하고, 상기 웨이트 SRAM과 상기 인풋 SRAM으로부터 획득한 상기 특정 채널의 웨이트 바이너리 값과 상기 나머지 인풋 바이너리 값에 대한 상기 곱셈과 상기 덧셈을 수행하여 상기 컨벌루션 연산 결과값을 획득하는 것을 특징으로 하는 연산 방법이 개시된다.
일례로서, 상기 제1 DRAM 뱅크, 상기 제2 DRAM 뱅크, 및 상기 제3 DRAM 뱅크는 서로 같거나 다른 것을 특징으로 하는 연산 방법이 개시된다.
본 발명은 디스크에 저장된 각 컨벌루션 필터에 포함된 웨이트들을 메모리 및 연산기에 전송할 때마다 각 채널의 컨벌루션 필터의 지정된 위치의 웨이트를 제외하여 메모리의 대역폭(bandwidth)에 맞게 웨이트의 개수를 조정하여 전송함으로써 CNN(Convolutional Neural Network)의 컨벌루션 연산을 수행함으로써 홀수의 배수 형태의 개수로 구성된 웨이트를 전송할 때 요구되는 불필요한 동작 싸이클을 절약하는 효과가 있다.
또한, 본 발명은 딥러닝의 sparsity 성질을 이용하여 각 채널의 홀수 개수의 웨이트에서 지정된 위치의 웨이트를 제외하고 컨벌루션 연산을 수행하더라도 연산 결과의 정확도에는 큰 영향을 끼치지 않으면서 연산량과 웨이트 용량을 감소시키는 효과가 있다.
또한, 본 발명은 DRAM 상에서 2의 거듭제곱 형태로 웨이트와 컨벌루션 연산의 대상이 되는 인풋을 메모리에 저장하고 연산기에 전송함으로써 메모리 및 연산기의 대역폭(bandwidth)에 최적화된 연산을 수행하는 효과가 있다.
본 발명의 실시예의 설명에 이용되기 위하여 첨부된 아래 도면들은 본 발명의 실시예들 중 단지 일부일 뿐이며, 본 발명이 속한 기술분야에서 통상의 지식을 가진 자(이하 "통상의 기술자")에게 있어서는 발명적 작업이 이루어짐 없이 이 도면들에 기초하여 다른 도면들이 얻어질 수 있다.
도 1은 본 발명의 일 실시예에 따라 CNN(Convolutional Neural Network)의 컨벌루션 연산을 수행하는 인 메모리 컴퓨팅 프로세서와 DRAM(Dynamic Random Access Memory), 및 외부 메모리를 포함하는 인 메모리 컴퓨팅 시스템을 개략적으로 도시한 것이고,
도 2는 본 발명의 일 실시예에 따른 컨벌루션 필터와 컨벌루션 인풋 데이터를 개략적으로 도시한 것이며,
도 3은 본 발명의 일 실시예에 따라 컨벌루션 필터 각각에 포함된 각각의 컨벌루션 웨이트에 대한 웨이트 바이너리 값과 컨벌루션 인풋 데이터에 대한 인풋 바이너리 값이 저장되는 DRAM의 뱅크(bank)를 개략적으로 도시한 것이고,
도 4는 본 발명의 일 실시예에 따라 컨벌루션 연산을 수행하는 방법을 개략적으로 도시한 것이며,
도 5는 본 발명의 일 실시예에 따라 DRAM 상에서 컨벌루션 연산이 수행되는 위치를 개략적으로 도시한 것이고,
도 6은 본 발명의 일 실시예에 따라 수행된 컨벌루션 연산의 결과를 통상적인 CNN 연산의 결과와 비교한 정확도 그래프를 개략적으로 도시한 것이며,
도 7은 이해를 돕기 위하여 일반적인 DRAM 동작을 도시한 것이고,
도 8은 본 발명의 다른 실시예에 따라 컨벌루션 연산을 수행하는 방법을 개략적으로 도시한 것이며,
도 9는 본 발명의 다른 실시예에 따라 DRAM 상에서 컨벌루션 연산이 수행되는 위치를 개략적으로 도시한 것이다.
도 1은 본 발명의 일 실시예에 따라 CNN(Convolutional Neural Network)의 컨벌루션 연산을 수행하는 인 메모리 컴퓨팅 프로세서와 DRAM(Dynamic Random Access Memory), 및 외부 메모리를 포함하는 인 메모리 컴퓨팅 시스템을 개략적으로 도시한 것이고,
도 2는 본 발명의 일 실시예에 따른 컨벌루션 필터와 컨벌루션 인풋 데이터를 개략적으로 도시한 것이며,
도 3은 본 발명의 일 실시예에 따라 컨벌루션 필터 각각에 포함된 각각의 컨벌루션 웨이트에 대한 웨이트 바이너리 값과 컨벌루션 인풋 데이터에 대한 인풋 바이너리 값이 저장되는 DRAM의 뱅크(bank)를 개략적으로 도시한 것이고,
도 4는 본 발명의 일 실시예에 따라 컨벌루션 연산을 수행하는 방법을 개략적으로 도시한 것이며,
도 5는 본 발명의 일 실시예에 따라 DRAM 상에서 컨벌루션 연산이 수행되는 위치를 개략적으로 도시한 것이고,
도 6은 본 발명의 일 실시예에 따라 수행된 컨벌루션 연산의 결과를 통상적인 CNN 연산의 결과와 비교한 정확도 그래프를 개략적으로 도시한 것이며,
도 7은 이해를 돕기 위하여 일반적인 DRAM 동작을 도시한 것이고,
도 8은 본 발명의 다른 실시예에 따라 컨벌루션 연산을 수행하는 방법을 개략적으로 도시한 것이며,
도 9는 본 발명의 다른 실시예에 따라 DRAM 상에서 컨벌루션 연산이 수행되는 위치를 개략적으로 도시한 것이다.
후술하는 본 발명에 대한 상세한 설명은, 본 발명의 목적들, 기술적 해법들 및 장점들을 분명하게 하기 위하여 본 발명이 실시될 수 있는 특정 실시예를 예시로서 도시하는 첨부 도면을 참조한다. 이들 실시예는 통상의 기술자가 본 발명을 실시할 수 있기에 충분하도록 상세히 설명된다.
또한, 본 발명의 상세한 설명 및 청구항들에 걸쳐, "포함하다"라는 단어 및 그것의 변형은 다른 기술적 특징들, 부가물들, 구성요소들 또는 단계들을 제외하는 것으로 의도된 것이 아니다. 통상의 기술자에게 본 발명의 다른 목적들, 장점들 및 특성들이 일부는 본 설명서로부터, 그리고 일부는 본 발명의 실시로부터 드러날 것이다. 아래의 예시 및 도면은 실례로서 제공되며, 본 발명을 한정하는 것으로 의도된 것이 아니다.
더욱이 본 발명은 본 명세서에 표시된 실시예들의 모든 가능한 조합들을 망라한다. 본 발명의 다양한 실시예는 서로 다르지만 상호 배타적일 필요는 없음이 이해되어야 한다. 예를 들어, 여기에 기재되어 있는 특정 형상, 구조 및 특성은 일 실시예에 관련하여 본 발명의 정신 및 범위를 벗어나지 않으면서 다른 실시예로 구현될 수 있다. 또한, 각각의 개시된 실시예 내의 개별 구성요소의 위치 또는 배치는 본 발명의 정신 및 범위를 벗어나지 않으면서 변경될 수 있음이 이해되어야 한다. 따라서, 후술하는 상세한 설명은 한정적인 의미로서 취하려는 것이 아니며, 본 발명의 범위는, 적절하게 설명된다면, 그 청구항들이 주장하는 것과 균등한 모든 범위와 더불어 첨부된 청구항에 의해서만 한정된다. 도면에서 유사한 참조부호는 여러 측면에 걸쳐서 동일하거나 유사한 기능을 지칭한다.
이하, 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자가 본 발명을 용이하게 실시할 수 있도록 하기 위하여, 본 발명의 바람직한 실시예들에 관하여 첨부된 도면을 참조하여 상세히 설명하기로 한다.
본 발명에서는 디스크에 저장된 각 컨벌루션 필터에 포함된 웨이트들을 메모리 및 연산기에 전송할 때마다 각 채널의 컨벌루션 필터의 지정된 위치의 웨이트를 제외하여 메모리의 대역폭(bandwidth)에 맞게 웨이트의 개수를 조정하여 전송함으로써 CNN(Convolutional Neural Network)의 컨벌루션 연산 결과의 정확도에는 큰 영향을 끼치지 않으면서 연산량과 웨이트 용량을 감소시키는 동시에 메모리 및 연산기의 대역폭(bandwidth)에 최적화된 인 메모리 컴퓨팅(In-Memory Computing) 방식의 컨벌루션 연산 수행 방법을 제안한다.
또한, 본 발명은 위와 같은 인 메모리 컴퓨팅 방식에 기반한 컨벌루션 연산 수행 방법을 DRAM(Dynamic Random Access Memory) 상에 구현하는 방법을 제안하나, 후술되는 CNN 연산 방법은 이에 한정되지 않으며, DRAM 과 같은 메모리 뿐만 아니라 SRAM, NAND Flash 등과 같은 메모리를 이용한 인 메모리 컴퓨팅에도 응용될 수 있다.
우선, 도 1은 본 발명의 일 실시예에 따라 CNN의 컨벌루션 연산을 수행하는 인 메모리 컴퓨팅 프로세서(100)와 DRAM(Dynamic Random Access Memory, 200), 및 외부 메모리(300)를 포함하는 인 메모리 컴퓨팅 시스템을 개략적으로 도시한 것이다. 여기서, 인 메모리 컴퓨팅 프로세서(100)와 DRAM(200), 및 외부 메모리(300) 중 적어도 일부는 컴퓨팅 장치(미도시) 상에 위치할 수 있고, 인 메모리 컴퓨팅 프로세서(100)는 추가로 어플리케이션이나 타 컴퓨팅 장치 등에 연결될 수 있으며, DRAM(200)에서 생성된 컨벌루션 연산 결과는 데이터 버스(data bus)를 통해 외부 메모리(300)에 저장되거나, 인 메모리 컴퓨팅 프로세서(100)와의 인터랙션에 따라 외부 어플리케이션에 직간접적으로 전달될 수 있다.
또한, 인 메모리 컴퓨팅 프로세서(100)는 MPU(Micro Processing Unit) 또는 CPU(Central Processing Unit), 캐쉬 메모리(Cache Memory), 데이터 버스(Data Bus) 등의 하드웨어 구성을 포함할 수 있다. 또한, 컴퓨팅 장치는 운영체제, 특정 목적을 수행하는 애플리케이션의 소프트웨어 구성을 더 포함할 수도 있다.
이와 같이 구성된 인 메모리 컴퓨팅 프로세서가 본 발명의 일 실시예에 따라 DRAM(200) 상에서 인 메모리 컴퓨팅을 수행하기 위한 방법을 도 2 내지 도 9를 참조하여 설명하면 다음과 같다.
우선, 본 발명은 인 메모리 컴퓨팅 방식에 기초한 컨벌루션 연산을 수행하므로, DRAM(200) 상에서 연산을 수행하기에 앞서, 컴퓨터의 하드디스크, 솔리드 스테이트 디스크 등과 같은 같은 외부 메모리(300)에 저장된 컨벌루션 필터와 컨벌루션 연산의 대상이 되는 컨벌루션 인풋 데이터를 DRAM(200)으로 전송하는 과정이 요구된다.
여기서, 컨벌루션 인풋 데이터와 각각 (2n+1) x (2n+1) x CH 볼륨을 가지는 복수의 컨벌루션 필터가 외부 메모리에 저장되거나 컨벌루션 인풋 데이터 및 (2n+1) x (2n+1) x CH 볼륨을 가지는 복수의 컨벌루션 필터 각각에 포함된 각각의 컨벌루션 웨이트가 각각 2^k 비트 데이터로 변환되어 외부 메모리(300)에 저장된 상태일 수 있다. 이때, 컨벌루션 인풋 데이터는 컨벌루션 대상이 되는 텐서이며, 텐서의 각 엘리먼트는 컨벌루션 연산이 수행되는 이미지나 피쳐맵(feature map) 및 영상 등에 포함된 각 픽셀 값일 수 있다. 또한, n 과 k 는 각각 1 이상의 정수이다.
이같이 외부 메모리(300)에 컨벌루션 인풋 데이터와 컨벌루션 웨이트가 저장된 상태에서, 인 메모리 컴퓨팅 프로세서(100)는 복수의 컨벌루션 필터에 포함된 각 채널의 지정 위치에 위치한 지정 컨벌루션 웨이트를 제외한 각각의 4n(n+1) x CH x 2^k 개의 웨이트 바이너리 값을 2^m 단위의 웨이트 비트 데이터로 DRAM(200)에 전송하고, 컨벌루션 인풋 데이터에 대한 인풋 바이너리 값을 2^m 단위의 인풋 비트 데이터로 DRAM(200)에 전송할 수 있다. 여기서, m 은 1 이상의 정수이다.
일 예로, 도 2는 본 발명의 일 실시예에 따른 컨벌루션 필터와 컨벌루션 인풋 데이터를 개략적으로 도시하고 있다.
도 2를 참조하면, 일 예로, 인 메모리 컴퓨팅 프로세서(100)가, 지정 컨벌루션 웨이트의 지정 위치를 정중앙으로 설정하여 복수의 컨벌루션 필터에 포함된 각 채널의 정중앙 위치에 위치한 정중앙 컨벌루션 웨이트를 제외한 각각의 4n(n+1) x CH x 2^k 개의 웨이트 바이너리 값을 DRAM(200)에 전송할 수 있다. 여기서, "지정 위치"는 반드시 정중앙일 필요는 없으며, 경우에 따라 소정의 위치(가령, 좌측상단의 위치)일 수 있을 것이다.
즉, 각 채널의 정중앙에 위치한 정중앙 컨벌루션 웨이트를 제외한 웨이트 바이너리 값이 DRAM(200)에 전송된 경우, 컨벌루션 인풋 데이터 전체가 DRAM(200)에 전송되더라도 연산을 수행할 때는 각각의 채널에서 정중앙 위치에 위치한 정중앙 컨벌루션 웨이트와 이에 대응되는 지정 컨벌루션 연산 값에 대해서는 컨벌루션 연산이 수행되지 않는다.
또한, 컨벌루션 웨이트와 컨벌루션 인풋 데이터가 각각 8 비트의 비트 데이터로 표현될 때, 컨벌루션 웨이트와 컨벌루션 인풋 데이터는 각각 64 비트 단위로 DRAM(200)에 전송되어 DRAM(200)에 저장될 수 있다.
가령, 도 2을 참조하면, 3D 구조의 컨벌루션 필터와 컨벌루션 인풋 데이터에서 각각 채널(또는, 뎁스) 방향으로 8개의 컨벌루션 웨이트나 인풋 데이터가 64 비트 단위(8 x 8 bit = 64bit)로 DRAM(200)에 전송되도록 함으로써, 전송되는 비트 데이트들이 순차적으로 DRAM(200)에 저장되도록 할 수 있다.
이어서, 도 3은 본 발명의 일 실시예에 따라 컨벌루션 필터 각각에 포함된 각각의 컨벌루션 웨이트에 대한 웨이트 바이너리 값과 컨벌루션 인풋 데이터에 대한 인풋 바이너리 값이 저장되는 DRAM(200)의 뱅크(bank)를 개략적으로 도시한 것이다. 참고로, DRAM은 1024x1024의 메모리 셀이 이루는 MAT, MAT가 8x64개 모여 이루는 뱅크, 또 뱅크가 모여 이루는 칩(chip)으로 구성될 수 있다.
도 3을 참조하면, 인 메모리 컴퓨팅 프로세서(100)는, 복수의 컨벌루션 필터에 포함된 각 채널의 지정 컨벌루션 웨이트를 제외한 각각의 4n(n+1) x CH x 2^k 개의 웨이트 바이너리 값에 따라 결정되는 DRAM 뱅크 상의 적어도 하나의 제1 비트라인 및 웨이트 바이너리 값을 저장하고자 하는 DRAM 뱅크 상의 일부 영역에 대응되는 제1 워드라인을 선택하여, 웨이트 바이너리 값을 제1 비트라인 및 제1 워드라인에 대응되는 제1 셀들에 저장할 수 있다.
컨벌루션 인풋 데이터에 대한 인풋 바이너리 값의 경우, 인 메모리 컴퓨팅 프로세서(100)가 인풋 바이너리 값에 따라 결정되는 DRAM 뱅크 상의 적어도 하나의 제2 비트라인 및 인풋 바이너리 값을 저장하고자 하는 DRAM 뱅크 상의 다른 일부 영역에 대응되는 제2 워드라인을 선택하여, 인풋 바이너리 값을 제2 비트라인 및 제2 워드라인에 대응되는 제2 셀들에 저장함으로써, DRAM 뱅크 상의 전체 워드라인 중 일부인 적어도 하나의 제1 워드라인에 대응하는 제1 셀들에는 웨이트 바이너리 값을 저장하고, 전체 워드라인 중 일부인 적어도 하나의 제2 워드라인에 대응하는 제2 셀들에는 인풋 바이너리 값을 저장할 수 있다.
이렇게 웨이트 바이너리 값과 인풋 바이너리 값에 대한 저장을 수행할 경우, 도 3과 같이 웨이트 바이너리 값을 저장하는 데에 이용된 제1 셀들이 위치한 적어도 하나의 제1 워드라인들과 인풋 바이너리 값을 저장하는 데에 이용된 제2 셀들이 위치한 적어도 하나의 제2 워드라인들이 존재할 수 있다. 이외에도, 컨벌루션 연산 결과값에 대응되는 아웃풋 바이너리 값 또한 DRAM 뱅크 상의 전체 워드라인 중 일부의 워드라인에 위치한 셀들에 저장될 수 있다.
또한, 인 메모리 컴퓨팅 프로세서(100)는 채널 방향으로 정렬된 복수의 컨벌루션 필터에서, 특정 위치에서 채널 방향으로 정렬된 소정 컨벌루션 웨이트에 대응되는 소정 웨이트 바이너리 값을 웨이트 컬럼 어드레스에 맵핑하여 저장하거나, 채널 방향으로 정렬된 복수의 컨벌루션 인풋 데이터에서, 특정 위치에서 채널 방향으로 정렬된 소정 컨벌루션 인풋 데이터에 대응되는 소정 인풋 바이너리 값을 인풋 컬럼 어드레스에 맵핑하여 저장할 수 있다.
일 예로, 다시 도 2를 참조하면, 각 컨벌루션 필터를 구성하는 각각의 컨벌루션 웨이트가 각각 8개의 웨이트 바이너리 값으로 변환되어 제1 셀들에 각 웨이트 바이너리 값이 저장되는 경우, 도 2와 같이 채널 방향으로 8개의 컨벌루션 웨이트가 웨이트 컬럼 어드레스에 맵핑될 수 있다. 여기서, 단일 로우(Row)에 총 8,192 bit, 즉, 8,192개의 셀들이 포함된 뱅크의 경우, 각 셀들에 대응되는 8,192개의 비트라인 어드레스를 0부터 127의 컬럼 어드레스 중 하나에 맵핑할 수 있으며, 각 컬럼 어드레스는 64개의 비트라인과 연결될 수 있다. 컨벌루션 입력 데이터도 컨벌루션 웨이트와 유사하게 인풋 컬럼 어드레스와 맵핑될 수 있다. 이렇게 채널 방향으로 컬럼 어드레스에 맵핑하여 웨이트 바이너리 값과 인풋 바이너리 값을 저장할 경우, 불필요한 데이터 fetching을 방지할 수 있다.
이어서, 인 메모리 컴퓨팅 프로세서(100)는 DRAM(200)에 저장된 4n(n+1) x CH x 2^k 개의 웨이트 바이너리 값 중, 특정 채널의 4n(n+1) x 2^k 개의 웨이트 바이너리 값과, 특정 채널의 컨벌루션 웨이트를 사용하여 컨벌루션 연산을 수행하기 위한 수용 필드에 대응되는 컨벌루션 인풋 데이터의 소정 영역에 대한 소정 인풋 바이너리 값 중, 지정 컨벌루션 웨이트에 대응되는 위치의 지정 컨벌루션 인풋 데이터를 제외한 4n(n+1) x 2^k 개의 나머지 인풋 바이너리 값을 사용하여 컨벌루션 연산을 수행할 수 있다.
구체적으로, 도 4는 본 발명의 일 실시예에 따라 컨벌루션 연산을 수행하는 방법을 개략적으로 도시하고 있다.
도 4에 개시된 본 발명의 일 실시예에 따르면, 인 메모리 컴퓨팅 프로세서(100)는 DRAM 뱅크 상에서 웨이트 바이너리 값들을 저장하고 있는 제1 셀들 중 적어도 하나의 특정 웨이트 바이너리 값을 저장하고 있는 적어도 하나의 특정 제1 셀에 대응되는 특정 제1 워드라인과 적어도 하나의 특정 제1 비트라인을 선택함으로써 제1 센스 앰프들이 특정 제1 셀에 저장된 특정 웨이트 바이너리 값을 특정 제1 비트라인을 통해서 감지하도록 하고, 제1 센스 앰프들이 감지한 특정 웨이트 바이너리 값을 컬럼 멀티플렉서(Column Multiplexer)에 인가하여 특정 채널의 4n(n+1) x 2^k 개의 웨이트 바이너리 값을 출력하도록 할 수 있다.
또한, 인 메모리 컴퓨팅 프로세서(100)는 DRAM 뱅크 상에서 인풋 바이너리 값들을 저장하고 있는 제2 셀들 중 적어도 하나의 특정 인풋 바이너리 값을 저장하고 있는 적어도 하나의 특정 제2 셀에 대응되는 특정 제2 워드라인과 적어도 하나의 특정 제2 비트라인을 선택함으로써 제2 센스 앰프들이 특정 제2 셀에 저장된 특정 인풋 바이너리 값을 특정 제2 비트라인을 통해서 감지하도록 하고, 제2 센스 앰프들이 감지한 특정 인풋 바이너리 값을 컬럼 멀티플렉서에 인가하여, 4n(n+1) x 2^k 개의 나머지 인풋 바이너리 값을 출력하도록 할 수 있다.
이때, 인 메모리 컴퓨팅 프로세서(100)는 채널 방향으로 정렬된 복수의 컨벌루션 필터에서, 특정 위치에서 채널 방향으로 정렬된 소정 컨벌루션 웨이트에 대응되는 소정 웨이트 바이너리 값을 웨이트 컬럼 어드레스에 맵핑한 상태에서, 적어도 하나의 특정 웨이트 컬럼 어드레스에 대응되는 특정 제1 비트라인을 선택하여 특정 웨이트 바이너리 값을 획득하거나, 채널 방향으로 정렬된 복수의 컨벌루션 인풋 데이터에서, 특정 위치에서 채널 방향으로 정렬된 소정 컨벌루션 인풋 데이터에 대응되는 소정 인풋 바이너리 값을 인풋 컬럼 어드레스에 맵핑한 상태에서, 적어도 하나의 특정 인풋 컬럼 어드레스에 대응되는 특정 제2 비트라인을 선택하여 특정 인풋 바이너리 값을 획득할 수 있다.
이어서, 인 메모리 컴퓨팅 프로세서(100)는 가속기를 통해 특정 채널의 웨이트 바이너리 값과 나머지 인풋 바이너리 값에 대한 엘리먼트 와이즈(element-wise) 곱셈을 수행하고 이로부터 나온 결과에 대한 덧셈을 수행하여 특정 채널에 대한 컨벌루션 연산 결과값에 대응하는 아웃풋 바이너리 값을 획득하고, 아웃풋 바이너리 값에 따라 결정되는 DRAM 뱅크 상의 적어도 하나의 제3 비트라인 및 아웃풋 바이너리 값을 저장하고자 하는 DRAM 뱅크 상의 또 다른 일부 영역에 대응되는 제3 워드라인을 선택하여, 아웃풋 바이너리 값을 제3 비트라인 및 제3 워드라인에 대응되는 제3 셀들에 저장할 수 있다. 여기서, 본 발명의 일 실시예에 따라 컨벌루션 연산을 수행하는 가속기는 도 5와 같이 각 DRAM 뱅크의 말단, 즉, 센스 앰프 이후의 컬럼 디코더에 위치할 수 있으나, 이에 한정되는 것은 아니다.
일 예로, DRAM 뱅크가 워드라인 당 8,192개의 셀을 갖고, 컨벌루션 웨이트와 컨벌루션 인풋 데이터가 각각 8 비트의 비트 데이터로 표현될 때, 컨벌루션 웨이트와 컨벌루션 인풋 데이터는 각각 64 비트 단위로 DRAM(200)에 전송되어 각각 제1 셀들과 제2 셀들에 저장되며, 64개의 특정 채널의 웨이트 바이너리 값과 컨벌루션 연산이 수행될 64개의 나머지 인풋 바이너리 값을 각각 64 비트 단위로 획득하여 엘리먼트 와이즈 곱셈을 수행하고 이로부터 나온 결과에 대한 덧셈을 수행하여 컨벌루션 연산 결과값을 획득할 수 있다.
기존의 컨벌루션 필터를 사용하여 연산을 수행할 경우, 컨벌루션 필터의 홀수의 배수 개수의 웨이트 바이너리 값(예: 3x3 사이즈의 필터라면, 각 채널당 9 x 8 bit = 72 bit의 웨이트 바이너리 값)을 메모리에 저장 및 연산할 때 로드해야 하기 때문에 한 번에 주고받을 수 있는 대역폭(가장 일반적으로, 32 bit나 64 bit)을 최대한 사용할 수 없고 추가적인 싸이클을 요구한다는 문제가 있었다. 따라서, 본 발명이 제안하는 방식은 3x3, 5x5, 7x7과 같은 사이즈를 가진 컨벌루션 필터에서 지정 컨벌루션 웨이트를 제외함으로써 8의 배수 형태의 개수가 되도록 웨이트의 개수를 조정하여, 메모리나 연산기에 데이터를 저장 및 로드할 때 대역폭에 최적화된 데이터 입출력이 가능하도록 할 수 있다. 이는, 홀수의 필터 사이즈, 즉 (2n+1)x(2n+1)의 구조에서 하나를 제외하여 (2n+1)x(2n+1)-1 = 4n(n+1)의 형태가 되도록 하여 항상 8의 배수 형태 개수로 된 웨이트를 구성하여 전송, 저장 및 연산할 수 있음을 의미한다.
일 예로, 8 비트의 레졸루션을 가지며, 64 비트 단위로 통신을 하는 시스템에서, 3x3 사이즈의 컨벌루션 필터를 이용하여 컨벌루션 연산을 수행할 경우, 3x3 사이즈의 컨볼루션에서 지정 위치의 컨벌루션 웨이트를 제외하고 저장된 8개의 컨벌루션 웨이트와 이에 대응되는 8개의 컨볼루션 인풋 데이터를 읽어옴으로써 최소 단위의 컨볼루션 연산이 수행되도록 할 수 있다.
한편, 본 발명이 제안하는 인 메모리 컴퓨팅 방식은 연산에서 제외되는 지정 컨벌루션 웨이트의 위치가 0으로 곱해져 연산된다고 생각할 수 있으며, 이는 딥러닝의 sparsity 성질을 이용하여 컨벌루션 연산의 정확도에는 크게 영향을 주지 않으며 연산량과 웨이트의 용량을 감소시키는 효과를 기대할 수 있다.
일 예로, 도 6은 본 발명의 일 실시예에 따라 수행된 컨벌루션 연산의 결과를 통상적인 컨벌루션 연산의 결과와 비교한 정확도 그래프를 개략적으로 도시한 것이다. 도 6의 좌측 그래프는 3x3 사이즈 컨벌루션 필터의 각 좌표 위치에 0을 넣었을 때 VGGnet을 이용하여 CIFAR 10 데이터 셋을 컨볼루션 연산한 결과의 정확도를 관찰한 결과이다. 여기서, VGGnet이란 옥스포드 대학의 VGG에 의해 개발된 이미지 분류를 위한 CNN 모델 중 하나로, 딥 러닝 네트워크의 히드 레이어의 개수, 즉 네트워크의 깊이를 깊게 만드는 것이 성능에 어떤 영향을 미치는지를 확인하고자 개발된 것이다. 또한, 컨벌루션 인풋 데이터로 이용된 CIFAR 10 데이터 셋은 서로 다른 10개의 클라스마다 6,000장씩 총 60,000장의 32x32 크기의 컬러 이미지로 구성된 것으로, 머신러닝 연구에 가장 널리 사용되는 데이터 셋 중 하나이다.
좌측 그래프를 보면, 0의 위치를 3x3 컨벌루션 필터의 어느 위치로 설정하더라도 유사한 정확도 분포를 보이는 것을 확인할 수 있다. 또한, 도 6의 우측 그래프를 예시로 보면, 정중앙 컨벌루션 웨이트(좌표: (2,2))를 제거하여 컨벌루션 연산을 수행하였을 때 기존의 컨벌루션 필터 전체를 이용한 컨벌루션 연산에 비해 약 11% 가량의 웨이트 용량을 감소할 수 있으면서 연산의 정확도는 크게 차이가 없다는 것을 알 수 있다.
한편, 주어진 컨벌루션 필터 내 하나의 웨이트를 0으로 만드는 방법으로 필터 내의 최소값을 0으로 만드는 방식이 연산에 대한 더 높은 정확도를 보일 수 있겠으나, 이러한 방식의 경우 매 필터마다 0의 위치가 달라지기 때문에 0의 위치에 해당하는 주소까지 함께 저장해야 한다는 단점이 있다. 따라서, 본 발명이 제안하는 방식은 필터 내 고정된 위치의 값을 0으로 만드는 방식을 택하여 0에 해당하는 주소를 미리 정함으로써 매 컨벌루션 필터마다 주소를 따로 저장할 필요가 없다는 장점을 가지고 있다.
이어서, 특정 채널에 대한 컨벌루션 연산 결과값을 이용하여 다음 컨벌루션 연산을 수행하는 경우, 인 메모리 컴퓨팅 프로세서(100)가, DRAM(200)에 저장된 웨이트 바이너리 값 중, 다음 컨벌루션 연산을 위한 다음 특정 채널의 4n(n+1) x 2^k 개의 웨이트 바이너리 값과, 다음 컨벌루션 연산을 위한 다음 특정 채널의 컨벌루션 웨이트를 사용하여 다음 컨벌루션 연산을 수행하기 위한 수용 필드에 대응되는 컨벌루션 연산 결과값의 소정 영역에 대한 소정 아웃풋 바이너리 값 중, 지정 컨벌루션 웨이트에 대응되는 위치의 지정 컨벌루션 연산 값을 제외한 4n(n+1) x 2^k 개의 나머지 아웃풋 바이너리 값을 사용하여 다음 컨벌루션 연산을 수행할 수 있다.
즉, 도 3을 다시 참조하면, 한 차례의 컨벌루션 연산이 수행된 후 다음 컨벌루션 연산을 수행할 경우, 컨벌루션 아웃풋 데이터에 대응되는 아웃풋 바이너리 값이 저장된 제3 워드라인에서 다음 컨벌루션 연산에 이용할 바이너리 값을 불러와 이에 대응하는 웨이트 바이너리 값과 연산을 진행하고, 이렇게 다음 컨벌루션 연산에서 생성된 다음 컨벌루션 연산 값은 이전 컨벌루션 연산에 사용될 인풋 바이너리 값을 저장해 놓았던 제2 워드라인에 저장할 수 있다. 이런 식으로 이전 컨벌루션 연산의 결과 값을 다음 컨벌루션 연산의 인풋 데이터로 사용하고 이전 컨벌루션 연산의 인풋 데이터가 저장되었던 워드라인에 다음 컨벌루션 연산의 아웃풋 데이터를 저장하는 방식으로 여러 차례의 컨벌루션 연산을 수행할 수 있다.
한편, 도 7은 이해를 돕기 위하여 일반적인 DRAM 동작을 도시한 것이고, 도 8 및 도 9는 본 발명의 다른 실시예에 따라 컨벌루션 연산을 수행하는 방법 및 적용 가능한 구조를 개략적으로 도시하고 있다. 이하에서는 도 2 내지 도 6을 참조한 설명으로부터 용이하게 이해 가능한 부분에 대해서는 상세한 설명을 생략하도록 한다.
우선, 컨벌루션 인풋 데이터와 각각 (2n+1) x (2n+1) x CH 볼륨을 가지는 복수의 컨벌루션 필터는 외부 메모리에 저장되거나 컨벌루션 인풋 데이터 및 (2n+1) x (2n+1) x CH 볼륨을 가지는 복수의 컨벌루션 필터 각각에 포함된 각각의 컨벌루션 웨이트가 각각 2^k 비트 데이터로 변환되어 외부 메모리(300)에 저장된 상태일 수 있다. 여기서, 컨벌루션 인풋 데이터는 컨벌루션 대상이 되는 텐서이며, 텐서의 각 엘리먼트는 컨벌루션 연산이 수행되는 이미지나 피쳐맵(feature map) 및 영상 등에 포함된 각 픽셀 값일 수 있다. 또한, n 과 k 는 각각 1 이상의 정수이다.
이어서, 외부 메모리(300)에 컨벌루션 인풋 데이터와 컨벌루션 웨이트가 저장된 상태에서, 인 메모리 컴퓨팅 프로세서(100)는 복수의 컨벌루션 필터에 포함된 각 채널의 지정 위치에 위치한 지정 컨벌루션 웨이트를 제외한 각각의 4n(n+1) x CH x 2^k 개의 웨이트 바이너리 값을 2^m 단위의 웨이트 비트 데이터로 DRAM(200)에 전송하고, 컨벌루션 인풋 데이터에 대한 인풋 바이너리 값을 2^m 단위의 인풋 비트 데이터로 DRAM(200)에 전송할 수 있다. 여기서, m 은 1 이상의 정수이다.
일 예로, 인 메모리 컴퓨팅 프로세서(100)가, 지정 컨벌루션 웨이트의 지정 위치를 정중앙으로 설정하여 복수의 컨벌루션 필터에 포함된 각 채널의 정중앙 위치에 위치한 정중앙 컨벌루션 웨이트를 제외한 각각의 4n(n+1) x CH x 2^k 개의 웨이트 바이너리 값을 DRAM(200)에 전송할 수 있다.
또한, 컨벌루션 웨이트와 컨벌루션 인풋 데이터가 각각 8 비트의 비트 데이터로 표현될 때, 컨벌루션 웨이트와 컨벌루션 인풋 데이터는 각각 64 비트 단위로 DRAM(200)에 전송되어 DRAM(200)에 저장될 수 있다.
가령, 3D 구조의 컨벌루션 필터와 컨벌루션 인풋 데이터에서 각각 채널(또는, 뎁스) 방향으로 8개의 컨벌루션 웨이트나 인풋 데이터가 64 비트 단위(8 x 8 bit = 64bit)로 DRAM(200)에 전송되도록 함으로써, 전송되는 비트 데이트들이 순차적으로 DRAM(200)에 저장되도록 할 수 있다.
DRAM(200) 상의 데이터 저장의 경우, 인 메모리 컴퓨팅 프로세서(100)는 복수의 컨벌루션 필터에 포함된 각 채널의 지정 컨벌루션 웨이트를 제외한 각각의 4n(n+1) x CH x 2^k 개의 웨이트 바이너리 값에 따라 결정되는 제1 DRAM 뱅크 상의 적어도 하나의 제1 비트라인 및 웨이트 바이너리 값을 저장하고자 하는 제1 DRAM 뱅크 상의 일부 영역에 대응되는 제1 워드라인을 선택하여, 웨이트 바이너리 값을 제1 비트라인 및 제1 워드라인에 대응되는 제1 셀들에 저장할 수 있다.
또한, 인 메모리 컴퓨팅 프로세서(100)는 인풋 바이너리 값에 따라 결정되는 제2 DRAM 뱅크 상의 적어도 하나의 제2 비트라인 및 인풋 바이너리 값을 저장하고자 하는 제2 DRAM 뱅크 상의 일부 영역에 대응되는 제2 워드라인을 선택하여, 인풋 바이너리 값을 제2 비트라인 및 제2 워드라인에 대응되는 제2 셀들에 저장함으로써, 제1 DRAM 뱅크 상의 전체 워드라인 중 일부인 적어도 하나의 제1 워드라인에 대응하는 제1 셀들에는 웨이트 바이너리 값을 저장하고, 제2 DRAM 뱅크 상의 전체 워드라인 중 일부인 적어도 하나의 제2 워드라인에 대응하는 제2 셀들에는 인풋 바이너리 값을 저장할 수 있다.
이때, 인 메모리 컴퓨팅 프로세서(100)는 채널 방향으로 정렬된 복수의 컨벌루션 필터에서, 특정 위치에서 채널 방향으로 정렬된 소정 컨벌루션 웨이트에 대응되는 소정 웨이트 바이너리 값을 웨이트 컬럼 어드레스에 맵핑하여 저장하거나, 채널 방향으로 정렬된 복수의 컨벌루션 인풋 데이터에서, 특정 위치에서 채널 방향으로 정렬된 소정 컨벌루션 인풋 데이터에 대응되는 소정 인풋 바이너리 값을 인풋 컬럼 어드레스에 맵핑하여 저장할 수 있다.
이어서, 인 메모리 컴퓨팅 프로세서(100)는 DRAM(200)에 저장된 4n(n+1) x CH x 2^k 개의 웨이트 바이너리 값 중, 특정 채널의 4n(n+1) x 2^k 개의 웨이트 바이너리 값과, 특정 채널의 컨벌루션 웨이트를 사용하여 컨벌루션 연산을 수행하기 위한 수용 필드에 대응되는 컨벌루션 인풋 데이터의 소정 영역에 대한 소정 인풋 바이너리 값 중, 지정 컨벌루션 웨이트에 대응되는 위치의 지정 컨벌루션 인풋 데이터를 제외한 4n(n+1) x 2^k 개의 나머지 인풋 바이너리 값을 사용하여 컨벌루션 연산을 수행할 수 있다.
우선, 도 7에 개시된 본 발명의 다른 실시예에 따르면, 인 메모리 컴퓨팅 프로세서(100)는 제1 DRAM 뱅크 상에서 웨이트 바이너리 값들을 저장하고 있는 제1 셀들 중 적어도 하나의 특정 웨이트 바이너리 값을 저장하고 있는 적어도 하나의 특정 제1 셀에 대응되는 특정 제1 워드라인과 적어도 하나의 특정 제1 비트라인을 선택함으로써 제1 센스 앰프들이 상기 특정 제1 셀에 저장된 상기 특정 웨이트 바이너리 값을 상기 특정 제1 비트라인을 통해서 감지하도록 하고, 제1 센스 앰프들이 감지한 특정 웨이트 바이너리 값을 제1 컬럼 멀티플렉서(Column Multiplexer)에 인가하여 특정 채널의 4n(n+1) x 2^k 개의 웨이트 바이너리 값을 출력하도록 할 수 있다.
또한, 인 메모리 컴퓨팅 프로세서(100)는 제2 DRAM 뱅크 상에서 인풋 바이너리 값들을 저장하고 있는 제2 셀들 중 적어도 하나의 특정 인풋 바이너리 값을 저장하고 있는 적어도 하나의 특정 제2 셀에 대응되는 특정 제2 워드라인과 적어도 하나의 특정 제2 비트라인을 선택함으로써 제2 센스 앰프들이 상기 특정 제2 셀에 저장된 상기 특정 인풋 바이너리 값을 상기 특정 제2 비트라인을 통해서 감지하도록 하고, 제2 센스 앰프들이 감지한 특정 인풋 바이너리 값을 제2 컬럼 멀티플렉서에 인가하여 4n(n+1) x 2^k 개의 나머지 인풋 바이너리 값을 출력하도록 할 수 있다.
이때, 인 메모리 컴퓨팅 프로세서(100)는 채널 방향으로 정렬된 복수의 컨벌루션 필터에서, 특정 위치에서 채널 방향으로 정렬된 소정 컨벌루션 웨이트에 대응되는 소정 웨이트 바이너리 값을 웨이트 컬럼 어드레스에 맵핑한 상태에서, 적어도 하나의 특정 웨이트 컬럼 어드레스에 대응되는 특정 제1 비트라인을 선택하여 특정 웨이트 바이너리 값을 획득하거나, 채널 방향으로 정렬된 복수의 컨벌루션 인풋 데이터에서, 특정 위치에서 채널 방향으로 정렬된 소정 컨벌루션 인풋 데이터에 대응되는 소정 인풋 바이너리 값을 인풋 컬럼 어드레스에 맵핑한 상태에서, 적어도 하나의 특정 인풋 컬럼 어드레스에 대응되는 특정 제2 비트라인을 선택하여 특정 인풋 바이너리 값을 획득할 수 있다.
다음으로, 도 8을 참조하면, 인 메모리 컴퓨팅 프로세서(100)는 특정 채널의 웨이트 바이너리 값과 나머지 인풋 바이너리 값을 각각 웨이트 SRAM(Static Random Access Memory)과 인풋 SRAM에 저장하고, 웨이트 SRAM과 인풋 SRAM에 저장된 특정 채널의 웨이트 바이너리 값과 나머지 인풋 바이너리 값을 가속기에 입력하여 가속기로부터 특정 채널의 웨이트 바이너리 값과 나머지 인풋 바이너리 값에 대한 곱셈과 덧셈을 수행하여 특정 컨벌루션 채널에 대한 컨벌루션 연산 결과값을 획득하고, 아웃풋 바이너리 값에 따라 결정되는 제3 DRAM 뱅크 상의 적어도 하나의 제3 비트라인 및 아웃풋 바이너리 값을 저장하고자 하는 제3 DRAM 뱅크 상의 일부 영역에 대응되는 제3 워드라인을 선택하여, 아웃풋 바이너리 값을 제3 비트라인 및 제3 워드라인에 대응되는 제3 셀들에 저장할 수 있다.
여기서, 본 발명의 다른 실시예에 따라 컨벌루션 연산에 사용되는 인풋 SRAM, 아웃풋 SRAM 및 가속기는 도 9와 같이 DRAM(200) 상의 I/O 드라이버에 위치할 수 있으나, 이에 한정되는 것은 아니다. 또한, 제1 DRAM 뱅크, 제2 DRAM 뱅크, 및 제3 DRAM 뱅크는 서로 같거나 다른 DRAM 뱅크일 수 있다.
일 예로, 제1 DRAM 뱅크와 제2 DRAM 뱅크가 워드라인 당 8192개의 셀을 갖고, 컨벌루션 웨이트와 컨벌루션 인풋 데이터가 각각 8 비트의 비트 데이터로 표현될 때, 컨벌루션 웨이트와 컨벌루션 인풋 데이터는 각각 64 비트 단위로 DRAM에 전송되어 각각 제1 셀들과 제2 셀들에 저장되며, 64개의 특정 채널의 웨이트 바이너리 값과 컨벌루션 연산이 수행될 64개의 나머지 인풋 바이너리 값을 각각 64 비트 단위로 획득하여 64개의 특정 채널의 웨이트 바이너리 값과 64개의 나머지 인풋 바이너리 값을 각각 웨이트 SRAM과 인풋 SRAM에 저장하고, 웨이트 SRAM과 인풋 SRAM으로부터 획득한 특정 채널의 웨이트 바이너리 값과 나머지 인풋 바이너리 값에 대한 곱셈과 덧셈을 수행하여 컨벌루션 연산 결과값을 획득할 수 있다.
이어서, 특정 채널에 대한 컨벌루션 연산 결과값을 이용하여 다음 컨벌루션 연산을 수행하는 경우, 인 메모리 컴퓨팅 프로세서(100)가, DRAM(200)에 저장된 웨이트 바이너리 값 중, 다음 컨벌루션 연산을 위한 다음 특정 채널의 4n(n+1) x 2^k 개의 웨이트 바이너리 값과, 다음 컨벌루션 연산을 위한 다음 특정 채널의 컨벌루션 웨이트를 사용하여 다음 컨벌루션 연산을 수행하기 위한 수용 필드에 대응되는 컨벌루션 연산 결과값의 소정 영역에 대한 소정 아웃풋 바이너리 값 중, 지정 컨벌루션 웨이트에 대응되는 위치의 지정 컨벌루션 연산 값을 제외한 4n(n+1) x 2^k 개의 나머지 아웃풋 바이너리 값을 사용하여 다음 컨벌루션 연산을 수행할 수 있다.
이상에서 본 발명이 구체적인 구성요소 등과 같은 특정 사항들과 한정된 실시예 및 도면에 의해 설명되었으나, 이는 본 발명의 보다 전반적인 이해를 돕기 위해서 제공된 것일 뿐, 본 발명이 상기 실시예들에 한정되는 것은 아니며, 본 발명이 속하는 기술분야에서 통상적인 지식을 가진 자라면 이러한 기재로부터 다양한 수정 및 변형을 꾀할 수 있다.
따라서, 본 발명의 사상은 상기 설명된 실시예에 국한되어 정해져서는 아니 되며, 후술하는 특허청구범위뿐만 아니라 이 특허청구범위와 균등하게 또는 등가적으로 변형된 모든 것들은 본 발명의 사상의 범주에 속한다고 할 것이다.
100: 인 메모리 컴퓨팅 프로세서
200: DRAM
300: 외부 메모리
200: DRAM
300: 외부 메모리
Claims (13)
- 인 메모리 컴퓨팅(In-memory Computing)을 통해 컨벌루션 뉴럴 네트워크(Convolution Neural Network) 연산을 수행하는 방법에 있어서,
(a) 컨벌루션 인풋 데이터 - 상기 컨벌루션 인풋 데이터는 컨벌루션 대상이 되는 텐서임 - 와 각각 (2n+1) x (2n+1) x CH 볼륨을 가지는 복수의 컨벌루션 필터 - 상기 n은 1 이상의 정수임 - 가 외부 메모리에 저장되거나 상기 컨벌루션 인풋 데이터 및 상기 (2n+1) x (2n+1) x CH 볼륨을 가지는 복수의 컨벌루션 필터 각각에 포함된 각각의 컨벌루션 웨이트가 각각 2^k 비트 데이터 - 상기 k 는 1 이상의 정수임 - 로 변환되어 상기 외부 메모리에 저장된 상태에서, 인 메모리 컴퓨팅 프로세서가, 상기 복수의 컨벌루션 필터에 포함된 각 채널의 지정 위치에 위치한 지정 컨벌루션 웨이트를 제외한 각각의 4n(n+1) x CH x 2^k 개의 웨이트 바이너리 값을 2^m 단위 - 상기 m 는 1 이상의 정수임 - 의 웨이트 비트 데이터로 DRAM에 전송하고, 상기 컨벌루션 인풋 데이터에 대한 인풋 바이너리 값을 2^m 단위의 인풋 비트 데이터로 상기 DRAM에 전송하여, (i) 상기 복수의 컨벌루션 필터에 포함된 각 채널의 상기 지정 컨벌루션 웨이트를 제외한 각각의 4n(n+1) x CH x 2^k 개의 상기 웨이트 바이너리 값에 따라 결정되는 DRAM 뱅크 상의 적어도 하나의 제1 비트라인 및 상기 웨이트 바이너리 값을 저장하고자 하는 상기 DRAM 뱅크 상의 일부 영역에 대응되는 제1 워드라인을 선택하여, 상기 웨이트 바이너리 값을 상기 제1 비트라인 및 상기 제1 워드라인에 대응되는 제1 셀들에 저장하고, (ii) 상기 인풋 바이너리 값에 따라 결정되는 상기 DRAM 뱅크 상의 적어도 하나의 제2 비트라인 및 상기 인풋 바이너리 값을 저장하고자 하는 상기 DRAM 뱅크 상의 다른 일부 영역에 대응되는 제2 워드라인을 선택하여, 상기 인풋 바이너리 값을 상기 제2 비트라인 및 상기 제2 워드라인에 대응되는 제2 셀들에 저장함으로써, 상기 DRAM 뱅크 상의 전체 워드라인 중 일부인 적어도 하나의 상기 제1 워드라인에 대응하는 상기 제1 셀들에는 상기 웨이트 바이너리 값을 저장하고, 상기 전체 워드라인 중 일부인 적어도 하나의 상기 제2 워드라인에 대응하는 상기 제2 셀들에는 상기 인풋 바이너리 값을 저장하는 단계; 및
(b) 상기 인 메모리 컴퓨팅 프로세서가, 상기 DRAM 에 저장된 4n(n+1) x CH x 2^k 개의 상기 웨이트 바이너리 값 중, 특정 채널의 4n(n+1) x 2^k 개의 웨이트 바이너리 값과, 상기 특정 채널의 컨벌루션 웨이트를 사용하여 컨벌루션 연산을 수행하기 위한 수용 필드에 대응되는 상기 컨벌루션 인풋 데이터의 소정 영역에 대한 소정 인풋 바이너리 값 중, 상기 지정 컨벌루션 웨이트에 대응되는 위치의 지정 컨벌루션 인풋 데이터를 제외한 4n(n+1) x 2^k 개의 나머지 인풋 바이너리 값을 사용하여 컨벌루션 연산을 수행하는 단계;
를 포함하는 연산 방법. - 제1항에 있어서,
상기 (b) 단계에서,
상기 인 메모리 컴퓨팅 프로세서가, (i) 상기 DRAM 뱅크 상에서 상기 웨이트 바이너리 값들을 저장하고 있는 상기 제1 셀들 중 적어도 하나의 특정 웨이트 바이너리 값을 저장하고 있는 적어도 하나의 특정 제1 셀에 대응되는 특정 제1 워드라인과 적어도 하나의 특정 제1 비트라인을 선택함으로써 제1 센스 앰프들이 상기 특정 제1 셀에 저장된 상기 특정 웨이트 바이너리 값을 상기 특정 제1 비트라인을 통해서 감지하도록 하고, 상기 제1 센스 앰프들이 감지한 상기 특정 웨이트 바이너리 값을 컬럼 멀티플렉서(Column Multiplexer)에 인가하여 상기 특정 채널의 4n(n+1) x 2^k 개의 웨이트 바이너리 값을 출력하도록 하고, (ii) 상기 DRAM 뱅크 상에서 상기 인풋 바이너리 값들을 저장하고 있는 상기 제2 셀들 중 적어도 하나의 특정 인풋 바이너리 값을 저장하고 있는 적어도 하나의 특정 제2 셀에 대응되는 특정 제2 워드라인과 적어도 하나의 특정 제2 비트라인을 선택함으로써 제2 센스 앰프들이 상기 특정 제2 셀에 저장된 상기 특정 인풋 바이너리 값을 상기 특정 제2 비트라인을 통해서 감지하도록 하고, 상기 제2 센스 앰프들이 감지한 상기 특정 인풋 바이너리 값을 상기 컬럼 멀티플렉서에 인가하여, 4n(n+1) x 2^k 개의 상기 나머지 인풋 바이너리 값을 출력하도록 하며, (iii) 가속기를 통해 상기 특정 채널의 웨이트 바이너리 값과 상기 나머지 인풋 바이너리 값에 대한 엘리먼트 와이즈(element-wise) 곱셈을 수행하고 이로부터 나온 결과에 대한 덧셈을 수행하여 상기 특정 채널에 대한 컨벌루션 연산 결과값에 대응하는 아웃풋 바이너리 값을 획득하고, 상기 아웃풋 바이너리 값에 따라 결정되는 상기 DRAM 뱅크 상의 적어도 하나의 제3 비트라인 및 상기 아웃풋 바이너리 값을 저장하고자 하는 상기 DRAM 뱅크 상의 또 다른 일부 영역에 대응되는 제3 워드라인을 선택하여, 상기 아웃풋 바이너리 값을 상기 제3 비트라인 및 상기 제3 워드라인에 대응되는 제3 셀들에 저장하는 단계;
를 포함하는 것을 특징으로 하는 연산 방법. - 제2항에 있어서,
상기 (b) 단계 이후에,
상기 인 메모리 컴퓨팅 프로세서가, 상기 특정 채널에 대한 상기 컨벌루션 연산 결과값을 이용하여 다음 컨벌루션 연산을 수행하는 경우, 상기 DRAM 에 저장된 상기 웨이트 바이너리 값 중, 상기 다음 컨벌루션 연산을 위한 다음 특정 채널의 4n(n+1) x 2^k 개의 웨이트 바이너리 값과, 상기 다음 컨벌루션 연산을 위한 상기 다음 특정 채널의 컨벌루션 웨이트를 사용하여 상기 다음 컨벌루션 연산을 수행하기 위한 수용 필드에 대응되는 상기 컨벌루션 연산 결과값의 소정 영역에 대한 소정 아웃풋 바이너리 값 중, 상기 지정 컨벌루션 웨이트에 대응되는 상기 위치의 지정 컨벌루션 연산 값을 제외한 4n(n+1) x 2^k 개의 나머지 아웃풋 바이너리 값을 사용하여 상기 다음 컨벌루션 연산을 수행하는 것을 특징으로 하는 연산 방법. - 제2항에 있어서,
상기 인 메모리 컴퓨팅 프로세서가, (i) 채널 방향으로 정렬된 상기 복수의 컨벌루션 필터에서, 특정 위치에서 상기 채널 방향으로 정렬된 소정 컨벌루션 웨이트에 대응되는 소정 웨이트 바이너리 값을 컬럼 웨이트 어드레스에 맵핑한 상태에서, 적어도 하나의 특정 컬럼 웨이트 어드레스에 대응되는 상기 특정 제1 비트라인을 선택하여 상기 특정 웨이트 바이너리 값을 획득하거나, (ii) 상기 채널 방향으로 정렬된 상기 복수의 컨벌루션 인풋 데이터에서, 상기 특정 위치에서 상기 채널 방향으로 정렬된 소정 컨벌루션 인풋 데이터에 대응되는 소정 인풋 바이너리 값을 컬럼 인풋 어드레스에 맵핑한 상태에서, 적어도 하나의 특정 컬럼 인풋 어드레스에 대응되는 상기 특정 제2 비트라인을 선택하여 상기 특정 인풋 바이너리 값을 획득하는 것을 특징으로 하는 연산 방법. - 제1항에 있어서,
상기 인 메모리 컴퓨팅 프로세서가, 상기 지정 컨벌루션 웨이트의 상기 지정 위치를 정중앙으로 설정하여 상기 복수의 컨벌루션 필터에 포함된 각 채널의 정중앙 위치에 위치한 정중앙 컨벌루션 웨이트를 제외한 각각의 4n(n+1) x CH x 2^k 개의 상기 웨이트 바이너리 값을 상기 DRAM에 전송하는 것을 특징으로 하는 연산 방법. - 제2항에 있어서,
상기 DRAM 뱅크가 워드라인 당 8192개의 셀을 갖고, 상기 컨벌루션 웨이트와 상기 컨벌루션 인풋 데이터가 각각 8 비트의 비트 데이터로 표현될 때, 상기 컨벌루션 웨이트와 상기 컨벌루션 인풋 데이터는 각각 64 비트 단위로 상기 DRAM에 전송되어 각각 상기 제1 셀들과 상기 제2 셀들에 저장되며, 64개의 상기 특정 채널의 웨이트 바이너리 값과 상기 컨벌루션 연산이 수행될 64개의 상기 나머지 인풋 바이너리 값을 각각 64 비트 단위로 획득하여 상기 엘리먼트 와이즈 곱셈을 수행하고 이로부터 나온 결과에 대한 상기 덧셈을 수행하여 상기 컨벌루션 연산 결과값을 획득하는 것을 특징으로 하는 연산 방법. - 인 메모리 컴퓨팅(In-memory Computing)을 통해 컨벌루션 뉴럴 네트워크(Convolution Neural Network) 연산을 수행하는 방법에 있어서,
(a) 컨벌루션 인풋 데이터 - 상기 컨벌루션 인풋 데이터는 컨벌루션 대상이 되는 텐서임 - 와 각각 (2n+1) x (2n+1) x CH 볼륨을 가지는 복수의 컨벌루션 필터 - 상기 n은 1 이상의 정수임 - 가 외부 메모리에 저장되거나 상기 컨벌루션 인풋 데이터 및 상기 (2n+1) x (2n+1) x CH 볼륨을 가지는 복수의 컨벌루션 필터 각각에 포함된 각각의 컨벌루션 웨이트가 각각 2^k 비트 데이터 - 상기 k 는 1 이상의 정수임 - 로 변환되어 상기 외부 메모리에 저장된 상태에서, 인 메모리 컴퓨팅 프로세서가, 상기 복수의 컨벌루션 필터에 포함된 각 채널의 지정 위치에 위치한 지정 컨벌루션 웨이트를 제외한 각각의 4n(n+1) x CH x 2^k 개의 웨이트 바이너리 값을 2^m 단위 - 상기 m 는 1 이상의 정수임 - 의 웨이트 비트 데이터로 DRAM에 전송하고, 상기 컨벌루션 인풋 데이터에 대한 인풋 바이너리 값을 2^m 단위의 인풋 비트 데이터로 상기 DRAM에 전송하여, (i) 상기 복수의 컨벌루션 필터에 포함된 각 채널의 상기 지정 컨벌루션 웨이트를 제외한 각각의 4n(n+1) x CH x 2^k 개의 상기 웨이트 바이너리 값에 따라 결정되는 제1 DRAM 뱅크 상의 적어도 하나의 제1 비트라인 및 상기 웨이트 바이너리 값을 저장하고자 하는 상기 제1 DRAM 뱅크 상의 일부 영역에 대응되는 제1 워드라인을 선택하여, 상기 웨이트 바이너리 값을 상기 제1 비트라인 및 상기 제1 워드라인에 대응되는 제1 셀들에 저장하고, (ii) 상기 인풋 바이너리 값에 따라 결정되는 제2 DRAM 뱅크 상의 적어도 하나의 제2 비트라인 및 상기 인풋 바이너리 값을 저장하고자 하는 상기 제2 DRAM 뱅크 상의 일부 영역에 대응되는 제2 워드라인을 선택하여, 상기 인풋 바이너리 값을 상기 제2 비트라인 및 상기 제2 워드라인에 대응되는 제2 셀들에 저장함으로써, 상기 제1 DRAM 뱅크 상의 전체 워드라인 중 일부인 적어도 하나의 상기 제1 워드라인에 대응하는 상기 제1 셀들에는 상기 웨이트 바이너리 값을 저장하고, 상기 제2 DRAM 뱅크 상의 전체 워드라인 중 일부인 적어도 하나의 상기 제2 워드라인에 대응하는 상기 제2 셀들에는 상기 인풋 바이너리 값을 저장하는 단계; 및
(b) 상기 인 메모리 컴퓨팅 프로세서가, 상기 DRAM 에 저장된 4n(n+1) x CH x 2^k 개의 상기 웨이트 바이너리 값 중, 특정 채널의 4n(n+1) x 2^k 개의 웨이트 바이너리 값과, 상기 특정 채널의 컨벌루션 웨이트를 사용하여 컨벌루션 연산을 수행하기 위한 수용 필드에 대응되는 상기 컨벌루션 인풋 데이터의 소정 영역에 대한 소정 인풋 바이너리 값 중, 상기 지정 컨벌루션 웨이트에 대응되는 위치의 지정 컨벌루션 인풋 데이터를 제외한 4n(n+1) x 2^k 개의 나머지 인풋 바이너리 값을 사용하여 컨벌루션 연산을 수행하는 단계;
를 포함하는 연산 방법. - 제7항에 있어서,
상기 (b) 단계에서,
상기 인 메모리 컴퓨팅 프로세서가, (i) 상기 제1 DRAM 뱅크 상에서 상기 웨이트 바이너리 값들을 저장하고 있는 상기 제1 셀들 중 적어도 하나의 특정 웨이트 바이너리 값을 저장하고 있는 적어도 하나의 특정 제1 셀에 대응되는 특정 제1 워드라인과 적어도 하나의 특정 제1 비트라인을 선택함으로써 제1 센스 앰프들이 상기 특정 제1 셀에 저장된 상기 특정 인풋 바이너리 값을 상기 특정 제1 비트라인을 통해서 감지하도록 하고, 상기 제1 센스 앰프들이 감지한 상기 특정 웨이트 바이너리 값을 제1 컬럼 멀티플렉서(Column Multiplexer)에 인가하여 상기 특정 채널의 4n(n+1) x 2^k 개의 웨이트 바이너리 값을 출력하고, (ii) 상기 제2 DRAM 뱅크 상에서 상기 인풋 바이너리 값들을 저장하고 있는 상기 제2 셀들 중 적어도 하나의 특정 인풋 바이너리 값을 저장하고 있는 적어도 하나의 특정 제2 셀에 대응되는 특정 제2 워드라인과 적어도 하나의 특정 제2 비트라인을 선택함으로써 제2 센스 앰프들이 상기 특정 제2 셀에 저장된 상기 특정 인풋 바이너리 값을 상기 특정 제2 비트라인을 통해서 감지하도록 하고, 상기 제2 센스 앰프들이 감지한 상기 특정 인풋 바이너리 값을 제2 컬럼 멀티플렉서에 인가하여 4n(n+1) x 2^k 개의 상기 나머지 인풋 바이너리 값을 출력하며, (iii) 상기 특정 채널의 웨이트 바이너리 값과 상기 나머지 인풋 바이너리 값을 각각 웨이트 SRAM(Static Random Access Memory)과 인풋 SRAM에 저장하고, 상기 웨이트 SRAM과 상기 인풋 SRAM에 저장된 상기 특정 채널의 웨이트 바이너리 값과 상기 나머지 인풋 바이너리 값을 가속기에 입력하여 상기 가속기로부터 상기 특정 채널의 웨이트 바이너리 값과 상기 나머지 인풋 바이너리 값에 대한 곱셈과 덧셈을 수행하여 상기 특정 컨벌루션 채널에 대한 컨벌루션 연산 결과값을 획득하고, 상기 아웃풋 바이너리 값에 따라 결정되는 제3 DRAM 뱅크 상의 적어도 하나의 제3 비트라인 및 상기 아웃풋 바이너리 값을 저장하고자 하는 상기 제3 DRAM 뱅크 상의 일부 영역에 대응되는 제3 워드라인을 선택하여, 상기 아웃풋 바이너리 값을 상기 제3 비트라인 및 상기 제3 워드라인에 대응되는 제3 셀들에 저장하는 단계;
를 포함하는 것을 특징으로 하는 연산 방법. - 제8항에 있어서,
상기 (b) 단계 이후에,
상기 인 메모리 컴퓨팅 프로세서가, 상기 특정 채널에 대한 상기 컨벌루션 연산 결과값을 이용하여 다음 컨벌루션 연산을 수행하는 경우, 상기 DRAM 에 저장된 상기 웨이트 바이너리 값 중, 상기 다음 컨벌루션 연산을 위한 다음 특정 채널의 4n(n+1) x 2^k 개의 웨이트 바이너리 값과, 상기 다음 컨벌루션 연산을 위한 상기 다음 특정 채널의 컨벌루션 웨이트를 사용하여 상기 다음 컨벌루션 연산을 수행하기 위한 수용 필드에 대응되는 상기 컨벌루션 연산 결과값의 소정 영역에 대한 소정 아웃풋 바이너리 값 중, 상기 지정 컨벌루션 웨이트에 대응되는 상기 위치의 지정 컨벌루션 연산 값을 제외한 4n(n+1) x 2^k 개의 나머지 아웃풋 바이너리 값을 사용하여 상기 다음 컨벌루션 연산을 수행하는 것을 특징으로 하는 연산 방법. - 제8항에 있어서,
상기 인 메모리 컴퓨팅 프로세서가, (i) 채널 방향으로 정렬된 상기 복수의 컨벌루션 필터에서, 특정 위치에서 상기 채널 방향으로 정렬된 소정 컨벌루션 웨이트에 대응되는 소정 웨이트 바이너리 값을 컬럼 웨이트 어드레스에 맵핑한 상태에서, 적어도 하나의 특정 컬럼 웨이트 어드레스에 대응되는 상기 특정 제1 비트라인을 선택하여 상기 특정 웨이트 바이너리 값을 획득하거나, (ii) 상기 채널 방향으로 정렬된 상기 복수의 컨벌루션 인풋 데이터에서, 상기 특정 위치에서 상기 채널 방향으로 정렬된 소정 컨벌루션 인풋 데이터에 대응되는 소정 인풋 바이너리 값을 컬럼 인풋 어드레스에 맵핑한 상태에서, 적어도 하나의 특정 컬럼 인풋 어드레스에 대응되는 상기 특정 제2 비트라인을 선택하여 상기 특정 인풋 바이너리 값을 획득하는 것을 특징으로 하는 연산 방법. - 제7항에 있어서,
상기 인 메모리 컴퓨팅 프로세서가, 상기 지정 컨벌루션 웨이트의 상기 지정 위치를 정중앙으로 설정하여 상기 복수의 컨벌루션 필터에 포함된 각 채널의 정중앙 위치에 위치한 정중앙 컨벌루션 웨이트를 제외한 각각의 4n(n+1) x CH x 2^k 개의 상기 웨이트 바이너리 값을 상기 DRAM에 전송하는 것을 특징으로 하는 연산 방법. - 제8항에 있어서,
상기 제1 DRAM 뱅크와 상기 제2 DRAM 뱅크가 워드라인 당 8192개의 셀을 갖고, 상기 컨벌루션 웨이트와 상기 컨벌루션 인풋 데이터가 각각 8 비트의 비트 데이터로 표현될 때, 상기 컨벌루션 웨이트와 상기 컨벌루션 인풋 데이터는 각각 64 비트 단위로 상기 DRAM에 전송되어 각각 상기 제1 셀들과 상기 제2 셀들에 저장되며, 64개의 상기 특정 채널의 웨이트 바이너리 값과 상기 컨벌루션 연산이 수행될 64개의 상기 나머지 인풋 바이너리 값을 각각 64 비트 단위로 획득하여 64개의 상기 특정 채널의 웨이트 바이너리 값과 64개의 상기 나머지 인풋 바이너리 값을 각각 상기 웨이트 SRAM과 상기 인풋 SRAM에 저장하고, 상기 웨이트 SRAM과 상기 인풋 SRAM으로부터 획득한 상기 특정 채널의 웨이트 바이너리 값과 상기 나머지 인풋 바이너리 값에 대한 상기 곱셈과 상기 덧셈을 수행하여 상기 컨벌루션 연산 결과값을 획득하는 것을 특징으로 하는 연산 방법. - 제8항에 있어서,
상기 제1 DRAM 뱅크, 상기 제2 DRAM 뱅크, 및 상기 제3 DRAM 뱅크는 서로 같거나 다른 것을 특징으로 하는 연산 방법.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020210102818A KR102582419B1 (ko) | 2021-08-04 | 2021-08-04 | 인 메모리 컴퓨팅을 통해 컨벌루션 뉴럴 네트워크 연산을 수행하는 방법 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020210102818A KR102582419B1 (ko) | 2021-08-04 | 2021-08-04 | 인 메모리 컴퓨팅을 통해 컨벌루션 뉴럴 네트워크 연산을 수행하는 방법 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20230020876A true KR20230020876A (ko) | 2023-02-13 |
KR102582419B1 KR102582419B1 (ko) | 2023-09-26 |
Family
ID=85202596
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020210102818A KR102582419B1 (ko) | 2021-08-04 | 2021-08-04 | 인 메모리 컴퓨팅을 통해 컨벌루션 뉴럴 네트워크 연산을 수행하는 방법 |
Country Status (1)
Country | Link |
---|---|
KR (1) | KR102582419B1 (ko) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20190099931A (ko) * | 2018-02-20 | 2019-08-28 | 삼성전자주식회사 | 시스톨릭 배열(Systolic Array)을 이용하여 딥 러닝(Deep Learning) 연산을 수행하는 방법 및 장치 |
KR20200082617A (ko) * | 2018-12-31 | 2020-07-08 | 삼성전자주식회사 | 메모리 장치를 이용한 계산 방법 및 이를 수행하는 메모리 장치 |
KR20210075201A (ko) * | 2018-12-29 | 2021-06-22 | 후아웨이 테크놀러지 컴퍼니 리미티드 | 인트라 예측을 위한 방법 및 장치 |
KR20220059409A (ko) * | 2020-11-02 | 2022-05-10 | 주식회사 딥엑스 | 인공신경망을 위한 메모리 장치 |
KR20220141855A (ko) * | 2020-03-22 | 2022-10-20 | 실리콘 스토리지 테크놀로지 인크 | 인공 신경망에서 아날로그 신경 메모리 어레이를 위한 비휘발성 메모리 셀들 및 연관된 고전압 회로들의 페이지 또는 워드의 정밀 튜닝 |
-
2021
- 2021-08-04 KR KR1020210102818A patent/KR102582419B1/ko active IP Right Grant
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20190099931A (ko) * | 2018-02-20 | 2019-08-28 | 삼성전자주식회사 | 시스톨릭 배열(Systolic Array)을 이용하여 딥 러닝(Deep Learning) 연산을 수행하는 방법 및 장치 |
KR20210075201A (ko) * | 2018-12-29 | 2021-06-22 | 후아웨이 테크놀러지 컴퍼니 리미티드 | 인트라 예측을 위한 방법 및 장치 |
KR20200082617A (ko) * | 2018-12-31 | 2020-07-08 | 삼성전자주식회사 | 메모리 장치를 이용한 계산 방법 및 이를 수행하는 메모리 장치 |
KR20220141855A (ko) * | 2020-03-22 | 2022-10-20 | 실리콘 스토리지 테크놀로지 인크 | 인공 신경망에서 아날로그 신경 메모리 어레이를 위한 비휘발성 메모리 셀들 및 연관된 고전압 회로들의 페이지 또는 워드의 정밀 튜닝 |
KR20220059409A (ko) * | 2020-11-02 | 2022-05-10 | 주식회사 딥엑스 | 인공신경망을 위한 메모리 장치 |
Also Published As
Publication number | Publication date |
---|---|
KR102582419B1 (ko) | 2023-09-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109919311B (zh) | 生成指令序列的方法、执行神经网络运算的方法和装置 | |
WO2018160773A1 (en) | Matrix transfer accelerator system and method | |
CN105843775A (zh) | 片上数据划分读写方法、系统及其装置 | |
US11114138B2 (en) | Data structures with multiple read ports | |
CN103814370B (zh) | 利用蒙哥马利乘法结果的分区和分散式存储的模幂运算 | |
CN111768458A (zh) | 一种基于卷积神经网络的稀疏图像处理方法 | |
CN101840383A (zh) | 支持连续/离散地址多数据并行访问的可配置存储器结构 | |
CN114565501B (zh) | 用于卷积运算的数据加载方法及其装置 | |
CN110096450A (zh) | 多粒度并行存储系统及存储器 | |
FR3042050B1 (fr) | Dispositif informatique muni de traitement en memoire et de ports d'acces etroits | |
CN111310115B (zh) | 数据处理方法、装置及芯片、电子设备、存储介质 | |
Nakano | Optimal parallel algorithms for computing the sum, the prefix-sums, and the summed area table on the memory machine models | |
US20220113944A1 (en) | Arithmetic processing device | |
CN109902821B (zh) | 一种数据处理方法、装置及相关组件 | |
JP2024516514A (ja) | 畳み込みニューラル・ネットワーク実行のための活性化のメモリ・マッピング | |
US11816025B2 (en) | Hardware acceleration | |
CN110490312B (zh) | 一种池化计算方法和电路 | |
KR20230020876A (ko) | 인 메모리 컴퓨팅을 통해 컨벌루션 뉴럴 네트워크 연산을 수행하는 방법 | |
KR102023855B1 (ko) | 딥러닝 하드웨어 가속장치 | |
CN103765378A (zh) | 2d收集指令和2d高速缓存 | |
CN114330687A (zh) | 数据处理方法及装置、神经网络处理装置 | |
CN110503193B (zh) | 一种基于roi的池化运算方法和电路 | |
US11157174B2 (en) | Hybrid first-fit K-choice insertions for hash tables, hash sets, approximate set membership data structures, and caches | |
WO2016007069A1 (en) | Device and method for performing a fourier transform on a three dimensional data set | |
CN111191780A (zh) | 均值池化累加电路、装置以及方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant |