PIM은 단어 그대로 메모리에서 연산이 이뤄짐을 의미합니다. 현대 컴퓨터 시스템은 Von Neumann 아키텍처를 따르고 있습니다. Von Neumann 아키텍처에서는 메모리가 명령어 및 연산자의 저장을 담당하고 프로세서는 메모리에서 명령어 및 연산자를 가져와 연산을 수행합니다. 따라서 기존 아키텍처에서 메모리는 정보의 입/출력 및 저장만 수행했습니다. 이러한 상황에서 메모리가 컴퓨터 시스템 내 역할을 확대하여 기존 프로세서가 담당하던 연산 중 일부를 수행하겠다는 것입니다.
AI 연산에서 메모리 입/출력이 상당히 많은 응용이 생겨났고, 프로세서의 연산 속도를 메모리가 따라가지 못해 메모리 입/출력 속도 제한으로 인한 전체 AI 연산 성능 제약이 발생하고 있기 때문입니다. 프로세서에서 연산을 하기 위해서는 데이터가 필요하고 이를 메모리에서 가져온 후 결과를 다시 기록해야 하는데, 프로세서와 메모리를 오가는 대역폭의 제약이 있다 보니 전체적인 AI 연산이 느려지게 됩니다. 따라서 많은 연구자와 엔지니어는 메모리에서 일부 연산을 수행하여 프로세서와 메모리가 주고받는 데이터양을 줄인다면 전체적인 성능 향상이 이뤄지지 않을까 하는 생각을 하게 되었습니다.
Near-memory processing은 실제 메모리 Chip 내부가 아닌 메모리 Package에 별도의 연산 장치를 넣고 필요 연산을 수행하는 개념입니다. 왜 Chip 외부에 연산 Logic을 다시 추가하는 것일까요 ? DRAM은 Commodity의 개념을 갖는 제품입니다. 동일한 DRAM chip이 노트북, 핸드폰, TV 등 다양한 제품에 동일하게 들어갑니다. 따라서 원가 절감이 매우 중요합니다. 각 DRAM 회사들이 EUV 도입 등 공정 미세화에 힘을 쏟는 이유 중 가장 중요한 것은 동일 사이즈의 웨이퍼에 보다 많은 Chip을 생산해서 원가를 절감하려는 목적입니다. 따라서 PIM을 위해 DRAM chip에 연산 Logic을 추가한다면 Chip size가 커지고 원가가 높아지며 수익성 악화로 이어집니다. PIM 기능을 요구하지 않는 응용에서의 PIM 기능 추가는 쓸데 없는 원가 상승이며, PIM을 필요로 한다고 하더라도 각 응용마다 요구하는 연산의 형태가 달라 모든 응용의 요구에 부합하는 연산 기능을 추가하기도 힘든 상황입니다. 따라서 DRAM Chip은 그대로 유지하며 PIM을 필요로 하는 응용에 맞춰 Logic processor를 추가하여 이러한 부담을 최소화하고자 합니다.
그렇다면 DRAM 근처 어디에 PIM 기능을 추가하는 것일까요 ?
- 지금까지 고려된 주요 설치 위치는 DDR DIMM과 HBM의 Buffer die입니다.
- DDR은 채널 효율성 및 집적도를 높이기 위해 하나의 PCB 위에 여러 개의 DDR Chip을 부착한 DIMM 형태로 많이 판매되고 있습니다. 당연히 DIMM PCB에는 여유 공간이 생기는데 여기에 PIM을 추가하는 것입니다. 현재 DIMM에서도 Reliability 강화를 위한 ECC chip, Data 및 명령어 제어를 위한 별도의 Chip이 탑재된 제품이 있기 때문에 Processing을 위한 Chip 추가가 상대적으로 어렵지 않습니다.
Processing-in-chip은 데이터가 저장된 DRAM Cell 근처에 연산을 수행하는 Logic을 포함하는 방식입니다. Processing-near-memory는 기존 Processor가 하던 역할을 DRAM PGG로 가져오는 offloading의 성격이 크기 때문에, 메모리 대역폭 절감이라는 목표는 달성할 수 있었지만 효율성 관점에서는 많은 개선이 없다는 단점이 없습니다. 하지만 Processing-in-chip은 Data의 입/출력과 동시에 필요한 연산이 이뤄질 수 있기 때문에 Processing-near-memory보다 훨씬 효율적이라는 장점이 있습니다. DRAM chip 내에 연산을 위한 Logic을 추가한다는 것이 비용 부담으로 이어지기 때문에 어떠한 필수적인 연산을 수행하도록 할 것인가에 대한 고민은 남을 수 밖에 없습니다. 이러한 이유 때문에 Processing-near-memory에 비해서는 상용화 속도가 더디다는 단점이 있습니다.