KR101900172B1 - 가상화 환경에서의 지능형 gpu 스케줄링 - Google Patents

가상화 환경에서의 지능형 gpu 스케줄링 Download PDF

Info

Publication number
KR101900172B1
KR101900172B1 KR1020167032786A KR20167032786A KR101900172B1 KR 101900172 B1 KR101900172 B1 KR 101900172B1 KR 1020167032786 A KR1020167032786 A KR 1020167032786A KR 20167032786 A KR20167032786 A KR 20167032786A KR 101900172 B1 KR101900172 B1 KR 101900172B1
Authority
KR
South Korea
Prior art keywords
gpu
command
scheduling policy
commands
scheduling
Prior art date
Application number
KR1020167032786A
Other languages
English (en)
Other versions
KR20160146948A (ko
Inventor
쿤 톈
즈위안 뤼
야오 쭈 둥
Original Assignee
인텔 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 인텔 코포레이션 filed Critical 인텔 코포레이션
Publication of KR20160146948A publication Critical patent/KR20160146948A/ko
Application granted granted Critical
Publication of KR101900172B1 publication Critical patent/KR101900172B1/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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/505Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the load
    • 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/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • 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/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/522Barrier synchronisation
    • 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
    • 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/4557Distribution of virtual machine instances; Migration and load balancing
    • 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45579I/O management, e.g. providing access to device drivers or storage

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Image Processing (AREA)
  • Image Generation (AREA)
  • Controls And Circuits For Display Device (AREA)

Abstract

가상화 환경에서 그래픽 처리 유닛(GPU)에 대한 작업부하 제출들을 스케줄링하기 위한 기술들은 컴퓨팅 디바이스에 구현된 GPU 스케줄러를 포함한다. 가상화 환경은 네이티브 그래픽 드라이버를 갖도록 구성되는 다수의 상이한 가상 머신을 포함한다. GPU 스케줄러는 상이한 가상 머신들로부터 GPU 커맨드들을 수신하고, 스케줄링 정책을 동적으로 선택하고, GPU에 의한 처리를 위해 GPU 커맨드들을 스케줄링한다.

Description

가상화 환경에서의 지능형 GPU 스케줄링{INTELLIGENT GPU SCHEDULING IN A VIRTUALIZATION ENVIRONMENT}
컴퓨팅 디바이스들에서, 그래픽 처리 유닛들(GPU들)은 수학적 연산들을 급속하게 수행할 수 있는 전자 회로를 제공함으로써 중앙 처리 유닛(CPU)을 보충할 수 있다. 이것을 행하기 위해서, GPU들은 대규모 병렬성 및 많은 동시 스레드를 이용한다. GPU들의 능력은 이들을 비주얼 미디어 및 병렬 컴퓨팅 태스크들의 처리를 가속화하는데 유용하게 한다. 예를 들어, GPU는 비디오 인코딩/디코딩, 2차원 및 3차원 게임에서의 그래픽 렌더링, 및 다른 범용 컴퓨팅 애플리케이션들을 위해 이용될 수 있다. GPU들의 가상화에 수반되는 복잡도가 극복될 수 있는 경우, 가상화 기술들은 많은 상이한 타입의 컴퓨팅 플랫폼 상의 그래픽 처리 유닛들에 적용될 수 있다.
본 명세서에 설명된 개념들은 첨부 도면들에서 제한이 아니라 예로서 예시되어 있다. 예시의 단순성 및 명료성을 위해, 도면들에 예시된 요소들은 반드시 비례에 맞춰 그려진 것은 아니다. 적절한 것으로 고려되는 경우, 대응하거나 유사한 요소들을 표시하기 위해서 도면들 사이에 참조 라벨들이 반복되었다.
도 1은 본 명세서에 개시된 바와 같은 지능형 GPU 스케줄링을 갖도록 구성된 적어도 하나의 컴퓨팅 디바이스를 포함하는 컴퓨팅 시스템의 적어도 하나의 실시예의 단순화된 블록도이다.
도 2는 도 1의 서버 컴퓨팅 디바이스의 환경의 적어도 하나의 실시예의 단순화된 블록도이다.
도 3은 도 2의 GPU 스케줄러의 환경의 적어도 하나의 실시예의 단순화된 블록도이다.
도 4는 도 1의 컴퓨팅 디바이스들 중 하나 이상에 의해 실행될 수 있는, 지능형 GPU 스케줄링을 위한 방법의 적어도 하나의 실시예의 단순화된 흐름도이다.
도 5는 도 1의 컴퓨팅 시스템의 적어도 하나의 실시예에 대한 이용 경우를 예시하는 단순화된 타이밍도이다.
본 개시내용의 개념들은 다양한 수정물들 및 대안적인 형태들을 허용하지만, 그것의 특정 실시예들은 도면들에서 예로서 도시되었으며 본 명세서에서 상세하게 설명될 것이다. 그러나, 본 개시내용의 개념들을 개시된 특정 형태들로 제한하려는 의도는 없으며, 이에 반해, 본 개시내용 및 첨부 청구항들과 부합하는 모든 수정물들, 등가물들 및 대안물들을 커버하도록 의도된다는 점이 이해되어야 한다.
본 명세서에서 "일 실시예(one embodiment)", "실시예(an embodiment)", "예시적인 실시예(an illustrative embodiment)" 등에 대한 언급은, 설명된 실시예가 특정 피처, 구조 또는 특성을 포함할 수 있지만, 모든 실시예는 반드시 그 특정 피처, 구조 또는 특성을 포함할 수도 있고 포함하지 않을 수도 있다는 것을 표시한다. 또한, 이러한 구문들은 반드시 동일한 실시예를 지칭하는 것은 아니다. 또한, 특정 피처, 구조 또는 특성이 실시예와 관련하여 설명될 때, 명시적으로 설명되든지 아니든지 간에, 이러한 피처, 구조 또는 특성을 다른 실시예들과 관련하여 시행하는 것은 본 기술분야의 통상의 기술자의 지식 내에 있다고 제시된다. 추가적으로, "A, B 및 C 중 적어도 하나"의 형태로 리스트에 포함된 항목들은 (A); (B); (C); (A 및 B); (B 및 C); (A 및 C); 또는 (A, B 및 C)를 의미할 수 있다는 점이 인식되어야 한다. 유사하게, "A, B 또는 C 중 적어도 하나"의 형태로 열거된 항목들은 (A); (B); (C); (A 및 B); (B 및 C); (A 및 C); 또는 (A, B 및 C)를 의미할 수 있다.
개시된 실시예들은, 일부 경우에, 하드웨어, 펌웨어, 소프트웨어 또는 이들의 임의의 조합으로 구현될 수 있다. 개시된 실시예들은, 하나 이상의 프로세서에 의해 판독되고 실행될 수 있는 일시적인 또는 비일시적인 머신 판독가능(예를 들어, 컴퓨터 판독가능) 저장 매체에 의해 운반되거나 이러한 저장 매체 상에 저장되는 명령어들로서 또한 구현될 수 있다. 머신 판독가능 저장 매체는 머신에 의해 판독가능한 형태로 정보를 저장하거나 전송하기 위한 임의의 스토리지 디바이스, 메커니즘 또는 다른 물리적 구조물(예를 들어, 휘발성 또는 비휘발성 메모리, 매체 디스크(media disc) 또는 다른 매체 디바이스(media device))로서 구현될 수 있다.
도면들에서, 일부 구조 또는 방법 피처들은 특정 배열들 및/또는 순서들(orderings)로 도시될 수 있다. 그러나, 이러한 특정 배열들 및/또는 순서들은 요구되지 않을 수 있다는 점이 인식되어야 한다. 오히려, 일부 실시예들에서, 이러한 피처들은 예시적인 도면들에 도시된 것과는 상이한 방식 및/또는 순서로 배열될 수 있다. 추가적으로, 특정 도면에서의 구조 또는 방법 피처의 포함은 이러한 피처가 모든 실시예에서 요구된다고 암시하는 것을 의미하지는 않으며, 일부 실시예들에서는 포함되지 않을 수도 있고 다른 피처들과 결합될 수도 있다.
이하 도 1을 참조하면, 컴퓨팅 시스템(100)의 실시예는 클라이언트 컴퓨팅 디바이스(110) 및 서버 컴퓨팅 디바이스(142)를 포함한다. 클라이언트 컴퓨팅 디바이스(110) 및 서버 컴퓨팅 디바이스(142)는 하나 이상의 네트워크(140)에 통신가능하게 결합된다. 클라이언트 컴퓨팅 디바이스(110) 및 서버 컴퓨팅 디바이스(142) 중 어느 하나 또는 양쪽 모두는 본 명세서에 개시된 기술들을 이용하도록 구성될 수 있다. 이와 같이, 클라이언트 컴퓨팅 디바이스(110) 및 서버 컴퓨팅 디바이스(142) 중 어느 하나 또는 양쪽 모두는 GPU 스케줄러 모듈(138, 176)을 포함하는 GPU 가상화를 제공할 수 있는 가상화 서비스(132, 162) 및 그래픽 처리 유닛(126, 152)을 구비할 수 있다. 논의의 용이함을 위해, "그래픽 처리 유닛" 또는 "GPU"는, 다른 것들 중에서, 그래픽 처리 유닛, 그래픽 가속기, 또는 다른 타입의 전문화된 전자 회로나 디바이스, 예컨대 범용 GPU(GPGPU), 비주얼 처리 유닛, 가속 처리 유닛(accelerated processing unit)(APU), 필드 프로그램가능 게이트 어레이(FPGA), 또는 가속 처리로부터 혜택을 얻는 그래픽 태스크들 및/또는 다른 컴퓨팅 연산들을 가속화하기 위해 컴퓨팅 디바이스(110, 142)에 의해 이용될 수 있는 임의의 다른 디바이스나 회로를 지칭하기 위해 본 명세서에서 이용될 수 있다. 예시적인 가상화 서비스(132, 162)는, 네이티브 그래픽 드라이버가 각각의 가상 머신(VM) 내부에서 구동되도록, 다수의 상이한 VM을 포함하는 GPU(126, 152)에 대한 가상화 환경을 확립하도록 구성된다.
예시적인 GPU 스케줄러 모듈(138, 176)은 GPU 하드웨어(GPU(126), GPU(152)) 상에서의 실행을 위해 상이한 VM들에 의해 발행되는 특정 타입의 GPU 커맨드들의 스케줄링을 핸들링한다. 예를 들어, GPU 스케줄러 모듈(138, 176)은, VM들에서의 네이티브 그래픽 드라이버들이 GPU(126, 152)의 성능 중대 리소스들(performance critical resources), 예컨대 프레임 버퍼들 및 커맨드 버퍼들에 직접적으로 액세스할 수 있는 동안에 특권 커맨드들의 스케줄링을 핸들링할 수 있다. 아래에 더 상세하게 설명되는 바와 같이, GPU 스케줄러 모듈(138, 176)은, GPU 커맨드들의 하나 이상의 속성, GPU 커맨드 버퍼 종속성들 및/또는 다른 판단 기준들에 기초하여 다수의 가능한 스케줄링 정책으로부터 스케줄링 정책을 동적으로 선택하고, 동적으로 선택된 스케줄링 정책에 따라 GPU 커맨드들을 스케줄링한다. 이러한 방식으로, GPU 스케줄러 모듈(138, 176)은, 다른 것들 중에서, 더 큰 효율을 달성하기 위해 또는 다른 이유들로, GPU 커맨드들 및/또는 VM들 중 하나 이상에 적용가능한 스케줄링 정책을 지능형으로 변경할 수 있다. 예로서, GPU 스케줄러 모듈(138, 176)은, 성능을 개선하기 위해 또는 다른 이유들로, 상이한 VM들이 상이한 타입의 GPU 작업부하들(예를 들어, 하나의 VM 상의 3D 태스크 및 다른 VM 상의 비디오 인코딩 태스크)을 구동하고 있을 때 집단 스케줄링 정책(gang scheduling policy)보다는 오히려 버퍼마다의 스케줄링 정책(per-buffer scheduling policy)(예를 들어, 링 버퍼들에 대한 "링마다의" 정책)을 구현할 수 있다. 본 명세서에서 이용되는 바와 같이, "작업부하(workload)"는, 다른 것들 중에서, 하나 이상의 GPU 커맨드를 포함할 수 있는 GPU 커맨드들의 세트를 지칭할 수 있다. 또한, GPU 스케줄러 모듈(138, 176)은 교착상태 상황을 회피하기 위해 또는 다른 이유들로 크로스-버퍼 동기화(cross-buffer synchronization)를 제공하도록 요구에 따라 집단 스케줄링 정책으로 스위칭할 수 있다.
이하, 클라이언트 컴퓨팅 디바이스(110)를 더 상세하게 참조하면, 예시적인 클라이언트 컴퓨팅 디바이스(110)는 중앙 처리 유닛(CPU)(112) 및 그래픽 처리 유닛(126)을 포함한다. CPU는, 전형적으로 CPU 메모리(116)와 GPU 메모리(128) 사이의 직접 메모리 액세스에 의해, GPU 커맨드들을 포함하는 작업부하들을 GPU(126)에 제출한다. 클라이언트 컴퓨팅 디바이스(110)는 본 명세서에 설명된 기능들을 수행하기 위한 임의의 타입의 디바이스로서 구현될 수 있다. 예를 들어, 클라이언트 컴퓨팅 디바이스(110)는, 스마트폰, 태블릿 컴퓨터, 웨어러블 컴퓨팅 디바이스, 랩톱 컴퓨터, 노트북 컴퓨터, 이동형 컴퓨팅 디바이스, 셀룰러 전화기, 핸드셋, 메시징 디바이스, 차량 텔레매틱스 디바이스, 서버 컴퓨터, 워크스테이션, 분산형 컴퓨팅 시스템, 멀티프로세서 시스템, 소비자 전자 디바이스, 및/또는 본 명세서에 설명된 기능들을 수행하도록 구성된 임의의 다른 컴퓨팅 디바이스로서 구현될 수 있지만, 이에 제한되지는 않는다. 도 1에 도시된 바와 같이, 클라이언트 컴퓨팅 디바이스(110)는 입/출력 서브시스템(114), 데이터 스토리지 디바이스(118), 디스플레이(120), 통신 서브시스템(122), 사용자 인터페이스 서브시스템(124), 운영 체제(130), 가상화 서비스(132), 그래픽 드라이버(134) 및 GPU 스케줄러 모듈(138)을 더 포함한다. 클라이언트 컴퓨팅 디바이스(110)는 GPU(126) 및 GPU 메모리(128)를 더 포함한다. 다른 실시예들에서, 클라이언트 컴퓨팅 디바이스(110)는 이동형 및/또는 정지형 컴퓨터들에서 일반적으로 발견되는 것들과 같은 다른 또는 추가적인 컴포넌트들(예를 들어, 다양한 센서들 및 입/출력 디바이스들)을 포함할 수 있다. 추가적으로, 일부 실시예들에서, 예시적인 컴포넌트들 중 하나 이상은 다른 컴포넌트에 통합되거나 또는 다른 방식으로 다른 컴포넌트의 일부를 형성할 수 있다. 예를 들어, 일부 실시예들에서, CPU 메모리(116) 및 그것의 부분들은 CPU(112)에 통합될 수 있고/있거나, GPU 메모리(128)는 GPU(126)에 통합될 수 있다. 클라이언트 컴퓨팅 디바이스(110)의 컴포넌트들은 소프트웨어, 펌웨어, 하드웨어 또는 소프트웨어와 하드웨어의 조합으로서 구현될 수 있다.
CPU(112)는 본 명세서에 설명된 기능들을 수행할 수 있는 임의의 타입의 프로세서로서 구현될 수 있다. 예를 들어, CPU(112)는 단일 또는 멀티 코어 프로세서(들), 디지털 신호 프로세서, 마이크로컨트롤러, 또는 다른 프로세서나 처리/제어 회로로서 구현될 수 있다. GPU(126)는 본 명세서에 설명된 기능들을 수행할 수 있는 임의의 타입의 그래픽 처리 유닛으로서 구현될 수 있다. 예를 들어, GPU(126)는 단일 또는 멀티 코어 프로세서(들), 디지털 신호 프로세서, 마이크로컨트롤러, 부동 소수점 가속기, 코프로세서, 또는 메모리에서의 데이터를 급속하게 조작하거나 변경하도록 설계된 다른 프로세서나 처리/제어 회로로서 구현될 수 있다. 도면들 및 설명을 단순화하기 위해서, 클라이언트 컴퓨팅 디바이스(110)의 일부 양태들은 아래에 설명되는 서버 컴퓨팅 디바이스(142)를 참조하여 더 상세하게 도시 및 설명된다. 예를 들어, GPU(126), GPU 메모리(128) 및 GPU 스케줄러 모듈(138)의 양태들은 서버 컴퓨팅 디바이스(142)의 대응하는 컴포넌트들을 참조하여 아래에 더 상세하게 설명된다. 일반적으로, 컴퓨팅 디바이스들(110, 142) 중 하나의 컴퓨팅 디바이스의 컴포넌트들의 설명은 다른 컴퓨팅 디바이스(110, 142)의 유사한 컴포넌트들에 동일하게 적용된다.
클라이언트 컴퓨팅 디바이스(110)의 CPU 메모리(116) 및 GPU 메모리(128)는 각각 본 명세서에 설명된 기능들을 수행할 수 있는 임의의 타입의 휘발성이나 비휘발성 메모리 또는 데이터 스토리지로서 구현될 수 있다. 동작 시에, 메모리(116)는 컴퓨팅 디바이스(110)의 동작 중에 이용되는 다양한 데이터 및 소프트웨어, 예컨대 운영 체제들, 애플리케이션들, 프로그램들, 라이브러리들 및 드라이버들을 저장할 수 있다. 예를 들어, CPU 메모리(116)의 부분들은 CPU(112)에 의해 생성되는 GPU 커맨드들 및 커맨드 버퍼들을 적어도 일시적으로 저장하며, GPU 메모리(128)의 부분들은 예를 들어 직접 메모리 액세스에 의해 CPU 메모리(116)로부터 수신되는 GPU 커맨드들을 적어도 일시적으로 저장한다.
CPU 메모리(116)는 예를 들어 I/O 서브시스템(114)을 통해 CPU(112)에 통신가능하게 결합되고, GPU 메모리(128)는 유사하게 GPU(126)에 통신가능하게 결합된다. I/O 서브시스템(114)은 CPU(112), CPU 메모리(116), GPU(126), GPU 메모리(128) 및 클라이언트 컴퓨팅 디바이스(110)의 다른 컴포넌트들과의 입/출력 동작들을 용이하게 하는 회로 및/또는 컴포넌트들로서 구현될 수 있다. 예를 들어, I/O 서브시스템(114)은, 메모리 제어기 허브들, 입/출력 제어 허브들, 펌웨어 디바이스들, 통신 링크들(즉, 점대점 링크들, 버스 링크들, 와이어들, 케이블들, 광 가이드들, 인쇄 회로 보드 트레이스들 등), 및/또는 입/출력 동작들을 용이하게 하는 다른 컴포넌트들 및 서브시스템들로서 구현되거나 또는 다른 방식으로 이들을 포함할 수 있다. 일부 실시예들에서, I/O 서브시스템(114)은 시스템 온 칩(SoC)의 일부를 형성하고, CPU(112), CPU 메모리(116), GPU(126), GPU 메모리(128) 및/또는 컴퓨팅 디바이스(110)의 다른 컴포넌트들과 함께 단일 집적 회로 칩 상에 통합될 수 있다.
데이터 스토리지 디바이스(118)는, 예를 들어 메모리 디바이스들 및 회로들, 메모리 카드들, 하드 디스크 드라이브들, 고체 상태 드라이브들 또는 다른 데이터 스토리지 디바이스들과 같이 데이터의 단기 또는 장기 저장을 위해 구성된 임의의 타입의 디바이스 또는 디바이스들로서 구현될 수 있다. 데이터 스토리지 디바이스(118)는 컴퓨팅 디바이스(110)를 위한 데이터와 펌웨어 코드를 저장하는 시스템 파티션을 포함할 수 있다. 데이터 스토리지 디바이스(118)는 컴퓨팅 디바이스(110)의 운영 체제(130)를 위한 데이터 파일들과 실행 파일들(executables)을 저장하는 운영 체제 파티션을 또한 포함할 수 있다.
디스플레이(120)는, 액정 디스플레이(LCD), 발광 다이오드(LED), 플라즈마 디스플레이, CRT(cathode ray tube) 또는 다른 타입의 디스플레이 디바이스와 같이 디지털 정보를 디스플레이할 수 있는 임의의 타입의 디스플레이로서 구현될 수 있다. 일부 실시예들에서, 디스플레이(120)는 컴퓨팅 디바이스(110)와의 사용자 상호작용을 허용하기 위해 터치 스크린 또는 다른 사용자 입력 디바이스에 결합될 수 있다. 디스플레이(120)는 사용자 인터페이스 서브시스템(124)의 일부일 수 있다. 사용자 인터페이스 서브시스템(124)은, 물리 또는 가상 제어 버튼들 또는 키들, 마이크로폰, 스피커, 단방향 또는 양방향 스틸 및/또는 비디오 카메라, 및/또는 다른 것들을 포함하여, 컴퓨팅 디바이스(110)와의 사용자 상호작용을 용이하게 하는 다수의 추가적인 디바이스를 포함할 수 있다. 사용자 인터페이스 서브시스템(124)은, 컴퓨팅 디바이스(110)를 수반하는 다양한 다른 형태의 인간 상호작용들을 검출, 캡처 및 처리하도록 구성될 수 있는 디바이스들, 예컨대 모션 센서들, 근접 센서들 및 눈 추적 디바이스들을 또한 포함할 수 있다.
컴퓨팅 디바이스(110)는 컴퓨팅 디바이스(110)와 다른 전자 디바이스들 사이의 통신을 가능하게 할 수 있는 통신 서브시스템(122) - 임의의 통신 회로, 디바이스 또는 이들의 집합으로서 구현될 수 있음 - 을 더 포함한다. 통신 서브시스템(122)은 이러한 통신을 시행하기 위해 임의의 하나 이상의 통신 기술(예를 들어, 무선 또는 유선 통신) 및 연관된 프로토콜들(예를 들어, 이더넷, 블루투스®, Wi-Fi®, WiMAX, 3G/LTE 등)을 이용하도록 구성될 수 있다. 통신 서브시스템(122)은 무선 네트워크 어댑터를 포함한 네트워크 어댑터로서 구현될 수 있다.
예시적인 컴퓨팅 디바이스(110)는 다수의 컴퓨터 프로그램 컴포넌트, 예컨대 가상화 서비스(132), 그래픽 드라이버(134), 운영 체제(130) 및 GPU 스케줄러 모듈(138)을 또한 포함한다. 다른 것들 중에서, 운영 체제(130)는, GPU 스케줄러 모듈(138) 및 가상화 서비스(132)와 같은 컴퓨터 애플리케이션들과 컴퓨팅 디바이스(110)의 하드웨어 컴포넌트들 사이의 통신을 용이하게 한다. 운영 체제(130)는, Microsoft Corporation에 의한 WINDOWS의 버전, Google, Inc.에 의한 ANDROID 및/또는 다른 것들과 같이, 본 명세서에 설명된 기능들을 수행할 수 있는 임의의 운영 체제로서 구현될 수 있다. 본 명세서에서 이용되는 바와 같이, "컴퓨터 애플리케이션"은, 다른 것들 중에서, 최종 사용자들이 컴퓨팅 디바이스(110)와 상호작용하게 할 수 있는 "사용자 공간(user space)" 소프트웨어 및/또는 하드웨어 애플리케이션들, 및/또는 프로그래밍 코드가 컴퓨팅 디바이스(110)의 하드웨어 컴포넌트들과 직접적으로 상호작용할 수 있는 "시스템 공간(system space)" 하드웨어 및/또는 소프트웨어 애플리케이션들을 지칭할 수 있다. 컴퓨팅 디바이스(110)의 시스템 공간 컴포넌트들은 컴퓨팅 디바이스(110)의 사용자 공간 컴포넌트들보다 더 큰 특권들을 가질 수 있다.
예시적인 실시예에서, 그래픽 드라이버(134)는 디스플레이(120)와 같은 하드웨어 컴포넌트들과 컴퓨터 애플리케이션들 사이의 통신을 핸들링한다. 일부 실시예들에서, 그래픽 드라이버(134)는, 예를 들어 디바이스-독립적 그래픽 렌더링 태스크들을 다양한 상이한 하드웨어 컴포넌트들(예를 들어, 상이한 타입의 디스플레이들)로 전달할 수 있는 "범용" 드라이버, 및 이러한 디바이스-독립적 태스크들을, 요청된 태스크를 달성하기 위해 특정 하드웨어 컴포넌트가 실행할 수 있는 커맨드들로 변환하는 "디바이스 특정" 드라이버를 포함할 수 있다. 다른 실시예들에서, 범용 드라이버 및 디바이스 특정 드라이버의 부분들은 단일의 드라이버 컴포넌트(예를 들어, 그래픽 드라이버(134))로 결합될 수 있다. 그래픽 드라이버(134)의 부분들은 일부 실시예들에서 운영 체제(130)에 포함될 수 있다. 그래픽 드라이버(134)는 예시적으로는 디스플레이 드라이버이지만; 개시된 GPU 스케줄러 모듈(138)의 양태들은 다른 애플리케이션들에서, 예를 들어 (예를 들어 GPU(126)가 GPGPU로서 구성되는 경우에) GPU(126)로 오프로딩될 수 있는 임의의 종류의 태스크에서 이용될 수 있다.
예시적인 가상화 서비스(132)는 운영 체제(130)에 의해 또는 펌웨어로부터 직접적으로 부트로더에 의해 론칭될 수 있는 하이퍼바이저의 타입으로서 구현된다. 가상화 서비스(132)는 "신(thin)" 하이퍼바이저 또는 더 전통적인 하이퍼바이저, 가상 머신 관리자(VMM) 또는 유사한 가상화 플랫폼으로서 구현될 수 있다. 예를 들어, 가상화 서비스(132)는 XEN 기반(타입-I) VMM, 커널-기반 가상 머신(KVM) 기반(타입-II) VMM 또는 WINDOWS 기반 VMM으로서 구현될 수 있다. 일부 실시예들에서, 가상화 서비스(132)는 시스템 하드웨어로부터 직접적으로 실행될 수 있는 "베어 메탈(bare metal)" 하이퍼바이저로서 구현될 수 있다. 가상화 서비스(132)는, 컴퓨팅 디바이스(110), 특히 GPU(126)의 공유 리소스들의 가상화를 용이하게 하고 관리하는 특권 소프트웨어 또는 펌웨어 컴포넌트로서 구현된다. 이와 같이, 가상화 서비스(132)는, 가상화 서비스(132)가 GPU(126) 및/또는 컴퓨팅 디바이스(110)의 다른 하드웨어 리소스들의 실질적으로 완전 제어를 할 수 있는 컴퓨팅 디바이스(110)의 상위-특권 시스템 모드에서 실행된다. 위에서 언급된 바와 같이, 가상화 서비스(132)는 다수의 가상 머신을 포함하는 GPU(126)를 위한 가상화 환경을 확립할 수 있고, 각각의 가상 머신은 그래픽 드라이버(134)의 그 자신의 인스턴스를 구동한다. GPU 가상화 서비스들의 예시적인 예들은 Intel Corp.에 의한 XenGT 및 nVidia Corp.에 의한 GRID VGZ를 포함한다. GPU 스케줄러 모듈(138)은 가상화 서비스(132)의 컴포넌트로서 구현될 수 있다. 동작 시에, GPU 스케줄러 모듈(138)은 아래에 설명되는 바와 같이 GPU(126)에 대한 GPU 커맨드들의 제출을 관리하기 위해 VM들에서의 그래픽 드라이버(134)의 가상 인스턴스들과 통신한다.
이하, 서버 컴퓨팅 디바이스(142)를 더 상세하게 참조하면, 서버 컴퓨팅 디바이스(142)는 본 명세서에 설명된 기능들을 수행하기 위한 임의의 타입의 디바이스로서 구현될 수 있다. 예를 들어, 서버 컴퓨팅 디바이스(142)는, 스마트폰, 태블릿 컴퓨터, 웨어러블 컴퓨팅 디바이스, 랩톱 컴퓨터, 노트북 컴퓨터, 이동형 컴퓨팅 디바이스, 셀룰러 전화기, 핸드셋, 메시징 디바이스, 차량 텔레매틱스 디바이스, 서버 컴퓨터, 워크스테이션, 분산형 컴퓨팅 시스템, 멀티프로세서 시스템, 소비자 전자 디바이스, 및/또는 본 명세서에 설명된 기능들을 수행하도록 구성된 임의의 다른 컴퓨팅 디바이스로서 구현될 수 있지만, 이에 제한되지는 않는다. 클라이언트 컴퓨팅 디바이스(110)의 위에서 설명된 컴포넌트들과 동일하거나 유사한 명칭들을 갖는 서버 컴퓨팅 디바이스(142)의 컴포넌트들은 유사하게 구현될 수 있으며, 따라서 여기서 설명이 반복되지는 않는다. 또한, 클라이언트 컴퓨팅 디바이스(110)는 서버 컴퓨팅 디바이스(142)의 컴포넌트들 중 임의의 것을 포함할 수 있으며, 이러한 컴포넌트들에 대한 아래의 설명은 클라이언트 컴퓨팅 디바이스(110)의 유사한 컴포넌트들에 동일하게 적용된다는 점이 이해되어야 한다.
예시적인 서버 컴퓨팅 디바이스(142)는 CPU(144), 입/출력 서브시스템(146), 직접 메모리 액세스(DMA) 서브시스템(148), CPU 메모리(150), 운영 체제(160), 가상화 서비스(162), 그래픽 드라이버 모듈(164), 데이터 스토리지 디바이스(166), 디스플레이(168), 통신 서브시스템(170), 사용자 인터페이스 서브시스템(172) 및 GPU 스케줄러 모듈(176)을 포함한다. 서버 컴퓨팅 디바이스(142)는 GPU(152), 렌더 엔진들(render engines)(154), GPU 메모리(156) 및 커맨드 버퍼들(158)을 더 포함한다. 다른 실시예들에서, 서버 컴퓨팅 디바이스(142)는 이동형 및/또는 정지형 컴퓨터들에서 일반적으로 발견되는 것들과 같은 다른 또는 추가적인 컴포넌트들(예를 들어, 다양한 센서들 및 입/출력 디바이스들)을 포함할 수 있다. 추가적으로, 일부 실시예들에서, 예시적인 컴포넌트들 중 하나 이상은 다른 컴포넌트에 통합되거나 또는 다른 방식으로 다른 컴포넌트의 일부를 형성할 수 있다. 서버 컴퓨팅 디바이스(142)의 컴포넌트들은 소프트웨어, 펌웨어, 하드웨어 또는 소프트웨어와 하드웨어의 조합으로서 구현될 수 있다.
GPU(152)는, 예를 들어 다수의 병렬 스레드를 각각 실행할 수 있는 병렬 프로세서들 또는 프로세서 코어들의 어레이인 GPU(152)의 하드웨어 실행 유닛들로서 구현될 수 있는 다수의 렌더 엔진(154)을 포함한다. GPU(152)는 주변 디바이스로서(예를 들어, 별도의 그래픽 카드 상에) 구현될 수 있거나, 또는 CPU 다이 상에 또는 CPU 마더보드 상에 위치할 수 있다. 렌더 엔진들(154)은 각각 특정 타입의 GPU 태스크를 핸들링하도록 구성될 수 있다. 예를 들어, 일부 실시예들에서, 다수의 상이한 렌더 엔진(154)은 3D 렌더링 태스크, 블리터(blitter)(예를 들어, 2D 그래픽), 비디오, 및 비디오 인코딩/디코딩 태스크들을 개별적으로 핸들링하도록 구성될 수 있다.
CPU 메모리(150)의 부분들은 CPU(144)에 의해 생성되는 GPU 커맨드들 및 커맨드 버퍼들을 적어도 일시적으로 저장할 수 있으며, GPU 메모리(156)의 부분들은 GPU 커맨드들을 커맨드 버퍼들(158)에 적어도 일시적으로 저장한다. GPU 커맨드들은 CPU(144)에 의해 직접 메모리 액세스 서브시스템(148)을 지나 커맨드 버퍼들(158)로 전송된다. 직접 메모리 액세스(DMA) 서브시스템(148)은 CPU 메모리(150)와 GPU 메모리(156) 사이의 데이터 전송을 용이하게 한다. 일부 실시예들에서, DMA 서브시스템(148)은 GPU(152)가 CPU 메모리(150)에 직접 액세스하는 것을 허용하며, CPU(144)가 GPU 메모리(156)에 직접 액세스하는 것을 허용한다. DMA 서브시스템(148)은 DMA 제어기 또는 DMA "엔진", 예컨대 PCI(Peripheral Component Interconnect) 디바이스, PCI-익스프레스(Peripheral Component Interconnect-Express) 디바이스, I/O 가속 기술(I/OAT) 디바이스 및/또는 다른 것들로서 구현될 수 있다.
예시적인 커맨드 버퍼들(158)은 링 버퍼들로서 구현되고, 링 버퍼들 각각은 많은 배치 버퍼(batch buffers)를 함께 연쇄화할 수 있다. 일부 실시예들에서, 컴퓨팅 디바이스(142)는 렌더 엔진들(154) 각각에 대해 상이한 커맨드 버퍼(예를 들어, 3D, 블리터, 비디오, 및 비디오 인코딩/디코딩 엔진들(154) 각각에 대해 별개의 링 버퍼들)를 구현한다. 링 버퍼는 예를 들어 비동기식 입력-출력 동작들에 유용할 수 있는 타입의 선입/선출(FIFO) 데이터 구조이다. 다른 타입의 FIFO 데이터 구조들 또는 다른 적합한 타입의 데이터 구조들이 다른 실시예들에서 이용될 수 있다.
가상화 서비스(162)를 통하여, 커맨드 버퍼들(158)은 가상화되고, 그에 의해 가상화 서비스(162)에 의해 확립된 각각의 VM은 커맨드 버퍼들(158)(예를 들어, 각각의 VM 내의 3D, 블리터, 비디오, 및 비디오 인코딩/디코딩 커맨드 버퍼들)의 세트를 포함하고, 커맨드 버퍼들 각각은 병렬로 상이한 커맨드 파서(예를 들어, 3D, 블리터, 비디오, 및 비디오 인코딩/디코딩 커맨드 파서들)에 의해 파싱된다. GPU 스케줄러 모듈(176)은 새로운 VM이 GPU(152)로의 액세스를 위해 스케줄링될 때 컨텍스트 스위치(context switch)를 행할 수 있다. 컨텍스트 스위치에 응답하여, GPU(152)는 커맨드 버퍼들(예를 들어, 새로운 VM과 연관된 커맨드 버퍼들)의 상이한 세트를 서빙할 수 있다.
예시적인 GPU 스케줄러 모듈(176)은 커맨드 스캐너 모듈(178), 커맨드 데이터베이스(180), 아비터 모듈(arbiter module)(182) 및 다수의 스케줄링 정책(184)을 포함한다. GPU 스케줄러 모듈(176), 커맨드 스캐너 모듈(178), 커맨드 데이터베이스(180) 및 아비터 모듈(182)은 임의의 타입의 프로세서 실행가능 코드, 모듈(들) 및/또는 데이터 구조, 또는 이들의 조합으로서 구현될 수 있다. 커맨드 스캐너 모듈(178), 커맨드 데이터베이스(180) 및 아비터 모듈(182)의 양태들은 도 3을 참조하여 아래에 더 상세하게 설명된다.
예시적으로, 스케줄링 정책들(184)은 링마다의 스케줄링 정책(186) 및 집단 스케줄링 정책(188)을 포함한다. 링마다의 스케줄링 정책(186)은 링 버퍼들이 서로에 독립적으로 컨텍스트 스위칭되는 것을 허용하고, 그에 의해 상이한 VM들로부터의 GPU 커맨드들이 상이한 렌더 엔진들(154)을 이용할 경우에 이들이 동시에 스케줄링되는 것을 허용할 수 있다. 그러나, 링마다의 스케줄링 정책의 이용은, 상이한 버퍼들 상의 2개의 GPU 커맨드가 각각 다른 커맨드에 의해 시그널링되는 조건에 종속하는 경우에 또는 상이한 버퍼들 상의 2개의 커맨드가 동일한 조건이 만족되는 것에 종속하는 경우에 교착상태 이슈를 초래할 수 있다. VM의 하나의 링 버퍼 상의 하나의 커맨드의, 동일한 VM의 다른 링 버퍼 상의 다른 커맨드에 의해 시그널링되는 결과에 대한 종속성은, 대기 커맨드(wait command)가 종속하는 조건과 함께 커맨드 버퍼에서의 이 "대기" 커맨드 또는 동기화의 존재에 의해 입증될 수 있다. 이러한 타입의 커맨드 종속성은 "크로스-링 동기화(cross-ring synchronization)", 또는 더 일반적으로는 (동일한 VM의 상이한 버퍼들 상의 GPU 커맨드들의) 크로스-버퍼 동기화 또는 크로스-버퍼 종속성(cross-buffer dependency)으로 지칭될 수 있다.
예로서, 링마다의 스케줄링 정책(186)이 3D 엔진(154)에 의한 실행을 위해 제1 가상 머신(VM1)의 3D 링 버퍼로부터 GPU 작업부하를 수신하고 스케줄링한다고 가정한다. 링마다의 스케줄링 정책(186)은 다른 가상 머신(VM2)의 블리터 링 버퍼로부터 GPU 작업부하를 또한 수신한다. 링마다의 스케줄링 정책에 따르면, VM2 블리터 태스크는 블리터 엔진(154) 상에서 스케줄링될 수 있는데, 그 이유는 블리터 엔진(154)이 VM1에 의해 이용 중이지 않기 때문이다. VM1 3D 작업부하는 3D 렌더링 태스크에 관한 다수의 GPU 커맨드를 포함하지만, 3D 렌더링 태스크는 블리터 엔진(154) 상에서 스케줄링될 필요가 있는 다른 VM1 태스크와 동기화되어야 한다. 이것은 VM1 3D 작업부하에서의 대기 커맨드에 의해 입증될 수 있으며, 이 대기 커맨드는 조건 값 COND1에 종속한다. 값 COND1은 VM1 블리터 태스크에 의해 시그널링된다. 그러나, VM1 블리터 작업부하는 대기 커맨드를 또한 포함하고, 이 대기 커맨드는 조건 값 COND2에 종속하지만, COND2는 VM1 3D 태스크에 의해 시그널링된다. VM1 블리터 태스크는 VM2 블리터 태스크가 완료될 때까지 스케줄링되기를 대기하여야 한다. VM1 3D 태스크는 VM1 블리터 태스크가 COND1을 시그널링할 때까지 완료될 수 없고, VM1 블리터 태스크는 VM1 3D 태스크가 COND2를 시그널링할 때까지 완료될 수 없다. 링마다의 스케줄링 정책(186)에 따르면 (예를 들어, 블리터 엔진(154)이 이용가능하기 때문에 VM2 블리터 커맨드가 스케줄링되는 것을 링마다의 정책이 허용한다는 사실로 인해) 2개의 VM1 태스크가 상이한 시간에 스케줄링되기 때문에, 교착상태 상황이 초래되며, 여기서 GPU(152)에 의한 처리는 단순히 계류(hang)된다. GPU(152)가 커맨드 선점 지원(command preemption support)되도록 구성되는 경우에도 - 여기서, 대기 커맨드는 소정 타임아웃 기간 이후에 선점될 수 있음 -, VM1에서의 대기 커맨드는, 2개의 상이한 커맨드가 우연히 동일한 COND 값을 이용하는 경우에 VM2로부터 시그널링되는 COND 값으로 인해 부정확하게 완료될 수 있다.
집단 스케줄링 정책(188)은, VM에서의 링 버퍼들 모두가, 링마다의 스케줄링 정책(186)에서와 같이 독립적으로보다는 함께 컨텍스트 스위칭되는 것을 요구할 수 있다. 집단 스케줄링 정책(188)은 크로스-링 동기화 이슈들을 극복하기 위해 이용될 수 있다. 위의 예를 계속하면, 집단 스케줄링 정책(188)이 링마다의 스케줄링 정책(186) 대신에 이용된다고 가정한다. 이 경우, 집단 스케줄링 정책(188)은 (3D 및 블리터 엔진들(154) 각각 상의) VM1 3D 커맨드들 및 VM1 블리터 커맨드들을 함께 스케줄링한다. VM1 블리터 커맨드가 COND1을 시그널링할 때, VM1 3D 커맨드는 계속될 수 있다. VM1 3D 커맨드가 COND2를 시그널링할 때, VM1 블리터 커맨드는 계속될 수 있다. VM2로부터의 커맨드들은 스케줄링될 수 있기 이전에 VM1 링 버퍼들 모두로부터의 VM1 커맨드들 모두가 완료되기를 대기해야 한다.
그러나, 집단 스케줄링 정책(188)은 GPU 가상화에서는 비효율적일 수 있다. 예를 들어, GPU 스케줄러 모듈(176)이 VM1 작업부하를 3D 엔진(154) 상에서 구동하도록 스케줄링하고, 다른 VM1 버퍼들 중 임의의 것 상의 다른 작업부하들은 존재하지 않는다고 가정한다. (예를 들어) 비디오 엔진(154)이 VM1에 의해 이용 중이 아닐 지라도(VM1 비디오 버퍼에 GPU 커맨드들이 존재하지 않기 때문임), 집단 스케줄링 정책(188)에 따르면, 비디오 엔진(154)은 VM1 3D 태스크가 완료될 때까지 VM2 비디오 태스크를 구동하는데 이용될 수 없다.
이하 도 2를 참조하면, 일부 실시예들에서, 서버 컴퓨팅 디바이스(142)는 동작 중에 환경(200)을 확립한다. 환경(200)은 특권 가상 환경(210), GPU 스케줄러 모듈(214), 그래픽 드라이버 모듈(216), 커맨드 버퍼들(220), 커맨드 파서들(222), 그래픽 드라이버 모듈들(218), 가상화 서비스(226) 및 GPU 하드웨어(152)를 포함한다. 환경(200)의 다양한 모듈들은 하드웨어, 펌웨어, 소프트웨어 또는 이들의 조합으로서 구현될 수 있다. 예시적인 환경(200)은 가상화 서비스(162)의 실행 인스턴스(가상화 서비스(226))를 포함하고, 이는 특권 가상 환경(210) 및 "N"개의 가상 머신(212)(여기서, N은 양의 정수임)을 확립한다. 특권 가상 환경(일부 구현들에서는 "도메인 0"으로 지칭될 수 있음)은 GPU 스케줄러 모듈(176)의 실행 인스턴스(GPU 스케줄러 모듈(214)) 및 그래픽 드라이버 모듈(164)의 실행 인스턴스(그래픽 드라이버 모듈(216))를 포함한다. VM들(212) 각각은 그래픽 드라이버 모듈(164)의 실행 인스턴스(그래픽 드라이버 모듈(218)), 커맨드 버퍼들(158) 각각의 인스턴스(커맨드 버퍼(220)) 및 커맨드 파서들(222)을 포함한다. 각각의 VM의 커맨드 버퍼들(220)은 예를 들어 3D, 블리터, 비디오, 및 비디오 인코딩/디코딩 링 버퍼들을 포함한다. 그래픽 드라이버 모듈들(216, 218)은 각각 비특권 커맨드들(230, 232)을 GPU 하드웨어(152)에 직접적으로 제출할 수 있다. 특권 GPU 커맨드들(224)은 GPU 스케줄러 모듈(214)에 의해(예를 들어, 트랩-및-에뮬레이션 기술(trap-and-emulation technique)에 의해) 핸들링되고, 본 명세서에 설명된 바와 같은 동적 하이브리드 스케줄링 접근법을 이용하여 GPU(152)에 제출된다.
GPU 스케줄러 모듈(214)은 VM들 모두의 커맨드 버퍼들 모두의 GPU 커맨드들을 평가하고, GPU 커맨드들의 평가의 출력에 응답하여, 다수의 상이한 스케줄링 정책으로부터 스케줄링 정책을 동적으로 선택한다. GPU 스케줄러 모듈(214)은 동적으로 선택된 스케줄링 정책에 따라 GPU에 의한 처리를 위해 GPU 커맨드들 중 적어도 하나를 스케줄링한다. GPU 스케줄러 모듈(214)에 의해 수행되는 "동적" 및/또는 "하이브리드" 스케줄링의 일부 예들은 다음과 같다. GPU 스케줄러 모듈(214)은 2개의 상이한 스케줄링 정책에 따라 2개의 상이한 VM의 GPU 커맨드들을 스케줄링할 수 있다. GPU 스케줄러 모듈(214)은, 예를 들어 동일한 가상 머신의 상이한 커맨드 버퍼들에서의 2개의 GPU 커맨드 사이의 크로스-버퍼 종속성을 검출하는 것에 응답하여, 하나 이상의 VM에 적용가능한 스케줄링 정책을 링마다의 스케줄링 정책으로부터 집단 스케줄링 정책으로 스위칭할 수 있다. 하나의 VM에 대해 링마다의 스케줄링 정책으로부터 집단 스케줄링 정책으로 스위칭한 이후에, GPU 스케줄러 모듈(214)은 상이한 VM의 GPU 커맨드를 평가하고, 상이한 스케줄링 정책에 따라 상이한 VM의 GPU 커맨드를 스케줄링할 수 있다(예를 들어, GPU 스케줄러 모듈(214)은 상이한 VM에 대해 링마다의 스케줄링 정책으로 다시 스위칭하고, 따라서 하나의 VM에서는 집단 스케줄링 정책을 그리고 다른 VM에서는 링마다의 스케줄링 정책을 동시에 구동할 수 있다). 일부 실시예들에서, GPU 스케줄러는 가상 머신들 모두의 커맨드 버퍼들 모두에 걸쳐 크로스-버퍼 종속성들의 발생들을 파악하고, 특정 개수의 커맨드 버퍼에서 또는 특정 시간 기간에 걸쳐 어떠한 크로스-버퍼 종속성들도 검출되지 않는 경우에, 또는 더 일반적으로는 크로스-버퍼 종속성들의 발생의 빈도에 기초하여, 스케줄링 정책을 (예를 들어 링마다의 정책으로부터 집단 정책으로 또는 그 반대로) 변경할 수 있다. 환경(200)의 다양한 모듈들 및 컴포넌트들(예를 들어, GPU 스케줄러 모듈(214))은 하드웨어, 펌웨어, 소프트웨어 또는 이들의 조합으로서 구현될 수 있다. 추가적으로, 일부 실시예들에서, 환경(200)의 모듈들의 일부 또는 전부는 다른 모듈들 또는 소프트웨어/펌웨어 구조들과 통합되거나 또는 이들의 일부를 형성할 수 있다.
GPU 스케줄러 모듈(214)의 동작을 트리거하기 위해서, 일부 실시예들에서, 그래픽 드라이버 모듈(216, 218)은 GPU 커맨드들(224)을 커맨드 버퍼들(220)로 큐잉하고, 다음에 이러한 큐잉된 커맨드들의 커맨드 파서들(222)에 의한 파싱을 개시하기 위해 메모리 매핑된 입력-출력(memory mapped input-output)(MMIO) 레지스터(테일)를 기입한다. 가상 환경(예를 들어, 환경(200))에서, 최종 MMIO 기입이 트래핑되고, 그에 의해 GPU 스케줄러 모듈(214)은 VM들의 GPU 커맨드들의 스케줄링을 수행할 수 있다.
이하 도 3을 참조하면, 일부 실시예들에서, 서버 컴퓨팅 디바이스(142)는 동작 중에 환경(300)을 확립한다. 환경(300)은 GPU 스케줄러 모듈(214), 커맨드 스캐너 모듈들(314, 316), 커맨드 데이터베이스들(318, 320), 링마다의 스케줄링 정책(322), 집단 스케줄링 정책(324) 및 아비터 모듈(326)을 포함한다. 환경(300)의 다양한 모듈들은 하드웨어, 펌웨어, 소프트웨어 또는 이들의 조합으로서 구현될 수 있다. 예시적인 환경(300)은 커맨드 스캐너 모듈(178)의 실행 인스턴스들(커맨드 스캐너 모듈들(314, 316))(예를 들어, VM당 하나의 인스턴스), 커맨드 데이터베이스들(318, 320)의 인스턴스들(예를 들어, VM당 하나의 데이터베이스), 아비터 모듈(182)의 실행 인스턴스(아비터 모듈(326)), 링마다의 스케줄링 정책(186)의 인스턴스(링마다의 스케줄링 정책(322)), 및 집단 스케줄링 정책(188)의 인스턴스(집단 스케줄링 정책(324))를 포함한다. 커맨드 스캐너 모듈들(314, 316) 각각은 그 각각의 VM의 커맨드 버퍼들 모두의 큐잉된 GPU 커맨드들을 스캔한다. 예를 들어, VM1 커맨드 스캐너 모듈(314)은 VM1 커맨드 버퍼들(220)(예를 들어, VM1에 대해, 3D, 블리터, 비디오, 및 비디오 인코딩/디코딩 버퍼들과 같은 다수의 링 버퍼를 포함함)에 포함된 GPU 커맨드들을 스캔한다. 유사하게, VM N 커맨드 스캐너 모듈(316)은 VM N 커맨드 버퍼들(312)(예를 들어, VM N에 대해, 3D, 블리터, 비디오, 및 비디오 인코딩/디코딩 버퍼들과 같은 다수의 링 버퍼를 포함함)에 포함된 GPU 커맨드들을 스캔한다.
각각의 커맨드 스캐너 모듈(314, 316)은 동일한 가상 머신의 상이한 커맨드 버퍼들에서의 GPU 커맨드들 사이의 크로스-버퍼 종속성들을 나타내는 데이터를 발생시키고, 커맨드 데이터베이스(318, 320)를 생성하고, 크로스-버퍼 종속성들을 나타내는 데이터를 커맨드 데이터베이스(318, 320)에 저장한다. 즉, 각각의 커맨드 스캐너 모듈(314, 316)은 그 각각의 VM의 GPU 커맨드들에서의 크로스-버퍼 종속성들을 식별하고, 이러한 종속성들을 표시하는 데이터를 그 각각의 VM에 대한 커맨드 데이터베이스(318, 320)에 저장한다. 커맨드 스캐너 모듈(314, 316)은 VM의 GPU 커맨드들 각각에 대한 커맨드 타입을 결정하고, 이 커맨드 타입을 표시하는 데이터를 커맨드 데이터베이스(318, 320)에 또한 저장할 수 있다. 커맨드 타입은 GPU(152)에 의해 수행될 태스크의 타입, 또는 이러한 태스크(예를 들어, 3D, 블리터, 비디오, 비디오 인코딩/디코딩)을 수행할 특정 렌더 엔진(154)에 대응할 수 있다.
커맨드 스캐너 모듈(314, 316)은, 특정 작업부하 제출이 크로스-버퍼 종속성을 포함한다고 커맨드 스캐너 모듈(314, 316)이 결정하는 경우에 이 제출과 플래그를 연관시킬 수 있다. 이것을 행하기 위해서, 커맨드 스캐너는 GPU 커맨드들의 세트의 적소 인스트루먼테이션(in-place instrumentation)을 수행할 수 있다. 커맨드 버퍼들(220, 312)이 링 버퍼들로서 구현되는 경우, 커맨드 스캐너 모듈(314, 316)은 크로스-링 동기화 프리미티브들(cross-ring synchronization primitives)을 식별하고, 크로스-링 동기화 프리미티브들의 존재 또는 부재에 관한 데이터를 커맨드 데이터베이스(318, 320)에 저장할 수 있다. 예를 들어, 커맨드 스캐너 모듈(314, 316)은 임의의 크로스-링 동기화 프리미티브들이 존재하는지를 결정하고, 임의의 크로스-링 동기화 프리미티브들이 존재하는 경우, 연관된 커맨드 버퍼(220, 312)에 대해 플래그(예를 들어, REQ_GANG)를 설정할 수 있다. 다음에, 아비터 모듈(326)은 플래그를 체크하고, 플래그가 유효하게(예를 들어, REQ_GANG=YES로) 설정되는 경우, 아비터 모듈(326)은 링마다의 스케줄링 정책(322)으로부터 집단 스케줄링 정책(324)으로의 스위치를 개시한다. 집단 스케줄링 정책(324)으로부터 링마다의 스케줄링 정책(322)으로 다시 스위칭하기 위해서, 아비터 모듈(326)은, VM들 모두에서의 다음 N개의 커맨드 버퍼들에서 크로스-링 동기화 프리미티브들이 검출되지 않는 경우, 링마다의 스케줄링 정책(322)으로 다시 스위칭하는 것과 같이 경험적인 정책을 이용할 수 있다. 본 명세서에서 이용되는 바와 같이, "프리미티브"는, 다른 것들 중에서, 컴퓨팅 플랫폼(예를 들어, 운영 체제)에 의해 제공되며 하위 레벨 메커니즘들(예를 들어, 원자 연산들(atomic operations), 메모리 장벽들, 스핀락들(spinlocks), 컨텍스트 스위치들 등)을 포함할 수 있는 단순 소프트웨어 메커니즘을 지칭할 수 있다. 예로서, 세마포어 커맨드들(예를 들어, 세마포어 "대기" 커맨드)은 다수의 링 버퍼에 의해 공유되는 오브젝트들에 대한 크로스-링 실행을 직렬화하기 위해 컴퓨팅 플랫폼에 의해 제공될 수 있다.
일부 실시예들에서, 커맨드 스캐너 모듈(314, 316)은 그 각각의 VM의 상이한 커맨드 버퍼들 사이에 직접 종속성을 구축할 수 있다. 이것을 행하기 위해서, 커맨드 스캐너 모듈(314, 316)은 VM의 커맨드 데이터베이스(318, 320)에서의 그래프 데이터 구조를 종속성 및 커맨드 타입 정보로 채울 수 있다. 아래의 코드 예 1 및 코드 예 2는, VM1 및 VM2에 대해 커맨드 스캐너 모듈들(314, 316)에 의해 생성되어 VM1 및 VM2에 대한 커맨드 데이터베이스들(318, 320)에 저장될 수 있는 그래프 데이터 구조들에 대한 의사 코드의 예들을 나타낸다.
Figure 112016114748174-pct00001
코드 예 1에서, Buf11, Buf12, Buf13, Buf14는 VM1의 4개의 링 버퍼이다. 코드 예 1은 다음의 종속성 정보(있다면)에 의해 좌우되는 커맨드 타입(예를 들어, 3D, 블리터) 또는 버퍼 타입을 특정한다. 예를 들어, Buf11에서의 3D 커맨드들은, Buf12에서의 블리터 커맨드들이 COND1을 시그널링하기를 대기할 필요가 있다는 점에서, Buf12에서의 블리터 커맨드들에 대한 종속성을 갖는다. 코드 예 1에서, Buf13 및 Buf14는 종속성을 갖지 않는 것으로서 식별된다.
Figure 112016114748174-pct00002
코드 예 2에서, Buf21 및 Buf22는 VM2의 2개의 버퍼이다. 코드 예 2는, 종속성 정보가 커맨드 스캐너 모듈들(314, 316)에 의해 고세밀 레벨(highly granular level)로 구성될 수 있는 것을 예시한다. 예를 들어, 일부 버퍼들은 공동-스케줄링될 수 있는 한편, 다른 버퍼들은 링마다 스케줄링될 수 있다. 이러한 방식으로, 커맨드 스캐너 모듈들(314, 316)은 모드-유연 스케줄링 정책들을 가능하게 할 수 있다. 예로서, VM1이 3D/블리터 종속성들만을 갖는 커맨드 버퍼들을 제출하지만, VM2가 비디오 작업부하들을 갖는 커맨드 버퍼들을 제출하는 경우, GPU 스케줄러 모듈(214)은, VM2의 비디오 작업부하들을 스케줄링하기 위해서는 링마다의 스케줄링 정책을 이용하면서 VM1에 대한 3D/블리터 버퍼들을 집단 스케줄링 정책을 이용하여 공동-스케줄링할 수 있다.
일부 실시예들에서, 커맨드 스캐너 모듈(314, 316)은 현재 버퍼 액티비티에 기초하여 정책 스위칭을 추가로 제어하기 위해 커맨드 데이터베이스들(318, 320)에서 임계 테스트 또는 값을 도입할 수 있다. 예를 들어, 크로스-링 동기화 프리미티브들이 (예를 들어, 소정 시간 기간에 걸친 많은 관측 또는 많은 커맨드 버퍼에서) 빈번하게 관측되는 경우, 이것은, 네이티브 그래픽 드라이버(134)가 통상 코스에서 그러한 프리미티브들을 이용하도록 설계된다는 표시일 수 있다. 결과적으로, 커맨드 스캐너 모듈(314, 316)은, 임계 값(예를 들어, 검출되는 동기화 프리미티브들의 개수)에 도달하거나 초과한 이후까지 집단 스케줄링 정책(188)이 구현되는 것을 방지하기 위해서 이 임계 값을 이용할 수 있다.
아비터 모듈(326)은 가상 머신들 모두의 커맨드 데이터베이스들을 평가하고, 커맨드 데이터베이스들(318, 320) 모두의 평가에 기초하여 가상 머신들 중 적어도 하나의 가상 머신에 대한 스케줄링 정책을 선택한다. 아비터 모듈(326)은 하나 이상의 GPU 커맨드 및/또는 VM에 대한 스케줄링 정책을 동적으로 선택하기 위해 커맨드 데이터베이스들(318, 320) 및 스케줄링 정책들(322, 324)을 이용한다. 이것을 행하기 위해서, 아비터 모듈(326)은 스케줄링 정책들(322, 324)을 고려하여 커맨드 데이터베이스들(318, 320)에서의 정보를 분석한다. 이러한 분석의 결과로서, 아비터 모듈(326)은 링마다의 스케줄링 정책(322)으로부터 집단 스케줄링 정책(324)으로의 스위치 또는 집단 스케줄링 정책(324)으로부터 링마다의 스케줄링 정책(322)으로의 스위치를 개시할 수 있다. 링마다의 스케줄링 정책(322)으로부터 집단 스케줄링 정책(324)으로의 스위칭 시에, 아비터 모듈(326)은 필요에 따라 링 버퍼들 모두가 유휴 상태로 되기를 대기하기 위해서 랑데뷰 프로세스(rendezvous process)를 개시할 수 있다.
이하 도 4를 참조하면, GPU 제출에 대한 스케줄링 정책을 동적으로 선택하기 위한 방법(400)의 예가 도시되어 있다. 방법(400)의 부분들은 컴퓨팅 디바이스(110) 또는 컴퓨팅 디바이스(142)의 하드웨어, 펌웨어 및/또는 소프트웨어에 의해, 예를 들어 CPU(112, 144) 및 GPU(126, 152)에 의해 실행될 수 있다. 블록(410)에서, 컴퓨팅 디바이스(110, 142)는 VM으로부터 GPU 제출을 수신하는데, 여기서 VM은 컴퓨팅 디바이스(110, 142)의 GPU 가상화 서비스에 의해 확립되는 다수의 VM 중 하나이고, VM은 다수의 상이한 커맨드 버퍼 및 네이티브 그래픽 드라이버를 갖는다. 제출은 VM의 상이한 커맨드 버퍼들로부터의 GPU 커맨드들을 포함한다. 블록(412)에서, 컴퓨팅 디바이스(110, 142)는 제출의 GPU 커맨드를 스캔한다. 그렇게 행하면서, 컴퓨팅 디바이스(110, 142)는 GPU 커맨드의 시맨틱(semantics)을 체크하여, 커맨드 타입(예를 들어, 어느 엔진(154)이 커맨드를 처리해야 하는지: 3D, 블리터, 비디오, 또는 비디오 인코딩/디코딩)을 결정하고/하거나, 임의의 크로스-버퍼 종속성들(예를 들어, 임의의 크로스-링 동기화 프리미티브들의 존재)이 존재하는지를 결정한다.
블록(414)에서, 컴퓨팅 디바이스(110, 142)는 크로스-버퍼 종속성들(있다면)을 식별한다. 크로스-버퍼 종속성이 식별되는 경우, 블록(416)에서, 컴퓨팅 디바이스(110, 142)는 VM의 제출과 플래그(예를 들어, REQ_GANG=YES)를 연관시킨다. 크로스-버퍼 종속성이 식별되지 않는 경우, 컴퓨팅 디바이스(110, 142)는 (제출이 스캔될 다른 커맨드를 포함하는 경우) 블록(418)에서 VM으로부터의 제출에서의 다른 GPU 커맨드의 스캔으로 진행한다. 스캔될 다른 GPU 커맨드가 존재하는 경우, 컴퓨팅 디바이스(110, 142)는 블록(412)으로 리턴한다. 스캔될 필요가 있는 제출에서의 다른 GPU 커맨드들이 존재하지 않는 경우, 컴퓨팅 디바이스(110, 142)는 블록(420)에서 VM에 대한 커맨드 데이터베이스를 구축하는 것으로 진행한다. 블록(424)에서, 컴퓨팅 디바이스(110, 142)는 임의의 크로스-버퍼 종속성 정보 및/또는 커맨드 타입 정보(예를 들어, 블록들(412-416)에서 수행된 스캔 프로세스의 출력)로 인스트루먼팅되는 GPU 커맨드들을 커맨드 데이터베이스에 저장한다.
블록(426)에서, 컴퓨팅 디바이스(110, 142)는 이용가능한 스케줄링 정책들(예를 들어 링마다의 스케줄링 정책 및 집단 스케줄링 정책을 포함함) 및 커맨드 데이터베이스에 포함된 정보에 기초하여 스케줄링 정책을 선택한다. 이것을 행하기 위해서, 컴퓨팅 디바이스(110, 142)는, 조건(예컨대, 크로스-버퍼 종속성의 존재나 부재, 또는 특정 개수 또는 빈도의 크로스-버퍼 종속성들의 존재나 부재)이 발생하였는지를 결정하고 특정된 조건의 발생 또는 이러한 발생의 결여에 기초하여 정책을 선택하기 위해 프로그래밍 로직(예를 들어, 불(Boolean) 로직)을 실행할 수 있다. 블록(428)에서, 컴퓨팅 디바이스(110, 142)는 현재 스케줄링 정책을 변경할 필요가 있는지를 결정한다. 이것을 행하기 위해서, 블록(430)에서, 컴퓨팅 디바이스(110, 142)는 현재 시행 중인 정책과 블록(426)에서 선택된 정책을 비교하고, 정책 변경이 필요한 경우에, 새로운 정책을 구현하는데 필요한 액션(예를 들어, 필요에 따라, 랑데뷰 프로세스)을 개시할 수 있다. 블록(432)에서, 컴퓨팅 디바이스(110, 142)는 현재 스케줄링 정책을 업데이트할 수 있다. 예를 들어, 위에서 언급된 바와 같이, 많은 크로스-버퍼 종속성이 발생한다고 소정 시간 기간에 걸쳐 컴퓨팅 디바이스(110, 142)가 통지하는 경우, 컴퓨팅 디바이스(110, 142)는 집단 스케줄링 정책을 업데이트하여, 단지 특정 임계 개수의 크로스-버퍼 종속성이 검출된 이후에 이 정책이 구현되게 할 수 있다. 컴퓨팅 디바이스(110, 142)는 업데이트된 정책을 예를 들어 데이터 스토리지 디바이스(118, 166)에 저장할 수 있다.
이하 도 5를 참조하면, 본 명세서에 개시된 동적 선택 하이브리드 GPU 스케줄링 접근법의 구현의 예(500)가 도시되어 있다. 예(500)에서, 컴퓨팅 디바이스(110, 142)는 VM1 Buf11(3D) 버퍼와 VM1 Buf12(블리터) 버퍼 사이의 크로스-버퍼 종속성을 식별하였다. 크로스-버퍼 종속성은 "COND1 대기(wait COND1)" 및 "COND1 시그널링(signal COND1)" 동기화 프리미티브들에 의해 표시된다. 결과적으로, 컴퓨팅 디바이스(110, 142)는 VM1에 대해 집단 스케줄링 정책을 구현한다. 그러나, VM1에 대한 3D 버퍼와 블리터 버퍼 사이에만 상호종속성이 있고, 비디오 엔진(154)에 대해서는 엔진간 종속성들이 존재하지 않기 때문에, 컴퓨팅 디바이스(110, 142)는 비디오 엔진(154)에 대해 링마다의 스케줄링을 구현한다. 결과적으로, VM2 Buf21 및 VM2 Buf22 비디오 작업부하들은 GPU(152)의 비디오 엔진(154)에 의해 처리되는 한편, 3D 및 블리터 엔진들(154)은 VM1 Buf11 및 VM1 Buf12 작업부하들을 각각 처리하고 있다. 또한, 일단 종속성 조건이 제거되면, 컴퓨팅 디바이스(110, 142)는 3D 및 블리터 엔진들(154)에 대해 링마다의 스케줄링으로 리턴한다. 결과적으로, VM1 Buf13 및 VM1 Buf14 작업부하들은 3D 및 블리터 엔진들(154) 각각 상에서 동시에 진행될 수 있다.
예들
본 명세서에 개시된 기술들의 예시적인 예들이 아래에 제공된다. 이러한 기술들의 실시예는 아래에 설명되는 예들 중 임의의 하나 이상 및 이러한 예들의 임의의 조합을 포함할 수 있다.
예 1은 가상화된 그래픽 처리 유닛(GPU)에 대한 작업부하 제출들을 스케줄링하기 위한 컴퓨팅 디바이스를 포함한다. 컴퓨팅 디바이스는 복수의 가상 머신을 포함하는 가상화 환경을 확립하는 가상화 서비스를 포함하고, 가상 머신들 각각은 GPU와 통신하는 그래픽 드라이버, 및 GPU 커맨드들을 저장하는 복수의 커맨드 버퍼를 포함한다. 컴퓨팅 디바이스는, 가상 머신들 모두의 커맨드 버퍼들 모두의 GPU 커맨드들을 평가하고; GPU 커맨드들의 평가에 응답하여, 복수의 상이한 스케줄링 정책으로부터 스케줄링 정책을 동적으로 선택하고; 동적으로 선택된 스케줄링 정책에 따라 GPU에 의한 처리를 위해 GPU 커맨드들 중 적어도 하나를 스케줄링하는 GPU 스케줄러 모듈을 또한 포함한다.
예 2는 예 1의 발명 대상을 포함하고, 가상 머신의 커맨드 버퍼들 모두의 GPU 커맨드들을 스캔하고, 동일한 가상 머신의 상이한 커맨드 버퍼들에서의 GPU 커맨드들 사이의 크로스-버퍼 종속성들을 나타내는 데이터를 발생시키고, 크로스-버퍼 종속성들을 나타내는 데이터에 기초하여 스케줄링 정책을 동적으로 선택하는 커맨드 스캐너 모듈을 포함한다.
예 3은 예 1 또는 예 2의 발명 대상을 포함하고, 가상 머신의 커맨드 버퍼들 모두의 GPU 커맨드들을 스캔하고, GPU 커맨드들 각각에 대한 커맨드 타입을 결정하고, GPU 커맨드의 커맨드 타입에 기초하여 GPU 커맨드에 대해 스케줄링 정책을 동적으로 선택하는 커맨드 스캐너 모듈을 포함한다.
예 4는 예 1 내지 예 3 중 어느 하나의 발명 대상을 포함하고, GPU 스케줄러 모듈은 동적으로 선택된 스케줄링 정책에 따라 가상 머신들 중 하나의 가상 머신의 GPU 커맨드들을 스케줄링하고, 상이한 스케줄링 정책에 따라 가상 머신들 중 다른 가상 머신의 GPU 커맨드들을 스케줄링한다.
예 5는 예 1 내지 예 4 중 어느 하나의 발명 대상을 포함하고, GPU 스케줄러 모듈은, 동일한 가상 머신의 상이한 커맨드 버퍼들에 있는 2개의 GPU 커맨드 사이의 크로스-버퍼 종속성을 검출하는 것에 응답하여, 스케줄링 정책을 링마다의 스케줄링 정책으로부터 집단 스케줄링 정책으로 스위칭한다.
예 6은 예 5의 발명 대상을 포함하고, GPU 스케줄러 모듈은 상이한 가상 머신의 GPU 커맨드를 평가하고, 집단 스케줄링 정책이 아닌 스케줄링 정책에 따라 상이한 가상 머신의 GPU 커맨드를 스케줄링한다.
예 7은 예 6의 발명 대상을 포함하고, GPU 스케줄러 모듈은 링마다의 스케줄링 정책에 따라 상이한 가상 머신의 GPU 커맨드를 스케줄링한다.
예 8은 예 1, 예 5 또는 예 6 중 어느 하나의 발명 대상을 포함하고, 커맨드 버퍼들 각각은 링 버퍼로서 구현되고, GPU 스케줄러 모듈은 크로스-링 동기화 프리미티브들에 대해 가상 머신의 GPU 커맨드들을 스캔하고, 크로스-링 동기화 프리미티브들의 존재 또는 부재에 기초하여 가상 머신의 GPU 커맨드들에 대해 스케줄링 정책을 선택한다.
예 9는 예 1, 예 5 또는 예 6 중 어느 하나의 발명 대상을 포함하고, GPU 스케줄러 모듈은, GPU 커맨드들의 평가의 출력에 기초하여 상이한 가상 머신들에 대해 상이한 스케줄링 정책들을 동적으로 선택한다.
예 10은 예 1, 예 5 또는 예 6 중 어느 하나의 발명 대상을 포함하고, 가상 머신들 각각에 대한 커맨드 스캐너 모듈을 포함하고, 각각의 커맨드 스캐너 모듈은 가상 머신의 커맨드 버퍼들 사이의 종속성들을 표시하는 데이터를 포함하는 커맨드 데이터베이스를 생성한다.
예 11은 예 1, 예 5 또는 예 6 중 어느 하나의 발명 대상을 포함하고, 가상 머신들 모두의 커맨드 데이터베이스들을 평가하고, 커맨드 데이터베이스들 모두의 평가에 기초하여 가상 머신들 중 적어도 하나의 가상 머신에 대해 스케줄링 정책을 선택하는 아비터 모듈을 포함한다.
예 12는 예 1, 예 5 또는 예 6 중 어느 하나의 발명 대상을 포함하고, GPU 스케줄러 모듈은 가상 머신의 커맨드 버퍼들 모두의 GPU 커맨드들을 스캔하고, 동일한 가상 머신의 상이한 커맨드 버퍼들에서의 GPU 커맨드들 사이의 크로스-버퍼 종속성들을 검출하고, 소정 시간 기간에 걸쳐 크로스-버퍼 종속성들의 발생의 빈도를 결정하고, 크로스-버퍼 종속성들의 발생의 빈도에 기초하여 스케줄링 정책을 변경한다.
예 13은 예 1, 예 5 또는 예 6 중 어느 하나의 발명 대상을 포함하고, GPU 스케줄러 모듈은 가상 머신들 모두의 커맨드 버퍼들 모두에 걸쳐 크로스-버퍼 종속성들의 발생들에 대해 모니터링하고, 선택된 개수의 커맨드 버퍼들에서 크로스-버퍼 종속성들이 검출되지 않는 경우에 스케줄링 정책을 링마다의 정책으로부터 집단 정책으로 변경한다.
예 14는 가상화된 그래픽 처리 유닛(GPU)에 대한 작업부하 제출들을 스케줄링하기 위한 방법을 포함하고, 이 방법은, 복수의 가상 머신을 포함하는 가상화 환경을 확립하는 단계 - 가상 머신들 각각은 GPU와 통신하는 그래픽 드라이버, 및 GPU 커맨드들을 저장하는 복수의 커맨드 버퍼를 포함함 -; 가상 머신들 모두의 커맨드 버퍼들 모두의 GPU 커맨드들을 평가하는 단계; GPU 커맨드들의 평가의 출력에 응답하여, 복수의 상이한 스케줄링 정책으로부터 스케줄링 정책을 동적으로 선택하는 단계; 및 동적으로 선택된 스케줄링 정책에 따라 GPU에 의한 처리를 위해 GPU 커맨드들 중 적어도 하나를 스케줄링하는 단계를 포함한다.
예 15는 예 14의 발명 대상을 포함하고, 가상 머신의 커맨드 버퍼들 모두의 GPU 커맨드들을 스캔하고, 동일한 가상 머신의 상이한 커맨드 버퍼들에서의 GPU 커맨드들 사이의 크로스-버퍼 종속성들을 나타내는 데이터를 발생시키고, 크로스-버퍼 종속성들을 나타내는 데이터에 기초하여 스케줄링 정책을 동적으로 선택하는 단계를 포함한다.
예 16은 예 14의 발명 대상을 포함하고, 가상 머신의 커맨드 버퍼들 모두의 GPU 커맨드들을 스캔하고, GPU 커맨드들 각각에 대한 커맨드 타입을 결정하고, GPU 커맨드의 커맨드 타입에 기초하여 GPU 커맨드에 대해 스케줄링 정책을 동적으로 선택하는 단계를 포함한다.
예 17은 예 14의 발명 대상을 포함하고, 동적으로 선택된 스케줄링 정책에 따라 가상 머신들 중 하나의 가상 머신의 GPU 커맨드들을 스케줄링하고, 상이한 스케줄링 정책에 따라 가상 머신들 중 다른 가상 머신의 GPU 커맨드들을 스케줄링하는 단계를 포함한다.
예 18은 예 14의 발명 대상을 포함하고, 동일한 가상 머신의 상이한 커맨드 버퍼들에 있는 2개의 GPU 커맨드 사이의 크로스-버퍼 종속성을 검출하는 것에 응답하여, 스케줄링 정책을 링마다의 스케줄링 정책으로부터 집단 스케줄링 정책으로 스위칭하는 단계를 포함한다.
예 19는 예 18의 발명 대상을 포함하고, 상이한 가상 머신의 GPU 커맨드를 평가하고, 집단 스케줄링 정책이 아닌 상이한 스케줄링 정책에 따라 상이한 가상 머신의 GPU 커맨드를 스케줄링하는 단계를 포함한다.
예 20은 예 19의 발명 대상을 포함하고, 링마다의 스케줄링 정책에 따라 상이한 가상 머신의 GPU 커맨드를 스케줄링하는 단계를 포함한다.
예 21은 예 14의 발명 대상을 포함하고, 커맨드 버퍼들 각각은 링 버퍼로서 구현되고, 이 방법은, 크로스-링 동기화 프리미티브들에 대해 가상 머신의 GPU 커맨드들을 스캔하고, 크로스-링 동기화 프리미티브들의 존재 또는 부재에 기초하여 가상 머신의 GPU 커맨드들에 대해 스케줄링 정책을 선택하는 단계를 포함한다.
예 22는 예 14의 발명 대상을 포함하고, GPU 커맨드들의 평가의 출력에 기초하여 상이한 가상 머신들에 대해 상이한 스케줄링 정책들을 동적으로 선택하는 단계를 포함한다.
예 23은 예 14의 발명 대상을 포함하고, 가상 머신들 각각에 대해, 가상 머신의 커맨드 버퍼들 사이의 종속성들을 표시하는 데이터를 포함하는 커맨드 데이터베이스를 생성하는 단계를 포함한다.
예 24는 예 23의 발명 대상을 포함하고, 가상 머신들 모두의 커맨드 데이터베이스들을 평가하고, 커맨드 데이터베이스들 모두의 평가에 기초하여 가상 머신들 중 적어도 하나의 가상 머신에 대해 스케줄링 정책을 선택하는 단계를 포함한다.
예 25는 예 14의 발명 대상을 포함하고, 가상 머신의 커맨드 버퍼들 모두의 GPU 커맨드들을 스캔하고, 동일한 가상 머신의 상이한 커맨드 버퍼들에서의 GPU 커맨드들 사이의 크로스-버퍼 종속성들을 검출하고, 소정 시간 기간에 걸쳐 크로스-버퍼 종속성들의 발생의 빈도를 결정하고, 크로스-버퍼 종속성들의 발생의 빈도에 기초하여 스케줄링 정책을 변경하는 단계를 포함한다.
예 26은 예 14의 발명 대상을 포함하고, 가상 머신들 모두의 커맨드 버퍼들 모두에 걸쳐 크로스-버퍼 종속성들의 발생들에 대해 모니터링하고, 선택된 개수의 커맨드 버퍼들에서 크로스-버퍼 종속성들이 검출되지 않는 경우에 스케줄링 정책을 링마다의 정책으로부터 집단 정책으로 변경하는 단계를 포함한다.
예 27은 컴퓨팅 디바이스를 포함하고, 이 컴퓨팅 디바이스는 프로세서, 및 복수의 명령어가 저장되어 있는 메모리를 포함하고, 이러한 명령어들은, 프로세서에 의해 실행될 때, 컴퓨팅 디바이스가 예 14 내지 예 26 중 어느 하나의 방법을 수행하게 한다.
예 28은 저장되어 있는 복수의 명령어를 포함하는 하나 이상의 머신 판독가능 저장 매체를 포함하고, 이러한 명령어들은, 실행되는 것에 응답하여 컴퓨팅 디바이스가 예 14 내지 예 26 중 어느 하나의 방법을 수행하게 한다.
예 29는 예 14 내지 예 26 중 어느 하나의 방법을 수행하는 수단을 포함하는 컴퓨팅 디바이스를 포함한다.
예 30은 가상화된 그래픽 처리 유닛(GPU)에 대한 작업부하 제출들을 스케줄링하기 위한 시스템을 포함한다. 이 시스템은, 복수의 가상 머신을 포함하는 가상화 환경을 확립하는 수단 - 가상 머신들 각각은 GPU와 통신하는 그래픽 드라이버, 및 GPU 커맨드들을 저장하는 복수의 커맨드 버퍼를 포함함 -; 가상 머신들 모두의 커맨드 버퍼들 모두의 GPU 커맨드들을 평가하는 수단; GPU 커맨드들의 평가의 출력에 응답하여, 복수의 상이한 스케줄링 정책으로부터 스케줄링 정책을 동적으로 선택하는 수단; 및 동적으로 선택된 스케줄링 정책에 따라 GPU에 의한 처리를 위해 GPU 커맨드들 중 적어도 하나를 스케줄링하는 수단을 포함한다.
예 31은 예 30의 발명 대상을 포함하고, 가상 머신들 각각에 대해, 가상 머신의 커맨드 버퍼들 사이의 종속성들을 표시하는 데이터를 포함하는 커맨드 데이터베이스를 생성하는 수단을 포함한다.
예 32는 예 31의 발명 대상을 포함하고, 가상 머신들 모두의 커맨드 데이터베이스들을 평가하고, 커맨드 데이터베이스들 모두의 평가에 기초하여 가상 머신들 중 적어도 하나의 가상 머신에 대해 스케줄링 정책을 선택하는 수단을 포함한다.
예 33은 예 30의 발명 대상을 포함하고, 가상 머신의 커맨드 버퍼들 모두의 GPU 커맨드들을 스캔하고, 동일한 가상 머신의 상이한 커맨드 버퍼들에서의 GPU 커맨드들 사이의 크로스-버퍼 종속성들을 검출하고, 소정 시간 기간에 걸쳐 크로스-버퍼 종속성들의 발생의 빈도를 결정하고, 크로스-버퍼 종속성들의 발생의 빈도에 기초하여 스케줄링 정책을 변경하는 수단을 포함한다.
예 34는 예 30의 발명 대상을 포함하고, 가상 머신들 모두의 커맨드 버퍼들 모두에 걸쳐 크로스-버퍼 종속성들의 발생들에 대해 모니터링하고, 선택된 개수의 커맨드 버퍼들에서 크로스-버퍼 종속성들이 검출되지 않는 경우에 스케줄링 정책을 링마다의 정책으로부터 집단 정책으로 변경하는 수단을 포함한다.

Claims (25)

  1. 가상화된 그래픽 처리 유닛(GPU)에 대한 작업부하 제출들(workload submissions)을 스케줄링하기 위한 컴퓨팅 디바이스로서,
    복수의 가상 머신을 포함하는 가상화 환경을 확립하는 가상화 서비스 애플리케이션 - 상기 가상 머신들 각각은 상기 GPU와 통신하는 그래픽 드라이버, 및 GPU 커맨드들을 저장하는 복수의 커맨드 버퍼를 포함함 -; 및
    GPU 스케줄러 모듈
    을 포함하고,
    상기 GPU 스케줄러 모듈은,
    상기 가상 머신들 모두의 상기 커맨드 버퍼들 모두의 상기 GPU 커맨드들의 속성들 또는 GPU 커맨드 버퍼 종속성들 중 적어도 하나를 평가하고;
    상기 GPU 커맨드들의 평가의 출력에 응답하여, 복수의 상이한 스케줄링 정책으로부터 스케줄링 정책을 동적으로 선택하고;
    상기 동적으로 선택된 스케줄링 정책에 따라 상기 GPU에 의한 처리를 위해 상기 GPU 커맨드들 중 적어도 하나를 스케줄링하고;
    동일한 가상 머신의 상이한 커맨드 버퍼들에 있는 2개의 GPU 커맨드 사이의 크로스-버퍼 종속성을 검출하는 것에 응답하여, 상기 스케줄링 정책을 링마다의 스케줄링 정책(per-ring scheduling policy)으로부터 집단 스케줄링 정책(gang scheduling policy)으로 스위칭하는 컴퓨팅 디바이스.
  2. 제1항에 있어서,
    가상 머신의 커맨드 버퍼들 모두의 GPU 커맨드들을 스캔하고, 동일한 가상 머신의 상이한 커맨드 버퍼들에서의 GPU 커맨드들 사이의 크로스-버퍼 종속성들(cross-buffer dependencies)을 나타내는 데이터를 발생시키고, 상기 크로스-버퍼 종속성들을 나타내는 데이터에 기초하여 상기 스케줄링 정책을 동적으로 선택하는 커맨드 스캐너 모듈을 포함하는 컴퓨팅 디바이스.
  3. 제1항에 있어서,
    가상 머신의 커맨드 버퍼들 모두의 GPU 커맨드들을 스캔하고, 상기 GPU 커맨드들 각각에 대한 커맨드 타입을 결정하고, GPU 커맨드의 커맨드 타입에 기초하여 상기 GPU 커맨드에 대해 상기 스케줄링 정책을 동적으로 선택하는 커맨드 스캐너 모듈을 포함하는 컴퓨팅 디바이스.
  4. 제1항에 있어서,
    상기 GPU 스케줄러 모듈은 상기 동적으로 선택된 스케줄링 정책에 따라 상기 가상 머신들 중 하나의 가상 머신의 GPU 커맨드들을 스케줄링하고, 상이한 스케줄링 정책에 따라 상기 가상 머신들 중 다른 가상 머신의 GPU 커맨드들을 스케줄링하는 컴퓨팅 디바이스.
  5. 삭제
  6. 제1항에 있어서,
    상기 GPU 스케줄러 모듈은 상이한 가상 머신의 GPU 커맨드의 속성들 또는 GPU 커맨드 버퍼 종속성들 중 적어도 하나를 평가하고, 집단 스케줄링 정책이 아닌 스케줄링 정책에 따라 상기 상이한 가상 머신의 GPU 커맨드를 스케줄링하는 컴퓨팅 디바이스.
  7. 제1항에 있어서,
    상기 커맨드 버퍼들 각각은 링 버퍼로서 구현되고, 상기 GPU 스케줄러 모듈은 크로스-링 동기화 프리미티브들(cross-ring synchronization primitives)에 대해 가상 머신의 GPU 커맨드들을 스캔하고, 크로스-링 동기화 프리미티브들의 존재 또는 부재에 기초하여 상기 가상 머신의 상기 GPU 커맨드들에 대해 상기 스케줄링 정책을 선택하는 컴퓨팅 디바이스.
  8. 제1항에 있어서,
    상기 GPU 스케줄러 모듈은, 상기 GPU 커맨드들의 평가의 출력에 기초하여 상이한 가상 머신들에 대해 상이한 스케줄링 정책들을 동적으로 선택하는 컴퓨팅 디바이스.
  9. 제1항에 있어서,
    상기 가상 머신들 각각에 대한 커맨드 스캐너 모듈을 포함하고, 각각의 커맨드 스캐너 모듈은 상기 가상 머신의 커맨드 버퍼들 사이의 종속성들을 표시하는 데이터를 포함하는 커맨드 데이터베이스를 생성하는 컴퓨팅 디바이스.
  10. 제1항에 있어서,
    상기 가상 머신들 모두의 커맨드 데이터베이스들을 평가하고, 상기 커맨드 데이터베이스들 모두의 평가에 기초하여 상기 가상 머신들 중 적어도 하나의 가상 머신에 대해 상기 스케줄링 정책을 선택하는 아비터(arbiter)를 포함하는 컴퓨팅 디바이스.
  11. 제1항에 있어서,
    상기 GPU 스케줄러 모듈은 가상 머신의 커맨드 버퍼들 모두의 GPU 커맨드들을 스캔하고, 동일한 가상 머신의 상이한 커맨드 버퍼들에서의 GPU 커맨드들 사이의 크로스-버퍼 종속성들을 검출하고, 시간 기간에 걸쳐 상기 크로스-버퍼 종속성들의 발생의 빈도를 결정하고, 상기 크로스-버퍼 종속성들의 발생의 빈도에 기초하여 상기 스케줄링 정책을 변경하는 컴퓨팅 디바이스.
  12. 제1항에 있어서,
    상기 GPU 스케줄러 모듈은 상기 가상 머신들 모두의 상기 커맨드 버퍼들 모두에 걸쳐 크로스-버퍼 종속성들의 발생들에 대해 모니터링하고, 선택된 개수의 상기 커맨드 버퍼들에서 크로스-버퍼 종속성들이 검출되지 않는 경우에 상기 스케줄링 정책을 링마다의 정책으로부터 집단 정책으로 변경하는 컴퓨팅 디바이스.
  13. 가상화된 그래픽 처리 유닛(GPU)에 대한 작업부하 제출들을 스케줄링하기 위한 방법으로서,
    복수의 가상 머신을 포함하는 가상화 환경을 확립하는 단계 - 상기 가상 머신들 각각은 상기 GPU와 통신하는 그래픽 드라이버, 및 GPU 커맨드들을 저장하는 복수의 커맨드 버퍼를 포함함 -;
    상기 가상 머신들 모두의 상기 커맨드 버퍼들 모두의 상기 GPU 커맨드들의 속성들 또는 GPU 커맨드 버퍼 종속성들 중 적어도 하나를 평가하는 단계;
    상기 GPU 커맨드들의 평가의 출력에 응답하여, 복수의 상이한 스케줄링 정책으로부터 스케줄링 정책을 동적으로 선택하는 단계;
    상기 동적으로 선택된 스케줄링 정책에 따라 상기 GPU에 의한 처리를 위해 상기 GPU 커맨드들 중 적어도 하나를 스케줄링하는 단계; 및
    동일한 가상 머신의 상이한 커맨드 버퍼들에 있는 2개의 GPU 커맨드 사이의 크로스-버퍼 종속성을 검출하는 것에 응답하여, 상기 스케줄링 정책을 링마다의 스케줄링 정책으로부터 집단 스케줄링 정책으로 스위칭하는 단계
    를 포함하는 방법.
  14. 제13항에 있어서,
    가상 머신의 커맨드 버퍼들 모두의 GPU 커맨드들을 스캔하고, 동일한 가상 머신의 상이한 커맨드 버퍼들에서의 GPU 커맨드들 사이의 크로스-버퍼 종속성들을 나타내는 데이터를 발생시키고, 상기 크로스-버퍼 종속성들을 나타내는 데이터에 기초하여 상기 스케줄링 정책을 동적으로 선택하는 단계를 포함하는 방법.
  15. 제13항에 있어서,
    가상 머신의 커맨드 버퍼들 모두의 GPU 커맨드들을 스캔하고, 상기 GPU 커맨드들 각각에 대한 커맨드 타입을 결정하고, GPU 커맨드의 커맨드 타입에 기초하여 상기 GPU 커맨드에 대해 상기 스케줄링 정책을 동적으로 선택하는 단계를 포함하는 방법.
  16. 제13항에 있어서,
    상기 동적으로 선택된 스케줄링 정책에 따라 상기 가상 머신들 중 하나의 가상 머신의 GPU 커맨드들을 스케줄링하고, 상이한 스케줄링 정책에 따라 상기 가상 머신들 중 다른 가상 머신의 GPU 커맨드들을 스케줄링하는 단계를 포함하는 방법.
  17. 삭제
  18. 제13항에 있어서,
    상이한 가상 머신의 GPU 커맨드의 속성들 또는 GPU 커맨드 버퍼 종속성들 중 적어도 하나를 평가하고, 집단 스케줄링 정책이 아닌 상이한 스케줄링 정책에 따라 상기 상이한 가상 머신의 GPU 커맨드를 스케줄링하는 단계를 포함하는 방법.
  19. 제13항에 있어서,
    상기 커맨드 버퍼들 각각은 링 버퍼로서 구현되고, 상기 방법은, 크로스-링 동기화 프리미티브들에 대해 가상 머신의 GPU 커맨드들을 스캔하고, 크로스-링 동기화 프리미티브들의 존재 또는 부재에 기초하여 상기 가상 머신의 상기 GPU 커맨드들에 대해 상기 스케줄링 정책을 선택하는 단계를 포함하는 방법.
  20. 제13항에 있어서,
    상기 GPU 커맨드들의 평가의 출력에 기초하여 상이한 가상 머신들에 대해 상이한 스케줄링 정책들을 동적으로 선택하는 단계를 포함하는 방법.
  21. 저장되어 있는 복수의 명령어를 포함하는 하나 이상의 머신 판독가능 저장 매체로서,
    상기 명령어들은, 실행되는 것에 응답하여, 컴퓨팅 디바이스로 하여금, 가상화된 그래픽 처리 유닛(GPU)에 대한 작업부하 제출들을,
    복수의 가상 머신을 포함하는 가상화 환경을 확립하는 것 - 상기 가상 머신들 각각은 상기 GPU와 통신하는 그래픽 드라이버, 및 GPU 커맨드들을 저장하는 복수의 커맨드 버퍼를 포함함 -;
    상기 가상 머신들 모두의 상기 커맨드 버퍼들 모두의 상기 GPU 커맨드들의 속성들 또는 GPU 커맨드 버퍼 종속성들 중 적어도 하나를 평가하는 것;
    상기 GPU 커맨드들의 평가의 출력에 응답하여, 복수의 상이한 스케줄링 정책으로부터 스케줄링 정책을 동적으로 선택하는 것;
    상기 동적으로 선택된 스케줄링 정책에 따라 상기 GPU에 의한 처리를 위해 상기 GPU 커맨드들 중 적어도 하나를 스케줄링하는 것; 및
    동일한 가상 머신의 상이한 커맨드 버퍼들에 있는 2개의 GPU 커맨드 사이의 크로스-버퍼 종속성을 검출하는 것에 응답하여, 상기 스케줄링 정책을 링마다의 스케줄링 정책으로부터 집단 스케줄링 정책으로 스위칭하는 것
    에 의해, 스케줄링하게 하는 하나 이상의 머신 판독가능 저장 매체.
  22. 제21항에 있어서,
    상기 명령어들은, 실행될 때, 상기 컴퓨팅 디바이스로 하여금, 상기 가상 머신들 각각에 대해, 상기 가상 머신의 커맨드 버퍼들 사이의 종속성들을 표시하는 데이터를 포함하는 커맨드 데이터베이스를 생성하게 하는 하나 이상의 머신 판독가능 저장 매체.
  23. 제22항에 있어서,
    상기 명령어들은, 실행될 때, 상기 컴퓨팅 디바이스로 하여금, 상기 가상 머신들 모두의 커맨드 데이터베이스들 내의 크로스-버퍼 종속성 정보 또는 커맨드 타입 정보 중 적어도 하나를 평가하고, 상기 커맨드 데이터베이스들 모두의 평가에 기초하여 상기 가상 머신들 중 적어도 하나의 가상 머신에 대해 상기 스케줄링 정책을 선택하게 하는 하나 이상의 머신 판독가능 저장 매체.
  24. 제21항에 있어서,
    상기 명령어들은, 실행될 때, 상기 컴퓨팅 디바이스로 하여금, 가상 머신의 커맨드 버퍼들 모두의 GPU 커맨드들을 스캔하고, 동일한 가상 머신의 상이한 커맨드 버퍼들에서의 GPU 커맨드들 사이의 크로스-버퍼 종속성들을 검출하고, 시간 기간에 걸쳐 상기 크로스-버퍼 종속성들의 발생의 빈도를 결정하고, 상기 크로스-버퍼 종속성들의 발생의 빈도에 기초하여 상기 스케줄링 정책을 변경하게 하는 하나 이상의 머신 판독가능 저장 매체.
  25. 제21항에 있어서,
    상기 명령어들은, 실행될 때, 상기 컴퓨팅 디바이스로 하여금, 상기 가상 머신들 모두의 상기 커맨드 버퍼들 모두에 걸쳐 크로스-버퍼 종속성들의 발생들에 대해 모니터링하고, 선택된 개수의 상기 커맨드 버퍼들에서 크로스-버퍼 종속성들이 검출되지 않는 경우에 상기 스케줄링 정책을 링마다의 정책으로부터 집단 정책으로 변경하게 하는 하나 이상의 머신 판독가능 저장 매체.
KR1020167032786A 2014-06-26 2014-06-26 가상화 환경에서의 지능형 gpu 스케줄링 KR101900172B1 (ko)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2014/080814 WO2015196409A1 (en) 2014-06-26 2014-06-26 Intelligent gpu scheduling in a virtualization environment

Publications (2)

Publication Number Publication Date
KR20160146948A KR20160146948A (ko) 2016-12-21
KR101900172B1 true KR101900172B1 (ko) 2018-09-18

Family

ID=54936475

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020167032786A KR101900172B1 (ko) 2014-06-26 2014-06-26 가상화 환경에서의 지능형 gpu 스케줄링

Country Status (6)

Country Link
US (1) US10133597B2 (ko)
EP (2) EP3866007A1 (ko)
JP (1) JP6437579B2 (ko)
KR (1) KR101900172B1 (ko)
CN (2) CN111459618A (ko)
WO (1) WO2015196409A1 (ko)

Families Citing this family (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9928034B2 (en) * 2014-12-17 2018-03-27 Nvidia Corporation Work-efficient, load-balanced, merge-based parallelized consumption of sequences of sequences
JP2018512661A (ja) * 2015-03-23 2018-05-17 インテル コーポレイション グラフィックス・プロセッサ仮想化のためのシャドー・コマンド・リング
US10437637B1 (en) * 2015-05-26 2019-10-08 Thin CI, Inc. Configurable scheduler for graph processing on multi-processor computing systems
US10970129B2 (en) 2015-09-22 2021-04-06 Intel Corporation Intelligent GPU scheduling in a virtualization environment
WO2017107059A1 (en) 2015-12-22 2017-06-29 Intel Corporation Method and apparatus for best effort quality of service (qos) scheduling in a graphics processing architecture
WO2018050243A1 (en) * 2016-09-16 2018-03-22 Huawei Technologies Co., Ltd. Optimize operating system timers for high activation rate
US10304421B2 (en) * 2017-04-07 2019-05-28 Intel Corporation Apparatus and method for remote display and content protection in a virtualized graphics processing environment
US10496150B2 (en) * 2017-07-13 2019-12-03 Red Hat, Inc. Power consumption optimization on the cloud
KR102091481B1 (ko) 2017-11-29 2020-03-20 국민대학교산학협력단 동적 신경망 학습 방법 및 이를 수행하는 동적 신경망 학습 장치
US20190205153A1 (en) 2017-12-29 2019-07-04 Virtual Instruments Corporation System and method of dynamically assigning device tiers based on application
US11223534B2 (en) 2017-12-29 2022-01-11 Virtual Instruments Worldwide, Inc. Systems and methods for hub and spoke cross topology traversal
CN108710536B (zh) * 2018-04-02 2021-08-06 上海交通大学 一种多层次细粒度的虚拟化gpu调度优化方法
CN108829516B (zh) * 2018-05-31 2021-08-10 安徽四创电子股份有限公司 一种图形处理器资源虚拟化调度方法
US11900157B2 (en) * 2018-09-19 2024-02-13 Intel Corporation Hybrid virtual GPU co-scheduling
US11200063B2 (en) * 2018-09-27 2021-12-14 Intel Corporation Graphics engine reset and recovery in a multiple graphics context execution environment
US10983835B2 (en) 2018-12-05 2021-04-20 Electronics And Telecommunications Research Institute Apparatus and method for setting allocation rate of parallel-computing accelerator
CN110308992B (zh) * 2019-06-24 2022-12-27 中国航空无线电电子研究所 面向多分区的gpu访问管理方法
JP7226169B2 (ja) * 2019-07-26 2023-02-21 株式会社デンソー 電子制御装置
US11366690B2 (en) * 2019-12-02 2022-06-21 Alibaba Group Holding Limited Scheduling commands in a virtual computing environment
US11977933B2 (en) * 2019-12-19 2024-05-07 Advanced Micro Devices, Inc. Gang scheduling with an onboard graphics processing unit and user-based queues
US20210192672A1 (en) * 2019-12-19 2021-06-24 Advanced Micro Devices, Inc. Cross gpu scheduling of dependent processes
CN112600882B (zh) * 2020-12-01 2022-03-08 上海交通大学 一种基于共享内存通信模式的硬件加速方法
KR102353036B1 (ko) * 2021-08-30 2022-01-20 주식회사 페블 그래픽 메모리 기반의 2차원 그래픽 명령어를 처리하는 장치 및 방법
CN115599513B (zh) * 2022-04-07 2023-11-03 荣耀终端有限公司 资源调度方法及电子设备
CN114998500B (zh) * 2022-07-20 2022-11-18 南京芯驰半导体科技有限公司 基于soc平台的渲染系统及方法
CN116579914B (zh) * 2023-07-14 2023-12-12 南京砺算科技有限公司 一种图形处理器引擎执行方法、装置、电子设备及存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040160446A1 (en) 2003-02-18 2004-08-19 Gosalia Anuj B. Multithreaded kernel for graphics processing unit
US8341624B1 (en) 2006-09-28 2012-12-25 Teradici Corporation Scheduling a virtual machine resource based on quality prediction of encoded transmission of images generated by the virtual machine
US20130057563A1 (en) 2010-04-28 2013-03-07 Telefonaktiebolaget L M Ericsson (Publ) Technique for GPU Command Scheduling
US20140055466A1 (en) 2012-08-23 2014-02-27 Citrix Systems Inc. Specialized virtual machine to virtualize hardware resource for guest virtual machines

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3901112B2 (ja) * 2003-03-06 2007-04-04 日本電気株式会社 ギャングスケジューリング方式
CN1297894C (zh) * 2003-09-30 2007-01-31 国际商业机器公司 用于调度作业的方法、调度器以及网络计算机系统
US7619631B1 (en) * 2006-03-28 2009-11-17 Nvidia Corporation Methods and systems for performing anti-aliasing operations with multiple graphics processing units
EP3413198A1 (en) * 2007-04-11 2018-12-12 Apple Inc. Data parallel computing on multiple processors
US8040901B1 (en) * 2008-02-06 2011-10-18 Juniper Networks, Inc. Packet queueing within ring networks
US8310492B2 (en) * 2009-09-03 2012-11-13 Ati Technologies Ulc Hardware-based scheduling of GPU work
US8854381B2 (en) * 2009-09-03 2014-10-07 Advanced Micro Devices, Inc. Processing unit that enables asynchronous task dispatch
US8463918B2 (en) 2010-01-22 2013-06-11 Microsoft Corporation Loss tolerant protocol for remoting desktop graphics
US9235452B2 (en) 2010-02-05 2016-01-12 Microsoft Technology Licensing, Llc Graphics remoting using augmentation data
US9176795B2 (en) * 2010-12-13 2015-11-03 Advanced Micro Devices, Inc. Graphics processing dispatch from user mode
US9176794B2 (en) * 2010-12-13 2015-11-03 Advanced Micro Devices, Inc. Graphics compute process scheduling
US20120167082A1 (en) * 2010-12-23 2012-06-28 Sanjay Kumar Direct sharing of smart devices through virtualization
CN102546379B (zh) * 2010-12-27 2014-12-31 中国移动通信集团公司 一种虚拟化资源调度的方法及虚拟化资源调度系统
CN102541618B (zh) * 2010-12-29 2015-05-27 中国移动通信集团公司 一种通用图形处理器虚拟化的实现方法、系统及装置
US9727385B2 (en) * 2011-07-18 2017-08-08 Apple Inc. Graphical processing unit (GPU) implementing a plurality of virtual GPUs
CN102725736B (zh) 2011-12-31 2014-03-12 华为技术有限公司 基于虚拟化技术的图形显示方法及系统
US9311169B2 (en) 2012-05-02 2016-04-12 Nvidia Corporation Server based graphics processing techniques
CN103164283B (zh) * 2012-05-10 2018-08-10 上海兆民云计算科技有限公司 一种虚拟桌面系统中虚拟化资源动态调度管理方法及系统
US9891949B2 (en) * 2013-03-06 2018-02-13 Nvidia Corporation System and method for runtime scheduling of GPU tasks
US9898794B2 (en) * 2014-06-19 2018-02-20 Vmware, Inc. Host-based GPU resource scheduling

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040160446A1 (en) 2003-02-18 2004-08-19 Gosalia Anuj B. Multithreaded kernel for graphics processing unit
US8341624B1 (en) 2006-09-28 2012-12-25 Teradici Corporation Scheduling a virtual machine resource based on quality prediction of encoded transmission of images generated by the virtual machine
US20130057563A1 (en) 2010-04-28 2013-03-07 Telefonaktiebolaget L M Ericsson (Publ) Technique for GPU Command Scheduling
US20140055466A1 (en) 2012-08-23 2014-02-27 Citrix Systems Inc. Specialized virtual machine to virtualize hardware resource for guest virtual machines

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Kun Tian 외 2명. ‘A Full GPU Virtualization Solution with Mediated Pass-Through’. 2014 USENIX Annual Technical Conference, 2014.06.19., pp.121-132.*

Also Published As

Publication number Publication date
EP3161628A4 (en) 2018-02-21
CN106663021B (zh) 2021-01-19
EP3866007A1 (en) 2021-08-18
CN106663021A (zh) 2017-05-10
KR20160146948A (ko) 2016-12-21
US20170123849A1 (en) 2017-05-04
JP2017522659A (ja) 2017-08-10
EP3161628A1 (en) 2017-05-03
WO2015196409A1 (en) 2015-12-30
JP6437579B2 (ja) 2018-12-12
CN111459618A (zh) 2020-07-28
EP3161628B1 (en) 2021-03-31
US10133597B2 (en) 2018-11-20

Similar Documents

Publication Publication Date Title
KR101900172B1 (ko) 가상화 환경에서의 지능형 gpu 스케줄링
US10970129B2 (en) Intelligent GPU scheduling in a virtualization environment
US20210049729A1 (en) Reconfigurable virtual graphics and compute processor pipeline
KR101855311B1 (ko) 그래픽 처리 유닛을 위한 작업 부하 일괄 제출 메커니즘
US20200379802A1 (en) Continuation analysis tasks for gpu task scheduling
US10026145B2 (en) Resource sharing on shader processor of GPU
US9798551B2 (en) Scalable compute fabric
US11157302B2 (en) Idle processor management in virtualized systems via paravirtualization
US20080303833A1 (en) Asnchronous notifications for concurrent graphics operations
CN109213607B (zh) 一种多线程渲染的方法和装置
CN103744716A (zh) 一种基于当前vcpu调度状态的动态中断均衡映射方法
US20180285135A1 (en) Cooperative virtual processor scheduling
US20140237017A1 (en) Extending distributed computing systems to legacy programs
CN114968567A (zh) 用于分配计算节点的计算资源的方法、装置和介质
WO2020028509A1 (en) Method and apparatus for software isolation and security utilizing multi-soc orchestration
CN113032154B (zh) 一种虚拟cpu的调度方法、装置、电子设备及存储介质
US20230273806A1 (en) Virtual graphics processing unit scheduling based preemption overhead
CN117421094A (zh) 虚拟机控制方法、装置、电子设备和存储介质
CN115964160A (zh) 内核优化和延迟执行
CN115686748A (zh) 虚拟化管理下的服务请求响应方法、装置、设备及介质

Legal Events

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