KR20140053370A - 그래픽 프로세싱을 위한 메모리 복사 엔진 - Google Patents

그래픽 프로세싱을 위한 메모리 복사 엔진 Download PDF

Info

Publication number
KR20140053370A
KR20140053370A KR1020147007769A KR20147007769A KR20140053370A KR 20140053370 A KR20140053370 A KR 20140053370A KR 1020147007769 A KR1020147007769 A KR 1020147007769A KR 20147007769 A KR20147007769 A KR 20147007769A KR 20140053370 A KR20140053370 A KR 20140053370A
Authority
KR
South Korea
Prior art keywords
data
memory
gpu
copy engine
shader processor
Prior art date
Application number
KR1020147007769A
Other languages
English (en)
Other versions
KR101564859B1 (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 KR20140053370A publication Critical patent/KR20140053370A/ko
Application granted granted Critical
Publication of KR101564859B1 publication Critical patent/KR101564859B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/167Interprocessor communication using a common memory, e.g. mailbox
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • 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)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)
  • Image Processing (AREA)
  • Image Generation (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

본 개시물에서 설명된 예시적인 기법들은 그래픽 프로세싱 유닛 (GPU) 과 시스템 메모리 사이의 상호작용에 관한 것일 수도 있다. 예를 들어, GPU 는 시스템 메모리에 저장되거나 시스템 메모리에 저장될 데이터에 액세스하는 것과 관련된 태스크들을 처리하는 메모리 복사 엔진을 포함할 수도 있다. 또한, 일부 예들에서, 메모리 복사 엔진은 변경 태스크들과 같은 추가적인 태스크들을 수행하여 GPU 의 성능을 증가시킬 수도 있다.

Description

그래픽 프로세싱을 위한 메모리 복사 엔진{MEMORY COPY ENGINE FOR GRAPHICS PROCESSING}
본 개시물은 그래픽 프로세싱 유닛 (GPU) 들에 관한 것으로, 좀더 구체적으로, GPU 와 메모리 사이의 상호작용에 관한 것이다.
그래픽 컨텐츠를 발생시키는 디바이스는 일반적으로 그래픽 프로세싱 유닛 (GPU) 을 포함한다. GPU 는 그래픽 데이터를 프로세싱하여 디스플레이 상의 픽셀들에 대한 픽셀 값들을 발생시킬 수도 있다. 그래픽 데이터의 프로세싱의 일부는 GPU 가 GPU 의 로컬 메모리 또는 시스템 메모리에 엑세스하는 것을 요구할 수도 있다. 예를 들어, 그래픽 데이터의 적어도 일부분이 시스템 메모리에 저장될 수도 있고, GPU 가 시스템 메모리로부터 그래픽 데이터를 취출할 수도 있다.
일반적으로, 본 개시물은 메모리에 저장된 그래픽 데이터에 액세스하는 기법들을 설명한다. 일부 실시예들에서, 기법들은, 그래픽 프로세싱 유닛 (graphics processing unit; GPU) 상의 하나 이상의 프로그램들의 실행으로부터 독립적으로, 데이터 변경 태스크들을 수행하는 것을 포함할 수도 있다. 예를 들어, 본 개시물의 기법들은 GPU 가 메모리 관리 및 데이터 변경과 관련된 태스크들을 데이터 프로세싱과 관련된 태스크들로부터 분리하는 것을 허용하고, 이러한 태스크들의 독립적인 실행을 허용할 수도 있다. 일 실시예로서, 본 개시물에 설명된 기법들은 GPU 가 메모리로부터 데이터를 취출하거나 메모리에 데이터를 저장하고, 이러한 기능들을 수행하는 것과 병렬로, 하나 이상의 프로그램들의 명령들을 실행하는 것을 허용할 수도 있다. 다른 예로서, 본 개시물에서 설명된 기법들은, 명령들의 실행으로부터 독립적으로, GPU 가 실행된 명령들이 이용하는 데이터를 보다 적합한 형태로 전환하는 것을 허용할 수도 있다.
일 실시예에서, 본 개시물은 시스템 버스를 통해 액세스가능한 시스템 메모리, 및 그래픽 프로세싱 유닛 (GPU) 을 포함하는 장치를 설명한다. GPU 는 로컬 메모리, 메모리 복사 엔진, 및 쉐이더 프로세서를 포함한다. 메모리 복사 엔진은 시스템 버스를 통해 시스템 메모리로부터 제 1 데이터를 취출하고 로컬 메모리에 제 1 데이터를 저장하고, 로컬 메모리로부터 제 2 데이터를 취출하고 시스템 버스를 통해 시스템 메모리에 제 2 데이터를 저장하도록 동작가능하다. 쉐이더 프로세서는 로컬 메모리로부터 제 1 데이터를 취출하며, 제 1 데이터를 프로세싱하여 제 2 데이터를 발생시키고, 로컬 메모리에 제 2 데이터를 저장하도록 동작가능하다.
다른 실시예에서, 본 개시물은, 그래픽 프로세싱 유닛 (GPU) 의 메모리 복사 엔진으로, 시스템 버스를 통해 GPU 의 외부에 있는 시스템 메모리로부터 제 1 데이터를 취출하는 단계, 및 GPU 의 메모리 복사 엔진으로, GPU 의 로컬 메모리에 제 1 데이터를 저장하는 단계를 포함하는 방법을 설명한다. 방법은, GPU 의 쉐이더 프로세서로, 로컬 메모리로부터 제 1 데이터를 취출하는 단계, GPU 의 쉐이더 프로세서로, 제 1 데이터를 프로세싱하여 제 2 데이터를 발생시키는 단계, 및 GPU 의 쉐이더 프로세서로, 로컬 메모리에 제 2 데이터를 저장하는 단계를 더 포함한다. 방법은, GPU 의 메모리 복사 엔진으로, 로컬 메모리로부터 제 2 데이터를 취출하는 단계, 및 GPU 의 메모리 복사 엔진으로, 시스템 버스를 통해 시스템 메모리에 제 2 데이터를 저장하는 단계를 또한 포함한다.
다른 실시예에서, 본 개시물은 시스템 버스를 통해 액세스가능한 시스템 메모리, 및 시스템 메모리의 외부에 있는 그래픽 프로세싱 유닛 (GPU) 을 포함하는 장치를 설명한다. GPU 는 로컬 메모리를 포함한다. 본 실시예에서, GPU 는, GPU 의 메모리 복사 엔진으로, 시스템 버스를 통해 GPU 의 외부에 있는 시스템 메모리로부터 제 1 데이터를 취출하는 수단, 및 GPU 의 메모리 복사 엔진으로, 로컬 메모리에 제 1 데이터를 저장하는 수단을 또한 포함한다. GPU 는, GPU 의 쉐이더 프로세서로, 로컬 메모리로부터 제 1 데이터를 취출하는 수단, GPU 의 쉐이더 프로세서로, 제 1 데이터를 프로세싱하여 제 2 데이터를 발생시키는 수단, 및 GPU 의 쉐이더 프로세서로, 로컬 메모리에 제 2 데이터를 저장하는 수단을 또한 포함한다. GPU 는, GPU 의 메모리 복사 엔진으로, 로컬 메모리로부터 제 2 데이터를 취출하는 수단, 및 GPU 의 메모리 복사 엔진으로, 시스템 버스를 통해 시스템 메모리에 제 2 데이터를 저장하는 수단을 더 포함한다.
다른 실시예에서, 본 개시물은 비일시적 컴퓨터 판독가능 저장 매체를 설명한다. 비일시적 컴퓨터 판독가능 저장 매체는, 그래픽 프로세싱 유닛 (GPU) 으로 하여금, GPU 의 메모리 복사 엔진으로, 시스템 버스를 통해 GPU 의 외부에 있는 시스템 메모리로부터 제 1 데이터를 취출하고, GPU 의 메모리 복사 엔진으로, GPU 의 로컬 메모리에 제 1 데이터를 저장하게 하는 명령들을 포함한다. 명령들을 또한, GPU 로 하여금, GPU 의 쉐이더 프로세서로, 로컬 메모리로부터 제 1 데이터를 취출하며, GPU 의 쉐이더 프로세서로, 제 1 데이터를 프로세싱하여 제 2 데이터를 발생시키고, GPU 의 쉐이더 프로세서로, 로컬 메모리에 제 2 데이터를 저장하게 한다. 명령들은 또한, GPU 로 하여금, GPU 의 메모리 복사 엔진으로, 로컬 메모리로부터 제 2 데이터를 취출하고, GPU 의 메모리 복사 엔진으로, 시스템 버스를 통해 시스템 메모리에 제 2 데이터를 저장하게 한다.
하나 이상의 예들의 세부사항들이 첨부 도면들 및 하기의 설명에서 제시된다. 다른 특색들, 목적들, 및 이점들은 설명 및 도면들로부터, 그리고 청구항들로부터 자명할 것이다.
도 1 은 본 개시물의 하나 이상의 양상들을 구현하도록 동작가능할 수도 있는 그래픽 프로세싱 유닛 (GPU) 의 실시예를 도시하는 블록 다이어그램이다.
도 2 는 본 개시물의 하나 이상의 양상들을 구현하기 위해 도 1 의 GPU 를 포함할 수도 있는 컴퓨팅 디바이스의 실시예를 도시하는 블록 다이어그램이다.
도 3 은, 본 개시물의 하나 이상의 양상들에 따른, 도 1 에 도시된 바와 같은, GPU 의 예시적인 동작을 도시하는 플로우 차트이다.
일반적으로, 본 개시물은 그래픽 프로세싱 유닛 (GPU) 과 메모리, 예컨대, GPU 를 하우징하는 디바이스의 시스템 메모리 사이의 상호작용에 관한 것이다. 본 개시물의 기법들은 비디오 디바이스들, 예컨대, 미디어 플레이어들, 셋 톱 박스들, 모바일 전화기들과 같은 무선 핸드셋들, 개인 휴대 정보 단말기 (PDA) 들, 데스크톱 컴퓨터들, 랩톱 컴퓨터들, 게임 콘솔들, 디스플레이 디바이스들, 텔레비전들 등에 일반적으로 적용가능하다.
그래픽 프로세싱 시스템들은 일반적으로 GPU 및 시스템 메모리를 포함한다. GPU 는 쉐이더 프로세서 및 로컬 메모리를 포함하며, 로컬 메모리는 때때로 GPU 의 외부에 있는 다른 프로세서들 또는 GPU 의 일부분과도 공유될 수도 있다. 가끔 쉐이더 코어라고 지칭되는 쉐이더 프로세서는 다양한 유형의 그래픽 관련 프로그램들, 예컨대, 기하학 쉐이더, 정점 쉐이더, 및 단편 쉐이더를 실행하도록 구성될 수도 있다. 일부 실시예들에서, 쉐이더 프로세서는 그래픽 프로세싱과 관련된 프로그램들에 더해 프로그램들을 실행하도록 구성될 수도 있다.
예를 들어, GPU 는 병렬로 다수의 태스크들을 빠르고 효율적으로 수행하도록 구성될 수도 있다. 일부 애플리케이션들은 범용 프로세싱을 위해 GPU 의 효율적인 병렬 프로세싱 능력들을 이용할 수도 있다. 이런 의미에서, GPU 는 범용 GPU (general purpose GPU; GPGPU) 로서 기능할 수도 있다. GPU 의 쉐이더 프로세서 상에서 실행하는 범용 프로세싱을 위한 프로그램들은 컴퓨터 쉐이더들로서 지칭될 수도 있다. 정점 쉐이더들, 픽셀 쉐이더들, 및 단편 쉐이더들과 같은 그래픽 관련 프로그램들, 및 컴퓨터 쉐이더들과 같은 범용 프로세싱 프로그램들은 이러한 프로그램들이 GPU 의 쉐이더 프로세서에 의해 실행된다는 것을 표시하기 위해 쉐이더 프로그램들로서 통상적으로 지칭될 수도 있다. 다시 말해, 용어 "쉐이더 프로그램들" 은 그래픽 관련 기능들을 수행하는 프로그램들로만 제한되는 것으로 여겨져서는 안된다.
본 개시물에서 설명된 실시예들 중 일부 실시예에서, GPU 는 쉐이더 프로세서 및 로컬 메모리와 더불어, 메모리 복사 엔진을 또한 포함할 수도 있다. 메모리 복사 엔진은 하드웨어, 하드웨어 상에서 실행하는 소프트웨어, 또는 이들의 조합으로서 구현될 수도 있다. 메모리 복사 엔진은 시스템 메모리로부터 데이터를 취출하고 시스템 메모리에 데이터를 저장하는 메모리 관련 태스크들을 처리하도록 동작가능할 수도 있다. 이러한 방식으로, 시스템 메모리의 메모리 관리와 관련된 명령들은 메모리 관리와 관련되지 않은 명령들로부터 분리될 수도 있다. 이는 쉐이더 프로세서가 시스템 메모리로의 데이터의 저장 또는 시스템 메모리로부터의 데이터의 취출을 위해 메모리 복사 엔진 실행 명령들과 병렬로 쉐이더 프로그램들의 명령들을 실행하는 것을 허용할 수도 있다. 명령들의 병렬 실행은 쉐이더 프로세서 및 메모리 복사 엔진에 의한 명령들의 동시적인 실행, 뿐만 아니라, 메모리 복사 엔진에 의한 명령들의 실행과 겹치는 쉐이더 프로세서에 의한 명령들의 실행을 지칭할 수도 있다.
메모리 복사 엔진에 의해 수행되는 태스크들은 다양한 매커니즘들에 의해 제어될 수도 있다. 예를 들어, 커맨드 프로세서가 메모리 복사 엔진 및 쉐이더 프로세서의 태스크들을 스케줄링할 수도 있다. 대안으로, 쉐이더 프로세서가 메모리 복사 엔진의 태스크들을 스케줄링할 수도 있다. 일부 다른 실시예들에서, GPU 의 외부에 있는 디바이스, 예컨대, 중앙 처리 유닛 (CPU) 이 메모리 복사 엔진 및 쉐이더 프로세서의 태스크들을 스케줄링할 수도 있다.
일부 실시예들에서, 메모리 복사 엔진은 복사 명령들을 실행하는 것과 더불어 명령들을 실행할 수도 있다. 이러한 추가적인 명령들은 변경 명령들로서 지칭될 수도 있다. 변경 명령들은, 2 가지의 예들로서, 쉐이더 프로그램들이 이용할 수 있는 보다 적합한 형태로 데이터를 변경하거나, 액세스의 용이함을 위해 데이터가 저장되는 장소를 변경할 수도 있다. 이러한 방식으로, 쉐이더 프로세서는 산술 연산들을 수행하도록 더 자유롭게 되고, 다른 동작들이 메모리 복사 엔진으로 오프로드될 수 있다.
도 1 은 본 개시물의 하나 이상의 양상들을 구현하도록 동작가능할 수도 있는 그래픽 프로세싱 유닛 (GPU) (10) 의 예를 도시하는 블록 다이어그램이다. GPU (10) 의 실시예들은 디지털 신호 프로세서 (DSP), 범용 마이크로프로세서, 주문형 반도체 (ASIC), 필드 프로그래머블 로직 어레이 (FPGA), 또는 다른 등가의 집적 또는 이산 논리 회로부를 포함하나, 이로 제한되지는 않는다. 도 1 에 도시된 바와 같이, GPU (10) 는 커맨드 프로세서 (12), 고정 기능 그래픽 유닛들 (14), 쉐이더 프로세서 (16), 로컬 메모리 (18), 메모리 복사 엔진 (20), 및 메모리 인터페이스 (22) 를 포함할 수도 있다. 메모리 인터페이스 (22) 는 하드웨어 컴포넌트들, 하드웨어 상에서 실행하는 소프트웨어, 하드웨어 상에서 실행하는 펌웨어, 또는 이들의 임의의 조합으로서 구현될 수도 있다. GPU (10) 는 명확함을 위해 도 1 에서 도시되지 않은 추가적인 유닛들 또는 모듈들을 포함할 수도 있다.
GPU (10) 는 다양한 유형의 그래픽 파이프라인들을 구현하도록 동작가능할 수도 있다. 예를 들어, GPU (10) 는 Khronos 그룹에 의해 2008 년 4 월 24 일에 발표되고 공개적으로 이용가능한 OpenGL ES 2.0 사양에서 설명된 것과 유사한 그래픽 파이프라인을 구현할 수도 있다. 다른 실시예로서, 본 개시물의 양상들은 그래픽 파이프라인을 정의하는 Microsoft® DirectX (DX) 10 및 11 애플리케이션 프로그래밍 인터페이스 (API) 들에서 구현될 수도 있다. 그래픽 파이프라인은 GPU (10) 상에서 실행하는 소프트웨어, GPU (10) 상에서 실행하는 펌웨어, GPU (10) 상에 형성된 고정 기능 그래픽 유닛들 (14) 과 같은 하나 이상의 하드웨어 유닛들, 또는 이들의 조합으로서 구현될 수도 있다. GPU (10) 는 다른 유형의 그래픽 파이프라인들을 또한 구현할 수도 있고, 본 개시물의 양상들은 OpenGL ES 2.0 사양, 또는 DX 10 과 11 API 들의 그래픽 파이프라인으로 제한되는 것으로 여겨져서는 안된다. 또한, GPU (10) 에 의해 구현될 수도 있는 다른 유형의 그래픽 알고리즘들이 있을 수도 있다. 예를 들어, GPU (10) 는 OpenGL ES 2.0 및 DX 10 과 11 API 들 대신에 또는 이들에 더해 레이 트레이싱 (ray-tracing) 을 구현할 수도 있다.
그래픽 파이프라인들을 구현하는 것에 더불어, GPU (10) 는 비 그래픽 관련 기능들을 구현하도록 동작가능할 수도 있다. 예를 들어, GPU (10) 는 디스플레이의 상대적으로 많은 수의 픽셀들에 대한 픽셀 값들을 발생시키기 위해 병렬로 다수의 태스크들의 빠르고 효율적인 프로세싱을 요구하는 그래픽 관련 기능들에 적합한, 대량 병렬 프로세싱 기능성을 지원하도록 구성될 수도 있다. 일부 비 그래픽 관련 애플리케이션들에 있어서, GPU (10) 의 이러한 빠르고 효율적인 병렬 프로세싱을 활용하는 것이 바람직하게 여겨질 수도 있다. 이런 의미에서, GPU (10) 는 그래픽 관련 기능 및 비 그래픽 관련 기능 양자 모두를 수행하도록 동작가능한 범용 GPU (GPGPU) 로 여겨질 수도 있다. 보다 상세히 설명된 바와 같이, 이러한 그래픽 관련 기능 및 비 그래픽 관련 기능은 GPU (10) 상에서 실행하는 프로그램들에 의해 정의될 수도 있다.
커맨드 프로세서 (12) 는 GPU (10) 의 제어기일 수도 있다. 예를 들어, 커맨드 프로세서 (12) 는 쉐이더 프로세서 (16) 및 메모리 복사 엔진 (20) 에 의해 수행될 태스크들을 스케줄링할 수도 있다. 일 실시예로서, 쉐이더 프로세서 (16) 는 시스템 메모리 (미도시) 에 저장된 데이터의 블록들에 대해 동작들, 예컨대, 산술 연산들을 수행할 수도 있다. 이러한 실시예에서, 커맨드 프로세서 (12) 는 메모리 복사 엔진 (20) 이 시스템 메모리로부터 데이터의 제 1 블록을 취출하고, 로컬 메모리 (18) 에 데이터의 제 1 블록을 저장할 것을 명령할 수도 있다. 커맨드 프로세서 (12) 는 쉐이더 프로세서 (16) 가 로컬 메모리 (18) 로부터 데이터의 제 1 블록을 취출하고, 데이터의 제 1 블록에 대해 기능들을 수행할 것을 명령할 수도 있다. 일부 예들에서, 쉐이더 프로세서 (16) 가 데이터의 제 1 블록에 대해 동작들을 수행하는 동안, 쉐이더 프로세서 (16) 가 데이터의 제 1 블록에 대해 동작들을 수행하는 것과 병렬로, 커맨드 프로세서 (12) 는 메모리 복사 엔진 (20) 이 시스템 메모리로부터 데이터의 제 2 블록을 취출할 것을 명령할 수도 있다.
예를 들어, 커맨드 프로세서 (12) 는 메모리 복사 엔진 (20) 및 쉐이더 프로세서 (16) 에 의해 수행되는 태스크들을 파이프라이닝하는 것으로 여겨질 수도 있다. 예를 들어, 메모리 복사 엔진 (20) 이 현재의 복사 명령들을 수행하는 것을 완료하기 전에, 커맨드 프로세서 (12) 는 메모리 복사 엔진 (20) 이 다음 복사 명령을 수행할 것을 (예를 들어, 시스템 메모리로부터 데이터를 취출하거나 시스템 메모리에 데이터를 저장할 것을) 명령할 수도 있다. 이러한 실시예에서, 메모리 복사 엔진 (20) 이 현재의 복사 명령을 완료한 후에, 메모리 복사 엔진 (20) 은 다음 복사 명령을 즉시 수행할 준비가 된다.
일부 실시예들에서, 메모리 복사 엔진 (20) 은 메모리 복사 태스크의 완료 시에 쉐이더 프로세서 (16) 에 표시를 제공할 수도 있다. 예를 들어, 쉐이더 프로세서 (16) 가 비디오의 현재 블록에 대해 태스크들을 수행하는 동안, 메모리 복사 엔진 (20) 은 쉐이더 프로세서 (16) 에 의해 이용될 데이터의 다음 블록을 미리 저장할 수도 있다. 이러한 실시예에서, 메모리 복사 엔진 (20) 은 데이터의 다음 블록이 로컬 메모리 (18) 에 이미 저장되었다는 것을 쉐이더 프로세서 (16) 에 표시할 수도 있고, 쉐이더 프로세서 (16) 는 프로세싱을 위해 로컬 메모리 (18) 로부터 데이터의 다음 블록을 취출할 수도 있다.
이러한 방식으로, 메모리 복사 엔진 (20) 은 메모리 복사 엔진의 동작들을 쉐이더 프로세서 (16) 의 동작들과 동기화할 수도 있다. 예를 들어, 메모리 복사 엔진 (20) 이 데이터가 프로세싱을 위해 이용가능할 경우 쉐이더 프로세서 (16) 에 표시를 제공하기 때문에, 쉐이더 프로세서 (16) 는 데이터가 취출을 위해 이용가능하기 전에 데이터를 취출하고 프로세싱하려고 시도하지 않을 수도 있다. 이는 쉐이더 프로세서 (16) 가 메모리 복사 엔진 (20) 으로부터의 표시를 기다리는 동안, 가능하게는 쉐이더 프로세서 (16) 로 하여금 유휴 (idle) 로 남아 있게 하도록 할 수도 있다. 그러나, 쉐이더 프로세서 (16) 가 쉐이더 프로세서의 산술 연산들을 실행하는 동안 메모리 복사 엔진 (20) 이 메모리 복사 엔진의 복사 명령들을 실행하기 때문에, 이러한 유휴 시간은 쉐이더 프로세서 (16) 가 모든 메모리 관련 태스크들을 처리하는데 드는 시간의 양 미만일 수도 있다.
대안적인 실시예들에서, 커맨드 프로세서 (12) 는 메모리 복사 엔진 (20) 이 메모리 복사 엔진의 태스크들을 완료하는 때를 모니터링하고, 메모리 복사 엔진 (20) 이 메모리 복사 엔진의 태스크들을 완료했다는 표시를 쉐이더 프로세서 (16) 에 제공할 수도 있다. 다시 말해, 커맨드 프로세서 (12) 는 쉐이더 프로세서 (16) 에 의해 수행되는 기능들과 메모리 복사 엔진 (20) 에 의해 수행되는 기능들 사이에 적절한 동기화를 유지할 수도 있다.
일부 대안적인 실시예들에서, 쉐이더 프로세서 (16) 는 커맨드 프로세서 (12) 의 기능들을 수행할 수도 있고, 커맨드 프로세서 (12) 는 이러한 실시예들에서 필요하지 않을 수도 있다. 일부 다른 대안적인 실시예들에서, GPU (10) 는 중앙 처리 유닛 (CPU) 과 같은 외부 디바이스로부터 스케줄링 정보를 수신할 수도 있다. 이러한 실시예들에서, 커맨드 프로세서 (12) 는 필요하지 않을 수도 있다. 그러나, 이러한 대안적인 실시예들 중 어느 실시예에서도, GPU (10) 는 다른 기능들을 수행하기 위해 커맨드 프로세서 (12) 를 여전히 포함할 수도 있다. 또한, 이러한 대안적인 실시예들 중 어느 실시예에서라도, 쉐이더 프로세서 (16) 에서 실행되는 명령들과 메모리 복사 엔진 (20) 에 의해 실행되는 명령들을 동기화하기 위해 메모리 복사 엔진이 그것의 태스크들을 완료하는 경우, 메모리 복사 엔진 (20) 은 쉐이더 프로세서 (16) 에 표시를 제공할 수도 있다.
고정 기능 그래픽 유닛들 (14) 은 특정 태스크들을 수행하도록 고정화될 수도 있는 하드웨어 유닛들일 수도 있다. 예를 들어, 고정 기능 그래픽 유닛들 (12) 은 프리미티브 (primitive) 어셈블리 유닛 및 래스터화 (rasterization) 유닛 중 하나 이상의 유닛을 포함할 수도 있으나, 고정 기능 그래픽 유닛들 (14) 은 추가적인 유닛들을 포함할 수도 있다. 고정 기능 그래픽 유닛들 (14) 의 프리미티브 어셈블리 유닛은 쉐이더 프로세서 (16) 로부터 수신된 정점 좌표에 기초하여, 삼각형들 또는 다른 유형의 다각형들과 같은 프리미티브들을 어셈블리할 수도 있다. 고정 기능 그래픽 유닛들 (14) 의 래스터화 유닛은 어셈블리된 다각형들에 대한 직선 방정식들을 결정하고, 결정된 직선 방정식들에 기초하여 어떤 픽셀들이 어셈블리된 다각형들 내에 있는지를 결정할 수도 있다. 고정 기능 그래픽 유닛들 (14) 의 이러한 기능성은 동작적 유연성을 요구하지 않을 수도 있고, 따라서 특정 기능들을 수행하도록 고정화될 수도 있다.
고정 기능 그래픽 유닛들 (14) 이 동작적 유연성을 제공하지 않을 수도 있는데 반해, 쉐이더 프로세서 (16) 는 폭넓은 동작적 유연성을 제공할 수도 있다. 예를 들어, 쉐이더 코어라고도 지칭될 수 있는 쉐이더 프로세서 (16) 는 그래픽 관련 프로그램 및 비 그래픽 관련 프로그램 양자 모두와 같은 프로그램들을 실행하도록 동작가능하다. 쉐이더 프로세서 (16) 에 의해 실행되는 프로그램들은 쉐이더 프로세서 (16) 에 의해 수행되는 기능들을 정의한다.
예를 들어, 쉐이더 프로세서 (16) 는 기하학 쉐이더들, 정점 쉐이더들, 및 단편 쉐이더들과 같은 그래픽 관련 프로그램들을 실행하도록 동작가능하다. 기하학 쉐이더들은 단일 다각형의 그래픽 데이터를 수신하고, 단일 다각형을 다수의 다각형들로 나눌 수도 있다. 정점 쉐이더들은 기하학 쉐이더들로부터 다수의 다각형들을 수신하고, 수신된 다각형들의 정점들에 대한 좌표 변환 및 조명과 같은 기능들을 수행할 수도 있다. 단편 쉐이더들은 디스플레이 상에 디스플레이되는 픽셀들의 픽셀 값들을 결정할 수도 있다.
일부 실시예들에서, 쉐이더 프로세서 (16) 는 또한 비 그래픽 관련 프로그램들을 실행하도록 동작가능할 수도 있다. 예를 들어, GPU (10) 의 대량 병렬 프로세싱 능력들은 다수의 병렬 기능들을 수행하는 소정의 유형의 비 그래픽 관련 프로그램들의 효율적인 실행을 촉진할 수도 있다. 이러한 유형의 비 그래픽 관련 프로그램들은 컴퓨터 쉐이더들로서 지칭될 수도 있다. 용어 "쉐이더 프로그램" 은 쉐이더 프로세서 (16) 상에서 실행하는 임의의 프로그램을 일반적으로 지칭할 수도 있다. 예를 들어, 용어 쉐이더 프로그램은 기하학 쉐이더들, 정점 쉐이더들, 단편 쉐이더들, 및 컴퓨터 쉐이더들을 지칭한다.
쉐이더 프로세서 (16) 상에서 실행하는 쉐이더 프로그램들은 시스템 메모리에 저장된 데이터에 대해 산술 연산들과 같은 동작들을 수행한다. 예를 들어, 쉐이더 프로세서 (16) 는 원하는 산술 연산들을 수행하도록 프로그램가능한 복수의 산술 논리 유닛 (arithmetic logic unit; ALU) 들을 포함할 수도 있다. 용어 "데이터" 는 픽셀 값들 (예를 들어, 색상 값들, 불투명도 값들, 또는 픽셀들의 다른 이러한 속성들) 과 같은 그래픽 관련 데이터, 뿐만 아니라 비 그래픽 관련 데이터 (예를 들어, 컴퓨터 쉐이더에 의해 이용되는 데이터) 를 지칭하는데 이용된다. 시스템 메모리는 산술 연산들의 결과물들과 같은, 쉐이더 프로그램들에 의해 발생된 데이터를 또한 저장할 수도 있다. 시스템 메모리는 GPU (10) 의 외부에 있는 메모리일 수도 있고, 데이터 액세스를 위해 시스템 버스 (24) 를 요구한다.
본 개시물의 양상들에 따르면, 메모리 복사 엔진 (20) 은 시스템 메모리와의 상호작용을 요구하는 메모리 관련 태스크들을 처리할 수도 있다. 메모리 복사 엔진 (20) 은 하드웨어, 하드웨어 상에서 실행하는 소프트웨어, 또는 이들의 조합으로서 구현될 수도 있다. 예를 들어, 제한하지 않는 예로서, 메모리 복사 엔진 (20) 은 매우 특정적인 기능들을 수행하는 프로그램일 수도 있고, 소프트웨어로서 구현되는 경우, OpenGL 또는 OpenCL 표준에 따라 설계된다.
예시용으로, 메모리 복사 유닛 (20) 이 하드웨어 유닛인 맥락에서 설명된다. 예를 들어, 메모리 복사 엔진 (20) 은 DSP, ASIC, FPGA, 또는 다른 등가의 통합 회로부로서 형성될 수도 있다. 일부 실시예들에서, 메모리 복사 엔진 (20) 은 이산 논리 회로부 또는 이산 아날로그 회로부로서 형성될 수도 있다. 하드웨어 유닛에 대한 위의 실시예들은 예시용들로 제공되고 제한하는 것으로 여겨져서는 안된다.
일 예로서, 메모리 복사 엔진 (20) 은 시스템 메모리로부터 데이터를 취출하거나 시스템 메모리에 데이터를 저장하기 위한 명령들과 같은 복사 명령들을 실행할 수도 있다. 예를 들어, 메모리 복사 엔진 (20) 은 쉐이더 프로세서 (16) 상에서 실행하는 쉐이더 프로그램들에 의한 이용을 위해 시스템 메모리로부터 데이터를 취출하고 로컬 메모리 (18) 에 취출된 데이터를 저장하기 위한 명령들을 실행할 수도 있다. 메모리 복사 엔진 (20) 은 또한 로컬 메모리 (18) 에 저장된 데이터를 취출하고 시스템 메모리에 취출된 데이터를 저장하기 위한 명령들을 실행할 수도 있다.
도 1 에 도시된 바와 같이, 메모리 복사 엔진 (20) 은 메모리 인터페이스 (22) 에 커플링될 수도 있다. 메모리 복사 엔진 (20) 은 메모리 인터페이스 (22) 를 통해 시스템 메모리로부터 데이터를 취출하거나 시스템 메모리에 데이터를 저장할 수도 있다. 이런 의미에서, 메모리 인터페이스 (22) 는 GPU (10) 의 컴포넌트들과 시스템 메모리 사이의 매개자로서 기능할 수도 있다. 예를 들어, 메모리 인터페이스 (22) 는 메모리 인터페이스 (22) 가 시스템 버스 (24) 를 통해 데이터를 출력하고 시스템 버스 (24) 를 통해 데이터를 수신하는 것을 허용하는 컴포넌트들을 포함할 수도 있다.
본 개시물에 설명된 예시적인 기법들에서, 쉐이더 프로세서 (16) 는 시스템 메모리로의 데이터의 저장 또는 시스템 메모리로부터의 데이터의 취출을 위한 명령들을 실행하는 메모리 복사 엔진 (20) 과 병렬로 명령들을 실행하는 것이 가능할 수도 있다. 예를 들어, 쉐이더 프로세서 (16) 는 메모리 복사 엔진 (20) 이 시스템 메모리로의 데이터의 저장 또는 시스템 메모리로부터의 데이터의 취출을 위한 명령들을 실행하는 동안 명령들을 실행할 수도 있다. 쉐이더 프로세서 (16) 와 메모리 복사 엔진 (20) 의 병렬 실행은 쉐이더 프로세서 (16) 및 메모리 복사 엔진 (20) 에 의한 명령들의 동시적 실행 또는 겹치는 실행을 지칭할 수도 있다.
쉐이더 프로세서 (16) 및 메모리 복사 엔진 (20) 에 의해 실행되는 명령들은, 병렬이거나 그렇지 않거나 간에, 동일한 명령들일 필요는 없음이 이해되어야 한다. 일반적으로, 메모리 복사 엔진 (20) 은 쉐이더 프로세서 (16) 가 실행할 수 없을 수도 있는 메모리 액세스에 관련된 명령들을 실행할 수도 있다. 또한, 본 개시물에 설명된 기법들이 메모리 복사 엔진 (20) 및 쉐이더 프로세서 (16) 가 동시간에 명령들을 실행하는 것을 허용하기는 하나, 본 개시물의 양상들은 그렇게 제한되지 않는다. 예를 들어, 메모리 복사 엔진 (20) 및 쉐이더 프로세서 (16) 는 모든 실시예들에서 동시간에 명령들을 실행할 필요가 없다. 오히려, 메모리 복사 엔진 (20) 및 쉐이더 프로세서 (16) 는 동시간에 명령들을 실행할 수 있다.
일부 예들에서, 메모리 복사 엔진 (20) 이 시스템 메모리로의 데이터의 저장 또는 시스템 메모리로부터의 데이터의 취출을 위한 명령들을 실행할 수도 있기 때문에, 쉐이더 프로세서 (16) 는 시스템 메모리로부터 데이터를 취출하거나 시스템 메모리에 데이터를 저장하지 않도록 구성될 수도 있다. 다시 말해, 이러한 실시예에서, 시스템 메모리에 액세스하는 것이 쉐이더 프로세서 (16) 로부터 완전히 오프로드될 수도 있고, 이러한 액세싱은 오직 메모리 복사 엔진 (20) 에 의해서만 수행될 수도 있다. 이러한 방식으로, 메모리 복사 엔진 (20) 이 데이터를 취출하고 저장하는 동안, 쉐이더 프로세서 (16) 는 쉐이더 프로그램 또는 프로그램들을 실행하기 위해 자유롭다. 이는 쉐이더 프로세서 (16) 가 데이터 취출 또는 저장을 위한 명령들을 실행할 필요가 없도록 자유롭게 하고, 메모리 복사 엔진 (20) 에 의해 수행되는 데이터의 취출 및 저장 기능들과 동시에 쉐이더 프로그램 또는 프로그램들의 명령들을 실행하도록 자유롭게 한다. 대안적인 실시예들에서, 쉐이더 프로세서 (16) 가 시스템 메모리에 액세스하는 것이 여전히 가능할 수도 있다.
본 개시물의 실시예들에서, 쉐이더 프로세서 (16) 는 쉐이더 프로그램들에 의해 발생된 데이터를 로컬 메모리 (18) 에 저장하기 위한 명령들, 및 로컬 메모리 (18) 로부터 데이터를 취출하기 위한 명령들을 여전히 실행할 수도 있다. 예를 들어, 메모리 복사 엔진 (20) 은 데이터 저장 및 취출과 관련된 복사 명령들을 실행할 수도 있고, 메모리 복사 엔진 (20) 이 이러한 복사 명령들을 실행하는 동안, 쉐이더 프로세서 (16) 는 쉐이더 프로그램들의 데이터 프로세싱 명령들과 같은 데이터 프로세싱 명령들을, 동시간에 (예를 들어, 동시에) 계속 실행할 수도 있다. 데이터 프로세싱 명령들의 일 실시예는 산술 명령들일 수도 있는데, 이러한 명령들이 데이터에 대한 산술 연산들을 수행하는데 일반적이기 때문이다.
메모리 복사 엔진 (20) 으로 시스템 메모리에 액세스하는 것과 관련된 명령들을 오프로드하는 것은 GPU (10) 의 프로세싱 효율성들을 더 촉진할 수도 있다. 예를 들어, 종래의 기법들은 메모리, 예를 들어, 로컬 메모리 (18) 및 시스템 메모리 양자 모두에 액세스하는 것과 관련된 모든 명령들을 처리하기 위해 쉐이더 프로세서 (16) 에 의존했다. 예를 들어, 이러한 종래의 기법들에서, 쉐이더 프로세서 (16) 는 텍스처 패치 (texture fetch) 파이프라인을 통해 메모리 인터페이스 (22) 에 커플링될 것이다. 이러한 종래의 기법들에 따르면, 쉐이더 프로세서 (16) 는 텍스처 패치 파이프라인 및 메모리 인터페이스 (22) 를 통해 시스템 메모리에 액세스할 것이다.
그러나, 로컬 메모리 (18) 에 액세스하기 위한 쉐이더 프로그램들의 명령들은 쉐이더 프로그램들의 다른 명령들과 비동기로 실행할 수도 있으며, 시스템 메모리에 액세스하기 위한 쉐이더 프로그램들의 명령들은 비동기로 실행하지 않을 수도 있다. 오히려, 시스템 메모리에 액세스하기 위한 명령들은, 쉐이더 프로세서 (16) 상에서, 쉐이더 프로그램들의 다른 명령들과 동기로 실행할 수도 있다. 시스템 메모리에 액세스하기 위한 명령들에 있어서, 종래의 기법들에서는, 쉐이더 프로세서 (16) 가 시스템 메모리 상에 데이터가 저장되거나 시스템 메모리로부터 데이터를 취출하는 것을 기다리는 동안, 쉐이더 프로세서 (16) 가 유휴로 남아 있고 다른 명령들을 실행하는 것이 가능하지 않을 수도 있다.
메모리 복사 엔진 (20) 으로, 본 개시물에서 설명된 기법들은 쉐이더 프로세서 (16) 가 메모리 복사 엔진 (20) 에 의한 메모리 복사 명령들의 실행, 예를 들어, 시스템 메모리와 GPU (10) 사이의 데이터 전송 동작들과 병렬로, 예를 들어, 실질적으로 동시에, 그리고 쉐이더 프로세서 (16) 가 더 이상 메모리 복사 명령들을 실행할 필요가 없음에 따라 증가된 성능으로, 데이터에 대한 데이터 프로세싱 명령들을 실행하는 것을 허용할 수도 있다. 메모리 복사 명령들을 위해 이전에 이용된, 쉐이더 프로그램들의 명령들을 위한 슬롯들은 실제 산술 연산들을 수행하기 위해, 예를 들어, 데이터 프로세싱 명령들을 실행하기 위해 쉐이더 프로세서 (16) 에 의해 실행될 명령들을 위해 자유로워질 수도 있다. 메모리 복사 엔진 (20) 으로, 데이터가 시스템 메모리에 복사되거나 시스템 메모리로부터 취출되는 동안, 쉐이더 프로세서 (16) 는 유휴로 남아 있고 다른 명령들 실행할 수 없을 것이 요구되지 않는다. 대신에, 메모리 복사 엔진 (20) 이 이러한 태스크들을 처리하여, 쉐이더 프로세서 (16) 가 데이터 프로세싱 명령들을 계속 실행하는 것을 허용한다.
예시된 바와 같이, 메모리 복사 엔진 (20) 은 쉐이더 프로세서 (16) 로부터 분리된, 독립적인 프로세싱 유닛이나, 쉐이더 프로세서 (16) 가 메모리 복사 엔진 (20) 을 제어하는 것이 가능할 수도 있다. 예를 들어, 메모리 복사 엔진 (20) 및 쉐이더 프로세서 (16) 는 GPU (10) 내에 형성될 수도 있는 반면, 메모리 복사 엔진 (20) 및 쉐이더 프로세서 (16) 는 서로의 내부에 형성될 수 없을 수도 있다. 다시 말해, 일부 실시예들에서, 메모리 복사 엔진 (20) 에 의해 수행되는 기능들은 쉐이더 프로세서 (16) 가 수행할 필요가 없는 기능들이다. 예를 들어, 쉐이더 프로세서 (16) 는 여전히 저장 및 취출을 위해 시스템 메모리에 액세스하는 것이 가능할 수도 있으나; 이러한 태스크들을 수행하는 메모리 복사 엔진 (20) 으로, 쉐이더 프로세서 (16) 는 이러한 태스크들을 수행하는 것으로부터 자유로워질 수도 있다. 쉐이더 프로그램들에 의해 수행될 산술 연산들은 쉐이더 프로세서 (16) 내에 배치된다. 시스템 메모리에 액세스하는 것과 관련된 동작들은 메모리 복사 엔진 (20) 내에 배치된다. 일부 실시예들에서, 메모리 복사 엔진 (20) 은 오직 시스템 메모리에 액세스하는 것과 관련된 기능들만 수행할 수도 있으나; 본 개시물의 양상들은 하기에 설명된 바와 같이 그렇게 제한되지는 않는다.
일반적으로, 메모리 복사 엔진 (20), 쉐이더 프로세서 (16), 및 로컬 메모리 (18) 는 서로로부터 분리되고 GPU (10) 의 칩 상에 있다. 예를 들어, GPU (10) 가 GPU 자체의 집적 회로 (예를 들어, 칩) 인 경우, 메모리 복사 엔진 (20), 쉐이더 프로세서 (16), 및 로컬 메모리 (18) 는 GPU (10) 칩의 별개의 컴포넌트들이다 (예를 들어, 서로로부터 분리되고 GPU (10) 의 칩 상에 있다). 일부 다른 실시예들에서, 메모리 복사 엔진 (20) 및 쉐이더 프로세서 (16) 는 서로로부터 분리되고 GPU (10) 의 일부분일 수도 있으나; 로컬 메모리 (18) 는 다른 디바이스들과 공유될 수도 있다.
메모리 복사 엔진 (20) 으로 하여금 상술된 예시적인 기능들을 수행하게 하는 다양한 방식들이 있을 수도 있다. 일반적으로, 메모리 복사 엔진 (20) 으로 하여금 예시적인 기능들을 수행하게 하는 예시적인 기법들은 메모리 복사 엔진 (20) 이 로컬 메모리 (18) 에 데이터를 미리 저장하여, 이러한 쉐이더 프로그램들이 데이터를 요구하는 경우, 쉐이더 프로세서 (16) 상에서 실행하는 쉐이더 프로그램들에 의한 프로세싱을 위해 이용가능하게 하는 것을 허용할 수도 있다. 예를 들어, 쉐이더 프로세서 (16) 가 정점 데이터를 이용하기 전에 메모리 복사 엔진 (20) 은 로컬 메모리 (18) 에 정점 데이터를 순차적으로 저장하는 것이 가능할 수도 있다. 또한, 메모리 복사 엔진 (20) 으로 하여금 예시적인 기능들을 수행하게 하는 예시적인 기법들은 쉐이더 프로세서 (16) 가 다른 명령들을 실행하는 동안, 메모리 복사 엔진 (20) 이 로컬 메모리 (18) 로부터 시스템 메모리로 데이터를 저장하는 것을 허용할 수도 있다.
일 실시예로서, 커맨드 프로세서 (12) 가 쉐이더 프로세서 (16) 에 의해 실행되는 데이터 프로세싱 명령들과 동시에 메모리 복사 엔진 (20) 에 의해 실행되는 메모리 복사 명령들을 스케줄링할 수도 있다. 예를 들어, 커맨드 프로세서 (12) 는 메모리 복사 엔진 (20) 으로 하여금 시스템 메모리로부터 소스 데이터의 제 1 블록을 취출하고, 로컬 메모리 (18) 에 소스 데이터의 제 1 블록을 저장하게 할 수도 있다. 데이터의 블록은 데이터의 미리 결정된 양, 예를 들어, 오직 설명을 위한 일 실시예로서 10 픽셀들에 대한 속성 값들일 수도 있다. 소스 데이터는 시스템 메모리로부터 취출된 데이터로서 지칭될 수도 있다.
커맨드 프로세서 (12) 는 그 다음에 쉐이더 프로세서 (16) 로 하여금 로컬 메모리 (18) 로부터 소스 데이터의 제 1 블록을 취출하고, 소스 데이터의 제 1 블록을 프로세싱하여 결과 데이터의 제 1 블록을 발생시키게 하도록 할 수도 있다. 결과 데이터의 제 1 블록은 쉐이더 프로세서 (16) 가 소스 데이터의 블록을 프로세싱한 후에 쉐이더 프로세서 (16) 에 의해 발생된 데이터의 블록일 수도 있다.
쉐이더 프로세서 (16) 가 소스 데이터의 제 1 블록을 프로세싱하는 동안 (예를 들어, 동시간에), 커맨드 프로세서 (12) 는 메모리 복사 엔진 (20) 으로 하여금 시스템 메모리로부터 소스 데이터의 제 2 블록을 취출하고, 로컬 메모리 (18) 에 소스 데이터의 제 2 블록을 저장하기 위한 명령들을 실행하게 할 수도 있다. 쉐이더 프로세서 (16) 가 소스 데이터의 제 1 블록을 프로세싱하는 것을 완료한 후에, 쉐이더 프로세서 (16) 는 그러면 소스 데이터의 제 1 블록의 프로세싱의 결과물들, 예를 들어, 결과 데이터의 제 1 블록을 로컬 메모리 (18) 에 저장하고, 로컬 메모리 (18) 로부터의 소스 데이터의 제 2 블록을 프로세싱하는 것을 즉시 시작할 수도 있다. 이러한 방식으로, 로컬 메로리 (18) 가 시스템 메모리로부터 취출된 데이터, 예를 들어, 소스 데이터를 저장하고, 쉐이더 프로세서 (16) 에 의해 프로세싱되어진 프로세싱된 데이터, 예를 들어, 결과 데이터를 저장하기 위한 충분한 저장 능력을 능력을 포함하는 경우, 동시간에, 메모리 복사 엔진 (20) 은 쉐이더 프로세서 (16) 가 데이터 프로세싱 명령들을 실행하는 것과 동시간에 복사 명령들을 실행할 수도 있다. 이러한 방식으로, 커맨드 프로세서 (12) 는 메모리 복사 엔진 (20) 에 의해 수행되는 메모리 복사 동작들을 큐잉할 (queue) 수도 있다.
다른 실시예로서, 쉐이더 프로세서 (16) 는 이전의 실시예에서 설명된 커맨더 프로세서 (12) 의 예시적인 기능들 중 일부 또는 전부를 수행할 수도 있다. 이러한 실시예들에서, 쉐이더 프로세서 (16) 가 커맨드 프로세서 (12) 의 이러한 기능들을 수행할 수도 있기 때문에, 커맨드 프로세서 (12) 가 필요하지 않을 수도 있다. 그러나, 커맨드 프로세서 (12) 가 다른 태스크들을 수행하기 위해 필요한 경우, GPU (10) 는 여전히 커맨드 프로세서 (12) 를 포함할 수도 있다.
예를 들어, 쉐이더 프로세서 (16) 는, 쉐이더 프로세서 (16) 가 소스 데이터의 현재 블록을 프로세싱하는 동안, 메모리 복사 엔진 (20) 이 소스 데이터의 다음 블록을 취출하기 위한 명령들을 실행할 것을 명령하는 커맨드를 메모리 복사 엔진 (20) 에 발행할 수도 있다. 그러면, 소스 데이터의 현재 블록의 프로세싱의 완료 후에, 쉐이더 프로세서 (16) 는 결과 데이터 (예를 들어, 소스 데이터의 현재 블록의 프로세싱의 결과물들) 를 로컬 메모리 (18) 에 저장하고, 메모리 복사 엔진 (20) 이 로컬 메모리 (18) 에 미리 저장한 다음 블록에 대한 소스 데이터를 프로세싱할 수도 있다. 쉐이더 프로세서 (16) 는 또한 메모리 복사 엔진 (20) 이 로컬 메모리 (18) 로부터 결과 데이터를 취출하고 시스템 메모리에 결과 데이터를 저장할 것을 명령할 수도 있다.
또 다른 예로서, 커맨드 프로세서 (12) 는 커맨드 스퀀서로서 동작할 수도 있다. 이러한 예에서, 커맨드 프로세서 (12) 는 중앙 처리 유닛 (CPU) 과 같은 다른 디바이스로부터 GPU (10) 에 의해 수행될 명령들을 수신할 수도 있다. 커맨드 프로세서 (12) 는 수신된 명령들을 쉐이더 프로세서 (16) 에 의해 수행될 명령들과 메모리 복사 엔진 (20) 에 의해 수행될 명령들로 나눌 수도 있다. 예를 들어, 커맨드 프로세서 (12) 는 명령들을 쉐이더 프로세서 (16) 에 의해 수행될 산술 연산들, 및 메모리 복사 엔진 (20) 에 의해 수행될 메모리 상호작용 동작들로 나눌 수도 있다. 커맨드 프로세서 (12) 는 그 다음에 적절히 쉐이더 프로세서 (16) 에 산술 연산들을 수행하기 위한 명령들을 포워딩하고, 메모리 복사 엔진 (20) 에 메모리 상호작용 동작들을 수행하기 위한 명령들을 포워딩할 수도 있다.
예를 들어, 커맨드 프로세서 (12) 는 쉐이더 프로세서 (16) 로 하여금 로컬 메모리 (18) 로부터 데이터의 블록을 취출하고 데이터를 프로세싱하게 하는 명령들을 쉐이더 프로세서 (16) 에 포워딩할 수도 있다. 커맨드 프로세서 (12) 는 시스템 메모리로부터 소스 데이터의 블록을 취출하기 위한 명령들을 메모리 복사 엔진 (20) 에 포워딩할 수도 있고, 쉐이더 프로세서 (16) 및 메모리 복사 엔진 (20) 은 동시간에 그것들의 각각의 명령들을 실행할 수도 있다. 이러한 방식으로, 쉐이더 프로세서 (16) 가 다음에 프로세싱할 소스 데이터가 로컬 메모리 (18) 에 미리 저장된다. 또한, 커맨드 프로세서 (12) 는 로컬 메모리 (18) 로부터 쉐이더 프로세서 (16) 에 의해 수행되는 동작들로부터 기인하는 데이터를 취출하고, 시스템 메모리에 이러한 데이터를 저장하기 위한 명령들을 메모리 복사 엔진 (20) 에 포워딩할 수도 있다.
다른 실시예들에서, CPU 와 같은 다른 디바이스가 쉐이더 프로세서 (16) 및 메모리 복사 엔진 (20) 의 각각에 직접적으로 명령들을 송신할 수도 있다. 예를 들어, CPU 는 시스템 메모리와의 상호작용들과 관련된 모든 명령들을 메모리 복사 엔진 (20) 에, 그리고 산술 연산들과 관련된 모든 명령들을 쉐이더 프로세서 (16) 에 송신할 수도 있다.
이러한 실시예들에서는, CPU 가 쉐이더 프로세서 (16) 및 메모리 복사 엔진 (20) 에 직접적으로 명령들을 제공할 수도 있기 때문에 커맨드 프로세서 (12) 가 필요하지 않을 수도 있다. 그러나, 커맨드 프로세서 (12) 가 다른 태스크들을 수행하기 위해 필요한 경우, GPU (10) 는 여전히 커맨드 프로세서 (12) 를 포함할 수도 있다.
이전의 실시예들 (예를 들어, GPU (10) 가 커맨드 프로세서 (12) 를 포함하는 경우, 또는 GPU (10) 가 커맨드 프로세서 (12) 를 포함하지 않는 경우) 에서, 메모리 복사 엔진 (20) 은 쉐이더 프로세서 (16) 에 의해 후속하여 이용될 데이터를 미리 저장할 수도 있다. 일부 실시예들에서, 메모리 복사 엔진 (20) 은 메모리 복사 엔진 (20) 과 쉐이더 프로세서 (16) 의 명령들을 동기화하기 위해, 쉐이더 프로세서 (16) 가 이용해야할 다음 데이터가 로컬 메모리 (18) 에 이미 저장되어 있다는 표시를 쉐이더 프로세서 (16) 에 제공할 수도 있다. 쉐이더 프로세서 (16) 는 그 다음에 로컬 메모리 (18) 로부터 미리 저장된 데이터를 취출하며, 데이터를 프로세싱하고, 데이터의 프로세싱의 결과물인 결과 데이터를 발생시킬 수도 있다. 쉐이더 프로세서 (16) 는 그 다음에 로컬 메모리 (18) 에 결과 데이터를 저장할 수도 있다. 일부 예들에서, 예를 들어, 결과 데이터가 쉐이더 프로세서 (16) 에 의해 더 이상 필요하지 않은 경우, 메모리 복사 엔진 (20) 은 로컬 메모리 (18) 로부터 결과 데이터를 취출하고 시스템 메모리에 결과 데이터를 저장할 수도 있다. 결과 데이터가 후속하는 프로세싱을 위해 필요한 경우들일지라도, 메모리 복사 엔진 (20) 이 로컬 메로리 (18) 로부터 결과 데이터를 취출하고 시스템 메모리에 결과 데이터를 저장하여 로컬 메모리 (18) 상의 메모리 공간을 자유롭게 하는 것이 가능할 수도 있다.
본 개시물에서 설명된 예시적인 기법들은 다양한 유형의 시스템들에서 이로울 수도 있다. 몇몇 예들로서, 본 개시물에서 설명된 기법들은 비닝 (binning) 기반 렌더링, 이미지 프로세싱, 경계 영역 복사 (예를 들어, 이웃하는 블록들 또는 타일들의 부분들의 복사), 및 큐 기반 통신의 최적화를 위해 적용가능할 수도 있다. 일반적으로, 본 개시물에서 설명된 예시적인 기법들은 GPU (10) 와 시스템 메모리 사이의 데이터의 전송을 요구하는 임의의 쉐이더 애플리케이션에 이로울 수도 있다.
실시예로서, 이러한 기능성은 발생된 이미지에 대해 필터링 동작들을 수행하는 쉐이더 프로그램을 실행하는데 이로울 수도 있으나, 본 개시물의 양상들은 그렇게 제한되는 것으로 여겨져서는 안된다. 예를 들어, 필터링 동작들을 수행하는 쉐이더 프로그램은 발생된 이미지들에 대해 블록 × 블록 또는 타일 × 타일 단위로 이러한 필터링 동작들을 수행할 수도 있다. 이러한 예에서, 쉐이더 프로세서 (16) 가 현재 블록 또는 타일에 대해 태스크들을 수행하는 동안, 메모리 복사 엔진 (20) 은 다음 블록 또는 타일을 미리 저장할 수도 있다. 본 개시물의 양상들은 쉐이더 프로세서 (16) 가 필터링 동작들을 수행하는 쉐이더 프로그램을 실행하는 상황들을 더한 상황들에 이로울 수도 있다는 것이 이해되어야 한다. 데이터를 미리 저장하는 메모리 복사 엔진 (20) 의 능력은 매우 다양한 상이한 유형의 쉐이더 프로그램들에 걸쳐 이로울 수도 있다.
다른 실시예로서, 필터링 동작들을 수행하는 경우, 메모리 복사 엔진 (20) 의 기능성은, 필터에 의한 요구에 따라, 소스 이미지의 다음 블록 또는 타일에 더해, 그것의 이웃하는 블록들 또는 타일들의 부분들을 로딩하는 것을 허용할 수도 있다. 일부 실시예들에서, 쉐이더 프로그램들이 현재 블록 또는 타일 외부의 데이터를 로컬 메모리 (18) 에 저장할 필요가 있을 경우, 동작은 리던던시 또는 증가된 복잡도를 초래할 수도 있다. 메모리 복사 엔진 (20) 은 이러한 방식으로 제한되지 않을 수도 있다. 예를 들어, 메모리 복사 엔진 (20) 은 리던던시 또는 증가된 복잡도 없이 데이터의 보다 큰 부분을 취출하는 것이 가능할 수도 있다.
또한, 일부 예들에서, 이러한 쉐이더 프로그램들은 직사각형 풋프린트 ( footprint) 로 데이터 (예를 들어, 직사각형 영역을 형성하는 로컬 메모리의 저장 위치들에 저장되어야 할 데이터) 를 로딩할 것이 요구될 수도 있다. 메모리 복사 엔진 (20) 은 이러한 제한들로 데이터를 로딩할 것이 요구되지 않을 수도 있다. 일부 실시예들에서, 메모리 복사 엔진 (20) 은 비 직사각형 풋프린트들로 데이터를 로딩할 수 있을 수도 있도록 구성될 수도 있다. 이러한 방식에서, 메모리 복사 엔진 (20) 은 리던던시 및 복잡도를 감소시킬 수도 있다.
이전의 예들이 시스템 메모리에 액세스하는 것과 관련된 태스크들을 수행하는 메모리 복사 엔진 (20) 으로 설명되지만, 본 개시물의 양상들은 그렇게 제한되지 않는다. 일부 실시예들에서, 메모리 복사 엔진 (20) 은, 시스템 메모리에 액세스하는 것과 관련된 태스크들을 수행하는 대신에 또는 그에 더해, 변경 태스크들을 수행할 수도 있다. 변경 태스크들은 시스템에 저장된 데이터 또는 시스템 메모리에 저장될 데이터를 보다 이용가능한 형태로 변경하는 것을 지칭할 수도 있다. 변경 태스크들은 또한 데이터가 저장되는 위치들을 변경하는 것을 지칭할 수도 있다.
메모리 복사 엔진 (20) 이 데이터가 저장되는 위치들을 변경하는 변경 태스크들의 일 실시예로서, 메모리 복사 엔진 (20) 은 데이터를 모으고 조밀화할 수도 있다. 예를 들어, 상이한 쉐이더 프로그램들 사이에 공유되는 데이터는 드문드문 있을 수도 있다. 드문드문 있는 데이터는 상대적으로 큰 저장 부분에 걸쳐 저장된 상대적으로 작은 양의 데이터를 지칭할 수도 있다. 이러한 사례들에서, 메모리 복사 엔진 (20) 은 시스템 메모리 또는 로컬 메모리 (18) 의 상대적으로 큰 부분에 걸쳐 데이터가 저장되지 않도록 데이터를 조밀화할 수도 있다. 대신에, 드문드문 있는 데이터가 메모리의 보다 작은 부분에 재기록될 수도 있다. 데이터의 이러한 조밀화는 메모리 복사 엔진 (20) 이 보다 빠르게 데이터에 액세스하는 것을 허용할 수도 있다. 또한, 쉐이더 프로세서 (16) 가 이러한 데이터 조밀화를 알지 못하기 때문에, 산술 연산들을 위해 데이터를 이용하는 쉐이더 프로그램들의 명령들을 변경할 필요가 없을 수도 있다.
메모리 복사 엔진 (20) 이 시스템 메모리에 저장된 데이터 또는 시스템 메모리에 저장될 데이터를 변경하는 몇몇 실시예들로서, 메모리 복사 엔진 (20) 은 데이터의 선형 블록을 데이터의 타일화된 블록으로, 또는 로컬 메모리 (18) 로의 저장이나 시스템 메모리의 저장을 위해 반대로 전환할 수도 있다. 메모리 복사 엔진 (20) 은 또한 매트릭스의 x, y 방향으로 데이터를 셔플하며, 적색-녹색-청색 (RGB) 색상들을 루마 및 색차 컴포넌트들 (YUV) 색상들로, 혹은 그 반대로 전환하며, RGB 혹은 YUV 포맷을 다른 포맷으로 인코딩하며, 또한 쉐이더 프로세서 (16) 에 유용한 임의의 다른 변경을 할 수도 있다. 예를 들어, 메모리 복사 엔진 (20) 은 또한 로컬 메모리 (18) 에 저장된 데이터를 일부 다른 쉐이더 프로그램에 의해 이용가능한 다른 형태로 전환하는 변경 명령들을 실행할 수도 있다. 메모리 복사 엔진 (20) 은 또한 시스템 메모리로부터 데이터를 취출하고 로컬 메모리 (18) 에 데이터를 저장하는 경우 압축된 데이터 구조들을 또는 이미지 포맷들을 팩킹하거나 언팩킹할 수 있으며, 뿐만 아니라 로컬 메모리 (18) 로부터 데이터를 취출하고 시스템 메모리에 데이터를 저장하는 경우 압축된 데이터 구조들 또는 이미지 포맷들을 팩킹하거나 언팩킹할 수도 있다.
예를 들어, 컴퓨터 쉐이더는 정점 쉐이더에 대한 결과 데이터를 발생시킬 수도 있다. 그러나, 결과 데이터의 데이터 포맷은 정점 쉐이더에 대한 정확한 포맷이 아닐 수도 있다. 이러한 예에서, 메모리 복사 엔진 (20) 은 컴퓨터 쉐이더로부터의 결과 데이터의 포맷을 정점 쉐이더에 대해 적합한 포맷으로 변경할 수도 있다. 메모리 복사 엔진 (20) 은 또한 데이터가 저장되는 곳을 변경할 수도 있다 (예를 들어, 로컬 메모리 (18) 내의 일 장소로부터 로컬 메모리 (18) 내의 다른 장소로 데이터를 복사한다). 성능의 면에서, 메모리 복사 엔진 (20) 이 쉐이더 프로세서 (16) 가 로컬 메모리 (18) 에 대해 갖는 고속 액세스 패턴들을 이용함으로써 쉐이더 프로세서 (16) 가 효율적으로 액세스할 수 있는 로컬 메모리 (18) 의 위치들에 데이터를 배치할 수도 있기 때문에 이는 이로울 수도 있다.
추가적인 실시예들로서, 메모리 복사 엔진 (20) 은 또한 변경 태스크들, 예컨대, 링크된 리스트들의 선형 포맷으로의 전환, 평면에서 패딩된 YUV 로의 또는 그 반대의 전환, 인코딩된 HDR (High Dynamic Range) 혹은 RGB 포맷들의 FP16 혹은 FP32 로의 전환, 패딩의 추가 혹은 제거, 데이터 정렬, 데이터의 압축 혹은 압축해제, 2D 웨이브렛 변환, (리스트 구조 및 트리 구조와 같은) 데이터 구조 파싱 등을 수행할 수도 있다. 메모리 복사 엔진 (20) 은 또한 데이터의 다수의 복사본들을 제공할 수도 있다. 예를 들어, 시스템 메모리에 데이터를 저장하는 경우, 메모리 복사 엔진 (20) 은 손상으로부터의 데이터의 보호를 위해 데이터의 다수의 복사본들을 저장할 수도 있다. 예시용으로 제공된, 메모리 복사 엔진 (20) 이 수행할 수 있는 변경 태스크들의 다양한 실시예들이 있고, 본 개시물의 양상들은 위의 실시예들에 제한되는 것으로 여겨져서는 안된다.
이러한 방식으로, 쉐이더 프로세서 (16) 에 의해 실행되었을 수도 있는 변경 명령들 중 일부 변경 명령이 메모리 복사 엔진 (20) 으로 오프로드될 수도 있다. 이는 쉐이더 프로세서 (16) 가 산술 연산들과 같은 데이터 프로세싱 명령들만을 실행하는 것을 허용할 수도 있고, 메모리 복사 엔진 (20) 이 임의의 복사 및 변경 태스크들을 수행할 수도 있다.
로컬 메모리 (18) 는 캐시, 레지스터들, 또는 데이터가 저장될 수 있는 임의의 형태로서 형성될 수도 있다. GPU (10) 의 컴포넌트들은 시스템 메모리로부터 데이터를 취출하거나 시스템 메모리에 데이터를 저장하는 것보다 빠르게 그리고 보다 적은 전력 소비로 로컬 메모리 (18) 로부터 데이터를 취출하거나 로컬 메모리에 데이터를 저장하는 것이 가능할 수도 있다. 예를 들어, GPU (10) 의 컴포넌트들은 확장 스케줄링을 요구하지 않고 별도의 버스 없이 로컬 메모리 (18) 에 액세스할 수도 있다. 예를 들어, 시스템 메모리에 액세스하는 것은 시간을 소비할 수도 스케줄링에 액세스하는 것을 요구할 수도 있다. 예를 들어, GPU (10) 는 시스템 버스 (24) 를 따른 데이터 전송이 없는 경우 이용가능한 타임슬롯들 중에 시스템 메모리에 액세스하는 것이 가능할 수도 있다. 시스템 버스 (24) 를 통해 시스템 메모리에 액세스하는 것은 전력을 소비할 수도 있다.
또한, 로컬 메모리 (18) 가 GPU (10) 의 내부에 있는 것으로 예시되지만, 본 개시물의 양상들은 그렇게 제한되지 않는다. 일부 예들에서, GPU (10) 는 보다 큰 집적 회로의 일부분일 수도 있다. 이러한 집적 회로는 추가적인 프로세싱 유닛들, 예컨대, 디스플레이 프로세서, 비디오 프로세서 등을 포함할 수도 있다. 이러한 예들에서, 로컬 메모리 (18) 는 가능하게는 GPU (10) 의 외부에 있을 수도 있고, 집적 회로 내의 다양한 프로세싱 유닛들에 대해 로컬 메모리로서 기능할 수도 있다. 이런 의미에서, 로컬 메모리 (18) 는 공유되는 로컬 메모리로 여겨질 수도 있다. 그러나, 이러한 실시예들에서도, GPU (10) 의 컴포넌트들은 시스템 버스 (24) 를 통해 시스템 메모리에 액세스하는 것과 비교하여 보다 빠르고 보다 적은 전력 소비로 로컬 메모리 (18) 에 액세스하는 것이 가능할 수도 있다. 또한, 이러한 실시예들 중 임의의 실시예에서, 로컬 메모리 (18) 가 GPU (10) 에 대한 로컬 메모리로서 기능하기 때문에, GPU (10) 는 여전히 로컬 메모리 (18) 를 포함하는 것으로 보일 수도 있다. 예를 들어, 로컬 메모리 (18) 가 GPU (10) 의 외부에 있는 경우일지라도, 로컬 메모리 (18) 가 GPU (10) 의 컴포넌트들에 대해 로컬 메모리 저장 및 취출을 제공하기 때문에, 로컬 메모리 (18) 는 여전히 기능적으로는 GPU (10) 의 일부분으로 여겨질 수도 있다.
도 2 는 본 개시물의 하나 이상의 양상들을 구현하도록 동작가능할 수도 있는 디바이스 (26) 의 실시예를 도시하는 블록 다이어그램이다. 디바이스 (26) 의 실시예들은 비디오 디바이스들, 예컨대, 미디어 플레이어들, 셋 톱 박스들, 모바일 전화기들과 같은 무선 핸드셋들, 개인 휴대 정보 단말기 (PDA) 들, 데스크톱 컴퓨터들, 랩톱 컴퓨터들, 게임 콘솔들, 비디오 회의 유닛들, 태블릿 컴퓨팅 디바이스들 등을 포함하나, 이로 제한되지는 않는다. 디바이스 (26) 는 프로세서 (28), 그래픽 프로세싱 유닛 (GPU) (10), 시스템 메모리 (30), 송수신기 모듈 (32), 사용자 인터페이스 (34), 디스플레이 버퍼 (36), 및 디스플레이 (38) 를 포함할 수도 있다.
도 2 에 도시된 바와 같이, 디바이스 (26) 의 GPU (10) 는 도 1 의 GPU (10) 와 동일하거나 실질적으로 유사할 수도 있다. 예를 들어, GPU (10) 는 도 1 의 메모리 복사 엔진 (20) 과 동일하거나 실질적으로 유사한 메모리 복사 엔진 (20) 을 포함한다. 예를 들어, 메모리 복사 엔진 (20) 은 시스템 메모리 (30) 에 액세스하는 것을 요구하는 태스크들을 수행할 뿐만 아니라, 일부 실시예들에서는, 데이터 패맷화 태스크들을 수행할 수도 있다. 간략함을 위해, GPU (10) 및 메모리 복사 엔진 (20) 의 예시적인 기능성은 도 2 의 실시예에서 더 이상 논의되지 않는다.
프로세서 (28) 는 디바이스 (26) 의 중앙 처리 유닛 (CPU) 일 수도 있고, 도 1 에서 상술된 CPU 의 기능들을 수행할 수도 있다. 프로세서 (28) 의 실시예들은 DSP, 범용 마이크로프로세서, ASIC, FPGA, 또는 다른 등가의 집적 혹은 이산 논리 회로부를 포함하나, 이로 제한되지 않는다. 프로세서 (28) 및 GPU (10) 가 별도의 유닛들로서 예시되나, 본 개시물의 양상들은 그렇게 제한되지 않는다. 일부 실시예들에서, 프로세서 (28) 및 GPU (10) 는 통상의 집적 회로 (IC) 로 형성될 수도 있다. 프로세서 (28) 및 GPU (10) 는 단일 프로세서 코어 또는 다중 프로세서 코어들을 각각 포함할 수도 있다.
디바이스 (26) 는 명확함를 위해 도 2 에 도시되지 않은 추가적인 모듈들 또는 유닛들을 포함할 수도 있다. 예를 들어, 디바이스 (26) 는 둘 중 어느 하나도 도 2 에 도시되지 않은 스피커 및 마이크로폰을 포함하여, 디바이스 (26) 가 모바일 무선 전화기 또는 디바이스 (26) 가 미디어 플레이어인 경우에는 스피커인 실시예들에서 전화 통신들을 시행할 수도 있다. 또한, 디바이스 (26) 에 도시된 다양한 모듈들 및 유닛들은 디바이스 (26) 의 모든 예에서 필수적이지 않을 수도 있다. 예를 들어, 디바이스 (26) 가 데스크톱 컴퓨터이거나 외부의 사용자 인터페이스 혹은 디스플레이와 인터페이싱하기 위한 설비를 갖춘 다른 디바이스인 경우인 실시예들에서 사용자 인터페이스 (34) 및 디스플레이 (38) 는 디바이스 (26) 의 외부에 있을 수도 있다.
시스템 메모리 (30) 는 디바이스 (26) 에 대한 전체 메모리일 수도 있으나, GPU (10) 에 대한 로컬 메모리 (예를 들어, 로컬 메모리 (18)) 는 아닐 수도 있다. 예를 들어, 시스템 메모리 (30) 는, 결과 데이터가 GPU (10) 의 쉐이더 프로세서 (16) 에 의해 수행되는 태스크들로부터 기인할 수도 있기 때문에 결과 데이터라고 지칭될 수도 있는, GPU (10) 에 의해 생성된 데이터를 저장할 수도 있다. 유사하게, 시스템 메모리 (30) 는, 소스 데이터가 GPU (10) 의 쉐이더 프로세서 (16) 가 태스크들을 수행하는데 이용하는 데이터이기 때문에 소스 데이터라고 지칭될 수도 있는, GPU (10) 에 의해 이용될 데이터를 저장할 수도 있다. 시스템 메모리 (30) 는 또한 GPU (10) 의 쉐이더 프로세서 (16) 에 의해 실행되는 쉐이더 프로그램들을 위해 미리 컴파일링되고/되거나 컴파일링된 코드를 저장할 수도 있다. 디바이스 (26) 의 다양한 컴포넌트들, 예컨대, 프로세서 (28) 및 GPU (10) 는, 시스템 버스 (24) 를 통해 시스템 메모리 (30) 에 액세스할 수도 있다.
시스템 메모리 (30) 의 실시예들은 랜덤 액세스 메모리 (RAM), 읽기 전용 메모리 (ROM), 전기적으로 삭제가능한 프로그램가능 판독 전용 메모리 (EEPROM), CD-ROM 혹은 다른 광학 디스크 스토리지, 자기 디스크 스토리지 혹은 다른 자기 스토리지 디바이스들, 플래시 메모리, 또는 원하는 프로그램 코드를 명령들 또는 데이터 구조들의 형태로 저장하기 위해 이용될 수 있고 컴퓨터, 프로세서, 혹은 CPU 에 의해 액세스될 수 있는 임의의 다른 매체를 포함하나, 이에 제한되지는 않는다. 일부 실시예에서, 시스템 메모리 (30) 는 하나 이상의 컴퓨터 판독가능 저장 매체들, 예컨대, 컴퓨터 판독가능 저장 디바이스를 포함할 수도 있다. 예를 들어, 일부 예시적인 구현들에서, 시스템 메모리 (30) 는 프로세서 (28) 및/또는 GPU (10) 로 하여금 본 개시물에서 프로세서 (28) 및 GPU (10) 에 할당된 기능들을 수행하게 하는 명령들을 포함할 수도 있다.
시스템 메모리 (30) 는, 일부 예들에서, 비일시적 저장 매체로 여겨질 수도 있다. 용어 "비일시적인" 은 저장 매체가 반송파 또는 전파 신호에서 구체화되지 않는 것을 가리킬 수도 있다. 그러나, 용어 "비일시적인" 은 시스템 메모리 (30) 가 이동가능하지 않은 것을 의미하는 것으로 해석되어서는 안된다. 일 실시예로서, 시스템 메모리 (30) 는 디바이스 (26) 로부터 제거되거나, 다른 디바이스로 이동될 수도 있다. 다른 실시예로서, 시스템 메모리 (30) 와 실질적으로 유사한 저장 디바이스는 디바이스 (26) 에 삽입될 수도 있다. 소정의 실시예들에서, 비일시적 저장 매체는 시간이 경과함에 따라 변할 수 있는 데이터를 (예를 들어, RAM 에) 저장할 수도 있다.
사용자 인터페이스 (34) 의 실시예들은 트랙볼, 마우스, 키보드, 및 다른 유형의 입력 디바이스들을 포함하나, 이에 제한되는 것은 아니다. 사용자 인터페이스 (34) 는 또한 터치 스크린일 수도 있고, 디스플레이 (38) 의 일부로서 포함될 수도 있다. 송수신기 모듈 (32) 은 디바이스 (26) 와 다른 디바이스나 네트워크 사이의 무선 또는 유선 통신을 허용하는 회로부를 포함할 수도 있다. 송수신기 모듈 (32) 은 변조기들, 복조기들, 증폭기들, 및 유선 또는 무선 통신을 위한 다른 그러한 회로부를 포함할 수도 있다.
GPU (10) 는 디스플레이 (38) 상에 디스플레이될 이미지에 대한 픽셀 값들을 출력할 수도 있다. 일부 실시예들에서, GPU (10) 는 디스플레이 (38) 에 직접적으로 픽셀 값들을 출력할 수도 있다. 일부 대안적인 실시예들에서, GPU (10) 는 디스플레이 버퍼 (36) 에 이미지의 픽셀 값들을 출력할 수도 있다. 디스플레이 버퍼 (36) 는 전체 이미지가 렌더링될 때까지 이미지의 픽셀 값들을 일시적으로 저장할 수도 있다. 디스플레이 버퍼 (36) 는 이미지 프레임 버퍼로 여겨질 수도 있다. 디스플레이 버퍼 (36) 는 그러면 디스플레이 (38) 상에 디스플레이되도록 렌더링된 이미지를 송신할 수도 있다. 디스플레이 (38) 는 액정 디스플레이 (LCD), 유기 발광 다이오드 디스플레이 (OLED), 음극선관 (CRT) 디스플레이, 플라즈마 디스플레이, 또는 다른 유형의 디스플레이 디바이스를 포함할 수도 있다.
도 3 은 본 개시물의 하나 이상의 양상들에 따른 GPU (10) 의 예시적인 동작을 도시하는 플로우 차트이다. 오직 예시를 위해, 도 1 및 도 2 가 참조된다.
GPU (10) 의 메모리 복사 엔진 (20) 은 시스템 버스 (24) 를 통해 GPU (10) 의 외부에 있은 시스템 메모리 (30) 로부터 제 1 데이터를 취출할 수도 있다 (40). 제 1 데이터는 시스템 메모리 (30) 저장된 데이터를 지칭하는 소스 데이터일 수도 있다. 메모리 복사 엔진 (20) 은 로컬 메모리 (18) 에 제 1 데이터를 저장할 수도 있다 (42). 메모리 복사 엔진 (20) 은 로컬 메모리 (18) 에 제 1 데이터를 저장하기 위해 시스템 버스 (24) 에 액세스할 필요가 없을 수도 있다. 일부 실시예들에서, 메모리 복사 엔진 (20) 은 제 1 데이터를 변경하고 로컬 메모리에 변경된 제 1 데이터를 저장할 수도 있다.
GPU (10) 의 쉐이더 프로세서 (16) 는 로컬 메모리 (18) 로부터 제 1 데이터를 취출할 수도 있고 (44), 시스템 버스 (24) 에 액세스하지 않으면서 그렇게 할 수도 있다. 쉐이더 프로세서 (16) 는 제 1 데이터를 프로세싱하여 제 2 데이터를 발생시킬 수도 있다 (46). 예를 들어, 쉐이더 프로세서 (16) 는 제 1 데이터에 대해 산술 연산들을 수행하는 쉐이더 프로그램들의 명령들을 실행하여 제 2 데이터를 발생시킬 수도 있다. 제 2 데이터는 제 2 데이터가 쉐이더 프로세서 (16) 의 동작들로부터 기인하는 데이터임을 표시하기 위한 결과 데이터로서 보일 수도 있다. 쉐이더 프로세서 (16) 는 로컬 메모리 (18) 에 제 2 데이터를 저장할 수도 있다 (48). 일부 실시예들에서, 쉐이더 프로세서 (16) 는 시스템 메모리 (30) 에 액세스할 수 없을 수도 있고, 오직 메모리 복사 엔진 (20) 만이 시스템 메모리 (30) 에 액세스할 수 있을 수도 있으나, 본 개시물의 양상들은 그렇게 제한되지 않는다. 또한, 일부 실시예들에서, 메모리 복사 엔진 (20) 은 제 2 데이터를 변경하고 시스템 메모리에 변경된 제 2 데이터를 저장할 수도 있다.
메모리 복사 엔진 (20) 은 로컬 메모리 (18) 로부터 제 2 데이터를 취출할 수도 있다 (50). 메모리 복사 엔진 (20) 은 시스템 버스 (24) 를 통해 시스템 메모리 (30) 에 제 2 데이터를 저장할 수도 있다 (52). 일부 실시예들에서, 상술된 바와 같이, 메모리 복사 엔진은 또한 데이터를 변경하도록 동작가능할 수도 있다. 예를 들어, 메모리 복사 엔진 (20) 은 로컬 메모리 (18) 에 저장된 제 1 데이터를, 쉐이더 프로세서 (16) 상에서 실행하는 쉐이더 프로그램에 의해 이용가능한 데이터로 변경할 수도 있다. 다른 실시예로서, 메모리 복사 엔진 (20) 은 로컬 메모리 (18) 에 저장된 제 2 데이터를, 쉐이더 프로세서 (16) 상에서 실행하는 쉐이더 프로그램에 의해 이용가능한 데이터로 변경할 수도 있다.
하나 이상의 예들에서, 설명된 기능들은 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 임의의 조합으로 구현될 수도 있다. 소프트웨어로 구현되는 경우, 기능들은 하나 이상의 명령들 또는 코드로서 컴퓨터 판독가능 매체 상에 저장될 수도 있다. 컴퓨터 판독가능 매체들은 컴퓨터 데이터 저장 매체들을 포함할 수도 있다. 데이터 저장 매체들은 본 개시물에 설명된 기법들의 구현을 위한 명령들, 코드, 및/또는 데이터 구조들을 취출하기 위한 하나 이상의 컴퓨터들 또는 하나 이상의 프로세서들에 의해 액세스될 수 있는 임의의 이용가능한 매체들일 수도 있다. 비제한적인 예로서, 이러한 컴퓨터 판독가능 매체들은 RAM, ROM, EEPROM, CD-ROM 혹은 다른 광학 디스크 스토리지, 자기 디스크 스토리지 혹은 다른 자기 스토리지 디바이스들, 또는 명령들 또는 데이터 구조들의 형태로 원하는 프로그램 코드를 저장하는에 이용될 수 있고 컴퓨터에 의해 액세스될 수 있는 임의의 다른 매체를 포함할 수 있다. 본원에서 이용되는 바와 같은 디스크 (disk) 및 디스크 (disc) 는 컴팩트 디스크 (CD) , 레이저 디스크, 광 디스크, 디지털 다기능 디스크 (DVD), 플로피 디스크, 및 블루레이 디스크를 포함하는데, 여기서 디스크 (disk) 들은 보통 데이터를 자기적으로 재생하며, 반면 디스크 (disc) 들은 레이저들을 이용하여 광학적으로 데이터를 재생한다. 위의 조합들도 컴퓨터 판독가능 매체들의 범위 내에 포함되어야 한다.
하나 이상의 프로세서들, 예컨대, 하나 이상의 디지털 신호 프로세서 (DSP) 들, 범용 마이크로프로세서들, 주문형 반도체 (ASIC) 들, 필드 프로그램가능 로직 어레이 (FPGA) 들, 또는 다른 등가의 집적 혹은 이산 논리 회로부에 의해 코드가 실행될 수도 있다. 이에 따라, 본원에서 이용되는 바와 같은 용어 "프로세서" 는 앞서 언급한 구조들 중 임의의 구조, 또는 본원에서 설명된 기법들을 구현하기에 적합한 임의의 다른 구조를 지칭할 수도 있다. 또한, 기법들은 하나 이상의 회로들 또는 논리 소자들에서 완전히 구현될 수 있다.
본 개시물의 기법들은 무선 핸드셋, 집적 회로 (IC), 또는 IC 들의 세트 (예를 들어, 칩셋) 를 포함하여, 매우 다양한 디바이스들 또는 장치들로 구현될 수도 있다. 개시된 기술들을 수행하도록 구성된 디바이스들의 기능적 양상들을 강조하기 위해 다양한 컴포넌트들, 모듈들, 또는 유닛들이 본 개시물에서 설명되지만, 반드시 상이한 하드웨어 유닛들에 의한 실현을 요구하지는 않는다. 오히려, 상술한 바와 같이, 다양한 유닛들은, 적합한 소프트웨어 및/또는 펌웨어와 연계하여, 하드웨어 유닛에 통합되거나 또는 상술한 하나 이상의 프로세서들을 포함하여, 상호동작적인 하드웨어 유닛들의 집합에 의해 제공될 수도 있다.
다양한 실시예들이 설명되었다. 이들 및 다른 실시예들은 다음의 청구항들의 범위 내에 있다.

Claims (41)

  1. 장치로서,
    시스템 버스를 통해 액세스가능한 시스템 메모리; 및
    그래픽 프로세싱 유닛 (graphics processing unit; GPU) 을 포함하고,
    상기 그래픽 프로세싱 유닛은,
    로컬 메모리;
    상기 시스템 버스를 통해 상기 시스템 메모리로부터 제 1 데이터를 취출하고 상기 로컬 메모리에 상기 제 1 데이터를 저장하고, 상기 로컬 메모리로부터 제 2 데이터를 취출하고 상기 시스템 버스를 통해 상기 시스템 메모리에 상기 제 2 데이터를 저장하도록 동작가능한 메모리 복사 엔진; 및
    상기 로컬 메모리로부터 상기 제 1 데이터를 취출하며, 상기 제 1 데이터를 프로세싱하여 상기 제 2 데이터를 발생시키고, 상기 로컬 메모리에 상기 제 2 데이터를 저장하도록 동작가능한 쉐이더 프로세서를 포함하는, 장치.
  2. 제 1 항에 있어서,
    상기 메모리 복사 엔진, 상기 쉐이더 프로세서, 및 상기 로컬 메모리는 서로로부터 분리되고, 상기 GPU 의 칩 상에 있는, 장치.
  3. 제 1 항에 있어서,
    상기 제 1 데이터는 소스 데이터를 포함하고, 상기 제 2 데이터는 상기 소스 데이터의 프로세싱으로부터 기인하는 결과 데이터를 포함하는, 장치.
  4. 제 1 항에 있어서,
    상기 메모리 복사 엔진은 하드웨어 또는 하드웨어 상에서 실행하는 소프트웨어로서 구현되고, 상기 하드웨어는 상기 쉐이더 프로세서로부터 분리되고 상기 GPU 의 칩 상에 있는, 장치.
  5. 제 1 항에 있어서,
    상기 쉐이더 프로세서는 상기 시스템 메모리로부터 상기 제 1 데이터를 취출하도록 동작가능하지 않는 것, 및 상기 시스템 메모리에 상기 제 2 데이터를 저장하도록 동작가능하지 않는 것 중 적어도 하나인, 장치.
  6. 제 1 항에 있어서,
    상기 쉐이더 프로세서는 상기 제 1 데이터를 프로세싱하여 상기 제 2 데이터를 발생시키는 산술 연산들을 위한 명령들을 실행시키도록 동작가능한, 장치.
  7. 제 1 항에 있어서,
    상기 메모리 복사 엔진은 상기 로컬 메모리에 저장된 상기 제 1 데이터를, 상기 쉐이더 프로세서 상에서 실행하는 쉐이더 프로그램에 의해 이용가능한 데이터로 변경하도록 더 동작가능한, 장치.
  8. 제 1 항에 있어서,
    상기 메모리 복사 엔진은 상기 로컬 메모리에 저장된 상기 제 2 데이터를, 상기 쉐이더 프로세서 상에서 실행하는 쉐이더 프로그램에 의해 이용가능한 데이터로 변경하도록 더 동작가능한, 장치.
  9. 제 1 항에 있어서,
    상기 장치는 미디어 플레이어, 셋 톱 박스, 무선 핸드셋, 개인 휴대 정보 단말기 (PDA), 데스크톱 컴퓨터, 랩톱 컴퓨터, 게임 콘솔, 비디오 회의 유닛, 및 태블릿 컴퓨팅 디바이스 중 적어도 하나를 포함하는, 장치.
  10. 제 1 항에 있어서,
    상기 메모리 복사 엔진은, 상기 쉐이더 프로세서가 상기 로컬 메모리로부터 제 4 데이터를 취출하거나, 상기 제 4 데이터를 프로세싱하거나, 상기 로컬 메모리에 상기 제 4 데이터를 저장하는 것과 동시에, 상기 시스템 메모리로부터 제 3 데이터를 취출하거나 상기 시스템 메모리에 상기 제 3 데이터를 저장하도록 동작가능한, 장치.
  11. 제 1 항에 있어서,
    상기 메모리 복사 엔진은 상기 메모리 복사 엔진이 상기 로컬 메모리에 상기 제 1 데이터를 저장하는 것, 및 상기 시스템 메모리에 상기 제 2 데이터를 저장하는 것 중 적어도 하나를 완료했다는 것을 상기 쉐이더 프로세서에 표시하도록 더 동작가능한, 장치.
  12. 제 1 항에 있어서,
    상기 메모리 복사 엔진은 상기 제 1 데이터를 변경하도록 더 동작가능하고, 상기 메모리 복사 엔진이 상기 제 1 데이터를 저장하도록 동작가능한 것은, 상기 메모리 복사 엔진이 상기 로컬 메모리에 변경된 상기 제 1 데이터를 저장하도록 동작가능한 것을 포함하는, 장치.
  13. 제 1 항에 있어서,
    상기 메모리 복사 엔진은 상기 제 2 데이터를 변경하도록 더 동작가능하고, 상기 메모리 복사 엔진이 상기 제 2 데이터를 저장하도록 동작가능한 것은, 상기 메모리 복사 엔진이 상기 시스템 메모리에 변경된 상기 제 2 데이터를 저장하도록 동작가능한 것을 포함하는, 장치.
  14. 그래픽 프로세싱 유닛 (GPU) 의 메모리 복사 엔진으로, 상기 GPU 의 외부에 있는 시스템 메모리로부터 시스템 버스를 통해 제 1 데이터를 취출하는 단계;
    상기 GPU 의 상기 메모리 복사 엔진으로, 상기 GPU 의 로컬 메모리에 상기 제 1 데이터를 저장하는 단계;
    상기 GPU 의 쉐이더 프로세서로, 상기 로컬 메모리로부터 상기 제 1 데이터를 취출하는 단계;
    상기 GPU 의 상기 쉐이더 프로세서로, 상기 제 1 데이터를 프로세싱하여 제 2 데이터를 발생시키는 단계;
    상기 GPU 의 상기 쉐이더 프로세서로, 상기 로컬 메모리에 상기 제 2 데이터를 저장하는 단계;
    상기 GPU 의 상기 메모리 복사 엔진으로, 상기 로컬 메모리로부터 상기 제 2 데이터를 취출하는 단계; 및
    상기 GPU 의 상기 메모리 복사 엔진으로, 상기 시스템 버스를 통해 상기 시스템 메모리에 상기 제 2 데이터를 저장하는 단계를 포함하는, 방법.
  15. 제 14 항에 있어서,
    상기 메모리 복사 엔진, 상기 쉐이더 프로세서, 및 상기 로컬 메모리는 서로로부터 분리되고, 상기 GPU 의 칩 상에 있는, 방법.
  16. 제 14 항에 있어서,
    상기 제 1 데이터는 소스 데이터를 포함하고, 상기 제 2 데이터는 상기 소스 데이터의 프로세싱으로부터 기인하는 결과 데이터를 포함하는, 방법.
  17. 제 14 항에 있어서,
    상기 쉐이더 프로세서는 상기 시스템 메모리로부터 상기 제 1 데이터를 취출하도록 동작가능하지 않는 것, 및 상기 시스템 메모리에 상기 제 2 데이터를 저장하도록 동작가능하지 않는 것 중 적어도 하나인, 방법.
  18. 제 14 항에 있어서,
    상기 제 1 데이터를 프로세싱하여 제 2 데이터를 발생시키는 단계는 상기 제 1 데이터를 프로세싱하여 상기 제 2 데이터를 발생시키는 산술 연산들을 위한 명령들을 실행시키는 단계를 포함하는, 방법.
  19. 제 14 항에 있어서,
    상기 GPU 의 상기 메모리 복사 엔진으로, 상기 로컬 메모리에 저장된 상기 제 1 데이터를, 상기 쉐이더 프로세서 상에서 실행하는 쉐이더 프로그램에 의해 이용가능한 데이터로 변경하는 단계를 더 포함하는, 방법.
  20. 제 14 항에 있어서,
    상기 GPU 의 상기 메모리 복사 엔진으로, 상기 로컬 메모리에 저장된 상기 제 2 데이터를, 상기 쉐이더 프로세서 상에서 실행하는 쉐이더 프로그램에 의해 이용가능한 데이터로 변경하는 단계를 더 포함하는, 방법.
  21. 제 14 항에 있어서,
    상기 메모리 복사 엔진으로, 상기 시스템 메모리로부터 제 3 데이터를 취출하거나 상기 시스템 메모리에 상기 제 3 데이터를 저장하는 단계; 및
    동시에, 상기 쉐이더 프로세서로, 상기 로컬 메모리로부터 제 4 데이터를 취출하거나, 상기 제 4 데이터를 프로세싱하거나, 상기 로컬 메모리에 상기 제 4 데이터를 저장하는 단계를 더 포함하는, 방법.
  22. 제 14 항에 있어서,
    상기 메모리 복사 엔진으로, 상기 쉐이더 프로세서에, 상기 메모리 복사 엔진은 상기 메모리 복사 엔진이 상기 로컬 메모리에 상기 제 1 데이터를 저장하는 것, 및 상기 시스템 메모리에 상기 제 2 데이터를 저장하는 것 중 적어도 하나를 완료했다는 것을 표시하는 단계를 더 포함하는, 방법.
  23. 제 14 항에 있어서,
    상기 메모리 복사 엔진으로, 상기 제 1 데이터를 변경하는 단계를 더 포함하고,
    상기 GPU 의 상기 메모리 복사 엔진으로, 상기 GPU 의 로컬 메모리에 상기 제 1 데이터를 저장하는 단계는, 상기 메모리 복사 엔진으로, 상기 GPU 의 상기 로컬 메모리에 변경된 상기 제 1 데이터를 저장하는 단계를 포함하는, 방법.
  24. 제 14 항에 있어서,
    상기 메모리 복사 엔진으로, 상기 제 2 데이터를 변경하는 단계를 더 포함하고,
    상기 GPU 의 상기 메모리 복사 엔진으로, 상기 시스템 버스를 통해 상기 시스템 메모리에 상기 제 2 데이터를 저장하는 단계는, 상기 GPU 의 상기 메모리 복사 엔진으로, 상기 시스템 버스를 통해 상기 시스템 메모리에 변경된 상기 제 2 데이터를 저장하는 단계를 포함하는, 방법.
  25. 장치로서,
    시스템 버스를 통해 액세스가능한 시스템 메모리; 및
    상기 시스템 메모리의 외부에 있는 그래픽 프로세싱 유닛 (GPU) 을 포함하고,
    상기 GPU 유닛은,
    로컬 메모리;
    상기 GPU 의 메모리 복사 엔진으로, 상기 시스템 메모리로부터 상기 시스템 버스를 통해 제 1 데이터를 취출하는 수단;
    상기 GPU 의 상기 메모리 복사 엔진으로, 상기 로컬 메모리에 상기 제 1 데이터를 저장하는 수단;
    상기 GPU 의 쉐이더 프로세서로, 상기 로컬 메모리로부터 상기 제 1 데이터를 취출하는 수단;
    상기 GPU 의 상기 쉐이더 프로세서로, 상기 제 1 데이터를 프로세싱하여 제 2 데이터를 발생시키는 수단;
    상기 GPU 의 상기 쉐이더 프로세서로, 상기 로컬 메모리에 상기 제 2 데이터를 저장하는 수단;
    상기 GPU 의 상기 메모리 복사 엔진으로, 상기 로컬 메모리로부터 상기 제 2 데이터를 취출하는 수단; 및
    상기 GPU 의 상기 메모리 복사 엔진으로, 상기 시스템 버스를 통해 상기 시스템 메모리에 상기 제 2 데이터를 저장하는 수단을 포함하는, 장치.
  26. 제 25 항에 있어서,
    상기 메모리 복사 엔진, 상기 쉐이더 프로세서, 및 상기 로컬 메모리는 서로로부터 분리되고, 상기 GPU 의 칩 상에 있는, 장치.
  27. 제 25 항에 있어서,
    상기 제 1 데이터는 소스 데이터를 포함하고, 상기 제 2 데이터는 상기 소스 데이터의 프로세싱으로부터 기인하는 결과 데이터를 포함하는, 장치.
  28. 제 25 항에 있어서,
    상기 쉐이더 프로세서는 상기 시스템 메모리로부터 상기 제 1 데이터를 취출하도록 동작가능하지 않는 것, 및 상기 시스템 메모리에 상기 제 2 데이터를 저장하도록 동작가능하지 않는 것 중 적어도 하나인, 장치.
  29. 제 25 항에 있어서,
    상기 제 1 데이터를 프로세싱하여 제 2 데이터를 발생시키는 수단은 상기 제 1 데이터를 프로세싱하여 상기 제 2 데이터를 발생시키는 산술 연산들을 위한 명령들을 실행시키는 수단을 포함하는, 장치.
  30. 제 25 항에 있어서,
    상기 GPU 의 상기 메모리 복사 엔진으로, 상기 로컬 메모리에 저장된 상기 제 1 데이터를, 상기 쉐이더 프로세서 상에서 실행하는 쉐이더 프로그램에 의해 이용가능한 데이터로 변경하는 수단을 더 포함하는, 장치.
  31. 제 25 항에 있어서,
    상기 GPU 의 상기 메모리 복사 엔진으로, 상기 로컬 메모리에 저장된 상기 제 2 데이터를, 상기 쉐이더 프로세서 상에서 실행하는 쉐이더 프로그램에 의해 이용가능한 데이터로 변경하는 수단을 더 포함하는, 장치.
  32. 제 25 항에 있어서,
    상기 장치는 미디어 플레이어, 셋 톱 박스, 무선 핸드셋, 개인 휴대 정보 단말기 (PDA), 데스크톱 컴퓨터, 랩톱 컴퓨터, 게임 콘솔, 비디오 회의 유닛, 및 태블릿 컴퓨팅 디바이스 중 적어도 하나를 포함하는, 장치.
  33. 제 25 항에 있어서,
    상기 메모리 복사 엔진으로, 상기 시스템 메모리로부터 제 3 데이터를 취출하거나 상기 시스템 메모리에 상기 제 3 데이터를 저장하는 수단; 및
    동시에, 상기 쉐이더 프로세서로, 상기 로컬 메모리로부터 제 4 데이터를 취출하거나, 상기 제 4 데이터를 프로세싱하거나, 상기 로컬 메모리에 상기 제 4 데이터를 저장하는 수단을 더 포함하는, 장치.
  34. 명령들을 포함하는 비일시적 컴퓨터 판독가능 저장 매체로서,
    상기 명령들은, 그래픽 프로세싱 유닛 (GPU) 으로 하여금,
    상기 GPU 의 메모리 복사 엔진으로, 상기 GPU 의 외부에 있는 시스템 메모리로부터 시스템 버스를 통해 제 1 데이터를 취출하게 하고;
    상기 GPU 의 상기 메모리 복사 엔진으로, 상기 GPU 의 로컬 메모리에 상기 제 1 데이터를 저장하게 하고;
    상기 GPU 의 쉐이더 프로세서로, 상기 로컬 메모리로부터 상기 제 1 데이터를 취출하게 하고;
    상기 GPU 의 상기 쉐이더 프로세서로, 상기 제 1 데이터를 프로세싱하여 제 2 데이터를 발생시키게 하고;
    상기 GPU 의 상기 쉐이더 프로세서로, 상기 로컬 메모리에 상기 제 2 데이터를 저장하게 하고;
    상기 GPU 의 상기 메모리 복사 엔진으로, 상기 로컬 메모리로부터 상기 제 2 데이터를 취출하게 하고;
    상기 GPU 의 상기 메모리 복사 엔진으로, 상기 시스템 버스를 통해 상기 시스템 메모리에 상기 제 2 데이터를 저장하게 하는, 비일시적 컴퓨터 판독가능 저장 매체.
  35. 제 34 항에 있어서,
    상기 메모리 복사 엔진, 상기 쉐이더 프로세서, 및 상기 로컬 메모리는 서로로부터 분리되고, 상기 GPU 의 칩 상에 있는, 비일시적 컴퓨터 판독가능 저장 매체.
  36. 제 34 항에 있어서,
    상기 제 1 데이터는 소스 데이터를 포함하고, 상기 제 2 데이터는 상기 소스 데이터의 프로세싱으로부터 기인하는 결과 데이터를 포함하는, 비일시적 컴퓨터 판독가능 저장 매체.
  37. 제 34 항에 있어서,
    상기 쉐이더 프로세서는 상기 시스템 메모리로부터 상기 제 1 데이터를 취출하도록 동작가능하지 않는 것, 및 상기 시스템 메모리에 상기 제 2 데이터를 저장하도록 동작가능하지 않는 것 중 적어도 하나인, 비일시적 컴퓨터 판독가능 저장 매체.
  38. 제 34 항에 있어서,
    상기 GPU 로 하여금 상기 제 1 데이터를 프로세싱하여 제 2 데이터를 발생시키게 하도록 하는 명령들은, 상기 GPU 로 하여금, 상기 제 1 데이터를 프로세싱하여 상기 제 2 데이터를 발생시키는 산술 연산들을 위한 명령들을 실행시키게 하는 명령들을 포함하는, 비일시적 컴퓨터 판독가능 저장 매체.
  39. 제 34 항에 있어서,
    상기 GPU 의 상기 메모리 복사 엔진으로, 상기 로컬 메모리에 저장된 상기 제 1 데이터를, 상기 쉐이더 프로세서 상에서 실행하는 쉐이더 프로그램에 의해 이용가능한 데이터로 변경하게 하는 명령들을 더 포함하는, 비일시적 컴퓨터 판독가능 저장 매체.
  40. 제 34 항에 있어서,
    상기 GPU 의 상기 메모리 복사 엔진으로, 상기 로컬 메모리에 저장된 상기 제 2 데이터를, 상기 쉐이더 프로세서 상에서 실행하는 쉐이더 프로그램에 의해 이용가능한 데이터로 변경하게 하는 명령들을 더 포함하는, 비일시적 컴퓨터 판독가능 저장 매체.
  41. 제 34 항에 있어서,
    상기 메모리 복사 엔진으로, 상기 시스템 메모리로부터 제 3 데이터를 취출하거나 상기 시스템 메모리에 상기 제 3 데이터를 저장하게 하고;
    동시에, 상기 쉐이더 프로세서로, 상기 로컬 메모리로부터 제 4 데이터를 취출하거나, 상기 제 4 데이터를 프로세싱하거나, 상기 로컬 메모리에 상기 제 4 데이터를 저장하게 하는 명령들을 더 포함하는, 비일시적 컴퓨터 판독가능 저장 매체.
KR1020147007769A 2011-09-07 2012-08-13 그래픽 프로세싱을 위한 메모리 복사 엔진 KR101564859B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/227,363 2011-09-07
US13/227,363 US8941655B2 (en) 2011-09-07 2011-09-07 Memory copy engine for graphics processing
PCT/US2012/050613 WO2013036358A1 (en) 2011-09-07 2012-08-13 Memory copy engine for graphics processing

Publications (2)

Publication Number Publication Date
KR20140053370A true KR20140053370A (ko) 2014-05-07
KR101564859B1 KR101564859B1 (ko) 2015-10-30

Family

ID=46705060

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020147007769A KR101564859B1 (ko) 2011-09-07 2012-08-13 그래픽 프로세싱을 위한 메모리 복사 엔진

Country Status (8)

Country Link
US (1) US8941655B2 (ko)
EP (1) EP2754055B1 (ko)
JP (1) JP5792391B2 (ko)
KR (1) KR101564859B1 (ko)
CN (1) CN103782280B (ko)
ES (1) ES2688353T3 (ko)
HU (1) HUE040473T2 (ko)
WO (1) WO2013036358A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20190091554A (ko) * 2017-01-19 2019-08-06 퀄컴 인코포레이티드 록스텝 시스템들의 주기적인 비-간섭적 진단

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8924752B1 (en) 2011-04-20 2014-12-30 Apple Inc. Power management for a graphics processing unit or other circuit
US9378560B2 (en) 2011-06-17 2016-06-28 Advanced Micro Devices, Inc. Real time on-chip texture decompression using shader processors
US9390461B1 (en) * 2012-05-08 2016-07-12 Apple Inc. Graphics hardware mode controls
US10096079B2 (en) 2013-06-10 2018-10-09 Sony Interactive Entertainment Inc. Fragment shaders perform vertex shader computations
US10176621B2 (en) * 2013-06-10 2019-01-08 Sony Interactive Entertainment Inc. Using compute shaders as front end for vertex shaders
US10102603B2 (en) 2013-06-10 2018-10-16 Sony Interactive Entertainment Inc. Scheme for compressing vertex shader output parameters
US10062135B2 (en) * 2013-07-31 2018-08-28 National Technology & Engineering Solutions Of Sandia, Llc Graphics processing unit management system for computed tomography
US20150109315A1 (en) * 2013-10-23 2015-04-23 Nvidia Corporation System, method, and computer program product for mapping tiles to physical memory locations
US9612884B2 (en) * 2014-12-04 2017-04-04 Advanced Micro Devices, Inc. Memory management in graphics and compute application programming interfaces
US9779469B2 (en) * 2015-08-17 2017-10-03 Qualcomm Incorporated Register spill management for general purpose registers (GPRs)
US20170371797A1 (en) * 2016-06-24 2017-12-28 Qualcomm Incorporated Pre-fetch mechanism for compressed memory lines in a processor-based system
US10223822B2 (en) * 2016-12-22 2019-03-05 Apple Inc. Mid-render compute for graphics processing
US10467796B2 (en) * 2017-04-17 2019-11-05 Intel Corporation Graphics system with additional context
JP7080698B2 (ja) * 2018-03-30 2022-06-06 株式会社デンソー 情報処理装置
US11734873B2 (en) 2019-12-13 2023-08-22 Sony Group Corporation Real-time volumetric visualization of 2-D images
KR20230138777A (ko) * 2022-03-24 2023-10-05 삼성전자주식회사 데이터 재구성가능한 스토리지 장치, 전자 시스템 및 그 동작방법

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7068272B1 (en) * 2000-05-31 2006-06-27 Nvidia Corporation System, method and article of manufacture for Z-value and stencil culling prior to rendering in a computer graphics processing pipeline
US7053901B2 (en) 2003-12-11 2006-05-30 Nvidia Corporation System and method for accelerating a special purpose processor
US7821520B1 (en) 2004-12-10 2010-10-26 Nvidia Corporation Fragment processor having dual mode register file
US8427496B1 (en) * 2005-05-13 2013-04-23 Nvidia Corporation Method and system for implementing compression across a graphics bus interconnect
US20090051687A1 (en) 2005-10-25 2009-02-26 Mitsubishi Electric Corporation Image processing device
JP4439491B2 (ja) 2006-05-24 2010-03-24 株式会社ソニー・コンピュータエンタテインメント マルチグラフィックスプロセッサシステム、グラフィックスプロセッサおよびデータ転送方法
US8736626B2 (en) 2008-08-26 2014-05-27 Matrox Graphics Inc. Method and system for cryptographically securing a graphics system
US20100315421A1 (en) * 2009-06-16 2010-12-16 Disney Enterprises, Inc. Generating fog effects in a simulated environment
US20100332792A1 (en) * 2009-06-30 2010-12-30 Advanced Micro Devices, Inc. Integrated Vector-Scalar Processor
US8484647B2 (en) 2009-07-24 2013-07-09 Apple Inc. Selectively adjusting CPU wait mode based on estimation of remaining work before task completion on GPU
US8675003B2 (en) 2009-09-09 2014-03-18 Advanced Micro Devices, Inc. Efficient data access for unified pixel interpolation
US8780122B2 (en) 2009-09-16 2014-07-15 Nvidia Corporation Techniques for transferring graphics data from system memory to a discrete GPU

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20190091554A (ko) * 2017-01-19 2019-08-06 퀄컴 인코포레이티드 록스텝 시스템들의 주기적인 비-간섭적 진단

Also Published As

Publication number Publication date
CN103782280B (zh) 2016-04-06
WO2013036358A1 (en) 2013-03-14
EP2754055B1 (en) 2018-06-27
EP2754055A1 (en) 2014-07-16
US20130057562A1 (en) 2013-03-07
CN103782280A (zh) 2014-05-07
HUE040473T2 (hu) 2019-03-28
JP2014529831A (ja) 2014-11-13
KR101564859B1 (ko) 2015-10-30
ES2688353T3 (es) 2018-11-02
US8941655B2 (en) 2015-01-27
JP5792391B2 (ja) 2015-10-14

Similar Documents

Publication Publication Date Title
KR101564859B1 (ko) 그래픽 프로세싱을 위한 메모리 복사 엔진
KR101563098B1 (ko) 커맨드 프로세서를 갖는 그래픽 프로세싱 유닛
US9384522B2 (en) Reordering of command streams for graphical processing units (GPUs)
JP6185211B1 (ja) 適応的シェーディングによるテクスチャルックアップを使用した帯域幅低減
US10297003B2 (en) Efficient saving and restoring of context information for context switches
US9818170B2 (en) Processing unaligned block transfer operations
EP3350766B1 (en) Storing bandwidth-compressed graphics data
EP3353746B1 (en) Dynamically switching between late depth testing and conservative depth testing
US20160292812A1 (en) Hybrid 2d/3d graphics rendering
US10062139B2 (en) Vertex shaders for binning based graphics processing
TWI786233B (zh) 關於以微磚為基礎之低解析度深度儲存之方法、器件與非暫時性電腦可讀儲存媒體
KR20230048441A (ko) 그래픽스 프로세싱 유닛 하이브리드 렌더링을 위한 장치 및 방법
CN113256764A (zh) 一种光栅化装置、方法及计算机存储介质
KR20170088687A (ko) 컴퓨팅 시스템 및 컴퓨팅 시스템에서 타일-기반 렌더링의 그래픽스 파이프라인을 수행하는 방법
US10013735B2 (en) Graphics processing unit with bayer mapping
US10089708B2 (en) Constant multiplication with texture unit of graphics processing unit
KR20230149319A (ko) 프리미티브들의 배치들의 지오메트리 프로세싱을 위한 스케일러블 프리미티브 레이트 아키텍처
CN115004217A (zh) 用于减少渲染信息的传输的方法和装置

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
FPAY Annual fee payment

Payment date: 20180928

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20190924

Year of fee payment: 5