KR20160143489A - 인터리빙을 수행하는 방법 및 장치. - Google Patents

인터리빙을 수행하는 방법 및 장치. Download PDF

Info

Publication number
KR20160143489A
KR20160143489A KR1020160014084A KR20160014084A KR20160143489A KR 20160143489 A KR20160143489 A KR 20160143489A KR 1020160014084 A KR1020160014084 A KR 1020160014084A KR 20160014084 A KR20160014084 A KR 20160014084A KR 20160143489 A KR20160143489 A KR 20160143489A
Authority
KR
South Korea
Prior art keywords
operations
shader
graphics
compute
tiled
Prior art date
Application number
KR1020160014084A
Other languages
English (en)
Inventor
존 브라더스
압히나브 골라스
이주훈
Original Assignee
삼성전자주식회사
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 삼성전자주식회사 filed Critical 삼성전자주식회사
Priority to EP16172382.0A priority Critical patent/EP3101650A1/en
Priority to CN201610392717.4A priority patent/CN106251392B/zh
Publication of KR20160143489A publication Critical patent/KR20160143489A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/80Shading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/40Filling a planar surface by adding surface attributes, e.g. colour or texture
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G5/00Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
    • G09G5/02Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators characterised by the way in which colour is displayed
    • G09G5/024Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators characterised by the way in which colour is displayed using colour registers, e.g. to control background, foreground, surface filling
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G5/00Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
    • G09G5/36Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators characterised by the display of a graphic pattern, e.g. using an all-points-addressable [APA] memory
    • G09G5/363Graphics controllers
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G5/00Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
    • G09G5/36Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators characterised by the display of a graphic pattern, e.g. using an all-points-addressable [APA] memory
    • G09G5/39Control of the bit-mapped memory
    • G09G5/395Arrangements specially adapted for transferring the contents of the bit-mapped memory to the screen
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • 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
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G2360/00Aspects of the architecture of display systems
    • G09G2360/12Frame memory handling
    • G09G2360/122Tiling

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Computer Graphics (AREA)
  • Image Generation (AREA)
  • Image Processing (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)

Abstract

그래픽스 시스템은 그래픽스 쉐이더 연산들 및 컴퓨트 쉐이더 연산들의 조합을 인터리빙한다. API 호출들의 세트는 인터리빙의 후보들을 식별하고 의존성들을 결정하기 위하여 분석된다. 컴퓨트 쉐이더는 타일링된 액세스 패턴을 갖도록 조정된다. 인터리빙은 중간 데이터의 독출 및 기록을 수행하기 위하여 외부 메모리에 접근하는 요청을 감소시키기 위하여 스케쥴링된다.

Description

