다중 메모리 컨트롤러 기반 멀티코어 CPU 데이터 접근 최적화
초록
본 논문은 Sun UltraSPARC T2와 같은 다중 메모리 컨트롤러를 갖춘 멀티코어 프로세서에서 규칙적인 메모리 접근 패턴이 발생시키는 캐시 스러싱·주소 충돌 문제를 분석하고, 데이터 레이아웃 재배치와 패딩 기법을 통해 이러한 병목을 해소하는 방법을 제시한다. 저수준 마이크로벤치마크와 실제 응용 프로그램을 대상으로 실험한 결과, 적절한 메모리 뱅크 매핑과 스트라이드 조정이 성능 변동성을 크게 감소시키고 전체 처리량을 2배 이상 향상시킴을 확인하였다.
상세 분석
Sun UltraSPARC T2는 8개의 코어와 8개의 독립 메모리 컨트롤러를 갖추고 있어, 각 코어가 동시에 메모리 요청을 발생시킬 경우 메모리 뱅크 간 경쟁이 급격히 증가한다. 특히, 물리 주소의 하위 비트가 메모리 뱅크 선택에 직접 사용되기 때문에, 배열을 연속적으로 배치하면 동일한 뱅크에 과도한 요청이 집중되는 ‘주소 별칭(aliasing)’ 현상이 발생한다. 이 현상은 L1/L2 캐시 라인 교체와 결합되어 캐시 스러싱을 일으키며, 동일한 코드라도 입력 데이터 크기에 따라 성능이 급격히 변동한다.
논문에서는 먼저 STREAM, pointer‑chasing, 그리고 3‑D stencil와 같은 대표적인 메모리‑집중형 마이크로벤치마크를 실행해, 메모리 컨트롤러 별 요청량을 하드웨어 카운터로 측정하였다. 결과는 64‑byte 라인 크기와 8‑뱅크 매핑 구조가 8‑코어가 동시에 접근할 때 특정 스트라이드(예: 64 B, 128 B)에서 심각한 병목을 만든다는 것을 보여준다.
이를 해결하기 위해 제안된 두 가지 핵심 전략은 ‘데이터 패딩(padding)’과 ‘스트라이드 재조정(stride alignment)’이다. 첫 번째는 배열 요소 사이에 8 byte 혹은 16 byte 정도의 여유 공간을 삽입해, 물리 주소의 하위 비트를 의도적으로 섞음으로써 뱅크 매핑을 고르게 분산시킨다. 두 번째는 루프 인덱스를 8 배수 혹은 16 배수 단위로 증가시켜, 메모리 접근이 연속적인 뱅크를 순차적으로 순환하도록 만든다. 이러한 변환은 컴파일러 수준에서 #pragma simd와 같은 지시문을 활용하거나, 직접 어셈블리 레벨에서 주소 계산을 삽입함으로써 구현 가능하다.
실험 결과, 패딩을 적용한 경우 동일한 데이터 세트에 대해 평균 메모리 대역폭이 1.8 ~ 2.2배 상승했으며, 특히 3‑D stencil와 같은 고차원 배열 연산에서는 전체 실행 시간이 30 % 이상 단축되었다. 또한, 성능 변동성(표준편차)은 70 % 이상 감소해, 예측 가능한 실행 시간이 확보되었다. 이러한 개선 효과는 메모리 컨트롤러 수가 늘어날수록, 그리고 코어 수가 증가할수록 더욱 두드러진다.
논문은 또한 기존의 NUMA 최적화 기법이 다중 메모리 컨트롤러 구조에서는 충분히 적용되지 않으며, 물리 주소 매핑을 직접 고려한 데이터 레이아웃 설계가 필요함을 강조한다. 향후 연구 방향으로는 자동화된 데이터 패딩 도구 개발과, 런타임에 메모리 뱅크 사용률을 모니터링하여 동적으로 스트라이드와 패딩을 조정하는 적응형 스케줄러를 제시한다.
댓글 및 학술 토론
Loading comments...
의견 남기기