KR20200086613A - 분산형 그래픽 디바이스에서의 작업부하 스케줄링 및 분배 - Google Patents

분산형 그래픽 디바이스에서의 작업부하 스케줄링 및 분배 Download PDF

Info

Publication number
KR20200086613A
KR20200086613A KR1020190152819A KR20190152819A KR20200086613A KR 20200086613 A KR20200086613 A KR 20200086613A KR 1020190152819 A KR1020190152819 A KR 1020190152819A KR 20190152819 A KR20190152819 A KR 20190152819A KR 20200086613 A KR20200086613 A KR 20200086613A
Authority
KR
South Korea
Prior art keywords
partition
graphics
processing engine
command
tile
Prior art date
Application number
KR1020190152819A
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 KR20200086613A publication Critical patent/KR20200086613A/ko

Links

Images

Classifications

    • 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
    • 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/5083Techniques for rebalancing the load in a distributed system
    • 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/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • 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/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • 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
    • 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/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2200/00Indexing scheme for image data processing or generation, in general
    • G06T2200/28Indexing scheme for image data processing or generation, in general involving image processing hardware

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Graphics (AREA)
  • Image Generation (AREA)
  • Image Processing (AREA)
  • Advance Control (AREA)
  • Multi Processors (AREA)

Abstract

본 명세서에 기술된 실시예는 보다 소형인 그래픽 디바이스의 다수의 타일로 구성된 타일 구조를 갖는 그래픽, 미디어 및 컴퓨팅 디바이스를 제공한다. 이러한 디바이스의 작업 분배 인프라를 통해 디바이스의 여러 타일에 걸쳐 작업부하를 분배할 수 있다. 작업 항목은 여러 타일 중 임의의 하나 이상의 타일에 제출될 수 있다. 또한, 작업 항목을 완료하면 디바이스 내의 그래픽, 미디어 및/또는 컴퓨팅 엔진은 최소한의 레이턴시로 실행할 새로운 작업 항목을 쉽게 획득할 수 있다.

Description

