DFT(Design for Testability)

[논문 리뷰] An Overview of Processing-in-Memory Circuits for Artificial Intelligence and Machine Learning(DRAM PIM)

-운- 2025. 3. 24. 02:33

PIM 관련 논문인 An Overview of Processing-in-Memory Circuits for Artificial Intelligence and Machine Learning에서 DRAM에 관한 부분을 정리해보자.

 

https://ieeexplore.ieee.org/document/9737485

 

 

 

MAC (Multiple-and-Accumulate) 연산은 신경망에서 핵심적인 산술 함수이다. von-Neumann architecture로 불리는 전형적인 computing architecture는 처리 요소와 메모리가 분리되어 있다. MAC 연산을 실행하려면 처리 요소와 메모리 사이에서 많은 양의 데이터를 전송해야 한다. 빈번한 데이터 통신은  높은 전력을 소비하고 에너지 효율적인 edge computing systems에서 도전 과제이다.
PIM (Processing-in-Memory) 아키텍처는 memory wall이라는 이러한 병목 현상을 극복하기 위해 고안되었다. PIM 아키텍처에서 computing circuit과 메모리를 가지며 외부 메모리로부터의 데이터 전송 빈도를 줄인다.
 

DRAM PIM

DRAM의 각 셀은 단일 transistor와 capacitor로 구성된 단순한 구조를 가진다.

Fig. 5에서 보듯이, DRAM-based PIM은 logic integration의 level에 따라 cell-level, bank-level, 3D level의 세 가지 범주로 구분된다.

DRAM cell-level PIM은 bitline sense amplifiers와 low level transistor logic을 통합하여 메모리 뱅크의 전체 내부 대역폭을 활용한 대량 bitwise operations을 수행한다.

Bank-level PIM은 각 뱅크의 column decoder 이후에 고수준 처리 논리를 통합한다. Cell-level PIM에 비해 maximum internal bandwidth 을 사용할 수 없지만, 더 큰 logic area을 활용한다.

3D level PIM은 Hybrid Memory Cube (HMC)와 같은 3D stacked 메모리와 base logic die를 활용한다. 이는 TSV (Through-Silicon Via)를 통해 상호 연결된 stacked memory die에 연산 logic die를 통합하여 효율적이고 high-bandwidth의 통신을 제공한다.

DRAM Architecture와 Operation

DRAM chip은 데이터를 저장하는 메모리 셀과 이를 관리하는 control logic, 그리고 데이터를 주고받는 data I/O circuitry로 이루어져 있다.

칩은 여러 개의 DRAM bank로 나뉘어 있고, 각 뱅크는 DRAM mat라는 더 작은 단위들이 쌓여서 만들어진다. 여기서 DRAM mat는 DRAM cell이 2차원 배열, 그러니까 행과 열로 가지런히 배치된 기본 구조를 말한다. 이 mat 안에 있는 각 셀은 단일 transistor와 capacitor로 구성되어 있어서 비트 단위의 값을 저장한다.

 

이제 mat에서 데이터를 읽거나 쓰려면, 먼저 row decoder가 행 주소를 받아서 특정 wordline을 선택한다. 그러면 그 wordline에 연결된 모든 DRAM cell의 transistor가 켜지고, 저장된 값이 capacitor에서 읽히거나 새로 쓰이게 된다. 

 

transistor가 켜지면 각 DRAM cell의 capacitor가 미리 VDD/2 전압으로 충전된 bitline과 charge sharing을 하기 시작한다. charge sharing 과정에서 bitline에 작은 변화가 생기는데, bitline sense amplifiers가 이 변화를 증폭시켜 0 또는 1로 알아보기 쉽게 바꿔준다. 이렇게 한 행 전체가 증폭되고 나면, column decoder가 필요한 bitline을 골라서 해당 데이터를 I/O pad로 보낸다.

B. Cell-Level Processing-in-Memory

Cell-level PIM은 bitline sense amplifier에 logic을 붙여서(논리 연산을 수행할 수 있는 기능을 추가)

여러 행에 걸친 대량의 bitwise operation(비트 단위 연산)을 수행하며 DRAM의 내부 메모리 대역폭을 최대한 활용한다.

하지만 DRAM cell은 공간이 너무 좁아서(피치가 작아서) 여기에 logic을 추가하는 건 쉽지 않다. 한 셀은 이미 하나의 transistor와 capacitor만 들어가도록 딱 맞춰져 있어서 더 많은 transistor를 넣기가 어렵다.

 

이러한 문제 때문에 예전에 진행한 연구들은 복잡한 logic gate를 만들지 않고도 간단한 gate-level operations(AND, OR, NOR, NOT)을 수행하는 방법을 연구했다고 한다.

