KR20240044918A - Imc(in memory computing) 프로세서 및 imc 프로세서의 동작 방법 - Google Patents
Imc(in memory computing) 프로세서 및 imc 프로세서의 동작 방법 Download PDFInfo
- Publication number
- KR20240044918A KR20240044918A KR1020220124518A KR20220124518A KR20240044918A KR 20240044918 A KR20240044918 A KR 20240044918A KR 1020220124518 A KR1020220124518 A KR 1020220124518A KR 20220124518 A KR20220124518 A KR 20220124518A KR 20240044918 A KR20240044918 A KR 20240044918A
- Authority
- KR
- South Korea
- Prior art keywords
- imc
- type
- macros
- processor
- data
- Prior art date
Links
- 238000011017 operating method Methods 0.000 title 1
- 238000009825 accumulation Methods 0.000 claims abstract description 29
- 238000000034 method Methods 0.000 claims description 31
- 238000004364 calculation method Methods 0.000 claims description 17
- 239000013598 vector Substances 0.000 claims description 17
- 239000000872 buffer Substances 0.000 claims description 16
- 238000004891 communication Methods 0.000 claims description 3
- 238000004590 computer program Methods 0.000 claims description 2
- 230000001934 delay Effects 0.000 claims description 2
- 210000004027 cell Anatomy 0.000 description 51
- 239000010410 layer Substances 0.000 description 31
- 238000013528 artificial neural network Methods 0.000 description 29
- 238000010586 diagram Methods 0.000 description 21
- 230000004913 activation Effects 0.000 description 13
- 238000001994 activation Methods 0.000 description 13
- 230000008569 process Effects 0.000 description 13
- 238000012545 processing Methods 0.000 description 13
- 241001442055 Vipera berus Species 0.000 description 9
- 238000007667 floating Methods 0.000 description 7
- 238000007792 addition Methods 0.000 description 6
- 238000013473 artificial intelligence Methods 0.000 description 5
- 238000010606 normalization Methods 0.000 description 5
- 238000003491 array Methods 0.000 description 4
- 230000003111 delayed effect Effects 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 230000014509 gene expression Effects 0.000 description 3
- 239000011159 matrix material Substances 0.000 description 3
- 230000003068 static effect Effects 0.000 description 3
- 238000013527 convolutional neural network Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 1
- 230000005669 field effect Effects 0.000 description 1
- 238000012886 linear function Methods 0.000 description 1
- 230000003278 mimic effect Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 210000002569 neuron Anatomy 0.000 description 1
- 210000001328 optic nerve Anatomy 0.000 description 1
- 238000011176 pooling Methods 0.000 description 1
- 238000012805 post-processing Methods 0.000 description 1
- 230000003252 repetitive effect Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000002356 single layer Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/78—Architectures of general purpose stored program computers comprising a single central processing unit
- G06F15/7807—System on chip, i.e. computer system on a single chip; System in package, i.e. computer system on one or more chips in a single package
- G06F15/7821—Tightly coupled to memory, e.g. computational memory, smart memory, processor in memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
- G06F15/8053—Vector processors
-
- 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/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F5/00—Methods or arrangements for data conversion without changing the order or content of the data handled
- G06F5/06—Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor
- G06F5/065—Partitioned buffers, e.g. allowing multiple independent queues, bidirectional FIFO's
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/544—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
- G06F7/5443—Sum of products
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N20/00—Machine learning
-
- 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/045—Combinations of networks
-
- 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
- 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
- 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/21—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements
- G11C11/34—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements using semiconductor devices
- G11C11/40—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements using semiconductor devices using transistors
- G11C11/41—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements using semiconductor devices using transistors forming static cells with positive feedback, i.e. cells not needing refreshing or charge regeneration, e.g. bistable multivibrator or Schmitt trigger
- G11C11/413—Auxiliary circuits, e.g. for addressing, decoding, driving, writing, sensing, timing or power reduction
- G11C11/417—Auxiliary circuits, e.g. for addressing, decoding, driving, writing, sensing, timing or power reduction for memory cells of the field-effect type
- G11C11/419—Read-write [R-W] circuits
-
- 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
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C7/00—Arrangements for writing information into, or reading information out from, a digital store
- G11C7/10—Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers
- G11C7/1006—Data managing, e.g. manipulating data before writing or reading out, data bus switches or control circuits therefor
-
- 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/048—Activation functions
-
- 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)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Computing Systems (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Biomedical Technology (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biophysics (AREA)
- Computer Hardware Design (AREA)
- General Health & Medical Sciences (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Computational Mathematics (AREA)
- Molecular Biology (AREA)
- Mathematical Analysis (AREA)
- Artificial Intelligence (AREA)
- Evolutionary Computation (AREA)
- Computational Linguistics (AREA)
- Databases & Information Systems (AREA)
- Algebra (AREA)
- Neurology (AREA)
- Microelectronics & Electronic Packaging (AREA)
- Complex Calculations (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Medical Informatics (AREA)
Abstract
IMC 프로세서가 개시된다. 일 실시예에 따른 IMC 프로세서는 데이터의 기록 방향과 연산 방향이 동일한 제1 타입의 IMC 매크로들과 데이터의 기록 방향과 연산 방향이 상이한 제2 타입의 IMC 매크로들을 포함하고, 입력 피처 맵(input feature map) 및 가중치 중 어느 하나가 기록(write)되고, 나머지 하나가 인가(stream)되어 입력 피처 맵과 가중치 사이의 MAC(multiply and accumulation) 연산을 수행하는 SRAM IMC 장치; 및 SRAM IMC 장치의 출력에 대한 시프트 연산을 수행하고, 시프트 연산의 결과를 누적하는 시프트 누산기(shift accumulator)를 포함할 수 있다.
Description
아래 실시예들은 IMC(IN MEMORY COMPUTING) 프로세서 및 IMC 프로세서의 동작 방법에 관한 것이다.
심층 신경망(Deep Neural Network; DNN)의 활용은 AI(Artificial Intelligence)를 기반으로 한 산업 혁명으로 이어지고 있다. 심층 신경망 중 하나인 컨볼루션 신경망(Convolution Neural Network; CNN)은 예를 들어, 인간의 시신경을 모방한 영상 및 신호 처리, 객체 인식, 컴퓨터 비전 등과 같은 다양한 응용 분야들에서 폭넓게 사용되고 있다. 컨볼루션 신경망은 매우 많은 수의 행렬을 이용하여 곱셉과 덧셈을 반복하는 MAC 연산(Multiple and Accumulation)을 수행하도록 구성될 수 있다. 범용의 프로세서들을 사용하여 컨볼루션 신경망의 애플리케이션을 실행하는 경우, 연산량이 매우 많지만, 예를 들어, 두 벡터들을 내적하고 그 값들을 누적 합산하는 MAC(Multiplication and Accumulation) 연산과 같은 복잡하지 않은 연산은 인-메모리 컴퓨팅(IN MEMORY COMPUTING)을 통해 수행될 수 있다.
위에서 설명한 배경기술은 발명자가 본원의 개시 내용을 도출하는 과정에서 보유하거나 습득한 것으로서, 반드시 본 출원 전에 일반 공중에 공개된 공지기술이라고 할 수는 없다.
일 실시예에 따른 IMC 프로세서는 데이터의 기록 방향과 연산 방향이 동일한 제1 타입의 IMC 매크로들과 상기 데이터의 기록 방향과 연산 방향이 상이한 제2 타입의 IMC 매크로들을 포함하고, 입력 피처 맵(input feature map) 및 가중치 중 어느 하나가 기록(write)되고, 나머지 하나가 인가(stream)되어 상기 입력 피처 맵과 상기 가중치 사이의 MAC(multiply and accumulation) 연산을 수행하는 SRAM IMC 장치; 및 상기 SRAM IMC 장치의 출력에 대한 시프트 연산을 수행하고, 상기 시프트 연산의 결과를 누적하는 시프트 누산기(shift accumulator)를 포함할 수 있다.
상기 제1 타입의 IMC 매크로들의 출력단은 상기 시프트 누산기를 거쳐 상기 제2 타입의 IMC 매크로들의 입력단과 연결되고, 상기 제2 타입의 IMC 매크로들의 출력단은 상기 제1 타입의 IMC 매크로들의 입력단과 연결될 수 있다.
상기 제2 타입의 IMC 매크로들은 상기 데이터의 기록 방향에 따라 한 비트(1-bit)를 수신하여, 상기 연산 방향에 따라 누산 연산을 수행할 수 있다.
상기 제2 타입의 IMC 매크로들은 상기 데이터의 기록 방향에 따라 복수의 비트들을 수신하여, 상기 MAC 연산을 수행할 수 있다.
상기 SRAM IMC 장치는 상기 제1 타입의 IMC 매크로들에 상기 입력 피처 맵이 기록되고, 상기 가중치가 인가되어 상기 입력 피처 맵과 상기 가중치 사이의 MAC 연산을 수행할 수 있다.
상기 시프트 누산기는 상기 제1 타입의 IMC 매크로들 각각의 MAC 연산 결과에 대한 시프트 연산을 수행하고, 상기 시프트 연산의 결과를 누적하여 제1방향 부분합(partial sum) 연산을 수행할 수 있다.
상기 SRAM IMC 장치는 상기 제2 타입의 IMC 매크로들을 이용하여 상기 제1 방향 부분합 연산 결과를 누적할 수 있다.
상기 시프트 누산기는 버퍼(buffer)를 포함하고, 상기 버퍼는 상기 제1 타입의 IMC 매크로들에 대응하는 MAC 연산 결과를 저장 또는 누적하는 제1 영역; 및 상기 시프트 연산으로 인한 데이터 손실을 방지하기 위한 제2 영역을 포함하며, 상기 제1 영역의 크기 및 상기 제2 영역의 크기는 상기 제1 타입의 IMC 매크로의 크기에 기초하여 결정될 수 있다.
상기 시프트 누산기는 상기 MAC 연산 결과에 대해 좌, 우의 방향들 중 적어도 한 방향으로 상기 시프트 연산을 수행하고, 상기 시프트 연산의 결과를 누적할 수 있다.
상기 MAC 연산은 선형(linear) 연산 및 컨볼루션(convolution) 연산 중 적어도 하나를 포함할 수 있다.
상기 IMC 프로세서는, 모바일 디바이스, 모바일 컴퓨팅 디바이스, 모바일 폰, 스마트폰, 개인용 디지털 어시스턴트(personal digital assistant), 고정 로케이션 단말, 태블릿 컴퓨터, 컴퓨터, 웨어러블(wearable) 디바이스, 랩탑 컴퓨터, 서버, 뮤직 플레이어, 비디오 플레이어, 엔터테인먼트 유닛, 네비게이션 디바이스, 통신 디바이스, 내비게이션 디바이스, IoT(Internet of Things) 디바이스, GPS(Global Positioning System) 장치, 텔레비전, 튜너, 자동차, 자동차용 부품, 항공 전자 시스템, 드론(drone), 멀티콥터(multi-copter), 전기 수직 이착륙 항공기(electric vertical takeoff and landing(eVTOL) aircraft), 및 의료 기기로 구성된 그룹에서 선택된 적어도 하나의 디바이스에 통합될 수 있다.
상기 시프트 누산기는 상기 제1 타입의 IMC 매크로들 각각에 대응하는 출력 벡터들이 인가되고, 상기 연산 방향에 따라 누산 연산을 수행할 수 있다.
일 실시예에 따른 SRAM IMC 장치는 데이터의 기록 방향과 연산 방향이 동일한 제1 타입의 IMC 매크로들과 상기 데이터의 기록 방향과 연산 방향이 상이한 제2 타입의 IMC 매크로들을 포함하고, 입력 피처 맵(input feature map) 및 가중치 중 어느 하나가 기록(write)되고, 나머지 하나가 인가(stream)되어 상기 입력 피처 맵과 상기 가중치 사이의 MAC(multiply and accumulation) 연산을 수행할 수 있다.
일 실시예에 따른 SRAM IMC 장치는 상기 제1 타입의 IMC 매크로들 별로 대응하는 가중치 맵을 단위 사이클만큼 지연시켜 해당 제1 타입의 IMC 매크로에 인가하는 입력 스트리머(input streamer)를 더 포함할 수 있다.
상기 제2 타입의 IMC 매크로들은 상기 제1 타입의 IMC 매크로들 각각에 대응하는 출력 벡터들이 인가되고, 상기 연산 방향에 따라 누산 연산을 수행할 수 있다.
일 실시예에 따른 IMC 프로세서의 동작 방법은 데이터의 기록 방향과 연산 방향이 동일한 제1 타입의 IMC 매크로들 중 임의의 제1 타입의 IMC 매크로에서 입력 피처 맵 및 가중치 사이의 MAC 연산을 수행하는 단계; 상기 제1 타입의 IMC 매크로들 각각의 MAC 연산 결과에 대한 시프트 연산을 수행하고, 상기 시프트 연산의 결과를 누적하여 제1방향 부분합 연산을 수행하는 단계; 및 상기 데이터의 기록 방향과 상기 연산 방향이 상이한 제2 타입의 IMC 매크로들을 이용하여 상기 제1 방향 부분합 연산 결과를 누적하는 단계를 포함할 수 있다.
도 1은 일 실시예에 따른 인-메모리 컴퓨팅(IMC) 매크로와 뉴럴 네트워크에서 수행되는 연산 간의 관계를 설명하기 위한 도면이다.
도 2a는 일 실시예에 따른 IMC 프로세서에서 컨볼루션 연산이 수행하는 경우의 데이터 플로우(data flow)를 설명하기 위한 도면이고, 도 2b는 일 실시예에 따른 컨볼루션 연산 시에 입력 데이터를 재사용하는 경우를 나타낸 도면이다.
도 3은 일반적인 구조의 인-메모리 컴퓨팅 매크로에서 이전 IMC 매크로의 출력을 다음 IMC 매크로에 그대로 사용하는 경우를 설명하기 위한 도면이다.
도 4는 일 실시예에 따른 IMC 프로세서의 하드웨어 구조를 나타낸 도면이다.
도 5는 일 실시예에 따른 IMC 매크로 타입을 도시한 도면이다.
도 6은 일 실시예에 따른 입력 데이터와 가중치 간의 선형 연산을 수행하는 방법을 설명하기 위한 도면이다.
도 7a 내지 도 8은 일 실시예에 따른 컨볼루션 연산을 수행하는 방법을 설명하기 위한 도면이다.
도 9는 일 실시예에 따른 입력 피처 맵과 가중치 간의 MAC 연산을 수행하는 방법을 설명하기 위한 도면이다.
도 2a는 일 실시예에 따른 IMC 프로세서에서 컨볼루션 연산이 수행하는 경우의 데이터 플로우(data flow)를 설명하기 위한 도면이고, 도 2b는 일 실시예에 따른 컨볼루션 연산 시에 입력 데이터를 재사용하는 경우를 나타낸 도면이다.
도 3은 일반적인 구조의 인-메모리 컴퓨팅 매크로에서 이전 IMC 매크로의 출력을 다음 IMC 매크로에 그대로 사용하는 경우를 설명하기 위한 도면이다.
도 4는 일 실시예에 따른 IMC 프로세서의 하드웨어 구조를 나타낸 도면이다.
도 5는 일 실시예에 따른 IMC 매크로 타입을 도시한 도면이다.
도 6은 일 실시예에 따른 입력 데이터와 가중치 간의 선형 연산을 수행하는 방법을 설명하기 위한 도면이다.
도 7a 내지 도 8은 일 실시예에 따른 컨볼루션 연산을 수행하는 방법을 설명하기 위한 도면이다.
도 9는 일 실시예에 따른 입력 피처 맵과 가중치 간의 MAC 연산을 수행하는 방법을 설명하기 위한 도면이다.
본 명세서에서 개시되어 있는 특정한 구조적 또는 기능적 설명들은 단지 기술적 개념에 따른 실시예들을 설명하기 위한 목적으로 예시된 것으로서, 실제로 구현된 형태는 다양한 다른 모습을 가질 수 있으며 본 명세서에 설명된 실시예로만 한정되지 않는다.
제1 또는 제2 등의 용어는 다양한 구성요소들을 설명하는데 사용될 수 있지만, 이런 용어들은 하나의 구성요소를 다른 구성요소로부터 구별하는 목적으로만 이해되어야 한다. 예를 들어 제1 구성요소는 제2 구성요소로 명명될 수 있고, 유사하게 제2 구성요소는 제1 구성요소로도 명명될 수 있다.
어떤 구성요소가 다른 구성요소에 "연결되어" 있다거나 "접속되어" 있다고 언급된 때에는, 그 다른 구성요소에 직접적으로 연결되어 있거나 또는 접속되어 있을 수도 있지만, 중간에 다른 구성요소가 존재할 수도 있다고 이해되어야 할 것이다. 반면에, 어떤 구성요소가 다른 구성요소에 "직접 연결되어" 있다거나 "직접 접속되어" 있다고 언급된 때에는, 중간에 다른 구성요소가 존재하지 않는 것으로 이해되어야 할 것이다. 구성요소들 간의 관계를 설명하는 표현들, 예를 들어 "~간의"와 "바로~간의" 또는 "~에 이웃하는"과 "~에 직접 이웃하는" 등도 마찬가지로 해석되어야 한다.
단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 명세서에서, "포함하다" 또는 "가지다" 등의 용어는 실시된 특징, 숫자, 단계, 동작, 구성요소, 부분품 또는 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성요소, 부분품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 해당 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 가진다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥상 가지는 의미와 일치하는 의미를 갖는 것으로 해석되어야 하며, 본 명세서에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.
실시예들은 퍼스널 컴퓨터, 랩톱 컴퓨터, 태블릿 컴퓨터, 스마트 폰, 텔레비전, 스마트 가전 기기, 지능형 자동차, 키오스크, 웨어러블 장치 등 다양한 형태의 제품으로 구현될 수 있다. 이하, 실시예들을 첨부된 도면을 참조하여 상세하게 설명한다. 각 도면에 제시된 동일한 참조 부호는 동일한 부재를 나타낸다.
도 1은 일 실시예에 따른 인-메모리 컴퓨팅(IMC) 매크로와 뉴럴 네트워크에서 수행되는 연산 간의 관계를 설명하기 위한 도면이다. 도 1을 참조하면, 일 실시예에 따른 뉴럴 네트워크(110)와 뉴럴 네트워크(110)에 대응되는 인-메모리 컴퓨팅(IMC) 매크로의 메모리 어레이(130)가 도시된다.
인-메모리 컴퓨팅(In-Memory Computing; IMC)은 폰-노이만 아키텍처에서 발생하는 연산부(예: 프로세서)와 메모리 사이의 빈번한 데이터 이동으로 인한 성능과 전력 한계점을 돌파하기 위해 데이터가 저장된 메모리 내부에서 직접 연산을 수행하도록 하는 컴퓨팅 아키텍쳐에 해당할 수 있다. 인-메모리 컴퓨팅(IMC)은 연산을 어떤 도메인에서 수행할 지에 따라 아날로그(analog) 인-메모리 컴퓨팅(IMC)과 디지털(digital) 인-메모리 컴퓨팅(IMC)으로 구분할 수 있다. 아날로그(analog) 인-메모리 컴퓨팅(IMC)은 예를 들어, 전류, 전하, 시간 등과 같은 아날로그 도메인에서 연산을 수행할 수 있다. 디지털(digital) 인-메모리 컴퓨팅(IMC)은 논리 회로를 사용하여 디지털 도메인에서 연산을 수행할 수 있다.
인-메모리 컴퓨팅(IMC)은 인공 지능(Artificial Intelligence; AI)의 학습-추론을 위한 다수의 곱셈에 대한 덧셈을 한 번에 수행해 주는 매트릭스(Matrix) 연산, 및/또는 MAC(Multiplication and Accumulation) 연산을 가속화할 수 있다. 이때, 뉴럴 네트워크(110)를 위한 곱과 합의 연산은 인-메모리 컴퓨팅(IMC) 매크로에서 비트 셀들을 포함하는 메모리 어레이(130)를 통해 수행될 수 있다.
인-메모리 컴퓨팅(IMC) 매크로는 비트 셀들을 포함하는 메모리 어레이(130)와 메모리 어레이(130)에 추가된 연산기들에 의한 연산 기능에 의해 곱과 합의 연산을 수행함으로써 뉴럴 네트워크(110)의 기계 학습을 가능하게 할 수 있다.
뉴럴 네트워크(110)는 예를 들어, 입력 레이어(Layer 1), 2개의 히든 레이어들(Layer 2 및 Layer 3) 및 출력 레이어(Layer 4)를 포함하는 심층 신경망(DNN)일 수 있으며, 반드시 이에 한정되지는 않는다. 뉴럴 네트워크(110)는 수신되는 입력 데이터(예를 들어, I1 및 I2)를 기초로 연산을 수행하고, 연산 수행 결과를 기초로 출력 데이터(예를 들어, O1 및 O2)를 생성할 수 있다.
뉴럴 네트워크(110)는 전술한 바와 같이, 2개 이상의 히든 레이어들을 포함하는 심층 신경망(Deep Neural Network; DNN) 또는 n-계층 뉴럴 네트워크일 수 있다. 뉴럴 네트워크(110)가 DNN 아키텍처로 구현된 경우 유효한 정보를 처리할 수 있는 보다 많은 레이어들을 포함하므로, 뉴럴 네트워크(110)는 싱글 레이어를 갖는 뉴럴 네트워크보다 복잡한 데이터 집합들을 처리할 수 있다. 한편, 도 1에서는 뉴럴 네트워크(110)가 4개의 레이어들을 포함하는 것으로 도시하였으나, 반드시 이에 한정되지는 않는다. 뉴럴 네트워크(110)는 더 적거나 더 많은 레이어들을 포함하거나, 더 적거나 더 많은 채널들을 포함할 수 있다. 뉴럴 네트워크(110)는 도 1에 도시된 것과는 다른, 다양한 구조의 레이어들을 포함할 수 있다.
뉴럴 네트워크(110)에 포함된 레이어들 각각은 복수의 채널들(channels)을 포함할 수 있다. 채널(들)은 뉴런(neuron), 프로세싱 엘리먼트(Processing element, PE), 유닛(unit) 또는 이와 유사한 용어들로 알려진, 복수의 인공 노드(artificial node)들에 해당될 수 있다.
뉴럴 네트워크(110)의 레이어들 각각에 포함된 채널들은 서로 연결되어 데이터를 처리할 수 있다. 예를 들어, 하나의 채널은 다른 채널들로부터 데이터를 수신하여 연산할 수 있고, 연산 결과를 또 다른 채널들로 출력할 수 있다.
채널들 각각의 입력 및 출력 각각은 입력 액티베이션(input activation) 및 출력 액티베이션(output activation)이라고 지칭될 수 있다. '액티베이션'은 한 채널의 출력임과 동시에, 다음 레이어에 포함된 채널들의 입력에 해당되는 파라미터일 수 있다. 한편, 채널들 각각은 이전 레이어에 포함된 채널들로부터 수신된 액티베이션들 및 가중치들(weights)에 기초하여 자신의 액티베이션을 결정할 수 있다. 가중치는 각 채널에서의 출력 액티베이션을 계산하기 위해 이용되는 파라미터로서, 채널들 간의 연결 관계에 할당되는 값일 수 있다.
채널들 각각은 입력을 수신하여 출력 액티베이션을 출력하는 연산 유닛(computational unit; CU) 또는 프로세싱 엘리먼트(processing element; PE)에 의해 처리될 수 있고, 채널들 각각의 입력-출력은 매핑될 수 있다.
예를 들어, σ는 액티베이션 함수(activation function)를 나타낼 수 있다. 는 (i-1) 번째 레이어에 포함된 k 번째 채널로부터 i 번째 레이어에 포함된 j번째 채널로의 가중치를 나타낼 수 있다. 는 i 번째 레이어에 포함된 j 번째 채널의 바이어스(bias)를 나타낼 수 있다.
를 i 번째 레이어의 j 번째 채널의 액티베이션이라고 할 때, 액티베이션 는 다음과 같은 수학식 1을 이용하여 계산될 수 있다.
도 1에 도시된 바와 같이, 2번째 레이어(Layer 2)의 첫 번째 채널(CH 1)의 액티베이션은 로 표현될 수 있다. 또한, k가 2라 가정하면, 은 수학식 1에 따라 의 값을 가질 수 있다. 액티베이션 함수 σ는 예를 들어, Rectified Linear Unit (ReLU), 시그모이드(Sigmoid), 하이퍼볼릭 탄젠트(tanh), 및 맥스아웃(Maxout) 중 어느 하나일 수 있으며, 반드시 이에 한정되지는 않는다.
뉴럴 네트워크(110)에서 채널들 간의 입, 출력은 입력(i) 및 가중치(w) 간의 가중합으로 나타낼 수 있다. 가중합은 복수의 입력들 및 복수의 가중치들 간의 곱셈 연산 및 반복적인 덧셈 연산으로써, 'MAC(Multiplication and Accumulation) 연산'이라고도 부를 수 있다. MAC 연산이 연산 기능이 추가된 메모리를 이용하여 수행되는 점에서, MAC 연산이 수행되는 회로를 '인-메모리 컴퓨팅(IMC) 회로'로 지칭할 수도 있다.
뉴럴 네트워크(110)에서는 수 많은 데이터 집합들이 상호 연결된 복수의 채널들 간에 교환되고, 레이어를 지나면서 연산 과정을 거칠 수 있다. 이와 같은 연산 과정에서 수 많은 MAC(Multiply-accumulate) 연산들이 수행되며, MAC 연산의 피연산자인 액티베이션 및 가중치를 적절한 시점에 로드(load)하기 위한 수 많은 메모리 접근 동작들이 함께 수행될 수 있다.
일 실시예에 따른 인-메모리 컴퓨팅(IMC) 프로세서는 메모리 어레이(130)가 크로스바 어레이(crossbar array) 구조로 구성된 MAC 매크로를 포함할 수 있다.
메모리 어레이(130)는 복수의 워드 라인들(word lines)(131), 복수의 비트 셀들(133), 및 복수의 비트 라인들(bit lines)(135)을 포함할 수 있다.
복수의 워드 라인들(131)은 뉴럴 네트워크(110)의 입력 데이터를 수신하기 위해 이용될 수 있다. 예를 들어, 복수의 워드 라인들(131)이 N개(N은 임의의 자연수)의 워드 라인들인 경우, N개의 워드 라인들에는 뉴럴 네트워크(110)의 입력 데이터에 대응되는 값이 인가될 수 있다.
복수의 워드 라인들(131)은 복수의 비트 라인들(135)과 교차할 수 있다. 예를 들어, 복수의 비트 라인들(135)이 M개(M은 임의의 자연수)의 비트 라인들인 경우, 복수의 비트 라인들(135)과 복수의 워드 라인들(131)은 N x M 개의 교차점들에서 교차할 수 있다.
한편, 복수의 워드 라인들(131) 및 복수의 비트 라인들(135)의 교차점들에는 복수의 비트 셀들(133)이 배치될 수 있다. 복수의 비트 셀들(133) 각각은 가중치들을 저장하기 위해, 예를 들어, SRAM(Static Random Access Memory)와 같은 휘발성 메모리로 구현될 수 있으나 반드시 이에 한정되는 것은 아니다. 실시예에 따라서, 복수의 비트 셀들(133) 각각은 ReRAM(Resistive RAM), eFlash 등과 같은 비휘발성 메모리로 구현될 수도 있다.
워드 라인들(131)은 메모리 어레이(130)에서 가로 방향의 행(row)에 해당한다는 점에서 '로우 라인들(row lines)'이라 부를 수 있다. 비트 라인들(135)은 메모리 어레이(130)에서 세로 방향의 열(column)에 해당한다는 점에서 '컬럼 라인들(column lines)'이라 부를 수 있다. 이하, 용어 '워드 라인(들)'과 '로우 라인(들)'은 서로 혼용될 수 있다. 용어 '비트 라인(들)'과 컬럼 라인(들)' 또한 서로 혼용될 수 있다.
복수의 워드 라인들(131)은 뉴럴 네트워크(110)의 입력 데이터에 해당하는 값을 순차적으로 수신할 수 있다. 이때, 입력 데이터는 예를 들어, 입력 피처 맵에 포함된 입력 데이터 일수도 있고, 또는 가중치 맵에 저장된 가중치 값일 수도 있다.
예를 들어, 인-메모리 컴퓨팅 장치에 대한 입력 신호 IN_1가 '1' 또는 ' 하이(high)' 인 경우, 입력 신호 IN_1에 대응하는 1번째 사이클에 메모리 어레이(130)의 1번째 워드 라인으로 입력 신호 IN_1가 인가될 수 있다. 인-메모리 컴퓨팅 장치에 대한 입력 신호 IN_2가 '0' 또는 '로우(low)' 인 경우, 입력 신호 IN_2에 대응하는 2번째 사이클에 메모리 어레이(130)의 2번째 워드 라인으로 입력 신호 IN_2가 인가되지 않을 수 있다.
인-메모리 컴퓨팅 장치에 대한 입력 신호가 순차적으로 메모리 어레이(130)의 복수의 워드 라인들(131)로 입력되는 것은 둘 이상의 입력 신호들이 같은 비트 라인에서 충돌하는 것을 피하기 위한 것일 수 있다. 만약 같은 비트 라인에서 충돌이 발생하지 않는다면, 인-메모리 컴퓨팅 장치는 둘 이상의 입력 신호를 동시에 워드 라인들(131)에 입력할 수도 있다.
메모리 어레이(130)의 복수의 비트 셀들(133)은 해당 비트 셀에 대응하는 워드 라인과 대응하는 비트 라인의 교차점에 배치될 수 있다. 복수의 비트 셀들(133) 각각은 한 비트(1 bit)에 해당하는 데이터를 저장할 수 있다. 복수의 비트 셀들(133) 각각에는 가중치 맵의 가중치 데이터가 저장될 수도 있고, 또는 입력 피처맵의 입력 데이터가 저장될 수도 있다.
복수의 비트 셀들(133)은 해당 비트 셀에 대응하는 가중치 데이터에 따라 대응하는 워드 라인과 대응하는 비트 라인의 교차점에 배치될 수도 있고, 또는 배치되지 않을 수도 있다. 예를 들어, 비트 셀 (i, j)에 대응하는 가중치가 '1'인 경우, 비트 셀 (i, j)은 대응하는 워드 라인 i와 대응하는 비트 라인 j의 교차점에 배치되어 대응하는 워드 라인으로 입력되는 입력 신호를 대응하는 비트 라인으로 전달할 수 있다. 또는, 비트 셀 (i+1, j+1)에 대응하는 가중치가 '0'인 경우,대응하는 워드 라인으로 입력 신호가 인가되더라도 대응하는 비트 라인으로 해당 입력 신호가 전달되지 않을 수 있다.
도 1에 도시된 예시에서, 1번째 워드 라인과 1번째 비트 라인에 대응하는 비트 셀 (1, 1)에 해당하는 가중치가 '1'이므로, 1번째 워드 라인과 1번째 비트 라인의 교차점에 비트 셀이 배치될 수 있다. 이 경우, 1번째 워드 라인으로 입력되는 입력 신호 IN_1가 1번째 비트 라인으로 전달될 수 있다.
또는, 1번째 워드 라인과 3번째 비트 라인에 대응하는 비트 셀 (1, 3)에 해당하는 가중치가 '0'이므로, 1번째 워드 라인과 3번째 비트 라인의 교차점에 비트 셀이 배치되지 않을 수 있다. 이 경우, 1번째 워드 라인으로 입력되는 입력 신호 IN_1가 3번째 비트 라인으로 전달되지 않을 수 있다.
비트 셀들(133)은 '메모리 셀들(memory cells)'로도 지칭될 수 있다. 비트 셀들(133)은 예를 들어, 다이오드(diode), 트랜지스터(예: MOSFET(metal-oxide-semiconductor field-effect transistor)), SRAM(static random access memory) 비트 셀, 및 저항성 메모리 중 적어도 하나를 포함할 수 있으며, 반드시 이에 한정되지는 않는다. 이하에서는 비트 셀들(133)이 SRAM(static random access memory) 비트 셀들인 경우를 일 예로 들어 설명하지만, 반드시 이에 한정되지는 않는다.
복수의 비트 라인들(135)은 복수의 워드 라인들(131)에 교차하며, 비트 라인들(135) 각각은 대응하는 비트 셀을 통해 대응하는 입력 라인으로부터 전달된 값을 출력할 수 있다.
복수의 비트 셀들(133) 중 동일한 워드 라인을 따라 배치된 비트 셀들은 동일한 입력 신호를 수신하고, 동일한 비트 라인을 따라 배치된 비트 셀들은 같은 출력 신호를 전달할 수 있다.
도 1의 예시적으로 도시된 메모리 어레이(130)에 배치된 비트 셀들(133)을 고려할 때 인-메모리 컴퓨팅 장치는 아래의 수학식 2와 같은 MAC 연산을 수행할 수 있다.
인-메모리 컴퓨팅(IMC) 매크로의 메모리 어레이(130)에 포함된 비트 셀들 각각에서 비트 와이즈 곱 연산이 수행되어 누적됨으로써 MAC 연산기 또는 AI 가속기가 구현될 수 있다.
도 2a는 일 실시예에 따른 IMC 프로세서에서 컨볼루션 연산이 수행하는 경우의 데이터 플로우(data flow)를 설명하기 위한 도면이고, 도 2b는 일 실시예에 따른 컨볼루션 연산 시에 입력 데이터를 재사용하는 경우를 나타낸 도면이다.
도 2a를 참조하면, 컨볼루션 연산을 위한 필터들(filters)(210), 입력 피처맵(input feature maps; IFM)들(230), 및 출력 피처맵(output feature map; OFM)들(250)이 도시된다. 용어 '필터(filter)'는 '가중치 맵(weight map)이라고도 부를 수 있다. 이하, 용어 '필터'와 가중치 맵'은 서로 혼용될 수 있다.
도 2a에서, R과 S는 2차원 필터들(210) 각각의 높이(height)와 폭(weight)을 나타낼 수 있다. M은 3차원 필터들(210)의 개수를 나타낼 수 있다. 또한, C는 2차원 입력 피처맵(IFM)(230)의 입력 채널들의 개수를 나타내고, H와 W는 각각 2차원 입력 피처맵(IFM)(230)의 높이(Height)와 폭(Weight)을 나타낼 수 있다. 또한, E와 F는 각각 2차원 출력 피처맵(OFM)(250)의 높이(height)와 폭(weight)을 나타낼 수 있다.
예를 들어, 컨볼루션 신경망(Convolution Neural Network; CNN)은 여러 개의 컨볼루션 레이어들로 구성될 수 있다. 컨볼루션 레이어들 각각은 입력 데이터의 고유한 정보를 포함하는 연속적이고 높은 수준의 추상화된 값을 생성할 수 있다. 이때, 입력 데이터에 대응하는 추상화된 값을 '입력 피처맵(input feature map; IFM)'이라 부를 수 있다.
피처맵이나 필터가 여러 개 있는 경우, 각각을 '채널(channel)'이라 부를 수 있다. 도 2a에서 필터들(210)의 채널의 개수는 C개이고, 입력 피처맵들(IFMs)(230)의 채널의 개수는 C 개일 수 있다. 출력 피처맵의 채널의 개수는 M개일 수 있다. 도 2a에서는 M개의 필터들(210)과 N개의 입력 특징맵들(230) 간의 컨볼루션 연산에 의해 N개의 출력 특징맵들(250)이 생성될 수 있다.
컨볼루션 연산은 일정한 크기(예: RxS)의 필터들(210)을 입력 피처맵(IFM)(230)의 픽셀 단위 또는 스트라이드(stride) 단위로 옮겨가며 수행될 수 있다. 이때, 컨볼루션의 정의에 의해 필터들(210)과 입력 피처맵들(230)은 1:1로 대응되어야 하므로, 필터들(210)과 입력 피처맵들(230)의 채널의 개수는 C 개로 동일할 수 있다. 필터들(210)의 개수와 출력 피처맵들(250)의 채널의 개수 또한 M개로 서로 동일할 수 있다. 여기서, 필터들(210)의 개수와 출력 피처맵들(250)의 채널의 개수가 M 개로 서로 동일한 것은 입력 피처맵들(230)과 어느 하나의 필터 간의 컨볼루션 연산을 수행하는 경우, 채널 한 개의 출력 피처맵이 입력 피처맵의 개수만큼 생성되기 때문이다.
컨볼루션 연산은 크게 프로세서 외부의 메모리 소자(예: DRAM)에서 IMC 매크로들로 데이터를 읽어오는 과정과 IMC 매크로들의 MAC 연산 결과를 버퍼 또는 레지스터 등에 저장하는 과정을 통해 수행될 수 있다. 이때, 외부의 메모리 소자(예: DRAM)에서 데이터를 가져오는데 오랜 시간과 많은 전력이 소모될 수 있다. 따라서, 외부의 메모리 소자로부터 가져온 데이터를 재사용함으로써 시간 및 전력 소모를 줄일 수 있다.
데이터의 재사용은 어떤 데이터를 재사용 하느냐에 따라 예를 들어, 컨볼루션 재사용(convolutional reuse), 가중치 데이터 재사용 및/또는 입력 데이터 재사용과 같은 3가지 유형으로 구분할 수 있다.
컨볼루션 재사용 유형은 입력 피처맵의 입력 데이터와 가중치 맵의 가중치 데이터를 모두 재사용할 수 있다. 컨볼루션 재사용 유형에 따르면, 가중치 맵은 출력 피처맵의 개수만큼 재사용되고, 입력 피처맵은 가중치 맵의 개수만큼 재사용될 수 있다.
가중치 데이터 재사용 유형은 가중치 맵의 가중치 데이터가 고정되어 재사용된다는 점에서 가중치 고정(weight stationary) 형태의 데이터 흐름(dataflow)을 나타낼 수 있다. 가중치 데이터 재사용 유형에 따르면, 가중치 맵의 가중치 데이터는 입력 피처맵의 배치(batch) 개수만큼 재사용될 수 있다.
입력 데이터 재사용 유형은 입력 피처맵의 입력 데이터가 고정되어 재사용된다는 점에서 입력 고정(input stationary) 형태의 데이터 흐름을 나타낼 수 있다. 입력 데이터 재사용 유형에 따르면, 입력 피처맵의 입력 데이터를 가중치 맵의 채널의 개수만큼 재사용할 수 있다. 입력 데이터를 재사용하는 방법은 아래의 도 2b를 참조하여 보다 구체적으로 설명한다.
도 2b를 참조하면, 입력 피처맵들(IFM)(230) 중 어느 하나의 입력 피처맵의 입력 데이터를 필터들(230)의 채널의 개수(예: M개)만큼 재사용하는 경우가 도시된다.
예를 들어, 입력 피처맵(IFM)(235)의 입력 데이터를 재사용하는 경우, IMC 매크로의 메모리 어레이에는 입력 피처맵(IFM)(235)의 입력 데이터가 미리 저장될 수 있다. 이 경우, 필터들(210)에 저장된 데이터(가중치 데이터)가 메모리 어레이에 인가됨에 따라 메모리 어레이의 비트셀들에서 컨볼루션 연산이 수행될 수 있다.
컨볼루션 연산은 필터들(210)이 메모리 어레이에 저장된 어느 하나의 입력 피처맵의 데이터들을 한 비트 단위 또는 스트라이드(stride) 단위로 옮겨가며 연산을 수행함으로써 수행될 수 있다. 여기서, '스트라이드'는 메모리 어레이의 비트셀들의 하나의 워드 라인에서 다음 워드 라인까지의 바이트 수에 해당할 수 있다.
컨볼루션 연산의 결과에 해당하는 부분합(partial sum)은 컨볼루션 연산이 수행된 해당 메모리 어레이의 비트셀들에 저장될 수 있다. 부분합의 누적은 컨볼루션 연산의 최종합이 출력 피처맵(250)에 도달할 때까지 각 비트셀들에 유지됨으로써 부분합에 대한 읽기 및/또는 쓰기 동작을 줄일 수 있다.
도 3은 일반적인 구조의 인-메모리 컴퓨팅 매크로에서 이전 IMC 매크로의 출력을 다음 IMC 매크로에 그대로 사용하는 경우를 설명하기 위한 도면이다. 도 3을 참조하면, 일반적인 구조의 인-메모리 컴퓨팅 매크로에서 제1 IMC 매크로(310)의 비트셀들의 출력을 제2 IMC 매크로(330)에 기록하는 상황을 나타낸 도면(300)이 도시된다.
인-메모리 컴퓨팅(IMC) 기술은 일반적으로 가중치(weight)가 미리 저장된 연산 가능한 메모리에 입력 피처 맵(IFM)의 데이터를 인가하여 계산된 출력을 얻는 구조를 사용할 수 있다. 즉, IMC 기반의 AI 프로세서들은 대부분 가중치 고정(weight stationary) 형태의 데이터 흐름(dataflow)을 사용할 수 있다.
예를 들어, SRAM IMC 매크로를 사용하는 경우, SRAM은 휘발성 메모리이기 때문에 파워-온(power-on) 시점 마다 매번 가중치 데이터를 별도의 저장소(storage)에서 읽어와 SRAM IMC 매크로에 쓰기(write)를 수행할 수 있다.
도 3과 같이 컨볼루션 연산의 결과를 제1 IMC 매크로(310)의 메모리 어레이에 저장한 후 그대로 제2 IMC 매크로(330)에 기록(write)하여 사용할 수 있다. 이 경우, 제1 IMC 매크로(310)의 메모리 어레이에 저장된 연산 결과를 제2 IMC 매크로(330)의 메모리 어레이에 읽고/쓰는(read/write) 단위는 로우(row) 방향일 수 있다. 반면, 제2 IMC 매크로(330)의 메모리 어레이에 저장된 데이터와 불러온 데이터 간의 연산(예: 내적(inner-product) 연산))을 수행하는 단위는 컬럼(column) 방향일 수 있다. 도 3에 도시된 것과 같이, 메모리 어레이에 데이터를 읽고/쓰는(read/write) 방향과 연산을 수행하는 방향이 서로 불일치하는 경우, 가중치 데이터가 아닌 컨볼루션 연산의 중간 출력물인 피처맵을 IMC 매크로들 간에 그대로 사용하여 연산을 수행하는 것이 용이하지 않다.
다시 말해, 읽고/쓰는(read/write) 방향과 연산을 수행하는 방향이 서로 불일치하는 경우, 피처맵을 제2 IMC 매크로(330)에 바로 기록(write)할 수 없기에 버퍼에 저장하고 읽는 과정이 추가되어야 한다. 이는 연산 사이클 및 면적 측면에서 제약을 가하며 데이터 이동을 증가시킬 수 있다.
아래에서 상세히 설명하겠으나, 일 실시예에 따른 IMC 프로세서는 두 가지 타입의 IMC 매크로를 이용하여 이전 IMC 매크로의 출력을 별도의 버퍼 및 데이터 이동 없이 다음 IMC 매크로에 저장하고 연산할 수 있다. 나아가, 일 실시예에 따른 IMC 프로세서는 가중치를 IMC 매크로에 저장하고 연산하는 웨이트 고정(weight stationary) 방법뿐만 아니라 입력 데이터를 IMC 매크로에 저장하고 연산할 수도 있다.
도 4는 일 실시예에 따른 IMC 프로세서의 하드웨어 구조를 나타낸 도면이다. 도 4를 참조하면, 일 실시예에 따른 IMC 프로세서(400)는 SRAM IMC 장치, 제1 MUX(420-1), 시프트 누산기(shift accumulator)(430), 제2 MUX(420-1), 메모리 소자들(440), 입력 스트리머(input streamer)(450), 컨트롤 유닛(460), RW(read write) 회로(470) 및 포스트 프로세서 블록(480)을 포함할 수 있다.
SRAM IMC 장치는 복수의 IMC 매크로들(410)을 포함한다. 복수의 IMC 매크로들(410)은 예를 들어, SRAM IMC 매크로들일 수 있으며, 반드시 이에 한정되지는 않는다. 복수의 IMC 매크로들(410) 각각은 쓰기/읽기 방향과 연산 방향이 동일하거나 상이할 수 있고, 다수의 메모리 어레이(예: 도 5의 메모리 어레이(510))의 메모리 뱅크들이 하나의 디지털 연산기(예: 도 5의 디지털 연산기(530))를 공유하는 형태를 가질 수 있다. 다수의 메모리 어레이는 예를 들어, 크로스바 어레이(crossbar array) 구조를 가질 수 있으며, 반드시 이에 한정되지는 않는다.
SRAM IMC 장치는 제1 타입의 IMC 매크로들(410-1)과 제2 타입의 IMC 매크로들(410-2)을 포함할 수 있다. 제1 타입의 IMC 매크로들(410-1)은 데이터의 기록 방향과 연산 방향이 동일한 IMC 매크로일 수 있고, 제 타입의 IMC 매크로들(410-2)은 데이터의 기록 방향과 연산 방향이 상이한 IMC 매크로일 수 있다. 1 타입의 IMC 매크로들(410-1)과 제2 타입의 IMC 매크로들(410-2)의 구조는 아래의 도 5를 참조하여 보다 구체적으로 설명한다.
SRAM IMC 장치에는 입력 피처 맵(input feature map) 및 가중치 중 어느 하나가 기록(write)되고, 나머지 하나가 인가(stream)되어 상기 입력 피처 맵과 상기 가중치 사이의 MAC(multiply and accumulation) 연산을 수행할 수 있다. MAC 연산은 선형(linear) 연산 및 컨볼루션(convolution) 연산 중 적어도 하나를 포함할 수 있으며, 반드시 이에 한정되지는 않는다.
SRAM IMC 장치에서 모든 데이터들은 예를 들어, '0' 및/또는 '1'과 같은 디지털 논리 값으로 표현되어 연산이 수행될 수 있다. 또한, SRAM IMC 장치에서 입력 데이터, 가중치 데이터 및 출력 데이터는 바이너리 포맷(binary format)을 가질 수 있다.
제1 타입의 IMC 매크로들(410-1)과 제2 타입의 IMC 매크로들(410-2)은 시프트 누산기(430)를 공유할 수 있다. IMC 프로세서(400)는 시프트 누산기(430)를 공유하는 복수의 IMC 매크로들에 의해 하나의 IMC 매크로 대비 더 큰 내적(inner product) 연산을 수행할 수 있다.
제1 MUX(420-1)는 컨트롤 유닛(460)의 제어 신호에 따라, 제1 타입의 IMC 매크로들(410-1)의 메모리 어레이들의 출력을 선택적으로 시프트 누산기(430)에게 전달할 수 있다.
시프트 누산기(shift accumulator)(430)는 제1 타입의 IMC 매크로들(410-1)의 출력을 받아 시프트(shift) 연산과 누적(accumulation)을 수행할 수 있다. 시프트 누산기(430)는 제1 타입의 IMC 매크로들(410-1) 각각의 MAC 연산 결과에 대한 시프트 연산을 수행하고, 시프트 연산의 결과를 누적하여 제1방향 부분합(partial sum) 연산을 수행할 수 있다. 시프트 누산기(430)는 예를 들어, 버퍼(buffer) 및/또는 출력 레지스터에 누적 결과를 저장할 수 있으며, 반드시 이에 한정되지는 않는다.
메모리 소자들(440)은 제1 타입의 IMC 매크로들(410-1)과 제2 타입의 IMC 매크로들(410-2) 각각에 대응하는 가중치 맵들의 가중치 데이터를 저장할 수 있다. 메모리 소자들(440)은 비휘발성 특징을 가질 수 있다. 메모리 소자들(440)은 예를 들어, Flash memory, MRAM(Magnetic Random Access Memory(RAM)), PRAM(Phase-change RAM), 및/또는 RRAM(Resistive RAM) 등과 같은 비휘발성 메모리일 수도 있으며, 반드시 이에 한정되지는 않는다.
입력 스트리머(input streamer)(450)는 제1 타입의 IMC 매크로들(410-1)과 제2 타입의 IMC 매크로들(410-2) 별로 대응하는 입력 데이터 또는 가중치 맵의 가중치 데이터를 단위 사이클만큼 지연시켜 해당 IMC 매크로에 인가할 수 있다.
입력 스트리머(450)는 메모리 소자들(440)로부터, 제1 타입의 IMC 매크로들(410-1)과 제2 타입의 IMC 매크로들(410-2) 중 동시에 연산이 가능한 하나 이상의 IMC 매크로에 대응하는 입력 데이터 또는 가중치 맵의 가중치 데이터를 읽어올 수 있다. 입력 스트리머(450)는 예를 들어, 메모리 소자들(440)에 저장된 가중치 맵들의 가중치 데이터를 읽어올 수도 있고, 또는 가중치 버퍼(buffer)에 저장된 가중치 맵으로부터 가중치 데이터를 읽어올 수도 있다.
입력 스트리머(450)는 하나 이상의 IMC 매크로 별로 단위 사이클만큼 지연(delay)된 시점에 읽어온 가중치 데이터를 해당 IMC 매크로에 인가할 수 있다.
컨트롤 유닛(control unit)(460)은 클럭 신호에 따라, IMC 프로세서(400)의 각 구성 요소들의 동작을 위한 제어 신호들을 생성 및 전달할 수 있다. 컨트롤 유닛(460)은 예를 들어, 제1 타입의 IMC 매크로들(410-1)과 제2 타입의 IMC 매크로들(410-2), 제1 MUX(420-1), 제2 MUX(420-2), 시프트 누산기(430), 및 입력 스트리머(450)를 위한 제어 신호를 생성 및/또는 전달할 수 있다.
RW(read write) 회로(470)는 제1 타입의 IMC 매크로들(410-1)과 제2 타입의 IMC 매크로들(410-2)에 데이터를 쓰거나, 제1 타입의 IMC 매크로들(410-1)과 제2 타입의 IMC 매크로들(410-2)에 저장된 데이터를 읽어올 수 있다. RW(read write) 회로(470)는 제1 타입의 IMC 매크로들(410-1)과 제2 타입의 IMC 매크로들(410-2) 각각의 메모리 어레이에 포함된 하나 이상의 비트 셀의 데이터를 읽고 쓸 수 있다. 하나 이상의 비트 셀의 데이터는 예를 들어, 가중치 데이터와 곱해진 입력 데이터 값을 포함할 수 있다. RW(read write) 회로(470)는 예를 들어, 제1 타입의 IMC 매크로들(410-1)과 제2 타입의 IMC 매크로들(410-2)의 메모리 어레이의 비트 라인(예: RBL, RBLB)을 통해 메모리 어레이의 비트 셀들에 액세스(access)할 수 있다. 메모리 어레이가 복수개의 비트 셀들을 포함하는 경우, RW(read write) 회로(470)는 인 복수의 워드 라인들(RWL) 중 활성화(activation)된 워드라인에 연결된 비트 셀에 액세스할 수 있다. RW(read write) 회로(470)는 액세스한 비트 셀에 데이터를 쓰거나(저장하거나), 비트셀에 저장된 데이터를 읽어올 수 있다.
포스트 프로세서 블록(480)은 벡터-매트릭스 곱셈(Vector-Matrix Multiplication; VMM) 이외의 연산들을 수행하는 벡터 프로세서(Vector Processor) 혹은 하드웨어 가속기(HW accelerator)에 해당할 수 있다. 포스트 프로세서 블록(480)은 예를 들어, 벡터-매트릭스 곱셈(VMM)의 연산 결과, 다시 말해, 서로 다른 필터들에 대한 연산 결과에 대한 요소 별 곱셈(element-wise multiplication), 요소 별 덧셈(element-wise addition), 배치 정규화(batch normalization), 비선형 함수(Non-linear function), 및/또는 풀링(Pooling) 등을 수행할 수 있으나, 반드시 이에 한정되지는 않는다. 포스트 프로세서 블록(480)은 이러한 모두 후 처리 연산을 통틀어 수행할 수 있는 별도의 디지털 로직에 해당할 수 있다.
IMC 프로세서(400)는 예를 들어, 모바일 디바이스, 모바일 컴퓨팅 디바이스, 모바일 폰, 스마트폰, 개인용 디지털 어시스턴트(personal digital assistant), 고정 로케이션 단말, 태블릿 컴퓨터, 컴퓨터, 웨어러블(wearable) 디바이스, 랩탑 컴퓨터, 서버, 뮤직 플레이어, 비디오 플레이어, 엔터테인먼트 유닛, 네비게이션 디바이스, 통신 디바이스, 내비게이션 디바이스, IoT(Internet of Things) 디바이스, GPS(Global Positioning System) 장치, 텔레비전, 튜너, 자동차, 자동차용 부품, 항공 전자 시스템, 드론(drone), 멀티콥터(multi-copter), 전기 수직 이착륙 항공기(electric vertical takeoff and landing(eVTOL) aircraft), 및 의료 기기로 구성된 그룹에서 선택된 적어도 하나의 디바이스에 통합될 수 있다.
도 5a는 일 실시예에 따른 IMC 매크로 타입을 도시한 도면이다.
도 5를 참조하면, 일 실시예에 따른 SRAM IMC 장치는 제1 타입의 IMC 매크로(510)와 제2 타입의 IMC 매크로(520)를 포함할 수 있다.
이하에서는 설명의 편의를 위하여 IMC 매크로의 크기는 행x열(ROWxCOL)로 표현될 수 있으며, 제1 타입의 IMC 매크로(510)의 크기는 64x64, 제2 타입의 IMC 매크로(520)의 크기는 16x64인 경우를 가정하지만, 반드시 이에 한정되지는 않는다.
또한, 입력 데이터가 8 비트이고, 가중치 데이터가 8 비트인 경우를 가정하지만, 반드시 이에 한정되지는 않는다. 예를 들어, 입력 데이터와 가중치 데이터가 4 비트일 수도 있고, 16 비트 또는 32비트일 수도 있다.
제1 타입의 IMC 매크로(510)는 쓰기/읽기 방향과 연산 방향이 동일하고, 다수의 메모리 어레이의 메모리 뱅크들이 하나의 디지털 연산기를 공유하는 형태를 가질 수 있다. 제1 타입의 IMC 매크로(510)는 메모리 어레이 및 디지털 연산기를 포함할 수 있다.
메모리 어레이는 복수 개의 비트 셀들을 포함할 수 있다. 메모리 어레이의 동일한 비트 라인들에 연결된 비트 셀들은 동일한 한 비트(1-bit)의 가중치 데이터를 수신할 수 있다. 메모리 어레이는 복수의 비트 셀들 각각에 대응하는 가중치 데이터(또는, 입력 데이터)와 해당 비트 셀에 저장된 입력 데이터(또는, 가중치 데이터) 간의 AND 연산을 수행할 수 있다.
제1 타입의 IMC 매크로(510)에서 한 열을 구성하는 64개 비트 셀은 같은 한 비트(1-bit) 입력을 받고 비트 셀에 저장된 값과의 곱 연산을 수행할 수 있다. 이때 곱 연산은 AND 게이트로 구현될 수 있다. 64개의 8 비트- 입력은 1 비트t 씩 8 사이클에 걸쳐 제1 타입의 IMC 매크로(510)에 인가되며, 연산 결과는 애더 트리(adder tree)를 통해 더해질 수 있다. 애더 트리에서 더해진 결과는 시프트 누산기(shift accumulator)를 통해 8 사이클 동안 시프트 및 누적될 수 있다.
제2 타입의 IMC 매크로(520)는 각 행마다 한 비트(1-bit) 입력을 받아 누산을 하거나 8 비트의 비트 시리얼(bit-serial) 한 입력을 받아 MAC 연산을 수행할 수 있다. 일 실시예에 따른 IMC 프로세서는 1 비트 입력을 받아 누산 수행 시 컨트롤 유닛(예: 도 4의 컨트롤 유닛(460))으로부터 온 16개의 1 비트 입력을 이용하여 각 행의 누산 여부를 결정할 수 있다. 제2 타입의 IMC 매크로(520)에서 한 행을 구성하는 64개 비트 셀들은 같은 1 비트 입력을 받고 비트셀에 저장된 값과의 곱 연산을 수행할 수 있다. 이때 곱 연산은 AND 게이트로 구현될 수 있다. 16개의 1 비트 입력은 1 사이클 동안 제2 타입의 IMC 매크로(520)에 인가되며 연산 결과는 애더 트리를 통해 누산될 수 있다.
도 5b는 일 실시예에 따른 시프트 누산기의 예시를 도시한 도면이다.
도 5b를 참조하면, 일 실시예에 따른 시프트 누산기(shift accumulator)(530)는 1차원 시프트 누산기일 수 있고, MUX(예를 들어, 도 4의 wp1 MUX(420-1))를 통해 각 IMC 매크로의 출력 크기에 해당하는 64 개의 입력을 받는다. 시프트 누산기(530)에 도시된 각 사각형은 IMC 매크로의 출력을 받아 저장하는 버퍼에 해당할 수 있다. 각 입력은 8 비트의 입력 데이터와 8 비트의 가중치 데이터가 사용되어 계산된 경우 16 비트일 수 있다. 64개의 16 비트 결과가 누적된 경우 22 비트 출력이 생성될 수 있으며 IMC 매크로의 연산 결과를 손실없이 저장하기 위해서는 22 비트가 사용될 수 있다. 부동 소수점(floating point) 및 블록 부동 소수점(block floating point) 형식의 경우 가수부 정규화(mantissa normalization) 과정을 통해 8 비트만이 사용할 수도 있다.
일 실시예에 따른 시프트 누산기(530)는 매 사이클마다 IMC 매크로의 출력 결과를 입력으로 받아 좌 또는 우 중 하나의 방향으로 시프트 연산을 수행하고 누적할 수 있다. 또한 좌 또는 우 중 하나의 방향으로 시프트 연산이나 누적 연산 중 하나의 연산 만을 수행할 수도 있다.
일 실시예에 따른 시프트 누산기(430)는 시프트 연산 시 데이터의 손실을 막기 위해 누산이 일어나는 누산 영역 외에 가드 영역(guard region)을 더 포함할 수 있고, 시프트 누산기 버퍼의 크기는 64보다 클 수 있다. 누산 영역과 가드 영역의 크기는 변경될 수 있다. 예를 들어, 누산 영역과 가드 영역의 크기는 1 타입의 IMC 매크로의 크기에 기초하여 결정될 수 있다.
일 실시예에 따른 시프트 누산기(430) 내부의 단일 버퍼들은 컨트롤 유닛(예를 들어, 도 4의 컨트롤 유닛(460))으로부터 동일 사이클에 동일한 제어 신호를 받아 좌 또는 우 방향으로 시프트 연산을 수행할 수 있다.
도 6a 내지 도 7은 일 실시예에 따른 컨볼루션 연산을 수행하는 방법을 설명하기 위한 도면이다.
도 6a를 참조하면, 일 실시예에 따른 IMC 프로세서는 n번째 레이어의 출력인 출력 피처 맵을 제1 타입의 IMC 매크로에 기록하고 n+1 레이어의 입력 피처 맵처럼 컨볼루션 연산을 수행할 수 있다. n번째 레이어의 출력 피처 맵은 채널 방향과 연산 방향이 일치하도록 제1 타입의 IMC 매크로에 기록될 수 있다. 이하에서는 설명의 편의를 위하여 출력 피처 맵이 8x64 크기 및 64개 채널을 갖는 경우를 가정하지만, 반드시 이에 한정되지는 않는다. 실시예에서, 입력 피처 맵이 8x64의 크기를 가지고, 채널의 개수가 64개인 경우, 입력 피처 맵은 총 8x64x64개의 8 비트 데이터를 포함하므로 64x64 크기를 가지는 제1 타입의 IMC 매크로 8개를(410-1-0, 410-1-1, ??, 410-1-7) 이용해 전체 데이터를 저장할 수 있다. 입력 피처 맵의 데이터 중 64의 길이를 가지는 X0,0 채널은 첫 번째 제1 타입의 IMC 매크로의(410-1-0) 첫 번째 행에 저장될 수 있다. 입력 피처 맵의 데이터 중 X0,1 채널은 첫 번째 제1 타입의 IMC 매크로의(410-1-0) 두 번째 행에 저장되고, 입력 피처 맵의 데이터 중 X0,64 채널은 메모리 첫 번째 제1 타입의 IMC 매크로의(410-1-0) 64번째 행에 맵핑되어 저장될 수 있다. 마찬가지 방식으로 입력 피처 맵의 데이터 중 X7,64 채널은 메모리 7번째 제1 타입의 IMC 매크로의(410-1-7) 64번째 행에 맵핑되어 저장될 수 있다
제1 타입의 IMC 매크로에 저장된 입력 피처 맵으로 컨볼루션 연산의 가중치가 인가되며 입력 피처 맵과 가중치의 내적 연산 결과가 출력될 수 있다. 출력은 시프트 누산기로 전달되고 커널의 행(row) 수만큼의 연산 결과가 누산 영역(accumulation region)에서 누산될 수 있다. 이하에서는 설명의 편의를 위하여 커널이 3x3 크기를 갖는 경우를 가정하지만, 반드시 이에 한정되지는 않는다.
도 6b를 참조하면, 시프트 누산기에 의해 각각의 출력 벡터는 1 사이클에 걸쳐 좌우로 시프트되고 누산될 수 있다. 3x3 커널의 경우, 채널 방향으로의 각 가중치(예를 들어, W0,0, W0,1, W0,2, W1,0, W1,1, W1,2, W2,0, W2,1, W2,2) 벡터들이 존재한다. 3x3 커널의 컨볼루션 연산에서, 행 방향 3개 가중치 벡터(W0,0, W0,1, W0,2)와 입력 피처 맵 사이의 MAC 연산이 수행되면 각각 입력 피처 맵의 크기에 해당하는 8x64 크기의 출력을 얻을 수 있다. 시프트 누산기에서는 한 사이클에 걸쳐 W0,0과 입력 피처 맵의 출력을 좌로 1칸 시프트하고 한 사이클에 걸쳐 W0,2와 입력 피처 맵의 출력을 우로 1칸 시프트 할 수 있다. 시프트 연산이 끝난 이후 W0,0, W0,1, W0,2 벡터들에 의한 출력 결과들이 시프트 누산기의 누산 영역에서 누산되면 일 실시예에 따른 IMC 프로세서는 행 단위의 컨볼루션 부분합(partial sum) 결과를 얻을 수 있다. 이를 열 단위에서 3번 반복하면 전체 9개 가중치 값들에 대한 컨볼루션 연산이 완료될 수 있다.
도 6c를 참조하면, 행 단위의 컨볼루션 결과는 MUX(420-2)를 통해 제2 타입의 IMC 매크로에 기록될 수 있으며 제2 타입의 IMC 매크로의 애더 트리를 이용해 열 방향으로 누산되면 출력 피처 맵을 얻을 수 있다. 실시예에서, 시프트 누산기를 통해 3개 가중치 벡터(W0,0, W0,1, W0,2)에 의한 64 길이를 가지는 8개의 행 단위의 컨볼루션 결과(Row0, Row1, ??, Row7)를 얻을 수 있다. 다른 행 방향 가중치 벡터인 (W1,0, W1,1, W1,2), (W2,0, W2,1, W2,2)에 의한 행 단위의 컨볼루션 결과와 열 방향으로 시프트 및 누적되면 컨볼루션 연산을 완료할 수 있다. MUX(420-2)를 통해 행 단위의 컨볼루션 결과는 열 방향으로 시프트 되고 제2 타입의 IMC 매크로에 기록될 수 있다. 제2 타입의 IMC 매크로에 기록된 행 단위의 컨볼루션 결과는 각 행 마다 인가되는 1 비트 입력에 의해 특정 행만이 누적될 수 있다. 예를 들어, 가중치 벡터(W0,0, W0,1, W0,2)에 의한 Row2 결과, 가중치 벡터(W1,0, W1,1, W1,2)에 의한 Row1 결과, 가중치 벡터(W0,0, W0,1, W0,2)에 의한 Row0 결과를 제2 타입의 IMC 매크로의 각 행에 기록하고 기록된 행에만 컨트롤 유닛(460)을 통해 1에 해당하는 1 비트 입력을 가하면 행 단위의 연산 결과는 애더 트리를 통해 누산될 수 있다.
계산된 출력 피처 맵은 마찬가지 방식으로 제1 타입의 IMC 매크로에 기록될 수 있으며 다음 레이어의 입력 피처 맵이 되어 컨볼루션 연산을 수행할 수 있다. 따라서 일 실시예에 따른 IMC 프로세서는 추가적인 데이터 이동 없이 효율적인 컨볼루션 연산을 수행할 수 있다.
도 7을 참조하면, 일 실시예에 따른 IMC 프로세서는 보다 큰 채널을 가지는 컨볼루션 연산도 수행할 수 있다. 예를 들어, 입력 피처 맵이 256개의 채널 크기를 갖는 경우를 가정하면 256개 채널은 64개씩 4개의 제1 타입의 IMC 매크로에 기록될 수 있다.
일 실시예에 따른 IMC 프로세서는 입력 피처 맵이 저장된 제1 타입의 IMC 매크로에 가중치를 인가하여 내적 연산을 수행할 수 있다. 각각의 제1 타입의 IMC 매크로에서 계산된 결과는 시프트 누산기를 통해 행 단위로 누산될 수 있다. 전체 채널이 4개로 나눠서 IMC 매크로에 기록되었기에 행 단위 부분합은 64 채널 크기를 가지는 경우의 4배인 4개가 존재할 수 있다. IMC 프로세서는 제2 타입의 IMC 매크로는 16개의 행을 가지고 있기에 12개의 부분합을 각각의 행에 기록하고 누산할 수 있다. 따라서 IMC 프로세서는 계산된 행 단위의 부분합을 제2 타입의 IMC 매크로에 기록하고 누산하여 컨볼루션 연산을 수행할 수 있다. 일반적으로 64x64 크기의 제1 타입의 IMC 매크로는 64 크기의 채널 방향에 대한 내적 연산을 수행할 수 있지만, 일 실시예에 따른 IMC 프로세서는 큰 채널 크기를 가지는 경우에도 컨볼루션 연산을 수행할 수 있다.
도 8은 일 실시예에 따른 입력 데이터와 가중치 간의 선형 연산을 수행하는 방법을 설명하기 위한 도면이다.
도 8을 참조하면, 일 실시예에 따른 입력 스트리머(450), 및 시프트 누산기(430)를 공유하는 IMC 매크로들에 의해 선형 연산이 수행되는 과정을 나타낸 도면이 도시된다.
일 실시예에 따른 입력 스트리머(450)는 메모리 소자(들)(440)에서 입력을 읽고 제1 타입의 IMC 매크로 또는 제2 타입의 IMC 매크로에 인가할 수 있다.
예를 들어, 64x64 크기의 제1 타입의 IMC 매크로에 8 비트 데이터로 구성된 1x64 크기의 입력이 인가되는 경우, 일 실시예에 따른 IMC 프로세서는 64 비트 데이터를 읽어와 제1 타입의 IMC 매크로에 8 사이클 동안 데이터를 인가할 수 있다. 각 사이클 마다 생성된 출력은 애더 트리를 거쳐 누산되며, 일 실시예에 따른 IMC 프로세서는 1x64 크기의 최종 출력 벡터를 출력할 수 있다.
N개의 제1 타입의 IMC 매크로는 동시에 계산을 수행할 수 있으며 입력 스트리머(450)는 각 제1 타입의 IMC 매크로에 동시에 또는 특정 사이클만큼 지연된 시점에 입력을 인가할 수 있다. 입력 간 지연은 시스템의 대역폭(bandwidth)나 이전 레이어(layer)의 연산 속도 등에 따라 달라질 수 있다.
하나의 제1 타입의 IMC 매크로는 8 비트 입력에 대해 8 사이클에 걸쳐 최종 출력을 계산할 수 있다. N=16인 경우, 16개의 제1 타입의 IMC 매크로들의 출력은 동시에 또는 특정 사이클씩 지연되어 나오며 생성된 각각의 출력은 제2 타입의 IMC 매크로에 기록될 수 있다. 이때 제1 타입의 IMC 매크로에서 애더 트리를 거쳐 생성된 출력은 8 비트 이상의 프리시전(precision)을 가질 수 있으며 제2 타입의 IMC 매크로에 8 비트 데이터를 기록하기 위해서는 부동 소수점(floating point) 및 블록 부동 소수점(block floating point) 형식의 경우 가수부 정규화(mantissa normalization) 과정이 필요할 수 있다. 가수부 정규화를 수행해 8 비트 이상의 가수부를 8 비트 데이터로 바꿔주면 제2 타입의 IMC 매크로에 기록할 수 있다.
일 실시예에 따른 IMC 프로세서는 16개의 출력이 제2 타입의 IMC 매크로에 모두 기록된 후 1 비트로 구성된 1x16 벡터를 입력으로 인가해 누산하면 1x64의 출력을 얻을 수 있다. 일반적으로 64x64 크기의 제1 타입의 IMC 매크로 하나는 64 크기의 내적 연산을 수행할 수 있지만, 일 실시예에 따른 IMC 프로세서는 N=16인 경우에 1024 크기의 내적 연산을 수행할 수 있다. 제2 타입의 IMC 매크로 대신 시프트 누산기(430)로도 누산을 수행할 수 있으며 두 요소를 모두 사용할 경우 더 큰 크기의 내적 연산도 추가적인 버퍼없이 수행할 수 있다.
도 9는 일 실시예에 따른 입력 피처 맵과 가중치 간의 MAC 연산을 수행하는 방법을 설명하기 위한 도면이다.
피처 맵간의 MAC 연산의 경우, 하나의 피처 맵은 입력이 되고 다른 하나는 가중치가 된다. MAC 연산 수행 시 생성된 피처 맵을 IMC 매크로에 저장하고 나머지를 인가해야 한다. 기존 IMC 매크로 구조에서는 읽기/쓰기 방향과 연산 방향의 차이로 인해 가중치를 IMC 매크로에 기록하고 입력을 인가해야 하는 제약이 있었다. 따라서 입력 위치의 피처 맵이 먼저 생성되는 경우에는 중간 버퍼를 두어 생성된 피처 맵을 저장하거나 연산을 중지(stall)시켜 연산의 순서를 바꿔야 했다.
일 실시예에 따른 IMC 프로세서는 읽기/쓰기 방향과 연산 방향이 같은 제1 타입의 IMC 매크로와 읽기/쓰기 방향과 연산 방향이 다른 제2 타입의 IMC 매크로를 이용하여 버퍼나 연산 중지 없이 연산을 수행할 수 있다.
도 9를 참조하면, 각 사이클 마다 생성된 출력 벡터는 애더 트리를 거쳐 누산되며 1x64 크기의 출력 피처 맵이 된다. 이하에서는 제1 타입의 1번 IMC 매크로에서 생성된 출력 피처 맵이 다음 연산의 입력이 되고 제1 타입의 2번 IMC 매크로에서 생성된 출력 피처 맵이 다음 연산의 가중치가 된다고 가정한다. 가중치에 해당하는 제1 타입의 2번 IMC 매크로의 출력을 제2 타입의 IMC 매크로에 기록하고 입력을 인가하면 피처 맵 간 선형 연산을 수행할 수 있다.
제1 타입의 제2 IMC 매크로에서 애더 트리를 거쳐 생성된 출력은 8 비트 이상의 프리시전을 가질 수 있으며 부동 소수점(floating point) 및 블록 부동 소수점(block floating point) 형식의 경우 가수부 정규화(mantissa normalization) 과정을 거쳐 제2 타입의 IMC 매크로에 기록할 수 있다. IMC 프로세서는 가중치 기록 후 제1 타입의 제1 IMC 매크로의 출력을 인가하면 MAC 연산이 수행되며 중간 버퍼 및 연산 중지 없이 연산이 가능하기에 효율적인 데이터 플로우(dataflow)를 구현할 수 있다.
이상에서 설명된 실시예들은 하드웨어 구성요소, 소프트웨어 구성요소, 및/또는 하드웨어 구성요소 및 소프트웨어 구성요소의 조합으로 구현될 수 있다. 예를 들어, 실시예들에서 설명된 장치, 방법 및 구성요소는, 예를 들어, 프로세서, 콘트롤러, ALU(arithmetic logic unit), 디지털 신호 프로세서(digital signal processor), 마이크로컴퓨터, FPGA(field programmable gate array), PLU(programmable logic unit), 마이크로프로세서, 또는 명령(instruction)을 실행하고 응답할 수 있는 다른 어떠한 장치와 같이, 범용 컴퓨터 또는 특수 목적 컴퓨터를 이용하여 구현될 수 있다. 처리 장치는 운영 체제(OS) 및 상기 운영 체제 상에서 수행되는 소프트웨어 애플리케이션을 수행할 수 있다. 또한, 처리 장치는 소프트웨어의 실행에 응답하여, 데이터를 접근, 저장, 조작, 처리 및 생성할 수도 있다. 이해의 편의를 위하여, 처리 장치는 하나가 사용되는 것으로 설명된 경우도 있지만, 해당 기술분야에서 통상의 지식을 가진 자는, 처리 장치가 복수 개의 처리 요소(processing element) 및/또는 복수 유형의 처리 요소를 포함할 수 있음을 알 수 있다. 예를 들어, 처리 장치는 복수 개의 프로세서 또는 하나의 프로세서 및 하나의 콘트롤러를 포함할 수 있다. 또한, 병렬 프로세서(parallel processor)와 같은, 다른 처리 구성(processing configuration)도 가능하다.
소프트웨어는 컴퓨터 프로그램(computer program), 코드(code), 명령(instruction), 또는 이들의 조합을 포함할 수 있으며, 원하는 대로 동작하도록 처리 장치를 구성하거나 독립적으로 또는 결합적으로(collectively) 처리 장치를 명령할 수 있다. 소프트웨어 및/또는 데이터는, 처리 장치에 의하여 해석되거나 처리 장치에 명령 또는 데이터를 제공하기 위하여, 어떤 유형의 기계, 구성요소(component), 물리적 장치, 가상 장치(virtual equipment), 컴퓨터 저장 매체 또는 장치, 또는 전송되는 신호 파(signal wave)에 영구적으로, 또는 일시적으로 구체화(embody)될 수 있다. 소프트웨어는 네트워크로 연결된 컴퓨터 시스템 상에 분산되어서, 분산된 방법으로 저장되거나 실행될 수도 있다. 소프트웨어 및 데이터는 컴퓨터 판독 가능 기록 매체에 저장될 수 있다.
실시예에 따른 방법은 다양한 컴퓨터 수단을 통하여 수행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 매체에 기록되는 프로그램 명령은 실시예를 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다. 컴퓨터 판독 가능 기록 매체의 예에는 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체(magnetic media), CD-ROM, DVD와 같은 광기록 매체(optical media), 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical media), 및 롬(ROM), 램(RAM), 플래시 메모리 등과 같은 프로그램 명령을 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다. 프로그램 명령의 예에는 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드를 포함한다.
이상과 같이 실시예들이 비록 한정된 도면에 의해 설명되었으나, 해당 기술분야에서 통상의 지식을 가진 자라면 상기를 기초로 다양한 기술적 수정 및 변형을 적용할 수 있다. 예를 들어, 설명된 기술들이 설명된 방법과 다른 순서로 수행되거나, 및/또는 설명된 시스템, 구조, 장치, 회로 등의 구성요소들이 설명된 방법과 다른 형태로 결합 또는 조합되거나, 다른 구성요소 또는 균등물에 의하여 대치되거나 치환되더라도 적절한 결과가 달성될 수 있다.
그러므로, 다른 구현들, 다른 실시예들 및 특허청구범위와 균등한 것들도 후술하는 특허청구범위의 범위에 속한다.
Claims (17)
- 데이터의 기록 방향과 연산 방향이 동일한 제1 타입의 IMC 매크로들과 상기 데이터의 기록 방향과 연산 방향이 상이한 제2 타입의 IMC 매크로들을 포함하고, 입력 피처 맵(input feature map) 및 가중치 중 어느 하나가 기록(write)되고, 나머지 하나가 인가(stream)되어 상기 입력 피처 맵과 상기 가중치 사이의 MAC(multiply and accumulation) 연산을 수행하는 SRAM IMC 장치; 및
상기 SRAM IMC 장치의 출력에 대한 시프트 연산을 수행하고, 상기 시프트 연산의 결과를 누적하는 시프트 누산기(shift accumulator)
를 포함하는, IMC 프로세서.
- 제1항에 있어서,
상기 제1 타입의 IMC 매크로들의 출력단은 상기 시프트 누산기를 거쳐 상기 제2 타입의 IMC 매크로들의 입력단과 연결되고,
상기 제2 타입의 IMC 매크로들의 출력단은 상기 제1 타입의 IMC 매크로들의 입력단과 연결되는, IMC 프로세서
- 제1항에 있어서,
상기 제2 타입의 IMC 매크로들은
상기 데이터의 기록 방향에 따라 한 비트(1-bit)를 수신하여, 상기 연산 방향에 따라 누산 연산을 수행하는, IMC 프로세서.
- 제1항에 있어서,
상기 제2 타입의 IMC 매크로들은
상기 데이터의 기록 방향에 따라 복수의 비트들을 수신하여, 상기 MAC 연산을 수행하는, IMC 프로세서.
- 제1항에 있어서,
상기 SRAM IMC 장치는
상기 제1 타입의 IMC 매크로들에 상기 입력 피처 맵이 기록되고, 상기 가중치가 인가되어 상기 입력 피처 맵과 상기 가중치 사이의 MAC 연산을 수행하는, IMC 프로세서.
- 제5항에 있어서,
상기 시프트 누산기는
상기 제1 타입의 IMC 매크로들 각각의 MAC 연산 결과에 대한 시프트 연산을 수행하고, 상기 시프트 연산의 결과를 누적하여 제1방향 부분합(partial sum) 연산을 수행하는, IMC 프로세서.
- 제6항에 있어서,
상기 SRAM IMC 장치는
상기 제2 타입의 IMC 매크로들을 이용하여 상기 제1 방향 부분합 연산 결과를 누적하는, IMC 프로세서.
- 제1항에 있어서,
상기 시프트 누산기는 버퍼(buffer)를 포함하고,
상기 버퍼는
상기 제1 타입의 IMC 매크로들에 대응하는 MAC 연산 결과를 저장 또는 누적하는 제1 영역; 및
상기 시프트 연산으로 인한 데이터 손실을 방지하기 위한 제2 영역
을 포함하며,
상기 제1 영역의 크기 및 상기 제2 영역의 크기는
상기 제1 타입의 IMC 매크로의 크기에 기초하여 결정되는, IMC 프로세서.
- 제1항에 있어서,
상기 시프트 누산기는
상기 MAC 연산 결과에 대해 좌, 우의 방향들 중 적어도 한 방향으로 상기 시프트 연산을 수행하고, 상기 시프트 연산의 결과를 누적하는, IMC 프로세서.
- 제1항에 있어서,
상기 MAC 연산은
선형(linear) 연산 및 컨볼루션(convolution) 연산 중 적어도 하나를 포함하는, IMC 프로세서.
- 제1 항에 있어서,
상기 IMC 프로세서는,
모바일 디바이스, 모바일 컴퓨팅 디바이스, 모바일 폰, 스마트폰, 개인용 디지털 어시스턴트(personal digital assistant), 고정 로케이션 단말, 태블릿 컴퓨터, 컴퓨터, 웨어러블(wearable) 디바이스, 랩탑 컴퓨터, 서버, 뮤직 플레이어, 비디오 플레이어, 엔터테인먼트 유닛, 네비게이션 디바이스, 통신 디바이스, 내비게이션 디바이스, IoT(Internet of Things) 디바이스, GPS(Global Positioning System) 장치, 텔레비전, 튜너, 자동차, 자동차용 부품, 항공 전자 시스템, 드론(drone), 멀티콥터(multi-copter), 전기 수직 이착륙 항공기(electric vertical takeoff and landing(eVTOL) aircraft), 및 의료 기기로 구성된 그룹에서 선택된 적어도 하나의 디바이스에 통합되는, IMC 프로세서.
- 제1항에 있어서,
상기 시프트 누산기는
상기 제1 타입의 IMC 매크로들 각각에 대응하는 출력 벡터들이 인가되고, 상기 연산 방향에 따라 누산 연산을 수행하는, SRAM IMC 장치.
- 데이터의 기록 방향과 연산 방향이 동일한 제1 타입의 IMC 매크로들과 상기 데이터의 기록 방향과 연산 방향이 상이한 제2 타입의 IMC 매크로들을 포함하고, 입력 피처 맵(input feature map) 및 가중치 중 어느 하나가 기록(write)되고, 나머지 하나가 인가(stream)되어 상기 입력 피처 맵과 상기 가중치 사이의 MAC(multiply and accumulation) 연산을 수행하는 SRAM IMC 장치.
- 제13항에 있어서,
상기 제1 타입의 IMC 매크로들 별로 대응하는 가중치 맵을 단위 사이클만큼 지연시켜 해당 제1 타입의 IMC 매크로에 인가하는 입력 스트리머(input streamer)
를 더 포함하는, IMC 프로세서.
- 제13항에 있어서,
상기 제2 타입의 IMC 매크로들은
상기 제1 타입의 IMC 매크로들 각각에 대응하는 출력 벡터들이 인가되고, 상기 연산 방향에 따라 누산 연산을 수행하는, IMC 프로세서.
- 데이터의 기록 방향과 연산 방향이 동일한 제1 타입의 IMC 매크로들 중 임의의 제1 타입의 IMC 매크로에서 입력 피처 맵 및 가중치 사이의 MAC 연산을 수행하는 단계;
상기 제1 타입의 IMC 매크로들 각각의 MAC 연산 결과에 대한 시프트 연산을 수행하고, 상기 시프트 연산의 결과를 누적하여 제1방향 부분합 연산을 수행하는 단계; 및
상기 데이터의 기록 방향과 상기 연산 방향이 상이한 제2 타입의 IMC 매크로들을 이용하여 상기 제1 방향 부분합 연산 결과를 누적하는 단계
를 포함하는, IMC 프로세서의 동작 방법.
- 하드웨어와 결합되어 제16항의 방법을 실행시키기 위하여 매체에 저장된 컴퓨터 프로그램.
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020220124518A KR20240044918A (ko) | 2022-09-29 | 2022-09-29 | Imc(in memory computing) 프로세서 및 imc 프로세서의 동작 방법 |
US18/108,718 US20240111828A1 (en) | 2022-09-29 | 2023-02-13 | In memory computing processor and method thereof with direction-based processing |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020220124518A KR20240044918A (ko) | 2022-09-29 | 2022-09-29 | Imc(in memory computing) 프로세서 및 imc 프로세서의 동작 방법 |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20240044918A true KR20240044918A (ko) | 2024-04-05 |
Family
ID=90470773
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020220124518A KR20240044918A (ko) | 2022-09-29 | 2022-09-29 | Imc(in memory computing) 프로세서 및 imc 프로세서의 동작 방법 |
Country Status (2)
Country | Link |
---|---|
US (1) | US20240111828A1 (ko) |
KR (1) | KR20240044918A (ko) |
-
2022
- 2022-09-29 KR KR1020220124518A patent/KR20240044918A/ko unknown
-
2023
- 2023-02-13 US US18/108,718 patent/US20240111828A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
US20240111828A1 (en) | 2024-04-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10534607B2 (en) | Accessing data in multi-dimensional tensors using adders | |
US10846591B2 (en) | Configurable and programmable multi-core architecture with a specialized instruction set for embedded application based on neural networks | |
US10802956B2 (en) | Accessing prologue and epilogue data | |
CN111542826A (zh) | 支持模拟协处理器的数字架构 | |
US9946539B1 (en) | Accessing data in multi-dimensional tensors using adders | |
JP2022540550A (ja) | ニューラルネットワークアクセラレータにおいてスパースデータを読み取るおよび書き込むためのシステムおよび方法 | |
EP3529701B1 (en) | Hardware double buffering using a special purpose computational unit | |
US11934798B2 (en) | Counter-based multiplication using processing in memory | |
US11983616B2 (en) | Methods and apparatus for constructing digital circuits for performing matrix operations | |
CN111465943B (zh) | 一种集成电路和用于神经网络处理的方法 | |
KR20180102058A (ko) | 인공 신경망 역방향 트레이닝 실행용 장치와 방법 | |
CN112668381A (zh) | 用于识别图像的方法和设备 | |
US11435941B1 (en) | Matrix transpose hardware acceleration | |
KR20220134035A (ko) | 컨볼루션 연산을 위한 프로세싱 인 메모리 방법 | |
KR20240044918A (ko) | Imc(in memory computing) 프로세서 및 imc 프로세서의 동작 방법 | |
US11636569B1 (en) | Matrix transpose hardware acceleration | |
CN113887730A (zh) | 量子模拟器实现方法、装置、相关设备以及量子模拟方法 | |
KR20220145143A (ko) | 뉴럴 네트워크 장치 및 그의 동작 방법 | |
GB2567038B (en) | Accessing prologue and epilogue data | |
CN114595811A (zh) | 用于执行深度学习操作的方法和设备 | |
KR20200141663A (ko) | 컨볼루션 신경망 모델에 기초한 컴퓨팅 장치 및 그 동작 방법 | |
KR20240025827A (ko) | Imc(in memory computing) 프로세서 및 imc 프로세서의 동작 방법 | |
KR20210014897A (ko) | 인공 신경망을 위한 행렬 연산기 및 행렬 연산 방법 | |
US12125124B1 (en) | Matrix transpose hardware acceleration | |
KR102665969B1 (ko) | Imc(in memory computing) 회로, imc 회로를 포함하는 뉴럴 네트워크 장치, 및 imc 회로의 동작 방법 |