KR20190027367A - 멀티 코어 컴퓨팅 아키텍처에서 그래픽 작업부하를 가속화하기 위한 메커니즘 - Google Patents

멀티 코어 컴퓨팅 아키텍처에서 그래픽 작업부하를 가속화하기 위한 메커니즘 Download PDF

Info

Publication number
KR20190027367A
KR20190027367A KR1020197000374A KR20197000374A KR20190027367A KR 20190027367 A KR20190027367 A KR 20190027367A KR 1020197000374 A KR1020197000374 A KR 1020197000374A KR 20197000374 A KR20197000374 A KR 20197000374A KR 20190027367 A KR20190027367 A KR 20190027367A
Authority
KR
South Korea
Prior art keywords
fpga
processing core
processing
graphics
core
Prior art date
Application number
KR1020197000374A
Other languages
English (en)
Other versions
KR102572583B1 (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 KR20190027367A publication Critical patent/KR20190027367A/ko
Application granted granted Critical
Publication of KR102572583B1 publication Critical patent/KR102572583B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • 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
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1605Handling requests for interconnection or transfer for access to memory bus based on arbitration
    • G06F13/1652Handling requests for interconnection or transfer for access to memory bus based on arbitration in a multiprocessor architecture
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1605Handling requests for interconnection or transfer for access to memory bus based on arbitration
    • G06F13/1652Handling requests for interconnection or transfer for access to memory bus based on arbitration in a multiprocessor architecture
    • G06F13/1657Access to multiple memories
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/505Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the load
    • 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
    • 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
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Image Generation (AREA)
  • Medicines Containing Antibodies Or Antigens For Use As Internal Diagnostic Agents (AREA)
  • Medicines That Contain Protein Lipid Enzymes And Other Medicines (AREA)
  • Mobile Radio Communication Systems (AREA)

Abstract

처리 장치가 개시된다. 이 장치는 제1 처리 코어 및 제2 처리 코어를 포함하는 복수의 처리 코어와, 제1 처리 코어에 결합되어 제1 처리 코어에서 처리되는 작업부하의 실행을 가속화시키는 제1 필드 프로그램가능 게이트 어레이(FPGA)와, 제2 처리 코어에 결합되어 제2 처리 코어에서 처리되는 작업부하의 실행을 가속화시키는 제2 FPGA를 포함한다.

Description

멀티 코어 컴퓨팅 아키텍처에서 그래픽 작업부하를 가속화하기 위한 메커니즘
본 명세서에서 설명된 실시예는 일반적으로 컴퓨터에 관한 것이다. 특히, 컴퓨팅 장치에서 그래픽 작업부하(graphics workloads)의 실행을 가속화하기 위한 실시예가 설명된다.
그래픽 처리는 이미지 렌더링을 위한 신속한 수학적 계산의 수행을 포함한다. 이러한 그래픽 작업부하는 디스플레이로 출력되도록 의도된 이미지가 프레임 버퍼에서 생성되는 것을 가속화하도록 메모리를 신속하게 조작하고 변경하기 위해, 범용 마이크로프로세서 또는 특수 전자 회로인 그래픽 처리 장치(GPU)에서 수행될 수 있다. 성능이 중요한 운영 체제(OS) 커널을 실행하기 위해 그래픽 작업부하를 가속화해야 하는 경우가 종종 있다.
다양한 가속 기법(예를 들어, 소프트웨어 및 고정 기능 유닛)이 현재 마이크로프로세서 및 GPU에서 구현된다. 그러나, 이러한 기법에는 한계 및/또는 단점이 있다. 이들 기법의 개선은 처리 코어 리소스를 자유롭게 하기 위해 성능이 중요한 루프의 실행을 가속화하도록 FPGA(field-programmable gate array)를 구현하는 것을 특징으로 한다. 이러한 구현이 개선인 이유는 FPGA가 루프 실행에서 더 많은 성능 및 전력 효율을 갖기 때문이다(예를 들어, FPGA는 코어의 데이터 액세스, 명령어 세트 아키텍처(ISA) 및 마이크로아키텍처 제한에 국한되지 않기 때문이다). 이 디자인에서, 단일 FPGA가 모든 마이크로프로세서 또는 GPU 코어에 의해 공유된다. 그러나, 단일 FPGA는 동기화를 위해 액세스를 필요로 하는 상이한 코어들을 서비스해야 하는 경쟁 리소스이기 때문에, 공유 디자인에는 성능상의 결핍이 계속 있게 된다.
실시예들은 유사한 참조번호가 유사한 요소를 지칭하는 첨부된 도면에서, 제한이 아닌 예로서 도시된다.
도 1은 실시예에 따른 처리 시스템의 블록도이다.
도 2는 하나 이상의 프로세서 코어, 통합 메모리 제어기 및 통합 그래픽 프로세서를 갖는 프로세서의 실시예의 블록도이다.
도 3은 개별 그래픽 처리 장치일 수 있거나, 복수의 처리 코어와 통합된 그래픽 프로세서일 수 있는 그래픽 프로세서의 블록도이다.
도 4는 일부 실시예에 따른 그래픽 프로세서의 그래픽 처리 엔진의 블록도이다.
도 5는 그래픽 프로세서의 다른 실시예의 블록도이다.
도 6은 그래픽 처리 엔진의 일부 실시예에서 채용된 처리 요소의 어레이를 포함하는 스레드 실행 로직을 도시한다.
도 7은 일부 실시예에 따른 그래픽 프로세서 명령어 포맷을 나타내는 블록도이다.
도 8은 그래픽 프로세서의 다른 실시예의 블록도이다.
도 9a는 실시예에 따른 그래픽 프로세서 커맨드 포맷을 나타내는 블록도이고, 도 9b는 실시예에 따른 그래픽 프로세서 커맨드 시퀀스를 도시하는 블록도이다.
도 10은 일부 실시예에 따른 데이터 처리 시스템을 위한 예시적인 그래픽 소프트웨어 아키텍처를 도시한다.
도 11은 실시예에 따른 동작들을 수행하기 위한 집적 회로를 제조하는데 사용될 수 있는 IP 코어 개발 시스템을 나타내는 블록도이다.
도 12는 실시예에 따라, 하나 이상의 IP 코어를 사용하여 제조될 수 있는 예시적인 시스템 온 칩 집적 회로를 나타내는 블록도이다.
도 13은 실시예에 따라, 하나 이상의 IP 코어를 사용하여 제조될 수 있는 시스템 온 칩 집적 회로의 예시적인 그래픽 프로세서를 나타내는 블록도이다.
도 14는 실시예에 따라, 하나 이상의 IP 코어를 사용하여 제조될 수 있는 시스템 온 칩 집적 회로의 추가적인 예시적인 그래픽 프로세서를 나타내는 블록도이다.
도 15는 컴퓨팅 장치의 일 실시예를 도시한다.
도 16a 및 도 16b는 로컬 FPGA를 갖는 그래픽 처리 코어의 실시예를 도시한다.
도 17a 및 도 17b는 로컬 FPGA를 갖는 그래픽 처리 코어의 실시예를 도시한다.
이하의 설명에서, 다수의 특정 세부 사항이 설명된다. 그러나, 본 명세서에 기재된 실시예들은 이들 특정 세부 사항 없이도 실시될 수 있다. 다른 예에서, 잘 알려진 회로, 구조 및 기법은 본 설명의 이해를 모호하게 하지 않게 하기 위해 상세하게 도시되지 않았다.
실시예들은 범용 마이크로프로세서 및/또는 GPU에 포함된 각각의 처리 코어에 결합되어 성능이 중요한 루프의 실행을 가속화하고 프로세서 코어의 리소스를 자유롭게 하는 FPGA를 제공한다. 이러한 실시예에서, 각각의 코어는 코어가 가속화할 작업부하 커널을 선택할 수 있게 해주는 소형 FPGA를 포함할 수 있다. 따라서, 프로세서 코어 당 FPGA를 사용하게 되면, 작업부하의 수명 동안 FPGA 프로그램/구현을 효율적으로 교환하기 위해 FPGA를 신속하게 재프로그래밍할 수 있다. 다른 실시예에서, 하나 이상의 FPGA의 세트가 상이한 태스크를 동시에 처리하도록 할당되어, 하나 이상의 FPGA가 상이한 커널을 실행하도록 프로그래밍될 수 있게 한다.
"요청", "질의", "업무", "작업", "작업 항목" 및 "작업부하"와 같은 용어는이 문서에서 서로 바꿔서 언급될 수 있다는 것을 알아야 한다. 유사하게, "애플리케이션" 또는 "에이전트"는 OpenGL®(Open Graphics Library), DirectX® 11, DirectX® 12 등과 같은 무료 렌더링 API와 같은 API를 통해 제공되는 컴퓨터 프로그램, 소프트웨어 애플리케이션, 게임, 워크스테이션 애플리케이션 등을 지칭하거나 이를 포함할 수 있는데, 여기에서 "디스패치(dispatch)"는 "작업 유닛" 또는 "드로우(draw)"로 서로 바꿔서 언급될 수 있고, 유사하게 "애플리케이션"은 "작업흐름" 또는 단순히 "에이전트"로 서로 바꿔서 언급될 수 있다. 예를 들어, 3D 게임의 작업부하와 같은 작업부하는 각 프레임이 이미지(예를 들어, 범선, 사람 얼굴)를 나타낼 수 있는 "프레임"의 수와 타입을 포함하고 발행할 수 있다. 또한, 각 프레임은 임의의 수 및 타입의 작업 유닛을 포함 및 제공할 수 있는데, 각 작업 유닛은 그의 대응 프레임으로 표현되는 이미지(예를 들어, 범선, 사람 얼굴)의 일부(예를 들어, 범선의 돛대, 사람 얼굴의 이마)를 나타낼 수 있다. 그러나, 일관성을 위해, 각각의 항목은 본 문서 전반에 걸쳐 단일 용어(예를 들어, "디스패치", "에이전트" 등)로 지칭될 수 있다.
일부 실시예에서, 디스플레이 장치의 가시적인 부분을 지칭하는 "디스플레이 스크린" 및 "디스플레이 표면"과 같은 용어는 서로 바꿔어 사용될 수 있는 한편, 디스플레이 장치의 나머지는 스마트폰, 웨어러블 장치 등과 같은 컴퓨팅 장치 내에 내장될 수 있다. 실시예는 임의의 특정 컴퓨팅 장치, 소프트웨어 애플리케이션, 하드웨어 컴포넌트, 디스플레이 장치, 디스플레이 스크린 또는 표면, 프로토콜, 표준 등에 국한되지 않는다는 것을 알아야 한다. 예를 들어, 실시예는 데스크톱, 랩탑, 태블릿 컴퓨터, 스마트폰, 헤드 마운티드 디스플레이 및 기타 웨어러블 장치 등과 같은 임의의 수 및 타입의 컴퓨터상에서 임의의 수 및 타입의 실시간 애플리케이션에 적용되어 그와 함께 사용될 수 있다. 또한, 예를 들어, 이 새로운 기법을 사용하는 효율적인 성능을 위한 렌더링 시나리오는 데스크탑 합성과 같은 간단한 시나리오에서부터 3D 게임, 증강 현실 애플리케이션 등과 같은 복잡한 시나리오에 이르기까지 다양할 수 있다.
시스템 개요
도 1은 일 실시예에 따른 처리 시스템(100)의 블록도이다. 다양한 실시예에서, 시스템(100)은 하나 이상의 프로세서(102) 및 하나 이상의 그래픽 프로세서(108)를 포함하며, 단일 프로세서 데스크탑 시스템, 멀티프로세서 워크스테이션 시스템, 또는 다수의 프로세서(102) 또는 프로세서 코어(107)를 갖는 서버 시스템 일 수 있다. 일 실시예에서, 시스템(100)은 모바일, 핸드헬드, 또는 임베디드 장치에 사용하기 위해 시스템-온-칩(SoC) 집적 회로 내에 통합된 처리 플랫폼이다.
시스템(100)의 실시예는 서버 기반 게이밍 플랫폼, 게임 및 미디어 콘솔을 포함하는 게임 콘솔, 모바일 게임 콘솔, 핸드헬드 게임 콘솔 또는 온라인 게임 콘솔을 포함할 수 있거나 이에 통합될 수 있다. 일부 실시예에서, 시스템(100)은 모바일 전화, 스마트폰, 태블릿 컴퓨팅 장치 또는 모바일 인터넷 장치이다. 데이터 처리 시스템(100)은 또한 스마트 워치 웨어러블 장치, 스마트 아이웨어 장치, 증강 현실 장치 또는 가상 현실 장치와 같은 웨어러블 장치를 포함되거나, 그와 결합되거나, 또는 그 안에 통합될 수 있다. 일부 실시예에서, 데이터 처리 시스템(100)은 하나 이상의 프로세서(102) 및 하나 이상의 그래픽 프로세서(108)에 의해 생성된 그래픽 인터페이스를 갖는 텔레비전 또는 셋톱 박스 장치이다.
일부 실시예에서, 하나 이상의 프로세서(102) 각각은 실행되는 경우 시스템 및 사용자 소프트웨어에 대한 동작을 수행하는 명령어를 처리하는 하나 이상의 프로세서 코어(107)를 포함한다. 일부 실시예에서, 하나 이상의 프로세서 코어(107) 각각은 특정 명령어 세트(109)를 처리하도록 구성된다. 일부 실시예에서, 명령어 세트(109)는 CISC(Complex Instruction Set Computing), RISC(Reduced Instruction Set Computing) 또는 VLIW(Very Long Instruction Word)를 통한 컴퓨팅을 용이하게 할 수 있다. 다중 프로세서 코어(107) 각각은 다른 명령어 세트의 에뮬레이션을 용이하게 하는 명령어를 포함할 수 있는 다른 명령어 세트(109)를 처리할 수 있다. 프로세서 코어(107)는 또한 DSP(Digital Signal Processor)와 같은 다른 처리 장치를 포함할 수 있다.
일부 실시예에서, 프로세서(102)는 캐시 메모리(104)를 포함한다. 아키텍처에 따라, 프로세서(102)는 단일 내부 캐시 또는 다중 레벨의 내부 캐시를 가질 수있다. 일부 실시예에서, 캐시 메모리는 프로세서(102)의 다양한 컴포넌트들 사이에서 공유된다. 일부 실시예에서, 프로세서(102)는 공지된 캐시 일관성 기법을 사용하여 프로세서 코어(107) 간에 공유될 수 있는 외부 캐시(예를 들어, 레벨 3(L3) 캐시 또는 최종 레벨 캐시(LLC))(미도시됨)를 또한 사용한다. 상이한 타입의 데이터를 저장하는 상이한 타입의 레지스터(예를 들어, 정수 레지스터, 부동 소수점 레지스터, 상태 레지스터 및 명령어 포인터 레지스터)를 포함할 수 있는 레지스터 파일(106)이 프로세서(102)에 추가로 포함된다. 일부 레지스터는 범용 레지스터 일 수 있는 반면, 다른 레지스터는 프로세서(102)의 설계에 특정될 수 있다.
일부 실시예에서, 프로세서(102)는 프로세서 버스(110)에 결합되어 프로세서(102)와 시스템(100)의 다른 컴포넌트 간에 어드레스, 데이터 또는 제어 신호와 같은 통신 신호를 송신한다. 일 실시예에서, 시스템(100)은 메모리 제어기 허브(116) 및 입력 출력(I/O) 제어기 허브(130)를 포함하는 예시적인 '허브' 시스템 아키텍처를 사용한다. 메모리 제어기 허브(116)는 메모리 장치와 시스템(100)의 다른 컴포넌트 간의 통신을 용이하게 하는 한편, I/O 제어기 허브(ICH)(130)는 로컬 I/O 버스를 통해 I/O 장치로의 연결을 제공한다. 일 실시예에서, 메모리 제어기 허브(116)의 로직은 프로세서 내에 통합된다.
메모리 장치(120)는 동적 랜덤 액세스 메모리(DRAM) 장치, 정적 랜덤 액세스 메모리(SRAM) 장치, 플래시 메모리 장치, 상 변화 메모리 장치, 또는 프로세스 메모리로서 기능하기에 적합한 성능을 갖는 일부 다른 메모리 장치일 수 있다. 일 실시예에서, 메모리 장치(120)는 하나 이상의 프로세서(102)가 애플리케이션 또는 프로세스를 실행할 때 사용하기 위한 데이터(122) 및 명령어(121)를 저장하기 위한 시스템(100)에 대한 시스템 메모리로서 동작할 수 있다. 메모리 제어기 허브(116)는 또한 그래픽 및 미디어 동작을 수행하기 위해 프로세서(102) 내의 하나 이상의 그래픽 프로세서(108)와 통신할 수 있는 선택적인 외부 그래픽 프로세서(112)에 결합된다.
일부 실시예에서, ICH(130)는 주변 장치가 고속 I/O 버스를 통해 메모리 장치(120) 및 프로세서(102)에 연결될 수 있게 한다. I/O 주변 장치는 오디오 제어기(146), 펌웨어 인터페이스(128), 무선 송수신기(126)(예를 들어, 와이파이, 블루투스), 데이터 저장 장치(124)(예컨대, 하드 디스크 드라이브, 플래시 메모리 등), 및 레거시(예를 들어, 퍼스널 시스템 2(PS/2)) 장치를 시스템에 연결하기 위한 레거시 I/O 제어기(140)를 포함하나 이에 국한되지 않는다. 하나 이상의 범용 직렬 버스(USB) 제어기(142)는 키보드 및 마우스(144) 조합과 같은 입력 장치들을 연결한다. 네트워크 제어기(134)는 또한 ICH(130)에 연결될 수 있다. 일부 실시예에서, 고성능 네트워크 제어기(미도시)는 프로세서 버스(110)에 연결된다. 도시된 시스템(100)은 다르게 구성된 다른 타입의 데이터 처리 시스템이 또한 사용될 수 있으므로, 예시적인 것이며 따라서 제한적이지 않은 것으로 이해될 것이다. 예를 들어, I/O 제어기 허브(130)는 하나 이상의 프로세서(102) 내에 통합될 수 있거나, 메모리 제어기 허브(116) 및 I/O 제어기 허브(130)는 외부 그래픽 프로세서(112)와 같은 별개의 외부 그래픽 프로세서 내에 통합될 수 있다.
도 2는 하나 이상의 프로세서 코어(202A-202N), 집적 메모리 제어기(214), 및 통합 그래픽 프로세서(208)를 갖는 프로세서(200)의 실시예의 블록도이다. 본 명세서에서 임의의 다른 도면의 구성요소와 동일한 참조번호(또는 명칭)를 갖는 도 2의 구성요소는 본 명세서의 다른 곳에서 기술된 것과 유사한 임의의 방식으로 동작하거나 기능할 수 있지만, 이에 한정되는 것은 아니다. 프로세서(200)는 점선으로 표시된 박스로 표현된 추가의 코어(202N)까지의 추가 코어를 포함할 수 있다. 프로세서 코어(202A-202N) 각각은 하나 이상의 내부 캐시 유닛(204A-204N)을 포함한다. 일부 실시예에서, 각각의 프로세서 코어는 또한 하나 이상의 공유 캐시 유닛(206)에 대한 액세스를 갖는다.
내부 캐시 유닛(204A-204N) 및 공유 캐시 유닛(206)은 프로세서(200) 내의 캐시 메모리 계층구조를 나타낸다. 캐시 메모리 계층구조는 각 프로세서 코어 내에 적어도 하나의 레벨의 명령어 및 데이터 캐시와, 레벨 2(L2), 레벨 3(L3), 레벨 4(L4) 또는 다른 레벨의 캐시와 같은 하나 이상의 레벨의 공유 중간 레벨 캐시를 포함할 수 있는데, 외부 메모리 이전의 최상위 레벨의 캐시는 LLC로 분류된다. 일부 실시예에서, 캐시 일관성 로직은 다양한 캐시 유닛(206 및 204A-204N) 사이의 일관성을 유지한다.
일부 실시예에서, 프로세서(200)는 또한 하나 이상의 버스 제어기 유닛(216) 세트 및 시스템 에이전트 코어(210)를 포함할 수 있다. 하나 이상의 버스 제어기 유닛(216)은 하나 이상의 PCI(Peripheral Component Interconnect) 버스(예를 들어, PCI, PCI 익스프레스)와 같은 주변 버스 세트를 관리한다. 시스템 에이전트 코어(210)는 다양한 프로세서 컴포넌트에 대한 관리 기능을 제공한다. 일부 실시예에서, 시스템 에이전트 코어(210)는 다양한 외부 메모리 장치(도시되지 않음)에 대한 액세스를 관리하기 위한 하나 이상의 통합 메모리 제어기(214)를 포함한다.
일부 실시예에서, 하나 이상의 프로세서 코어(202A-202N)는 동시 멀티 스레딩을 위한 지원을 포함한다. 이러한 실시예에서, 시스템 에이전트 코어(210)는 멀티 스레드 처리 동안 코어(202A-202N)를 조정 및 동작시키기 위한 컴포넌트를 포함한다. 시스템 에이전트 코어(210)는 프로세서 코어(202A-202N) 및 그래픽 프로세서(208)의 전력 상태를 조절하는 로직 및 컴포넌트를 포함하는 전력 제어 유닛(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-202N) 및 그래픽 프로세서(208) 각각은 공유된 최종 레벨 캐시로서 임베디드 메모리 모듈(218)을 사용한다.
일부 실시예에서, 프로세서 코어(202A-202N)는 동일한 명령어 세트 아키텍처를 실행하는 동질 코어이다. 다른 실시예에서, 프로세서 코어(202A-202N)는 명령어 세트 아키텍처(ISA)의 관점에서 이질적이며, 프로세서 코어(202A-N) 중 하나 이상은 제1 명령어 세트를 실행하는 반면, 다른 코어들 중 적어도 하나는 제1 명령어 세트의 서브세트 또는 다른 명령어 세트를 실행한다. 일 실시예에서, 프로세서 코어(202A-202N)는 마이크로아키텍처의 관점에서 이질적인데, 상대적으로 더 높은 전력 소비를 갖는 하나 이상의 코어는 더 낮은 전력 소비를 갖는 하나 이상의 전력 코어와 결합한다. 부가적으로, 프로세서(200)는 하나 이상의 칩 상에 구현되거나 또는 예시된 컴포넌트 및 그 밖의 다른 컴포넌트를 갖는 SoC 집적 회로로서 구현될 수 있다.
도 3은 별도의 그래픽 처리 장치일 수 있거나 복수의 처리 코어와 통합된 그래픽 프로세서일 수 있는 그래픽 프로세서(300)의 블록도이다. 일부 실시예에서, 그래픽 프로세서는 메모리 맵핑된 I/O 인터페이스를 통해 그래픽 프로세서상의 레지스터 및 프로세서 메모리에 배치된 커맨드와 통신한다. 일부 실시예에서, 그래픽 프로세서(300)는 메모리에 액세스하기 위한 메모리 인터페이스(314)를 포함한다. 메모리 인터페이스(314)는 로컬 메모리, 하나 이상의 내부 캐시, 하나 이상의 공유 외부 캐시 및/또는 시스템 메모리에 대한 인터페이스일 수 있다.
일부 실시예에서, 그래픽 프로세서(300)는 디스플레이 출력 데이터를 디스플레이 장치(320)로 구동하는 디스플레이 제어기(302)를 또한 포함한다. 디스플레이 제어기(302)는 여려 계층의 비디오 또는 사용자 인터페이스 요소로 이루어진 구성 및 디스플레이를 위한 하나 이상의 오버레이 평면을 위한 하드웨어를 포함한다. 일부 실시예에서, 그래픽 프로세서(300)는 예를 들어, MPEG(Moving Picture Experts Group)-2와 같은 MPEG 포맷, H.264/MPEG-4 AVC 및 SMPTE(Society of Motion Picture & Television Engineers) 421M/VC-1과 같은 AVC(Advanced Video Coding) 포맷, 및 JPEG(Joint Photographic Experts Group), 및 MJPEG(Motion JPEG) 포맷과 같은 JPEG 포맷을 포함하나 이에 국한되지 않는 하나 이상의 미디어 인코딩 포맷으로 미디어를 인코딩하거나, 그 미디어 인코딩 포맷으로부터 미디어를 디코딩하거나, 그 미디어 인코딩 포맷 간에 트랜스코딩하기 위한 비디오 코덱 엔진(306)을 포함한다.
일부 실시예에서, 그래픽 프로세서(300)는 예를 들어 비트-경계 블록 전송을 포함하는 2차원(2D) 래스터라이저 동작을 수행하기 위한 블록 이미지 전송(BLIT) 엔진(304)을 포함한다. 그러나, 일 실시예에서, 2D 그래픽 동작은 그래픽 처리 엔진(GPE)(310)의 하나 이상의 컴포넌트를 사용하여 수행된다. 일부 실시예에서, 그래픽 처리 엔진(310)은 3차원(3D) 그래픽 동작 및 미디어 동작을 포함한 그래픽 동작을 수행하기 위한 컴퓨팅 엔진이다.
일부 실시예에서, GPE(310)는 3D 프리미티브 형상(예를 들어, 직사각형, 삼각형 등)에 작용하는 처리 기능을 사용하여 3차원 이미지 및 장면을 렌더링하는 것과 같은 3D 동작을 수행하기 위한 3D 파이프라인(312)을 포함한다. 3D 파이프라인(312)은 요소 내에서 다양한 태스크를 수행하고 및/또는 실행 스레드를 3D/미디어 서브시스템(315)에 생성하는 프로그램 가능하고 고정된 기능 요소를 포함한다. 3D 파이프라인(312)이 미디어 동작을 수행하는데 사용될 수 있지만, GPE(310)의 실시예는 특히 비디오 후 처리 및 이미지 향상과 같은 미디어 동작을 수행하기 위해 사용되는 미디어 파이프라인(316)을 또한 포함한다.
일부 실시예에서, 미디어 파이프라인(316)은 비디오 코덱 엔진(306)를 대체하거나 대신하여 비디오 디코딩 가속화, 비디오 디인터레이싱 및 비디오 인코딩 가속화와 같은 하나 이상의 특수 미디어 동작을 수행하는 고정 기능 또는 프로그램가능 로직 유닛을 포함한다 . 일부 실시예에서, 미디어 파이프라인(316)은 3D/미디어 서브시스템(315)상에서 실행할 스레드를 생성하는 스레드 생성 유닛을 추가로 포함한다. 생성된 스레드는 3D/미디어 서브시스템(315)에 포함된 하나 이상의 그래픽 실행 유닛에서 미디어 동작을 위한 계산을 수행한다.
일부 실시예에서, 3D/미디어 서브시스템(315)은 3D 파이프라인(312) 및 미디어 파이프라인(316)에 의해 생성된 스레드를 실행하기 위한 로직을 포함한다. 일 실시예에서, 파이프라인은 스레드 실행 요청을 3D/미디어 서브시스템(315)에 전송하는데, 이 서브시스템(315)은 다양한 요청을 중재하여 이용가능한 스레드 실행 리소스로 디스패칭하기 위한 스레드 디스패치 로직을 포함한다. 실행 리소스는 3D 및 미디어 스레드를 처리하기 위한 그래픽 실행 유닛의 어레이를 포함한다. 일부 실시예에서, 3D/미디어 서브시스템(315)은 스레드 명령어 및 데이터를 위한 하나 이상의 내부 캐시를 포함한다. 일부 실시예에서, 서브시스템은 스레드들 간에 데이터를 공유하고 출력 데이터를 저장하기 위해 레지스터 및 어드레스가능한 메모리를 포함하는 공유 메모리를 또한 포함한다.
3D/미디어 처리
도 4는 일부 실시예에 따른 그래픽 프로세서의 그래픽 처리 엔진(410)의 블록도이다. 일 실시예에서, GPE(410)는 도 3에 도시된 GPE(310)의 일 버전이다. 본 명세서에서 임의의 다른 도면의 구성요소와 동일한 참조번호(또는 명칭)를 갖는 도 4의 구성요소는 본 명세서의 다른 곳에서 기술된 것과 유사한 방식으로 작동하거나 기능할 수 있지만, 이에 한정되는 것은 아니다.
일부 실시예에서, GPE(410)는 커맨드 스트림을 GPE 3D 및 미디어 파이프라인(412,416)에 제공하는 커맨드 스트리머(command streamer)(403)와 결합한다. 일부 실시예에서, 커맨드 스트리머(403)는 시스템 메모리, 또는 내부 캐시 메모리 및 공유 캐시 메모리 중 하나 이상일 수 있는 메모리에 연결된다. 일부 실시예에서, 커맨드 스트리머(403)는 메모리로부터 커맨드를 수신하고 이 커맨드를 3D 파이프라인(412) 및/또는 미디어 파이프라인(416)으로 전송한다. 커맨드는 3D 및 미디어 파이프라인(412,416)에 대한 커맨드를 저장하는 링 버퍼로부터 인출된 지시어(directives)이다. 일 실시예에서, 링 버퍼는 다수의 커맨드의 묶음(batches)을 저장하는 묶음 커맨드 버퍼를 추가로 포함할 수 있다. 3D 및 미디어 파이프라인(412,416)은 각각의 파이프라인 내의 로직을 통해 동작을 수행하거나 또는 하나 이상의 실행 스레드를 실행 유닛 어레이(414)로 디스패칭함으로써 커맨드를 처리한다
일부 실시예에서, 실행 유닛 어레이(414)는 GPE(410)의 목표 전력 및 성능 레벨에 기초하여 가변 개수의 실행 유닛을 포함하도록 그 규모가 조정가능하다.
일부 실시예에서, 샘플링 엔진(430)은 메모리(예를 들어, 캐시 메모리 또는 시스템 메모리) 및 실행 유닛 어레이(414)와 결합한다. 일부 실시예에서, 샘플링 엔진(430)은 실행 유닛 어레이(414)가 메모리로부터 그래픽 및 미디어 데이터를 판독할 수 있게 하는 메모리 액세스 메커니즘을 실행 유닛 어레이(414)에 제공한다. 일부 실시예에서, 샘플링 엔진(430)은 미디어에 대한 특수 이미지 샘플링 동작을 수행하는 로직을 포함한다.
일부 실시예에서, 샘플링 엔진(430)의 특수 미디어 샘플링 로직은 디-노이즈/디-인터레이스 모듈(432), 모션 추정 모듈(434) 및 이미지 스케일링 및 필터링 모듈(436)을 포함한다. 일부 실시예에서, 디-노이즈/디-인터레이스 모듈(432)은 디코딩된 비디오 데이터에 대해 디-노이즈 또는 디-인터레이스 알고리즘 중 하나 이상을 수행하는 로직을 포함한다. 디-인터레이스 로직은 인터레이스된 비디오 컨텐츠의 교번하는 필드를 비디오의 단일 프레임으로 결합한다. 디-노이즈 로직은 비디오 및 이미지 데이터에서 데이터 노이즈를 줄이거나 제거한다. 일부 실시예에서, 디-노이즈 로직 및 디-인터레이스 로직은 모션 적응적이고, 비디오 데이터에서 검출된 모션의 양에 기초하여 공간적 또는 시간적 필터링을 사용한다. 일부 실시예에서, 디-노이즈/디-인터레이스 모듈(432)은 (예를 들어, 모션 추정 엔진(434) 내에) 전용 모션 검출 로직을 포함한다.
일부 실시예에서, 모션 추정 엔진(434)은 비디오 데이터에 대해 모션 벡터 추정 및 예측과 같은 비디오 가속화 기능을 수행함으로써 비디오 동작에 대한 하드웨어 가속화를 제공한다. 모션 추정 엔진은 연속적인 비디오 프레임들 간의 이미지 데이터의 변환을 기술하는 모션 벡터를 결정한다. 일부 실시예에서, 그래픽 프로세서 미디어 코덱은 비디오 모션 추정 엔진(434)을 사용하여 범용 프로세서로 수행하기에는 너무 연산 집약적일 수 있는 매크로 블록 레벨에서 비디오에 대한 연산을 수행한다. 일부 실시예에서, 모션 추정 엔진(434)은 비디오 데이터 내의 모션의 방향 또는 크기에 민감하거나 적응하는 비디오 디코딩 및 처리 기능을 보조하기 위해 그래픽 프로세서 컴포넌트에 일반적으로 이용가능하다.
일부 실시예에서, 이미지 스케일링 및 필터링 모듈(436)은 생성된 이미지 및 비디오의 시각 품질을 향상시키기 위해 이미지 처리 동작을 수행한다. 일부 실시예에서, 스케일링 및 필터링 모듈(436)은 실행 유닛 어레이(414)에 데이터를 제공하기 전에 샘플링 동작 동안 이미지 및 비디오 데이터를 처리한다.
일부 실시예에서, GPE(410)는 메모리에 액세스하기 위한 추가적인 메카니즘을 그래픽 서브시스템에 제공하는 데이터 포트(444)를 포함한다. 일부 실시예에서, 데이터 포트(444)는 렌더링 타겟 기록, 일정한 버퍼 판독, 스크래치 메모리 공간 판독/기록 및 미디어 표면 액세스를 포함하는 동작에 대한 메모리 액세스를 용이하게 한다. 일부 실시예에서, 데이터 포트(444)는 메모리에 대한 액세스를 캐시하기 위한 캐시 메모리 공간을 포함한다. 캐시 메모리는 단일 데이터 캐시일 수 있거나 데이터 포트(예를 들어, 렌더링 버퍼 캐시, 일정한 버퍼 캐시 등)를 통해 메모리에 액세스하는 다수의 서브시스템을 위해 다수의 캐시로 분리될 수 있다. 일부 실시예에서, 실행 유닛 어레이(414) 내의 실행 유닛 상에서 실행되는 스레드는 GPE(410)의 서브시스템 각각을 연결하는 데이터 분배 상호연결부를 통해 메시지를 교환함으로써 데이터 포트와 통신한다.
실행 유닛
도 5는 그래픽 프로세서(500)의 다른 실시예의 블록도이다. 본 명세서에서 임의의 다른 도면의 구성요소와 동일한 참조번호(또는 명칭)를 갖는 도 5의 구성요소는 본 명세서의 다른 곳에서 기술된 것과 유사한 방식으로 작동하거나 기능할 수 있지만, 이에 한정되는 것은 아니다.
일부 실시예에서, 그래픽 프로세서(500)는 링 상호연결부(502), 파이프라인 프론트 엔드(504), 미디어 엔진(537) 및 그래픽 코어(580A-580N)를 포함한다. 일부 실시예에서, 링 상호연결부(502)는 그래픽 프로세서를, 다른 그래픽 프로세서 또는 하나 이상의 범용 프로세서 코어를 포함하는 다른 처리 장치에 연결한다. 일부 실시예에서, 그래픽 프로세서는 멀티 코어 처리 시스템 내에 통합된 다수의 프로세서 중 하나이다.
일부 실시예에서, 그래픽 프로세서(500)는 링 상호연결부(502)를 통해 커맨드의 묶음을 수신한다. 입력 커맨드는 파이프라인 프론트 엔드(504)의 커맨드 스 트리머(503)에 의해 해석된다. 일부 실시예에서, 그래픽 프로세서(500)는 그래픽 코어(580A-580N)를 통해 3D 지오메트리 처리 및 미디어 처리를 수행하기 위한 스케일러블 실행 로직을 포함한다. 3D 지오메트리 처리 커맨드의 경우, 커맨드 스트리머(503)는 지오메트리 파이프라인(536)에 커맨드를 공급한다. 적어도 일부 미디어 처리 커맨드의 경우, 커맨드 스트리머(503)는 미디어 엔진(537)과 결합하는 비디오 프론트 엔드(534)에 커맨드를 공급한다. 일부 실시예에서, 미디어 엔진(537)은 비디오 및 이미지 후 처리를 위한 비디오 품질 엔진(VQE)(530) 및 하드웨어 가속화된 미디어 데이터 인코딩 및 디코딩을 제공하는 멀티 포맷 인코딩/디코딩(MFX) 엔진(533)을 포함한다. 일부 실시예에서, 지오메트리 파이프라인(536) 및 미디어 엔진(537) 각각은 적어도 하나의 그래픽 코어(580A)에 의해 제공되는 스레드 실행 리소스에 대한 실행 스레드를 생성한다.
일부 실시예에서, 그래픽 프로세서(500)는 각각이 다수의 서브-코어(550A-550N, 560A-560N)(때때로 코어 서브-슬라이스로 지칭됨)를 갖는 모듈러 코어(580A-580N)(때때로 코어 슬라이스로 지칭됨)를 특징으로 하는 스케일러블 스레드 실행 리소스를 포함한다. 일부 실시예에서, 그래픽 프로세서(500)는 임의의 수의 그래픽 코어(580A 내지 580N)를 가질 수 있다. 일부 실시예에서, 그래픽 프로세서(500)는 적어도 제1 서브-코어(550A) 및 제2 코어 서브-코어(560A)를 갖는 그래픽 코어(580A)를 포함한다. 다른 실시예에서, 그래픽 프로세서는 단일 서브-코어(예를 들어, 550A)를 갖는 저전력 프로세서이다. 일부 실시예에서, 그래픽 프로세서(500)는 각각이 제1 서브-코어(550A-550N)의 세트 및 제2 서브-코어(560A-560N)의 세트를 포함하는 다중 그래픽 코어(580A-580N)를 포함한다. 제1 서브-코어(550A-550N)의 세트 내의 각각의 서브-코어는 적어도 제1 세트의 실행 유닛(552A-552N) 및 미디어/텍스처 샘플러(554A-554N)를 포함한다. 제2 서브 코어(560A-560N)의 세트 내의 각각의 서브-코어는 적어도 제2 세트의 실행 유닛(562A-562N) 및 샘플러(564A-564N)를 포함한다. 일부 실시예에서, 각각의 서브-코어(550A-550N,560A-560N)는 공유 리소스 세트(570A-570N)를 공유한다. 일부 실시예에서, 공유 리소스는 공유 캐시 메모리 및 픽셀 동작 로직을 포함한다. 그래픽 프로세서의 다양한 실시예에는 다른 공유 리소스가 포함될 수도 있다.
도 6은 GPE의 일부 실시예에서 채용된 처리 요소의 어레이를 포함하는 스레드 실행 로직(600)을 도시한다. 본 명세서에서 임의의 다른 도면의 구성요소와 동일한 참조번호(또는 명칭)를 갖는 도 6의 구성요소는 본 명세서의 다른 곳에서 기술된 것과 유사한 방식으로 작동하거나 기능할 수 있지만, 이에 한정되지는 않는다.
일부 실시예에서, 스레드 실행 로직(600)은 픽셀 셰이더(pixel shader)(602), 스레드 디스패처(604), 명령어 캐시(606), 복수의 실행 유닛(608A-608N)을 포함하는 스케일러블 실행 유닛 어레이, 샘플러(610), 데이터 캐시(612), 및 데이터 포트(614)를 포함한다. 일 실시예에서, 포함된 컴포넌트는 컴포넌트 각각에 연결되는 상호연결 패브릭을 통해 상호연결된다. 일부 실시예에서, 스레드 실행 로직(600)은 명령어 캐시(606), 데이터 포트(614), 샘플러(610) 및 실행 유닛 어레이(608A-608N) 중 하나 이상을 통한, 시스템 메모리 또는 캐시 메모리와 같은 메모리에 대한 하나 이상의 연결을 포함한다. 일부 실시예에서, 각각의 실행 유닛(예를 들어, 608A)는 다수의 동시 스레드를 실행하고 각 스레드에 대한 여러 데이터 요소를 병렬로 처리할 수 있는 별개의 벡터 프로세서이다. 일부 실시예에서, 실행 유닛 어레이(608A-608N)는 임의의 수의 개별 실행 유닛을 포함한다.
일부 실시예에서, 실행 유닛 어레이(608A-608N)는 주로 "셰이더" 프로그램을 실행하는데 사용된다. 일부 실시예에서, 어레이(608A-608N) 내의 실행 유닛은 그래픽 라이브러리(예를 들어, Direct 3D 및 OpenGL)로부터의 셰이더 프로그램이 최소 번역으로 실행되도록, 다수의 표준 3D 그래픽 셰이더 명령어에 대한 네이티브 서포트(native support)를 포함하는 명령어 세트를 실행한다. 실행 유닛은 정점 및 지오메트리 처리(예를 들어, 정점 프로그램, 지오메트리 프로그램, 정점 셰이더), 픽셀 처리(예를 들어, 픽셀 셰이더, 프래그먼트 셰이더) 및 범용 처리(예를 들어, 컴퓨팅 및 미디어 셰이더)를 지원한다.
실행 유닛 어레이(608A-608N)의 각 실행 유닛은 데이터 요소의 어레이에 대해 동작한다. 데이터 요소의 수는 "실행 크기" 또는 명령어에 대한 채널 수이다. 실행 채널은 명령어 내에서 데이터 요소 액세스, 마스킹 및 흐름 제어를 위한 논리적 실행 유닛이다. 채널의 개수는 특정 그래픽 프로세서에 대한 물리적 산술 논리 유닛(ALU) 또는 부동 소수점 유닛(FPU)의 수와는 무관할 수 있다. 일부 실시예에서, 실행 유닛(608A-608N)은 정수 및 부동 소수점 데이터 타입을 지원한다.
실행 유닛 명령어 세트는 SIMD(single instruction multiple data) 명령어를 포함한다. 다양한 데이터 요소가 패킹된 데이터 타입으로서 레지스터에 저장될 수 있고, 실행 유닛은 요소의 데이터 크기에 기초하여 다양한 요소를 처리할 것이다. 예를 들어, 256비트 크기의 벡터에 대해 동작할 때, 256비트의 벡터가 레지스터에 저장되고 실행 유닛은 4개의 개별 64비트 패키지형 데이터 요소(쿼드-워드(QW) 크기 데이터 요소), 8개의 개별 32비트 패키지형 데이터 요소(더블 워드(DW) 크기 데이터 요소), 16개의 개별 16비트 패키지형 데이터 요소(워드(W) 크기 데이터 요소) 또는 32개의 개별 8비트 데이터 요소(바이트(B) 크기 데이터 요소)로서 벡터에 대해 동작한다. 그러나, 상이한 벡터 너비 및 레지스터 크기가 가능하다.
실행 유닛에 대한 스레드 명령어를 캐싱하기 위해 하나 이상의 내부 명령어 캐시(예컨대, 606)가 스레드 실행 로직(600)에 포함된다. 일부 실시예에서, 스레드 실행 동안 스레드 데이터를 캐싱하기 위해 하나 이상의 데이터 캐시(예를 들어, 612)가 포함된다. 일부 실시예에서, 샘플러(610)는 3D 동작을 위한 텍스처 샘플링 및 미디어 동작을 위한 미디어 샘플링을 제공하기 위해 포함된다. 일부 실시예에서, 샘플러(610)는 샘플링된 데이터를 실행 유닛에 제공하기 전에 샘플링 프로세스 동안 텍스처 또는 미디어 데이터를 처리하기 위한 특수 텍스처 또는 미디어 샘플링 기능을 포함한다.
실행 중에, 그래픽 및 매체 파이프라인은 스레드 생성 및 디스패치 로직을 통해 스레드 개시 요청을 스레드 실행 로직(600)으로 전송한다. 일부 실시예에서, 스레드 실행 로직(600)은 그래픽 및 미디어 파이프라인으로부터의 스레드 개시 요청을 중재하고 요청된 스레드를 하나 이상의 실행 유닛(608A-608N)에 대해 인스턴스화하는 로컬 스레드 디스패처(604)를 포함한다. 예를 들어, 지오메트리 파이프라인(예컨대, 도 5의 536)은 정점 처리, 테셀레이션(tessellation) 또는 지오메트리 처리 스레드를 스레드 실행 로직(600)(도 6)으로 디스패칭한다. 일부 실시예에서, 스레드 디스패처(604)는 또한 실행중인 셰이더 프로그램으로부터의 런타임 스레드 생성 요청을 처리할 수 있다.
일단 기하학적 객체 그룹이 처리되어 픽셀 데이터로 래스터화되면, 픽셀 셰이더(602)가 호출되어 출력 정보를 더 계산하고 출력 표면(예를 들어, 컬러 버퍼, 깊이 버퍼, 스텐실 버퍼 등)에 결과가 기록되게 한다. 일부 실시예에서, 픽셀 셰이더(602)는 래스터화된 객체를 가로질러 보간될 다양한 정점 속성의 값을 계산한다. 일부 실시예에서, 픽셀 셰이더(602)는 애플리케이션 프로그래밍 인터페이스(API)-공급 픽셀 셰이더 프로그램을 실행한다. 픽셀 셰이더 프로그램을 실행하기 위해, 픽셀 셰이더(602)는 스레드 디스패처(604)를 통해 실행 유닛(예를 들어, 608A)에 스레드를 디스패칭한다. 일부 실시예에서, 픽셀 셰이더(602)는 메모리에 저장된 텍스처 맵의 텍스처 데이터에 액세스하기 위해 샘플러(610)에서 텍스처 샘플링 로직을 사용한다. 텍스처 데이터 및 입력 지오메트리 데이터에 대한 산술 연산은 각각의 기하학적 프래그먼트에 대해 픽셀 컬러 데이터를 계산하거나, 추가 처리에서 하나 이상의 픽셀을 삭제한다.
일부 실시예에서, 데이터 포트(614)는 스레드 실행 로직(600)이 처리된 데이터를 그래픽 프로세서 출력 파이프라인 상에서 처리하기 위해 메모리에 출력하기 위한 메모리 액세스 메커니즘을 제공한다. 일부 실시예에서, 데이터 포트(614)는 데이터 포트를 통한 메모리 액세스를 위해 데이터를 캐시하기 위한 하나 이상의 캐시 메모리(예를 들어, 데이터 캐시(612))를 포함하거나 이에 연결된다.
도 7은 일부 실시예에 따른 그래픽 프로세서 명령어 포맷(700)을 나타내는 블록도이다. 하나 이상의 실시예에서, 그래픽 프로세서 실행 유닛은 여러 포맷의 명령어를 갖는 명령어 세트를 지원한다. 실선으로 표시된 박스는 일반적으로 실행 유닛 명령어에 포함되는 컴포넌트를 보여주지만 점선은 선택적인 또는 명령어의 서브세트에만 포함되는 컴포넌트를 포함한다. 일부 실시예에서, 설명되고 도시된 명령어 포맷(700)은 일단 명령어가 처리되면 명령어 디코딩으로 인한 마이크로 연산과는 달리, 실행 유닛에 공급되는 명령어라는 점에서 매크로 명령어이다.
일부 실시예에서, 그래픽 프로세서 실행 유닛은 기본적으로 128비트 포맷(710)의 명령어를 지원한다. 선택된 명령어, 명령어 옵션 및 피연산자의 수에 기초하여 일부 명령어에 대해 64비트 압축된 명령어 포맷(730)이 이용가능하다. 원시 128비트 포맷(710)은 모든 명령어 옵션에 대한 액세스를 제공하지만, 일부 옵션 및 동작은 64비트 명령 포맷(730)에서 제한된다. 64비트 명령어 포맷(730)에서 이용가능한 원시 명령어는 실시예에 따라 변한다. 일부 실시예에서, 명령어는 인덱스 필드(713) 내의 인덱스 값의 세트를 사용하여 부분적으로 압축된다. 실행 유닛 하드웨어는 인덱스 값에 기초하여 압축 테이블 세트를 참조하고 압축 테이블 출력을 사용하여 128비트 포맷(710)의 원시 명령어를 재구성한다.
각 포맷에 대해, 명령어 연산코드(opcode)(712)는 실행 유닛이 수행할 동작을 정의한다. 실행 유닛은 각 피연산자의 여러 데이터 요소에 걸쳐 각 명령을 병렬로 실행한다. 예를 들어, 가산 명령어에 응답하여, 실행 유닛은 텍스처 요소 또는 픽처 요소를 나타내는 각각의 컬러 채널에 걸쳐 동시적인 가산 연산을 수행한다. 기본적으로, 실행 유닛은 피연산자의 모든 데이터 채널에 걸쳐 각각의 명령어를 수행한다. 일부 실시예에서, 명령어 제어 필드(714)는 채널 선택(예를 들어, 예측) 및 데이터 채널 순서(예를 들어, 스위즐(swizzle))와 같은 특정 실행 옵션에 대한 제어를 가능하게 한다. 128비트 명령어(710)에 대해, 실행 크기 필드(exec-size field)(716)는 병렬로 실행될 데이터 채널의 수를 제한한다. 일부 실시예에서, 실행 크기 필드(716)는 64비트 압축 명령어 포맷(730)에서 사용가능하지 않다.
일부 실행 유닛 명령어는 2개의 소스 피연산자(srcO(722), srcl(722)) 및 하나의 목적지(718)를 포함하는 최대 3개의 피연산자를 갖는다. 일부 실시예에서, 실행 유닛은 목적지 중 하나가 암시되는 이중 목적지 명령어를 지원한다. 데이터 조작 명령어는 제3 소스 피연산자(예를 들어, SRC2(724))를 가질 수 있으며, 여기서 명령어 연산코드(712)는 소스 피연산자의 개수를 결정한다. 명령어의 최종 소스 피연산자는 명령어와 함께 전달된 즉시(immediate)(예를 들어, 하드 코딩된) 값일 수 있다.
일부 실시예에서, 128비트 명령어 포맷(710)은 예를 들어, 직접 레지스터 어드레싱 모드가 사용되는지 또는 간접 레지스터 어드레싱 모드가 사용되는지 여부를 지정하는 액세스/어드레스 모드 정보(726)를 포함한다. 직접 레지스터 어드레싱 모드가 사용되는 경우, 하나 이상의 피연산자의 레지스터 어드레스는 명령어(710)의 비트에 의해 직접 제공된다.
일부 실시예에서, 128비트 명령어 포맷(710)은 명령어에 대한 어드레스 모드 및/또는 액세스 모드를 지정하는 액세스/어드레스 모드 필드(726)를 포함한다. 일 실시예에서, 액세스 모드는 명령에 대한 데이터 액세스 정렬을 정의한다. 일부 실시예는 16바이트 정렬된 액세스 모드 및 1바이트 정렬된 액세스 모드를 포함하는 액세스 모드를 지원하되, 액세스 모드의 바이트 정렬은 명령어 피연산자의 액세스 정렬을 결정한다. 예를 들어, 제1 모드에서, 명령어(710)는 소스 및 목적지 피연산자에 대해 바이트 정렬된 어드레싱을 사용할 수 있고, 제2 모드에서, 명령어(710)는 모든 소스 및 목적지 피연산자에 대해 16바이트 정렬된 어드레싱을 사용할 수 있다.
일 실시예에서, 액세스/어드레스 모드 필드(726)의 어드레스 모드 부분은 명령어가 직접 어드레싱을 사용할지 간접 어드레싱을 사용할지 여부를 결정한다. 직접 레지스터 어드레싱 모드가 사용되는 경우, 명령어(710)의 비트는 하나 이상의 피연산자의 레지스터 어드레스를 직접 제공한다. 간접 레지스터 어드레싱 모드가 사용되는 경우, 하나 이상의 피연산자의 레지스터 어드레스는 명령어 내의 어드레스 레지스터 값 및 어드레스 즉시 필드에 기초하여 계산될 수 있다.
일부 실시예에서, 명령어는 연산코드 디코딩(740)을 단순화하기 위해 연산코드(712) 비트 필드에 기초하여 그룹핑된다. 8비트 연산코드의 경우, 비트(4,5,6)를 통해 실행 유닛은 연산코드의 타입을 결정할 수 있다. 도시된 바로 그 연산코드 그룹은 단지 예일뿐이다. 일부 실시예에서, 이동 및 로직 연산코드 그룹(742)은 데이터 이동 및 로직 명령어(예를 들어, 이동(mov), 비교(cmp))를 포함한다. 일부 실시예에서, 이동 및 로직 그룹(742)은 5개의 최상위 비트(MSB)를 공유하며, 여기서 이동(mov) 명령어는 OOOOxxxxb의 형태이고 로직 명령어는 OOOlxxxxb의 형태이다. 흐름 제어 명령어 그룹(744)(예를 들어, 호출, 점프(jmp))은 OO10xxxxb(예를 들어, 0x20)의 형태의 명령어를 포함한다. 기타 명령어 그룹(746)은 0011xxxxb(예를 들어, 0x30)의 형태의 동기화 명령어(예를 들어, 대기, 전송)을 포함하는 명령어들의 혼합을 포함한다. 병렬 연산 명령어 그룹(748)은 Ol00xxxxb(예를 들어, 0x40)의 형태의 구성요소별(component-wise) 산술 명령어(예를 들어, 가산, 곱셈(mul))을 포함한다. 병렬 산술 그룹(748)은 데이터 채널에 걸쳐 병렬로 산술 연산을 수행한다. 벡터 산술 그룹(750)은 Ol01xxxxb(예를 들어, 0x50)의 형태의 산술 명령어(예를 들어, dp4)를 포함한다. 벡터 산술 그룹은 벡터 피연산자에 대한 내적 계산과 같은 산술 연산을 수행한다.
그래픽 파이프라인
도 8은 그래픽 프로세서(800)의 다른 실시예의 블록도이다. 본 명세서에서 임의의 다른 도면의 구성요소와 동일한 참조번호(또는 명칭)를 갖는 도 8의 구성요소는 본 명세서의 다른 곳에서 기술된 것과 유사한 방식으로 작동하거나 기능할 수 있지만, 이에 한정되는 것은 아니다.
일부 실시예에서, 그래픽 프로세서(800)는 그래픽 파이프라인(820), 미디어 파이프라인(830), 디스플레이 엔진(840), 스레드 실행 로직(850) 및 렌더링 출력 파이프라인(870)을 포함한다. 일부 실시예에서, 그래픽 프로세서(800)는 하나 이상의 범용 처리 코어를 포함하는 멀티 코어 처리 시스템 내의 그래픽 프로세서이다. 그래픽 프로세서는 하나 이상의 제어 레지스터(도시 생략)에 대한 레지스터 기록에 의해 또는 링 상호연결부(802)를 통해 그래픽 프로세서(800)에 발행된 커맨드를 통해 제어된다. 일부 실시예에서, 링 상호연결부(802)는 그래픽 프로세서(800)를, 다른 그래픽 프로세서 또는 범용 프로세서와 같은 다른 처리 컴포넌트에 연결한다. 링 상호연결부(802)로부터의 커맨드는 그래픽 파이프라인(820) 또는 미디어 파이프라인(830)의 개별 컴포넌트에 명령어를 공급하는 커맨드 스트리머(803)에 의해 해석된다.
일부 실시예에서, 커맨드 스트리머(803)는 메모리로부터 정점 데이터를 판독하고 커맨드 스트리머(803)에 의해 제공된 정점-처리 커맨드를 실행하는 정점 페처(805)의 동작을 지시한다. 일부 실시예에서, 정점 페처(805)는 정점 데이터를 정점 셰이더(807)에 제공하며, 이 정점 셰이더(807)는 각 정점에 대해 좌표 공간 변환 및 조명 동작(lighting operation)을 수행한다. 일부 실시예에서, 정점 페처(805) 및 정점 셰이더(807)는 스레드 디스패처(831)를 통해 실행 스레드를 실행 유닛(852A, 852B)에 디스패칭함으로써 정점 처리 커맨드를 실행한다.
일부 실시예에서, 실행 유닛(852A, 852B)은 그래픽 및 미디어 동작을 수행하기 위한 명령어 세트를 갖는 벡터 프로세서의 어레이이다. 일부 실시예에서, 실행 유닛(852A,852B)은 각 어레이에 대해 특정되거나 어레이들 사이에서 공유되는 부착형 L1 캐시(851)를 갖는다. 캐시는 데이터 캐시, 명령어 캐시 또는 다른 파티션에 데이터와 명령어를 포함하도록 파티셔닝된 단일 캐시로 구성될 수 있다.
일부 실시예에서, 그래픽 파이프라인(820)은 3D 객체의 하드웨어 가속화된 테셀레이션을 수행하는 테셀레이션 컴포넌트를 포함한다. 일부 실시예에서, 프로그래밍가능한 헐(hull) 셰이더(811)는 테셀레이션 동작을 구성한다. 프로그래밍가능한 도메인 셰이더(817)는 테셀레이션 출력의 백엔드 평가를 제공한다. 테셀레이터(tessellator)(813)는 헐 셰이더(811)의 방향에서 동작하며, 그래픽 파이프라인(820)에 입력으로서 제공되는 개략적 기하학 모델(coarse geometric model)에 기초하여 상세한 기하학적 객체 세트를 생성하는 특수 목적의 로직을 포함한다. 일부 실시예에서, 테셀레이션이 사용되지 않으면, 테셀레이션 컴포넌트(811,813,817)는 우회될 수 있다.
일부 실시예에서, 완전한 기하학적 객체는 실행 유닛(852A,852B)으로 디스패칭된 하나 이상의 스레드를 통해 지오메트리 셰이더(819)에 의해 처리되거나, 직접 클리퍼(829)로 진행할 수 있다. 일부 실시예에서, 지오메트리 셰이더는 그래픽 파이프라인의 이전 단계에서와 같이 정점 또는 정점의 패치보다는 전체 기하학적 객체에 대해 동작한다. 테셀레이션이 비활성화되면, 지오메트리 셰이더(819)는 정점 셰이더(807)로부터 입력을 수신한다. 일부 실시예에서, 테셀레이션 유닛이 비활성화된 경우, 지오메트리 셰이더(819)는 지오메트리 셰이더 프로그램에 의해 지오메트리 테셀레이션을 수행하도록 프로그래밍가능하다.
래스터화 이전에, 클리퍼(829)가 정점 데이터를 처리한다. 클리퍼(829)는 고정 함수 클리퍼이거나 또는 클리핑 및 지오메트리 셰이더 기능을 갖는 프로그래밍가능한 클리퍼일 수 있다. 일부 실시예에서, 렌더링 출력 파이프라인(870) 내의 래스터라이저 및 깊이 테스트 컴포넌트(873)는 기하학적 객체를 그들의 픽셀 당 표현으로 변환하도록 픽셀 셰이더를 디스패칭한다. 일부 실시예에서, 픽셀 셰이더 로직은 스레드 실행 로직(850)에 포함된다. 일부 실시예에서, 애플리케이션은 래스터라이저(873)를 우회하고 스트림 출력 유닛(823)을 통해 비-래스터화된 정점 데이터에 액세스할 수 있다.
그래픽 프로세서(800)는 상호연결 버스, 상호연결 패브릭, 또는 프로세서의 주요 컴포넌트들 사이에서 데이터 및 메시지가 전달될 수 있게 하는 몇몇 다른 상호연결 메커니즘을 갖는다. 일부 실시예에서, 실행 유닛(852A,852B) 및 연관된 캐시(들)(851), 텍스처 및 미디어 샘플러(854), 및 텍스처/샘플러 캐시(858)는 데이터 포트(856)를 통해 상호연결되어 메모리 액세스를 수행하고 프로세서의 렌더링 출력 파이프라인 컴포넌트와 통신한다. 일부 실시예에서, 샘플러(854), 캐시(851,858) 및 실행 유닛(852A,852B) 각각은 별개의 메모리 액세스 경로를 갖는다.
일부 실시예에서, 렌더링 출력 파이프라인(870)은 정점 기반 객체를 연관된 픽셀 기반 표현으로 변환하는 래스터라이저 및 깊이 테스트 컴포넌트(873)를 포함한다. 일부 실시예에서, 래스터라이저 로직은 고정 함수 삼각형 및 라인 래스터화를 수행하는 윈도어(windower)/마스커 유닛을 포함한다. 연관된 렌더링 캐시(878) 및 깊이 캐시(879)가 일부 실시예에서 또한 이용가능하다. 픽셀 동작 컴포넌트(877)는 데이터에 대해 픽셀 기반 동작을 수행하지만, 일부 경우 2D 동작(예를 들어, 블렌딩을 통한 비트 블록 이미지 전송)과 관련된 픽셀 동작은 2D 엔진(841)에 의해 수행되거나, 디스플레이시 디스플레이 제어기(843)에 의해 오버레이 디스플레이 평면을 사용하여 대체된다. 일부 실시예에서, 공타입 L3 캐시(875)가 모든 그래픽 컴포넌트에 이용가능하며, 그에 따라 메인 시스템 메모리를 사용하지 않고 데이터를 공유할 수 있다.
일부 실시예에서, 그래픽 프로세서 미디어 파이프라인(830)은 미디어 엔진(837) 및 비디오 프론트 엔드(834)를 포함한다. 일부 실시예에서, 비디오 프론트 엔드(834)는 커맨드 스트리머(803)로부터 파이프라인 커맨드를 수신한다. 일부 실시예에서, 미디어 파이프라인(830)은 별개의 커맨드 스트리머를 포함한다. 일부 실시예에서, 비디오 프론트 엔드(834)는 미디어 엔진(837)에 커맨드를 보내기 전에 미디어 커맨드를 처리한다. 일부 실시예에서, 미디어 엔진(337)은 스레드 디스패처(831)를 통해 스레드 실행 로직(850)으로 디스패칭하기 위한 스레드를 생성하는 스레드 생성 기능을 포함한다.
일부 실시예에서, 그래픽 프로세서(800)는 디스플레이 엔진(840)을 포함한다. 일부 실시예에서, 디스플레이 엔진(840)은 프로세서(800) 외부에 있으며 링 상호연결부(802) 또는 일부 다른 상호연결 버스 또는 패브릭을 통해 그래픽 프로세서와 결합한다. 일부 실시예에서, 디스플레이 엔진(840)은 2D 엔진(841) 및 디스플레이 제어기(843)를 포함한다. 일부 실시예에서, 디스플레이 엔진(840)은 3D 파이프라인으로부터 독립적으로 동작할 수 있는 특수 목적 로직을 포함한다. 일부 실시예에서, 디스플레이 제어기(843)는 랩탑 컴퓨터에서와 같이 시스템 통합 디스플레이 장치일 수 있고 또는 디스플레이 장치 커넥터를 통해 부착된 외부 디스플레이 장치일 수 있는 디스플레이 장치(도시되지 않음)와 결합한다.
일부 실시예에서, 그래픽 파이프라인(820) 및 미디어 파이프라인(830)은 다수의 그래픽 및 미디어 프로그래밍 인터페이스에 기초하여 동작을 수행하도록 구성 가능하고 임의의 하나의 애플리케이션 프로그래밍 인터페이스(API)에 특정되지 않는다. 일부 실시예에서, 그래픽 프로세서용 드라이버 소프트웨어는 특정 그래픽 또는 미디어 라이브러리에 특정한 API 호출을 그래픽 프로세서에 의해 처리될 수 있는 커맨드로 변환한다. 일부 실시예에서, 크로노스 그룹(Khronos Group)으로부터의 오픈 그래픽 라이브러리(OpenGL) 및 오픈 컴퓨팅 언어(OpenCL), 마이크로소프트사로부터의 다이렉트3D 라이브러리에 대한 지원이 제공되거나, OpenGL 및 D3D 모두에 대한 지원이 제공될 수 있다. 오프 소스 컴퓨터 비전 라이브러리(OpenCV)에 대한 지원도 제공될 수 있다. 미래의 API의 파이프라인으로부터 그래픽 프로세서의 파이프라인으로 매핑이 가능하면 호환가능한 3D 파이프라인을 가진 미래의 API도 지원될 것이다.
그래픽 파이프라인 프로그래밍
도 9a는 일부 실시예에 따른 그래픽 프로세서 커맨드 포맷(900)을 도시하는 블록도이다. 도 9b는 실시예에 따른 그래픽 프로세서 커맨드 시퀀스(910)를 도시하는 블록도이다. 도 9a의 실선으로 도시된 박스는 그래픽 커맨드에 일반적으로 포함되는 컴포넌트를 도시하고, 점선은 선택적이거나 그래픽 커맨드의 서브-세트에만 포함되는 컴포넌트를 포함한다. 도 9a의 예시적인 그래픽 프로세서 커맨드 포맷(900)은 커맨드의 타겟 클라이언트(902), 커맨드 연산코드(opcode)(904) 및 커맨드에 대한 관련 데이터(906)를 식별하기 위한 데이터 필드를 포함한다. 서브-연산코드(905) 및 커맨드 크기(908)가 또한 일부 커맨드에 포함된다.
일부 실시예에서, 클라이언트(902)는 커맨드 데이터를 처리하는 그래픽 장치의 클라이언트 유닛을 특정한다. 일부 실시예에서, 그래픽 프로세서 커맨드 파서는 각 커맨드의 클라이언트 필드를 검사하여 커맨드의 추가 처리를 조정하고 커맨드 데이터를 적절한 클라이언트 장치로 라우팅한다. 일부 실시예에서, 그래픽 프로세서의 클라이언트 유닛은 메모리 인터페이스 유닛, 렌더링 유닛, 2D 유닛, 3D 유닛 및 미디어 유닛을 포함한다. 각 클라이언트 유닛은 커맨드를 처리하는 해당 처리 파이프라인을 갖는다. 커맨드가 클라이언트 유닛에 의해 수신되면, 클라이언트 유닛은 연산코드(904) 및 존재한다면, 서브-연산코드(905)를 판독하여 수행할 연산을 결정한다. 클라이언트 유닛은 데이터 필드(906) 내의 정보를 사용하여 커맨드를 수행한다. 일부 커맨드의 경우, 커맨드의 크기를 지정하는 명시적 커맨드 크기(908)가 예상된다. 일부 실시예에서, 커맨드 파서는 커맨드 연산코드에 기초하여 커맨드의 적어도 일부의 크기를 자동으로 결정한다. 일부 실시예에서, 커맨드는 2배 단어(double word)의 배수를 통해 정렬된다.
도 9b의 흐름도는 예시적인 그래픽 프로세서 커맨드 시퀀스(910)를 도시한다. 일부 실시예에서, 그래픽 프로세서의 실시예를 특징으로 하는 데이터 처리 시스템의 소프트웨어 또는 펌웨어는 그래픽 동작 세트를 설정, 실행 및 종료하기 위해 도시된 커맨드 시퀀스의 일 버전을 사용한다. 샘플 커맨드 시퀀스는 단지 예시 목적으로 도시되고 설명되는데 그 이유는 실시예가 이러한 특정 커맨드 또는 이 커맨드 시퀀스로 국한되지 않기 때문이다. 더욱이, 커맨드는 커맨드 시퀀스에서 커맨드의 묶음으로서 발행될 수 있어, 그래픽 프로세서는 적어도 부분적으로 동시에 커맨드의 시퀀스를 처리할 것이다.
일부 실시예에서, 그래픽 프로세서 커맨드 시퀀스(910)는 파이프라인 플러시 커맨드(912)가 임의의 활성 그래픽 파이프라인으로 하여금 파이프라인에 대해 현재 계류중인 커맨드를 완료하게 하는 것으로 시작될 수 있다. 일부 실시예에서, 3D 파이프라인(922) 및 미디어 파이프라인(924)은 동시에 동작하지 않는다. 파이프라인 플러시는 활성 그래픽 파이프라인으로 하여금 계류중인 임의의 커맨드를 완료하게 하기 위해 수행된다. 파이프라인 플러시에 응답하여, 그래픽 프로세서를 위한 커맨드 파서는 활성 드로잉 엔진이 계류중인 동작을 완료하고 관련 판독 캐시가 무효화될 때까지 커맨드 처리를 일시중지할 것이다. 선택적으로, '더티(dirty)'로 표시된 렌더링 캐시 내의 임의의 데이터는 메모리로 플러시될 수 있다. 일부 실시예에서, 파이프라인 플러시 커맨드(912)는 파이프라인 동기화를 위해 또는 그래픽 프로세서를 저전력 상태로 설정하기 전에 사용될 수 있다.
일부 실시예에서, 파이프라인 선택 커맨드(913)는 커맨드 시퀀스가 파이프라인 간을 명시적으로 스위칭할 것을 그래픽 프로세서에게 요구할 때 사용된다. 일부 실시예에서, 파이프라인 선택 커맨드(913)는 실행 컨텍스트가 파이프라인 모두에 대한 커맨드를 발행하지 않는다면 파이프라인 커맨드를 발행하기 전에 이 실행 컨텍스트 내에서 한 번만 요구된다. 일부 실시예에서, 파이프라인 선택 커맨드(913)를 통한 파이프라인 스위칭 직전에 파이프라인 플러시 커맨드(912)가 요구된다.
일부 실시예에서, 파이프라인 제어 커맨드(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) 커맨드를 통해 그래픽 프로세서에 전달되는 커맨드 및 관련 파라미터는 그래픽 파이프라인 내의 정점 페치 기능(vertex fetch function)으로 전달된다. 정점 페치 기능은 3D 프리미티브(932) 커맨드 데이터를 사용하여 정점 데이터 구조를 생성한다. 정점 데이터 구조는 하나 이상의 리턴 버퍼에 저장된다. 일부 실시예에서, 3D 프리미티브(932) 커맨드는 정점 셰이더를 통해 3D 프리미티브에 대한 정점 동작을 수행하는데 사용된다. 정점 셰이더를 처리하기 위해, 3D 파이프라인(922)은 셰이더 실행 스레드를 그래픽 프로세서 실행 유닛에 디스패칭한다.
일부 실시예에서, 3D 파이프라인(922)은 실행(934) 커맨드 또는 이벤트를 통해 트리거된다. 일부 실시예에서, 레지스터 기록은 커맨드 실행을 트리거한다. 일부 실시예에서, 실행은 커맨드 시퀀스 내의 'go'또는 'kick' 커맨드를 통해 트리거된다. 일 실시예에서, 커맨드 실행은 파이프라인 동기화 커맨드를 사용하여 트리거되어 그래픽 파이프라인을 통해 커맨드 시퀀스를 플러시한다. 3D 파이프라인은 3D 프리미티브에 대한 지오메트리 처리를 수행할 것이다. 동작이 완료되면, 결과적인 기하학적 객체가 래스터화되고 픽셀 엔진이 결과적인 픽셀에 컬러를 제공한다. 픽셀 셰이딩 및 픽셀 백엔드 동작을 제어하기 위한 추가 커맨드가 이러한 동작을 위해 또한 포함될 수 있다.
일부 실시예에서, 그래픽 프로세서 커맨드 시퀀스(910)는 미디어 동작을 수행할 때 미디어 파이프라인(924) 경로를 따른다. 일반적으로, 미디어 파이프라인(924)에 대한 프로그래밍의 특정 사용 및 방식은 수행될 미디어 또는 계산 동작에 의존한다. 특정 미디어 디코딩 동작은 미디어 디코딩 동안 미디어 파이프라인으로 떠넘겨질 수 있다. 일부 실시예에서, 미디어 파이프라인은 또한 우회될 수 있고 미디어 디코딩은 하나 이상의 범용 처리 코어에 의해 제공되는 리소스를 사용하여 전체적으로 또는 부분적으로 수행될 수 있다. 일 실시예에서, 미디어 파이프라인은 GPGPU(general-purpose graphics processor unit) 동작을 위한 요소를 또한 포함하는데, 그래픽 프로세서는 그래픽 프리미티브의 렌더링에 명시적으로 관련되지 않은 연산 셰이더 프로그램을 사용하여 SIMD 벡터 연산을 수행하는 데 사용된다.
일부 실시예에서, 미디어 파이프라인(924)은 3D 파이프라인(922)과 유사한 방식으로 구성된다. 한 세트의 미디어 파이프라인 상태 커맨드(940)가 미디어 객체 커맨드(942) 이전에 커맨드 큐에 디스패치되거나 배치된다. 일부 실시예에서, 미디어 파이프라인 상태(940)에 대한 커맨드는 미디어 객체를 처리하는데 사용될 미디어 파이프라인 요소를 구성하기 위한 데이터를 포함한다. 이것은 인코딩 또는 디코딩 포맷과 같이 미디어 파이프라인에서 비디오 디코딩 및 비디오 인코딩 로직을 구성하기 위한 데이터를 포함한다. 일부 실시예에서, 미디어 파이프라인 상태(940)에 대한 커맨드는 또한 상태 설정의 묶음을 포함하는 "간접적인" 상태 요소에 대한 하나 이상의 포인터의 사용을 지원한다.
일부 실시예에서, 미디어 객체 커맨드(942)는 미디어 파이프라인에 의한 처리를 위해 미디어 객체에 포인터를 제공한다. 미디어 객체는 처리될 비디오 데이터를 포함하는 메모리 버퍼를 포함한다. 일부 실시예에서, 모든 미디어 파이프라인 상태는 미디어 객체 커맨드(942)를 발행하기 전에 유효해야 한다. 일단 파이프라인 상태가 구성되고 미디어 객체 커맨드(942)가 큐잉되면, 미디어 파이프라인(924)은 실행 커맨드(944) 또는 등가의 실행 이벤트(예를 들어, 레지스터 기록)를 통해 트리거된다. 미디어 파이프라인(924)으로부터의 출력은 3D 파이프라인(922) 또는 미디어 파이프라인(924)에 의해 제공된 동작에 의해 후 처리될 수 있다. 일부 실시예에서, GPGPU 동작은 미디어 동작과 유사한 방식으로 구성되고 실행된다.
그래픽 소프트웨어 아키텍처
도 10은 일부 실시예에 따른 데이터 처리 시스템(1000)을 위한 예시적인 그래픽 소프트웨어 아키텍처를 도시한다. 일부 실시예에서, 소프트웨어 아키텍처는 3D 그래픽 애플리케이션(1010), 운영 체제(1020) 및 적어도 하나의 프로세서(1030)를 포함한다. 일부 실시예에서, 프로세서(1030)는 그래픽 프로세서(1032) 및 하나 이상의 범용 프로세서 코어(들)(1034)를 포함한다. 그래픽 애플리케이션(1010) 및 운영 체제(1020)는 각각 데이터 처리 시스템의 시스템 메모리(1050)에서 실행된다.
일부 실시예에서, 3D 그래픽 애플리케이션(1010)은 셰이더 명령어(1012)를 포함하는 하나 이상의 셰이더 프로그램을 포함한다. 셰이더 언어 명령어는 HLSL(High Level Shader Language) 또는 GLSL(OpenGL Shader Language)과 같은 상위 레벨의 셰이더 언어로 되어 있을 수 있다. 애플리케이션은 또한 범용 프로세서 코어(1034)에 의한 실행에 적합한 기계 언어로 실행가능한 명령어(1014)를 포함한다. 애플리케이션은 또한 정점 데이터에 의해 정의된 그래픽 객체(1016)를 포함한다.
일부 실시예에서, 운영 체제(1020)는 마이크로소프트사의 Microsoft® Windows® 운영 체제, 등록상표를 갖는 UNIX-형 운영 체제 또는 리눅스 커널의 변형을 사용하는 오픈 소스 UNIX-형 운영 체제이다. 운영 체제(1020)는 Direct3D API 또는 OpenGL API와 같은 그래픽 API(1022)를 지원할 수 있다. Direct3D API가 사용되는 경우, 운영 체제(1020)는 프론트-엔드 셰이더 컴파일러(1024)를 사용하여 HLSL의 임의의 셰이더 명령어(1012)를 하위 레벨 셰이더 언어로 컴파일한다. 컴파일은 JIT(just-in-time) 컴파일일 수도 있고 또는 애플리케이션은 셰이더 사전 컴파일을 수행할 수도 있다. 일부 실시예에서, 상위 레벨 셰이더는 3D 그래픽 애플리케이션(1010)의 컴파일 동안 하위 레벨 셰이더로 컴파일된다.
일부 실시예에서, 사용자 모드 그래픽 드라이버(1026)는 셰이더 명령어(1012)를 하드웨어 특정 표현으로 변환하는 백엔드 셰이더 컴파일러(1027)를 포함한다. OpenGL API가 사용되는 경우, GLSL 상위 레벨 언어의 셰이더 명령어(1012)는 컴파일을 위해 사용자 모드 그래픽 드라이버(1026)로 전달된다. 일부 실시예에서, 사용자 모드 그래픽 드라이버(1026)는 운영 체제 커널 모드 기능(1028)을 사용하여 커널 모드 그래픽 드라이버(1029)와 통신한다. 일부 실시예에서, 커널 모드 그래픽 드라이버(1029)는 그래픽 프로세서(1032)와 통신하여 커맨드 및 명령어를 디스패치한다.
IP 코어 구현
적어도 하나의 실시예의 하나 이상의 양상은 프로세서와 같은 집적 회로 내에서 로직을 나타내고 및/또는 정의하는 머신 판독가능 매체 상에 저장된 대표 코드에 의해 구현될 수 있다. 예를 들어, 머신 판독가능 매체는 프로세서 내의 다양한 로직을 나타내는 명령어를 포함할 수 있다. 머신에 의해 판독되면, 명령어는 머신으로 하여금 본 명세서에 설명된 기법을 수행하기 위한 로직을 구현하게 할 수있다. "IP 코어"로 알려진 이러한 표현은 집적 회로의 구조를 설명하는 하드웨어 모델로서, 유형의(tangible) 머신 판독가능한 매체에 저장될 수 있는 집적 회로를 위한 재사용 가능한 로직 유닛이다. 하드웨어 모델은 집적 회로를 제조하는 제조 머신 상에 하드웨어 모델을 로딩하는 다양한 고객 또는 제조 설비에 공급될 수 있다. 집적 회로는 회로가 본 명세서에 설명된 임의의 실시예와 관련하여 설명된 동작을 수행하도록 제조될 수 있다.
도 11은 실시예에 따라 동작을 수행하는 집적 회로를 제조하는데 사용될 수 있는 IP 코어 개발 시스템(1100)을 나타내는 블록도이다. IP 코어 개발 시스템(1100)은 더 큰 설계에 통합되거나 전체 집적 회로(예를 들어, SOC 집적 회로)를 구성하는데 사용될 수 있는 모듈형의 재사용 가능한 설계를 생성하는데 사용될 수 있다. 설계 설비(1130)는 상위 레벨 프로그래밍 언어(예를 들어, C/C++)로 IP 코어 설계의 소프트웨어 시뮬레이션(1110)을 생성할 수 있다. 소프트웨어 시뮬레이션(1110)은 시뮬레이션 모델(1112)을 사용하여 IP 코어의 거동을 설계, 테스트 및 검증하는데 사용될 수 있다. 시뮬레이션 모델(1112)은 기능, 거동 및/또는 타이밍 시뮬레이션을 포함할 수 있다. 레지스터 전송 레벨(RTL) 설계는 시뮬레이션 모델(1112)로부터 생성되거나 합성될 수 있다. RTL 설계(1115)는 모델링된 디지털 신호를 사용하여 수행되는 관련 로직을 포함하여, 하드웨어 레지스터 사이의 디지털 신호의 흐름을 모델링하는 집적 회로의 동작을 추상화한 것이다. RTL 설계(1115)에 더하여, 로직 레벨 또는 트랜지스터 레벨에서의 하위 레벨 설계가 또한 생성, 설계 또는 합성될 수 있다. 따라서, 초기 설계 및 시뮬레이션의 특정 세부사항은 다를 수 있다.
RTL 설계(1115) 또는 그 등가물은 설계 기능에 의해, 하드웨어 기술 언어(HDL) 또는 물리적 설계 데이터의 다른 표현으로 되어 있을 수 있는 하드웨어 모델(1120)로 더 합성될 수 있다. HDL은 IP 코어 설계를 검증하기 위해 더 시뮬레이션되거나 테스트될 수 있다. IP 코어 설계는 제3자 제조 설비(1165)에 전달하기 위해 비휘발성 메모리(1140)(예를 들어, 하드 디스크, 플래시 메모리, 또는 임의의 비휘발성 저장 매체)를 사용하여 저장될 수 있다. 대안으로, IP 코어 설계는 유선 연결(1150) 또는 무선 연결(1160)을 통해 (예를 들어, 인터넷을 통해) 전송될 수 있다. 그 다음, 제조 설비(1165)는 IP 코어 설계에 적어도 부분적으로 기초한 집적 회로를 제조할 수 있다. 제조된 집적 회로는 본 명세서에 설명된 적어도 하나의 실시예에 따른 동작을 수행하도록 구성될 수 있다.
예시적인 시스템 온 칩 집적 회로
도 12 내지 도 14는 본 명세서에 설명된 다양한 실시예에 따라, 하나 이상의 IP 코어를 사용하여 제조될 수 있는 예시적인 집적 회로 및 관련 그래픽 프로세서를 도시한다. 도시된 것 이외에, 부가적인 그래픽 프로세서/코어, 주변 인터페이스 제어기 또는 범용 프로세서 코어를 포함하여, 다른 로직 및 회로가 포함될 수 있다.
도 12는 실시예에 따라, 하나 이상의 IP 코어를 사용하여 제조될 수 있는 예시적인 시스템 온 칩 집적 회로(1200)를 나타내는 블록도이다. 예시적인 집적 회로는 하나 이상의 애플리케이션 프로세서(1205)(예컨대, CPU), 적어도 하나의 그래픽 프로세서(1210)를 포함하고, 이미지 프로세서(1215) 및/또는 비디오 프로세서(1220)를 더 포함할 수 있는데, 이들 프로세서 중 임의의 프로세서는 동일하거나 다수의 상이한 디자인 시설로부터의 모듈형 IP 코어일 수 있다. 집적 회로는 USB 제어기(1225), UART 제어기(1230), SPI/SDIO 제어기(1235) 및 I2S/I2C 제어기(1240)를 포함하는 주변 또는 버스 로직을 포함한다. 또한, 집적 회로는 고선명 멀티미디어 인터페이스(HDMI) 제어기(1250) 및 모바일 산업 프로세서 인터페이스(MIPI) 디스플레이 인터페이스(1255) 중 하나 이상에 결합된 디스플레이 장치(1245)를 포함할 수 있다. 저장은 플래시 메모리 및 플래시 메모리 제어기를 포함하는 플래시 메모리 서브시스템(1260)에 의해 제공될 수 있다. 메모리 인터페이스는 SDRAM 또는 SRAM 메모리 장치에 액세스하기 위해 메모리 제어기(1265)를 통해 제공될 수 있다. 일부 집적 회로는 임베디드 보안 엔진(1270)을 더 포함한다.
또한, 추가의 그래픽 프로세서/코어, 주변 인터페이스 제어기 또는 범용 프로세서 코어를 포함하여, 다른 로직 및 회로가 집적 회로(1200)의 프로세서에 포함될 수 있다.
도 13은 실시예에 따라, 하나 이상의 IP 코어를 사용하여 제조될 수 있는 시스템 온 칩 집적 회로의 예시적인 그래픽 프로세서(1310)를 나타내는 블록도이다. 그래픽 프로세서(1310)는 도 12의 그래픽 프로세서(1210)의 변형일 수 있다. 그래픽 프로세서(1310)는 정점 프로세서(1305) 및 하나 이상의 프래그먼트 프로세서(들)(1315A-1315N)를 포함한다. 그래픽 프로세서(1310)는 개별 로직을 통해 상이한 셰이더 프로그램들을 실행할 수 있어, 하나 이상의 프래그먼트 프로세서(들)(1315A-1315N)는 프래그먼트에 대한 프래그먼트(예를 들어, 픽셀) 셰이딩 동작 또는 픽셀 셰이더 프로그램을 실행하고, 정점 프로세서(1305)는 정점 셰이더 프로그램에 대한 동작을 실행하는 데 최적화되도록 할 수 있다. 정점 프로세서(1305)는 3D 그래픽 파이프라인의 정점 처리 스테이지를 수행하고 프리미티브 및 정점 데이터를 생성한다. 프래그먼트 프로세서(들)(1315A-1315N)는 정점 프로세서(1305)에 의해 생성된 프리미티브 및 정점 데이터를 사용하여 디스플레이 장치 상에 디스플레이되는 프레임 버퍼를 생성한다. 일 실시예에서, 프래그먼트 프로세서(들)(1315A-1315N)는 Direct3D API에서 제공되는 픽셀 셰이더 프로그램과 유사한 동작을 수행하는 데 사용될 수 있는 OpenGL API에서 제공된 프래그먼트 셰이더 프로그램을 실행하도록 최적화된다.
그래픽 프로세서(1310)는 하나 이상의 메모리 관리 유닛(MMU)(1320A-1320B), 캐시(들)(1325A-1325B) 및 회로 상호연결부(들)(1330A-1330B)를 추가로 포함한다. 하나 이상의 MMU(들)(1320A-1320B)는 하나 이상의 캐시(들)(1320A-1320B)에 저장된 정점 또는 이미지/텍스처 데이터 이외에, 메모리에 저장된 정점 또는 이미지/텍스처 데이터를 참조할 수 있는 정점 프로세서(1305) 및/또는 프래그먼트 프로세서(들)(1315A-1315N)를 비롯하여, 그래픽 프로세서(1300)에 대한 가상 대 물리적 어드레스 매핑을 제공한다. 일 실시예에서, 하나 이상의 MMU(들)(1325A-1325B)는 도 12의 하나 이상의 애플리케이션 프로세서(들)(1205), 이미지 프로세서(1215) 및/또는 비디오 프로세서(1220)와 연관된 하나 이상의 MMU를 포함하여, 시스템 내의 다른 MMU와 동기화될 수 있고, 그에 따라, 각각의 프로세서(1205-1220)는 공유 또는 통합 가상 메모리 시스템에 참여할 수 있다. 하나 이상의 회로 상호연결부(들)(1330A-1330B)는 실시예에 따라, 그래픽 프로세서(1310)가 SoC의 내부 버스를 통해 또는 직접 연결을 통해 SoC 내의 다른 IP 코어와 인터페이스할 수 있게 한다.
도 14는 일 실시예에 따라, 하나 이상의 IP 코어를 사용하여 제조될 수 있는 시스템 온 칩 집적 회로의 추가적인 예시적인 그래픽 프로세서(1410)를 도시하는 블록도이다. 그래픽 프로세서(1410)는 도 12의 그래픽 프로세서(1210)의 변형일 수 있다. 그래픽 프로세서(1410)는 도 13의 집적 회로(1300)의 하나 이상의 MMU(1320A-1320B), 캐시(1325A-1325B) 및 회로 상호연결부(1330A-1330B)를 포함한다.
그래픽 프로세서(1410)는 단일 코어 또는 단일 타입 코어가 정점 셰이더, 프래그먼트 셰이더, 및 연산 셰이더를 포함하는 모든 타입의 프로그램가능 셰이더 코드를 실행할 수 있는 통합 셰이더 코어 아키텍처를 제공하는 하나 이상의 셰이더 코어(1415A-1415N)를 포함한다. 존재하는 셰이더 코어의 정확한 개수는 실시예 및 구현예에 따라 다를 수 있다. 또한, 그래픽 프로세서(1410)는 실행 스레드를 하나 이상의 셰이더 코어(들)(1415A-1415N)에 디스패칭하는 스레드 디스패처로서 동작하는 인터-코어 태스크 관리자(1405) 및 타일 기반 렌더링을 위한 타일링 동작을 가속화하기 위해 타일링 유닛(1418)을 포함하되, 장면에 대한 렌더링 동작은 이미지 공간에서 세분화되어, 예를 들어 장면 내에서 로컬 공간 일관성을 활용하거나 내부 캐시의 사용을 최적화한다.
도 15는 일 실시예에 따른 컴퓨팅 장치(1500)를 도시한다. 컴퓨팅 장치(1500)(예를 들어, 스마트 웨어러블 장치, 가상 현실(VR) 장치, HMD(head-mounted display), 모바일 컴퓨터, 사물 인터넷(IoT) 장치, 랩톱 컴퓨터, 데스크톱 컴퓨터, 서버 컴퓨터 등)는 도 1의 데이터 처리 시스템(100)과 동일하므로, 간결성, 명확성 및 용이한 이해를 위해, 도 1 내지도 14를 참조하여 상술한 많은 세부 사항은 이후에 더 이상 논의되거나 반복되지 않는다.
본 명세서 전반에 걸쳐, "사용자"라는 용어는 "뷰어(viewer)", "관찰자(observer)", "사람", "개인", "최종 사용자" 등으로 서로 바꿔 언급될 수 있다. 본 명세서 전반에 걸쳐, "그래픽 도메인"과 같은 용어는 "그래픽 처리 장치", "그래픽 프로세서" 또는 간단히 "GPU"와 서로 바꿔 언급될 수 있으며 마찬가지로 "CPU 도메인" 또는 "호스트 도메인"은 "컴퓨터 처리 장치", "애플리케이션 프로세서" 또는 단순히 "CPU"와 서로 바꿔 언급될 수 있다.
컴퓨팅 장치(1500)는 서버 컴퓨터, 데스크탑 컴퓨터 등의 대형 컴퓨팅 시스템과 같은 임의의 수 및 타입의 통신 장치를 포함할 수 있으며, 셋톱 박스(예를 들어, 인터넷 기반 케이블 텔레비전 셋톱 박스 등), 위성 위치확인 시스템(GPS) 기반 장치 등을 더 포함할 수 있다. 컴퓨팅 장치(1500)는 스마트폰, 개인 휴대 정보 단말기(PDA), 태블릿 컴퓨터, 랩톱 컴퓨터, 전자책 단말기, 스마트 텔레비전, 텔레비전 플랫폼, 웨어러블 장치(예를 들어, 안경, 시계, 팔찌, 스마트카드, 보석, 의류 품목 등), 미디어 플레이어 등과 같은 통신 장치로서 동작하는 모바일 컴퓨팅 장치를 포함할 수 있다. 예를 들어, 일 실시예에서, 컴퓨팅 장치(1500)는 단일 칩 상에 컴퓨팅 장치(1500)의 다양한 하드웨어 및/또는 소프트웨어 컴포넌트를 집적하는 시스템 온 칩("SoC" 또는 "SOC")과 같은 집적 회로("IC")를 호스팅하는 컴퓨터 플랫폼을 채용하는 모바일 컴퓨팅 장치를 포함할 수 있다.
도시된 바와 같이, 일 실시예에서, 컴퓨팅 장치(1500)는 임의의 개수 및 타입의 하드웨어 및/또는 소프트웨어 컴포넌트를 포함할 수 있는데, 예를 들어 (제한없이) 그래픽 처리 장치(1514), 그래픽 드라이버("GPU 드라이버", "그래픽 드라이버 로직", "드라이버 로직", 사용자 모드 드라이버(UMD), UMD, 사용자 모드 드라이버 프레임워크(UMDF), UMDF, 또는 단순히 "드라이버"로도 지칭됨)(1516), 중앙 처리 장치(1512), 메모리(1508), 네트워크 장치, 드라이버 등, 및 터치스크린, 터치 패널, 터치 패드, 가상 또는 정규 키보드, 가상 또는 정규 마우스, 포트, 커넥터 등과 같은 입/출력(I/O) 소스(1504)를 포함할 수 있다. 컴퓨팅 장치(1500)는 컴퓨터 장치(1500)의 하드웨어 및/또는 물리적 리소스와 사용자 사이의 인터페이스로서 기능하는 운영 체제(OS)(1506)를 포함할 수 있다. CPU(1512)는 도 1의 프로세서(102)와 같은 하나 또는 프로세서를 포함할 수 있는 반면, GPU(1514)는 도 1의 그래픽 프로세서(들)(108)와 같은 하나 이상의 그래픽 프로세서를 포함할 수 있다.
"노드", "컴퓨팅 노드", "서버", "서버 장치", "클라우드 컴퓨터", "클라우드 서버", "클라우드 서버 컴퓨터", "머신", "호스트 머신", "장치", "컴퓨팅 장치", "컴퓨터", "컴퓨팅 시스템" 등과 같은 용어는 본 명세서에서 상호 교환가능하게 사용될 수 있다. "애플리케이션", "소프트웨어 애플리케이션", "프로그램", "소프트웨어 프로그램", "패키지", "소프트웨어 패키지" 등과 같은 용어는 본 명세서에서 상호 교환가능하게 사용될 수 있음을 또한 알아야 한다. 또한, "작업", "입력", "요청", "메시지" 등과 같은 용어는 본 명세서에서 상호 교환가능하게 사용될 수 있다.
도 1 내지 도 14를 참조하여 더 설명되는 바와 같이, 전술한 그래픽 파이프라인의 일부 프로세스는 소프트웨어로 구현되는 반면, 나머지는 하드웨어로 구현된다. 그래픽 파이프라인은 CPU(1512)가 CPU(1512)에 포함되거나 함께 배치될 수 있는 GPU(1514)와 함께 동작하도록 설계된 그래픽 코프로세서 설계로 구현될 수 있다. 일 실시예에서, GPU(1514)는 그래픽 렌더링에 관한 종래의 기능을 수행하는 임의의 개수 및 타입의 종래의 소프트웨어 및 하드웨어 로직, 및 본 명세서에 개시된 다양한 신규 기능을 수행하기 위해 도 1의 명령어(121)와 같은 임의의 개수 및 타입의 명령어를 실행하는 신규 소프트웨어 및 하드웨어 로직을 채용할 수 있다.
전술한 바와 같이, 메모리(1508)는 객체 정보를 갖는 애플리케이션 데이터베이스를 포함하는 랜덤 액세스 메모리(RAM)를 포함할 수 있다. 도 1의 메모리 제어기 허브(116)와 같은 메모리 제어기 허브는 그래픽 파이프라인 처리를 위해 RAM의 데이터에 액세스하고 이를 GPU(1514)에 전송할 수 있다. RAM은 DDR RAM(double data rate RAM), EDO RAM(extended data output RAM) 등을 포함할 수 있다. CPU(1512)는 그래픽 파이프라이닝 기능을 공유하기 위해 도 3을 참조하여 설명한 바와 같이 하드웨어 그래픽 파이프라인과 상호작용한다. 처리된 데이터는 하드웨어 그래픽 파이프라인의 버퍼에 저장되고, 상태 정보는 메모리(1508)에 저장된다. 이어서, 결과적인 이미지는 이 이미지를 디스플레이하기 위해 도 3의 디스플레이 장치(320)와 같은 디스플레이 컴포넌트와 같은 I/O 소스(1504)로 전송된다. 디스플레이 장치는 정보를 사용자에게 디스플레이하기 위한 음극선 관(CRT), 박막 트랜지스터(TFT), 액정 디스플레이(LCD), 유기 발광 다이오드(OLED) 어레이 등과 같은 다양한 타입일 수 있다는 것을 알아야 한다.
메모리(1508)는 버퍼(예를 들어, 프레임 버퍼)의 사전 할당된 영역을 포함할 수 있지만, 당업자라면, 실시예가 그에 한정되지 않으며, 하위 그래픽 파이프라인에 액세스가능한 임의의 메모리가 사용될 수 있다는 것을 이해해야 한다. 컴퓨팅 장치(1500)는 도 1에서 참조된 입/출력(I/O) 제어 허브(ICH)(130), 하나 이상의 I/O 소스(1504) 등을 더 포함할 수 있다.
CPU(1512)는 컴퓨팅 시스템이 구현하는 임의의 소프트웨어 루틴을 수행하기 위해 명령어를 실행하기 위한 하나 이상의 프로세서를 포함할 수 있다. 명령어는 흔히 데이터에 대해 수행되는 일종의 동작을 포함한다. 데이터 및 명령어 모두는 시스템 메모리(1508) 및 임의의 연관된 캐시에 저장될 수 있다. 캐시는 일반적으로 시스템 메모리(1508)보다 짧은 대기 시간(latency times)을 갖도록 설계되는데, 예를 들어, 캐시는 프로세서(들)와 동일한 칩(들) 상에 집적되고 및/또는 보다 빠른 정적 RAM(SRAM) 셀로 구성되는 반면, 시스템 메모리(1508)는 보다 느린 동적 RAM(DRAM) 셀로 구성될 수 있다. 시스템 메모리(1508)와는 대조적으로 보다 빈번하게 사용되는 명령어 및 데이터를 캐시에 저장하려는 경향으로 인해, 컴퓨팅 장치(1500)의 전반적인 성능 효율이 향상된다. 일부 실시예에서, GPU(1514)는 CPU(1512)의 일부(예를 들어, 물리적 CPU 패키지의 일부)로서 존재할 수 있고, 이 경우 메모리(1508)는 CPU(1512) 및 GPU(1514)에 의해 공유되거나 분리되어 유지될 수 있다는 것을 알아야 한다.
시스템 메모리(1508)는 컴퓨팅 장치(1500) 내의 다른 컴포넌트에 이용가능게 될 수 있다. 예를 들어, 컴퓨팅 장치(1500)에 대한 다양한 인터페이스(예를 들어, 키보드 및 마우스, 프린터 포트, 근거리 통신망(LAN) 포트, 모뎀 포트 등)로부터 수신되거나 또는 컴퓨터 장치(1500)의 내부 저장 요소(예를 들어, 하드 디스크 드라이브)의로부터 검색된 임의의 데이터(예를 들어, 입력 그래픽 데이터)는 종종 소프트웨어 프로그램의 구현에서 하나 이상의 프로세서(들)에 의해 조작되기 전에 일시적으로 시스템 메모리(1508)에 큐잉된다. 유사하게, 소프트웨어 프로그램이 컴퓨팅 시스템 인터페이스들 중 하나를 통해 컴퓨팅 장치(1500)로부터 외부 엔티티로 전송되어야 하거나 또는 내부 저장 요소에 저장되어야 한다고 결정하는 데이터는 종종 전송되기 또는 저장되기 전에 시스템 메모리(1508)에 일시적으로 큐잉된다.
또한, 예를 들어, 도 1의 ICH(130)와 같은 ICH는 그러한 데이터가 시스템 메모리(1508)와 그의 적절한 대응하는 컴퓨팅 시스템 인터페이스(및 컴퓨팅 시스템이 그와 같이 설계되었다면, 내부 저장 장치) 사이에서 적절히 전달되도록 보장하기 위해 사용될 수 있고 자신과 관찰된 I/O 소스/장치(504) 사이에 양방향 점대점 링크를 가질 수 있다. 유사하게, 도 1의 MCH(116)와 같은 MCH는 CPU(1512) 및 GPU(1514), 인터페이스 및 내부 저장 요소 사이에서 서로에 대해 시간적으로 인접하여 발생할 수 있는 시스템 메모리(1508) 액세스에 대한 다양한 경합 요청을 관리하는데 사용될 수 있다.
I/O 소스(1504)는 컴퓨팅 장치(1500)(예를 들어, 네트워킹 어댑터)로 및/또는 그로부터 데이터를 전송하기 위해, 또는 컴퓨팅 장치(1500) 내의 대규모 비휘발성 저장 장치(예를 들어, 하드 디스크 드라이브)를 위해 구현되는 하나 이상의 I/O 장치를 포함할 수 있다. 영숫자 키 및 그 밖의 다른 키를 포함하는 사용자 입력 장치는 GPU(1514)에 정보 및 커맨드 선택을 전달하는데 사용될 수 있다. 다른 타입의 사용자 입력 장치는 방향 정보 및 커맨드 선택을 GPU(1514)에 전달하고 디스플레이 장치상의 커서 이동을 제어하기 위한 마우스, 트랙볼, 터치스크린, 터치 패드 또는 커서 방향 키와 같은 커서 제어이다. 컴퓨터 장치(1500)의 카메라 및 마이크로폰 어레이가 제스처를 관찰하고, 오디오 및 비디오를 기록하고, 시각 및 오디오 커맨드를 수신 및 전송하는데 사용될 수 있다.
컴퓨팅 장치(1500)는 LAN, 광역 네트워크(WAN), 메트로폴리탄 지역 네트워크(MAN), 개인 영역 네트워크(PAN), 블루투스, 클라우드 네트워크, 모바일 네트워크(예를 들어, 3세대(3G), 4세대(4G) 등), 인트라넷, 인터넷 등과 같은 네트워크에 대한 액세스를 제공하는 네트워크 인터페이스(들)를 더 포함할 수 있다. 네트워크 인터페이스(들)는 예를 들어 하나 이상의 안테나(들)를 나타낼 수 있는 안테나를 갖는 무선 네트워크 인터페이스를 포함할 수 있다. 네트워크 인터페이스(들)는 또한 예를 들어, 이더넷 케이블, 동축 케이블, 광섬유 케이블, 직렬 케이블 또는 병렬 케이블일 수 있는 네트워크 케이블을 통해 원격 장치와 통신하기 위한 유선 네트워크 인터페이스를 포함할 수 있다.
네트워크 인터페이스(들)는 예를 들어, IEEE 802.11b 및/또는 IEEE 802.11 표준을 준수함으로써 LAN에 대한 액세스를 제공할 수 있고, 및/또는 무선 네트워크 인터페이스는 예를 들어, 블루투스 표준을 준수함으로써 개인 영역 네트워크에 대한 액세스를 제공할 수 있다. 표준의 이전 버전 및 후속 버전을 포함하여 다른 무선 네트워크 인터페이스 및/또는 프로토콜도 지원될 수 있다. 무선 LAN 표준을 통한 통신에 더하여, 또는 그 대신에, 네트워크 인터페이스(들)는 예를 들어 TDMA(Time Division, Multiple Access) 프로토콜, GSM(Global Systems for Mobile Communication) 프로토콜, CDMA(Code Division, Multiple Access) 프로토콜 및/또는 임의의 다른 타입의 무선 통신 프로토콜을 제공할 수 있다.
네트워크 인터페이스(들)는 하나 이상의 통신 인터페이스를 포함할 수 있는데, 예를 들어, 모뎀, 네트워크 인터페이스 카드, 또는 예를 들어, LAN 또는 WAN을 지원하기 위한 통신 링크를 제공하기 위해 이더넷, 토큰 링, 또는 다른 타입의 물리적 유선 또는 무선 부착물에 연결하기 위해 사용되는 것과 같은 다른 잘 알려진 인터페이스 장치를 포함할 수 있다. 이러한 방식으로, 컴퓨터 시스템은 또한 예를 들어 인트라넷 또는 인터넷을 포함하는 종래의 네트워크 기반구조를 통해 다수의 주변 장치, 클라이언트, 제어 표면, 콘솔 또는 서버에 결합될 수 있다.
상술한 예보다 더 적거나 더 많은 장비를 갖춘 시스템이 특정 구현에 대해 선호될 수 있음을 이해해야 한다. 따라서, 컴퓨팅 장치(1500)의 구성은 가격 제약, 성능 요구사항, 기술적 개선 또는 다른 상황과 같은 수많은 요인에 따라 구현마다 다를 수 있다. 전자 장치 또는 컴퓨터 시스템(1500)의 예는 모바일 장치, 개인 디지털 보조 단말기, 모바일 컴퓨팅 장치, 스마트폰, 셀룰러 전화, 핸드셋, 단방향 페이저, 양방향 페이저, 메시징 장치, 컴퓨터, 개인용 컴퓨터(PC), 데스크탑 컴퓨터, 랩탑 컴퓨터, 노트북 컴퓨터, 핸드헬드 컴퓨터, 태블릿 컴퓨터, 서버, 서버 어레이 또는 서버 팜, 웹 서버, 네트워크 서버, 인터넷 서버, 워크스테이션, 미니 컴퓨터, 메인 프레임 컴퓨터, 수퍼컴퓨터, 네트워크 기기, 웹 기기, 분산형 컴퓨팅 시스템, 멀티프로세서 시스템, 프로세서 기반 시스템, 소비자 전자기기, 프로그램가능 소비자 전자기기, 텔레비전, 디지털 텔레비전, 셋톱 박스, 무선 액세스 포인트, 기지국, 가입자국, 모바일 가입자 센터, 무선 네트워크 제어기, 라우터, 허브, 게이트웨이, 브리지, 스위치, 머신, 또는 이들의 조합을 (제한없이) 포함할 수 있다.
실시예는 패어런트보드(parentboard), 하드와이어드 로직, 메모리 장치에 의해 저장되고 마이크로프로세서에 의해 실행되는 소프트웨어, 펌웨어, ASIC(application specific integrated circuit), 및/또는 FPGA(filed programmable gate array)를 사용하여 상호연결된 하나 이상의 마이크로칩 또는 집적 회로 중 임의의 하나 또는 이들의 조합으로서 구현될 수 있다. "로직"이라는 용어는 예로서, 소프트웨어 또는 하드웨어 및/또는 소프트웨어와 하드웨어의 조합을 포함할 수 있다.
실시예는 예를 들어 머신 실행가능 명령어가 저장된 하나 이상의 머신 판독가능 매체를 포함하는 컴퓨터 프로그램 제품으로서 제공될 수 있는데, 이 머신 실행가능 명령어는 컴퓨터, 컴퓨터들의 네트워크 또는 다른 전자 장치와 같은 하나 이상의 머신에 의해 실행되는 경우, 하나 이상의 머신으로 하여금 본 명세서에 기술된 실시예에 따른 동작을 수행하게 할 수 있다. 머신 판독가능 매체는 플로피 디스켓, 광학 디스크, CD-ROM(Compact Disc-Read Only Memory) 및 광 자기 디스크, ROM, RAM, EPROM(Erasable Programmable Read Only Memory), EEPROM(Electrically Erasable Programmable Read Only Memory), 자기 또는 광학 카드, 플래시 메모리, 또는 머신 실행가능 명령어를 저장하기에 적합한 다른 타입의 매체/머신 판독가능 매체를 포함할 수 있으나, 이에 국한되지는 않는다.
또한, 실시예들은 컴퓨터 프로그램 제품으로서 다운로드될 수 있으며, 이 프로그램은 통신 링크(예를 들어, 모뎀 및/또는 네트워크 연결)를 통해 반송파 또는 다른 전파 매체 내에 포함되고 및/또는 그에 의해 변조된 하나 이상의 데이터 신호를 통해 원격 컴퓨터(예를 들어, 서버)에서 요청 컴퓨터(예를 들어, 클라이언트)로 전송될 수 있다.
다양한 실시예에 따르면, 그래픽 작업부하는 컴퓨팅 장치(1500)에서 처리될 수 있다. 실시예에 따라, 작업부하는 CPU(1512) 또는 GPU(1514)에서 처리될 수 있다. 이러한 실시예에서, FPGA는 성능 핵심 루프의 실행을 가속화시키고 프로세서 코어 상의 리소스를 자유롭게 하기 위해 CPU(1512) 및 GPU(1514)에 포함된 각각의 처리 코어에 연결된다. 다른 실시예들에서, 상이한 타입의 필드 프로그램가능 집적 회로(예를 들어, 제조 후 현장에서 프로그램 가능)가 구현될 수 있다.
FPGA는 코어의 데이터 액세스, 명령어 세트 아키텍처(ISA) 및 마이크로아키텍처 제한에 국한되지 않기 때문에 핵심 루프를 실행하는 데 있어 높은 성능과 전력 효율성을 갖는(예를 들어, 명령어 디코딩 및 고가의 데이터 추출/셔플링/치환을 피할 수 있는) 한편, 성능을 크게 향상시킬 수 있는 작업부하 전용 SIMD(Single Instruction, Multiple Data) 구성을 갖는다. 대기시간이 중요한 작업부하(예를 들어, 레이 트레버설(ray traversal) 또는 텍스처 액세스)를 특징으로 하는 실시예에서, 더 많은 수의 독립적인 컨텍스트/스레드/파이버를 제공함으로써 FPGA 내에 효율적인 대기시간 은닉이 구현될 수 있다.
도 16a 및 도 16b는 처리 코어에 결합된 FPGA의 실시예를 도시한다. 도 16a는 각각의 코어(1610)에 연결된 FPGA(120)를 갖는 CPU(1512)의 일 실시예를 도시한다. 예를 들어, FPGA(1620(0) 내지 1620(N))은 코어(1610(0) 내지 1120(N))에 각각 결합된다. 따라서, 각 코어는 코어가 가속할 작업부하 커널을 선택할 수 있게 하는 소형 FPGA를 포함한다. 프로세서 코어 당 소형 FPGA를 사용하면 FPGA(1620)을 신속하게 재프로그래밍할 수 있으므로, 작업부하의 수명 동안 FPGA 프로그램/구현를 효율적으로 교환할 수 있게 된다. 추가 실시예에서, 하나 이상의 FPGA(1620)의 세트가 상이한 태스크들을 동시에 처리하도록 할당될 수 있다. 따라서, 하나 이상의 FPGA(1620)는 상이한 커널을 실행하도록 프로그래밍될 수 있어, 코어(1610)는 다른 커널을 가속화할 수 있다.
CPU 실시예에서, FPGA(1620)는 코어(1610)에 결합된 캐시 메모리 장치(1640)에 독립적인 에이전트로서 결합된다. 일 실시예에서, 각각의 캐시 메모리 장치(1640)는 모든 데이터 액세스에 대해 캐시 코히어런스를 유지하면서, 높은 대역폭 및 낮은 대기시간의 데이터 연결을 유지하기 위해 코어(1610)에 연결된 L2 캐시(예를 들어, 코어의 L1와 유사함)이다. 코어(1610) L2에 FPGA(1620)을 장착하면 높은 대역폭과 매우 낮은 대기시간의 데이터 액세스 연결이 제공되는데, 이는 FPGA 리소스를 사용하여 FPGA(1620) 내에서 유사한 대형 캐시 기능을 추가하는 것을 하지 않아도 되게 한다. 따라서, FPGA(1610) 내의 더 많은 공간이 기능 유닛을 위해 할당될 수 있다.
레이 트래버설(ray traversal)과 같은, 높은 L2 캐시 적중률(예컨대, > 90 %)을 가진 작업부하의 경우, FPGA(1620) 당 16-32 스레드/파이버와 함께 직접 L2 연결을 사용하면 상당한 성능 향상을 제공하여 커널의 처리량을 완전하게 한다. 이것은 현재의 소프트웨어 구현에서 대기시간 제한 결과와 구별된다. 추가 실시예에서, FPGA를 전용 L2 에이전트로서 구비하고, 따라서 모든 데이터 전송이 L2를 통해 이루어지도록 강제함으로써, 유효한 캐시 일관성 상태를 유지한다.
도 16b는 도 16a에 도시된 것과 유사한 각각의 코어(1610)에 연결된 FPGA(120)를 갖는 GPU(1514)의 실시예를 도시한다. 그러나 GPU 실시예에서, 각각의 로컬 FPGA(1620)는 코어(1610)를 지원하는 로컬 메모리(160)에 연결된다. 따라서 각각의 로컬 FPGA는 공유 멀티프로세서(SM) 레벨에서 사용된다. 일 실시예에서, SM은 몇몇 공유 유닛(예를 들어, 공유 텍스처 샘플러, 래스터 엔진 등)을 가지므로, 각각의 FPGA(1620)는 FPGA(1620)가 SM의 로컬 메모리 및 레지스터 파일과 상호 작용하게 함으로써 다른 공유 리소스와 함께 동작한다.
도 17a는 FPGA(1620)에 연결된 코어(1610)의 일 실시예를 도시한다. 일 실시예에서, 코어(1610)는 결합된 FPGA(1620)의 실행을 제어하기 위한 제어기(1710)를 포함한다. 일 실시예에서, 제어기(1710)는 특수 메모리 맵핑된 I/O(MMIO) 영역을 통해 FPGA(1620)를 제어한다. 그러나, 다른 실시예에서, 제어기(1710)는 전용 프로세서(예컨대, x86) 명령어에 의해 FPGA(1620)를 제어할 수 있다. 또 다른 실시예에서, 리소스(예를 들어, 페이지 테이블, 내부 메모리<->L2 또는 링/메시<->L2 데이터 전송 큐, 등)는 코어(1610)와 공유된다.
도 17b는 다수의 코어(1610)(예를 들어, 코어(0) 및 코어(1))가 FPGA(1620)에 연결되는 실시예를 도시한다. 이 실시예에서, 코어(0) 및 코어(1) 내의 각각의 제어기(1710(a) 및 1710(b))는 결합된 FPGA(1620)의 실행을 제어한다. 이러한 실시예에서, 코어(0) 및 코어(1)는 공통 최종 레벨 캐시를 공유할 수 있다. 따라서, FPGA(1620)는 최종 레벨 캐시에 결합된다.
코어 로컬 FPGA(1620)의 구현은 코어가 독립적으로 동작할 수 있게 함으로써 리소스 경합을 감소시킨다. 각각의 코어가 독립적으로 동작할 수 있기 때문에, FPGA(1620)는 보다 쉽게 가상화되고 파티셔닝될 수 있다. 예를 들어, N개의 코어(각각은 자체 FPGA를 가짐)를 가진 칩은 N/M 코어를 가진 M개의 칩으로 보이도록 파티셔닝될 수 있다.
"GPU", "GPU 도메인", "GPGPU", "CPU", "CPU 도메인", "그래픽 드라이버", "그래픽 드라이버", "작업부하", "애플리케이션", "프레임", "작업 유닛", "드로잉", "디스패치", "API", "하드웨어", "소프트웨어", "에이전트", "그래픽 드라이버", "커널 모드 그래픽 드라이버", "사용자 모드 드라이버", "UMD", "사용자 모드 드라이버 프레임워크", "UMDF", "비트", "바이트", "보간" 등과 같은 특정 브랜드, 단어, 용어, 어구, 이름, 및/또는 두문자어의 임의의 사용은 본 명세서 이외의 제품 또는 문헌에서 상기 표현이 사용된 소프트웨어나 장치로 실시예를 제한한 것으로 읽혀서는 안된다.
"일 실시예", "실시예", "예시적인 실시예", "다양한 실시예" 등의 언급은 그와 같이 기술된 실시예(들)가 특정한 특징, 구조 또는 특성을 포함할 수 있지만, 모든 실시예가 그 특정 특징, 구조 또는 특성을 반드시 포함할 필요는 없음을 나타낸다. 또한, 일부 실시예는 다른 실시예에 대해 설명된 일부 또는 전부의 특징을 가질 수도 있고 전혀 가지지 않을 수도 있다.
전술한 명세서에서, 실시예들은 특정 예시적인 실시예를 참조하여 설명되었다. 그러나, 첨부된 청구항에 설명된 실시예의 보다 넓은 사상 및 범주를 벗어나지 않으면서 다양한 수정 및 변경이 이루어질 수 있음이 자명할 것이다. 따라서, 명세서 및 도면은 제한적인 의미라기보다는 예시적인 것으로 간주되어야 한다.
다음의 설명 및 청구 범위에서, "결합된"이라는 용어는 그 파생어와 함께 사용될 수 있다. "결합된"은 두 개 이상의 요소가 서로 협력하거나 상호작용함을 나타내기 위해 사용되지만 이 두 개 이상의 요소 사이에 물리적 또는 전기적 컴포넌트가 개입될 수도 있고 또는 개입되지 않을 수도 있다.
청구 범위에서 사용된 바와 같이, 달리 명시하지 않는 한, 일반적인 요소를 기술하기 위해 서수 형용사 "제1", "제2", "제3" 등의 사용은 단순히 유사한 요소의 상이한 인스턴스가 참조되는 것을 나타내며, 그렇게 기술된 요소들이 시간적으로, 공간적으로, 순위에 따라, 또는 임의의 다른 방식으로 주어진 시퀀스로 있어야한다는 것을 의미하지는 않는다.
다음의 조항 및/또는 예시는 추가적인 실시예 또는 예시에 관한 것이다. 예시에서의 특정사항은 하나 이상의 실시예에서 어느 곳에서나 사용될 수 있다. 상이한 실시예 또는 예시의 다양한 특징들은 포함된 몇몇 특징들과 다양하게 결합될 수 있고, 다른 것들은 다양한 상이한 애플리케이션들에 적합하도록 배제될 수 있다. 예시들은 방법, 방법의 행위를 수행하기 위한 수단, 머신에 의해 수행되면 머신으로 하여금 방법, 또는 본 명세서에 기술된 실시예 및 예시에 따라 하이브리드 통신을 용이하게 하는 장치 또는 시스템의 행위를 수행하게 하는 명령어를 포함하는 적어도 하나의 머신 판독가능 매체와 같은 청구대상을 포함할 수 있다.
일부 실시예는 제1 처리 코어 및 제2 처리 코어를 포함하는 복수의 처리 코어와, 제1 처리 코어에 결합되어 이 제1 처리 코어에서 처리되는 작업부하의 실행을 가속화시키는 제1 필드 프로그램가능 게이트 어레이(FPGA)와, 제2 처리 코어에 결합되어 이 제2 처리 코어에서 처리되는 작업부하의 실행을 가속화시키는 제2 FPGA를 포함하는 처리 장치를 포함하는 예시 1에 관한 것이다.
예시 2는 예시 1의 청구대상을 포함하되, 제1 및 제2 FPGA는 작업부하에서 성능이 중요한 루프의 실행을 가속화한다.
예시 3은 예시 1 및 2의 청구대상을 포함하되, 제1 처리 코어는 제1 FPGA에서 가속화될 제1 작업부하를 선택하고 제2 처리 코어는 제2 FPGA에서 가속화될 제2 작업부하를 선택한다.
예시 4는 예시 1 내지 3의 청구대상을 포함하되, 제1 FPGA는 제1 타입의 작업부하를 실행하도록 프로그래밍되고 제2 FPGA는 제2 타입의 작업부하를 실행하도록 프로그래밍된다.
예시 5는 예시 1 내지 4의 청구대상을 포함하되, 제1 및 제2 FPGA는 대기시간 은닉을 수행하기 위해 하나 이상의 독립적인 스레드를 제공한다.
예시 6은 예시 1 내지 5의 청구대상을 포함하되, 제1 처리 코어는 제1 FPGA의 실행을 제어하는 제1 제어기를 포함하고, 제2 처리 코어는 제2 FPGA의 실행을 제어하는 제2 제어기를 포함한다.
예시 7은 예시 1 내지 6의 청구대상을 포함하되, 제1 제어기 및 제2 제어기는 메모리 맵핑된 I/O(MMIO) 영역을 통해 제1 FPGA 및 제2 FPGA의 실행을 제어한다.
예시 8은 예시 1 내지 7의 청구대상을 포함하되, 제1 제어기 및 제2 제어기는 전용 프로세서 명령어를 통해 제1 FPGA 및 제2 FPGA의 실행을 제어한다.
예시 9는 예시 1 내지 8의 청구대상을 포함하되, 처리 장치는 범용 마이크로프로세서를 포함한다.
예시 10은 예시 1 내지 9의 청구대상을 포함하되, 제1 처리 코어 및 제1 FPGA에 결합된 제1 캐시 메모리 장치 및 제2 처리 코어 및 제2 FPGA에 결합된 제2 캐시 메모리 장치를 더 포함한다.
예시 11은 예시 1 내지 10의 청구대상을 포함하되, 제1 FPGA는 제1 캐시 메모리 장치에 대한 독립적인 에이전트이고 제2 FPGA는 제2 캐시 메모리 장치에 대한 독립적인 에이전트이다.
예시 12는 예시 1 내지 11의 청구대상을 포함하되, 제1 FPGA에 연결된 제3 처리 코어와, 제1 처리 코어, 제3 처리 코어 및 제1 FPGA에 연결된 제1 캐시 메모리 장치를 더 포함하고, 제1 FPGA는 제1 처리 코어 및 제3 처리 코어에서 처리되는 작업부하의 실행을 가속화한다.
예시 13은 예시 1 내지 12의 청구대상을 포함하되, 처리 장치는 그래픽 처리 장치(GPU)를 포함한다.
예시 14는 예시 1 내지 13의 청구대상을 포함하되, 제1 처리 코어 및 제1 FPGA에 결합된 제1 메모리 장치와, 제2 처리 코어 및 제2 FPGA에 결합된 제2 메모리 장치를 더 포함한다.
예시 15는 예시 1 내지 14의 청구대상을 포함하되, 제1 FPGA에 연결된 제3 처리 코어와, 제1 처리 코어, 제3 처리 코어 및 제1 FPGA에 연결된 제1 메모리 장치를 더 포함하고, 제1 FPGA는 제1 처리 코어 및 제3 처리 코어에서 처리되는 작업부하의 실행을 가속화한다.
일부 실시예는 제1 처리 코어 및 제2 처리 코어를 포함하는 복수의 처리 코어와, 제1 처리 코어에 결합되어 이 제1 처리 코어에서 처리되는 작업부하의 실행을 가속화시키는 제1 필드 프로그램가능 게이트 어레이(FPGA)와, 제1 처리 코어 및 제1 FPGA에 연결된 제1 캐시 메모리 장치와, 제2 처리 코어에 결합되어 이 제2 처리 코어에서 처리되는 작업부하의 실행을 가속시키는 제2 FPGA와, 제2 처리 코어 및 제2 FPGA에 연결된 제2 캐시 메모리 장치를 포함하는 중앙 처리 장치(CPU)를 포함하는 예시 16에 관한 것이다.
예시 17은 예시 16의 청구대상을 포함하되, 제1 처리 코어는 제1 FPGA에서 가속화될 제1 작업부하를 선택하고 제2 처리 코어는 제2 FPGA에서 가속화될 제2 작업부하를 선택한다.
예시 18은 예시 16 및 17의 청구대상을 포함하되, 제1 FPGA는 제1 타입의 작업부하를 실행하도록 프로그래밍되고 제2 FPGA는 제2 타입의 작업부하를 실행하도록 프로그래밍된다.
예시 19는 예시 16 내지 18의 청구대상을 포함하되, 제1 처리 코어는 제1 FPGA의 실행을 제어하는 제1 제어기를 포함하고, 제2 처리 코어는 제2 FPGA의 실행을 제어하는 제2 제어기를 포함한다.
예시 20은 예시 16 내지 19의 청구대상을 포함하되, 제1 FPGA 및 제1 캐시 메모리 장치에 연결된 제3 처리 코어를 더 포함하고, 제1 FPGA는 제1 처리 코어 및 제3 처리 코어에서 처리된 작업부하의 실행을 가속화한다.
일부 실시예는 제1 그래픽 처리 코어 및 제2 그래픽 처리 코어를 포함하는 복수의 그래픽 처리 코어와, 제1 그래픽 처리 코어에 결합되어 이 제1 그래픽 처리 코어에서 처리되는 그래픽 작업부하의 실행을 가속화시키는 제1 필드 프로그램가능 게이트 어레이(FPGA)와, 제1 그래픽 처리 코어 및 제1 FPGA에 연결된 제1 메모리 장치와, 제2 그래픽 처리 코어에 결합되어 이 제2 그래픽 처리 코어에서 처리되는 그래픽 작업부하의 실행을 가속화시키는 제2 FPGA와, 제2 그래픽 처리 코어 및 제2 FPGA에 연결된 제2 메모리 장치를 포함하는 그래픽 처리 장치(GPU)를 포함하는 예시 21에 관한 것이다.
예시 22는 예시 21의 청구대상을 포함하되, 제1 그래픽 처리 코어는 제1 FPGA에서 가속화될 제1 작업부하를 선택하고 제2 그래픽 처리 코어는 제2 FPGA에서 가속화될 제2 작업부하를 선택한다.
예시 23은 예시 21 및 22의 청구대상을 포함하되, 제1 FPGA는 제1 타입의 그래픽 작업부하를 실행하도록 프로그래밍되고 제2 FPGA는 제2 타입의 그래픽 작업부하를 실행하도록 프로그래밍된다.
예시 24는 예시 21 내지 23의 청구대상을 포함하되, 제1 그래픽 처리 코어는 제1 FPGA의 실행을 제어하는 제1 제어기를 포함하고, 제2 그래픽 처리 코어는 제2 FPGA의 실행을 제어하는 제2 제어기를 포함한다.
예시 25은 예시 21 내지 24의 청구대상을 포함하되, 제1 FPGA 및 제1 메모리 장치에 연결된 제3 그래픽 처리 코어를 더 포함하고, 제1 FPGA는 제1 그래픽 처리 코어 및 제3 그래픽 처리 코어에서 처리되는 작업부하의 실행을 가속화한다.
도면 및 전술한 상세한 설명은 실시예의 예를 제공한다. 당업자라면, 설명된 요소들 중 하나 이상은 단일 기능 요소로 결합될 수 있다는 것을 이해할 것이다. 대안적으로, 특정 요소는 다수의 기능 요소로 분할될 수도 있다. 일 실시예로부터의 요소들은 다른 실시예에 추가될 수 있다. 예를 들어, 본 명세서에 기술된 프로세스의 순서는 변경될 수 있으며 본 명세서에 설명된 방식으로 국한되지는 않는다. 또한, 임의의 흐름도의 동작은 도시된 순서로 구현될 필요는 없으며, 또한 모든 동작이 반드시 수행될 할 필요도 없다. 또한, 다른 동작에 종속되지 않는 동작은 그 다른 동작과 병행하여 수행될 수 있다. 실시예의 범위는 이들 특정 예에 의해 결코 제한되지 않는다. 구조, 치수 및 재료 사용에서의 차이와 같은 다수의 변형예가 명세서에 명시적으로 제공되는지 여부에 관계없이 가능하다. 실시예의 범위는 적어도 이하의 청구 범위에 의해 주어진 바와 같이 넓다.

Claims (25)

  1. 제1 처리 코어 및 제2 처리 코어를 포함하는 복수의 처리 코어와,
    상기 제1 처리 코어에 결합되어 상기 제1 처리 코어에서 처리되는 작업부하의 실행을 가속화시키는 제1 필드 프로그램가능 게이트 어레이(FPGA)와,
    상기 제2 처리 코어에 결합되어 상기 제2 처리 코어에서 처리되는 작업부하의 실행을 가속화시키는 제2 FPGA를 포함하는
    처리 장치.
  2. 제1항에 있어서,
    상기 제1 및 제2 FPGA는 작업부하에서 성능이 중요한 루프의 실행을 가속화하는
    처리 장치.
  3. 제2항에 있어서,
    상기 제1 처리 코어는 상기 제1 FPGA에서 가속화될 제1 작업부하를 선택하고 상기 제2 처리 코어는 상기 제2 FPGA에서 가속화될 제2 작업부하를 선택하는
    처리 장치.
  4. 제2항에 있어서,
    상기 제1 FPGA는 제1 타입의 작업부하를 실행하도록 프로그래밍되고 상기 제2 FPGA는 제2 타입의 작업부하를 실행하도록 프로그래밍되는
    처리 장치.
  5. 제2항에 있어서,
    상기 제1 및 제2 FPGA는 대기시간 은닉을 수행하기 위해 하나 이상의 독립적인 스레드를 제공하는
    처리 장치.
  6. 제2항에 있어서,
    상기 제1 처리 코어는 상기 제1 FPGA의 실행을 제어하는 제1 제어기를 포함하고, 상기 제2 처리 코어는 상기 제2 FPGA의 실행을 제어하는 제2 제어기를 포함하는
    처리 장치.
  7. 제6항에 있어서,
    상기 제1 제어기 및 상기 제2 제어기는 메모리 맵핑된 I/O(MMIO) 영역을 통해 상기 제1 FPGA 및 상기 제2 FPGA의 실행을 제어하는
    처리 장치.
  8. 제6항에 있어서,
    상기 제1 제어기 및 상기 제2 제어기는 전용 프로세서 명령어를 통해 상기 제1 FPGA 및 상기 제2 FPGA의 실행을 제어하는
    처리 장치.
  9. 제2항에 있어서,
    상기 처리 장치는 범용 마이크로프로세서를 포함하는
    처리 장치.
  10. 제9항에 있어서,
    상기 제1 처리 코어 및 상기 제1 FPGA에 결합된 제1 캐시 메모리 장치와,
    상기 제2 처리 코어 및 상기 제2 FPGA에 결합된 제2 캐시 메모리 장치를 더 포함하는
    처리 장치.
  11. 제10항에 있어서,
    상기 제1 FPGA는 상기 제1 캐시 메모리 장치에 대한 독립적인 에이전트이고, 상기 제2 FPGA는 상기 제2 캐시 메모리 장치에 대한 독립적인 에이전트인
    처리 장치.
  12. 제9항에 있어서,
    상기 제1 FPGA에 연결된 제3 처리 코어와,
    상기 제1 처리 코어, 상기 제3 처리 코어 및 상기 제1 FPGA에 연결된 제1 캐시 메모리 장치를 더 포함하되,
    상기 제1 FPGA는 상기 제1 처리 코어 및 상기 제3 처리 코어에서 처리되는 작업부하의 실행을 가속화하는
    처리 장치.
  13. 제2항에 있어서,
    상기 처리 장치는 그래픽 처리 장치(GPU)를 포함하는
    처리 장치.
  14. 제13항에 있어서,
    상기 제1 처리 코어 및 상기 제1 FPGA에 결합된 제1 메모리 장치와,
    상기 제2 처리 코어 및 상기 제2 FPGA에 결합된 제2 메모리 장치를 더 포함하는
    처리 장치.
  15. 제13항에 있어서,
    상기 제1 FPGA에 연결된 제3 처리 코어와,
    상기 제1 처리 코어, 상기 제3 처리 코어 및 상기 제1 FPGA에 연결된 제1 메모리 장치를 더 포함하되,
    상기 제1 FPGA는 상기 제1 처리 코어 및 상기 제3 처리 코어에서 처리되는 작업부하의 실행을 가속화하는
    처리 장치.
  16. 제1 처리 코어 및 제2 처리 코어를 포함하는 복수의 처리 코어와,
    상기 제1 처리 코어에 결합되어 상기 제1 처리 코어에서 처리되는 작업부하의 실행을 가속화시키는 제1 필드 프로그램가능 게이트 어레이(FPGA)와,
    상기 제1 처리 코어 및 상기 제1 FPGA에 연결된 제1 캐시 메모리 장치와,
    상기 제2 처리 코어에 결합되어 상기 제2 처리 코어에서 처리되는 작업부하의 실행을 가속시키는 제2 FPGA와,
    상기 제2 처리 코어 및 상기 제2 FPGA에 연결된 제2 캐시 메모리 장치를 포함하는
    중앙 처리 장치(CPU).
  17. 제16항에 있어서,
    상기 제1 처리 코어는 상기 제1 FPGA에서 가속화될 제1 작업부하를 선택하고 상기 제2 처리 코어는 상기 제2 FPGA에서 가속화될 제2 작업부하를 선택하는
    중앙 처리 장치(CPU).
  18. 제17항에 있어서,
    상기 제1 FPGA는 제1 타입의 작업부하를 실행하도록 프로그래밍되고 상기 제2 FPGA는 제2 타입의 작업부하를 실행하도록 프로그래밍되는
    중앙 처리 장치(CPU).
  19. 제18항에 있어서,
    상기 제1 처리 코어는 상기 제1 FPGA의 실행을 제어하는 제1 제어기를 포함하고, 상기 제2 처리 코어는 상기 제2 FPGA의 실행을 제어하는 제2 제어기를 포함하는
    중앙 처리 장치(CPU).
  20. 제16항에 있어서,
    상기 제1 FPGA 및 상기 제1 캐시 메모리 장치에 연결된 제3 처리 코어를 더 포함하되, 상기 제1 FPGA는 상기 제1 처리 코어 및 상기 제3 처리 코어에서 처리되는 작업부하의 실행을 가속화하는
    중앙 처리 장치(CPU).
  21. 제1 그래픽 처리 코어 및 제2 그래픽 처리 코어를 포함하는 복수의 그래픽 처리 코어와,
    상기 제1 그래픽 처리 코어에 결합되어 상기 제1 그래픽 처리 코어에서 처리되는 그래픽 작업부하의 실행을 가속화시키는 제1 필드 프로그램가능 게이트 어레이(FPGA)와,
    상기 제1 그래픽 처리 코어 및 상기 제1 FPGA에 연결된 제1 메모리 장치와,
    상기 제2 그래픽 처리 코어에 결합되어 상기 제2 그래픽 처리 코어에서 처리되는 그래픽 작업부하의 실행을 가속화시키는 제2 FPGA와,
    상기 제2 그래픽 처리 코어 및 상기 제2 FPGA에 연결된 제2 메모리 장치를 포함하는
    그래픽 처리 장치(GPU).
  22. 제21항에 있어서,
    상기 제1 그래픽 처리 코어는 상기 제1 FPGA에서 가속화될 제1 작업부하를 선택하고 상기 제2 그래픽 처리 코어는 상기 제2 FPGA에서 가속화될 제2 작업부하를 선택하는
    그래픽 처리 장치(GPU).
  23. 제22항에 있어서,
    상기 제1 FPGA는 제1 타입의 그래픽 작업부하를 실행하도록 프로그래밍되고 상기 제2 FPGA는 제2 타입의 그래픽 작업부하를 실행하도록 프로그래밍되는
    그래픽 처리 장치(GPU).
  24. 제23항에 있어서,
    상기 제1 그래픽 처리 코어는 상기 제1 FPGA의 실행을 제어하는 제1 제어기를 포함하고, 상기 제2 그래픽 처리 코어는 상기 제2 FPGA의 실행을 제어하는 제2 제어기를 포함하는
    그래픽 처리 장치(GPU).
  25. 제21항에 있어서,
    상기 제1 FPGA 및 상기 제1 메모리 장치에 연결된 제3 그래픽 처리 코어를 더 포함하되, 상기 제1 FPGA는 상기 제1 그래픽 처리 코어 및 상기 제3 그래픽 처리 코어에서 처리되는 작업부하의 실행을 가속화하는
    그래픽 처리 장치(GPU).
KR1020197000374A 2016-08-05 2017-07-12 멀티 코어 컴퓨팅 아키텍처에서 그래픽 작업부하를 가속화하기 위한 메커니즘 KR102572583B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/229,550 2016-08-05
US15/229,550 US10229470B2 (en) 2016-08-05 2016-08-05 Mechanism to accelerate graphics workloads in a multi-core computing architecture
PCT/US2017/041746 WO2018026482A1 (en) 2016-08-05 2017-07-12 Mechanism to accelerate graphics workloads in a multi-core computing architecture

Publications (2)

Publication Number Publication Date
KR20190027367A true KR20190027367A (ko) 2019-03-14
KR102572583B1 KR102572583B1 (ko) 2023-08-29

Family

ID=61069346

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020197000374A KR102572583B1 (ko) 2016-08-05 2017-07-12 멀티 코어 컴퓨팅 아키텍처에서 그래픽 작업부하를 가속화하기 위한 메커니즘

Country Status (6)

Country Link
US (4) US10229470B2 (ko)
KR (1) KR102572583B1 (ko)
CN (1) CN109923519B (ko)
DE (1) DE112017003932T5 (ko)
SG (1) SG11201900093VA (ko)
WO (1) WO2018026482A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102309764B1 (ko) 2020-11-24 2021-10-08 주식회사 하스퍼 복수의 gpu에 대한 분산처리를 수행하는 fpga 장치 및 이를 이용한 분산처리 수행 방법

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10229470B2 (en) 2016-08-05 2019-03-12 Intel IP Corporation Mechanism to accelerate graphics workloads in a multi-core computing architecture
US10572310B2 (en) 2016-09-21 2020-02-25 International Business Machines Corporation Deploying and utilizing a software library and corresponding field programmable device binary
US10417012B2 (en) * 2016-09-21 2019-09-17 International Business Machines Corporation Reprogramming a field programmable device on-demand
US10355945B2 (en) 2016-09-21 2019-07-16 International Business Machines Corporation Service level management of a workload defined environment
US10599479B2 (en) 2016-09-21 2020-03-24 International Business Machines Corporation Resource sharing management of a field programmable device
US10573598B2 (en) * 2017-09-28 2020-02-25 Xilinx, Inc. Integration of a programmable device and a processing system in an integrated circuit package
US10963300B2 (en) * 2018-12-06 2021-03-30 Raytheon Company Accelerating dataflow signal processing applications across heterogeneous CPU/GPU systems
CN111913816A (zh) * 2020-07-14 2020-11-10 长沙景嘉微电子股份有限公司 Gpgpu中簇的实现方法、装置、终端及介质
TW202219760A (zh) * 2020-11-06 2022-05-16 圓剛科技股份有限公司 協同運算裝置及其協同運算方法
TWI819480B (zh) * 2022-01-27 2023-10-21 緯創資通股份有限公司 加速系統及其動態配置方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100049963A1 (en) * 2008-08-25 2010-02-25 Bell Jr Robert H Multicore Processor and Method of Use That Adapts Core Functions Based on Workload Execution
US20150199214A1 (en) * 2014-01-13 2015-07-16 Electronics And Telecommunications Research Institute System for distributed processing of stream data and method thereof

Family Cites Families (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020152060A1 (en) * 1998-08-31 2002-10-17 Tseng Ping-Sheng Inter-chip communication system
US6757761B1 (en) * 2001-05-08 2004-06-29 Tera Force Technology Corp. Multi-processor architecture for parallel signal and image processing
JP3924577B2 (ja) * 2002-05-22 2007-06-06 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ 制御ワード巻き上げ
EP1443418A1 (en) * 2003-01-31 2004-08-04 STMicroelectronics S.r.l. Architecture for reconfigurable digital signal processor
US7673118B2 (en) * 2003-02-12 2010-03-02 Swarztrauber Paul N System and method for vector-parallel multiprocessor communication
ITMI20041675A1 (it) * 2004-08-30 2004-11-30 St Microelectronics Srl Blocco di commutazione e relativa matrice di commutazione, in particolare per architetture fpga.
WO2008061161A2 (en) * 2006-11-14 2008-05-22 Star Bridge Systems, Inc. Execution of legacy code on hybrid computing platform
US7827383B2 (en) * 2007-03-09 2010-11-02 Oracle America, Inc. Efficient on-chip accelerator interfaces to reduce software overhead
JP5154119B2 (ja) * 2007-03-26 2013-02-27 テレフオンアクチーボラゲット エル エム エリクソン(パブル) プロセッサ
US7953912B2 (en) * 2008-02-22 2011-05-31 International Business Machines Corporation Guided attachment of accelerators to computer systems
US8434087B2 (en) * 2008-08-29 2013-04-30 International Business Machines Corporation Distributed acceleration devices management for streams processing
US20120166777A1 (en) * 2010-12-22 2012-06-28 Advanced Micro Devices, Inc. Method and apparatus for switching threads
US20120179899A1 (en) * 2011-01-07 2012-07-12 International Business Machines Corporation Upgradeable processor enabling hardware licensing
US8972667B2 (en) * 2011-06-28 2015-03-03 International Business Machines Corporation Exchanging data between memory controllers
EP2737385A1 (en) * 2011-07-25 2014-06-04 Servergy, Inc. Method and system for building a low power computer system
US9075623B2 (en) * 2012-01-18 2015-07-07 International Business Machines Corporation External auxiliary execution unit interface for format conversion of instruction from issue unit to off-chip auxiliary execution unit
US9405701B2 (en) * 2012-03-30 2016-08-02 Intel Corporation Apparatus and method for accelerating operations in a processor which uses shared virtual memory
US20140189302A1 (en) * 2012-12-28 2014-07-03 Intel Corporation Optimal logical processor count and type selection for a given workload based on platform thermals and power budgeting constraints
US9727113B2 (en) * 2013-08-08 2017-08-08 Linear Algebra Technologies Limited Low power computational imaging
US10013351B2 (en) * 2014-06-27 2018-07-03 International Business Machines Corporation Transactional execution processor having a co-processor accelerator, both sharing a higher level cache
US10521874B2 (en) * 2014-09-26 2019-12-31 Intel Corporation Method and apparatus for a highly efficient graphics processing unit (GPU) execution model
CN104375805A (zh) * 2014-11-17 2015-02-25 天津大学 采用多核处理器仿真可重构处理器并行计算过程的方法
US10387343B2 (en) * 2015-04-07 2019-08-20 International Business Machines Corporation Processing of events for accelerators utilized for parallel processing
US10203747B2 (en) * 2016-03-22 2019-02-12 Lenovo Enterprise Solutions (Singapore) Pte. Ltd. Workload placement based on heterogeneous compute performance per watt
US10229470B2 (en) 2016-08-05 2019-03-12 Intel IP Corporation Mechanism to accelerate graphics workloads in a multi-core computing architecture

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100049963A1 (en) * 2008-08-25 2010-02-25 Bell Jr Robert H Multicore Processor and Method of Use That Adapts Core Functions Based on Workload Execution
US20150199214A1 (en) * 2014-01-13 2015-07-16 Electronics And Telecommunications Research Institute System for distributed processing of stream data and method thereof

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102309764B1 (ko) 2020-11-24 2021-10-08 주식회사 하스퍼 복수의 gpu에 대한 분산처리를 수행하는 fpga 장치 및 이를 이용한 분산처리 수행 방법

Also Published As

Publication number Publication date
CN109923519B (zh) 2023-11-21
US20180040096A1 (en) 2018-02-08
KR102572583B1 (ko) 2023-08-29
US11010858B2 (en) 2021-05-18
WO2018026482A1 (en) 2018-02-08
SG11201900093VA (en) 2019-02-27
US11443405B2 (en) 2022-09-13
US11798123B2 (en) 2023-10-24
US20200134776A1 (en) 2020-04-30
US10229470B2 (en) 2019-03-12
US20210342968A1 (en) 2021-11-04
CN109923519A (zh) 2019-06-21
US20230119093A1 (en) 2023-04-20
DE112017003932T5 (de) 2019-04-25

Similar Documents

Publication Publication Date Title
CN109564700B (zh) 用于取决于纹理的丢弃操作的分级式Z剔除(HiZ)优化
US11010858B2 (en) Mechanism to accelerate graphics workloads in a multi-core computing architecture
US10192281B2 (en) Graphics command parsing mechanism
CN109643463B (zh) 预设图形处理器内的分级式深度逻辑
US10210655B2 (en) Position only shader context submission through a render command streamer
US10068307B2 (en) Command processing for graphics tile-based rendering
US10191724B2 (en) Compiler-based instruction scoreboarding
US10565670B2 (en) Graphics processor register renaming mechanism
US10776156B2 (en) Thread priority mechanism
CN109196550B (zh) 用于针对虚拟现实和多视图系统进行交织光栅化和像素着色的架构
US20170140570A1 (en) Facilitating efficeint centralized rendering of viewpoint-agnostic graphics workloads at computing devices
US9886934B2 (en) Ordering mechanism for offload graphics scheduling
CN111798362A (zh) 硬件索引映射机制
KR20200002608A (ko) 그래픽 엔진 상에서 다수의 컨텍스트를 동시에 실행하는 방법 및 장치
CN109844802B (zh) 用于在图形处理器中提高线程并行性的机制
WO2017200672A1 (en) Triangle rendering mechanism
US10769751B2 (en) Single input multiple data processing mechanism
US20180005349A1 (en) Buffering graphics tiled resource translations in a data port controller tlb

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