KR20240004302A - 파라미터 버퍼에 기초한 웨이브 스로틀링 - Google Patents

파라미터 버퍼에 기초한 웨이브 스로틀링 Download PDF

Info

Publication number
KR20240004302A
KR20240004302A KR1020237035150A KR20237035150A KR20240004302A KR 20240004302 A KR20240004302 A KR 20240004302A KR 1020237035150 A KR1020237035150 A KR 1020237035150A KR 20237035150 A KR20237035150 A KR 20237035150A KR 20240004302 A KR20240004302 A KR 20240004302A
Authority
KR
South Korea
Prior art keywords
wave
shader
counter
wave group
execution
Prior art date
Application number
KR1020237035150A
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 KR20240004302A publication Critical patent/KR20240004302A/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • 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/54Interprogram communication
    • G06F9/542Event management; Broadcasting; Multicasting; Notifications
    • 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/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management

Abstract

그래픽 파이프라인(300)은 제1 웨이브 그룹을 생성하는 제1 셰이더(305), 실행을 위한 제1 웨이브 그룹을 개시(launch)하는 셰이더 프로세서 입력(SPI)(310), 및 하나 이상의 셰이더에서 상기 제1 웨이브 그룹을 처리한 결과에 기초하여 실행을 위한 제2 웨이브를 생성하는 스캔 컨버터(360)를 포함한다. 제1 웨이브 그룹은 진행 중(in-flight)인 제1 웨이브 그룹과 적어도 하나의 제2 셰이더 상에서 실행 계류 중인 제2 웨이브의 비교에 기초하여 선택적으로 스로틀링된다. 캐시(340)는 제1 웨이브 그룹이 셰이더 상에서 실행을 마감하는 것에 응답하여 캐시에 기입되는 정보를 보유한다. 정보는 제2 웨이브에 의해 발행된 판독 요청에 응답하여 캐시로부터 판독된다. 일부 경우에서, 얼마나 많은 제1 웨이브 그룹이 진행 중이고 얼마나 많은 캐시에 대한 판독 요청이 계류 중인지를 비교함으로써 제1 웨이브 그룹이 선택적으로 스로틀링된다.

Description