인터리빙을 수행하는 방법 및 장치. {Method and apparatus for performing an interleaving}
그래픽스 쉐이더 및 컴퓨트 쉐이더가 이용되는 그래픽 이미지의 렌더링과 관련된 방법을 개시한다. 보다 구체적으로, 그래픽스 쉐이더 연산들 및 컴퓨트 쉐이더 연산들을 인터리빙하는 방법에 관한다.
그래픽 이미지들은 몇 가지 단계들에 의하여 생성된다. 예를 들어, 이미지가 생성되고, 생성된 이미지는 렌더 타겟들(render targets)의 시퀀스를 통해 다른 이미지를 생성하기 위하여 독출된다. 렌더 타겟은 3차원 이미지가 렌더링되기 위한 중간 기억 표면(intermediate memory surface)이다. 단계들의 시퀀스는 렌더 타겟 A를 생성하고, 그 후에 렌더 타겟 B를 생성하기 위하여 렌더 타겟 A를 독출하는 것으로 진행될 수 있다. 예를 들어, 제 1 단계에서, 이미지를 렌더링하기 위하여 G-버퍼(G-buffer)에 빛과 관련된 파라미터들(lighting parameters)을 기록하고, 제 2 단계에서, G-버퍼를 읽고 빛과 관련된 연산을 수행함으로써 밝은 이미지를 렌더링할 수 있다. 이러한 동작들의 시퀀스(즉, 단계들의 시퀀스)가, 최종 출력 이미지가 생성되기 이전에, 서로 다른 렌더 타겟들 상에 수행되도록 하는 것도 가능하다.
그러나, 이러한 렌더 타겟 단계들은 그래픽 처리 장치(GPU)가 외부 메모리에 액세스하는 것을 요구한다. 만약, 그래픽스 애플리케이션이 중간 이미지 A를 생성하고, 그 후에 이미지 B를 생성하기 위하여 이미지 A가 독출되고, 공통적으로 이미지 사이즈(예를 들어, 1920*3080 픽셀들)가 주어지고, 각각의 픽셀이 4 바이트(RGBA8888 포맷)라고 가정하면, 캐시가 8 MB(megabyte)의 데이터를 저장하지 못하는 경우에는, 중간 이미지 A는 외부 메모리에 저장될 수 밖에 없다.
따라서, 그래픽스 프로세서는 제 1 렌더 타겟(예를 들어, 렌더 타겟 A)의 모든 부분을 렌더링하고, 그 후에 제 2 렌더 타겟(예를 들어, 렌더 타겟 B)를 생성하기 위하여 렌더링된 결과를 외부 메모리로부터 독출한다.
인터리빙을 수행하는 방법 및 장치를 개시한다. 또한, 상기 방법을 컴퓨터에서 실행시키기 위한 프로그램을 기록한 컴퓨터로 읽을 수 있는 기록매체를 제공하는 데 있다. 해결하려는 기술적 과제는 상기된 바와 같은 기술적 과제들로 한정되지 않으며, 또 다른 기술적 과제들이 존재할 수 있다.
일 실시예에 따른 인터리빙을 수행하는 방법은, 상호 의존적인 렌더 타겟(render target)의 타일링된 그래픽스 쉐이더 연산들 및 타일링된 컴퓨트 쉐이더 연산들의 조합을 처리하는 단계; 및 상기 처리 결과에 기초하여 상기 타일링된 그래픽스 쉐이더 연산들 및 상기 타일링된 컴퓨트 쉐이더 연산들의 상기 조합을 인터리빙하는 단계;를 포함한다.
다른 실시예에 따른 그래픽스 프로세싱 시스템에서 실행되는 방법은, 타일링된 액세스 패턴을 갖기 위하여 컴퓨트 쉐이더를 재컴파일링(recompiling)하는 단계; 및 상호 의존적인 이미지들의 세트에 대하여 그래픽스 쉐이더 및 상기 재컴파일링된 컴퓨트 쉐이더의 프로세싱을 인터리빙하는 단계;를 포함하고, 상기 인터리빙하는 단계는 상기 상호 의존적인 이미지들에 대한 타일 별 기반(tile-by-tile basis) 상에서 수행된다.
또 다른 실시예에 따른 프로세서에 의하여 실행되는 방법을 기록한 컴퓨터로 읽을 수 있는 기록매체에 있어서, 상기 방법은, 상호 의존적인 렌더 타겟 연산들의 세트의 그래픽스 쉐이더 연산들 및 컴퓨트 쉐이더 연산들의 의존성들을 결정하는 단계; 및 그래픽 처리 장치(GPU)의 온 칩 메모리 내의 인터리브된 그래픽스 쉐이더 연산 및 컴퓨트 쉐이더 연산들의 중간 타일 프로세싱 연산들 중 적어도 하나의 부분 집합(subset)을 유지함으로써 그래픽스 시스템의 외부 메모리로의 트래픽이 저감되도록, 상기 인터리브된 그래픽스 쉐이더 연산 및 컴퓨트 쉐이더 연산들의 타일 프로세싱의 인터리브된 순서를 스케쥴링하는 단계;를 포함한다.
도 1은 인터리빙을 수행하는 장치의 일 예를 도시한 구성도이다.
도 2는 인터리빙을 수행하는 방법의 일 예를 나타내는 흐름도이다.
도 3은 그래픽스 프로세싱 시스템의 일 예를 도시한 구성도이다.
도 4a 내지 도 4c는 DAG(directed acyclic graphic)의 예들을 도시한 도면들이다.
도 5는 중간 결과들(intermediate results)을 온 칩 메모리에 유지하는 일 예를 도시한 도면이다.
도 6은 그래픽스 및 컴퓨트 연산들을 인터리빙하는 방법의 일 예를 나타내는 흐름도이다.
도 7은 그래픽스 및 컴퓨트 연산들을 인터리빙하는 방법의 다른 예를 나타내는 흐름도이다.
도 8은 그래픽스 쉐이더 및 컴퓨트 쉐이더 A를 위한 호출들을 연산함으로써 뒤따르는 그래픽스 호출들을 인터리빙하기 위한 API 호출들(예를 들어, OpenGL™ API calls)의 시퀀스를 분석하는 일 예를 설명하기 위한 도면이다.
도 9는 인터리브드 스케쥴링 모듈에 의하여 그래픽스 및 컴퓨트 호출들이 인터리빙되는 일 예를 설명하기 위한 도면이다.
실시 예들에서 사용되는 용어는 본 발명에서의 기능을 고려하면서 가능한 현재 널리 사용되는 일반적인 용어들을 선택하였으나, 이는 당 분야에 종사하는 기술자의 의도 또는 판례, 새로운 기술의 출현 등에 따라 달라질 수 있다. 또한, 특정한 경우는 출원인이 임의로 선정한 용어도 있으며, 이 경우 해당되는 발명의 설명 부분에서 상세히 그 의미를 기재할 것이다. 따라서 본 발명에서 사용되는 용어는 단순한 용어의 명칭이 아닌, 그 용어가 가지는 의미와 본 발명의 전반에 걸친 내용을 토대로 정의되어야 한다.
명세서 전체에서 어떤 부분이 어떤 구성요소를 “포함”한다고 할 때, 이는 특별히 반대되는 기재가 없는 한 다른 구성요소를 제외하는 것이 아니라 다른 구성요소를 더 포함할 수 있음을 의미한다. 또한, 명세서에 기재된 “…부”, “…모듈” 등의 용어는 적어도 하나의 기능이나 동작을 처리하는 단위를 의미하며, 이는 하드웨어 또는 소프트웨어로 구현되거나 하드웨어와 소프트웨어의 결합으로 구현될 수 있다.
아래에서는 첨부한 도면을 참고하여 본 발명의 실시 예에 대하여 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자가 용이하게 실시할 수 있도록 상세히 설명한다. 그러나 본 발명은 여러 가지 상이한 형태로 구현될 수 있으며 여기에서 설명하는 실시 예에 한정되지 않는다.
이하에서는 도면을 참조하여 본 발명의 실시 예들을 상세히 설명한다.
도 1은 인터리빙을 수행하는 장치의 일 예를 도시한 구성도이다.
도 1을 참조하면, 메모리(110)는 드라이버(111)를 포함하고, 그래픽 처리 장치(이하, 'GPU'라고 함)(120)는 캐시(121)를 포함한다. 드라이버(111)는 프로그램 명령어들에 대응할 수 있다. 여기에서, 프로그램 명령어들은, 소프트웨어 프로그램들이 GPU(120)의 하드웨어 구성들에 액세스(access)하고, GPU(120)와 데이터를 통신할 수 있게 하는, GPU(120)에 대한 소프트웨어 인터페이스를 제공한다. 예를 들어, 드라이버(308)는 메모리(304) 내에 저장된 프로그램 명령어들 및 GPU API(Application Programming Interface)를 포함할 수 있다.
GPU(120)는 캐시(121) 뿐 만 아니라, 프로그램 작동이 가능한(programmable) GPU 하드웨어 및 적어도 하나의 프로세서를 포함할 수 있다. 여기에서, 캐시(121)는 타일링된 데이터(tiled data)를 버퍼링 하기 위한 타일 버퍼로 이용될 수 있다.
도 2는 인터리빙을 수행하는 방법의 일 예를 나타내는 흐름도이다.
210 단계에서, 드라이버(111)는 상호 관련된 렌더 타겟의 타일링된 그래픽스 쉐이더 연산들 및 타일링된 컴퓨트 쉐이더 연산들의 조합을 처리한다.
220 단계에서, 드라이버(111)는, 처리 결과에 기초하여, 타일링된 그래픽스 쉐이더 연산들 및 타일링된 컴퓨트 쉐이더 연산들의 조합을 인터리빙한다.
이하, 도 3 내지 도 9를 참조하여, 드라이버(111) 및 GPU(120)가 인터리빙을 수행하는 예들을 구체적으로 설명한다.
도 3은 그래픽스 프로세싱 시스템의 일 예를 도시한 구성도이다.
도 3에 도시된 메모리(304) 및 드라이버(308)는 각각 도 1에 도시된 메모리(110) 및 드라이버(111)에 대응할 수 있다. 또한, 도 3에 도시된 GPU(302) 및 캐시(121)는 각각 도 1에 도시된 GPU(120) 및 캐시(121)에 대응할 수 있다.
도 3을 참조하면, 그래픽스 프로세싱 시스템(300)은 중앙 처리 장치(이하, 'CPU'라고 함)(301) 및 메모리(304)를 포함한다. 그리고, 메모리 상에는 드라이버(308)가 저장될 수 있다. 예를 들어, 드라이버(308)는 프로그램 명령어들에 대응할 수 있다. 여기에서, 프로그램 명령어들은, 소프트웨어 프로그램들이 GPU(302)의 하드웨어 구성들에 액세스(access)하고, GPU(302)와 데이터를 통신할 수 있게 하는, GPU(302)에 대한 소프트웨어 인터페이스를 제공한다. 예를 들어, 소프트웨어 프로그램은 운영 시스템 프로그램, 애플리케이션 프로그램 및/또는 기타 동종의 소프트웨어 프로그램들을 포함할 수 있다. 드라이버(308)는 물리적인(physical) 및/또는 가상적인(virtual) 하드웨어를 지원할 수 있다.
예를 들어, 드라이버(308)는 메모리(304) 내에 저장된 프로그램 명령어들을 포함한다. GPU(302)는 프로그램 작동이 가능한(programmable) GPU 하드웨어(350), 적어도 하나의 프로세서(357) 및 온 칩(on-chip) 캐시 메모리(360)를 포함한다. 여기에서, 온 칩 캐시 메모리(360)는 타일링된 데이터(tiled data)(362)를 버퍼링 하기 위한 타일 버퍼로 이용될 수 있다. 드라이버(308)는 GPU API(Application Programming Interface)(306)를 포함한다. 도 3에는 GPU(302)가 물리적인 GPU 성분으로 도시되어 있으나, GPU(302)는 가상적인 GPU에 대응할 수도 있다.
GPU(302)는 외부 메모리(320)에 액세스할 수 있다. 그러나, 일부 경우에는, 외부 메모리(320)로부터 및 외부 메모리(320)로의 메모리 트래픽을 저감시키기 위하여, 외부 메모리(320)가 외부 DRAM(dynamic random access memory)일 수도 있다. 예를 들어, 그래픽스 프로세서가 제 1 렌더 타겟(render target)을 렌더링하고, 렌더링 결과를 외부 메모리(320)에 기록하고, 그 후에 제 2 렌더 타겟을 생성하기 위하여 외부 메모리(320)에 기록된 결과를 외부 메모리(320)로부터 독출하는 경우, 이러한 과정들은 외부 메모리(320)로부터 및 외부 메모리(320)로의 많은 트래픽을 생성한다. 또한, 이러한 과정들은 중간(intermediate) 이미지들에 포함된 불필요한 부분들에 대한 렌더링을 포함할 수 있다.
예를 들어, 중간 결과들 또는 온 칩 캐시 메모리(360) 상의 데이터를 유지하고, 외부 메모리(320)에 액세스하는 횟수를 저감시키기 위하여, 드라이버(308)에는 그래픽스 쉐이더 연산들(graphics shader operations) 및 컴퓨트 쉐이더 연산들(compute shader operations)을 인터리빙 하는 지원(support)이 제공된다. GPU(302) 내에서 인터리빙된(interleaved) 스케쥴링의 실행이 최적화되기 위하여, 프로그램 작동이 가능한 GPU 하드웨어(350)의 부분들은 필요에 따라 하드웨어 스케쥴링 지원(355)으로 수정될 수 있다.
그래픽스 렌더링 연산들은 고정된 기능 로직, 하나 이상의 그래픽스 쉐이더들 및 컴퓨트 쉐이더들을 포함하는 그래픽스 파이프라인에서 수행된다. 그래픽스 쉐이더는 쉐이딩을 수행하는데 이용되는 프로그램이다. 그래픽스 쉐이더는 그래픽스 렌더링 연산들의 일부로 동작하는 프로그램이다. 그래픽스 쉐이더는 픽셀들, 버텍스들, 패치들(patches) 또는 프리미티브들을 처리한다. 컴퓨트 쉐이더는 임의의 정보(arbitrary information)를 연산하기 위하여 이용되는 프로그램이며, 보다 많은 융통성(flexibility)을 제공한다. 여기에서, 융통성은 소프트웨어가 이종의 기계들 및 다양한 사용자의 요구에 대응하여 쉽게 변경될 수 있는 성질을 의미한다. OpenGL-ES™ 3.1 API를 지원하는 컴퓨트 쉐이더가 추가됨에 따라, 성능 평가 기준(benchmarks)이 모션 블러(motion blur), 심도(depth of field), 스케일링 및 그래픽스 쉐이더들로부터 컴퓨트 쉐이더들로의 필터링과 같은 이미지 후처리 연산들(image post-processing operations)로 이동하고 있다. OpenGL™ 표준에서, 컴퓨트 쉐이더는 임의의 정보를 연산하는데 이용되는 쉐이더이다. 컴퓨트 쉐이더들은 대체로 추상적인 공간 상에서 연산한다. 그러나, 컴퓨트 쉐이더는 워크 그룹 사이즈(컴퓨트 연산들의 최소량) 및 로컬 사이즈에서 한계가 있을 수 있다. 여기에서, 로컬 사이즈는 각각의 워크 그룹 내에서 일어날 수 있는 쉐이더의 호출들(invocations)의 수에 의하여 정의된다. 또한, OpenGL™ 표준은 공유되는 변수들 및 메모리 장벽들(memory barriers)에 대한 규칙을 정의한다. 메모리 장벽들은, 프로세싱 이전에, 반드시 장벽 이전의 모든 메모리 트랜잭션들(transactions)이 완료되도록 한다.
컴퓨트 쉐이더들은 후처리 연산들의 효율성을 향상시킬 수 있는 특징들 뿐 만 아니라 보다 많은 융통성을 제공한다. 예를 들어, 컴퓨트 쉐이더는 데이터가 어떻게 액세스되는지 또는 어떻게 기록되는지에 있어서 보다 많은 자유로움을 준다. 그러나, API는, 전역 메모리 장벽(예를 들어, glMemoryBarrier)의 이용 없이는, 메모리 일관성(consistency)를 보장하지 않는다.
제 1 분석 모듈(312)은 API 그래픽스 쉐이더 호출들 및 API 컴퓨트 쉐이더 호출들을 분석한다. 이미지들과 타일들 간의 의존성들을 정의하는 비순환 방향 그래프(directed acyclic graph, 이하 'DAG'라고 함)를 구성하기 위하여, 제 2 분석 모듈(314)은 제 1 분석 모듈(312)을 이용한다. DAG의 예들은 도 4a, 4b 및 4c에 도시된 바와 같다. 실행 시간(run time)에서, 그래픽스 호출들 및 컴퓨트 호출들이 인터리빙될 수 있는 케이스들을 검출하기 위하여, API 의존성 그래프(DAG에 대응함)는 드라이버(308) 내에서 만들어진다. 도 6 및 이에 대응하는 설명과 같이, 그래픽스 쉐이더 연산들 및 컴퓨트 쉐이더 연산들의 인터리빙된 실행의 시퀀스를 만들기 위하여, API 호출들이 그룹화된다.
스케쥴링 모듈(330)는 인터리빙된 연산들의 스케쥴을 결정한다. 예를 들어, 쉐이더 편집 시간(shader compilation time)에서, 이미지를 독출/저장하는 연산들이 인터리빙의 후보들인지를 결정하기 위하여, 컴퓨트 쉐이더(또는, 컴퓨트 쉐이더들) 내에서 이미지를 독출/저장하는 연산들의 데이터 액세스 패턴이 분석된다. 데이터 액세스 패턴들의 특정 유형들은 인터리빙에 적합한 특성들을 갖는다. 예를 들어, 데이터 액세스 패턴이 1차원 공간 또는 2차원 공간 내에서 고정적인 스트라이디드 패턴(a statically known strided pattern)인 경우, 컴퓨트 쉐이더는 인터리빙의 후보가 된다. 스트라이디드 패턴은, 스트라이드 길이(stride length)에 의하여 서로 분리된 어드레스들에 대한 메모리 액세스들의 시퀀스를 갖는다. 고정적인 스트라이디드 패턴에 따른 컴퓨트 쉐이더는 타일 패턴에 대하여 형태 상으로 일부 보편적인 유사성들을 나타내는 처리 순서를 갖고, 그 타일 패턴은 타일링된 액세스를 갖도록 컴퓨트 쉐이더를 변환하는 것을 가능하게 한다. 그러나, 원칙적으로 데이터 액세스 패턴들의 다른 유형들은 인터리빙의 적절한 후보들이 될 수 있다. 스케쥴링 모듈(330)의 동작들(operations)은 도 5, 6 및 9를 참조하여 설명한다.
예를 들어, 외부 메모리 트래픽을 저감시키기 위하여, 스케쥴링 모듈(330)은 상호 의존적인(interdependent) 렌더 타겟들 상에서 인터리빙되고 타일링된(interleaved tiled) 그래픽스 쉐이더 연산들 및 컴퓨트 쉐이더 연산들의 세트들을 결정한다. 이러한 스케쥴링 모듈(330)의 동작은 온 칩 메모리(360) 내의 인터리빙된 연산들의 중간 결과들 중 적어도 일부를 유지함으로써 수행될 수 있다. 외부 메모리 트래픽을 저감시키기 위하여 인터리빙되고 타일링된 그래픽스 쉐이더 연산 및 컴퓨트 쉐이더 연산을 스케쥴링하는 일 예는 도 5을 참조하여 설명한다.
예를 들어, 변환 모듈(340)에 의하여 타일링된 액세스 패턴과 함께 동작하도록, 드라이버(308) 및 컴파일러(미도시)에는 컴퓨트 쉐이더(또는 컴퓨트 쉐이더들)를 자동적으로 변환하는 지원(support)이 제공된다. 컴퓨트 쉐이더들은, 타일링된 등가 버전(equivalent version)을 생성하기 위하여 타일들 상에서 동작하도록 변환된다. 이러한 변환은 컴파일러를 이용하여 컴퓨트 쉐이더를 재컴파일링(recompiling)하는 것을 포함하며, 이러한 재컴파일링은 그래픽스 쉐이더의 타일링된 메모리 액세스의 타일 형식(format)과 호환 가능한 타일 형식에서 타일링된 메모리 액세스를 컴퓨트 쉐이더가 수행하도록 하기 위함이다. 예를 들어, 이러한 변환은, 타일의 너비 및 높이의 정수 제수(integer divisor)가 되도록 컴퓨트 쉐이더의 워크그룹 차원(workgroup dimension)을 재정의하는 것을 포함한다. 또한, 이미지 독출 명령어들은 타일 버퍼 독출 명령어들로 대체될 수 있다. 실현 가능한 경우, 인터리빙된 그래픽스 쉐이더 연산들 및 컴퓨트 쉐이더 연산들을 위하여, 제거 모듈(342)은 메모리 장벽 제거를 수행할 수 있다.
예를 들어, 그래픽스 시스템(300)은, 외부(오프 칩) 메모리(320)에 중간 데이터를 기록하는 과정을 줄이거나 또는 제거하기 위하여, 자동적으로(예를 들어, 사람의 개입 없이) 그래픽스 쉐이더 및 컴퓨트 쉐이더의 프로세싱을 인터리빙한다. 드라이버(308)는 API 호출들을 재배열(re-order)하고, 드라이버(308) (및 컴파일러 소프트웨어 스택의 지원)를 통하여 컴퓨트 쉐이더들을 갖는 그래픽스 API들에 기록된 기존 애플리케이션(existing application)을 처리하기 위하여 컴퓨트 쉐이더의 재컴파일링을 수행한다.
도 4a 내지 도 4c는 DAG(directed acyclic graphic)의 예들을 도시한 도면들이다.
도 4a를 참조하면, 제 2 분석 모듈(314)에 의하여 생성된 데이터 흐름 그래프 (또는 이와 동등한 데이터 구조)의 일 예가 도시되어 있다. 도 4a의 데이터 흐름 그래프는 이미지 A 및 이미지 B와 같은 2개 이상의 이미지 세트들 간의 직접적인 의존성(immediate dependency)을 나타내고, 다른 후속 이미지들(예를 들어, 이미지 C, 이미지 D)이 포함될 수 있다. DAG에 대응하는 도 4a는 서로 다른 렌더 타겟들 사이의 의존성들을 정의한다. 서로 다른 렌더 타겟 이미지들의 상호 의존성은 단순할 수도 있고(예를 들어, 이미지 B는 이미지 A로부터 직접적으로 관련됨), 보다 복잡한 상호 의존적인 관계들(예를 들어, 하나의 이미지가 하나 이상의 다른 이미지들에 관련됨)를 갖을 수도 있다. 보다 일반적으로, 도 4b에 도시된 바에 따라 이미지 C가 생성되는데 이미지 A와 이미지 B가 이용되는 것과 같이, 하나 이상의 이미지들은 동시에 몇몇 다른 이미지들에 의존될 수 있다. 따라서, 다른 렌더 타켓에 입력되는 하나의 렌더 타겟의 단순 시퀀스가 존재한다고 하더라도, 보다 일반적으로 그들 사이의 상호 관련성은 더 복잡할 수 있다. 예를 들어, 2개의 그래픽스 쉐이더 렌더 타겟들이 하나의 컴퓨트 쉐이더 렌더 타겟을 생성하는데 필요할 수 있다. 또한, 타일 레벨에서의 의존성도 복잡할 수 있다. 예를 들어, 도 4c를 참조하면, 이미지 B 내의 타일은 이전 이미지(즉, 이미지 A)의 하나 이상의 타일에 의존할 수 있다. 또한, 주어진 렌더 타겟 내의 각각의 타일들은 그 다음의 렌더 타겟 내의 어떤 타일들에도 이용되지 않을 수 있다.
예를 들어, 드라이버(308)의 제 1 분석 모듈(312) 및 제 2 분석 모듈(314)은 커맨드들의 스트림을 검사하고, 렌더 타겟 B의 이미지가 직접적으로 또는 간접적으로(예를 들어, 다운스트림) 렌더 타겟 A에 의존하는지 여부를 결정한다. 렌더 타겟 B가 렌더 타겟 A에 의존한다고 결정되면, 드라이버(308)는, 외부 메모리 액세스들을 감소시키기 위하여, 의존성 그래프를 따르는데 얼마나 많은 레벨들이 필요한지를 결정한다. 외부 메모리 액세스들을 감소시키는데 의존성 그래프의 모든 레벨들을 따르는게 필요하지 않을 수도 있다. 또한, 복잡한 의존성 그래프의 모든 레벨을 따르는 것에는 프로세싱 자원들이 소비된다. 따라서, 제 2 분석 모듈(314)는 의존성 그래프를 따르는 레벨들의 수를 제한한다. 만약, 의존성 그래프가 복잡한 경우, 의존성 그래프를 따르는 레벨들의 수를 제한하는 규칙이 적용될 수 있다. 그 후에, 온 칩 캐시 메모리(예를 들어, 타일 버퍼)에 중간 결과들을 보존하려고 시도하기 위하여, 스케쥴링 모듈(330)은 인터리빙 스케쥴을 생성한다.
또한, DAG는 그래픽스 쉐이더 연산들에 의하여 렌더링된 타일들 및 컴퓨트 쉐이더들에 의하여 연산 중인 타일들 사이의 타일 레벨에서의 의존성들을 지도화 한다. DAG의 생성 과정은 각각의 출력 타일을 그것들을 생성하는데 필요한 입력 타일(또는 입력 타일들)에 백 프로젝팅(back-progecting)하는 것을 포함할 수 있다. 예를 들어, 도 4에 도시된 바와 같이 이미지 A가 이미지 B를 생성하는데 이용되고, 차례로 이미지 C를 생성하는데 이용될 수 있다. 여기에는 이미지들의 의존성 및 이미지들로부터의 타일들의 의존성이 있을 수 있다. 예를 들어, 도 4c에 도시된 바와 같이, 주어진 이미지 내의 단일 타일은 다른 이미지로부터의 하나 이상의 타일에 의존할 수 있다.
도 5는 중간 결과들(intermediate results)을 온 칩 메모리에 유지하는 일 예를 도시한 도면이다.
도 5에는 작업들의 시퀀스(a sequence of operations)의 중간 연산들이 타일 버퍼로서 이용되는 온 칩 캐시 메모리(360)에 유지되는 일 예가 도시되어 있다. 예를 들어, 제 2 분석 모듈(314)는 렌더 타겟 A, 렌더 타겟 B, 렌더 타겟 C 및 렌더 타겟 D 사이의 의존성들을 결정한다. 스케쥴링 모듈(330)은 온 칩 캐시 메모리(360)에 렌더 타겟 A의 타일들을 기록하는 스케쥴을 결정하고, 그 후에 렌더 타겟 B로 그들을 독출한다. 타일 기록 및 독출 작업들의 처리의 스케쥴링은, 이미지 A의 타일이 생성되고 온 칩 캐시 메모리(360)에 저장된 이후와 같은 인터리빙이 수행된 스케쥴을 생성하기 위하여, 선택될 수 있다. 그 타일은 렌더 타겟 B의 타일을 생성하기 위하여 “즉시 다시 독출(immediately read back)”되고, 따라서 메모리 대역폭을 절약할 수 있다. “즉시 다시 독출” (또는 “직접적으로 소비” 또는 “즉시 소비”로 지칭될 수 있음)은 이미지 A의 타일이 온 칩 메모리(360)에 저장되는 것과 렌더 타겟 B의 타일을 생성하기 위하여 온 칩 메모리(360)에서 그 저장된 타일이 독출되는 것 사이의 처리 및 개입 과정들(processing intervening operations)을 포함하는 것이 바람직하다. 예를 들어, “즉시 다시 독출”은 렌더 타겟 B의 타일을 생성하기 위하여 외부 메모리(320)로부터 이미지 A의 타일을 독출하는 것이라기 보다는 온 칩 메모리(360)에서 그 타일을 독출하는 것에 대응할 수 있다.
인터리빙된 스케쥴은 제 2 분석 모듈(314)에 의하여 수행된 의존성 분석과 일치하는 순서로 진행될 수 있다. 그 의존성 분석은 온 칩 캐시 메모리(360)의 사용을 최적화하기 위하여 선택되고, 따라서 중간 연산들을 위하여 외부 메모리(320)를 사용해야 하는 필요가 최소화될 수 있다. 또한, 제 2 분석 모듈(314)에 의하여 수행된 의존성 분석은 최종 이미지의 타일에 기여하지 않는 타일들 상에 처리가 수행되는 것을 제거하기 위한 스케쥴링 방안(scheduling scheme)에 사용될 수 있다. 따라서, 불필요한 작업이 제거될 수 있다. 중간 작업들의 시퀀스가 수행되고 난 후, 최종 이미지는 렌더링되고, 외부 메모리(320)로 보내지거나 디스플레이를 위하여 출력될 수 있다. 모든 중간 결과들이 온 칩 캐시 메모리(360)에 완전하게 유지되는 것이 바람직하나, 보다 일반적으로는 중간 데이터 결과들의 부분 집합(subset)이라도 온 칩 캐시 메모리(360)에 유지되는 것이 그래픽스 처리를 수행하기 위하여 필요한 외부 메모리 액세스들의 수를 감소하는데 적합할 수 있다. 또한, 반드시 온 칩 캐시 메모리(360)에 유지되어야 하는 중간 데이터의 양을 최소화하기 위하여 타일 사이즈들을 축소하는 것도 가능하고, 실제로는, 세밀한 인터리빙(an even finer grain of interleaving)을 가능하게 한다.
예를 들어, 인터리빙은, 공급자/소비자 렌더 타겟들의 세트(예를 들어, 이미지 1, 2, 3으로부터) 상의 그래픽스 렌더링 및 컴퓨트 쉐이더 연산들을 위한 타일 레벨에서 수행될 수 있다. 따라서, 렌더 타겟 1의 타일 데이터는 타일링된 컴퓨트 쉐이더와 함께 렌더 타겟 2의 대응하는 타일이 생성되는데 필요하기 바로 전에 렌더링될 수 있고, 그 타일링된 컴퓨트 쉐이더는 렌더 타겟 3이 생성되는데 렌더 타겟 2의 그 부분이 필요하기 바로 전에 렌더링되는 것과 같이 진행될 수 있다. 대신에, 컴퓨트 쉐이더는 그래픽스 타일을 렌더링하는데 필요한 입력 데이터를 생성할 수 있다. 예를 들어, 컴퓨트 쉐이더는 파티클들의 위치를 생성할 수 있고, 특정 XY 영역에 영향을 미치는 파티클 만이 그래픽스 쉐이더에게 관심이 있다.
도 6은 그래픽스 및 컴퓨트 연산들을 인터리빙하는 방법의 일 예를 나타내는 흐름도이다.
610 단계에서, 제 1 분석 모듈(312)는 API 호출들을 프로세싱하고, 인터리빙 후보들을 탐색한다. 의존성들을 정의하는 제 2 분석 모듈(314)에 의하여 DAG가 구축되기 위하여 API 호출 프로세싱은 지연되고 정렬된다. 워크로드만의 그래픽스를 위한 타일 기반 지연 렌더링(Tile Based Deferred Rendering, TBDR) 프로세싱에서, 프로세싱 지연 API 호출들(processing deferred API calls)이 언제 시작되는지를 결정하기 위하여, 드라이버(308)는 렌더 타겟의 변경 또는 메모리 장벽과 같은 특정 이벤트들을 이용한다. 그래픽스 및 컴퓨트 호출들이 섞인 경우에는, 제거 모듈(342)이, 타일링된 방법으로(in a tiled manner) 그래픽스 호출과 컴퓨트 호출을 인터리빙함으로써 하나 이상의 메모리 장벽들이 안전하게 제거될 수 있는지를 결정한다. (예를 들어, 타일에 대한 그래픽스 프로세싱이 컴퓨트 프로세싱이 발생되기 이전에 종료된다면 메모리 장벽이 안전하게 제거될 수 있다.) 예를 들어, 인터리빙이 허용되는 시기의 결정은 편집(compilation) 시간 중에 컴퓨트 쉐이더 내에서의 이미지 독출/저장 작업들에 대한 메모리 액세스 패턴들의 분석에 기초하여 수행된다. 만약 메모리 액세스 패턴이 1차원 공간 또는 2차원 공간에서 고정적인 스트라이디드 패턴(a statically known strided pattern)인 경우, 컴퓨트 쉐이더는 인터리빙의 후보가 된다.
620 단계에서, 변환 모듈(340)은 타일링된 액세스 패턴들을 위하여 컴퓨트 쉐이더를 재컴파일링 한다. 예를 들어, 컴퓨트 쉐이더의 워크 그룹 차원(workgroup dimension)은 타일의 너비 및 높이의 정수 제수(integer divisor)가 되도록 재정의된다. 이와는 교대로 또는 이에 추가하여, 타일의 너비 및 높이는 수정될 수 있다. 이러한 수정들은 액세스의 범위가 정의된 타일 차원들에 적합해짐을 보장하고, 이에 따라 모든 데이터가 온 칩 메모리(360)에 저장될 수 있게 될 수 있다. 예를 들어, 이미지 독출 명령들은 타일 버퍼 독출 명령들로 대체될 수 있다. 이러한 과정은 타겟 어드레스를 연산하는데 이용되는 명령들을 타일 버퍼 내의 인덱스로 교체하는 과정을 포함한다.
630 단계에서, 스케쥴링 모듈(330)은 그래픽스 및 컴퓨트 연산의 인터리빙된 실행의 시퀀스를 생성하기 위하여 API 호출들을 그룹핑한다. 예를 들어, 스케쥴링 모듈(330)은 인터리빙이 실현 가능한지 여부를 결정한다. 스케쥴링 모듈(330)은 인터리빙이 실현 가능한지 여부에 대한 결정에 기초하여 메모리 장벽을 제거한다.
640 단계에서, 스케쥴링 모듈(330)은 각각의 타일의 인터리빙된 실행을 스케쥴링한다. 주어진 타일을 위한 그래픽스 쉐이더의 출력은 온 칩 메모리(360) (또는, 데이터 레지스터 또는 버퍼와 같은 다른 온 칩 메모리)에 저장된다. 예를 들어, 차후 컴퓨트 쉐이더에 의하여 데이터는 즉시 다시 독출되고, 이에 따라 불필요한 외부 메모리 액세스가 제거된다.
도 7은 그래픽스 및 컴퓨트 연산들을 인터리빙하는 방법의 다른 예를 나타내는 흐름도이다.
710 단계에서, 제 2 분석 모듈(314)는 DAG를 생성하기 위하여 이미지들 및 타일들 사이의 의존성을 결정한다. 720 단계의 후보들은 타일링된 기반 상에서 그래픽스 호출들 및 컴퓨트 호출들의 인터리빙을 위하여 식별된다. 예를 들어, 스케줄링 모듈(330)은 인터리빙을 위하여 후보들을 식별한다. 730 단계에서, 관련된 후보 컴퓨트 쉐이더(또는 컴퓨트 쉐이더들)는, 변환 모듈(340)에 의하여, 타일링된 액세스 패턴을 갖는 타일링된 등가물(equivalent)이 되도록 조정된다. 예를 들어, 변환 모듈(340)은 타일링된 액세스 패턴들을 위하여 컴퓨트 쉐이더를 재컴파일링한다. 740 단계에서, 결합된 그래픽스 쉐이더 및 컴퓨트 쉐이더의 인터리빙은, 온 칩 메모리(360)(예를 들어, 타일 버퍼) 상에 중간 데이터 결과의 적어도 일부가 유지됨에 따라 외부 메모리로의 트래픽을 저감시키기 위하여, 스케쥴링 모듈(330)에 의하여 타일링된 방법으로 스케쥴링된다.
도 8은 그래픽스 쉐이더 및 컴퓨트 쉐이더 A를 위한 호출들을 연산함으로써 뒤따르는 그래픽스 호출들을 인터리빙하기 위한 API 호출들(예를 들어, OpenGL™ API calls)의 시퀀스를 분석하는 일 예를 설명하기 위한 도면이다.
제 1 분석 모듈(312)는, 그래픽스 및 컴퓨트 호출들이 인터리빙될 수 있는지 여부를 결정하기 위하여, API 그래픽스 호출들(810) 및 API 컴퓨트 호출들(820)을 분석한다. 컴퓨트 호출(820)이 직면(encounter)되면, 제 2 분석 모듈(314)는 컴퓨트 호출이 의존되는 그래픽스 호출들을 결정한다. 렌더 타겟(840)은 3차원 이미지가 렌더링되는 중간 표면 기억장치(intermediate memory surface)이다.
도 9는 인터리브드 스케쥴링 모듈에 의하여 그래픽스 및 컴퓨트 호출들이 인터리빙되는 일 예를 설명하기 위한 도면이다.
컴퓨트 쉐이더가 필요로 할 스트라이디드 패턴은 컴퓨트 쉐이더(950)의 독출/저장 동작들의 메모리 액세스 패턴들을 관찰함으로써 결정될 수 있다. 그래픽스 쉐이더(930)는 컴퓨트 쉐이더(950)가 타일을 소비하는 순서에 따라 타일을 생성할 수 있다. 예를 들어, 타일(910)이 생성되면, 그 후에 컴퓨트 쉐이더(950)는 타일(910)을 처리한다. 컴퓨트 쉐이더(950)가 타일(910)을 처리하는 동안, 그래픽스 쉐이더(930)는 타일(920)을 생성한다. 그 후에, 컴퓨트 쉐이더(950)가 타일(920)을 처리하는 동안, 그래픽스 쉐이더(930)은 다른 타일을 생성한다. 결과적으로, 타일들의 프로세싱이 그래픽스 쉐이더(930) 및 컴퓨트 쉐이더(950) 간에 인터리브된다.
예를 들어, 그래픽스 프레임의 렌더링은 그래픽스 및 컴퓨트 명령들의 혼합물(mixture)를 포함할 수 있다. 그래픽스 렌더링 엔진은 후처리 및 그래픽스 연산들의 많은 스테이지들에 대하여 그래픽스 연산들 및 컴퓨트 연산들을 혼합할 수 있다. 특히, 프로세싱의 일부 스테이지들을 인터리빙 함이 없이, 메모리(예를 들어, 외부 메모리)에 기록될 수 있는 중간 결과들이 생성되고, 최종 결과 이미지 또는 다음 중간 이미지를 생성하기 위하여 차후에 다시 독출될 수 있다. 예상 시나리오로서, 컴퓨트 쉐이더 연산들은 (그래픽스 렌더링 연산들에 의하여 생성된) 지 버퍼(G-buffer)로부터의 파라미터 데이터, 모션 블러(motion blur), 심도(depth of field(DOF)), 합성(compositing) 및 안티 에일리어싱(anti-aliasing)에 기초한 간단한 연산들(lighting calculations)를 포함할 수 있다. 컴퓨트 쉐이더 연산들을 타일링 함으로써, 그래픽스 및 컴퓨트 연산들 사이의 데이터의 생성 및 소비가 타일 레벨에서 인터리빙될 수 있다. 이것은 데이터가 온 칩 메모리(360) 상에 유지될 수 있도록 하고, 어떤 그래픽스 애플리케이션들은 외부 메모리로의 일부 또는 거의 대부분의 트래픽을 제거할 수 있다. 따라서, 전력 효율 및 성능이 상당히 향상될 수 있다. 또한, 외현적 전역 메모리(explicit global memory) 장벽들의 자동적인(예를 들어, 사용자의 개입 없이) 제거도 성능을 향상시킨다.
많은 그래픽스 애플리케이션에서, 그래픽스 쉐이더의 뒤에 컴퓨트 쉐이더 연산들의 시퀀스가 계속된다. 그러나, 어떤 예에서는, 컴퓨트 쉐이더의 뒤에 그래픽스 쉐이더가 계속될 수 있다. 이러한 예에서, 컴퓨트 쉐이더가 외부 메모리에 출력물을 기록하고 그래픽스 쉐이더가 외부 메모리로부터 그 데이터를 독출하는 케이스에 유사한 분석이 적용될 수 있다. 컴퓨트 쉐이더 및 그래픽스 쉐이더는, 온 칩 버퍼에 데이터를 출력하기 위하여 컴퓨트 쉐이더를 재컴파일링 함으로써 인터리브 될 수 있다. 그래픽스 쉐이더는 온 칩 버퍼로부터 데이터를 소비하고, 타일링된 방식으로 실행한다.
다른 예로서, 캐시들이 중간 데이터를 위한 타일 버퍼의 대체물로써 이용된다. 어떤 구조들(architectures)에서는, 타일 버퍼로서 사용된 저 레벨 온 칩 캐시(low-level on-chip cache)로의 직접 액세스는 적절한 데이터 경로의 부족으로 인하여 불가능할 수 있다. 이러한 케이스에서는, 가장 가까운 캐시 레벨이 대신하여 사용될 수 있다. 그러나, 전력 및 성능 이점은 캐시의 GPU 내의 연산 로직(compute logic)으로의 근접성에 의존하여 감소될 수 있다. 만약, 다음 레벨의 캐시가 사용된 경우, 일부 변화가 발생될 수 있다. 예를 들어, 이미지 독출 명령들은 타일 버퍼 독출 명령들로 변화하지 못한다. 그러나, 데이터가 캐시 내에 분명히 유지되고, 의존성 연산들이 완료되기 전까지는 외부 DRAM 메모리로 옮겨지지 않도록, 암시들 또는 지시들(hints or directives)이 캐시로 발급될 수 있다. 액세스의 범위는 캐시 성능 내로 맞춰지도록 선택되고, 따라서 모든 작업 데이터가 캐시 내에 머무를 수 있다. 또한, 주어진 타일에 대한 그래픽스 쉐이더의 출력은 가장 가까운 캐시에 저장된다. 데이터는 바로 다음의 컴퓨트 데이터에 의하여 즉시 소비되고, DRAM 또는 낮은 캐시 레벨로의 불필요한 액세스가 제거된다.
상술한 바에 따르면, 모듈은 하드웨어 성분, 소프트웨어 성분 또는 그들의 조합에 대응할 수 있다. 예를 들어, 모듈은 하나 이상의 프로세서들(예를 들어, 컴퓨터 프로세서들) 및 프로그램 명령어를 포함하는 데이터 저장 장치를 포함할 수 있다. 상술한 하나 이상의 프로세서들은 상술한 하나 이상의 방법들을 수행하기 위한 특수 목적 프로세서로서의 기능에 대한 명령어들에 의하여 설정될 수 있다. 소프트웨어, 하드웨어 및 다른 모듈들은 서버들, 워크스테이션들, 모바일 장치들, 스마트폰든, 웨어러블 컴퓨터들, 퍼스널 컴퓨터들, 태블릿 컴퓨터들, 이미지 데이터 인코더들, 이미지 데이터 디코더들, 개인 휴대 정보 단말기(Personal Digital Assistant (PDA))들, 비디오 프로젝터들, 시청각 수신기(audio-visual receiver)들, TV와 같은 디스플레이 장치들, 디지털 영화 프로젝터들, 미디어 재생기들 및 상술한 방법에 적합한 다른 장치들에 설치될 수 있다. 당해 기술 분야에서의 통상의지식을 가진 자는 상술한 예들이 독립된 디바이스 또는 클라이언트-서버 시스템과 같은 디바이스들의 시스템에 의하여 구현될 수 있음을 이해할 수 있다.
소프트웨어(또는, 프로그램) 성분은, 프로세서에 의하여 상술한 하나 이상의 방법들이 실행되도록 하는 컴퓨터에서 독출 가능한 명령어들의 집합을 갖는 비휘발성 매체를 포함할 수 있다. 소프트웨어 성분은 다양한 형태로 존재할 수 있다. 예를 들어, 소프트웨어 성분은 플로피 디스켓들을 포함하는 마드네틱 데이터 저장 매체, 하드 디스크 드라이버들, CD-ROM들, DVD들을 포함하는 광학 데이터 저장 매체, ROM들을 포함하는 전자 데이터 저장 매체, 플래시 RAM, EPROM들, 배선에 의한(hardwired) 또는 사전에 프로그래밍된(preprogrammed) 칩들(예를 들어, EEPROM 반도체 칩들), 나노공학 메모리 등과 같은 비휘발성 매체를 포함할 수 있다. 프로그램 성분들 상의 컴퓨터로 판독 가능한 명령어들은 필요에 따라 압축되거나 암호화 될 수 있다.
소프트웨어 성분들의 예들은 펌웨어, 미들웨어, 운영 시스템 소프트웨어, 소장 소프트웨어(resident software), 애플리케이션 소프트웨어, 마이크로 코드 등을 포함할 수 있으나, 이에 한정되지 않는다. 당해 기술 분야에서의 통상의 지식을 가진 자는 하드웨어 및 소프트웨어 성분들이 전체적으로 또는 일부분이 집중화되거나 또는 분산될 수 있음 (또는 그들의 조합)을 알 수 있다. 예를 들어, 소프트웨어 성분들 및 다른 모듈들은 로컬 메모리를 통해서, 네트워크를 통해서, 브라우저 또는 분산 컴퓨팅 컨텍스트(distributed computing context) 내의 다른 애플리케이션을 통해서, 또는 상술한 목적들에 적합한 다른 수단들을 통해서 접근 가능할 수 있다.
본 실시예와 관련된 기술 분야에서 통상의 지식을 가진 자는 상기된 기재의 본질적인 특성에서 벗어나지 않는 범위에서 변형된 형태로 구현될 수 있음을 이해할 수 있을 것이다. 그러므로 개시된 방법들은 한정적인 관점이 아니라 설명적인 관점에서 고려되어야 한다. 본 발명의 범위는 전술한 설명이 아니라 특허청구범위에 나타나 있으며, 그와 동등한 범위 내에 있는 모든 차이점은 본 발명에 포함된 것으로 해석되어야 할 것이다. 또한, 당해 기술분야에서 잘 알려진 특징들은 본 발명의 본질이 흐려지는 것을 방지하기 위하여 구체적으로 기술되지 않았을 수도 있다. 본 발명에 따른 성분들(components), 처리 단계들(process steps) 및/또는 데이터 구조들은 운영 시스템들, 프로그램 언어들, 컴퓨팅 플랫폼들, 컴퓨터 프로그램들 및/또는 컴퓨팅 디바이스들의 다양한 유형을 이용하여 구현될 수 있다. 또한, 당해 기술분야에서의 통상의 지식을 가진 자는, 배선에 의한(hardwired) 디바이스들, FPGAs(field programmable gate arrays), ASICs(application specific integrated circuits) 등과 같은 디바이스들이 상술된 특허성 있는 컨셉들(inventive concepts)의 범위 및 목적(spirit)에 벗어남이 없이 이용될 수 있음을 알 수 있다. 또한, 본 발명은 메모리 디바이스와 같은 컴퓨터로 읽을 수 있는 기록 매체에 저장된 컴퓨터 명령어들의 집합으로서 명백하게 구현될 수 있다.
110: 메모리
111: 드라이버
120: 그래픽 처리 장치(GPU)
121: 캐시

