메모리 인터리빙으로 병렬 접근 성능 높이기
메모리 인터리빙의 주소 분산 방식과 C-Access·S-Access, 상위·하위·혼합 인터리빙의 성능 특성을 정리한다.
2026-08-14 · 최초 발행 2025-12-30
주소 분산이 메모리 병목을 완화하는 방식
메모리 인터리빙(Memory Interleaving)은 메모리를 복수의 독립 모듈로 나누고, 연속 주소를 각 모듈에 배치해 동시에 접근할 수 있도록 만드는 기법이다. 한 모듈이 메모리 사이클을 수행하는 동안 다른 모듈을 활용할 수 있으므로, 접근 대기 시간을 줄이고 전체 처리 속도를 높일 수 있다.
이 구조의 핵심은 다음 세 가지다.
- 여러 독립 메모리 모듈을 병렬로 구성한다.
- 각 모듈에서 읽기와 쓰기를 동시에 수행할 수 있다.
- 연속된 주소를 서로 다른 모듈로 분산한다.
병렬 접근은 CPU와 메모리 사이의 속도 차이에서 생기는 병목을 줄이고, 단일 모듈에 집중되던 접근을 분산한다. N개 모듈을 사용하면 이론적으로 단일 모듈 대비 N배의 대역폭을 확보할 수 있다.
모듈을 쉬지 않게 만드는 접근 패턴
인터리빙은 모듈 활용도를 높이고 유휴 상태를 줄인다. 저비용 모듈을 여러 개 사용해 고가의 고속 모듈을 대체할 수 있으며, 성능 대비 비용 측면에서도 이점이 있다.
순차 주소를 처리할 때는 파이프라인처럼 동작한다. 한 모듈에 접근하는 동안 다음 모듈은 다음 요청을 준비하므로 데이터 스트림이 끊기지 않는다. 각 모듈의 메모리 사이클이 독립적이라는 점이 이 구조를 가능하게 한다.
주소 도착 방식에 따른 C-Access와 S-Access
C-Access는 순차 주소 읽기에 맞춘다
C-Access(Consecutive Access)는 주소가 순차적으로 도착하고 데이터도 순서대로 전송되는 방식이다. 연속된 메모리를 읽는 상황에 적합하다.
동작은 주소 0이 모듈 0에, 주소 1이 모듈 1에, 주소 2가 모듈 2에 도착한 뒤 순차적으로 데이터를 반환하는 형태다. 배열 데이터 읽기, 스트리밍 데이터 처리, 순차 파일 접근에 활용할 수 있다.
S-Access는 여러 주소를 함께 전달한다
S-Access(Simultaneous Access)는 여러 주소가 동시에 도착하는 방식이다. 주소 0, 1, 2, 3이 동시에 들어오면 모듈 0, 1, 2, 3도 동시에 접근하고, 데이터는 순차적으로 반환한다.
병렬 메모리 읽기에 적합하며 벡터 연산, 행렬 계산, 병렬 알고리즘에 사용할 수 있다. 여러 모듈을 동시에 활용해 대역폭을 극대화하는 접근 방식이다.
주소 비트 배치가 인터리빙 특성을 결정한다
상위 비트로 모듈을 고르는 상위 인터리빙
상위 인터리빙(High-Order Interleaving)은 기억장치 주소를 모듈에 순차적으로 지정한다. 상위 비트는 모듈 선택 신호가 되고, 하위 비트는 선택된 모듈 내부의 기억장소를 나타낸다.
주소 0-3은 모듈 0, 주소 4-7은 모듈 1, 주소 8-11은 모듈 2, 주소 12-15는 모듈 3에 배치한다.
연속 주소가 같은 모듈에 집중되므로 순차 접근에서의 병렬성은 낮다. 대신 블록 단위 접근에 유리하다.
하위 비트로 모듈을 고르는 하위 인터리빙
하위 인터리빙(Low-Order Interleaving)은 주소를 모듈 단위로 교차 배치한다. 상위 비트는 모듈 내부 기억장소를, 하위 비트는 모듈 선택 신호를 담당한다.
주소 0, 4, 8, 12는 모듈 0에, 주소 1, 5, 9, 13은 모듈 1에, 주소 2, 6, 10, 14는 모듈 2에, 주소 3, 7, 11, 15는 모듈 3에 배치한다.
연속 주소가 서로 다른 모듈로 나뉘기 때문에 순차 접근에서 병렬성을 극대화한다. 연속 메모리 읽기에서 모든 모듈을 활용할 수 있고, 파이프라인 효과와 대역폭 최대화를 기대할 수 있다. 일반적으로 가장 많이 사용되는 방식이다.
뱅크와 모듈을 함께 나누는 혼합 인터리빙
혼합 인터리빙(Mixed Interleaving)은 기억장치 모듈을 뱅크(Bank)로 그룹화한다. 뱅크 선택에는 상위 인터리빙을, 뱅크 내부 모듈 선택에는 하위 인터리빙을 적용한다.
주소는 상위 비트로 뱅크를 고르고, 하위 비트로 모듈을 선택하며, 남은 비트로 모듈 안의 주소를 지정한다.
이 방식은 구성을 유연하게 가져갈 수 있어 대규모 시스템에 적합하다. 서버급 시스템, 멀티소켓 NUMA 구조, 대용량 메모리 시스템에서 뱅크 간과 뱅크 내부의 병렬 처리를 함께 활용할 수 있다.
대역폭과 지연 시간에서 나타나는 차이
N개 모듈의 이론적 대역폭은 단일 모듈의 N배다. 따라서 4개 모듈은 4배, 8개 모듈은 8배 대역폭을 제공한다. 실제 성능에서는 메모리 컨트롤러 병목과 버스 대역폭 제한, 오버헤드를 고려해야 하며, 80-90% 수준이 반영된다.
파이프라인 구조에서는 한 모듈이 접근을 처리하는 동안 다른 모듈이 다음 요청을 준비한다. 연속 접근의 대기 시간을 최소화하며 평균 지연 시간은 1/N이 된다.
| 모듈 수 | 대역폭 향상 | 지연 감소 | 적용 분야 |
|---|---|---|---|
| 2 | 2배 | 50% | 임베디드 시스템 |
| 4 | 4배 | 75% | 데스크톱 |
| 8 | 8배 | 87.5% | 서버 |
| 16 | 16배 | 93.75% | HPC |
DDR 메모리의 Dual/Quad Channel은 채널별 독립 모듈과 하위 인터리빙을 활용한다. 멀티코어 프로세서에서는 코어별 메모리 채널과 NUMA 구조에 혼합 인터리빙을 적용할 수 있다. 그래픽 카드는 GDDR 메모리 인터리빙과 512비트 메모리 버스를 사용해 초고속 병렬 접근을 지원한다.