파라미터 버퍼에 기초한 웨이브 스로틀링
본 발명은 그래픽 처리 유닛(Graphics processing unit, GPU) 및 그 동작 방법에 관한 것이다.
그래픽 처리 유닛(Graphics processing unit, GPU)은 커맨드 버퍼로부터 검색(retrieve)되는 커맨드의 카피를 동시에 처리하는 그래픽 처리 파이프라인을 구현한다. GPU 및 다른 멀티스레드 처리 유닛은 전형적으로, 단일 웨이브(single wave)로서 다수의 데이터 세트 상에서 단일 프로그램의 다수의 인스턴스를 동시에 실행하는 다수의 처리 요소(이들은 또한 프로세서 코어 또는 컴퓨트 유닛으로도 지칭됨)를 구현한다. 계층적 실행 모델이 하드웨어에서 구현된 계층 구조를 매칭시키기 위해 이용된다. 실행 모델은 모든 웨이브(또한 웨이브프론트, 스레드, 스트림, 또는 작업 항목으로 지칭됨)에 의해 실행되는 명령어의 커널을 정의한다. GPU 내의 그래픽 파이프라인은 컴퓨트 유닛, 메모리, 및 캐시와 같은 그래픽 파이프라인의 자원을 사용하여 실행되는 하나 이상의 셰이더를 포함한다. 그래픽 파이프라인은 전형적으로 이미지의 부분을 나타내는 패치 또는 다른 프리미티브에 대해 지오메트리 동작을 수행하는 지오메트리 부분으로 분할된다. 지오메트리 부분에서의 셰이더는 버텍스 셰이더, 헐 셰이더(hull shader), 도메인 셰이더, 및 지오메트리 셰이더를 포함할 수 있다. 그래픽 파이프라인의 지오메트리 부분은 파이프라인의 지오메트리 부분에 의해 생산(produce)된 프리미티브가 이미지의 부분을 나타내는 픽셀의 세트를 형성하기 위해 (예를 들어, 하나 이상의 스캔 컨버터에 의해) 래스터화될 때 완료된다. 픽셀에 대한 후속 처리는 픽셀 처리로 지칭되고, 그래픽 파이프라인의 자원을 사용하여 실행하는 픽셀 셰이더와 같은 셰이더에 의해 수행되는 동작을 포함한다.
본 개시내용은 첨부된 도면을 참조함으로써 당업자에게 더 잘 이해될 수 있고, 많은 특징 및 장점이 명백해질 수 있다. 다른 도면에서 동일한 참조 기호를 사용하는 것은 유사하거나 동일한 항목을 나타낸다.
도 1은 일부 실시예에 따른 처리 시스템의 블록도이다.
도 2는 일부 실시예에 따른, 미리 결정된 해상도로 3차원(3D) 장면의 래스터화된 이미지를 생성하도록 고차(high-order) 지오메트리 프리미티브를 처리 가능한 그래픽 파이프라인을 도시한다.
도 3은 일부 실시예에 따른 지오메트리 셰이더에 의해 개시(launch)된 웨이브 또는 웨이브 그룹을 선택적으로 스로틀링하는 그래픽 파이프라인의 일 부분의 블록도이다.
도 4는 일부 실시예에 따라 웨이브 또는 웨이브 그룹을 선택적으로 스로틀링하는 관리 회로부의 제1 실시예의 블록도이다.
도 5는 일부 실시예에 따라 웨이브 또는 웨이브 그룹을 선택적으로 스로틀링하는 관리 회로부의 제2 실시예의 블록도이다.
도 6은 일부 실시예에 따라 지오메트리 셰이더 웨이브 또는 웨이브 그룹을 선택적으로 개시하는 방법의 흐름도이다.
셰이더 허브 내의 컴퓨트 유닛에 의해 구현된 하나 이상의 셰이더에 의한 처리를 위해 (하나 이상의 웨이브를 포함하는) 웨이브 그룹을 디스패칭하기 전에, 지오메트리 엔진은 셰이더에서 웨이브 그룹을 처리함으로써 생성된 출력을 저장하기 위해 메모리 또는 캐시 내의 공간을 예약한다. 예를 들어, 지오메트리 엔진은 파라미터 버퍼를 보유하기 위한 공간을 위해 예약 요청을 PC 관리자로 송신할 수 있다. PC 관리자는 레벨 2(L2) 캐시에 요청된 공간을 예약하고, L2 캐시 내의 예약된 공간을 식별하는 정보를 지오메트리 엔진에 복귀시킨다. 예약 확인을 수신하는 것에 응답하여, 지오메트리 엔진은 웨이브 그룹을 셰이더 프로세서 입력(SPI)에 제공하며 셰이더 프로세서 입력은 셰이더 허브 내의 컴퓨트 유닛에 의한 처리를 위해 웨이브 그룹을 개시한다. 셰이더 출력으로부터의 속성은 L2 캐시 내의 예약된 공간에 저장된다. (삼각형과 같은) 프리미티브를 어셈블링하고 프리미티브를 프리미티브 허브를 통해 스캔 컨버터로 전송하는 프리미티브 어셈블러에 포지션이 제공된다. 스캔 컨버터는 SPI로 복귀되는 픽셀 웨이브를 생성하며, 이는 L2 캐시로부터의 속성을 페치(fetch)한다. 이어서, 셰이더 허브 내의 컴퓨트 유닛은 L2 캐시로부터 검색된 속성을 사용하여 픽셀 웨이브에 대한 픽셀 처리를 수행한다. 따라서, 지오메트리 엔진에 의해 생성된 그래픽 셰이더 웨이브 그룹과 스캔 컨버터에 의해 생성된 픽셀 웨이브 사이의 종속성이 존재한다. 이러한 종속성은 지오메트리 엔진이 너무 많은 데이터를 L2 캐시에 기입하는 너무 많은 웨이브 그룹을 개시하는 경우 L2 캐시 내의 다른 데이터 유형의 공간을 고사(starve)시킬 수 있고, 이는 과도한 캐시 스래싱(thrashing)을 초래하고 그래픽 파이프라인의 성능을 감소시킨다.
도 1 내지 도 6은 진행 중(in-flight)인 GS 작업과 스캔 컨버터에 의해 생성된 계류 중인 픽셀 셰이더(PS) 작업의 비교에 기초하여 셰이더 프로세서 입력(SPI)에 의해 개시된 지오메트리 셰이더(GS) 웨이브 그룹(또는 버텍스 셰이더와 같은 다른 셰이더와 연관된 웨이브 그룹)을 선택적으로 스로틀링함으로써 지오메트리 셰이더 및 픽셀 셰이더에 의해 공유되는 캐시의 스래싱을 감소시키기 위한 시스템 및 기법을 개시한다. 스캔 컨버터는 캐시로부터 정보를 판독하기 위한 요청을 SPI에 제공한다. 관리 회로부의 일부 실시예는 3개의 이벤트(event)에 대한 카운터를 유지한다: (1) GS 웨이브 그룹의 개시를 위한 제1 카운터, (2) 캐시에 기입함으로써 셰이더 상에서 실행을 마감(finish)한 GS 웨이브 그룹의 제2 카운터, 및 (3) 스캔 컨버터에 의해 생성된 PS 웨이브에 대해 캐시로부터 판독하기 위한 요청의 수에 대한 제3 카운터. 카운터는 대응하는 이벤트가 윈도잉 선입선처리(first-in-first-out, FIFO) 버퍼에 기입되는 것에 응답하여 증분되고, 대응하는 이벤트가 윈도잉 FIFO로부터 판독되는 것에 응답하여 감분된다. 관리 회로부는 제1 카운터와 제2 카운터 사이의 차이에 기초하여 진행 중인 GS 작업의 양을 결정한다. 관리 회로부는 제2 카운터와 제3 카운터 사이의 차이에 기초하여 계류 중인 PS 작업의 양을 결정한다. 관리 회로부는 진행 중인 GS 작업의 양이 계류 중인 PS 작업의 양보다 더 높은 경우에 SPI에 의해 개시된 웨이브 그룹을 스로틀링한다. 더 높지 않은 경우에는, SPI는 그리디 알고리즘(greedy algorithm)과 같은 알고리즘에 따라 웨이브 그룹을 자유로이 개시한다. 일부 실시예에서, 웨이브 그룹을 스로틀링하기 위한 기준은, 스로틀링이 작업의 그래픽 파이프라인을 고사시킬 가능성을 줄이기 위한 추가적인 인자를 계류 중인 PS 작업의 양에 더한 것보다 진행 중인 GS 작업의 양이 더 높은 경우, 관리 회로부가 SPI에 의해 개시된 웨이브 그룹을 스로틀링하도록 수정된다. 예를 들어, 추가적인 인자는 계류 중인 PS 작업에 의해 요청된 판독의 수의 버스트니스(burstiness)의 척도에 기초하여 결정될 수 있다.
도 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 call)을 발행함으로써 그래픽 처리를 개시할 수 있다. 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)의 일부 실시예에서 구현된다. 일부 실시예에서, 컴퓨트 유닛(121 내지 123)을 포함하는 파이프라인 회로부는 버텍스 셰이더, 헐 셰이더, 도메인 셰이더, 지오메트리 셰이더, 및 픽셀 셰이더를 포함하지만 이에 제한되지 않는 상이한 유형의 셰이더를 실행하는 그래픽 파이프라인을 구현하는 데 사용된다. 처리 시스템(100)의 일부 실시예는 지오메트리 셰이더 웨이브 그룹과 같은 웨이브 또는 웨이브 그룹의 실행을 완료하는 것에 응답하여 셰이더에 의해 캐시에 기입된 정보를 보유하는 하나 이상의 캐시를 포함한다. 캐시에 기입된 정보는 후속적으로 픽셀 셰이더 웨이브와 같은 다른 웨이브 또는 웨이브 그룹의 실행 동안 판독된다. 지오메트리 셰이더의 일부 실시예는 제1 웨이브 그룹을 생성하고 셰이더 프로세서 입력(SPI)은 셰이더에 의한 실행을 위해 제1 웨이브 그룹을 개시한다. 스캔 컨버터는 하나 이상의 셰이더에서 제1 웨이브 그룹을 처리한 결과에 기초하여 셰이더 상에서의 실행을 위한 제2 웨이브를 생성한다. 제1 웨이브 그룹은 진행 중인 제1 웨이브 그룹과 적어도 하나의 셰이더 상에서 실행 계류 중인 제2 웨이브의 비교에 기초하여 선택적으로 스로틀링된다. 캐시는 제1 웨이브 그룹이 셰이더 상에서 실행을 마감하는 것에 응답하여 캐시에 기입되는 정보를 보유한다. 정보는 제2 웨이브에 의해 발행된 판독 요청에 응답하여 캐시로부터 판독된다. 일부 경우에서, 얼마나 많은 제1 웨이브 그룹이 진행 중이고 얼마나 많은 캐시에 대한 판독 요청이 계류 중인지를 비교함으로써 제1 웨이브 그룹이 선택적으로 스로틀링된다.
도 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)은 데이터를 저장하는 데 사용되는 로드 데이터 저장소(LDS)(206) 회로부를 포함한다. 저장 자원(205)은 또한 자주 사용되는 데이터를 캐싱하는 하나 이상의 캐시(207)를 포함한다. 캐시(207)는 파라미터 버퍼를 구현하는 데 사용된다. 본원에서 논의되는 바와 같이, 그래픽 파이프라인(200)의 셰이더 상에서 실행되고 있는 웨이브 또는 웨이브 그룹은 웨이브 또는 웨이브 그룹을 처리한 결과를 캐시(207)에 기입함으로써 실행을 마감한다. 그래픽 파이프라인(200)의 더 아래에 있는 셰이더는 셰이더 상에서 실행을 이전에 마감한 웨이브 또는 웨이브 그룹에 의한 처리 결과와 같은, 캐시(207)로부터의 정보를 판독하기 위한 판독 요청을 발행할 수 있다. 저장 자원(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) 내의 다른 엔티티에 의해 액세스될 수 있다.
테셀레이터(220)는 헐 셰이더(218)로부터 객체(예컨대, 패치)를 수신한다. 일부 실시예에서, 헐 셰이더(218)에 의해 생성되는 프리미티브는 테셀레이터(220)에 제공된다. 테셀레이터(220)는 예를 들어, 헐 셰이더(218)에 의해 생성되는 테셀레이션 팩터에 기초하여 입력 객체를 테셀레이팅함으로써, 입력 객체에 대응하는 프리미티브를 식별하는 정보를 생성한다. 테셀레이션은 패치와 같은 입력 고차(higher-order) 프리미티브를, 예를 들어, 테셀레이션 처리에 의해 생산되는 프리미티브의 세분성(granularity)을 특정하는 테셀레이션 팩터에 의해 표시되는 바에 따라, 더 미세한 수준의 디테일을 나타내는 저차(lower-order) 출력 프리미티브의 세트로 세부 분할한다. 이에 따라, 장면의 모델은 (메모리 또는 대역폭을 절감하기 위해) 보다 적은 수의 고차 프리미티브로 나타내고, 추가적인 디테일은 고차 프리미티브를 테셀레이팅함으로써 추가된다.
도메인 셰이더(224)는 도메인 위치 및 (선택적으로) 다른 패치 데이터를 입력한다. 도메인 셰이더(224)는 제공되는 정보를 조작하고 입력 도메인 위치 및 다른 정보에 기초하여 출력에 대한 하나의 버텍스를 생성한다. 도시된 실시예에서, 도메인 셰이더(224)는 삼각형(211) 및 테셀레이션 팩터에 기초하여 프리미티브(222)를 생성한다. 도메인 셰이더(224)는 처리를 완료하는 것에 응답하여 프리미티브(222)를 개시한다.
지오메트리 셰이더(226)는 도메인 셰이더(224)로부터 입력 프리미티브를 수신하고, 입력 프리미티브에 기초하여 지오메트리 셰이더(226)에 의해 생성되는 (입력 프리미티브당) 최대 네 개의 프리미티브를 출력한다. 도시된 실시예에서, 지오메트리 셰이더(226)는 테셀레이팅된 프리미티브(222)에 기초하여 출력 프리미티브(228)를 생성한다. 지오메트리 셰이더(226)의 일부 실시예는 대응하는 셰이더 프로세서 입력(SPI, 명확성을 위해 도 2에는 도시되지 않음)에 의해 개시되는 웨이브 그룹(본 명세서에서 "GS 웨이브 그룹"으로 지칭됨)을 생성한다. 셰이더 엔진 상에서 실행을 마감하는 것에 응답하여, 웨이브 그룹은 출력을 캐시(207)에 다시 기입한다.
프리미티브의 하나의 스트림은 하나 이상의 스캔 컨버터(230)에 제공되고, 일부 실시예에서, 프리미티브의 최대 네 개의 스트림이 저장 자원(205) 내의 버퍼에 연쇄된다. 스캔 컨버터(230)는 셰이딩 동작 및 클립핑(clipping), 원근 분할(perspective dividing), 시저링(scissoring) 및 뷰포트 선택(viewport selection) 등과 같은 다른 동작을 수행한다. 스캔 컨버터(230)는 그래픽 파이프라인(200)의 픽셀 처리부(202)에서 후속하여 처리되는 픽셀의 세트(232)를 생성한다. 스캔 컨버터(230)의 일부 실시예는, 예를 들어, 그래픽 파이프라인(200)에서 구현된 SPI에 요청을 송신함으로써, 캐시(207)로부터 정보를 판독하기 위한 요청을 제공한다.
도시된 실시예에서, 픽셀 셰이더(234)는 (예를 들어, 픽셀의 세트(232)를 포함하는) 픽셀 흐름을 수신하고, 입력 픽셀 흐름에 응답하여 제로 또는 또 다른 픽셀 흐름을 출력한다. 출력 병합기 블록(236)은 픽셀 셰이더(234)로부터 수신되는 픽셀에 관한 블렌드(blend), 깊이, 스텐실(stencil), 또는 다른 동작을 수행한다.
그래픽 파이프라인(200)에서의 셰이더 중 일부 또는 전부는 저장 자원(205)에 저장되는 텍스처 데이터를 사용하여 텍스처 맵핑을 수행한다. 예를 들어, 픽셀 셰이더(234)는 저장 자원(205)으로부터 텍스처 데이터를 판독하고 텍스처 데이터를 사용하여 하나 이상의 픽셀을 셰이딩할 수 있다. 이어서, 셰이딩된 픽셀은 사용자에게 제시하기 위해 디스플레이에 제공된다.
도 3은 일부 실시예에 따른 지오메트리 셰이더에 의해 개시된 웨이브 또는 웨이브 그룹을 선택적으로 스로틀링하는 그래픽 파이프라인(300)의 일 부분의 블록도이다. 그래픽 파이브라인(300)은 도 1에 도시된 처리 시스템(100) 및 도 2에 도시된 그래픽 파이프라인(200)의 일부 실시예에서 구현된다.
지오메트리 엔진(305)은 지오메트리 셰이더를 위한 웨이브 또는 웨이브 그룹을 생성한다. 따라서, 지오메트리 엔진(305)에 의해 생성된 웨이브 또는 웨이브 그룹은 GS 웨이브 그룹으로 지칭된다. 그러나, 일부 실시예에서, 웨이브 또는 웨이브 그룹은 버텍스 셰이더와 같은 다른 셰이더에 의해 또는 그 셰이더를 위해 생성되며, 이 경우 웨이브 또는 웨이브 그룹은 VS 웨이브 그룹과 같은 다른 명칭으로 지칭된다. 지오메트리 엔진(305)은 본원에서 논의된 바와 같이, GS 웨이브 그룹을 선택적으로 개시하거나 스로틀링하는 SPI(310)에 GS 웨이브 그룹을 제공한다. 지오메트리 엔진(305)은 또한, 화살표(320)에 의해 표시된 바와 같이, GS 웨이브 그룹의 개시를 시그널링하기 위해 관리 회로부(315)에 정보를 제공한다. 관리 회로부(315)는 개시 이벤트가 윈도잉 버퍼(330)에 기입되는 것에 응답하여 제1 카운터(325)를 증분시킨다. 관리 회로부(315)는 또한 개시 이벤트가 윈도잉 버퍼(330)로부터 판독되는 것에 응답하여 제1 카운터(325)를 감분시킨다.
SPI(310)는 셰이더 허브(335) 내의 하나 이상의 셰이더 상에서의 실행을 위해 GS 웨이브 그룹을 개시한다. GS 웨이브 그룹은 셰이더 허브(335)에 의해 실행되고, 실행을 마감하는 것에 응답하여, GS 웨이브 그룹은 결과를 캐시(340)에 기입한다. 셰이더 허브(335)는 결과를 캐시(340)에 기입하는 것에 응답하여 GS 웨이브 그룹이 실행을 마감했음을 SPI(310)에 시그널링한다. 셰이더 허브(335)는 GS 웨이브 그룹의 완료의 표시를 SPI(310)에 송신하고, 이는 화살표(345)에 의해 표시된 바와 같이, GS 웨이브 그룹이 실행을 마감했음을 표시하기 위해 신호(본원에서는 "마감" 신호 또는 "종료(done)" 신호로 지칭됨)를 관리 회로부(315)에 송신한다. 관리 회로부(315)는 실행 마감 이벤트가 윈도잉 버퍼(330)에 기입되는 것에 응답하여 제2 카운터(326)를 증분시킨다. 관리 회로부(315)는 또한 실행 마감 이벤트가 윈도잉 버퍼(330)로부터 판독되는 것에 응답하여 제2 카운터(326)를 감분시킨다.
프리미티브 어셈블러(350)는 GS 웨이브 그룹을 처리하여 프리미티브를 생성하고, 프리미티브를 크로스바(355)(프리미티브 허브라고도 지칭함)에 제공하며, 크로스바는 어셈블링된 프리미티브를 스캔 컨버터(360)에 제공한다. 스캔 컨버터(360)는 셰이더 허브(335) 내의 셰이더에 의한 실행을 위해 픽셀 셰이더(PS) 웨이브를 생성한다. 따라서, 스캔 컨버터(360)는 365에 의해 표시된 바와 같이 SPI(310)를 시그널링하고, SPI(310)는 셰이더 허브(335)에서의 실행을 위해 PS 웨이브를 개시할 수 있다. SPI(310)는 또한 PS 웨이브를 처리하기 위해 셰이더 허브(335)에 의해 사용되는 캐시(340)로부터의 정보를 판독하기 위한 판독 요청을 생성한다. 판독 요청을 생성하는 것에 응답하여, SPI(310)는 화살표(370)에 의해 표시된 바와 같이, 판독 요청이 캐시(340)에 대해 계류 중임을 표시하기 위한 신호를 관리 회로부(315)에 송신한다. 관리 회로부(315)는 판독 요청 이벤트가 윈도잉 버퍼(330)에 기입되는 것에 응답하여 제3 카운터(327)를 증분시킨다. 관리 회로부(315)는 또한 판독 요청 이벤트가 윈도잉 버퍼(330)로부터 판독되는 것에 응답하여 제3 카운터(327)를 감분시킨다. 판독 요청은, SPI(310)가 관리 회로부(315)로부터 "GS 웨이브 종료" 신호를 수신할 때까지 SPI(310)를 벗어나지 않는다.
관리 회로부(315)의 일부 실시형태는 진행 중인 GS 웨이브 그룹의 수와 계류 중인 PS 웨이브의 수의 비교에 기초하여 SPI(310)로부터의 개시를 선택적으로 스로틀링한다(또는 개시를 선택적으로 스로틀링하도록 SPI(310)에 명령한다). 관리 회로부(315)는 제1 카운터(325)와 제2 카운터(326) 사이의 차이에 기초하여 진행 중인 제1 웨이브 그룹의 제1 수를 결정한다. 관리 회로부(315)는 또한 제2 카운터(326)와 제3 카운터(327) 사이의 차이에 기초하여 셰이더 허브(335) 내의 셰이더 상에서 실행 계류 중인 PS 웨이브의 제2 수를 결정한다. 관리 회로부(315)는 제1 수가 제2 수보다 낮은 것에 응답하여 GS 웨이브 그룹을 스로틀링(또는 스로틀링하도록 SPI(310)에 명령)한다. 관리 회로부(315)의 일부 실시예는 GS 웨이브 그룹의 스로틀링이 작업의 그래픽 파이프라인(300)을 고사시킬 가능성을 줄이기 위해 적용되는 추가적인 "버스트니스" 인자를 결정한다. 추가적인 인자는 PS 웨이브와 연관된 판독 요청의 버스트니스의 추정치에 기초하여 결정된다. 그러한 경우에, 관리 회로부(315)는 제1 수가 제2 수와 추가적인 버스트니스 인자의 합보다 낮은 것에 응답하여 GS 웨이브 그룹을 스로틀링한다(또는 스로틀링하도록 SPI(310)에 명령한다).
도 4는 일부 실시예에 따라 웨이브 또는 웨이브 그룹을 선택적으로 스로틀링하는 관리 회로부(400)의 제1 실시예의 블록도이다. 관리 회로부(400)의 제1 실시예는 도 3에 도시된 관리 회로부(315)의 일부 실시예를 구현하는 데 사용된다. 관리 회로부(400)는 이벤트 생성 회로부(405)로부터 이벤트와 연관된 정보를 수신한다. 일부 실시예에서, 정보는 개시 이벤트, 마감 실행 이벤트, 판독 요청 이벤트 등을 나타내는 시그널링을 포함한다.
윈도잉 버퍼(410)는 윈도잉 버퍼(410)의 엔트리에 이벤트를 나타내는 정보를 저장한다. 윈도잉 버퍼(410)의 일부 실시예는, 이벤트 생성 회로부(405)로부터 수신된 이벤트가 윈도잉 버퍼(410)의 테일에 있는 엔트리에 추가(또는 푸시)되고 윈도잉 버퍼(410)의 헤드에 있는 엔트리로부터 제거(또는 팝)되도록 선입선처리(FIFO) 버퍼로서 구현된다.
관리 회로부(400)는 엔트리가 윈도잉 버퍼(410)에 추가되는 것에 응답하여 이벤트를 카운트(count)하는 데 사용되는 카운터의 세트(415)를 포함한다. 예시된 실시예에서, 세트(415)는 하나 이상의 셰이더에서의 실행을 위해 개시되는 GS 웨이브 또는 웨이브 그룹을 카운트하는 개시 카운터(416), 캐시에 기입함으로써 실행을 마감하는 GS 웨이브 또는 웨이브 그룹을 카운트하는 생산 카운터(417), 및 예를 들어, PS 웨이브를 위해 캐시에 대한 판독 요청을 카운트하는 소비(consume) 카운터(418)를 포함한다. 개시 카운터(416), 생산 카운터(417) 및 소비 카운터(418)는 대응하는 이벤트가 윈도잉 버퍼(410)에 추가되는 것에 응답하여 증분된다. 세트(415) 내의 카운터(416 내지 418)는 유휴시 0(또는 다른 미리 결정된 값)으로 재설정된다.
관리 회로부(400)는 또한 윈도잉 버퍼(410)에 포함되는 개시, 생산 및 소비 이벤트의 수를 카운트하는 데 사용되는 카운터의 세트(420)를 포함한다. 세트(420)는 윈도잉 버퍼(410)에 기입되는 개시 이벤트의 수만큼 증분하고, 윈도잉 버퍼(410)로부터 판독되는 개시 이벤트의 수만큼 감분하는 개시 이벤트 카운터(421)를 포함한다. 세트(420)는 또한 윈도잉 버퍼(410)에 기입되는 생산 이벤트의 수만큼 증분하고, 윈도잉 버퍼(410)로부터 판독되는 생산 이벤트의 수만큼 감분하는 생산 이벤트 카운터(422)를 포함한다. 세트(420)는 윈도잉 버퍼(410)에 기입되는 소비 이벤트의 수만큼 증분하고, 윈도잉 버퍼(410)로부터 판독되는 소비 이벤트의 수만큼 감분하는 소비 이벤트 카운터(423)를 더 포함한다.
관리 회로부(400)는 각각의 이벤트 유형, 예를 들어, 개시 이벤트, 생산 이벤트, 및 소비 이벤트에 대한 이벤트 실행(run) 카운터(425)를 더 포함한다. 이벤트 실행 카운터(425)는 각각의 이벤트의 버스트니스를 카운트한다. 이벤트에 대한 이벤트 실행 카운터(425)는 이벤트 실행이 윈도잉 버퍼(410)의 기입측에서 중단될 때마다 1씩 증분한다. 예를 들어, 어떠한 생산 이벤트 또는 소비 이벤트도 없는 50회의 개시 이벤트가 있는 경우, 이벤트 실행 카운터(425)에서의 LaunchRunCounter는 1씩 증분된다. 50회의 개시 후에 다음 50회의 사이클에서 50회의 개시 이벤트와 50회의 생산 이벤트가 있는 경우, LaunchRunCounter의 값은 51이고 ProduceRunCounter의 값은 50이다.
관리 회로부(400)는 이벤트의 버스트니스를 나타내는 파라미터를 계산하기 위해 카운터(415, 420, 425)의 값을 사용한다. 평균 버스트(average burst) 회로부(430)는 이벤트당 메트릭(per-event metric)을 계산한다:
AverageBurst = EventCount/EventRunCount.
고속 회로부(435)는 또 다른 이벤트당 메트릭을 계산한다:
HighRate = EventCount+Event>AverageBurst.
평균 버스트 회로부(430) 및 고속 회로부(435)에 의해 생성된 값은 개시 결정 회로부(440)에 제공되며, 개시 결정 회로부는 GS 웨이브 또는 웨이브 그룹의 개시를 선택적으로 스로틀링하기 위해 카운터(415, 420, 425)의 값과 조합하여 이러한 정보를 사용한다.
개시 결정 회로부(440)의 일부 실시예는 진행 중인 GS 작업 및 계류 중인 PS 작업의 비교에 기초하여 GS 웨이브 또는 웨이브 그룹의 개시를 선택적으로 스로틀링한다. 진행 중인 GS 작업(WorkInFlight)은 개시 카운터(416)에서의 값과 생산 카운터(417)에서의 값 사이의 차이에 기초하여 추정된다. 계류 중인 PS 작업(WorkReady)은 생산 카운터(417)에서의 값과 소비 카운터(418)에서의 값 사이의 차이에 기초하여 추정된다. 진행 중인 GS 작업이 계류 중인 PS 작업보다 더 큰 경우, 개시 결정 회로부(440)는 GS 웨이브 또는 웨이브 그룹의 개시를 스로틀링한다. 일부 실시예에서, 개시 결정 회로부(440)는 하기의 기준이 만족되는 경우 GS 웨이브 또는 웨이브 그룹의 개시를 스로틀링한다:
WorkInFlight > WorkReady + HighRate[Read]
추가 인자(HighRate[Read])는 계류 중인 PS 작업, 예를 들어 PS 웨이브에 대한 판독 요청의 잠재적인 버스트니스를 설명하기 위해 포함된다.
도 5는 일부 실시예에 따라 웨이브 또는 웨이브 그룹을 선택적으로 스로틀링하는 관리 회로부(500)의 제2 실시예의 블록도이다. 관리 회로부(500)의 제2 실시예는 도 3에 도시된 관리 회로부(315)의 일부 실시예를 구현하는 데 사용된다. 관리 회로부(500)는 이벤트 생성 회로부(505)로부터 이벤트와 연관된 정보를 수신한다. 일부 실시예에서, 정보는 개시 이벤트, 마감 실행 이벤트, 판독 요청 이벤트 등을 나타내는 시그널링을 포함한다. 관리 회로부(500)는 엔트리가 윈도잉 버퍼(510)에 추가되는 것에 응답하여 이벤트를 카운트하는 데 사용되는 카운터의 세트(515)를 포함한다. 세트(515)는 개시 카운터(516), 생산 카운터(517), 및 소비 카운터(518)를 포함한다. 관리 회로부(500)는 또한 윈도잉 버퍼(510)에 포함되는 개시, 생산 및 소비 이벤트의 수를 카운트하는 데 사용되는 카운터(521, 522, 523)의 세트(520)를 포함한다. 이벤트 실행 카운터(525)는 개시 이벤트, 생산 이벤트, 및 소비 이벤트를 포함하는 각각의 이벤트의 버스트니스를 카운트한다.
관리 회로부(500)는 이벤트의 버스트니스를 나타내는 파라미터를 계산하기 위해 카운터(515, 520, 525)의 값을 사용한다. 평균 버스트 회로부(530)는 이벤트당 메트릭을 계산한다:
AverageBurst = EventCount/EventRunCount.
고속 회로부(535)는 다른 이벤트당 메트릭을 계산한다:
HighRate = EventCount + EventAverageBurst.
저속(low-rate) 회로부(540)는 또 다른 이벤트 메트릭을 계산한다:
LowRate = EventCount - EventAverageBurst.
평균 버스트 회로부(530), 고속 회로부(535), 및 저속 회로부(540)에 의해 생성된 값은 개시 결정 회로부(545)에 제공되며, 개시 결정 회로부는 GS 웨이브 또는 웨이브 그룹의 개시를 선택적으로 스로틀링하기 위해 카운터(515, 520, 525)의 값과 조합하여 이러한 정보를 사용한다.
개시 결정 회로부(545)의 일부 실시예는 진행 중인 GS 작업 및 계류 중인 PS 작업의 비교에 기초하여 GS 웨이브 또는 웨이브 그룹의 개시를 선택적으로 스로틀링한다. 진행 중인 GS 작업(WorkInFlight)은 개시 카운터(516)에서의 값과 생산 카운터(517)에서의 값 사이의 차이에 기초하여 추정된다. 계류 중인 PS 작업(WorkReady)은 생산 카운터(517)에서의 값과 소비 카운터(518)에서의 값 사이의 차이에 기초하여 추정된다. 예시된 실시예에서, 개시 결정 회로부(545)는 소비 속도(rate)를 다음과 같이 정의한다:
ConsumeRate = HighRate[Consume] - LowRate[Produce]
이어서, 개시 결정 회로부(545)는 예를 들어 다음의 정의를 사용하여 준비(ready)되는 작업의 양을 추정하거나 예측(forecast)한다:
ReadyForecast = WorkReady - ConsumeRate
개시 결정 회로부(545)는 하기의 기준이 만족되는 경우 GS 웨이브 또는 웨이브 그룹의 개시를 스로틀링한다:
WorkInFlight > LowRate[Launch] - ReadyForecast
이 기준이 만족되지 않는 경우, 추가적인 GS 웨이브 또는 웨이브 그룹이 개시된다.
도 6은 일부 실시예에 따라 GS 웨이브 또는 웨이브 그룹을 선택적으로 개시하는 방법(600)의 흐름도이다. 방법(600)은 도 1에 도시된 처리 시스템(100), 도 2에 도시된 그래픽 파이프라인(200), 도 3에 도시된 그래픽 파이프라인(300), 도 4에 도시된 관리 회로부(400), 및 도 5에 도시된 관리 회로부(500)의 일부 실시예에서 구현된다.
블록(605)에서, 관리 회로부는 GS 웨이브 그룹 개시를 카운트한다. 블록(610)에서, 관리 회로부는 GS 웨이브 그룹 마감을 카운트한다. 블록(615)에서, 관리 회로부는 PS 웨이브에 대한 판독 요청을 카운트한다. 결정 블록(620)에서, 관리 회로부는 (GS 웨이브 그룹 개시 및 마감의 수에 기초하여 결정된) 진행 중인 GS 작업의 양을 (GS 웨이브 그룹 마감 및 PS 웨이브에 대한 판독 요청의 수에 기초하여 결정된) 계류 중인 PS 작업의 양과 비교한다. 일부 실시예에서, 관리 회로부는 본원에서 논의된 바와 같이, 진행 중인 GS 작업의 양을 계류 중인 PS 작업의 양 및 PS 작업의 버스트니스를 설명하기 위한 추가적인 인자의 합과 비교한다. 진행 중인 GS 작업이 계류 중인 PS 작업(아마도 추가적인 인자에 의해 증가됨)을 초과하는 경우, 방법(600)은 블록(625)으로 흐르고 관리 회로부는 GS 웨이브 그룹의 개시를 스로틀링한다. 진행 중인 GS 작업이 계류 중인 PS 작업(아마도 추가적인 인자에 의해 증가됨)보다 작은 경우, 방법(600)은 블록(630)으로 흐르고 관리 회로부는 GS 웨이브 그룹의 개시를 스로틀링하지 않는다.
컴퓨터 판독가능 저장 매체는 컴퓨터 시스템에 명령어 및/또는 데이터를 제공하기 위해 사용되는 동안 컴퓨터 시스템에 의해 액세스 가능한 임의의 비일시적 저장 매체 또는 비일시적 저장 매체의 조합을 포함할 수 있다. 그러한 저장 매체는 광학 매체(예를 들어, 콤팩트 디스크(CD), 디지털 다목적 디스크(DVD), 블루레이 디스크), 자기 매체(예를 들어, 플로피 디스크, 자기 테이프 또는 자기 하드 드라이브), 휘발성 메모리(예를 들어, 랜덤 액세스 메모리(RAM) 또는 캐시), 비휘발성 메모리(예를 들어, 읽기 전용 메모리(ROM) 또는 플래시 메모리), 또는 마이크로 전자기계 시스템(MEMS) 기반 저장 매체를 포함할 수 있으나 이에 제한되지 않는다. 컴퓨터 판독가능 저장 매체는 컴퓨팅 시스템(예를 들어, 시스템 RAM 또는 ROM)에 내장될 수 있고, 컴퓨팅 시스템(예를 들어, 자기 하드 드라이브)에 고정적으로 부착되거나 컴퓨팅 시스템(예를 들어, 광학 디스크 또는 유니버설 직렬 버스(USB) 기반 플래시 메모리)에 착탈가능하게 부착되거나, 유선 또는 무선 네트워크(예를 들어, 네트워크 액세스 가능 저장(NAS))를 통해 컴퓨터 시스템에 커플링된다.
일부 실시예에서, 전술된 기법의 특정 양태는 소프트웨어를 실행하는 처리 시스템의 하나 이상의 프로세서에 의해 구현될 수 있다. 소프트웨어는 비-일시적 컴퓨터 판독가능 저장 매체에 저장되거나 달리 유형적으로 구현된 실행가능 명령어의 하나 이상의 세트를 포함한다. 소프트웨어는 하나 이상의 프로세서에 의해 실행될 때, 전술된 기법의 하나 이상의 양태를 수행하도록 하나 이상의 프로세서를 조작하는 명령어 및 특정 데이터를 포함할 수 있다. 비일시적 컴퓨터 판독가능 저장 매체는, 예를 들어, 자기 또는 광학 디스크 저장 디바이스, 반도체 저장 디바이스, 예컨대 플래시 메모리, 캐시, 랜덤 접근 메모리(RAM), 또는 다른 비휘발성 메모리 디바이스 또는 디바이스들 등을 포함할 수 있다. 비-일시적 컴퓨터 판독가능 저장 매체에 저장된 실행가능 명령어는 하나 이상의 프로세서에 의해 해석되거나 달리 실행 가능한 소스 코드, 어셈블리 언어 코드, 객체 코드, 또는 다른 명령어 포맷일 수 있다.
일반적인 설명에서 전술된 모든 활동 또는 요소가 요구되지 않으며, 특정 활동 또는 디바이스의 일부는 요구되지 않을 수 있고, 기술된 것에 더하여, 하나 이상의 추가 활동이 수행되거나 하나 이상의 추가 요소가 포함될 수 있다는 점에 유의한다. 또한 추가적으로, 동작이 나열된 순서는 반드시 그들이 수행되는 순서는 아니다. 또한, 특정 실시예를 참조하여 개념이 설명되었다. 그러나, 당업자는 아래의 청구범위에 기재된 것과 같은 본 개시내용의 범위를 벗어나지 않으면서 다양한 수정 및 변경이 이루어질 수 있음을 이해한다. 따라서, 명세서 및 도면은 제한적인 의미보다는 예시적인 것으로 간주되어야 하며, 모든 그러한 수정은 본 개시내용의 범위 내에 포함되도록 의도된다.
이익, 다른 이점, 및 문제에 대한 해결책이 특정 실시예와 관련하여 전술되었다. 그러나, 이익, 이점, 문제에 대한 해결책, 그리고 임의의 이익, 이점, 또는 해결책이 발생하게 하거나 더 명확해지게 할 수 있는 임의의 특징(들)은 임의의 또는 모든 청구항의 결정적, 요구적, 또는 본질적인 특징으로 해석되지 안 된다. 또한, 개시된 주제는 본원의 교시 내용의 이익을 갖는 당업자에게 명백한, 상이하지만 동등한 방식으로 수정 및 실시될 수 있기 때문에, 위에 개시된 특정 실시예는 단지 예시적인 것이다. 아래의 청구범위에 설명된 것 이외에, 본원에서 도시된 구성 또는 설계의 상세 사항에 대한 제한은 의도되지 않는다. 따라서 위에서 개시된 특정 실시예는 변경되거나 수정될 수 있고 모든 그러한 변형은 개시된 주제의 범위 내에 있는 것으로 고려된다는 것이 명백하다. 따라서, 본원에서 추구하는 보호는 아래의 청구범위에 제시된 바와 같다.

