KR20200083025A - 런타임 수행특성을 도출하는 그래픽스 프로세싱 유닛 및 이의 동작방법 - Google Patents

런타임 수행특성을 도출하는 그래픽스 프로세싱 유닛 및 이의 동작방법 Download PDF

Info

Publication number
KR20200083025A
KR20200083025A KR1020180174223A KR20180174223A KR20200083025A KR 20200083025 A KR20200083025 A KR 20200083025A KR 1020180174223 A KR1020180174223 A KR 1020180174223A KR 20180174223 A KR20180174223 A KR 20180174223A KR 20200083025 A KR20200083025 A KR 20200083025A
Authority
KR
South Korea
Prior art keywords
code
monitor
shader program
performance characteristics
program
Prior art date
Application number
KR1020180174223A
Other languages
English (en)
Other versions
KR102683415B1 (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 KR1020180174223A priority Critical patent/KR102683415B1/ko
Priority to US16/529,926 priority patent/US11126535B2/en
Priority to CN201911424625.XA priority patent/CN111383164A/zh
Publication of KR20200083025A publication Critical patent/KR20200083025A/ko
Application granted granted Critical
Publication of KR102683415B1 publication Critical patent/KR102683415B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3624Software debugging by performing operations on the source code, e.g. via a compiler
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/302Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3409Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3612Software analysis for verifying properties of programs by runtime analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • 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
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/835Timestamp
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)
  • Computer Graphics (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

그래픽스 프로세싱 유닛의 런타임 수행특성 도출방법 및 이를 수행하는 컴퓨팅 시스템이 개시된다. 본 개시의 예시적 실시 예에 따른 컴퓨팅 시스템은, 쉐이더 프로그램을 저장하도록 구성된 메모리; 및 상기 메모리와 결합되고, 프로파일 모드에서 상기 쉐이더 프로그램을 수신하도록 구성된 그래픽스 프로세싱 유닛으로서, 상기 쉐이더 프로그램에, 상기 쉐이더 프로그램의 런타임 수행 특성을 모니터링 하기 위한 하나 이상의 모니터 연관 코드를 삽입하는 단계; 상기 하나 이상의 모니터 연관 코드가 삽입된 쉐이더 프로그램을 복수의 코어들에서 수행 가능한 언어로 컴파일하는 단계; 및 상기 컴파일 된 쉐이더 프로그램 및 상기 하나 이상의 모니터 연관 코드를 수행함으로써 상기 쉐이더 프로그램의 수행에 따른 런타임 수행 특성을 도출하는 단계를 수행하도록 구성된 그래픽스 프로세싱 유닛을 포함할 수 있다.

Description

런타임 수행특성을 도출하는 그래픽스 프로세싱 유닛 및 이의 동작방법{GRAPHICS PROCESSING UNIT FOR DERIVING RUNTIME PERFORMANCE CHARACTERISTIC AND OPERATION METHOD THEREOF}
본 개시의 기술적 사상은 그래픽스 프로세싱 유닛에 관한 것으로서, 상세하게는 런타임 수행 특성을 도출하는 그래픽스 프로세싱 유닛 및 이의 동작방법에 관한 것이다.
그래픽스 프로세싱 유닛(Graphics Processing Unit, 이하 GPU)은 OpenGL, OpenCL 또는 Vulkan 등의 그래픽스 API(Application Programming Interface)를 처리함으로써 각종 전자장치에서 다양한 그래픽스 효과를 구현할 수 있다. GPU에서 프로그램이 처리되기 위해서는 프로그램이 표준 API의 정해진 규칙에 따라 작성되어야 한다. GPU에서 처리되는 프로그램은, 이미지 생성에 필수적인 버텍스 쉐이더(vertex shader), 지오메트리 쉐이더(geometry shader) 및 픽셀 쉐이더(pixel shader)를 포함할 수 있다.
버텍스 쉐이더, 지오메트리 쉐이더 및 픽셀 쉐이더는 컴파일(compile) 및 링크(link)되어 프로그램에 사용된다. GPU는 다수의 코어들(또는 다수의 쓰레드들(threads)로서, 예를 들어 SIMD(Single Instruction Multiple Data) 형태로 프로그램을 병렬적으로 실행한다. 이 경우, GPU에서 개별 쉐이더 프로그램의 런타임(run-time) 특성의 모니터링이 용이하지 않을 수 있다.
본 개시의 기술적 사상은 그래픽스 프로세싱 유닛의 런타임 수행특성 도출방법에 관한 것으로서, 컴파일 시 모니터 연관 코드를 삽입하는 컴파일러를 포함하는 그래픽스 프로세싱 유닛 및 이의 동작방법을 제공한다.
상기와 같은 목적을 달성하기 위하여, 본 개시의 기술적 사상의 일 측면에 따른 컴퓨팅 시스템은, 쉐이더 프로그램을 저장하도록 구성된 메모리; 및 상기 메모리와 결합되고, 프로파일 모드에서 상기 쉐이더 프로그램을 수신하도록 구성된 그래픽스 프로세싱 유닛으로서, 상기 쉐이더 프로그램에, 상기 쉐이더 프로그램의 런타임 수행 특성을 모니터링 하기 위한 하나 이상의 모니터 연관 코드를 삽입하는 단계; 상기 하나 이상의 모니터 연관 코드가 삽입된 쉐이더 프로그램을 복수의 코어들에서 수행 가능한 언어로 컴파일하는 단계; 및 상기 컴파일 된 쉐이더 프로그램 및 상기 하나 이상의 모니터 연관 코드를 수행함으로써 상기 쉐이더 프로그램의 수행에 따른 런타임 수행 특성을 도출하는 단계를 수행하도록 구성된 그래픽스 프로세싱 유닛을 포함할 수 있다.
한편, 본 개시의 기술적 사상의 다른 일 측면에 따른 컴퓨팅 시스템의 동작방법은, 그래픽스 커맨드를 포함하는 프로파일 커맨드에 응답하여, 복수의 코드 블록들을 포함하는 쉐이더 프로그램을 출력하는 단계; 상기 복수의 코드 블록들 중 적어도 일부 코드 블록들 각각에, 런타임 수행 특성을 모니터링 하도록 구성된 모니터 연관 코드를 삽입하는 단계; 상기 쉐이더 프로그램을 컴파일 하는 단계; 복수의 코어들로써, 상기 복수의 코드 블록들 및 상기 모니터 연관 코드를 수행함으로써 상기 쉐이더 프로그램의 런타임 수행 특성을 도출하는 단계; 상기 복수의 코어들이 공유하는 메모리에, 상기 도출된 쉐이더 프로그램의 런타임 수행 특성을 기록하는 단계; 및 상기 쉐이더 프로그램의 수행이 종료됨에 응답하여 상기 기록된 쉐이더 프로그램의 런타임 수행 특성을 출력하는 단계를 포함할 수 있다.
한편, 본 개시의 기술적 사상의 또 다른 일 측면에 따른 그래픽스 프로세싱 유닛은, 프로파일 모드에서, 복수의 코드 블록들을 포함하는 프로그램을 수신하고, 상기 복수의 코드 블록들 중 적어도 일부의 코드 블록들 각각에, 런타임 수행 특성을 모니터링 하기 위한 모니터 연관 코드를 삽입하는 모니터 연관 코드 삽입기를 포함하고, 상기 모니터 연관 코드 및 상기 프로그램을 컴파일하는 컴파일러; 상기 컴파일 된 프로그램 및 모니터 연관 코드를 병렬적으로 수행하고, 상기 모니터 연관 코드를 수행함에 따라 상기 프로그램의 런타임 수행 특성을 도출하는 복수의 코어들; 및 상기 도출된 상기 프로그램의 런타임 수행 특성을 저장하는 공유 메모리를 포함할 수 있다.
본 개시의 기술적 사상에 따른 그래픽 프로세싱 유닛은, 컴파일 시 모니터 연관 회로를 삽입함으로써, 프로그램을 병렬적으로 수행하는 그래픽 프로세싱 유닛에서의 런타임 수행 특성을 용이하게 모니터링 할 수 있다. 또한, 본 개시의 기술적 사상에 따른 그래픽 프로세싱 유닛을 포함하는 컴퓨팅 시스템은, 실제 프로그램 구동 환경에서의 런타임 수행 특성을 도출하고 이에 기반한 성능 분석을 수행함으로써, 향상된 정확도를 갖는 프로파일링을 수행할 수 있다. 또한, 본 개시의 기술적 사상에 따른 모니터링 동작은, 실제 쉐이더 프로그램의 수행에 있어 공유 자원 대기 등으로 낭비되는 시간 중에 수행됨에 따라, 비교적 빠른 속도로 쉐이더 프로그램에 대한 프로파일이 진행될 수 있다.
도 1은 본 개시의 예시적 실시 예에 따른 컴퓨팅 시스템(10)을 나타내는 블록도이다.
도 2는 본 개시의 예시적 실시 예에 따른 프로파일 모드에서의 동작을 설명하기 위한 블록도이다.
도 3은 본 개시의 예시적 실시 예에 따라 프로파일 모드에서 컴퓨팅 시스템의 동작 방법을 나타내는 순서도이다.
도 4는 본 개시의 예시적 실시 예에 따른 컴파일러의 동작 방법을 나타내는 순서도이다.
도 5는 본 개시의 예시적 실시 예에 따른 모니터 연관 코드 삽입을 설명하기 위한 도면이다.
도 6은 본 개시의 예시적 실시 예에 따른 모니터링 동작을 설명하기 위한 도면이다.
도 7은 본 개시의 예시적 실시 예에 따라 모니터 코드가 삽입된 코드 블록의 동작을 나타내는 순서도이다.
도 8은 본 개시의 다른 예시적 실시 예에 따른 모니터링 동작을 설명하기 위한 도면이다.
도 9는 본 개시의 예시적 실시 예에 따른 런타임 수행 특성 리스트를 설명하는 도면이다.
도 10은 본 개시의 다른 예시적 실시 예에 따른 모니터링 동작을 설명하기 위한 도면이다.
도 11은 본 개시의 다른 예시적 실시 예에 따른 프로파일 모드에서의 동작을 설명하기 위한 블록도이다
도 12는 본 개시의 예시적 실시 예에 따른 그래픽스 프로세서를 나타내는 블록도이다.
이하, 첨부한 도면을 참조하여 본 발명의 실시 예에 대해 상세히 설명한다.
도 1은 본 개시의 예시적 실시 예에 따른 컴퓨팅 시스템(10)을 나타내는 블록도이다. 도 1을 참조하면, 컴퓨팅 시스템(10)은 프로세서(100), 그래픽스 프로세싱 유닛(GPU)(200) 및 시스템 메모리(300)를 포함할 수 있다. 도 1에 도시되지는 않았으나, 컴퓨팅 시스템(10)은 디스플레이, 입출력 인터페이스, 시스템 버스 등을 더 포함할 수 있다.
컴퓨팅 시스템(10)은 그래픽스 프로세싱 유닛(GPU)(200)을 포함하는 임의의 컴퓨팅 시스템을 지칭할 수 있다. 컴퓨팅 시스템(10)은, 비제한적인 예시로서, 데스크탑 컴퓨터, 서버, 텔레비전 셋탑 박스, 비디오 게임용 콘솔 등과 같은 고정형 컴퓨팅 시스템일 수도 있고, 랩탑 컴퓨터, 모바일 폰, 웨어러블 기기, 휴대형 미디어 플레이어, 태블릿 PC, e-book 리더 등과 같은 휴대형 컴퓨팅 시스템일 수도 있다.
프로세서(100)는 외부로부터 사용자 입력을 수신할 수 있다. 또한, 프로세서(100)는, 시스템 메모리(300)에 저장된 일련의 명령어들(또는 프로그램)을 실행할 수 있고, 시스템 메모리(300)에 저장된 데이터를 처리할 수 있으며, 그래픽스 파이프라인에서 특정 작업을 그래픽스 프로세싱 유닛(200)이 수행하도록 할 수도 있다. 일부 실시 예들에서, 프로세서(100)는 2 이상의 코어를 포함할 수 있다.
일부 실시 예들에서, 프로세서(100) 및 그래픽스 프로세싱 유닛(200)은 집적 회로(Integrated Circuit, IC)로 형성될 수 있다. 예를 들어, 집적 회로는 칩 패키지 내의 프로세싱 칩, 또는 시스템 온 칩(System on Chip, SoC)의 적어도 일부일 수 있다. 일 예로, 프로세서(100) 및 그래픽스 프로세싱 유닛(200)은 상이한 집적 회로(또는, 상이한 칩 패키지)에 구현될 수 있다. 다른 예로, 프로세서(100) 및 그래픽스 프로세싱 유닛(200)은 단일 집적 회로(또는, 단일 칩 패키지)에 구현될 수도 있다.
시스템 메모리(300)는 하나 이상의 컴퓨터 판독 가능 저장 매체(computer-readable storage media)를 포함할 수 있다. 시스템 메모리(300)는 명령어 및/또는 데이터 구조의 형태로 원하는 프로그램 코드를 운반 또는 저장하는데 사용될 수 있고, 프로세서(100) 또는 그래픽스 프로세싱 유닛(200)에 의해 액세스될 수 있는 임의의 매체들을 포함할 수 있다. 예를 들어, 시스템 메모리(300)는, 일부 실시 예들에서 DRAM(Dynamic Random Access Memory), SRAM(Static Random Access Memory), 모바일 DRAM, DDR SDRAM(Double Data Rate Synchronous Dynamic Random Access Memory), LPDDR (Low Power DDR) SDRAM, GDDR (Graphic DDR) SDRAM, RDRAM(Rambus Dynamic Random Access Memory) 등과 같은 휘발성(volatile) 메모리를 포함할 수도 있고, 일부 실시예들에서 EEPROM (non-volatile memory such as a Electrically Erasable Programmable Read-Only Memory), 플래시 메모리(flash memory), PRAM(Phase Change Random Access Memory), RRAM(Resistance Random Access Memory), NFGM (Nano Floating Gate Memory), PoRAM(Polymer Random Access Memory), MRAM (Magnetic Random Access Memory), FRAM(Ferroelectric Random Access Memory) 등과 같은 비휘발성(nonvolatile) 메모리를 포함할 수도 있다.
일부 실시 예들에서, 시스템 메모리(300)는 비-일시적인(non-transitory) 저장 매체일 수 있다. "비-일시적" 기재는 저장 매체가 반송파(carrier wave) 또는 전파된 신호(propagated signal)로 구현되지 않았음을 의미할 수 있다. 다만, "비-일시적" 기재는 시스템 메모리(300)가 움직이지 않거나 저장된 내용이 정적임을 의미하지 않는다. 일 예로, 시스템 메모리(300)는 컴퓨팅 시스템(10)으로부터 제거되고 다른 시스템(또는 장치)로 이동될 수 있다.
시스템 메모리(300)는 어플리케이션 프로그램(310) 및 API(Application Program Interface)(320)를 포함할 수 있다. 어플리케이션 프로그램(310)은, 예컨대 그래픽스 이미지들의 시퀀스의 형태로, 원하는 결과들을 생성하기 위하여 API(320)에 대한 호출들(calls)을 생성할 수 있다.
어플리케이션 프로그램(310)은 프로세서(100)에서 구동되고, 프로세서(100)는 필요에 따라 어플리케이션 프로그램(310) 관련 일부 작업(task)을 그래픽스 프로세싱 유닛(200)으로 분담(off load)할 수 있다. 예를 들어, 프로세서(100)는 방대한 병렬 연산이 요구되는 작업(예를 들어, 그래픽 처리 작업)을 그래픽스 프로세싱 유닛(200)으로 분담할 수 있다.
프로세서(100)는 작업 분담 시 API(320)에 기반하여 그래픽스 프로세싱 유닛(200)과 통신할 수 있다. 예를 들어, API(320)는 DirectX API, OpenGL API, OpenCL API 및 Vulkan API 중 적어도 하나를 포함할 수 있다. 다른 예에서, 프로세서(100)는 API(320) 외에 다른 임의의 통신 기술을 이용하여 그래픽스 프로세싱 유닛(200)과 통신할 수도 있음을 당업자는 충분히 이해할 것이다.
그래픽스 프로세싱 유닛(200)은 프로세서(100)에 의해 제공된 명령어들을 수신할 수 있고, 다양한 작업에 연관된 병렬 연산을 수행할 수 있다. 그래픽스 프로세싱 유닛(200)은 컴파일러(210) 및 다수의 코어들(220)을 포함할 수 있다. 예를 들어, 그래픽스 프로세싱 유닛(200)은 프로세서(100)로부터 쉐이더 프로그램(shader program)을 수신하고, 컴파일러(210)를 통해 쉐이더 프로그램을 코어들(220)에서 처리 가능한 형태의 언어(예를 들어, 기계어)로 변환할 수 있다. 쉐이더 프로그램은, 객체의 색 변화 등을 생성하는 알고리즘으로서, 그래픽스 프로세싱 유닛(200) 상에서 실행되는 소프트웨어 또는 펌웨어의 단위 또는 형태를 지칭할 수 있다. 예시적 실시 예에 있어서, 쉐이더 프로그램은 복수의 코드 블록들을 포함할 수 있다. 예를 들어, 코드 블록은, 외부 자원에 대한 대기 및/또는 타 코드로의 분기없이 순차적으로 수행되는 코드들의 단위일 수 있다. 이에 대한 자세한 설명은 후술하기로 한다.
예를 들어, 프로세서(100)는 비디오 게임 등 어플리케이션 프로그램을 실행할 수 있고, 이에 따라 그래픽 데이터를 생성할 수 있다. 프로세서(100)는 그래픽스 프로세싱 유닛(200)으로 그래픽 데이터를 출력하고, 그래픽스 프로세싱 유닛(200)은 그래픽스 파이프라인에 따라 그래픽 데이터를 처리할 수 있다. 예를 들어, 그래픽스 프로세싱 유닛(200)은 그래픽 데이터의 처리를 위해 하나 이상의 쉐이더 프로그램을 실행할 수 있다.
이하에서는 쉐이더 프로그램을 중심으로 본 개시의 예시적 실시 예들이 설명되나, 이는 설명의 편의를 위한 것일 뿐 본 개시의 기술적 사상은 쉐이더 프로그램 외 다른 프로그램(예를 들어, 딥-러닝(deep-learning)관련 프로그램, 블록체인(block chain) 관련 프로그램, 범용(general purpose) 컴퓨팅 프로그램)에도 적용됨을 당업자는 이해할 것이다.
예시적 실시 예에 있어서, 그래픽스 프로세싱 유닛(200)은 프로세서(100)의 명령에 기반하여 프로파일 모드(profile mode)로 동작하고, 이에 따라 쉐이더 프로그램의 런타임(runtime) 특성을 측정할 수 있다. 프로파일 모드는, 쉐이더 프로그램 각각의 수행 특성을 도출하고, 이에 기반하여 쉐이더 프로그램의 성능을 알아냄을 목적하는 모드일 수 있다. 예를 들어, 런타임 특성은 실제 쉐이더 프로그램 구동 환경에서 쉐이더 프로그램의 구동 특성으로서, 외부 자원 접근이나 코드의 분기 등이 고려된 특성일 수 있다.
예시적 실시 예에 있어서, 프로파일 모드에서 컴파일러(210)는 쉐이더 프로그램에 포함된 복수의 코드 블록들 중 적어도 일부에 모니터 연관 코드(monitor associative code)를 삽입할 수 있다. 일 예로, 모니터 연관 코드는, 해당 코드 블록의 수행 특성을 모니터링 하는 코드인 모니터 코드일 수 있다. 다른 예로, 모니터 연관 코드는, 코드 블록의 수행 특성을 모니터링 하는 모니터 코드로 분기하도록 하는 분기 코드(branch code)일 수 있다. 예시적 실시 예에 있어서, 모니터 코드는 모니터링 동작을 통해 쉐이더 프로그램 번호, 타임 스탬프, 마스크 수행, 자원 스코어 보드, 분기 조건 달성/미달성, 호출 카운트(invocation count), 요청 자원의 종류, 이용 자원의 종류 등을 도출하고, 이를 메모리(예를 들어, 버퍼)에 저장할 수 있다. 이에 대한 자세한 설명은 후술하기로 한다.
도 2는 본 개시의 예시적 실시 예에 따른 프로파일 모드에서의 동작을 설명하기 위한 블록도이다.
도 2를 참조하면, 프로세서(100)는 쉐이더 프로그램 매니저(Shader Program Manager)(110) 및 성능 분석기(Performance Analyzer)(120)를 포함할 수 있다. 쉐이더 프로그램 매니저(110)는 입력 받은 그래픽스 커맨드에 기반하여 그래픽스 프로세싱 유닛(200)으로 쉐이더 프로그램(SH)을 출력할 수 있다. 일 예로, 쉐이더 프로그램 매니저(110)는 어플리케이션 프로그램(310) 구동 시 요구되는 그래픽스 커맨드를 수신하고, 이에 기반하여 시스템 메모리(300)에 저장된 쉐이더 프로그램을 선택하여 그래픽스 프로세싱 유닛(200)으로 출력할 수 있다.
예시적 실시 예에 있어서, 쉐이더 프로그램 매니저(110)는 프로파일 모드 커맨드(P_CMD)를 수신하고, 이에 기반하여 그래픽스 프로세싱 유닛(200)이 프로파일 모드에서 동작하도록 각종 신호를 출력할 수 있다. 프로파일 모드는, 그래픽스 프로세싱 유닛(200)의 성능 측정을 위한 모드로서, 프로파일 모드 커맨드(P_CMD)는 그래픽스 커맨드를 포함할 수 있다. 쉐이더 프로그램 매니저(110)는 프로파일 모드 커맨드(P_CMD)에 응답하여 쉐이더 프로그램(SH)을 출력하고, 그래픽스 프로세싱 유닛(200)은 쉐이더 프로그램(SH)에 대한 런타임 수행 특성을 모니터링 할 수 있다.
예시적 실시 예에 있어서, 성능 분석기(120)는 그래픽스 프로세싱 유닛(200)으로부터 런타임 수행 특성 리스트(RT_ST)를 수신하고, 이에 기반하여 쉐이더 프로그램들 각각에 대한 성능 데이터(PF)를 추출할 수 있다. 예를 들어, 성능 분석기(120)는 그래픽스 프로세싱 유닛(200)의 공유 메모리(230)에 저장된 각 쉐이더 프로그램에 대한 수행 특성 리스트(RT_ST)를 수신 및 분석할 수 있다. 성능 분석기(120)는 수행 특성 리스트(RT_ST)에 기반하여 쉐이더 프로그램 전체 수행 시간, 쉐이더 프로그램 효율성, 명령 발행-효율성(instruction issue-efficiency) 및 분기점 별 분기 조건 달성 여부에 대한 통계값 중 적어도 하나를 분석할 수 있다.
그래픽스 프로세싱 유닛(200)은 컴파일러(210), 복수의 코어들(220), 공유 메모리(shared memory)(230) 및 타이머(240)를 포함할 수 있다. 컴파일러(210)는, 프로세서(100)로부터 수신한 각종 신호들을 코어들(220)에서 수행 가능한 형태(예를 들어, 기계어 형태)로 변환할 수 있다. 예를 들어, 컴파일러(210)는 쉐이더 프로그램 매니저(110)로부터 수신한 쉐이더 프로그램(SH)을 소스 코드로, 이에 대한 컴파일을 수행함으로써 각 코어에서 실행 가능한 형태의 쉐이더 프로그램을 생성할 수 있다. 예를 들어, 컴파일러(210)는, 복수의 ISA(Instruction Set Architecture)를 이용하여 컴파일을 수행할 수 있다.
컴파일러(210)는 모니터 연관 코드 삽입기(Monitor Associative Code injector)(212)를 포함할 수 있다. 예시적 실시 예에 있어서, 컴파일러(210)는 프로파일 모드에서 컴파일 동작 시, 모니터 연관 코드 삽입기(212)를 통해 쉐이더 프로그램(SH)의 일부에 모니터 연관 코드를 삽입할 수 있다. 일 예로, 모니터 연관 코드 삽입기(212)는 쉐이더 프로그램(SH)에 포함된 코드 블록들 중 적어도 일부에 모니터 연관 코드를 삽입할 수 있다. 모니터 연관 코드 삽입기(212)는, 코드 블록들 중 런타임 수행 특성의 모니터링이 필요한 코드 블록에 모니터 연관 코드를 삽입할 수 있다.
예로써, 모니터 연관 코드 삽입기(212)는 코드 블록의 시작지점 또는 마지막 지점에 모니터 연관 코드를 삽입할 수 있다. 다른 예로, 모니터 연관 코드 삽입기(212)는 조건문(예를 들어, if문) 등 분기 코드(branch code)가 수행된 직후의 모니터링 결과를 얻어올 수 있는 지점에 모니터 연관 코드를 삽입할 수 있다. 또 다른 예로, 모니터 연관 코드 삽입기(212)는 외부 자원에 접근하는 지점에 모니터 연관 코드를 삽입할 수 있다.
예시적 실시 예에 있어서, 모니터 연관 코드는, 모니터 연관 코드가 포함된 코드 블록의 수행 특성을 직접 모니터링 하고 이를 공유 메모리(230)에 기록하는 코드인 모니터 코드를 포함할 수 있다. 예를 들어, 모니터 연관 코드 삽입기(212)는 모니터링을 위한 코드 수가 비교적 적은 경우, 코드 블록에 모니터 연관 코드로서 모니터 코드를 삽입할 수 있다. 다만, 이에 한정되는 것은 아니다.
다른 예시적 실시 예에 있어서, 모니터 연관 코드는, 코드 블록의 수행 특성을 모니터링 하고 이를 공유 메모리(230)에 기록하는 모니터 코드로 분기하도록 명령하는 분기 코드일 수 있다. 예를 들어, 모니터 연관 코드 삽입기(212)는 모니터링을 위한 코드 수가 비교적 많은 경우, 코드 블록에 모니터 연관 코드로서 분기 코드를 삽입할 수 있다. 다만, 이에 한정되는 것은 아니다.
예시적 실시 예에 있어서, 모니터 연관 코드 삽입기(212)에서 삽입된 모니터 코드는, 런타임 수행 특성의 모니터링 동작을 통해 쉐이더 프로그램 번호, 타임 스탬프, 마스크 수행, 자원 스코어 보드, 분기 조건 달성/미달성, 쉐이더 프로그램의 호출 카운트, 요청 자원의 종류, 이용 자원의 종류 등을 도출하고, 이를 공유 메모리(230)에 저장할 수 있다. 일 예로, 특정 코드 블록이 코어들(220) 중 하나에서 수행될 때, 모니터 코드는 타이머(240)로부터 수신한 타임 정보에 기반하여 타임 스탬프를 도출할 수 있다.
공유 메모리(230)는 프로세서(100)로부터 수신한 쉐이더 프로그램(SH) 등 각종 명령들을 처리하는 도중 생성된 데이터를 저장할 수 있다. 예를 들어, 쉐이더 프로그램(SH)이 코어들(220)에서 수행됨에 따라 이미지 데이터가 생성되고, 상기 이미지 데이터는 공유 메모리(230)에 버퍼링 된 후 예를 들어 프로세서(100)로 전달될 수 있다.
예시적 실시 예에 있어서, 모니터 연관 코드에 따른 각 쉐이드 프로그램(SH)의 런타임 수행 특성은 공유 메모리(230)에 저장될 수 있다. 예를 들어, 공유 메모리(230)는 드로우콜(drawcall) 단위로 구분되는 렌더 버퍼(render buffer) 영역을 포함할 수 있다. 모니터 코드는 쉐이드 프로그램(SH) 수행에 따라 도출된 런타임 수행 특성을, 해당 쉐이드 프로그램(SH)이 속한 드로우콜에 대응하는 렌더 버퍼 영역에 기록할 수 있다. 예시적 실시 예에 있어서, 모든 쉐이더 프로그램들의 수행이 종료됨에 응답하여, 공유 메모리(230)는 기록된 런타임 수행 특성 리스트(RT_ST)를 프로세서(100)에 출력할 수 있다. 다른 예시적 실시 예에 있어서, 프로세서(100)는 런타임 수행 특성 리스트(RT_ST)를 요청하는 별도의 신호를 그래픽스 프로세싱 유닛(200)으로 출력하고, 공유 메모리(230)는 이에 기반하여 런타임 수행 특성 리스트(RT_ST)를 프로세서(100)로 출력할 수도 있다.
본 개시의 기술적 사상에 따른 그래픽 프로세싱 유닛은, 컴파일 시 모니터 연관 회로를 삽입함으로써, 프로그램을 병렬적으로 수행하는 그래픽 프로세싱 유닛에서의 런타임 수행 특성을 용이하게 모니터링 할 수 있다. 또한, 본 개시의 기술적 사상에 따른 그래픽 프로세싱 유닛을 포함하는 컴퓨팅 시스템은, 실제 프로그램 구동 환경에서의 런타임 수행 특성을 도출하고 이에 기반한 성능 분석을 수행함으로써, 향상된 정확도를 갖는 프로파일링을 수행할 수 있다. 또한, 본 개시의 기술적 사상에 따른 모니터링 동작은, 실제 쉐이더 프로그램의 수행에 있어 공유 자원 대기 등으로 낭비되는 시간 중에 수행됨에 따라, 비교적 빠른 속도로 쉐이더 프로그램에 대한 프로파일이 진행될 수 있다.
도 3은 본 개시의 예시적 실시 예에 따라 프로파일 모드에서 컴퓨팅 시스템의 동작 방법을 나타내는 순서도이다.
도 3을 참조하면, 프로세서(100)는 그래픽스 명령에 따른 쉐이더 프로그램(SH)을 선택하고, 이를 출력할 수 있다(S10). 예를 들어, 프로세서(100)는 입력된 프로파일 모드 커맨드(CMD)에 포함된 그래픽스 명령에 기반한 쉐이더 프로그램 매니저(110)를 통해, 시스템 메모리(300)에 포함된 쉐이더 프로그램(SH)을 선택하고, 이를 그래픽스 프로세싱 유닛(200)으로 출력할 수 있다.
그래픽스 프로세싱 유닛(200)은 수신한 쉐이더 프로그램(SH)에 모니터 연관 코드를 삽입하고 컴파일을 수행할 수 있다(S20). 예를 들어, 쉐이더 프로그램(SH)을 수신한 컴파일러(210)는 모니터 연관 코드 삽입기(212)를 통해 쉐이더 프로그램(SH)에 복수의 모니터 연관 코드를 삽입할 수 있다. 컴파일러(210)는 모니터 연관 코드가 삽입된 쉐이더 프로그램을 컴파일 함으로써 코어들(220)에서 실행 가능한 형태로 변환할 수 있다. 다른 예로써, 모니터 연관 코드 삽입기(212)는 쉐이더 프로그램(SH)에 대한 컴파일 수행 후, 컴파일 된 형태의 모니터 연관 코드를 삽입할 수도 있다.
그래픽스 프로세싱 유닛(200)은 모니터 연관 코드가 포함된 쉐이더 프로그램을 수행하고, 이에 따라 도출된 쉐이더 런타임 특성을 저장할 수 있다(S30). 그래픽스 프로세싱 유닛(200)은 모니터 연관 코드가 포함된 쉐이더 프로그램을, 코어들(220)에 병렬적으로 구동시킬 수 있다. 예를 들어, 코어들(220)에서, 쉐이더 프로그램은 SIMD(Single Instruction Multiple Data) 방식으로 병렬 수행될 수 있다. 그래픽스 프로세싱 유닛(200)은 모니터 연관 코드의 수행에 따라 도출된 쉐이더 프로그램의 런타임 수행 특성을 공유 메모리(230)에 저장할 수 있다. 예를 들어, 그래픽스 프로세싱 유닛(200)은 공유 메모리(230)에 포함된, 쉐이드 프로그램이 속한 드로우콜에 대응하는 렌더 버퍼 영역에 해당 쉐이드 프로그램의 런타임 수행 특성을 기록할 수 있다.
그래픽스 프로세싱 유닛(200)은 프로세서(100)로부터 수신한 모든 쉐이더 프로그램의 수행이 종료되었는지 여부를 판단할 수 있다(S40). 수행되어야 할 쉐이더 프로그램이 남아있는 경우, 그래픽스 프로세싱 유닛(200)은 코어들(220)을 통해 남은 쉐이더 프로그램을 수행할 수 있다.
모든 쉐이더 프로그램 수행이 종료된 경우, 그래픽스 프로세싱 유닛(200)은 쉐이더 런타임 특성 리스트(RT_ST)를 프로세서(100)로 출력할 수 있다(S50). 쉐이더 런타임 특성 리스트(RT_ST)는, 쉐이더 프로그램들 각각에 대한 런타임 수행 특성을 포함할 수 있다. 예를 들어, 공유 메모리(230)는 모니터 연관 코드로부터 도출된 런타임 특성들을 포함하는 런타임 특성 리스트(RT_ST)를 저장하고, 모든 쉐이더 프로그램 수행이 종료됨에 응답하여 런타임 특성 리스트(RT_ST)를 프로세서(100)로 출력할 수 있다. 예시적 실시 예에 있어서, 프로세서(100)는 성능 분석기(120)를 통해, 런타임 특성 리스트(RT_ST)에 기반하여 각 쉐이더 프로그램에 대한 성능 데이터(PF)를 생성할 수 있다. 성능 데이터(PF)는 개선된 정확성을 갖는 런타임 수행 특성을 반영함으로써, 컴퓨팅 시스템(10)은 향상된 성능의 프로파일링을 제공할 수 있다.
도 4는 본 개시의 예시적 실시 예에 따른 컴파일러의 동작 방법을 나타내는 순서도이다.
도 4를 참조하면, 컴파일러(210)는 쉐이더 프로그램(SH)을 수신할 수 있다(S110). 예를 들어, 쉐이더 프로그램(SH)은 쉐이더 프로그램 매니저(110)에서 선택 및 출력될 수 있다.
컴파일러(210)는 프로세서(100)로부터 수신한 신호에 기반하여 현재 프로파일 모드에서의 동작인지 여부를 판단할 수 있다(S120). 예를 들어, 프로세서(100)는 쉐이더 프로그램(SH) 출력 시 프로파일 모드 관련 신호를 더 포함하여 출력하고, 컴파일러(210)는 프로파일 모드 관련 신호에 기반하여 프로파일 모드인지 여부를 판단할 수 있다. 또는, 프로세서(100)는 별도의 프로파일 모드 관련 신호를 출력하고, 컴파일러(210)는 이에 기반하여 프로파일 모드인지 여부를 판단할 수도 있다.
프로파일 모드가 아니라는 판단에 응답하여, 컴파일러(210)는 수신한 쉐이더 프로그램(SH)에 대한 컴파일 동작을 수행할 수 있다(S140). 이와 달리, 프로파일 모드라는 판단에 응답하여, 컴파일러(210)는 모니터 연관 코드의 삽입위치를 탐색할 수 있다(S130). 예시적 실시 예에 있어서, 컴파일러(210)는 쉐이더 프로그램(SH)을 구성하는 코드 블록 단위로 모니터 연관 코드의 삽입위치를 탐색할 수 있다. 예를 들어, 코드 블록은 외부 자원에 대한 대기 및/또는 타 코드로의 분기 없이 순차적으로 수행되는 코드들의 집합 단위일 수 있다. 예로써, 컴파일러(210)는 코드 블록의 시작지점 또는 마지막 지점을 삽입위치로서 탐색할 수 있다. 다른 예로, 컴파일러(210)는 조건문 등 분기 코드가 수행된 직후의 모니터링 결과를 얻어올 수 있는 지점을 삽입위치로서 탐색할 수 있다. 또 다른 예로, 컴파일러(210)는 외부 자원에 접근하는 지점을 삽입위치로서 탐색할 수 있다.
탐색된 모니터 연관 코드 삽입위치에 따라, 컴파일러(210)는 쉐이더 프로그램(SH)에 복수의 모니터 연관 코드들을 삽입하고, 이를 컴파일 할 수 있다(S150). 다만, 이에 한정되는 것은 아니고, 컴파일러(210)는 쉐이더 프로그램(SH) 컴파일 후, 컴파일 된 형태의 모니터 연관 코드들을 S130에서 탐색된 위치에 삽입할 수도 있다. 상기 모니터 연관 코드 삽입위치 탐색 동작 및 모니터 연관 코드 삽입 동작은, 예를 들어 컴파일러(210)에 포함된 모니터 연관코드 삽입기(212)에서 수행될 수 있다.
도 5는 본 개시의 예시적 실시 예에 따른 모니터 연관 코드 삽입을 설명하기 위한 도면이다.
도 5를 참조하면, 쉐이더 프로그램(SH)은 복수의 코드 블록들(CB_1~CB_M)(M은 2 이상의 양의 정수)을 포함할 수 있다. 각 코드 블록은 복수의 코드들을 포함할 수 있다. 예를 들어, 제1 코드 블록(CB_1)은 P개의 코드들(C1_1~C1_P)(P는 2 이상의 양의 정수), 제M 코드 블록(CB_M)은 Q개의 코드들(CM_1~CM_Q)(Q는 2 이상의 양의 정수)을 각각 포함할 수 있다.
예시적 실시 예에 있어서, 복수의 코드 블록들(CB_1~CB_M) 각각은, 외부 자원에 대한 대기 및/또는 타 코드로의 분기 없이 순차적으로 수행되는 코드들의 단위일 수 있다. 예로써, 제1 코드 블록(CB_1)에서 제P 코드(C1_P)가 외부 자원에 대한 접근 코드인 경우, 제1 코드 블록(CB_1)은 종료되고, 외부 자원이 액세스 가능한 시점에 다른 코드 블록(예를 들어, 제M 코드 블록(CB_M))이 수행될 수 있다. 다른 예로써, 제1 코드 블록(CB_1)에서 제P 코드(C1_P)가 조건문 및 조건 달성 시 수행 동작에 대한 코드(예를 들어, if문 및 if 조건 만족 시 수행 코드)이고, 다른 코드 블록(예를 들어, 제M 코드 블록(CB_M))의 제1 코드(CM_1)가 상기 조건 미달성 시 수행 동작에 대한 코드(예를 들어, else 시 수행 코드)일 수 있다.
예시적 실시 예에 있어서, 컴파일 시 각 코드 블록에 모니터 연관 코드가 삽입될 수 있다. 구체적으로, 제1 코드 블록(CB_1)에는 제1 모니터 연관 코드(MAC_1)가 삽입되고, 제M 코드 블록(CB_M)에는 제M 모니터 연관 코드(MAC_M)가 삽입될 수 있다. 일 예로, 모니터 연관 코드(예를 들어, MAC_1 또는 MAC_M)는 해당 코드 블록의 수행 특성을 직접 모니터링 하는 코드인 모니터 코드일 수 있다. 다른 예로, 모니터 연관 코드(예를 들어, MAC_1 또는 MAC_M)는, 코드 블록의 수행 특성을 모니터링 하는 모니터 코드로 분기하도록 하는 분기 코드일 수도 있다.
도 6은 본 개시의 예시적 실시 예에 따른 모니터링 동작을 설명하기 위한 도면이다.
도 6을 참조하면, 제1 코드 블록(CB_1)에는 모니터 연관 코드로서 제1 모니터 코드(MC_1)가 삽입되고, 제M 코드 블록(CB_M)에는 모니터 연관 코드로서 제M 모니터 코드(MC_M)가 삽입될 수 있다. 구체적으로, 제1 모니터 코드(MC_1)는 제1 코드 블록(CB_1)의 런타임 수행 특성을 직접 모니터링 하는 코드이고, 제M 모니터 코드(MC_M)는 제M 코드 블록(CB_M)의 런타임 수행 특성을 직접 모니터링 하는 코드일 수 있다. 예를 들어, 제1 코드 블록(CB_1)의 제P 코드(C1_P)는 공유 메모리(230)에 저장된 자원(RS)에 대한 접근 코드일 수 있다. 다시 말해서, 제P 코드(C1_P)가 수행됨에 따라, 공유 메모리(230)에 자원 요청(RQ_RS)이 입력될 수 있다.
예시적 실시 예에 있어서, 제P 코드(C1_P) 다음 제1 모니터 코드(MC_1)가 삽입될 수 있다. 예를 들어, 컴파일러(210)는 모니터 연관 코드 삽입기(212)를 통해 제P 코드(C1_P) 다음 제1 모니터 코드(MC_1)를 삽입 및 컴파일하고, 제1 모니터 코드(MC_1)는 제P 코드(C1_P)가 수행된 다음 코어에서 수행될 수 있다.
예시적 실시 예에 있어서, 제1 모니터 코드(MC_1)의 수행에 따라 제1 런타임 수행 특성(RT_ST_1)이 도출되고 공유 메모리(230)의 런타임 수행 특성 리스트(RT_ST)로서 기록될 수 있다. 예를 들어, 제1 런타임 수행 특성(RT_ST_1)은 쉐이더 프로그램 번호, 타임 스탬프, 요청 자원의 종류에 관한 정보를 포함할 수 있다.
예를 들어, 제M 코드 블록(CB_M)은 자원 요청(RQ_RS)에 따라 액세스 된 자원(RS)을 사용하는 제1 코드(CM_1)가 포함될 수 있다. 다시 말해서, 제1 코드 블록(CB_1)에서 외부의 자원(RS)을 요청하고, 제M 코드 블록(CB_M)은 자원(RS)이 가용할 시점에서 자원(RS)을 사용할 수 있다.
예시적 실시 예에 있어서, 제M 코드 블록(CB_M)의 시작 지점에 제M 모니터 코드(MC_M)가 삽입될 수 있다. 예를 들어, 컴파일러(210)는 모니터 연관 코드 삽입기(212)를 통해, 제M 코드 블록(CB_M)에서 제1 코드(CM_1) 이전 위치에 제M 모니터 코드(MC_M)를 삽입 및 컴파일하고, 제M 모니터 코드(MC_M)는 제M 코드 블록(CB_M)의 코드들 중 가장 먼저 수행될 수 있다.
예시적 실시 예에 있어서, 제M 모니터 코드(MC_M)의 수행에 따라 제M 런타임 수행 특성(RT_ST_M)이 도출되고 공유 메모리(230)의 런타임 수행 특성 리스트(RT_ST)로서 기록될 수 있다. 예를 들어, 제M 런타임 수행 특성(RT_ST_M)은 쉐이더 프로그램 번호, 타임 스탬프, 이용 자원의 종류에 관한 정보를 포함할 수 있다.
제1 런타임 수행 특성(RT_ST_1) 및 제2 런타임 수행 특성(RT_ST_M) 각각에 타임 스탬프 정보가 포함됨에 따라, 외부의 자원(RS)의 가용 시간 등 실제적 런타임 수행 특성이 도출될 수 있다. 예를 들어, 공유 메모리(230)에 저장된 자원(RS)은 다수의 코어들(220)의 구동에 요구되는 공유 자원(예를 들어, 텍스쳐(texture)일 수 있다.
외부의 공유 자원(RS)에 접근을 요청하는 코드 블록(CB_1)에서 제1 모니터 코드(MC_1)가 코드 블록의 마지막 지점에 삽입되고, 요청된 자원(RS)은 다른 코드 블록에서 사용됨에 따라, 제1 모니터 코드(MC_1)의 모니터링 동작은 자원(RS)에 대한 대기 시간에 수행될 수 있다. 즉, 실제 수행에 있어 낭비되는 시간 중에 모니터링 동작이 수행됨에 따라, 비교적 빠른 속도로 쉐이더 프로그램에 대한 프로파일이 진행될 수 있다.
도 7은 본 개시의 예시적 실시 예에 따라 모니터 코드가 삽입된 코드 블록의 동작을 나타내는 순서도이다. 예를 들어, 도 7은 도 6에 도시된 코드 블록들(CB_1 및 CB_M)의 동작을 나타낼 수 있다.
도 7을 참조하면, 코어에서 제1 코드 블록(CB_1) 수행 시, 외부 자원을 요청하는 코드가 수행되는지 여부가 판단될 수 있다(S210). 코어에서 제1 코드 블록(CB_1) 수행 시, 외부 자원을 요청하는 코드가 수행되지 않는 경우 코어는 순차적으로 다음 코드를 수행할 수 있다(S215).
코어에서 외부 자원을 요청하는 코드가 수행될 경우, 코어는 제1 모니터 코드(MC_1)를 수행할 수 있다(S220). 예시적 실시 예에 있어서, 제1 모니터 코드(MC_1)는 쉐이더 프로그램(SH)의 컴파일 단계에서, 컴파일러(210)에 포함된 모니터 연관 코드 삽입기(212)를 통해 삽입될 수 있다. 제1 모니터 코드(MC_1)가 코어에서 수행됨에 따라 제1 코드 블록(CB_1)의 제1 런타임 수행 특성(RT_ST_1)이 도출 및 공유 메모리(230)에 기록될 수 있다. 예시적 실시 예에 있어서, 제1 코드 블록(CB_1)이 외부 자원(RS)을 요청하는 코드를 포함하는 경우, 제1 모니터 코드(MC_1)는 제1 코드 블록(CB_1)의 마지막 지점에 삽입될 수 있다.
제1 코드 블록(CB_1)에서 외부 자원을 요청(RQ_RS)하는 코드(예를 들어, C1_P)가 수행된 다음, 요청(RQ_RS)에 따른 자원(RS)을 이용하는 제M 코드 블록(CB_M)의 자원 가용 여부가 판단될 수 있다(S230). 자원(RS)은, 병렬로 구동되는 코어들(220) 각각에서 요청되어 사용될 수 있으므로, 자원(RS)의 요청(RQ_RS)부터 가용까지 소정의 대기시간이 존재할 수 있다.
외부 자원(RS)이 가용한 경우, 코어는 제M 코드 블록(CB_M)의 제M 모니터 코드(MC_M)를 수행할 수 있다(S240). 예시적 실시 예에 있어서, 제M 모니터 코드(MC_M)는 쉐이더 프로그램(SH)의 컴파일 단계에서, 컴파일러(210)에 포함된 모니터 연관 코드 삽입기(212)를 통해 삽입될 수 있다. 제M 모니터 코드(MC_M)가 코어에서 수행됨에 따라 제M 코드 블록(CB_M)의 제M 런타임 수행 특성(RT_ST_M)이 도출 및 공유 메모리(230)에 기록될 수 있다. 예시적 실시 예에 있어서, 제M 코드 블록(CB_M)이 기 요청된 외부 자원(RS)을 사용하는 코드를 포함하는 경우, 제M 모니터 코드(MC_M)는 제M 코드 블록(CB_M)의 시작 지점에 삽입될 수 있다.
도 8은 본 개시의 다른 예시적 실시 예에 따른 모니터링 동작을 설명하기 위한 도면이다.
도 8을 참조하면, 제1 코드 블록(CB_1a)에는 모니터 연관 코드로서 제1 모니터 코드(MC_1a)가 삽입되고, 제M 코드 블록(CB_Ma)에는 모니터 연관 코드로서 제M 모니터 코드(MC_Ma)가 삽입될 수 있다. 예를 들어, 제1 코드 블록(CB_1a)은 조건문 및 조건 달성 시 수행 동작에 대한 코드들을 포함할 수 있다. 구체적으로, 제1 코드 블록(CB_1a)은 if문 및 if문의 조건 달성 시 수행 동작에 대한 코드들을 포함할 수 있다.
예시적 실시 예에 있어서, 조건 달성 시 수행 동작에 대한 코드들 중 마지막 코드인 제P 코드(C1_Pa) 다음 제1 모니터 코드(MC_1a)가 삽입될 수 있다. 예를 들어, 컴파일러(210)는 모니터 연관 코드 삽입기(212)를 통해 제P 코드(C1_Pa) 다음 제1 모니터 코드(MC_1a)를 삽입 및 컴파일하고, 제1 모니터 코드(MC_1a)는 제P 코드(C1_Pa)가 수행된 다음 코어에서 수행될 수 있다.
예시적 실시 예에 있어서, 제1 모니터 코드(MC_1a)의 수행에 따라 제1 런타임 수행 특성(RT_ST_1a)이 도출되고 공유 메모리(230a)의 런타임 수행 특성 리스트(RT_STa)로서 기록될 수 있다. 예를 들어, 제1 런타임 수행 특성(RT_ST_1a)은 쉐이더 프로그램 번호, 타임 스탬프, 조건문 조건 달성에 대응하는 정보를 포함할 수 있다.
예를 들어, 제M 코드 블록(CB_Ma)은 제1 코드 블록(CB_1a)의 조건문에 대한 조건 미 달성 시 수행 동작에 대한 코드들을 포함할 수 있다. 구체적으로, 제M 코드 블록(CB_Ma)은 else문의 수행 동작에 대한 코드들을 포함할 수 있다.
예시적 실시 예에 있어서, 제M 코드 블록(CB_Ma)의 시작 지점에 제 M 모니터 코드(MC_Ma)가 삽입될 수 있다. 예를 들어, 컴파일러(210)는 모니터 연관 코드 삽입기(212)를 통해, 제M 코드 블록(CB_Ma)에서 제1 코드(CM_1a) 이전 위치에 제M 모니터 코드(MC_Ma)를 삽입 및 컴파일하고, 제M 모니터 코드(MC_Ma)는 제M 코드 블록(CB_Ma)의 코드들 중 가장 먼저 수행될 수 있다.
예시적 실시 예에 있어서, 제M 모니터 코드(MC_Ma)의 수행에 따라 제M 런타임 수행 특성(RT_ST_Ma)이 도출되고 공유 메모리(230a)의 런타임 수행 특성 리스트(RT_STa)로서 기록될 수 있다. 예를 들어, 제M 런타임 수행 특성(RT_ST_Ma)은 쉐이더 프로그램 번호, 타임 스탬프, 조건문 조건 미달성에 대응하는 정보를 포함할 수 있다.
도 9는 본 개시의 예시적 실시 예에 따른 런타임 수행 특성 리스트를 설명하는 도면이다.
도 9를 참조하면, 공유 메모리(230)에는 런타임 수행 특성 리스트(RT_ST)가 저장될 수 있다. 런타임 수행 특성 리스트(RT_ST)는, 복수의 쉐이더 프로그램들 각각에 대한 쉐이더 런타임 수행 특성들(SH_ST1~SH_STK)(K는 2 이상의 양의 정수)을 포함할 수 있다. 예시적 실시 예에 있어서, 쉐이더 런타임 수행 특성들(SH_ST1~SH_STK) 각각은 코드 블록들에 대한 런타임 수행 특성들(예를 들어, 도 6의 RT_ST_1 또는 RT_ST_M)을 포함할 수 있다.
예시적 실시 예에 있어서, 쉐이더 런타임 수행 특성들(SH_ST1~SH_STK) 각각은 쉐이더 프로그램 번호(231), 타임 스탬프(232), 마스크 수행(233), 자원 스코어 보드(234), 분기 조건 달성/미달성(235) 및 호출 카운트(236)를 포함할 수 있다. 예를 들어, 쉐이더 프로그램 번호(231)는 렌더 인덱스(render index) 및 드로우콜 정보를 포함할 수 있다.
본 도면에는 도시되지 않았으나, 쉐이더 런타임 수행 특성들(SH_ST1~SH_STK) 각각은 명령어들 호출 관련 통계값을 포함할 수도 있다. 예를 들어, 쉐이더 런타임 수행 특성들(SH_ST1~SH_STK)은 각각 명령어 호출 횟수, 산술 논리 장치(Arithmetic Logic Unit, ALU) 사용 횟수, 공유 메모리 접근 횟수, 파이프라인 스톨(pipeline stall) 횟수 및 이유 등을 포함할 수도 있다.
본 도면에는 도시되지 않았으나, 쉐이더 런타임 수행 특성들(SH_ST1~SH_STK) 각각은 동기화 관련 정보들을 포함할 수도 있다. 예를 들어, 쉐이더 런타임 수행 특성들(SH_ST1~SH_STK)은 각각 공유 메모리 대기 시간, 동기화 프리미티브(primitive)에 의한 지연 시간, 아토믹 명령(atomic instruction) 수행 시간 등을 포함할 수도 있다.
도 10은 본 개시의 다른 예시적 실시 예에 따른 모니터링 동작을 설명하기 위한 도면이다.
도 10을 참조하면, 제1 코드 블록(CB_1b)에는 모니터 연관 코드로서 제1 분기 코드(JMP_MC_1b)가 삽입되고, 제M 코드 블록(CB_Mb)에는 모니터 연관 코드로서 제M 분기 코드(JMP_MC_Mb)가 삽입될 수 있다. 구체적으로, 제1 분기 코드(JMP_MC_1b) 및 제2 분기 코드(JMP_MC_Mb) 각각은 코드 블록의 수행 특성을 모니터링 하는 범용 모니터 코드(MCb)로 분기하도록 하는 분기 코드일 수 있다. 예를 들어, 제1 코드 블록(CB_1b)의 제P 코드(C1_Pb)는 도 6에 상술한 바와 같이 공유 메모리(230)에 저장된 자원(RS)에 대한 접근 코드일 수 있다. 다만, 이에 한정되는 것은 아니고, 제1 코드 블록(CB_1b)은 도 8에 상술한 바와 같이 조건문 및 조건 달성 시 수행 동작에 대한 코드들을 포함할 수도 있다.
예시적 실시 예에 있어서, 제P 코드(C1_Pb) 다음 제1 분기 코드(JMP_MC_1b)가 삽입될 수 있다. 예를 들어, 컴파일러(210)는 모니터 연관 코드 삽입기(212)를 통해 제P 코드(C1_Pb) 다음 제1 분기 코드(JMP_MC_1b)를 삽입 및 컴파일하고, 제1 분기 코드(JMP_MC_1b)는 제P 코드(C1_Pb)가 수행된 다음 코어에서 수행될 수 있다. 제1 분기 코드(JMP_MC_1b)가 수행됨에 따라, 범용 모니터 코드(MCb)가 수행될 수 있다. 예시적 실시 예에 있어서, 제1 코드 블록(CB_1b)을 대상으로 한 범용 모니터 코드(MCb)의 수행에 따라 제1 코드 블록(CB_1b)에 대한 런타임 수행 특성이 도출되고, 공유 메모리(예를 들어, 도 6의 230)에 기록될 수 있다.
예를 들어, 제M 코드 블록(CB_Mb)의 제1 코드(CM_1b)는 도 6에 상술한 바와 같이 자원(RS)을 사용하는 코드일 수 있다. 다만, 이에 한정되는 것은 아니고, 제M 코드 블록(CB_Mb)은 도 8에 상술한 바와 같이 제1 코드 블록(CB_1b)에 포함된 조건문에 대한 조건 미 달성 시 수행 동작에 대한 코드들을 포함할 수도 있다.
예시적 실시 예에 있어서, 제M 코드 블록(CB_Mb)의 시작 지점에 제M 분기 코드(JMP_MC_Mb)가 삽입될 수 있다. 예를 들어, 컴파일러(210)는 모니터 연관 코드 삽입기(212)를 통해, 제M 코드 블록(CB_Mb)에서 제1 코드(CM_1b) 이전 위치에 제M 분기 코드(JMP_MC_Mb)를 삽입 및 컴파일하고, 제M 분기 코드(JMP_MC_Mb)는 제M 코드 블록(CB_Mb)의 코드들 중 가장 먼저 수행될 수 있다. 제M 분기 코드(JMP_MC_Mb)가 수행됨에 따라, 범용 모니터 코드(MCb)가 수행될 수 있다. 예시적 실시 예에 있어서, 제M 코드 블록(CB_Mb)을 대상으로 한 범용 모니터 코드(MCb)의 수행에 따라 제M 코드 블록(CB_Mb)에 대한 런타임 수행 특성이 도출되고, 공유 메모리(예를 들어, 도 6의 230)에 기록될 수 있다.
도 11은 본 개시의 다른 예시적 실시 예에 따른 프로파일 모드에서의 동작을 설명하기 위한 블록도이다. 도 11에 도시된 구성 중, 도 2와 중복되는 구성에 대한 설명은 생략하기로 한다.
도 11을 참조하면, 쉐이더 프로그램 매니저(205c)는 그래픽 프로세싱 유닛(200c)에 포함될 수 있다. 예를 들어, 프로세서(100c)는 프로파일 모드 커맨드(P_CMDc)를 그래픽 프로세싱 유닛(200c)으로 출력하고, 쉐이더 프로그램 매니저(205c)는 프로파일 모드 커맨드(P_CMDc)에 응답하여 쉐이더 프로그램(SHc)을 컴파일러(210c)로 출력할 수 있다. 이에 따라, 그래픽 프로세싱 유닛(200c)은 프로파일 모드 커맨드(P_CMDc)에 응답하여 쉐이더 프로그램들 각각에 대한 런타임 수행 특성들을 포함하는 런타임 수행 특성 리스트(RT_STc)를 프로세서(100c)로 출력할 수 있다. 프로세서(100c)는, 성능 분석기(120c)를 통해, 프로파일 모드 커맨드(P_CMDc)에 응답하려 출력된 런타임 수행 특성 리스트(RT_STc)에 기반하여 성능 데이터(PFc)를 생성할 수 있다.
도 12는 본 개시의 예시적 실시 예에 따른 그래픽스 프로세서를 나타내는 블록도이다. 도 12에 도시된 바와 같이, 그래픽스 프로세서(400)는 커맨드 프로세서(410), 파이프라인 컨트롤러(430), 프론트-엔드 파이프라인(450), 백-엔드 파이프라인(470) 및 프로그램 가능 프로세서(490)를 포함할 수 있다.
커맨드 프로세서(410)는 호스트로부터 커맨드를 수신할 수 있고, 수신된 커맨드를 해석함으로써 파이프라인에서 처리 가능한 수준의 커맨드로 변환할 수 있다. 커맨드 프로세서(410)는 변환된 커맨드를 파이프라인 컨트롤러(430)에 제공할 수 있다.
파이프라인 컨트롤러(430)는 커맨드 프로세서(410)로부터 수신된 커맨드로부터 프론트-엔드 파이프라인(450) 및 백-엔드 파이프라인(470)에 필요한 정보를 추출할 수 있고, 추출된 정보에 기초하여 파이프라인 구성(configuration)을 수행할 수 있다. 또한, 파이프라인 컨트롤러(430)는 커맨드 프로세서(410)로부터 수신된 커맨드를 프론트-엔드 파이프라인(450) 및 백-엔드 파이프라인(470)에서 처리 가능한 수준의 커맨드로 변환할 수 있고, 변환된 커맨드를 프론트-엔드 파이프라인(450) 및 백-엔드 파이프라인(470)에 제공할 수 있다.
그래픽스 프로세서(400)는 프로파일 모드에서, 도 1 내지 도 11을 통해 전술된 바와 같이 컴파일 시 쉐이드 프로그램에 복수의 모니터 연관 코드를 삽입할 수 있다. 이에 따라 실제 프로그램 구동 환경이 반영된 런타임 수행 특성을 용이하게 모니터링 하고, 그 결과를 도출할 수 있다.
이상에서와 같이 도면과 명세서에서 예시적인 실시 예들이 개시되었다. 본 명세서에서 특정한 용어를 사용하여 실시 예들을 설명하였으나, 이는 단지 본 개시의 기술적 사상을 설명하기 위한 목적에서 사용된 것이지 의미 한정이나 특허청구범위에 기재된 본 개시의 범위를 제한하기 위하여 사용된 것은 아니다. 그러므로 본 기술분야의 통상의 지식을 가진 자라면 이로부터 다양한 변형 및 균등한 타 실시 예가 가능하다는 점을 이해할 것이다. 따라서, 본 개시의 진정한 기술적 보호범위는 첨부된 특허청구범위의 기술적 사상에 의해 정해져야 할 것이다.

Claims (10)

  1. 쉐이더 프로그램을 저장하도록 구성된 메모리; 및
    상기 메모리와 결합되고, 프로파일 모드에서 상기 쉐이더 프로그램을 수신하도록 구성된 그래픽스 프로세싱 유닛으로서,
    상기 쉐이더 프로그램에, 상기 쉐이더 프로그램의 런타임 수행 특성을 모니터링 하기 위한 하나 이상의 모니터 연관 코드를 삽입하는 단계;
    상기 하나 이상의 모니터 연관 코드가 삽입된 쉐이더 프로그램을 복수의 코어들에서 수행 가능한 언어로 컴파일하는 단계; 및
    상기 컴파일 된 쉐이더 프로그램 및 상기 하나 이상의 모니터 연관 코드를 수행함으로써 상기 쉐이더 프로그램의 수행에 따른 런타임 수행 특성을 도출하는 단계를 수행하도록 구성된 그래픽스 프로세싱 유닛을 포함하는 컴퓨팅 시스템.
  2. 제1 항에 있어서,
    상기 쉐이더 프로그램은 순차적으로 수행되는 복수의 코드들로 각각이 구성된 복수의 코드 블록들을 포함하고,
    상기 하나 이상의 모니터 연관 코드를 삽입하는 단계는,
    상기 코드 블록들 중 적어도 일부 코드 블록들 각각에 모니터 연관 코드를 삽입하는 단계를 포함하는 것을 특징으로 하는 컴퓨팅 시스템.
  3. 제1 항에 있어서,
    상기 그래픽스 프로세싱 유닛은, 상기 복수의 코어들 중 적어도 일부가 공유하는 자원을 저장하는 공유 메모리를 더 포함하고,
    상기 런타임 수행 특성을 도출하는 단계는,
    상기 도출된 런타임 수행 특성을 상기 공유 메모리에 저장하는 단계를 더 포함하는 컴퓨팅 시스템.
  4. 제1 항에 있어서,
    상기 하나 이상의 모니터 연관 코드는,
    상기 모니터 연관 코드가 삽입된 코드 블록의 수행 특성을 직접 모니터링 하는 모니터 코드를 포함하는 것을 특징으로 하는 컴퓨팅 시스템.
  5. 제1 항에 있어서,
    상기 하나 이상의 모니터 연관 코드는,
    코드 블록의 수행 특성을 모니터링 하는 범용 모니터 코드로 분기하도록 명령하는 분기 코드를 포함하는 것을 특징으로 하는 컴퓨팅 시스템.
  6. 그래픽스 커맨드를 포함하는 프로파일 커맨드에 응답하여, 복수의 코드 블록들을 포함하는 쉐이더 프로그램을 출력하는 단계;
    상기 복수의 코드 블록들 중 적어도 일부 코드 블록들 각각에, 런타임 수행 특성을 모니터링 하도록 구성된 모니터 연관 코드를 삽입하는 단계;
    상기 쉐이더 프로그램을 컴파일 하는 단계;
    복수의 코어들로써, 상기 복수의 코드 블록들 및 상기 모니터 연관 코드를 수행함으로써 상기 쉐이더 프로그램의 런타임 수행 특성을 도출하는 단계;
    상기 복수의 코어들이 공유하는 메모리에, 상기 도출된 쉐이더 프로그램의 런타임 수행 특성을 기록하는 단계; 및
    상기 쉐이더 프로그램의 수행이 종료됨에 응답하여 상기 기록된 쉐이더 프로그램의 런타임 수행 특성을 출력하는 단계를 포함하는 컴퓨팅 시스템의 동작방법.
  7. 제6 항에 있어서,
    상기 런타임 수행 특성을 도출하는 단계는,
    상기 모니터 연관 코드를 수행함에 따라, 상기 모니터 연관 코드가 포함된 코드 블록의 수행 시점에 대응하는 타임 스탬프를 생성하는 단계를 포함하는 것을 특징으로 하는 컴퓨팅 시스템의 동작 방법.
  8. 제6 항에 있어서,
    상기 출력된 쉐이더 프로그램의 런타임 수행 특성에 기반하여, 상기 쉐이더 프로그램에 대한 성능 데이터를 생성하는 단계를 더 포함하는 컴퓨팅 시스템의 동작방법.
  9. 제6 항에 있어서,
    상기 쉐이더 프로그램의 런타임 수행 특성은,
    쉐이더 프로그램 번호, 타임 스탬프, 마스크 수행, 자원 스코어 보드, 분기 조건 달성/미달성 및 호출 카운트 중 적어도 하나를 포함하는 것을 특징으로 하는 컴퓨팅 시스템의 동작방법.
  10. 프로파일 모드에서, 복수의 코드 블록들을 포함하는 프로그램을 수신하고, 상기 복수의 코드 블록들 중 적어도 일부의 코드 블록들 각각에, 런타임 수행 특성을 모니터링 하기 위한 모니터 연관 코드를 삽입하는 모니터 연관 코드 삽입기를 포함하고, 상기 모니터 연관 코드 및 상기 프로그램을 컴파일하는 컴파일러;
    상기 컴파일 된 프로그램 및 모니터 연관 코드를 병렬적으로 수행하고, 상기 모니터 연관 코드를 수행함에 따라 상기 프로그램의 런타임 수행 특성을 도출하는 복수의 코어들; 및
    상기 도출된 상기 프로그램의 런타임 수행 특성을 저장하는 공유 메모리를 포함하는 그래픽스 프로세싱 유닛.
KR1020180174223A 2018-12-31 2018-12-31 런타임 수행특성을 도출하는 그래픽스 프로세싱 유닛 및 이의 동작방법 KR102683415B1 (ko)

Priority Applications (3)

Application Number Priority Date Filing Date Title
KR1020180174223A KR102683415B1 (ko) 2018-12-31 2018-12-31 런타임 수행특성을 도출하는 그래픽스 프로세싱 유닛 및 이의 동작방법
US16/529,926 US11126535B2 (en) 2018-12-31 2019-08-02 Graphics processing unit for deriving runtime performance characteristics, computer system, and operation method thereof
CN201911424625.XA CN111383164A (zh) 2018-12-31 2019-12-31 图形处理单元、计算系统及其操作方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020180174223A KR102683415B1 (ko) 2018-12-31 2018-12-31 런타임 수행특성을 도출하는 그래픽스 프로세싱 유닛 및 이의 동작방법

Publications (2)

Publication Number Publication Date
KR20200083025A true KR20200083025A (ko) 2020-07-08
KR102683415B1 KR102683415B1 (ko) 2024-07-10

Family

ID=71121819

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020180174223A KR102683415B1 (ko) 2018-12-31 2018-12-31 런타임 수행특성을 도출하는 그래픽스 프로세싱 유닛 및 이의 동작방법

Country Status (3)

Country Link
US (1) US11126535B2 (ko)
KR (1) KR102683415B1 (ko)
CN (1) CN111383164A (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11474924B2 (en) * 2019-05-31 2022-10-18 Apple Inc. Graphics processing unit performance analysis tool

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012185820A (ja) * 2011-03-03 2012-09-27 Arm Ltd グラフィックス処理
US20130106880A1 (en) * 2011-10-26 2013-05-02 Roy E. Williams Automatically testing compatibility between a graphics card and a graphics program
KR20150092440A (ko) * 2014-02-04 2015-08-13 삼성전자주식회사 Gpu 데이터 캐싱 방법 및 그에 따른 데이터 프로세싱 시스템
KR20150143567A (ko) * 2013-04-11 2015-12-23 퀄컴 인코포레이티드 타일 기반 렌더링을 위한 인트라-프레임 타임스탬프들
KR20170015325A (ko) * 2014-07-10 2017-02-08 인텔 코포레이션 현재 상태에 기초하여 쉐이더 프로그램을 업데이트하기 위한 방법 및 장치

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6731296B2 (en) 1999-05-07 2004-05-04 Broadcom Corporation Method and system for providing programmable texture processing
US8375368B2 (en) 2006-06-20 2013-02-12 Google Inc. Systems and methods for profiling an application running on a parallel-processing computer system
US7692660B2 (en) 2006-06-28 2010-04-06 Microsoft Corporation Guided performance optimization for graphics pipeline state management
US8284204B2 (en) * 2006-06-30 2012-10-09 Nokia Corporation Apparatus, method and a computer program product for providing a unified graphics pipeline for stereoscopic rendering
US8068114B2 (en) * 2007-04-30 2011-11-29 Advanced Micro Devices, Inc. Mechanism for granting controlled access to a shared resource
US8296738B1 (en) * 2007-08-13 2012-10-23 Nvidia Corporation Methods and systems for in-place shader debugging and performance tuning
US7962314B2 (en) 2007-12-18 2011-06-14 Global Foundries Inc. Mechanism for profiling program software running on a processor
US9196013B2 (en) 2011-10-31 2015-11-24 Apple Inc. GPU workload prediction and management
US9189881B2 (en) 2013-05-30 2015-11-17 Arm Limited Graphics processing
US9799087B2 (en) 2013-09-09 2017-10-24 Apple Inc. Shader program profiler
US9064052B1 (en) * 2013-10-22 2015-06-23 The Mathworks, Inc. Providing intermediate results of evaluating program code that includes a compound statement
EP3086233B1 (en) * 2015-04-23 2020-05-06 CODESYS Holding GmbH Method and system for measuring a runtime by means of watchpoints
US10255106B2 (en) 2016-01-27 2019-04-09 Qualcomm Incorporated Prediction-based power management strategy for GPU compute workloads
US9799089B1 (en) * 2016-05-23 2017-10-24 Qualcomm Incorporated Per-shader preamble for graphics processing
US20180165200A1 (en) * 2016-12-09 2018-06-14 Ramanathan Sethuraman System, apparatus and method for dynamic profiling in a processor
US10310830B2 (en) * 2017-06-02 2019-06-04 Apple Inc. Shader profiler
US10922779B2 (en) * 2018-12-28 2021-02-16 Intel Corporation Techniques for multi-mode graphics processing unit profiling
US11120521B2 (en) * 2018-12-28 2021-09-14 Intel Corporation Techniques for graphics processing unit profiling using binary instrumentation

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012185820A (ja) * 2011-03-03 2012-09-27 Arm Ltd グラフィックス処理
US20130106880A1 (en) * 2011-10-26 2013-05-02 Roy E. Williams Automatically testing compatibility between a graphics card and a graphics program
KR20150143567A (ko) * 2013-04-11 2015-12-23 퀄컴 인코포레이티드 타일 기반 렌더링을 위한 인트라-프레임 타임스탬프들
KR20150092440A (ko) * 2014-02-04 2015-08-13 삼성전자주식회사 Gpu 데이터 캐싱 방법 및 그에 따른 데이터 프로세싱 시스템
KR20170015325A (ko) * 2014-07-10 2017-02-08 인텔 코포레이션 현재 상태에 기초하여 쉐이더 프로그램을 업데이트하기 위한 방법 및 장치

Also Published As

Publication number Publication date
US11126535B2 (en) 2021-09-21
US20200210317A1 (en) 2020-07-02
CN111383164A (zh) 2020-07-07
KR102683415B1 (ko) 2024-07-10

Similar Documents

Publication Publication Date Title
KR101832656B1 (ko) 컴파일러 최적화를 위한 메모리 참조 메타데이터
US10613871B2 (en) Computing system and method employing processing of operation corresponding to offloading instructions from host processor by memory's internal processor
KR102680271B1 (ko) 인터리빙을 수행하는 방법 및 장치.
US8806513B2 (en) Application programming interfaces for data parallel computing on multiple processors
US9720726B2 (en) Multi-dimensional thread grouping for multiple processors
CN110008009B (zh) 在运行时绑定常量以提高资源利用率
US10489205B2 (en) Enqueuing kernels from kernels on GPU/CPU
US8610731B2 (en) Dynamic graphics pipeline and in-place rasterization
US20150348224A1 (en) Graphics Pipeline State Object And Model
US20180373514A1 (en) Application binary interface cross compilation
US11200061B2 (en) Pre-instruction scheduling rematerialization for register pressure reduction
US10152310B2 (en) Fusing a sequence of operations through subdividing
CN113838180A (zh) 一种渲染指令处理方法及其相关设备
US8432398B2 (en) Characteristic determination for an output node
US9158545B2 (en) Looking ahead bytecode stream to generate and update prediction information in branch target buffer for branching from the end of preceding bytecode handler to the beginning of current bytecode handler
US10353591B2 (en) Fused shader programs
KR102683415B1 (ko) 런타임 수행특성을 도출하는 그래픽스 프로세싱 유닛 및 이의 동작방법
KR20230053608A (ko) 텍스처/로드 명령어 블록에 대한 연기된 gpr 할당
CN108021563B (zh) 一种指令间数据依赖的检测方法和装置
US20210097643A1 (en) Bindpoint Emulation
US9081560B2 (en) Code tracing processor selection
de Carvalho et al. Exploring heterogeneous mobile architectures with a high-level programming model
US20240202862A1 (en) Graphics and compute api extension for cache auto tiling
CN117472336B (zh) 基于程序api的代码生成装置及其方法、设备及介质
CN118689488A (zh) 一种gpu编译器前置属性配置方法

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