메모리 접근, 128KB면 충분하다!

by DD
1개월 전
조회수 6

선형 메모리 접근(Linear Memory Access) 패턴의 성능 최적화를 위한 블록 크기 실험 결과, 대부분의 경우 128KB 블록 크기가 충분함을 확인

Ryzen 9 7950X3D 시스템에서 다양한 워크로드(Workload)를 테스트하여 블록 크기별 성능 변화를 측정

SIMD 연산(SIMD Operation)을 사용하는 경우 1MB 블록이 필요하며, `heavy_sin` 연산은 4KB 블록으로도 충분

4KB 페이지 크기(Page Size)를 고려할 때, 데이터의 연속성이 물리적 메모리에서도 보장되는 것은 아님을 언급

블록 크기별 성능 분석

실험 결과에 따르면, 128KB 블록 크기(Block Size)는 대부분의 워크로드에서 충분한 성능을 제공한다. 특히, `scalar_stats` 커널의 경우 128KB 블록에서 최대 성능에 도달하며, 1MB를 초과하는 블록 크기는 추가적인 이점을 거의 제공하지 못한다. 이는 메모리 계층 구조(Memory Hierarchy)의 특성과 블록 간의 점프 비용을 고려한 결과로, 128KB 블록은 캐시 효율성과 접근 패턴의 균형을 맞춘 최적의 크기임을 시사한다.

SIMD 연산(SIMD Operation)과 블록 크기

SIMD 연산을 사용하는 경우, 1MB 블록(Block) 크기가 성능 향상에 기여한다. `simd_sum` 커널은 1MB 블록에서 최대 성능을 보이며, 이는 SIMD 연산의 특성상 더 큰 데이터 덩어리를 처리할 때 효율성이 높아지기 때문이다. 반면, `heavy_sin` 커널과 같이 연산 집약적인 워크로드의 경우, 4KB 블록으로도 충분한 성능을 확보할 수 있다. 이는 연산의 복잡도(Computational Complexity)와 메모리 접근 패턴 간의 상호 작용을 보여준다.

캐시 미스(Cache Miss)와 성능 저하

본 연구에서는 캐시 미스(Cache Miss)를 최소화하기 위해 블록을 무작위로 배치하고, 각 실행 전에 캐시를 초기화하는 방법을 사용했다. 이러한 접근 방식은 메모리 접근 패턴(Memory Access Pattern)의 영향을 정확하게 측정하기 위함이다. 특히, 작은 블록 크기에서는 캐시 적중률이 높아져 성능이 향상될 수 있지만, 전체 데이터셋이 캐시 크기를 초과하는 경우, 블록 크기가 성능에 미치는 영향이 더욱 두드러진다.

페이지 크기(Page Size)와 물리적 메모리

댓글에서는 4KB 페이지 크기를 언급하며, 데이터가 연속적으로 주소 공간에 위치하더라도 물리적 메모리에서는 연속적이지 않을 수 있음을 지적한다. 이는 가상 메모리(Virtual Memory)물리적 메모리(Physical Memory) 간의 매핑 과정에서 발생하는 문제로, 메모리 접근 성능에 영향을 미칠 수 있다. 따라서, 메모리 접근 패턴 최적화 시 페이지 정렬(Page Alignment)과 같은 추가적인 고려 사항이 필요하다.

How Much Linear Memory Access Is Enough? (probably less than 128 kB)

댓글 0

첫 번째 댓글을 남겨보세요!