AMBIT에선 Fig. 6(a)에 나온 TRA (Triple Row Access)라는 방법을 제안한다. 이건 sense amplifier에 transistor를 추가하지 않고도 AND와 OR 연산을 할 수 있게 해준다.

 

먼저 DRAM의 control logic을 살짝 바꿔서 세 개의 wordline을 동시에 켠다. 그러면 같은 bitline을 공유하는 세 개의 셀이 전하를 나누게 되고 셋 중 1이 두 개 이상이면 결과가 1이 된다.

수식으로 쓰면 R = AB + BC + CA = C(A + B) + ~C(AB)인데, 여기서 A, B, C는 세 셀의 값이고 R은 결과다. C를 미리 1이나 0으로 설정하면 두 행에 대해 OR나 AND 연산을 선택해서 할 수 있다.

 

또 AMBIT는 NOT 연산을 위해 DCC (Dual Contact Cells)라는 걸 제안하는데 이건 각 셀에 추가의 wordline과 transistor 쌍을 넣어서 sense amplifier의 반대 값을 셀로 옮기는 방식이다(Fig. 6(b)). 근데 이건 DRAM cell의 좁은 공간에 맞추려면 여분의 wordline과 transistor가 더 필요해서 실제로 구현하기 어렵다.

 

이제 DRISA를 한번 살펴 보자. 이건 Fig. 6(c), 6(d), 6(e)에 나온 3T1C-NOR, 1T1C-NOR/MIX, 1T1C-ADDER라는 세 가지 변형된 DRAM cell 설계를 제안한다.

1T1C-NOR/MIX와 1T1C-ADDER는 sense amplifiers 아래에 NOR이나 다른 logic gates, 그리고 parallel adder같은 간단한 논리를 latches와 함께 통합한다. 하지만 이런 간단한 logic gates조차 좁은 DRAM cell 공간에 넣기 힘들다.

 

그래서 3T1C-NOR는 좀 다른 방식으로 문제를 푼다. 이건 3T1C cell 설계를 활용하는데 셀마다 읽기와 쓰기를 위해 두 개의 분리된 wordlines를 가지고 있다. 이 구조 덕분에 셀을 바꾸지 않아도 자연스럽게 NOR 연산을 할 수 있다. 두 개의 M3 transistors가 각각의 wordlines에 의해 켜지면 같은 bitline을 공유하는 두 M2 transistors가 NOR gate처럼 동작한다. 게다가 DRISA는 bitline sense amplifiers 아래에 transistor-level shifter circuit을 추가해서 데이터가 옆 bitlines로 이동할 수 있게 해줘서 selection, multiplication, addition 같은 더 복잡한 연산도 가능하게 한다고 한다.

 

Cell-level PIM은 한 행 전체를 큰 입력으로 다룰 수 있어서 최적화 가능성이 크다. 그래서 AMBIT와 DRISA는 RowClone-FPM (Fast Parallel Mode)라는 방법을 쓴다. 또 row decoders와 drivers를 수정해서 여러 행을 동시에 켤 수 있게 해서 속도를 높인다. 특히 AMBIT는 AAP (Activate-Activate-Precharge)라는 복합 명령을 제안해서 명령 횟수를 줄이고 지연 시간도 낮춘다.

C. Bank-Level Processing-in-Memory

Cell-level PIM은 메모리 뱅크의 전체 내부 대역폭을 활용하는 데 가장 적합하지만 DRAM 기술 발전으로 셀 피치가 계속 줄어드는 심각한 면적 제약으로 인해 어렵다.

Newton과 HBM-PIM이라는 두 가지 bank-level PIM은 column decoder와 selector 이후에 처리 논리를 통합함으로써 이 어려움을 해결하며, 셀 배열의 전체 폭을 활용할 수 있게 한다(Fig. 7(a)).  여러 뱅크를 동시에 활성화하는 bank parallelism을 활용하여 전체 행을 사용하지 않게 해서 손실된 내부 대역폭을 보상한다.

 

PIM의 이점을 극대화하기 위해 Newton은 추천 시스템(ex) Facebook’s DLRM)과 언어 모델(ex) Google’s BERT, OpenAI’s GPT)과 같은 메모리 집약적인 딥 러닝 모델에만 초점을 맞추고 matrix-vector multiplication을 효과적으로 계산하는 고정 data flow accelerator를 제안한다.

Fig. 7(b)는 단일 DRAM die에서 Newton의 전체 아키텍처를 보여준다. 각 뱅크는 16개의 multiplier, reduction tree안에 16개의 adder, 16-bit accumulator register를 포함한다. multiplier 두 입력의 피연산자는 column selector와 global buffer를 거쳐 메모리 셀 array에서 오며 global buffer는 입력 벡터를 모든 메모리 뱅크로 브로드캐스트한다.

 

