GPU 하드웨어 아키텍처에서 렌더링 파이프 보기
SP 는 GPU 의 가장 작은 컴퓨팅 장치로, 마이크로CPU (CudaCore 라고도 함) 에 해당합니다.
다형성 엔진은 고정 렌더링 단계를 수행하는 데 사용되는 하드웨어이며 일반적으로 다음 구성 요소로 구성됩니다.
Warp (스레드 번들) 는 GPU 스케줄링 작업의 기본 단위입니다. Warp 에는 32 개의 스레드가 포함되어 있습니다. 즉, GPU 의 스케줄링은 32 개의 스레드를 기반으로 합니다. 3 개의 정점만 처리하더라도 32 개의 스레드가 예약되어 32 개의 SP 를 사용하여 계산되며 그 중 29 개는 사용할 수 없는 것으로 마스킹됩니다.
(1) 그래픽 API (OpenGL/DirectX/Metal) 에서 DrawCall 을 실행하면 명령이 드라이버로 푸시됩니다. 명령의 합법성을 확인한 후, 명령은 GPU 가 읽을 수 있는 푸시 버퍼로 푸시됩니다.
(2) 플래시 명령이 일정 기간 동안 호출되거나 명시적으로 호출되면 드라이버는 flush Buffer 의 명령을 GPU 로 보내고 GPU 의 호스트 인터페이스는 명령을 받아 FrontEnd 를 통해 처리합니다.
(3) 엔티티 할당자는 인덱스 버퍼의 정점 데이터를 처리하여 처리를 위해 여러 GPC 로 전송된 삼각형 배치를 생성합니다.
(4) 명령이 GPC 에 도착하면 각 SM 의 다중 형태 엔진의 정점 추출 모듈은 삼각형 인덱스를 통해 삼각형 데이터를 추출합니다.
(5) 데이터를 얻은 후 SM 의 warp 스케줄러는 정점 데이터를 처리하기 위해 32 스레드의 스레드 번들 Warp 를 사용하여 일정을 잡기 시작합니다. Warp 는 Simt (Single Introduction Multiple Thread) 의 구현으로 32 개의 스레드가 동시에 동일한 명령을 실행하지만 각 스레드에 대한 데이터는 다릅니다. 예를 들어 32 개의 정점이 동시에 정점 셰이더를 실행하는 명령입니다.
(6) 단일 경도선의 스레드는 잠금 단계에서 명령을 실행하고, 데이터가 없는 스레드는 차단되고, 스레드는 독립적으로 일정을 잡을 수 없지만, 경도선을 기준으로 해야 하지만, 다른 경도선은 독립적입니다.
(7) 명령어 실행 시간이 다릅니다. 특히 메모리 로드에 시간이 많이 걸리는 경우 warp 스케줄러가 메모리를 기다리지 않고 다른 warp 실행으로 직접 전환할 수 있으므로 GPU 가 메모리 읽기 지연을 극복할 수 있습니다. Warp 는 레지스터 파일에 자체 레지스터를 가지고 있습니다.
(8) warp 가 정점 셰이더 명령을 완료하면 작업 결과가 다중 변형 엔진의 뷰포트 변환 모듈로 전달되어 처리됩니다. 일반적으로 정점 셰이더는 자르기 공간의 좌표를 출력하고, 뷰포트 변환은 정점을 자르고, 뷰포트 변환, 즉 화면 매핑을 수행하여 정점 좌표를 화면 좌표로 변환합니다.
(9) 화면 좌표를 얻은 후 래스터화할 수 있다. 삼각형은 여러 GPC 에 분할되어 할당됩니다 (일반적으로 화면의 작은 블록에 따라 할당됨). 삼각형의 범위에 따라 할당할 GPC 래스터 엔진이 결정되고 각 래스터 엔진이 화면의 여러 블록을 덮습니다.
(10)GPC 의 래스터 엔진은 각 삼각형으로 덮인 픽셀 정보를 얻기 위해 삼각형 데이터를 래스터화합니다. 역제거 및 초기 z 제거는 일반적으로 여기서 수행됩니다.
(1 1) 각 정점이 정점 셰이더 및 뷰포트 변환을 수행하는 삼각형의 세 정점으로, 처리된 정보가 래스터화를 위해 래스터 엔진으로 전달되고 몇 개의 타일이 생성됩니다. 데이터 (위치, 색상, 법선 등) 를 어떻게 얻을 수 있습니까? ) 의 각 타일? SM 의 속성 설정은 정점 데이터 보간에 따라 슬라이스 메타데이터 l1&; L2 캐시는 칩 셰이더가 데이터를 처리할 수 있도록 데이터를 저장하는 데 사용됩니다.
(12)SM 의 Warp 스케줄러는 8 개의 2x2 블록 (***32) 을 할당하여 warp 에서 블록 셰이더 명령을 실행합니다.
(13) 타일 음영처리기는 명령을 실행하여 타일 색상 및 깊이 계산을 완료합니다. 이 시점에서 데이터는 삼각형의 원래 API 제출 순서에 따라 렌더 출력 단위 ROP (Render Output Unit) 에 전달되어야 합니다. ROP 에는 많은 ROP 장치가 있으며 ROP 셀은 깊이 테스트 및 프레임 버퍼의 블록과 혼합과 같은 블록별 작업을 처리합니다.
(14) ROP 는 슬라이스 메타데이터를 가져오고 FrameBuffer 에 개별적으로 액세스하여 메타 작업을 수행한 후 Crossbar 를 통해 FrameBuffer 에 결과를 기록하고 렌더링 프로세스를 종료합니다.
GPU 의 메모리는 여러 유형으로 나뉘며, 메모리 읽기 속도는 유형에 따라 크게 다릅니다.
Shader 에서 직접 사용하는 레지스터 메모리는 빠르지만 텍스처 및 상수 메모리와 전역 메모리 속도는 상대적으로 느립니다.
위 절차는 MaxWell 데스크탑 GPU 아키텍처의 상세한 렌더링 프로세스입니다. 그러나 모바일 GPU 의 아키텍처는 데스크탑 GPU 와 다릅니다.
이동 렌더링 프로세스는 TBR (블록 기반 렌더링) 이라고도 하는 블록 기반 아키텍처를 기반으로 합니다. 한 프레임에 있는 모든 DrawCall 에 대해 정점 셰이더 대 화면을 기준으로 블록을 나누고 블록을 기준으로 블록 셰이더 (FS) 를 실행합니다.
예를 들어 보겠습니다. 한 프레임이 두 개의 draw call 을 제출하면 각 draw call 에는 하나의 삼각형이 포함되며 두 개의 삼각형이 전체 화면을 덮습니다.