KR20170005032A - 확장 가능한 gpu에서 데이터 분배 패브릭 - Google Patents

확장 가능한 gpu에서 데이터 분배 패브릭 Download PDF

Info

Publication number
KR20170005032A
KR20170005032A KR1020167033417A KR20167033417A KR20170005032A KR 20170005032 A KR20170005032 A KR 20170005032A KR 1020167033417 A KR1020167033417 A KR 1020167033417A KR 20167033417 A KR20167033417 A KR 20167033417A KR 20170005032 A KR20170005032 A KR 20170005032A
Authority
KR
South Korea
Prior art keywords
data
graphics
processor
channel
graphics processor
Prior art date
Application number
KR1020167033417A
Other languages
English (en)
Other versions
KR101913357B1 (ko
Inventor
알투그 코커
라크쉬미나라야난 스트리라마사르마
아키프 알리
Original Assignee
인텔 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 인텔 코포레이션 filed Critical 인텔 코포레이션
Publication of KR20170005032A publication Critical patent/KR20170005032A/ko
Application granted granted Critical
Publication of KR101913357B1 publication Critical patent/KR101913357B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/08Digital computers in general; Data processing equipment in general using a plugboard for programming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/001Texturing; Colouring; Generation of texture or colour
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/08Volume rendering
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/80Shading
    • 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
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/10Packet switching elements characterised by the switching fabric construction
    • H04L49/109Integrated on microchip, e.g. switch-on-chip

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Graphics (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Image Generation (AREA)
  • Image Processing (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Multi Processors (AREA)
  • Advance Control (AREA)
  • Bus Control (AREA)
  • Memory System (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Design And Manufacture Of Integrated Circuits (AREA)

Abstract

일 실시예에서, 하이브리드 패브릭은 프로세서 내의 복수의 그래픽 프로세서 코어를 상호 연결한다. 하이브리드 패브릭 인터커넥트는 프로그램 가능한 가상 데이터 채널을 포함하는 복수의 데이터 채널을 포함한다. 가상 데이터 채널은 패킷 기반 메시지의 복수의 트래픽 클래스를 반송한다. 가상 데이터 채널 및 복수의 트래픽 클래스는 복수의 우선권 중 하나를 할당받을 수 있다. 가상 데이터 채널은 독립적으로 중재될 수 있다. 하이브리드 패브릭은 확장 가능하며 복수의 적층형 집적 회로 토폴로지를 비롯한 여러 토폴로지를 지원할 수 있다.

Description

확장 가능한 GPU에서 데이터 분배 패브릭{DATA DISTRIBUTION FABRIC IN SCALABLE GPUS}
실시예는 일반적으로 정보 처리에 관한 것으로, 보다 상세하게는 확장 가능한(scalable) 그래픽 프로세서에서 사용하기 위한 데이터 분배 패브릭(data distribution fabric)에 관한 것이다.
멀티코어 그래픽 프로세싱 유닛은 시스템 온 칩(system on a chip, SOC) 집적 회로부터 고급의 독립형 그래픽 프로세서에 이르기까지를 범위로 하는 컴퓨팅 시스템 사이에서 표준화되었다. 실상의 고급 그래픽에서, 멀티코어 해법은 늘어나는 그래픽 프로세싱 성능의 기본적인 방법이다. SOC 해법에 대해 설명하자면, 멀티코어 그래픽 프로세서의 사용으로 말미암아 그래픽 프로세서의 큰 작업부하의 기간 동안 고성능이 가능하면서 시스템 전력의 감소가 가능해진다.
그러나 컴포넌트 내부에서 그래픽 코어의 수가 증가하면 많은 전력과 성능 부분을 이어주는 그래픽 프로세싱 해법을 개발할 때 확장성 문제를 불러일으킨다. 고급 그래픽 제품에서 사용되는 멀티코어 통신 해법은 비용과 전력 소비라는 문제로 인해 저전력 제품에는 적합하지 않다. 일반적으로 저전력 그래픽에서 사용되는 통신 해법은 고급 그래픽 해법에 충분한 성능을 제공하지 않는다. 예를 들어, 하나의 그래픽 코어 통신 해법은 고유의 데이터 분배 채널을 통해 각종 그래픽 프로세서를 연결하는 것이다. 그러나 고유의 통신 채널을 이용하는 것은 다중 전력과 성능 부분을 이어주리라 의도된 그래픽 프로세서를 설계하는데 어려움을 겪는다.
아래의 설명은 다양한 실시예의 구현예의 형태로 제시된 예시를 갖는 도면에 관해 논의한다. 도면은 제한하는 형태가 아닌 예시의 형태로 이해하여야 한다.
도 1은 하나 이상의 프로세서 코어 및 그래픽 프로세서를 갖는 프로세서를 갖춘 컴퓨터 시스템의 실시예의 블록도이다.
도 2는 하나 이상의 프로세서 코어, 통합된 메모리 컨트롤러, 및 통합된 그래픽 프로세서를 갖는 프로세서의 일 실시예의 블록도이다.
도 3은 별개의 그래픽 프로세싱 유닛일 수 있는, 아니면 복수의 프로세싱 코어와 함께 통합된 그래픽 프로세서일 수 있는 그래픽 프로세서의 일 실시예의 블록도이다.
도 4는 그래픽 프로세서용 그래픽 프로세싱 엔진의 실시예의 블록도이다.
도 5는 그래픽 프로세서의 다른 실시예의 블록도이다.
도 6은 프로세싱 요소의 어레이를 포함하는 스레드 실행 로직의 블록도이다.
도 7은 실시예에 따른 그래픽 프로세서 실행 유닛 명령어 포맷을 예시한다.
도 8은 그래픽 파이프라인, 미디어 파이프라인, 디스플레이 엔진, 스레드 실행 로직, 및 렌더러 출력 파이프라인을 포함하는 그래픽 프로세서의 다른 실시예의 블록도이다.
도 9a는 실시예에 따른 그래픽 프로세서 커맨드 포맷을 예시하는 블록도이다.
도 9b는 실시예에 따른 그래픽 프로세서 커맨드 시퀀스를 예시하는 블록도이다.
도 10은 실시예에 따른 데이터 프로세싱 시스템의 예시적인 그래픽 소프트웨어 아키텍처를 예시한다.
도 11은 그래픽 코어 패브릭 어셈블리의 실시예의 블록도이다.
도 12a 및 도 12b는 여러 예시적인 그래픽 코어 토폴로지를 예시한다.
도 13은 데이터 분배 패브릭을 포함하는 적층형 집적 회로의 실시예의 블록도이다.
도 14는 실시예에 따른 가상 채널을 통해 반송된 복수의 트래픽 클래스의 예시이다.
도 15는 실시예에 따른 데이터 전송 시퀀스의 흐름도이다.
다음의 설명은 프로세서, 컴퓨터 시스템, 또는 다른 프로세싱 장치 내 또는 이와 연계하여 포함된 확장 가능한 그래픽 프로세싱 유닛에서 사용하기 위한 데이터 분배 패브릭의 프로세싱 로직을 기술한다. 설명 목적을 위해, 아래에서 기술되는 다양한 실시예의 완전한 이해를 제공하기 위해 많은 세부사항이 언급된다. 그러나 통상의 지식을 가진 자에게는 본 개시의 실시예가 이러한 특정 세부사항 없이 실시될 수 있다는 것이 자명할 것이다. 다른 사례에서, 공지의 구조체 및 디바이스는 기본 원리를 모호하지 않도록 하고, 실시예의 더욱 완전한 이해를 제공하기 위해 블록도의 형태로 도시된다.
다음의 실시예 중 일부의 실시예는 프로세서와 관련하여 설명되지만, 유사한 기술과 가르침은 그 가르침이 데이터 조작을 수행하는 임의의 프로세서 또는 머신에 적용 가능하므로, 다른 종류의 회로 또는 반도체 디바이스에도 적용될 수 있다.
개요 - 도 1 내지 도 3
도 1은 실시예에 따른 데이터 프로세싱 시스템(100)의 블록도이다. 데이터 프로세싱 시스템(100)은 하나 이상의 프로세서(102) 및 하나 이상의 그래픽 프로세서(108)를 포함하며, 데이터 프로세싱 시스템은 단일 프로세서 데스크톱 시스템, 다중 프로세서 워크스테이션 시스템, 또는 복수의 프로세서(102) 또는 프로세서 코어(107)를 갖는 서버 시스템일 수 있다. 일 실시예에서, 데이터 프로세싱 시스템(100)은 이동 디바이스, 휴대용 디바이스 및 임베디드 디바이스에서 사용하기 위한 시스템 온 칩 집적 회로(system on a chip integrated circuit, SOC)이다.
데이터 프로세싱 시스템(100)의 실시예는 게임 및 미디어 콘솔을 포함하는 서버 기반의 게임 플랫폼 또는 게임 콘솔, 이동 게임 콘솔, 휴대용 게임 콘솔, 또는 온라인 게임 콘솔을 포함할 수 있거나, 이들 내에 포함될 수 있다. 일 실시예에서, 데이터 프로세싱 시스템(100)은 이동 전화, 스마트 폰, 태블릿 컴퓨팅 디바이스, 또는 이동 인터넷 디바이스이다. 데이터 프로세싱 시스템(100)은 또한 스마트 시계 착용가능 디바이스, 스마트 안경 디바이스, 증강 현실 디바이스, 또는 가상현실 디바이스와 같은 착용 가능한 디바이스를 포함하거나, 이들과 연결되거나, 또는 이들 내에 통합될 수 있다. 일 실시예에서, 데이터 프로세싱 시스템(100)은 하나 이상의 프로세서(102) 및 하나 이상의 그래픽 프로세서(108)에 의해 생성된 그래픽 인터페이스를 갖는 텔레비전 또는 셋톱 박스 디바이스이다.
하나 이상의 프로세서(102)는 각기, 실행될 때 시스템 및 사용자 소프트웨어에 필요한 동작을 수행하는 명령어를 처리하는 하나 이상의 프로세서 코어(107)를 포함한다. 일 실시예에서, 하나 이상의 프로세서 코어(107)는 각기 특정 명령어 집합(109)를 처리하도록 구성된다. 명령어 집합(109)은 복잡 명령어 집합 컴퓨팅(complex instruction set computing, CISC), 축소 명령어 집합 컴퓨팅(reduced instruction set computing, RISC), 또는 VLIW(very long instruction word, VLIW)를 통한 컴퓨팅을 가능하게 할 수 있다. 다중 프로세서 코어(107)는 다른 명령어 집합의 에뮬레이션을 가능하게 하는 명령어를 포함할 수 있는 상이한 명령어 집합(109)을 각기 처리할 수 있다. 프로세서 코어(107)는 또한 디지털 신호 프로세서(digital signal processor, DSP)와 같은 다른 프로세싱 디바이스를 포함할 수 있다.
일 실시예에서, 하나 이상의 프로세서(102)는 각기 캐시 메모리(104)를 포함한다. 아키텍처에 따라, 프로세서(102)는 단일의 내부 캐시 또는 다중 레벨의 내부 캐시를 가질 수 있다. 일 실시예에서, 캐시 메모리는 프로세서(102)의 다양한 컴포넌트 사이에서 공유된다. 일 실시예에서, 프로세서(102)는 또한 공지된 캐시 일관성 기술을 이용하여 프로세서 코어(107) 사이에서 공유될 수 있는 외부 캐시(예를 들면, 레벨 3(L3) 캐시 또는 최종 레벨 캐시(last level cache, LLC))(도시되지 않음)를 사용한다. 레지스터 파일(106)은 상이한 종류의 데이터를 저장하는 상이한 종류의 레지스터(예를 들면, 정수 레지스터, 부동소수점 레지스터, 상태 레지스터, 및 명령어 포인터 레지스터)를 포함할 수 있는 프로세서(102) 내에 부수적으로 포함된다. 일부 레지스터는 범용 레지스터일 수 있지만, 다른 레지스터는 프로세서(102)의 설계에 특정할 수 있다.
프로세서(102)는 프로세서(102)와 시스템(10) 내 다른 컴포넌트 사이에서 데이터 신호를 전송하기 위해 프로세서 버스(110)에 연결된다. 시스템(100)은 메모리 컨트롤러 허브(116) 및 입력 출력(I/O) 컨트롤러 허브(130)를 포함하는 예시적인 '허브' 시스템 아키텍처를 이용한다. 메모리 컨트롤러 허브(116)는 메모리 디바이스와 시스템(100)의 다른 컴포넌트 사이의 통신을 가능하게 하는데 반해, I/O 컨트롤러 허브(I/O controller hub, ICH)(130)는 로컬 I/O 버스를 통해 I/O 디바이스와의 연결을 제공한다.
메모리 디바이스(120)는 다이나믹 랜덤 액세스 메모리(dynamic random access memory, DRAM) 디바이스, 스태틱 랜덤 액세스 메모리(static random access memory, SRAM) 디바이스, 플래시 메모리 디바이스, 또는 프로세스 메모리로서 기능하기에 적합한 성능을 갖는 일부 다른 메모리 디바이스일 수 있다. 메모리(120)는 프로세서(102)가 프로세스를 실행할 때 사용하기 위한 데이터(122) 및 명령어(121)를 저장할 수 있다. 메모리 컨트롤러 허브(116)는 또한 옵션의 외부 그래픽 프로세서(112)와 연결될 수 있으며, 외부 그래픽 프로세서는 그래픽 및 미디어 동작을 수행하기 위해 프로세서(102) 내 하나 이상의 그래픽 프로세서(108)와 통신할 수 있다.
ICH(130)는 주변기기가 고속 I/O 버스를 통해 메모리(120) 및 프로세서(102)에 연결할 수 있게 한다. I/O 주변기기는 오디오 컨트롤러(146), 펌웨어 인터페이스(128), 무선 송수신기(126)(예를 들면, Wi-Fi, 블루투스), 데이터 저장 디바이스(124)(예를 들면, 하드 디스크 드라이브, 플래시 메모리 등), 및 레거시(예를 들면, 퍼스널 시스템 2(Personal System 2, PS/2) 디바이스를 시스템에 연결하는 레거시 I/O 컨트롤러를 포함한다. 하나 이상의 범용 직렬 버스(Universal Serial Bus, USB) 컨트롤러(142)는 키보드 및 마우스(144) 조합과 같은 입력 디바이스를 연결한다. 네트워크 컨트롤러(134)는 또한 ICH(130)에도 연결될 수 있다. 일 실시예에서, 고성능 네트워크 컨트롤러(도시되지 않음)는 프로세서 버스(110)에 연결된다.
도 2는 하나 이상의 프로세서 코어(202A-N), 통합된 메모리 컨트롤러(214), 및 통합된 그래픽 프로세서(208)를 갖는 프로세서(200)의 실시예의 블록도이다. 프로세서(200)는 점선 박스로 표시된 부가적인 코어(202N)까지를 비롯한 부가적인 코어를 포함할 수 있다. 각 코어(202A-N)는 하나 이상의 내부 캐시 유닛(204A-N)을 포함한다. 일 실시예에서, 각 코어는 또한 하나 이상의 공유 캐시 유닛(206)에 액세스한다.
내부 캐시 유닛(204A-N) 및 공유 캐시 유닛(206)은 프로세서(200) 내의 캐시 메모리 계층을 나타낸다. 캐시 메모리 계층은 각 코어 내에서 적어도 한 레벨의 명령어 및 데이터 캐시, 및 레벨 2(L2), 레벨 3(L3), 레벨 4(L4)와 같이 하나 이상 레벨의 공유된 중간 레벨 캐시, 또는 다른 레벨의 캐시를 포함할 수 있는데, 여기서 외부 메모리에 앞선 캐시의 최고 레벨은 최종 레벨 캐시(last level cache, LLC)로 분류된다. 일 실시예에서, 캐시 일관성 로직은 여러 캐시 유닛(206)과 캐시 유닛(204A-N) 사이에서 일관성을 유지한다.
프로세서(200)는 또한 한 세트의 하나 이상의 버스 컨트롤러 유닛(216) 및 시스템 에이전트(210)를 포함할 수 있다. 하나 이상의 버스 컨트롤러는 하나 이상의 주변 소자 상호연결(Peripheral Component Interconnect) 버스(예를 들면, PCI, PCI Express)와 같은 한 세트의 주변기기 버스를 관리한다. 시스템 에이전트(210)는 관리 기능성을 각종 프로세서 컴포넌트에 제공한다. 일 실시예에서, 시스템 에이전트(210)는 각종 외부 메모리 디바이스(도시되지 않음)로의 액세스를 관리하는 하나 이상의 통합된 메모리 컨트롤러(214)를 포함한다.
일 실시예에서, 코어(202A-N) 중 하나 이상의 코어는 동시적인 다중 스레드 처리를 위한 지원을 포함한다. 그러한 실시예에서, 시스템 에이전트(210)는 다중 스레드 처리 동안 코어(202A-N)를 조정하고 동작하기 위한 컴포넌트를 포함한다. 시스템 에이전트(210)는 또한 코어(202A-N) 및 그래픽 프로세서(208)의 전력 상태를 조절하는 로직 및 컴포넌트를 포함하는 전력 제어 유닛(power control unit, PCU)을 포함할 수 있다.
프로세서(200)는 또한 그래픽 프로세싱 동작을 실행하는 그래픽 프로세서(208)를 포함한다. 일 실시예에서, 그래픽 프로세서(208)는 공유 캐시 유닛(206)의 세트, 및 하나 이상의 통합된 메모리 컨트롤러(214)를 포함하는 시스템 에이전트(210)와 연결된다. 일 실시예에서, 디스플레이 컨트롤러(211)는 그래픽 프로세서(208)에 연결되어 그래픽 프로세서 출력을 하나 이상의 연결된 디스플레이로 전달한다. 디스플레이 컨트롤러(211)는 적어도 하나의 인터커넥트를 통해 그래픽 프로세서와 연결된 별개의 모듈일 수 있거나, 그래픽 프로세서(208) 또는 시스템 에이전트(210) 내에 통합될 수 있다.
일 실시예에서, 링 기반의 인터커넥트 유닛(212)은 프로세서(200)의 내부 컴포넌트를 연결하는데 사용되지만, 포인트 투 포인트 인터커넥트, 스위치드 인터커넥트, 또는 본 기술에서 공지된 기술을 비롯한 다른 기술과 같은 대안의 인터커넥트 유닛이 사용될 수 있다. 일 실시예에서, 그래픽 프로세서(208)는 I/O 링크(213)를 통해 링 인터커넥트(212)와 연결된다.
예시적인 I/O 링크(213)는 각종 프로세서 컴포넌트와 eDRAM 모듈과 같은 고성능의 내장형 메모리 모듈(218) 사이의 통신을 가능하게 하는 온 패키지 I/O 인터커넥트를 비롯한 각종의 여러 I/O 인터커넥트 중 적어도 하나를 나타낸다. 일 실시예에서, 코어(202-N) 및 그래픽 프로세서(208)는 각기 내장형 메모리 모듈(218)을 최종 레벨의 공유 캐시로서 사용한다.
일 실시예에서, 코어(202A-N)는 동일한 명령어 집합 아키텍처를 실행하는 동종의 코어이다. 다른 실시예에서, 코어(202A-N)는 명령어 집합 아키텍처(instruction set architecture, ISA)의 관점에서 이종 코어이며, 이 경우 코어(202A-N) 중 하나 이상의 코어는 제 1 명령어 집합을 실행하는데 반해, 다른 코어 중 적어도 하나는 제 1 명령어 집합의 서브집합 또는 다른 명령어 집합을 실행한다.
프로세서(200)는 다수의 프로세스 기술, 예를 들면, 상보형 금속-산화물-반도체(Complementary metal-oxide-semiconductor, CMOS), 바이폴라 접합(Bipolar Junction)/상보형 금속-산화물-반도체(BiCMOS) 또는 N형 금속-산화물-반도체 로직(NMOS) 중 임의의 기술의 일부일 수 있거나 임의의 기술을 이용하여 하나 이상의 기판상에서 구현될 수 있다. 또한, 프로세서(200)는 하나 이상의 칩상에서 구현될 수 있거나, 다른 컴포넌트 이외에, 예시된 컴포넌트를 갖는 시스템 온 칩(system on a chip, SOC) 집적 회로로서 구현될 수 있다.
도 3은 독립적인 그래픽 프로세싱 유닛일 수 있거나, 복수의 프로세싱 코어와 통합된 그래픽 프로세서일 수 있는 그래픽 프로세서(300)의 일 실시예의 블록도이다. 일 실시예에서, 그래픽 프로세서는 그래픽 프로세서상의 레지스터와의 메모리 맵 I/O 인터페이스를 통해 프로세서 메모리에 놓인 커맨드를 매개로 하여 통신된다. 그래픽 프로세서(300)는 메모리에 액세스하는 메모리 인터페이스(314)를 포함한다. 메모리 인터페이스(314)는 로컬 메모리, 하나 이상의 내부 캐시, 하나 이상의 공유된 외부 캐시, 및/또는 시스템 메모리와의 인터페이스일 수 있다.
그래픽 프로세서(300)는 또한 디스플레이 출력 데이터를 디스플레이 디바이스(320)로 전달하는 디스플레이 컨트롤러(302)를 포함한다. 디스플레이 컨트롤러(302)는 비디오 또는 사용자 인터페이스 요소의 여러 계층의 디스플레이 및 구성의 하나 이상의 오버레이 플레인(overlay plain)을 위한 하드웨어를 포함한다. 일 실시예에서, 그래픽 프로세서(300)는 이것으로 제한되는 것은 아니지만, MPEG-2와 같은 동화상 전문가 그룹(Moving Picture Experts Group, MPEG) 포맷, H. 264/MPEG-4 AVC와 같은 최신 비디오 코딩(Advanced Video Coding, AVC) 포맷뿐만 아니라, 영화&텔레비전 기술자 협회(Society of Motion Picture & Television Engineers, SMPTE) 421M/VC-1, 및 JPEG 및 모션 JPEG(Motion JPEG, MJPEG) 포맷과 같은 공동 영상 전문가 그룹(Joint Photographic Experts Group, JPEG) 포맷을 비롯한 하나 이상의 미디어 인코딩 포맷으로, 그 포맷으로부터, 또는 그 포맷 사이에서, 미디어를 인코딩하거나, 디코딩하거나, 또는 변환코딩하는 비디오 코덱 엔진(306)을 포함한다.
일 실시예에서, 그래픽 프로세서(300)는 예를 들면, 비트-경계 블록 전송(bit-boundary block transfer)을 포함하는 2차원(2D) 래스터라이저 동작을 수행하는 블록 이미지 전송(block image transfer, BLIT) 엔진(304)을 포함한다. 그러나 일 실시예에서, 2D 그래픽 동작은 그래픽 프로세싱 엔진(graphics-processing engine, GPE)(310)의 하나 이상의 컴포넌트를 이용하여 수행된다. 그래픽 프로세싱 엔진(310)은 3차원(3D) 그래픽 동작 및 미디어 동작을 비롯한 그래픽 동작을 수행하기 위한 컴퓨트 엔진(compute engine)이다.
GPE(310)는 3D 프리미티브 형상(예를 들면, 사각형, 삼각형 등)에 의거하여 작업하는 프로세싱 기능을 이용하여 3차원 이미지 및 장면을 렌더링하는 것과 같은 3D 연산을 수행하는 3D 파이프라인(312)을 포함한다. 3D 파이프라인(312)은 요소 내부에서 다양한 작업을 수행하고 그리고/또는 3D/미디어 서브시스템(315)에 대한 실행 스레드를 생성하는 프로그램 가능하고 고정적인 기능 요소를 포함한다. 3D 파이프라인(312)이 미디어 동작을 수행하는데 사용될 수 있지만, GPE(310)의 실시예는 비디오 후처리 및 이미지 강화와 같은 미디어 동작을 수행하도록 특별히 사용되는 미디어 파이프라인(316)을 또한 포함한다.
일 실시예에서, 미디어 파이프라인(316)은 비디오 코덱 엔진(306) 대신에 또는 그를 대신하여 비디오 디코드 가속, 비디오 디인터레이싱, 및 비디오 인코드 가속과 같은 하나 이상의 특화된 미디어 동작을 수행하는 고정 기능의 또는 프로그램 가능한 로직 유닛을 포함한다. 일 실시예에서, 미디어 파이프라인(316)은 또한 3D/미디어 서브시스템(315)에서 실행을 위한 스레드를 생성하는 스레드 생성 유닛을 포함한다. 생성된 스레드는 3D/미디어 서브시스템에 포함된 하나 이상의 그래픽 실행 유닛에 대해 미디어 동작을 위한 연산을 수행한다.
3D/미디어 서브시스템(315)은 3D 파이프라인(312) 및 미디어 파이프라인(316)에 의해 생성된 스레드를 실행하기 위한 로직을 포함한다. 일 실시예에서, 파이프라인은 스레드 실행 요청을 3D/미디어 서브시스템(315)으로 전달하며, 3D/미디어 서브시스템은 각종 요청을 중재하여 가용의 스레드 실행 자원으로 디스패치하는 스레드 디스패치 로직(thread dispatch logic)을 포함한다. 실행 자원은 3D 및 미디어 스레드를 처리하는 그래픽 실행 유닛의 어레이를 포함한다. 일 실시예에서, 3D/미디어 서브시스템(315)은 스레드 명령어 및 데이터 용도의 하나 이상의 내부 캐시를 포함한다. 일 실시예에서, 서브시스템은 또한 스레드 사이의 데이터를 공유하고 출력 데이터를 저장하는, 레지스터 및 어드레스 가능한 메모리를 비롯한 공유 메모리를 포함한다.
3D/미디어 처리 - 도 4
도 4는 그래픽 프로세서의 그래픽 프로세싱 엔진(410)의 실시예의 블록도이다. 일 실시예에서, 그래픽 프로세싱 엔진(graphics processing engine, GPE) 410)은 도 도 3에 도시된 GPE(310)의 한 버전이다. GPE(410)는 3D 파이프라인(412) 및 미디어 파이프라인(416)을 포함하며, 각 파이프라인은 도 3의 3D 파이프라인(312) 및 미디어 파이프라인(316)의 구현예와 상이하거나 유사할 수 있다.
일 실시예에서, GPE(410)은 커맨드 스트림을 GPE 3D(412) 및 미디어 파이프라인(416)에 제공하는 커맨드 스트리머(command streamer)(403)와 연결된다. 커맨드 스트리머(403)는 시스템 메모리, 또는 내부 캐시 메모리와 공유 캐시 메모리 중 하나 이상의 메모리일 수 있는 메모리에 연결된다. 커맨드 스트리머(403)는 메모리로부터 커맨드를 수신하고 커맨드를 3D 파이프라인(412) 및/또는 미디어 파이프라인(416)으로 전송한다. 3D 및 미디어 파이프라인은 각 파이프라인 내부의 로직을 통해 동작을 수행함으로써 또는 하나 이상의 실행 스레드를 실행 유닛 어레이(414)로 디스패치함으로써 커맨드를 처리한다. 일 실시예에서, 실행 유닛 어레이(414)는 확장 가능하여, 이 어레이는 GPE(410)의 타겟 전력 및 성능 수준에 따라서 가변 개수의 실행 유닛을 포함한다.
샘플링 엔진(430)은 메모리(예를 들면, 캐시 메모리 또는 시스템 메모리) 및 실행 유닛 어레이(414)와 연결된다. 일 실시예에서, 샘플링 엔진(430)은 실행 유닛 어레이(414)가 메모리로부터 그래픽 및 미디어 데이터를 판독하게 하는 메모리 액세스 메커니즘을 확장 가능한 실행 유닛 어레이(414)에 제공한다. 일 실시예에서, 샘플링 엔진(430)은 미디어의 특화된 이미지 샘플링 동작을 수행하는 로직을 포함한다.
샘플링 엔진(430)에서 특화된 미디어 샘플링 로직은 잡음제거/디인터레이스 모듈(432), 움직임 추정 모듈(434), 및 이미지 스케일링 및 필터링 모듈(436)을 포함한다. 잡음제거/디인터레이스 모듈(432)은 디코딩된 비디오 데이터에 대해 잡음제거 알고리즘 또는 디인터레이스 알고리즘 중 하나 이상을 수행하는 로직을 포함한다. 디인터레이스 로직은 인터레이스된 비디오 콘텐츠의 교번 필드를 단일의 비디오 프레임으로 조합한다. 잡음 제거 로직은 비디오 및 이미지 데이터로부터 데이터 잡음을 감소하거나 제거한다. 일 실시예에서, 잡음제거 로직 및 디인터레이스 로직은 움직임 적응적이며, 비디오 데이터에서 검출된 움직임 양에 기초한 공간 또는 시간 필터링을 사용한다. 일 실시예에서, 잡음제거/디인터레이스 모듈(432)은 (예를 들면, 움직임 추정 엔진(434) 내부의) 전용의 움직임 검출 로직을 포함한다.
움직임 추정 엔진(434)은 비디오 데이터에 대해 움직임 벡터 추정 및 예측과 같은 비디오 가속 기능을 수행함으로써 비디오 동작에 하드웨어 가속을 제공한다. 움직임 추정 엔진은 연이은 비디오 프레임 간의 이미지 데이터의 변환을 서술하는 움직임 벡터를 결정한다. 일 실시예에서, 그래픽 프로세서 미디어 코덱은 비디오 움직임 추정 엔진(434)을 사용하여 매크로 블록 레벨의 비디오에 대해, 그렇지 않았다면 범용 프로세서를 사용하여 수행하는데 계산 집약적이 될 수 있는, 동작을 수행한다. 일 실시예에서, 움직임 추정 엔진(434)은 일반적으로 비디오 데이터 내의 움직임의 방향 또는 크기에 민감하거나 적응적인 비디오 디코드 및 처리 기능을 지원하는 그래픽 프로세서 컴포넌트에 이용 가능하다.
이미지 스케일링 및 필터링 모듈(436)은 이미지 프로세싱 동작을 수행하여 생성된 이미지 및 비디오의 시각 품질을 강화한다. 일 실시예에서, 이미지 스케일링 및 필터링 모듈(436)은 샘플링 동작 중에 이미지 및 비디오 데이터를 처리한 다음에 데이터를 실행 유닛 어레이(414)에 제공한다.
일 실시예에서, 그래픽 프로세싱 엔진(410)은 부가적인 메커니즘을 그래픽 서브시스템에 제공하여 메모리에 액세스하는 데이터 포트(444)를 포함한다. 데이터 포트(444)는 렌더러 타겟 기록, 상수 버퍼 판독, 스크래치 메모리 공간 판독/기록, 및 매체 표면 액세스를 비롯한 동작을 위한 메모리 액세스를 가능하게 한다. 일 실시예에서, 데이터 포트(444)는 메모리에 캐시 액세스하는 캐시 메모리 공간을 포함한다. 캐시 메모리는 데이터 포트를 통해 메모리에 액세스하는 복수의 서브시스템을 위한 단일의 데이터 캐시일 수 있거나 그 서브시스템을 위해 여러 캐시(예를 들면, 렌더러 버퍼 캐시, 상수 버퍼 캐시 등)로 분리될 수 있다. 일 실시예에서, 실행 유닛 어레이(414) 내의 실행 유닛에서 실행하는 스레드는 그래픽 프로세싱 엔진(410)의 각 서브시스템을 연결하는 데이터 분배 인터커넥트를 통해 메시지를 교환함으로써 데이터 포트와 통신한다.
실행 유닛 - 도 5 내지 도 7
도 5는 확장 가능한 개수의 그래픽 코어를 갖는 그래픽 프로세서의 다른 실시예의 블록도이다. 일 실시예에서, 그래픽 프로세서는 링 인터커넥트(502), 파이프라인 프론트 엔드(504), 미디어 엔진(537), 및 그래픽 코어(580A-N)를 포함한다. 링 인터커넥트(502)는 그래픽 프로세서를 다른 그래픽 프로세서 또는 하나 이상의 범용 프로세서 코어를 비롯한 다른 프로세싱 유닛에 연결한다. 일 실시예에서, 그래픽 프로세서는 멀티코어 프로세싱 시스템 내부에 통합된 많은 프로세서 중 하나이다.
그래픽 프로세서는 링 인터커넥트(502)를 통해 커맨드의 배치(batch)를 수신한다. 들어오는 커맨드는 파이프라인 프론트 엔드(504) 내의 커맨드 스트리머(503)에 의해 인터셉트된다. 그래픽 프로세서는 그래픽 코어(들)(580A-N)를 통해 3D 지오메트리 처리(geometry processing) 및 미디어 처리를 수행하는 확장 가능한 실행 로직을 포함한다. 3D 지오메트리 처리 커맨드에 대해, 커맨드 스트리머(503)는 커맨드를 지오메트리 파이프라인(536)으로 공급한다. 적어도 일부의 미디어 프로세싱 커맨드에 대해, 커맨드 스트리머(503)는 커맨드를 미디어 엔진(537)과 연결된 비디오 프론트 엔드(534)로 공급한다. 미디어 엔진(537)은 비디오 및 이미지의 사후 처리를 위한 비디오 품질 엔진(video quality engine, VQE)(530) 및 하드웨어 가속된 미디어 데이터 인코드 및 디코드를 제공하는 다중 포맷 인코드/디코드(multi-format encode/decode, MFX)(533) 엔진을 포함한다. 지오메트리 파이프라인(536) 및 미디어 엔진(537)은 각기 적어도 하나의 그래픽 코어(580A)에 의해 제공된 스레드 실행 자원을 위한 실행 스레드를 발생한다.
그래픽 프로세서는 모듈러 코어(580A-N)를 특징으로 하는 확장 가능한 스레드 실행 자원을 포함하며, 각 코어는 복수의 서브코어(550A-N, 560A-N) (때때로 코어 서브슬라이스라고 지칭됨)를 갖는다. 그래픽 프로세서는 임의의 개수의 그래픽 코어(580A 내지 580N)를 가질 수 있다. 일 실시예에서, 그래픽 프로세서는 적어도 제 1 서브코어(550A) 및 제 2 코어 서브코어(560A)를 갖는 그래픽 코어(580A)를 포함한다. 다른 실시예에서, 그래픽 프로세서는 단일의 서브코어(예를 들면, 550A)를 갖는 저전력 프로세서이다. 일 실시예에서, 그래픽 프로세서는 복수의 그래픽 코어(580A-N)를 포함하며, 각 그래픽 코어는 한 세트의 제 1 서브코어(550A-N) 및 한 세트의 제 2 서브코어(560A-N)를 포함한다. 제 1 서브코어 세트(550A-N) 내의 각 서브코어는 적어도 제 1 세트의 실행 유닛(552A-N) 및 미디어/텍스처 샘플러(554A-N)를 포함한다. 제 2 서브코어 세트(560A-N) 내의 각 서브코어는 적어도 제 2 세트의 실행 유닛(562A-N) 및 미디어/텍스처 샘플러(564A-N)를 포함한다. 일 실시예에서, 각 서브코어(550A-N, 560A-N)는 한 세트의 공유 자원(570A-N)을 공유한다. 일 실시예에서, 공유 자원은 공유 캐시 메모리 및 픽셀 연산 로직을 포함한다. 다른 공유 자원은 그래픽 프로세서의 다양한 실시예에도 또한 포함될 수 있다.
도 6은 프로세싱 요소의 어레이를 포함하는 스레드 실행 로직(600)의 실시예를 예시한다. 일 실시예에서, 스레드 실행 로직(600)은 픽셀 셰이더(pixel shader)(602), 스레드 디스패처(thread dispatcher)(604), 명령어 캐시(606), 복수의 실행 유닛을 포함하는 확장 가능한 실행 유닛 어레이(608A-N), 샘플러(610), 데이터 캐시(612), 및 데이터 포트(614)를 포함한다. 일 실시예에서, 포함된 컴포넌트는 각 컴포넌트와 링크되는 인터커넥트 패브릭을 통해 상호 연결된다. 스레드 실행 로직(600)은 명령어 캐시(606), 데이터 포트(614), 샘플러(610), 및 실행 유닛 어레이(608A-N) 중 하나 이상을 통한, 시스템 메모리 또는 캐시 메모리와 같은 메모리와의 하나 이상의 연결(connection)을 포함한다. 일 실시예에서, 각 실행 유닛(예를 들면, 608A)은 여러 스레드를 동시적으로 실행할 수 있고 스레드마다 여러 데이터 요소를 병렬로 처리할 수 있는 개별 벡터 프로세서이다. 실행 유닛 어레이(608A-N)는 임의의 개수의 개별 실행 유닛을 포함한다.
일 실시예에서, 실행 유닛 어레이(608A-N)는 기본적으로 "셰이더(shader)" 프로그램을 실행하는데 사용된다. 일 실시예에서, 어레이(608A-N) 내의 실행 유닛은 많은 표준의 3D 그래픽 셰이더 명령어에 대한 기본적인 지원을 포함하는 명령어 집합을 실행하여, 그래픽 라이브러리로부터의 셰이더 프로그램(예를 들면, Direct 3D 및 OpenGL)은 최소한의 변환으로 실행된다. 실행 유닛은 정점 및 지오메트리 처리(예를 들면, 정점 프로그램, 지오메트리 프로그램, 정점 셰이더), 픽셀 처리 (예를 들면, 픽셀 셰이더, 프래그먼트 셰이더(fragment shader)), 및 범용 프로세싱(예를 들면, 연산 및 미디어 셰이더)를 지원한다.
실행 유닛 어레이(608A-N) 내의 각 실행 유닛은 데이터 요소의 어레이에 대해 연산한다. 데이터 요소의 개수는 "실행 크기(execution size)" 또는 명령어를 위한 채널의 개수이다. 실행 채널은 데이터 요소 액세스, 마스킹, 및 명령어 내부의 플로우 제어(flow control)를 위한 논리적 실행 유닛이다. 채널의 개수는 특정 그래픽 프로세서의 물리적 ALU 또는 FPU의 개수와 무관할 수 있다. 실행 유닛 어레이(608A-N)는 정수 및 부동 소수점 데이터 유형을 지원한다.
실행 유닛 명령어 집합은 단일 명령어 복수 데이터(single instruction multiple data, SEVID) 명령어를 포함한다. 각종 데이터 요소는 패킹된 데이터 형식으로 레지스터 내에 저장될 수 있으며, 실행 유닛은 각종 데이터 요소를 그 요소의 데이터 크기에 기초하여 처리할 것이다. 예를 들면, 256비트 폭의 벡터에 대해 연산할 때, 벡터의 256 비트는 레지스터에 저장되며, 실행 유닛은 네 개의 별개의 64비트로 꾸려진(packed) 데이터 요소(쿼드-워드(quad-word, QW) 크기 데이터 요소), 여덟 개의 별개의 32비트로 꾸려진 데이터 요소(더블 워드(double word, DW) 크기 데이터 요소, 열여섯 개의 별개의 16비트로 꾸려진 데이터 요소(워드(word, W) 크기 데이터 요소), 또는 서른두 개의 별개의 8비트 데이터 요소(바이트(byte, B) 크기 데이터 요소)로서 벡터에 대해 연산한다. 그러나 다른 벡터 폭 및 레지스터 크기가 가능하다.
하나 이상의 내부 명령어 캐시(예를 들면, 606)는 실행 유닛의 스레드 명령어를 캐시하도록 스레드 실행 로직(600)에 포함된다. 일 실시예에서, 하나 이상의 데이터 캐시(예를 들면, 612)는 스레드 실행 동안 스레드 데이터를 캐시하도록 포함된다. 샘플러(610)는 3D 연산을 위한 텍스처 샘플링 및 미디어 동작을 위한 미디어 샘플링을 제공하도록 포함된다. 일 실시예에서, 샘플러(610)는 샘플링 프로세스 동안 텍스처 또는 미디어 데이터를 처리한 다음에 샘플링된 데이터를 실행 유닛으로 제공하는 특화된 텍스처 또는 미디어 샘플링 기능성을 포함한다.
실행 중에, 그래픽 및 미디어 파이프라인은 스레드 개시 요청을 스레드 생성 및 디스패치 로직을 통해 스레드 실행 로직(600)으로 전송한다. 스레드 실행 로직(600)은 그래픽 및 미디어 파이프라인으로부터 스레드 개시 요청을 중재하고 요청된 스레드를 하나 이상의 실행 유닛(608A-N)에서 인스턴스화하는 로컬 스레드 디스패처(604)를 포함한다. 예를 들면, 지오메트리 파이프라인(예를 들면, 도 5의 (536))은 정점 처리, 테셀레이션(tessellation), 또는 지오메트리 처리 스레드를 스레드 실행 로직(600)으로 디스패치한다. 스레드 디스패처(604)는 또한 실행 셰이더 프로그램으로부터 런타임 스레드 실행 요청을 처리할 수 있다.
일단 기하 개체 그룹이 처리되어 픽셀 데이터로 래스터화되면, 픽셀 셰이더(602)가 호출되어 출력 정보를 추가 연산하여 결과가 출력 표면(예를 들면, 컬러 버퍼, 깊이 버퍼, 스텐실 버퍼 등)에 기록되게 한다. 일 실시예에서, 픽셀 셰이더(602)는 래스터화된 개체 전체에서 보간될 여러 정점 속성의 값을 계산한다. 그 다음 픽셀 셰이더(602)는 API 공급된 픽셀 셰이더 프로그램을 실행한다. 픽셀 셰이더 프로그램을 실행하기 위해, 픽셀 셰이더(602)는 스레드를 스레드 디스패처(604)를 통해 실행 유닛(608A)으로 디스패치한다. 픽셀 셰이더(602)는 샘플러(610) 내 텍스처 샘플링 로직을 사용하여 메모리에 저장된 텍스처 맵 내의 텍스처 데이터에 액세스한다. 텍스처 데이터 및 입력 지오메트리 데이터의 산술 연산은 각 기하 프래그먼트마다 픽셀 컬러 데이터를 계산하거나, 하나 이상의 픽셀을 추가 처리에서 제외한다.
일 실시예에서, 데이터 포트(614)는 메모리 액세스 메커니즘을 스레드 실행 로직(600)에 제공하여 처리된 데이터를 그래픽 프로세서 출력 파이프라인에서 처리를 위해 메모리로 출력한다. 일 실시예에서, 데이터 포트(614)는 데이터 포트를 통해 메모리 액세스를 위한 데이터를 캐시하는 하나 이상의 캐시 메모리(예를 들면, 데이터 캐시(612))를 포함하거나, 하나 이상의 캐시 메모리에 연결된다.
도 7은 실시예에 따른 그래픽 프로세서 실행 유닛 명령어 포맷을 예시하는 블록도이다. 일 실시예에서, 그래픽 프로세서 실행 유닛은 명령어가 여러 포맷으로 된 명령어 집합을 지원한다. 실선 박스는 일반적으로 실행 유닛 명령어에 포함된 컴포넌트를 예시하는 데 반해, 점선은 옵션의 컴포넌트 또는 명령어의 서브세트에 포함될 뿐인 컴포넌트를 포함한다. 명령어가 처리될 때면 명령어를 디코딩을 해야 하는 마이크로 동작과 반대로, 명령어가 실행 유닛에 공급되는 명령어라는 점에서, 설명되고 예시되는 명령어 포맷은 매크로 명령어이다.
일 실시예에서, 그래픽 프로세서 실행 유닛은 128비트 포맷(710)의 명령어를 기본적으로 지원한다. 64비트의 압축된(compacted) 명령어 포맷(730)은 선택된 명령어, 명령어 옵션, 및 오퍼랜드의 개수에 기초하여 일부 명령어에 대해 이용 가능하다. 기본 128비트 포맷(710)은 모든 명령어 옵션에 대한 액세스를 제공하는데 반해, 일부 옵션 및 연산은 64비트 포맷(730)으로 제한된다. 64비트 포맷(730)에서 이용 가능한 기본 명령어는 실시예에 따라 다르다. 일 실시예에서, 명령어는 인덱스 필드(713) 내의 한 세트의 인덱스 값을 이용하여 부분적으로 압축된다. 실행 유닛 하드웨어는 인덱스 값에 기초하여 한 세트의 압축 테이블을 참조하며, 압축 테이블 출력을 이용하여 128 비트 포맷(710)으로 된 기본 명령어를 재구성한다.
각 포맷에 대해, 명령어 오피코드(712)는 실행 유닛이 수행할 연산을 정의한다. 실행 유닛은 각 오퍼랜드의 복수의 데이터 요소 전체에서 각 명령어를 병렬로 실행한다. 예를 들어, 가산 명령어에 응답하여, 실행 유닛은 텍스처 요소 또는 픽처 요소를 나타내는 각 컬러 채널 전체에서 동시적인 가산 연산을 수행한다. 기본적으로, 실행 유닛은 각 명령어를 오퍼랜드의 모든 데이터 채널에 걸쳐 수행한다. 명령어 제어 필드(712)는 채널 선택(예를 들면, 예측) 및 데이터 채널 순서(예를 들면, 스위즐(swizzle))과 같은 특정한 실행 옵션을 통한 제어를 가능하게 한다. 128비트 명령어(710)에 대해, 실행 크기 필드(816)는 병렬로 실행될 데이터 채널의 수를 제한한다. 실행 사이즈 필드(716)는 64비트 압축 명령어 포맷(730)에서 사용할 수 없다.
일부의 실행 유닛 명령어는 두 개의 소스 오퍼랜드, src0(722), src1(722) 및, 하나의 목적지(718)를 포함하는 세 개까지의 오퍼랜드를 갖는다. 일 실시예에서, 실행 유닛은 목적지 중 하나의 목적지가 암시되는 이중 목적지 명령어(dual destination instruction)를 지원한다. 데이터 조작 명령어는 명령어 오피코드 JJ12가 소스 오퍼랜드의 개수를 결정하는 제 3 소스 오퍼랜드(예를 들면, SRC2(724))를 가질 수 있다. 명령어의 최종 소스 오퍼랜드는 명령어와 함께 전달된 즉시 (예를 들면, 하드코딩된) 값일 수 있다.
일 실시예에서, 명령어는 오피코드 비트 필드에 기초하여 그룹화되어 오피코드 디코드(740)를 간략화한다. 8비트 오피코드에 대해, 비트 4, 5 및 6은 실행 유닛이 오피코드의 종류를 결정하게 한다. 도시된 대로의 오피코드 그룹화는 예시이다. 일 실시예에서, 이동(move) 및 로직 오피코드 그룹(742)은 데이터 이동 및 로직 명령어(예를 들면, mov, cmp)를 포함한다. 이동 및 로직 그룹(742)은 다섯 개의 최상위 비트(most significant bit, MSB)를 공유하는데, 여기서 이동 명령어는 0000xxxxb(예를 들면, 0x0x)의 형태이며, 로직 명령어는 0001xxxxb(예를 들면, 0x01)의 형태이다. 플로우 제어 명령어 그룹(744)(예를 들면, call, jmp)은 0010xxxxb(예를 들면, 0x20)의 형태로 된 명령어를 포함한다. 기타 명령어 그룹(746)은 0011xxxxb(예를 들면, 0x30)의 형태로 된 동기화 명령어(예를 들면, wait, send)를 포함하는 명령어들의 혼합을 포함한다. 병렬 수학 명령어 그룹(parallel math instruction group)(748)은 0100xxxxb(예를 들면, 0x40)의 형태로 된 컴포넌트별 산술 명령어(예를 들면, add, mul)를 포함한다. 병렬 수학 그룹(748)은 산술 연산을 데이터 채널 전체에 걸쳐 병렬로 수행한다. 벡터 수학 그룹(750)은 0101xxxxb(예를 들면, 0x50)의 형태로 된 산술 명령어(예를 들면, dp4)를 포함한다. 벡터 수학 그룹은 벡터 오퍼랜드에 대해 내적 계산(dot product calculation)과 같은 산술을 수행한다.
그래픽 파이프라인 - 도 8
도 8은 그래픽 프로세서의 다른 실시예의 블록도이며, 그래픽 프로세서는 그래픽 파이프라인(820), 미디어 파이프라인(830), 디스플레이 엔진(840), 스레드 실행 로직(850), 및 렌더러 출력 파이프라인(870)을 포함한다. 일 실시예에서, 그래픽 프로세서는 하나 이상의 범용 프로세싱 코어를 포함하는 멀티코어 프로세싱 시스템 내부의 그래픽 프로세서이다. 그래픽 프로세서는 하나 이상의 제어 레지스터(도시되지 않음)로의 레지스터 기록에 의해 제어되거나, 링 인터커넥트(802)를 통해 그래픽 프로세서에 발행된 커맨드를 매개로 하여 제어된다. 링 인터커넥트(802)는 그래픽 프로세서를 다른 프로세싱 컴포넌트, 이를테면 다른 그래픽 프로세서 또는 범용 프로세서에 연결한다. 링 인터커넥트로부터의 커맨드는 명령어를 그래픽 파이프라인(820) 또는 미디어 파이프라인(830)의 개개의 컴포넌트로 공급하는 커맨드 스트리머(command streamer))(803)에 의해 인터셉트된다.
커맨드 스트리머(803)는 메모리로부터 정점 데이터를 판독하고 커맨드 스트리머(803)에 의해 제공된 정점 처리 커맨드를 실행하는 정점 페처(vertex fetcher)(805) 컴포넌트의 동작을 지시한다. 정점 페처(805)는 정점 데이터를 정점 셰이더(807)에 제공하며, 정점 셰이더는 좌표 공간 변환 및 각 정점에 대한 조명 동작을 수행한다. 정점 페처(805) 및 정점 셰이더(807)는 실행 스레드를 스레드 디스패처(831)를 통해 실행 유닛(852A, 842B)으로 디스패치함으로써 정점 처리 명령어를 실행한다.
일 실시예에서, 실행 유닛(852A, 852B)은 그래픽 및 미디어 작동을 수행하기 위한 명령어 집합을 갖는 벡터 프로세서의 어레이이다. 실행 유닛(852A, 852B)은 각 어레이에 특유한 또는 어레이 사이에서 공유되는 소속된 L1 캐시(851)를 갖는다. 캐시는 데이터 캐시, 명령어 캐시, 또는 데이터 및 명령어를 여러 파티션에 포함하도록 분할되는 단일 캐시로서 구성될 수 있다.
일 실시예에서, 그래픽 파이프라인(820)은 3D 개체의 하드웨어 가속된 테셀레이션을 수행하는 테셀레이션 컴포넌트를 포함한다. 프로그래머가능 헐 셰이더(programmable hull shader)(811)는 테셀레이션 동작을 구성한다. 프로그래머블 도메인 셰이더(programmable domain shader)(817)는 테셀레이션 출력의 백-엔드 평가를 제공한다. 테셀레이터(813)는 헐 셰이더(811)의 방향으로 작업하며 그래픽 파이프라인(820)에 입력으로 제공된 세련되지 않은 기하 모델에 기초하여 한 세트의 세세한 기하 개체를 생성하는 특수 목적 로직을 포함한다. 만일 테셀레이션이 사용되지 않으면, 테셀레이션 컴포넌트(811813817)는 바이패스될 수 있다.
완전한 기하 개체는 실행 유닛(852A, 852B)으로 디스패치된 하나 이상의 스레드를 통해 지오메트리 셰이더(geometry shader)(819)에 의해 처리될 수 있거나, 직접 클리퍼(clipper)(829)로 계속 이어질 수 있다. 지오메트리 셰이더는 그래픽 파이프라인의 이전 단에서와 같이 정점 또는 정점의 조각이라기 보다, 전체적인 기하 개체에 대해 연산한다. 만일 테셀레이션이 비활성화되면, 지오메트리 셰이더(819)는 정점 셰이더(807)로부터 입력을 수신한다. 지오메트리 셰이더(819)는 테셀레이션 유닛이 비활성화되는 경우 지오메트리 셰이더 프로그램에 의해 지오메트리 테셀레이션을 수행하도록 프로그램 가능하다.
래스터화하기에 앞서, 정점 데이터는 고정 기능 클리퍼 또는 클리핑 및 지오메트리 셰이더 기능을 갖는 프로그램 가능 클리퍼 중 어느 하나인 클리퍼(829)에 의해 처리된다. 일 실시예에서, 렌더링 출력 파이프라인(870) 내의 래스터라이저(873)는 픽셀 셰이더를 디스패치하여 기하 개체를 이들 개체마다의 픽셀 표현으로 변환한다. 일 실시예에서, 픽셀 셰이더 로직은 스레드 실행 로직(850)에 포함된다.
그래픽 엔진은 그래픽 엔진의 주요 컴포넌트 사이에서 데이터 및 메시지를 통행하게 하는 인터커넥트 버스, 인터커넥트 패브릭, 또는 일부 다른 인터커넥트 메커니즘을 갖는다. 일 실시예에서, 실행 유닛(852A, 852B) 및 연관된 캐시(들)(851), 텍스처 및 미디어 샘플러(854), 및 텍스처/샘플러 캐시(858)는 데이터 포트(856)를 통해 상호 연결되어 메모리 액세스를 수행하고 그래픽 엔진의 렌더러 출력 파이프라인 컴포넌트와 통신한다. 일 실시예에서, 샘플러(854), 캐시(851, 858) 및 실행 유닛(852A, 852B)은 각기 별도의 메모리 액세스 경로를 갖는다.
일 실시예에서, 렌더러 출력 파이프라인(870)은 정점 기반의 개체를 그 개체의 연관된 픽셀 기반의 표현으로 변환하는 래스터라이저 및 깊이 검사 컴포넌트(873)를 포함한다. 일 실시예에서, 래스터라이저 로직은 고정 기능 삼각형 및 라인의 래스터화를 수행하는 윈도우어/마스커(windower/masker) 유닛을 포함한다. 연관된 렌더러 및 깊이 버퍼 캐시(878, 879)는 일 실시예에서도 역시 이용 가능하다. 비록 일부 사례에서 2D 연산(예를 들면, 브렌딩을 이용한 비트 블록 이미지 전송)과 연관된 픽셀 연산이 2D 엔진(841)에 의해 수행되거나, 아니면 디스플레이 시간에서 오버레이 디스플레이 플레인을 이용하여 디스플레이 컨트롤러(843)로 대체되지만, 픽셀 연산 컴포넌트(877)는 데이터에 대해 픽셀 기반의 연산을 수행한다. 일 실시예에서, 공유 L3 캐시(875)는 모든 그래픽 컴포넌트에 이용 가능하며, 따라서 메인 시스템 메모리를 사용하지 않고도 데이터의 공유를 가능하게 한다.
그래픽 프로세서 미디어 파이프라인(830)은 미디어 엔진(337) 및 비디오 프론트 엔드(834)를 포함한다. 일 실시예에서, 비디오 프론트 엔드(834)는 커맨드 스트리머(803)로부터 파이프라인 커맨드를 수신한다. 그러나 일 실시예에서, 미디어 파이프라인(830)은 별도의 커맨드 스트리머를 포함한다. 비디오 프론트 엔드(834)는 미디어 커맨드를 처리한 다음 그 커맨드를 미디어 엔진(837)으로 전송한다. 일 실시예에서, 미디어 엔진은 스레드 디스패처(831)를 통해 스레드 실행 로직(850)으로 디스패치하기 위한 스레드를 생성하는 스레드 생성 기능성을 포함한다.
일 실시예에서, 그래픽 엔진은 디스플레이 엔진(840)을 포함한다. 일 실시예에서, 디스플레이 엔진(840)은 그래픽 프로세서의 외부에 존재하며 링 인터커넥트(802), 또는 일부 다른 인터커넥트 버스 또는 패브릭을 통해 그래픽 프로세서와 연결된다. 디스플레이 엔진(840)은 2D 엔진(841) 및 디스플레이 컨트롤러(843)를 포함한다. 디스플레이 엔진(840)은 3D 파이프라인과 무관하게 동작할 수 있는 특수 목적의 로직을 포함한다. 디스플레이 컨트롤러(843)는 랩톱 컴퓨터에서와 같은 시스템 통합된 디스플레이 디바이스일 수 있거나, 디스플레이 디바이스 커넥터를 통해 부착된 외부 디스플레이 디바이스일 수 있는 디스플레이 디바이스(도시되지 않음)와 연결된다.
그래픽 파이프라인(820) 및 미디어 파이프라인(830)은 다중 그래픽 및 미디어 프로그래밍 인터페이스에 기초한 동작을 수행하도록 구성 가능하며 하나의 임의의 애플리케이션 프로그래밍 인터페이스(application programming interface, API)에 특정하지 않는다. 일 실시예에서, 그래픽 프로세서용 드라이버 소프트웨어는 특정 그래픽 또는 미디어 라이브러리에 특정한 API 콜을 그래픽 프로세서에 의해 처리될 수 있는 커맨드로 변환한다. 다양한 실시예에서, 크로노스 그룹(Khronos Group)이 지원하는 개방형 그래픽 라이브러리(Open Graphics Library, OpenGL) 및 개방형 컴퓨팅 언어(Open Computing Language, OpenCL), 마이크로소프트 코포레이션(Microsoft Corporation)으로부터 구입 가능한 다이렉트3D 라이브러리(Direct3D library), 또는 일 실시예에서는 OpenCL과 D3D 모두 다에 대해 지원이 제공된다. 또한 개방형 소스 컴퓨터 비전 라이브러리(Open Source Computer Vision Library, OpenCV)에 대한 지원이 제공된다. 미래의 API의 파이프라인으로부터 그래픽 프로세서의 파이프라인에 이르기까지 맵핑이 이루어진다면 호환 가능한 3D 파이프라인을 갖는 미래의 API가 또한 지원될 것이다.
그래픽 파이프라인 프로그래밍 - 도 9a 및 도 9b
도 9a는 실시예에 따른 그래픽 프로세서 커맨드 포맷을 예시하는 블록도이며, 도 9b는 실시예에 따른 그래픽 프로세서 커맨드 시퀀스를 예시하는 블록도이다. 도 9a에서 실선 박스는 일반적으로 그래픽 커맨드에 포함된 컴포넌트를 예시하는데 반해, 점선은 옵션의 컴포넌트 또는 그래픽 커맨드의 서브세트에만 포함된 컴포넌트를 포함한다. 도 9a의 예시적인 그래픽 프로세서 커맨드 포맷(900)은 커맨드의 타겟 클라이언트(902), 커맨드 연산 코드(opcode)(904), 및 커맨드의 관련 데이터(906)를 식별하는 데이터 필드를 포함한다. 서브오피코드(905) 및 커맨드 크기(908)는 일부 커맨드에도 또한 포함된다.
클라이언트(902)는 커맨드 데이터를 처리하는 그래픽 디바이스의 클라이언트 유닛을 명시한다. 일 실시예에서, 그래픽 프로세서 커맨드 파서는 각 커맨드의 클라이언트 필드를 검사하여 커맨드의 추가 처리를 조건 설정하고 커맨드 데이터를 적절한 클라이언트 유닛으로 라우팅한다. 일 실시예에서, 그래픽 프로세서 클라이언트 유닛은 메모리 인터페이스 유닛, 렌더러 유닛, 2D 유닛, 3D 유닛, 및 미디어 유닛을 포함한다. 각 클라이언트 유닛은 커맨드를 처리하는 대응하는 프로세싱 파이프라인을 갖는다. 클라이언트 유닛에 의해 커맨드가 수신되면, 클라이언트 유닛은 오피코드(904)를 판독하며, 만일 존재한다면, 서브오피코드(905)는 수행할 연산을 결정한다. 클라이언트 유닛은 커맨드의 데이터(906) 필드 내의 정보를 이용하여 커맨드를 수행한다. 일부 커맨드에 대해, 명시적인 커맨드 크기(908)는 커맨드의 크기를 지정할 것으로 예상된다. 일 실시예에서, 커맨드 파서는 커맨드 오피코드에 기초하여 커맨드의 적어도 일부의 크기를 자동 결정한다. 일 실시예에서, 커맨드는 2배 단어의 배수로 정렬된다.
도 9b의 플로우차트는 샘플 커맨드 시퀀스(910)를 도시한다. 일 실시예에서, 그래픽 프로세서의 실시예를 특징으로 하는 데이터 프로세싱 시스템의 소프트웨어 또는 펌웨어는 일련의 그래픽 동작을 셋 업하고, 실행하고, 종결하는 것으로 도시된 커맨드 시퀀스의 버전을 사용한다. 샘플 커맨드 시퀀스는 예시적인 목적을 위해 도시되고 설명되지만, 실시예는 이와 같은 커맨드 또는 이와 같은 커맨드 시퀀스로 제한되는 것은 아니다. 더욱이, 커맨드는 커맨드 시퀀스 내의 커맨드의 배치로서 발행될 수 있어서, 그래픽 프로세서는 적어도 부분적으로 동시적인 방식으로 커맨드의 시퀀스를 처리할 것이다.
샘플 커맨드 시퀀스(910)는 파이프라인 플러시 커맨드(pipeline flush command)(912)로부터 시작하여 임의의 활성 그래픽 파이프라인이 파이프라인의 현재 계류 중인 커맨드를 완료하게 한다. 일 실시예에서, 3D 파이프라인(922) 및 미디어 파이프라인(924)은 동시에 동작하지 않는다. 파이프라인 플러시는 활성 그래픽 파이프라인이 임의의 계류 중인 커맨드를 완료하도록 수행된다. 파이프라인 플러시에 응답하여, 그래픽 프로세서의 커맨드 파서는 활성의 드로잉 엔진(drawing engine)이 계류 중인 동작을 완료하고 관련한 판독 캐시가 무효화될 때까지 커맨드 처리를 일시 중단할 것이다. 선택사양으로, '더티(dirty)'라고 표시된 렌더러 캐시 내의 임의의 데이터는 메모리에 플러시될 수 있다. 파이프라인 플러시 커맨드(912)는 파이프라인 동기화를 위해 사용될 수 있거나, 그래픽 프로세서를 저전력 상태로 만들기 전에 사용될 수 있다.
파이프라인 선택 커맨드(913)는 커맨드 시퀀스가 그래픽 프로세서로 하여금 파이프라인 사이에서 명시적으로 스위칭할 것을 요구할 때 사용된다. 파이프라인 선택 커맨드(913)는 양측의 파이프라인에 명령어를 발행하는 상황이 아닌 한 파이프라인 커맨드를 발행하기 전에 실행 컨텍스트(execution context) 내에서 한 번만 요구된다. 일 실시예에서, 파이프라인 플러시 커맨드(912)는 파이프라인 선택 커맨드(913)를 통한 파이프라인 스위칭 이전에 즉시 요구된다.
파이프라인 제어 커맨드(914)는 연산에 필요한 그래픽 파이프라인을 구성하며, 3D 파이프라인(922) 및 미디어 파이프라인(924)을 프로그래밍하는데 사용된다. 파이프라인 제어 커맨드(914)는 활성 파이프라인에 대한 파이프라인 상태를 구성한다. 일 실시예에서, 파이프라인 제어 커맨드(914)는 파이프라인 동기화를 위해 사용되며, 커맨드의 배치를 처리하기 전에 활성 파이프라인 내의 하나 이상의 캐시 메모리로부터 데이터를 클리어하는데 사용된다.
리턴 버퍼 상태 커맨드(916)는 데이터를 기록할 각 파이프라인의 한 세트의 리턴 버퍼를 구성하는데 사용된다. 일부 파이프라인 동작은 그 동작이 처리 중에 중간 데이터를 기록하는 하나 이상의 리턴 버퍼의 할당, 선택, 또는 구성을 요구한다. 그래픽 프로세서는 또한 하나 이상의 리턴 버퍼를 사용하여 출력 데이터를 저장하고 스레드 간 통신을 수행한다. 리턴 버퍼 상태(916)는 일련의 파이프라인 동작에 사용할 리턴 버퍼의 크기 및 개수를 선택하는 것을 포함한다.
커맨드 시퀀스에서 나머지 커맨드는 동작을 위한 활성 파이프라인에 따라 다르다. 파이프라인 결정(920)에 기초하여, 커맨드 시퀀스는 3D 파이프라인 상태(930)에서 시작하는 3D 파이프라인(922)으로 진행되거나, 미디어 파이프라인 상태(940)에서 시작하는 미디어 파이프라인(924)으로 진행된다.
3D 파이프라인 상태(930)에 대한 커맨드는 3D 프리미티브 커맨드가 처리되기 전에 구성될 정점 버퍼 상태, 정점 요소 상태, 일정한 컬러 상태, 깊이 버퍼 상태, 및 다른 상태 변수에 대한 3D 상태 설정 커맨드를 포함한다. 이와 같은 커맨드의 값은 적어도 부분적으로 사용 중인 특정 3D API에 기초하여 결정된다. 3D 파이프라인 상태(930) 커맨드는 또한 특정 파이프라인 요소가 사용되지 않을 것이라면 그 특정 파이프라인 요소를 선택적으로 비활성화하거나 바이패스할 수 있다.
3D 프리미티브(932) 커맨드는 3D 파이프라인에 의해 처리될 3D 프리미티브를 제시하는데 사용된다. 3D 프리미티브(932) 커맨드를 통해 그래픽 프로세서로 전달되는 커맨드 및 연관된 파라미터는 그래픽 파이프라인 내의 정점 페치 기능으로 포워딩된다. 정점 페치 기능은 3D 프리미티브(932) 커맨드 데이터를 이용하여 정점 데이터 구조를 만들어 낸다. 정점 데이터 구조는 하나 이상의 리턴 버퍼에 저장된다. 3D 프리미티브(932) 커맨드는 정점 셰이더를 통해 3D 프리미티브에 대해 정점 연산을 수행하는데 사용된다. 정점 셰이더를 처리하기 위해, 3D 파이프라인(922)은 셰이더 실행 스레드를 그래픽 프로세서 실행 유닛으로 디스패치한다.
3D 파이프라인(922)은 실행(934) 커맨드 또는 이벤트를 통해 트리거된다. 일 실시예에서, 레지스터 기록은 커맨드 실행을 트리거한다. 일 실시예에서, 실행은 커맨드 시퀀스에서 '고(go)' 또는 '킥(kick)' 커맨드를 통해 트리거된다. 일 실시예에서, 커맨드 실행은 커맨드 시퀀스를 그래픽 파이프라인을 통해 플러시하는 파이프라인 동기화 커맨드를 이용하여 트리거된다. 3D 파이프라인은 3D 프리미티브에 대해 지오메트리 처리를 수행할 것이다. 일단 연산이 완료되면, 결과로 생긴 기하 개체는 래스터화되며, 픽셀 엔진은 결과로 생긴 픽셀을 채색한다. 픽셀 셰이딩 및 픽셀 백 엔드 연산을 제어하는 부가적인 커맨드는 이와 같은 연산마다 또한 포함될 수 있다.
샘플 커맨드 시퀀스(910)는 미디어 동작을 수행할 때 미디어 파이프라인(924) 경로를 추종한다. 일반적으로, 미디어 파이프라인(924)을 위한 프로그래밍의 특정한 사용 및 방식은 수행될 미디어 또는 컴퓨트 동작에 좌우된다. 특정의 미디어 디코드 동작은 미디어 디코드 동안 미디어 파이프라인으로 오프로드될 수 있다. 미디어 파이프라인은 또한 바이패스될 수 있으며, 미디어 디코드는 하나 이상의 범용 프로세싱 코어에 의해 제공된 자원을 이용하여 전체적으로 또는 부분적으로 수행될 수 있다. 일 실시예에서, 미디어 파이프라인은 또한 범용 그래픽 프로세서 유닛(general-purpose graphics processor unit, GPGPU) 동작을 위한 요소를 포함하는데, 이 경우 그래픽 프로세서는 그래픽 프리미티브의 렌더링과 명시적으로 관련되지 않은 컴퓨터의 셰이더 프로그램을 이용하여 SIMD 벡터 연산을 수행하는데 사용될 수 있다.
미디어 파이프라인(924)은 3D 파이프라인(922)과 유사한 방식으로 구성된다. 한 세트의 미디어 파이프라인 상태 커맨드(940)는 미디어 개체 커맨드(942)에 앞서 디스패치되거나 커맨드 큐 내에 놓인다. 미디어 파이프라인 상태 커맨드(940)는 미디어 개체를 처리하는데 사용될 미디어 파이프라인 요소를 구성하는 데이터를 포함한다. 이것은 미디어 파이프라인 내부의 비디오 디코드 및 비디오 인코드 로직을 구성하는, 인코드 또는 디코드 포맷과 같은 데이터를 포함한다. 미디어 파이프라인 상태 커맨드(940)는 또한 상태 설정의 배치를 포함하는 '간접' 상태 요소를 가리키는 하나 이상의 포인터의 사용을 지원한다.
미디어 개체 커맨드(942)는 미디어 파이프라인에 의해 처리하기 위한 미디어 개체에 포인터를 공급한다. 미디어 개체는 처리될 비디오 데이터를 담은 메모리 버퍼를 포함한다. 일 실시예에서, 모든 미디어 파이프라인 상태는 미디어 개체 커맨드(942)를 발행하기 전에는 유효 상태이어야 한다. 파이프라인 상태가 구성되고 미디어 개체 커맨드(942)가 큐잉되면, 미디어 파이프라인(924)은 실행(934) 커맨드 또는 동등한 실행 이벤트(예를 들면, 레지스터 기록)를 통해 트리거된다. 그 다음 미디어 파이프라인(924)으로부터 출력은 3D 파이프라인(922) 또는 미디어 파이프라인(924)에 의해 제공된 동작에 의해 사후 처리될 수 있다. 일 실시예에서, GPGPU 동작은 미디어 동작과 유사한 방식으로 구성되고 실행된다.
그래픽 소프트웨어 아키텍처 - 도 10
도 10은 실시예에 따른 데이터 프로세싱 시스템의 예시적인 그래픽 소프트웨어 아키텍처를 예시한다. 소프트웨어 아키텍처는 3D 그래픽 애플리케이션(1010), 오퍼레이팅 시스템(1020), 및 적어도 하나의 프로세서(1030)를 포함한다. 프로세서(1030)는 그래픽 프로세서(1032) 및 하나 이상의 범용 프로세서 코어(들)(1034)를 포함한다. 3D 그래픽 애플리케이션(1010) 및 오퍼레이팅 시스템(1020)은 각기 데이터 프로세싱 시스템의 시스템 메모리(1050)에서 실행한다.
일 실시예에서, 3D 그래픽 애플리케이션(1010)은 셰이더 명령어(1012)를 포함하는 하나 이상의 셰이더 프로그램을 갖는다. 셰이더 언어 명령어는 하이 레벨 셰이더 언어(High Level Shader Language, HLSL) 또는 OpenGL 셰이더 언어(OpenGL Shader Language, GLSL)와 같은 고급 셰이더 언어일 수 있다. 애플리케이션은 또한 범용 프로세서 코어(1034)에 의한 실행에 적합한 기계 언어 내의 실행 가능한 명령어(1014)를 포함한다. 애플리케이션은 또한 정점 데이터에 의해 정의된 그래픽 개체(1016)를 포함한다.
오퍼레이팅 시스템(1020)은 워싱톤 레드몬드 소재의 마이크로소프트 코포레이션으로부터 구입 가능한 WINDOWS™ 오퍼레이팅 시스템, 사유의 UNIX 오퍼레이팅 시스템, 또는 리룩스(Linux) 커널의 변형을 이용하는 개방형 소스 UNIX 유사 오퍼레이팅 시스템일 수 있다. Direct3D API가 사용 중일 때, 오퍼레이팅 시스템(1020)은 프론트 엔드 셰이더 컴파일러(1024)를 사용하여 HLSL 내의 임의의 셰이더 명령어(1012)를 저급 셰이더 언어로 컴파일한다. 컴파일 작업은 저스트-인-타임 컴파일 작업(just-in-time compilation)일 수 있거나, 애플리케이션은 공유 사전 컴파일 작업(share pre-compilation)을 수행할 수 있다. 일 실시예에서, 고급 셰이더는 3D 그래픽 애플리케이션(1010)의 컴파일 작업 동안 저급 셰이더로 컴파일된다.
사용자 모드 그래픽 드라이버(1026)는 셰이더 명령어(1012)를 하드웨어 특정 표현으로 변환하는 백 엔드 셰이더 컴파일러(1027)를 포함할 수 있다. OpenGL API가 사용 중일 때, GLSL 고급 언어로 된 셰이더 명령어(1012)는 컴파일 작업을 위해 사용자 모드 그래픽 드라이버(1026)로 전달된다. 사용자 모드 그래픽 드라이버는 오퍼레이팅 시스템 커널 모드 함수(1028)를 사용하여 커널 모드 그래픽 드라이버(1029)와 통신한다. 커널 모드 그래픽 드라이버(1029)는 그래픽 프로세서(1032)와 통신하여 커맨드 및 명령어를 디스패치한다.
다양한 동작 또는 기능이 본 명세서에서 기술된 정도까지, 동작 또는 기능은 하드웨어 회로, 소프트웨어 코드, 명령어, 구성, 및/또는 데이터로서 기술되거나 정의될 수 있다. 콘텐츠는 하드웨어 로직으로 구현될 수 있거나, 직접 실행 가능한 소프트웨어("개체" 또는 "실행 가능한" 형태), 소스 코드, 그래픽 엔진에서 실행을 위해 고안된 고급 셰이더 코드, 또는 특정 프로세서 또는 그래픽 코어를 위한 명령어 집합 내의 저급 어셈블리 언어로 구현될 수 있다. 본 명세서에서 기술된 실시예의 소프트웨어 콘텐츠는 콘텐츠가 저장된 제조자의 물품을 통해, 또는 통신 인터페이스를 통해 데이터를 전송하는 통신 인터페이스를 동작시키는 방법을 통해 제공될 수 있다.
비일시적인 머신 판독 가능한 저장 매체는 머신으로 하여금 기술된 기능 또는 동작을 수행하게 할 수 있으며, 기록 가능한/기록 가능하지 않은 매체(예를 들면, 판독 전용 메모리(read only memory, ROM), 랜덤 액세스 메모리(random access memory, RAM), 자기 디스크 저장 매체, 광 저장 매체, 플래시 메모리 디바이스 등)과 같이, 머신(예를 들면, 컴퓨팅 디바이스, 전자 시스템 등)에 의해 액세스 가능한 형태의 정보를 저장하는 임의의 메커니즘을 포함한다. 통신 인터페이스는 다른 디바이스와 통신하기 위해, 하드웨어에 내장된(hardwired), 무선, 광 등의 매체 중 임의의 매체와 인터페이스하는, 메모리 버스 인터페이스, 프로세서 버스 인터페이스, 인터넷 연결, 디스크 컨트롤러 등과 같은 임의의 메커니즘을 포함한다. 통신 인터페이스는 구성 파라미터를 제공함으로써 또는 소프트웨어 콘텐츠를 서술하는 데이터 신호를 제공하도록 통신 인터페이스를 준비시키는 신호를 전송함으로써 구성된다. 통신 인터페이스는 통신 인터페이스로 전송된 하나 이상의 커맨드 또는 신호를 통해 액세스될 수 있다.
데이터 분배 패브릭 - 도 11 내지 도 14
하이브리드 데이터 분배 패브릭은 확장 가능한 GPU를 특징으로 하는 그래픽 프로세서의 실시예의 상호 접속 로직으로서 사용될 수 있다. 일 실시예에서, 하이브리드 패브릭은 공유 버스를 통해 동작하는 하나 이상의 물리적 데이터 채널을 포함하며, 각 물리적 채널에는 하나 이상의 프로그램 가능한 가상 채널이 있다. 가상 채널은 독립적으로 중재될 수 있으며, 채널 액세스는 가상 채널마다 별도로 협상된다. 가상 채널을 통한 트래픽은 하나 이상의 트래픽 클래스로 분류된다. 일 실시예에서, 우선순위 시스템은 가상 채널 및 트래픽 클래스가 중재를 위한 상대적 우선권을 할당받도록 한다. 일 실시예에서, 트래픽 밸런싱 알고리즘(traffic balancing algorithm)은 패브릭에 연결된 각 노드에 실질적으로 동일한 대역폭 및 처리량을 유지하도록 동작한다. 일 실시예에서, 하이브리드 패브릭 데이터 분배 로직은 패브릭에 연결된 노드보다 높은 클럭 레이트에서 동작하여, 버스 처리량을 유지하면서 버스 폭을 줄여준다. 일 실시예에서, 각 공유 버스는 유휴일 때 별도로 클럭 게이팅되며, 도래할 활동의 전조 표시를 전송하여 버스 기동 이벤트(bus wake event)를 트리거한다.
도 11은 그래픽 코어(1102), 그래픽 코어 캐시(1104), 및 하이브리드 패브릭 커넥터(1106)를 포함하는 그래픽 코어 패브릭 어셈블리(1100)의 실시예의 블록도이다. 하이브리드 패브릭 커넥터(1106)는 그래픽 코어 패브릭 어셈블리(1100)를 패브릭 버스(1108)에 연결한다. 그래픽 코어 패브릭 어셈블리(1100)의 실시예는 그래픽 프로세서 내부의 여러 추상 레벨에 이용 가능하다. 그래픽 코어(1102)는 본 명세서에서 기술된, 도 4의 확장 가능한 실행 유닛 어레이(414), 도 5의 그래픽 코어(580A), 또는 도 6의 실행 유닛(608A)과 같은 그래픽 실행 로직 중 임의의 로직을 포함한다. 그래픽 코어 캐시(1104)는 패브릭 커넥터(1106)로부터 입력되는 데이터를 저장하는 로컬 그래픽 코어 캐시 메모리를 포함한다. 그래픽 코어 캐시(1104)는 또한 데이터 분배 패브릭 커넥터(1106)에 의한 송신에 앞서 출력되는 데이터를 저장한다.
패브릭 커넥터(1106)는 패브릭 버스(1108)에 따라서 놓인 데이터 패킷을 수신하고, 버퍼링하고, 송신하고, 재송신할 수 있는 패브릭 노드이다. 일 실시예에서, 하이브리드 패브릭 커넥터(1106)는 하이브리드 패브릭의 하나의 채널을 통해 패킷을 수신하며, 패킷을 다른 채널을 통해 재송신함으로써 패킷을 스위칭한다. 하이브리드 패브릭 커넥터(1106)의 실시예는 그래픽 코어 캐시(1104)와 연결된다. 커넥터(1106)는 그래픽 코어(1102)를 향한 데이터를 그래픽 코어 캐시(1104)에 기록하며, 그래픽 코어 캐시(1104)로부터 데이터를 판독하여 공유 메모리 또는 다른 그래픽 코어로 송신한다. 각 그래픽 코어는 하이브리드 패브릭상의 데이터 패킷을 어드레싱하고 패브릭 노드 간의 트래픽 부하 밸런싱을 수행하는데 사용되는 코어 식별자 및 해시 식별자를 갖는다.
하이브리드 패브릭 버스(1108)는 단일의 버스 라인 또는 복수의 버스 라인을 포함할 수 있다. 일 실시예에서, 하이브리드 패브릭 버스(1108)는 패킷 기반의 데이터 메시지가 각 그래픽 코어(1102)를 향해 전송되는 복수의 프로그램 가능한 데이터 채널을 포함한다. 하이브리드 패브릭 버스(1108)의 복수의 채널은 복수의 그래픽 코어 사이에서 공유되며 데이터의 복수의 트래픽 클래스를 지원한다. 채널의 개수는 그래픽 코어의 개수, 그래픽 코어 작업부하, 및 그래픽 프로세싱 시스템 내 메모리(예를 들면, 로컬/공유 캐시, 시스템 메모리 등)의 활용 및 용량에 기초하여 구성될 수 있다.
도 12a 및 도 12b는 예시적인 복수의 그래픽 코어 토폴로지를 예시한다. 도 12a는 아홉 개의 그래픽 코어가 하이브리드 패브릭의 실시예를 통해 연결되어 있는 트리 토폴로지(tree topology)를 도시한다. 도 12b는 열여섯 개의 그래픽 코어가 하이브리드 패브릭의 실시예를 통해 연결되어 있는 메시 토폴로지(mesh topology)를 도시한다. 하이브리드 패브릭은 각각의 가능한 그래픽 코어 토폴로지마다 구성 가능하다. 그래픽 코어는 복수의 수직 계층에서 복수의 그래픽 코어를 포함하는 적층형(stacked) 3D 집적 회로로 배열될 수 있다. 적층형 집적 회로는 다이-온-다이(die-on-die) 집적 회로, 웨이퍼-온-웨이퍼(wafer-on-wafer) 집적 회로, 및/또는 웨이퍼-온-다이(wafer-on-die) 또는 다이-온-웨이퍼(doe-on-wafer) 집적 회로의 하나 이상의 조합을 포함할 수 있다. 그러나 다른 3D 회로 제조 방법이 또한 사용될 수 있다.
도 12a는 아홉 개의 그래픽 코어가 트리 토폴로지에서 연결되어 있는 것을 도시한다. 제 1 계층(1200)은 세 개의 그래픽 코어를 포함하는데, 여기서 제 1 그래픽 코어(1202)는 제 3 그래픽 코어(1206)를 통해 제 2 그래픽 코어(1204)와 연결된다. 제 3 그래픽 코어(1206)는 하나 이상의 스루-실리콘-비아(through-silicon-vias, "TSV")를 통해 제 2 계층(1210) 내의 제 6 그래픽 코어(1216)와 연결된다. 또한, 제 6 그래픽 코어(1216)는 제 4 그래픽 코어(1212)를 제 5 그래픽 코어(1214)와 연결한다. 제 6 그래픽 코어(1216)는 또한 제 7 그래픽 코어(1222) 및 제 8 그래픽 코어(1224)를 포함하는 제 3 계층(1220) 내의 제 9 그래픽 코어(1226)와 연결된다. 그래픽 코어들은 하이브리드 패브릭을 통해 연결되며, 공유 픽셀 백 엔드 하드웨어와 같이 그래픽 코어에 의해 공유된 공유 메모리 및 다른 공통 자원을 포함하는 공유 자원(1230)과 통신한다. 하이브리드 패브릭은 추가적인 대역폭 또는 처리량을 높은 트래픽의 하이브리드 패브릭 커넥터에 제공하도록 구성될 수 있거나, 각 그래픽 코어로, 각 그래픽 코어로부터, 그리고 각 그래픽 코어를 통해 흐르는 데이터의 실질적으로 동일한 대역폭을 유지하는 다른 부하 밸런싱 또는 트래픽 관리 기술을 제공하도록 구성될 수 있다.
도 12b의 예시적인 블록도에서, 열여섯 개의 그래픽 코어는 메시 토폴로지에서 구성된다. 가능한 일 구성에서, 각기 네 개의 그래픽 코어를 갖는 네 개의 계층이 적층된다. 제 1 계층(1240)은 네 개의 그래픽 코어를 포함하는데, 여기서 각 그래픽 코어는 제 2 계층(1250) 내의 상대편 그래픽 코어와 연결된다. 그 다음으로, 제 2 계층(1250) 내의 각 그래픽 코어는 제 3 계층(1260) 내의 상대편 그래픽 코어와 연결된다. 그 다음으로, 제 3 계층(1260) 내의 각 그래픽 코어는 제 4 계층(1260) 내의 상대편 그래픽 코어와 연결된다. 마지막으로, 제 4 계층(1270) 내의 각 그래픽 코어는 공유 메모리를 포함하는 공유 자원(1280)과 연결된다. 계층의 개수와 계층 당 코어의 개수는 예시적이며 실시예는 그렇게 제한되는 것은 아니며, 여러 토폴로지가 지원된다. 하이브리드 패브릭은 다이의 크기, 대역폭 및 처리량 요건에 기초하여 상이한 토폴로지에서 배열되는 복수의 그래픽 코어 사이의 통신을 가능하게 하도록 구성될 수 있다.
도 13은 수직방향으로 적층된 다섯 개의 그래픽 코어를 포함하는 적층형 3D 집적 회로의 실시예의 블록도이다. 예시된 패브릭 채널은 별개의 버스일 수 있거나, 공유 버스를 통해 연결될 수 있다. 각 그래픽 코어는 임의의 채널을 통해 데이터를 송신 또는 수신할 수 있다. 하이브리드 패브릭을 통해 전달되는 데이터 패킷은 여러 코어의 패브릭 커넥터를 통과한 다음 타겟에 도달할 수 있다. 코어는 단일 채널을 통해 코어 간 통신을 처리할 수 있지만, 코어를 천이할 때 또는 코어에 연결된 패브릭 커넥터를 천이할 때 패킷은 채널에서 채널로 스위칭될 수 있다. 채널 중재 알고리즘은 각 코어에 대해 동일한 통신 대역폭을 유지하도록 각 채널상의 트래픽을 균형 유지하는데 이용될 수 있다. 그래픽 코어가 예시되지만, 그래픽 코어에 연결되는 패브릭 커넥터는 기술된 기능성 중 적어도 일부의 기능성을 수행할 수 있다.
예시적인 중재 알고리즘은 메모리행 트래픽(memory bound traffic)을 위해 사용되는 '적층 최적화(stack optimization)' 알고리즘이다. 도 13에 도시된 그래픽 프로세서 코어(1302-1310)는 각자의 하이브리드 패브릭 커넥터(예를 들면, 도 11의 하이브리드 패브릭 커넥터(1106))와 각기 연결된다. 하이브리드 패브릭 커넥터는 상호 연결된 코어를 공유 메모리(1330)의 영역과 연결한다. 아래의 표 1은 다섯 개의 그래픽 코어와 공유 메모리 사이의 메모리행 트래픽을 균형 유지하는 예시적인 채널 중재 알고리즘의 결과를 예시한다.
Figure pct00001
표 1의 채널 0 칼럼에서 도시된 바와 같이, 각 코어는 메모리행 데이터가 채널 0에서부터 유래되며, 그러면서 통과 트래픽(pass-through traffic)을 다른 코어로부터 다른 채널로 스위칭하는 것으로 구성된다. 예를 들면, 메모리행 데이터 패킷(1312)은 채널 0에서 그래픽 코어 0로부터 전달된다. 적층 최적화 알고리즘은 코어 0(1302)로부터의 메모리행 트래픽이 채널 4를 통과할 것이라고 명시하고 있기 때문에, 코어 1(1304)은 패킷(1314)을 채널 4로 스위칭한다. 그래서 코어 2(1306)는 패킷(1316)을 채널 3으로 스위칭한다. 코어 3(1308)은 패킷(1318)을 채널 2로 스위칭한다. 코어 4(1310)는 패킷(1320)을 채널 1로 스위칭한다. 도 13 및 표 1은 하이브리드 패브릭상의 예시적인 형태의 트래픽에 대한 예시적인 알고리즘을 예시하고 있지만, 다른 종류의 트래픽에 대한 다른 알고리즘이 사용될 수 있다. 일 실시예에서, 해 다른 종류의 트래픽은 트래픽 관리를 더 용이하게 하도록 상이한 트래픽 클래스로 그룹화된다.
도 14는 실시예에 따른, 가상 채널을 통해 반송되는 복수의 트래픽 클래스를 예시한다. 제 1 패브릭 커넥터(1402) 및 제 2 패브릭 커넥터(1402)는 'M'개까지의 가상 채널(1406A-M)을 갖는 패브릭 채널(1406)을 통한 통신을 가능하게 한다. 가상 채널은 가변 길이의 정보가 고정된 집합의 물리적 채널을 통해 전송될 수 있게 한다. 가상 채널은 영구적인 가상 채널일 수 있거나, 가상 채널은 시스템 구성에 기초하여 동적으로 활성화되거나 비활성화될 수 있다. 영구적인 가상 채널을 사용하면 채널 ID를 고정하는 것이 가능하며, 이것은 가상 채널 관리의 오버헤드를 최소화한다. 채널을 동적으로 구성하면 설계 유연성이 향상되고 그 대가로 부수적인 채널 관리 오버헤드가 생긴다.
각 가상 채널은 복수의 트래픽 클래스를 할당받을 수 있다. 트래픽 클래스는 중재와 관련되는 트래픽의 한 부분이다. 각 가상 채널은 'N'개까지의 트래픽 클래스를 반송할 수 있다. 트래픽의 각 클래스는 프로그래밍(퓨즈, 구성 레지스터 등)을 통해 특정 가상 채널에 할당된다. 'L'개까지의 트래픽 종류의 클래스는 특정 가상 채널에 할당될 수 있다.
Figure pct00002
상기 표 2는 도 14에 예시된 바와 같은 가상 채널에 할당되는 예시적인 트래픽 클래스를 도시한다. 하이브리드 패브릭은 입력 트래픽의 각 단위를 분류하며, 입력 단위가 그의 할당된 가상 채널 내에서 전달되도록 보장하는 로직을 포함할 수 있다. 일 실시예에서, 채널을 통한 데이터 전송은 선입선출(first-in-first-out, FIFO) 순서로 발생하며, 채널 중재는 가상 채널에 기초하여 이루어진다. 가상 채널 내에서 트래픽은 바로 그 동일한 가상 채널을 통한 추가적인 트래픽의 전송을 차단할 수 있다. 그러나 특정의 가상 채널은 상이한 가상 채널을 차단하지 않을 것이다. 따라서, 상이한 가상 채널상의 트래픽은 독립적으로 중재된다.
일 실시예에서, 데이터 전송 동안 그래픽 코어 캐시와 그래픽 코어에 대한 하이브리드 패브릭 커넥터 노드 모두에서 그래픽 코어에서 동작하는 개개의 스레드마다 일관성이 유지된다. 하이브리드 패브릭 노드는 동일한 트래픽 클래스 내의 단일의 스레드로부터 유래하는 트래픽을 라우팅하며, 트래픽 클래스는 특정의 가상 채널에 할당된다. 단일의 가상 채널상의 단일의 트래픽 클래스 내의 데이터는 FIFO 순서로 전송된다. 그러므로 단일의 스레드로부터의 데이터는 하이브리드 패브릭을 통해 전송될 때는 엄격하게 순서를 지키며, 읽기-이후-쓰기(read-after-write) 또는 쓰기-이후-읽기(write-after-read) 데이터 위험요소를 회피하기 위해 스레드별 일관성(per-thread coherency)이 유지된다. 일 실시예에서, 스레드 그룹 일관성은 공유 메모리와의 전역적 동기화 메커니즘(global synchronization mechanism)을 통해 유지된다.
Figure pct00003
상기 표 3은 예시적인 트래픽 클래스 우선순위를 도시한다. 우선권 알고리즘은 각 트래픽 클래스에 할당하는 우선권을 결정하도록 프로그램될 수 있다. 프로그램 가능한 트래픽 클래스 우선권은 트래픽 클래스가 임의 트래픽 그룹화 메커니즘(arbitrary traffic grouping mechanism)으로 사용되게 하며, 이 메커니즘에서 트래픽은 그저 일관성을 유지하기 위해 클래스 내에서 그룹화될 수 있거나, 특정 트래픽은 높은 우선권을 할당받을 수 있으며 높은 우선권 데이터에 전용될 수 있다. 예를 들어, 각기 가상 채널 1(1406B)에 할당된 클래스 1 및 클래스 4는 2라는 우선권을 할당받을 수 있다. 각기 가상 채널 0(1406A)에 할당된 클래스 2 및 클래스 5는 1이라는 우선권을 할당 받을 수 있다. 트래픽 클래스 'N'은 3이라는 우선권을 가진 가상 채널 2(1406C)에 할당될 수 있다. 클래스 2에 속한 트래픽은 가능한 빨리 전송되어야 하는 또는 다른 트래픽 클래스에 의해 차단되지 않아야 하는 지연에 민감한 데이터일 수 있는데 반해, 클래스 1에 속한 트래픽은 일관성을 유지하도록 그룹화되는 단일의 스레드로부터의 중간 정도로 지연에 민감한 트래픽일 수 있다.
트래픽 클래스는 모든 트래픽 클래스에 관련하여, 또는 동일한 가상 채널상의 트래픽 클래스의 우선권과 관련하여 우선권을 할당받을 수 있다. 일 실시예에서, 우선순위 체계는 가중치를 트래픽 클래스에 할당함으로써 구성되는데, 여기서 가중치가 높을수록 우선권이 높다. 공정한 우선순위 알고리즘(fair prioritization algorithm)이 이용될 수 있는데, 이 알고리즘에서 각 참여 클래스는 우선권을 할당받지 못하는 것방지하기 위해 최소량의 대역폭을 보장받는다. 일 실시예에서, 절대 우선권 알고리즘(absolute priority algorithm)은 특정 환경하에서 사용되는데, 이 알고리즘에서 더 높은 우선권 트래픽은 항시 더 낮은 우선권을 차단한다.
절대 우선권이 사용되는 경우, 통신 교착상태를 방지하기 위해 부수적인 알고리즘이 마련되어 있다. 가상 채널과 트래픽 클래스를 조합하여 사용하면, 특정 가상 채널상에서 절대 우선권을 갖는 단일의 트래픽 클래스가 다른 가상 채널상의 트래픽을 차단하지 않으므로, 교착상태의 가능성이 줄어든다. 일 실시예에서, 만일 하나의 가상 채널에서 우선순위를 할당받지 못하는 상태 또는 잠재적 교착상태가 검출되면, 차단된 트래픽 클래스는 다른 가상 채널로 재할당될 수 있다.
Figure pct00004
상기 표 4는 예시적인 가상 채널 우선순위를 도시한다. 트래픽 클래스와 마찬가지로, 각 가상 채널은 또한 우선권을 수신할 수 있으며, 채널 중재는 가상 채널의 상대적인 우선순위를 고려할 수 있다. 예를 들면, 가상 채널 2상의 데이터 트래픽은 다른 가상 채널상의 데이터보다 높은 상대 우선권을 가질 수 있다. 가중된 우선권 시스템은 가상 채널 우선순위와 함께 이용될 수 있는데, 이 경우 더 높은 가중치는 더 높은 우선권을 나타낸다. 공정한 우선권 시스템 또는 절대 우선권 시스템이 사용될 수 있다.
도 15는 실시예에 따른, 데이터 전송 시퀀스의 흐름도이다. 블록(1502)에서 도시된 바와 같이, 그래픽 프로세서에 연결된 하이브리드 패브릭 커넥터와 같은 소스 노드는 채널에 대해 채널 액세스 상태를 결정한 다음 하이브리드 패브릭상의 채널을 통해 메시지 패킷을 전송한다. 메시지는 복수의 가능한 트래픽 분류 중 하나의 분류로 분류될 수 있으며, 각 분류는 채널에서 상대적 우선권을 갖는다. 채널 액세스는 시분할 다중 액세스 프로토콜(time division multiple access protocol), 또는 캐리어 감지 다중 액세스 프로토콜(carrier sense multiple access protocol)과 같은 임의의 적합한 채널 액세스 프로토콜을 통해 결정될 수 있다.
제 1 채널이 이용 가능한 것으로 결정되면, 블록(1504)에서 도시된 바와 같이, 소스 노드는 메시지를 소스 노드로부터 타겟 노드를 향해 전송할 수 있다. 블록(1506)에서 도시된 바와 같이, 메시지는 하이브리드 패브릭의 공유 버스상의 제 1 노드에 의해 수신될 수 있다. 제 1 노드는 하이브리드 패브릭에 의해 연결된 여러 그래픽 프로세서 중 하나에 연결될 수 있다. 블록(1508)에서 도시된 바와 같이, 소스 노드, 타겟 노드, 트래픽 클래스, 및 메시지가 수신되는 채널과 같은 여러 인자에 기초하여, 제 1 노드는 메시지를 제 1 노드에서 공유 버스상의 제 2 노드로 스위칭할 수 있다. 제 1 노드는 하이브리드 패브릭에 의해 사용되는 그래픽 코어 토폴로지에 따라서, 표 1의 적층 최적화 알고리즘과 같은 트래픽 밸런싱 프로토콜의 일부로서, 또는 방향 라우팅 프로토콜의 일부로서 메시지를 스위칭할 수 있다. 일 실시예에서, 채널 액세스는 공유 버스를 통해 반송된 복수의 가상 채널에 기초하여 결정되는데, 이때 각 가상 채널의 채널 액세스는 다른 가상 채널과 별도로 중재된다.
일 실시예에서, 하이브리드 패브릭 인터커넥트 로직은 인터커넥트 로직에 의해 접속된 노드보다 높은 클럭 주파수에서 동작한다. 노드 사이의 단일의 메시지는 패브릭 인터커넥트와 노드 사이의 주파수 비율에 기초하여 복수의 별개의 메시지로 나누어질 수 있다. 패브릭 노드는 각 노드의 클럭 사이클 동안 메시지를 전송할 수 있으며, 메시지는 클럭 사이클 사이마다 전송되도록 복수의 메시지로 나누어질 수 있다. 메시지를 나누는 것은 패브릭 노드에 투명하며, 이에 따라 성능을 유지하면서 상호 연결 로직의 물리적 계층의 폭의 감소가 가능해 진다.
일 실시예에서, 하이브리드 패브릭의 인터커넥트 로직은 전력 관리되며 클럭 케이팅된다. 분산 접근방법은 버스가 유휴일 때 각 버스 라인이 비활성화되는 로컬 게이팅된 클럭을 사용하는 클럭 게이팅을 위해 사용될 수 있다. 각 버스는 메시지가 버스 또는 버스와 연관된 가상 채널을 따라서 수신될 예정일 때, 클럭을 활성화하는, 도래할 작동의 전조 표시를 발행한다. 따라서, 전력은 활성 상태의 버스에서만 소비된다. 유휴인 동안, 버스는 정적의 전력만을 소비하며, 그렇지 않으면 저전력 상태에 있는다.
상세한 설명과 청구범위에서 "제 1", "제 2", "제 3", "제 4" 등과 같은 용어가 있다면, 이것은 유사한 요소 사이를 구별하기 위해 사용되며 반드시 특정한 순서 또는 연대순을 서술하기 위한 것은 아니다. 이렇게 사용된 용어는 본 명세서에서 설명된 실시예가 예를 들면, 예시되거나 그렇지 않으면 본 명세서에서 설명된 것과 다른 순서로 동작할 수 있는 그런 적절한 환경 하에서 바꾸어 쓸 수 있다고 이해하여야 한다.
본 명세서에서 사용된 것으로, 하나 이상의 "실시예"라는 말은 적어도 하나의 구현예에 포함된 특별한 특징, 구조 또는 특성을 서술하는 것으로 이해하여야 한다. 그러므로 본 명세서에서 출현하는 "일 실시예에서" 또는 "대안의 실시예에서"와 같은 관용구는 각기 다양한 실시예 및 구현예를 서술하는 것이며, 반드시 모두가 동일한 실시예를 언급하는 것은 아니다. 그렇다고 이러한 관용구가 반드시 상호 배타적인 것도 또한 아니다.
일 실시예에서, 프로세서는 하나 이상의 그래픽 코어 및 하나 이상의 그래픽 프로세서 코어를 상호 연결하는 적어도 하나의 데이터 채널을 갖는 상호연결 로직을 포함한다. 적어도 하나의 채널은 공유 버스를 통해 반송될 수 있다. 인터커넥트 로직은 상호 연결된 코어를 공유 자원과 연결한다. 인터커넥트 로직은 상호 연결된 코어와 공유 자원 사이에서 데이터가 적어도 하나의 데이터 채널을 통해 반송된 하나 이상의 가상 채널을 통해 분배될 수 있게 한다. 가상 채널은 여러 트래픽 분류를 갖는 프로그램 가능한 트래픽 분류 시스템을 포함할 수 있다.
복수의 트래픽 분류는 각 분류에 할당된 우선권을 가질 수 있다. 우선권은 동일한 가상 채널상의 다른 트래픽 분류에 대해 중재될 수 있다. 일 실시예에서, 하나 이상의 그래픽 프로세서 코어는 복수의 그래픽 프로세서 코어를 포함하는 3D 집적 회로 스택을 포함한다. 일 실시예에서, 복수의 그래픽 프로세서 코어는 복수의 공유 버스를 통해 연결되며, 각 버스는 유휴 기간 동안 별도로 클럭 게이팅된다.
일 실시예에서, 시스템은 복수의 코어를 포함하는 프로세서를 포함하는데, 적어도 하나의 코어는 그래픽 명령어를 처리하기 위한 명령어 집합을 포함한다. 적어도 하나의 그래픽 프로세싱 코어는 적어도 하나의 클럭 게이팅된 물리적 데이터 채널 및 하나 이상의 가상 채널을 갖는 인터커넥트 로직을 통해 프로세서상의 공유 자원과 연결되며, 각 가상 채널은 복수의 트래픽 분류를 갖는 데이터를 반송한다. 복수의 트래픽 분류는 프로그램 가능할 수 있으며, 복수의 트래픽 분류는 각기 가상 채널에 할당될 수 있다. 시스템은 또한 프로세서에 연결된 메모리를 포함할 수 있다.
본 명세서에서 기술된 실시예를 수행하기 위한 디자인을 표현하는 데이터는 복수의 방식으로 그 디자인을 표현할 수 있다. 첫 번째로, 시뮬레이션 시 유용한 것으로서, 하드웨어는 하드웨어 서술 언어 또는 다른 기능 서술 언어를 이용하여 표현될 수 있다. 또한, 로직 및/또는 트랜지스터 게이트를 가진 회로 레벨의 모델은 디자인 프로세스의 일부 단계에서 생성될 수 있다. 그뿐만 아니라, 일부 단계에서, 대부분의 디자인은 하드웨어 모델에서 각종 디바이스의 물리적인 배치를 표현하는 데이터의 레벨에 도달한다. 통상의 반도체 제조 기술이 사용되는 사례에서, 하드웨어 모델을 표현하는 데이터는 집적 회로를 생성하는데 사용되는 마스크 용도의 여러 마스크 층상의 각종 특징의 존재 또는 부재를 명시하는 데이터일 수 있다. 디자인의 임의의 표현에서, 디자인은 머신 판독 가능한 매체의 형태로 저장될 수 있다.
일 실시예에서, 머신 판독 가능한 매체는 적어도 하나의 머신에 의해 수행되는 경우, 적어도 하나의 머신으로 하여금 적어도 하나의 집적 회로가 소스 노드로부터 타겟 노드로의 메시지에 대해 복수의 노드 공유 버스상의 채널 액세스 상태를 결정하는 단계 - 복수의 노드 중 적어도 하나의 노드는 그래픽 프로세서 코어와 연결되고 노드 중 적어도 하나의 노드를 공유 자원과 연결함 - 와, 메시지를 제 1 데이터 채널을 통해 메시지 소스로부터 메시지 타겟으로 전송하는 단계 - 메시지는 제 1 우선권을 갖는 제 1 트래픽 분류를 포함함 - 와, 메시지를 그래픽 프로세서 코어와 연결된 제 1 데이터 버스 커넥터에서 수신하는 단계와, 적어도 소스 노드 및 타겟 노드에 기초하여, 메시지를 제 1 데이터 채널로부터 제 2 데이터 채널로 스위칭하는 단계를 포함하는 방법을 수행하게 하는 것을 가능하게 한다. 제조된 적어도 하나의 집적 회로는 복수의 그래픽 프로세서 코어를 포함하는 3D 집적 회로 스택일 수 있다.
일 실시예에서, 채널 액세스를 결정하는 단계는, 채널 액세스 프로토콜을 이용하여, 메시지가 제 3 데이터 채널을 통해 전송될 수 있는지를 결정하는 단계와, 제 3 데이터 채널을 통한 전송이 차단된 것을 결정한 이후, 메시지를 제 1 데이터 채널을 통해 전송하는 단계를 포함한다. 채널 액세스는 시분할 다중 액세스 프로토콜 또는 캐리어 감지 다중 액세스 프로토콜에 의해 결정될 수 있다.
기술된 다양한 컴포넌트는 기술된 동작 또는 기능을 수행하기 위한 수단일 수 있다. 본 명세서에서 기술된 각 컴포넌트는 소프트웨어, 하드웨어 또는 이들의 조합을 포함한다. 컴포넌트는 소프트웨어 모듈, 하드웨어 모듈, 범용 하드웨어(예를 들면, 애플리케이션 특정 하드웨어, 주문형 집적 회로(application specific integrated circuit, ASIC), 디지털 신호 프로세서(digital signal processor, DSP) 등), 내장형 컨트롤러, 하드웨어에 내장된 회로(hardwired circuitry) 등으로서 구현될 수 있다. 본 명세서에서 설명된 것 이외에, 개시된 실시예 및 구현예의 범위를 벗어나지 않고 그에 대해 다양한 수정이 이루어질 수 있다. 그러므로 본 명세서에서 예시 및 예는 예시적인 것으로 해석되어야 하며, 제한하는 의미로 해석되지 않아야 한다. 본 발명의 범위와 사상은 오로지 다음의 청구범위에 입각하여서만 평가되어야 한다.

Claims (25)

  1. 범용 프로세서 코어와,
    그래픽 동작을 수행하는 명령어를 처리하는 하나 이상의 그래픽 프로세서 코어와,
    적어도 하나의 데이터 채널을 가지며, 상기 하나 이상의 그래픽 프로세서 코어를 상호 연결하고, 상기 그래픽 프로세서 코어를 공유 자원과 연결하는 인터커넥트 로직을 포함하되,
    상기 인터커넥트 로직은 가상 채널을 통하여 상기 그래픽 프로세서 코어와 상기 공유 자원 사이의 데이터 분배를 가능하게 하며,
    상기 가상 채널은 복수의 트래픽 분류를 갖는 프로그램 가능한 트래픽 분류 시스템을 포함하는
    프로세서.
  2. 제 1 항에 있어서,
    상기 적어도 하나의 데이터 채널은 공유 버스인
    프로세서.
  3. 제 1 항에 있어서,
    상기 인터커넥트 로직은 복수의 데이터 채널을 포함하는
    프로세서.
  4. 제 3 항에 있어서,
    상기 복수의 데이터 채널의 각각은 개별적으로 클럭 게이팅된 버스(clock gated bus)이며, 각각의 버스는 전조 표시(early indication)를 사용하여 도래할(incoming) 작동을 신호하는
    프로세서.
  5. 제 1 항에 있어서,
    상기 공유 자원은 공유 메모리 자원인
    프로세서.
  6. 제 5 항에 있어서,
    상기 공유 메모리 자원은 공유 캐시인
    프로세서.
  7. 제 1 항에 있어서,
    상기 인터커넥트 로직은 복수의 가상 채널을 통한 상기 데이터 분배를 가능하게 하는
    프로세서.
  8. 제 7 항에 있어서,
    상기 복수의 가상 채널은 프로그램 가능한 우선권 시스템에 기초하여 중재되는
    프로세서.
  9. 제 7 항에 있어서,
    상기 프로그램 가능한 트래픽 분류 시스템은 상기 복수의 트래픽 분류 중 적어도 하나의 트래픽 분류를 상기 복수의 가상 채널 중 단일의 가상 채널에 할당하는
    프로세서.
  10. 제 1 항에 있어서,
    상기 복수의 트래픽 분류는 프로그램 가능한 우선권을 포함하는
    프로세서.
  11. 제 10 항에 있어서,
    상기 프로그램 가능한 우선권은 상기 복수의 가상 채널 중 단일의 가상 채널 내의 트래픽 분류와 관련되는
    프로세서.
  12. 제 1 항에 있어서,
    상기 인터커넥트 로직은 상기 하나 이상의 그래픽 프로세서 코어보다 더 높은 주파수에서 동작하는
    프로세서.
  13. 제 1 항에 있어서,
    상기 하나 이상의 그래픽 프로세서 코어는 복수의 그래픽 프로세서 코어를 포함하는 3차원(3D) 집적 회로 스택을 포함하는
    프로세서.
  14. 복수의 코어를 포함하는 프로세서 - 적어도 하나의 코어는 그래픽 명령어를 처리하기 위한 명령어 집합을 포함하고, 상기 적어도 하나의 코어는 적어도 하나의 클럭 게이팅된 물리적 데이터 채널 및 하나 이상의 가상 채널을 갖는 인터커넥트 로직을 통해 상기 프로세서상의 공유 자원과 연결되며, 각각의 가상 채널은 복수의 프로그램 가능한 트래픽 분류를 갖는 데이터를 반송하며, 각각의 상기 복수의 프로그램 가능한 트래픽 분류는 복수의 우선순위를 갖는 가상 채널 중 하나의 가상 채널에 할당됨 - 와,
    상기 프로세서에 연결된 메모리를 포함하는
    시스템.
  15. 제 14 항에 있어서,
    상기 프로세서는 복수의 그래픽 프로세서 코어를 포함하는 3차원(3D) 집적 회로 스택을 포함하는
    시스템.
  16. 소스 노드로부터 타겟 노드로 전달되는 메시지에 대해 다중 노드 공유 버스상의 채널 액세스 상태를 결정하는 수단 - 복수의 노드 중 적어도 하나의 노드는 그래픽 프로세서 코어와 연결되고 상기 복수의 노드 중 적어도 하나의 노드는 공유 자원과 연결됨 - 과,
    제 1 데이터 채널을 통해 상기 소스 노드로부터 타겟 노드로 메시지를 전송하는 수단 - 상기 메시지는 제 1 우선권을 갖는 제 1 트래픽 분류를 포함함 - 과,
    제 1 그래픽 프로세서 코어와 연결된 제 1 데이터 버스 커넥터에서 상기 메시지를 수신하는 수단과,
    적어도 상기 소스 노드 및 상기 타겟 노드에 기초하여, 제 1 데이터 채널로부터 제 2 데이터 채널로 상기 메시지를 스위칭하는 수단을 포함하는
    장치.
  17. 제 16 항에 있어서,
    채널 액세스를 결정하는 상기 수단은,
    채널 액세스 프로토콜을 이용하여, 제 3 데이터 채널이 메시지를 전송하는데 이용 가능한지를 결정하는 수단과,
    상기 제 3 데이터 채널을 통한 전송이 차단된 것을 결정한 이후, 상기 제 1 데이터 채널을 통해 메시지를 전송하는 수단을 포함하는
    장치.
  18. 제 17 항에 있어서,
    상기 제 1 데이터 채널, 상기 제 2 데이터 채널, 및 상기 제 3 데이터 채널은 가상 데이터 채널인
    장치.
  19. 제 17 항에 있어서,
    상기 채널 액세스 프로토콜은 시분할 다중 액세스 프로토콜(time division multiple access protocol)인
    장치.
  20. 제 17 항에 있어서,
    상기 채널 액세스 프로토콜은 캐리어 감지 다중 액세스 프로토콜(carrier sense multiple access protocol)인
    장치.
  21. 제 16 항 내지 제 20 항 중 어느 한 항에 있어서,
    복수의 그래픽 프로세서 코어를 포함하는 적어도 하나의 3차원(3D) 집적 회로 스택을 더 포함하는
    장치.
  22. 머신에 의해 구현되는 방법으로서,
    복수의 그래픽 프로세서 코어를 포함하는 3차원(3D) 집적 회로 스택의 다중 노드 공유 버스 상의 채널 액세스 상태를 결정하는 단계 - 상기 채널 액세스 상태는 소스 노드로부터 타겟 노드로 전달되는 메시지에 대한 것이며, 복수의 노드 중 적어도 하나의 노드는 상기 복수의 그래픽 프로세서 코어 중 적어도 하나의 프로세서 코어와 연결되고 상기 복수의 노드 중 적어도 하나의 노드는 공유 자원과 연결됨 - 와,
    제 1 데이터 채널을 통해 상기 소스 노드로부터 타겟 노드로 메시지를 전송하는 단계 - 상기 메시지는 제 1 우선권을 갖는 제 1 트래픽 분류를 포함함 - 와,
    제 1 그래픽 프로세서 코어와 연결된 제 1 데이터 버스 커넥터에서 상기 메시지를 수신하는 단계와,
    적어도 상기 소스 노드 및 상기 타겟 노드에 기초하여, 제 1 데이터 채널로부터 제 2 데이터 채널로 상기 메시지를 스위칭하는 단계를 포함하는
    머신 구현 방법.
  23. 제 22 항에 있어서,
    채널 액세스를 결정하는 상기 단계는,
    채널 액세스 프로토콜을 이용하여, 제 3 데이터 채널이 상기 메시지를 전송하는데 이용 가능한지를 결정하는 단계와,
    상기 제 3 데이터 채널을 통한 전송이 차단된 것을 결정한 이후 상기 제 1 데이터 채널을 통해 상기 메시지를 전송하는 단계를 포함하며,
    상기 채널 액세스 프로토콜은 시분할 다중 액세스와 캐리어 감지 다중 액세스 중 하나 이상을 포함하는
    머신 구현 방법.
  24. 제 23 항에 있어서,
    상기 제 1 데이터 채널, 상기 제 2 데이터 채널, 및 상기 제 3 데이터 채널은 가상 데이터 채널인
    머신 구현 방법.
  25. 데이터가 저장된 머신 판독 가능한 매체로서,
    상기 데이터는 적어도 하나의 머신에 의해 수행되는 경우 상기 적어도 하나의 머신으로 하여금, 청구항 제 22 항 내지 제 24 항 중 어느 한 항에서와 같은 방법을 수행하도록 적어도 하나의 집적 회로를 제조하게 하는
    머신 판독 가능한 매체.
KR1020167033417A 2014-06-30 2015-05-13 확장 가능한 gpu에서 데이터 분배 패브릭 KR101913357B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/320,478 US9330433B2 (en) 2014-06-30 2014-06-30 Data distribution fabric in scalable GPUs
US14/320,478 2014-06-30
PCT/US2015/030513 WO2016003544A1 (en) 2014-06-30 2015-05-13 Data distribution fabric in scalable gpus

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020187030767A Division KR102218332B1 (ko) 2014-06-30 2015-05-13 확장 가능한 gpu에서 데이터 분배 패브릭

Publications (2)

Publication Number Publication Date
KR20170005032A true KR20170005032A (ko) 2017-01-11
KR101913357B1 KR101913357B1 (ko) 2018-10-30

Family

ID=54931081

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020167033417A KR101913357B1 (ko) 2014-06-30 2015-05-13 확장 가능한 gpu에서 데이터 분배 패브릭
KR1020187030767A KR102218332B1 (ko) 2014-06-30 2015-05-13 확장 가능한 gpu에서 데이터 분배 패브릭

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020187030767A KR102218332B1 (ko) 2014-06-30 2015-05-13 확장 가능한 gpu에서 데이터 분배 패브릭

Country Status (8)

Country Link
US (4) US9330433B2 (ko)
EP (3) EP4283950A3 (ko)
JP (2) JP6553648B2 (ko)
KR (2) KR101913357B1 (ko)
CN (2) CN110415158B (ko)
BR (2) BR112016028116B1 (ko)
SG (2) SG10201906287SA (ko)
WO (1) WO2016003544A1 (ko)

Families Citing this family (60)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10817043B2 (en) * 2011-07-26 2020-10-27 Nvidia Corporation System and method for entering and exiting sleep mode in a graphics subsystem
US10630751B2 (en) * 2016-12-30 2020-04-21 Google Llc Sequence dependent data message consolidation in a voice activated computer network environment
US10956485B2 (en) 2011-08-31 2021-03-23 Google Llc Retargeting in a search environment
WO2013100783A1 (en) 2011-12-29 2013-07-04 Intel Corporation Method and system for control signalling in a data path module
US10331583B2 (en) 2013-09-26 2019-06-25 Intel Corporation Executing distributed memory operations using processing elements connected by distributed channels
US9703757B2 (en) 2013-09-30 2017-07-11 Google Inc. Automatically determining a size for a content item for a web page
US10431209B2 (en) 2016-12-30 2019-10-01 Google Llc Feedback controller for data transmissions
US10614153B2 (en) 2013-09-30 2020-04-07 Google Llc Resource size-based content item selection
US9330433B2 (en) 2014-06-30 2016-05-03 Intel Corporation Data distribution fabric in scalable GPUs
US10039046B2 (en) * 2014-07-21 2018-07-31 Cisco Technology, Inc. Traffic class capacity allocation in computer networks
US9720827B2 (en) * 2014-11-14 2017-08-01 Intel Corporation Providing multiple memory modes for a processor including internal memory
EP3065051A1 (en) * 2015-03-05 2016-09-07 Ingo Josopait Flow control for language-embedded programming in general-purpose computing on graphics processing units
US11165717B2 (en) 2015-10-26 2021-11-02 Western Digital Technologies, Inc. Fabric interconnection for memory banks based on network-on-chip methodology
US10606779B2 (en) 2016-09-16 2020-03-31 Altera Corporation Methods and apparatus for performing partial reconfiguration in a pipeline-based network topology
US10572376B2 (en) 2016-12-30 2020-02-25 Intel Corporation Memory ordering in acceleration hardware
US10558575B2 (en) 2016-12-30 2020-02-11 Intel Corporation Processors, methods, and systems with a configurable spatial accelerator
US10699189B2 (en) 2017-02-23 2020-06-30 Cerebras Systems Inc. Accelerated deep learning
US11488004B2 (en) 2017-04-17 2022-11-01 Cerebras Systems Inc. Neuron smearing for accelerated deep learning
WO2018193370A1 (en) 2017-04-17 2018-10-25 Cerebras Systems Inc. Task activating for accelerated deep learning
US10614357B2 (en) 2017-04-17 2020-04-07 Cerebras Systems Inc. Dataflow triggered tasks for accelerated deep learning
US11003616B1 (en) * 2017-06-27 2021-05-11 Amazon Technologies, Inc Data transfer using point-to-point interconnect
US11086816B2 (en) 2017-09-28 2021-08-10 Intel Corporation Processors, methods, and systems for debugging a configurable spatial accelerator
US20190101952A1 (en) * 2017-09-30 2019-04-04 Intel Corporation Processors and methods for configurable clock gating in a spatial array
US10565134B2 (en) 2017-12-30 2020-02-18 Intel Corporation Apparatus, methods, and systems for multicast in a configurable spatial accelerator
US11709624B2 (en) 2018-02-15 2023-07-25 Xilinx, Inc. System-on-chip having multiple circuits and memory controller in separate and independent power domains
CN110297779A (zh) * 2018-03-23 2019-10-01 余晓鹏 一种内存难解性算法的解决方法
US11307873B2 (en) 2018-04-03 2022-04-19 Intel Corporation Apparatus, methods, and systems for unstructured data flow in a configurable spatial accelerator with predicate propagation and merging
US10990552B1 (en) * 2018-04-03 2021-04-27 Xilinx, Inc. Streaming interconnect architecture for data processing engine array
US10564980B2 (en) 2018-04-03 2020-02-18 Intel Corporation Apparatus, methods, and systems for conditional queues in a configurable spatial accelerator
US11513840B2 (en) * 2018-05-07 2022-11-29 Micron Technology, Inc. Thread creation on local or remote compute elements by a multi-threaded, self-scheduling processor
CN110609744B (zh) * 2018-06-15 2023-06-09 伊姆西Ip控股有限责任公司 处理计算任务的方法、设备和计算机程序产品
US11200186B2 (en) 2018-06-30 2021-12-14 Intel Corporation Apparatuses, methods, and systems for operations in a configurable spatial accelerator
US10891240B2 (en) 2018-06-30 2021-01-12 Intel Corporation Apparatus, methods, and systems for low latency communication in a configurable spatial accelerator
CN109033001B (zh) * 2018-07-17 2021-08-27 北京百度网讯科技有限公司 用于分配gpu的方法和装置
US10846138B2 (en) 2018-08-23 2020-11-24 Hewlett Packard Enterprise Development Lp Allocating resources of a memory fabric
WO2020044152A1 (en) 2018-08-28 2020-03-05 Cerebras Systems Inc. Scaled compute fabric for accelerated deep learning
WO2020044208A1 (en) 2018-08-29 2020-03-05 Cerebras Systems Inc. Isa enhancements for accelerated deep learning
US11328208B2 (en) 2018-08-29 2022-05-10 Cerebras Systems Inc. Processor element redundancy for accelerated deep learning
US10713748B2 (en) 2018-09-05 2020-07-14 Apple Inc. Display pipeline memory bandwidth allocation systems and methods
US10726516B2 (en) 2018-10-11 2020-07-28 Futurewei Technologies, Inc. Arithmetic logic unit (ALU)-centric operations in graphics processing units (GPUs)
CN109643301B (zh) * 2018-10-30 2023-06-30 北京比特大陆科技有限公司 多核芯片数据总线布线结构和数据发送的方法
US11288194B2 (en) 2018-12-12 2022-03-29 International Business Machines Corporation Global virtual address space consistency model
US11561844B2 (en) 2018-12-12 2023-01-24 International Business Machines Corporation Disaggregated system domain
US10678724B1 (en) 2018-12-29 2020-06-09 Intel Corporation Apparatuses, methods, and systems for in-network storage in a configurable spatial accelerator
US11074666B2 (en) * 2019-01-30 2021-07-27 Sony Interactive Entertainment LLC Scalable game console CPU/GPU design for home console and cloud gaming
US10848440B2 (en) * 2019-03-20 2020-11-24 Alibaba Group Holding Limited Systems and methods for allocating bandwidth across a cluster of accelerators
US10965536B2 (en) 2019-03-30 2021-03-30 Intel Corporation Methods and apparatus to insert buffers in a dataflow graph
US10817291B2 (en) 2019-03-30 2020-10-27 Intel Corporation Apparatuses, methods, and systems for swizzle operations in a configurable spatial accelerator
US11029927B2 (en) 2019-03-30 2021-06-08 Intel Corporation Methods and apparatus to detect and annotate backedges in a dataflow graph
US10915471B2 (en) 2019-03-30 2021-02-09 Intel Corporation Apparatuses, methods, and systems for memory interface circuit allocation in a configurable spatial accelerator
WO2020210390A1 (en) * 2019-04-09 2020-10-15 Sunrise Memory Corporation Quasi-volatile memory device with a back-channel usage
US11037050B2 (en) 2019-06-29 2021-06-15 Intel Corporation Apparatuses, methods, and systems for memory interface circuit arbitration in a configurable spatial accelerator
FR3099262B1 (fr) * 2019-07-23 2023-10-20 Zodiac Aero Electric Système de traitement graphique de données
KR20210041233A (ko) * 2019-10-07 2021-04-15 에스케이하이닉스 주식회사 메모리 시스템, 메모리 컨트롤러 및 동작 방법
US11263044B2 (en) 2019-11-22 2022-03-01 Advanced Micro Devices, Inc. Workload-based clock adjustment at a processing unit
PH12019050292A1 (en) 2019-12-22 2021-11-08 Samsung Electronics Ltd Method for scaling gpu in the cloud
US11907713B2 (en) 2019-12-28 2024-02-20 Intel Corporation Apparatuses, methods, and systems for fused operations using sign modification in a processing element of a configurable spatial accelerator
US11847489B2 (en) * 2021-01-26 2023-12-19 Apple Inc. United states graphics processor techniques with split between workload distribution control data on shared control bus and corresponding graphics data on memory interfaces
US11941742B2 (en) 2022-06-23 2024-03-26 Apple Inc. Tiled processor communication fabric
CN117176674B (zh) * 2023-11-02 2024-02-02 上海芯高峰微电子有限公司 片上网络及数据传输方法、芯片、设备

Family Cites Families (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6578068B1 (en) * 1999-08-31 2003-06-10 Accenture Llp Load balancer in environment services patterns
US7538772B1 (en) * 2000-08-23 2009-05-26 Nintendo Co., Ltd. Graphics processing system with enhanced memory controller
DE60237433D1 (de) * 2001-02-24 2010-10-07 Ibm Neuartiger massivparalleler supercomputer
US7114043B2 (en) * 2002-05-15 2006-09-26 Broadcom Corporation Ambiguous virtual channels
US7402509B2 (en) * 2005-03-16 2008-07-22 Intel Corporation Method of forming self-passivating interconnects and resulting devices
US20070150895A1 (en) * 2005-12-06 2007-06-28 Kurland Aaron S Methods and apparatus for multi-core processing with dedicated thread management
JP4254779B2 (ja) * 2005-12-07 2009-04-15 トヨタ自動車株式会社 車両異常通知システム及び装置並びに車載装置
US9367493B2 (en) 2005-12-09 2016-06-14 Globalfoundries Inc. Method and system of communicating between peer processors in SoC environment
JP2008251666A (ja) 2007-03-29 2008-10-16 Tohoku Univ 三次元構造半導体装置
US9035959B2 (en) 2008-03-28 2015-05-19 Intel Corporation Technique to share information among different cache coherency domains
US8321614B2 (en) * 2009-04-24 2012-11-27 Empire Technology Development Llc Dynamic scheduling interrupt controller for multiprocessors
JP5559507B2 (ja) * 2009-10-09 2014-07-23 ピーエスフォー ルクスコ エスエイアールエル 半導体装置及びこれを備える情報処理システム
US8766988B2 (en) * 2009-10-09 2014-07-01 Nvidia Corporation Providing pipeline state through constant buffers
JP5626753B2 (ja) 2009-11-30 2014-11-19 独立行政法人産業技術総合研究所 Lsiチップ積層システム
US9367462B2 (en) * 2009-12-29 2016-06-14 Empire Technology Development Llc Shared memories for energy efficient multi-core processors
US9274793B2 (en) * 2011-03-25 2016-03-01 Soft Machines, Inc. Memory fragments for supporting code block execution by using virtual cores instantiated by partitionable engines
US9432298B1 (en) * 2011-12-09 2016-08-30 P4tents1, LLC System, method, and computer program product for improving memory systems
US9753858B2 (en) * 2011-11-30 2017-09-05 Advanced Micro Devices, Inc. DRAM cache with tags and data jointly stored in physical rows
US20130141442A1 (en) * 2011-12-06 2013-06-06 John W. Brothers Method and apparatus for multi-chip processing
US9047243B2 (en) * 2011-12-14 2015-06-02 Ip Reservoir, Llc Method and apparatus for low latency data distribution
US9860188B2 (en) * 2011-12-22 2018-01-02 International Business Machines Corporation Flexible and scalable enhanced transmission selection method for network fabrics
WO2013186694A2 (en) 2012-06-11 2013-12-19 Stefanos Kaxiras System and method for data classification and efficient virtual cache coherence without reverse translation
JP6308738B2 (ja) 2012-10-25 2018-04-11 セイコーインスツル株式会社 ウォッチ、表示制御方法およびプログラム
US9269120B2 (en) 2012-11-06 2016-02-23 Intel Corporation Dynamically rebalancing graphics processor resources
US8693490B1 (en) 2012-12-20 2014-04-08 Unbound Networks, Inc. Parallel processing using multi-core processor
US9065722B2 (en) * 2012-12-23 2015-06-23 Advanced Micro Devices, Inc. Die-stacked device with partitioned multi-hop network
JP5677489B2 (ja) 2013-03-07 2015-02-25 株式会社日立製作所 半導体装置
US9330433B2 (en) 2014-06-30 2016-05-03 Intel Corporation Data distribution fabric in scalable GPUs

Also Published As

Publication number Publication date
US10346946B2 (en) 2019-07-09
BR112016028116A2 (ko) 2017-08-22
US20160284046A1 (en) 2016-09-29
US9330433B2 (en) 2016-05-03
US20190272615A1 (en) 2019-09-05
KR101913357B1 (ko) 2018-10-30
SG10201906287SA (en) 2019-08-27
CN106462939A (zh) 2017-02-22
JP2019207707A (ja) 2019-12-05
WO2016003544A1 (en) 2016-01-07
JP2017517810A (ja) 2017-06-29
CN106462939B (zh) 2020-03-13
EP4283950A2 (en) 2023-11-29
EP3161783B1 (en) 2020-09-30
US20190012762A1 (en) 2019-01-10
EP3576044A1 (en) 2019-12-04
BR112016028116A8 (pt) 2023-02-14
US20150379670A1 (en) 2015-12-31
EP3161783A1 (en) 2017-05-03
JP6553648B2 (ja) 2019-07-31
CN110415158A (zh) 2019-11-05
JP7000643B2 (ja) 2022-01-19
BR112016028116B1 (pt) 2023-04-11
KR102218332B1 (ko) 2021-02-19
US10580109B2 (en) 2020-03-03
CN110415158B (zh) 2023-05-30
SG11201610016QA (en) 2016-12-29
EP4283950A3 (en) 2024-03-06
BR122019013525A8 (pt) 2022-09-13
EP3161783A4 (en) 2018-03-07
BR122019013525A2 (ko) 2017-08-22
EP3576044B1 (en) 2023-11-15
US10102604B2 (en) 2018-10-16
KR20180129856A (ko) 2018-12-05

Similar Documents

Publication Publication Date Title
KR101913357B1 (ko) 확장 가능한 gpu에서 데이터 분배 패브릭
US10521874B2 (en) Method and apparatus for a highly efficient graphics processing unit (GPU) execution model
CN108369733B (zh) 使用三角形的属性的加权平均来合并粗像素着色的片段
CN106575430B (zh) 用于像素哈希的方法和装置
US20180329762A1 (en) Event-driven framework for gpu programming
TWI715581B (zh) 用於虛擬機之間的效率通訊之裝置與方法
US20170300361A1 (en) Employing out of order queues for better gpu utilization
KR20190027367A (ko) 멀티 코어 컴퓨팅 아키텍처에서 그래픽 작업부하를 가속화하기 위한 메커니즘
US9886934B2 (en) Ordering mechanism for offload graphics scheduling
KR20170033868A (ko) 지연형 코어스 픽셀 셰이딩
KR20170095815A (ko) 포지션 온리 파이프라인에서의 완화된 소팅
US10546362B2 (en) Method and apparatus for adaptive pixel hashing for graphics processors
CN109564676B (zh) 管芯上曲面细分分配
US9952901B2 (en) Power efficient hybrid scoreboard method

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant