KR20230125231A - 그래픽 파이프라인에서 테셀레이션 팩터에 기초한 헐셰이더 스로틀링 - Google Patents

그래픽 파이프라인에서 테셀레이션 팩터에 기초한 헐셰이더 스로틀링 Download PDF

Info

Publication number
KR20230125231A
KR20230125231A KR1020237024083A KR20237024083A KR20230125231A KR 20230125231 A KR20230125231 A KR 20230125231A KR 1020237024083 A KR1020237024083 A KR 1020237024083A KR 20237024083 A KR20237024083 A KR 20237024083A KR 20230125231 A KR20230125231 A KR 20230125231A
Authority
KR
South Korea
Prior art keywords
shader
counter
circuitry
primitives
primitive
Prior art date
Application number
KR1020237024083A
Other languages
English (en)
Inventor
니샨크 패싸크
Original Assignee
어드밴스드 마이크로 디바이시즈, 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 어드밴스드 마이크로 디바이시즈, 인코포레이티드 filed Critical 어드밴스드 마이크로 디바이시즈, 인코포레이티드
Publication of KR20230125231A publication Critical patent/KR20230125231A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5066Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T17/00Three dimensional [3D] modelling, e.g. data description of 3D objects
    • G06T17/20Finite element generation, e.g. wire-frame surface description, tesselation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/504Resource capping

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Graphics (AREA)
  • Software Systems (AREA)
  • Geometry (AREA)
  • General Engineering & Computer Science (AREA)
  • Image Generation (AREA)

Abstract

처리 시스템(300)은 하나 이상의 프리미티브를 포함하는 스레드 그룹들을 론칭하는 헐 셰이더 회로부(121-123)를 포함한다. 헐 셰이더 회로부는 또한, 프리미티브들의 세부 분할들을 나타내는 테셀레이션 팩터들을 생성한다. 처리 시스템은 또한, 테셀레이션 팩터들에 기초하여 도메인 셰이더(224)에 대한 프리미티브 론치 시간 간격을 추정하고 도메인 셰이더의 프리미티브 론치 시간 간격 및 헐 셰이더 레이턴시에 기초하여 헐 셰이더 회로부로부터의 스레드 그룹들의 론칭을 선택적으로 스로틀링(throttling)하는 스로틀링 회로부(430)를 포함한다. 일부 경우들에서, 스로틀링 회로부는 버퍼로부터 스레드 그룹을 론칭하는 것에 응답하여 증분되는 제1 카운터(435) 및 도메인 셰이더의 측정된 레이턴시에 기초하여 제1 카운터를 수정하는 제2 카운터(440)를 포함한다.

Description

