KR20080085888A - 그래픽 프로세서용 병렬 어레이 아키텍처 - Google Patents

그래픽 프로세서용 병렬 어레이 아키텍처 Download PDF

Info

Publication number
KR20080085888A
KR20080085888A KR1020087017716A KR20087017716A KR20080085888A KR 20080085888 A KR20080085888 A KR 20080085888A KR 1020087017716 A KR1020087017716 A KR 1020087017716A KR 20087017716 A KR20087017716 A KR 20087017716A KR 20080085888 A KR20080085888 A KR 20080085888A
Authority
KR
South Korea
Prior art keywords
pixel
processing
data
processing clusters
frame buffer
Prior art date
Application number
KR1020087017716A
Other languages
English (en)
Other versions
KR101027621B1 (ko
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 KR20080085888A publication Critical patent/KR20080085888A/ko
Application granted granted Critical
Publication of KR101027621B1 publication Critical patent/KR101027621B1/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
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • G06F15/8015One dimensional arrays, e.g. rings, linear arrays, buses
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G5/00Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
    • G09G5/36Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators characterised by the display of a graphic pattern, e.g. using an all-points-addressable [APA] memory
    • G09G5/363Graphics controllers
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G5/00Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
    • G09G5/36Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators characterised by the display of a graphic pattern, e.g. using an all-points-addressable [APA] memory
    • G09G5/39Control of the bit-mapped memory
    • G09G5/393Arrangements for updating the contents of the bit-mapped memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/52Parallel processing
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G2360/00Aspects of the architecture of display systems
    • G09G2360/06Use of more than one graphics processor to process data before displaying to one or more screens
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G2360/00Aspects of the architecture of display systems
    • G09G2360/12Frame memory handling
    • G09G2360/122Tiling

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Graphics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computing Systems (AREA)
  • Image Generation (AREA)
  • Image Processing (AREA)

Abstract

그래픽 프로세서에 대한 병렬 어레이 아키텍처는, 다수의 처리 클러스터들을 포함하는 다중스레드형 코어 어레이를 포함하고, 각각의 처리 클러스터는 커버리지 데이터로부터 픽셀 데이터를 생성하는 픽셀 셰이더 프로그램을 실행하도록 동작가능한 적어도 하나의 처리 코어; 다수의 픽셀들 각각에 대해 커버리지 데이터를 생성하도록 구성된 래스터화기; 및 래스터화기로부터, 다중스레드형 코어 어레이의 처리 클러스터들 중 하나에 커버리지 데이터를 전달하도록 구성된 픽셀 분배 로직을 포함한다. 픽셀 분배 로직은, 제1 픽셀에 대한 커버리지 데이터가 이미지 영역 내의 제1 픽셀의 위치에 적어도 부분적으로 기초하여 전달되는 처리 클러스터들 중 하나를 선택한다. 처리 클러스터들은, 픽셀 데이터가 처리 클러스터로부터 적합한 프레임 버퍼 파티션들로 직접 전달되도록, 크로스바없이 프레임 버퍼 파티션들에 직접 매핑될 수 있다. 대안으로서, 처리 클러스터들 각각에 연결된 크로스바는 처리 클러스터들로부터의 픽셀 데이터를 다수의 파티션들을 갖는 프레임 버퍼로 전달하도록 구성된다. 크로스바는, 처리 클러스터들 중 임의의 하나에 의해 생성된 픽셀 데이터가 프레임 버퍼 파티션들 중 임의의 하나로 전달될 수 있도록 구성된다.
그래픽 프로세서, 프레임 버퍼, 픽셀 데이터, 처리 클러스터, 파티션, 커버리지 데이터

Description

그래픽 프로세서용 병렬 어레이 아키텍처{PARALLEL ARRAY ARCHITECTURE FOR A GRAPHICS PROCESSOR}
< 관련 출원의 상호 참조 >
본원은, 다용도로, 참조로서 완전히 본원에 포함된, 2005년 12월 19일에 출원된 미국 가출원 번호 60/752,265의 이익을 청구한다.
본원은 다음의 공통적으로-지정된 상호-계류중(co-pending)인 미국 특허 출원들에 관련된다: 2005년 11월 29일에 출원된 출원번호 11/290,303; 2005년 11월 29일에 출원된 출원번호 11/289,828; 및 2005년 12월 19일에 출원된 출원번호 11/311,933은 다용도로 참조로서 본원에 완전히 포함된다.
< 기술 분야 >
본 발명은 일반적으로 그래픽 프로세서들에 관한 것이고, 보다 구체적으로 그래픽 프로세서용 병렬 어레이 아키텍처에 관한 것이다.
병렬 처리 기술(parallel processing technique)들은 다중 독립적 계산(multiple independent computation)들이 수행될 필요가 있을 때 프로세서 또는 다중프로세서 시스템의 처리량을 향상시킨다. 계산은 프로그램들에 의해 정의된 업무(task)들로 분할(divide)될 수 있고, 각각의 업무는 개별 스레드(separate thread)로서 수행된다. (본원에 이용된 바와 같이, "스레드"는 특정 입력 데이터를 이용하는 특정 프로그램의 실행에 대한 예를 일반적으로 지칭하고, "프로그램"은 입력 데이터로부터 결과 데이터를 생성하는 실행가능한 명령어(executable instruction)들의 시퀀스를 지칭한다.) 병렬 스레드들은 프로세서 내측의 상이한 처리 엔진들을 이용하여 동시에 실행된다.
다수의 현존하는 프로세서 아키텍처들은 병렬 처리를 지원한다. 가장 최초의 그러한 아키텍처들은 서로 통신접속된(networked) 다중 개별 프로세서(multiple discrete processor)들을 이용했다. 보다 최근에, 다중 처리 코어들이 단일 칩 상에 제조되었다. 이러한 코어들은 다양한 방법들로 제어된다. 다중-명령어 다중 데이터(multiple-instruction cultiple data, MIMD) 머신들로서 알려진 일부 예들에서, 각각의 코어는 그 자신의 처리 엔진(또는 엔진들)에 그 자신의 명령어들을 독립적으로 페치(fetch)하여 발행한다. 단일-명령어 다중-데이터(single-instruction multiple-data, SIMD) 머신으로서 알려진 다른 예들에서, 코어는, 상이한 입력 오퍼랜드(operand)들에 대한 명령어를 실행하는 다중 처리 엔진들에 병렬로 동일한 명령어를 발행하는 단일 명령어 유닛을 갖는다. SIMD 머신들은 일반적으로 (단지 하나의 명령어 유닛만이 요구되기 때문에) 칩 영역(chip area)에 있는 장점들을 갖고, 따라서 비용 절감적이다; 불리한 측면은, 동일 명령어의 다중 예들이 동시에 실행될 수 있는 정도로만 병렬 계산(parallelism)이 이용가능하다는 것이다.
종래의 그래픽 프로세서들은 이미지-렌더링(image-rendering) 어플리케이션 들에서 높은 처리량을 달성하기 위해 매우 광범위한(wide) SIMD 아키텍처들을 이용한다. 그러한 어플리케이션들은 일반적으로 상당수의 객체(object)들(정점들(vertice) 또는 픽셀들)에 대해 동일 프로그램들(정점 셰이더들(vertex shader) 또는 픽셀 셰이더들)을 실행하는 것을 수반한다. 각각의 객체는 모든 다른 것들에 대해 독립적으로 처리되지만 연산(operation)들의 동일한 시퀀스를 이용하기 때문에, SIMD 아키텍처는 합리적인 가격으로 상당한 성능 향상을 제공한다. 통상, GPU는 정점 셰이더 프로그램들을 실행하는 하나의 SIMD 코어 및, 픽셀 셰이더 프로그램들을 실행하는 필적하는 크기(comparable size)의 다른 SIMF 코어를 포함한다. 최고급 GPU들에서, SIMD 코어들의 다중 세트(multiple set)들은 때때로 매우 높은 수준의 병렬 계산을 지원하기 위해 제공된다.
이러한 설계들은 여러 결점들을 갖는다. 우선, 정점 및 셰이더 프로그램들에 대한 각각의 처리 코어들은 개별적으로 설계되고 테스트되어, 종종 적어도 노력의 2배 정도를 이끌어낸다. 두번째, 정점 연산들 및 픽셀 연산들 사이의 그래픽 처리 부하(load)의 분할(division)은 하나의 어플레케이션으로부터 다른 어플리케이션으로 크게 변화한다. 본 기술분야에서 알려진 바와 같이, 상세(detail)는, 정점 셰이더 코어 상의 부하를 증가시키는 많은 작은 프리미티브(primitive)들을 이용함으로써 및/또는 픽셀 셰이더 코어 상의 부하를 증가시키는 픽셀 셰이딩 연산들 및 복합 텍스처-맵핑(complex texture-mapping)을 이용함으로써 이미지에 부가될 수 있다. 대부분의 경우들에서, 부하들은 완전히 균형잡히지 않고, 하나의 코어 또는 다른 코어도 충분히 이용되지 않는다. 예로서, 픽셀-집중적(pixel- intensive) 어플리케이션에서, 픽셀 셰이더 코어는 최대 처리량으로 동작할 수 있지만, 정점 코어는 이미 처리된 정점들을 대기시키면서 정지하여, 파이프라인(pipeline)의 픽셀 셰이더 스테이지로 움직인다. 반대로, 정점-집중적 어플리케이션에서, 정점 셰이더 코어는 최대 처리량으로 동작할 수 있지만, 픽셀 코어는 공급될 새로운 정점들을 대기하면서 정지한다. 어느 경우에나, 이용가능한 처리 사이클들의 일부분(some fraction)이 사실상 낭비된다.
그러므로, 상이한 셰이더들에 부하들을 변경시키면서 높은 수준의 병행성(parallelism)을 유지하도록 구성될 수 있는 그래픽 프로세서를 제공하는 것이 바람직할 것이다.
< 발명의 간단한 요약 >
본 발명의 실시예들은, 렌더링 연산들 동안 임의의 조합으로, 정점 셰이더 프로그램들, 기하구조 셰이더 프로그램들 및/또는 픽셀 셰이더 프로그램들을 실행하기 위해 가변(scalable) 다중스레드형 코어 어레이(multithreaded core array)를 이용하는 그래픽 프로세서들을 제공한다. 코어 어레이는 하나 이상의 클러스터에 정렬된 다수의 다중스레드형 처리 코어들을 포함하고, 동일 클러스터 내의 코어들은 공유 코어 인터페이스(shared core interface)에 의해 제어된다.
픽셀 셰이더 프로그램이 실행되는 실시예들에서, 프로그램이 실행되는 클러스터 또는 코어는 장점으로서, 이미지 영역 내의 픽셀의 위치에 기초하여 선택된다. 일 실시예에서, 스크린은 타일로 덮히고(tiled), 각각의 타일은 처리 클러스터들 중 하나 또는 다른 클러스터에 (또는 처리 클러스터 내의 특정 코어에) 할당 된다. 소정의 처리 클러스터 또는 코어에 할당된 타일(tile)은 장점으로서, 대략적인 부하 균형을 제공하기 위해 스크린을 가로질러 흩어진다(scatterd across).
일부 실시예들에서, 처리 코어 또는 클러스터는, 프레임 버퍼에 현존하는 데이터를 갖는 새롭게 생성된 픽셀 데이터를 통합하는 래스터 연산(raster operation) 유닛을 포함한다. 프레임 버퍼는 처리 클러스터들의 수와 매칭되도록 분할될(partitioned) 수 있고, 각각의 클러스터는 하나의 파티션에 그의 데이터 전부를 기록한다. 다른 실시예들에서, 프레임 버퍼의 파티션들의 수는 이용에 있어, 처리 클러스터의 수와 매칭되도록 할 필요는 없다. 크로스바(crossbar) 또는 유사한 회로 구조는, 처리 클러스터들 및 프레임 버퍼 파티션들 사이에 설정 결합(configurable coupling)을 제공할 수 있어, 임의의 처리 클러스터는 임의의 프레임 버퍼 파티션들에 연결될 수 있다; 일부 실시예들에서, 메모리 위치를 개선하는 크로스바가 생략된다.
첨부 도면들과 함께 한 다음의 상세 설명은, 본 발명의 본질 및 장점들에 대한 더 나은 이해를 제공할 것이다.
도 1은 본 발명의 실시예에 따른 컴퓨터 시스템의 블록도이다.
도 2는 본 발명의 실시예에 따른 그래픽 프로세서에서 구현될 수 있는 렌더링 파이프라인의 블록도이다.
도 3은 본 발명의 실시예에 따른 그래픽 프로세서에 대한 다중스레드 코어 어레이의 블록도이다.
도 4는 본 발명의 실시예에 따른 이미지 구역에 대한 다수의 타일들로의 하나의 가능한 타일링을 도시한다.
도 5는 본 발명의 실시예에 따른 처리 클러스터들과 프레임 버퍼 사이의 결합을 도시하는 단순화된 블록도이다.
도 6은 본 발명의 다른 실시예에 따른 처리 클러스터들과 프레임 버퍼 사이의 결합을 도시하는 단순화된 블록도이다.
시스템 개관
도 1은 본 발명의 실시예에 따른 컴퓨터 시스템(100)의 블록도이다. 컴퓨터 시스템(100)은 메모리 브리지(memory bridge)(105)를 포함하는 버스 경로(bus path)를 통해 통신하는 시스템 메모리(104) 및 중앙 처리 유닛(CPU)(102)을 포함한다. 메모리 브리지(105)는 버스 경로(106)를 통해 I/O(입력/출력) 브리지(107)에 접속된다. I/O 브리지(107)는 하나 이상의 사용자 입력 디바이스들(108)(예를 들어, 키보드, 마우스)로부터 사용자 입력을 수신하여, 버스(106) 및 메모리 브리지(105)를 통해 CPU(102)에 그 입력을 전달한다. 시각적 출력(visual output)은 버스(113)를 통해 메모리 브리지(105)에 연결된 그래픽 서브시스템(112)의 제어 하에 동작하는 픽셀 기반의 디스플레이 디바이스(110)(예를 들어, 모니터 기반의 종래 CRT 또는 LCD)에 제공된다. 시스템 디스크(114)도 I/O 브리지(107)에 접속된다. 스위치(116)는 I/O 브리지와, 네트워크 어뎁터(118) 및 다양한 애드-인(add-in) 카드들(120, 121)과 같은 다른 컴포넌트들 사이에 접속들을 제공한다. USB 또 는 다른 포트 접속들, CD 드라이브들, DVD 드라이브들 등을 포함하는 다른 컴포넌트들(정확히 나타내지 않음)도 I/O 브리지(107)에 접속될 수도 있다. 다양한 컴포넌트들 사이의 버스 접속들은 PCI(peripheral Component Interconnect), PCI 익스프레스(PCI-E), AGP(Accelerated Graphics Port), 하이퍼트랜스포트(HyperTransport), 또는 임의의 다른 버스 프로토콜(들)과 같은 버스 프로토콜들을 이용하여 구현될 수 있고, 상이한 디바이스들 간의 접속들은, 본 기술분야에 알려진 바와 같이 상이한 프로토콜들을 이용할 수 있다.
그래픽 처리 서브시스템(112)은 그래픽 처리 유닛(GPU)(122) 및 그래픽 메모리(124)를 포함하고, 예를 들어, 프로그램가능한 프로세서들, ASIC(application specific integrated circuit)들 및 메모리 디바이스들과 같은 하나 이상의 집적 회로 디바이스들을 이용하여 구현될 수 있다. GPU(122)는, 메모리 브리지(105) 및 버스(113)을 통해 CPU(102) 및/또는 시스템 메모리(104)에 의해 공급된 그래픽 데이터로부터 픽셀 데이터를 생성하고, 픽셀 데이터를 저장하고 업데이트하기 위해 그래픽 메모리(124)와 상호작용하는 등에 관련된 다양한 작업들을 수행하도록 구성될 수 있다. 예를 들어, GPU(122)는 CPU(102)에서 실행하는 다양한 프로그램들에 의해 제공된 2-D 또는 3-D 장면(scene) 데이터로부터 픽셀 데이터를 생성할 수 있다. GPU(122)는 추가 처리로 또는 추가 처리 없이, 메모리 브리지(105)를 통해 수신된 픽셀 데이터를 그래픽 메모리(124)에 저장할 수도 있다. GPU(122)는 그래픽 메모리(124)로부터 디스플레이 디바이스(110)로 픽셀 데이터를 전달하도록 구성된 스캔아웃(scanout) 모듈도 포함한다.
CPU(102)는 다른 시스템 컴포넌트들의 연산들을 제어하고 조절하는 시스템(100)의 마스터 프로세서(master processor)로서 동작한다. 특히, CPU(102)는 GPU(122)의 연산을 제어하는 커맨트(command)들을 발행한다. 일부 실시예들에서, CPU(102)는, 시스템 메모리(104), 그래픽 메모리(124), 또는 CPU(102) 및 GPU(122) 둘 다에 대해 액세스가능한 다른 저장 위치에 있는 커맨드 버퍼에, GPU(122)에 대한 커맨드들의 스트림을 기록한다. GPU(122)는 커맨드 버퍼로부터의 커맨드 스트림을 판독하여 CPU(102)의 연산에 대해 비동기식으로 커맨드들을 실행한다. 커맨드들은, 이미지들의 생성을 위한 일반적인 렌더링 커맨드들뿐만 아니라 어플리케이션들이 CPU(102)를 실행할 수 있게 하는 범용의 계산 커맨트들을 포함하여, 이미지 생성에 관계되지 않을 수 있는 데이터 처리에 대한 GPU(122)의 계산력에 영향을 준다.
본원에 나타낸 시스템은 예시적이고, 변화들 및 수정들이 가능하다는 것이 이해될 것이다. 브리지들의 수 및 배열을 포함하는 버스 토폴로지(topology)는 원하는 바 대로 수정될 수 있다. 예로서, 일부 실시예들에서, 시스템 메모리(104)는 브리지를 통해서라기 보다 직접 CPU(102)에 접속되고, 메모리 브리지(105) 및 CPU(102)를 통해 시스템 메모리(104)와 통신하는 디바이스들에 접속된다. 다른 대안적인 토폴로지들에서, 그래픽 서브시스템(112)은 메모리 브리지(105)보다는 I/O 브리지(107)에 접속된다. 또 다른 실시예들에서, I/O 브리지(107) 및 메모리 브리지(105)는 단일 칩에 집적될 수 있다. 본원에 나타낸 특정 컴포넌트들은 선택적이다; 예로서, 다수의 애드-인(add-in) 카드들 또는 주변 디바이스들이 지원될 수 있다. 일부 실시예들에서, 스위치(116)가 제거되고, 네트워크 어뎁터(118) 및 애드-인 카드들(120, 121)은 I/O 브리지(107)에 직접 접속한다.
시스템(100)의 나머지로의 GPU(122)의 접속은 변화될 수도 있다. 일부 실시예들에서, 그래픽 시스템(112)은 시스템(100)의 확장 슬롯에 삽입될 수 있는 애드-인 카드로서 구현될 수 있다. 다른 실시예들에서, GPU는 메모리 브리지(105) 또는 I/O 브리지(107)와 같은 버스 브리지와 함께 단일 칩 상에 집적된다.
GPU는 로컬 메모리를 포함하지 않는 임의의 양의 로컬 그래픽 메모리가 제공될 수 있고, 임의의 조합으로 로컬 메모리 및 시스템 메모리를 이용할 수 있다. 예로서, UMA(unified memory architecture) 실시예에서, 어떠한 전용 그래픽 메모리 디바이스도 제공된지 않고, GPU는 독점적으로 또는 거의 독점적으로 시스템 메모리를 이용한다. UMA 실시예들에서, GPU는, 버스 브리지 칩에 집적될 수 있거나, 또는 GPU를 브리지 칩 및 시스템 메모리에 접속시키는 고속의 버스(high-speed bus)(예를 들어, PCI-E)를 구비한 개별 칩(discrete chip)으로서 제공될 수 있다.
다수의 GPU들은, 예를 들어, 단일 그래픽 카드에 다중 GPU들을 포함함으로써 또는 다중 그래픽 카드들을 버스(113)에 접속시킴으로써, 시스템에 포함될 수 있다는 것도 이해될 것이다. 다중 GPU들은 동일 디스플레이 디바이스 또는 상이한 디스플레이 디바이스들에 대한 이미지들을 동시에 생성하도록 동작될 수 있다.
부가적으로, 본 발명의 양태들을 내포하는 GPU들은, 범용 컴퓨터 시스템들, 비디오 게임 콘손들 및 다른 특정 목적의 컴퓨터 시스템들, DVD 플레이어들, 이동 전화들 또는 PDA(personal digital assistant)들과 같은 핸드헬드 디바이스들 등을 포함하는 다수의 디바이스들에 포함될 수 있다.
렌더링 파이프라인 개관
도 2는 본 발명의 실시예에 따른, 도 1의 GPU(122)에서 구현될 수 있는 렌더링 파이프라인(200)의 블록도이다. 이러한 실시예에서, 렌더링 파이프라인(200)은, 임의의 응용가능한 정점 셰이더 프로그램들, 기하구조 셰이더 프로그램들 및 픽셀 셰이더 프로그램들이, "다중스레드형 코어 어레이"(202)로서 본원에 지칭되는 동일한 병렬-처리 하드웨어를 이용하여 실행되는 아키텍처를 이용하여 구현된다. 다중스레드형 코어 어레이(202)가 아래 더 설명된다.
다중스레드형 코어 어레이(202)에 부가하여, 렌더링 파이프라인(200)은 프론트 엔드(front end)(204) 및 데이터 어셈블러(206), 셋업 모듈(208), 래스터화기(210), 컬러 어셈블리 모듈(212), 및 래스터 연산 모듈(raster operations module, ROP)(214)을 포함하고, 각각은 종래의 집적 회로 기술들 또는 다른 기술들을 이용하여 구현된다.
프론트 엔드(204)는 예를 들어, 도 1의 CPU(102)로부터, 상태 정보(STATE), 렌더링 커맨드들(CMD) 및 기하구조 데이터(GDATA)을 수신한다. 일부 실시예들에서, CPU(102)는 기하구조 데이터를 직접 제공하기보다는, 기하구조 데이터가 저장된 시스템 메모리(104)의 위치들에 기준(reference)들을 제공한다; 데이터 어셈블러(206)는 시스템 메모리(104)로부터 데이터를 검색한다. 상태 정보, 렌더링 커맨드들 및 기하구조 데이터는 일반적인 종래의 본질을 가질 수 있고, 장면에 대한 기하구조, 조명(lighting), 음영(shading), 텍스처, 모션(motion) 및/또는 카메라 파 라미터들을 포함하는, 원하는 렌더링된 이미지 또는 이미지들을 정의하는데 이용될 수 있다.
일 실시예에서, 기하구조 데이터는 장면에 존재할 수 있는 객체들(예를 들어, 테이블, 의자, 사람 또는 동물)의 다수의 객체 정의들을 포함한다. 객체들은 장점으로서, 그들의 정점들에 대한 기준에 의해 정의되는 프리미티브들(예를 들어, 점들, 선들, 삼각형들 및/또는 다른 다각형들)의 그룹들로서 모델화된다. 각각의 정점에 대해, 모델화되는 객체에 대한 정점의 위치를 나타내는 객체 좌표 시스템에서 위치가 구체화된다. 위치에 부가하여, 각각의 정점은 그와 연관된 다양한 다른 속성(attribute)들을 가질 수 있다. 일반적으로, 정점의 속성들은 정점 마다 기초하여 특정된 임의의 속성을 포함할 수 있다; 예로서, 일부 실시예들에서, 정점 속성들은, 컬러, 텍스처, 투명도(transparency), 조명, 음영, 및 정점의 애니메이션 및 그의 관련 기하구조 프리미티브들과 같은 품질들을 결정하는데 이용된 스칼라 또는 벡터 속성들을 포함한다.
이미 언급된 바와 같이, 프리미티브들은 그들의 정점들에 대한 기준에 의해 일반적으로 정의되고, 단일 정점은 임의의 수의 프리미티브들에 포함될 수 있다. 일부 실시예들에서, 각각의 정점은 (임의의 고유 식별자일 수 있는) 인덱스가 할당되고, 프리미티브는 그 프리미티브를 구성하는 정점들에 대한 인덱스들의 순서화된 리스트를 제공함으로써 정의된다. (삼각형 스트립들 또는 팬(fan)들과 같은 종래 기술들을 포함하는) 프리미티브들을 정의하는 다른 기술들이 이용될 수도 있다.
상태 정보 및 렌더링 커맨드들은 렌더링 파이프라인(200)의 다양한 스테이지 들에 대한 처리 파라미터들 및 동작(action)들을 정의한다. 프론트 엔드(204)는 렌더링 파이프라인(200)의 다른 컴포넌트들로 (정확히 나타내지 않은) 제어 경로(control path)를 통해 상태 정보 및 렌더링 커맨드들을 지시(direct)한다. 본 기술분야에 알려진 바와 같이, 이러한 컴포넌트들은, 처리 동안 액세스되는 다양한 제어 저항기들에 값들을 저장하거나 또는 업데이트함으로써 수신된 상태 정보에 응답할 수 있고, 파이프라인에서 수신된 데이터를 처리함으로써 렌더링 커맨드들에 응답할 수 있다.
프론트 엔드(204)는 데이터 어셈블러(206)에 기하구조 데이터를 지시한다. 데이터 어셈블러(206)는 기하구조 데이터를 포맷하여, 그 데이터를 다중스레드형 코어 어레이(202)의 기하구조 모듈(218)로 전달하기 위해 준비한다.
기하구조 모듈(218)은 다중스레드형 코어 어레이(202)의 프로그램가능한 처리 엔진들(정확히 나타내지 않음)이, 정점 데이터에 대한 정점 및/또는 기하구조 셰이더 프로그램들을 실행하도록 지시하고, 프로그램들은 프론트 엔드(204)에 의해 제공된 상태 정보에 응답하여 선택된다. 정점 및/또는 기하구조 셰이더 프로그램들은 본 기술분야에 알려진 바와 같이, 렌더링 어플리케이션에 의해 특정될 수 있고, 상이한 셰이더 프로그램들이 상이한 정점들 및/또는 프리미티브들에 적용될 수 있다. 이용되는 셰이더 프로그램(들)은, 시스템 메모리 또는 그래픽 메모리에 저장될 수 있고, 본 기술분야에 알려진 바와 같이, 적정 렌더링 커맨드들 및 상태 정보를 통해 다중스레드형 코어 어레이(202)에 대해 식별될 수 있다. 일부 실시예들에서, 정점 셰이더 및/또는 기하구조 셰이더 프로그램들은 다중 경로들(multiple passes)에서 실행될 수 있고, 상이한 처리 연산들은 각각의 경로 동안 수행된다. 각각의 정점 및/또는 기하구조 셰이더 프로그램은 각각의 경로 동안 수행될 경로들 및 연산들의 수를 결정한다. 정점 및/또는 기하구조 셰이더 프로그램들은, 정점들 및 다른 데이터에 대한 광범위한 수학적 및 논리적 연산들을 이용하여 알고리즘들을 구현할 수 있고, 프로그램들은 조건적 또는 브랜칭 실행 경로(branching execution path)들 및, 직접 및 간접 메모리 액세스들을 포함할 수 있다.
정점 셰이더 프로그램들 및 기하구조 셰이더 프로그램들은 조명 및 음영 효과들을 포함하는 다수의 시각적 효과들을 구현하는데 이용될 수 있다. 예로서, 단순한 실시예에서, 정점 프로그램은 정점을 그의 3D 객체 좌표 시스템에서 3D 클립 공간(clip space) 또는 세계 공간 좌표 시스템(world space coordinate system)으로 변환한다. 이러한 변환은 장면에서의 상이한 객체들의 상대적인 위치를 정의한다. 일 실시예에서, 변환은, 각각의 객체를 정의하는 렌더링 커맨드들 및/또는 데이터에서, 그 객체의 객체 좌표 시스템에서 클립 공간 좌표들로 변환하기 위한, 변환 행렬을 포함함으로써 프로그램될 수 있다. 정점 셰이더 프로그램은 객체를 구성하는 프리미티브들의 각각의 정점에 이러한 변환 행렬을 적용한다. 보다 많은 복합 정점 셰이더 프로그램들이, 조명 및 음영, 절차적 기하구조(procedural geometry), 및 애니메이션 동작들을 포함하는, 다양한 시각적 효과들을 구현하는데 이용될 수 있다. 그러한 정점 동작들 마다에 대한 다수의 예들은 본 기술분야에 알려져 있으므로, 본 발명을 이해하는데 중요하지 않음에 따라 상세 설명은 생략된다.
기하구조 셰이더 프로그램들은, 기하구조 셰이더 프로그램들이 개별 정점들보다는 프리미티브들(정점들의 그룹들)에 대해 연산하는 정점 셰이더 프로그램들과 상이하다. 따라서, 일부 예들에서, 기하구조 프로그램은 새로운 정점들을 생성하고 및/또는 처리될 객체들의 세트로부터 정점들 또는 프리미티브들을 제거할 수 있다. 일부 실시예들에서, 정점 셰이더 프로그램 및 기하구조 셰이더 프로그램을 통한 경로들은 기하구조 데이터를 처리하기 위해 선택될 수 있다.
일부 실시예들에서, 정점 셰이더 프로그램들 및 기하구조 셰이더 프로그램들은 다중스레드형 코어 어레이(202)의 동일한 프로그램가능한 처리 엔진들을 이용하여 실행된다. 따라서, 소정 시간에, 소정의 처리 엔진은 정점 프로그램 명령어들을 수신하여 실행하는 정점 셰이더로서 동작할 수 있고, 다른 시간에, 동일한 처리 엔진은 기하구조 프로그램 명령어들을 수신하여 실행하는 기하구조 셰이더로서 동작할 수 있다. 처리 엔진들은 다중스레드될 수 있고, 상이한 타입들의 셰이더 프로그램들을 실행하는 상이한 스레드들은 다중스레드형 코어 어레이(202)에서 동시에 인 플라이트(in-flight)될 수 있다.
정점 및/또는 기하구조 셰이더 프로그램들이 실행된 후, 기하구조 모듈(218)은 처리된 기하구조 데이터(GDATA')를 셋업 모듈(208)로 전달한다. 일반적인 종래의 설계를 가질 수 있는 셋업 모듈(208)은, 각각의 프리미티브의 클립 공간 또는 스크린 공간 좌표들로부터 에지 방정식들(edge equations)을 생성한다; 에지 방정식들은 장점으로서, 스크린 공간의 점(point)이 프리미티브 내에 있는지 또는 밖에 있는지를 결정하는데 이용될 수 있다.
셋업 모듈(208)은 래스터화기(210)에 각각의 프리미티브(PRIM)를 제공한다. 일반적인 종래의 설계를 가질 수 있는 래스터화기(210)는 (만일) 어떤 픽셀들이 예를 들어, 종래 스캔-변환 알고리즘들을 이용하여 프리미티브에 의해 커버되는지를 결정한다. 본원에 이용된 바와 같이, "픽셀"(또는 "조각(fragment)")은 일반적으로 단일 컬러 값이 결정되는 2-D 스크린 공간에 있는 영역을 지칭한다; 픽셀들의 수 및 배열은 렌더링 파이프라인(200)의 설정 파라미터일 수 있고, 특정 디스플레이 디바이스의 스크린 해상도와 상관관계가 있을 수 있거나 상관관계가 없을 수 있다. 본원에 알려진 바와 같이, 픽셀 컬러는 픽셀 내의 다수의 위치들에서 단순화될 수 있고, 일부 실시예들에서, 픽셀 셰이더 내에서 수퍼샘플링(supersampling) 또는 다중샘플링(multisampling)이 처리된다.
어떤 픽셀들이 프리미티브에 의해 커버되는지를 결정한 후, 래스터화기(210)는, 프리미티브에 의해 커버되는 픽셀들의 스크린 좌표들(X, Y)의 리스트에 따라, 컬러 어셈블리 모듈(212)에 프리미티브(PRIM)를 제공한다. 컬러 어셈블리 모듈(212)은 프리미티브의 정점들의 속성들(예를 들어, 컬러 컴포넌트들, 텍스처 좌표들, 표면 법선(surface normal)들)을 갖는 래스터화기(210)로부터 수신된 커버리지 정보 및 프리미티브들과 관련되고, 스크린 좌표 공간의 위치 함수로서 속성들의 일부 또는 전부를 정의하는 평면 방정식들(또는 다른 적정 방정식들)을 생성한다.
이러한 속성의 방정식들은 장점으로서, 프리미티브 내의 임의의 위치에 속성 값을 삽입(interpolate)하기 위해 픽셀 셰이더 프로그램에서 이용가능할 수 있다; 종래 기술들이 방정식들을 생성하기 위해 이용될 수 있다. 예로서, 일 실시예에 서, 컬러 어셈블리 모듈(212)은 각각의 속성 U에 대한 U=Ax+By+C 형태의 평면 방정식에 대해 계수들(A, B 및 C)을 생성한다.
컬러 어셈블리 모듈(212)은 적어도 하나의 픽셀을 커버하는 각각의 프리미티브 및 커버된 픽셀들의 스크린 좌표(X, Y)의 리스트에 대한 속성 방정식들(예를 들어, 평면 방정식 계수들(A, B 및 C)를 포함할 수 있는 EQS)을 다중스레드형 코어 어레이(202)의 픽셀 모듈(224)에 제공한다. 픽셀 모듈(224)은 다중스레드형 코어 어레이(202)의 (정확히 나타내지 않은) 프로그램가능한 처리 엔진들에게, 프리미티브에 의해 커버되는 각각의 픽셀에 대해 하나 이상의 픽셀 셰이더 프로그램들을 실행하도록 지시하고, 프로그램(들)은 프론트 엔드(204)에 의해 제공된 상태 정보에 응답하여 선택된다. 정점 셰이더 프로그램들 및 기하구조 셰이더 프로그램들에 따라, 렌더링 어플리케이션들은 임의의 소정의 픽셀들의 세트에 대해 이용되는 픽셀 셰이더 프로그램을 특정할 수 있다. 픽셀 셰이더 프로그램들은 조명 및 음영 효과들, 반사들, 텍스처 블랜딩(blending), 절차적 텍스처 생성 등을 포함하는 다양한 시각적 효과들을 구현하는데 이용될 수 있다. 그러한 픽셀 연산들 마다의 다수의 예제들은, 본 기술분야에 알려져 있어 본 발명을 이해하는데 있어 중요하지 않은 것으로서, 상세 설명은 생략된다. 픽셀 셰이더 프로그램들은 픽셀들 및 다른 데이터에 대한 광범위한 수학적 및 논리적 연산들을 이용하여 알고리즘들을 구현할 수 있고, 프로그램들은 조건적 또는 브랜칭 실행 경로들 및, 직접 및 간접 메모리 액세스들을 포함할 수 있다.
픽셀 셰이더 프로그램들은 장점으로서, 정점 및/또는 기하구조 셰이더 프로 그램들도 실행하는 동일한 프로그램가능한 처리 엔진들을 이용하여 다중스레드형 코어 어레이(202)에서 실행된다. 따라서, 소정의 시간에, 소정의 처리 엔진은 정점 프로그램 명령어들을 수신하여 실행하는 정점 셰이더로서 동작할 수 있고, 다른 시간에, 동일한 처리 엔진은 기하구조 프로그램 명령어들을 수신하여 실행하는 기하구조 셰이더로서 동작할 수 있으며; 또 다른 시간에, 동일한 처리 엔진은 픽셀 셰이더 프로그램 명령어들을 수신하고 실행하는 픽셀 셰이더로서 동작할 수 있다. 다중스레드형 코어 어레이는 픽셀과 정점 프로세싱 사이에 본래의 부하-균형(natural load-balancing)을 제공할 수 있다는 것이 이해될 것이다: 어플리케이션이 기하구조 강조(예를 들어, 많은 작은 프리미티브들)인 경우, 다중스레드형 코어 어레이(202)의 처리 사이클들의 큰 비율(large fraction)이 정점 및/또는 기하구조 셰이더들에 전념하는 경향이 있을 것이고, 어플리케이션이 픽셀 강조인 경우(예를 들어, 다중 텍스처들 등을 구비한 복합 픽셀 셰이더 프로그램들을 이용하여 셰이드된 더 적고 큰 프리미티브들), 처리 사이클들의 큰 비율이 픽셀 셰이더들에 전념하는 경향이 있을 것이다.
픽셀 또는 픽셀들의 그룹에 대한 처리가 완료되면, 픽셀 모듈(224)은 처리된 픽셀들(PDATA)을 ROP(214)에 제공한다. 일반적으로 종래의 설계를 가질 수 있는 ROP(214)는, 예를 들어, 그래픽 메모리(124)에 위치될 수 있는 프레임 버퍼(226)의 구성 하에 이미지의 픽셀들을 갖는 픽셀 모듈(224)로부터 수신된 픽셀 값들을 통합한다. 일부 실시예들에서, ROP(214)는 픽셀들을 마스크하거나 렌더링된 이미지에 이전에 기입된 픽셀들에 새로운 픽셀들을 블랜딩할 수 있다. 깊이(depth) 버퍼들, 알파 버퍼들 및 스텐실(stencil) 버퍼들은 렌더링된 이미지에 각각의 입력(incoming) 픽셀의 (만일의) 기여(contribution)를 결정하는데 이용될 수도 있다. 각각의 입력 픽셀 값 및 임의의 이전에 저장된 픽셀 값의 적절한 조합에 대응하는 픽셀 데이터(PDATA')가 프레임 버퍼(226)에 다시 기입된다. 이미지가 완료되면, 프레임 버퍼(226)는 디스플레이 디바이스로 주사(scanned out)될 수 있고 및/또는 추가 처리가 요구될 수 있다.
본원에 설명된 렌더링 파이프라인은 도시적인 것이고 변경들 및 수정들이 가능하다는 것이 이해될 것이다. 파이프라인은 도시된 것들과 상이한 유닛들을 포함할 수 있고, 처리 이벤트들의 시퀀스는 본원에 설명된 것으로부터 변화될 수 있다. 예로서, 일부 실시예들에서, 만일, 삼각형 커버들(또는 부분적인 커버들)을 블록킹하는 것을 결정하는 블록들(예를 들어, 16x16 픽셀들)의 전체 스크린을 처리하는 "저밀(coarse)" 래스터화기(rasterizer) 후, 적어도 부분적으로 커버될 것이 결정되는 임의의 블록 내의 각각의 픽셀들을 처리하는 "고밀(fine)" 래스터화기를 이용하여 단계들에서 래스터화가 수행될 수 있다. 하나의 그러한 실시예에서, 고밀 래스터화기는 픽셀 모듈(224) 내에 포함된다. 다른 실시예에서, ROP에 의해 종래에 수행된 일부 연산들은 픽셀 데이터가 ROP(214)에 전달되기 전에 픽셀 모듈(224) 내에서 수행될 수 있다.
또한, 본원에 설명된 모듈들의 일부 또는 전부의 다수의 예들은 병렬로 연산될 수 있다. 하나의 그러한 실시예에서, 다중스레드형 코어 어레이(202)는 병렬로 연산하는 픽셀 모듈들(224)의 동일한 수 및 둘 이상의 기하구조 모듈들(218)을 포 함한다. 각각의 기하구조 모듈 및 픽셀 모듈은 다중스레드형 코어 어레이(202)의 처리 엔진의 상이한 서브 세트를 공동으로 제어한다.
다중스레드형 코어 어레이 구성
일 실시예에서, 다중스레드형 코어 어레이(202)는 다양한 조합들으로 정점, 기하구조 및/또는 픽셀 셰이더 프로그램들에 대한 다수의 예들의 동시 실행을 지원하는 고 병렬 아키텍처(highly parallel architecture)를 제공한다. 도 3은 본 발명의 실시예에 따른 다중스레드형 코어 어레이(202)의 블록도이다.
본 실시예에서, 다중스레드형 코어 어레이(202)는 소정 수(N)의 처리 클러스터들(302)을 포함한다. 여기에서, 유사한 객체들의 다수의 예들은, 객체를 식별하는 참조번호들 및 요구되는 예를 식별하는 삽입번호들(parenthetical numbers)로 표시된다. 임의의 수(N)(예를 들어, 1, 4, 8 또는 임의의 다른 수)의 처리 클러스터들이 제공된다. 도 3에서, 하나의 처리 클러스터(302)가 상세히 도시된다. 다른 처리 클러스터들(302)이 유사하거나 또는 동일한 설계를 가질 수 있다는 것이 이해될 것이다.
각각의 처리 클러스터(302)는 (도 2의 기하구조 모듈(218)을 구현하는) 기하구조 제어기(304) 및 (도 2의 픽셀 모듈(224)을 구현하는) 픽셀 제어기(306)를 포함한다. 기하구조 제어기(304) 및 픽셀 제어기(306) 각각은 코어 인터페이스(308)와 통신한다. 코어 인터페이스(308)는 다중스레드형 코어 어레이(202)의 처리 엔진을 포함하는 다수(M)의 코어들(310)을 제어한다. 임의의 수(M)(예를 들어, 1, 2, 4 또는 임의의 다른 수)의 코어들(310)은 단일 코어 인터페이스에 접속될 수 있 다. 각각의 코어(310)는 장점으로서, 정점 스레드들, 기하구조 스레드들, 및 픽셀 스레드들의 조합을 포함하는, 다수의(예를 들어, 100 또는 그보다 많은) 동시 실행 스레드들(여기서, "스레드"라는 용어는 입력 데이터의 특정 세트를 실행하는 특정 프로그램의 예를 지칭함)을 지원하는 것이 가능한 다중스레드형 실행 코어로서 구현된다. 일 실시예에서, 각각의 코어(310)는 P 스레드들을 병렬로 실행하기 위해 P형 SIMD 아키텍처를 구현하고, 여기서 P는 임의의 정수(예를 들어, 8, 16, 32)이고, P 스레드들의 그룹들의 수(G)(예를 들어, 18, 24 등)를 동시에 관리할 수 있다. 코어(310)에 대한 상세 설명은, 다용도로 그 전체에 참조로서 포함된 본원에 2005년 12월 19일에 출원된 미국 가출원 번호 60/752,265에서 발견될 수 있다.
코어 인터페이스(308)는 코어들(310) 사이에 공유된 텍스처 파이프라인(314)를 제어하기도 한다. 일반적으로 종래 설계를 가질 수 있는 텍스처 파이프라인(314)은 장점으로서, 텍스처 좌표들을 수신하고, 메모리로부터 텍스처 좌표들에 대응하는 텍스처 데이터를 페치(fetch)하며, 다양한 알고리즘들에 따라 그 텍스처 데이터를 필터링하도록 구성된 로직 회로들을 포함한다. 이선형(bilinear) 및 삼선형(triliner) 필터링을 포함하는 종래의 필터링 알고리즘들이 이용될 수 있다. 코어(310)는 그의 스레드들 중 하나에서 텍스처 명령어를 대할(encounter) 때, 코어는 코어 인터페이스(308)를 통해 텍스처 파이프라인(314)에 텍스처 좌표들을 제공한다. 텍스처 파이프라인(314)은 텍스처 명령어를 처리하여 그 결과를 코어 인터페이스(308)를 통해 코어(310)에 반송한다. 파이프라인(314)에 의한 텍스처 처리는 상당수의 클록 사이클들을 소모할 수 있고, 스레드가 텍스처 결과를 대기하는 동안, 코어(310)는 다른 스레드를 실행하는 것을 계속하는 장점이 있다.
연산에서, 데이터 어셈블러(206)(도 2)는 처리 클러스터(302)에 기하구조 데이터(GDATA)를 제공한다. 일 실시예에서, 데이터 어셈블러(206)는 기하구조 데이터의 입력 스트림을 부분들로 분할하고, 예를 들어, 실행 리소스들의 이용가능성에 기초하여, 어떤 처리 클러스터들(302)이 기하구조 데이터의 다음 부분을 수신하는지를 선택한다. 그 부분은 선택된 처리 클러스터(302)의 기하구조 제어기(304)로 전달된다.
기하구조 제어기(304)는, 정점 데이터를 코어(310)에 로딩하는 코어 인터페이스(308)에, 수신된 데이터를 전달한 후, 코어(310)가 적절한 정점 셰이더 프로그램을 런치(launch)하도록 지시한다. 정점 셰이더 프로그램이 완료되면, 코어 인터페이스(308)는 기하구조 제어기(304)에 신호를 보낸다. 기하구조 셰이더 프로그램이 실행되면, 기하구조 제어기(304)는 코어 인터페이스(308)에 기하구조 셰이더 프로그램을 런칭하도록 지시한다. 일부 실시예들에서, 처리된 정점 데이터는 정점 셰이더 프로그램이 완료되면, 기하구조 제어기(304)로 반환되고, 기하구조 제어기(304)는 코어 인터페이스(308)에, 기하구조 셰이더 프로그램을 실행하기 전에 데이터를 재로딩(reload)하도록 지시한다. 정점 셰이더 프로그램 및/또는 기하구조 셰이더 프로그램이 완료되면, 기하구조 제어기(304)는 처리된 기하구조 데이터(GDATA')를 도 2의 셋업 모듈(208)에 제공한다.
픽셀 스테이지에서, 컬러 어셈블리 모듈(212)(도 2)은 프리미티브에 대한 속성 방정식들(EQS) 및 프리미티브에 의해 커버되는 픽셀들의 픽셀 좌표들(X, Y)을 처리 클러스터들(302)에 제공한다. 일 실시예에서, 컬러 어셈블리 모듈(212)은 커버리지 데이터(coverage data)의 입력 스트림을 부분들로 분할하고, 예를 들어, 실행 리소스들의 이용가능성 또는 스크린 좌표들의 프리미티브의 위치에 기초하여, 어떤 처리 클러스터들(302)이 데이터의 다음 부분을 수신하는지를 선택한다. 그 부분은 선택된 처리 클러스터(302)의 픽셀 제어기(306)로 전달된다.
픽셀 제어기(306)는 코어로 픽셀 데이터를 로딩하는 코어 인터페이스(308)에 데이터를 전달한 후, 코어(310)에, 픽셀 셰이더 프로그램을 런칭하도록 지시한다. 코어(310)가 다중스레드되는 경우, 픽셀 셰이더 프로그램들, 기하구조 셰이더 프로그램들 및 정점 셰이더 프로그램들은 동일 코어(310)에서 동시에 모두 실행될 수 있다 픽셀 셰이더 프로그램이 완료되면, 코어 인터페이스(308)는, 픽셀 데이터(PDATA)를 ROP 유닛(214)(도 2)에 전달하는, 픽셀 제어기(306)에, 처리된 픽셀 데이터를 전달한다.
본원에 설명된 다중스레드형 코어 어레이는 도시일 뿐, 그 변경들 및 수정들이 가능하다는 것이 이해될 것이다. 임의의 수의 처리 클러스터들이 제공될 수 있고, 각각의 처리 클러스터는 임의의 수의 코어들을 포함할 수 있다. 일부 실시예들에서, 소정의 타입의 셰이더들은, 소정의 코어들 또는 소정의 처리 클러스터들에서 실행하는 것으로 제한될 수 있다; 예로서, 기하구조 셰이더들은 각각의 처리 클러스터의 코어(310)(0)에서 실행하는 것으로 제한될 수 있다. 본원에 알려진 바와 같이, 하드웨어 크기 및 복잡성 대비 성능(complexity versus performance)에 대한 고려들에 의해 그러한 설계의 선택들이 이루어질 수 있다. 공유된 텍스처 파 이프라인은 또한 선택적이다; 일부 실시예들에서, 각각의 코어는 그 자신의 텍스처 파이프라인을 가질 수 있거나 또는 텍스처 계산들을 수행하기 위해 범용 기능 유닛들에 영향을 줄 수 있다.
처리되는 데이터는 다양한 방법들로 처리 클러스터들에 분배될 수 있다. 일 실시예에서, 데이터 어셈블러 (또는 기하구조 데이터의 다른 소스) 및 컬러 어셈블리 모듈 (또는 픽셀-셰이더 입력 데이터의 다른 소스)은 처리 클러스터 또는 각각의 코어들의 이용가능성을 나타내는 정보를 수신하여 다양한 타입들의 추가 스레드들을 처리(handle)하고, 각각의 스레드에 대한 목적지(destination) 처리 클러스터 또는 코어를 선택한다. 다른 실시예에서, 데이터를 처리하는 능력을 갖는 처리 클러스터가 입력 데이터를 수신할 때까지, 하나의 처리 클러스터에서 다음 처리 클러스터로 입력 데이터가 전달된다. 또 다른 실시예에서, 처리 클러스터는 처리되는 픽셀들의 스크린 좌표들과 같은 입력 데이터의 속성들에 기초하여 선택된다.
다중스레드형 코어 어레이는 렌더링 이미지들과 관련될 수 있거나 관련될 수 없는 범용 계산들을 수행하는 것에 영향을 받을 수도 있다. 일 실시예에서, 데이터-병렬 분해(decomposition)로 표현될 수 있는 임의의 계산은, 단일 코어에서 실행하는 스레드들의 어레이로서 다중스레드형 코어 어레이에 의해 처리될 수 있다. 그 계산들의 결과들은 프레임 버퍼에 기입되고, 시스템 메모리로 다시 판독될 수 있다.
픽셀 셰이더 작업의 할당
본 발명의 실시예에 따르면, 픽셀 셰이더 프로그램에 의해 처리될 픽셀들은, 이미지 영역 내의 픽셀들의 위치에 기초하여, (도 3의) 처리 클러스터(302)에 송신된다. 예를 들어, 이미지 영역은 다수의 타일(tile)들로 분할될 수 있다. 각각의 타일은 하나의 클러스터와 연관된 타일들이 이미지 영역에 걸쳐 뿌려지는(scattered) 방법으로 처리 클러스터(302) 중 하나와 연관된다(즉, 하나의 처리 클러스터와 연관된 적어도 일부의 타일들은 다른 하나와 인접(contiguous)해 있지 않다).
도 4는 본 발명의 실시예에 따른 다수의 타일들(402)로의 이미지 영역(400)에 대한 하나의 가능한 타일링을 도시한다. 각각의 타일(402)은 예를 들어, 16x16 픽셀들 또는 임의의 다른 편리한 크기일 수 있다. 이러한 실시예에서, 도 3의 다중스레드형 코어 어레이(202)는 8개의 처리 클러스터들(302(0) 내지 302(7))을 포함한다. 도 4의 각각의 타일(402)은, 어떤 처리 코어(302(i))가 그 타일 내의 픽셀들을 처리하는지를 나타내는 수(i)(0 내지 7)를 포함한다. 도 4에 도시된 바와 같이, 각각의 처리 클러스터(302)는 이미지 영역(400) 내에 동일한 (또는 거의 동일한) 수의 타일들(402)이 할당되고, 각각의 클러스터(302)에 할당된 타일들은 서로 인접하지 않는다. 많은 그래픽 어플리케이션들에 대한, 이러한 방식의 분배 작업은 처리 클러스터들(302) 간의 대략적인 부하 균형을 제공할 것이라는 것이 기대된다. 적합한 픽셀 분배 로직(pixel distribution logic)은, 렌더링 파이프라인에, 예를 들어, 도 2의 컬러 어셈블리 모듈(212)에 포함될 수 있다.
도 4에 나타낸 타일링은 도시적일 뿐, 그 변경들 및 수정들이 가능하다는 것이 이해될 것이다. 타일들은 임의의 크기를 가질 수 있다. 일부 실시예들에서, 타일들의 크기 및 수는, 다중샘플링 모드가 이용되는지와 같은 어플리케이션 특성들에 기초하여 선택되는 타일 크기를 갖도록 구성될 수 있다. 각각의 처리 클러스터에 할당된 타일들의 배열은 원하는 대로 변화할 수 있다.
특정 GPU에 나타낸 전체 수까지, 타일들이 임의의 수의 처리 클러스터들에 할당될 수 있다. 일부 실시예들에서, 타일들은 처리 클러스터들 전체보다 적게 할당된다. 따라서, GPU는 그의 처리 클러스터들 중 단지 일부만을 사용하여 이미지들을 렌더링하여 픽셀 스레드들을 처리할 수 있다. 적어도 하나의 처리 클러스터가 이용가능한 한, GPU는 비록 감소된 처리량이기는 하나, 이미지들을 렌더링할 수 있을 것이다. 처리 픽셀 스레드들로부터 이용가능하지 않은(disabled) 일부 클러스터들로 운영하는 것(running)은, 예를 들어, 감소된-전력 모드(일부 코어들 또는 클러스터들이 전원이 꺼질 수 있지만 나머지들은 동작가능함)에서 동작하는 것, (상이한 GPU들에 대한 이용가능성을 요구하지 않고) 최소 성능 요구들을 결정하는 것, 및/또는 코어들의 하나 또는 다른 하나에서의 결점들에 대한 허용한계(tolerance)를 제공하는 것에 대해 유용할 수 있다.
일부 대안적인 실시예들에서, 타일들은 처리 클러스터들(302) 보다는 오히려 특정 코어들(310)에 할당된다.
프레임 버퍼에 대한 픽셀 셰이더 결합
일부 실시예들에서, 도 3의 각각의 픽셀 제어기(306)는, 도 2에 제안된 집중된(centralized) ROP(214) 보다는, 도 2의 프레임 버퍼(226)에 픽셀들을 전하는 그 자신의 ROP를 포함한다. 그러한 실시예들에서, 처리 클러스터들(302)로부터 프레 임 버퍼로의 결합이 제공된다.
N개의 처리 클러스터들을 갖는 일 실시예에서, 프레임 버퍼(226)는 N개의 파티션들로 분할된다. 각각의 클러스터(302)는 N개의 파티션들 중 상이한 하나에 연결된다.
도 5는 본 발명의 실시예에 따른, 처리 클러스터들(302)과 프레임 버퍼(500) 사이의 결합을 도시하는 단순화된 블록도이다. 도 2의 프레임 버퍼는 다중 프레임 버퍼들(500)을 포함할 수 있다는 것이 이해될 것이고, 여기서 각각의 프레임 버퍼(500)는 동일한 이미지에 대한 픽셀 단위로 특정 품질을 저장한다. 예로서, 일 실시예에서, 프레임 버퍼(226)는 Z 버퍼; (예를 들어, 레드, 그린 및 블루 컬러 컴포넌트들에 대한) 컬러 컴포넌트 버퍼들; 및 투명도 (알파) 버퍼를 포함한다. 임의의 수의 프레임 버퍼들(500)이 제공될 수 있고, 본원에 이용된 "픽셀"은 소정의 디스플레이 디바이스에서의 활성화된 픽셀들의 수에 대응할 수 있거나 대응할 수 없는, 이미지 내의 샘플링 위치들을 지칭한다는 것이 이해될 것이다. 단순화를 위해, 단지 하나의 프레임 버퍼(500)만이 도시되었다; 이미지에 대한 각각의 프레임 버퍼에 동일한 분할이 적용될 수 있다는 것이 이해될 것이다.
프레임 버퍼(500)는 N개의 파티션들(502)로 (물리적으로 또는 논리적으로) 분할되고, 각각의 파티션은 이미지의 픽셀들의 적어도 1/N에 대한 데이터를 저장하기에 충분히 크다. N개의 처리 클러스터들(302) 각각은 N개의 파티션들(502) 중 하나에 연결된다. 따라서, 처리 클러스터(302)(0)는 파티션(502)(0), 파티션(502)(1)의 처리 클러스터(302)(1) 등에 그의 출력 픽셀 데이터 전부를 저장한 다. 소정의 처리 클러스터(302)에 의해 처리된 타일들이 인접하지 않는 정도로, 소정의 프레임 버퍼 파티션(502)의 데이터는 인접하지 않은 타일들에서 떨어져있을(be from) 것이라는 것을 주목해야 한다. 디스플레이(주사(scanout)) 로직은 장점으로서, 프레임 버퍼(500)를 액세스할 때 데이터에 대한 정확한 디스플레이 순서를 지킨다; 특히, 그것은 파티션들이 연속적으로 판독되는 것을 요구하지 않는다.
상술한 바와 같이, 일부 실시예들에서, 처리 코어들(302) 전부보다 적은 코어가 픽셀들을 생성하는데 이용될 수 있다. 도 5에 나타낸 실시예에서, 처리 클러스터(302)(0)만이 프레임 버퍼 파티션(502)(0)에 픽셀들을 제공한다. 따라서, 처리 클러스터(302)(0)가 픽셀들을 생성하도록 동작하지 않는다면, 프레임 버퍼 파티션(502)(0)은 이용되지 않을 것이다. 이미지 영역은 재타일화(retiled)될 수 있거나 또는 타일들은 처리 클러스터들(302(1) 내지 302(N-1)) 사이에서 재할당될 수 있어, N-1개의 처리 클러스터들 사이에서 영역이 분할된다. 일부 실시예들에서, 샘플링 해상도는, 예를 들어, 프레임 버퍼 파티션들((502)(1) 내지 502(N-1))이 최소 샘플링 해상도에서의 이미지에 대한 픽셀 데이터 전부를 저장하기에 충분한 공간을 제공하지 않는다면, 감소될 필요가 있을 수 있다. 파티션들이 물리적이라기 보다는 논리적인 실시예들에서, 프레임 버퍼(500)는 처리 클러스터의 수를 이용가능하게 매칭하도록 재분할될 수 있다.
대안적인 실시예에서, 각각의 처리 클러스터는 다중 프레임 버퍼 파티션들을 액세스할 수 있다. 도 6은 본 발명의 실시예에 따른, 처리 클러스터들(302)과 프레임 버퍼(600) 사이의 결합을 도시하는 단순화된 블록도이다. 도 2의 프레임 버 퍼(226)는 다중 프레임 버퍼들(600)을 포함하고, 여기서, 각각의 프레임 버퍼(600)는 프레임 버퍼(500)에 대해 상술한 바와 같이, 동일 이미지에 대해 픽셀 단위(on a per-pixel)로 특정 품질을 저장한다는 것이 이해될 것이다. 임의의 수의 프레임 버퍼들(600)이 제공될 수 있다는 것이 이해될 것이다. 단순화를 위해, 단지 하나의 프레임 버퍼(600)만이 도시된다; 이미지에 대한 각각의 프레임 버퍼에 분할이 적용될 수 있다는 것이 이해될 것이다.
프레임 버퍼(600)는 파티션들(602)의 수 B로 (물리적으로 또는 논리적으로) 분할되고, 여기서, B는 처리 클러스터들(302)의 개수 N과 동일하거나 상이할 수 있다. 처리 클러스터들(302)은 크로스바(604)를 통해 파티션들(602)에 연결된다. 각각의 클러스터(302)는 B개의 파티션들(602) 중 임의의 하나 (또는 그 이상)에 픽셀 데이터를 기입할 수 있다.
이러한 실시예에서, 크로스바(604)는 처리 클러스터들(602)을 프레임 버퍼 파티션들(602)에 연결하는 것을 허여하도록 구성될 수 있어 원하는 대로 수정된다. 예를 들어, 상기 언급된 바와 같이, 일부 실시예들에서, 처리 코어들(302) 모두 보다 작은 코어들이 픽셀들을 생성하는데 이용될 수 있다. 도 6에 나타낸 실시예에서, 처리 코어(302)(0)가 이용가능하지 않다면, 크로스바(604)가 재구성되어, 모든 프레임 버퍼 파티션들(602)이 처리 코어들(302) 중 하나 또는 다른 하나에 여전히 액세스가능하도록 할 수 있다. 디스플레이(주사) 로직은 장점으로서, 프레임 버퍼 데이터가 크로스바(604)의 구성 또는 처리 코어들(302)로의 타일들의 할당에도 불구하고 정확히 주사되도록 구성될 수 있다.
다중 프레임 버퍼들이 존재하는 경우(예를 들어, Z, 컬러, 알파 등), 각각의 프레임 버퍼는 기술된 방식으로 B개의 파티션들로 분할될 수 있다. 일부 실시예들에서, 파티션들의 수는 모든 프레임 버터들에 대해 동일하지 않다; 예로서, Z 버퍼는 컬러 버퍼보다 더 많거나 더 적은 파티션들을 가질 수 있다.
추가 실시예들
본 발명은 특정 실시예들에 대해 설명되었지만, 본 기술분야의 통상의 기술자는 다수의 수정들이 가능하다는 것을 인지할 것이다. 따라서, 본 발명이 특정 실시예들에 대해 설명되었지만, 본 발명은 다음의 특허청구범위들의 범위 내의 모든 수정들 및 균등물들을 커버할 의도임이 이해될 것이다.

Claims (7)

  1. 다수의 처리 클러스터(processing cluster)를 포함하는 다중스레드형 코어 어레이(multithreaded core array) - 각각의 처리 클러스터는 커버리지 데이터(coverage data)로부터 픽셀 데이터를 생성하는 픽셀 셰이더 프로그램을 실행하도록 동작가능한 적어도 하나의 처리 코어를 포함함 - ;
    다수의 픽셀 각각에 대해 커버리지 데이터를 생성하도록 구성된 래스터화기(rasterizer); 및
    상기 래스터화기로부터, 상기 다중스레드형 코어 어레이의 상기 처리 클러스터들 중 하나에 상기 커버리지 데이터를 전달하도록 구성된 픽셀 분배 로직(pixel distribution logic)
    을 포함하고,
    상기 픽셀 분배 로직은, 제1 픽셀에 대한 커버리지 데이터가 이미지 영역 내의 상기 제1 픽셀의 위치에 적어도 부분적으로 기초하여 전달되는 상기 처리 클러스터들 중 하나를 선택하는 그래픽 프로세서.
  2. 제1항에 있어서,
    상기 이미지 영역은 다수의 타일(tile)로 분할(divide)되고, 각각의 타일은 상기 처리 클러스터들 중 하나에 할당되며, 상기 픽셀 분배 로직은 상기 다수의 타일들 중 어떠한 타일이 상기 제1 픽셀을 포함하는 지에 대한 결정에 기초하여 상기 처리 클러스터들 중 하나를 선택하는 그래픽 프로세서.
  3. 제2항에 있어서,
    상기 다수의 타일 중 적어도 2개는 상기 처리 클러스터들 각각에 할당되고, 각각의 처리 클러스터에 대한, 할당된 상기 타일들은 서로 인접하지 않은 그래픽 프로세서.
  4. 제1항에 있어서,
    상기 처리 클러스터들 각각은 프레임 버퍼의 다수의 파티션들 각각에 픽셀 데이터를 전달하도록 구성된 그래픽 프로세서.
  5. 제1항에 있어서,
    상기 처리 클러스터들 각각에 연결되고, 상기 처리 클러스터들로부터의 픽셀 데이터를 다수의 파티션들을 갖는 프레임 버퍼로 전달하도록 구성된 크로스바(crossbar)를 더 포함하는 그래픽 프로세서.
  6. 제5항에 있어서,
    상기 크로스바는, 상기 처리 클러스터들 중 임의의 하나에 의해 생성된 픽셀 데이터가, 상기 프레임 버퍼 파티션들 중 임의의 하나에 전달될 수 있도록 구성된 그래픽 프로세서.
  7. 제1항에 있어서,
    각각의 처리 코어가 정점 셰이더 프로그램(vertex shader program)들 및 기하구조 셰이더 프로그램(geometry shader program)들을 실행하도록 동작할 수도 있는 그래픽 프로세서.
KR1020087017716A 2005-12-19 2006-12-18 그래픽 프로세서용 병렬 어레이 아키텍처 KR101027621B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US75226505P 2005-12-19 2005-12-19
US60/752,265 2005-12-19

Publications (2)

Publication Number Publication Date
KR20080085888A true KR20080085888A (ko) 2008-09-24
KR101027621B1 KR101027621B1 (ko) 2011-04-06

Family

ID=38541600

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020087017716A KR101027621B1 (ko) 2005-12-19 2006-12-18 그래픽 프로세서용 병렬 어레이 아키텍처

Country Status (8)

Country Link
US (4) US7728841B1 (ko)
JP (2) JP2009520307A (ko)
KR (1) KR101027621B1 (ko)
CN (1) CN101371247B (ko)
DE (1) DE112006003473B4 (ko)
GB (1) GB2446546B (ko)
TW (1) TWI368182B (ko)
WO (1) WO2007111743A2 (ko)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101467714B1 (ko) * 2010-09-29 2014-12-01 퀄컴 인코포레이티드 다중 디스플레이들을 위한 이미지 동기화
KR20150116026A (ko) * 2014-04-03 2015-10-15 삼성전자주식회사 영상 데이터를 처리하는 방법 및 디바이스.
US9514506B2 (en) 2011-06-17 2016-12-06 Samsung Electronics Co., Ltd. Method and apparatus for tile based rendering using tile-to-tile locality

Families Citing this family (92)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2006117683A2 (en) 2005-01-25 2006-11-09 Lucid Information Technology, Ltd. Graphics processing and display system employing multiple graphics cores on a silicon chip of monolithic construction
US20080094403A1 (en) * 2003-11-19 2008-04-24 Reuven Bakalash Computing system capable of parallelizing the operation graphics processing units (GPUs) supported on a CPU/GPU fusion-architecture chip and one or more external graphics cards, employing a software-implemented multi-mode parallel graphics rendering subsystem
US20070291040A1 (en) * 2005-01-25 2007-12-20 Reuven Bakalash Multi-mode parallel graphics rendering system supporting dynamic profiling of graphics-based applications and automatic control of parallel modes of operation
US7961194B2 (en) 2003-11-19 2011-06-14 Lucid Information Technology, Ltd. Method of controlling in real time the switching of modes of parallel operation of a multi-mode parallel graphics processing subsystem embodied within a host computing system
US7777748B2 (en) * 2003-11-19 2010-08-17 Lucid Information Technology, Ltd. PC-level computing system with a multi-mode parallel graphics rendering subsystem employing an automatic mode controller, responsive to performance data collected during the run-time of graphics applications
US8085273B2 (en) 2003-11-19 2011-12-27 Lucid Information Technology, Ltd Multi-mode parallel graphics rendering system employing real-time automatic scene profiling and mode control
US20090027383A1 (en) 2003-11-19 2009-01-29 Lucid Information Technology, Ltd. Computing system parallelizing the operation of multiple graphics processing pipelines (GPPLs) and supporting depth-less based image recomposition
CA2546427A1 (en) 2003-11-19 2005-06-02 Reuven Bakalash Method and system for multiple 3-d graphic pipeline over a pc bus
US8497865B2 (en) 2006-12-31 2013-07-30 Lucid Information Technology, Ltd. Parallel graphics system employing multiple graphics processing pipelines with multiple graphics processing units (GPUS) and supporting an object division mode of parallel graphics processing using programmable pixel or vertex processing resources provided with the GPUS
US8190669B1 (en) 2004-10-20 2012-05-29 Nvidia Corporation Multipurpose arithmetic functional unit
US20090096798A1 (en) * 2005-01-25 2009-04-16 Reuven Bakalash Graphics Processing and Display System Employing Multiple Graphics Cores on a Silicon Chip of Monolithic Construction
ES2351611T3 (es) * 2006-07-12 2011-02-08 The Procter And Gamble Company Sistemas espesantes basados en tensioactivo de red de gel para composiciones de decoloración y coloración del cabello.
US8051123B1 (en) 2006-12-15 2011-11-01 Nvidia Corporation Multipurpose functional unit with double-precision and filtering operations
KR101349171B1 (ko) * 2007-01-17 2014-01-09 삼성전자주식회사 3차원 그래픽 가속기 및 그것의 픽셀 분배 방법
US8996846B2 (en) 2007-09-27 2015-03-31 Nvidia Corporation System, method and computer program product for performing a scan operation
US8264484B1 (en) 2007-10-29 2012-09-11 Nvidia Corporation System, method, and computer program product for organizing a plurality of rays utilizing a bounding volume
US8284188B1 (en) 2007-10-29 2012-10-09 Nvidia Corporation Ray tracing system, method, and computer program product for simultaneously traversing a hierarchy of rays and a hierarchy of objects
US8065288B1 (en) 2007-11-09 2011-11-22 Nvidia Corporation System, method, and computer program product for testing a query against multiple sets of objects utilizing a single instruction multiple data (SIMD) processing architecture
US8661226B2 (en) * 2007-11-15 2014-02-25 Nvidia Corporation System, method, and computer program product for performing a scan operation on a sequence of single-bit values using a parallel processor architecture
US8243083B1 (en) 2007-12-04 2012-08-14 Nvidia Corporation System, method, and computer program product for converting a scan algorithm to a segmented scan algorithm in an operator-independent manner
US8773422B1 (en) 2007-12-04 2014-07-08 Nvidia Corporation System, method, and computer program product for grouping linearly ordered primitives
US8106914B2 (en) 2007-12-07 2012-01-31 Nvidia Corporation Fused multiply-add functional unit
US9678775B1 (en) 2008-04-09 2017-06-13 Nvidia Corporation Allocating memory for local variables of a multi-threaded program for execution in a single-threaded environment
US8274516B2 (en) * 2008-08-04 2012-09-25 Microsoft Corporation GPU scene composition and animation
US8271734B1 (en) * 2008-12-05 2012-09-18 Nvidia Corporation Method and system for converting data formats using a shared cache coupled between clients and an external memory
US8947444B1 (en) * 2008-12-09 2015-02-03 Nvidia Corporation Distributed vertex attribute fetch
US8321492B1 (en) * 2008-12-11 2012-11-27 Nvidia Corporation System, method, and computer program product for converting a reduction algorithm to a segmented reduction algorithm
AU2008258132B2 (en) * 2008-12-15 2011-11-10 Canon Kabushiki Kaisha Load balancing in multiple processor rendering systems
US20100277488A1 (en) * 2009-04-30 2010-11-04 Kevin Myers Deferred Material Rasterization
US8619087B2 (en) * 2009-10-06 2013-12-31 Nvidia Corporation Inter-shader attribute buffer optimization
US8259007B2 (en) * 2009-10-26 2012-09-04 Metron Aviation, Inc. Cell clustering and optimization for space partitioning
US20110153984A1 (en) * 2009-12-21 2011-06-23 Andrew Wolfe Dynamic voltage change for multi-core processing
KR20110089649A (ko) * 2010-02-01 2011-08-09 삼성전자주식회사 병렬 연산 처리 방법 및 장치
US20120019541A1 (en) * 2010-07-20 2012-01-26 Advanced Micro Devices, Inc. Multi-Primitive System
US8499305B2 (en) * 2010-10-15 2013-07-30 Via Technologies, Inc. Systems and methods for performing multi-program general purpose shader kickoff
US9092267B2 (en) * 2011-06-20 2015-07-28 Qualcomm Incorporated Memory sharing in graphics processing unit
US8752018B2 (en) * 2011-06-21 2014-06-10 Nvidia Corporation Emitting coherent output from multiple threads for printf
CN103136724B (zh) * 2011-11-30 2015-11-25 北大方正集团有限公司 加网方法和装置
US10740254B2 (en) * 2012-01-03 2020-08-11 Nvidia Corporation System and method for frame buffer copy during partial power down of memory
US8611437B2 (en) 2012-01-26 2013-12-17 Nvidia Corporation Ground referenced single-ended signaling
US9338036B2 (en) 2012-01-30 2016-05-10 Nvidia Corporation Data-driven charge-pump transmitter for differential signaling
US9965821B2 (en) 2012-03-09 2018-05-08 Nvidia Corporation Fully parallel in-place construction of 3D acceleration structures in a graphics processing unit
US9510772B2 (en) * 2012-04-10 2016-12-06 Cardionxt, Inc. System and method for localizing medical instruments during cardiovascular medical procedures
JP5949188B2 (ja) * 2012-06-08 2016-07-06 日本電気株式会社 密結合マルチプロセッサシステム
KR20140005388A (ko) * 2012-06-26 2014-01-15 삼성전자주식회사 렌더링 데이터 처리 장치 및 방법
US9104421B2 (en) * 2012-07-30 2015-08-11 Nvidia Corporation Training, power-gating, and dynamic frequency changing of a memory controller
US9165399B2 (en) * 2012-11-01 2015-10-20 Nvidia Corporation System, method, and computer program product for inputting modified coverage data into a pixel shader
US20140192052A1 (en) * 2013-01-09 2014-07-10 Advanced Micro Devices, Inc. 2d rendering on 3d graphics hardware
US9292898B2 (en) * 2013-03-15 2016-03-22 Intel Corporation Conditional end of thread mechanism
US9153539B2 (en) * 2013-03-15 2015-10-06 Nvidia Corporation Ground-referenced single-ended signaling connected graphics processing unit multi-chip module
US9170980B2 (en) * 2013-03-15 2015-10-27 Nvidia Corporation Ground-referenced single-ended signaling connected graphics processing unit multi-chip module
US9171607B2 (en) 2013-03-15 2015-10-27 Nvidia Corporation Ground-referenced single-ended system-on-package
US9147447B2 (en) 2013-03-15 2015-09-29 Nvidia Corporation Ground-referenced single-ended memory interconnect
US9153314B2 (en) 2013-03-15 2015-10-06 Nvidia Corporation Ground-referenced single-ended memory interconnect
US9269179B2 (en) * 2013-03-15 2016-02-23 Nvidia Corporation System, method, and computer program product for generating primitive specific attributes
US9501859B2 (en) * 2013-07-19 2016-11-22 Adobe Systems Incorporated Triangle rasterization
EP3035843B1 (en) 2013-08-22 2021-11-03 AFTx, Inc. Methods, systems, and apparatus for identification and characterization of rotors associated with atrial fibrillation
GB2521151B (en) 2013-12-10 2021-06-02 Advanced Risc Mach Ltd Configurable thread ordering for a data processing apparatus
GB2521155B (en) 2013-12-10 2021-06-02 Advanced Risc Mach Ltd Configuring thread scheduling on a multi-threaded data processing apparatus
US10068311B2 (en) * 2014-04-05 2018-09-04 Sony Interacive Entertainment LLC Varying effective resolution by screen location by changing active color sample count within multiple render targets
US10783696B2 (en) 2014-04-05 2020-09-22 Sony Interactive Entertainment LLC Gradient adjustment for texture mapping to non-orthonormal grid
US11302054B2 (en) 2014-04-05 2022-04-12 Sony Interactive Entertainment Europe Limited Varying effective resolution by screen location by changing active color sample count within multiple render targets
US9710881B2 (en) 2014-04-05 2017-07-18 Sony Interactive Entertainment America Llc Varying effective resolution by screen location by altering rasterization parameters
US9928564B2 (en) * 2014-06-26 2018-03-27 Intel Corporation Efficient hardware mechanism to ensure shared resource data coherency across draw calls
US20160093069A1 (en) * 2014-09-26 2016-03-31 Subramaniam Maiyuran Method and apparatus for pixel hashing
EP3719784A1 (en) * 2014-09-30 2020-10-07 Microsoft Technology Licensing, LLC Displaying content on a display in power save mode
US9684950B2 (en) * 2014-12-18 2017-06-20 Qualcomm Incorporated Vision correction through graphics processing
US10013735B2 (en) * 2015-01-28 2018-07-03 Qualcomm Incorporated Graphics processing unit with bayer mapping
US10319348B2 (en) 2015-05-11 2019-06-11 Vixs Systems, Inc. Memory subsystem consumer trigger
US20160335734A1 (en) * 2015-05-11 2016-11-17 Vixs Systems, Inc. Memory subsystem synchronization primitives
US10768935B2 (en) * 2015-10-29 2020-09-08 Intel Corporation Boosting local memory performance in processor graphics
US10636110B2 (en) * 2016-06-28 2020-04-28 Intel Corporation Architecture for interleaved rasterization and pixel shading for virtual reality and multi-view systems
US10552211B2 (en) * 2016-09-02 2020-02-04 Intel Corporation Mechanism to increase thread parallelism in a graphics processor
CN107818069B (zh) 2016-09-12 2021-10-01 阿里巴巴集团控股有限公司 数据处理方法及系统
US10460513B2 (en) * 2016-09-22 2019-10-29 Advanced Micro Devices, Inc. Combined world-space pipeline shader stages
US11379941B2 (en) * 2016-09-22 2022-07-05 Advanced Micro Devices, Inc. Primitive shader
CN107977227A (zh) 2016-10-21 2018-05-01 超威半导体公司 包括不同指令类型的独立硬件数据路径的管线
WO2018105655A1 (ja) 2016-12-09 2018-06-14 株式会社ソニー・インタラクティブエンタテインメント 画像処理装置、画像処理方法およびプログラム
US10650566B2 (en) * 2017-02-15 2020-05-12 Microsoft Technology Licensing, Llc Multiple shader processes in graphics processing
US10204394B2 (en) 2017-04-10 2019-02-12 Intel Corporation Multi-frame renderer
US10417734B2 (en) 2017-04-24 2019-09-17 Intel Corporation Compute optimization mechanism for deep neural networks
US10417731B2 (en) 2017-04-24 2019-09-17 Intel Corporation Compute optimization mechanism for deep neural networks
US10257487B1 (en) 2018-01-16 2019-04-09 Qualcomm Incorporated Power efficient video playback based on display hardware feedback
US10409359B2 (en) * 2018-01-17 2019-09-10 Qualcomm Incorporated Dynamic bin ordering for load synchronization
US10698392B2 (en) * 2018-06-22 2020-06-30 Applied Materials, Inc. Using graphics processing unit for substrate routing and throughput modeling
US10847117B1 (en) * 2019-05-13 2020-11-24 Adobe Inc. Controlling an augmented reality display with transparency control using multiple sets of video buffers
US20210272347A1 (en) * 2020-02-28 2021-09-02 Advanced Micro Devices, Inc. Fully utilized hardware in a multi-tenancy graphics processing unit
KR20220033635A (ko) * 2020-09-09 2022-03-17 삼성디스플레이 주식회사 표시 장치 및 이의 구동 방법
CN112802192B (zh) * 2021-03-05 2022-01-28 艾迪普科技股份有限公司 一种可实时交互的三维图形图像播放器
US20220383446A1 (en) * 2021-05-28 2022-12-01 MemComputing, Inc. Memory graphics processing unit
CN114463160B (zh) * 2022-01-30 2022-10-28 摩尔线程智能科技(北京)有限责任公司 一种图形流水线的并行处理方法、装置及可读存储介质
CN116263981B (zh) * 2022-04-20 2023-11-17 象帝先计算技术(重庆)有限公司 图形处理器、系统、装置、设备及方法

Family Cites Families (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5408646A (en) * 1991-03-29 1995-04-18 International Business Machines Corp. Multipath torus switching apparatus
US5857109A (en) * 1992-11-05 1999-01-05 Giga Operations Corporation Programmable logic device for real time video processing
US5408606A (en) * 1993-01-07 1995-04-18 Evans & Sutherland Computer Corp. Computer graphics system with parallel processing using a switch structure
US5794016A (en) * 1995-12-11 1998-08-11 Dynamic Pictures, Inc. Parallel-processor graphics architecture
US6181355B1 (en) * 1998-07-17 2001-01-30 3Dlabs Inc. Ltd. Graphics processing with transcendental function generator
US6693719B1 (en) * 1998-09-16 2004-02-17 Texas Instruments Incorporated Path to trapezoid decomposition of polygons for printing files in a page description language
US6636222B1 (en) * 1999-11-09 2003-10-21 Broadcom Corporation Video and graphics system with an MPEG video decoder for concurrent multi-row decoding
JP5285828B2 (ja) * 1999-04-09 2013-09-11 ラムバス・インコーポレーテッド 並列データ処理装置
US7233331B2 (en) * 2000-03-16 2007-06-19 Square Enix Co., Ltd. Parallel object task engine and processing method
US6924807B2 (en) * 2000-03-23 2005-08-02 Sony Computer Entertainment Inc. Image processing apparatus and method
US7184059B1 (en) * 2000-08-23 2007-02-27 Nintendo Co., Ltd. Graphics system with copy out conversions between embedded frame buffer and main memory
US6853380B2 (en) * 2002-03-04 2005-02-08 Hewlett-Packard Development Company, L.P. Graphical display system and method
US20030234749A1 (en) * 2002-06-20 2003-12-25 Johnny Marks System and method for communicating graphics image data over a communication network for display on a single logical screen
US7075542B1 (en) * 2002-11-12 2006-07-11 Ati Technologies Inc. Selectable multi-performance configuration
US7633506B1 (en) * 2002-11-27 2009-12-15 Ati Technologies Ulc Parallel pipeline graphics system
JP3966832B2 (ja) * 2003-04-28 2007-08-29 株式会社東芝 描画処理装置、及び、描画処理方法
US7202872B2 (en) * 2003-10-29 2007-04-10 Via Technologies, Inc. Apparatus for compressing data in a bit stream or bit pattern
US7777748B2 (en) * 2003-11-19 2010-08-17 Lucid Information Technology, Ltd. PC-level computing system with a multi-mode parallel graphics rendering subsystem employing an automatic mode controller, responsive to performance data collected during the run-time of graphics applications
US7719540B2 (en) * 2004-03-31 2010-05-18 Intel Corporation Render-cache controller for multithreading, multi-core graphics processor
US20050231533A1 (en) * 2004-04-20 2005-10-20 Lin Chen Apparatus and method for performing divide by w operations in a graphics system
US7154500B2 (en) * 2004-04-20 2006-12-26 The Chinese University Of Hong Kong Block-based fragment filtration with feasible multi-GPU acceleration for real-time volume rendering on conventional personal computer
US7671862B1 (en) * 2004-05-03 2010-03-02 Microsoft Corporation Systems and methods for providing an enhanced graphics pipeline
US7570267B2 (en) * 2004-05-03 2009-08-04 Microsoft Corporation Systems and methods for providing an enhanced graphics pipeline
US7603544B2 (en) * 2004-12-23 2009-10-13 Intel Corporation Dynamic allocation of a buffer across multiple clients in multi-threaded processor without performing a complete flush of data associated with allocation

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101467714B1 (ko) * 2010-09-29 2014-12-01 퀄컴 인코포레이티드 다중 디스플레이들을 위한 이미지 동기화
US9514506B2 (en) 2011-06-17 2016-12-06 Samsung Electronics Co., Ltd. Method and apparatus for tile based rendering using tile-to-tile locality
KR20150116026A (ko) * 2014-04-03 2015-10-15 삼성전자주식회사 영상 데이터를 처리하는 방법 및 디바이스.

Also Published As

Publication number Publication date
GB0810493D0 (en) 2008-07-09
JP2012178158A (ja) 2012-09-13
DE112006003473B4 (de) 2011-07-14
WO2007111743A2 (en) 2007-10-04
JP5345226B2 (ja) 2013-11-20
TWI368182B (en) 2012-07-11
US7728841B1 (en) 2010-06-01
DE112006003473T5 (de) 2008-10-23
US20070159488A1 (en) 2007-07-12
US8730249B2 (en) 2014-05-20
JP2009520307A (ja) 2009-05-21
KR101027621B1 (ko) 2011-04-06
WO2007111743A3 (en) 2008-08-28
US7830392B1 (en) 2010-11-09
GB2446546A (en) 2008-08-13
CN101371247B (zh) 2014-06-04
CN101371247A (zh) 2009-02-18
GB2446546B (en) 2011-05-04
US20120026171A1 (en) 2012-02-02
TW200745987A (en) 2007-12-16

Similar Documents

Publication Publication Date Title
KR101027621B1 (ko) 그래픽 프로세서용 병렬 어레이 아키텍처
US8074224B1 (en) Managing state information for a multi-threaded processor
US8077174B2 (en) Hierarchical processor array
US11748843B2 (en) Apparatus and method for non-uniform frame buffer rasterization
US7634637B1 (en) Execution of parallel groups of threads with per-instruction serialization
US9978171B2 (en) Control of a sample mask from a fragment shader program
US7522171B1 (en) On-the-fly reordering of 32-bit per component texture images in a multi-cycle data transfer
US7750915B1 (en) Concurrent access of data elements stored across multiple banks in a shared memory resource
US8429656B1 (en) Thread count throttling for efficient resource utilization
US10540808B2 (en) Hierarchical Z-culling (HiZ) optimization for texture-dependent discard operations
US7747842B1 (en) Configurable output buffer ganging for a parallel processor
US7366842B1 (en) Creating permanent storage on the fly within existing buffers
US9123167B2 (en) Shader serialization and instance unrolling
CN108475441B (zh) 光线追踪期间的详细级别选择
US7484076B1 (en) Executing an SIMD instruction requiring P operations on an execution unit that performs Q operations at a time (Q&lt;P)
US9269179B2 (en) System, method, and computer program product for generating primitive specific attributes
KR20190027367A (ko) 멀티 코어 컴퓨팅 아키텍처에서 그래픽 작업부하를 가속화하기 위한 메커니즘
US10409571B1 (en) Apparatus and method for efficiently accessing memory when performing a horizontal data reduction
CN113450445A (zh) 临时密实渲染的自适应像素采样顺序
US7404056B1 (en) Virtual copying scheme for creating multiple versions of state information
US7404059B1 (en) Parallel copying scheme for creating multiple versions of state information
US7593971B1 (en) Configurable state table for managing multiple versions of state information
US7685371B1 (en) Hierarchical flush barrier mechanism with deadlock avoidance
US20180032431A1 (en) Banking Graphics Processor Shared Local Memory
US20230115044A1 (en) Software-directed divergent branch target prioritization

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E601 Decision to refuse application
AMND Amendment
J201 Request for trial against refusal decision
B701 Decision to grant
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20140228

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20150302

Year of fee payment: 5