Claims (20)

  1. 장치로서,
    제1 웨이브 그룹을 생성하도록 구성된 제1 셰이더;
    상기 제1 웨이브 그룹을 개시(launch)하도록 구성된 셰이더 프로세서 입력(SPI); 및
    적어도 하나의 제2 셰이더에서 상기 제1 웨이브 그룹을 처리한 결과에 기초하여 제2 웨이브를 생성하도록 구성된 스캔 컨버터를 포함하고, 상기 제1 웨이브 그룹은 진행 중(in-flight)인 제1 웨이브 그룹과 상기 적어도 하나의 제2 셰이더 상에서 실행 계류 중인 제2 웨이브의 비교에 기초하여 선택적으로 스로틀링되는, 장치.
  2. 제1항에 있어서,
    상기 제1 웨이브 그룹이 상기 적어도 하나의 제2 셰이더 상에서 실행을 마감(finish)하는 것에 응답하여 저장된 정보를 보유하도록 구성된 캐시를 더 포함하고, 상기 정보는 대응하는 제2 웨이브에 의해 판독되는, 장치.
  3. 제2항에 있어서,
    상기 제1 웨이브 그룹의 개시를 카운트(count)하도록 구성된 제1 카운터;
    상기 캐시에 기입함으로써 상기 적어도 하나의 제2 셰이더 상에서 실행을 마감한 상기 제1 웨이브 그룹을 카운트하도록 구성된 제2 카운터; 및
    상기 캐시로부터 판독하기 위한 상기 제2 웨이브로부터의 요청을 카운트하도록 구성된 제3 카운터를 더 포함하는, 장치.
  4. 제3항에 있어서,
    상기 제1, 제2, 및 제3 카운터들은 개시 이벤트(event), 실행 마감 이벤트, 및 판독 요청 이벤트가 각각 윈도잉 버퍼 내에 기입되는 것에 응답하여 증분되는, 장치.
  5. 제4항에 있어서,
    상기 제1, 제2, 및 제3 카운터들은 상기 개시 이벤트, 상기 실행 마감 이벤트, 및 상기 판독 요청 이벤트가 각각 상기 윈도잉 버퍼로부터 판독되는 것에 응답하여 감분되는, 장치.
  6. 제5항에 있어서,
    상기 제1 카운터와 상기 제2 카운터 사이의 차이에 기초하여 진행 중인 제1 웨이브 그룹의 제1 수를 결정하고, 상기 제2 카운터와 상기 제3 카운터 사이의 차이에 기초하여 상기 적어도 하나의 제2 셰이더 상에서 실행 계류 중인 제2 웨이브의 제2 수를 결정하도록 구성된 관리 회로부를 더 포함하는, 장치.
  7. 제6항에 있어서,
    상기 관리 회로부는 상기 제1 수가 상기 제2 수보다 낮은 것에 응답하여 상기 SPI에 의해 개시된 상기 제1 웨이브 그룹을 스로틀링하도록 구성되는, 장치.
  8. 제7항에 있어서,
    상기 관리 회로부는 상기 제1 수가 상기 제2 수 더하기 추가적인 인자보다 낮은 것에 응답하여 상기 SPI에 의해 개시된 상기 제1 웨이브 그룹을 스로틀링하도록 구성되고, 추가적인 인자는 상기 제2 웨이브와 연관된 판독 요청의 버스트니스(burstiness)에 기초하여 추정되는, 장치.
  9. 제8항에 있어서,
    상기 관리 회로부는 스로틀링이 작업의 그래픽 파이프라인을 고사(starve)시킬 가능성을 줄이기 위해 상기 추가적인 인자를 결정하도록 구성되는, 장치.
  10. 방법으로서,
    제1 셰이더에서, 셰이더 프로세서 입력(SPI)에 의해 개시를 위한 제1 웨이브 그룹을 생성하는 단계;
    스캔 컨버터에서, 적어도 하나의 제2 셰이더에서 상기 제1 웨이브 그룹을 처리한 결과에 기초하여 제2 웨이브를 생성하는 단계; 및
    진행 중인 제1 웨이브 그룹과 상기 적어도 하나의 제2 셰이더 상에서 실행 계류 중인 제2 웨이브의 비교에 기초하여 상기 제1 웨이브 그룹을 선택적으로 스로틀링하는 단계를 포함하는, 방법.
  11. 제10항에 있어서,
    상기 제1 웨이브 그룹이 상기 적어도 하나의 제2 셰이더 상에서 실행을 마감하는 것에 응답하여 정보를 캐시에 기입하는 단계를 더 포함하고, 상기 정보는 대응하는 제2 웨이브에 의해 판독되는, 방법.
  12. 제11항에 있어서,
    제1 카운터에서, 제1 웨이브 그룹의 개시를 카운트하는 단계;
    제2 카운터에서, 상기 캐시에 기입함으로써 상기 적어도 하나의 제2 셰이더 상에서 실행을 마감한 상기 제1 웨이브 그룹을 카운트하는 단계; 및
    제3 카운터에서, 상기 캐시로부터 판독하기 위한 상기 제2 웨이브로부터의 요청을 카운트하는 단계를 더 포함하는, 방법.
  13. 제12항에 있어서,
    개시 이벤트를 윈도잉 버퍼에 기입하는 단계로서, 상기 제1 웨이브 그룹의 개시를 카운트하는 단계는 상기 개시 이벤트를 상기 윈도잉 버퍼에 기입하는 단계에 응답하여 상기 제1 카운터를 증분시키는 단계를 포함하는, 단계; 및
    상기 개시 이벤트를 상기 윈도잉 버퍼로부터 판독하는 단계로서, 상기 제1 웨이브 그룹의 개시를 카운트하는 단계는 상기 개시 이벤트를 상기 윈도잉 버퍼로부터 판독하는 단계에 응답하여 상기 제1 카운터를 감분시키는 단계를 포함하는, 단계를 더 포함하는, 방법.
  14. 제13항에 있어서,
    실행 마감 이벤트를 상기 윈도잉 버퍼에 기입하는 단계로서, 실행을 마감한 상기 제1 웨이브 그룹을 카운트하는 단계는 상기 실행 마감 이벤트를 상기 윈도잉 버퍼에 기입하는 단계에 응답하여 상기 제2 카운터를 증분시키는 단계를 포함하는, 단계; 및
    상기 실행 마감 이벤트를 상기 윈도잉 버퍼로부터 판독하는 단계로서, 실행을 마감한 상기 제1 웨이브 그룹을 카운트하는 단계는 상기 실행 마감 이벤트를 상기 윈도잉 버퍼로부터 판독하는 단계에 응답하여 상기 제2 카운터를 감분시키는 단계를 포함하는, 단계 중 하나를 더 포함하는, 방법.
  15. 제13항에 있어서,
    판독 요청 이벤트를 상기 윈도잉 버퍼에 기입하는 단계로서, 상기 제2 웨이브로부터의 요청을 카운트하는 단계는 상기 판독 요청 이벤트를 상기 윈도잉 버퍼에 기입하는 단계에 응답하여 상기 제3 카운터를 증분시키는 단계를 포함하는, 단계; 및
    상기 판독 요청 이벤트를 상기 윈도잉 버퍼로부터 판독하는 단계로서, 상기 제2 웨이브로부터의 요청을 카운트하는 단계는 상기 판독 요청 이벤트를 상기 윈도잉 버퍼로부터 판독하는 단계에 응답하여 상기 제3 카운터를 감분시키는 단계를 포함하는, 단계를 더 포함하는, 방법.
  16. 제15항에 있어서,
    상기 제1 카운터와 상기 제2 카운터 사이의 차이에 기초하여 진행 중인 제1 웨이브 그룹의 제1 수를 결정하는 단계; 및
    상기 제2 카운터와 상기 제3 카운터 사이의 차이에 기초하여 상기 적어도 하나의 제2 셰이더 상에서 실행 계류 중인 제2 웨이브의 제2 수를 결정하는 단계를 더 포함하는, 방법.
  17. 제16항에 있어서,
    상기 제1 웨이브 그룹을 선택적으로 스로틀링하는 단계는 상기 제1 수가 상기 제2 수보다 낮은 것에 응답하여 상기 SPI에 의해 개시된 상기 제1 웨이브 그룹을 스로틀링하는 단계를 포함하는, 방법.
  18. 제17항에 있어서,
    상기 제1 웨이브 그룹을 선택적으로 스로틀링하는 단계는 상기 제1 수가 상기 제2 수 더하기 추가적인 인자보다 낮은 것에 응답하여 상기 SPI에 의해 개시된 상기 제1 웨이브 그룹을 스로틀링하는 단계를 포함하고, 추가적인 인자는 상기 판독 요청의 버스트니스에 기초하여 추정되는, 방법.
  19. 제18항에 있어서,
    스로틀링이 작업의 그래픽 파이프라인을 고사시킬 가능성을 줄이기 위해 상기 추가적인 인자를 결정하는 단계를 더 포함하는, 방법.
  20. 장치로서,
    제1 웨이브 그룹을 생성하도록 구성된 제1 셰이더;
    적어도 하나의 제2 셰이더에서 상기 제1 웨이브 그룹을 처리한 결과에 기초하여 제2 웨이브를 생성하도록 구성된 스캔 컨버터; 및
    상기 제1 웨이브 그룹이 상기 적어도 하나의 제2 셰이더 상에서 실행을 마감하는 것에 응답하여 저장된 정보를 보유하도록 구성된 캐시를 포함하고, 상기 제1 웨이브 그룹은 상기 캐시에 기입함으로써 개시되고 실행을 마감하지 않은 상기 제1 웨이브 그룹의 제1 수와 상기 적어도 하나의 제2 셰이더 상에서 실행 계류 중인 제2 웨이브로부터의 상기 캐시에 대한 판독 요청의 제2 수의 비교에 기초하여 선택적으로 스로틀링되는, 장치.