Claims (22)

  1. 인터리빙을 수행하는 방법에 있어서,
    상호 의존적인 렌더 타겟(render target)의 타일링된 그래픽스 쉐이더 연산들 및 타일링된 컴퓨트 쉐이더 연산들의 조합을 처리하는 단계; 및
    상기 처리 결과에 기초하여 상기 타일링된 그래픽스 쉐이더 연산들 및 상기 타일링된 컴퓨트 쉐이더 연산들의 상기 조합을 인터리빙하는 단계;를 포함하는 방법.
  2. 제 1 항에 있어서,
    상기 인터리빙하는 단계는,
    인터리빙되고 타일링된(interleaved tiled) 연산들의 시퀀스의 스케쥴을 결정하는 단계;를 포함하고,
    상기 인터리빙되고 타일링된 연산들의 시퀀스는 상기 시퀀스의 제 1 작업의 적어도 하나의 중간(intermediate) 데이터 결과가 상기 시퀀스의 제 2 작업에 의하여 상기 온 칩 메모리로부터 직접 소비될 수 있도록 선택되는 방법.
  3. 제 1 항에 있어서,
    상기 인터리빙하는 단계는,
    인터리빙되고 타일링된 연산들의 시퀀스의 스케쥴을 결정하는 단계;를 포함하고,
    상기 인터리빙되고 타일링된 연산들의 시퀀스는 중간 데이터 결과들과 관련된 상기 외부 메모리로의 트래픽이 저감되도록 선택되는 방법.
  4. 제 1 항에 있어서,
    상기 그래픽스 쉐이더 작업들 및 상기 컴퓨트 쉐이더 작업들의 데이터 액세스 패턴은 전역 메모리 장벽(global memory barrier)이 인터리빙 및 메모리 장벽들의 제거의 조건으로서 안전하게 제거되는지 여부를 결정하기 위하여 분석되는 방법.
  5. 제 1 항에 있어서,
    상기 인터리빙하는 단계는 타일 기반(tile basis) 상에서 수행되고, 상기 컴퓨트 쉐이더는 타일링된 액세스 패턴에 대하여 동작하는 방법.
  6. 제 5 항에 있어서,
    상기 컴퓨트 쉐이더의 워크 그룹 차원(workgroup dimension)은 타일의 너비 및 높이의 정수 제수(integer divisor)가 되도록 재정의되는 방법.
  7. 제 6 항에 있어서,
    상기 처리하는 단계는,
    상기 컴퓨트 쉐이더에 대하여 이미지 독출 명령들(image load instructions)을 타일 버퍼 독출 명령들(tile buffer load instructions)로 교체하는 방법.
  8. 제 1 항에 있어서,
    상기 처리하는 단계는,
    상기 그래픽스 쉐이더 연산들 및 상기 컴퓨트 쉐이더 연산들의 인터리빙된 실행의 시퀀스를 생성하기 위하여, API 호출들을 분석하고 상기 API 호출들을 그룹핑하는 방법.
  9. 제 1 항에 있어서,
    상기 처리하는 단계는,
    상호 의존적인 렌더 타겟들 및 상호 의존적인 타일들의 비순환 방향 그래프(directed acyclic graphic)를 생성하고, 상기 그래픽스 쉐이더 연산들 및 상기 컴퓨트 쉐이더 연산들의 인터리빙을 스케쥴링하기 위하여 상기 비순환 방향 그래프를 이용하는 방법.
  10. 제 1 항에 있어서,
    상기 인터리빙하는 단계는,
    상기 그래픽스 쉐이더 연산들 및 상기 컴퓨트 쉐이더 연산들의 인터리빙된 실행의 시퀀스를 형성하기 위하여 API 호출들을 그룹핑하는 방법.
  11. 제 1 항에 있어서,
    상기 처리하는 단계는,
    인터리빙의 후보들을 결정하기 위하여 독출 및 저장 작업의 데이터 액세스 패턴을 분석하는 방법.
  12. 제 11 항에 있어서,
    상기 처리하는 단계는,
    고정적인 스트라이디드 패턴(a statically predetermined strided pattern)의 데이터 액세스 패턴을 상기 인터리빙의 후보로 식별하는 방법.
  13. 그래픽스 프로세싱 시스템에서 실행되는 방법에 있어서,
    타일링된 액세스 패턴을 갖기 위하여 컴퓨트 쉐이더를 재컴파일링(recompiling)하는 단계; 및
    상호 의존적인 이미지들의 세트에 대하여 그래픽스 쉐이더 및 상기 재컴파일링된 컴퓨트 쉐이더의 프로세싱을 인터리빙하는 단계;를 포함하고,
    상기 인터리빙하는 단계는 상기 상호 의존적인 이미지들에 대한 타일 별 기반(tile-by-tile basis) 상에서 수행되는 방법.
  14. 제 13 항에 있어서,
    상기 인터리빙된 프로세싱은 인터리빙된 연산들의 시퀀스를 포함하고,
    상기 인터리빙된 연산들의 시퀀스는 의존적인 렌더 타겟들의 중간 타일 프로세싱 연산들 중 일부를 상기 그래픽스 프로세싱 시스템의 온 칩 메모리 내에 유지하기 위하여 선택되는 방법.
  15. 제 13 항에 있어서,
    상호 의존적인 렌더 타겟들 및 상호 의존적인 타일들의 비순환 방향 그래프(directed acyclic graphic)를 생성하는 단계; 및
    상기 그래픽스 쉐이더 연산들 및 상기 컴퓨트 쉐이더 연산들의 인터리빙을 스케쥴링하기 위하여 상기 비순환 방향 그래프를 이용하는 단계;를 더 포함하는 방법.
  16. 제 13 항에 있어서,
    상기 재컴파일링하는 단계는,
    상기 그래픽스 쉐이더의 상기 타일링된 액세스 패턴과 호환되는 타일링된 패턴에서 데이터에 접근하고 데이터를 출력할 수 있도록 상기 컴퓨트 쉐이더를 재컴파일링하는 방법.
  17. 제 16 항에 있어서,
    상기 재컴파일링하는 단계는,
    타일의 너비 및 높이의 정수 제수(integer divisor)가 되도록 상기 컴퓨트 쉐이더의 워크 그룹 차원(workgroup dimension)을 재정의하는 방법.
  18. 제 17 항에 있어서,
    상기 컴퓨트 쉐이더에 대하여 이미지 독출 명령들(image load instructions)을 타일 버퍼 독출 명령들(tile buffer load instructions)로 교체하는 단계;를 더 포함하는 방법.
  19. 제 13 항에 있어서,
    상기 그래픽스 쉐이더 및 상기 컴퓨트 쉐이더 사이의 메모리 장벽을 제거하는 단계;를 더 포함하는 방법.
  20. 제 13 항에 있어서,
    인터리빙되고 타일링된 연산들의 시퀀스를 갖도록 스케쥴을 결정하는 단계;를 더 포함하고,
    상기 인터리빙되고 타일링된 연산들의 시퀀스는 상기 인터리빙된 결과의 적어도 하나의 중간 데이터 결과를 온 칩 메모리에 유지할 수 있도록 선택되는 방법.
  21. 제 13 항에 있어서,
    인터리빙되고 타일링된 연산들의 시퀀스를 갖도록 스케쥴을 결정하는 단계;를 더 포함하고,
    상기 인터리빙되고 타일링된 연산들의 시퀀스는 중간 데이터 결과들과 관련된 외부 메모리로의 트래픽이 저감되도록 선택되는 방법.
  22. 프로세서에 의하여 실행되는 방법을 기록한 컴퓨터로 읽을 수 있는 기록매체에 있어서,
    상기 방법은,
    상호 의존적인 렌더 타겟 연산들의 세트의 그래픽스 쉐이더 연산들 및 컴퓨트 쉐이더 연산들의 의존성들을 결정하는 단계; 및
    그래픽 처리 장치(GPU)의 온 칩 메모리 내의 인터리브된 그래픽스 쉐이더 연산 및 컴퓨트 쉐이더 연산들의 중간 타일 프로세싱 연산들 중 적어도 하나의 부분 집합(subset)을 유지함으로써 그래픽스 시스템의 외부 메모리로의 트래픽이 저감되도록, 상기 인터리브된 그래픽스 쉐이더 연산 및 컴퓨트 쉐이더 연산들의 타일 프로세싱의 인터리브된 순서를 스케쥴링하는 단계;를 포함하는 기록매체.
