WIPIVERSE

메모리 인터리빙

메모리 인터리빙(Memory Interleaving)은 컴퓨터 시스템에서 주기억장치의 접근 속도를 향상시키기 위해 메모리를 여러 개의 뱅크(bank) 또는 모듈(module)로 분할하고, 연속적인 메모리 주소를 각 뱅크에 고르게 분산 배치하여 병렬 접근을 가능하게 하는 설계 기법이다. 이는 동적 램(DRAM)이나 코어 메모리의 상대적으로 느린 속도를 보완하기 위해 사용된다.

개요

인터리빙 메모리에서는 메모리 주소가 각 메모리 뱅크에 번갈아 할당된다. 예를 들어, 두 개의 메모리 뱅크가 있는 인터리빙 시스템에서 논리 주소 32가 뱅크 0에 속한다면, 논리 주소 33은 뱅크 1에, 논리 주소 34는 다시 뱅크 0에 속하는 방식으로 이어진다. 일반적으로 n개의 뱅크가 있고 메모리 위치 i가 뱅크 (i mod n)에 속할 때 이를 n-way 인터리빙이라고 한다.

이러한 배치를 통해 연속적인 메모리 읽기 및 쓰기 작업이 동일한 뱅크를 반복적으로 사용하는 대신 각 메모리 뱅크를 차례로 사용하게 된다. 그 결과 각 뱅크는 읽기와 쓰기 사이에 최소 대기 시간을 가지게 되어 메모리 처리량이 상당히 높아진다. 이는 멀티미디어 처리나 프로그램 실행에서 흔히 발생하는 연속적인 읽기 작업과, 저장 또는 통신 버퍼를 채울 때 자주 사용되는 연속적인 쓰기 작업에서 특히 효과적이다.

인터리빙의 유형

메모리 인터리빙은 주소의 어느 비트를 사용하여 뱅크를 결정하는지에 따라 크게 두 가지 유형으로 구분된다.

  • 저위 인터리빙(Low-Order Interleaving): 메모리 주소의 하위 비트를 사용하여 뱅크를 결정하는 방식이다. 연속적인 주소가 서로 다른 뱅크에 배치되므로 순차 접근에 최적화되어 있다.
  • 고위 인터리빙(High-Order Interleaving): 메모리 주소의 상위 비트를 사용하여 뱅크를 결정하는 방식이다. 각 뱅크에 연속적인 주소 블록이 할당되므로 독립적인 접근에 유리하다.

DRAM에서의 인터리빙

주기억장치는 일반적으로 여러 DRAM 칩의 집합으로 구성되며, 여러 칩을 함께 묶어 메모리 뱅크를 형성할 수 있다. 인터리빙을 지원하는 메모리 컨트롤러를 사용하여 이러한 뱅크들을 인터리빙되도록 배치할 수 있다.

DRAM의 데이터는 페이지 단위로 저장되며, 각 DRAM 뱅크에는 뱅크 내의 페이지에 접근하는 캐시 역할을 하는 행 버퍼(row buffer)가 있다. 동일한 뱅크 내의 다른 페이지에 대한 접근이 연속적으로 발생하면 행 버퍼 충돌(row-buffer conflict)이 발생하여 상당한 지연이 초래된다. 반면, 서로 다른 뱅크에 대한 메모리 접근은 높은 처리량으로 병렬로 진행될 수 있다.

연구에 따르면 기존의 메모리 인터리빙 방식은 캐시 수준의 주소 매핑 충돌을 메모리 주소 공간으로 전파하여 행 버퍼 미스를 유발할 수 있다. 이를 해결하기 위해 순열(permutation) 기반 인터리빙 방식이 제안되었으며, 이는 사소한 마이크로아키텍처 비용으로 문제를 해결한다. 이 방식은 AMD, Intel, 엔비디아 등 많은 상업용 마이크로프로세서에서 임베디드 시스템, 노트북, 데스크톱 및 엔터프라이즈 서버에 사용된다.

다중 채널 메모리와의 차이

메모리 인터리빙은 다중 채널 메모리 구조와는 구별된다. 주요 차이점은 인터리빙 메모리가 주기억장치와 메모리 컨트롤러 사이에 더 많은 채널을 추가하지 않는다는 점이다. 다만 채널 간의 인터리빙도 가능하며, 예를 들어 프리스케일(Freescale) i.MX 6 프로세서에서는 두 채널 간의 인터리빙이 허용된다.

역사

인터리빙 메모리에 대한 초기 연구는 1960년대와 1970년대에 IBM에서 IBM 7030 스트레치(Stretch) 컴퓨터와 관련하여 수행되었다. 이후 현대적인 구현을 위해 설계, 유연성 및 성능을 향상시키기 위한 개발이 수십 년에 걸쳐 지속되었다.

참고 사항

메모리가 주소 지정되는 방식은 이미 캐시된 메모리 위치의 접근 시간에는 영향을 미치지 않으며, DRAM에서 검색해야 하는 메모리 위치에만 영향을 미친다. 또한 인터리빙은 완전한 무작위 접근 시나리오에서는 평면(flat) 레이아웃과 동일한 성능을 제공하지만, 실제 환경에서는 참조 국부성(locality of reference)으로 인해 인터리빙 레이아웃이 훨씬 더 나은 성능을 제공한다.

둘러보기

더 찾아볼 만한 주제

    전체 문서 보기