KR20210081228A - 제로 스킵에 의해 벡터 곱셈 덧셈을 하기 위한 명령어 및 로직 - Google Patents

제로 스킵에 의해 벡터 곱셈 덧셈을 하기 위한 명령어 및 로직 Download PDF

Info

Publication number
KR20210081228A
KR20210081228A KR1020200123706A KR20200123706A KR20210081228A KR 20210081228 A KR20210081228 A KR 20210081228A KR 1020200123706 A KR1020200123706 A KR 1020200123706A KR 20200123706 A KR20200123706 A KR 20200123706A KR 20210081228 A KR20210081228 A KR 20210081228A
Authority
KR
South Korea
Prior art keywords
hardware
instruction
instructions
graphics
logic
Prior art date
Application number
KR1020200123706A
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 KR20210081228A publication Critical patent/KR20210081228A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7807System on chip, i.e. computer system on a single chip; System in package, i.e. computer system on one or more chips in a single package
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7867Architectures of general purpose stored program computers comprising a single central processing unit with reconfigurable architecture
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30018Bit or string instructions
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30029Logical and Boolean instructions, e.g. XOR, NOT
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30069Instruction skipping instructions, e.g. SKIP
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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/3818Decoding for concurrent execution
    • G06F9/382Pipelined decoding, e.g. using predecoding
    • 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/3818Decoding for concurrent execution
    • G06F9/3822Parallel decoding, e.g. parallel decode units
    • 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/3824Operand accessing
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • 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
    • 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/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Computer Hardware Design (AREA)
  • Data Mining & Analysis (AREA)
  • Computing Systems (AREA)
  • Databases & Information Systems (AREA)
  • Algebra (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Multimedia (AREA)
  • Image Generation (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)
  • Complex Calculations (AREA)
  • Image Processing (AREA)

Abstract

본 명세서에 설명된 실시예는 희소 입력에 대한 자동 제로 스킵에 의해 벡터 곱셈 덧셈 명령어를 사용 가능하게 하는 명령어 및 관련 로직을 제공한다. 일 실시예는 프레디케이트 마스크, 반복 카운트 및 초기 피연산자 세트를 갖는 하드웨어 매크로 명령어를 페치하는 것을 포함하는 방법을 수행하는 로직을 포함하는 범용 그래픽 프로세서를 제공하는데, 여기서 초기 피연산자는 목적지 피연산자 및 다수의 소스 피연산자를 포함한다. 하드웨어 매크로 명령어는 매트릭스 세트와 관련된 입력 데이터에 대해 하나 이상의 곱/덧셈 연산을 수행하도록 구성된다.

Description

제로 스킵에 의해 벡터 곱셈 덧셈을 하기 위한 명령어 및 로직{INSTRUCTIONS AND LOGIC FOR VECTOR MULTIPLY ADD WITH ZERO SKIPPING}
매트릭스 곱셈은 고성능 컴퓨팅(HPC) 및 머신 학습(ML) 워크로드에서 수행되는 가장 일반적인 동작들 중 하나이다. 매트릭스 곱셈 연산은 흔히 결합된 곱셈-덧셈 명령어의 변형을 이용하여 프로세서 기능 유닛에서 수행된다. 이들 워크로드에 사용되는 매트릭스는 흔히 희소하기 때문에, 명령어에 제공되는 승수 및/또는 피승수는 제로일 가능성이 있고, 그 결과 누적 값이 제로가 된다. 따라서, 이러한 연산은 최종 결과에 영향을 주지 않고 바이패스될 수 있다.
따라서, 본 실시예들의 전술한 특징들을 자세하게 이해할 수 있는 방식으로, 위에서 간략하게 요약한 실시예들에 대한 보다 구체적인 설명은 실시예들을 참조할 수 있으며, 이들 중 일부는 첨부된 도면에 예시된다. 그러나, 첨부된 도면은 전형적인 실시예만 도시하며, 따라서 그 범위를 제한하는 것으로 간주되지 않는다는 점에 유의하라.
도 1은 일 실시예에 따른 프로세싱 시스템의 블록도이다.
도 2a 내지 도 2d는 본 명세서에 설명된 실시예에 의해 제공되는 컴퓨팅 시스템 및 그래픽 프로세서를 도시한다.
도 3a 내지 도 3c는 실시예에 의해 제공되는 추가 그래픽 프로세서 및 컴퓨팅 가속기 아키텍처의 블록도를 도시한다.
도 4는 일부 실시예에 따른 그래픽 프로세서의 그래픽 프로세싱 엔진의 블록도이다.
도 5a 및 도 5b는 실시예에 따른 그래픽 프로세서 코어에서 사용되는 프로세싱 요소들의 어레이를 포함하는 스레드 실행 로직(500)을 도시한다.
도 6은 일 실시예에 따른 추가 실행 유닛(600)을 도시한다.
도 7은 일부 실시예에 따른 그래픽 프로세서 명령어 포맷을 도시한 블록도이다.
도 8은 다른 실시예에 따른 그래픽 프로세서의 블록도이다.
도 9a 및 9b는 일부 실시예에 따른 그래픽 프로세서 커맨드 포맷 및 커맨드 시퀀스를 도시한다.
도 10은 일부 실시예에 따른 데이터 프로세싱 시스템에 대한 예시적인 그래픽 소프트웨어 아키텍처를 도시한다.
도 11a는 일 실시예에 따른 IP 코어 개발 시스템을 도시한 블록도이다.
도 11b는 본 명세서에 설명된 일부 실시예에 따른 집적 회로 패키지 어셈블리의 측단면도를 도시한다.
도 11c는 기판에 접속된 하드웨어 로직 칩렛의 복수의 유닛을 포함하는 패키지 어셈블리를 도시한다.
도 11d는 일 실시예에 따른 교환 가능한 칩렛을 포함하는 패키지 어셈블리를 도시한다.
도 12 및 도 13은 본 명세서에 설명된 다양한 실시예에 따른, 하나 이상의 IP 코어를 사용하여 제조될 수 있는 예시적인 집적 회로 및 관련 그래픽 프로세서를 도시한다.
도 14는 일 실시예에 따른 머신 학습 소프트웨어 스택을 도시한다.
도 15a 내지 15b는 예시적인 심층 신경망의 레이어를 도시한다.
도 16은 예시적인 순환 신경망을 도시한다.
도 17은 심층 신경망의 훈련 및 배치를 도시한다.
도 18은 분산 학습을 도시한 블록도이다.
도 19는 일 실시예에 따른 프로세싱 시스템의 블록도이다.
도 20은 소스 및 목적지 매트릭스에서의 일반 매트릭스 곱셈 연산을 도시한다.
도 21a 내지 21c는 희소 입력에 대한 제로 스킵에 의해 곱셈 덧셈 벡터 연산을 가능하게 하는 명령어 및 관련 하드웨어 로직을 도시한다.
도 22는 일 실시예에 따른, 희소 입력에 대한 명령어 확장 및 스킵을 도시한다.
도 23은 일 실시예에 따른 곱셈/덧셈/벡터 명령어의 실행을 용이하게 하는 방법을 도시한다.
도 24는 일 실시예에 따른, 그래픽 프로세서를 포함하는 컴퓨팅 장치의 블록도이다.
본 명세서에 설명된 실시예는 일반적으로 GEMM(General Matrix Multiply) 커널에 있는 다수의 곱셈-덧셈 명령어를 압축하는 새로운 명령어(madv)를 제공한다. 명령어를 실행할 때, 그래픽 프로세서 기능 유닛은 제로 값에 대해 브로드캐스트 소스를 비교하고 madv 명령어에 프레디케이트로 공급되는 skipMask 비트 맵을 생성할 수 있다. 프레디케이트는 madv 명령어를 확장하는 동안 개별 곱셈-덧셈 명령어를 스킵하는 데 사용된다. 명령어 인스턴스를 스킵하는 것은 희소 행렬 곱셈에 특히 유용하다. 확장 동안 스킵될 수 있는 명령어 반복 수는 입력의 희소성과 관련이 있다. HPC/ML 컴퓨팅 도메인에서 행렬의 희소성이 50%를 초과할 수 있으므로, 동적 곱셈-덧셈 명령어의 절반 이상이 바이패스될 수 있어, 이러한 워크로드에서 2배 이상의 속도가 향상된다. 또한, 그래픽 프로세서가 소비하는 운영 전력의 양과 함께 이러한 워크로드에서 소비되는 명령어 페치 및 디코딩 대역폭이 감소한다. 일반적으로, madv 명령어가 제공하는 이점과 주어진 입력 행렬의 제로의 수 사이에 직접적인 상관 관계가 관찰될 수 있다.
설명을 위해, 아래에 설명되는 다양한 실시예의 완전히 이해할 수 있도록 다수의 특정 세부 사항이 제시된다. 그러나, 실시예들이 이러한 특정 세부 사항 없이도 실시될 수 있음은 당업자에게 명백할 것이다. 다른 경우에, 공지의 구조 및 장치는 기본 원리를 모호하게 하는 것을 피하고 실시예들을 보다 철저하게 이해할 수 있도록 블록도 형태로 도시된다. 이하의 실시예 중 일부가 그래픽 프로세서를 참조하여 설명되지만, 본 명세서에 설명된 기술 및 개시 내용은 범용 처리 장치 또는 그래픽 처리 장치를 포함하는 다양한 유형의 회로 또는 반도체 장치에 적용될 수 있다. 본 명세서에서 "일 실시예" 또는 "실시예"에 대한 언급은 그 실시예와 함께 또는 이와 관련하여 설명된 특정한 특징, 구조, 또는 특성이 적어도 하나의 실시예에 포함될 수 있다는 것을 의미한다. 그러나, 명세서의 다양한 곳에 나타나는 "일 실시예에서"라는 문구는 반드시 모두 동일한 실시예를 지칭하는 것은 아니다.
다음의 설명 및 청구 범위에서, "결합된" 및 "연결된"이라는 용어가 그 파생어와 함께 사용될 수 있다. 이들 용어는 서로 동의어로 사용하고자 하는 것은 아니라는 것을 이해해야 한다. "결합된"은 서로 직접 물리적 또는 전기적 접촉을 하거나 하지 않을 수도 있는 둘 이상의 요소가 서로 협력하거나 상호작용한다는 것을 나타내는 데 사용된다. "연결된"은 서로 결합된 둘 이상의 요소 간의 통신 설정을 나타내는 데 사용된다.
다음의 설명에서, 도 1-13은 다양한 실시예를 통합하거나 이와 관련된 예시적인 데이터 프로세싱 시스템 및 그래픽 프로세서 로직의 개요를 제공한다. 도 14 내지 19는 머신 학습의 개요와 머신 학습에 대한 그래픽 및 병렬 프로세서의 적용 가능성을 제공한다. 도 20 내지 24는 다양한 실시예의 특정 세부 사항을 제공한다. 다음 실시예의 일부 측면은 그래픽 프로세서를 참조하여 설명되지만, 다른 측면들은 중앙 처리 장치(CPU)와 같은 범용 프로세서에 대해 설명된다. 유사한 기법 및 개시 내용은 많은 통합 코어 프로세서, GPU 클러스터 또는 FPGA(field programmable gate array)의 하나 이상의 인스턴스를 포함하지만 이에 제한되지 않는 다른 유형의 회로 또는 반도체 장치에 적용될 수 있다. 일반적으로, 개시 내용은 이미지(예컨대, 샘플, 픽셀), 정점 데이터 또는 기하학적 데이터를 조작 또는 처리하거나 머신 학습 및 고성능 컴퓨팅 애플리케이션을 위한 병렬 처리 동작을 수행하는 모든 프로세서 또는 머신에 적용가능하다.
시스템 개요
도 1은 일 실시예에 따른 프로세싱 시스템(100)의 블록도이다. 시스템(100)은 단일 프로세서 데스크탑 시스템, 멀티 프로세서 워크스테이션 시스템, 또는 많은 수의 프로세서(102) 또는 프로세서 코어(107)를 갖는 서버 시스템에서 사용될 수 있다. 일 실시예에서, 시스템(100)은 로컬 또는 광역 네트워크에 유선 또는 무선으로 연결될 수 있는 사물 인터넷(IoT) 내의 장치와 같은 모바일, 휴대형 또는 내장형 장치에 사용되는 시스템 온 칩(SoC) 집적 회로 내에 통합된 프로세싱 플랫폼이다.
일 실시예에서, 시스템(100)은 서버 기반 게이밍 플랫폼, 및 게임 및 미디어 콘솔, 모바일 게이밍 콘솔, 휴대형 게임 콘솔 또는 온라인 게임 콘솔을 포함하는 게임 콘솔을 포함하거나, 이들에 연결되거나, 이들 내에 통합될 수 있다. 일부 실시예에서, 시스템(100)은 휴대 전화, 스마트 폰, 태블릿 컴퓨팅 장치 또는 내부 저장 용량이 작은 랩탑과 같은 모바일 인터넷 연결 장치의 일부이다. 프로세싱 시스템(100)은 또한 스마트 와치 웨어러블 장치와 같은 웨어러블 장치; 실제 시각, 오디오 또는 촉각 경험을 보완하기 위한 시각적, 오디오 또는 촉각 출력을 제공하거나 텍스트, 오디오, 그래픽, 비디오, 홀로그램 이미지 또는 비디오 또는 촉각 피드백을 제공하는 증강 현실(AR) 또는 가상 현실(VR) 기능으로 강화된 스마트 아이웨어 또는 의복; 다른 증강 현실(AR) 장치; 또는 다른 가상 현실(VR) 장치를 포함하거나, 이들에 연결되거나, 이들 내에 통합될 수 있다. 일부 실시예에서, 프로세싱 시스템(100)은 텔레비전 또는 셋톱 박스 장치를 포함하거나 그 일부이다. 일 실시예에서, 시스템(100)은 버스, 트랙터 트레일러, 자동차, 모터 또는 전동 사이클, 비행기 또는 글라이더(또는 이들의 임의의 조합)와 같은 자율 주행 차량을 포함하거나, 이들에 연결되거나, 이들 내에 통합될 수 있다. 자율 주행 차량은 시스템(100)을 사용하여 차량 주위에서 감지된 환경을 처리할 수 있다.
일부 실시예에서, 하나 이상의 프로세서(102) 각각은 실행될 때 시스템 또는 사용자 소프트웨어에 대한 동작을 수행하는 명령어를 처리하는 하나 이상의 프로세서 코어(107)를 포함한다. 일부 실시예에서, 하나 이상의 프로세서 코어(107) 중 적어도 하나는 특정 명령어 세트(109)를 처리하도록 구성된다. 일부 실시예에서, 명령어 세트(109)는 CISC(Complex Instruction Set Computing), RISC(Reduced Instruction Set Computing), 또는 VLIW(Very Long Instruction Word)를 통한 컴퓨팅을 용이하게 할 수 있다. 하나 이상의 프로세서 코어(107)는 다른 명령어 세트의 에뮬레이션을 용이하게 하는 명령어를 포함할 수 있는 다른 명령어 세트(109)를 처리할 수 있다. 프로세서 코어(107)는 또한 DSP(Digital Signal Processor)와 같은 다른 프로세싱 장치를 포함할 수 있다.
일부 실시예에서, 프로세서(102)는 캐시 메모리(104)를 포함한다. 아키텍처에 따라, 프로세서(102)는 단일 내부 캐시 또는 내부 캐시의 복수 레벨을 가질 수 있다. 일부 실시예에서, 캐시 메모리는 프로세서(102)의 다양한 컴포넌트 사이에서 공유된다. 일부 실시예에서, 프로세서(102)는 또한 외부 캐시(예를 들어, 레벨 3(L3) 캐시 또는 LLC(Last Level Cache))(도시하지 않음)를 사용하고, 이들은 공지의 캐시 일관성 기술(cache coherency techniques)을 사용하여 프로세서 코어(107) 사이에서 공유될 수 있다. 레지스터 파일(106)이 프로세서(102)에 추가로 포함될 수 있으며, 상이한 타입의 데이터를 저장하는 상이한 타입의 레지스터(예를 들어, 정수 레지스터, 부동 소수점 레지스터, 상태 레지스터 및 명령어 포인터 레지스터)를 포함할 수 있다. 일부 레지스터는 범용 레지스터일 수 있지만, 다른 레지스터는 프로세서(102)의 설계에 특정될 수 있다.
일부 실시예에서, 하나 이상의 프로세서(들)(102)는 하나 이상의 인터페이스 버스(들)(110)와 연결되어 시스템(100)의 프로세서(102)와 다른 컴포넌트 사이에서 주소, 데이터 또는 제어 신호와 같은 통신 신호를 전송한다. 일 실시예에서, 인터페이스 버스(110)는 DMI(Direct Media Interface) 버스의 특정 버전과 같은 프로세서 버스일 수 있다. 그러나, 프로세서 버스는 DMI 버스로 한정되지 않으며, 하나 이상의 PCI(Peripheral Component Interconnect) 버스(예를 들어, PCI, PCI 익스프레스), 메모리 버스 또는 다른 타입의 인터페이스 버스를 포함할 수 있다. 일 실시예에서, 프로세서(들)(102)는 통합된 메모리 제어기(116) 및 플랫폼 제어기 허브(130)를 포함한다. 메모리 제어기(116)는 메모리 장치와 시스템(100)의 다른 컴포넌트 사이의 통신을 용이하게 하고, 플랫폼 제어기 허브(PCH)(130)는 로컬 I/O 버스를 통해 I/O 장치에 접속을 제공한다.
메모리 장치(120)는 DRAM(dynamic random-access memory) 장치, SRAM(static random-access memory) 장치, 플래시 메모리 장치, 상-변화 메모리 장치, 또는 프로세스 메모리로서 기능을 하기에 적절한 성능을 갖는 일부 다른 메모리 장치일 수 있다. 일 실시예에서, 메모리 장치(120)는 하나 이상의 프로세서(102)가 애플리케이션 또는 프로세스를 실행할 때 사용하는 데이터(122) 및 명령어(121)를 저장하는, 시스템(100)용 시스템 메모리로서 동작할 수 있다. 메모리 제어기(116)는 또한 그래픽 및 미디어 동작을 수행하기 위해 프로세서(102) 내의 하나 이상의 그래픽 프로세서(108)와 통신할 수 있는 선택적인 외부 그래픽 프로세서(118)와 연결된다. 일부 실시예에서, 그래픽, 미디어 및/또는 컴퓨팅 동작은 그래픽, 미디어 또는 컴퓨팅 동작의 특수 세트를 수행하도록 구성될 수 있는 보조 프로세서인 가속기(112)에 의해 지원될 수 있다. 예를 들어, 일 실시예에서, 가속기(112)는 머신 학습 또는 컴퓨팅 동작을 최적화하는 데 사용되는 매트릭스(matrix) 곱셈 가속기이다. 일 실시예에서, 가속기(112)는 그래픽 프로세서(108)와 협력하여 광선-추적(ray-tracing) 동작을 수행하는 데 사용될 수 있는 광선-추적 가속기이다. 일 실시예에서, 외부 가속기(119)가 가속기(112)를 대체하여 또는 가속기(112)와 함께 사용될 수 있다.
일부 실시예들에서, 디스플레이 장치(111)는 프로세서(들)(102)에 접속될 수 있다. 디스플레이 장치(111)는 모바일 전자 장치 또는 랩탑 장치에서와 같은 내부 디스플레이 장치 또는 디스플레이 인터페이스(예를 들어, DisplayPort 등)를 통해 부착된 외부 디스플레이 장치 중 하나 이상일 수 있다. 일 실시예에서, 디스플레이 장치(111)는 가상 현실(VR) 애플리케이션 또는 증강 현실(AR) 애플리케이션에서 사용하는 입체 디스플레이 장치와 같은 헤드 마운트 디스플레이(HMD)일 수 있다.
일부 실시예에서, 플랫폼 제어기 허브(130)는 주변 장치가 고속 I/O 버스를 통해 메모리 장치(120) 및 프로세서(102)에 접속될 수 있도록 한다. I/O 주변 장치는 오디오 제어기(146), 네트워크 제어기(134), 펌웨어 인터페이스(128), 무선 송수신기(126), 터치 센서(125), 데이터 저장 장치(124)(예를 들어, 비휘발성 메모리, 휘발성 메모리, 하드 디스크 드라이브, 플래시 메모리, NAND, 3D NAND, 3D XPoint 등)를 포함하지만, 이에 한정되는 것은 아니다. 데이터 저장 장치(124)는 저장 인터페이스(예를 들어, SATA)를 통해 또는 PCI 버스(예를 들어, PCI, PCI 익스프레스)와 같은 주변 장치 버스를 통해 연결될 수 있다. 터치 센서(125)는 터치 스크린 센서, 압력 센서 또는 지문 센서를 포함할 수 있다. 무선 송수신기(126)는 Wi-Fi 송수신기, 블루투스 송수신기, 또는 3G, 4G, 5G 또는 LTE(Long-Term Evolution) 송수신기와 같은 모바일 네트워크 송수신기일 수 있다. 펌웨어 인터페이스(128)는 시스템 펌웨어와의 통신을 가능하게 하고, 예를 들어, UEFI(unified extensible firmware interface)일 수 있다. 네트워크 제어기(134)는 유선 네트워크에 대한 네트워크 접속을 가능하게 할 수 있다. 일부 실시예에서, 고성능 네트워크 제어기(도시하지 않음)는 인터페이스 버스(110)에 연결된다. 일 실시예에서, 오디오 제어기(146)는 멀티-채널 고선명 오디오 제어기이다. 일 실시예에서, 시스템(100)은 레거시(예를 들어, PS/2(Personal System 2)) 장치를 시스템에 연결하기 위한 선택적인 레거시 I/O 제어기(140)를 포함한다. 플랫폼 제어기 허브(130)는 또한 키보드 및 마우스 조합(143), 카메라(144) 또는 다른 USB 입력 장치와 같은 하나 이상의 USB(Universal Serial Bus) 제어기(142) 연결 입력 장치에 접속할 수 있다.
다르게 구성된 다른 타입의 데이터 프로세싱 시스템이 또한 사용될 수 있기 때문에, 도시된 시스템(100)은 예시적이며 한정적이지 않다는 점이 이해될 것이다. 예를 들어, 메모리 제어기(116) 및 플랫폼 제어기 허브(130)의 경우는 외부 그래픽 프로세서(118)와 같은 별개의 외부 그래픽 프로세서에 통합될 수 있다. 일 실시예에서, 플랫폼 제어기 허브(130) 및/또는 메모리 제어기(116)는 하나 이상의 프로세서(들)(102)의 외부에 있을 수 있다. 예를 들어, 시스템(100)은 외부 메모리 제어기(116) 및 플랫폼 제어기 허브(130)를 포함할 수 있으며, 이는 프로세서(들)(102)와 통신하는 시스템 칩셋 내의 메모리 제어기 허브 및 주변 장치 제어기 허브로서 구성될 수 있다.
예를 들어, CPU, 메모리 및 다른 컴포넌트와 같은 컴포넌트가 장착된 회로 보드("슬레드(sleds)")가 사용되며 열적 성능을 향상시키도록 설계될 수 있다. 일부 예에서, 프로세서와 같은 프로세싱 컴포넌트는 슬레드의 위쪽에 위치하고, DIMM과 같은 니어 메모리(near memory)는 슬레드의 아래쪽에 위치한다. 이 설계에서 제공하는 향상된 공기 흐름으로 인해, 컴포넌트들은 일반적인 시스템에서보다 높은 주파수 및 전력 레벨에서 동작하여 성능이 향상될 수 있다. 또한, 슬레드는 랙(rack)에서 전원 및 데이터 통신 케이블과 임의로 결합하도록 구성되어 있으므로, 신속하게 제거, 업그레이드, 재설치 및/또는 교체될 수 있는 능력을 향상시킬 수 있다. 마찬가지로, 프로세서, 가속기, 메모리 및 데이터 저장 드라이브와 같이 슬레드 상에 위치하는 개별 컴포넌트는 서로의 간격이 넓어짐에 따라 쉽게 업그레이드할 수 있도록 구성된다. 예시적인 실시예에서, 컴포넌트는 진품임을 증명하기 위한 하드웨어 증명 특징을 추가로 포함한다.
데이터 센터는 이더넷 및 옴니 경로(Omni-Path)를 포함하는 복수의 다른 네트워크 아키텍처를 지원하는 단일 네트워크 아키텍처("패브릭(fabric)")를 이용할 수 있다. 슬레드는 광섬유를 통해 스위치에 연결될 수 있으며, 이는 전형적인 트위스트 페어 케이블링(예를 들어, 카테고리 5, 카테고리 5e, 카테고리 6 등)보다 높은 대역폭과 낮은 대기 시간을 제공한다. 높은 대역폭, 낮은 대기 시간 상호 접속 및 네트워크 아키텍처로 인해, 데이터 센터는, 사용 중에, 메모리, 가속기(예를 들어, GPU, 그래픽 가속기, FPGA, ASIC, 신경망 및/또는 인공 지능 가속기 등) 및 물리적으로 분리된 데이터 저장 드라이브와 같은 리소스를 풀링하고(pool), 필요에 기반하여 이들에게 컴퓨팅 리소스(예를 들어, 프로세서)를 제공하여 컴퓨팅 리소스가 로컬인 것처럼 풀링된 리소스에 액세스할 수 있도록 한다.
파워 서플라이 또는 전원은 본 명세서에 설명된 시스템(100) 또는 임의의 컴포넌트에 전압 및/또는 전류를 제공할 수 있다. 일 예에서, 파워 서플라이는 벽 콘센트에 플러그하기 위한 AC-DC(교류-직류) 어댑터를 포함한다. 이러한 AC 전력은 재생 가능 에너지(예를 들어, 태양광) 전원일 수 있다. 일 예에서, 전원은 외부 AC-DC 변환기와 같은 DC 전원을 포함한다. 일 예에서, 전원 또는 파워 서플라이는 충전 필드에 근접함으로써 충전하는 무선 충전 하드웨어를 포함한다. 일 예에서, 전원은 내부 배터리, 교류 전원, 모션 기반 전원, 태양광 전원 또는 연료 전지 전원을 포함할 수 있다.
도 2a 내지 도 2d는 본 명세서에 설명된 실시예에 의해 제공되는 컴퓨팅 시스템 및 그래픽 프로세서를 도시한다. 본 명세서에서 임의의 다른 도면의 요소와 동일한 참조 번호(또는 명칭)를 갖는 도 2a 내지 도 2d의 요소는 본 명세서의 다른 곳에 설명된 것과 유사한 방식으로 동작 또는 기능할 수 있지만, 이에 한정되는 것은 아니다.
도 2a는 하나 이상의 프로세서 코어(202A-202N), 통합된 메모리 제어기(214) 및 통합된 그래픽 프로세서(208)를 갖는 프로세서(200)의 실시예의 블록도이다. 프로세서(200)는 점선 박스로 표시된 추가 코어(202N)까지 포함하는 추가 코어를 포함할 수 있다. 프로세서 코어(202A-202N) 각각은 하나 이상의 내부 캐시 유닛(204A-204N)을 포함한다. 일부 실시예에서, 각각의 프로세서 코어는 또한 하나 이상의 공유 캐시 유닛(206)에 액세스할 수 있다. 내부 캐시 유닛(204A-204N) 및 공유 캐시 유닛(206)은 프로세서(200) 내의 캐시 메모리 계층 구조를 나타낸다. 캐시 메모리 계층 구조는 각각의 프로세서 코어 내의 명령어 및 데이터 캐시의 적어도 하나의 레벨과, 캐시의 레벨 2(L2), 레벨 3(L3), 레벨 4(L4) 또는 기타 레벨과 같은 공유된 중간-레벨 캐시의 하나 이상의 레벨을 포함할 수 있으며, 외부 메모리 이전의 최고 레벨의 캐시는 LLC로 분류된다. 일부 실시예에서, 캐시 일관성 로직은 다양한 캐시 유닛(206 및 204A-204N) 사이의 일관성을 유지시킨다.
일부 실시예에서, 프로세서(200)는 또한 하나 이상의 버스 제어기 유닛(216) 및 시스템 에이전트 코어(210)의 세트를 포함할 수 있다. 하나 이상의 버스 제어기 유닛(216)은 하나 이상의 PCI 또는 PCI 익스프레스 버스와 같은 주변 장치 버스 세트를 관리한다. 시스템 에이전트 코어(210)는 다양한 프로세서 컴포넌트에 대한 관리 기능을 제공한다. 일부 실시예에서, 시스템 에이전트 코어(210)는 다양한 외부 메모리 장치(도시하지 않음)에 대한 액세스를 관리하는 하나 이상의 통합된 메모리 제어기(214)를 포함한다.
일부 실시예에서, 하나 이상의 프로세서 코어(202A-202N)는 동시 멀티-스레딩에 대한 지원을 포함한다. 이러한 실시예에서, 시스템 에이전트 코어(210)는 멀티-스레드 프로세싱 동안 코어(202A-202N)를 조정하고 동작시키는 컴포넌트를 포함한다. 시스템 에이전트 코어(210)는 전력 제어 유닛(PCU)을 추가로 포함할 수 있고, 이 전력 제어 유닛(PCU)은 프로세서 코어(202A-202N) 및 그래픽 프로세서(208)의 전력 상태를 조절하는 로직 및 컴포넌트를 포함한다.
일부 실시예에서, 프로세서(200)는 그래픽 프로세싱 동작을 실행하는 그래픽 프로세서(208)를 추가로 포함한다. 일부 실시예에서, 그래픽 프로세서(208)는 공유 캐시 유닛(206)의 세트 및 하나 이상의 통합 메모리 제어기(214)를 포함하는 시스템 에이전트 코어(210)에 연결된다. 일부 실시예에서, 시스템 에이전트 코어(210)는 또한 그래픽 프로세서 출력을 하나 이상의 연결된 디스플레이로 구동하는 디스플레이 제어기(211)를 포함한다. 일부 실시예에서, 디스플레이 제어기(211)는 또한 적어도 하나의 상호 접속부를 통해 그래픽 프로세서에 연결된 별개의 모듈일 수 있거나, 그래픽 프로세서(208) 내에 통합될 수 있다.
일부 실시예에서, 링-기반 상호 접속 유닛(212)은 프로세서(200)의 내부 컴포넌트를 연결하는 데 사용된다. 그러나, 포인트-투-포인트(point-to-point) 상호 접속부, 스위칭된 상호 접속부, 또는 이 분야의 공지 기술을 포함한 다른 기술을 포함하는 대안적인 상호 접속 유닛이 사용될 수 있다. 일부 실시예에서, 그래픽 프로세서(208)는 I/O 링크(213)를 통해 링 상호 접속부(212)에 연결된다.
예시적인 I/O 링크(213)는 다양한 프로세서 컴포넌트와 eDRAM 모듈과 같은 고성능 내장형 메모리 모듈(218) 사이의 통신을 용이하게 하는 온 패키지 I/O 상호 접속부를 포함하는 복수의 다양한 I/O 상호 접속부 중 적어도 하나를 나타낸다. 일부 실시예에서, 각각의 프로세서 코어(202A-202N) 및 그래픽 프로세서(208)는 공유 LLC로서 내장형 메모리 모듈(218)을 사용할 수 있다.
일부 실시예에서, 프로세서 코어(202A-202N)는 동일한 명령어 세트 아키텍처를 실행하는 균질 코어이다. 다른 실시예에서, 프로세서 코어(202A-202N)는 명령어 세트 아키텍처(ISA)의 관점에서 비균질하며, 이 경우 프로세서 코어(202A-202N) 중 하나 이상은 제 1 명령어 세트를 실행하고, 다른 코어의 적어도 하나는 제 1 명령어 세트의 서브세트 또는 다른 명령어 세트를 실행한다. 일 실시예에서, 프로세서 코어(202A-202N)는 마이크로 아키텍처의 관점에서 비균질하며, 이 경우 비교적 많은 전력을 소비하는 하나 이상의 코어는 적은 전력을 소비하는 하나 이상의 전력 코어와 연결된다. 일 실시예에서, 프로세서 코어(202A-202N)는 컴퓨팅 능력의 관점에서 비균질하다. 부가적으로, 프로세서(200)는 다른 컴포넌트에 더하여 도시된 컴포넌트를 갖는, 하나 이상의 칩 상에 구현되거나 또는 SoC 집적 회로로서 구현될 수 있다.
도 2b는 본 명세서에서 설명된 일부 실시예에 따른 그래픽 프로세서 코어(219)의 하드웨어 로직의 블록도이다. 본 명세서에서의 임의의 다른 도면의 요소와 동일한 참조 번호(또는 명칭)를 갖는 도 2b의 요소는 본 명세서의 다른 곳에서 설명된 것과 유사한 방식으로 동작하거나 기능할 수 있지만, 이에 한정되는 것은 아니다. 코어 슬라이스로 종종 지칭되는 그래픽 프로세서 코어(219)는 모듈식 그래픽 프로세서 내의 하나 또는 복수의 그래픽 코어일 수 있다. 그래픽 프로세서 코어(219)는 하나의 그래픽 코어 슬라이스의 예시이며, 본 명세서에 설명된 그래픽 프로세서는 목표 전력 및 성능 포락선에 따라 복수의 그래픽 코어 슬라이스를 포함할 수 있다. 각각의 그래픽 프로세서 코어(219)는 범용 및 고정 기능 로직의 모듈식 블록을 포함하는, 서브-슬라이스라고도 지칭되는 복수의 서브-코어(221A-221F)와 연결된 고정 기능 블록(230)을 포함할 수 있다.
일부 실시예에서, 고정 기능 블록(230)은 그래픽 프로세서 코어(219)의 모든 서브-코어에 의해, 예를 들어 낮은 성능 및/또는 저전력 그래픽 프로세서 구현예에서 공유될 수 있는 기하(geometry)/고정 기능 파이프라인(231)을 포함한다. 다양한 실시예에서, 기하/고정 기능 파이프라인(231)은 3D 고정 기능 파이프라인(예를 들어, 후술되는 도 3 및 도 4에서와 같은 3D 파이프라인(312)), 비디오 프론트-엔드 유닛, 스레드 생성기 및 스레드 디스패처, 및 통합 반환 버퍼(예를 들어, 후술되는 도 4의 통합 반환 버퍼(418))를 관리하는 통합 반환 버퍼 관리자를 포함한다.
일 실시예에서, 고정 기능 블록(230)은 또한 그래픽 SoC 인터페이스(232), 그래픽 마이크로컨트롤러(233) 및 미디어 파이프라인(234)을 포함한다. 그래픽 SoC 인터페이스(232)는 그래픽 프로세서 코어(219)와 시스템 온 칩 집적 회로 내의 다른 프로세서 코어 사이의 인터페이스를 제공한다. 그래픽 마이크로컨트롤러(233)는 스레드 디스패치, 스케줄링 및 선점(pre-emption)을 포함하는 그래픽 프로세서 코어(219)의 다양한 기능을 관리하도록 구성될 수 있는 프로그램 가능한 서브-프로세서이다. 미디어 파이프라인(234)(예를 들어, 도 3 및 도 4의 미디어 파이프라인(316))은 이미지 및 비디오 데이터를 포함하는 멀티미디어 데이터의 디코딩, 인코딩, 사전 프로세싱 및/또는 사후 프로세싱을 용이하게 하는 로직을 포함한다. 미디어 파이프라인(234)은 서브-코어(221A-221F) 내의 컴퓨팅 또는 샘플링 로직에 대한 요청을 통해 미디어 동작을 구현한다.
일 실시예에서, SoC 인터페이스(232)는 그래픽 프로세서 코어(219)가 범용 애플리케이션 프로세서 코어(예를 들어, CPU), 및/또는 공유 LLC 메모리, 시스템 RAM 및/또는 내장형 온 칩 또는 온 패키지 DRAM과 같은 메모리 계층 구조 요소를 포함하는 SoC 내의 다른 컴포넌트와 통신할 수 있도록 한다. SoC 인터페이스(232)는 또한 카메라 이미징 파이프라인과 같은 SoC 내의 고정 기능 장치와의 통신을 가능하도록 할 수 있고, 그래픽 프로세서 코어(219)와 SoC 내의 CPU 사이에서 공유될 수 있는 전역 메모리 원자(global memory atomics)를 사용 및/또는 구현할 수 있도록 한다. SoC 인터페이스(232)는 또한 그래픽 프로세서 코어(219)에 대한 전력 관리 제어를 구현할 수 있고, 그래픽 프로세서 코어(219)의 클럭 도메인과 SoC 내의 다른 클럭 도메인 사이의 인터페이스를 가능하도록 할 수 있다. 일 실시예에서, SoC 인터페이스(232)는 그래픽 프로세서 내의 하나 이상의 그래픽 코어 각각에 커맨드 및 명령어를 제공하도록 구성된 커맨드 스트리머 및 전역 스레드 디스패처로부터 커맨드 버퍼의 수신을 가능하도록 한다. 커맨드 및 명령어는 미디어 동작이 수행되어야 할 때 미디어 파이프라인(234)에 디스패치되거나, 또는 그래픽 프로세싱 동작이 수행되어야 할 때 기하 및 고정 기능 파이프라인(예를 들어, 기하 및 고정 기능 파이프라인(231), 기하 및 고정 기능 파이프라인(237))으로 디스패치될 수 있다.
그래픽 마이크로컨트롤러(233)는 그래픽 프로세서 코어(219)에 대한 다양한 스케줄링 및 관리 태스크를 수행하도록 구성될 수 있다. 일 실시예에서, 그래픽 마이크로컨트롤러(233)는 서브-코어(221A-221F) 내의 실행 유닛(EU) 어레이(222A-222F, 224A-224F) 내의 다양한 그래픽 병렬 엔진 상에서 그래픽 수행하고 및/또는 워크로드 스케줄링을 계산할 수 있다. 이 스케줄링 모델에서, 그래픽 프로세서 코어(219)를 포함하는 SoC의 CPU 코어 상에서 실행되는 호스트 소프트웨어는 복수의 그래픽 프로세서 초인종(doorbell) 중 하나에 워크로드를 제출할 수 있으며, 이는 적절한 그래픽 엔진 상에서 스케줄링 동작을 호출한다. 스케줄링 동작은 다음에 실행할 워크로드를 결정하는 것, 커맨드 스트리머에 워크로드를 제출하는 것, 엔진에서 실행중인 기존 워크로드를 선점하는 것, 워크로드의 진행 상황을 모니터링하는 것, 및 워크로드 완료시 호스트 소프트웨어에 통지하는 것을 포함한다. 일 실시예에서, 그래픽 마이크로컨트롤러(233)는 또한 그래픽 프로세서 코어(219)의 저전력 또는 유휴 상태를 용이하게 하여, 저전력 상태 전이에 걸쳐 운영 체제 및/또는 운영 체제의 그래픽 드라이버 소프트웨어와는 독립적으로 그래픽 프로세서 코어(219)가 그래픽 프로세서 코어(219) 내의 레지스터를 저장 및 복원하는 능력을 갖도록 한다.
그래픽 프로세서 코어(219)는 도시된 서브-코어(221A-221F)보다 최대 N개까지 많거나 적은 모듈식 서브-코어를 가질 수 있다. N개의 서브-코어의 각각의 세트에 있어서, 그래픽 프로세서 코어(219)는 또한 공유 기능 로직(235), 공유 및/또는 캐시 메모리(236), 기하/고정 기능 파이프라인(237), 및 다양한 그래픽을 가속시키고 프로세싱 동작을 컴퓨팅하는 추가의 고정 기능 로직(238)을 포함할 수 있다. 공유 기능 로직(235)은 그래픽 프로세서 코어(219) 내의 N개의 서브-코어 각각에 의해 공유될 수 있는 도 4의 공유 기능 로직(420)과 관련된 로직 유닛(예를 들어, 샘플러, 산술 및/또는 스레드 간 통신 로직)을 포함할 수 있다. 공유 및/또는 캐시 메모리(236)는 그래픽 프로세서 코어(219) 내의 N개의 서브-코어(221A-221F)의 세트에 대한 LLC일 수 있으며, 복수의 서브-코어에 의해 액세스 가능한 공유 메모리로서 동작할 수도 있다. 기하/고정 기능 파이프라인(237)은 고정 기능 블록(230) 내의 기하/고정 기능 파이프라인(231) 대신에 포함될 수 있고 동일하거나 또는 유사한 로직 유닛을 포함할 수 있다.
일 실시예에서, 그래픽 프로세서 코어(219)는 그래픽 프로세서 코어(219)에 의해 사용되는 다양한 고정 기능 가속 로직을 포함할 수 있는 추가의 고정 기능 로직(238)을 포함한다. 일 실시예에서, 추가의 고정 기능 로직(238)은 위치 전용 셰이딩에서만 사용되는 추가의 기하 파이프라인을 포함한다. 위치 전용 셰이딩에는 2개의 기하 파이프라인, 즉, 기하/고정 기능 파이프라인(238, 231) 내의 풀(full) 기하 파이프라인 및 추가의 고정 기능 로직(238) 내에 포함될 수 있는 추가의 기하 파이프라인인 컬(cull) 파이프라인이 존재한다. 일 실시예에서 컬 파이프라인은 풀 기하 파이프라인의 축소 버전이다. 풀 파이프라인과 컬 파이프라인은 동일한 애플리케이션의 다른 인스턴스를 실행할 수 있으며 각 인스턴스는 별개의 컨텍스트를 갖는다. 위치 전용 셰이딩은 폐기된 삼각형의 긴 컬 구간(long cull runs)을 숨길 수 있어서, 일부 인스턴스에서 더 빨리 셰이딩이 완료되도록 할 수 있다. 예를 들어, 일 실시예에서, 컬 파이프라인은 정점의 위치 속성만을 페칭(fetch) 및 셰이딩(shade)하고, 프레임 버퍼에 대한 픽셀의 렌더링 및 래스터화를 수행하지 않으므로, 추가의 고정 기능 로직(238) 내의 컬 파이프라인 로직은 메인 애플리케이션과 병렬로 위치 셰이더를 실행할 수 있고, 일반적으로 풀 파이프라인보다 중요한 결과를 더 빠르게 생성한다. 컬 파이프라인은 생성된 중요한 결과를 사용하여 해당 삼각형이 컬링되는지 여부에 관계없이 모든 삼각형에 대한 가시성 정보를 계산할 수 있다. 풀 파이프라인(이 경우 재생 파이프라인이라고도 불릴 수 있음)은 가시성 정보를 사용하여 컬링된 삼각형을 생략하고 최종적으로 래스터화 단계로 전달된 가시적 삼각형만을 셰이딩할 수 있다.
일 실시예에서, 추가의 고정 기능 로직(238)은 머신 학습 훈련 또는 추론을 위한 최적화를 포함하는 구현을 위해 고정 기능 매트릭스 곱셈 로직과 같은 머신-학습 가속 로직을 포함할 수 있다.
각각의 그래픽 서브-코어(221A-221F)는 내부에 그래픽 파이프라인, 미디어 파이프라인, 또는 셰이더 프로그램에 의한 요청에 응답하여 그래픽, 미디어 및 컴퓨팅 동작을 수행하는 데 사용될 수 있는 실행 리소스 세트를 포함한다. 그래픽 서브-코어(221A-221F)는 복수의 EU 어레이(222A-222F, 224A-224F), 스레드 디스패치 및 스레드 간 통신(TD/IC) 로직(223A-223F), 3D(예를 들어, 텍스처) 샘플러(225A-225F), 미디어 샘플러(206A-206F), 셰이더 프로세서(227A-227F) 및 공유 로컬 메모리(SLM)(228A-228F)를 포함한다. EU 어레이(222A-222F, 224A-224F) 각각은 복수의 실행 유닛을 포함하는데, 이들은 그래픽, 미디어 또는 컴퓨팅 셰이더 프로그램을 포함하는 그래픽, 미디어 또는 컴퓨팅 동작의 제공 중에 부동 소수점 및 정수/고정 소수점 로직 연산을 수행할 수 있는 범용 그래픽 프로세싱 유닛이다. TD/IC 로직(223A-223F)은 서브-코어 내의 실행 유닛에 대한 로컬 스레드 디스패치 및 스레드 제어 동작을 수행하고, 서브-코어의 실행 유닛 상에서 실행되는 스레드 사이의 통신을 용이하게 한다. 3D 샘플러(225A-225F)는 텍스처 또는 다른 3D 그래픽 관련 데이터를 메모리로 판독할 수 있다. 3D 샘플러는 구성된 샘플 상태 및 주어진 텍스처와 관련된 텍스처 포맷에 따라 텍스처 데이터를 다르게 판독할 수 있다. 미디어 샘플러(206A-206F)는 미디어 데이터와 관련된 타입 및 포맷에 따라 유사한 판독 동작을 수행할 수 있다. 일 실시예에서, 각각의 그래픽 서브-코어(221A-221F)는 통합된 3D 및 미디어 샘플러를 교대로 포함할 수 있다. 각각의 서브-코어(221A-221F) 내의 실행 유닛 상에서 실행되는 스레드는 각각의 서브-코어 내의 공유 로컬 메모리(228A-228F)를 사용하여, 스레드 그룹 내에서 실행되는 스레드가 온 칩 메모리의 공통의 풀(pool)을 사용하여 실행될 수 있도록 한다.
도 2c는 멀티-코어 그룹(240A-240N)으로 배열된 그래픽 프로세싱 리소스의 전용 세트를 포함하는 그래픽 프로세싱 유닛(GPU)(239)을 도시한다. 단일 멀티-코어 그룹(240A)의 세부 사항만이 제공되지만, 다른 멀티-코어 그룹(240B-240N)은 동일 또는 유사한 그래픽 프로세싱 리소스의 세트를 구비할 수 있음을 이해할 것이다.
도시된 것과 같이, 멀티-코어 그룹(240A)은 그래픽 코어 세트(243), 텐서(tensor) 코어 세트(244) 및 광선 추적 코어 세트(245)를 포함할 수 있다. 스케줄러/디스패처(241)는 다양한 코어(243, 244, 245) 상에서 실행을 위해 그래픽 스레드를 스케줄링하고 디스패치한다. 레지스터 파일 세트(242)는 그래픽 스레드를 실행할 때 코어(243, 244, 245)에 의해 사용되는 피연산자 값을 저장한다. 이들은, 예를 들어 정수 값을 저장하는 정수 레지스터, 부동 소수점 값을 저장하는 부동 소수점 레지스터, 패킹된 데이터 요소(정수 및/또는 부동 소수점 데이터 요소)를 저장하는 벡터 레지스터 및 텐서/매트릭스 값을 저장하는 타일 레지스터를 포함할 수 있다. 일 실시예에서, 타일 레지스터는 벡터 레지스터의 결합된 세트로서 구현된다.
하나 이상의 결합된 레벨 1(L1) 캐시 및 공유 메모리 유닛(247)은 각각의 멀티-코어 그룹(240A) 내에 국부적으로 텍스쳐 데이터, 정점(vertex) 데이터, 픽셀 데이터, 광선 데이터, 경계 볼륨 데이터 등과 같은 그래픽 데이터를 저장한다. 하나 이상의 텍스처 유닛(247)은 또한 텍스처 매핑 및 샘플링과 같은 텍스처링 동작을 수행하기 위해 사용될 수 있다. 멀티-코어 그룹(240A-240N)의 전부 또는 일부에 의해 공유되는 레벨 2(L2) 캐시(253)는 복수의 동시 그래픽 스레드에 대한 그래픽 데이터 및/또는 명령어를 저장한다. 도시된 것과 같이, L2 캐시(253)는 복수의 멀티-코어 그룹(240A-240N)에 걸쳐 공유될 수 있다. 하나 이상의 메모리 제어기(248)는 GPU(239)를 시스템 메모리(예를 들어, DRAM) 및/또는 전용 그래픽 메모리(예를 들어, GDDR6 메모리)일 수 있는 메모리(249)에 연결한다.
입력/출력(I/O) 회로(250)는 GPU(239)를 디지털 신호 프로세서(DSP), 네트워크 제어기 또는 사용자 입력 장치와 같은 하나 이상의 I/O 장치(252)에 연결한다. 온 칩 상호 접속부는 I/O 장치(252)를 GPU(239) 및 메모리(249)에 연결하는 데 사용될 수 있다. I/O 회로(250)의 하나 이상의 I/O 메모리 관리 유닛(IOMMU)(251)은 I/O 장치(252)를 시스템 메모리(249)에 직접 연결한다. 일 실시예에서, IOMMU(251)는 가상 주소를 시스템 메모리(249)의 물리 주소에 매핑하기 위해 페이지 테이블의 복수의 세트를 관리한다. 이 실시예에서, I/O 장치(252), CPU(들)(246), GPU(들)(239)는 동일한 가상 주소 공간을 공유할 수 있다.
일 구현예에서, IOMMU(251)는 가상화를 지원한다. 이 경우, 게스트/그래픽 가상 주소를 게스트/그래픽 물리 주소에 매핑하기 위해 페이지 테이블의 제 1 세트를 관리하고, 게스트/그래픽 물리 주소를(시스템 메모리(249) 내의) 시스템/호스트 물리 주소에 매핑하기 위해 페이지 테이블의 제 2 세트를 관리할 수 있다. 페이지 테이블의 제 1 및 제 2 세트 각각의 기본 주소는 제어 레지스터에 저장될 수 있고, 컨텍스트 스위치 상에서 교환(swapped out)될 수 있다(예를 들어, 새로운 컨텍스트가 페이지 테이블의 관련된 세트에 대해 액세스할 수 있다). 도 2c에 도시되지 않았지만, 각각의 코어(243, 244, 245) 및/또는 멀티-코어 그룹(240A-240N)은 게스트 가상으로부터 게스트 물리로의 변환, 게스트 물리로부터 호스트 물리로의 변환 및 게스트 가상으로부터 호스트 물리로의 변환을 캐싱하기 위한 TLB(translation lookaside buffer)를 포함할 수 있다.
일 실시예에서, CPU(246), GPU(239) 및 I/O 장치(252)는 단일 반도체 칩 및/또는 칩 패키지 상에 통합된다. 도시된 메모리(249)는 동일한 칩 상에 통합될 수 있거나 또는 오프 칩 인터페이스를 통해 메모리 제어기(248)에 연결될 수 있다. 일 구현예에서, 메모리(249)는 다른 물리 시스템-레벨 메모리와 동일한 가상 주소 공간을 공유하는 GDDR6 메모리를 포함하지만, 본 발명의 기본 원리는 이러한 특정 구현예로 한정되지 않는다.
일 실시예에서, 텐서 코어(244)는 매트릭스 연산을 수행하도록 특별히 설계된 복수의 실행 유닛을 포함하는데, 이는 딥 러닝(deep learning) 동작을 수행하는 데 사용되는 기본 컴퓨팅 동작이다. 예를 들어, 동시 매트릭스 곱셈 동작은 신경망 훈련 및 추론에 사용될 수 있다. 텐서 코어(244)는 단-정밀도(single precision) 부동 소수점(예를 들어, 32 비트), 반정밀도(half-precision) 부동 소수점(예를 들어, 16 비트), 정수 워드(16 비트), 바이트(8 비트) 및 반-바이트(4 비트)를 포함하는 다양한 피연산자 정밀도를 사용하여 매트릭스 프로세싱을 수행할 수 있다. 일 실시예에서, 신경망 구현예는 각각의 렌더링된 장면의 특징을 추출하여, 잠재적으로는 복수의 프레임으로부터의 세부 사항을 결합하여, 고품질의 최종 이미지를 구성한다.
딥 러닝 구현예에서, 병렬 매트릭스 곱셈 작업은 텐서 코어(244) 상에서 실행되도록 스케줄링될 수 있다. 특히 신경망의 훈련은 상당한 수의 매트릭스 내적(dot product) 연산을 필요로 한다. 텐서 코어(244)는, N x N x N 매트릭스 곱셈의 내적 공식(formulation)을 처리하기 위해 적어도 N개의 내적 프로세싱 요소를 포함할 수 있다. 매트릭스의 곱셈을 시작하기 전에 하나의 전체 매트릭스가 타일 레지스터에 로딩되고, 두 번째 매트릭스의 적어도 하나의 열이 N주기 동안 각 주기마다 로딩된다. 각 주기마다 N개의 내적이 프로세싱된다.
매트릭스 요소는 16 비트 워드, 8 비트 바이트(예를 들어, INT8) 및 4 비트 반 바이트(예를 들어, INT4)를 포함하는, 특정 구현예에 따른 상이한 정밀도로 저장될 수 있다. 텐서 코어(244)에 대해 상이한 정밀도 모드가 특정되어 상이한 워크로드(예를 들어, 바이트 및 반-바이트로의 양자화를 허용할 수 있는 추론 워크로드와 같은)에 대해 가장 효율적인 정밀도가 사용되도록 보장할 수 있다.
일 실시예에서, 광선 추적 코어(245)는 실시간 광선 추적 및 비실시간 광선 추적 구현예 모두에 대한 광선 추적 동작을 가속화한다. 특히, 광선 추적 코어(245)는 경계 볼륨 계층 구조(BVH)를 사용하여 광선 탐색을 수행하고 BVH 볼륨 내에 둘러싸인 광선과 프리미티브(primitive) 사이의 교차를 식별하는 광선 탐색/교차 회로를 포함한다. 광선 추적 코어(245)는 또한(예를 들어, Z 버퍼 또는 유사한 배열을 사용하여) 깊이(depth) 테스트 및 컬링을 수행하는 회로를 포함할 수 있다. 일 구현예에서, 광선 추적 코어(245)는 본 명세서에서 설명된 이미지 노이즈 제거 기법과 협력하여 탐색 및 교차 동작을 수행하며, 그 중 적어도 일부는 텐서 코어(244) 상에서 실행될 수 있다. 예를 들어, 일 실시예에서, 텐서 코어(244)는 딥 러닝 신경망을 구현하여 광선 추적 코어(245)에 의해 생성된 프레임의 노이즈 제거를 수행한다. 그러나, CPU(들)(246), 그래픽 코어(243) 및/또는 광선 추적 코어(245)는 또한 노이즈 제거 및/또는 딥 러닝 알고리즘의 전체 또는 일부를 구현할 수 있다.
또한, 전술한 것과 같이, GPU(239)가 네트워크 또는 고속 상호 접속부를 통해 다른 컴퓨팅 장치에 연결된 컴퓨팅 장치에 존재하는 경우 노이즈 제거에 대한 분산된 접근법이 사용될 수 있다. 이 실시예에서, 상호 접속된 컴퓨팅 장치는 신경망 학습/훈련 데이터를 공유하여 전체 시스템이 상이한 타입의 이미지 프레임 및/또는 상이한 그래픽 애플리케이션에 대해 노이즈 제거를 수행하는 것을 학습하는 속도를 향상시킨다.
일 실시예에서, 광선 추적 코어(245)는 모든 BVH 탐색 및 광선-프리미티브 교차를 프로세싱하여 그래픽 코어(243)가 광선 당 수천 개의 명령어로 과부하되는 것을 방지한다. 일 실시예에서, 각각의 광선 추적 코어(245)는(예를 들어, 탐색 동작을 위한) 경계 박스 테스트를 수행하는 특수 회로의 제 1 세트와, 광선-삼각형 교차 테스트(예를 들어, 탐색된 광선을 교차시킴)를 수행하는 특수 회로의 제 2 세트를 포함한다. 따라서, 일 실시예에서, 멀티-코어 그룹(240A)은 단순히 광선 프로브를 발사할 수 있고, 광선 추적 코어(245)는 독립적으로 광선 탐색 및 교차를 수행하고 히트(hit) 데이터(예를 들어, 히트, 히트 없음, 복수 히트 등)를 스레드 컨텍스트에 반환한다. 광선 추적 코어(245)가 탐색 및 교차 동작을 수행하는 동안 다른 코어(243, 244)는 다른 그래픽을 수행하거나 또는 작업을 컴퓨팅하기 위해 자유로운 상태가 된다.
일 실시예에서, 각각의 광선 추적 코어(245)는 BVH 테스트 동작을 수행하는 탐색 유닛 및 광선-프리미티브 교차 테스트를 수행하는 교차 유닛을 포함한다. 교차 유닛은 "히트", "히트 없음" 또는 "복수 히트" 응답을 생성하여 적절한 스레드에 제공한다. 탐색 및 교차 동작 동안, 다른 코어(예를 들어, 그래픽 코어(243) 및 텐서 코어(244))의 실행 리소스는 다른 형태의 그래픽 작업을 수행하기 위해 자유로운 상태가 된다.
후술되는 하나의 특정 실시예에서, 작업이 그래픽 코어(243)와 광선 추적 코어(245) 사이에 분산되는 하이브리드 래스터화/광선 추적 접근법이 사용된다.
일 실시예에서, 광선 추적 코어(245)(및/또는 다른 코어(243, 244))는 광선-생성, 최근접 히트, 임의의 히트 및 비교차(miss) 셰이더뿐만 아니라 DispatchRays 커맨드를 포함하는 Microsoft의 DXR(DirectX Ray Tracing)과 같은 광선 추적 명령어 세트에 대한 하드웨어 지원을 포함하고, 이로써 각각의 객체에 대해 셰이더 및 텍스처의 고유 세트를 할당할 수 있다. 광선 추적 코어(245), 그래픽 코어(243) 및 텐서 코어(244)에 의해 지원될 수 있는 다른 광선 추적 플랫폼으로는 Vulkan 1.1.85가 있다. 그러나, 본 발명의 기본 원리는 임의의 특정 광선 추적 ISA로 한정되지 않는다는 점에 유의해야 한다.
일반적으로, 다양한 코어(245, 244, 243)는 광선 생성, 최근접 히트, 임의의 히트, 광선-프리미티브 교차, 프리미티브 당 및 계층 구조적 경계 박스 구성, 비교차, 방문 및 예외에 대한 명령어/기능을 포함하는 광선 추적 명령어 세트를 지원할 수 있다. 보다 구체적으로, 일 실시예는 다음 기능을 수행하는 광선 추적 명령어를 포함한다:
광선 생성 - 광선 생성 명령어는 각 픽셀, 샘플 또는 다른 사용자 정의 작업 할당에 대해 실행될 수 있다.
최근접 히트 - 최근접 히트 명령어는 장면 내에서 광선과 프리미티브의 최근접 교차점을 찾기 위해 실행될 수 있다.
임의의 히트 - 임의의 히트 명령어는 잠재적으로 새로운 최근접 교차점을 식별하기 위해 장면 내에서 광선과 프리미티브 사이의 복수의 교차를 식별한다.
교차 - 교차 명령어는 광선-프리미티브 교차 테스트를 수행하고 결과를 출력한다.
프리미티브 당 경계 박스 구성 - 이 명령어는 주어진 프리미티브 또는 프리미티브 그룹 주위에 경계 박스를 형성한다(예를 들어, 새로운 BVH 또는 다른 가속도 데이터 구조를 형성할 때).
비교차(Miss) - 이것은 광선이 장면 내의 모든 기하 또는 장면의 특정 영역과 교차하지 않는 것을 나타낸다.
방문 - 이것은 광선이 탐색할 자식 볼륨(children volume)을 나타낸다.
예외 - 이것은 다양한 타입의 예외 핸들러(예를 들어, 다양한 오류 조건에 대해 호출됨)를 포함한다.
도 2d는 본 명세서에 설명된 실시예에 따른, 그래픽 프로세서 및/또는 컴퓨팅 가속기로서 구성될 수 있는 범용 그래픽 프로세싱 유닛(GPGPU)(270)의 블록도이다. GPGPU(270)는 하나 이상의 시스템 및/또는 메모리 버스를 통해 호스트 프로세서(예를 들어, 하나 이상의 CPU(246)) 및 메모리(271, 272)와 상호 접속될 수 있다. 일 실시예에서, 메모리(271)는 하나 이상의 CPU(들)(246)와 공유될 수 있는 시스템 메모리인 반면, 메모리(272)는 GPGPU(270)에 전용인 장치 메모리이다. 일 실시예에서, GPGPU(270) 및 장치 메모리(272) 내의 컴포넌트는 하나 이상의 CPU(들)(246)에 액세스할 수 있는 메모리 주소에 매핑될 수 있다. 메모리(271, 272)로의 액세스는 메모리 제어기(268)를 통해 용이해질 수 있다. 일 실시예에서, 메모리 제어기(268)는 내부 DMA(direct memory access) 제어기(269)를 포함하거나, 또는 DMA 제어기에 의해 수행될 동작을 수행하기 위한 로직을 포함할 수 있다.
GPGPU(270)는 L2 캐시(253), L1 캐시(254), 명령어 캐시(255)를 포함하는 복수의 캐시 메모리와, 공유 메모리(256)를 포함하며, 공유 메모리의 적어도 일부는 또한 캐시 메모리로서 분할될 수 있다. GPGPU(270)는 또한 복수의 컴퓨팅 유닛(260A-260N)을 포함한다. 각각의 컴퓨팅 유닛(260A-260N)은 벡터 레지스터(261), 스칼라 레지스터(262), 벡터 로직 유닛(263) 및 스칼라 로직 유닛(264)의 세트를 포함한다. 컴퓨팅 유닛(260A-260N)은 또한 로컬 공유 메모리(265) 및 프로그램 카운터(266)를 포함할 수 있다. 컴퓨팅 유닛(260A-260N)은 상수 캐시(267)와 연결될 수 있으며, 상수 캐시는 상수 데이터를 저장하는 데 사용될 수 있으며, 상수 데이터는 GPGPU(270) 상에서 실행되는 커널 또는 셰이더 프로그램의 실행 동안 변경되지 않는 데이터이다. 일 실시예에서, 상수 캐시(267)는 스칼라 데이터 캐시이고 캐싱된 데이터는 스칼라 레지스터(262)로 직접 페치(fetch)될 수 있다.
동작하는 동안, 하나 이상의 CPU(들)(246)는 액세스 가능한 주소 공간으로 매핑된 GPGPU(270)의 레지스터 또는 메모리에 커맨드를 기록할 수 있다. 커맨드 프로세서(257)는 레지스터 또는 메모리로부터 커맨드를 판독하고 그 커맨드가 GPGPU(270) 내에서 어떻게 처리될지를 결정할 수 있다. 이후 스레드 디스패처(258)는 스레드를 컴퓨팅 유닛(260A-260N)에 디스패치하여 이들 커맨드를 수행하는데 이용될 수 있다. 각각의 컴퓨팅 유닛(260A-260N)은 다른 컴퓨팅 유닛으로부터 독립적으로 스레드를 실행할 수 있다. 또한, 각각의 컴퓨팅 유닛(260A-260N)은 조건부 계산이 가능하도록 독립적으로 구성될 수 있고 계산 결과를 조건부로 메모리에 출력할 수 있다. 커맨드 프로세서(257)는 제출된 커맨드가 완료될 때 하나 이상의 CPU(246)를 인터럽트할 수 있다.
도 3a 내지 도 3c는 본 명세서에 설명된 실시예에 의해 제공되는 추가 그래픽 프로세서 및 컴퓨팅 가속기 아키텍처의 블록도를 도시한다. 본 명세서에서 임의의 다른 도면의 요소와 동일한 참조 번호(또는 명칭)를 갖는 도 3a 내지 3c의 요소는 본 명세서의 다른 곳에 설명된 것과 유사한 방식으로 동작 또는 기능할 수 있지만, 이에 한정되는 것은 아니다.
도 3a는, 개별 그래픽 프로세싱 유닛일 수 있거나, 또는 복수의 프로세싱 코어 또는 메모리 장치나 네트워크 인터페이스와 같지만 이에 한정되지 않는 다른 반도체 장치와 통합된 그래픽 프로세서일 수 있는 그래픽 프로세서(300)의 블록도이다. 일부 실시예에서, 그래픽 프로세서는 메모리 매핑된 I/O 인터페이스를 통해 그래픽 프로세서 상의 레지스터와 프로세서 메모리에 위치된 커맨드로 통신한다. 일부 실시예에서, 그래픽 프로세서(300)는 메모리에 액세스하는 메모리 인터페이스(314)를 포함한다. 메모리 인터페이스(314)는 로컬 메모리, 하나 이상의 내부 캐시, 하나 이상의 공유 외부 캐시 및/또는 시스템 메모리에 대한 인터페이스일 수 있다.
일부 실시예에서, 그래픽 프로세서(300)는 또한 디스플레이 출력 데이터를 디스플레이 장치(318)로 구동하는 디스플레이 제어기(302)를 포함한다. 디스플레이 제어기(302)는 디스플레이를 위한 하나 이상의 오버레이 평면 및 비디오의 복수 레이어 또는 사용자 인터페이스 요소의 구성을 위한 하드웨어를 포함한다. 디스플레이 장치(318)는 내부 또는 외부 디스플레이 장치일 수 있다. 일 실시예에서, 디스플레이 장치(318)는 가상 현실(VR) 디스플레이 장치 또는 증강 현실(AR) 디스플레이 장치와 같은 헤드 마운트 디스플레이 장치이다. 일부 실시예에서, 그래픽 프로세서(300)는 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 포맷을 포함하지만 이에 한정되지 않는, 하나 이상의 미디어 인코딩 포맷으로, 그 포맷으로부터 또는 그 포맷 사이에서 미디어를 인코딩, 디코딩 또는 트랜스코딩하는 비디오 코덱 엔진(306)을 포함한다.
일부 실시예에서, 그래픽 프로세서(300)는, 예를 들어 비트-경계 블록 전송을 포함하는 2차원(2D) 래스터화 동작을 수행하는 블록 이미지 전송(BLIT) 엔진(304)을 포함한다. 그러나, 일 실시예에서, 2D 그래픽 동작은 그래픽 프로세싱 엔진(GPE)(310)의 하나 이상의 컴포넌트를 사용하여 수행된다. 일부 실시예에서, GPE(310)는 3차원(3D) 그래픽 동작 및 미디어 동작을 포함하는 그래픽 동작을 수행하는 컴퓨팅 엔진이다.
일부 실시예에서, GPE(310)는 3D 프리미티브 형상(예를 들어, 직사각형, 삼각형 등)에 작용하는 프로세싱 기능을 사용하여 3차원 이미지 및 장면을 렌더링하는 것과 같은 3D 동작을 수행하는 3D 파이프라인(312)을 포함한다. 3D 파이프라인(312)은 요소 내에서 다양한 태스크를 수행하고/하거나 3D/미디어 서브-시스템(315)에 실행 스레드를 생성하는, 프로그램 가능하고 고정된 기능 요소를 포함한다. 3D 파이프라인(312)은 미디어 동작을 수행하기 위해 사용될 수 있지만, GPE(310)의 실시예는 또한, 비디오 사후-프로세싱 및 이미지 향상과 같은 미디어 동작을 수행하는데 특히 사용되는 미디어 파이프라인(316)을 포함한다.
일부 실시예에서, 미디어 파이프라인(316)은 비디오 코덱 엔진(306) 대신 또는 비디오 코덱 엔진(306)을 위해 비디오 디코딩 가속, 비디오 디인터레이싱 및 비디오 인코딩 가속과 같은 하나 이상의 특수 미디어 동작을 수행하는 고정된 기능 또는 프로그램 가능한 로직 유닛을 포함한다. 일부 실시예에서, 미디어 파이프라인(316)은 3D/미디어 서브-시스템(315) 상에서 실행되는 스레드를 생성하는 스레드 생성 유닛을 추가로 포함한다. 생성된 스레드는 3D/미디어 서브-시스템(315)에 포함된 하나 이상의 그래픽 실행 유닛 상에서 미디어 동작에 대한 계산을 수행한다.
일부 실시예에서, 3D/미디어 서브-시스템(315)은 3D 파이프라인(312) 및 미디어 파이프라인(316)에 의해 생성된 스레드를 실행하는 로직을 포함한다. 일 실시예에서, 파이프라인은 스레드 실행 요청을 3D/미디어 서브-시스템(315)에 전송하고, 3D/미디어 서브-시스템은 사용 가능한 스레드 실행 리소스에 대한 다양한 요청을 중재 및 발송하는 스레드 디스패치 로직을 포함한다. 실행 리소스는 3D 및 미디어 스레드를 프로세싱하는 그래픽 실행 유닛의 어레이를 포함한다. 일부 실시예에서, 3D/미디어 서브-시스템(315)은 스레드 명령어 및 데이터를 위한 하나 이상의 내부 캐시를 포함한다. 일부 실시예에서, 서브-시스템은 또한 스레드 사이에서 데이터를 공유하고 출력 데이터를 저장하는 레지스터 및 어드레서블(addressable) 메모리를 포함하는 공유 메모리를 포함한다.
도 3b는 본 명세서에서 설명된 실시예에 따른, 타일형 아키텍처를 갖는 그래픽 프로세서(320)를 도시한다. 일 실시예에서, 그래픽 프로세서(320)는 그래픽 엔진 타일(310A-310D) 내에 도 3a의 그래픽 프로세싱 엔진(310)의 복수의 인스턴스를 갖는 그래픽 프로세싱 엔진 클러스터(322)를 포함한다. 각각의 그래픽 엔진 타일(310A-310D)은 타일 상호 접속부(323A-323F) 세트를 통해 상호 접속될 수 있다. 각각의 그래픽 엔진 타일(310A-310D)은 또한 메모리 상호 접속부(325A-325D)를 통해 메모리 모듈 또는 메모리 장치(326A-326D)에 연결될 수 있다. 메모리 장치(326A-326D)는 임의의 그래픽 메모리 기술을 사용할 수 있다. 예를 들어, 메모리 장치(326A-326D)는 GDDR 메모리일 수 있다. 일 실시예에서, 메모리 장치(326A-326D)는 각각의 그래픽 엔진 타일(310A-310D)과 함께 온 다이(on-die) 형식일 수 있는 고대역폭 메모리(HBM) 모듈이다. 일 실시예에서, 메모리 장치(326A-326D)는 각각의 그래픽 엔진 타일(310A-310D) 위에 적층될 수 있는 적층 메모리 장치이다. 일 실시예에서, 각각의 그래픽 엔진 타일(310A-310D) 및 관련 메모리(326A-326D)는 도 11b 내지 도 11d에서 더 상세히 설명되는 것과 같이, 베이스 다이 또는 베이스 기판에 본딩된 개별 칩렛(chiplet) 상에 위치한다.
그래픽 프로세싱 엔진 클러스터(322)는 온-칩 또는 온-패키지 패브릭 상호 접속부(324)와 접속할 수 있다. 패브릭 상호 접속부(324)는 그래픽 엔진 타일(310A-310D)과 비디오 코덱(306) 및 하나 이상의 카피 엔진(304)과 같은 컴포넌트 사이의 통신을 가능하게 할 수 있다. 카피 엔진(304)은 메모리 장치(326A-326D)와 그래픽 프로세서(320)의 외부에 있는 메모리(예를 들어, 시스템 메모리)로부터, 이들로, 또는 이들 사이에서 데이터를 이동시키기 위해 사용될 수 있다. 패브릭 상호 접속부(324)는 또한 그래픽 엔진 타일(310A-310D)을 상호 접속하는 데 사용될 수 있다. 그래픽 프로세서(320)는 외부 디스플레이 장치(318)와의 접속을 가능하게 하는 디스플레이 제어기(302)를 선택적으로 포함할 수 있다. 그래픽 프로세서는 또한 그래픽 또는 컴퓨팅 가속기로서 구성될 수 있다. 가속기 구성에서, 디스플레이 제어기(302) 및 디스플레이 장치(318)는 생략될 수 있다.
그래픽 프로세서(320)는 호스트 인터페이스(328)를 통해 호스트 시스템에 접속될 수 있다. 호스트 인터페이스(328)는 그래픽 프로세서(320), 시스템 메모리 및/또는 다른 시스템 컴포넌트 사이의 통신을 가능하게 할 수 있다. 호스트 인터페이스(328)는, 예를 들어 PCI 익스프레스 버스 또는 호스트 시스템 인터페이스의 다른 타입일 수 있다.
도 3c는 본 명세서에서 설명된 실시예에 따른 컴퓨팅 가속기(330)를 도시한다. 컴퓨팅 가속기(330)는 도 3b의 그래픽 프로세서(320)와 구조적 유사성을 가질 수 있고 컴퓨팅 가속에 최적화되어 있다. 컴퓨팅 엔진 클러스터(332)는 병렬 또는 벡터 기반 범용 컴퓨팅 동작에 최적화된 실행 로직을 포함하는 컴퓨팅 엔진 타일(340A-340D) 세트를 포함할 수 있다. 일 실시예에서 하나 이상의 컴퓨팅 엔진 타일(340A-340D)은 미디어 가속을 수행하는 로직을 포함할 수 있지만, 일부 실시예에서, 컴퓨팅 엔진 타일(340A-340D)은 고정 기능 그래픽 프로세싱 로직을 포함하지 않는다. 컴퓨팅 엔진 타일(340A-340D)은 메모리 상호 접속부(325A-325D)를 통해 메모리(326A-326D)에 접속할 수 있다. 메모리(326A-326D) 및 메모리 상호 접속부(325A-325D)는 그래픽 프로세서(320)에서와 같이 유사한 기술일 수 있거나 또는 상이할 수 있다. 그래픽 컴퓨팅 엔진 타일(340A-340D)은 또한 타일 상호 접속부(323A-323F) 세트를 통해 상호 접속될 수 있고 패브릭 상호 접속부(324)에 접속될 수 있고 및/또는 패브릭 상호 접속부(324)에 의해 상호 접속될 수 있다. 일 실시예에서, 컴퓨팅 가속기(330)는 장치 전체의 캐시로 구성될 수 있는 큰 L3 캐시(336)를 포함한다. 컴퓨팅 가속기(330)는 또한 도 3b의 그래픽 프로세서(320)와 유사한 방식으로 호스트 인터페이스(328)를 통해 호스트 프로세서 및 메모리에 접속될 수 있다.
그래픽 프로세싱 엔진
도 4는 일부 실시예에 따른 그래픽 프로세서의 그래픽 프로세싱 엔진(410)의 블록도이다. 일 실시예에서, 그래픽 프로세싱 엔진(GPE)(410)은 도 3a에 도시된 GPE(310)의 버전이고, 또한 도 3b의 그래픽 엔진 타일(310A-310D)을 나타낼 수도 있다. 본 명세서에서 임의의 다른 도면의 요소와 동일한 참조 번호(또는 명칭)를 갖는 도 4의 요소는 본 명세서의 다른 곳에 설명된 것과 유사한 방식으로 동작 또는 기능할 수 있지만, 이에 한정되는 것은 아니다. 예를 들어, 도 3a의 3D 파이프라인(312) 및 미디어 파이프라인(316)이 도시되어 있다. 미디어 파이프라인(316)은 GPE(410)의 일부 실시예에서 선택적이고, GPE(410) 내에 명시적으로 포함되지 않을 수 있다. 예를 들어, 적어도 하나의 실시예에서, 별도의 미디어 및/또는 이미지 프로세서가 GPE(410)에 연결된다.
일부 실시예에서, GPE(410)는 3D 파이프라인(312) 및/또는 미디어 파이프라인(316)에 커맨드 스트림을 제공하는 커맨드 스트리머(403)에 연결되거나, 이를 포함한다. 일부 실시예에서, 커맨드 스트리머(403)는 메모리에 연결되는데, 이 메모리는 시스템 메모리 또는 하나 이상의 내부 캐시 메모리 및 공유 캐시 메모리일 수 있다. 일부 실시예에서, 커맨드 스트리머(403)는 메모리로부터 커맨드를 수신하고 그 커맨드를 3D 파이프라인(312) 및/또는 미디어 파이프라인(316)으로 전송한다. 커맨드는 링 버퍼로부터 페치된 지시(directive)이며, 링 버퍼는 3D 파이프라인(312) 및 미디어 파이프라인(316)에 대한 커맨드를 저장한다. 일 실시예에서, 링 버퍼는 복수의 커맨드의 배치(batch)를 저장하는 배치 커맨드 버퍼를 추가로 포함할 수 있다. 3D 파이프라인(312)에 대한 커맨드는 또한 3D 파이프라인(312)에 대한 정점 및 기하 데이터 및/또는 미디어 파이프라인(316)에 대한 이미지 데이터 및 메모리 객체와 같지만 이에 한정되지 않는, 메모리에 저장된 데이터에 대한 참조를 포함할 수 있다. 3D 파이프라인(312)과 미디어 파이프라인(316)은 각각의 파이프라인 내에서 로직을 통해 동작을 수행하거나 또는 하나 이상의 실행 스레드를 그래픽 코어 어레이(414)에 디스패치함으로써 커맨드 및 데이터를 프로세싱한다. 일 실시예에서 그래픽 코어 어레이(414)는 그래픽 코어(예를 들어, 그래픽 코어(들)(415A), 그래픽 코어(들)(415B))의 하나 이상의 블록을 포함하고, 각각의 블록은 하나 이상의 그래픽 코어를 포함한다. 각각의 그래픽 코어는 그래픽 및 컴퓨팅 동작을 수행하는 범용 및 그래픽용 실행 로직 뿐 아니라, 고정 기능 텍스처 프로세싱 및/또는 머신 학습 및 인공 지능 가속 로직을 포함하는 그래픽 실행 리소스 세트를 포함한다.
다양한 실시예에서, 3D 파이프라인(312)은 명령어를 프로세싱하고 그래픽 코어 어레이(414)에 실행 스레드를 디스패칭함으로써 정점 셰이더, 기하 셰이더, 픽셀 셰이더, 프래그먼트 셰이더, 컴퓨팅 셰이더 또는 다른 셰이더 프로그램과 같은 하나 이상의 셰이더 프로그램을 프로세싱하는 고정 기능 및 프로그램 가능한 로직을 포함할 수 있다. 그래픽 코어 어레이(414)는 이들 셰이더 프로그램을 프로세싱하는 데 사용되는 실행 리소스의 통합 블록을 제공한다. 그래픽 코어 어레이(414)의 그래픽 코어(들)(415A, 415B) 내의 다목적 실행 로직(예를 들어, 실행 유닛)은 다양한 3D API 셰이더 언어에 대해 지원하고 복수의 셰이더와 관련된 복수의 동시 실행 스레드를 실행할 수 있다.
일부 실시예에서, 그래픽 코어 어레이(414)는 비디오 및/또는 이미지 프로세싱과 같은 미디어 기능을 수행하는 실행 로직을 포함한다. 일 실시예에서, 실행 유닛은 그래픽 프로세싱 동작 외에 병렬 범용 계산 동작을 수행하도록 프로그램될 수 있는 범용 로직을 포함한다. 범용 로직은 도 1의 프로세서 코어(들)(107) 또는 도 2a에서와 같이 코어(202A-202N) 내에서 범용 로직과 병렬로 또는 함께 프로세싱 동작을 수행할 수 있다.
그래픽 코어 어레이(414) 상에서 실행되는 스레드에 의해 생성된 출력 데이터는 데이터를 통합 반환 버퍼(URB)(418)의 메모리로 출력할 수 있다. URB(418)는 복수의 스레드에 대한 데이터를 저장할 수 있다. 일부 실시예에서, URB(418)는 그래픽 코어 어레이(414) 상에서 실행되는 상이한 스레드 사이에서 데이터를 전송하는 데 사용될 수 있다. 일부 실시예에서, URB(418)는 그래픽 코어 어레이 상의 스레드와 공유 기능 로직(420) 내의 고정 기능 로직 사이의 동기화를 위해 추가적으로 사용될 수 있다.
일부 실시예에서, 그래픽 코어 어레이(414)는 확장 가능하므로, 어레이는 가변 개수의 그래픽 코어를 포함하고, 각각은 GPE(410)의 목표 전력 및 성능 레벨에 따라 가변 개수의 실행 유닛을 갖는다. 일 실시예에서, 실행 리소스는 동적으로 확장 가능하므로 실행 리소스는 필요에 따라 활성화 또는 비활성화될 수 있다.
그래픽 코어 어레이(414)는 그래픽 코어 어레이의 그래픽 코어들 사이에서 공유되는 복수의 리소스를 포함하는 공유 기능 로직(420)과 연결된다. 공유 기능 로직(420) 내의 공유 기능은 그래픽 코어 어레이(414)에 특수 보충 기능을 제공하는 하드웨어 로직 유닛이다. 다양한 실시예에서, 공유 기능 로직(420)은 샘플러(421), 산술(422) 및 스레드 간 통신(ITC)(423) 로직을 포함하지만 이에 한정되는 것은 아니다. 부가적으로, 일부 실시예는 공유 기능 로직(420) 내에 하나 이상의 캐시(들)(425)를 구현한다.
공유 기능은 적어도 주어진 특수 기능에 대한 요구가 그래픽 코어 어레이(414) 내에 포함시키기에 불충분한 경우에 구현된다. 대신에, 그 특수 기능의 단일 인스턴스화는 공유 기능 로직(420)의 독립된 엔티티로서 구현되고, 그래픽 코어 어레이(414) 내의 실행 리소스 사이에서 공유된다. 그래픽 코어 어레이(414) 사이에서 공유되고 그래픽 코어 어레이(414) 내에 포함되는 기능의 정확한 세트는 실시예에 따라 변한다. 일부 실시예에서, 그래픽 코어 어레이(414)에 의해 광범위하게 사용되는 공유 기능 로직(420) 내의 특정 공유 기능은 그래픽 코어 어레이(414) 내의 공유 기능 로직(416) 내에 포함될 수 있다. 다양한 실시예에서, 그래픽 코어 어레이(414) 내의 공유 기능 로직(416)은 공유 기능 로직(420) 내의 일부 또는 모든 로직을 포함할 수 있다. 일 실시예에서, 공유 기능 로직(420) 내의 모든 로직 요소는 그래픽 코어 어레이(414)의 공유 기능 로직(416) 내에서 중복될 수 있다. 일 실시예에서, 공유 기능 로직(420)은 그래픽 코어 어레이(414) 내의 공유 기능 로직(416)을 위해 배제된다.
실행 유닛
도 5a 및 도 5b는 본 명세서에 설명된 실시예에 따른 그래픽 프로세서 코어에서 사용되는 프로세싱 요소들의 어레이를 포함하는 스레드 실행 로직(500)을 도시한다. 본 명세서에서 임의의 다른 도면의 요소와 동일한 참조 번호(또는 명칭)를 갖는 도 5a 및 도 5b의 요소는 본 명세서의 다른 곳에 설명된 것과 유사한 방식으로 동작 또는 기능할 수 있지만, 이에 한정되는 것은 아니다. 도 5a 및 도 5b는 스레드 실행 로직(500)의 개요를 도시하며, 이는 도 2b의 각각의 서브-코어(221A-221F)로 도시된 하드웨어 로직을 나타낼 수 있다. 도 5a는 범용 그래픽 프로세서 내의 실행 유닛을 도시하고, 도 5b는 컴퓨팅 가속기 내에서 사용될 수 있는 실행 유닛을 도시한다.
도 5a에 도시된 것과 같이, 일부 실시예에서 스레드 실행 로직(500)은 셰이더 프로세서(502), 스레드 디스패처(504), 명령어 캐시(506), 복수의 실행 유닛(508A-508N)을 포함하는 확장 가능한 실행 유닛 어레이, 샘플러(510), 공유 로컬 메모리(511), 데이터 캐시(512), 및 데이터 포트(514)를 포함한다. 일 실시예에서, 확장 가능한 실행 유닛 어레이는 워크로드의 계산 요구 사항에 따라 하나 이상의 실행 유닛(예를 들어, 임의의 실행 유닛(508A, 508B, 508C, 508D, 내지 508N-1 및 508N))을 활성화 또는 비활성화함으로서 동적으로 변경될 수 있다. 일 실시예에서, 포함된 컴포넌트는 각각의 컴포넌트에 연결되는 상호 접속 패브릭을 통해 상호 접속된다. 일부 실시예에서, 스레드 실행 로직(500)은 명령어 캐시(506), 데이터 포트(514), 샘플러(510) 및 실행 유닛(508A-508N) 중 하나 이상을 통해 시스템 메모리 또는 캐시 메모리와 같은 메모리로의 하나 이상의 접속을 포함한다. 일부 실시예에서, 각각의 실행 유닛(예를 들어, 508A)은 각각의 스레드에 대해 복수의 데이터 요소를 병렬로 프로세싱하면서 복수의 동시 하드웨어 스레드를 실행할 수 있는 독립형의 프로그램 가능한 범용 계산 유닛이다. 다양한 실시예에서, 실행 유닛(508A-508N)의 어레이는 임의의 개수의 개별 실행 유닛을 포함하도록 확장 가능하다.
일부 실시예에서, 실행 유닛(508A-508N)은 주로 셰이더 프로그램을 실행하는 데 사용된다. 셰이더 프로세서(502)는 다양한 셰이더 프로그램을 프로세싱하고 스레드 디스패처(504)를 통해 셰이더 프로그램과 관련된 실행 스레드를 디스패치할 수 있다. 일 실시예에서, 스레드 디스패처는 그래픽 및 미디어 파이프라인으로부터 스레드 개시 요청을 중재하고 요청된 스레드를 실행 유닛(508A-508N)의 하나 이상의 실행 유닛 상에서 인스턴스화하는 로직을 포함한다. 예를 들어, 기하 파이프라인은 프로세싱을 위해 정점, 테셀레이션(tessellation) 또는 기하 셰이더를 스레드 실행 로직으로 디스패치할 수 있다. 일부 실시예에서, 스레드 디스패처(504)는 또한 실행 셰이더 프로그램으로부터의 런타임 스레드 생성 요청을 프로세싱할 수 있다.
일부 실시예에서, 실행 유닛(508A-508N)은 그래픽 라이브러리(예를 들어, Direct 3D 및 OpenGL)로부터의 셰이더 프로그램이 최소의 변환으로 실행되도록 많은 표준 3D 그래픽 셰이더 명령어에 대한 기본적인 지원을 포함하는 명령어 세트를 지원한다. 실행 유닛은 정점 및 기하 프로세싱(예를 들어, 정점 프로그램, 기하 프로그램, 정점 셰이더), 픽셀 프로세싱(예를 들어, 픽셀 셰이더, 프래그먼트 셰이더) 및 범용 프로세싱(예를 들어, 컴퓨팅 및 미디어 셰이더)을 지원한다. 각각의 실행 유닛(508A-508N)은 복수 발행 단일 명령어 복수 데이터(SIMD) 실행이 가능하고, 멀티-스레드 동작은 더 긴 대기 시간(latency)을 갖는 메모리 액세스에도 불구하고 효율적인 실행 환경을 가능하게 한다. 각각의 실행 유닛 내의 각각의 하드웨어 스레드는 전용 고대역 레지스터 파일과 관련 독립 스레드-상태를 갖는다. 실행은 정수, 단정밀도 및 배정밀도 부동 소수점 연산, SIMD 분기 기능, 논리 연산, 초월 연산 및 다른 기타 연산을 수행할 수 있는 파이프라인에 대해 클럭 당 복수로 발행된다. 메모리로부터 또는 공유 기능 중 하나로부터 데이터를 기다리는 동안, 실행 유닛(508A-508N) 내의 의존적인 로직은 요청된 데이터가 반환될 때까지 대기중인 스레드를 휴면 상태로 만든다. 대기중인 스레드가 휴면 상태인 동안, 하드웨어 리소스는 다른 스레드를 프로세싱하는 데 사용될 수 있다. 예를 들어, 정점 셰이더 동작과 관련된 지연 시간 동안, 실행 유닛은 픽셀 셰이더, 프래그먼트 셰이더 또는 다른 정점 셰이더를 포함하는 다른 타입의 셰이더 프로그램에 대한 동작을 수행할 수 있다. 다양한 실시예는 SIMD를 사용하는 대신 또는 SIMD의 사용에 부가적으로 SIMT(Single Instruction Multiple Thread)를 사용함으로써 실행할 수 있다. SIMD 코어 또는 동작에 대한 참조는 또한 SIMT에 적용되거나 또는 SIMT와 함께 SIMD에 적용될 수 있다.
실행 유닛(508A-508N)의 각각의 실행 유닛은 데이터 요소의 어레이 상에서 동작한다. 데이터 요소의 개수는 "실행 크기" 또는 명령어에 대한 채널의 개수이다. 실행 채널은 명령어 내의 데이터 요소 액세스, 마스킹 및 흐름 제어에 대한 실행의 논리적 유닛이다. 채널의 개수는 특정 그래픽 프로세서에 대한 물리적 산술 로직 유닛(ALU) 또는 부동 소수점 유닛(FPU)의 개수에 독립적일 수 있다. 일부 실시예에서, 실행 유닛(508A-508N)은 정수 및 부동 소수점 데이터 타입을 지원한다.
실행 유닛 명령어 세트는 SIMD 명령어를 포함한다. 다양한 데이터 요소는 레지스터에 패킹된 데이터 타입으로서 저장될 수 있고, 실행 유닛은 요소의 데이터 크기에 따라 다양한 요소를 프로세싱할 것이다. 예를 들어, 256 비트 폭의 벡터에 대해 동작하는 경우, 256 비트의 벡터가 레지스터에 저장되고, 실행 유닛은, 4개의개별적인 64 비트 패킹된 데이터 요소(Quad-Word(QW) 크기의 데이터 요소), 8개의 개별적인 32 비트 패킹된 데이터 요소(DW(Double Word) 크기의 데이터 요소), 16개의 개별적인 16 비트 패킹된 데이터 요소(Word(W) 크기의 데이터 요소) 또는 32개의 개별적인 8 비트 패킹된 데이터 요소(byte(B) 크기의 데이터 요소)로서 벡터에 대해 동작한다. 그러나, 다른 벡터 폭과 레지스터 크기도 가능하다.
일 실시예에서, 하나 이상의 실행 유닛은, 결합된 EU에 공통인 스레드 제어 로직(507A-507N)을 갖는 결합된 실행 유닛(EU)(509A-509N)으로 결합될 수 있다. 복수의 EU가 EU 그룹에 결합될 수 있다. 결합된 EU 그룹의 각각의 EU는 별도의 SIMD 하드웨어 스레드를 실행하도록 구성될 수 있다. 결합된 EU 그룹에서의 EU의 개수는 실시예에 따라 달라질 수 있다. 또한 SIMD8, SIMD16 및 SIMD32를 포함하지만 이에 한정되지 않는 다양한 SIMD 폭이 각각의 EU 별로 수행될 수 있다. 각각의 결합된 그래픽 실행 유닛(509A-509N)은 적어도 2개의 실행 유닛을 포함한다. 예를 들어, 결합된 실행 유닛(509A)은 제 1 EU(508A), 제 2 EU(508B), 및 제 1 EU(508A)와 제 2 EU(508B)에 공통인 스레드 제어 로직(507A)을 포함한다. 스레드 제어 로직(507A)은 결합된 그래픽 실행 유닛(509A) 상에서 실행되는 스레드를 제어하여, 결합된 실행 유닛(509A-509N) 내의 각각의 EU가 공통 명령어 포인터 레지스터를 사용하여 실행될 수 있도록 한다.
하나 이상의 내부 명령어 캐시(예를 들어, 506)가 스레드 실행 로직(500)에 포함되어 실행 유닛에 대한 스레드 명령어를 캐싱한다. 일부 실시예에서, 스레드를 실행하는 동안 스레드 데이터를 캐싱하기 위해 하나 이상의 데이터 캐시(예를 들어, 512)가 포함된다. 실행 로직(500) 상에서 실행되는 스레드는 또한 명시적으로 관리되는 데이터를 공유 로컬 메모리(511)에 저장할 수 있다. 일부 실시예에서, 샘플러(510)는 3D 동작을 위한 텍스처 샘플링 및 미디어 동작을 위한 미디어 샘플링을 제공하기 위해 포함된다. 일부 실시예에서, 샘플러(510)는 샘플링된 데이터를 실행 유닛에 제공하기 전에 샘플링 프로세싱 동안 텍스처 또는 미디어 데이터를 프로세싱하는 특수 텍스처 또는 미디어 샘플링 기능을 포함한다.
실행하는 동안, 그래픽 및 미디어 파이프라인은 스레드 개시 요청을 스레드 생성 및 디스패치 로직을 통해 스레드 실행 로직(500)으로 전송한다. 일단 기하학적 객체 그룹이 프로세싱되어 픽셀 데이터로 래스터화 되면, 셰이더 프로세서(502) 내의 픽셀 프로세서 로직(예를 들어, 픽셀 셰이더 로직, 프래그먼트 셰이더 로직 등)이 호출되어 출력 정보를 추가로 계산하고 결과를 출력 표면(예를 들어, 컬러 버퍼, 깊이 버퍼, 스텐실 버퍼 등)에 기록되도록 한다. 일부 실시예에서, 픽셀 셰이더 또는 프래그먼트 셰이더는 래스터화된 객체에 걸쳐 보간될 다양한 정점 속성의 값을 계산한다. 일부 실시예에서, 이후 셰이더 프로세서(502) 내의 픽셀 프로세서 로직은 API(application programming interface) 제공 픽셀 또는 프래그먼트 셰이더 프로그램을 실행한다. 셰이더 프로그램을 실행하기 위해, 셰이더 프로세서(502)는 스레드 디스패처(504)를 통해 스레드를 실행 유닛(예를 들어, 508A)으로 디스패치한다. 일부 실시예에서, 셰이더 프로세서(502)는 샘플러(510)의 텍스처 샘플링 로직을 사용하여 메모리에 저장된 텍스처 맵의 텍스처 데이터에 액세스한다. 텍스처 데이터 및 입력 기하 데이터에 대한 산술 연산은 각각의 기하학적 프래그먼트에 대한 픽셀 컬러 데이터를 계산하거나, 또는 다른 프로세싱에서 하나 이상의 픽셀을 폐기한다.
일부 실시예에서, 데이터 포트(514)는 그래픽 프로세서 출력 파이프라인 상에서 추가 프로세싱을 위해 프로세싱된 데이터를 메모리로 출력하는 스레드 실행 로직(500)에 대한 메모리 액세스 메커니즘을 제공한다. 일부 실시예에서, 데이터 포트(514)는 데이터 포트를 통한 메모리 액세스를 위해 데이터를 캐싱하는 하나 이상의 캐시 메모리(예를 들어, 데이터 캐시(512))를 포함하거나 또는 이에 연결된다.
일 실시예에서, 실행 로직(500)은 또한 광선 추적 가속 기능을 제공할 수 있는 광선 추적기(505)를 포함할 수 있다. 광선 추적기(505)는 광선 생성을 위한 명령어/기능을 포함하는 광선 추적 명령어 세트를 지원할 수 있다. 광선 추적 명령어 세트는 도 2c의 광선 추적 코어(245)에 의해 지원되는 광선 추적 명령어 세트와 유사하거나 또는 상이할 수 있다.
도 5b는 실시예에 따른 실행 유닛(508)의 예시적인 내부 세부 사항을 도시한다. 그래픽 실행 유닛(508)은 명령어 페치 유닛(537), GRF(general register file) 어레이(524), ARF(architecture register file) 어레이(526), 스레드 중재자(522), 송신 유닛(530), 분기 유닛(532), SIMD FPUs(floating point units)(534) 세트를 포함할 수 있고, 일 실시예에서, 전용 정수 SIMD ALU(535) 세트를 포함할 수 있다. GRF(524) 및 ARF(526)는 그래픽 실행 유닛(508)에서 활성화될 수 있는 각각의 동시 하드웨어 스레드와 관련된 일반 레지스터 파일 및 아키텍처 레지스터 파일의 세트를 포함한다. 일 실시예에서, 스레드 당 구조적 상태는 ARF(526)에 유지되고, 스레드를 실행하는 동안 사용된 데이터는 GRF(524)에 저장된다. 각각의 스레드에 대한 명령어 포인터를 포함하는 각각의 스레드의 실행 상태는 ARF(526)의 스레드 특정 레지스터에 보유될 수 있다.
일 실시예에서, 그래픽 실행 유닛(508)은 SMT(Simultaneous Multi-Threading) 및 파인 그레인드(fine-grained) IMT(Interleaved Multi-Threading)의 조합인 아키텍처를 갖는다. 이 아키텍처는 동시 스레드의 대상 개수와 실행 유닛 당 레지스터 개수에 따라 설계 시에 미세 조정이 가능한 모듈식 구성을 갖는데, 실행 유닛 리소스는 복수의 동시 스레드를 실행하는 데 사용되는 로직에 따라 분할된다. 그래픽 실행 유닛(508)에 의해 실행될 수 있는 로직 스레드의 개수는 하드웨어 스레드의 개수로 제한되지 않으며, 복수의 로직 스레드가 각각의 하드웨어 스레드에 할당될 수 있다.
일 실시예에서, 그래픽 실행 유닛(508)은 복수의 명령어를 공동 발행할 수 있으며, 이는 각각 다른 명령어일 수 있다. 그래픽 실행 유닛 스레드(508)의 스레드 중재자(522)는 실행을 위해 명령어를 전송 유닛(530), 분기 유닛(532) 또는 SIMD FPU(들)(534) 중 하나에 디스패치할 수 있다. 각각의 실행 스레드는 GRF(524) 내의 128개의 범용 레지스터에 액세스할 수 있는데, 각각의 레지스터는 32 비트 데이터 요소의 SIMD 8 요소 벡터로서 액세스가능한 32 바이트를 저장할 수 있다. 일 실시예에서, 각각의 실행 유닛 스레드는 GRF(524) 내에서 4KB에 액세스할 수 있지만, 실시예는 이에 한정되지 않고, 더 많거나 또는 더 적은 레지스터 리소스가 다른 실시예에서 제공될 수 있다. 일 실시예에서, 그래픽 실행 유닛(508)은 계산 동작을 독립적으로 수행할 수 있는 7개의 하드웨어 스레드로 분할되지만, 실행 유닛 당 스레드의 개수는 또한 실시예에 따라 변할 수 있다. 예를 들어, 일 실시예에서 최대 16개의 하드웨어 스레드가 지원된다. 7개의 스레드가 4KB에 액세스할 수 있는 실시예에서, GRF(524)는 총 28KB를 저장할 수 있다. 16개의 스레드가 4KB에 액세스할 수 있는 경우 GRF(524)는 총 64KB를 저장할 수 있다. 유연한 어드레싱 모드는 레지스터들을 함께 어드레싱하여 효과적으로 더 넓은 레지스터를 구성하거나 또는 스트라이드된(strided) 사각형 블록 데이터 구조를 나타낼 수 있다.
일 실시예에서, 메모리 동작, 샘플러 동작 및 다른 대기 시간이 긴 시스템 통신은 메시지 전달 송신 유닛(530)에 의해 실행되는 "송신" 명령어를 통해 디스패치된다. 일 실시예에서, 분기 명령어는 전용 분기 유닛(532)으로 디스패치되어 SIMD 발산 및 최종 수렴을 용이하게 한다.
일 실시예에서, 그래픽 실행 유닛(508)은 부동 소수점 연산을 수행하는 하나 이상의 SIMD 부동 소수점 유닛(FPU)(534)을 포함한다. 일 실시예에서, FPU(들)(534)는 또한 정수 계산을 지원한다. 일 실시예에서, FPU(들)(534)는 M개의 32 비트 부동 소수점(또는 정수) 연산까지 SIMD를 실행할 수 있거나, 또는 최대 2M개의 16 비트 정수 또는 16 비트 부동 소수점 연산까지 SIMD를 실행할 수 있다. 일 실시예에서, FPU(들) 중 적어도 하나는 고처리량 초월 산술 함수 및 배정밀도 54 비트 부동 소수점을 지원하는 확장된 산술 능력을 제공한다. 일부 실시예에서, 8 비트 정수 SIMD ALU(535) 세트가 또한 존재하며, 머신 학습 계산과 관련된 동작을 수행하도록 특별히 최적화될 수 있다.
일 실시예에서, 그래픽 실행 유닛(508)의 복수 인스턴스의 어레이는 그래픽 서브-코어 그룹(예를 들어, 서브-슬라이스)에서 인스턴스화될 수 있다. 확장성을 위해, 제품 설계자는 서브-코어 그룹 당 실행 유닛의 정확한 개수를 선택할 수 있다. 일 실시예에서, 실행 유닛(508)은 복수의 실행 채널에 걸쳐 명령어를 실행할 수 있다. 다른 실시예에서, 그래픽 실행 유닛(508) 상에서 실행된 각각의 스레드는 다른 채널 상에서 실행된다.
도 6은 일 실시예에 따른 추가 실행 유닛(600)을 도시한다. 실행 유닛(600)은, 예를 들어 도 3c에서와 같이 컴퓨팅 엔진 타일(340A-340D)에 사용하기 위해 컴퓨팅 최적화된 실행 유닛일 수 있지만, 이에 한정되는 것은 아니다. 변형된 실행 유닛(600)이 또한 도 3b에서와 같이 그래픽 엔진 타일(310A-310D)에서 사용될 수 있다. 일 실시예에서, 실행 유닛(600)은 스레드 제어 유닛(601), 스레드 상태 유닛(602), 명령어 페치/프리페치 유닛(603) 및 명령어 디코딩 유닛(604)을 포함한다. 실행 유닛(600)은 실행 유닛 내에서 하드웨어 스레드에 할당될 수 있는 레지스터를 저장하는 레지스터 파일(606)을 추가로 포함한다. 실행 유닛(600)은 송신 유닛(607) 및 분기 유닛(608)을 추가로 포함한다. 일 실시예에서, 송신 유닛(607) 및 분기 유닛(608)은 도 5b의 그래픽 실행 유닛(508)의 송신 유닛(530) 및 분기 유닛(532)과 유사하게 동작할 수 있다.
실행 유닛(600)은 또한 복수의 상이한 타입의 기능 유닛을 포함하는 컴퓨팅 유닛(610)을 포함한다. 일 실시예에서, 컴퓨팅 유닛(610)은 산술 로직 유닛의 어레이를 포함하는 ALU 유닛(611)을 포함한다. ALU 유닛(611)은 64 비트, 32 비트 및 16 비트 정수 및 부동 소수점 연산을 수행하도록 구성될 수 있다. 정수 및 부동 소수점 연산은 동시에 수행될 수 있다. 컴퓨팅 유닛(610)은 또한 시스토릭(systolic) 어레이(612) 및 산술 유닛(613)을 포함할 수 있다. 시스토릭 어레이(612)는 시스토릭 방식으로 벡터 또는 다른 데이터-병렬 연산을 수행하는 데 사용될 수 있는 데이터 프로세싱 유닛으로 이루어진 W(와이드) 및 D(딥) 네트워크를 포함한다. 일 실시예에서, 시스토릭 어레이(612)는 매트릭스 내적 연산과 같은 매트릭스 연산을 수행하도록 구성될 수 있다. 일 실시예에서, 시스토릭 어레이(612)는 16 비트 부동 소수점 연산뿐만 아니라 8 비트 및 4 비트 정수 연산을 지원한다. 일 실시예에서, 시스토릭 어레이(612)는 머신 학습 동작을 가속화하도록 구성될 수 있다. 이러한 실시예에서, 시스토릭 어레이(612)는 bfloat 16 비트 부동 소수점 포맷을 지원하도록 구성될 수 있다. 일 실시예에서, 산술 유닛(613)은 ALU 유닛(611)보다 효율적이고 저전력 방식으로 수학적 연산의 특정 서브세트를 수행하도록 포함될 수 있다. 산술 유닛(613)은 다른 실시예에서 제공되는 그래픽 프로세싱 엔진의 공유 기능 로직(예를 들어, 도 4의 공유 기능 로직(420)의 산술 로직(422))에서 발견될 수 있는 산술 로직의 변형을 포함할 수 있다. 일 실시예에서, 산술 유닛(613)은 32 비트 및 64 비트 부동 소수점 연산을 수행하도록 구성될 수 있다.
스레드 제어 유닛(601)은 실행 유닛 내에서 스레드의 실행을 제어하는 로직을 포함한다. 스레드 제어 유닛(601)은 실행 유닛(600) 내에서 스레드의 실행을 시작, 중지 및 선점하는 스레드 중재 로직을 포함할 수 있다. 스레드 상태 유닛(602)은 실행 유닛(600) 상에서 실행되도록 할당된 스레드에 대한 스레드 상태를 저장하는 데 사용될 수 있다. 실행 유닛(600) 내에 스레드 상태를 저장함으로써 이들 스레드가 차단되거나 유휴 상태일 때 스레드를 신속하게 선점할 수 있다. 명령어 페치/프리페치 유닛(603)은 더 높은 레벨의 실행 로직의 명령어 캐시(예를 들어, 도 5a에서와 같은 명령어 캐시(506))로부터 명령어를 페치할 수 있다. 명령어 페치/프리페치 유닛(603)은 또한 현재 실행 중인 스레드의 분석에 기초하여 명령어가 명령어 캐시에 로딩될 수 있도록 프리페치 요청을 발행할 수 있다. 명령어 디코딩 유닛(604)은 컴퓨팅 유닛에 의해 실행될 명령어를 디코딩하는 데 사용될 수 있다. 일 실시예에서, 명령어 디코딩 유닛(604)은 복잡한 명령어를 구성을 이루는 마이크로-동작으로 디코딩하는 2차 디코더로서 사용될 수 있다.
실행 유닛(600)은 실행 유닛(600) 상에서 실행되는 하드웨어 스레드에 의해 사용될 수 있는 레지스터 파일(606)을 추가로 포함한다. 레지스터 파일(606)의 레지스터는 실행 유닛(600)의 컴퓨팅 유닛(610) 내에서 복수의 동시 스레드를 실행하는 데 사용되는 로직에 걸쳐 분할될 수 있다. 그래픽 실행 유닛(600)에 의해 실행될 수 있는 논리 스레드의 개수는 하드웨어 스레드의 개수로 제한되지 않고, 복수의 논리 스레드가 각각의 하드웨어 스레드에 할당될 수 있다. 레지스터 파일(606)의 크기는 지원되는 하드웨어 스레드의 개수에 따라 실시예마다 변할 수 있다. 일 실시예에서, 레지스터 명칭 변경은 레지스터를 하드웨어 스레드에 동적으로 할당하기 위해 사용될 수 있다.
도 7은 일부 실시예에 따른 그래픽 프로세서 명령어 포맷(700)을 도시한 블록도이다. 하나 이상의 실시예에서, 그래픽 프로세서 실행 유닛은 복수 포맷의 명령어를 갖는 명령어 세트를 지원한다. 실선 상자는 일반적으로 실행 유닛 명령어에 포함된 컴포넌트를 나타내는 반면, 점선은 선택 사항이거나 또는 명령어의 서브-세트에만 포함된 컴포넌트를 포함한다. 일부 실시예에서, 설명되고 도시된 명령어 포맷(700)은, 일단 명령어가 프로세싱되면 디코딩된 명령어로부터 기인하는 마이크로-동작과 달리, 실행 유닛에 제공되는 명령어라는 점에서 매크로-명령어이다.
일부 실시예에서, 그래픽 프로세서 실행 유닛은 기본적으로 128 비트 명령어 포맷(710)의 명령어를 지원한다. 64 비트 압축 명령어 포맷(730)은 선택된 명령어, 명령어 옵션 및 피연산자의 개수에 따라 일부 명령어에서 이용 가능하다. 기본적인 128 비트 명령어 포맷(710)은 모든 명령어 옵션에 대한 액세스를 제공하는 반면, 일부 옵션 및 동작은 64 비트 포맷(730)으로 제한된다. 64 비트 포맷(730)에서 이용 가능한 기본적인 명령어는 실시예에 따라 다르다. 일부 실시예에서, 명령어는 인덱스 필드(713)의 인덱스 값 세트를 사용하여 부분적으로 압축된다. 실행 유닛 하드웨어는 인덱스 값에 따라 압축 테이블 세트를 참조하고 압축 테이블 출력을 사용하여 128 비트 명령어 포맷(710)으로 기본적인 명령어를 재구성한다. 다른 크기 및 포맷의 명령어가 사용될 수 있다.
각각의 포맷에 대해, 명령어 연산 코드(opcode)(712)는 실행 유닛이 수행해야 할 동작을 정의한다. 실행 유닛은 각각의 피연산자의 복수의 데이터 요소에 걸쳐 각각의 명령어를 병렬로 실행한다. 예를 들어, 더하기 명령어(an add instruction)에 응답하여, 실행 유닛은 텍스처 요소 또는 화상 요소를 나타내는 각각의 컬러 채널에 걸쳐 동시적인 더하기 동작을 수행한다. 기본적으로 실행 유닛은 피연산자의 모든 데이터 채널에 걸쳐서 각각의 명령어를 수행한다. 일부 실시예에서, 명령어 제어 필드(714)는 채널 선택(예를 들어, 예측) 및 데이터 채널 순서(예를 들어, 스위즐(swizzle))와 같은 특정 실행 옵션에 대한 제어를 가능하게 한다. 128 비트 명령어 포맷(710)의 명령어에 대해, 실행-크기 필드(716)는 병렬로 실행될 데이터 채널의 개수를 제한한다. 일부 실시예에서, 실행-크기 필드(716)는 64 비트 압축 명령어 포맷(730)에서 사용 가능하지 않다.
일부 실행 유닛 명령어는 2개의 소스 피연산자인 SRC0(720) 및 SRC1(722)과 1개의 목적지(718)를 포함하여 최대 3개의 피연산자를 갖는다. 일부 실시예에서, 실행 유닛은 이중 목적지 명령어를 지원하고, 이중 하나의 목적지는 암시된다. 데이터 조작 명령어는 제 3 소스 피연산자(예를 들어, SRC2(724))를 가질 수 있으며, 여기서 명령어 연산 코드(712)는 소스 피연산자의 개수를 결정한다. 명령어의 마지막 소스 피연산자는 명령어와 함께 전달되는 이미디어트(immediate)(예를 들어, 하드-코딩된) 값일 수 있다.
일부 실시예에서, 128 비트 명령어 포맷(710)은, 예를 들어, 직접 레지스터 어드레싱 모드 또는 간접 레지스터 어드레싱 모드가 사용되는지를 지정하는 액세스/주소 모드 필드(726)를 포함한다. 직접 레지스터 어드레싱 모드가 사용될 때, 하나 이상의 피연산자의 레지스터 주소는 명령어의 비트에 의해 직접 제공된다.
일부 실시예에서, 128 비트 명령어 포맷(710)은 명령어에 대한 주소 모드 및/또는 액세스 모드를 지정하는 액세스/주소 모드 필드(726)를 포함한다. 일 실시예에서, 액세스 모드는 명령어에 대한 데이터 액세스 정렬을 정의하는 데 사용된다. 일부 실시예는 16 바이트 정렬 액세스 모드 및 1 바이트 정렬 액세스 모드를 포함하는 액세스 모드를 지원하는데, 액세스 모드의 바이트 정렬은 명령어 피연산자의 액세스 정렬을 결정한다. 예를 들어, 제 1 모드에 있을 때, 명령어는 소스 및 목적지 피연산자에 대해 1 바이트 정렬된 어드레싱을 사용할 수 있고, 제 2 모드에 있을 때, 명령어는 모든 소스 및 목적지 피연산자에 대해 16 바이트 정렬된 어드레싱을 사용할 수 있다.
일 실시예에서, 액세스/주소 모드 필드(726)의 주소 모드 부분은 명령어가 직접 또는 간접 어드레싱을 사용해야 하는지 여부를 결정한다. 직접 레지스터 어드레싱 모드가 사용될 때, 명령어의 비트는 하나 이상의 피연산자의 레지스터 주소를 직접 제공한다. 간접 레지스터 어드레싱 모드가 사용될 때, 하나 이상의 피연산자의 레지스터 주소는 명령어의 주소 레지스터 값 및 주소 이미디어트 필드에 기초하여 계산될 수 있다.
일부 실시예에서, 명령어는 연산 코드 디코딩(740)을 단순화하는 연산 코드(712) 비트 필드에 따라 그룹화된다. 8 비트 연산 코드의 경우, 비트 4, 5 및 6은 실행 유닛이 연산 코드의 유형을 결정할 수 있도록 한다. 설명되는 구체적인 연산 코드 그룹은 단지 예시일 뿐이다. 일부 실시예에서, 이동 및 로직 연산 코드 그룹(742)은 데이터 이동 및 로직 명령어(예를 들어, 이동(mov), 비교(cmp))를 포함한다. 일부 실시예에서, 이동 및 로직 그룹(742)은 5개의 최상위 비트(MSB)를 공유하며, 여기서 이동(mov) 명령어는 0000xxxxb의 형태이고 로직 명령어는 0001xxxxb의 형태이다. 흐름 제어 명령어 그룹(744)(예를 들어, 호출, 점프(jmp))은 0010xxxxb의 형태(예를 들어, 0x20)의 명령어를 포함한다. 기타 명령어 그룹(746)은 0011xxxxb의 형태(예를 들어, 0x30)의 동기화 명령어(예를 들어, 대기, 송신)를 포함하는 명령어의 혼합을 포함한다. 병렬 산술 명령어 그룹(748)은 0100xxxxb의 형태(예를 들어, 0x40)의 컴포넌트 별 산술 명령어(예를 들어, 더하기, 곱하기(mul))를 포함한다. 병렬 산술 그룹(748)은 데이터 채널에 걸쳐 병렬로 산술 연산을 수행한다. 벡터 산술 그룹(750)은 0101xxxxb 형태(예를 들어, 0x50)의 산술 명령어(예를 들어, dp4)를 포함한다. 벡터 산술 그룹은 벡터 피연산자에 대한 내적 계산과 같은 산술을 수행한다. 일 실시예에서, 설명된 연산 코드 디코딩(740)은 실행 유닛의 어느 부분이 디코딩된 명령어를 실행하는 데 사용될지를 결정하는 데 사용될 수 있다. 예를 들어, 일부 명령어는 시스토릭 어레이에 의해 수행될 시스토릭 명령어로 지정될 수 있다. 광선 추적 명령어(도시하지 않음)와 같은 다른 명령어는 실행 로직의 슬라이스 또는 파티션 내에서 광선 추적 코어 또는 광선 추적 로직으로 라우팅될 수 있다.
그래픽 파이프라인
도 8은 그래픽 프로세서(800)의 다른 실시예의 블록도이다. 본 명세서에서 임의의 다른 도면의 요소와 동일한 참조 번호(또는 명칭)를 갖는 도 8의 요소는 본 명세서의 다른 곳에서 설명된 것과 유사한 방식으로 동작 또는 기능할 수 있으나, 이에 한정되는 것은 아니다.
일부 실시예에서, 그래픽 프로세서(800)는 기하 파이프라인(820), 미디어 파이프라인(830), 디스플레이 엔진(840), 스레드 실행 로직(850) 및 렌더링 출력 파이프라인(870)을 포함한다. 일부 실시예에서, 그래픽 프로세서(800)는 하나 이상의 범용 프로세싱 코어를 포함하는 멀티-코어 프로세싱 시스템 내의 그래픽 프로세서이다. 그래픽 프로세서는 하나 이상의 제어 레지스터(도시하지 않음)에 대한 레지스터 기록에 의해 또는 링 상호 접속부(802)를 통해 그래픽 프로세서(800)에 발행된 커맨드를 통해 제어된다. 일부 실시예에서, 링 상호 접속부(802)는 그래픽 프로세서(800)를 다른 그래픽 프로세서 또는 범용 프로세서와 같은 다른 프로세싱 컴포넌트에 연결한다. 링 상호 접속부(802)로부터의 커맨드는 커맨드 스트리머(803)에 의해 해석되고, 이 커맨드 스트리머(803)는 기하 파이프라인(820) 또는 미디어 파이프라인(830)의 개별 컴포넌트에 명령어를 제공한다.
일부 실시예에서, 커맨드 스트리머(803)는 메모리로부터 정점 데이터를 판독하고 커맨드 스트리머(803)에 의해 제공된 정점-프로세싱 커맨드를 실행하는 정점 페처(805)의 동작을 지시한다. 일부 실시예에서, 정점 페처(805)는 정점 데이터를 정점 셰이더(807)에 제공하고, 이 정점 셰이더(807)는 각 정점에 좌표 공간 변환 및 조명 동작을 수행한다. 일부 실시예에서, 정점 페처(805) 및 정점 셰이더(807)는 실행 스레드를 스레드 디스패처(831)를 통해 실행 유닛(852A, 852B)에 디스패칭함으로써 정점-프로세싱 명령어를 실행한다.
일부 실시예에서, 실행 유닛(852A, 852B)은 그래픽 및 미디어 동작을 수행하는 명령어 세트를 갖는 벡터 프로세서의 어레이이다. 일부 실시예에서, 실행 유닛(852A, 852B)은 각각의 어레이에 대해 특정되거나 또는 어레이 사이에서 공유되는 부착된 L1 캐시(851)를 갖는다. 캐시는 데이터 캐시, 명령어 캐시 또는 서로 다른 파티션에 데이터와 명령어를 포함하도록 분할된 단일 캐시로 구성될 수 있다.
일부 실시예에서, 기하 파이프라인(820)은 3D 객체의 하드웨어 가속 테셀레이션을 수행하는 테셀레이션 컴포넌트를 포함한다. 일부 실시예에서, 프로그램 가능한 헐(hull) 셰이더(811)는 테셀레이션 동작을 구성한다. 프로그램 가능한 도메인 셰이더(817)는 테셀레이션 출력의 백엔드(back-end) 평가를 제공한다. 테셀레이터(813)는 헐 셰이더(811)의 방향으로 동작하고, 기하 파이프라인(820)에 입력으로서 제공되는 대략적인(coarse) 기하학적 모델에 기초하여 상세한 기하학적 객체의 세트를 생성하는 특수 목적 로직을 포함한다. 일부 실시예에서, 테셀레이션이 사용되지 않으면, 테셀레이션 컴포넌트(예를 들어, 헐 셰이더(811), 테셀레이터(813) 및 도메인 셰이더(817))는 바이패스될 수 있다.
일부 실시예에서, 완전한 기하학적 객체는 실행 유닛(852A, 852B)으로 디스패치된 하나 이상의 스레드를 통해 기하 셰이더(819)에 의해 처리될 수 있거나, 또는 클리퍼(829)로 직접 진행될 수 있다. 일부 실시예에서, 기하 셰이더는 그래픽 파이프라인의 이전 단계에서와 같이 정점 또는 정점의 패치(patch)가 아닌 전체의 기하학적 객체에 대해 동작한다. 테셀레이션이 비활성화되면, 기하 셰이더(819)는 정점 셰이더(807)로부터 입력을 수신한다. 일부 실시예에서, 테셀레이션 유닛이 비활성화되면, 기하 셰이더(819)는 기하 테셀레이션을 수행하는 기하 셰이더 프로그램으로 프로그램 가능하다.
래스터화 이전에, 클리퍼(829)는 정점 데이터를 프로세싱한다. 클리퍼(829)는 고정 기능 클리퍼 또는 클리핑 및 기하 셰이더 기능을 갖는 프로그램 가능한 클리퍼일 수 있다. 일부 실시예에서, 렌더링 출력 파이프라인(870)의 래스터화기(rasterizer) 및 깊이 테스트 컴포넌트(873)는 픽셀 셰이더를 디스패치하여 기하학적 객체를 픽셀 당 표현으로 변환한다. 일부 실시예에서, 픽셀 셰이더 로직은 스레드 실행 로직(850)에 포함된다. 일부 실시예에서, 애플리케이션은 래스터화기 및 깊이 테스트 컴포넌트(873)를 바이패스하고 스트림 아웃 유닛(823)을 통해 래스터화되지 않은 정점 데이터에 액세스할 수 있다.
그래픽 프로세서(800)는 상호 접속 버스, 상호 접속 패브릭, 또는 프로세서의 주요 컴포넌트 사이에 데이터 및 메시지 전달을 허용하는 다른 상호 접속 메커니즘을 갖는다. 일부 실시예에서, 실행 유닛(852A, 852B) 및 관련 로직 유닛(예를 들어, L1 캐시(851), 샘플러(854), 텍스처 캐시(858) 등)은 메모리 액세스를 수행하고 프로세서의 렌더링 출력 파이프라인 컴포넌트와 통신하는 데이터 포트(856)를 통해 상호 접속된다. 일부 실시예에서, 샘플러(854), 캐시(851, 858) 및 실행 유닛(852A, 852B)은 각각 별개의 메모리 액세스 경로를 갖는다. 일 실시예에서, 텍스처 캐시(858)는 또한 샘플러 캐시로서 구성될 수 있다.
일부 실시예에서, 렌더링 출력 파이프라인(870)은 정점 기반 객체를 관련 픽셀 기반 표현으로 변환하는 래스터화기 및 깊이 테스트 컴포넌트(873)를 포함한다. 일부 실시예에서, 래스터화기 로직은 고정 기능 삼각형 및 라인 래스터화를 수행하는 윈도우/마스커 유닛을 포함한다. 관련된 렌더 캐시(878) 및 깊이 캐시(879)는 또한 일부 실시예에서 이용가능할 수 있다. 픽셀 동작 컴포넌트(877)는 데이터에 대해 픽셀 기반 동작을 수행하지만, 일부 예에서는 2D 동작(예를 들어, 블렌딩을 통한 비트 블록 이미지 전송)과 관련된 픽셀 동작은 2D 엔진(841)에 의해 수행되거나 또는 디스플레이 시간에 오버레이 디스플레이 평면을 사용하여 디스플레이 제어기(843)에 의해 대체된다. 일부 실시예에서, 공유 L3 캐시(875)는 모든 그래픽 컴포넌트에 이용 가능하여, 주 시스템 메모리를 사용하지 않고 데이터를 공유할 수 있도록 한다.
일부 실시예에서, 그래픽 프로세서 미디어 파이프라인(830)은 미디어 엔진(837) 및 비디오 프론트-엔드(834)를 포함한다. 일부 실시예에서, 비디오 프론트-엔드(834)는 커맨드 스트리머(803)로부터 파이프라인 커맨드를 수신한다. 일부 실시예에서, 미디어 파이프라인(830)은 별도의 커맨드 스트리머를 포함한다. 일부 실시예에서, 비디오 프론트-엔드(834)는 미디어 커맨드를 미디어 엔진(837)에 전송하기 전에 이 커맨드를 프로세싱한다. 일부 실시예에서, 미디어 엔진(837)은 스레드 디스패처(831)를 통해 스레드 실행 로직(850)으로 디스패치하기 위한 스레드를 생성하는 스레드 생성 기능을 포함한다.
일부 실시예에서, 그래픽 프로세서(800)는 디스플레이 엔진(840)을 포함한다. 일부 실시예에서, 디스플레이 엔진(840)은 프로세서(800)의 외부에 있고, 링 상호 접속부(802) 또는 일부 다른 상호 접속 버스 또는 패브릭을 통해 그래픽 프로세서와 연결된다. 일부 실시예에서, 디스플레이 엔진(840)은 2D 엔진(841) 및 디스플레이 제어기(843)를 포함한다. 일부 실시예에서, 디스플레이 엔진(840)은 3D 파이프라인으로부터 독립적으로 동작할 수 있는 특수 목적 로직을 포함한다. 일부 실시예에서, 디스플레이 제어기(843)는, 랩톱 컴퓨터에서와 같이 시스템 통합형 디스플레이 장치 또는 디스플레이 장치 커넥터를 통해 부착된 외부 디스플레이 장치일 수 있는 디스플레이 장치(도시하지 않음)에 연결된다.
일부 실시예에서, 기하 파이프라인(820) 및 미디어 파이프라인(830)은 복수의 그래픽 및 미디어 프로그래밍 인터페이스에 따른 동작을 수행하도록 구성될 수 있고 임의의 하나의 애플리케이션 프로그래밍 인터페이스(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도 지원될 것이다.
그래픽 파이프라인 프로그래밍
도 9a는 일부 실시예에 따른 그래픽 프로세서 커맨드 포맷(900)을 도시한 블록도이다. 도 9b는 일 실시예에 따른 그래픽 프로세서 커맨드 시퀀스(910)를 도시한 블록도이다. 도 9a의 실선 상자는 일반적으로 그래픽 커맨드에 포함된 컴포넌트를 도시하고, 점선은 선택 사항이거나 또는 그래픽 커맨드의 서브-세트에만 포함된 컴포넌트를 포함한다. 도 9a의 예시적인 그래픽 프로세서 커맨드 포맷(900)은 클라이언트(902), 커맨드 연산 코드(opcode)(904) 및 커맨드에 대한 데이터(906)를 식별하는 데이터 필드를 포함한다. 서브-연산 코드(905) 및 커맨드 크기(908)는 또한 일부 커맨드에 포함된다.
일부 실시예에서, 클라이언트(902)는 커맨드 데이터를 프로세싱하는 그래픽 장치의 클라이언트 유닛을 특정한다. 일부 실시예에서, 그래픽 프로세서 커맨드 파서(parser)는 커맨드의 추가 프로세싱을 조정하고 커맨드 데이터를 적절한 클라이언트 유닛으로 라우팅하기 위해 각 커맨드의 클라이언트 필드를 검사한다. 일부 실시예에서, 그래픽 프로세서 클라이언트 유닛은 메모리 인터페이스 유닛, 렌더 유닛, 2D 유닛, 3D 유닛 및 미디어 유닛을 포함한다. 각각의 클라이언트 유닛은 커맨드를 프로세싱하는 대응 프로세싱 파이프라인을 갖는다. 일단 커맨드가 클라이언트 유닛에 의해 수신되면, 클라이언트 유닛은 수행할 동작을 결정하기 위해 연산 코드(904) 및 존재한다면 서브-연산 코드(905)를 판독한다. 클라이언트 유닛은 데이터 필드(906)의 정보를 사용하여 커맨드를 수행한다. 일부 커맨드의 경우, 명시적인 커맨드 크기(908)는 커맨드의 크기를 특정할 것으로 예상된다. 일부 실시예에서, 커맨드 파서는 커맨드 연산 코드에 근거하여 커맨드 중 적어도 일부 커맨드의 크기를 자동으로 결정한다. 일부 실시예에서, 커맨드는 복수의 더블 워드를 통해 정렬된다. 다른 커맨드 포맷이 사용될 수 있다.
도 9b의 흐름도는 예시적인 그래픽 프로세서 커맨드 시퀀스(910)를 도시한다. 일부 실시예에서, 그래픽 프로세서의 실시예를 특징으로 하는 데이터 프로세싱 시스템의 소프트웨어 또는 펌웨어는 그래픽 동작의 세트를 설정, 실행 및 종료하기 위해 도시된 커맨드 시퀀스의 버전을 사용한다. 실시예는 특정 커맨드 또는 이 커맨드 시퀀스로 한정되지 않으므로, 샘플 커맨드 시퀀스는 예시의 목적으로만 도시되고 설명된다. 더욱이, 커맨드는 커맨드 시퀀스에서 커맨드의 배치(batch)로서 발행될 수 있으므로, 그래픽 프로세서는 커맨드의 시퀀스를 적어도 부분적으로 동시에 프로세싱할 것이다.
일부 실시예에서, 그래픽 프로세서 커맨드 시퀀스(910)는 임의의 활성 그래픽 파이프라인이 파이프라인에 현재 보류중인 커맨드를 완료하게 하는 파이프라인 플러시(flush) 커맨드(912)로 시작할 수 있다. 일부 실시예에서, 3D 파이프라인(922) 및 미디어 파이프라인(924)은 동시에 동작하지 않는다. 활성 그래픽 파이프라인이 임의의 진행 중인 커맨드를 완료하도록 파이프라인 플러시가 수행된다. 파이프라인 플러시에 대한 응답으로, 그래픽 프로세서에 대한 커맨드 파서는 활성 드로잉 엔진이 진행 중인 작업을 완료하고 관련된 판독 캐시가 무효화될 때까지 커맨드 프로세싱을 일시 중지할 것이다. 선택에 따라, '더러운'이라고 표시된 렌더 캐시의 모든 데이터는 메모리로 플러시될 수 있다. 일부 실시예에서, 파이프라인 플러시 커맨드(912)는 파이프라인 동기화를 위해 또는 그래픽 프로세서를 저전력 상태로 만들기 전에 사용될 수 있다.
일부 실시예에서, 파이프라인 선택 커맨드(913)는 그래픽 프로세서가 파이프라인 사이에서 명시적으로 전환할 것을 커맨드 시퀀스가 요구할 때 사용된다. 일부 실시예에서, 파이프라인 선택 커맨드(913)는 실행 컨텍스트가 두 파이프라인 모두에 대한 커맨드를 발행하지 않는다면 파이프라인 커맨드를 발행하기 전에 실행 컨텍스트 내에서 한 번만 필요하다. 일부 실시예에서, 파이프라인 플러시 커맨드(912)는 파이프라인 선택 커맨드(913)를 통한 파이프라인의 전환 직전에 요구된다.
일부 실시예에서, 파이프라인 제어 커맨드(914)는 동작을 위한 그래픽 파이프라인을 구성하고 3D 파이프라인(922) 및 미디어 파이프라인(924)을 프로그래밍하는 데 사용된다. 일부 실시예에서, 파이프라인 제어 커맨드(914)는 활성 파이프라인에 대한 파이프라인 상태를 구성한다. 일 실시예에서, 파이프라인 제어 커맨드(914)는 파이프라인 동기화를 위해, 그리고 커맨드의 배치를 프로세싱하기 전에 활성 파이프라인 내의 하나 이상의 캐시 메모리로부터 데이터를 삭제하는 데 사용된다.
일부 실시예에서, 반환 버퍼 상태 커맨드(916)는 데이터를 기록하기 위해 각각의 파이프라인에 대한 반환 버퍼 세트를 구성하는 데 사용된다. 일부 파이프라인 동작은 프로세싱 중에 그 동작이 중간 데이터(intermediate data)를 기록하는 하나 이상의 반환 버퍼의 할당, 선택 또는 구성을 필요로 한다. 일부 실시예에서, 그래픽 프로세서는 또한 출력 데이터를 저장하고 교차 스레드 통신을 수행하기 위해 하나 이상의 반환 버퍼를 사용한다. 일부 실시예에서, 반환 버퍼 상태(916)는 파이프라인 동작 세트에 사용하는 반환 버퍼의 크기 및 개수를 선택하는 것을 포함한다.
커맨드 시퀀스에서 나머지 커맨드는 동작을 위한 활성 파이프라인에 따라 상이하다. 파이프라인 결정(920)에 따라, 커맨드 시퀀스는 3D 파이프라인 상태(930)에서 시작하는 3D 파이프라인(922) 또는 미디어 파이프라인 상태(940)에서 시작하는 미디어 파이프라인(924)에 맞춰진다(tailored).
3D 파이프라인 상태(930)를 구성하는 커맨드는 정점 버퍼 상태, 정점 요소 상태, 일정한 컬러 상태, 깊이 버퍼 상태, 및 3D 프리미티브 커맨드가 프로세싱되기 전에 구성될 다른 상태 변수에 대한 3D 상태 설정 커맨드를 포함한다. 이러한 커맨드의 값은 사용중인 특정 3D API에 근거하여 적어도 부분적으로 결정된다. 일부 실시예에서, 3D 파이프라인 상태(930) 커맨드는 또한 특정 파이프라인 요소가 사용되지 않을 경우 이들 요소를 선택적으로 비활성화시키거나 또는 바이패스할 수 있다.
일부 실시예에서, 3D 프리미티브(932) 커맨드는 3D 파이프라인에 의해 프로세싱될 3D 프리미티브를 제출하는 데 사용된다. 3D 프리미티브(932) 커맨드를 통해 그래픽 프로세서로 전달되는 커맨드 및 관련 파라미터는 그래픽 파이프라인의 정점 페치 기능으로 전달된다. 정점 페치 기능은 3D 프리미티브(932) 커맨드 데이터를 사용하여 정점 데이터 구조를 생성한다. 정점 데이터 구조는 하나 이상의 반환 버퍼에 저장된다. 일부 실시예에서, 3D 프리미티브(932) 커맨드는 정점 셰이더를 통해 3D 프리미티브에 대한 정점 연산을 수행하는 데 사용된다. 정점 셰이더를 프로세싱하기 위해, 3D 파이프라인(922)은 셰이더 실행 스레드를 그래픽 프로세서 실행 유닛으로 디스패치한다.
일부 실시예에서, 3D 파이프라인(922)은 실행(934) 커맨드 또는 이벤트를 통해 트리거된다. 일부 실시예에서, 레지스터 기록은 커맨드 실행을 트리거한다. 일부 실시예에서, 실행은 커맨드 시퀀스에서 'go' 또는 'kick' 커맨드를 통해 트리거된다. 일 실시예에서, 커맨드 실행은 그래픽 파이프라인을 통해 커맨드 시퀀스를 플러시하는 파이프라인 동기화 커맨드를 사용하여 트리거된다. 3D 파이프라인은 3D 프리미티브에 대한 기하 프로세싱을 수행할 것이다. 동작이 완료되면 결과로 생성된 기하학적 객체가 래스터화되고 픽셀 엔진이 결과 픽셀을 채색한다. 픽셀 셰이딩 및 픽셀 백 엔드 동작을 제어하는 추가 커맨드가 또한 이러한 동작에 포함될 수 있다.
일부 실시예에서, 그래픽 프로세서 커맨드 시퀀스(910)는 미디어 동작을 수행할 때 미디어 파이프라인(924) 경로를 따른다. 일반적으로, 미디어 파이프라인(924)에 대한 프로그래밍의 특정 사용 및 방식은 수행될 미디어 또는 컴퓨팅 동작에 의존한다. 미디어를 디코딩하는 동안 특정 미디어 디코딩 동작이 미디어 파이프라인으로 오프로딩될 수 있다. 일부 실시예에서, 미디어 파이프라인은 또한 바이패스될 수 있고 미디어 디코딩은 하나 이상의 범용 프로세싱 코어에 의해 제공되는 리소스를 사용하여 전체적으로 또는 부분적으로 수행될 수 있다. 일 실시예에서, 미디어 파이프라인은 또한 범용 그래픽 프로세서 유닛(GPGPU) 동작을 위한 요소를 포함하며, 여기서 그래픽 프로세서는 그래픽 프리미티브의 렌더링에 명시적으로 관련되지 않은 계산 셰이더 프로그램을 사용하여 SIMD 벡터 연산을 수행하는 데 사용된다.
일부 실시예에서, 미디어 파이프라인(924)은 3D 파이프라인(922)과 유사한 방식으로 구성된다. 미디어 파이프라인 상태(940)를 구성하는 커맨드 세트는 미디어 객체 커맨드(942) 이전에 커맨드 큐(queue)에 디스패치 또는 배치된다. 일부 실시예에서, 미디어 파이프라인 상태(940)에 대한 커맨드는 미디어 객체를 프로세싱하는 데 사용될 미디어 파이프라인 요소를 구성하는 데이터를 포함한다. 여기에는 인코딩 또는 디코딩 포맷과 같은, 미디어 파이프라인 내에서 비디오 디코딩 및 비디오 인코딩 로직을 구성하는 데이터가 포함된다. 일부 실시예에서, 미디어 파이프라인 상태(940)에 대한 커맨드는 또한 상태 설정의 배치를 포함하는 "간접" 상태 요소에 대한 하나 이상의 포인터의 사용을 지원한다.
일부 실시예에서, 미디어 객체 커맨드(942)는 미디어 파이프라인에 의한 프로세싱을 위해 미디어 객체에 대한 포인터를 제공한다. 미디어 객체는 프로세싱될 비디오 데이터를 포함하는 메모리 버퍼를 포함한다. 일부 실시예에서, 미디어 객체 커맨드(942)를 발행하기 전에 모든 미디어 파이프라인 상태는 유효해야 한다. 일단 파이프라인 상태가 구성되고 미디어 객체 커맨드(942)가 큐잉되면, 미디어 파이프라인(924)은 실행 커맨드(944) 또는 동등한 실행 이벤트(예를 들어, 레지스터 기록)를 통해 트리거된다. 이후 미디어 파이프라인(924)으로부터의 출력은 3D 파이프라인(922) 또는 미디어 파이프라인(924)에 의해 제공되는 동작에 의해 사후 프로세싱될 수 있다. 일부 실시예에서, GPGPU 동작은 미디어 동작과 유사한 방식으로 구성되고 실행된다.
그래픽 소프트웨어 아키텍처
도 10은 일부 실시예에 따른 데이터 프로세싱 시스템(1000)에 대한 예시적인 그래픽 소프트웨어 아키텍처를 도시한다. 일부 실시예에서, 소프트웨어 아키텍처는 3D 그래픽 애플리케이션(1010), 운영 시스템(1020) 및 적어도 하나의 프로세서(1030)를 포함한다. 일부 실시예에서, 프로세서(1030)는 그래픽 프로세서(1032) 및 하나 이상의 범용 프로세서 코어(들)(1034)를 포함한다. 그래픽 애플리케이션(1010) 및 운영 시스템(1020)은 각각 데이터 프로세싱 시스템의 시스템 메모리(1050)에서 실행된다.
일부 실시예에서, 3D 그래픽 애플리케이션(1010)은 셰이더 명령어(1012)를 포함하는 하나 이상의 셰이더 프로그램을 포함한다. 셰이더 언어 명령어는 Direct3D의 HLSL(High-Level Shader Language), GLSL(OpenGL Shader Language) 등과 같은 고급 셰이더 언어로 작성될 수 있다. 애플리케이션은 또한 범용 프로세서 코어(1034)에 의해 실행하기에 적합한 기계어로 작성된 실행 가능한 명령어(1014)를 포함한다. 애플리케이션은 또한 정점 데이터에 의해 정의된 그래픽 객체(1016)를 포함한다.
일부 실시예에서, 운영 시스템(1020)은 Microsoft Corporation의 Microsoft®Windows® 운영 시스템, 사유 UNIX 계열 운영 시스템 또는 Linux 커널의 변형을 사용하는 오픈 소스 UNIX 계열 운영 시스템이다. 운영 시스템(1020)은 Direct3D API, OpenGL API 또는 Vulkan API와 같은 그래픽 API(1022)를 지원할 수 있다. Direct3D API가 사용 중일 때, 운영 시스템(1020)은 프론트-엔드 셰이더 컴파일러(1024)를 사용하여 HLSL로 작성된 모든 셰이더 명령어(1012)를 하위 레벨 셰이더 언어로 컴파일한다. 컴파일은 JIT(Just-In-Time) 컴파일이거나 또는 애플리케이션은 셰이더 사전 컴파일을 수행할 수 있다. 일부 실시예에서, 고급 셰이더는 3D 그래픽 애플리케이션(1010)을 컴파일하는 동안 저급 셰이더로 컴파일된다. 일부 실시예에서, 셰이더 명령어(1012)는 Vulkan API에서 사용되는 SPIR(Standard Portable Intermediate Representation)의 버전과 같은 중간 형태로 제공된다.
일부 실시예에서, 사용자 모드 그래픽 드라이버(1026)는 셰이더 명령어(1012)를 하드웨어 특정 표현으로 변환하는 백-엔드 셰이더 컴파일러(1027)를 포함한다. OpenGL API가 사용중일 때, GLSL 고급 언어로 작성된 셰이더 명령어(1012)는 컴파일을 위해 사용자 모드 그래픽 드라이버(1026)로 전달된다. 일부 실시예에서, 사용자 모드 그래픽 드라이버(1026)는 커널 모드 그래픽 드라이버(1029)와 통신하는 운영 시스템 커널 모드 기능(1028)을 사용한다. 일부 실시예에서, 커널 모드 그래픽 드라이버(1029)는 커맨드 및 명령어를 디스패치하기 위해 그래픽 프로세서(1032)와 통신한다.
IP 코어 구현
적어도 하나의 실시예의 하나 이상의 측면은 프로세서와 같은 집적 회로 내의 로직을 나타내고 및/또는 정의하는, 머신 판독 가능 매체 상에 저장된 전형적인 코드에 의해 구현될 수 있다. 예를 들어, 머신 판독 가능 매체는 프로세서 내의 다양한 로직을 표현하는 명령어를 포함할 수 있다. 머신에 의해 판독될 때, 명령어는 머신으로 하여금 본 명세서에 설명된 기술을 수행하는 로직을 제조하게 할 수 있다. "IP 코어"로 알려진 이러한 표현은 집적 회로의 구조를 설명하는 하드웨어 모델로서 유형의 머신 판독 가능 매체 상에 저장될 수 있는 집적 회로에 대한 로직의 재사용 가능한 유닛이다. 하드웨어 모델은 다양한 고객 또는 제작 시설에 공급될 수 있으며, 이들은 집적 회로를 제조하는 제조 기계에 하드웨어 모델을 로딩한다. 집적 회로는 본 명세서에 설명된 임의의 실시예와 관련하여 설명된 동작을 수행하도록 제조될 수 있다.
도 11a는 일 실시예에 따른 동작을 수행하기 위해 집적 회로를 제작하는 데 사용될 수 있는 IP 코어 개발 시스템(1100)을 도시하는 블록도이다. IP 코어 개발 시스템(1100)은 더 큰 설계에 통합될 수 있거나 또는 전체 집적 회로(예를 들어, SOC 집적 회로)를 구성하는 데 사용될 수 있는 모듈식의 재사용 가능한 설계를 생성하는 데 사용될 수 있다. 설계 설비(1130)는 고급 프로그래밍 언어(예를 들어, C/C ++)로 IP 코어 설계의 소프트웨어 시뮬레이션(1110)을 생성할 수 있다. 소프트웨어 시뮬레이션(1110)은 시뮬레이션 모델(1112)을 사용하여 IP 코어의 행동을 설계, 테스트 및 검증하는 데 사용될 수 있다. 시뮬레이션 모델(1112)은 기능, 행동 및/또는 타이밍 시뮬레이션을 포함할 수 있다. 이후 레지스터 전송 레벨(RTL) 설계(1115)는 시뮬레이션 모델(1112)로부터 생성 또는 합성될 수 있다. RTL 설계(1115)는 모델링된 디지털 신호를 사용하여 수행되는 관련 로직을 포함하는 하드웨어 레지스터들 사이의 디지털 신호의 흐름을 모델링하는 집적 회로의 동작의 추상화를 가리킨다. RTL 설계(1115)에 더하여, 로직 레벨 또는 트랜지스터 레벨에서의 저급 설계가 또한 생성, 설계 또는 합성될 수 있다. 따라서 초기 설계 및 시뮬레이션의 특정 세부 사항은 다를 수 있다.
RTL 설계(1115) 또는 등가물은 설계 설비에 의해 하드웨어 모델(1120)로 추가적으로 합성될 수 있으며, 이 하드웨어 모델(120)은 하드웨어 기술 언어(HDL)로 작성되거나, 또는 물리적 설계 데이터의 다른 표현일 수 있다. IP 코어 설계를 검증하기 위해 HDL을 추가로 시뮬레이션하거나 또는 테스트할 수 있다. IP 코어 설계는 제 3 자 제조 설비(1165)로 전달하기 위해 비휘발성 메모리(1140)(예를 들어, 하드 디스크, 플래시 메모리 또는 임의의 비휘발성 저장 매체)를 사용하여 저장될 수 있다. 이와 달리, IP 코어 설계는 유선 접속(1150) 또는 무선 접속(1160)을 통해(예를 들어, 인터넷을 통해) 전송될 수 있다. 이후 제조 설비(1165)는 IP 코어 설계에 적어도 부분적으로 기초한 집적 회로를 제조할 수 있다. 제조된 집적 회로는 본 명세서에 설명된 적어도 하나의 실시예에 따른 동작을 수행하도록 구성될 수 있다.
도 11b는 본 명세서에 설명된 일부 실시예에 따른 집적 회로 패키지 어셈블리(1170)의 측단면도를 도시한다. 집적 회로 패키지 어셈블리(1170)는 본 명세서에 설명된 것과 같은 하나 이상의 프로세서 또는 가속기 장치의 구현예를 도시한다. 패키지 어셈블리(1170)는 기판(1180)에 접속된 하드웨어 로직(1172, 1174)의 복수의 유닛을 포함한다. 로직(1172, 1174)은 적어도 부분적으로 구성 가능한 로직 또는 고정 기능 로직 하드웨어로 구현될 수 있으며, 본 명세서에 설명된 프로세서 코어(들), 그래픽 프로세서(들) 또는 다른 가속기 장치 중 어느 것의 하나 이상의 부분을 포함할 수 있다. 로직(1172, 1174)의 각각의 유닛은 반도체 다이 내에 구현될 수 있고 상호 접속 구조(1173)를 통해 기판(1180)에 연결될 수 있다. 상호 접속 구조(1173)는 로직(1172, 1174)과 기판(1180) 사이에서 전기적 신호를 라우팅하도록 구성될 수 있으며, 범프 또는 기둥과 같은 상호 접속부를 포함하지만 이에 한정되는 것은 아니다. 일부 실시예에서, 상호 접속 구조(1173)는, 예를 들어, 로직(1172, 1174)의 동작과 관련된 입력/출력(I/O) 신호 및/또는 전력 또는 접지 신호와 같은 전기 신호를 라우팅하도록 구성될 수 있다. 일부 실시예에서, 기판(1180)은 에폭시계 라미네이트 기판이다. 기판(1180)은 다른 실시예에서 다른 적합한 타입의 기판을 포함할 수 있다. 패키지 어셈블리(1170)는 패키지 상호 접속부(1183)를 통해 다른 전기 장치에 접속될 수 있다. 패키지 상호 접속부(1183)는 기판(1180)의 표면에 연결되어 전기 신호를 마더보드, 다른 칩셋 또는 멀티-칩 모듈과 같은 다른 전기 장치로 라우팅할 수 있다.
일부 실시예에서, 로직(1172, 1174)의 유닛은 로직(1172, 1174) 사이에 전기 신호를 라우팅하도록 구성된 브리지(1182)와 전기적으로 연결된다. 브리지(1182)는 전기 신호에 대한 경로를 제공하는 밀집된 상호 접속 구조일 수 있다. 브리지(1182)는 유리 또는 적절한 반도체 재료로 구성된 브리지 기판을 포함할 수 있다. 전기적 라우팅 특징부가 로직(1172, 1174) 사이에 칩과 칩의 접속을 제공하기 위해 브리지 기판 상에 형성될 수 있다.
로직(1172, 1174)의 2개의 유닛 및 브리지(1182)가 도시되어 있지만, 본 명세서에 설명된 실시예는 하나 이상의 다이 위에 더 많거나 더 적은 로직 유닛을 포함할 수 있다. 하나 이상의 다이는 로직이 단일 다이 위에 포함될 때 브리지(1182)가 배제될 수 있으므로 0개 이상의 브리지에 의해 접속될 수 있다. 이와 달리, 복수의 다이 또는 로직의 유닛은 하나 이상의 브리지에 의해 접속될 수 있다. 또한 복수의 로직 유닛, 다이 및 브리지는, 3 차원 구성을 포함한 다른 가능한 구성으로 함께 접속될 수 있다.
도 11c는 기판(1180)(예를 들어, 베이스 다이)에 접속된 하드웨어 로직 칩렛의 복수의 유닛을 포함하는 패키지 어셈블리(1190)를 도시한다. 본 명세서에 설명된 그래픽 프로세싱 유닛, 병렬 프로세서 및/또는 컴퓨팅 가속기는 개별적으로 제작된 다양한 실리콘 칩렛으로 구성될 수 있다. 이러한 맥락에서, 칩렛은 다른 칩렛과 함께 더 큰 패키지로 조립될 수 있는 로직의 별개의 유닛을 포함하는 적어도 부분적으로 패키지된 집적 회로이다. 다른 IP 코어 로직을 갖는 칩렛의 다양한 세트가 단일 장치에 조립될 수 있다. 또한 칩렛은 액티브 인터포저 기술을 사용하여 베이스 다이 또는 베이스 칩렛에 통합될 수 있다. 본 명세서에 설명된 개념은 GPU 내에서 IP의 상이한 형태 사이의 상호 접속 및 통신을 가능하게 한다. IP 코어는 서로 다른 프로세스 기술을 사용하여 제작될 수 있으며 제작 과정에서 구성될 수 있으므로, 이는, 특히 여러 가지 특징적 IP를 구비한 대형 SoC에서 복수의 IP를 동일한 제작 프로세스로 수렴시키는 복잡성을 회피할 수 있다. 복수의 프로세스 기술을 사용할 수 있으므로, 출시 시간을 단축시키고 또한 복수의 제품 SKU를 생성하는 비용 효율적인 방법이 제공된다. 또한, 분리된 IP는 독립적으로 파워를 켜고 끌 수 있고, 주어진 워크로드 상에서 사용되지 않는 컴포넌트의 전원을 차단할 수 있어 전체 전력 소비를 줄일 수 있다.
하드웨어 로직 칩렛은 특수 목적 하드웨어 로직 칩렛(1172), 로직 또는 I/O 칩렛(1174) 및/또는 메모리 칩렛(1175)을 포함할 수 있다. 하드웨어 로직 칩렛(1172) 및 로직 또는 I/O 칩렛(1174)은 적어도 부분적으로 구성 가능한 로직 또는 고정 기능 로직 하드웨어로 구현될 수 있으며, 프로세서 코어(들), 그래픽 프로세서(들), 병렬 프로세서 또는 본 명세서에 설명된 다른 가속기 장치 중 임의의 것의 하나 이상의 부분을 포함할 수 있다. 메모리 칩렛(1175)은 DRAM(예를 들어, GDDR, HBM) 메모리 또는 캐시(SRAM) 메모리일 수 있다.
각각의 칩렛은 개별 반도체 다이로서 제조될 수 있고 상호 접속 구조(1173)를 통해 기판(1180)에 연결될 수 있다. 상호 접속 구조(1173)는 다양한 칩렛과 기판(1180) 내의 로직 사이에서 전기 신호를 라우팅하도록 구성될 수 있다. 상호 접속 구조(1173)는 범프 또는 기둥과 같은 상호 접속부를 포함할 수 있지만, 이에 한정되는 것은 아니다. 일부 실시예에서, 상호 접속 구조(1173)는, 예를 들어, 로직, 입력/출력(I/O) 및 메모리 칩렛의 동작과 관련된 I/O 신호 및/또는 전력 또는 접지 신호와 같은 전기 신호를 라우팅하도록 구성될 수 있다.
일부 실시예에서, 기판(1180)은 에폭시계 라미네이트 기판이다. 기판(1180)은 다른 실시예에서 다른 적합한 타입의 기판을 포함할 수 있다. 패키지 어셈블리(1190)는 패키지 상호 접속부(1183)를 통해 다른 전기 장치에 접속될 수 있다. 패키지 상호 접속부(1183)는 기판(1180)의 표면에 연결되어 전기 신호를 마더보드, 다른 칩셋 또는 멀티-칩 모듈과 같은 다른 전기 장치로 라우팅할 수 있다.
일부 실시예에서, 로직 또는 I/O 칩렛(1174) 및 메모리 칩렛(1175)은 로직 또는 I/O 칩렛(1174)과 메모리 칩렛(1175) 사이에서 전기 신호를 라우팅하도록 구성된 브리지(1187)를 통해 전기적으로 연결될 수 있다. 브리지(1187)는 전기 신호에 대한 경로를 제공하는 밀집된 상호 접속 구조일 수 있다. 브리지(1187)는 유리 또는 적절한 반도체 재료로 구성된 브리지 기판을 포함할 수 있다. 전기적 라우팅 특징부가 브리지 기판 상에 형성되어 로직 또는 I/O 칩렛(1174)과 메모리 칩렛(1175) 사이에 칩과 칩의 접속을 제공할 수 있다. 브리지(1187)는 또한 실리콘 브리지 또는 상호 접속 브리지로 지칭될 수 있다. 예를 들어, 일부 실시예에서 브리지(1187)는 EMIB(Embedded Multi-die Interconnect Bridge)이다. 일부 실시예에서, 브리지(1187)는 단순히 하나의 칩렛에서 다른 칩렛으로의 직접 접속일 수 있다.
기판(1180)은 I/O(1191), 캐시 메모리(1192) 및 다른 하드웨어 로직(1193)을 위한 하드웨어 컴포넌트를 포함할 수 있다. 패브릭(1185)은 기판(1180)에 내장되어 기판(1180) 내의 다양한 로직 칩렛과 로직(1191, 1193) 사이의 통신을 가능하게 한다. 일 실시예에서, I/O(1191), 패브릭(1185), 캐시, 브리지 및 다른 하드웨어 로직(1193)은 기판(1180)의 위쪽에 층을 이루는 베이스 다이에 통합될 수 있다.
다양한 실시예에서, 패키지 어셈블리(1190)는 패브릭(1185) 또는 하나 이상의 브리지(1187)에 의해 상호 접속된 더 적거나 더 많은 개수의 컴포넌트 및 칩렛을 포함할 수 있다. 패키지 어셈블리(1190) 내의 칩렛은 3D 또는 2.5D 배열로 배열될 수 있다. 일반적으로, 브리지 구조(1187)는, 예를 들어, 로직 또는 I/O 칩렛과 메모리 칩렛 사이의 포인트-투-포인트 상호 접속을 용이하게 하는 데 사용될 수 있다. 패브릭(1185)은 다양한 로직 및/또는 I/O 칩렛(예를 들어, 칩렛(1172, 1174, 1191, 1193))을 다른 로직 및/또는 I/O 칩렛에 상호 접속하는 데 사용될 수 있다. 일 실시예에서, 기판 내의 캐시 메모리(1192)는 패키지 어셈블리(1190)를 위한 전역 캐시, 분산된 전역 캐시의 일부, 또는 패브릭(1185)을 위한 전용 캐시로서 동작할 수 있다.
도 11d는 일 실시예에 따른 교환 가능한 칩렛(1195)을 포함하는 패키지 어셈블리(1194)를 도시한다. 교환 가능한 칩렛(1195)은 하나 이상의 베이스 칩렛(1196, 1198) 상의 표준화된 슬롯에 조립될 수 있다. 베이스 칩렛(1196, 1198)은 본 명세서에 설명된 다른 브리지 상호 접속부와 유사할 수 있는 브리지 상호 접속부(1197)를 통해 연결될 수 있으며, 예를 들어, EMIB일 수 있다. 메모리 칩렛은 또한 브리지 상호 접속부를 통해 로직 또는 I/O 칩렛에 연결될 수 있다. I/O 및 로직 칩렛은 상호 접속 패브릭을 통해 통신할 수 있다. 베이스 칩렛은 각각 로직 또는 I/O 또는 메모리/캐시 중 하나에 대해 표준화된 포맷으로 하나 이상의 슬롯을 지원할 수 있다.
일 실시예에서, SRAM 및 전력 전달 회로는 하나 이상의 베이스 칩렛(1196, 1198)으로 제조될 수 있으며, 이 베이스 칩렛(1196, 1198)은 베이스 칩렛의 상부에 적층된 교환 가능한 칩렛(1195)과는 상이한 프로세스 기술을 사용하여 제조될 수 있다. 예를 들어, 베이스 칩렛(1196, 1198)은 더 큰 공정 기술을 사용하여 제조될 수 있는 반면, 교환 가능한 칩렛은 더 작은 공정 기술을 사용하여 제조될 수 있다. 하나 이상의 교환 가능한 칩렛(1195)은 메모리(예를 들어, DRAM) 칩렛일 수 있다. 전력 및/또는 패키지 조립체(1194)를 사용하는 제품에 대한 목표 성능에 따라 상이한 메모리 밀도가 패키지 조립체(1194)에 대해 선택될 수 있다. 또한, 상이한 개수의 기능 유닛의 타입을 갖는 로직 칩렛은 전력 및/또는 제품에 대한 목표 성능에 따라 조립시에 선택될 수 있다. 또한, 서로 다른 타입의 IP 로직 코어를 포함하는 칩렛을 교환 가능한 칩렛 슬롯에 삽입하여, 상이한 기술의 IP 블록을 혼합하고 매칭시킬 수 있는 하이브리드 프로세서 설계가 가능하다.
예시적인 시스템 온 칩 집적 회로
도 12 및 도 13은 본 명세서에 설명된 다양한 실시예에 따라 하나 이상의 IP 코어를 사용하여 제조될 수 있는 예시적인 집적 회로 및 관련 그래픽 프로세서를 도시한다. 도시된 것에 더하여, 추가 그래픽 프로세서/코어, 주변 장치 인터페이스 제어기, 또는 범용 프로세서 코어를 포함하는 다른 로직 및 회로가 포함될 수 있다.
도 12는 일 실시예에 따른 하나 이상의 IP 코어를 사용하여 제조될 수 있는 예시적인 시스템 온 칩 집적 회로(1200)을 도시하는 블록도이다. 예시적인 집적 회로(1200)는 하나 이상의 애플리케이션 프로세서(들)(1205)(예를 들어, CPU), 적어도 하나의 그래픽 프로세서(1210)를 포함하고, 이미지 프로세서(1215) 및/또는 비디오 프로세서(1220)를 추가로 포함할 수 있으며, 이들 중 임의의 것은 동일하거나 또는 복수의 다른 설계 시설로부터 제조된 모듈식 IP 코어일 수 있다. 집적 회로(1200)는 USB 제어기(1225), UART 제어기(1230), SPI/SDIO 제어기(1235) 및 I2S/I2C 제어기(1240)를 포함하는 주변 장치 또는 버스 로직을 포함한다. 또한, 집적 회로는 하나 이상의 HDMI(high-definition multimedia interface) 제어기(1250) 및 MIPI(mobile industry processor interface) 디스플레이 인터페이스(1255)에 연결된 디스플레이 장치(1245)를 포함할 수 있다. 저장 장치는 플래시 메모리 및 플래시 메모리 제어기를 포함하는 플래시 메모리 서브시스템(1260)에 의해 제공될 수 있다. 메모리 인터페이스는 SDRAM 또는 SRAM 메모리 장치에 액세스하기 위한 메모리 제어기(1265)를 통해 제공될 수 있다. 일부 집적 회로는 내장형 보안 엔진(1270)을 추가로 포함한다.
도 13a 및 도 13b는 본 명세서에 설명된 실시예에 따른, SoC 내에서 사용하기 위한 예시적인 그래픽 프로세서를 나타내는 블록도이다. 도 13a는 일 실시예에 따른 하나 이상의 IP 코어를 사용하여 제조될 수 있는 시스템 온 칩 집적 회로의 예시적인 그래픽 프로세서(1310)를 도시한다. 도 13b는 일 실시예에 따른 하나 이상의 IP 코어를 사용하여 제조될 수 있는 시스템 온 칩 집적 회로의 추가 예시적인 그래픽 프로세서(1340)를 도시한다. 도 13a의 그래픽 프로세서(1310)는 저전력 그래픽 프로세서 코어의 예이다. 도 13b의 그래픽 프로세서(1340)는 고성능 그래픽 프로세서 코어의 예이다. 그래픽 프로세서(1310, 1340) 각각은 도 12의 그래픽 프로세서(1210)의 변형일 수 있다.
도 13a에 도시된 것과 같이, 그래픽 프로세서(1310)는 정점 프로세서(1305) 및 하나 이상의 프래그먼트 프로세서(들)(1315A-1315N)(예를 들어, 1315A, 1315B, 1315C, 1315D, 내지 1315N-1 및 1315N)를 포함한다. 그래픽 프로세서(1310)는 별개의 로직을 통해 상이한 셰이더 프로그램을 실행할 수 있으므로, 하나 이상의 프래그먼트 프로세서(들)(1315A-1315N)가 프래그먼트 또는 픽셀 셰이더 프로그램에 대한 프래그먼트(예를 들어, 픽셀) 셰이딩 동작을 실행하는 동안, 정점 프로세서(1305)는 정점 셰이더 프로그램에 대한 동작을 실행하도록 최적화한다. 정점 프로세서(1305)는 3D 그래픽 파이프라인의 정점 프로세싱 단계를 수행하고 프리미티브 및 정점 데이터를 생성한다. 프래그먼트 프로세서(들)(1315A-1315N)는 정점 프로세서(1305)에 의해 생성된 프리미티브 및 정점 데이터를 사용하여 디스플레이 디바이스 상에 디스플레이되는 프레임 버퍼를 생성한다. 일 실시예에서, 프래그먼트 프로세서(들)(1315A-1315N)는 OpenGL API에서 제공되는 프래그먼트 셰이더 프로그램을 실행하도록 최적화되며, Direct 3D API에서 제공되는 픽셀 셰이더 프로그램과 유사한 동작을 수행하는 데 사용될 수 있다.
그래픽 프로세서(1310)는 하나 이상의 메모리 관리 유닛(MMU)(1320A, 1320B), 캐시(들)(1325A, 1325B) 및 회로 상호 접속부(들)(1330A, 1330B)를 추가로 포함한다. 하나 이상의 MMU(들)(1320A, 1320B)는, 하나 이상의 캐시(들)(1325A, 1325B)에 저장된 정점 또는 이미지/텍스처 데이터에 더하여 메모리에 저장된 정점 또는 이미지/텍스처를 참조할 수 있는, 정점 프로세서(1305) 및/또는 프래그먼트 프로세서(들)(1315A-1315N)를 포함하는 그래픽 프로세서(1310)에 대해 가상 주소를 물리 주소로 매핑한다. 일 실시예에서, 하나 이상의 MMU(들)(1320A, 1320B)는, 도 12의 하나 이상의 애플리케이션 프로세서(1205), 이미지 프로세서(1215) 및/또는 비디오 프로세서(1220)와 관련된 하나 이상의 MMU를 포함하는 시스템 내의 다른 MMU와 동기화되어, 각각의 프로세서(1205-1220)가 공유 또는 통합 가상 메모리 시스템에 참여할 수 있다. 하나 이상의 회로 상호 접속부(들)(1330A, 1330B)는, 그래픽 프로세서(1310)가 실시예에 따라 SoC의 내부 버스를 통해 또는 직접 접속을 통해 SoC 내의 다른 IP 코어와 인터페이스할 수 있도록 한다.
도 13b에 도시된 것과 같이, 그래픽 프로세서(1340)는 도 13a의 그래픽 프로세서(1310)의 하나 이상의 MMU(들)(1320A, 1320B), 캐시(들)(1325A, 1325B), 및 회로 상호 접속부(들)(1330A, 1330B)를 포함한다. 그래픽 프로세서(1340)는 하나 이상의 셰이더 코어(들)(1355A-1355N)(예를 들어, 1355A, 1355B, 1355C, 1355D, 1355E, 1355F 내지 1355N-1 및 1355N)를 포함하며, 이는, 단일 코어 또는 임의의 타입의 코어가 정점 셰이더, 프래그먼트 셰이더 및/또는 컴퓨팅 셰이더를 구현하는 셰이더 프로그램 코드를 포함하는 프로그래밍 가능한 셰이더 코드의 모든 타입을 실행할 수 있는 통합 셰이더 코어 아키텍처를 제공한다. 존재하는 셰이더 코어의 정확한 개수는 실시예 및 구현예에 따라 달라질 수 있다. 또한, 그래픽 프로세서(1340)는 스레드 디스패처로서 동작하여 실행 스레드를 하나 이상의 셰이더 코어(1355A-1355N)에 디스패치하는 코어 간(inter-core) 태스크 관리자(1345)와, 타일 기반 렌더링을 위한 타일링 동작을 가속화하는 타일링 유닛(1358)을 포함하고, 이 타일링 유닛에서는 장면에 대한 렌더링 작업이 이미지 공간에서 세분화되어, 예를 들어, 장면 내의 로컬 공간 일관성을 이용하거나 또는 내부 캐시의 사용을 최적화한다.
머신 학습 개요
머신 학습 알고리즘은 데이터 세트에 기초하여 학습될 수 있는 알고리즘이다. 머신 학습 알고리즘의 실시예는 데이터 세트 내에서 상위 레벨 추상화를 모델링하도록 설계될 수 있다. 예를 들어, 이미지 인식 알고리즘이 사용되어 주어진 입력이 속하는 몇몇 카테고리를 결정하고, 회귀분석 알고리즘은 입력이 주어지면 수치적인 값을 출력할 수 있고, 패턴 인식 알고리즘이 사용되어 변환된 텍스트를 생성하거나 텍스트 투 스피티 및/또는 스피치 인식을 수행할 수 있다.
예시적인 타입의 머신 학습 알고리즘은 신경망이다. 많은 타입의 신경망이 존재하며, 단순한 타입의 신경망은 피드포워드(feedforward) 네트워크이다. 피드포워드 네트워크는 노드가 계층으로 배열되는 비순환 그래프로서 구현될 수 있다. 일반적으로, 피드포워드 네트워크 토폴로지는 적어도 하나의 숨겨진 계층에 의해 분리된 입력 계층과 출력 계층을 포함한다. 숨겨진 계층은 입력 계층에 의해 수신된 입력을 출력 계층에서 출력을 생성하는데 유용한 표현으로 변환한다. 네트워크 노드는 에지를 통해 인접한 계층의 노드에 완전히 접속되어 있지만 각 계층 내의 노드 사이에는 에지가 없다. 피드포워드 네트워크의 입력 계층의 노드에서 수신된 데이터는 계층을 접속하는 각각의 에지와 각각 관련된 계수("가중치")에 기초하여 네트워크에서 각각의 연속 계층의 노드 상태를 계산하는 활성화 기능을 통해 출력 계층의 노드로 전파(즉, "피드포워드")된다. 실행되는 알고리즘으로 표현되는 특정 모델에 따라 신경망 알고리즘의 출력은 다양한 형태를 취할 수 있다.
머신 학습 알고리즘이 특정 문제를 모델링하기 위해 사용될 수 있기 전에, 알고리즘은 훈련 데이터 세트를 사용하여 훈련된다. 신경망 훈련은 네트워크 토폴로지를 선택하고, 네트워크가 모델링하는 문제를 나타내는 훈련 데이터 세트를 사용하고, 훈련 모델 세트의 모든 인스턴스에 대해 최소 오류로 네트워크 모델이 수행될 때까지 가중치를 조정하는 것을 포함한다. 예를 들어, 신경망에 대한 지도 학습 훈련 과정 동안, 훈련 데이터 세트에서 인스턴스를 나타내는 입력에 대한 응답으로 네트워크에 의해 생성된 출력은 해당 인스턴스에 대한 "정확한" 것으로 표시된 출력과 비교되고, 출력과 표시된 출력의 차이를 나타내는 오류 신호가 계산되며, 오류 신호가 네트워크의 계층을 통해 역방향으로 전파되고 해당 오류를 최소화하도록 접속과 관련된 가중치가 조정된다. 훈련 데이터 세트의 인스턴스로부터 생성된 각 출력에 대한 에러가 최소화될 때 네트워크는 "훈련된" 것으로 간주된다.
머신 학습 알고리즘의 정확도는 알고리즘을 훈련하는 데 사용되는 데이터 세트의 품질에 의해 크게 영향을 받을 수 있다. 훈련 과정은 계산 집약적일 수 있고 종래의 범용 프로세서에서 상당한 시간을 필요로 할 수 있다. 따라서, 병렬 프로세싱 하드웨어가 사용되어 많은 타입의 머신 학습 알고리즘을 훈련한다. 이것은 신경망의 계수를 조정하는데 수행된 계산이 본질적으로 병렬 구현에 적합하므로 신경망 훈련을 최적화하는데 특히 유용하다. 특히, 많은 머신 학습 알고리즘 및 소프트웨어 애플리케이션은 범용 그래픽 프로세싱 장치 내에서 병렬 프로세싱 하드웨어를 사용하도록 조정되었다.
도 14는 머신 학습 소프트웨어 스택(1400)의 일반화된 도면이다. 머신 학습 애플리케이션(1402)은 훈련 데이터 세트를 사용하여 신경망을 훈련시키거나 또는 훈련된 심층 신경망을 사용하여 머신 지능을 구현하도록 구성될 수 있다. 머신 학습 애플리케이션(1402)은 신경망 및/또는 배치 전에 신경망을 훈련시키는 데 사용될 수 있는 특수 소프트웨어를 위한 훈련 및 추론 기능을 포함할 수 있다. 머신 학습 애플리케이션(1402)은 이미지 인식, 매핑 및 위치 확인, 자율 네비게이션, 음성 합성, 의료 이미징 또는 언어 번역을 포함하지만 이에 한정되지 않는 임의의 타입의 머신 지능을 구현할 수 있다.
머신 학습 애플리케이션(1402)에 대한 하드웨어 가속은 머신 학습 프레임워크(1404)를 통해 가능해질 수 있다. 머신 학습 프레임워크(1404)는 머신 학습 프리미티브의 라이브러리를 제공할 수 있다. 머신 학습 프리미티브는 머신 학습 알고리즘에 의해 일반적으로 수행되는 기본적인 동작이다. 머신 학습 프레임워크(1404)가 없다면, 머신 학습 알고리즘의 개발자는 머신 학습 알고리즘과 관련된 주요 계산 로직을 생성 및 최적화한 다음 새로운 병렬 프로세서가 개발됨에 따라 계산 로직을 다시 최적화해야 한다. 대신에, 머신 학습 애플리케이션은 머신 학습 프레임워크(1404)에 의해 제공되는 프리미티브를 사용하여 필요한 계산을 수행하도록 구성될 수 있다. 예시적인 프리미티브는 텐서 컨벌루션, 활성화 기능 및 풀링을 포함하고, 이들은 컨볼루션 신경망(CNN)을 훈련하는 동안 수행되는 계산 동작이다. 머신 학습 프레임워크(1404)는 또한 매트릭스 및 벡터 연산과 같은 많은 머신 학습 알고리즘에 의해 수행되는 기본 선형 대수 서브프로그램을 구현하는 프리미티브를 제공할 수 있다.
머신 학습 프레임워크(1404)는 머신 학습 애플리케이션(1402)으로부터 수신된 입력 데이터를 프로세싱하고 컴퓨팅 프레임워크(1406)에 적절한 입력을 생성할 수 있다. 컴퓨팅 프레임워크(1406)는, 머신 학습 프레임워크(1404)가 GPGPU 하드웨어(1410)의 아키텍처에 대한 많은 지식을 가질 것을 요구하지 않고도 머신 학습 프레임워크(1404)가 GPGPU 하드웨어(1410)를 통한 하드웨어 가속의 이점을 이용할 수 있도록 GPGPU 드라이버(1408)에 제공되는 기본 명령어를 추상화할 수 있다. 또한, 컴퓨팅 프레임워크(1406)는 다양한 타입 및 세대의 GPGPU 하드웨어(1410)에 대해 머신 학습 프레임워크(1404)에 대한 하드웨어 가속을 가능하게 할 수 있다.
머신 학습 신경망 구현
본 명세서에서 설명된 실시예에 의해 제공되는 컴퓨팅 아키텍처는 머신 학습을 위한 신경망을 훈련 및 전개하는데 특히 적합한 병렬 처리의 타입을 수행하도록 구성될 수 있다. 신경망은 그래프 관계를 갖는 기능의 네트워크로서 일반화될 수 있다. 이 기술 분야에 알려진 것과 같이, 머신 학습에 사용되는 신경망 구현예에는 다양한 타입이 존재한다. 하나의 예시적인 타입의 신경망은 전술한 것과 같은 피드포워드 네트워크이다.
신경망의 제 2 예시적인 타입은 컨볼루션 신경망(CNN)이다. CNN은 이미지 데이터와 같이 공지의 그리드형 토폴로지를 갖는 데이터를 프로세싱하기 위한 특수 피드포워드 신경망이다. 따라서, CNN은 컴퓨팅 비전 및 이미지 인식 애플리케이션에 일반적으로 사용되지만, 스피치 및 언어 프로세싱과 같은 다른 타입의 패턴 인식에도 사용될 수 있다. CNN 입력 계층의 노드는 "필터"(망막에서 발견되는 수용 필드에서 영감을 얻은 특징 검출기) 세트로 구성되며, 각 필터 세트의 출력은 네트워크의 연속 계층의 노드로 전파된다. CNN의 계산은 컨볼루션 수학 연산을 각 필터에 적용하여 해당 필터의 출력을 생성하는 것을 포함한다. 컨볼루션은 2개의 오리지널 함수 중 하나의 수정된 버전인 세 번째 함수를 생성하기 위해 2개의 함수에 의해 수행되는 특수한 종류의 수학적 연산이다. 컨볼루션 네트워크 용어에서는, 컨볼루션에 대한 첫 번째 함수를 입력이라고 하고, 두 번째 함수를 컨볼루션 커널(kernel)이라고 한다. 출력은 특징 맵(feature map)이라고 한다. 예를 들어, 컨볼루션 계층에 대한 입력은 입력 이미지의 다양한 컬러 컴포넌트를 정의하는 데이터의 다차원 배열일 수 있다. 컨볼루션 커널은 파라미터의 다차원 배열일 수 있으며, 여기서 파라미터는 신경망에 대한 훈련 과정에 의해 조정된다.
순환 신경망(RNN; recurrent neural network)은 계층들 사이의 피드백 접속을 포함하는 피드포워드 신경망의 계열이다. RNN은 신경망의 다른 부분에 걸쳐 파라미터 데이터를 공유함으로써 시퀀스 데이터의 모델링을 가능하게 한다. RNN의 아키텍처는 주기를 포함한다. RNN으로부터의 출력 데이터의 적어도 일부가 시퀀스에서 후속 입력을 프로세싱하기 위한 피드백으로서 사용되므로, 주기는 변수의 현재 값이 미래의 그 자체의 값에 미치는 영향을 나타낸다. 이러한 특징으로 인해 RNN은 언어 데이터를 구성할 수 있는 변수의 본질에 따른 언어 처리에 특히 유용하다.
이하에서 설명된 도면은 예시적인 피드포워드, CNN 및 RNN 네트워크를 제시하고, 또한 이러한 타입의 네트워크 각각을 각각 훈련하고 전개하기 위한 일반적인 과정을 설명한다. 이들 설명은 본 명세서에 설명된 임의의 특정 실시예에 대해 예시적이고 비제한적이며, 설명된 개념은 일반적으로 심층 신경망 및 머신 학습 기술에 일반적으로 적용될 수 있음을 이해할 수 있을 것이다.
전술한 예시적인 신경망은 딥 러닝(deep learning)을 수행하는 데 사용될 수 있다. 딥 러닝은 심층 신경망을 사용한 머신 학습이다. 딥 러닝에 사용되는 심층 신경망은 단일의 숨겨진 계층만을 포함하는 얕은 신경망과 달리 복수 개의 숨겨진 계층으로 구성된 인공 신경망이다. 보다 더 심층의 신경망은 일반적으로 훈련에 더욱 계산 집약적이다. 그러나, 네트워크의 추가의 숨겨진 계층은 복수 단계 패턴 인식을 가능하게 하여 얕은 머신 학습 기술에 비해 출력 오류를 줄인다.
딥 러닝에 사용되는 심층 신경망은 전형적으로, 모델에 제공된 특징 표현에 기초하여 동작(예를 들어, 객체 분류, 음성 인식 등)을 수행할 수 있는 수학적 모델을 나타내는 백-엔드 네트워크에 연결된 특징 인식을 수행하는 프론트-엔드 네트워크를 포함한다. 딥 러닝을 사용하면, 모델에 대해 수동적으로 설계된 특징의 엔지니어링을 수행하지 않고도 머신 학습을 수행할 수 있다. 대신, 심층 신경망은 입력 데이터 내의 통계적 구조 또는 상관 관계를 기반으로 특징을 학습할 수 있다. 학습된 특징은 감지된 특징을 출력에 매핑할 수 있는 수학적 모델에 제공될 수 있다. 네트워크에서 사용하는 수학적 모델은 일반적으로 수행할 특정 작업에 특화되어 있으며 다른 모델은 다른 작업을 수행하는 데 사용된다.
신경망이 구성되면, 학습 모델이 네트워크에 적용되어 특정 태스크를 수행하도록 네트워크를 훈련시킬 수 있다. 학습 모델은 모델 내의 가중치를 조정하여 네트워크의 출력 오류를 줄이는 방법을 설명한다. 오류의 역전파는 신경망을 훈련하는 데 사용되는 일반적인 방법이다. 프로세싱을 위해 입력 벡터가 네트워크에 제공된다. 네트워크의 출력은 손실 함수를 사용하여 원하는 출력과 비교되며, 출력 계층의 각각의 뉴런에 대해 오류 값이 계산된다. 오류 값은 각각의 뉴런이 오리지널 출력에 대한 기여를 대략적으로 나타내는 관련 오류 값을 가질 때까지 역전파된다. 그러면, 네트워크는 확률적 감소 그래디언트 알고리즘(stochastic gradient descent algorithm)과 같은 알고리즘을 사용하여 이러한 오류로부터 학습하여, 신경망의 가중치를 업데이트할 수 있다.
도 15a 및 도 15b는 예시적인 컨볼루션 신경망을 도시한다. 도 15a는 CNN 내의 다양한 계층을 도시한다. 도 15a에 도시된 것과 같이, 이미지 프로세싱을 모델링하기 위해 사용된 예시적인 CNN은 입력 이미지의 레드, 그린 및 블루(RGB) 컴포넌트를 설명하는 입력(1502)을 수신할 수 있다. 입력(1502)은 복수의 컨볼루션 계층(예를 들어, 제 1 컨볼루션 계층(1504), 제 2 컨볼루션 계층(1506))에 의해 프로세싱될 수 있다. 복수의 컨볼루션 계층으로부터의 출력은 선택에 따라, 완전히 접속된 계층(1508)의 세트에 의해 프로세싱될 수 있다. 완전히 접속된 계층의 뉴런은 피드포워드 네트워크에 대해 전술한 것과 같이, 이전 계층에서의 모든 활성화에 완전히 접속된다. 완전히 접속된 계층(1508)으로부터의 출력은 네트워크로부터 출력 결과를 생성하는 데 사용될 수 있다. 완전히 접속된 계층(1508) 내의 활성화는 컨볼루션 대신 매트릭스 곱셈을 사용하여 컴퓨팅될 수 있다. 모든 CNN 구현예가 완전히 접속된 계층을 사용하는 것은 아니다. 예를 들어, 일부 구현예에서, 컨볼루션 계층(1506)은 CNN에 대한 출력을 생성할 수 있다.
컨볼루션 계층은 드물게 접속되며, 이는 완전히 접속된 계층(1508)에서 발견된 전통적인 신경망 구성과 다르다. 전통적인 신경망 계층은 모든 출력 유닛이 모든 입력 유닛과 상호작용하도록 완전히 접속된다. 그러나, 전술한 것과 같이, (필드 내의 각 노드의 각각의 상대적 상태 값을 대신하여) 필드의 컨볼루션의 출력이 후속 계층의 노드에 입력되기 때문에, 컨볼루션 계층은 드물게 접속된다. 컨볼루션 계층과 관련된 커널은 컨볼루션 연산을 수행하며 그 결과는 다음 계층으로 전송된다. 컨볼루션 계층 내에서 수행되는 차원 축소는 CNN이 큰 이미지를 프로세싱하도록 확장할 수 있게 하는 하나의 측면이다.
도 15b는 CNN의 컨볼루션 계층 내의 예시적인 계산 단계를 도시한다. CNN의 컨볼루션 계층으로의 입력(1512)은 컨볼루션 계층(1514)의 3 단계로 프로세싱될 수 있다. 3 단계는 컨볼루션 단계(1516), 검출기 단계(1518) 및 풀링 단계(1520)를 포함할 수 있다. 이후, 컨볼루션 계층(1514)은 후속 컨볼루션 계층으로 데이터를 출력할 수 있다. 네트워크의 최종 컨볼루션 계층은 출력 특징 맵 데이터를 생성하거나 또는 완전히 접속된 계층에 입력을 제공하여, 예를 들어, CNN으로의 입력에 대한 분류 값을 생성할 수 있다.
컨벌루션 단계(1516)에서는 선형 활성화 세트(set of linear activations)를 생성하기 위해 여러 컨볼루션이 병렬로 수행된다. 컨벌루션 단계(1516)는 아핀(affine) 변환을 포함할 수 있으며, 이 아핀 변환은 선형 변환과 이동의 합으로 지정될 수 있는 임의의 변환이다. 아핀 변환은 회전, 이동, 확대 및 이러한 변환의 조합을 포함한다. 컨벌루션 단계는 뉴런과 관련된 로컬 영역으로서 결정될 수 있는 입력의 특정 영역에 접속된 함수(예를 들어, 뉴런)의 출력을 컴퓨팅한다. 뉴런은 뉴런의 가중치와 뉴런이 접속된 로컬 입력 영역 사이의 내적을 컴퓨팅한다. 컨볼루션 단계(1516)로부터의 출력은 컨볼루션 계층(1514)의 후속 단계에 의해 프로세싱되는 선형 활성화 세트를 정의한다.
선형 활성화는 검출기 단계(1518)에 의해 프로세싱될 수 있다. 검출기 단계(1518)에서, 각각의 선형 활성화는 비선형 활성화 함수에 의해 프로세싱된다. 비선형 활성화 함수는 컨볼루션 계층의 수용 필드에 영향을 미치지 않으면서 전체 네트워크의 비선형 속성을 증가시킨다. 여러 타입의 비선형 활성화 함수가 사용될 수 있다. 하나의 특정 타입은 f(x) = max(0, x)로 정의된 활성화 함수를 사용하여 활성화가 0에서 임계값이 되도록 하는 정류 선형 유닛(ReLU)이다.
풀링 단계(1520)는 제 2 컨볼루션 계층(1506)의 출력을 근처의 출력의 요약 통계로 대체하는 풀링 함수를 사용한다. 풀링 함수는 신경망에 이동 불변성을 도입하는 데 사용할 수 있으므로, 입력에 대한 작은 이동은 풀링된 출력을 변경하지 않는다. 로컬 이동에 대한 불변성은 입력 데이터에 특징의 존재가 특징의 정확한 위치보다 중요한 시나리오에서 유용할 수 있다. 풀링 단계(1520)에서 최대 풀링, 평균 풀링 및 l2-표준(norm) 풀링을 포함하는 다양한 타입의 풀링 함수를 사용할 수 있다. 또한, 일부 CNN 구현예에는 풀링 단계가 포함되지 않는다. 대신에, 이러한 구현예는 이전 컨볼루션 단계에 비해 증가된 스트라이드(stride)를 갖는 추가 컨볼루션 단계로 대체한다.
컨볼루션 계층(1514)으로부터의 출력은 다음 계층(1522)에 의해 프로세싱될 수 있다. 다음 계층(1522)은 완전히 접속된 계층(3208) 중 하나 또는 추가 컨볼루션 계층일 수 있다. 예를 들어, 도 15a의 제 1 컨볼루션 계층(3204)은 제 2 컨볼루션 계층(3206)으로 출력할 수 있고, 제 2 컨볼루션 계층은 완전히 접속된 계층(1508)의 제 1 계층으로 출력할 수 있다.
도 16은 예시적인 순환 신경망을 도시한다. 순환 신경망(RNN)에서, 네트워크의 이전 상태는 네트워크의 현재 상태의 출력에 영향을 미친다. RNN은 다양한 함수를 사용하여 다양한 방식으로 구축될 수 있다. RNN의 사용은 일반적으로 입력의 이전 시퀀스에 기초하여 미래를 예측하는 수학적 모델을 사용하는 것을 중심으로 이루어진다. 예를 들어, RNN은 단어의 이전 시퀀스가 주어지면 다음의 단어를 예측하는 통계 언어 모델링을 수행하는 데 사용될 수 있다. 도시된 RNN(1600)은 입력 벡터를 수신하는 입력 계층(1602), 순환 기능을 구현하는 숨겨진 계층(1604), 이전 상태의 '메모리'를 가능하게 하는 피드백 메커니즘(1605), 및 결과를 출력하는 출력 계층(1606)을 갖는 것으로 설명될 수 있다. RNN(1600)은 시간 단계에 따라 동작한다. 주어진 시간 단계에서 RNN의 상태는 피드백 메커니즘(1605)을 통해 이전 시간 단계에 따라 영향을 받는다. 주어진 시간 단계에서, 숨겨진 계층(1604)의 상태는 이전 상태 및 현재 시간 단계에서의 입력에 의해 정의된다. 제 1 시간 단계에서의 초기 입력(x1)은 숨겨진 계층(1604)에 의해 프로세싱될 수 있다. 제 2 입력(x2)은 초기 입력(x1)의 프로세싱 동안 결정된 상태 정보를 사용하여 숨겨진 계층(1604)에 의해 프로세싱될 수 있다. 주어진 상태는 st = f(Uxt + Wst-1)로 컴퓨팅될 수 있으며, 여기서 U와 W는 파라미터 매트릭스이다. 함수(f)는 일반적으로 쌍곡선 탄젠트 함수(Tanh) 또는 정류기 함수 f(x) = max(0, x)의 변형과 같은 비선형이다. 그러나, 숨겨진 계층(1604)에서 사용되는 특정 산술 함수는 RNN(1600)의 특정 구현예의 세부 사항에 따라 변할 수 있다.
설명된 기본 CNN 및 RNN 네트워크 외에, 이들 네트워크에 대한 변형이 가능할 수 있다. RNN 변형의 일 예는 LSTM(long short term memory) RNN이다. LSTM RNN은 언어의 더 긴 시퀀스를 처리하는데 필요할 수 있는 장기적인 종속성을 학습할 수 있다. CNN의 변형은 컨볼루션 DBN(deep belief network)으로서, CNN과 유사한 구조를 가지며 DBN과 유사한 방식으로 훈련된다. DBN은 확률적(랜덤) 변수의 복수 계층으로 구성된 생산적 신경망이다. 욕심 많은(greedy) 비지도(unsupervised) 학습을 사용하여 DBN을 계층별로 훈련할 수 있다. 이후, DBN의 학습된 가중치는 신경망에 대한 최적의 초기 가중치 세트를 결정함으로써 사전 훈련된 신경망을 제공하는 데 사용될 수 있다.
도 17은 심층 신경망의 훈련 및 전개를 도시한다. 주어진 네트워크가 태스크를 위해 구성되면, 신경망은 훈련 데이터세트(1702)를 사용하여 훈련된다. 훈련 과정의 하드웨어 가속이 가능하도록 다양한 훈련 프레임워크가 개발되었다. 예를 들어, 도 14의 머신 학습 프레임워크는 훈련 프레임워크(1704)로서 구성될 수 있다. 훈련 프레임워크(1704)는 훈련되지 않은 신경망(1706)에 연결될 수 있고 본 명세서에 설명된 병렬 프로세싱 리소스를 사용하여 훈련되지 않은 신경망을 훈련시켜 훈련된 신경망(1708)을 생성할 수 있다. 훈련 과정을 시작하기 위해, 초기 가중치는 랜덤하게 또는 DBN을 사용하는 사전 훈련에 의해 선택될 수 있다. 훈련 주기는 지도 또는 비지도 방식으로 수행될 수 있다.
지도 학습은, 훈련 데이터세트(1702)가 입력에 대한 원하는 출력과 쌍을 이루는 입력을 포함하는 경우, 또는 훈련 데이터세트가 알려진 출력을 갖는 입력을 포함하고 신경망의 출력이 수동적으로 등급이 정해지는 경우와 같이, 훈련이 중재된 동작으로서 수행되는 학습 방법이다. 네트워크는 입력을 프로세싱하고 산출되는 출력을 예상 또는 원하는 출력 세트와 비교한다. 이후 시스템을 통해 오류가 역전파된다. 훈련 프레임워크(1704)는 훈련되지 않은 신경망(1706)을 제어하는 가중치를 조정하도록 조정할 수 있다. 훈련 프레임워크(1704)는 훈련되지 않은 신경망(1706)이 알려진 입력 데이터에 기초하여 정확한 답변을 생성하는 적합한 모델을 향해 얼마나 잘 수렴하는지를 모니터하는 도구를 제공할 수 있다. 훈련 과정은 신경망에 의해 생성된 출력을 개선하기 위해 네트워크의 가중치가 조정됨에 따라 반복적으로 발생한다. 훈련 과정은 신경망이 훈련된 신경망(1708)과 관련된 통계적으로 원하는 정확도에 도달할 때까지 계속될 수 있다. 이후 훈련된 신경망(1708)은 임의의 개수의 머신 학습 동작을 구현하여 새로운 데이터(1712)의 입력에 기초하여 추론 결과(1714)을 생성하도록 전개될 수 있다.
비지도 학습은 네트워크가 라벨링되지 않은 데이터(unlabeled data)를 사용하여 스스로 학습을 시도하는 학습 방법이다. 따라서, 비지도 학습을 위해, 훈련 데이터세트(1702)는 어떠한 관련된 출력 데이터 없이 입력 데이터를 포함할 것이다. 훈련되지 않은 신경망(1706)은 표시되지 않은 입력 내의 그룹화를 학습할 수 있고 개별 입력이 전체 데이터세트와 어떻게 관련되는지를 결정할 수 있다. 비지도 훈련은 데이터의 차원을 감소시키는데 유용한 연산을 수행할 수 있는 훈련된 신경망(1707)의 타입인 자체 구성 맵(self-organizing map)을 생성하는 데 사용될 수 있다. 비지도 훈련은 또한 비정상 탐지를 수행하는데 이용될 수 있으며, 이로 인해 데이터의 정상적인 패턴에서 벗어난 입력 데이터세트에서의 데이터 포인트를 식별할 수 있다.
지도 및 비지도 훈련에 대한 변형이 또한 사용될 수 있다. 반지도(semi-supervised) 학습은 훈련 데이터세트(1702)에 동일한 분포의 라벨링된 데이터와 라벨링되지 않은 데이터가 혼합된 것이 포함되는 기술이다. 증분 학습은 입력 데이터를 지속적으로 사용하여 모델을 추가 훈련하는 지도 학습의 변형이다. 증분 학습은 훈련된 신경망(1708)이 초기 훈련 동안 네트워크 내에 주입된 지식을 잊지 않고 새로운 데이터(1712)에 적응할 수 있도록 한다.
지도 및 비지도에 관계없이, 특히 심층 신경망에 대한 훈련 과정은 단일 컴퓨팅 노드에 대해 너무 계산 집약적일 수 있다. 단일 컴퓨팅 노드를 사용하는 대신 컴퓨팅 노드의 분산 네트워크를 사용하여 훈련 과정을 가속화할 수 있다.
도 18은 분산 학습을 도시한 블록도이다. 분산 학습은 복수의 분산 컴퓨팅 노드를 사용하여 신경망의 지도 또는 비지도 훈련을 수행하는 훈련 모델이다. 분산 컴퓨팅 노드는 각각 하나 이상의 호스트 프로세서 및 하나 이상의 범용 프로세싱 노드를 포함할 수 있다. 도시된 것과 같이, 분산 학습은 모델 병렬성(1802), 데이터 병렬성(1804), 또는 모델과 데이터 병렬성(1804)의 결합으로 수행될 수 있다.
모델 병렬성(1802)에서, 분산 시스템의 상이한 컴퓨팅 노드는 단일 네트워크의 상이한 부분에 대한 훈련 계산을 수행할 수 있다. 예를 들어, 신경망의 각각의 계층은 분산 시스템의 다른 프로세싱 노드에 의해 학습될 수 있다. 모델 병렬성의 이점은 특히 큰 모델로 확장할 수 있는 기능을 포함한다. 신경망의 다른 계층과 관련된 계산을 분할하면, 모든 계층의 가중치가 단일 컴퓨팅 노드의 메모리에 맞지 않는 매우 큰 신경망을 훈련할 수 있다. 일부 인스턴스에서, 모델 병렬성은 대규모 신경망의 비지도 훈련을 수행하는데 특히 유용할 수 있다.
데이터 병렬성(1804)에서, 분산 네트워크의 다른 노드는 모델의 완료된 인스턴스를 가지며 각각의 노드는 데이터의 다른 부분을 수신한다. 이후 다른 노드로부터의 결과가 결합된다. 데이터 병렬성에 대한 다른 접근법이 가능하지만, 데이터 병렬 훈련 접근법은 모두 결과를 결합하고 각각의 노드 사이에서 모델 파라미터를 동기화하는 기술을 필요로 한다. 데이터를 결합하는 예시적인 방법은 파라미터 평균화 및 업데이트 기반 데이터 병렬성을 포함한다. 파라미터 평균화는 훈련 데이터의 서브세트 상에서 각각의 노드를 훈련시키고, 전역 파라미터(예를 들어, 가중치, 바이어스)를 각각의 노드로부터의 파라미터의 평균으로 설정한다. 파라미터 평균화는 파라미터 데이터를 관리하는 중앙 파라미터 서버를 사용한다. 업데이트 기반 데이터 병렬성은 노드로부터의 파라미터를 파라미터 서버로 전송하는 대신 모델에 대한 업데이트가 전송된다는 점을 제외하고는 파라미터 평균화와 유사하다. 또한 업데이트 기반 데이터 병렬성은 분산된 방식으로 수행될 수 있으며, 여기서 업데이트는 압축되어 노드간에 전송된다.
결합된 모델 및 데이터 병렬성(1806)은, 예를 들어 각각의 컴퓨팅 노드가 복수의 GPU를 포함하는 분산 시스템으로 구현될 수 있다. 각각의 노드는 모델의 다른 부분을 훈련시키는 데 사용되는 각각의 노드 내에 별도의 GPU를 구비한 모델의 완료된 인스턴스를 가질 수 있다.
분산 훈련은 단일 머신 상에서의 훈련에 비해 오버헤드가 증가된다. 그러나, 본 명세서에 설명된 병렬 프로세서 및 GPGPU는 각각 고대역폭 GPU-GPU 데이터 전송 및 가속 원격 데이터 동기화를 가능하게 하는 기술을 포함하여 분산 훈련의 오버헤드를 감소시키는 다양한 기술을 구현할 수 있다.
예시적 머신 학습 애플리케이션
머신 학습은, 컴퓨터 비전, 자율 주행 및 내비게이션, 음성 인식 및 언어 프로세싱을 포함하지만 이에 한정되지 않는 다양한 기술적 문제를 해결하기 위해 적용될 수 있다. 컴퓨터 비전은 전통적으로 머신 학습 애플리케이션에서 가장 활발한 연구 분야 중 하나였다. 컴퓨터 비전의 애플리케이션은 얼굴 인식과 같은 인간의 시각 능력의 재생에서 시각 능력의 새로운 범주를 생성하는 것에까지 이른다. 예를 들어, 컴퓨터 비전 애플리케이션은 비디오에서 볼 수 있는 물체에 유도된 진동으로부터 음파를 인식하도록 구성될 수 있다. 병렬 프로세서 가속 머신 학습을 사용하면, 이전에 가능했던 것보다 훨씬 많은 훈련 데이터세트를 사용하여 컴퓨터 비전 애플리케이션을 훈련하고 저전력 병렬 프로세서를 사용하여 추론 시스템을 전개할 수 있다.
병렬 프로세서 가속 머신 학습은 차선 및 도로 표지판 인식, 장애물 회피, 내비게이션 및 주행 제어를 포함하는 자율 주행 애플리케이션을 갖는다. 가속 머신 학습 기술을 사용하여 특정 훈련 입력에 대한 적절한 응답을 정의하는 데이터세트를 기반으로 주행 모델을 훈련할 수 있다. 본 명세서에 설명된 병렬 프로세서를 사용하면, 자율 주행 솔루션에 사용되는 점점 더 복잡한 신경망의 빠른 훈련이 가능하고 자율 주행 차량에 통합하기에 적합한 모바일 플랫폼에 저전력 추론 프로세서를 전개할 수 있다.
병렬 프로세서 가속 심층 신경망은 자동 음성 인식(ASR)에 대한 머신 학습 접근법을 가능하게 하였다. ASR은 입력 음향 시퀀스가 주어지면 가장 가능성 있는 언어 시퀀스를 컴퓨팅하는 기능의 생성을 포함한다. 심층 신경망을 사용하는 가속 머신 학습을 사용하면, 이전에 ASR에 사용된 HMM(hidden Makov model) 및 GMM(Gaussian mixture model)을 대체할 수 있었다.
병렬 프로세서 가속 머신 학습은 또한 자연 언어 프로세싱을 가속화하는 데 사용될 수 있다. 자동 학습 절차는 통계적 추론 알고리즘을 사용하여 잘못되었거나 또는 익숙하지 않은 입력에 대해 강건한(robust) 모델을 생성할 수 있다. 예시적인 자연 언어 프로세서 애플리케이션은 인간 언어 간의 자동 머신 번역을 포함한다.
머신 학습에 사용되는 병렬 프로세싱 플랫폼은 훈련 플랫폼 및 전개 플랫폼으로 나뉠 수 있다. 훈련 플랫폼은 일반적으로 고도로 병렬적이며 멀티-GPU 단일 노드 훈련 및 멀티-노드 멀티-GPU 훈련을 가속화하는 최적화 기능을 포함하는 한편, 전개된 머신 학습(예컨대, 추론) 플랫폼은 일반적으로 카메라, 자율 로봇 및 자율 주행 차량과 같은 제품에 사용하기에 적합한 저전력 병렬 프로세서를 포함한다.
매트릭스 가속 로직을 구비한 GPGPU
도 19는 일 실시예에 따른 프로세싱 시스템(1900)의 블록도이다. 데이터 처리 시스템(1900)은 프로세서(1902), 통합 메모리(1910) 및 머신 학습 가속 로직을 포함하는 GPGPU(1920)를 갖는 이종 프로세싱 시스템이다. 프로세서(1902) 및 GPGPU(1920)는 본 명세서에 설명된 바와 같은 프로세서 및 GPGPU/병렬 프로세서 중 임의의 것일 수 있다. 프로세서(1902)는 시스템 메모리(1912)에 저장된 컴파일러(1915)에 대한 명령어를 실행할 수 있다. 컴파일러(1915)는 프로세서(1902)에서 실행되어 소스 코드(1914A)를 컴파일된 코드(1914B)로 컴파일한다. 컴파일된 코드(1914B)는 프로세서(1902)에 의해 실행될 수 있는 명령어 및/또는 GPGPU(1920)에 의해 실행될 수 있는 명령어를 포함할 수 있다. 컴파일 동안, 컴파일러(1915)는, 컴파일된 코드(1914B) 내에 존재하는 데이터 병렬성 수준에 관한 힌트 및/또는 컴파일된 코드(1914B)에 기초하여 디스패치될 스레드와 연관된 데이터 장소에 관한 힌트를 포함하는, 메타 데이터를 삽입하는 연산을 수행할 수 있다. 컴파일러(1915)가 그러한 동작을 수행하는 데 필요한 정보를 포함할 수도 있고, 또는 이들 동작이 런타임 라이브러리(1916)의 도움으로 수행될 수도 있다. 런타임 라이브러리(1916)는 또한 소스 코드(1914A)의 컴파일에서 컴파일러(1915)를 지원할 수 있으며, GPGPU(1920)에서 컴파일된 명령어의 실행을 용이하게 하기 위해 런타임시 컴파일된 코드(1914B)와 링크된 명령어를 포함할 수도 있다.
통합 메모리(1910)는 프로세서(1902) 및 GPGPU(1920)에 의해 액세스될 수 있는 통합 어드레스 공간을 나타낸다. 통합 메모리는 GPGPU 메모리(1918) 뿐만 아니라 시스템 메모리(1912)를 포함할 수 있다. GPGPU 메모리(1918)는 GPGPU(1920)의 어드레스 공간 내의 메모리이고, 시스템 메모리(1912)의 일부 또는 전부를 포함할 수 있다. 일 실시예에서 GPGPU 메모리(1918)는 또한 GPGPU(1920)에 의해 독점적으로 사용하도록 전용된 임의의 메모리의 적어도 일부를 포함할 수 있다. 일 실시예에서, 시스템 메모리(1912)에 저장된 컴파일된 코드(1914B)는 GPGPU(1920)에 의한 액세스를 위해 GPGPU 메모리(1918)에 매핑될 수 있다.
GPGPU(1920)는, 본 명세서에 설명된 다양한 컴퓨팅 유닛 또는 실행 요소 중 하나 이상을 포함할 수 있는 다수의 컴퓨팅 블록(1924A-1924N)을 포함한다. 일 실시예에서, GPGPU(1920)는 매트릭스 연산의 서브 세트(예컨대, 내적 등)를 가속하도록 설계된 하나 이상의 특수 함수 계산 유닛을 포함할 수 있는 매트릭스 가속기(1923)를 추가로 포함한다. GPGPU(1920)는 또한 레지스터 세트(1925), 전력 및 성능 모듈(1926), 및 캐시(1927)를 포함하지만 이에 제한되지 않는 컴퓨팅 블록(1924A-1924N) 및 매트릭스 가속기(1923)에 의해 공유될 수 있는 리소스 세트를 포함할 수 있다. 일 실시예에서, 레지스터(1925)는 직접 및 간접적으로 액세스 가능한 레지스터를 포함하고, 여기서 간접적으로 액세스 가능한 레지스터는 매트릭스 가속기(1923)에 의해 사용되도록 최적화된다. 전력 및 성능 모듈(1926)은, 컴퓨팅 블록(1924A-1924N) 내의 게이트 유휴 컴포넌트에 전력을 공급하도록, 컴퓨팅 블록(1924A-1924N)에 대한 전력 전달 및 클록 주파수를 조정하도록 구성될 수 있다. 다양한 실시예에서 캐시(1927)는 명령어 캐시 및/또는 하위 레벨 데이터 캐시를 포함할 수 있다.
GPGPU(1920)는, 매트릭스 가속기(1923) 및/또는 컴퓨팅 블록(1924A-1924N) 내의 컴퓨팅 요소에 의해 통합 메모리(1910)로부터 액세스된 데이터를 캐시하는 데 사용될 수 있는, L3 데이터 캐시(1930)를 추가로 포함할 수 있다. 일 실시예에서, L3 데이터 캐시(1930)는 컴퓨팅 블록(1924A-1924N) 내의 컴퓨팅 요소와 매트릭스 가속기(1923)에 의해 공유될 수 있는 공유 로컬 메모리(1932)를 포함한다.
일 실시예에서 GPGPU(1920)는 페치 및 디코딩 유닛(1921) 및 스케줄러 제어기(1922)와 같은 명령어 처리 로직을 포함한다. 페치 및 디코딩 유닛(1921)은 컴퓨팅 블록(1924A-1924N) 또는 매트릭스 가속기(1923) 중 하나 이상에 의해 실행하기 위한 명령어를 페치 및 디코딩하기 위한 페치 유닛 및 디코딩 유닛을 포함한다. 명령어는 스케줄러 제어기(1922)를 통해 컴퓨팅 블록(1924A-1924N) 내의 적절한 기능 유닛 또는 매트릭스 가속기에 스케줄링될 수 있다. 일 실시예에서 스케줄러 제어기(1922)는 고급 스케줄링 작업을 수행하도록 구성가능한 ASIC이다. 일 실시예에서, 스케줄러 제어기(1922)는 펌웨어 모듈로부터 로드된 스케줄러 명령어를 실행할 수 있는 마이크로컨트롤러 또는 명령어 당 낮은 에너지 처리 코어(low energy-per-instruction processing core)이다.
일 실시예에서, 컴퓨팅 블록(1924A-1924N)에 의해 수행되는 일부 기능은 매트릭스 가속기(1923)에 직접 스케줄링되거나 오프로드될 수 있다. 다양한 실시예에서 매트릭스 가속기(1923)는 3D 그래픽 또는 컴퓨팅 셰이더 프로그램에서 사용되는 곱셈 및 덧셈 그리고 내적과 같은 매트릭스 컴퓨팅 연산을 효율적으로 수행하도록 구성된 처리 요소 로직을 포함한다. 일 실시예에서 매트릭스 가속기(1923)는 머신 학습 프레임워크에 의해 사용되는 동작을 가속화하도록 구성될 수 있다. 일 실시예에서 매트릭스 가속기(1923)는 특정 세트의 병렬 매트릭스 곱셈 및/또는 덧셈을 수행하도록 명시적으로 구성된 애플리케이션 특정 집적 회로이다. 일 실시예에서 매트릭스 가속기(1923)는 워크로드들 사이에 업데이트될 수 있는 고정 기능 로직을 제공하는 FPGA(field programmable gate array)이다. 매트릭스 가속기(1923)에 의해 수행될 수 있는 일련의 매트릭스 연산은 컴퓨팅 블록(1924A-1924N)에 의해 수행될 수 있는 연산에 대해 제한될 수 있다. 그러나, 매트릭스 가속기(1923)는 컴퓨팅 블록(1924A-1924N)에 비해 상당히 더 높은 처리량으로 이러한 연산을 수행할 수 있다.
예시적인 GEMM 연산
그래픽, 벡터 및 병렬 프로세서는 일반적으로 GEMM(General Matrix Multiply) 연산을 가속화하는 하나 이상의 명령어를 포함한다. MxK 매트릭스와 KxN 매트릭스에 대해 매트릭스 곱셈을 수행하여 MxN 매트릭스를 생성할 수 있다. 큰 매트릭스를 큰 매트릭스의 직사각형 부분인 블록으로 나누어 큰 매트릭스 곱셈을 수행할 수 있다. 그 후, 블록들은 프로세싱 리소스로 페치되어 프로세싱될 수 있다. 일 실시예에서, 본 명세서에 설명된 실행 유닛, 그래픽 코어 또는 컴퓨팅 유닛과 같은 멀티-스레드 프로세싱 리소스는, 각 블록 세트를 프로세싱하도록 하드웨어 스레드를 담당하여 출력 매트릭스에 저장될 출력을 생성할 수 있다. 각 스레드는 K 차원을 따라 매트릭스를 탐색하고 곱셈 출력을 누적할 수 있다. 프로세싱 리소스 내의 레지스터의 가용성에 기초하여, 다수 블록이 단일 스레드 내에서 프로세싱될 수 있다.
도 20은 소스 및 목적지 매트릭스에서의 일반 매트릭스 곱셈 연산을 도시한다. MxK 매트릭스(A 매트릭스(2002))에 KxN 매트릭스(B 매트릭스(2004))를 곱하여 MxN 출력 매트릭스(C 매트릭스(2006))를 생성하는 단-정밀도 GEMM 연산(예컨대, SGEMM)이 도시되어 있다. 도시된 매트릭스는 보다 큰 매트릭스의 블록들일 수 있다. 블록의 크기는 머신의 SIMD 폭에 의존할 수 있다(예컨대, simdWidth x simdWidth). 예를 들어, SIMD8 프로세싱 요소에서, A, B, C는 매트릭스 요소들의 8x8 블록일 수 있다. 일 실시예에서, 매트릭스(2002)는 프로세싱 요소의 공유 로컬 메모리에 저장되고, B 매트릭스(2004)는 L3 캐시에 저장되고, C 매트릭스(2006)는 프로세싱 리소스의 일반 레지스터 파일 내의 레지스터에 저장되지만, 다른 실시예는 다르게 구성될 수 있다. 매트릭스의 요소에 대한 예시적인 레지스터(예컨대, rxx) 및 채널(예컨대, 0-7)이 도시되어 있다. 연산 중에, 매트릭스 요소는 표시된 소스로부터 페치될 수 있고 매트릭스의 요소에 대한 예시된 레지스터 및 채널에 저장될 수 있다. 일 실시예에서, madv 명령어는 <src1> 데이터(B 매트릭스)에 존재하는 임의의 희소성을 이용하지 않고 <src2> 데이터(A 매트릭스)에 대한 희소성을 처리한다. 이러한 실시예에서, <src2>(예를 들어, A 매트릭스)가 희소 입력에 사용된다.
일 실시예에서, SGEMM 연산은 표 1에 도시된 포맷을 갖는 명령어를 통해 구현될 수 있다.
표 1 - 그래픽 프로세서 명령어 포맷
<pred> <opcode> <cmod> <dst> <src0> <src1> <src2>
표 1의 명령어 포맷은 도 7에 도시된 명령어 포맷(710, 730)의 버전이다. 표 1의 명령어 포맷에서 <opcode>는 수행할 연산을 정의하고 <dst>는 연산에 의해 생성된 결과를 저장하는 피연산자이며 <src0>, <src1>, <src2>는 세 가지 소스 피연산자이다. 두 개의 수정자(<pred>, <cmod>)가 선택적으로 사용될 수 있는데, <pred>는 <dst>를 기록하는 동안 플래그 레지스터(f0.0)를 비트마스크(bitmask)로 사용하여 특정 채널을 마스크오프하는 프레디케이트(predicate)이고, <cmod>는 일반적으로 cmp(compare) 명령어에 의해 사용되어 소스 피연산자로부터 생성된 비교 결과에 기초하여 플래그 레지스터에 비트마스크를 생성한다. 예를 들어, 명령어 cmp(ne)f0.0은 <src0> 및 <src1>의 각 채널이 같지 않으면 플래그 레지스터(f0.0)에 비트를 설정할 것이다.SGEMM 연산의 일부에 대한 명령어 시퀀스가 표 2에 있다.
표 2 - k=0에 대한 SGEMM 연산 시퀀스
Line Opcode DST SRC0 SRC1 SRC2
00 mad r34.0<1>:f r34.0<1,0>:f r10.0<1,0>:f r76.0<0>:f
01 mad r35.0<1>:f r35.0<1,0>:f r10.0<1,0>:f r76.1<0>:f
02 mad r36.0<1>:f r36.0<1,0>:f r10.0<1,0>:f r76.2<0>:f
03 mad r37.0<1>:f r37.0<1,0>:f r10.0<1,0>:f r76.3<0>:f
04 mad r38.0<1>:f r38.0<1,0>:f r10.0<1,0>:f r76.4<0>:f
... ...
07 mad r41.0<1>:f r41.0<1,0>:f r10.0<1,0>:f r76.7<0>:f
표 2는 도 20의 매트릭스에 대해 연산을 수행하기 위한 예시적인 명령어 시퀀스를 보여주며, 여기서 k=0이다. k=1에서 7까지 유사한 시퀀스가 반복된다. 보다 상위의 루프는 A 매트릭스와 B 매트릭스로부터 다음 요소들의 세트를 로드하고, 일반 레지스터 파일에 저장된 동일한 C 매트릭스에 추가로 누적한다. 설명된 mad opcode는 <dst> = <src0> + <src1> * <src2> 연산을 구현한다. 각각의 피연산자는 레지스터 주소, 리저닝(regioning) 옵션 및 데이터타입으로 구성된다. 첫 번째 명령어(라인 00)는 SIMD 와이드 레지스터(r10)와 레지스터(r76.0)의 브로드캐스트된 SIMD 채널의 곱셈을 수행한다. 그 결과는 SIMD 와이드 레지스터(r34)에 추가된다. <dst>의 경우, 예컨대, r34.0 <1>:f의 경우, r34는 레지스터 주소(regnum)이고, .0은 데이터타입 단위의 레지스터 내의 오프셋(subregnum)이며, <1>은 기록에 대한 패킹된 스트라이드를 나타내는 리저닝 옵션이고, :f는 부동 데이터타입을 나타낸다. <src0> 또는 <src1>의 경우, 예컨대, r10.0 <1,0>:f의 경우, r10은 레지스터 주소(regnum)이고, .0은 데이터타입 단위의 레지스터 내의 오프셋(subregnum)이며, <1,0>은 기록에 대한 패킹된 스트라이드를 나타내는 리저닝(regioning) 옵션이고, :f는 데이터타입을 나타낸다. <src2>의 경우, 예컨대, r76.0<0>:f의 경우, r76은 레지스터 주소(regnum)이고, .0은 데이터타입 단위위 레지스터 내의 오프셋(subregnum)이며, <0>은 판독에 대한 단일 SIMD 채널의 브로드캐스트를 나타내는 리저닝 옵션이고, :f는 부동 데이터 유형을 나타낸다. 라인 01-07의 명령어는 유사한 작업을 수행하며, r76의 서로 다른 SIMD 채널을 통해 진행하여 결과를 연속 레지스터(예컨대, r77, r78 등)에 누적한다.MultiplyAddVector 명령어
표 2의 명령어 시퀀스의 분석은 SGEMM 연산에 사용되는 8개의 mad 명령어에서, <src1> 및 <src2> 피연산자 레지스터 주소가 동일하고 <src0> 및 <dst> 피연산자가 순차적으로 증가함을 보여준다. 또한 <src0> 및 <dst>는 어떠한 특정 mad 명령어에서도 동일하므로 동일한 레지스터에서 누적이 발생한다. 이 분석의 결과는 그래픽 프로세싱 리소스가 <pred> madv.rcount <dst> <src0> <src1> <src2> 포맷의 하드웨어로 구현된 MultiplyAddVector(madv) 명령어를 지원할 수 있도록 하는데 이용될 수 있다.
도 21a 내지 21c는 희소 입력에 대한 제로 스킵에 의해 곱셈 덧셈 벡터 연산을 가능하게 하는 명령어 및 관련 하드웨어 로직을 도시한다. 도 21a는 MultiplyAddVector 명령어(2100)에 대한 포맷을 도시한다. 도 21b는 MultiplyAddVector 명령어(2100)의 디코딩을 가능하게 하는 하드웨어 로직(2110)을 도시한다. 도 21c는 본 명세서에 기술된 곱셈/덧셈/벡터 명령어(2100)의 디코딩 및 실행을 가능하게 하도록 구성된 실행 로직(2120)을 예시한다.
도 21a에 도시된 바와 같이, 일 실시예는 하나 이상의 입력 벡터에 대한 자동 제로 스킵에 의해 곱셈 덧셈 명령어 시퀀스를 수행하는 MultiplyAddVector 명령어(madv 명령어(2100))에 대한 하드웨어 지원을 제공한다. madv 명령어(2100)의 형식은 프레디케이트(pred(2102)), 반복 카운트가 첨부된 명령어 opcode(2104)(madv.rcount), 목적지 피연산자(dst(2106)) 및 다수의 소스 피연산자(src0(2107), src1(2108), src2(2109))를 포함한다. 일 실시예에서, 프레디케이트 값은 플래그 레지스터에 기초하여 결정되며, 여기서 프레디케이트 마스크의 비트는 채널의 어레이가 아니라 개별 mad 명령어의 어레이에 대해 프레디케이션(predication)을 적용한다. 따라서, 프레디케이트 마스크는 madv 명령어(2100)에 의해 표현된 명령어 세트에서 특정 명령어의 생성을 허용 또는 불허하는 데 사용될 수 있다.
일 실시예에서 madv 명령어(2100)는 디코딩 동안 다수의 추가 명령어로 확장되는 하드웨어 매크로 명령어로서 구현된다. 이러한 실시예에서, 반복 카운트(2104) 값은 실행 리소스 내에서 한 번 확장되는 명령어의 수를 나타낸다. 예를 들어, 아래 표 3의 madv.8 명령어는 실행 리소스 내에서 표 2의 SGEMM 명령어 시퀀스로 확장될 수 있다.
표 3 - 예시적인 MultiplyAddVector 명령어
madv.8 r34.0<1>:f r34.0<1,0>:f r10.0<1,0>:f r76.0<1>:f
위 표 3의 명령어에 대해, 반복 카운트 (2104)는 8이다. 제공된 피연산자는 확장된 명령어 세트의 첫 번째 명령어에 대한 초기 피연산자를 나타낸다. 후속 명령어의 피연산자는 확장 중에 생성된다. 피연산자 확장은 <dst>(2106) 및 <src0>(2107)에 대한 연속 레지스터 블록과 <src2>(2109)에 대한 연속 서브레지스터를 사용하며, 연속 레지스터/서브레지스터의 수는 반복 카운트(2104)의 값에 기초하여 결정된다. 플래그 레지스터의 값에 따라, 예를 들어 희소 입력에 대해 제로 스킵이 수행되는 경우, 명령어 세트의 특정 명령어에 대한 확장이 바이패스될 수 있다.도 21b에 도시된 바와 같이, 명령어 확장은 일 실시예에서 madv 명령어의 디코딩 동안 수행되지만, 다른 실시예에서는 명령어 실행 파이프 라인의 실행 단계에 의한 명령어의 직접 실행과 같은 다른 구현 기법이 사용될 수도 있다. 일 실시예에서, 프로세싱 리소스 내의 명령어 디코딩 로직(2110)은 종래의 명령어 디코딩 로직에 더하여 카운터/상태 머신(2111), 우선순위 인코더(2112), 명령어 생성기(2113) 및 피연산자 생성기(2114)를 포함할 수 있다. 카운터/상태 머신(2111)은 madv 명령어의 확장 동안 사용할 카운터 값 및 디코딩 상태를 저장한다. 우선순위 인코더(2112)는 생성될 첫 번째 mad 명령어를 나타내는 첫 번째 활성화된 비트를 결정하기 위해 프레디케이트를 스캔하는 데 사용된다.
제안된 madv 명령어는 ALU 파이프의 디코딩 스테이지에 카운터/상태 머신을 추가하고 일련의 mad 명령어를 생성함으로써 실행 유닛에서 구현될 수 있다. 우선순위 인코더(2112)는 첫 번째 세트 비트를 찾기 위해 프레디케이트 마스크를 스캔한다. 해당 명령어에 대한 대응 비트가 프레디케이트 비트 필드에 설정되어 있으면 명령어 생성기(2113)에 의해 Mad 명령어가 생성된다. 그 다음에, 피연산자 생성기(2114)는, 초기 피연산자 레지스터 및 서브 레지스터 값 및 프레디케이트 마스크 내에 설정된 비트 위치에 기초하여, 대응하는 피연산자 값을 생성한다. madv 명령어의 실행은 아래 표 4의 의사 코드에서 지시된 것과 같이 수행될 수 있다.
Line Pseudocode
00 Evaluate(WrEn); // evaluates predicate
01 for (r = 0; r < rcount; r++) {
02 k = r * (exec_size * Src0.DataTypePrecisionInByte)/RegisterWidthInBytes;
03 if (WrEn.chan[src2.(subregnum)+r]) {
04 for (n = 0; n < exec_size; n++) {
05 dst.(regnum+k).chan[n] = src0.(regnum+k).chan[n] +
06 src1.regnum).chan[n] * src2.(regnum).(subregnum+r);
07 }
08 }
09 }
피연산자 생성기(2114)는 표 4의 의사 코드에 도시된 것과 유사한 방식으로 피연산자에 대한 regnum 및 subregnum 값을 생성할 수 있다.도 21c에 도시된 바와 같이, 멀티스레드 프로세싱 리소스 내의 실행 로직(2120)은 본 명세서에 설명된 바와 같이 madv 명령어를 확장하고 실행하도록 구성될 수 있다. 실행 로직(2120)은 본 명세서에 설명된 바와 같이 실행 유닛, 컴퓨팅 유닛 또는 스트리밍 멀티프로세서와 같은 멀티스레드 프로세싱 리소스 내에서 발견될 수 있다. 일 실시예에서, 명령어 큐 세트(2122A-2122N)는 실행 로직(2120)의 N개의 스레드에 의해 실행을 보류중인 N 세트의 명령어를 저장할 수 있다. 각 스레드는, 현재 명령어에 대한 의존성이 제거될 때까지 스레드에 대한 실행을 지연시키는 관련 프리디코딩 스테이지(2124A-2124N)를 갖는다. 스레드는, 현재의 명령어에 대한 의존성이 남아있지 않을 때, 준비된 것으로 표시된다. 의존성이 제거되면, 스레드는 ALU들 중 하나의 실행 파이프 라인으로 디스패치할 스레드를 선택하는 중재 프로세스에 참여할 수 있다.
각 ALU에 대한 제각기의 중재자(2126A-2126M)는 ALU 내의 실행 자원의 가용성에 기초하여 하나 이상의 준비 스레드를 선택할 수 있다. 그 후 선택된 스레드에 대한 명령어가 선택된 ALU의 실행 파이프 라인으로 디스패치된다. 도시된 ALU에 대한 실행 파이프 라인 스테이지는 디코딩 스테이지(2128A-2128M), 레지스터 판독 스테이지(2130A-2130M), 실행 스테이지(2132A-2132M) 및 라이트-백(WB) 스테이지(2134A-2134M)를 포함한다. 일 실시예에서, 단일 madv 명령어는, 명령어를 수신하는 ALU의 디코딩 스테이지(2128A-2128M) 내에서 다수의 mad 명령어로 확장될 수 있다.
일 실시예에서 실행 로직(2120) 내의 ALU의 수는 실행 로직(2120)에 의해 실행될 수 있는 스레드의 수보다 적다. 일 실시예에서, 단일 ALU에 다수의 명령어가 발행될 수 있다. 일 실시예에서, 이용 가능한 ALU의 서브세트만이 madv 명령어 확장을 위해 구성될 수 있으며, 이러한 명령어는 이들 특정 ALU에 의해 실행된다. madv 명령어를 수행하기 위해 실행 로직(2120)이 소비하는 총 클럭 수는 mad 명령어 당 클럭 수, 반복 카운트 및 스킵된 명령어 수에 달려있다. 일 실시예에서, 실행 로직의 ALU는 클록 당 하나의 mad 명령어를 실행할 수 있다. 그러한 실시예에서, madv.8 명령어는 실행을 위해, 희소 입력 값을 프로세싱할 때 스킵된 명령어 당 1 클럭을 뺀, 8 클럭이 걸릴 것이다.
도 22는 일 실시예에 따른, 희소 입력에 대한 명령어 확장 및 스킵을 도시한다. 일 실시예에서, 비교 명령어(2201)는 madv 명령어(2202)에 사용될 프레디케이션 마스크를 생성하기 위해 <src2> 입력으로 사용될 레지스터 데이터를 0과 비교하는 데 사용된다. 일 실시예에서, madv 명령어의 확장은 <src0> 및 <dst> 피연산자에 대해 연속 레지스터를 이용한다는 점을 주의해야 한다. madv 명령어를 이용하는 셰이더 프로그램을 컴파일하는 동안, 충분한 연속 레지스터를 사용할 수 없는 경우, 셰이더 컴파일러는 분할 반복 카운트로 다수의 명령어(2203)를 출력할 수 있다. 예를 들어, <src0> 및 <dst> 피연산자에 대해 상이한 레지스터 시작점을 사용하여 반복 카운트가 8인 하나의 명령어 대신에 반복 카운트가 4인 2개의 명령어를 출력할 수 있다. 다수의 명령어를 사용하는 경우, 명령어를 원자 연산으로 실행하여 <src1> 및 <src2> 레지스터를 재사용할 수 있다. 예시적인 <src2>(2109), 명령어(2202) 또는 명령어(2203)가 주어지면, mad 명령어 세트(2204)가 생성될 수 있다. 명령어 생성은 <src2>(2109) 내의 희소 요소에 대해 바이패스될 수 있으며, 따라서 희소 <src2> 요소를 가진 mad 명령어에 대한 실행이 바이패스될 뿐만 아니라, 해당 명령어의 생성도 바이패스되어, 명령어 페치 및 희소 매트릭스 워크로드에 의해 소비되는 디코딩 대역폭이 감소한다.
일부 경우에, madv 명령어의 SIMD 크기는 레지스터 크기보다 클 수 있으므로, 결과가 다수의 레지스터에 기록된다. 이러한 경우, madv 매크로 명령어를 확장하는 동안 개별 mad 명령어의 <dst> 및 <src0>이 다수의 레지스터만큼 증분된다. 예를 들어, 명령어 SIMD = 32이고, 데이터타입 = 4byte이며, 레지스터 폭 = 64byte인 경우, <dst> 및 <src0>은 (SIMD * 데이터 유형/레지스터 너비) = 2 레지스터만큼 증분된다. 동작들은 본 명세서에서 일반적으로 SIMD 동작으로 설명되지만, 본 명세서에서 설명되는 기술은 SIMT 기반 아키텍처와 같은 다른 병렬 프로세싱 아키텍처에도 적용될 수 있다.
전용 누산기 레지스터(accX 레지스터)를 포함하는 그래픽 프로세서 아키텍처의 경우, 본 명세서에 설명된 madv 명령어는 <src0> 및 <dst> 피연산자에 대해 누산기 레지스터를 명시적으로 또는 암시적으로 이용할 수 있다. 누산기 레지스터는 다수의 부동 소수점 연산을 누적하는 데 사용되는 더 크고/또는 더 높은 정밀도의 레지스터일 수 있다. 누산기 레지스터를 사용하면, 입력 또는 출력 데이터 타입의 정밀도에 따라 더 높은 정밀도의 결과를 생성할 수 있다. 아키텍처에 대한 누산기의 수가 제한될 경우, 하나 이상의 madv 명령어의 결과가 누산기에 저장될 수 있고, 다른 것들은 범용 레지스터에 저장될 수 있다.
도 23은 일 실시예에 따른 곱셈/덧셈/벡터 명령어의 실행을 용이하게 하는 방법을 도시한다. 방법(2300)은 본 명세서에 설명된 그래픽 프로세서 또는 병렬 프로세서의 컴퓨팅 또는 그래픽 프로세서 파이프 라인의 로직에 의해 수행될 수 있다. 예를 들어, 방법(2300)은 도 21c의 실행 로직(2120)에 의해 도 21b의 하드웨어 로직(2110)을 사용하여 수행될 수 있다. 방법(2300)은 도 21a의 madv 명령어(2100) 및/또는 본 명세서에 설명된 것과 같은 하드웨어 매크로 명령어의 실행을 용이하게 하는데 사용될 수 있다.
일 실시예에서, 방법(2300)은 그래픽 또는 병렬 프로세서의 하드웨어 로직을 통해 하드웨어 매크로 명령어를 페치하는 동작을 수행하는 것(블록 2301)을 포함한다. 하드웨어 매크로 명령어는 프레디케이트 마스크, 반복 카운트 및 초기 피연산자 세트(<dst>, <src0>, <src1>, <src2>)를 포함한다. 하드웨어 매크로 명령어는 매트릭스 세트와 관련된 입력 데이터에 대해 하나 이상의 곱셈/덧셈 연산을 수행하도록 구성된다. 방법(2300)은 하드웨어 매크로 명령어를 디코딩하기 위한 동작을 수행하는 것을 추가로 포함한다(블록 2302). 일 실시예에서, 페치된 하드웨어 매크로 명령어는, 명령어 실행 파이프 라인의 프리디코딩 스테이지(예컨대, 프리디코딩 스테이지(2124A-2124N))의 로직이 관련 로드 또는 비교 명령어와 같은 의존성이 만족된다고 판정할 때까지 명령어 큐에 저장될 수 있다. 의존성이 만족되면, 본 명세서에 설명된 프로세싱 리소스의 디코딩 로직에 의해, 디코딩을 위해 명령어가 자동으로 제출될 수 있다.
디코딩 동작은 실행을 위해 생성할 하드웨어 명령어 세트를 결정하기 위해 적어도 부분적으로 포함되거나 수행될 수 있다. 예를 들어, 프레디케이트 마스크에서 활성화된 각 비트에 대해 mad 명령어가 생성될 수 있다. 프레디케이트 마스크는 도 22에서와 같이 <src2> 피연산자의 서브레지스터에 저장된 입력에 기초하여 생성될 수 있다. 예를 들어, <src2> 입력으로 사용될 데이터를 제로와 비교하여 플래그 레지스터 내의 비트를 설정하기 위해 비교 명령어가 사용될 수 있다. 그 다음에 플래그 레지스터가 프레디케이트 마스크로 사용될 수 있다. 그 후, 프레디케이트 마스크 및 반복 카운트가 실행할 하드웨어 명령어 세트를 생성하는 데 사용될 수 있다(블록 2303). 명령어는 도 21b에서와 같이 명령어 생성기(2113)에 의해 생성될 수 있다. 생성할 최대 명령어 수는 반복 카운트에 기초하여 결정될 수 있다. 특정 하드웨어 명령어의 생성은, 프레디케이트 마스크 내의 관련 비트에 의해 불허될 경우, 바이패스된다.
명령어 세트 내의 생성된 명령어에 의해 사용될 특정 피연산자는 프레디케이트 마스크 및 초기 피연산자 세트에 기초하여 결정될 수 있다(블록 2304). 명령어에 대한 피연산자는 도 21b에서와 같이 피연산자 생성기(2114)에 의해 생성될 수 있다. 연속하는 인접 레지스터들은 <dst> 및 <src0> 피연산자에 사용되며, 연속하는 서브레지스터들은 <src2> 피연산자에 사용된다. 바이패스된 명령어에 대해서는 피연산자가 생성되지 않는다. 그래픽 또는 병렬 프로세서의 명령어 실행 파이프 라인은 하드웨어 명령어 세트를 원자적으로 실행할 수 있다(블록 2305). 원자적 실행은, 명령어 세트의 실행 동안 수행되는 하나 이상의 동작이 원자적으로 수행되어, 명령어 세트의 명령어가 단일 명령어로 간주됨을 나타낸다. 하드웨어 매크로 명령어의 실행에 의해 사용되는 특정 클럭 사이클 수는, 단일의 곱셈-덧셈 연산을 실행하기 위한 사이클 수, 명령어와 연관된 반복 카운트, 및 희소 입력 데이터로 인해 바이패스되는 명령어 또는 동작 수에 따라 달라질 수 있다. 그래픽 또는 병렬 프로세서의 명령어 실행 파이프 라인은 하드웨어 명령어 세트의 각 명령어의 완료 시 하드웨어 매크로 명령어를 폐기할 수 있다(블록 2306).
madv 명령어에 대한 입력의 희소성에 따라, 실행 사이클의 수가 달라질 수 있음에 주의해야 한다. 따라서, 명령어에 대한 대기 시간은, 다음 종속 명령어의 스케줄링을 가능하게 하기 위해 컴파일 시간에 결정될 수 없을 수 있다. 따라서, madv 명령어에 의해 수행되는 다수의 명령어 또는 동작은 컴파일러 및 스케줄링 하드웨어에 의해 단일 원자 명령어로 간주된다. 따라서, 연속적인 종속 madv 명령어 세트에 있어서, 명령어들이 순서대로 실행되어 후속 종속 명령어가 실행 파이프 라인에 들어가기 전에 첫 번째 madv 명령어가 완료된다.
추가의 예시적인 컴퓨팅 장치
도 24는 일 실시예에 따른, 그래픽 프로세서(2404)를 포함하는 컴퓨팅 장치(2400)의 블록도이다. 컴퓨팅 장치(2400)는 도 1에서와 같은 데이터 프로세싱 시스템(100)과 같은 컴퓨팅 장치일 수 있고, 도 14에 도시된 구성 요소를 포함할 수 있다. 컴퓨팅 장치(2400)는 또한, 셋톱 박스(예컨대, 인터넷 기반 케이블 텔레비전 셋톱 박스 등), GPS(Global Positioning System) 기반 장치 등일 수도 있고 또는 이들 내부에 포함될 수도 있다. 컴퓨팅 장치(2400)는 또한 셀룰러폰, 스마트 폰, PDA(Personal Digital Assistant), 태블릿 컴퓨터, 랩톱 컴퓨터, e-리더, 스마트 TV, 텔레비전 플랫폼, 웨어러블 장치(예컨대, 안경, 시계, 팔찌, 스마트 카드, 보석류, 의류 등), 미디어 플레이어 등과 같은 모바일 컴퓨팅 장치일 수도 있고 이들 내부에 포함될 수도 있다. 예를 들어, 일 실시예에서, 컴퓨팅 장치(2400)는 컴퓨팅 장치(2400)의 다양한 하드웨어 및/또는 소프트웨어 컴포넌트를 단일 칩 상에 통합한 시스템 온 칩("SoC"또는 "SOC")과 같은 집적 회로("IC")를 채용한 모바일 컴퓨팅 장치를 포함한다.
컴퓨팅 장치(2400)는 그래픽 프로세서(2404)를 포함한다. 그래픽 프로세서(2404)는 본 명세서에 설명된 임의의 그래픽 프로세서를 나타낸다. 그래픽 프로세서는 하나 이상의 그래픽 엔진(들), 그래픽 프로세서 코어 및 본 명세서에 설명된 다른 그래픽 실행 리소스를 포함한다. 이러한 그래픽 실행 리소스는, 제한적인 것은 아니지만 실행 유닛, 셰이더 엔진, 프래그먼트 프로세서, 버텍스 프로세서, 스트리밍 멀티프로세서, 그래픽 프로세서 클러스터 또는 그래픽 리소스 또는 이미지 리소스의 프로세싱에 적합한 컴퓨팅 리소스 모음을 포함하거나, 또는 이기종 프로세서에서 범용 컴퓨팅 작업을 수행할 수 있는 형태로 제공될 수 있다.
일 실시예에서, 그래픽 프로세서(2404)는, 단일 캐시일 수도 있고 또는 캐시 메모리의 다수의 세그먼트로 분할될 수 있는 캐시(2414)를 포함하며, 캐시는 임의의 수의 L1, L2, L3 또는 L4 캐시, 렌더 캐시, 깊이 캐시, 샘플러 캐시 및/또는 셰이더 유닛 캐시를 포함하지만, 이에 제한되지는 않는다. 일부 실시예에서, 그래픽 프로세서(2404)는 공유 로컬 메모리(SLM(2434))를 포함하는 GPGPU 엔진(2444)뿐만 아니라 GPGPU 엔진(2444)에 의해 사용되는 레지스터를 포함하는 레지스터 파일(2424)을 포함한다. 레지스터 파일(2424)은 범용 레지스터, 아키텍처 레지스터, 구성 레지스터 및 다른 유형의 레지스터를 포함할 수 있다. 범용 레지스터 파일(GRF) 및/또는 아키텍처 레지스터 파일(ARF)은 또한 GPGPU 엔진(2444) 내의 하나 이상의 컴퓨팅 유닛 블록(예컨대, 컴퓨팅(2450), 컴퓨팅(2455)) 내의 프로세싱 리소스 내에 상주할 수 있다. 도시된 컴포넌트들은 본 명세서에 설명된 곱셈/덧셈/벡터(madv) 명령어의 디코딩 및 실행을 가능하게 하는 것을 포함하여, 본 명세서에 설명된 다양한 실시예의 기술을 제공하기 위해 사용될 수 있다. 일 실시예에서, madv 명령어의 실행은 madv 명령어를 다수의 곱셈/덧셈(mad) 명령어로 확장하는 하드웨어 기반 디코딩/확장 로직(2442)을 통해 용이하게 되지만, 다른 실시예에서는 다른 구현 기술이 사용될 수 있다.
도시된 바와 같이, 일 실시예에서, 그래픽 프로세서(2404)에 추가하여, 컴퓨팅 장치(2400)는 애플리케이션 프로세서(2406), 메모리(2408), 및 입력/출력(I/O) 소스(2410)를 포함하나 이에 제한되지 않는, 임의의 수 및 유형의 하드웨어 컴포넌트 및/또는 소프트웨어 컴포넌트를 더 포함할 수 있다. 애플리케이션 프로세서(2406)는 그래픽 파이프라인 기능을 공유하기 위해 도 3을 참조하여 예시된, 하드웨어 그래픽 파이프라인과 상호작용할 수 있다. 처리된 데이터는 하드웨어 그래픽 파이프라인의 버퍼에 저장되고 상태 정보는 메모리(2408)에 저장된다. 결과 데이터는 도 3a의 디스플레이 장치(318)와 같은 디스플레이 장치를 통한 출력을 위해 디스플레이 장치로 전송될 수 있다. 디스플레이 장치는 음극선 관(CRT), 박막 트랜지스터(TFT), 액정 디스플레이(LCD), 유기 발광 다이오드(OLED) 어레이 등과 같은 다양한 유형을 가질 수 있으며, 그래픽 사용자 인터페이스를 통해 사용자에게 정보를 디스플레이하도록 구성될 수 있다.
애플리케이션 프로세서(2406)는 도 1의 프로세서(들)(102)와 같은 하나 이상의 프로세서를 포함할 수 있고, 컴퓨팅 장치(2400)를 위한 운영 체제(OS)(2402)를 실행하기 위해 적어도 부분적으로 사용되는 중앙 처리 장치(CPU)일 수 있다. OS(2402)는 컴퓨팅 장치(2400)의 하드웨어 및/또는 물리적 리소스와 하나 이상의 사용자 사이의 인터페이스로서 기능할 수 있다. OS(2402)는 도 10의 사용자 모드 그래픽 드라이버(1026) 및/또는 커널 모드 그래픽 드라이버(1029)와 같은 그래픽 드라이버 로직(2422)을 포함하는, 컴퓨팅 장치(2400)의 다양한 하드웨어 장치에 대한 드라이버 로직을 포함할 수 있다.
일부 실시예에서, 그래픽 프로세서(2404)는 애플리케이션 프로세서(2406)의 일부(예를 들어, 물리적 CPU 패키지의 일부)로 존재할 수 있으며, 이 경우에 메모리(2408)의 적어도 일부는 애플리케이션 프로세서(2406) 및 그래픽 프로세서(2404)에 의해 공유될 수 있으나, 메모리(2408)의 적어도 일부가 그래픽 프로세서(2404)에 독점될 수 있거나 그래픽 프로세서(2404)가 별도의 메모리 저장소를 가질 수 있다. 메모리(2408)는 버퍼(예를 들어, 프레임 버퍼)의 미리 할당된 영역을 포함할 수 있으나, 당업자라면 실시예들이 이에 제한되지 않으며, 하위의 그래픽 파이프라인에 액세스 가능한 임의의 메모리가 사용될 수 있음을 이해해야 한다. 메모리(2408)는 데스크톱 또는 3D 그래픽 장면을 렌더링하기 위해 그래픽 프로세서(2404)를 이용하는 애플리케이션을 포함하는 다양한 형태의 랜덤 액세스 메모리(RAM)(예를 들어, SDRAM, SRAM 등)를 포함할 수 있다. 그래픽 파이프라인 처리를 위해, 도 1의 메모리 제어기와 같은 메모리 제어기 허브가 메모리(2408)의 데이터에 액세스하고 그래픽 프로세서(2404)로 데이터를 전달할 수 있다. 메모리(2408)는 컴퓨팅 장치(2400) 내의 다른 컴포넌트에 이용 가능하게 될 수 있다. 예를 들어, 컴퓨팅 장치(2400)의 다양한 I/O 소스(2410)로부터 수신된 임의의 데이터(예를 들어, 입력 그래픽 데이터)는 이들이 소프트웨어 프로그램 또는 애플리케이션의 구현시 하나 이상의 프로세서(들)(예를 들어, 애플리케이션 프로세서(2406))에 의해 동작되기 전에 메모리(2408)에 일시적으로 큐잉될 수 있다. 유사하게, 소프트웨어 프로그램이 컴퓨팅 시스템 인터페이스 중 하나를 통해 컴퓨팅 장치(2400)로부터 외부 엔티티로 송신되거나 내부 저장 요소에 저장되어야 한다고 결정하는 데이터는 흔히 전송되거나 저장되기 전에 메모리(2408)에 일시적으로 큐잉된다.
I/O 소스는 터치스크린, 터치 패널, 터치 패드, 가상 또는 일반 키보드, 가상 또는 일반 마우스, 포트, 커넥터, 네트워크 장치 등과 같은 장치를 포함할 수 있고, 도 1의 플랫폼 제어기 허브(130)를 통해 부착될 수 있다. 또한, I/O 소스(2410)는 컴퓨팅 장치(2400)(예를 들어, 네트워킹 어댑터)로/로부터 데이터를 전송하기 위해 또는, 컴퓨팅 장치(2400)(예를 들어, 하드 디스크 드라이브) 내의 대규모 비휘발성 저장소를 위해 구현되는 하나 이상의 I/O 장치를 포함할 수 있다. 영숫자 키 및 다른 키를 포함하는 사용자 입력 장치는 정보 및 커맨드 선택을 그래픽 프로세서(2404)에 전달하는 데 사용될 수 있다. 다른 유형의 사용자 입력 장치는 마우스, 트랙볼, 터치 스크린, 터치 패드 또는 커서 방향 키와 같은 커서 제어기로서, 방향 정보 및 커맨드 선택을 GPU에 전달하고 디스플레이 장치의 커서 이동을 제어한다. 컴퓨팅 장치(2400)의 카메라 및 마이크로폰 어레이는 제스처를 관찰하고, 오디오 및 비디오를 기록하고, 시각(visual) 및 오디오 커맨드를 수신 및 전송하기 위해 사용될 수 있다.
네트워크 인터페이스로서 구성된 I/O 소스(2410)는 LAN, WAN(wide area network), MAN(metropolitan area network), PAN(personal area network), 블루투스, 클라우드 네트워크, 셀룰러 또는 모바일 네트워크(예를 들어, 3세대(3G), 4세대(4G) 등), 인트라넷, 인터넷 등과 같은 네트워크에 대한 액세스를 제공할 수 있다. 네트워크 인터페이스(들)는 예를 들어, 하나 이상의 안테나(e)를 갖는 무선 네트워크를 포함할 수 있다. 네트워크 인터페이스(들)는 또한, 예를 들어, 이더넷 케이블, 동축 케이블, 광섬유 케이블, 직렬 케이블, 또는 병렬 케이블일 수 있는 네트워크 케이블을 통해 원격 장치와 통신하기 위한 유선 네트워크 인터페이스를 포함할 수 있다.
네트워크 인터페이스(들)는, 예를 들어, IEEE 802.11 표준에 따라 LAN에 대한 액세스를 제공할 수 있고/있거나, 무선 네트워크 인터페이스는 예를 들어 블루투스 표준에 따라 PAN에 대한 액세스를 제공할 수 있다. 이전 및 이후 버전의 표준을 포함하여 다른 무선 네트워크 인터페이스 및/또는 프로토콜도 지원될 수 있다. 무선 LAN 표준을 통한 통신에 추가하여 또는 이에 갈음하여, 네트워크 인터페이스(들)는 예를 들어 TDMA(Time Division, Multiple Access) 프로토콜, GSM(Global Systems for Mobile Communications) 프로토콜, CDMA(Code Division, Multiple Access) 프로토콜 및/또는 기타 유형의 무선 통신 프로토콜을 사용하여 무선 통신을 제공할 수 있다.
전술한 예보다 더 적거나 더 많이 장착된 시스템이 특정 구현에 대해 바람직할 수 있음을 이해해야 한다. 따라서, 컴퓨팅 장치(2400)의 구성은, 가격 제약, 성능 요건, 기술 개선 또는 기타 상황과 같은 다양한 요인에 따라 구현마다 달라질 수 있다. 예들(제한이 아님)은 모바일 장치, PDA, 모바일 컴퓨팅 장치, 스마트 폰, 휴대폰, 핸드셋, 단방향 호출기, 양방향 호출기, 메시징 장치, 컴퓨터, 개인용 컴퓨터(PC), 데스크톱 컴퓨터, 랩톱 컴퓨터, 노트북 컴퓨터, 핸드 헬드 컴퓨터, 태블릿 컴퓨터, 서버, 서버 어레이 또는 서버 팜, 웹 서버, 네트워크 서버, 인터넷 서버, 작업 스테이션, 미니 컴퓨터, 메인 프레임 컴퓨터, 슈퍼 컴퓨터, 네트워크 기기, 웹 기기, 분산형 컴퓨팅 시스템, 멀티 프로세서 시스템, 프로세서 기반 시스템, 가전 제품, 프로그램가능 가전 제품, 텔레비전, 디지털 텔레비전, 셋톱 박스, 무선 액세스 포인트, 기지국, 가입자 국, 이동 가입자 센터, 무선 네트워크 제어기, 라우터, 허브, 게이트웨이, 브리지, 스위치, 머신 또는 이들의 조합을 포함한다.
실시예들은 부모 보드(parent-board)를 사용하여 상호 연결된 하나 이상의 마이크로 칩 또는 집적 회로와, 하드와이어 로직과, 메모리 장치에 의해 저장되고 마이크로 프로세서에 의해 실행되는 소프트웨어와, 펌웨어와, ASIC(application specific integrated circuit) 및/또는 FPGA(Field Programmable Gate Array) 중 어느 하나 또는 이들의 임의의 조합으로 구현될 수 있다. "로직"이라는 용어는, 예시로서 소프트웨어 또는 하드웨어 및/또는 소프트웨어와 하드웨어의 조합을 포함할 수 있다.
실시예들은, 예를 들어, 컴퓨터, 컴퓨터 네트워크 또는 기타 전자 장치와 같은 하나 이상의 머신에 의해 실행될 때 하나 이상의 머신이 본 명세서 기술된 실시예에 따른 동작을 수행하게 할 수 있는 머신 실행가능 명령어가 저장된 하나 이상의 머신 판독가능 매체를 포함할 수 있는 컴퓨터 프로그램 제품으로서 제공될 수 있다. 머신 판독가능 매체는 플로피 디스켓, 광 디스크, CD-ROM(Compact Disc-Read Only Memories) 및 광 자기 디스크, ROM, RAM, EPROM(Erasable Programmable Read Only Memories), EEPROM(Electrically Erasable Programmable Read Only Memories), 자기 또는 광학 카드, 플래시 메모리 또는 머신 실행가능 명령어의 저장에 적합한 기타 유형의 비일시적 머신 판독 가능 매체를 포함할 수 있으나 이에 제한되지는 않는다.
또한, 실시예들은 컴퓨터 프로그램 제품으로 다운로드될 수 있으며, 여기서 프로그램은, 통신 링크(예컨대, 모뎀 및/또는 네트워크 접속)를 통해 반송파 또는 기타 전파 매체에 의해 변조/구현된 하나 이상의 데이터 신호를 통해 원격 컴퓨터(예컨대, 서버)로부터 요청 컴퓨터(예컨대, 클라이언트)로 전송될 수 있다.
본 명세서에서 "일 실시예" 또는 "실시예"에 대한 언급은 그 실시예와 함께 설명된 특정한 특징, 구조, 또는 특성이 본 발명의 적어도 하나의 실시예에 포함될 수 있다는 것을 의미한다. 명세서의 다양한 곳에 나타나는 "일 실시예에서"라는 문구는 반드시 모두 동일한 실시예를 지칭하는 것은 아니다. 다음 도면에 묘사되는 프로세스는 하드웨어(예컨대, 회로, 전용 로직 등), 소프트웨어(비 일시적 기계 판독 가능 저장 매체에 대한 명령어) 또는 하드웨어와 소프트웨어의 조합을 포함하는 프로세싱 로직에 의해 수행될 수 있다. 다양한 실시예가 자세하게 참조될 것이며, 그 예는 첨부 도면에 도시되어 있다. 다음의 상세한 설명을 통해, 본 발명의 완전한 이해를 제공하기 위해 많은 특정 세부 사항이 설명된다. 그러나, 본 발명은 특정한 세부 사항없이 실시될 수 있다는 것이 당업자에게 명백할 것이다. 다른 예에서, 잘 알려진 방법, 절차, 구성 요소, 회로 및 네트워크는 실시예의 측면을 불필요하게 모호하게 하지 않도록 상세하게 설명되지 않았다.
또한, 제1, 제2 등의 용어가 본 명세서에서 다양한 요소를 설명하기 위해 사용될 수 있지만, 이들 요소가 이들 용어에 의해 제한되어서는 안 된다는 것을 이해할 수있을 것이다. 이들 용어는 한 요소를 다른 요소와 구별하는 데만 사용된다. 예를 들어, 본 발명의 범위를 벗어나지 않으면서, 제1 접촉이 제2 접촉으로 명명될 수도 있고, 유사하게 제2 접촉이 제1 접촉으로 명명될 수도 있다. 제1 접촉 및 제2 접촉은 모두 접촉이지만, 동일 접촉은 아니다.
본 명세서에서 사용되는 용어는 단지 특정 실시예를 설명하기 위한 것이며 모든 실시예를 제한하고자 하는 것은 아니다. 본 발명의 설명 및 첨부된 청구범위에서 사용된 바와 같이, 단수 형태는 문맥상 명백하게 달리 나타내지 않는 한 복수 형태도 포함하고자 한다. 본 명세서에서 사용된 용어 "및/또는"은 하나 이상의 연관된 열거된 항목 중 어느 하나와 모든 가능한 조합을 지칭하고 포함하는 것으로 또한 이해해야 한다. "포함한다" 및/또는 "포함하는"이라는 용어는, 본 명세서에서 사용될 때, 언급된 특징, 정수, 단계, 동작, 요소 및/또는 컴포넌트의 존재를 특정하지만, 하나 이상의 다른 특징, 정수, 단계, 동작, 요소, 컴포넌트 및/또는 이들의 그룹의 존재 또는 추가를 배제하지는 않는다는 것을 또한 이해해야 한다.
본 명세서에 사용된 "~라면(if)"이라는 표현은 문맥에 따라 "경우" 또는 "시" 또는 "판정에 대한 응답으로" 또는 "검출에 대한 응답으로"를 의미하는 것으로 해석될 수 있다. 유사하게, "판정되면" 또는 "[명시된 조건 또는 이벤트]가 검출된 경우"라는 문구는 문맥에 따라 "판정시" 또는 "판정에 대한 응답으로" 또는 "[언급된 조건 또는 이벤트] 검출시" "또는 "[언급된 조건 또는 이벤트] 검출에 대한 응답으로"를 의미하는 것으로 해석될 수 있다.
본 명세서에 설명된 실시예는 희소 입력에 대한 자동 제로 스킵에 의해 벡터 곱셈 덧셈 명령어를 사용 가능하게 하는 명령어 및 관련 로직을 제공한다. 다음의 항목 및/또는 예는 특정 실시예 또는 그 예에 관한 것이다. 예들의 세부사항은 하나 이상의 실시예에서 어디에서든 사용될 수 있다. 상이한 실시예들 또는 예들의 다양한 특징들은 다양한 상이한 응용들에 적합하도록 일부 특징들은 포함되고 다른 일부는 배제된 채로 다양하게 결합될 수 있다. 예들은 방법, 방법의 동작들을 수행하기 위한 수단, 머신에 의해 수행될 때 머신으로 하여금 방법의 동작들을 수행하게 하는 명령어를 포함하는 적어도 하나의 머신 판독 가능한 매체, 또는 본 명세서에 설명된 실시예들 및 예들에 따른 장치 또는 시스템과 같은 특허 대상을 포함할 수 있다. 다양한 컴포넌트는 기술된 동작 또는 기능을 수행하기 위한 수단일 수 있다.
일 실시예는 프레디케이트 마스크, 반복 카운트 및 초기 피연산자 세트를 갖는 하드웨어 매크로 명령어를 페치하는 것을 포함하는 방법을 실행하는 로직을 포함하는 범용 그래픽 프로세서를 제공하는데, 여기서 초기 피연산자는 목적지 피연산자 및 다수의 소스 피연산자(예컨대, <src0>, <src1>, <src2>)를 포함한다. 반복 카운트는 하드웨어 명령어 세트에 대해 생성할 최대 하드웨어 명령어 수를 나타낸다. 프레디케이트 마스크는 명령어 세트에서 어느 명령어가 생성 또는 바이패스되어야 하는지를 나타낸다. 프레디케이트 마스크는 0과 소스 입력 피연산자(예컨대, <src2>)와 관련된 각 요소 사이의 비교를 통해 생성될 수 있다. 하드웨어 매크로 명령어는 매트릭스 세트와 관련된 입력 데이터에 대해 하나 이상의 곱셈 및 덧셈 연산을 수행하도록 구성된다.
방법은 명령어 디코딩 로직을 통해 하드웨어 매크로 명령어를 디코딩하는 것을 추가로 포함한다. 하드웨어 매크로 명령어를 디코딩하는 것은 실행을 위해 생성할 하드웨어 명령어 세트를 결정하고 명령어 세트에서 명령어를 생성하는 것을 포함한다. 생성할 명령어 개수 및 특정 명령어는 반복 카운트 및 프레디케이트 마스크에 기초하여 결정될 수 있다. 프레디케이트 마스크가 특정 명령어 반복에 대한 생성이 생략되어야 함을 나타내지 않는 한, 반복 카운트에 대해 표시된 각 반복에 대해 하드웨어 명령어가 생성된다. 이 방법은 생성된 명령어에 의해 사용될 피연산자를 생성하는 것을 추가로 포함한다. 생성된 피연산자는 레지스터 또는 서브레지스터의 블록 내에서 연속적인 레지스터 또는 서브레지스터를 특정할 수 있으며, 레지스터 및 서브레지스터의 스트라이드는 명령어의 SIMD 크기와 레지스터의 크기에 기초하여 결정된다. 이 방법은 명령어 세트의 명령어 각각의 실행이 완료될 때 명령어 세트를 원자적으로 실행하고 하드웨어 매크로 명령어를 폐기하는 것을 더 포함한다. 일 실시예에서, 하드웨어 명령어 세트는 하나 이상의 하드웨어 명령어를 포함하고, 하나 이상의 하드웨어 명령어 각각은 프로세싱 리소스가 단일 사이클에서 곱셈 및 덧셈 연산을 수행하게 하는 것이다. 하나 이상의 하드웨어 명령어 각각은 단일 사이클에서 다수의 데이터 요소에 대해 곱셈 및 덧셈 연산을 수행한다.
추가 실시예는 전술한 방법을 수행하기 위한 그래픽 프로세싱 로직을 제공한다. 추가 실시예는 또한 전술한 그래픽 프로세싱 로직을 포함하는 데이터 프로세싱 시스템을 포함한다. 전술한 기술은 본 명세서에 설명된 그래픽 또는 병렬 프로세서 아키텍처 중 임의의 것에 통합되거나 적응될 수 있다. 당업자는 전술한 설명으로부터 실시예들의 광범위한 기법들이 다양한 형태로 구현될 수 있다는 것을 이해할 수 있을 것이다. 그러므로, 실시예들이 특정 예와 관련하여 설명되더라도, 도면, 명세서 및 하기 청구 범위를 고려할 때 다른 변형들이 당업자에게 명백할 것이므로, 실시예들의 실제 범위는 그렇게 제한되지 않아야 한다.

Claims (23)

  1. 그래픽 프로세서로서,
    프레디케이트(predicate) 마스크, 반복 카운트, 및 초기 피연산자 세트를 갖는 하드웨어 매크로 명령어를 페치하는 명령어 페처(fetcher) - 상기 하드웨어 매크로 명령어는 매트릭스 세트와 연관된 입력에 대해 하나 이상의 곱셈 및 덧셈 연산을 수행함 - 와,
    상기 하드웨어 매크로 명령어를 디코딩하고 하나 이상의 곱셈 및 덧셈 연산을 수행하기 위한 하드웨어 명령어 세트를 생성하는 명령어 디코더 - 상기 하드웨어 명령어 세트는 상기 프레디케이트 마스크 및 상기 반복 카운트에 기초하여 생성됨 - 와,
    상기 하드웨어 명령어 세트를 실행하는 프로세싱 리소스 - 상기 하드웨어 매크로 명령어는 상기 하드웨어 명령어 세트의 완료 시에 폐기됨 - 를 포함하는,
    그래픽 프로세서.
  2. 제1항에 있어서,
    상기 초기 피연산자 세트는 목적지 피연산자 및 복수의 소스 피연산자를 포함하는,
    그래픽 프로세서.
  3. 제2항에 있어서,
    상기 하드웨어 명령어 세트는 하나 이상의 하드웨어 명령어를 포함하고, 상기 하나 이상의 하드웨어 명령어 각각은 상기 프로세싱 리소스로 하여금 단일 사이클에서 곱셈 및 덧셈 연산을 수행하게 하는,
    그래픽 프로세서.
  4. 제3항에 있어서,
    상기 하나 이상의 하드웨어 명령어 각각은 상기 단일 사이클에서 복수의 데이터 요소에 대해 상기 곱셈 및 덧셈 연산을 수행하는,
    그래픽 프로세서.
  5. 제4항에 있어서,
    상기 반복 카운트는 상기 하드웨어 명령어 세트에 대해 생성할 하드웨어 명령어의 최대 개수를 나타내는,
    그래픽 프로세서.
  6. 제5항에 있어서,
    상기 하드웨어 명령어 세트를 생성하기 위해, 상기 명령어 디코더는,
    상기 프레디케이트 마스크 내의 활성 비트에 대해 제1 하드웨어 명령어를 생성하고,
    상기 프레디케이트 마스크 내의 비활성 비트에 대해 제2 하드웨어 명령어의 생성을 바이패스하는,
    그래픽 프로세서.
  7. 제6항에 있어서,
    상기 하드웨어 명령어 세트를 생성하기 위해, 상기 명령어 디코더는 또한, 상기 제1 하드웨어 명령어에 대해 제1 피연산자 세트를 생성하고, 상기 제1 피연산자 세트는 상기 제1 하드웨어 명령어에 의해 사용할 목적지 레지스터 및 복수의 소스 레지스터를 나타내며, 상기 제1 피연산자 세트는 상기 초기 피연산자 세트 및 피연산자 오프셋에 기초하여 생성되는,
    그래픽 프로세서.
  8. 제1항 내지 제7항 중 어느 한 항에 있어서,
    상기 프레디케이트 마스크는 소스 피연산자와 연관된 각각의 비제로(non-zero) 요소에 대한 활성 비트를 포함하는,
    그래픽 프로세서.
  9. 방법으로서,
    프레디케이트 마스크, 반복 카운트, 및 초기 피연산자 세트를 갖는 하드웨어 매크로 명령어를 페치하는 단계 - 상기 하드웨어 매크로 명령어는 매트릭스 세트와 연관된 입력에 대해 하나 이상의 곱셈 및 덧셈 연산을 수행함 - 와,
    상기 하드웨어 매크로 명령어를 디코딩된 하드웨어 매크로 명령어로 디코딩하는 단계와,
    상기 디코딩된 하드웨어 매크로 명령어에 기초하여 하나 이상의 곱셈 및 덧셈 연산을 수행하기 위한 하드웨어 명령어 세트를 생성하는 단계 - 상기 하드웨어 명령어 세트는 상기 프레디케이트 마스크 및 상기 반복 카운트에 기초하여 생성됨 - 와,
    그래픽 프로세서의 프로세싱 리소스를 통해 상기 하드웨어 명령어 세트를 실행하는 단계와,
    상기 하드웨어 명령어 세트의 완료 시에 상기 하드웨어 매크로 명령어를 폐기하는 단계를 포함하는,
    방법.
  10. 제9항에 있어서,
    상기 초기 피연산자 세트는 목적지 피연산자 및 복수의 소스 피연산자를 포함하는,
    방법.
  11. 제10항에 있어서,
    상기 하드웨어 명령어 세트는 하나 이상의 하드웨어 명령어를 포함하고, 상기 하나 이상의 하드웨어 명령어 각각은 상기 프로세싱 리소스로 하여금 단일 사이클에서 곱셈 및 덧셈 연산을 수행하게 하는,
    방법.
  12. 제11항에 있어서,
    상기 하나 이상의 하드웨어 명령어 각각은 상기 단일 사이클에서 복수의 데이터 요소에 대해 상기 곱셈 및 덧셈 연산을 수행하는,
    방법.
  13. 제12항에 있어서,
    상기 반복 카운트는 상기 하드웨어 명령어 세트에 대해 생성할 하드웨어 명령어의 최대 개수를 나타내는,
    방법.
  14. 제13항에 있어서,
    상기 하드웨어 명령어 세트를 생성하는 단계는,
    상기 프레디케이트 마스크 내의 활성 비트에 대해 제1 하드웨어 명령어를 생성하는 단계와,
    상기 프레디케이트 마스크 내의 비활성 비트에 대해 제2 하드웨어 명령어의 생성을 바이패스하는 단계를 포함하는,
    방법.
  15. 제14항에 있어서,
    상기 하드웨어 명령어 세트를 생성하는 단계는, 상기 제1 하드웨어 명령어에 대해 제1 피연산자 세트를 생성하는 단계 - 상기 제1 피연산자 세트는 상기 제1 하드웨어 명령어에 의해 사용할 목적지 레지스터 및 복수의 소스 레지스터를 나타내며, 상기 제1 피연산자 세트는 상기 초기 피연산자 세트 및 피연산자 오프셋에 기초하여 생성됨 - 를 더 포함하는,
    방법.
  16. 제9항 내지 제15항 중 어느 한 항에 있어서,
    상기 프레디케이트 마스크는 소스 피연산자와 연관된 각각의 비제로 요소에 대한 활성 비트를 포함하는,
    그래픽 프로세서.
  17. 데이터 프로세싱 시스템으로서,
    버스에 결합된 메모리와,
    상기 버스에 결합된 그래픽 프로세서를 포함하고,
    상기 그래픽 프로세서는,
    프레디케이트 마스크, 반복 카운트, 및 초기 피연산자 세트를 갖는 하드웨어 매크로 명령어를 페치하는 명령어 페처 - 상기 초기 피연산자 세트는 목적지 피연산자 및 복수의 소스 피연산자를 포함하고, 상기 하드웨어 매크로 명령어는 매트릭스 세트와 연관된 입력에 대해 하나 이상의 곱셈 및 덧셈 연산을 수행함 - 와,
    상기 하드웨어 매크로 명령어를 디코딩하고, 하나 이상의 곱셈 및 덧셈 연산을 수행하기 위한 하드웨어 명령어 세트를 생성하는 명령어 디코더 - 상기 하드웨어 명령어 세트는 상기 프레디케이트 마스크 및 상기 반복 카운트에 기초하여 생성됨 - 와,
    상기 하드웨어 명령어 세트를 실행하는 프로세싱 리소스 - 상기 하드웨어 매크로 명령어는 상기 하드웨어 명령어 세트의 완료 시에 폐기됨 - 를 포함하는,
    데이터 프로세싱 시스템.
  18. 제17항에 있어서,
    상기 하드웨어 명령어 세트는 하나 이상의 하드웨어 명령어를 포함하고, 상기 하나 이상의 하드웨어 명령어 각각은 상기 프로세싱 리소스로 하여금 단일 사이클에서 곱셈 및 덧셈 연산을 수행하게 하는,
    데이터 프로세싱 시스템.
  19. 제18항에 있어서,
    상기 하나 이상의 하드웨어 명령어 각각은 상기 단일 사이클에서 복수의 데이터 요소에 대해 상기 곱셈 및 덧셈 연산을 수행하는,
    데이터 프로세싱 시스템.
  20. 제19항에 있어서,
    상기 반복 카운트는 상기 하드웨어 명령어 세트에 대해 생성할 하드웨어 명령어의 최대 개수를 나타내는,
    데이터 프로세싱 시스템.
  21. 제20항에 있어서,
    상기 하드웨어 명령어 세트를 생성하기 위해, 상기 명령어 디코더는,
    상기 프레디케이트 마스크 내의 활성 비트에 대해 제1 하드웨어 명령어를 생성하고,
    상기 프레디케이트 마스크 내의 비활성 비트에 대해 제2 하드웨어 명령어의 생성을 바이패스하는,
    데이터 프로세싱 시스템.
  22. 제21항에 있어서,
    상기 하드웨어 명령어 세트를 생성하기 위해, 상기 명령어 디코더는,
    상기 제1 하드웨어 명령어에 대해 제1 피연산자 세트를 생성하고, 상기 제1 피연산자 세트는 상기 제1 하드웨어 명령어에 의해 사용할 목적지 레지스터 및 복수의 소스 레지스터를 나타내며, 상기 제1 피연산자 세트는 상기 초기 피연산자 세트 및 피연산자 오프셋에 기초하여 생성되는,
    데이터 프로세싱 시스템.
  23. 제17항 내지 제22항 중 어느 한 항에 있어서,
    상기 프레디케이트 마스크는 소스 피연산자와 연관된 각각의 비제로 요소에 대한 활성 비트를 포함하는,
    그래픽 프로세서.
KR1020200123706A 2019-12-23 2020-09-24 제로 스킵에 의해 벡터 곱셈 덧셈을 하기 위한 명령어 및 로직 KR20210081228A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/724,831 US11314515B2 (en) 2019-12-23 2019-12-23 Instructions and logic for vector multiply add with zero skipping
US16/724,831 2019-12-23

Publications (1)

Publication Number Publication Date
KR20210081228A true KR20210081228A (ko) 2021-07-01

Family

ID=76206049

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020200123706A KR20210081228A (ko) 2019-12-23 2020-09-24 제로 스킵에 의해 벡터 곱셈 덧셈을 하기 위한 명령어 및 로직

Country Status (5)

Country Link
US (2) US11314515B2 (ko)
JP (1) JP2021099783A (ko)
KR (1) KR20210081228A (ko)
CN (1) CN113094096A (ko)
DE (1) DE102020130865A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11669329B2 (en) 2019-12-23 2023-06-06 Intel Corporation Instructions and logic for vector multiply add with zero skipping

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11481214B2 (en) * 2020-07-14 2022-10-25 Alibaba Group Holding Limited Sparse matrix calculations untilizing ightly tightly coupled memory and gather/scatter engine
US20220223201A1 (en) * 2021-01-11 2022-07-14 Micron Technology, Inc. Caching Techniques for Deep Learning Accelerator
US20220413924A1 (en) * 2021-06-25 2022-12-29 Intel Corporation Using sparsity metadata to reduce systolic array power consumption
US20220413803A1 (en) * 2021-06-25 2022-12-29 Intel Corporation Systolic array having support for output sparsity

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9329870B2 (en) * 2013-02-13 2016-05-03 International Business Machines Corporation Extensible execution unit interface architecture with multiple decode logic and multiple execution units
US9720667B2 (en) * 2014-03-21 2017-08-01 Intel Corporation Automatic loop vectorization using hardware transactional memory
US9928076B2 (en) * 2014-09-26 2018-03-27 Intel Corporation Method and apparatus for unstructured control flow for SIMD execution engine
US9983884B2 (en) * 2014-09-26 2018-05-29 Intel Corporation Method and apparatus for SIMD structured branching
US9766892B2 (en) * 2014-12-23 2017-09-19 Intel Corporation Method and apparatus for efficient execution of nested branches on a graphics processor unit
US10346944B2 (en) 2017-04-09 2019-07-09 Intel Corporation Machine learning sparse computation mechanism
GB2580316B (en) * 2018-12-27 2021-02-24 Graphcore Ltd Instruction cache in a multi-threaded processor
US11314515B2 (en) 2019-12-23 2022-04-26 Intel Corporation Instructions and logic for vector multiply add with zero skipping

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11669329B2 (en) 2019-12-23 2023-06-06 Intel Corporation Instructions and logic for vector multiply add with zero skipping

Also Published As

Publication number Publication date
US20210191724A1 (en) 2021-06-24
US11669329B2 (en) 2023-06-06
US11314515B2 (en) 2022-04-26
JP2021099783A (ja) 2021-07-01
DE102020130865A1 (de) 2021-06-24
US20220326953A1 (en) 2022-10-13
CN113094096A (zh) 2021-07-09

Similar Documents

Publication Publication Date Title
US11842423B2 (en) Dot product operations on sparse matrix elements
US20220129521A1 (en) Systolic disaggregation within a matrix accelerator architecture
US11494163B2 (en) Conversion hardware mechanism
US12008067B2 (en) Sparse matrix multiplication acceleration mechanism
KR20210153514A (ko) 적응적 슈퍼샘플링을 위한 딥 러닝 기반의 샘플 선택
US11669329B2 (en) Instructions and logic for vector multiply add with zero skipping
US11409579B2 (en) Multiple independent synchonization named barrier within a thread group
KR20210074173A (ko) 스파스 매트릭스 최적화 메커니즘
US20240053985A1 (en) Sharing register file usage between fused processing resources
US20230289399A1 (en) Matrix operation optimization mechanism
US20230195519A1 (en) Low power inference engine pipeline in a graphics processing unit
US11416580B2 (en) Dot product multiplier mechanism