그래픽 파이프라인에서 테셀레이션 팩터에 기초한 헐 셰이더 스로틀링
그래픽 처리 유닛(Graphics processing unit, GPU)들은 커맨드 버퍼로부터 검색(retrieve)되는 커맨드들의 카피들을 동시에 처리하는 그래픽 처리 파이프라인들을 구현한다. 그래픽 파이프라인은 하나 이상의 고정 기능 하드웨어 블록 및 그래픽 파이프라인의 자원들을 사용하여 실행하는 하나 이상의 셰이더를 포함한다. 그래픽 파이프라인은 전형적으로, 버텍스들 및 에지들로 형성되고 이미지의 부분들을 나타내는 삼각형들과 같은 패치들 또는 다른 프리미티브들에 대해 지오메트리 동작들을 수행하는 지오메트리 부분으로 분할된다. 지오메트리 부분에서의 셰이더들은 버텍스 셰이더들, 헐 셰이더들(hull shaders), 도메인 셰이더들, 및 지오메트리 셰이더들을 포함할 수 있다. 그래픽 파이프라인의 지오메트리 부분은 파이프라인의 지오메트리 부분에 의해 생성된 프리미티브들이 이미지의 부분들을 나타내는 픽셀들의 세트들을 형성하기 위해 (예를 들어, 하나 이상의 스캔 컨버터에 의해) 래스터화될 때 완료된다. 픽셀들에 대한 후속 처리는 픽셀 처리로 지칭되고, 그래픽 파이프라인의 자원들을 사용하여 실행하는 픽셀 셰이더와 같은 셰이더들에 의해 수행되는 동작들을 포함한다. GPU들 및 다른 멀티스레딩된 처리 유닛들은 전형적으로, 단일 웨이브(single wave)로서 다수의 데이터 세트들 상에서 단일 프로그램의 다수의 인스턴스들을 동시에 실행하는 다수의 처리 요소들(이들은 또한 프로세서 코어들 또는 컴퓨트 유닛들로도 지칭됨)을 구현한다. 계층구조적 실행 모델이 하드웨어에서 구현된 계층 구조를 매칭시키기 위해 이용된다. 실행 모델은 모든 웨이브들(또한 웨이브프론트들, 스레드들, 스트림들, 또는 작업 항목들로 지칭됨)에 의해 실행되는 명령어들의 커널을 정의한다.
본 개시는 첨부 도면들을 참조하여 당해 기술분야의 통상의 기술자들에게 이해가 더 잘 되고, 이의 많은 피처들 및 이점들이 명백해질 수 있다. 상이한 도면들에서의 동일한 참조 부호들의 사용은 유사하거나 동일한 항목들을 나타낸다.
도 1은 일부 실시예들에 따른 처리 시스템의 블록도이다.
도 2는 일부 실시 예들에 따른, 미리 결정된 해상도로 3차원(3D) 장면들의 래스터화된 이미지들을 생성하도록 고차 지오메트리 프리미티브들을 처리 가능한 그래픽 파이프라인을 도시한다.
도 3은 일부 실시예들에 따른, 헐 셰이더 회로부에 의해 론칭되는 스레드 그룹들(launched thread groups)을 선택적으로 스로틀링하는 처리 시스템의 제1 부분의 블록도이다.
도 4는 일부 실시예들에 따른, 헐 셰이더 회로부에 의해 론칭되는 스레드 그룹들을 선택적으로 스로틀링하는 처리 시스템의 제2 부분의 블록도이다.
도 5는 일부 실시예들에 따른, 총 카운트 및 오류 카운트를 사용하여 도메인 셰이더에 대한 프리미티브 론치 시간 간격들을 추정하는 방법의 제1 부분의 흐름도이다.
도 6은 일부 실시예들에 따른, 총 카운트 및 오류 카운트를 사용하여 도메인 셰이더에 대한 프리미티브 론치 시간 간격들을 추정하는 방법의 제2 부분의 흐름도이다.
도 7은 일부 실시예들에 따른, 헐 셰이더로부터의 웨이브 론치들을 선택적으로 스로틀링하는 방법의 흐름도이다.
그래픽 파이프라인의 지오메트리 부분에서의 헐 셰이더 회로부는 헐 셰이더에 의해 처리되는 패치들의 제어 지점들의 파들을 론칭한다. 헐 셰이더는 또한, 패치들의 세부 분할들을 나타내는 테셀레이션 팩터들(tessellation factors)을 생성한다. 헐 셰이더에 의해 처리되는 패치들 및 테셀레이션 팩터들은 그래픽 파이프라인에서의 테셀레이터로 전달된다. 테셀레이터는 테셀레이션 팩터들을 사용하여, 도메인 셰이더에서 테셀레이팅된 프리미티브들을 처리하기 전에 패치들을 삼각형들과 같은 다른 프리미티브들로 세부 분할한다. 이에 따라, 도메인 셰이더는 전형적으로 헐 셰이더보다 더 많은 수의 프리미티브들을 처리한다. 예를 들어, 헐 셰이더에 의해 처리되는 쿼드 패치에 대해 테셀레이션 팩터가 16이라면, 도메인 셰이더는 헐 셰이더로부터 패치를 수신하는 것에 응답하여 512개의 삼각형들을 처리한다. 패치들은 가능한 한 많은 그래픽 파이프라인의 자원들을 사용하려고 하는 그리디 알고리즘(greedy algorithm)에 기초하여 헐 셰이더 회로부에 의해 론칭된다. 그리디 알고리즘에 기초하여 헐 셰이더 웨이브들을 론칭하는 것은 테셀레이팅된 프리미티브들을 처리하는 데 필요한 자원들을 도메인 셰이더에 보급하지 않을 수 있다. 일부 그래픽 파이프라인들은 웨이브들을 처리하기 위해 헐 셰이더에 할당될 수 있는 컴퓨트 유닛의 수를 제약함으로써 인-플라이트(in-flight) 웨이브의 수를 제한하도록 구성된다. 그러나, 이용가능한 컴퓨트 유닛의 수에 대한 정적 제한은 헐 셰이더에 의해 론칭되는 프리미티브들의 증폭이 거의 없거나 또는 전혀 없을 때, 예를 들어, 테셀레이션 팩터들이 1과 같거나 작을 때, 그래픽 파이프라인의 성능을 감소시킨다.
도 1 내지 도 7은 제1 유형의 제1 셰이더 및 제2 유형의 제2 셰이더에 의해 소비되는 그래픽 파이프라인 자원들의 측정치들에 기초하여 제1 셰이더로부터의 웨이브들을 선택적으로 론칭함으로써 제1 유형의 제1 셰이더 및 제2 셰이더에 의해 소비되는 그래픽 파이프라인 자원들 사이의 밸런스를 유지하는 시스템들 및 기법들을 개시한다. 일부 실시예들에서, 제1 셰이더는 헐 셰이더이고, 제2 셰이더는 테셀레이터로부터 프리미티브들을 수신하는 도메인 셰이더이다. 헐 셰이더는 테셀레이션 팩터들을 생성하고, 테셀레이터는 테셀레이션 팩터들에 기초하여 프리미티브들을 세부 분할(또는 테셀레이팅)하여 다수의 더 높은 해상도 프리미티브들을 생성한다. 헐 셰이더 회로부에 의해 론칭되는 패치들에 대한 테셀레이션 팩터들은 프리미티브들을 도메인 셰이더에 제공하는 버퍼에 유지된다. 스로틀팅 회로부는 테셀레이션 팩터들을 사용하여, 도메인 셰이더로부터의 모든 프리미티브들을 론칭시키기 위해 도메인 셰이더에 의해 요구되는 시간 간격, 예를 들어, 도메인 셰이더에서 보다 고해상도 프리미티브들을 처리하는 데 요구되는 사이클의 수를 추정한다. 이 시간 간격은 본원에서 "프리미티브 론칭 시간 간격"으로 지칭된다. 스로틀링 회로부의 일부 실시예들은 버퍼 내의 대응하는 엔트리들과 연관된 웨이브들에 대한 다수의 고해상도 프리미티브(또는 고해상도 프리미티브들을 처리하는 데 요구되는 사이클)의 수를 나타내는 정보를 저장하는 레지스터들의 뱅크를 포함한다. 저장된 정보는 도메인 셰이더에 대한 프리미티브 론치 시간 간격을 나타내는 카운터의 값을 설정하는 데 사용된다. 예를 들어, 총 카운터가 처리를 위해 테셀레이터에 기록되는 버퍼 엔트리와 연관된 레지스터 내의 고해상도 프리미티브들을 처리하기 위해 추정된 사이클의 수만큼 증분된다. 총 카운터는 도메인 셰이더 론치 로직이 패치와 연관된 보다 고해상도 프리미티브들의 처리를 완료하는 것에 응답하여 (도메인 셰이더 론치 로직의 추정된 프리미티브 처리 레이트에 의해) 반복적으로 감분된다. 일부 실시예들에서, 오류 카운터는 도메인 셰이더로부터 론치 전에 도메인 셰이더에서 프리미티브들을 처리하는 데 요구되는 실제 시간의 측정치들에 기초하여 총 카운터를 수정하는 데 사용된다. 오류 카운터의 값은 예를 들어, 도메인 셰이더 상의 백 프레셔(back pressure)로 인해, 측정된 레이턴시가 총 카운터의 값에 대응하는 레이턴시보다 더 큰 것에 응답하여 증가된다. 오류 카운터의 값은 측정된 처리 시간이 총 카운터의 값 이하인 것에 응답하여 감소된다(또는 제로로 설정된다). 그 후, 조합된 총 카운터와 오류 카운터는 완료된 패치들의 테셀레이션 팩터들에 기초하여 감분된다. 웨이브들은 총 카운터의 값 및, 존재한다면, 오류 카운터에 기초하여 헐 셰이더로부터 선택적으로 론칭된다.
도 1은 일부 실시예들에 따른 처리 시스템(100)의 블록도이다. 처리 시스템(100)은 동적 랜덤 액세스 메모리(DRAM)와 같은 비일시적인 컴퓨터 판독가능 매체를 사용하여 구현되는 메모리(105) 또는 다른 저장 구성요소를 포함하거나 이에 대한 액세스 권한을 갖는다. 그러나, 일부 경우들에서, 메모리(105)는 정적 랜덤 액세스 메모리(SRAM), 비휘발성 RAM 등을 포함하여 다른 유형들의 메모리를 사용하여 구현될 수 있다. 메모리(105)는 처리 시스템(100)에서 구현된 처리 유닛들의 외부에 구현되므로 외부 메모리로 지칭된다. 처리 시스템(100)은 또한 메모리(105)와 같은 처리 시스템(100)에서 구현되는 엔티티들 간의 통신을 지원하기 위한 버스(110)를 포함한다. 처리 시스템(100)의 일부 실시예들은 명료화를 위해 도 1에 도시되지 않은, 다른 버스들, 브리지들, 스위치들, 라우터들 등을 포함한다.
본원에서 설명되는 기법들은 상이한 실시예들에서, 다양한 병렬 프로세서들(예를 들어, 벡터 프로세서들, 그래픽 처리 유닛(GPU)들, 범용 GPU(general-purpose GPU, GPGPU)들, 비스칼라 프로세서들, 고도의 병렬 프로세서들, 인공 지능(AI) 프로세서들, 추론 엔진들, 머신 러닝 프로세서들, 다른 멀티스레드 처리 유닛들 등) 중 임의의 것에서 채용된다. 도 1은 일부 실시예들에 따른, 병렬 프로세서, 그리고 특히 그래픽 처리 유닛(GPU)(115)의 예를 도시한다. 그래픽 처리 유닛(GPU)(115)은 디스플레이(120) 상에 제시하기 위한 이미지들을 렌더링한다. 예를 들어, GPU(115)는 객체들을 렌더링하여 디스플레이(120)에 제공되는 픽셀들의 값들을 생성하며, 이는 픽셀 값들을 사용하여 렌더링된 객체들을 나타내는 이미지를 디스플레이한다. GPU(115)는 명령어들을 동시에 또는 병렬로 실행하는 복수의 컴퓨트 유닛(compute unit, CU)들(121, 122, 123)(본원에서 집합적으로 "컴퓨트 유닛들(121-123)"로 지칭됨)을 구현한다. 일부 실시예들에서, 컴퓨트 유닛들(121-123)은 하나 이상의 단일 명령어 다중 데이터(single-instruction-multiple-data, SIMD) 유닛을 포함하고, 컴퓨트 유닛들(121-123)은 작업 그룹 프로세서들, 셰이더 어레이들, 셰이더 엔진들 등으로 집성된다. GPU(115)에서 구현되는 컴퓨트 유닛(121-123)의 수는 설계 선택의 문제이고, GPU(115)의 일부 실시예들은 도 1에 도시된 것보다 더 많거나 더 적은 컴퓨트 유닛을 포함한다. 컴퓨트 유닛들(121-123)은 본원에서 논의된 바와 같이, 그래픽 파이프라인을 구현하는 데 사용될 수 있다. GPU(115)의 일부 실시예들은 범용 컴퓨팅에 사용된다. GPU(115)는 메모리(105)에 저장된 프로그램 코드(125)와 같은 명령어들을 실행하고, GPU(115)는 실행된 명령어들의 결과들과 같은 정보를 메모리(105)에 저장한다.
처리 시스템(100)은 또한 버스(110)에 연결되고 이에 따라 버스(110)를 통해 GPU(115) 및 메모리(105)와 통신하는 중앙 처리 장치(CPU)(130)를 포함한다. CPU(130)는 명령어들을 동시에 또는 병렬로 실행하는 복수의 프로세서 코어들(131, 132, 133)(본원에서 집합적으로 "프로세서 코어들(131- 133)"로 지칭됨)을 구현한다. CPU(130)에서 구현되는 프로세서 코어들(131- 133)의 수는 설계 선택의 문제이고, 일부 실시예들은 도 1에 도시된 것보다 더 많거나 더 적은 프로세서 코어를 포함한다. 프로세서 코어들(131- 133)은 메모리(105)에 저장된 프로그램 코드(135)와 같은 명령어들을 실행하고, CPU(130)는 실행된 명령어들의 결과들과 같은 정보를 메모리(105)에 저장한다. CPU(130)는 또한 GPU(115)에 대한 드로우 콜들(draw calls)을 발행함으로써 그래픽 처리를 개시할 수도 있다. CPU(130)의 일부 실시예들은 명령어들을 동시에 또는 병렬로 실행할 수 있는 다수의 프로세서 코어들(명료화를 위해 도 1에 도시되지 않음)을 구현한다.
입력/출력(I/O) 엔진(145)은 디스플레이(120)와 연관된 입력 또는 출력 동작들, 뿐만 아니라 키보드들, 마우스들, 프린터들, 외부 디스크들 등과 같은 처리 시스템(100)의 다른 요소들도 핸들링한다. I/O 엔진(145)은 I/O 엔진(145)이 메모리(105), GPU(115) 또는 CPU(130)와 통신하도록 버스(110)에 결합된다. 도시된 실시예에서, I/O 엔진(145)은 CD(compact disk), DVD(digital video disc) 등과 같은 비일시적인 컴퓨터 판독가능 매체를 사용하여 구현되는 외부 저장 구성요소(150) 상에 저장된 정보를 판독한다. I/O 엔진(145)은 또한 GPU(115) 또는 CPU(130)에 의한 처리 결과들과 같은 정보를 외부 저장 구성요소(150)에 기록할 수 있다.
처리 시스템(100)은 파이프라인의 다수의 스테이지들에서 명령어들을 실행하기 위한 파이프라인 회로부를 구현한다. 파이프라인 회로부는 컴퓨트 유닛들(121-123) 또는 프로세서 코어들(131-133)의 일부 실시예들에서 구현된다. 일부 실시예들에서, 파이프라인 회로부는 버텍스 셰이더들, 헐 셰이더들, 도메인 셰이더들, 지오메트리 셰이더들, 및 픽셀 셰이더들을 포함하지만 이에 제한되지 않는 상이한 유형들의 셰이더들을 실행하는 그래픽 파이프라인을 구현하는 데 사용된다. 처리 시스템(100)의 일부 실시예들은 하나 이상의 프리미티브를 포함하는 스레드 그룹들을 론칭하는 헐 셰이더 회로부를 포함한다. 예를 들어, GPU(115) 내의 컴퓨트 유닛들(121-123)은 본원에서 논의된 바와 같이, 헐 셰이더 회로부뿐만 아니라 다른 셰이더들 및 웨이브 론치들의 스로틀링을 위한 회로부를 구현하는 데 사용될 수 있다. 헐 셰이더 회로부는 또한, 프리미티브들의 세부 분할들을 나타내는 테셀레이션 팩터들을 생성한다. 처리 시스템(100) 내의 스로틀링 회로부는 테셀레이션 팩터들에 기초하여 도메인 셰이더에 대한 프리미티브 론치 시간 간격을 추정하고, 도메인 셰이더의 레이턴시 및 헐 셰이더 레이턴시에 기초하여 헐 셰이더 회로부로부터의 스레드 그룹들의 론칭을 선택적으로 스로틀링한다. 일부 경우들에서, 스로틀링 회로부는 버퍼로부터 스레드 그룹을 론칭하는 것에 응답하여 증분되는 제1 카운터 및 도메인 셰이더의 측정된 레이턴시에 기초하여 제1 카운터를 수정하는 제2 카운터를 포함한다.
도 2는 일부 실시 예들에 따른 미리 결정된 해상도로 3차원(3D) 장면들의 래스터화된 이미지들을 생성하도록 고차 지오메트리 프리미티브들을 처리 가능한 그래픽 파이프라인(200)을 도시한다. 그래픽 파이프라인(200)은 도 1에 도시된 처리 시스템(100)의 일부 실시예들에서 구현된다. 그래픽 파이프라인(200)의 도시된 실시예는 DX11 사양에 따라 구현된다. 그래픽 파이프라인(200)의 다른 실시예들은 Vulkan, Metal, DX12 등과 같은 다른 애플리케이션 프로그래밍 인터페이스(application programming interface, API)들에 따라 구현된다. 그래픽 파이프라인(200)은 래스터화 이전에 그래픽 파이프라인(200)의 부분들을 포함하는 지오메트리 처리부(201) 및 래스터화 이후에 그래픽 파이프라인(200)의 부분들을 포함하는 픽셀 처리부(202)로 세부 분할된다.
그래픽 파이프라인(200)은 버퍼들을 구현하고 버텍스 데이터, 텍스처 데이터 등을 저장하는 데 사용되는 하나 이상의 메모리 또는 캐시의 계층 구조와 같은 저장 자원들(205)에 액세스할 수 있다. 도시된 실시예에서, 저장 자원들(205)은 데이터를 저장하는 데 사용되는 로드 데이터 저장(load data store, LDS)(206) 회로부, 및 그래픽 파이프라인(200)에 의한 렌더링 동안 사용되는 레지스터 값들을 저장하기 위한 벡터 범용 레지스터(vector general-purpose register, VGPR)들을 포함한다. 저장 자원들(205)은 도 1에 도시된 시스템 메모리(105)의 일부 실시예들을 사용하여 구현된다.
입력 어셈블러(210)는 장면의 모델의 부분들을 나타내는 객체들을 정의하기 위해 사용되는 저장 자원들(205)로부터의 정보에 액세스한다. 프리미티브의 예는 도 2에서 삼각형(211)으로서 도시되지만, 그래픽 파이프라인(200)의 일부 실시예들에서 다른 유형들의 프리미티브들이 처리된다. 삼각형(203)은 하나 이상의 에지(214)에 의해 연결되는 하나 이상의 버텍스(212)를 포함한다(명료화를 위해 도 2에는 각각 하나만 도시됨). 버텍스들(212)은 그래픽 파이프라인(200)의 지오메트리 처리부(201) 동안 세이딩된다.
도시된 실시예에서 소프트웨어로 구현되는 버텍스 셰이더(215)는 논리적으로, 프리미티브의 단일 버텍스(212)를 입력으로서 수신하고 단일 버텍스를 출력한다. 버텍스 셰이더(215)와 같은 셰이더들의 일부 실시예들은 다수의 버텍스들이 동시에 처리되도록 대량의 단일 명령어 다중 데이터(SIMD) 처리를 구현한다. 그래픽 파이프라인(200)은 그래픽 파이프라인(200)에 포함된 모든 셰이더들이 공유되는 대량의 SIMD 컴퓨터 장치들 상에서 동일한 실행 플랫폼을 갖도록 통합 셰이더 모델을 구현한다. 이에 따라, 버텍스 셰이더(215)를 포함한 셰이더들은 본 명세서에서 통합 셰이더 풀(216)로서 지칭되는 자원들의 공통 세트를 사용하여 구현된다.
헐 셰이더(218)는 입력 고차 패치들 또는 입력 패치들을 정의하는 데 사용되는 제어 지점들에 대해 동작한다. 헐 셰이더(218)는 테셀레이션 팩터들 및 다른 패치 데이터, 이를테면 헐 셰이더(218)에서 처리되는 패치들의 제어 지점들을 출력한다. 테셀레이션 팩터들은 저장 자원들(205)에 저장되어서, 그래픽 파이프라인(200)에서 다른 엔티티들에 의해 액세스될 수 있다. 일부 실시예들에서, 헐 셰이더(218)에 의해 생성되는 프리미티브들은 테셀레이터(220)에 제공된다. 테셀레이터(220)는 헐 셰이더(218)로부터 객체들(패치들과 같은)을 수신하고 예를 들어, 헐 셰이더(218)에 의해 생성되는 테셀레이션 팩터들에 기초하여 입력 객체들을 테셀레이팅함으로써, 입력 객체에 대응하는 프리미티브들을 식별하는 정보를 생성한다. 테셀레이션은 패치들과 같은 입력 고차 프리미티브들을, 예를 들어, 테셀레이션 처리에 의해 생성되는 프리미티브들의 세분성(granularity)을 특정하는 테셀레이션 팩터들에 의해 표시되는 바에 따라, 더 미세한 수준들의 디테일을 나타내는 보다 저차 출력 프리미티브들의 세트로 세부 분할한다. 이에 따라, 장면의 모델은 (메모리 또는 대역폭을 절감하기 위해) 보다 적은 수의 고차 프리미티브들에 의해 나타내어지고, 추가적인 디테일들은 보다 고차 프리미티브를 테셀레이팅함으로써 추가된다.
도메인 셰이더(224)는 도메인 위치 및 (선택적으로) 다른 패치 데이터를 입력한다. 도메인 셰이더(224)는 제공되는 정보를 조작하고 입력 도메인 위치 및 다른 정보에 기초하여 출력할 하나의 버텍스를 생성한다. 도시된 실시예에서, 도메인 셰이더(224)는 삼각형들(211) 및 테셀레이션 팩터들에 기초하여 프리미티브들(222)을 생성한다. 도메인 셰이더(224)는 처리를 완료하는 것에 응답하여 프리미티브들(222)을 론칭한다. 지오메트리 셰이더(226)는 도메인 셰이더(224)로부터 입력 프리미티브를 수신하고, 입력 프리미티브에 기초하여 지오메트리 셰이더(226)에 의해 생성되는 (입력 프리미티브당) 네 개 이하의 프리미티브들을 출력한다. 도시된 실시예에서, 지오메트리 셰이더(226)는 테셀레이팅된 프리미티브(222)에 기초하여 출력 프리미티브들(228)을 생성한다.
프리미티브의 하나의 스트림은 하나 이상의 스캔 컨버터(230)에 제공되고, 일부 실시예들에서, 프리미티브들의 최대 네 개의 스트림들이 저장 자원들(205)에서의 버퍼들에 연쇄될 수 있다. 스캔 컨버터(230)는 셰이딩 동작들 및 클립핑(clipping), 원근 분할(perspective dividing), 시저링(scissoring) 및 뷰포트 선택(viewport selection) 등과 같은 다른 동작들을 수행한다. 스캔 컨버터(230)는 그래픽 파이프라인(200)의 픽셀 처리 부분(202)에서 후속하여 처리되는 픽셀들의 세트(232)를 생성한다.
도시된 실시예에서, 픽셀 셰이더(234)는 (예를 들어, 픽셀들의 세트(232)를 포함하는) 픽셀 흐름을 수신하고, 입력 픽셀 흐름에 응답하여 제로 또는 다른 픽셀 흐름을 출력한다. 출력 병합기 블록(236)은 픽셀 셰이더(234)로부터 수신되는 픽셀들에 관한 블렌딩, 깊이, 스텐실(stencil), 또는 다른 동작들을 수행한다.
그래픽 파이프라인(200)에서의 셰이더들 중 일부 또는 전부는 저장 자원들(205)에 저장되는 텍스처 데이터를 사용하여 텍스처 맵핑을 수행한다. 예를 들어, 픽셀 셰이더(234)는 저장 자원(205)으로부터 텍스처 데이터를 판독하고 텍스처 데이터를 사용하여 하나 이상의 픽셀을 셰이딩할 수 있다. 이어서, 셰이딩된 픽셀들은 사용자에게 제시하기 위해 디스플레이에 제공된다.
도 3은 일부 실시예들에 따른, 헐 셰이더 회로부에 의해 론칭되는 스레드 그룹들을 선택적으로 스로틀링하는 처리 시스템(300)의 제1 부분의 블록도이다. 처리 시스템의 제1 부분(300)은 도 1에 도시된 처리 시스템(100) 및 도 2에 도시된 그래픽 파이프라인(200)에서의 일부 실시예들에서 구현된다.
버퍼들의 세트(301, 302, 303, 304)(집합적으로 본원에서 "버퍼들(301-304)"로 지칭됨)는 도 2에 도시된 헐 셰이더(218)와 같은 헐 셰이더 회로부에 의해 론칭되는 스레드 그룹들과 연관된 메타데이터를 저장하는 데 사용된다. 버퍼들(301-304)은 패치들과 같은 프리미티브들의 하나 이상의 웨이브를 포함하는 스레드 그룹들을 론칭하는 상이한 헐 셰이더 회로부(명료화를 위해 도 3에 도시되지 않음)와 연관된다. 컴퓨트 유닛 또는 SIMD 상에서 실행하기 위해 스레드 그룹을 론칭하는 것에 응답하여, 헐 셰이더 회로부는 스레드 그룹과 연관된 메타데이터를 버퍼들(301-304) 중 대응하는 버퍼에 제공한다. 이에 따라, 버퍼들(301-304) 내의 각 엔트리는 대응하는 스레드 그룹에 대한 메타데이터를 포함한다.
버퍼들(301-304)은 헐 셰이더에서 대응하는 스레드 그룹들을 처리하기 위한 측정된 시간 간격들 또는 레이턴시들을 나타내는 값들을 갖는 카운터들의 세트들(311, 312, 313, 314)(집합적으로 본원에서 "카운터 세트들(311-314)"로 지칭됨)과 연관된다. 카운터 세트들(311-314) 내의 카운터들 각각은 버퍼들(301-304) 중 대응하는 버퍼 내의 엔트리와 연관된다. 예를 들어, 카운터 세트(311) 내의 제1 카운터는 버퍼(301) 내의 제1 엔트리와 연관된다. 카운터는 헐 셰이더 회로부가 스레드 그룹을 론칭하는 것에 응답하여 버퍼들(301-304) 중 하나 내의 대응하는 엔트리에 메타데이터가 추가될 때 카운트(예를 들어, 증분 또는 감분)하기 시작한다.
버퍼들의 다른 세트(321-324)는 대응하는 스레드 그룹이 처리를 완료했다는 것을 나타내는 값들을 저장하는 엔트리들을 갖는다. 예를 들어, 버퍼(321) 내의 엔트리는 대응하는 헐 셰이더 회로부에 의해 론칭되는 스레드 그룹이 컴퓨트 유닛 상에서 실행을 완료하는 것에 응답하여 기록된다. 버퍼 내의 엔트리는 카운터 세트들(311-314) 중 하나 내의 대응하는 카운터에 의한 카운팅을 중지하는 데 사용된다. 이에 따라, 카운터는 예를 들어, 스레드 그룹을 처리하는 데 사용되는 사이클의 수로서, 스레드 그룹의 측정된 레이턴시를 나타내는 값을 보유한다. 카운터 세트들(311-314) 내의 카운터들의 값들의 서브세트들은 도 4와 관련하여 본원에서 논의된 바와 같이, 노드 1을 통해 처리 시스템(300)의 제2 부분에 제공된다.
아비터(330)는 스레드 그룹들이 헐 셰이더 회로부에 의해 디스패칭되는 순서로 버퍼들(301-304)로부터 스레드 그룹 메타데이터를 선택한다. 예를 들어, 제1 스레드 그룹이 버퍼(301)와 연관된 헐 셰이더 회로부에 의해 디스패칭되고 제2 스레드 그룹이 버퍼(302)와 연관된 헐 셰이더 회로부에 의해 후속하여 디스패칭된다면, 아비터(330)는 버퍼(302)로부터 스레드 그룹 메타데이터를 선택하기 전에 버퍼(301)로부터 스레드 그룹 메타데이터를 선택한다. 아비터(330)는 도 4와 관련하여 본원에서 논의된 바와 같이, 스레드 그룹과 연관된 메타데이터를 노드(2)를 통해 스레드 그룹들에 대한 테셀레이션 팩터들을 페칭하는 회로부에 제공한다.
도 4는 일부 실시예들에 따른, 헐 셰이더 회로부에 의해 론칭되는 스레드 그룹들을 선택적으로 스로틀링하는 처리 시스템(300)의 제2 부분의 블록도이다. 처리 시스템의 제2 부분(300)은 도 1에 도시된 처리 시스템(100) 및 도 2에 도시된 그래픽 파이프라인(200)에서의 일부 실시예들에서 구현된다.
도 4에 도시된 처리 시스템(300)의 제2 부분은 메모리(410)로부터 테셀레이션 팩터를 페칭하고, 도 3에 도시된 아비터(330)로부터 수신된 테셀레이션 팩터들 및 메타데이터에 대한 처리를 수행하는 회로부(405)를 포함한다. 아비터(330)로부터 수신된 메타데이터의 처리는 스레드 그룹들 내에 포함된 프리미티브들(예를 들어, 패치들)을 식별하기 위해 수신된 스레드 그룹들을 파싱하는 것을 포함한다. 그 후 패치들, 테셀레이션 팩터들, 및 연관된 메타데이터는 버퍼(415)에 제공된다. 버퍼(415) 내의 각 엔트리는 패치 및 이의 연관된 테셀레이션 팩터(들) 및 메타데이터를 포함한다. 그 후, 버퍼(415)의 엔트리들 내의 정보는 하나 이상의 테셀레이터(예를 들어, 도 2에 도시된 테셀레이터(220)) 및 도메인 셰이더(예를 들어, 도 2에 도시된 도메인 셰이더(224))와 연관된 버퍼들을 출력하기 위해 정보를 분배하는 패치 분배기(420)에 제공된다.
회로부(405)는 또한, 스레드 그룹 내의 프리미티브들 또는 패치들에 대한 테셀레이션 팩터들을 헐 셰이더 스로틀링 회로부(430) 내의 레지스터들(425)에 제공한다. 레지스터들(425)의 세트 내의 각 레지스터는 버퍼(415)의 대응하는 엔트리 내의 스레드 그룹에 대한 패치들에 적용되는 테셀레이션 팩터들의 값들에 기초하여 패치로부터 생성된 프리미티브(예를 들어, 삼각형)의 수의 추정치를 저장한다. 헐 셰이더 스로틀링 회로부(430)는 또한, 헐 셰이더로부터 론칭되는 스레드 그룹들을 스로틀링하는 데 사용되는 두 개의 카운터들을 포함한다. 제1 카운터(435)는 도메인 셰이더 회로부에 대한 프리미티브 론치 시간 간격, 예를 들어, 헐 셰이더에 의해 제공된 하나 이상의 프리미티브와 연관된 프리미티브들의 세트를 처리하고 론칭하는 데 도메인 셰이더에 의해 사용되는 시간 간격을 나타내는 총 카운트의 값을 갖는다. 제1 카운터(435)는 패치(및 연관된 테셀레이션 팩터 및 메타데이터)를 버퍼(415)로부터 패치 분배기(420)에 제공하는 것에 응답하여 증분된다. 일부 실시예들에서, 제1 카운터(435)는 레지스터들(425)의 세트 내의 대응하는 레지스터에 의해 나타내어지는 양만큼 증분된다. 예를 들어, 제1 카운터(435)는 버퍼(415) 내의 엔트리로부터 제공된 패치에 대응하는 레지스터 내의 프리미티브 또는 패치의 수만큼 증분될 수 있다.
헐 셰이더 스로틀링 회로부(430) 내의 제2 카운터(440)는 패치에 대한 측정된 다운스트림 레이턴시(예를 들어, 도메인 셰이더에 의해 프리미티브를 처리하기 위한 시간 간격)와 테셀레이션 팩터들에 의해, 예를 들어, 테셀레이션 팩터들에 기초하여 패치로부터 생성된 프리미티브의 수에 의해, 나타내어지는 예측된 다운스트림 프리미티브 론치 시간 간격 간의 차이를 나타내는 오류 카운트를 나타내는 값을 갖는다. 일부 실시예들에서, 제2 카운터(440)는 제2 카운터(440)가 제로와 같은 미리 결정된 값으로 카운트 다운하기 전 또는 후에 스레드 그룹과 연관된 판독 인에이블 신호가 도달하는지 여부에 기초하여 증분되거나 감분된다. 본원에서 논의된 바와 같이, 제2 카운터(440) 내의 값은 제1 카운터(435) 내의 값이 테셀레이션 후에 프리미티브들을 처리하는 데 도메인 셰이더에 의해 요구되는 프리미티브 론치 시간 간격을 나타내도록, 측정된 도메인 셰이더 레이턴시에 기초하여 제1 카운터(435)를 수정하는 데 사용된다.
헐 셰이더 스로틀링 회로부(430)는 헐 셰이더로부터 론칭되는 스레드 그룹들의 측정된 레이턴시들을 나타내는 카운터들의 값들에 기초하여 헐 셰이더의 레이턴시를 결정한다. 카운터들의 값들은 헐 셰이더 내의 프리미티브들, 예를 들어, 도 3에 도시된 카운터 세트들(311-314) 내의 카운터들의 값들을 처리하는 셰이더 엔진들과 연관된 레지스터들로부터 (노드 1을 통해) 수신된다. 도시된 실시예에서, 카운터들의 값들은 대응하는 스레드 그룹들을 처리하는 데 요구되는 클록 사이클의 수로서 레이턴시들을 나타낸다. 비교 회로부(445)는 헐 셰이더에 의해 론칭되는 마지막 여덟 개의 스레드 그룹들에 대한 여덟 개의 카운터 값들과 같은 미리 결정된 수의 카운터 값들을 검색하고, 검색된 값들을 사용하여 헐 셰이더에 대한 평균 레이턴시를 결정한다. 레이턴시 비교 회로부(445)는 헐 셰이더의 평균 레이턴시를 제1 카운터(435) 내의 총 카운트에 의해 나타내어지는 도메인 셰이더의 프리미티브 론치 시간 간격과 비교한다. 그 후, 헐 셰이더 스로틀링 회로부(430)는 본원에서 논의된 바와 같이, 비교에 기초하여 헐 셰이더 회로부로부터의 스레드 그룹들의 론칭을 선택적으로 스로틀링한다.
도 5는 일부 실시예들에 따른, 총 카운트 및 오류 카운트를 사용하여 도메인 셰이더에 대한 프리미티브 론치 시간 간격들을 추정하는 방법(500)의 제1 부분의 흐름도이다. 방법(500)은 도 1에 도시된 처리 시스템(100), 도 2에 도시된 그래픽 파이프라인(200), 및 도 3 및 도 4에 도시된 처리 시스템(300)의 일부 실시예들에서 구현된다. 도시된 실시예에서, 방법(500)을 구현하는 데 스로틀링 회로부가 사용된다.
블록(505)에서, 스로틀링 회로부는 스레드 그룹에 대한 기록 데이터가 도 4에 도시된 버퍼(415)와 같은 FIFO 버퍼에 기록되기 전에 이를 인터셉트한다. 스로틀링 회로는 이 정보를 사용하여, 스레드 그룹들과 연관된 테셀레이션 팩터들(tf1, tf2)에 기초하여 생성되는 프리미티브의 수를 추정한다. 예를 들어, 프리미티브의 수는 다음과 같다:
2*내부_tf1*내부_tf2 (쿼드 패치에 대해)
플로어(1.5*내부_tf1^2) (삼각형에 대해)
팩터1*팩터2 (등선에 대해)
그 후, 프리미티브의 수는 스레드 그룹 데이터를 저장하는 데 사용되는 FIFO 버퍼 내의 엔트리에 대응하는 레지스터, 예를 들어, 도 4에 도시된 레지스터들(425) 중 하나에 저장된다.
블록(510)에서, 총 카운트를 나타내는 제1 카운터는 대응하는 스레드 그룹이 기록되는 것에 응답하여 프리미티브의 수만큼 증분된다. 제1 판독 동작 시, 오류 카운트를 나타내는 제2 카운터에는 버퍼 내의 현재 위치의 프리미티브의 수와 동일한 값이 로딩된다.
블록(515)에서, 제1 카운터(총 카운트) 및 제2 카운터(오류 카운트)에 대해 카운트 다운(또는 감분)이 시작된다. 일부 실시예들에서, 제1 및 제2 카운터들은 테셀레이터의 프리미티브 레이트와 테셀레이터의 수의 곱에 의해 카운트 다운한다.
결정 블록(520)에서, 스로틀링 회로부는 스로틀링 회로부가 판독 인에이블 신호를 수신하기 전에 제2 카운터(오류 카운트)의 값이 제로에 도달했는지 여부를 결정한다. 그렇지 않다면, 방법(500)은 블록(540)으로 진행한다. 제2 카운터가 판독 인에이블 신호의 수신 이전에 제로에 도달한다면(이는 도메인 셰이더에 대한 프리미티브 론치 시간 간격이 과소 추정되었음을 나타낸다), 방법(500)은 블록(525)으로 진행한다.
블록(525)에서, 스로틀링 회로부는 판독 인에이블 신호가 수신될 때까지, 각 클록 사이클 상에서 제2 카운터(오류 카운트)를 증분시킨다. 제2 카운터의 값이 최대 값에 도달한다면, 제2 카운터의 값은 제2 카운터가 롤 오버되지 않도록 최대 값으로 클램핑된다. 블록(530)에서, 스로틀링 회로부는 판독 인에이블 신호를 수신한다. 블록(535)에서, 스로틀링 회로부는 제2 카운터의 값을 제1 카운터의 현재 값에 가산한다. 그 후, 방법(500)은 블록(515)으로 진행한다.
블록(540)에서, 스로틀링 회로부는 제2 카운터의 값이 제로에 도달하기 전에 판독 인에이블 신호를 수신한다. 그 후, 방법(500)은 블록(540)을 도 6의 결정 블록(605)에 연결하는 노드 1로 진행한다.
도 6은 일부 실시예들에 따른, 총 카운트 및 오류 카운트를 사용하여 도메인 셰이더에 대한 프리미티브 론치 시간 간격들을 추정하는 방법(500)의 제2 부분의 흐름도이다. 결정 블록(605)은 노드 1을 통해 도 5의 블록(540)에 연결된다.
결정 블록(605)에서, 스로틀링 회로부는 판독 인에이블 신호가 수신될 때 오류 카운트가 제로와 같은지 여부를 결정한다. 그렇다면, 방법(500)은 블록(610)으로 진행하고, 다음 위치가 제2 카운터로 로딩된다. 그 후, 방법(500)은 노드 2를 통해 도 5의 블록(515)으로 진행한다.
판독 인에이블 신호가 수신될 때 오류 카운트가 제로와 같지 않다면, 즉, 오류 카운트의 값이 제로보다 크다면, 방법(500)은 블록(615)으로 진행한다. 제로보다 큰 오류 카운트는 도메인 셰이더에 대한 프리미티브 론치 시간 간격이 과대 추정되었음을 나타낸다. 이에 따라, 스로틀링 회로부는 블록(615)에서 제2 카운터 내의 값을 제1 카운터 내의 값(총 카운트)으로부터 감산한다. 그 후, 방법(500)은 노드 2를 통해 도 5의 블록(515)으로 진행한다.
이에 따라, 제1 카운터는 스레드 그룹을 기록하는 것과 후속 판독 인에이블 신호를 수신하는 것 사이의 사이클의 수를 나타내는 값을 갖는다. 이에 따라, 제1 카운터 내의 총 카운트는 테셀레이션 후에 생성되는 스레드 그룹들에서의 프리미티브들을 처리하는 데 요구되는 총 도메인 셰이더 시간/레이턴시를 나타낸다. 이에 따라, 총 카운트는 도메인 셰이더 레이턴시를 헐 셰이더 레이턴시와 비교하고, 헐 셰이더와 도메인 셰이더에서의 스레드 그룹 소비의 레이트 사이의 밸런스를 유지하기 위해 헐 셰이더로부터의 파들의 론치를 선택적으로 스로틀링하기 위해 사용될 수 있다.
도 7은 일부 실시예들에 따른, 헐 셰이더로부터 웨이브 론치들을 선택적으로 스로틀링하는 방법(700)의 흐름도이다. 방법(700)은 도 1에 도시된 처리 시스템(100), 도 2에 도시된 그래픽 파이프라인(200), 및 도 3 및 도 4에 도시된 처리 시스템(300)의 일부 실시예들에서 구현된다. 도시된 실시예에서, 방법(500)을 구현하는 데 스로틀링 회로부가 사용된다.
블록(705)에서, 스로틀링 회로부는 도메인 셰이더에 대한 프리미티브 론치 시간 간격을 나타내는, 스로틀링 회로부에서의 제1 카운터에 의해 나타내어지는 총 카운트를 결정한다. 블록(710)에서, 스로틀링 회로부는 예를 들어, 본원에서 논의된 바와 같이, 셰이더 엔진들에 의해 처리된 스레드 그룹들과 연관된 카운터들의 값들을 사용하여, 평균 헐 셰이더 레이턴시를 결정한다.
결정 블록(715)에서, 스로틀링 회로부는 총 카운트와 헐 셰이더 레이턴시를 비교하고, 총 카운트가 헐 셰이더 레이턴시보다 여덟 배 초과인지 여부를 결정한다. 그렇다면, 비교는 헐 셰이더가 도메인 셰이더 앞에서 실행되고 있고 스로틀링되어야 함을 나타낸다. 이에 따라, 방법(700)은 블록(720)으로 진행하고, 헐 셰이더는 각 셰이더 엔진마다 두 개의 인-플라이트 스레드 그룹들을 허용하도록 스로틀링된다. 총 카운트가 헐 셰이더 레이턴시의 여덟 배 이하라면, 방법(700)은 결정 블록(725)으로 진행한다.
결정 블록(725)에서, 스로틀링 회로부는 총 카운트와 헐 셰이더 레이턴시를 비교하고, 총 카운트가 헐 셰이더 레이턴시보다 네 배 초과인지 여부를 결정한다. 그렇다면, 비교는 헐 셰이더가 도메인 셰이더 앞에서 실행되고 있지만, 총 카운트가 헐 셰이더 레이턴시의 여덟 배 초과인 경우만큼 앞서는 것은 아님을 나타낸다. 그럼에도 불구하고, 헐 셰이더는 스로틀링되어야 한다. 이에 따라, 방법(700)은 블록(730)으로 진행하고, 헐 셰이더는 각 셰이더 엔진마다 네 개의 인-플라이트 스레드 그룹들을 허용하도록 스로틀링된다. 총 카운트가 헐 셰이더 레이턴시의 네 배 이하라면, 방법(700)은 결정 블록(735)으로 진행한다.
결정 블록(735)에서, 스로틀링 회로부는 총 카운트와 헐 셰이더 레이턴시를 비교하고, 총 카운트가 헐 셰이더 레이턴시보다 두 배 초과인지 여부를 결정한다. 그렇다면, 비교는 헐 셰이더가 도메인 셰이더 앞에서 실행되고 있지만, 총 카운트가 헐 셰이더 레이턴시의 두 배 초과인 경우만큼 앞서는 것은 아님을 나타낸다. 그럼에도 불구하고, 헐 셰이더는 스로틀링되어야 한다. 이에 따라, 방법(700)은 블록(740)으로 진행하고, 헐 셰이더는 각 셰이더 엔진마다 여덟 개의 인-플라이트 스레드 그룹들을 허용하도록 스로틀링된다. 총 카운트가 헐 셰이더 레이턴시의 두 배 이하라면, 방법(700)은 결정 블록(745)으로 진행하고, 헐 셰이더의 스로틀링이 디스에이블된다.
컴퓨터 판독가능 저장 매체는 컴퓨터 시스템에 명령어들 및/또는 데이터를 제공하기 위해 사용 동안 컴퓨터 시스템에 의해 액세스가능한 임의의 비일시적인 저장 매체, 또는 비일시적인 저장 매체들의 조합을 포함할 수 있다. 이러한 저장 매체들은 광학 매체들(예를 들어, CD(compact disc), DVD(digital versatile disc), 블루-레이 디스크), 자기 매체들(예를 들어, 플로피 디스크, 자기 테이프 또는 자기 하드 드라이브), 휘발성 메모리(예를 들어, 랜덤 액세스 메모리(RAM) 또는 캐시), 비휘발성 메모리(예를 들어, 판독 전용 메모리(ROM) 또는 플래시 메모리), 또는 미세 전자 기계 시스템들(MEMS) 기반 저장 매체들을 포함할 수 있으나, 이에 제한되는 것은 아니다. 이러한 저장 매체들은 광학 매체들(예를 들어, CD(compact disc), DVD(digital versatile disc), 블루-레이 디스크), 자기 매체들(예를 들어, 플로피 디스크, 자기 테이프 또는 자기 하드 드라이브), 휘발성 메모리(예를 들어, 랜덤 액세스 메모리(RAM) 또는 캐시), 비휘발성 메모리(예를 들어, 판독 전용 메모리(ROM) 또는 플래시 메모리), 또는 미세 전자 기계 시스템들(MEMS) 기반 저장 매체들을 포함할 수 있으나, 이에 제한되는 것은 아니다.
일부 실시예들에서, 위에서 설명된 기법들의 특정 양태들은 소프트웨어를 실행하는 처리 시스템의 하나 이상의 프로세서에 의해 구현될 수 있다. 소프트웨어는 비일시적인 컴퓨터 판독가능 저장 매체 상에 저장되거나 그 외 유형적으로 구현되는 실행 가능한 명령어들의 하나 이상의 세트를 포함한다. 소프트웨어는 하나 이상의 프로세서에 의해 실행될 때, 하나 이상의 프로세서를 조작하여 상술된 기법들의 하나 이상의 양태를 수행하는 명령어들 및 특정 데이터를 포함할 수 있다. 비일시적 컴퓨터 판독가능 저장 매체는 예를 들어, 자기 또는 광학 디스크 저장 디바이스, 고체 상태 저장 디바이스들 이를테면 플래시 메모리, 캐시, 랜덤 액세스 메모리(RAM) 또는 다른 비휘발성 메모리 디바이스 또는 디바이스들 등을 포함할 수 있다. 비 일시적인 컴퓨터 판독가능 저장 매체 상에 저장된 실행 가능한 명령어들은 소스 코드, 어셈블리 언어 코드, 객체 코드, 또는 하나 이상의 프로세서에 의해 해석되거나 그 외 실행 가능한 다른 명령어 포맷으로 있을 수 있다.
일반적인 설명으로 상술된 모든 동작들 또는 요소들이 요구되지는 않을 수 있다는 것, 특정 동작 또는 디바이스의 일부가 요구되지 않을 수 있다는 것, 그리고 설명된 동작들 또는 요소들에 더하여, 하나 이상의 추가 동작이 수행되거나 요소들이 포함될 수 있다는 것에 유념한다. 더 나아가, 동작들이 나열된 순서는 반드시 이것들이 수행되는 순서는 아니다. 또한, 개념들은 특정 실시예들을 참조하여 설명되었다. 그러나, 당업자는 아래 청구항들에 제시된 바에 따라 본 개시의 범위로부터 벗어나지 않고 다양하게 수정 및 변경될 수 있다는 것을 이해한다. 따라서, 본 명세서 및 도면들은 제한적인 의미가 아닌 예시적인 의미로 여겨져야 하고, 상기한 모든 수정이 본 개시의 범위 내에 포함되는 것으로 의도된다.
혜택들, 다른 이점들 및 문제들에 대한 솔루션들이 구체적인 실시예들과 관련하여 상술되었다. 그러나, 혜택들, 이점들, 문제들에 대한 솔루션들 및 임의의 혜택, 이점, 또는 솔루션을 발생시키거나 더 확연히 드러낼 수 있는 임의의 특징(들)이 임의의 또는 모든 청구항들의 임계적, 필수적 또는 본질적 특징인 것으로 간주되지 않아야 한다. 또한, 위에서 개시된 특정 실시예들은 개시된 주제가 본 명세서에서의 교시 내용의 혜택을 받는 해당 기술분야의 통상의 기술자들에게 명백한 상이하지만 균등한 방식들로 수정 및 실시될 수 있음에 따라 단지 예시적인 것일 뿐이다. 아래 청구항들에서 설명되는 것 이외에, 제시되는 본 명세서에서의 구성 또는 설계의 세부 사항들로 제한되도록 의도되지 않는다. 이에 따라 위에서 개시된 특정 실시예들이 대체 또는 수정될 수 있고 모든 그러한 변형 예들은 개시된 주제의 범위 내인 것으로 고려된다는 것이 명백하다. 따라서, 본 명세서에서 추구되는 보호는 아래 청구항들에 제시되는 바에 따른다.

