KR20190084761A - 커맨드 세트 기반 리플레이를 통해 수행 정보를 수집하는 프로세서 장치 - Google Patents

커맨드 세트 기반 리플레이를 통해 수행 정보를 수집하는 프로세서 장치 Download PDF

Info

Publication number
KR20190084761A
KR20190084761A KR1020180002881A KR20180002881A KR20190084761A KR 20190084761 A KR20190084761 A KR 20190084761A KR 1020180002881 A KR1020180002881 A KR 1020180002881A KR 20180002881 A KR20180002881 A KR 20180002881A KR 20190084761 A KR20190084761 A KR 20190084761A
Authority
KR
South Korea
Prior art keywords
commands
operations
events
interest
counted
Prior art date
Application number
KR1020180002881A
Other languages
English (en)
Other versions
KR102491606B1 (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 KR1020180002881A priority Critical patent/KR102491606B1/ko
Priority to US16/132,784 priority patent/US11010169B2/en
Priority to DE102018128342.3A priority patent/DE102018128342A1/de
Priority to CN201811524354.0A priority patent/CN110032489A/zh
Publication of KR20190084761A publication Critical patent/KR20190084761A/ko
Application granted granted Critical
Publication of KR102491606B1 publication Critical patent/KR102491606B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/22Microcontrol or microprogram arrangements
    • G06F9/226Microinstruction function, e.g. input/output microinstruction; diagnostic microinstruction; microinstruction format
    • 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3089Monitoring arrangements determined by the means or processing involved in sensing the monitored data, e.g. interfaces, connectors, sensors, probes, agents
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/32Monitoring with visual or acoustical indication of the functioning of the machine
    • G06F11/324Display of status information
    • 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/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/3466Performance evaluation by tracing or monitoring
    • G06F11/348Circuit details, i.e. tracer hardware
    • 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/30098Register arrangements
    • G06F9/30101Special purpose registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/86Event-based monitoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/88Monitoring involving counting

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Computer Hardware Design (AREA)
  • Advance Control (AREA)
  • Debugging And Monitoring (AREA)
  • Image Generation (AREA)

Abstract

본 개시는 스케줄러 및 수행 카운터를 포함하는 프로세서 장치를 제공한다. 스케줄러는 기능 유닛을 위해 제 1 커맨드 세트의 커맨드들 및 제 2 커맨드 세트의 커맨드들을 스케줄링한다. 수행 카운터는 기능 유닛이 제 1 커맨드 세트에 의해 지시되는 제 1 연산들 및 제 2 커맨드 세트에 의해 지시되는 제 2 연산들을 처리하는 동안 관심 이벤트들이 각각 발생하는 횟수들을 카운트한다. 제 1 연산들과 관련하여 관심 이벤트들 전부에 대한 횟수들이 카운트되도록 제 1 커맨드 세트의 커맨드들이 반복하여 스케줄링된다. 제 1 연산들과 관련하여 관심 이벤트들 전부에 대한 횟수들이 카운트된 후, 제 2 커맨드 세트의 커맨드들이 스케줄링된다. 본 개시의 프로세서 장치는 적은 용량의 메모리를 요구하고, 커맨드들 및 데이터의 일관성을 향상시킨다.

Description

커맨드 세트 기반 리플레이를 통해 수행 정보를 수집하는 프로세서 장치 {PROCESSOR DEVICE COLLECTING PERFORMANCE INFORMATION THROUGH COMMAND-SET-BASED REPLAY}
본 개시는 전자 장치에 관한 것으로, 좀 더 구체적으로는 다양한 연산을 처리하도록 구성되는 프로세서 장치의 구성들 및 동작들에 관한 것이다.
근래 다양한 유형의 전자 장치들이 이용되고 있다. 전자 장치는 그것에 포함되는 전자 회로들 및 장치들의 동작들에 따라 고유의 기능들을 수행한다. 예로서, 전자 장치는 프로세서 장치를 포함할 수 있고, 프로세서 장치의 동작들에 따라 다양한 기능을 제공할 수 있다.
프로세서 장치는 (예컨대, 사용자로부터의 또는 전자 장치 내부의 다른 구성 요소로부터의) 요청들을 처리하기 위해 논리 연산들 및/또는 산술 연산들을 수행한다. 이로써, 프로세서 장치는 요청들에 대응하는 연산 결과들을 출력한다. 이 연산 결과들은 전자 장치를 동작시키는 데에 이용된다.
예로서, 프로세서 장치들은 범용 프로세서 장치 및 전용 프로세서 장치로 분류될 수 있다. 범용 프로세서 장치는 다양한 보통의 연산을 지원할 수 있고, 전자 장치의 전반적인 동작들에 관여할 수 있다. 반면, 전용 프로세서 장치는 특정 유형의 연산들을 지원하도록 구성될 수 있다. 그래픽 프로세서 장치는 전용 프로세서 장치의 한 예이다. 예로서, 그래픽 프로세서 장치는 매우 많은 양의 그래픽 데이터를 빠르게 처리하기 위한 병렬 프로세서들을 이용하여, 그래픽 처리에 특화된 연산들을 수행할 수 있다.
연산들이 프로세서 장치에 의해 처리되는 동안, 다양한 이벤트가 발생할 수 있다. 예로서, 요구되는 데이터가 캐시 메모리에 저장되어 있거나 저장되어 있지 않을 수 있고(즉, 캐시 히트(Cache Hit) 또는 캐시 미스(Cache Miss)), 또는 버스를 통한 데이터 경로들 사이에 충돌(Collision)이 발생할 수 있다. 이러한 이벤트들은 프로세서 장치에 의해 처리되는 연산들의 성능에 영향을 줄 수 있다.
본 개시의 실시 예들은 프로세서 장치의 동작들과 관련하여 발생하는 이벤트들로부터 수행 정보(Performance Information)를 수집하기 위한 구성들 및 동작들을 제공할 수 있다. 본 개시의 실시 예들에서, 수행 정보는 커맨드 세트 기반 리플레이(Command-set-based Replay)를 통해 수집될 수 있다.
몇몇 실시 예에서, 프로세서 장치는 기능 유닛(Functional Unit), 스케줄러(Scheduler), 수행 카운터(Performance Counter), 및 레지스터(Register)를 포함할 수 있다. 기능 유닛은 복수의 커맨드 세트(예컨대, 제 1 커맨드 세트 및 제 2 커맨드 세트) 각각에 의해 지시되는 연산들을 처리할 수 있다. 스케줄러는, 기능 유닛이 제 1 커맨드 세트에 의해 지시되는 제 1 연산들 및 제 2 커맨드 세트에 의해 지시되는 제 2 연산들을 처리하도록, 제 1 커맨드 세트의 커맨드들 및 제 2 커맨드 세트의 커맨드들을 스케줄링할 수 있다. 수행 카운터는 기능 유닛이 제 1 연산들 및 제 2 연산들을 처리하는 동안 관심 이벤트(Event of Interest)들이 각각 발생하는 횟수들을 카운트할 수 있다. 레지스터들은 카운트된 횟수들에 대응하는 카운트 값들을 저장할 수 있다.
관심 이벤트들의 개수가 레지스터들의 개수보다 많은 경우, 제 1 연산들과 관련하여 관심 이벤트들 전부에 대한 횟수들이 카운트되도록 제 1 커맨드 세트의 커맨드들이 반복하여 스케줄링될 수 있고, 제 2 연산들과 관련하여 관심 이벤트들 전부에 대한 횟수들이 카운트되도록 제 2 커맨드 세트의 커맨드들이 반복하여 스케줄링될 수 있다. 따라서, 제 1 연산들과 관련하여 관심 이벤트들 전부에 대한 횟수들이 카운트되도록 제 1 연산들이 반복하여 처리될 수 있고, 제 2 연산들과 관련하여 관심 이벤트들 전부에 대한 횟수들이 카운트되도록 제 2 연산들이 반복하여 처리될 수 있다. 제 1 연산들과 관련하여 관심 이벤트들 전부에 대한 횟수들이 카운트된 후, 제 2 커맨드 세트의 커맨드들이 스케줄링될 수 있고 제 2 연산들이 처리될 수 있다.
본 개시의 실시 예들에 따르면, 리플레이를 위해 전체 함수 호출들(Full Function Calls)의 정보를 유지하는 것이 요구되지 않을 수 있다. 따라서, 제한된 개수의 레지스터들이 제공되는 환경(Condition)에서, 리플레이가 적은 용량의 메모리를 이용하여서도 구현될 수 있고, 많은 개수의 이벤트들에 관한 수행 정보를 수집하는 것이 가능할 수 있다.
나아가, 리플레이를 위한 커맨드들 및 데이터의 일관성(Consistency)이 향상될 수 있다. 따라서, 리플레이가 일관된 커맨드들 및 데이터에 기초하여 구현될 수 있고, 리플레이 결과들 사이의 연관성(Correlation)을 만들고 리플레이 결과들을 서로 매칭하는 것이 용이해질 수 있다.
도 1은 몇몇 실시 예에 따른 프로세서 장치들을 포함하는 전자 시스템의 예시적인 구성을 보여주는 블록도이다.
도 2는 도 1의 프로세서 장치들과 관련되는 예시적인 동작들을 보여주는 개념도이다.
도 3은 도 1의 프로세서 장치들과 관련되는 예시적인 동작들을 설명하기 위한 개념도이다.
도 4는 도 3의 예시적인 동작들과 관련하여 함수 호출과 커맨드 세트 사이의 예시적인 관계를 설명하기 위한 개념도이다.
도 5는 도 1의 그래픽 프로세서 장치의 동작들과 관련하여 수행 정보를 수집하는 예시적인 방법을 설명하기 위한 개념도이다.
도 6은 도 1의 그래픽 프로세서 장치와 관련되는 예시적인 구성을 보여주는 블록도이다.
도 7은 도 6의 그래픽 프로세서 장치의 동작들과 관련하여 수행 정보를 수집하는 예시적인 방법을 설명하는 흐름도이다.
도 8은 도 6의 레지스터들의 개수보다 많은 개수의 이벤트들에 대응하는 수행 정보를 수집하기 위한 리플레이를 설명하기 위한 개념도이다.
도 9는 도 6의 그래픽 프로세서 장치의 동작들과 관련하여 예시적인 리플레이를 설명하기 위한 개념도이다.
도 10은 도 9의 예시적인 리플레이를 통해 수행 정보를 수집하는 예시적인 방법을 설명하는 흐름도이다.
도 11은 도 9 및 도 10의 예시적인 리플레이를 설명하기 위한 개념도이다.
도 12 내지 도 14는 도 6의 그래픽 프로세서 장치의 동작들과 관련하여 예시적인 리플레이를 설명하기 위한 개념도들이다.
도 15는 도 12 내지 도 14의 예시적인 리플레이를 통해 수행 정보를 수집하는 예시적인 방법을 설명하는 흐름도이다.
도 16 내지 도 17b는 도 12 내지 도 15의 예시적인 리플레이와 관련하여 카운트 값들을 관리하는 예시적인 방법들을 설명하기 위한 개념도들이다.
도 18은 도 12 내지 도 15의 예시적인 리플레이를 설명하기 위한 개념도이다.
도 19 및 도 20은 도 12 내지 도 15의 예시적인 리플레이와 관련하여 커맨드 세트와 카운터 구성 값(Counter Configutaion Value) 사이의 예시적인 관계를 설명하기 위한 개념도들이다.
아래에서, 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자가 본 발명을 용이하게 실시할 수 있도록, 첨부되는 도면들을 참조하여 몇몇 실시 예가 명확하고 상세하게 설명될 것이다.
도 1은 몇몇 실시 예에 따른 프로세서 장치들(1100, 1400)을 포함하는 전자 시스템(1000)의 예시적인 구성을 보여주는 블록도이다.
전자 시스템(1000)은 메인 프로세서 장치(1100), 시스템 메모리(1200), 스토리지 장치(1300), 그래픽 프로세서 장치(1400), 디스플레이 장치(1405), 버퍼 메모리(1500), 통신 블록(1600), 유저 인터페이스(1700), 및 버스(1005)를 포함할 수 있다. 예로서, 전자 시스템(1000)은 데스크톱 컴퓨터, 랩톱 컴퓨터, 태블릿 컴퓨터, 스마트 폰, 웨어러블(Wearable) 장치, 전기 자동차, 가전기기 등과 같은 전자 장치들 중 하나일 수 있다.
메인 프로세서 장치(1100)는 전자 시스템(1000)의 전반적인 동작들을 제어하기 위해 다양한 논리/산술 연산을 처리할 수 있다. 예로서, 메인 프로세서 장치(1100)는 FPGA(Field Programmable Gate Array), ASICs(Application Specific Integrated Circuits) 등과 같은 전자 회로를 포함할 수 있다. 예로서, 메인 프로세서 장치(1100)는 하나 이상의 프로세서 코어를 포함할 수 있고, 범용 프로세서 또는 어플리케이션 프로세서로 구현될 수 있다.
시스템 메모리(1200)는 메인 프로세서 장치(1100)에 의해 처리된 또는 처리될 데이터를 저장할 수 있다. 예로서, 시스템 메모리(1200)는 SRAM(Static Random Access Memory), DRAM(Dynamic RAM), SDRAM(Synchronous RAM) 등과 같은 휘발성 메모리, 및/또는 PRAM(Phase-change RAM), MRAM(Magneto-resistive RAM), ReRAM(Resistive RAM), FRAM(Ferro-electric RAM) 등과 같은 불휘발성 메모리를 포함할 수 있다.
스토리지 장치(1300)는 전력 공급에 관계없이 데이터를 저장할 수 있다. 예로서, 스토리지 장치(1300)는 SSD(Solid State Drive), 카드 스토리지, 임베디드(Embedded) 스토리지 등과 같은 스토리지 매체를 포함할 수 있다.
그래픽 프로세서 장치(1400)는 특정 유형의 연산들을 처리하도록 구성될 수 있다. 예로서, 그래픽 프로세서 장치(1400)는 디스플레이 장치(1405)에 영상 정보를 표시하기 위해 그래픽 처리에 특화된 연산들을 처리할 수 있다. 예로서, 그래픽 프로세서 장치(1400)는 매우 많은 양의 그래픽 데이터를 빠르게 처리하기 위한 병렬 프로세서들을 이용하여, 그래픽 처리에 특화된 연산들을 수행할 수 있다. 그래픽 프로세서 장치(1400)는 연산들을 수행하기 위해 FPGA, ASICs, 고정(Fixed) 논리 회로 등과 같은 전자 회로를 포함할 수 있다.
디스플레이 장치(1405)는 그래픽 프로세서 장치(1400)의 출력에 기초하여 사용자에게 영상 정보를 제공할 수 있다. 예로서, 디스플레이 장치(1405)는 OLED(Organic Light Emitting Diode) 디스플레이 장치, AMOLED(Active Matrix OLED) 디스플레이 장치 등으로 구현될 수 있다.
버퍼 메모리(1500)는 그래픽 프로세서 장치(1400)에 의해 처리된 또는 처리될 데이터를 저장할 수 있다. 예로서, 버퍼 메모리(1500)는 SRAM, DRAM, SDRAM 등과 같은 휘발성 메모리, 및/또는 PRAM, MRAM, ReRAM, FRAM 등과 같은 불휘발성 메모리를 포함할 수 있다.
몇몇 실시 예에서, 도 1에 나타낸 것처럼, 그래픽 프로세서 장치(1400)는 메인 프로세서 장치(1100)와 별개일 수 있다. 예로서, 메인 프로세서 장치(1100)는 CPU(Central Processing Unit)로 이해될 수 있고, 그래픽 프로세서 장치(1500)는 GPU(Graphic Processing Unit)로 이해될 수 있다. 예로서, 그래픽 프로세서 장치(1400) 및 버퍼 메모리(1500)는 하나의 그래픽 카드 모듈로 구현될 수 있다.
몇몇 실시 예에서, 도 1의 도시와 달리, 그래픽 프로세서 장치(1400)는 메인 프로세서 장치(1100)와 함께 하나의 칩 또는 모듈로 구현될 수 있다. 예로서, 어플리케이션 프로세서는 SoC(System on Chip)로 구현될 수 있고, 메인 프로세서 장치(1100) 및 그래픽 프로세서 장치(1400) 모두의 구성들을 포함할 수 있다.
몇몇 실시 예에서, 도 1에 나타낸 것처럼, 버퍼 메모리(1500)는 시스템 메모리(1200)와 별개일 수 있다. 몇몇 실시 예에서, 도 1의 도시와 달리, 버퍼 메모리(1500)는 시스템 메모리(1200)와 함께 하나의 메모리로 구현될 수 있고, 이 하나의 메모리는 메인 프로세서 장치(1100) 및 그래픽 프로세서 장치(1400)에 의해 공유될 수 있다.
이처럼, 전자 시스템(1000)의 구성은 다양하게 변경 또는 수정될 수 있다. 도 1의 예시적인 구성은 더 나은 이해를 가능하게 하기 위해 제공되고, 본 발명을 한정하도록 의도되지 않는다.
통신 블록(1600)은 전자 시스템(1000)의 외부 장치/시스템과 통신하기 위해 다양한 무선 통신 규약 및/또는 다양한 유선 통신 규약 중 적어도 하나를 지원할 수 있다. 유저 인터페이스(1700)는 사용자와 전자 시스템(1000) 사이의 통신을 중재하기 위해 다양한 입력 인터페이스들 및 다양한 출력 인터페이스들을 포함할 수 있다.
버스(1005)는 전자 시스템(1000)의 구성 요소들 사이에서 통신 경로를 제공할 수 있다. 전자 시스템(1000)의 구성 요소들은 버스(1005)의 버스 포맷에 따라 데이터를 교환할 수 있다. 예로서, 버스 포맷은 USB(Universal Serial Bus), SCSI(Small Computer System Interface), PCIe(Peripheral Component Interconnect Express), M-PCIe(Mobile PCIe), SATA(Serial Advanced Technology Attachment), SAS(Serial Attached SCSI) 등과 같은 다양한 인터페이스 규약 중 하나 이상을 포함할 수 있다.
메인 프로세서 장치(1100) 및 시스템 메모리(1200)는 호스트 시스템(1002)을 구성할 수 있다. 호스트 시스템(1002)은 버스(1005)를 통해 전자 시스템(1000)의 다른 구성 요소들로 액세스할 수 있다. 예로서, 호스트 시스템(1002)은, 디스플레이 장치(1405)가 영상 정보를 표시하도록, 그래픽 프로세서 장치(1400)와 통신하거나 버퍼 메모리(1500)로 액세스할 수 있다. 이 예에서, 그래픽 프로세서 장치(1400)는 호스트 시스템(1002)의 슬레이브(Slave) 장치로서 이해될 수 있다.
메인 프로세서 장치(1100) 및 그래픽 프로세서 장치(1400)는 본 개시의 실시 예들에 따라 구현될 수 있다. 메인 프로세서 장치(1100) 및 그래픽 프로세서 장치(1400)와 관련되는 예시적인 구성들 및 예시적인 동작들이 도 2 내지 도 20을 참조하여 설명될 것이다.
다만, 아래의 설명들에서 메인 프로세서 장치(1100) 및 그래픽 프로세서 장치(1400)와 관련되는 실시 예들이 제공되지만, 본 발명은 여기에 한정되지 않는다. 본 개시의 실시 예들은 (예컨대, 지금까지 개발된 및 미래에 개발될) 어떠한 종류의 프로세서 장치에서든 채용될 수 있음이 잘 이해될 것이다. 아래의 설명들은 더 나은 이해를 가능하게 하기 위해 제공되고, 본 발명을 한정하도록 의도되지 않는다.
도 2는 도 1의 프로세서 장치들(1100, 1400)과 관련되는 예시적인 동작들을 보여주는 개념도이다.
스토리지 장치(1300)는 어플리케이션(AP)의 데이터 및 GPU 드라이버(GD)의 데이터를 저장할 수 있다. 어플리케이션(AP)은 전자 시스템(1000)이 어플리케이션(AP)의 프로그램 코드들에 의해 정의되는 연산들을 수행하여 사용자에게 서비스를 제공하게 하는 소프트웨어 및/또는 펌웨어일 수 있다. 예로서, 어플리케이션(AP)은 운영체제 및/또는 유저 어플리케이션(예컨대, 멀티미디어 재생 어플리케이션, 비디오 게임 어플리케이션 등)을 포함할 수 있다.
사용자는 전자 시스템(1000)의 최종 사용자(End-user)일 수 있다. 또는, 사용자는 전자 시스템(1000) 또는 프로세서 장치들(1100, 1400)의 설계자일 수 있고, 또는 어플리케이션(AP)의 개발자일 수 있다.
GPU 드라이버(GD)는 그래픽 프로세서 장치(1400)를 동작시키거나 제어하도록 구성되는 소프트웨어 및/또는 펌웨어일 수 있다. GPU 드라이버(GD)는 전자 시스템(1000)의 하드웨어 구성 요소(예컨대, 메인 프로세서 장치(1100))에게 그래픽 프로세서 장치(1400)로의 인터페이싱을 제공할 수 있고, 어플리케이션(AP)이 그래픽 프로세서 장치(1400)의 하드웨어 기능들에 액세스할 수 있게 할 수 있다.
예로서, 어플리케이션(AP)을 실행하기 위한 요청이 제공될 수 있다. 이 요청은 유저 인터페이스(1700)를 통해 사용자로부터 수신되거나, 특정 조건의 충족에 응답하여 전자 시스템(1000) 내부에서 발생할 수 있다. 어플리케이션(AP)의 데이터는 이 요청에 응답하여 시스템 메모리(1200)로 로드될 수 있다.
GPU 드라이버(GD)의 데이터 역시 시스템 메모리(1200)로 로드될 수 있다. GPU 드라이버(GD)의 데이터는 전자 시스템(1000)의 동작이 개시될 경우(예컨대, 전자 시스템(1000)이 부팅될 경우)에 로드되거나, 그래픽 프로세서 장치(1400)와의 인터페이싱이 요구되는 경우에 로드될 수 있다.
GPU 드라이버(GD)의 데이터가 시스템 메모리(1200)로 로드됨에 따라, 메인 프로세서 장치(1100)는 GPU 드라이버(GD)의 프로그램 코드들에 의해 지시되는(Directed) 인스트럭션 세트(Instruction Set)를 처리할 수 있다. 따라서, GPU 드라이버(GD)가 메인 프로세서 장치(1100)의 연산들에 따라 호스트 시스템(1002) 상에서 실행될 수 있다.
예로서, 어플리케이션(AP)의 프로그램 코드들은 그래픽 프로세서 장치(1400)의 하드웨어 기능들을 이용하도록 구성되는 부분을 포함할 수 있다. 이 부분은 그래픽 프로세서 장치(1400)에서 처리될 수 있다. 이를 위해, 그래픽 프로세서 장치(1400)에서 처리될 부분은 GPU 드라이버(GD)로 제공될 수 있다.
GPU 드라이버(GD)는 어플리케이션(AP)의 프로그램 코드들 중 그래픽 프로세서 장치(1400)에서 처리될 부분에 기초하여, 그래픽 프로세서 장치(1400)에게 태스크(Task)를 할당할 수 있다. 태스크는 그래픽 프로세서 장치(1400)에 의해 제공되는 하드웨어 기능들을 이용하여 수행될 작업부하(Workload)를 나타낼 수 있다.
그래픽 프로세서 장치(1400)는 하나 이상의 기능 유닛(Functional Unit; FUs)을 포함할 수 있다. 기능 유닛들(FUs)은 GPU 드라이버(GD)로부터 할당되는 태스크를 처리하도록 구성될 수 있다. 이를 위해, 기능 유닛들(FUs) 각각은 하나 이상의 프로세서 코어 및/또는 하나 이상의 (프로그램 가능(Programmable) 및/또는 고정) 논리 회로를 포함할 수 있다.
예로서, 기능 유닛들(FUs)은 버텍스(Vertex) 데이터에 기초하여 프리미티브(Primitive)들을 그리기(Construct) 위한 프리미티브 어셈블러, 프리미티브들에 기초하여 프래그먼트(Fragment) 및 커버리지(Coverage)의 데이터를 생성하기 위한 래스터라이저(Rasterizer), 쉐이더(Shader) 프로그램에 의해 지시되는 인스트럭션 세트를 처리하기 위한 쉐이더 코어(Shader Core), 특수 기능들(예컨대, 삼각형 복사, 픽셀 블렌딩(Pixel Blending) 등)을 수행하기 위한 특수 연산 유닛 등을 포함할 수 있다. 예로서, 기능 유닛들(FUs)은 GPGPU(General-purpose computing on GPU)의 기능을 제공할 수 있다.
다만, 위 예들은 더 나은 이해를 가능하게 하기 위해 제공되고, 본 발명은 위 예들로 한정되지 않는다. 기능 유닛들(FUs)은 그래픽 처리와 관련되는 연산들을 수행하기 위해 다양한 유형의 기능 유닛들을 포함할 수 있다. 기능 유닛들(FUs)은 태스크를 처리한 것의 결과들을 GPU 드라이버(GD)로 반환할 수 있다. 따라서, 그래픽 프로세서 장치(1400)의 하드웨어 기능들을 요구하는 어플리케이션(AP)의 프로그램 코드 부분이 처리될 수 있다.
예로서, 메인 프로세서 장치(1100)는 그래픽 프로세서 장치(1400)가 연산들을 수행하도록 그래픽 프로세서 장치(1400)를 제어할 수 있다. 버퍼 메모리(1500)는 그래픽 프로세서 장치(1400)로부터의 연산 결과들(예컨대, 태스크를 처리한 것의 결과들)을 저장할 수 있고, 메인 프로세서 장치(1100)는 버퍼 메모리(1500)로 액세스하여 연산 결과들을 획득할 수 있다. 따라서, 그래픽 프로세서 장치(1400)로부터의 연산 결과들이 GPU 드라이버(GD)로 제공될 수 있다.
예로서, 어플리케이션(AP)의 프로그램 코드들은 메인 프로세서 장치(1100)에서 처리될 부분을 포함할 수 있다. 메인 프로세서 장치(1100)에서 처리될 부분은 그래픽 처리와 관련되지 않는 보통의 산술/논리 연산을 지시할 수 있다. 추가로 또는 대안적으로, 메인 프로세서 장치(1100)에서 처리될 부분은 그래픽 프로세서 장치(1400)의 그래픽 처리에서 이용될 텍스처(Texture) 데이터를 생성하기 위한 산술/논리 연산을 지시할 수 있다.
이 방식으로, 메인 프로세서 장치(1100) 및 그래픽 프로세서 장치(1400)는 어플리케이션(AP)의 프로그램 코드들에 의해 정의되는 연산들을 수행하고 처리할 수 있다. 어플리케이션(AP)은 연산들을 수행/처리한 것의 결과에 기초하여 사용자에게 서비스를 제공할 수 있다.
도 3은 도 1의 프로세서 장치들(1100, 1400)과 관련되는 예시적인 동작들을 설명하기 위한 개념도이다.
어플리케이션(AP)의 프로그램 코드들은 메인 프로세서 장치(1100)에서 처리될 부분 및 그래픽 프로세서 장치(1400)에서 처리될 부분을 포함할 수 있다. 메인 프로세서 장치(1100)는 메인 프로세서 장치(1100)에서 처리될 프로그램 코드 부분에 기초하여, 어플리케이션(AP)에 의해 요구되는 연산들을 처리할 수 있다.
몇몇 실시 예에서, 그래픽 프로세서 장치(1400)에서 처리될 프로그램 코드 부분은 그래픽스 API(Application Programming Interface)에 기초하여 작성될 수 있다. 예로서, 그래픽 프로세서 장치(1400)에서 처리될 프로그램 코드 부분은 Direct3D, OpenGL, EGL, OpenCL 등과 같은 API 라이브러리 또는 프레임워크에 기초하여 작성될 수 있다. 이 실시 예들에서, 어플리케이션(AP)이 실행됨에 따라, 그래픽 프로세서 장치(1400)에서 처리될 프로그램 코드 부분으로부터 함수 호출(Function Call)들이 생성될 수 있다.
다만, 위 예들은 더 나은 이해를 가능하게 하기 위해 제공되고, 본 발명을 한정하도록 의도되지 않는다. 그래픽 프로세서 장치(1400)에서 처리될 프로그램 코드 부분은 다른 유형의 라이브러리 또는 프레임워크에 기초하여 작성될 수 있고, 또는 특정 라이브러리 또는 프레임워크 없이 보통의 프로그램 코드들로 작성될 수 있다. 프로그램 코드를 작성하는 방식과 무관하게, 어플리케이션(AP)이 실행됨에 따라 함수, 메소드(Method), 또는 그 외 다른 형태의 모듈 블록이 호출될 수 있다.
함수 호출들은 GPU 드라이버(GD)로 입력될 수 있다. GPU 드라이버(GD)는 함수 호출들을 커맨드 세트(Command Set)들로 변환할 수 있다. 커맨드 세트는 함수 호출들을 그래픽 프로세서 장치(1400)에 의해 처리될 수 있는 포맷으로 변경함으로써 생성될 수 있다. 그래픽 프로세서 장치(1400)는 함수 호출들을 직접 처리하지는 못할 수 있고, GPU 드라이버(GD)에 의해 준비된 커맨드 세트를 이해하고 처리할 수 있다.
그래픽 프로세서 장치(1400)는 (예컨대, 버스(1005)를 통해) 커맨드 세트들을 수신할 수 있고, 수신된 커맨드 세트들에 의해 지시되는 연산들을 처리할 수 있다. 이로써, 그래픽 프로세서 장치(1400)는 어플리케이션(AP)의 프로그램 코드들 중 그래픽 프로세서 장치(1400)에서 처리될 부분에 대응하는 연산들을 수행할 수 있다.
도 4는 도 3의 예시적인 동작들과 관련하여 함수 호출과 커맨드 세트 사이의 예시적인 관계를 설명하기 위한 개념도이다.
예로서, M개의 함수 호출이 하나의 함수 호출 그룹을 구성할 수 있다. 예로서, 제 1 내지 제 M 함수 호출들은 제 1 함수 호출 그룹을 구성할 수 있다. 유사하게, 제 2 내지 제 N 함수 호출 그룹이 구성될 수 있다. 다만, 몇몇 예에서, 각 함수 호출 그룹들을 구성하는 함수 호출들의 개수는 서로 다를 수 있다.
예로서, 하나의 함수 호출 그룹은 하나의 커맨드 세트로 변환될 수 있다. 예로서, 제 1 커맨드 세트는 제 1 함수 호출 그룹의 함수 호출들에 기초하여 생성될 수 있고, 제 2 커맨드 세트는 제 2 함수 호출 그룹의 함수 호출들에 기초하여 생성될 수 있다. 하나의 함수 호출 그룹은 하나의 커맨드 세트를 구성할 수 있는 함수 호출들을 포함할 수 있다.
하나의 커맨드 세트는 하나의 패킷 단위 또는 하나의 배치 단위로 구성될 수 있다. 하나의 커맨드 세트는 커맨드 큐(Command Queue)(예컨대, 도 6의 커맨드 큐(CQ))로 입력되고 커맨드 큐에서 관리되는 하나의 단위에 대응할 수 있다.
하나의 커맨드 세트에 포함되는 커맨드들은 커맨드 큐로 함께 입력될 수 있고, 하나의 처리 구간(Processing Interval)에서 함께 일련하여 처리될 수 있다. 예로서, 제 1 커맨드 세트에 포함되는 커맨드들은 하나의 처리 구간에서 일련하여 처리될 수 있고, 제 2 커맨드 세트에 포함되는 커맨드들은 다른 하나의 처리 구간에서 일련하여 처리될 수 있다.
도 5는 도 1의 그래픽 프로세서 장치(1400)의 동작들과 관련하여 수행 정보(Performance Information)를 수집하는 예시적인 방법을 설명하기 위한 개념도이다.
그래픽 프로세서 장치(1400)가 함수 호출들과 관련하여 커맨드 세트들에 의해 지시되는 연산들을 처리하는 동안, 다양한 이벤트가 발생할 수 있다. 예로서, 이벤트들은 캐시 미스(즉, 요구되는 데이터가 캐시 메모리에 저장되어 있지 않음), 버스 충돌(즉, 버스를 통한 데이터 경로들 사이에 충돌이 발생함), 처리 유휴 상태(즉, 특정 기능 유닛 또는 프로세서가 연산 처리 없이 유휴함) 등과 같은 하드웨어 관련 상태들을 포함할 수 있다.
예로서, 이벤트들은 버텍스 카운트(즉, 특정 기능 유닛에 대한 입력 또는 출력 버텍스들의 수), 프리미티브 카운트(즉, 특정 기능 유닛에 대한 입력 또는 출력 프리미티브들의 수) 등과 같은 그래픽스 관련 상태들을 포함할 수 있다. 다만, 이 예들은 더 나은 이해를 가능하게 하기 위해 제공되고, 본 발명을 한정하도록 의도되지 않는다. 이벤트들은 그래픽 프로세서 장치(1400)가 연산들을 처리하는 동안 발생하는 다양한 상태를 포함할 수 있다.
이러한 이벤트들은 그래픽 프로세서 장치(1400)의 연산 성능 및 연산 특성에 영향을 줄 수 있다. 예로서, 빈번한 캐시 미스는 연산 성능을 저하시킬 수 있다. 따라서, 수행 정보(예컨대, 그래픽 프로세서 장치(1400)가 연산들을 수행하는 동안 어떤 이벤트들이 발생하고 각 이벤트가 얼마나 많이 발생하는지와 관련되는 정보)를 수집하는 것은 어플리케이션(AP) 및 그래픽 프로세서 장치(1400)의 성능 및 특성을 분석하고 개선하는 데에 유익할 수 있다.
예로서, 수집된 수행 정보는 어플리케이션(AP)에 의해 요구되는 연산들의 병목 원인을 분석하고 어플리케이션(AP)의 프로그램 코드들을 최적화하기 위해 참조될 수 있다. 예로서, 수집된 수행 정보는 어플리케이션(AP)에 의해 요구되는 연산들이 수행되는 동안 발생하는 오류 또는 예외를 디버깅(Debug)하기 위해 참조될 수 있다.
이처럼, 수집된 수행 정보는 어플리케이션(AP)에 의해 제공되는 서비스를 개선하기 위해 다양하게 이용될 수 있다. 예로서, 전자 시스템(1000)은 수집된 수행 정보에 기초하여 자동으로 분석/개선 작업을 수행할 수 있다. 예로서, 전자 시스템(1000)은 수집된 수행 정보를 파일 또는 데이터베이스의 형태로 (예컨대, 스토리지 장치(1300)에) 저장하거나 디스플레이 장치(1405) 또는 유저 인터페이스(1700)를 통해 사용자에게 출력할 수 있다. 사용자는 수집된 수행 정보를 참조하여 수동으로 분석/개선 작업을 수행할 수 있다.
수행 정보를 수집하고 분석/개선 작업을 수행하는 것은 수행 프로파일링(Performance Profiling)으로 언급될 수 있다. 수행 프로파일링은 어플리케이션(AP)의 프로그램 코드들 중 그래픽 프로세서 장치(1400)에서 처리되는 부분의 전부 또는 일부에 대해 수행될 수 있다. 예로서, 사용자는 수행 프로파일링의 대상인 부분의 시작점 및 종료점을 선택할 수 있다. 이 예에서, 수행 프로파일링은 시작점과 종료점 사이의 수행 프로파일링 대상에 대응하는 함수 호출들과 관련하여 수행될 수 있다. 또는, 사용자는 렌더링의 결과로서 얻어질 프레임(Frame)의 단위로 수행 프로파일링의 대상을 지정할 수도 있다.
도 6은 도 1의 그래픽 프로세서 장치(1400)와 관련되는 예시적인 구성을 보여주는 블록도이다.
몇몇 실시 예에서, 그래픽 프로세서 장치(1400)는 스케줄러(Scheduler; 1410), 기능 유닛들(1431 내지 1439), 수행 카운터들(Performance Counters; 1451 내지 1459), 및 레지스터들(Registers; 1471 내지 1479)을 포함할 수 있다. 다만, 그래픽 프로세서 장치(1400)의 구성은 도 6의 도시와 달리 다양하게 변경 또는 수정될 수 있다. 그래픽 프로세서 장치(1400)는 도 6에 나타내지 않은 구성 요소를 더 포함하거나, 도 6에 나타낸 구성 요소들 중 일부를 포함하지 않을 수 있다.
스케줄러(1410)는 GPU 드라이버(GD)로부터 커맨드 세트들을 수신할 수 있다. 스케줄러(1410)는 수신된 커맨드 세트들의 커맨드들을 커맨드 큐(CQ)에서 관리할 수 있다. 커맨드 큐(CQ)는 커맨드들을 커맨드 세트 단위로 관리하기 위해 버퍼 메모리(1500) 상의 메모리 영역에 할당될 수 있다.
기능 유닛들(1431 내지 1439)은 도 2의 기능 유닛들(FUs)에 대응할 수 있다. 기능 유닛들(1431 내지 1439)은 GPU 드라이버(GD)로부터 할당되는 태스크들을 처리할 수 있다. 이를 위해, 스케줄러(1410)는 커맨드들을 스케줄링할 수 있고(예컨대, 커맨드들을 처리하는 순서를 배열하거나 커맨드들 사이의 관계를 정립(Establish)할 수 있고), 따라서 기능 유닛들(1431 내지 1439)은 커맨드 세트들 각각에 의해 지시되는 연산들을 수행하고 처리할 수 있다.
기능 유닛들(1431 내지 1439)로부터의 연산 결과들(OR)은 버퍼 메모리(1500)에 저장될 수 있다. 메인 프로세서 장치(1100)는 버퍼 메모리(1500)로 액세스하여 연산 결과들(OR)을 획득할 수 있다.
수행 카운터들(1451 내지 1459)은 기능 유닛들(1431 내지 1439)이 연산들을 처리하는 동안 이벤트들이 각각 발생하는 횟수들을 카운트할 수 있다. 예로서, 수행 카운터들(1451 내지 1459)은 커맨드 세트들에 의해 지시되는 연산들이 처리되는 동안 캐시 미스가 발생하는 횟수를 카운트할 수 있다. 이러한 방식으로, 수행 정보가 수집될 수 있다.
몇몇 경우, 사용자 또는 전자 시스템(1000)은 다양한 이벤트 중 특정 이벤트의 발생에 관심이 있을 수 있다. 예로서, 사용자 또는 전자 시스템(1000)은 캐시 미스, 처리 유휴 상태 등과 같이 성능 저하를 야기하는 이벤트들에 관심이 있을 수 있다. 이러한 특정 이벤트는 관심 이벤트(Event of Interest)로 언급될 수 있다. 수행 정보를 수집하는 것은 모든 이벤트들에 대해 수행되거나, 몇몇 이벤트(예컨대, 관심 이벤트들)에 대해 수행될 수 있다.
예로서, 카운터 구성(Counter Configuration)들에 관한 정보가 스케줄러(1410)에서 수신될 수 있다. 예로서, 카운터 구성 정보는 유저 인터페이스(1700)를 통해 사용자로부터 수신되거나, 전자 시스템(1000) 내부에서 생성될 수 있다.
예로서, 카운터 구성 정보는 관심 이벤트들과 관련되는 수행 정보를 수집하는 데에 요구되는 수행 카운터들(1451 내지 1459)의 구성들(예컨대, 설정 값들, 동작 조건들 등)을 설정하기 위해 이용될 수 있다. 예로서, 관심 이벤트가 캐시 미스를 포함하는 경우, 카운터 구성 정보는 기능 유닛들(1431 내지 1439)과 관련하여 캐시 미스가 발생하는 횟수를 카운트하는 데에 적합하도록 수행 카운터들(1451 내지 1459)의 구성들을 설정하기 위해 이용될 수 있다.
스케줄러(1410)는 카운터 구성 정보에 기초하여, 수행 카운터들(1451 내지 1459)이 관심 이벤트들에 대한 횟수들을 카운트하도록, 수행 카운터들(1451 내지 1459)의 구성들을 설정할 수 있다. 스케줄러(1410)의 설정에 기초하여, 수행 카운터들(1451 내지 1459)은 커맨드 세트들 각각에 의해 지시되는 연산들을 처리하는 것과 관련하여 관심 이벤트들이 각각 발생하는 횟수들을 카운트할 수 있다.
도 6은 수행 카운터들(1451 내지 1459)이 각각 기능 유닛들(1431 내지 1439)에 대응하는 예시적인 구성을 보여준다. 이 구성에서, 수행 카운터들(1451 내지 1459)은 각 기능 유닛들(1431 내지 1439)에 의해 처리되는 연산들과 관련하여 관심 이벤트들에 대한 횟수들을 카운트할 수 있다.
다만, 본 발명은 도 6의 도시로 한정되지 않는다. 몇몇 실시 예에서, 도 6의 도시와 달리, 하나의 수행 카운터가 복수의 기능 유닛에 대응하거나 복수의 수행 카운터가 하나의 기능 유닛에 대응하도록, 그래픽 프로세서 장치(1400)의 구성이 변경 또는 수정될 수 있다.
레지스터들(1471 내지 1479)은 카운트 값들을 저장할 수 있다. 카운트 값은 수행 카운터들(1451 내지 1459)에 의해 카운트된 횟수에 대응할 수 있다. 예로서, 기능 유닛들(1431 내지 1439)이 연산들을 처리하는 동안, 수행 카운터들(1451 내지 1459)은 카운트된 횟수들에 기초하여, 레지스터들(1471 내지 1479)에 저장된 카운트 값들을 변경 또는 갱신할 수 있다.
예로서, 기능 유닛들(1431 내지 1439)이 연산들을 처리하는 것을 완료한 경우, 레지스터들(1471 내지 1479)에 저장되었던 카운트 값들(CV)은 버퍼 메모리(1500)에 저장될 수 있다. 예로서, 메인 프로세서 장치(1100)는 버퍼 메모리(1500)로 액세스하여 카운트 값들(CV)을 획득할 수 있다. 카운트 값들(CV)은 수행 정보로써 수집될 수 있고, 수행 프로파일링은 카운트 값들(CV)에 기초하여 수행될 수 있다.
도 7은 도 6의 그래픽 프로세서 장치(1400)의 동작들과 관련하여 수행 정보를 수집하는 예시적인 방법을 설명하는 흐름도이다.
예로서, 사용자(10)는 수행 프로파일링의 시작점 및 종료점을 선택할 수 있고, 몇몇 경우, 프로파일링 구성들을 선택할 수 있다(S110). 예로서, 사용자(10)는 유저 인터페이스(1700)를 통해 시작점, 종료점, 및 프로파일링 구성들의 정보를 전자 시스템(1000)으로 입력할 수 있다.
프로파일링 구성들은 수행 프로파일링의 조건과 관련되는 다양한 정보를 포함할 수 있다. 예로서, 프로파일링 구성들은 관심 이벤트들에 관한 정보를 포함할 수 있다. 사용자(10)가 프로파일링 구성들을 입력함에 따라, 관심 이벤트들과 관련하여 수행 프로파일링이 제공될 수 있다.
예로서, 사용자(10)는 어플리케이션(AP)의 실행을 요청할 수 있다(S120). 메인 프로세서 장치(1100)는 요청된 실행에 응답할 수 있다. 메인 프로세서 장치(1100)의 제어에 따라, 어플리케이션(AP)의 데이터가 시스템 메모리(1200)로 로드될 수 있고, 어플리케이션(AP)의 프로그램 코드들에 의해 정의되는 연산들이 수행되고 처리될 수 있다. 몇몇 실시 예에서, S110 및 S120 동작들은 특정 조건의 충족에 응답하여 전자 시스템(1000) 내부에서 트리거(Trigger)될 수 있다.
메인 프로세서 장치(1100)는 어플리케이션(AP)의 프로그램 코드들 중 그래픽 프로세서 장치(1400)에서 처리될 부분의 전달을 제어할 수 있다(S130). 메인 프로세서 장치(1100)의 제어에 따라, GPU 드라이버(GD)는 어플리케이션(AP)의 실행에 따라 생성되는 함수 호출들에 기초하여 커맨드 세트들을 생성할 수 있고, 또한 프로파일링 구성들에 기초하여 카운터 구성 정보를 생성할 수 있다(S140).
그래픽 프로세서 장치(1400)에서, 스케줄러(1410)는 커맨드 세트들 및 카운터 구성 정보를 수신할 수 있다. 스케줄러(1410)는 커맨드 세트들의 커맨드들을 스케줄링할 수 있고, 수행 카운터들(1451 내지 1459)의 구성들을 설정할 수 있다(S150). 나아가, 스케줄러(1410)는 커맨드들을 기능 유닛들(1431 내지 1439)로 보낼(Dispatch) 수 있다(S160).
따라서, 기능 유닛들(1431 내지 1439)은 커맨드들에 의해 지시되는 연산들을 커맨드 세트 단위로 처리할 수 있고, 수행 카운터들(1451 내지 1459)은 연산들이 처리되는 동안 관심 이벤트들이 각각 발생하는 횟수들을 카운트할 수 있다(S170). 카운트된 횟수들은 레지스터들(1471 내지 1479)에 임시로 저장될 수 있고, 연산 처리가 완료된 후에 카운트 값들(CV)이 버퍼 메모리(1500)에 저장될 수 있다(S180).
메인 프로세서 장치(1100)는 버퍼 메모리(1500)에 저장된 카운트 값들(CV)에 기초하여, 수행 정보 또는 수행 프로파일링 결과를 생성할 수 있다(S190). 예로서, 수행 정보 또는 수행 프로파일링 결과는 수치 통계 정보를 포함하여 스토리지 장치(1300)에 저장되거나, 그래프 또는 표의 형태로 출력될 수 있다. 예로서, 사용자(10)는 수행 정보 또는 수행 프로파일링 결과를 활용하여 어플리케이션(AP)을 분석하고 개선할 수 있다.
도 8은 도 6의 레지스터들(1471, 1472, 1479)의 개수보다 많은 개수의 이벤트들에 대응하는 수행 정보를 수집하기 위한 리플레이를 설명하기 위한 개념도이다.
더 나은 이해를 가능하게 하기 위해, 그래픽 프로세서 장치(1400)가 3개의 레지스터(1471, 1472, 1479)를 포함하는 것으로 가정될 것이다. 레지스터들(1471, 1472, 1479) 각각은 하나의 이벤트에 대해 카운트되는 횟수를 저장할 수 있다.
몇몇 경우, 관심 이벤트들의 개수가 레지스터들(1471, 1472, 1479)의 개수보다 많을 수 있다. 예로서, 사용자(10) 또는 전자 시스템(1000)은 12개의 이벤트에 관심이 있을 수 있다. 예로서, 제 1, 제 2 및 제 3 이벤트들은 제 1 이벤트 세트를 구성할 수 있다. 유사하게, 제 4 내지 제 12 이벤트들은 제 2 내지 제 4 이벤트 세트들을 구성할 수 있다. 다만, 레지스터들의 개수 및 관심 이벤트들의 개수는 다양하게 변경 또는 수정될 수 있고, 본 발명은 본 개시에서 설명되는 예시들로 한정되지 않는다.
한편, 3개의 레지스터(1471, 1472, 1479)는 3개의 관심 이벤트에 대해 카운트되는 횟수들을 저장할 수 있고, 12개의 관심 이벤트 전부에 대해 카운트되는 횟수들을 저장하지 못할 수 있다. 이 경우, 12개의 관심 이벤트 전부가 각각 수행되는 횟수들을 카운트하기 위해, 어플리케이션(AP)의 프로그램 코드들에 의해 지시되는 연산들을 시작점과 종료점 사이에서 4번 반복하는 것이 요구될 수 있다.
예로서, 제 1, 제 2 및 제 3 이벤트들에 대한 횟수들이 카운트되도록 제 1 플레이(Play)가 제공될 수 있다. 여기서, 하나의 플레이는 특정 구간 내에서 어플리케이션(AP)의 프로그램 코드들에 의해 지시되는(즉, 커맨드 세트들에 의해 지시되는) 연산들을 수행하고 처리하는 것을 의미할 수 있다. 제 1 플레이가 수행되는 동안, 제 1, 제 2 및 제 3 이벤트들과 관련하여 수행 정보가 수집될 수 있다. 유사하게, 제 2 내지 제 4 플레이들이 제 4 내지 제 12 이벤트들에 대한 횟수들을 카운트하기 위해 제공될 수 있다.
즉, 관심 이벤트들의 개수가 레지스터들의 개수보다 많은 경우, 관심 이벤트들 전부와 관련하여 수행 정보를 수집하기 위해 어플리케이션(AP)의 프로그램 코드들에 의해 지시되는 연산들이 리플레이(Replay)될 수 있다. 여기서, 리플레이는 동일한 플레이를 여러 번 반복하는 것을 의미할 수 있다.
다만, 커맨드 세트들 각각에 의해 지시되는 연산들의 매 반복마다(즉, 매 플레이마다), 상이한 관심 이벤트들에 대한 횟수들이 카운트될 수 있다. 예로서, 제 1 플레이와 관련하여 제 1, 제 2 및 제 3 이벤트들에 대한 횟수들이 카운트될 수 있고, 제 2 플레이와 관련하여 제 4, 제 5 및 제 6 이벤트들에 대한 횟수들이 카운트될 수 있다. 하나의 플레이는 하나의 이벤트 세트와 관련하여 수행될 수 있다.
레지스터들의 개수가 증가하는 경우, 플레이들이 반복되는 횟수가 감소할 수 있고 리플레이의 효율이 향상될 수 있다. 그러나, 레지스터들의 개수가 증가하는 경우, 그래픽 프로세서 장치(1400)를 제작하는 비용 및 그래픽 프로세서 장치(1400)의 크기 역시 증가할 수 있다. 따라서, 그래픽 프로세서 장치(1400)는 한정된 개수의 레지스터들(1471, 1472, 1479)을 포함할 수 있다.
도 9는 도 6의 그래픽 프로세서 장치(1400)의 동작들과 관련하여 예시적인 리플레이를 설명하기 위한 개념도이다.
예로서, 시작점과 종료점 사이의 제 2 함수 호출 그룹 내지 제 (N-1) 함수 호출 그룹의 함수 호출들과 관련하여 수행 정보가 수집될 수 있다. 몇몇 구현에서, 리플레이는 전체 함수 호출들(Full Function Calls)에 기초하여 수행될 수 있다.
예로서, 제 1 이벤트 세트와 관련되는 제 1 플레이가 전체 함수 호출들에 대응하는 연산들을 처리하기 위해 수행될 수 있다. 제 1 플레이 동안, 제 1, 제 2 및 제 3 이벤트들과 관련하여 수행 정보가 수집될 수 있다. 제 1 플레이가 완료된 후, 제 2 이벤트 세트와 관련되는 제 2 플레이가 전체 함수 호출들에 대응하는 연산들을 처리하기 위해 수행될 수 있다. 제 2 플레이 동안, 제 4, 제 5 및 제 6 이벤트들과 관련하여 수행 정보가 수집될 수 있다.
유사하게, 제 2 플레이가 완료된 후, 제 3 및 제 4 플레이들 각각이 전체 함수 호출들에 기초하여 수행될 수 있다. 제 3 및 제 4 플레이들 동안, 제 7 내지 제 12 이벤트들과 관련하여 수행 정보가 수집될 수 있다.
도 10은 도 9의 예시적인 리플레이를 통해 수행 정보를 수집하는 예시적인 방법을 설명하는 흐름도이다. 예로서, 도 10의 방법은 도 7의 S110 및 S120 동작들 이후에 수행될 수 있다.
어플리케이션(AP)이 실행됨에 따라, 메인 프로세서 장치(1100)는 어플리케이션(AP)의 프로그램 코드들 중 그래픽 프로세서 장치(1400)에서 처리될 부분으로부터 생성되는 함수 호출들을 캡처(Capture)할 수 있다. 여기서, 캡처는 생성되는 함수 호출을 후킹(Hooking)하여 어떤 함수 호출이 생성되었는지 인식하는 것을 의미할 수 있다. 메인 프로세서 장치(1100)는 캡처된 함수 호출들의 정보를 시스템 메모리(1200)에 유지(예컨대, 저장)할 수 있다(S130a-1).
메인 프로세서 장치(1100)는(또는, 몇몇 실시 예에서, GPU 드라이버(GD) 또는 그래픽 프로세서 장치(1400)는) 카운트 값들 전부가 수집되었는지 판별할 수 있다(S130a-2). 그렇지 않은 경우, 수집되지 않은 카운트 값들과 관련하여 리플레이가 요구될 수 있다. 따라서, 메인 프로세서 장치(1100)는 제 K 플레이를 위한 전체 함수 호출들을 GPU 드라이버(GD)로 입력할 수 있다(S130a-3).
따라서, 그래픽 프로세서 장치(1400)에서 처리될 프로그램 부분이 전달될 수 있다. 한편, 함수 호출들을 전달하는 것은 프로파일링 구성들의 정보를 전달하는 것을 수반할 수 있다. GPU 드라이버(GD)는 전체 함수 호출들에 기초하여 커맨드 세트들을 생성할 수 있고, 프로파일링 구성들에 기초하여 카운터 구성 정보를 생성할 수 있다(S140a).
이후, 그래픽 프로세서 장치(1400)에서, 스케줄러(1410)는 커맨드 세트들의 커맨드들을 스케줄링할 수 있고, 카운터 구성 정보에 기초하여 수행 카운터들(1451 내지 1459)의 구성들을 설정할 수 있다(S150a). 커맨드들은 스케줄링 결과에 따라 기능 유닛들(1431 내지 1439)로 보내질 수 있다(S160a).
기능 유닛들(1431 내지 1439)이 커맨드들에 의해 지시되는 연산들을 처리하는 동안, 수행 카운터들(1451 내지 1459)은 관심 이벤트들이 각각 발생하는 횟수들을 카운트할 수 있다(S170a). 카운트된 횟수들은 레지스터들(1471, 1473, 1479)에 임시로 저장될 수 있고, 제 K 플레이의 연산 처리가 완료된 후에 카운트 값들(CV)이 버퍼 메모리(1500)에 저장될 수 있다(S180a).
이후, 메인 프로세서 장치(1100)는(또는, 몇몇 실시 예에서, GPU 드라이버(GD) 또는 그래픽 프로세서 장치(1400)는) 카운트 값들 전부가 수집되었는지 다시 판별할 수 있다(S130a-2). 그렇지 않은 경우, S130a-3 내지 S180a 동작들이 반복될 수 있다. 도 9 및 도 10의 예에서, 리플레이는 시스템 메모리(1200)에 저장된 전체 함수 호출들에 기반할 수 있다.
카운트 값들 전부가 수집된 경우, 메인 프로세서 장치(1100)는(또는, 몇몇 실시 예에서, GPU 드라이버(GD) 또는 그래픽 프로세서 장치(1400)는) 관심 이벤트들과 관련되는 카운트 값들(CV) 사이의 연관성(Correlation)을 만들 수 있다(S190a-1). 상이한 이벤트 세트들의 이벤트들이 동일한 전체 함수 호출들에 대해 상이한 플레이들 동안 관찰될 수 있고, 따라서 적절한 리플레이 결과들 및 수행 정보를 얻기 위해 타이밍, 인과관계 등 다양한 요인과 관련하여 카운트 값들(CV)을 서로 연관시키고 매칭시키는 것이 요구될 수 있다. 메인 프로세서 장치(1100)는 카운트 값들(CV) 및 연관성에 기초하여, 수행 정보 또는 수행 프로파일링 결과를 생성할 수 있다(S190a-2).
도 11은 도 9 및 도 10의 예시적인 리플레이를 설명하기 위한 개념도이다.
도 9 및 도 10의 예에서, 리플레이는 어플리케이션(AP)의 프로그램 코드들에 기초하여 생성되는 전체 함수 호출들에 기반할 수 있다. 매 플레이마다 상이한 이벤트들을 관찰하기 위해, 수행 카운터들(1451 내지 1459)의 구성들이 매 반복마다 변경될 수 있다.
예로서, 제 1 플레이와 관련하여, 수행 카운터들(1451 내지 1459)의 구성들은 제 1 이벤트 세트의 관심 이벤트들을 관찰하기 위해 설정될 수 있다. 이후, 제 2 플레이와 관련하여, 수행 카운터들(1451 내지 1459)의 구성들은 제 2 이벤트 세트의 관심 이벤트들을 관찰하기 위해 변경될 수 있다. 이러한 방식으로, 제 3 및 제 4 플레이들과 관련하여, 수행 카운터들(1451 내지 1459)의 구성들은 제 3 및 제 4 이벤트 세트들의 관심 이벤트들을 관찰하기 위해 변경될 수 있다.
도 9 및 도 10의 예와 관련하여, 시스템 메모리(1200)가 전체 함수 호출들의 정보를 유지할 수 있고, GPU 드라이버(GD)는 매 플레이마다 전체 함수 호출들을 커맨드 세트들로 변환할 수 있다. 따라서, 많은 용량의 메모리 영역이 리플레이를 위해 시스템 메모리(1200) 상에서 요구될 수 있고, 매 플레이마다 전체 함수 호출들을 변환하고 커맨드 세트들을 그래픽 프로세서 장치(1400)로 전송하는 것은 수행 프로파일링의 효율을 저하시킬 수 있다.
게다가, 함수 호출은 각 함수에 의해 지시되는 연산들에 이용되는 아규먼트(Argument) 또는 파라미터(Parameter)를 수반할 수 있다. 함수 호출들의 정보를 유지하는 것뿐만 아니라 아규먼트들 또는 파라미터들의 정보를 유지하는 것 역시 시스템 메모리(1200) 상에서 많은 용량의 메모리 영역을 요구할 수 있다. 특히, 아규먼트 또는 파라미터가 그래픽 데이터(예컨대, 텍스처 데이터)를 포함하는 경우, 리플레이는 상당히 많은 용량의 메모리 영역을 요구할 수 있다. 시스템 메모리(1200)의 메모리 영역이 리플레이를 위해 많이 할당되는 경우, 다른 연산들을 처리하는 것이 지연될 수 있다.
몇몇 경우, 전자 시스템(1000)이 모바일 또는 휴대용 장치로 구현되는 경우, 시스템 메모리(1200)는 적은 용량을 가질 수 있다. 이 경우, 시스템 메모리(1200)가 많은 양의 정보를 저장하지 못할 수 있고, 수행 프로파일링 대상인 함수 호출 구간의 길이가 짧아질 수 있다. 따라서, 성능 정보를 충분히 수집하는 것이 어려울 수 있다.
나아가, GPU 드라이버(GD)가 매 플레이마다 커맨드 세트들을 새롭게 생성할 수 있다. 이 경우, 메인 프로세서 장치(1100)의 런타임 상태(Runtime Status) 및 비결정적인(Non-deterministic) 특성에 의존하여, 매 플레이마다 상이한 커맨드 세트들이 생성될 수 있다. 예로서, 커맨드들을 스케줄링한 순서가 변하거나, 커맨드들 사이의 인과관계가 변할 수 있다. 이 경우, 카운트 값들 사이의 연관성을 만드는 것이 어려워지거나, 카운트 값들 사이의 연관성이 정확하지 않게 될 수 있다.
도 12 내지 도 14는 도 6의 그래픽 프로세서 장치(1400)의 동작들과 관련하여 예시적인 리플레이를 설명하기 위한 개념도들이다.
예로서, 시작점과 종료점 사이의 제 2 함수 호출 그룹 내지 제 (N-1) 함수 호출 그룹의 함수 호출들과 관련하여 수행 정보가 수집될 수 있다. 도 12 내지 도 14의 실시 예에서, 리플레이는 전체 함수 호출들에 기초하는 대신 커맨드 세트들에 기초하여 수행될 수 있다. 즉, 동일한 플레이가 전체 함수 호출들과 관련하여 반복되는 대신 각 커맨드 세트와 관련하여 반복될 수 있다.
먼저, 도 12를 참조하면, 리플레이가 제 2 함수 호출 그룹으로부터 생성되는 제 2 커맨드 세트의 커맨드들에 기초하여 수행될 수 있다. 제 1 이벤트 세트와 관련되는 제 1 플레이가 제 2 커맨드 세트에 의해 지시되는 연산들을 처리하기 위해 부분적으로 수행될 수 있다. 부분적인 제 1 플레이가 완료된 후, 제 2 이벤트 세트와 관련되는 제 2 플레이가 제 2 커맨드 세트에 의해 지시되는 연산들을 처리하기 위해 부분적으로 수행될 수 있다.
유사하게, 부분적인 제 2 플레이가 완료된 후, 제 3 및 제 4 이벤트 세트들과 관련되는 제 3 및 제 4 플레이들 각각이 부분적으로 수행될 수 있다. 즉, 각 플레이가 전체 함수 호출들에 기초하여 수행되는 대신, 제 2 커맨드 세트에 의해 지시되는 연산들을 반복하여 처리하기 위해 부분적으로 수행될 수 있다. (이는 부분적인 리플레이로 언급될 수 있다.) 부분적으로 수행되는 각 플레이가 반복됨에 따라, 제 2 커맨드 세트에 의해 지시되는 연산들과 관련하여 관심 이벤트들 전부에 대한 횟수들이 카운트될 수 있다.
예로서, 제 2 커맨드 세트의 커맨드들의 제 1 반복(예컨대, 제 1 플레이)에서 관찰되는 관심 이벤트들(예컨대, 제 1 이벤트 세트의 이벤트들)은 제 2 커맨드 세트의 커맨드들의 제 2 반복(예컨대, 제 2 플레이)에서 관찰되는 관심 이벤트들(예컨대, 제 2 이벤트 세트의 이벤트들)과 상이할 수 있다. 따라서, 제 1 반복에서 카운트되는 횟수들에 대응하는 관심 이벤트들은 제 2 반복에서 카운트되는 횟수들에 대응하는 관심 이벤트들과 상이할 수 있다. 제 2 커맨드 세트에 의해 지시되는 연산들의 매 반복마다, 상이한 관심 이벤트들에 대한 횟수들이 카운트될 수 있다.
이후, 도 13을 참조하면, 리플레이가 제 3 함수 호출 그룹으로부터 생성되는 제 3 커맨드 세트의 커맨드들에 기초하여 수행될 수 있다. 도 12의 부분적인 리플레이와 유사하게, 도 13의 리플레이 역시 제 3 커맨드 세트에 의해 지시되는 연산들을 반복하여 처리하기 위해 부분적으로 수행될 수 있다.
도 13의 부분적인 리플레이는 도 12의 부분적인 리플레이가 완료된 후에 수행될 수 있다. 따라서, 제 2 커맨드 세트에 의해 지시되는 연산들과 관련하여 관심 이벤트들 전부에 대한 횟수들이 카운트된 후, 제 3 커맨드 세트에 의해 지시되는 연산들이 처리될 수 있다. 도 13의 부분적인 리플레이에서, 제 3 커맨드 세트에 의해 지시되는 연산들과 관련하여 관심 이벤트들 전부에 대한 횟수들이 카운트되도록, 제 3 커맨드 세트에 의해 지시되는 연산들이 반복하여 처리될 수 있다.
이러한 방식으로, 부분적인 리플레이가 각 함수 호출 그룹으로부터 생성되는 커맨드 세트의 커맨드들에 기초하여 수행될 수 있다. 도 14를 참조하면, 리플레이가 제 (N-1) 함수 호출 그룹으로부터 생성되는 제 (N-1) 커맨드 세트에 의해 지시되는 연산들을 반복하여 처리하기 위해 부분적으로 수행될 수 있다. 도 14의 부분적인 리플레이는 제 (N-2) 커맨드 세트에 의해 지시되는 연산들과 관련하여 관심 이벤트들 전부에 대한 횟수들이 카운트된 후에 수행될 수 있다.
부분적인 리플레이가 커맨드 세트들 전부와 관련하여 수행됨에 따라, 각 플레이가 커맨드 세트들 전부에 의해 지시되는 연산들과 관련하여 수행될 수 있다. 따라서, 모든 플레이들이 전체 함수 호출들과 관련하여 관심 이벤트들 전부가 각각 발생하는 횟수들이 카운트되도록 수행될 수 있다.
도 15는 도 12 내지 도 14의 예시적인 리플레이를 통해 수행 정보를 수집하는 예시적인 방법을 설명하는 흐름도이다. 예로서, 도 15의 방법은 도 7의 S110 및 S120 동작들 이후에 수행될 수 있다.
어플리케이션(AP)이 실행됨에 따라, 어플리케이션(AP)의 프로그램 코드들 중 그래픽 프로세서 장치(1400)에서 처리될 부분으로부터 함수 호출들이 생성될 수 있다. 메인 프로세서 장치(1100)는 함수 호출들을 GPU 드라이버(GD)로 입력할 수 있다(S130b). 한편, 함수 호출들을 전달하는 것은 프로파일링 구성들의 정보를 전달하는 것을 수반할 수 있다.
GPU 드라이버(GD)는 함수 호출들에 기초하여 커맨드 세트들을 생성할 수 있고, 프로파일링 구성들에 기초하여 카운터 구성 정보를 생성할 수 있다(S140b). 그래픽 프로세서 장치(1400)에서, 스케줄러(1410)는 GPU 드라이버(GD)로부터 커맨드 세트들 및 카운터 구성 정보를 수신할 수 있다.
도 9 및 도 10의 예와 달리, 도 12 내지 도 15의 실시 예에서, 스케줄러(1410)는 커맨드 세트들 각각을 GPU 드라이버(GD)로부터 한 번씩만 수신할 수 있다. 수신된 커맨드 세트들은 커맨드 큐(CQ)에서 관리될 수 있다.
스케줄러(1410)는 커맨드 세트들의 커맨드들을 스케줄링할 수 있고(S150b-1), 카운터 구성 정보에 기초하여 수행 카운터들(1451 내지 1459)의 구성들을 설정할 수 있다(S150b-2). 커맨드들은 스케줄링 결과에 따라 기능 유닛들(1431 내지 1439)로 보내질 수 있다(S160b).
기능 유닛들(1431 내지 1439)이 커맨드들에 의해 지시되는 연산들을 처리하는 동안, 수행 카운터들(1451 내지 1459)은 관심 이벤트들이 각각 발생하는 횟수들을 카운트할 수 있다(S170b-1). 카운트된 횟수들은 레지스터들(1471, 1473, 1479)에 임시로 저장될 수 있고, 연산 처리가 완료된 후에 카운트 값들(CV)이 버퍼 메모리(1500)에 저장될 수 있다(S180b).
이후, 그래픽 프로세서 장치(1400)는(또는, 몇몇 실시 예에서, GPU 드라이버(GD) 또는 메인 프로세서 장치(1100)는) 하나의 커맨드 세트와 관련하여 카운트 값들 전부가 수집되었는지 판별할 수 있다(S170b-2). 그렇지 않은 경우, S150b-2 내지 S180b 동작들이 반복될 수 있다.
S150b-2 내지 S180b 동작들의 반복은 동일한 커맨드 세트와 관련하여 상이한 관심 이벤트들에 대한 횟수들을 카운트하기 위해 제공될 수 있다. S150b-2 내지 S180b 동작들의 반복에서, 하나의 커맨드 세트에 의해 지시되는 연산들과 관련하여 관심 이벤트들 전부에 대한 횟수들이 카운트되도록, 하나의 커맨드 세트의 커맨드들이 반복하여 스케줄링되고 처리될 수 있다. 이를 위해, S150b-2 동작에서, 스케줄러(1410)는 하나의 커맨드 세트의 커맨드들의 매 반복마다 수행 카운터들(1451 내지 1459)의 구성들을 새롭게 변경할 수 있다.
예로서, 제 2 커맨드 세트에 의해 지시되는 연산들이 처리되었음에도 불구하고 제 2 커맨드 세트에 의해 지시되는 연산들과 관련하여 관심 이벤트들 전부에 대한 횟수들이 완전히 카운트되지 않은 경우, 스케줄러(1410)는, 카운트되지 않은 횟수들에 대응하는 관심 이벤트들이 각각 발생하는 횟수들이 카운트되도록, 수행 카운터들(1451 내지 1459)의 구성들을 변경하고 제 2 커맨드 세트의 커맨드들을 반복하여 스케줄링할 수 있다. 따라서, 부분적인 리플레이의 매 플레이마다, 상이한 관심 이벤트들에 대한 횟수들이 카운트될 수 있다.
이처럼, 도 12 내지 도 15의 실시 예에서, 리플레이는 전체 함수 호출들에 기초하는 대신 커맨드 큐(CQ)에서 관리되는 커맨드 세트의 단위를 기반으로 수행될 수 있다. 커맨드 세트 기반 리플레이는 커맨드 세트들을 GPU 드라이버(GD)로부터 반복하여 수신하는 대신, 커맨드 큐(CQ)에서 관리되는 커맨드 세트들의 커맨드들에 기초하여 수행될 수 있다.
하나의 커맨드 세트와 관련하여 카운트 값들 전부가 수집된 경우, 그래픽 프로세서 장치(1400)는(또는, 몇몇 실시 예에서, GPU 드라이버(GD) 또는 메인 프로세서 장치(1100)는) 커맨드 세트들 전부가 처리되었는지 판별할 수 있다(S170b-3). 그렇지 않은 경우, S150b-1 내지 S180b 동작들이 반복될 수 있다.
S150b-1 내지 S180b 동작들의 반복은 커맨드 세트들 전부와 관련하여 관심 이벤트들에 대한 횟수들을 카운트하기 위해 제공될 수 있다. S150b-1 동작에서, 스케줄러(1410)는, 상이한 커맨드 세트들에 의해 지시되는 연산들과 관련하여 관심 이벤트들에 대한 횟수들이 카운트되도록, 새로운 커맨드 세트의 커맨드들을 스케줄링할 수 있다.
예로서, 제 2 커맨드 세트에 의해 지시되는 연산들과 관련하여 관심 이벤트들 전부에 대한 횟수들이 카운트된 후, 스케줄러(1410)는 제 3 커맨드 세트의 커맨드들을 스케줄링할 수 있다. 따라서, 기능 유닛들(1431 내지 1439)이 제 3 커맨드 세트에 의해 지시되는 연산들을 처리할 수 있고, 수행 카운터들(1451 내지 1459)은 제 3 커맨드 세트와 관련하여 관심 이벤트들이 각각 발생하는 횟수들을 카운트할 수 있다.
커맨드 세트들 전부가 처리된 경우, 메인 프로세서 장치(1100)는(또는, 몇몇 실시 예에서, GPU 드라이버(GD) 또는 그래픽 프로세서 장치(1400)는) 관심 이벤트들과 관련되는 카운트 값들(CV) 사이의 연관성을 만들 수 있다(S190b-1). 도 12 내지 도 15의 실시 예에서, 하나의 이벤트에 대응하는 카운트 값들이 각 커맨드 세트들과 관련하여 별개로 계산될 수 있고, 따라서 하나의 이벤트에 대응하는 카운트 값들을 서로 연관시키고 매칭시키는 것이 요구될 수 있다.
예로서, 대응하는 이벤트들에 대해, 제 2 커맨드 세트에 의해 지시되는 연산들과 관련하여 카운트된 횟수들은 제 3 커맨드 세트에 의해 지시되는 연산들과 관련하여 카운트된 횟수들과 각각 합해질 수 있다. 이는 도 16 내지 도 17b를 참조하여 더 설명될 것이다. 메인 프로세서 장치(1100)는 카운트 값들(CV) 및 연관성에 기초하여, 수행 정보 또는 수행 프로파일링 결과를 생성할 수 있다(S190b-2).
도 16 내지 도 17b는 도 12 내지 도 15의 예시적인 리플레이와 관련하여 카운트 값들을 관리하는 예시적인 방법들을 설명하기 위한 개념도들이다.
도 16을 참조하면, 예로서, 제 1 플레이가 제 1 이벤트 세트의 관심 이벤트들과 관련하여 제 2 커맨드 세트에 의해 지시되는 연산들에 대해 부분적으로 수행된 후, 레지스터들(1471, 1472, 1479)은 카운트 값들(CV[E1][1], CV[E2][1], CV[E3][1])을 저장할 수 있다. 카운트 값들(CV[E1][1], CV[E2][1], CV[E3][1])은 제 2 커맨드 세트에 의해 지시되는 연산들이 처리되는 동안 제 1 이벤트 세트의 제 1, 제 2 및 제 3 이벤트들(E1, E2, E3)이 발생한 횟수들에 각각 대응할 수 있다.
부분적인 제 1 플레이가 완료된 후 제 2 플레이가 제 2 이벤트 세트의 관심 이벤트들과 관련하여 제 2 커맨드 세트에 의해 지시되는 연산들에 대해 수행되기 전, 레지스터들(1471, 1472, 1479)은 카운트 값들(CV[E1][1], CV[E2][1], CV[E3][1])을 출력할 수 있다. 따라서, 카운트 값들(CV[E1][1], CV[E2][1], CV[E3][1])이 버퍼 메모리(1500)에 저장될 수 있다. 카운트 값들(CV[E1][1], CV[E2][1], CV[E3][1])이 버퍼 메모리(1500)로 출력된 후, 부분적인 제 2 플레이가 수행될 수 있다.
도 16 내지 도 17b를 참조하면, 이러한 방식으로, 제 2 내지 제 4 플레이들이 부분적으로 수행될 수 있고, 카운트 값들(CV[E4][1] 내지 CV[E12][1])이 레지스터들(1471, 1472, 1479)에 임시로 저장될 수 있다. 카운트 값들(CV[E4][1] 내지 CV[E12][1])은 제 2 커맨드 세트에 의해 지시되는 연산들이 처리되는 동안 제 2 내지 제 4 이벤트 세트들의 제 4 내지 제 12 이벤트들(E4 내지 E12)이 발생한 횟수들에 각각 대응할 수 있다.
제 2 커맨드 세트에 대한 제 2 내지 제 4 플레이들의 연산 처리들이 완료된 후, 카운트 값들(CV[E4][1] 내지 CV[E12][1])이 버퍼 메모리(1500)에 저장될 수 있다. 제 2 커맨드 세트에 대한 리플레이가 완료되고 관심 이벤트들(E1 내지 E12) 전부에 대한 횟수들이 카운트된 후, 제 1 플레이가 제 1 이벤트 세트의 관심 이벤트들(E1, E2, E3)과 관련하여 제 3 커맨드 세트에 의해 지시되는 연산들에 대해 수행될 수 있다.
도 17a를 참조하면, 몇몇 실시 예에서, 수행 카운터들(1451 내지 1459)은, 버퍼 메모리(1500)에 저장된 카운트 값들(CV[E1][1] 내지 CV[E3][1])을 읽는 것 없이, 제 3 커맨드 세트에 의해 지시되는 연산들이 처리되는 동안 관심 이벤트들(E1, E2, E3)이 발생한 횟수들을 카운트할 수 있다. 그 결과로, 레지스터들(1471, 1472, 1479)은 카운트 값들(CV[E1][2], CV[E2][2], CV[E3][2])을 저장할 수 있다. 이후, 제 2 플레이가 제 2 이벤트 세트의 관심 이벤트들(E4, E5, E6)과 관련하여 제 3 커맨드 세트에 의해 지시되는 연산들에 대해 수행되기 전, 카운트 값들(CV[E1][2], CV[E2][2], CV[E3][2])은 버퍼 메모리(1500)에 저장될 수 있다.
몇몇 실시 예에서, 카운트 값들(CV[E1][1], CV[E1][2])은 버퍼 메모리(1500)에서 별개로 관리될 수 있다. 한편, 카운트 값들(CV[E1][1], CV[E1][2])의 합은 제 2 및 제 3 커맨드 세트들에 의해 지시되는 연산들을 처리하는 것과 관련하여 관심 이벤트(E1)가 발생한 횟수에 대응할 수 있다. 따라서, 메인 프로세서 장치(1100)가 카운트 값들(CV[E1][1], CV[E1][2])을 별개로 획득한 경우, 메인 프로세서 장치(1100)는 관심 이벤트(E1)가 발생한 횟수를 수행 정보 또는 수행 프로파일링 결과로서 제공하기 위해 카운트 값들(CV[E1][1], CV[E1][2])을 합할 수 있다.
도 17b를 참조하면, 몇몇 실시 예에서, 제 1 플레이가 제 1 이벤트 세트의 관심 이벤트들(E1, E2, E3)과 관련하여 제 3 커맨드 세트에 의해 지시되는 연산들에 대해 수행되기 전, 버퍼 메모리(1500)의 카운트 값들(CV[E1][1] 내지 CV[E3][1])이 레지스터들(1471, 1472, 1479)로 읽힐 수 있다. 수행 카운터들(1451 내지 1459)은 제 3 커맨드 세트에 의해 지시되는 연산들이 처리되는 동안 관심 이벤트들(E1, E2, E3)이 발생한 횟수들을 카운트하여, 레지스터들(1471, 1472, 1479)의 카운트 값들(CV[E1][1] 내지 CV[E3][1])을 변경(예컨대, 갱신)할 수 있다.
그 결과로, 레지스터들(1471, 1472, 1479)은 카운트 값들의 합 "CV[E1][1]+CV[E1][2]", "CV[E2][1]+CV[E2][2]", 및 "CV[E3][1]+CV[E3][2]"을 저장할 수 있다. 카운트 값들의 합 "CV[E1][1]+CV[E1][2]", "CV[E2][1]+CV[E2][2]", 및 "CV[E3][1]+CV[E3][2]"은 제 2 및 제 3 커맨드 세트들에 의해 지시되는 연산들을 처리하는 것과 관련하여 관심 이벤트들(E1, E2, E3)이 발생한 횟수들에 각각 대응할 수 있다.
이후, 제 2 플레이가 제 2 이벤트 세트의 관심 이벤트들(E4, E5, E6)과 관련하여 제 3 커맨드 세트에 의해 지시되는 연산들에 대해 수행되기 전, 카운트 값들의 합 "CV[E1][1]+CV[E1][2]", "CV[E2][1]+CV[E2][2]", 및 "CV[E3][1]+CV[E3][2]"은 버퍼 메모리(1500)에 저장될 수 있다. 나아가, 버퍼 메모리(1500)의 카운트 값들(CV[E4][1] 내지 CV[E6][1])이 레지스터들(1471, 1472, 1479)로 읽힐 수 있다.
이러한 방식으로, 몇몇 실시 예에서, 카운트 값들(CV[E1][1], CV[E1][2])은 합 "CV[E1][1]+CV[E1][2]"으로서 관리될 수 있다. 메인 프로세서 장치(1100)는 버퍼 메모리(1500)로부터 합 "CV[E1][1]+CV[E1][2]"을 직접 획득할 수 있다. 메인 프로세서 장치(1100)는 관심 이벤트(E1)가 발생한 횟수를 수행 정보 또는 수행 프로파일링 결과로서 제공하기 위해 합 "CV[E1][1]+CV[E1][2]"을 이용할 수 있다.
도 18은 도 12 내지 도 15의 예시적인 리플레이를 설명하기 위한 개념도이다.
도 12 내지 도 15의 실시 예에서, 어플리케이션(AP)의 프로그램 코드들에 기초하여 생성되는 함수 호출들은 커맨드 세트들로 변환될 수 있다. 커맨드 세트들 각각은 그래픽 프로세서 장치(1400)로 한 번씩만 제공될 수 있다. 리플레이는 커맨드 큐(CQ)에서 관리되는 커맨드 세트의 단위에 기반할 수 있다.
예로서, 제 2 커맨드 세트와 관련하여 수행 정보를 수집하고 수행 프로파일링을 수행하기 위해, 제 2 커맨드 세트에 의해 지시되는 연산들이 리플레이될 수 있다. 제 2 커맨드 세트에 의해 지시되는 연산들은 제 2 커맨드 세트에 의해 지시되는 연산들과 관련하여 관심 이벤트들 전부에 대한 횟수들이 카운트될 때까지 반복될 수 있다. 제 2 커맨드 세트에 의해 지시되는 연산들의 반복이 완료된 후, 제 3 내지 제 (N-1) 커맨드 세트들에 의해 지시되는 연산들이 커맨드 세트 기반으로 유사하게 리플레이될 수 있다.
도 12 내지 도 15의 실시 예와 관련하여, 버퍼 메모리(1500)가 커맨드 큐(CQ)를 유지할 수 있고, 시스템 메모리(1200)는 함수 호출들의 정보를 유지하지 않을 수 있다. 따라서, 제한된 개수의 레지스터들이 제공되는 환경에서, 리플레이가 적은 용량의 시스템 메모리(1200)를 이용하여서도 구현될 수 있고, 시스템 메모리(1200)의 가용 메모리 영역이 다른 연산들을 처리하기 위해 이용될 수 있다.
함수 호출들의 정보가 유지되지 않는 경우, 아규먼트들 또는 파라미터들의 정보 역시 유지되지 않을 수 있고, 시스템 메모리(1200)가 더욱 효율적으로 이용될 수 있다. 특히, 모바일 또는 휴대용 장치로 구현되는 전자 시스템(1000)이 적은 용량의 시스템 메모리(1200)를 포함하더라도, 많은 개수의 이벤트들에 관한 충분한 수행 정보를 수집하는 것이 가능할 수 있다.
게다가, 매 플레이마다 전체 함수 호출들을 변환하고 커맨드 세트들을 그래픽 프로세서 장치(1400)로 전송하는 것이 요구되지 않을 수 있다. 따라서, 수행 프로파일링의 효율이 저하되는 것이 방지될 수 있다.
나아가, 커맨드 세트들이 한 번만 생성되고 한 번만 그래픽 프로세서 장치(1400)로 제공됨에 따라, 커맨드들이 매 플레이마다 동일하게 스케줄링되고 처리될 수 있다. 즉, 리플레이가 일관된(Consistent) 커맨드들 및 데이터에 기초하여 구현될 수 있고, 리플레이를 위한 커맨드들 및 데이터의 일관성이 향상될 수 있다. 따라서, 카운트 값들 사이의 연관성을 만드는 것이 쉬워질 수 있고, 카운트 값들 사이의 연관성이 정확하게 수립될 수 있다. 이러한 커맨드 세트 기반 리플레이는 벌컨(Vulkan) API와 같은 커맨드 큐 방식의 차세대 API를 위해 유용하게 채용될 수 있다.
도 12 내지 도 15의 실시 예에서, 각 플레이가 반복되는 횟수는 레지스터들의 개수 및 커맨드 세트들의 개수에 기초하여 결정될 수 있다. 몇몇 실시 예에서, 프로파일링 구성들 및/또는 카운터 구성들은 사용자(10) 또는 전자 시스템(1000)의 결정에 따라, 각 플레이가 반복되는 횟수에 관한 정보를 포함할 수 있다. 몇몇 경우, 사용자(10) 또는 전자 시스템(1000)이 리플레이를 강제로 중단 또는 종료할 수 있다.
도 19 및 도 20은 도 12 내지 도 15의 예시적인 리플레이와 관련하여 커맨드 세트와 카운터 구성 값 사이의 예시적인 관계를 설명하기 위한 개념도들이다.
위에서 설명된 것처럼, 커맨드 세트들은 카운터 구성들과 관련될 수 있다. 수행 프로파일링이 요청되는 경우, 스케줄러(1410)는 커맨드 세트들과 함께 카운터 구성 정보를 수신할 수 있다.
도 19를 참조하면, 커맨드 세트들 "A", "B" 및 "C"가 제공될 수 있고, 카운터 구성 정보는 카운터 구성 값들 "A", "B" 및 "C"를 포함할 수 있다. 카운터 구성 값들 "A", "B" 및 "C"는 커맨드 세트들 "A", "B" 및 "C"와 각각 대응할 수 있고, 커맨드 세트들 "A", "B" 및 "C"에 의해 지시되는 연산들을 처리하는 것과 관련되는 수행 카운터들(1451 내지 1459)의 구성들을 설정하기 위해 참조될 수 있다.
카운터 구성 값들 "A", "B" 및 "C"는 수행 카운터들(1451 내지 1459)의 구성들을 상이하게 설정하도록 제공될 수 있다. 예로서, 카운터 구성 값 "A"에 의해 설정되는 수행 카운터들(1451 내지 1459)의 구성들은 카운터 구성 값 "B"에 의해 설정되는 수행 카운터들(1451 내지 1459)의 구성들과 상이할 수 있다.
이 경우, 커맨드 세트 "A"에 의해 지시되는 연산들을 처리하는 것과 관련되는 수행 카운터들(1451 내지 1459)의 구성들은 커맨드 세트 "B"에 의해 지시되는 연산들을 처리하는 것과 관련되는 수행 카운터들(1451 내지 1459)의 구성들과 상이할 수 있다. 따라서, 커맨드 세트들 "A", "B" 및 "C"에 의해 지시되는 연산들과 관련하여 관심 이벤트들이 발생하는 횟수들은 수행 카운터들(1451 내지 1459)의 상이하게 설정된 구성들 하에서 카운트될 수 있다.
예로서, 커맨드 세트들 "A", "B" 및 "C"가 그래픽 처리와 관련되는 경우, 커맨드 세트들 "A", "B" 및 "C"에 의해 지시되는 연산들은 상이한 특성들을 갖거나 상이한 동작 조건들을 요구할 수 있다. 예로서, 디스플레이 장치(1405)에 표시될 영상이 현란하게 변하는 경우, 커맨드 세트들 "A", "B" 및 "C"는 "DrawCall" 커맨드의 개수, 영상 크기 등과 같은 다양한 요인과 관련하여 상이한 조건들을 요구할 가능성이 높다. 이 경우, 도 19에 나타낸 것처럼, 상이한 카운터 구성 값들 "A", "B" 및 "C"가 제공될 수 있다.
도 12 내지 도 15의 실시 예와 관련하여, 커맨드 세트 "A"에 의해 지시되는 연산들이 반복될 수 있다. 매 반복마다, 커맨드 세트 "A"는 각 반복과 관련되는 이벤트 세트에 대한 카운터 구성 값에 대응할 수 있다. 예로서, P개의 상이한 이벤트 세트가 있는 경우, 커맨드 세트 "A"에 의해 지시되는 연산들은 각 반복들과 관련하여 수행 카운터들(1451 내지 1459)의 상이하게 설정된 구성들 하에서 P번 리플레이될 수 있다.
도 20을 참조하면, 커맨드 세트들 "A1", "A2", "B1", "B2" 및 "B3"가 제공될 수 있고, 카운터 구성 정보는 카운터 구성 값들 "A" 및 "B"를 포함할 수 있다. 도 20의 예에서, 하나의 카운터 구성 값이 복수의 커맨드 세트에 대응할 수 있다.
예로서, 카운터 구성 값 "A"는 커맨드 세트들 "A1" 및 "A2"와 대응할 수 있고, 커맨드 세트들 "A1" 및 "A2"에 의해 지시되는 연산들을 처리하는 것과 관련되는 수행 카운터들(1451 내지 1459)의 구성들을 설정하기 위해 참조될 수 있다. 카운터 구성 값 "B"는 커맨드 세트들 "B1", "B2" 및 "B3"와 대응할 수 있고, 커맨드 세트들 "B1", "B2" 및 "B3"에 의해 지시되는 연산들을 처리하는 것과 관련되는 수행 카운터들(1451 내지 1459)의 구성들을 설정하기 위해 참조될 수 있다.
카운터 구성 값들 "A" 및 "B"는 수행 카운터들(1451 내지 1459)의 구성들을 상이하게 설정하도록 제공될 수 있다. 한편, 커맨드 세트들 "A1" 및 "A2"가 하나의 카운터 구성 값 "A"와 대응함에 따라, 커맨드 세트 "A1"에 의해 지시되는 연산들을 처리하는 것과 관련되는 수행 카운터들(1451 내지 1459)의 구성들은 커맨드 세트 "A2"에 의해 지시되는 연산들을 처리하는 것과 관련되는 수행 카운터들(1451 내지 1459)의 구성들과 동일할 수 있다.
따라서, 커맨드 세트들 "A1" 및 "A2"에 의해 지시되는 연산들과 관련하여 관심 이벤트들이 발생하는 횟수들은 하나의 카운터 구성 값 "A"에 의해 설정되는 수행 카운터들(1451 내지 1459)의 구성 하에서 카운트될 수 있다. 유사하게, 커맨드 세트들 "B1", "B2" 및 "B3"에 의해 지시되는 연산들과 관련하여 관심 이벤트들이 발생하는 횟수들은 하나의 카운터 구성 값 "B"에 의해 설정되는 수행 카운터들(1451 내지 1459)의 구성 하에서 카운트될 수 있다.
예로서, 커맨드 세트들 "A1", "A2", "B1", "B2" 및 "B3"가 그래픽 처리 외의 단순 연산 처리와 관련되는 경우, 커맨드 세트들 "A1", "A2", "B1", "B2" 및 "B3"에 의해 지시되는 연산들은 동일 또는 유사한 특성을 갖거나 동일 또는 유사한 동작 조건을 요구할 가능성이 높다. 이 경우, 연산 처리 효율 및 버스 대역폭 효율을 향상시키기 위해, 하나의 카운터 구성 값이 복수의 커맨드 세트들에 대응하도록 제공될 수 있다.
예로서, 동일 또는 유사한 조건을 요구하는 커맨드 세트들은 하나의 카운터 구성 값에 대응하도록 그룹핑될 수 있다. 하나의 카운터 구성 값에 대응하도록 그룹핑되는 커맨드 세트들은 사용자(10)의 의도 또는 전자 시스템(1000)의 동작 정책에 따라 미리 결정될 수 있다. 또는, 컨텍스트 경향, 데이터 유형 등과 같은 다양한 요인에 의존하여, 하나의 카운터 구성 값에 대응하도록 그룹핑되는 커맨드 세트들이 동적으로 가변할 수 있다.
도 12 내지 도 15의 실시 예와 관련하여, 커맨드 세트들 "A1" 및 "A2"에 의해 지시되는 연산들이 반복될 수 있다. 매 반복마다, 커맨드 세트들 "A1" 및 "A2"는 각 반복과 관련되는 이벤트 세트에 대한 카운터 구성 값에 대응할 수 있다.
예로서, P개의 상이한 이벤트 세트가 있는 경우, 커맨드 세트들 "A1" 및 "A2"에 의해 지시되는 연산들은 각 반복들과 관련하여 수행 카운터들(1451 내지 1459)의 상이하게 설정된 구성들 하에서 P번 리플레이될 수 있다. 다만, 커맨드 세트들 "A1"의 커맨드들의 반복이 완료된 후 커맨드 세트들 "A2"의 커맨드들이 처리e될 때, 수행 카운터들(1451 내지 1459)의 구성들은 변경 없이 유지될 수 있다.
위 설명들은 본 발명을 구현하기 위한 예시적인 구성들 및 동작들을 제공하도록 의도된다. 본 발명의 기술 사상은 위에서 설명된 실시 예들뿐만 아니라, 위 실시 예들을 단순하게 변경하거나 수정하여 얻어질 수 있는 구현들도 포함할 것이다. 또한, 본 발명의 기술 사상은 위에서 설명된 실시 예들을 앞으로 용이하게 변경하거나 수정하여 달성될 수 있는 구현들도 포함할 것이다.
1000 : 전자 시스템 1002 : 호스트 시스템

Claims (10)

  1. 기능 유닛이 제 1 커맨드 세트에 의해 지시되는 제 1 연산들 및 제 2 커맨드 세트에 의해 지시되는 제 2 연산들을 처리하도록, 상기 제 1 커맨드 세트의 커맨드들 및 상기 제 2 커맨드 세트의 커맨드들을 스케줄링하도록 구성되는 스케줄러;
    상기 기능 유닛이 상기 제 1 연산들 및 상기 제 2 연산들을 처리하는 동안 관심 이벤트들이 각각 발생하는 횟수들을 카운트하도록 구성되는 수행 카운터; 및
    상기 카운트된 횟수들에 대응하는 카운트 값들을 저장하도록 구성되는 레지스터들을 포함하되,
    상기 관심 이벤트들의 개수가 상기 레지스터들의 개수보다 많은 경우, 상기 제 1 연산들과 관련하여 상기 관심 이벤트들 전부에 대한 상기 횟수들이 카운트되도록 상기 제 1 연산들이 반복하여 처리되고, 상기 제 1 연산들과 관련하여 상기 관심 이벤트들 전부에 대한 상기 횟수들이 카운트된 후에 상기 제 2 연산들이 처리되는 프로세서 장치.
  2. 제 1 항에 있어서,
    상기 제 1 커맨드 세트 및 상기 제 2 커맨드 세트는 어플리케이션의 실행에 따라 생성되는 제 1 함수 호출들 및 제 2 함수 호출들에 각각 기초하여 상기 스케줄러에서 수신되고,
    상기 관심 이벤트들은 캐시 미스, 버스 충돌, 처리 유휴 상태, 버텍스 카운트, 및 프리미티브 카운트 중 적어도 하나를 포함하는 프로세서 장치.
  3. 제 1 항에 있어서,
    상기 스케줄러는 상기 제 1 커맨드 세트 및 상기 제 2 커맨드 세트 각각을 드라이버로부터 한 번씩만 수신하는 프로세서 장치.
  4. 제 1 항에 있어서,
    상기 제 1 커맨드 세트 및 상기 제 2 커맨드 세트 각각은 하나의 패킷 단위 또는 하나의 배치 단위로 구성되고,
    상기 제 1 커맨드 세트에 포함되는 상기 커맨드들이 하나의 처리 구간에서 일련하여 처리되고, 상기 제 2 커맨드 세트에 포함되는 상기 커맨드들이 다른 하나의 처리 구간에서 일련하여 처리되는 프로세서 장치.
  5. 제 1 항에 있어서,
    상기 제 1 연산들과 관련하여 상기 관심 이벤트들 전부에 대한 상기 횟수들이 카운트된 후, 상기 제 2 연산들과 관련하여 상기 관심 이벤트들 전부에 대한 상기 횟수들이 카운트되도록 상기 제 2 연산들이 반복하여 처리되고,
    상기 제 1 연산들과 관련하여 카운트된 상기 횟수들은 상기 제 2 연산들과 관련하여 카운트된 상기 횟수들과 각각 합해지는 프로세서 장치.
  6. 제 1 커맨드 세트의 커맨드들 및 제 2 커맨드 세트의 커맨드들을 스케줄링하도록 구성되는 스케줄러; 및
    상기 제 1 커맨드 세트에 의해 지시되는 제 1 연산들 및 상기 제 2 커맨드 세트에 의해 지시되는 제 2 연산들을 처리하는 것과 관련하여 관심 이벤트들이 각각 발생하는 횟수들을 카운트하도록 구성되는 수행 카운터를 포함하되,
    상기 제 1 연산들과 관련하여 상기 관심 이벤트들 전부에 대한 상기 횟수들이 카운트되도록 상기 제 1 커맨드 세트의 상기 커맨드들이 반복하여 스케줄링되고, 상기 제 1 연산들과 관련하여 상기 관심 이벤트들 전부에 대한 상기 횟수들이 카운트된 후에 상기 제 2 커맨드 세트의 상기 커맨드들이 스케줄링되는 프로세서 장치.
  7. 제 6 항에 있어서,
    상기 스케줄러는 상기 수행 카운터가 상기 관심 이벤트들에 대한 상기 횟수들을 카운트하도록 상기 수행 카운터의 구성들을 설정하도록 더 구성되고,
    상기 스케줄러는 상기 제 1 커맨드 세트의 상기 커맨드들의 매 반복마다 상기 수행 카운터의 상기 구성들을 변경하도록 더 구성되는 프로세서 장치.
  8. 제 7 항에 있어서,
    상기 제 1 연산들을 처리하는 것이 수행된 후에 상기 제 1 연산들과 관련하여 상기 관심 이벤트들 전부에 대한 상기 횟수들이 완전히 카운트되지 않은 경우, 상기 스케줄러는, 카운트되지 않은 횟수들에 대응하는 관심 이벤트들이 각각 발생하는 횟수들이 카운트되도록, 상기 수행 카운터의 상기 구성들을 변경하고 상기 제 1 커맨드 세트의 상기 커맨드들을 반복하여 스케줄링하도록 더 구성되는 프로세서 장치.
  9. 제 6 항에 있어서,
    상기 카운트되는 횟수들에 대응하는 상기 관심 이벤트들 중에서, 상기 제 1 커맨드 세트의 상기 커맨드들의 제 1 반복에서 카운트되는 횟수들에 대응하는 제 1 관심 이벤트들은 상기 제 1 커맨드 세트의 상기 커맨드들의 제 2 반복에서 카운트되는 횟수들에 대응하는 제 2 관심 이벤트들과 상이한 프로세서 장치.
  10. 복수의 커맨드 세트 각각에 의해 지시되는 연산들을 처리하도록 구성되는 기능 유닛; 및
    상기 기능 유닛이 상기 복수의 커맨드 세트 각각에 의해 지시되는 상기 연산들을 처리하는 동안 관심 이벤트들이 각각 발생하는 횟수들을 카운트하도록 구성되는 수행 카운터를 포함하되,
    상기 복수의 커맨드 세트 각각에 의해 지시되는 상기 연산들과 관련하여 상기 관심 이벤트들 전부에 대한 상기 횟수들이 카운트될 때까지 상기 복수의 커맨드 세트 각각에 의해 지시되는 상기 연산들이 반복하여 처리되고,
    상기 복수의 커맨드 세트 중 제 1 커맨드 세트에 의해 지시되는 연산들과 관련하여 상기 관심 이벤트들 전부에 대한 상기 횟수들이 카운트된 후, 상기 복수의 커맨드 세트 중 제 2 커맨드 세트에 의해 지시되는 연산들이 처리되는 프로세서 장치.
KR1020180002881A 2018-01-09 2018-01-09 커맨드 세트 기반 리플레이를 통해 수행 정보를 수집하는 프로세서 장치 KR102491606B1 (ko)

Priority Applications (4)

Application Number Priority Date Filing Date Title
KR1020180002881A KR102491606B1 (ko) 2018-01-09 2018-01-09 커맨드 세트 기반 리플레이를 통해 수행 정보를 수집하는 프로세서 장치
US16/132,784 US11010169B2 (en) 2018-01-09 2018-09-17 Processor device collecting performance information through command-set-based replay
DE102018128342.3A DE102018128342A1 (de) 2018-01-09 2018-11-13 Prozessorvorrichtung, welche Performance-Information durch eine befehlssatzbasierte Wiederholung sammelt
CN201811524354.0A CN110032489A (zh) 2018-01-09 2018-12-13 通过基于命令集的重演收集性能信息的处理器设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020180002881A KR102491606B1 (ko) 2018-01-09 2018-01-09 커맨드 세트 기반 리플레이를 통해 수행 정보를 수집하는 프로세서 장치

Publications (2)

Publication Number Publication Date
KR20190084761A true KR20190084761A (ko) 2019-07-17
KR102491606B1 KR102491606B1 (ko) 2023-01-26

Family

ID=66995369

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020180002881A KR102491606B1 (ko) 2018-01-09 2018-01-09 커맨드 세트 기반 리플레이를 통해 수행 정보를 수집하는 프로세서 장치

Country Status (4)

Country Link
US (1) US11010169B2 (ko)
KR (1) KR102491606B1 (ko)
CN (1) CN110032489A (ko)
DE (1) DE102018128342A1 (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110514982B (zh) * 2019-08-22 2022-03-22 上海兆芯集成电路有限公司 性能分析系统与方法
US11341060B2 (en) * 2020-08-11 2022-05-24 International Business Machines Corporation Multifunction communication interface supporting memory sharing among data processing systems

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR920004855A (ko) * 1990-08-06 1992-03-28 엔.라이스 머레트 이벤트 한정 검사 방법 및 회로
US5596760A (en) * 1991-12-09 1997-01-21 Matsushita Electric Industrial Co., Ltd. Program control method and program control apparatus
KR20150067722A (ko) * 2013-12-10 2015-06-18 에이알엠 리미티드 멀티 스레드 데이터 처리장치에서의 스레드 스케줄링 구성
KR20150122178A (ko) * 2013-02-26 2015-10-30 퀄컴 인코포레이티드 상이한 명령 세트 아키텍쳐들을 갖는 프로세서들 상에서의 운영 시스템의 실행

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3273078B2 (ja) * 1993-05-25 2002-04-08 オリンパス光学工業株式会社 静止画カメラ
US6792392B1 (en) 2000-06-30 2004-09-14 Intel Corporation Method and apparatus for configuring and collecting performance counter data
AUPR234700A0 (en) * 2000-12-29 2001-01-25 Canon Kabushiki Kaisha Error diffusion using next scanline error impulse response
US7095416B1 (en) 2003-09-22 2006-08-22 Microsoft Corporation Facilitating performance analysis for processing
US7961194B2 (en) 2003-11-19 2011-06-14 Lucid Information Technology, Ltd. Method of controlling in real time the switching of modes of parallel operation of a multi-mode parallel graphics processing subsystem embodied within a host computing system
US8587593B2 (en) 2008-07-25 2013-11-19 Qualcomm Incorporated Performance analysis during visual creation of graphics images
US9275491B2 (en) 2010-04-05 2016-03-01 Nvidia Corporation GPU work creation and stateless graphics in OPENGL
EP2383648B1 (en) * 2010-04-28 2020-02-19 Telefonaktiebolaget LM Ericsson (publ) Technique for GPU command scheduling
US8462166B2 (en) 2010-10-01 2013-06-11 Apple Inc. Graphics system which measures CPU and GPU performance
US9727942B2 (en) 2013-10-29 2017-08-08 International Business Machines Corporation Selective utilization of graphics processing unit (GPU) based acceleration in database management
US9535815B2 (en) 2014-06-04 2017-01-03 Nvidia Corporation System, method, and computer program product for collecting execution statistics for graphics processing unit workloads
US9786346B2 (en) 2015-05-20 2017-10-10 Micron Technology, Inc. Virtual ground sensing circuitry and related devices, systems, and methods for crosspoint ferroelectric memory
KR102522154B1 (ko) * 2016-03-15 2023-04-17 에스케이하이닉스 주식회사 반도체 메모리 장치의 컨트롤러 및 이의 동작 방법

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR920004855A (ko) * 1990-08-06 1992-03-28 엔.라이스 머레트 이벤트 한정 검사 방법 및 회로
US5596760A (en) * 1991-12-09 1997-01-21 Matsushita Electric Industrial Co., Ltd. Program control method and program control apparatus
KR20150122178A (ko) * 2013-02-26 2015-10-30 퀄컴 인코포레이티드 상이한 명령 세트 아키텍쳐들을 갖는 프로세서들 상에서의 운영 시스템의 실행
KR20150067722A (ko) * 2013-12-10 2015-06-18 에이알엠 리미티드 멀티 스레드 데이터 처리장치에서의 스레드 스케줄링 구성

Also Published As

Publication number Publication date
US11010169B2 (en) 2021-05-18
US20190213010A1 (en) 2019-07-11
KR102491606B1 (ko) 2023-01-26
DE102018128342A1 (de) 2019-07-11
CN110032489A (zh) 2019-07-19

Similar Documents

Publication Publication Date Title
EP2438576B1 (en) Displaying a visual representation of performance metrics for rendered graphics elements
CN103309786B (zh) 用于在非可抢占式图形处理单元上交互调试的方法和装置
CN102597950B (zh) 基于硬件排程gpu工作
US20220012844A1 (en) Methods and apparatus to emulate graphics processing unit instructions
TWI498819B (zh) 執行成型記憶體存取作業的系統和方法
Nguyen et al. Reducing smartphone application delay through read/write isolation
US20150355996A1 (en) System, method, and computer program product for collecting execution statistics for graphics processing unit workloads
US7830387B2 (en) Parallel engine support in display driver model
US9619918B2 (en) Heterogenious 3D graphics processor and configuration method thereof
US8928677B2 (en) Low latency concurrent computation
CN103838669A (zh) 用于本地调试图形程序的系统、方法和计算机程序产品
CN102541661B (zh) 实现等待地址同步接口的方法和设备
CN104714785A (zh) 任务调度装置、方法及并行处理数据的设备
EP3564898A1 (en) Apparatus and methods for generating dynamic trace data on a gpu
TW201435581A (zh) 透過管線狀態繫結觸發的效能事件擷取
KR102491606B1 (ko) 커맨드 세트 기반 리플레이를 통해 수행 정보를 수집하는 프로세서 장치
US20130013283A1 (en) Distributed multi-pass microarchitecture simulation
CN103902369A (zh) 陷阱处理期间的协作线程阵列的粒度上下文切换
US10061676B2 (en) Remotely located timing method and device for a processing unit in an information processing system
US20210326179A1 (en) Progress visualization of computational job
CN113190427A (zh) 卡顿监控方法、装置、电子设备及存储介质
CN112445855A (zh) 用于图形处理器芯片的可视化分析方法和可视化分析装置
US20120191444A1 (en) Simulation device, simulation method, and computer program therefor
US20080127115A1 (en) System And Method For Facilitating Software Profiling Procedures
CN116991600B (zh) 图形调用指令的处理方法、装置、设备及存储介质

Legal Events

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