GPU 칩 디자인 방법
Chapter 5 Gpu Memory System Design

한국어 번역:

5장: GPU 메모리 시스템 설계

그래픽 처리 장치(GPU)는 다양한 응용 프로그램에서 높은 성능과 에너지 효율을 달성할 수 있는 고도로 병렬화된 프로그래밍 가능한 가속기로 발전해왔습니다. 메모리 시스템은 수많은 동시 스레드에게 빠른 데이터 접근을 제공해야 하므로 현대 GPU 아키텍처의 핵심 구성 요소입니다. 이 장에서는 GPU 메모리 시스템 설계의 주요 요소들을 탐구할 것입니다. 여기에는 GPU에서 사용되는 DRAM 기술, 메모리 컨트롤러 및 중재, 공유 메모리와 캐시, 그리고 효율적인 메모리 활용을 위한 기술들이 포함됩니다.

GPU용 DRAM 기술

동적 랜덤 액세스 메모리(DRAM)는 현대 컴퓨팅 시스템, 즉 GPU를 포함한 시스템의 주 메모리 구현에 사용되는 주요 기술입니다. DRAM은 다른 메모리 기술에 비해 높은 밀도와 상대적으로 낮은 비용을 제공합니다. 그러나 DRAM은 캐시와 레지스터 파일과 같은 온칩 메모리에 비해 액세스 지연 시간이 더 길고 대역폭이 낮습니다.

GPU는 일반적으로 낮은 지연 시간보다는 높은 대역폭을 위해 최적화된 특수 DRAM 기술을 사용합니다. GPU에서 사용되는 일반적인 DRAM 기술에는 다음이 포함됩니다:

  1. GDDR(Graphics Double Data Rate): GDDR은 그래픽 카드와 게임 콘솔을 위해 설계된 특수 DRAM 기술입니다. 더 넓은 버스와 높은 클록 속도를 사용하여 표준 DDR DRAM보다 더 높은 대역폭을 제공합니다. GDDR5와 GDDR6가 가장 최근 버전이며, 각각 최대 512GB/s와 768GB/s의 대역폭을 제공합니다.

  2. HBM(High Bandwidth Memory): HBM은 매우 높은 대역폭과 낮은 전력 소비를 제공하는 고성능 3D 적층 DRAM 기술입니다. HBM은 여러 DRAM 칩을 서로 쌓아 올리고 실리콘 관통 vias(TSVs)를 사용하여 연결함으로써 기존 DRAM보다 훨씬 더 높은 데이터 전송률을 제공합니다. HBM2는 최대 1TB/s의 대역폭을 제공할 수 있습니다.

그림 5.1은 전통적인 GDDR 메모리와 3D 적층 HBM의 차이를 보여줍니다.

   GDDR 메모리
