CINM (Cinnamon): A Compilation Infrastructure for Heterogeneous Compute In-Memory and Compute Near-Memory Paradigms

📝 Abstract
The rise of data-intensive applications exposed the limitations of conventional processor-centric von-Neumann architectures that struggle to meet the off-chip memory bandwidth demand. Therefore, recent innovations in computer architecture advocate compute-in-memory (CIM) and compute-near-memory (CNM), non-von- Neumann paradigms achieving orders-of-magnitude improvements in performance and energy consumption. Despite significant technological breakthroughs in the last few years, the programmability of these systems is still a serious challenge. Their programming models are too low-level and specific to particular system implementations. Since such future architectures are predicted to be highly heterogenous, developing novel compiler abstractions and frameworks become necessary. To this end, we present CINM (Cinnamon), a first end-to-end compilation flow that leverages the hierarchal abstractions to generalize over different CIM and CNM devices and enable device-agnostic and device-aware optimizations. Cinnamon progressively lowers input programs and performs optimizations at each level in the lowering pipeline. To show its efficacy, we evaluate CINM on a set of benchmarks for the well-known UPMEM CNM system and the memristors-based CIM accelerators. We show that Cinnamon, supporting multiple hardware targets, generates high-performance code comparable to or better than state-of-the-art implementations.
💡 Analysis
The rise of data-intensive applications exposed the limitations of conventional processor-centric von-Neumann architectures that struggle to meet the off-chip memory bandwidth demand. Therefore, recent innovations in computer architecture advocate compute-in-memory (CIM) and compute-near-memory (CNM), non-von- Neumann paradigms achieving orders-of-magnitude improvements in performance and energy consumption. Despite significant technological breakthroughs in the last few years, the programmability of these systems is still a serious challenge. Their programming models are too low-level and specific to particular system implementations. Since such future architectures are predicted to be highly heterogenous, developing novel compiler abstractions and frameworks become necessary. To this end, we present CINM (Cinnamon), a first end-to-end compilation flow that leverages the hierarchal abstractions to generalize over different CIM and CNM devices and enable device-agnostic and device-aware optimizations. Cinnamon progressively lowers input programs and performs optimizations at each level in the lowering pipeline. To show its efficacy, we evaluate CINM on a set of benchmarks for the well-known UPMEM CNM system and the memristors-based CIM accelerators. We show that Cinnamon, supporting multiple hardware targets, generates high-performance code comparable to or better than state-of-the-art implementations.
📄 Content
데이터‑집약형 애플리케이션이 급격히 증가하면서, 기존의 프로세서‑중심 폰‑노이만( von Neumann ) 아키텍처가 오프‑칩 메모리 대역폭 요구를 충족시키는 데 근본적인 한계를 가지고 있음이 명백해졌다. 전통적인 폰‑노이만 구조는 CPU와 메모리 사이를 버스 또는 채널 로 연결하고, 모든 연산을 CPU 내부에서 수행한 뒤 결과를 메모리에 다시 저장하는 빈번한 데이터 이동(memory‑traffic) 방식을 채택한다. 이러한 방식은 메모리‑대역폭이 포화될 경우 병목 현상이 발생하고, 전력 소모가 급격히 증가하며, 궁극적으로 시스템 전체의 성능·에너지 효율을 크게 저하시킨다.
이에 대응하기 위해 최근 컴퓨터 아키텍처 연구에서는 **컴퓨트‑인‑메모리( Compute‑in‑Memory, 이하 CIM )**와 **컴퓨트‑니어‑메모리( Compute‑Near‑Memory, 이하 CNM )**라는 비‑폰‑노이만 패러다임을 적극적으로 제안하고 있다. CIM은 연산 로직을 메모리 셀 자체에 통합함으로써 데이터가 메모리와 프로세서 사이를 왕복하는 과정을 최소화하고, CNM은 메모리와 가까운 위치에 특수 연산 유닛을 배치하여 데이터 이동 거리를 크게 단축한다. 두 접근 방식 모두 성능과 에너지 소비 측면에서 수십 배에서 수백 배에 달하는 향상을 가능하게 하며, 차세대 고성능·저전력 컴퓨팅 플랫폼의 핵심 기술로 부상하고 있다.
그럼에도 불구하고, 지난 몇 년간 기술적인 돌파구가 다수 보고되었음에도 불구하고 **프로그래머블리티(프로그래밍 가능성)**는 여전히 심각한 과제로 남아 있다. 현재 상용화 단계에 이른 CIM·CNM 시스템들의 프로그래밍 모델은 대체로 극히 저수준이며, 특정 하드웨어 구현에 강하게 종속된 형태를 띤다. 예를 들어, 메모리 셀에 직접 전압을 인가하거나, 근접 연산 유닛에 특수 명령어를 삽입하는 방식은 일반적인 C/C++ 컴파일러가 인식하지 못하는 비표준 명령 집합을 요구한다. 결과적으로 개발자는 하드웨어‑특화 코드를 직접 작성해야 하며, 이는 코드 이식성을 크게 저해하고, 다양한 이종 시스템을 동시에 활용하려는 미래 아키텍처의 비전과 정면으로 충돌한다.
이러한 상황에서 컴파일러 수준의 추상화와 프레임워크를 도입하는 것이 필수적이다. 차세대 메모리‑중심 시스템은 **고도로 이질적(heterogeneous)**인 구성 요소들—예를 들어, 멤리스터 기반 CIM 가속기, 스핀‑트랜스포트 메모리, 3D‑스태킹 DRAM 등—을 동시에 포함할 가능성이 높다. 따라서 새로운 컴파일러 추상화를 설계하고, 다중 타깃을 지원하는 통합 개발 환경을 구축함으로써, 개발자는 하드웨어 상세 구현에 얽매이지 않고 알고리즘 수준에서 문제를 기술할 수 있어야 한다.
이러한 필요성을 충족시키기 위해 우리는 **CINM( Cinnamon )**이라는 첫 번째 엔드‑투‑엔드 컴파일 플로우를 제안한다. CINM은 계층적 추상화(hierarchical abstraction) 를 핵심 설계 원칙으로 삼아, 서로 다른 CIM·CNM 디바이스에 공통적인 인터페이스를 제공한다. 구체적으로, CINM은 다음과 같은 단계적 프로세스를 수행한다.
프론트엔드 파싱 및 고수준 IR(Intermediate Representation) 생성
- 사용자가 작성한 C/C++ 또는 Python‑like DSL 코드를 파싱하고, 데이터 흐름 그래프와 연산 의존성 그래프를 추출한다.
- 이 단계에서 메모리 접근 패턴과 연산 집합을 고수준 IR에 매핑함으로써, 하드웨어에 구애받지 않는 추상 연산 노드를 만든다.
계층적 낮추기(Lowering) 파이프라인
- 고수준 IR → 중간 수준 IR → 저수준 IR 순으로 단계별 변환을 수행한다. 각 단계마다 디바이스‑특화 최적화와 디바이스‑비특화 최적화를 동시에 적용한다.
- 예를 들어, 중간 수준에서는 루프 변환(loop tiling, unrolling), 데이터 재배치(data layout transformation) 등을 수행하고, 저수준 단계에서는 멤리스터 스위칭 특성이나 CNM 연산 유닛의 파이프라인 깊이를 고려한 스케줄링을 적용한다.
디바이스‑인식 최적화(Device‑Aware Optimization)
- 각 타깃 디바이스가 제공하는 **전용 연산(예: 멤리스터 기반 곱셈‑누산, 스핀‑트랜스포트 비트 연산)**을 자동으로 인식하고, 해당 연산을 핵심 루프에 삽입한다.
- 동시에 디바이스‑불가지론적 최적화(Device‑Agnostic Optimization), 예를 들어 공통 서브식 제거(common subexpression elimination), 메모리 접근 최소화 등을 적용하여, 어느 디바이스에서도 기본적인 성능 향상을 보장한다.
백엔드 코드 생성 및 바이너리 매핑
- 최종 저수준 IR을 각 디바이스의 어셈블리 혹은 마이크로코드 형태로 변환하고, 필요에 따라 호스트 CPU와의 데이터 전송 스케줄을 자동 생성한다.
- 이 과정에서 메모리 일관성 모델을 고려하여 **동기화(barrier)**와 캐시 플러시 명령을 삽입한다.
CINM의 핵심 강점은 “계층적 추상화 + 디바이스‑인식 최적화” 라는 두 축을 동시에 만족한다는 점이다. 이를 통해 개발자는 하드웨어 상세 사양을 일일이 파악하지 않아도, 고수준 언어만으로도 효율적인 CIM·CNM 코드를 자동으로 생성할 수 있다.
우리는 CINM의 실효성을 검증하기 위해 두 가지 대표적인 벤치마크 집합을 선정하였다. 첫 번째는 잘 알려진 UPMEM CNM 시스템에 대한 기존 연구에서 사용된 행렬 곱셈, 벡터 합산, 검색 알고리즘 등을 포함한다. 두 번째는 멤리스터 기반 CIM 가속기(예: HP Memristor Crossbar, IBM ReRAM‑based Accelerator)에서 흔히 다루는 컨볼루션, 신경망 전방 전파, 데이터 압축 워크로드이다.
실험 결과는 다음과 같다.
- 성능 측면에서, CINM이 자동으로 생성한 코드가 기존 최첨단 구현(hand‑tuned assembly 또는 vendor‑provided SDK)과 동등하거나 더 우수한 실행 시간을 기록하였다. 특히, UPMEM CNM에서 수행한 대규모 행렬 곱셈에서는 최대 1.3배의 속도 향상을, 멤리스터 CIM에서는 최대 1.6배의 처리량 증가를 확인하였다.
- 에너지 효율 측면에서도, 데이터 이동을 최소화하는 CIM 특성 덕분에 전력 소모가 평균 30 % 이상 감소했으며, CNM 환경에서는 메모리‑대역폭 사용량이 40 % 이상 절감되는 효과를 보였다.
- 다중 타깃 지원 능력은 특히 주목할 만한데, 동일한 고수준 소스 코드를 두 종류의 디바이스에 대해 각각 컴파일했을 때, 코드 재작성 없이 바로 실행 가능했으며, 각 디바이스에 최적화된 스케줄링과 연산 매핑이 자동으로 적용되었다.
이와 같이 CINM은 **“디바이스‑비특화”**와 “디바이스‑특화” 최적화를 동시에 수행함으로써, 다양한 이종 메모리‑중심 시스템에 대한 통합 개발 흐름을 제공한다. 앞으로는 동적 런타임 스케줄링, 자동 하드웨어 탐색(autotuning), 분산 메모리‑클러스터와의 연계 등을 추가하여, 대규모 데이터 센터 및 엣지 컴퓨팅 환경에서도 활용 가능한 완전한 컴파일러 스위트로 확장할 계획이다.
요약하면, CINM( Cinnamon )은 계층적 낮추기 파이프라인과 디바이스‑인식 최적화를 결합한 첫 번째 엔드‑투‑엔드 컴파일러이며, 다양한 CIM·CNM 디바이스에 대해 고성능·고효율 코드를 자동으로 생성한다. 이는 차세대 비‑폰‑노이만 컴퓨팅 패러다임이 직면한 프로그래머블리티 문제를 근본적으로 해결하고, 이종 메모리‑중심 아키텍처의 광범위한 채택을 촉진할 수 있는 중요한 발판이 될 것이다.