KR20170088687A - 컴퓨팅 시스템 및 컴퓨팅 시스템에서 타일-기반 렌더링의 그래픽스 파이프라인을 수행하는 방법 - Google Patents

컴퓨팅 시스템 및 컴퓨팅 시스템에서 타일-기반 렌더링의 그래픽스 파이프라인을 수행하는 방법 Download PDF

Info

Publication number
KR20170088687A
KR20170088687A KR1020160008906A KR20160008906A KR20170088687A KR 20170088687 A KR20170088687 A KR 20170088687A KR 1020160008906 A KR1020160008906 A KR 1020160008906A KR 20160008906 A KR20160008906 A KR 20160008906A KR 20170088687 A KR20170088687 A KR 20170088687A
Authority
KR
South Korea
Prior art keywords
pipeline
sub
tile
rendering
subpipeline
Prior art date
Application number
KR1020160008906A
Other languages
English (en)
Other versions
KR102521654B1 (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 삼성전자주식회사
Priority to KR1020160008906A priority Critical patent/KR102521654B1/ko
Priority to US15/407,980 priority patent/US10332231B2/en
Publication of KR20170088687A publication Critical patent/KR20170088687A/ko
Application granted granted Critical
Publication of KR102521654B1 publication Critical patent/KR102521654B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/40Filling a planar surface by adding surface attributes, e.g. colour or texture
    • 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

Abstract

컴퓨팅 시스템 및 컴퓨팅 시스템에서 타일-기반 렌더링의 그래픽스 파이프라인을 수행하는 방법은, 메모리 디바이스에 구비된 내부 프로세서에서, 제 1 서브 파이프라인을 수행하고, 호스트 프로세서에서 제 1 서브 파이프라인의 수행 결과를 이용하여 제 1 서브 파이프라인에 뒤이어 처리될 제 2 서브 파이프라인을 수행한다.

Description

컴퓨팅 시스템 및 컴퓨팅 시스템에서 타일-기반 렌더링의 그래픽스 파이프라인을 수행하는 방법 {Computing system and method for performing graphics pipeline of tile-based rendering thereof}
컴퓨팅 시스템 및 컴퓨팅 시스템에서 타일-기반 렌더링의 그래픽스 파이프라인을 수행하는 방법에 관한다.
컴퓨팅 환경에서 프로세서의 역할은 점점 중요해지고 있다. 프로세서는, 점점 증가하는 해상도의 이미지 또는 동영상, 점점 복잡해지는 소프트웨어 알고리즘 등을 처리하는 주체로서, 듀얼-코어 프로세서, 쿼드-코어 프로세서, 멀티-스레딩 등의 다양한 프로세서 아키텍쳐 기술들의 발전은 이와 같은 주변 기술분야들, 예를 들어 이미지 처리 분야, 소프트웨어 엔지니어링 분야 등의 발전에 직결된다. 컴퓨팅 환경 내에서 프로세서는 한정된 리소스 내에서 구동된다. 예를 들어, 프로세서와 메모리 간의 통신 대역폭은 병목현상(performance bottleneck) 때문에 한정될 수 밖에 없고, 또한 프로세서의 에너지 소모도 일정 레벨 이하로 제한될 수 밖에 없다. 따라서, 최근에는 컴퓨팅 환경의 한정된 리소스 내에서 어떠한 방식으로 프로세싱 성능을 증대시킬 수 있을 것인지에 대한 연구가 많이 진행되고 있다.
컴퓨팅 시스템 및 컴퓨팅 시스템에서 타일-기반 렌더링의 그래픽스 파이프라인을 수행하는 방법을 제공하는데 있다. 본 실시예가 이루고자 하는 기술적 과제는 상기된 바와 같은 기술적 과제들로 한정되지 않으며, 이하의 실시예들로부터 또 다른 기술적 과제들이 유추될 수 있다.
일 측면에 따르면, 컴퓨팅 시스템은, 타일-기반 렌더링의 그래픽스 파이프라인에 포함된 제 1 서브 파이프라인의 오프로드 프로세싱을 위해, 메모리 어레이에 저장된 그래픽스 데이터를 이용하여 상기 제 1 서브 파이프라인을 수행하는 내부 프로세서를 구비한 메모리 디바이스; 및 상기 내부 프로세서에 의한 상기 제 1 서브 파이프라인의 수행이 완료됨에 따라 상기 메모리 어레이에 저장된 상기 제 1 서브 파이프라인의 수행 결과를 이용하여, 상기 제 1 서브 파이프라인에 뒤이어 처리될 제 2 서브 파이프라인을 수행하는 호스트 프로세서를 포함한다.
또한, 상기 제 1 서브 파이프라인은 각각의 타일에 대응되는 프리미티브 리스트에 관한 정보를 생성하는 비닝(binning) 파이프라인을 포함한다.
또한, 상기 메모리 어레이는 상기 제 1 서브 파이프라인의 수행 결과로서, 각각의 타일에 대응되는 프리미티브 리스트에 관한 정보를 저장한다.
또한, 상기 제 2 서브 파이프라인은 상기 메모리 어레이로부터 상기 저장된 프리미티브 리스트에 관한 정보를 리드(read)하여 타일 별로 렌더링을 수행하는 렌더링 파이프라인을 포함한다.
또한, 상기 호스트 프로세서는 GPU(graphic processing unit)이고, 상기 내부 프로세서는 PIM(processor in memory)이다.
또한, 상기 제 1 서브 파이프라인은 입력된 드로우콜들(drawcalls)에 기초하여 버텍스들의 데이터를 제공하는 입력 어셈블러(input assembler) 스테이지이다.
또한, 상기 제 2 서브 파이프라인은 상기 입력 어셈블러 스테이지를 제외한 비닝 파이프라인의 나머지 스테이지들 및 렌더링 파이프라인을 포함한다.
또한, 상기 제 1 서브 파이프라인이 상기 입력 어셈블러 스테이지인 경우, 상기 오프로드 프로세싱의 수행 여부는 버텍스 캐시(vertex cache)의 효율에 기초하여 판단된다.
다른 측면에 따르면, 컴퓨팅 시스템에서 타일-기반 렌더링의 그래픽스 파이프라인을 수행하는 방법은, 상기 그래픽스 파이프라인에 포함된 제 1 서브 파이프라인의 오프로드 프로세싱을 위하여, 메모리 디바이스에 구비된 내부 프로세서에서, 메모리 어레이에 저장된 그래픽스 데이터를 이용하여 상기 제 1 서브 파이프라인을 수행하는 단계; 상기 내부 프로세서에 의한 상기 제 1 서브 파이프라인의 수행이 완료된 경우, 상기 제 1 서브 파이프라인의 수행 결과를 상기 메모리 어레이에 저장하는 단계; 및 상기 저장된 제 1 서브 파이프라인의 수행 결과를 이용하여, 상기 제 1 서브 파이프라인에 뒤이어 처리될 제 2 서브 파이프라인을 호스트 프로세서에서 수행하는 단계를 포함한다.
또한, 상기 제 1 서브 파이프라인은 각각의 타일에 대응되는 프리미티브 리스트에 관한 정보를 생성하는 비닝(binning) 파이프라인을 포함한다.
또한, 상기 저장하는 단계는 상기 제 1 서브 파이프라인의 수행 결과로서, 각각의 타일에 대응되는 프리미티브 리스트에 관한 정보를 저장한다.
또한, 상기 제 2 서브 파이프라인은 상기 메모리 어레이로부터 상기 저장된 프리미티브 리스트에 관한 정보를 리드(read)하여 타일 별로 렌더링을 수행하는 렌더링 파이프라인을 포함한다.
또한, 상기 제 1 서브 파이프라인은 입력된 드로우콜들(drawcalls)에 기초하여 버텍스들의 데이터를 제공하는 입력 어셈블러(input assembler) 스테이지이다.
또한, 상기 제 2 서브 파이프라인은 상기 입력 어셈블러 스테이지를 제외한 비닝 파이프라인의 나머지 스테이지들 및 렌더링 파이프라인을 포함한다.
또한, 상기 제 1 서브 파이프라인이 상기 입력 어셈블러 스테이지인 경우, 상기 오프로드 프로세싱의 수행 여부는 버텍스 캐시(vertex cache)의 효율에 기초하여 판단된다.
또 다른 측면에 따르면, 호스트 프로세서는, 타일-기반 렌더링의 그래픽스 파이프라인에 포함된 제 1 서브 파이프라인을 메모리 디바이스 내에 구비된 내부 프로세서에서 수행하는 오프로드 프로세싱을 수행할 것인지 여부를 결정하는 오프로딩 결정부; 및 상기 오프로드 프로세싱을 수행하는 것으로 결정된 경우, 상기 오프로드 프로세싱에 따른 상기 제 1 서브 파이프라인의 수행 결과를 수신하여 상기 제 1 서브 파이프라인 이후 처리되는 제 2 서브 파이프라인을 수행하는 그래픽스 파이프라인 프로세싱부를 포함한다.
또한, 상기 제 1 서브 파이프라인은 각각의 타일에 대응되는 프리미티브 리스트에 관한 정보를 생성하는 비닝(binning) 파이프라인을 포함한다.
또한, 상기 제 2 서브 파이프라인은 상기 메모리 디바이스 내에 구비된 메모리 어레이로부터 상기 프리미티브 리스트에 관한 정보를 리드(read)하여 타일 별로 렌더링을 수행하는 렌더링 파이프라인을 포함한다.
또한, 상기 제 1 서브 파이프라인은 입력된 드로우콜들(drawcalls)에 기초하여 버텍스들의 데이터를 제공하는 입력 어셈블러(input assembler) 스테이지이다.
또한, 상기 제 2 서브 파이프라인은 상기 입력 어셈블러 스테이지를 제외한 비닝 파이프라인의 나머지 스테이지들 및 렌더링 파이프라인을 포함한다.
또한, 상기 오프로딩 결정부는 상기 제 1 서브 파이프라인이 상기 입력 어셈블러 스테이지인 경우, 버텍스 캐시(vertex cache)의 효율에 기초하여 상기 오프로드 프로세싱을 수행할 것인지 여부를 결정한다.
또한, 상기 오프로딩 결정부는 상기 오프로드 프로세싱을 수행하는 것으로 결정된 경우, 상기 내부 프로세서로 상기 오프로드 프로세싱의 수행을 제어하는 명령을 전송한다.
도 1은 일 실시예에 따른, 컴퓨팅 시스템의 블록도이다.
도 2는 일 실시예에 따른 메모리 디바이스의 상세 하드웨어 구성을 도시한 도면이다.
도 3은 일 실시예에 따른 GPU의 상세 하드웨어 구조를 도시한 블록도이다.
도 4는 일 실시예에 따른 타일-기반 렌더링(TBR)을 위한 그래픽스 파이프라인을 설명하기 위한 도면이다.
도 5는 일 실시예에 따라 GPU와 내부 프로세서 간에 타일-기반 렌더링(TBR)을 위한 그래픽스 파이프라인에 대한 오프로드 프로세싱을 수행하는 것을 설명하기 위한 도면이다.
도 6은 일 실시예에 따라 GPU와 내부 프로세서가 오프로드 프로세싱을 통해 타일-기반 렌더링(TBR)을 위한 그래픽스 파이프라인을 수행하는 것을 설명하기 위한 도면이다.
도 7은 일 실시예에 따른 입력 어셈블러 스테이지를 설명하기 위한 도면이다.
도 8은 다른 일 실시예에 따라 GPU와 내부 프로세서가 오프로드 프로세싱을 통해 타일-기반 렌더링(TBR)을 위한 그래픽스 파이프라인을 수행하는 것을 설명하기 위한 도면이다.
도 9는 일 실시예에 따라 GPU가 입력 어셈블러 스테이지에 대한 오프로드 프로세싱의 수행 여부를 판단하는 것을 설명하기 위한 도면이다.
도 10은 일 실시예에 따른 컴퓨팅 시스템에서 타일-기반 렌더링의 그래픽스 파이프라인을 수행하는 방법의 흐름도이다.
도 11은 일 실시예에 따른 호스트 프로세서(GPU)의 상세 블록도이다.
도 12는 일 실시예에 따른 호스트 프로세서(GPU)에서 타일-기반 렌더링의 그래픽스 파이프라인을 수행하는 방법의 흐름도이다.
본 실시예들에서 사용되는 용어는 본 실시예들에서의 기능을 고려하면서 가능한 현재 널리 사용되는 일반적인 용어들을 선택하였으나, 이는 당 기술분야에 종사하는 기술자의 의도 또는 판례, 새로운 기술의 출현 등에 따라 달라질 수 있다. 또한, 특정한 경우는 임의로 선정된 용어도 있으며, 이 경우 해당 실시예의 설명 부분에서 상세히 그 의미를 기재할 것이다. 따라서, 본 실시예들에서 사용되는 용어는 단순한 용어의 명칭이 아닌, 그 용어가 가지는 의미와 본 실시예들의 전반에 걸친 내용을 토대로 정의되어야 한다.
실시예들에 대한 설명들에서, 어떤 부분이 다른 부분과 연결되어 있다고 할 때, 이는 직접적으로 연결되어 있는 경우뿐 아니라, 그 중간에 다른 구성요소를 사이에 두고 전기적으로 연결되어 있는 경우도 포함한다. 또한 어떤 부분이 어떤 구성요소를 포함한다고 할 때, 이는 특별히 반대되는 기재가 없는 한 다른 구성요소를 제외하는 것이 아니라 다른 구성요소를 더 포함할 수 있는 것을 의미한다. 또한, 실시예들에 기재된 “...부”, “...모듈”의 용어는 적어도 하나의 기능이나 동작을 처리하는 단위를 의미하며, 이는 하드웨어 또는 소프트웨어로 구현되거나 하드웨어와 소프트웨어의 결합으로 구현될 수 있다.
본 실시예들에서 사용되는 “구성된다” 또는 “포함한다” 등의 용어는 명세서 상에 기재된 여러 구성 요소들, 도는 여러 단계들을 반드시 모두 포함하는 것으로 해석되지 않아야 하며, 그 중 일부 구성 요소들 또는 일부 단계들은 포함되지 않을 수도 있고, 또는 추가적인 구성 요소 또는 단계들을 더 포함할 수 있는 것으로 해석되어야 한다.
하기 실시예들에 대한 설명은 권리범위를 제한하는 것으로 해석되지 말아야 하며, 해당 기술분야의 당업자가 용이하게 유추할 수 있는 것은 실시예들의 권리범위에 속하는 것으로 해석되어야 할 것이다. 이하 첨부된 도면들을 참조하면서 오로지 예시를 위한 실시예들을 상세히 설명하기로 한다.
도 1은 일 실시예에 따른, 컴퓨팅 시스템의 블록도이다.
도 1을 참고하면, 컴퓨팅 시스템(10)은 GPU(Graphic Processing Unit)(20) 및 메모리 디바이스(30)를 포함한다. 한편, 도 1에 도시된 컴퓨팅 시스템(10)에는 실시예들과 관련된 구성요소들만이 도시되어 있다. 따라서, 도 1에 도시된 구성요소들 외에 다른 범용적인 구성요소들, 예를 들어 CPU(Central Processing Unit), 인터페이싱 모듈들 등이 더 포함될 수 있음을 당해 기술분야의 통상의 기술자라면 이해할 수 있다.
컴퓨팅 시스템(10)은 데스크탑 컴퓨터, 노트북 컴퓨터, 스마트폰, PDA(personal digital assistants), 휴대형 미디어 플레이어, 비디오 게임용 콘솔, 텔레비젼 셋탑 박스, 태블릿 디바이스, 이북 리더, 웨어러블 디바이스 등을 예로 들 수 있지만, 이에 제한되지 않는다. 즉, 컴퓨팅 시스템(10)의 범주에는 다양한 장치들이 포함될 수 있다.
GPU(20)는 컴퓨팅 시스템(10)의 그래픽 프로세싱 기능을 제어하는 하드웨어이다. GPU(20)는 OpenGL (Open Graphic(s) Library), DirectX, CUDA(Compute Unified Device Architecture) 등과 같은 다양한 버전들, 종류들의 그래픽스 파이프라인(graphics pipeline)을 수행하는 그래픽 전용 프로세서로서, 3차원 이미지 상의 3차원 객체들을 디스플레이용의 2차원 이미지로 렌더링하기 위해 3차원 그래픽스 파이프라인을 실행하도록 구현될 수 있다.
GPU(20)는, 운영체제(Operating System, OS)를 구동시키는 CPU에서 실행된 그래픽스 API(Application Programming Interface) 및 GPU(20)의 드라이버에 의해 제어될 수 있다. 한편, GPU(20)는, 실행된 그래픽스 API 및 드라이버에 대응되는 그래픽스 파이프라인에 대한 오프로드 프로세싱(offload processing)을 제어할 수 있다. 이때 GPU(20)는, 메모리 디바이스(30) 내의 내부 프로세서(35)가 그래픽스 파이프라인의 오프로드 프로세싱을 수행하도록 제어할 수 있다. 본 실시예들에서 “오프로딩”의 용어는 어떠한 특정 연산의 처리를 GPU(20) 대신에, 내부 프로세서(35)가 수행하는 것을 의미할 수 있다. 다만, 도 1에 도시된 바와 같이 오프로드 프로세싱의 제어는 GPU(20)에 의해 수행되는 것으로 설명하겠으나, 이에 제한되지 않고 본 실시예들에서의 오프로드 프로세싱의 제어는 GPU(20)가 아닌 CPU에 의해서 수행되는 것도 가능하다.
GPU(20)는 타일-기반 렌더링(tile-based rendering, TBR)을 위한 그래픽스 파이프라인을 수행할 수 있다. 타일-기반이라는 용어는, 동영상의 각 프레임을 복수의 타일들로 구분한(divide 또는 partitioning) 후, 타일 단위로 렌더링을 수행하는 것을 의미한다. 타일-기반의 아키텍쳐는, 픽셀 단위로 프레임을 처리할 때보다 연산량이 적어질 수 있기 때문에, 스마트폰, 태블릿 디바이스와 같이 비교적 처리 성능이 낮은 모바일 디바이스(또는 임베디드 디바이스)에서 사용하는 그래픽스 렌더링 방법일 수 있다.
메모리 디바이스(30)는 메모리 어레이(31) 및 내부(internal) 프로세서(35)를 포함한다.
메모리 디바이스(30)에 포함된 내부 프로세서(35)는 GPU(20)와 유사하게, 프로세싱 기능을 갖는 하드웨어로서, 메모리 디바이스(30)의 메모리 패키지(memory package)의 칩 내에서 메모리 어레이(31)와 함께 패키징된 프로세서이다. 여기서, “내부”의 용어는 메모리 디바이스(30) 내에 존재한다는 것을 의미할 수 있다. 따라서, 컴퓨팅 시스템(10) 내에서 메모리 디바이스(30)의 “외부”에 존재하는 프로세서는 예를 들어, GPU(20) 또는 CPU를 지칭할 수 있다.
내부 프로세서(35)는 PIM(processor-in-memory)에 해당될 수 있다. PIM은 하드웨어 로직으로 구현된 프로세서를 전용 핀(dedicated pin)으로 메모리 어레이(31)와 연결시킴으로써 메모리 어레이(31)의 데이터를 지연(latency) 없이 처리하도록 만든 디바이스이다. PIM 아키텍처는 프로세서와 메모리가 온칩(on-chip)으로 구현되기 때문에, 낮은 레이턴시(low latency)의 빠른 메모리 액세스가 가능하다. PIM과 같은 내부 프로세서(35)를 갖는 메모리 디바이스(30)는 intelligent RAM(Random Access Memory), computational RAM, 또는 smart memory 등과 같은 다른 용어들로도 호칭될 수 있다.
앞서 설명된 바와 같이, 내부 프로세서(35)는 GPU(20)에 의해 수행될 그래픽스 파이프라인에 대한 오프로드 프로세싱을 수행할 수 있다. 즉, 내부 프로세서(35)는 GPU(20)의 역할을 분담하여 그래픽스 파이프라인을 처리하므로, 이때 GPU(20)는 호스트 프로세서라는 용어로 호칭될 수 있다. 다만, 이하 본 실시예들에서 호스트 프로세서는 GPU(20)에 해당되는 것으로 설명하겠으나, 이에 제한되지 않고 내부 프로세서(35)의 역할에 따라 CPU가 호스트 프로세서에 해당될 수도 있다.
메모리 디바이스(30)에 포함된 메모리 어레이(31)는, DRAM(dynamic random access memory), SRAM(static random access memory) 등과 같은 RAM(random access memory)에 해당되거나, 또는 ROM(read-only memory), EEPROM(electrically erasable programmable read-only memory) 등과 같은 디바이스에 해당될 수 있다. 즉, 메모리 어레이(31)는 GPU(20) 또는 내부 프로세서(35)에서 처리가 완료된 데이터(예를 들어, 프리미티브(primitive) 정보, 버텍스(vertex) 정보, 타일 리스트, 디스플레이 리스트, 프레임 정보 등)를 저장하거나, 또는 GPU(20) 또는 내부 프로세서(35)에서 처리될 데이터(예를 들어, 그래픽스 데이터, 타일 스케줄 등)를 제공하는 하드웨어에 해당될 수 있다.
내부 프로세서(35)는 메모리 디바이스(30) 내에서 그래픽스 파이프라인을 수행하기 위하여, 메모리 어레이(31)로부터 그래픽스 데이터(예를 들어, 3D 객체에 관한 데이터)를 리드(read)한다. 그리고, 내부 프로세서(35)는 그래픽스 파이프라인의 일부 스테이지들에 대한 오프로드 프로세싱의 결과를 메모리 어레이(31)에 저장한다. GPU(20)는 그래픽스 파이프라인의 나머지 스테이지들을 수행할 때, 메모리 어레이(31)에 저장된 오프로드 프로세싱의 결과를 이용할 수 있다.
GPU(20)에서 메모리 어레이(31)에 저장된 데이터에 액세스하고 리드하는데 걸리는 시간은 수백 사이클일 수 있고, 또한, 많은 전력이 소모될 수 있다. 따라서, 그래픽스 파이프라인의 일부 특정 연산들에 대해서는 메모리 디바이스(30) 내의 내부 프로세서(35)가 대신하여 수행하고, GPU(20)는 내부 프로세서(35)의 수행 결과를 이용하여 그래픽스 파이프라인의 나머지 연산들을 수행할 수 있다면, 메모리 대역폭 또는 전력 소모의 측면에서 효율적일 수 있다.
도 2는 일 실시예에 따른 메모리 디바이스의 상세 하드웨어 구성을 도시한 도면이다.
도 2를 참고하면, 메모리 디바이스(30)는 PIM(310) 및 DRAM(320)을 포함할 수 있다. 여기서, PIM(310)은 도 1의 내부 프로세서(35)에 대응되고, DRAM(320)은 도 1의 메모리 어레이(31)에 대응될 수 있다. 따라서, 이하에서 설명될 실시예들에서, PIM(310)과 내부 프로세서(35)는 동일한 것으로 해석될 수 있고, DRAM(320)은 메모리 어레이(31)와 동일한 것으로 해석될 수 있다. 한편, 도 2에서는 예를 들어 메모리 어레이(31)가 DRAM(320)에 해당되는 것으로 설명되었으나, 이에 제한되지 않고 메모리 어레이(31)는 DRAM(320) 외에도 SRAM 등과 같은 다른 종류의 메모리에 해당될 수 있다. 한편, 도 2에 도시된 메모리 디바이스(30)에는 실시예들과 관련된 구성요소들만이 도시되어 있다. 따라서, 도 2에 도시된 구성요소들 외에 다른 범용적인 구성요소들이 더 포함될 수 있음을 당해 기술분야의 통상의 기술자라면 이해할 수 있다.
본 실시예에 따르면, PIM(310)은 타일-기반 렌더링(TBR)의 그래픽스 파이프라인을 수행하기 위한 프로세싱 기능을 갖는 프로세서에 해당될 수 있으나, 이에 제한되지 않는다. 예를 들어, PIM(310)은 그래픽스 파이프라인 내의 어셈블링 연산, 쉐이딩 연상 등을 수행할 수 있다.
PIM(310)은 그래픽스 파이프라인의 수행에 대하여 GPU(20)로부터 오프로드 프로세싱이 요청된 경우, 메모리 디바이스(30) 내에서 DRAM(320)에 직접 액세스하여 그래픽스 파이프라인의 수행을 위한 다양한 연산들을 처리함으로써, GPU(20)의 메모리 액세스 대역폭을 줄이고 GPU(20)의 전력 소모를 줄이는데 도움을 줄 수 있다.
한편, PIM(310)에 의해 수행된 그래픽스 파이프라인의 수행 결과는 DRAM(320)에 저장될 수 있다. 이후에, DRAM(320)에 저장된 그래픽스 파이프라인의 수행 결과는, GPU(20)에 의해 이용될 수 있다.
도 3은 일 실시예에 따른 GPU의 상세 하드웨어 구조를 도시한 블록도이다.
도 3을 참고하면, GPU(20)는 그래픽스 파이프라인(100)을 수행하는 입력 어셈블러(input assembler)(110), 버텍스 쉐이더(vertex shader)(120), 프리미티브 어셈블러(primitive assembler)(130), 비너(binner)(140), 래스터라이저(rasterizer)(150) 및 프래그먼트 쉐이더(fragment shader)(160)를 포함할 수 있다. 또한, GPU(20)는 컨트롤러(170) 및 버퍼들(180)을 더 포함할 수 있다. 한편, GPU(20) 내에서 그래픽스 파이프라인(100)을 수행하는 위의 구성들은, 아래 설명될 기능들에 기초하여 분류된 것들일 수 있다. 따라서, 그래픽스 파이프라인(100)을 수행하는 위의 구성들 각각은, 아래 설명될 기능들 각각을 실행시키는 프로그램 로직들 또는 소프트웨어 모듈들로 구현될 수 있다. 이와 다르게, 그래픽스 파이프라인(100)을 수행하는 위의 구성들은, GPU(20) 내에 구비된 서브(sub) 프로세싱 유닛들(또는 프로세서 코어들) 각각으로 구현될 수도 있다. 즉, 그래픽스 파이프라인(100)을 수행하는 위의 구성들의 구현 형태는, 어느 하나에 의해 제한되지 않는다. 나아가서, 그래픽스 파이프라인(100)을 수행하는 위의 구성들의 명칭들은 아래 설명될 기능들에 기초하여 부여된 것일 수 있으나, 이와 같은 명칭들은 다양하게 변경될 수도 있음을 당해 기술분야의 통상의 기술자라면 이해할 수 있다.
한편, GPU(20)에서 그래픽스 파이프라인(100)을 수행하는 구성들의 명칭들은 설명의 편의를 위하여 사용된 것들일 뿐이므로, 이 구성들의 명칭들은 그래픽스 API의 종류에 따라 달라질 수 있다. 즉, GPU(20)에서 그래픽스 파이프라인(100)을 수행하는 구성들은, DirectX, CUDA, OpenGL 등과 같은 여러 종류의 API들에서 정의된 구성들의 명칭들에 다양하게 대응될 수 있다.
입력 어셈블러(110)는, 입력된 드로우콜들(drawcalls)에 기초하여, 메모리 어레이(도 1의 31)에 저장된 객체들에 관한 버텍스들의 데이터를 그래픽스 파이프라인(100)에 공급한다. 그래픽스 파이프라인(100)에서 공급된 버텍스들은, 메쉬(mesh) 또는 표면(surface)의 표현인 패치(patch)에 관한 것일 수 있으나, 이에 제한되지 않는다. 드로우콜은 어떤 프레임에 어떤 오브젝트를 렌더링할 것인지를 나타내는 커맨드이다. 예를 들어, 드로우콜은 영상 또는 프레임에 사각형들 또는 삼각형들과 같은 프리미티브들을 그리기 위한 커맨드일 수 있다.
버텍스 쉐이더(120)는 프레임에 포함된 버텍스들의 위치, 버텍스들의 속성(attribute) 등에 관한 정보를 이용하여, 각 버텍스에 대한 3차원 공간 상의 좌표를 결정한다.
프리미티브 어셈블러(130)는 버텍스들을 프리미티브들로 변환한다.
비너(140)는 프리미티브 어셈블러(130)로부터 출력된 프리미티브들을 이용하여, 비닝(binning) 또는 타일링(tiling)을 수행한다. 예를 들어, 비너(140)는 깊이 테스트(또는 tile Z test)를 수행하여 프리미티브들 각각이 속한 타일들의 정보를 나타내는 타일 리스트를 생성(비닝)한다. 다시 말하면, 비너(140)는 각각의 타일에 대응되는 프리미티브 리스트에 관한 정보를 생성한다.
래스터라이저(150)는 생성된 타일 리스트에 기초하여, 프리미티브들을 2차원 공간에서의 픽셀 값들로 변환한다.
프래그먼트는 프리미티브에 의해 커버되는 픽셀들을 의미하는 것으로서, 프래그먼트 쉐이더(160)는, 이와 같은 프래그먼트를 생성하고, 프래그먼트에 대한 깊이 값, 스텐실 값, 컬러 값 등을 결정한다. 프래그먼트 쉐이더(160)의 쉐이딩 결과는 버퍼(180)(예를 들어, 프레임 버퍼)에 저장된 후, 동영상의 프레임으로서 디스플레이될 수 있다.
컨트롤러(170)는 그래픽스 파이프라인(100)의 각 구성요소들(110 내지 160)과 버퍼(180)의 전반적인 기능들 및 동작들을 제어한다.
도 4는 일 실시예에 따른 타일-기반 렌더링(TBR)을 위한 그래픽스 파이프라인을 설명하기 위한 도면이다.
도 4를 참고하면, 타일-기반 렌더링(TBR)을 위한 그래픽스 파이프라인(100)은, 각각의 타일에 대응되는 프리미티브 리스트에 관한 정보를 생성하는 비닝 파이프라인(101) 및 생성된 프리미티브 리스트에 관한 정보를 리드(read)하여 타일 별로(per tile) 렌더링을 수행하는 렌더링 파이프라인(102)을 포함한다.
비닝 파이프라인(101)은, 입력 어셈블러(110)에 의한 입력 어셈블러 스테이지(401), 버텍스 쉐이더(120)에 의한 버텍스 쉐이더 스테이지(402), 프리미티브 어셈블러(130)에 의한 프리미티브 어셈블러 스테이지(403) 및 비너(140)에 의한 비너 스테이지(404)를 포함할 수 있다.
렌더링 파이프라인(102)은, 컨트롤러(170)에 의한 타일 스케줄러 스테이지(405), 래스터라이저(150)에 의한 래스터라이저 스테이지(406), 프래그먼트 쉐이더(160)에 의한 프래그먼트 쉐이더 스테이지(407), 버퍼(180)에 의한 프레임 버퍼 스테이지(408)를 포함할 수 있다.
한편, 비닝 파이프라인(101) 및 렌더링 파이프라인(102)에 포함된 스테이지들은 본 실시예들의 설명의 편의를 위하여 도시된 것일 뿐, 비닝 파이프라인(101) 및 렌더링 파이프라인(102)에는 이미 알려진 다른 스테이지들(예를 들어, 테셀레이션 파이프라인 등)이 더 포함될 수도 있다. 나아가서, 비닝 파이프라인(101) 및 렌더링 파이프라인(102)에 포함된 각 스테이지들의 명칭들은 그래픽스 API의 종류에 따라 달라질 수 있다.
도 5는 일 실시예에 따라 GPU와 내부 프로세서 간에 타일-기반 렌더링(TBR)을 위한 그래픽스 파이프라인에 대한 오프로드 프로세싱을 수행하는 것을 설명하기 위한 도면이다.
도 5를 참고하면, 메모리 디바이스(30)에 구비된 내부 프로세서(35)는 타일-기반 렌더링(TBR)의 그래픽스 파이프라인에 포함된 제 1 서브 파이프라인의 오프로드 프로세싱을 위해, 메모리 어레이(31)에 저장된 그래픽스 데이터(예를 들어, 3D 객체에 관한 데이터)(510)를 이용하여 제 1 서브 파이프라인을 수행한다.
내부 프로세서(35)는 제 1 서브 파이프라인의 수행 결과(520)를 메모리 어레이(31)에 저장한다.
호스트 프로세서에 해당되는 GPU(20)는 내부 프로세서(35)에 의한 제 1 서브 파이프라인의 수행이 완료됨에 따라 메모리 어레이(31)에 저장된 제 1 서브 파이프라인의 수행 결과(520)를 이용하여, 제 1 서브 파이프라인에 뒤이어 처리될 제 2 서브 파이프라인을 수행한다.
제 1 서브 파이프라인 및 제 2 서브 파이프라인 각각은, 타일-기반 렌더링(TBR)을 위한 그래픽스 파이프라인의 일부 스테이지들을 포함하는 서브 파이프라인들을 의미한다. 예를 들어, 제 1 서브 파이프라인은 타일-기반 렌더링(TBR)을 위한 그래픽스 파이프라인에 포함된 비닝 파이프라인(도 4의 101)일 수 있고, 제 2 서브 파이프라인은 타일-기반 렌더링(TBR)을 위한 그래픽스 파이프라인에 포함된 렌더링 파이프라인(도 4의 102)일 수 있다. 또는, 제 1 서브 파이프라인은 입력 어셈블리 스테이지(도 4의 401)만을 포함하고, 제 2 서브 파이프라인은 입력 어셈블리 스테이지(401)를 제외한 비닝 파이프라인(101)의 나머지 스테이지들(도 4의 402 내지 404) 및 렌더링 파이프라인(도 4의 102)을 포함할 수 있다. 즉, 제 1 서브 파이프라인 또는 제 2 서브 파이프라인에 포함될 타일-기반 렌더링(TBR)을 위한 그래픽스 파이프라인의 일부 스테이지들의 종류는 다양할 수 있다.
도 6은 일 실시예에 따라 GPU와 내부 프로세서가 오프로드 프로세싱을 통해 타일-기반 렌더링(TBR)을 위한 그래픽스 파이프라인을 수행하는 것을 설명하기 위한 도면이다.
도 6을 참고하면, 제 1 서브 파이프라인(610)은 타일-기반 렌더링(TBR)을 위한 그래픽스 파이프라인에 포함된 비닝 파이프라인(도 4의 101)에 대응되고, 제 2 서브 파이프라인(620)은 타일-기반 렌더링(TBR)을 위한 그래픽스 파이프라인에 포함된 렌더링 파이프라인(도 4의 102)에 대응된다.
내부 프로세서(35)는 PIM일 수 있다. 타일-기반 렌더링(TBR)을 위한 그래픽스 파이프라인이 시작되면, 내부 프로세서(35)는 메모리 어레이(31)로부터 그래픽스 데이터를 리드하여 입력 어셈블러 스테이지(401), 버텍스 쉐이더 스테이지(402), 프리미티브 어셈블러 스테이지(403) 및 비너 스테이지(404)를 포함하는 제 1 서브 파이프라인(610)(비닝 파이프라인)을 수행한다.
비너 스테이지(404)의 수행이 완료된 경우, 메모리 어레이(31)는 내부 프로세서(35)에 의한 제 1 서브 파이프라인(610)(비닝 파이프라인)의 수행 결과로서, 각각의 타일에 대응되는 프리미티브 리스트에 관한 정보인 디스플레이 리스트의 정보를 저장한다.
디스플레이 리스트의 저장이 완료된 경우, 즉 내부 프로세서(35)에 의한 제 1 서브 파이프라인(610)(비닝 파이프라인)의 수행이 완료된 경우, GPU(20)는 메모리 어레이(31)로부터 디스플레이 리스트를 리드하여 타일 스케줄러 스테이지(405), 래스터라이저 스테이지(406), 프래그먼트 쉐이더 스테이지(407) 및 프레임 버퍼 스테이지(408)를 포함하는 제 2 서브 파이프라인(620)(비닝 파이프라인)을 수행한다. 여기서, 타일 스케줄러 스테이지(405)는 타일 별로(per tile) 수행되는 렌더링 파이프라인을 위하여, 처리될 타일의 순서를 스케줄링하는 스테이지를 의미한다. 프레임 버퍼 스테이지(408)가 완료되면, 버퍼(도 3의 180)(예를 들어, 프레임 버퍼)에는 렌더링 처리가 완료된 프레임의 이미지가 저장될 수 있다.
도 6에 도시된 바와 같이, 내부 프로세서(35)가 타일-기반 렌더링(TBR)을 위한 그래픽스 파이프라인의 일부 스테이지들을 GPU(20)를 대신하여 오프로드 프로세싱하여 줌으로써, GPU(20)의 메모리 액세스 대역폭을 줄이고 GPU(20)의 전력 소모를 줄이는데 도움을 줄 수 있다.
도 7은 일 실시예에 따른 입력 어셈블러 스테이지를 설명하기 위한 도면이다.
도 7을 참고하면, 입력 어셈블러(110)는 메모리 어레이(31)에 저장된 비트스트림(701), 인덱스(702) 및 버텍스(703)를 순차적으로 리드하여 버텍스 캐시(740)에 버텍스들의 데이터를 저장한다. 보다 상세하게 설명하면, 입력 어셈블러(110)는 메모리 어레이(31)로부터 리드된 비트스트림(701)에 대한 비트스트림 프로세싱(710)을 통해 프리미티브 식별자(ID)를 생성한다. 입력 어셈블러(110)는 생성된 프리미티브 식별자(ID)와 메모리 어레이(31)로부터 리드된 인덱스(702)를 매칭시키는 인덱스 프로세싱(720)을 수행한다. 입력 어셈블러(110)는 매칭된 인덱스를 이용하여 버텍스 어드레스를 생성하고(730), 생성된 버텍스 어드레스에 대응되는 버텍스(703)를 메모리 어레이(31)로부터 리드하여 버텍스 캐시(740)에 저장한다. 이와 같이, 입력 어셈블러(110)는 버텍스들의 데이터를 획득하기 위하여, 메모리 어레이(31)에 많은 액세스들을 하여야 한다. 따라서, 입력 어셈블러(110)에 의한 입력 어셈블러 스테이지(도 4의 401)가 GPU(20)에 의해 수행된다면, GPU(20)는 메모리 디바이스(30)(메모리 어레이(31))에 많이 액세스하게 된다. 그러므로, GPU(20)의 메모리 액세스 빈도를 감소시키기 위하여 입력 어셈블러 스테이지(도 4의 401)에 대한 오프로드 프로세싱을 고려할 수 있다.
도 8은 다른 일 실시예에 따라 GPU와 내부 프로세서가 오프로드 프로세싱을 통해 타일-기반 렌더링(TBR)을 위한 그래픽스 파이프라인을 수행하는 것을 설명하기 위한 도면이다.
도 8을 참고하면, 제 1 서브 파이프라인(810)은 타일-기반 렌더링(TBR)을 위한 그래픽스 파이프라인에 포함된 입력 어셈블러 스테이지(401)에 대응되고, 제 2 서브 파이프라인(820)은 입력 어셈블리 스테이지(401)를 제외한 비닝 파이프라인(도 4의 101)의 나머지 스테이지들(402 내지 404) 및 렌더링 파이프라인(도 4의 102)에 포함된 스테이지들(405 내지 408)에 대응된다.
내부 프로세서(35)는 PIM일 수 있다. 타일-기반 렌더링(TBR)을 위한 그래픽스 파이프라인이 시작되면, 내부 프로세서(35)는 메모리 어레이(31)로부터 그래픽스 데이터를 리드하여 입력 어셈블러 스테이지(401)를 포함하는 제 1 서브 파이프라인(810)을 수행한다.
입력 어셈블러 스테이지(401)의 수행이 완료된 경우, 메모리 어레이(31)는 내부 프로세서(35)에 의한 제 1 서브 파이프라인(810)의 수행 결과로서, 버텍스들의 데이터를 저장한다.
버텍스들의 데이터의 저장이 완료된 경우, 즉 내부 프로세서(35)에 의한 제 1 서브 파이프라인(810)의 수행이 완료된 경우, GPU(20)는 메모리 어레이(31)로부터 버텍스들의 데이터를 리드하여 버텍스 쉐이더 스테이지(402), 프리미티브 어셈블러 스테이지(403), 비너 스테이지(404), 타일 스케줄러 스테이지(405), 래스터라이저 스테이지(406), 프래그먼트 쉐이더 스테이지(407) 및 프레임 버퍼 스테이지(408)를 포함하는 제 2 서브 파이프라인(820)을 수행한다. 프레임 버퍼 스테이지(408)가 완료되면, 버퍼(도 3의 180)(예를 들어, 프레임 버퍼)에는 렌더링 처리가 완료된 프레임의 이미지가 저장될 수 있다.
도 8에 도시된 바와 같이, 내부 프로세서(35)가 타일-기반 렌더링(TBR)을 위한 그래픽스 파이프라인의 일부 스테이지(입력 어셈블러 스테이지(401))를 GPU(20)를 대신하여 오프로드 프로세싱하여 줌으로써, GPU(20)의 메모리 액세스 대역폭을 줄이고 GPU(20)의 전력 소모를 줄이는데 도움을 줄 수 있다.
도 9는 일 실시예에 따라 GPU가 입력 어셈블러 스테이지에 대한 오프로드 프로세싱의 수행 여부를 판단하는 것을 설명하기 위한 도면이다.
도 9를 참고하면, 앞서 설명된 바와 같이, GPU(20)는 내부 프로세서(35)에 의한 오프로드 프로세싱의 수행을 제어할 수 있다. 즉, GPU(20)는 내부 프로세서(35)가 입력 어셈블러 스테이지(401)를 수행할 것인지 또는 오프로드 프로세싱 없이 GPU(20)가 입력 어셈블러 스테이지(401)를 수행할 것인지 여부를 판단할 수 있다.
이때, GPU(20)는 오프로드 프로세싱의 수행 여부를 버텍스 캐시(도 7의 740)의 효율에 기초하여 판단할 수 있다. 여기서, 버텍스 캐시(도 7의 740)의 효율은 버텍스 캐시(도 7의 740)에서의 캐시 히트 비율(cache hit ratio) 또는 캐시 미스 비율(cache miss ratio), 버텍스 캐시(740)의 에너지 소비량 등을 의미할 수 있다.
보다 상세하게 설명하면, GPU(20)는 이전(previous) 프레임에 대한 그래픽스 파이프라인이 수행되는 동안, 버텍스 캐시(740)의 효율(예를 들어, 캐시 히트 비율)을 모니터링한다. 만약, 버텍스 캐시(740)의 효율을 소정 임계값과 비교하여 버텍스 캐시(740)의 효율이 좋지 않은 것으로 모니터링된 경우, GPU(20)는 현재 프레임에 대한 그래픽스 파이프라인이 수행될 때 입력 어셈블러 스테이지(401)는 내부 프로세서(35)에 의해 오프로드 프로세싱되는 것으로 제어할 수 있다. 그러나, 버텍스 캐시(740)의 효율을 소정 임계값과 비교하여 버텍스 캐시(740)의 효율이 좋은 것으로 모니터링된 경우, GPU(20)는 현재 프레임에 대한 그래픽스 파이프라인이 수행될 때 입력 어셈블러 스테이지(401)는 GPU(20)에 의해 수행되는 것으로 제어할 수 있다.
다만, 이에 제한되지 않고, GPU(20)는 위의 설명과 달리, 디폴트로서 적어도 하나의 특정 스테이지는 오프로드 프로세싱되는 것으로 제어할 수도 있다. 또한, 이에 제한되지 않고, 오프로드 프로세싱의 제어는 GPU(20)가 아닌 CPU에 의해 수행될 수도 있다.
도 10은 일 실시예에 따른 컴퓨팅 시스템에서 타일-기반 렌더링의 그래픽스 파이프라인을 수행하는 방법의 흐름도이다. 도 10에 도시된, 그래픽스 파이프라인(100)의 수행 방법은, 앞서 설명된 도면들에서 설명된 실시예들에 관련되므로, 이하 생략된 내용이라 할지라도, 앞서 도면들에서 설명된 내용들은 도 10의 방법에도 적용될 수 있다.
1001 단계에서, 메모리 디바이스(30)에 구비된 내부 프로세서(35)는, 그래픽스 파이프라인(100)에 포함된 제 1 서브 파이프라인의 오프로드 프로세싱을 위하여, 메모리 어레이(31)에 저장된 그래픽스 데이터를 이용하여 제 1 서브 파이프라인을 수행한다.
1002 단계에서, 메모리 어레이(31)는 내부 프로세서(35)에 의한 제 1 서브 파이프라인의 수행이 완료된 경우, 제 1 서브 파이프라인의 수행 결과를 저장한다.
1003 단계에서, 호스트 프로세서(GPU(20))는 저장된 제 1 서브 파이프라인의 수행 결과를 이용하여, 제 1 서브 파이프라인에 뒤이어 처리될 제 2 서브 파이프라인을 수행한다.
도 11은 일 실시예에 따른 호스트 프로세서(GPU)의 상세 블록도이다.
도 11을 참고하면, 호스트 프로세서(GPU)(20)는 오프로딩 결정부(21) 및 그래픽스 파이프라인 프로세싱부(23)를 포함한다. 한편, 도 11에 도시된 호스트 프로세서(GPU)(20) 내에는 실시예들과 관련된 구성요소들만이 도시되어 있다. 따라서, 호스트 프로세서(GPU)(20)는 도 11에 도시된 구성요소들 외에 다른 범용적인 구성요소들을 더 포함할 수 있음을 당해 기술분야의 통상의 기술자라면 이해할 수 있다.
오프로딩 결정부(21)는 메모리 디바이스(30) 내에 구비된 내부 프로세서(35)에서, 타일-기반 렌더링의 그래픽스 파이프라인(도 3의 100, 도 4의 100)에 포함된 제 1 서브 파이프라인(도 6의 610 또는 도 8의 810)의 오프로드 프로세싱을 수행할 것인지 여부를 결정한다. 즉, 오프로딩 결정부(21)는 내부 프로세서(35)에 의한 오프로드 프로세싱의 수행을 제어한다.
그래픽스 파이프라인 프로세싱부(23)는 GPU(20) 내에서 처리될 그래픽스 파이프라인(100)의 수행을 담당한다.
오프로딩 결정부(21)에서 오프로드 프로세싱을 수행하지 않는 것으로 결정된 경우, 그래픽스 파이프라인 프로세싱부(23)는 오프로드 프로세싱 없이 앞서 설명된 그래픽스 파이프라인(100) 전체를 독자적으로 수행한다.
하지만, 오프로딩 결정부(21)에서 오프로드 프로세싱을 수행하는 것으로 결정된 경우, 오프로딩 결정부(21)는 내부 프로세서(35)로 오프로드 프로세싱의 수행을 제어하는 명령을 전송한다. 이에 따라, 제 1 서브 파이프라인(도 6의 610 또는 도 8의 810)은 내부 프로세서(35)에 의해 오프로도 프로세싱되고, 제 1 서브 파이프라인의 수행 결과(도 5의 520)는 메모리 어레이(31)에 저장된다. 그리고 나서, 그래픽스 파이프라인 프로세싱부(23)는 메모리 어레이(31)로부터 제 1 서브 파이프라인의 수행 결과(도 5의 520)를 수신하고, 수신된 제 1 서브 파이프라인의 수행 결과를 이용하여 제 2 서브 파이프라인(도 6의 620 또는 도 8의 820)을 수행한다. 이때, 그래픽스 파이프라인 프로세싱부(23)는 제 2 서브 파이프라인(도 6의 620 또는 도 8의 820)의 그래픽스 데이터는 메모리 어레이(31)로부터 수신한다.
즉, 도 11에 도시된 호스트 프로세서(GPU)(20) 및 메모리 디바이스(30)는 앞서 도면들에서 설명된 오프로드 프로세싱을 수행할 수 있다.
도 12는 일 실시예에 따른 호스트 프로세서(GPU)에서 타일-기반 렌더링의 그래픽스 파이프라인을 수행하는 방법의 흐름도이다. 도 12에 도시된, 그래픽스 파이프라인(100)의 수행 방법은, 앞서 설명된 도면들에서 설명된 실시예들에 관련되므로, 이하 생략된 내용이라 할지라도, 앞서 도면들에서 설명된 내용들은 도 12의 방법에도 적용될 수 있다.
1201 단계에서, 호스트 프로세서(20)의 오프로딩 결정부(21)는 메모리 디바이스(30) 내에 구비된 내부 프로세서(35)에서, 타일-기반 렌더링의 그래픽스 파이프라인(100)에 포함된 제 1 서브 파이프라인(도 6의 610 또는 도 8의 810)의 오프로드 프로세싱을 수행할 것인지 여부를 결정한다.
1202 단계에서, 호스트 프로세서(20)의 그래픽스 파이프라인 프로세싱부(23)는 내부 프로세서(35)에서 오프로드 프로세싱을 수행하는 것으로 결정된 경우, 오프로드 프로세싱에 따른 제 1 서브 파이프라인의 수행 결과를 수신하여 제 1 서브 파이프라인에 뒤이어 처리될 제 2 서브 파이프라인(도 6의 620 또는 도 8의 820)을 수행한다.
한편, 본 실시예들에 따른 장치는 프로세서, 프로그램 데이터를 저장하고 실행하는 메모리, 디스크 드라이브와 같은 영구 저장부(permanent storage), 외부 장치와 통신하는 통신 포트, 터치 패널, 키(key), 버튼 등과 같은 사용자 인터페이스 장치 등을 포함할 수 있다. 소프트웨어 모듈 또는 알고리즘으로 구현되는 방법들은 상기 프로세서상에서 실행 가능한 컴퓨터가 읽을 수 있는 코드들 또는 프로그램 명령들로서 컴퓨터가 읽을 수 있는 기록 매체 상에 저장될 수 있다. 여기서 컴퓨터가 읽을 수 있는 기록 매체로 마그네틱 저장 매체(예컨대, ROM(read-only memory), RAM(random-access memory), 플로피 디스크, 하드 디스크 등) 및 광학적 판독 매체(예컨대, 시디롬(CD-ROM), 디브이디(DVD: Digital Versatile Disc)) 등이 있다. 컴퓨터가 읽을 수 있는 기록 매체는 네트워크로 연결된 컴퓨터 시스템들에 분산되어, 분산 방식으로 컴퓨터가 판독 가능한 코드가 저장되고 실행될 수 있다. 매체는 컴퓨터에 의해 판독가능하며, 메모리에 저장되고, 프로세서에서 실행될 수 있다.
본 실시예는 기능적인 블록 구성들 및 다양한 처리 단계들로 나타내어질 수 있다. 이러한 기능 블록들은 특정 기능들을 실행하는 다양한 개수의 하드웨어 또는/및 소프트웨어 구성들로 구현될 수 있다. 예를 들어, 실시 예는 하나 이상의 마이크로프로세서들의 제어 또는 다른 제어 장치들에 의해서 다양한 기능들을 실행할 수 있는, 메모리, 프로세싱, 로직(logic), 룩 업 테이블(look-up table) 등과 같은 직접 회로 구성들을 채용할 수 있다. 구성 요소들이 소프트웨어 프로그래밍 또는 소프트웨어 요소들로 실행될 수 있는 것과 유사하게, 본 실시예는 데이터 구조, 프로세스들, 루틴들 또는 다른 프로그래밍 구성들의 조합으로 구현되는 다양한 알고리즘을 포함하여, C, C++, 자바(Java), 어셈블러(assembler) 등과 같은 프로그래밍 또는 스크립팅 언어로 구현될 수 있다. 기능적인 측면들은 하나 이상의 프로세서들에서 실행되는 알고리즘으로 구현될 수 있다. 또한, 본 실시예는 전자적인 환경 설정, 신호 처리, 및/또는 데이터 처리 등을 위하여 종래 기술을 채용할 수 있다. “매커니즘”, “요소”, “수단”, “구성”과 같은 용어는 넓게 사용될 수 있으며, 기계적이고 물리적인 구성들로서 한정되는 것은 아니다. 상기 용어는 프로세서 등과 연계하여 소프트웨어의 일련의 처리들(routines)의 의미를 포함할 수 있다.
본 실시예에서 설명하는 특정 실행들은 예시들로서, 어떠한 방법으로도 기술적 범위를 한정하는 것은 아니다. 명세서의 간결함을 위하여, 종래 전자적인 구성들, 제어 시스템들, 소프트웨어, 상기 시스템들의 다른 기능적인 측면들의 기재는 생략될 수 있다. 또한, 도면에 도시된 구성 요소들 간의 선들의 연결 또는 연결 부재들은 기능적인 연결 및/또는 물리적 또는 회로적 연결들을 예시적으로 나타낸 것으로서, 실제 장치에서는 대체 가능하거나 추가의 다양한 기능적인 연결, 물리적인 연결, 또는 회로 연결들로서 나타내어질 수 있다.
본 명세서(특히 특허청구범위에서)에서 “상기”의 용어 및 이와 유사한 지시 용어의 사용은 단수 및 복수 모두에 해당하는 것일 수 있다. 또한, 범위(range)를 기재한 경우 상기 범위에 속하는 개별적인 값을 포함하는 것으로서(이에 반하는 기재가 없다면), 상세한 설명에 상기 범위를 구성하는 각 개별적인 값을 기재한 것과 같다. 마지막으로, 방법을 구성하는 단계들에 대하여 명백하게 순서를 기재하거나 반하는 기재가 없다면, 상기 단계들은 적당한 순서로 행해질 수 있다. 반드시 상기 단계들의 기재 순서에 한정되는 것은 아니다.
이제까지 본 발명에 대하여 그 바람직한 실시예들을 중심으로 살펴보았다. 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자는 본 발명이 본 발명의 본질적인 특성에서 벗어나지 않는 범위에서 변형된 형태로 구현될 수 있음을 이해할 수 있을 것이다. 그러므로 개시된 실시예들은 한정적인 관점이 아니라 설명적인 관점에서 고려되어야 한다. 본 발명의 범위는 전술한 설명이 아니라 특허청구범위에 나타나 있으며, 그와 동등한 범위 내에 있는 모든 차이점은 본 발명에 포함된 것으로 해석되어야 할 것이다.

Claims (22)

  1. 타일-기반 렌더링의 그래픽스 파이프라인에 포함된 제 1 서브 파이프라인의 오프로드 프로세싱을 위해, 메모리 어레이에 저장된 그래픽스 데이터를 이용하여 상기 제 1 서브 파이프라인을 수행하는 내부 프로세서를 구비한 메모리 디바이스; 및
    상기 내부 프로세서에 의한 상기 제 1 서브 파이프라인의 수행이 완료됨에 따라 상기 메모리 어레이에 저장된 상기 제 1 서브 파이프라인의 수행 결과를 이용하여, 상기 제 1 서브 파이프라인에 뒤이어 처리될 제 2 서브 파이프라인을 수행하는 호스트 프로세서를 포함하는, 컴퓨팅 시스템.
  2. 제 1 항에 있어서,
    상기 제 1 서브 파이프라인은
    각각의 타일에 대응되는 프리미티브 리스트에 관한 정보를 생성하는 비닝(binning) 파이프라인을 포함하는, 컴퓨팅 시스템.
  3. 제 1 항에 있어서,
    상기 메모리 어레이는
    상기 제 1 서브 파이프라인의 수행 결과로서, 각각의 타일에 대응되는 프리미티브 리스트에 관한 정보를 저장하는, 컴퓨팅 시스템.
  4. 제 3 항에 있어서,
    상기 제 2 서브 파이프라인은
    상기 메모리 어레이로부터 상기 저장된 프리미티브 리스트에 관한 정보를 리드(read)하여 타일 별로 렌더링을 수행하는 렌더링 파이프라인을 포함하는, 컴퓨팅 시스템.
  5. 제 1 항에 있어서,
    상기 호스트 프로세서는
    GPU(graphic processing unit)이고,
    상기 내부 프로세서는
    PIM(processor in memory)인, 컴퓨팅 시스템.
  6. 제 1 항에 있어서,
    상기 제 1 서브 파이프라인은
    입력된 드로우콜들(drawcalls)에 기초하여 버텍스들의 데이터를 제공하는 입력 어셈블러(input assembler) 스테이지인, 컴퓨팅 시스템.
  7. 제 6 항에 있어서,
    상기 제 2 서브 파이프라인은
    상기 입력 어셈블러 스테이지를 제외한 비닝 파이프라인의 나머지 스테이지들 및 렌더링 파이프라인을 포함하는, 컴퓨팅 시스템.
  8. 제 6 항에 있어서,
    상기 제 1 서브 파이프라인이 상기 입력 어셈블러 스테이지인 경우, 상기 오프로드 프로세싱의 수행 여부는 버텍스 캐시(vertex cache)의 효율에 기초하여 판단되는, 컴퓨팅 시스템.
  9. 컴퓨팅 시스템에서 타일-기반 렌더링의 그래픽스 파이프라인을 수행하는 방법에 있어서,
    상기 그래픽스 파이프라인에 포함된 제 1 서브 파이프라인의 오프로드 프로세싱을 위하여, 메모리 디바이스에 구비된 내부 프로세서에서, 메모리 어레이에 저장된 그래픽스 데이터를 이용하여 상기 제 1 서브 파이프라인을 수행하는 단계;
    상기 내부 프로세서에 의한 상기 제 1 서브 파이프라인의 수행이 완료된 경우, 상기 제 1 서브 파이프라인의 수행 결과를 상기 메모리 어레이에 저장하는 단계; 및
    상기 저장된 제 1 서브 파이프라인의 수행 결과를 이용하여, 상기 제 1 서브 파이프라인에 뒤이어 처리될 제 2 서브 파이프라인을 호스트 프로세서에서 수행하는 단계를 포함하는, 방법.
  10. 제 9 항에 있어서,
    상기 제 1 서브 파이프라인은
    각각의 타일에 대응되는 프리미티브 리스트에 관한 정보를 생성하는 비닝(binning) 파이프라인을 포함하는, 방법.
  11. 제 9 항에 있어서,
    상기 저장하는 단계는
    상기 제 1 서브 파이프라인의 수행 결과로서, 각각의 타일에 대응되는 프리미티브 리스트에 관한 정보를 저장하는, 방법.
  12. 제 11 항에 있어서,
    상기 제 2 서브 파이프라인은
    상기 메모리 어레이로부터 상기 저장된 프리미티브 리스트에 관한 정보를 리드(read)하여 타일 별로 렌더링을 수행하는 렌더링 파이프라인을 포함하는, 방법.
  13. 제 9 항에 있어서,
    상기 제 1 서브 파이프라인은
    입력된 드로우콜들(drawcalls)에 기초하여 버텍스들의 데이터를 제공하는 입력 어셈블러(input assembler) 스테이지인, 방법.
  14. 제 13 항에 있어서,
    상기 제 2 서브 파이프라인은
    상기 입력 어셈블러 스테이지를 제외한 비닝 파이프라인의 나머지 스테이지들 및 렌더링 파이프라인을 포함하는, 방법.
  15. 제 13 항에 있어서,
    상기 제 1 서브 파이프라인이 상기 입력 어셈블러 스테이지인 경우, 상기 오프로드 프로세싱의 수행 여부는 버텍스 캐시(vertex cache)의 효율에 기초하여 판단되는, 방법.
  16. 타일-기반 렌더링의 그래픽스 파이프라인에 포함된 제 1 서브 파이프라인을 메모리 디바이스 내에 구비된 내부 프로세서에서 수행하는 오프로드 프로세싱을 수행할 것인지 여부를 결정하는 오프로딩 결정부; 및
    상기 오프로드 프로세싱을 수행하는 것으로 결정된 경우, 상기 오프로드 프로세싱에 따른 상기 제 1 서브 파이프라인의 수행 결과를 수신하여 상기 제 1 서브 파이프라인 이후 처리되는 제 2 서브 파이프라인을 수행하는 그래픽스 파이프라인 프로세싱부를 포함하는, 호스트 프로세서.
  17. 제 16 항에 있어서,
    상기 제 1 서브 파이프라인은
    각각의 타일에 대응되는 프리미티브 리스트에 관한 정보를 생성하는 비닝(binning) 파이프라인을 포함하는, 호스트 프로세서.
  18. 제 17 항에 있어서,
    상기 제 2 서브 파이프라인은
    상기 메모리 디바이스 내에 구비된 메모리 어레이로부터 상기 프리미티브 리스트에 관한 정보를 리드(read)하여 타일 별로 렌더링을 수행하는 렌더링 파이프라인을 포함하는, 호스트 프로세서.
  19. 제 16 항에 있어서,
    상기 제 1 서브 파이프라인은
    입력된 드로우콜들(drawcalls)에 기초하여 버텍스들의 데이터를 제공하는 입력 어셈블러(input assembler) 스테이지인, 호스트 프로세서.
  20. 제 19 항에 있어서,
    상기 제 2 서브 파이프라인은
    상기 입력 어셈블러 스테이지를 제외한 비닝 파이프라인의 나머지 스테이지들 및 렌더링 파이프라인을 포함하는, 호스트 프로세서.
  21. 제 19 항에 있어서,
    상기 오프로딩 결정부는
    상기 제 1 서브 파이프라인이 상기 입력 어셈블러 스테이지인 경우, 버텍스 캐시(vertex cache)의 효율에 기초하여 상기 오프로드 프로세싱을 수행할 것인지 여부를 결정하는, 호스트 프로세서.
  22. 제 16 항에 있어서,
    상기 오프로딩 결정부는
    상기 오프로드 프로세싱을 수행하는 것으로 결정된 경우, 상기 내부 프로세서로 상기 오프로드 프로세싱의 수행을 제어하는 명령을 전송하는, 호스트 프로세서.
KR1020160008906A 2016-01-25 2016-01-25 컴퓨팅 시스템 및 컴퓨팅 시스템에서 타일-기반 렌더링의 그래픽스 파이프라인을 수행하는 방법 KR102521654B1 (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020160008906A KR102521654B1 (ko) 2016-01-25 2016-01-25 컴퓨팅 시스템 및 컴퓨팅 시스템에서 타일-기반 렌더링의 그래픽스 파이프라인을 수행하는 방법
US15/407,980 US10332231B2 (en) 2016-01-25 2017-01-17 Computing system and method of performing tile-based rendering of graphics pipeline

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020160008906A KR102521654B1 (ko) 2016-01-25 2016-01-25 컴퓨팅 시스템 및 컴퓨팅 시스템에서 타일-기반 렌더링의 그래픽스 파이프라인을 수행하는 방법

Publications (2)

Publication Number Publication Date
KR20170088687A true KR20170088687A (ko) 2017-08-02
KR102521654B1 KR102521654B1 (ko) 2023-04-13

Family

ID=59360743

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020160008906A KR102521654B1 (ko) 2016-01-25 2016-01-25 컴퓨팅 시스템 및 컴퓨팅 시스템에서 타일-기반 렌더링의 그래픽스 파이프라인을 수행하는 방법

Country Status (2)

Country Link
US (1) US10332231B2 (ko)
KR (1) KR102521654B1 (ko)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20180038793A (ko) * 2016-10-07 2018-04-17 삼성전자주식회사 영상 데이터 처리 방법 및 장치
GB2556634B (en) * 2016-11-18 2020-05-27 Advanced Risc Mach Ltd Graphics processing systems
US11403102B2 (en) * 2020-06-27 2022-08-02 Intel Corporation Technology to learn and offload common patterns of memory access and computation
US11443404B1 (en) * 2021-05-28 2022-09-13 Bidstack Group PLC Viewability testing in a computer-generated environment
US20220410002A1 (en) * 2021-06-29 2022-12-29 Bidstack Group PLC Mesh processing for viewability testing

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20010085426A (ko) * 1998-08-20 2001-09-07 알버트 피. 세팔로 개선된 지연 쉐이딩 그래픽 파이프라인 프로세서
KR20100089896A (ko) * 2007-11-30 2010-08-12 콸콤 인코포레이티드 그래픽 시스템에서 2차 프로세서를 이용하기 위한 시스템 및 방법
US8547385B2 (en) * 2010-10-15 2013-10-01 Via Technologies, Inc. Systems and methods for performing shared memory accesses
KR20140063429A (ko) * 2012-11-16 2014-05-27 에이알엠 리미티드 그래픽 처리 방법 및 장치
KR20140133067A (ko) * 2013-05-09 2014-11-19 삼성전자주식회사 그래픽 프로세싱 유닛, 이를 포함하는 그래픽 프로세싱 시스템, 및 이를 이용한 렌더링 방법
KR20160004963A (ko) * 2014-07-03 2016-01-13 에이알엠 리미티드 그래픽 처리

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9324175B2 (en) 2009-09-11 2016-04-26 Nvidia Corporation Memory coherency in graphics command streams and shaders
US9208602B2 (en) 2013-09-27 2015-12-08 Intel Corporation Techniques and architecture for improved vertex processing
US9483862B2 (en) 2013-12-20 2016-11-01 Qualcomm Incorporated GPU-accelerated path rendering
US9836277B2 (en) * 2014-10-01 2017-12-05 Samsung Electronics Co., Ltd. In-memory popcount support for real time analytics

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20010085426A (ko) * 1998-08-20 2001-09-07 알버트 피. 세팔로 개선된 지연 쉐이딩 그래픽 파이프라인 프로세서
KR20100089896A (ko) * 2007-11-30 2010-08-12 콸콤 인코포레이티드 그래픽 시스템에서 2차 프로세서를 이용하기 위한 시스템 및 방법
US8547385B2 (en) * 2010-10-15 2013-10-01 Via Technologies, Inc. Systems and methods for performing shared memory accesses
KR20140063429A (ko) * 2012-11-16 2014-05-27 에이알엠 리미티드 그래픽 처리 방법 및 장치
KR20140133067A (ko) * 2013-05-09 2014-11-19 삼성전자주식회사 그래픽 프로세싱 유닛, 이를 포함하는 그래픽 프로세싱 시스템, 및 이를 이용한 렌더링 방법
KR20160004963A (ko) * 2014-07-03 2016-01-13 에이알엠 리미티드 그래픽 처리

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Junwhan Ahn 외."PIM-enabled instructions: A low-overhead, locality-aware processing-in-memory architecture".2015 ACM/IEEE 42nd ISCA,2015.06.13.,(제336면 내지 제348면),<doi:10.1145/2749469.2750385>* *

Also Published As

Publication number Publication date
US10332231B2 (en) 2019-06-25
US20170213312A1 (en) 2017-07-27
KR102521654B1 (ko) 2023-04-13

Similar Documents

Publication Publication Date Title
US8421794B2 (en) Processor with adaptive multi-shader
US8670613B2 (en) Lossless frame buffer color compression
US10297003B2 (en) Efficient saving and restoring of context information for context switches
JP4938850B2 (ja) 拡張型頂点キャッシュを備えたグラフィック処理装置
US10055883B2 (en) Frustum tests for sub-pixel shadows
US9224227B2 (en) Tile shader for screen space, a method of rendering and a graphics processing unit employing the tile shader
EP3353746B1 (en) Dynamically switching between late depth testing and conservative depth testing
TWI786233B (zh) 關於以微磚為基礎之低解析度深度儲存之方法、器件與非暫時性電腦可讀儲存媒體
EP3350766B1 (en) Storing bandwidth-compressed graphics data
US11373268B2 (en) Apparatus and method for graphics processing unit hybrid rendering
KR102521654B1 (ko) 컴퓨팅 시스템 및 컴퓨팅 시스템에서 타일-기반 렌더링의 그래픽스 파이프라인을 수행하는 방법
KR20180055446A (ko) 타일 기반 렌더링 방법 및 장치
KR20170058113A (ko) 그래픽 프로세싱 장치 및 그래픽 프로세싱 장치에서 그래픽스 파이프라인을 수행하는 방법
EP3427229B1 (en) Visibility information modification
CN111080505B (zh) 一种提高图元装配效率的方法、装置及计算机存储介质
US10262391B2 (en) Graphics processing devices and graphics processing methods
CN116529772A (zh) 经压缩的几何形状渲染与流式传输
TW202137141A (zh) 用於邊緣壓縮抗混疊的方法和裝置
US10311627B2 (en) Graphics processing apparatus and method of processing graphics pipeline thereof
CN117616446A (zh) 基于图块的架构中的深度和阴影通道渲染的优化

Legal Events

Date Code Title Description
E701 Decision to grant or registration of patent right
GRNT Written decision to grant