또한 Newton은 bank parallelism을 활용하고 지연을 줄이기 위해 GWRITE, G_ACT, COMP, READRES와 같은 맞춤형 PIM commands를 제안한다. Newton은 GWRITE command를 사용하여 global buffer에 입력 벡터 데이터를 로드한다. G_ACT command는 여러 뱅크를 활성화한다. COMP command는 모든 뱅크에서 multipliers와 adder tree를 사용하여 뱅크 내 MAC operations을 동시에 실행한다. Newton은 READRES command를 사용하여 모든 뱅크에서 결과를 읽는다.

 

HBM-PIM은 AI 응용 프로그램의 복잡한 계산 요구 사항을 지원하기 위해 PCU (Programmable Compute Unit)를 제안한다. HBM-PIM은 두 뱅크당 하나의 PCU block을 통합하며, 두 뱅크는 두 개의 별도 IO sense amplifier와 PCU block을 공유한다. Fig. 7(c)는 PCU의 블록 다이어그램을 보여주며 interface unit, execution unit, register group으로 구성된다.

 

interface unit은 메모리의 command controller로부터 제어 및 데이터 신호를 수신한다.

execution unit은 SIMD (Single-Instruction-Multiple-Data) 방식의 16개의 FP16 multipliers와 adders를 포함한다.

register group은 CRF (Command Register File), GRF (General-Purpose Register File), SRF (Scalar Register File)을 포함한다.

 

또한 PIM controller는 PCU의 프로그래머빌리티와 호스트와의 원활한 통합을 지원하기 위해 통합된다. PIM controller는 일반 모드와 PIM mode 간의 모드를 결정한다. 특정 행 주소의 활성화 명령이 들어오면 PIM mode를 주장한다. PIM mode가 주장되면 PCU는 CRF에 미리 저장된 PIM instructions을 실행한다. 후속 명령의 경우, DRAM의 읽기 명령마다 CRF의 program counter가 1씩 증가한다.

D. 3D Processing-in-Memory

Bank-level PIM(Newton, HBM-PIM)과 달리, 3D PIM은 logic die를 아래에 두고 그 위에 메모리를 적층한다. 제안된 모든 작업(Neurocube, Tetris, iPIM)은 시뮬레이션으로만 평가된다. HMC (Hybrid Memory Cube)를 사용한 3D PIM으로 딥 뉴럴 네트워크 계산을 가속화하는 것을 탐구한다.

이들은 HMC의 vault structure를 활용하며, HMC stack은 수직으로 16개의 vaults로 분할된다(Fig. 8(a)).

Fig. 8(b)에 나타난 Neurocube는 각 vault마다 logic die에 PNG (Programmable Neurosequence Generator)와 PE (Processing Element)를 배치한다. PNG는 vault controller를 사용하여 vault 내 데이터 액세스 시퀀스를 관리하고 데이터를 PE로 보낸다. 각 PE는 데이터를 병렬로 계산하기 위해 여러 MAC units의 행을 포함한다.

 

2D mesh network on-chip은 모든 PE를 연결하여 vault 간 유연한 데이터 매핑과 연산 통신을 가능하게 한다. 반면 Tetris는 뉴럴 네트워크 모델의 입력 데이터 재사용에 초점을 맞춘다. Fig. 8(c)에 나타난 Tetris는 데이터 재사용을 극대화하기 위해 vault당 global buffer와 PE array structure를 통합하며 Neurocube의 기본 아키텍처를 유지한다.

 

iPIM은 TSV를 통한 데이터 이동에서 에너지를 줄이고 효과적인 계산 대역폭을 높이기 위해 3D PIM과 bank-level PIM을 결합한다. iPIM architecture는 logic die에 위치한 control module을 메모리 다이에 위치한 execution units와 분리한다. 제어와 실행을 분리함으로써 iPIM은 풍부한 bank-level bandwidth를 얻어 메모리 다이에서 처리 엔진의 병렬 실행을 극대화한다.

 

iPIM architecture는 각 vault의 logic die에 하나의 iPIM control core를 배치하고, 각 vault의 메모리 다이에 뱅크 옆에 하나의 PG (Process Group)을 배치한다. iPIM control core는 SIMB (Single-Instruction-Multiple-Bank) ISA의 지원으로 유연한 intra/inter-vault data communication을 관리하고 명령 디코딩을 실행한다. 반면 PG는 메모리 집약적 연산을 뱅크 근처에서 수행하는 PE를 포함하여 parallel execution을 극대화한다.