NDC/ETC

[NDC 2014] 헤테로지니어스 컴퓨팅CPU에서 GPU로 옮겨가기

MAKGA 2021. 12. 4. 10:57
320x100

헤테로지니어스 컴퓨팅?

- 한 가지 이상의 프로세서를 내장한 시스템
- CPU와 GPU를 같이 사용하는 프로그래밍

 

GPGPU?

- GPU를 CPU가 맡았던 App의 계산에 사용하는 기술
- CUDA(HLSL) / OpenCL(GLSL)이 있음

 

GPU 프로그래밍 기초

- MultiThreading
    CPU가 루프돌면서 처리하던 것을 병렬로 처리
    한번에 수십개의 유닛이 같은 명령을 동시에 처리
    void func()
    {
        for (uint i =0; i<count; ++i)
            c[i] = a[i] + b[i];
    }

    [numthreads(groupWidth, groupHeight, 1)]
    void func(uint i : SV_DispatchThreadID)
    {
        c[i] = a[i] + b[i];
    }

- Shared Memory
쓰레드간에 공유하는 작은 크기의 메모리
쓰레드간 주고 받을 정보나 중복 데이터 저장

 

Single Instruction Multi Thread

- 32/64 쓰레드가 같은 명령어를 실행한다.
    명령어 유닛 1개가 여러 쓰레드를 제어
    SIMD와 흡사하나 코드 자유도가 높다
    Thread Group, Warp, WaveFront로 불린다

- 분기 발생시 양쪽 조건을 모두 실행한다.
    모든 쓰레드가 if/for/while에 못들어가면 다른 쓰레드는 멈춘다
    Group이 다양한 분기를 탈 경우 매우 느려진다
    모두 실패할 경우 빠르게 Context switching 된다

 

Shared Memory 임시 버퍼로 쓰기

- Cache 용도로 메모리 접근 최적화
    순차 복사 후 랜덤하게 Shared Memory 접근

- Shared Memory로 Register 사용을 줄인다
    각종 자료구조 구현해 사용

 

쓰레드간 Shared Memory 공유하기

- 다른 쓰레드가 계산한 결과를 저장한다
    쓰레드간 데이터 교환에 유용하다

- 쓰레드들을 Thread Pool같이 써보자
    쓰레드가 32가 넘을 경우 GroupSync() 해야한다

 

CPU에서 GPU로 작업을 옮겨보자

1. 임시 메모리 사용량이 적다
2. 순서가 바뀌거나 랜덤도 잘 돌아간다
3. 루프를 많이 돌고있다. case by case

 

CPU도 GPU도 BandWidth에 민감하다

- 최적화 할 수록 메모리 퍼포먼스가 중요

 

AoS와 SoA를 잘 골라쓰자

- SoA가 더 빠르다고 하지만 다수의 스트림을 다룰때는 AoS가 더 빠를 때도 있다
- BandWidth/Bank가 적을수록 AoS를 선호한다
- AoS?

    메모리에 struct 단위로 저장

출처: https://blog.esukmean.com/2020/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%EC%9D%84-%EC%A1%B0%EA%B8%88-%EB%8D%94-%EB%B9%A0%EB%A5%B4%EA%B2%8C-1-aos

- SoA?

    메모리에 같은 항목별로 저장

출처: https://blog.esukmean.com/2020/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%EC%9D%84-%EC%A1%B0%EA%B8%88-%EB%8D%94-%EB%B9%A0%EB%A5%B4%EA%B2%8C-1-aos

 

GPU의 약점

- 까다로운 GPU 메모리 접근
    대역폭은 넓지만 랜덤 접근에 강하지 않다
    Shared Memory도 최악의 경우 16배까지 느려짐

- 생각보다 느린 Thread당 연산 속도
    클럭이 CPU의 20~25% 수준

- CPU와 데이터, 결과를 주고 받아야 한다
    복사 비용은 비싸다 => 최대한 재사용
    주고 받는 데이터 크기도 최소화 하자 (uint16)

 


출처: 엔씨소프트

http://ndcreplay.nexon.com/NDC2014/sessions/NDC2014_0053.html

320x100

'NDC > ETC' 카테고리의 다른 글

[NDC 2015] Key-Value Store를 사용한 대용량 게임 통계  (0) 2023.01.03