Claims (20)

  1. 장치로서,
    하나 이상의 프리미티브를 포함하는 스레드 그룹들을 론칭(launching)하고 상기 프리미티브들의 세부 분할들을 나타내는 테셀레이션 팩터들(tessellation factors)을 생성하도록 구성된 헐 셰이더 회로부(hull shader circuitry); 및
    상기 테셀레이션 팩터들에 기초하여 도메인 셰이더에 대한 프리미티브 론치 시간 간격을 추정하고 상기 프리미티브 론치 시간 간격 및 헐 셰이더의 레이턴시에 기초하여 상기 헐 셰이더 회로부로부터의 상기 스레드 그룹들의 론칭을 선택적으로 스로틀링(throttling)하도록 구성된 스로틀링 회로부를 포함하는, 장치.
  2. 제1항에 있어서,
    상기 테셀레이션 팩터들에 기초하여 상기 프리미티브들을 보다 고해상도 프리미티브들로 세부 분할하도록 구성된 테셀레이터를 더 포함하되, 상기 스로틀링 회로부는 상기 테셀레이션 팩터들에 기초하여 상기 도메인 셰이더에서 상기 보다 고해상도 프리미티브들을 처리하기 위한 사이클의 수를 추정하고 상기 사이클의 수에 기초하여 상기 스레드 그룹들에 대한 상기 도메인 셰이더에 대한 상기 프리미티브 론치 시간 간격을 추정하도록 구성된 것인, 장치.
  3. 제2항에 있어서,
    상기 헐 셰이더 회로부에 의해 론칭되는 상기 스레드 그룹들을 저장하도록 구성된 엔트리들을 포함하는 버퍼; 및
    상기 버퍼 내의 상기 엔트리들에 대응하는 레지스터들의 세트 - 상기 레지스터들의 세트는 상기 엔트리들 내의 상기 스레드 그룹들에 대해 추정된 상기 프리미티브 론치 시간 간격을 나타내는 정보를 저장함 -를 더 포함하는, 장치.
  4. 제3항에 있어서, 상기 레지스터들의 세트 내의 각 레지스터는 상기 레지스터와 연관된 상기 스레드 그룹 내의 상기 보다 고해상도 프리미티브의 수 및 상기 레지스터와 연관된 상기 스레드 그룹 내의 상기 보다 고해상도 프리미티브를 처리하는 데 요구되는 사이클의 수 중, 적어도 하나를 나타내는 정보를 저장하도록 구성된 것인, 장치.
  5. 제4항에 있어서, 상기 스로틀링 회로부는,
    상기 버퍼로부터의 스레드 그룹을 론칭하는 것에 응답하여 증분되는 제1 카운터 - 상기 제1 카운터는 상기 레지스터들의 세트 중 대응하는 레지스터에 의해 나타내어지는 양만큼 증분됨 -; 및
    상기 도메인 셰이더의 측정된 레이턴시에 기초하여 상기 제1 카운터를 수정하도록 구성된 제2 카운터를 더 포함하는 것인, 장치.
  6. 제5항에 있어서, 상기 제1 카운터는 테셀레이션 이후에 상기 도메인 셰이더가 프리미티브들을 처리하기 위한 상기 프리미티브 론치 시간 간격을 나타내는 것인, 장치.
  7. 제6항에 있어서, 상기 제2 카운터는 상기 제2 카운터가 제로로 카운트 다운하기 전 또는 후에 상기 스레드 그룹과 연관된 판독 인에이블 신호가 도달하는지 여부에 기초하여 증분되거나 감분되는 것인, 장치.
  8. 제1항에 있어서, 상기 스로틀링 회로부는 상기 헐 셰이더 회로부로부터 론칭되는 상기 스레드 그룹들 내의 프리미티브의 수들을 나타내는 카운터들의 값들에 기초하여 상기 헐 셰이더의 상기 레이턴시를 결정하도록 구성된 것인, 장치.
  9. 제8항에 있어서, 상기 스로틀링 회로부는 상기 도메인 셰이더에 대한 상기 프리미티브 론치 시간 간격과 상기 헐 셰이더의 상기 레이턴시의 비교에 기초하여 상기 헐 셰이더 회로부에 의해 론칭되는 스레드 그룹의 수를 결정하도록 구성된 것인, 장치.
  10. 방법으로서,
    헐 셰이더 회로부로부터 하나 이상의 프리미티브를 포함하는 스레드 그룹들을 론칭하는 단계;
    상기 헐 셰이더 회로부에서, 상기 프리미티브들의 세부 분할들을 나타내는 테셀레이션 팩터들을 생성하는 단계;
    상기 테셀레이션 팩터들에 기초하여 도메인 셰이더에 대한 프리미티브 론치 시간 간격을 추정하는 단계; 및
    상기 프리미티브 론치 시간 간격 및 상기 헐 셰이더 회로부의 레이턴시에 기초하여 상기 헐 셰이더 회로부로부터의 상기 스레드 그룹들의 상기 론칭을 선택적으로 스로틀링하는 단계를 포함하는, 방법.
  11. 제10항에 있어서,
    상기 테셀레이션 팩터들에 기초하여 상기 프리미티브들을 보다 고해상도 프리미티브들로 세부 분할하는 단계;
    상기 테셀레이션 팩터들에 기초하여 상기 도메인 셰이더에서 상기 보다 고해상도 프리미티브들을 처리하기 위한 사이클의 수를 추정하는 단계; 및
    상기 사이클의 수에 기초하여 상기 스레드 그룹들에 대한 상기 프리미티브 론치 시간 간격을 추정하는 단계를 더 포함하는, 방법.
  12. 제11항에 있어서,
    버퍼의 엔트리들에, 상기 헐 셰이더 회로부에 의해 론칭되는 상기 스레드 그룹들을 저장하는 단계; 및
    상기 버퍼 내의 상기 엔트리들에 대응하는 레지스터들의 세트에, 상기 엔트리들 내의 상기 스레드 그룹들에 대해 추정된 상기 프리미티브 론치 시간 간격을 나타내는 정보를 저장하는 단계를 더 포함하는, 방법.
  13. 제12항에 있어서,
    상기 레지스터들의 세트 내의 각 레지스터에, 상기 레지스터와 연관된 상기 스레드 그룹 내의 상기 보다 고해상도 프리미티브의 수 및 상기 레지스터와 연관된 상기 스레드 그룹 내의 상기 보다 고해상도 프리미티브를 처리하는 데 요구되는 사이클의 수 중, 적어도 하나를 나타내는 정보를 저장하는 단계를 더 포함하는, 방법.
  14. 제13항에 있어서,
    상기 버퍼로부터의 스레드 그룹을 론칭하는 것에 응답하여 제1 카운터를 증분하는 단계 - 상기 제1 카운터는 상기 레지스터들의 세트 중 대응하는 레지스터에 의해 나타내어지는 양만큼 증분됨 -; 및
    상기 제1 카운터를 제2 카운터에 저장된 값으로 수정하는 단계 - 상기 값은 상기 도메인 셰이더에 대한 측정된 프리미티브 론치 시간 간격에 기초하여 결정됨 -를 더 포함하는, 방법.
  15. 제14항에 있어서,
    상기 스레드 그룹을 론칭하는 것에 응답하여 상기 스레드 그룹과 연관된 판독 인에이블 신호를 수신하는 단계; 및
    상기 제2 카운터가 제로로 카운트 다운되기 전 또는 후에 상기 판독 인에이블 신호가 도달하는지 여부에 기초하여 상기 제2 카운터를 선택적으로 증분하거나 감분하는 단계를 더 포함하는, 방법.
  16. 제10항에 있어서,
    상기 헐 셰이더 회로부로부터 론칭되는 상기 스레드 그룹들 내의 프리미티브의 수들을 나타내는 카운터들의 값들에 기초하여 상기 헐 셰이더 회로부의 상기 레이턴시를 결정하는 단계를 더 포함하는, 방법.
  17. 제16항에 있어서, 상기 스레드 그룹들의 상기 론칭을 선택적으로 스로틀링하는 단계는 상기 도메인 셰이더에 대한 상기 프리미티브 론치 시간 간격과 상기 헐 셰이더 회로부의 상기 레이턴시의 비교에 기초하여 상기 헐 셰이더 회로부에 의해 론칭되는 스레드 그룹의 수를 결정하는 단계를 포함하는 것인, 방법.
  18. 장치로서,
    헐 셰이더 회로부에 의해 론칭되고 버퍼에 저장된 스레드 그룹들에 대해 추정되는 도메인 셰이더 레이턴시들을 나타내는 정보를 저장하도록 구성된 레지스터들의 세트;
    상기 버퍼로부터의 스레드 그룹을 론칭하는 것에 응답하여 증분되는 제1 카운터 - 상기 제1 카운터는 상기 레지스터들의 세트 중 대응하는 레지스터에 의해 나타내어지는 양만큼 증분됨 -;
    도메인 셰이더의 측정된 프리미티브 론치 시간 간격에 기초하여 상기 제1 카운터를 수정하도록 구성된 제2 카운터; 및
    상기 프리미티브 론치 시간 간격과 헐 셰이더의 레이턴시를 비교하도록 구성된 레이턴시 비교 회로부 - 상기 비교에 기초하여 상기 헐 셰이더 회로부로부터의 상기 스레드 그룹들의 론칭이 선택적으로 스로틀링됨 -를 포함하는, 장치.
  19. 제18항에 있어서, 상기 제1 카운터는 테셀레이션 이후에 상기 도메인 셰이더가 프리미티브들을 처리하기 위한 상기 프리미티브 론치 시간 간격을 나타내는 것인, 장치.
  20. 제19항에 있어서, 상기 제2 카운터는 상기 제2 카운터가 제로로 카운트 다운하기 전 또는 후에 상기 스레드 그룹과 연관된 판독 인에이블 신호가 도달하는지 여부에 기초하여 증분되거나 감분되는 것인, 장치.
