Samsung LPDDR5X-PIM: Processing-in-Memory Architecture and Implementation
Samsung의 LPDDR5X-PIM 구현은 연산 작업을 메모리 내부에서 직접 수행할 수 있게 하여 외부 버스 병목 현상을 우회하고 614 GB/s의 내부 대역폭을 달성합니다. 이 아키텍처는 DRAM 뱅크 내부에 곱셈-누산(MAC) 유닛을 배치함으로써 AI 및 머신러닝 워크로드를 가속화하도록 설계되었으며, 칩이 표준 메모리 컨트롤러와의 호환성을 유지하면서 제한된 SIMD 프로세서로 기능할 수 있게 합니다.
Hardware Architecture and Throughput
Samsung의 LPDDR5X-PIM은 LPDDR5X-9600 칩의 16개 뱅크 각각에 PIM 블록을 통합합니다. DRAM 뱅크에 내부적으로 접근함으로써, 이러한 블록들은 일반적으로 76.8 GB/s로 제한되는 칩의 외부 인터페이스 한계를 극복합니다.
MAC Unit Specifications
각 PIM 블록은 MAC 트리, 레지스터 파일, 제어 로직을 포함합니다:
- Instruction Register File: 1024-bit, 최대 64개의 16-bit 명령어를 보유합니다.
- Source Register File: 활성화 벡터를 위한 4 kbit.
- Scale Register: 연산 전 모델 가중치를 스케일링하기 위한 2 kbit.
- Data Flow: 모델 가중치는 연결된 DRAM 블록에 저장되는 반면, 활성화 벡터는 소스 레지스터를 통해 공급됩니다.
Compute Performance
MAC 어레이는 INT8 및 FP8을 포함한 저정밀도 형식을 지원합니다. 단일 PIM 블록은 데이터 클록당 4개의 INT8 또는 FP8 MAC 연산을 유지할 수 있습니다(사이클당 8개). 4-bit 입력 가중치를 사용하면 처리량이 두 배로 늘어나 패키지 전체의 연산 처리량을 2.4 TOPS로 만듭니다. 일반적인 NPU(예: Intel의 Meteor Lake에 탑재된 것)의 성능에 맞추려면 약 8개의 LPDDR5X-PIM 칩이 필요하며, 총 128 GB의 시스템 메모리가 필요합니다.
Protocol Integration and Control
LPDDR5X-PIM은 특정 행 주소를 Memory-Mapped I/O (MMIO) 트리거로 재사용하여 동작 모드 간을 전환함으로써 표준 LPDDR5X 프로토콜과 호환성을 유지합니다.
Mode Switching
- Single-Bank Mode: 일반적인 DRAM 접근을 위한 표준 동작 모드.
- Multi-Bank Mode: 내부 대역폭을 활용하기 위해 16개 뱅크 전체에 명령을 동시에 적용합니다.
- PIM Registers Activated Mode: 특수 뱅크별 행에 의해 트리거되며, 이 모드는 읽기 및 쓰기 명령을 PIM 레지스터로 리다이렉션하여 DRAM 뱅크 내용 대신 PIM 레지스터에 접근합니다.
SIMD Execution Flow
멀티 뱅크 모드에서 칩은 SIMD 프로세서로 작동합니다. 단일 쓰기 명령이 16개 뱅크 전체에 브로드캐스트되어, 동일한 연산, 스케일 인자, 소스 오퍼랜드가 칩 전체에 적용되도록 보장합니다. 메모리 컨트롤러의 재정렬 문제를 방지하기 위해 Samsung은 **Address Align Mode (AAM)**를 활용하며, 이는 명령어가 접근 중인 컬럼 주소로부터 소스 레지스터 인덱스를 추론할 수 있게 합니다.
Critical Software and System Challenges
하드웨어 효율성에도 불구하고, PIM을 현대적인 컴퓨팅 환경에 통합하는 것은 특히 CPU가 메모리를 처리하는 방식과 관련하여 심각한 아키텍처적 충돌을을 일으킵니다.
Cache Coherency and Speculation
PIM 연산은 메모리 내용과 레지스터 상태를 내부적으로 수정하므로, CPU 캐시 계층 구조의 근본적인 가정을 깨뜨립니다:
- Uncacheable Memory: Samsung은 PIM 메모리를 uncacheable로 매핑할 것을 권장합니다. 이는 CPU 캐시의 이점을 제거하여 지연 시간을 크게 증가시키고 코어를 스로틀링(stalling)시킵니다.
- Speculative Execution: 현대적인 CPU는 프리페처와 분기 예측을 사용하여 데이터를 투기적으로 로드합니다. PIM 시스템에서 투기적 읽기는 수동적인 작업이 아닙니다. 이는 PIM Vector Register File (VRF)을 수정하는 연산을 트리거하여 실제 프로그램의 상태를를 Corrupting(손상)시킬 가능성이 있습니다.
Multitasking and OS Integration
PIM 모드 전환은 메모리 채널의 글로벌 상태 변경입니다. 이는 멀티태스킹 운영체제에 상당한 장애물을 생성합니다:
- Thread Isolation: 한 스레드가 PIM을 사용하는 동안 다른 스레드가 일반적인 메모리 접근을 수행하면, 비-PIM 스레드는 의도치 않게 PIM 연산을 트리거하거나 VRF 데이터를 잘못된 주소에 쓸 수 있습니다.
- Context Switching: PIM 스레드를 선점(preempting)하려면 OS가 채널을 PIM 모드에서 전환하고 모든 뱅크에 걸쳐 명령어, 소스, 스케일, 벡터 레지스터 파일의 상태를 수동적으로 저장해야 합니다.
- Memory Interleaving: PIM 영역을 격리하기 위해 시스템은 채널 간의 주소 인터리빙을 비조직화(disabling)해야 할 수도 있으며, 이는 비-PIM 애플리케이션을 위한 전체 메모리 대역폭을 감소시킵니다.
Technical Perspectives and Alternatives
업계계의 논의는 PIM이 "Von Neumann bottleneck"을 해결하지만, 데이터 배치에 엄한격한 제약을약을니다. 커뮤니티 기여자들이 언급한 바와 같이:
"The tradeoff with putting the compute in the memory is that you have to know exactly where the dependent information will be at all times. Most problems do not fit this pattern very well."
이러한 문제를 해결하기 위해 저자는 시스템적인 하드웨어 변경이 필요하다고 제안합니다. 예를 들어, DRAM 인터페이스를 전용 연산 명령어로 확장하거나, 캐시 일관성(cache coherency)을 위해 CPU 코어와 동등한 역할을 하는 메모리 컨트롤러를 구현하거나(Read-For-Ownership 요청을 사용), 소프트웨어 계층에서 PIM 하드웨어를 추상화하기 위해 투명한 CPU 명령어를(예: 가설적인 rep macb) 도입하는 방식입니다.
Sources
관련
- Dispatch
- Dispatch
- Dispatch
- Dispatch
- Dispatch