본문 바로가기
논문

GPU Register File의 Bank Conflict 분석

by Lizardee 2023. 8. 24.
Abstract

A modern GPU runs tens of thousands threads simultaneously to achieve high throughput and hiding latency. 
In order to effectively execute the threads, a large amount of a register file, typically organized into multiple banks, is essential.
However, if bank conflict occurs, the register file throughput is reduced, thus its results in performance loss.
 
In this paper, as the number of banks increased, we measured the number of bank conflicts and observed the ovverall performance.
 


1. 서론

▶ GPGPU
GPU를 이용한 범용 연산 기술(GPGPU)은 고성능 컴퓨팅(high performance computing)을 위해 사용되는 기술 중 하나이다.
GPU는 연산 처리량(throughput)을 높이고, 메모리 접근 지연시간(memory access latency)과 같은 pipeline 내의 지연을 숨기기 위해 매우 많은 개수의 스레드(thread)를 동시에 실행한다.
여러 스레드를 동시에 실행하기 위해서는, 스레드 간 문맥 전환(context switch)을 얼마나 효율적으로 하는지가 중요하다.

  • 이때 GPU는 모든 스레드 문맥을 레지스터 파일(register file)에 저장하고 하드웨어로 문맥을 전환하기 때문에, 필요한 비용(overhead)이 적어, 효율적인 문맥 전환이 가능하다.
  • 또한, 문맥을 저장하는 공간이 클수록 많은 양의 스레드를 저장할 수 있기 때문에, 레지스터 파일의 구조 및 크기가 중요해지고 있다. 따라서 GPU 세대가 진화할수록 레지스터 파일 용량이 점점 늘어나, 스레드 단계의 병렬 처리(thread-level paralleism, TLP) 수준이 높아지는 추세이다.
  • Problem 1: 레지스터 파일 크기의 모순점 - 스레드 병렬 처리 향상 vs. 접근 시간 증가
    하지만 레지스터 파일 크기가 클수록 접근 시간이 길어지기 때문에, SM의 레지스터 파일 크기를 늘리는 것에 한계점이 존재한다.
    **SM: Composed with CTA
    **CTA: Multiple threads organized by thread block dimensions
  • Solution 1: 멀티 뱅크 구조
    멀티 뱅크(multi-bank) 구조를 통해 각 스레드의 오퍼랜드(operand) 읽기/쓰기 요청을 동시에 처리하여 TLP를 높이는 방법이 사용되고 있다.
  • Problem 2: 뱅크 충돌
    한 뱅크에 오퍼랜드 읽기/쓰기 요청이 동시에 발생하여 뱅크 충돌(bank conflict)이 일어나는 문제가 생길 수 있다. 이 때문에 오퍼랜드 읽기/쓰기 요청이 직렬화(serialized)되면서 스레드 처리량(throughput)이 떨어진다.
  • Solution 2: 뱅크의 개수를 늘린다
    최대한 뱅크 충돌이 발생하지 않도록 뱅크를 여러 개 두어야 한다.
  • Problem 3: 뱅크 개수의 모순점 - 뱅크 충돌 감소 vs. GPU 면적/전력 측면의 부담, 네트워크 지연
    뱅크의 개수를 무한정 늘릴 수는 없다. 레지스터 파일의 뱅크를 늘리려면 센서 증폭기(sensor ampliers), 비트 라인 드라이버(bit-line driver) 그리고 와이어(wire) 등 추가 회로가 더 필요하기 때문에, GPU의 면적(area)과 전력(power) 측면에서 큰 부담이 된다.
    특히 뱅크 개수가 늘어날수록 오퍼랜드 콜렉터(operand collector)와 뱅크 사이의 연결 네트워크(crossbar network)가 복잡해지기 때문에 여기서 발생하는 지연이 뱅크 개수를 제한한다.

 
본 논문에서는 뱅크와 오퍼랜드 콜렉터 사이의 네트워크 지연 문제를 해결할 수 있다고 가정했을 때, 뱅크 개수가 늘어날수록 줄어드는 뱅크 충돌 횟수를 측정해보았다. 
그리고 뱅크 개수에 따른 IPC 변화를 관찰하여, GPU 레지스터 파일의 뱅크 개수를 늘리는 것이 전체 성능에 얼마나 영향을 미치는지 확인했다.
 
 

2. 본론

▷ 뱅크 개수가 늘어날수록, 뱅크 충돌 횟수가 줄어드는 것을 확인했다.
 
▷ 뱅크 개수를 늘려 뱅크 충돌 횟수가 줄어들수록 전체 시스템 성능은 향상되지만, 뱅크 개수가 4배가 되었을 때 향상되는 성능 폭이 상당히 작은 것으로 보아, 뱅크 충돌 현상이 전체 시스템에 미치는 영향은 작아짐을 알 수 있다. 즉, 뱅크 개수가 늘어남에 따라 뱅크 충돌 횟수는 줄어들지만, 일정 수준 이상의 뱅크 충돌 횟수가 해결되면, 뱅크 충돌은 더 이상 전체 시스템 성능을 크게 해칠 만큼 병렬성을 떨어뜨리지 않는다.
 
 

3. 결론 및 향후 연구 방향

본 논문은 GPU 레지스터 파일에서 발생하는 뱅크 충돌 현상을 이해하고, 뱅크 개수가 늘어남에 따라 충돌 현상이 점점 완화되는 것을 확인했다. 뱅크 충돌 현상이 심할수록 스레드 처리량이 줄어들어 전체 시스템에 성능 저하를 일으킬 수 있지만, 뱅크를 여러 개 두어 뱅크 충돌 현상을 일정 수준 막을 수 있다.
이때 뱅크 충돌 현상에 의한 스레드 처리량의 감소가 전체 시스템에 미치는 영향이 미비해지는 순간이 존재한다. 따라서 뱅크 개수를 늘리는 것이 오히려 더 큰 비용을 발생시킬 수 있다.
 
 
 
 
https://www.dbpia.co.kr/pdf/pdfView.do?nodeId=NODE07516056&googleIPSandBox=false&mark=0&ipRange=false&accessgl=Y&language=ko_KR&hasTopBanner=true 

DBpia

논문, 학술저널 검색 플랫폼 서비스

www.dbpia.co.kr