KR1020237024083A 2020-12-15 2021-12-01 그래픽 파이프라인에서 테셀레이션 팩터에 기초한 헐셰이더 스로틀링 KR20230125231A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US17/121,965 2020-12-15
US17/121,965 US11508124B2 (en) 2020-12-15 2020-12-15 Throttling hull shaders based on tessellation factors in a graphics pipeline
PCT/US2021/061387 WO2022132435A1 (en) 2020-12-15 2021-12-01 Throttling hull shaders based on tessellation factors in a graphics pipeline

Publications (1)

Publication Number Publication Date
KR20230125231A true KR20230125231A (ko) 2023-08-29

Family

ID=81941846

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020237024083A KR20230125231A (ko) 2020-12-15 2021-12-01 그래픽 파이프라인에서 테셀레이션 팩터에 기초한 헐셰이더 스로틀링

Country Status (6)

Country Link
US (2) US11508124B2 (ko)
EP (1) EP4264534A1 (ko)
JP (1) JP2023553151A (ko)
KR (1) KR20230125231A (ko)
CN (1) CN116745801A (ko)
WO (1) WO2022132435A1 (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11069119B1 (en) * 2020-02-28 2021-07-20 Verizon Patent And Licensing Inc. Methods and systems for constructing a shader
US11508124B2 (en) * 2020-12-15 2022-11-22 Advanced Micro Devices, Inc. Throttling hull shaders based on tessellation factors in a graphics pipeline

Family Cites Families (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9659339B2 (en) * 2003-10-29 2017-05-23 Nvidia Corporation Programmable graphics processor for multithreaded execution of programs
JP4260734B2 (ja) 2004-12-21 2009-04-30 株式会社ソニー・コンピュータエンタテインメント 描画処理装置、ラスタライザ、および描画処理方法
US7890738B2 (en) * 2005-01-20 2011-02-15 International Business Machines Corporation Method and logical apparatus for managing processing system resource use for speculative execution
US20070139421A1 (en) 2005-12-21 2007-06-21 Wen Chen Methods and systems for performance monitoring in a graphics processing unit
US8355028B2 (en) 2007-07-30 2013-01-15 Qualcomm Incorporated Scheme for varying packing and linking in graphics systems
US8006070B2 (en) * 2007-12-05 2011-08-23 International Business Machines Corporation Method and apparatus for inhibiting fetch throttling when a processor encounters a low confidence branch instruction in an information handling system
US8259111B2 (en) 2008-05-30 2012-09-04 Advanced Micro Devices, Inc. Merged shader for primitive amplification
US8633928B2 (en) 2009-08-13 2014-01-21 Intel Corporation Reducing the bandwidth of sampler loads in shaders
US9142057B2 (en) 2009-09-03 2015-09-22 Advanced Micro Devices, Inc. Processing unit with a plurality of shader engines
US8499305B2 (en) * 2010-10-15 2013-07-30 Via Technologies, Inc. Systems and methods for performing multi-program general purpose shader kickoff
US9442780B2 (en) 2011-07-19 2016-09-13 Qualcomm Incorporated Synchronization of shader operation
US9390554B2 (en) * 2011-12-29 2016-07-12 Advanced Micro Devices, Inc. Off chip memory for distributed tessellation
US9196079B2 (en) 2011-12-30 2015-11-24 Advanced Micro Devices, Inc. Accelerated compute tessellation by compact topological data structure
US9123167B2 (en) * 2012-09-29 2015-09-01 Intel Corporation Shader serialization and instance unrolling
US9177351B2 (en) 2012-10-09 2015-11-03 Qualcomm Incorporated Multi-primitive graphics rendering pipeline
US9594560B2 (en) 2013-09-27 2017-03-14 Intel Corporation Estimating scalability value for a specific domain of a multicore processor based on active state residency of the domain, stall duration of the domain, memory bandwidth of the domain, and a plurality of coefficients based on a workload to execute on the domain
KR102100161B1 (ko) 2014-02-04 2020-04-14 삼성전자주식회사 Gpu 데이터 캐싱 방법 및 그에 따른 데이터 프로세싱 시스템
US9530174B2 (en) 2014-05-30 2016-12-27 Apple Inc. Selective GPU throttling
US10025367B2 (en) 2014-08-19 2018-07-17 Intel Corporation Dynamic scaling of graphics processor execution resources
KR102327144B1 (ko) 2014-11-26 2021-11-16 삼성전자주식회사 그래픽 프로세싱 장치 및 그래픽 프로세싱 장치에서 타일 기반 그래픽스 파이프라인을 수행하는 방법
US10176014B2 (en) * 2015-07-27 2019-01-08 Futurewei Technologies, Inc. System and method for multithreaded processing
US10474462B2 (en) * 2016-02-29 2019-11-12 Qualcomm Incorporated Dynamic pipeline throttling using confidence-based weighting of in-flight branch instructions
US10664942B2 (en) 2016-10-21 2020-05-26 Advanced Micro Devices, Inc. Reconfigurable virtual graphics and compute processor pipeline
US10388056B2 (en) 2017-01-26 2019-08-20 Advanced Micro Devices, Inc. Split frame rendering
US10552321B2 (en) 2017-08-04 2020-02-04 Microsoft Technology Licensing, Llc Flexible buffer sizing in graphics processors
US10558499B2 (en) * 2017-10-26 2020-02-11 Advanced Micro Devices, Inc. Wave creation control with dynamic resource allocation
GB2571271B (en) * 2018-02-21 2020-02-26 Advanced Risc Mach Ltd Graphics processing
US10540260B2 (en) * 2018-02-23 2020-01-21 Intel Corporation Dynamic instruction latency management in SIMD machines
US11275613B2 (en) * 2018-04-16 2022-03-15 Advanced Micro Devices, Inc. Enforcing central processing unit quality of service guarantees when servicing accelerator requests
US10719268B2 (en) 2018-06-29 2020-07-21 Microsoft Technology Licensing, Llc Techniques for safely and efficiently enqueueing and dequeueing data on a graphics processor
US11720993B2 (en) 2018-09-21 2023-08-08 Advanced Micro Devices, Inc. Dynamic kernel memory space allocation
US11508124B2 (en) * 2020-12-15 2022-11-22 Advanced Micro Devices, Inc. Throttling hull shaders based on tessellation factors in a graphics pipeline

Also Published As

Publication number Publication date
US11948251B2 (en) 2024-04-02
CN116745801A (zh) 2023-09-12
US11508124B2 (en) 2022-11-22
EP4264534A1 (en) 2023-10-25
US20230169728A1 (en) 2023-06-01
WO2022132435A1 (en) 2022-06-23
JP2023553151A (ja) 2023-12-20
US20220189112A1 (en) 2022-06-16

Similar Documents

Publication Publication Date Title
KR101091374B1 (ko) 테셀레이션을 단일 패스로 수행하기 위한 방법 및 시스템
US11948251B2 (en) Throttling hull shaders based on tessellation factors in a graphics pipeline
US9286647B2 (en) Pixel shader bypass for low power graphics rendering
US20140267224A1 (en) Handling post-z coverage data in raster operations
US20140125669A1 (en) Setting downstream render state in an upstream shader
JP7003251B2 (ja) 動的なリソース割り当てによるウェーブ生成制御
KR20220100877A (ko) 대역폭 테셀레이션 팩터 감소
US11720499B2 (en) Selective generation of miss requests for cache lines
JP2021501938A (ja) グラフィックスパイプラインにおけるインデックスの圧縮及び復元
EP4217969A1 (en) Compressing texture data on a per-channel basis
US9406101B2 (en) Technique for improving the performance of a tessellation pipeline
US9111360B2 (en) Technique for improving the performance of a tessellation pipeline
US11562459B2 (en) Selectively writing back dirty cache lines concurrently with processing
US11710207B2 (en) Wave throttling based on a parameter buffer
US11776085B2 (en) Throttling shaders based on resource usage in a graphics pipeline