분산형 그래픽 디바이스에서의 작업부하 스케줄링 및 분배{WORKLOAD SCHEDULING AND DISTRIBUTION ON A DISTRIBUTED GRAPHICS DEVICE}
컴퓨팅 시스템은 선형 보간, 테셀레이션(tessellation), 래스터화, 텍스처 매핑, 깊이 테스트 등과 같은 그래픽 처리 및 병렬 컴퓨팅 작업부하를 수행하는 그래픽 프로세서를 포함할 수 있다. 전통적으로, 그래픽 프로세서는 그래픽 데이터를 처리하기 위해 고정 함수 계산 유닛을 사용했다. 그러나 최신 그래픽 프로세서에는 프로그래밍 가능한 부분이 포함되어 있어 이러한 프로세서가 버텍스 및 프래그먼트 데이터 및 범용 병렬 컴퓨팅 작업부하를 처리하기 위한 광범위한 동작을 지원할 수 있게 한다. 이러한 프로세서에는 인터페이스를 포함하며, 인터페이스를 통해 일반적으로 프로그램가능 작업부하가 프로세서 상에서 실행되도록 스케줄링될 수 있다.
본 실시예들의 위에 언급된 특징이 상세하게 이해될 수 있는 방식으로, 위에서 간략히 요약된 실시예의 보다 구체적인 설명이 실시예를 참조하여 이루어질 수 있으며, 그 중 일부가 첨부 도면에 도시되고, 도면은 다음과 같다.
도 1은 일 실시예에 따른 처리 시스템의 블록도이다.
도 2는 일 실시예에 따른 프로세서의 블록도이다.
도 3은 일 실시예에 따른 그래픽 프로세서의 블록도이다.
도 4는 몇몇 실시예에 따른 그래픽 프로세서의 그래픽 처리 엔진의 블록도이다.
도 5는 본 명세서에 설명된 몇몇 실시예에 따른 그래픽 프로세서 코어의 하드웨어 로직의 블록도이다.
도 6a 내지 6b는 본 명세서에 설명된 실시예에 따른 그래픽 프로세서 코어에 채용된 처리 요소들의 어레이를 포함하는 쓰레드 실행 로직을 도시한다.
도 7은 몇몇 실시예에 따른 그래픽 프로세서 명령어 포맷을 나타내는 블록도이다.
도 8은 다른 실시예에 따른 그래픽 프로세서의 블록도이다.
도 9a 내지 9b는 몇몇 실시예에 따른 그래픽 프로세서 명령어 포맷 및 커맨드 시퀀스를 도시한다.
도 10은 몇몇 실시예에 따른 데이터 처리 시스템을 위한 예시적인 그래픽 소프트웨어 아키텍처를 도시한다.
도 11a는 일 실시예에 따른 IP 코어 개발 시스템을 나타내는 블록도이다.
도 11b는 본 명세서에 설명된 몇몇 실시예에 따른 집적 회로 패키지 어셈블리의 측 단면도를 도시한다.
도 12는 일 실시예에 따른, 예시적인 SoC 집적 회로를 나타내는 블록도이다.
도 13a 내지 13b는 설명된 실시예들에 따른, SoC 내에서 사용하기 위한 예시적인 그래픽 프로세서를 도시하는 블록도이다.
도 14a 내지 14b는 본 명세서에 설명된 실시예들에 따른 추가의 예시적인 그래픽 프로세서 로직을 도시한다.
도 15는 일 실시예에 따른 데이터 처리 시스템의 블록도이다.
도 16a 내지 도 16c는 실시예에 따라 다중 타일 작업 스케줄링을 구현하는 그래픽 처리 시스템을 도시한다.
도 17은 본 명세서에 설명된 실시예들에 따른 타일 작업 파티셔닝(tile work partitioning) 및 스케줄링 시스템을 도시한다.
도 18은 실시예에 따른 다중 타일 그래픽 처리 시스템에서 부하 균형화를 가능하게 하는 시스템을 도시한다.
도 19는 일 실시예에 따른, 다중 타일 작업부하 스케줄링 방법의 흐름도를 도시한다.
도 20은 일 실시예에 따른 다중 타일 작업부하를 실행하는 방법의 흐름도를 도시한다.
도 21은 일 실시예에 따른, 타일들 사이에서 작업부하를 마이그레이션(migrate)하는 방법의 흐름도를 도시한다.
도 22는 일 실시예에 따른 그래픽 프로세서를 포함하는 컴퓨팅 디바이스의 블록도이다.
본 명세서에 기술된 실시예는 보다 소형인 그래픽 디바이스의 다수의 타일로 구성된 타일 아키텍처를 갖는 그래픽, 미디어 및 컴퓨팅 디바이스를 제공한다. 이러한 장치는 장치의 전력 및/또는 성능 목표에 따라 더 많거나 적은 수의 타일을 포함하도록 스케일(scale)될 수 있다. 본 명세서에 기술된 스케일된 장치는 특별히 맞춤화된 작업 분배 인프라를 이용하여 다수의 타일에 걸쳐 작업부하를 효율적으로 분배할 수 있다. 본 명세서에 기술된 작업 분배 인프라는 가변 개수의 다중 타일에 걸쳐 스케일된 작업부하 디스패치를 가능하게 한다. 작업 항목은 여러 타일 중 하나 이상에 제출할 수 있으며 작업부하는 여러 타일에 분산될 수 있다. 또한, 작업 항목을 완성하면 장치 내의 그래픽, 미디어 및/또는 컴퓨팅 엔진은 최소한의 레이턴시로 실행할 새 작업 항목을 쉽게 얻을 수 있다.
본 기술분야에 알려진 그래픽, 매체 및/또는 컴퓨팅 디바이스에서, 하나 이상의 소프트웨어 계층이 작업 항목을 장치 내의 다양한 엔진에 분배하는 데 사용된다. 이 소프트웨어는 다양한 엔진들에 대한 부하를 모니터링하고 이들 엔진들에 작업부하를 효율적으로 분배 또는 재분배하려고 시도한다. 그러한 소프트웨어는 그래픽스, 미디어 및/또는 컴퓨팅 디바이스를 포함하는 데이터 처리 시스템 또는 컴퓨팅 디바이스의 하나 이상의 호스트 프로세서(예를 들어, CPU 코어)에서 실행되는 장치 드라이버 또는 장치 지원 프레임워크의 일부일 수 있다. 그러나 작업부하를 모니터하고 분배하기 위해 호스트 소프트웨어에 의존하는 것은 다양한 비 효율성을 유발한다. 예를 들어, 커맨드 버퍼 재패킷화(command buffer repacketization)가 필요할 수 있는데, 이는 추가 CPU 사이클을 도입하여 레이턴시를 늘리고 장치 동작을 위한 전력 소비를 증가시킨다.
일 실시예는 소프트웨어가 작업부하 파티션 구성(workload partitioning constructs)을 포함하는, 작업부하를 위한 통합된 커맨드 버퍼를 생성할 수 있는 작업 스케줄링 및 제출 인프라를 제공한다. 그런 다음 소프트웨어는 작업 항목을 타일에 직접 제출할 수 있으며, 타일 내의 로컬 하드웨어 스케줄러는 타일 내의 적절한 엔진에 작업부하를 스케줄링할 수 있다. 각 엔진은 동일한 커맨드 버퍼를 실행할 수 있다. 엔진이 새로운 작업 항목을 실행할 준비가 되면, 엔진은 실행을 위해 다음 작업 청크(예: 파티션)를 동적으로 그리고 원자적으로(atomically) 획득할 수 있다. 일 실시예에서, 통합된 커맨드 버퍼는 분산된 파티셔닝된 작업부하의 실행이 끝날 때 동기되는 동기화 커맨드를 포함한다.
동작 동안, 애플리케이션 또는 사용자 모드 그래픽 드라이버(UMD)는 분산 실행에 도움이 되는 포맷으로 작업부하 커맨드를 제출할 수 있다. 작업부하 커맨드는 통합 커맨드 버퍼 포맷을 가진 커맨드 버퍼에 삽입된다. 커맨드 버퍼 내의 커맨드는 여러 타일에 걸쳐 분산 실행을 가능하게 하기 위해 파티션으로 분리된다. 그래픽, 미디어 및 컴퓨팅 디바이스의 엔진에는 실행할 작업부하 파티션을 원자적으로(atomically) 획득하고 해당 파티션과 관련된 커맨드를 실행할 수 있는 메커니즘이 포함되어 있다. 엔진의 실행 상태를 모니터링하기 위해 장치의 고수준(high-level) 스케줄러가 개입할 필요가 없다. 고수준 스케줄러가 엔진에 파티션을 제공하는 것이 아니라, 필요하면 엔진이 작업 파티션을 확보할 수 있다.
설명을 위해, 아래에서 기술되는 다양한 실시예에 대한 철저한 이해를 제공하기 위해서 여러 구체적인 세부사항이 개진된다. 그러나, 발명의 실시예는 이들 구체적인 세부사항 중 일부가 없이도 실시될 수 있음이 당업자에게 명백할 것이다. 다른 사례에서, 잘 알려진 구조 및 디바이스는 기본 원리를 모호하게 하는 것을 피하고 실시예에 대한 보다 철저한 이해를 돕기위해 블록도 형태로 도시된다. 이하의 실시예들 중 일부가 그래픽 프로세서를 참조하여 설명되었지만, 본 명세서에 기술된 기술 및 교시(teaching)는 범용 처리 장치 또는 그래픽 처리 장치를 포함하는 다양한 유형의 회로 또는 반도체 장치에 적용될 수 있다. 본 명세서에서 "일 실시예" 또는 "실시예"에 대한 언급은 실시예와 연관 또는 관련하여 설명된 구체적인 특징, 구조 또는 특성이 그러한 실시예 중 적어도 하나에 포함될 수 있음을 나타낸다. 그러나, 명세서의 여러 곳에서 등장하는 "일 실시예에서"라는 문구가 반드시 모두 동일한 실시예를 지칭하는 것은 아니다.
다음의 설명 및 청구 범위에서, 용어 "커플링된(coupled)" 및 "연결된(connected)"은 이들의 파생어와 함께 사용될 수 있다. 이들 용어는 서로에 대한 동의어를 의미하는 것이 아님을 이해해야 한다. "결합된"은 서로 물리적 또는 전기적으로 직접 접촉할 수도 있고 그렇지 않을 수도 있는 둘 이상의 요소가 서로 협력하거나 상호 작용한다는 것을 나타내는 데 사용된다. "연결된"은 서로 결합된 둘 이상의 요소 사이에 통신이 설정된 것을 나타내는 데 사용된다.
다음의 설명에서, 도 1 내지 14는 다양한 실시예를 포함하거나 이와 관련되는 예시적인 데이터 처리 시스템 및 그래픽 프로세서 로직의 개요를 제공한다. 도 15 내지 22는 다양한 실시예의 특정 세부 사항을 제공한다. 이하의 실시예의 일부 측면은 그래픽 프로세서를 참조하여 설명되는 반면, 다른 측면은 중앙 처리 장치(CPU)와 같은 범용 프로세서에 대해 설명된다. 많은 집적 코어 프로세서, GPU 클러스터, 또는 하나 이상의 FPGA(Field Programmable Gate Array) 인스턴스를 포함하나 이에 제한되는 것은 아닌 다른 유형의 회로 또는 반도체 장치에 유사한 기술 및 교시가 적용될 수 있다. 일반적으로, 본 교시는 이미지(예를 들어, 샘플, 픽셀), 정점 데이터(vertex data) 또는 지오메트리 데이터를 조작 또는 처리하는 임의의 프로세서 또는 머신에 적용 가능하다.
시스템 개관
도 1은 실시예에 따른 처리 시스템(100)의 블록도이다. 다양한 실시예에서 시스템(100)은 하나 이상의 프로세서(102) 및 하나 이상의 그래픽 프로세서(108)를 포함하며, 단일 프로세서 데스크톱 시스템(single processor desktop system)이거나, 멀티프로세서 워크스테이션 시스템(multiprocessor workstation system)이거나, 많은 수의 프로세서(102) 또는 프로세서 코어(107)를 갖는 서버 시스템(server system)일 수 있다. 하나의 실시예에서, 시스템(100)은 모바일(mobile), 핸드헬드(handheld) 또는 임베디드(embedded) 디바이스에서의 사용을 위한 시스템 온 칩(System-on-a-Chip: SoC) 집적 회로 내에 통합된(incorporated) 처리 플랫폼(processing platform)이다.
하나의 실시예에서 시스템(100)은 서버 기반 게이밍 플랫폼(server-based gaming platform), 게임 콘솔(game console)(게임 및 미디어 콘솔(game and media console)을 포함함), 모바일 게이밍 콘솔, 핸드헬드 게임 콘솔, 또는 온라인 게임 콘솔 내에 통합되거나 이를 포함할 수 있다. 몇몇 실시예에서 시스템(100)은 모바일 전화(mobile phone), 스마트 폰(smart phone), 태블릿 컴퓨팅 디바이스(tablet computing device) 또는 모바일 인터넷 디바이스(mobile Internet device)이다. 처리 시스템(100)은 또한 웨어러블 디바이스(wearable device), 예를 들면 스마트 시계(smart watch) 웨어러블 디바이스, 스마트 안경(smart eyewear) 디바이스, 증강 현실(augmented reality) 디바이스, 또는 가상 현실(virtual reality) 디바이스 내에 집적되거나, 이와 커플링되거나, 이를 포함할 수 있다. 몇몇 실시예에서, 처리 시스템(100)은 하나 이상의 그래픽 프로세서(108)에 의해 생성된 그래픽 인터페이스 및 하나 이상의 프로세서(102)를 갖는 텔레비전이나 셋톱 박스(set top box) 디바이스이다.
몇몇 실시예에서, 하나 이상의 프로세서(102)는 각각, 실행되는 경우에 시스템 및 사용자 소프트웨어를 위한 동작을 수행하는 명령어를 처리하는 하나 이상의 프로세서 코어(107)를 포함한다. 몇몇 실시예에서, 하나 이상의 프로세서 코어(107) 각각은 특정 명령어 세트(109)를 처리하도록 구성된다. 몇몇 실시예에서, 명령어 세트(109)는 복합 명령어 세트 컴퓨팅(Complex Instruction Set Computing: CISC), 축소 명령어 세트 컴퓨팅(Reduced Instruction Set Computing: RISC), 또는 초장 명령어 워드(Very Long Instruction Word: VLIW)를 통한 컴퓨팅을 가능하게 할 수 있다. 여러 프로세서 코어(107)는 각각 상이한 명령어 세트(109)를 처리할 수 있는데, 이는 다른 명령어 세트의 에뮬레이션(emulation)을 가능하게 하는 명령어를 포함할 수 있다. 프로세서 코어(107)는 또한 다른 처리 디바이스, 예를 들면 디지털 신호 프로세서(Digital Signal Processor: DSP)를 포함할 수 있다.
몇몇 실시예에서, 프로세서(102)는 캐시 메모리(cache memory)(104)를 포함한다. 아키텍처에 따라서, 프로세서(102)는 단일 내부 캐시 또는 다수 레벨의 내부 캐시를 가질 수 있다. 몇몇 실시예에서, 캐시 메모리는 프로세서(102)의 다양한 컴포넌트 간에 공유된다. 몇몇 실시예에서, 프로세서(102)는 또한 외부 캐시(가령, 레벨-3(Level-3: L3) 캐시 또는 마지막 레벨 캐시(Last Level Cache: LLC))(도시되지 않음)를 사용하는데, 이는 알려진 캐시 일관성(cache coherency) 기법을 사용하여 프로세서 코어(107) 간에 공유될 수 있다. 프로세서(102) 내에 레지스터 파일(register file)(106)이 추가적으로 포함되는데 이는 상이한 타입의 데이터를 저장하기 위한 상이한 타입의 레지스터(가령, 정수 레지스터(integer register), 부동 소수점 레지스터(floating point register), 상태 레지스터(status register) 및 명령어 포인터 레지스터(instruction pointer register))를 포함할 수 있다. 몇몇 레지스터는 범용(general-purpose) 레지스터일 수 있는 반면, 다른 레지스터는 프로세서(102)의 설계에 특유할 수 있다.
몇몇 실시예에서, 하나 이상의 프로세서(들)(102)는 시스템(100) 내에서 프로세서(102) 및 다른 컴포넌트들 간에 어드레스(address), 데이터, 또는 제어 신호와 같은 통신 신호를 송신하기 위해 하나 이상의 인터페이스 버스(들)(110)와 커플링된다(coupled). 인터페이스 버스(110)는, 하나의 실시예에서, 프로세서 버스, 예를 들면 다이렉트 미디어 인터페이스(Direct Media Interface: DMI) 버스의 버전(version)일 수 있다. 그러나, 프로세서 버스는 DMI 버스에 한정되지 않으며, 하나 이상의 주변 컴포넌트 상호연결(Peripheral Component Interconnect) 버스(가령, PCI, PCI Express), 메모리 버스, 또는 다른 타입의 인터페이스 버스를 포함할 수 있다. 하나의 실시예에서 프로세서(들)(102)는 집적된 메모리 제어기(116) 및 플랫폼 제어기 허브(130)를 포함한다. 메모리 제어기(116)는 시스템(100)의 메모리 디바이스 및 다른 컴포넌트들 간의 통신을 가능하게 하는 반면, 플랫폼 제어기 허브(Platform Controller Hub: PCH)(130)는 로컬 I/O 버스를 통해 I/O 디바이스에의 연결을 제공한다.
메모리 디바이스(120)는 동적 랜덤 액세스 메모리(Dynamic Random Access Memory: DRAM) 디바이스, 정적 랜덤 액세스 메모리(Static Random Access Memory: SRAM) 디바이스, 플래시 메모리(flash memory) 디바이스, 위상 변화 메모리(phase-change memory) 디바이스, 또는 프로세스 메모리(process memory)로서의 역할을 하도록 적합한 성능을 갖는 어떤 다른 메모리 디바이스일 수 있다. 하나의 실시예에서 메모리 디바이스(120)는 하나 이상의 프로세서(102)가 애플리케이션(application) 또는 프로세스(process)를 실행할 때 사용을 위한 명령어(121) 및 데이터(122)를 저장하도록, 시스템(100)을 위한 시스템 메모리로서 동작할 수 있다. 메모리 제어기 허브(116)는 또한 선택적인 외부 그래픽 프로세서(112)와 커플링되는데, 이는 그래픽 및 미디어 동작을 수행하기 위해 프로세서(102) 내의 하나 이상의 그래픽 프로세서(108)와 통신할 수 있다. 몇몇 실시예에서 디스플레이 디바이스(111)는 프로세서(들)(102)에 연결될 수 있다. 디스플레이 디바이스(111)는 모바일 전자 디바이스나 랩톱 디바이스 내에서와 같은, 내부 디스플레이 디바이스, 또는 디스플레이 인터페이스(가령, 디스플레이포트(DisplayPort) 등)를 통해 부착된(attached) 외부 디스플레이 디바이스 중 하나 이상일 수 있다. 하나의 실시예에서 디스플레이 디바이스(111)는 가상 현실(Virtual Reality: VR) 애플리케이션 또는 증강 현실(Augmented Reality: AR) 애플리케이션에서의 사용을 위한 입체 디스플레이 디바이스(stereoscopic display device)와 같은 머리 장착형 디스플레이(Head Mounted Display: HMD)일 수 있다.
몇몇 실시예에서 플랫폼 제어기 허브(130)는 주변기기로 하여금 고속 I/O 버스를 통해 메모리 디바이스(120) 및 프로세서(102)에 연결될 수 있게 한다. I/O 주변기기는 오디오 제어기(146), 네트워크 제어기(134), 펌웨어 인터페이스(128), 무선 송수신기(126), 터치 센서(125), 데이터 저장 디바이스(124)(가령, 하드 디스크 드라이브, 플래시 메모리 등)를 포함하나, 이에 한정되지 않는다. 데이터 저장 디바이스(124)는 주변 컴포넌트 상호연결(Peripheral Component Interconnect) 버스(가령, PCI, PCI Express)와 같은 주변기기 버스(peripheral bus)를 통해 또는 저장 인터페이스(storage interface)(가령, SATA)를 통해 연결될 수 있다. 터치 센서(125)는 터치 스크린 센서, 압력 센서, 또는 지문 센서를 포함할 수 있다. 무선 송수신기(126)는 와이파이(Wi-Fi) 송수신기, 블루투스(Bluetooth) 송수신기, 모바일 네트워크 송수신기, 예를 들면 3G, 4G, 또는 롱텀 에볼루션(Long Term Evolution: LTE) 송수신기일 수 있다. 펌웨어 인터페이스(128)는 시스템 펌웨어와의 통신을 가능하게 하며, 예를 들어, 통일된 확장가능 펌웨어 인터페이스(Unified Extensible Firmware Interface: UEFI)일 수 있다. 네트워크 제어기(134)는 유선 네트워크로의 네트워크 연결을 가능하게 할 수 있다. 몇몇 실시예에서, 고성능 네트워크 제어기(도시되지 않음)가 인터페이스 버스(110)와 커플링된다. 오디오 제어기(146)는, 하나의 실시예에서, 다채널(multi-channel) 고선명도(high definition) 오디오 제어기이다. 하나의 실시예에서 시스템(100)은 레거시(legacy)(가령, 개인용 시스템 2(Personal System 2: PS/2) 디바이스를 시스템에 커플링하기 위한 선택적인 레거시 I/O 제어기(140)를 포함한다. 플랫폼 제어기 허브(130)는 하나 이상의 범용 직렬 버스(Universal Serial Bus: USB) 제어기(142)에 연결 입력 디바이스, 예를 들면 키보드 및 마우스(143) 조합, 카메라(144), 또는 다른 USB 입력 디바이스를 또한 연결할 수 있다.
상이하게 구성된 다른 타입의 데이터 처리 시스템이 또한 사용될 수 있기에, 도시된 시스템(100)은 예시적이며 비한정적임이 인식될 것이다. 예를 들어, 메모리 제어기(116) 및 플랫폼 제어기 허브(130)의 인스턴스(instance)가 외부 그래픽 프로세서(112)와 같은 개별 외부 그래픽 프로세서 내에 집적될 수 있다. 하나의 실시예에서 플랫폼 제어기 허브(130) 및/또는 메모리 제어기(160)는 하나 이상의 프로세서(들)(102)의 외부에 있을 수 있다. 예를 들어, 시스템(100)은 외부 메모리 제어기(116) 및 플랫폼 제어기 허브(130)를 포함할 수 있는데, 이는 프로세서(들)(102)와 통신하는 시스템 칩셋 내의 메모리 제어기 허브 및 주변기기 제어기 허브로서 구성될 수 있다.
도 2는 하나 이상의 프로세서 코어(202A-202N), 집적된 메모리 제어기(214) 및 집적된 그래픽 프로세서(208)를 갖는 프로세서(200)의 실시예의 블록도이다. 본 문서에서 임의의 다른 도면의 구성요소와 동일한 참조 번호(또는 명칭)를 갖는 도 2의 구성요소는 본 문서의 다른 부분에 기술된 것과 유사한 방식으로 동작하거나 기능할 수 있으나, 반드시 그런 것은 아니다. 프로세서(200)는 파선 박스에 의해 표현된 추가적인 코어(202N)까지를 포함하는 추가적인 코어를 포함할 수 있다. 프로세서 코어(202A-202N) 각각은 하나 이상의 내부 캐시 유닛(internal cache unit)(204A-204N)을 포함한다. 몇몇 실시예에서 각각의 프로세서 코어는 또한 하나 이상의 공유 캐시 유닛(shared cached unit)(206)에 액세스할 수가 있다.
내부 캐시 유닛(204A-204N) 및 공유 캐시 유닛(206)은 프로세서(200) 내의 캐시 메모리 계층구조(cache memory hierarchy)를 나타낸다. 캐시 메모리 계층구조는 각각의 프로세서 코어 내의 명령어 및 데이터 캐시(instruction and data cache)의 적어도 하나의 레벨 및 공유된 중간 레벨 캐시(shared mid-level cache)의 하나 이상의 레벨, 예를 들면 레벨 2(Level 2: L2), 레벨 3(Level 3: L3), 레벨 4(Level 4: L4), 또는 캐시의 다른 레벨을 포함할 수 있는데, 외부 메모리 전의 캐시의 최고 레벨은 LLC로서 분류된다. 몇몇 실시예에서, 캐시 일관성 로직은 다양한 캐시 유닛(206 및 204A-204N) 간의 일관성을 유지한다.
몇몇 실시예에서, 프로세서(200)는 하나 이상의 버스 제어기 유닛(216)의 세트 및 시스템 에이전트 코어(system agent core)(210)를 또한 포함할 수 있다. 하나 이상의 버스 제어기 유닛(216)은 하나 이상의 PCI 또는 PCI Express 버스와 같은 주변기기 버스의 세트를 관리한다. 시스템 에이전트 코어(210)는 다양한 프로세서 컴포넌트를 위한 관리 기능을 제공한다. 몇몇 실시예에서, 시스템 에이전트 코어(210)는 다양한 외부 메모리 디바이스(도시되지 않음)로의 액세스를 관리하는 하나 이상의 집적된 메모리 제어기(214)를 포함한다.
몇몇 실시예에서, 프로세서 코어(202A-202N) 중 하나 이상은 동시적 다중쓰레딩(multi-threading)을 위한 지원을 포함한다. 그러한 실시예에서, 시스템 에이전트 코어(210)는 다중 쓰레드형 처리(multi-threaded processing) 동안에 코어(202A-202N)를 조정(coordinating) 및 동작시키기 위한 컴포넌트를 포함한다. 시스템 에이전트 코어(210)는 전력 제어 유닛(Power Control Unit: PCU)을 추가적으로 포함할 수 있는데, 이는 프로세서 코어(202A-202N) 및 그래픽 프로세서(208)의 전력 상태를 통제하는(regulate) 로직 및 컴포넌트를 포함한다.
몇몇 실시예에서, 프로세서(200)는 그래픽 처리 동작을 실행하는 그래픽 프로세서(208)를 추가적으로 포함한다. 몇몇 실시예에서, 그래픽 프로세서(208)는 하나 이상의 집적된 메모리 제어기(214)를 포함하는 시스템 에이전트 코어(210)와, 공유 캐시 유닛(206)의 세트와 커플링된다. 몇몇 실시예에서, 시스템 에이전트 코어(210)는 또한 하나 이상의 커플링된 디스플레이로의 그래픽 프로세서 출력을 구동하는(drive) 디스플레이 제어기(211)를 포함한다. 몇몇 실시예에서, 디스플레이 제어기(211)는 적어도 하나의 상호연결부(interconnect)를 통해 그래픽 프로세서와 커플링된 별개의 모듈일 수도 있고, 그래픽 프로세서(208) 내에 집적될 수 있다.
몇몇 실시예에서, 프로세서(200)의 내부 컴포넌트를 커플링하는 데에 링 기반 상호연결 유닛(ring based interconnect unit)(212)이 사용된다. 그러나, 점대점 상호연결부(point-to-point interconnect), 교환식 상호연결부(switched interconnect), 또는 업계에 잘 알려진 기법을 포함하는 다른 기법과 같은, 대안적인 상호연결 유닛이 사용될 수 있다. 몇몇 실시예에서, 그래픽 프로세서(208)는 I/O 링크(213)를 통해 링 상호연결부(212)와 커플링된다.
예시적인 I/O 링크(213)는, 다양한 프로세서 컴포넌트와 고성능 임베디드 메모리 모듈(218), 예를 들면 eDRAM 모듈 간의 통신을 가능하게 하는 온 패키지 I/O 상호연결부(on package I/O interconnect)를 포함하는 I/O 상호연결부의 여러 종류 중 적어도 하나를 나타낸다. 몇몇 실시예에서, 그래픽 프로세서(208) 및 프로세서 코어(202A-202N) 각각은 임베디드 메모리 모듈(218)을 공유된 마지막 레벨 캐시로서 사용한다.
몇몇 실시예에서, 프로세서 코어(202A-202N)는 동일한 명령어 세트 아키텍처를 실행하는 동종(homogenous) 코어이다. 다른 실시예에서, 프로세서 코어(202A-202N)는 명령어 세트 아키텍처(Instruction Set Architecture: ISA) 면에서 이종(heterogeneous)인데, 프로세서 코어(202A-202N) 중 하나 이상은 제1 명령어 세트를 실행하는 반면, 다른 코어 중 적어도 하나는 제1 명령어 세트의 서브세트 또는 다른 명령어 세트를 실행한다. 하나의 실시예에서 프로세서 코어(202A-202N)는 마이크로아키텍처(microarchitecture) 면에서 이종인데, 상대적으로 더 높은 전력 소모를 갖는 하나 이상의 코어가 더 낮은 전력 소모를 갖는 하나 이상의 전력 코어와 커플링된다. 추가적으로, 프로세서(200)는 다른 컴포넌트 외에, 예시된 컴포넌트를 갖는 SoC 집적 회로로서 또는 하나 이상의 칩 상에 구현될 수 있다.
도 3은 개별 그래픽 처리 유닛일 수도 있고, 복수의 처리 코어와 함께 집적된 그래픽 프로세서일 수도 있는 그래픽 프로세서(300)의 블록도이다. 몇몇 실시예에서, 그래픽 프로세서는 메모리 맵핑된 I/O 인터페이스(memory mapped I/O interface)를 통해, 그리고 프로세서 메모리 내에 배치된 커맨드로써, 그래픽 프로세서 상의 레지스터로와 통신한다. 몇몇 실시예에서, 그래픽 프로세서(300)는 메모리를 액세스하는 메모리 인터페이스(314)를 포함한다. 메모리 인터페이스(314)는 로컬 메모리, 하나 이상의 내부 캐시, 하나 이상의 공유된 외부 캐시 및/또는 시스템 메모리로의 인터페이스일 수 있다.
몇몇 실시예에서, 그래픽 프로세서(300)는 디스플레이 디바이스(320)로의 디스플레이 출력 데이터를 구동하는 디스플레이 제어기(302)를 또한 포함한다. 디스플레이 제어기(302)는 비디오 또는 사용자 인터페이스 요소의 여러 층의 구성 및 디스플레이를 위해 하나 이상의 오버레이 평면(overlay plane)을 위한 하드웨어를 포함한다. 디스플레이 디바이스(320)는 내부 또는 외부 디스플레이 디바이스일 수 있다. 하나의 실시예에서 디스플레이 디바이스(320)는 가상 현실(Virtual Reality: VR) 디스플레이 디바이스 또는 증강 현실(Augmented Reality: AR) 디스플레이 디바이스와 같은 머리 장착형 디스플레이(Head Mounted Display: HMD)이다. 몇몇 실시예에서, 그래픽 프로세서(300)는, 동화상 전문가 그룹(Moving Picture Experts Group: MPEG) 포맷, 예를 들면 MPEG-2, 고급 비디오 코딩(Advanced Video Coding: AVC) 포맷, 예를 들면 H.264/MPEG-4 AVC, 또 영화 텔레비전 엔진니어 협회(Society of Motion Picture & Television Engineers: SMPTE) 421M/VC-1, 그리고 합동 사진 전문가 그룹(Joint Photographic Experts Group: JPEG) 포맷, 예를 들면 JPEG과, 모션 JPEG(Motion JPEG: MJPEG) 포맷을 포함하나 이에 한정되지 않는 하나 이상의 미디어 인코딩 포맷으로, 이로부터, 또는 이들 간에 미디어를 인코딩, 디코딩 또는 트랜스코딩하는 비디오 코덱 엔진(video codec engine)(306)을 포함한다.
몇몇 실시예에서, 그래픽 프로세서(300)는, 예컨대, 비트 경계 블록 전송(bit-boundary block transfer)을 포함하는 2차원 래스터화기(two-dimensional(2D) rasterizer) 동작을 수행하는 블록 이미지 전송(Block Image Transfer: BLIT) 엔진(304)을 포함한다. 그러나, 하나의 실시예에서, 그래픽 처리 엔진(Graphics Processing Engine: GPE)(310)의 하나 이상의 컴포넌트를 사용하여 2D 그래픽 동작이 수행된다. 몇몇 실시예에서, GPE(310)는 3차원(three-dimensional(3D)) 그래픽 동작을 포함하는 그래픽 동작 및 미디어 동작을 수행하기 위한 컴퓨트 엔진(compute engine)이다.
몇몇 실시예에서, GPE(310)는 3D 프리미티브(primitive) 형상(가령, 직사각형, 삼각형 등)에 작용하는 처리 함수를 사용하여 3차원 이미지 및 장면을 렌더링하는 것과 같은 3D 동작을 수행하기 위한 3D 파이프라인(312)을 포함한다. 3D 파이프라인(312)은 프로그램가능(programmable) 요소 및 고정 함수(fixed function) 요소(이들은 그 요소 내에서 다양한 태스크를 수행하고/하거나 실행 쓰레드를 3D/미디어 서브시스템(3D/Media sub-system)(315)으로 스폰함(spawn))를 포함한다. 3D 파이프라인(312)은 미디어 동작을 수행하는 데에 사용할 수 있는 한편, GPE(310)의 실시예는 비디오 후처리 및 이미지 향상(enhancement)과 같은 미디어 동작을 수행하는 데에 특히 사용되는 미디어 파이프라인(316)을 또한 포함한다.
몇몇 실시예에서, 미디어 파이프라인(316)은 비디오 코덱 엔진(306)을 대신하여, 또는 이를 대행하여 비디오 디코드 가속(video decode acceleration), 비디오 디인터레이싱(video de-interlacing) 및 비디오 인코드 가속(video encode acceleration)과 같은 하나 이상의 전문화된 미디어 동작을 수행하는 고정 함수 로직 유닛 또는 프로그램가능 로직 유닛을 포함한다. 몇몇 실시예에서, 미디어 파이프라인(316)은 3D/미디어 서브시스템(315) 상에서의 실행을 위한 쓰레드를 스폰하는 쓰레드 스포닝 유닛(thread spawning unit)을 추가적으로 포함한다. 스폰된 쓰레드는 3D/미디어 서브시스템(315)에 포함된 하나 이상의 그래픽 실행 유닛 상에서 미디어 동작을 위한 계산을 수행한다.
몇몇 실시예에서, 3D/미디어 서브시스템(315)은 3D 파이프라인(312) 및 미디어 파이프라인(316)에 의해 스폰된 쓰레드를 실행하기 위한 로직을 포함한다. 하나의 실시예에서, 파이프라인은 쓰레드 실행 요청을 3D/미디어 서브시스템(315)에 발신하는데, 이는 다양한 요청을 가용 쓰레드 실행 리소스로 중재하고(arbitrating) 디스패치하기(dispatching) 위한 쓰레드 디스패치 로직을 포함한다. 실행 리소스는 3D 및 미디어 쓰레드를 처리하는 그래픽 실행 유닛의 어레이를 포함한다. 몇몇 실시예에서, 3D/미디어 서브시스템(315)은 쓰레드 명령어 및 데이터를 위한 하나 이상의 내부 캐시를 포함한다. 몇몇 실시예에서, 서브시스템은 쓰레드 간에 데이터를 공유하고 출력 데이터를 저장하는, 레지스터 및 어드레스지정가능(addressable) 메모리를 포함하는 공유된 메모리를 또한 포함한다.
그래픽 처리 엔진
도 4는 몇몇 실시예에 따른 그래픽 프로세서의 그래픽 처리 엔진(410)의 블록도이다. 하나의 실시예에서, 그래픽 처리 엔진(Graphics Processing Engine: GPE)(410)은 도 3에 도시된 GPE(310)의 한 버전(version)이다. 본 문서에서 임의의 다른 도면의 구성요소와 동일한 참조 번호(또는 명칭)를 갖는 도 4의 구성요소는, 본 문서의 다른 부분에 기술된 것과 유사한 임의의 방식으로 동작하거나 기능할 수 있으나, 반드시 그런 것은 아니다. 예를 들어, 도 3의 3D 파이프라인(312) 및 미디어 파이프라인(316)이 예시된다. 미디어 파이프라인(316)은 GPE(410)의 몇몇 실시예에서 선택적이며 GPE(410) 내에 명시적으로 포함되지 않을 수 있다. 예를 들어 그리고 적어도 하나의 실시예에서, 별개의 미디어 및/또는 이미지 프로세서가 GPE(410)에 커플링된다.
몇몇 실시예에서, GPE(410)는 커맨드 스트리머(command streamer)(403)와 커플링되거나 이를 포함하는데, 이는 3D 파이프라인(312) 및/또는 미디어 파이프라인(316)에 커맨드 스트림(command stream)을 제공한다. 몇몇 실시예에서, 커맨드 스트리머(403)는 메모리와 커플링되는데, 이는 시스템 메모리, 또는 내부 캐시 메모리와 공유 캐시 메모리 중 하나 이상일 수 있다. 몇몇 실시예에서, 커맨드 스트리머(403)는 메모리로부터 커맨드를 수신하고 커맨드를 3D 파이프라인(312) 및/또는 미디어 파이프라인(316)에 발신한다. 커맨드는 링 버퍼(ring buffer)로부터 페치된 명령(fetched directives)인데, 이는 3D 파이프라인(312) 및 미디어 파이프라인(316)을 위한 커맨드를 저장한다. 하나의 실시예에서, 링 버퍼는 여러 커맨드의 배치(batch)를 저장하는 배치 커맨드 버퍼를 추가적으로 포함할 수 있다. 3D 파이프라인(312)을 위한 커맨드는, 3D 파이프라인(312)을 위한 정점(vertex) 및 지오메트리(geometry) 데이터 및/또는 미디어 파이프라인(316)을 위한 이미지 데이터 및 메모리 객체(object)와 같은 (그러나 이에 한정되지 않는) 메모리 내에 저장된 데이터에 대한 참조를 또한 포함할 수 있다. 3D 파이프라인(312) 및 미디어 파이프라인(316)은 각 파이프라인 내의 로직을 통해 동작을 수행함으로써 또는 하나 이상의 실행 쓰레드를 그래픽 코어 어레이(graphics core array)(414)에 디스패치함으로써 커맨드 및 데이터를 처리한다. 하나의 실시예에서 그래픽 코어 어레이(414)는 그래픽 코어(가령, 그래픽 코어(들)(415A), 그래픽 코어(들)(415B))의 하나 이상의 블록을 포함하는데, 각 블록은 하나 이상의 그래픽 코어를 포함한다. 각각의 그래픽 코어는, 고정 함수 텍스처(texture) 처리 및/또는 머신 러닝 및 인공 지능 가속 로직뿐만 아니라, 그래픽 및 컴퓨트 동작을 수행할 범용 및 그래픽용 실행 로직을 포함하는 그래픽 실행 리소스의 세트를 포함한다.
다양한 실시예에서 3D 파이프라인(312)은, 명령어를 처리하고 실행 쓰레드를 그래픽 코어 어레이(414)에 디스패치함으로써, 정점 셰이더(vertex shader), 지오메트리 셰이더(geometry shader), 픽셀 셰이더(pixel shader), 프래그먼트 셰이더(fragment shader), 컴퓨트 셰이더(compute shader), 또는 다른 셰이더 프로그램과 같은 하나 이상의 셰이더 프로그램을 처리하는 고정 함수 및 프로그램가능 로직을 포함한다. 그래픽 코어 어레이(414)는 이들 셰이더 프로그램의 처리에 사용하기 위한 실행 리소스의 단일화된 블록(unified block)을 제공한다. 그래픽 코어 어레이(414)의 그래픽 코어(들)(415A-415B) 내의 다목적 실행 로직(가령, 실행 유닛)은 다양한 3D API 셰이더 언어를 위한 지원을 포함하며 여러 셰이더와 연관된 여러 동시적 실행 쓰레드를 실행할 수 있다.
몇몇 실시예에서 그래픽 코어 어레이(414)는 비디오 및/또는 이미지 처리와 같은 미디어 기능을 수행하는 실행 로직을 또한 포함한다. 하나의 실시예에서, 실행 유닛은 그래픽 처리 동작 외에도, 범용 계산 동작을 병렬로 수행하도록 프로그램가능한 범용 로직을 추가적으로 포함한다. 범용 로직은 도 1의 프로세서 코어(들)(107) 또는 도 2에서와 같은 코어(202A-202N) 내의 범용 로직과 병렬로 또는 이와 연계하여 처리 동작을 수행할 수 있다.
그래픽 코어 어레이(414) 상에서 실행되는 쓰레드에 의해 생성되는 출력 데이터는 단일화된 리턴 버퍼(Unified Return Buffer: URB)(418) 내의 메모리로 데이터를 출력할 수 있다. URB(418)는 여러 쓰레드를 위한 데이터를 저장할 수 있다. 몇몇 실시예에서 URB(418)는 그래픽 코어 어레이(414) 상에서 실행되는 상이한 쓰레드 간에 데이터를 발신하는 데에 사용될 수 있다. 몇몇 실시예에서 URB(418)는 추가적으로 공유 함수 로직(shared function logic)(420) 내의 고정 함수 로직 및 그래픽 코어 어레이 상의 쓰레드 간의 동기화를 위해 사용될 수 있다.
몇몇 실시예에서, 그래픽 코어 어레이(414)는 스케일가능(scalable)한바, 그 어레이는 가변적 개수의 그래픽 코어를 포함하되, 각각은 GPE(410)의 목표 전력 및 성능 레벨에 기반하여 가변적인 개수의 실행 유닛을 갖는다. 하나의 실시예에서 실행 리소스는 동적으로 스케일가능한바, 실행 리소스는 필요에 따라 인에이블되거나(enabled) 디스에이블될(disabled) 수 있다.
그래픽 코어 어레이(414)는 그래픽 코어 어레이 내의 그래픽 코어 간에 공유되는 여러 리소스를 포함하는 공유 함수 로직(420)과 커플링된다. 공유 함수 로직(420) 내의 공유 함수는 전문화된 보충 기능을 그래픽 코어 어레이(414)에 제공하는 하드웨어 로직 유닛이다. 다양한 실시예에서, 공유 함수 로직(420)은 샘플러(sampler)(421), 수학(math)(422) 및 쓰레드간 통신(Inter-Thread Communication: ITC)(423) 로직을 포함하나 이에 한정되지 않는다. 추가적으로, 몇몇 실시예는 공유 함수 로직(420) 내의 하나 이상의 캐시(들)(425)를 구현한다.
공유 함수는 주어진 전문화된 기능에 대한 수요가 그래픽 코어 어레이(414) 내에 포함되기에 불충분한 경우에 구현된다. 대신에 그런 전문화된 기능의 단일 인스턴스화(instantiation)가 공유 함수 로직(420) 내의 독립형 개체(stand-alone entity)로서 구현되고 그래픽 코어 어레이(414) 내의 실행 리소스 간에 공유된다. 그래픽 코어 어레이(414) 간에서 공유되고 그래픽 코어 어레이(414) 내에 포함된 함수의 정확한 세트는 실시예마다 다르다. 몇몇 실시예에서, 그래픽 코어 어레이(414)에 의해 광범위하게 사용되는, 공유 함수 로직(420) 내의 특정 공유 함수는 그래픽 코어 어레이(414) 내의 공유 함수 로직(416) 내에 포함될 수 있다. 다양한 실시예에서, 그래픽 코어 어레이(414) 내의 공유 함수 로직(416)은 공유 함수 로직(420) 내의 일부 또는 모든 로직을 포함할 수 있다. 하나의 실시예에서, 공유 함수 로직(420) 내의 모든 로직 요소는 그래픽 코어 어레이(414)의 공유 함수 로직(416) 내에 복제될(duplicated) 수 있다. 하나의 실시예에서 공유 함수 로직(420)은 배제되어 그래픽 코어 어레이(414) 내의 공유 함수 로직(416)의 우세로 된다.
도 5는 본 문서에 기술된 몇몇 실시예에 따른, 그래픽 프로세서 코어(500)의 하드웨어 로직의 블록도이다. 본 문서에서 임의의 다른 도면의 구성요소와 동일한 참조 번호(또는 명칭)를 갖는 도 5의 구성요소는 본 문서에의 다른 부분에 기술된 것과 유사한 임의의 방식으로 동작하거나 기능할 수 있으나, 반드시 그런 것은 아니다. 예시된 그래픽 프로세서 코어(500)는, 몇몇 실시예에서, 도 4의 그래픽 코어 어레이(414) 내에 포함된다. 때때로 코어 슬라이스(core slice)로 지칭되는 그래픽 프로세서 코어(500)는 모듈식(modular) 그래픽 프로세서 내의 하나의 또는 여러 그래픽 코어일 수 있다. 그래픽 프로세서 코어(500)는 하나의 그래픽 코어 슬라이스의 본(exemplary)이 되며, 본 문서에 기술된 바와 같은 그래픽 프로세서는 목표 전력 및 성능 한도(performance envelope)에 기반하여 여러 그래픽 코어 슬라이스를 포함할 수 있다. 각각의 그래픽 프로세서 코어(500)는 범용 및 고정 함수 로직의 모듈식 블록을 포함하는, 서브 슬라이스로 또한 지칭되는, 여러 서브 코어(501A-501F)와 커플링된 고정 함수 블록(530)을 포함할 수 있다.
몇몇 실시예에서 고정 함수 블록(530)은, 예를 들어, 더 낮은 성능 및/또는 더 낮은 전력의 그래픽 프로세서 구현에서, 그래픽 프로세서 코어(500) 내의 모든 서브 코어에 의해 공유될 수 있는 지오메트리/고정 함수 파이프라인(536)을 포함한다. 다양한 실시예에서, 지오메트리/고정 함수 파이프라인(536)은 3D 고정 함수 파이프라인(가령, 도 3 및 도 4에서와 같은 3D 파이프라인(312)) 비디오 프론트엔드 유닛(video front-end unit), 쓰레드 스포너(thread spawner) 및 쓰레드 디스패처(thread dispatcher), 도 4의 단일화된 리턴 버터(418)와 같은 단일화된 리턴 버퍼를 관리하는 단일화된 리턴 버퍼 관리기를 포함한다.
하나의 실시예에서 고정 함수 블록(530)은 또한 그래픽 SoC 인터페이스(537), 그래픽 마이크로제어기(538) 및 미디어 파이프라인(539)를 포함한다. 그래픽 SoC 인터페이스(537)는 시스템 온 칩(system on a chip) 집적 회로 내의 그래픽 프로세서 코어(500) 및 다른 프로세서 코어 간의 인터페이스를 제공한다. 그래픽 마이크로제어기(538)는, 쓰레드 디스패치, 스케줄링 및 선취(pre-emption)을 포함하여, 그래픽 프로세서 코어(500)의 다양한 기능을 관리하도록 구성가능한 프로그램가능 서브프로세서이다. 미디어 파이프라인(539)(가령, 도 3 및 도 4의 미디어 파이프라인(316))은 이미지 및 비디오 데이터를 포함하는 멀티미디어 데이터의 디코딩, 인코딩, 전처리 및/또는 후처리를 가능하게 하는 로직을 포함한다. 미디어 파이프라인(539)은 서브코어(501-501F) 내의 컴퓨트 또는 샘플링 로직으로의 요청을 통해 미디어 동작을 구현한다.
하나의 실시예에서 SoC 인터페이스(537)는 그래픽 프로세서 코어(500)로 하여금 SoC 내의 범용 애플리케이션 프로세서 코어(가령, CPU) 및/또는 다른 코어(공유된 마지막 레벨 캐시 메모리, 시스템 RAM 및/또는 임베디드 온칩(on-chip) 또는 온패키지(on-package) DRAM과 같은 메모리 계층구조 요소를 포함함)와 통신할 수 있게 한다. SoC 인터페이스(537)는 카메라 이미징 파이프라인과 같은, SoC 내의 고정 함수 디바이스와의 통신을 또한 가능하게할 수 있고, SoC 내의 그래픽 프로세서 코어(500) 및 CPU 간에 공유될 수 있는 전역 메모리 어토믹(global memory atomic)의 구현 및/또는 이의 사용을 가능하게 한다. SoC 인터페이스(537)는 또한 그래픽 프로세서 코어(500)를 위한 전력 관리 제어를 구현하고 SoC 내의 그래픽 프로세서 코어(500)의 클록 도메인(clock domain) 및 다른 클록 도메인 간의 인터페이스를 가능하게할 수 있다. 하나의 실시예에서 SoC 인터페이스(537)는 그래픽 프로세서 내의 하나 이상의 그래픽 프로세서 코어 각각에 커맨드 및 명령어를 제공하도록 구성된 커맨드 스트리머 및 전역 쓰레드 디스패처로부터 커맨드 버퍼의 수취를 가능하게 한다. 커맨드 및 명령어는, 미디어 동작이 수행되어야 하는 경우에 미디어 파이프라인(539)에, 또는 그래픽 처리 동작이 수행되어야 하는 경우에 지오메트리 및 고정 함수 파이프라인(가령, 지오메트리 및 고정 함수 파이프라인(536), 지오메트리 및 고정 함수 파이프라인((514))에 디스패치될 수 있다.
그래픽 마이크로제어기(538)는 그래픽 프로세서 코어(500)를 위한 다양한 스케줄링 및 관리 태스크를 수행하도록 구성될 수 있다. 하나의 실시예에서 그래픽 마이크로제어기(538)는 서브 코어(501A-501F) 내의 실행 유닛(Execution Unit: EU) 어레이(502A-502F, 504A-504F) 내의 다양한 그래픽 병렬 엔진에 대해 그래픽 및/또는 컴퓨트 작업부하(workload) 스케줄링을 수행할 수 있다. 이 스케줄링 모델에서, 그래픽 프로세서 코어(500)를 포함하는 SoC의 CPU 코어 상에서 실행되는 호스트 소프트웨어(host software)는 작업부하를 여러 그래픽 프로세서 도어벨 중 하나에 제출하는데(submit), 이는 적절한 그래픽 엔진에 대한 스케줄링 동작을 호출한다. 스케줄링 동작은 어느 작업부하를 다음에 가동할지(run) 판정하는 것, 작업부하를 커맨드 스트리머에 제출하는 것, 엔진 상에서 가동되는 기존의 작업부하를 선취하는 것, 작업부하의 진행을 모니터링하는 것, 그리고 작업부하가 완료될 때 호스트 소프트웨어에 통지하는 것을 포함한다. 하나의 실시예에서 그래픽 마이크로제어기(538)는 또한, 시스템 상의 운영 체제(operating system) 및/또는 그래픽 드라이버 소프트웨어(graphics driver software)에 관계없이 저전력 상태 전이(transition)에 걸쳐서 그래픽 프로세서 코어(500) 내의 레지스터를 세이브하고 복원할 능력을 그래픽 프로세서 코어(500)에 제공하여, 그래픽 프로세서 코어(500)를 위한 저전력 또는 유휴(idle) 상태를 가능하게 할 수 있다.
그래픽 프로세서 코어(500)는 예시된 서브코어(501A-501F)보다 더 많거나 더 적은, 최대 N개의 모듈식 서브코어를 가질 수 있다. N개의 서브코어의 각 세트에 대해, 그래픽 프로세서 코어(500)는 또한 공유 함수 로직(510), 공유 및/또는 캐시 메모리(512), 지오메트리/고정 함수 파이프라인(514)을, 또 다양한 그래픽 및 컴퓨트 처리 동작을 가속하는 추가적인 고정 함수 로직(516)을 포함할 수 있다. 공유 함수 로직(510)은 그래픽 프로세서 코어(500) 내의 각각의 N개의 서브코어에 의해 공유될 수 있는(가령, 샘플러, 수학 및/또는 쓰레드간 통신 로직인) 도 4의 공유 함수 로직(420)과 연관된 로직 유닛을 포함할 수 있다. 공유 및/또는 캐시 메모리(512)는 그래픽 프로세서 코어(500) 내의 N개의 서브코어(501A-501F)의 세트를 위한 마지막 레벨 캐시일 수 있고, 또한 여러 서브코어에 의해 액세스가능한 공유 메모리로서의 역할을 할 수 있다. 지오메트리/고정 함수 파이프라인(514)은 고정 함수 블록(530) 내에 지오메트리/고정 함수 파이프라인(536) 대신에 포함될 수 있고 동일한 또는 유사한 로직 유닛을 포함할 수 있다.
하나의 실시예에서 그래픽 프로세서 코어(500)는 그래픽 프로세서 코어(500)에 의한 사용을 위한 다양한 고정 함수 가속 로직을 포함할 수 있는 추가적인 고정 함수 로직(516)을 포함한다. 하나의 실시예에서 추가적인 고정 함수 로직(516)은 포지션 전용 셰이딩(position only shading)에서의 사용을 위한 추가적인 지오메트리 파이프라인을 포함한다. 포지션 전용 셰이딩에서, 두 개의 지오메트리 파이프라인이 존재하는데, 지오메트리/고정 함수 파이프라인(516, 536) 내의 정식(full) 지오메트리 파이프라인, 그리고 추가적인 고정 함수 로직(516) 내에 포함될 수 있는 추가적인 지오메트리 파이프라인인 컬(cull) 파이프라인이다. 하나의 실시예에서 컬 파이프라인은 정식 지오메트리 파이프라인의 감축 버전(trimmed down version)이다. 정식 파이프라인 및 컬 파이프라인은 동일한 애플리케이션의 상이한 인스턴스를 실행할 수 있는데, 각각의 인스턴스는 별개의 콘텍스트(context)를 갖는다. 포지션 전용 셰이딩은 폐기된 삼각형의 긴 컬 구간(long cull run)을 은닉할 수 있어서, 셰이딩이 몇몇 인스턴스에서 더 일찍 완료될 수 있게 한다. 예를 들어 그리고 하나의 실시예에서 추가적인 고정 함수 로직(516) 내의 컬 파이프라인 로직은 주 애플리케이션과 병렬로 포지션 셰이더를 실행할 수 있으며 일반적으로, 프레임 버퍼로의 픽셀의 래스터화 및 렌더링을 수행하지 않고서, 컬 파이프라인이 정점의 포지션 속성만을 페치하고 셰이딩함에 따라, 정식 파이프라인보다 더 빨리 중요 결과를 생성한다. 컬 파이프라인은 생성된 중요 결과를 사용하여 모든 삼각형을 위한 가시성(visibility) 정보를 그 삼각형이 컬링되는지(culled)에 상관없이 계산할 수 있다. 정식 파이프라인(이는 이 인스턴스에서 재생 파이프라인(replay pipeline)으로 지칭될 수 있음)은 최종적으로 래스터화 국면(rasterization phase)으로 넘겨지는 가시적인 삼각형만을 셰이딩하기 위해 컬링된 삼각형을 건너뛰는(skip) 데에 가시성 정보를 쓸 수 있다.
하나의 실시예에서 추가적인 고정 함수 로직(516)은 또한 머신 러닝 훈련 또는 추론을 위한 최적화를 포함하는 구현을 위한, 고정 함수 행렬 곱셈 로직과 같은 머신 러닝 가속 로직을 포함할 수 있다.
각각의 그래픽 서브코어(501A-501F) 내에서는 그래픽 파이프라인, 미디어 파이프라인 또는 셰이더 프로그램에 의한 요청에 응답하여 그래픽, 미디어 및 컴퓨트 동작을 수행하는 데에 사용될 수 있는 실행 리소스의 세트를 포함한다. 그래픽 서브코어(501A-501F)는 여러 EU 어레이(502A-502F, 504A-504F), 쓰레드 디스패치 및 쓰레드간 통신(Thread Dispatch and Inter-thread Communication: TD/IC) 로직(503A-503F), 3D(가령, 텍스처) 샘플러(505A-505F), 미디어 샘플러(506A-506F), 셰이더 프로세서(507A-507F) 및 공유 로컬 메모리(Shared Local Memory: SLM)(508A-508F)를 포함한다. EU 어레이(502A-502F, 504A-504F)는 각각 여러 실행 유닛을 포함하는데, 이들은 그래픽, 미디어 또는 컴퓨트 셰이더 프로그램을 포함하는 그래픽, 미디어 또는 컴퓨트 동작을 위해서 부동 소수점 및 정수/고정 소수점 로직 동작을 수행하는 것이 가능한 범용 그래픽 처리 유닛이다. TD/IC 로직(503A-503F)은 서브코어 내의 실행 유닛을 위한 로컬 쓰레드 디스패치 및 쓰레드 제어 동작을 수행하고 서브코어의 실행 유닛 상에서 실행되는 쓰레드 간의 통신을 가능하게 한다. 3D 샘플러(505A-505F)는 텍스처 또는 다른 3D 그래픽 관련 데이터를 메모리 내로 읽어들일 수 있다. 3D 샘플러는 주어진 텍스처와 연관된 텍스처 포맷 및 구성된 샘플 상태에 기반하여 텍스처 데이터를 상이하게 판독할 수 있다. 미디어 샘플러(506A-506F)는 미디어 데이터와 연관된 타입 및 포맷에 기반하여 유사한 판독 동작을 수행할 수 있다. 하나의 실시예에서, 각각의 그래픽 서브코어(501A-501F)는 단일화된 3D 및 미디어 샘플러를 대안적으로 포함할 수 있다. 서브코어(501A-501F) 각각 내의 실행 유닛 상에서 실행되는 쓰레드는, 쓰레드 그룹 내에서 실행되는 쓰레드로 하여금 온칩 메모리의 공통 풀(common pool)을 사용하여 실행될 수 있게 하기 위해, 각각의 서브코어 내의 공유 로컬 메모리(508A-508F)를 사용할 수 있다.
실행 유닛
도 6a 내지 도 6b는 본 문서에 기술된 실시예에 따라 그래픽 프로세서 코어 내에서 이용되는 처리 요소의 어레이를 포함하는 쓰레드 실행 로직(600)을 예시한다. 본 문서에서 임의의 다른 도면의 요소와 동일한 참조 번호(또는 명칭)를 갖는 도 6a 내지 도 6b의 요소는 본 문서의 다른 부분에 기술된 것과 유사한 임의의 방식으로 동작하거나 기능할 수 있으나, 그러한 것에 한정되지 않는다. 도 6a는 도 5의 각각의 서브코어(501A-501F)로써 예시된 하드웨어 로직의 변형을 포함할 수 있는 쓰레드 실행 로직(600)의 개관을 보여준다. 도 6b는 실행 유닛의 예시적인 내부 세부사항을 보여준다.
도 6a에 예시된 바와 같이, 몇몇 실시예에서 쓰레드 실행 로직(600)은 셰이더 프로세서(shader processor)(602), 쓰레드 디스패처(thread dispatcher)(604), 명령어 캐시(606), 복수의 실행 유닛(608A-608N)을 포함하는 스케일가능 실행 유닛 어레이, 샘플러(610), 데이터 캐시(612) 및 데이터 포트(614)를 포함한다. 하나의 실시예에서 스케일가능 실행 유닛 어레이는 작업부하(workload)의 계산상 요구에 기반하여 하나 이상의 실행 유닛(가령, 실행 유닛(608A, 608B, 608C, 608D, 내지 608N-1 및 608N) 중 임의의 것)을 인에이블하거나 디스에이블함으로써 동적으로 스케일링할 수 있다. 하나의 실시예에서, 포함된 컴포넌트는 컴포넌트 각각에 링크되는 상호연결 패브릭(interconnect fabric)을 통해 상호연결된다. 몇몇 실시예에서, 쓰레드 실행 로직(600)은 명령어 캐시(606), 데이터 포트(614), 샘플러(610) 및 실행 유닛(608A-608N) 중 하나 이상을 통한, 시스템 메모리 또는 캐시 메모리와 같은 메모리로의 하나 이상의 연결(connection)을 포함한다. 몇몇 실시예에서, 각각의 실행 유닛(가령 680A)은 각각의 쓰레드에 대해 병렬로 여러 데이터 요소를 처리하면서 여러 동시적 하드웨어 쓰레드를 실행하는 것이 가능한 독립형 프로그램가능 범용 계산 유닛이다. 다양한 실시예에서, 실행 유닛(608A-608N)의 어레이는 임의 개수 개별 실행 유닛을 포함하도록 스케일가능하다.
몇몇 실시예에서, 실행 유닛(608A-608N)은 셰이더 프로그램을 실행하는 데에 주로 사용된다. 셰이더 프로세서(602)는 다양한 셰이더 프로그램을 처리하고 쓰레드 디스패처(604)를 통해 셰이더 프로그램과 연관된 실행 쓰레드를 디스패치한다. 하나의 실시예에서 쓰레드 디스패처는 그래픽 및 미디어 파이프라인으로부터의 쓰레드 개시 요청을 중재하고 요청된 쓰레드를 실행 유닛(608A-608N) 내의 하나 이상의 실행 유닛 상에서 인스턴스화하는 로직을 포함한다. 예를 들어, 지오메트리 파이프라인이 정점, 테셀레이션(tessellation), 또는 지오메트리 셰이더를 처리를 위해 쓰레드 실행 로직에 디스패치할 수 있다. 몇몇 실시예에서, 쓰레드 디스패처(604)는 실행 중인 셰이더 프로그램으로부터의 런타임(runtime) 쓰레드 스포닝 요청을 또한 처리할 수 있다.
몇몇 실시예에서, 실행 유닛(608A-608N)은 많은 3D 그래픽 셰이더 표준으로부터 그래픽 셰이더 명령어에 대한 네이티브 지원(native support)를 포함하는 명령어 세트를 지원하는바, 그래픽 라이브러리(가령, Direct 3D 및 OpenGL)로부터의 셰이더 프로그램이 최소의 전환(translation)으로써 실행된다. 실행 유닛은 정점 및 지오메트리 처리(가령, 정점 프로그램, 지오메트리 프로그램, 정점 셰이더), 픽셀 처리(가령, 픽셀 셰이더, 프래그먼트 셰이더) 및 범용 처리(가령, 컴퓨트 및 미디어 셰이더)를 지원한다. 실행 유닛(608A-608N) 각각은 다중 발행(multi-issue) 단일 명령어 다중 데이터(Single Instruction Multiple Data: SIMD) 실행이 가능하고 다중쓰레드형 동작은 더 높은 레이턴시의 메모리 액세스(higher latency memory access)에 직면해서도 효율적인 실행 환경을 가능하게 한다. 각각의 실행 유닛 내의 각각의 하드웨어 쓰레드는 전용 고대역폭(high-bandwidth) 레지스터 파일 및 연관된 독립적인 쓰레드 상태(thread-state)를 갖는다. 실행은 정수, 단정도(single precision) 및 배정도(double precision) 부동 소수점 동작, SIMD 분기(branch) 능력, 논리적(logical) 동작, 초월(transcendental) 동작, 그리고 다른 갖가지 동작이 가능한 파이프라인에 대해 클록(clock)당 다중 발행이다. 공유 함수 중 하나 또는 메모리로부터의 데이터를 기다리는 동안, 실행 유닛(608A-608N) 내의 종속성 로직(dependency logic)은 대기 중인 쓰레드로 하여금 요청된 데이터가 리턴될 때까지 슬립하게(sleep) 한다. 대기 중인 쓰레드가 슬립하고 있는 동안, 하드웨어 리소스는 다른 쓰레드를 처리하는 데에 전념할 수 있다. 예를 들어, 정점 셰이더 동작과 연관된 지연(delay) 동안에, 실행 유닛이 픽셀 셰이더, 프래그먼트 셰이더, 또는 상이한 정점 셰이더를 포함하는 다른 타입의 셰이더 프로그램을 위한 동작을 수행할 수 있다.
실행 유닛(608A-608N) 내의 각 실행 유닛은 데이터 요소의 어레이에 대해 동작한다. 데이터 요소의 수는 "실행 크기"(execution size), 또는 명령어를 위한 채널의 수이다. 실행 채널은 명령어 내에서의 흐름 제어(flow control)와, 마스킹(masking)과, 데이터 요소 액세스(data element access)를 위한 실행의 논리적 단위이다. 채널의 수는 특정한 그래픽 프로세서에 대해 물리적인 산술 로직 유닛(Arithmetic Logic Unit: ALU) 또는 부동 소수점 유닛(Floating Point Unit: FPU)의 수와는 독립적일 수 있다. 몇몇 실시예에서, 실행 유닛(608A-608N)은 정수 및 부동 소수점 데이터 타입을 지원한다.
실행 유닛 명령어 세트는 SIMD 명령어를 포함한다. 다양한 데이터 요소는 패킹된 데이터(packed data) 타입으로서 레지스터 내에 저장될 수 있고 실행 유닛은 다양한 요소를 요소의 데이터 크기에 기반하여 처리할 것이다. 예를 들어, 256 비트 폭 벡터에 대해 동작하는 경우에, 벡터의 256 비트는 레지스터 내에 저장되고, 실행 유닛은 4개의 개별 64 비트 패킹된 데이터 요소(쿼드 워드(Quad-Word: QW) 크기 데이터 요소), 8개의 개별 32 비트 패킹된 데이터 요소(더블 워드(Double Word: DW) 크기 데이터 요소), 16개의 개별 16 비트 패킹된 데이터 요소(워드(Word: W) 크기 데이터 요소) 또는 32개의 개별 8 비트 데이터 요소(바이트(Byte: B) 크기 데이터 요소)로서의 벡터에 대해 동작한다. 그러나, 상이한 벡터 폭 및 레지스터 크기가 가능하다.
하나의 실시예에서 하나 이상의 실행 유닛이 융합형 실행 유닛(fused execution unit)(609A-609N)(융합형 EU에 공통적인 쓰레드 제어 로직(607A-607N)을 가짐)으로 조합될 수 있다. 여러 EU가 EU 그룹으로 융합될 수 있다. 융합된 EU 그룹 내의 각각의 EU는 개별 SIMD 하드웨어 쓰레드를 실행하도록 구성될 수 있다. 융합된 EU 그룹 내의 EU의 개수는 실시예에 따라 달라질 수 있다. 추가적으로, 다양한 SIMD 폭이 EU당 수행될 수 있는데, SIMD8, SIMD16 및 SIMD32를 포함하나 이에 한정되지 않는다. 각각의 융합형 그래픽 실행 유닛(609A-609N)은 적어도 두 개의 실행 유닛을 포함한다. 예를 들어, 융합형 실행 유닛(609A)은 제1 EU(608A), 제2 EU(608B) 및 쓰레드 제어 로직(609A)(이는 제1 EU(608A) 및 제2 EU(608B)에 공통적임)을 포함한다. 쓰레드 제어 로직(608A)은 융합형 그래픽 실행 유닛(609A) 상에서 실행되는 쓰레드를 제어하는바, 융합형 실행 유닛(609A-609N) 내의 각각의 EU로 하여금 공통 명령어 포인터 레지스터를 사용하여 실행될 수 있도록 한다.
실행 유닛을 위한 쓰레드 명령어를 캐싱하기 위해 하나 이상의 내부 명령어 캐시(가령, 606)가 쓰레드 실행 로직(600)에 포함된다. 몇몇 실시예에서, 쓰레드 실행 동안에 쓰레드 데이터를 캐싱하기 위해 하나 이상의 데이터 캐시(가령, 612)가 포함된다. 몇몇 실시예에서, 3D 동작을 위한 텍스처 샘플링 및 미디어 동작을 위한 미디어 샘플링을 제공하기 위해 샘플러(610)가 포함된다. 몇몇 실시예에서, 샘플러(610)는 샘플링된 데이터를 실행 유닛에 제공하기 전에 샘플링 프로세스 동안 텍스처 또는 미디어 데이터를 처리하는 전문화된 텍스처 또는 미디어 샘플링 기능을 포함한다.
실행 동안에, 그래픽 및 미디어 파이프라인은 쓰레드 스포닝 및 디스패치 로직을 통해 쓰레드 실행 로직(600)에 쓰레드 개시 요청을 발신한다. 일단 기하학적 객체(geometric object)의 그룹이 픽셀 데이터로 처리 및 래스터화되었다면, 셰이더 프로세서(602) 내의 픽셀 프로세서 로직(가령, 픽셀 셰이더 로직, 프래그먼트 셰이더 로직 등)이 호출되어 추가로 출력 정보를 계산하고 결과가 출력 표면(가령, 컬러 버퍼(color buffer), 깊이 버퍼(depth buffer), 스텐실 버퍼(stencil buffer) 등)에 기록되게 한다. 몇몇 실시예에서, 픽셀 셰이더 또는 프래그먼트 셰이더는 래스터화된 객체에 걸쳐 보간될(interpolated) 다양한 정점 속성의 값을 산정한다. 몇몇 실시예에서, 이후에 셰이더 프로세서(602) 내의 픽셀 프로세서 로직은 애플리케이션 프로그래밍 인터페이스 공급된(application programming interface(API)-supplied) 픽셀 또는 프래그먼트 셰이더 프로그램을 실행한다. 셰이더 프로그램을 실행하기 위해, 셰이더 프로세서(602)는 쓰레드 디스패처(604)를 통해 실행 유닛(가령, 608A)에 쓰레드를 디스패치한다. 몇몇 실시예에서, 픽셀 프로세서(602)는 메모리 내에 저장된 텍스처 맵 내의 텍스처 데이터를 액세스하는 데에 샘플러(610) 내의 텍스처 샘플링 로직을 사용한다. 텍스처 데이터 및 입력 지오메트리 데이터에 대한 산술 동작은 각각의 기하학적 프래그먼트(geometric fragment)에 대해 픽셀 컬러 데이터를 계산하거나, 추가의 처리로부터 하나 이상의 픽셀을 폐기한다.
몇몇 실시예에서, 데이터 포트(614)는 쓰레드 실행 로직(600)이 처리된 데이터를 그래픽 프로세서 출력 파이프라인 상에서의 추가의 처리를 위해 메모리에 출력하는 메모리 액세스 메커니즘을 제공한다. 몇몇 실시예에서, 데이터 포트(614)는 데이터 포트를 통해 메모리 액세스를 위해 데이터를 캐싱하는 하나 이상의 캐시 메모리(가령, 데이터 캐시(612))를 포함하거나 이에 커플링된다.
도 6b에 예시된 바와 같이, 그래픽 실행 유닛(608)은 명령어 페치 유닛(instruction fetch unit)(637), 일반 레지스터 파일 어레이(General Register File array: GRF)(624), 아키텍처 레지스터 파일 어레이(Architectural Register File array: ARF)(626), 쓰레드 아비터(thread arbiter)(622), 발신 유닛(send unit)(630), 분기 유닛(branch unit)(632), SIMD 부동 소수점 유닛(Floating Point Unit: FPU)(634)의 세트(634), 그리고 하나의 실시예에서 전용 정수 SIMD ALU의 세트(635)를 포함할 수 있다. GRF(624) 및 ARF(626)는 그래픽 실행 유닛(608) 내에서 활성(active)일 수 있는 각각의 동시적 하드웨어 쓰레드와 연관된 일반 레지스터 파일 및 아키텍처 레지스터 파일의 세트를 포함한다. 하나의 실시예에서, 쓰레드당 아키텍처 상태는 ARF(626) 내에 유지되는 반면, 쓰레드 실행 동안에 사용되는 데이터는 GRF(624) 내에 저장된다. 각각의 쓰레드를 위한 명령어 포인터를 포함하여, 각각의 쓰레드의 실행 상태는, ARF(626) 내의 쓰레드 특정 레지스터 내에 보유될 수 있다.
하나의 실시예에서 그래픽 실행 유닛(608)은 동시적 다중 쓰레딩(Simultaneous Multi-Threading: SMT) 및 세밀형(fine-grained)의 인터리빙된 다중 쓰레딩(Interleaved Multi-Threading: IMT)의 조합인 아키텍처를 갖는다. 그 아키텍처는 동시적 쓰레드의 목표 개수 및 실행 유닛당 레지스터의 개수에 기반하여 설계 시에 미세 조정될(fine tuned) 수 있는 모듈식 구성을 갖는데, 실행 유닛 리소스는 여러 동시적 쓰레드를 실행하는 데에 사용되는 로직에 걸쳐서 나뉜다.
하나의 실시예에서, 그래픽 실행 유닛(608)은 여러 명령어를 공동 발행할(co-issue) 수 있는데, 이는 각각 상이한 명령어일 수 있다. 그래픽 실행 유닛 쓰레드(608)의 쓰레드 아비터(622)는 명령어를 발신 유닛(630), 분기 유닛(632) 또는 SIMD PFU(들)(634) 중 하나에 실행을 위해 디스패치할 수 있다. 각각의 실행 쓰레드는 GRF(624) 내의 128개 범용 레지스터를 액세스할 수 있는데, 각각의 레지스터는 32비트 데이터 요소의 SIMD 8 요소 벡터로서 액세스가능한 32 바이트를 저장할 수 있다. 하나의 실시예에서, 각각의 실행 유닛 쓰레드는 GRF(624) 내의 4킬로바이트(Kbytes)에의 액세스를 갖는데, 다만 실시예는 그렇게 한정되지 않으며, 다른 실시예에서 더 많거나 더 적은 레지스터 리소스가 제공될 수 있다. 하나의 실시예에서 최대 7개의 쓰레드가 동시에 실행될 수 있는데, 다만 실행 유닛당 쓰레드의 개수는 또한 실시예에 따라 달라질 수 있다. 7개의 쓰레드가 4킬로바이트를 액세스할 수 있는 실시예에서, GRF(624)는 총 28킬로바이트를 저장할 수 있다. 유연한(flexible) 어드레스지정 모드는 레지스터가 함께 어드레스지정되어 효과적으로 더 폭넓은 레지스터를 구축하거나 스트라이드형(strided) 직사각형 블록 데이터 구조를 나타내도록 허가할 수 있다.
하나의 실시예에서, 메모리 동작, 샘플러 동작 및 다른 더 긴 레이턴시의 시스템 통신은 메시지 전달 발신 유닛(630)에 의해 실행되는 "발신" 명령어를 통해 디스패치된다. 하나의 실시예에서, 분기 명령어는 SIMD 분지(divergence) 및 궁극적인 수렴(convergence)을 가능하게 하기 위해 전용 분기 유닛(632)에 디스패치된다.
하나의 실시예에서 그래픽 실행 유닛(608)은 부동 소수점 동작을 수행하는 하나 이상의 SIMD 부동 소수점 유닛(Floating Point Unit: PFU)(들)(634)을 포함한다. 하나의 실시예에서, FPU(들)(634)는 또한 정수 계산을 지원한다. 하나의 실시예에서 FPU(들)(634)는 최대 M개의 32 비트 부동 소수점(또는 정수) 동작을 SIMD 실행하거나, 최대 2M개의 16 비트 정수 또는 16 비트 부동 소수점 동작을 SIMD 실행할 수 있다. 하나의 실시예에서, FPU(들) 중 적어도 하나는 고처리량(high-throughput) 초월 수학 함수 및 배정도 64 비트 부동 소수점을 지원하는 확장된 수학 능력을 제공한다. 몇몇 실시예에서, 8비트 정수 SIMD ALU(635)의 세트가 또한 존재하며, 머신 러닝 계산과 연관된 동작을 수행하도록 구체적으로 최적화될 수 있다.
하나의 실시예에서, 그래픽 실행 유닛(608)의 여러 인스턴스의 어레이는 그래픽 서브코어 그룹화(graphics sub-core grouping)(가령, 서브슬라이스(sub-slice)) 내에 인스턴스화될 수 있다. 스케일가능성을 위해, 제품 기획자는 서브코어 그룹화당 실행 유닛의 정확한 개수를 고를 수 있다. 하나의 실시예에서 실행 유닛(608)은 복수의 실행 채널에 걸쳐서 명령어를 실행할 수 있다. 추가의 실시예에서, 그래픽 실행 유닛(608) 상에서 실행되는 각각의 쓰레드는 상이한 채널 상에서 실행된다.
도 7은 몇몇 실시예에 따른 그래픽 프로세서 명령어 포맷(700)을 보여주는 블록도이다. 하나 이상의 실시예에서, 그래픽 프로세서 실행 유닛은 여러 포맷으로된 명령어를 갖는 명령어 세트를 지원한다. 실선 박스는 일반적으로 실행 유닛 명령어에 포함된 컴포넌트를 보여주는 반면에, 점선은 선택적인 또는 명령어의 서브세트에 포함될 뿐인 컴포넌트를 포함한다. 몇몇 실시예에서, 기술되고 예시된 명령어 포맷(700)은, 일단 명령어가 처리되면 명령어 디코드로부터 초래되는 마이크로 동작에 반해, 실행 유닛에 공급되는 명령어라는 점에서, 이는 매크로 명령어이다.
몇몇 실시예에서, 그래픽 프로세서 실행 유닛은 128 비트 명령어 포맷(710)으로된 명령어를 네이티브 지원한다. 선택된 명령어, 명령어 옵션, 그리고 피연산자의 수에 기반하여 몇몇 명령어를 위해 64 비트 압축형(compacted) 명령어 포맷(740)이 이용가능하다. 네이티브 128 비트 명령어 포맷(710)은 모든 명령어 옵션에 대한 액세스를 제공하는 반면에, 몇몇 옵션 및 동작은 64 비트 포맷(730)에 제한된다. 64 비트 포맷(730)에서 이용가능한 네이티브 명령어는 실시예에 의해 달라진다. 몇몇 실시예에서, 명령어는 인덱스 필드(713) 내의 인덱스 값의 세트를 사용하여 부분적으로 압축된다. 실행 유닛 하드웨어는 인덱스 값에 기반하여 압축 테이블의 세트를 참조하고 압축 테이블 출력을 사용하여 128 비트 명령어 포맷(710)으로된 네이티브 명령어를 재구성한다.
각각의 포맷에 대해, 명령어 옵코드(instruction opcode)(712)는 실행 유닛이 수행할 동작을 정의한다. 실행 유닛은 각각의 피연산자의 여러 데이터 요소에 걸쳐 병렬로 각각의 명령어를 실행한다. 예를 들어, 가산(add) 명령어에 응답하여 실행 유닛은 텍스처 요소(texture element) 또는 화상 요소(picture element)를 나타내는 각각의 컬러 채널에 걸쳐 동시적인 가산 동작을 수행한다. 디폴트로, 실행 유닛은 피연산자의 모든 데이터 채널에 걸쳐 각각의 명령어를 수행한다. 몇몇 실시예에서, 명령어 제어 필드(714)는 채널 선택(가령, 프레디케이션(predication)) 및 데이터 채널 순서(가령, 스위즐(swizzle))와 같은 어떤 실행 옵션에 대한 제어를 가능하게 한다. 128 비트 명령어 포맷(710) 내의 명령어에 대해 실행 크기 필드(716)는 병렬로 실행될 데이터 채널의 수를 제한한다. 몇몇 실시예에서, 실행 크기 필드(716)는 64 비트 압축 명령어 포맷(730)에서의 사용을 위해서는 가용하지 않다.
몇몇 실행 유닛 명령어는 2개의 소스 피연산자(src0(720), src1(722))와, 하나의 목적지(destination)(718)를 포함하는 최대 3개의 피연산자를 갖는다. 몇몇 실시예에서, 실행 유닛은 이중 목적지 명령어를 지원하는데, 목적지 중 하나는 암시된다. 데이터 조작 명령어가 제3 소스 피연산자(가령, SRC2(724))를 가질 수 있는데, 명령어 옵코드(712)는 소스 피연산자의 수를 결정한다. 명령어의 마지막 소스 피연산자는 명령어와 함께 전달되는 즉시적인(immediate)(가령, 하드코딩된(hard-coded)) 값일 수 있다.
몇몇 실시예에서, 128 비트 명령어 포맷(710)은, 예컨대, 직접 레지스터 어드레스지정 모드가 또는 간접 레지스터 어드레스지정 모드가 사용되는지를 지정하는 액세스/어드레스 모드 필드(726)를 포함한다. 직접 레지스터 어드레스지정 모드가 사용되는 경우에, 하나 이상의 피연산자의 레지스터 어드레스는 명령어 내의 비트에 의해 직접 제공된다.
몇몇 실시예에서, 128 비트 명령어 포맷(710)은 명령어를 위한 어드레스 모드 및/또는 액세스 모드를 지정하는 액세스/어드레스 모드 필드(726)를 포함한다. 하나의 실시예에서 액세스 모드는 명령어를 위한 데이터 액세스 정렬(alignment)을 정의하는 데에 사용된다. 몇몇 실시예는 16 바이트 정렬된 액세스 모드 및 1 바이트 정렬된 액세스 모드를 포함하는 액세스 모드를 지원하는데, 액세스 모드의 바이트 정렬은 명령어 피연산자의 액세스 정렬을 결정한다. 예를 들어, 제1 모드에 있는 경우에, 명령어는 소스 및 목적지 피연산자를 위해 바이트 정렬된 어드레스지정을 사용할 수 있고 제2 모드에 있는 경우에, 명령어는 모든 소스 및 목적지 피연산자를 위해 16 바이트 정렬된 어드레스지정을 사용할 수 있다.
하나의 실시예에서, 액세스/어드레스 모드 필드(726)의 어드레스 모드 부분은 명령어가 직접 또는 간접 어드레스지정을 사용할 것인지를 정한다. 직접 레지스터 어드레스지정 모드가 사용되는 경우에 명령어 내의 비트가 하나 이상의 피연산자의 레지스터 어드레스를 직접적으로 제공한다. 간접 레지스터 어드레스지정 모드가 사용되는 경우에, 하나 이상의 피연산자의 레지스터 어드레스는 명령어 내의 어드레스 레지스터 값 및 어드레스 즉시 필드(address immediate field)에 기반하여 계산될 수 있다.
몇몇 실시예에서 옵코드 디코드(740)를 단순화하기 위해 옵코드(712) 비트 필드에 기반하여 명령어가 그룹화된다. 8비트 옵코드에 대해, 비트 4, 5 및 6은 실행 유닛이 옵코드의 타입을 판정할 수 있게 한다. 도시된 그대로의 옵코드 그룹화는 단지 예이다. 몇몇 실시예에서, 이동 및 로직 옵코드 그룹(move and logic opcode group)(742)은 데이터 이동 및 로직 명령어(가령, move(mov), compare(cmp))를 포함한다. 몇몇 실시예에서, 이동 및 로직 그룹(742)은 5개의 최상위 비트(Most Significant Bits: MSB)를 공유하는데, move(mov) 명령어는 0000xxxxb의 형태로 되어 있고 로직 명령어는 0001xxxxb의 형태로 되어 있다. 흐름 제어 명령어 그룹(744)(가령, call, jump(jmp))은 0010xxxxb(가령, 0x20)의 형태로된 명령어를 포함한다. 기타 명령어 그룹(746)은 0011xxxxb(가령, 0x30)의 형태로된 동기화 명령어(가령, wait, send)를 포함하는 명령어의 혼합을 포함한다. 병렬 수학 명령어 그룹(748)은 0100xxxxb(가령, 0x40)의 형태로된 컴포넌트별 산술 명령어(가령, add, multiply(mul))를 포함한다. 병렬 수학 그룹(748)은 데이터 채널에 걸쳐 병렬로 산술 동작을 수행한다. 벡터 수학 그룹(750)은 0101xxxxb(가령, 0x50)의 형태로된 산술 명령어(가령, dp4)를 포함한다. 벡터 수학 그룹은 벡터 피연산자에 대해 도트 곱(dot product) 산출과 같은 산술을 수행한다.
그래픽 파이프라인
도 8은 그래픽 프로세서(800)의 다른 실시예의 블록도이다. 본 문서에서 임의의 다른 도면의 요소와 동일한 참조 번호(또는 명칭)를 갖는 도 8의 요소는 본 문서의 다른 부분에 기술된 것과 유사한 임의의 방식으로 동작하거나 기능할 수 있으나, 그러한 것에 한정되지 않는다.
몇몇 실시예에서, 그래픽 프로세서(800)는 지오메트리 파이프라인(820), 미디어 파이프라인(830), 디스플레이 엔진(840), 쓰레드 실행 로직(850) 및 렌더 출력 파이프라인(870)을 포함한다. 몇몇 실시예에서, 그래픽 프로세서(800)는 하나 이상의 범용 처리 코어를 포함하는 멀티코어 처리 시스템 내의 그래픽 프로세서이다. 그래픽 프로세서는 하나 이상의 제어 레지스터(도시되지 않음)로의 레지스터 쓰기에 의해 제어되거나 링 상호연결부(802)를 통해 그래픽 프로세서(800)에 발행된 커맨드를 통해 제어된다. 몇몇 실시예에서, 링 상호연결부(802)는 그래픽 프로세서(800)를 다른 그래픽 프로세서 또는 범용 프로세서와 같은 다른 처리 컴포넌트에 커플링한다. 링 상호연결부(802)로부터의 커맨드는 커맨드 스트리머(803)에 의해 해석되는데, 이는 지오메트리 파이프라인(820) 또는 미디어 파이프라인(830)의 개별 컴포넌트에 명령어를 공급한다.
몇몇 실시예에서, 커맨드 스트리머(803)는, 메모리로부터 정점 데이터를 판독하고 커맨드 스트리머(803)에 의해 제공된 정점 처리 커맨드를 실행하는 정점 페처(vertex fetcher)(805)의 동작을 지시한다. 몇몇 실시예에서, 정점 페처(805)는 정점 데이터를 정점 셰이더(807)에 제공하는데, 이는 좌표 공간 변환 및 조명 동작을 각각의 정점에 대해 수행한다. 몇몇 실시예에서, 정점 페처(805) 및 정점 셰이더(807)는 쓰레드 디스패처(831)를 통해 실행 유닛(852A-852B)에 실행 쓰레드를 디스패치함으로써 정점 처리 명령어를 실행한다.
몇몇 실시예에서, 실행 유닛(852A-852B)은 그래픽 및 미디어 동작을 수행하기 위한 명령어 세트를 갖는 벡터 프로세서의 어레이이다. 몇몇 실시예에서, 실행 유닛(852A-852B)은 각 어레이에 특유하거나 어레이 간에 공유되는 부속된(attached) L1 캐시(851)를 갖는다. 캐시는 데이터 캐시, 명령어 캐시, 또는 데이터 및 명령어를 상이한 파티션에 포함하도록 파티셔닝된 단일 캐시로서 구성될 수 있다.
몇몇 실시예에서, 지오메트리 파이프라인(820)은 3D 객체의 하드웨어 가속화된 테셀레이션을 수행하는 테셀레이션 컴포넌트를 포함한다. 몇몇 실시예에서, 프로그램가능 헐 셰이더(programmable hull shader)(811)가 테셀레이션 동작을 구성한다. 프로그램가능 도메인 셰이더(programmable domain shader)(817)는 테셀레이션 출력의 백 엔드 평가(back-end evaluation)를 제공한다. 테셀레이터(tessellator)(813)는 헐 셰이더(811)의 지시로 동작하며 지오메트리 파이프라인(820)에 입력으로서 제공되는 조립질 기하학적 모델(coarse geometric model)에 기반하여 상세한 기하학적 객체의 세트를 생성하는 전용(special purpose) 로직을 포함한다. 몇몇 실시예에서, 테셀레이션이 사용되지 않는 경우, 테셀레이션 컴포넌트(가령, 헐 셰이더(811), 테셀레이터(813) 및 도메인 셰이더(817))는 바이패스될(bypassed) 수 있다.
몇몇 실시예에서, 완전한 기하학적 객체는 실행 유닛(852A-852B)에 디스패치된 하나 이상의 쓰레드를 통해 지오메트리 셰이더(819)에 의해 처리될 수 있거나, 직접적으로 클리퍼(clipper)(829)로 진행할 수 있다. 몇몇 실시예에서, 지오메트리 셰이더는, 그래픽 파이프라인의 이전의 스테이지에서와 같이 정점 또는 정점의 패치(patch)보다는, 전체 기하학적 객체에 대해 동작한다. 테셀레이션이 디스에이블되는 경우에 지오메트리 셰이더(819)는 정점 셰이더(807)로부터 입력을 수신한다. 몇몇 실시예에서, 지오메트리 셰이더(819)는 테셀레이션 유닛이 디스에이블되는 경우 지오메트리 테셀레이션을 수행하도록 지오메트리 셰이더 프로그램에 의해 프로그램가능하다.
래스터화 전에, 클리퍼(829)가 정점 데이터를 처리할 수 있다. 클리퍼(829)는 고정 함수 클리퍼이거나 클리핑 및 지오메트리 셰이더 기능을 갖는 프로그램가능 클리퍼일 수 있다. 몇몇 실시예에서, 렌더 출력 파이프라인(870) 내의 레스터화기 및 깊이 테스트 컴포넌트(873)는 기하학적 객체를 픽셀당 표현으로 변환하기 위해 픽셀 셰이더를 디스패치한다. 몇몇 실시예에서, 픽셀 셰이더 로직은 쓰레드 실행 로직(850)에 포함된다. 몇몇 실시예에서, 애플리케이션은 래스터화기 및 깊이 테스트 컴포넌트(873)를 바이패스하고 래스터화되지 않은 정점 데이터를 스트림 아웃 유닛(stream out unit)(823)을 통해 액세스할 수 있다.
그래픽 프로세서(800)는 상호연결 버스나 상호연결 패브릭, 또는 프로세서의 주요 컴포넌트 사이를 통과하는 데이터 및 메시지를 가능케 하는 기타 다른 상호연결 메커니즘을 갖는다. 몇몇 실시예에서, 실행 유닛(852A-852B) 및 연관된 로직 유닛(가령, L1 캐시(851), 샘플러(854), 텍스처 캐시(858) 등)은 데이터 포트(856)를 통해 상호연결되어 메모리 액세스를 수행하고 프로세서의 렌더 출력 파이프라인 컴포넌트와 통신한다. 몇몇 실시예에서, 샘플러(854), 캐시(851, 858) 및 실행 유닛(852A-852B)은 각각 별개의 메모리 액세스 경로를 갖는다. 하나의 실시예에서 텍스처 캐시(858)는 또한 샘플러 캐시로서 구성될 수 있다.
몇몇 실시예에서, 렌더 출력 파이프라인(870)은 정점 기반 객체를 연관된 픽셀 기반 표현으로 변환하는 레스터화기 및 깊이 테스트 컴포넌트(873)를 포함한다. 몇몇 실시예에서, 래스터화기 로직은 고정 함수 삼각형 및 라인 래스터화를 수행하는 윈도우어(windower)/마스커(masker) 유닛을 포함한다. 연관된 렌더 캐시(878) 및 깊이 캐시(879)가 몇몇 실시예에서 또한 이용가능하다. 픽셀 동작 컴포넌트(877)가 데이터에 대해 픽셀 기반 동작을 수행하는데, 몇몇 사례에서이기는 하지만, 2D 동작(가령 블렌딩(blending)으로써의 비트 블록 이미지 전송)과 연관된 픽셀 동작은 2D 엔진(841)에 의해 수행되거나, 오버레이 디스플레이 평면을 사용하여 디스플레이 제어기(843)에 의해 디스플레이 시간에 대체된다. 몇몇 실시예에서, 공유된 L3 캐시(875)는 모든 그래픽 컴포넌트가 이용할 수 있으니, 메인 시스템 메모리의 사용 없이 데이터의 공유를 가능하게 한다.
몇몇 실시예에서, 그래픽 프로세서 미디어 파이프라인(830)은 미디어 엔진(837) 및 비디오 프론트 엔드(834)를 포함한다. 몇몇 실시예에서, 비디오 프론트 엔드(834)는 커맨드 스트리머(803)로부터 파이프라인 커맨드를 수신한다. 몇몇 실시예에서, 미디어 파이프라인(830)은 별개의 커맨드 스트리머를 포함한다. 몇몇 실시예에서, 비디오 프론트 엔드(834)는 미디어 커맨드를, 미디어 엔진(837)에 커맨드를 발신하기 전에 처리한다. 몇몇 실시예에서, 미디어 엔진(837)은 쓰레드 디스패처(831)를 통한 쓰레드 실행 로직(850)으로의 디스패치를 위해 쓰레드를 스폰하는 쓰레드 스포닝 기능을 포함한다.
몇몇 실시예에서, 그래픽 프로세서(800)는 디스플레이 엔진(840)을 포함한다. 몇몇 실시예에서, 디스플레이 엔진(840)은 프로세서(800)의 외부에 있으며 링 상호연결부(802) 또는 어떤 다른 상호연결 버스나 패브릭을 통해 그래픽 프로세서와 커플링된다. 몇몇 실시예에서, 디스플레이 엔진(840)은 2D 엔진(841) 및 디스플레이 제어기(843)를 포함한다. 몇몇 실시예에서, 디스플레이 엔진(840)은 3D 파이프라인과는 독립적으로 동작할 수 있는 전용 로직을 포함한다. 몇몇 실시예에서, 디스플레이 제어기(843)는, 랩톱 컴퓨터(laptop computer)에서와 같이 시스템 집적 디스플레이 디바이스이거나 디스플레이 디바이스 커넥터를 통해 부속된 외부 디스플레이 디바이스일 수 있는 디스플레이 디바이스(도시되지 않음)와 커플링된다.
몇몇 실시예에서, 지오메트리 파이프라인(820) 및 미디어 파이프라인(830)은 여러 그래픽 및 미디어 프로그래밍 인터페이스에 기반하여 동작을 수행하도록 구성가능하며 임의의 하나의 애플리케이션 프로그래밍 인터페이스(Application Programming Interface: API)에 특정적이지는 않다. 몇몇 실시예에서, 그래픽 프로세서를 위한 드라이버 소프트웨어는 특정한 그래픽 또는 미디어 라이브러리에 특정적인 API 호출을 그래픽 프로세서에 의해 처리될 수 있는 커맨드로 전환한다. 몇몇 실시예에서, Open Graphics Library(OpenGL), Open Computing Language(OpenCL) 및/또는 Vulkan graphics and compute API에 대해 지원이 제공되는데, 모두 크로노스 그룹(Khronos Group)으로부터 것이다. 몇몇 실시예에서, 마이크로소프트 사(Microsoft Corporation)로부터의 Direct3D 라이브러리에 대한 지원이 또한 제공될 수 있다. 몇몇 실시예에서, 이들 라이브러리의 조합이 지원될 수 있다. Open Source Computer Vision Library(OpenCV)에 대한 지원이 또한 제공될 수 있다. 호환가능한 3D 파이프라인을 가진 장래의 API 역시 만일 장래의 API의 파이프라인으로부터 그래픽 프로세서의 파이프라인으로의 맵핑이 행해질 수 있으면 지원될 것이다.
그래픽 파이프라인 프로그래밍
도 9a는 몇몇 실시예에 따른 그래픽 프로세서 커맨드 포맷(900)을 보여주는 블록도이다. 도 9b는 실시예에 따른 그래픽 프로세서 커맨드 시퀀스(910)를 보여주는 블록도이다. 도 9a에서의 실선 박스는 일반적으로 그래픽 커맨드에 포함된 컴포넌트를 보여주는 반면에 점선은 선택적인 또는 그래픽 커맨드의 서브세트에 포함될 뿐인 컴포넌트를 포함한다. 도 9a의 예시적인 그래픽 프로세서 커맨드 포맷(900)은 클라이언트(client)(902), 커맨드 동작 코드(옵코드(opcode))(904) 및 커맨드를 위한 관련 데이터(906)를 식별하는 데이터 필드를 포함한다. 서브-옵코드(sub-opcode)(905) 및 커맨드 크기(908)가 몇몇 커맨드에 또한 포함된다.
몇몇 실시예에서, 클라이언트(902)는 커맨드 데이터를 처리하는 그래픽 디바이스의 클라이언트 유닛을 지정한다. 몇몇 실시예에서, 그래픽 프로세서 커맨드 파서(graphics processor command parser)가 각각의 커맨드의 클라이언트 필드를 조사하여 커맨드의 추가 처리를 좌우하고(condition) 커맨드 데이터를 적절한 클라이언트 유닛에 라우팅한다(route). 몇몇 실시예에서, 그래픽 프로세서 클라이언트 유닛은 메모리 인터페이스 유닛, 렌더 유닛, 2D 유닛, 3D 유닛 및 미디어 유닛을 포함한다. 각각의 클라이언트 유닛은 커맨드를 처리하는 대응하는 처리 파이프라인을 갖는다. 일단 커맨드가 클라이언트 유닛에 의해 수신되면, 클라이언트 유닛은 수행할 동작을 판정하기 위해 옵코드(904)를, 그리고 만일 존재한다면 서브-옵코드(905)를 판독한다. 클라이언트 유닛은 데이터 필드(906) 내의 정보를 사용하여 커맨드를 수행한다. 몇몇 커맨드에 대해 명시적인 커맨드 크기(908)가 커맨드의 크기를 지정할 것으로 기대된다. 몇몇 실시예에서, 커맨드 파서는 커맨드 옵코드에 기반하여 커맨드 중 적어도 일부의 크기를 자동으로 판정한다. 몇몇 실시예에서 커맨드는 더블 워드의 다중을 통해 정렬된다.
도 9b의 흐름도는 예시적인 그래픽 프로세서 커맨드 시퀀스(910)를 보여준다. 몇몇 실시예에서, 그래픽 프로세서의 실시예를 특징으로 하는 데이터 처리 시스템의 소프트웨어 또는 펌웨어는 그래픽 동작의 세트를 셋업하고(set up) 실행하며 종결하는 것으로 도시된 커맨드 시퀀스의 버전을 사용한다. 오직 예를 위해 샘플 커맨드 시퀀스가 도시되고 기술되며 실시예는 이들 구체적인 커맨드에 또는 이 커맨드 시퀀스에 한정되지 않는다. 더욱이, 커맨드는 커맨드 시퀀스 내의 커맨드의 배치(batch)로서 발행될 수 있어서, 그래픽 프로세서는 적어도 부분적으로 동시성 있게 커맨드의 시퀀스를 처리할 것이다.
몇몇 실시예에서, 그래픽 프로세서 커맨드 시퀀스(910)는 파이프라인 플러시 커맨드(pipeline flush command)(912)로 시작하여 임의의 활성 그래픽 파이프라인이 파이프라인을 위한 현재 계류 중인 커맨드를 완료하게 한다. 몇몇 실시예에서, 3D 파이프라인(922) 및 미디어 파이프라인(924)은 동시에 동작하지 않는다. 파이프라인 플러시는 활성 그래픽 파이프라인으로 하여금 임의의 계류 중인 커맨드를 완료하게 하기 위해 수행된다. 파이프라인 플러시에 응답하여, 그래픽 프로세서를 위한 커맨드 파서는 활성 드로잉 엔진(drawing engine)이 계류 중인 동작을 완료하고 관련 판독 캐시가 무효화될(invalidated) 때까지 커맨드 처리를 일시중단할(pause) 것이다. 선택적으로, '더티(dirty)'라고 마킹된(marked) 렌더 캐시 내의 임의의 데이터는 메모리에 플러시될 수 있다. 몇몇 실시예에서, 파이프라인 플러시 커맨드(912)는 파이프라인 동기화를 위해 또는 그래픽 프로세서를 저전력 상태에 두기 전에 사용될 수 있다.
몇몇 실시예에서, 파이프라인 선택 커맨드(913)는 커맨드 시퀀스가 그래픽 프로세서로 하여금 파이프라인 사이에서 명시적으로 스위칭하도록 요구하는 경우에 사용된다. 몇몇 실시예에서, 파이프라인 선택 커맨드(913)는 실행 콘텍스트(execution context) 내에서, 그 콘텍스트가 두 파이프라인 모두를 위한 커맨드를 발행하는 것이 아닌 한, 파이프라인 커맨드를 발행하기 전에 한 번만 요구된다. 몇몇 실시예에서, 파이프라인 플러시 커맨드(912)는 파이프라인 선택 커맨드(913)를 통한 파이프라인 스위치 전에 즉시 요구된다.
몇몇 실시예에서, 파이프라인 제어 커맨드(914)는 동작을 위한 그래픽 파이프라인을 구성하며, 3D 파이프라인(922) 및 미디어 파이프라인(924)을 프로그래밍하는 데에 사용된다. 몇몇 실시예에서, 파이프라인 제어 커맨드(914)는 활성 파이프라인을 위한 파이프라인 상태를 구성한다. 하나의 실시예에서, 파이프라인 제어 커맨드(914)는 파이프라인 동기화를 위해 사용되며, 커맨드의 배치를 처리하기 전에 활성 파이프라인 내의 하나 이상의 캐시 메모리로부터 데이터를 클리어하는 데에 사용된다.
몇몇 실시예에서, 리턴 버퍼 상태 커맨드(916)는 데이터를 기록하도록 각 파이프라인을 위한 리턴 버퍼의 세트를 구성하는 데에 사용된다. 몇몇 파이프라인 동작은 처리 동안에 그 동작이 중간 데이터를 기록하는 하나 이상의 리턴 버퍼의할당, 선택 또는 구성을 요구한다. 몇몇 실시예에서, 그래픽 프로세서는 또한 하나 이상의 리턴 버퍼를 사용하여 출력 데이터를 저장하고 쓰레드 교차 통신(cross thread communication)을 수행한다. 몇몇 실시예에서, 리턴 버퍼 상태(916)는 파이프라인 동작의 세트를 위해 사용할 리턴 버퍼의 크기 및 개수를 선택하는 것을 포함한다.
커맨드 시퀀스 내의 나머지 커맨드는 동작을 위한 활성 파이프라인에 기반하여 차이가 난다. 파이프라인 판정(920)에 기반하여, 커맨드 시퀀스는 3D 파이프라인 상태(930)로 시작하는 3D 파이프라인(922)으로 또는 미디어 파이프라인 상태(940)로 시작하는 미디어 파이프라인(924)으로 맞춤화된다(tailored).
3D 파이프라인 상태(930)를 구성하는 커맨드는 3D 프리미티브 커맨드가 처리되기 전에 구성될 정점 버퍼 상태, 정점 요소 상태, 일정한 컬러 상태, 깊이 버퍼 상태 및 다른 상태 변수를 위한 3D 상태 설정 커맨드를 포함한다. 이들 커맨드의 값은 사용 중인 특정 3D API에 적어도 부분적으로 기반하여 판정된다. 몇몇 실시예에서, 3D 파이프라인 상태(930) 커맨드는 또한 어떤 파이프라인 요소를, 만일 그런 요소가 사용되지 않을 것이라면 선택적으로 디스에이블하거나 바이패스할 수 있다.
몇몇 실시예에서, 3D 프리미티브(932) 커맨드는 3D 파이프라인에 의해 처리될 3D 프리미티브를 제출하는 데에 사용된다. 3D 프리미티브(932) 커맨드를 통해 그래픽 프로세서로 전해지는 커맨드 및 연관된 파라미터는 그래픽 파이프라인 내의 정점 페치 기능으로 포워딩된다. 정점 페치 기능은 정점 데이터 구조를 생성하는 데에 3D 프리미티브(932) 커맨드 데이터를 사용한다. 정점 데이터 구조는 하나 이상의 리턴 버퍼 내에 저장된다. 몇몇 실시예에서, 3D 프리미티브(932) 커맨드는 정점 셰이더를 통해 3D 프리미티브에 대해 정점 동작을 수행하는 데에 사용된다. 정점 셰이더를 처리하기 위해, 3D 파이프라인(922)은 셰이더 실행 쓰레드를 그래픽 프로세서 실행 유닛으로 디스패치한다.
몇몇 실시예에서, 3D 파이프라인(922)은 실행(934) 커맨드 또는 이벤트를 통해 트리거된다(triggered). 몇몇 실시예에서, 레지스터 쓰기는 커맨드 실행을 트리거한다. 몇몇 실시예에서 실행은 커맨드 시퀀스 내의 '고(go)' 또는 '킥(kick)' 커맨드를 통해 트리거된다. 하나의 실시예에서, 커맨드 실행은 커맨드 시퀀스를 그래픽 파이프라인을 통해 플러시하는 파이프라인 동기화 커맨드를 사용하여 트리거된다. 3D 파이프라인은 3D 프리미티브를 위한 지오메트리 처리를 수행할 것이다. 일단 동작이 완료되면, 결과적인 기하학적 개체는 래스터화되며 픽셀 엔진은 결과적인 픽셀을 채색한다. 픽셀 셰이딩 및 픽셀 백 엔드 동작을 제어하는 추가적인 커맨드가 그런 동작을 위해 또한 포함될 수 있다.
몇몇 실시예에서, 그래픽 프로세서 커맨드 시퀀스(910)는 미디어 동작을 수행하는 경우에 미디어 파이프라인(924) 경로를 따른다. 일반적으로, 미디어 파이프라인(924)을 위한 프로그래밍의 특정한 사용 및 방식은 수행될 미디어 또는 컴퓨트 동작에 달려 있다. 특정한 미디어 디코드 동작은 미디어 디코드 동안에 미디어 파이프라인에 분담될(offloaded) 수 있다. 몇몇 실시예에서, 미디어 파이프라인은 또한 바이패스될 수 있고 미디어 디코드는 하나 이상의 범용 처리 코어에 의해 제공된 리소스를 사용하여 전체적으로 또는 부분적으로 수행될 수 있다. 하나의 실시예에서, 미디어 파이프라인은 또한 범용 그래픽 프로세서 유닛(General-Purpose Graphics Processor Unit: GPGPU) 동작을 위한 요소를 포함하는데, 그래픽 프로세서는 그래픽 프리미티브의 렌더링에 명시적으로 관련되지는 않는 계산 셰이더 프로그램을 사용하여 SIMD 벡터 연산을 수행하는 데에 사용된다.
몇몇 실시예에서, 미디어 파이프라인(924)은 3D 파이프라인(922)과 유사한 방식으로 구성된다. 미디어 파이프라인 상태(940)를 구성하는 커맨드의 세트가 미디어 객체 커맨드(942) 전에 커맨드 큐에 놓이거나 디스패치된다. 몇몇 실시예에서, 미디어 파이프라인 상태(940)를 위한 커맨드는 미디어 객체를 처리하는 데에 사용될 미디어 파이프라인 요소를 구성하는 데이터를 포함한다. 이것은 미디어 파이프라인 내의 비디오 디코드 및 비디오 인코드 로직을 구성하는 데이터, 예를 들면 인코드 또는 디코드 포맷을 포함한다. 몇몇 실시예에서, 미디어 파이프라인 상태(940)를 위한 커맨드는 또한 상태 설정의 배치를 포함하는 "간접" 상태 요소에 대한 하나 이상의 포인터의 사용을 지원한다.
몇몇 실시예에서, 미디어 객체 커맨드(942)는 미디어 파이프라인에 의한 처리를 위한 미디어 객체에 대한 포인터를 공급한다. 미디어 객체는 처리될 비디오 데이터를 포함한 메모리 버퍼를 포함한다. 몇몇 실시예에서, 모든 미디어 파이프라인 상태는 미디어 객체 커맨드(942)를 발행하기 전에 유효하여야 한다. 일단 파이프라인 상태가 구성되고 미디어 객체 커맨드(942)가 큐잉되면(queued), 미디어 파이프라인(924)은 실행 커맨드(944) 또는 균등한 실행 이벤트(가령, 레지스터 쓰기)를 통해 트리거된다. 이후 미디어 파이프라인(924)으로부터의 출력은 3D 파이프라인(922) 또는 미디어 파이프라인(924)에 의해 제공되는 동작에 의해 후처리될 수 있다. 몇몇 실시예에서, GPGPU 동작은 미디어 동작과 유사한 방식으로 구성되고 실행된다.
그래픽 소프트웨어 아키텍처
도 10은 몇몇 실시예에 따른 데이터 처리 시스템(1000)을 위한 예시적인 그래픽 소프트웨어 아키텍처를 보여준다. 몇몇 실시예에서, 소프트웨어 아키텍처는 3D 그래픽 애플리케이션(1010), 운영 체제(operating system)(1020) 및 적어도 하나의 프로세서(1030)를 포함한다. 몇몇 실시예에서, 프로세서(1030)는 그래픽 프로세서(1032) 및 하나 이상의 범용 프로세서 코어(들)(1034)를 포함한다. 그래픽 애플리케이션(1010) 및 운영 체제(1020)는 각각 데이터 처리 시스템의 시스템 메모리(1050) 내에서 실행된다.
몇몇 실시예에서, 3D 그래픽 애플리케이션(1010)은 셰이더 명령어(1012)를 포함하는 하나 이상의 셰이더 프로그램을 포함한다. 셰이더 언어 명령어는 고수준 셰이더 언어(High Level Shader Language: HLSL) 또는 OpenGL 셰이더 언어(OpenGL Shader Language: GLSL)와 같은 고수준 셰이더 언어일 수 있다. 애플리케이션은 또한 범용 프로세서 코어(1034)에 의한 실행에 적합한 머신어(machine language)로된 실행가능한 명령어(1014)를 포함한다. 애플리케이션은 또한 정점 데이터에 의해 정의된 그래픽 객체(1016)를 포함한다.
몇몇 실시예에서, 운영 체제(1020)는 마이크로소프트 사(Microsoft Corporation)부터의 마이크로소프트(Microsoft®) 윈도우즈(Windows®) 운영 체제, 전유(proprietary) UNIX 계열 운영 체제, 또는 리눅스(Linux) 커널의 변형을 사용하는 오픈 소스 UNIX 계열 운영 체제이다. 운영 체제(1020)는 Direct3D API, OpenGL API, 또는 Vulkan API와 같은 그래픽 API(1022)를 지원할 수 있다. Direct3D API가 사용 중인 경우에, 운영 체제(1020)는 HLSL 내의 임의의 셰이더 명령어(1012)를 저수준 셰이더 언어로 컴파일하는 데에 프론트엔드 셰이더 컴파일러(1024)를 사용한다. 컴파일은 적시(Just-In-Time: JIT) 컴파일일 수도 있고, 애플리케이션이 셰이더 사전컴파일(pre-compilation)을 수행할 수도 있다. 몇몇 실시예에서, 고수준 셰이더가 3D 그래픽 애플리케이션(1010)의 컴파일 동안에 저수준 셰이더로 컴파일된다. 몇몇 실시예에서, 셰이더 명령어(1012)는 중간 형태, 예를 들면 Vulkan API에 의해 사용되는 표준 포터블 중간 표현(Standard Portable Intermediate Representation: SPIR)의 버전으로 제공된다.
몇몇 실시예에서, 사용자 모드 그래픽 드라이버(1026)는 셰이더 명령어(1012)를 하드웨어 특정적 표현으로 변환하는 백엔드 셰이더 컴파일러(1027)를 포함한다. OpenGL API가 사용 중인 경우에, GLSL 고수준 언어로된 셰이더 명령어(1012)가 컴파일을 위해 사용자 모드 그래픽 드라이버(1026)로 전해진다. 몇몇 실시예에서, 사용자 모드 그래픽 드라이버(1026)는 커널 모드 그래픽 드라이버(1029)와 통신하는 데에 운영 체제 커널 모드 함수(1028)를 사용한다. 몇몇 실시예에서, 커널 모드 그래픽 드라이버(1029)는 그래픽 프로세서(1032)와 통신하여 커맨드 및 명령어를 디스패치한다.
IP 코어 구현
적어도 하나의 실시예의 하나 이상의 측면은 프로세서와 같은 집적 회로 내의 로직을 나타내고/거나 정의하는 머신 판독가능 매체(machine-readable medium) 상에 저장된 표상적인 코드에 의해 구현될 수 있다. 예를 들어, 머신 판독가능 매체는 프로세서 내의 다양한 로직을 나타내는 명령어를 포함할 수 있다. 머신에 의해 판독되는 경우, 명령어는 머신으로 하여금 본 문서에 기술된 기법을 수행하는 로직을 제작하게할 수 있다. "IP 코어"로 알려진 그러한 표현은 집적 회로의 구조를 기술하는 하드웨어 모델로서 유형의(tangible) 머신 판독가능 매체 상에 저장될 수 있는 집적 회로를 위한 로직의 재사용가능한 유닛이다. 하드웨어 모델은 집적 회로를 제조하는 제작 머신 상에 하드웨어 모델을 적재하는 다양한 고객 또는 제조 시설에 공급될 수 있다. 집적 회로는 본 문서에 기술된 실시예 중 임의의 것과 연관되어 기술된 동작을 그 회로가 수행하도록 제작될 수 있다.
도 11a는 실시예에 따라 동작을 수행하는 집적 회로를 제조하는 데에 사용될 수 있는 IP 코어 개발 시스템(1100)을 보여주는 블록도이다. IP 코어 개발 시스템(1100)은 더 큰 설계 내에 통합될 수 있는 모듈식의 재사용가능한 설계를 생성하는 데에 사용되거나 전체 집적 회로(가령, SOC 집적 회로)를 구축하는 데에 사용될 수 있다. 설계 시설(1130)은 고수준 프로그래밍 언어(가령, C/C++)로된 IP 코어 설계의 소프트웨어 시뮬레이션(1110)을 생성할 수 있다. 소프트웨어 시뮬레이션(1110)은 시뮬레이션 모델(1112)을 사용하여 IP 코어의 거동(behavior)을 설계하고 테스트하며 확인하는 데에 사용될 수 있다. 시뮬레이션 모델(1112)은 기능, 거동 및/또는 타이밍(timing) 시뮬레이션을 포함할 수 있다. 그러면 레지스터 전송 레벨(Register Transfer Level: RTL) 설계(1115)가 시뮬레이션 모델(1112)로부터 생성되거나 합성될 수 있다. RTL 설계(1115)는 모델링된 디지털 신호를 사용하여 수행되는 연관된 로직을 포함한, 하드웨어 레지스터 간의 디지털 신호의 흐름을 모델링하는 집적 회로의 거동의 추상화(abstraction)이다. RTL 설계(1115)에 더하여, 로직 레벨 또는 트랜지스터 레벨에서의 하위 레벨 설계가 또한 생성되거나 설계되거나 합성될 수 있다. 그러므로, 초기 설계 및 시뮬레이션의 특정한 세부사항은 달라질 수 있다.
RTL 설계(1115) 또는 균등물은 나아가 설계 시설에 의해 하드웨어 모델(1120)로 합성될 수 있는데, 이는 하드웨어 서술 언어(Hardware Description Language: HDL)로, 또는 물리적 설계 데이터의 어떤 다른 표현으로될 수 있다. HDL은 또한 IP 코어 설계를 확인하기 위해 시뮬레이션되거나 테스트될 수 있다. IP 코어 설계는 비휘발성 메모리(1140)(가령, 하드 디스크, 플래시 메모리 또는 임의의 비휘발성 저장 매체)를 사용하여 제3자 제작 시설(1165)로의 전달을 위해 저장될 수 있다. 대안적으로, IP 코어 설계는 유선 연결(1150) 또는 무선 연결(1160) 상에서(가령, 인터넷을 통해) 송신될 수 있다. 이후 제작 시설(1165)은 IP 코어 설계에 적어도 부분적으로 기반하는 집적 회로를 제작할 수 있다. 제작된 집적 회로는 본 문서에 기술된 적어도 하나의 실시예에 따라 동작을 수행하도록 구성될 수 있다.
도 11b는 본 문서에 기술된 몇몇 실시예에 따라, 집적 회로 패키지 어셈블리(1170)의 횡단면 측면도를 보여준다. 집적 회로 패키지 어셈블리(1170)는 본 문서에 기술된 바와 같은 하나 이상의 프로세서 또는 가속기 디바이스의 구현을 보여준다. 패키지 어셈블리(1170)는 기판(substrate)(1180)에 연결된 하드웨어 로직(1172, 1174)의 여러 유닛을 포함한다. 로직(1172, 1174)은 적어도 부분적으로 구성가능 로직 또는 고정 기능 로직 하드웨어로 구현될 수 있고, 프로세서 코어(들), 그래픽 프로세서(들) 또는 본 문서에 기술된 다른 가속기 디바이스 중 임의의 것의 하나 이상의 부분을 포함할 수 있다. 로직(1172, 1174)의 각 유닛은 반도체 다이(semiconductor die) 내에 구현되고 상호연결 구조(1173)를 통해 기판(1180)과 커플링될 수 있다. 상호연결 구조(1173)는 로직(1172, 1174) 및 기판(1180) 간에 전기적 신호를 라우팅하도록 구성될 수 있고, 범프(bump) 또는 필러(pillar)와 같은, 그러나 이에 한정되지 않는 상호연결부를 포함할 수 있다. 몇몇 실시예에서, 상호연결 구조(1173)는, 예를 들어, 로직(1172, 1174)의 동작과 연관된 입력/출력(Input/Output: I/O) 신호 및/또는 전력 또는 그라운드(ground) 신호와 같은 전기적 신호를 라우팅하도록 구성될 수 있다. 몇몇 실시예에서, 기판(1180)은 에폭시 기반 래미네이트(laminate) 기판이다. 패키지 기판(1180)은 다른 실시예에서 다른 적합한 타입의 기판을 포함할 수 있다. 패키지 어셈블리(1170)는 패키지 상호연결부(1183)를 통해 다른 전기 디바이스에 연결될 수 있다. 패키지 상호연결부(1183)는 다른 전기 디바이스, 예를 들면 마더보드(motherboard), 다른 칩셋(chipset), 또는 다중칩 모듈(multi-chip module)에 전기적 신호를 라우팅하도록 기판(1180)의 표면에 커플링될 수 있다.
몇몇 실시예에서, 로직(1172, 1174)의 유닛은 로직(1172, 1174) 간에 전기적 신호를 라우팅하도록 구성된 브리지(bridge)(1182)와 전기적으로 커플링된다. 브리지(1182)는 전기적 신호의 길을 제공하는 밀집한 상호연결 구조일 수 있다. 브리지(1182)는 유리 또는 적합한 반도체 소재로 구성된 브리지 기판을 포함할 수 있다. 로직(1172, 1174) 간의 칩대칩 연결(chip-to-chip connection)을 제공하도록 브리지 기판 상에 전기적 라우팅 특징부가 형성될 수 있다.
로직(1172, 1174)의 두 유닛 및 브리지(1182)가 예시되나, 본 문서에 기술된 실시예는 하나 이상의 다이 상에 더 많거나 더 적은 로직 유닛을 포함할 수 있다. 하나 이상의 다이는 0개의 또는 그보다 많은 브리지에 의해 연결될 수 있으니, 로직이 단일 다이 상에 포함되는 경우에 브리지(1182)는 배제될 수 있다. 대안적으로, 로직의 여러 다이 또는 유닛이 하나 이상의 브리지에 의해 연결될 수 있다. 추가적으로, 3차원 구성을 비롯하여, 다른 가능한 구성에서 여러 로직 유닛, 다이 및 브리지가 함께 연결될 수 있다.
예시적인 시스템 온 칩 집적 회로
도 12 내지 도 14는 본 문서에 기술된 다양한 실시예에 따라, 하나 이상의 IP 코어를 사용하여 제작될 수 있는 예시적인 집적 회로 및 연관된 그래픽 프로세서를 보여준다. 예시된 것에 더하여, 추가적인 그래픽 프로세서/코어, 주변기기 인터페이스 제어기, 또는 범용 프로세서 코어를 비롯하여, 다른 로직 및 회로가 포함될 수 있다.
도 12는 실시예에 따라, 하나 이상의 IP 코어를 사용하여 제작될 수 있는 예시적인 시스템 온 칩 집적 회로(1200)를 보여주는 블록도이다. 예시적인 집적 회로(1200)는 하나 이상의 애플리케이션 프로세서(들)(1205)(가령, CPU), 적어도 하나의 그래픽 프로세서(1210)를 포함하며, 이미지 프로세서(1215) 및/또는 비디오 프로세서(1220)를 추가적으로 포함할 수 있는데, 이들 중 어떤 것이든 동일한 또는 다수의 상이한 설계 시설로부터의 모듈식 IP 코어일 수 있다. 집적 회로(1200)는 USB 제어기(1225), UART 제어기(1230), SPI/SDIO 제어기(1235) 및 I2S/I2C 제어기(1240)를 포함하는 주변기기 또는 버스 로직을 포함한다. 추가적으로, 집적 회로는 고선명 멀티미디어 인터페이스(High-Definition Multimedia Interface: HDMI) 제어기(1250) 및 모바일 산업 프로세서 인터페이스(Mobile Industry Processor Interface: MIPI) 디스플레이 인터페이스(1225) 중 하나 이상에 커플링된 디스플레이 디바이스(1245)를 포함할 수 있다. 플래시 메모리 및 플래시 메모리 제어기를 포함하는 플래시 메모리 서브시스템(1260)에 의해 스토리지가 제공될 수 있다. SDRAM 또는 SRAM 메모리 디바이스로의 액세스를 위해 메모리 제어기(1265)를 통해 메모리 인터페이스가 제공될 수 있다. 몇몇 집적 회로는 임베디드 보안 엔진(1270)을 추가적으로 포함한다.
도 13a 내지 도 13b는 본 문서에 기술된 실시예에 따라, SoC 내에서의 사용을 위한 예시적인 그래픽 프로세서를 보여주는 블록도이다. 도 13a는 실시예에 따라, 하나 이상의 IP 코어를 사용하여 제작될 수 있는 시스템 온 칩 집적 회로의 예시적인 그래픽 프로세서(1310)를 보여준다. 도 13b는 실시예에 따라, 하나 이상의 IP 코어를 사용하여 제작될 수 있는 시스템 온 칩 집적 회로의 추가적인 예시적인 그래픽 프로세서(1340)를 보여준다. 도 13a의 그래픽 프로세서(1310)는 저전력 그래픽 프로세서 코어의 예이다. 도 13b의 그래픽 프로세서(1340)는 더 높은 성능의 그래픽 프로세서 코어의 예이다. 그래픽 프로세서(1310, 1340) 각각은 도 12의 그래픽 프로세서(1210)의 변형일 수 있다.
도 13a에 도시된 바와 같이, 그래픽 프로세서(1310)는 정점 프로세서(1305) 및 하나 이상의 프래그먼트 프로세서(들)(1315A-1315N)(가령, 1315A, 1315B, 1315C, 1315D 내지 1315N-1 및 1315N)를 포함한다. 그래픽 프로세서(1310)는 별개의 로직을 통해 상이한 셰이더 프로그램을 실행할 수 있어서, 정점 프로세서(1305)는 정점 셰이더 프로그램을 위한 동작을 실행하도록 최적화되는 반면에, 하나 이상의 프래그먼트 프로세서(들)(1315A-1315N)는 프래그먼트 또는 픽셀 셰이더 프로그램을 위한 프래그먼트(가령, 픽셀) 셰이딩 동작을 실행한다. 정점 프로세서(1305)는 3D 그래픽 파이프라인의 정점 처리 스테이지를 수행하고 프리미티브 및 정점 데이터를 생성한다. 프래그먼트 프로세서(들)(1315A-1315N)는 디스플레이 디바이스 상에 디스플레이되는 프레임버퍼를 산출하는 데에 정점 프로세서(1305)에 의해 생성된 프리미티브 및 정점 데이터를 사용한다. 하나의 실시예에서, 프래그먼트 프로세서(들)(1315A-1315N)는 OpenGL API에서 가능케 되는 바와 같이 프래그먼트 셰이더 프로그램을 실행하도록 최적화되는데, 이는 Direct 3D API에서 가능케 되는 바와 같이 픽셀 셰이더 프로그램으로서 유사한 동작을 수행하는 데에 사용될 수 있다.
그래픽 프로세서(1310)는 하나 이상의 메모리 관리 유닛(Memory Management Unit: MMU)(1320A-1320B), 캐시(들)(1325A-1325B) 및 회로 상호연결부(들)(1330A-1330B)를 추가적으로 포함한다. 하나 이상의 MMU(들)(1320A-1320B)는, 하나 이상의 캐시(들)(1325A-1325B) 내에 저장된 정점 또는 이미지/텍스처 데이터에 더하여, 메모리 내에 저장된 정점 또는 이미지/텍스처 데이터를 참조할 수 있는 정점 프로세서(1305) 및/또는 프래그먼트 프로세서(들)(1315A-1315N)를 비롯하여, 그래픽 프로세서(1310)를 위한 가상 대 물리적 어드레스 맵핑(virtual to physical address mapping)을 가능케 한다. 하나의 실시예에서 하나 이상의 MMU(들)(1320A-1320B)는, 도 12의 하나 이상의 애플리케이션 프로세서(들)(1205), 이미지 프로세서(1215) 및/또는 비디오 프로세서(1220)와 연관된 하나 이상의 MMU를 포함하여, 시스템 내의 다른 MMU와 동기화될 수 있어서, 각각의 프로세서(1205-1220)는 공유된 또는 통일된 가상 메모리 시스템에 참여할 수 있다. 하나 이상의 회로 상호연결부(들)(1330A-1330B)는 그래픽 프로세서(1310)로 하여금, 실시예에 따라, SoC의 내부 버스를 통해서든 또는 직접 연결을 통해서든, SoC 내의 다른 IP 코어와 인터페이스할 수 있게 한다.
도 13b에 도시된 바와 같이, 그래픽 프로세서(1340)는 도 13a의 그래픽 프로세서(1310)의 하나 이상의 MMU(들)(1320A-1320B), 캐시(1325A-1325B) 및 회로 상호연결부(1330A-1330B)를 포함한다. 그래픽 프로세서(1340)는 하나 이상의 셰이더 코어(들)(1355A-1355N)(가령, 1455A, 1355B, 1355C, 1355D, 1355E, 1355F 내지 1355N-1 및 1355N)을 포함하는데, 이는 정점 셰이더, 프래그먼트 셰이더 및/또는 작업부하 커맨드 셰이더를 구현하는 셰이더 프로그램 코드를 포함하는 모든 타입의 프로그램가능 셰이더 코드를 단일 코어 또는 단일 타입의 코어가 실행할 수 있는 통일된 셰이더 코어 아키텍처를 가능케 한다. 존재하는 셰이더 코어의 정확한 수는 실시예 및 구현 간에 달라질 수 있다. 추가적으로, 그래픽 프로세서(1340)는 코어간 태스크 관리기(inter-core task manager)(1345)를 포함하는데, 이는, 예를 들어 장면 내의 로컬 공간 일관성(local spatial coherence)를 이용하기 위해 또는 내부 캐시의 사용을 최적화하기 위해, 장면을 위한 렌더링 동작이 이미지 공간 내에서 세분된 타일 기반 렌더링을 위한 타일링(tiling) 동작을 가속화하는 타일링 유닛(1358) 및 하나 이상의 셰이더 코어(1355A-1355N)에 실행 쓰레드를 디스패치하는 쓰레드 디스패처로서 작동한다.
도 14a 내지 도 14b는 본 문서에 기술된 실시예에 따라 추가적인 예시적인 그래픽 프로세서를 보여준다. 도 14a는 도 12의 그래픽 프로세서(1210) 내에 포함될 수 있고 도 13b에서와 같은 통일된 셰이더 코어(1355A-1355N)일 수 있는 그래픽 코어(1400)를 보여준다. 도 14b는 다중칩 모듈 상의 배치에 적합한 고도로 병렬인(highly-parallel) 범용 그래픽 처리 유닛(1430)을 보여준다.
도 14a에 도시된 바와 같이, 그래픽 코어(1400)는 그래픽 코어(1400) 내의 실행 리소스에 공통적인 공유 명령어 캐시(shared instruction cache)(1402), 텍스처 유닛(1418) 및 캐시/공유 메모리(1420)를 포함한다. 그래픽 코어(1400)는 각각의 코어를 위한 여러 슬라이스(1401A-1401N) 또는 파티션을 포함할 수 있고, 그래픽 프로세서는 그래픽 프로세서 코어(1400)의 여러 인스턴스를 포함할 수 있다. 슬라이스(1401A-1401N)는 로컬 명령어 캐시(local instruction cache)(1401A-1401N), 쓰레드 스케줄러(thread scheduler)(1406A-1406N), 쓰레드 디스패처(1408A-1408N), 그리고 레지스터의 세트(1410A-1410N)를 포함하는 지원 로직을 포함할 수 있다. 로직 동작을 수행하기 위해, 슬라이스(1401A-1401N)는 추가 기능 유닛(Additional Function Unit: AFU)(1412A-1412N), 부동 소수점 유닛(Floating Point Unit: FPU)(1414A-1414N), 정수 산술 로직 유닛(Arithmetic Logic Unit: ALU)(1416-1416N), 어드레스 계산 유닛(Address Computational Unit: ACU)(1413A-1413N), 배정도 부동 소수점 유닛(Double-Precision Floating-Point Unit: DPFPU)(1415A-1415N) 및 행렬 처리 유닛(Matrix Processing Unit: MPU)(1417A-1417N)의 세트를 포함할 수 있다.
계산 유닛 중 일부는 특정 정밀도로 동작한다. 예를 들어, FPU(1414A-1414N)는 단정도(32비트) 및 반정도(half-precision)(16비트) 부동 소수점 동작을 수행할 수 있는 반면, DPFPU(1415A-1415N)는 배정도(64비트) 부동 소수점 동작을 수행한다. ALU(1416A-1416N)는 8비트, 16비트 및 323비트 정밀도로 가변 정밀도 정수 동작을 수행할 수 있고, 혼합 정밀도(mixed precision) 동작을 위해 구성될 수 있다. MPU(1417A-1417N)는 반정도 부동 소수점 및 8비트 정수 동작을 포함하는 혼합 정밀도 행렬 동작을 위해 또한 구성될 수 있다. MPU(1417-1417N)는 가속된 일반적 행렬 대 행렬 곱셈(general matrix to matrix multiplication)(GEMM)에 대한 지원을 가능하게 하는 것을 비롯하여, 머신 러닝 애플리케이션 프레임워크를 가속하기 위해 다양한 행렬 동작을 수행할 수 있다. AFU(1412A-1412N)는 삼각함수 동작(가령, 사인(Sine), 코사인(Cosine) 등)을 비롯하여, 부동 소수점 또는 정수 유닛에 의해 지원되지 않는 추가적인 로직 동작을 수행할 수 있다.
도 14b에 도시된 바와 같이, 범용 처리 유닛(GPGPU)(1430)은 고도로 병렬인 컴퓨트 동작이 그래픽 처리 유닛의 어레이에 의해 수행될 수 있게 하도록 구성될 수 있다. 추가적으로, GPGPU(1430)는 특히 심층 신경망(deep neural network)를 위한 훈련 속도를 개선하기 위해 다중 GPU 클러스터를 생성하기 위해 GPGPU의 다른 인스턴스에 직접적으로 링크될 수 있다. GPGPU(1430)는 호스트 프로세서와의 연결을 가능하게 하는 호스트 인터페이스(1432)를 포함한다. 하나의 실시예에서 호스트 인터페이스(1432)는 PCI Express 인터페이스이다. 그러나, 호스트 인터페이스는 또한 벤더(vendor) 특정적 통신 인터페이스 또는 통신 패브릭일 수 있다. GPGPU(1430)는 호스트 프로세서로부터 커맨드를 수신하고 전역 스케줄러(global scheduler)(1434)를 사용하여 그러한 커맨드와 연관된 실행 쓰레드를 컴퓨트 클러스터(1436A-1436H)의 세트에 분산한다. 컴퓨트 클러스터(1436A-1436H)는 캐시 메모리(1438)를 공유한다. 캐시 메모리(1438)는 컴퓨트 클러스터(1436A-1436H) 내의 캐시 메모리를 위한 더 높은 레벨의 캐시로서의 역할을 할 수 있다.
GPGPU(1430)는 메모리 제어기(1442A-1442B)의 세트를 통해 컴퓨트 클러스터(1436A-1436H)와 커플링된 메모리(1444A-1444B)를 포함한다. 다양한 실시예에서, 메모리(1444A-1444B)는 동적 랜덤 액세스 메모리(Dynamic Random Access Memory: DRAM) 또는 그래픽 랜덤 액세스 메모리, 예를 들면 동기식 그래픽 랜덤 액세스 메모리(Synchronous Graphics Random Access Memory: SGRAM)(그래픽 더블 데이터 레이트(Graphics Double Data Rate: GDDR) 메모리를 포함함)를 포함하는 다양한 타입의 메모리 디바이스를 포함할 수 있다.
하나의 실시예에서 컴퓨트 클러스터(1436A-1436H) 각각은, 머신 러닝 계산에 적합한 것을 포함하는 정밀도의 범위에서 계산 동작을 수행할 수 있는 여러 타입의 정수 및 부동 소수점 로직 유닛을 포함할 수 있는, 도 14a의 그래픽 코어(1400)와 같은 그래픽 코어의 세트를 포함한다. 예를 들어 그리고 하나의 실시예에서 컴퓨트 클러스터(1436A-1436H) 각각 내의 부동 소수점 유닛의 적어도 서브세트는 16비트 또는 32비트 부동 소수점 동작을 수행하도록 구성될 수 있는 반면, 부동 소수점 유닛의 상이한 서브세트는 64비트 부동 소수점 동작을 수행하도록 구성될 수 있다.
GPGPU(1430)의 여러 인스턴스가 컴퓨트 클러스터로서 동작하도록 구성될 수 있다. 동기화 및 데이터 교환을 위해 컴퓨트 클러스터에 의해 사용되는 통신 메커니즘은 실시예에 따라 달라진다. 하나의 실시예에서 GPGPU(1430)의 여러 인스턴스는 호스트 인터페이스(1432)를 통하여 통신한다. 하나의 실시예에서 GPGPU(1430)는 GPGPU(1430)를 GPGPU의 다른 인스턴스로의 직접적인 연결을 가능하게 하는 GPU 링크(1440)와 커플링하는 I/O 허브(1439)를 포함한다. 하나의 실시예에서 GPU 링크(1440)는 GPGPU(1430)의 여러 인스턴스 간의 통신 및 동기화를 가능하게 하는 전용 GPU 대 GPU 브리지에 커플링된다. 하나의 실시예에서 GPU 링크(1440)는 데이터를 다른 GPGPU 또는 병렬 프로세서에 송신하고 수신하기 위해 고속 상호연결부과 커플링된다. 하나의 실시예에서 GPGPU(1430)의 여러 인스턴스는 개별 데이터 처리 시스템 내에 위치되며, 호스트 인터페이스(1432)를 통해 액세스가능한 네트워크 디바이스를 통해 통신한다. 하나의 실시예에서 GPU 링크(1440)는 호스트 인터페이스(1432)에 더하여 또는 이에 대한 대안으로서 호스트 프로세서에의 연결을 가능하게 하도록 구성될 수 있다.
GPGPU(1430)의 예시된 구성은 신경망을 훈련하도록 구성될 수 있으나, 하나의 실시예는 고성능 또는 저전력 추론 플랫폼 내에의 배치를 위해 구성될 수 있는 GPGPU(1430)의 대체 구성을 제공한다. 추론 구성에서 GPGPU(1430)는 훈련 구성에 비해 컴퓨트 클러스터(1436A-1436H) 중 더 적은 수를 포함한다. 추가적으로, 메모리(1434A-1434B)와 연관된 메모리 기술은 추론 및 훈련 구성 간에 차이가 있을 수 있는데, 더 높은 대역폭의 메모리 기술은 훈련 구성에 돌려진다. 하나의 실시예에서 GPGPU(1430)의 추론 구성은 추론 특정적 명령어를 지원할 수 있다. 예를 들어, 추론 구성은 배치된 신경망을 위한 추론 동작 동안에 보통 사용되는 하나 이상의 8비트 정수 도트 곱(dot product) 명령어에 대한 지원을 제공할 수 있다.
분산형 그래픽 디바이스에서의 작업부하 스케줄링 및 분배
본 명세서에 기술된 실시예는 보다 소형인 그래픽 디바이스의 다수의 타일로 구성된 타일 구조를 갖는 그래픽, 미디어 및 컴퓨팅 디바이스를 제공한다. 이러한 장치는 장치의 전력 및/또는 성능 목표에 따라 더 많거나 적은 수의 타일을 포함하도록 스케일(scale)될 수 있다. 이러한 장치는 특별히 스케일된 작업 분배 인프라를 사용하여 여러 타일에 작업부하를 효율적으로 분배하는 것을 가능하게 수 있다. 본 명세서에 기술된 작업 분배 인프라는 가변 개수의 다중 타일에 걸쳐 스케일된 작업부하 디스패치를 가능하게 한다. 작업 항목은 여러 타일 중 하나 이상에 제출될 수 있으며, 작업부하는 여러 타일에 걸쳐 있을 수 있다. 또한, 작업 항목을 완료하면 장치 내의 그래픽, 미디어 및/또는 컴퓨팅 엔진은 최소한의 레이턴시로 실행할 새로운 작업 항목을 쉽게 얻을 수 있다.
도 15는 일 실시예에 따른 데이터 처리 시스템(1500)의 블록도이다. 데이터 처리 시스템(1500)은 프로세서(1502), 통합 메모리(1510) 및 머신 러닝 가속 로직을 포함하는 GPGPU(1520)를 갖는 이종 처리 시스템이다. 프로세서(1502) 및 GPGPU(1520)는 본 명세서에 기술된 바와 같은 프로세서 및 GPGPU/병렬 프로세서 중 임의의 것일 수 있다. 프로세서(1502)는 시스템 메모리(1512)에 저장된 컴파일러(1515)에 대한 명령어를 실행할 수 있다. 컴파일러(1515)는 소스 코드(1514A)를 컴파일된 코드(1514B)로 컴파일하기 위해 프로세서(1502) 상에서 실행된다. 컴파일된 코드(1514B)는 프로세서(1502)에 의해 실행될 수 있는 명령어 및/또는 GPGPU(1520)에 의해 실행될 수 있는 명령어를 포함할 수 있다. 컴파일 동안, 컴파일러(1515)는 컴파일된 코드(1514B)에 존재하는 데이터 병렬법(data parallelism)의 레벨에 관한 힌트및/또는 컴파일된 코드(1514B)에 기초하여 디스패치될 쓰레드와 관련된 데이터 위치에 관한 힌트를 포함하여 메타 데이터를 삽입하는 동작을 수행할 수 있다. 컴파일러(1515)가 그러한 동작을 수행하는 데 필요한 정보를 포함할 수도 있고, 또는 런타임 라이브러리(1516)의 도움으로 동작이 수행될 수도 있다. 런타임 라이브러리(1516)는 또한 소스 코드(1514A)의 컴파일시의 컴파일러(1515)를 보조할 수 있으며, 또한 GPGPU(1520) 상에서 컴파일된 명령어의 실행을 용이하게 하기 위해 런타임시에 컴파일된 코드 1514B와 링크되는 명령어를 포함할 수 있다.
통합 메모리(1510)는 프로세서(1502) 및 GPGPU(1520)에 의해 액세스될 수 있는 통합 어드레스 공간을 나타낸다. 통합 메모리는 시스템 메모리(1512) 및 GPGPU 메모리(1518)를 포함할 수 있다. GPGPU 메모리(1518)는 GPGPU(1520)의 어드레스 공간 내의 메모리이며, 시스템 메모리(1512)의 일부 또는 전부를 포함할 수 있다. 일 실시예에서, GPGPU 메모리(1518)는 또한 GPGPU(1520)에 의해 독점적으로 사용되도록 전용화된 임의의 메모리의 적어도 일부를 포함할 수 있다. 일 실시예에서, 시스템 메모리(1512)에 저장된 컴파일된 코드(1514B)는 GPGPU(1520)에 의한 액세스를 위해 GPGPU 메모리(1518)에 매핑될 수 있다.
GPGPU(1520)는 다수의 엔진 블록 타일(1524A-1524N)을 포함하며, 여기에는 본 명세서에 설명된 다양한 계산 유닛 또는 실행 요소 중 하나 이상을 포함할 수 있다. 일 실시예에서, GPGPU(1520)는 매트릭스 가속기(1523)를 추가로 포함하는데, 매트릭스 가속기(1523)는 매트릭스 연산(예를 들어, 내적(dot product) 등)의 서브 세트를 가속화하도록 설계된 하나 이상의 특수 함수 계산 유닛을 포함할 수 있다. GPGPU(1520)는 엔진 블록 타일(1524A-1524N)에 의해 공유될 수 있는 리소스 세트를 포함할 수 있으며, 리소스 세트에는 전역 레지스터 세트(1525), 전력 및 성능 모듈(1526) 및 공유 캐시(1527)가 포함되나, 이에 한정되는 것은 아니다. 일 실시예에서, 전역 레지스터(1525)는 직간접적으로 액세스 가능한 레지스터를 포함한다. 전력 및 성능 모듈(1526)은 엔진 블록 타일(1524A-1524N) 내의 컴포넌트들의 전력 소비를 변조하기 위해 엔진 블록 타일(1524A-1524N)에 대한 전력 전달 및 클록 주파수들을 조정하도록 구성될 수 있다. 예를 들어, 일 실시예에서, 엔진 블록 타일(1524A-1524N) 내의 컴포넌트로 전달되는 전력은 데이터 처리 시스템(1500)에 대한 전력 또는 성능 목표에 기초하여 동적으로 스위칭(예를 들어, 게이트)될 수 있다. 다양한 실시예에서, 공유 캐시(1527)는 명령어 캐시 및/또는 하위 레벨 데이터 캐시를 포함한다.
일 실시예에서, 각각의 엔진 블록 타일(1524A-1524N)은 다수의 작업부하 또는 하나의 분산된 작업부하를 실행하기 위해 독립적으로 또는 협력하여 동작할 수 있는 그래픽 처리 엔진 세트를 포함한다. 각 타일에는 서로 다른 활동들을 수행하는 다양한 엔진이 포함된다. 다양한 엔진은 배치 버퍼 내에 제공된 커맨드를 처리할 수 있으며, 이는 커맨드의 배치(batch of commands)를 포함하는 메모리 버퍼이고, 엔진 블록 타일(1524A-1524N) 내의 실행 유닛을 사용하여 이러한 커맨드를 실행할 수 있다. 호스트 프로세서에서 실행되는 소프트웨어는 전역 스케줄러(1522)에 작업 항목을 제출할 수 있으며, 전역 스케줄러는 다양한 작업 항목을 하나 이상의 엔진 블록 타일(1524A-1524N)에 분배할 수 있다. 선택적으로, 소프트웨어는 작업 항목을 타일에 직접 제출할 수 있고, 타일 내의 스케줄링 하드웨어는 작업부하를 타일 내의 적절한 엔진에 스케줄링할 수 있다.
도 16a 내지 도 16c는 실시예에 따른 다중 타일 작업 스케줄링을 구현하는 그래픽 처리 시스템(1600)을 도시한다. 도 16a는 일 실시예에 따른 그래픽 처리 시스템(1600)의 개요를 도시한다. 도 16b는 시스템 그래픽 인터페이스(1602)의 예를 도시한다. 도 16c는 엔진 블록 타일(1605)의 예를 도시한다.
도 16a에 도시된 바와 같이, 그래픽 처리 시스템(1600)은 작업부하(1604A-1604D)를 하나 이상의 엔진 블록 타일(1605A-1605D)로 송신할 수 있는 애플리케이션 및/또는 그래픽 드라이버(앱/드라이버(1601))를 포함하고, 이는 도 15의 엔진 블록 타일(1524A-1524N)과 동일하거나 또는 그 변형일 수 있다. 작업부하(1604A-1604D)는 동일한 작업부하의 일부분들일 수도 있고 또는 별개의 작업부하들일 수 있다. 작업부하(1604A-1604D)는 작업부하 사이의 관계(또는 관계의 결여)에 따라 서로 협력하여 또는 독립적으로 실행될 수 있다. 앱/드라이버(1601)의 애플리케이션은 그래픽 처리 시스템에 작업부하를 제출할 수 있거나 제출하도록 구성될 수 있는 임의의 애플리케이션일 수 있다. 드라이버는 사용자 모드 드라이버일 수 있으며, 이를 통해 애플리케이션은 관련 커널 모드 드라이버를 거쳐 작업부하를 제출할 수 있다.
몇몇 실시예 및/또는 구현예에서, 전역 스케줄러(예를 들어, 도 15의 전역 스케줄러(1522))가 작업부하를 엔진 블록 타일에 디스패치한다. 다른 실시예에서, 작업부하는 각각의 개별적인 엔진 블록 타일(1605A)과 연관된 시스템 그래픽 인터페이스(1602A-1602D) 내에서 도어벨(1603A-1603D)을 통해 엔진 블록 타일(1605A-1605D)에 직접 제출될 수 있다.
각각의 엔진 블록 타일(1605A-1604D)과 연관된 시스템 그래픽 인터페이스(1602A-1602D)는 호스트 시스템과 엔진 블록 타일이 상주하는 그래픽 시스템 사이의 인터페이스를 제공한다. 시스템 그래픽 인터페이스(1602A-1602D)는 그래픽 처리 시스템을 호스트 시스템에 장치로서 제공하는 그래픽 디바이스 로직을 포함하고, PCIe 버스를 통해 그래픽 디바이스와의 통신을 가능하게 하는 PCIe 구성 공간 데이터를 포함한다. 다른 실시예에서, 프로세서 인터페이스 버스(예를 들어, 프로세서 링 또는 메시 버스(mesh bus), CoreLink 또는 AMBA 버스 등)와 같은 서로 다른 유형의 호스트 또는 장치 인터페이스 버스에 대해, 또는 또 다른 유형의 메시 또는 패브릭 인터페이스(예를 들면, NVLink)에 대해 상이한 버스 인터페이스가 사용될 수 있다. 일 실시예에서, 인터럽트 생성은 시스템 그래픽 인터페이스(1602A-1602D)를 통해 처리된다. 인터럽트 생성을 위해, 시스템 그래픽 인터페이스(1602A-1602D) 중 하나는 그래픽 시스템의 마스터 인터페이스로서 동작할 수 있다. 일 실시예에서, 시스템 그래픽 인터페이스(1602A-1602D)는 그래픽 처리 시스템에 대해 호스트 어드레스 공간으로부터 로컬 어드레스 공간으로의 변환을 수행할 수 있다.
일 실시예에서, 시스템 그래픽 인터페이스(1602A-1602D)는 각각 도어벨(1604A-1604D)을 포함하고, 도어벨을 통해 작업부하(1604A-1604D)가 제출될 수 있다. 일 실시예에서, 각각의 도어벨(1604A-1604D)은 256개의 도어벨을 지원하는 도어벨 블록이지만, 도어벨 블록은 임의의 개수의 도어벨을 포함할 수 있다. 도어벨이 애플리케이션에 할당될 수 있으며, 그래픽 드라이버를 통해 애플리케이션 타일에 대한 연관성(affinity)을 관리할 수 있다. 애플리케이션에는 하나 이상의 도어벨을 할당할 수 있으며 도어벨 할당은 교차 타일 할당(cross-tile assignments)일 수 있다. 작업부하를 제출하기 위해 애플리케이션 또는 드라이버 소프트웨어는 애플리케이션이 제출하고 있는 작업 유형에 따라 적절한 도어벨을 울릴 수 있다. 소프트웨어가 타일과 연관된 도어벨을 울리면, 스케줄링이 타일 내에서 로컬로 관리될 수 있다. 예를 들어, 타일과 연관된 시스템 그래픽 인터페이스는 타일 내 로컬 스케줄러를 사용하여 요청된 작업부하를 로컬 엔진에 스케줄링할 수 있다.
도 16b는 일 실시예에 따른 시스템 그래픽 인터페이스(1602)를 도시한다. 시스템 그래픽 인터페이스(1602)는 인터럽트 유닛(612), 디바이스 인터페이스(1614), 도어벨(1603), 시스템/디바이스 어드레스 변환기(1616) 및 배치 버퍼 제출기(1618)를 포함한다. 인터럽트 유닛(1612)은 원격 또는 마스터 인터럽트 유닛으로서 구성될 수 있고, 인터럽트 유닛(1612) 내의 인터럽트 레지스터에 저장된 값에 따라 생성된 MSI(message signaled interrupt)를 전송할 수 있다. 장치 인터페이스(1614)는 그래픽 시스템을 전체로 또는 개별 타일로 인터페이스 버스(PCIe 버스를 포함하나 이에 한정되는 것은 아님) 상의 장치로서 제공될 수 있게 하는 하드웨어를 포함할 수 있다. 도어벨(1603)은 다수의 도어벨 인터페이스(이를 통해 작업부하(1604)가 제출될 수 있음) 중 하나이며, 작업부하(1604)는 도 16a의 작업부하(1604A-1604D) 중 임의의 하나일 수 있다. 도어벨(1603)은 관련 엔진 블록 타일에 작업 요청이 처리 가능하다는 것을 통지하는 데 사용될 수 있는 도어벨 구조 또는 레지스터일 수 있다. 일 실시예에서, 작업 요청은 배치 커맨드 버퍼(예를 들어, 배치 버퍼)의 형태로 제공된다. 배치 버퍼는 배치 버퍼 제출기(1618)를 통해 처리될 수 있다. 일 실시예에서 배치 버퍼 제출기(1618)는 시스템/디바이스 어드레스 변환기(1616)를 사용하여 시스템 어드레스를 엔진 블록 타일에 대한 장치 로컬 어드레스로 변환할 수 있다. 그런 다음, 배치 버퍼의 커맨드를 관련 엔진 블록 타일에 제출할 수 있다.
도 16c는 시스템 그래픽 인터페이스를 통해 애플리케이션 또는 드라이버로부터 작업부하를 수신할 수 있는 엔진 블록 타일(1605)을 도시한다. 엔진 블록 타일(1605)은 호스트 시스템으로부터 수신된 커맨드를 처리할 수 있는 다수의 엔진을 포함한다. 엔진은 다양한 동작을 수행하고, 하나 이상의 실행 유닛 블록(1629A-1629N)을 통해 이러한 커맨드에 대한 기본 명령어를 실행할 수 있다. 엔진 블록 타일(1605)은 또한 스케줄러(1621)를 포함하는데, 이는 엔진 블록 타일(1605)에 대한 로컬 스케줄러로서 다양한 타일에 의해 처리하기 위한 커맨드를 스케줄링하고/하거나 실행 유닛(1629A-1629N) 상에서 실행하기 위한 명령어를 스케줄링한다. 일 실시예에서, 엔진 블록 타일의 엔진은 RCS(render command streamer, 1623), POCS(position only command streamer, 624), CCS(compute command streamer, 1625), 카피 엔진(1622), 및 하나 이상의 미디어 엔진 슬라이스(1626)를 포함하고, 미디어 엔진 슬라이스는 비디오 디코딩 동작들을 수행하기 위한 하나 이상의 비디오 커맨드 스트리머(VCSn, 1627) 및 비디오 인코딩 동작들을 수행하기 위한 비디오 인코드 커맨드 스트리머(VECSn, 1628)를 포함한다. 인입 배치 버퍼는 하나 이상의 도시된 엔진 및 도시되지 않은 다른 엔진 중 어느 것에 의해서든 처리될 수 있는 커맨드를 포함할 수 있다.
본 명세서에 기술된 실시예는 애플리케이션 또는 그래픽 드라이버가 다수의 타일에 분산된 작업부하를 명시적으로 제출할 수 있게 한다. 또한, 작업부하가 제출된 후 타일 간 부하 균형화를 수행할 수 있다. 일 실시예에서, 여러 타일에 걸친 작업부하(cross-tile workload)를 가능하게 하기 위해, 수행될 작업 아이템들의 슈퍼세트(superset)를 포함하는 동일한 배치 버퍼가 타일 작업 그룹 내에 포함될 각 타일에 제출된다. 주어진 타일이 제출된 모든 작업부하를 실행하도록 의도하는 것이 아닌 경우에도, 모든 커맨드가 커맨드를 실행할 모든 타일에 제출된다. 대신, 각 타일은 제출된 작업부하의 한 서브 세트만을 실행한다. 일 실시예에서, 주어진 타일은 타일과 연관된 하드웨어 콘텍스트에 제공된 식별자에 기초하여 작업부하의 하나의 특정 서브세트를 실행할 수 있다.
도 17은 본 명세서에 설명된 실시예들에 따른 타일 작업 파티션 및 스케줄링 시스템(1700)을 도시한다. 타일 작업 파티셔닝 및 스케줄링 시스템(1700)은 작업부하가 다수의 GPU(1730A-1730D)에 걸쳐 분산될 수 있게 하는데, 여기서 다수의 GPU 각각은 도 16a에서와 같은 엔진 블록 타일(1605A-1605D)의 인스턴스일 수 있다. GPU(1730A-1730D)는 GPU(1730A-1730D)의 개개의 시스템 그래픽 인터페이스의 구성에 기초하여 하나 이상의 디바이스로서 열거될 수 있다.
GPU에 분산된 작업부하(GPU spanning workload)의 실행을 가능하게 하기 위해, 개별 하드웨어 콘텍스트(1720A-1720D)가 생성되어 개개의 GPU(1730A-1730D)와 연관될 수 있다. 일 실시예에서, 하드웨어 콘텍스트 및 배치 버퍼(1708)는 호스트 시스템의 프로세서에서 실행되는 사용자 모드 드라이버에 의해 생성될 수 있다. 그러한 배치 버퍼(1708)는 커맨드가 실행될 실행 상태를 정의하는 커맨드 및 GPU로 하여금 실행 쓰레드를 디스패치하여 작업부하를 수행하게 하는 GPGPU 워커 커맨드(walker command)를 포함한다. 각각의 하드웨어 콘텍스트(1720A-1720D)는 하드웨어 콘텍스트의 개개의 GPU(1730A-1730D)에 대한 추가 실행 상태를 정의한다. 일 실시예에서, 하드웨어 콘텍스트 내에 정의된 실행 상태는 각각의 GPU에 대해 타일 그룹 오프셋(TG_OFFSET) 및 타일 그룹 단계(TG_STEP)를 지정할 수 있다. 타일 그룹 오프셋은 개개의 GPU에 의해 실행될 커맨드에 대한 배치 버퍼(1708) 내의 시작 위치를 지정한다. 타일 그룹 단계는 작업부하에 대한 파티션 수를 지정할 수 있다. 배치 버퍼 시작 커맨드는 개개의 GPU(1730A-1730D)와 연관된 커맨드 링 버퍼(1710A-1710D)에 삽입된다. GPU(1730A-1730D)는 GPU와 연관된 커맨드를 실행하고 이들 커맨드의 완료시에 대기 상태(1702A-1702D)로 진입할 것이다. 일 실시예에서는, GPU에 대한 커맨드의 말단에 삽입되는 명시적 세마포어 대기(explicit semaphore wait) 또는 다른 동기화/대기 커맨드에 기초하여 대기 상태(1702A-1702D)로 들어간다. 다른 실시예에서, 자동 동기화 시스템은 GPU(1720A-1720D)를 동기화하는 데 사용된다.
도 18은 실시예에 따른 다중 타일 그래픽 처리 시스템에서 부하 균형화를 가능하게 하는 시스템(1800)을 도시한다. 동일한 배치 버퍼(1810)는 물리적 엔진 블록 타일(1822A-1822C)의 세트 내의 다수의 가상 엔진에 제공되는 커맨드(1812A-1812C)를 포함할 수 있다. 엔진 블록 타일(1822A-1822C) 내의 물리적 엔진은, 커맨드가 물리적 타일 중 임의의 타일 내에 물리적으로 상주할 수 있는 가상 엔진을 참조하도록 가상화될 수 있다. 일 실시예에서, 앱/드라이버(1601)는 N개의 LRCA(local render context address)를 생성함으로써 N개의 가상 엔진 세트 간에 작업부하를 분할할 수 있다. 각각의 LRCA(1802A-1802C)는 LRCA가 연관된 작업부하 파티션을 식별하는 WPARID(workload partition identifier, 1801)를 포함한다. 각 LRCA는 물리적 엔진 블록 타일(1822A-1822C) 내의 상이한 엔진에 제출되어 작업부하의 병렬 실행을 가능하게 한다. 작업부하의 실행 동안, 엔진은 자신의 LRCA에 제공된 WPARID를 사용하여 실행할 작업부하 부분을 식별한다.
예를 들어, 물리적 타일(1822A)과 연관된 LRCA(1802A)에는 X의 WPARID가 할당될 수 있다. LRCA(1802A)는 물리적 타일 0(물리적 엔진 타일(1822A))와 연관될 수 있는 가상 엔진 X에 의해 실행될 커맨드를 포함하는 배치 버퍼(1810)의 일부를 참조할 수 있다. 물리적 타일 0는 이제 작업부하(1814A)로서 가상 엔진 X 커맨드(1812A)를 실행할 수 있다. LRCA(1802B)는 물리적 타일 1(물리적 엔진 타일(1822B))과 연관될 수 있는 가상 엔진 Y에 의해 실행될 커맨드를 포함하는 배치 버퍼(1810)의 일부를 참조할 수 있다. 물리적 타일 1은 이제 작업부하(1814B)로서 가상 엔진 Y 커맨드(1812B)를 실행할 수 있다. LRCA(1802C)는 물리적 타일 2(물리적 엔진 타일(1822C))와 연관될 수 있는 가상 엔진 Z에 의해 실행될 커맨드를 포함하는 배치 버퍼(1810)의 일부를 참조할 수 있다. 물리적 타일 2는 이제 작업부하(1814C)로서 가상 엔진 Z 커맨드(1812C)를 실행할 수 있다.
일 실시예에서, WPARID(1801)는 사용자 모드 드라이버가 동적 부하 균형화를 가능하게 하도록 수정할 수 있는 화이트리스트된 파라미터(whitelisted parameter)이다. 작업부하 실행 중에 WPARID에 대한 수정을 수행할 수 있다. 동시에 실행되는 다른 엔진이 동일한 WPARID의 소유권을 주장하지 못하도록, 수정은 원자적으로 수행된다. 일 실시예에서, WPARID는 하드웨어 콘텍스트 저장 및 복원의 일부로서 저장 및 복원된다.
LRCA에서 WPARID ID를 동적으로 획득하면 콘텍스트가 임의의 물리적 타일로 투명하게 마이그레이션될 수 있다. 실행하는 동안 작업부하가 실행되는 물리적 타일에 관계없이, 지정된 WPARID를 위한 동일한 커맨드의 하위 집합이 실행된다. 일 실시예에서, 다수의 LRCA가 동일한 엔진에 제출되어 커맨드의 실행을 직렬화할 수 있다. 예를 들어, 가상 엔진 X 커맨드(1812A) 및 가상 엔진 Y 커맨드(1812B)가 모두 물리적 엔진 타일(1822B)에 제출되면, 두 커맨드 세트 모두가 직렬화된 방식으로 실행될 것이다.
일 실시예에서, 가상 엔진 커맨드의 실행은 물리적 엔진 타일(1822A-1822C) 내에서 예정된 실행 로직을 사용하여 처리된다. 하드웨어에 제공된 배치 버퍼의 부분이 물리적 타일 및/또는 가상 엔진 세트와 연관된 LRCA에 의해 제공된 WPARID와 일치하면, 엔진에 대한 커맨드 및/또는 명령어가 조건부로 실행될 수 있다. 일 실시예에서, 조건부 실행이 가능한 경우, 타일은 LRCA에 의해 제공된 WPARID와 일치하지 않는 커맨드의 실행을 자동으로 바이패스(bypass)할 것이기 때문에 별도의 배치 버퍼 시작 위치가 필요하지 않을 수 있다. 일 실시예에서, 타일들 사이에서 WPARID를 마이그레이션함으로써 동적 부하 균형화가 수행될 때, 타일은 커맨드를 찾기 위해 배치 버퍼를 재스캔하고, 새로운 WPARID에 대한 커맨드를 실행하기 위해 타일 내의 조건부 실행 유닛을 리셋할 수 있다. WPARID가 제거되면, 타일은 제거된 WPARID와 연관된 커맨드의 실행을 중지할 수 있다.
도 19는 일 실시예에 따른 다중 타일 작업부하 스케줄링의 방법(1900)의 흐름도를 도시한다. 방법(1900)은 본 명세서에 기술된 바와 같이 다중 타일, 다중 코어 또는 다중 GPU 그래픽 처리 시스템을 포함하는 호스트 처리 시스템의 애플리케이션 또는 드라이버에 의해 수행될 수 있다. 그래픽 처리 엔진의 타일에 대한 참조가 이루어지는 경우, 다중 GPU 또는 다중 코어 GPU(multi-core GPU)에 유사한 기술이 적용될 수 있고, 여기서 다중 GPU 또는 다중 GPU 코어(multiple GPU cores)는 본 명세서에 기술된 다중 타일 그래픽 프로세서 아키텍처이거나 이를 포함한다. 예를 들어, 다중 타일 GPU는 시스템 그래픽 인터페이스의 구성에 따라 단일 그래픽 프로세서 또는 하나 이상의 그래픽 프로세서 장치로서 호스트 데스크톱 제공되도록 구성될 수 있다.
블록(1902)에 도시된 바와 같이, 일 실시예에서, 방법(1900)은 다수의 그래픽 처리 엔진 타일을 갖는 그래픽 프로세서에 의해 실행될 작업부하의 커맨드 세트를 생성하는 동작을 수행하는 것을 포함한다. 블록(1904)에서, 동작은 커맨드 세트를 제1 파티션 및 제2 파티션으로 파티셔닝한다. 블록(1906)에서, 동작은 제1 파티션 식별자를 제1 파티션에 할당하고 제2 파티션 식별자를 제2 파티션에 할당할 수 있다. 블록(1908)에서, 동작은 추가적으로 제1 파티션 식별자를 다수의 그래픽 처리 엔진 타일 중 제1 그래픽 처리 엔진 타일과 연관된 제1 하드웨어 콘텍스트와 연관시키고, 제2 파티션 식별자를 다수의 그래픽 처리 엔진 타일 중 제2 그래픽 처리 엔진 타일과 연관된 제2 하드웨어 콘텍스트와 연관시킨다. 블록(1910)에서, 동작은 제1 파티션 및 제2 파티션을 제1 그래픽 처리 엔진 타일 및 제2 그래픽 처리 엔진 타일 각각에 제출한다. 블록(1912)에서, 동작은 추가로, 제1 그래픽 처리 엔진 타일을 통해 제1 파티션을 추가로 실행하고, 제2 그래픽 처리 엔진 타일을 통해 제2 파티션을 실행한다.
커맨드 세트의 파티셔닝은 도 17 및 도 18에 도시된 바와 같이 수행될 수 있다. 각 파티션의 커맨드는 배치 버퍼에 로딩될 수 있고, 동일한 배치 버퍼는 그래픽 처리 엔진의 각 타일에 제출될 수 있다. 각각의 타일에 대한 하드웨어 콘텍스트는 타일에 의해 처리될 커맨드의 시작에 대응하는 배치 버퍼 시작 위치를 구성할 수 있다. 일 실시예에서, 파티션 식별자는 또한 커맨드의 파티션과 연관될 수 있다. 그런 다음 타일은, 다른 파티션의 커맨드는 바이패스하면서 연관 파티션에 대한 배치 버퍼에서 커맨드는 조건부로 실행하도록 구성될 수 있다.
도 20은 일 실시예에 따른 다중 타일 작업부하를 실행하는 방법(2000)의 흐름도를 도시한다. 방법(2000)은 본 명세서에 기술된 다중 타일, 다중 코어 또는 다중 GPU 그래픽 처리 시스템에 의해 실행될 수 있다. 그래픽 처리 엔진 타일에 대한 참조가 이루어지는 경우, 유사한 기술이 다중 GPU 또는 다중 코어 GPU에 적용될 수 있으며, 여기서 다중 GPU 또는 다중 GPU 코어는 전술한 다중 타일 그래픽 프로세서 아키텍처를 포함한다.
블록(2002)에 도시된 바와 같이, 방법(2000)은 그래픽 프로세서가 커맨드 세트를 수신하는 것을 포함한다. 커맨드 세트는 제1 파티션 및 제2 파티션을 갖는 작업부하를 나타내며, 그래픽 프로세서는 다수의 그래픽 처리 엔진 타일을 포함한다. 블록(2004)에서, 그래픽 프로세서는 제1 그래픽 처리 엔진 타일을 제1 하드웨어 콘텍스트와 연관시키고, 제2 그래픽 처리 엔진 타일을 제2 하드웨어 콘텍스트와 연관시킬 수 있다. 블록(2006)에서, 그래픽 프로세서는 제1 그래픽 처리 엔진 타일에 의해 제1 하드웨어 콘텍스트로부터의 제1 파티션 식별자를 판독하고, 제2 그래픽 처리 엔진 타일에 의해 제2 하드웨어 콘텍스트로부터의 제2 파티션 식별자를 판독할 수 있다. 제1 파티션 식별자는 제1 파티션과 연관되고, 제2 파티션 식별자는 제2 파티션과 연관된다. 블록(2008)에서, 그래픽 프로세서는 각각의 타일과 연관된 파티션 식별자를 갖는 커맨드를 조건부로 실행하도록 제1 그래픽 처리 엔진 타일 및 제2 그래픽 처리 엔진 타일을 구성할 수 있다. 그런 다음 블록(2010)에서, 그래픽 프로세서는 제1 그래픽 처리 엔진 타일에서는 제2 파티션의 커맨드는 바이패스하면서 제1 파티션의 커맨드를 실행하고, 제2 그래픽 처리 엔진 타일에서는 제1 파티션의 커맨드는 바이패스하면서 제 2 파티션의 커맨드를 실행할 수 있다.
도 21은 일 실시예에 따른, 타일들 사이에서 작업부하를 마이그레이션하는 방법(2100)의 흐름도를 도시한다. 방법(2100)은 본 명세서에 기술된 다중 타일, 다중 코어 또는 다중 GPU 그래픽 처리 시스템에 의해 실행될 수 있다. 그래픽 처리 엔진 타일에 대한 참조가 이루어지는 경우, 유사한 기술이 다중 GPU 또는 다중 코어 GPU에 적용될 수 있으며, 여기서 다중 GPU 또는 다중 GPU 코어는 전술한 바와 같이 다중 타일 그래픽 프로세서 아키텍처를 포함한다.
블록(2102)에 도시된 방법(2100)은 그래픽 프로세서가 커맨드 세트를 수신하는 것을 포함한다. 커맨드 세트는 제1 파티션과 제2 파티션을 갖는 작업부하를 나타낸다. 블록(2104)에서, 그래픽 프로세서는 제1 파티션을 실행하도록 제1 그래픽 처리 엔진 타일을 구성할 수 있다. 블록(2106)에서, 그래픽 프로세서는 제2 파티션을 실행하도록 제2 그래픽 처리 엔진 타일을 구성할 수 있다. 블록(2108)에서, 제1 파티션의 실행이 완료되기 전에, 그래픽 프로세서는 제1 파티션의 실행을 제1 그래픽 처리 엔진 타일로부터 제3 그래픽 처리 엔진 타일로 마이그레이션하기 위한 트리거를 수신할 수 있다. 그런 다음, 그래픽 프로세서는 제1 파티션을 제 3 타일로 마이그레이션할 수 있고, 블록(2110)에 도시된 바와 같이, 제3 그래픽 처리 엔진 타일을 통해 제1 파티션의 적어도 일부를 실행할 수 있다. 일 실시예에서 제1 파티션의 실행을 제3 타일로 마이그레이션하기 위한 트리거는, 제1 파티션의 식별자를 제1 타일에서 제3 타일로 이동시키기 위한 제1 및 제 3 파티션 상의 작업부하의 파티션 식별자(WPARID)의 원자 업데이트(atomic update)를 포함한다. 그런 다음, 제 3 타일은 제1 파티션의 WPARID와 연관된 배치 버퍼 커맨드를 조건부로 실행할 수 있고, 제1 타일은 더 이상 제1 파티션의 WPARID와 연관된 배치 버퍼 커맨드를 실행하지 않을 것이다.
도 22는 일 실시예에 따른 그래픽 프로세서(2204)를 포함하는 컴퓨팅 디바이스(2200)의 블록도이다. 컴퓨팅 디바이스(2200)는 도 1의 데이터 처리 시스템(100)과 같은 본 명세서에 설명된 컴퓨팅 디바이스일 수 있다. 컴퓨팅 디바이스(2200)는 또한 셋톱 박스(예를 들어, 인터넷 기반 케이블 텔레비전 셋톱 박스 등), GPS(global positioning system) 기반 장치 등과 같은 통신 디바이스일 수도 있고 그 안에 포함될 수도 있다. 컴퓨팅 디바이스(2200)는 또한 휴대폰, 스마트 폰, PDA(, personal digital assistants), 태블릿 컴퓨터, 랩톱 컴퓨터, e-리더, 스마트 텔레비전, 텔레비전 플랫폼, 웨어러블 장치(예: 안경, 시계, 팔찌, 스마트 카드, 보석류, 의류 품목 등), 미디어 플레이어 등와 같은 모바일 컴퓨팅 디바이스 일 수도 있고 그 안에 포함될 수도 있다. 예를 들어, 일 실시예에서, 컴퓨팅 디바이스(2200)는 컴퓨팅 디바이스(2200)의 다양한 하드웨어 및/또는 소프트웨어 컴포넌트를 단일 칩 상에 통합한 시스템 온 칩("SoC" 또는 "SOC")과 같은 집적 회로("IC")를 이용하는 모바일 컴퓨팅 디바이스를 포함한다.
컴퓨팅 디바이스(2200)는 그래픽 프로세서(2204)를 포함한다. 그래픽 프로세서(2204)는 본 명세서에 기술된 임의의 그래픽 프로세서를 나타낸다. 그래픽 프로세서는 하나 이상의 그래픽 엔진(들), 그래픽 프로세서 코어, 및 본 명세서에 설명된 다른 그래픽 실행 리소스를 포함한다. 이러한 그래픽 실행 리소스는 실행 유닛, 셰이더 엔진, 프래그먼트 프로세서, 정점 프로세서, 스트리밍 멀티 프로세서, 그래픽 프로세서 클러스터, 또는 그래픽 및 이미지 리소스의 처리에 적합한 컴퓨팅 리소스의 임의의 집합을 포함하지만 이에 제한되지 않는 형태로 제공될 수 있다.
일 실시예에서, 그래픽 프로세서(2204)는 단일 캐시일 수도 있고 또는, 임의의 개수의 L1, L2, L3 또는 L4 캐시, 렌더링 캐시, 깊이 캐시, 샘플러 캐시 및/또는 셰이더 유닛 캐시를 포함하지만 이에 제한되지 않는 캐시 메모리의 다수의 세그먼트로 분할될 수도 있는 캐시(2214)를 포함한다. 그래픽 프로세서(2204)는 또한, 예를 들어 도 16c에 도시된 바와 같이, 각각이 다수의 그래픽 프로세서 엔진 및 실행 유닛을 포함하는 다수의 GPGPU 타일(2204)을 포함한다. GPGPU 타일(2204)은 아키텍처면에서 유사하거나 동일할 수 있다. 각 GPGPU 타일에는 가상화된 그래픽 프로세서 엔진 세트가 포함될 수 있다. 가상화된 엔진을 사용하면 커맨드를 실행하는 물리적 GPGPU 타일에 구속받지 않는(agnostic) 커맨드 스트림을 구성할 수 있다. 또한, 물리적 타일 내에서 또는 물리적 타일에서 가상 엔진 간에 커맨드를 동적으로 마이그레이션할 수 있다. 다양한 실시예에서, GPGPU 엔진 타일(2240)은 장벽/동기화 유닛(barrier/sync unit, 2242) 및 조건부 실행 유닛(2244)을 포함할 수 있다. 장벽/동기화 유닛(2242)은 작업부하 파티션의 완료시 GPGPU 엔진 타일(2240)을 동기화하는 데 사용될 수 있다. 조건부 실행 유닛(2442)은 커맨드와 연관된 작업부하 파티션 식별자와 GPGPU 엔진 타일과 연관된 작업부하 파티션 식별자 간의 일치에 기초하여 배치 버퍼 커맨드의 조건부 및/또는 예정된 실행을 가능하게 하는 데 사용될 수 있다.
도시된 바와 같이, 일 실시예에서, 그래픽 프로세서(2204)에 추가하여, 컴퓨팅 디바이스(2200)는 애플리케이션 프로세서(2206), 메모리(2208), 및 입력/출력(I/O) 소스(2210)를 포함하나 이에 제한되지 않는, 임의의 수 및 유형의 하드웨어 컴포넌트 및/또는 소프트웨어 컴포넌트를 더 포함할 수 있다. 애플리케이션 프로세서(2206)는 그래픽 파이프라인 기능을 공유하기 위해 도 3을 참조하여 예시된, 하드웨어 그래픽 파이프라인과 상호 작용할 수 있다. 처리된 데이터는 하드웨어 그래픽 파이프라인의 버퍼에 저장되고 상태 정보는 메모리(2208)에 저장된다. 결과 데이터는 도 3의 디스플레이 디바이스(323)와 같은 디스플레이 디바이스를 통한 출력을 위해 디스플레이 컨트롤러로 전송될 수 있다. 디스플레이 디바이스는 음극선 관(CRT), 박막 트랜지스터(TFT), 액정 디스플레이(LCD), 유기 발광 다이오드(OLED) 어레이 등과 같은 다양한 유형을 가질 수 있으며, 그래픽 사용자 인터페이스를 통해 사용자에게 정보를 디스플레이하도록 구성될 수 있다.
애플리케이션 프로세서(2206)는 도 1의 프로세서(들)(102)와 같은 하나 이상의 프로세서를 포함할 수 있고, 컴퓨팅 디바이스(2200)를 위한 운영 체제(OS)(2202)를 실행하기 위해 적어도 부분적으로 사용되는 중앙 처리 장치(CPU)일 수 있다. OS(2202)는 컴퓨팅 디바이스(2200)의 하드웨어 및/또는 물리적 리소스와 하나 이상의 사용자 사이의 인터페이스로서 기능할 수 있다. OS(2202)는 사용자 모드 드라이버(UMD 2223) 및 커널 모드 드라이버(KMD 2224)와 같은 그래픽 드라이버 로직(2222)을 포함할 수 있고, 이는 도 10의 사용자 모드 그래픽 드라이버(1026) 및/또는 커널 모드 그래픽 드라이버(1029)의 변형일 수 있다. UMD(2223)는 컴퓨팅 디바이스에서 실행되는 애플리케이션과 인터페이스할 수 있고, 그러한 애플리케이션이 그래픽 프로세서(2204)의 다수의 GPGPU 엔진 타일(2224)에 분산된 작업부하를 제출하는 것을 가능하게 할 수 있다.
몇몇 실시예에서, 그래픽 프로세서(2204)는 애플리케이션 프로세서(2206)의 일부(예를 들어, 물리적 CPU 패키지의 일부)로 존재할 수 있으며, 이 경우에 메모리(2208)의 적어도 일부는 애플리케이션 프로세서(2206) 및 그래픽 프로세서(2204)에 의해 공유될 수 있으나, 메모리(2208)의 적어도 일부가 그래픽 프로세서(2204)에 독점될 수 있거나 그래픽 프로세서(2204)가 별도의 메모리 저장소를 가질 수 있다. 메모리(2208)는 버퍼(예를 들어, 프레임 버퍼)의 미리 할당된 영역을 포함할 수 있으나, 본 기술 분야의 기술자라면 실시예들이 그에 제한되지 않으며, 하위의 그래픽 파이프라인에 액세스 가능한 임의의 메모리가 사용될 수 있음을 이해해야 한다. 메모리(2208)는 데스크톱 또는 3D 그래픽 장면을 렌더링하기 위해 그래픽 프로세서(2204)를 사용하는 애플리케이션을 포함하는 다양한 형태의 랜덤 액세스 메모리(RAM)(예를 들어, SDRAM, SRAM 등)를 포함할 수 있다. 메모리 파이프라인 처리를 위해, 메모리 컨트롤러가 메모리(2208)의 데이터에 액세스하고 그래픽 프로세서(2204)로 데이터를 전달하는 데 사용될 수 있다. 메모리(2208)는 컴퓨팅 디바이스(2200) 내의 다른 컴포넌트에 이용 가능하게 될 수 있다. 예를 들어, 컴퓨팅 디바이스(2200)의 다양한 I/O 소스(2210)로부터 수신된 임의의 데이터(예를 들어, 입력 그래픽 데이터)는 이들이 소프트웨어 프로그램 또는 애플리케이션의 구현시 하나 이상의 프로세서(들)(예를 들어, 애플리케이션 프로세서(2206))에 의해 동작되기 전에 메모리(2208)에 일시적으로 큐잉될 수 있다. 유사하게, 소프트웨어 프로그램이 컴퓨팅 시스템 인터페이스 중 하나를 통해 컴퓨팅 디바이스(2200)로부터 외부 엔티티로 송신되거나 내부 저장 요소에 저장되어야 한다고 결정하는 데이터는 흔히 전송되거나 저장되기 전에 메모리(2208)에 일시적으로 큐잉된다.
I/O 소스는 터치 스크린, 터치 패널, 터치 패드, 가상 또는 일반 키보드, 가상 또는 일반 마우스, 포트, 커넥터, 네트워크 장치 등과 같은 장치를 포함할 수 있다. 또한, I/O 소스(2210)는 컴퓨팅 디바이스(2200)(예를 들어, 네트워킹 어댑터)로/로부터 데이터를 전송하기 위해 또는, 컴퓨팅 디바이스(2200)(예를 들어, 하드 디스크 드라이브) 내의 대규모 비 휘발성 저장소를 위해 구현되는 하나 이상의 I/O 장치를 포함할 수 있다. 영숫자 키 및 다른 키를 포함하는 사용자 입력 장치는 정보 및 커맨드 선택을 그래픽 프로세서(2204)에 전달하는 데 사용될 수 있다. 다른 유형의 사용자 입력 장치는 마우스, 트랙볼, 터치 스크린, 터치 패드 또는 커서 방향 키와 같은 커서 컨트롤로서, 방향 정보 및 커맨드 선택을 GPU에 전달하고 디스플레이 디바이스의 커서 이동을 제어한다. 컴퓨팅 디바이스(2200)의 카메라 및 마이크로폰 어레이는 제스처를 관찰하고, 오디오 및 비디오를 기록하고, 시각(visual) 및 오디오 커맨드를 수신 및 전송하기 위해 사용될 수 있다.
네트워크 인터페이스로서 구성된 I/O 소스(2210)는 LAN, WAN(wide area network ), MAN(metropolitan area network), PAN(personal area network), 블루투스, 클라우드 네트워크, 셀룰러 또는 모바일 네트워크(예를 들어, 제 3 세대(3G), 제 4 세대(4G) 등), 인트라넷, 인터넷 등과 같은 네트워크에 대한 액세스를 제공할 수 있다. 네트워크 인터페이스(들)는 예를 들어, 하나 이상의 안테나(e)를 갖는 무선 네트워크를 포함할 수 있다. 네트워크 인터페이스(들)는 예를 들어, 이더넷 케이블, 동축 케이블, 광섬유 케이블, 직렬 케이블, 또는 병렬 케이블일 수 있는 네트워크 케이블을 통해 원격 장치와 통신하기 위한 유선 네트워크 인터페이스를 포함할 수 있다.
네트워크 인터페이스(들)는 예를 들어, IEEE 802.11 표준에 따라 LAN에 대한 액세스를 제공할 수 있거나/있고, 무선 네트워크 인터페이스는 예를 들어 블루투스 표준에 따라 PAN에 대한 액세스를 제공할 수 있다. 이전 및 이후 버전의 표준을 포함하여 다른 무선 네트워크 인터페이스 및/또는 프로토콜도 지원될 수 있다. 무선 LAN 표준을 통한 통신에 추가하여 또는 갈음하여, 네트워크 인터페이스(들)는 예를 들어 TDMA(Time Division, Multiple Access) 프로토콜, GSM(Global Systems for Mobile Communications) 프로토콜, CDMA(Code Division, Multiple Access) 프로토콜 및/또는 기타 유형의 무선 통신 프로토콜을 사용하여 무선 통신을 제공할 수 있다.
전술한 예보다 더 적거나 더 많이 장착된 시스템이 특정 구현에 대해 바람직할 수 있음을 이해해야 한다. 따라서, 컴퓨팅 디바이스(2200)의 구성은, 가격 제약, 성능 요건, 기술 개선 또는 기타 상황과 같은 다양한 요인에 따라 구현마다 달라질 수 있다. 예(제한이 아님)는 모바일 디바이스, PDA, 모바일 컴퓨팅 디바이스, 스마트 폰, 휴대폰, 핸드셋, 단방향 호출기, 양방향 호출기, 메시징 장치, 컴퓨터, 개인용 컴퓨터(PC), 데스크톱 컴퓨터, 랩톱 컴퓨터, 노트북 컴퓨터, 핸드 헬드 컴퓨터, 태블릿 컴퓨터, 서버, 서버 어레이 또는 서버 팜, 웹 서버, 네트워크 서버, 인터넷 서버, 작업 스테이션, 미니 컴퓨터, 메인 프레임 컴퓨터, 슈퍼 컴퓨터, 네트워크 기기, 웹 기기, 분산형 컴퓨팅 시스템, 멀티 프로세서 시스템, 프로세서 기반 시스템, 가전 제품, 프로그램가능 가전 제품, 텔레비전, 디지털 텔레비전, 셋톱 박스, 무선 액세스 포인트, 기지국, 가입자 국, 이동 가입자 센터, 무선 네트워크 제어기, 라우터, 허브, 게이트웨이, 브리지, 스위치, 머신 또는 이들의 조합을 포함한다.
실시예는 부모 보드(parent-board)를 사용하여 상호 연결된 하나 이상의 마이크로 칩 또는 집적 회로와, 하드와이어 로직과, 메모리 디바이스에 의해 저장되고 마이크로 프로세서에 의해 실행되는 소프트웨어와, 펌웨어와, ASIC(application specific integrated circuit) 및/또는 FPGA(Field Programmable Gate Array)의 임의의 조합으로 구현될 수 있다. "로직"이라는 용어는 예시로서 소프트웨어 또는 하드웨어 및/또는 소프트웨어와 하드웨어의 조합을 포함할 수 있다.
실시예는 예를 들어, 컴퓨터, 컴퓨터 네트워크 또는 기타 전자 장치와 같은 하나 이상의 머신에 의해 실행될 때 하나 이상의 머신이 본 명세서 기술된 실시예에 따른 동작을 수행하게 할 수 있는 머신 실행가능 명령어가 저장된 하나 이상의 머신 판독가능 매체를 포함할 수 있는 컴퓨터 프로그램 제품으로서 제공될 수 있다. 머신 판독가능 매체는 플로피 디스켓, 광 디스크, CD-ROM(Compact Disc-Read Only Memories) 및 광 자기 디스크, ROM, RAM, EPROM(Erasable Programmable Read Only Memories), EEPROM(Electrically Erasable Programmable Read Only Memories), 자기 또는 광학 카드, 플래시 메모리 또는 머신 실행가능 명령어의 저장에 적합한 기타 유형의 미디어/머신 판독 가능 매체를 포함할 수 있으나 이에 제한되지는 않는다.
또한, 실시예는 컴퓨터 프로그램 제품으로서 다운로드될 수 있으며, 여기서 프로그램은 통신 링크(예를 들어, 모뎀 및/또는 네트워크 연결)를 통해 반송파 또는 다른 전파 매체에 의해 변조 및/또는 구현된 하나 이상의 데이터 신호에 의해 원격 컴퓨터(예를 들어, 서버)로부터 요청 컴퓨터(예를 들어, 클라이언트)로 전송될 수 있다.
다음의 절 및/또는 예는 특정 실시예 또는 그 예에 관한 것이다. 실시예에서의 특정 사항은 하나 이상의 실시예의 어느 곳에서나 사용될 수 있다. 상이한 실시예 또는 예의 다양한 특징들은 포함된 일부 특징들과 다양하게 조합될 수 있고, 다른 특징들은 다양한 서로 다른 응용에 적합하게 제외된다. 예는 방법, 방법의 단계(act)를 수행하기 위한 수단, 머신에 의해 수행될 때 머신이 방법의 단계를 수행하게 하는 명령어를 포함하는 적어도 하나의 머신 판독가능 매체, 또는 본 명세서에 기술된 실시예 및 예에 따른 장치 또는 시스템과 같은 발명 대상을 포함할 수 있다. 다양한 컴포넌트는 기술된 동작 또는 기능을 수행하기 위한 수단일 수 있다.
일 실시예는 제1 그래픽 처리 엔진 타일, 제2 그래픽 처리 엔진 타일, 및 호스트 시스템과 그래픽 프로세서 사이의 인터페이스를 포함하는 그래픽 프로세서를 제공한다. 인터페이스는 제1 파티션 및 제2 파티션을 갖는 작업부하에 대한 커맨드 세트를 수신하고, 제1 그래픽 처리 엔진 타일에 커맨드 세트를 제출하고, 제2 그래픽 처리 엔진 타일에 커맨드 세트를 제출하도록 구성될 수 있다. 제1 그래픽 처리 엔진 타일은 제1 하드웨어 콘텍스트로부터 제1 파티션과 연관된 제1 파티션 식별자를 판독할 수 있다. 그 후, 제1 타일은 제2 파티션의 커맨드를 바이패스하면서 제1 파티션의 커맨드를 조건부로 실행할 수 있다. 제2 그래픽 처리 엔진 타일은 제2 하드웨어 콘텍스트로부터 제2 파티션과 연관된 제2 파티션 식별자를 판독할 수 있다. 그런 다음, 제2 타일은 제1 파티션의 커맨드를 바이패스하면서 제2 파티션의 커맨드를 조건부로 실행할 수 있다.
일 실시예는 하나 이상의 프로세서에 의해 실행될 때, 하나 이상의 프로세서로 하여금 동작을 수행하게 하는 명령어가 저장된 비 일시적 머신 판독가능 매체를 제공하며, 동작은 복수의 그래픽 처리 엔진 타일을 갖는 그래픽 프로세서에 의해 실행될 작업부하의 커맨드 세트를 생성하는 것, 커맨드 세트를 제1 파티션 및 제2 파티션으로 파티셔닝하는 것, 제1 파티션을 식별하기 위한 제1 파티션 식별자를 제1 렌더 콘텍스트와 연관시키는 것, 제2 파티션을 식별하기 위한 제2 파티션 식별자를 제2 렌더 콘텍스트와 연관시키는 것, 제1 파티션 및 제2 파티션을 복수의 그래픽 처리 엔진 타일 중 제1 그래픽 처리 엔진 타일 및 제2 그래픽 처리 엔진 타일 각각에 제출하는 것, 제1 그래픽 처리 엔진 타일을 통해 제1 파티션을 실행하는 것, 및 제2 그래픽 처리 엔진 타일을 통해 제2 파티션을 실행하는 것을 포함한다.
일 실시예는 제1 그래픽 처리 엔진 타일 및 제2 그래픽 처리 엔진 타일을 포함하는 그래픽 프로세서를 포함하는 데이터 처리 시스템을 제공한다. 그래픽 프로세서는 제1 파티션 및 제2 파티션을 갖는 작업부하에 대한 커맨드 세트를 수신하고, 제1 파티션을 실행하도록 제1 그래픽 처리 엔진 타일을 구성하고, 제1 파티션의 실행과 동시에 제2 파티션을 실행하도록 제2 그래픽 처리 엔진 타일을 구성할 수 있다. 일 실시예에서, 제1 파티션의 실행이 완료되기 전에, 그래픽 프로세서는 제1 파티션의 실행을 제1 그래픽 처리 엔진 타일로부터 제3 그래픽 처리 엔진 타일로 마이그레이션하기 위한 트리거를 수신하고, 제3 그래픽 처리 엔진 타일을 통해 제1 파티션의 적어도 일부를 실행할 수 있다. 제1 파티션의 실행을 마이그레이션하는 것은 제1 그래픽 처리 엔진 타일로부터 제3 그래픽 처리 엔진 타일로 제1 파티션의 파티션 식별자를 원자적으로 재할당하는 것을 포함한다. 일 실시예에서, 제1 파티션은 제1 파티션의 실행을 시작하기 전에 마이그레이션된다.
일 실시예는 방법을 제공하며, 이 방법은 그래픽 프로세서에서 커맨드 세트를 수신하는 단계 - 커맨드 세트는 제1 파티션 및 제2 파티션을 갖는 작업부하를 나타내고, 그래픽 프로세서는 복수의 그래픽 처리 엔진 타일을 포함함 - 와, 제1 그래픽 처리 엔진 타일에 의해 제1 하드웨어 콘텍스트로부터 제1 파티션과 연관된 제1 파티션 식별자를 판독하는 단계와, 제2 그래픽 처리 엔진 타일에 의해 제2 하드웨어로부터 제2 파티션과 연관된 제2 파티션 식별자를 판독하는 단계와, 제1 그래픽 처리 엔진 타일 및 제2 그래픽 처리 엔진 타일을 각각의 타일과 연관된 파티션 식별자를 갖는 커맨드를 조건부로 실행하도록 구성하는 단계와, 제2 파티션의 커맨드를 바이패스하면서 제1 그래픽 처리 엔진 타일에서 제1 파티션의 커맨드를 실행하는 단계와, 제1 파티션의 커맨드를 바이패스하면서 제2 그래픽 처리 엔진 타일에서 제2 파티션의 커맨드를 실행하는 단계를 포함한다. 일 실시예에서, 이 방법은 제1 그래픽 처리 엔진 타일을 제1 하드웨어 콘텍스트와 연관시키는 단계 및 제2 그래픽 처리 엔진 타일을 제2 하드웨어 콘텍스트와 연관시키는 단계를 더 포함한다.
본 발명이 속하는 분야의 기술자는 전술한 설명으로부터 실시예의 광범위한 기술이 다양한 형태로 구현될 수 있다는 것을 이해할 것이다. 따라서, 실시예들이 그 특정 예와 관련하여 설명되었지만, 실시예들의 진정한 범위가 그에 제한되어서는 안되며, 이는 도면, 명세서 및 다음의 청구 범위의 연구에 따라 다른 수정이 가능하다는 점이 당업자에게 명확히 이해될 것이기 때문이다.

Claims (20)

  1. 그래픽 프로세서로서
    제1 그래픽 처리 엔진 타일과,
    제2 그래픽 처리 엔진 타일과,
    호스트 시스템과 상기 그래픽 프로세서 사이의 인터페이스 - 상기 인터페이스는 제1 파티션 및 제2 파티션을 갖는 작업부하에 대한 커맨드 세트를 수신하고, 상기 제1 그래픽 처리 엔진 타일에 커맨드 세트를 제출하고, 상기 제2 그래픽 처리 엔진 타일에 상기 커맨드 세트를 제출함 - 를 포함하고,
    상기 제1 그래픽 처리 엔진 타일은 제1 하드웨어 콘텍스트로부터 상기 제1 파티션과 연관된 제1 파티션 식별자를 판독하고, 상기 제2 파티션의 커맨드를 바이패스(bypass)하면서 상기 제1 파티션의 커맨드를 조건부로 실행하며,
    상기 제2 그래픽 처리 엔진 타일은 제2 하드웨어 콘텍스트로부터 상기 제2 파티션과 연관된 제2 파티션 식별자를 판독하고, 상기 제1 파티션의 커맨드를 바이패스하면서 상기 제2 파티션의 커맨드를 조건부로 실행하는
    그래픽 프로세서.
  2. 제1항에 있어서,
    상기 호스트 시스템에 대한 인터페이스는 상기 제1 그래픽 처리 엔진 타일과 상기 제1 하드웨어 콘텍스트를 연관시키기 위한 커맨드를 더 수신하는
    그래픽 프로세서.
  3. 제2항에 있어서,
    상기 호스트 시스템에 대한 인터페이스는 제1 로직 렌더 콘텍스트(first logical render context)에 기초하여 상기 제1 하드웨어 콘텍스트를 구성하기 위한 커맨드를 더 수신하는
    그래픽 프로세서.
  4. 제3항에 있어서,
    상기 호스트 시스템에 대한 인터페이스는 상기 제2 그래픽 처리 엔진 타일과 상기 제2 하드웨어 콘텍스트를 연관시키기 위한 커맨드를 더 수신하는
    그래픽 프로세서.
  5. 제4항에 있어서,
    상기 호스트 시스템에 대한 인터페이스는 제2 로직 렌더 콘텍스트에 기초하여 상기 제2 하드웨어 콘텍스트를 구성하기 위한 커맨드를 더 수신하는
    그래픽 프로세서.
  6. 제5항에 있어서,
    상기 인터페이스는 상기 작업부하에 대해 실행될 커맨드를 포함하는 메모리 버퍼를 통해 상기 작업부하에 대한 커맨드 세트를 수신하는
    그래픽 프로세서.
  7. 제6항에 있어서,
    상기 제1 하드웨어 콘텍스트는 상기 제1 파티션의 시작과 연관된 상기 메모리 버퍼 내의 제1 오프셋을 포함하고, 상기 제2 하드웨어 콘텍스트는 상기 제2 파티션의 시작과 연관된 상기 메모리 버퍼 내의 제2 오프셋을 포함하는
    그래픽 프로세서.
  8. 제7항에 있어서,
    상기 제1 그래픽 처리 엔진 타일은 상기 메모리 버퍼 내의 상기 제1 오프셋에 저장된 커맨드로 상기 제1 파티션에 대한 커맨드의 실행을 시작하는
    그래픽 프로세서.
  9. 제7항에 있어서,
    상기 제2 그래픽 처리 엔진 타일은 상기 메모리 버퍼 내의 상기 제2 오프셋에 저장된 커맨드로 상기 제2 파티션에 대한 커맨드의 실행을 시작하는
    그래픽 프로세서.
  10. 제7항에 있어서,
    상기 제1 파티션 및 상기 제2 파티션의 실행이 완료된 경우 상기 제2 그래픽 처리 엔진 타일은 상기 제1 그래픽 처리 엔진 타일과 동기화되는
    그래픽 프로세서.
  11. 하나 이상의 프로세서로 하여금 동작을 수행하게 하는 명령어가 저장된 비일시적 머신 판독가능 매체로서,
    상기 동작은
    복수의 그래픽 처리 엔진 타일을 갖는 그래픽 프로세서에 의해 실행될 작업부하의 커맨드 세트를 생성하는 것,
    상기 커맨드 세트를 제1 파티션 및 제2 파티션으로 파티셔닝하는 것,
    상기 제1 파티션을 식별하기 위한 제1 파티션 식별자를 제1 렌더 콘텍스트(first render context)와 연관시키는 것,
    상기 제2 파티션을 식별하기 위한 제2 파티션 식별자를 제2 렌더 콘텍스트와 연관시키는 것,
    상기 제1 파티션 및 상기 제2 파티션을 복수의 그래픽 처리 엔진 타일 중 제1 그래픽 처리 엔진 타일 및 제2 그래픽 처리 엔진 타일 각각에 제출하는 것,
    상기 제1 그래픽 처리 엔진 타일을 통해 상기 제1 파티션을 실행하는 것, 및
    상기 제2 그래픽 처리 엔진 타일을 통해 상기 제2 파티션을 실행하는 것을 포함하는
    비 일시적 머신 판독가능 매체.
  12. 제11 항에 있어서,
    상기 동작은, 상기 제1 파티션 및 상기 제2 파티션을 실행하기 전에,
    상기 제1 파티션 식별자를 상기 제1 파티션에 할당하는 것과,
    상기 제2 파티션 식별자를 상기 제2 파티션에 할당하는 것을 더 포함하는
    비 일시적 머신 판독가능 매체.
  13. 제11항에 있어서,
    상기 동작은,
    상기 제1 렌더 콘텍스트를 초기화하고 상기 제1 파티션을 실행하는 데 사용되는 실행 상태를 정의하는 것과,
    상기 제2 렌더 콘텍스트를 초기화하고 상기 제2 파티션을 실행하는 데 사용되는 실행 상태를 정의하는 것을 더 포함하는
    비 일시적 머신 판독가능 매체.
  14. 제13항에 있어서,
    상기 제1 파티션 및 상기 제2 파티션을 상기 제1 그래픽 처리 엔진 타일 및 상기 제2 그래픽 처리 엔진 타일 각각에 제출하는 것은, 상기 제1 파티션 및 상기 제2 파티션의 커맨드를 포함하는 메모리 버퍼를 제출하는 것을 포함하는
    비 일시적 머신 판독가능 매체.
  15. 제14항에 있어서,
    상기 동작은,
    상기 제1 파티션 및 상기 제2 파티션을 실행하기 전에, 상기 제1 렌더 콘텍스트를 상기 제1 그래픽 처리 엔진 타일에 할당하는 것 및 상기 제2 렌더 콘텍스트를 상기 제2 그래픽 처리 엔진 타일에 할당하는 것을 더 포함하는
    비 일시적 머신 판독가능 매체.
  16. 제15 항에 있어서,
    상기 제1 렌더 콘텍스트는 상기 제1 파티션의 시작에 대한 상기 메모리 버퍼 내의 제1 오프셋을 포함하고, 상기 제2 렌더 콘텍스트는 상기 제2 파티션의 시작에 대한 상기 메모리 버퍼 내의 제2 오프셋을 포함하는
    비 일시적 머신 판독가능 매체.
  17. 제16 항에 있어서,
    상기 메모리 버퍼는 상기 제1 파티션 및 상기 제2 파티션의 끝에 동기화 커맨드를 포함하는
    비 일시적 머신 판독가능 매체.
  18. 데이터 처리 시스템으로서,
    제1 그래픽 처리 엔진 타일 및 제2 그래픽 처리 엔진 타일을 포함하는 그래픽 프로세서를 포함하되, 상기 그래픽 프로세서는
    제1 파티션 및 제2 파티션을 갖는 작업부하에 대한 커맨드 세트를 수신하고,
    상기 제1 파티션을 실행하도록 상기 제1 그래픽 처리 엔진 타일을 구성하며,
    상기 제1 파티션의 실행과 동시에 상기 제2 파티션을 실행하도록 상기 제2 그래픽 처리 엔진 타일을 구성하고,
    상기 제1 파티션의 실행이 완료되기 전에, 상기 제1 파티션의 실행을 상기 제1 그래픽 처리 엔진 타일로부터 제 3 그래픽 처리 엔진 타일로 마이그레이션(migrate)하기 위한 트리거를 수신하고,
    상기 제3 그래픽 처리 엔진 타일을 통해 상기 제1 파티션의 적어도 일부를 실행하는
    데이터 처리 시스템.
  19. 제18항에 있어서,
    상기 제1 파티션의 실행을 마이그레이션하는 것은 제1 그래픽 처리 엔진 타일로부터 상기 제 3 그래픽 처리 엔진 타일로 상기 제1 파티션의 파티션 식별자를 원자적으로(atomically) 재할당하는 것을 포함하는
    데이터 처리 시스템.
  20. 제19항에 있어서,
    상기 그래픽 프로세서는 상기 제1 파티션의 실행을 시작하기 전에, 상기 제1 파티션의 실행을 마이그레이션하는
    데이터 처리 시스템.
KR1020190152819A 2019-01-09 2019-11-26 분산형 그래픽 디바이스에서의 작업부하 스케줄링 및 분배 KR20200086613A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/243,624 US10997686B2 (en) 2019-01-09 2019-01-09 Workload scheduling and distribution on a distributed graphics device
US16/243,624 2019-01-09

Publications (1)

Publication Number Publication Date
KR20200086613A true KR20200086613A (ko) 2020-07-17

Family

ID=68296356

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020190152819A KR20200086613A (ko) 2019-01-09 2019-11-26 분산형 그래픽 디바이스에서의 작업부하 스케줄링 및 분배

Country Status (5)

Country Link
US (3) US10997686B2 (ko)
EP (2) EP4220405A1 (ko)
JP (1) JP7424803B2 (ko)
KR (1) KR20200086613A (ko)
CN (1) CN111427680A (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023018529A1 (en) * 2021-08-11 2023-02-16 Apple Inc. Logical slot to hardware slot mapping for graphics processors

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10997686B2 (en) 2019-01-09 2021-05-04 Intel Corporation Workload scheduling and distribution on a distributed graphics device
JP2020177073A (ja) * 2019-04-16 2020-10-29 株式会社デンソー 車両用装置、車両用装置の制御方法
KR20220123883A (ko) 2021-03-02 2022-09-13 삼성전자주식회사 컴퓨팅 시스템 및 컴퓨팅 시스템의 동작 방법
US11989594B2 (en) * 2021-08-03 2024-05-21 Samsung Electronics Co., Ltd. Systems, methods, and apparatus for associating computational device functions with compute engines
EP4160423B1 (en) * 2021-09-29 2024-01-31 Samsung Electronics Co., Ltd. Memory device, memory device operating method, and electronic device including memory device
KR20230046356A (ko) 2021-09-29 2023-04-06 삼성전자주식회사 메모리 장치, 메모리 장치의 동작 방법, 그리고 메모리 장치를 포함하는 전자 장치
US20240111574A1 (en) * 2022-09-29 2024-04-04 Advanced Micro Devices, Inc. Work Graph Scheduler Implementation

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7629978B1 (en) * 2005-10-31 2009-12-08 Nvidia Corporation Multichip rendering with state control
US8310491B2 (en) * 2007-06-07 2012-11-13 Apple Inc. Asynchronous notifications for concurrent graphics operations
US20120001925A1 (en) * 2010-06-30 2012-01-05 Ati Technologies, Ulc Dynamic Feedback Load Balancing
US8910177B2 (en) 2011-04-14 2014-12-09 Advanced Micro Devices, Inc. Dynamic mapping of logical cores
US9430807B2 (en) * 2012-02-27 2016-08-30 Qualcomm Incorporated Execution model for heterogeneous computing
US20140334701A1 (en) * 2013-05-10 2014-11-13 Korea Advanced Institute Of Science And Technology Method and apparatus for convergence guaranteed image reconstruction
US9563466B2 (en) * 2013-11-05 2017-02-07 Intel Corporation Method and apparatus for supporting programmable software context state execution during hardware context restore flow
US9569811B2 (en) * 2014-06-26 2017-02-14 Qualcomm Incorporated Rendering graphics to overlapping bins
GB2540227B (en) * 2015-12-21 2018-01-17 Imagination Tech Ltd Allocation of tiles to processing engines in a graphics processing system
US20180115496A1 (en) 2016-10-21 2018-04-26 Advanced Micro Devices, Inc. Mechanisms to improve data locality for distributed gpus
GB2579592B (en) * 2018-12-04 2021-03-24 Imagination Tech Ltd Tile Region Protection
US10997686B2 (en) 2019-01-09 2021-05-04 Intel Corporation Workload scheduling and distribution on a distributed graphics device

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023018529A1 (en) * 2021-08-11 2023-02-16 Apple Inc. Logical slot to hardware slot mapping for graphics processors

Also Published As

Publication number Publication date
EP3680774B1 (en) 2023-04-26
JP7424803B2 (ja) 2024-01-30
EP4220405A1 (en) 2023-08-02
US20200219223A1 (en) 2020-07-09
US10997686B2 (en) 2021-05-04
US20210241418A1 (en) 2021-08-05
JP2020113252A (ja) 2020-07-27
US11481864B2 (en) 2022-10-25
CN111427680A (zh) 2020-07-17
EP3680774A1 (en) 2020-07-15
US20230039853A1 (en) 2023-02-09

Similar Documents

Publication Publication Date Title
US11675597B2 (en) Barrier-aware graphics cluster scheduling mechanism
JP7424803B2 (ja) グラフィックス・プロセッサ、コンピュータ・プログラム、記憶媒体、及びコマンド実行方法
US10430189B2 (en) GPU register allocation mechanism
US11650928B2 (en) Cache optimization for graphics systems
US11579878B2 (en) Register sharing mechanism to equally allocate disabled thread registers to active threads
US11775195B2 (en) Distributed copy engine
US10430990B2 (en) Pixel compression mechanism
US20200065073A1 (en) Latency scheduling mechanism
CN111667396A (zh) 用于支持每命令多个遍历器的系统和方法
US11175949B2 (en) Microcontroller-based flexible thread scheduling launching in computing environments
US10691603B2 (en) Cache partitioning mechanism
US10831483B1 (en) Memory mapped virtual doorbell mechanism
US10733693B2 (en) High vertex count geometry work distribution for multi-tile GPUs
WO2019205117A1 (en) Weighted prediction mechanism

Legal Events

Date Code Title Description
A201 Request for examination