KR20210059651A - 내장 메모리 및 컴퓨팅 요소의 오류 검출 및 제어를 행하는 시스템 및 방법 - Google Patents

내장 메모리 및 컴퓨팅 요소의 오류 검출 및 제어를 행하는 시스템 및 방법 Download PDF

Info

Publication number
KR20210059651A
KR20210059651A KR1020200151875A KR20200151875A KR20210059651A KR 20210059651 A KR20210059651 A KR 20210059651A KR 1020200151875 A KR1020200151875 A KR 1020200151875A KR 20200151875 A KR20200151875 A KR 20200151875A KR 20210059651 A KR20210059651 A KR 20210059651A
Authority
KR
South Korea
Prior art keywords
memory
graphics
data
processor
cache
Prior art date
Application number
KR1020200151875A
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 KR20210059651A publication Critical patent/KR20210059651A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0811Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1068Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices in sector programmable memories, e.g. flash disk
    • 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
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0751Error or fault detection not based on redundancy
    • G06F11/0763Error or fault detection not based on redundancy by bit configuration check, e.g. of formats or tags
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1048Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using arrangements adapted for a specific error detection or correction feature
    • G06F11/106Correcting systematically all correctable errors, i.e. scrubbing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1064Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices in cache or content addressable memories
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0891Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using clearing, invalidating or resetting means
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3877Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
    • 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
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1032Reliability improvement, data loss prevention, degraded operation etc
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/30Providing cache or TLB in specific location of a processing system
    • G06F2212/302In image processor or graphics adapter
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/40Specific encoding of data in memory or cache
    • G06F2212/403Error protection encoding, e.g. using parity or ECC codes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/70Details relating to dynamic memory management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Software Systems (AREA)
  • Image Generation (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Advance Control (AREA)

Abstract

캐시 메모리 또는 공유 메모리의 오류 체크 수정 로직을 구비한 그래픽 프로세싱 유닛, 그래픽 멀티 프로세서 또는 그래픽 프로세서를 포함하는 장치가 개시된다. 일 실시예에서, 그래픽 멀티 프로세서는 데이터를 저장하기 위한 캐시 또는 로컬 메모리와, 캐시 또는 로컬 메모리와 통합되거나 이에 연결된 오류 검출 수정 회로를 포함한다. 오류 검출 수정 회로는 캐시 또는 로컬 메모리의 데이터에 대한 태그 판독을 수행해서 오류 검출 수정 정보를 체크하도록 구성된다.

Description

내장 메모리 및 컴퓨팅 요소의 오류 검출 및 제어를 행하는 시스템 및 방법{SYSTEMS AND METHODS FOR ERROR DETECTION AND CONTROL FOR EMBEDDED MEMORY AND COMPUTE ELEMENTS}
관련 출원
본 특허 출원은 35 U.S.C. §119 하에서 2019년 11월 15일에 "SYSTEMS AND METHODS FOR ERROR DETECTION AND CONTROL FOR EMBEDDED MEMORY AND COMPUTE ELEMENTS"란 명칭으로 출원된 Vasanth Ranganathan 등의 미국 가출원 제 62/935,773호(대리인 정리 번호 : AC5169-Z)에 대한 우선권을 주장하며, 이 미국 가출원은 그 전체 개시물이 본원에 참조로서 포함된다.
분야
실시예들은 전반적으로 데이터 프로세싱에 관한 것이고, 보다 구체적으로는 내장 메모리 및 컴퓨팅 요소의 오류 검출 및 제어를 행하는 범용 그래픽 프로세싱 유닛을 통한 데이터 프로세싱에 관한 것이다.
현재 병렬 그래픽 데이터 프로세싱은, 예를 들어, 선형 보간, 테셀레이션, 래스터화, 텍스처 매핑, 깊이 테스트 등과 같은 그래픽 데이터에 대한 특정 동작을 수행하도록 개발된 시스템 및 방법을 포함한다. 전통적으로, 그래픽 프로세서는 그래픽 데이터를 프로세싱하기 위해 고정 기능 컴퓨팅 유닛을 사용했다. 그러나, 최근에는 그래픽 프로세서의 일부가 프로그래밍 가능하게 되어, 이러한 프로세서는 정점 및 프래그먼트 데이터를 처리하기 위한 더 다양한 동작을 지원할 수 있게 되었다.
성능을 더 높이기 위해, 그래픽 프로세서는 일반적으로, 그래픽 파이프 라인의 서로 다른 부분에 걸쳐 가능한 한 많은 그래픽 데이터를 병렬로 처리하려고 시도하는 파이프라이닝과 같은 처리 기술을 구현한다. 단일 명령어, 다중 스레드 (single instruction, multiple thread: SIMT) 아키텍처를 갖는 병렬 그래픽 프로세서는 그래픽 파이프라인에서 병렬 처리의 양을 최대화하도록 설계된다. SIMT 아키텍처에서, 병렬 스레드 그룹은 처리 효율성을 높이기 위해 가능한 한 자주 프로그램 명령어들을 동시에 함께 실행하려고 시도한다. SIMT 아키텍처를 위한 소프트웨어 및 하드웨어에 대한 일반적인 개요는 Shane Cook, CUDA 프로그래밍 3 장, 37-51 페이지(2013)에서 찾을 수 있다.
본 실시예들의 위에서 언급된 특징들이 상세하게 이해될 수 있도록, 위에서 간략히 요약된 실시예들의 보다 구체적인 설명이 실시예를 참조하여 이루어질 수 있는데, 이들 중 일부는 첨부된 도면에 도시된다. 그러나, 첨부된 도면은 전형적인 실시예만을 도시하며, 따라서 그 범위를 제한하는 것으로 간주되어서는 안된다는 점에 유의해야 한다.
도 1은 본 명세서에 설명된 실시예들의 하나 이상의 양태를 구현하도록 구성된 컴퓨터 시스템을 도시하는 블록도이다.
도 2a 내지 도 2d는 병렬 프로세서 컴포넌트를 도시한다.
도 3a 내지 도 3c는 그래픽 멀티프로세서 및 멀티프로세서 기반 GPU의 블록도이다.
도 4a 내지 도 4f는 복수의 GPU가 복수의 멀티-코어 프로세서에 통신 가능하게 연결되는 예시적 아키텍처를 도시한다.
도 5는 그래픽 프로세싱 파이프라인을 도시한다.
도 6은 머신 학습 소프트웨어 스택을 도시한다.
도 7은 범용 그래픽 프로세싱 유닛을 도시한다.
도 8은 멀티 GPU 컴퓨팅 시스템을 도시한다.
도 9a 및 도 9b는 예시적 심층 신경망의 계층을 도시한다.
도 10은 예시적 순환 신경망을 도시한다.
도 11은 심층 신경망의 훈련 및 배치를 도시한다.
도 12a는 분산 학습을 도시하는 블록도이다.
도 12b는 프로그래밍 가능 네트워크 인터페이스 및 데이터 프로세싱 유닛을 도시하는 블록도이다.
도 13은 훈련된 모델을 사용하여 추론을 수행하기에 적합한 예시적 추론 시스템 온 칩(SOC)을 도시한다.
도 14는 프로세싱 시스템의 블록도이다.
도 15a 내지 도 15c는 컴퓨팅 시스템 및 그래픽 프로세서를 도시한다.
도 16a 내지 도 16c는 추가 그래픽 프로세서 및 컴퓨팅 가속기 아키텍처의 블록도를 도시한다.
도 17은 그래픽 프로세서의 그래픽 프로세싱 엔진의 블록도이다.
도 18a 및 도 18b는 그래픽 프로세서 코어에 사용되는 프로세싱 요소들의 어레이를 포함하는 스레드 실행 로직을 도시한다.
도 19는 추가 실행 유닛을 도시한다.
도 20은 그래픽 프로세서 명령어 포맷을 도시하는 블록도이다.
도 21은 추가 그래픽 프로세서 아키텍처의 블록도이다.
도 22a 및 도 22b는 그래픽 프로세서 커맨드 포맷 및 커맨드 시퀀스를 도시한다.
도 23은 데이터 프로세싱 시스템을 위한 예시적 그래픽 소프트웨어 아키텍처를 도시한다.
도 24a는 IP 코어 개발 시스템을 도시하는 블록도이다.
도 24b는 집적 회로 패키지 어셈블리의 측단면도를 도시한다.
도 24c는 기판(예컨대, 베이스 다이)에 접속된 하드웨어 로직 칩렛의 다수의 유닛을 포함하는 패키지 어셈블리를 도시한다.
도 24d는 교환 가능한 칩렛을 포함하는 패키지 어셈블리를 도시한다.
도 25는 칩 집적 회로 상의 예시적 시스템을 도시하는 블록도이다.
도 26a 및 도 26b는 SoC 내에서 사용하기 위한 예시적 그래픽 프로세서를 도시하는 블록도이다.
도 27은 일 실시예에 따른 그래픽 프로세싱 유닛, 그래픽 멀티프로세서 또는 그래픽 프로세서의 캐시 메모리 또는 공유 메모리에 대한 오류 검사 메커니즘의 예시적인 동작 시퀀스를 포함하는 방법(2700)을 도시한다.
도 28은 일 실시예에 따른 그래픽 프로세싱 유닛, 그래픽 멀티 프로세서, 그래픽 프로세서, 또는 시스템 온 칩을 가진 칩 상에 있는 오류 검출 및 수정 회로(2800)의 블록도를 도시한다.
도 29a는 일 실시예에 따른 GPU 칩렛(chiplet) 상에 적층된 메모리 구조를 포함하는 집적 회로 패키지 어셈블리를 도시한다.
도 29b는 일 실시예에 따른 GPU 칩렛 상에 적층된 메모리 구조를 포함하는 집적 회로 패키지 어셈블리를 예시한다.
도 30은 일 실시예에 따른, 그래픽 프로세싱 유닛, 그래픽 멀티프로세서, 또는 그래픽 프로세서의 오류 정보를 수집하고 그 반복 메모리 구조를 검출하는 예시적인 동작 시퀀스를 갖는 컴퓨터 구현 방법(3000)을 도시한다.
또 다른 실시예에서, 도 31은 오류가 발생한 프로세싱 리소스(예를 들어, 컴퓨팅 요소, 프로세싱 유닛, 처리 엔진, 실행 리소스, 실행 유닛(EU)(508A-N, 509A-N, 600, 852A-B), 스트림 프로세서, 스트리밍 멀티 프로세서(SM), 그래픽 멀티 프로세서(325, 350), 멀티 코어 그룹(1965A~1965N), 컴퓨팅 유닛, 그래픽스 코어 넥스트의 컴퓨팅 유닛, 로직 유닛, 기능 유닛, FPU 등)를, 일부 제어 흐름(예를 들어, 하드웨어 FSM, 마이크로 컨트롤러 등의 제어 흐름)을 비활성화시킴으로써 제거하는 예시적인 동작 시퀀스를 갖는 컴퓨터 구현 방법을 도시한다.
다른 실시예에서, 도 32는 패리티 또는 ECC를 사용해서 메모리 요소(예를 들어, 캐시, L1 캐시, L2 캐시, 공유 메모리)에서 오류를 검출하고, 오류 정보를 프로세싱 리소스(예를 들어, 컴퓨팅 요소, 프로세싱 유닛, 처리 엔진, 실행 리소스, 실행 유닛(EU)(508A-N, 509A-N, 600, 852A-B), 스트림 프로세서, 스트리밍 멀티 프로세서(SM), 그래픽 멀티 프로세서(325, 350), 멀티 코어 그룹(1965A~1965N), 컴퓨팅 유닛, 그래픽스 코어 넥스트의 컴퓨팅 유닛, 로직 유닛, 기능 유닛, FPU 등)으로 전파하는 예시적인 동작 시퀀스를 갖는 컴퓨터 구현 방법을 도시한다.
시스템 개요
그래픽 프로세싱 유닛(GPU)은, 예를 들어, 그래픽 동작, 머신 학습 동작, 패턴 분석 동작, 및/또는 다양한 범용 GPU(GPGPU) 기능을 가속화하기 위해 호스트/프로세서 코어에 통신 가능하게 연결된다. GPU는 버스 또는 다른 상호 접속(예컨대, PCIe 또는 NVLink와 같은 고속 상호 접속)을 통해 호스트 프로세서/코어에 통신 가능하게 연결될 수 있다. 대안적으로, GPU는 코어와 동일한 패키지 또는 칩 상에 통합될 수 있고, 내부 프로세서 버스/상호 접속(즉, 패키지 또는 칩 내부)을 통해 코어에 통신 가능하게 연결될 수 있다. GPU가 접속되는 방식에 관계없이, 프로세서 코어는 작업 설명자에 포함된 커맨드/명령어 시퀀스의 형태로 작업을 GPU에 할당할 수 있다. 그런 다음 GPU는 전용 회로/로직을 사용하여 이러한 커맨드/명령어를 효율적으로 프로세싱한다.
다음 설명에서, 보다 완전한 이해를 제공하기 위해 다수의 특정 세부사항이 설명된다. 그러나, 본 명세서에 설명된 실시예가 이들 특정 세부사항 중 하나 이상 없이 실시될 수 있다는 것이 당업자에게 명백할 것이다. 다른 경우에, 본 실시예의 세부사항을 모호하게 하는 것을 피하기 위해 공지된 특징은 설명되지 않았다.
시스템 개요
도 1은 본 명세서에 설명된 실시예들의 하나 이상의 양태를 구현하도록 구성된 컴퓨팅 시스템(100)을 도시하는 블록도이다. 컴퓨팅 시스템(100)은, 메모리 허브(105)를 포함할 수 있는 상호 접속 경로를 통해 통신하는 하나 이상의 프로세서(들)(102) 및 시스템 메모리(104)를 갖는 프로세싱 서브시스템(101)을 포함한다. 메모리 허브(105)는 칩셋 컴포넌트 내의 개별 컴포넌트이거나 또는 하나 이상의 프로세서(들)(102) 내에 통합될 수 있다. 메모리 허브(105)는 통신 링크(106)를 통해 I/O 서브시스템(111)과 연결된다. I/O 서브시스템(111)은, 컴퓨팅 시스템(100)이 하나 이상의 입력 장치(들)(108)로부터 입력을 수신하는 것을 가능하게할 수 있는 I/O 허브(107)를 포함한다. 부가적으로, I/O 허브(107)는, 하나 이상의 프로세서(들)(102)에 포함될 수 있는 디스플레이 제어기가 하나 이상의 디스플레이 장치(들)(110A)에 출력을 제공하는 것을 가능하게 할 수 있다. 일 실시예에서, I/O 허브(107)와 연결된 하나 이상의 디스플레이 장치(들)(110A)는 로컬, 내부 또는 내장형 디스플레이 장치를 포함할 수 있다.
프로세싱 서브시스템(101)은, 예를 들어, 버스 또는 다른 통신 링크(113)를 통해 메모리 허브(105)에 연결된 하나 이상의 병렬 프로세서(들)(112)를 포함한다. 통신 링크(113)는, 임의의 수의 표준 기반 통신 링크 기술 또는 프로토콜(예컨대, PCI Express, 그러나 이에 제한되지는 않음) 중 하나일 수 있거나, 또는 공급자 특정 통신 인터페이스 또는 통신 패브릭일 수 있다. 하나 이상의 병렬 프로세서(들)(112)는, MIC(many integrated core) 프로세서와 같은 다수의 프로세싱 코어 및/또는 프로세싱 클러스터를 포함할 수 있는 계산적으로 집중된 병렬 또는 벡터 프로세싱 시스템을 형성할 수 있다. 예를 들어, 하나 이상의 병렬 프로세서(들)(112)는 I/O 허브(107)를 통해 연결된 하나 이상의 디스플레이 장치(들)(110A) 중 하나에 픽셀을 출력할 수 있는 그래픽 프로세싱 서브시스템을 형성한다. 하나 이상의 병렬 프로세서(들)(112)는 또한 하나 이상의 디스플레이 장치(들)(110B)에 대한 직접 접속을 가능하게 하는 디스플레이 제어기 및 디스플레이 인터페이스(도시하지 않음)를 포함할 수 있다.
I/O 서브시스템(111) 내에서, 시스템 저장 유닛(114)은 I/O 허브(107)에 접속되어 컴퓨팅 시스템(100)을 위한 저장 메커니즘을 제공할 수 있다. I/O 스위치(116)는, I/O 허브(107)와 다른 컴포넌트(예컨대, 플랫폼에 통합될 수 있는 네트워크 어댑터(118) 및/또는 무선 네트워크 어댑터(119)와, 하나 이상의 애드인(add-in) 장치(들)(120)를 통해 추가될 수 있는 다양한 다른 장치) 간의 접속을 가능하게 하는 인터페이스 메커니즘을 제공하는 데 사용될 수 있다. 애드인 장치(들)(120)는 또한, 예를 들어, 하나 이상의 외부 그래픽 프로세서 장치, 그래픽 카드 및/또는 컴퓨팅 가속기를 포함할 수 있다. 네트워크 어댑터(118)는 이더넷 어댑터 또는 다른 유선 네트워크 어댑터일 수 있다. 무선 네트워크 어댑터(119)는 Wi-Fi, 블루투스, NFC(near field communication), 또는 하나 이상의 무선 라디오를 포함하는 다른 네트워크 장치 중 하나 이상을 포함할 수 있다.
컴퓨팅 시스템(100)은, USB 또는 다른 포트 접속, 광학 저장 드라이브, 비디오 캡처 장치 등을 포함하고 또한 I/O 허브(107)에도 접속될 수 있는 명시적으로 도시되지 않은 다른 컴포넌트를 포함할 수 있다. 도 1의 다양한 컴포넌트를 상호 접속하는 통신 경로는, PCI(Peripheral Component Interconnect) 기반 프로토콜(예컨대, PCI-Express) 또는 임의의 다른 버스 또는 지점 간 통신 인터페이스 및/또는 프로토콜(들)(예컨대, NV-Link 고속 상호 접속, CXLTM(Compute Express LinkTM)(예컨대, CXL.mem), IF(Infinity Fabric), 이더넷(IEEE 802.3), RDMA(remote direct memory access), 인피니밴드(InfiniBand), iWARP(Internet Wide Area RDMA Protocol), TCP(Transmission Control Protocol), UDP(User Datagram Protocol), QUIC(quick UDP Internet Connections), RoCE(RDMA over Converged Ethernet), 인텔 QPI(QuickPath Interconnect), 인텔 UPI(Ultra Path Interconnect), IOSF(Intel On-Chip System Fabric), 옴니패스(Omnipath), 하이퍼트랜스포트(HyperTransport), AMBA(Advanced Microcontroller Bus Architecture) 상호 접속, OpenCAPI, Gen-Z, CCIX(Cache Coherent Interconnect for Accelerators), 3GPP LTE(Long Term Evolution)(4G), 3GPP 5G, 및 그 파생품, 또는 당업계에 알려진 유선 또는 무선 상호 접속 프로토콜)과 같은 임의의 적절한 프로토콜을 사용하여 구현될 수 있다. 일부 실시예에서, 데이터는 NVMe-oF(NVMe(non-volatile memory express) over Fabrics) 또는 NVMe와 같은 프로토콜을 사용하여 가상화된 저장 노드에 복사되거나 저장될 수 있다.
하나 이상의 병렬 프로세서(들)(112)는 예를 들어 비디오 출력 회로를 포함하는 그래픽 및 비디오 프로세싱에 최적화된 회로를 포함할 수 있고, 그래픽 프로세싱 유닛(GPU)을 구성한다. 대안적으로 또는 부가적으로, 하나 이상의 병렬 프로세서(들)(112)는, 본 명세서에 더 상세히 설명되는 기본 계산 아키텍처를 보존하면서 범용 프로세싱에 최적화된 회로를 포함할 수 있다. 컴퓨팅 시스템(100)의 컴포넌트들은 단일 집적 회로 상에서 하나 이상의 다른 시스템 요소와 통합될 수 있다. 예를 들어, 하나 이상의 병렬 프로세서(들)(112), 메모리 허브(105), 프로세서(들)(102), 및 I/O 허브(107)는 시스템 온 칩(SoC) 집적 회로에 통합될 수 있다. 대안적으로, 컴퓨팅 시스템(100)의 컴포넌트들은 단일 패키지로 통합되어 시스템 인 패키지(system in package: SIP) 구성을 형성할 수 있다. 일 실시예에서, 컴퓨팅 시스템(100)의 컴포넌트들의 적어도 일부는 멀티-칩 모듈(MCM)로 통합될 수 있는데, 이는 모듈형 컴퓨팅 시스템에서 다른 멀티-칩 모듈과 상호 접속될 수 있다.
본 명세서에 도시된 컴퓨팅 시스템(100)은 예시적이며 변형 및 수정이 가능하다는 것이 인식될 것이다. 브리지의 수 및 배열, 프로세서(들)(102)의 수, 및 병렬 프로세서(들)(112)의 수를 포함하는 접속 토폴로지는 원하는대로 수정될 수 있다. 예를 들어, 시스템 메모리(104)는 브리지를 통하지 않고 직접 프로세서(들)(102)에 접속될 수 있는 반면, 다른 장치는 메모리 허브(105) 및 프로세서(들)(102)를 통해 시스템 메모리(104)와 통신한다. 다른 대안적 토폴로지에서, 병렬 프로세서(들)(112)는, 메모리 허브(105) 대신, I/O 허브(107)에 접속되거나, 하나 이상의 프로세서(들)(102) 중 하나에 직접 접속된다. 다른 실시예에서, I/O 허브는(107) 및 메모리 허브(105)는 단일 칩으로 통합될 수 있다. 병렬 프로세서(들)(112)의 둘 이상의 인스턴스와 연결될 수 있는 멀티 소켓을 통해 둘 이상의 프로세서(들)(102) 세트가 부착되는 것도 가능하다.
본 명세서에 도시된 특정 컴포넌트 중 일부는 선택적이며 컴퓨팅 시스템(100)의 모든 구현에 포함되지 않을 수 있다. 예를 들어, 임의의 수의 애드인 카드 또는 주변 장치가 지원될 수 있거나 일부 컴포넌트는 제거될 수 있다. 또한, 일부 아키텍처는 도 1에 도시된 것과 유사한 컴포넌트에 대해 상이한 용어를 사용할 수 있다. 예를 들어, 메모리 허브(105)는 일부 아키텍처에서 노스-브리지(Northbridge)로 지칭될 수 있는 반면, I/O 허브(107)는 사우스-브리지(Southbridge)로 지칭될 수 있다.
도 2a는 병렬 프로세서(200)를 도시한다. 병렬 프로세서(200)는 GPU, GPGPU 또는 본 명세서에 설명된 이와 유사한 것일 수 있다. 병렬 프로세서(200)의 다양한 컴포넌트는, 프로그래밍 가능 프로세서, ASIC(application specific integrated circuit), 또는 FPGA(field programmable gate array)와 같은 하나 이상의 집적 회로 장치를 사용하여 구현될 수 있다. 도시된 병렬 프로세서(200)는 도 1에 도시된 병렬 프로세서(들)(112)이거나 그 중 하나일 수 있다.
병렬 프로세서(200)는 병렬 프로세싱 유닛(202)을 포함한다. 병렬 프로세싱 유닛은 병렬 프로세싱 유닛(202)의 다른 인스턴스를 포함하는 다른 장치와의 통신을 가능하게 하는 I/O 유닛(204)을 포함한다. I/O 유닛(204)은 다른 장치에 직접 접속될 수 있다. 예를 들어, I/O 유닛(204)은 메모리 허브(105)와 같은 허브 또는 스위치 인터페이스의 사용을 통해 다른 장치와 접속된다. 메모리 허브(105)와 I/O 유닛(204) 사이의 접속은 통신 링크(113)를 형성한다. 병렬 프로세싱 유닛(202) 내에서, I/O 유닛(204)은 호스트 인터페이스(206) 및 메모리 크로스바(216)와 접속되는데, 호스트 인터페이스(206)는 프로세싱 동작을 수행하도록 지시하는 커맨드를 수신하고 메모리 크로스바(216)는 메모리 동작을 수행하도록 지시하는 커맨드를 수신한다.
호스트 인터페이스(206)가 I/O 유닛(204)을 통해 커맨드 버퍼를 수신할 경우, 호스트 인터페이스(206)는 이러한 커맨드를 수행하는 작업 동작을 프론트 엔드(208)에 지시할 수 있다. 일 실시예에서, 프론트 엔드(208)는 스케줄러(210)와 연결되는데, 스케줄러(210)는 커맨드 또는 다른 작업 항목을 프로세싱 클러스터 어레이(212)에 분배하도록 구성된다. 스케줄러(210)는 프로세싱 클러스터 어레이(212)의 프로세싱 클러스터에 태스크가 분배되기 전에 유효 상태에서 프로세싱 클러스터 어레이(212)가 적절하게 구성되는 것을 보장한다. 스케줄러(210)는 마이크로컨트롤러 상에서 실행되는 펌웨어 로직을 통해 구현될 수 있다. 마이크로컨트롤러로 구현된 스케줄러(210)는 복잡한 스케줄링 및 작업 분배 동작을 거칠고 세밀한 단위(coarse and fine granularity)로 수행하도록 구성되어, 프로세싱 클러스터 어레이(212) 상에서 실행되는 스레드의 신속한 선점 및 컨텍스트 전환을 가능하게 한다. 바람직하게는, 호스트 소프트웨어는 다수의 그래픽 프로세싱 초인종(doorbell) 중 하나를 통해 프로세싱 클러스터 어레이(212)의 스케줄링에 대한 워크로드를 입증할 수 있다. 다른 예에서는, 수행될 작업의 이용 가능성을 식별하거나 표시하기 위해 새로운 워크로드 또는 인터럽트에 대한 폴링(polling)이 사용될 수 있다. 그런 다음, 워크로드는 스케줄러 마이크로컨트롤러 내의 스케줄러(210) 로직에 의해 프로세싱 어레이(212)에 걸쳐 자동으로 분산될 수 있다.
프로세싱 클러스터 어레이(212)는 최대 "N"개의 프로세싱 클러스터(예컨대, 클러스터 214A, 클러스터 214B 내지 클러스터 214N)를 포함할 수 있다. 프로세싱 클러스터 어레이(212)의 각각의 클러스터(214A-214N)는 다수의 동시 스레드를 실행할 수 있다. 스케줄러(210)는, 프로그램 또는 계산에 대해 발생하는 워크로드에 따라 달라질 수 있는 다양한 스케줄링 및/또는 작업 분배 알고리즘을 사용하여 프로세싱 클러스터 어레이(212)의 클러스터(214A-214N)에 작업을 할당할 수 있다. 스케줄링은 스케줄러(210)에 의해 동적으로 처리될 수 있거나, 프로세싱 클러스터 어레이(212)에 의해 실행되도록 구성된 프로그램 로직의 컴파일 동안 컴파일러 로직에 의해 부분적으로 지원될 수 있다. 선택적으로, 프로세싱 클러스터 어레이(212)의 상이한 클러스터(214A-214N)는 상이한 타입의 프로그램을 프로세싱하거나 상이한 타입의 계산을 수행하도록 할당될 수 있다.
프로세싱 클러스터 어레이(212)는 다양한 타입의 병렬 프로세싱 동작을 수행하도록 구성될 수 있다. 예를 들어, 프로세싱 클러스터 어레이(212)는 범용 병렬 컴퓨팅 동작을 수행하도록 구성된다. 예를 들어, 프로세싱 클러스터 어레이(212)는 비디오 및/또는 오디오 데이터의 필터링, 물리 동작을 포함하는 모델링 동작의 수행, 데이터 변환의 수행을 포함하는 프로세싱 태스크를 실행하는 로직을 포함할 수 있다.
프로세싱 클러스터 어레이(212)는 병렬 그래픽 프로세싱 동작을 수행하도록 구성된다. 병렬 프로세서(200)가 그래픽 프로세싱 동작을 수행하도록 구성되는 이러한 실시예에서, 프로세싱 클러스터 어레이(212)는 이러한 그래픽 프로세싱 동작의 실행을 지원하기 위한 추가 로직을 포함할 수 있는데, 이는 텍스처 동작을 수행하는 텍스처 샘플링 로직, 테셀레이션 로직(tessellation logic) 및 다른 정점 프로세싱 로직을 포함하지만 이에 제한되지 않는다. 또한, 프로세싱 클러스터 어레이(212)는 정점 셰이더(vertex shader), 테셀레이션 셰이더(tessellation shader), 기하 셰이더, 및 픽셀 셰이더와 같은(그러나 이에 제한되지 않음) 그래픽 프로세싱 관련 셰이더 프로그램을 실행하도록 구성될 수 있다. 병렬 프로세싱 유닛(202)은 프로세싱을 위해 시스템 메모리로부터 I/O 유닛(204)을 통해 데이터를 전송할 수 있다. 프로세싱 중에, 전송된 데이터는 온칩 메모리(예컨대, 병렬 프로세서 메모리(222))에 저장될 수 있고, 다음에 시스템 메모리에 다시 기록될 수 있다.
병렬 프로세싱 유닛(202)이 그래픽 프로세싱을 수행하는 데 사용되는 실시예에서, 스케줄러(210)는 프로세싱 워크로드를 대략 동일한 크기의 태스크로 분할하여, 프로세싱 클러스터 어레이(212)의 다수의 클러스터(214A-214N)로의 그래픽 프로세싱 동작의 더 양호한 분배를 가능하게 하도록 구성될 수 있다. 이러한 실시예들 중 일부에서, 프로세싱 클러스터 어레이(212)의 부분들은 상이한 타입의 프로세싱을 수행하도록 구성될 수 있다. 예를 들어, 제 1 부분은 정점 셰이딩 및 토폴로지 생성을 수행하도록 구성되고, 제 2 부분은 테셀레이션 및 기하 셰이딩을 수행하도록 구성되고, 제 3 부분은 픽셀 셰이딩 또는 다른 스크린 공간 동작을 수행하도록 구성되어, 디스플레이를 위한 렌더링된 이미지를 생성할 수 있다. 클러스터(214A-214N) 중 하나 이상에 의해 생성된 중간 데이터는 추가 프로세싱을 위해 중간 데이터가 클러스터(214A-214N) 간에 전송될 수 있도록 버퍼에 저장될 수 있다.
동작 중에, 프로세싱 클러스터 어레이(212)는, 프론트 엔드(208)로부터 프로세싱 태스크를 정의하는 커맨드를 수신하는 스케줄러(210)를 통해, 실행될 프로세싱 태스크를 수신할 수 있다. 그래픽 프로세싱 동작의 경우, 프로세싱 태스크는, 데이터 프로세싱 방법(예컨대, 실행될 프로그램)을 정의하는 상태 파라미터 및 커맨드뿐 아니라, 프로세싱될 데이터(예컨대, 표면 (패치) 데이터, 원시 데이터, 정점 데이터 및/또는 픽셀 데이터)의 인덱스를 포함할 수 있다. 스케줄러(210)는 프론트 엔드(208)로부터 인덱스를 수신하거나 태스크에 대응하는 인덱스를 페치(fetch)하도록 구성될 수 있다. 프론트 엔드(208)는, 들어오는 커맨드 버퍼(예컨대, 배치 버퍼, 푸시 버퍼 등)에 의해 지정된 워크로드가 시작되기 전에 유효 상태에서 프로세싱 클러스터 어레이(212)가 구성되는 것을 보장하도록 구성될 수 있다.
병렬 프로세싱 유닛(202)의 하나 이상의 인스턴스의 각각은 병렬 프로세서 메모리(222)와 연결될 수 있다. 병렬 프로세서 메모리(222)는, 프로세싱 클러스터 어레이(212) 및 I/O 유닛(204)으로부터 메모리 요청을 수신할 수 있는 메모리 크로스바(216)를 통해 액세스될 수 있다. 메모리 크로스바(216)는 메모리 인터페이스(218)를 통해 병렬 프로세서 메모리(222)에 액세스할 수 있다. 메모리 인터페이스(218)는, 병렬 프로세서 메모리(222)의 한 부분(예컨대, 메모리 유닛)에 각각 연결될 수 있는 다수의 파티션 유닛(예컨대, 파티션 유닛 220A, 파티션 유닛 220B 내지 파티션 유닛 220N)을 포함할 수 있다. 파티션 유닛(220A-220N)의 수는 메모리 유닛의 수와 동일하도록 구성될 수 있어, 제 1 파티션 유닛(220A)은 대응하는 제 1 메모리 유닛(224A)을 갖고, 제 2 파티션 유닛(220B)은 대응하는 제 2 메모리 유닛(224B)을 가지며, 제 N 파티션 유닛(220N)은 대응하는 제 N 메모리 유닛(224N)을 갖는다. 다른 실시예에서, 파티션 유닛(220A-220N)의 수는 메모리 장치의 수와 동일하지 않을 수 있다.
메모리 유닛(224A-224N)은, GDDR(graphics double data rate) 메모리를 포함하는 SGRAM(synchronous graphics random access memory)과 같은 그래픽 랜덤 액세스 메모리 또는 DRAM(dynamic random access memory)을 포함하는 다양한 타입의 메모리 장치를 포함할 수 있다. 선택적으로, 메모리 유닛(224A-224N)은 또한, 고 대역폭 메모리(high bandwidth memory: HBM)를 포함하지만 이에 제한되지 않는 3D 스택형 메모리를 포함할 수 있다. 당업자는 메모리 유닛(224A-224N)의 특정 구현이 다양할 수 있고 다양한 종래 설계 중 하나로부터 선택될 수 있다는 것을 이해할 것이다. 프레임 버퍼 또는 텍스처 맵과 같은 렌더링 타겟은 메모리 유닛(224A-224N)에 걸쳐 저장될 수 있으며, 이는 파티션 유닛(220A-220N)으로 하여금 각 렌더링 타겟의 일부를 병렬로 기록하여 병렬 프로세서 메모리(222)의 가용 대역폭을 효율적으로 사용할 수 있게 한다. 일부 실시예에서, 병렬 프로세서 메모리(222)의 로컬 인스턴스는, 로컬 캐시 메모리와 함께 시스템 메모리를 이용하는 통합형 메모리 설계를 위해 제외될 수 있다.
선택적으로, 프로세싱 클러스터 어레이(212)의 클러스터(214A-214N) 중 임의의 하나는 병렬 프로세서 메모리(222) 내의 임의의 메모리 유닛(224A-224N)에 기록될 데이터를 프로세싱하는 능력을 갖는다. 메모리 크로스바(216)는 각 클러스터(214A-214N)의 출력을, 임의의 파티션 유닛(220A-220N)으로, 또는 출력에 대해 추가 프로세싱 동작을 수행할 수 있는 다른 클러스터(214A-214N)로 전송하도록 구성될 수 있다. 각각의 클러스터(214A-214N)는 다양한 외부 메모리 장치로부터 판독하거나 그에 기록하기 위해 메모리 크로스바(216)를 통해 메모리 인터페이스(218)와 통신할 수 있다. 메모리 크로스바(216)를 갖는 실시예들 중 하나에서, 메모리 크로스바(216)는, I/O 유닛(204)과 통신하기 위한 메모리 인터페이스(218)에 대한 접속뿐만 아니라 병렬 프로세서 메모리(222)의 로컬 인스턴스에 대한 접속을 갖는데, 이는 상이한 프로세싱 클러스터(214A-214N) 내의 프로세싱 유닛으로 하여금 병렬 프로세싱 유닛(202)에 대해 로컬이 아닌 시스템 메모리 또는 다른 메모리와 통신하는 것을 가능하게 한다. 일반적으로, 메모리 크로스바(216)는 예를 들어 클러스터(214A-214N)와 파티션 유닛(220A-220N) 사이의 트래픽 스트림을 분리하기 위해 가상 채널을 사용할 수 있다.
병렬 프로세서(200) 내에는 병렬 프로세싱 유닛(202)의 단일 인스턴스가 예시되어 있지만, 병렬 프로세싱 유닛(202)의 임의의 수의 인스턴스가 포함될 수 있다. 예를 들어, 병렬 프로세싱 유닛(202)의 다수의 인스턴스가 단일 애드인 카드 상에 제공될 수 있거나, 다수의 애드인 카드가 상호 접속될 수 있다. 예를 들어, 병렬 프로세서(200)는 도 1의 애드인 장치(120)와 같은 애드인 장치일 수 있는데, 이는 하나 이상의 GPU, 하나 이상의 메모리 장치, 장치 대 장치 또는 네트워크 또는 패브릭 인터페이스를 포함하는 개별 그래픽 카드와 같은 그래픽 카드일 수 있다. 병렬 프로세싱 유닛(202)의 상이한 인스턴스는, 상이한 인스턴스가 상이한 수의 프로세싱 코어, 상이한 양의 로컬 병렬 프로세서 메모리 및/또는 다른 구성 차이를 갖는 경우에도, 상호 동작하도록 구성될 수 있다. 선택적으로, 병렬 프로세싱 유닛(202)의 일부 인스턴스는 다른 인스턴스에 비해 더 높은 정밀도의 부동 소수점 유닛을 포함할 수 있다. 병렬 프로세싱 유닛(202)의 하나 이상의 인스턴스 또는 병렬 프로세서(200)를 포함하는 시스템은, 데스크탑, 랩탑 또는 핸드헬드 개인용 컴퓨터, 서버, 워크스테이션, 게임 콘솔, 및/또는 내장형 시스템을 포함하지만 이에 제한되지 않는 다양한 구성 및 폼 팩터로 구현될 수 있다. 오케스트레이터(orchestrator)는 분리된 프로세서 리소스, 캐시 리소스, 메모리 리소스, 스토리지 리소스 및 네트워킹 리소스 중 하나 이상을 사용하여 워크로드 수행을 위한 복합 노드를 형성할 수 있다.
도 2b는 파티션 유닛(220)의 블록도이다. 파티션 유닛(220)은 도 2a의 파티션 유닛(220A-220N) 중 하나의 인스턴스일 수 있다. 도시된 바와 같이, 파티션 유닛(220)은 L2 캐시(221), 프레임 버퍼 인터페이스(225), 및 ROP(raster operations unit)(226)를 포함한다. L2 캐시(221)는 메모리 크로스바(216) 및 ROP(226)로부터 수신된 로딩 및 저장 동작(load and store operations)을 수행하도록 구성된 판독/기록 캐시이다. 판독 실패 및 긴급 기록 되돌림 요청(read misses and urgent write-back requests)은 프로세싱을 위해 L2 캐시(221)에 의해 프레임 버퍼 인터페이스(225)로 출력된다. 프로세싱을 위해 프레임 버퍼 인터페이스(225)를 통해 프레임 버퍼로 업데이트가 전송될 수도 있다. 일 실시예에서, 프레임 버퍼 인터페이스(225)는 도 2a의 메모리 유닛(224A-224N)(예컨대, 병렬 프로세서 메모리(222) 내에 있음)과 같은 병렬 프로세서 메모리의 메모리 유닛들 중 하나와 인터페이스한다. 부가적으로 또는 대안적으로, 파티션 유닛(220)은 메모리 제어기(도시하지 않음)를 통해 병렬 프로세서 메모리 내의 메모리 유닛들 중 하나와 인터페이스할 수 있다.
그래픽 애플리케이션에서, ROP(226)는 스텐실(stencil), z 테스트, 블렌딩 등과 같은 래스터 동작을 수행하는 프로세싱 유닛이다. 이 때, ROP(226)는 그래픽 메모리에 저장되는 프로세싱된 그래픽 데이터를 출력한다. 일부 실시예에서, ROP(226)는, 메모리 또는 L2 캐시(221)에 기록되는 깊이 또는 컬러 데이터를 압축하고 메모리 또는 L2 캐시(221)로부터 판독되는 깊이 또는 컬러 데이터를 압축 해제하는 압축 로직을 포함하거나, 압축 로직을 포함하는 CODEC(227)과 연결된다. 압축 로직은 다수의 압축 알고리즘 중 하나 이상을 사용하는 무손실 압축 로직일 수 있다. CODEC(227)에 의해 수행되는 압축의 타입은 압축될 데이터의 통계적 특성에 따라 달라질 수 있다. 예를 들어, 일 실시예에서는, 깊이 및 컬러 데이터에 대한 델타 컬러 압축이 타일 단위로 수행된다. 일 실시예에서, CODEC(227)은 머신 학습 동작과 연관된 컴퓨팅 데이터를 압축 및 압축 해제할 수 있는 압축 및 압축 해제 로직을 포함한다. 예를 들어, CODEC(227)은 희소(sparse) 학습 동작을 위해 희소 매트릭스 데이터를 압축할 수 있다. CODEC(227)은 또한, 희소 매트릭스 포맷(예컨대, 좌표 목록 인코딩(COO), 압축된 희소 행(CSR), 압축된 희소 열 (CSC) 등)으로 인코딩된 희소 매트릭스 데이터를 압축하여 압축 및 인코딩된 희소 매트릭스 데이터를 생성할 수 있다. 압축 및 인코딩된 희소 매트릭스 데이터는 프로세싱 요소에 의해 처리되기 전에 압축 해제 및/또는 디코딩될 수 있거나, 프로세싱 요소는 프로세싱을 위해 압축되거나 인코딩된 또는 압축 및 인코딩된 데이터를 소비하도록 구성될 수 있다.
ROP(226)는 파티션 유닛(220) 내에 있지 않고 각각의 프로세싱 클러스터(예컨대, 도 2a의 클러스터(214A-214N)) 내에 포함될 수 있다. 이러한 실시예에서는, 픽셀 프래그먼트 데이터 대신에, 픽셀 데이터에 대한 판독 및 기록 요청이 메모리 크로스바(216)를 통해 전송된다. 프로세싱된 그래픽 데이터는 도 1의 하나 이상의 디스플레이 장치(들)(110) 중 하나와 같은 디스플레이 장치 상에 디스플레이되거나, 프로세서(들)(102)에 의한 추가 프로세싱을 위해 라우팅되거나, 도 2a의 병렬 프로세서(200) 내의 프로세싱 엔티티 중 하나에 의한 추가 프로세싱을 위해 라우팅될 수 있다.
도 2c는 병렬 프로세싱 유닛 내의 프로세싱 클러스터(214)의 블록도이다. 예를 들어, 프로세싱 클러스터는 도 2a의 프로세싱 클러스터(214A-214N) 중 하나의 인스턴스이다. 프로세싱 클러스터(214)는 많은 스레드를 병렬로 실행하도록 구성될 수 있는데, 여기서 "스레드"라는 용어는 특정 입력 데이터 세트에 대해 실행되는 특정 프로그램의 인스턴스를 지칭한다. 선택적으로, 다수의 독립 명령어 유닛을 제공하지 않으면서 다수의 스레드의 병렬 실행을 지원하기 위해, 단일-명령어, 다중-데이터(single-instruction, multiple-data: SIMD) 명령어 발행 기술이 사용될 수 있다. 대안적으로, 프로세싱 클러스터들의 각 클러스터 내의 프로세싱 엔진 세트에 명령어를 발행하도록 구성된 공통 명령어 유닛을 사용하여, 일반적으로 동기화된 다수의 스레드의 병렬 실행을 지원하기 위해, 단일-명령어, 다중-스레드(single-instruction, multiple-thread: SIMT) 기술이 사용될 수 있다. 모든 프로세싱 엔진이 일반적으로 동일한 명령어를 실행하는 SIMD 실행 체제와 달리, SIMT 실행은 상이한 스레드가 주어진 스레드 프로그램을 통해 발산형 실행 경로를 더 쉽게 따라갈 수 있게 한다. 당업자는 SIMD 프로세싱 체제가 SIMT 프로세싱 체제의 기능적 서브 세트를 나타낸다는 것을 이해할 것이다.
프로세싱 클러스터(214)의 동작은 프로세싱 태스크를 SIMT 병렬 프로세서에 분배하는 파이프라인 관리자(232)를 통해 제어될 수 있다. 파이프라인 관리자(232)는 도 2a의 스케줄러(210)로부터 명령어를 수신하고, 그래픽 멀티프로세서(234) 및/또는 텍스처 유닛(236)을 통해 이러한 명령어의 실행을 관리한다. 도시된 그래픽 멀티프로세서(234)는 SIMT 병렬 프로세서의 예시적 인스턴스이다. 그러나, 상이한 아키텍처의 다양한 타입의 SIMT 병렬 프로세서가 프로세싱 클러스터(214) 내에 포함될 수 있다. 프로세싱 클러스터(214) 내에는 그래픽 멀티프로세서(234)의 하나 이상의 인스턴스가 포함될 수 있다. 그래픽 멀티프로세서(234)는 데이터를 프로세싱할 수 있고, 데이터 크로스바(240)는 프로세싱된 데이터를 다른 셰이더 유닛을 포함하는 가능한 다수의 목적지 중 하나에 분배하는 데 사용될 수 있다. 파이프라인 관리자(232)는 데이터 크로스바(240)를 통해 분배될 프로세싱된 데이터에 대한 목적지를 지정함으로써 프로세싱된 데이터의 분배를 용이하게할 수 있다.
프로세싱 클러스터(214) 내의 각각의 그래픽 멀티프로세서(234)는 동일한 기능적 실행 로직 세트(예컨대, 산술 로직 유닛, 로딩-저장 유닛 등)를 포함할 수 있다. 기능적 실행 로직은 이전 명령어가 완료되기 전에 새 명령어가 발행될 수 있는 파이프라인 방식으로 구성될 수 있다. 기능적 실행 로직은 정수 및 부동 소수점 산술, 비교 연산, 부울 연산, 비트 시프팅, 다양한 대수 함수 계산을 포함한 다양한 연산을 지원한다. 동일한 기능성-유닛 하드웨어가 상이한 동작을 수행하기 위해 활용될 수 있고, 기능적 유닛의 임의의 조합이 존재할 수 있다.
프로세싱 클러스터(214)로 전송된 명령어는 스레드를 구성한다. 병렬 프로세싱 엔진 세트에 걸쳐 실행되는 스레드 세트는 스레드 그룹이다. 스레드 그룹은 상이한 입력 데이터에 대해 동일한 프로그램을 실행한다. 스레드 그룹 내의 각 스레드는 그래픽 멀티프로세서(234) 내의 상이한 프로세싱 엔진에 할당될 수 있다. 스레드 그룹은 그래픽 멀티프로세서(234) 내의 프로세싱 엔진의 수보다 더 적은 스레드를 포함할 수 있다. 스레드 그룹이 프로세싱 엔진의 수보다 더 적은 스레드를 포함하는 경우, 프로세싱 엔진들 중 하나 이상은 스레드 그룹이 프로세싱되는 주기 동안 유휴 상태일 수 있다. 스레드 그룹은 또한 그래픽 멀티프로세서(234) 내의 프로세싱 엔진의 수보다 더 많은 스레드를 포함할 수 있다. 스레드 그룹이 그래픽 멀티프로세서(234) 내의 프로세싱 엔진의 수보다 더 많은 스레드를 포함하는 경우, 프로세싱은 연속적인 클록 주기에 걸쳐 수행될 수 있다. 선택적으로, 다수의 스레드 그룹이 그래픽 멀티프로세서(234) 상에서 동시에 실행될 수 있다.
그래픽 멀티프로세서(234)는 로딩 및 저장 동작을 수행하기 위한 내부 캐시 메모리를 포함할 수 있다. 선택적으로, 그래픽 멀티프로세서(234)는 내부 캐시를 포기하고 프로세싱 클러스터(214) 내의 캐시 메모리(예컨대, 레벨 1(L1) 캐시(248))를 사용할 수 있다. 각 그래픽 멀티프로세서(234)는 또한, 모든 프로세싱 클러스터(214) 사이에서 공유되고 스레드 사이에서 데이터를 전송하는 데 사용될 수 있는 파티션 유닛(예컨대, 도 2a의 파티션 유닛(220A-220N)) 내의 레벨 2(L2) 캐시에 액세스할 수 있다. 그래픽 멀티프로세서(234)는 또한, 로컬 병렬 프로세서 메모리 및/또는 시스템 메모리 중 하나 이상을 포함할 수 있는 오프-칩 글로벌 메모리에 액세스할 수 있다. 병렬 프로세싱 유닛(202) 외부의 임의의 메모리는 글로벌 메모리로 사용될 수 있다. 프로세싱 클러스터(214)가 그래픽 멀티프로세서(234)의 다수의 인스턴스를 포함하는 실시예는, L1 캐시(248)에 저장될 수 있는 공통 명령어 및 데이터를 공유할 수 있다.
각각의 프로세싱 클러스터(214)는 가상 주소를 물리 주소에 매핑하도록 구성되는 MMU(memory management unit)(245)를 포함할 수 있다. 다른 실시예에서는, MMU(245)의 하나 이상의 인스턴스가 도 2a의 메모리 인터페이스(218) 내에 상주할 수 있다. MMU(245)는 가상 주소를 타일의 물리 주소 및 선택적으로 캐시 라인 인덱스에 매핑하는 데 사용되는 페이지 테이블 엔트리(page table entry: PTE) 세트를 포함한다. MMU(245)는 주소 TLB(translation lookaside buffer) 또는 캐시를 포함할 수 있는데, 이는 그래픽 멀티프로세서(234) 또는 L1 캐시 또는 프로세싱 클러스터(214) 내에 상주할 수도 있다. 물리 주소는 파티션 유닛들 간의 효율적인 요청 인터리빙을 허용하기 위해 표면 데이터 액세스 국부성을 분배하도록 프로세싱된다. 캐시 라인 인덱스는 캐시 라인에 대한 요청이 히트(hit)인지 미스(miss)인지를 결정하는 데 사용될 수 있다.
그래픽 및 컴퓨팅 애플리케이션에서, 프로세싱 클러스터(214)는, 각각의 그래픽 멀티프로세서(234)가 텍스처 매핑 동작(예컨대, 텍스처 샘플 위치 결정, 텍스처 데이터 판독, 및 텍스처 데이터 필터링)을 수행하는 텍스처 유닛(236)에 연결되도록 구성될 수 있다. 텍스처 데이터는 내부 텍스처 L1 캐시(도시하지 않음)로부터 판독되거나 또는 일부 실시예에서는 그래픽 멀티프로세서(234) 내의 L1 캐시로부터 판독되고, 필요에 따라, L2 캐시, 로컬 병렬 프로세서 메모리, 또는 시스템 메모리로부터 페치된다. 각각의 그래픽 멀티프로세서(234)는, 프로세싱된 태스크를 추가 프로세싱을 위해 다른 프로세싱 클러스터(214)에 제공하거나 프로세싱된 태스크를 메모리 크로스바(216)를 통해 L2 캐시, 로컬 병렬 프로세서 메모리, 또는 시스템 메모리에 저장하기 위해, 프로세싱된 태스크를 데이터 크로스바(240)로 출력한다. PreROP(242)(pre-raster operations unit)는 그래픽 멀티프로세서(234)로부터 데이터를 수신하고, 데이터를 본 명세서에 설명된 파티션 유닛(예컨대, 도 2a의 파티션 유닛(220A-220N)과 함께 위치할 수 있는 ROP 유닛으로 전달하도록 구성된다. PreROP(242) 유닛은 컬러 블랜딩을 위한 최적화를 수행하고, 픽셀 컬러 데이터를 구성하고, 주소 변환을 수행할 수 있다.
본 명세서에 설명된 코어 아키텍처는 예시적이며 변형 및 수정이 가능하다는 것이 이해될 것이다. 임의의 수의 프로세싱 유닛, 예컨대, 그래픽 멀티프로세서(234), 텍스처 유닛(236), PreROP(242) 등이 프로세싱 클러스터(214) 내에 포함될 수 있다. 또한, 하나의 프로세싱 클러스터(214)만이 도시되지만, 본 명세서에 설명된 병렬 프로세싱 유닛은 프로세싱 클러스터(214)의 임의의 수의 인스턴스를 포함할 수 있다. 선택적으로, 각각의 프로세싱 클러스터(214)는 분리된 개별 프로세싱 유닛, L1 캐시, L2 캐시 등을 사용하여 다른 프로세싱 클러스터(214)와 독립적으로 동작하도록 구성될 수 있다.
도 2d는 그래픽 멀티프로세서(234)가 프로세싱 클러스터(214)의 파이프라인 관리자(232)와 연결되는 그래픽 멀티프로세서(234)의 예를 도시한다. 그래픽 멀티프로세서(234)는, 명령어 캐시(252), 명령어 유닛(254), 주소 매핑 유닛(256), 레지스터 파일(258), 하나 이상의 범용 그래픽 프로세싱 유닛(general purpose graphics processing unit: GPGPU) 코어(262), 및 하나 이상의 로딩/저장 유닛(266)을 포함하지만 이에 제한되지 않는 실행 파이프라인을 갖는다. GPGPU 코어(262) 및 로딩/저장 유닛(266)은 메모리 및 캐시 상호 접속부(268)를 통해 캐시 메모리(272) 및 공유 메모리(270)와 연결된다. 그래픽 멀티프로세서(234)는 매트릭스 및/또는 광선 추적 동작을 가속화하기 위한 하드웨어 로직을 포함하는 텐서(tensor) 및/또는 광선 추적 코어(263)를 추가로 포함할 수 있다.
명령어 캐시(252)는 파이프라인 관리자(232)로부터 실행할 명령어 스트림을 수신할 수 있다. 명령어는 명령어 캐시(252)에 캐시되고 명령어 유닛(254)에 의해 실행을 위해 디스패치된다. 명령어 유닛(254)은 명령어를 스레드 그룹(예컨대, 워프(warps))으로서 디스패치할 수 있는데, 스레드 그룹의 각 스레드는 GPGPU 코어(262) 내의 상이한 실행 유닛에 할당된다. 명령어는 통합형 주소 공간 내에서 주소를 지정함으로써, 로컬, 공유 또는 글로벌 주소 공간 중 임의의 것에 액세스할 수 있다. 주소 매핑 유닛(256)은 통합형 주소 공간의 주소를 로딩/저장 유닛(266)에 의해 액세스될 수 있는 개별 메모리 주소로 변환하는 데 사용될 수 있다.
레지스터 파일(258)은 그래픽 멀티프로세서(234)의 기능적 유닛에 대한 레지스터 세트를 제공한다. 레지스터 파일(258)은 기능적 유닛(예컨대, GPGPU 코어(262), 로딩/저장 유닛(266))의 데이터 경로에 접속된 피연산자를 위한 임시 스토리지를 제공한다. 레지스터 파일(258)은 각 기능적 유닛이 레지스터 파일(258)의 전용 부분에 할당되도록 각각의 기능적 유닛 사이에서 분할될 수 있다. 예를 들어, 레지스터 파일(258)은 그래픽 멀티프로세서(234)에 의해 실행되고 있는 상이한 워프들 사이에서 분할될 수 있다.
GPGPU 코어(262)는 그래픽 멀티프로세서(234)의 명령어를 실행하는 데 사용되는 부동 소수점 유닛(floating point unit: FPU) 및/또는 정수 산술 로직 유닛(arithmetic logic unit: ALU)을 각각 포함할 수 있다. 일부 구현예에서, GPGPU 코어(262)는 하드웨어 로직을 포함할 수 있는데, 이는 텐서 및/또는 광선 추적 코어(263) 내에 상주할 수도 있다. GPGPU 코어(262)는 아키텍처가 유사하거나 상이할 수 있다. 예를 들어, 일 실시예에서, GPGPU 코어(262)의 제 1 부분은 단정밀도 FPU 및 정수 ALU를 포함하는 반면, GPGPU 코어의 제 2 부분은 배정밀도 FPU를 포함한다. 선택적으로, FPU는 부동 소수점 산술을 위한 IEEE 754-2008 표준을 구현하거나 가변 정밀도 부동 소수점 산술을 가능하게할 수 있다. 그래픽 멀티프로세서(234)는 카피(copy) 직사각형 또는 픽셀 블렌딩 동작과 같은 특정 기능을 수행하는 하나 이상의 고정 기능 또는 특수 기능 유닛을 추가로 포함할 수 있다. GPGPU 코어들 중 하나 이상은 또한 고정 또는 특수 기능 로직을 포함할 수 있다.
GPGPU 코어(262)는 다수의 데이터 세트에 대해 단일 커맨드를 수행할 수 있는 SIMD 로직을 포함할 수 있다. 선택적으로, GPGPU 코어(262)는 SIMD4, SIMD8 및 SIMD16 명령어를 물리적으로 실행할 수 있고, SIMD1, SIMD2 및 SIMD32 명령어를 논리적으로 실행할 수 있다. GPGPU 코어에 대한 SIMD 명령어는 컴파일 시간에 셰이더 컴파일러에 의해 생성되거나, SPMD(single program multiple data) 또는 SIMT 아키텍처를 위해 작성 및 컴파일된 프로그램을 실행할 때 자동으로 생성될 수 있다. SIMT 실행 모델을 위해 구성된 프로그램의 다수의 스레드는 단일 SIMD 명령어를 통해 실행될 수 있다. 예를 들어, 일 실시예에서는, 동일하거나 유사한 동작을 수행하는 8개의 SIMT 스레드가 단일 SIMD8 로직 유닛을 통해 병렬로 실행될 수 있다.
메모리 및 캐시 상호 접속부(268)는 그래픽 멀티프로세서(234)의 기능적 유닛 각각을 레지스터 파일(258) 및 공유 메모리(270)에 접속하는 상호 접속 네트워크이다. 예를 들어, 메모리 및 캐시 상호 접속부(268)는, 로딩/저장 유닛(266)으로 하여금 공유 메모리(270)와 레지스터 파일(258) 사이에서 로딩 및 저장 동작을 구현할 수 있게 하는 크로스바 상호 접속부이다. 레지스터 파일(258)은 GPGPU 코어(262)와 동일한 주파수에서 동작할 수 있으므로, GPGPU 코어(262)와 레지스터 파일(258) 사이의 데이터 전송은 매우 낮은 대기 시간(latency)을 갖는다. 공유 메모리(270)는 그래픽 멀티프로세서(234) 내의 기능적 유닛에서 실행되는 스레드들 사이의 통신을 가능하게 하는 데 사용될 수 있다. 캐시 메모리(272)는 예를 들어 기능적 유닛과 텍스처 유닛(236) 사이에서 통신되는 텍스처 데이터를 캐시하기 위해 데이터 캐시로서 사용될 수 있다. 공유 메모리(270)는 또한 관리되고 캐시된 프로그램으로서 사용될 수 있다. 공유 메모리(270) 및 캐시 메모리(272)는 데이터 크로스바(240)에 연결되어서 프로세싱 클러스터의 다른 컴포넌트와 통신할 수 있다. GPGPU 코어(262) 상에서 실행되는 스레드는, 캐시 메모리(272) 내에 저장되는 자동 캐시된 데이터에 추가하여, 공유 메모리 내에 프로그램적으로 데이터를 저장할 수 있다.
도 3a 내지 도 3c는 실시예에 따른 추가 그래픽 멀티프로세서를 도시한다. 도 3a 및 도 3b는 그래픽 멀티프로세서(325, 350)를 도시하는데, 이는 도 2c의 그래픽 멀티프로세서(234)와 관련되고 이들 중 하나를 대신하여 사용될 수 있다. 따라서, 본원에서 그래픽 멀티 프로세서(234)와 조합된 임의의 특징의 개시는 또한 그래픽 멀티 프로세서(들)(325, 350)와의 대응하는 조합을 개시하지만, 이에 제한되지는 않는다. 도 3c는 그래픽 멀티프로세서(325, 350)에 대응하는 멀티-코어 그룹(365A-365N)으로 배열된 전용 그래픽 프로세싱 리소스 세트를 포함하는 그래픽 프로세싱 유닛(GPU)(380)을 도시한다. 도시된 그래픽 멀티프로세서(325, 350) 및 멀티-코어 그룹(365A-365N)은 다수의 실행 스레드를 동시에 실행할 수 있는 스트리밍 멀티프로세서(SM)일 수 있다.
도 3a의 그래픽 멀티프로세서(325)는 도 2d의 그래픽 멀티프로세서(234)에 대한 실행 리소스 유닛의 다수의 추가 인스턴스를 포함한다. 예를 들어, 그래픽 멀티프로세서(325)는 명령어 유닛(332A-332B), 레지스터 파일(334A-334B) 및 텍스처 유닛(들)(344A-344B)의 다수의 인스턴스를 포함할 수 있다. 그래픽 멀티프로세서(325)는 또한, 다수의 그래픽 또는 컴퓨팅 실행 유닛(예컨대, GPGPU 코어(336A-336B), 텐서 코어(337A-337B), 광선 추적 코어(338A-338B)) 세트 및 다수의 로딩/저장 유닛(340A-340B) 세트를 포함한다. 실행 리소스 유닛은 공통 명령어 캐시(330), 텍스처 및/또는 데이터 캐시 메모리(342), 및 공유 메모리(346)를 갖는다.
다양한 컴포넌트는 상호 접속 패브릭(327)을 통해 통신할 수 있다. 상호 접속 패브릭(327)은 그래픽 멀티프로세서(325)의 다양한 컴포넌트 사이의 통신을 가능하게 하는 하나 이상의 크로스바 스위치를 포함한다. 상호 접속 패브릭(327)은, 그래픽 멀티프로세서(325)의 각 컴포넌트가 적층되는 개별적인 고속 네트워크 패브릭 계층일 수 있다. 그래픽 멀티프로세서(325)의 컴포넌트는 상호 접속 패브릭(327)을 통해 원격 컴포넌트와 통신한다. 예를 들어, 코어(336A-336B, 337A-337B 및 338A-338B)는 각각 상호 접속 패브릭(327)을 통해 공유 메모리(346)와 통신할 수 있다. 상호 접속 패브릭(327)은 컴포넌트들 간의 공정한 대역폭 할당을 보장하기 위해 그래픽 멀티프로세서(325) 내의 통신을 중재할 수 있다.
도 3b의 그래픽 프로세서는 다수의 실행 리소스(356A-356D) 세트를 포함하는데, 각각의 실행 리소스 세트는 도 2d 및 도 3a에 도시된 바와 같이 다수의 명령어 유닛, 레지스터 파일, GPGPU 코어, 및 로딩 저장 유닛을 포함한다. 실행 리소스(356A-356D)는 명령어 캐시(354) 및 공유 메모리(353)를 공유하면서 텍스처 동작을 위해 텍스처 유닛(들)(360A-360D)과 협력하여 작동할 수 있다. 예를 들어, 실행 리소스(356A-356D)는 명령어 캐시(354) 및 공유 메모리(353)뿐만 아니라 텍스처 및/또는 데이터 캐시 메모리(358A-358B)의 다수의 인스턴스를 공유할 수 있다. 다양한 컴포넌트는 도 3a의 상호 접속 패브릭(327)과 유사한 상호 접속 패브릭(352)을 통해 통신할 수 있다.
당업자는 도 1, 도 2a 내지 도 2d 및 도 3a 및 도 3b에 설명된 아키텍처가 서술적(descriptive)이며 본 실시예의 범위를 제한하지 않음을 이해할 것이다. 따라서, 본 명세서에 설명된 기술은, 본 명세서에 설명된 실시예의 범위에서 벗어나지 않으면서, 하나 이상의 모바일 애플리케이션 프로세서, 멀티-코어 CPU를 포함하는 하나 이상의 데스크탑 또는 서버 중앙 프로세싱 디바이유닛(CPU), 도 2a의 병렬 프로세싱 유닛(202)과 같은 하나 이상의 병렬 프로세싱 유닛, 및 하나 이상의 그래픽 프로세서 또는 특수 목적 프로세싱 유닛을 포함하지만 이에 제한되지 않는 임의의 적절하게 구성된 프로세싱 유닛 상에서 구현될 수 있다.
본 명세서에 설명된 병렬 프로세서 또는 GPGPU는, 그래픽 동작, 머신 학습 동작, 패턴 분석 동작, 및 다양한 범용 GPU(GPGPU) 기능을 가속화하기 위해 호스트/프로세서 코어에 통신 가능하게 연결될 수 있다. GPU는 버스 또는 다른 상호 접속(예컨대, PCIe 또는 NVLink, 또는 다른 공지된 프로토콜, 표준화된 프로토콜, 또는 독점적 프로토콜와 같은 고속 상호 접속)을 통해 호스트 프로세서/코어에 통신 가능하게 연결될 수 있다. 다른 실시예에서, GPU는 코어와 동일한 패키지 또는 칩 상에 통합될 수 있고 내부 프로세서 버스/상호 접속(즉, 패키지 또는 칩 내부)을 통해 코어에 통신 가능하게 연결될 수 있다. GPU가 접속되는 방식에 관계없이, 프로세서 코어는 작업 설명자에 포함된 커맨드/명령어 시퀀스의 형태로 GPU에 작업을 할당할 수 있다. 그런 다음, GPU는 이러한 커맨드/명령어를 효율적으로 프로세싱하기 위해 전용 회로/로직을 사용한다.
도 3c는 멀티-코어 그룹(365A-365N)으로 배열된 전용 그래픽 프로세싱 리소스 세트를 포함하는 그래픽 프로세싱 유닛(GPU)(380)을 도시한다. 단일 멀티-코어 그룹(365A)의 세부사항만이 제공되지만, 다른 멀티-코어 그룹(365B-365N)은 동일하거나 유사한 그래픽 프로세싱 리소스 세트를 갖출 수 있음이 이해될 것이다. 멀티-코어 그룹(365A-365N)에 대해 설명된 세부사항은 또한 본 명세서에 설명된 임의의 그래픽 멀티프로세서(234, 325, 350)에 적용될 수 있다.
도시된 바와 같이, 멀티-코어 그룹(365A)은 그래픽 코어(370) 세트, 텐서 코어(371) 세트 및 광선 추적 코어(372) 세트를 포함할 수 있다. 스케줄러/디스패처(368)는 다양한 코어(370, 371, 372) 상에서의 실행을 위해 그래픽 스레드를 스케줄링하고 디스패치한다. 레지스터 파일(369) 세트는 그래픽 스레드를 실행할 때 코어(370, 371, 372)에 의해 사용되는 피연산자 값을 저장한다. 이들은, 예를 들어, 정수 값을 저장하기 위한 정수 레지스터, 부동 소수점 값을 저장하기 위한 부동 소수점 레지스터, 패킹된 데이터 요소(정수 및/또는 부동 소수점 데이터 요소)를 저장하기 위한 벡터 레지스터, 및 텐서/매트릭스 값을 저장하기 위한 타일 레지스터를 포함할 수 있다. 타일 레지스터는 벡터 레지스터의 결합된 세트로서 구현될 수 있다.
하나 이상의 결합된 레벨 1(L1) 캐시 및 공유 메모리 유닛(373)은 각각의 멀티-코어 그룹(365A) 내에 국부적으로 텍스쳐 데이터, 정점(vertex) 데이터, 픽셀 데이터, 광선 데이터, 경계 볼륨 데이터 등과 같은 그래픽 데이터를 저장한다. 하나 이상의 텍스처 유닛(374)은 또한 텍스처 매핑 및 샘플링과 같은 텍스처링 동작을 수행하기 위해 사용될 수 있다. 멀티-코어 그룹(365A-365N)의 전부 또는 일부에 의해 공유되는 레벨 2(L2) 캐시(375)는 복수의 동시 그래픽 스레드에 대한 그래픽 데이터 및/또는 명령어를 저장한다. 도시된 것과 같이, L2 캐시(375)는 복수의 멀티-코어 그룹(365A-365N)에 걸쳐 공유될 수 있다. 하나 이상의 메모리 제어기(367)는 GPU(380)를 시스템 메모리(예컨대, DRAM) 및/또는 전용 그래픽 메모리(예컨대, GDDR6 메모리)일 수 있는 메모리(366)에 연결한다.
입력/출력(I/O) 회로(363)는 GPU(380)를 디지털 신호 프로세서(DSP), 네트워크 제어기 또는 사용자 입력 장치와 같은 하나 이상의 I/O 장치(362)에 연결한다. I/O 장치(362)를 GPU(380) 및 메모리(366)에 연결하기 위해 온-칩 상호 접속부가 사용될 수 있다. I/O 회로(363)의 하나 이상의 I/O 메모리 관리 유닛(IOMMU)(364)은 I/O 장치(362)를 시스템 메모리(366)에 직접 연결한다. 선택적으로, IOMMU(364)는 가상 주소를 시스템 메모리(366)의 물리 주소에 매핑하기 위해 페이지 테이블의 복수의 세트를 관리한다. 그러면, I/O 장치(362), CPU(들)(361), GPU(들)(380)는 동일한 가상 주소 공간을 공유할 수 있다.
IOMMU(364)의 일 구현예에서, IOMMU(364)는 가상화를 지원한다. 이 경우, 게스트/그래픽 가상 주소를 게스트/그래픽 물리 주소에 매핑하기 위해 페이지 테이블의 제 1 세트를 관리하고, 게스트/그래픽 물리 주소를 (시스템 메모리(366) 내의) 시스템/호스트 물리 주소에 매핑하기 위해 페이지 테이블의 제 2 세트를 관리할 수 있다. 페이지 테이블의 제 1 및 제 2 세트 각각의 기본 주소는 제어 레지스터에 저장될 수 있고, 컨텍스트 스위치 상에서 교환(swapped out)될 수 있다(예컨대, 새로운 컨텍스트가 페이지 테이블의 관련된 세트에 대한 액세스에 의해 제공될 수 있다). 도 3c에 도시되지 않았지만, 각각의 코어(370, 371, 372) 및/또는 멀티-코어 그룹(365A-365N)은 게스트 가상으로부터 게스트 물리로의 변환, 게스트 물리로부터 호스트 물리로의 변환, 및 게스트 가상으로부터 호스트 물리로의 변환을 캐싱하기 위한 TLB(translation lookaside buffer)를 포함할 수 있다.
CPU(361), GPU(380) 및 I/O 장치(362)는 단일 반도체 칩 및/또는 칩 패키지 상에 통합될 수 있다. 도시된 메모리(366)는 동일한 칩 상에 통합될 수 있거나 또는 오프 칩 인터페이스를 통해 메모리 제어기(367)에 연결될 수 있다. 일 구현예에서, 메모리(366)는 다른 물리 시스템-레벨 메모리와 동일한 가상 주소 공간을 공유하는 GDDR6 메모리를 포함하지만, 본 명세서에 설명된 기본 원리는 이러한 특정 구현예로 제한되지 않는다.
텐서 코어(371)는 매트릭스 연산을 수행하도록 특별히 설계된 복수의 실행 유닛을 포함할 수 있는데, 이는 딥 러닝(deep learning) 동작을 수행하는데 사용되는 기본 컴퓨팅 동작이다. 예를 들어, 동시 매트릭스 곱셈 동작은 신경망 훈련 및 추론에 사용될 수 있다. 텐서 코어(371)는 단-정밀도(single precision) 부동 소수점(예컨대, 32 비트), 반정밀도(half-precision) 부동 소수점(예컨대, 16 비트), 정수 워드(16 비트), 바이트(8 비트) 및 반-바이트(4 비트)를 포함하는 다양한 피연산자 정밀도를 사용하여 매트릭스 프로세싱을 수행할 수 있다. 예를 들어, 신경망 구현예는 각각의 렌더링된 장면의 특징을 추출하여, 잠재적으로는 복수의 프레임으로부터의 세부 사항을 결합하여, 고품질의 최종 이미지를 구성한다.
딥 러닝 구현예에서, 병렬 매트릭스 곱셈 작업은 텐서 코어(371) 상에서 실행되도록 스케줄링될 수 있다. 특히 신경망의 훈련은 상당한 수의 매트릭스 내적(dot product) 연산을 필요로 한다. 텐서 코어(371)는, N x N x N 매트릭스 곱셈의 내적 공식(inner-product formulation)을 프로세싱하기 위해 적어도 N개의 내적 프로세싱 요소(dot-product processing elements)를 포함할 수 있다. 매트릭스의 곱셈을 시작하기 전에 하나의 전체 매트릭스가 타일 레지스터에 로딩되고, 두 번째 매트릭스의 적어도 하나의 열이 N주기 동안 각 주기마다 로딩된다. 각 주기마다 N개의 내적이 프로세싱된다.
매트릭스 요소는 16 비트 워드, 8 비트 바이트(예컨대, INT8) 및 4 비트 반 바이트(예컨대, INT4)를 포함하는, 특정 구현예에 따른 상이한 정밀도로 저장될 수 있다. 텐서 코어(371)에 대해 상이한 정밀도 모드가 특정되어 상이한 워크로드(예컨대, 바이트 및 반-바이트로의 양자화를 허용할 수 있는 추론 워크로드와 같은)에 대해 가장 효율적인 정밀도가 사용되도록 보장할 수 있다. 지원되는 포맷은 추가로, 64 비트 부동 소수점(FP64)과, bfloat16 포맷(예컨대, Brain 부동 소수점), 1 개의 부호 비트를 갖는 16 비트 부동 소수점 포맷, 8 개의 지수 비트, 8 개의 유효 비트(그 중 7 개는 명시적으로 저장됨)와 같은 비-IEEE 부동 소수점 포맷을 포함한다. 일 실시예는 정밀도가 FP16(10 비트)인 FP32 (8 비트) 범위를 갖는 감소된 정밀도 텐서 부동 포맷(TF32)에 대한 지원을 포함한다. 감소된 정밀도 TF32 동작은 FP32 입력에서 수행될 수 있으며, FP32에 비해 더 높은 성능과 FP16에 비해 향상된 정밀도로 FP32 출력을 생성할 수 있다.
일 실시예에서 텐서 코어(371)는 대부분의 값이 0 인 매트릭스에 대한 희소 동작 모드를 지원한다. 텐서 코어(371)는 희소 매트릭스 표현(예컨대, 좌표 목록 인코딩(COO), 압축된 희소 행(CSR), 압축된 희소 열(CSC) 등)으로 인코딩되는 희소 입력 매트릭스에 대한 지원을 포함한다. 텐서 코어(371)는 또한 희소 매트릭스 표현이 더 압축될 수 있는 경우에 압축된 희소 매트릭스 표현에 대한 지원을 포함한다. 압축되거나 인코딩된 및/또는 압축 및 인코딩된 매트릭스 데이터는 연관된 압축 및/또는 인코딩된 메타 데이터와 함께 텐서 코어(371)에 의해 준비될 수 있고, 0이 아닌 값이 추출될 수 있다. 예를 들어, 주어진 입력 매트릭스 A에 대해, 매트릭스 A의 적어도 일부의 압축 및/또는 인코딩된 표현으로부터 0이 아닌 값이 로딩될 수 있다. 0이 아닌 값과 연관된 인덱스 또는 좌표 메타데이터로부터 결정될 수 있는, 매트릭스 A에서의 0이 아닌 값에 대한 위치에 기초하여, 입력 매트릭스 B에서의 해당 값이 로딩될 수 있다. 수행될 연산(예컨대, 곱하기)에 따라, 해당 값이 0이면 입력 매트릭스 B로부터의 값의 로딩은 우회될 수 있다. 일 실시예에서, 곱하기 연산과 같은 특정 연산에 대한 값의 페어링은 스케줄러 로직에 의해 미리 스캔될 수 있고, 0이 아닌 입력들 사이의 연산 만이 스케줄링된다. 매트릭스 A와 매트릭스 B의 차원과 수행될 연산에 따라, 출력 매트릭스 C는 조밀하거나 희소할 수 있다. 출력 매트릭스 C가 희소한 경우, 텐서 코어(371)의 구성에 따라, 출력 매트릭스 C는 압축된 포맷, 희소 인코딩, 또는 압축된 희소 인코딩으로 출력될 수 있다.
광선 추적 코어(372)는 실시간 광선 추적 및 비실시간 광선 추적 구현예 모두에 대해 광선 추적 동작을 가속화한다. 특히, 광선 추적 코어(372)는 경계 볼륨 계층 구조(BVH)를 사용하여 광선 탐색을 수행하고 BVH 볼륨 내에 둘러싸인 광선과 프리미티브(primitive) 사이의 교차를 식별하는 광선 탐색/교차 회로를 포함할 수 있다. 광선 추적 코어(372)는 또한 깊이(depth) 테스트 및 컬링(culling)(예컨대, Z 버퍼 또는 유사한 배열을 사용함)을 수행하는 회로를 포함할 수 있다. 일 구현예에서, 광선 추적 코어(372)는 본 명세서에서 설명된 이미지 노이즈 제거 기술과 협력하여 탐색 및 교차 동작을 수행하는데, 그 중 적어도 일부는 텐서 코어(371) 상에서 실행될 수 있다. 예를 들어, 텐서 코어(371)는 딥 러닝 신경망을 구현하여 광선 추적 코어(372)에 의해 생성된 프레임의 노이즈 제거를 수행할 수 있다. 그러나, CPU(들)(361), 그래픽 코어(370) 및/또는 광선 추적 코어(372)는 또한 노이즈 제거의 전체 또는 일부 및/또는 딥 러닝 알고리즘을 구현할 수 있다.
또한, 전술한 것과 같이, GPU(380)가 네트워크 또는 고속 상호 접속부를 통해 다른 컴퓨팅 장치에 연결된 컴퓨팅 장치에 존재하는 경우 노이즈 제거에 대한 분산된 접근법이 사용될 수 있다. 이 분산된 접근법에서, 상호 접속된 컴퓨팅 장치는 신경망 학습/훈련 데이터를 공유하여 전체 시스템이 상이한 타입의 이미지 프레임 및/또는 상이한 그래픽 애플리케이션에 대해 노이즈 제거를 수행하도록 학습하는 속도를 향상시킬 수 있다.
광선 추적 코어(372)는 모든 BVH 탐색 및/또는 광선-프리미티브 교차를 프로세싱하여 그래픽 코어(370)가 광선 당 수천 개의 명령어로 과부하되는 것을 방지한다. 예를 들어, 각각의 광선 추적 코어(372)는 경계 박스 테스트(예컨대, 탐색 동작)를 수행하는 특수 회로의 제 1 세트 및/또는 광선-삼각형 교차 테스트(예컨대, 탐색된 광선을 교차시킴)를 수행하는 특수 회로의 제 2 세트를 포함한다. 따라서, 예를 들어, 멀티-코어 그룹(365A)은 단순히 광선 프로브를 발사할 수 있고, 광선 추적 코어(372)는 독립적으로 광선 탐색 및 교차를 수행하고 히트(hit) 데이터(예컨대, 히트, 히트 없음, 복수 히트 등)를 스레드 컨텍스트에 반환한다. 광선 추적 코어(372)가 탐색 및 교차 동작을 수행하는 동안 다른 코어(370, 371)는 다른 그래픽을 수행하거나 또는 작업을 컴퓨팅하기 위해 자유로운 상태가 된다.
선택적으로, 각각의 광선 추적 코어(372)는 BVH 테스트 동작을 수행하는 탐색 유닛 및/또는 광선-프리미티브 교차 테스트를 수행하는 교차 유닛을 포함할 수 있다. 교차 유닛은 "히트", "히트 없음" 또는 "복수 히트" 응답을 생성하여 적절한 스레드에 제공한다. 탐색 및 교차 동작 동안, 다른 코어(예컨대, 그래픽 코어(370) 및 텐서 코어(371))의 실행 리소스는 다른 형태의 그래픽 작업을 수행하기 위해 자유로운 상태가 된다.
후술되는 하나의 선택적 실시예에서는, 작업이 그래픽 코어(370)와 광선 추적 코어(372) 사이에 분산되는 하이브리드 래스터화/광선 추적 접근법이 사용된다.
광선 추적 코어(372)(및/또는 다른 코어(370, 371))는 광선-생성, 최근접 히트, 임의의 히트 및 비교차 셰이더(miss shaders) 뿐만 아니라 DispatchRays 커맨드를 포함하는 Microsoft의 DXR(DirectX Ray Tracing)과 같은 광선 추적 명령어 세트에 대한 하드웨어 지원을 포함할 수 있고, 이로써 각각의 객체에 대해 셰이더 및 텍스처의 고유 세트를 할당할 수 있다. 광선 추적 코어(372), 그래픽 코어(370) 및 텐서 코어(371)에 의해 지원될 수 있는 다른 광선 추적 플랫폼으로는 Vulkan 1.1.85가 있다. 그러나, 본 명세서에 설명된 기본 원리는 임의의 특정 광선 추적 ISA로 제한되지 않는다는 점에 유의해야 한다.
일반적으로, 다양한 코어(372, 371, 370)는 광선 생성, 최근접 히트, 임의의 히트, 광선-프리미티브 교차, 프리미티브별 및 계층 구조적 경계 박스 구성(per-primitive and hierarchical bounding box construction), 비교차(miss), 방문 및 예외 중 하나 이상에 대한 명령어/기능을 포함하는 광선 추적 명령어 세트를 지원할 수 있다. 보다 구체적으로, 바람직한 실시예는 다음 기능들 중 하나 이상을 수행하는 광선 추적 명령어를 포함한다:
광선 생성 - 광선 생성 명령어는 각 픽셀, 샘플 또는 다른 사용자 정의 작업 할당에 대해 실행될 수 있다.
최근접 히트 - 최근접 히트 명령어는 장면 내에서 광선과 프리미티브의 최근접 교차점을 찾기 위해 실행될 수 있다.
임의의 히트 - 임의의 히트 명령어는 잠재적으로 새로운 최근접 교차점을 식별하기 위해 장면 내에서 광선과 프리미티브 사이의 복수의 교차를 식별한다.
교차 - 교차 명령어는 광선-프리미티브 교차 테스트를 수행하고 결과를 출력한다.
프리미티브별 경계 박스 구성(Per-primitive Bounding box Construction) - 이 명령어는 주어진 프리미티브 또는 프리미티브 그룹 주위에 경계 박스를 형성한다(예컨대, 새로운 BVH 또는 다른 가속도 데이터 구조를 형성할 때).
비교차(Miss) - 이것은 광선이 장면 내의 모든 기하 또는 장면의 특정 영역과 교차하지 않는 것을 나타낸다.
방문 - 이것은 광선이 탐색할 자식 볼륨(children volume)을 나타낸다.
예외 - 이것은 다양한 타입의 예외 핸들러(예컨대, 다양한 오류 상태에 대해 호출됨)를 포함한다.
일 실시예에서, 광선 추적 코어(372)는 광선 교차 테스트와 유사한 계산 기술을 사용하여 가속될 수 있는 범용 컴퓨팅 동작을 가속화하도록 구성될 수 있다. 셰이더 프로그램이 광선 추적 코어를 통해 범용 컴퓨팅 동작을 수행하는 저레벨 명령어 및/또는 프리미티브로 컴파일될 수 있게 하는 컴퓨팅 체계가 제공될 수 있다. 광선 추적 코어(372)에서 수행되는 컴퓨팅 동작으로부터 이익을 얻을 수 있는 예시적인 계산 문제는, 좌표 공간 내의 빔, 파동, 광선 또는 입자 전파를 수반하는 계산을 포함한다. 해당 전파와 연관된 상호 작용은 좌표 공간 내의 기하 또는 메시를 기준으로 컴퓨팅될 수 있다. 예를 들어, 환경을 통한 전자기 신호 전파와 연관된 계산은, 광선 추적 코어를 통해 실행되는 명령어 또는 프리미티브를 사용하여 가속화될 수 있다. 환경 내의 물체에 의한 신호의 회절 및 반사는 직접 광선 추적 유추(direct ray-tracing analogies)로서 컴퓨팅될 수 있다.
광선 추적 코어(372)는 또한 광선 추적과 직접적으로 유사하지 않은 계산을 수행하기 위해 사용될 수 있다. 예를 들어, 메시 투영, 메시 정제 및 체적 샘플링 계산은 광선 추적 코어(372)를 사용하여 가속화될 수 있다. 가장 가까운 이웃 계산과 같은 일반적인 좌표 공간 계산도 수행될 수 있다. 예를 들어, 주어진 포인트 근처의 포인트 세트는 포인트 주변의 좌표 공간에 경계 박스를 정의함으로써 발견될 수 있다. 광선 추적 코어(372) 내의 BVH 및 광선 프로브 로직은 경계 박스 내의 포인트 교차 세트를 결정하는 데 사용될 수 있다. 교차는 원점 및 그 원점에 가장 가까운 이웃을 구성한다. 광선 추적 코어(372)를 사용하여 수행되는 계산은 그래픽 코어(370) 및 텐서 코어(371)에서 수행되는 계산과 병렬로 수행될 수 있다. 셰이더 컴파일러는, 컴퓨팅 셰이더 또는 다른 범용 그래픽 프로세싱 프로그램을, 그래픽 코어(370), 텐서 코어(371) 및 광선 추적 코어(372)에 걸쳐 병렬화될 수 있는 저레벨 프리미티브로 컴파일하도록 구성될 수 있다.
GPU-호스트 프로세서의 상호 접속을 위한 기술
도 4a는 복수의 GPU(410-413)(예컨대, 도 2a에 도시된 병렬 프로세서(200))가 고속 링크(440A-440D)(예컨대, 버스, 포인트-투-포인트 상호 접속부 등)를 통해 복수의 멀티-코어 프로세서(405-406)에 통신 가능하게 연결되는 예시적 아키텍처를 도시한다. 고속 링크(440A-440D)는 구현에 따라 4GB/s, 30GB/s, 80GB/s 또는 그 이상의 통신 처리량을 지원할 수 있다. PCIe 4.0 또는 5.0 및 NVLink 2.0을 포함하지만 이에 제한되지 않는 다양한 상호 접속 프로토콜이 사용될 수 있다. 그러나, 본 명세서에 설명된 기본 원리는 임의의 특정 통신 프로토콜 또는 처리량으로 제한되지 않는다.
GPU(410-413) 중 둘 이상은 고속 링크(442A-442B)를 통해 상호 접속될 수 있는데, 이는 고속 링크(440A-440D)에 사용되는 것과 동일하거나 상이한 프로토콜/링크를 사용하여 구현될 수 있다. 유사하게, 멀티-코어 프로세서(405-406) 중 둘 이상은 20GB/s, 30GB/s, 120GB/s 또는 그보다 낮거나 높은 속도에서 동작하는 대칭형 멀티-프로세서(symmetric multi-processor: SMP) 버스일 수 있는 고속 링크(443)를 통해 접속될 수 있다. 대안적으로, 도 4a에 도시된 다양한 시스템 컴포넌트들 간의 모든 통신은 동일한 프로토콜/링크를 사용하여(예컨대, 공통 상호 접속 패브릭을 통해) 달성될 수 있다. 그러나 언급한 바와 같이, 본 명세서에 설명된 기본 원리는 임의의 특정 타입의 상호 접속 기술로 제한되지 않는다.
각각의 멀티-코어 프로세서(405-406)는 각각 메모리 상호 접속부(430A-430B)를 통해 프로세서 메모리(401-402)에 통신 가능하게 연결될 수 있고, 각각의 GPU(410-413)는 각각 GPU 메모리 상호 접속부(450A-450D)를 통해 GPU 메모리(420-423)에 통신 가능하게 연결된다. 메모리 상호 접속부(430A-430B 및 450A-450D)는 동일하거나 상이한 메모리 액세스 기술을 이용할 수 있다. 제한이 아닌 예로서, 프로세서 메모리(401-402) 및 GPU 메모리(420-423)는, DRAM(dynamic random access memory)(스택형 DRAM을 포함함), 그래픽 DDR SDRAM(GDDR)(예컨대, GDDR5, GDDR6), 또는 HBM(High Bandwidth Memory)과 같은 휘발성 메모리일 수 있고/있거나, 3D XPoint/OPtane 또는 Nano-Ram과 같은 비휘발성 메모리일 수 있다. 예를 들어, 메모리의 일부는 휘발성 메모리일 수 있고 다른 일부는 비휘발성 메모리일 수 있다(예컨대, 2-레벨 메모리(2LM) 계층 구조를 사용함). 본 명세서에 설명된 메모리 서브시스템은 JEDEC(Joint Electronic Device Engineering Council)에 의해 발행된 더블 데이터 레이트(Double Data Rate) 버전과 같은 다수의 메모리 기술과 호환될 수 있다.
아래에 설명된 바와 같이, 다양한 프로세서(405-406) 및 GPU(410-413)는 특정 메모리(401-402, 420-423)에 각각 물리적으로 연결될 수 있지만, 동일한 가상 시스템 주소 공간("유효 주소" 공간이라고도 함)이 다양한 물리적 메모리 전체에 분배되는 통합형 메모리 아키텍처가 구현될 수 있다. 예를 들어, 프로세서 메모리(401 내지 402)는 각각 64GB의 시스템 메모리 주소 공간을 포함할 수 있고, GPU 메모리(420-423)는 각각 32GB의 시스템 메모리 주소 공간을 포함할 수 있다(이 예에서는 총 256GB의 어드레서블 메모리를 초래함).
도 4b는 멀티-코어 프로세서(407)와 그래픽 가속 모듈(446) 간의 상호 접속에 대한 선택적인 추가 세부사항을 도시한다. 그래픽 가속 모듈(446)은 고속 링크(440)를 통해 프로세서(407)에 연결되는 라인 카드 상에 통합된 하나 이상의 GPU 칩을 포함할 수 있다. 대안적으로, 그래픽 가속 모듈(446)은 프로세서(407)와 동일한 패키지 또는 칩 상에 통합될 수 있다.
도시된 프로세서(407)는 복수의 코어(460A-460D)를 포함하는데, 복수의 코어(460A-460D)의 각각은 변환 색인 버퍼(461A-461D) 및 하나 이상의 캐시(462A-462D)를 갖는다. 코어는, 본 명세서에 설명된 기본 원리를 모호하게 하는 것을 피하기 위해 도시되지 않은, 명령어를 실행하고 데이터를 프로세싱하기 위한 다양한 다른 컴포넌트(예컨대, 명령어 페치 유닛, 분기 예측 유닛, 디코더, 실행 유닛, 재정렬 버퍼 등)를 포함할 수 있다. 캐시(462A-462D)는 레벨 1(L1) 및 레벨 2(L2) 캐시를 포함할 수 있다. 추가로, 하나 이상의 공유 캐시(456)가 캐싱 계층 구조에 포함될 수 있고 코어(460A-460D) 세트에 의해 공유될 수 있다. 예를 들어, 프로세서(407)의 일 실시예는 자체 L1 캐시, 12 개의 공유 L2 캐시, 및 12 개의 공유 L3 캐시를 각각 갖는 24 개의 코어를 포함한다. 이 실시예에서, L2 캐시와 L3 캐시 중 하나는 2개의 인접한 코어에 의해 공유된다. 프로세서(407) 및 그래픽 가속기 통합 모듈(446)은 프로세서 메모리(401-402)를 포함할 수 있는 시스템 메모리(441)와 접속된다.
일관성 버스(coherence bus)(464)를 통한 코어 간 통신을 통해, 다양한 캐시(462A-462D, 456) 및 시스템 메모리(441)에 저장된 데이터 및 명령어에 대한 일관성이 유지된다. 예를 들어, 각 캐시는, 특정 캐시 라인에 대한 검출된 판독 또는 기록에 응답하여 일관성 버스(464)를 통해 통신하는 자신과 관련된 캐시 일관성 로직/회로를 가질 수 있다. 일 구현예에서는, 일관성 버스(464)를 통해 캐시 액세스를 스누핑하는 캐시 스누핑 프로토콜이 구현된다. 캐시 스누핑/일관성 기술은 당업자에 의해 잘 이해되며, 본 명세서에 설명된 기본 원리를 모호하게 하는 것을 피하기 위해 본 명세서에서 상세히 설명되지 않을 것이다.
그래픽 가속 모듈(446)을 일관성 버스(464)에 통신 가능하게 연결하여, 그래픽 가속 모듈(446)로 하여금 코어의 피어로서 캐시 일관성 프로토콜에 참여할 수 있게 하는 프록시 회로(425)가 제공될 수 있다. 특히, 인터페이스(435)는 고속 링크(440)(예컨대, PCIe 버스, NVLink 등)를 통해 프록시 회로(425)에 대한 접속을 제공하고 인터페이스(437)는 그래픽 가속 모듈(446)을 고속 링크(440)에 접속한다.
일 구현예에서, 가속기 통합 회로(436)는, 그래픽 가속 모듈(446)의 복수의 그래픽 프로세싱 엔진(431, 432, N)을 대신하여, 캐시 관리, 메모리 액세스, 컨텍스트 관리 및 인터럽트 관리 서비스를 제공한다. 그래픽 프로세싱 엔진(431, 432, N)은 각각 별도의 그래픽 프로세싱 유닛(GPU)을 포함할 수 있다. 대안적으로, 그래픽 프로세싱 엔진(431, 432, N)은, 그래픽 실행 유닛, 미디어 프로세싱 엔진(예컨대, 비디오 인코더/디코더), 샘플러, 및 블릿(blit) 엔진과 같은 GPU 내의 상이한 타입의 그래픽 프로세싱 엔진을 포함할 수 있다. 즉, 그래픽 가속 모듈은 복수의 그래픽 프로세싱 엔진(431-432, N)을 갖는 GPU일 수 있거나, 그래픽 프로세싱 엔진(431-432, N)은 공통 패키지, 라인 카드 또는 칩 상에 통합된 개별 GPU일 수 있다.
가속기 통합 회로(436)는 가상-물리 메모리 변환(유효-실제 메모리 변환이라고도 함)과 같은 다양한 메모리 관리 기능 및 시스템 메모리(441)에 액세스하기 위한 메모리 액세스 프로토콜을 수행하기 위한 메모리 관리 유닛(MMU)(439)을 포함할 수 있다. MMU(439)는 또한 가상/유효-물리/실제 주소 변환을 캐싱하기 위한 변환 색인 버퍼(TLB)(도시하지 않음)를 포함할 수 있다. 일 구현예에서, 캐시(438)는 그래픽 프로세싱 엔진(431-432, N)에 의한 효율적인 액세스를 위해 커맨드 및 데이터를 저장한다. 캐시(438) 및 그래픽 메모리(433-434, M)에 저장된 데이터는 코어 캐시(462A-462D, 456) 및 시스템 메모리(441)와 일관되게 유지될 수 있다. 언급한 바와 같이, 이는 캐시(438) 및 메모리(433-434, M) 대신 캐시 일관성 메커니즘(예컨대, 프로세서 캐시(462A-462D, 456) 상의 캐시 라인의 수정/액세스에 관한 업데이트를 캐시(438)에 전송하고 캐시(438)로부터 업데이트를 수신함)에 참여하는 프록시 회로(425)를 통해 달성될 수 있다.
레지스터(445) 세트는 그래픽 프로세싱 엔진(431-432, N)에 의해 실행되는 스레드에 대한 컨텍스트 데이터를 저장하고, 컨텍스트 관리 회로(448)는 스레드 컨텍스트를 관리한다. 예를 들어, 컨텍스트 관리 회로(448)는 컨텍스트 전환(예컨대, 제 1 스레드가 저장되고, 제 2 스레드가 그래픽 프로세싱 엔진에 의해 실행되도록 제 2 스레드가 복원되는 경우) 동안 다양한 스레드의 컨텍스트를 저장 및 복원하는 저장 및 복원 동작을 수행할 수 있다. 예를 들어, 컨텍스트 전환 시에, 컨텍스트 관리 회로(448)는 현재 레지스터 값을 메모리의 지정된 영역(예컨대, 컨텍스트 포인터에 의해 식별됨)에 저장할 수 있다. 그런 다음, 그 컨텍스트로 복귀할 때 레지스터 값을 복원할 수 있다. 인터럽트 관리 회로(447)는 예를 들어 시스템 장치로부터 인터럽트를 수신할 수 있고 수신된 인터럽트를 프로세싱한다.
일 구현예에서, 그래픽 프로세싱 엔진(431)으로부터의 가상/유효 주소는 MMU(439)에 의해 시스템 메모리(441) 내의 실제/물리 주소로 변환된다. 선택적으로, 가속기 통합 회로(436)는, 다수(예컨대, 4, 8, 16)의 그래픽 가속기 모듈(446) 및/또는 다른 가속기 장치를 지원한다. 그래픽 가속기 모듈(446)은 프로세서(407)에서 실행되는 단일 애플리케이션에 전용될 수 있거나 다수의 애플리케이션 간에 공유될 수 있다. 선택적으로, 그래픽 프로세싱 엔진(431-432, N)의 리소스가 다수의 애플리케이션, 가상 머신(VM), 또는 컨테이너와 공유되는 가상화된 그래픽 실행 환경이 제공된다. 리소스는, VM 및/또는 애플리케이션과 관련된 프로세싱 요구 사항 및 우선 순위에 따라 상이한 VM 및/또는 애플리케이션에 할당되는 "슬라이스"로 세분화될 수 있다. VM 및 컨테이너는 본 명세서에서 교환 가능하게 사용될 수 있다.
가상 머신(VM)은 운영 시스템 및 하나 이상의 애플리케이션을 실행하는 소프트웨어일 수 있다. VM은 사양, 구성 파일, 가상 디스크 파일, NVRAM(Non-Volatile Random Access Memory) 설정 파일, 및 로그 파일에 의해 정의될 수 있으며, 호스트 컴퓨팅 플랫폼의 물리적 리소스에 의해 지원된다. VM은 전용 하드웨어를 모방하는 소프트웨어에 설치된 운영 시스템(OS) 또는 애플리케이션 환경을 포함할 수 있다. 최종 사용자는 가상 머신 상에서 그들이 전용 하드웨어 상에서 경험하는 것과 동일한 경험을 한다. 하이퍼바이저(hypervisor)라고 하는 특수 소프트웨어는 PC 클라이언트 또는 서버의 CPU, 메모리, 하드 디스크, 네트워크 및 다른 하드웨어 리소스를 완전히 에뮬레이션하여 가상 머신이 리소스를 공유할 수 있게 한다. 하이퍼바이저는 서로 격리된 다수의 가상 하드웨어 플랫폼을 에뮬레이션할 수 있는데, 이는 가상 머신으로 하여금 동일한 기본 물리적 호스트 싱에서 Linux®, Windows® 서버, VMware ESXi 및 다른 운영 시스템을 실행할 수 있게 한다.
컨테이너는 애플리케이션, 구성 및 종속성의 소프트웨어 패키지일 수 있으므로 애플리케이션은 한 컴퓨팅 환경에서 다른 컴퓨팅 환경으로 안정적으로 실행된다. 컨테이너는 서버 플랫폼에 설치된 운영 시스템을 공유하고 격리된 프로세스로서 실행할 수 있다. 컨테이너는 시스템 도구, 라이브러리 및 설정과 같이 소프트웨어를 실행하는 데 필요한 모든 것을 포함하는 소프트웨어 패키지일 수 있다. 컨테이너는 전통적인 소프트웨어 프로그램처럼 설치되지 않는데, 이는 컨테이너를 소프트웨어 및 운영 시스템 자체로부터 격리될 수 있게 한다. 컨테이너의 격리 특성은 몇 가지 이점을 제공다. 첫째, 컨테이너의 소프트웨어는 상이한 환경에서 동일하게 실행될 것이다. 예를 들어, PHP와 MySQL을 포함하는 컨테이너는 Linux® 컴퓨터와 Windows® 머신 모두에서 동일하게 실행될 수 있다. 둘째, 컨테이너는 그 소프트웨어가 호스트 운영 시스템에 영향을 주지 않기 때문에 추가 보안을 제공한다. 설치된 애플리케이션은 시스템 설정을 변경하고 Windows 레지스트리와 같은 리소스를 수정할 수 있지만, 컨테이너는 컨테이너 내의 설정만을 수정할 수 있다.
따라서, 가속기 통합 회로(436)는 그래픽 가속 모듈(446)을 위해 시스템에 대한 브리지의 역할을 하며, 주소 변환 및 시스템 메모리 캐시 서비스를 제공한다. 일 실시예에서, 브리지 기능을 용이하게 하기 위해, 가속기 통합 회로(436)는 또한 공유 I/O(497)(예컨대, PCIe, USB 또는 기타의 것) 및 전압, 클럭킹, 성능, 열 및 보안의 시스템 제어를 가능하게 하는 하드웨어를 포함할 수 있다. 공유 I/O(497)는 별도의 물리적 접속을 이용하거나 고속 링크(440)를 횡단할 수 있다. 또한, 가속기 통합 회로(436)는, 호스트 프로세서가 그래픽 프로세싱 엔진, 인터럽트 및 메모리 관리의 가상화를 관리할 수 있도록 가상화 설비를 제공할 수 있다.
그래픽 프로세싱 엔진(431-432, N)의 하드웨어 리소스가 호스트 프로세서(407)에 보이는 실제 주소 공간에 명시적으로 매핑되기 때문에, 임의의 호스트 프로세서는 유효 주소 값을 사용하여 이러한 리소스를 직접 어드레싱할 수 있다. 가속기 통합 회로(436)의 선택적인 하나의 기능은 그래픽 프로세싱 엔진(431-432, N)을 물리적으로 분리하여 시스템에 독립적 유닛으로 보이게 하는 것이다.
하나 이상의 그래픽 메모리(433-434, M)는 각각의 그래픽 프로세싱 엔진(431-432, N)에 각각 연결될 수 있다. 그래픽 메모리(433-434, M)는 각각의 그래픽 프로세싱 엔진(431-432, N)에 의해 프로세싱되는 명령어 및 데이터를 저장한다. 그래픽 메모리(433-434, M)는 DRAM(스택형 DRAM을 포함함), GDDR 메모리(예컨대, GDDR5, GDDR6), 또는 HBM과 같은 휘발성 메모리일 수 있고/있거나, 3D XPoint/Optane, 삼성 Z-NAND, 또는 나노-램(Nano-Ram)과 같은 비휘발성 메모리일 수 있다.
고속 링크(440)를 통한 데이터 트래픽을 감소시키기 위해, 그래픽 메모리(433-434, M)에 저장된 데이터가 그래픽 프로세싱 엔진(431-432, N)에 의해 가장 빈번하게 사용될 데이터이고 바람직하게는 코어(460A-460D)에 의해 사용되지 않을 것임(적어도 빈번하게는 사용되지 않음)을 보장하는 바이어싱 기술이 사용될 수 있다. 유사하게, 바이어싱 메커니즘은 코어의 캐시(462A-462D, 456) 및 시스템 메모리(441) 내에 코어(바람직하게는 그래픽 프로세싱 엔진(431-432, N)은 아님)에 의해 요구되는 데이터를 유지하려고 시도한다.
도 4c에 도시된 변형에 따르면, 가속기 통합 회로(436)는 프로세서(407) 내에 통합된다. 그래픽 프로세싱 엔진(431-432, N)은 고속 링크(440)를 거쳐 인터페이스(437) 및 인터페이스(435)(이 역시 임의 형태의 버스 또는 인터페이스 프로토콜을 이용할 수 있음)를 통해 가속기 통합 회로(436)로 직접 통신한다. 가속기 통합 회로(436)는 도 4b에 대해 설명된 것과 동일한 동작을 수행할 수 있지만, 일관성 버스(464) 및 캐시(462A-462D, 456)에 대한 근접성을 고려할 때 더 높은 처리량을 갖는다.
설명된 실시예는 전용 프로세스 프로그래밍 모델(그래픽 가속 모듈 가상화 없음) 및 공유 프로그래밍 모델(가상화 있음)을 포함하는 상이한 프로그래밍 모델을 지원할 수 있다. 공유 프로그래밍 모델은 가속기 통합 회로(436)에 의해 제어되는 프로그래밍 모델 및 그래픽 가속 모듈(446)에 의해 제어되는 프로그래밍 모델을 포함할 수 있다.
전용 프로세스 모델의 실시예에서, 그래픽 프로세싱 엔진(431, 432, ... N)은 단일 운영 시스템 하에서 단일 애플리케이션 또는 프로세스에 전용될 수 있다. 단일 애플리케이션은 다른 애플리케이션 요청을 그래픽 엔진(431, 432, ... N)으로 이동시켜 VM/파티션 내에서 가상화를 제공할 수 있다.
전용 프로세스 프로그래밍 모델에서, 그래픽 프로세싱 엔진(431-432, N)은 다수의 VM/애플리케이션 파티션에 의해 공유될 수 있다. 공유 모델은, 그래픽 프로세싱 엔진(431-432, N)을 가상화하여 각 운영 시스템의 액세스를 허용하는 시스템 하이퍼바이저(hypervisor)를 필요로 한다. 하이퍼바이저가 없는 단일 파티션 시스템의 경우, 그래픽 프로세싱 엔진(431-432, N)은 운영 시스템에 의해 소유된다. 두 경우 모두, 운영 시스템는 그래픽 프로세싱 엔진(431-432, N)을 가상화하여 각 프로세스 또는 애플리케이션에 대한 액세스를 제공할 수 있다.
공유 프로그래밍 모델의 경우, 그래픽 가속 모듈(446) 또는 개별 그래픽 프로세싱 엔진(431-432, N)은 프로세스 핸들을 사용하여 프로세스 요소를 선택한다. 프로세스 요소는 시스템 메모리(441)에 저장될 수 있고, 본 명세서에 설명된 유효 주소-실제 주소 변환 기술을 사용하여 어드레싱될 수 있다. 프로세스 핸들은 그래픽 프로세싱 엔진(431-432, N)에 컨텍스트를 등록할 때(즉, 프로세스 요소 링크 목록에 프로세스 요소를 추가하기 위해 시스템 소프트웨어를 호출할 때) 호스트 프로세스에 제공되는 구현-특정 값일 수 있다. 프로세스 핸들의 하위 16 비트는 프로세스 요소 링크 목록 내의 프로세스 요소의 오프셋일 수 있다.
도 4d는 예시적 가속기 통합 슬라이스(490)를 도시한다. 본 명세서에서 사용될 때, "슬라이스"는 가속기 통합 회로(436)의 프로세싱 리소스의 지정된 부분을 포함한다. 시스템 메모리(441) 내의 애플리케이션 유효 주소 공간(482)은 프로세스 요소(483)를 저장한다. 프로세스 요소(483)는 프로세서(407) 상에서 실행되는 애플리케이션(480)으로부터의 GPU 호출(481)에 응답하여 저장될 수 있다. 프로세스 요소(483)는 대응하는 애플리케이션(480)에 대한 프로세스 상태를 포함한다. 프로세스 요소(483)에 포함된 작업 설명자(WD)(484)는 애플리케이션에 의해 요청된 단일 작업일 수 있거나, 또는 작업 큐(queue)에 대한 포인터를 포함할 수 있다. 후자의 경우 WD(484)는 애플리케이션의 주소 공간(482) 내의 작업 요청 큐에 대한 포인터이다.
그래픽 가속 모듈(446) 및/또는 개별 그래픽 프로세싱 엔진(431-432, N)은 시스템 내의 프로세스의 전부 또는 일부에 의해 공유될 수 있다. 예를 들어, 본 명세서에 설명된 기술은 가상화된 환경에서 작업을 시작하기 위해 프로세스 상태를 설정하고 WD(484)를 그래픽 가속 모듈(446)로 전송하기 위한 인프라스트럭처를 포함할 수 있다.
일 구현예에서, 전용 프로세스 프로그래밍 모델은 구현-특정적이다. 이 모델에서 단일 프로세스는 그래픽 가속 모듈(446) 또는 개별 그래픽 프로세싱 엔진(431)을 소유한다. 그래픽 가속 모듈(446)은 단일 프로세스에 의해 소유되므로, 그래픽 가속 모듈(446)이 할당될 때, 하이퍼바이저는 소유 파티션을 위해 가속기 통합 회로(436)를 초기화하고 운영 시스템은 소유 프로세스를 위해 가속기 통합 회로(436)를 초기화한다.
동작 시에, 가속기 통합 슬라이스(490)의 WD 페치 유닛(491)은 그래픽 가속 모듈(446)의 그래픽 프로세싱 엔진들 중 하나에 의해 수행될 작업의 표시를 포함하는 후속 WD(484)를 페치한다. WD(484)로부터의 데이터는 레지스터(445)에 저장될 수 있고, 도시된 바와 같이 MMU(439), 인터럽트 관리 회로(447) 및/또는 컨텍스트 관리 회로(448)에 의해 사용될 수 있다. 예를 들어, MMU(439)는 OS 가상 주소 공간(485) 내의 세그먼트/페이지 테이블(486)에 액세스하기 위한 세그먼트/페이지 워크(walk) 회로를 포함할 수 있다. 인터럽트 관리 회로(447)는 그래픽 가속 모듈(446)로부터 수신된 인터럽트 이벤트(492)를 프로세싱할 수 있다. 그래픽 동작을 수행할 때, 그래픽 프로세싱 엔진(431-432, N)에 의해 생성된 유효 주소(493)는 MMU(439)에 의해 실제 주소로 변환된다.
동일한 레지스터(445) 세트는 각각의 그래픽 프로세싱 엔진(431-432, N) 및/또는 그래픽 가속 모듈(446)을 위해 복제될 수 있고, 하이퍼바이저 또는 운영 시스템에 의해 초기화될 수 있다. 이들 복제된 레지스터 각각은 가속기 통합 슬라이스(490)에 포함될 수 있다. 일 실시예에서, 각각의 그래픽 프로세싱 엔진(431-432, N)은 별개의 그래픽 프로세서 장치로서 하이퍼바이저(496)에 제공될 수 있다. 특정 그래픽 처리 엔진(431-432, N)의 클라이언트에 대해 QoS 설정이 구성될 수 있고, 각 엔진의 클라이언트들 간의 데이터 격리가 활성화될 수 있다. 하이퍼바이저에 의해 초기화될 수 있는 예시적 레지스터가 표 1에 제시된다.
Figure pat00001
운영 시스템에 의해 초기화될 수 있는 예시적 레지스터가 표 2에 제시된다.
Figure pat00002
각 WD(484)는 특정 그래픽 가속 모듈(446) 및/또는 그래픽 프로세싱 엔진(431-432, N)에 대해 특정적(specific)일 수 있다. 이는 그래픽 프로세싱 엔진(431-432, N)이 작업을 수행하는 데 필요한 모든 정보를 포함하거나, 또는 애플리케이션이 완료될 작업의 커맨드 큐를 설정했던 메모리 위치에 대한 포인터일 수 있다.도 4e는 공유 모델의 선택적 추가 세부사항을 도시한다. 이는 프로세스 요소 목록(499)이 저장되는 하이퍼바이저 실제 주소 공간(498)을 포함한다. 하이퍼바이저 실제 주소 공간(498)은 운영 시스템(495)에 대한 그래픽 가속 모듈 엔진을 가상화하는 하이퍼바이저(496)를 통해 액세스 가능하다.
공유 프로그래밍 모델은 시스템의 파티션의 전부 또는 일부로부터의 프로세스의 전부 또는 일부가 그래픽 가속 모듈(446)을 사용하는 것을 허용한다. 그래픽 가속 모듈(446)이 다수의 프로세스 및 파티션에 의해 공유되는 2개의 프로그래밍 모델이 있는데, 시간 분할 공유 및 그래픽 지정 공유가 그것이다.
이 모델에서, 시스템 하이퍼바이저(496)는 그래픽 가속 모듈(446)을 소유하고, 그 기능을 모든 운영 시스템(495)에 사용할 수 있게 한다. 그래픽 가속 모듈(446)이 시스템 하이퍼바이저(496)에 의한 가상화를 지원하기 위해, 그래픽 가속 모듈(446)은 다음 요건을 고수할 수 있다: 1) 애플리케이션의 작업 요청이 자율적이거나(즉, 작업들 간에 상태가 유지될 필요가 없음), 그래픽 가속 모듈(446)이 컨텍스트 저장 및 복원 메커니즘을 제공해야 한다. 2) 애플리케이션의 작업 요청은 그래픽 가속 모듈(446)에 의해 임의의 변환 오류를 포함하여 지정된 시간 내에 완료되도록 보장되거나, 그래픽 가속 모듈(446)은 작업의 프로세싱을 선점하는 능력을 제공한다. 3) 그래픽 가속 모듈(446)은 지정된 공유 프로그래밍 모델에서 동작할 때 프로세스들 간의 공정성을 보장해야 한다.
공유 모델의 경우, 애플리케이션(480)은, 그래픽 가속 모듈(446) 타입, 작업 설명자(WD), 권한 마스크 레지스터(AMR) 값, 및 컨텍스트 저장/복원 영역 포인터(CSRP)를 사용하여 운영 시스템(495)를 시스템 호출하기 위해 요구될 수 있다. 그래픽 가속 모듈(446) 타입은 시스템 호출에 대한 목표 가속 기능을 설명한다. 그래픽 가속 모듈(446) 타입은 시스템-특정 값일 수 있다. WD는 그래픽 가속 모듈(446)을 위해 특별히 포맷되고, 그래픽 가속 모듈(446) 커맨드, 사용자 정의 구조에 대한 유효 주소 포인터, 커맨드 큐에 대한 유효 주소 포인터, 또는 그래픽 가속 모듈(446)에 의해 수행될 작업을 설명하는 임의의 다른 데이터 구조의 형태일 수 있다. 일 실시예에서, AMR 값은 현재 프로세스에 사용하는 AMR 상태이다. 운영 시스템에 전달되는 값은 AMR을 설정하는 애플리케이션과 유사하다. 가속기 통합 회로(436) 및 그래픽 가속 모듈(446) 구현이 UAMOR(User Authority Mask Override Register)를 지원하지 않는 경우, 운영 시스템은 하이퍼바이저 호출에서 AMR을 전달하기 전에 현재 UAMOR 값을 AMR 값에 적용할 수 있다. 하이퍼바이저(496)는 AMR을 프로세스 요소(483)에 배치하기 전에 현재 AMOR(Authority Mask Override Register) 값을 선택적으로 적용할 수 있다. CSRP는, 컨텍스트 상태를 저장하고 복원하기 위해 그래픽 가속 모듈(446)에 대한 애플리케이션의 주소 공간(482) 내의 영역의 유효 주소를 포함하는 레지스터(445) 중 하나일 수 있다. 작업들 간에 상태를 저장할 필요가 없거나 작업이 선점된 경우에 포인터는 선택 사항이다. 컨텍스트 저장/복원 영역은 고정된 시스템 메모리일 수 있다.
시스템 호출을 수신하면, 운영 시스템(495)는 애플리케이션(480)이 등록되었고 그래픽 가속 모듈(446)을 사용할 권한을 부여받았음을 확인할 수 있다. 그런 다음, 운영 시스템(495)는 표 3에 제시된 정보를 사용하여 하이퍼바이저(496)를 호출한다.
Figure pat00003
하이퍼바이저 호출을 수신하면, 하이퍼바이저(496)는 운영 시스템(495)가 등록되었고 그래픽 가속 모듈(446)을 사용할 권한이 부여받았음을 확인한다. 그런 다음, 하이퍼바이저(496)는 대응하는 그래픽 가속 모듈(446) 타입에 대한 프로세스 요소 링크 목록에 프로세스 요소(483)를 넣는다. 프로세스 요소는 표 4에 제시된 정보를 포함할 수 있다.
Figure pat00004
하이퍼바이저는 복수의 가속기 통합 슬라이스(490)의 레지스터(445)를 초기화할 수 있다.도 4f에 도시된 바와 같이, 선택적인 일 구현예에서, 물리적 프로세서 메모리(401-402) 및 GPU 메모리(420-423)에 액세스하는 데 사용되는 공통 가상 메모리 주소 공간을 통해 어드레싱 가능한 통합형 메모리가 사용된다. 이 구현예에서는, GPU(410-413) 상에서 실행되는 동작이 동일 가상/유효 메모리 주소 공간을 이용하여 프로세서 메모리(401-402)에 액세스하고 그 반대의 경우도 마찬가지가 됨으로써 프로그래밍 가능성을 단순화한다. 가상/유효 주소 공간의 제 1 부분은 프로세서 메모리(401)에, 제 2 부분은 제 2 프로세서 메모리(402)에, 제 3 부분은 GPU 메모리(420)에 할당될 수 있는 식이다. 이에 따라, 전체 가상/유효 메모리 공간(때로는 유효 주소 공간이라고도 함)은 프로세서 메모리(401-402) 및 GPU 메모리(420-423)의 각각에 걸쳐 분산될 수 있어, 임의의 프로세서 또는 GPU로 하여금 그 메모리에 매핑된 가상 주소를 사용하여 임의의 물리 메모리에 액세스할 수 있게 한다.
MMU(439A-439E) 중 하나 이상 내에는, 호스트 프로세서(예컨대, 405)와 GPU(410-413)의 캐시들 간의 캐시 일관성을 보장하고 특정 타입의 데이터가 저장되어야 하는 물리 메모리를 나타내는 바이어싱 기술을 구현하는 바이어스/일관성 관리 회로(494A-494E)가 제공될 수 있다. 바이어스/일관성 관리 회로(494A-494E)의 다수의 인스턴스가 도 4f에 도시되어 있지만, 바이어스/일관성 회로는 하나 이상의 호스트 프로세서(405)의 MMU 내에서 및/또는 가속기 통합 회로(436) 내에서 구현될 수도 있다.
GPU 부착 메모리(420-423)는 시스템 메모리의 일부로서 매핑될 수 있고, 공유 가상 메모리(SVM) 기술을 사용하여 액세스되도록 허용하지만, 전체 시스템 캐시 일관성과 관련된 전형적인 성능 단점을 겪지 않는다. GPU 부착 메모리(420-423)가 부담스러운 캐시 일관성 오버헤드없이 시스템 메모리로서 액세스될 수 있는 것은 GPU 오프로드(offload)를 위한 유리한 동작 환경을 제공한다. 이러한 구성은 호스트 프로세서(405) 소프트웨어로 하여금 전통적 I/O DMA 데이터 카피(copy)의 오버헤드없이 피연산자를 설정하고 계산 결과에 액세스할 수 있게 한다. 이러한 전통적 카피는 드라이버 호출, 인터럽트 및 메모리 매핑 I/O(MMIO) 액세스를 수반하는데, 이들은 모두 단순한 메모리 액세스에 비해 비효율적이다. 동시에, 캐시 일관성 오버헤드없이 GPU 부착 메모리(420-423)에 액세스할 수 있다는 것은 오프로드된 계산의 실행 시간에 중요할 수 있다. 예를 들어, 상당한 스트리밍 기록 메모리 트래픽이 있는 경우, 캐시 일관성 오버헤드는 GPU(410-413)에 보이는 유효 기록 대역폭을 크게 줄일 수 있다. 피연산자 설정의 효율성, 결과 액세스의 효율성 및 GPU 계산의 효율성은 모두 GPU 오프로드의 효율성을 결정하는 데 중요한 역할을 한다.
GPU 바이어스와 호스트 프로세서 바이어스 사이의 선택은 바이어스 추적기 데이터 구조에 의해 추진될 수 있다. 예를 들어, GPU 부착 메모리 페이지 당 1 또는 2 비트를 포함하는 페이지 단위 구조(즉, 메모리 페이지의 단위로 제어됨)일 수 있는 바이어스 테이블이 사용될 수 있다. 바이어스 테이블은, (예컨대, 바이어스 테이블의 빈번하게/최근에 사용된 항목을 캐시하기 위한) GPU(410-413) 내의 바이어스 캐시를 사용하거나 사용하지 않고, 하나 이상의 GPU 부착 메모리(420-423)의 가로챈(stolen) 메모리 범위에서 구현될 수 있다. 대안적으로, 전체 바이어스 테이블이 GPU 내에서 유지될 수 있다.
일 구현예에서, GPU 부착 메모리(420-423)에 대한 각각의 액세스와 연관된 바이어스 테이블 엔트리는 GPU 메모리에 대한 실제 액세스 이전에 액세스되어 다음과 같은 동작을 유발한다. 먼저, GPU 바이어스에서 페이지를 찾는 GPU(410-413)로부터의 로컬 요청은 해당 GPU 메모리(420-423)로 직접 전달된다. 호스트 바이어스에서 페이지를 찾는 GPU로부터의 로컬 요청은 (예컨대, 위에서 설명된 고속 링크를 통해) 프로세서(405)로 전달된다. 선택적으로, 호스트 프로세서 바이어스에서 요청된 페이지를 찾는 프로세서(405)로부터의 요청은 정상적인 메모리 판독과 같이 요청을 완료한다. 대안적으로, GPU 바이어싱된 페이지로 향하는 요청은 GPU(410-413)로 전달될 수 있다. 그런 다음, GPU는 현재 그 페이지를 사용하고 있지 않은 경우 페이지를 호스트 프로세서 바이어스로 전이할 수 있다.
페이지의 바이어스 상태는, 소프트웨어 기반 메커니즘, 하드웨어 지원 소프트웨어 기반 메커니즘, 또는 제한된 경우에는 순전히 하드웨어 기반 메커니즘에 의해 변경될 수 있다.
바이어스 상태를 변경하기 위한 하나의 메커니즘은 API 호출(예컨대, OpenCL)을 사용하는데, API 호출은 이어서 GPU의 장치 드라이버를 호출하고, 장치 드라이버는 이어서 바이어스 상태를 변경할 것을 지시하는 메시지를 GPU에 전송(또는 커맨드 설명자를 큐에 추가)하여 하고, 일부 전이의 경우에는 호스트에서 캐시 플러싱 동작을 수행한다. 캐시 플러싱 동작은 호스트 프로세서(405) 바이어스에서 GPU 바이어스로의 전이에 필요하지만 반대의 전이에는 필요하지 않다.
캐시 일관성은 호스트 프로세서(405)에 의해 캐시 불가능한 GPU 바이어싱된 페이지를 일시적으로 렌더링함으로써 유지될 수 있다. 이러한 페이지에 액세스하기 위해, 프로세서(405)는 GPU(410)로부터의 액세스를 요청할 수 있는데, GPU(410)는 구현에 따라 액세스를 즉시 허용하거나 허용하지 않을 수 있다. 따라서, 호스트 프로세서(405)와 GPU(410) 사이의 통신을 줄이기 위해, GPU 바이어싱된 페이지가 호스트 프로세서(405)가 아닌 GPU에 의해 요구되는 것이고 그 반대의 경우에도 마찬가지인 것을 보장하는 것이 바람직하다.
그래픽 프로세싱 파이프라인
도 5는 그래픽 프로세싱 파이프라인(500)을 도시한다. 도 2d의 그래픽 멀티프로세서(234), 도 3a의 그래픽 멀티프로세서(325), 도 3b의 그래픽 멀티프로세서(350)와 같은 그래픽 멀티프로세서는 도시된 그래픽 프로세싱 파이프라인(500)을 구현할 수 있다. 그래픽 멀티프로세서는, 도 1의 병렬 프로세서(들)(112)와 관련될 수 있고 이들 중 하나를 대신하여 사용될 수 있는 도 2a의 병렬 프로세서(200)와 같은 본 명세서에 설명된 병렬 프로세싱 서브시스템 내에 포함될 수 있다. 다양한 병렬 프로세싱 시스템은 본 명세서에 설명된 병렬 프로세싱 유닛(예컨대, 도 2a의 병렬 프로세싱 유닛(202))의 하나 이상의 인스턴스를 통해 그래픽 프로세싱 파이프라인(500)을 구현할 수 있다. 예를 들어, 셰이더 유닛(예컨대, 도 2c의 그래픽 멀티프로세서(234))은 정점 프로세싱 유닛(504), 테셀레이션 제어 프로세싱 유닛(508), 테셀레이션 평가 프로세싱 유닛(512), 기하 프로세싱 유닛(516), 및 프래그먼트/픽셀 프로세싱 유닛(524) 중 하나 이상의 기능을 수행하도록 구성될 수 있다. 데이터 어셈블러(502), 프리미티브 어셈블러(506, 514, 518), 테셀레이션 유닛(510), 래스터화기(rasterizer)(522) 및 래스터 동작 유닛(526)의 기능은, 프로세싱 클러스터(예컨대, 도 2a의 프로세싱 클러스터(214)) 및 대응하는 파티션 유닛(예컨대, 도 2a의 파티션 유닛(220A-220N)) 내의 다른 프로세싱 엔진에 의해 수행될 수도 있다. 그래픽 프로세싱 파이프라인(500)은 또한 하나 이상의 기능을 위한 전용 프로세싱 유닛을 사용하여 구현될 수 있다. 그래픽 프로세싱 파이프라인(500)의 하나 이상의 부분이 범용 프로세서(예컨대, CPU) 내의 병렬 프로세싱 로직에 의해 수행되는 것도 가능하다. 선택적으로, 그래픽 프로세싱 파이프라인(500)의 하나 이상의 부분은 도 2a의 메모리 인터페이스(218)의 인스턴스일 수 있는 메모리 인터페이스(528)를 통해 온칩 메모리(예컨대, 도 2a에서와 같은 병렬 프로세서 메모리(222))에 액세스할 수 있다. 그래픽 프로세싱 파이프라인(500)은 또한 도 3c에서와 같은 멀티-코어 그룹(365A)을 통해 구현될 수 있다.
데이터 어셈블러(502)는 표면 및 프리미티브에 대한 정점 데이터를 수집할 수 있는 프로세싱 유닛이다. 그런 다음, 데이터 어셈블러(502)는 정점 속성을 포함하는 정점 데이터를 정점 프로세싱 유닛(504)으로 출력한다. 정점 프로세싱 유닛(504)은, 정점 셰이더 프로그램을 실행하여 정점 데이터를 정점 셰이더 프로그램에 의해 지정된 바와 같이 조명 및 변환하는 프로그래밍 가능한 실행 유닛이다. 정점 프로세싱 유닛(504)은 정점 데이터를 프로세싱하는 데 사용하기 위해 캐시, 로컬 또는 시스템 메모리에 저장된 데이터를 판독하고, 정점 데이터를 객체 기반 좌표 표현에서 월드 스페이스 좌표 공간 또는 정규화된 장치 좌표 공간으로 변환하도록 프로그래밍될 수 있다.
프리미티브 어셈블러(506)의 제 1 인스턴스는 정점 프로세싱 유닛(504)으로부터 정점 속성을 수신한다. 프리미티브 어셈블러(506)는 필요에 따라 저장된 정점 속성을 판독하고, 테셀레이션 제어 프로세싱 유닛(508)에 의한 프로세싱을 위한 그래픽 프리미티브를 구성한다. 그래픽 프리미티브는 다양한 그래픽 프로세싱 API(응용 프로그래밍 인터페이스)에 의해 지원되는 삼각형, 라인 세그먼트, 포인트, 패치 등을 포함한다.
테셀레이션 제어 프로세싱 유닛(508)은 입력 정점을 기하학적 패치에 대한 제어 포인트로 취급한다. 제어 포인트는, 패치(예컨대, 패치의 베이스)로부터의 입력 표현에서, 테셀레이션 평가 프로세싱 유닛(512)에 의한 표면 평가에 사용하기에 적합한 표현으로 변환된다. 테셀레이션 제어 프로세싱 유닛(508)은 또한 기하학적 패치의 에지에 대한 테셀레이션 인자(factor)를 계산할 수 있다. 테셀레이션 인자는 단일 에지에 적용되고 에지와 관련된 디테일의 뷰-의존 레벨을 수량화한다. 테셀레이션 유닛(510)은, 패치의 에지에 대한 테셀레이션 인자를 수신하고, 테셀레이션 평가 프로세싱 유닛(512)으로 전송되는 라인, 삼각형 또는 사변형 프리미티브와 같은 다수의 기하학적 프리미티브로 페치를 테셀레이션하도록 구성된다. 테셀레이션 평가 프로세싱 유닛(512)은 기하학적 프리미티브와 연관된 각 정점에 대한 표면 표현 및 정점 속성을 생성하기 위해 세분화된 패치의 파라미터화된 좌표에서 동작한다.
프리미티브 어셈블러(514)의 제 2 인스턴스는 테셀레이션 평가 프로세싱 유닛(512)으로부터 정점 속성을 수신하고, 필요에 따라 저장된 정점 속성을 판독하고, 기하 프로세싱 유닛(516)에 의한 프로세싱을 위한 그래픽 프리미티브를 구성한다. 기하 프로세싱 유닛(516)은, 기하 셰이더 프로그램을 실행하여 프리미티브 어셈블러(514)로부터 수신된 그래픽 프리미티브를 기하 셰이더 프로그램에 의해 지정된 바와 같이 변환하는 프로그래밍 가능한 실행 유닛이다. 기하 프로세싱 유닛(516)은, 그래픽 프리미티브를 하나 이상의 새로운 그래픽 프리미티브로 세분화하고 새로운 그래픽 프리미티브를 래스터화하는 데 사용되는 파라미터를 계산하도록 프로그래밍될 수 있다.
기하 프로세싱 유닛(516)은 기하 스트림에서 요소를 추가하거나 삭제할 수 있다. 기하 프로세싱 유닛(516)은 새로운 그래픽 프리미티브를 지정하는 파라미터 및 정점을 프리미티브 어셈블러(518)에 출력한다. 프리미티브 어셈블러(518)는 기하 프로세싱 유닛(516)으로부터 파라미터 및 정점을 수신하고, 뷰포트 스케일, 컬, 및 클립 유닛(520)에 의한 프로세싱을 위한 그래픽 프리미티브를 구성한다. 기하 프로세싱 유닛(516)은 기하 데이터를 프로세싱하는 데 사용하기 위해 병렬 프로세서 메모리 또는 시스템 메모리에 저장된 데이터를 판독한다. 뷰포트 스케일, 컬, 및 클립 유닛(520)은 클리핑, 컬링, 및 뷰포트 스케일링을 수행하고, 프로세싱된 그래픽 프리미티브를 래스터화기(522)로 출력한다.
래스터화기(522)는 깊이 컬링 및 다른 깊이 기반 최적화를 수행할 수 있다. 래스터화기(522)는 또한 새로운 그래픽 프리미티브에 대한 스캔 변환을 수행하여 프래그먼트를 생성하고, 프래그먼트/픽셀 프로세싱 유닛(524)에 이들 프래그먼트 및 연관된 커버리지 데이터를 출력한다. 프래그먼트/픽셀 프로세싱 유닛(524)은 프래그먼트 셰이더 프로그램 또는 픽셀 셰이더 프로그램을 실행하도록 구성되는 프로그래밍 가능한 실행 유닛이다. 프래그먼트/픽셀 프로세싱 유닛(524)은 래스터화기(522)로부터 수신된 프래그먼트 또는 픽셀을 프래그먼트 또는 픽셀 셰이더 프로그램에 의해 지정된 바와 같이 변환한다. 예를 들어, 프래그먼트/픽셀 프로세싱 유닛(524)은 래스터 동작 유닛(526)에 출력되는 셰이딩된 프래그먼트 또는 픽셀을 생성하기 위해 텍스쳐 매핑, 셰이딩, 블렌딩, 텍스처 보정 및 원근 보정을 포함하지만 이에 제한되지 않는 동작을 수행하도록 프로그래밍될 수 있다. 프래그먼트/픽셀 프로세싱 유닛(524)은 프래그먼트 데이터를 프로세싱할 때 사용하기 위해 병렬 프로세서 메모리 또는 시스템 메모리에 저장된 데이터를 판독할 수 있다. 프래그먼트 또는 픽셀 셰이더 프로그램은, 프로세싱 유닛에 대해 구성된 샘플링 속도에 따라, 샘플, 픽셀, 타일 또는 다른 단위에서 셰이딩하도록 구성될 수 있다.
래스터 동작 유닛(526)은, 스텐실, z-테스트, 블렌딩 등을 포함하지만 이에 제한되지 않는 래스터 동작을 수행하고, 하나 이상의 디스플레이 장치(들)(110) 상에 디스플레이되거나 하나 이상의 프로세서(들)(102) 또는 병렬 프로세서(들)(112) 중 하나에 의한 추가 프로세싱을 위해 그래픽 메모리(예컨대, 도 2a에서와 같은 병렬 프로세서 메모리(222) 및/또는 도 1에서와 같은 시스템 메모리(104))에 저장될 프로세싱된 그래픽 데이터로서 픽셀 데이터를 출력하는 프로세싱 유닛이다. 래스터 동작 유닛(526)은, 메모리에 기록되는 z 또는 컬러 데이터를 압축하고 메모리로부터 판독되는 z 또는 컬러 데이터를 압축 해제하도록 구성될 수 있다.
머신 학습 개요
위에서 설명한 아키텍처는 머신 학습 모델을 사용하여 훈련 및 추론 동작을 수행하는 데 적용될 수 있다. 머신 학습은 많은 타입의 작업을 성공적으로 해결했다. 머신 학습 알고리즘(예컨대, 신경망)을 훈련하고 사용할 때 발생하는 계산은 본질적으로 효율적 병렬 구현에 적합하다. 따라서, 범용 그래픽 프로세싱 유닛(GPGPU)과 같은 병렬 프로세서는 심층 신경망의 실제 구현에 중요한 역할을 해왔다. 단일-명령어, 다중-스레드(SIMT) 아키텍처를 사용하는 병렬 그래픽 프로세서는 그래픽 파이프라인에서 병렬 프로세싱의 양을 최대화하도록 설계된다. SIMT 아키텍처에서, 병렬 스레드 그룹은 프로세싱 효율성을 높이기 위해 가능한한 자주 프로그램 명령어를 동시에 함께 실행하려고 시도한다. 병렬 머신 학습 알고리즘 구현에 의해 제공되는 효율성은 고용량 네트워크의 사용을 허용하고 이러한 네트워크가 더 큰 데이터세트 상에서 훈련될 수 있게 한다.
머신 학습 알고리즘은 데이터 세트에 기초하여 학습할 수 있는 알고리즘이다. 예를 들어, 머신 학습 알고리즘은 데이터 세트 내에서 고레벨 추상화를 모델링하도록 설계될 수 있다. 예를 들어, 수 개의 카테고리 중에서 주어진 입력이 속하는 카테고리를 결정하기 위해 이미지 인식 알고리즘이 사용될 수 있고, 회귀 알고리즘은 입력이 주어지면 숫자 값을 출력할 수 있고, 변환된 텍스트를 생성하거나 텍스트-음성 및/또는 음성 인식을 수행하기 위해 패턴 인식 알고리즘이 사용될 수 있다.
예시적 타입의 머신 학습 알고리즘은 신경망이다. 많은 타입의 신경망이 존재하며, 단순한 타입의 신경망은 피드포워드(feedforward) 네트워크이다. 피드포워드 네트워크는 노드가 계층으로 배열되는 비순환 그래프로서 구현될 수 있다. 일반적으로, 피드포워드 네트워크 토폴로지는 적어도 하나의 숨겨진 계층으로 분리된 입력 계층과 출력 계층을 포함한다. 숨겨진 계층은 입력 계층에 의해 수신된 입력을 출력 계층에서 출력을 생성하는 데 유용한 표현으로 변환한다. 네트워크 노드는 에지를 통해 인접한 계층의 노드에 완전히 접속되어 있지만 각 계층 내의 노드 사이에는 에지가 없다. 피드포워드 네트워크의 입력 계층의 노드에서 수신된 데이터는, 계층을 접속하는 각각의 에지와 각각 관련된 계수("가중치")에 따라 네트워크에서 각각의 연속 계층의 노드 상태를 계산하는 활성화 기능을 통해 출력 계층의 노드로 전파(즉, "피드포워드")된다. 실행되는 알고리즘으로 표현되는 특정 모델에 따라 신경망 알고리즘의 출력은 다양한 형태를 취할 수 있다.
머신 학습 알고리즘이 특정 문제를 모델링하기 위해 사용될 수 있기 전에, 알고리즘은 훈련 데이터 세트를 사용하여 훈련된다. 신경망 훈련은 네트워크 토폴로지를 선택하고, 네트워크가 모델링하는 문제를 나타내는 훈련 데이터 세트를 사용하고, 훈련 모델 세트의 모든 인스턴스에 대해 최소 오류로 네트워크 모델이 수행될 때까지 가중치를 조정하는 것을 포함한다. 예를 들어, 신경망에 대한 지도(supervised) 학습 훈련 과정 동안, 훈련 데이터 세트에서 인스턴스를 나타내는 입력에 대한 응답으로 네트워크에 의해 생성된 출력은 해당 인스턴스에 대한 "정확한" 것으로 표시된 출력과 비교되고, 출력과 표시된 출력의 차이를 나타내는 오류 신호가 계산되며, 오류 신호가 네트워크의 계층을 통해 역방향으로 전파되어 해당 오류를 최소화하도록 접속과 관련된 가중치가 조정된다. 훈련 데이터 세트의 인스턴스로부터 생성된 각 출력에 대한 오류가 최소화될 때 네트워크는 "훈련된" 것으로 간주된다.
머신 학습 알고리즘의 정확도는 알고리즘을 훈련하는 데 사용되는 데이터 세트의 품질에 의해 크게 영향을 받을 수 있다. 훈련 과정은 계산 집약적일 수 있고 종래의 범용 프로세서에서 상당한 시간을 필요로할 수 있다. 따라서, 병렬 프로세싱 하드웨어는 많은 타입의 머신 학습 알고리즘을 훈련하는 데 사용된다. 이것은 신경망의 계수를 조정할 때 수행된 계산이 본질적으로 병렬 구현에 적합하므로 신경망 훈련을 최적화하는 데 특히 유용하다. 특히, 많은 머신 학습 알고리즘 및 소프트웨어 애플리케이션은 범용 그래픽 프로세싱 장치 내에서 병렬 프로세싱 하드웨어를 사용하도록 조정되었다.
도 6은 머신 학습 소프트웨어 스택(600)의 일반화된 도면이다. 머신 학습 애플리케이션(602)은 훈련 데이터세트를 사용하여 신경망을 훈련시키거나 또는 훈련된 심층 신경망을 사용하여 머신 지능을 구현하도록 구성될 수 있는 임의의 로직이다. 머신 학습 애플리케이션(602)은 신경망 및/또는 배치 전에 신경망을 훈련시키는 데 사용될 수 있는 특수 소프트웨어를 위한 훈련 및 추론 기능을 포함할 수 있다. 머신 학습 애플리케이션(602)은 이미지 인식, 매핑 및 위치 확인, 자율 네비게이션, 음성 합성, 의료 이미징 또는 언어 번역을 포함하지만 이에 제한되지 않는 임의의 타입의 머신 지능을 구현할 수 있다. 예시적 머신 학습 애플리케이션(602)은 음성 기반 가상 어시스턴트, 이미지 또는 얼굴 인식 알고리즘, 자율 내비게이션, 및 머신 학습 애플리케이션(602)에 의해 사용되는 머신 학습 모델을 훈련시키는 데 사용되는 소프트웨어 툴을 포함하지만 이에 제한되지는 않는다.
머신 학습 애플리케이션(602)에 대한 하드웨어 가속은 머신 학습 체계(604)를 통해 가능해질 수 있다. 머신 학습 체계(604)는 머신 학습 프리미티브의 라이브러리를 제공할 수 있다. 머신 학습 프리미티브는 머신 학습 알고리즘에 의해 일반적으로 수행되는 기본적인 동작이다. 머신 학습 체계(604)가 없다면, 머신 학습 알고리즘의 개발자는 머신 학습 알고리즘과 관련된 주요 계산 로직을 생성 및 최적화한 다음 새로운 병렬 프로세서가 개발됨에 따라 계산 로직을 다시 최적화해야 한다. 대신에, 머신 학습 애플리케이션은 머신 학습 체계(604)에 의해 제공되는 프리미티브를 사용하여 필요한 계산을 수행하도록 구성될 수 있다. 예시적 프리미티브는 텐서 컨벌루션, 활성화 기능 및 풀링을 포함하는데, 이들은 컨벌루션 신경망(CNN)을 훈련하는 동안 수행되는 계산 동작이다. 머신 학습 체계(604)는 또한 매트릭스 및 벡터 연산과 같은 많은 머신 학습 알고리즘에 의해 수행되는 기본 선형 대수 서브프로그램을 구현하는 프리미티브를 제공할 수 있다. 머신 학습 체계(604)의 예는 TensorFlow, TensorRT, PyTorch, MXNet, Caffee 및 다른 고레벨 머신 학습 체계를 포함하지만 이에 제한되지는 않는다.
머신 학습 체계(604)는 머신 학습 애플리케이션(602)으로부터 수신된 입력 데이터를 프로세싱하고 컴퓨팅 체계(606)에 적절한 입력을 생성할 수 있다. 컴퓨팅 체계(606)는, 머신 학습 체계(604)가 GPGPU 하드웨어(610)의 아키텍처에 대한 많은 지식을 가질 것을 요구하지 않고도 머신 학습 체계(604)가 GPGPU 하드웨어(610)를 통한 하드웨어 가속을 이용할 수 있도록 하는 GPGPU 드라이버(608)에 제공되는 기본 명령어를 추상화할 수 있다. 또한, 컴퓨팅 체계(606)는 다양한 타입 및 세대의 GPGPU 하드웨어(610)에 걸쳐 머신 학습 체계(604)에 대한 하드웨어 가속을 가능하게할 수 있다. 예시적 컴퓨팅 체계(606)는 CUDA 컴퓨팅 체계, 및 cuDNN(CUDA Deep Neural Network) 라이브러리와 같은 관련 머신 학습 라이브러리를 포함한다. 머신 학습 소프트웨어 스택(600)은 또한 다중 GPU 및 다중 노드 컴퓨팅을 용이하게 하는 통신 라이브러리 또는 체계를 포함할 수 있다.
GPGPU 머신 학습 가속
도 7은 도 2a의 병렬 프로세서(200) 또는 도 1의 병렬 프로세서(들)(112)일 수 있는 범용 그래픽 프로세싱 유닛(700)을 도시한다. 범용 프로세싱 유닛(GPGPU)(700)은 심층 신경망 네트워크와 관련된 컴퓨팅 워크로드의 타입을 프로세싱하는 것을 가속화하기 위해 머신 학습 체계에 의해 제공된 프리미티브의 하드웨어 가속에 대한 지원을 제공하도록 구성될 수 있다. 또한 GPGPU(700)은 GPGPU의 다른 인스턴스에 직접 링크되어 다수의 GPU 클러스터를 생성함으로써 특히 심층 신경망에 대한 훈련 속도를 향상시킬 수 있다. 프리미티브는 또한 배포된 신경망에 대한 추론 동작을 가속화하기 위해 지원될 수 있다.
GPGPU(700)는 호스트 프로세서와의 접속을 가능하게 하는 호스트 인터페이스(702)를 포함한다. 호스트 인터페이스(702)는 PCI Express 인터페이스일 수 있다. 그러나, 호스트 인터페이스는 공급자 특정 통신 인터페이스 또는 통신 패브릭일 수도 있다. GPGPU(700)는 호스트 프로세서로부터 커맨드를 수신하고, 글로벌 스케줄러(704)를 사용하여 이들 커맨드과 연관된 실행 스레드를 프로세싱 클러스터 세트(706A-706H)에 분배한다. 프로세싱 클러스터(706A-706H)는 캐시 메모리(708)를 공유한다. 캐시 메모리(708)는 프로세싱 클러스터(706A-706H) 내의 캐시 메모리에 대한 상위 레벨 캐시로서 기능할 수 있다. 도시된 프로세싱 클러스터(706A-706H)는 도 2a에서와 같은 프로세싱 클러스터(214A-214N)에 대응할 수 있다.
GPGPU(700)는 메모리 제어기(712A-712B)의 세트를 통해 프로세싱 클러스터(706A-706H)와 연결된 메모리(714A-714B)를 포함한다. 메모리(714A-714B)는 DRAM(dynamic random-access memory) 또는 그래픽 랜덤 액세스 메모리(예컨대, GDDR(graphics double data rate) 메모리를 포함하는 SGRAM(synchronous graphics random access memory))를 포함하는 다양한 타입의 메모리 장치를 포함할 수 있다. 메모리(714A-714B)는 또한 HBM(high bandwidth memory)을 포함하지만 이에 제한되지 않는 3D 스택형 메모리를 포함할 수 있다.
각각의 프로세싱 클러스터(706A-706H)는 도 2d의 그래픽 멀티프로세서(234), 도 3a의 그래픽 멀티프로세서(325), 도 3b의 그래픽 멀티프로세서(350)와 같은 그래픽 멀티프로세서의 세트를 포함할 수 있거나, 도 3c에서와 같은 멀티-코어 그룹(365A-365N)을 포함할 수 있다. 프로세싱 클러스터의 그래픽 멀티프로세서는 머신 학습 계산에 적합한 것을 포함하는 정밀도의 범위에서 계산 동작을 수행할 수 있는 여러 타입의 정수 및 부동 소수점 로직 유닛을 포함한다. 예를 들어, 프로세싱 클러스터(706A-706H) 각각 내의 부동 소수점 유닛의 적어도 한 서브세트는 16 비트 또는 32 비트 부동 소수점 연산을 수행하도록 구성될 수 있는 반면, 부동 소수점 유닛의 다른 서브세트는 64 비트 부동 소수점 연산을 수행하도록 포인트 단위를 구성될 수 있다.
GPGPU(700)의 다수의 인스턴스는 컴퓨팅 클러스터로서 동작하도록 구성될 수 있다. 동기화 및 데이터 교환을 위해 컴퓨팅 클러스터에 의해 사용되는 통신 메커니즘은 실시예에 따라 다르다. 예를 들어, GPGPU(700)의 다수의 인스턴스는 호스트 인터페이스(702)를 통해 통신한다. 일 실시예에서, GPGPU(700)는 GPGPU(700)와 GPU 링크(710)를 연결하는 I/O 허브(709)를 포함하는데, GPU 링크(710)는 GPGPU의 상이한 인스턴스들에 대한 직접 접속을 가능하게 한다. GPU 링크(710)는 GPGPU(700)의 다수의 인스턴스 사이의 통신 및 동기화를 가능하게 하는 전용 GPU-투-GPU 브리지에 연결될 수 있다. 선택적으로, GPU 링크(710)는 데이터를 다른 GPGPU 또는 병렬 프로세서에 전송하고 그로부터 수신하기 위해 고속 상호 접속부와 연결된다. GPGPU(700)의 다수의 인스턴스는 개별 데이터 프로세싱 시스템에 위치할 수 있으며, 호스트 인터페이스(702)를 통해 액세스할 수 있는 네트워크 장치를 통해 통신할 수 있다. GPU 링크(710)는 호스트 인터페이스(702)에 추가하여 또는 대안으로서 호스트 프로세서에 대한 접속을 가능하게 하도록 구성될 수 있다.
GPGPU(700)의 도시된 구성은 신경망을 훈련시키도록 구성될 수 있지만, GPGPU(700)의 대체 구성은 고성능 또는 저전력 추론 플랫폼 내에서 배치되도록 구성될 수 있다. 추론 구성에서, GPGPU(700)는 훈련 구성에 비해 더 적은 수의 프로세싱 클러스터(706A-706H)를 포함한다. 부가적으로, 메모리(714A-714B)와 관련된 메모리 기술은 추론 구성과 훈련 구성 간에 다를 수 있다. 일 실시예에서, GPGPU(700)의 추론 구성은 추론 특정 명령어를 지원할 수 있다. 예를 들어, 추론 구성은 배치된 신경망에 대한 추론 동작 중에 일반적으로 사용되는 하나 이상의 8 비트 정수 내적 명령어에 대한 지원을 제공할 수 있다.
도 8은 멀티-GPU 컴퓨팅 시스템(800)을 도시한다. 멀티-GPU 컴퓨팅 시스템(800)은 호스트 인터페이스 스위치(804)를 통해 복수의 GPGPU(806A-806D)에 연결된 프로세서(802)를 포함할 수 있다. 호스트 인터페이스 스위치(804)는 프로세서(802)를 PCI 익스프레스 버스에 연결하는 PCI 익스프레스 스위치 장치일 수 있으며, 프로세서(802)는 PCI 익스프레스 버스를 거쳐 GPGPU(806A-806D) 세트와 통신할 수 있다. 복수의 GPGPU(806A-806D) 각각은 도 7의 GPGPU의 인스턴스일 수 있다. GPGPU(806A-806D)는 고속 포인트-투-포인트 GPU-투-GPU 링크(816) 세트를 통해 상호 접속될 수 있다. 고속 GPU-투-GPU 링크는 도 7의 GPU 링크(710)와 같은 전용 GPU 링크를 통해 각각의 GPGPU(806A-806D)에 접속될 수 있다. P2P GPU 링크(816)는 프로세서(802)가 접속되는 호스트 인터페이스 버스를 통한 통신을 필요로 하지 않고 각각의 GPGPU(806A-806D) 사이의 직접 통신을 가능하게 한다. P2P GPU 링크로 향하는 GPU-투-GPU 트래픽을 사용하면, 호스트 인터페이스 버스는 시스템 메모리 액세스가 가능하거나 또는 예를 들어 하나 이상의 네트워크 네트워크를 통해 멀티-GPU 컴퓨팅 시스템(800)의 다른 인스턴스와 통신할 수 있는 상태로 유지된다. 도 8에서 GPGPU(806A-806D)는 호스트 인터페이스 스위치(804)를 통해 프로세서(802)에 접속되지만, 대안적으로 프로세서(802)는 P2P GPU 링크(816)에 대한 직접적인 지원을 포함할 수 있고 GPGPU(806A-806D)에 직접 접속할 수 있다. 일 실시예에서, P2P GPU 링크(816)는 멀티-GPU 컴퓨팅 시스템(800)으로 하여금 단일 로직 GPU로서 동작할 수 있게 한다.
머신 학습 신경망 구현
본 명세서에 설명된 컴퓨팅 아키텍처는 머신 학습을 위한 신경망을 훈련 및 배치하는 데 특히 적합한 병렬 프로세싱의 타입을 수행하도록 구성될 수 있다. 신경망은 그래프 관계를 갖는 기능의 네트워크로서 일반화될 수 있다. 이 분야에 잘 알려진 것과 같이, 머신 학습에 사용되는 신경망 구현예는 다양한 타입이 존재한다. 하나의 예시적 타입의 신경망은 전술한 것과 같은 피드포워드 네트워크이다.
두 번째 예시적 타입의 신경망은 컨볼루션 신경망(Convolutional Neural Network: CNN)이다. CNN은 이미지 데이터와 같이 공지의 그리드형 토폴로지를 갖는 데이터를 프로세싱하기 위한 특수 피드포워드 신경망이다. 따라서, CNN은 컴퓨팅 비전 및 이미지 인식 애플리케이션에 일반적으로 사용되지만, 스피치 및 언어 프로세싱과 같은 다른 타입의 패턴 인식에도 사용될 수 있다. CNN 입력 계층의 노드는 "필터"(망막에서 발견되는 수용 필드에서 영감을 얻은 특징 검출기) 세트로 구성되며, 각 필터 세트의 출력은 네트워크의 연속 계층의 노드로 전파된다. CNN의 계산은 컨볼루션 수학 연산을 각 필터에 적용하여 해당 필터의 출력을 생성하는 것을 포함한다. 컨볼루션은 2개의 오리지널 함수 중 하나의 수정된 버전인 세 번째 함수를 생성하기 위해 2개의 함수에 의해 수행되는 특수한 종류의 수학적 연산이다. 컨볼루션 네트워크 용어에서는, 컨볼루션에 대한 첫 번째 함수를 입력이라고 하고, 두 번째 함수를 컨볼루션 커널(kernel)이라고 한다. 출력은 특징 맵이라고 한다. 예를 들어, 컨볼루션 계층에 대한 입력은 입력 이미지의 다양한 컬러 컴포넌트를 정의하는 데이터의 다차원 배열일 수 있다. 컨볼루션 커널은 파라미터의 다차원 배열일 수 있는데, 여기서 파라미터는 신경망에 대한 훈련 과정에 의해 조정된다.
순환 신경망(recurrent neural network: RNN)은 계층들 사이의 피드백 접속을 포함하는 피드포워드 신경망의 패밀리이다. RNN은 신경망의 상이한 부분들에 걸쳐 파라미터 데이터를 공유하여 순차적 데이터의 모델링을 가능하게 한다. RNN의 아키텍처는 주기를 포함한다. RNN으로부터의 출력 데이터의 적어도 일부가 시퀀스에서 후속 입력을 프로세싱하기 위한 피드백으로서 사용되므로, 주기는 변수의 현재 값이 미래의 그 자체의 값에 미치는 영향을 나타낸다. 이러한 특징으로 인해 RNN은 언어 데이터를 구성할 수 있는 변수의 본질에 따른 언어 프로세싱에 특히 유용하다.
이하에서 설명된 도면은 예시적 피드포워드, CNN 및 RNN 네트워크를 제시하고, 또한 이러한 타입의 네트워크 각각을 각각 훈련하고 배치하기 위한 일반적인 과정을 설명한다. 이들 설명은 본 명세서에 설명된 임의의 특정 실시예에 대해 예시적이고 비제한적이며, 설명된 개념은 일반적으로 심층 신경망 및 머신 학습 기술에 일반적으로 적용될 수 있음이 이해될 것이다.
전술한 예시적 신경망은 딥 러닝(deep learning)을 수행하는 데 사용될 수 있다. 딥 러닝은 심층 신경망을 사용한 머신 학습이다. 딥 러닝에 사용되는 심층 신경망은 단일의 숨겨진 계층만을 포함하는 얕은 신경망과 달리 복수의 숨겨진 계층으로 구성된 인공 신경망이다. 강화된 심층 신경망은 훈련에 대해 일반적으로 더욱 계산 집약적이다. 그러나, 네트워크의 추가의 숨겨진 계층은 복수 단계 패턴 인식을 가능하게 하여 얕은 머신 학습 기술에 비해 출력 오류를 줄인다.
딥 러닝에 사용되는 심층 신경망은 전형적으로 백-엔드 네트워크에 연결된 특징 인식을 수행하는 프론트-엔드 네트워크를 포함하며, 이는 모델에 제공된 특징 표현에 기초하여 동작(예컨대, 객체 분류, 음성 인식 등)을 수행할 수 있는 수학적 모델을 나타낸다. 딥 러닝을 사용하면 모델에 대한 수동 설계 특징 엔지니어링을 수행하지 않고도 머신 학습을 수행할 수 있다. 대신, 심층 신경망은 입력 데이터 내의 통계적 구조 또는 상관 관계에 기초하여 특징을 학습할 수 있다. 학습된 특징은 검출된 특징을 출력에 매핑할 수 있는 수학적 모델에 제공될 수 있다. 네트워크에서 사용하는 수학적 모델은 수행될 특정 작업에 일반적으로 특화되어 있으며, 상이한 모델은 상이한 작업을 수행하는 데 사용될 것이다.
신경망이 구성되면, 학습 모델이 네트워크에 적용되어 특정 태스크를 수행하도록 네트워크를 훈련시킬 수 있다. 학습 모델은 출력 오류를 줄이기 위해 모델 내의 가중치를 조정하는 방법을 설명한다. 오류의 역전파는 신경망을 훈련하는 데 사용되는 일반적인 방법이다. 프로세싱을 위해 입력 벡터가 네트워크에 제공된다. 네트워크의 출력은 손실 함수를 사용하여 원하는 출력과 비교되며, 출력 계층의 각각의 뉴런에 대해 오류 값이 계산된다. 그런 다음, 오류 값은 각각의 뉴런이 오리지널 출력에 대한 기여를 대략적으로 나타내는 관련 오류 값을 가질 때까지 역전파된다. 그러면, 네트워크는 확률적 경사 하강 알고리즘과 같은 알고리즘을 사용하여 이러한 오류로부터 학습하여, 신경망의 가중치를 업데이트할 수 있다.
도 9a 및 도 9b는 예시적 컨볼루션 신경망을 도시한다. 도 9a는 CNN 내의 다양한 계층을 도시한다. 도 9a에 도시된 것과 같이, 이미지 프로세싱을 모델링하기 위해 사용된 예시적 CNN은, 입력 이미지의 레드, 그린 및 블루(RGB) 컴포넌트를 설명하는 입력(902)을 수신할 수 있다. 입력(902)은 복수의 컨볼루션 계층(예컨대, 컨볼루션 계층(904), 컨볼루션 계층(906))에 의해 프로세싱될 수 있다. 선택적으로, 복수의 컨볼루션 계층으로부터의 출력은 완전히 접속된 계층(908)의 세트에 의해 프로세싱될 수 있다. 완전히 접속된 계층의 뉴런은, 피드포워드 네트워크에 대해 전술한 것과 같이, 이전 계층에서의 모든 활성화에 대한 완전한 접속을 갖는다. 완전히 접속된 계층(908)으로부터의 출력은 네트워크로부터 출력 결과를 생성하는 데 사용될 수 있다. 완전히 접속된 계층(908) 내의 활성화는 컨볼루션 대신 매트릭스 곱셈을 사용하여 컴퓨팅될 수 있다. 모든 CNN 구현예가 완전히 접속된 계층(908)을 사용하는 것은 아니다. 예를 들어, 일부 구현예에서는, 컨볼루션 계층(906)이 CNN에 대한 출력을 생성할 수 있다.
컨볼루션 계층은 드문드문 접속되는데, 이는 완전히 접속된 계층(908)에서 발견되는 전통적인 신경망 구성과 다르다. 전통적인 신경망 계층은 모든 출력 유닛이 모든 입력 유닛과 상호 작용하도록 완전히 접속된다. 그러나, 전술한 것과 같이, 필드의 컨볼루션의 출력이 (필드 내의 각 노드의 각각의 상대적 상태 값을 대신하여) 후속 계층의 노드에 입력되기 때문에, 컨볼루션 계층은 드문드문 접속된다. 컨볼루션 계층과 관련된 커널은 컨볼루션 연산을 수행하며 그 출력은 다음 계층으로 전송된다. 컨볼루션 계층 내에서 수행되는 차원 축소는, CNN이 큰 이미지를 프로세싱하도록 스케일링될 수 있게 하는 하나의 양태이다.
도 9b은 CNN의 컨볼루션 계층 내의 예시적 계산 단계를 도시한다. CNN의 컨볼루션 계층으로의 입력(912)은 컨볼루션 계층(914)의 3 단계로 프로세싱될 수 있다. 3 단계는 컨볼루션 단계(916), 검출기 단계(918) 및 풀링 단계(920)를 포함할 수 있다. 이후, 컨볼루션 계층(914)은 후속 컨볼루션 계층으로 데이터를 출력할 수 있다. 네트워크의 최종 컨볼루션 계층은 출력 특징 맵 데이터를 생성하거나 또는 완전히 접속된 계층에 입력을 제공하여, 예를 들어, CNN으로의 입력에 대한 분류 값을 생성할 수 있다.
컨벌루션 단계(916)에서는 일련의 선형 활성화를 생성하는 여러 컨볼루션이 병렬로 수행된다. 컨벌루션 단계(916)는 아핀(affine) 변환을 포함할 수 있는데, 이것은 선형 변환과 이동(translation)의 합으로 지정될 수 있는 임의의 변환이다. 아핀 변환은 회전, 이동, 스케일링 및 이러한 변환의 조합을 포함한다. 컨벌루션 단계는 입력의 특정 영역에 접속된 함수(예컨대, 뉴런)의 출력을 컴퓨팅하는데, 입력의 특정 영역은 뉴런과 관련된 로컬 영역으로서 결정될 수 있다. 뉴런은 뉴런의 가중치와 뉴런이 접속된 로컬 입력의 영역 사이의 내적을 컴퓨팅한다. 컨볼루션 단계(916)로부터의 출력은 컨볼루션 계층(914)의 후속 단계에 의해 프로세싱되는 선형 활성화 세트를 정의한다.
선형 활성화는 검출기 단계(918)에 의해 프로세싱될 수 있다. 검출기 단계(918)에서, 각각의 선형 활성화는 비선형 활성화 함수에 의해 프로세싱된다. 비선형 활성화 함수는 컨볼루션 계층의 수용 필드에 영향을 미치지 않으면서 전체 네트워크의 비선형 속성을 증가시킨다. 여러 타입의 비선형 활성화 함수가 사용될 수 있다. 하나의 특정 타입은 정류 선형 유닛(rectified linear unit: ReLU)인데, 이는 f(x) = max(0, x)로 정의된 활성화 함수를 사용하여 활성화가 0에서 임계값이 되도록 한다.
풀링 단계(920)는 컨볼루션 계층(906)의 출력을 근처의 출력의 요약 통계로 대체하는 풀링 함수를 사용한다. 풀링 함수는 신경망에 이동 불변성을 도입하는 데 사용될 수 있으므로, 입력에 대한 작은 이동은 풀링된 출력을 변경하지 않는다. 로컬 이동에 대한 불변성은, 특징의 정확한 위치보다 입력 데이터 내의 특징의 존재가 더 중요한 시나리오에서 유용할 수 있다. 풀링 단계(920)에서는, 최대 풀링, 평균 풀링 및 l2-표준(norm) 풀링을 포함하는 다양한 타입의 풀링 함수가 사용될 수 있다. 또한 일부 CNN 구현예는 풀링 단계를 포함하지 않는다. 대신에, 이러한 구현예는 이전 컨볼루션 단계에 비해 증가된 스트라이드(stride)를 갖는 추가 컨볼루션 단계로 대체한다.
컨볼루션 계층(914)으로부터의 출력은 후속 계층(922)에 의해 프로세싱될 수 있다. 후속 계층(922)은 완전히 접속된 계층(908) 중 하나 또는 추가 컨볼루션 계층일 수 있다. 예를 들어, 도 9a의 제 1 컨볼루션 계층(904)은 제 2 컨볼루션 계층(906)으로 출력할 수 있고, 제 2 컨볼루션 계층은 완전히 접속된 계층(908)의 제 1 계층으로 출력할 수 있다.
도 10은 예시적 순환 신경망(1000)을 도시한다. 순환 신경망(RNN)에서, 네트워크의 이전 상태는 네트워크의 현재 상태의 출력에 영향을 미친다. RNN은 다양한 함수를 사용하여 다양한 방식으로 구축될 수 있다. RNN의 사용은 일반적으로 입력의 이전 시퀀스에 기초하여 미래를 예측하는 수학적 모델을 사용하는 것을 중심으로 이루어진다. 예를 들어, RNN은 단어의 이전 시퀀스가 주어지면 다음에 올 단어를 예측하는 통계 언어 모델링을 수행하는 데 사용될 수 있다. 도시된 RNN(1000)은 입력 벡터를 수신하는 입력 계층(1002), 순환 기능을 구현하는 숨겨진 계층(1004), 이전 상태의 '메모리'를 활성화시키는 피드백 메커니즘(1005), 및 결과를 출력하는 출력 계층(1006)을 갖는 것으로 설명될 수 있다. RNN(1000)은 시간 단계에 기초하여 동작한다. 주어진 시간 단계에서 RNN의 상태는 피드백 메커니즘(1005)을 통해 이전 시간 단계에 기초하여 영향을 받는다. 주어진 시간 단계에서, 숨겨진 계층(1004)의 상태는 이전 상태 및 현재 시간 단계에서의 입력에 의해 정의된다. 제 1 시간 단계에서의 초기 입력(x1)은 숨겨진 계층(1004)에 의해 프로세싱될 수 있다. 제 2 입력(x2)은 초기 입력(x1)의 프로세싱 동안 결정된 상태 정보를 사용하여 숨겨진 계층(1004)에 의해 프로세싱될 수 있다. 주어진 상태는 st = f(Uxt + Ws(t-1))로 컴퓨팅될 수 있으며, 여기서 U와 W는 파라미터 매트릭스이다. 함수(f)는, 쌍곡선 탄젠트 함수(Tanh) 또는 정류기 함수 f(x) = max(0, x)의 변형과 같이, 일반적으로 비선형이다. 그러나, 숨겨진 계층(1004)에서 사용되는 특정 산술 함수는 RNN(1000)의 특정 구현예의 세부 사항에 따라 변할 수 있다.
설명된 기본 CNN 및 RNN 네트워크 외에, 이들 네트워크에 대한 변형의 가속화가 활성화될 수 있다. RNN 변형의 일 예는 LSTM(long short term memory) RNN이다. LSTM RNN은 언어의 더 긴 시퀀스를 프로세싱하는 데 필요할 수 있는 장기적인 종속성을 학습할 수 있다. CNN의 변형은 컨볼루션 DBN(deep belief network)인데, 이는 CNN과 유사한 구조를 가지며 DBN과 유사한 방식으로 훈련된다. DBN은 확률적(랜덤) 변수의 복수 계층으로 구성된 생성(generative) 신경망이다. DBN은 포식성 비지도 학습(greedy unsupervised learning)을 사용하여 계층 단위로 학습될 수 있다. 이후, DBN의 학습된 가중치는 신경망에 대한 최적의 초기 가중치 세트를 결정함으로써 사전 훈련 신경망을 제공하는 데 사용될 수 있다. 추가 실시예에서, 강화 학습을 위한 가속화가 활성화될 수 있다. 강화 학습에서, 인공 에이전트는 환경과 상호 작용함으로써 학습한다. 에이전트는 누적 보상을 최대화하기 위해 특정 목표를 최적화하도록 구성된다.
도 11은 심층 신경망의 훈련 및 배치를 도시한다. 주어진 네트워크가 태스크를 위해 구조화되면, 신경망은 훈련 데이터세트(1102)를 사용하여 훈련된다. 훈련 과정의 하드웨어 가속이 가능하도록 다양한 훈련 체계(1104)가 개발되었다. 예를 들어, 도 6의 머신 학습 체계(604)는 훈련 체계(604)로서 구성될 수 있다. 훈련 체계(604)는 훈련되지 않은 신경망(1106)에 연결될 수 있고, 본 명세서에 설명된 병렬 프로세싱 리소스를 사용하여 훈련되지 않은 신경망을 훈련시켜 훈련된 신경망(1108)을 생성할 수 있다.
훈련 과정을 시작하기 위해, 초기 가중치는 랜덤하게 또는 DBN을 사용하는 사전 훈련에 의해 선택될 수 있다. 이 때, 훈련 주기는 지도 또는 비지도 방식으로 수행된다.
지도 학습은, 예컨대, 훈련 데이터세트(1102)가 입력에 대한 원하는 출력과 쌍을 이루는 입력을 포함하는 경우, 또는 훈련 데이터세트가 알려진 출력을 갖는 입력을 포함하고 신경망의 출력이 수동적으로 등급이 정해지는 경우, 중재된 동작으로서 훈련이 수행되는 학습 방법이다. 네트워크는 입력을 프로세싱하고 산출되는 출력을 예상 또는 원하는 출력 세트와 비교한다. 이후, 시스템을 통해 오류가 역전파된다. 훈련 체계(1104)는 훈련되지 않은 신경망(1106)을 제어하는 가중치를 조정하도록 조정할 수 있다. 훈련 체계(1104)는 훈련되지 않은 신경망(1106)이 알려진 입력 데이터에 기초하여 정확한 답변을 생성하기에 적합한 모델을 향해 얼마나 잘 수렴하는지를 모니터하는 도구를 제공할 수 있다. 훈련 과정은 신경망에 의해 생성된 출력을 개선하기 위해 네트워크의 가중치가 조정됨에 따라 반복적으로 발생한다. 훈련 과정은 신경망이 훈련된 신경망(1108)과 관련된 통계적으로 원하는 정확도에 도달할 때까지 계속될 수 있다. 이후, 훈련된 신경망(1108)은 새로운 데이터(1112)의 입력에 기초하여 추론 결과(1114)를 생성하기 위해 임의의 개수의 머신 학습 동작을 구현하도록 배치될 수 있다.
비지도 학습은 네트워크가 표시되지 않은 데이터(unlabeled data)를 사용하여 스스로 학습을 시도하는 학습 방법이다. 따라서, 비지도 학습을 위해, 훈련 데이터세트(1102)는 어떠한 관련된 출력 데이터 없이 입력 데이터를 포함할 것이다. 훈련되지 않은 신경망(1106)은 표시되지 않은 입력 내의 그룹화를 학습할 수 있고, 개별 입력이 전체 데이터세트와 어떻게 관련되는지를 결정할 수 있다. 비지도 훈련은, 데이터의 차원을 감소시키기에 유용한 연산을 수행할 수 있는 훈련된 신경망(1108)의 한 타입인 자체 구성 맵(self-organizing map)을 생성하는 데 사용될 수 있다. 비지도 훈련은 또한 이상 검출을 수행하는 데 사용될 수 있는데, 이상 검출은 입력 데이터세트에서 데이터의 정상적인 패턴에서 벗어난 데이터 포인트의 식별을 허용한다.
지도 및 비지도 훈련에 대한 변형이 또한 사용될 수 있다. 반지도 학습은 훈련 데이터세트(1102)에 동일한 분포의 표시된 데이터와 표시되지 않은 데이터가 혼합된 것이 포함되는 기술이다. 증분 학습은 입력 데이터를 지속적으로 사용하여 모델을 추가 훈련하는 지도 학습의 변형이다. 증분 학습은 훈련된 신경망(1108)이 초기 훈련 동안 네트워크 내에 주입된 지식을 잊지 않고 새로운 데이터(1112)에 적응할 수 있도록 한다.
지도인지 비지도인지에 관계없이, 특히 심층 신경망에 대한 훈련 과정은 단일 컴퓨팅 노드에 대해 너무 계산 집약적일 수 있다. 단일 컴퓨팅 노드를 사용하는 대신 컴퓨팅 노드의 분산 네트워크를 사용하여 훈련 과정을 가속화할 수 있다.
도 12a는 분산 학습을 도시하는 블록도이다. 분산 학습은 복수의 분산 컴퓨팅 노드를 사용하여 신경망의 지도 또는 비지도 훈련을 수행하는 훈련 모델이다. 분산 컴퓨팅 노드는 각각, 도 7의 고도-병렬 범용 그래픽 프로세싱 유닛(700)과 같은 범용 프로세싱 노드들 중 하나 이상과 하나 이상의 호스트 프로세서를 포함할 수 있다. 도시된 것과 같이, 분산 학습은 모델 병렬성(1202), 데이터 병렬성(1204), 또는 모델 및 데이터 병렬성의 조합(1206)을 이용해서 수행될 수 있다.
모델 병렬성(1202)에서, 분산 시스템의 상이한 컴퓨팅 노드는 단일 네트워크의 상이한 부분에 대한 훈련 계산을 수행할 수 있다. 예를 들어, 신경망의 각각의 계층은 분산 시스템의 다른 프로세싱 노드에 의해 학습될 수 있다. 모델 병렬성의 이점은 특히 큰 모델로 스케일링할 수 있는 능력을 포함한다. 신경망의 상이한 계층들과 관련된 계산을 분할하면, 모든 계층의 가중치가 단일 컴퓨팅 노드의 메모리에 맞지 않는 매우 큰 신경망을 훈련할 수 있다. 일부 인스턴스에서, 모델 병렬성은 대규모 신경망의 비지도 훈련을 수행하는 데 특히 유용할 수 있다.
데이터 병렬성(1204)에서, 분산 네트워크의 상이한 노드들은 모델의 완료된 인스턴스를 가지며 각각의 노드는 데이터의 상이한 부분을 수신한다. 이후, 상이한 노드들로부터의 결과가 결합된다. 데이터 병렬성에 대한 다른 접근법이 가능하지만, 모든 데이터 병렬 훈련 접근법은 결과를 결합하고 각각의 노드 사이에서 모델 파라미터를 동기화하는 기술을 필요로 한다. 데이터를 결합하는 예시적 접근법은 파라미터 평균화 및 업데이트 기반 데이터 병렬성을 포함한다. 파라미터 평균화는 훈련 데이터의 서브세트 상에서 각각의 노드를 훈련시키고, 전역 파라미터(예컨대, 가중치, 바이어스)를 각각의 노드로부터의 파라미터의 평균으로 설정한다. 파라미터 평균화는 파라미터 데이터를 관리하는 중앙 파라미터 서버를 사용한다. 업데이트 기반 데이터 병렬성은 노드로부터의 파라미터를 파라미터 서버로 전송하는 대신 모델에 대한 업데이트가 전송된다는 점을 제외하고는 파라미터 평균화와 유사하다. 또한 업데이트 기반 데이터 병렬성은 분산된 방식으로 수행될 수 있는데, 여기서 업데이트는 압축되어 노드들 간에 전송된다.
조합된 모델 및 데이터 병렬성(1206)은, 예를 들어 각각의 컴퓨팅 노드가 복수의 GPU를 포함하는 분산 시스템에서 구현될 수 있다. 각각의 노드는 모델의 완료된 인스턴스를 가질 수 있고, 각각의 노드 내의 분리된 GPU는 모델의 상이한 부분을 훈련시키는 데 사용된다.
분산 훈련은 단일 머신 상에서의 훈련에 비해 오버헤드를 증가시킨다. 그러나, 본 명세서에 설명된 병렬 프로세서 및 GPGPU는 각각, 고대역폭 GPU-투-GPU 데이터 전송 및 가속 원격 데이터 동기화를 가능하게 하는 기술을 포함하여 분산 훈련의 오버헤드를 감소시키는 다양한 기술을 구현할 수 있다.
도 12b는 프로그래밍 가능 네트워크 인터페이스(1210) 및 데이터 프로세싱 유닛을 도시하는 블록도이다. 프로그래밍 가능 네트워크 인터페이스(1210)는 분산 환경 내에서 네트워크 기반 컴퓨팅 작업을 가속화하는 데 사용될 수 있는 프로그래밍 가능 네트워크 엔진이다. 프로그래밍 가능 네트워크 인터페이스(1210)는 호스트 인터페이스(1270)를 통해 호스트 시스템과 연결될 수 있다. 프로그래밍 가능 네트워크 인터페이스(1210)는 호스트 시스템의 CPU 또는 GPU에 대한 네트워크 또는 저장 동작을 가속화하기 위해 사용될 수 있다. 예를 들어, 호스트 시스템은, 예를 들어 도 12a에 도시된 바와 같은 분산 훈련을 수행하기 위해 사용되는 분산 학습 시스템의 노드일 수 있다. 호스트 시스템은 또한 데이터 센터 내의 데이터 센터 노드일 수 있다.
일 실시예에서, 모델 데이터를 포함하는 원격 스토리지에 대한 액세스는 프로그래밍 가능 네트워크 인터페이스(1210)에 의해 가속화될 수 있다. 예를 들어, 프로그래밍 가능 네트워크 인터페이스(1210)는 원격 저장 장치를 로컬 저장 장치로서 호스트 시스템에 제공하도록 구성될 수 있다. 프로그래밍 가능 네트워크 인터페이스(1210)는 또한 원격 시스템의 GPU를 갖는 호스트 시스템의 GPU들 사이에서 수행되는 원격 직접 메모리 액세스(remote direct memory access: RDMA) 동작을 가속화할 수 있다. 일 실시예에서, 프로그래밍 가능 네트워크 인터페이스(1210)는 NVME-oF와 같은(이에 제한되지는 않음) 저장 기능을 가능하게할 수 있다. 프로그래밍 가능 네트워크 인터페이스(1210)는 또한 호스트 시스템을 대신하여 원격 스토리지에 대한 암호화, 데이터 무결성, 압축, 및 다른 동작을 가속화할 수 있으므로, 원격 스토리지는 호스트 시스템에 직접 부착되는 저장 장치의 대기 시간에 접근할 수 있다.
프로그래밍 가능 네트워크 인터페이스(1210)는 또한 호스트 시스템을 대신하여 리소스 할당 및 관리를 수행할 수 있다. 스토리지 보안 동작은 프로그래밍 가능 네트워크 인터페이스(1210)로 오프로딩될 수 있고, 원격 스토리지 리소스의 할당 및 관리와 함께 수행될 수 있다. 호스트 시스템의 프로세서에 의해 수행될 수도 있는 원격 스토리지에 대한 액세스를 관리하기 위한 네트워크 기반 동작은 프로그래밍 가능 네트워크 인터페이스(1210)에 의해 대신 수행될 수 있다.
일 실시예에서, 네트워크 및/또는 데이터 보안 동작은 호스트 시스템에서 프로그래밍 가능 네트워크 인터페이스(1210)로 오프로딩될 수 있다. 데이터 센터 노드에 대한 데이터 센터 보안 정책은 호스트 시스템의 프로세서 대신 프로그래밍 가능 네트워크 인터페이스(1210)에 의해 처리될 수 있다. 예를 들어, 프로그래밍 가능 네트워크 인터페이스(1210)는 호스트 시스템 상에서 시도된 네트워크 기반 공격(예컨대, DDoS)을 검출하고 완화하여, 공격이 호스트 시스템의 가용성을 손상시키는 것을 방지할 수 있다.
프로그래밍 가능 네트워크 인터페이스(1210)는 다수의 프로세서 코어(1222)를 통해 운영 시스템을 실행하는 시스템 온 칩(SoC)(1220)을 포함할 수 있다. 프로세서 코어(1222)는 범용 프로세서(예컨대, CPU) 코어를 포함할 수 있다. 일 실시예에서, 프로세서 코어(1222)는 또한 하나 이상의 GPU 코어를 포함할 수 있다. SoC(1220)는 메모리 장치(1240)에 저장된 명령어를 실행할 수 있다. 저장 장치(1250)는 로컬 운영 시스템 데이터를 저장할 수 있다. 저장 장치(1250) 및 메모리 장치(1240)는 또한 호스트 시스템에 대한 원격 데이터를 캐시하는 데 사용될 수 있다. 네트워크 포트(1260A-1260B)는 네트워크 또는 패브릭에 대한 접속을 가능하게 하고, SoC(1220)에 대한 네트워크 액세스를 용이하게 하며, 호스트 인터페이스(1270)를 통해 호스트 시스템에 대해 네트워크 액세스를 용이하게 한다. 프로그래밍 가능 네트워크 인터페이스(1210)는 또한 USB 인터페이스와 같은 I/O 인터페이스(1275)를 포함할 수 있다. I/O 인터페이스(1275)는 외부 장치를 프로그래밍 가능한 네트워크 인터페이스(1210)에 연결하는 데 사용될 수 있거나 디버그 인터페이스로서 사용될 수 있다. 프로그래밍 가능 네트워크 인터페이스(1210)는 또한 호스트 장치 상의 소프트웨어로 하여금 프로그래밍 가능 네트워크 인터페이스(1210) 및/또는 SoC(1220)를 관리하고 구성할 수 있게 하는 관리 인터페이스(1230)를 포함한다. 일 실시예에서, 프로그래밍 가능 네트워크 인터페이스(1210)는 또한, SoC(1220), 호스트 시스템, 또는 네트워크 포트(1260A-1260B)를 통해 연결된 원격 시스템으로부터의 병렬 컴퓨팅 작업의 오프로딩을 수락하기 위해 하나 이상의 가속기 또는 GPU(1245)를 포함할 수 있다.
예시적 머신 학습 애플리케이션
머신 학습은, 컴퓨터 비전, 자율 주행 및 내비게이션, 음성 인식, 및 언어 프로세싱을 포함하지만 이에 제한되지 않는 다양한 기술적 문제를 해결하기 위해 적용될 수 있다. 컴퓨터 비전은 전통적으로 머신 학습 애플리케이션에서 가장 활발한 연구 분야 중 하나였다. 컴퓨터 비전의 애플리케이션은 얼굴 인식과 같은 인간의 시각 능력의 재생에서 시각 능력의 새로운 카테고리를 생성하는 것에까지 이른다. 예를 들어, 컴퓨터 비전 애플리케이션은 비디오에서 볼 수 있는 물체에 유도된 진동으로부터 음파를 인식하도록 구성될 수 있다. 병렬 프로세서 가속 머신 학습은 이전에 가능했던 것보다 훨씬 더 많은 훈련 데이터세트를 사용하여 컴퓨터 비전 애플리케이션을 훈련하는 것을 가능하게 하고, 저전력 병렬 프로세서를 사용하여 추론 시스템을 배치하는 것을 가능하게 한다.
병렬 프로세서 가속 머신 학습은, 차선 및 도로 표지판 인식, 장애물 회피, 내비게이션, 및 주행 제어를 포함하는 자율 주행 애플리케이션을 갖는다. 가속 머신 학습 기술은 특정 훈련 입력에 대한 적절한 응답을 정의하는 데이터세트에 기초하여 운전 모델을 훈련하는 데 사용될 수 있다. 본 명세서에 설명된 병렬 프로세서는 자율 주행 솔루션에 사용되는 점점 더 복잡한 신경망의 빠른 훈련을 가능하게 하고, 자율 주행 차량에 통합하기에 적합한 모바일 플랫폼에 저전력 추론 프로세서를 배치하는 것을 가능하게 한다.
병렬 프로세서 가속 심층 신경망은 자동 음성 인식(ASR)에 대한 머신 학습 접근법을 가능하게 하였다. ASR은 입력 음향 시퀀스가 주어지면 가장 가능성 있는 언어 시퀀스를 컴퓨팅하는 기능의 생성을 포함한다. 심층 신경망을 사용하는 가속 머신 학습은, 이전에 ASR에 사용된 HMM(hidden Makov model) 및 GMM(Gaussian mixture model)의 대체를 가능하게 했다.
병렬 프로세서 가속 머신 학습은 또한 자연 언어 프로세싱을 가속화하는 데 사용될 수 있다. 자동 학습 절차는 통계적 추론 알고리즘을 사용하여 잘못되었거나 또는 익숙하지 않은 입력에 대해 강인한 모델을 생성할 수 있다. 예시적 자연 언어 프로세서 애플리케이션은 인간 언어들 간의 자동 기계 번역을 포함한다.
머신 학습에 사용되는 병렬 프로세싱 플랫폼은 훈련 플랫폼 및 배치 플랫폼으로 나뉠 수 있다. 훈련 플랫폼은 일반적으로 고도로 병렬적이며, 멀티-GPU 단일 노드 훈련 및 멀티-노드 멀티-GPU 훈련을 가속화하는 최적화를 포함한다. 훈련에 적합한 예시적 병렬 프로세서는 도 7의 범용 그래픽 프로세싱 유닛(700) 및 도 8의 멀티-GPU 컴퓨팅 시스템(800)을 포함한다. 반대로, 배치된 머신 학습 플랫폼은 일반적으로, 카메라, 자율 로봇 및 자율 주행 차량과 같은 제품에 사용하기에 적합한 저전력 병렬 프로세서를 포함한다.
또한, 그래픽 프로세싱 활동을 가속화하거나 향상시키기 위해 머신 학습 기술이 적용될 수 있다. 예를 들어, 머신 학습 모델은 GPU 가속 애플리케이션에 의해 생성된 출력을 인식하고 해당 출력의 업 스케일된 버전을 생성하도록 훈련될 수 있다. 이러한 기술은 게임 애플리케이션을 위한 고해상도 이미지의 생성을 가속화 하기 위해 적용될 수 있다. 다양한 다른 그래픽 파이프라인 활동은 머신 학습을 사용하여 이점을 얻을 수 있다. 예를 들어, 머신 학습 모델은 기하학적 모델의 복잡성을 높이기 위해 기하 데이터에 대한 테셀레이션 동작을 수행하도록 훈련될 수 있으므로, 상대적으로 낮은 디테일의 기하(geometry)로부터 미세한 디테일의 기하가 자동으로 생성될 수 있다.
도 13은 훈련된 모델을 사용하여 추론을 수행하기에 적합한 예시적 추론 시스템 온 칩(SOC)(1300)을 도시한다. SOC(1300)는, 미디어 프로세서(1302), 비전 프로세서(1304), GPGPU(1306) 및 멀티-코어 프로세서(1308)를 포함하는 프로세싱 컴포넌트들을 통합할 수 있다. GPGPU(1306)는 GPGPU(700)와 같은 본 명세서에 설명된 GPGPU일 수 있고, 멀티-코어 프로세서(1308)는 멀티-코어 프로세서(405-406)와 같은 본 명세서에 설명된 멀티-코어 프로세서일 수 있다. SOC(1300)는 각각의 프로세싱 컴포넌트가 액세스할 수 있는 공유형 온-칩 데이터 풀을 가능하게 하는 온-칩 메모리(1305)를 추가로 포함할 수 있다. 프로세싱 컴포넌트는 저전력 동작에 최적화되어 자율 주행 차량 및 자율 로봇을 포함한 다양한 머신 학습 플랫폼으로의 배치를 가능하게할 수 있다. 예를 들어, SOC(1300)의 일 구현예는 자율 주행 차량을 위한 주 제어 시스템의 일부로서 사용될 수 있다. SOC(1300)가 자율 주행 차량에 사용되도록 구성되는 경우 SOC는 배치 관할 구역의 관련 기능성 안전 표준을 준수하도록 설계 및 구성된다.
동작하는 동안, 미디어 프로세서(1302) 및 비전 프로세서(1304)는 컴퓨터 비전 동작을 가속화하기 위해 함께 작동할 수 있다. 미디어 프로세서(1302)는 복수의 고해상도(예컨대, 4K, 8K) 비디오 스트림의 낮은 대기 시간 디코딩을 가능하게할 수 있다. 디코딩된 비디오 스트림은 온-칩 메모리(1305)의 버퍼에 기록될 수 있다. 이후, 비전 프로세서(1304)는, 디코딩된 비디오를 파싱하고, 훈련된 이미지 인식 모델을 사용하여 프레임을 프로세싱할 준비를 위해, 디코딩된 비디오의 프레임에 대해 예비 프로세싱 동작을 수행할 수 있다. 예를 들어, GPGPU(1306)에 의해 백 엔드 모델 계산이 수행되는 동안, 비전 프로세서(1304)는 고해상도 비디오 데이터에 대한 이미지 인식을 수행하는 데 사용되는 CNN에 대한 컨볼루션 연산을 가속화할 수 있다.
멀티-코어 프로세서(1308)는 미디어 프로세서(1302) 및 비전 프로세서(1304)에 의해 수행되는 데이터 전송 및 공유 메모리 동작의 시퀀싱 및 동기화를 보조하는 제어 로직을 포함할 수 있다. 멀티-코어 프로세서(1308)는 또한 GPGPU(1306)의 추론 컴퓨팅 능력을 사용할 수 있는 소프트웨어 애플리케이션을 실행하는 애플리케이션 프로세서로서 기능할 수 있다. 예를 들어, 내비게이션 및 구동 로직의 적어도 일부는 멀티-코어 프로세서(1308) 상에서 실행되는 소프트웨어로 구현될 수 있다. 이러한 소프트웨어는 계산 워크로드를 GPGPU(1306)로 직접 발행하거나 또는 계산 워크로드가 멀티-코어 프로세서(1308)로 발행될 수 있는데, 멀티-코어 프로세서(1308)는 이러한 동작의 적어도 일부를 GPGPU(1306)로 오프로딩할 수 있다.
GPGPU(1306)는 범용 그래픽 프로세싱 유닛(700) 내의 프로세싱 클러스터(706A-706H)의 저전력 구성과 같은 컴퓨팅 클러스터를 포함할 수 있다. GPGPU(1306) 내의 컴퓨팅 클러스터는 훈련된 신경망에서 추론 계산을 수행하도록 구체적으로 최적화된 명령어를 지원할 수 있다. 예를 들어, GPGPU(1306)는 8 비트 및 4 비트 정수 벡터 연산과 같은 낮은 정밀도 계산을 수행하는 명령어를 지원할 수 있다.
추가 시스템 개요
도 14는 프로세싱 시스템(1400)의 블록도이다. 본원의 임의의 다른 도면의 요소와 동일하거나 유사한 명칭을 갖는 도 14의 요소는 다른 도면에서와 동일한 요소를 설명하고, 그와 유사한 방식으로 동작하거나 기능할 수 있고, 본 명세서의 다른 곳에서 설명된 것과 동일한 컴포넌트를 포함할 수 있으며 다른 엔티티에 링크될 수 있지만, 이에 제한되지는 않는다. 시스템(1400)은 단일 프로세서 데스크탑 시스템, 멀티 프로세서 워크스테이션 시스템, 또는 많은 수의 프로세서(1402) 또는 프로세서 코어(1407)를 갖는 서버 시스템에서 사용될 수 있다. 시스템(1400)은 로컬 또는 광역 네트워크에 유선 또는 무선으로 연결될 수 있는 사물 인터넷(IoT) 내의 장치와 같은 모바일, 휴대형 또는 내장형 장치에 사용되는 시스템 온 칩(SoC) 집적 회로 내에 통합된 프로세싱 플랫폼일 수 있다.
시스템(1400)은 도 1의 컴포넌트에 대응하는 컴포넌트를 갖는 프로세싱 시스템일 수 있다. 예를 들어, 상이한 구성에서, 프로세서(들)(1402) 또는 프로세서 코어(들)(1407)는 도 1의 프로세서(들)(102)에 대응할 수 있다. 그래픽 프로세서 (들)(1408)는 도 1의 병렬 프로세서(들)(112)에 대응할 수 있다. 외부 그래픽 프로세서(1418)는 도 1의 애드인 장치(들)(120) 중 하나일 수 있다.
시스템(1400)은 서버 기반 게이밍 플랫폼, 및 게임 및 미디어 콘솔, 모바일 게이밍 콘솔, 휴대형 게임 콘솔 또는 온라인 게임 콘솔을 포함하는 게임 콘솔을 포함하거나, 이들에 연결되거나, 이들 내에 통합될 수 있다. 시스템(1400)은 휴대 전화, 스마트 폰, 태블릿 컴퓨팅 장치 또는 내부 저장 용량이 작은 랩탑과 같은 모바일 인터넷 연결 장치의 일부일 수 있다. 프로세싱 시스템(1400)은 또한 스마트 와치 웨어러블 장치와 같은 웨어러블 장치; 실제 시각, 오디오 또는 촉각 경험을 보완하기 위한 시각적, 오디오 또는 촉각 출력을 제공하거나 텍스트, 오디오, 그래픽, 비디오, 홀로그램 이미지 또는 비디오 또는 촉각 피드백을 제공하는 증강 현실(AR) 또는 가상 현실(VR) 기능으로 강화된 스마트 아이웨어 또는 의복; 다른 증강 현실(AR) 장치; 또는 다른 가상 현실(VR) 장치를 포함하거나, 이들에 연결되거나, 이들 내에 통합될 수 있다. 프로세싱 시스템(1400)은 텔레비전 또는 셋톱 박스 장치를 포함하거나 그 일부일 수 있다. 시스템(1400)은 버스, 트랙터 트레일러, 자동차, 모터 또는 전동 사이클, 비행기 또는 글라이더(또는 이들의 임의의 조합)와 같은 자율 주행 차량을 포함하거나, 이들에 연결되거나, 이들 내에 통합될 수 있다. 자율 주행 차량은 시스템(1400)을 사용하여 차량 주위에서 감지된 환경을 처리할 수 있다.
하나 이상의 프로세서(1402)는 실행될 때 시스템 또는 사용자 소프트웨어에 대한 동작을 수행하는 명령어를 처리하는 하나 이상의 프로세서 코어(1407)를 포함할 수 있다. 하나 이상의 프로세서 코어(1407) 중 적어도 하나는 특정 명령어 세트(1409)를 처리하도록 구성될 수 있다. 명령어 세트(1409)는 CISC(Complex Instruction Set Computing), RISC(Reduced Instruction Set Computing), 또는 VLIW(Very Long Instruction Word)를 통한 컴퓨팅을 용이하게할 수 있다. 하나 이상의 프로세서 코어(1407)는 다른 명령어 세트의 에뮬레이션을 용이하게 하는 명령어를 포함할 수 있는 다른 명령어 세트(1409)를 처리할 수 있다. 프로세서 코어(1407)는 또한 DSP(Digital Signal Processor)와 같은 다른 프로세싱 장치를 포함할 수 있다.
프로세서(1402)는 캐시 메모리(1404)를 포함할 수 있다. 아키텍처에 따라, 프로세서(1402)는 단일 내부 캐시 또는 내부 캐시의 복수 레벨을 가질 수 있다. 일부 실시예에서, 캐시 메모리는 프로세서(1402)의 다양한 컴포넌트 사이에서 공유된다. 일부 실시예에서, 프로세서(1402)는 또한 외부 캐시(예를 들어, 레벨 3(L3) 캐시 또는 LLC(Last Level Cache))(도시하지 않음)를 사용하고, 이들은 공지의 캐시 일관성 기술(cache coherency techniques)을 사용하여 프로세서 코어(1407) 사이에서 공유될 수 있다. 레지스터 파일(1406)이 프로세서(1402)에 추가로 포함될 수 있으며, 상이한 타입의 데이터를 저장하는 상이한 타입의 레지스터(예를 들어, 정수 레지스터, 부동 소수점 레지스터, 상태 레지스터 및 명령어 포인터 레지스터)를 포함할 수 있다. 일부 레지스터는 범용 레지스터일 수 있지만, 다른 레지스터는 프로세서(1402)의 설계에 특정될 수 있다.
하나 이상의 프로세서(들)(1402)는 하나 이상의 인터페이스 버스(들)(1410)와 연결되어 시스템(1400)의 프로세서(1402)와 다른 컴포넌트 사이에서 주소, 데이터 또는 제어 신호와 같은 통신 신호를 전송할 수 있다. 이런 실시예들 중 하나에서, 인터페이스 버스(1410)는 DMI(Direct Media Interface) 버스의 특정 버전과 같은 프로세서 버스일 수 있다. 그러나, 프로세서 버스는 DMI 버스로 제한되지 않으며, 하나 이상의 PCI(Peripheral Component Interconnect) 버스(예를 들어, PCI, PCI 익스프레스), 메모리 버스 또는 다른 타입의 인터페이스 버스를 포함할 수 있다. 프로세서(들)(1402)는 통합된 메모리 제어기(1416) 및 플랫폼 제어기 허브(1430)를 포함할 수 있다. 메모리 제어기(1416)는 메모리 장치와 시스템(1400)의 다른 컴포넌트 사이의 통신을 용이하게 하고, 플랫폼 제어기 허브(PCH)(1430)는 로컬 I/O 버스를 통해 I/O 장치에 접속을 제공한다.
메모리 장치(1420)는 DRAM(dynamic random-access memory) 장치, SRAM(static random-access memory) 장치, 플래시 메모리 장치, 상-변화 메모리 장치, 또는 프로세스 메모리로서 기능을 하기에 적절한 성능을 갖는 일부 다른 메모리 장치일 수 있다. 예를 들어, 메모리 장치(1420)는 하나 이상의 프로세서(1402)가 애플리케이션 또는 프로세스를 실행할 때 사용하는 데이터(1422) 및 명령어(1421)를 저장하는, 시스템(1400)용 시스템 메모리로서 동작할 수 있다. 메모리 제어기(1416)는 또한 그래픽 및 미디어 동작을 수행하기 위해 프로세서(1402) 내의 하나 이상의 그래픽 프로세서(1408)와 통신할 수 있는 선택적인 외부 그래픽 프로세서(1418)와 연결된다. 일부 실시예에서, 그래픽, 미디어 및/또는 컴퓨팅 동작은 그래픽, 미디어 또는 컴퓨팅 동작의 특수 세트를 수행하도록 구성될 수 있는 보조 프로세서인 가속기(1412)에 의해 지원될 수 있다. 예를 들어, 가속기(1412)는 머신 학습 또는 컴퓨팅 동작을 최적화하는데 사용되는 매트릭스(matrix) 곱셈 가속기일 수 있다. 가속기(1412)는 그래픽 프로세서(1408)와 협력하여 광선-추적(ray-tracing) 동작을 수행하는데 사용될 수 있는 광선-추적 가속기일 수 있다. 일 실시예에서, 외부 가속기(1419)가 가속기(1412)를 대체하여 또는 가속기(1412)와 함께 사용될 수 있다.
프로세서(들)(1402)에 접속될 수 있는 디스플레이 장치(1411)가 제공될 수 있다. 디스플레이 장치(1411)는 모바일 전자 장치 또는 랩탑 장치에서와 같은 내부 디스플레이 장치 또는 디스플레이 인터페이스(예를 들어, DisplayPort 등)를 통해 부착된 외부 디스플레이 장치 중 하나 이상일 수 있다. 디스플레이 장치(1411)는 가상 현실(VR) 애플리케이션 또는 증강 현실(AR) 애플리케이션에서 사용하는 입체 디스플레이 장치와 같은 헤드 마운트 디스플레이(HMD)일 수 있다.
플랫폼 제어기 허브(1430)는 주변 장치가 고속 I/O 버스를 통해 메모리 장치(1420) 및 프로세서(1402)에 접속될 수 있게 할 수 있다. I/O 주변 장치는 오디오 제어기(1446), 네트워크 제어기(1434), 펌웨어 인터페이스(1428), 무선 송수신기(1426), 터치 센서(1425), 데이터 저장 장치(1424)(예를 들어, 비휘발성 메모리, 휘발성 메모리, 하드 디스크 드라이브, 플래시 메모리, NAND, 3D NAND, 3D XPoint/Optane 등)를 포함하지만, 이에 제한되는 것은 아니다. 데이터 저장 장치(1424)는 저장 인터페이스(예를 들어, SATA)를 통해 또는 PCI 버스(예를 들어, PCI, PCI 익스프레스)와 같은 주변 장치 버스를 통해 연결될 수 있다. 터치 센서(1425)는 터치 스크린 센서, 압력 센서 또는 지문 센서를 포함할 수 있다. 무선 송수신기(1426)는 Wi-Fi 송수신기, 블루투스 송수신기, 또는 3G, 4G, 5G 또는 LTE(Long-Term Evolution) 송수신기와 같은 모바일 네트워크 송수신기일 수 있다. 펌웨어 인터페이스(1428)는 시스템 펌웨어와의 통신을 가능하게 하고, 예를 들어, UEFI(unified extensible firmware interface)일 수 있다. 네트워크 제어기(1434)는 유선 네트워크에 대한 네트워크 접속을 가능하게할 수 있다. 일부 실시예에서, 고성능 네트워크 제어기(도시하지 않음)는 인터페이스 버스(1410)에 연결된다. 오디오 제어기(1446)는 멀티-채널 고선명 오디오 제어기일 수 있다. 이런 실시예들 중 일부에서, 시스템(1400)은 레거시(예를 들어, PS/2(Personal System 2)) 장치를 시스템에 연결하기 위한 선택적인 레거시 I/O 제어기(1440)를 포함한다. 플랫폼 제어기 허브(1430)는 또한 키보드 및 마우스 조합(1443), 카메라(1444) 또는 다른 USB 입력 장치와 같은 하나 이상의 USB(Universal Serial Bus) 제어기(1442) 연결 입력 장치에 접속할 수 있다.
다르게 구성된 다른 타입의 데이터 프로세싱 시스템이 또한 사용될 수 있기 때문에, 도시된 시스템(1400)은 예시적이며 제한적이지 않다는 점이 이해될 것이다. 예를 들어, 메모리 제어기(1416) 및 플랫폼 제어기 허브(1430)의 경우는 외부 그래픽 프로세서(1418)와 같은 별개의 외부 그래픽 프로세서에 통합될 수 있다. 플랫폼 제어기 허브(1430) 및/또는 메모리 제어기(1416)는 하나 이상의 프로세서(들)(1402)의 외부에 있을 수 있다. 예를 들어, 시스템(1400)은 외부 메모리 제어기(1416) 및 플랫폼 제어기 허브(1430)를 포함할 수 있으며, 이는 프로세서(들)(1402)와 통신하는 시스템 칩셋 내의 메모리 제어기 허브 및 주변 장치 제어기 허브로서 구성될 수 있다.
예를 들어, CPU, 메모리 및 다른 컴포넌트와 같은 컴포넌트가 장착된 회로 보드("슬레드(sleds)")가 사용되며 열적 성능을 향상시키도록 설계될 수 있다. 프로세서와 같은 프로세싱 컴포넌트는 슬레드의 위쪽에 위치할 수 있고, DIMM과 같은 니어 메모리(near memory)는 슬레드의 아래쪽에 위치한다. 이 설계에서 제공하는 향상된 공기 흐름으로 인해, 컴포넌트들은 일반적인 시스템에서보다 높은 주파수 및 전력 레벨에서 동작하여 성능이 향상될 수 있다. 또한, 슬레드는 랙(rack)에서 전원 및 데이터 통신 케이블과 임의로 결합하도록 구성되어 있으므로, 신속하게 제거, 업그레이드, 재설치 및/또는 교체될 수 있는 능력을 향상시킬 수 있다. 마찬가지로, 프로세서, 가속기, 메모리 및 데이터 저장 드라이브와 같이 슬레드 상에 위치하는 개별 컴포넌트는 서로의 간격이 넓어짐에 따라 쉽게 업그레이드할 수 있도록 구성된다. 예시적인 실시예에서, 컴포넌트는 진품임을 증명하기 위한 하드웨어 증명 특징을 추가로 포함한다.
데이터 센터는 이더넷 및 옴니 경로(Omni-Path)를 포함하는 복수의 다른 네트워크 아키텍처를 지원하는 단일 네트워크 아키텍처("패브릭(fabric)")를 이용할 수 있다. 슬레드는 광섬유를 통해 스위치에 연결될 수 있으며, 이는 전형적인 트위스트 페어 케이블링(예를 들어, 카테고리 5, 카테고리 5e, 카테고리 6 등)보다 높은 대역폭과 낮은 대기 시간을 제공한다. 높은 대역폭, 낮은 대기 시간 상호 접속 및 네트워크 아키텍처로 인해, 데이터 센터는, 사용 중에, 메모리, 가속기(예를 들어, GPU, 그래픽 가속기, FPGA, ASIC, 신경망 및/또는 인공 지능 가속기 등) 및 물리적으로 분리된 데이터 저장 드라이브와 같은 리소스를 풀링하고(pool), 필요에 기반하여 이들에게 컴퓨팅 리소스(예를 들어, 프로세서)를 제공하여 컴퓨팅 리소스가 로컬인 것처럼 풀링된 리소스에 액세스할 수 있도록 한다.
파워 서플라이 또는 전원은 본 명세서에 설명된 시스템(1400) 또는 임의의 컴포넌트에 전압 및/또는 전류를 제공할 수 있다. 일 예에서, 파워 서플라이는 벽 콘센트에 플러그하기 위한 AC-DC(교류-직류) 어댑터를 포함한다. 이러한 AC 전력은 재생 가능 에너지(예를 들어, 태양광) 전원일 수 있다. 일 예에서, 전원은 외부 AC-DC 변환기와 같은 DC 전원을 포함한다. 전원 또는 파워 서플라이는 또한 충전 필드에 근접함으로써 충전하는 무선 충전 하드웨어를 포함할 수 있다. 전원은 내부 배터리, 교류 전원, 모션 기반 전원, 태양광 전원 또는 연료 전지 전원을 포함할 수 있다.
도 15a 내지 도 15c는 컴퓨팅 시스템 및 그래픽 프로세서를 도시한다. 본원의 임의의 다른 도면의 요소와 동일하거나 유사한 명칭을 갖는 도 15a 내지 도 15c의 요소는 다른 도면에서와 동일한 요소를 설명하고, 그와 유사한 방식으로 동작하거나 기능할 수 있고, 본 명세서의 다른 곳에서 설명된 것과 동일한 컴포넌트를 포함할 수 있으며 다른 엔티티에 링크될 수 있지만, 이에 제한되지는 않는다.
도 15a는, 프로세서들(1402) 중 하나의 변형일 수 있고 이들 중 하나를 대신하여 사용될 수 있는 프로세서(1500)의 블록도이다. 따라서, 본 명세서에서 프로세서(1500)와 조합된 임의의 특징의 개시는 또한 프로세서(들)(1402)와의 대응하는 조합을 개시하지만, 이에 제한되지는 않는다. 프로세서(1500)는 하나 이상의 프로세서 코어(1502A-1502N), 통합된 메모리 제어기(1514) 및 통합된 그래픽 프로세서(1508)를 가질 수 있다. 통합된 그래픽 프로세서(1508)가 제외되는 경우, 프로세서를 포함하는 시스템은 시스템 칩셋 내에 또는 시스템 버스를 통해 연결된 그래픽 프로세서 장치를 포함할 것이다. 프로세서(1500)는 점선 박스로 표시된 추가 코어(1502N)까지 포함하는 추가 코어를 포함할 수 있다. 프로세서 코어(1502A-1502N) 각각은 하나 이상의 내부 캐시 유닛(1504A-1504N)을 포함한다. 일부 실시예에서, 각각의 프로세서 코어(1502A-1502N)는 또한 하나 이상의 공유 캐시 유닛(1506)에 액세스할 수 있다. 내부 캐시 유닛(1504A-1504N) 및 공유 캐시 유닛(1506)은 프로세서(1500) 내의 캐시 메모리 계층 구조를 나타낸다. 캐시 메모리 계층 구조는 각각의 프로세서 코어 내의 명령어 및 데이터 캐시의 적어도 하나의 레벨과, 캐시의 레벨 2(L2), 레벨 3(L3), 레벨 4(L4) 또는 기타 레벨과 같은 공유된 중간-레벨 캐시의 하나 이상의 레벨을 포함할 수 있으며, 외부 메모리 이전의 최고 레벨의 캐시는 LLC로 분류된다. 일부 실시예에서, 캐시 일관성 로직은 다양한 캐시 유닛(1506 및 1504A-1504N) 사이의 일관성을 유지시킨다.
프로세서(1500)는 또한 하나 이상의 버스 제어기 유닛(1516) 및 시스템 에이전트 코어(1510)의 세트를 포함할 수 있다. 하나 이상의 버스 제어기 유닛(1516)은 하나 이상의 PCI 또는 PCI 익스프레스 버스와 같은 주변 장치 버스 세트를 관리한다. 시스템 에이전트 코어(1510)는 다양한 프로세서 컴포넌트에 대한 관리 기능을 제공한다. 시스템 에이전트 코어(1510)는 다양한 외부 메모리 장치(도시하지 않음)에 대한 액세스를 관리하는 하나 이상의 통합된 메모리 제어기(1514)를 포함할 수 있다.
예를 들어, 하나 이상의 프로세서 코어(1502A-1502N)는 동시 멀티-스레딩에 대한 지원을 포함할 수 있다. 시스템 에이전트 코어(1510)는 멀티-스레드 프로세싱 동안 코어(1502A-1502N)를 조정하고 동작시키는 컴포넌트를 포함한다. 시스템 에이전트 코어(1510)는 전력 제어 유닛(PCU)을 추가로 포함할 수 있고, 이 전력 제어 유닛(PCU)은 프로세서 코어(1502A-1502N) 및 그래픽 프로세서(1508)의 전력 상태를 조절하는 로직 및 컴포넌트를 포함한다.
프로세서(1500)는 그래픽 프로세싱 동작을 실행하는 그래픽 프로세서(1508)를 추가로 포함할 수 있다. 이런 실시예들 중 일부에서, 그래픽 프로세서(1508)는 공유 캐시 유닛(1506)의 세트 및 하나 이상의 통합 메모리 제어기(1514)를 포함하는 시스템 에이전트 코어(1510)에 연결된다. 시스템 에이전트 코어(1510)는 또한 그래픽 프로세서 출력을 하나 이상의 연결된 디스플레이로 구동하는 디스플레이 제어기(1511)를 포함할 수 있다. 디스플레이 제어기(1511)는 또한 적어도 하나의 상호 접속부를 통해 그래픽 프로세서에 연결된 별개의 모듈일 수 있거나, 그래픽 프로세서(1508) 내에 통합될 수 있다.
링-기반 상호 접속 유닛(1512)은 프로세서(1500)의 내부 컴포넌트를 연결하는데 사용될 수 있다. 그러나, 포인트-투-포인트(point-to-point) 상호 접속부, 스위칭된 상호 접속부, 또는 이 분야의 공지 기술을 포함한 다른 기술을 포함하는 대안적인 상호 접속 유닛이 사용될 수 있다. 링-기반 상호 접속부(1512)을 갖는 이런 실시예들 중 일부에서, 그래픽 프로세서(1508)는 I/O 링크(1513)를 통해 링-기반 상호 접속부(1512)에 연결된다.
예시적인 I/O 링크(1513)는 다양한 프로세서 컴포넌트와 eDRAM 모듈과 같은 고성능 내장형 메모리 모듈(1518) 사이의 통신을 용이하게 하는 온 패키지 I/O 상호 접속부를 포함하는 복수의 다양한 I/O 상호 접속부 중 적어도 하나를 나타낸다. 선택적으로, 각각의 프로세서 코어(1502A-1502N) 및 그래픽 프로세서(1508)는 공유 LLC로서 내장형 메모리 모듈(1518)을 사용할 수 있다.
예를 들어, 프로세서 코어(1502A-1502N)는 동일한 명령어 세트 아키텍처를 실행하는 균질 코어일 수 있다. 대안적으로, 프로세서 코어(1502A-1502N)는 명령어 세트 아키텍처(ISA)의 관점에서 비균질하며, 이 경우 프로세서 코어(1502A-1502N) 중 하나 이상은 제 1 명령어 세트를 실행하고, 다른 코어의 적어도 하나는 제 1 명령어 세트의 서브세트 또는 다른 명령어 세트를 실행한다. 프로세서 코어(1502A-1502N)는 마이크로 아키텍처의 관점에서 비균질할 수 있고, 이 경우 비교적 많은 전력을 소비하는 하나 이상의 코어는 적은 전력을 소비하는 하나 이상의 전력 코어와 연결된다. 다른 예로서, 프로세서 코어(1502A-1502N)는 컴퓨팅 능력의 관점에서 비균질하다. 부가적으로, 프로세서(1500)는 다른 컴포넌트에 더하여 도시된 컴포넌트를 갖는, 하나 이상의 칩 상에 구현되거나 또는 SoC 집적 회로로서 구현될 수 있다.
도 15b는 본 명세서에서 설명된 일부 실시예에 따른 그래픽 프로세서 코어(1519)의 하드웨어 로직의 블록도이다. 코어 슬라이스로 종종 지칭되는 그래픽 프로세서 코어(1519)는 모듈식 그래픽 프로세서 내의 하나 또는 복수의 그래픽 코어일 수 있다. 그래픽 프로세서 코어(1519)는 하나의 그래픽 코어 슬라이스의 예시이며, 본 명세서에 설명된 그래픽 프로세서는 목표 전력 및 성능 포락선에 따라 복수의 그래픽 코어 슬라이스를 포함할 수 있다. 각각의 그래픽 프로세서 코어(1519)는 범용 및 고정 기능 로직의 모듈식 블록을 포함하는, 서브-슬라이스라고도 지칭되는 복수의 서브-코어(1521A-1521F)와 연결된 고정 기능 블록(1530)을 포함할 수 있다.
고정 기능 블록(1530)은 그래픽 프로세서 코어(1519)의 모든 서브-코어에 의해, 예를 들어 낮은 성능 및/또는 저전력 그래픽 프로세서 구현예에서 공유될 수 있는 기하(geometry)/고정 기능 파이프라인(1531)을 포함할 수 있다. 기하/고정 기능 파이프라인(1531)은 3D 고정 기능 파이프라인(예를 들어, 후술되는 도 16a에서와 같은 3D 파이프라인(1612)), 비디오 프론트-엔드 유닛, 스레드 생성기 및 스레드 디스패처, 및 통합 반환 버퍼(예를 들어, 후술되는 도 17의 통합 반환 버퍼(1718))를 관리하는 통합 반환 버퍼 관리자를 포함할 수 있다.
고정 기능 블록(1530)은 또한 그래픽 SoC 인터페이스(1532), 그래픽 마이크로컨트롤러(1533) 및 미디어 파이프라인(1534)을 포함할 수 있다. 그래픽 SoC 인터페이스(1532)는 그래픽 프로세서 코어(1519)와 시스템 온 칩 집적 회로 내의 다른 프로세서 코어 사이의 인터페이스를 제공한다. 그래픽 마이크로컨트롤러(1533)는 스레드 디스패치, 스케줄링 및 선점(pre-emption)을 포함하는 그래픽 프로세서 코어(1519)의 다양한 기능을 관리하도록 구성될 수 있는 프로그래밍 가능한 서브-프로세서이다. 미디어 파이프라인(1534)(예를 들어, 도 16a 및 도 17의 미디어 파이프라인(1616))은 이미지 및 비디오 데이터를 포함하는 멀티미디어 데이터의 디코딩, 인코딩, 사전 프로세싱 및/또는 사후 프로세싱을 용이하게 하는 로직을 포함한다. 미디어 파이프라인(1534)은 서브-코어(1521A-1521F) 내의 컴퓨팅 또는 샘플링 로직에 대한 요청을 통해 미디어 동작을 구현한다.
SoC 인터페이스(1532)는 그래픽 프로세서 코어(1519)로 하여금 범용 애플리케이션 프로세서 코어(예를 들어, CPU), 및/또는 공유 LLC 메모리, 시스템 RAM 및/또는 내장형 온 칩 또는 온 패키지 DRAM과 같은 메모리 계층 구조 요소를 포함하는 SoC 내의 다른 컴포넌트와 통신할 수 있게 할 수 있다. SoC 인터페이스(1532)는 또한 카메라 이미징 파이프라인과 같은 SoC 내의 고정 기능 장치와의 통신을 가능하게 할 수 있고, 그래픽 프로세서 코어(1519)와 SoC 내의 CPU 사이에서 공유될 수 있는 전역 메모리 원자(global memory atomics)를 사용 및/또는 구현할 수 있게 한다. SoC 인터페이스(1532)는 또한 그래픽 프로세서 코어(1519)에 대한 전력 관리 제어를 구현할 수 있고, 그래픽 프로세서 코어(1519)의 클럭 도메인과 SoC 내의 다른 클럭 도메인 사이의 인터페이스를 가능하게 할 수 있다. 선택적으로, SoC 인터페이스(1532)는 그래픽 프로세서 내의 하나 이상의 그래픽 코어 각각에 커맨드 및 명령어를 제공하도록 구성된 커맨드 스트리머 및 전역 스레드 디스패처로부터 커맨드 버퍼의 수신을 가능하게 한다. 커맨드 및 명령어는 미디어 동작이 수행되어야 할 때 미디어 파이프라인(1534)에 디스패치되거나, 또는 그래픽 프로세싱 동작이 수행되어야 할 때 기하 및 고정 기능 파이프라인(예를 들어, 기하 및 고정 기능 파이프라인(1531), 기하 및 고정 기능 파이프라인(1537))으로 디스패치될 수 있다.
그래픽 마이크로컨트롤러(1533)는 그래픽 프로세서 코어(1519)에 대한 다양한 스케줄링 및 관리 태스크를 수행하도록 구성될 수 있다. 일 구성에서, 예를 들어, 그래픽 마이크로컨트롤러(1533)는 서브-코어(1521A-1521F) 내의 실행 유닛(EU) 어레이(1522A-1522F, 1524A-1524F) 내의 다양한 그래픽 병렬 엔진 상에서 그래픽 수행하고 및/또는 워크로드 스케줄링을 계산할 수 있다. 이 워크로드 스케줄링에서, 그래픽 프로세서 코어(1519)를 포함하는 SoC의 CPU 코어 상에서 실행되는 호스트 소프트웨어는 복수의 그래픽 프로세서 초인종(doorbell) 중 하나에 워크로드를 제출할 수 있으며, 이는 적절한 그래픽 엔진 상에서 스케줄링 동작을 호출한다. 스케줄링 동작은 다음에 실행할 워크로드를 결정하는 것, 커맨드 스트리머에 워크로드를 제출하는 것, 엔진에서 실행중인 기존 워크로드를 선점하는 것, 워크로드의 진행 상황을 모니터링하는 것, 및 워크로드 완료시 호스트 소프트웨어에 통지하는 것을 포함한다. 선택적으로, 그래픽 마이크로컨트롤러(1533)는 또한 그래픽 프로세서 코어(1519)의 저전력 또는 유휴 상태를 용이하게 하여, 저전력 상태 전이에 걸쳐 운영 시스템 및/또는 운영 시스템의 그래픽 드라이버 소프트웨어와는 독립적으로 그래픽 프로세서 코어(1519)가 그래픽 프로세서 코어(1519) 내의 레지스터를 저장 및 복원하는 능력을 갖도록 한다.
그래픽 프로세서 코어(1519)는 도시된 서브-코어(1521A-1521F)보다 최대 N개까지 더 많거나 적은 모듈식 서브-코어를 가질 수 있다. N개의 서브-코어의 각각의 세트에 있어서, 그래픽 프로세서 코어(1519)는 또한 공유 기능 로직(1535), 공유 및/또는 캐시 메모리(1536), 기하/고정 기능 파이프라인(1537), 및 다양한 그래픽을 가속시키고 프로세싱 동작을 컴퓨팅하는 추가의 고정 기능 로직(1538)을 포함할 수 있다. 공유 기능 로직(1535)은 그래픽 프로세서 코어(1519) 내의 N개의 서브-코어 각각에 의해 공유될 수 있는 도 17의 공유 기능 로직(1720)과 관련된 로직 유닛(예를 들어, 샘플러, 산술 및/또는 스레드 간 통신 로직)을 포함할 수 있다. 공유 및/또는 캐시 메모리(1536)는 그래픽 프로세서 코어(1519) 내의 N개의 서브-코어(1521A-1521F)의 세트에 대한 LLC일 수 있으며, 복수의 서브-코어에 의해 액세스 가능한 공유 메모리로서 동작할 수도 있다. 기하/고정 기능 파이프라인(1537)은 고정 기능 블록(1530) 내의 기하/고정 기능 파이프라인(1531) 대신에 포함될 수 있고 동일하거나 또는 유사한 로직 유닛을 포함할 수 있다.
그래픽 프로세서 코어(1519)는 그래픽 프로세서 코어(1519)에 의해 사용되는 다양한 고정 기능 가속 로직을 포함할 수 있는 추가의 고정 기능 로직(1538)을 포함할 수 있다. 선택적으로, 추가의 고정 기능 로직(1538)은 위치 전용 셰이딩에서만 사용되는 추가의 기하 파이프라인을 포함한다. 위치 전용 셰이딩에는 2개의 기하 파이프라인, 즉, 기하/고정 기능 파이프라인(1538, 1531) 내의 풀(full) 기하 파이프라인 및 추가의 고정 기능 로직(1538) 내에 포함될 수 있는 추가의 기하 파이프라인인 컬(cull) 파이프라인이 존재한다. 예를 들어, 컬 파이프라인은 풀 기하 파이프라인의 축소 버전일 수 있다. 풀 파이프라인과 컬 파이프라인은 동일한 애플리케이션의 다른 인스턴스를 실행할 수 있으며 각 인스턴스는 별개의 컨텍스트를 갖는다. 위치 전용 셰이딩은 폐기된 삼각형의 긴 컬 구간(long cull runs)을 숨길 수 있어서, 일부 인스턴스에서 더 빨리 셰이딩이 완료되도록할 수 있다. 예를 들어, 컬 파이프라인은 정점의 위치 속성만을 페칭(fetch) 및 셰이딩(shade)하고, 프레임 버퍼에 대한 픽셀의 렌더링 및 래스터화를 수행하지 않으므로, 추가의 고정 기능 로직(1538) 내의 컬 파이프라인 로직은 메인 애플리케이션과 병렬로 위치 셰이더를 실행할 수 있고, 일반적으로 풀 파이프라인보다 중요한 결과를 더 빠르게 생성한다. 컬 파이프라인은 생성된 중요한 결과를 사용하여 해당 삼각형이 컬링되는지 여부에 관계없이 모든 삼각형에 대한 가시성 정보를 계산할 수 있다. 풀 파이프라인(이 경우 재생 파이프라인이라고도 불릴 수 있음)은 가시성 정보를 사용하여 컬링된 삼각형을 생략하고 최종적으로 래스터화 단계로 전달된 가시적 삼각형만을 셰이딩할 수 있다.
선택적으로, 추가의 고정 기능 로직(1538)은 머신 학습 훈련 또는 추론을 위한 최적화를 포함하는 구현을 위해 고정 기능 매트릭스 곱셈 로직과 같은 머신-학습 가속 로직을 포함할 수 있다.
각각의 그래픽 서브-코어(1521A-1521F) 내에는, 그래픽 파이프라인, 미디어 파이프라인, 또는 셰이더 프로그램에 의한 요청에 응답하여 그래픽, 미디어 및 컴퓨팅 동작을 수행하는데 사용될 수 있는 실행 리소스 세트가 포함된다. 그래픽 서브-코어(1521A-1521F)는 복수의 EU 어레이(1522A-1522F, 1524A-1524F), 스레드 디스패치 및 스레드 간 통신(TD/IC) 로직(1523A-1523F), 3D(예를 들어, 텍스처) 샘플러(1525A-1525F), 미디어 샘플러(1526A-1526F), 셰이더 프로세서(1527A-1527F) 및 공유 로컬 메모리(SLM)(1528A-1528F)를 포함한다. EU 어레이(1522A-1522F, 1524A-1524F) 각각은 복수의 실행 유닛을 포함하는데, 이들은 그래픽, 미디어 또는 컴퓨팅 셰이더 프로그램을 포함하는 그래픽, 미디어 또는 컴퓨팅 동작의 제공 중에 부동 소수점 및 정수/고정 소수점 로직 연산을 수행할 수 있는 범용 그래픽 프로세싱 유닛이다. TD/IC 로직(1523A-1523F)은 서브-코어 내의 실행 유닛에 대한 로컬 스레드 디스패치 및 스레드 제어 동작을 수행하고, 서브-코어의 실행 유닛 상에서 실행되는 스레드 사이의 통신을 용이하게 한다. 3D 샘플러(1525A-1525F)는 텍스처 또는 다른 3D 그래픽 관련 데이터를 메모리로 판독할 수 있다. 3D 샘플러는 구성된 샘플 상태 및 주어진 텍스처와 관련된 텍스처 포맷에 따라 텍스처 데이터를 다르게 판독할 수 있다. 미디어 샘플러(1526A-1526F)는 미디어 데이터와 관련된 타입 및 포맷에 따라 유사한 판독 동작을 수행할 수 있다. 예를 들어, 각각의 그래픽 서브-코어(1521A-1521F)는 통합된 3D 및 미디어 샘플러를 교대로 포함할 수 있다. 각각의 서브-코어(1521A-1521F) 내의 실행 유닛 상에서 실행되는 스레드는 각각의 서브-코어 내의 공유 로컬 메모리(1528A-1528F)를 사용하여, 스레드 그룹 내에서 실행되는 스레드가 온 칩 메모리의 공통의 풀(pool)을 사용하여 실행될 수 있도록 한다.
도 15c는 본 명세서에 설명된 실시예에 따른, 그래픽 프로세서(예컨대, 그래픽 프로세서(1508) 및/또는 컴퓨팅 가속기로서 구성될 수 있는 범용 그래픽 프로세싱 유닛(GPGPU)(270)의 블록도이다. GPGPU(1570)는 하나 이상의 시스템 및/또는 메모리 버스를 통해 호스트 프로세서(예를 들어, 하나 이상의 CPU(1546)) 및 메모리(1571, 1572)와 상호 접속될 수 있다. 메모리(1571)는 하나 이상의 CPU(들)(1546)와 공유될 수 있는 시스템 메모리일 수 있는 반면, 메모리(1572)는 GPGPU(1570)에 전용인 장치 메모리이다. 예를 들어, GPGPU(1570) 및 장치 메모리(1572) 내의 컴포넌트는 하나 이상의 CPU(들)(1546)에 액세스할 수 있는 메모리 주소에 매핑될 수 있다. 메모리(1571, 1572)로의 액세스는 메모리 제어기(1568)를 통해 용이해질 수 있다. 메모리 제어기(1568)는 내부 DMA(direct memory access) 제어기(1569)를 포함할 수 있거나, 또는 DMA 제어기에 의해 수행될 동작을 수행하기 위한 로직을 포함할 수 있다.
GPGPU(1570)는 L2 캐시(1553), L1 캐시(1554), 명령어 캐시(1555)를 포함하는 복수의 캐시 메모리와, 공유 메모리(1556)를 포함하며, 공유 메모리의 적어도 일부는 또한 캐시 메모리로서 분할될 수 있다. GPGPU(1570)는 또한 복수의 컴퓨팅 유닛(1560A-1560N)을 포함한다. 각각의 컴퓨팅 유닛(1560A-1560N)은 벡터 레지스터(1561), 스칼라 레지스터(1562), 벡터 로직 유닛(1563) 및 스칼라 로직 유닛(1564)의 세트를 포함한다. 컴퓨팅 유닛(1560A-1560N)은 또한 로컬 공유 메모리(1565) 및 프로그램 카운터(1566)를 포함할 수 있다. 컴퓨팅 유닛(1560A-1560N)은 상수 캐시(1567)와 연결될 수 있으며, 상수 캐시는 상수 데이터를 저장하는데 사용될 수 있으며, 상수 데이터는 GPGPU(1570) 상에서 실행되는 커널 또는 셰이더 프로그램의 실행 동안 변경되지 않는 데이터이다. 상수 캐시(1567)는 스칼라 데이터 캐시일 수 있고, 캐싱된 데이터는 스칼라 레지스터(1562)로 직접 페치(fetch)될 수 있다.
동작하는 동안, 하나 이상의 CPU(들)(1546)는 액세스 가능한 주소 공간으로 매핑된 GPGPU(1570)의 레지스터 또는 메모리에 커맨드를 기록할 수 있다. 커맨드 프로세서(1557)는 레지스터 또는 메모리로부터 커맨드를 판독하고 그 커맨드가 GPGPU(1570) 내에서 어떻게 처리될지를 결정할 수 있다. 이후 스레드 디스패처(1558)는 스레드를 컴퓨팅 유닛(1560A-1560N)에 디스패치하여 이들 커맨드를 수행하는데 이용될 수 있다. 각각의 컴퓨팅 유닛(1560A-1560N)은 다른 컴퓨팅 유닛으로부터 독립적으로 스레드를 실행할 수 있다. 또한, 각각의 컴퓨팅 유닛(1560A-1560N)은 조건부 계산이 가능하도록 독립적으로 구성될 수 있고 계산 결과를 조건부로 메모리에 출력할 수 있다. 커맨드 프로세서(1557)는 제출된 커맨드가 완료될 때 하나 이상의 CPU(1546)를 인터럽트할 수 있다.
도 16a 내지 도 16c는 예컨대 도 15a 내지 도 15c에 따른 본 명세서에 설명된 실시예에 의해 제공되는 추가 그래픽 프로세서 및 컴퓨팅 가속기 아키텍처의 블록도를 도시한다. 본원의 임의의 다른 도면의 요소와 동일하거나 유사한 명칭을 갖는 도 16a 내지 도 16c의 요소는 다른 도면에서와 동일한 요소를 설명하고, 그와 유사한 방식으로 동작하거나 기능할 수 있고, 본 명세서의 다른 곳에서 설명된 것과 동일한 컴포넌트를 포함할 수 있으며 다른 엔티티에 링크될 수 있지만, 이에 제한되지는 않는다.
도 16a는, 개별 그래픽 프로세싱 유닛일 수 있거나, 또는 복수의 프로세싱 코어 또는 메모리 장치나 네트워크 인터페이스와 같지만 이에 제한되지 않는 다른 반도체 장치와 통합된 그래픽 프로세서일 수 있는 그래픽 프로세서(1600)의 블록도이다. 그래픽 프로세서(1600)는 그래픽 프로세서(1508)의 변형일 수 있고 그래픽 프로세서(1508)를 대신하여 사용될 수 있다. 따라서, 본 명세서에서 그래픽 프로세서(1508)와 조합된 임의의 특징의 개시는 또한 그래픽 프로세서(1600)와의 대응하는 조합을 개시하지만, 이에 제한되지는 않는다. 그래픽 프로세서는 메모리 매핑된 I/O 인터페이스를 통해 그래픽 프로세서 상의 레지스터와 프로세서 메모리에 위치된 커맨드로 통신할 수 있다. 그래픽 프로세서(1600)는 메모리에 액세스하는 메모리 인터페이스(1614)를 포함할 수 있다. 메모리 인터페이스(1614)는 로컬 메모리, 하나 이상의 내부 캐시, 하나 이상의 공유 외부 캐시 및/또는 시스템 메모리에 대한 인터페이스일 수 있다.
선택적으로, 그래픽 프로세서(1600)는 또한 디스플레이 출력 데이터를 디스플레이 장치(1618)로 구동하는 디스플레이 제어기(1602)를 포함한다. 디스플레이 제어기(1602)는 디스플레이를 위한 하나 이상의 오버레이 평면 및 비디오의 복수 레이어 또는 사용자 인터페이스 요소의 구성을 위한 하드웨어를 포함한다. 디스플레이 장치(1618)는 내부 또는 외부 디스플레이 장치일 수 있다. 일 실시예에서, 디스플레이 장치(1618)는 가상 현실(VR) 디스플레이 장치 또는 증강 현실(AR) 디스플레이 장치와 같은 헤드 마운트 디스플레이 장치이다. 그래픽 프로세서(1600)는 MPEG-2와 같은 MPEG(Moving Picture Experts Group) 포맷, H.264/MPEG-4 AVC, H.265/HEVC, AOMedia(Alliance for Open Media) VP8, VP9 및 SMPTE(Society of Motion Picture & Television Engineers) 421M/VC-1와 같은 AVC(Advanced Video Coding) 포맷 및 JPEG(Joint Photographic Experts Group) 및 MJPEG(Motion JPEG) 포맷과 같은 JPEG 포맷을 포함하지만 이에 제한되지 않는, 하나 이상의 미디어 인코딩 포맷으로, 그 포맷으로부터 또는 그 포맷 사이에서 미디어를 인코딩, 디코딩 또는 트랜스코딩하는 비디오 코덱 엔진(1606)을 포함할 수 있다.
그래픽 프로세서(1600)는, 예를 들어 비트-경계 블록 전송을 포함하는 2차원(2D) 래스터화 동작을 수행하는 블록 이미지 전송(BLIT) 엔진(1603)을 포함할 수 있다. 그러나, 대안적으로, 2D 그래픽 동작은 그래픽 프로세싱 엔진(GPE)(1610)의 하나 이상의 컴포넌트를 사용하여 수행될 수 있다. 일부 실시예에서, GPE(1610)는 3차원(3D) 그래픽 동작 및 미디어 동작을 포함하는 그래픽 동작을 수행하는 컴퓨팅 엔진이다.
GPE(1610)는 3D 프리미티브 형상(예를 들어, 직사각형, 삼각형 등)에 작용하는 프로세싱 기능을 사용하여 3차원 이미지 및 장면을 렌더링하는 것과 같은 3D 동작을 수행하는 3D 파이프라인(1612)을 포함할 수 있다. 3D 파이프라인(1612)은 요소 내에서 다양한 태스크를 수행하고/하거나 3D/미디어 서브시스템(1615)에 실행 스레드를 생성하는, 프로그래밍 가능하고 고정된 기능 요소를 포함한다. 3D 파이프라인(1612)은 미디어 동작을 수행하기 위해 사용될 수 있지만, GPE(1610)의 실시예는 또한, 비디오 사후-프로세싱 및 이미지 향상과 같은 미디어 동작을 수행하는데 특히 사용되는 미디어 파이프라인(1616)을 포함한다.
미디어 파이프라인(1616)은 비디오 코덱 엔진(1606) 대신 또는 비디오 코덱 엔진(1606)을 위해 비디오 디코딩 가속, 비디오 디인터레이싱 및 비디오 인코딩 가속과 같은 하나 이상의 특수 미디어 동작을 수행하는 고정된 기능 또는 프로그래밍 가능한 로직 유닛을 포함할 수 있다. 미디어 파이프라인(1616)은 3D/미디어 서브시스템(1615) 상에서 실행되는 스레드를 생성하는 스레드 생성 유닛을 추가로 포함할 수 있다. 생성된 스레드는 3D/미디어 서브시스템(1615)에 포함된 하나 이상의 그래픽 실행 유닛 상에서 미디어 동작에 대한 계산을 수행한다.
3D/미디어 서브시스템(1615)은 3D 파이프라인(1612) 및 미디어 파이프라인(1616)에 의해 생성된 스레드를 실행하는 로직을 포함할 수 있다. 파이프라인은 스레드 실행 요청을 3D/미디어 서브시스템(1615)에 전송할 수 있는데, 3D/미디어 서브시스템은 사용 가능한 스레드 실행 리소스에 대한 다양한 요청을 중재 및 발송하는 스레드 디스패치 로직을 포함한다. 실행 리소스는 3D 및 미디어 스레드를 프로세싱하는 그래픽 실행 유닛의 어레이를 포함한다. 3D/미디어 서브시스템(1615)은 스레드 명령어 및 데이터를 위한 하나 이상의 내부 캐시를 포함할 수 있다. 부가적으로, 3D/미디어 서브시스템(1615)은 또한 스레드 사이에서 데이터를 공유하고 출력 데이터를 저장하는 레지스터 및 어드레서블(addressable) 메모리를 포함하는 공유 메모리를 포함할 수 있다.
도 16b는 그래픽 프로세서(1620)를 도시하는데, 이는 그래픽 프로세서들(1600)의 변형이고 그래픽 프로세서(1600)를 대신하여 사용될 수 있으며 그 반대의 경우도 가능하다. 따라서, 본원에서 그래픽 프로세서(1600)와 조합된 임의의 특징의 개시는 또한 그래픽 프로세서(1620)와의 대응하는 조합을 개시하지만, 이에 제한되지는 않는다. 그래픽 프로세서(1620)는 본 명세서에서 설명된 실시예에 따라 타일형 아키텍처를 갖는다. 그래픽 프로세서(1620)는 그래픽 엔진 타일(1610A-1610D) 내에 도 16a의 그래픽 프로세싱 엔진(1610)의 복수의 인스턴스를 갖는 그래픽 프로세싱 엔진 클러스터(1622)를 포함할 수 있다. 각각의 그래픽 엔진 타일(1610A-1610D)은 타일 상호 접속부(1623A-1623F) 세트를 통해 상호 접속될 수 있다. 각각의 그래픽 엔진 타일(1610A-1610D)은 또한 메모리 상호 접속부(1625A-1625D)를 통해 메모리 모듈 또는 메모리 장치(1626A-1626D)에 연결될 수 있다. 메모리 장치(1626A-1626D)는 임의의 그래픽 메모리 기술을 사용할 수 있다. 예를 들어, 메모리 장치(1626A-1626D)는 GDDR 메모리일 수 있다. 메모리 장치(1626A-1626D)는 각각의 그래픽 엔진 타일(1610A-1610D)과 함께 온 다이(on-die) 형식일 수 있는 고대역폭 메모리(HBM) 모듈일 수 있다. 메모리 장치(1626A-1626D)는 각각의 그래픽 엔진 타일(1610A-1610D) 위에 적층될 수 있는 스택형 메모리 장치일 수 있다. 각각의 그래픽 엔진 타일(1610A-1610D) 및 관련 메모리(1626A-1626D)는 도 24b 내지 도 24d에서 더 상세히 설명되는 것과 같이, 베이스 다이 또는 베이스 기판에 본딩된 개별 칩렛(chiplet) 상에 위치할 수 있다.
그래픽 프로세서(1620)는 메모리 장치(1626A-1626D)가 관련 그래픽 엔진 타일(1610A-1610D)과 연결되는 NUMA(Non-uniform Memory Access) 시스템으로 구성될 수 있다. 주어진 메모리 장치는 자신이 직접 접속된 타일이 아닌 그래픽 엔진 타일에 의해 액세스될 수 있다. 그러나, 메모리 장치(1626A-1626D)에 대한 액세스 대기 시간은 로컬 타일에 액세스할 때 가장 낮을 수 있다. 일 실시예에서는, 둘 이상의 캐시가 동일한 메모리 위치를 저장할 때 일관된 메모리 이미지를 유지하도록 그래픽 엔진 타일(1610A-1610D) 내의 캐시 제어기들 사이의 통신을 가능하게 하기 위해 타일 상호 접속부(1623A-1623F)를 사용하는 ccNUMA(cache coherent NUMA) 시스템이 활성화된다.
그래픽 프로세싱 엔진 클러스터(1622)는 온-칩 또는 온-패키지 패브릭 상호 접속부(1624)와 접속할 수 있다. 일 실시예에서, 패브릭 상호 접속부(1624)는, 패브릭 상호 접속부(1624)로 하여금 그래픽 프로세서(1620)의 컴포넌트들 사이에서 데이터 패킷을 스위칭하는 패킷 스위칭 패브릭 상호 접속부로서 동작할 수 있게 하는, 네트워크 프로세서, 네트워크 온 칩 (NoC) 또는 다른 스위칭 프로세서를 포함한다. 패브릭 상호 접속부(1624)는 그래픽 엔진 타일(1610A-1610D)과 비디오 코덱 엔진(1606) 및 하나 이상의 카피 엔진(1604)과 같은 컴포넌트 사이의 통신을 가능하게할 수 있다. 카피 엔진(1604)은 메모리 장치(1626A-1626D)와 그래픽 프로세서(1620)의 외부에 있는 메모리(예를 들어, 시스템 메모리)로부터, 이들로, 또는 이들 사이에서 데이터를 이동시키기 위해 사용될 수 있다. 패브릭 상호 접속부(1624)는 또한 그래픽 엔진 타일(1610A-1610D)을 상호 접속하는데 사용될 수 있다. 그래픽 프로세서(1620)는 외부 디스플레이 장치(1618)와의 접속을 가능하게 하는 디스플레이 제어기(1602)를 선택적으로 포함할 수 있다. 그래픽 프로세서는 또한 그래픽 또는 컴퓨팅 가속기로서 구성될 수 있다. 가속기 구성에서, 디스플레이 제어기(1602) 및 디스플레이 장치(1618)는 생략될 수 있다.
그래픽 프로세서(1620)는 호스트 인터페이스(1628)를 통해 호스트 시스템에 접속될 수 있다. 호스트 인터페이스(1628)는 그래픽 프로세서(1620), 시스템 메모리 및/또는 다른 시스템 컴포넌트 사이의 통신을 가능하게할 수 있다. 호스트 인터페이스(1628)는, 예를 들어 PCI 익스프레스 버스 또는 호스트 시스템 인터페이스의 다른 타입일 수 있다. 예를 들어, 호스트 인터페이스(1628)는 NVLink 또는 NVSwitch 인터페이스일 수 있다. 호스트 인터페이스(1628) 및 패브릭 상호 접속부(1624)는 그래픽 프로세서(1620)의 다수의 인스턴스가 단일 로직 장치로서 동작하는 것을 가능하게 하기 위해 협력할 수 있다. 호스트 인터페이스(1628)와 패브릭 상호 접속부(1624) 사이의 협력은 또한 개별 그래픽 엔진 타일(1610A-1610D)이 별개의 로직 그래픽 장치로서 호스트 시스템에 제공되게 할 수 있다.
도 16c는 본 명세서에서 설명된 실시예에 따른 컴퓨팅 가속기(1630)를 도시한다. 컴퓨팅 가속기(1630)는 도 16b의 그래픽 프로세서(1620)와 구조적 유사성을 가질 수 있고 컴퓨팅 가속에 최적화되어 있다. 컴퓨팅 엔진 클러스터(1632)는 병렬 또는 벡터 기반 범용 컴퓨팅 동작에 최적화된 실행 로직을 포함하는 컴퓨팅 엔진 타일(1640A-1640D) 세트를 포함할 수 있다. 일부 실시예에서 하나 이상의 컴퓨팅 엔진 타일(1640A-1640D)은 미디어 가속을 수행하는 로직을 포함할 수 있지만, 컴퓨팅 엔진 타일(1640A-1640D)은 고정 기능 그래픽 프로세싱 로직을 포함하지 않을 수도 있다. 컴퓨팅 엔진 타일(1640A-1640D)은 메모리 상호 접속부(1625A-1625D)를 통해 메모리(1626A-1626D)에 접속할 수 있다. 메모리(1626A-1626D) 및 메모리 상호 접속부(1625A-1625D)는 그래픽 프로세서(1620)에서와 같이 유사한 기술일 수 있거나 또는 상이할 수 있다. 그래픽 컴퓨팅 엔진 타일(1640A-1640D)은 또한 타일 상호 접속부(1623A-1623F) 세트를 통해 상호 접속될 수 있고 패브릭 상호 접속부(1624)에 접속될 수 있고 및/또는 패브릭 상호 접속부(1624)에 의해 상호 접속될 수 있다. 일 실시예에서, 컴퓨팅 가속기(1630)는 장치 전체의 캐시로 구성될 수 있는 큰 L3 캐시(336)를 포함한다. 컴퓨팅 가속기(1630)는 또한 도 16b의 그래픽 프로세서(1620)와 유사한 방식으로 호스트 인터페이스(1628)를 통해 호스트 프로세서 및 메모리에 접속될 수 있다.
컴퓨팅 가속기(1630)는 또한 통합된 네트워크 인터페이스(1642)를 포함할 수 있다. 일 실시예에서, 네트워크 인터페이스(1642)는, 컴퓨팅 엔진 클러스터(1632)로 하여금 호스트 시스템의 메모리를 탐색하는 데이터를 요구하지 않으면서 물리 계층 상호 접속부(1644)를 통해 통신할 수 있게 하는 네트워크 프로세서 및 제어기 로직을 포함한다. 일 실시예에서, 컴퓨팅 엔진 타일(1640A-1640D) 중 하나는 네트워크 프로세서 로직에 의해 대체되고, 물리 계층 상호 접속부(1644)를 통해 전송 또는 수신될 데이터는 메모리(1626A-1626D)로 또는 그로부터 직접 전송될 수 있다. 컴퓨팅 가속기(1630)의 다수의 인스턴스는 물리 계층 상호 접속부(1644)을 통해 단일 로직 장치로 결합될 수 있다. 대안적으로, 다양한 컴퓨팅 엔진 타일(1640A-1640D)은 별개의 네트워크 액세스 가능 컴퓨팅 가속기 장치로서 제공될 수 있다.
그래픽 프로세싱 엔진
도 17은 일부 실시예에 따른 그래픽 프로세서의 그래픽 프로세싱 엔진(1710)의 블록도이다. 그래픽 프로세싱 엔진(GPE)(1710)은 도 16a에 도시된 GPE(1610)의 한 버전일 수 있고, 또한 도 16b의 그래픽 엔진 타일(1610A-1610D)을 나타낼 수도 있다. 본원의 임의의 다른 도면의 요소와 동일하거나 유사한 명칭을 갖는 도 17의 요소는 다른 도면에서와 동일한 요소를 설명하고, 그와 유사한 방식으로 동작하거나 기능할 수 있고, 본 명세서의 다른 곳에서 설명된 것과 동일한 컴포넌트를 포함할 수 있으며 다른 엔티티에 링크될 수 있지만, 이에 제한되지는 않는다. 예를 들어, 도 16a의 3D 파이프라인(1612) 및 미디어 파이프라인(1616)은 도 17에도 또한 도시되어 있다. 미디어 파이프라인(1616)은 GPE(1710)의 일부 실시예에서 선택적이고, GPE(1710) 내에 명시적으로 포함되지 않을 수 있다. 예를 들어, 적어도 하나의 실시예에서, 별도의 미디어 및/또는 이미지 프로세서가 GPE(1710)에 연결된다.
GPE(1710)는 3D 파이프라인(1612) 및/또는 미디어 파이프라인(1616)에 커맨드 스트림을 제공하는 커맨드 스트리머(1703)에 연결되거나 이를 포함할 수 있다. 대안적으로 또는 부가적으로, 커맨드 스트리머(1703)는 통합 반환 버퍼(1718)에 직접 연결될 수 있다. 통합 반환 버퍼(1718)는 그래픽 코어 어레이(1714)에 통신 가능하게 연결될 수 있다. 선택적으로, 커맨드 스트리머(1703)는 메모리에 연결되는데, 이 메모리는 시스템 메모리 또는 하나 이상의 내부 캐시 메모리 및 공유 캐시 메모리일 수 있다. 커맨드 스트리머(1703)는 메모리로부터 커맨드를 수신할 수 있고 그 커맨드를 3D 파이프라인(1612) 및/또는 미디어 파이프라인(1616)으로 전송한다. 커맨드는 링 버퍼로부터 페치된 지시(directive)이며, 링 버퍼는 3D 파이프라인(1612) 및 미디어 파이프라인(1616)에 대한 커맨드를 저장한다. 링 버퍼는 복수의 커맨드의 배치(batch)를 저장하는 배치 커맨드 버퍼를 추가로 포함할 수 있다. 3D 파이프라인(1612)에 대한 커맨드는 또한 3D 파이프라인(1612)에 대한 정점 및 기하 데이터 및/또는 미디어 파이프라인(1616)에 대한 이미지 데이터 및 메모리 객체와 같지만 이에 제한되지 않는, 메모리에 저장된 데이터에 대한 참조를 포함할 수 있다. 3D 파이프라인(1612)과 미디어 파이프라인(1616)은 각각의 파이프라인 내에서 로직을 통해 동작을 수행하거나 또는 하나 이상의 실행 스레드를 그래픽 코어 어레이(1714)에 디스패치함으로써 커맨드 및 데이터를 프로세싱한다. 그래픽 코어 어레이(1714)는 그래픽 코어(예를 들어, 그래픽 코어(들)(1715A), 그래픽 코어(들)(1715B))의 하나 이상의 블록을 포함할 수 있는데, 각각의 블록은 하나 이상의 그래픽 코어를 포함한다. 각각의 그래픽 코어는 그래픽 및 컴퓨팅 동작을 수행하는 범용 및 그래픽용 실행 로직 뿐 아니라, 고정 기능 텍스처 프로세싱 및/또는 머신 학습 및 인공 지능 가속 로직을 포함하는 그래픽 실행 리소스 세트를 포함한다.
다양한 실시예에서, 3D 파이프라인(1612)은 명령어를 프로세싱하고 그래픽 코어 어레이(1714)에 실행 스레드를 디스패칭함으로써 정점 셰이더, 기하 셰이더, 픽셀 셰이더, 프래그먼트 셰이더, 컴퓨팅 셰이더 또는 다른 셰이더 프로그램과 같은 하나 이상의 셰이더 프로그램을 프로세싱하는 고정 기능 및 프로그래밍 가능한 로직을 포함할 수 있다. 그래픽 코어 어레이(1714)는 이들 셰이더 프로그램을 프로세싱하는데 사용되는 실행 리소스의 통합 블록을 제공한다. 그래픽 코어 어레이(1714)의 그래픽 코어(들)(1715A, 1715B) 내의 다목적 실행 로직(예를 들어, 실행 유닛)은 다양한 3D API 셰이더 언어에 대해 지원하고 복수의 셰이더와 관련된 복수의 동시 실행 스레드를 실행할 수 있다.
그래픽 코어 어레이(1714)는 비디오 및/또는 이미지 프로세싱과 같은 미디어 기능을 수행하는 실행 로직을 포함할 수 있다. 실행 유닛은 그래픽 프로세싱 동작 외에 병렬 범용 계산 동작을 수행하도록 프로그램될 수 있는 범용 로직을 포함할 수 있다. 범용 로직은 도 14의 프로세서 코어(들)(1407) 또는 도 15a에서와 같이 코어(1502A-1502N) 내에서 범용 로직과 병렬로 또는 함께 프로세싱 동작을 수행할 수 있다.
그래픽 코어 어레이(1714) 상에서 실행되는 스레드에 의해 생성된 출력 데이터는 데이터를 통합 반환 버퍼(URB)(1718)의 메모리로 출력할 수 있다. URB(1718)는 복수의 스레드에 대한 데이터를 저장할 수 있다. URB(1718)는 그래픽 코어 어레이(1714) 상에서 실행되는 상이한 스레드 사이에서 데이터를 전송하는데 사용될 수 있다. URB(1718)는 그래픽 코어 어레이(1714) 상의 스레드와 공유 기능 로직(1720) 내의 고정 기능 로직 사이의 동기화를 위해 추가적으로 사용될 수 있다.
선택적으로, 그래픽 코어 어레이(1714)는 확장 가능할 수 있으므로, 어레이는 가변 개수의 그래픽 코어를 포함하고, 각각은 GPE(1710)의 목표 전력 및 성능 레벨에 따라 가변 개수의 실행 유닛을 갖는다. 실행 리소스는 동적으로 확장 가능할 수 있으므로, 실행 리소스는 필요에 따라 활성화 또는 비활성화될 수 있다.
그래픽 코어 어레이(1714)는 그래픽 코어 어레이의 그래픽 코어들 사이에서 공유되는 복수의 리소스를 포함하는 공유 기능 로직(1720)과 연결된다. 공유 기능 로직(1720) 내의 공유 기능은 그래픽 코어 어레이(1714)에 특수 보충 기능을 제공하는 하드웨어 로직 유닛이다. 다양한 실시예에서, 공유 기능 로직(1720)은 샘플러(1721), 산술(1722) 및 스레드 간 통신(ITC)(1723) 로직을 포함하지만 이에 제한되는 것은 아니다. 부가적으로, 공유 기능 로직(1720) 내의 하나 이상의 캐시(들)(1725)가 구현될 수 있다.
공유 기능은 적어도 주어진 특수 기능에 대한 요구가 그래픽 코어 어레이(1714) 내에 포함시키기에 불충분한 경우에 구현된다. 대신에, 그 특수 기능의 단일 인스턴스화는 공유 기능 로직(1720)의 독립된 엔티티로서 구현되고, 그래픽 코어 어레이(1714) 내의 실행 리소스 사이에서 공유된다. 그래픽 코어 어레이(1714) 사이에서 공유되고 그래픽 코어 어레이(1714) 내에 포함되는 기능의 정확한 세트는 실시예에 따라 변한다. 그래픽 코어 어레이(1714)에 의해 광범위하게 사용되는 공유 기능 로직(1720) 내의 특정 공유 기능이 그래픽 코어 어레이(1714) 내의 공유 기능 로직(1716) 내에 포함될 수 있다. 선택적으로, 그래픽 코어 어레이(1714) 내의 공유 기능 로직(1716)은 공유 기능 로직(1720) 내의 일부 또는 모든 로직을 포함할 수 있다. 공유 기능 로직(1720) 내의 모든 로직 요소는 그래픽 코어 어레이(1714)의 공유 기능 로직(1716) 내에서 중복될 수 있다. 대안적으로, 공유 기능 로직(1720)은 그래픽 코어 어레이(1714) 내의 공유 기능 로직(1716)을 위해 배제된다.
실행 유닛
도 18a 및 도 18b는 본 명세서에 설명된 실시예에 따른 그래픽 프로세서 코어에서 사용되는 프로세싱 요소들의 어레이를 포함하는 스레드 실행 로직(1800)을 도시한다. 본원의 임의의 다른 도면의 요소와 동일하거나 유사한 명칭을 갖는 도 18a 및 도 18b의 요소는 다른 도면에서와 동일한 요소를 설명하고, 그와 유사한 방식으로 동작하거나 기능할 수 있고, 본 명세서의 다른 곳에서 설명된 것과 동일한 컴포넌트를 포함할 수 있으며 다른 엔티티에 링크될 수 있지만, 이에 제한되지는 않는다. 도 18a 및 도 18b는 스레드 실행 로직(1800)의 개요를 도시하며, 이는 도 15b의 각각의 서브-코어(1521A-1521F)로 도시된 하드웨어 로직을 나타낼 수 있다. 도 18a는 범용 그래픽 프로세서 내의 실행 유닛을 도시하고, 도 18b는 컴퓨팅 가속기 내에서 사용될 수 있는 실행 유닛을 도시한다.
도 18a에 도시된 것과 같이, 스레드 실행 로직(1800)은 셰이더 프로세서(1802), 스레드 디스패처(1804), 명령어 캐시(1806), 복수의 그래픽 실행 유닛(1808A-1808N)을 포함하는 확장 가능한 실행 유닛 어레이, 샘플러(1810), 공유 로컬 메모리(1811), 데이터 캐시(1812), 및 데이터 포트(1814)를 포함할 수 있다. 선택적으로, 확장 가능한 실행 유닛 어레이는 워크로드의 계산 요구 사항에 따라 하나 이상의 실행 유닛(예를 들어, 임의의 그래픽 실행 유닛(1808A, 1808B, 1808C, 1808D, 내지 1808N-1 및 1808N))을 활성화 또는 비활성화함으로서 동적으로 변경될 수 있다. 포함된 컴포넌트는 각각의 컴포넌트에 연결되는 상호 접속 패브릭을 통해 상호 접속될 수 있다. 스레드 실행 로직(1800)은 명령어 캐시(1806), 데이터 포트(1814), 샘플러(1810) 및 그래픽 실행 유닛(1808A-1808N) 중 하나 이상을 통해 시스템 메모리 또는 캐시 메모리와 같은 메모리로의 하나 이상의 접속을 포함할 수 있다. 각각의 실행 유닛(예를 들어, 1808A)은 각각의 스레드에 대해 복수의 데이터 요소를 병렬로 프로세싱하면서 복수의 동시 하드웨어 스레드를 실행할 수 있는 독립형의 프로그래밍 가능한 범용 계산 유닛일 수 있다. 다양한 실시예에서, 실행 유닛(1808A-1808N)의 어레이는 임의의 개수의 개별 실행 유닛을 포함하도록 확장 가능하다.
일부 실시예에서, 그래픽 실행 유닛(1808A-1808N)은 주로 셰이더 프로그램을 실행하는데 사용될 수 있다. 셰이더 프로세서(1802)는 다양한 셰이더 프로그램을 프로세싱하고 스레드 디스패처(1804)를 통해 셰이더 프로그램과 관련된 실행 스레드를 디스패치할 수 있다. 스레드 디스패처는 그래픽 및 미디어 파이프라인으로부터 스레드 개시 요청을 중재하고 요청된 스레드를 그래픽 실행 유닛(1808A-1808N)의 하나 이상의 실행 유닛 상에서 인스턴스화하는 로직을 포함할 수 있다. 예를 들어, 기하 파이프라인은 프로세싱을 위해 정점, 테셀레이션(tessellation) 또는 기하 셰이더를 스레드 실행 로직으로 디스패치할 수 있다. 선택적으로, 스레드 디스패처(1804)는 또한 실행 셰이더 프로그램으로부터의 런타임 스레드 생성 요청을 프로세싱할 수 있다.
일부 실시예에서, 그래픽 실행 유닛(1808A-1808N)은 그래픽 라이브러리(예를 들어, Direct 3D 및 OpenGL)로부터의 셰이더 프로그램이 최소의 변환으로 실행되도록 많은 표준 3D 그래픽 셰이더 명령어에 대한 기본적인 지원을 포함하는 명령어 세트를 지원할 수 있다. 실행 유닛은 정점 및 기하 프로세싱(예를 들어, 정점 프로그램, 기하 프로그램, 정점 셰이더), 픽셀 프로세싱(예를 들어, 픽셀 셰이더, 프래그먼트 셰이더) 및 범용 프로세싱(예를 들어, 컴퓨팅 및 미디어 셰이더)을 지원한다. 그래픽 실행 유닛(1808A-1808N)의 각각은 복수 발행 단일 명령어 복수 데이터(SIMD) 실행이 가능하고, 멀티-스레드 동작은 더 긴 대기 시간(latency)을 갖는 메모리 액세스에도 불구하고 효율적인 실행 환경을 가능하게 한다. 각각의 실행 유닛 내의 각각의 하드웨어 스레드는 전용 고대역 레지스터 파일과 관련 독립 스레드-상태를 갖는다. 실행은 정수, 단정밀도 및 배정밀도 부동 소수점 연산, SIMD 분기 기능, 로직 연산, 초월 연산 및 다른 기타 연산을 수행할 수 있는 파이프라인에 대해 클럭 당 복수로 발행된다. 메모리로부터 또는 공유 기능 중 하나로부터 데이터를 기다리는 동안, 실행 유닛(1808A-1808N) 내의 의존적인 로직은 요청된 데이터가 반환될 때까지 대기중인 스레드를 휴면 상태로 만든다. 대기중인 스레드가 휴면 상태인 동안, 하드웨어 리소스는 다른 스레드를 프로세싱하는데 사용될 수 있다. 예를 들어, 정점 셰이더 동작과 관련된 지연 시간 동안, 실행 유닛은 픽셀 셰이더, 프래그먼트 셰이더 또는 도 21에 도시된 정점 셰이더(2107)와 같은 다른 정점 셰이더를 포함하는 다른 타입의 셰이더 프로그램에 대한 동작을 수행할 수 있다. 다양한 실시예는 SIMD를 사용하는 대신 또는 SIMD의 사용에 부가적으로 SIMT(Single Instruction Multiple Thread)를 사용함으로써 실행할 수 있다. SIMD 코어 또는 동작에 대한 참조는 또한 SIMT에 적용되거나 또는 SIMT와 함께 SIMD에 적용될 수 있다.
그래픽 실행 유닛(1808A-1808N)의 각각의 실행 유닛은 데이터 요소의 어레이 상에서 동작한다. 데이터 요소의 개수는 "실행 크기" 또는 명령어에 대한 채널의 개수이다. 실행 채널은 명령어 내의 데이터 요소 액세스, 마스킹 및 흐름 제어에 대한 실행의 논리적 유닛이다. 채널의 개수는 특정 그래픽 프로세서에 대한 물리적 산술 로직 유닛(ALU), 부동 소수점 유닛(FPU), 다른 로직 유닛(예컨대, 텐서 코어, 광선 추적 코어 등)의 개수에 독립적일 수 있다. 부가적으로, 그래픽 실행 유닛(1808A-1808N)은 정수 및 부동 소수점 데이터 타입을 지원할 수 있다.
실행 유닛 명령어 세트는 SIMD 명령어를 포함한다. 다양한 데이터 요소는 레지스터에 패킹된 데이터 타입으로서 저장될 수 있고, 실행 유닛은 요소의 데이터 크기에 따라 다양한 요소를 프로세싱할 것이다. 예를 들어, 256 비트 폭의 벡터에 대해 동작하는 경우, 256 비트의 벡터가 레지스터에 저장되고, 실행 유닛은, 4개의개별적인 64 비트 패킹된 데이터 요소(Quad-Word(QW) 크기의 데이터 요소), 8개의 개별적인 32 비트 패킹된 데이터 요소(DW(Double Word) 크기의 데이터 요소), 16개의 개별적인 16 비트 패킹된 데이터 요소(Word(W) 크기의 데이터 요소) 또는 32개의 개별적인 8 비트 패킹된 데이터 요소(byte(B) 크기의 데이터 요소)로서 벡터에 대해 동작한다. 그러나, 다른 벡터 폭과 레지스터 크기도 가능하다.
선택적으로, 하나 이상의 실행 유닛은, 결합된 EU에 공통인 스레드 제어 로직(1807A-1807N)을 갖는 결합된 그래픽 실행 유닛(EU)(1809A-1809N)으로 결합될 수 있다. 복수의 EU가 EU 그룹에 결합될 수 있다. 결합된 EU 그룹의 각각의 EU는 별도의 SIMD 하드웨어 스레드를 실행하도록 구성될 수 있다. 결합된 EU 그룹에서의 EU의 개수는 실시예에 따라 달라질 수 있다. 또한 SIMD8, SIMD16 및 SIMD32를 포함하지만 이에 제한되지 않는 다양한 SIMD 폭이 각각의 EU 별로 수행될 수 있다. 각각의 결합된 그래픽 실행 유닛(1809A-1809N)은 적어도 2개의 실행 유닛을 포함한다. 예를 들어, 결합된 실행 유닛(1809A)은 제 1 EU(1808A), 제 2 EU(1808B), 및 제 1 EU(1808A)와 제 2 EU(1808B)에 공통인 스레드 제어 로직(1807A)을 포함한다. 스레드 제어 로직(1807A)은 결합된 그래픽 실행 유닛(1809A) 상에서 실행되는 스레드를 제어하여, 결합된 실행 유닛(1809A-1809N) 내의 각각의 EU가 공통 명령어 포인터 레지스터를 사용하여 실행될 수 있도록 한다.
하나 이상의 내부 명령어 캐시(예를 들어, 1806)가 스레드 실행 로직(1800)에 포함되어 실행 유닛에 대한 스레드 명령어를 캐싱한다. 스레드를 실행하는 동안 스레드 데이터를 캐싱하기 위해 스레드 실행 로직(1800) 내에 하나 이상의 데이터 캐시(예를 들어, 1812)가 포함될 수 있다. 실행 로직(1800) 상에서 실행되는 스레드는 또한 명시적으로 관리되는 데이터를 공유 로컬 메모리(1811)에 저장할 수 있다. 샘플러(1810)는 3D 동작을 위한 텍스처 샘플링 및 미디어 동작을 위한 미디어 샘플링을 제공하기 위해 포함될 수 있다. 샘플러(1810)는 샘플링된 데이터를 실행 유닛에 제공하기 전에 샘플링 프로세싱 동안 텍스처 또는 미디어 데이터를 프로세싱하는 특수 텍스처 또는 미디어 샘플링 기능을 포함할 수 있다.
실행하는 동안, 그래픽 및 미디어 파이프라인은 스레드 개시 요청을 스레드 생성 및 디스패치 로직을 통해 스레드 실행 로직(1800)으로 전송한다. 일단 기하학적 객체 그룹이 프로세싱되어 픽셀 데이터로 래스터화되면, 셰이더 프로세서(1802) 내의 픽셀 프로세서 로직(예를 들어, 픽셀 셰이더 로직, 프래그먼트 셰이더 로직 등)이 호출되어 출력 정보를 추가로 계산하고 결과를 출력 표면(예를 들어, 컬러 버퍼, 깊이 버퍼, 스텐실 버퍼 등)에 기록되도록 한다. 픽셀 셰이더 또는 프래그먼트 셰이더는 래스터화된 객체에 걸쳐 보간될 다양한 정점 속성의 값을 계산할 수 있다. 그런 다음, 셰이더 프로세서(1802) 내의 픽셀 프로세서 로직은 API(application programming interface) 제공 픽셀 또는 프래그먼트 셰이더 프로그램을 실행할 수 있다. 셰이더 프로그램을 실행하기 위해, 셰이더 프로세서(1802)는 스레드 디스패처(1804)를 통해 스레드를 실행 유닛(예를 들어, 1808A)으로 디스패치한다. 셰이더 프로세서(1802)는 샘플러(1810)의 텍스처 샘플링 로직을 사용하여 메모리에 저장된 텍스처 맵의 텍스처 데이터에 액세스할 수 있다. 텍스처 데이터 및 입력 기하 데이터에 대한 산술 연산은 각각의 기하학적 프래그먼트에 대한 픽셀 컬러 데이터를 계산하거나, 또는 다른 프로세싱에서 하나 이상의 픽셀을 폐기한다.
또한, 데이터 포트(1814)는 그래픽 프로세서 출력 파이프라인 상에서 추가 프로세싱을 위해 프로세싱된 데이터를 메모리로 출력하는 스레드 실행 로직(1800)에 대한 메모리 액세스 메커니즘을 제공할 수 있다. 데이터 포트(1814)는 데이터 포트(1814)를 통한 메모리 액세스를 위해 데이터를 캐싱하는 하나 이상의 캐시 메모리(예를 들어, 데이터 캐시(1812))를 포함하거나 또는 이에 연결될 수 있다.
선택적으로, 실행 로직(1800)은 또한 광선 추적 가속 기능을 제공할 수 있는 광선 추적기(1805)를 포함할 수 있다. 광선 추적기(1805)는 광선 생성을 위한 명령어/기능을 포함하는 광선 추적 명령어 세트를 지원할 수 있다. 광선 추적 명령어 세트는 도 3c의 광선 추적 코어(372)에 의해 지원되는 광선 추적 명령어 세트와 유사하거나 또는 상이할 수 있다.
도 18b는 실행 유닛(1808)의 예시적인 내부 세부 사항을 도시한다. 그래픽 실행 유닛(1808)은 명령어 페치 유닛(1837), GRF(general register file) 어레이(1824), ARF(architecture register file) 어레이(1826), 스레드 중재자(1822), 송신 유닛(1830), 분기 유닛(1832), SIMD FPUs(floating point units)(1834) 세트를 포함할 수 있고, 선택적으로는 전용 정수 SIMD ALU(1835) 세트를 포함할 수 있다. GRF(1824) 및 ARF(1826)는 그래픽 실행 유닛(1808)에서 활성화될 수 있는 각각의 동시 하드웨어 스레드와 관련된 일반 레지스터 파일 및 아키텍처 레지스터 파일의 세트를 포함한다. 스레드 당 구조적 상태는 ARF(1826)에 유지될 수 있고, 스레드를 실행하는 동안 사용된 데이터는 GRF(1824)에 저장된다. 각각의 스레드에 대한 명령어 포인터를 포함하는 각각의 스레드의 실행 상태는 ARF(1826)의 스레드 특정 레지스터에 보유될 수 있다.
그래픽 실행 유닛(1808)은 SMT(Simultaneous Multi-Threading) 및 파인 그레인드(fine-grained) IMT(Interleaved Multi-Threading)의 조합인 아키텍처를 가질 수 있다. 이 아키텍처는 동시 스레드의 대상 개수와 실행 유닛 당 레지스터 개수에 따라 설계 시에 미세 조정이 가능한 모듈식 구성을 가질 수 있는데, 실행 유닛 리소스는 복수의 동시 스레드를 실행하는데 사용되는 로직에 따라 분할된다. 그래픽 실행 유닛(1808)에 의해 실행될 수 있는 로직 스레드의 개수는 하드웨어 스레드의 개수로 제한되지 않으며, 복수의 로직 스레드가 각각의 하드웨어 스레드에 할당될 수 있다.
선택적으로, 그래픽 실행 유닛(1808)은 복수의 명령어를 공동 발행할 수 있으며, 이는 각각 다른 명령어일 수 있다. 그래픽 실행 유닛 스레드(1808)의 스레드 중재자(1822)는 실행을 위해 명령어를 전송 유닛(1830), 분기 유닛(1832) 또는 SIMD FPU(들)(1834) 중 하나에 디스패치할 수 있다. 각각의 실행 스레드는 GRF(1824) 내의 128개의 범용 레지스터에 액세스할 수 있는데, 각각의 레지스터는 32 비트 데이터 요소의 SIMD 8 요소 벡터로서 액세스가능한 32 바이트를 저장할 수 있다. 각각의 실행 유닛 스레드는 GRF(1824) 내에서 4KB에 액세스할 수 있지만, 실시예는 이에 제한되지 않고, 더 많거나 또는 더 적은 레지스터 리소스가 다른 실시예에서 제공될 수 있다. 그래픽 실행 유닛(1808)은 계산 동작을 독립적으로 수행할 수 있는 7개의 하드웨어 스레드로 분할될 수 있지만, 실행 유닛 당 스레드의 개수는 또한 실시예에 따라 변할 수 있는데, 예를 들어, 최대 16개의 하드웨어 스레드가 지원될 수 있다. 7개의 스레드가 4KB에 액세스할 수 있는 예시적 실시예에서, GRF(1824)는 총 28KB를 저장할 수 있다. 16개의 스레드가 4KB에 액세스할 수 있는 다른 예시적 실시예에서, GRF(1824)는 총 64KB를 저장할 수 있다. 그러나, 실행 유닛 당 스레드의 개수는 이런 예들로 제한되지 않으며, 주어진 개수보다 더 많거나 적을 수 있다. 유연한 어드레싱 모드는 레지스터들을 함께 어드레싱하여 효과적으로 더 넓은 레지스터를 구성하거나 또는 스트라이드된(strided) 사각형 블록 데이터 구조를 나타낼 수 있다.
부가적으로 또는 대안적으로, 메모리 동작, 샘플러 동작 및 다른 대기 시간이 긴 시스템 통신은 메시지 전달 송신 유닛(1830)에 의해 실행되는 "송신" 명령어를 통해 디스패치될 수 있다. 분기 명령어는 전용 분기 유닛(1832)으로 디스패치되어 SIMD 발산 및 최종 수렴을 용이하게 할 수 있다.
그래픽 실행 유닛(1808)은 부동 소수점 연산을 수행하는 하나 이상의 SIMD 부동 소수점 유닛(FPU)(1834)을 포함할 수 있다. FPU(들)(1834)는 또한 정수 계산을 지원할 수 있다. 일부 사례에서, FPU(들)(1834)는 M개의 32 비트 부동 소수점(또는 정수) 연산까지 SIMD를 실행할 수 있거나, 또는 최대 2M개의 16 비트 정수 또는 16 비트 부동 소수점 연산까지 SIMD를 실행할 수 있다. 선택적으로, FPU(들) 중 적어도 하나는 고처리량 초월 산술 함수 및 배정밀도 184 비트 부동 소수점을 지원하는 확장된 산술 능력을 제공한다. 8 비트 정수 SIMD ALU(1835) 세트가 또한 존재할 수 있고, 머신 학습 계산과 관련된 동작을 수행하도록 특별히 최적화될 수 있다.
선택적으로, 그래픽 실행 유닛(1808)의 복수 인스턴스의 어레이는 그래픽 서브-코어 그룹(예를 들어, 서브-슬라이스)에서 인스턴스화될 수 있다. 확장성을 위해, 제품 설계자는 서브-코어 그룹 당 실행 유닛의 정확한 개수를 선택할 수 있다. 실행 유닛(1808)은 복수의 실행 채널에 걸쳐 명령어를 실행할 수 있다. 또한, 그래픽 실행 유닛(1808) 상에서 실행된 각각의 스레드는 다른 채널 상에서 실행될 수 있다.
도 19는 추가 예시적 실행 유닛(1900)을 도시한다. 본원의 임의의 다른 도면의 요소와 동일하거나 유사한 명칭을 갖는 도 19의 요소는 다른 도면에서와 동일한 요소를 설명하고, 그와 유사한 방식으로 동작하거나 기능할 수 있고, 본 명세서의 다른 곳에서 설명된 것과 동일한 컴포넌트를 포함할 수 있으며 다른 엔티티에 링크될 수 있지만, 이에 제한되지는 않는다. 실행 유닛(1900)은, 예를 들어 도 16c에서와 같이 컴퓨팅 엔진 타일(1640A-1640D)에 사용하기 위해 컴퓨팅 최적화된 실행 유닛일 수 있지만, 이에 제한되는 것은 아니다. 실행 유닛(1900)이 또한 도 16b에서와 같이 그래픽 엔진 타일(1610A-1610D)에서 사용될 수 있다. 실행 유닛(1900)은 스레드 제어 유닛(1901), 스레드 상태 유닛(1902), 명령어 페치/프리페치 유닛(1903) 및 명령어 디코딩 유닛(1904)을 포함할 수 있다. 실행 유닛(1900)은 실행 유닛 내에서 하드웨어 스레드에 할당될 수 있는 레지스터를 저장하는 레지스터 파일(1906)을 추가로 포함할 수 있다. 실행 유닛(1900)은 송신 유닛(1907) 및 분기 유닛(1908)을 추가로 포함할 수 있다. 송신 유닛(1907) 및 분기 유닛(1908)은 도 18b의 그래픽 실행 유닛(1808)의 송신 유닛(1830) 및 분기 유닛(1832)과 유사하게 동작할 수 있다.
실행 유닛(1900)은 또한 복수의 상이한 타입의 기능 유닛을 포함하는 컴퓨팅 유닛(1910)을 포함할 수 있다. 컴퓨팅 유닛(1910)은 또한, ALU(1911), 시스토릭(systolic) 어레이(1912) 및 산술 유닛(1913)을 포함할 수 있다. ALU(1911)는 산술 로직 유닛의 어레이를 포함한다. ALU(1911)는 다수의 프로세싱 레인 및 데이터 채널에 걸쳐 다수의 하드웨어 및/또는 소프트웨어 스레드에 대해 64 비트, 32 비트 및 16 비트 정수 및 부동 소수점 연산을 수행하도록 구성될 수 있다. ALU(1911)는 정수 및 부동 소수점 연산을 동시에(예컨대, 동일 클록 주기 내에서) 수행할 수 있다.
시스토릭 어레이(1912)는 시스토릭 방식으로 벡터 또는 다른 데이터-병렬 연산을 수행하는데 사용될 수 있는 데이터 프로세싱 유닛으로 이루어진 W(와이드) 및 D(딥) 네트워크를 포함한다. 시스토릭 어레이(1912)는 내적(dot product), 외적(outer product), GEMM(general matrix-matrix multiplication) 연산을 포함하는 다양한 매트릭스 연산을 수행하도록 구성될 수 있다. 시스토릭 어레이(1912)는 16 비트 부동 소수점 연산뿐만 아니라 8 비트, 4 비트, 2 비트, 및 이진 정수 연산을 지원할 수 있다. 시스토릭 어레이(1912)는 머신 학습 동작을 가속화하도록 구성될 수 있다. 시스토릭 어레이(1912)는, IEEE(Institute of Electrical and Electronics Engineers) 754 포맷에 비해 가수 및 지수 비트 수가 다른, bfloat 16 (브레인 부동 소수점) 16 비트 부동 소수점 포맷 또는 TF32(tensor float 32-bit floating point format)을 지원하도록 구성될 수 있다. FP64 포맷이 또한 지원될 수 있다.
일 실시예에서, 시스토릭 어레이(1912)는 희소 매트릭스 연산을 가속화하기위한 하드웨어를 포함한다. 입력 데이터의 희소 영역에 대한 곱셈 연산은 처리량을 희생하지 않고 우회될 수 있다. 입력 매트릭스 내의 블록 희소성이 검출될 수 있으며, 알려진 출력 값을 갖는 연산은 우회될 수 있다. 일 실시예에서, 시스토릭 어레이(1912)는 압축된 표현을 갖는 희소 데이터에 대한 연산을 가능하게 하는 하드웨어를 포함한다. 희소 매트릭스의 압축 표현은 0이 아닌 값과, 매트릭스 내에서 0이 아닌 값의 위치를 정의하는 메타 데이터를 저장한다. 예시적인 압축 표현은 압축된 희소 행(CSR), 압축된 희소 열(CSC), 압축된 희소 섬유(CSF) 표현과 같은 압축된 텐서 표현을 포함하지만 이에 제한되지는 않는다. 압축된 표현에 대한 지원은 압축된 표현을 압축 해제하거나 디코딩할 필요없이 압축된 텐서 포맷의 입력에 대해 연산을 수행할 수 있게 한다. 이러한 실시예에서, 연산은 0이 아닌 입력 값에 대해서만 수행될 수 있으며, 결과적인 0이 아닌 출력 값은 출력 매트릭스에 매핑될 수 있다. 일부 실시예에서는, 하드웨어 내에서 또는 시스템 버스를 통해 데이터를 전송할 때 사용되는 머신 특정 무손실 데이터 압축 포맷에 대한 하드웨어 지원도 제공된다. 이러한 데이터는 희소 입력 데이터에 대해 압축된 포맷으로 유지될 수 있으며, 시스토릭 어레이(1912)는 압축된 데이터에 대한 압축 메타 데이터를 사용하여 0이 아닌 값에 대해서만 연산을 수행할 수 있도록 하거나, 곱셈 연산에 대해 0 데이터 입력의 블록이 우회되게 한다.
산술 유닛(1913)은 ALU 유닛(1911)보다 효율적이고 저전력 방식으로 수학적 연산의 특정 서브세트를 수행하도록 구성될 수 있다. 산술 유닛(1913)은 설명된 다른 실시예에 의해 제공된 그래픽 프로세싱 엔진의 공유 기능 로직에서 발견되는 산술 로직(예를 들어, 도 17의 공유 기능 로직(1720)의 산술 로직(1722))을 포함할 수 있다. 산술 유닛(1913)은 32 비트 및 64 비트 부동 소수점 연산을 수행하도록 구성될 수 있다.
스레드 제어 유닛(1901)은 실행 유닛 내에서 스레드의 실행을 제어하는 로직을 포함한다. 스레드 제어 유닛(1901)은 실행 유닛(1900) 내에서 스레드의 실행을 시작, 중지 및 선점하는 스레드 중재 로직을 포함할 수 있다. 스레드 상태 유닛(1902)은 실행 유닛(1900) 상에서 실행되도록 할당된 스레드에 대한 스레드 상태를 저장하는데 사용될 수 있다. 실행 유닛(1900) 내에 스레드 상태를 저장함으로써 이들 스레드가 차단되거나 유휴 상태일 때 스레드를 신속하게 선점할 수 있다. 명령어 페치/프리페치 유닛(1903)은 더 높은 레벨의 실행 로직의 명령어 캐시(예를 들어, 도 18a에서와 같은 명령어 캐시(1806))로부터 명령어를 페치할 수 있다. 명령어 페치/프리페치 유닛(1903)은 또한 현재 실행 중인 스레드의 분석에 기초하여 명령어가 명령어 캐시에 로딩될 수 있도록 프리페치 요청을 발행할 수 있다. 명령어 디코딩 유닛(1904)은 컴퓨팅 유닛에 의해 실행될 명령어를 디코딩하는데 사용될 수 있다. 명령어 디코딩 유닛(1904)은 복잡한 명령어를 구성을 이루는 마이크로-동작으로 디코딩하는 2차 디코더로서 사용될 수 있다.
실행 유닛(1900)은 실행 유닛(1900) 상에서 실행되는 하드웨어 스레드에 의해 사용될 수 있는 레지스터 파일(1906)을 추가로 포함한다. 레지스터 파일(1906)의 레지스터는 실행 유닛(1900)의 컴퓨팅 유닛(1910) 내에서 복수의 동시 스레드를 실행하는데 사용되는 로직에 걸쳐 분할될 수 있다. 그래픽 실행 유닛(1900)에 의해 실행될 수 있는 로직 스레드의 개수는 하드웨어 스레드의 개수로 제한되지 않고, 복수의 로직 스레드가 각각의 하드웨어 스레드에 할당될 수 있다. 레지스터 파일(1906)의 크기는 지원되는 하드웨어 스레드의 개수에 따라 실시예마다 변할 수 있다. 레지스터 명칭 변경은 레지스터를 하드웨어 스레드에 동적으로 할당하기 위해 사용될 수 있다.
도 20은 그래픽 프로세서 명령어 포맷(2000)을 도시한 블록도이다. 그래픽 프로세서 실행 유닛은 복수 포맷의 명령어를 갖는 명령어 세트를 지원한다. 실선 상자는 일반적으로 실행 유닛 명령어에 포함된 컴포넌트를 나타내는 반면, 점선은 선택 사항이거나 또는 명령어의 서브-세트에만 포함된 컴포넌트를 포함한다. 일부 실시예에서, 설명되고 도시된 그래픽 프로세서 명령어 포맷(2000)은, 일단 명령어가 프로세싱되면 디코딩된 명령어로부터 기인하는 마이크로-동작과 달리, 실행 유닛에 제공되는 명령어라는 점에서 매크로-명령어이다. 이와 같이, 단일 명령어는 하드웨어로 하여금 다수의 마이크로-동작을 수행하게 할 수 있다.
본 명세서에 설명된 그래픽 프로세서 실행 유닛은 기본적으로 128 비트 명령어 포맷(2010)의 명령어를 지원한다. 64 비트 압축 명령어 포맷(2030)은 선택된 명령어, 명령어 옵션 및 피연산자의 개수에 따라 일부 명령어에서 이용 가능하다. 기본적인 128 비트 명령어 포맷(2010)은 모든 명령어 옵션에 대한 액세스를 제공하는 반면, 일부 옵션 및 동작은 64 비트 포맷(2030)으로 제한된다. 64 비트 포맷(2030)에서 이용 가능한 기본적인 명령어는 실시예에 따라 다르다. 명령어는 인덱스 필드(2013)의 인덱스 값 세트를 사용하여 부분적으로 압축된다. 실행 유닛 하드웨어는 인덱스 값에 따라 압축 테이블 세트를 참조하고 압축 테이블 출력을 사용하여 128 비트 명령어 포맷(2010)으로 기본적인 명령어를 재구성한다. 다른 크기 및 포맷의 명령어가 사용될 수 있다.
각각의 포맷에 대해, 명령어 연산 코드(opcode)(2012)는 실행 유닛이 수행해야 할 동작을 정의한다. 실행 유닛은 각각의 피연산자의 복수의 데이터 요소에 걸쳐 각각의 명령어를 병렬로 실행한다. 예를 들어, 더하기 명령어(an add instruction)에 응답하여, 실행 유닛은 텍스처 요소 또는 화상 요소를 나타내는 각각의 컬러 채널에 걸쳐 동시적인 더하기 동작을 수행한다. 기본적으로 실행 유닛은 피연산자의 모든 데이터 채널에 걸쳐서 각각의 명령어를 수행한다. 명령어 제어 필드(2014)는 채널 선택(예를 들어, 예측) 및 데이터 채널 순서(예를 들어, 스위즐(swizzle))와 같은 특정 실행 옵션에 대한 제어를 가능하게 할 수 있다. 128 비트 명령어 포맷(2010)의 명령어에 대해, 실행-크기 필드(2016)는 병렬로 실행될 데이터 채널의 개수를 제한한다. 실행-크기 필드(2016)는 64 비트 압축 명령어 포맷(2030)에서 사용 가능하지 않을 수 있다.
일부 실행 유닛 명령어는 2개의 소스 피연산자인 SRC0(2020) 및 SRC1(2022)과 1개의 목적지(2018)를 포함하여 최대 3개의 피연산자를 갖는다. 실행 유닛은 이중 목적지 명령어를 지원할 수 있는데, 이중 하나의 목적지는 암시된다. 데이터 조작 명령어는 제 3 소스 피연산자(예를 들어, SRC2(2024))를 가질 수 있으며, 여기서 명령어 연산 코드(2012)는 소스 피연산자의 개수를 결정한다. 명령어의 마지막 소스 피연산자는 명령어와 함께 전달되는 이미디어트(immediate)(예를 들어, 하드-코딩된) 값일 수 있다.
128 비트 명령어 포맷(2010)은, 예를 들어, 직접 레지스터 어드레싱 모드 또는 간접 레지스터 어드레싱 모드가 사용되는지를 지정하는 액세스/주소 모드 필드(2026)를 포함할 수 있다. 직접 레지스터 어드레싱 모드가 사용될 때, 하나 이상의 피연산자의 레지스터 주소는 명령어의 비트에 의해 직접 제공된다.
128 비트 명령어 포맷(2010)은 또한 명령어에 대한 주소 모드 및/또는 액세스 모드를 지정하는 액세스/주소 모드 필드(2026)를 포함할 수 있다. 액세스 모드는 명령어에 대한 데이터 액세스 정렬을 정의하는데 사용될 수 있다. 16 바이트 정렬 액세스 모드 및 1 바이트 정렬 액세스 모드를 포함하는 액세스 모드가 지원될 수 있는데, 액세스 모드의 바이트 정렬은 명령어 피연산자의 액세스 정렬을 결정한다. 예를 들어, 제 1 모드에 있을 때, 명령어는 소스 및 목적지 피연산자에 대해 1 바이트 정렬된 어드레싱을 사용할 수 있고, 제 2 모드에 있을 때, 명령어는 모든 소스 및 목적지 피연산자에 대해 16 바이트 정렬된 어드레싱을 사용할 수 있다.
액세스/주소 모드 필드(2026)의 주소 모드 부분은 명령어가 직접 또는 간접 어드레싱을 사용해야 하는지 여부를 결정할 수 있다. 직접 레지스터 어드레싱 모드가 사용될 때, 명령어의 비트는 하나 이상의 피연산자의 레지스터 주소를 직접 제공한다. 간접 레지스터 어드레싱 모드가 사용될 때, 하나 이상의 피연산자의 레지스터 주소는 명령어의 주소 레지스터 값 및 주소 이미디어트 필드에 기초하여 계산될 수 있다.
명령어는 연산 코드 디코딩(2040)을 단순화하는 연산 코드(2012) 비트 필드에 따라 그룹화될 수 있다. 8 비트 연산 코드의 경우, 비트 4, 5 및 6은 실행 유닛이 연산 코드의 유형을 결정할 수 있도록 한다. 설명되는 구체적인 연산 코드 그룹은 단지 예시일 뿐이다. 이동 및 로직 연산 코드 그룹(2042)은 데이터 이동 및 로직 명령어(예를 들어, 이동(mov), 비교(cmp))를 포함할 수 있다. 이동 및 로직 그룹(2042)은 5개의 최소 유효 비트(LSB)를 공유할 수 있으며, 여기서 이동(mov) 명령어는 0000xxxxb의 형태이고 로직 명령어는 0001xxxxb의 형태이다. 흐름 제어 명령어 그룹(2044)(예를 들어, 호출, 점프(jmp))은 0010xxxxb의 형태(예를 들어, 0x20)의 명령어를 포함한다. 기타 명령어 그룹(2046)은 0011xxxxb의 형태(예를 들어, 0x30)의 동기화 명령어(예를 들어, 대기, 송신)를 포함하는 명령어의 혼합을 포함한다. 병렬 산술 명령어 그룹(2048)은 0100xxxxb의 형태(예를 들어, 0x40)의 컴포넌트 별 산술 명령어(예를 들어, 더하기, 곱하기(mul))를 포함한다. 병렬 산술 명령어 그룹(2048)은 데이터 채널에 걸쳐 병렬로 산술 연산을 수행한다. 벡터 산술 그룹(2050)은 0101xxxxb 형태(예를 들어, 0x50)의 산술 명령어(예를 들어, dp4)를 포함한다. 벡터 산술 그룹은 벡터 피연산자에 대한 내적 계산과 같은 산술을 수행한다. 일 실시예에서, 설명된 연산 코드 디코딩(2040)은 실행 유닛의 어느 부분이 디코딩된 명령어를 실행하는데 사용될지를 결정하는데 사용될 수 있다. 예를 들어, 일부 명령어는 시스토릭 어레이에 의해 수행될 시스토릭 명령어로 지정될 수 있다. 광선 추적 명령어(도시하지 않음)와 같은 다른 명령어는 실행 로직의 슬라이스 또는 파티션 내에서 광선 추적 코어 또는 광선 추적 로직으로 라우팅될 수 있다.
그래픽 파이프라인
도 21은 다른 실시예에 따른 그래픽 프로세서(2100)의 블록도이다. 본원의 임의의 다른 도면의 요소와 동일하거나 유사한 명칭을 갖는 도 21의 요소는 다른 도면에서와 동일한 요소를 설명하고, 그와 유사한 방식으로 동작하거나 기능할 수 있고, 본 명세서의 다른 곳에서 설명된 것과 동일한 컴포넌트를 포함할 수 있으며 다른 엔티티에 링크될 수 있지만, 이에 제한되지는 않는다.
그래픽 프로세서(2100)는 기하 파이프라인(2120), 미디어 파이프라인(2130), 디스플레이 엔진(2140), 스레드 실행 로직(2150) 및 렌더링 출력 파이프라인(2170)과 같은 상이한 타입의 그래픽 프로세싱 파이프라인을 포함할 수 있다. 그래픽 프로세서(2100)는 하나 이상의 범용 프로세싱 코어를 포함하는 멀티-코어 프로세싱 시스템 내의 그래픽 프로세서일 수 있다. 그래픽 프로세서는 하나 이상의 제어 레지스터(도시하지 않음)에 대한 레지스터 기록에 의해 또는 링 상호 접속부(2102)를 통해 그래픽 프로세서(2100)에 발행된 커맨드를 통해 제어될 수 있다. 링 상호 접속부(2102)는 그래픽 프로세서(2100)를 다른 그래픽 프로세서 또는 범용 프로세서와 같은 다른 프로세싱 컴포넌트에 연결할 수 있다. 링 상호 접속부(2102)로부터의 커맨드는 커맨드 스트리머(2103)에 의해 해석되고, 이 커맨드 스트리머(2103)는 기하 파이프라인(2120) 또는 미디어 파이프라인(2130)의 개별 컴포넌트에 명령어를 제공한다.
커맨드 스트리머(2103)는 메모리로부터 정점 데이터를 판독하고 커맨드 스트리머(2103)에 의해 제공된 정점-프로세싱 커맨드를 실행하는 정점 페처(2105)의 동작을 지시할 수 있다. 정점 페처(2105)는 정점 데이터를 정점 셰이더(2107)에 제공할 수 있는데, 이 정점 셰이더(2107)는 각 정점에 좌표 공간 변환 및 조명 동작을 수행한다. 정점 페처(2105) 및 정점 셰이더(2107)는 실행 스레드를 스레드 디스패처(2131)를 통해 실행 유닛(2152A, 2152B)에 디스패칭함으로써 정점-프로세싱 명령어를 실행할 수 있다.
실행 유닛(2152A, 2152B)은 그래픽 및 미디어 동작을 수행하는 명령어 세트를 갖는 벡터 프로세서의 어레이일 수 있다. 실행 유닛(2152A, 2152B)은 각각의 어레이에 대해 특정되거나 또는 어레이 사이에서 공유되는 부착된 L1 캐시(2151)를 가질 수 있다. 캐시는 데이터 캐시, 명령어 캐시 또는 서로 다른 파티션에 데이터와 명령어를 포함하도록 분할된 단일 캐시로 구성될 수 있다.
기하 파이프라인(2120)은 3D 객체의 하드웨어 가속 테셀레이션을 수행하는 테셀레이션 컴포넌트를 포함할 수 있다. 프로그래밍 가능한 헐(hull) 셰이더(2111)는 테셀레이션 동작을 구성할 수 있다. 프로그래밍 가능한 도메인 셰이더(2117)는 테셀레이션 출력의 백엔드(back-end) 평가를 제공할 수 있다. 테셀레이터(2113)는 헐 셰이더(2111)의 방향에서 동작할 수 있고, 기하 파이프라인(2120)에 입력으로서 제공되는 대략적인(coarse) 기하학적 모델에 기초하여 상세한 기하학적 객체의 세트를 생성하는 특수 목적 로직을 포함할 수 있다. 또한, 테셀레이션이 사용되지 않으면, 테셀레이션 컴포넌트(예를 들어, 헐 셰이더(2111), 테셀레이터(2113) 및 도메인 셰이더(2117))는 우회될 수 있다. 테셀레이션 컴포넌트는 정점 셰이더(2107)로부터 수신된 데이터에 기초하여 동작할 수 있다.
완전한 기하학적 객체는 실행 유닛(2152A, 2152B)으로 디스패치된 하나 이상의 스레드를 통해 기하 셰이더(2119)에 의해 처리될 수 있거나, 또는 클리퍼(2129)로 직접 진행될 수 있다. 기하 셰이더는 그래픽 파이프라인의 이전 단계에서와 같이 정점 또는 정점의 패치(patch)가 아닌 전체의 기하학적 객체에 대해 동작할 수 있다. 테셀레이션이 비활성화되면, 기하 셰이더(2119)는 정점 셰이더(2107)로부터 입력을 수신한다. 테셀레이션 유닛이 비활성화되면, 기하 셰이더(2119)는 기하 테셀레이션을 수행하는 기하 셰이더 프로그램으로 프로그래밍 가능할 수 있다.
래스터화 이전에, 클리퍼(2129)는 정점 데이터를 프로세싱한다. 클리퍼(2129)는 고정 기능 클리퍼 또는 클리핑 및 기하 셰이더 기능을 갖는 프로그래밍 가능한 클리퍼일 수 있다. 렌더링 출력 파이프라인(2170)의 래스터화기(rasterizer) 및 깊이 테스트 컴포넌트(2173)는 픽셀 셰이더를 디스패치하여 기하학적 객체를 픽셀 당 표현으로 변환할 수 있다. 픽셀 셰이더 로직은 스레드 실행 로직(2150)에 포함될 수 있다. 선택적으로, 애플리케이션은 래스터화기 및 깊이 테스트 컴포넌트(2173)를 우회하고 스트림 아웃 유닛(2123)을 통해 래스터화되지 않은 정점 데이터에 액세스할 수 있다.
그래픽 프로세서(2100)는 상호 접속 버스, 상호 접속 패브릭, 또는 프로세서의 주요 컴포넌트 사이에 데이터 및 메시지 전달을 허용하는 다른 상호 접속 메커니즘을 갖는다. 일부 실시예에서, 실행 유닛(2152A, 2152B) 및 관련 로직 유닛(예를 들어, L1 캐시(2151), 샘플러(2154), 텍스처 캐시(2158) 등)은 메모리 액세스를 수행하고 프로세서의 렌더링 출력 파이프라인 컴포넌트와 통신하는 데이터 포트(2156)를 통해 상호 접속된다. 샘플러(2154), 캐시(2151, 2158) 및 실행 유닛(2152A, 2152B)은 각각 별개의 메모리 액세스 경로를 가질 수 있다. 선택적으로, 텍스처 캐시(2158)는 또한 샘플러 캐시로서 구성될 수 있다.
렌더링 출력 파이프라인(2170)은 정점 기반 객체를 관련 픽셀 기반 표현으로 변환하는 래스터화기 및 깊이 테스트 컴포넌트(2173)를 포함할 수 있다. 래스터화기 로직은 고정 기능 삼각형 및 라인 래스터화를 수행하는 윈도우/마스커 유닛을 포함할 수 있다. 관련된 렌더 캐시(2178) 및 깊이 캐시(2179)는 또한 일부 실시예에서 이용가능할 수 있다. 픽셀 동작 컴포넌트(2177)는 데이터에 대해 픽셀 기반 동작을 수행하지만, 일부 예에서는 2D 동작(예를 들어, 블렌딩을 통한 비트 블록 이미지 전송)과 관련된 픽셀 동작은 2D 엔진(2141)에 의해 수행되거나 또는 디스플레이 시간에 오버레이 디스플레이 평면을 사용하여 디스플레이 제어기(2143)에 의해 대체된다. 공유 L3 캐시(2175)는 모든 그래픽 컴포넌트에 이용 가능할 수 있어서, 주 시스템 메모리를 사용하지 않고 데이터를 공유할 수 있도록 한다.
미디어 파이프라인(2130)은 미디어 엔진(2137) 및 비디오 프론트-엔드(2134)를 포함할 수 있다. 비디오 프론트-엔드(2134)는 커맨드 스트리머(2103)로부터 파이프라인 커맨드를 수신할 수 있다. 미디어 파이프라인(2130)은 별도의 커맨드 스트리머를 포함할 수 있다. 비디오 프론트-엔드(2134)는 미디어 커맨드를 미디어 엔진(2137)에 전송하기 전에 이 커맨드를 프로세싱할 수 있다. 미디어 엔진(2137)은 스레드 디스패처(2131)를 통해 스레드 실행 로직(2150)으로 디스패치하기 위한 스레드를 생성하는 스레드 생성 기능을 포함할 수 있다.
그래픽 프로세서(2100)는 디스플레이 엔진(2140)을 포함할 수 있다. 이 디스플레이 엔진(2140)은 프로세서(2100)의 외부에 있을 수 있고, 링 상호 접속부(2102) 또는 일부 다른 상호 접속 버스 또는 패브릭을 통해 그래픽 프로세서와 연결될 수 있다. 디스플레이 엔진(2140)은 2D 엔진(2141) 및 디스플레이 제어기(2143)를 포함할 수 있다. 디스플레이 엔진(2140)은 3D 파이프라인으로부터 독립적으로 동작할 수 있는 특수 목적 로직을 포함할 수 있다. 디스플레이 제어기(2143)는, 랩탑 컴퓨터에서와 같이 시스템 통합형 디스플레이 장치일 수 있거나 디스플레이 장치 커넥터를 통해 부착된 외부 디스플레이 장치일 수 있는 디스플레이 장치(도시하지 않음)에 연결될 수 있다.
기하 파이프라인(2120) 및 미디어 파이프라인(2130)은 복수의 그래픽 및 미디어 프로그래밍 인터페이스에 따른 동작을 수행하도록 구성될 수 있고 임의의 하나의 애플리케이션 프로그래밍 인터페이스(API)에 제한되지 않는다. 그래픽 프로세서를 위한 드라이버 소프트웨어는 특정 그래픽 또는 미디어 라이브러리에 특정된 API 호출을 그래픽 프로세서에 의해 처리될 수 있는 커맨드로 변환할 수 있다. 모두 크로노스 그룹(Khronos Group)으로부터 발표된, OpenGL(Open Graphics Library), OpenCL(Open Computing Language) 및/또는 Vulkan 그래픽 및 컴퓨팅 API에 대한 지원이 제공될 수 있다. Microsoft Corporation으로부터 발표된 Direct3D 라이브러리에 대한 지원이 또한 제공될 수 있다. 이들 라이브러리의 조합이 지원될 수 있다. OpenCV(Open Source Computer Vision Library)에 대한 지원이 또한 제공될 수 있다. 향후 API의 파이프라인으로부터 그래픽 프로세서의 파이프라인으로 매핑이 가능하게 되면, 호환 가능한 3D 파이프라인을 갖는 향후 API도 지원될 것이다.
그래픽 파이프라인 프로그래밍
도 22a는, 예를 들어 도 16a, 도 17, 도 21과 함께 본 명세서에 설명된 파이프라인과 같은 그래픽 프로세싱 파이프라인을 프로그래밍하는 데 사용된 그래픽 프로세서 커맨드 포맷(2200)을 도시한 블록도이다. 도 22b는 일 실시예에 따른 그래픽 프로세서 커맨드 시퀀스(2210)를 도시한 블록도이다. 도 22a의 실선 상자는 일반적으로 그래픽 커맨드에 포함된 컴포넌트를 도시하고, 점선은 선택 사항이거나 또는 그래픽 커맨드의 서브-세트에만 포함된 컴포넌트를 포함한다. 도 22a의 예시적인 그래픽 프로세서 커맨드 포맷(2200)은 클라이언트(2202), 커맨드 연산 코드(opcode)(2204) 및 커맨드에 대한 데이터(2206)를 식별하는 데이터 필드를 포함한다. 서브-연산 코드(2205) 및 커맨드 크기(2208)는 또한 일부 커맨드에 포함된다.
클라이언트(2202)는 커맨드 데이터를 프로세싱하는 그래픽 장치의 클라이언트 유닛을 특정할 수 있다. 그래픽 프로세서 커맨드 파서(parser)는 커맨드의 추가 프로세싱을 조정하고 커맨드 데이터를 적절한 클라이언트 유닛으로 라우팅하기 위해 각 커맨드의 클라이언트 필드를 검사할 수 있다. 그래픽 프로세서 클라이언트 유닛은 메모리 인터페이스 유닛, 렌더 유닛, 2D 유닛, 3D 유닛 및 미디어 유닛을 포함할 수 있다. 각각의 클라이언트 유닛은 커맨드를 프로세싱하는 대응 프로세싱 파이프라인을 가질 수 있다. 일단 커맨드가 클라이언트 유닛에 의해 수신되면, 클라이언트 유닛은 수행할 동작을 결정하기 위해 연산 코드(2204) 및 존재한다면 서브-연산 코드(2205)를 판독한다. 클라이언트 유닛은 데이터 필드(2206)의 정보를 사용하여 커맨드를 수행한다. 일부 커맨드의 경우, 명시적인 커맨드 크기(2208)는 커맨드의 크기를 특정할 것으로 예상된다. 커맨드 파서는 커맨드 연산 코드에 근거하여 커맨드 중 적어도 일부 커맨드의 크기를 자동으로 결정할 수 있다. 커맨드는 복수의 더블 워드를 통해 정렬될 수 있다다. 다른 커맨드 포맷이 또한 사용될 수 있다.
도 22b의 흐름도는 예시적인 그래픽 프로세서 커맨드 시퀀스(2210)를 도시한다. 예시적 그래픽 프로세서를 특징으로 하는 데이터 프로세싱 시스템의 소프트웨어 또는 펌웨어는 그래픽 동작의 세트를 설정, 실행 및 종료하기 위해 도시된 커맨드 시퀀스의 버전을 사용할 수 있다. 샘플 커맨드 시퀀스는 예시의 목적으로만 도시되고 설명되며, 특정 커맨드 또는 이 커맨드 시퀀스로 제한되지 않는다. 더욱이, 커맨드는 커맨드 시퀀스에서 커맨드의 배치(batch)로서 발행될 수 있으므로, 그래픽 프로세서는 커맨드의 시퀀스를 적어도 부분적으로 동시에 프로세싱할 것이다.
그래픽 프로세서 커맨드 시퀀스(2210)는 임의의 활성 그래픽 파이프라인이 파이프라인에 현재 보류중인 커맨드를 완료하게 하는 파이프라인 플러시(flush) 커맨드(2212)로 시작할 수 있다. 선택적으로, 3D 파이프라인(2222) 및 미디어 파이프라인(2224)은 동시에 동작하지 않을 수 있다. 활성 그래픽 파이프라인이 임의의 진행 중인 커맨드를 완료하도록 파이프라인 플러시가 수행된다. 파이프라인 플러시에 대한 응답으로, 그래픽 프로세서에 대한 커맨드 파서는 활성 드로잉 엔진이 진행 중인 작업을 완료하고 관련된 판독 캐시가 무효화될 때까지 커맨드 프로세싱을 일시 중지할 것이다. 선택에 따라, '더러운'이라고 표시된 렌더 캐시의 모든 데이터는 메모리로 플러시될 수 있다. 파이프라인 플러시 커맨드(2212)는 파이프라인 동기화를 위해 또는 그래픽 프로세서를 저전력 상태로 만들기 전에 사용될 수 있다.
파이프라인 선택 커맨드(2213)는 그래픽 프로세서가 파이프라인 사이에서 명시적으로 전환할 것을 커맨드 시퀀스가 요구할 때 사용될 수 있다. 파이프라인 선택 커맨드(2213)는 실행 컨텍스트가 두 파이프라인 모두에 대한 커맨드를 발행하지 않는다면 파이프라인 커맨드를 발행하기 전에 실행 컨텍스트 내에서 한 번만 필요할 수 있다. 파이프라인 플러시 커맨드(2212)는 파이프라인 선택 커맨드(2213)를 통한 파이프라인의 전환 직전에 요구될 수 있다.
파이프라인 제어 커맨드(2214)는 동작을 위한 그래픽 파이프라인을 구성할 수 있고, 3D 파이프라인(2222) 및 미디어 파이프라인(2224)을 프로그래밍하는데 사용될 수 있다. 파이프라인 제어 커맨드(2214)는 활성 파이프라인에 대한 파이프라인 상태를 구성할 수 있다. 파이프라인 제어 커맨드(2214)는 파이프라인 동기화를 위해, 그리고 커맨드의 배치를 프로세싱하기 전에 활성 파이프라인 내의 하나 이상의 캐시 메모리로부터 데이터를 삭제하는데 사용될 수 있다.
반환 버퍼 상태(2216)에 관련된 커맨드는 데이터를 기록하기 위해 각각의 파이프라인에 대한 반환 버퍼 세트를 구성하는 데 사용될 수 있다. 일부 파이프라인 동작은 프로세싱 중에 그 동작이 중간 데이터(intermediate data)를 기록하는 하나 이상의 반환 버퍼의 할당, 선택 또는 구성을 필요로 한다. 그래픽 프로세서는 또한 출력 데이터를 저장하고 교차 스레드 통신을 수행하기 위해 하나 이상의 반환 버퍼를 사용할 수 있다. 반환 버퍼 상태(2216)는 파이프라인 동작 세트에 사용하는 반환 버퍼의 크기 및 개수를 선택하는 것을 포함할 수 있다.
커맨드 시퀀스에서 나머지 커맨드는 동작을 위한 활성 파이프라인에 따라 상이하다. 파이프라인 결정(2220)에 따라, 커맨드 시퀀스는 3D 파이프라인 상태(2230)에서 시작하는 3D 파이프라인(2222) 또는 미디어 파이프라인 상태(2240)에서 시작하는 미디어 파이프라인(2224)에 맞춰진다(tailored).
3D 파이프라인 상태(2230)를 구성하는 커맨드는 정점 버퍼 상태, 정점 요소 상태, 일정한 컬러 상태, 깊이 버퍼 상태, 및 3D 프리미티브 커맨드가 프로세싱되기 전에 구성될 다른 상태 변수에 대한 3D 상태 설정 커맨드를 포함한다. 이러한 커맨드의 값은 사용중인 특정 3D API에 근거하여 적어도 부분적으로 결정된다. 3D 파이프라인 상태(2230) 커맨드는 또한 특정 파이프라인 요소가 사용되지 않을 경우 이들 요소를 선택적으로 비활성화시키거나 또는 우회할 수 있다.
3D 프리미티브(2232) 커맨드는 3D 파이프라인에 의해 프로세싱될 3D 프리미티브를 제출하는데 사용될 수 있다. 3D 프리미티브(2232) 커맨드를 통해 그래픽 프로세서로 전달되는 커맨드 및 관련 파라미터는 그래픽 파이프라인의 정점 페치 기능으로 전달된다. 정점 페치 기능은 3D 프리미티브(2232) 커맨드 데이터를 사용하여 정점 데이터 구조를 생성한다. 정점 데이터 구조는 하나 이상의 반환 버퍼에 저장된다. 3D 프리미티브(2232) 커맨드는 정점 셰이더를 통해 3D 프리미티브에 대한 정점 연산을 수행하는데 사용될 수 있다. 정점 셰이더를 프로세싱하기 위해, 3D 파이프라인(2222)은 셰이더 실행 스레드를 그래픽 프로세서 실행 유닛으로 디스패치한다.
3D 파이프라인(2222)은 실행(2234) 커맨드 또는 이벤트를 통해 트리거될 수 있다. 레지스터는 트리거 커맨드 실행을 기록할 수 있다. 실행은 커맨드 시퀀스에서 'go' 또는 'kick' 커맨드를 통해 트리거될 수 있다. 커맨드 실행은 그래픽 파이프라인을 통해 커맨드 시퀀스를 플러시하는 파이프라인 동기화 커맨드를 사용하여 트리거될 수 있다. 3D 파이프라인은 3D 프리미티브에 대한 기하 프로세싱을 수행할 것이다. 동작이 완료되면 결과로 생성된 기하학적 객체가 래스터화되고 픽셀 엔진이 결과 픽셀을 채색한다. 픽셀 셰이딩 및 픽셀 백 엔드 동작을 제어하는 추가 커맨드가 또한 이러한 동작에 포함될 수 있다.
그래픽 프로세서 커맨드 시퀀스(2210)는 미디어 동작을 수행할 때 미디어 파이프라인(2224) 경로를 따를 수 있다. 일반적으로, 미디어 파이프라인(2224)에 대한 프로그래밍의 특정 사용 및 방식은 수행될 미디어 또는 컴퓨팅 동작에 의존한다. 미디어를 디코딩하는 동안 특정 미디어 디코딩 동작이 미디어 파이프라인으로 오프로딩될 수 있다. 미디어 파이프라인은 또한 우회될 수 있고 미디어 디코딩은 하나 이상의 범용 프로세싱 코어에 의해 제공되는 리소스를 사용하여 전체적으로 또는 부분적으로 수행될 수 있다. 미디어 파이프라인은 또한 범용 그래픽 프로세서 유닛(GPGPU) 동작을 위한 요소를 포함할 수 있는데, 여기서 그래픽 프로세서는 그래픽 프리미티브의 렌더링에 명시적으로 관련되지 않은 계산 셰이더 프로그램을 사용하여 SIMD 벡터 연산을 수행하는데 사용된다.
미디어 파이프라인(2224)은 3D 파이프라인(2222)과 유사한 방식으로 구성될 수 있다. 미디어 파이프라인 상태(2240)를 구성하는 커맨드 세트는 미디어 객체 커맨드(2242) 이전에 커맨드 큐(queue)에 디스패치 또는 배치된다. 미디어 파이프라인 상태(2240)에 대한 커맨드는 미디어 객체를 프로세싱하는데 사용될 미디어 파이프라인 요소를 구성하는 데이터를 포함할 수 있다. 이는 인코딩 또는 디코딩 포맷과 같은, 미디어 파이프라인 내에서 비디오 디코딩 및 비디오 인코딩 로직을 구성하는 데이터를 포함한다. 미디어 파이프라인 상태(2240)에 대한 커맨드는 또한 상태 설정의 배치를 포함하는 "간접" 상태 요소에 대한 하나 이상의 포인터의 사용을 지원할 수 있다.
미디어 객체 커맨드(2242)는 미디어 파이프라인에 의한 프로세싱을 위해 미디어 객체에 대한 포인터를 제공할 수 있다. 미디어 객체는 프로세싱될 비디오 데이터를 포함하는 메모리 버퍼를 포함한다. 선택적으로, 미디어 객체 커맨드(2242)를 발행하기 전에 모든 미디어 파이프라인 상태는 유효해야 한다. 일단 파이프라인 상태가 구성되고 미디어 객체 커맨드(2242)가 큐잉되면, 미디어 파이프라인(2224)은 실행 커맨드(2244) 또는 동등한 실행 이벤트(예를 들어, 레지스터 기록)를 통해 트리거된다. 이후 미디어 파이프라인(2224)으로부터의 출력은 3D 파이프라인(2222) 또는 미디어 파이프라인(2224)에 의해 제공되는 동작에 의해 사후 프로세싱될 수 있다. GPGPU 동작은 미디어 동작과 유사한 방식으로 구성되고 실행될 수 있다.
그래픽 소프트웨어 아키텍처
도 23은 데이터 프로세싱 시스템(2300)에 대한 예시적인 그래픽 소프트웨어 아키텍처를 도시한다. 이런 소프트웨어 아키텍처는 3D 그래픽 애플리케이션(2310), 운영 시스템(2320) 및 적어도 하나의 프로세서(2330)를 포함할 수 있다. 프로세서(2330)는 그래픽 프로세서(2332) 및 하나 이상의 범용 프로세서 코어(들)(2334)를 포함할 수 있다. 프로세서(2330)는 프로세서(1402) 또는 본 명세서에 설명된 프로세서 중 임의의 다른 프로세서의 변형일 수 있다. 프로세서(2330)는 프로세서(1402) 또는 본 명세서에 설명된 임의의 다른 프로세서를 대신하여 사용될 수 있다. 따라서, 프로세서(1402) 또는 본 명세서에 설명된 임의의 다른 프로세서와 조합된 임의의 특징의 개시는 또한 그래픽 프로세서(2330)와의 대응하는 조합을 개시하지만, 이에 제한되지는 않는다. 또한, 본원의 임의의 다른 도면의 요소와 동일하거나 유사한 명칭을 갖는 도 23의 요소는 다른 도면에서와 동일한 요소를 설명하고, 그와 유사한 방식으로 동작하거나 기능할 수 있고, 본 명세서의 다른 곳에서 설명된 것과 동일한 컴포넌트를 포함할 수 있으며 다른 엔티티에 링크될 수 있지만, 이에 제한되지는 않는다. 그래픽 애플리케이션(2310) 및 운영 시스템(2320)은 각각 데이터 프로세싱 시스템의 시스템 메모리(2350)에서 실행될 수 있다.
3D 그래픽 애플리케이션(2310)은 셰이더 명령어(2312)를 포함하는 하나 이상의 셰이더 프로그램을 포함할 수 있다. 셰이더 언어 명령어는 Direct3D의 HLSL(High-Level Shader Language), GLSL(OpenGL Shader Language) 등과 같은 고급 셰이더 언어로 작성될 수 있다. 애플리케이션은 또한 범용 프로세서 코어(2334)에 의해 실행하기에 적합한 기계어로 작성된 실행 가능한 명령어(2314)를 포함할 수 있다. 애플리케이션은 또한 정점 데이터에 의해 정의된 그래픽 객체(2316)를 포함할 수 있다.
운영 시스템(2320)은 Microsoft Corporation의 Microsoft®Windows® 운영 시스템, 사유 UNIX 계열 운영 시스템 또는 Linux 커널의 변형을 사용하는 오픈 소스 UNIX 계열 운영 시스템일 수 있다. 운영 시스템(2320)은 Direct3D API, OpenGL API 또는 Vulkan API와 같은 그래픽 API(2322)를 지원할 수 있다. Direct3D API가 사용 중일 때, 운영 시스템(2320)은 프론트-엔드 셰이더 컴파일러(2324)를 사용하여 HLSL로 작성된 모든 셰이더 명령어(2312)를 하위 레벨 셰이더 언어로 컴파일한다. 컴파일은 JIT(Just-In-Time) 컴파일이거나 또는 애플리케이션은 셰이더 사전 컴파일을 수행할 수 있다. 고급 셰이더는 3D 그래픽 애플리케이션(2310)을 컴파일하는 동안 저급 셰이더로 컴파일될 수 있다. 셰이더 명령어(2312)는 Vulkan API에서 사용되는 SPIR(Standard Portable Intermediate Representation)의 버전과 같은 중간 형태로 제공될 수 있다.
사용자 모드 그래픽 드라이버(2326)는 셰이더 명령어(2312)를 하드웨어 특정 표현으로 변환하는 백-엔드 셰이더 컴파일러(2327)를 포함할 수 있다. OpenGL API가 사용중일 때, GLSL 고급 언어로 작성된 셰이더 명령어(2312)는 컴파일을 위해 사용자 모드 그래픽 드라이버(2326)로 전달된다. 사용자 모드 그래픽 드라이버(2326)는 커널 모드 그래픽 드라이버(2329)와 통신하는 운영 시스템 커널 모드 기능(2328)을 사용할 수 있다. 커널 모드 그래픽 드라이버(2329)는 커맨드 및 명령어를 디스패치하기 위해 그래픽 프로세서(2332)와 통신할 수 있다.
IP 코어 구현
하나 이상의 측면은, 프로세서와 같은 집적 회로 내의 로직을 나타내고 및/또는 정의하는, 머신 판독가능 매체 상에 저장된 전형적인 코드에 의해 구현될 수 있다. 예를 들어, 머신 판독가능 매체는 프로세서 내의 다양한 로직을 표현하는 명령어를 포함할 수 있다. 머신에 의해 판독될 때, 명령어는 머신으로 하여금 본 명세서에 설명된 기술을 수행하는 로직을 제조하게할 수 있다. "IP 코어"로 알려진 이러한 표현은 집적 회로의 구조를 설명하는 하드웨어 모델로서 유형의 머신 판독가능 매체 상에 저장될 수 있는 집적 회로에 대한 로직의 재사용 가능한 유닛이다. 하드웨어 모델은 다양한 고객 또는 제작 시설에 공급될 수 있으며, 이들은 집적 회로를 제조하는 제조 기계에 하드웨어 모델을 로딩한다. 집적 회로는 본 명세서에 설명된 임의의 실시예와 관련하여 설명된 동작을 수행하도록 제조될 수 있다.
도 24a는 일 실시예에 따른 동작을 수행하기 위해 집적 회로를 제작하는데 사용될 수 있는 IP 코어 개발 시스템(2400)을 도시하는 블록도이다. IP 코어 개발 시스템(2400)은 더 큰 설계에 통합될 수 있거나 또는 전체 집적 회로(예를 들어, SOC 집적 회로)를 구성하는데 사용될 수 있는 모듈식의 재사용 가능한 설계를 생성하는데 사용될 수 있다. 설계 설비(2430)는 고급 프로그래밍 언어(예를 들어, C/C ++)로 IP 코어 설계의 소프트웨어 시뮬레이션(2410)을 생성할 수 있다. 소프트웨어 시뮬레이션(2410)은 시뮬레이션 모델(2412)을 사용하여 IP 코어의 행동을 설계, 테스트 및 검증하는데 사용될 수 있다. 시뮬레이션 모델(2412)은 기능, 행동 및/또는 타이밍 시뮬레이션을 포함할 수 있다. 이후 레지스터 전송 레벨(RTL) 설계(2415)는 시뮬레이션 모델(2412)로부터 생성 또는 합성될 수 있다. RTL 설계(2415)는 모델링된 디지털 신호를 사용하여 수행되는 관련 로직을 포함하는 하드웨어 레지스터들 사이의 디지털 신호의 흐름을 모델링하는 집적 회로의 동작의 추상화를 가리킨다. RTL 설계(2415)에 더하여, 로직 레벨 또는 트랜지스터 레벨에서의 저급 설계가 또한 생성, 설계 또는 합성될 수 있다. 따라서 초기 설계 및 시뮬레이션의 특정 세부 사항은 다를 수 있다.
RTL 설계(2415) 또는 등가물은 설계 설비에 의해 하드웨어 모델(2420)로 추가적으로 합성될 수 있으며, 이 하드웨어 모델(2420)은 하드웨어 기술 언어(HDL)로 작성되거나, 또는 물리적 설계 데이터의 다른 표현일 수 있다. IP 코어 설계를 검증하기 위해 HDL을 추가로 시뮬레이션하거나 또는 테스트할 수 있다. IP 코어 설계는 제 3 자 제조 설비(2465)로 전달하기 위해 비휘발성 메모리(2440)(예를 들어, 하드 디스크, 플래시 메모리 또는 임의의 비휘발성 저장 매체)를 사용하여 저장될 수 있다. 이와 달리, IP 코어 설계는 유선 접속(2450) 또는 무선 접속(2460)을 통해(예를 들어, 인터넷을 통해) 전송될 수 있다. 이후 제조 설비(2465)는 IP 코어 설계에 적어도 부분적으로 기초한 집적 회로를 제조할 수 있다. 제조된 집적 회로는 본 명세서에 설명된 적어도 하나의 실시예에 따른 동작을 수행하도록 구성될 수 있다.
도 24b는 집적 회로 패키지 어셈블리(2470)의 측단면도를 도시한다. 집적 회로 패키지 어셈블리(2470)는 본 명세서에 설명된 것과 같은 하나 이상의 프로세서 또는 가속기 장치의 구현예를 도시한다. 패키지 어셈블리(2470)는 기판(2480)에 접속된 하드웨어 로직(2472, 2474)의 복수의 유닛을 포함한다. 로직(2472, 2474)은 적어도 부분적으로 구성 가능한 로직 또는 고정 기능 로직 하드웨어로 구현될 수 있으며, 본 명세서에 설명된 프로세서 코어(들), 그래픽 프로세서(들) 또는 다른 가속기 장치 중 어느 것의 하나 이상의 부분을 포함할 수 있다. 로직(2472, 2474)의 각각의 유닛은 반도체 다이 내에 구현될 수 있고 상호 접속 구조(2473)를 통해 기판(2480)에 연결될 수 있다. 상호 접속 구조(2473)는 로직(2472, 2474)과 기판(2480) 사이에서 전기적 신호를 라우팅하도록 구성될 수 있으며, 범프 또는 기둥과 같은 상호 접속부를 포함하지만 이에 제한되는 것은 아니다. 상호 접속 구조(2473)는, 예를 들어, 로직(2472, 2474)의 동작과 관련된 입력/출력(I/O) 신호 및/또는 전력 또는 접지 신호와 같은 전기 신호를 라우팅하도록 구성될 수 있다. 기판(2480)은 에폭시계 라미네이트 기판일 수 있다. 기판(2480)은 또한 다른 적합한 타입의 기판을 포함할 수 있다. 패키지 어셈블리(2470)는 패키지 상호 접속부(2483)를 통해 다른 전기 장치에 접속될 수 있다. 패키지 상호 접속부(2483)는 기판(2480)의 표면에 연결되어 전기 신호를 마더보드, 다른 칩셋 또는 멀티-칩 모듈과 같은 다른 전기 장치로 라우팅할 수 있다.
로직(2472, 2474)의 유닛은 로직(2472, 2474) 사이에 전기 신호를 라우팅하도록 구성된 브리지(2482)와 전기적으로 연결될 수 있다. 브리지(2482)는 전기 신호에 대한 경로를 제공하는 밀집된 상호 접속 구조일 수 있다. 브리지(2482)는 유리 또는 적절한 반도체 재료로 구성된 브리지 기판을 포함할 수 있다. 전기적 라우팅 특징부가 로직(2472, 2474) 사이에 칩과 칩의 접속을 제공하기 위해 브리지 기판 상에 형성될 수 있다.
로직(2472, 2474)의 2개의 유닛 및 브리지(2482)가 도시되어 있지만, 본 명세서에 설명된 실시예는 하나 이상의 다이 위에 더 많거나 더 적은 로직 유닛을 포함할 수 있다. 하나 이상의 다이는 로직이 단일 다이 위에 포함될 때 브리지(2482)가 배제될 수 있으므로 0개 이상의 브리지에 의해 접속될 수 있다. 이와 달리, 복수의 다이 또는 로직의 유닛은 하나 이상의 브리지에 의해 접속될 수 있다. 또한 복수의 로직 유닛, 다이 및 브리지는, 3 차원 구성을 포함한 다른 가능한 구성으로 함께 접속될 수 있다.
도 24c는 기판(2480)(예를 들어, 베이스 다이)에 접속된 하드웨어 로직 칩렛의 복수의 유닛을 포함하는 패키지 어셈블리(2490)를 도시한다. 본 명세서에 설명된 그래픽 프로세싱 유닛, 병렬 프로세서 및/또는 컴퓨팅 가속기는 개별적으로 제작된 다양한 실리콘 칩렛으로 구성될 수 있다. 이러한 맥락에서, 칩렛은 다른 칩렛과 함께 더 큰 패키지로 조립될 수 있는 로직의 별개의 유닛을 포함하는 적어도 부분적으로 패키지된 집적 회로이다. 다른 IP 코어 로직을 갖는 칩렛의 다양한 세트가 단일 장치에 조립될 수 있다. 또한 칩렛은 활성 인터포저 기술을 사용하여 베이스 다이 또는 베이스 칩렛에 통합될 수 있다. 본 명세서에 설명된 개념은 GPU 내에서 IP의 상이한 형태 사이의 상호 접속 및 통신을 가능하게 한다. IP 코어는 서로 다른 프로세스 기술을 사용하여 제작될 수 있으며 제작 과정에서 구성될 수 있으므로, 이는, 특히 여러 가지 특징적 IP를 구비한 대형 SoC에서 복수의 IP를 동일한 제작 프로세스로 수렴시키는 복잡성을 회피할 수 있다. 복수의 프로세스 기술을 사용할 수 있으므로, 출시 시간을 단축시키고 또한 복수의 제품 SKU를 생성하는 비용 효율적인 방법이 제공된다. 또한, 분리된 IP는 독립적으로 파워를 켜고 끌 수 있고, 주어진 워크로드 상에서 사용되지 않는 컴포넌트의 전원을 차단할 수 있어 전체 전력 소비를 줄일 수 있다.
다양한 실시예에서, 패키지 어셈블리(2490)는 패브릭(2485) 또는 하나 이상의 브리지(2487)에 의해 상호 접속되는 더 적거나 더 많은 수의 컴포넌트 및 칩렛을 포함할 수 있다. 패키지 어셈블리(2490) 내의 칩렛은, 패키지 상호 접속부(2483)에 대한 전기적 접속을 포함하는 기판(2480)과 칩렛을 연결하기 위해 스루 실리콘 비아(TSV)를 포함하는 실리콘 인터포저 상에 다수의 다이가 나란히 적층되는 칩-온-웨이퍼-온 기판 스택을 사용하는 2.5D 배열을 가질 수 있다.
일 실시예에서, 실리콘 인터포저는 TSV에 추가하여 내장형 로직을 포함하는 활성 인터포저(2489)이다. 이러한 실시예에서, 패키지 어셈블리(2490) 내의 칩렛은 활성 인터포저(2489)의 상부에 3D 면 대 면 다이 적층을 사용하여 배열된다. 활성 인터포저(2489)는 상호접속 패브릭(2485) 및 실리콘 브리지(2487)에 추가하여 I/O(2491)용 하드웨어 로직, 캐시 메모리(2492) 및 다른 하드웨어 로직을 포함할 수 있다. 패브릭(2485)은 활성 인터포저(2489) 내에서 다양한 로직 칩렛(2472, 2474) 및 로직(2491, 2493) 사이의 통신을 가능하게 한다. 패브릭(2485)은 패키지 어셈블리의 컴포넌트들 사이에서 데이터 패킷을 스위칭하는 NoC 상호접속부 또는 다른 형태의 패킷 스위칭형 패브릭일 수 있다. 복잡한 어셈블리의 경우, 패브릭(2485)은 패키지 어셈블리(2490)의 다양한 하드웨어 로직 간의 통신을 가능하게하는 전용 칩 렛일 수 있다.
활성 인터포저(2489) 내의 브리지 구조(2487)는, 예를 들어, 로직 또는 I/O 칩렛(2474)과 메모리 칩렛(2475) 사이의 점 대 점 상호 접속을 용이하게 하기 위해 사용될 수 있다. 일부 구현예에서, 브리지 구조(2487)는 또한 기판(2480) 내에 매립될 수 있다.
하드웨어 로직 칩렛은 특수 목적 하드웨어 로직 칩렛(2472), 로직 또는 I/O 칩렛(2474) 및/또는 메모리 칩렛(2475)을 포함할 수 있다. 하드웨어 로직 칩렛(2472) 및 로직 또는 I/O 칩렛(2474)은 적어도 부분적으로 구성 가능한 로직 또는 고정 기능 로직 하드웨어로 구현될 수 있으며, 프로세서 코어(들), 그래픽 프로세서(들), 병렬 프로세서 또는 본 명세서에 설명된 다른 가속기 장치 중 임의의 것의 하나 이상의 부분을 포함할 수 있다. 메모리 칩렛(2475)은 DRAM(예를 들어, GDDR, HBM) 메모리 또는 캐시(SRAM) 메모리일 수 있다. 활성 인터포저(2489)(또는 기판(2480)) 내의 캐시 메모리(2492)는 패키지 어셈블리(2490)를 위한 전역 캐시(global cache)로서 기능하거나, 분배된 전역 캐시의 일부로서 기능하거나, 패브릭(2485)을 위한 전용 캐시로서 기능할 수 있다.
각각의 칩렛은 개별 반도체 다이로서 제조될 수 있고, 기판(2480) 내에 매립되는 베이스 다이와 연결되거나 기판(2480)과 연결될 수 있다. 기판(2480)과의 연결은 상호 접속 구조(2473)를 통해 수행될 수 있다. 상호 접속 구조(2473)는 다양한 칩렛과 기판(2480) 내의 로직 사이에서 전기 신호를 라우팅하도록 구성될 수 있다. 상호 접속 구조(2473)는 범프 또는 필러(pillar)와 같은 상호 접속부를 포함할 수 있지만, 이에 제한되는 것은 아니다. 일부 실시예에서, 상호 접속 구조(2473)는, 예를 들어, 로직, 입력/출력(I/O) 및 메모리 칩렛의 동작과 관련된 I/O 신호 및/또는 전력 또는 접지 신호와 같은 전기 신호를 라우팅하도록 구성될 수 있다. 일 실시예에서는, 추가 상호접속 구조가 활성 인터포저(2489)를 기판(2480)에 연결한다.
기판(2480)은 에폭시계 라미네이트 기판일 수 있다. 그러나, 이에 제한되지 않으며, 기판(2480)은 또한 다른 적합한 타입의 기판을 포함할 수 있다. 패키지 어셈블리(2490)는 패키지 상호 접속부(2483)를 통해 다른 전기 장치에 접속될 수 있다. 패키지 상호 접속부(2483)는 기판(2480)의 표면에 연결되어 전기 신호를 마더보드, 다른 칩셋 또는 멀티-칩 모듈과 같은 다른 전기 장치로 라우팅할 수 있다.
로직 또는 I/O 칩렛(2474) 및 메모리 칩렛(2475)은 로직 또는 I/O 칩렛(2474)과 메모리 칩렛(2475) 사이에서 전기 신호를 라우팅하도록 구성된 브리지(2487)를 통해 전기적으로 연결될 수 있다. 브리지(2487)는 전기 신호에 대한 경로를 제공하는 밀집된 상호 접속 구조일 수 있다. 브리지(2487)는 유리 또는 적절한 반도체 재료로 구성된 브리지 기판을 포함할 수 있다. 전기적 라우팅 특징부가 브리지 기판 상에 형성되어 로직 또는 I/O 칩렛(2474)과 메모리 칩렛(2475) 사이에 칩과 칩의 접속을 제공할 수 있다. 브리지(2487)는 또한 실리콘 브리지 또는 상호 접속 브리지로 지칭될 수 있다. 예를 들어, 브리지(2487)는 EMIB(Embedded Multi-die Interconnect Bridge)이다. 대안적으로, 브리지(2487)는 단순히 하나의 칩렛에서 다른 칩렛으로의 직접 접속일 수 있다.
도 24d는 일 실시예에 따른 교환 가능한 칩렛(2495)을 포함하는 패키지 어셈블리(2494)를 도시한다. 교환 가능한 칩렛(2495)은 하나 이상의 베이스 칩렛(2496, 2498) 상의 표준화된 슬롯에 조립될 수 있다. 베이스 칩렛(2496, 2498)은 본 명세서에 설명된 다른 브리지 상호 접속부와 유사할 수 있는 브리지 상호 접속부(2497)를 통해 연결될 수 있으며, 예를 들어, EMIB일 수 있다. 메모리 칩렛은 또한 브리지 상호 접속부를 통해 로직 또는 I/O 칩렛에 연결될 수 있다. I/O 및 로직 칩렛은 상호 접속 패브릭을 통해 통신할 수 있다. 베이스 칩렛은 각각 로직 또는 I/O 또는 메모리/캐시 중 하나에 대해 표준화된 포맷으로 하나 이상의 슬롯을 지원할 수 있다.
SRAM 및 전력 전달 회로는 하나 이상의 베이스 칩렛(2496, 2498)으로 제조될 수 있으며, 이 베이스 칩렛(2496, 2498)은 베이스 칩렛의 상부에 적층된 교환 가능한 칩렛(2495)과는 상이한 프로세스 기술을 사용하여 제조될 수 있다. 예를 들어, 베이스 칩렛(2496, 2498)은 더 큰 공정 기술을 사용하여 제조될 수 있는 반면, 교환 가능한 칩렛은 더 작은 공정 기술을 사용하여 제조될 수 있다. 하나 이상의 교환 가능한 칩렛(2495)은 메모리(예를 들어, DRAM) 칩렛일 수 있다. 전력 및/또는 패키지 조립체(2494)를 사용하는 제품에 대한 목표 성능에 따라 상이한 메모리 밀도가 패키지 조립체(2494)에 대해 선택될 수 있다. 또한, 상이한 개수의 기능 유닛의 타입을 갖는 로직 칩렛은 전력 및/또는 제품에 대한 목표 성능에 따라 조립시에 선택될 수 있다. 또한, 서로 다른 타입의 IP 로직 코어를 포함하는 칩렛을 교환 가능한 칩렛 슬롯에 삽입하여, 상이한 기술의 IP 블록을 혼합하고 매칭시킬 수 있는 하이브리드 프로세서 설계가 가능하다.
예시적인 시스템 온 칩 집적 회로
도 25 내지 도 26b는 하나 이상의 IP 코어를 사용하여 제조될 수 있는 예시적인 집적 회로 및 관련 그래픽 프로세서를 도시한다. 도시된 것에 더하여, 추가 그래픽 프로세서/코어, 주변 장치 인터페이스 제어기, 또는 범용 프로세서 코어를 포함하는 다른 로직 및 회로가 포함될 수 있다. 본원의 임의의 다른 도면의 요소와 동일하거나 유사한 명칭을 갖는 도 25 내지 도 26b의 요소는 다른 도면에서와 동일한 요소를 설명하고, 그와 유사한 방식으로 동작하거나 기능할 수 있고, 본 명세서의 다른 곳에서 설명된 것과 동일한 컴포넌트를 포함할 수 있으며 다른 엔티티에 링크될 수 있지만, 이에 제한되지는 않는다.
도 25는 하나 이상의 IP 코어를 사용하여 제조될 수 있는 예시적인 시스템 온 칩 집적 회로(2500)을 도시하는 블록도이다. 예시적인 집적 회로(2500)는 하나 이상의 애플리케이션 프로세서(들)(2505)(예를 들어, CPU)와 적어도 하나의 그래픽 프로세서(2510)를 포함하는데, 그래픽 프로세서(2510)는 그래픽 프로세서(1408, 1508, 2510) 또는 본 명세서에 설명된 임의의 그래픽 프로세서의 변형일 수 있고, 설명된 임의의 그래픽 프로세서를 대신하여 사용될 수 있다. 따라서, 본 명세서에서 그래픽 프로세서와 조합된 임의의 특징의 개시는 또한 그래픽 프로세서(2510)와의 대응하는 조합을 개시하지만, 이에 제한되지는 않는다. 집적 회로(2500)는 이미지 프로세서(2515) 및/또는 비디오 프로세서(2520)를 추가로 포함할 수 있으며, 이들 중 임의의 것은 동일하거나 또는 복수의 다른 설계 시설로부터 제조된 모듈식 IP 코어일 수 있다. 집적 회로(2500)는 USB 제어기(2525), UART 제어기(2530), SPI/SDIO 제어기(2535) 및 I2S/I2C 제어기(2540)를 포함하는 주변 장치 또는 버스 로직을 포함할 수 있다. 또한, 집적 회로는 하나 이상의 HDMI(high-definition multimedia interface) 제어기(2550) 및 MIPI(mobile industry processor interface) 디스플레이 인터페이스(2555)에 연결된 디스플레이 장치(2545)를 포함할 수 있다. 저장 장치는 플래시 메모리 및 플래시 메모리 제어기를 포함하는 플래시 메모리 서브시스템(2560)에 의해 제공될 수 있다. 메모리 인터페이스는 SDRAM 또는 SRAM 메모리 장치에 액세스하기 위한 메모리 제어기(2565)를 통해 제공될 수 있다. 일부 집적 회로는 내장형 보안 엔진(2570)을 추가로 포함한다.
도 26a 및 도 26b는 본 명세서에 설명된 실시예에 따른, SoC 내에서 사용하기 위한 예시적인 그래픽 프로세서를 나타내는 블록도이다. 그래픽 프로세서는 그래픽 프로세서(1408, 1508, 2510) 또는 본 명세서에 설명된 임의의 다른 그래픽 프로세서의 변형일 수 있다. 그래픽 프로세서는 그래픽 프로세서(1408, 1508, 2510) 또는 본 명세서에 설명된 임의의 다른 그래픽 프로세서를 대신하여 사용될 수 있다. 따라서, 본 명세서에서 그래픽 프로세서(1408, 1508, 2510) 또는 본 명세서에 설명된 임의의 다른 그래픽 프로세서와 조합된 임의의 특징의 개시는 또한 도 26a 및 도 26b의 그래픽 프로세서와의 대응하는 조합을 개시하지만, 이에 제한되지는 않는다. 도 26a는 일 실시예에 따른 하나 이상의 IP 코어를 사용하여 제조될 수 있는 시스템 온 칩 집적 회로의 예시적인 그래픽 프로세서(2610)를 도시한다. 도 26b는 일 실시예에 따른 하나 이상의 IP 코어를 사용하여 제조될 수 있는 시스템 온 칩 집적 회로의 추가 예시적인 그래픽 프로세서(2640)를 도시한다. 도 26a의 그래픽 프로세서(2610)는 저전력 그래픽 프로세서 코어의 예이다. 도 26b의 그래픽 프로세서(2640)는 고성능 그래픽 프로세서 코어의 예이다. 예를 들어, 그래픽 프로세서(2610) 및 그래픽 프로세서(2640)의 각각은 이 단락의 서두에서 언급한 바와 같이 도 25의 그래픽 프로세서(2510)의 변형일 수 있다.
도 26a에 도시된 것과 같이, 그래픽 프로세서(2610)는 정점 프로세서(2605) 및 하나 이상의 프래그먼트 프로세서(들)(2615A-2615N)(예를 들어, 2615A, 2615B, 2615C, 2615D, 내지 2615N-1 및 2615N)를 포함한다. 그래픽 프로세서(2610)는 별개의 로직을 통해 상이한 셰이더 프로그램을 실행할 수 있으므로, 하나 이상의 프래그먼트 프로세서(들)(2615A-2615N)가 프래그먼트 또는 픽셀 셰이더 프로그램에 대한 프래그먼트(예를 들어, 픽셀) 셰이딩 동작을 실행하는 동안, 정점 프로세서(2605)는 정점 셰이더 프로그램에 대한 동작을 실행하도록 최적화된다. 정점 프로세서(2605)는 3D 그래픽 파이프라인의 정점 프로세싱 단계를 수행하고 프리미티브 및 정점 데이터를 생성한다. 프래그먼트 프로세서(들)(2615A-2615N)는 정점 프로세서(2605)에 의해 생성된 프리미티브 및 정점 데이터를 사용하여 디스플레이 장치 상에 디스플레이되는 프레임 버퍼를 생성한다. 프래그먼트 프로세서(들)(2615A-2615N)는, Direct 3D API에서 제공되는 픽셀 셰이더 프로그램과 유사한 동작을 수행하는데 사용될 수 있는 OpenGL API에서 제공되는 프래그먼트 셰이더 프로그램을 실행하도록 최적화될 수 있다.
그래픽 프로세서(2610)는 하나 이상의 메모리 관리 유닛(MMU)(2620A, 2620B), 캐시(들)(2625A, 2625B) 및 회로 상호 접속부(들)(2630A, 2630B)를 추가로 포함한다. 하나 이상의 MMU(들)(2620A, 2620B)는, 하나 이상의 캐시(들)(2625A, 2625B)에 저장된 정점 또는 이미지/텍스처 데이터에 더하여 메모리에 저장된 정점 또는 이미지/텍스처를 참조할 수 있는, 정점 프로세서(2605) 및/또는 프래그먼트 프로세서(들)(2615A-2615N)를 포함하는 그래픽 프로세서(2610)에 대해 가상 주소를 물리 주소로 매핑한다. 하나 이상의 MMU(들)(2620A, 2620B)는, 도 25의 하나 이상의 애플리케이션 프로세서(2505), 이미지 프로세서(2515) 및/또는 비디오 프로세서(2520)와 관련된 하나 이상의 MMU를 포함하는 시스템 내의 다른 MMU와 동기화되어, 각각의 프로세서(2505-2520)가 공유 또는 통합 가상 메모리 시스템에 참여할 수 있다. 그래픽 프로세서(2610)의 컴포넌트는 본 명세서에 설명된 다른 그래픽 프로세서의 컴포넌트에 대응할 수 있다. 하나 이상의 MMU(들)(2620a-2620b)는 도 2c의 MMU(245)에 대응할 수 있다. 정점 프로세서(2605) 및 프래그먼트 프로세서(2615A-2615N)는 그래픽 멀티프로세서(234)에 대응할 수 있다. 하나 이상의 회로 상호 접속부(들)(2630A, 2630B)는, 그래픽 프로세서(2610)가 실시예에 따라 SoC의 내부 버스를 통해 또는 직접 접속을 통해 SoC 내의 다른 IP 코어와 인터페이스할 수 있도록 한다. 하나 이상의 상호 접속부(들)(2630A, 2630B)는 도 2cdml 데이터 크로스바(240)에 대응할 수 있다. 추가 대응관계는 그래픽 프로세서(2610)의 아날로그 컴포넌트들과 본 명세서에 설명된 다양한 그래픽 프로세서 아키텍처들 사이에서 발견될 수 있다.
도 26b에 도시된 것과 같이, 그래픽 프로세서(2640)는 도 26a의 그래픽 프로세서(2610)의 하나 이상의 MMU(들)(2620A, 2620B), 캐시(들)(2625A, 2625B), 및 회로 상호 접속부(들)(2630A, 2630B)를 포함한다. 그래픽 프로세서(2640)는 하나 이상의 셰이더 코어(들)(2655A-2655N)(예를 들어, 2655A, 2655B, 2655C, 2655D, 2655E, 2655F 내지 2655N-1 및 2655N)를 포함하며, 이는, 단일 코어 또는 임의의 타입의 코어가 정점 셰이더, 프래그먼트 셰이더 및/또는 컴퓨팅 셰이더를 구현하는 셰이더 프로그램 코드를 포함하는 프로그래밍 가능한 셰이더 코드의 모든 타입을 실행할 수 있는 통합 셰이더 코어 아키텍처를 제공한다. 존재하는 셰이더 코어의 정확한 개수는 실시예 및 구현예에 따라 달라질 수 있다. 또한, 그래픽 프로세서(2640)는 스레드 디스패처로서 동작하여 실행 스레드를 하나 이상의 셰이더 코어(2655A-2655N)에 디스패치하는 코어 간(inter-core) 태스크 관리자(2645)와, 타일 기반 렌더링을 위한 타일링 동작을 가속화하는 타일링 유닛(2658)을 포함하고, 이 타일링 유닛에서는 장면에 대한 렌더링 작업이 이미지 공간에서 세분화되어, 예를 들어, 장면 내의 로컬 공간 일관성을 이용하거나 또는 내부 캐시의 사용을 최적화한다. 셰이더 코어(2655A-2655N)는, 예를 들어, 도 2d에서와 같은 그래픽 멀티프로세서(234), 도 3a 및 도 3b 각각의 그래픽 멀티프로세서(325, 350), 또는 도 3c의 멀티-코어 그룹(365A)에 대응할 수 있다.
GPU 프로세서 및 그래픽 프로세서는 오류 감지 및 수정이 필요할 수 있다. 큰 캐시는 오류 감지 및 수정의 이점을 누릴 수 있다. 컴퓨팅 가속기는 안정성 문제가 있을 수 있다. 메모리 요소를 구비한 가속기는 오류의 원인이 될 수 있다. 작은 설계 노드(예를 들어, 10nm, 7nm, 5nm) 상의 GPU가 커짐에 따라서 일시적인 오류가 발생하더라도 시스템을 유지하는 것이 중요하다.
오류 검출 및 수정을 행하는 이전의 방식은 데이터 체크를 포함한다. 패리티 비트 또는 체크 비트는, 문자열 내의 1-비트의 수가 짝수 또는 홀수인지 확인하기 위해서 이진 코드 문자열에 추가되는 비트이다. 패리티 비트는 가장 간단한 형태의 오류 검출 코드로서 사용된다.
서버 제품은 일반적으로 높은 RAS(신뢰성, 가용성, 서비스 가능성) 요건을 갖고 있다. 일 실시예에서, 서버 가속기 장치는 UCE(uncorrectable reported error) 및 SDC(silent data corruption)에 대한 설계 파라미터를 포함하는 오류 검출 및 수정 기능을 갖는다.
오류 검출 및 수정 기능은 오류로 인한 고장을 최소화한다. 수정 불가능한 오류(UCE)가 꼭 프로그램 고장을 의미하는 것은 아니다. 예를 들어, 데이터 쓰기에서의 오류는 그 데이터가 사용될 때까지는 문제를 일으키지 않는다. 데이터가 다시 쓰기되기 전에 사용되지 않는다면 그 오류가 덮어진다. 유사하게, 판독-전용 캐시에 라인 UCE가 있는 경우에는, 이 라인은 메모리로부터 다시 로딩될 수 있다.
오류 검출 및 수정 기능은 사용 가능성을 최대화한다. 서버 장치 리셋은 서버 장치와 연관된 모든 가상 머신(VM)을 중단시키는 것이다. 가능한 한, 오류가 발생한 컨텍스트로 그 오류를 격리시키고 해당 컨텍스트만 종료시킨다. 특정한 치명적 오류를 제외하면, 서버 장치의 하드웨어가 작동 중지되어서는 안 되고, 다른 컨텍스트는 계속 진행시켜야 한다.
오류 보고 아키텍처는 예를 들어 고장난 프로세싱 리소스(예를 들어, 프로세싱 유닛, 처리 엔진, 실행 리소스, 실행 유닛(EU)(508A-N, 509A-N, 600, 852A-B), 스트림 프로세서, 스트리밍 멀티 프로세서(SM), 그래픽 멀티 프로세서(325, 350), 멀티 코어 그룹(365A-N)에 정렬된 그래픽 프로세싱 리소스, 멀티 코어 그룹(1965A~1965N), 컴퓨팅 유닛, 그래픽스 코어 넥스트의 컴퓨팅 유닛, 로직 유닛, 기능 유닛, FPU 등) 또는 캐시 뱅크를 비활성화시킴으로써, "현장(in-field)" 복구를 지원하는 것이어야 한다.
일 실시예에서, 캐시 또는 공유 로컬 메모리와 같은 메모리는 오류 체크 기능을 가질 것이다. 일례로, 메모리 또는 저장 공간(예를 들어, L1 캐시, L2 캐시, 공유 로컬 메모리, 공유 메모리(270), 캐시 메모리(272), 레지스터)은 오류를 검출/수정하기 위해 다음과 같은 메커니즘을 가질 것이다.
도 27은 일 실시예에 따른 그래픽 프로세싱 유닛, 그래픽 멀티 프로세서 또는 그래픽 프로세서의 캐시 메모리 또는 공유 메모리에 대한, 이러한 오류 체크 메커니즘의 예시적인 동작 시퀀스를 갖는 방법(2700)을 도시한다. 도 2d, 3a, 3b, 3c, 15a, 15b, 21에 도시된 바와 같은 그래픽 프로세싱 유닛, 그래픽 멀티 프로세서, 또는 그래픽 프로세서의 임의의 캐시 또는 공유 메모리와 관련된 오류 검출 및 수정 로직(예를 들어, EDC 로직(271))은 일 실시예에 따라 동작을 수행한다. 캐시, 로컬 메모리 또는 공유 메모리는 그래픽 프로세싱 유닛, 그래픽 멀티 프로세서 또는 그래픽 프로세서와 함께 칩 또는 다이 상에 있다.
동작 2702에서, 이 방법은 캐시 메모리, 로컬 메모리 혹은, 그래픽 프로세싱 유닛, 그래픽 멀티 프로세서 또는 그래픽 프로세서의 공유 메모리의 태그 판독(예를 들어, 섹터 태그 판독)을 수행하는 단계를 포함한다. 캐시 메모리는 인덱스, 태그 및 데이터를 포함할 수 있다. 이 태그는 백업 저장소에 있는 데이터의 ID를 명시하며, 캐시 메모리에는 그 엔트리의 카피가 있다. 일례로, 섹터 태그는 1 비트 식별자 및 43 비트 가상 주소 태그를 포함한다. 오류 검출 및 수정 로직(예를 들어, 단일-오류-검출 코드, 패리티 비트)은 태그 판독으로 체크된다. 동작 2704에서, 이 방법은 오류 검출 및 수정 로직(예를 들어, 단일 오류 검출 코드, 패리티 비트)이 오류 상태를 나타내는지 여부를 판정한다. 예를 들어 패리티 비트가 체크될 수 있다. 오류 상태가 없다면, 동작 2705에서 메모리 동작(예를 들어, 로드 동작, 저장 동작)이 정상적인 방식으로 계속된다.
오류 검출 및 수정 로직(예를 들어, 단일 오류 검출 코드, 패리티 비트)이 오류 상태를 나타내는 경우, 이 방법은 동작 2706에서, 오류 검출 및 수정 로직(예를 들어, 단일 오류 감지 코드, 패리티 비트)과 관련된 캐시, 로컬 또는 공유 메모리의 데이터가 클린한지 여부를 판정한다. 캐시, 로컬 또는 공유 메모리에서 수정되고 메인 메모리에서도 수정되면 데이터는 클린하다. 캐시, 로컬 또는 공유 메모리에서 수정되었지만 메인 메모리에서는 수정되지 않는다면 데이터는 클린하지 않다(예를 들어, 더티).
캐시, 로컬 또는 공유 메모리의 라인에 대한 데이터가 클린하지 않은 경우, 방법은 동작 2707에서 수정 불가능 오류 상태를 보고한다. 캐시, 로컬 또는 공유 메모리의 라인에 대한 데이터가 클린한 경우, 방법은 동작 2708에서 캐시, 로컬 또는 공유 메모리의 라인을 무효화시키고 이 라인을 메인 메모리로부터 다시 페치한다. 패리티 비트는 단일 오류 검출 코드의 예이다. 패리티 비트는, 결과에서 세트 비트(즉, 값이 1인 비트)의 수가 짝수인지 또는 홀수인지 확인하기 위해 소스 비트 그룹에 추가되는 비트이다.
패리티 비트는, 출력에서 단일 또는 다른 홀수(예를 들어, 3, 5 등) 오류를 검출하는 데 사용될 수 있다. 플립된 비트(flipped bit)의 수가 짝수이면 데이터에 오류가 있더라도 패리티 비트는 정확하게 표시된다. 패리티 비트 메커니즘의 확장 및 변형은 종방향 리던던시 검사, 횡방향 리던던시 검사 및 유사한 비트-그룹화 기술이다.
도 28은 일 실시예에 따른 그래픽 프로세싱 유닛, 그래픽 멀티 프로세서, 그래픽 프로세서, 또는 시스템 온 칩을 가진 칩 상에 있는 오류 검출 및 수정 회로(2800)의 블록도를 도시한다. 회로(2800)는 캐시 메모리(2810)(또는 로컬 메모리 또는 공유 메모리), 오류 정보를 가진 오류 수정 코드(ECC) 유닛(2820), 및 ECC 체크(2830)를 포함한다.
데이터 ECC는 사전 결정된 단위(granularity)(예를 들어, 4B 단위)로 수행된다. ECC 체크(2830)에서는, ECC(2820)의 오류 정보에 기초해서 수정된 오류와 수정되지 않은 오류를 모두 보고한다. 태그 패리티의 경우, 각 섹터 태그(예를 들어, 1b의 프로세서 식별자+43b의 가상 주소 태그)는 1 비트 패리티씩 처리된다. 패리티 고장은 수정할 수 없는 오류이다.
수정되지 않은/수정된 오류를 검출하는 것은 부하 저장 파이프라인 기능(예를 들어, 부하 저장 유닛, 부하 저장 캐시(LSC))을 변경하지 않는다. 오류는 병렬로 보고되고, 파이프 라인은 오류를 무시하고 정상적으로 동작한다.
오류 보고시에, LSC(예를 들어, 도 15c의 L1 캐시(1554), 공유 로컬 메모리(1556))는, 데이터 UC 오류(2840)(수정 불가능한 ECC 오류), 데이터 수정 가능한 오류 및 태그 패리티 오류를 포함하는 오류 로깅 및 보고를 위해 오류 레지스터에 접속될 것이다. 본 명세서에서 설명되는 임의의 레지스터 파일 및 레지스터(예를 들어, 258, 334A, 334B, 369, 445, 1406, 1561, 1562, 1824, 1906)는 오류 레지스터를 포함할 수 있다.
오류 보고는 오류의 타입에 따라서 세분화된다. 캐시 또는 공유 로컬 메모리(예를 들어, L1/SLM 데이터, 캐시(2810))의 경우 LSC 또는 ECC 체크(2830)는 캐시/SLM 판독 또는 캐시 삭제(cache eviction) 중에 데이터 ECC 오류가 발생할 수 있다. 오류는 수정된 ECC 오류 또는 UCE(예를 들어, UC 오류(2840))일 수 있다.
수정된 ECC 오류는 오류 레지스터(2832)로 시그널링된다. 수정된 ECC 오류는 오류 레지스터를 통해 드라이버, 어드레서블 메모리로, 그리고 Guc(general microcontroller)에 보고되지만 프로그램 실행은 전혀 중단되지 않는다. 오류 레지스터는 수정된 오류의 원인(L1 데이터, 프로세싱 리소스 일반 레지스터 파일(GRF), EU GRF, IC 등)을 기록한다.
수정 불가능한 ECC 오류의 경우, 데이터 판독(예를 들어, 캐시 판독, SLM 판독 또는 캐시 삭제) 동안에 UCE가 발생되면, 데이터는 프로세싱 리소스로 반환되지만 오류 레지스터에도 오류가 시그널링된다. 오류 레지스터는 동기식 그래픽 장치에 오류를 "치명적(fatal)"으로 보고한다.
일례로, 클린한 캐시 라인의 경우, ECC 체크(2830)에 의해 수정 불가능한 오류(2840)가 있다고 결정되면, 페치 동작이 메인 메모리로부터 재시도되는 것으로 동작(2850)이 발생되며, 판독 캐시 라인은 무효화된다.
다른 예에서, 명령어 실패의 경우, IC ECC 실패로 인해서, 명령어가 재시도될 수 있다.
각각의 뱅크로부터의 오류는 논리적으로 동작될 것이며(예를 들어, OR 로직에서), 오류 정보(예를 들어, 1 비트)가 오류 타입(예를 들어, 수정된 ECC, 수정되지 않은 ECC) 별로 전송될 것이다.
캐시 태그 패리티 오류의 경우, 프로세서 식별자 및 가상 주소 태그(예를 들어, 43비트 가상 주소 태그)를 커버하는 태그 패리티 비트가 있을 것이다. 캐시는 직접 매핑되고, N-방향 세트 연관(N-way set associative) 및 완전 연관(fully associative)일 수 있다. 일례로, 태그가 비교될 때마다, 패리티는 N-방향 세트 연관(예를 들어, 32 방향 세트 연관)에 대해 병렬로 모든 N-방향에서 계산된다. 패리티 오류가 유효한 방식으로 검출되면, 오류는 TDL(thread dispatch logic)로 보고된다. 각 L1 뱅크 또는 메모리 뱅크의 "태그 패리티 오류"는 논리적으로 동작되며(예를 들어, OR 로직에서), 오류 레지스터로 신호가 송신된다.
새로운 패키징 기술을 이용해서, 고밀도 메모리 구조를 GPU 컴퓨팅 구조에 더 가깝게 통합하는 것이 가능하다. EDC 로직 또는 기능을 가진 이러한 메모리 구조는 전용 메모리(private memory) 혹은 캐시와 같은 더 쉬운 옵션으로 정의될 수 있다. 이것은 도 29a에 도시된 바와 같은 GPU 칩렛 상의 적층형 메모리 구조로 수행될 수 있다. 칩렛은 기판(2910) 상에 적층된다. 컴퓨팅 칩렛 상의 적층형 메모리(1650-1653, 1660-1663)(예를 들어, DRAM)는 메모리로의 대역폭을 증가시키면서도 대기 시간 및 전력을 감소시킨다.
도 29b는 본 명세서에 설명된 일부 실시예에 따른 집적 회로 패키지 어셈블리(1671)의 측단면도를 도시한다. 집적 회로 패키지 어셈블리(1671)는 본 명세서에 설명된 바와 같은 하나 이상의 GPU, 그래픽 프로세서 또는 그래픽 멀티 프로세서의 구현예를 도시한다. 패키지 어셈블리(1671)는 기판(2911, 2912)(예를 들어, 10 나노미터 설계를 포함하는 다른 설계용 그래픽 베이스 다이) 및 기판(2911, 2912)에 각각 접속된 하드웨어 로직(2921, 2931)의 유닛을 포함한다. 로직(2921, 2931)은 구성 가능 로직 또는 고정 기능 로직 하드웨어에서 적어도 부분적으로 구현될 수 있으며, 본 명세서에 설명된 프로세서 코어(들), 그래픽 프로세서(들), 또는 다른 가속기 디바이스 중 하나 이상의 부분을 포함할 수 있다. 로직(2921, 2931)의 각 유닛은 반도체 다이(예를 들어, 7 나노미터 설계를 포함하는 다른 설계용 그래픽 컴퓨팅 다이) 내에서 구현될 수 있고, 상호 접속 구조(1674)를 통해 기판과 연결될 수 있다. 상호 연결 구조(1674)는 로직(2921, 2931)과 기판 사이에서 전기 신호를 라우팅하도록 구성될 수 있고, 비한정의 예로서 범프 또는 필러와 같은 상호 접속을 포함할 수 있다. 일부 실시예에서, 상호 접속 구조(1674)는 예를 들어, 로직(2921, 2931)의 동작과 연관된 입력/출력(I/O) 신호 및/또는 전력 또는 접지 신호와 같은 전기 신호를 라우팅하도록 구성될 수 있다. 일부 실시예에서, 기판(2911, 2912)(예를 들어, GPU 베이스)은 에폭시 기반 라미네이트 기판이다. 기판은 다른 실시예에서는 다른 적합한 타입의 기판을 포함할 수 있다. 패키지 어셈블리(1671)는 패키지 상호 접속부(1684)를 통해 다른 전기 디바이스에 접속될 수 있다. 패키지 상호 접속부(1684)는 기판의 표면에 연결되어, 마더보드, 다른 칩셋, 또는 멀티 칩 모듈과 같은 다른 전기 디바이스로 전기 신호를 라우팅할 수 있다.
일부 실시예에서, 로직(1621, 1631)의 유닛은 브리지(1689)와 전기적으로 연결되고, 브리지(1689)는 로직(1621, 1631) 사이에서 전기 신호를 라우팅하도록 구성된다. 브리지(1689)는 전기 신호의 경로를 제공하는 고밀도 상호접속 구조일 수 있다. 브리지(1689)는 유리나 혹은 적절한 반도체 재료로 구성된 브리지 기판을 포함할 수 있다. 로직(1621, 1631) 사이에 칩-투-칩 접속을 제공하기 위해서 브리지 기판 상에 전기적 라우팅 피쳐가 형성될 수 있다.
로직(2921, 2931, 1655~1658, 1665~1668) 및 브리지(1689)가 도시되어 있지만, 본 명세서에 설명된 실시예는 하나 이상의 다이에 더 많은 혹은 더 적은 로직 유닛을 포함할 수도 있다. 로직이 단일 다이에 포함된다면 브리지(1689)는 제외될 수 있으므로, 하나 이상의 다이는 0개 이상의 브리지에 의해 접속될 수 있다. 다른 방안으로, 다수의 다이 또는 로직의 유닛이 하나 이상의 브리지로 접속될 수 있다. 나아가, 다수의 논리 장치, 다이 및 브리지는, GPU 칩렛(2921, 2931) 및 고밀도 메모리(1655~1658, 1665~1668)를 가진 3차원 구성을 포함한, 다른 가능한 구성으로 함께 접속될 수도 있다.
컴퓨팅 다이(2921, 2931)(또는 칩렛)는 기판(2911, 2912) 상에 적층된다. 컴퓨팅 다이(2921, 2931)(또는 칩렛) 상의 적층된 메모리(1655~1658, 1665~1668)(예를 들어, DRAM)는 메모리로의 대역폭을 증가시키면서 대기 시간 및 전력을 감소시킨다.
다른 예에서, 대부분의 컴퓨팅 가속기는, 대부분의 데이터를 포함할 수 있는 상당한 양의 온다이 메모리를 전력 및 대역폭의 이유로 다이에 패킹한다. 온다이 메모리(즉, SRAM, DRAM)의 기능으로서, 많은 리던던시가 타이밍 복구를 위해 빌트인된다.
일 실시예에서, 본 설계는 런타임 복구를 수행하는데 메모리에서 이용 가능한 리던던시를 사용한다. 도 30은 일 실시예에 따른, 그래픽 프로세싱 유닛, 그래픽 멀티프로세서, 또는 그래픽 프로세서의 오류 정보를 수집하고 그 반복 메모리 구조를 검출하는 예시적인 동작 시퀀스를 갖는 컴퓨터 구현 방법(3000)을 도시한다. 도 2d, 3a, 3b, 3c, 15a, 15b, 21에 도시된 제어 로직(예를 들어, 오류 검출 및 복구 로직(EDR) 로직(273))은 일 실시예에 따른 방법(3000)의 동작을 수행한다. 캐시, 로컬 메모리 또는 공유 메모리가 그래픽 프로세싱 유닛, 그래픽 멀티 프로세서 또는 그래픽 프로세서와 함께 칩 또는 다이 상에 있다.
컴퓨터 구현된 방법은 이 방법(3000)의 동작을 수행하도록 알고리즘 또는 컴퓨터 구현 가능한 명령어로 구현될 수 있다. 동작 3002에서, 컴퓨터 구현된 방법은 오류 정보(예를 들어, 캐시 오류 정보, 메모리 오류 정보)를 수집하는 것과, 그래픽 프로세싱 유닛, 그래픽 멀티 프로세서 또는 그래픽 프로세서의 반복 메모리 구조를 검출하는 것을 포함한다. 일례로 오류 검출 및 복구 로직은 오류 정보를 수집하고 반복 메모리 구조를 검출한다. 동작 3004에서 컴퓨터 구현 방법은 캐시 또는 메모리에 대한 오류 정보가 지속적으로 발생하는지 또는 적어도 일정 시간 동안 오류 상태를 유발하는지 여부를 판단한다. 만약 그렇다면, 컴퓨터 구현된 방법은 동작 3006에서 그래픽 프로세싱 유닛, 그래픽 멀티 프로세서 또는 그래픽 프로세서의 그래픽 파이프 라인을 일시적으로 중지시킨다. 동작 3008에서, 컴퓨터 구현된 방법은 캐시 라인 또는 메모리 영역에 대한 식별자와 오류 상태를 가진 매핑 테이블을 획득한다. 동작 3009에서 매핑 테이블에 기초해서 오류 상태와 연관된 적어도 하나의 캐시 라인 또는 메모리 영역은 비활성화되어서 데이터를 저장하는 데 사용할 수 없다. 로직은 오류 상태와 연관된 하나 이상의 캐시 라인 또는 메모리 영역을 할당하는 것이 불가능하다.
동작 3010에서, 캐시는 비활성화된 캐시 라인이 없이 구성되고 혹은 메모리는 비활성화된 메모리 영역없이 구성된다. 동작 3012에서, 컴퓨터 구현된 방법은, 비활성화된 캐시 라인(들) 또는 비활성화된 메모리 영역으로 인해서 저장 크기가 감소된 캐시 또는 메모리를 사용해서 그래픽 파이프 라인을 계속한다. 일례로, FIFO 버퍼 또는 큐는, FIFO 버퍼 또는 큐의 일부가 비활성화되는 것으로 인해서 크기가 감소된다. 다른 예에서, 캐시는 N-방향 세트 연관이고 N-방향 중 적어도 하나는 오류 상태로 인해 비활성화된다. 동작 3020에서 오류 상태가 발생하지 않으면 그래픽 파이프 라인이 계속된다. 온-다이 메모리는 오류가 컨텐츠와 관련이 있다는 것을 검출하면 그 컨텐츠를 플러싱(flush)할 수 있으며, 이후에 오류가 발생한 위치를 여분 위치로 대체하여(예를 들어, 여분 메모리 위치), 정상 동작으로 복구하거나 정상 작동을 재개함에 따라 스토리지를 축소할 수 있다. 이 전체 프로세스는 워크로드가 활성 상태인 런타임 중에 또는 프로세싱 리소스의 워크로드 사이에 수행될 수 있다. 메모리 또는 캐시가 판독 전용이면 오류 상태와 연관된 데이터가 무효화될 수 있으며, 이 데이터는 보조 메모리 위치로부터 다시 페치된다.
또 다른 실시예에서, 도 31은 오류가 발생한 프로세싱 리소스(예를 들어, 컴퓨팅 요소, 프로세싱 유닛, 처리 엔진, 실행 리소스, 실행 유닛(EU)(508A-N, 509A-N, 600, 852A-B), 스트림 프로세서, 스트리밍 멀티 프로세서(SM), 그래픽 멀티 프로세서(325, 350), 멀티 코어 그룹(1965A~1965N), 컴퓨팅 유닛, 그래픽스 코어 넥스트의 컴퓨팅 유닛, 로직 유닛, 기능 유닛, FPU 등)를, 일부 제어 흐름(예를 들어, 하드웨어 FSM, 마이크로 컨트롤러 등의 제어 흐름)을 비활성화시킴으로써 제거하는 예시적인 동작 시퀀스를 갖는 컴퓨터 구현 방법을 도시한다. 오류 검출 및 복구 기능은 제어 로직(예를 들어, EDR(273))으로 구현될 수 있다. 마이크로 컨트롤러 또는 그래픽 프로세싱 유닛, 그래픽 멀티 프로세서 또는 그래픽 프로세서의 제어 로직은 일 실시예에 따라 도 31의 동작이 수행되게 한다.
동작 3102에서, 컴퓨터 구현 방법은 그래픽 프로세싱 유닛, 그래픽 멀티 프로세서, 또는 그래픽 프로세서의 적어도 하나의 프로세싱 리소스에 대한 오류 정보를 수집하는 것을 포함한다. 동작 3014에서 컴퓨터 구현 방법은 적어도 하나의 프로세싱 리소스에 대한 오류 정보가 지속적으로 발생하는지 또는 적어도 일정 시간 동안 오류 상태를 유발하는지 여부를 판단한다. 일례로 프로세싱 리소스는 잘못된 데이터를 반복적으로 생성한다. 마이크로 컨트롤러는 오류 보고를 모니터해서 프로세싱 리소스에 대한 오류 상태를 결정할 수 있다. 오류 상태가 있다면, 컴퓨터 구현 방법은 동작 3106에서 그래픽 파이프 라인을 일시적으로 중지한다. 이와 달리, 오류 상태가 없다면 컴퓨터 구현 방법은 동작 3107에서 그래픽 파이프 라인의 동작을 계속한다.
단계 3108에서, 오류 상태의 경우, 컴퓨터 구현 방법은 오류 상태를 가진 적어도 하나의 프로세싱 리소스를 비활성화한다. 동작 3110에서, 컴퓨터 구현 방법은 오류 상태를 가진 적어도 하나의 프로세싱 리소스를 동작시키지 않고 그래픽 프로세싱 유닛, 그래픽 멀티 프로세서 또는 그래픽 프로세서를 재구성 혹은 공급한다. 재구성 또는 공급은, 오류 상태를 가진 적어도 하나의 프로세싱 리소스를 사용하지 않고 성능(예를 들어, TOPS, TFLOPS)을 유지하기 위해, 그래픽 프로세싱 유닛, 그래픽 멀티 프로세서 또는 그래픽 프로세서의 나머지 프로세싱 리소스의 주파수 또는 클럭 속도를 증가시키는 것을 포함할 수 있다. 동작 3112에서, 컴퓨터 구현 방법은 성능 손실을 보장하기 위해 더 높은 주파수 또는 클럭 속도로 그래픽 파이프 라인의 동작을 재개한다(예를 들어, 활성화된 컴퓨팅 블록 또는 프로세싱 블록을 수행한다).
메모리 요소를 갖는 가속기는 오류의 주요 원인이다. 다른 실시예에서, 도 32는 패리티 또는 ECC를 사용해서 메모리 요소(예를 들어, 캐시, L1 캐시, L2 캐시, 공유 메모리)에서 오류를 검출하고, 오류 정보를 프로세싱 리소스(예를 들어, 컴퓨팅 요소, 프로세싱 유닛, 처리 엔진, 실행 리소스, 실행 유닛(EU)(508A-N, 509A-N, 600, 852A-B), 스트림 프로세서, 스트리밍 멀티 프로세서(SM), 그래픽 멀티 프로세서(325, 350), 멀티 코어 그룹(1965A~1965N), 컴퓨팅 유닛, 그래픽스 코어 넥스트의 컴퓨팅 유닛, 로직 유닛, 기능 유닛, FPU 등)으로 전파하는 예시적인 동작 시퀀스를 갖는 컴퓨터 구현 방법을 도시한다. 그래픽 프로세싱 유닛, 그래픽 멀티 프로세서 또는 그래픽 프로세서의 오류 검출 및 복구 로직(예를 들어, EDR(273) 또는 애플리케이션 오류 핸들러는 방법(3200)의 동작을 수행할 수 있다.
동작 3202에서, 컴퓨터 구현 방법은 그래픽 프로세싱 유닛, 그래픽 멀티 프로세서 또는 그래픽 프로세서의 메모리 요소(예를 들어, 캐시, 공유 메모리)에 대해 패리티 또는 ECC를 사용해서 오류 정보를 수집하는 단계를 포함한다. 동작 3204에서 메모리 요소(예를 들어, 캐시, 공유 메모리)에 대한 오류 정보가 프로세싱 리소스로 송신된다. 동작 3206에서 컴퓨터 구현 방법은 오류를 사용해서(예를 들어, 판독 동작, 계산 동작) 오류가 전파될지 여부를 결정할 때까지 대기한다.
오류가 전파된다면, 컴퓨터 구현 방법은 동작 3208에서 메모리 위치에서 오류의 주소를 포함하는 오류 정보를 애플리케이션 오류 핸들러에 제공한다. 오류가 전파되지 않으면 동작 3209에서 어떠한 동작도 필요하지 않고, 그래픽 파이프 라인의 동작은 계속된다.
동작 3210에서 애플리케이션 오류 핸들러는 오류가 수정되어야 하는지 여부를 판정한다. 수정되어야 한다면, 동작 3212에서 애플리케이션 오류 핸들러는 복구 옵션을 수행해서 오류를 수정한다. 예를 들어, 그래픽 파이프 라인이 중단되고 동작(예를 들어, 로드 또는 저장 명령어)이 다시 수행된다.
다른 방안으로, 오류가 수정될 필요가 없다면(예를 들어, 오류는 머신 학습을 위한 랜덤 데이터와 연관됨), 컴퓨터 구현 방법은 동작 3214에서 그래픽 파이프 라인의 동작을 계속한다.
일례로, 컴퓨팅시에, 이 방법은 전파된 오류를 검출하고, 노출을 포함하며, 전파된 오류에 사용될 복구 옵션을 보고한다. 애플리케이션 오류 핸들러가 적용될 수 있는 다양한 레벨의 복구 옵션이 있다.
하드웨어 컴포넌트(예를 들어, 프로세싱 리소스, 캐시, 메모리) 사이에서 데이터가 전송될 때마다, 오류 정보(예를 들어, 추가 오류 비트)가 데이터에 추가된다. 예를 들어, 도 3c의 GPU(380)의 경우, 데이터가 GFX 코어(370), 텐서 코어(371), 레이 트레이싱 코어(372), L1 캐시/공유 메모리(373), 메모리 제어(367) 및 메모리(366) 사이에서 전송될 때 오류 정보가 데이터에 추가된다.
다른 예에서, 도 7의 GPGPU(780)의 경우, 데이터가 컴퓨팅 클러스터(706A-H), 캐시 메모리(708), 메모리 컨트롤러(712A-B) 및 메모리(714A-B) 사이에서 전송될 때 오류 정보가 데이터에 추가된다.
다른 예에서, 도 15c의 GPGPU(1570)의 경우, 데이터가 컴퓨팅 유닛(1560N), 로직 유닛(1563, 1564), 공유 메모리(1556), L1 캐시(1554), L2 캐시(1553), 메모리 컨트롤러(1568) 및 메모리(1571 및 1572) 사이에서 전송될 때 오류 정보가 데이터에 추가된다.
다른 예에서, 도 16c의 컴퓨팅 가속기(1630)의 경우, 데이터가 컴퓨팅 엔진 타일(340A-D), L3 캐시(1636) 및 메모리(1626A-D) 사이에서 전송될 때 오류 정보가 데이터에 추가된다.
추가의 예시적인 그래픽 처리 시스템
일부 실시예는 그래픽 멀티 프로세서를 포함하는 예 1에 관한 것이며, 이는 데이터를 저장하기 위한 캐시 또는 로컬 메모리와, 캐시 또는 로컬 메모리와 통합되거나 이에 연결된 오류 검출 수정 회로를 포함한다. 오류 검출 수정 회로는 캐시 또는 로컬 메모리의 데이터에 대한 태그 판독을 수행해서 오류 검출 수정 정보를 체크하도록 구성된다.
예 2는 예 1의 청구 대상을 포함하며, 오류 검출 수정 정보는 패리티 정보를 포함한다.
예 3은 예 1 또는 예 2의 청구 대상을 포함하며, 오류 검출 수정 회로는, 패리티 정보가 오류 상태를 나타내는지 여부를 판정하도록 더 구성된다.
예 4는 예 1 내지 예 3 중 어느 한 예의 청구 대상을 포함하며, 오류 검출 수정 회로는, 패리티 정보가 오류 상태를 나타낼 때, 패리티 정보와 연관된 캐시 또는 공유 메모리의 데이터가 캐시 또는 공유 메모리에서 수정되고 또한 메인 메모리에서도 수정되는 것에 기초해서 클린한지 여부를 판정하도록 더 구성된다.
예 5는 예 1 내지 예 4 중 어느 한 예의 청구 대상을 포함하며, 패리티 정보와 연관된 데이터가 클린하지 않으면, 치명적 오류 상태가 보고된다.
예 6은 예 1 내지 예 5 중 어느 한 예의 청구 대상을 포함하며, 패리티 정보와 연관된 데이터가 클린한 경우, 데이터는 캐시 또는 로컬 메모리에서 무효화되고, 데이터는 메인 메모리로부터 페치된다.
예 7은 예 1 내지 예 6 중 어느 한 예의 청구 대상을 포함하며, 캐시 또는 로컬 메모리는 내장형 DRAM(Dynamic Random Access Memory)을 포함한다.
예 8은 예 1 내지 예 7 중 어느 한 예의 청구 대상을 포함하며, 캐시 또는 로컬 메모리는 그래픽 멀티 프로세서와 함께 칩 또는 다이 상에 위치된 제 1 레벨 캐시 또는 제 2 레벨 캐시를 포함한다.
예 9는 일부 실시예에 따른 그래픽 프로세싱 유닛, 그래픽 멀티 프로세서 또는 그래픽 프로세서의 캐시 메모리 또는 공유 메모리의 오류 체크 메커니즘의 컴퓨터 구현 방법에 관한 것이다. 이 방법은, 오류 검출 및 수정 기능을 사용해서, 캐시 메모리 또는 공유 메모리의 데이터에 대해 태그 판독을 수행해서 패리티 정보를 체크하는 단계와, 패리티 정보가 오류 상태를 나타내는지 여부를 판정하는 단계를 포함한다.
예 10은 예 9의 청구 대상을 포함하며, 이 방법은 패리티 정보가 오류 상태를 나타내는 경우, 패리티 정보와 연관된 캐시 메모리 또는 공유 메모리의 데이터가 캐시 메모리 또는 공유 메모리에서 수정되고 또한 메인 메모리에서도 수정되는 것에 기초해서 클린한지 여부를 판정하는 단계를 더 포함한다.
예 11은 예 9 또는 예 10의 청구 대상을 포함하며, 패리티 정보와 연관된 데이터가 클린하지 않은 경우, 수정 불가능한 오류 상태가 보고된다.
예 12는 예 9 내지 예 11 중 어느 한 예의 청구 대상을 포함하며, 이 방법은 패리티 정보와 연관된 캐시 메모리 또는 공유 메모리의 데이터가 클린하고, 패리티 정보가 오류 상태를 나타내면, 캐시 메모리 또는 공유 메모리의 데이터를 무효화시키고, 데이터를 메인 메모리로부터 다시 페치하는 단계를 더 포함한다.
예 13은 그래픽 프로세싱 유닛(GPU)에 관한 것으로, 이는 데이터를 저장하는 캐시 메모리와, 캐시 메모리와 통합되거나 이에 연결된 오류 검출 수정 회로를 포함하고, 오류 검출 수정 회로는 캐시 메모리의 데이터에 대해 사전 결정된 단위로 데이터 오류 수정 체크를 수행해서 오류 정보를 체크하도록 구성된다.
예 14은 예 13의 청구 대상을 포함하며, 오류 검출 수정 회로는 오류 정보에 기초해서 수정된 오류 및 수정되지 않은 오류를 보고하도록 구성된다.
예 15는 예 13 또는 예 14의 청구 대상을 포함하며, 수정되지 않은 오류 혹은 수정된 오류를 검출하는 것이 부하 저장 파이프라인 기능을 변경하지 않는다.
예 16은 예 13 내지 예 15 중 어느 한 예의 청구 대상을 포함하며, 오류 보고 동안에, 캐시 메모리는 수정 불가능 오류, 데이터 수정 가능 오류 및 태그 패리티 오류를 포함하는 오류 로깅 및 보고를 위해 레지스터에 연결된다.
예 17은 예 13 내지 예 16 중 어느 한 예의 청구 대상을 포함하며, 오류 보고는 오류의 타입에 기초하며, 데이터 오류는 캐시 판독 또는 캐시 삭제 동안에 발생한다.
예 18은 예 13 내지 예 17 중 어느 한 예의 청구 대상을 포함하며, 수정된 오류는 프로그램 실행이 중단되는 일 없이 보고된다.
예 19는 예 13 내지 예 18 중 어느 한 예의 청구 대상을 포함하며, 레지스터는, 제 1 레벨 캐시 데이터 혹은 프로세싱 리소스를 포함한, 수정된 오류의 원인을 로깅한다.
예 20은 예 13 내지 예 19 중 어느 한 예의 청구 대상을 포함하며, 수정 불가능한 오류(uncorrectible errors; UCE)인 경우, 캐시 판독 또는 캐시 삭제를 포함한 데이터 판독 동안에 UCE가 발생되면, 데이터는 프로세싱 리소스로 반환되지만 오류 레지스터에도 오류가 시그널링된다.
일부 실시예는 그래픽 멀티 프로세서를 포함하는 예 21에 관한 것이며, 이는 데이터를 저장하기 위한 캐시 또는 로컬 메모리와, 캐시 또는 로컬 메모리와 통합되거나 이에 연결된 로직(예를 들어, 오류 검출 및 수정 로직)을 포함한다. 이 로직은 캐시 또는 메모리에 대한 오류 정보가 지속적으로 발생하는지 또는 적어도 일정 시간 동안 오류 상태를 유발하는지 여부를 판단하도록 구성된다.
예 22는 예 21의 청구 대상을 포함하며, 로직은 캐시 또는 메모리에 대한 오류 정보가 지속적으로 발생하거나 또는 적어도 일정 시간 동안 오류 상태를 유발하면, 그래픽 프로세싱 유닛, 그래픽 멀티 프로세서 또는 그래픽 프로세서의 그래픽 파이프 라인을 일시적으로 중지시키도록 구성된다.
예 23은 예 21 또는 예 22의 청구 대상을 포함하며, 로직은 오류 상태를 가진 캐시의 캐시 라인 또는 메모리의 메모리 영역에 대한 식별자와 오류 상태를 가진 매핑 테이블을 획득하도록 구성된다.
예 24는 예 21 내지 예 23 중 어느 한 예의 청구 대상을 포함하며, 로직은 오류 상태와 연관된 적어도 하나의 캐시 라인 또는 메모리 영역을 비활성화하도록 구성된다. 매핑 테이블에 기초해서 캐시 라인 또는 메모리 영역은 비활성화되어서 데이터를 저장하는 데 사용할 수 없다. 로직은 오류 상태와 연관된 적어도 하나의 캐시 라인 또는 메모리 영역을 할당하는 것이 불가능하다.
예 25는 예 21 내지 예 24 중 어느 한 예의 청구 대상을 포함하며, 캐시는 비활성화된 캐시 라인이 없이 구성되고 혹은 메모리는 비활성화된 메모리 영역없이 구성된다.
예 26은 예 21 내지 예 25 중 어느 한 예의 청구 대상을 포함하며, 비활성화된 캐시 라인(들) 또는 비활성화된 메모리 영역으로 인해서 저장 크기가 감소된 캐시 또는 메모리를 사용해서 그래픽 파이프 라인이 계속된다.
예 27은 예 21 내지 예 26 중 어느 한 예의 청구 대상을 포함하며, 캐시는 N-방향 세트 연관이고 N-방향 중 적어도 하나는 오류 상태로 인해 비활성화된다.
예 28은 예 21 내지 예 27 중 어느 한 예의 청구 대상을 포함하며, 오류 상태를 가진 메모리 영역은 오류 상태가 컨텐츠와 연관되어 있다는 것을 검출하면 워크로드의 런타임 동안에 그 컨텐츠를 제거하고 이후에 메모리 영역의 오류 위치를 여분 메모리 구조의 여분 메모리 위치로 교체함으로써 정상 동작을 복구한다.
예 29는 실시예에 따른 그래픽 프로세싱 유닛, 그래픽 멀티 프로세서 또는 그래픽 프로세서의 캐시 메모리 또는 메모리의 오류 체크 및 복구 메커니즘의 컴퓨터 구현 방법에 관한 것이다. 이 방법은, 오류 검출 및 복구 로직을 사용해서 오류 정보(예를 들어, 캐시 오류 정보, 메모리 오류 정보)를 수집하는 단계와, 그래픽 프로세싱 유닛, 그래픽 멀티 프로세서 또는 그래픽 프로세서의 반복 메모리 구조를 검출하는 단계를 포함한다. 컴퓨터 구현 방법은 캐시 또는 메모리에 대한 오류 정보가 지속적으로 발생하는지 또는 적어도 일정 시간 동안 오류 상태를 유발하는지 여부를 판단한다.
예 30은 예 29의 청구 대상을 포함하며, 컴퓨터 구현 방법은 캐시 또는 메모리에 대한 오류 정보가 지속적으로 발생하거나 또는 적어도 일정 시간 동안 오류 상태를 유발하면, 그래픽 프로세싱 유닛, 그래픽 멀티 프로세서 또는 그래픽 프로세서의 그래픽 파이프 라인을 일시적으로 중지시키는 단계를 더 포함한다.
예 31은 예 29 또는 예 30의 청구 대상을 포함하며, 컴퓨터 구현 방법은 오류 상태를 가진 캐시의 캐시 라인 또는 메모리의 메모리 영역에 대한 식별자와 오류 상태를 가진 매핑 테이블을 획득하는 단계를 더 포함한다.
예 32는 예 29 내지 예 31 중 어느 한 예의 청구 대상을 포함하며, 컴퓨터 구현 방법은 오류 상태와 연관된 적어도 하나의 캐시 라인 또는 메모리 영역을 비활성화하는 단계를 더 포함한다. 매핑 테이블에 기초해서 캐시 라인 또는 메모리 영역은 비활성화되어서 데이터를 저장하는 데 사용할 수 없다. 로직은 오류 상태와 연관된 적어도 하나의 캐시 라인 또는 메모리 영역을 할당하는 것이 불가능하다.
예 33은 예 29 내지 예 32 중 어느 한 예의 청구 대상을 포함하며, 캐시는 비활성화된 캐시 라인이 없이 구성되고 혹은 메모리는 비활성화된 메모리 영역없이 구성된다.
예 34는 예 29 내지 예 33 중 어느 한 예의 청구 대상을 포함하며, 컴퓨터 구현 방법은 비활성화된 캐시 라인(들) 또는 비활성화된 메모리 영역으로 인해서 저장 크기가 감소된 캐시 또는 메모리를 사용해서 그래픽 파이프 라인을 계속하는 단계를 더 포함한다.
예 35는 예 29 내지 예 34 중 어느 한 예의 청구 대상을 포함하며, 캐시는 N-방향 세트 연관이고 N-방향 중 적어도 하나는 오류 상태로 인해 비활성화된다.
예 36은 예 29 내지 예 35 중 어느 한 예의 청구 대상을 포함하며, 오류 상태를 가진 메모리 영역은 오류 상태가 컨텐츠와 연관되어 있다는 것을 검출하면 워크로드의 런타임 동안에 그 컨텐츠를 제거하고 이후에 메모리 영역의 오류 위치를 여분 메모리 구조의 여분 메모리 위치로 교체함으로써 정상 동작을 복구한다.
예 37은 그래픽 프로세싱 유닛(GPU)에 관한 것이며, 이는 데이터를 저장하기 위한 캐시 또는 로컬 메모리와, 캐시 또는 로컬 메모리와 통합되거나 이에 연결된 로직(예를 들어, 오류 검출 및 수정 로직)을 포함한다. 이 로직은, 오류 정보(예를 들어, 캐시 오류 정보, 메모리 오류 정보)를 수집하고, 그래픽 프로세싱 유닛의 반복 메모리 구조를 검출하도록 구성된다. 이 로직은 캐시 또는 메모리에 대한 오류 정보가 지속적으로 발생하는지 또는 적어도 일정 시간 동안 오류 상태를 유발하는지 여부를 판단하도록 구성된다.
예 38은 예 37의 청구 대상을 포함하며, 이 로직은 캐시 또는 메모리에 대한 오류 정보가 지속적으로 발생하거나 또는 적어도 일정 시간 동안 오류 상태를 유발하면, 그래픽 프로세싱 유닛의 그래픽 파이프 라인을 일시적으로 중지시키도록 구성된다.
예 39는 예 36 내지 예 38 중 어느 한 예의 청구 대상을 포함하며, 로직은 오류 상태를 가진 캐시의 캐시 라인 또는 메모리의 메모리 영역에 대한 식별자와 오류 상태를 가진 매핑 테이블을 획득하도록 구성된다.
예 40은 예 36 내지 예 39 중 어느 한 예의 청구 대상을 포함하며, 이 로직은 오류 상태와 연관된 적어도 하나의 캐시 라인 또는 메모리 영역을 비활성화하도록 구성된다. 매핑 테이블에 기초해서 캐시 라인 또는 메모리 영역은 비활성화되어서 데이터를 저장하는 데 사용할 수 없다. 이 로직은 오류 상태와 연관된 적어도 하나의 캐시 라인 또는 메모리 영역을 할당하는 것이 불가능하다.
일부 실시예는 그래픽 멀티 프로세서를 포함하는 예 41에 관한 것이며, 이는 데이터를 저장하기 위한 캐시 또는 로컬 메모리와, 캐시 또는 로컬 메모리와 통합되거나 이에 연결된 로직(예를 들어, 오류 검출 및 수정 로직)을 포함한다. 이 로직은, 그래픽 멀티 프로세서의 메모리 요소(예를 들어, 캐시, 공유 메모리)에 대해 패리티 또는 ECC를 사용해서 오류 정보를 수집하고, 메모리 요소(예를 들어, 캐시, 공유 메모리)에 대한 오류 정보를 처리 리로스에 송신하며, 오류를 사용해서(예를 들어, 판독 동작, 계산 동작) 오류가 전파될지 여부를 결정할 때까지 대기하도록 구성된다.
예 42는 예 41의 청구 대상을 포함하며, 이 로직은, 오류가 전파된다고 판정되면, 메모리 위치에서 오류의 주소를 포함하는 오류 정보를 애플리케이션 오류 핸들러에 제공하도록 구성된다.
예 43은 예 41 또는 예 42의 청구 대상을 포함하며, 오류가 전파되지 않으면 그래픽 파이프 라인의 동작은 계속된다.
예 44는 예 41 내지 예 43 중 어느 한 예의 청구 대상을 포함하며, 오류가 수정되어야 할 때 오류를 수정하는 복구 옵션이 수행된다.
예 45는 일 실시예에 따른, 그래픽 프로세싱 유닛, 그래픽 멀티 프로세서 또는 그래픽 프로세서의 메모리 요소에서 오류를 검출하는 컴퓨터 구현 방법에 관한 것이다. 컴퓨터 구현 방법은 그래픽 프로세싱 유닛, 그래픽 멀티 프로세서 또는 그래픽 프로세서의 메모리 요소(예를 들어, 캐시, 공유 메모리)에 대해 패리티 또는 ECC를 사용해서 오류 정보를 수집하는 단계를 포함한다. 메모리 요소(예를 들어, 캐시, 공유 메모리)에 대한 오류 정보가 적어도 하나의 프로세싱 리소스로 송신된다. 컴퓨터 구현 방법은 오류를 사용해서(예를 들어, 판독 동작, 계산 동작) 오류가 전파될지 여부를 결정할 때까지 대기한다.
예 46은 예 45의 청구 대상을 포함하며, 컴퓨터 구현 방법은 메모리 위치에서 오류의 주소를 포함하는 오류 정보를 애플리케이션 오류 핸들러에 제공하는 단계를 더 포함한다.
예 47은 예 45 또는 예 46의 청구 대상을 포함하며, 컴퓨터 구현 방법은 오류가 전파되지 않으면 그래픽 파이프 라인의 동작을 계속하는 단계를 더 포함한다.
예 48은 예 45 내지 예 47 중 어느 한 예의 청구 대상을 포함하며, 컴퓨터 구현 방법은 애플리케이션 오류 핸들러를 사용해서 오류가 수정되어야 하는지 여부를 판정하는 단계를 더 포함한다.
예 49는 예 45 내지 예 48 중 어느 한 예의 청구 대상을 포함하며, 컴퓨터 구현 방법은 오류가 수정되어야 한다면, 복구 옵션을 수행해서 오류를 수정하는 단계를 더 포함한다.
예 50은 예 45 내지 예 49 중 어느 한 예의 청구 대상을 포함하며, 복구 옵션은 그래픽 파이프 라인이 중단될 때 로드 또는 저장 명령어를 수행하는 것을 포함한다.
예 51은 명령어의 시퀀스를 나타내는 데이터가 저장된 비일시적 컴퓨터-판독 가능 저장 매체에 관한 것이며, 이 명령어의 시퀀스는 그래픽 프로세싱 유닛, 그래픽 멀티 프로세서 또는 그래픽 프로세서의 하나 이상의 프로세싱 리소스에 의해 실행될 때, 한 이상의 프로세싱 리소스로 하여금 컴퓨터 구현 방법을 수행하게 하며, 이 방법은, 그래픽 프로세싱 유닛, 그래픽 멀티 프로세서 또는 그래픽 프로세서의 메모리 요소(예를 들어, 캐시, 공유 메모리)에 대해 패리티 또는 ECC를 사용해서 오류 정보를 수집하는 단계를 포함한다. 메모리 요소(예를 들어, 캐시, 공유 메모리)에 대한 오류 정보가 적어도 하나의 프로세싱 리소스로 송신된다. 컴퓨터 구현 방법은 오류를 사용해서(예를 들어, 판독 동작, 계산 동작) 오류가 전파될지 여부를 결정할 때까지 대기한다.
예 52는 예 51의 청구 대상을 포함하며, 컴퓨터 구현 방법은 메모리 위치에서 오류의 주소를 포함하는 오류 정보를 애플리케이션 오류 핸들러에 제공하는 단계를 더 포함한다.
예 53은 예 51 또는 예 52의 청구 대상을 포함하며, 컴퓨터 구현 방법은 오류가 전파되지 않으면 그래픽 파이프 라인의 동작을 계속하는 단계를 더 포함한다.
예 54은 예 51 내지 예 53 중 어느 한 예의 청구 대상을 포함하며, 컴퓨터 구현 방법은 애플리케이션 오류 핸들러를 사용해서 오류가 수정되어야 하는지 여부를 판정하는 단계를 더 포함한다.
예 55는 예 51 내지 예 54 중 어느 한 예의 청구 대상을 포함하며, 컴퓨터 구현 방법은 오류가 수정되어야 한다면, 복구 옵션을 수행해서 오류를 수정하는 단계를 더 포함한다.
예 56은 예 51 내지 예 55 중 어느 한 예의 청구 대상을 포함하며, 복구 옵션은 그래픽 파이프 라인이 중단될 때 로드 또는 저장 명령어를 수행하는 것을 포함한다.
전술한 설명 및 도면은 한정의 의미가 아니며 예시로서 간주되어야 한다. 당업자라면, 첨부된 청구 범위에 기재된 본 발명의 더 넓은 사상 및 범주로부터 벗어남 없이 본 명세서에 기재된 실시예에 대해 다양한 수정 및 변경을 행할 수 있다는 것을 이해할 것이다.

Claims (20)

  1. 그래픽 멀티 프로세서로서,
    데이터를 저장하기 위한 캐시 또는 로컬 메모리와,
    상기 캐시 또는 로컬 메모리와 통합되거나 이에 연결된 오류 검출 수정 회로 - 상기 오류 검출 수정 회로는 상기 캐시 또는 로컬 메모리의 데이터에 대해 태그 판독을 수행해서 오류 검출 수정 정보를 체크하도록 구성됨 -
    를 포함하는 그래픽 멀티 프로세서.
  2. 제 1 항에 있어서,
    상기 오류 검출 수정 정보는 패리티 정보를 포함하는
    그래픽 멀티 프로세서.
  3. 제 2 항에 있어서,
    상기 오류 검출 수정 회로는, 상기 패리티 정보가 오류 상태를 나타내는지 여부를 판정하도록 더 구성되는
    그래픽 멀티 프로세서.
  4. 제 3 항에 있어서,
    상기 오류 검출 수정 회로는, 상기 패리티 정보가 오류 상태를 나타낼 때, 상기 패리티 정보와 연관된 상기 캐시 또는 공유 메모리의 데이터가 상기 캐시 또는 공유 메모리에서 수정되고 또한 메인 메모리에서도 수정되는 것에 기초해서 클린한지 여부를 판정하도록 더 구성되는
    그래픽 멀티 프로세서.
  5. 제 4 항에 있어서,
    상기 패리티 정보와 연관된 상기 데이터가 클린하지 않으면, 치명적(fatal) 오류 상태가 보고되는
    그래픽 멀티 프로세서.
  6. 제 4 항에 있어서,
    상기 패리티 정보와 연관된 데이터가 클린한 경우, 상기 데이터는 상기 캐시 또는 로컬 메모리에서 무효화되고, 상기 데이터는 메인 메모리로부터 페치되는
    그래픽 멀티 프로세서.
  7. 제 1 항에 있어서,
    상기 캐시 또는 로컬 메모리는 내장형 DRAM(Dynamic Random Access Memory)을 포함하는
    그래픽 멀티 프로세서.
  8. 제 1 항에 있어서,
    상기 캐시 또는 로컬 메모리는 상기 그래픽 멀티 프로세서와 함께 칩 또는 다이 상에 위치된 제 1 레벨 캐시 또는 제 2 레벨 캐시를 포함하는
    그래픽 멀티 프로세서.
  9. 캐시 메모리 또는 공유 메모리의 오류 체크 메커니즘의 컴퓨터 구현 방법으로서,
    그래픽 프로세싱 유닛, 그래픽 멀티 프로세서 또는 그래픽 프로세서의 캐시 메모리 또는 공유 메모리의 오류 검출 및 수정 로직을 사용해서, 상기 캐시 메모리 또는 상기 공유 메모리의 데이터에 대해 태그 판독을 수행해서 패리티 정보를 체크하는 단계와,
    상기 패리티 정보가 오류 상태를 나타내는지 여부를 판정하는 단계
    를 포함하는 컴퓨터 구현 방법.
  10. 제 9 항에 있어서,
    상기 패리티 정보가 오류 상태를 나타내는 경우, 상기 패리티 정보와 연관된 상기 캐시 메모리 또는 공유 메모리의 데이터가 상기 캐시 메모리 또는 공유 메모리에서 수정되고 또한 메인 메모리에서도 수정되는 것에 기초해서 클린한지 여부를 판정하는 단계
    를 더 포함하는 컴퓨터 구현 방법.
  11. 제 10 항에 있어서,
    상기 패리티 정보와 연관된 상기 데이터가 클린하지 않은 경우, 수정 불가능한 오류 상태가 보고되는
    컴퓨터 구현 방법.
  12. 제 10 항에 있어서,
    상기 패리티 정보와 연관된 상기 캐시 메모리 또는 공유 메모리의 상기 데이터가 클린하고, 상기 패리티 정보가 상기 오류 상태를 나타내면, 상기 캐시 메모리 또는 공유 메모리의 상기 데이터를 무효화시키고, 상기 데이터를 메인 메모리로부터 다시 페치하는 단계
    를 더 포함하는 컴퓨터 구현 방법.
  13. 그래픽 프로세싱 유닛(GPU)으로서,
    데이터를 저장하는 캐시 메모리와,
    상기 캐시 메모리와 통합되거나 이에 연결된 오류 검출 수정 회로 - 상기 오류 검출 수정 회로는 상기 캐시 메모리의 데이터에 대해 사전 결정된 단위(granularity)로 데이터 오류 수정 체크를 수행해서 오류 정보를 체크하도록 구성됨 -
    를 포함하는 GPU.
  14. 제 13 항에 있어서,
    상기 오류 검출 수정 회로는 상기 오류 정보에 기초해서 수정된 오류 및 수정되지 않은 오류를 보고하도록 구성되는
    GPU.
  15. 제 14 항에 있어서,
    수정되지 않은 오류 혹은 수정된 오류를 검출하는 것이 부하 저장 파이프라인 기능을 변경하지 않는
    GPU.
  16. 제 14 항에 있어서,
    상기 오류를 보고하는 동안에, 상기 캐시 메모리는 수정 불가능 오류, 데이터 수정 가능 오류(Data Correctible error) 및 태그 패리티 오류를 포함하는 오류 로깅 및 보고를 위해 레지스터에 연결되는
    GPU.
  17. 제 14 항에 있어서,
    상기 오류를 보고하는 것은 오류의 타입에 기초하며, 데이터 오류는 캐시 판독 또는 캐시 삭제(cache eviction) 동안에 발생하는
    GPU.
  18. 제 14 항에 있어서,
    수정된 오류는 프로그램 실행이 중단되는 일 없이 보고되는
    GPU.
  19. 제 16 항에 있어서,
    상기 레지스터는, 제 1 레벨 캐시 데이터 혹은 프로세싱 리소스를 포함한, 수정된 오류의 원인을 로깅하는
    GPU.
  20. 제 19 항에 있어서,
    수정 불가능한 오류(uncorrectible errors; UCE)인 경우, 캐시 판독 또는 캐시 삭제를 포함한 데이터 판독 동안에 UCE가 발생되면, 상기 데이터는 프로세싱 리소스로 반환되지만 오류 레지스터에도 상기 오류가 시그널링되는
    GPU.
KR1020200151875A 2019-11-15 2020-11-13 내장 메모리 및 컴퓨팅 요소의 오류 검출 및 제어를 행하는 시스템 및 방법 KR20210059651A (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201962935773P 2019-11-15 2019-11-15
US62/935,773 2019-11-15
US17/095,530 US20210149763A1 (en) 2019-11-15 2020-11-11 Systems and methods for error detection and control for embedded memory and compute elements
US17/095,530 2020-11-11

Publications (1)

Publication Number Publication Date
KR20210059651A true KR20210059651A (ko) 2021-05-25

Family

ID=75683542

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020200151875A KR20210059651A (ko) 2019-11-15 2020-11-13 내장 메모리 및 컴퓨팅 요소의 오류 검출 및 제어를 행하는 시스템 및 방법

Country Status (4)

Country Link
US (1) US20210149763A1 (ko)
KR (1) KR20210059651A (ko)
CN (1) CN112819680A (ko)
DE (1) DE102020129970A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20240018237A (ko) * 2022-08-02 2024-02-13 이화여자대학교 산학협력단 프로세서의 레지스터 캐시 인덱스 결정 방법 및 이를 수행하는 전자 장치

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11599376B1 (en) * 2020-02-20 2023-03-07 Amazon Technologies, Inc. Deep learning architecture for edge computing system
JP7419157B2 (ja) * 2020-05-13 2024-01-22 株式会社日立製作所 プログラム生成装置、並列演算デバイス、及び、並列演算デバイスに並列演算を実行させるためのコンピュータプログラム
EP4115299A1 (en) * 2021-01-08 2023-01-11 Menta System on chip architecture, interposer, fpga and method of design
US20240021237A1 (en) 2021-06-22 2024-01-18 Untether Ai Corporation Low-power static random access memory
US11990181B2 (en) 2021-06-22 2024-05-21 Untether Ai Corporation Low-power static random access memory
CN113590193B (zh) * 2021-07-12 2024-03-22 苏州仰思坪半导体有限公司 一种运算装置、方法、介质及计算设备
CN113778535B (zh) * 2021-08-10 2024-02-23 济南浪潮数据技术有限公司 一种云主机操作校验的方法、系统、设备和存储介质
US11899585B2 (en) 2021-12-24 2024-02-13 Western Digital Technologies, Inc. In-kernel caching for distributed cache
US11934663B2 (en) 2022-01-10 2024-03-19 Western Digital Technologies, Inc. Computational acceleration for distributed cache
US11797379B2 (en) * 2022-02-04 2023-10-24 Western Digital Technologies, Inc. Error detection and data recovery for distributed cache
US12066890B2 (en) * 2022-03-25 2024-08-20 Advanced Micro Devices, Inc. Error-tolerant memory system for machine learning systems
US12013752B2 (en) * 2022-06-16 2024-06-18 Advanced Micro Devices, Inc. Host-level error detection and fault correction
US20240069918A1 (en) * 2022-08-23 2024-02-29 Cornami, Inc. Method and system for replicating core configurations
US20240320072A1 (en) * 2023-03-20 2024-09-26 Google Llc Selective re-execution of instruction streams for reliability
US20240338275A1 (en) * 2023-04-07 2024-10-10 Western Digital Technologies, Inc. Data storage device configured for use with a generative-adversarial-network (gan)

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070271495A1 (en) * 2006-05-18 2007-11-22 Ian Shaeffer System to detect and identify errors in control information, read data and/or write data
US20110161783A1 (en) * 2009-12-28 2011-06-30 Dinesh Somasekhar Method and apparatus on direct matching of cache tags coded with error correcting codes (ecc)
EP2798471A4 (en) * 2011-12-30 2016-12-21 Intel Corp PROCESSORS, METHODS, SYSTEMS AND INSTRUCTIONS FOR ACCESSING A STRUCTURE
JP6275427B2 (ja) * 2013-09-06 2018-02-07 株式会社東芝 メモリ制御回路およびキャッシュメモリ

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20240018237A (ko) * 2022-08-02 2024-02-13 이화여자대학교 산학협력단 프로세서의 레지스터 캐시 인덱스 결정 방법 및 이를 수행하는 전자 장치

Also Published As

Publication number Publication date
DE102020129970A1 (de) 2021-05-20
US20210149763A1 (en) 2021-05-20
CN112819680A (zh) 2021-05-18

Similar Documents

Publication Publication Date Title
JP7567149B2 (ja) スパースデータへのシストリック算術
US11861761B2 (en) Graphics processing unit processing and caching improvements
US20210149763A1 (en) Systems and methods for error detection and control for embedded memory and compute elements
KR20210059649A (ko) 그래픽 프로세싱 유닛을 위한 데이터 국부성 향상 기법
US20230104845A1 (en) Graphics processor memory access architecture with address sorting
US20230088743A1 (en) Gathering payload from arbitrary registers for send messages in a graphics environment
WO2022271245A1 (en) Compression and interleaving of spatially proximate data
WO2022271227A1 (en) Dual pipeline parallel systolic array
WO2022271230A1 (en) Systolic array of arbitrary physical and logical depth
WO2022271228A1 (en) Register file for systolic array
US20210149677A1 (en) Enhanced processor functions for calculation
US20240087077A1 (en) Merging atomics to the same cache line
EP4109267B1 (en) Watchpoints for debugging in a graphics environment
EP4109391A1 (en) Opportunistic late depth testing to prevent stalling for overlapping cache lines
EP4109390A1 (en) Sort middle architecture for multiple graphics processing units
EP4124961A1 (en) Efficient compressed verbatim copy
US20230109990A1 (en) Modular gpu architecture for clients and servers
US20230095535A1 (en) Dynamic tile sequencing in graphic processing
US20220413916A1 (en) Multiple register allocation sizes for threads
KR20230000947A (ko) 희소성 메타데이터를 사용한 시스톨릭 어레이 전력 소비 감소
US20240220420A1 (en) Locally biased cache replacement for clustered cache architecture
US20230195471A1 (en) Signature-based automatic offload to hardware accelerators
US20230102538A1 (en) Providing native support for generic pointers in a graphics processing unit
EP4109385A1 (en) Typed unordered access view overloading on pixel pipeline
US20230101654A1 (en) Dynamic routing of texture loads in graphics processing

Legal Events

Date Code Title Description
A201 Request for examination