KR1020160014084A 2015-06-04 2016-02-04 인터리빙을 수행하는 방법 및 장치. KR20160143489A (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
EP16172382.0A EP3101650A1 (en) 2015-06-04 2016-06-01 Method and apparatus for performing interleaving
CN201610392717.4A CN106251392B (zh) 2015-06-04 2016-06-06 用于执行交织的方法和设备

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201562171071P 2015-06-04 2015-06-04
US62/171,071 2015-06-04
US14/981,395 2015-12-28
US14/981,395 US10089775B2 (en) 2015-06-04 2015-12-28 Automated graphics and compute tile interleave

Publications (1)

Publication Number Publication Date
KR20160143489A true KR20160143489A (ko) 2016-12-14

Family

ID=57452156

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020160014084A KR20160143489A (ko) 2015-06-04 2016-02-04 인터리빙을 수행하는 방법 및 장치.

Country Status (3)

Country Link
US (1) US10089775B2 (ko)
KR (1) KR20160143489A (ko)
CN (1) CN106251392B (ko)

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20180038793A (ko) * 2016-10-07 2018-04-17 삼성전자주식회사 영상 데이터 처리 방법 및 장치
US10223822B2 (en) * 2016-12-22 2019-03-05 Apple Inc. Mid-render compute for graphics processing
US10504270B2 (en) * 2016-12-22 2019-12-10 Apple Inc. Resource synchronization for graphics processing
US10685473B2 (en) * 2017-05-31 2020-06-16 Vmware, Inc. Emulation of geometry shaders and stream output using compute shaders
US10699368B1 (en) * 2017-08-30 2020-06-30 Apple Inc. Memory allocation techniques for graphics shader
US10628909B2 (en) 2018-06-01 2020-04-21 Apple Inc. Graphics processing unit resource dependency viewer
GB2579113B (en) 2019-05-31 2021-04-21 Imagination Tech Ltd Rendering optimisation
GB2579114B (en) * 2019-05-31 2021-04-21 Imagination Tech Ltd Controlling rendering operations
DE102019116715A1 (de) * 2019-06-20 2020-12-24 Gritworld GmbH Computerimplementiertes Verfahren und programmierbares System zum Rendern eines 2D/3D-Modells
US11120522B2 (en) 2020-02-03 2021-09-14 Sony Interactive Entertainment Inc. System and method for efficient multi-GPU rendering of geometry by subdividing geometry
US11080814B1 (en) 2020-02-03 2021-08-03 Sony Interactive Entertainment Inc. System and method for efficient multi-GPU rendering of geometry by pretesting against screen regions using prior frame information
US11263718B2 (en) 2020-02-03 2022-03-01 Sony Interactive Entertainment Inc. System and method for efficient multi-GPU rendering of geometry by pretesting against in interleaved screen regions before rendering
US11514549B2 (en) 2020-02-03 2022-11-29 Sony Interactive Entertainment Inc. System and method for efficient multi-GPU rendering of geometry by generating information in one rendering phase for use in another rendering phase
US11321800B2 (en) 2020-02-03 2022-05-03 Sony Interactive Entertainment Inc. System and method for efficient multi-GPU rendering of geometry by region testing while rendering
US11508110B2 (en) 2020-02-03 2022-11-22 Sony Interactive Entertainment Inc. System and method for efficient multi-GPU rendering of geometry by performing geometry analysis before rendering
US11170461B2 (en) 2020-02-03 2021-11-09 Sony Interactive Entertainment Inc. System and method for efficient multi-GPU rendering of geometry by performing geometry analysis while rendering
US11055812B1 (en) 2020-05-26 2021-07-06 Apple Inc. Opportunistic launch of idempotent geometry stage render operations
US20220036632A1 (en) * 2020-08-03 2022-02-03 Samsung Electronics Co., Ltd. Post-processing in a memory-system efficient manner
CN111913794A (zh) * 2020-08-04 2020-11-10 北京百度网讯科技有限公司 用于共用gpu的方法、装置、电子设备及可读存储介质
US20220334900A1 (en) * 2021-04-14 2022-10-20 Nvidia Corporation Application programming interface to indicate increased resource usage

Family Cites Families (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5835096A (en) * 1995-03-24 1998-11-10 3D Labs Rendering system using 3D texture-processing hardware for accelerated 2D rendering
US6496190B1 (en) 1997-07-02 2002-12-17 Mental Images Gmbh & Co Kg. System and method for generating and using systems of cooperating and encapsulated shaders and shader DAGs for use in a computer graphics system
WO2000011603A2 (en) 1998-08-20 2000-03-02 Apple Computer, Inc. Graphics processor with pipeline state storage and retrieval
US7336283B2 (en) * 2002-10-24 2008-02-26 Hewlett-Packard Development Company, L.P. Efficient hardware A-buffer using three-dimensional allocation of fragment memory
US8154554B1 (en) * 2006-07-28 2012-04-10 Nvidia Corporation Unified assembly instruction set for graphics processing
US9648325B2 (en) 2007-06-30 2017-05-09 Microsoft Technology Licensing, Llc Video decoding implementations for a graphics processing unit
US8056086B2 (en) * 2008-05-19 2011-11-08 International Business Machines Corporation Load balancing for image processing using multiple processors
US8130223B1 (en) 2008-09-10 2012-03-06 Nvidia Corporation System and method for structuring an A-buffer to support multi-sample anti-aliasing
US8289341B2 (en) * 2009-06-29 2012-10-16 Intel Corporation Texture sampling
US9142057B2 (en) 2009-09-03 2015-09-22 Advanced Micro Devices, Inc. Processing unit with a plurality of shader engines
GB0922126D0 (en) * 2009-12-17 2010-02-03 Advanced Risc Mach Ltd Graphics processing systems
GB201103699D0 (en) 2011-03-03 2011-04-20 Advanced Risc Mach Ltd Graphic processing
GB201104066D0 (en) 2011-03-09 2011-04-20 Imagination Tech Ltd Compression of a tessellated primitive index list in a tile rendering system
US20130063460A1 (en) * 2011-09-08 2013-03-14 Microsoft Corporation Visual shader designer
US8902228B2 (en) 2011-09-19 2014-12-02 Qualcomm Incorporated Optimizing resolve performance with tiling graphics architectures
US8810587B2 (en) 2012-03-02 2014-08-19 Adobe Systems Incorporated Conversion of contiguous interleaved image data for CPU readback
US8823715B2 (en) 2012-03-02 2014-09-02 Adobe Systems Incorporated Efficient writing of pixels to tiled planar pixel arrays
US8982134B2 (en) 2012-03-12 2015-03-17 Advanced Micro Devices, Inc. Area-based dependency chain analysis of shaders and command stream
KR20130123645A (ko) * 2012-05-03 2013-11-13 삼성전자주식회사 그래픽 처리 장치를 위한 동적 로드 밸런싱 장치 및 방법
US9495721B2 (en) * 2012-12-21 2016-11-15 Nvidia Corporation Efficient super-sampling with per-pixel shader threads
US9449410B2 (en) 2013-04-11 2016-09-20 Qualcomm Incorporated Intra-frame timestamps for tile-based rendering
US9767595B2 (en) 2013-05-02 2017-09-19 Arm Limited Graphics processing systems
US9514563B2 (en) * 2013-08-30 2016-12-06 Arm Limited Graphics processing systems

Also Published As

Publication number Publication date
CN106251392B (zh) 2021-12-03
US10089775B2 (en) 2018-10-02
US20160358307A1 (en) 2016-12-08
CN106251392A (zh) 2016-12-21

Similar Documents

Publication Publication Date Title
KR20160143489A (ko) 인터리빙을 수행하는 방법 및 장치.
JP5752853B2 (ja) グラフィックス処理ユニットにおけるメモリの共有
US10074206B1 (en) Network-optimized graphics library for virtualized graphics processing
CN110008009B (zh) 在运行时绑定常量以提高资源利用率
KR101732288B1 (ko) 스프라이트 그래픽 렌더링 시스템
US8842122B2 (en) Graphics processing unit with command processor
US9881391B2 (en) Procedurally defined texture maps
KR101630996B1 (ko) 셰이더 동작의 동기화
US20140201765A1 (en) Application interface on multiple processors
KR102356705B1 (ko) 커널 퓨징, 리사이징 및 인터리빙 자동 연산 방법
US10403025B2 (en) Automated graphics and compute tile interleave
US8610731B2 (en) Dynamic graphics pipeline and in-place rasterization
US10719970B2 (en) Low latency firmware command selection using a directed acyclic graph
US20130063473A1 (en) System and method for layering using tile-based renderers
KR102006584B1 (ko) 레이트 심도 테스팅과 컨서버티브 심도 테스팅 간의 동적 스위칭
EP3234769A1 (en) Trace buffer based replay for context switching
US11094036B2 (en) Task execution on a graphics processor using indirect argument buffers
CN115516421A (zh) Gpu中基于gpr释放机制的gpr优化
US11010863B2 (en) Bindpoint emulation
US11403223B2 (en) De-prioritization supporting frame buffer caching
KR20180015564A (ko) 타일-기반 렌더링을 수행하는 방법 및 장치
EP3101650A1 (en) Method and apparatus for performing interleaving
US11790478B2 (en) Methods and apparatus for mapping source location for input data to a graphics processing unit
Eitzen Gpupy: Efficiently using a gpu with python

Legal Events

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