20190501

High-performance Memory Hierarchy for Throughput Processors
* 현대 시스템에서 GPU는 흔히 쓰인다. 게임 할 때에도 렌더링에 쓰일 뿐 아니라, general-purpose에도 쓰인다. GPU는 병렬성이 가장 큰 장점. 여러 개의 warp를 번갈아가면서 실행함으로써 GPU core의 stall을 회피한다. Warp는 thread의 집합. GPU는 CPU 어플리케이션에 비해 4-20배 memory intensive하다 (memory load / store 명령어 수).
* GPU에서의 memory bottleneck. Cache와 main memory 수준에서의 memory divergence. (1) Warp에서 일부 thread는 cache hit, 나머지는 miss한다고 해보자. 이 경우에는 결국 miss난 thread를 기다려야 함. (2) Main memory 수준에서는 memory request buffer 수준에서 inteference가 발생할 수 있음. (3) GPU의 memory footprint가 큰 것에 비해 TLB reach가 충분하지 못함. (4) CPU-GPU 데이터 전송에 긴 latency가 문제.

1. [PACT’15] Exploiting Inter-Warp Heterogeneity to Improve GPGPU Performance
(1) GPU 프로그램을 잘못 짜면 mostly-hit warp 또는 mostly-miss warp가 발생한다. mostly-hit, miss warp 모두 캐시에서 이득을 볼 수 없다. 따라서 목적은 mostly-hit warp을 all-hit warp로, mostly-miss warp를 all-miss warp로 변환하는 것. (2) cache hit ratio 변화를 보고 warp를 구분한다. (3) shared L2 cache는 bank로 나뉘어져있는데, request가 고르게 가지 못한다. 이로 인해 45% 의 request가 20cycle 정도 stall 한다. 이러한 경우에는 오히려 cache를 bypass하자. 이를 통해 queuing latency를 줄일 수 있을 뿐 아니라, contention을 줄일 수 있다. Mostly miss, all miss 인 경우에는 cache를 bypassing한다. Mostly-miss, all-miss는 LRU로 그 외는 MRU로 cache insertion한다 (warp-type-aware cache insertion policy). 20% 정도의 성능 개선. Starvation이 발생할 수 있는지에 대해 논의하였음.

2. Staged memory scheduling
현대 칩에서는 GPU가 CPU에 통합되고 있다. 이같은 상황에서는 main memory에서 간섭이 발생하고, 성능 문제가 될 수 있음. 여러 개의 요청이 메모리 컨트롤러에 들어올 것이고, 이를 스케쥴링하는 것이 메모리 컨트롤러의 역할. 단순히 버퍼를 늘리는 것은 해법이 되지 못함.
메모리 컨트롤러의 역할의 역할? (1) row buffer hit 최대화. (2) 어플리케이션 사이의 경쟁 해소. Throughput 및 fairness 개선. (3) timing guarantee. 첫 번째 요구를 만족하고자 request batch를 형성하고, 두 번째 요구를 만족하고자 batch 단위로 스케쥴링한다.

3. [MICRO’17] Mosaic: A GPU Memory Manager with Application-Transparent Support for Multiple Page Sizes
* GPU 어플리케이션을 수정하지 않고 TLB reach, page walk latency 해결.
* Large page를 사용하면 TLB reach를 늘릴 수 있지만, demand paging latency가 커진다. 하지만 한 시스템에서 여러 개의 페이지 크기를 지원하는 것은 쉽지 않다. 메모리가 공유되는 상황에서 huge page를 형성할 기회가 부족할 수 있다. Large page frame 이내에서 각 워크로드가 메모리를 공유하지 않으면 문제 해결 가능. 55%의 성능 향상.

4. [ASPLOS’18] MASK: Redesigning the GPU Memory Hierarchy to Support Multi-Application Concurrency
* GPU에서 translation이 성능 저하를 일으킨다. 그 이유가 무엇인가? (1) Shared TLB에서의 경쟁이 발생하기 때문이다. (2) L2 cache에서의 thrashing. L2 cache는 page translation data를 caching하는데, parallel translation과 demand fetching이 이를 evict한다.
* TLB에서의 경쟁을 줄이기 위해 shared TLB를 차지할 수 있는 warp의 수를 제어하는데, 이를 위해 token을 사용한다. TLB miss rate이 높다면 token을 줄이면 된다.
* Page table level에 따라서 L2 cache hit rate 이 달라진다. L1-L2 page table까지는 hit rate이 높지만, 그 이상의 level에서는 hit rate이 낮다. 따라서 오히려 L2-L3 page table에서는 bypass하는 것이 낫다. 이를 통해 cache 이득을 높일 수 있고, L2 queuing latency를 줄일 수 있다.
* Address translation requests와 data demand requests가 동일하게 다뤄지는데, 이것은 문제임. Address translation requests를 prioritize하여 translation latency를 줄이자.
* 질문: huge page를 사용하면 address translation request를 줄일 수 있는데, 실험 가정이 무엇인가? base page를 사용함.

* 인상 깊었던 Q&A. 보통 GPU는 메모리 병렬성을 활용하기 때문에, 메모리 접근 latency가 중요하지 않음이 상식적으로 받아들여진다. 하지만 그렇지 않다는 사실을 확인하고 논문을 쓴 뒤에도 상당수가 이를 쉽게 받아들이지 않거나 믿지 않았다고 한다. 컴퓨터 시스템 연구에서도 기존에 흔히 받아들여지던 상식이 무너지는 경우도 있음을 알게 되어 흥미로웠다. 한편으로는 기존 상식에 갇혀서 생각하지 말고, 이에 대해 지속적으로 질문을 던지고 검증해야 하겠다는 생각이 들었다.

Advertisements
Posted in Memo

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Categories
Recent Posts
누적 방문자 수
  • 160,481 hits
%d bloggers like this: