공부/게임수학 및 DirectX12

Rendering Pipe Line & GPU

원클릭쓰리버그 2022. 3. 28. 13:03
728x90

 

 

CPU 와 GPU 

CPU와 GPU의 내부 구조에 대한 비교 그림

 

 

CPU 내부 구성요소

 

 

CPU 내부 구조 및 Process

 

  • ALU (Arithmetic Logic Uint)
    • 각종 산술 연산과 논리 연산 등을 수행하는 회로들로 이루어진 하드웨어 모듈
    • 산술 연산( + , - , * , % ) / 논리 연산 (AND, OR, NOT, XOR 등) / 쉬프트 연산
  • 레지스터 세트(Register Set) - 주기억장치
    • CPU 내부에 위치한 기억장치
    • 컴퓨터의 기억장치들 중에서 액세스 속도가 가장 빠름
    • 구현 회로가 복잡하여 레지스터들의 수가 제한됨
    • 레지스터 종류
      • 제어용 레지스터 - 명령어 실행 과정 제어에 필요한 정보를 저장
      • 일반 산술용 레지스터 - 명령어 실행에 필요한 데이터나 계산 결과를 임시적으로 저장
  • 제어 장치 (Control Unit)
    • 프로그램 코드(명령어)를 해석하고, 그것을 실행하기 위한 제어 신호들(control signals)를 순차적으로 발생하는 하드웨어 모듈
    • CPU에서 지원하는 명령어 집합의 복잡도에 따라 구현 회로의 복잡도가 결정
    • 마이크로프로그래밍 - 명령어 실행 제어 동작을 소프트웨어 방식으로 처리하여 회로 복잡도를 줄이는 기법
  • 내부 CPU 버스 (internal CPU bus)
    • ALU와 레지스터들 간의 데이터 이동을 위한 데이터 선들과 제어 장치로부터 발생되는 제어 신호 선들로 구성된 내부 버스
    • 외부의 시스템 버스들과는 직접 연결되지 않으며, 반드시 버퍼 레지스터들 혹은 시스템 버스 인터페이스 회로를 통하여 시스템 버스와 접속 
  • AC(Accumulator) : 연산 결과를 일시적으로 저장하는 레지스터
  • IR(Instruction Rigister) : 가장 최근에 인출된 명령어(현재 진행되고 있는 명령어)가 저장되어 있는 레지스터
  • MAR(Memory Address Register) : PC에 저장된 명령어 주소가 사용되기 전에 일시적으로 저장되는 주소 레지스터
  • MBR (Memory Buffer Register) : 기억장치에 저장될 데이터 혹은 읽혀진 데이터가 일시적으로 저장되는 버퍼 레지스터

 

 

GPU 동작 원리

 

 

 

 

  1.  메인 메모리에서 데이터를 복사하여 GPU 메모리로 전달
  2.  CPU가 GPU에 명령어(프로세스)를 지시
  3.  GPU가 각 코어에 병렬 작업을 수행함.
  4.  결과값을 GPU 메모리로 출력하여 메인 메모리로 전달함.

 

  

GPU 내부 구조

 

 

 

  • Per-Grid (Grid)
    • Grobal Memory
      • 모든 Thread가 활용할 수 있다.
      • off - chip memory : memory 연산 속도가 가장 느리지만 가장 큰 공간을 가진다.
      • Host와 접근이 가능하여 서로 명령어를 주고 받음.
    • Constant Memory
      • 읽기 전용 메모리 : Grobal에서 선언하며, Host에서 초기화 한다.
      • 상대적으로 Grobal Memory보단 빠르며, 공간이 적다.
      • 캐시가 존재한다. (기본적으로 DRAM에 저장되지만 자주 읽어오는 값을 저장하여 빠르게 활용이 가능하다.)
  • Per-Block (shared Memory)
    • 빠르지만 공간이 적다.
    • 블록 안의 모든 thread들이 공유한다. (모든 thread가 접근이 가능하다. -> 서로 communication이 가능하여 효율성이 뛰어나다.)

 

  • Per-Thread (local Memory)
    • Rigisters
      • 가장 빠르고, 가장 작은 메모리
      • 보통 블럭 1개가 8k-64k 32bit register를 사용한다.
      • thread들이 register를 나누어 가져간다.
    • Local Memory
      • Off-chip memory 
        • DRAM 영역 내부에 존재
        • Register에 다 올라가지 못하는는 것들은 Local Memory에 올려서 동작
        • Register에 비해 느리지만 더 많은 공간을 활용할 수 있다.

 

 

결론

 CPU는 성능은 우수하지만 연산 처리 장치가 GPU에 비해 적기 때문에, 단순 연산처리에 대해 GPU에 할당하여, 수 많은 Rendering 작업을 빠르게 처리한다.

 

 

Rendering Pipe Line

 

 

랜더링 파이프라인 흐름도

  • 입력 어셈블러 (Input Assembler)
    1. 고정 함수 작업을 상용하여 메모리의 Objects의 꼭지점을 읽는다.
    2. 기하 도형 기본 형식을 형성하고 파이프라인 작업 항목을 만든다.
      • 인스턴스 식별자 : 꼭짓점 셰이더에서 사용
      • 기본 식별자 : 기하 도형 셰이더 또는 필셀 셰이더에서 사용
  • 꼭짓점 셰이더 (Vertex Shader)
    • 인스턴스 식별자에 값을 받아와 꼭짓점(Vertex)을 연산하여 출력한다.
  • 기하 도형 셰이더 (Geometry Shader)
    • Vertex Shader에서 가공된 Vertex를 사용하여 어플리케이션 셰이더 코드를 실행하여 꼭짓점을 생성한다.
  • 스트림 출력 (Stream Output)
    • Geometry Shader의 출력을 메모리에 전달하는 버퍼를 출력합니다.
  • 래스터 라이저 (Rasterizer)
    • 기본 형식, 기본 요소에 대한 원근 분할을 수행한다. 뷰토트 및 가위 선택 구현, 렌더링 대상 선택 수행, 기본 설정 수행
  • 픽셀 셰이더 (Pixel Shader)
    • 입력으로 1픽셀을 사용하고 돌일한 위치 또는 픽셀 없이 1픽셀을 출력한다. (아직은 랜더링을 한 상태는 아님)
  • 출력 병합기 (Output Merge)
    • 고정 함수 랜더링 대상 혼합, 깊이 및 스텐실 작업을 수행

'공부 > 게임수학 및 DirectX12' 카테고리의 다른 글

Direct3D 12 그래픽 파이프라인  (0) 2022.04.06
기초 베이스  (0) 2022.03.29
Library  (0) 2022.03.28