728x90
CPU 와 GPU
CPU 내부 구성요소
- 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 동작 원리
- 메인 메모리에서 데이터를 복사하여 GPU 메모리로 전달
- CPU가 GPU에 명령어(프로세스)를 지시
- GPU가 각 코어에 병렬 작업을 수행함.
- 결과값을 GPU 메모리로 출력하여 메인 메모리로 전달함.
GPU 내부 구조
- Per-Grid (Grid)
- Grobal Memory
- 모든 Thread가 활용할 수 있다.
- off - chip memory : memory 연산 속도가 가장 느리지만 가장 큰 공간을 가진다.
- Host와 접근이 가능하여 서로 명령어를 주고 받음.
- Constant Memory
- 읽기 전용 메모리 : Grobal에서 선언하며, Host에서 초기화 한다.
- 상대적으로 Grobal Memory보단 빠르며, 공간이 적다.
- 캐시가 존재한다. (기본적으로 DRAM에 저장되지만 자주 읽어오는 값을 저장하여 빠르게 활용이 가능하다.)
- Grobal Memory
- 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에 비해 느리지만 더 많은 공간을 활용할 수 있다.
- Off-chip memory
- Rigisters
결론
CPU는 성능은 우수하지만 연산 처리 장치가 GPU에 비해 적기 때문에, 단순 연산처리에 대해 GPU에 할당하여, 수 많은 Rendering 작업을 빠르게 처리한다.
Rendering Pipe Line
- 입력 어셈블러 (Input Assembler)
- 고정 함수 작업을 상용하여 메모리의 Objects의 꼭지점을 읽는다.
- 기하 도형 기본 형식을 형성하고 파이프라인 작업 항목을 만든다.
- 인스턴스 식별자 : 꼭짓점 셰이더에서 사용
- 기본 식별자 : 기하 도형 셰이더 또는 필셀 셰이더에서 사용
- 꼭짓점 셰이더 (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 |