KR1020237035150A 2021-03-30 2022-02-21 파라미터 버퍼에 기초한 웨이브 스로틀링 KR20240004302A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US17/217,050 US11710207B2 (en) 2021-03-30 2021-03-30 Wave throttling based on a parameter buffer
US17/217,050 2021-03-30
PCT/US2022/017156 WO2022211926A1 (en) 2021-03-30 2022-02-21 Wave throttling based on a parameter buffer

Publications (1)

Publication Number Publication Date
KR20240004302A true KR20240004302A (ko) 2024-01-11

Family

ID=83448240

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020237035150A KR20240004302A (ko) 2021-03-30 2022-02-21 파라미터 버퍼에 기초한 웨이브 스로틀링

Country Status (6)

Country Link
US (1) US11710207B2 (ko)
EP (1) EP4315228A1 (ko)
JP (1) JP2024512466A (ko)
KR (1) KR20240004302A (ko)
CN (1) CN117377973A (ko)
WO (1) WO2022211926A1 (ko)

Family Cites Families (35)

* 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
US7594095B1 (en) * 2005-11-29 2009-09-22 Nvidia Corporation Multithreaded SIMD parallel processor with launching of groups of threads
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
US9965321B2 (en) * 2011-12-09 2018-05-08 Nvidia Corporation Error checking in out-of-order task scheduling
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
US10127707B2 (en) * 2016-06-27 2018-11-13 Intel Corporation Discard mechanism for tile-based rendering
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
US10713746B2 (en) * 2018-01-29 2020-07-14 Microsoft Technology Licensing, Llc FIFO queue, memory resource, and task management for graphics processing
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

Also Published As

Publication number Publication date
CN117377973A (zh) 2024-01-09
US11710207B2 (en) 2023-07-25
US20220318944A1 (en) 2022-10-06
WO2022211926A1 (en) 2022-10-06
JP2024512466A (ja) 2024-03-19
EP4315228A1 (en) 2024-02-07

Similar Documents

Publication Publication Date Title
US11948251B2 (en) Throttling hull shaders based on tessellation factors in a graphics pipeline
US11010862B1 (en) Reduced bandwidth tessellation factors
US11720499B2 (en) Selective generation of miss requests for cache lines
CN111316239B (zh) 利用动态资源分配的波创建控制
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
US20230205602A1 (en) Priority inversion mitigation
US11386518B2 (en) Exception handler for sampling draw dispatch identifiers