KR20240060719A - 하나 이상의 신경망을 이용한 비디오 업샘플링 - Google Patents

하나 이상의 신경망을 이용한 비디오 업샘플링 Download PDF

Info

Publication number
KR20240060719A
KR20240060719A KR1020247013804A KR20247013804A KR20240060719A KR 20240060719 A KR20240060719 A KR 20240060719A KR 1020247013804 A KR1020247013804 A KR 1020247013804A KR 20247013804 A KR20247013804 A KR 20247013804A KR 20240060719 A KR20240060719 A KR 20240060719A
Authority
KR
South Korea
Prior art keywords
data
logic
graphics
memory
processor
Prior art date
Application number
KR1020247013804A
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 KR20240060719A publication Critical patent/KR20240060719A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/70Information retrieval; Database structures therefor; File system structures therefor of video data
    • G06F16/78Retrieval characterised by using metadata, e.g. metadata not derived from the content or metadata generated manually
    • G06F16/783Retrieval characterised by using metadata, e.g. metadata not derived from the content or metadata generated manually using metadata automatically derived from the content
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T3/00Geometric image transformations in the plane of the image
    • G06T3/40Scaling of whole images or parts thereof, e.g. expanding or contracting
    • G06T3/4046Scaling of whole images or parts thereof, e.g. expanding or contracting using neural networks
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/50Controlling the output signals based on the game progress
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/57Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/0464Convolutional networks [CNN, ConvNet]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T3/00Geometric image transformations in the plane of the image
    • G06T3/40Scaling of whole images or parts thereof, e.g. expanding or contracting
    • G06T3/4092Image resolution transcoding, e.g. by using client-server architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T5/00Image enhancement or restoration
    • G06T5/70Denoising; Smoothing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2200/00Indexing scheme for image data processing or generation, in general
    • G06T2200/28Indexing scheme for image data processing or generation, in general involving image processing hardware
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2207/00Indexing scheme for image analysis or image enhancement
    • G06T2207/10Image acquisition modality
    • G06T2207/10016Video; Image sequence
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2207/00Indexing scheme for image analysis or image enhancement
    • G06T2207/10Image acquisition modality
    • G06T2207/10024Color image
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2207/00Indexing scheme for image analysis or image enhancement
    • G06T2207/20Special algorithmic details
    • G06T2207/20081Training; Learning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2207/00Indexing scheme for image analysis or image enhancement
    • G06T2207/20Special algorithmic details
    • G06T2207/20084Artificial neural networks [ANN]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/117Filters, e.g. for pre-processing or post-processing
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/132Sampling, masking or truncation of coding units, e.g. adaptive resampling, frame skipping, frame interpolation or high-frequency transform coefficient masking
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/17Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object
    • H04N19/172Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being an image region, e.g. an object the region being a picture, frame or field
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/189Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the adaptation method, adaptation tool or adaptation type used for the adaptive coding
    • H04N19/192Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the adaptation method, adaptation tool or adaptation type used for the adaptive coding the adaptation method, adaptation tool or adaptation type being iterative or recursive
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/80Details of filtering operations specially adapted for video compression, e.g. for pixel interpolation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Artificial Intelligence (AREA)
  • Evolutionary Computation (AREA)
  • General Engineering & Computer Science (AREA)
  • Computing Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Software Systems (AREA)
  • Mathematical Physics (AREA)
  • Biophysics (AREA)
  • Molecular Biology (AREA)
  • General Health & Medical Sciences (AREA)
  • Computational Linguistics (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Library & Information Science (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Image Analysis (AREA)
  • Picture Signal Circuits (AREA)
  • Television Systems (AREA)
  • Image Processing (AREA)

Abstract

비디오를 향상시키는 장치들, 시스템들, 및 기술들이 개시된다. 적어도 하나의 실시예에서, 하나 이상의 신경망을 이용하여, 저해상도 비디오로부터의 업샘플링된 프레임들을 이용하여 고해상도 비디오를 생성한다.

Description

하나 이상의 신경망을 이용한 비디오 업샘플링{VIDEO UPSAMPLING USING ONE OR MORE NEURAL NETWORKS}
관련 출원의 상호참조
본 출원은 PCT 출원이며, 전체 개시내용이 모든 목적을 위해 참조에 의해 본 명세서에 포함되는, 2019년 9월 9일에 출원된 발명의 명칭이 "VIDEO UPSAMPLING USING ONE OR MORE NEURAL NETWORKS"인 미국 출원 번호 제16/565,088호에 대한 우선권을 주장한다.
분야
적어도 하나의 실시예는 인공 지능을 수행하고 용이화하기 위해 이용되는 처리 자원에 관한 것이다. 예를 들어, 적어도 하나의 실시예는 여기서 설명된 다양한 신규 기술에 따라 신경망을 훈련하는데 이용되는 프로세서 또는 컴퓨팅 시스템들에 관한 것이다.
비디오 콘텐츠가, 점점 더 많이 다양한 방식으로, 다양한 디바이스 상에서 및 다양한 소스로부터 소비됨에 따라, 비디오 콘텐츠의 품질이 그 콘텐츠를 디스플레이하는데 이용되는 디바이스 유형에 대해 최적보다 떨어지는 상황들이 있다. 콘텐츠 품질을 개선하기 위한 접근법들은, 종종, 아티팩트를 겪거나 원하는 품질보다 품질이 낮고, 라이브 비디오에 대해 획득하기 어려울 수 있다.
본 개시내용에 따른 다양한 실시예가 도면을 참조하여 설명될 것이며, 여기서:
도 1a 및 도 1b는, 적어도 하나의 실시예에 따른, 처리되거나 생성될 수 있는 이미지 데이터를 나타낸다;
도 2a 및 도 2b는, 적어도 하나의 실시예에 따른, 비디오 콘텐츠를 업샘플링하기 위한 접근법들을 나타낸다;
도 3은, 적어도 하나의 실시예에 따른, 비디오 콘텐츠의 시간적 안티앨리어싱된 업스케일링을 위한 시스템의 컴포넌트들을 나타낸다;
도 4는, 적어도 하나의 실시예에 따른, 비디오 콘텐츠를 업샘플링하기 위한 프로세스를 나타낸다;
도 5는, 적어도 하나의 실시예에 따른, 업샘플링된 비디오 프레임들을 추론하기 위한 프로세스의 부분을 나타낸다;
도 6은, 적어도 하나의 실시예에 따른, 하나 이상의 신경망을 이용하여 훈련 및 추론하기 위한 시스템을 나타낸다;
도 7은, 적어도 하나의 실시예에 따른, 하나 이상의 신경망을 훈련하기 위한 시스템을 나타낸다;
도 8은, 적어도 하나의 실시예에 따른 신경망의 구조를 나타낸다;
도 9a는 적어도 하나의 실시예에 따른 추론 및/또는 훈련 로직을 나타낸다;
도 9b는 적어도 하나의 실시예에 따른 추론 및/또는 훈련 로직을 나타낸다;
도 10은 적어도 하나의 실시예에 따른 예시적인 데이터 센터 시스템을 나타낸다;
도 11은 적어도 하나의 실시예에 따른 컴퓨터 시스템을 나타낸다;
도 12는 적어도 하나의 실시예에 따른 컴퓨터 시스템을 나타낸다;
도 13은 적어도 하나의 실시예에 따른 컴퓨터 시스템을 나타낸다;
도 14는 적어도 하나의 실시예에 따른 컴퓨터 시스템을 나타낸다;
도 15a는 적어도 하나의 실시예에 따른 컴퓨터 시스템을 나타낸다;
도 15b는 적어도 하나의 실시예에 따른 컴퓨터 시스템을 나타낸다;
도 15c는 적어도 하나의 실시예에 따른 컴퓨터 시스템을 나타낸다;
도 15d는 적어도 하나의 실시예에 따른 컴퓨터 시스템을 나타낸다;
도 15e 및 도 15f는 적어도 하나의 실시예에 따른 공유 프로그래밍 모델을 나타낸다;
도 16은 적어도 하나의 실시예에 따른 예시적인 집적 회로들 및 연관된 그래픽 프로세서들을 나타낸다;
도 17a 및 도 17b는 적어도 하나의 실시예에 따른 예시적인 집적 회로들 및 연관된 그래픽 프로세서들을 나타낸다;
도 18a 및 도 18b는 적어도 하나의 실시예에 따른 추가적인 예시적인 그래픽 프로세서 로직을 나타낸다;
도 19는 적어도 하나의 실시예에 따른 컴퓨터 시스템을 나타낸다;
도 20a는 적어도 하나의 실시예에 따른 병렬 프로세서를 나타낸다;
도 20b는 적어도 하나의 실시예에 따른 파티션 유닛을 나타낸다;
도 20c는 적어도 하나의 실시예에 따른 처리 클러스터를 나타낸다;
도 20d는 적어도 하나의 실시예에 따른 그래픽 멀티프로세서를 나타낸다;
도 21은 적어도 하나의 실시예에 따른 멀티그래픽 처리 유닛(GPU) 시스템을 나타낸다;
도 22는 적어도 하나의 실시예에 따른 그래픽 프로세서를 나타낸다;
도 23은 적어도 하나의 실시예에 따른 프로세서의 마이크로아키텍쳐를 나타낸다;
도 24는 적어도 하나의 실시예에 따른 심층 학습 애플리케이션 프로세서를 나타낸다;
도 25는 적어도 하나의 실시예에 따른 예시적인 뉴로모픽 프로세서(neuromorphic processor)를 나타낸다;
도 26 및 도 27은 적어도 하나의 실시예에 따른 그래픽 프로세서의 적어도 일부들을 나타낸다;
도 28은 적어도 하나의 실시예에 따른 그래픽 프로세서 코어의 적어도 일부들을 나타낸다;
도 29a 및 도 29b는 적어도 하나의 실시예에 따른 그래픽 프로세서 코어의 적어도 일부들을 나타낸다;
도 30은 적어도 하나의 실시예에 따른 병렬 처리 유닛("PPU")을 나타낸다;
도 31은 적어도 하나의 실시예에 따른 일반 처리 클러스터("GPC")를 나타낸다;
도 32는 적어도 하나의 실시예에 따른 병렬 처리 유닛("PPU")의 메모리 파티션 유닛을 나타낸다; 및
도 33은 적어도 하나의 실시예에 따른 스트리밍 멀티프로세서를 나타낸다.
적어도 하나의 실시예에서, 비디오 프레임들의 시퀀스(100)는 도 1a에 나타낸 바와 같이 비디오 스트림 상에서 수신될 수 있다. 적어도 하나의 실시예에서, 이 시퀀스로부터의 비디오 프레임들은, 적어도 한 플레이어에 대한 현재 게임 세션에서의 게임플레이를 나타내는 비디오 프레임들을 렌더링하는 게임 엔진(102)에 의해 생성된다. 적어도 하나의 실시예에서, 비디오 프레임은, 비디오 호스팅 사이트 등의 또 다른 소스로부터 수신될 수 있고, 그 비디오 호스팅 사이트에 의해 그 비디오 콘텐츠의 호스팅 후 언제든지 수신될 수 있다. 적어도 하나의 실시예에서, 연속적인 비디오 프레임들은, 게임플레이 상태의 변화로 인한 이전 비디오 프레임들로부터의 변화들을 포함할 수 있다. 적어도 하나의 실시예에서, 게임 엔진(102)에 의해 생성된 시퀀스(100)는 디폴트 또는 명시된 해상도 또는 디스플레이 크기를 가질 수 있다. 적어도 하나의 실시예에서, 시퀀스(100)의 비디오 프레임들의 이러한 해상도는, 게임 엔진(102)에 의해 렌더링된 게임플레이 비디오를 디스플레이하는데 이용되는 모니터, 터치 스크린, 또는 텔레비전 등의, 시퀀스(100)를 보기 위한 디스플레이(104)의 가능한, 바람직한 또는 현재 해상도 설정보다 낮을 수 있다.
적어도 하나의 실시예에서, 업샘플링 시스템(152)(또는 서비스, 모듈, 또는 디바이스)은, 도 1b의 뷰(150)에 나타낸 바와 같이, 시퀀스(100)의 개별 프레임을 업스케일링하는데 이용될 수 있다. 적어도 하나의 실시예에서, 게임 엔진(102)으로부터의 프레임들은, 디스플레이(104) 상에서 더 높은 해상도로 디스플레이될 수 있는 더 높은 해상도 시퀀스를 생성하기 위하여, 개개의 프레임들의 해상도를 증가시키기 위해 업샘플링 시스템(152)에 공급될 수 있다. 적어도 하나의 실시예에서, 수행될 업샘플링의 양은, 1080p로부터 4k 해상도로 진행하는 것 등의, 시퀀스(100)의 초기 해상도 및 디스플레이(104)의 타깃 해상도에 의존할 수 있다. 적어도 하나의 실시예에서, 안티앨리어싱 및 시간 평활화를 포함할 수 있는 등의, 추가 처리가 업샘플링 프로세스의 일부로서 수행될 수 있다. 적어도 하나의 실시예에서, Gaussian 필터를 이용하는 것 등의, 임의의 적절한 업샘플링 알고리즘이 이용될 수 있다. 적어도 하나의 실시예에서, 업샘플링 프로세스는 프레임별 기반으로 적용될 수 있는 지터(jitter)를 고려한다.
적어도 하나의 실시예에서, 심층 학습은 시퀀스의 업샘플링된 비디오 프레임들을 추론하는데 이용될 수 있다. 적어도 하나의 실시예에서, 머신 학습을 활용하지 않는 슈퍼 샘플링 알고리즘은 비디오 시퀀스의 현재 입력 프레임을 업샘플링하는데 이용될 수 있다. 적어도 하나의 실시예에서, 결합된 방식으로 초기 안티앨리어싱 및 업샘플링을 제공하는 시간적 안티앨리어싱 업샘플링(TAAU; temporal anti-aliasing upsampling) 알고리즘이 이용될 수 있다. 적어도 하나의 실시예에서, 비디오 프레임들의 대응하는 시퀀스로부터의 정보는 더 높은 품질의 업샘플링된 이미지를 추론하는데 이용될 수 있다. 적어도 하나의 실시예에서, 데이터로부터의 학습을 요구하지 않는 렌더링 파이프라인의 사전 지식에 기초하는 하나 이상의 휴리스틱이 이용될 수 있다. 적어도 하나의 실시예에서, 이것은 업샘플링된 해상도에서 지터-인식 업샘플링 및 샘플 축적을 포함할 수 있다. 적어도 하나의 실시예에서, 이 선행 프로세스 데이터(208)는, 도 2a의 뷰(200)에 나타낸 바와 같이, 업샘플링 알고리즘 단독에 의해 생성되는 것보다 더 높은 품질의 업샘플링된 출력 이미지(204)를 추론하기 위해, 적어도 하나의 신경망을 포함하는 업샘플러 시스템(210)에 대한 입력으로서, 현재의 입력 비디오 프레임(202) 및 선행 추론된 프레임(206)과 함께 제공될 수 있다.
적어도 하나의 실시예에서, 업샘플링 시스템(210)은 시간적 슈퍼샘플링을 위한 심층 학습을 제공하여, 이미지들 또는 비디오 프레임들의 스트림(또는 기타의 시퀀스 또는 파일)에 대한 안티앨리어싱 및 초해상도 양쪽 모두를 제공할 수 있다. 적어도 하나의 실시예에서, 도 2b의 뷰(250)에 나타낸 바와 같이 기본적 업샘플링 접근법이 이용될 수 있다. 적어도 하나의 실시예에서, 저해상도 픽셀(252)은 다수의 고해상도(또는 더 작은) 픽셀들(254)로 세그먼트화될 수 있다. 적어도 하나의 실시예에서, 업샘플링은 도 2b에 나타낸 바와 같이 4x 업샘플링일 수 있고, 여기서 입력 이미지의 각각의 픽셀은 4개의 더 높은 해상도 픽셀들로 세그먼트화된다. 적어도 하나의 실시예에서, 저해상도 픽셀(252) 내의 샘플(256)의 위치는 하나 이상의 대응하는 고해상도 픽셀에 대한 업샘플링 커널을 계산하는데 이용될 수 있다. 적어도 하나의 실시예에서, 이 커널은 블러링(blurring), 엠보싱(embossing), 샤프닝(sharpening), 또는 엣지 검출 중 적어도 하나를 제공한다.
적어도 하나의 실시예에서, 시스템(300)은 도 3에 나타낸 바와 같이 이미지 프레임들의 시퀀스의 업샘플링을 수행할 수 있다. 적어도 하나의 실시예에서, 시퀀스 또는 스트림의 비디오 프레임에 대응하는 입력 이미지(302)가 수신된다. 적어도 하나의 실시예에서, 입력 이미지(302)는 더 낮은 해상도의 조밀 이미지(dense image)이다. 적어도 하나의 실시예에서, 업샘플링 모듈(304)(또는 시스템, 컴포넌트, 디바이스, 또는 서비스)은 서브픽셀 오프셋-인식 업샘플링을 제공할 수 있는, 위에서 논의되고 도 2b와 관련하여 나타낸 것과 같은 업샘플링 알고리즘을 적용할 수 있다. 적어도 하나의 실시예에서, 이 업샘플링된 이미지는 훈련된 신경망(320)에 공급될 수 있다. 적어도 하나의 실시예에서, 훈련된 네트워크(320)는 더 높은 품질의 업샘플링된 이미지 또는 비디오 프레임의 추론을 시도하기 위해 추가 입력을 수락할 수 있다. 적어도 하나의 실시예에서, 훈련된 네트워크(320)는 또한, 선행 추론된 프레임으로부터의 입력 비디오 프레임 데이터를 수락한다. 적어도 하나의 실시예에서, 시퀀스의 선행 프레임에 대해 추론된 조밀하고 큰 과거 이미지(328)는 과거 입력 데이터를 훈련된 네트워크(320)에 제공하는데 이용될 수 있다. 적어도 하나의 실시예에서, 모션 워프 모듈(330) 또는 프로세스는 쌍입방 워핑된 과거 이미지(308)를 생성하기 위해 적용될 수 있다. 적어도 하나의 실시예에서, 모션 워핑은 하나 이상의 제약을 충족시키기 위해 데이터에 작은 오프셋들을 적용하는데 이용될 수 있다. 적어도 하나의 실시예에서, 오프셋들은 이미지의 일부들에 대한 결정되거나 예측된 모션에 적어도 부분적으로 의존한다. 적어도 하나의 실시예에서, 과거 이미지(308)는, 예를 들어, 루마 값 및 2개의 크로마 값을 포함하는 YCoCg 컬러 공간 등의, 특정한 컬러 공간에서 쌍입방 워핑된 이미지(312)를 생성하기 위해 컬러공간 변환 모듈(310)을 이용하여 처리될 수 있다. 적어도 하나의 실시예에서, 쌍입방 워핑된 이미지(312)는 루마 결정 모듈(318)에 공급되어 루마-특유의 이미지 데이터를 훈련된 네트워크(320)에 대한 입력으로서 제공할 수 있다. 적어도 하나의 실시예에서, 루마 결정 모듈(318)은 또한, 처리된 이미지들에 관한 업샘플링의 결과들을 평활화하기 위하여 안티앨리어싱된 루마 값들을 제공하도록 시간적 안티앨리어싱 모듈(314)에 의해 생성된 안티앨리어싱된 이미지(316)를 수락할 수 있다. 적어도 하나의 실시예에서, 신경망(320)에 대한 입력으로서 제공되는 과거 이미지는, 적용되는 결정된 지터 오프셋에 부분적으로 기초하여, 현재 프레임(306)과 어느 정도 이미 블렌딩될 수 있고, 이것은 양호한 선명한 고해상도 이미지로의 시간적 수렴을 도울 수 있다.
적어도 하나의 실시예에서, 훈련된 신경망(320)은, 추론된 출력 이미지(326)를 생성하기 위해 입력 이미지(302)와 과거 이미지(328)를 함께 블렌딩하는데 이용될 수 있는 블렌딩 인자 및 다수의 커널을 생성한다. 적어도 하나의 실시예에서, 출력 이미지(326)는 업스케일링된 이미지(306)와 동일한 해상도를 갖는다. 적어도 하나의 실시예에서, 컬러라이저 모듈(324)은, 훈련된 네트워크(320)가 YCoCg 컬러 공간의 이미지 데이터에 관해 연산했더라도 출력 이미지(326)가 RGB 컬러 공간에 있게 하는 것 등의, 또 다른 컬러 공간 변환을 수행하는데 이용될 수 있다. 적어도 하나의 실시예에서, 훈련된 모델(320)에 의해 추론된 커널들은, 대응하는 시퀀스의 다음 입력 비디오 프레임에 대한 과거 이미지(328)로서의 역할도 하는 출력 이미지(326)의 인지 품질을 개선하는데 도움이 될 수 있다. 적어도 하나의 실시예에서, 훈련된 네트워크(320)로부터 출력된 커널 인자들은, 고스팅 또는 처리 아티팩트들의 선명도 및 감소를 포함할 수 있는 등의, 추론되고 업샘플링된 이미지(326)의 다양한 품질을 개선하기 위해 적용될 수 있다. 적어도 하나의 실시예에서, 이 커널 데이터의 적어도 일부는 시퀀스의 하나 이상의 후속 처리된 프레임에 관한 품질 개선을 시도하기 위하여, 후속 이미지 또는 비디오 프레임을 위한 훈련된 네트워크(320)에 대한 추가 입력(322)으로서 제공될 수 있다.
적어도 하나의 실시예에서, 신경망(320)은 주석부기된 이미지들 또는 비디오 프레임들을 포함하는 데이터 세트를 이용하여 훈련된다. 적어도 하나의 실시예에서, 업샘플링될 이미지 및 대응하는 안티앨리어싱된 업샘플링된 고해상도 이미지를 포함하는 이미지들의 쌍들이 훈련에 이용된다. 적어도 하나의 실시예에서, 신경망(320)은 이들 이미지들의 쌍들 사이의 적절한 맵핑들을 학습하도록 훈련될 수 있다. 적어도 하나의 실시예에서, 신경망(320)은 또한, 적용될 적절한 블렌딩 인자 및 하나 이상의 커널 인자를 결정하도록 훈련될 수 있다. 적어도 하나의 실시예에서, 다중-인자 손실 함수는 대응하는 손실 값을 최소화하기 위해 네트워크 파라미터들을 최적화하는 등에 의해, 훈련 동안 신경망(320)을 최적화하는데 이용될 수 있다. 적어도 하나의 실시예에서, 이미지의 품질에 대한 인간의 인지를 모델링하는 것은 수학적으로 캡처하기에 복잡할 수 있기 때문에 다중-인자 손실 함수가 이용된다. 적어도 하나의 실시예에서, 신경망(320) 등의 네트워크를 훈련하는데 이용되는 손실 함수는, 스타일 컴포넌트와 시간 컴포넌트 양쪽 모두뿐만 아니라, 에러를 최소화하기 위한 L2 손실 등의 다른 손실들도 이용할 수 있다. 적어도 하나의 실시예에서, 공간적 컴포넌트는 고스팅 또는 기타의 이러한 아티팩트의 출현을 최소화하는 것을 보조하는 반면, 시간적 컴포넌트는 출력 시퀀스의 프레임들 사이의 부드러운 모션을 돕는다. 적어도 하나의 실시예에서, 이들 프레임 쌍들의 시퀀스는 개선된 시간적 평활화를 제공하기 위해 훈련에 이용된다.
적어도 하나의 실시예에서, 신경망(320)은 각각의 픽셀에 대한 다양한 인자를 예측한다. 적어도 하나의 실시예에서, 네트워크(320)는 대응하는 이미지 입력에 적용될 블렌딩 인자 및 커널의 9개 요소를 포함한 10개의 인자를 예측하거나 추론한다. 적어도 하나의 실시예에서, 예측을 생성할 때, 이들 9개의 인자는 현재 업샘플링된 프레임 데이터에 적용될 수 있다. 적어도 하나의 실시예에서, 결정된 블렌딩 인자는, 이 처리되고 업샘플링된 프레임을 이전의 추론된 프레임으로부터의 데이터와 블렌딩하는데 이용될 수 있다. 적어도 하나의 실시예에서, 이 처리 및 블렌딩을 위해 루마 채널만이 이용되며, 이것은 풀 컬러 이미지를 이용하는 것과 유사한 결과들을 제공할 수 있지만 훨씬 적은 데이터 관리 및 처리를 요구한다.
적어도 하나의 실시예에서, 손실은 픽셀당 가중 인자로 가중될 수 있다. 적어도 하나의 실시예에서, 픽셀당 가중치는, 비폐색(disocclusion)이 존재할 수 있는 영역, 또는 시퀀스의 비디오 프레임들에서 하나 이상의 객체가 갑자기 가시화되거나 표현되도록 이전에는 폐색되었지만 더 이상 폐색되지 않은 영역들에 더 많은 주의를 가져올 수 있다. 적어도 하나의 실시예에서, 성공적인 비폐색 관리는 고스팅 아티팩트들의 존재를 감소시키는 것을 도울 수 있다. 적어도 하나의 실시예에서, 이 가중 인자는 현재의 기준 프레임을 이전의 워핑된 기준 프레임과 비교함으로써 계산된다. 적어도 하나의 실시예에서, 이 이전의 워핑된 기준 프레임의 픽셀들이 대응하는 현재의 기준 프레임의 컬러 분포의 경계 박스 내에 있는 경우, 이 위치에서 비폐색이 없을 가능성이 높다는 가정이 만들어질 수 있다. 적어도 하나의 실시예에서, 이전에 워핑된 기준 프레임과 현재의 기준 프레임 사이에 상당한 컬러 차이가 있다는 결정이 이루어지면, 이 공간적 손실에 높은 가중치가 적용될 수 있다. 적어도 하나의 실시예에서, 이러한 공간적 손실의 높은 가중치는 공간적 손실이 현재의 프레임과 이전의 기준 프레임 사이에 큰 컬러 차이가 있는 영역들에 의해 더 많은 영향을 받게 할 수 있다.
적어도 하나의 실시예에서, 한 세트의 이전 예측들 대신에, 마지막 워핑된 프레임 예측만이 현재의 프레임과 함께 입력으로서 제공된다. 적어도 하나의 실시예에서, 이 마지막 예측은 과거 프레임들로부터의 정보에 기초했을 것이고, 추론된 이미지에서 아티팩트들을 최소화하고 우수한 선명도를 제공하기 위해 더 최근의 정보를 포함할 것이다. 적어도 하나의 실시예에서, 불량 프레임들 또는 아티팩트들을 갖는 프레임들은 평가시 높은 손실 값을 가져 예측이 폐기되게 할 것이므로, 훈련 동안 예측들에서의 에러들은 손실 함수의 이용을 통해 묵시적으로 관리된다. 적어도 하나의 실시예에서, 장면 변경들 또는 카메라 팬(pan)들로 인한 급격한 변화들은 또한, 컬러 값들 또는 위치들에서 큰 변화가 있을 것이므로 현재의 프레임에 대해 무관하거나 적어도 실질적으로 상이할 가능성이 높기 때문에, 마지막 예측이 폐기되고 업샘플링에 이용되지 않게 할 수 있다.
적어도 하나의 실시예에서, 도 6과 관련하여 설명된 바와 같이, 슈퍼샘플링은 클라이언트 디바이스 등의 다양한 위치에서, 콘텐츠 제공자에 의해, 또는 클라우드 자원 제공자에 의해 수행될 수 있다. 적어도 하나의 실시예에서, 적어도 하나의 그래픽 프로세서를 갖는 클라이언트 디바이스는 더 낮은 해상도 데이터를 수신하거나 획득할 것이고, 그 다음, 업샘플링된 데이터를 디스플레이하거나 프리젠팅하기 전에 이 데이터를 업샘플링할 것이다. 적어도 하나의 실시예에서, 더 낮은 해상도 데이터는, 스트림 상에서 수신되거나, 게임 또는 렌더링 엔진에 의해 생성되거나, 카메라 또는 센서에 의해 생성되거나, 또는 파일에 포함된 비디오 데이터를 포함할 수 있다. 적어도 하나의 실시예에서, 업샘플링은 준실시간으로 발생할 수 있거나, 후속 시청 또는 프리젠테이션을 위해 오프라인으로 발생할 수 있다. 적어도 하나의 실시예에서, 게임 등의 애플리케이션들은, 게임 경험을 즐기고 상당한 지연으로 인한 불이익을 받지 않기 위해 플레이어가 인지할 수 있는 지연 없이, 준실시간으로 업스케일링된 콘텐츠를 볼 수 있게 하기 위해 빠른 업샘플링을 요구할 수 있다.
적어도 하나의 실시예에서, 하나 이상의 다른 입력(322)은 현재의 프레임과 이전의 예측된 프레임 사이에서 결정된 차이 정보를 포함할 수 있다. 적어도 하나의 실시예에서, 이들 입력은 픽셀 값들에서 큰 차이가 있는 픽셀들 또는 픽셀들의 영역들을 식별하는데 도움이 될 수 있다. 적어도 하나의 실시예에서, 이 정보는 이미지의 상이한 영역들에 있는 소정의 픽셀 값들을 얼마나 가중할지를 결정하기 위해 훈련 또는 추론시에 유리하게 이용될 수 있다. 적어도 하나의 실시예에서, 은닉된 과거 데이터는 또한, 네트워크(320)로부터 생성될 수 있고 후속 프레임에 대한 입력으로서 이용될 수 있으며, 이것은 네트워크(320)가, 후속 프레임에 유용할 수 있거나 후속 프레임을 분석하거나 추론하기 위한 시작점으로서 역할할 수 있는 정보를 부과하는 것을 가능케 할 수 있다.
적어도 하나의 실시예에서, 비디오 프레임들의 업샘플링은 도 4에 나타낸 프로세스(400)를 이용하여 수행될 수 있다. 적어도 하나의 실시예에서, 더 낮은 해상도 비디오의 스트림이 수신되거나(402) 기타의 방식으로 획득된다. 적어도 하나의 실시예에서, 이 스트림의 개개의 프레임들은, 디스플레이를 위해 이 스트림의 더 높은 해상도 버전을 제공하기 위하여, 수신될 때 분석될 수 있다. 적어도 하나의 실시예에서, 이 스트림의 현재의 비디오 프레임은 업샘플링 알고리즘을 이용하여 업샘플링될 수 있다(404). 적어도 하나의 실시예에서, 업샘플링의 결과와 동일한 해상도에 있을, 이전의 워핑된 비디오 프레임 예측이 획득된다(406). 적어도 하나의 실시예에서, 이들 프레임들은, 타깃 컬러 공간으로, 및 처리될 이들 프레임들의 표현들에 이용되는 그 타깃 공간의 단일 채널로 적절하게 변환된다(408). 적어도 하나의 실시예에서, 블렌딩 인자 및 하나 이상의 커널 인자를 결정하기 위해 훈련된 신경망에 대한 입력으로서, 적용가능한 경우 적어도 일부 추가 정보와 함께, 이들 프레임들이 제공된다(410). 적어도 하나의 실시예에서, 이들 추론된 인자들 및 입력 프레임들은, 높은 이미지 품질 및 타깃 업샘플링된 해상도를 갖는 대응하는 현재의 입력 비디오 프레임의 출력 버전을 생성하는데 이용된다(412). 적어도 하나의 실시예에서, 이 출력 비디오 프레임은 비디오 스트림의 일부로서 디스플레이를 위해 제공되되(414), 제1의 더 낮은 해상도에서 수신된 비디오 스트림이, 업샘플링에 의한 양호한 이미지 품질 및 매우 적은 아티팩트와 함께 제2의 더 높은 해상도에서 디스플레이될 수 있게 제공될 수 있다.
적어도 하나의 실시예에서, 비디오 프레임들의 업샘플링은 도 4에 나타낸 프로세스(400)를 이용하여 수행될 수 있다. 적어도 하나의 실시예에서, 비디오 데이터의 현재의 프레임이 수신된다(502). 적어도 하나의 실시예에서, 비디오 데이터의 이 현재의 비디오 프레임은 업스케일링 프로세스를 이용하여 타깃의 더 높은 해상도로 업샘플링된다(504). 적어도 하나의 실시예에서, 이 업샘플링된 현재의 프레임은, 훈련된 신경망에 대한 입력으로서, 이 타깃의 더 높은 해상도의 선행 추론된 프레임과 함께 제공된다(506). 적어도 하나의 실시예에서, 이 현재의 비디오 프레임의 출력 버전은, 이 업샘플링된 현재의 프레임과 선행 추론된 프레임으로부터의 픽셀 값들의 블렌딩에 적어도 부분적으로 기초하여 추론된다(508). 적어도 하나의 실시예에서, 이 출력 버전은, 디스플레이를 위해서뿐만 아니라 더 낮은 해상도에서 수신된 후속 비디오 프레임의 처리를 위해 제공될 수 있다(510).
신경망 훈련 및 개발
점점 더 다양한 산업과 응용에서 머신 학습을 이용하고 있다. 적어도 하나의 실시예에서, 프로세서들 상에서 개발된 심층 신경망(DNN)은, 자율 주행 자동차에서부터 더 빠른 약물 개발에 이르기까지, 보안 시스템을 위한 자동 이미지 분석에서부터 화상 채팅 애플리케이션에서의 스마트 실시간적 언어 번역에 이르기까지, 다양한 이용 사례에 대해 이용되어 왔다. 적어도 하나의 실시예에서, 심층 학습은, 인간 두뇌의 신경 학습 프로세스를 모델링하고, 지속적으로 학습하고, 지속적으로 더 똑똑해지고, 시간이 지남에 따라 더 빠르게 더 정확한 결과를 제공하는 기술이다. 어린이는 처음에 성인에게 다양한 형상을 올바르게 식별하고 분류하는 방법을 배우게 되며, 결국에는 임의의 코칭 없이도 형상들을 식별할 수 있게 된다. 유사하게, 적어도 하나의 실시예에서, 유사한 태스크를 달성하도록 설계된 심층 학습 또는 신경 학습 시스템은, 기본적인 객체들, 폐색된 객체 등을 식별하는데 있어서, 이들 객체들에 컨텍스트를 역시 할당하면서, 더 똑똑하고 효율적이 되도록 훈련될 필요가 있다.
적어도 하나의 실시예에서, 인간 두뇌의 뉴런들은 수신된 다양한 입력을 보고, 중요도 레벨이 이들 입력 각각에 할당되고, 출력은 다른 뉴런들로 전달되어 이에 관해 작용한다. 인공 뉴런 또는 퍼셉트론은 신경망의 가장 기본적 모델이다. 적어도 하나의 실시예에서, 퍼셉트론은 인식 및 분류하도록 훈련받고 있는 객체의 다양한 피처들을 나타내는 하나 이상의 입력을 수신할 수 있고, 이들 피처들 각각에는, 객체의 형상을 정의하는데 있어서 그 피처의 중요도에 기초하여 소정의 가중치가 할당된다.
심층 신경망(DNN) 모델은, 복잡한 문제들을 높은 정확도로 신속하게 해결하기 위해 엄청난 양의 입력 데이터로 훈련될 수 있는 접속된 많은 퍼셉트론들(예를 들어, 노드들)의 복수의 계층을 포함한다. 한 예에서, DNN 모델의 첫 번째 계층은, 자동차의 입력 이미지를 다양한 섹션들로 분해하고, 라인들 및 각도들 등의 기본 패턴들을 찾는다. 두 번째 계층은, 바퀴들, 앞유리들, 거울들 등의 상위 레벨 패턴들을 찾기 위해 라인들을 조립한다. 다음 계층은, 차량 유형을 식별하고, 마지막 몇개의 계층은 입력 이미지에 대한 라벨을 생성하고, 특정한 자동차 브랜드의 모델을 식별한다. 일단 DNN이 훈련되고 나면, 이 DNN은 배치되어 추론이라고 알려진 프로세스에서 객체들 또는 패턴들을 식별하고 분류하는데 이용할 수 있다. 추론(DNN이 주어진 입력으로부터 유용한 정보를 추출하는 프로세스)의 예들로는, ATM 머신에 예치된 수표에서 손으로 쓴 숫자를 식별하는 것, 사진에서 친구의 이미지를 식별하는 것, 영화 추천을 제공하는 것, 상이한 유형들의 자동차들, 보행자들, 무인 자동차에서의 도로 위험들을 식별하고 분류하는 것, 또는 준실시간으로 사람의 말을 번역하는 것이 포함된다.
훈련 동안에, 데이터는, 입력에 대응하는 라벨을 나타내는 예측이 생성될 때까지 순방향 전파 국면에서 DNN을 통해 흐른다. 신경망이 입력을 올바르게 라벨링하지 않으면, 올바른 라벨과 예측된 라벨 사이의 에러들이 분석되고, DNN이 입력과 훈련 데이터세트 내의 기타의 입력들을 올바르게 라벨링할 때까지 역방향 전파 국면 동안 각각의 피처에 대해 가중치들이 조정된다. 복잡한 신경망들을 훈련시키는 것은, 지원되는 부동 소수점 곱셈들 및 덧셈들을 포함한, 엄청난 양의 병렬 컴퓨팅 성능을 요구한다. 추론은, 이미지들을 분류하고, 음성을 번역하고, 새로운 정보를 추론하기 위해 이전에 본 적이 없는 새로운 입력들에 훈련된 신경망이 적용되는 레이턴시-민감형 프로세스인, 훈련보다 덜 계산-집약적이다.
신경망들은 행렬 수학 연산들에 크게 의존하며, 복잡한 다층 네트워크들은, 효율성과 속도 양쪽 모두를 위해 엄청난 양의 부동 소수점 성능과 대역폭을 요구한다. 행렬 수학 연산들에 최적화되고, 수십 내지 수백 TFLOPS의 성능을 제공하는 수천개의 처리 코어와 함께, 컴퓨팅 플랫폼은 심층 신경망 기반의 인공 지능 및 머신 학습 애플리케이션들에 요구되는 성능을 제공할 수 있다.
도 6은, 적어도 하나의 실시예에서, 머신 학습을 훈련시키고 활용하는데 이용될 수 있는 시스템(600)의 컴포넌트들을 나타낸다. 논의될 바와 같이, 다양한 컴포넌트들은, 단일 엔티티 또는 복수의 엔티티의 제어 하에 있을 수 있는, 컴퓨팅 디바이스들 및 자원들의 다양한 조합, 또는 단일 컴퓨팅 시스템에 의해 제공될 수 있다. 또한, 양태들은, 상이한 엔티티들에 의해 트리거되거나, 개시되거나, 요청될 수 있다. 적어도 하나의 실시예에서 신경망의 훈련은 제공자 환경(606)과 연관된 제공자에 의해 지시될 수 있는 반면, 적어도 하나의 실시예에서 훈련은 클라이언트 디바이스(602) 또는 기타 이러한 자원을 통해 제공자 환경에 액세스하는 고객이나 다른 사용자에 의해 요청될 수 있다. 적어도 하나의 실시예에서, 훈련 데이터(또는 훈련된 신경망에 의해 분석될 데이터)는, 제공자, 사용자, 또는 제3자 콘텐츠 제공자(624)에 의해 제공될 수 있다. 적어도 하나의 실시예에서, 클라이언트 디바이스(602)는, 예를 들어 디바이스의 네비게이션을 보조하는 요청들을 제출하고/하거나 지시들을 수신할 수 있는, 사용자를 위하여 네비게이트될 차량 또는 객체일 수 있다.
적어도 하나의 실시예에서, 요청들은 적어도 하나의 네트워크(604)를 통해 제출되어 제공자 환경(606)에 수신될 수 있다. 적어도 하나의 실시예에서, 클라이언트 디바이스는, 데스크탑 컴퓨터들, 노트북 컴퓨터들, 컴퓨터 서버들, 스마트폰들, 태블릿 컴퓨터들, 게임 콘솔들(휴대형 또는 기타), 컴퓨터 프로세서들, 컴퓨팅 로직 및 셋탑 박스들을 포함할 수 있는, 사용자가 이러한 요청들을 생성 및 전송할 수 있게 하는 임의의 적절한 전자적 및/또는 컴퓨팅 디바이스들일 수 있다. 네트워크(들)(604)는, 인터넷, 인트라넷, Ethernet, 셀룰러 네트워크, 근거리 통신망(LAN), 피어들 사이의 직접 무선 접속들의 네트워크 등을 포함할 수 있는, 요청 또는 기타의 데이터를 전송하기 위한 임의의 적절한 네트워크를 포함할 수 있다.
적어도 하나의 실시예에서, 데이터를 이 예에서의 훈련 및 추론 관리자(610)에 포워딩할 수 있는 인터페이스 계층(608)까지 요청이 수신될 수 있다. 이 관리자는, 요청들을 관리하고 대응하는 데이터 또는 콘텐츠를 서비스하기 위한 하드웨어 및 소프트웨어를 포함하는 시스템 또는 서비스일 수 있다. 적어도 하나의 실시예에서, 이 관리자는 신경망을 훈련시키라는 요청을 수신할 수 있고, 훈련 관리자(612)로의 요청에 대한 데이터를 제공할 수 있다. 적어도 하나의 실시예에서, 훈련 관리자(612)는, 요청에 의해 명시되지 않은 경우, 이용될 적절한 모델 또는 네트워크를 선택할 수 있고, 관련된 훈련 데이터를 이용하여 모델을 훈련시킬 수 있다. 적어도 하나의 실시예에서, 훈련 데이터는 훈련 데이터 저장소(614)에 저장되거나, 클라이언트 디바이스(602)로부터 수신되거나 제3자 제공자(624)로부터 획득된 일괄 데이터일 수 있다. 적어도 하나의 실시예에서, 훈련 관리자(612)는 예를 들어 여기서 논의된 LARC 기반 접근법을 이용하는 등에 의해 훈련 데이터를 담당할 수 있다. 네트워크는, RNN(Recurrent Neural Network) 또는 CNN(Convolutional Neural Network) 등의 임의의 적절한 네트워크일 수 있다. 일단 네트워크가 훈련되고 성공적으로 평가되고 되면, 훈련된 네트워크는, 예를 들어 사용자들, 애플리케이션들 또는 서비스들 등에 대한 상이한 모델들 또는 네트워크들을 저장할 수 있는 모델 저장소(616)에 저장될 수 있다. 적어도 하나의 실시예에서, 다수의 상이한 요인들에 기초하여 이용될 수 있는, 단일 애플리케이션 또는 엔티티에 대한 복수의 모델이 있을 수 있다.
적어도 하나의 실시예에서, 후속 시점에서, 훈련된 신경망에 의해 적어도 부분적으로 결정되거나 영향을 받는 콘텐츠(예를 들어, 경로 결정) 또는 데이터에 대한 요청이 클라이언트 디바이스(602)(또는 다른 이러한 디바이스)로부터 수신될 수 있다. 이 요청은, 예를 들어 하나 이상의 추론 또는 다른 출력 값들, 분류들 또는 예측들을 획득하기 위해 신경망을 이용하여 처리될 입력 데이터를 포함할 수 있다. 적어도 하나의 실시예에서, 입력 데이터는 인터페이스 계층(608)까지 수신될 수 있고 추론 모듈(618)로 향할 수 있지만, 상이한 시스템 또는 서비스도 역시 이용될 수 있다. 적어도 하나의 실시예에서, 추론 모듈(618)은, 추론 모듈(618)에 로컬로 아직 저장되지 않은 경우 모델 저장소(616)로부터 여기서 논의된 훈련된 심층 신경망(DNN) 등의 적절한 훈련된 네트워크를 획득될 수 있다. 추론 모듈(618)은, 훈련된 네트워크에 대한 입력으로서 데이터를 제공할 수 있고, 그 다음, 훈련된 네트워크는 출력으로서 하나 이상의 추론을 생성할 수 있다. 이것은, 예를 들어, 입력 데이터의 한 인스턴스의 분류를 포함할 수 있다. 적어도 하나의 실시예에서, 그 다음, 디스플레이 또는 사용자로의 기타의 전달을 위해 추론들이 클라이언트 디바이스(602)에 전송될 수 있다. 적어도 하나의 실시예에서, 사용자에 대한 컨텍스트 데이터는 또한, 사용자 컨텍스트 데이터 저장소(622)에 저장될 수 있고, 추론들을 생성하거나 인스턴스들을 획득한 후 사용자에게 반환할 데이터를 결정할 때 네트워크에 대한 입력으로서 유용할 수 있는 사용자에 관한 데이터가 포함될 수 있다. 적어도 하나의 실시예에서, 입력 또는 추론 데이터의 적어도 일부를 포함할 수 있는 관련 데이터는 또한, 미래의 요청들을 처리하기 위해 로컬 데이터베이스(620)에 저장될 수 있다. 적어도 하나의 실시예에서, 사용자는 계정 또는 다른 정보를 이용하여 제공자 환경의 자원들 또는 기능에 액세스할 수 있다. 적어도 하나의 실시예에서, 허용되고 이용가능한 경우, 사용자 데이터는 또한 수집되어, 미래의 요청들에 대한 더 정확한 추론들을 제공하기 위해 모델들을 추가로 훈련하는데 이용될 수 있다. 적어도 하나의 실시예에서, 요청들은 클라이언트 디바이스(602) 상에서 실행되는 머신 학습 애플리케이션(626)에 대한 사용자 인터페이스를 통해 수신될 수 있고, 결과들은 동일한 인터페이스를 통해 디스플레이될 수 있다. 클라이언트 디바이스는, 요청을 생성하고 결과들 또는 응답을 처리하기 위한 프로세서(628) 및 메모리(630) 등의 자원들뿐만 아니라, 머신 학습 애플리케이션(626)을 위한 데이터를 저장하기 위한 적어도 하나의 데이터 저장 요소(632)를 포함할 수 있다.
적어도 하나의 실시예에서, 프로세서(628)(또는 훈련 관리자(612) 또는 추론 모듈(618)의 프로세서)는 중앙 처리 유닛(CPU)일 것이다. 그러나, 언급한 바와 같이 이러한 환경들의 자원들은, GPU들을 이용하여 적어도 소정의 유형들의 요청들에 대한 데이터를 처리할 수 있다. 수천개의 코어들과 함께, GPU들은 실질적인 병렬 작업부하를 처리하도록 설계되므로, 신경망 훈련 및 예측 생성을 위한 심층 학습에서 널리 이용되었다. 오프라인 구축에 대한 GPU들의 이용이 더 크고 복잡한 모델들을 더 빠르게 훈련시킬 수 있지만, 예측들을 오프라인으로 생성하는 것은, 요청-시간 입력 피처들이 이용될 수 없거나 피처들의 모든 치환들에 대해 예측들이 생성되어야 하고, 실시간 요청들을 서비스하기 위해 조회 테이블에 저장해야 함을 의미한다. 심층 학습 프레임워크가 CPU 모드를 지원하고 모델이 충분히 작고 단순하여 합리적인 레이턴시로 CPU에서 피드-포워드를 수행할 수 있는 경우, CPU 인스턴스 상의 서비스가 모델을 호스팅할 수 있다. 이 경우, 훈련은 GPU 상에서 오프라인으로 이루어질 수 있고 추론은 CPU 상에서 실시간으로 이루어질 수 있다. CPU 접근법이 실행가능하지 않은 경우, 서비스는 GPU 인스턴스 상에서 실행될 수 있다. 그러나, GPU들은 CPU들과는 상이한 성능 및 비용 특성을 갖기 때문에, 런타임 알고리즘을 GPU로 오프로드하는 서비스를 실행하는 것은, CPU 기반의 서비스와는 상이하게 설계될 것을 요구할 수 있다.
적어도 하나의 실시예에서, 제공자 환경(606)의 향상을 위해 비디오 데이터가 클라이언트 디바이스(602)로부터 제공될 수 있다. 적어도 하나의 실시예에서, 비디오 데이터는 클라이언트 디바이스(602) 상의 향상을 위해 처리될 수 있다. 적어도 하나의 실시예에서, 비디오 데이터는 제3자 콘텐츠 제공자(624)로부터 스트리밍될 수 있고, 제3자 제공자(624), 제공자 환경(606), 또는 클라이언트 디바이스(602)에 의해 향상될 수 있다.
도 7은, 적어도 하나의 실시예에서 데이터를 분류하거나 추론들을 생성하는데 이용될 수 있는 시스템(700)을 나타낸다. 적어도 하나의 실시예에서, 지도(supervised) 및 비지도(unsupervised) 훈련 양쪽 모두는 여기서 논의된 적어도 하나의 실시예에서 이용될 수 있다. 적어도 하나의 실시예에서, 한 세트의 훈련 데이터(702)(예를 들어, 분류되거나 라벨링된 데이터)는 입력으로서 제공되어 훈련 데이터로서 기능한다. 적어도 하나의 실시예에서, 훈련 데이터는, 신경망이 훈련받을 적어도 하나의 유형의 객체의 인스턴스들뿐만 아니라 그 유형의 객체를 식별하는 정보를 포함할 수 있다. 적어도 하나의 실시예에서, 훈련 데이터는 한 세트의 이미지들을 포함할 수 있고, 이미지들 각각은 한 유형의 객체의 표현을 포함하며, 각각의 이미지는 또한, 라벨, 메타데이터, 분류, 또는 각각의 이미지에서 표현된 객체의 유형을 식별하는 기타의 정보를 포함하거나 이와 연관된다. 텍스트 데이터, 오디오 데이터, 비디오 데이터 등을 포함할 수 있는, 다양한 다른 유형들의 데이터가 훈련 데이터로서 역시 이용될 수 있다. 적어도 하나의 실시예에서, 훈련 데이터(702)는 훈련 관리자(704)에 대한 훈련 입력으로서 제공된다. 적어도 하나의 실시예에서, 훈련 관리자(704)는, 신경망(또는 다른 모델 또는 알고리즘 등)을 훈련시키기 위해 훈련 애플리케이션을 실행하는 하나 이상의 컴퓨팅 디바이스 등의, 하드웨어 및 소프트웨어를 포함하는 시스템 또는 서비스일 수 있다. 적어도 하나의 실시예에서, 훈련 관리자(704)는 훈련에 이용될 모델의 유형을 나타내는 지시 또는 요청을 수신한다. 적어도 하나의 실시예에서, 모델은, 인공 신경망, 심층 학습 알고리즘, 학습 분류기, Bayesian 네트워크 등을 포함할 수 있는, 이러한 목적들에 유용한 임의의 적절한 통계적 모델, 네트워크 또는 알고리즘일 수 있다. 적어도 하나의 실시예에서, 훈련 관리자(704)는, 적절한 저장소(706)로부터 초기 모델 또는 기타의 훈련되지 않은 모델을 선택하고 훈련 데이터(702)를 이용하여 모델을 훈련시킬 수 있고, 유사한 유형들의 데이터를 분류하거나 기타 이러한 추론들을 생성하는데 이용될 수 있는 훈련된 모델(708)(예를 들어, 훈련된 심층 신경망)을 생성할 수 있다. 훈련 데이터가 이용되지 않는 적어도 하나의 실시예에서, 훈련 관리자(704)마다 입력 데이터에 관한 훈련을 위해 적절한 초기 모델이 여전히 선택될 수 있다.
적어도 하나의 실시예에서, 모델은, 선택된 모델의 유형에 부분적으로 의존할 수 있는, 다수의 상이한 방식으로 훈련될 수 있다. 적어도 하나의 실시예에서, 머신 학습 알고리즘은 한 세트의 훈련 데이터와 함께 제공될 수 있고, 여기서 모델은 훈련 프로세스에 의해 생성된 모델 아티팩트이다. 적어도 하나의 실시예에서, 훈련 데이터의 각각의 인스턴스는 타깃 또는 타깃 속성이라고 지칭될 수 있는 정답(예를 들어, 분류)을 포함한다. 적어도 하나의 실시예에서, 학습 알고리즘은, 입력 데이터 속성들을 타깃, 예측될 답변에 맵핑하는 패턴들을 훈련 데이터에서 찾고, 이들 패턴들을 캡처하는 머신 학습 모델이 출력된다. 적어도 하나의 실시예에서, 그 다음, 머신 학습 모델은 타깃이 명시되지 않은 새로운 데이터에 관한 예측들을 획득하는데 이용될 수 있다.
적어도 하나의 실시예에서, 훈련 관리자(704)는, 2진 분류, 다중클래스 분류, 및 회귀 모델들을 포함하는 한 세트의 머신 학습 모델들로부터 선택될 수 있다. 적어도 하나의 실시예에서, 이용될 모델의 유형은 예측될 타깃의 유형에 적어도 부분적으로 의존할 수 있다. 적어도 하나의 실시예에서, 2진 분류 문제들에 대한 머신 학습 모델들은, 2개의 가능한 클래스 중 하나 등의, 2진 결과를 예측한다. 적어도 하나의 실시예에서, 로지스틱 회귀 등의 학습 알고리즘은 2진 분류 모델을 훈련시키는데 이용될 수 있다. 적어도 하나의 실시예에서, 다중클래스 분류 문제들에 대한 머신 학습 모델들은, 2개보다 많은 결과 중 하나를 예측하는 것 등의, 복수의 클래스에 대해 예측들이 생성되는 것을 허용한다. 다항 로지스틱 회귀는 다중클래스 모델들을 훈련시키는데 유용할 수 있다. 회귀 문제들에 대한 머신 학습 모델들은 숫자 값을 예측한다. 선형 회귀는 회귀 모델들을 훈련시키는데 유용할 수 있다.
적어도 하나의 실시예에서, 한 실시예에 따른 머신 학습 모델을 훈련시키기 위해, 훈련 관리자는, 입력 훈련 데이터 소스뿐만 아니라, 예측될 타깃을 포함하는 데이터 속성의 이름, 요구되는 데이터 변환 지시들, 및 학습 알고리즘을 제어하는 훈련 파라미터들 등의, 다른 정보를 결정해야 한다. 적어도 하나의 실시예에서, 훈련 프로세스 동안, 훈련 관리자(704)는 훈련 데이터 소스에 명시된 타깃의 유형에 기초하여 적절한 학습 알고리즘을 자동으로 선택할 수 있다. 적어도 하나의 실시예에서, 머신 학습 알고리즘들은, 훈련 프로세스 및 결과적인 머신 학습 모델의 소정의 속성들을 제어하는 데 이용되는 파라미터들을 수락할 수 있다. 이들은 여기서는 훈련 파라미터들이라고 지칭된다. 적어도 하나의 실시예에서, 어떠한 훈련 파라미터도 명시되지 않은 경우, 훈련 관리자는 광범위한 머신 학습 태스크들에 대해 잘 작동하는 것이라고 알려진 디폴트 값들을 이용할 수 있다. 값이 명시될 수 있는 훈련 파라미터들의 예들로는, 최대 모델 크기, 훈련 데이터에 관한 최대 패스 횟수, 셔플 유형, 정규화 유형, 학습률, 및 정규화 양이 포함된다. 성능을 미세-튜닝하기 위해 값들을 조정하는 옵션들과 함께, 디폴트 설정들이 명시될 수 있다.
적어도 하나의 실시예에서, 최대 모델 크기는, 모델의 훈련 동안 생성되는 패턴들의, 바이트 단위의, 총 크기이다. 적어도 하나의 실시예에서, 100MB의 모델 등의, 디폴트 명시된 크기의 모델이 생성될 수 있다. 훈련 관리자가 모델 크기를 채우기에 충분한 패턴들을 결정할 수 없는 경우, 더 작은 모델이 생성될 수 있다. 훈련 관리자가 명시된 크기에 맞는 것보다 더 많은 패턴을 찾으면, 학습된 모델의 품질에 가장 적은 영향을 미치는 패턴들을 트리밍함으로써 최대 컷오프가 시행될 수 있다. 모델 크기를 선택하는 것은, 모델의 예측 품질과 이용 비용 사이의 절충의 제어를 제공한다. 적어도 하나의 실시예에서, 더 작은 모델들은 훈련 관리자가 최대 크기 제한 내에 맞는 많은 패턴을 제거하게 할 수 있어서, 예측들의 품질에 영향을 미친다. 적어도 하나의 실시예에서, 더 큰 모델들은 실시간적 예측들을 질의하는데 더 많은 비용이 들 수 있다. 적어도 하나의 실시예에서, 모델들은 입력 데이터가 아니라 패턴들을 저장하기 때문에, 더 큰 입력 데이터 세트가 반드시 더 큰 모델을 초래하는 것은 아니다. 적어도 하나의 실시예에서, 패턴들이 적고 단순하다면, 결과 모델은 작을 것이다. 많은 수의 원시 속성들(입력 열들) 또는 파생된 피처들(데이터 변환들의 출력들)을 갖는 입력 데이터는 아마 훈련 프로세스 동안에 더 많은 패턴들이 발견 및 저장되게 할 것이다.
적어도 하나의 실시예에서, 훈련 관리자(704)는 패턴 발견을 시도하기 위해 훈련 데이터에 관해 복수의 패스 또는 반복을 수행할 수 있다. 적어도 하나의 실시예에서, 10회의 패스 등의 디폴트 패스 수가 있을 수 있는 반면, 적어도 하나의 실시예에서 최대 100회의 패스 등의 최대 패스 수가 설정될 수 있다. 적어도 하나의 실시예에서, 최대 세트가 없을 수 있거나, 훈련 프로세스의 종료를 트리거할 수렴 기준 또는 다른 인자 세트가 있을 수 있다. 적어도 하나의 실시예에서, 훈련 관리자(704)는 훈련 동안 (모델 수렴에 대한 것 등의) 패턴의 품질을 모니터링할 수 있고, 발견할 데이터 포인트 또는 패턴이 더 이상 없을 때 훈련을 자동으로 중지할 수 있다. 적어도 하나의 실시예에서, 단지 적은 수의 관찰을 갖는 데이터 세트들은 충분히 높은 모델 품질을 획득하기 위해 데이터에 관해 더 많은 패스를 요구할 수 있다. 더 큰 데이터 세트들은 많은 유사한 데이터 포인트를 포함할 수 있으므로, 많은 수의 패스에 대한 필요성을 감소시킬 수 있다. 데이터보다 더 많은 데이터 패스를 선택하는 것의 잠재적인 영향은, 모델 훈련이 자원 및 시스템 이용 측면에서 더 오래 걸리고 더 많은 비용이 들 수 있다는 것이다.
적어도 하나의 실시예에서, 훈련 데이터는, 훈련 이전에 또는 훈련 패스들 사이에서 셔플링된다. 적어도 하나의 실시예에서, 셔플링은 진정한 랜덤 순서를 생성하는 랜덤 또는 의사 랜덤 셔플링이지만, 소정 유형들의 데이터의 그룹화가 없도록 보장하기 위해 어떤 제약들이 제 위치에 있을 수 있거나, 이러한 그룹화가 존재하더라도 셔플링된 데이터가 리셔플링될 수 있거나, 기타 등등이다. 적어도 하나의 실시예에서, 훈련 알고리즘이 유사한 유형들의 데이터의 그룹화 또는 너무 많은 관찰에 대한 단일 유형의 데이터와 연속해서 마주치지 않도록, 셔플링은 훈련에 대해 데이터가 이용되는 순서 또는 배열을 변경한다. 적어도 하나의 실시예에서, 모델은 객체를 예측하도록 훈련될 수 있다. 적어도 하나의 실시예에서, 데이터는 업로드 전에 객체 유형별로 분류될 수 있다. 적어도 하나의 실시예에서, 알고리즘은 객체 유형별로 알파벳순으로 데이터를 처리할 수 있고, 소정의 객체 유형에 대한 데이터만을 먼저 만날 수 있다. 적어도 하나의 실시예에서, 모델은 그 유형의 객체에 대한 패턴들을 학습하기 시작할 것이다. 적어도 하나의 실시예에서, 모델은 제2 객체 유형에 대한 데이터만을 만날 것이고, 그 객체 유형에 맞도록 모델을 조정하려고 시도할 것이고, 이것은 제1 객체 유형에 맞는 패턴을 저하시킬 수 있다. 객체 유형들 사이의 이러한 갑작스러운 전환은, 객체 유형을 정확하게 예측하는 방법을 학습하지 못하는 모델을 생성할 수 있다. 적어도 하나의 실시예에서, 셔플링은, 훈련 데이터 세트가 훈련 및 평가 서브세트들로 분할되기 전에 적어도 하나의 실시예에서 수행되되, 데이터 유형들의 비교적 균등한 분포가 양쪽 스테이지들 모두에 이용되도록 수행될 수 있다. 적어도 하나의 실시예에서, 훈련 관리자(704)는 예를 들어 의사 랜덤 셔플링 기술을 이용하여 데이터를 자동으로 셔플링할 수 있다.
적어도 하나의 실시예에서, 적어도 하나의 실시예에서 머신 학습 모델을 생성할 때, 훈련 관리자(704)는 사용자가 설정들을 명시하거나 맞춤형 옵션들을 적용할 수 있게 할 수 있다. 적어도 하나의 실시예에서, 사용자는, 머신 학습 모델의 예측 품질을 평가하기 위해 예약될 입력 데이터의 일부를 나타내는, 하나 이상의 평가 설정을 명시할 수 있다. 적어도 하나의 실시예에서, 사용자는 어떤 속성들 및 속성 변환들이 모델 훈련에 이용가능한지를 나타내는 정책을 명시할 수 있다. 적어도 하나의 실시예에서, 사용자는 또한, 훈련 프로세스 및 결과 모델의 소정의 속성들을 제어하는 다양한 훈련 파라미터를 명시할 수 있다.
적어도 하나의 실시예에서, 일단 훈련 관리자가, 여기서 논의된 적어도 하나의 종료 기준을 이용하는 등에 의해, 모델의 훈련이 완료되었다고 결정하고 나면, 훈련된 모델(708)은 검증 데이터(712)를 분류(또는 기타의 방식으로 이에 대한 추론들을 생성)하는데 있어서 분류기(714)에 의한 이용을 위해 제공될 수 있다. 적어도 하나의 실시예에서, 이것은 모델에 대한 훈련 모드와 모델에 대한 추론 모드 사이의 논리적 전환을 포함한다. 그러나, 적어도 하나의 실시예에서, 훈련된 모델(708)은 먼저, 평가기(710)에 전달될 것이고, 평가기는 훈련된 모델의 품질(또는 다른 이러한 양태)을 평가하기 위한 적어도 하나의 컴퓨팅 자원(예를 들어, 적어도 하나의 서버의 CPU 또는 GPU)에서 실행되는 애플리케이션, 프로세스 또는 서비스를 포함할 수 있다. 적어도 하나의 실시예에서, 모델이 평가되어, 이 모델이 새로운 및 미래의 데이터에 관한 타깃을 예측할 때 적어도 성능의 최소 허용 레벨 또는 임계 레벨을 제공할 것인지를 결정한다. 그렇지 않다면, 훈련 관리자(704)는 이 모델을 계속 훈련시킬 수 있다. 적어도 하나의 실시예에서, 미래의 데이터 인스턴스들은 종종 알려지지 않은 타깃 값들을 가질 것이기 때문에, 타깃 답변이 알려진 데이터에 관한 머신 학습의 정확도 메트릭을 체크하고, 이 평가를 미래 데이터에 관한 예측 정확도에 대한 프록시로서 이용하는 것이 바람직할 수 있다.
적어도 하나의 실시예에서, 모델은 훈련을 위해 제공된 훈련 데이터(702)의 서브세트를 이용하여 평가된다. 이 서브세트는 위에서 논의한 셔플 및 분할 접근법을 이용하여 결정할 수 있다. 적어도 하나의 실시예에서, 이 평가 데이터 서브세트는 타깃으로 라벨링될 것이고, 따라서 평가를 위한 실측자료 소스로서 작용할 수 있다. 훈련에 이용된 것과 동일한 데이터로 머신 학습 모델의 예측 정확도를 평가하는 것은, 훈련 데이터를 일반화하는 것 대신에 훈련 데이터를 기억하는 모델들에 대해 긍정적인 평가가 생성될 수 있기 때문에 유용하지 않다. 적어도 하나의 실시예에서, 일단 훈련이 완료되고 나면, 평가 데이터 서브세트는 훈련된 모델(708)을 이용하여 처리되고 평가기(710)는 이 모델의 대응하는 출력(또는 예측들/관찰들)과 대조하여 실측자료 데이터를 비교함으로써 이 모델의 정확도를 결정할 수 있다. 적어도 하나의 실시예에서, 적어도 하나의 실시예에서 평가기(710)는 예측된 값과 실제 값이 얼마나 잘 일치하는지를 나타내는 요약 또는 성능 메트릭을 제공할 수 있다. 적어도 하나의 실시예에서, 훈련된 모델이, 적어도 최소 성능 기준, 또는 다른 이러한 정확도 임계값을 충족하지 않는다면, 훈련 관리자(704)는 추가 훈련을 수행하도록 지시받을 수 있거나, 일부 경우에는 새로운 또는 상이한 모델의 훈련을 시도할 수 있다. 적어도 하나의 실시예에서, 훈련된 모델(708)이 관련 기준을 충족한다면, 훈련된 모델은 분류기(714)에 의한 이용을 위해 제공될 수 있다.
적어도 하나의 실시예에서, 머신 학습 모델을 생성하고 훈련시킬 때, 정확한 예측을 할 수 있는 모델을 생성할 모델 설정들 또는 훈련 파라미터들을 명시하는 것이 적어도 하나의 실시예에서 바람직할 수 있다. 적어도 하나의 실시예에서, 파라미터들은 수행될 패스의 수(순방향 및/또는 역방향), 정규화 또는 개선, 모델 크기, 및 셔플 유형을 포함한다. 적어도 하나의 실시예에서, 평가 데이터에 관한 최상의 예측 성능을 생성하는 모델 파라미터 설정들을 선택하는 것은 모델의 과적합(overfitting)을 초래할 수 있다. 적어도 하나의 실시예에서, 과적합은, 모델이 훈련 및 평가 데이터 소스들에서 발생하는 패턴들을 기억했지만 데이터에서 패턴들을 일반화하는데 실패한 경우 발생한다. 과적합은, 훈련 데이터가 평가에 이용된 모든 데이터를 포함할 때 자주 발생한다. 적어도 하나의 실시예에서, 과적합된 모델은 평가 동안 양호하게 수행될 수 있지만, 새로운 또는 기타의 검증 데이터에 관해 정확한 예측을 하는데 실패할 수 있다. 적어도 하나의 실시예에서, 최상의 모델로서 과적합된 모델을 선택하는 것을 피하기 위해, 훈련 관리자는 모델의 성능을 검증할 추가 데이터를 예약할 수 있다. 예를 들어, 훈련 데이터 세트는, 훈련을 위해 60%, 평가 또는 검증을 위해 40%로 나뉠 수 있고, 이것은 2개 이상의 스테이지로 나뉠 수 있다. 적어도 하나의 실시예에서, 평가 데이터에 대해 잘 작동하는 모델 파라미터들을 선택하여 이 검증 데이터의 절반 등의 검증 데이터의 서브세트에 관한 수렴으로 이어진 후, 이 모델의 성능을 보장하기 위해 이 검증 데이터의 나머지와 함께 제2 검증이 실행될 수 있다. 이 모델이 검증 데이터에 관한 기대치를 충족한다면, 이 모델은 데이터 과적합이 아니다. 적어도 하나의 실시예에서, 테스트 세트 또는 제외 세트가 테스트 파라미터들을 위해 이용될 수 있다. 적어도 하나의 실시예에서, 제2 검증 또는 테스트 단계를 이용하는 것은 과적합을 방지할 적절한 모델 파라미터들을 선택하는데 도움이 된다. 그러나, 검증을 위해 훈련 프로세스에서 더 많은 데이터를 제외하면, 훈련에 이용할 수 있는 데이터가 적어진다. 훈련에 이용할 수 있는 데이터가 충분하지 않을 수 있으므로 이것은 더 작은 데이터 세트에서는 문제가 될 수 있다. 적어도 하나의 실시예에서, 이러한 상황에서의 한 접근법은 여기 다른 곳에서 논의된 바와 같이 교차 검증을 수행하는 것이다.
적어도 하나의 실시예에서, 주어진 모델의 예측 정확도를 검토하고 평가하는데 이용될 수 있는 많은 메트릭 또는 직관이 있다. 적어도 하나의 실시예에서, 평가 결과는, 모델의 전체 성공에 관해 보고하는 예측 정확도 메트릭뿐만 아니라, 예측 정확도 메트릭을 넘어선 모델의 정확도 탐색을 돕기 위한 시각화를 포함한다. 결과는 또한, 2진 분류에 대한 것 등의, 점수 임계값 설정의 영향을 검토하는 능력을 제공할 수 있고, 평가의 유효성을 체크하기 위한 기준에 대한 경고들을 생성할 수 있다. 메트릭 및 시각화의 선택은 평가되는 모델의 유형에 적어도 부분적으로 의존할 수 있다.
적어도 하나의 실시예에서, 일단 훈련되고 만족스럽게 평가되고 되면, 훈련된 머신 학습 모델은 머신 학습 애플리케이션을 구축하거나 지원하는데 이용될 수 있다. 한 실시예에서 머신 학습 애플리케이션을 구축하는 것은 일련의 단계들을 포함하는 반복적인 프로세스이다. 적어도 하나의 실시예에서, 핵심 머신 학습 문제(들)는, 관찰된 것과 모델이 예측하고자 하는 답변의 관점에서 프레임화될 수 있다. 적어도 하나의 실시예에서, 그 다음, 데이터가 수집되고, 정리되고, 머신 학습 모델 훈련 알고리즘들에 의한 소비에 적합하게 데이터를 만들도록 준비될 수 있다. 이 데이터는, 데이터의 품질을 검증하는 온전성 체크들을 실행하고 데이터를 이해하기 위해 시각화되고 분석될 수 있다. 원시 데이터(예를 들어, 입력 변수들) 및 응답 데이터(예를 들어, 타깃)는 고도로 예측적인 모델을 훈련시키는데 이용될 수 있는 방식으로 표현되어 있지 않을 수도 있다. 따라서, 원시 변수들로부터 더 예측적인 입력 표현들 또는 피처들을 구성하는 것이 바람직할 수 있다. 결과 피처들은 학습 알고리즘에 공급되어 모델들을 구축하고 모델 구축으로부터 제외된 데이터에 관한 모델들의 품질을 평가할 수 있다. 그 다음, 모델을 이용하여 새로운 데이터 인스턴스들에 대한 타깃 답변의 예측들을 생성할 수 있다.
적어도 하나의 실시예에서, 도 7의 시스템(700)에서, 평가 후 훈련된 모델(710)은, 검증 데이터를 처리하기 위해 훈련된 모델을 이용할 수 있는 분류기(714)에 제공되거나 분류기가 이용할 수 있게 한다. 적어도 하나의 실시예에서, 이것은, 예를 들어, 이들 이미지들에 표현된 것에 대한 정보를 찾는 질의 이미지들 등의, 분류되지 않은 사용자들 또는 제3자들로부터 수신된 데이터를 포함할 수 있다. 적어도 하나의 실시예에서, 검증 데이터는 훈련된 모델을 이용하여 분류기에 의해 처리될 수 있고, (분류들 또는 예측들 등의) 생성된 결과들(716)은 각각의 소스로 다시 전송되거나 기타의 방식으로 처리 또는 저장될 수 있다. 적어도 하나의 실시예에서, 및 이러한 이용이 허용되는 경우, 이들 지금-분류된 데이터 인스턴스들은, 훈련 관리자에 의한 훈련된 모델(708)의 추가 훈련에 이용될 수 있는 훈련 데이터 저장소에 저장될 수 있다. 적어도 하나의 실시예에서, 모델은 새로운 데이터가 이용가능함에 따라 지속적으로 훈련될 것이지만, 적어도 하나의 실시예에서 이들 모델들은, 데이터 세트의 크기 또는 모델의 복잡성 등의 인자들에 따라, 하루에 한번 또는 1주일에 한번 등의, 주기적으로 재훈련될 것이다.
적어도 하나의 실시예에서, 분류기(714)는 훈련된 모델을 이용하여 검증 데이터(712)를 처리하기 위한 적절한 하드웨어 및 소프트웨어를 포함할 수 있다. 적어도 하나의 실시예에서, 분류기는, 데이터를 처리할 수 있는 하나 이상의 그래픽 처리 유닛(GPU)을 각각 갖는 하나 이상의 컴퓨터 서버를 포함할 것이다. 적어도 하나의 실시예에서, GPU들의 구성 및 설계는, CPU들 또는 다른 이러한 컴포넌트들보다 머신 학습 데이터 처리에서 이들을 이용하기에 더 바람직하게 만들 수 있다. 적어도 하나의 실시예에서, 적어도 하나의 실시예에서의 훈련된 모델은 GPU 메모리에 로딩될 수 있고, 수신된 데이터 인스턴스는 처리를 위해 GPU에 제공될 수 있다. GPU들은 CPU들보다 훨씬 더 많은 수의 코어를 가질 수 있고, GPU 코어들은 또한 훨씬 덜 복잡할 수 있다. 적어도 하나의 실시예에서, 주어진 GPU는 상이한 하드웨어 스레드들을 통해 수천개의 데이터 인스턴스를 동시에 처리할 수 있을 것이다. 적어도 하나의 실시예에서, GPU는 또한, 부동 소수점 처리량을 최대화하도록 구성될 수 있고, 이것은 대규모 데이터 세트에 대해 상당한 추가적인 처리 이점을 제공할 수 있다.
적어도 하나의 실시예에서, GPU들, 가속기들, 및 기타의 이러한 하드웨어를 이용하여 모델의 훈련 또는 이러한 모델을 이용한 데이터의 분류 등의 태스크들을 가속하는 경우에도, 이러한 태스크들은, 여전히 상당한 시간, 자원 할당 및 비용을 요구할 수 있다. 적어도 하나의 실시예에서, 머신 학습 모델이 700회의 패스를 이용하여 훈련될 예정이고, 데이터 세트가 훈련에 이용될 1,000,000개의 데이터 인스턴스를 포함하는 경우, 백만개 인스턴스 모두가 각각의 패스에 대해 처리될 필요가 있을 것이다. 아키텍쳐의 상이한 부분들은 상이한 유형들의 디바이스에 의해서도 역시 지원될 수 있다. 적어도 하나의 실시예에서, 훈련은, 서비스로서 제공될 수 있는 논리적으로 중앙집중 위치에 있는 한 세트의 서버들을 이용하여 수행될 수 있는 반면, 원시 데이터의 분류는 이러한 서비스에 의해 또는 클라이언트 디바이스 상에서 수행될 수 있다. 이들 디바이스들은 또한, 동일한 객체 또는 복수의 엔티티에 의해 소유되거나, 운용되거나, 제어될 수 있다.
적어도 하나의 실시예에서, 도 8에 나타낸 예시적인 신경망(800)은, 적어도 하나의 실시예에서, 훈련되거나 기타의 방식으로 이용될 수 있다. 적어도 하나의 실시예에서, 통계적 모델은, 입력 계층(802), 출력 계층(806), 및 내부 계층들과 노드들이 전형적으로 신경망에서 보이지 않거나 액세스할 수 없기 때문에 종종 "은닉된" 계층들이라고 지칭되는 중간 노드들의 복수의 계층(804)을 포함하는, 노드들의 복수의 계층을 포함하는 인공 신경망(ANN)이다. 적어도 하나의 실시예에서, 설명의 목적을 위해 단지 소수의 중간 계층들만이 예시되지만, 이용될 수 있는 중간 계층의 수에는 제한이 없고, 계층에 대한 임의의 제한은 종종 모델을 이용하여 처리하는데 요구되는 자원 또는 시간 인자일 것이라는 점을 이해해야 한다. 적어도 하나의 실시예에서, 노드 및 계층들의 다른 개수나 선택을 포함할 수 있는, 추가적인 유형들의 모델들, 네트워크들, 알고리즘들, 또는 프로세스들도 역시 이용될 수 있다. 적어도 하나의 실시예에서, 검증 데이터는 네트워크의 계층들에 의해 처리되어 한 세트의 추론 또는 추론 점수들을 생성할 수 있고, 그 다음, 이것은 손실 함수(808)에 공급될 수 있다.
적어도 하나의 실시예에서, 주어진 계층의 모든 노드는 인접한 계층의 모든 노드에 상호접속된다. 적어도 하나의 실시예에서, 중간 계층의 노드들 각각은 2개의 인접한 계층의 노드들에 접속될 것이다. 적어도 하나의 실시예에서, 노드는 또한 일부 모델에서 뉴런들 또는 접속된 유닛들이라고 지칭되고, 노드들 사이의 접속은 엣지들이라고 지칭된다. 각각의 노드는, 명시된 기능을 이용하는 것 등에 의해, 수신된 입력들에 대한 기능을 수행할 수 있다. 적어도 하나의 실시예에서, 노드들 및 엣지들은 훈련 동안 상이한 가중치들을 획득할 수 있고, 노드들의 개개의 계층들은 수신된 입력에 관해 특정한 유형들의 변환들을 수행할 수 있으며, 여기서 이들 변환들은 훈련 동안 학습되거나 조정될 수도 있다. 적어도 하나의 실시예에서, 학습은, 훈련 데이터 세트에 포함된 정보의 유형에 적어도 부분적으로 의존할 수 있는 지도 또는 비지도 학습일 수 있다. 적어도 하나의 실시예에서, 다수의 콘볼루션 계층 및 한 세트의 풀링 계층들을 포함하고 이미지 인식 등의 응용들에 유익한 것으로 입증된 콘볼루션 신경망(CNN)을 포함할 수 있는, 다양한 유형의 신경망이 이용될 수 있다. CNN은 결정될 파라미터의 수가 비교적 적기 때문에 다른 네트워크들보다 훈련시키기가 더 쉬울 수 있다.
적어도 하나의 실시예에서, 이러한 복잡한 머신 학습 모델은 다양한 튜닝 파라미터를 이용하여 훈련될 수 있다. 파라미터 선택, 모델 핏팅, 및 모델 평가는, 종종 하이퍼파라미터 최적화라고 지칭되는 모델 튜닝 프로세스의 일부이다. 이러한 튜닝은 적어도 하나의 실시예에서 기저 모델 또는 데이터를 자체검사하는 것을 포함할 수 있다. 훈련 또는 프로덕션 설정에서, 본 명세서 다른 곳에서 논의된 하이퍼파라미터들의 과적합을 피하기 위해 강력한 워크플로가 중요할 수 있다. 교차-검증 및 훈련 데이터 세트에 Gaussian 노이즈를 추가하는 것은, 임의의 하나의 데이터 세트에 대한 과적합을 피하는데 유용할 수 있는 기술들이다. 하이퍼파라미터 최적화를 위해 훈련 및 검증 세트들을 고정된 상태로 유지하는 것이 바람직할 수 있다. 적어도 하나의 실시예에서, 하이퍼파라미터는, (단어들을 벡터들로 번역하는 것 등의) 데이터 전처리, CNN 아키텍쳐 정의(예를 들어, 필터 크기들, 필터 수), 확률적 경사 하강(SGD) 파라미터들(예를 들어, 학습률), 정규화 또는 개선(예를 들어, 탈락(dropout) 확률)을 포함할 수 있는, 소정의 범주들에서 튜닝될 수 있다.
적어도 하나의 실시예에서, 데이터세트의 인스턴스들은 전처리 동안 소정 크기의 더 낮은 차원의 공간에 임베딩될 수 있다. 적어도 하나의 실시예에서, 이 공간의 크기는 튜닝될 파라미터이다. 적어도 하나의 실시예에서, CNN의 아키텍쳐는 많은 튜닝가능한 파라미터를 포함한다. 필터 크기들을 위한 파라미터는 분석될 인스턴스의 크기에 대응하는 정보의 해석을 나타낼 수 있다. 계산 언어학에서, 이것은 n-gram 크기라고 알려져 있다. 한 예시적인 CNN은 잠재적으로 상이한 n-gram 크기들을 나타내는 3개의 상이한 필터 크기를 이용한다. 필터 크기당 필터의 수는 필터의 깊이에 대응할 수 있다. 각각의 필터는, 텍스트 데이터에 대한 문장 구조 등의, 인스턴스의 구조와는 상이한 무언가를 학습하려고 시도한다. 콘볼루션 계층에서, 활성화 함수는 정류된 선형 유닛일 수 있고 풀링 유형은 최대 풀링으로 설정될 수 있다. 그 다음, 결과들은 단일의 차원 벡터로 연결될 수 있고, 마지막 계층은 2차원 출력에 완전히 접속된다. 이것은 최적화 함수를 적용할 수 있는 2진 분류에 대응한다. 하나의 이러한 기능은, 경사 하강의 RMS(Root Mean Square) 전파 방법의 구현이고, 여기서 예시적인 하이퍼파라미터들은, 학습률, 일괄 크기, 최대 기울기 법선, 및 에포크(epoch)들을 포함할 수 있다. 신경망들에서, 정규화는 매우 중요한 고려사항일 수 있다. 적어도 하나의 실시예에서, 입력 데이터는 비교적 드물(sparse) 수 있다. 이러한 상황에서의 주요 하이퍼파라미터는 끝에서 2번째 계층에서의 탈락일 수 있고, 이것은 각각의 훈련 사이클에서 '격발(fire)'되지 않는 노드들의 비율을 나타낸다. 예시적인 훈련 프로세스는 이전 구성들의 성능에 대한 피드백에 기초하여 상이한 하이퍼파라미터 구성들을 제시할 수 있다. 이 모델은, 제안된 구성으로 훈련되고, 지정된 검증 세트에서 평가되며, 성능 보고될 수 있다. 이 프로세스는, 예를 들어, 탐색(상이한 구성들에 대해 더 많이 학습)과 이용(이전 지식을 활용하여 더 양호한 결과들을 달성)을 절충하기 위해 반복될 수 있다.
훈련 CNN들은 병렬화될 수 있고 GPU-인에이블된 컴퓨팅 자원들이 이용될 수 있으므로, 상이한 시나리오들에 대해 여러 최적화 전략들이 시도될 수 있다. 복잡한 시나리오는, 모델 아키텍쳐와 전처리 및 확률적 경사 하강 파라미터들의 튜닝을 허용한다. 이것은 모델 구성 공간을 확장한다. 기본 시나리오에서, 전처리 및 확률적 경사 하강 파라미터들만 튜닝된다. 기본 시나리오보다 복잡한 시나리오에는 더 많은 수의 구성 파라미터가 있을 수 있다. 공동 공간(joint space)에서의 튜닝은 선형적 또는 지수적 단계 수, 모델들에 대한 최적화 루프를 통한 반복을 이용하여 수행될 수 있다. 이러한 튜닝 프로세스의 비용은, 어떠한 상당한 성능 손실 없이, 랜덤 검색 및 그리드 검색 등의 튜닝 프로세스들의 비용보다 훨씬 낮을 수 있다.
적어도 하나의 실시예에서, 역전파(backpropagation)는 신경망에 대한 가중치들을 결정하는데 이용되는 기울기를 계산하는데 이용될 수 있다. 역전파는 미분의 한 형태이며, 위에서 논의한 바와 같이 다양한 노드 또는 뉴런에 적용되는 가중치들을 조정하기 위해 경사 하강 최적화 알고리즘에서 이용될 수 있다. 가중치들은 관련 손실 함수의 기울기를 이용하여 결정될 수 있다. 역전파는 통계적 모델에 의해 생성된 출력에 관한 손실 함수의 도함수를 이용할 수 있다. 언급된 바와 같이, 다양한 노드는 각각의 노드의 출력을 정의하는 연관된 활성화 함수들을 가질 수 있다. 데이터 변환을 위해 다양한 지원 벡터 머신(SVM; support vector machine)에 의해 이용될 수 있는 방사형 베이시스 함수(RBF; radial basis function)들 및 시그모이드들을 포함할 수 있는 다양한 활성화 함수를 적절하게 이용할 수 있다. 노드의 중간 계층의 활성화 함수는 여기서 내부 곱 커널이라고 지칭된다. 이들 함수는, 예를 들어, 항등 함수들, 계단 함수들, 시그모이드 함수들, 램프(ramp) 함수들 등을 포함할 수 있다. 활성화 함수들은 또한, 선형 또는 비선형일 수 있다.
적어도 하나의 실시예에서, 훈련되지 않은 신경망은 훈련 데이터세트를 이용하여 훈련된다. 적어도 하나의 실시예에서, 훈련 프레임워크는, PyTorch 프레임워크, Tensorflow, Boost, Caffe, Microsoft Cognitive Toolkit/CNTK, MXNet, Chainer, Keras, Deeplearning4j, 또는 기타의 훈련 프레임워크이다. 적어도 하나의 실시예에서 훈련 프레임워크는 훈련되지 않은 신경망을 훈련시키고 훈련된 신경망을 생성하기 위해 여기서 설명된 처리 자원들을 이용하여 훈련될 수 있게 한다. 적어도 하나의 실시예에서, 가중치들은 무작위로 선택되거나 심층 신뢰망(deep belief network)을 이용한 사전 훈련에 의해 선택될 수 있다. 적어도 하나의 실시예에서, 훈련은 지도 방식, 부분 지도 방식, 또는 비지도 방식으로 수행될 수 있다.
적어도 하나의 실시예에서, 훈련되지 않은 신경망은 지도 학습을 이용하여 훈련되고, 여기서, 훈련 데이터세트는, 입력에 대한 원하는 출력과 쌍을 이루는 입력을 포함하거나, 훈련 데이터세트는 알려진 출력을 갖는 입력을 포함하고, 신경망의 출력은 수동으로 등급화된다. 적어도 하나의 실시예에서, 훈련되지 않은 신경망은 지도 방식으로 훈련되고, 훈련 데이터세트로부터의 입력들을 처리하고 결과적인 출력들을 한 세트의 예상된 또는 원하는 출력들과 비교한다. 적어도 하나의 실시예에서, 에러들은, 훈련되지 않은 신경망을 통해 다시 전파된다. 적어도 하나의 실시예에서, 훈련 프레임워크는 훈련되지 않은 신경망을 제어하는 가중치들을 조정한다. 적어도 하나의 실시예에서, 훈련 프레임워크는, 훈련되지 않은 신경망이, 새로운 데이터 등의 알려진 입력 데이터에 기초하여 결과 등에서 정답들을 생성하기에 적합한 훈련된 신경망 등의 모델을 향해 얼마나 잘 수렴하는지 모니터링하는 도구를 포함한다. 적어도 하나의 실시예에서, 훈련 프레임워크는, 훈련되지 않은 신경망을 반복적으로 훈련시키면서 가중치들을 조정하여 손실 함수 및 확률적 경사 하강 등의 조정 알고리즘을 이용하여 훈련되지 않은 신경망의 출력을 개선한다. 적어도 하나의 실시예에서, 훈련 프레임워크는, 훈련되지 않은 신경망이 원하는 정확도를 달성할 때까지 훈련되지 않은 신경망을 훈련시킨다. 적어도 하나의 실시예에서, 훈련된 신경망은, 그 다음, 임의의 수의 머신 학습 연산들을 구현하도록 배치될 수 있다.
적어도 하나의 실시예에서, 훈련되지 않은 신경망은 비지도 학습을 이용하여 훈련되고, 여기서, 훈련되지 않은 신경망은 라벨링되지 않은 데이터를 이용하여 자체 훈련을 시도한다. 적어도 하나의 실시예에서, 비지도 학습 훈련 데이터세트는, 어떠한 연관된 출력 데이터 또는 "실측자료" 데이터도 없는 입력 데이터를 포함할 것이다. 적어도 하나의 실시예에서, 훈련되지 않은 신경망은 훈련 데이터세트 내의 그룹들을 학습할 수 있고 개개의 입력들이 훈련되지 않은 데이터세트와 어떻게 관련되는지를 결정할 수 있다. 적어도 하나의 실시예에서, 비지도 훈련은 새로운 데이터의 차원을 감소시키는데 유용한 연산들을 수행할 수 있는 훈련된 신경망의 한 유형인 자가-조직화 맵을 생성하는데 이용될 수 있다. 적어도 하나의 실시예에서, 비지도 훈련은 또한, 새로운 데이터세트의 정상적인 패턴들로부터 벗어나는 새로운 데이터세트 내의 데이터 포인트들의 식별을 허용하는 이상 검출을 수행하는데 이용될 수 있다.
적어도 하나의 실시예에서, 훈련 데이터세트에서 라벨링된 데이터와 라벨링되지 않은 데이터의 혼합을 포함하는 기술인 반-지도 학습(semi-supervised learning)이 이용될 수 있다. 적어도 하나의 실시예에서, 훈련 프레임워크는, 전이 학습 기술(transferred learning technique) 등을 통해 증분적 학습(incremental learning)을 수행하는데 이용될 수 있다. 적어도 하나의 실시예에서, 증분적 학습은 훈련된 신경망이 초기 훈련 동안 네트워크 내에 주입된 지식을 잊지 않고 새로운 데이터에 적응할 수 있게 한다.
추론 및 훈련 로직
도 9a는 하나 이상의 실시예와 연관된 추론 및/또는 훈련 연산들을 수행하는데 이용되는 추론 및/또는 훈련 로직(915)을 나타낸다. 추론 및/또는 훈련 로직(915)에 관한 상세사항은 도 9a 및/또는 도 9b와 관련하여 아래에 제공된다.
적어도 하나의 실시예에서, 추론 및/또는 훈련 로직(915)은, 제한없이, 하나 이상의 실시예의 양태들에서 추론을 위해 훈련 및/또는 이용되는 신경망의 뉴런들 또는 계층들을 구성하기 위해 순방향 및/또는 출력 가중치 및/또는 입력/출력 데이터, 및/또는 기타의 파라미터들을 저장하기 위한 코드 및/또는 데이터 스토리지(901)를 포함할 수 있다. 적어도 하나의 실시예에서, 훈련 로직(915)은, 정수 및/또는 부동 소수점 유닛들(집합적으로 산술 로직 유닛들(ALUs))을 포함한 로직을 구성하기 위해 가중치 및/또는 기타의 파라미터 정보가 로딩될 타이밍 및/또는 순서를 제어하기 위해 그래프 코드 또는 다른 소프트웨어를 저장하는 코드 및/또는 데이터 스토리지(901)를 포함하거나 이에 결합될 수 있다. 적어도 하나의 실시예에서, 그래프 코드 등의 코드는, 이 코드가 대응하는 신경망의 아키텍쳐에 기초하여, 프로세서 ALU들 내에 가중치 또는 기타의 파라미터 정보를 로딩한다. 적어도 하나의 실시예에서, 코드 및/또는 데이터 스토리지(901)는 하나 이상의 실시예의 양태들을 이용하여 훈련 및/또는 추론하는 동안에 입력/출력 데이터 및/또는 가중치 파라미터들의 순방향 전파 동안 하나 이상의 실시예와 연계하여 훈련되거나 이용되는 신경망의 각각의 계층의 가중치 파라미터들 및/또는 입력/출력 데이터를 저장한다. 적어도 하나의 실시예에서, 코드 및/또는 데이터 스토리지(901)의 임의의 부분은, 프로세서의 L1, L2, 또는 L3 캐시 또는 시스템 메모리를 포함한, 다른 온칩 또는 오프칩 데이터 스토리지에 포함될 수 있다.
적어도 하나의 실시예에서, 코드 및/또는 데이터 스토리지(901)의 임의의 부분은 하나 이상의 프로세서 또는 기타의 하드웨어 로직 디바이스들 또는 회로들의 내부 또는 외부에 있을 수 있다. 적어도 하나의 실시예에서, 코드 및/또는 코드 및/또는 데이터 스토리지(901)는, 캐시 메모리, 동적 랜덤 어드레스블 메모리("DRAM"), 정적 랜덤 어드레스블 메모리("SRAM"), 비휘발성 메모리(예를 들어, 플래시 메모리) 또는 기타의 스토리지일 수 있다. 적어도 하나의 실시예에서, 코드 및/또는 코드 및/또는 데이터 스토리지 디바이스(901)가 프로세서의 내부 또는 외부인지, 예를 들어, 즉, DRAM, SRAM, 플래시 또는 어떤 다른 스토리지 유형으로 구성되는지의 선택은, 이용가능한 스토리지 온칩 대 오프칩, 수행되는 훈련 및/또는 추론 기능들의 레이턴시 요건들, 신경망의 추론 및/또는 훈련에 이용되는 일괄 데이터 크기, 또는 이들 요인의 일부 조합에 의존할 수 있다.
적어도 하나의 실시예에서, 추론 및/또는 훈련 로직(915)은, 제한없이, 하나 이상의 실시예의 양태들에서 추론을 위해 훈련 및/또는 이용되는 신경망의 뉴런들 또는 계층들에 대응하는 역방향 및/또는 출력 가중치 및/또는 입력/출력 데이터를 저장하는 코드 및/또는 데이터 스토리지(905)를 포함할 수 있다. 적어도 하나의 실시예에서, 코드 및/또는 데이터 스토리지(905)는 하나 이상의 실시예의 양태들을 이용하여 훈련 및/또는 추론하는 동안에 입력/출력 데이터 및/또는 가중치 파라미터들의 역방향 전파 동안 하나 이상의 실시예와 연계하여 훈련되거나 이용되는 신경망의 각각의 계층의 가중치 파라미터들 및/또는 입력/출력 데이터를 저장한다. 적어도 하나의 실시예에서, 훈련 로직(915)은, 정수 및/또는 부동 소수점 유닛들(집합적으로 산술 로직 유닛들(ALUs))을 포함한 로직을 구성하기 위해 가중치 및/또는 기타의 파라미터 정보가 로딩될 타이밍 및/또는 순서를 제어하기 위해 그래프 코드 또는 다른 소프트웨어를 저장하는 코드 및/또는 데이터 스토리지(905)를 포함하거나 이에 결합될 수 있다. 적어도 하나의 실시예에서, 그래프 코드 등의 코드는, 이 코드가 대응하는 신경망의 아키텍쳐에 기초하여, 프로세서 ALU들 내에 가중치 또는 기타의 파라미터 정보를 로딩한다. 적어도 하나의 실시예에서, 코드 및/또는 데이터 스토리지(905)의 임의의 부분은, 프로세서의 L1, L2, 또는 L3 캐시 또는 시스템 메모리를 포함한, 다른 온칩 또는 오프칩 데이터 스토리지에 포함될 수 있다. 적어도 하나의 실시예에서, 코드 및/또는 데이터 스토리지(905)의 임의의 부분은 하나 이상의 프로세서 또는 기타의 하드웨어 로직 디바이스들 또는 회로들의 내부 또는 외부에 있을 수 있다. 적어도 하나의 실시예에서, 코드 및/또는 데이터 스토리지(905)는, 캐시 메모리, DRAM, SRAM, 비휘발성 메모리(예를 들어, 플래시 메모리), 또는 기타의 스토리지일 수 있다. 적어도 하나의 실시예에서, 코드 및/또는 데이터 스토리지 디바이스(905)가 프로세서의 내부 또는 외부인지, 예를 들어, 즉, DRAM, SRAM, 플래시 또는 어떤 다른 스토리지 유형으로 구성되는지의 선택은, 이용가능한 스토리지 온칩 대 오프칩, 수행되는 훈련 및/또는 추론 기능들의 레이턴시 요건들, 신경망의 추론 및/또는 훈련에 이용되는 일괄 데이터 크기, 또는 이들 요인의 일부 조합에 의존할 수 있다.
적어도 하나의 실시예에서, 코드 및/또는 데이터 스토리지(901)와 코드 및/또는 데이터 스토리지(905)는 별개의 저장 구조물일 수 있다. 적어도 하나의 실시예에서, 코드 및/또는 데이터 스토리지(901)와 코드 및/또는 데이터 스토리지(905)는 동일한 저장 구조물일 수 있다. 적어도 하나의 실시예에서, 코드 및/또는 데이터 스토리지(901)와 코드 및/또는 데이터 스토리지(905)는 부분적으로는 동일한 저장 구조물이고 부분적으로 별개의 저장 구조물일 수 있다. 적어도 하나의 실시예에서, 코드 및/또는 데이터 스토리지(901)와 코드 및/또는 데이터 스토리지(905)의 임의의 부분은, 프로세서의 L1, L2, 또는 L3 캐시 또는 시스템 메모리를 포함한, 다른 온칩 또는 오프칩 데이터 스토리지에 포함될 수 있다.
적어도 하나의 실시예에서, 추론 및/또는 훈련 로직(915)은, 제한없이, 훈련 및/또는 추론 코드(예를 들어, 그래프 코드)에 적어도 부분적으로 기초하거나 이에 의해 표시되는 논리적 및/또는 수학적 연산들을 수행하고, 그 결과는, 코드 및/또는 데이터 스토리지(901) 및/또는 코드 및/또는 데이터 스토리지(905)에 저장된 입력/출력 및/또는 가중치 파라미터 데이터의 함수인 활성화 스토리지(920)에 저장되는 활성화들(예를 들어, 신경망 내의 계층들 또는 뉴런들의 출력 값들)을 생성할 수 있는, 정수 및/또는 부동 소수점 유닛들을 포함한 하나 이상의 산술 로직 유닛(들)("ALU(들)")(910)을 포함할 수 있다. 적어도 하나의 실시예에서, 활성화 스토리지(920)에 저장된 활성화들은 명령어들 또는 기타의 코드를 수행하는 것에 응답하여 ALU(들)(910)에 의해 수행되는 선형 대수 및/또는 행렬 기반의 수학에 따라 생성되며, 여기서, 코드 및/또는 데이터 스토리지(905) 및/또는 코드 및/또는 데이터 스토리지(901)에 저장된 가중치 값들은, 바이어스 값들, 기울기 정보, 모멘텀 값들, 또는 기타의 파라미터들 또는 하이퍼파라미터들 등의 다른 값들과 함께 피연산자로 이용되며, 이들 중 일부 또는 전부는 코드 및/또는 데이터 스토리지(905) 또는 코드 및/또는 데이터 스토리지(901) 또는 온칩 또는 오프칩의 또 다른 스토리지에 저장될 수 있다.
적어도 하나의 실시예에서, ALU(들)(910)는 하나 이상의 프로세서 또는 기타의 하드웨어 로직 디바이스들 또는 회로들 내에 포함되는 반면, 또 다른 실시예에서, ALU(들)(910)는 이들을 이용하는 프로세서 또는 기타의 하드웨어 로직 디바이스 또는 회로(예를 들어, 코프로세서)의 외부에 있을 수 있다. 적어도 하나의 실시예에서, ALU들(910)은 프로세서의 실행 유닛들 내에 또는 그렇지 않으면 동일한 프로세서 내의 또는 상이한 유형들의 상이한 프로세서들(예를 들어, 중앙 처리 유닛들, 그래픽 처리 유닛들, 고정 기능 유닛들 등)에 분산되어 있는 프로세서의 실행 유닛들에 의해 액세스가능한 ALU들의 뱅크 내에 포함될 수 있다. 적어도 하나의 실시예에서, 코드 및/또는 데이터 스토리지(901), 코드 및/또는 데이터 스토리지(905), 및 활성화 스토리지(920)는, 동일한 프로세서 또는 기타의 하드웨어 로직 디바이스이나 회로 상에 있을 수 있는 반면, 또 다른 실시예에서 이들은 상이한 프로세서들 또는 기타의 하드웨어 로직 디바이스들이나 회로들, 또는 동일하거나 상이한 프로세서들 또는 기타의 하드웨어 로직 디바이스들이나 회로들의 일부 조합에 있을 수 있다. 적어도 하나의 실시예에서, 활성화 스토리지(920)의 임의의 부분은, 프로세서의 L1, L2, 또는 L3 캐시 또는 시스템 메모리를 포함한, 다른 온칩 또는 오프칩 데이터 스토리지에 포함될 수 있다. 또한, 추론 및/또는 훈련 코드는, 프로세서 또는 기타의 하드웨어 로직 또는 회로가 액세스할 수 있고 프로세서의 인출, 디코딩, 스케쥴링, 실행, 폐기 및/또는 기타 논리적 회로를 이용하여 인출 및/또는 처리될 수 있는 다른 코드와 함께 저장될 수 있다.
적어도 하나의 실시예에서, 활성화 스토리지(920)는, 캐시 메모리, DRAM, SRAM, 비휘발성 메모리(예를 들어, 플래시 메모리), 또는 기타의 스토리지일 수 있다. 적어도 하나의 실시예에서, 활성화 스토리지(920)는 완전히 또는 부분적으로 하나 이상의 프로세서 또는 기타의 로직 회로 내부에 또는 외부에 있을 수 있다. 적어도 하나의 실시예에서, 활성화 스토리지(920)가 프로세서의 내부 또는 외부인지, 예를 들어, 즉, DRAM, SRAM, 플래시 또는 어떤 다른 스토리지 유형으로 구성되는지의 선택은, 이용가능한 스토리지 온칩 대 오프칩, 수행되는 훈련 및/또는 추론 기능들의 레이턴시 요건들, 신경망의 추론 및/또는 훈련에 이용되는 데이터 묶음 크기, 또는 이들 요인의 일부 조합에 의존할 수 있다. 적어도 하나의 실시예에서, 도 9a에 나타낸 추론 및/또는 훈련 로직(915)은, Google의 Tensorflow® Processing Unit, Graphcore™의 추론 처리 유닛(IPU), Intel Corp의 Nervana® (예를 들어, “Lake Crest”) 프로세서 등의, 주문형 집적 회로("ASIC")와 연계하여 이용될 수 있다. 적어도 하나의 실시예에서, 도 9a에 나타낸 추론 및/또는 훈련 로직(915)은, 중앙 처리 유닛("CPU") 하드웨어, 그래픽 처리 유닛("GPU") 하드웨어, 또는 필드 프로그래머블 게이트 어레이("FPGA") 등의 기타의 하드웨어와 연계하여 이용될 수 있다.
도 9b는 적어도 하나 이상의 실시예에 따른 추론 및/또는 훈련 로직(915)을 나타낸다. 적어도 하나의 실시예에서, 추론 및/또는 훈련 로직(915)은, 제한없이, 신경망 내의 뉴런들의 하나 이상의 계층에 대응하는 가중치 값들 또는 기타의 정보와 연계하여 계산 자원이 전용되거나 기타의 방식으로 배타적으로 이용되는 하드웨어 로직을 포함할 수 있다. 적어도 하나의 실시예에서, 도 9b에 나타낸 추론 및/또는 훈련 로직(915)은, Google의 Tensorflow® Processing Unit, Graphcore™의 추론 처리 유닛(IPU), Intel Corp의 Nervana® (예를 들어, “Lake Crest”) 프로세서 등의, 주문형 집적 회로("ASIC")와 연계하여 이용될 수 있다. 적어도 하나의 실시예에서, 도 9b에 나타낸 추론 및/또는 훈련 로직(915) 중앙 처리 유닛(CPU) 하드웨어, 그래픽 처리 유닛(GPU) 하드웨어, 또는 필드 프로그래머블 게이트 어레이(FPGA") 등의 기타의 하드웨어와 연계하여 이용될 수 있다. 적어도 하나의 실시예에서, 추론 및/또는 훈련 로직(915)은, 제한없이, 코드(예를 들어, 그래프 코드), 가중치 값들, 및/또는 바이어스 값들, 기울기 정보, 모멘텀 값들, 및/또는 기타의 파라미터 또는 하이퍼파라미터 정보를 포함하는 기타의 정보를 저장하는데 이용될 수 있는, 코드 및/또는 데이터 스토리지(901)와, 코드 및/또는 데이터 스토리지(905)를 포함한다. 도 9b에 도시된 적어도 하나의 실시예에서, 코드 및/또는 데이터 스토리지(901)와 코드 및/또는 데이터 스토리지(905) 각각은, 각각, 계산 하드웨어(902) 및 계산 하드웨어(906) 등의 전용 계산 자원과 연관된다. 적어도 하나의 실시예에서, 계산 하드웨어(902) 및 계산 하드웨어(906) 각각은 하나 이상의 ALU를 포함하고, 하나 이상의 ALU는, 코드 및/또는 데이터 스토리지(901)와 코드 및/또는 데이터 스토리지(905)에 저장된 정보에 관해서만 선형 대수 함수들 등의 수학적 함수들을 수행하고, 각각의 결과는 활성화 스토리지(920)에 저장된다.
적어도 하나의 실시예에서, 코드 및/또는 데이터 스토리지(901 및 905) 각각 및 대응하는 계산 하드웨어(902 및 906)는, 각각, 신경망의 상이한 계층들에 대응하되, 코드 및/또는 데이터 스토리지(901) 및 계산 하드웨어(902)로 이루어진 하나의 "스토리지/계산 쌍(901/902)"으로부터 결과적인 활성화가, 코드 및/또는 데이터 스토리지(905) 및 계산 하드웨어(906)로 이루어진 "스토리지/계산 쌍(905/906)"에 대한 입력으로서 제공되도록 함으로써, 신경망의 개념적 구성을 미러링한다. 적어도 하나의 실시예에서, 스토리지/계산 쌍들(901/902 및 905/906) 각각은 하나보다 많은 신경망 계층에 대응할 수 있다. 적어도 하나의 실시예에서, 스토리지/계산 쌍들(901/902 및 905/906)에 후속하거나 이와 병렬인 추가적인 스토리지/계산 쌍(미도시)이 추론 및/또는 훈련 로직(915)에 포함될 수 있다.
데이터 센터
도 10은 적어도 하나의 실시예가 이용될 수 있는 예시적인 데이터 센터(1000)를 나타낸다. 적어도 하나의 실시예에서, 데이터 센터(1000)는, 데이터 센터 인프라스트럭처 계층(1010), 프레임워크 계층(1020), 소프트웨어 계층(1030), 및 애플리케이션 계층(1040)을 포함한다.
적어도 하나의 실시예에서, 도 10에 도시된 바와 같이, 데이터 센터 인프라스트럭처 계층(1010)은, 자원 조율기(1012), 그룹화된 컴퓨팅 자원들(1014), 및 노드 컴퓨팅 자원들("노드 C.R.들")(1016(1)-1016(N))을 포함할 수 있고, 여기서, 여기서 "N"은 임의의 양의 정수를 나타낸다. 적어도 하나의 실시예에서, 노드 C.R.들(1016(1)-1016(N))은 임의의 수의 중앙 처리 유닛("CPU") 또는 기타의 프로세서들(가속기들, 필드 프로그래머블 게이트 어레이(FPGA)들, 그래픽 프로세서들 등을 포함), 메모리 디바이스(예를 들어, 동적 판독 전용 메모리), 저장 디바이스들(예를 들어, 솔리드 스테이트 또는 디스크 드라이브들), 네트워크 입력/출력("NW I/O") 디바이스들, 네트워크 스위치들, 가상 머신들("VMs"), 전원 모듈들, 및 냉각 모듈들 등을 포함할 수 있지만, 이것으로 제한되는 것은 아니다. 적어도 하나의 실시예에서, 노드 C.R.들 1016(1)-1016(N) 중 하나 이상의 노드 C.R은 위에서 언급된 컴퓨팅 자원들 중 하나 이상을 갖는 서버일 수 있다.
적어도 하나의 실시예에서, 그룹화된 컴퓨팅 자원들(1014)은, 하나 이상의 랙(미도시) 내에 수용된 노드 C.R.들의 별개의 그룹들, 또는 다양한 지리적 위치(역시 미도시)의 데이터 센터들에 수용된 많은 랙을 포함할 수 있다. 그룹화된 컴퓨팅 자원들(1014) 내의 노드 C.R.들의 별개의 그룹들은 하나 이상의 작업부하를 지원하도록 구성되거나 할당될 수 있는 그룹화된 컴퓨팅, 네트워크, 메모리 또는 저장 자원들을 포함할 수 있다. 적어도 하나의 실시예에서, CPU들 또는 프로세서들을 포함하는 여러 노드 C.R.들은, 하나 이상의 작업부하를 지원하는 컴퓨팅 자원들을 제공하기 위해 하나 이상의 랙 내에 그룹화될 수 있다. 적어도 하나의 실시예에서, 하나 이상의 랙은 또한, 임의의 수의 전원 모듈, 냉각 모듈, 및 네트워크 스위치를 임의의 조합으로 포함할 수 있다.
적어도 하나의 실시예에서, 자원 조율기(1012)는 하나 이상의 노드 C.R.(1016(1)-1016(N)) 및/또는 그룹화된 컴퓨팅 자원들(1014)을 구성하거나 기타의 방식으로 제어할 수 있다. 적어도 하나의 실시예에서, 자원 조율기(1012)는 데이터 센터(1000)를 위한 소프트웨어 설계 인프라스트럭처("SDI") 관리 엔티티를 포함할 수 있다. 적어도 하나의 실시예에서, 자원 조율기는, 하드웨어, 소프트웨어 또는 이들의 일부 조합을 포함할 수 있다.
적어도 하나의 실시예에서, 도 10에 도시된 바와 같이, 프레임워크 계층(1020)은, 잡 스케쥴러(job scheduler, 1022), 구성 관리자(1024), 자원 관리자(1026), 및 분산형 파일 시스템(1028)을 포함한다. 적어도 하나의 실시예에서, 프레임워크 계층(1020)은, 소프트웨어 계층(1030)의 소프트웨어(1032) 및/또는 애플리케이션 계층(1040)의 하나 이상의 애플리케이션(들)(1042)을 지원하는 프레임워크를 포함할 수 있다. 적어도 하나의 실시예에서, 소프트웨어(1032) 또는 애플리케이션(들)(1042)은, 각각, Amazon Web Services, Google Cloud 및 Microsoft Azure에 의해 제공되는 것들 등의, 웹 기반 서비스 소프트웨어 또는 애플리케이션들을 포함할 수 있다. 적어도 하나의 실시예에서, 프레임워크 계층(1020)은, 대규모 데이터 처리(예를 들어, "빅 데이터")를 위한 분산형 파일 시스템(1028)을 이용할 수 있는 Apache SparkTM(이하 "Spark") 등의, 자유 및 오픈 소스 소프트웨어 웹 애플리케이션 프레임워크의 한 유형일 수 있지만 이것으로 제한되는 것은 아니다. 적어도 하나의 실시예에서, 잡 스케쥴러(1022)는 데이터 센터(1000)의 다양한 계층에 의해 지원되는 작업부하들의 스케쥴링을 용이화하는 스파크 드라이버를 포함할 수 있다. 적어도 하나의 실시예에서, 구성 관리자(1024)는, Spark 및 대규모 데이터 처리를 지원하기 위한 분산형 파일 시스템(1028)을 포함하는 소프트웨어 계층(1030) 및 프레임워크 계층(1020) 등의 상이한 계층들을 구성할 수 있다. 적어도 하나의 실시예에서, 자원 관리자(1026)는, 분산형 파일 시스템(1028) 및 잡 스케쥴러(1022)에 맵핑되거나 그 지원을 위해 할당된 클러스터링되거나 그룹화된 컴퓨팅 자원들을 관리할 수 있다. 적어도 하나의 실시예에서, 클러스터링되거나 그룹화된 컴퓨팅 자원들은 데이터 센터 인프라스트럭처 계층(1010)에서 그룹화된 컴퓨팅 자원(1014)을 포함할 수 있다. 적어도 하나의 실시예에서, 자원 관리자(1026)는 이들 맵핑되거나 할당된 컴퓨팅 자원들을 관리하기 위해 자원 조율자(1012)와 조율할 수 있다.
적어도 하나의 실시예에서, 소프트웨어 계층(1030)에 포함된 소프트웨어(1032)는, 프레임워크 계층(1020)의 노드 C.R.들(1016(1)-1016(N)), 그룹화된 컴퓨팅 자원들(1014), 및/또는 분산형 파일 시스템(1028)의 적어도 일부에 의해 이용되는 소프트웨어를 포함할 수 있다. 소프트웨어의 하나 이상의 유형에는, 인터넷 웹 페이지 검색 소프트웨어, 이메일 바이러스 스캔 소프트웨어, 데이터베이스 소프트웨어, 및 스트리밍 비디오 콘텐츠 소프트웨어가 포함될 수 있지만, 이것으로 제한되는 것은 아니다.
적어도 하나의 실시예에서, 애플리케이션 계층(1040)에 포함된 애플리케이션(들)(1042)은, 노드 C.R.들(1016(1)-1016(N)), 그룹화된 컴퓨팅 자원들(1014), 및/또는 프레임워크 계층(1020)의 분산형 파일 시스템(1028)의 적어도 일부에 의해 이용되는 애플리케이션들의 하나 이상의 유형을 포함할 수 있다. 애플리케이션의 하나 이상의 유형에는, 임의의 수의 유전체학 애플리케이션, 인지 컴퓨팅, 및 훈련 또는 추론 소프트웨어, 머신 학습 프레임워크 소프트웨어(예를 들어, PyTorch, TensorFlow, Caffe 등) 또는 하나 이상의 실시예와 연계하여 이용되는 기타의 머신 학습 애플리케이션들을 포함한 머신 학습 애플리케이션이 포함될 수 있지만, 이것으로 제한되는 것은 아니다.
적어도 하나의 실시예에서, 구성 관리자(1024), 자원 관리자(1026), 및 자원 조율자(1012) 중 임의의 것은, 임의의 기술적으로 실현 가능한 방식으로 취득된 데이터의 임의의 양 및 유형에 기초하여 임의의 수 및 유형의 자체-수정 동작들을 구현할 수 있다. 적어도 하나의 실시예에서, 자체-수정 동작들은, 데이터 센터(1000)의 데이터 센터 오퍼레이터가 혹시라도 잘못된 구성 결정을 내리는 것을 완화할 수 있고, 아마도, 데이터 센터의 이용도가 낮고/거나 성능이 떨어지는 부분들을 피할 수 있다.
적어도 하나의 실시예에서, 데이터 센터(1000)는, 여기서 설명된 하나 이상의 실시예에 따라 하나 이상의 머신 학습 모델을 훈련시키거나 하나 이상의 머신 학습 모델을 이용하여 정보를 예측 또는 추론하기 위한 도구들, 서비스들, 소프트웨어 또는 기타의 자원들을 포함할 수 있다. 예를 들어, 적어도 하나의 실시예에서, 머신 학습 모델은, 데이터 센터(1000)와 관련하여 위에서 설명된 소프트웨어 및 컴퓨팅 자원들을 이용하여 신경망 아키텍쳐에 따라 가중치 파라미터들을 계산함으로써 훈련될 수 있다. 적어도 하나의 실시예에서, 하나 이상의 신경망에 대응하는 훈련된 머신 학습 모델들은, 여기서 설명된 하나 이상의 훈련 기술을 통해 계산된 가중치 파라미터들을 이용함으로써 데이터 센터(1000)에 관해 위에서 설명된 자원들을 이용하여 정보를 추론하거나 예측하는데 이용될 수 있다.
적어도 하나의 실시예에서, 데이터 센터는, CPU들, 주문형 집적 회로(application-specific integrated circuit)(ASIC)들, GPU들, FPGA들, 또는 다른 하드웨어를 이용하여, 전술된 자원들을 이용해 훈련 및/또는 추론을 수행할 수 있다. 게다가, 위에서 설명된 하나 이상의 소프트웨어 및/또는 하드웨어 자원들은, 사용자가, 이미지 인식, 음성 인식 또는 기타의 인공 지능 서비스들 등의 정보의 추론을 훈련하거나 수행하는 것을 허용하는 서비스로서 구성될 수 있다.
추론 및/또는 훈련 로직(915)은 하나 이상의 실시예와 연관된 추론 및/또는 훈련 연산들을 수행하는데 이용된다. 추론 및/또는 훈련 로직(915)에 관한 상세사항은 도 9a 및/또는 도 9b와 관련하여 아래에 제공된다. 적어도 하나의 실시예에서, 추론 및/또는 훈련 로직(915)은, 신경망 훈련 연산들, 신경망 기능들 및/또는 아키텍쳐들, 또는 여기서 설명된 신경망 이용 사례들을 이용하여 계산된 가중치 파라미터들에 적어도 부분적으로 기초하여 연산들을 추론하거나 예측하기 위해 시스템 도 10에서 이용될 수 있다.
적어도 하나의 실시예에서, 이러한 컴포넌트들은, 더 낮은 프레임 레이트 비디오의 프레임들로부터 더 높은 프레임 레이트 비디오를 생성하는 것 등의, 하나 이상의 신경망을 이용하여 향상된 비디오를 생성하는데 이용될 수 있다.
컴퓨터 시스템들
도 11a는, 적어도 하나의 실시예에 따른, 명령어를 실행하는 실행 유닛을 포함할 수 있는 프로세서로 형성된 상호접속된 디바이스들 및 컴포넌트들, 시스템 온 칩(SOC) 또는 이들의 일부 조합(1100)을 갖는 시스템일 수 있는 예시적인 컴퓨터 시스템을 나타내는 블록도이다. 적어도 하나의 실시예에서, 컴퓨터 시스템(1100)은, 제한 없이, 여기서 설명된 실시예에서와 같이, 본 개시내용에 따라, 프로세스 데이터에 대한 알고리즘들을 수행하기 위한 로직을 포함하는 실행 유닛들을 채용하는 프로세서(1102) 등의 컴포넌트를 포함할 수 있다. 적어도 하나의 실시예에서, 컴퓨터 시스템(1100)은, 캘리포니아주, Santa Clara, Intel Corporation으로부터 입수가능한 PENTIUM® 프로세서 제품군, Xeon™, Itanium®, XScale™ 및/또는 StrongARM™, Intel® Core™, 또는 Intel® Nervana™ 마이크로프로세서들 등의 프로세서들을 포함할 수 있지만, 다른 시스템들(다른 마이크로프로세서들, 엔지니어링 워크스테이션들, 셋탑 박스들 등을 갖는 PC들로 포함)도 역시 이용될 수 있다. 적어도 하나의 실시예에서, 컴퓨터 시스템(1100)은 와싱턴주 Redmond의 Microsoft Corporation으로부터 입수할 수 있는 WINDOWS 운영 체제의 한 버전을 실행할 수 있지만, 다른 운영 체제(예를 들어, UNIX 및 Linux), 임베디드 소프트웨어, 및/또는 그래픽 사용자 인터페이스들도 역시 이용될 수 있다.
실시예들은 핸드헬드 디바이스들 및 임베디드 애플리케이션들 등의 다른 디바이스들에서 이용될 수 있다. 핸드헬드 디바이스들의 일부 예로서는, 셀룰러 전화들, 인터넷 프로토콜 디바이스들, 디지털 카메라들, PDA(personal digital assistant)들, 및 핸드헬드 PC들이 포함된다. 적어도 하나의 실시예에서, 임베디드 애플리케이션들은, 마이크로제어기, 디지털 신호 프로세서(DSP), 시스템 온 칩, 네트워크 컴퓨터들(NetPCs), 셋탑박스들, 네트워크 허브들, 광역 네트워크(WAN) 스위치들, 또는 적어도 하나의 실시예에 따라 하나 이상의 명령어를 수행할 수 있는 기타 임의의 시스템을 포함할 수 있다.
적어도 하나의 실시예에서, 컴퓨터 시스템(1100)은, 제한없이, 여기서 설명된 기술들에 따라 머신 학습 모델 훈련 및/또는 추론을 수행하는 하나 이상의 실행 유닛(1108)을 제한없이 포함할 수 있는 프로세서(1102)를 포함할 수 있다. 적어도 하나의 실시예에서, 컴퓨터 시스템(1100)은 단일 프로세서 데스크탑 또는 서버 시스템이지만, 또 다른 실시예에서 컴퓨터 시스템(1100)은 멀티프로세서 시스템일 수 있다. 적어도 하나의 실시예에서, 프로세서(1102)는, 제한없이, 복합 명령어 세트 컴퓨터(CISC; complex instruction set computer) 마이크로프로세서, 단축 명령어 세트 컴퓨팅(RISC; reduced instruction set computing) 마이크로프로세서, 매우 긴 명령어 워드(VLIW; very long instruction word) 마이크로프로세서, 명령어 세트들의 조합을 구현하는 프로세서, 또는 예를 들어 디지털 신호 프로세서 등의, 기타 임의의 프로세서 디바이스를 포함할 수 있다. 적어도 하나의 실시예에서, 프로세서(1102)는, 프로세서(1102)와 컴퓨터 시스템(1100)의 다른 컴포넌트들 사이에서 데이터 신호들을 전송할 수 있는 프로세서 버스(1110)에 결합될 수 있다.
적어도 하나의 실시예에서, 프로세서(1102)는, 제한없이, 레벨 1("L1") 내부 캐시 메모리("캐시")(1104)를 포함할 수 있다. 적어도 하나의 실시예에서, 프로세서(1102)는 단일의 내부 캐시 또는 복수 레벨의 내부 캐시를 가질 수 있다. 적어도 하나의 실시예에서, 캐시 메모리는 프로세서(1102) 외부에 상주할 수 있다. 다른 실시예들도 역시, 특정한 구현 및 필요성에 따라 내부 및 외부 캐시 양쪽 모두의 조합을 포함할 수 있다. 적어도 하나의 실시예에서, 레지스터 파일(1106)은, 제한없이, 정수 레지스터들, 부동 소수점 레지스터들, 상태 레지스터들, 및 명령어 포인터 레지스터를 포함한 다양한 레지스터들 내에 상이한 유형들의 데이터를 저장할 수 있다.
적어도 하나의 실시예에서, 정수 및 부동 소수점 연산들을 수행하기 위한 로직을 포함한 그러나 이것으로 제한되지 않는 실행 유닛(1108)도 역시 프로세서(1102)에 상주한다. 적어도 하나의 실시예에서, 프로세서(1102)는 또한, 소정의 매크로 명령어들에 대한 마이크로코드를 저장하는 마이크로코드("ucode") 판독 전용 메모리("ROM")를 포함할 수 있다. 적어도 하나의 실시예에서, 실행 유닛(1108)은 팩킹된 명령어 세트(1109)를 처리하는 로직을 포함할 수 있다. 적어도 하나의 실시예에서, 명령어들을 실행하는 연관된 회로와 함께, 팩킹된 명령어 세트(1109)를 범용 프로세서(1102)의 명령어 세트에 포함시킴으로써, 많은 멀티미디어 애플리케이션에 의해 이용되는 연산들이 범용 프로세서(1102) 내의 팩킹된 데이터를 이용하여 수행될 수 있다. 하나 이상의 실시예에서, 많은 멀티미디어 애플리케이션은 팩킹된 데이터에 관한 연산들을 수행하기 위해 프로세서의 데이터 버스의 전체 폭을 이용함으로써 가속되고 더 효율적으로 실행될 수 있어서, 하나의 데이터 요소에 관해 한번에 하나 이상의 연산들을 수행하기 위해 프로세서의 데이터 버스를 통해 더 작은 단위들의 데이터를 전송할 필요성을 제거할 수 있다.
적어도 하나의 실시예에서, 실행 유닛(1108)은 또한, 마이크로제어기들, 임베디드 프로세서들, 그래픽 디바이스들, DSP들, 및 다른 유형들의 로직 회로들에서 이용될 수 있다. 적어도 하나의 실시예에서, 컴퓨터 시스템(1100)은, 제한없이, 메모리(1120)를 포함할 수 있다. 적어도 하나의 실시예에서, 메모리(1120)는, 동적 랜덤 액세스 메모리("DRAM") 디바이스, 정적 랜덤 액세스 메모리("SRAM") 디바이스, 플래시 메모리 디바이스, 또는 기타의 메모리 디바이스로서 구현될 수 있다. 적어도 하나의 실시예에서, 메모리(1120)는, 프로세서(1102)에 의해 실행될 수 있는 데이터 신호들에 의해 표현되는 명령어(들)(1119) 및/또는 데이터(1121)를 저장할 수 있다.
적어도 하나의 실시예에서, 시스템 로직 칩은, 프로세서 버스(1110) 및 메모리(1120)에 결합될 수 있다. 적어도 하나의 실시예에서, 시스템 로직 칩은, 제한없이, 메모리 제어기 허브("MCH")(1116)를 포함할 수 있고, 프로세서(1102)는 프로세서 버스(1110)를 통해 MCH(1116)와 통신할 수 있다. 적어도 하나의 실시예에서, MCH(1116)는, 명령어 및 데이터 저장을 위해, 및 그래픽 커맨드들, 데이터 및 텍스쳐들의 저장을 위해, 메모리(1120)에 고대역폭 메모리 경로(1118)를 제공할 수 있다. 적어도 하나의 실시예에서, MCH(1116)는, 프로세서(1102), 메모리(1120), 및 컴퓨터 시스템(1100) 내의 다른 컴포넌트들 사이에서 데이터 신호들을 지향시키고, 프로세서 버스(1110), 메모리(1120), 및 시스템 I/O(1122) 사이에서 데이터 신호들을 브릿징할 수 있다. 적어도 하나의 실시예에서, 시스템 로직 칩은, 그래픽 제어기에 결합하기 위한 그래픽 포트를 제공할 수 있다. 적어도 하나의 실시예에서, MCH(1116)는 고대역폭 메모리 경로(1118)를 통해 메모리(1120)에 결합될 수 있고 그래픽/비디오 카드(1112)는 가속 그래픽 포트("AGP") 인터커넥트(1114)를 통해 MCH(1116)에 결합될 수 있다.
적어도 하나의 실시예에서, 컴퓨터 시스템(1100)은 MCH(1116)를 I/O 제어기 허브("ICH")(1130)에 결합하기 위해 전용 허브 인터페이스 버스인 시스템 I/O(1122)를 이용할 수 있다. 적어도 하나의 실시예에서, ICH(1130)는 로컬 I/O 버스를 통해 일부 I/O 디바이스들로의 직접 접속들을 제공할 수 있다. 적어도 하나의 실시예에서, 로컬 I/O 버스는, 제한없이, 주변기기들을, 메모리(1120), 칩셋, 및 프로세서(1102)에 접속하기 위한 고속 I/O 버스를 포함할 수 있다. 예들로서는, 제한없이, 오디오 제어기(1129), 펌웨어 허브(플래시 BIOS)(1128), 무선 트랜시버(1126), 데이터 스토리지(1124), 사용자 입력 및 키보드 인터페이스(1125)를 포함한 레거시 I/O 제어기(1123), USB(Universal Serial Bus) 등의 시리얼 확장 포트(1127), 및 네트워크 제어기(1134)가 포함될 수 있다. 데이터 스토리지(1124)는, 하드 디스크 드라이브, 플로피 디스크 드라이브, CD-ROM 디바이스, 플래시 메모리 디바이스, 또는 기타의 대용량 저장 디바이스를 포함할 수 있다.
적어도 하나의 실시예에서, 도 11a는, 상호접속된 하드웨어 디바이스들 또는 "칩들"을 포함하는 시스템을 나타내는 반면, 다른 실시예들에서, 도 11a는 예시적인 시스템 온 칩("SoC")을 나타낼 수 있다. 적어도 하나의 실시예에서, 디바이스들은, 전용 인터커넥트들, 표준화된 인터커넥트들(예를 들어, PCIe) 또는 이들의 일부 조합으로 상호접속될 수 있다. 적어도 하나의 실시예에서, 컴퓨터 시스템(1100)의 하나 이상의 컴포넌트는 CXL(compute express link) 인터커넥트들을 이용하여 상호접속된다.
추론 및/또는 훈련 로직(915)은 하나 이상의 실시예와 연관된 추론 및/또는 훈련 연산들을 수행하는데 이용된다. 추론 및/또는 훈련 로직(915)에 관한 상세사항은 도 9a 및/또는 도 9b와 관련하여 아래에 제공된다. 적어도 하나의 실시예에서, 추론 및/또는 훈련 로직(915)은, 신경망 훈련 연산들, 신경망 기능들 및/또는 아키텍쳐들, 또는 여기서 설명된 신경망 이용 사례들을 이용하여 계산된 가중치 파라미터들에 적어도 부분적으로 기초하여 연산들을 추론하거나 예측하기 위해 시스템 도 11a에서 이용될 수 있다.
적어도 하나의 실시예에서, 이러한 컴포넌트들은, 더 낮은 프레임 레이트 비디오의 프레임들로부터 더 높은 프레임 레이트 비디오를 생성하는 것 등의, 하나 이상의 신경망을 이용하여 향상된 비디오를 생성하는데 이용될 수 있다.
도 12는, 적어도 하나의 실시예에 따른, 프로세서(1210)를 이용하기 위한 전자 디바이스(1200)를 나타내는 블록도이다. 적어도 하나의 실시예에서, 전자 디바이스(1200)는, 예를 들어, 제한없이, 노트북, 타워 서버, 랙 서버, 블레이드 서버, 랩탑, 데스크탑, 태블릿, 모바일 디바이스, 전화, 임베디드 컴퓨터, 또는 기타 임의의 적절한 전자 디바이스일 수 있다.
적어도 하나의 실시예에서, 시스템(1200)은, 제한없이, 임의의 적절한 수의 또는 종류의 컴포넌트, 주변기기, 모듈 또는 디바이스에 통신가능하게 결합된 프로세서(1210)를 포함할 수 있다. 적어도 하나의 실시예에서, 프로세서(1210)는, 1℃ 버스, SMBus(System Management Bus), LPC(Low Pin Count) 버스, SPI(Serial Peripheral Interface), High Definition Audio ("HDA") 버스, SATA(Serial Advance Technology Attachment) 버스, USB(Universal Serial Bus) (버전 1, 2, 3), 또는 UART(Universal Asynchronous Receiver/Transmitter) 버스 등의, 버스 또는 인터페이스를 이용하여 결합된다. 적어도 하나의 실시예에서, 도 12는 상호접속된 하드웨어 디바이스들 또는 "칩들"을 포함하는 시스템을 나타내는 반면, 다른 실시예에서, 도 12는 예시적인 시스템 온 칩("SoC")을 나타낼 수 있다. 적어도 하나의 실시예에서, 도 12에 나타낸 디바이스들은, 전용 인터커넥트들, 표준화된 인터커넥트들(예를 들어, PCIe) 또는 이들의 일부 조합으로 상호접속될 수 있다. 적어도 하나의 실시예에서, 도 12의 하나 이상의 컴포넌트는, CXL(compute express link) 인터커넥트들을 이용하여 상호접속된다.
적어도 하나의 실시예에서, 도 12는, 디스플레이(1224), 터치 스크린(1225), 터치 패드(1230), 근접장 통신 유닛("NFC")(1245), 센서 허브(1240), 열 센서(1246), 익스프레스 칩셋(EC, 1235), 신뢰할 수 있는 플랫폼 모듈("TPM")(1238), BIOS/펌웨어/플래시 메모리("BIOS, FW 플래시")(1222), DSP(1260), 솔리드 스테이트 디스크("SSD") 또는 하드 디스크 드라이브("HDD") 등의 드라이브(1220), 무선 근거리 통신망 유닛("WLAN")(1250), Bluetooth 유닛(1252), 무선 광역 네트워크 유닛("WWAN")(1256), GPS(Global Positioning System)(1255), USB 3.0 카메라 등의 카메라("USB 3.0 카메라")(1254), 및/또는 예를 들어 LPDDR3 표준으로 구현된 LPDDR(Low Power Double Data Rate) 메모리 유닛("LPDDR3")(1215)을 포함할 수 있다. 이들 컴포넌트들 각각은, 임의의 적절한 방식으로 구현될 수 있다.
적어도 하나의 실시예에서, 다른 컴포넌트는 위에서 논의된 컴포넌트들을 통해 프로세서(1210)에 통신가능하게 결합될 수 있다. 적어도 하나의 실시예에서, 가속도계(1241), 주변 광 센서("ALS")(1242), 나침반(1243), 및 자이로스코프(1244)는 센서 허브(1240)에 통신가능하게 결합될 수 있다. 적어도 하나의 실시예에서, 열 센서(1239), 팬(1237), 키보드(1246), 및 터치 패드(1230)는 EC(1235)에 통신가능하게 결합될 수 있다. 적어도 하나의 실시예에서, 스피커(1263), 헤드폰(1264), 및 마이크로폰("마이크")(1265)은 오디오 유닛("오디오 코덱 및 클래스 d amp")(1262)에 통신가능하게 결합될 수 있고, 오디오 유닛은 차례로 DSP(1260)에 통신가능하게 결합될 수 있다. 적어도 하나의 실시예에서, 오디오 유닛(1264)은, 예를 들어, 제한없이, 오디오 코더/디코더("코덱") 및 클래스 D 증폭기를 포함할 수 있다. 적어도 하나의 실시예에서, SIM 카드("SIM")(1257)는 WWAN 유닛(1256)에 통신가능하게 결합될 수 있다. 적어도 하나의 실시예에서, WLAN 유닛(1250) 및 블루투스 유닛(1252)뿐만 아니라 WWAN 유닛(1256) 등의 컴포넌트들은 차세대 폼 팩터(NGFF; Next Generation Form Factor)로 구현될 수 있다.
추론 및/또는 훈련 로직(915)은 하나 이상의 실시예와 연관된 추론 및/또는 훈련 연산들을 수행하는데 이용된다. 추론 및/또는 훈련 로직(915)에 관한 상세사항은 도 9a 및/또는 도 9b와 관련하여 아래에 제공된다. 적어도 하나의 실시예에서, 추론 및/또는 훈련 로직(915)은, 신경망 훈련 연산들, 신경망 기능들 및/또는 아키텍쳐들, 또는 여기서 설명된 신경망 이용 사례들을 이용하여 계산된 가중치 파라미터들에 적어도 부분적으로 기초하여 연산들을 추론하거나 예측하기 위해 시스템 도 12에서 이용될 수 있다.
적어도 하나의 실시예에서, 이러한 컴포넌트들은, 더 낮은 프레임 레이트 비디오의 프레임들로부터 더 높은 프레임 레이트 비디오를 생성하는 것 등의, 하나 이상의 신경망을 이용하여 향상된 비디오를 생성하는데 이용될 수 있다.
도 13은 적어도 하나의 실시예에 따른 컴퓨터 시스템(1300)을 나타낸다. 적어도 하나의 실시예에서, 컴퓨터 시스템(1300)은 본 개시내용 전체에 걸쳐 설명된 다양한 프로세스 및 방법을 구현하도록 구성된다.
적어도 하나의 실시예에서, 컴퓨터 시스템(1300)은, 제한없이, PCI("Peripheral Component Interconnect"), 주변 컴포넌트 인터커넥트 익스프레스("PCI-Express"), AGP(Accelerated Graphics Port), HyperTransport 또는 기타 임의의 버스 또는 포인트-투-포인트 통신 프로토콜(들) 등의 임의의 적절한 프로토콜을 이용하여 구현된 통신 버스(1310)에 접속된 적어도 하나의 중앙 처리 유닛("CPU")(1302)를 포함한다. 적어도 하나의 실시예에서, 컴퓨터 시스템(1300)은, 제한없이, 메인 메모리(1304) 및 제어 로직(예를 들어, 하드웨어, 소프트웨어, 또는 이들의 조합으로 구현됨)을 포함하며, 데이터는 랜덤 액세스 메모리("RAM")의 형태를 취할 수 있는 메인 메모리(1304)에 저장된다. 적어도 하나의 실시예에서, 네트워크 인터페이스 서브시스템("네트워크 인터페이스")(1322)은, 데이터를 다른 시스템들로부터 수신하고 컴퓨터 시스템(1300)으로부터 다른 시스템들에 데이터를 전송하기 위해 다른 컴퓨팅 디바이스들 및 네트워크들에 대한 인터페이스를 제공한다.
적어도 하나의 실시예에서, 컴퓨터 시스템(1300)은, 적어도 하나의 실시예에서, 제한없이, 입력 디바이스들(1308), 병렬 처리 시스템(1312), 및 디스플레이 디바이스들(1306)을 포함하고, 디스플레이 디바이스들은, 종래의 음극선관("CRT"), 액정 디스플레이("LCD"), 발광 다이오드("LED"), 플라즈마 디스플레이, 또는 기타의 적절한 디스플레이 기술들을 이용하여 구현될 수 있다. 적어도 하나의 실시예에서, 사용자 입력은, 키보드, 마우스, 터치패드, 마이크로폰 등의 입력 디바이스들(1308)로부터 수신된다. 적어도 하나의 실시예에서, 전술된 모듈들 각각은 처리 시스템을 형성하기 위해 단일 반도체 플랫폼 상에 위치할 수 있다.
추론 및/또는 훈련 로직(915)은 하나 이상의 실시예와 연관된 추론 및/또는 훈련 연산들을 수행하는데 이용된다. 추론 및/또는 훈련 로직(915)에 관한 상세사항은 도 9a 및/또는 도 9b와 관련하여 아래에 제공된다. 적어도 하나의 실시예에서, 추론 및/또는 훈련 로직(915)은, 신경망 훈련 연산들, 신경망 기능들 및/또는 아키텍쳐들, 또는 여기서 설명된 신경망 이용 사례들을 이용하여 계산된 가중치 파라미터들에 적어도 부분적으로 기초하여 연산들을 추론하거나 예측하기 위해 시스템 도 13에서 이용될 수 있다.
적어도 하나의 실시예에서, 이러한 컴포넌트들은, 더 낮은 프레임 레이트 비디오의 프레임들로부터 더 높은 프레임 레이트 비디오를 생성하는 것 등의, 하나 이상의 신경망을 이용하여 향상된 비디오를 생성하는데 이용될 수 있다.
도 14는 적어도 하나의 실시예에 따른 컴퓨터 시스템(1400)을 나타낸다. 적어도 하나의 실시예에서, 컴퓨터 시스템(1400)은, 제한없이, 컴퓨터(1410) 및 USB 스틱(1420)을 포함한다. 적어도 하나의 실시예에서, 컴퓨터(1410)는, 제한없이, 임의의 수의 및 유형의 프로세서(들)(미도시) 및 메모리(미도시)를 포함할 수 있다. 적어도 하나의 실시예에서, 컴퓨터(1410)는, 제한없이, 서버, 클라우드 인스턴스, 랩탑 및 데스크탑 컴퓨터를 포함한다.
적어도 하나의 실시예에서, USB 스틱(1420)은, 제한없이, 처리 유닛(1430), USB 인터페이스(1440), 및 USB 인터페이스 로직(1450)을 포함한다. 적어도 하나의 실시예에서, 처리 유닛(1430)은, 명령어들을 실행할 수 있는 임의의 명령어 실행 시스템, 장치, 또는 디바이스일 수 있다. 적어도 하나의 실시예에서, 처리 유닛(1430)은, 제한없이, 임의의 수의 및 유형의 처리 코어(미도시)를 포함할 수 있다. 적어도 하나의 실시예에서, 처리 코어(1430)는 머신 학습과 연관된 임의의 양의 및 유형의 연산들을 수행하도록 최적화된 주문형 집적 회로("ASIC")를 포함한다. 예를 들어, 적어도 하나의 실시예에서, 처리 코어(1430)는, 머신 학습 추론 연산들을 수행하도록 최적화된 텐서 처리 유닛("TPC")이다. 적어도 하나의 실시예에서, 처리 코어(1430)는 머신 비전 및 머신 학습 추론 연산들을 수행하도록 최적화된 비전 처리 유닛("VPU")이다.
적어도 하나의 실시예에서, USB 인터페이스(1440)는 임의의 유형의 USB 커넥터 또는 USB 소켓일 수 있다. 예를 들어, 적어도 하나의 실시예에서, USB 인터페이스(1440)는 데이터 및 전원을 위한 USB 3.0 Type-C 소켓이다. 적어도 하나의 실시예에서, USB 인터페이스(1440)는 USB 3.0 Type-A 커넥터이다. 적어도 하나의 실시예에서, USB 인터페이스 로직(1450)은, 처리 유닛(1430)이 USB 커넥터(1440)를 통해 디바이스들(예를 들어, 컴퓨터(1410))과 인터페이스할 수 있게 하는 임의의 양 및 유형의 로직을 포함할 수 있다.
추론 및/또는 훈련 로직(915)은 하나 이상의 실시예와 연관된 추론 및/또는 훈련 연산들을 수행하는데 이용된다. 추론 및/또는 훈련 로직(915)에 관한 상세사항은 도 9a 및/또는 도 9b와 관련하여 아래에 제공된다. 적어도 하나의 실시예에서, 추론 및/또는 훈련 로직(915)은, 신경망 훈련 연산들, 신경망 기능들 및/또는 아키텍쳐들, 또는 여기서 설명된 신경망 이용 사례들을 이용하여 계산된 가중치 파라미터들에 적어도 부분적으로 기초하여 연산들을 추론하거나 예측하기 위해 시스템 도 14에서 이용될 수 있다.
적어도 하나의 실시예에서, 이러한 컴포넌트들은, 더 낮은 프레임 레이트 비디오의 프레임들로부터 더 높은 프레임 레이트 비디오를 생성하는 것 등의, 하나 이상의 신경망을 이용하여 향상된 비디오를 생성하는데 이용될 수 있다.
도 15a는, 복수의 GPU(1510-1513)가 고속 링크(1540-1543)(예를 들어, 버스들, 포인트-투-포인트 인터커넥트들 등)를 통해 복수의 멀티코어 프로세서(1505-1506)에 통신가능하게 결합되는 예시적인 아키텍쳐를 나타낸다. 한 실시예에서, 고속 링크(1540-1543)는, 4GB/s, 30GB/s, 80GB/s 또는 그 이상의 통신 처리량을 지원한다. PCIe 4.0 또는 5.0 및 NVLink 2.0을 포함한 그러나 이것으로 제한되지 않는 다양한 인터커넥트 프로토콜이 이용될 수 있다.
추가로, 및 한 실시예에서, GPU들(1510-1513) 중 2개 이상은 고속 링크들(1529-1530)을 통해 상호접속되고, 고속 링크들(1529-1530)은, 고속 링크들(1540-1543)에 이용되는 것들과 동일하거나 상이한 프로토콜들/링크들을 이용하여 구현될 수 있다. 유사하게, 멀티코어 프로세서들(1505-1506) 중 2개 이상은, 20GB/s, 30GB/s, 120GB/s 또는 그 이상에서 동작하는 대칭 멀티프로세서(SMP) 버스일 수 있는 고속 링크(1528)를 통해 접속될 수 있다. 대안으로서, 도 15a에 도시된 다양한 시스템 컴포넌트들 사이의 모든 통신은, 동일한 프로토콜들/링크들을 이용하여(예를 들어, 공통 상호접속 패브릭을 통해) 달성될 수 있다.
한 실시예에서, 각각의 멀티코어 프로세서(1505-1506)는, 각각, 메모리 인터커넥트들(1526-1527)을 통해 프로세서 메모리(1501-1502)에 통신가능하게 결합되고, 각각의 GPU(1510-1513)는 GPU 메모리 인터커넥트들(1550-1553)을 통해 GPU 메모리(1520-1523)에 통신가능하게 결합된다. 메모리 인터커넥트들(1526-1527 및 1550-1553)은 동일하거나 상이한 메모리 액세스 기술들을 이용할 수 있다. 제한이 아닌 예로서, 프로세서 메모리들(1501-1502) 및 GPU 메모리들(1520-1523)은, 동적 랜덤 액세스 메모리들(DRAM)(스택형 DRAM들을 포함), 그래픽 DDR SDRAM(GDDR)(예를 들어, GDDR5, GDDR6) 또는 고대역폭 메모리(HBM) 등의 휘발성 메모리일 수 있고/있거나, 3D XPoint 또는 Nano-Ram 등의 비휘발성 메모리일 수 있다. 한 실시예에서, 프로세서 메모리들(1501-1502)의 일부는 휘발성 메모리일 수 있고 또 다른 부분은 비휘발성 메모리일 수 있다(예를 들어, 2-레벨 메모리(2LM) 계층구조를 이용).
후술되는 바와 같이, 다양한 프로세서(1505-1506) 및 GPU(1510-1513)가 각각 특정한 메모리(1501-1502, 1520-1523)에 물리적으로 결합될 수 있지만, 동일한 가상 시스템 주소 공간(또한 "유효 주소" 공간이라고 함)이 다양한 물리적 메모리들에 분산되는 통합된 메모리 아키텍쳐가 구현될 수도 있다. 예를 들어, 프로세서 메모리들(1501-1502) 각각은 64GB의 시스템 메모리 주소 공간을 포함할 수 있고, GPU 메모리들(1520-1523) 각각은 32GB의 시스템 메모리 주소 공간을 포함할 수 있다(이 예에서는, 총 256GB의 어드레싱가능한 메모리가 됨).
도 15b는, 한 예시적인 실시예에 따른 멀티코어 프로세서(1507)와 그래픽 가속 모듈(1546) 사이의 상호접속에 대한 추가적인 상세사항을 나타낸다. 그래픽 가속 모듈(1546)은, 고속 링크(1540)를 통해 프로세서(1507)에 결합된 라인 카드에 통합된 하나 이상의 GPU 칩을 포함할 수 있다. 대안으로서, 그래픽 가속 모듈(1546)은 프로세서(1507)와 동일한 팩키지 또는 칩에 통합될 수 있다.
적어도 하나의 실시예에서, 예시된 프로세서(1507)는 복수의 코어(1560A-1560D)를 포함하고, 그 각각은 변환 색인 버퍼(translation lookaside buffer)(1561A-1561D)와 하나 이상의 캐시(1562A-1562D)를 갖는다. 적어도 하나의 실시예에서, 코어들(1560A-1560D)은 도시되지 않은 명령어들을 실행하고 데이터를 처리하기 위한 다양한 다른 컴포넌트를 포함할 수 있다. 캐시들(1562A-1562D)은 레벨 1(L1) 및 레벨 2(L2) 캐시들을 포함할 수 있다. 또한, 하나 이상의 공유된 캐시(1556)가 캐시들(1562A-1562D)에 포함될 수 있고 코어들(1560A-1560D)의 세트들에 의해 공유될 수 있다. 예를 들어, 프로세서(1507)의 한 실시예는 24개의 코어를 포함하고, 그 각각은, 자체 L1 캐시, 12개의 공유된 L2 캐시, 및 12개의 공유된 L3 캐시를 갖는다. 이 실시예에서, 하나 이상의 L2 및 L3 캐시는 2개의 인접한 코어에 의해 공유된다. 프로세서(1507) 및 그래픽 가속 모듈(1546)은, 도 15a의 프로세서 메모리들(1501-1502)을 포함할 수 있는 시스템 메모리(1514)와 접속된다.
일관성 버스(1564)를 통한 코어간 통신을 통해 다양한 캐시(1562A-1562D, 1556) 및 시스템 메모리(1514)에 저장된 데이터 및 명령어들에 대해 일관성이 유지된다. 예를 들어, 각각의 캐시는, 검출된 판독들 또는 특정한 캐시 라인들로의 기입들에 응답하여 일관성 버스(1564)와 통신하기 위해 연관된 캐시 일관성 로직/회로를 가질 수 있다. 한 구현에서, 캐시 스누핑 프로토콜(cache snooping protocol)은 캐시 액세스를 스누핑하기 위해 일관성 버스(1564)를 통해 구현된다.
한 실시예에서, 프록시 회로(1525)는 그래픽 가속 모듈(1546)을 일관성 버스(1564)에 통신가능하게 결합하여, 그래픽 가속 모듈(1546)이 캐시 일관성 프로토콜에 코어들(1560A-1560D)의 피어로서 참여하는 것을 허용한다. 특히, 인터페이스(1535)는 고속 링크(1540)(예를 들어, PCIe 버스, NVLink 등)를 통해 프록시 회로(1525)에 대한 접속을 제공하고 인터페이스(1537)는 그래픽 가속 모듈(1546)을 링크(1540)에 접속한다.
한 구현에서, 가속기 통합 회로(1536)는 그래픽 가속 모듈(1546)의 복수의 그래픽 처리 엔진(1531, 1532, N)을 위하여 캐시 관리, 메모리 액세스, 컨텍스트 관리, 및 인터럽트 관리 서비스를 제공한다. 그래픽 처리 엔진(1531, 1532, N) 각각은, 별개의 그래픽 처리 유닛(GPU)을 포함할 수 있다. 대안으로서, 그래픽 처리 엔진(1531, 1532, N)은, 그래픽 실행 유닛들, 미디어 처리 엔진(예를 들어, 비디오 인코더들/디코더들), 샘플러들, 및 블리트 엔진(blit engine)들 등의 GPU 내의 상이한 유형들의 그래픽 처리 엔진들을 포함할 수 있다. 적어도 하나의 실시예에서, 그래픽 가속 모듈(1546)은 복수의 그래픽 처리 엔진(1531-1532, N)을 갖는 GPU일 수 있거나, 그래픽 처리 엔진(1531-1532, N)은, 공통 팩키지, 라인 카드 또는 칩에 통합된 개개의 GPU일 수 있다.
한 실시예에서, 가속기 통합 회로(1536)는 가상-대-물리 메모리 변환들(유효-대-실제 메모리 변환이라고도 함) 및 시스템 메모리(1514)에 액세스하기 위한 메모리 액세스 프로토콜들 등의 다양한 메모리 관리 기능들을 수행하기 위한 메모리 관리 유닛(MMU)(1539)을 포함한다. MMU(1539)는 또한, 가상/유효 주소로부터 물리/실제 주소 변환들을 캐싱하기 위한 변환 색인 버퍼(TLB)(미도시)를 포함할 수 있다. 한 구현에서, 캐시(1538)는 그래픽 처리 엔진들(1531-1532, N)에 의한 효율적인 액세스를 위한 커맨드들 및 데이터를 저장한다. 한 실시예에서, 캐시(1538) 및 그래픽 메모리들(1533-1534, M)에 저장된 데이터는 코어 캐시들(1562A-1562D, 1556) 및 시스템 메모리(1514)와 일관성을 유지한다. 위에서 언급된 바와 같이, 이것은 캐시(1538) 및 메모리들(1533-1534, M)을 위하여 프록시 회로(1525)를 통해 달성될 수 있다(예를 들어, 프로세서 캐시들(1562A-1562D, 1556) 상의 캐시 라인들의 수정들/액세스들에 관련된 업데이트들을 캐시(1538)에 전송하는 것, 및 캐시(1538)로부터 업데이트들을 수신하는 것).
한 세트의 레지스터들(1545)은 그래픽 처리 엔진들(1531-1532, N)에 의해 실행되는 스레드들에 대한 컨텍스트 데이터를 저장하고 컨텍스트 관리 회로(1548)는 스레드 컨텍스트를 관리한다. 예를 들어, 컨텍스트 관리 회로(1548)는 컨텍스트 전환들 동안(예를 들어, 제1 스레드가 저장되고 제2 스레드가 저장되어 제2 스레드가 그래픽 처리 엔진에 의해 실행될 수 있는 경우) 다양한 스레드의 컨텍스트들을 저장 및 복원하기 위해 저장 및 복원 동작들을 수행할 수 있다. 예를 들어, 컨텍스트 전환시, 컨텍스트 관리 회로(1548)는 메모리 내의 지정된 영역(예를 들어, 컨텍스트 포인터에 의해 식별됨)에 현재의 레지스터 값들을 저장할 수 있다. 그 다음, 소정 컨텍스트로 복귀할 때 레지스터 값들을 복원할 수 있다. 한 실시예에서, 인터럽트 관리 회로(1547)는 시스템 디바이스들로부터 수신된 인터럽트들을 수신하고 처리한다.
한 구현에서, 그래픽 처리 엔진(1531)으로부터의 가상/유효 주소들은 MMU(1539)에 의해 시스템 메모리(1514)의 실제/물리 주소로 변환된다. 가속기 통합 회로(1536)의 한 실시예는, 복수의(예를 들어, 4, 8, 16개의) 그래픽 가속기 모듈(1546) 및/또는 기타의 가속기 디바이스를 지원한다. 그래픽 가속기 모듈(1546)은 프로세서(1507) 상에서 실행되는 단일 애플리케이션 전용일 수 있거나 복수의 애플리케이션들 사이에서 공유될 수 있다. 한 실시예에서, 그래픽 처리 엔진들(1531-1532, N)의 자원들이 복수의 애플리케이션 또는 가상 머신(VM)들과 공유되는 가상화된 그래픽 실행 환경이 제공된다. 적어도 하나의 실시예에서, 자원들은, VM들 및/또는 애플리케이션들과 연관된 처리 요건들 및 우선순위들에 기초하여 상이한 VM들 및/또는 애플리케이션들에 할당되는 "슬라이스들"로 세분될 수 있다.
적어도 하나의 실시예에서, 가속기 통합 회로(1536)는 그래픽 가속 모듈(1546)을 위해 시스템으로의 브릿지로서 수행하고, 주소 변환 및 시스템 메모리 캐시 서비스들을 제공한다. 또한, 가속기 통합 회로(1536)는, 호스트 프로세서가 그래픽 처리 엔진들(1531-1532, N)의 가상화, 인터럽트들, 메모리 관리를 관리하기 위한 가상화 설비들을 제공할 수 있다.
그래픽 처리 엔진들(1531-1532, N)의 하드웨어 자원들은 호스트 프로세서(1507)가 보는 실제 주소 공간에 명시적으로 맵핑되기 때문에, 임의의 호스트 프로세서는 유효 주소 값을 이용하여 이들 자원들을 직접 어드레싱할 수 있다. 한 실시예에서, 가속기 통합 회로(1536)의 한 기능은, 그래픽 처리 엔진들(1531-1532, N)을 물리적으로 분리하여 이들이 시스템에 독립 유닛들로서 나타나도록 하는 것이다.
적어도 하나의 실시예에서, 하나 이상의 그래픽 메모리(1533-1534, M)는, 각각, 그래픽 처리 엔진들(1531-1532, N) 각각에 결합된다. 그래픽 메모리들(1533-1534, M)은, 그래픽 처리 엔진들(1531-1532, N) 각각에 의해 처리되는 명령어들 및 데이터를 저장한다. 그래픽 메모리들(1533-1534, M)은, DRAM들(적층된 DRAM들 포함), GDDR 메모리(예를 들어, GDDR5, GDDR6) 또는 HBM 등의 휘발성 메모리들일 수 있고/있거나, 3D XPoint 또는 Nano-Ram 등의 비휘발성 메모리들일 수 있다.
한 실시예에서, 링크(1540)를 통한 데이터 트래픽을 감소시키기 위해, 바이어싱 기술들이 이용되어 그래픽 메모리들(1533-1534, M)에 저장된 데이터는, 그래픽 처리 엔진들(1531-1532, N)에 의해 가장 자주 이용되고 바람직하게는 코어들(1560A-1560D)에 의해서는 이용되지 않는(적어도 자주 이용되지는 않는) 데이터이도록 보장한다. 유사하게, 바이어싱 메커니즘은, 코어들(및 바람직하게는 그래픽 처리 엔진들(1531-1532, N)에 의해서가 아님)이 필요로하는 데이터를, 코어들의 캐시들(1562A-1562D, 1556) 및 시스템 메모리(1514) 내에 유지하려고 시도한다.
도 15c는, 가속기 통합 회로(1536)가 프로세서(1507) 내에 통합된 또 다른 예시적인 실시예를 나타낸다. 적어도 이 실시예에서, 그래픽 처리 엔진들(1531-1532, N)은, (다시 한번, 임의의 형태의 버스 또는 인터페이스 프로토콜을 이용할 수 있는) 인터페이스(1537) 및 인터페이스(1535)를 거쳐 가속기 통합 회로(1536)로의 고속 링크(1540)를 통해 직접 통신한다. 가속기 통합 회로(1536)는 도 15b와 관련하여 설명된 것들과 동일한 동작을 수행할 수 있지만, 일관성 버스(1564) 및 캐시들(1562A-1562D, 1556)에 대한 그 근접성을 고려할 때 잠재적으로 더 높은 처리량으로 수행할 수 있다. 적어도 하나의 실시예는, 가속기 통합 회로(1536)에 의해 제어되는 프로그래밍 모델들 및 그래픽 가속 모듈(1546)에 의해 제어되는 프로그래밍 모델들을 포함할 수 있는, 전용 프로세스 프로그래밍 모델(그래픽 가속 모듈 가상화 없음) 및 공유된 프로그래밍 모델(가상화 있음)을 포함하는 상이한 프로그래밍 모델들을 지원한다.
적어도 하나의 실시예에서, 그래픽 처리 엔진들(1531-1532, N)은 단일 운영 체제 하에서 단일 애플리케이션 또는 프로세스에 전용된다. 적어도 하나의 실시예에서, 단일 애플리케이션은 다른 애플리케이션 요청들을 그래픽 처리 엔진들(1531-1532, N)에 보내어, VM/파티션 내에서 가상화를 제공할 수 있다.
적어도 하나의 실시예에서, 그래픽 처리 엔진들(1531-1532, N)은 복수의 VM/애플리케이션 파티션에 의해 공유될 수 있다. 적어도 하나의 실시예에서, 공유된 모델들은 시스템 하이퍼바이저를 이용하여 그래픽 처리 엔진들(1531-1532, N)을 가상화해 각각의 운영 체제에 의한 액세스를 허용할 수 있다. 하이퍼바이저가 없는 단일 파티션 시스템의 경우, 그래픽 처리 엔진들(1531-1532, N)은 운영 체제에 의해 소유된다. 적어도 하나의 실시예에서, 운영 체제는, 각각의 프로세스 또는 애플리케이션에 대한 액세스를 제공하기 위해 그래픽 처리 엔진들(1531-1532, N)을 가상화할 수 있다.
적어도 하나의 실시예에서, 그래픽 가속 모듈(1546) 또는 개개의 그래픽 처리 엔진(1531-1532, N)은 프로세스 핸들을 이용하여 프로세스 요소를 선택한다. 적어도 하나의 실시예에서, 프로세스 요소들은 시스템 메모리(1514)에 저장되고 여기서 설명된 실제 주소 변환 기술들에 대한 유효 주소를 이용하여 어드레싱가능하다. 적어도 하나의 실시예에서, 프로세스 핸들은, 그래픽 처리 엔진(1531-1532, N)에 그 컨텍스트를 등록할 때(즉, 프로세스 요소를 프로세스 요소 링크된 목록에 추가하기 위해 시스템 소프트웨어를 호출할 때) 호스트 프로세스에 제공되는 구현-특유의 값일 수 있다. 적어도 하나의 실시예에서, 프로세스 핸들의 하위 16비트는 프로세스 요소 링크된 목록 내의 한 프로세스 요소의 오프셋일 수 있다.
도 15d는 한 예시적인 가속기 통합 슬라이스(1590)를 나타낸다. 본 명세서에서 사용될 때, "슬라이스"는 가속기 통합 회로(1536)의 처리 자원들의 명시된 부분을 포함한다. 시스템 메모리(1514) 내의 애플리케이션 유효 주소 공간(1582)은 프로세스 요소들(1583)을 저장한다. 한 실시예에서, 프로세스 요소들(1583)은 프로세서(1507) 상에서 실행되는 애플리케이션들(1580)로부터의 GPU 기동들(1581)에 응답하여 저장된다. 프로세스 요소(1583)는 대응하는 애플리케이션(1580)에 대한 프로세스 상태를 포함한다. 프로세스 요소(1583)에 포함된 작업 기술자(WD)(1584)는 애플리케이션에 의해 요청된 단일 잡일 수 있거나, 작업들의 큐에 대한 포인터를 포함할 수 있다. 적어도 하나의 실시예에서, WD(1584)는 애플리케이션의 주소 공간(1582) 내의 잡 요청 큐에 대한 포인터이다.
그래픽 가속 모듈(1546) 및/또는 개개의 그래픽 처리 엔진들(1531-1532, N)은 시스템의 프로세스들 전체 또는 서브세트에 의해 공유될 수 있다. 적어도 하나의 실시예에서, 가상화된 환경에서 잡을 시작하기 위해 프로세스 상태를 셋업하고 WD(1584)를 그래픽 가속 모듈(1546)에 전송하기 위한 인프라스트럭처가 포함될 수 있다.
적어도 하나의 실시예에서, 전용 프로세스 프로그래밍 모델은 구현-특유이다. 이 모델에서, 단일 프로세스는 그래픽 가속 모듈(1546) 또는 개개의 그래픽 처리 엔진(1531)을 소유한다. 그래픽 가속 모듈(1546)이 단일 프로세스에 의해 소유되기 때문에, 그래픽 가속 모듈(1546)이 할당될 때 하이퍼바이저는 소유 파티션에 대해 가속기 통합 회로(1536)를 초기화하고 운영 체제는 소유 프로세스에 대해 가속기 통합 회로(1536)를 초기화한다.
동작 시, 가속기 통합 슬라이스(1590) 내의 WD 인출 유닛(1591)은 그래픽 가속 모듈(1546)의 하나 이상의 그래픽 처리 엔진에 의해 이루어질 작업의 표시를 포함하는 다음 WD(1584)를 인출한다. WD(1584)로부터의 데이터는 레지스터들(1545)에 저장될 수 있고, 도시된 바와 같이 MMU(1539), 인터럽트 관리 회로(1547), 및/또는 컨텍스트 관리 회로(1548)에 의해 이용될 수 있다. 예를 들어, MMU(1539)의 한 실시예는 OS 가상 주소 공간(1585) 내의 세그먼트/페이지 테이블들(1586)에 액세스하기 위한 세그먼트/페이지 워크 회로를 포함한다. 인터럽트 관리 회로(1547)는 그래픽 가속 모듈(1546)로부터 수신된 인터럽트 이벤트들(1592)을 처리할 수 있다. 그래픽 연산들을 수행할 때, 그래픽 처리 엔진(1531-1532, N)에 의해 생성된 유효 주소(1593)는 MMU(1539)에 의해 실제 주소로 변환된다.
한 실시예에서, 동일한 세트의 레지스터들(1545)이 각각의 그래픽 처리 엔진(1531-1532, N) 및/또는 그래픽 가속 모듈(1546)에 대해 복제되고, 하이퍼바이저 또는 운영 체제에 의해 초기화될 수 있다. 이들 복제 레지스터들 각각은 가속기 통합 슬라이스(1590)에 포함될 수 있다. 하이퍼바이저에 의해 초기화될 수 있는 예시적인 레지스터들이 표 1에 나와 있다.
표 1 - 하이퍼바이저 초기화 레지스터들
Figure pat00001
운영 체제에 의해 초기화될 수 있는 예시적인 레지스터들이 표 2에 나와 있다.
표 2 - 운영 체제 초기화된 레지스터들
Figure pat00002
한 실시예에서, 각각의 WD(1584)는 특정한 그래픽 가속 모듈(1546) 및/또는 그래픽 처리 엔진(1531-1532, N) 특유이다. 이것은 그래픽 처리 엔진(1531-1532, N)이 작업을 수행하기 위해 요구되는 모든 정보를 포함하거나 완료될 작업의 커맨드 큐를 애플리케이션이 셋업한 메모리 위치에 대한 포인터일 수 있다.
도 15e는 공유된 모델의 예시적인 한 실시예에 대한 추가 상세사항을 나타낸다. 이 실시예는 프로세스 요소 목록(1599)이 저장되는 하이퍼바이저 실제 주소 공간(1598)을 포함한다. 하이퍼바이저 실제 주소 공간(1598)은, 운영 체제(1595)를 위해 그래픽 가속 모듈 엔진을 가상화하는 하이퍼바이저(1596)를 통해 액세스가능하다.
적어도 하나의 실시예에서, 공유된 프로그래밍 모델은, 시스템 내의 파티션들 전체 또는 서브세트로부터의 프로세스의 전체 또는 서브세트가 그래픽 가속 모듈(1546)을 이용하는 것을 허용한다. 그래픽 가속 모듈(1546)이 복수의 프로세스 및 파티션에 의해 공유되는 2개의 프로그래밍 모델이 있다: 시간-슬라이스형 공유식 및 그래픽-지향형 공유식.
이 모델에서, 시스템 하이퍼바이저(1596)는 그래픽 가속 모듈(1546)을 소유하고 그 기능을 모든 운영 체제(1595)에 이용가능하게 만든다. 그래픽 가속 모듈(1546)이 시스템 하이퍼바이저(1596)에 의한 가상화를 지원하기 위해, 그래픽 가속 모듈(1546)은 다음을 준수할 수 있다: 1) 애플리케이션의 잡 요청은 자율적이어야 하거나(즉, 작업들 사이에서 상태가 유지될 필요가 없음), 그래픽 가속 모듈(1546)은 컨텍스트 저장 및 복원 메커니즘을 제공해야 한다. 2) 애플리케이션의 잡 요청이 임의의 변환 에러를 포함한 명시된 시간량 내에 완료되는 것이 그래픽 가속 모듈(1546)에 의해 보장되거나, 그래픽 가속 모듈(1546)은 작업 처리를 선점하는 능력을 제공한다. 3) 그래픽 가속 모듈(1546)은 지향성 공유된 프로그래밍 모델에서 동작할 때 프로세스들 사이의 공정성을 보장해야 한다.
적어도 하나의 실시예에서, 애플리케이션(1580)은, 그래픽 가속 모듈(1546) 유형, 작업 기술자(WD), 권한 마스크 레지스터(AMR) 값, 및 컨텍스트 저장/복원 영역 포인터(CSRP)를 이용하여 운영 체제(1595) 시스템 호출을 수행할 것이 요구된다. 적어도 하나의 실시예에서, 그래픽 가속 모듈(1546) 유형은 시스템 호출을 위한 타깃 가속 기능을 기술한다. 적어도 하나의 실시예에서, 그래픽 가속 모듈(1546) 유형은 시스템-특유의 값일 수 있다. 적어도 하나의 실시예에서, WD는 그래픽 가속 모듈(1546)을 위해 특별히 포멧되고 그래픽 가속 모듈(1546) 커맨드, 사용자-정의형 구조에 대한 유효 주소 포인터, 커맨드들의 큐에 대한 유효 주소 포인터, 또는 그래픽 가속 모듈(1546)에 의해 이루어질 작업을 기술하기 위한 기타 임의의 데이터 구조의 형태일 수 있다. 한 실시예에서, AMR 값은, 현재의 프로세스에 이용하기 위한 AMR 상태이다. 적어도 하나의 실시예에서, 운영 체제에 전달된 값은 애플리케이션 설정 AMR과 유사하다. 가속기 통합 회로(1536) 및 그래픽 가속 모듈(1546) 구현들이 UAMOR(User Authority Mask Override Register)를 지원하지 않는 경우, 운영 체제는 하이퍼바이저 호출에서 AMR을 전달하기 전에 현재의 UAMOR 값을 AMR 값에 적용할 수 있다. 하이퍼바이저(1596)는, 선택사항으로서, AMR을 프로세스 요소(1583)에 배치하기 전에 현재의 AMOR(Authority Mask Override Register) 값을 적용할 수 있다. 적어도 하나의 실시예에서, CSRP는, 그래픽 가속 모듈(1546)이 컨텍스트 상태를 저장 및 복원하기 위한 애플리케이션의 유효 주소 공간(1582) 내의 한 영역의 유효 주소를 포함하는 레지스터들(1545) 중 하나이다. 이 포인터는, 잡들 사이에서 상태가 저장될 것이 요구되지 않거나 잡이 선점될 때 선택사항이다. 적어도 하나의 실시예에서, 컨텍스트 저장/복원 영역은 고정된 시스템 메모리일 수 있다.
시스템 호출의 수신시, 운영 체제(1595)는 애플리케이션(1580)이 등록되었고 그래픽 가속 모듈(1546)을 이용할 권한이 부여되었음을 검증할 수 있다. 그 다음, 운영 체제(1595)는 표 3에 나타낸 정보로 하이퍼바이저(1596)를 호출한다.
표 3 - OS-대-하이퍼바이저 호출 파라미터들
Figure pat00003
하이퍼바이저 호출의 수신시, 하이퍼바이저(1596)는, 운영 체제(1595)가 등록되었고 그래픽 가속 모듈(1546)을 이용할 권한이 부여되었음을 검증한다. 그 다음, 하이퍼바이저(1596)는, 프로세스 요소(1583)를, 대응하는 그래픽 가속 모듈(1546) 유형에 대한 프로세스 요소 링크된 목록 내에 둔다. 프로세스 요소는 표 4에 나타낸 정보를 포함할 수 있다.
표 4 - 프로세스 요소 정보
Figure pat00004
적어도 하나의 실시예에서, 하이퍼바이저는 복수의 가속기 통합 슬라이스(1590) 레지스터(1545)를 초기화한다.
도 15f에 도시된 바와 같이, 적어도 하나의 실시예에서, 물리적 프로세서 메모리들(1501-1502) 및 GPU 메모리들(1520-1523)에 액세스하는데 이용되는 공통 가상 메모리 주소 공간을 통해 어드레싱가능한 통합 메모리가 이용된다. 이 구현에서, GPU들(1510-1513)에서 실행되는 연산들은, 프로세서 메모리들(1501-1502)에 액세스하기 위해 동일한 가상/유효 메모리 주소 공간을 이용하고 그 반대도 마찬가지이므로, 프로그래밍을 단순화한다. 한 실시예에서, 가상/유효 주소 공간의 제1 부분은 프로세서 메모리(1501)에 할당되고, 제2 부분은 제2 프로세서 메모리(1502)에 할당되고, 제3 부분은 GPU 메모리(1520)에 할당되는 등등의 방식이다. 적어도 하나의 실시예에서, 전체 가상/유효 메모리 공간(때때로 유효 주소 공간이라고 지칭됨)이 프로세서 메모리들(1501-1502) 및 GPU 메모리들(1520-1523) 각각에 걸쳐 분산되어, 임의의 프로세서 또는 GPU가 임의의 물리적 대응하는 메모리에 맵핑된 가상 주소로 그 물리적 메모리에 액세스하는 것을 허용한다.
한 실시예에서, MMU들(1539A-1539E) 중 하나 이상 내의 바이어스/일관성 관리 회로(1594A-1594E)는 하나 이상의 호스트 프로세서(예를 들어, 1505)와 GPU들(1510-1513)의 캐시들 사이의 캐시 일관성을 보장하고 소정 유형들의 데이터가 저장되어야 하는 물리적 메모리들을 나타내는 바이어싱 기술들을 구현한다. 바이어스/일관성 관리 회로(1594A-1594E)의 복수의 인스턴스가 도 15f에 예시되어 있지만, 바이어스/일관성 회로는 하나 이상의 호스트 프로세서(1505)의 MMU 내에 및/또는 가속기 통합 회로(1536) 내에 구현될 수 있다.
한 실시예는 GPU-부착된 메모리(1520-1523)가 시스템 메모리의 일부로서 맵핑되고 공유된 가상 메모리(SVM) 기술을 이용하여 액세스되는 것을 허용하지만, 전체 시스템 캐시 일관성과 연관된 성능 단점을 겪지 않는다. 적어도 하나의 실시예에서, GPU 부착 메모리(1520-1523)가 부담스러운 캐시 일관성 오버헤드 없이 시스템 메모리로서 액세스되는 능력은 GPU 오프로드를 위한 유익한 운영 환경을 제공한다. 이러한 배열은 호스트 프로세서(1505) 소프트웨어가 전통적인 I/O DMA 데이터 사본들의 오버헤드 없이 피연산자들을 셋업하고 계산 결과들에 액세스하는 것을 허용한다. 이러한 전통적인 사본들은, 모두 단순 메모리 액세스에 비해 비효율적인, 드라이버 호출들, 인터럽트들 및 메모리 맵핑된 I/O(MMIO) 액세스들을 포함한다. 적어도 하나의 실시예에서, 캐시 일관성 오버헤드 없이 GPU-부착된 메모리(1520-1523)에 액세스하는 능력은 오프로드된 계산의 실행 시간에 중요할 수 있다. 예를 들어 상당한 스트리밍 기입 메모리 트래픽이 있는 경우, 캐시 일관성 오버헤드는 GPU(1510-1513)가 본 유효 기입 대역폭을 크게 감소시킬 수 있다. 적어도 하나의 실시예에서, 피연산자 셋업의 효율성, 결과 액세스의 효율성, 및 GPU 계산의 효율성은, GPU 오프로드의 효율성을 결정하는데 있어서 한 역할을 할 수 있다.
적어도 하나의 실시예에서, GPU 바이어스 및 호스트 프로세서 바이어스의 선택은, 바이어스 추적기 데이터 구조에 의해 구동된다. 예를 들어, GPU-부착된 메모리 페이지당 1 또는 2비트를 포함하는 페이지-단위 구조(즉, 메모리 페이지 단위로 제어됨)일 수 있는 바이어스 테이블이 이용될 수 있다. 적어도 하나의 실시예에서, 바이어스 테이블은, (예를 들어, 바이어스 테이블의 자주/최근에 이용된 엔트리들을 캐싱하기 위해) GPU(1510-1513)에 바이어스 캐시가 있거나 없이, 하나 이상의 GPU-부착된 메모리(1520-1523)의 도난된 메모리 범위에서 구현될 수 있다. 대안으로서, 전체 바이어스 테이블이 GPU 내에 유지될 수 있다.
적어도 하나의 실시예에서, GPU-부착된 메모리(1520-1523)에 대한 각각의 액세스와 연관된 바이어스 테이블 엔트리는 GPU 메모리로의 실제 액세스 이전에 액세스되어, 다음과 같은 동작들을 야기한다. 먼저, GPU 바이어스에서 자신들의 페이지를 찾는 GPU(1510-1513)로부터의 로컬 요청들은 대응하는 GPU 메모리(1520-1523)에 직접 포워딩된다. 호스트 바이어스에서 자신들의 페이지를 찾는 GPU로부터의 로컬 요청들은 (예를 들어, 위에서 논의된 고속 링크를 통해) 프로세서(1505)에 포워딩된다. 한 실시예에서, 호스트 프로세서 바이어스에서 요청된 페이지를 찾는 프로세서(1505)로부터의 요청들은 보통의 메모리 판독처럼 요청을 완료한다. 대안으로서, GPU-바어이스된 페이지로 향하는 요청들은 GPU(1510-1513)에 포워딩될 수 있다. 적어도 하나의 실시예에서, GPU는, 페이지를 현재 이용하고 있지 않다면 페이지를 호스트 프로세서 바이어스로 전환할 수 있다. 적어도 하나의 실시예에서, 페이지의 바이어스 상태는, 소프트웨어 기반 메커니즘, 하드웨어 지원형 소프트웨어 기반 메커니즘, 또는 제한된 세트의 사례들에 대해, 순수 하드웨어 기반 메커니즘에 의해 변경될 수 있다.
바이어스 상태를 변경하기 위한 한 메커니즘은, API 호출(예를 들어, OpenCL)을 이용하며, 이 API 호출은, 차례로, GPU의 디바이스 드라이버를 호출하고, 디바이스 드라이버는 메시지를 GPU에 전송하여(또는 커맨드 기술자를 대기열에 넣어) 바이어스 상태를 변경할 것을 지시하고, 일부 전환에 대해서는, 호스트에서 캐시 플러싱 동작을 수행한다. 적어도 하나의 실시예에서, 캐시 플러싱 동작은 호스트 프로세서(1505) 바이어스로부터 GPU 바이어스로의 전환에 대해 이용되지만 그 반대의 전환에 대해서는 아니다.
한 실시예에서, 캐시 일관성은, GPU-바이어스된 페이지들이 일시적으로 호스트 프로세서(1505)에 의해 캐싱될 수 없게 함으로써 유지된다. 이들 페이지들에 액세스하기 위해, 프로세서(1505)는 GPU(1510)에서의 액세스를 요청할 수 있고, GPU(1510)는 즉시 액세스를 허용하거나 허용하지 않을 수 있다. 따라서, 프로세서(1505)와 GPU(1510) 사이의 통신을 감소시키기 위해, GPU-바이어스된 페이지들이 호스트 프로세서(1505)가 아니라 GPU에 의해 요구되는 것들이거나 그 반대임을 보장하는 것이 유리하다.
추론 및/또는 훈련 로직(915)은 하나 이상의 실시예를 수행하는데 이용된다. 추론 및/또는 훈련 로직(915)에 관한 상세사항은 도 9a 및/또는 도 9b와 관련하여 아래에 제공된다.
적어도 하나의 실시예에서, 이러한 컴포넌트들은, 더 낮은 프레임 레이트 비디오의 프레임들로부터 더 높은 프레임 레이트 비디오를 생성하는 것 등의, 하나 이상의 신경망을 이용하여 향상된 비디오를 생성하는데 이용될 수 있다.
도 16은, 여기서 설명된 다양한 실시예에 따른, 하나 이상의 IP 코어를 이용하여 제작될 수 있는 예시적인 집적 회로들 및 연관된 그래픽 프로세서들을 나타낸다. 도시된 것에 추가하여, 추가적인 그래픽 프로세서들/코어들, 주변기기 인터페이스 제어기들, 또는 범용 프로세서 코어들을 포함한, 다른 로직 및 회로들이 적어도 하나의 실시예에 포함될 수 있다.
도 16은, 적어도 하나의 실시예에 따른, 하나 이상의 IP 코어를 이용하여 제작될 수 있는 한 예시적인 시스템 온 칩 집적 회로(1600)를 나타내는 블록도이다. 적어도 하나의 실시예에서, 집적 회로(1600)는, 하나 이상의 애플리케이션 프로세서(들)(1605)(예를 들어, CPU), 적어도 하나의 그래픽 프로세서(1610)를 포함하고, 이미지 프로세서(1615) 및/또는 비디오 프로세서(1620)를 추가로 포함할 수 있으며, 이들 중 임의의 것은 모듈식 IP 코어일 수 있다. 적어도 하나의 실시예에서, 집적 회로(1600)는, USB 제어기(1625), UART 제어기(1630), SPI/SDIO 제어기(1635), 및 I2S/I2C 제어기(1640)를 포함한 주변 또는 버스 로직을 포함한다. 적어도 하나의 실시예에서, 집적 회로(1600)는, 고화질 멀티미디어 인터페이스(HDMI) 제어기(1650) 및 모바일 산업 프로세서 인터페이스(MIPI) 디스플레이 인터페이스(1655) 중 하나 이상에 결합된 디스플레이 디바이스(1645)를 포함할 수 있다. 적어도 하나의 실시예에서, 스토리지는, 플래시 메모리 및 플래시 메모리 제어기를 포함하는 플래시 메모리 서브시스템(1660)에 의해 제공될 수 있다. 적어도 하나의 실시예에서, 메모리 인터페이스는, SDRAM 또는 SRAM 메모리 디바이스들로의 액세스를 위한 메모리 제어기(1665)를 통해 제공될 수 있다. 적어도 하나의 실시예에서, 일부 집적 회로는 임베디드 보안 엔진(1670)을 추가로 포함한다.
추론 및/또는 훈련 로직(915)은 하나 이상의 실시예와 연관된 추론 및/또는 훈련 연산들을 수행하는데 이용된다. 추론 및/또는 훈련 로직(915)에 관한 상세사항은 도 9a 및/또는 도 9b와 관련하여 아래에 제공된다. 적어도 하나의 실시예에서, 추론 및/또는 훈련 로직(915)은, 신경망 훈련 연산들, 신경망 기능들 및/또는 아키텍쳐들, 또는 여기서 설명된 신경망 이용 사례들을 이용하여 계산된 가중치 파라미터들에 적어도 부분적으로 기초하여 연산들을 추론하거나 예측하기 위해 집적 회로(1600)에서 이용될 수 있다.
적어도 하나의 실시예에서, 이러한 컴포넌트들은, 더 낮은 프레임 레이트 비디오의 프레임들로부터 더 높은 프레임 레이트 비디오를 생성하는 것 등의, 하나 이상의 신경망을 이용하여 향상된 비디오를 생성하는데 이용될 수 있다.
도 17a 및 도 17b는, 여기서 설명된 다양한 실시예에 따른, 하나 이상의 IP 코어를 이용하여 제작될 수 있는 예시적인 집적 회로들 및 연관된 그래픽 프로세서들을 나타낸다. 도시된 것에 추가하여, 추가적인 그래픽 프로세서들/코어들, 주변기기 인터페이스 제어기들, 또는 범용 프로세서 코어들을 포함한, 다른 로직 및 회로들이 적어도 하나의 실시예에 포함될 수 있다.
도 17a 내지 도 17b는, 여기서 설명된 실시예들에 따른, SoC 내에서의 이용을 위한 예시적인 그래픽 프로세서들을 나타내는 블록도들이다. 도 17a는, 적어도 하나의 실시예에 따른, 하나 이상의 IP 코어를 이용하여 제작될 수 있는 시스템 온 칩 집적 회로의 한 예시적인 그래픽 프로세서(1710)를 나타낸다. 도 17b는, 적어도 하나의 실시예에 따른, 하나 이상의 IP 코어를 이용하여 제작될 수 있는 시스템 온 칩 집적 회로의 추가적인 예시적인 그래픽 프로세서(1740)를 나타낸다. 적어도 하나의 실시예에서, 도 17a의 그래픽 프로세서(1710)는 저전력 그래픽 프로세서 코어이다. 적어도 하나의 실시예에서, 도 17b의 그래픽 프로세서(1740)는 더 높은 성능의 그래픽 프로세서 코어이다. 적어도 하나의 실시예에서, 그래픽 프로세서들(1710, 1740) 각각은, 도 16의 그래픽 프로세서(1610)의 변형들일 수 있다.
적어도 하나의 실시예에서, 그래픽 프로세서(1710)는, 정점 프로세서(1705) 및 하나 이상의 단편 프로세서(들)(1715A-1715N)(예를 들어, 1715A, 1715B, 1715C, 1715D, 내지 1715N-1, 및 1715N)를 포함한다. 적어도 하나의 실시예에서, 그래픽 프로세서(1710)는, 정점 프로세서(1705)가 정점 셰이더 프로그램들에 대한 연산들을 실행하도록 최적화되는 반면, 하나 이상의 단편 프로세서(들)(1715A-1715N)는 단편 또는 픽셀 셰이더 프로그램들에 대한 단편(예를 들어, 픽셀) 셰이딩 연산들을 실행하도록, 별개의 로직을 통해 상이한 셰이더 프로그램들을 실행할 수 있다. 적어도 하나의 실시예에서, 정점 프로세서(1705)는 3D 그래픽 파이프라인의 정점 처리 스테이지를 수행하고 프리미티브들 및 정점 데이터를 생성한다. 적어도 하나의 실시예에서, 단편 프로세서(들)(1715A-1715N)는 정점 프로세서(1705)에 의해 생성된 프리미티브 및 정점 데이터를 이용하여 디스플레이 디바이스 상에 디스플레이되는 프레임버퍼를 생성한다. 적어도 하나의 실시예에서, 단편 프로세서(들)(1715A-1715N)는, Direct 3D API에서 제공되는 픽셀 셰이더 프로그램과 유사한 연산들을 수행하는데 이용될 수 있는, OpenGL API에서 제공되는 단편 셰이더 프로그램을 실행하도록 최적화된다.
적어도 하나의 실시예에서, 그래픽 프로세서(1710)는, 하나 이상의 메모리 관리 유닛(MMU)(1720A-1720B), 캐시(들)(1725A-1725B), 및 회로 인터커넥트(들)(1730A-1730B)를 추가로 포함한다. 적어도 하나의 실시예에서, 하나 이상의 MMU(들)(1720A-1720B)는, 하나 이상의 캐시(들)(1725A-1725B)에 저장된 정점 또는 이미지/텍스쳐 데이터 외에도, 메모리에 저장된 정점 또는 이미지/텍스쳐 데이터를 참조할 수 있는, 정점 프로세서(1705) 및/또는 단편 프로세서(들)(1715A-1715N)를 포함한 그래픽 프로세서(1710)에 대한 가상 대 물리 주소 맵핑을 제공한다. 적어도 하나의 실시예에서, 하나 이상의 MMU(들)(1720A-1720B)는, 도 16의 하나 이상의 애플리케이션 프로세서(들)(1605), 이미지 프로세서(1615), 및/또는 비디오 프로세서(1620)와 연관된 하나 이상의 MMU를 포함하는 시스템 내의 다른 MMU들과 동기화되어, 각각의 프로세서(1605-1620)가 공유된 또는 통합된 가상 메모리 시스템에 참여할 수 있게 할 수 있다. 적어도 하나의 실시예에서, 하나 이상의 회로 인터커넥트(들)(1730A-1730B)는 그래픽 프로세서(1710)가 SoC의 내부 버스를 통해 또는 직접 접속을 통해 SoC 내의 다른 IP 코어들과 인터페이스할 수 있게 한다.
적어도 하나의 실시예에서, 그래픽 프로세서(1740)는, 도 17a의 그래픽 프로세서(1710)의 하나 이상의 MMU(들)(1720A-1720B), 캐시(들)(1725A-1725B), 및 회로 인터커넥트(들)(1730A-1730B)를 포함한다. 적어도 하나의 실시예에서, 그래픽 프로세서(1740)는 하나 이상의 셰이더 코어(들)(1755A-1755N)(예를 들어, 1755A, 1755B, 1755C, 1755D, 1755E, 1755F, 내지 1755N-1, 1755N)를 포함하고, 이 셰이더 코어(들)는, 정점 셰이더들, 단편 셰이더들, 및/또는 계산 셰이더들을 구현하기 위한 셰이더 프로그램 코드를 포함한, 단일 코어 또는 유형 또는 코어가 모든 유형의 프로그래밍가능한 셰이더 코드를 실행할 수 있는 통합된 셰이더 코어 아키텍쳐를 제공한다. 적어도 하나의 실시예에서, 셰이더 코어의 수는 변할 수 있다. 적어도 하나의 실시예에서, 그래픽 프로세서(1740)는, 하나 이상의 셰이더 코어(1755A-1755N)에 실행 스레드를 디스패치하는 스레드 디스패처로서 작용하는 코어간 태스크 관리자(1745), 및 예를 들어 장면 내의 로컬 공간적 일관성을 이용하거나 내부 캐시들의 이용을 최적화하기 위해 장면에 대한 렌더링 연산들이 이미지 공간에서 세분되는, 타일 기반의 렌더링에 대한 타일링 연산들을 가속하는 타일링 유닛(1758)을 포함한다.
추론 및/또는 훈련 로직(915)은 하나 이상의 실시예와 연관된 추론 및/또는 훈련 연산들을 수행하는데 이용된다. 추론 및/또는 훈련 로직(915)에 관한 상세사항은 도 9a 및/또는 도 9b와 관련하여 아래에 제공된다. 적어도 하나의 실시예에서, 추론 및/또는 훈련 로직(915)은, 신경망 훈련 연산들, 신경망 기능들 및/또는 아키텍쳐들, 또는 여기서 설명된 신경망 이용 사례들을 이용하여 계산된 가중치 파라미터들에 적어도 부분적으로 기초하여 연산들을 추론하거나 예측하기 위해 집적 회로(17A 및/또는 17B)에서 이용될 수 있다.
적어도 하나의 실시예에서, 이러한 컴포넌트들은, 더 낮은 프레임 레이트 비디오의 프레임들로부터 더 높은 프레임 레이트 비디오를 생성하는 것 등의, 하나 이상의 신경망을 이용하여 향상된 비디오를 생성하는데 이용될 수 있다.
도 18a 및 도 18b는 여기서 설명된 실시예들에 따른 추가적인 예시적인 그래픽 프로세서 로직을 나타낸다. 도 18a는, 적어도 하나의 실시예에서, 도 16의 그래픽 프로세서(1610) 내에 포함될 수 있고, 적어도 하나의 실시예에서 도 17b에서와 같이 통합된 셰이더 코어(1755A-1755N)일 수 있는 그래픽 코어(1800)를 나타낸다. 도 18b는, 적어도 하나의 실시예에서 멀티칩 모듈에 배치하기에 적합한 고병렬 범용 그래픽 처리 유닛(1830)을 나타낸다.
적어도 하나의 실시예에서, 그래픽 코어(1800)는 그래픽 코어(1800) 내의 실행 자원들에 공통인 공유된 명령어 캐시(1802), 텍스쳐 유닛(1818), 및 캐시/공유된 메모리(1820)를 포함한다. 적어도 하나의 실시예에서, 그래픽 코어(1800)는, 각각의 코어에 대한 복수의 슬라이스(1801A-1801N) 또는 파티션을 포함할 수 있고, 그래픽 프로세서는 그래픽 코어(1800)의 복수의 인스턴스를 포함할 수 있다. 슬라이스들(1801A-1801N)은, 로컬 명령어 캐시(1804A-1804N), 스레드 스케쥴러(1806A-1806N), 스레드 디스패처(1808A-1808N), 및 한 세트의 레지스터들(1810A-1810N)을 포함하는 지원 로직을 포함할 수 있다. 적어도 하나의 실시예에서, 슬라이스들(1801A-1801N)은, 한 세트의 추가 기능 유닛(AFU)(1812A-1812N), 부동 소수점 유닛(FPU)(1814A-1814N), 정수 산술 로직 유닛(ALU)(1816-1816N), 주소 계산 유닛(ACU)(1813A-1813N), 배정도 부동 소수점 유닛(DPFPU)(1815A-1815N), 및 행렬 처리 유닛(MPU)(1817A-1817N)을 포함할 수 있다.
적어도 하나의 실시예에서, FPU들(1814A-1814N)은, 단정도(single-precision)(32비트) 및 반정밀도(half-precision)(16비트) 부동 소수점 연산들을 수행할 수 있는 반면, DPFPU들(1815A-1815N)은 배정도(double precision)(64비트) 부동 소수점 연산들을 수행할 수 있다. 적어도 하나의 실시예에서, ALU들(1816A-1816N)은, 8비트, 16비트 및 32비트 정밀도에서 가변 정밀도 정수 연산을 수행할 수 있고 혼합된 정밀도 연산들을 위해 구성될 수 있다. 적어도 하나의 실시예에서, MPU들(1817A-1817N)은 또한, 반정밀도 부동 소수점 및 8비트 정수 연산들을 포함한, 혼합 정밀도 행렬 연산들을 위해 구성될 수 있다. 적어도 하나의 실시예에서, MPU들(1817A-1817N)은, 가속된 일반 행렬 대 행렬 곱셈(GEMM; general matrix to matrix multiplication)에 대한 지원을 가능케하는 것을 포함한, 머신 학습 애플리케이션 프레임워크들을 가속하기 위해 다양한 행렬 연산을 수행할 수 있다. 적어도 하나의 실시예에서, AFU들(1812A-1812N)은, 삼각 연산들(예를 들어, 사인, 코사인 등)을 포함한, 부동 소수점 또는 정수 유닛들에 의해 지원되지 않는 추가적인 로직 연산들을 수행할 수 있다.
추론 및/또는 훈련 로직(915)은 하나 이상의 실시예와 연관된 추론 및/또는 훈련 연산들을 수행하는데 이용된다. 추론 및/또는 훈련 로직(915)에 관한 상세사항은 도 9a 및/또는 도 9b와 관련하여 아래에 제공된다. 적어도 하나의 실시예에서, 추론 및/또는 훈련 로직(915)은, 신경망 훈련 연산들, 신경망 기능들 및/또는 아키텍쳐들, 또는 여기서 설명된 신경망 이용 사례들을 이용하여 계산된 가중치 파라미터들에 적어도 부분적으로 기초하여 연산들을 추론하거나 예측하기 위해 그래픽 코어(1800)에서 이용될 수 있다.
적어도 하나의 실시예에서, 이러한 컴포넌트들은, 더 낮은 프레임 레이트 비디오의 프레임들로부터 더 높은 프레임 레이트 비디오를 생성하는 것 등의, 하나 이상의 신경망을 이용하여 향상된 비디오를 생성하는데 이용될 수 있다.
도 18b는, 적어도 하나의 실시예에서, 그래픽 처리 유닛들의 어레이에 의해 수행될 고도의 병렬 계산 연산들을 가능케하도록 구성될 수 있는 범용 처리 유닛(GPGPU)(1830)을 나타낸다. 적어도 하나의 실시예에서, GPGPU(1830)는, GPGPU(1830)의 다른 인스턴스들에 직접 링크되어 멀티GPU 클러스터를 생성하여 심층 신경망들에 대한 훈련 속도를 개선할 수 있다. 적어도 하나의 실시예에서, GPGPU(1830)는 호스트 프로세서와의 접속을 가능케하는 호스트 인터페이스(1832)를 포함한다. 적어도 하나의 실시예에서, 호스트 인터페이스(1832)는 PCI Express 인터페이스이다. 적어도 하나의 실시예에서, 호스트 인터페이스(1832)는 벤더 특유의 통신 인터페이스 또는 통신 패브릭일 수 있다. 적어도 하나의 실시예에서, GPGPU(1830)는 호스트 프로세서로부터 커맨드들을 수신하고 전역적 스케쥴러(1834)를 이용하여 이들 커맨드들과 연관된 실행 스레드들을 한 세트의 컴퓨팅 클러스터들(1836A-1836H)에 분배한다. 적어도 하나의 실시예에서, 컴퓨팅 클러스터들(1836A-1836H)은 캐시 메모리(1838)를 공유한다. 적어도 하나의 실시예에서, 캐시 메모리(1838)는 컴퓨팅 클러스터들(1836A-1836H) 내의 캐시 메모리들을 위한 상위 레벨 캐시로서 역할할 수 있다.
적어도 하나의 실시예에서, GPGPU(1830)는 한 세트의 메모리 제어기들(1842A-1842B)을 통해 컴퓨팅 클러스터들(1836A-1836H)과 결합된 메모리(1844A-1844B)를 포함한다. 적어도 하나의 실시예에서, 메모리(1844A-1844B)는, 그래픽 더블 데이터 레이트(GDDR) 메모리를 포함한 동기식 그래픽 랜덤 액세스 메모리(SGRAM) 등의, 동적 랜덤 액세스 메모리(DRAM) 또는 그래픽 랜덤 액세스 메모리를 포함하는 다양한 유형의 메모리 디바이스를 포함할 수 있다.
적어도 하나의 실시예에서, 컴퓨팅 클러스터들(1836A-1836H) 각각은, 머신 학습 계산에 적합한 정밀도 범위에서 계산 연산들을 수행할 수 있는 복수의 유형의 정수 및 부동 소수점 로직 유닛들을 포함할 수 있는, 도 18a의 그래픽 코어(1800) 등의 한 세트의 그래픽 코어들을 포함한다. 예를 들어, 적어도 하나의 실시예에서, 컴퓨팅 클러스터들(1836A-1836H) 각각 내의 부동 소수점 유닛들의 적어도 서브세트는 16비트 또는 32비트 부동 소수점 연산들을 수행하도록 구성될 수 있는 반면, 부동 소수점 유닛들의 상이한 서브세트는 64비트 부동 소수점 연산들을 수행하도록 구성될 수 있다.
적어도 하나의 실시예에서, GPGPU(1830)의 복수의 인스턴스는 컴퓨팅 클러스터로서 동작하도록 구성될 수 있다. 적어도 하나의 실시예에서, 동기화 및 데이터 교환을 위해 컴퓨팅 클러스터들(1836A-1836H)에 의해 이용되는 통신은 실시예들마다 변한다. 적어도 하나의 실시예에서, GPGPU(1830)의 복수의 인스턴스는 호스트 인터페이스(1832)를 통해 통신한다. 적어도 하나의 실시예에서, GPGPU(1830)는, GPGPU(1830)의 다른 인스턴스들에 대한 직접 접속을 가능케하는 GPU 링크(1840)와 GPGPU(1830)를 결합하는 I/O 허브(1839)를 포함한다. 적어도 하나의 실시예에서, GPU 링크(1840)는 GPGPU(1830)의 복수의 인스턴스들 사이의 통신 및 동기화를 가능케하는 전용 GPU-대-GPU 브릿지에 결합된다. 적어도 하나의 실시예에서, GPU 링크(1840)는 다른 GPGPU들 또는 병렬 프로세서들에 데이터를 전송 및 수신하기 위해 고속 인터커넥트와 결합한다. 적어도 하나의 실시예에서, GPGPU(1830)의 복수의 인스턴스는 별개의 데이터 처리 시스템에 위치하고 호스트 인터페이스(1832)를 통해 액세스가능한 네트워크 디바이스를 통해 통신한다. 적어도 하나의 실시예 GPU에서, 링크(1840)는, 호스트 인터페이스(1832)에 추가로 또는 이에 대한 대안으로서 호스트 프로세서에 대한 접속을 가능케하도록 구성될 수 있다.
적어도 하나의 실시예에서, GPGPU(1830)는 신경망들을 훈련시키도록 구성될 수 있다. 적어도 하나의 실시예에서, GPGPU(1830)는 추론 플랫폼 내에서 이용될 수 있다. GPGPU(1830)가 추론에 이용되는 적어도 하나의 실시예에서, GPGPU는, 신경망을 훈련시키기 위해 GPGPU가 이용될 때와 비교하여 더 적은 수의 컴퓨팅 클러스터들(1836A-1836H)을 포함할 수 있다. 적어도 하나의 실시예에서, 메모리(1844A-1844B)와 연관된 메모리 기술은 추론 구성과 훈련 구성간에 상이할 수 있고, 훈련 구성에 할당된 더 높은 대역폭의 메모리 기술이 이용된다. 적어도 하나의 실시예에서, GPGPU(1830)의 추론 구성은 추론 특유의 명령어들을 지원할 수 있다. 예를 들어, 적어도 하나의 실시예에서, 추론 구성은, 배치된 신경망들에 대한 추론 연산들 동안 이용될 수 있는 하나 이상의 8비트 정수 내적 명령어들에 대한 지원을 제공할 수 있다.
추론 및/또는 훈련 로직(915)은 하나 이상의 실시예와 연관된 추론 및/또는 훈련 연산들을 수행하는데 이용된다. 추론 및/또는 훈련 로직(915)에 관한 상세사항은 도 9a 및/또는 도 9b와 관련하여 아래에 제공된다. 적어도 하나의 실시예에서, 추론 및/또는 훈련 로직(915)은, 신경망 훈련 연산들, 신경망 기능들 및/또는 아키텍쳐들, 또는 여기서 설명된 신경망 이용 사례들을 이용하여 계산된 가중치 파라미터들에 적어도 부분적으로 기초하여 연산들을 추론하거나 예측하기 위해 GPGPU(1830)에서 이용될 수 있다.
적어도 하나의 실시예에서, 이러한 컴포넌트들은, 더 낮은 프레임 레이트 비디오의 프레임들로부터 더 높은 프레임 레이트 비디오를 생성하는 것 등의, 하나 이상의 신경망을 이용하여 향상된 비디오를 생성하는데 이용될 수 있다.
도 19는 적어도 하나의 실시예에 따른 컴퓨팅 시스템(1900)을 나타내는 블록도이다. 적어도 하나의 실시예에서, 컴퓨팅 시스템(1900)은, 하나 이상의 프로세서(들)(1902), 및 메모리 허브(1905)를 포함할 수 있는 상호접속 경로를 통해 통신하는 시스템 메모리(1904)를 갖는 처리 서브시스템(1901)을 포함한다. 적어도 하나의 실시예에서, 메모리 허브(1905)는 칩셋 컴포넌트 내의 별개의 컴포넌트일 수 있거나 하나 이상의 프로세서(들)(1902) 내에 통합될 수 있다. 적어도 하나의 실시예에서, 메모리 허브(1905)는 통신 링크(1906)를 통해 I/O 서브시스템(1911)과 결합된다. 적어도 하나의 실시예에서, I/O 서브시스템(1911)은 컴퓨팅 시스템(1900)이 하나 이상의 입력 디바이스(들)(1908)로부터 입력을 수신할 수 있게 하는 I/O 허브(1907)를 포함한다. 적어도 하나의 실시예에서, I/O 허브(1907)는 하나 이상의 프로세서(들)(1902)에 포함될 수 있는 디스플레이 제어기가 하나 이상의 디스플레이 디바이스(들)(1910A)에 출력들을 제공하는 것을 가능케할 수 있다. 적어도 하나의 실시예에서, I/O 허브(1907)와 결합된 하나 이상의 디스플레이 디바이스(들)(1910A)는, 로컬, 내부, 또는 임베디드 디스플레이 디바이스를 포함할 수 있다.
적어도 하나의 실시예에서, 처리 서브시스템(1901)은 버스 또는 기타의 통신 링크(1913)를 통해 메모리 허브(1905)에 결합된 하나 이상의 병렬 프로세서(들)(1912)를 포함한다. 적어도 하나의 실시예에서, 통신 링크(1913)는 PCI Express 등의 그러나 이것으로 제한되지 않는 통신 링크 기술들 또는 프로토콜들 기반의 임의의 수의 표준들 중 하나일 수 있거나, 벤더 특유의 통신 인터페이스 또는 통신 패브릭일 수 있다. 적어도 하나의 실시예에서, 하나 이상의 병렬 프로세서(들)(1912)는, 많은 통합된 코어(MIC) 프로세서 등의, 많은 수의 처리 코어 및/또는 처리 클러스터를 포함할 수 있는 계산적으로 집중된 병렬 또는 벡터 처리 시스템을 형성한다. 적어도 하나의 실시예에서, 하나 이상의 병렬 프로세서(들)(1912)는 I/O 허브(1907)를 통해 결합된 하나 이상의 디스플레이 디바이스(들)(1910A) 중 하나에 픽셀들을 출력할 수 있는 그래픽 처리 서브시스템을 형성한다. 적어도 하나의 실시예에서, 하나 이상의 병렬 프로세서(들)(1912)는 또한, 디스플레이 제어기, 및 하나 이상의 디스플레이 디바이스(들)(1910B)로의 직접 접속을 가능케하는 디스플레이 인터페이스(미도시)를 포함할 수 있다.
적어도 하나의 실시예에서, 시스템 저장 유닛(1914)은 I/O 허브(1907)에 접속되어 컴퓨팅 시스템(1900)을 위한 저장 메커니즘을 제공할 수 있다. 적어도 하나의 실시예에서, I/O 스위치(1916)는, 플랫폼(들) 내에 통합될 수 있는 네트워크 어댑터(1918) 및/또는 무선 네트워크 어댑터(1919) 및 하나 이상의 애드인 디바이스(들)(1920)를 통해 추가될 수 있는 다양한 기타의 디바이스 등의 기타의 컴포넌트들과 I/O 허브(1907) 사이의 접속들을 가능케하는 인터페이스 메커니즘을 제공하는데 이용될 수 있다. 적어도 하나의 실시예에서, 네트워크 어댑터(1918)는 Ethernet 어댑터 또는 다른 유선 네트워크 어댑터일 수 있다. 적어도 하나의 실시예에서, 무선 네트워크 어댑터(1919)는, Wi-Fi, Bluetooth, 근접장 통신(NFC), 또는 하나 이상의 무선 라디오를 포함하는 기타의 네트워크 디바이스 중 하나 이상을 포함할 수 있다.
적어도 하나의 실시예에서, 컴퓨팅 시스템(1900)은, USB 또는 다른 포트 접속들, 광학 저장 드라이브들, 비디오 캡처 디바이스들 등을 포함한 명시적으로 도시되지 않은 기타의 컴포넌트들을 포함할 수 있고, I/O 허브(1907)에도 접속될 수 있다. 적어도 하나의 실시예에서, 도 19의 다양한 컴포넌트를 상호접속하는 통신 경로들은, PCI(Peripheral Component Interconnect) 기반 프로토콜(예를 들어, PCI-Express), 또는 NV-Link 고속 인터커넥트 또는 인터커넥트 프로토콜들 등의, 기타의 버스 또는 포인트-투-포인트 통신 인터페이스들 및/또는 프로토콜(들) 등의, 임의의 적절한 프로토콜을 이용하여 구현될 수 있다.
적어도 하나의 실시예에서, 하나 이상의 병렬 프로세서(들)(1912)는, 예를 들어 비디오 출력 회로를 포함하는 그래픽 및 비디오 처리에 최적화된 회로를 통합하고, 그래픽 처리 유닛(GPU)을 구성한다. 적어도 하나의 실시예에서, 하나 이상의 병렬 프로세서(들)(1912)는 범용 처리를 위해 최적화된 회로를 포함한다. 적어도 하나의 실시예에서, 컴퓨팅 시스템(1900)의 컴포넌트들은 단일 집적 회로 상의 하나 이상의 다른 시스템 요소와 통합될 수 있다. 예를 들어, 적어도 하나의 실시예에서, 하나 이상의 병렬 프로세서(들)(1912), 메모리 허브(1905), 프로세서(들)(1902), 및 I/O 허브(1907)는 시스템 온 칩(SoC) 집적 회로에 통합될 수 있다. 적어도 하나의 실시예에서, 컴퓨팅 시스템(1900)의 컴포넌트들은 단일 팩키지 내에 통합되어 시스템인 팩키지(SIP; system in package) 구성을 형성할 수 있다. 적어도 하나의 실시예에서, 컴퓨팅 시스템(1900)의 컴포넌트의 적어도 일부는 멀티칩 모듈(MCM)에 통합될 수 있고, 멀티칩 모듈은 다른 멀티칩 모듈들과 상호접속되어 모듈식 컴퓨팅 시스템이 될 수 있다.
추론 및/또는 훈련 로직(915)은 하나 이상의 실시예와 연관된 추론 및/또는 훈련 연산들을 수행하는데 이용된다. 추론 및/또는 훈련 로직(915)에 관한 상세사항은 도 9a 및/또는 도 9b와 관련하여 아래에 제공된다. 적어도 하나의 실시예에서, 추론 및/또는 훈련 로직(915)은, 신경망 훈련 연산들, 신경망 기능들 및/또는 아키텍쳐들, 또는 여기서 설명된 신경망 이용 사례들을 이용하여 계산된 가중치 파라미터들에 적어도 부분적으로 기초하여 연산들을 추론하거나 예측하기 위해 시스템 도 1900에서 이용될 수 있다.
적어도 하나의 실시예에서, 이러한 컴포넌트들은, 더 낮은 프레임 레이트 비디오의 프레임들로부터 더 높은 프레임 레이트 비디오를 생성하는 것 등의, 하나 이상의 신경망을 이용하여 향상된 비디오를 생성하는데 이용될 수 있다.
프로세서들
도 20a는 적어도 하나의 실시예에 따른 병렬 프로세서(2000)를 나타낸다. 적어도 하나의 실시예에서, 병렬 프로세서(2000)의 다양한 컴포넌트는, 프로그래머블 프로세서들, 주문형 집적 회로들(ASIC), 또는 FPGA(field programmable gate array)들 등의 하나 이상의 집적 회로 디바이스를 이용하여 구현될 수 있다. 적어도 하나의 실시예에서, 예시된 병렬 프로세서(2000)는 한 예시적인 실시예에 따라 도 19에 도시된 하나 이상의 병렬 프로세서(들)(1912)의 한 변형이다.
적어도 하나의 실시예에서, 병렬 프로세서(2000)는 병렬 처리 유닛(2002)을 포함한다. 적어도 하나의 실시예에서, 병렬 처리 유닛(2002)은, 병렬 처리 유닛(2002)의 다른 인스턴스들을 포함한 다른 디바이스들과의 통신을 가능케하는 I/O 유닛(2004)을 포함한다. 적어도 하나의 실시예에서, I/O 유닛(2004)은 다른 디바이스들에 직접 접속될 수 있다. 적어도 하나의 실시예에서, I/O 유닛(2004)은 메모리 허브(1905) 등의 허브 또는 스위치 인터페이스를 이용하여 다른 디바이스와 접속된다. 적어도 하나의 실시예에서, 메모리 허브(1905)와 I/O 유닛(2004) 사이의 접속들은 통신 링크(1913)를 형성한다. 적어도 하나의 실시예에서, I/O 유닛(2004)은 호스트 인터페이스(2006) 및 메모리 크로스바(2016)와 접속되고, 여기서 호스트 인터페이스(2006)는 처리 연산들을 수행하도록 지시된 커맨드들을 수신하고 메모리 크로스바(2016)는 메모리 연산들을 수행하도록 지시된 커맨드들을 수신한다.
적어도 하나의 실시예에서, 호스트 인터페이스(2006)가 I/O 유닛(2004)을 통해 커맨드 버퍼를 수신할 때, 호스트 인터페이스(2006)는 이들 커맨드들을 수행하기 위한 작업 연산들을 프론트 엔드(2008)에 보낼 수 있다. 적어도 하나의 실시예에서, 프론트 엔드(2008)는 커맨드들 또는 다른 작업 항목들을 처리 클러스터 어레이(2012)에 분배하도록 구성된 스케쥴러(2010)와 결합된다. 적어도 하나의 실시예에서, 스케쥴러(2010)는 태스크들이 처리 클러스터 어레이(2012)에 분배되기 전에 처리 클러스터 어레이(2012)가 적절하게 구성되고 유효한 상태에 있다는 것을 보장한다. 적어도 하나의 실시예에서, 스케쥴러(2010)는 마이크로제어기 상에서 실행되는 펌웨어 로직을 통해 구현된다. 적어도 하나의 실시예에서, 마이크로제어기 구현된 스케쥴러(2010)는, 복잡한 스케쥴링 및 작업 분배 동작들을 거친 및 미세한 세분도로 수행하도록 구성할 수 있어, 처리 어레이(2012)에서 실행되는 스레드들의 신속한 선점 및 컨텍스트 전환을 가능케한다. 적어도 하나의 실시예에서, 호스트 소프트웨어는 복수의 그래픽 처리 도어벨들 중 하나를 통해 처리 어레이(2012) 상의 스케쥴링을 위한 작업부하들을 증명할 수 있다. 적어도 하나의 실시예에서, 작업부하들은 스케쥴러(2010)를 포함하는 마이크로제어기 내의 스케쥴러(2010) 로직에 의해 처리 어레이(2012)에 걸쳐 자동으로 분배될 수 있다.
적어도 하나의 실시예에서, 처리 클러스터 어레이(2012)는 최대 "N"개의 처리 클러스터(예를 들어, 클러스터 2014A, 클러스터 2014B, 내지 클러스터 2014N)를 포함할 수 있다. 적어도 하나의 실시예에서, 처리 클러스터 어레이(2012)의 각각의 클러스터(2014A-2014N)는 많은 수의 동시 스레드를 실행할 수 있다. 적어도 하나의 실시예에서, 스케쥴러(2010)는, 각각의 유형의 프로그램 또는 계산에 대해 발생하는 작업부하에 따라 달라질 수 있는, 다양한 스케쥴링 및/또는 작업 분배 알고리즘을 이용하여 처리 클러스터 어레이(2012)의 클러스터들(2014A-2014N)에 작업을 할당할 수 있다. 적어도 하나의 실시예에서, 스케쥴링은 스케쥴러(2010)에 의해 동적으로 취급될 수 있거나, 처리 클러스터 어레이(2012)에 의한 실행을 위해 구성된 프로그램 로직의 컴파일 동안 컴파일러 로직에 의해 부분적으로 보조받을 수 있다. 적어도 하나의 실시예에서, 처리 클러스터 어레이(2012)의 상이한 클러스터들(2014A-2014N)은, 상이한 유형들의 프로그램들의 처리 또는 상이한 유형들의 계산들의 수행을 위해 할당될 수 있다.
적어도 하나의 실시예에서, 처리 클러스터 어레이(2012)는 다양한 유형의 병렬 처리 동작들을 수행하도록 구성될 수 있다. 적어도 하나의 실시예에서, 처리 클러스터 어레이(2012)는 범용 병렬 컴퓨팅 연산을 수행하도록 구성된다. 예를 들어, 적어도 하나의 실시예에서, 처리 클러스터 어레이(2012)는, 비디오 및/또는 오디오 데이터의 필터링, 물리 연산을 포함한 모델링 연산의 수행, 및 데이터 변환의 수행을 포함한 처리 태스크들을 실행하는 로직을 포함할 수 있다.
적어도 하나의 실시예에서, 처리 클러스터 어레이(2012)는 병렬 그래픽 처리 연산들을 수행하도록 구성된다. 적어도 하나의 실시예에서, 처리 클러스터 어레이(2012)는, 테셀레이션 로직 및 기타의 정점 처리 로직 뿐만 아니라 텍스쳐 연산들을 수행하기 위한 텍스쳐 샘플링 로직을 포함한 그러나 이것으로 제한되지 않는 이러한 그래픽 처리 연산들의 실행을 지원하는 추가 로직을 포함할 수 있다. 적어도 하나의 실시예에서, 처리 클러스터 어레이(2012)는, 정점 셰이더들, 테셀레이션 셰이더들, 지오메트리 셰이더들, 및 픽셀 셰이더들 등의 그러나 이것으로 제한되지 않는 그래픽 처리 관련 셰이더 프로그램들을 실행하도록 구성될 수 있다. 적어도 하나의 실시예에서, 병렬 처리 유닛(2002)은 처리를 위해 I/O 유닛(2004)을 통해 시스템 메모리로부터 데이터를 전송할 수 있다. 적어도 하나의 실시예에서, 처리 동안, 전송된 데이터는 처리 동안 온칩 메모리(예를 들어, 병렬 프로세서 메모리(2022))에 저장될 수 있고, 그 다음 시스템 메모리에 다시 기입될 수 있다.
적어도 하나의 실시예에서, 병렬 처리 유닛(2002)이 그래픽 처리를 수행하는데 이용될 때, 스케쥴러(2010)는 처리 클러스터 어레이(2012)의 복수의 클러스터(2014A-2014N)에 대한 그래픽 처리 연산들의 분배를 더 양호하게 가능케하기 위해 처리 작업부하를 대략 동일한 크기의 태스크들로 나누도록 구성될 수 있다. 적어도 하나의 실시예에서, 처리 클러스터 어레이(2012)의 부분들은 상이한 유형들의 처리를 수행하도록 구성될 수 있다. 예를 들어, 적어도 하나의 실시예에서, 제1 부분은 정점 셰이딩 및 토폴로지 생성을 수행하도록 구성될 수 있고, 제2 부분은 테셀레이션 및 지오메트리 셰이딩을 수행하도록 구성될 수 있고, 제3 부분은, 디스플레이를 위한 렌더링된 이미지를 생성하기 위해 픽셀 셰이딩 또는 기타의 스크린 공간 연산들을 수행하도록 구성될 수 있다. 적어도 하나의 실시예에서, 클러스터(2014A-2014N) 중 하나 이상에 의해 생성된 중간 데이터는 버퍼들에 저장되어 중간 데이터가 추가 처리를 위해 클러스터들(2014A-2014N) 사이에서 전송되는 것을 허용할 수 있다.
적어도 하나의 실시예에서, 처리 클러스터 어레이(2012)는, 프론트 엔드(2008)로부터 처리 작업들을 정의하는 커맨드들을 수신하는 스케쥴러(2010)를 통해 실행될 처리 태스크들을 수신할 수 있다. 적어도 하나의 실시예에서, 처리 태스크들은, 처리될 데이터, 예를 들어 표면(패치) 데이터, 프리미티브 데이터, 정점 데이터, 및/또는 픽셀 데이터의 의 인덱스들뿐만 아니라, 데이터가 어떻게 처리되어야 하는지(예를 들어, 어떤 프로그램이 실행될지)를 정의하는 상태 파라미터들 및 커맨드들을 포함할 수 있다. 적어도 하나의 실시예에서, 스케쥴러(2010)는 태스크들에 대응하는 인덱스들을 인출하도록 구성될 수 있거나 프론트 엔드(2008)로부터 인덱스들을 수신할 수 있다. 적어도 하나의 실시예에서, 프론트 엔드(2008)는, 인입되는 커맨드 버퍼들(예를 들어, 일괄-버퍼들, 푸시 버퍼들 등)에 의해 명시된 작업부하가 개시되기 전에 처리 클러스터 어레이(2012)가 유효한 상태로 구성되게끔 보장하도록 구성될 수 있다.
적어도 하나의 실시예에서, 병렬 처리 유닛(2002)의 하나 이상의 인스턴스 각각은 병렬 프로세서 메모리(2022)와 결합될 수 있다. 적어도 하나의 실시예에서, 병렬 프로세서 메모리(2022)는, 처리 클러스터 어레이(2012)뿐만 아니라 I/O 유닛(2004)으로부터 메모리 요청을 수신할 수 있는 메모리 크로스바(2016)를 통해 액세스될 수 있다. 적어도 하나의 실시예에서, 메모리 크로스바(2016)는 메모리 인터페이스(2018)를 통해 병렬 프로세서 메모리(2022)에 액세스할 수 있다. 적어도 하나의 실시예에서, 메모리 인터페이스(2018)는, 병렬 프로세서 메모리(2022)의 일부(예를 들어, 메모리 유닛)에 각각 결합될 수 있는 복수의 파티션 유닛(예를 들어, 파티션 유닛(2020A), 파티션 유닛(2020B) 내지 파티션 유닛(2020N))을 포함할 수 있다. 적어도 하나의 실시예에서, 제1 파티션 유닛(2020A)은 대응하는 제1 메모리 유닛(2024A)을 갖고, 제2 파티션 유닛(2020B)은 대응하는 메모리 유닛(2024B)을 갖고, 제N 파티션 유닛(2020N)은 대응하는 제N 메모리 유닛(2024N)을 갖도록, 파티션 유닛들(2020A-2020N)의 수는 메모리 유닛들의 수와 동일하게 구성된다. 적어도 하나의 실시예에서, 파티션 유닛(2020A-2020N)의 수는 메모리 디바이스의 수와 동일하지 않을 수 있다.
적어도 하나의 실시예에서, 메모리 유닛들(2024A-2024N)은, 그래픽 더블 데이터 레이트(GDDR) 메모리를 포함한 동기식 그래픽 랜덤 액세스 메모리(SGRAM) 등의, 동적 랜덤 액세스 메모리(DRAM) 또는 그래픽 랜덤 액세스 메모리를 포함하는 다양한 유형의 메모리 디바이스를 포함할 수 있다. 적어도 하나의 실시예에서, 메모리 유닛(2024A-2024N)은 또한, 고대역폭 메모리(HBM)를 포함한 그러나 이것으로 제한되지 않는 3D 스택형 메모리를 포함할 수 있다. 적어도 하나의 실시예에서, 프레임 버퍼들 또는 텍스쳐 맵들 등의 렌더 타깃들은 메모리 유닛들(2024A-2024N)에 걸쳐 저장될 수 있어서, 파티션 유닛들(2020A-2020N)이 병렬 프로세서 메모리(2022)의 가용 대역폭을 효율적으로 이용하기 위해 각각의 렌더 타깃의 부분들에 병렬로 기입하는 것을 허용한다. 적어도 하나의 실시예에서, 병렬 프로세서 메모리(2022)의 로컬 인스턴스는, 로컬 캐시 메모리와 연계하여 시스템 메모리를 이용하는 통합된 메모리 설계를 위해 제외될 수 있다.
적어도 하나의 실시예에서, 처리 클러스터 어레이(2012)의 클러스터들(2014A-2014N) 중 임의의 하나는 병렬 프로세서 메모리(2022) 내의 메모리 유닛들(2024A-2024N) 중 임의의 것에 기입될 데이터를 처리할 수 있다. 적어도 하나의 실시예에서, 메모리 크로스바(2016)는, 각각의 클러스터(2014A-2014N)의 출력을, 임의의 파티션 유닛(2020A-2020N)에 또는 출력에 관한 추가 처리 동작을 수행할 수 있는 또 다른 클러스터(2014A-2014N)에 전송하도록 구성될 수 있다. 적어도 하나의 실시예에서, 각각의 클러스터(2014A-2014N)는 다양한 외부 메모리 디바이스로부터 판독하거나 기입하기 위해 메모리 크로스바(2016)를 통해 메모리 인터페이스(2018)와 통신할 수 있다. 적어도 하나의 실시예에서, 메모리 크로스바(2016)는, I/O 유닛(2004)과 통신하기 위한 메모리 인터페이스(2018)에 대한 접속뿐만 아니라, 병렬 프로세서 메모리(2022)의 로컬 인스턴스에 대한 접속을 갖고 있어서, 상이한 처리 클러스터들(2014A-2014N) 내의 처리 유닛들이 병렬 처리 유닛(2002)에 대해 로컬이 아닌 시스템 메모리 또는 기타의 메모리와 통신할 수 있게 한다. 적어도 하나의 실시예에서, 메모리 크로스바(2016)는 가상 채널들을 이용하여 클러스터들(2014A-2014N)과 파티션 유닛들(2020A-2020N) 사이의 트래픽 스트림들을 분리할 수 있다.
적어도 하나의 실시예에서, 병렬 처리 유닛(2002)의 복수의 인스턴스가 단일의 애드인 카드 상에 제공될 수 있거나, 복수의 애드인 카드가 상호접속될 수 있다. 적어도 하나의 실시예에서, 병렬 처리 유닛(2002)의 상이한 인스턴스들은, 상이한 인스턴스들이 상이한 수의 처리 코어들, 상이한 양의 로컬 병렬 프로세서 메모리, 및/또는 기타의 구성 차이들을 갖더라도 상호동작하도록 구성될 수 있다. 예를 들어, 적어도 하나의 실시예에서, 병렬 처리 유닛(2002)의 일부 인스턴스는, 다른 인스턴스에 비해 더 높은 정밀도의 부동 소수점 유닛을 포함할 수 있다. 적어도 하나의 실시예에서, 병렬 처리 유닛(2002) 또는 병렬 프로세서(2000)의 하나 이상의 인스턴스를 통합하는 시스템들은, 데스크탑, 랩탑 또는 핸드헬드 개인용 컴퓨터들, 서버들, 워크스테이션들, 게임 콘솔들, 및/또는 임베디드 시스템들을 포함한 그러나 이것으로 제한되지 않는 다양한 구성 및 폼 팩터로 구현될 수 있다.
도 20b는 적어도 하나의 실시예에 따른 파티션 유닛(2020)의 블록도이다. 적어도 하나의 실시예에서, 파티션 유닛(2020)은 도 20a의 파티션 유닛들(2020A-2020N) 중 하나의 인스턴스이다. 적어도 하나의 실시예에서, 파티션 유닛(2020)은, L2 캐시(2021), 프레임 버퍼 인터페이스(2025), 및 래스터 연산 유닛("ROP")(2026)을 포함한다. L2 캐시(2021)는, 메모리 크로스바(2016) 및 ROP(2026)로부터 수신된 로딩 및 저장 동작을 수행하도록 구성된 판독/기입 캐시이다. 적어도 하나의 실시예에서, 판독 미스들 및 라이트-백(write-back) 요청들은 처리를 위해 L2 캐시(2021)에 의해 프레임 버퍼 인터페이스(2025)에 출력된다. 적어도 하나의 실시예에서, 업데이트들은 또한, 처리를 위해 프레임 버퍼 인터페이스(2025)를 통해 프레임 버퍼에 전송될 수 있다. 적어도 하나의 실시예에서, 프레임 버퍼 인터페이스(2025)는, (예를 들어, 병렬 프로세서 메모리(2022) 내의) 도 20의 메모리 유닛들(2024A-2024N) 등의, 병렬 프로세서 메모리 내의 메모리 유닛들 중 하나와 인터페이스한다.
적어도 하나의 실시예에서, ROP(2026)는, 스텐실(stencil), z 테스트, 블렌딩 등의 래스터 연산들을 수행하는 처리 유닛이다. 적어도 하나의 실시예에서, ROP(2026)는 그래픽 메모리에 저장된 처리된 그래픽 데이터를 출력한다. 적어도 하나의 실시예에서, ROP(2026)는, 메모리에 기입되는 깊이 또는 컬러 데이터를 압축하고 메모리로부터 판독되는 깊이 또는 컬러 데이터를 압축해제하는 압축 로직을 포함한다. 적어도 하나의 실시예에서, 압축 로직은 복수의 압축 알고리즘 중 하나 이상을 이용하는 무손실 압축 로직일 수 있다. ROP(2026)에 의해 수행되는 압축 로직은 압축될 데이터의 통계적 특성에 기초하여 달라질 수 있다. 예를 들어, 적어도 하나의 실시예에서, 델타 컬러 압축은 타일별 기초로 깊이 및 컬러 데이터에 관해 수행된다.
적어도 하나의 실시예에서, ROP(2026)는, 파티션 유닛(2020) 내에 대신에, 각각의 처리 클러스터(예를 들어, 도 20a의 클러스터(2014A-2014N)) 내에 포함된다. 적어도 하나의 실시예에서, 픽셀 데이터에 대한 판독 및 기입 요청들은, 픽셀 단편 데이터 대신에 메모리 크로스바(2016)를 통해 전송된다. 적어도 하나의 실시예에서, 처리된 그래픽 데이터는 도 19의 하나 이상의 디스플레이 디바이스(들)(1910) 중 하나 등의 디스플레이 디바이스에 디스플레이되거나, 프로세서(들)(1902)에 의한 추가 처리를 위해 라우팅되거나, 도 20a의 병렬 프로세서(2000) 내의 처리 엔티티들 중 하나에 의한 추가 처리를 위해 라우팅될 수 있다.
도 20c는 적어도 하나의 실시예에 따른 병렬 처리 유닛 내의 처리 클러스터(2014)의 블록도이다. 적어도 하나의 실시예에서, 처리 클러스터는 도 20a의 처리 클러스터들(2014A-2014N) 중 하나의 인스턴스이다. 적어도 하나의 실시예에서, 처리 클러스터(들)(2014) 중 하나 이상은 많은 스레드를 병렬로 실행하도록 구성될 수 있고, 여기서 "스레드"는 입력 데이터의 특정한 세트에서 실행되는 특정한 프로그램의 인스턴스를 지칭한다. 적어도 하나의 실시예에서, SIMD(single-instruction, multiple-data) 명령어 발행 기술들은, 복수의 독립적인 명령어 유닛을 제공하지 않고 많은 수의 스레드의 병렬 실행을 지원하는데 이용된다. 적어도 하나의 실시예에서, SIMT(single-instruction, multiple-thread) 기술들은, 각각의 처리 클러스터 내의 한 세트의 처리 엔진들에 명령어들을 발행하도록 구성된 공통 명령어 유닛을 이용하여, 많은 수의 일반적으로 동기화된 스레드들의 병렬 실행을 지원하는데 이용된다.
적어도 하나의 실시예에서, 처리 클러스터(2014)의 동작은, 처리 태스크들을 SIMT 병렬 프로세서들에 분배하는 파이프라인 관리자(2032)를 통해 제어될 수 있다. 적어도 하나의 실시예에서, 파이프라인 관리자(2032)는 도 20a의 스케쥴러(2010)로부터 명령어를 수신하고 그래픽 멀티프로세서(2034) 및/또는 텍스쳐 유닛(2036)을 통해 이들 명령어들의 실행을 관리한다. 적어도 하나의 실시예에서, 그래픽 멀티프로세서(2034)는 SIMT 병렬 프로세서의 예시적인 인스턴스이다. 그러나, 적어도 하나의 실시예에서, 상이한 아키텍쳐들의 다양한 유형의 SIMT 병렬 프로세서들이 처리 클러스터(2014) 내에 포함될 수 있다. 적어도 하나의 실시예에서, 그래픽 멀티프로세서(2034)의 하나 이상의 인스턴스가 처리 클러스터(2014) 내에 포함될 수 있다. 적어도 하나의 실시예에서, 그래픽 멀티프로세서(2034)는 데이터를 처리할 수 있고 데이터 크로스바(2040)는 처리된 데이터를 다른 셰이더 유닛들을 포함한 복수의 가능한 목적지들 중 하나에 분배하는데 이용될 수 있다. 적어도 하나의 실시예에서, 파이프라인 관리자(2032)는, 데이터 크로스바(2040)를 통해 분배될 처리된 데이터에 대한 목적지들을 명시함으로써 처리된 데이터의 분배를 용이화할 수 있다.
적어도 하나의 실시예에서, 처리 클러스터(2014) 내의 각각의 그래픽 멀티프로세서(2034)는, 동일한 세트의 기능 실행 로직(예를 들어, 산술 로직 유닛들, 로딩-저장 유닛들 등)을 포함할 수 있다. 적어도 하나의 실시예에서, 기능 실행 로직은 이전 명령어들이 완료되기 전에 새로운 명령어들이 발행될 수 있는 파이프라인 방식으로 구성될 수 있다. 적어도 하나의 실시예에서, 기능 실행 로직은, 정수 및 부동 소수점 산술, 비교 연산들, 부울 연산들, 비트 시프팅, 및 다양한 대수 함수들의 계산을 포함한 다양한 연산을 지원한다. 적어도 하나의 실시예에서, 동일한 기능 유닛 하드웨어가 활용되어 상이한 동작들을 수행할 수 있고 기능 유닛들의 임의의 조합이 존재할 수 있다.
적어도 하나의 실시예에서, 처리 클러스터(2014)에 전송된 명령어들은 스레드를 구성한다. 적어도 하나의 실시예에서, 한 세트의 병렬 처리 엔진들에 걸쳐 실행되는 한 세트의 스레드들은 스레드 그룹이다. 적어도 하나의 실시예에서, 스레드 그룹은 상이한 입력 데이터에 관해 프로그램을 실행한다. 적어도 하나의 실시예에서, 스레드 그룹 내의 각각의 스레드는 그래픽 멀티프로세서(2034) 내의 상이한 처리 엔진에 할당될 수 있다. 적어도 하나의 실시예에서, 스레드 그룹은 그래픽 멀티프로세서(2034) 내의 처리 엔진의 수보다 더 적은 스레드를 포함할 수 있다. 적어도 하나의 실시예에서, 스레드 그룹이 처리 엔진의 수보다 적은 스레드를 포함할 때, 하나 이상의 처리 엔진은 대응하는 스레드 그룹이 처리되고 있는 사이클들 동안 유휴 상태일 수 있다. 적어도 하나의 실시예에서, 스레드 그룹은 또한, 그래픽 멀티프로세서(2034) 내의 처리 엔진의 수보다 많은 스레드를 포함할 수 있다. 적어도 하나의 실시예에서, 스레드 그룹이 그래픽 멀티프로세서(2034) 내의 처리 엔진보다 많은 스레드를 포함할 때, 처리는 연속적인 클록 사이클들에 걸쳐 수행될 수 있다. 적어도 하나의 실시예에서, 복수의 스레드 그룹은 그래픽 멀티프로세서(2034) 상에서 동시에 실행될 수 있다.
적어도 하나의 실시예에서, 그래픽 멀티프로세서(2034)는 로딩 및 저장 동작을 수행하기 위한 내부 캐시 메모리를 포함한다. 적어도 하나의 실시예에서, 그래픽 멀티프로세서(2034)는 내부 캐시를 사용하지 않고 처리 클러스터(2014) 내의 캐시 메모리(예를 들어, L1 캐시(2048))를 이용할 수 있다. 적어도 하나의 실시예에서, 각각의 그래픽 멀티프로세서(2034)는 또한, 모든 처리 클러스터들(2014) 사이에서 공유되고 스레드들 사이에서 데이터를 전송하는데 이용될 수 있는 파티션 유닛들(예를 들어, 도 20a의 파티션 유닛들(2020A-2020N)) 내의 L2 캐시들에 대한 액세스를 갖는다. 적어도 하나의 실시예에서, 그래픽 멀티프로세서(2034)는 또한, 로컬 병렬 프로세서 메모리 및/또는 시스템 메모리 중 하나 이상을 포함할 수 있는 오프칩 전역 메모리에 액세스할 수 있다. 적어도 하나의 실시예에서, 병렬 처리 유닛(2002) 외부의 임의의 메모리가 전역 메모리로서 이용될 수 있다. 적어도 하나의 실시예에서, 처리 클러스터(2014)는, L1 캐시(2048)에 저장될 수 있는 공통 명령어들 및 데이터를 공유할 수 있는 그래픽 멀티프로세서(2034)의 복수의 인스턴스를 포함한다.
적어도 하나의 실시예에서, 각각의 처리 클러스터(2014)는 가상 주소들을 물리 주소들로 맵핑하도록 구성된 메모리 관리 유닛("MMU")(2045)을 포함할 수 있다. 적어도 하나의 실시예에서, MMU(2045)의 하나 이상의 인스턴스는 도 20a의 메모리 인터페이스(2018) 내에 상주할 수 있다. 적어도 하나의 실시예에서, MMU(2045)는 가상 주소를 타일의 물리 주소 및 선택사항으로서 캐시 라인 인덱스에 맵핑하는데 이용되는 한 세트의 페이지 테이블 엔트리(PTE)를 포함한다. 적어도 하나의 실시예에서, MMU(2045)는, 그래픽 멀티프로세서(2034) 또는 L1 캐시 또는 처리 클러스터(2014) 내에 상주할 수 있는 주소 변환 색인 버퍼들(TLB) 또는 캐시들을 포함할 수 있다. 적어도 하나의 실시예에서, 물리 주소는 파티션 유닛들 사이에서 효율적인 요청 인터리빙을 허용하기 위해 표면 데이터 액세스 지역성을 분배하도록 처리된다. 적어도 하나의 실시예에서, 캐시 라인 인덱스는 캐시 라인에 대한 요청이 히트인지 미스인지를 결정하는데 이용될 수 있다.
적어도 하나의 실시예에서, 처리 클러스터(2014)는, 각각의 그래픽 멀티프로세서(2034)가 텍스쳐 맵핑 연산을 수행하기 위해, 예를 들어 텍스쳐 샘플 위치들을 결정하고, 텍스쳐 데이터를 판독하고, 텍스쳐 데이터를 필터링하기 위해, 텍스쳐 유닛(2036)에 결합되도록 구성될 수 있다. 적어도 하나의 실시예에서, 텍스쳐 데이터는, 내부 텍스쳐 L1 캐시(미도시) 또는 그래픽 멀티프로세서(2034) 내의 L1 캐시로부터 판독되고, 필요에 따라, L2 캐시, 로컬 병렬 프로세서 메모리, 또는 시스템 메모리로부터 인출된다. 적어도 하나의 실시예에서, 각각의 그래픽 멀티프로세서(2034)는 처리된 태스크들을 데이터 크로스바(2040)로 출력하여 처리된 태스크(들)를 추가 처리를 위해 또 다른 처리 클러스터(2014)에 제공하거나 처리된 태스크(들)을 L2 캐시에, 로컬 병렬 프로세서 메모리에, 또는 메모리 크로스바(2016)를 통해 시스템 메모리에 저장한다. 적어도 하나의 실시예에서, preROP(2042)(사전-래스터 연산 유닛)는 그래픽 멀티프로세서(2034)로부터 데이터를 수신하도록 구성되고, ROP 유닛들에 데이터를 보내고, ROP 유닛들은 여기서 설명된 파티션 유닛들(예를 들어, 도 20a의 파티션 유닛들(2020A-2020N)) 내에 위치할 수 있다. 적어도 하나의 실시예에서, PreROP 2042 유닛은 컬러 블렌딩을 위한 최적화를 수행하고, 픽셀 컬러 데이터를 구성하고, 주소 변환을 수행할 수 있다.
추론 및/또는 훈련 로직(915)은 하나 이상의 실시예와 연관된 추론 및/또는 훈련 연산들을 수행하는데 이용된다. 추론 및/또는 훈련 로직(915)에 관한 상세사항은 도 9a 및/또는 도 9b와 관련하여 아래에 제공된다. 적어도 하나의 실시예에서, 추론 및/또는 훈련 로직(915)은, 신경망 훈련 연산들, 신경망 기능들 및/또는 아키텍쳐들, 또는 여기서 설명된 신경망 이용 사례들을 이용하여 계산된 가중치 파라미터들에 적어도 부분적으로 기초하여 연산들을 추론하거나 예측하기 위해 그래픽 처리 클러스터(2014)에서 이용될 수 있다.
적어도 하나의 실시예에서, 이러한 컴포넌트들은, 더 낮은 프레임 레이트 비디오의 프레임들로부터 더 높은 프레임 레이트 비디오를 생성하는 것 등의, 하나 이상의 신경망을 이용하여 향상된 비디오를 생성하는데 이용될 수 있다.
도 20d는 적어도 하나의 실시예에 따른 그래픽 멀티프로세서(2034)를 도시한다. 적어도 하나의 실시예에서, 그래픽 멀티프로세서(2034)는 처리 클러스터(2014)의 파이프라인 관리자(2032)와 결합된다. 적어도 하나의 실시예에서, 그래픽 멀티프로세서(2034)는, 명령어 캐시(2052), 명령어 유닛(2054), 주소 맵핑 유닛(2056), 레지스터 파일(2058), 하나 이상의 범용 그래픽 처리 유닛(GPGPU) 코어(2062), 및 하나 이상의 로딩/저장 유닛(2066)을 포함한 그러나 이것으로 제한되지 않는 실행 파이프라인을 갖는다. GPGPU 코어(들)(2062) 및 로딩/저장 유닛(들)(2066)은, 메모리 및 캐시 인터커넥트(2068)를 통해 캐시 메모리(2072) 및 공유된 메모리(2070)와 결합된다.
적어도 하나의 실시예에서, 명령어 캐시(2052)는 파이프라인 관리자(2032)로부터 실행할 명령어들의 스트림을 수신한다. 적어도 하나의 실시예에서, 명령어들은 명령어 캐시(2052)에 캐싱되고 명령어 유닛(2054)에 의한 실행을 위해 디스패치된다. 적어도 하나의 실시예에서, 명령어 유닛(2054)은 스레드 그룹들(예를 들어, 워프들)로서 명령어들을 디스패치할 수 있고, 각각의 스레드 그룹은 GPGPU 코어(들)(2062) 내의 상이한 실행 유닛에 할당된다. 적어도 하나의 실시예에서, 명령어는, 통합된 주소 공간적 내의 주소를 명시함으로써 로컬, 공유, 또는 전역 주소 공간 중 임의의 것에 액세스할 수 있다. 적어도 하나의 실시예에서, 주소 맵핑 유닛(2056)은, 통합된 주소 공간 내의 주소들을 로딩/저장 유닛(들)(2066)에 의해 액세스될 수 있는 별개의 메모리 주소로 변환하는데 이용될 수 있다.
적어도 하나의 실시예에서, 레지스터 파일(2058)은 그래픽 멀티프로세서(2034)의 기능 유닛들을 위한 한 세트의 레지스터들을 제공한다. 적어도 하나의 실시예에서, 레지스터 파일(2058)은 그래픽 멀티프로세서(2034)의 기능 유닛들(예를 들어, GPGPU 코어들(2062), 로딩/저장 유닛들(2066))의 데이터 경로들에 접속된 피연산자들을 위한 임시 저장을 제공한다. 적어도 하나의 실시예에서, 레지스터 파일(2058)은, 각각의 기능 유닛이 레지스터 파일(2058)의 전용 부분에 할당되도록 기능 유닛들 각각 사이에서 분할된다. 적어도 하나의 실시예에서, 레지스터 파일(2058)은 그래픽 멀티프로세서(2034)에 의해 실행되는 상이한 워프들 사이에서 분할된다.
적어도 하나의 실시예에서, GPGPU 코어들(2062) 각각은, 그래픽 멀티프로세서(2034)의 명령어들을 실행하는데 이용되는 부동 소수점 유닛(FPU)들 및/또는 정수 산술 로직 유닛(ALU)들을 포함할 수 있다. GPGPU 코어들(2062)은 아키텍쳐에 있어서 유사하거나 아키텍쳐에 있어서 상이할 수 있다. 적어도 하나의 실시예에서, GPGPU 코어들(2062)의 제1 부분은 단정도 FPU 및 정수 ALU를 포함하는 반면, GPGPU 코어의 제2 부분은 배정도 FPU를 포함한다. 적어도 하나의 실시예에서, FPU들은 부동 소수점 산술을 위한 IEEE 754-2008 표준을 구현하거나 가변 정밀도 부동 소수점 산술을 가능케할 수 있다. 적어도 하나의 실시예에서, 그래픽 멀티프로세서(2034)는, 직사각형 복사 또는 픽셀 블렌딩 연산들 등의 특정한 기능들을 수행하는 하나 이상의 고정 기능 또는 특정 기능 유닛을 추가로 포함할 수 있다. 적어도 하나의 실시예에서, GPGPU 코어들 중 하나 이상은 또한, 고정 또는 특별 기능 로직을 포함할 수 있다.
적어도 하나의 실시예에서, GPGPU 코어들(2062)은 복수 세트의 데이터에 관해 단일 명령어를 수행할 수 있는 SIMD 로직을 포함한다. 적어도 하나의 실시예에서 GPGPU 코어들(2062)은, SIMD4, SIMD8, 및 SIMD16 명령어들을 물리적으로 실행할 수 있고, SIMD1, SIMD2, 및 SIMD32 명령어들을 논리적으로 실행할 수 있다. 적어도 하나의 실시예에서, GPGPU 코어들에 대한 SIMD 명령어들은 셰이더 컴파일러에 의한 컴파일 시간에 생성되거나 단일 프로그램 복수 데이터(SPMD) 또는 SIMT 아키텍쳐들용으로 작성되고 컴파일된 프로그램들을 실행할 때 자동으로 생성될 수 있다. 적어도 하나의 실시예에서, SIMT 실행 모델을 위해 구성된 프로그램의 복수의 스레드는 단일 SIMD 명령어를 통해 실행될 수 있다. 예를 들어, 적어도 하나의 실시예에서, 동일하거나 유사한 동작들을 수행하는 8개의 SIMT 스레드는 단일 SIMD8 로직 유닛을 통해 병렬로 실행될 수 있다.
적어도 하나의 실시예에서, 메모리 및 캐시 인터커넥트(2068)는, 그래픽 멀티프로세서(2034)의 각각의 기능 유닛을 레지스터 파일(2058) 및 공유된 메모리(2070)에 접속하는 인터커넥트 네트워크이다. 적어도 하나의 실시예에서, 메모리 및 캐시 인터커넥트(2068)는 로딩/저장 유닛(2066)이 공유된 메모리(2070)와 레지스터 파일(2058) 사이의 로딩 및 저장 동작들을 구현하는 것을 허용하는 크로스바 인터커넥트이다. 적어도 하나의 실시예에서, 레지스터 파일(2058)은 GPGPU 코어들(2062)과 동일한 주파수에서 동작할 수 있고, 따라서 GPGPU 코어들(2062)과 레지스터 파일(2058) 사이의 데이터 전송은 매우 낮은 레이턴시이다. 적어도 하나의 실시예에서, 공유된 메모리(2070)는 그래픽 멀티프로세서(2034) 내의 기능 유닛들 상에서 실행되는 스레드들 사이의 통신을 가능케하는데 이용될 수 있다. 적어도 하나의 실시예에서, 캐시 메모리(2072)는, 예를 들어 기능 유닛과 텍스쳐 유닛(2036) 사이에서 전달되는 텍스쳐 데이터를 캐싱하는 데이터 캐시로서 이용될 수 있다. 적어도 하나의 실시예에서, 공유된 메모리(2070)는 또한, 프로그램 관리된 캐시로서 이용될 수 있다. 적어도 하나의 실시예에서, GPGPU 코어(2062)에서 실행되는 스레드들은, 캐시 메모리(2072) 내에 저장되는 자동으로 캐싱된 데이터에 추가하여 공유된 메모리 내에 데이터를 프로그램적으로 저장할 수 있다.
적어도 하나의 실시예에서, 여기서 설명된 병렬 프로세서 또는 GPGPU는, 그래픽 연산들, 머신 학습 동작들, 패턴 분석 동작들, 및 다양한 범용 GPU(GPGPU) 기능들을 가속하기 위해 호스트/프로세서 코어들에 통신가능하게 결합된다. 적어도 하나의 실시예에서, GPU는 버스 또는 다른 인터커넥트(예를 들어, PCIe 또는 NVLink 등의 고속 인터커넥트)를 통해 호스트 프로세서들/코어들에 통신가능하게 결합될 수 있다. 적어도 하나의 실시예에서, GPU는 코어들과 동일한 팩키지 또는 칩에 통합될 수 있고 내부 프로세서 버스/인터커넥트(즉, 팩키지 또는 칩 내부)를 통해 코어들에 통신가능하게 결합될 수 있다. 적어도 하나의 실시예에서, GPU가 접속되는 방식에 관계없이, 프로세서 코어들은, 작업 기술자에 포함된 커맨드들/명령어들의 시퀀스들의 형태로 GPU에 작업을 할당할 수 있다. 적어도 하나의 실시예에서, GPU는, 그 다음, 이들 커맨드들/명령어들을 효율적으로 처리하기 위해 전용 회로/로직을 이용한다.
추론 및/또는 훈련 로직(915)은 하나 이상의 실시예와 연관된 추론 및/또는 훈련 연산들을 수행하는데 이용된다. 추론 및/또는 훈련 로직(915)에 관한 상세사항은 도 9a 및/또는 도 9b와 관련하여 아래에 제공된다. 적어도 하나의 실시예에서, 추론 및/또는 훈련 로직(915)은, 신경망 훈련 연산들, 신경망 기능들 및/또는 아키텍쳐들, 또는 여기서 설명된 신경망 이용 사례들을 이용하여 계산된 가중치 파라미터들에 적어도 부분적으로 기초하여 연산들을 추론하거나 예측하기 위해 그래픽 멀티프로세서(2034)에서 이용될 수 있다.
적어도 하나의 실시예에서, 이러한 컴포넌트들은, 더 낮은 프레임 레이트 비디오의 프레임들로부터 더 높은 프레임 레이트 비디오를 생성하는 것 등의, 하나 이상의 신경망을 이용하여 향상된 비디오를 생성하는데 이용될 수 있다.
도 21은 적어도 하나의 실시예에 따른 멀티GPU 컴퓨팅 시스템(11100)을 나타낸다. 적어도 하나의 실시예에서, 멀티GPU 컴퓨팅 시스템(11100)은 호스트 인터페이스 스위치(11104)를 통해 복수의 범용 그래픽 처리 유닛들(GPGPUs)(11106A-D)에 결합된 프로세서(11102)를 포함할 수 있다. 적어도 하나의 실시예에서, 호스트 인터페이스 스위치(11104)는, 프로세서(11102)가 GPGPU들(11106A-D)과 통신하는데 이용할 수 있는 PCI 익스프레스 버스에 프로세서(11102)를 결합하는 PCI 익스프레스 스위치 디바이스이다. GPGPU들(11106A-D)은 한 세트의 고속 포인트 투 포인트 GPU 대 GPU 링크들(11116)을 통해 세트를 통해 상호접속될 수 있다. 적어도 하나의 실시예에서, GPU 대 GPU 링크들(11116)은 전용 GPU 링크를 통해 GPGPU들(11106A-D) 각각에 접속된다. 적어도 하나의 실시예에서, P2P GPU 링크들(11116)은, 프로세서(11102)가 접속된 호스트 인터페이스 버스(11104)를 통한 통신을 요구하지 않고 GPGPU들(11106A-D) 각각 사이의 직접 통신을 가능케한다. 적어도 하나의 실시예에서, P2P GPU 링크들(11116)로 향하는 GPU-대-GPU 트래픽과 함께, 호스트 인터페이스 버스(11104)는, 시스템 메모리 액세스를 위해 또는 예를 들어 하나 이상의 네트워크 디바이스를 통해 멀티GPU 컴퓨팅 시스템(11100)의 다른 인스턴스들과 통신하기 위해 이용가능하게 남아 있다. 적어도 하나의 실시예에서 GPGPU들(11106A-D)이 호스트 인터페이스 스위치(11104)를 통해 프로세서(11102)에 접속되는 반면, 적어도 하나의 실시예에서 프로세서(11102)는 P2P GPU 링크들(11116)에 대한 직접 지원을 포함하고 GPGPU들(11106A-D)에 직접 접속할 수 있다.
추론 및/또는 훈련 로직(915)은 하나 이상의 실시예와 연관된 추론 및/또는 훈련 연산들을 수행하는데 이용된다. 추론 및/또는 훈련 로직(915)에 관한 상세사항은 도 9a 및/또는 도 9b와 관련하여 아래에 제공된다. 적어도 하나의 실시예에서, 추론 및/또는 훈련 로직(915)은, 신경망 훈련 연산들, 신경망 기능들 및/또는 아키텍쳐들, 또는 여기서 설명된 신경망 이용 사례들을 이용하여 계산된 가중치 파라미터들에 적어도 부분적으로 기초하여 연산들을 추론하거나 예측하기 위해 멀티GPU 컴퓨팅 시스템(11100)에서 이용될 수 있다.
적어도 하나의 실시예에서, 이러한 컴포넌트들은, 더 낮은 프레임 레이트 비디오의 프레임들로부터 더 높은 프레임 레이트 비디오를 생성하는 것 등의, 하나 이상의 신경망을 이용하여 향상된 비디오를 생성하는데 이용될 수 있다.
도 22는 적어도 하나의 실시예에 따른 그래픽 프로세서(2200)의 블록도이다. 적어도 하나의 실시예에서, 그래픽 프로세서(2200)는, 링 인터커넥트(2202), 파이프라인 프론트 엔드(2204), 미디어 엔진(2237), 및 그래픽 코어들(2280A-2280N)을 포함한다. 적어도 하나의 실시예에서, 링 인터커넥트(2202)는, 그래픽 프로세서(2200)를, 다른 그래픽 프로세서들 또는 하나 이상의 범용 프로세서 코어들을 포함하는 다른 처리 유닛들에 결합한다. 적어도 하나의 실시예에서, 그래픽 프로세서(2200)는 멀티코어 처리 시스템 내에 통합된 많은 프로세서들 중 하나이다.
적어도 하나의 실시예에서, 그래픽 프로세서(2200)는 링 인터커넥트(2202)를 통해 커맨드들의 일괄 묶음들을 수신한다. 적어도 하나의 실시예에서, 인입 커맨드들은 파이프라인 프론트 엔드(2204)의 커맨드 스트리머(2203)에 의해 해석된다. 적어도 하나의 실시예에서, 그래픽 프로세서(2200)는 그래픽 코어(들)(2280A-2280N)를 통해 3D 지오메트리 처리 및 미디어 처리를 수행하는 스케일가능한 실행 로직을 포함한다. 적어도 하나의 실시예에서, 3D 지오메트리 처리 커맨드들에 대해, 커맨드 스트리머(2203)는 커맨드들을 지오메트리 파이프라인(2236)에 공급한다. 적어도 하나의 실시예에서, 적어도 일부의 미디어 처리 커맨드들에 대해, 커맨드 스트리머(2203)는 미디어 엔진(2237)과 결합하는 비디오 프론트 엔드(2234)에 커맨드들을 공급한다. 적어도 하나의 실시예에서, 미디어 엔진(2237)은, 비디오 및 이미지 후처리를 위한 비디오 품질 엔진(VQE)(2230), 및 하드웨어-가속된 미디어 데이터 인코드 및 디코딩을 제공하는 멀티포멧 인코드/디코드(MFX)(2233) 엔진을 포함한다. 적어도 하나의 실시예에서, 지오메트리 파이프라인(2236) 및 미디어 엔진(2237) 각각은, 적어도 하나의 그래픽 코어(2280A)에 의해 제공되는 스레드 실행 자원들에 대한 실행 스레드들을 생성한다.
적어도 하나의 실시예에서, 그래픽 프로세서(2200)는 모듈식 코어들(2280A-2280N)(때때로 코어 슬라이스들이라고 지칭됨)을 특징으로 하는 스케일가능한 스레드 실행 자원들을 포함하고, 각각은 복수의 서브코어들(2250A-2250N, 2260A-2260N)(때때로 코어 서브코어 슬라이스들이라고 지칭됨)을 갖는다. 적어도 하나의 실시예에서, 그래픽 프로세서(2200)는 임의의 수의 그래픽 코어(2280A 내지 2280N)를 가질 수 있다. 적어도 하나의 실시예에서, 그래픽 프로세서(2200)는, 적어도 제1 서브코어(2250A) 및 제2 서브코어(2260A)를 갖는 그래픽 코어(2280A)를 포함한다. 적어도 하나의 실시예에서, 그래픽 프로세서(2200)는 단일 서브코어(예를 들어, 2250A)를 갖는 저전력 프로세서이다. 적어도 하나의 실시예에서, 그래픽 프로세서(2200)는 복수의 그래픽 코어(2280A-2280N)를 포함하고, 각각은 한 세트의 제1 서브코어(2250A-2250N) 및 한 세트의 제2 서브코어(2260A-2260N)를 포함한다. 적어도 하나의 실시예에서, 제1 서브코어들(2250A-2250N) 내의 각각의 서브코어는, 적어도, 제1 세트의 실행 유닛들(2252A-2252N) 및 미디어/텍스쳐 샘플러들(2254A-2254N)을 포함한다. 적어도 하나의 실시예에서, 제2 서브코어들(2260A-2260N) 내의 각각의 서브코어는, 적어도 제2 세트의 실행 유닛들(2262A-2262N) 및 샘플러들(2264A-2264N)을 포함한다. 적어도 하나의 실시예에서, 각각의 서브코어(2250A-2250N, 2260A-2260N)는 한 세트의 공유된 자원들(2270A-2270N)을 공유한다. 적어도 하나의 실시예에서, 공유된 자원들은 공유된 캐시 메모리 및 픽셀 동작 로직을 포함한다.
추론 및/또는 훈련 로직(915)은 하나 이상의 실시예와 연관된 추론 및/또는 훈련 연산들을 수행하는데 이용된다. 추론 및/또는 훈련 로직(915)에 관한 상세사항은 도 9a 및/또는 도 9b와 관련하여 아래에 제공된다. 적어도 하나의 실시예에서, 추론 및/또는 훈련 로직(915)은, 신경망 훈련 연산들, 신경망 기능들 및/또는 아키텍쳐들, 또는 여기서 설명된 신경망 이용 사례들을 이용하여 계산된 가중치 파라미터들에 적어도 부분적으로 기초하여 연산들을 추론하거나 예측하기 위해 그래픽 프로세서(2200)에서 이용될 수 있다.
적어도 하나의 실시예에서, 이러한 컴포넌트들은, 더 낮은 프레임 레이트 비디오의 프레임들로부터 더 높은 프레임 레이트 비디오를 생성하는 것 등의, 하나 이상의 신경망을 이용하여 향상된 비디오를 생성하는데 이용될 수 있다.
도 23은, 적어도 하나의 실시예에 따른, 명령어들을 수행하기 위한 로직 회로를 포함할 수 있는 프로세서(2300)에 대한 마이크로아키텍쳐를 예시하는 블록도이다. 적어도 하나의 실시예에서, 프로세서(2300)는, x86 명령어들, ARM 명령어들, 주문형 집적 회로(ASIC)용 전문화된 명령어들 등을 포함하는 명령어들을 수행할 수 있다. 적어도 하나의 실시예에서, 프로세서(2300)는, 캘리포니아주 산타 클라라에 소재한 Intel Corporation사로부터의 MMX 기술이 가능한 마이크로프로세서들 내의 64비트폭 MMXTM 레지스터들 등의, 팩킹된 데이터를 저장하는 레지스터들을 포함할 수 있다. 적어도 하나의 실시예에서, 정수 및 부동 소수점 형태들 양쪽 모두에서 이용가능한 MMX 레지스터들은, 단일 명령어, 복수의 데이터("SIMD") 및 스트리밍 SIMD 확장("SSE") 명령어들을 수반하는 팩킹된 데이터 요소들과 함께 동작할 수 있다. 적어도 하나의 실시예에서, SSE2, SSE3, SSE4, AVX, 또는 그 이상의 (총칭하여 "SSEx"라고 함) 기술과 관련된 128비트 폭 XMM 레지스터들은, 이러한 팩킹된 데이터 피연산자들을 보유할 수 있다. 적어도 하나의 실시예에서, 프로세서(2300)는, 머신 학습 또는 심층 학습 알고리즘들, 훈련 또는 추론을 가속하기 위한 명령어들을 수행할 수 있다.
적어도 하나의 실시예에서, 프로세서(2300)는 실행될 명령어들을 인출하고 프로세서 파이프라인에서 나중에 이용될 명령어들을 준비하기 위한 순차 프론트 엔드("프론트 엔드")(2301)를 포함한다. 적어도 하나의 실시예에서, 프론트 엔드(2301)는 수개의 유닛을 포함할 수 있다. 적어도 하나의 실시예에서, 명령어 사전인출기(2326)는 메모리로부터 명령어들을 인출하고 명령어 디코더(2328)에 명령어들을 공급하고, 명령어 디코더(2328)는 차례로 명령어들을 디코딩하거나 해석한다. 예를 들어, 적어도 하나의 실시예에서, 명령어 디코더(2328)는 수신된 명령어를 머신이 실행할 수 있는 "마이크로명령어들" 또는 "마이크로연산들"(또한 "마이크로 ops" 또는 "uop"라고도 함)이라고 불리는 하나 이상의 연산으로 디코딩한다. 적어도 하나의 실시예에서, 명령어 디코더(2328)는 명령어를 적어도 하나의 실시예에 따른 동작들을 수행하기 위해 마이크로아키텍쳐에 의해 이용될 수 있는 opcode 및 대응하는 데이터 및 제어 필드들로 파싱한다. 적어도 하나의 실시예에서, 트레이스 캐시(2330)는 실행을 위해 uop 큐(2334) 내의 프로그램 정렬된 시퀀스들 또는 트레이스들로 디코딩된 uop들을 어셈블할 수 있다. 적어도 하나의 실시예에서, 트레이스 캐시(2330)가 복합 명령어를 만날 때, 마이크로코드 ROM(2332)은 연산을 완료하는데 필요한 uop들을 제공한다.
적어도 하나의 실시예에서, 일부 명령어는 단일 마이크로-op로 변환될 수 있는 반면, 다른 것들은 전체 연산을 완료하기 위해 여러 개의 마이크로-op들을 필요로 한다. 적어도 하나의 실시예에서, 명령어를 완료하기 위해 4개보다 많은 마이크로-op가 필요한 경우, 명령어 디코더(2328)는 명령어를 수행하기 위해 마이크로코드 ROM(2332)에 액세스할 수 있다. 적어도 하나의 실시예에서, 명령어는 명령어 디코더(2328)에서의 처리를 위해 소수의 마이크로-op들로 디코딩될 수 있다. 적어도 하나의 실시예에서, 명령어는 동작을 달성하기 위해 다수의 마이크로-op들이 필요한 경우 마이크로코드 ROM(2332) 내에 저장될 수 있다. 적어도 하나의 실시예에서, 트레이스 캐시(2330)는 적어도 하나의 실시예에 따라 마이크로코드 ROM(2332)으로부터의 하나 이상의 명령어를 완료하기 위해 마이크로코드 시퀀스들을 판독하기 위한 정확한 마이크로명령어 포인터를 결정하는 진입점 프로그래머블 로직 어레이("PLA")를 참조한다. 적어도 하나의 실시예에서, 마이크로코드 ROM(2332)이 명령어에 대한 마이크로-op들의 시퀀싱을 완료한 후, 머신의 프론트 엔드(2301)는 트레이스 캐시(2330)로부터 마이크로-op들을 인출하는 것을 재개할 수 있다.
적어도 하나의 실시예에서, 비순차 실행 엔진("비순차 엔진")(2303)은 실행을 위한 명령어들을 준비할 수 있다. 적어도 하나의 실시예에서, 비순차 실행 로직은, 명령어들이 파이프라인을 따라 내려가 실행을 위해 스케쥴링될 때 성능을 최적화하기 위해 명령어들의 흐름을 평활화하고 재정렬하는 다수의 버퍼를 갖는다. 적어도 하나의 실시예에서, 비순차 실행 엔진(2303)은, 제한없이, 할당기/레지스터 개명기(2340), 메모리 uop 큐(2342), 정수/부동 소수점 uop 큐(2344), 메모리 스케쥴러(2346), 고속 스케쥴러(2302), 저속/일반 부동 소수점 스케쥴러("저속/일반 FP 스케쥴러")(2304) 및 단순 부동 소수점 스케쥴러("단순 FP 스케쥴러")(2306)를 포함한다. 적어도 하나의 실시예에서, 고속 스케쥴(2302), 저속/일반 부동 소수점 스케쥴러(2304), 및 단순 부동 소수점 스케쥴러(2306)는 또한, 집합적으로 여기서 "uop 스케쥴러(2302, 2304, 2306)"라고 지칭된다. 적어도 하나의 실시예에서, 할당기/레지스터 개명기(2340)는 각각의 uop가 실행하기 위해 필요로 하는 머신 버퍼들 및 자원들을 할당한다. 적어도 하나의 실시예에서, 할당기/레지스터 개명기(2340)는 로직 레지스터들을 레지스터 파일 내의 엔트리들로 개명한다. 적어도 하나의 실시예에서, 할당기/레지스터 개명기(2340)는 또한, 메모리 스케쥴러(2346) 및 uop 스케쥴러들(2302, 2304, 2306) 앞에서, 2개의 uop 큐, 메모리 연산을 위한 메모리 uop 큐(2342) 및 비메모리 연산을 위한 정수/부동 소수점 uop 큐(2344) 중 하나 내의 각각의 uop에 대한 엔트리를 할당한다. 적어도 하나의 실시예에서, uop 스케쥴러들(2302, 2304, 2306)은, 그들의 종속 입력 레지스터 피연산자 소스들의 준비성 및 uop가 그들의 연산을 완료하는데 필요한 실행 자원의 가용성에 기초하여 uop가 실행준비가 된 때를 결정한다. 적어도 하나의 실시예에서, 적어도 하나의 실시예의 고속 스케쥴러(2302)는 메인 클록 사이클의 각각의 절반에서 스케쥴링할 수 있는 반면, 저속/일반 부동 소수점 스케쥴러(2304) 및 단순 부동 소수점 스케쥴러(2306)는 메인 프로세서 클록 사이클당 한 번 스케쥴링할 수 있다. 적어도 하나의 실시예에서, uop 스케쥴러들(2302, 2304, 2306)은, 실행을 위해 uop를 스케쥴링하기 위해 디스패치 포트들에 대해 중재한다.
적어도 하나의 실시예에서, 실행 블록(2311)은, 제한없이, 정수 레지스터 파일/바이패스 네트워크(2308), 부동 소수점 레지스터 파일/바이패스 네트워크("FP 레지스터 파일/바이패스 네트워크")(2310), 주소 생성 유닛들("AGUs")(2312 및 2314), 고속 산술 로직 유닛들(고속 ALUs)("고속 ALUs")(2316 및 2318), 저속 산술 로직 유닛("저속 ALU")(2320), 부동 소수점 ALU("FP")(2322), 및 부동 소수점 이동 유닛("FP 이동")(2324)을 포함한다. 적어도 하나의 실시예에서, 정수 레지스터 파일/바이패스 네트워크(2308) 및 부동 소수점 레지스터 파일/바이패스 네트워크(2310)는 또한, 여기서는 "레지스터 파일들(2308, 2310)"이라고 지칭된다. 적어도 하나의 실시예에서, AGU들(2312, 2314), 고속 ALU들(2316, 2318), 저속 ALU(2320), 부동 소수점 ALU(2322), 및 부동 소수점 이동 유닛(2324)은 또한, 여기서는 "실행 유닛들(2312, 2314, 2316, 2318, 2320, 2322, 및 2324)"이라고 지칭된다. 적어도 하나의 실시예에서, 실행 블록(b11)은, 제한없이, 임의의 수(0 포함) 및 유형의 레지스터 파일들, 바이패스 네트워크들, 주소 생성 유닛들, 및 실행 유닛들을 임의의 조합으로 포함할 수 있다.
적어도 하나의 실시예에서, 레지스터 파일들(2308, 2310)은 uop 스케쥴러들(2302, 2304, 2306)과 실행 유닛들(2312, 2314, 2316, 2318, 2320, 2322, 2324) 사이에 배열될 수 있다. 적어도 하나의 실시예에서, 정수 레지스터 파일/바이패스 네트워크(2308)는 정수 연산들을 수행한다. 적어도 하나의 실시예에서, 부동 소수점 레지스터 파일/바이패스 네트워크(2310)는 부동 소수점 연산들을 수행한다. 적어도 하나의 실시예에서, 레지스터 파일들(2308, 2310) 각각은, 제한없이, 레지스터 파일 내에 아직 기입되지 않은 방금 완료된 결과들을 바이패스하거나 새로운 종속 uop들에 포워딩할 수 있는 바이패스 네트워크를 포함할 수 있다. 적어도 하나의 실시예에서, 레지스터 파일들(2308, 2310)은 서로 데이터를 전달할 수 있다. 적어도 하나의 실시예에서, 정수 레지스터 파일/바이패스 네트워크(2308)는, 제한없이, 2개의 별개의 레지스터 파일, 즉, 하위 32비트 데이터에 대한 하나의 레지스터 파일 및 상위 32비트 데이터에 대한 제2 레지스터 파일을 포함할 수 있다. 적어도 하나의 실시예에서, 부동 소수점 명령어들은 전형적으로 폭이 64 내지 128비트인 피연산자들을 갖기 때문에, 부동 소수점 레지스터 파일/바이패스 네트워크(2310)는, 제한없이, 128비트 폭 엔트리들을 포함할 수 있다.
적어도 하나의 실시예에서, 실행 유닛들(2312, 2314, 2316, 2318, 2320, 2322, 2324)은 명령어들을 실행할 수 있다. 적어도 하나의 실시예에서, 레지스터 파일들(2308, 2310)은 마이크로명령어들이 실행할 필요가 있는 정수 및 부동 소수점 데이터 피연산자 값들을 저장한다. 적어도 하나의 실시예에서, 프로세서(2300)는, 제한없이, 실행 유닛들(2312, 2314, 2316, 2318, 2320, 2322, 2324)의 임의의 수 및 조합을 포함할 수 있다. 적어도 하나의 실시예에서, 부동 소수점 ALU(2322) 및 부동 소수점 이동 유닛(2324)은, 부동 소수점, MMX, SIMD, AVX 및 SSE, 또는 전문화된 머신 학습 명령어들을 포함한 기타의 연산들을 실행할 수 있다. 적어도 하나의 실시예에서, 부동 소수점 ALU(2322)는, 제한없이, 나눗셈, 제곱근, 및 나머지 마이크로 ops를 실행하기 위한 64비트 x 64비트 부동 소수점 제산기를 포함할 수 있다. 적어도 하나의 실시예에서, 부동 소수점 값을 포함하는 명령어들은 부동 소수점 하드웨어로 처리될 수 있다. 적어도 하나의 실시예에서, ALU 연산들은 고속 ALU들(2316, 2318)에 전달될 수 있다. 적어도 하나의 실시예에서, 고속 ALU들(2316, 2318)은 절반 클록 사이클의 유효 레이턴시로 고속 연산들을 실행할 수 있다. 적어도 하나의 실시예에서, 느린 ALU(2320)는, 제한없이, 곱셈기, 시프트, 플래그 로직, 및 분기 처리 등의 긴 레이턴시 유형의 연산들을 위한 정수 실행 하드웨어를 포함할 수 있기 때문에, 가장 복잡한 정수 연산들은 느린 ALU(2320)로 간다. 적어도 하나의 실시예에서, 메모리 로딩/저장 동작들은 AGUS(2312, 2314)에 의해 실행될 수 있다. 적어도 하나의 실시예에서, 고속 ALU(2316), 고속 ALU(2318), 및 저속 ALU(2320)는 64비트 데이터 피연산자들에 관해 정수 연산들을 수행할 수 있다. 적어도 하나의 실시예에서, 고속 ALU(2316), 고속 ALU(2318), 및 저속 ALU(2320)는, 16, 32, 128, 256 등을 포함하는 다양한 데이터 비트 크기를 지원하도록 구현될 수 있다. 적어도 하나의 실시예에서, 부동 소수점 ALU(2322) 및 부동 소수점 이동 유닛(2324)은 다양한 폭의 비트들을 갖는 피연산자들의 범위를 지원하도록 구현될 수 있다. 적어도 하나의 실시예에서, 부동 소수점 ALU(2322) 및 부동 소수점 이동 유닛(2324)은 SIMD 및 멀티미디어 명령어들과 함께 128비트 폭의 팩킹된 데이터 피연산자들에 관해 동작할 수 있다.
적어도 하나의 실시예에서, uop 스케쥴러들(2302, 2304, 2306)은 부모 로딩이 실행을 완료하기 전에 종속 연산들을 디스패치한다. 적어도 하나의 실시예에서, uop들은 프로세서(2300)에서 추론적으로 스케쥴링되고 실행될 수 있기 때문에, 프로세서(2300)는 또한 메모리 미스들을 처리하는 로직을 포함할 수 있다. 적어도 하나의 실시예에서, 데이터 로딩이 데이터 캐시에서 미스되면, 일시적으로 부정확한 데이터를 가진 스케쥴러를 남겨두는 운행 중인 종속 연산들이 파이프라인 내에 있을 수 있다. 적어도 하나의 실시예에서, 리플레이 메커니즘은 부정확한 데이터를 이용하는 명령어들을 추적하고 재실행한다. 적어도 하나의 실시예에서, 종속 연산들이 리플레이될 필요가 있을 수 있고 독립적 연산들은 완료되도록 허용될 수 있다. 적어도 하나의 실시예에서, 프로세서의 적어도 하나의 실시예의 스케쥴러들 및 리플레이 메커니즘은 또한, 텍스트 스트링 비교 연산들을 위한 명령어 시퀀스들을 포착하도록 설계될 수 있다.
적어도 하나의 실시예에서, 용어 "레지스터들"은 피연산자들을 식별하는 명령어들의 일부로서 이용될 수 있는 온보드 프로세서 저장 위치들을 지칭할 수 있다. 적어도 하나의 실시예에서, 레지스터들은 (프로그래머의 관점에서) 프로세서의 외부에서 이용할 수 있는 것들일 수 있다. 적어도 하나의 실시예에서, 레지스터들은 특정한 유형의 회로로 제한되지 않을 수 있다. 오히려, 적어도 하나의 실시예에서, 레지스터는 데이터를 저장하고, 데이터를 제공하고, 여기서 설명된 기능들을 수행할 수 있다. 적어도 하나의 실시예에서, 여기서 설명된 레지스터들은, 전용 물리적 레지스터들, 레지스터 개명을 이용하여 동적으로 할당된 물리적 레지스터들, 전용 및 동적으로 할당된 물리적 레지스터들의 조합 등의 임의의 수의 상이한 기술들을 이용하여 프로세서 내의 회로에 의해 구현될 수 있다. 적어도 하나의 실시예에서, 정수 레지스터들은 32비트 정수 데이터를 저장한다. 적어도 하나의 실시예의 레지스터 파일은 또한, 팩킹된 데이터를 위한 8개의 멀티미디어 SIMD 레지스터를 포함한다.
추론 및/또는 훈련 로직(915)은 하나 이상의 실시예와 연관된 추론 및/또는 훈련 연산들을 수행하는데 이용된다. 추론 및/또는 훈련 로직(915)에 관한 상세사항은 도 9a 및/또는 도 9b와 관련하여 아래에 제공된다. 적어도 하나의 실시예에서 추론 및/또는 훈련 로직(915)의 일부 또는 전부는 실행 블록(2311) 및 도시되거나 도시되지 않은 다른 메모리 또는 레지스터들에 통합될 수 있다. 예를 들어, 적어도 하나의 실시예에서, 여기서 설명된 훈련 및/또는 추론 기술들은 실행 블록(2311)에 나타낸 ALU들 중 하나 이상을 이용할 수 있다. 더욱이, 가중치 파라미터들은, 여기서 설명된 하나 이상의 머신 학습 알고리즘, 신경망 아키텍쳐, 이용 사례 또는 훈련 기술을 수행하도록 실행 블록(2311)의 ALU들을 구성하는 온칩 또는 오프칩 메모리 및/또는 레지스터들(도시되거나 도시되지 않음)에 저장될 수 있다.
적어도 하나의 실시예에서, 이러한 컴포넌트들은, 더 낮은 프레임 레이트 비디오의 프레임들로부터 더 높은 프레임 레이트 비디오를 생성하는 것 등의, 하나 이상의 신경망을 이용하여 향상된 비디오를 생성하는데 이용될 수 있다.
도 24는 적어도 하나의 실시예에 따른 심층 학습 애플리케이션 프로세서(2400)를 나타낸다. 적어도 하나의 실시예에서, 심층 학습 애플리케이션 프로세서(2400)는, 심층 학습 애플리케이션 프로세서(2400)에 의해 실행되는 경우, 심층 학습 애플리케이션 프로세서(2400)로 하여금 본 개시내용 전체에 걸쳐 설명된 프로세스들 및 기술들의 일부 또는 전부를 수행하게 하는 명령어들을 이용한다. 적어도 하나의 실시예에서, 심층 학습 애플리케이션 프로세서(2400)는 ASIC(application-specific integrated circuit)이다. 적어도 하나의 실시예에서, 애플리케이션 프로세서(2400)는 하나 이상의 명령어 또는 양쪽 모두를 수행한 결과로서 하드웨어 내에 "하드-와이어링(hard-wired)"되는 행렬 곱셈 연산들을 수행한다. 적어도 하나의 실시예에서, 심층 학습 애플리케이션 프로세서(2400)는, 제한없이, 처리 클러스터들(2410(1)-2410(12)), 칩간 링크들("ICL")(2420(1)-2420(12)), 칩간 제어기들("ICCs")(2430(1)-2430(2)), 메모리 제어기들("Mem Ctrlrs")(2442(1)-2442(4)), 고대역폭 메모리 물리 계층("HBM PHY")(2444(1)-2444(4)), 관리 제어기 중앙 처리 유닛("관리 제어기 CPU")(2450), 직렬 주변기기 인터페이스, 상호통합 회로 및 범용 입력/출력 블록("SPI, I2C, GPIO"), 주변 컴포넌트 상호접속 익스프레스 제어기 및 직접 메모리 액세스 블록("PCIe 제어기 및 DMA")(2470), 16레인 주변 컴포넌트 상호접속 익스프레스 포트("PCI Express x 16")(2480)를 포함한다.
적어도 하나의 실시예에서, 처리 클러스터들(2410)은, 여기서 설명된 것들을 포함하는 하나 이상의 훈련 기술들로 계산된 가중치 파라미터들에 기초한 추론 또는 예측 연산들을 포함한, 심층 학습 연산들을 수행할 수 있다. 적어도 하나의 실시예에서, 각각의 처리 클러스터(2410)는, 제한없이, 임의의 수 및 유형의 프로세서들을 포함할 수 있다. 적어도 하나의 실시예에서, 심층 학습 애플리케이션 프로세서(2400)는 임의의 수 및 유형의 처리 클러스터들(2400)을 포함할 수 있다. 적어도 하나의 실시예에서, 칩간 링크들(2420)은 양방향이다. 적어도 하나의 실시예에서, 칩간 링크들(2420) 및 칩간 제어기들(2430)은, 복수의 심층 학습 애플리케이션 프로세서들(2400)이, 하나 이상의 신경망에 구현된 하나 이상의 머신 학습 알고리즘을 수행함으로써 발생하는 활성화 정보를 포함한 정보를 교환할 수 있게 한다. 적어도 하나의 실시예에서, 심층 학습 애플리케이션 프로세서(2400)는 임의의 수(0 포함) 및 유형의 ICL들(2420) 및 ICC들(2430)을 포함할 수 있다.
적어도 하나의 실시예에서, HBM2들(2440)은 총 32기가바이트(GB)의 메모리를 제공한다. HBM2(2440(i))는 메모리 제어기(2442(i)) 및 HBM PHY(2444(i)) 양쪽 모두와 연관된다. 적어도 하나의 실시예에서, 임의의 수의 HBM2들(2440)은 고대역폭 메모리의 임의의 유형 및 총량을 제공할 수 있고 임의의 수(0 포함) 및 유형의 메모리 제어기들(2442) 및 HBM PHY들(2444)과 연관될 수 있다. 적어도 하나의 실시예에서, SPI, I2C, GPIO(2460), PCIe 제어기 및 DMA(2470), 및/또는 PCIe(2480)는 임의의 기술적으로 실현가능한 방식으로 임의의 수 및 유형의 통신 표준들을 가능케하는 임의의 수 및 유형의 블록들로 대체될 수 있다.
추론 및/또는 훈련 로직(915)은 하나 이상의 실시예와 연관된 추론 및/또는 훈련 연산들을 수행하는데 이용된다. 추론 및/또는 훈련 로직(915)에 관한 상세사항은 도 9a 및/또는 도 9b와 관련하여 아래에 제공된다. 적어도 하나의 실시예에서, 심층 학습 애플리케이션 프로세서(2400)는 심층 학습 애플리케이션 프로세서(2400)에 제공된 정보를 예측하거나 추론하기 위해 신경망 등의 머신 학습 모델을 훈련시키는데 이용된다. 적어도 하나의 실시예에서, 심층 학습 애플리케이션 프로세서(2400)는 또 다른 프로세서 또는 시스템에 의해 또는 심층 학습 애플리케이션 프로세서(2400)에 의해 훈련이 이루어진 훈련된 머신 학습 모델(예를 들어, 신경망)에 기초하여 정보를 추론하거나 예측하는데 이용된다. 적어도 하나의 실시예에서, 프로세서(2400)는 여기서 설명된 하나 이상의 신경망 이용 사례를 수행하는데 이용될 수 있다.
적어도 하나의 실시예에서, 이러한 컴포넌트들은, 더 낮은 프레임 레이트 비디오의 프레임들로부터 더 높은 프레임 레이트 비디오를 생성하는 것 등의, 하나 이상의 신경망을 이용하여 향상된 비디오를 생성하는데 이용될 수 있다.
도 25는, 적어도 하나의 실시예에 따른, 뉴로모픽 프로세서(neuromorphic processor, 2500)의 블록도이다. 적어도 하나의 실시예에서, 뉴로모픽 프로세서(2500)는 뉴로모픽 프로세서(2500) 외부의 소스들로부터 하나 이상의 입력을 수신할 수 있다. 적어도 하나의 실시예에서, 이들 입력들은 뉴로모픽 프로세서(2500) 내의 하나 이상의 뉴런(2502)에 전송될 수 있다. 적어도 하나의 실시예에서, 뉴런(2502) 및 그 컴포넌트들은 하나 이상의 산술 로직 유닛(ALU)을 포함하는 회로 또는 논리를 이용하여 구현될 수 있다. 적어도 하나의 실시예에서, 뉴로모픽 프로세서(2500)는, 제한없이, 수천 또는 수백만개의 뉴런(2502) 인스턴스를 포함할 수 있지만, 임의의 적절한 수의 뉴런(2502)이 이용될 수 있다. 적어도 하나의 실시예에서, 뉴런(2502)의 각각의 인스턴스는 뉴런 입력(2504) 및 뉴런 출력(2506)을 포함할 수 있다. 적어도 하나의 실시예에서, 뉴런(2502)은 뉴런들(2502)의 다른 인스턴스들의 입력들에 전송될 수 있는 출력들을 생성할 수 있다. 예를 들어, 적어도 하나의 실시예에서, 뉴런 입력들(2504) 및 뉴런 출력들(2506)은 시냅스들(2508)을 통해 상호접속될 수 있다.
적어도 하나의 실시예에서, 뉴런들(2502) 및 시냅스들(2508)은, 뉴로모픽 프로세서(2500)가 뉴로모픽 프로세서(2500)에 의해 수신된 정보를 처리하거나 분석하게끔 동작하도록 상호접속될 수 있다. 적어도 하나의 실시예에서, 뉴런들(2502)은, 뉴런 입력(2504)을 통해 수신된 입력들이 임계값을 초과할 때 출력 펄스(또는 "격발" 또는 "스파이크")를 전송할 수 있다. 적어도 하나의 실시예에서, 뉴런들(2502)은 뉴런 입력들(2504)에서 수신된 신호들을 합산하거나 적분할 수 있다. 예를 들어, 적어도 하나의 실시예에서, 뉴런(2502)은 누출성 통합-및-격발(LIF; leaky integrate-and-fire) 뉴런들로서 구현될 수 있고, 여기서 합("막 전위"라고 지칭됨)이 임계값을 초과하는 경우, 뉴런(2502)은 시그모이드 또는 임계값 함수 등의 전달 함수를 이용하여 출력(또는 "격발")을 생성한다. 적어도 하나의 실시예에서, 누출성 통합-및-격발 뉴런은 뉴런 입력들(2504)에서 수신된 신호들을 막 전위 내에 합산할 수 있고 또한 막 전위를 감소시키기 위해 감쇠 인자(또는 누출)를 적용할 수 있다. 적어도 하나의 실시예에서, 복수의 입력 신호가 임계값을 초과하기에 충분히 빠르게 뉴런 입력들(2504)에서 수신되는 경우(즉, 막 전위가 격발되기에 너무 낮게 감쇠되기 전에) 누출성 통합-및-격발 뉴런들이 격발될 수 있다. 적어도 하나의 실시예에서, 뉴런들(2502)은 입력들을 수신하고, 입력들을 막 전위 내에 통합하고, 막 전위를 감쇠시키는 회로들 또는 로직을 이용하여 구현될 수 있다. 적어도 하나의 실시예에서, 입력들이 평균화될 수 있거나, 기타 임의의 적절한 전달 함수가 이용될 수 있다. 또한, 적어도 하나의 실시예에서, 뉴런들(2502)은, 제한없이, 뉴런 입력(2504)에 전달 함수를 적용한 결과가 임계값을 초과할 때 뉴런 출력(2506)에서 출력 스파이크를 생성하는 비교기 회로들 또는 로직을 포함할 수 있다. 적어도 하나의 실시예에서, 일단 뉴런(2502)이 격발되고 나면, 그것은 예를 들어 막 전위를 0 또는 다른 적절한 디폴트 값으로 리셋함으로써 이전에 수신된 입력 정보를 무시할 수 있다. 적어도 하나의 실시예에서, 일단 막 전위가 0으로 리셋되면, 뉴런(2502)은 적절한 기간(또는 불응 기간) 후에 정상 작동을 재개할 수 있다.
적어도 하나의 실시예에서, 뉴런들(2502)은 시냅스(2508)를 통해 상호접속될 수 있다. 적어도 하나의 실시예에서, 시냅스(2508)는 제1 뉴런(2502)의 출력으로부터 제2 뉴런(2502)의 입력으로 신호들을 전송하도록 동작할 수 있다. 적어도 하나의 실시예에서, 뉴런들(2502)은 시냅스(2508)의 하나보다 많은 인스턴스를 통해 정보를 전송할 수 있다. 적어도 하나의 실시예에서, 뉴런 출력(2506)의 하나 이상의 인스턴스는, 시냅스(2508)의 인스턴스를 통해, 동일한 뉴런(2502)에 있는 뉴런 입력(2504)의 한 인스턴스에 접속될 수 있다. 적어도 하나의 실시예에서, 시냅스(2508)의 인스턴스를 통해 전송될 출력을 생성하는 뉴런(2502)의 인스턴스는, 시냅스(2508)의 그 인스턴스와 관련하여 "시냅스전 뉴런"이라고 지칭될 수 있다. 적어도 하나의 실시예에서, 시냅스(2508)의 인스턴스를 통해 전송된 입력을 수신하는 뉴런(2502)의 인스턴스는, 시냅스(2508)의 그 인스턴스와 관련하여 "시냅스후 뉴런"이라고 지칭될 수 있다. 뉴런(2502)의 인스턴스는 시냅스(2508)의 하나 이상의 인스턴스로부터 입력을 수신할 수 있고 또한 시냅스(2508) 하나 이상의 인스턴스를 통해 출력들을 전송할 수 있기 때문에, 뉴런(2502)의 단일 인스턴스는 그에 따라, 적어도 하나의 실시예에서, 시냅스(2508)의 다양한 경우와 관련하여, "시냅스전 뉴런" 및 "시냅스후 뉴런"일 수 있다.
적어도 하나의 실시예에서, 뉴런들(2502)은 하나 이상의 계층으로 조직화될 수 있다. 뉴런(2502)의 각각의 인스턴스는, 하나 이상의 시냅스(2508)를 통해 하나 이상의 뉴런 입력(2504)까지 팬아웃할 수 있는 하나의 뉴런 출력(2506)을 가질 수 있다. 적어도 하나의 실시예에서, 제1 계층(2510)의 뉴런들(2502)의 뉴런 출력들(2506)은 제2 계층(2512)의 뉴런들(2502)의 뉴런 입력들(2504)에 접속될 수 있다. 적어도 하나의 실시예에서, 계층(2510)은 "피드-포워드 계층"이라고 지칭될 수 있다. 적어도 하나의 실시예에서, 제1 계층(2510)의 인스턴스 내의 뉴런(2502)의 각각의 인스턴스는 제2 계층(2512) 내의 뉴런(2502)의 각각의 인스턴스까지 팬아웃될 수 있다. 적어도 하나의 실시예에서, 제1 계층(2510)은 "완전 접속된 피드-포워드 계층"이라고 지칭될 수 있다. 적어도 하나의 실시예에서, 제2 계층(2512)의 인스턴스 내의 뉴런(2502)의 각각의 인스턴스는 제3 계층(2514) 내의 뉴런(2502)의 모든 인스턴스보다 더 적은 수까지 팬아웃될 수 있다. 적어도 하나의 실시예에서, 제2 계층(2512)은 "희소 접속된 피드-포워드 계층"이라고 지칭될 수 있다. 적어도 하나의 실시예에서, 제2 계층(2512)의 뉴런들(2502)은 (동일한) 제2 계층(2512)의 뉴런들(2502)을 포함한, 복수의 다른 계층의 뉴런들(2502)까지 팬아웃될 수 있다. 적어도 하나의 실시예에서, 제2 계층(2512)은 "재발적 계층"이라고 지칭될 수 있다. 적어도 하나의 실시예에서, 뉴로모픽 프로세서(2500)는, 희소 접속된 피드-포워드 계층들 및 완전 접속된 피드-포워드 계층들 양쪽 모두를 제한없이 포함한, 재발적 계층들과 피드-포워드 계층들의 임의의 적절한 조합을 제한없이 포함할 수 있다.
적어도 하나의 실시예에서, 뉴로모픽 프로세서(2500)는, 제한없이, 시냅스(2508)를 뉴런들(2502)에 접속하기 위한 재구성가능한 인터커넥트 아키텍쳐 또는 전용 하드 와이어 인터커넥트들을 포함할 수 있다. 적어도 하나의 실시예에서, 뉴로모픽 프로세서(2500)는, 제한없이, 신경망 토폴로지 및 뉴런 팬인/아웃에 기초하여 필요에 따라, 시냅스들이 상이한 뉴런들(2502)에 할당되는 것을 허용하는 회로 또는 로직을 포함할 수 있다. 예를 들어, 적어도 하나의 실시예에서, 시냅스들(2508)은 네트워크-온-칩 등의 인터커넥트 패브릭을 이용하거나 전용 접속들을 이용하여 뉴런들(2502)에 접속될 수 있다. 적어도 하나의 실시예에서, 시냅스 상호접속들 및 그 컴포넌트들은 회로 또는 로직을 이용하여 구현될 수 있다.
적어도 하나의 실시예에서, 이러한 컴포넌트들은, 더 낮은 프레임 레이트 비디오의 프레임들로부터 더 높은 프레임 레이트 비디오를 생성하는 것 등의, 하나 이상의 신경망을 이용하여 향상된 비디오를 생성하는데 이용될 수 있다.
도 26은 적어도 하나의 실시예에 따른 처리 시스템의 블록도이다. 적어도 하나의 실시예에서, 시스템(2600)은, 하나 이상의 프로세서(2602) 및 하나 이상의 그래픽 프로세서(2608)를 포함하고, 단일 프로세서 데스크탑 시스템, 멀티프로세서 워크스테이션 시스템, 또는 많은 수의 프로세서(2602) 또는 프로세서 코어들(2607)을 갖는 서버 시스템일 수 있다. 적어도 하나의 실시예에서, 시스템(2600)은, 모바일, 핸드헬드, 또는 임베디드 디바이스들에서 이용하기 위해 시스템 온 칩(SoC) 집적 회로 내에 통합된 처리 플랫폼이다.
적어도 하나의 실시예에서, 시스템(2600)은, 서버 기반 게임 플랫폼, 게임 및 미디어 콘솔을 포함한 게임 콘솔, 모바일 게임 콘솔, 핸드헬드 게임 콘솔, 또는 온라인 게임 콘솔을 포함하거나 그 안에 통합될 수 있다. 적어도 하나의 실시예에서, 시스템(2600)은, 모바일 전화, 스마트 폰, 태블릿 컴퓨팅 디바이스, 또는 모바일 인터넷 디바이스이다. 적어도 하나의 실시예에서, 처리 시스템(2600)은 또한, 스마트 워치 착용형 디바이스, 스마트 안경류 디바이스, 증강 현실 디바이스, 또는 가상 현실 디바이스 등의 착용형 디바이스를 포함하거나, 이들과 결합되거나, 또는 그 안에 통합될 수 있다. 적어도 하나의 실시예에서, 처리 시스템(2600)은, 하나 이상의 프로세서(2602) 및 하나 이상의 그래픽 프로세서(2608)에 의해 생성된 그래픽 인터페이스를 갖는 텔레비전 또는 셋탑 박스 디바이스이다.
적어도 하나의 실시예에서, 하나 이상의 프로세서(2602) 각각은, 실행될 때 시스템 및 사용자 소프트웨어에 대한 동작들을 수행하는 명령어들을 처리하는 하나 이상의 프로세서 코어(2607)를 포함한다. 적어도 하나의 실시예에서, 하나 이상의 프로세서 코어들(2607) 각각은 특정한 명령어 세트(2609)를 처리하도록 구성된다. 적어도 하나의 실시예에서, 명령어 세트(2609)는, CISC(Complex Instruction Set Computing), RISC(Reduced Instruction Set Computing), 또는 VLIW(Very Long Instruction Word)를 통한 컴퓨팅을 용이화할 수 있다. 적어도 하나의 실시예에서, 프로세서 코어들(2607) 각각은, 다른 명령어 세트들의 에뮬레이션을 용이화하는 명령어들을 포함할 수 있는 상이한 명령어 세트(2609)를 처리할 수 있다. 적어도 하나의 실시예에서, 프로세서 코어(2607)는 또한, 디지털 신호 프로세서(DSP) 등의 다른 처리 디바이스들을 포함할 수 있다.
적어도 하나의 실시예에서, 프로세서(2602)는 캐시 메모리(2604)를 포함한다. 적어도 하나의 실시예에서, 프로세서(2602)는 단일의 내부 캐시 또는 복수 레벨의 내부 캐시를 가질 수 있다. 적어도 하나의 실시예에서, 캐시 메모리는 프로세서(2602)의 다양한 컴포넌트들 사이에서 공유된다. 적어도 하나의 실시예에서, 프로세서(2602)는 또한, 알려진 캐시 일관성 기술들을 이용하여 프로세서 코어들(2607) 사이에서 공유될 수 있는 외부 캐시(예를 들어, 레벨-3(L3) 캐시 또는 마지막 레벨 캐시(LLC))(미도시)를 이용한다. 적어도 하나의 실시예에서, 상이한 유형들의 데이터를 저장하기 위한 상이한 유형들의 레지스터들(예를 들어, 정수 레지스터들, 부동 소수점 레지스터들, 상태 레지스터들, 및 명령어 포인터 레지스터들)을 포함할 수 있는 레지스터 파일(2606)은 프로세서(2602)에 추가로 포함된다. 적어도 하나의 실시예에서, 레지스터 파일(2606)은 범용 레지스터들 또는 기타의 레지스터들을 포함할 수 있다.
적어도 하나의 실시예에서, 하나 이상의 프로세서(들)(2602)는 하나 이상의 인터페이스 버스(들)(2610)와 결합되어, 프로세서(2602)와 시스템(2600) 내의 다른 컴포넌트들 사이에서 주소, 데이터, 또는 제어 신호들 등의 통신 신호들을 전송한다. 적어도 하나의 실시예에서, 인터페이스 버스(2610)는, 한 실시예에서, DMI(Direct Media Interface) 버스의 한 버전 등의, 프로세서 버스일 수 있다. 적어도 하나의 실시예에서, 인터페이스(2610)는 DMI 버스로 제한되지 않고, 하나 이상의 주변 컴포넌트 인터커넥트 버스(예를 들어, PCI, PCI Express), 메모리 버스, 또는 기타 유형들의 인터페이스 버스를 포함할 수 있다. 적어도 하나의 실시예에서 프로세서(들)(2602)는 통합 메모리 제어기(2616) 및 플랫폼 제어기 허브(2630)를 포함한다. 적어도 하나의 실시예에서, 메모리 제어기(2616)는 메모리 디바이스와 시스템(2600)의 다른 컴포넌트들 사이의 통신을 용이화하는 반면, 플랫폼 제어기 허브(PCH)(2630)는 로컬 I/O 버스를 통해 I/O 디바이스로의 접속들을 제공한다.
적어도 하나의 실시예에서, 메모리 디바이스(2620)는, 동적 랜덤 액세스 메모리(DRAM) 디바이스, 정적 랜덤 액세스 메모리(SRAM) 디바이스, 플래시 메모리 디바이스, 상변화 메모리 디바이스, 또는 프로세스 메모리 역할하기에 적절한 성능을 갖는 어떤 다른 메모리 디바이스일 수 있다. 적어도 하나의 실시예에서, 메모리 디바이스(2620)는, 하나 이상의 프로세서(2602)가 애플리케이션 또는 프로세스를 실행할 때 이용하기 위해 데이터(2622) 및 명령어들(2621)을 저장하기 위해, 시스템(2600)을 위한 시스템 메모리로서 동작할 수 있다. 적어도 하나의 실시예에서, 메모리 제어기(2616)는 또한, 그래픽 및 미디어 연산들을 수행하기 위해 프로세서들(2602) 내의 하나 이상의 그래픽 프로세서(2608)와 통신할 수 있는 선택사항적인 외부 그래픽 프로세서(2612)와 결합한다. 적어도 하나의 실시예에서, 디스플레이 디바이스(2611)는 프로세서(들)(2602)에 접속할 수 있다. 적어도 하나의 실시예에서, 디스플레이 디바이스(2611)는 모바일 전자 디바이스 또는 랩탑 디바이스 또는 디스플레이 인터페이스(예를 들어, DisplayPort 등)를 통해 부착된 외부 디스플레이 디바이스 등에서와 같이, 내부 디스플레이 디바이스 중 하나 이상을 포함할 수 있다. 적어도 하나의 실시예에서, 디스플레이 디바이스(2611)는 가상 현실(VR) 애플리케이션들 또는 증강 현실(AR) 애플리케이션들에서 이용하기 위한 입체 디스플레이 디바이스 등의 헤드 장착형 디스플레이(HMD)를 포함할 수 있다.
적어도 하나의 실시예에서, 플랫폼 제어기 허브(2630)는 주변기기들이 고속 I/O 버스를 통해 메모리 디바이스(2620) 및 프로세서(2602)에 접속할 수 있게 한다. 적어도 하나의 실시예에서, I/O 주변기기들은, 오디오 제어기(2646), 네트워크 제어기(2634), 펌웨어 인터페이스(2628), 무선 트랜시버(2626), 터치 센서들(2625), 데이터 저장 디바이스(2624)(예를 들어, 하드 디스크 드라이브, 플래시 메모리 등)를 포함하지만, 이것으로 제한되는 것은 아니다. 적어도 하나의 실시예에서, 데이터 저장 디바이스(2624)는 저장 인터페이스(예를 들어, SATA)를 통해 또는 주변 컴포넌트 인터커넥트 버스(예를 들어, PCI, PCI Express) 등의 주변 버스를 통해 접속할 수 있다. 적어도 하나의 실시예에서, 터치 센서들(2625)은, 터치 스크린 센서들, 압력 센서들, 또는 지문 센서들을 포함할 수 있다. 적어도 하나의 실시예에서, 무선 트랜시버(2626)는, Wi-Fi 트랜시버, Bluetooth 트랜시버, 또는 3G, 4G, 또는 LTE(Long Term Evolution) 트랜시버 등의 모바일 네트워크 트랜시버일 수 있다. 적어도 하나의 실시예에서, 펌웨어 인터페이스(2628)는 시스템 펌웨어와의 통신을 가능케하고, 예를 들어 통합된 스케일가능한 펌웨어 인터페이스(UEFI)일 수 있다. 적어도 하나의 실시예에서, 네트워크 제어기(2634)는 유선 네트워크로의 네트워크 접속을 가능케할 수 있다. 적어도 하나의 실시예에서, 고성능 네트워크 제어기(미도시)는 인터페이스 버스(2610)와 결합된다. 적어도 하나의 실시예에서, 오디오 제어기(2646)는 다채널 고음질 오디오 제어기이다. 적어도 하나의 실시예에서, 시스템(2600)은 레거시(예를 들어, 개인 시스템 2(PS/2)) 디바이스들을 시스템에 결합하기 위한 선택사항적인 레거시 I/O 제어기(2640)를 포함한다. 적어도 하나의 실시예에서, 플랫폼 제어기 허브(2630)는 또한, 키보드 및 마우스(2643) 조합들, 카메라(2644), 또는 기타의 USB 입력 디바이스들 등의, 입력 디바이스들을 접속하는 하나 이상의 USB(Universal Serial Bus) 제어기(2642)에 접속할 수 있다.
적어도 하나의 실시예에서, 메모리 제어기(2616) 및 플랫폼 제어기 허브(2630)의 인스턴스는, 외부 그래픽 프로세서(2612) 등의 별개 외부 그래픽 프로세서에 통합될 수 있다. 적어도 하나의 실시예에서, 플랫폼 제어기 허브(2630) 및/또는 메모리 제어기(2616)는 하나 이상의 프로세서(들)(2602)의 외부에 있을 수 있다. 예를 들어, 적어도 하나의 실시예에서, 시스템(2600)은 외부 메모리 제어기(2616) 및 플랫폼 제어기 허브(2630)를 포함할 수 있고, 플랫폼 제어기 허브는, 프로세서(들)(2602)와 통신하는 시스템 칩셋 내의 메모리 제어기 허브 및 주변기기 제어기 허브로서 구성될 수 있다.
추론 및/또는 훈련 로직(915)은 하나 이상의 실시예와 연관된 추론 및/또는 훈련 연산들을 수행하는데 이용된다. 추론 및/또는 훈련 로직(915)에 관한 상세사항은 도 9a 및/또는 도 9b와 관련하여 아래에 제공된다. 적어도 하나의 실시예에서 추론 및/또는 훈련 로직(915)의 일부 또는 전부는 그래픽 프로세서(2600)에 통합될 수 있다. 예를 들어, 적어도 하나의 실시예에서, 여기서 설명된 훈련 및/또는 추론 기술들은 그래픽 프로세서(2612)에 구현된 ALU들 중 하나 이상을 이용할 수 있다. 더욱이, 적어도 하나의 실시예에서, 여기서 설명된 추론 및/또는 훈련 동작들은 도 9a 또는 도 9b에 나타낸 로직 이외의 로직을 이용하여 이루어질 수 있다. 적어도 하나의 실시예에서, 가중치 파라미터들은, 하나 이상의 머신 학습 알고리즘, 신경망 아키텍쳐들, 이용 사례들, 또는 여기서 설명된 훈련 기술들을 수행하도록 그래픽 프로세서(2600)의 ALU들을 구성하는 (도시되거나 도시되지 않은) 온칩 또는 오프칩 메모리 및/또는 레지스터들에 저장될 수 있다.
적어도 하나의 실시예에서, 이러한 컴포넌트들은, 더 낮은 프레임 레이트 비디오의 프레임들로부터 더 높은 프레임 레이트 비디오를 생성하는 것 등의, 하나 이상의 신경망을 이용하여 향상된 비디오를 생성하는데 이용될 수 있다.
도 27은, 적어도 하나의 실시예에 따른, 하나 이상의 프로세서 코어(2702A-2702N), 통합된 메모리 제어기(2714), 및 통합된 그래픽 프로세서(2708)를 갖는 프로세서(2700)의 블록도이다. 적어도 하나의 실시예에서, 프로세서(2700)는 파선 박스들로 표시되는 추가 코어(2702N)까지의 및 이들을 포함하는 추가 코어들을 포함할 수 있다. 적어도 하나의 실시예에서, 프로세서 코어들(2702A-2702N) 각각은 하나 이상의 내부 캐시 유닛(2704A-2704N)을 포함한다. 적어도 하나의 실시예에서, 각각의 프로세서 코어는 또한, 하나 이상의 공유된 캐싱된 유닛(2706)에 대한 액세스를 갖는다.
적어도 하나의 실시예에서, 내부 캐시 유닛들(2704A-2704N) 및 공유된 캐시 유닛들(2706)은 프로세서(2700) 내의 캐시 메모리 계층구조를 나타낸다. 적어도 하나의 실시예에서, 캐시 메모리 유닛들(2704A-2704N)은, 레벨 2(L2), 레벨 3(L3), 레벨 4(L4) 또는 기타의 캐시 레벨 등의, 각각의 프로세서 코어 내의 적어도 1개 레벨의 명령어 및 데이터 캐시와, 1개 이상의 레벨의 공유된 중간 레벨 캐시를 포함할 수 있고, 여기서, 외부 메모리 이전의 가장 높은 레벨의 캐시는 LLC로서 분류된다. 적어도 하나의 실시예에서, 캐시 일관성 로직은 다양한 캐시 유닛들(2706, 2704A-2704N) 사이의 일관성을 유지한다.
적어도 하나의 실시예에서, 프로세서(2700)는 또한, 한 세트의 하나 이상의 버스 제어기 유닛(2716) 및 시스템 에이전트 코어(2710)를 포함할 수 있다. 적어도 하나의 실시예에서, 하나 이상의 버스 제어기 유닛(2716)은 하나 이상의 PCI 또는 PCI 익스프레스 버스 등의 한 세트의 주변 버스들을 관리한다. 적어도 하나의 실시예에서, 시스템 에이전트 코어(2710)는 다양한 프로세서 컴포넌트에 대한 관리 기능을 제공한다. 적어도 하나의 실시예에서, 시스템 에이전트 코어(2710)는 다양한 외부 메모리 디바이스(미도시)에 대한 액세스를 관리하는 하나 이상의 통합된 메모리 제어기(2714)를 포함한다.
적어도 하나의 실시예에서, 프로세서 코어들(2702A-2702N) 중 하나 이상은 동시 멀티스레딩에 대한 지원을 포함한다. 적어도 하나의 실시예에서, 시스템 에이전트 코어(2710)는 멀티스레드형 처리 동안 코어들(2702A-2702N)을 조율하고 동작시키기 위한 컴포넌트들을 포함한다. 적어도 하나의 실시예에서, 시스템 에이전트 코어(2710)는, 프로세서 코어들(2702A-2702N) 및 그래픽 프로세서(2708)의 하나 이상의 전력 상태를 조절하기 위한 로직 및 컴포넌트들을 포함하는 전력 제어 유닛(PCU)을 추가로 포함할 수 있다.
적어도 하나의 실시예에서, 프로세서(2700)는 그래픽 처리 연산들을 실행하기 위해 그래픽 프로세서(2708)를 추가로 포함한다. 적어도 하나의 실시예에서, 그래픽 프로세서(2708)는 하나 이상의 통합된 메모리 제어기(2714)를 포함한 공유된 캐시 유닛들(2706) 및 시스템 에이전트 코어(2710)와 결합한다. 적어도 하나의 실시예에서, 시스템 에이전트 코어(2710)는 또한, 그래픽 프로세서 출력을 하나 이상의 결합된 디스플레이로 구동하는 디스플레이 제어기(2711)를 포함한다. 적어도 하나의 실시예에서, 디스플레이 제어기(2711)는 또한, 적어도 하나의 인터커넥트를 통해 그래픽 프로세서(2708)와 결합된 별개의 모듈이거나, 그래픽 프로세서(2708) 내에 통합될 수 있다.
적어도 하나의 실시예에서, 링 기반 인터커넥트 유닛(2712)은 프로세서(2700)의 내부 컴포넌트들을 결합하는데 이용된다. 적어도 하나의 실시예에서, 포인트-투-포인트 인터커넥트, 스위칭형 인터커넥트, 또는 다른 기술들 등의 대안적인 인터커넥트 유닛이 이용될 수 있다. 적어도 하나의 실시예에서, 그래픽 프로세서(2708)는 I/O 링크(2713)를 통해 링 인터커넥트(2712)와 결합한다.
적어도 하나의 실시예에서, I/O 링크(2713)는 다양한 프로세서 컴포넌트와 eDRAM 모듈 등의 고성능 임베디드 메모리 모듈(2718) 사이의 통신을 용이화하는 온 팩키지 I/O 인터커넥트를 포함한, 복수의 다양한 I/O 인터커넥트의 복수의 변형들 중 적어도 하나를 나타낸다. 적어도 하나의 실시예에서, 프로세서 코어들(2702A-2702N) 및 그래픽 프로세서(2708) 각각은 공유된 마지막 레벨 캐시로서 임베디드 메모리 모듈들(2718)을 이용한다.
적어도 하나의 실시예에서, 프로세서 코어들(2702A-2702N)은 공통 명령어 세트 아키텍쳐를 실행하는 동종 코어들이다. 적어도 하나의 실시예에서, 프로세서 코어들(2702A-2702N)은 명령어 세트 아키텍쳐(ISA)의 관점에서 이질적이며, 여기서, 프로세서 코어들(2702A-2702N) 중 하나 이상은 공통 명령어 세트를 실행하는 반면, 프로세서 코어들(2702A-2702N)의 하나 이상의 다른 코어는 공통 명령어 세트 또는 상이한 명령어 세트의 서브세트를 실행한다. 적어도 하나의 실시예에서, 프로세서 코어들(2702A-2702N)은 마이크로아키텍쳐 측면에서 이질적이며, 여기서, 비교적 더 높은 전력 소비를 갖는 하나 이상의 코어는 더 낮은 전력 소비를 갖는 하나 이상의 전력 코어와 결합한다. 적어도 하나의 실시예에서, 프로세서(2700)는 하나 이상의 칩 상에서 또는 SoC 집적 회로로서 구현될 수 있다.
추론 및/또는 훈련 로직(915)은 하나 이상의 실시예와 연관된 추론 및/또는 훈련 연산들을 수행하는데 이용된다. 추론 및/또는 훈련 로직(915)에 관한 상세사항은 도 9a 및/또는 도 9b와 관련하여 아래에 제공된다. 적어도 하나의 실시예에서 추론 및/또는 훈련 로직(915)의 일부 또는 전부는 프로세서(2700)에 통합될 수 있다. 예를 들어, 적어도 하나의 실시예에서, 여기서 설명된 훈련 및/또는 추론 기술들은, 그래픽 프로세서(2612), 그래픽 코어(들)(2702A-2702N), 또는 도 27의 다른 컴포넌트들에 구현된 ALU들 중 하나 이상을 이용할 수 있다. 더욱이, 적어도 하나의 실시예에서, 여기서 설명된 추론 및/또는 훈련 동작들은 도 9a 또는 도 9b에 나타낸 로직 이외의 로직을 이용하여 이루어질 수 있다. 적어도 하나의 실시예에서, 가중치 파라미터들은, 하나 이상의 머신 학습 알고리즘, 신경망 아키텍쳐들, 이용 사례들, 또는 여기서 설명된 훈련 기술들을 수행하도록 그래픽 프로세서(2700)의 ALU들을 구성하는 (도시되거나 도시되지 않은) 온칩 또는 오프칩 메모리 및/또는 레지스터들에 저장될 수 있다.
적어도 하나의 실시예에서, 이러한 컴포넌트들은, 더 낮은 프레임 레이트 비디오의 프레임들로부터 더 높은 프레임 레이트 비디오를 생성하는 것 등의, 하나 이상의 신경망을 이용하여 향상된 비디오를 생성하는데 이용될 수 있다.
도 28은, 여기서 설명된 적어도 하나의 실시예에 따른, 그래픽 프로세서 코어(2800)의 하드웨어 로직의 블록도이다. 적어도 하나의 실시예에서, 그래픽 프로세서 코어(2800)는 그래픽 코어 어레이 내에 포함된다. 적어도 하나의 실시예에서, 때때로 코어 슬라이스라고 지칭되는 그래픽 프로세서 코어(2800)는, 모듈형 그래픽 프로세서 내의 하나 또는 복수의 그래픽 코어일 수 있다. 적어도 하나의 실시예에서, 그래픽 프로세서 코어(2800)는 하나의 그래픽 코어 슬라이스의 예시이고, 여기서 설명된 그래픽 프로세서는 타깃 전력 및 성능 엔빌로프들에 기초하여 복수의 그래픽 코어 슬라이스를 포함할 수 있다. 적어도 하나의 실시예에서, 각각의 그래픽 코어(2800)는, 범용 및 고정 기능 로직의 모듈형 블록들을 포함하는, 서브슬라이스들이라고도 지칭되는 복수의 서브코어(2801A-2801F)와 결합된 고정 기능 블록(2830)을 포함할 수 있다.
적어도 하나의 실시예에서, 고정 기능 블록(2830)은, 예를 들어 저성능 및/또는 저전력 그래픽 프로세서 구현에서, 그래픽 프로세서(2800) 내의 모든 서브코어에 의해 공유될 수 있는 지오메트리/고정 기능 파이프라인(2836)을 포함한다. 적어도 하나의 실시예에서, 지오메트리/고정 기능 파이프라인(2836)은, 3D 고정 기능 파이프라인, 비디오 프론트 엔드 유닛, 스레드 생성기, 및 스레드 디스패처, 및 통합된 반환 버퍼들을 관리하는 통합된 반환 버퍼 관리자를 포함한다.
고정된 적어도 하나의 실시예에서, 기능 블록(2830)은 또한, 그래픽 SoC 인터페이스(2837), 그래픽 마이크로제어기(2838), 및 미디어 파이프라인(2839)을 포함한다. 고정된 적어도 하나의 실시예에서, 그래픽 SoC 인터페이스(2837)는, 시스템 온 칩(SoC) 집적 회로 내의 그래픽 코어(2800)와 다른 프로세서 코어들 사이의 인터페이스를 제공한다. 적어도 하나의 실시예에서, 그래픽 마이크로제어기(2838)는, 스레드 디스패치, 스케쥴링 및 선점을 포함하는 그래픽 프로세서(2800)의 다양한 기능을 관리하도록 구성가능한 프로그래머블 서브프로세서이다. 적어도 하나의 실시예에서, 미디어 파이프라인(2839)은, 이미지 및 비디오 데이터를 포함하는 멀티미디어 데이터의 디코딩, 인코딩, 전처리, 및/또는 후처리를 용이화하는 로직을 포함한다. 적어도 하나의 실시예에서, 미디어 파이프라인(2839)은 서브코어들(2801-2801F) 내에서 로직을 계산하거나 샘플링하라는 요청들을 통해 미디어 연산들을 구현한다.
적어도 하나의 실시예에서, SoC 인터페이스(2837)는, 그래픽 코어(2800)가, 공유된 최종 레벨 캐시 메모리, 시스템 RAM, 및/또는 임베디드 온칩 또는 온팩키지 DRAM등의 메모리 계층구조 요소들을 포함한, SoC 내의 범용 애플리케이션 프로세서 코어들(예를 들어, CPU) 및/또는 기타의 컴포넌트들과 통신할 수 있게 한다. 적어도 하나의 실시예에서, SoC 인터페이스(2837)는 또한, 카메라 촬영 파이프라인 등의 SoC 내의 고정 기능 디바이스들와의 통신을 가능케할 수 있고, 그래픽 코어(2800)와 SoC 내의 CPU들 간에 공유될 수 있는 전역 메모리 아토믹스(atomics)의 이용을 가능케하고/하거나 이를 구현한다. 적어도 하나의 실시예에서, SoC 인터페이스(2837)는 또한, 그래픽 코어(2800)에 대한 전력 관리 제어들을 구현하고 그래픽 코어(2800)의 클록 도메인과 SoC 내의 다른 클록 도메인들 사이의 인터페이스를 가능케할 수 있다. 적어도 하나의 실시예에서, SoC 인터페이스(2837)는 그래픽 프로세서 내의 하나 이상의 그래픽 코어 각각에 커맨드들 및 명령어들을 제공하도록 구성된 커맨드 스트리머 및 전역 스레드 디스패처로부터의 커맨드 버퍼들의 수신을 가능케한다. 적어도 하나의 실시예에서, 커맨드들 및 명령어들은, 미디어 연산들이 수행되어야 하는 경우 미디어 파이프라인(2839)에, 또는 그래픽 처리 연산들이 수행되어야 하는 경우, 지오메트리 및 고정 기능 파이프라인(예를 들어, 지오메트리 및 고정 기능 파이프라인(2836), 지오메트리 및 고정 기능 파이프라인(2814))에 디스패치될 수 있습니다.
적어도 하나의 실시예에서, 그래픽 마이크로제어기(2838)는, 그래픽 코어(2800)에 대한 다양한 스케쥴링 및 관리 태스크들을 수행하도록 구성될 수 있다. 적어도 하나의 실시예에서, 그래픽 마이크로제어기(2838)는, 서브코어들(2801A-2801F) 내의 실행 유닛(EU) 어레이들(2802A-2802F, 2804A-2804F) 내의 다양한 그래픽 병렬 엔진에 관한 그래픽 및/또는 컴퓨팅 작업부하 스케쥴링을 수행할 수 있다. 적어도 하나의 실시예에서, 그래픽 코어(2800)를 포함하는 SoC의 CPU 코어 상에서 실행되는 호스트 소프트웨어는, 적절한 그래픽 엔진에 관한 스케쥴링 동작을 호출하는, 복수의 그래픽 프로세서 도어벨들 중 하나의 작업부하를 제출할 수 있다. 적어도 하나의 실시예에서, 스케쥴링 동작들은 다음으로 실행할 작업부하를 결정하고, 작업부하를 커맨드 스트리머에 제출하고, 엔진 상에서 실행 중인 기존의 작업부하들을 선점하고, 작업부하의 진행상황을 모니터링하고, 작업부하가 완료될 때 호스트 소프트웨어에 통보하는 것을 포함한다. 적어도 하나의 실시예에서, 그래픽 마이크로제어기(2838)는 또한, 그래픽 코어(2800)에 대한 저전력 또는 유휴 상태들을 용이화하여, 시스템 상의 운영 체제 및/또는 그래픽 드라이버 소프트웨어와는 독립적으로, 저저력 상태 전환들에 걸쳐 그래픽 코어(2800) 내의 레지스터들을 저장 및 복원하는 능력을 그래픽 코어(2800)에 제공할 수 있다.
적어도 하나의 실시예에서, 그래픽 코어(2800)는 도시된 서브코어들(2801A-2801F)보다 크거나 더 적은 N개의 모듈식 서브코어들을 가질 수 있다. 각각의 세트의 N개의 서브코어들에 대해, 적어도 하나의 실시예에서, 그래픽 코어(2800)는 또한, 공유된 기능 로직(2810), 공유된 및/또는 캐시 메모리(2812), 지오메트리/고정 기능 파이프라인(2814)뿐만 아니라, 추가적인 고정 기능 로직(2816)을 포함하여 다양한 그래픽을 가속하고 처리 연산들을 계산한다. 적어도 하나의 실시예에서, 공유된 기능 로직(2810)은 그래픽 코어(2800) 내의 각각의 N개의 서브코어에 의해 공유될 수 있는 로직 유닛들(예를 들어, 샘플러, 수학, 및/또는 스레드간 통신 로직)을 포함할 수 있다. 적어도 하나의 실시예에서, 고정된, 공유된 및/또는 캐시 메모리(2812)는, 그래픽 코어(2800) 내의 N개의 서브코어(2801A-2801F)에 대한 마지막 레벨 캐시일 수 있고, 또한 복수의 서브코어에 의해 액세스가능한 공유된 메모리로서 역할할 수 있다. 적어도 하나의 실시예에서, 지오메트리/고정 기능 파이프라인(2814)은 고정 기능 블록(2830) 내의 지오메트리/고정 기능 파이프라인(2836) 대신에 포함될 수 있고 동일하거나 유사한 로직 유닛들을 포함할 수 있다.
적어도 하나의 실시예에서, 그래픽 코어(2800)는 그래픽 코어(2800)에 의한 이용을 위한 다양한 고정 기능 가속 로직을 포함할 수 있는 추가적인 고정 기능 로직(2816)을 포함한다. 적어도 하나의 실시예에서, 추가적인 고정 기능 로직(2816)은 위치 전용 셰이딩에서 이용하기 위한 추가적인 지오메트리 파이프라인을 포함한다. 위치 전용 셰이딩에서, 적어도 2개의 지오메트리 파이프라인이 존재하는 반면, 지오메트리/고정 기능 파이프라인(2816, 2836) 내의 전체 지오메트리 파이프라인에서는, 추가적인 지오메트리 파이프라인인 컬 파이프라인(cull pipeline)이 추가적인 고정 기능 로직(2816) 내에 포함될 수 있다. 적어도 하나의 실시예에서, 컬 파이프라인은 전체 지오메트리 파이프라인의 축소된 버전이다. 적어도 하나의 실시예에서, 전체 파이프라인 및 컬 파이프라인은 애플리케이션의 상이한 인스턴스들을 실행할 수 있고, 각각의 인스턴스는 별개의 컨텍스트를 갖는다. 적어도 하나의 실시예에서, 위치 전용 셰이딩은 폐기된 삼각형들의 긴 컬 런(long cull run)을 은닉할 수 있어서, 일부 경우에 셰이딩이 더 일찍 완료될 수 있다. 예를 들어, 적어도 하나의 실시예에서, 추가적인 고정 기능 로직(2816) 내의 컬 파이프라인 로직은 메인 애플리케이션과 병렬로 위치 셰이더들을 실행할 수 있고, 컬 파이프라인이 정점들의 위치 속성을 인출 및 셰이딩하기 때문에, 일반적으로, 프레임 버퍼로의 픽셀들의 렌더링 및 래스터화를 수행하지 않고, 전체 파이프라인보다 빠르게 중요한 결과들을 생성한다. 적어도 하나의 실시예에서, 컬링 파이프라인은 생성된 중요 결과들을 이용하여 삼각형들이 컬링되는지 여부에 관계없이 모든 삼각형에 대한 가시성 정보를 계산할 수 있다. 적어도 하나의 실시예에서, (이 경우 리플레이 파이프라인이라고 지칭될 수 있는) 전체 파이프라인은 가시성 정보를 소비하여 컬링된 삼각형들을 건너뛰고 최종적으로 래스터화 국면에 전달되는 가시적 삼각형들만을 셰이딩할 수 있다.
적어도 하나의 실시예에서, 추가적인 고정 함수 로직(2816)은 또한, 머신 학습 훈련 또는 추론을 위한 최적화들을 포함하는 구현들을 위한 고정 함수 행렬 곱셈 로직 등의 머신 학습 가속 로직을 포함할 수 있다.
적어도 하나의 실시예에서, 각각의 그래픽 서브코어(2801A-2801F) 내에는, 그래픽 파이프라인, 미디어 파이프라인, 또는 셰이더 프로그램들에 의한 요청들에 응답하여, 그래픽, 미디어 및 컴퓨팅 연산을 수행하는데 이용될 수 있는 한 세트의 실행 자원들이 포함된다. 적어도 하나의 실시예에서, 그래픽 서브코어들(2801A-2801F)은, 복수의 EU 어레이들(2802A-2802F, 2804A-2804F), 스레드 디스패치 및 스레드간 통신(TD/IC) 로직(2803A-2803F), 3D(예를 들어, 텍스쳐) 샘플러(2805A-2805F), 미디어 샘플러 2806A-2806F, 셰이더 프로세서(2807A-2807F), 및 공유된 로컬 메모리(SLM)(2808A-2808F)를 포함한다. EU 어레이들(2802A-2802F, 2804A-2804F) 각각은 복수의 실행 유닛을 포함하고, 이들 유닛들은, 그래픽, 미디어 또는 컴퓨팅 셰이더 프로그램들을 포함한, 그래픽, 미디어, 또는 컴퓨팅 연산의 서비스에 있어서, 부동 소수점 및 정수/고정 소수점 로직 연산들을 수행할 수 있는 범용 그래픽 처리 유닛들이다. 적어도 하나의 실시예에서, TD/IC 로직(2803A-2803F)은, 서브코어 내의 실행 유닛들에 대한 로컬 스레드 디스패치 및 스레드 제어 연산들을 수행하고, 서브코어의 실행 유닛들 상에서 실행되는 스레드들 사이의 통신을 용이화한다. 적어도 하나의 실시예에서, 3D 샘플러(2805A-2805F)는 텍스쳐 또는 기타의 3D 그래픽 관련 데이터를 메모리 내로 판독할 수 있다. 적어도 하나의 실시예에서, 3D 샘플러는 구성된 샘플 상태 및 주어진 텍스쳐와 연관된 텍스쳐 포멧에 기초하여 텍스쳐 데이터를 상이하게 판독할 수 있다. 적어도 하나의 실시예에서, 미디어 샘플러(2806A-2806F)는 미디어 데이터와 연관된 유형 및 포멧에 기초하여 유사한 판독 동작들을 수행할 수 있다. 적어도 하나의 실시예에서, 각각의 그래픽 서브코어(2801A-2801F)는 대안으로서 통합 3D 및 미디어 샘플러를 포함할 수 있다. 적어도 하나의 실시예에서, 각각의 서브코어(2801A-2801F) 내의 실행 유닛들에서 실행되는 스레드들은, 각각의 서브코어 내의 공유 로컬 메모리(2808A-2808F)를 이용하여, 스레드 그룹 내에서 실행되는 스레드들이 온칩 메모리의 공통 푸울을 이용하여 실행할 수 있게 할 수 있다.
추론 및/또는 훈련 로직(915)은 하나 이상의 실시예와 연관된 추론 및/또는 훈련 연산들을 수행하는데 이용된다. 추론 및/또는 훈련 로직(915)에 관한 상세사항은 도 9a 및/또는 도 9b와 관련하여 아래에 제공된다. 적어도 하나의 실시예에서 추론 및/또는 훈련 로직(915)의 일부 또는 전부는 그래픽 프로세서(2810)에 통합될 수 있다. 예를 들어, 적어도 하나의 실시예에서, 여기서 설명된 훈련 및/또는 추론 기술들은, 그래픽 프로세서(2612), 그래픽 마이크로제어기(2838), 지오메트리 & 고정 기능 파이프라인(2814 및 2836), 또는 도 27의 기타의 로직에 구현된 ALU들 중 하나 이상을 이용할 수 있다. 더욱이, 적어도 하나의 실시예에서, 여기서 설명된 추론 및/또는 훈련 동작들은 도 9a 또는 도 9b에 나타낸 로직 이외의 로직을 이용하여 이루어질 수 있다. 적어도 하나의 실시예에서, 가중치 파라미터들은, 하나 이상의 머신 학습 알고리즘, 신경망 아키텍쳐들, 이용 사례들, 또는 여기서 설명된 훈련 기술들을 수행하도록 그래픽 프로세서(2800)의 ALU들을 구성하는 (도시되거나 도시되지 않은) 온칩 또는 오프칩 메모리 및/또는 레지스터들에 저장될 수 있다.
적어도 하나의 실시예에서, 이러한 컴포넌트들은, 더 낮은 프레임 레이트 비디오의 프레임들로부터 더 높은 프레임 레이트 비디오를 생성하는 것 등의, 하나 이상의 신경망을 이용하여 향상된 비디오를 생성하는데 이용될 수 있다.
도 29a 및 도 29b는 적어도 하나의 실시예에 따른 그래픽 프로세서 코어의 처리 요소들의 어레이를 포함하는 스레드 실행 로직(2900)을 나타낸다. 도 29a는 스레드 실행 로직(2900)이 이용되는 적어도 하나의 실시예를 나타낸다. 도 29b는 적어도 하나의 실시예에 따른 실행 유닛의 예시적인 내부 상세사항을 나타낸다.
도 29a에 나타낸 바와 같이, 적어도 하나의 실시예에서, 스레드 실행 로직(2900)은, 셰이더 프로세서(2902), 스레드 디스패처(2904), 명령어 캐시(2906), 복수의 실행 유닛(2908A-2908N)을 포함하는 스케일가능한 실행 유닛 어레이, 샘플러(들)(2910), 데이터 캐시(2912), 및 데이터 포트(2914)를 포함한다. 적어도 하나의 실시예에서, 스케일가능한 실행 유닛 어레이는, 예를 들어, 작업부하의 계산 요건들에 기초하여, 하나 이상의 실행 유닛(예를 들어, 실행 유닛(2908A, 2908B, 2908C, 2908D, 내지 2908N-1 및 2908N) 중 임의의 것)을 인에이블 또는 디스에이블함으로써 동적으로 스케일가능하다. 적어도 하나의 실시예에서, 스케일가능한 실행 유닛들은 각각의 실행 유닛에 링크되는 인터커넥트 패브릭을 통해 상호접속된다. 적어도 하나의 실시예에서, 스레드 실행 로직(2900)은, 명령어 캐시(2906), 데이터 포트(2914), 샘플러(2910), 및 실행 유닛들(2908A-2908N) 중 하나 이상을 통해, 시스템 메모리 또는 캐시 메모리 등의, 메모리로의 하나 이상의 접속을 포함한다. 적어도 하나의 실시예에서, 각각의 실행 유닛(예를 들어, 2908A)은, 각각의 스레드에 대해 복수의 데이터 요소를 병렬로 처리하면서, 복수의 동시 하드웨어 스레드를 실행할 수 있는 독립형 프로그래머블 범용 계산 유닛이다. 적어도 하나의 실시예에서, 실행 유닛들(2908A-2908N)의 어레이는 임의의 수의 개개의 실행 유닛을 포함하도록 스케일가능하다.
적어도 하나의 실시예에서, 실행 유닛들(2908A-2908N)은 주로 셰이더 프로그램들을 실행하는데 이용된다. 적어도 하나의 실시예에서, 셰이더 프로세서(2902)는 다양한 셰이더 프로그램들을 처리하고 스레드 디스패처(2904)를 통해 셰이더 프로그램들과 연관된 실행 스레드를 디스패치할 수 있다. 적어도 하나의 실시예에서, 스레드 디스패처(2904)는, 그래픽 및 미디어 파이프라인들로부터의 스레드 개시 요청들을 중재하고 실행 유닛들(2908A-2908N) 내의 하나 이상의 실행 유닛에 관해 요청된 스레드를 인스턴스화하는 로직을 포함한다. 예를 들어, 적어도 하나의 실시예에서, 지오메트리 파이프라인은, 정점, 테셀레이션, 또는 지오메트리 셰이더들을 처리를 위해 스레드 실행 로직에 디스패치할 수 있다. 적어도 하나의 실시예에서, 스레드 디스패처(2904)는 또한, 실행중인 셰이더 프로그램들로부터의 런타임 스레드 생성 요청들을 처리할 수 있다.
적어도 하나의 실시예에서, 실행 유닛들(2908A-2908N)은, 그래픽 라이브러리들(예를 들어, Direct 3D 및 OpenGL)로부터의 셰이더 프로그램들이 최소 변환으로 실행되도록, 많은 표준 3D 그래픽 셰이더 명령어들에 대한 기본 지원을 포함하는 명령어 세트를 지원한다. 적어도 하나의 실시예에서, 실행 유닛들은, 정점 및 지오메트리 처리(예를 들어, 정점 프로그램들, 지오메트리 프로그램들, 정점 셰이더들), 픽셀 처리(예를 들어, 픽셀 셰이더들, 단편 셰이더들) 및 범용 처리(예를 들어, 컴퓨팅 및 미디어 셰이더들)를 지원한다. 적어도 하나의 실시예에서, 하나 이상의 산술 로직 유닛(ALU)을 포함하는 실행 유닛들(2908A-2908N) 각각은, 다중 발행 SIMD(Single Instruction Multiple Data) 실행이 가능하고 멀티-스레드형 연산은 더 높은 레이턴시 메모리 액세스에도 불구하고 효율적인 실행 환경을 가능케한다. 적어도 하나의 실시예에서, 각각의 실행 유닛 내의 각각의 하드웨어 스레드는 전용 고대역폭 레지스터 파일 및 연관된 독립 스레드 상태를 갖는다. 적어도 하나의 실시예에서, 실행은, 정수, 단정도 및 배정도 부동 소수점 연산들, SIMD 분기 능력, 논리적 연산들, 초월 연산들, 및 기타 잡다한 연산들이 가능한 파이프라인들에 대한 클록당 다중 발행이다. 적어도 하나의 실시예에서, 메모리 또는 공유된 기능들 중 하나로부터의 데이터를 기다리는 동안, 실행 유닛들(2908A-2908N) 내의 종속성 로직은 요청된 데이터가 반환될 때까지 대기 스레드가 휴면하게 한다. 적어도 하나의 실시예에서, 대기 스레드가 휴면하는 동안, 하드웨어 자원들은 다른 스레드들을 처리하는데 할당될 수 있다. 예를 들어, 적어도 하나의 실시예에서, 정점 셰이더 연산과 연관된 지연 동안, 실행 유닛은, 픽셀 셰이더, 단편 셰이더, 또는 상이한 정점 셰이더를 포함한 또 다른 유형의 셰이더 프로그램에 대한 연산들을 수행할 수 있다.
적어도 하나의 실시예에서, 실행 유닛들(2908A-2908N) 내의 각각의 실행 유닛은 데이터 요소들의 어레이들에 관해 동작한다. 적어도 하나의 실시예에서, 데이터 요소의 수는 "실행 크기", 또는 명령어에 대한 채널의 수이다. 적어도 하나의 실시예에서, 실행 채널은, 명령어들 내의 데이터 요소 액세스, 마스킹, 및 흐름 제어를 위한 실행의 논리적인 유닛이다. 적어도 하나의 실시예에서, 채널 수는 특정한 그래픽 프로세서에 대한 물리적 산술 로직 유닛(ALU) 또는 부동 소수점 유닛(FPU)과는 독립적일 수 있다. 적어도 하나의 실시예에서, 실행 유닛들(2908A-2908N)은 정수 및 부동 소수점 데이터 유형들을 지원한다.
적어도 하나의 실시예에서, 실행 유닛 명령어 세트는 SIMD 명령어들을 포함한다. 적어도 하나의 실시예에서, 다양한 데이터 요소는 팩킹된 데이터 유형으로서 레지스터에 저장될 수 있고 실행 유닛은 요소들의 데이터 크기에 기초하여 다양한 요소를 처리할 것이다. 예를 들어, 적어도 하나의 실시예에서, 256비트 폭 벡터에 관해 동작할 때, 벡터의 256비트는 레지스터에 저장되고, 실행 유닛은, 벡터에 관해 4개의 별개의 64비트 팩킹된 데이터 요소(Quad-Word(QW) 크기 데이터 요소들), 8개의 별개의 32비트 팩킹된 데이터 요소(더블 워드(DW) 크기 데이터 요소들), 16개의 별개의 16비트 팩킹된 데이터 요소들(Word(W) 크기 데이터 요소들), 또는 32개의 별개의 8비트 데이터 요소(바이트(B) 크기 데이터 요소)로서 동작한다. 그러나, 적어도 하나의 실시예에서, 상이한 벡터 폭들 및 레지스터 크기들이 가능하다.
적어도 하나의 실시예에서, 하나 이상의 실행 유닛은, 융합된 EU들에 공통인 스레드 제어 로직(2907A-2907N)을 갖는 융합된 실행 유닛(2909A-2909N)으로 결합될 수 있다. 적어도 하나의 실시예에서, 복수의 EU가 한 EU 그룹으로 융합될 수 있다. 적어도 하나의 실시예에서, 융합된 EU 그룹 내의 각각의 EU는, 별개의 SIMD 하드웨어 스레드를 실행하도록 구성될 수 있다. 융합된 EU 그룹 내의 EU의 수는 다양한 실시예에 따라 변할 수 있다. 적어도 하나의 실시예에서, SIMD8, SIMD16, 및 SIMD32를 포함한 그러나 이것으로 제한되지 않는 다양한 SIMD 폭이 EU마다 수행될 수 있다. 적어도 하나의 실시예에서, 각각의 융합된 그래픽 실행 유닛(2909A-2909N)은 적어도 2개의 실행 유닛을 포함한다. 예를 들어, 적어도 하나의 실시예에서, 융합된 실행 유닛(2909A)은, 제1 EU(2908A), 제2 EU(2908B), 및 제1 EU(2908A)와 제2 EU(2908B)에 공통인 스레드 제어 로직(2907A)을 포함한다. 적어도 하나의 실시예에서, 스레드 제어 로직(2907A)은, 융합된 그래픽 실행 유닛(2909A) 상에서 실행되는 스레드들을 제어하여, 융합된 실행 유닛들(2909A-2909N) 내의 각각의 EU가 공통 명령어 포인터 레지스터를 이용하여 실행되는 것을 허용한다.
적어도 하나의 실시예에서, 하나 이상의 내부 명령어 캐시(예를 들어, 2906)는 실행 유닛들에 대한 스레드 명령어들을 캐싱하기 위해 스레드 실행 로직(2900)에 포함된다. 적어도 하나의 실시예에서, 스레드 실행 동안 스레드 데이터를 캐싱하기 위해 하나 이상의 데이터 캐시(예를 들어, 2912)가 포함된다. 적어도 하나의 실시예에서, 3D 연산들을 위한 텍스쳐 샘플링 및 미디어 연산들을 위한 미디어 샘플링을 제공하기 위해 샘플러(2910)가 포함된다. 적어도 하나의 실시예에서, 샘플러(2910)는, 샘플링된 데이터를 실행 유닛에 제공하기 전에, 샘플링 프로세스 동안 텍스쳐 또는 미디어 데이터를 처리하는 전문화된 텍스쳐 또는 미디어 샘플링 기능을 포함한다.
실행 동안, 적어도 하나의 실시예에서, 그래픽 및 미디어 파이프라인은, 스레드 생성 및 디스패치 로직을 통해 스레드 개시 요청들을 스레드 실행 로직(2900)에 전송한다. 적어도 하나의 실시예에서, 일단 기하학적 객체들의 그룹이 처리되고 픽셀 데이터 내로 래스터화되고 나면, 셰이더 프로세서(2902) 내의 픽셀 프로세서 로직(예를 들어, 픽셀 셰이더 로직, 단편 셰이더 로직 등)이 기동되어, 출력 정보를 추가로 계산하고 결과들이 출력 표면들(예를 들어, 컬러 버퍼들, 깊이 버퍼들, 스텐실 버퍼들 등)에 기록되게 한다. 적어도 하나의 실시예에서, 픽셀 셰이더 또는 단편 셰이더는, 래스터화된 객체에 걸쳐 보간될 다양한 정점 속성들의 값들을 계산한다. 적어도 하나의 실시예에서, 셰이더 프로세서(2902) 내의 픽셀 프로세서 로직은 API(application programming interface)-공급된 픽셀 또는 단편 셰이더 프로그램을 실행한다. 적어도 하나의 실시예에서, 셰이더 프로그램을 실행하기 위해, 셰이더 프로세서(2902)는 스레드 디스패처(2904)를 통해 스레드들을 실행 유닛(예를 들어, 2908A)에 디스패치한다. 적어도 하나의 실시예에서, 셰이더 프로세서(2902)는 메모리에 저장된 텍스쳐 맵들 내의 텍스쳐 데이터에 액세스하기 위해 샘플러(2910) 내의 텍스쳐 샘플링 로직을 이용한다. 적어도 하나의 실시예에서, 텍스쳐 데이터 및 입력 지오메트리 데이터에 관한 산술 연산들은, 각각의 기하학적 단편에 대한 픽셀 컬러 데이터를 계산하거나, 추가 처리로부터의 하나 이상의 픽셀을 폐기한다.
적어도 하나의 실시예에서, 데이터 포트(2914)는, 스레드 실행 로직(2900)이 그래픽 프로세서 출력 파이프라인 상의 추가 처리를 위해 처리된 데이터를 메모리에 출력하기 위한 메모리 액세스 메커니즘을 제공한다. 적어도 하나의 실시예에서, 데이터 포트(2914)는 하나 이상의 캐시 메모리(예를 들어, 데이터 캐시(2912))를 포함하거나 이에 결합되어 데이터 포트를 통한 메모리 액세스를 위해 데이터를 캐싱한다.
도 29b에 나타낸 바와 같이, 적어도 하나의 실시예에서, 그래픽 실행 유닛(2908)은, 명령어 인출 유닛(2937), 일반 레지스터 파일 어레이(GRF)(2924), 아키텍쳐 레지스터 파일 어레이(ARF)(2926), 스레드 중재기(2922), 전송 유닛(2930), 분기 유닛(2932), 한 세트의 SIMD 부동 소수점 유닛들(FPU)(2934), 및 적어도 하나의 실시예에서, 한 세트의 전용 정수 SIMD ALU들(2935)을 포함할 수 있다. 적어도 하나의 실시예에서, GRF(2924) 및 ARF(2926)는, 그래픽 실행 유닛(2908)에서 활성화될 수 있는 각각의 동시 하드웨어 스레드와 연관된 아키텍쳐 레지스터 파일들 및 한 세트의 일반 레지스터 파일들을 포함한다. 적어도 하나의 실시예에서, 스레드별 아키텍쳐 상태는 ARF(2926)에서 유지되는 반면, 스레드 실행 동안 이용되는 데이터는 GRF(2924)에 저장된다. 적어도 하나의 실시예에서, 각각의 스레드에 대한 명령어 포인터들을 포함하는, 각각의 스레드의 실행 상태는 ARF(2926)의 스레드-특유의 레지스터들에 유지될 수 있다.
적어도 하나의 실시예에서, 그래픽 실행 유닛(2908)은 SMT(Simultaneous Multi-Threading)와 IMT(fine-grained Interleaved Multi-Threading)의 조합인 아키텍쳐를 갖는다. 적어도 하나의 실시예에서, 아키텍쳐는, 동시 스레드의 타깃 수 및 실행 유닛당 레지스터의 수에 기초하여 설계 시간에 미세 튜닝될 수 있는 모듈식 구성을 가지며, 여기서 실행 유닛 자원들은 복수의 동시 스레드를 실행하는데 이용되는 로직에 걸쳐 분할된다.
적어도 하나의 실시예에서, 그래픽 실행 유닛(2908)은, 각각 상이한 명령어들일 수 있는 복수의 명령어를 공동 발행할 수 있다. 적어도 하나의 실시예에서, 그래픽 실행 유닛 스레드(2908)의 스레드 중재자(2922)는 실행을 위해 전송 유닛(2930), 분기 유닛(2942), 또는 SIMD FPU(들)(2934) 중 하나로 명령어들을 디스패치할 수 있다. 적어도 하나의 실시예에서, 각각의 실행 스레드는, GRF(2924) 내의 128개의 범용 레지스터에 액세스할 수 있고, 여기서 각각의 레지스터는, 32비트 데이터 요소들의 SIMD 8요소 벡터로서 액세스가능한 32바이트를 저장할 수 있다. 적어도 하나의 실시예에서, 각각의 실행 유닛 스레드는 GRF(2924) 내의 4Kbytes에 대한 액세스를 갖지만, 실시예들은 그렇게 제한되지 않고, 다른 실시예들에서 더 많거나 더 적은 레지스터 자원들이 제공될 수 있다. 적어도 하나의 실시예에서, 최대 7개의 스레드가 동시에 실행될 수 있지만, 실행 유닛당 스레드의 수도 역시 실시예들에 따라 달라질 수 있다. 7개의 스레드가 4Kbytes에 액세스할 수 있는 적어도 하나의 실시예에서, GRF(2924)는 총 28Kbytes를 저장할 수 있다. 적어도 하나의 실시예에서, 유연한 어드레싱 모드들은 레지스터들이 함께 어드레싱되는 것을 허용하여 효과적으로 더 넓은 레지스터를 구축하거나 스트라이드 직사각형 블록 데이터 구조들을 나타낼 수 있다.
적어도 하나의 실시예에서, 메모리 연산들, 샘플러 동작들, 및 기타의 더 긴-레이턴시 시스템 통신들은 메시지 전달 전송 유닛(2930)에 의해 실행되는 "전송" 명령어들을 통해 디스패치된다. 적어도 하나의 실시예에서, 분기 명령어들은 SIMD 발산 및 최종 수렴을 용이화하기 위해 전용 분기 유닛(2932)에 디스패치된다.
적어도 하나의 실시예에서, 그래픽 실행 유닛(2908)은 부동 소수점 연산들을 수행하는 하나 이상의 SIMD 부동 소수점 유닛(FPU(들))(2934)을 포함한다. 적어도 하나의 실시예에서, FPU(들)(2934)는 또한, 정수 계산을 지원한다. 적어도 하나의 실시예에서, FPU(들)(2934)는 최대 M개의 32비트 부동 소수점(또는 정수) 연산을 SIMD 실행하거나, 최대 2M개의 16비트 정수 또는 16비트 부동 소수점 연산을 SIMD 실행할 수 있다. 적어도 하나의 실시예에서, FPU(들) 중 적어도 하나는 고처리량 초월 수학 함수 및 배정도 64비트 부동 소수점을 지원하는 확장된 수학 능력을 제공한다. 적어도 하나의 실시예에서, 한 세트의 8비트 정수 SIMD ALU들(2935)이 또한 존재하고, 머신 학습 계산들과 연관된 연산들을 수행하도록 특별히 최적화될 수 있다.
적어도 하나의 실시예에서, 그래픽 실행 유닛(2908)의 복수의 인스턴스의 어레이들은 그래픽 서브코어 그룹화(예를 들어, 서브슬라이스)에서 인스턴스화될 수 있다. 적어도 하나의 실시예에서, 실행 유닛(2908)은 복수의 실행 채널에 걸쳐 명령어들을 실행할 수 있다. 적어도 하나의 실시예에서, 그래픽 실행 유닛(2908) 상에서 실행되는 각각의 스레드는 상이한 채널 상에서 실행된다.
추론 및/또는 훈련 로직(915)은 하나 이상의 실시예와 연관된 추론 및/또는 훈련 연산들을 수행하는데 이용된다. 추론 및/또는 훈련 로직(915)에 관한 상세사항은 도 9a 및/또는 도 9b와 관련하여 아래에 제공된다. 적어도 하나의 실시예에서 추론 및/또는 훈련 로직(915)의 일부 또는 전부는 실행 로직(2900)에 통합될 수 있다. 더욱이, 적어도 하나의 실시예에서, 여기서 설명된 추론 및/또는 훈련 동작들은 도 9a 또는 도 9b에 나타낸 로직 이외의 로직을 이용하여 이루어질 수 있다. 적어도 하나의 실시예에서, 가중치 파라미터들은, 하나 이상의 머신 학습 알고리즘, 신경망 아키텍쳐들, 이용 사례들, 또는 여기서 설명된 훈련 기술들을 수행하도록 실행 로직(2900)의 ALU들을 구성하는 (도시되거나 도시되지 않은) 온칩 또는 오프칩 메모리 및/또는 레지스터들에 저장될 수 있다.
적어도 하나의 실시예에서, 이러한 컴포넌트들은, 더 낮은 프레임 레이트 비디오의 프레임들로부터 더 높은 프레임 레이트 비디오를 생성하는 것 등의, 하나 이상의 신경망을 이용하여 향상된 비디오를 생성하는데 이용될 수 있다.
도 30은 적어도 하나의 실시예에 따른 병렬 처리 유닛("PPU")(3000)을 나타낸다. 적어도 하나의 실시예에서, PPU(3000)는, PPU(3000)에 의해 실행되는 경우, PPU(3000)가 본 개시내용 전체에 걸쳐 설명된 프로세스들 및 기술들의 일부 또는 전부를 수행하게 하는 머신 판독가능 코드로 구성된다. 적어도 하나의 실시예에서, PPU(3000)는, 하나 이상의 집적 회로 디바이스에서 구현되고, 컴퓨터 판독가능한 명령어들(머신 판독가능한 명령어들 또는 단순히 명령어들이라고도 함) 복수의 스레드에서 병렬로 처리하도록 설계된 레이턴시-은닉 기술로서 멀티스레딩을 이용하는 하나 이상의 집적 회로 디바이스 상에 구현된 멀티-스레드형 프로세서이다. 적어도 하나의 실시예에서, 스레드란 실행 스레드를 지칭하고 PPU(3000)에 의해 실행되도록 구성된 한 세트의 명령어들의 인스턴스화이다. 적어도 하나의 실시예에서, PPU(3000)는, 액정 디스플레이("LCD") 디바이스 등의 디스플레이 디바이스에 디스플레이하기 위한 2차원("2D") 이미지 데이터를 생성하기 위해 3차원("3D") 그래픽 데이터를 처리하기 위한 그래픽 렌더링 파이프라인을 구현하도록 구성된 그래픽 처리 유닛("GPU")이다. 적어도 하나의 실시예에서, PPU(3000)는 선형 대수 연산들 및 머신 학습 연산들 등의 계산들을 수행하는데 이용된다. 도 30은 단지 예시적인 목적의 예시적인 병렬 프로세서를 나타내고, 본 개시내용의 범위 내에서 고려되는 프로세서 아키텍쳐들의 비제한적인 예로서 해석되어야 하며, 임의의 적절한 프로세서가 이를 보완 및/또는 대체하기 위해 채용될 수 있다.
적어도 하나의 실시예에서, 하나 이상의 PPU(3000)는, 고성능 컴퓨팅("HPC"), 데이터 센터, 및 머신 학습 애플리케이션들을 가속하도록 구성된다. 적어도 하나의 실시예에서, PPU(3000)는, 다음과 같은 비제한적인 예들을 포함한 심층 학습 시스템들 및 응용들을 가속하도록 구성된다 : 자율 차량 플랫폼들, 심층 학습, 고정밀 음성, 이미지, 텍스트 인식 시스템들, 지능형 비디오 분석, 분자 시뮬레이션들, 약물 발견, 질병 진단, 일기 예보, 빅 데이터 분석, 천문학, 분자 역학 시뮬레이션, 재무 모델링, 로봇 공학, 공장 자동화, 실시간적 언어 번역, 온라인 검색 최적화, 및 개인화된 사용자 추천 등.
적어도 하나의 실시예에서, PPU(3000)는, 제한없이, 입력/출력("I/O") 유닛(3006), 프론트 엔드 유닛(3010), 스케쥴러 유닛(3012), 작업 분배 유닛(3014), 허브(3016), 크로스바("Xbar")(3020), 하나 이상의 일반 처리 클러스터("GPC")(3018), 및 하나 이상의 파티션 유닛("메모리 파티션 유닛")(3022)을 포함한다. 적어도 하나의 실시예에서, PPU(3000)는 하나 이상의 고속 GPU 인터커넥트("GPU 인터커넥트")(3008)를 통해 호스트 프로세서 또는 다른 PPU(3000)에 접속된다. 적어도 하나의 실시예에서, PPU(3000)는 인터커넥트(3002)를 통해 호스트 프로세서 또는 기타의 주변 디바이스에 접속된다. 적어도 하나의 실시예에서, PPU(3000)는 하나 이상의 메모리 디바이스("메모리")(3004)를 포함하는 로컬 메모리에 접속된다. 적어도 하나의 실시예에서, 메모리 디바이스(3004)는, 제한없이, 하나 이상의 동적 랜덤 액세스 메모리("DRAM") 디바이스를 포함한다. 적어도 하나의 실시예에서, 하나 이상의 DRAM 디바이스는 고대역폭 메모리("HBM") 서브시스템들로서 구성되고/되거나 구성가능하고, 복수의 DRAM 다이는 각각의 디바이스 내에 적층된다.
적어도 하나의 실시예에서, 고속 GPU 인터커넥트(3008)는 하나 이상의 중앙 처리 유닛("CPU")과 결합된 하나 이상의 PPU(3000)를 포함하고 시스템들에 의해 스케일하는데 이용되는 와이어-기반의 다중-레인 통신 링크를 지칭할 수 있으며, PPU(3000)와 CPU들 사이의 캐시 일관성 및 CPU 마스터링을 지원한다. 적어도 하나의 실시예에서, 데이터 및/또는 커맨드들은, 허브(3016)를 통해 고속 GPU 인터커넥트(3008)에 의해, 하나 이상의 복사 엔진, 비디오 인코더, 비디오 디코더, 전력 관리 유닛, 및 도 30에 명시적으로 예시되지 않은 기타의 컴포넌트 등의 PPU(3000)의 다른 유닛들에/로부터 전송된다.
적어도 하나의 실시예에서, I/O 유닛(3006)은, 시스템 버스(3002)를 통해 (도 30에 도시되지 않은) 호스트 프로세서로부터 통신들(예를 들어, 커맨드들, 데이터)을 전송 및 수신하도록 구성된다. 적어도 하나의 실시예에서, I/O 유닛(3006)은, 시스템 버스(3002)를 통해 직접 또는 메모리 브릿지 등의 하나 이상의 중간 디바이스를 통해 호스트 프로세서와 통신한다. 적어도 하나의 실시예에서, I/O 유닛(3006)은 시스템 버스(3002)를 통해 PPU들(3000) 중 하나 이상 등의 하나 이상의 다른 프로세서와 통신할 수 있다. 적어도 하나의 실시예에서, I/O 유닛(3006)은 PCIe 버스를 통한 통신을 위한 Peripheral Component Interconnect Express("PCIe") 인터페이스를 구현한다. 적어도 하나의 실시예에서, I/O 유닛(3006)은 외부 디바이스들과 통신하기 위한 인터페이스들을 구현한다.
적어도 하나의 실시예에서, I/O 유닛(3006)은 시스템 버스(3002)를 통해 수신된 패킷들을 디코딩한다. 적어도 하나의 실시예에서, 적어도 일부 패킷은 PPU(3000)가 다양한 동작을 수행하게 하도록 구성된 커맨드들을 나타낸다. 적어도 하나의 실시예에서, I/O 유닛(3006)은 디코딩된 커맨드들을 커맨드들에 의해 명시된 PPU(3000)의 다양한 다른 유닛들에 전송한다. 적어도 하나의 실시예에서, 커맨드들은 프론트 엔드 유닛(3010)에 전송되고/되거나, 허브(3016) 또는 (도 30에 명시적으로 도시되어 있지 않은) 하나 이상의 복사 엔진, 비디오 인코더, 비디오 디코더, 전력 관리 유닛 등의 PPU(3000)의 다른 유닛들에 전송된다. 적어도 하나의 실시예에서, I/O 유닛(3006)은 PPU(3000)의 다양한 로직 유닛들 사이에서 통신들을 라우팅하도록 구성된다.
적어도 하나의 실시예에서, 호스트 프로세서에 의해 실행되는 프로그램은 처리를 위해 작업부하를 PPU(3000)에 제공하는 버퍼 내의 커맨드 스트림을 인코딩한다. 적어도 하나의 실시예에서, 작업부하는 명령어들 및 이들 명령어들에 의해 처리될 데이터를 포함한다. 적어도 하나의 실시예에서, 버퍼는 호스트 프로세서와 PPU(3000) 양쪽 모두에 의해 액세스가능한(예를 들어, 판독/기입) 메모리의 영역이다 ― 호스트 인터페이스 유닛은, I/O 유닛(3006)에 의해 시스템 버스(3002)를 통해 전송된 메모리 요청들을 이용하여 시스템 버스(3002)에 접속된 시스템 메모리의 버퍼에 액세스하도록 구성될 수 있다. 적어도 하나의 실시예에서, 호스트 프로세서는 커맨드 스트림을 버퍼에 기입한 다음, 커맨드 스트림의 시작에 대한 포인터를 PPU(3000)에 전송하여 프론트 엔드 유닛(3010)이 하나 이상의 커맨드 스트림에 대한 포인터를 수신하고 하나 이상의 명령어 스트림을 관리하게 함으로써, 커맨드 스트림들로부터의 커맨드들을 판독하고 커맨드들을 PPU(3000)의 다양한 유닛에 포워딩한다.
적어도 하나의 실시예에서, 프론트 엔드 유닛(3010)은 하나 이상의 커맨드 스트림에 의해 정의된 작업들을 처리하도록 다양한 GPC(3018)를 구성하는 스케쥴러 유닛(3012)에 결합된다. 적어도 하나의 실시예에서, 스케쥴러 유닛(3012)은 스케쥴러 유닛(3012)에 의해 관리되는 다양한 태스크들과 관련된 상태 정보를 추적하도록 구성되고, 여기서 상태 정보는 태스크가 GPC들(3018) 중 어느 것에 할당되는지, 태스크가 활성인지 비활성인지, 태스크와 연관된 우선순위 레벨 등을 나타낼 수 있다. 적어도 하나의 실시예에서, 스케쥴러 유닛(3012)은 GPC(3018) 중 하나 이상에서의 복수의 태스크의 실행을 관리한다.
적어도 하나의 실시예에서, 스케쥴러 유닛(3012)은 GPC들(3018) 상에서의 실행을 위해 태스크들을 디스패치하도록 구성된 작업 분배 유닛(3014)에 결합된다. 적어도 하나의 실시예에서, 작업 분배 유닛(3014)은 스케쥴러 유닛(3012)으로부터 수신된 다수의 스케쥴링된 태스크들을 추적하고 작업 분배 유닛(3014)은 GPC들(3018) 각각에 대한 보류 중인 태스크 푸울 및 활성 태스크 푸울을 관리한다. 적어도 하나의 실시예에서, 보류 중인 태스크 푸울은 특정한 GPC(3018)에 의해 처리되도록 할당된 태스크들을 포함하는 다수의 슬롯(예를 들어, 32개의 슬롯)을 포함하고; 활성 태스크 푸울은 GPC들(3018)에 의해 능동적으로 처리되고 있는 태스크들에 대한 복수의 슬롯(예를 들어, 4개의 슬롯)을 포함하되, GPC들(3018) 중 하나가 태스크의 실행을 완료할 때, 그 태스크가 GPC(3018)에 대한 활성 태스크 푸울로부터 축출되고 보류 중인 태스크 푸울로부터의 다른 태스크들 중 하나가 GPC(3018) 상에서의 실행을 위해 선택되고 스케쥴링되게 할 수 있다. 적어도 하나의 실시예에서, 활성 태스크가, 데이터 종속성이 해결되기를 기다리는 동안 등의 GPC(3018) 상에서 유휴 상태인 경우, 활성 태스크는 GPC(3018)로부터 축출되고 보류 중인 태스크 푸울로 복귀하는 한편, 보류중인 태스크 푸울 내의 또 다른 태스크가 GPC(3018) 상에서의 실행을 위해 선택되고 스케쥴링된다.
적어도 하나의 실시예에서, 작업 분배 유닛(3014)은 XBar(3020)를 통해 하나 이상의 GPC(3018)와 통신한다. 적어도 하나의 실시예에서, XBar(3020)는 PPU(3000)의 많은 유닛을 PPU(3000)의 다른 유닛들에 결합하고 작업 분배 유닛(3014)을 특정한 GPC(3018)에 결합하도록 구성될 수 있는 인터커넥트 네트워크이다. 적어도 하나의 실시예에서, PPU(3000)의 하나 이상의 다른 유닛은 또한, 허브(3016)를 통해 XBar(3020)에 접속될 수 있다.
적어도 하나의 실시예에서, 태스크들은 스케쥴러 유닛(3012)에 의해 관리되고 작업 분배 유닛(3014)에 의해 GPC들(3018) 중 하나에 디스패치된다. GPC(3018)는 태스크를 처리하고 결과들을 생성하도록 구성된다. 적어도 하나의 실시예에서, 결과는 GPC(3018) 내의 다른 태스크들에 의해 소비되거나, XBar(3020)를 통해 상이한 GPC(3018)로 라우팅되거나, 메모리(3004)에 저장될 수 있다. 적어도 하나의 실시예에서, 결과들은 메모리(3004)에/로부터 데이터를 기입하고 판독하기 위한 메모리 인터페이스를 구현하는 파티션 유닛들(3022)을 통해 메모리(3004)에 기입될 수 있다. 적어도 하나의 실시예에서, 결과들은 고속 GPU 인터커넥트(3008)를 통해 또 다른 PPU(3004) 또는 CPU에 전송될 수 있다. 적어도 하나의 실시예에서, PPU(3000)는, 제한없이, PPU(3000)에 결합된 별개의 개별 메모리 디바이스(3004)의 수와 동일한 파티션 유닛(3022)의 수(U)를 포함한다. 적어도 하나의 실시예에서, 파티션 유닛(3022)은 도 32와 관련하여 아래에서 더 상세히 설명될 것이다.
적어도 하나의 실시예에서, 호스트 프로세서는 호스트 프로세서에서 실행되는 하나 이상의 애플리케이션이 PPU(3000)에서의 실행을 위한 동작들을 스케쥴링할 수 있게 하는 애플리케이션 프로그래밍 인터페이스("API")를 구현하는 드라이버 커널을 실행한다. 적어도 하나의 실시예에서, 복수의 컴퓨팅 애플리케이션은 PPU(3000)에 의해 동시에 실행되고 PPU(3000)는 복수의 컴퓨팅 애플리케이션을 위한 격리, 서비스 품질("QoS"), 및 독립적인 주소 공간들을 제공한다. 적어도 하나의 실시예에서, 애플리케이션은 드라이버 커널이 PPU(3000)에 의한 실행을 위한 하나 이상의 태스크를 생성하게 하는 (예를 들어, API 호출의 형태의) 명령어들을 생성하고 드라이버 커널은 PPU(3000)에 의해 처리되는 하나 이상의 스트림에 태스크들을 출력한다. 적어도 하나의 실시예에서, 각각의 태스크는 워프(warp)라고 지칭될 수 있는 관련 스레드들의 하나 이상의 그룹을 포함한다. 적어도 하나의 실시예에서, 워프는 병렬로 실행될 수 있는 복수의 관련된 스레드(예를 들어, 32개의 스레드)를 포함한다. 적어도 하나의 실시예에서, 협력 스레드들이란, 태스크를 수행하고 공유 메모리를 통해 데이터를 교환하는 명령어들을 포함하는 복수의 스레드를 지칭할 수 있다. 적어도 하나의 실시예에서, 스레드들 및 협력 스레드들은 도 32와 관련하여 적어도 하나의 실시예에 따라 더 상세히 설명된다.
추론 및/또는 훈련 로직(915)은 하나 이상의 실시예와 연관된 추론 및/또는 훈련 연산들을 수행하는데 이용된다. 추론 및/또는 훈련 로직(915)에 관한 상세사항은 도 9a 및/또는 도 9b와 관련하여 아래에 제공된다. 적어도 하나의 실시예에서, 심층 학습 애플리케이션 프로세서는, PPU(3000)에 제공된 정보를 예측하거나 추론하기 위해, 신경망 등의 머신 학습 모델을 훈련시키는데 이용된다. 적어도 하나의 실시예에서, PPU(3000)는, 또 다른 프로세서 또는 시스템에 의해 또는 PPU(3000)에 의해 훈련이 이루어진 훈련된 머신 학습 모델(예를 들어, 신경망)에 기초하여 정보를 추론하거나 예측하는데 이용된다. 적어도 하나의 실시예에서, PPU(3000)는 여기서 설명된 하나 이상의 신경망 이용 사례를 수행하는데 이용될 수 있다.
적어도 하나의 실시예에서, 이러한 컴포넌트들은, 더 낮은 프레임 레이트 비디오의 프레임들로부터 더 높은 프레임 레이트 비디오를 생성하는 것 등의, 하나 이상의 신경망을 이용하여 향상된 비디오를 생성하는데 이용될 수 있다.
도 31은 적어도 하나의 실시예에 따른 일반 처리 클러스터("GPC")(3100)를 나타낸다. 적어도 하나의 실시예에서, GPC(3100)는 도 30의 GPC(3018)이다. 적어도 하나의 실시예에서, 각각의 GPC(3100)는, 제한없이, 처리 태스크들을 위한 다수의 하드웨어 유닛을 포함하고, 각각의 GPC(3100)는, 제한없이, 파이프라인 관리자(3102), 사전 래스터 연산 유닛("PROP")(3104), 래스터 엔진(3108), 작업 분배 크로스바("WDX")(3116), 메모리 관리 유닛("MMU")(3118), 하나 이상의 데이터 처리 클러스터("DPC")(3106), 및 부품들의 임의의 적절한 조합을 포함한다.
적어도 하나의 실시예에서, GPC(3100)의 동작은 파이프라인 관리자(3102)에 의해 제어된다. 적어도 하나의 실시예에서, 파이프라인 관리자(3102)는 GPC(3100)에 할당된 태스크들을 처리하기 위한 하나 이상의 DPC(3106)의 구성을 관리한다. 적어도 하나의 실시예에서, 파이프라인 관리자(3102)는 그래픽 렌더링 파이프라인의 적어도 일부를 구현하도록 하나 이상의 DPC(3106) 중 적어도 하나를 구성한다. 적어도 하나의 실시예에서, DPC(3106)는 프로그래머블 스트리밍 멀티프로세서("SM")(3114) 상에서 정점 셰이더 프로그램을 실행하도록 구성된다. 적어도 하나의 실시예에서, 파이프라인 관리자(3102)는 작업 분배 유닛으로부터 수신된 패킷들을 GPC(3100) 내의 적절한 로직 유닛들에 라우팅하도록 구성되고, 적어도 하나의 실시예에서, 일부 패킷은 PROP(3104) 및/또는 래스터 엔진(3108) 내의 고정 기능 하드웨어 유닛들에 라우팅될 수 있는 반면, 다른 패킷들은 프리미티브 엔진(3112) 또는 SM(3114)에 의한 처리를 위해 DPC들(3106)에 라우팅될 수 있다. 적어도 하나의 실시예에서, 파이프라인 관리자(3102)는 신경망 모델 및/또는 컴퓨팅 파이프라인을 구현하도록 DPC들(3106) 중 적어도 하나를 구성한다.
적어도 하나의 실시예에서, PROP 유닛(3104)은, 적어도 하나의 실시예에서, 래스터 엔진(3108) 및 DPC들(3106)에 의해 생성된 데이터를 도 30과 관련하여 위에서 더 상세히 설명된 파티션 유닛(3022) 내의 래스터 연산("ROP") 유닛에 라우팅하도록 구성된다. 적어도 하나의 실시예에서, PROP 유닛(3104)은 컬러 블렌딩을 위한 최적화들을 수행하고, 픽셀 데이터를 구성하고, 주소 변환을 수행하는 등을 수행하도록 구성된다. 적어도 하나의 실시예에서, 래스터 엔진(3108)은, 제한없이, 다양한 래스터 연산을 수행하도록 구성된 다수의 고정 기능 하드웨어 유닛을 포함하고, 적어도 하나의 실시예에서, 래스터 엔진(3108)은, 제한없이, 셋업 엔진, 거친 래스터 엔진, 컬링 엔진, 클리핑 엔진, 정밀 래스터 엔진, 타일 합체 엔진, 및 이들의 임의의 적절한 조합을 포함한다. 적어도 하나의 실시예에서, 셋업 엔진은 변환된 정점들을 수신하고 정점들에 의해 정의된 기하학적 프리미티브와 연관된 평면 방정식들을 생성하고; 평면 방정식들은 거친 래스터 엔진에 전송되어 프리미티브에 대한 커버리지 정보(예를 들어, 타일에 대한 x, y 커버리지 마스크)를 생성하고; 거친 래스터 엔진의 출력은 z-test에 실패한 프리미티브와 연관된 단편들이 컬링되는 컬링 엔진에 전송되고, 관찰 절두체 외부에 있는 단편들이 클리핑되는 클리핑 엔진에 전송된다. 적어도 하나의 실시예에서, 클리핑 및 컬링에서 살아남은 단편들은 정밀 래스터 엔진에 전달되어 셋업 엔진에 의해 생성된 평면 방정식들에 기초하여 픽셀 단편들에 대한 속성들을 생성한다. 적어도 하나의 실시예에서, 래스터 엔진(3108)의 출력은 DPC(3106) 내에서 구현된 단편 셰이더 등에 의해 임의의 적절한 엔티티에 의해 처리될 단편들을 포함한다.
적어도 하나의 실시예에서, GPC(3100)에 포함된 각각의 DPC(3106)는, 제한없이, M-파이프 제어기("MPC")(3110); 원시 엔진(3112); 하나 이상의 SM(3114); 및 이들의 임의의 적절한 조합을 포함한다. 적어도 하나의 실시예에서, MPC(3110)는 DPC(3106)의 동작을 제어하고, 파이프라인 관리자(3102)로부터 수신된 패킷들을 DPC(3106) 내의 적절한 유닛들에 라우팅한다. 적어도 하나의 실시예에서, 정점과 연관된 패킷은 메모리로부터 정점과 연관된 정점 속성들을 인출하도록 구성된 프리미티브 엔진(3112)에 라우팅되고; 대조적으로, 셰이더 프로그램과 연관된 패킷은 SM(3114)에 전송될 수 있다.
적어도 하나의 실시예에서, SM(3114)은, 제한없이, 다수의 스레드에 의해 표현된 태스크들을 처리하도록 구성된 프로그래머블 스트리밍 프로세서를 포함한다. 적어도 하나의 실시예에서, SM(3114)은 멀티스레드이고 특정한 스레드 그룹으로부터의 복수의 스레드(예를 들어, 32개의 스레드)를 동시에 실행하도록 구성되고, 스레드 그룹(예를 들어, 워프) 내의 각각의 스레드가 동일한 명령어 세트에 기초하여 상이한 세트의 데이터 세트를 처리하도록 구성된 SIMD(Single-Instruction, Multiple-Data) 아키텍쳐를 구현한다. 적어도 하나의 실시예에서, 스레드 그룹 내의 모든 스레드는 동일한 명령어들을 실행한다. 적어도 하나의 실시예에서, SM(3114)은, "SIMT(Single-Instruction, Multiple Thread)" 아키텍쳐를 구현하며, 여기서 스레드 그룹 내의 각각의 스레드는 동일한 명령어 세트에 기초하여 상이한 데이터 세트를 처리하도록 구성되지만, 스레드 그룹 내의 개개의 스레드들은 실행 동안에 발산하는 것이 허용된다. 적어도 하나의 실시예에서, 프로그램 카운터, 호출 스택, 및 실행 상태가 각각의 워프에 대해 유지되어, 워프 내의 스레드들이 발산할 때 워프들과 워프들 내의 직렬 실행 사이의 동시성을 가능케한다. 또 다른 실시예에서, 프로그램 카운터, 호출 스택, 및 실행 상태가 각각의 개개의 스레드에 대해 유지되어, 워프들 내부 및 워프들 사이에서 모든 스레드들 사이에 동일한 동시성을 가능케한다. 적어도 하나의 실시예에서, 실행 상태가 각각의 개개의 스레드에 대해 유지되고 동일한 명령어들을 실행하는 스레드들은 더 양호한 효율성을 위해 수렴되고 병렬로 실행될 수 있다. SM(3114)의 적어도 하나의 실시예는 이하에서 더 상세히 설명된다.
적어도 하나의 실시예에서, MMU(3118)는 GPC(3100)와 메모리 파티션 유닛(예를 들어, 도 30의 파티션 유닛(3022)) 사이에 인터페이스를 제공하고, MMU(3118)는 가상 주소들의 물리 주소들로의 변환, 메모리 보호, 및 메모리 요청들의 중재를 제공한다. 적어도 하나의 실시예에서, MMU(3118)는 가상 주소들의 메모리 내의 물리 주소들로의 변환을 수행하기 위한 하나 이상의 변환 색인 버퍼("TLB")를 제공한다.
추론 및/또는 훈련 로직(915)은 하나 이상의 실시예와 연관된 추론 및/또는 훈련 연산들을 수행하는데 이용된다. 추론 및/또는 훈련 로직(915)에 관한 상세사항은 도 9a 및/또는 도 9b와 관련하여 아래에 제공된다. 적어도 하나의 실시예에서, 심층 학습 애플리케이션 프로세서는, GPC(3100)에 제공된 정보를 예측하거나 추론하기 위해, 신경망 등의 머신 학습 모델을 훈련시키는데 이용된다. 적어도 하나의 실시예에서, GPC(3100)는, 또 다른 프로세서 또는 시스템에 의해 또는 GPC(3100)에 의해 훈련이 이루어진 훈련된 머신 학습 모델(예를 들어, 신경망)에 기초하여 정보를 추론하거나 예측하는데 이용된다. 적어도 하나의 실시예에서, GPC(3100)는 여기서 설명된 하나 이상의 신경망 이용 사례를 수행하는데 이용될 수 있다.
적어도 하나의 실시예에서, 이러한 컴포넌트들은, 더 낮은 프레임 레이트 비디오의 프레임들로부터 더 높은 프레임 레이트 비디오를 생성하는 것 등의, 하나 이상의 신경망을 이용하여 향상된 비디오를 생성하는데 이용될 수 있다.
도 32는 적어도 하나의 실시예에 따른 병렬 처리 유닛("PPU")의 메모리 파티션 유닛(3200)을 나타낸다. 적어도 하나의 실시예에서, 메모리 파티션 유닛(3200)은, 제한없이, ROP(Raster Operations) 유닛(3202); 레벨 2("L2") 캐시(3204); 메모리 인터페이스(3206); 및 이들의 임의의 적절한 조합을 포함한다. 적어도 하나의 실시예에서, 메모리 인터페이스(3206)는 메모리에 결합된다. 적어도 하나의 실시예에서, 메모리 인터페이스(3206)는 고속 데이터 전송을 위해 32, 64, 128, 1024비트 데이터 버스들, 또는 유사한 구현들을 구현할 수 있다. 적어도 하나의 실시예에서, PPU는 파티션 유닛(3200)들의 쌍당 하나의 메모리 인터페이스(3206)인 U개의 메모리 인터페이스들(3206)을 통합하고, 여기서 파티션 유닛들(3200)의 각각의 쌍은 대응하는 메모리 디바이스에 접속된다. 예를 들어, 적어도 하나의 실시예에서, PPU는 고대역폭 메모리 스택 또는 그래픽 더블 데이터 레이트, 버전 5, 동기식 동적 랜덤 액세스 메모리("GDDR5 SDRAM") 등의 최대 Y개의 메모리 디바이스에 접속될 수 있다.
적어도 하나의 실시예에서, 메모리 인터페이스(3206)는 고대역폭 메모리 2세대("HBM2") 메모리 인터페이스를 구현하고 Y는 U의 절반과 같다. 적어도 하나의 실시예에서, HBM2 메모리 스택들은 PPU와 동일한 물리적 팩키지에 위치하여, 종래의 GDDR5 SDRAM 시스템에 비해 상당한 전력 및 면적이 절약을 제공한다. 적어도 하나의 실시예에서, 각각의 HBM2 스택은, 제한없이, 4개의 메모리 다이를 포함하고 Y는 4이며, 각각의 HBM2 스택은 총 8개 채널 및 1024비트의 데이터 버스 폭을 위해 다이당 2개의 128 비트 채널을 포함한다. 적어도 하나의 실시예에서, 메모리는 데이터를 보호하기 위해 단일 에러 정정 이중 에러 검출("SECDED"; Single-Error Correcting Double-Error Detecting) 에러 정정 코드("ECC")를 지원한다. 적어도 하나의 실시예에서, ECC는 데이터 손상에 민감한 컴퓨팅 애플리케이션들에 대해 더 높은 신뢰성을 제공한다.
적어도 하나의 실시예에서, PPU는 멀티레벨 메모리 계층구조를 구현한다. 적어도 하나의 실시예에서, 메모리 파티션 유닛(3200)은 중앙 처리 유닛("CPU") 및 PPU 메모리를 위한 단일의 통합된 가상 주소 공간을 제공하는 통합된 메모리를 지원하여, 가상 메모리 시스템들 사이에서 데이터 공유를 가능케한다. 적어도 하나의 실시예에서, 메모리 페이지들이 페이지들에 더 자주 액세스하는 PPU의 물리적 메모리로 이동되는 것을 보장하기 위해 다른 프로세서들에 위치한 메모리에 대한 PPU의 액세스 빈도가 추적된다. 적어도 하나의 실시예에서, 고속 GPU 인터커넥트(3008)는 PPU가 CPU의 페이지 테이블들에 직접 액세스하는 것을 허용하고 PPU에 의한 CPU 메모리로의 완전한 액세스를 제공하는 주소 변환 서비스들을 지원한다.
적어도 하나의 실시예에서, 복사 엔진은 복수의 PPU들 사이에서 또는 PPU들과 CPU들 사이에서 데이터를 전송한다. 적어도 하나의 실시예에서, 복사 엔진들은 페이지 테이블들에 맵핑되지 않은 주소들에 대한 페이지 오류들을 생성할 수 있고 메모리 파티션 유닛(3200)은 페이지 오류들을 서비스하고 주소들을 페이지 테이블에 맵핑한 후, 복사 엔진이 전송을 수행한다. 적어도 하나의 실시예에서, 메모리는 복수의 프로세서들 사이의 복수의 복사 엔진 동작들을 위해 고정(즉, 페이징 불가)되어, 가용 메모리를 상당히 감소시킨다. 적어도 하나의 실시예에서, 하드웨어 페이지 오류시에, 메모리 페이지들이 상주하는지 여부에 관계없이 주소들이 복사 엔진들에 전달될 수 있고, 복사 프로세스가 투명하다.
도 30의 메모리(3004) 또는 다른 시스템 메모리로부터의 데이터는 메모리 파티션 유닛(3200)에 의해 인출되고 L2 캐시(3204)에 저장되며, L2 캐시는 온칩에 위치하고 적어도 하나의 실시예에 따라 다양한 GPC들 사이에서 공유된다. 각각의 메모리 파티션 유닛(3200)은, 적어도 하나의 실시예에서, 제한없이, 대응하는 메모리 디바이스와 연관된 L2 캐시의 적어도 일부를 포함한다. 적어도 하나의 실시예에서, 하위 레벨 캐시들은 GPC들 내에서 다양한 유닛으로 구현된다. 적어도 하나의 실시예에서, SM들(3114) 각각은 레벨 1("L1") 캐시를 구현할 수 있고, 여기서 L1 캐시는 특정한 SM(3114)에 전용인 사적 메모리이고 L2 캐시(3204)로부터의 데이터가 인출되어, SM(3114)의 기능 유닛들에서의 처리를 위해 L1 캐시들 각각에 저장된다. 적어도 하나의 실시예에서, L2 캐시(3204)는 메모리 인터페이스(3206) 및 XBar(3020)에 결합된다.
ROP 유닛(3202)은, 적어도 하나의 실시예에서, 컬러 압축, 픽셀 블렌딩 등의, 픽셀 컬러와 관련된 그래픽 래스터 연산들을 수행한다. ROP 유닛(3202)은, 적어도 하나의 실시예에서, 래스터 엔진(3108)과 함께 깊이 테스팅을 구현하며, 래스터 엔진(3108)의 컬링 엔진으로부터의 픽셀 단편과 연관된 샘플 위치에 대한 깊이를 수신한다. 적어도 하나의 실시예에서, 깊이는 단편과 연관된 샘플 위치에 대한 깊이 버퍼에서의 대응하는 깊이와 대조하여 테스트된다. 적어도 하나의 실시예에서, 단편이 샘플 위치에 대한 깊이 테스트를 통과하면, ROP 유닛(3202)은 깊이 버퍼를 업데이트하고 깊이 테스트의 결과를 래스터 엔진(3108)에 전송한다. 파티션 유닛(3200)의 수는 GPC의 수와는 상이할 수 있고, 따라서 각각의 ROP 유닛(3202)은, 적어도 하나의 실시예에서, GPC들 각각에 결합될 수 있다는 것을 이해할 것이다. 적어도 하나의 실시예에서, ROP 유닛(3202)은 상이한 GPC들로부터 수신된 패킷들을 추적하고 ROP 유닛(3202)에 의해 생성된 결과가 XBar(3020)를 통해 라우팅되는지를 결정한다.
도 33은 적어도 하나의 실시예에 따른 스트리밍 멀티프로세서("SM")(3300)를 나타낸다. 적어도 하나의 실시예에서, SM(3300)은 도 31의 SM(3114)이다. 적어도 하나의 실시예에서, SM(3300)은, 제한없이, 명령어 캐시(3302); 하나 이상의 스케쥴러 유닛(3304); 레지스터 파일(3308); 하나 이상의 처리 코어("코어")(3310); 하나 이상의 특별 기능 유닛("SFU")(3312); 하나 이상의 로딩/저장 유닛("LSU")(3314); 인터커넥트 네트워크(3316); 공유된 메모리/레벨 1("L1") 캐시(3318); 및 이들의 임의의 적절한 조합을 포함한다. 적어도 하나의 실시예에서, 작업 분배 유닛은 병렬 처리 유닛들("PPUs")의 일반 처리 클러스터들("GPCs") 상에서의 실행을 위한 태스크들을 디스패치하고, 각각의 태스크는 GPC 내의 특정한 데이터 처리 클러스터("DPC")에 할당되고, 태스크가 셰이더 프로그램과 연관되는 경우, 태스크는 SM들(3300) 중 하나에 할당된다. 적어도 하나의 실시예에서, 스케쥴러 유닛(3304)은 작업 분배 유닛으로부터 태스크들을 수신하고 SM(3300)에 할당된 하나 이상의 스레드 블록에 대한 명령어 스케쥴링을 관리한다. 적어도 하나의 실시예에서, 스케쥴러 유닛(3304)은 병렬 스레드들의 워프들로서의 실행을 위해 스레드 블록들을 스케쥴링하고, 여기서 각각의 스레드 블록은 적어도 하나의 워프에서 할당된다. 적어도 하나의 실시예에서, 각각의 워프는 스레드들을 실행한다. 적어도 하나의 실시예에서, 스케쥴러 유닛(3304)은 복수의 상이한 스레드 블록을 관리하고, 워프들을 상이한 스레드 블록들에 할당한 다음, 각각의 클록 사이클 동안, 명령어들을, 복수의 상이한 협력 그룹으로부터 다양한 기능 유닛(예를 들어, 처리 코어들(3310), SFU들(3312), 및 LSU들(3314))에 디스패치한다.
적어도 하나의 실시예에서, 협력 그룹들이란, 개발자들이 스레드들이 통신하고 있는 세분도를 표현하는 것을 허용하여 더 풍부하고 효율적인 병렬 분해들의 표현을 가능케하는 통신 스레드 그룹들을 조직화하기 위한 프로그래밍 모델을 지칭할 수 있다. 적어도 하나의 실시예에서, 협력 론칭 API들은 병렬 알고리즘들의 실행을 위한 스레드 블록들 사이의 동기화를 지원한다. 적어도 하나의 실시예에서, 종래의 프로그래밍 모델들의 애플리케이션들은 협력 스레드들을 동기화하기 위한 단일의 간단한 구성 : 스레드 블록의 모든 스레드들에 걸친 장벽(예를 들어, syncthreads() 함수)을 제공한다. 그러나, 적어도 하나의 실시예에서, 프로그래머들은, 스레드 블록 세분도들보다 작은 스레드들의 그룹들을 정의하고 정의된 그룹들 내에서 동기화하여 집합적인 범그룹적 기능 인터페이스들의 형태로 더 높은 성능, 설계 유연성 및 소프트웨어 재사용을 가능케할 수 있다. 적어도 하나의 실시예에서, 협력 그룹들은 프로그래머들이 서브블록(즉, 단일 스레드만큼 작음) 및 다중 블록 세분도들에서 명시적으로 스레드들의 그룹들을 정의하고 협력 그룹 내의 스레드들에 대한 동기화 등의 집합적 연산들을 수행할 수 있게 한다. 적어도 하나의 실시예에서, 프로그래밍 모델은 소프트웨어 경계들을 가로지르는 클린 컴포지션(clean composition)을 지원하므로, 라이브러리들 및 유틸리티 기능들은 수렴에 대한 가정들을 할 필요 없이 그들의 로컬 컨텍스트 내에서 안전하게 동기화할 수 있다. 적어도 하나의 실시예에서, 협력 그룹 프리미티브들은, 제한없이, 생산자-소비자 병렬화, 기회주의적 병렬화, 및 스레드 블록들의 전체 그리드에 걸친 전역적 동기화를 포함한, 협력적 병렬화의 새로운 패턴들을 가능케한다.
적어도 하나의 실시예에서, 디스패치 유닛(3306)은 기능 유닛들 중 하나 이상에 명령어들을 전송하도록 구성되고, 스케쥴러 유닛(3304)은, 제한없이, 각각의 클록 사이클 동안 동일한 워프로부터의 2개의 상이한 명령어들이 디스패치될 수 있게 하는 2개의 디스패치 유닛들(3306)을 포함한다. 적어도 하나의 실시예에서, 각각의 스케쥴러 유닛(3304)은 단일 디스패치 유닛(3306) 또는 추가적인 디스패치 유닛(3306)을 포함한다.
적어도 하나의 실시예에서, 각각의 SM(3300)은, 적어도 하나의 실시예에서, 제한없이, SM(3300)의 기능 유닛들에 대한 한 세트의 레지스터들을 제공하는 레지스터 파일(3308)을 포함한다. 적어도 하나의 실시예에서, 레지스터 파일(3308)은, 각각의 기능 유닛이 레지스터 파일(3308)의 전용 부분에 할당되도록 기능 유닛들 각각 사이에서 분할된다. 적어도 하나의 실시예에서, 레지스터 파일(3308)은 SM(3300)에 의해 실행되는 상이한 워프들 사이에 분할되고 레지스터 파일(3308)은 기능 유닛들의 데이터 경로들에 접속된 피연산자들을 위한 임시 저장을 제공한다. 적어도 하나의 실시예에서, 각각의 SM(3300)은, 제한없이, 복수의 L 처리 코어(3310)를 포함한다. 적어도 하나의 실시예에서, SM(3300)은, 제한없이, 많은 수(예를 들어, 128개 이상)의 별개의 처리 코어(3310)를 포함한다. 적어도 하나의 실시예에서, 각각의 처리 코어(3310)는, 적어도 하나의 실시예에서, 제한없이, 부동 소수점 산술 로직 유닛 및 정수 산술 로직 유닛을 포함한 그러나 이것으로 제한되지 않는, 완전 파이프라인화된, 단정도, 배정도, 및/또는 혼합 정밀도 처리 유닛을 포함한다. 적어도 하나의 실시예에서, 부동 소수점 산술 로직 유닛은 부동 소수점 산술을 위한 IEEE 754-2008 표준을 구현한다. 적어도 하나의 실시예에서, 처리 코어(3310)는, 제한없이, 64개의 단정도(32비트) 부동 소수점 코어들, 64개의 정수 코어들, 32개의 배정도(64비트) 부동 소수점 코어들, 및 8개의 텐서 코어들을 포함한다.
텐서 코어들은, 적어도 하나의 실시예에 따라 행렬 연산들을 수행하도록 구성된다. 적어도 하나의 실시예에서, 하나 이상의 텐서 코어가 처리 코어들(3310)에 포함된다. 적어도 하나의 실시예에서, 텐서 코어들은, 신경망 훈련 및 추론을 위한 콘볼루션 연산들 등의, 심층 학습 행렬 산술을 수행하도록 구성된다. 적어도 하나의 실시예에서, 각각의 텐서 코어는 4x4 행렬 상에서 동작하고 행렬 곱셈 및 누적 연산 D = A X B + C를 수행하며, 여기서 A, B, C, 및 D는 4x4 행렬이다.
적어도 하나의 실시예에서, 행렬 곱셈 입력들 A 및 B는 16비트 부동 소수점 행렬이고 누적 행렬들 C 및 D는 16비트 부동 소수점 또는 32비트 부동 소수점 행렬들이다. 적어도 하나의 실시예에서, 텐서 코어들은, 32비트 부동 소수점 누적과 함께 16비트 부동 소수점 입력 데이터에 관해 작동한다. 적어도 하나의 실시예에서, 16비트 부동 소수점 곱은 64개의 연산을 이용하고, 4x4x4 행렬 곱을 위한 다른 중간 곱들과 함께 32비트 부동 소수점 덧셈을 이용하여 누적되는 완전한 정밀도 곱을 생성한다. 텐서 코어들은, 적어도 하나의 실시예에서, 이들 더 작은 요소들로부터 구축되는, 훨씬 더 큰 2차원 또는 더 높은 차원의 행렬 연산들을 수행하는데 이용된다. 적어도 하나의 실시예에서, CUDA 9 C++ API 등의 API는 전문화된 행렬 로딩, 행렬 곱셈 및 누적, 및 행렬 저장 연산들을 노출시켜 CUDA-C++ 프로그램으로부터 텐서 코어들을 효율적으로 이용한다. 적어도 하나의 실시예에서, CUDA 레벨에서, 워프-레벨 인터페이스는, 워프의 32개 스레드 모두에 걸쳐 있는 16x16 크기 행렬들을 가정한다.
적어도 하나의 실시예에서, 각각의 SM(3300)은, 제한없이, 특별한 기능들(예를 들어, 속성 평가, 역제곱근 등)을 수행하는 M개의 SFU(3312)를 포함한다. 적어도 하나의 실시예에서, SFU들(3312)은, 제한없이, 계층구조적 트리 데이터 구조를 순회하도록 구성된 트리 순회 유닛을 포함한다. 적어도 하나의 실시예에서, SFU들(3312)은, 제한없이, 텍스쳐 맵 필터링 연산들을 수행하도록 구성된 텍스쳐 유닛을 포함한다. 적어도 하나의 실시예에서, 텍스쳐 유닛들은 SM(3300)에 의해 실행되는 셰이더 프로그램들에서 이용하기 위한 샘플링된 텍스쳐 값들을 생성하기 위해 메모리 및 샘플 텍스쳐 맵들로부터 텍스쳐 맵들(예를 들어, 텍셀들의 2D 어레이)을 로딩하도록 구성된다. 적어도 하나의 실시예에서, 텍스쳐 맵들은 공유된 메모리/L1 캐시(3318)에 저장된다. 적어도 하나의 실시예에서, 텍스쳐 유닛들은, 적어도 하나의 실시예에 따라, 밉맵들(예를 들어, 다양한 레벨들의 상세사항의 텍스쳐 맵들)을 이용하는 필터링 연산들 등의 텍스쳐 연산들을 구현한다. 적어도 하나의 실시예에서, 각각의 SM(3300)은, 제한없이, 2개의 텍스쳐 유닛을 포함한다.
각각의 SM(3300)은, 적어도 하나의 실시예에서, 제한없이, 공유된 메모리/L1 캐시(3318)와 레지스터 파일(3308) 사이의 로딩 및 저장 동작들을 구현하는 N개의 LSU(3314)를 포함한다. 각각의 SM(3300)은, 적어도 하나의 실시예에서, 제한없이, 기능 유닛들 각각을 레지스터 파일(3308)에 접속하고 LSU(3314)를 레지스터 파일(3308) 및 공유된 메모리/L1 캐시(3318)에 접속하는 인터커넥트 네트워크(3316)를 포함한다. 적어도 하나의 실시예에서, 인터커넥트 네트워크(3316)는, 기능 유닛들 중 임의의 것을 레지스터 파일(3308) 내의 임의의 레지스터에 접속하고 LSU들(3314)을 레지스터 파일(3308) 및 공유된 메모리/L1 캐시(3318)의 메모리 위치들에 접속하도록 구성될 수 있는 크로스바이다.
적어도 하나의 실시예에서, 공유된 메모리/L1 캐시(3318)는, 적어도 하나의 실시예에서, SM(3300)과 프리미티브 엔진 사이 및 SM(3300)의 스레드들 사이에서의 데이터 저장 및 통신을 허용하는 온칩 메모리의 어레이이다. 적어도 하나의 실시예에서, 공유된 메모리/L1 캐시(3318)는, 제한없이, 128KB의 저장 용량을 포함하고 SM(3300)으로부터 파티션 유닛으로의 경로 내에 있다. 적어도 하나의 실시예에서, 공유된 메모리/L1 캐시(3318)는, 적어도 하나의 실시예에서, 판독 및 기입들을 캐싱하는데 이용된다. 적어도 하나의 실시예에서, 공유된 메모리/L1 캐시(3318), L2 캐시, 및 메모리 중 하나 이상은 백업 저장소이다.
데이터 캐시와 공유된 메모리 기능을 단일 메모리 블록으로 결합하는 것은, 적어도 하나의 실시예에서, 양쪽 유형의 메모리 액세스들에 대해 향상된 성능을 제공한다. 적어도 하나의 실시예에서, 공유된 메모리가 용량의 절반을 이용하도록 구성된 경우 등에서, 용량은 공유된 메모리를 이용하지 않는 프로그램들에 의해 캐시로 이용되거나 캐시로서 이용가능하며, 텍스쳐 및 로딩/저장 동작들은 나머지 용량을 이용할 수 있다. 공유된 메모리/L1 캐시(3318) 내의 통합은, 적어도 하나의 실시예에 따라, 공유된 메모리/L1 캐시(3318)가 스트리밍 데이터를 위한 고처리량 도관으로서 기능하는 동시에, 빈번하게 재사용되는 데이터에 대한 고대역폭 및 저레이턴시 액세스를 제공하는 것을 가능케한다. 적어도 하나의 실시예에서, 범용 병렬 계산을 위해 구성될 때, 그래픽 처리에 비해 더 간단한 구성이 이용될 수 있다. 적어도 하나의 실시예에서, 고정 기능 그래픽 처리 유닛들은 바이패스되어, 훨씬 더 단순한 프로그래밍 모델을 생성한다. 범용 병렬 계산 구성에서, 작업 분배 유닛은, 적어도 하나의 실시예에서, 스레드들의 블록들을 DPC들에 직접 할당 및 분배한다. 적어도 하나의 실시예에서, 블록 내의 스레드들은, 각각의 스레드가 고유한 결과들을 생성하는 것을 보장하기 위해 계산에서 고유한 스레드 ID를 이용하여 동일한 프로그램을 실행하고, SM(3300)을 이용하여 프로그램을 실행하고 계산들을 수행하며, 공유된 메모리/L1 캐시(3318)를 이용하여 스레드들 사이에서 통신하고, LSU(3314)를 이용하여 공유된 메모리/L1 캐시(3318) 및 메모리 파티션 유닛을 통해 전역 메모리를 판독하고 기입한다. 적어도 하나의 실시예에서, 범용 병렬 계산을 위해 구성될 때, SM(3300)은 스케쥴러 유닛(3304)이 DPC들 상에서 새로운 작업을 론칭하는데 이용할 수 있는 커맨드들을 기입한다.
적어도 하나의 실시예에서, PPU는, 데스크탑 컴퓨터, 랩탑 컴퓨터, 태블릿 컴퓨터, 서버들, 슈퍼컴퓨터들, 스마트폰(예를 들어, 무선, 핸드헬드 디바이스), 개인 휴대 정보 단말기("PDA”), 디지털 카메라, 차량, 헤드 장착형 디스플레이, 핸드헬드 전자 디바이스 등에 포함되거나 이에 결합된다. 적어도 하나의 실시예에서, PPU는 단일의 반도체 기판 상에 구현된다. 적어도 하나의 실시예에서, PPU는, 추가 PPU들, 메모리, 축소된 명령어 세트 컴퓨터("RISC") CPU, 메모리 관리 유닛("MMU"), 디지털-아날로그 변환기("DAC") 등의 하나 이상의 다른 디바이스와 함께 시스템 온 칩("SoC")에 포함된다.
적어도 하나의 실시예에서, PPU는 하나 이상의 메모리 디바이스를 포함하는 그래픽 카드에 포함될 수 있다. 그래픽 카드는, 데스크탑 컴퓨터의 마더보드 상의 PCIe 슬롯과 인터페이스하도록 구성될 수 있다. 적어도 하나의 실시예에서, PPU는 마더보드의 칩셋에 포함된 통합된 그래픽 처리 유닛("iGPU")일 수 있다.
추론 및/또는 훈련 로직(915)은 하나 이상의 실시예와 연관된 추론 및/또는 훈련 연산들을 수행하는데 이용된다. 추론 및/또는 훈련 로직(915)에 관한 상세사항은 도 9a 및/또는 도 9b와 관련하여 아래에 제공된다. 적어도 하나의 실시예에서, 심층 학습 애플리케이션 프로세서는, SM(3300)에 제공된 정보를 예측하거나 추론하기 위해, 신경망 등의 머신 학습 모델을 훈련시키는데 이용된다. 적어도 하나의 실시예에서, SM(3300)은, 또 다른 프로세서 또는 시스템에 의해 또는 SM(3300)에 의해 훈련이 이루어진 훈련된 머신 학습 모델(예를 들어, 신경망)에 기초하여 정보를 추론하거나 예측하는데 이용된다. 적어도 하나의 실시예에서, SM(3300)은 여기서 설명된 하나 이상의 신경망 이용 사례를 수행하는데 이용될 수 있다.
적어도 하나의 실시예에서, 이러한 컴포넌트들은, 더 낮은 프레임 레이트 비디오의 프레임들로부터 더 높은 프레임 레이트 비디오를 생성하는 것 등의, 하나 이상의 신경망을 이용하여 향상된 비디오를 생성하는데 이용될 수 있다.
적어도 하나의 실시예에서, 단일의 반도체 플랫폼이란, 유일한 단일 반도체 기반 집적 회로 또는 칩을 지칭할 수 있다. 적어도 하나의 실시예에서, 멀티칩 모듈들은 온칩 동작을 시뮬레이션하고, 종래의 중앙 처리 유닛("CPU") 및 버스 구현을 이용하는 것보다 상당한 개선을 이루는 증가된 접속성을 동반하여 이용될 수 있다. 적어도 하나의 실시예에서, 다양한 모듈은 또한, 사용자의 요구에 따라 별개로 또는 반도체 플랫폼들의 다양한 조합으로 위치할 수 있다.
적어도 하나의 실시예에서, 머신 판독가능한 실행 코드 또는 컴퓨터 제어 로직 알고리즘들 형태의 컴퓨터 프로그램들은 메인 메모리(1304) 및/또는 2차 저장소에 저장된다. 컴퓨터 프로그램은, 적어도 하나의 실시예에 따라, 하나 이상의 프로세서에 의해 실행되는 경우, 시스템(1300)이 다양한 기능을 수행할 수 있게 한다. 적어도 하나의 실시예에서, 메모리(1304), 저장소, 및/또는 기타 임의의 저장소는 컴퓨터 판독가능한 매체의 가능한 예들이다. 적어도 하나의 실시예에서, 2차 저장소는, 플로피 디스크 드라이브, 자기 테이프 드라이브, 컴팩트 디스크 드라이브, 디지털 다목적 디스크("DVD") 드라이브, 레코딩 디바이스, 범용 직렬 버스("USB") 플래시 메모리 등을 나타내는 하드 디스크 드라이브 및/또는 착탈식 저장 드라이브 등의 임의의 적절한 저장 디바이스 또는 시스템을 지칭할 수 있다. 적어도 하나의 실시예에서, 다양한 이전 도면들의 아키텍쳐 및/또는 기능은 CPU(1302); 병렬 처리 시스템(1312); CPU(1302)와 병렬 처리 시스템(1312) 양쪽 모두의 능력의 적어도 일부를 수행할 수 있는 집적 회로; 칩셋(예를 들어, 관련 기능들을 수행하기 위한 유닛으로서 작동 및 판매되도록 설계된 집적 회로 그룹 등); 및 집적 회로(들)의 임의의 적절한 조합의 정황에서 구현된다.
적어도 하나의 실시예에서, 다양한 이전 도면들의 아키텍쳐 및/또는 기능은, 일반 컴퓨터 시스템, 회로 기판 시스템, 엔터테인먼트 목적 전용의 게임 콘솔 시스템, 애플리케이션-특유의 시스템 등의 정황에서 구현된다. 적어도 하나의 실시예에서, 컴퓨터 시스템(1300)은, 데스크탑 컴퓨터, 랩탑 컴퓨터, 태블릿 컴퓨터, 서버들, 슈퍼컴퓨터들, 스마트폰(예를 들어, 무선 핸드헬드 디바이스), 개인 휴대 정보 단말기("PDA"), 디지털 카메라, 차량, 헤드 장착형 디스플레이, 핸드헬드 전자 디바이스, 모바일 전화 디바이스, 텔레비전, 워크스테이션, 게임 콘솔, 임베디드 시스템, 및/또는 기타 임의의 유형의 로직의 형태를 취할 수 있다.
적어도 하나의 실시예에서, 병렬 처리 시스템(1312)은, 제한없이, 복수의 병렬 처리 유닛("PPU")(1314) 및 연관된 메모리들(1316)을 포함한다. 적어도 하나의 실시예에서, PPU(1314)는 인터커넥트(1318) 및 스위치(1320) 또는 멀티플렉서를 통해 호스트 프로세서 또는 기타의 주변 디바이스들에 접속된다. 적어도 하나의 실시예에서, 병렬 처리 시스템(1312)은 병렬화될 수 있는 PPU들(1314)에 걸쳐 계산 태스크들을 분배한다 ― 예를 들어, 복수의 그래픽 처리 유닛("GPU") 스레드 블록들에 걸친 계산 태스크들의 분배의 일부로서. 적어도 하나의 실시예에서, 메모리는 PPU들(1314)의 일부 또는 전체에 걸쳐 (예를 들어, 판독 및/또는 기입 액세스에 대해) 공유되고 액세스가능하지만, 이러한 공유된 메모리는 PPU(1314)에 상주하는 레지스터들 및 로컬 메모리의 이용과 관련하여 성능 페널티를 초래할 수 있다. 적어도 하나의 실시예에서, PPU들(1314)의 동작은 __syncthreads() 등의 커맨드의 이용을 통해 동기화되며, 여기서 (예를 들어, 복수의 PPU(1314)에 걸쳐 실행되는) 블록 내의 모든 스레드는 진행하기 전에 코드의 소정 실행 지점에 도달한다.
다른 변형들은 본 개시내용의 사상 내에 있다. 따라서, 개시된 기술들은 다양한 수정 및 대안적인 구성이 가능하지만, 그 소정의 예시된 실시예들은 도면들에 도시되고 위에서 상세히 설명되었다. 그러나, 개시된 특정한 형태 또는 형태들로 본 개시내용을 제한하려는 의도는 없지만, 첨부된 청구항들에 정의된 바와 같이 본 개시내용의 사상 및 범위 내에 속하는 모든 수정, 대안적 구성 및 균등물을 포함하고자 하는 의도임을 이해해야 한다.
개시된 실시예들을 설명하는 정황에서 (특히 이하의 청구들의 정황에서) 용어 "a" 및 "an" 및 "the"의 이용 및 유사한 지시물들은, 용어의 정의로서가 아니라, 본 명세서에 달리 나타내거나 문맥상 명확히 상충되지 않는 한, 단수와 복수 양쪽 모두를 포괄하는 것으로 해석되어야 한다. 용어들 "~을 포함하는", "~을 갖는, "~을 내포하는, "~을 담고 있는"은, 달리 언급되지 않는 한 ("~을 포함한 그러나 이것으로 제한되지 않는"을 의미하는) 제약을 두지 않는 용어들로서 해석되어야 한다. 용어 "접속된"은, 수정되지 않고 물리적 접속들을 지칭할 때, 중간에 무언가가 있더라도 부분적으로 또는 전체적으로 ~ 내에 포함되거나, ~에 부착되거나, ~함께 결합된 것으로서 해석되어야 한다. 본 명세서에서 값들의 범위를 열거한 것은, 본 명세서에서 달리 표시되지 않는 한, 그 범위 내에 속하는 각각의 별개의 값을 개별적으로 언급하는 약식 방법으로서 역할하는 것으로 단지 의도되며, 각각의 별개의 값은 본 명세서에서 개별적으로 나열된 것처럼 본 명세서에 통합된다. 용어 "세트"(예를 들어, "한 세트의 항목들") 또는 "서브세트"의 사용은, 문맥상 달리 언급되거나 상충되지 않는 한, 하나 이상의 멤버를 포함하는 비어 있지 않은 집합으로서 해석되어야 한다. 또한, 문맥상 달리 언급되거나 모순되지 않는 한, 용어, 대응하는 세트의 "서브세트"란, 반드시 대응하는 세트의 적절한 서브세트를 의미하는 것은 아니지만, 서브세트 및 대응하는 세트는 동일할 수 있다.
"A, B, 및 C 중 적어도 하나" 형태의 구문들 또는 "A, B 및 C 중 적어도 하나" 등의 연결성 구문들은, 구체적으로 달리 언급되지 않거나 문맥상 명백하게 상충되지 않는 한, 문맥과 함께, 항목, 조건 등이 A 또는 B 또는 C이거나, A와 B와 C로 이루어진 세트의 비어 있지 않은 임의의 서브세트일 수 있다는 것을 나타내기 위해 일반적으로 사용되는 것으로 이해되어야 한다. 예를 들어, 3개의 멤버를 갖는 세트의 예시에서, 연결성 구문들 "A, B, 및 C 중 적어도 하나"와 "A, B 및 C 중 적어도 하나"는 다음과 같은 세트들 중 임의의 것을 나타낸다: {A}, {B}, {C}, {A, B}, {A, C}, {B, C}, {A, B, C}. 따라서, 이러한 연결성 용어는, 일반적으로, 소정의 실시예들이, A 중 적어도 하나, B 중 적어도 하나, 및 C 중 적어도 하나가 각각 존재할 것을 요구한다는 것을 암시하도록 의도한 것은 아니다. 또한, 문맥상 달리 언급되거나 상충되지 않는 한, 용어 "복수"는 복수인 상태를 나타낸다(예를 들어, "복수의 항목"은 여러 항목을 나타냄). 복수는 적어도 2개의 항목이지만, 명시적으로 또는 문맥에 의해 표시될 때 더 많을 수 있다. 또한, 달리 언급되거나 문맥상 명백하지 않은 한, "~에 기초한"이라는 구문은 "~에 전적으로 기초한"이 아니라 "~에 적어도 부분적으로 기초한"을 의미한다.
본 명세서에 설명된 프로세스들의 동작들은, 본 명세서에 달리 나타내지 않거나 문맥상 명백히 상충되지 않는 한 임의의 적절한 순서로 수행될 수 있다. 적어도 하나의 실시예에서, 여기서 설명된 프로세스들(또는 이들의 변형들 및/또는 조합들) 등의 프로세스는, 실행가능한 명령어들로 구성된 하나 이상의 컴퓨터 시스템의 제어하에 수행되고, 하나 이상의 프로세서 상에서 집합적으로 실행되는 코드(예를 들어, 실행가능한 명령어들, 하나 이상의 컴퓨터 프로그램 또는 하나 이상의 애플리케이션)로서, 하드웨어에 의해 또는 이들의 조합으로 구현된다. 적어도 하나의 실시예에서, 코드는, 예를 들어, 하나 이상의 프로세서에 의해 실행가능한 복수의 명령어를 포함하는 컴퓨터 프로그램의 형태로, 컴퓨터 판독가능한 저장 매체 상에 저장된다. 적어도 하나의 실시예에서, 컴퓨터 판독가능한 저장 매체는, 일시적인 신호들(예를 들어, 전파하는 과도적인 전기 또는 전자기 전송)을 배제하지만 일시적인 신호들의 트랜시버들 내의 비일시적인 데이터 저장 회로(예를 들어, 버퍼, 캐시 및 큐)를 포함하는 비일시적인 컴퓨터 판독가능한 저장 매체이다. 적어도 하나의 실시예에서, 코드(예를 들어, 실행가능한 코드 또는 소스 코드)는, 컴퓨터 시스템의 하나 이상의 프로세서에 의해 실행될 때(즉, 실행의 결과로서), 컴퓨터 시스템으로 하여금 여기서 설명된 동작들을 수행하게 하는 실행가능한 명령어들이 저장된 한 세트의 하나 이상의 비일시적인 컴퓨터 판독가능한 저장 매체(또는 실행가능한 명령어들을 저장하는 기타의 메모리) 상에 저장된다. 한 세트의 비일시적 컴퓨터 판독가능한 저장 매체는, 적어도 하나의 실시예에서, 복수의 비일시적인 컴퓨터 판독가능한 저장 매체를 포함하고, 복수의 비일시적인 컴퓨터 판독가능한 저장 매체 중 개개의 비일시적인 저장 매체들 중 하나 이상은 코드 전부를 갖고 있는 것은 아니지만, 복수의 비일시적인 컴퓨터 판독가능한 저장 매체는 코드 전부를 집합적으로 저장한다. 적어도 하나의 실시예에서, 실행가능한 명령어들은 실행되되, 상이한 명령어들이 상이한 프로세서들에 의해 실행되도록 ―예를 들어, 비일시적인 컴퓨터 판독가능한 저장 매체는 명령어들을 저장하고 메인 중앙 처리 유닛("CPU")은 명령어들 중 일부를 실행하는 반면 그래픽 처리 유닛("GPU")은 다른 명령어들을 실행하도록 실행된다. 적어도 하나의 실시예에서, 컴퓨터 시스템의 상이한 컴포넌트들은 별개의 프로세서들을 갖고 상이한 프로세서들은 명령어들의 상이한 서브세트들을 실행한다.
따라서, 적어도 하나의 실시예에서, 컴퓨터 시스템들은 본 명세서에 설명된 프로세스들의 동작들을 단독으로 또는 집합적으로 수행하는 하나 이상의 서비스를 구현하도록 구성되고 이러한 컴퓨터 시스템들은 동작의 수행을 가능케하는 적용가능한 하드웨어 및/또는 소프트웨어로 구성된다. 또한, 본 개시내용의 적어도 하나의 실시예를 구현하는 컴퓨터 시스템은 단일 디바이스고, 또 다른 실시예에서는, 상이하게 동작하는 복수의 디바이스를 포함하는 분산형 컴퓨터 시스템으로서, 분산형 컴퓨터 시스템이 여기서 설명된 동작들을 수행하지만 단일의 디바이스가 동작들 모두를 수행하지는 않는다.
여기서 제공된 임의의 예 및 모든 예들, 또는 예시적인 용어(예를 들어, "~ 등의")의 사용은, 단지 본 개시내용의 실시예들을 더 명료하게 하기 위한 것일 뿐이며, 달리 청구되지 않는 한 본 개시내용의 범위에 어떠한 제한을 두는 것은 아니다. 명세서의 어떠한 용어도 본 개시내용의 실시에 필수적인 임의의 청구되지 않은 요소를 가리키는 것으로 해석되어서는 안 된다.
본 명세서에서 인용된 간행물들, 특허 출원들, 및 특허들을 포함한 모든 참고 문헌은, 마치 각각의 참고 문헌이 개별적으로 그리고 구체적으로 참조에 의해 포함되고 그 전체내용이 여기에 기재된 것과 동일한 정도로 참조에 의해 본 명세서에 포함된다.
상세한 설명 및 청구항들에서, 용어들 "결합된" 및 "접속된"은, 그들의 파생어들과 함께 사용될 수 있다. 이들 용어들은 서로 동의어로서 의도한 것은 아님을 이해해야 한다. 오히려, 특정한 예들에서, "접속된" 또는 "결합된"은 2개 이상의 요소가 직접 또는 간접으로 물리적 또는 전기적으로 서로 접촉한다는 것을 나타내는데 사용될 수 있다. "결합된"은 또한, 2개 이상의 요소가 서로 직접 접촉하지 않고, 오히려 서로 협력하거나 상호작용한다는 것을 의미할 수도 있다.
구체적으로 달리 언급되지 않는 한, 명세서 전체를 통해, "처리", 컴퓨팅, 계산", "결정 등과 같은 용어들은, 컴퓨팅 시스템의 레지스터들 및/또는 메모리들 내의 전자적 등의 물리적 양으로서 표현된 데이터를, 컴퓨팅 시스템의 메모리들, 레지스터들, 또는 기타의 이러한 정보 저장, 전송 또는 디스플레이 디바이스들 내의 물리적 양으로서 유사하게 표현된 기타의 데이터로 조작 및/또는 변환하는, 컴퓨터 또는 컴퓨팅 시스템, 또는 유사한 전자적 컴퓨팅 디바이스의 동작 및/또는 프로세스들을 지칭한다는 것을 이해해야 한다.
유사한 방식으로, 용어 "프로세서"란, 레지스터들 및/또는 메모리로부터의 전자적 데이터를 처리하여 그 전자적 데이터를 레지스터들 및/또는 메모리에 저장될 수 있는 다른 전자적 데이터로 변환하는 임의의 디바이스 또는 디바이스의 일부를 지칭한다. 비제한적인 예로서, "프로세서"는 CPU 또는 GPU일 수 있다. "컴퓨팅 플랫폼"은 하나 이상의 프로세서를 포함할 수 있다. 본 명세서에 사용될 때, "소프트웨어" 프로세스는, 예를 들어, 태스크들, 스레드들, 및 지능형 에이전트들 등의, 시간 경과에 따라 작업을 수행하는 소프트웨어 및/또는 하드웨어 엔티티들을 포함할 수 있다. 또한, 각각의 프로세스는, 명령어들을 순서대로 또는 병렬로, 연속적으로 또는 간헐적으로 실행하기 위해 여러 프로세스를 참조할 수 있다. 용어들 "시스템" 및 "방법"은, 시스템이 하나 이상의 방법을 구현할 수 있고 방법들이 시스템으로 간주될 수 있는 한 여기서는 서로 바꾸어 사용된다.
본 문서에서, 아날로그 또는 디지털 데이터를 획득하거나, 취득하거나, 수신하거나, 또는 서브시스템, 컴퓨터 시스템 또는 컴퓨터-구현된 머신에 입력하는 것에 대한 참조가 이루어질 수 있다. 아날로그 및 디지털 데이터의 획득, 취득, 수신 또는 입력하는 것은, 함수 호출 또는 애플리케이션 프로그래밍 인터페이스에 대한 호출의 파라미터로서 데이터를 수신하는 것 등의 다양한 방식으로 달성될 수 있다. 일부 구현에서, 아날로그 또는 디지털 데이터를 획득, 취득, 수신 또는 입력하는 프로세스는, 직렬 또는 병렬 인터페이스를 통해 데이터를 전송함으로써 달성될 수 있다. 또 다른 구현에서, 아날로그 또는 디지털 데이터를 획득, 취득, 수신 또는 입력하는 프로세스는, 컴퓨터 네트워크를 통해 데이터를 제공측 엔티티로부터 취득측 엔티티로 전송함으로써 달성될 수 있다. 또한, 아날로그 또는 디지털 데이터를 제공, 출력, 전송, 송신, 또는 프리젠팅하는 것에 대한 참조가 이루어질 수 있다. 다양한 예에서, 아날로그 또는 디지털 데이터를 제공, 출력, 전송, 송신, 또는 프리젠팅하는 프로세스는, 함수 호출의 입력 또는 출력 파라미터로서, 애플리케이션 프로그래밍 인터페이스 또는 프로세스간 통신 메커니즘의 파라미터로서, 데이터를 전송함으로써 달성될 수 있다.
상기의 논의에서는, 설명된 기술들의 예시적인 구현들을 개시하였지만, 설명된 기능을 구현하기 위해 다른 아키텍쳐들이 이용될 수 있고, 본 개시내용의 범위 내에 있는 것으로 의도된다. 또한, 논의의 목적으로 상기 설명에서는 구체적인 책임들의 분배들을 정의했지만, 상황에 따라 다양한 기능과 책임들이 상이한 방식들로 분배 및 분할될 수 있다.
또한, 구조적 피처들 및/또는 방법론적 작용들 특유의 용어로 주제가 설명되었지만, 첨부된 청구항들에서 청구되는 주제는 반드시 설명된 특정한 피처나 작용들로 제한되는 것은 아님을 이해해야 한다. 오히려, 개시된 특정한 피처들 및 작용들은 청구항들을 구현하는 예시적인 형태들로서 개시된 것이다.

Claims (30)

  1. 그래픽 프로세서(GPU)로서,
    그래픽 코어 - 상기 그래픽 코어는:
    명령어 캐시;
    캐시/공유 메모리;
    16비트, 32비트, 및 64비트 부동 소수점 연산들을 수행하는 부동 소수점 로직 유닛들;
    정수 로직 유닛들; 및
    반정밀도(half-precision) 부동 소수점 및 8비트 정수 연산들을 수행하는 행렬 처리 유닛들(MPU들)을 포함함 -;
    메모리;
    메모리 제어기;
    주변 컴포넌트 상호접속 익스프레스(Peripheral Component Interconnect express; PCIe) 인터페이스;
    GPU-대-GPU 브리지에 결합된 링크;
    저해상도 이미지를 포함하는 저해상도 비디오 프레임을 수신하고 상기 저해상도 이미지를 업샘플링하여 신경망을 사용하여 고해상도 이미지를 생성하는 로직; 및
    워핑된(warped) 과거 이미지를 생성하는 워핑 모듈;
    을 포함하고,
    상기 신경망은 업샘플링될 이미지 및 더 높은 해상도 이미지를 포함하는 이미지들의 쌍들을 사용하여 훈련되는, GPU.
  2. 제1항에 있어서, 상기 로직은 상기 저해상도 이미지를 1080p로부터 4k 해상도로 업샘플링하는, GPU.
  3. 제1항에 있어서, 상기 로직은 지터(jitter)를 고려함으로써 업샘플링하는, GPU.
  4. 제1항에 있어서, 상기 로직은 상기 저해상도 이미지를 업샘플링하기 위해 루마-특유의(luma-specific) 이미지 데이터를 사용하는, GPU.
  5. 제1항에 있어서, 상기 고해상도 이미지는 비디오 프레임들의 시퀀스에서 다음 비디오 프레임에 대한 과거 이미지로서의 역할을 하는, GPU.
  6. 제1항에 있어서, 상기 로직은 이미지들의 선명도를 증가시키는, GPU.
  7. 제1항에 있어서, 상기 로직은 머신 러닝을 이용하지 않는 슈퍼 샘플링 알고리즘을 사용하여 상기 저해상도 비디오 프레임을 업샘플링하는, GPU.
  8. 제1항에 있어서, 상기 로직은 상기 고해상도 이미지를 블러링하기 위한 커널을 계산하는, GPU.
  9. 제1항에 있어서, 상기 신경망은 콘볼루션 신경망인, GPU.
  10. 제1항에 있어서, 상기 과거 이미지는 상기 신경망을 사용하여 업샘플링된, GPU.
  11. 시스템-온-칩(SOC)으로서,
    그래픽 프로세서를 포함하고, 상기 그래픽 프로세서는:
    그래픽 코어 - 상기 그래픽 코어는:
    명령어 캐시;
    캐시/공유 메모리;
    16-비트, 32-비트, 및 64-비트 부동 소수점 연산들을 수행하는 부동 소수점 로직 유닛들;
    정수 로직 유닛들; 및
    반정밀도 부동 소수점 및 8비트 정수 연산들을 수행하는 행렬 처리 유닛들(MPU들)을 포함함 -;
    메모리;
    메모리 제어기;
    주변 컴포넌트 상호접속 익스프레스(Peripheral Component Interconnect express; PCIe) 인터페이스;
    GPU-대-GPU 브리지에 결합된 링크;
    저해상도 이미지를 포함하는 저해상도 비디오 프레임을 수신하고 상기 저해상도 이미지를 업샘플링하여 신경망을 사용하여 고해상도 이미지를 생성하는 로직; 및
    워핑된 과거 이미지를 생성하는 워핑 모듈;
    을 포함하고,
    상기 신경망은 업샘플링될 이미지 및 더 높은 해상도 이미지를 포함하는 이미지들의 쌍들을 사용하여 훈련되는, SOC.
  12. 제11항에 있어서, 상기 로직은 상기 저해상도 이미지를 1080p로부터 4k 해상도로 업샘플링하는, SOC.
  13. 제11항에 있어서, 상기 로직은 지터를 고려함으로써 업샘플링하는, SOC.
  14. 제11항에 있어서, 상기 로직은 상기 저해상도 이미지를 업샘플링하기 위해 루마-특유의 이미지 데이터를 사용하는, SOC.
  15. 제11항에 있어서, 상기 고해상도 이미지는 비디오 프레임들의 시퀀스에서 다음 비디오 프레임에 대한 과거 이미지로서의 역할을 하는, SOC.
  16. 제11항에 있어서, 상기 로직은 이미지들의 선명도를 증가시키는, SOC.
  17. 제11항에 있어서, 상기 로직은 머신 러닝을 이용하지 않는 슈퍼 샘플링 알고리즘을 사용하여 상기 저해상도 비디오 프레임을 업샘플링하는, SOC.
  18. 제11항에 있어서, 상기 로직은 상기 고해상도 이미지를 블러링하기 위한 커널을 계산하는, SOC.
  19. 제11항에 있어서, 상기 신경망은 콘볼루션 신경망인, SOC.
  20. 제11항에 있어서, 상기 과거 이미지는 상기 신경망을 사용하여 업샘플링된, SOC.
  21. 방법으로서,
    그래픽 프로세서에 의해, 저해상도 이미지를 포함하는 저해상도 비디오 프레임을 수신하는 단계 - 상기 그래픽 프로세서는:
    그래픽 코어;
    메모리;
    메모리 제어기;
    주변 컴포넌트 상호접속 익스프레스(Peripheral Component Interconnect express; PCIe) 인터페이스;
    GPU-대-GPU 브리지에 결합된 링크
    를 포함하고,
    상기 그래픽 코어는:
    명령어 캐시;
    캐시/공유 메모리;
    16비트, 32비트, 및 64비트 부동 소수점 연산들을 수행하는 부동 소수점 로직 유닛들;
    정수 로직 유닛들; 및
    반정밀도 부동 소수점 및 8비트 정수 연산들을 수행하는 행렬 처리 유닛들(MPU들)을 포함함 -;
    상기 그래픽 프로세서에 의해, 상기 저해상도 이미지를 업샘플링하여 신경망을 사용하여 고해상도 이미지를 생성하는 단계 - 상기 신경망은 업샘플링될 이미지 및 더 높은 해상도 이미지를 포함하는 이미지들의 쌍들을 사용하여 훈련됨 -; 및
    상기 그래픽 프로세서에 의해, 과거 이미지를 워핑하는 단계
    를 포함하는, 방법.
  22. 제21항에 있어서, 업샘플링은 1080p로부터 4k인, 방법.
  23. 제21항에 있어서, 업샘플링은 지터를 고려하는, 방법.
  24. 제21항에 있어서, 업샘플링은 루마-특유의 이미지 데이터를 사용하는, 방법.
  25. 제21항에 있어서, 비디오 프레임들의 시퀀스에서 다음 비디오 프레임에 대한 과거 이미지로서 상기 고해상도 이미지를 사용하는 단계를 더 포함하는, 방법.
  26. 제21항에 있어서, 업샘플링은 이미지들의 선명도를 증가시키는, 방법.
  27. 제21항에 있어서, 상기 저해상도 비디오 프레임을 업샘플링하는 단계는 머신 러닝을 이용하지 않는 슈퍼 샘플링 알고리즘을 사용하는, 방법.
  28. 제21항에 있어서, 상기 고해상도 이미지를 블러링하기 위한 커널을 계산하는 단계를 더 포함하는, 방법.
  29. 제21항에 있어서, 상기 신경망은 콘볼루션 신경망인, 방법.
  30. 제21항에 있어서, 상기 과거 이미지는 상기 신경망을 사용하여 업샘플링된, 방법.
KR1020247013804A 2019-09-09 2020-08-26 하나 이상의 신경망을 이용한 비디오 업샘플링 KR20240060719A (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US16/565,088 US20210073944A1 (en) 2019-09-09 2019-09-09 Video upsampling using one or more neural networks
US16/565,088 2019-09-09
KR1020227011734A KR102661953B1 (ko) 2019-09-09 2020-08-26 하나 이상의 신경망을 이용한 비디오 업샘플링
PCT/US2020/047898 WO2021050268A1 (en) 2019-09-09 2020-08-26 Video upsampling using one or more neural networks

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020227011734A Division KR102661953B1 (ko) 2019-09-09 2020-08-26 하나 이상의 신경망을 이용한 비디오 업샘플링

Publications (1)

Publication Number Publication Date
KR20240060719A true KR20240060719A (ko) 2024-05-08

Family

ID=72422291

Family Applications (4)

Application Number Title Priority Date Filing Date
KR1020247013803A KR20240060718A (ko) 2019-09-09 2020-08-26 하나 이상의 신경망을 이용한 비디오 업샘플링
KR1020247013805A KR20240063176A (ko) 2019-09-09 2020-08-26 하나 이상의 신경망을 이용한 비디오 업샘플링
KR1020227011734A KR102661953B1 (ko) 2019-09-09 2020-08-26 하나 이상의 신경망을 이용한 비디오 업샘플링
KR1020247013804A KR20240060719A (ko) 2019-09-09 2020-08-26 하나 이상의 신경망을 이용한 비디오 업샘플링

Family Applications Before (3)

Application Number Title Priority Date Filing Date
KR1020247013803A KR20240060718A (ko) 2019-09-09 2020-08-26 하나 이상의 신경망을 이용한 비디오 업샘플링
KR1020247013805A KR20240063176A (ko) 2019-09-09 2020-08-26 하나 이상의 신경망을 이용한 비디오 업샘플링
KR1020227011734A KR102661953B1 (ko) 2019-09-09 2020-08-26 하나 이상의 신경망을 이용한 비디오 업샘플링

Country Status (8)

Country Link
US (3) US20210073944A1 (ko)
JP (4) JP2022547517A (ko)
KR (4) KR20240060718A (ko)
CN (4) CN115495614A (ko)
AU (4) AU2020346707B2 (ko)
DE (1) DE112020004237T5 (ko)
GB (4) GB2623893A (ko)
WO (1) WO2021050268A1 (ko)

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10970621B1 (en) * 2019-10-08 2021-04-06 Notco Deleware, Llc Methods to predict food color and recommend changes to achieve a target food color
KR20210067783A (ko) 2019-11-29 2021-06-08 삼성전자주식회사 전자 장치, 그 제어 방법 및 시스템
US11580621B2 (en) * 2019-12-06 2023-02-14 Mediatek Inc. AI frame engine for mobile edge
US11200722B2 (en) * 2019-12-20 2021-12-14 Intel Corporation Method and apparatus for viewport shifting of non-real time 3D applications
US11526964B2 (en) * 2020-06-10 2022-12-13 Intel Corporation Deep learning based selection of samples for adaptive supersampling
US11436703B2 (en) * 2020-06-12 2022-09-06 Samsung Electronics Co., Ltd. Method and apparatus for adaptive artificial intelligence downscaling for upscaling during video telephone call
US11367167B2 (en) * 2020-08-21 2022-06-21 Apple Inc. Neural network-based image processing with artifact compensation
US11683358B2 (en) * 2020-11-04 2023-06-20 Microsoft Technology Licensing, Llc Dynamic user-device upscaling of media streams
US11776273B1 (en) * 2020-11-30 2023-10-03 Amazon Technologies, Inc. Ensemble of machine learning models for automatic scene change detection
CN114913063A (zh) * 2021-02-10 2022-08-16 京东方科技集团股份有限公司 一种图像处理方法和装置
US11748988B1 (en) 2021-04-21 2023-09-05 Amazon Technologies, Inc. Shot contras five self-supervised learning of a plurality of machine learning models for video analysis applications
US20230074420A1 (en) * 2021-09-07 2023-03-09 Nvidia Corporation Transferring geometric and texture styles in 3d asset rendering using neural networks
US20230095237A1 (en) * 2021-09-23 2023-03-30 Samsung Electronics Co., Ltd. Efficient flicker suppression for single image super-resolution
CN117529751A (zh) * 2021-11-03 2024-02-06 英特尔公司 使用内核飞溅网络的时域摊销的超采样
US20230146073A1 (en) * 2021-11-05 2023-05-11 Intel Corporation Combined denoising and upscaling network with importance sampling in a graphics environment
TWI825838B (zh) * 2022-07-11 2023-12-11 宏碁股份有限公司 決定遠端遊玩的分享畫面之畫質的方法及電腦系統
US20240028556A1 (en) * 2022-07-25 2024-01-25 Xilinx, Inc. Reconfigurable neural engine with extensible instruction set architecture
US11982661B1 (en) 2023-05-30 2024-05-14 NotCo Delaware, LLC Sensory transformer method of generating ingredients and formulas
CN117555824A (zh) * 2024-01-12 2024-02-13 深圳中微电科技有限公司 基于mvp架构的gpu模拟器中高速缓存器存储架构

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10860919B2 (en) * 2017-09-27 2020-12-08 Google Llc End to end network model for high resolution image segmentation
US10783611B2 (en) * 2018-01-02 2020-09-22 Google Llc Frame-recurrent video super-resolution
US10911799B2 (en) * 2018-07-31 2021-02-02 Intel Corporation Video refinement mechanism
CN109785235A (zh) * 2018-12-29 2019-05-21 华中光电技术研究所(中国船舶重工集团有限公司第七一七研究所) 基于压缩感知的红外行人图像超分辨率重建方法及系统

Also Published As

Publication number Publication date
GB2623615A (en) 2024-04-24
US20220092737A1 (en) 2022-03-24
WO2021050268A1 (en) 2021-03-18
CN117033702A (zh) 2023-11-10
CN114365123A (zh) 2022-04-15
GB2623893A (en) 2024-05-01
JP2024001330A (ja) 2024-01-09
GB202316422D0 (en) 2023-12-13
KR20240060718A (ko) 2024-05-08
JP2024010158A (ja) 2024-01-23
JP2024001329A (ja) 2024-01-09
GB202201094D0 (en) 2022-03-16
US20210073944A1 (en) 2021-03-11
AU2023251547A1 (en) 2023-11-16
KR102661953B1 (ko) 2024-05-08
AU2023251540A1 (en) 2023-11-16
GB202311266D0 (en) 2023-09-06
US20220092736A1 (en) 2022-03-24
GB2600346B (en) 2023-12-13
GB2621492A (en) 2024-02-14
AU2023251542A1 (en) 2023-11-16
AU2020346707B2 (en) 2023-07-20
JP2022547517A (ja) 2022-11-14
CN115495614A (zh) 2022-12-20
GB202316421D0 (en) 2023-12-13
CN115481286A (zh) 2022-12-16
GB2600346A (en) 2022-04-27
KR20240063176A (ko) 2024-05-10
DE112020004237T5 (de) 2022-06-15
AU2020346707A1 (en) 2022-04-28
KR20220062575A (ko) 2022-05-17

Similar Documents

Publication Publication Date Title
KR102661953B1 (ko) 하나 이상의 신경망을 이용한 비디오 업샘플링
EP3754611A1 (en) Cell image synthesis using one or more neural networks
EP3754560A1 (en) Weakly-supervised object detection using one or more neural networks
US20210097691A1 (en) Image generation using one or more neural networks
US11902705B2 (en) Video prediction using one or more neural networks
US20210132688A1 (en) Gaze determination using one or more neural networks
US20210064965A1 (en) Content recommendations using one or more neural networks
US20210067735A1 (en) Video interpolation using one or more neural networks
US20210118166A1 (en) Pose determination using one or more neural networks
JP2023544231A (ja) 1つ又は複数のニューラル・ネットワークを使用した画像アップサンプリング
KR20220083755A (ko) 하나 이상의 신경망을 사용하는 이미지 생성
KR20230042617A (ko) 하나 이상의 신경망을 사용하는 시간적 이미지 혼합

Legal Events

Date Code Title Description
A107 Divisional application of patent
E902 Notification of reason for refusal