```HBM 메모리
  ____________                   ______________________  
 |            |                 |  ___________________  |
 |   DRAM     |                 | |                   | |
 |   Chips    |                 | |      DRAM Dies    | |
 |            |                 | |___________________| |
 |            |                 |           .          |
 |            |                 |           .          | 
 |            |                 |           .          |
 |____________|                 |  ___________________  |
      |                         | |                   | |
     PCB                        | |  Logic Die (GPU)  | |
                                | |___________________| |
                                |______________________|

그림 5.1: GDDR과 HBM 메모리 아키텍처 비교.

DRAM 기술 선택은 GPU의 전력 예산, 폼팩터, 타깃 애플리케이션과 같은 특정 요구 사항에 따라 달라집니다. 게이밍 및 전문 그래픽용 고성능 GPU는 대역폭이 높은 GDDR6을 사용하는 반면, 전력 효율이 주요 관심사인 데이터 센터와 HPC GPU에서는 HBM2가 더 일반적입니다.

메모리 컨트롤러와 중재

메모리 컨트롤러는 GPU와 오프칩 DRAM 간의 데이터 흐름을 관리하는 역할을 합니다. GPU 코어의 메모리 요청을 처리하고, DRAM 명령을 스케줄링하며, 대역폭 활용도를 최대화하고 지연 시간을 최소화하기 위해 메모리 액세스 패턴을 최적화합니다.

GPU 메모리 컨트롤러는 일반적으로 고대역폭과 DRAM에 대한 병렬 액세스를 제공하는 멀티채널 설계를 사용합니다. 각 메모리 채널은 하나 이상의 DRAM 칩에 연결되며 자체 명령 및 데이터 버스를 가집니다. 메모리 컨트롤러는 병렬 처리를 극대화하고 채널 충돌을 방지하기 위해 메모리 요청을 사용 가능한 채널에 분산시킵니다.

그림 5.2는 4개의 채널이 있는 GPU 메모리 컨트롤러의 간단한 다이어그램을 보여줍니다.

          GPU 코어
              |
        ______|______
       |             |
       |  메메모리 |
       |  컨트롤러 |
       |_____________|
         |    |    |    |
        Ch0  Ch1  Ch2  Ch3
         |    |    |    |
        DRAM DRAM DRAM DRAM

그림 5.2: 4개의 채널을 가진 GPU 메모리 컨트롤러.

메모리 중재는 다수의 미처리 요청이 있을 때 어떤 메모리 요청을 먼저 처리할지 결정하는 과정입니다. GPU는 메모리 시스템 성능과 공정성을 최적화하기 위해 다양한 중재 정책을 사용합니다:

  1. 선착순 처리(FCFS): 가장 단순한 중재 정책으로, 요청이 도착한 순서대로 처리됩니다. FCFS는 공정하지만 요청 재정렬이 없어 성능이 저하될 수 있습니다.

  2. 라운드 로빈(RR): 요청이 순환 순서대로 처리되어 모든 요청자에게 동등한 우선순위를 제공합니다. RR은 공정성을 제공하지만 요청의 지역성이나 긴급성을 최적화하지 못할 수 있습니다.

  3. 우선순위 기반: 요청 유형(예: 읽기 vs. 쓰기), 소스(예: 텍스처 vs. L2 캐시) 또는 요청의 나이와 같은 다양한 기준에 따라 우선순위가 지정됩니다. 높은 우선순위의 요청이 먼저 처리됩니다.

  4. 데드라인 인식: 요청이 적시에 완료되도록 보장하기 위해 데드라인에 따라 스케줄링됩니다. 이는 실시간 그래픽 애플리케이션에 특히 중요합니다.

  5. 지역성 인식: 메모리 컨트롤러가 인접한 메모리 위치에 대한 요청을 함께 스케줄링하여 행 버퍼 히트를 최대화하고 DRAM 프리차지 및 활성화 오버헤드를 최소화하려 합니다.

고급 GPU 메모리 컨트롤러는 종종 이러한 중재 정책의 조합을 사용하여 성능, 공정성 및 실시간 요구 사항의 최적 균형을 달성합니다.

공유 메모리와 캐시

GPU는 주 메모리에 대한 지연 시간과 대역폭 요구 사항을 줄이기 위해 소프트웨어 관리 및 하드웨어 관리 캐시를 포함하는 계층적 메모리 시스템을 사용합니다.

공유 메모리

공유 메모리는 스레드 블록(NVIDIA) 또는 작업 그룹(AMD) 내의 스레드가 공유하는 온칩 메모리 공간입니다.이 Markdown 파일의 한국어 번역은 다음과 같습니다. 코드의 경우 코드 자체는 번역하지 않고 주석만 번역하였습니다.

kgroup (OpenCL)은 사용자가 제어할 수 있는 캐시로, 프로그래머가 스레드 블록 내에서 데이터 이동과 재사용을 명시적으로 관리할 수 있게 합니다.

공유 메모리는 일반적으로 지연 시간이 짧고 대역폭이 높은 접근을 제공하기 위해 빠른 멀티 포트 SRAM 뱅크를 사용하여 구현됩니다. 각 뱅크는 한 번에 하나의 메모리 요청을 처리할 수 있으므로, 하드웨어에서는 동일한 뱅크에 대한 동시 접근을 방지하기 위해 중재해야 합니다.

그림 5.3은 GPU 코어의 공유 메모리 구성을 보여줍니다.

        스레드 블록
   ______________________
  |  _________________   |
  | |    스레드 0     |  |
  | |_________________|  |
  |         .            |
  |         .            |
  |         .            |
  |  _________________   |
  | |    스레드 N-1   |  |
  | |_________________|  |
  |______________________|
             |
     ________|________
    |                 |
    |  공유 메모리    |
    |  ____________   |
    | | 뱅크 0     |  |
    | |____________|  |
    | | 뱅크 1     |  |
    | |____________|  |
    |       .         |
    |       .         |
    |       .         |
    | | 뱅크 M-1   |  |
    | |____________|  |
    |_________________|

그림 5.3: GPU 코어의 공유 메모리 구성.

공유 메모리를 적절히 사용하면 GPU 커널의 성능을 크게 향상시킬 수 있습니다. 이는 느린 오프 칩 DRAM에 대한 액세스 횟수를 줄일 수 있기 때문입니다. 그러나 효율적인 데이터 공유와 뱅크 충돌 방지를 위해 세심한 프로그래밍이 필요합니다.

하드웨어 관리 캐시

소프트웨어 관리 공유 메모리 외에도 GPU는 데이터 지역성을 자동으로 활용하고 DRAM 액세스를 줄이기 위해 하드웨어 관리 캐시를 사용합니다. GPU에서 가장 일반적인 하드웨어 관리 캐시 유형은 다음과 같습니다:

  1. L1 데이터 캐시: 최근에 액세스된 전역 메모리 데이터를 저장하는 작은 코어 별 캐시. L1 캐시는 일반적으로 각 GPU 코어에 전용으로 사용되며, 전역 메모리 액세스 지연 시간을 줄이는 데 사용됩니다.

  2. 텍스처 캐시: 읽기 전용 텍스처 데이터에 대한 액세스를 최적화하도록 설계된 전용 캐시입니다.Here is the Korean translation of the provided Markdown file, with the code comments translated:

GPU 메모리 계층 구조와 텍스처 데이터

텍스처 캐시는 2D 공간 지역성을 위해 최적화되어 있으며, 하드웨어 가속 필터링 및 보간 작업을 지원합니다.

  1. Constant Cache: 자주 액세스되는 상수 데이터를 저장하는 작은 읽기 전용 캐시입니다. Constant cache는 warp의 모든 스레드에 브로드캐스트되므로, 많은 스레드에서 공유되는 데이터에 효율적입니다.

  2. L2 Cache: GPU 코어와 메인 메모리 사이에 위치한 더 큰 공유 캐시입니다. L2 캐시는 L1 캐시에서 추출된 데이터를 저장하여 DRAM 액세스 횟수를 줄입니다.

그림 5.4는 하드웨어 관리 캐시가 포함된 일반적인 GPU 메모리 계층 구조를 보여줍니다.

      GPU 코어 0         GPU 코어 1         GPU 코어 N-1
   ________________     ________________     ________________
  |                |   |                |   |                |
  |    L1 데이터    |   |    L1 데이터    |   |    L1 데이터    |
  |     캐시        |   |     캐시        |   |     캐시        |
  |________________|   |________________|   |________________|
  |                |   |                |   |                |
  |    텍스처       |   |    텍스처       |   |    텍스처       |
  |     캐시        |   |     캐시        |   |     캐시        |
  |________________|   |________________|   |________________|
  |                |   |                |   |                |
  |    상수         |   |    상수         |   |    상수         |
  |     캐시        |   |     캐시        |   |     캐시        |
  |________________|   |________________|   |________________|
         |                     |                     |
         |_____________________|_____________________|
                               |
                        _______|_______
                       |               |
                       |   L2 캐시     |
                       |_______________|
                               |
                               |
                           메인 메모리

그림 5.4: 하드웨어 관리 캐시가 포함된 GPU 메모리 계층 구조하드웨어 관리 캐시는 데이터 지역성을 자동으로 활용하고 DRAM 접근 횟수를 줄여 GPU 애플리케이션의 성능을 향상시키는 데 도움이 됩니다. 그러나 CUDA와 OpenCL과 같은 병렬 프로그래밍 모델의 상황에서 캐시 일관성 및 일치성 문제를 야기할 수도 있습니다.

효율적인 메모리 활용을 위한 기술

GPU 메모리 시스템의 효율적인 활용은 높은 성능과 에너지 효율성을 달성하는 데 매우 중요합니다. GPU 애플리케이션의 메모리 사용 최적화를 위한 주요 기술에는 다음과 같은 것들이 있습니다:

  1. 병합(Coalescing): 한 와프의 스레드들이 인접한 메모리 위치에서 메모리 접근을 수행하도록 배열하여, 하드웨어가 이를 하나의 더 넓은 메모리 트랜잭션으로 결합할 수 있게 합니다. 병합은 DRAM 대역폭 활용도를 최대화하고 메모리 트랜잭션 수를 줄입니다.

  2. 데이터 레이아웃 최적화: 공간적 지역성을 최대화하고 캐시 미스를 최소화하도록 메모리의 데이터 구조를 구성합니다. 이에는 같은 유형의 데이터 요소들을 함께 그룹화하는 구조 배열(SoA) 레이아웃, 그리고 같은 구조에 속하는 데이터 요소들을 함께 유지하는 배열 구조(AoS) 레이아웃 등의 기술이 포함됩니다.

  3. 캐싱 및 프리페칭: 시간적 및 공간적 지역성을 활용하여 하드웨어 관리 캐시를 효과적으로 사용합니다. 이를 위해 데이터 타일링, 소프트웨어 프리페칭 등의 기법을 사용할 수 있습니다.

  4. 메모리 접근 스케줄링: DRAM 프리차지 및 활성화 오버헤드를 최소화하고 행 버퍼 히트를 최대화하도록 메모리 접근 순서를 재조정합니다. 이는 메모리 컨트롤러의 하드웨어 메커니즘이나 접근 패턴 최적화, 데이터 레이아웃 변환과 같은 소프트웨어 기법을 통해 수행할 수 있습니다.

  5. 압축: 메모리와 GPU 코어 간 데이터 전송량을 줄이기 위해 데이터 압축 기술을 적용합니다. 이는 성능과 에너지 효율성다음은 입력하신 마크다운 파일의 한국어 번역입니다. 코드 부분에서는 주석만 번역했습니다.

데이터 이동과 관련된 대역폭 병목 현상과 에너지 소비를 완화합니다.

  1. 메모리 가상화: GPU 애플리케이션을 위한 단일화된 연속적인 주소 공간을 제공하기 위해 가상 메모리 기술을 사용합니다. 이를 통해 메모리 관리의 유연성이 높아지고 요구 페이징과 같은 기능을 사용할 수 있어 메모리 사용량을 줄이고 시스템 활용도를 높일 수 있습니다.

그림 5.5는 GPU 메모리 시스템에서 이러한 기술의 일부를 보여줍니다.

       GPU 코어
          |
    ______|______
   |             |
   |   데이터    |
   |  병합 처리  |
   |_____________|
          |
    ______|______
   |             |
   |   데이터    |
   |   레이아웃  |
   |  최적화     |
   |_____________|
          |
    ______|______
   |             |
   |  캐싱 및    |
   |  프리페치   |
   |_____________|
          |
    ______|______
   |             |
   |   메모리    |
   |   접근      |
   |  스케줄링   |
   |_____________|
          |
    ______|______
   |             |
   |   메모리    |
   |   압축      |
   |_____________|
          |
    ______|______
   |             |
   |   메모리    |
   |   가상화    |
   |_____________|
          |
        DRAM

그림 5.5: GPU 메모리 시스템에서 효율적인 메모리 활용을 위한 기술들.

  1. 데이터 병합 처리(Coalescing): 워프의 스레드에서 발생하는 메모리 접근을 인접한 메모리 위치로 정렬하여 하드웨어가 이를 하나의 넓은 메모리 트랜잭션으로 결합할 수 있게 합니다. 데이터 병합 처리는 DRAM 대역폭 활용도를 극대화하고 메모리 트랜잭션 수를 줄입니다.

    예제:

    // 비병합 접근 패턴
    int idx = threadIdx.x;
    float val = input[idx * stride];
     
    // 병합 접근 패턴
    int idx = threadIdx.x;
    float val = input[idx];
  2. 데이터 레이아웃 최적화: 메모리 상의 데이터 구조를 구성하여 공간 지역성을 극대화하고 캐시 미스를 최소화합니다. 이에는 구조체의 배열(Structure of Arrays, SoA) 레이아웃과 같은 기술이 이용되며, 동일한 유형의 데이터 요소들을 함께 배치하는 방식입니다.아래는 주어진 마크다운 파일의 한국어 번역본입니다. 코드 부분은 코드 자체는 번역하지 않았고, 주석 부분만 번역했습니다.

메모리 레이아웃, 동일한 구조의 데이터 요소들을 함께 유지합니다.

예시:

// 배열-구조체 (AoS) 레이아웃
struct Point {
    float x;
    float y;
    float z;
};
Point points[N];
 
// 구조체-배열 (SoA) 레이아웃
struct Points {
    float x[N];
    float y[N];
    float z[N];
};
Points points;
  1. 캐싱 및 프리페칭: 시간적 및 공간적 지역성을 활용하여 하드웨어 관리 캐시를 효과적으로 활용합니다. 이는 데이터 타일링과 같은 기법을 통해 달성할 수 있는데, 데이터를 캐시에 맞는 작은 청크로 나누고, 소프트웨어 프리페칭을 통해 필요하기 전에 데이터를 캐시에 미리 로드합니다.

예시:

// 데이터 타일링
for (int i = 0; i < N; i += TILE_SIZE) {
    for (int j = 0; j < N; j += TILE_SIZE) {
        // 캐시에 맞는 데이터 타일 처리
        for (int ii = i; ii < i + TILE_SIZE; ii++) {
            for (int jj = j; jj < j + TILE_SIZE; jj++) {
                // A[ii][jj] 연산 수행
            }
        }
    }
}
  1. 메모리 접근 스케줄링: 메모리 컨트롤러의 하드웨어 메커니즘이나 접근 패턴 최적화, 데이터 레이아웃 변형과 같은 소프트웨어 기법을 통해 메모리 접근을 재정렬하여 행 버퍼 히트를 최대화하고 DRAM 프리차지 및 활성화 오버헤드를 최소화합니다.

  2. 압축: 메모리와 GPU 코어 간 데이터 전송량을 줄이기 위해 데이터 압축 기법을 적용합니다. 이를 통해 대역폭 병목 현상을 완화하고 데이터 이동에 따른 에너지 소비를 줄일 수 있습니다.

예시:

  • 델타 인코딩: 실제 값 대신 연속된 값 간의 차이를 저장합니다.
  • 런-길이 인코딩: 반복되는 값을 단일 인스턴스와 카운트로 대체합니다.
  • 허프만 코딩: 더 자주 나타나는 값에 더 짧은 비트 시퀀스를 할당합니다.
  1. 메모리 가상화 및 페이징:가상화: GPU 애플리케이션에 통합되고 연속적인 주소 공간을 제공하기 위한 가상 메모리 기술 활용. 이를 통해 더 유연한 메모리 관리와 요구 페이징(demand paging) 기능 등을 지원하여 메모리 사용량을 줄이고 시스템 활용도를 높일 수 있습니다.

예시:

  • CUDA의 통합 가상 주소 지정(Unified Virtual Addressing, UVA): CPU 메모리에 단일 포인터로 직접 액세스할 수 있게 하여 이기종 시스템의 메모리 관리를 간소화합니다.

멀티 칩 모듈 GPU

GPU의 성능과 전력 요구사항이 계속 증가함에 따라, 기존의 단일 칩 설계로는 이를 감당하기 어려울 수 있습니다. 여러 GPU 칩을 단일 패키지로 통합하는 멀티 칩 모듈(MCM) 설계가 이 문제에 대한 유망한 해결책으로 등장했습니다.

MCM GPU 설계는 다음과 같은 장점을 제공합니다:

  1. 더 높은 메모리 대역폭: 여러 메모리 스택 또는 칩을 통합하여 MCM GPU는 단일 칩 설계에 비해 훨씬 더 높은 메모리 대역폭을 제공할 수 있습니다.

  2. 향상된 확장성: MCM 설계를 통해 더 많은 컴퓨팅 유닛과 메모리 컨트롤러를 통합할 수 있어, GPU의 성능 수준을 더 높일 수 있습니다.

  3. 더 나은 수율과 비용 효율성: MCM 설계의 개별 작은 칩은 대형 단일 칩에 비해 제조 수율이 더 높고 비용 효율적일 수 있습니다.

그러나 MCM GPU 설계에는 새로운 과제들도 존재합니다:

  1. 칩 간 통신: MCM 패키지의 다양한 칩 간 효율적인 통신은 성능에 매우 중요합니다. 칩 간 데이터 이동의 오버헤드를 최소화하기 위해서는 고대역폭, 저지연 상호 연결이 필요합니다.

  2. 전력 공급 및 열 관리: MCM 설계에는 최적의 성능과 신뢰성을 보장하기 위한 세심한 전력 공급 및 열 관리 전략이 필요합니다.

  3. 소프트웨어 지원: MCM GPU는 다중 칩 아키텍처의 이점을 최대한 활용하기 위해 프로그래밍 모델 및 런타임 시스템의 변경이 필요할 수 있습니다.

이 분야에 대한 연구가이 부분은 MCM GPU의 설계와 최적화에 대한 영역을 탐구합니다. 여기에는 메모리 시스템 아키텍처, 상호 연결 설계, 리소스 관리 등이 포함됩니다.

예를 들어, Arunkumar et al. [2017]은 고대역폭, 저지연 상호 연결을 사용하여 다중 GPU 칩을 연결하는 MCM GPU 설계를 제안합니다. 저자들은 또한 MCM 설계의 증가된 대역폭과 용량을 활용하여 성능과 에너지 효율을 향상시키는 메모리 시스템 아키텍처를 제안했습니다.

또 다른 예는 Milic et al. [2018]의 연구로, 리소스 활용도를 높이고 칩 간 통신 오버헤드를 줄이기 위한 MCM GPU용 리소스 관리 방식을 제안합니다. 이 방식은 하드웨어와 소프트웨어 기술을 결합하여 응용 프로그램의 리소스 사용량과 통신 패턴을 모니터링하고 동적 리소스 할당 결정을 내립니다.

결론

메모리 시스템은 현대 GPU 아키텍처의 중요한 구성 요소이며, 이의 설계와 최적화는 전체 시스템 성능과 효율에 중대한 영향을 미칩니다. 병렬 워크로드의 요구가 계속 증가함에 따라, 연구자들은 GPU 메모리 시스템의 성능, 확장성, 적응성을 개선하기 위한 다양한 기술을 탐구하고 있습니다.

이 분야의 주요 연구 방향에는 메모리 액세스 스케줄링 및 상호 연결 설계, 캐싱 효과, 메모리 요청 우선순위화 및 캐시 우회, 워프 간 이질성 활용, 협조적 캐시 우회, 적응형 캐시 관리, 캐시 우선순위화, 가상 메모리 페이지 배치, 데이터 배치, 멀티칩 모듈(MCM) 설계 등이 포함됩니다.

이러한 기술들을 탐구함으로써 연구자들은 병렬 워크로드의 증가하는 요구를 충족하면서도 높은 성능과 에너지 효율을 유지할 수 있는 GPU 메모리 시스템을 개발하고자 합니다. GPU가 기계 학습, 과학 계산, 데이터 분석 등 새로운 응용 분야에서 발전함에 따라, 메모리 시스템의 설계와 최적화가 더욱 중요해질 것입니다.줄기는 연구와 혁신의 중요한 분야로 남아있을 것입니다.