1. 개요
PIM (Processing-In-Memory)[1]은 메모리 뱅크 인근에 Processing Unit(PU)[2]을 배치하여 메모리 디바이스 내부에서 간단한 연산을 수행할 수 있도록 하는 기술이다. Near-Data Processing의 일종이라고 볼 수 있다.기존의 컴퓨터 메모리 아키텍처(계층적 메모리 시스템)에서는 CPU가 데이터를 처리하려면 반드시 주기억장치(보통 DRAM)로부터 CPU 내부의 캐시로 데이터를 불러와야 했다. 일반적인 프로그램을 실행하는 데에는 이러한 아키텍처를 사용해도 큰 문제가 없으나, 현대에 들어 LLM 등 거대 AI 모델을 필두로 고대역폭 데이터 전송을 필요로 하는 Memory-Bound Application[3]들이 떠오르며 고대역폭 메모리(e.g. HBM)를 적극적으로 채택한 시스템이 주류로 부상하게 되었는데, 이러한 시스템에 장착된 고대역폭 메모리는 높은 대역폭을 제공함으로써 Memory-Bound Application의 성능을 분명히 좋게 하기는 하지만 하드웨어 구조적 한계로 인해 여전히 아래와 같은 병목을 야기하고 있다.
1. 잦은 CPU-메모리 디바이스 간 데이터 전송으로 인한 지연 시간[4]
2. Off-chip 데이터 전송[5]으로 인한 전력 소모와 발열
따라서 CPU와 메모리가 데이터를 주고받을 일을 최소화할 필요성이 제기되었고, 이를 달성하기 위한 방법론 중 하나가 PIM인 것이다. PIM 기술을 이용하여 메모리 디바이스 내에서 간단한 연산을 직접 수행할 수 있다면 위 두 가지 문제를 모두 완화할 수 있다. PIM 기술은 데이터 중심 컴퓨팅(Data-Centric Computing) 환경에서 특히 유용하며, 빅 데이터, 인공 지능 및 기계 학습과 같은 데이터 집약적인 응용 프로그램에서 성능 향상을 이끌어내고 데이터센터의 전력 소모를 줄이는 데 기여할 것으로 기대된다.
2. 종류
PIM은 연산이 이루어지는 위치와 연산의 대상이 되는 신호의 형태에 따라 크게 Digital PIM과 Analog PIM으로 나눌 수 있다. 각각 메모리 뱅크 내부의 Sense Amplifier(Sense Amp.) 밖에서 연산을 수행하는지, 안쪽에서 연산을 수행하는지에 따라 구분된다.2.1. Digital PIM
메모리 셀에서 나온 미세한 신호를 Sense Amp가 Digital 신호[6]로 변환한 후의 값을 대상으로 연산을 수행하는 PIM이다. 아무런 수식어 없이 PIM을 이야기하면 대개 Digital PIM을 지칭하는 것이다.삼성전자의 HBM-PIM, SK Hynix의 AiM(Accelerator-in-Memory), 프랑스 UPMEM社의 PIM-DRAM 등이 실물 칩으로 구현된 바 있다.
2.2. Analog PIM
Digital PIM과 반대로 Sense Amp를 통과하기 전의 신호를 대상으로 연산을 수행하는 PIM이다. 주로 옴의 법칙과 키르히호프 법칙을 활용해 행렬 곱셈(MAC, Multiply and Accumulation)을 수행한다. Sense Amp 이전에 PU가 위치하는 특성상 연산이 메모리 어레이 내부에서 한 번에 끝나는 특성이 있다.에너지 효율이 Digital PIM보다 월등히 좋다고 알려져 있으나, 아날로그 신호는 노이즈에 취약한 특성을 가지고 있는데다가 Analog PIM 구현을 위한 주변 회로(Peripheral)의 면적 문제로 구현이 매우 까다롭다.
[1] CIM, Compute-in-Memory라고도 한다.[2] CIM이라는 표현을 사용하는 논문에서는 Compute Unit(CU)라고도 하고, PIM Core라고도 한다.[3] CPU에서 프로그램 코드가 수행되는 시간보다, CPU와 메모리가 데이터를 주고받는 시간이 전체 성능에 더 중요하게 작용하는 특성을 지닌 Application. Memory-Intensive, Data-Intensive라고도 한다. 반대로 CPU 성능에 큰 영향을 받는 Application은 Compute-bound, Compute-intensive라고 표현한다.[4] 전자가 금속을 타고 이동하는 데에도 시간이 걸리며, CPU와 메모리가 소통하기 위해서는 Processor가 메모리 명령어(Memory Instruction)를 발행하여 DRAM으로 전송하는 등 프로토콜을 수행해야 해서 지연이 발생한다.[5] 패키징된 칩 밖으로 데이터가 이동하는 것.[6] 0, 1 중 하나로 읽을 수 있는 값