KR20230173223A - 게이밍 렌더링에서의 메모리 관리 - Google Patents

게이밍 렌더링에서의 메모리 관리 Download PDF

Info

Publication number
KR20230173223A
KR20230173223A KR1020237042902A KR20237042902A KR20230173223A KR 20230173223 A KR20230173223 A KR 20230173223A KR 1020237042902 A KR1020237042902 A KR 1020237042902A KR 20237042902 A KR20237042902 A KR 20237042902A KR 20230173223 A KR20230173223 A KR 20230173223A
Authority
KR
South Korea
Prior art keywords
gaming
static
memory
implementations
static data
Prior art date
Application number
KR1020237042902A
Other languages
English (en)
Inventor
폴 라론드
폴 레벤티스
진-프랑수아 로이
Original Assignee
구글 엘엘씨
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 구글 엘엘씨 filed Critical 구글 엘엘씨
Publication of KR20230173223A publication Critical patent/KR20230173223A/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/30Interconnection arrangements between game servers and game devices; Interconnection arrangements between game devices; Interconnection arrangements between game servers
    • A63F13/35Details of game servers
    • A63F13/352Details of game servers involving special game server arrangements, e.g. regional servers connected to a national server or a plurality of servers managing partitions of the game world
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/30Interconnection arrangements between game servers and game devices; Interconnection arrangements between game devices; Interconnection arrangements between game servers
    • A63F13/35Details of game servers
    • A63F13/355Performing operations on behalf of clients with restricted processing capabilities, e.g. servers transform changing game scene into an encoded video stream for transmitting to a mobile phone or a thin client
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/45Controlling the progress of the video game
    • A63F13/48Starting a game, e.g. activating a game device or waiting for other players to join a multiplayer session
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/50Controlling the output signals based on the game progress
    • A63F13/52Controlling the output signals based on the game progress involving aspects of the displayed game scene
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0811Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0888Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using selective caching, e.g. bypass
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • G06F12/123Replacement control using replacement algorithms with age lists, e.g. queue, most recently used [MRU] list or least recently used [LRU] list
    • 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/5061Partitioning or combining of resources
    • G06F9/5066Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/131Protocols for games, networked simulations or virtual reality
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F2300/00Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game
    • A63F2300/20Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game characterised by details of the game platform
    • A63F2300/203Image generating hardware
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F2300/00Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game
    • A63F2300/50Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game characterized by details of game servers
    • A63F2300/53Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game characterized by details of game servers details of basic data processing
    • A63F2300/538Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game characterized by details of game servers details of basic data processing for performing operations on behalf of the game client, e.g. rendering
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F2300/00Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game
    • A63F2300/50Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game characterized by details of game servers
    • A63F2300/55Details of game data or player data management
    • A63F2300/5593Details of game data or player data management involving scheduling aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • G06F2212/1024Latency reduction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1028Power efficiency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1048Scalability
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/15Use in a specific computing environment
    • G06F2212/154Networked environment
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/20Employing a main memory using a specific memory technology
    • G06F2212/205Hybrid memory, e.g. using both volatile and non-volatile memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/455Image or video data
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Multimedia (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Graphics (AREA)
  • Software Systems (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Image Generation (AREA)
  • Information Transfer Between Computers (AREA)
  • Pinball Game Machines (AREA)
  • Memory System (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

본 출원의 일부 구현들은, 하나 이상의 CPU들, 복수의 GPU들, 프로그램 실행 동안 CPU들 및/또는 GPU들에 의한 사용을 위한 프로그램들 및 데이터를 저장하는 메인 동적 메모리, 비-휘발성 메모리에 저장된 정적 메모리 풀, 및 정적 메모리 풀을 관리하도록 구성된 메모리 콘트롤러를 포함하는 서버 시스템에 관한 것이다. GPU들 각각은 로컬 캐시를 포함하며, 메모리 콘트롤러를 통해 정적 메모리 풀에 액세스하도록 구성된다. 서버 시스템은, 하나 이상의 CPU들 상에서 게이밍 타이틀에 대한 복수의 게이밍 세션들을 병렬로 실행한다. 복수의 게이밍 세션들 각각은 정적 메모리 풀에 저장된 정적 데이터 아이템과 연관되며, 정적 데이터 아이템을 사용하여 개개의 GPU에 의해 실행가능한 그래픽 연산을 요구한다.

Description

게이밍 렌더링에서의 메모리 관리{MEMORY MANAGEMENT IN GAMING RENDERING}
[0001] 본 출원은 일반적으로, 하나 이상의 실시간 사용자-상호작용형 애플리케이션들에 대응하는 다수의 온라인 상호작용형 세션들을 지원하기 위해 서버 시스템을 관리하기 위한 방법들 및 시스템들을 포함하는(그러나 이에 제한되지 않음) 컴퓨터 기술에 관한 것이다.
[0002] 인터넷-연결된 전자 디바이스들은 다양한 클라우드-기반 미디어 및 엔터테인먼트 애플리케이션들을 지원할 수 있다. 이들 애플리케이션들은, 서버가 콘텐츠를 사용자 디바이스들에 스트리밍하는 미디어 스트리밍 애플리케이션들, 사용자가 사용자 디바이스로부터, 서버 상에서 실행되는 게임과 상호작용하는 게이밍 애플리케이션들, 및 많은 수들의 사용자들이 그들의 인터넷-연결된 디바이스들을 통해 클라우드-호스팅된 콘텐츠 및 애플리케이션들과 그리고 서로 동시에 상호작용하게 허용하는 다양한 소셜 미디어 및 통신 애플리케이션들을 포함한다. 클라우드-기반 애플리케이션들 중에서도, 클라우드 게이밍은, 게이밍 타이틀들의 광범위하게 다양한 하드웨어 요구들; (예컨대, 단일 플레이어에 의해, 단일 위치의 다수의 플레이어들에 의해, 또는 다수의 위치들의 다수의 플레이어들에 의해) 클라우드-기반 게임들이 플레이될 수 있는 다양한 토폴로지(topology)들; 게이밍 세션을 실행하는 게이밍 서버에 플레이어 입력들을 그리고 게이밍 서버로부터 플레이어들의 디바이스들/디스플레이들로 게이밍 세션 출력들을 신뢰할 수 있게 그리고 레이턴시 없이 송신하기 위한 필요성; 게임플레이의 속도 및 응답성에 관한 광범위하게 다양한 플레이어 기대들; 및 거의 실시간 게이밍 콘텐츠를 관중들에 제공하기 위한 일부 상황들에서의 소망으로 인해 일부 고유한 난제들을 제시한다. 클라우드-기반 게이밍의 다른 난제들은, 플레이어들이 어디에(예컨대, 서버로부터 가깝게 또는 멀리) 위치되는지, 플레이어들이 게이밍 서비스에 어떻게(예컨대, 빠른 또는 느린 인터넷 연결을 통해) 연결되는지, 그리고 플레이어들이 게임을 플레이하기 위해(예컨대, 일반적인 개인용 디바이스 또는 전용 게임 콘트롤러) 그리고 게임플레이 출력들을 보기 위해(예컨대, 미디어 스트리밍 디바이스에 연결된 개인용 디바이스 또는 미디어 디바이스) 어떤 타입의 디바이스(들)를 사용하는지에 관계없이, 플레이어들에 대해 일관된 게임플레이 경험을 제공하는 것에 관련된다.
[0003] 구체적으로, 광범위하게 다양한 입력 및 출력 디바이스들 및 네트워크 연결들을 이용하여 동일하거나 상이한 위치들로부터 동일한 게이밍 타이틀을 플레이하는 다수의 플레이어들을 포함하여 다수의 게이밍 타이틀들에 대해 다수의 게이밍 세션들을 지원하는 클라우드 게이밍 시스템에 대한 필요성이 존재하며, 여기서 게임들은 수용가능한 레이턴시 및 응답성으로 동시에 실행될 수 있다. 부가적으로, 게이밍 세션에서 플레이어 입력(예컨대, 최종 사용 게이밍 디바이스/콘트롤러 상에 입력된 게이밍 입력)을 수신할 시에, 사용자 입력을 즉시 프로세싱하며, 게임 플레이어들 모두에 대해 플레이어 입력 액션의 결과를 반영하는 고화질 이미지들을 동시에 그리고 수용가능한 레이턴시로 출력하는 클라우드 게이밍 시스템에 대한 필요성이 존재한다. 일부 상황들에서, 관중들이 개개의 디스플레이 디바이스들 상에서 실시간으로 게임플레이를 따라하게 허용하기 위해 게임플레이의 활동의 고화질 비디오 스트림을 제공하는 게이밍 시스템에 대한 필요성이 또한 존재한다. 그러므로, 동일한 위치에서 수집된 사용자들에 의한 자발적인 게임플레이로부터 상이한 위치들로부터의 다수의 사용자들에 의한 온라인 상호작용형 게임플레이로, 넓은 범위의 게이밍 세팅들에서 게이밍 경험을 확장시키기 위해 효율적인 게임 프로세싱 및 출력 메커니즘들을 갖는 클라우드 게이밍 시스템을 제공하는 것이 유익할 것이다.
[0004] 본 명세서에 설명된 구현들은, 수용가능한 레이턴시 및 응답성으로 복수의 온라인 게이밍 세션들의 동시적인 실행을 가능하게 하도록 서버 시스템의 컴퓨테이션(computation) 및 저장 리소스들을 구성하는 것에 관한 것이다. 예컨대, 비-휘발성 메모리에 저장된 정적 메모리 풀(pool)은, 일정한 리프레시(refresh)를 요구하는 메인 동적 메모리에 일반적으로 저장된 정적 데이터 아이템들을 저장하기 위해 제공될 수 있다. 이러한 정적 메모리 풀은 서버 시스템의 다수의 프로세서들에 의해 공유되며, 메인 동적 메모리에 의해 필요한 만큼 많은 전력을 요구하지 않으면서 상당히 빠른 레이트로 액세스될 수 있다. 메인 동적 메모리의 일부가 정적 데이터 아이템들을 저장하기 위하여 정적 메모리 풀에 의해 대체되기 때문에 메인 동적 메모리의 사이즈가 감소될 수 있다. 추가로, 셰이더(shader) 캐시는 복수의 게이밍 세션들이 바람직한 전력 및 레이턴시 성능들로 렌더링되는 것을 보장하기 위해, 컴파일링된 셰이더들의 하나 초과의 시퀀스를 저장한다. 복수의 온라인 게이밍 세션들이 셰이더 캐시에 이미 존재하는 컴파일링된 셰이더들의 시퀀스들 중 하나를 사용하여 프로세싱되지만, 셰이더 캐시에 저장된 컴파일링된 셰이더들의 상이한 시퀀스들은 실시간 사용 통계들에 기반하여 상이한 성능 기준들을 만족시키도록 동적으로 생성된다. 컴파일링된 셰이더들의 이들 상이한 시퀀스들은 복수의 온라인 게이밍 세션들의 후속 게임 콘텐츠 렌더링을 위해 사용될 수 있다.
[0005] 본 출원의 일 양상에서, 하나 이상의 CPU(central processing unit)들, 복수의 GPU(graphics processing unit)들, 프로그램 실행 동안 CPU들 및/또는 GPU들에 의한 사용을 위한 프로그램들 및 데이터를 저장하는 메인 동적 메모리, 비-휘발성 메모리에 저장된 정적 메모리 풀, 및 정적 메모리 풀을 관리하도록 구성된 메모리 콘트롤러를 포함하는 서버 시스템의 저장 능력을 관리하는 방법이 개시된다. GPU들 각각은 로컬 캐시를 포함하며, 메모리 콘트롤러를 통해 정적 메모리 풀에 액세스하도록 구성된다. 방법은, 하나 이상의 CPU들 상에서 게이밍 타이틀에 대한 복수의 게이밍 세션들을 병렬로 실행하는 단계를 포함한다. 복수의 게이밍 세션들 각각은 정적 데이터 아이템과 연관되며, 정적 데이터 아이템을 사용하여 개개의 GPU에 의해 실행가능한 그래픽 연산을 요구한다. 정적 데이터 아이템은 정적 메모리 풀에 저장된다. 방법은, 하나 이상의 CPU들 상에서 실행되는 복수의 게이밍 세션들 중 제1 게이밍 세션에 대해, 그래픽 연산을 제1 GPU에 할당하는 단계, 제1 GPU에 의해, 메모리 콘트롤러로부터 정적 데이터 아이템의 제1 카피(copy)를 요청하는 단계, 정적 메모리 풀로부터 판독된 정적 데이터 아이템의 제1 카피를 메모리 콘트롤러로부터 수신하는 단계, 제1 GPU에 의해, 정적 데이터 아이템의 제1 카피를 사용하여 그래픽 연산을 수행하는 단계, 및 복수의 게이밍 세션들 중 제1 게이밍 세션과 연관된 그래픽 연산의 제1 결과를 로컬적으로(예컨대, 로컬 캐시에, 특히 제1 GPU의 로컬 캐시에) 저장하는 단계를 더 포함한다. 방법은, 하나 이상의 CPU들 상에서 실행되는 복수의 게이밍 세션들 중 제2 게이밍 세션에 대해, 그래픽 연산을 제2 GPU에 할당하는 단계, 제2 GPU에 의해, 메모리 콘트롤러로부터 정적 데이터 아이템의 제2 카피를 요청하는 단계, 정적 메모리 풀로부터 판독된 정적 데이터 아이템의 제2 카피를 메모리 콘트롤러로부터 수신하는 단계, 제2 GPU에 의해, 정적 데이터 아이템의 제2 카피를 사용하여 그래픽 연산을 수행하는 단계, 및 복수의 게이밍 세션들 중 제2 게이밍 세션과 연관된 그래픽 연산의 제2 결과를 로컬적으로(예컨대, 로컬 캐시에, 특히 제2 GPU의 로컬 캐시에) 저장하는 단계를 더 포함한다.
[0006] 다른 양상에서, 하나 이상의 CPU들, 복수의 GPU들, 프로그램 실행 동안 CPU들 및/또는 GPU들에 의한 사용을 위한 프로그램들 및 데이터를 저장하는 메인 동적 메모리, 비-휘발성 메모리에 저장된 정적 메모리 풀, 및 정적 메모리 풀을 관리하도록 구성된 메모리 콘트롤러를 포함하는 서버 시스템 상으로 게이밍 타이틀을 로딩하는 방법이 개시된다. GPU들 각각은 메모리 콘트롤러를 통해 정적 메모리 풀에 액세스하도록 구성된다. 방법은, CPU들에 의해, 게이밍 타이틀에 대응하는 실행가능 게이밍 프로그램을 메인 동적 메모리에 로딩하는 단계를 포함한다. CPU들은 복수의 온라인 게이밍 세션들을 병렬로 실행하도록 구성된다. 게이밍 세션들 각각은 실행가능 게이밍 프로그램에 대응하며, 개개의 온라인 게이밍 세션을 렌더링하기 위해 할당된 개개의 GPU에 의해 실행가능한 그래픽 연산을 요구한다. 방법은, CPU들에 의해, 복수의 게이밍 세션들의 그래픽 연산에서 사용된 정적 데이터 아이템을 식별하는 단계, 메모리 콘트롤러에 의해 정적 데이터 아이템을 정적 메모리 풀에 저장하는 단계, 및 메모리 콘트롤러에 의해, 온라인 게이밍 세션들을 실행하는 GPU들이 그래픽 연산을 수행하는 동안 정적 데이터 아이템에 액세스할 수 있게 하는 단계를 더 포함한다.
[0007] 또 다른 양상에서, 하나 이상의 CPU들, 하나 이상의 GPU들, 프로그램 실행 동안 CPU들 및/또는 GPU들에 의한 사용을 위한 프로그램들 및 데이터를 저장하는 메인 동적 메모리, 및 셰이더 캐시를 포함하는 서버 시스템에서, 온라인 게이밍 세션들에 대한 이미지 프레임들을 렌더링하는 방법이 구현된다. 방법은, 하나 이상의 CPU들 상에서, 게이밍 타이틀에 대해 복수의 온라인 게이밍 세션들을 병렬로 실행하는 단계, 및 GPU들에 의해, 컴파일링된 셰이더들의 제1 시퀀스를 사용하여 복수의 온라인 게이밍 세션들 각각에 대한 복수의 이미지 프레임들을 렌더링하는 단계를 포함한다. 방법은 복수의 온라인 게이밍 세션들을 실행하는 동안, 게이밍 타이틀과 연관된 복수의 온라인 게이밍 세션들에 대한 성능 기준을 식별하는 단계, 온라인 게이밍 세션들 각각의 실행을 특성화하는 사용 통계들을 수집하는 단계, 및 성능 기준에 관해, 컴파일링된 셰이더들의 제1 시퀀스의 성능을 개선시키도록 컴파일링된 셰이더들의 제1 시퀀스에서 제1 셰이더를 수정해서, 컴파일링된 셰이더들의 수정된 제1 시퀀스를 생성하는 단계를 더 포함한다.
[0008] 본 출원의 일부 양상들에 따르면, 서버 시스템은, 서버 시스템으로 하여금 위에서 설명된 방법들 중 임의의 방법을 수행하게 하기 위한 명령들을 저장하는 메모리를 포함한다.
[0009] 추가로, 본 출원의 일부 양상들에 따르면, 서버 시스템에 의한 실행을 위해 구성된 하나 이상의 애플리케이션들을 저장하는 비-일시적인 컴퓨터 판독가능 저장 매체는, 서버 시스템으로 하여금 위에서 설명된 방법들 중 임의의 방법을 수행하게 하기 위한 명령들을 포함한다.
[0010] 다른 실시예들 및 장점들은 본 명세서 내의 설명들 및 도면들을 고려할 때 당업자들에게 명백할 수 있다.
[0011] 다양한 설명된 구현들의 더 양호한 이해를 위해, 다음의 도면들과 함께 아래의 구현들의 설명에 대한 참조가 이루어질 것이며, 도면에서, 유사한 참조 번호들은 도면들 전반에 걸쳐 대응하는 부분들을 지칭한다.
[0012] 도 1은 일부 구현들에 따른, 서버 시스템 및 복수의 클라이언트 디바이스들을 포함하는 예시적인 온라인 상호작용형 게이밍 환경이다.
[0013] 도 2는 일부 구현들에 따른, 복수의 게임 서버들이 서버 시스템에서 정적 메모리 풀을 공유하는 예시적인 온라인 상호작용형 게이밍 환경이다.
[0014] 도 3a는 일부 구현들에 따른, 서버 시스템에 데이터를 저장하도록 구성된 예시적인 메모리 시스템이다. 도 3b는 일부 구현들에 따른, 다수의 레벨들의 캐시들을 갖는 예시적인 CPU(central processing unit)이다. 도 3c는 일부 구현들에 따른, 다수의 레벨들의 캐시들을 갖는 예시적인 GPU(graphics processing unit)이다. 도 3d는 일부 구현들에 따른, 서버 시스템 내의 다수의 프로세서들에 의해 공유되는 정적 메모리 풀에 대한 판독 및 기입 액세스들을 제어하는 예시적인 메모리 콘트롤러이다.
[0015] 도 4a는 일부 구현들에 따른, 서버 시스템 상에 게이밍 타이틀을 로딩하는 프로세스 동안의 예시적인 데이터 흐름이다. 도 4b는 일부 구현들에 따른, 서버 시스템 상에서 온라인 게이밍 세션을 실행하는 프로세스 동안의 예시적인 데이터 흐름이다. 도 4c는 일부 구현들에 따른, 셰이더 최적화 프로세스 동안의 예시적인 데이터 흐름이다. 도 4d는 일부 구현들에 따른, 복수의 온라인 게이밍 세션들이 실행되고 있는 시간들에서의 정적 데이터의 예시적인 데이터 흐름이다.
[0016] 도 5a는 일부 구현들에 따른, 예시적인 서버 시스템을 예시한 블록 다이어그램이다. 도 5b는 일부 구현들에 따른, 서버 시스템에 저장된 데이터를 예시한 블록 다이어그램이다.
[0017] 도 6은 일부 구현들에 따른, 예시적인 클라이언트 디바이스(예컨대, 모바일 폰, 태블릿 컴퓨터, 랩톱 컴퓨터 또는 게임 콘트롤러)를 예시한 블록 다이어그램이다.
[0018] 도 7은 일부 구현들에 따른, 예시적인 미디어 디바이스를 예시한 블록 다이어그램이다.
[0019] 도 8a 및 도 8b는 일부 구현들에 따른, 하나 이상의 게이밍 타이틀들을 호스팅하는 서버 시스템의 저장 능력을 관리하기 위한 예시적인 방법을 예시한 흐름도이다.
[0020] 도 9는 일부 구현들에 따른, 게이밍 타이틀을 서버 시스템에 로딩하기 위한 예시적인 방법을 예시한 흐름도이다.
[0021] 도 10은 일부 구현들에 따른, 서버 시스템에서의 게임 렌더링과 동시에, 파이프라인화된 셰이더들을 최적화하는 예시적인 프로세스이다.
[0022] 도 11a는 일부 구현들에 따른, 컴파일링된 셰이더들의 시퀀스를 최적화하는 예시적인 프로세스이다. 도 11b는 일부 구현들에 따른, 컴파일링된 셰이더들의 복수의 시퀀스들과 복수의 성능 기준들을 연관시키는 셰이더 해시 테이블이다. 도 11c는 일부 구현들에 따른, 컴파일링된 셰이더들의 시퀀스의 복수의 버전들을 복수의 사용자 입력들과 연관시키는 셰이더 해시 테이블이다.
[0023] 도 12는 일부 구현들에 따른, (예컨대, 이미지 렌더링의 배경(background)에서 파이프라인화된 셰이더들을 최적화하는 것을 포함하여) 복수의 온라인 게이밍 세션들에 대한 이미지 프레임들을 렌더링하는 예시적인 방법을 예시한 흐름도이다.
[0024] 유사한 참조 번호들은 도면들 전반에 걸쳐 대응하는 부분들을 지칭한다.
[0025] 이제, 구현들에 대한 참조가 상세히 이루어질 것이며, 다양한 구현들의 예들은 첨부한 도면들에 예시되어 있다. 다음의 상세한 설명에서, 다수의 특정한 세부사항들이 다양한 설명된 구현들의 완전한 이해를 제공하기 위해 기재된다. 그러나, 다양한 설명된 구현들이 이들 특정한 세부사항들 없이도 실시될 수 있다는 것은 당업자들에 자명할 것이다. 다른 예시들에서, 잘-알려진 방법들, 절차들, 컴포넌트들, 및 네트워크들은 구현들의 양상들을 불필요하게 모호하게 하지 않기 위해 상세히 설명되지 않는다.
[0026] 본 명세서에 설명된 구현들은 분산된 게임 플레이어들의 커뮤니티(community)에 대한 효율적인, 휴대가능한, 낮은 레이턴시의 상호작용형 게이밍 경험을 가능하게 하기 위한 게이밍 환경을 제공하는 것에 관한 것이다. 일부 구현들은, 클라우드 게이밍 하드웨어 리소스들(예컨대, GPU 및 인코더)을 동적으로 할당하고, 개별 최종 사용자들에 이용가능한 네트워크 대역폭을 모니터링 및 이용하여, 많은 수의 게임 플레이어들에게 동시에 최적의 온라인 게이밍 경험을 제공한다. 일부 구현들은 온라인 게이밍 경험을 효율적으로 제공하기 위해 클라우드 게이밍 저장 리소스들을 관리한다. 예컨대, 게이밍 서버 시스템은, 비교적 큰 전력 소비를 갖는 동적 메모리에 대한 요구를 감소시키기 위해 게이밍 콘텐츠 렌더링에서 사용되는 정적 데이터 아이템들을 저장하기 위한 정적 게이밍 저장 리소스들의 레벨을 부가할 수 있다. 일부 구현들은 복수의 온라인 게이밍 세션들의 실시간 사용 통계들에 따라 하나 이상의 성능 기준들을 만족시키기 위해 컴파일링된 셰이더들의 시퀀스를 동적으로 최적화하는 반면, 컴파일링된 셰이더들은 이들 온라인 게이밍 세션들에 대한 게이밍 콘텐츠를 렌더링하기 위해 전경에서 사용된다.
[0027] 구체적으로, 일부 구현들에서, 서버 시스템은 하나 이상의 CPU들, 복수의 GPU들, 프로그램 실행 동안 CPU들 및/또는 GPU들에 의한 사용을 위한 프로그램들 및 데이터를 저장하는 메인 동적 메모리를 포함한다. GPU들 각각은 로컬 캐시를 포함한다. 비-휘발성 메모리에 저장된 정적 메모리 풀이 서버 시스템에 부가된다. 서버 시스템의 메모리 콘트롤러는 정적 메모리 풀을 관리하도록, 예컨대 정적 메모리 풀에 대한 판독 및/또는 기입 액세스들을 GPU들 각각에 제공하도록 구성된다. 일 예에서, 메인 동적 메모리는, 일정하게 리프레시될 필요가 있는 DRAM(dynamic random-access memory)이고, 정적 메모리 풀은, 그것이 전력 공급부에 연결되는 한 리프레시될 필요가 없는 PRAM(phase-change random-access memory)이다.
[0028] 서버 시스템은, 하나 이상의 CPU들 상에서 게이밍 타이틀에 대한 복수의 게이밍 세션들을 병렬로 실행한다. 복수의 게이밍 세션들 각각은 정적 데이터 아이템과 연관되며, 정적 데이터 아이템을 사용하여 개개의 GPU에 의해 실행가능한 그래픽 연산(예컨대, OpenGL(open graphics library) 렌더링 파이프라인에서의 버텍스 프로세싱, 테셀레이션(tessellation) 및 프리미티브(primitive) 어셈블리)을 요구한다. 정적 데이터 아이템은 정적 메모리 풀에 저장된다. 복수의 게이밍 세션들 각각을 실행하기 위해, CPU들은, 그래픽 연산을 실행하려는 목적들을 위해 메모리 콘트롤러로부터 정적 데이터 아이템의 카피를 요청하는 개개의 GPU에 그래픽 연산을 할당한다. 개개의 GPU는 정적 메모리 풀로부터 판독된 정적 데이터 아이템의 카피를 메모리 콘트롤러로부터 수신하고, 정적 데이터 아이템의 카피를 사용하여 그래픽 연산을 수행한다. 복수의 게이밍 세션들 중 개개의 게이밍 세션과 연관된 그래픽 연산의 결과는 로컬적으로(예컨대, 로컬 캐시에 또는 메인 동적 메모리에) 저장된다.
[0029] 일부 구현들에서, 정적 메모리 풀에 저장된 정적 데이터 아이템은, CPU들이 게이밍 타이틀에 대응하는 실행가능 게이밍 프로그램(예컨대, 서버-측 게임 모듈)을 메인 동적 메모리에 로딩할 경우 정적 메모리 풀에 로딩된다. 구체적으로, CPU들은, 정적 데이터 아이템이 그래픽 연산에서 사용된다고 결정하고, 정적 데이터 아이템을 정적 메모리 풀에 저장하도록 메모리 콘트롤러를 제어한다. 정적 데이터 아이템은 선택적으로, 서버 시스템의 로컬 하드 드라이브로부터 추출되거나 또는 원격 라이브러리 서버로부터 수신된다. 정적 데이터 아이템이 정적 메모리 풀에 저장될 경우, 정적 데이터 아이템은 메인 동적 메모리에 저장될 필요가 없으며, 그에 의해, 서버 시스템에서 CPU들 및 GPU들의 성능을 손상시키지 않으면서, 메인 동적 메모리가 그의 사이즈 및 전력 소비를 감소시킴으로써 그의 효율을 개선시키게 허용한다.
[0030] 일부 구현들에서, 서버 시스템은 하나 이상의 CPU들, 하나 이상의 GPU들, 프로그램 실행 동안 CPU들 및/또는 GPU들에 의한 사용을 위한 프로그램들 및 데이터를 저장하는 메인 동적 메모리, 및 셰이더 캐시를 포함한다. 서버 시스템은, CPU들 상에서, 게이밍 타이틀에 대해 복수의 온라인 게이밍 세션들을 병렬로 실행하고, 하나 이상의 GPU들은, 컴파일링된 셰이더들의 제1 시퀀스를 사용하여 복수의 온라인 게이밍 세션들 각각에 대한 복수의 이미지 프레임들을 렌더링한다. 전경에서 복수의 온라인 게이밍 세션들을 실행하는 동안, 서버 시스템은 배경에서, 게이밍 타이틀과 연관된 복수의 온라인 게이밍 세션들에 대한 성능 기준(예컨대, 전력 사용량 및 게이밍 레이턴시들에 관련됨)을 식별하고, 온라인 게이밍 세션들 각각의 실행을 특성화하는 사용 통계들(예컨대, 사용자 입력들, 전력 사용량 및 게이밍 레이턴시들)을 수집한다. 서버 시스템은 성능 기준에 관해, 컴파일링된 셰이더들의 제1 시퀀스의 성능을 개선시키도록 컴파일링된 셰이더들의 제1 시퀀스에서 제1 셰이더를 수정하여, 그에 의해 컴파일링된 셰이더들의 수정된 제1 시퀀스를 생성한다. 선택적으로, 컴파일링된 셰이더들의 수정된 제1 시퀀스는 컴파일링된 셰이더의 별개의 시퀀스로서, 컴파일링된 셰이더들의 제1 시퀀스의 새로운 버전으로서, 또는 컴파일링된 셰이더들의 제1 시퀀스 대신에 저장된다. 후속하여, 컴파일링된 셰이더들의 수정된 제1 시퀀스는 복수의 온라인 게이밍 세션들에 대한 이미지 프레임들을 렌더링하고, 이들 온라인 게이밍 세션들의 성능 기준과 연관된 성능을 개선시키는 데 사용될 수 있다. 이들 수단에 의해, 컴파일링된 셰이더들은, 온라인 게이밍 세션들의 실시간 사용 통계들에 기반하여 그리고 온라인 게이밍 세션들의 실행을 중단시키지 않으면서 동적으로 최적화된다.
게이밍 타이틀의 다수의 게이밍 세션들을 호스팅하는 게이밍 환경
[0031] 도 1은 일부 구현들에 따른 예시적인 온라인 상호작용형 게이밍 환경(100)이다. 온라인 상호작용형 게이밍 환경(100)은 하나 이상의 클라이언트 디바이스들(예컨대, 클라이언트 디바이스들(102 및 104))을 포함한다. 클라이언트 디바이스들(102) 각각은 하나 이상의 게임 애플리케이션들을 실행한다. 온라인 게임 세션은, 클라이언트 디바이스(102)의 사용자가 서버 시스템(114)에 의해 호스팅되는 온라인 상호작용형 게임(소위 "게이밍 타이틀"로 또한 지칭됨)을 플레이하게 허용하기 위해 특정 게임 애플리케이션 상에서 개시 및 구동될 수 있다. 일부 구현들에서, 클라이언트 디바이스(102)(예컨대, 호스트 클라이언트)는 하나 이상의 다른 클라이언트 디바이스들(102)을 초대하여 온라인 상호작용형 게임의 게임 장면에 참가하도록 구성된다. 이들 클라이언트 디바이스들(102)의 게이밍 세션들은, 선택적으로는 그들 개개의 사용자들에 대응하는 별개의 관점들을 갖는, 온라인 상호작용형 게임의 동일한 게임 장면을 디스플레이하도록 동기화된다.
[0032] 반대로, 서버 시스템(114)은 특정 게임 애플리케이션을 포함하는 하나 이상의 게임 애플리케이션들을 플레이하기 위해 클라이언트 디바이스들(102)을 지원하도록 온라인 상호작용형 게임 플랫폼을 호스팅한다. 구체적으로, 서버 시스템(114)은 클라이언트 디바이스들(102)과 연관된 복수의 사용자 계정들을 포함하고, 하나 이상의 게임 애플리케이션들 각각과 연관되어 클라이언트 디바이스들(102)의 사용자들을 인증한다. 서버 시스템(114)은, 장면과 연관된 대응하는 게이밍 세션들에 참가하는 클라이언트 디바이스들(102) 상의 게이밍 타이틀의 장면을 렌더링하고 리프레시한다. 일부 구현들에서, 서버 시스템(114)은 클라이언트 디바이스들(102)의 능력들 및/또는 서버 시스템(114)과 클라이언트 디바이스들(102) 각각 사이의 통신 연결의 품질을 평가할 수 있으며, 클라이언트 디바이스들(102)과 연관된 게이밍 세션들에 대한 동기식 데이터 스트림들을 적응적으로 생성한다. 이들 수단에 의해, 서버 시스템(114)은 2개 이상의 클라이언트 디바이스들(102) 상에서 동시에 그리고 실질적으로 낮은 레이턴시들로 온라인 상호작용형 게임의 동기식 게이밍 세션들을 가능하게 하도록 구성된다.
[0033] 일부 구현들에서, 클라이언트 디바이스(102)에는 개개의 온라인 게이밍 세션과 연관된 미디어 콘텐츠를 디스플레이하기 위한 디스플레이 스크린이 통합되어 있다. 일부 구현들에서, 클라이언트 디바이스(102)는 미디어 디바이스(106) 및 출력 디바이스(108)에 커플링된다. 구체적으로, 클라이언트 디바이스(102)는 직접적으로(예컨대, 와이어를 통해, 블루투스 또는 다른 무선 통신 링크들을 통해), 로컬 네트워크(110)를 통해(예컨대, Wi-Fi 네트워크를 통해), 또는 하나 이상의 통신 네트워크들(112)을 통해 미디어 디바이스(106)에 통신가능하게 커플링될 수 있다. 일부 구현들에서, 클라이언트 디바이스(102) 및 미디어 디바이스(106)는 서로 로컬적이다(예컨대, 동일한 룸(room), 동일한 하우스 등에 있다). 미디어 디바이스(106)는 시각적 및/또는 오디오 콘텐츠를 출력할 수 있는 하나 이상의 출력 디바이스들(108)(예컨대, 텔레비전, 디스플레이 모니터, 사운드 시스템, 스피커들 등)에 추가로 커플링된다. 미디어 디바이스(106)는 출력 디바이스(들)(108)에 콘텐츠를 출력하도록 구성된다. 일부 구현들에서, 미디어 디바이스(106)는 캐스팅(casting) 디바이스(예컨대, Google Inc.의 크롬캐스트(CHROMECAST)) 또는 캐스팅 기능을 다른 방식으로 포함하는 디바이스이다. 예컨대, 클라이언트 디바이스에서의 사용자 입력에 대한 응답으로 게이밍 콘텐츠가 서버 시스템(116)에 의해 렌더링될 경우, 클라이언트 디바이스(102)는, 통신 네트워크들(112)을 통해 서버 시스템(116)으로부터 게이밍 콘텐츠를 수신하고 수신된 게이밍 콘텐츠를 출력 디바이스(108) 상에 캐스팅하도록 미디어 디바이스(106)를 제어한다.
[0034] 일부 구현들에서, 서버 시스템(114)은 게임 서버(118) 및 미디어 스트리밍 서버(120)를 포함한다. 게임 서버(118)는 제1 클라이언트 디바이스(102A) 상에서 구동되는 온라인 상호작용형 게임 세션에 대해 2개 이상의 미디어 스트림들(130 및 132)을 동시에 제공하도록 구성된다. 2개 이상의 미디어 스트림들은, 하나 이상의 통신 네트워크들(112)을 통해 제1 클라이언트 디바이스(102A) 및 리뷰어(reviewer) 클라이언트 디바이스(104)에 각각 제공되는 낮은 레이턴시 스트림(130) 및 정상 레이턴시 스트림(132)을 포함한다. 선택적으로, 정상 레이턴시 스트림(132)은 명령 목적들을 위해 제공된다. 제1 클라이언트 디바이스(102A)의 사용자가 제1 클라이언트 디바이스(102A) 상에서 게임 세션을 플레이하는 동안, 게임 세션은 레코딩되어, 정상 레이턴시 스트림(132)을 통해 하나 이상의 관중들에게 브로드캐스팅되며, 즉 관중들은 리뷰어 클라이언트 디바이스(104) 상에서 게임 세션을 리뷰할 수 있다. 낮은 레이턴시 스트림(130)은 온라인 상호작용형 게임 세션의 게임플레이에 대응하며, 연관된 리뷰 세션에 대응하는 정상 레이턴시 스트림(132)보다 빠른 응답 레이트 및 낮은 송신 레이턴시를 갖는다. 선택적으로, 리뷰어 클라이언트 디바이스(104)는 클라이언트 디바이스(102)와 동일한 장소에 위치된다. 선택적으로, 리뷰어 디바이스는 클라이언트 디바이스(102)로부터 원격이다. 일부 구현들에서, 리뷰어 클라이언트 디바이스(104)는 통합된 또는 외부 디스플레이를 선택적으로 갖는 클라이언트 디바이스(102A)와 같은 다른 클라이언트 디바이스이다. 일부 구현들에서, 리뷰어 클라이언트 디바이스(104)는 시각적 및/또는 오디오 콘텐츠를 출력할 수 있는 하나 이상의 출력 디바이스들(108)에 커플링되는 미디어 디바이스(106)(예컨대, 캐스팅 기능을 갖는 디바이스)이다. 일부 구현들에서, 낮은 레이턴시 스트림 및 정상 레이턴시 스트림 둘 모두가 동일한 출력 디바이스의 스크린 상에 디스플레이된다.
[0035] 각각의 클라이언트 디바이스(102)는, 중앙 서버 또는 클라우드-컴퓨팅 시스템(예컨대, 서버 시스템(114)), 및/또는 네트워크-연결된 다른 디바이스들(예컨대, 클라이언트 디바이스(102), 리뷰어 클라이언트 디바이스(104), 미디어 디바이스(106) 및 출력 디바이스(108))과의 데이터 통신 및 정보 공유가 가능하다. 데이터 통신은, 본 출원의 출원일까지 아직 개발되지 않은 통신 프로토콜들을 포함하여, 다양한 커스텀(custom) 또는 표준 무선 프로토콜들(예컨대, IEEE 802.15.4, Wi-Fi, ZigBee, 6LoWPAN, Thread, Z-Wave, Bluetooth Smart, ISA100.11a, WirelessHART, MiWi, 등) 중 임의의 무선 프로토콜, 및/또는 다양한 커스텀 또는 표준 유선 프로토콜들(예컨대, 이더넷, HomePlug 등) 중 임의의 유선 프로토콜, 또는 임의의 다른 적합한 통신 프로토콜을 사용하여 수행될 수 있다. 일부 실시예들에서, 온라인 상호작용형 게이밍 환경(100)은 종래의 네트워크 디바이스(예컨대, 라우터(도 1에 도시되지 않음))를 포함하며, 이를 통해, 클라이언트 디바이스들(102)의 세트 및 (존재한다면) 그들의 대응하는 미디어 및 출력 디바이스들은 로컬 영역 네트워크 상에서 서로 통신가능하게 커플링된다. 로컬 영역 네트워크는 통신 네트워크들(112)의 다른 부분(예컨대, 광역 네트워크들 및 인터넷)에 통신가능하게 커플링된다. 일부 실시예들에서, 클라이언트 디바이스들(102) 각각은 선택적으로, 하나 이상의 라디오 통신 네트워크들(예컨대, ZigBee, Z-Wave, Insteon, 블루투스, Wi-Fi, 및/또는 다른 라디오 통신 네트워크들)을 사용하여 하나 이상의 다른 클라이언트 디바이스들(102 또는 104), 개개의 미디어 디바이스(106), 또는 개개의 출력 디바이스(108)와 통신한다.
[0036] 일부 구현들에서, 클라이언트 디바이스들(102)은 서로 원격이며, 즉 그들은 동일한 룸 또는 심지어 구조물에 위치되지 않는다. 게이밍 타이틀은, 각각의 클라이언트 디바이스(102)에서의 실행을 위해 게임 애플리케이션(예컨대, 게임 애플리케이션(629)(도 6))을 기동(launch)시킴으로써 클라이언트 디바이스(102) 상에서 시작될 수 있다. 일부 구현들에서, 각각의 클라이언트 디바이스(102)에 대해, 게임 애플리케이션은 서버 시스템(114)과의 온라인 게이밍 세션(116)을 독립적으로 설정한다. 2개 이상의 클라이언트 디바이스들(102)(예컨대, 102A 및 102B)의 온라인 게이밍 세션들(116)은 (예컨대, 그들이 게이밍 타이틀의 동일한 게임 도메인에서 플레이되기 때문에) 서로 관련되며, 그에 따라 게임 애플리케이션에서 게임 장면을 공유한다. 관련된 온라인 게이밍 세션들(116)은 서로 동기화되며, 각각의 온라인 게이밍 세션(116)은 선택적으로, 개개의 클라이언트 디바이스(102)에 대응하는 고유한 플레이어 관점을 갖는 동일한 게임 장면을 나타낸다. 따라서, 각각의 클라이언트 디바이스(102)의 사용자는 개개의 클라이언트 디바이스 상에서 게임을 플레이하고, 다른 클라이언트 디바이스(들)(102) 상의 온라인 게이밍 세션들(116)로부터의 출력에 영향을 줄 수 있다. 예컨대, 일부 구현들에서, 게임 애플리케이션들(528)은 동일한 게임을 동시에 플레이하고 있는 사용자들 간에 일관된 게임 상태들을 유지하도록 구성된다. 일부 구현들에서, 서버 시스템(114) 및 게임 애플리케이션들(528)은 게임을 플레이하는 각각의 사용자에 대해 개별적인 세션들을 유지하며, 이는 그 사용자의 개별 게임 플레이 상태 및 뷰에 특정한 장면의 렌더링된 뷰를 초래할 수 있지만, 이들 세션들 각각은, 동일한 게임을 플레이하고 있고 동일한 장면과 상호작용하며 동일한 장면을 보고 있는 사용자들의 다른 세션들과 일치한다.
[0037] 대안적으로, 일부 다른 구현들에서, 제1 클라이언트 디바이스(102A)의 게임 애플리케이션이 온라인 게이밍 세션(116A)을 설정한 이후, 하나 이상의 제2 클라이언트 디바이스들(102B)은 초대 메시지에 의해 온라인 게이밍 세션(116A)에 참가하도록 초대되며, 예컨대 온라인 게이밍 세션(116A)에 참가하기 위한 링크(예컨대, URL 어드레스)를 갖는 메시지가 제2 클라이언트 디바이스들(102B) 각각에 전송된다. 온라인 게이밍 세션(116A)에 참가하도록 초대된 각각의 제2 클라이언트 디바이스(102B)에 적절한 콘트롤러 구성이 제공된다. 이러한 애플리케이션에서, 제2 클라이언트들(102B)이 온라인 게이밍 세션(116A)에 참가할 경우, 서버 시스템(114)은 각각의 개별 제2 클라이언트 디바이스(102B)에 대한 별개의 게이밍 세션(116B)을 생성한다. 개개의 제2 클라이언트 디바이스(102B)의 각각의 별개의 게이밍 세션(116B)은 제1 클라이언트 디바이스(102A)의 게이밍 세션(116A)과 동기화되고 그 게이밍 세션(116A)과 동일한 장면을 공유하지만, 개개의 제2 클라이언트 디바이스(102B)에 대응하는 고유한 플레이어 관점을 가질 수 있다. 각각의 제2 클라이언트 디바이스(102B)가 적절한 콘트롤러 구성을 수신하고 온라인 게이밍 세션(116A)에 참가한 이후(더 정확하게는, 그의 관련된 온라인 게이밍 세션(116B)을 시작한 이후), 사용자는 개개의 제2 클라이언트 디바이스(102B) 상에서 게임을 플레이하고, 다른 클라이언트 디바이스(들)(102) 상에서 구동되는 온라인 게이밍 세션들(116)의 출력에 영향을 줄 수 있다.
[0038] 클라이언트 디바이스(102)는, 게임 애플리케이션을 포함하는 하나 이상의 별개의 사용자 애플리케이션들을 포함하고 구동시킬 수 있는 디바이스이다. 일부 구현들에서, 클라이언트 디바이스(102)는 스마트폰, 태블릿 디바이스, 랩톱 컴퓨터, 데스크톱 컴퓨터, 멀티미디어 디바이스 또는 원격 제어부이다. 일부 구현들에서, 클라이언트 디바이스(102)는 전용 게임 콘트롤러 디바이스(예컨대, 게임 콘트롤러(102B))를 포함한다. 일부 구현들에서, 클라이언트 디바이스(102)는 미디어 디바이스(106)와 함께 동작하도록 구성된 하나 이상의 사용자 애플리케이션들을 포함한다. 일부 구현들에서, 애플리케이션들은, 클라이언트 디바이스(102)를 미디어 디바이스(106)와 페어링시키고 미디어 디바이스(106)를 구성하기 위한 미디어 디바이스 애플리케이션을 포함한다. 애플리케이션들은 또한, 연관된 콘텐츠를 미디어 디바이스(106)에 캐스팅할 수 있는 하나 이상의 애플리케이션들을 포함한다. 일부 구현들에서, 애플리케이션은, (예컨대, 로컬 네트워크를 통해) 데이터/콘텐츠를 직접 미디어 디바이스(106)에 전송함으로써 그리고/또는 미디어 디바이스(106)를 원격 위치(예컨대, 서버 시스템(116) 또는 게임 콘텐츠 호스트의 위치에 대한 URL 또는 다른 링크)(그 위치로부터, 미디어 디바이스(106)는 데이터/콘텐츠를 스트리밍하거나 그렇지 않으면 수신할 수 있음)로 안내함으로써 데이터 및/또는 콘텐츠를 미디어 디바이스(106)에 캐스팅한다. 미디어 디바이스(106)는, 애플리케이션 및/또는 원격 위치로부터 데이터/콘텐츠를 수신하고, 수신된 데이터/콘텐츠에 대응하는 시각적 및/또는 오디오 콘텐츠를 출력 디바이스(108)에 출력한다. 따라서, 온라인 게이밍 세션(116)은 클라이언트 디바이스(102) 상에서 구동되는 게임 애플리케이션, 원격 서버 시스템(114), 및 미디어 디바이스(106) 사이에 설정된다.
[0039] 일부 구현들에서, 관련된 온라인 게임 세션들(116)을 링크시키는 프로세스의 일부로서, 서버 시스템(114)은 각각의 대응하는 클라이언트 디바이스(102)의 능력들 및/또는 서버 시스템(114)과 클라이언트 디바이스(102) 사이의 통신 연결의 품질을 평가한다. 일부 구현들에서, 서버 시스템(114)은 클라이언트 디바이스(102)와 서버 시스템(114) 사이의 네트워크 레이턴시를 측정한다. 측정된 레이턴시가 임계치를 초과하고 더 낮은-레이턴시 연결이 이용가능하면, 서버 시스템(114)은, 클라이언트 디바이스(102)가 더 낮은 레이턴시 연결로 변경하거나, 또는 클라이언트 디바이스(102)의 사용자를 초대하여 클라이언트 디바이스(102)를 더 낮은 레이턴시 연결로 변경하는 것을 제안할 수 있다. 예컨대, 클라이언트 디바이스(102)가 셀룰러 무선 연결 상에 있고, 로컬 네트워크가 이용가능하면, 서버 시스템(114)은 클라이언트 디바이스(102)가 이용가능한 로컬 네트워크를 통해 연결되어야 한다는 것을 제안할 수 있다. 일부 구현들에서, 레이턴시 임계치 요건들은 게임들 간에 상이하다. 예컨대, 일부 게임들(예컨대, 액션 게임들)은 더 낮은 레이턴시 연결들 상에서 최상으로 경험되지만, 일부 다른 게임(예컨대, 온라인 보드 게임들 또는 카드 게임들)은 레이턴시에 관해 요구되지 않는다. 서버 시스템(114)은 상이한 타입들의 게임들과 연관된 이들 상이한 요건들의 관점에서 연결 권장들을 행할 수 있다.
[0040] 클라이언트 디바이스(102)가 게이밍 세션(116)을 시작하거나 그에 참가하는 일부로서, 서버 시스템(114)은 클라이언트 디바이스(102) 상의 콘트롤러를 셋업하기 위해 클라이언트 디바이스(102)와 통신한다. 일부 구현들에서, 이것은, 클라이언트 디바이스(102)가 콘트롤러에 대한 필요한 리소스들 및 통신 능력을 갖는지 여부를 서버 시스템(114)이 평가하는 것을 포함한다. 클라이언트 디바이스(102)의 이용가능한 리소스들, 연결 품질, 및 게임에 대한 요건들에 의존하여, 콘트롤러는 클라이언트 디바이스(102)에서 상이하게 구현될 수 있다. 일부 구현들에서, 게이밍 타이틀은 웹페이지-기반 콘트롤러 인터페이스를 이용하여 플레이될 수 있다. 예컨대, 게임에 대한 콘트롤러 인터페이스는 웹페이지에 임베딩될 수 있으며, 웹페이지는 클라이언트 디바이스(102) 상의 웹 브라우저에서 렌더링된다. 대안적으로, 일부 구현들에서, 표준화된 콘트롤러는 게임에 특정적이지 않거나 게임과 직접적으로 연관되지 않는 미리 정의된 애플리케이션(예컨대, 캐스팅 디바이스 애플리케이션, 이를테면 Google Inc.에 의한 크롬캐스트 또는 구글 캐스트(GOOGLE CAST), 또는 다른 미디어 디바이스 애플리케이션)에서 또는 클라이언트 디바이스(102)의 운영 체제에서 구현된다. 예컨대, 클라이언트 디바이스(102) 상의 디바이스 운영 체제 또는 미리 정의된 애플리케이션은 콘트롤러 서브-모듈을 가질 수 있다. 콘트롤러 서브-모듈은 하나 이상의 표준화된 콘트롤러 구성들, 템플릿들 등을 포함한다. 표준화된 콘트롤러 구성들 각각은, 가상 콘트롤러를 구현하기 위해 일부 방식으로 클라이언트 디바이스(102) 상에서 입력 디바이스들 및/또는 센서들을 이용하도록 콘트롤러 서브-모듈을 구성한다. 사용된 표준화된 콘트롤러 구성은 게임에 따라 그리고/또는 클라이언트 디바이스의 타입에 따라 변할 수 있다.
[0041] 추가로, 일부 구현들에서, 게임은 콘트롤러 서브-모듈 상에서 구현될 수 있는 특정 콘트롤러 구성을 갖는다. 클라이언트 디바이스(102)가 온라인 게이밍 세션(116)에 참가하거나 이를 시작하는 프로세스의 일부로서, 그러한 구성은 서버 시스템(114)에 저장되고 클라이언트 디바이스들(102)에 송신될 수 있다. 일부 구현들에서, 특정 콘트롤러 구성은 전적으로 커스텀 콘트롤러이거나 표준 콘트롤러 및 커스텀 콘트롤러의 혼합일 수 있다. 부가적으로, 일부 구현들에서, 게임은 게임과 연관된 특정 애플리케이션을 요구한다. 예컨대, 게임은 게임과 특별히 연관된 콘트롤러 애플리케이션을 요구할 수 있다. 일부 구현들에서, 세션(116)을 시작하거나 그에 참가하는 일부로서, 클라이언트 디바이스(102)는 특정 애플리케이션 또는 미리 정의된 애플리케이션을 다운로딩하도록 지시받을 수 있다. 예컨대, 클라이언트 디바이스(102)가 게임과 연관된 특정 애플리케이션 또는 미리 정의된 애플리케이션(콘트롤러 서브-모듈을 가짐)을 이미 갖고 있지 않으며, 그러한 애플리케이션이 플레이를 위해 요구되면, 서버 시스템(114)은 클라이언트 디바이스(102)에게, 다운로드가 필요하다는 것을 그의 사용자에게 프롬프트(prompt)하고 사용자에게 진행 허가를 요청하도록 명령한다.
[0042] 서버 시스템(114)은 데이터베이스(160)를 더 포함한다. 데이터베이스(160)는, 서버 시스템(114) 상에서 호스팅되는 하나 이상의 게임 애플리케이션들(예컨대, 게임 애플리케이션들(629)(도 6)) 각각의 사용자 계정들과 연관된 사용자 정보를 적어도 저장한다. 사용자 정보의 예들은 사용자 계정 정보(예컨대, 식별 및 패스워드들), 멤버쉽 타입, 선호도, 및 활동 이력을 포함한다(그러나 이에 제한되지 않음). 일부 구현들에서, 데이터베이스(160)는 클라이언트 디바이스들(102) 상에서 플레이되는 온라인 게이밍 세션들과 연관된 세션 데이터를 저장한다. 각각의 온라인 게이밍 세션(116)에 대한 세션 데이터의 예들은 프레임 레이트, 렌더링 사양, 정상 레이턴시 요건, GPU 할당의 정보, 인코더 할당의 정보, 관련된 세션들의 식별들, 셰이더 파이프라인 식별, 및 최신 상태 정보를 포함한다(그러나 이에 제한되지 않음). 세션 데이터는 사용자 정보보다 더 빈번하게 액세스된다. 일부 구현들에서, 사용자 정보 및 세션 데이터를 저장하는 메모리는 플래시 메모리 및 RAM(random-access memory)으로 각각 제조된다. 일부 구현들에서, 사용자 정보 및 세션 데이터의 서브세트는 개개의 게이밍 타이틀에 대응하는 각각의 게임 서버(118)에 저장된다.
[0043] 서버 시스템(114)은 하나 이상의 게임 서버들(118), 미디어 스트리밍 서버(120), 게임 라이브러리 서버(122), 셰이더 라이브러리 서버(124) 및 파이프라인 최적화기 서버(150) 중 하나 이상을 포함한다. 게임 서버들(118) 또는 대안적인 전단 서버(도 1에 도시되지 않음)는 클라이언트 디바이스들(102 및 104)과 연관된 사용자 계정들, 예컨대 사용자 계정에 의한 하나 이상의 온라인 상호작용형 게임들의 멤버쉽에 대한 가입들을 관리한다. 클라이언트 디바이스들(102)이 그들 개개의 사용자 계정들에 로깅(log)하고 그들의 온라인 게이밍 세션들(116)을 시작/이들에 참가한 이후, 게임 서버들(118)은 게임 세션들(116)을 셋업할 뿐만 아니라, 콘텐츠 서버들(도시되지 않음)로부터 게임 콘텐츠들을 획득하고, 클라이언트 디바이스들(102) 또는 지정된 미디어 디바이스들(104) 상에서 실행되는 게임 애플리케이션들에 게임 콘텐츠들을 전송하고, 사용자 요청들 또는 액션들을 식별하고, 사용자 요청들 또는 액션들에 대한 응답으로 클라이언트 디바이스들(102) 또는 미디어 디바이스들(104)에 대한 게임플레이 출력들을 렌더링하며, 그리고 개개의 게이밍 세션(116) 동안 게임 상태 데이터를 저장함으로써 개개의 클라이언트 디바이스(102)에 대한 각각의 특정 게이밍 세션(116)을 관리한다.
[0044] 일부 구현들에서, 게임 서버들(118)은 클라우드 게이밍 하드웨어 리소스들(예컨대, GPU(140) 및 인코더(142))을 동적으로 할당하고, 개별 최종 사용자들에 이용가능한 네트워크 대역폭을 모니터링 및 이용하여, 최적의 클라우드 게이밍 경험을 제공한다. 일부 구현들에서, 게임 서버들(118)은, 고화질 비디오/미디어 스트림들을 갖는 고성능의 실시간 게이밍 세션들을 지원하는 티어(tier), 및 레이턴시가 거의 없거나 레이턴시 없이 하나 이상의 실제 게이밍 스트림들에 대응하는 리뷰 미디어 스트림들을 지원하는 다른 티어를 포함하는 다수의 성능 티어들을 제공한다. 선택적으로, 그러한 리뷰 미디어 스트림들은 미디어 스트리밍 사이트, 이를테면 유투브(YouTube)를 통해 하나 이상의 사용자들에게 제공되고, 미디어 스트리밍 사이트는 선택적으로 미디어 스트리밍 서버(120)에 의해 관리된다.
[0045] 일부 구현들에 따르면, 게임 서버들(118)은 제3자 게이밍 콘텐츠를 제공하는 게이밍 콘텐츠 호스트(도 1에 도시되지 않음)에 커플링된다. 제3자 게이밍 콘텐츠의 예들은 스포츠 게임들, 레이싱 게임들, RPG(role playing games) 및 FPS(first person shooter) 게임들을 포함한다(그러나 이에 제한되지 않음). 이들 게임들의 상이한 인스턴스들은, 상이한 연관된 레이턴시 요건들 및 기대들, 출력 비디오 해상도, 및 게이밍 서버 컴퓨테이셔널(computational) 작업로드 및 비디오 인코딩/스트리밍 리소스들, 및 네트워크 대역폭에 기반하여, (예컨대, 상이한 가입 성능 티어들을 갖는 일부 인스턴스들에서 일관된 최적의 사용자 게이밍 경험을 보장하기 위해) 광범위하게 다양한 클라우드 하드웨어 요건들 및 네트워크를 가질 수 있다.
[0046] 위에서 설명된 바와 같이, 서버 시스템(114)은 하나 이상의 게이밍 타이틀들을 호스팅하며, 다수의 클라이언트 디바이스들 상에서 동시적인 게임플레이를 지원하기 위해 단일 게이밍 타이틀의 복수의 온라인 게이밍 세션들을 실행하도록 구성된다. 하나 이상의 게이밍 타이틀들 각각은, 그것이 임의의 온라인 게이밍 세션을 지원하기 위해 실행되기 전에 게임 서버(118)로 로딩된다. 게임 라이브러리 서버(122)는 게임 서버들(118)에 커플링되며, 실행가능 게이밍 프로그램(예컨대, 도 5a의 서버-측 게임 모듈(526)) 및 실행가능 게이밍 프로그램의 실행을 위해 요구되는 정적 데이터 아이템들을 제공하도록 구성된다. 실행가능 게이밍 프로그램이 게임 서버들(118)로 로딩된 이후, 그 프로그램은, 하나 이상의 이미지 렌더링 프로그램들(예컨대, 셰이더 프로그램들)을 사용하여 복수의 온라인 게이밍 세션들 각각에 대한 복수의 이미지 프레임들을 생성하도록 GPU들에게 명령하기 위하여 CPU들에 의해 실행된다. 셰이더 라이브러리 서버(124)는 게임 서버들(118)에 커플링되며, 상이한 게이밍 타이틀들에 의해 필요에 따라 표준 셰이더 프로그램들을 제공하도록 구성된다. 셰이더 프로그램이 게이밍 타이틀에 의한 사용을 위해 선택되면, 그 프로그램은 셰이더 라이브러리 서버(124)로부터 리트리브(retrieve)되고, 게임 서버(118)에 의해 컴파일링되며, 각각의 온라인 게이밍 세션에 대한 복수의 이미지 프레임들을 렌더링하기 위한 사용을 위해 게임 서버들(118)에 로컬적으로 저장된다. 일부 구현들에서, 온라인 게이밍 세션의 각각의 이미지 프레임은 (예컨대, 버텍스 셰이더, 테셀레이션 셰이더, 지오메트리(geometry) 셰이더 및 프래그먼트(fragment) 셰이더를 포함하는) 컴파일링된 셰이더들의 순서화된 시퀀스에 의해 렌더링되며, 컴파일링된 셰이더들의 각각은 개개의 이미지 프레임을 생성하는 과정 동안 하나 이상의 특정 이미지 렌더링 연산들을 구현한다.
[0047] 도 2는 일부 구현들에 따른, 복수의 게임 서버들(118)이 서버 시스템(114)에서 정적 메모리 풀(202)을 공유하는 예시적인 온라인 상호작용형 게이밍 환경(200)이다. 서버 시스템(114)은, 복수의 게임 서버들(118), 미디어 스트리밍 서버(120), 게임 라이브러리 서버(122) 및 셰이더 라이브러리 서버(124) 중 하나 이상을 포함하며, 하나 이상의 게이밍 타이틀들을 호스팅하도록 구성된다. 그렇긴 하지만, 서버 시스템(114)은 하나 이상의 통신 네트워크들(112)을 통해 복수의 클라이언트 디바이스들(102)에 통신가능하게 커플링되고, 게이밍 타이틀에 대응하는 복수의 온라인 게이밍 세션들을 병렬로 실행하며, 그에 의해 복수의 클라이언트 디바이스들(102) 각각이 개개의 온라인 게이밍 세션을 통해 게이밍 타이틀 하의 게임플레이에 참여하게 허용한다. 게임 서버들(118)은 복수의 클라이언트 디바이스들(102)로부터 세션 요청들을 수신하고, 그에 따라 온라인 게이밍 세션들을 개시, 그에 참가, 또는 그를 종료한다. 각각의 세션 요청에 대한 응답으로, 게임 서버들(118) 중 하나가 대응하는 온라인 게이밍 세션을 실행하도록 할당된다. 각각의 온라인 게이밍 세션을 실행하는 과정 동안, 개개의 온라인 게이밍 세션을 실행하도록 할당된 게임 서버(118)는 온라인 게이밍 세션을 요청한 클라이언트 디바이스에 대해 복수의 이미지 프레임들(즉, 세션 데이터 스트림)을 렌더링한다. 일부 상황들에서, 복수의 이미지 프레임들은, 게이밍 타이틀의 장면을 공유하는 온라인 게이밍 세션들의 서브세트의 임의의 온라인 게이밍 세션으로부터 사용자 입력(예컨대, 점프, 슈팅 또는 턴(turn)하기 위한 커맨드)을 수신하는 것에 대한 응답으로 렌더링된다. 선택적으로, 게임 서버(118)는 또한, 리뷰 미디어 스트림을 생성하며, 그 리뷰 미디어 스트림을 직접 또는 미디어 스트리밍 서버(120)를 통해 간접적으로, 게임플레이를 실시간으로 리뷰하기를 원하는 관중에게 제공한다.
[0048] 각각의 게임 서버(118)는 하나 이상의 프로세싱 유닛들(예컨대, CPU(138), GPU(140) 및 인코더(142)), 메인 동적 메모리(144), 및 하나 이상의 로컬 캐시들(146)을 포함한다. 메인 동적 메모리(144)는 프로그램들의 실행 동안 CPU(138) 및 GPU에 의한 사용을 위한 프로그램들 및 데이터를 저장하도록 구성된다. 선택적으로, 각각의 게임 서버(118)는 그 자신의 메인 동적 메모리(144)를 갖는다. 선택적으로, 게임 서버들(118) 모두 또는 이들의 서브세트는 메인 동적 메모리(144)를 공유한다. 로컬 캐시들(146)은 데이터, 예컨대 버텍스 포스트-프로세싱을 완료하고 GPU(140)에서 프리미티브 어셈블리를 대기하는 미디어 콘텐츠, GPU(140)에 의해 생성되고 추가적인 인코딩을 위해 인코더(142)에 제공될 미디어 콘텐츠를 임시로 저장하도록 구성된다.
[0049] 일부 구현들에서, 서버 시스템(114)은 메인 메모리(144) 및 캐시들(146)에 부가하여 정적 메모리 풀(202)을 더 포함한다. 정적 메모리 풀(202)은 게임 서버들(118)(예컨대, 118-1, 118-2, ... 118-N) 모두 또는 이들의 서브세트 사이에서 공유되며, 동일한 게이밍 타이틀의 복수의 온라인 게이밍 세션들에서 사용되는 하나 이상의 정적 데이터 아이템들을 저장하도록 구성된다. 서버 시스템(114)은 정적 메모리 풀(202)을 관리하도록 구성된 메모리 콘트롤러(204)를 더 포함한다. 일부 구현들에서, 복수의 게이밍 세션들 각각은 특정 정적 데이터 아이템들과 연관되며, 특정 정적 데이터 아이템을 사용하여 개개의 GPU(140)에 의해 실행가능한 특정 그래픽 연산을 요구하고, 특정 정적 데이터 아이템은 정적 메모리 풀(202)에 저장된다. 개개의 GPU(140)는 특정 정적 데이터 아이템을 추출하기 위해 메모리 콘트롤러(204)를 통하여 정적 메모리 풀(202)에 액세스하도록 구성된다.
[0050] 일부 구현들에서, 정적 메모리 풀(202)에 저장된 정적 데이터 아이템들이 메인 동적 메모리(144)에 저장될 수 있음을 유의한다. 메인 동적 메모리(144)는 정적 메모리 풀(202)보다 빠른 레이트로 GPU에 의해 액세스된다. 그러나, 메인 동적 메모리(144)는 메모리로부터의 전하 누설들을 보상하기 위해 수 밀리초마다 새로운 전자 전하가 부여되거나 리프레시될 필요가 있으며, 따라서 전력 성능에서 효율적이지 않다. 정적 데이터 아이템들이 정적 메모리 풀(202)로 이동되면, 게임 서버들(118)의 메인 동적 메모리(144)의 일부는 비워지며(free up), 더 많은 프로그램들 및 동적 데이터를 저장하는 데 사용될 수 있거나, 또는 더 작은 메인 동적 메모리(144)가 전력 소비를 감소시키기 위해 사용될 수 있다.
[0051] 서버 시스템(114)은 로컬 캐시들(146), 메인 동적 메모리(144) 및 정적 메모리 풀(202)을 포함하는 멀티레벨 저장 방식을 갖는다. 로컬 캐시들(146)은 적어도 하나의 캐시 레벨(예컨대, L1, L2)을 포함한다. 메인 동적 메모리(144) 및 정적 메모리 풀(202)과 비교하여, 로컬 캐시들(146)은 더 작은 사이즈를 갖고, CPU들 및 GPU들에 물리적으로 더 가까우며, 더 빠른 레이트로 액세스될 수 있다. 로컬 캐시들(146)은 CPU들(138) 및 GPU들(140)에 의한 직접적인 사용을 위해 메인 동적 메모리(144) 또는 정적 메모리 풀(202)로부터 리트리브된 명령들 및 데이터의 카피들을 저장한다. 메인 동적 메모리(144)는 또한 1차 메모리로 지칭된다. CPU들(138) 및 GPU들(140)에 의해 실행되는 모든 각각의 프로그램은 메인 동적 메모리(144)로 로딩되고, 실행 이전에 블록 또는 명령 기반으로 캐시들로 이동된다. 메인 동적 메모리(144)의 사이즈는, 얼마나 많은 프로그램들이 한 번에 실행될 수 있는지 그리고 얼마나 많은 데이터가 프로그램에 용이하게 이용가능한지를 그 사이즈가 결정하기 때문에 중요하다. 정적 메모리 풀(202)은 메인 동적 메모리(144) 및 캐시들(146)에 부가하여 존재한다. 일부 구현들에서, 정적 메모리 풀(202)은 또한, CPU들(138) 및 GPU들(140) 둘 모두에 의해 액세스될 수 있지만 복수의 게임 서버들(118) 사이에서 공유되는 레벨 4 캐시로 지칭된다. 정적 메모리 풀(202)은 로컬 캐시들(146) 및 메인 동적 메모리(144)보다 큰 레이턴시를 가지며, 따라서 온라인 게이밍 세션들에서 덜 빈번하게 사용되는 정적 데이터 아이템들을 저장하는 데 사용된다. 서버 시스템(114)에서, 이러한 멀티레벨 저장 방식은 게이밍 타이틀의 다수의 온라인 게이밍 세션들이 적어도 전력 소비에 관해 효율적으로 실행될 수 있게 한다.
게이밍 환경에서의 데이터 저장
[0052] 일부 구현들에서, 게이밍 타이틀에 대응하는 게이밍 콘텐츠는 그래픽 파이프라인 프로세스(예컨대, OpenGL 렌더링 파이프라인)에 따라 온라인 게이밍 세션들에 대하여 GPU들(140)에 의해 렌더링된다. 그래픽 파이프라인 프로세스는 그래픽 연산들의 순서화된 시퀀스를 포함하고, 각각의 그래픽 연산은 하나 이상의 사용자-정의된 셰이더 프로그램들에 기반하여 구현된다. 각각의 그래픽 연산에서, GPU(140)는 선행 그래픽 연산으로부터 사용자 입력들 또는 출력들을 수신하고, 그 자신의 출력들을, 개개의 그래픽 연산의 중간 출력들로서 또는 전체 그래픽 파이프라인 프로세스의 최종 출력들로서 생성한다. 이러한 프로세스 동안, 개개의 그래픽 연산의 셰이더 프로그램들은 선행 그래픽 연산으로부터의 수신된 사용자 입력들 및 출력들에 부가하여 하나 이상의 정적 데이터 아이템들을 사용한다. 예컨대, OpenGL 렌더링 파이프라인의 그래픽 연산에서 사용된 정적 데이터 아이템들은 하나 이상의 텍스처 오브젝트들, 버텍스 데이터 버퍼 오브젝트, 및 상수 데이터 오브젝트를 포함한다. 그래픽 파이프라인 프로세스는 각각의 온라인 게이밍 세션에 대한 이미지 프레임들의 시퀀스를 렌더링하고, 각각의 이미지 프레임은 해상도를 갖는 (또한 페이지로 지칭되는) 픽셀들의 어레이를 포함한다. 일부 구현들에서, 그래픽 파이프라인 프로세스에 대응하는 정적 데이터 아이템(예컨대, 텍스처 오브젝트)은 온라인 게이밍 세션들의 이미지 프레임들과 동일한 해상도를 갖는 하나 이상의 이미지들을 포함한다.
[0053] 정적 데이터 아이템은 게이밍 타이틀에 대응하는 다수의 온라인 게이밍 세션들의 그래픽 파이프라인 프로세스에서 공유되며, 즉 상이한 온라인 게이밍 세션들 사이에서 변하지 않는다. 일부 상황들에서, 정적 데이터 아이템들은 각각의 개별 GPU(140)와 연관된 GPU RAM(random-access memory)의 일부에 저장된다. GPU RAM의 이러한 부분은 "판독-전용"으로서 API(application programming interface)에 의해 명시적으로 라벨링된다. 일부 상황들에서, GPU RAM은, 메모리 리프레시에 그의 전력 버짓(budget)의 상당한 부분을 소비하는 DRAM(예컨대, 메인 동적 메모리(144))이다. 리프레시 사이클들을 요구하지 않는 메모리 기술들의 존재가 주어지면, 정적 데이터 아이템들을 저장하기 위해 GPU RAM을 사용하는 것은 덜 바람직한 솔루션이다.
[0054] 일부 구현들에서, GPU의 DRAM의 소부분(fraction)(예컨대, 메인 동적 메모리의 일부)은, 리프레시들을 요구하지 않고 DRAM보다 더 적은 전력을 사용하는 비-휘발성 메모리로 대체된다. 이러한 비-휘발성 메모리는 그래픽 파이프라인 프로세스에서 사용되는 판독-전용 자산들(즉, 정적 데이터 아이템들 모두 또는 이들의 서브세트)을 저장하는 데 사용된다. 그러한 비-휘발성 메모리의 예들은 PRAM, 플래시 메모리 및 솔리드-스테이트 드라이브(solid-state drive)를 포함한다. 일부 구현들에서, PRAM이 사용될 경우, 그것은 DRAM보다 수십배 더 적은 기입 사이클들로 핸들링될 수 있다. 따라서, 일부 구현들에서, PRAM은 웨어-레벨링(wear-leveling) 및 해시-할당을 사용한다. PRAM의 각각의 페이지는 저장된 콘텐츠들을 표시하는 연관된 해시를 가지며, PRAM으로의 기입들 및 판독들은 (페이지 테이블 변환을 사용하여) 이러한 해시로 인덱싱된다. 게이밍 타이틀에 대응하는 게임 애플리케이션이 그의 "판독 전용" 자산들(예컨대, 정적 데이터 아이템)을 릴리즈(release)할 경우, 메모리 콘트롤러(204)는 판독-전용 자산들에 대응하는 페이지들을 즉시 릴리즈하는 것이 아니라, PRAM이 가득차 있는 경우에만 판독-전용 자산들에 대응하는 페이지들을 릴리즈한다. 릴리즈된 경우, 판독-전용 자산들에 대응하는 페이지들은 LRU(least recently used) 방법에 따라 폐기된다. 그러므로, PRAM의 메모리 유닛들은 대략적으로 동일한 양의 작업로드를 구동시키고(예컨대, 동일한 게이밍 타이틀에 대해 동일한 양의 액세스들을 다시 제공하고), 메모리 유닛들을 영구적으로 손상시킬 수 있는 과도한 기입들로부터 보호된다.
[0055] (예컨대, 서버 시스템(114) 내의) 클라우드-기반 게이밍 애플리케이션들의 일부 구현들에서, GPU의 DRAM의 소부분(예컨대, 메인 동적 메모리(144)의 일부)이 비-휘발성 메모리로 대체된 이후, 각각의 GPU의 DRAM은 RAM을 판독/기입하기 위해 필요한 것까지 아래로 감소된다. 각각의 GPU(140)의 비-휘발성 메모리는, 중앙집중식 정적 메모리 풀(202)(예컨대, PRAM 저장 디바이스)을 형성하기 위해 다른 GPU들의 비-휘발성 메모리들과 통합되고, 이들 GPU들(140) 사이에서 공유된다. 일부 구현들에서, 액세스들은 빠른 인랙(in-rack) 상호연결을 통해 정적 메모리 풀(202)로 라우팅되고, 빠른 인랙 상호연결은 각각의 서버 랙 상에 또는 유사한 스케일 상에 배열된 버스를 포함한다. 또한, 메모리 룩업 테이블들 또는 해시들이 정적 메모리 풀(202)에 저장된다.
[0056] GPU 자산들의 판독-전용 부분들은 다수의 구동들에 걸쳐 재사용될 수 있으며, 중앙집중식 판독-전용 저장소에 부착된 많은 작업로드들이 유사하면 공유될 수 있다. 그렇긴 하지만, 일부 구현들에서, 정적 메모리 풀(202)에 저장된 정적 데이터 아이템들은 추출되면, 2개 이상의 온라인 게이밍 세션들 사이에서 재사용된다. 이러한 정적 메모리 풀(202)로의 기입 시에, 정적 데이터 아이템들은 동일한 정적 데이터 아이템들을 반복적으로 저장하는 것을 피하기 위해 메모리 룩업 테이블 또는 해시에 따라 해싱된다. 일부 구현들에서, 정적 데이터 아이템이 정적 메모리 풀(202)에 이미 존재하면, 정적 메모리 풀(202)이 완전히 채워지는 것을 피하기 위해, 증대된 LRU 정책이 적용된다. 일부 구현들에서, 정적 메모리 풀(202) 내의 기존의 데이터 아이템에 대한 오프셋이 리트리브되어, 이러한 정적 데이터 아이템에 대한 미래의 메모리 액세스들을 위해 저장된다. 게임 애플리케이션이 정적 데이터 아이템을 릴리즈할 경우, 정적 메모리 풀(202)의 공간이 없어질 때까지 그 정적 데이터 아이템을 삭제할 필요성이 존재하지 않는다.
[0057] 일부 구현들에서, 각각의 GPU(140)로부터 정적 메모리 풀(202)로의 라운드 트립에 대한 레이턴시가 측정되어, 하나 이상의 GPU 레이턴시-은닉(latency-hiding) 방법들을 사용하여 보상된다. 하나 이상의 GPU 레이턴시-은닉 방법들은, 정적 메모리 풀(202)에 대한 기입 액세스들을 조합하는 기입 통합, 타일화된/압축된/공간적으로 코히런트한 텍스처들, 및 정적 메모리 풀(202)로부터의 페이지-사이즈 전달들을 포함한다(그러나 이에 제한되지 않음). 일부 상황들 하에서, 정적 데이터 아이템들을 저장하기 위해 (로컬 DRAM보다는) 정적 메모리 풀(202)을 사용하기 때문에 메모리 레이턴시들을 은닉하기 위해 왜곡(warp)들의 수가 증가된다.
[0058] 일부 구현들에서, 중앙집중식 정적 메모리 풀(202)은 종종 제한된 기입 사이클들을 갖는 PRAM-형 메모리 및 PRAM을 포함한다. 정적 메모리 풀(202)은 스왑 아웃(swap out)되거나 대체되는 반면, GPU들(140) 중 어느 것도 랙에서 영향을 받지 않을 것이다.
[0059] 일부 구현들에서, 서버 시스템(114)은 하나 초과의 게이밍 타이틀들에 대한 온라인 게이밍 세션들을 지원한다. 작업로드들은 정적 메모리 풀(202)로의 이전의 작업로드들의 업로딩된 "판독 전용" 자산들에 따라 다수의 서버들을 포함하는 랙에 할당된다. 게이밍 타이틀들은 레벨에 의해 분할되며, 동일한 레벨들의 인기있는 게이밍 타이틀들은 더 작은 정적 메모리 풀들을 허용하기 위해 동일한 랙 상에서 게임 서버들(118)에 의해 구동된다.
[0060] 일부 구현들에서, 많은 수의 GPU들이 동일한 작업로드들(예컨대, 게이밍 타이틀에 대응하는 온라인 게이밍 세션들)을 구동시키고 있고 DRAM 리프레시 및 네트워크 전력 비용들을 상각(amortize)시키기에 충분한 재사용을 달성할 수 있다면, 정적 메모리 풀(202)은 (PRAM 풀 또는 등가물 대신) 공유된 DRAM 풀로 대체될 수 있다.
[0061] 도 3a는 일부 구현들에 따른, 서버 시스템(114)에 데이터를 저장하도록 구성된, 멀티레벨 저장 방식을 갖는 예시적인 메모리 시스템(300)이다. 멀티레벨 저장 방식에 따르면, 서버 시스템(114)의 메모리 시스템(300)은 각각의 개별 서버(예컨대, 게임 서버(118)) 내에 직접 배치되는 복수의 캐시들(302)을 포함한다. 더 구체적으로, 복수의 캐시들(302) 각각은 개별 서버의 프로세서, 예컨대 게임 서버(118)의 CPU(138) 및 GPU(140)와 직접 연관되며, 개별 서버의 프로세서에 의해 실행되는 명령들 및 명령들의 실행 동안 사용되는 데이터 둘 모두를 제공하도록 구성된다. 서버 시스템(114)의 메모리 시스템(300)은 서버(예컨대, 게임 서버(118))의 하나 이상의 프로세서들에 의해 실행되는 프로그램들 및 프로그램들의 실행 동안 사용되는 데이터를 저장하도록 구성된 메인 동적 메모리(144)를 더 포함한다. 각각의 프로그램은 복수의 명령들을 포함하며, 실행 동안, 명령들은 대응하는 프로세서의 캐시들(302)에 순차적으로 로딩되고, 개개의 프로세서에 의해 실행되기를 대기한다. 일부 구현들에서, 서버 시스템(114)의 서버들의 서브세트 또는 모든 서버들은 메인 동적 메모리(144)를 공유한다. 데이터 버스는, 메인 동적 메모리(144)에 대한 기입 및 판독 액세스들을 가능하게 하기 위해 서버 시스템(114)의 서버들의 서브세트 또는 모든 서버들을 메인 동적 메모리(144)에 커플링시킨다. 선택적으로, 데이터 버스는 고속 데이터 버스를 포함하며, 이를 통해, 메인 동적 메모리(144)는 임계 버스 레이턴시보다 낮은 실질적으로 작은 레이턴시로 액세스된다. 일부 구현들에서, 서버 시스템(114)의 각각의 서버는 개개의 서버의 하나 이상의 프로세서들에만 액세스가능한 개개의 메인 동적 메모리(144)를 갖는다. 예컨대, 게임 서버(118)는 게임 서버(118)의 CPU(138) 및 GPU(140) 둘 모두에 액세스가능한 메인 동적 메모리(144)를 포함한다. 게임 서버(118)의 메인 동적 메모리(144)는 하나 이상의 게이밍 타이틀들을 실행하도록 구성된 명령들(304), 예컨대 도 5a의 서버-측 게임 모듈(526)의 명령들, 및 각각의 게이밍 타이틀의 온라인 게이밍 세션들과 연관된 동적 데이터(306), 예컨대 제1 게임 세션 데이터(308) 및 제2 게임 세션 데이터(310)를 저장한다. 구체적으로, 제1 게임 세션 데이터(308)는 선택적으로, 개개의 게이밍 타이틀의 대응하는 온라인 게이밍 세션에 대하여 GPU(140)에 의해 생성된 하나 이상의 이미지 프레임들의 텍스처 페이지들(308A), 버텍스 페이지들(308B), 상수 페이지들(308C) 및 프레임 데이터(308D)를 포함한다. 서버 시스템(114) 내의 메인 동적 메모리(144)에 저장된 프로그램들 및 데이터에 대한 더 많은 세부사항들은 도 5a 및 도 5b를 참조하여 아래에서 설명된다.
[0062] 멀티레벨 저장 방식에 따르면, 서버 시스템(114)의 메모리 시스템(300)은 서버 시스템(114) 내의 복수의 게임 서버들(118)에 대해 중앙집중화되거나 그 게임 서버들에 의해 공유되는 정적 메모리 풀(202)을 더 포함한다. 정적 메모리 풀(202)은 게이밍 타이틀의 온라인 게이밍 세션들의 이미지 프레임들을 렌더링하기 위해 사용되는 하나 이상의 정적 데이터 아이템들을 저장하도록 구성된다. 하나 이상의 정적 데이터 아이템들의 예들은, 텍스처 오브젝트들(312), 버텍스 데이터 버퍼 오브젝트들(314), 상수 데이터 오브젝트들(316)을 포함한다(그러나 이에 제한되지 않음). 복수의 게임 서버들(118)이 복수의 온라인 게이밍 세션들을 실행하도록 할당되는 경우, 각각의 게임 서버(118)는 정적 메모리 풀(202)로부터 하나 이상의 정적 데이터 아이템들을 획득하고, 그의 대응하는 메인 동적 메모리(144)로부터 하나 이상의 동적 데이터 아이템들(306)을 획득한다.
[0063] 추가로, 일부 구현들에서, 게임 서버(118)는 그의 GPU(140)에 커플링된 셰이더 캐시(318)를 더 포함한다. 셰이더 캐시(318)는, 컴파일링된 셰이더들의 적어도 하나의 시퀀스를 저장하여, 컴파일링된 셰이더들의 명령들이 그래픽 파이프라인 프로세스를 통하여 게이밍 콘텐츠를 렌더링하도록 GPU(140)로 직접 로딩될 수 있게 구성된다. 일부 구현들에서, 서버 시스템(114)은 복수의 컴파일링된 셰이더 시퀀스들(320)을 포함하며, 이들 각각은 성능 기준에 따라 구성되고, 각각의 컴파일링된 셰이더 시퀀스(320)는 선택적으로, 상이한 사용자 입력 조건들에 대응하는 복수의 버전들을 포함한다. 선택적으로, 복수의 컴파일링된 셰이더 시퀀스들(320)은 셰이더 캐시(318)에 저장된다. 선택적으로, 복수의 컴파일링된 셰이더 시퀀스들(320)은 정적 메모리 풀(202)에 저장되며, 게이밍 콘텐츠 렌더링에서의 사용을 위해 선택되면, 셰이더 캐시(318)로 또는 직접 GPU(140)의 캐시로 이동된다.
[0064] 추가로, 멀티레벨 저장 방식에 따르면, 서버 시스템(114)의 메모리 시스템(300)은 하나 이상의 게이밍 타이틀들에 대응하는 하나 이상의 실행가능 게이밍 프로그램들을 저장하는 하드 드라이브(324)를 포함한다. 게이밍 타이틀을 호스팅하도록 서버 시스템(114)을 구성하는 과정 동안, 서버 시스템(114)의 CPU들(138)은 게이밍 타이틀에 대응하는 실행가능 게이밍 프로그램(328)에 대한 프로그램 요청(326)을 전송한다. 프로그램 요청(326)에 대한 응답으로, 하드 드라이브(324)는 게이밍 타이틀에 대응하는 실행가능 게이밍 프로그램(328)을 CPU들(138)로 리턴시킨다. 일부 구현들에서, 하드 드라이브(324)는 요청된 실행가능 게이밍 프로그램(328)을 저장하지 않으며, CPU들(138)은 원격 서버(예컨대, 게임 라이브러리 서버(122) 또는 다른 제3자 게임 제공자)로부터 실행가능 게이밍 프로그램(328)을 요청하기 위한 프로그램 요청(326)을 전송한다. CPU들(138)은 하드 드라이브(324) 또는 원격 서버로부터 리턴된 실행가능 게이밍 프로그램(328)을 서버-측 게임 모듈(526)로서 메인 동적 메모리(144)에 저장한다.
[0065] 추가로, 일부 구현들에서, 하드 드라이브(324)는 또한 하나 이상의 게이밍 타이틀들의 정적 데이터 아이템들을 저장한다. 게이밍 타이틀을 로딩하는 과정 동안, 서버 시스템의 CPU들(138)은 게이밍 타이틀의 정적 데이터 아이템들에 대한 데이터 요청(330)을 전송한다. 데이터 요청(326)에 대한 응답으로, 하드 드라이브(324)는 게이밍 타이틀에 대응하는 정적 데이터 아이템들(332) 모두 또는 이들의 서브세트를 CPU들(138)로 리턴시킨다. 일부 구현들에서, 하드 드라이브(324)는 특정 정적 데이터 아이템을 저장하지 않으며, CPU들(138)은 원격 서버(예컨대, 게임 라이브러리 서버(122) 또는 셰이더 라이브러리 서버(124))로부터 특정 정적 데이터 아이템을 요청하기 위한 데이터 요청(330)을 전송한다. 하드 드라이브(324) 또는 원격 서버로부터 리턴된 하나 이상의 정적 데이터 아이템들(332A)은 정적 메모리 풀(202)에 저장된다. 대안적으로, 일부 구현들에서, 하나 이상의 정적 데이터 아이템들(332B)은 게임 서버들(118)의 CPU들 및 GPU들에 의해 직접적인 액세스를 위해 메인 동적 메모리(144)에 저장된다.
[0066] 부가적으로, CPU들(138)은 또한, 게이밍 타이틀과 연관되어 사용된 하나 이상의 표준 셰이더 프로그램들(336)을 획득하기 위한 셰이더 요청을 셰이더 라이브러리 서버에 전송하고, 리턴된 셰이더 프로그램들(336)은 셰이더 캐시(318)에 로컬적으로 저장된다. 게이밍 타이틀에 대응하는 온라인 게이밍 세션들을 실행하는 동안, CPU들(138) 및 GPU들(140)은 복수의 동적 데이터 아이템들(338)을 생성한다. 이들 복수의 동적 데이터 아이템들(338)은 서버 시스템(114)의 메인 동적 메모리(144)에 저장된다.
[0067] 일부 구현들에서, 서버 시스템(114)은, 메인 동적 메모리(144) 및 정적 메모리 풀(202)에 대한 기입 및 판독 액세스들을 각각 관리하도록 구성된 동적 메모리 콘트롤러(204A) 및 정적 메모리 콘트롤러(204B)를 포함한다. 일부 구현들에서, 서버 시스템(114)은 메인 동적 메모리(144) 및 정적 메모리 풀(202)에 대한 기입 및 판독 액세스들을 관리하도록 구성된 단일 메모리 콘트롤러(204)를 포함한다. 메인 동적 메모리(144)는, (존재한다면) 메인 동적 메모리(144)에서 명령들(304), 동적 데이터 아이템들(306) 및 정적 데이터 아이템(332B)의 위치들을 식별하는 디렉토리(340)를 포함한다. 일부 구현들에서, 정적 메모리 풀(202)은 정적 메모리 풀(202)에서 정적 데이터 아이템들(332A)의 위치들을 식별하는 해시 테이블(342)을 포함한다. 선택적으로, 정적 데이터 아이템들(332)은 콘텍스트 정보에 기반하여 식별된다. 일 예에서, 정적 메모리 풀(202)은 복수의 컴파일링된 셰이더 시퀀스들(320)을 저장하고, 정적 메모리 풀(202) 내의 그들의 어드레스들은 해시 테이블 내의 성능 기준들, 사용자 입력들 및/또는 대응하는 그래픽 파이프라인 프로세스의 사용 통계들을 사용하여 식별된다. 선택적으로, 해시 테이블(342) 내의 그러한 콘텍스트 기반 맵핑이 다른 정적 데이터 아이템들에 또한 적용된다. 해시 테이블은 상이한 상황들과 연관되어 반복적으로 정적 데이터 아이템을 저장하는 것으로부터 정적 메모리 풀(202)을 보호하며, 그에 의해 그의 메모리 리소스들의 낭비를 야기한다.
[0068] 도 3b는 일부 구현들에 따른, 다수의 레벨들의 캐시들을 갖는 예시적인 CPU(138)이다. 일부 구현들에서, 각각의 CPU는 복수의 CPU 코어들(350)을 포함한다. 각각의 CPU 코어(350)는 개개의 CPU 코어에 의해 실행되는 명령들 및 명령들의 실행 동안 사용되는 데이터 둘 모두를 저장하는 캐시(352)를 갖는다. 캐시(352)는 개개의 CPU 코어(350)와 직접적으로 커플링되며, 개개의 CPU 코어(350)에 즉시 그리고 직접적으로 명령들 및 데이터를 제공할 수 있다. 일부 구현들에서, CPU 코어(350)는 CPU(138)의 복수의 CPU 코어들(350)에 의해 공유되는 CPU 캐시(354)를 더 포함한다. CPU 캐시(354)는 CPU 코어들(350)에 저장된 명령들의 실행 동안 사용되는 데이터를 저장한다. CPU 캐시(354)는 CPU 코어들(350)과 직접적으로 커플링된 캐시들(352)에 그의 데이터를 공급한다.
[0069] 도 3c는 일부 구현들에 따른, 다수의 레벨들의 캐시들을 갖는 예시적인 GPU(140)이다. 일부 구현들에서, 각각의 GPU는 복수의 GPU 코어들(360)을 포함한다. 각각의 GPU 코어(360)는 개개의 GPU 코어에 의해 실행되는 명령들 및 명령들의 실행 동안 사용되는 데이터 둘 모두를 저장하는 캐시(362)를 갖는다. 캐시(362)는 개개의 GPU 코어(360)와 직접적으로 커플링되며, 개개의 GPU 코어(360)에 즉시 그리고 직접적으로 명령들 및 데이터를 제공할 수 있다. 일부 구현들에서, GPU 코어(360)는 GPU(138)의 복수의 GPU 코어들(360)에 의해 공유되는 GPU 캐시(364)를 더 포함한다. GPU 캐시(364)는 GPU 코어들(360)에 저장된 명령들의 실행 동안 사용되는 데이터를 저장한다. GPU 캐시(364)는 GPU 코어들(360)과 직접적으로 커플링된 캐시들(362)에 그의 데이터를 공급한다. 게이밍 타이틀의 게이밍 콘텐츠를 렌더링하기 위해, 메모리 시스템(300)에서의 기입들 및 판독들은 페이지에 의해(예컨대, 게이밍 콘텐츠의 이미지 프레임에 대응하는 이미지 픽셀들의 어레이에 의해) 관리된다. 페이지-사이즈 판독들은, 최종-레벨 캐시로서 사용되는 DRAM의 작은 풀을 가급적 포함하는 로컬 GPU 메모리 계층구조(L3 내지 L1 캐시들)에 캐싱되고, 즉 캐시들(362) 및 GPU 캐시(364)에 캐싱된다.
[0070] 도 3d는 일부 구현들에 따른, 서버 시스템(114) 내의 복수의 프로세서들에 의해 공유되는 정적 메모리 풀(202)에 대한 판독 및 기입 액세스들을 제어하는 예시적인 메모리 콘트롤러(204)이다. 메모리 콘트롤러(204)는 액세스 제어 모듈(372), 페이지 릴리즈 모듈(374), 웨어-레벨링 모듈(376), 및 LRU 모듈(378) 중 하나 이상을 포함한다. 액세스 제어 모듈(372)은, 내부에 저장된 해시 테이블(342)에 기반하여 정적 메모리 풀(202)에 액세스하도록 구성된다. 페이지 릴리즈 모듈(374)은 정적 메모리 풀(202)로부터 정적 데이터 아이템들을 삭제하도록 구성된다. 선택적으로, 특정 데이터 아이템을 삭제하기 위한 요청에 대한 응답으로, 페이지 릴리즈 모듈(374)은 정적 메모리 풀(202)이 가득차 있는지 여부를 결정한다. 정적 메모리 풀(202)이 가득차 있지 않다는 결정에 따라, 페이지 릴리즈 모듈(374)은 삭제될 특정 데이터 아이템에 대한 임의의 액세스를 디스에이블링시키기 위해 해시 테이블(342)을 수정한다. 정적 메모리 풀(202)이 가득차 있다는 결정에 따라, 페이지 릴리즈 모듈(374)은 정적 메모리 풀(202)로부터 특정 데이터 아이템을 삭제하여, 대응하는 메모리 공간을 비운다.
[0071] 웨어-레벨 모듈(376)은, 정적 메모리 풀(202)에서의 메모리 유닛들의 재기입들을 모니터링하도록, 그리고 정적 메모리 풀(202)의 서비스 수명을 연장시키려는 목적들을 위해 정적 메모리 풀(202)에서 균등하게 재기입들을 분배하도록 구성된다. LRU 모듈(378)은 정적 메모리 풀(202)로부터 가장 덜 최근에 사용된 정적 데이터 아이템을 제거하도록 구성된다. 구체적으로, 일부 구현들에서, LRU 모듈(378)은 정적 메모리 풀(202)에 저장된 각각의 정적 데이터 아이템과 함께 에이지 비트(age bit)들을 저장한다. 메모리 제한에 도달된 경우, 에이지 비트들에 따라 식별된 가장 오래된 데이터 아이템으로부터 시작하여, 덜 최근에 액세스된 정적 데이터 아이템들이 제거된다. LRU 모듈이 정적 데이터 아이템을 삭제할 경우, 에이지 비트들은 정적 메모리 풀(202)에 남아있는 정적 데이터 아이템들에 대해 변화된다.
[0072] 도 4a는 일부 구현들에 따른, 서버 시스템(114) 상에 게이밍 타이틀을 로딩하는 프로세스(400) 동안의 예시적인 데이터 흐름이다. 서버 시스템(114)은 서로 원격인, 게임 서버들(118), 게임 라이브러리 서버(122) 및 셰이더 라이브러리 서버(124)를 포함한다. 서버 시스템(114)은 또한, 게임 서버들(118)에 의해 호스팅되는 게이밍 타이틀의 게임플레이에 관여되는 복수의 클라이언트 디바이스들(102)로부터 원격이다. 서버 시스템(114)(구체적으로는 게임 서버들(118))은 하나 이상의 CPU들(138) 및 복수의 GPU들(140)을 포함하고, 멀티레벨 저장 방식을 이용한다. 멀티레벨 저장 방식에 따르면, 서버 시스템(114)은, 프로그램 실행 동안 CPU들 및/또는 GPU들에 의한 사용을 위한 프로그램들 및 데이터를 저장하는 메인 동적 메모리(144), 비-휘발성 메모리에 저장된 정적 메모리 풀(202), 및 정적 메모리 풀(202)을 관리하도록 구성된 메모리 콘트롤러(204)를 포함한다. 게이밍 타이틀을 로딩하기 위한 사용자 요청을 수신하는 것(401)에 대한 응답으로, CPU들(138)은, 게이밍 타이틀에 대응하는 실행가능 게이밍 프로그램(예컨대, 서버-측 게임 모듈(526))을 요청하는 프로그램 요청을 게임 서버(118) 또는 게임 라이브러리 서버(122)의 하드 드라이브(324)에 전송한다(402). 일부 구현들에서, CPU들(138)은 먼저 프로그램 요청을 하드 드라이브(324)에 전송한다. 하드 드라이브(324)가 실행가능 게이밍 프로그램의 카피를 제공할 수 없다면, CPU들(138)은 프로그램 요청을 게임 라이브러리 서버(122)에 전송한다. 프로그램 요청에 대한 응답으로, 하드 드라이브(324) 또는 게임 라이브러리 서버(122)는 실행가능 게이밍 프로그램의 카피를 리턴하며, 그 카피는 이어서 메인 동적 메모리(144)에 저장된다(404).
[0073] 하나 이상의 정적 데이터 아이템들(예컨대, 텍스처 오브젝트들)은 실행가능 게이밍 프로그램을 실행하는 과정 동안 요구되므로, CPU들(138)은 정적 데이터 아이템들의 미리 결정된 세트를 요청하는 데이터 요청을, 하드 드라이브(324), 게임 라이브러리 서버(122) 및 셰이더 라이브러리 서버(124) 중 적어도 하나에 전송한다(406). 하드 드라이브(324)가 개개의 데이터 아이템을 갖지 않는다면, CPU들(138)은 데이터 요청을 순서에 따라, 예컨대 먼저 하드 드라이브(324)에, 이어서 게임 라이브러리 서버(122) 및/또는 셰이더 라이브러리 서버(124)에 전송한다. 순서는 선택적으로, 정적 데이터 아이템들의 세트에 대해 동일하거나 또는 각각의 정적 데이터 아이템에 따라 맞춤화된다. 요청된 정적 데이터 아이템들의 제1 서브세트의 각각의 정적 데이터 아이템에 대해, 하드 드라이브(324), 게임 라이브러리 서버(122) 및 셰이더 라이브러리 서버(124) 중 하나는 개개의 데이터 아이템의 카피를 리턴시키며, 그 카피는 정적 메모리 풀(202)에 저장된다(408). 일부 구현들에서, 요청된 정적 데이터 아이템들의 제2 서브세트는 리턴되어 메인 동적 메모리(144)에 저장된다(410). 일부 구현들에서, 요청된 정적 데이터 아이템들은 요청된 데이터 아이템들의 제3 서브세트(예컨대, 하나 이상의 셰이더 프로그램들)를 포함한다. 요청된 정적 데이터 아이템들의 제3 서브세트는 하드 드라이브(324) 및 셰이더 라이브러리 서버(124) 중 하나에 의해 리턴되어, 셰이더 캐시(318)에 저장된다(412).
[0074] 도 4b는 일부 구현들에 따른, 서버 시스템(114) 상에서 (구체적으로는 게임 서버(118)에서) 온라인 게이밍 세션을 실행하는 프로세스 동안의 예시적인 데이터 흐름(420)이다. CPU들은 복수의 분산된 클라이언트 디바이스들(102)로부터의 게이밍 타이틀 하에서 복수의 온라인 게이밍 세션들을 개시하기 위한 복수의 세션 요청들을 수신한다(422). 각각의 클라이언트 디바이스(102)는 게이밍 타이틀에 대응하는 실시간 사용자-상호작용형 게이밍 애플리케이션을 실행하고, 개개의 세션 요청은 개개의 클라이언트 디바이스(102)의 게이밍 애플리케이션로부터 전송된다. 개개의 세션 요청은 요청하는 클라이언트 디바이스(102)의 사용자 정보를 포함한다. 개개의 클라이언트 디바이스(102)의 사용자 정보를 수신한 이후, CPU들(138)은 사용자 정보에 기반하여 대응하는 온라인 게이밍 세션을 인가하고(424), 대응하는 온라인 게이밍 세션을 실행하기 위해 GPU들(140) 중 하나를 할당한다(426). 일부 구현들에서, 복수의 온라인 게이밍 세션들 중 2개 이상이 GPU들(140) 중 하나에 할당된다. 다른 방식으로 나타내면, 2개 이상의 온라인 게이밍 세션들은 TDM(time-division multiplexing), 공간 멀티플렉싱 또는 이들의 조합에 기반하여 GPU들 중 하나의 GPU의 컴퓨테이셔널 및 저장 리소스들을 공유해야 한다. 게임 콘텐츠 렌더링에서의 GPU 할당의 더 많은 세부사항들은 발명의 명칭이 "Methods and Systems for Rendering and Encoding Content for Online Interactive Gaming Sessions"으로 2018년 3월 22일자로 출원된 미국 가특허 출원 제 62/646,824호에 설명되어 있으며, 그 가특허 출원은 그 전체가 본 명세서에 인용에 의해 포함된다.
[0075] 각각의 세션 요청에 대한 응답으로, CPU들(138)은 메인 동적 메모리(144)로부터 CPU들(138)의 로컬 캐시들로 게이밍 타이틀의 실행가능 게이밍 프로그램의 명령들을 카피하고(428), 명령들을 하나씩 실행한다. 유사하게, CPU들(138)에 의해 명령되면, 개개의 온라인 게이밍 세션을 실행하도록 할당된 개개의 GPU는 또한, 실행가능 게이밍 프로그램의 관련된 게임 렌더링 명령들을 그의 로컬 캐시들에 로딩하고(428), 게임 렌더링 명령들을 하나씩 실행한다.
[0076] 일부 구현들에서, 복수의 온라인 게이밍 세션들 각각은 일정하게, 예컨대 60fps(frames per second)의 레이트로 리프레시된다. 일부 구현들에서, 복수의 온라인 게이밍 세션들 각각은, 개개의 세션 그 자체에 의해 또는 관련된 세션에 의해 입력된 사용자 액션에 대한 응답으로 리프레시된다. 예컨대, 온라인 게이밍 세션들의 서브세트는, 그 온라인 게이밍 세션들이 게이밍 타이틀의 동일한 게이밍 장면에 있을 경우 관련되며, 온라인 게이밍 세션들의 서브세트의 각각의 온라인 게이밍 세션에 전달되는 게이밍 콘텐츠는 적어도, 온라인 게이밍 세션들의 서브세트의 임의의 온라인 게이밍 세션이 사용자 액션을 입력할 경우 업데이트된다.
[0077] 구체적으로, 온라인 게이밍 세션에 대해, CPU들(138)은, 온라인 게이밍 세션 또는 온라인 게이밍 세션과 동일한 게이밍 장면을 공유하는 다른 별개의 게이밍 세션에 관여된 제1 클라이언트 디바이스의 게이밍 애플리케이션을 통해 입력된 사용자 입력을 수신한다(430). 응답으로, CPU들(138)은, 온라인 게이밍 세션을 실행하도록 할당된 GPU(140)에게 사용자 입력에 따라 이미지 프레임들의 시퀀스를 렌더링하도록 명령(438)하기 위해 게이밍 타이틀에 대응하는 실행가능 게이밍 프로그램의 명령들을 실행한다(432). 이러한 온라인 게이밍 세션의 실행 동안, 이러한 온라인 게이밍 세션과 연관된 동적 데이터 아이템들은 메인 동적 메모리(144)에 저장되거나 또는 그 메인 동적 메모리로부터 추출된다(434). 이러한 온라인 게이밍 세션과 연관된 정적 데이터 아이템들은 정적 메모리 풀(202)로부터 추출된다(436). 일부 구현들에서(본 명세서에 도시되지 않음), 정적 데이터 아이템들의 세트는 메인 동적 메모리(144)로부터 추출된다.
[0078] 이어서, 할당된 GPU(140)는 사용자 입력에 기반하여 온라인 게이밍 세션의 이미지 프레임들을 렌더링하기 위해 게임 렌더링 명령들을 실행한다(439). 온라인 게이밍 세션의 실행 동안, GPU(140)는 셰이더 캐시(318)로부터 컴파일링된 셰이더들을 획득하고(440), 정적 메모리 풀(202)로부터 정적 데이터 아이템들을 추출하며(442), 동적 데이터 아이템들을 메인 동적 메모리(144)에 저장하거나 또는 메인 동적 메모리(144)로부터 추출한다(444). 일부 구현들에서(본 명세서에 도시되지 않음), GPU들은 또한, 메인 동적 메모리(144)로부터 하나 이상의 정적 데이터 아이템들을 추출한다. GPU에 의해 렌더링된 이미지 프레임들은 인코더(142)에 의해 인코딩되어, 온라인 게이밍 세션을 실행하는 클라이언트 디바이스(102)로 스트리밍된다(446). 일부 구현들에서, GPU에 의해 렌더링된 이미지 프레임들(예컨대, 관중 리뷰를 위해 의도된 정상 레이턴시 스트림)은 미디어 스트리밍 서버(120)를 통해 클라이언트 디바이스(102)로 스트리밍된다(448).
[0079] 도 4c는 일부 구현들에 따른, 셰이더 최적화 프로세스(450)에서의 예시적인 데이터 흐름이다. 일부 구현들에서, 실행가능 게이밍 프로그램(예컨대, 도 5a의 서버-측 게임 모듈(526))은 게임 애플리케이션, 및 온라인 게이밍 세션 및 셰이더 파이프라인 최적화 프로세스를 동시에 실행하도록 구성된 셰이더 파이프라인 최적화기를 포함한다. 예컨대, 게임 애플리케이션이 전경에서 그래픽 파이프라인 프로세스(동작들(438 내지 448)) 내에서 온라인 게이밍 세션을 실행하는 동안, 셰이더 파이프라인 최적화기는 배경에서 이러한 그래픽 파이프라인 프로세스 내에서 사용되는 컴파일링된 셰이더들을 최적화한다. 다른 방식으로 나타내면, 그래픽 파이프라인 프로세스(동작들(438 내지 448))가 구동되고 있는 동안, 게임 서버(118)는 하나 이상의 성능 기준들을 만족시키기 위해 배경에서, 컴파일링된 셰이더들의 하나 이상의 시퀀스들을 생성한다(450).
[0080] 구체적으로, 일부 구현들에서, CPU들(138)은 게이밍 타이틀에 관련된 모든 활성 온라인 게이밍 세션들로부터 선택적으로 샘플링된 온라인 게이밍 세션들의 세트의 사용 통계들을 수집한다(452). 사용 통계들은 CPU들(138) 또는 GPU들(140)의 로컬 캐시들 또는 메인 동적 메모리(144)로부터 획득될 수 있다. CPU들(138)은 최적화 동안 만족될 필요가 있는 하나 이상의 성능 기준들을 식별 및 획득한다(454). 일부 구현들에서, 하나 이상의 성능 기준들은 정적 메모리 풀(202) 또는 메인 동적 메모리(144)에 저장되는 하나 이상의 정적 데이터 아이템들을 포함한다(선택적). 이어서, CPU들(138)은, 사용 통계들 및 성능 기준에 기반하여 활성 온라인 게이밍 세션들을 실행하기 위해 사용되고 있는 컴파일링된 셰이더들의 시퀀스를 최적화하기 위한 요청을 GPU들에 전송한다(456). 하나 이상의 성능 기준들 각각에 대해, GPU들(140)은 개개의 성능 기준에 관해, 컴파일링된 셰이더들의 시퀀스의 성능을 개선시키기 위해, 컴파일링된 셰이더들의 시퀀스에서 하나 이상의 셰이더들을 식별하며, 그에 의해 컴파일링된 셰이더들의 수정된 시퀀스를 생성한다(458). 일부 상황들에서, 컴파일링된 셰이더들의 수정된 시퀀스는 선택적으로, 컴파일링된 셰이더들의 시퀀스 대신 저장되고, 후속 온라인 게이밍 세션들에 의해 사용된다. 일부 상황들에서, 컴파일링된 셰이더들의 수정된 시퀀스는 사용 통계들에 대응하는 컴파일링된 셰이더들의 시퀀스의 새로운 버전으로서 저장되며, 온라인 게이밍 세션들의 후속 게임 상태들이 사용 통계들과 일치할 경우 사용된다. 일부 구현들에서, 컴파일링된 셰이더들의 각각의 수정된 시퀀스는 대응하는 성능 기준과 연관되어 셰이더 캐시(318)에 저장된다(460). 대안적으로, 도 4c에 도시되지 않은 일부 구현들에서, 컴파일링된 셰이더들의 연관된 수정된 시퀀스 및 성능 기준이 정적 메모리 풀(202)에 저장된다.
[0081] 도 4d는 일부 구현들에 따른, 복수의 온라인 게이밍 세션들이 실행되고 있는 경우 정적 데이터 아이템들을 획득하기 위한 예시적인 데이터 흐름(480)이다. 위에서 설명된 바와 같이, 복수의 온라인 게이밍 세션들이 게임 서버(118)에 의해 병렬로 실행될 경우(482), 하나 이상의 CPU들은 각각의 온라인 게이밍 세션을 개개의 GPU에 할당한다. 각각의 온라인 게이밍 세션의 실행 동안, 개개의 GPU(140)는 셰이더 캐시(318)로부터 컴파일링된 셰이더들을 획득하고(440), 정적 메모리 풀(202)로부터 정적 데이터 아이템들을 추출하며(442), 동적 데이터 아이템들을 메인 동적 메모리에 저장하거나 또는 메인 동적 메모리로부터 추출한다(444). 도 4d를 참조하면, 일부 구현들에서, 2개의 클라이언트 디바이스들(102A 및 102B)은 복수의 온라인 게이밍 세션들 중 제1 온라인 게이밍 세션 및 제2 온라인 게이밍 세션을 각각 실행한다. 클라이언트 디바이스들(102A 및 102B) 둘 모두는, 예컨대 클라이언트 디바이스(102A)에 의한 게이밍 타이틀에 대응하는 게임 애플리케이션에서 사용자 입력들을 수신하는 것(484)에 대한 응답으로, 게임 서버들(118)에 의해 렌더링된 이미지 프레임들을 수신한다. 개개의 이미지 프레임들을 렌더링하는 과정 동안, (제1 게이밍 세션 및 제2 게이밍 세션을 포함하는) 복수의 게이밍 세션들 각각은 정적 데이터 아이템과 연관되고, 정적 데이터 아이템을 사용하여 개개의 GPU에 의해 실행가능한 그래픽 연산을 요구하며, 정적 데이터 아이템은 정적 메모리 풀(202)에 저장된다.
[0082] 복수의 게이밍 세션들 중 제1 게이밍 세션에 대해, CPU들은 그래픽 연산을 제1 GPU에 할당한다. 제1 GPU는 제1 GPU에 의해, 메모리 콘트롤러(204)로부터의 정적 데이터 아이템의 제1 카피를 요청하고(486), 정적 메모리 풀(202)로부터 판독된 정적 데이터 아이템의 제1 카피를 메모리 콘트롤러(204)로부터 수신한다(488). 이어서, 제1 GPU는 정적 데이터 아이템의 제1 카피를 사용하여 그래픽 연산을 수행하고, 복수의 게이밍 세션들 중 제1 게이밍 세션과 연관된(예컨대, 식별자를 사용함으로써) 그래픽 연산의 제1 결과를 로컬적으로 저장한다. 유사하게, 복수의 게이밍 세션들 중 제2 게이밍 세션에 대해, CPU들은 그래픽 연산을 제2 GPU에 할당한다. 제2 GPU는 메모리 콘트롤러(204)로부터의 정적 데이터 아이템의 제2 카피를 요청하고(490), 정적 메모리 풀(202)로부터 판독된 정적 데이터 아이템의 제2 카피를 메모리 콘트롤러(204)로부터 수신한다(492). 제2 GPU는 정적 데이터 아이템의 제2 카피를 사용하여 그래픽 연산을 수행하고, 복수의 게이밍 세션들 중 제2 게이밍 세션과 연관된 그래픽 연산의 제2 결과를 로컬적으로 저장한다.
[0083] 일부 구현들에서, 복수의 온라인 게이밍 세션들 중 제3 온라인 게이밍 세션에 대해, CPU들은 그래픽 연산을 제3 GPU에 할당한다. 제3 GPU는, 제1 GPU가 미리 정의된 시간 기간 내에서 정적 데이터 아이템의 제1 카피를 요청했다고 결정한다. 제3 GPU는 제1 GPU로부터 직접 정적 데이터 아이템의 제1 카피를 획득한다. 일부 구현들에서, 제1 GPU 그 자체는, 메모리 콘트롤러로부터 제1 카피를 아직 수신하지 않았으며, 제3 GPU는, 제1 GPU가 제1 카피를 수신한 이후 제1 GPU로부터 제1 카피를 획득하도록 대기한다. 다른 방식으로 나타내면, 제1 및 제3 GPU들은 정적 데이터 아이템의 카피에 대해 그들의 요청들을 통합한다.
[0084] 일부 구현들에서, 복수의 게이밍 세션들 각각은 우선순위와 연관되며, 제1 및 제2 GPU들은 제1 및 제2 게이밍 세션들의 우선순위들에 따라 정적 메모리 풀(202)로부터 판독된 정적 데이터 아이템의 카피를 메모리 콘트롤러로부터 수신한다. 예컨대, 제1 게이밍 세션은 제2 게이밍 세션보다 높은 우선순위를 갖는다. 제2 GPU가 제2 카피를 요청한 시간과 동시에 또는 그 시간 이후 임계 지속기간 내에서 제1 GPU가 제1 카피를 요청할 경우, 제1 GPU가 메모리 콘트롤러(204)로부터 제1 카피를 수신할 때까지, 제2 GPU는 제2 카피를 수신하는 것이 중단된다.
서버 시스템, 클라이언트 디바이스들, 게임 콘트롤러 및 미디어 디바이스들
[0085] 도 5a는 일부 구현들에 따른, 서버 시스템(114)을 예시한 블록 다이어그램이다. 도 5b는 일부 구현들에 따른, 서버(500)에 저장된 데이터를 예시한 블록 다이어그램이다. 서버 시스템(114)은 통상적으로, (종종 칩셋으로 지칭되는) 하나 이상의 프로세싱 유닛들(예컨대, CPU(들)(502), GPU(들)(140) 및 인코더(162)), 하나 이상의 네트워크 인터페이스들(504), 메모리(506), 및 이들 컴포넌트들을 상호연결시키기 위한 하나 이상의 통신 버스들(508)을 포함한다. 서버 시스템(114)은 선택적으로, 사용자 입력을 용이하게 하는 하나 이상의 입력 디바이스들(510), 이를테면 키보드, 마우스, 음성-커맨드 입력 유닛 또는 마이크로폰, 터치 스크린 디스플레이, 터치-감응형 입력 패드, 제스처 캡처 카메라, 또는 다른 입력 버튼들 또는 제어부들을 포함할 수 있다. 더욱이, 서버 시스템(114)은 키보드를 보완하거나 또는 대체하기 위해 마이크로폰 및 음성 인식 또는 카메라 및 제스처 인식을 사용할 수 있다. 일부 구현들에서, 서버 시스템(114)은 선택적으로, 예컨대, 전자 디바이스 상에 인쇄된 그래픽 시리즈 코드들의 이미지들을 캡처하기 위한 하나 이상의 카메라들, 스캐너들, 또는 포토 센서 유닛들을 포함한다. 서버 시스템(114)은 또한, 사용자 인터페이스들의 제시를 가능하게 하고 콘텐츠를 디스플레이하며, 하나 이상의 스피커들 및/또는 하나 이상의 시각적 디스플레이들을 포함하는 하나 이상의 출력 디바이스들(512)을 포함할 수 있다.
[0086] 메모리(506)는 고속 랜덤 액세스 메모리, 이를테면 DRAM, SRAM, DDR RAM, 또는 다른 랜덤 액세스 솔리드 스테이트 메모리 디바이스들을 포함하고; 그리고 선택적으로는, 비-휘발성 메모리, 이를테면 하나 이상의 자기 디스크 저장 디바이스들, 하나 이상의 광 디스크 저장 디바이스들, 하나 이상의 플래시 메모리 디바이스들, 또는 하나 이상의 다른 비-휘발성 솔리드 스테이트 저장 디바이스들을 포함한다. 메모리(506)는 선택적으로, 하나 이상의 프로세싱 유닛들로부터 원격으로 위치된 하나 이상의 저장 디바이스들을 포함한다. 메모리(506) 또는 대안적으로는 메모리(506) 내의 비-휘발성 메모리는 비-일시적인 컴퓨터 판독가능 저장 매체를 포함한다. 일부 구현들에서, 메모리(506)는 메인 동적 메모리(144), 정적 메모리 풀(202) 및 셰이더 캐시(318) 모두 또는 이들의 서브세트를 포함한다. 일부 구현들에서, 메모리(506) 또는 메모리(506)의 비-일시적인 컴퓨터 판독가능 저장 매체는 다음의 프로그램들, 모듈들, 및 데이터 구조들, 또는 이들의 서브세트 또는 슈퍼세트를 저장한다:
● 다양한 기본적인 시스템 서비스들을 핸들링하고 하드웨어 종속 태스크들을 수행하기 위한 절차들을 포함하는 운영 체제(516);
● 하나 이상의 네트워크 인터페이스들(504)(유선 또는 무선) 및 하나 이상의 통신 네트워크들(112), 이를테면 인터넷, 다른 광역 네트워크들, 로컬 영역 네트워크들, 대도시 영역 네트워크들 등을 통해 서버(500)(예컨대, 게임 서버(118))를 다른 디바이스들(예컨대, 서버 시스템(114) 내의 다른 서버들, 클라이언트 디바이스(102 및/또는 (104), 및 미디어 디바이스(106))에 연결시키기 위한 네트워크 통신 모듈(518);
● 클라이언트 디바이스(102 및/또는 104)에서의 정보의 제시를 가능하게 하기 위한 사용자 인터페이스 모듈(520)(예컨대, 애플리케이션(들), 위젯들, 웹사이트들 및 그의 웹 페이지들, 및/또는 게임들, 오디오 및/또는 비디오 콘텐츠, 텍스트 등을 제시하기 위한 그래픽 사용자 인터페이스);
● 미디어 디바이스(들)(106)와 연관된 디바이스 프로비저닝(provisioning), 디바이스 제어, 및 사용자 계정 관리를 위한 서버-측 기능들을 제공하도록 실행되는 미디어 디바이스 모듈(522)(선택적);
● 클라이언트 디바이스(102 및/또는 104) 및 미디어 디바이스(106) 중 임의의 디바이스의 위치 정보에 기반하여 클라이언트 디바이스(102 및/또는 104)의 위치를 결정하기 위한 위치 결정 모듈(524);
● 게임 세션들을 셋업하는 것, 세션 상태 데이터 및 다른 게임-관련 데이터를 저장하는 것, 클라이언트 디바이스(102)로부터의 게임플레이 입력들을 프로세싱하는 것, 및 게임플레이 입력들에 대한 응답으로 게임플레이 출력들(예컨대, 이미지 프레임들의 시퀀스들)을 렌더링하는 것을 포함하여(그러나 이에 제한되지 않음), 하나 이상의 게이밍 타이틀들과 연관된 서버-측 기능들을 제공하기 위한 서버-측 게임 모듈(526);
● 미디어 스트리밍 사이트를 호스팅하고, 온라인 게이밍 세션과 연관된 동시적인 보조 또는 보충 미디어 스트림들을 수신하며, 그리고 동일한 클라이언트 디바이스(104) 또는 별개의 클라이언트 디바이스(102)의 게임 애플리케이션들(629) 상에서 실행되고 있는 온라인 게이밍 세션과의 동시적인 디스플레이를 위해 동시적인 미디어 스트림들을 클라이언트 디바이스(104)에 제공하기 위한 미디어 스트리밍 서버 모듈(538);
● 클라이언트 디바이스(102/104)에 대한 연결의 네트워크 대역폭을 평가하는 것 및 클라이언트 디바이스(102/104)가 게임을 플레이하기 위해 필요한 모듈 또는 애플리케이션을 갖는지 여부를 평가하는 것을 포함하여(그러나 이에 제한되지 않음), 클라이언트 디바이스(102 및/또는 104)의 디바이스 및 네트워크 능력들을 평가하기 위한 디바이스/네트워크 평가 모듈(540);
● 데이터(예컨대, 게임 콘트롤러 구성들(556), 소프트웨어 업데이트들 등)를 클라이언트 디바이스들(102/104)에 제공하기 위한 데이터 송신 모듈(542); 및
● 서버 시스템 데이터(544), 서버 시스템 데이터(544)는 다음을 포함한다:
○ 일반적인 디바이스 세팅들(예컨대, 서비스 티어, 디바이스 모델, 저장 용량, 프로세싱 능력들, 통신 능력들 등)을 포함하는, 클라이언트 디바이스들(102 및 104)과 연관된 정보를 저장하기 위한 클라이언트 디바이스 세팅들(552);
○ 계정 액세스 정보 및 디바이스 세팅들(예컨대, 서비스 티어, 디바이스 모델, 저장 용량, 프로세싱 능력들, 통신 능력들 등)에 대한 정보 중 하나 이상을 포함하는, 미디어 디바이스 모듈(522)의 사용자 계정들과 연관된 정보를 저장하기 위한 미디어 디바이스 세팅들(554)(선택적);
○ 클라이언트 디바이스(102), 리뷰어 클라이언트 디바이스(104) 및 미디어 디바이스(106) 중 임의의 디바이스의 존재, 근접도 또는 위치와 연관된 정보를 포함하는 위치/근접도 데이터(556);
○ 다양한 게이밍 타이틀들에 대한 콘트롤러 구성들을 저장하기 위한 게임 콘트롤러 구성들(558); 및
○ 예컨대, 사용자 계정 정보(예컨대, 식별 및 패스워드들), 멤버쉽 타입, 선호도, 및 활동 이력을 포함하는, 서버 시스템(114) 상에서 호스팅되는 하나 이상의 게이밍 타이틀들(예컨대, 도 6의 게임 애플리케이션(629))의 각각의 게이밍 타이틀의 사용자 계정들과 연관된 정보를 저장하기 위한 사용자 정보(558);
○ 예컨대, 제1 게임 세션에 대한 데이터(562) 및 제2 게임 세션에 대한 데이터(564)를 포함하는, 게임 세션들과 연관된 데이터를 저장하기 위한 게임 세션 데이터(560) - 각각의 게임 세션에 대한 세션 데이터(560)는 프레임 레이트, 렌더링 사양, 정상 레이턴시 요건, GPU 할당의 정보, 인코더 할당의 정보, 관련된 세션들의 식별들, 최신 상태 정보, 셰이더 파이프라인 식별, 개개의 게임 세션과 연관된 하나 이상의 이미지 프레임들의 텍스처 페이지들(308A), 버텍스 페이지들(308B), 상수 페이지들(308C), 및 프레임 데이터(308D)를 포함함(그러나 이에 제한되지 않음) -;
○ 복수의 온라인 게이밍 세션들에 의해 공유되는 데이터를 저장하기 위한 정적 데이터 아이템들(568) - 정적 데이터 아이템들(562)은, 상이한 성능 기준들을 만족시키기 위해 사용 통계들에 기반하여 최적화된, 텍스처 오브젝트들, 버텍스 데이터 버퍼 오브젝트, 상수 데이터 오브젝트, 및 컴파일링된 셰이더들의 시퀀스 중 하나 이상을 포함함(그러나 이에 제한되지 않음) -;
○ 그래픽 파이프라인 프로세스에서의 실행을 위해 컴파일링되고 준비되었던 셰이더들을 저장하기 위한 컴파일링된 셰이더들의 시퀀스들(570) - 컴파일링된 셰이더들의 시퀀스들은, 디폴트로 게이밍 콘텐츠를 렌더링하기 위해 사용되는 컴파일링된 셰이더들의 디폴트 시퀀스 및 상이한 성능 기준들을 만족시키기 위해 사용 통계들에 기반하여 최적화된 컴파일링된 셰이더들의 다수의 시퀀스들을 포함함(그러나 이에 제한되지 않음) -; 및
○ 최적화된 컴파일링된 셰이더들의 시퀀스들과 연관되어 저장된 성능 기준들(572) 및 사용 통계들(574) - 성능 기준들(572) 각각은 복수의 온라인 게이밍 세션들을 실행하는 과정 동안, 컴파일링된 셰이더들의 시퀀스의 총 전력 소비, 코드 사이즈, 평균 레이턴시, 총 캐시 사용량, 및 총 메모리 사용량 중 하나 이상에 대응하고, 사용 통계들(574)은 복수의 온라인 게이밍 세션들 각각의 실행을 특정화함 -.
[0087] 일부 구현들에서, 서버-측 게임 모듈(526)은 다음의 프로그램들, 모듈들, 또는 이들의 서브세트 또는 슈퍼세트를 포함한다:
● 온라인 게이밍 세션들을 인가하는 것, 세션들의 서브세트를 실행하도록 GPU를 할당하는 것, 할당된 GPU에게 대응하는 세션들을 실행하도록 명령하는 것, 및 할당된 GPU에 의해 렌더링된 이미지 프레임들을 인코딩하는 것을 포함하여, 하나 이상의 게이밍 타이틀들에 대응하는 온라인 게이밍 세션들을 실행하기 위한 게임 애플리케이션(들)(528);
● 특수화된 게임 콘트롤러 디바이스(102B)와 상호작용하고 이를 제어하기 위한, 예컨대 게임 콘트롤러 디바이스(102B)로부터 사용자 요청들 및 입력들을 수신하기 위한 콘트롤러 디바이스 모듈(530);
● 게이밍 타이틀에 대응하는 온라인 게이밍 세션들에 대한 이미지 프레임들을 렌더링하는 그래픽 파이프라인 프로세스의 그래픽 연산들의 순서화된 시퀀스에서 사용되는 셰이더들을 컴파일링하기 위한 셰이더 컴파일러(532);
● 성능 기준에 관해, 컴파일링된 셰이더들의 시퀀스의 성능을 개선시키기 위해 온라인 게이밍 세션들을 실행하는 데 사용되는 컴파일링된 셰이더들의 시퀀스 내의 하나 이상의 셰이더들을 수정하기 위한 셰이더 파이프라인 최적화기(534);
● 디폴트 컴파일링된 셰이더들의 시퀀스 또는 최적화된 컴파일링된 셰이더들의 시퀀스를 사용하여 이미지 프레임들을 렌더링하기 위해 온라인 게이밍 세션들의 실행 동안 GPU들(140)을 제어하기 위한 게임 렌더링 모듈(536).
[0088] 일부 구현들에서, 서버 시스템(114)은, 하나 이상의 통신 버스들(508)을 사용하여 CPU들, GPU들, 메인 동적 메모리(144) 및 정적 메모리 풀(202)에 상호연결된 하나 이상의 메모리 콘트롤러들(204)을 더 포함한다. 하나 이상의 메모리 콘트롤러(204)는, 메인 동적 메모리(144)를 관리하도록 구성된 제1 메모리 콘트롤러(204A) 및 정적 메모리 풀(202)을 관리하도록 구성된 제2 메모리 콘트롤러(204B)를 포함한다. 위에서 나타낸 바와 같이, 엘리먼트들(516 내지 542 및 552 내지 566)은 메인 동적 메모리(144)에 저장되며, 제1 메모리 콘트롤러(204A)를 통해 액세스가능하다. 정적 데이터 아이템들(568)은 정적 메모리 풀(202)에 저장되며, 제2 메모리 콘트롤러(204B)를 통해 액세스가능하다. 컴파일링된 셰이더들(570), 성능 기준들(572) 및 사용 통계들(574)은 선택적으로, 셰이더 캐시(318) 또는 정적 메모리 풀(202)에 함께 저장된다. 선택적으로, 온라인 게이밍 세션들의 특정 세트에 대해 수집되는 사용 통계들(574)은 게임 세션 데이터(562)로서 메인 동적 메모리(144)에 저장된다.
[0089] 위에서 식별된 엘리먼트들 각각은 이전에 언급된 메모리 디바이스들 중 하나 이상에 저장될 수 있으며, 위에서 설명된 기능을 수행하기 위한 명령들의 세트에 대응한다. 위에서 식별된 모듈들 또는 프로그램들(즉, 명령들의 세트들)은 별개의 소프트웨어 프로그램들, 절차들, 모듈들 또는 데이터 구조들로서 구현될 필요는 없으며, 따라서, 이들 모듈들의 다양한 서브세트들은 다양한 구현들에서 조합되거나 또는 그렇지 않으면 재배열될 수 있다. 일부 구현들에서, 메모리(506)는 선택적으로, 위에서 식별된 데이터 구조들 및 모듈들의 서브세트를 저장한다. 더욱이, 메모리(506)는 선택적으로, 위에서 설명되지 않은 부가적인 모듈들 및 데이터 구조들을 저장한다.
[0090] 도 6은 일부 구현들에 따른, 게이밍 환경(100)의 예시적인 클라이언트 디바이스(600)(예컨대, 클라이언트 디바이스(102 또는 104))를 예시한 블록 다이어그램이다. 클라이언트 디바이스(600)의 예들은, 모바일 폰, 태블릿 컴퓨터, 랩톱 컴퓨터, 데스크톱 컴퓨터, 및 웨어러블 개인용 디바이스를 포함한다(그러나 이에 제한되지 않음). 클라이언트 디바이스(600)는 (종종 칩셋으로 지칭되는) 하나 이상의 프로세싱 유닛(CPU)들(602), 하나 이상의 네트워크 인터페이스들(604), 메모리(606), 및 이들 컴포넌트들을 상호연결시키기 위한 하나 이상의 통신 버스들(608)을 포함한다. 클라이언트 디바이스(600)는, 사용자 입력을 용이하게 하는 하나 이상의 입력 디바이스들(610), 이를테면 키보드, 마우스, 보이스-커맨드 입력 유닛 또는 마이크로폰, 터치 스크린 디스플레이, 터치-감응형 입력 패드, 제스처 캡처 카메라, 또는 다른 입력 버튼들 또는 제어들을 포함한다. 더욱이, 일부 클라이언트 디바이스들(600)은 키보드를 보완하거나 또는 대체하기 위해 마이크로폰 및 음성 인식 또는 카메라 및 제스처 인식을 사용한다. 일부 구현들에서, 클라이언트 디바이스(600)는, 예컨대, 전자 디바이스 상에 인쇄된 그래픽 시리즈 코드들의 이미지들을 캡처하기 위한 하나 이상의 카메라들, 스캐너들, 또는 포토 센서 유닛들을 포함한다. 클라이언트 디바이스(600)는 또한, 사용자 인터페이스들의 제시를 가능하게 하고 콘텐츠를 디스플레이하며, 하나 이상의 스피커들 및/또는 하나 이상의 시각적 디스플레이들을 포함하는 하나 이상의 출력 디바이스들(612)을 포함한다. 선택적으로, 클라이언트 디바이스(600)는 클라이언트 디바이스(600)의 위치를 결정하기 위한 위치 검출 디바이스(614), 이를테면 GPS(global positioning satellite) 또는 다른 지오-위치(geo-location) 수신기를 포함한다. 클라이언트 디바이스(600)는 또한, 미디어 디바이스(106) 및/또는 플레이어 클라이언트들(104)의 근접도를 결정하기 위한 근접도 검출 디바이스(615), 예컨대 IR 센서를 포함할 수 있다. 클라이언트 디바이스(600)는 또한, 입력으로서 사용될 수 있는, 클라이언트 디바이스(600)의 모션, 배향, 및 다른 파라미터들을 감지하기 위한 하나 이상의 센서들(613)(예컨대, 가속도계, 자이로스코프 등)을 포함할 수 있다.
[0091] 메모리(606)는 고속 랜덤 액세스 메모리, 이를테면 DRAM, SRAM, DDR RAM, 또는 다른 랜덤 액세스 솔리드 스테이트 메모리 디바이스들을 포함하고; 그리고 선택적으로는, 비-휘발성 메모리, 이를테면 하나 이상의 자기 디스크 저장 디바이스들, 하나 이상의 광 디스크 저장 디바이스들, 하나 이상의 플래시 메모리 디바이스들, 또는 하나 이상의 다른 비-휘발성 솔리드 스테이트 저장 디바이스들을 포함한다. 메모리(606)는 선택적으로, 하나 이상의 프로세싱 유닛들(602)로부터 원격으로 위치된 하나 이상의 저장 디바이스들을 포함한다. 메모리(606) 또는 대안적으로는 메모리(606) 내의 비-휘발성 메모리는 비-일시적인 컴퓨터 판독가능 저장 매체를 포함한다. 일부 구현들에서, 메모리(606) 또는 메모리(606)의 비-일시적인 컴퓨터 판독가능 저장 매체는 다음의 프로그램들, 모듈들, 및 데이터 구조들, 또는 이들의 서브세트 또는 슈퍼세트를 저장한다:
● 다양한 기본적인 시스템 서비스들을 핸들링하고 하드웨어 종속 태스크들을 수행하기 위한 절차들을 포함하는 운영 체제(616);
● 하나 이상의 네트워크 인터페이스들(604)(유선 또는 무선) 및 로컬 네트워크(110) 및 하나 이상의 네트워크들(112), 이를테면 인터넷, 다른 광역 네트워크들, 로컬 영역 네트워크들, 대도시 영역 네트워크들 등을 통해 클라이언트 디바이스(600)를 다른 디바이스들(예컨대, 서버 시스템(114), 미디어 디바이스(106), 및 다른 클라이언트 디바이스(102 또는 104))에 연결시키기 위한 네트워크 통신 모듈(618);
● 하나 이상의 출력 디바이스들(612)(예컨대, 디스플레이들, 스피커들 등)을 통해 클라이언트 디바이스(600)에서 정보의 제시를 가능하게 하기 위한 사용자 인터페이스 모듈(620)(예컨대, 애플리케이션들, 위젯들, 웹사이트들 및 그의 웹 페이지들, 및/또는 게임들, 오디오 및/또는 비디오 콘텐츠, 텍스트 등을 제시하기 위한 그래픽 사용자 인터페이스);
● 하나 이상의 입력 디바이스들(610) 중 하나로부터 하나 이상의 사용자 입력들 또는 상호작용들을 검출하고 검출된 입력 또는 상호작용을 해석하기 위한 입력 프로세싱 모듈(622);
● 세션(116)에 참가하기 위한 웹 인터페이스를 포함하여, 웹사이트들 및 그의 웹 페이지들을 내비게이팅, (예컨대, HTTP를 통해) 요청, 및 디스플레이하기 위한 웹 브라우저 모듈(624);
● 미디어 디바이스(106)와 연관된 사용자 계정에 로깅하는 것, 사용자 계정과 연관되면 미디어 디바이스(106)를 제어하는 것, 및 미디어 디바이스(106)와 연관된 세팅들 및 데이터를 편집 및 리뷰하는 것을 포함하여, 미디어 디바이스(106)와 상호작용하기 위한 미디어 디바이스 애플리케이션(626);
● 게임 세션들을 셋업하는 것, 세션 상태 데이터 및 다른 게임-관련 데이터를 로컬적으로 저장하는 것, 입력 디바이스(610)로부터 게임플레이 입력들을 수신하는 것, 및 게임플레이 입력들에 대한 응답으로 게임플레이 출력들(예컨대, 이미지 프레임들의 시퀀스들)을 제공하는 것을 포함하여(그러나 이에 제한되지 않음), 하나 이상의 게이밍 타이틀들과 연관된 클라이언트-측 기능들을 제공하기 위한 클라이언트-측 게임 모듈(628) - 일부 구현들에서, 클라이언트-측 게임 모듈(628)은 하나 이상의 게이밍 타이틀들에 대응하는 하나 이상의 게임 애플리케이션들(629)을 더 포함함 -;
● 서버 시스템(114) 및 다른 콘텐츠 호스트들 및 제공자들로부터 데이터(예컨대, 게임 콘트롤러 구성들(640), 클라이언트-측 게임 모듈(628) 및 다른 애플리케이션들, 메모리(606) 내의 모듈들 및 애플리케이션들 및 데이터에 대한 업데이트들)를 다운로딩하기 위한 데이터 다운로드 모듈(630);
● 게임 애플리케이션(629) 및 다른 애플리케이션들/모듈들과 연관된 데이터를 적어도 저장하는 클라이언트 데이터(632), 클라이언트 데이터(632)는 다음을 포함한다:
○ 일반적인 디바이스 세팅들(예컨대, 서비스 티어, 디바이스 모델, 저장 용량, 프로세싱 능력들, 통신 능력들 등)을 포함하는, 클라이언트 디바이스(600) 그 자체와 연관된 정보를 저장하기 위한 클라이언트 디바이스 세팅들(634);
○ 계정 액세스 정보, 및 디바이스 세팅들(예컨대, 서비스 티어, 디바이스 모델, 저장 용량, 프로세싱 능력들, 통신 능력들 등)에 대한 정보 중 하나 이상을 포함하는, 미디어 디바이스 애플리케이션(626)의 사용자 계정들과 연관된 정보를 저장하기 위한 미디어 디바이스 세팅들(636);
○ 계정 액세스 정보, 게임-내 사용자 선호도들, 게임플레이 이력 데이터, 및 다른 플레이어들에 관한 정보 중 하나 이상을 포함하는, 게임 애플리케이션(들)의 사용자 계정들과 연관된 정보를 저장하기 위한 게임 애플리케이션(들) 세팅들(638);
○ 게임 애플리케이션(들)(628)에 대한 클라이언트-측 게임 모듈(628)의 구성들(예컨대, 게임 콘트롤러 구성들(456)(도 4)로부터의 수신된 구성들)과 연관된 정보를 저장하기 위한 게임 콘트롤러 구성(들)(640);
○ 클라이언트 디바이스(102 및 104) 및 미디어 디바이스(106) 중 임의의 디바이스의 존재, 근접도 또는 위치와 연관된 정보를 포함하는 위치 데이터(642); 및
○ 상이한 게이밍 타이틀들과 연관되어 클라이언트 디바이스(600) 상에서 실행되는 온라인 게이밍 세션들과 연관된 정보, 예컨대 온라인 게이밍 세션들 각각과 연관된 하나 이상의 이미지 프레임들의 최신 상태 정보, 텍스처 페이지들, 버텍스 페이지들, 상수 페이지들, 및 프레임 데이터를 포함하는 로컬 게임 세션 데이터(644).
[0092] 도 6에 도시되지 않은 일부 구현들에서, 클라이언트-측 게임 모듈(628)은 메뉴 모드에서 클라이언트 디바이스(102)와 미디어 디바이스(106) 사이에서 메시지들(예컨대, 셋업 커맨드들)을 송신하기 위한 커맨드 모듈, 게임플레이 모드에서 클라이언트 디바이스(102)와 서버 시스템(114) 사이에서(예컨대, 미디어 스트리밍 서버(120)에) 게임플레이 커맨드들을 송신하기 위한 스트리밍 모듈, 및 게이밍 애플리케이션에 대한 게임플레이 입력 인터페이스를 제공하기 위한 콘트롤러 모듈을 포함한다. 일부 구현들에서, 클라이언트-측 게임 모듈(628)은 메모리(606) 내의 미디어 디바이스 애플리케이션(626) 또는 다른 애플리케이션의 일부(예컨대, 서브-모듈)이다. 일부 구현들에서, 클라이언트-측 게임 모듈(628)은 운영 체제(616)의 일부이다. 일부 구현들에서, 클라이언트-측 게임 모듈(628)은 별개의 모듈 또는 애플리케이션이다.
[0093] 클라이언트 디바이스(102)의 일부 구현들에서, 미디어 디바이스 애플리케이션(626)(및 대응적으로는 미디어 디바이스 세팅들(636)) 및 게임 애플리케이션(629)(및 대응적으로는 게임 애플리케이션 세팅들(638))은 선택적이다. 클라이언트 디바이스(102)가 참가하도록 초대되는 특정한 게임에 의존하여, 미디어 디바이스 애플리케이션(626) 및 게임 애플리케이션(629)은 플레이하도록 요구되지 않는다. 이들 애플리케이션들 중 임의의 애플리케이션이 게임을 플레이하기 위해 필요하고(예컨대, 게임이 미디어 디바이스 애플리케이션(626) 내에서 클라이언트-측 게임 모듈(628)을 사용하고) 애플리케이션이 메모리(606)에 존재하지 않으면, 클라이언트 디바이스(102)는 애플리케이션을 다운로딩하도록 프롬프트될 수 있다.
[0094] 일부 구현들에서, 클라이언트 디바이스(102)는 게임 콘트롤러 디바이스를 포함한다. 게임 콘트롤러 디바이스는 사용자 입력을 용이하게 하는 하나 이상의 입력 디바이스(들)(610), 이를테면 마이크로폰(또는 음성-커맨드 입력 유닛), 버튼들, 방향성 패드(들), 및 조이스틱(들)을 포함한다. 일부 구현들에서, 게임 콘트롤러(102)는 제스처 인식 특징부들을 더 포함한다. 게임 콘트롤러(102)는 또한, 스피커(들)(320), LED(들), 및/또는 선택적으로는 디스플레이를 포함하는, 오디오 출력 및/또는 시각적 출력을 용이하게 하는 하나 이상의 출력 디바이스(들)를 포함한다.
[0095] 위에서 식별된 엘리먼트들 각각은 이전에 언급된 메모리 디바이스들 중 하나 이상에 저장될 수 있으며, 위에서 설명된 기능을 수행하기 위한 명령들의 세트에 대응한다. 위에서 식별된 모듈들 또는 프로그램들(즉, 명령들의 세트들)은 별개의 소프트웨어 프로그램들, 절차들, 모듈들 또는 데이터 구조들로서 구현될 필요는 없으며, 따라서, 이들 모듈들의 다양한 서브세트들은 다양한 구현들에서 조합되거나 또는 그렇지 않으면 재배열될 수 있다. 일부 구현들에서, 메모리(606)는 선택적으로, 위에서 식별된 데이터 구조들 및 모듈들의 서브세트를 저장한다. 더욱이, 메모리(606)는 선택적으로, 위에서 설명되지 않은 부가적인 모듈들 및 데이터 구조들을 저장한다.
[0096] 도 7은 일부 구현들에 따른, 게이밍 환경(100)의 예시적인 미디어 디바이스(106)를 예시한 블록 다이어그램이다. 미디어 디바이스(106)는 통상적으로, (종종 칩셋으로 지칭되는) 하나 이상의 프로세싱 유닛(CPU)들(702), 하나 이상의 네트워크 인터페이스들(704), 메모리(706), 및 이들 컴포넌트들을 상호연결시키기 위한 하나 이상의 통신 버스들(708)을 포함한다. 선택적으로, 미디어 디바이스(106)는 클라이언트 디바이스(102 또는 104)의 근접도를 결정하기 위한 근접도/위치 검출 유닛(710), 이를테면 IR 센서를 포함한다.
[0097] 추가로, 일부 구현들에서, 미디어 디바이스(106)는 하나 이상의 통신 네트워크들이 다른 디바이스들과(예컨대, 클라이언트 디바이스(102)와) 통신할 수 있게 하고 미디어 디바이스(106)가 다른 디바이스들과 통신하게 허용하는 라디오들을 포함한다. 일부 구현들에서, 라디오들은, 본 출원의 출원일까지 아직 개발되지 않은 통신 프로토콜들을 포함하여, 다양한 커스텀 또는 표준 무선 프로토콜들(예컨대, IEEE 802.15.4, Wi-Fi, ZigBee, 6LoWPAN, Thread, Z-Wave, Bluetooth Smart, ISA100.5A, WirelessHART, MiWi, Whispernet, Bluetooth low energy 등), 커스텀 또는 표준 유선 프로토콜들(예컨대, 이더넷, HomePlug 등), 및/또는 다른 적합한 통신 프로토콜 중 임의의 것을 사용하여 데이터 통신들이 가능하다.
[0098] 메모리(706)는 고속 랜덤 액세스 메모리, 이를테면 DRAM, SRAM, DDR RAM, 또는 다른 랜덤 액세스 솔리드 스테이트 메모리 디바이스들을 포함하고; 그리고 선택적으로는, 비-휘발성 메모리, 이를테면 하나 이상의 자기 디스크 저장 디바이스들, 하나 이상의 광 디스크 저장 디바이스들, 하나 이상의 플래시 메모리 디바이스들, 또는 하나 이상의 다른 비-휘발성 솔리드 스테이트 저장 디바이스들을 포함한다. 메모리(706)는 선택적으로, 하나 이상의 프로세싱 유닛들(702)로부터 원격으로 위치된 하나 이상의 저장 디바이스들을 포함한다. 메모리(706) 또는 대안적으로는 메모리(706) 내의 비-휘발성 메모리는 비-일시적인 컴퓨터 판독가능 저장 매체를 포함한다. 일부 구현들에서, 메모리(706) 또는 메모리(706)의 비-일시적인 컴퓨터 판독가능 저장 매체는 다음의 프로그램들, 모듈들, 및 데이터 구조들, 또는 이들의 서브세트 또는 슈퍼세트를 저장한다:
● 다양한 기본적인 시스템 서비스들을 핸들링하고 하드웨어 종속 태스크들을 수행하기 위한 절차들을 포함하는 운영 체제(716);
● 하나 이상의 네트워크 인터페이스들(704)(유선 또는 무선) 및 하나 이상의 네트워크들(112), 이를테면 인터넷, 다른 광역 네트워크들, 로컬 영역 네트워크들, 대도시 영역 네트워크들, 케이블 텔레비전 시스템들, 위성 텔레비전 시스템들, IPTV 시스템들 등을 통해 미디어 디바이스(106)를 다른 컴퓨터들 또는 시스템들(예컨대, 서버 시스템(114), 및 다른 클라이언트 디바이스(102))에 연결시키기 위한 네트워크 통신 모듈(718);
● 하나 이상의 콘텐츠 소스들(예컨대, 게임 세션(116)으로부터의 출력을 위한 서버 시스템(114))로부터 수신된 콘텐츠 신호들을 디코딩하고, 디코딩된 신호들 내의 콘텐츠를 미디어 디바이스(106)에 커플링된 출력 디바이스(108)에 출력하기 위한 콘텐츠 디코딩 모듈(720);
● 근접도 검출 유닛(710)에 의해 검출되거나 서버 시스템(114)에 의해 제공된 근접도 관련 정보에 기반하여 클라이언트 디바이스(102 및/또는 104)의 근접도를 결정하기 위한 근접도 결정 모듈(722);
● 미디어 디스플레이를 제어하기 위한 미디어 디스플레이 모듈(724); 및
● 미디어 디바이스(106) 상의 모든 게이밍 컴포넌트들의 수명을 제어하고, 게임 콘트롤러(102)로부터 메시지들(예컨대, 커맨드들)을 수신하며, 게임 콘트롤러 입력들을 서버 시스템(114)으로 중계하기 위한 게이밍 애플리케이션들(726);
● 사용자 콘텐츠(예컨대, 프로파일, 아바타, 구매된 게임들, 게임 카탈로그, 친구들, 메시징) 및 디스플레이를 위한 최적화된 이미지들에 액세스하고, 게임플레이 동안 클라이언트 디바이스(102)로부터 입력들을 수신하기 위한 게이밍 사용자 인터페이스 모듈(728);
● 게이밍 애플리케이션(726)과 게이밍 사용자 인터페이스 모듈(728) 사이의 통신들을 인터페이싱하고, 게임 기동 동안 서버 시스템(114)과의 세션 페어링 요청을 개시하기 위한 인터페이스 제어 모듈(730);
● 서버 시스템(114) 및 (존재한다면) 인증 시스템과의 통신들을 위한 서버 인터페이스 모듈(732) - 서버 인터페이스 모듈(732)은 다음을 포함한다:
○ 게임 콘트롤러의 링크된 사용자를 인증하기 위해 인증 시스템과 통신하기 위한 인증 서브-모듈(734);
○ 서버 시스템(114)으로부터 게이밍 세션 정보(예컨대, 세션 id, 게임 서버 프로비저닝 IP 어드레스, 포트 등)를 수신하고, 이러한 정보를 제공하여 인터페이스 제어 모듈(730)에 대한 콜백(callback)을 인보크(invoke)하기 위한 세션 서브-모듈(736);
○ 게임플레이 동안 실시간으로, 서버 시스템(114)의 미디어 스트리밍 서버(120)로부터 송신된 게이밍 스트림들을 수신 및 디스플레이하기 위한 스트리밍 서브-모듈(738) -;
● 적어도 데이터를 저장하는 미디어 디바이스 데이터(740), 데이터는 다음을 포함한다:
○ 계정 액세스 정보, 및 디바이스 세팅들(예컨대, 서비스 티어, 디바이스 모델, 저장 용량, 프로세싱 능력들, 통신 능력들 등)에 대한 정보 중 하나 이상을 포함하는, 미디어 디바이스 애플리케이션의 사용자 계정들과 연관된 정보를 저장하기 위한 미디어 디바이스 세팅들(742);
○ 클라이언트 디바이스(102 및/또는 104) 및 미디어 디바이스(106) 중 임의의 디바이스의 존재, 근접도 또는 위치와 연관된 정보를 포함하는 위치 데이터(744); 및
○ 상이한 게이밍 타이틀들과 연관되어 클라이언트 디바이스(600) 상에서 실행되는 온라인 게이밍 세션들과 연관된 정보, 예컨대 온라인 게이밍 세션들 각각과 연관된 하나 이상의 이미지 프레임들의 최신 상태 정보, 텍스처 페이지들, 버텍스 페이지들, 상수 페이지들, 및 프레임 데이터를 포함하는 로컬 게임 세션 데이터(746).
[0099] 위에서 식별된 엘리먼트들 각각은 이전에 언급된 메모리 디바이스들 중 하나 이상에 저장될 수 있으며, 위에서 설명된 기능을 수행하기 위한 명령들의 세트에 대응한다. 위에서 식별된 모듈들 또는 프로그램들(즉, 명령들의 세트들)은 별개의 소프트웨어 프로그램들, 절차들, 모듈들 또는 데이터 구조들로서 구현될 필요는 없으며, 따라서, 이들 모듈들의 다양한 서브세트들은 다양한 구현들에서 조합되거나 또는 그렇지 않으면 재배열될 수 있다. 일부 구현들에서, 메모리(706)는 선택적으로, 위에서 식별된 데이터 구조들 및 모듈들의 서브세트를 저장한다. 더욱이, 메모리(706)는 선택적으로, 위에서 설명되지 않은 부가적인 모듈들 및 데이터 구조들을 저장한다.
정적 메모리 풀
[00100] 도 8a 및 도 8b는 일부 구현들에 따른, 하나 이상의 게이밍 타이틀들을 호스팅하는 서버 시스템의 저장 능력을 관리하기 위한 예시적인 방법(800)을 예시한 흐름도이다. 방법(800)은 선택적으로, 컴퓨터 메모리 또는 비-일시적인 컴퓨터 판독가능 저장 매체(예컨대, 도 5a의 서버-측 게임 모듈(526))에 저장되고 서버 시스템(114)의 하나 이상의 프로세서들(예컨대, 게임 서버(118)의 CPU들 및 GPU들)에 의해 실행되는 명령들에 의해 관리된다. 컴퓨터 판독가능 저장 매체는 자기 또는 광학 디스크 저장 디바이스, 솔리드 스테이트 저장 디바이스들, 이를테면 플래시 메모리, 또는 다른 비-휘발성 메모리 디바이스 또는 디바이스들을 포함할 수 있다. 컴퓨터 판독가능 저장 매체 상에 저장된 명령들은 소스 코드, 어셈블리 언어 코드, 오브젝트 코드, 또는 하나 이상의 프로세서들에 의해 해석되는 다른 명령 포맷 중 하나 이상을 포함할 수 있다. 방법(800)의 일부 동작들은 조합될 수 있고 그리고/또는 일부 동작들의 순서는 변화될 수 있다.
[00101] 서버 시스템(114)은, 하나 이상의 CPU들(138), 복수의 GPU들(140), 프로그램 실행 동안 CPU들 및/또는 GPU들에 의한 사용을 위한 프로그램들 및 데이터를 저장하는 메인 동적 메모리(144), 비-휘발성 메모리에 저장된 정적 메모리 풀(202), 및 정적 메모리 풀을 관리하도록 구성된 메모리 콘트롤러(204)를 포함한다. GPU들(140) 각각은 로컬 캐시를 포함하며, 메모리 콘트롤러(204)를 통해 정적 메모리 풀(202)에 액세스하도록 구성된다. 일부 구현들에서, 정적 메모리 풀(202)은 서버 시스템(114)의 하나 이상의 CPU들(138) 및 복수의 GPU들(140)에 근접하게 배치되고 그들에 의해 공유된다. CPU들(138) 및 GPU들(140)은 데이터 버스를 통해 정적 메모리 풀(202)에 액세스한다. 추가로, 일부 구현들에서, 메인 동적 메모리(144)는 서버 시스템의 하나 이상의 CPU들 및 복수의 GPU들에 근접하게 배치되고 그들에 의해 공유된다. CPU들(138) 및 GPU들(140)은 데이터 버스를 통해 메인 동적 메모리(144)에 액세스한다. 일부 구현들에서, 정적 메모리 풀(202)은 서버 시스템(114)의 하나 이상의 CPU들 및 복수의 GPU들 각각으로부터 일정 거리를 갖고, 그 거리는 미리 결정된 거리 임계치보다 작다(예컨대, < 3미터). 그렇긴 하지만, 정적 메모리 풀(202)은, 서버 시스템(114)의 하나 이상의 CPU들 및 복수의 GPU들이 배치되는 서버 랙에 물리적으로 위치된다.
[00102] 일부 구현들에서, 메모리 콘트롤러(204)는 메인 동적 메모리 및 정적 메모리 풀 둘 모두를 관리하도록 구성된다. 대안적으로, 일부 구현들에서, 메모리 콘트롤러(204)는 제1 메모리 콘트롤러를 포함하며, 서버 시스템은, 제1 메모리 콘트롤러와는 별개이고 메인 동적 메모리를 관리하도록 구성된 제2 메모리 콘트롤러를 더 포함한다.
[00103] 서버 시스템(114)은, 하나 이상의 CPU들(138) 상에서 게이밍 타이틀에 대한 복수의 게이밍 세션들을 병렬로 실행한다(802). 복수의 게이밍 세션들 각각은 정적 데이터 아이템들과 연관되며, 정적 데이터 아이템을 사용하여 개개의 GPU(140)에 의해 실행가능한 그래픽 연산을 요구하고, 정적 데이터 아이템은 정적 메모리 풀(202)에 저장된다. 일부 구현들에서, 그래픽 연산은 OpenGL 그래픽 렌더링 파이프라인의 일부이며, 버텍스 프로세싱, 테셀레이션, 지오메트리 프로세싱, 프리미티브 어셈블리, 래스터화, 프래그먼트화 및 프리-샘플링 중 하나를 포함한다. 일부 구현들에서, 정적 데이터 아이템은 게임 개발 스테이지 동안 게이밍 타이틀의 개발자에 의해 미리 정의된다. 미리 정의된 정적 데이터 아이템은, 게이밍 타이틀이 초기에 서버 시스템 상으로 로딩될 경우 정적 메모리 풀(202)로 로딩된다. 일부 구현들에서, 정적 데이터 아이템은 OpenGL 렌더링 파이프라인에서 사용되는 하나 이상의 표준 파라미터들을 포함한다. 정적 데이터 아이템의 예들은, OpenGL 라이브러리로부터 오리지널로(originally) 로딩되는 표준 텍스처들, 버텍스, 지오메트리들 및 상수들을 포함한다(그러나 이에 제한되지 않음).
[00104] 하나 이상의 CPU들(138) 상에서 실행되는 복수의 게이밍 세션들 중 제1 게이밍 세션에 대해(804), CPU들(138)은 그래픽 연산을 제1 GPU에 할당한다(806). 제1 GPU는 메모리 콘트롤러(204)로부터의 정적 데이터 아이템의 제1 카피를 요청하고(808), 정적 메모리 풀(202)로부터 판독된 정적 데이터 아이템의 제1 카피를 메모리 콘트롤러로부터 수신한다(810). 일부 구현들에서, 정적 메모리 풀로부터 판독된 정적 데이터 아이템의 제1 카피를 메모리 콘트롤러로부터 수신한 이후, 제1 GPU는 제1 카피를 로컬 캐시 또는 메인 동적 메모리에 임시로 저장한다. 이어서, 제1 GPU는 정적 데이터 아이템의 제1 카피를 사용하여 그래픽 연산을 수행하고(812), 복수의 게이밍 세션들 중 제1 게이밍 세션과 연관된 그래픽 연산의 제1 결과를 로컬적으로 저장한다(814). 일부 구현들에서, 제1 GPU는 복수의 GPU 코어들, 및 복수의 GPU 코어들에 의해 공유되는 공통 캐시를 가지며, 각각의 GPU 코어는 개개의 GPU 코어에 의해 사용되는 명령들 및 데이터를 저장하는 개개의 캐시 메모리를 포함한다.
[00105] 일부 구현들에서, 서버 시스템(114)은 그래픽 연산을 수행하기 위하여 복수의 GPU들에 의해 사용되는 하나 이상의 컴파일링된 셰이더들을 저장하는 셰이더 캐시를 포함한다. 추가로, 일부 구현들에서, 서버 시스템(114)은 복수의 게이밍 세션들 중 제1 게이밍 세션에 대한 성능 기준을 식별하고, 성능 기준에 따라 복수의 컴파일링된 셰이더들 중 하나를 선택한다. 복수의 컴파일링된 셰이더들 중 선택된 하나는 그래픽 연산을 수행하기 위하여 제1 GPU에 의해 사용된다.
[00106] 유사하게, 하나 이상의 CPU들 상에서 실행되는 복수의 게이밍 세션들 중 제2 게이밍 세션에 대해(816), CPU들(138)은 그래픽 연산을 제2 GPU에 할당한다(818). 제2 GPU는 메모리 콘트롤러로부터의 정적 데이터 아이템의 제2 카피를 요청하고(820), 정적 메모리 풀(202)로부터 판독된 정적 데이터 아이템의 제2 카피를 메모리 콘트롤러(204)로부터 수신한다(822). 이어서, 제2 GPU는 정적 데이터 아이템의 제2 카피를 사용하여 그래픽 연산을 수행하고(824), 복수의 게이밍 세션들 중 제2 게이밍 세션과 연관된 그래픽 연산의 제2 결과를 로컬적으로 저장한다.
[00107] 일부 구현들에서, 메인 동적 메모리(144)는 동적 랜덤-액세스 메모리를 포함하며, GPU들의 로컬 캐시 및 하나 이상의 CPU들의 로컬 캐시 각각은 정적 랜덤-액세스 메모리를 포함한다. 정적 메모리 풀은 솔리드 스테이트 드라이브, 플래시 메모리 및 위상-변화 랜덤-액세스 메모리 중 하나를 포함한다. 로컬 캐시에 대한 액세스 레이트는, 정적 메모리 풀에 대한 액세스 레이트보다 빠른 메인 동적 메모리(144)에 대한 액세스 레이트보다 빠르다. 일부 구현들에서, 정적 메모리 풀에 대한 액세스에 의해 야기되는 레이턴시는 개개의 GPU에서의 게이밍 콘텐츠 렌더링 동안 보상된다.
[00108] 일부 구현들에서, 복수의 게이밍 세션들 중 제1 게이밍 세션과 연관된 그래픽 연산의 제1 결과는 개개의 GPU의 로컬 캐시(예컨대, 도 3c의 GPU 캐시(364))에 저장된다. 그래픽 연산은 제1 그래픽 연산이고, 제2 그래픽 연산이 뒤따른다. 제2 그래픽 연산의 실행 동안, 제1 GPU(140)는 로컬 캐시로부터 제1 그래픽 연산의 제1 결과를 획득하고, 제1 그래픽 연산의 제1 결과를 사용하여 제2 그래픽 연산을 수행한다. 선택적으로, 제2 그래픽 연산은 직접적으로 또는 간접적으로 제1 그래픽 연산에 뒤따른다. 일부 구현들에서, 제1 및 제2 그래픽 연산들 둘 모두는, 복수의 게이밍 세션들 중 제1 게이밍 세션에 관여되는 클라이언트 디바이스로부터 수신된 사용자 요청 또는 입력에 대한 응답으로 게이밍 콘텐츠 스트림을 생성하는 그래픽 파이프라인 프로세스(예컨대, OpenGL 렌더링 파이프라인)의 일부이다. 일 예에서, 제1 및 제2 그래픽 연산들 둘 모두는 OpenGL 렌더링 파이프라인에서의 2개의 연속하는 동작들이다. 제1 결과는 OpenGL 렌더링 파이프라인에서 생성된 중간 결과이며, 제1 결과가 제2 그래픽 연산에 의해 사용된 이후 로컬 캐시로부터 제거될 수 있다.
[00109] 대안적으로, 일부 구현들에서, 복수의 게이밍 세션들 중 제1 게이밍 세션과 연관된 그래픽 연산의 제1 결과가 메인 동적 메모리(144)에 저장된다. 그래픽 연산은 제1 그래픽 연산을 포함하고, 제2 그래픽 연산이 뒤따른다. 제2 그래픽 연산의 실행 동안, 제1 GPU(140)는 메인 동적 메모리(144)로부터 그래픽 연산의 제1 결과를 획득하고, 제1 그래픽 연산의 제1 결과를 사용하여, 제1 그래픽 연산에 후속하여 제2 그래픽 연산을 수행한다. 선택적으로, 제1 결과는 동적 데이터(306)(예컨대, 게임 세션 데이터(562))의 일부로서 저장된다.
[00110] 일부 구현들에서, 서버 시스템(114)은 인코더(142)를 더 포함한다. 인코더(142)는 복수의 게이밍 세션들 중 제1 게이밍 세션과 연관된 이미지 프레임으로 인코더의 제1 결과를 인코딩한다. 이미지 프레임은 복수의 게이밍 세션들 중 제1 게이밍 세션에 관여된 클라이언트 디바이스에 제공된다.
[00111] 일부 구현들에서, 정적 데이터 아이템은, 그래픽 연산을 수행하기 위하여 복수의 GPU들(140)에 의해 사용되는 하나 이상의 컴파일링된 셰이더들을 포함한다. 추가로, 일부 구현들에서, 정적 데이터 아이템이 복수의 컴파일링된 셰이더들을 포함할 경우, 제1 GPU는 복수의 게이밍 세션들 중 제1 게이밍 세션에 대한 성능 기준을 식별하고, 성능 기준에 따라 복수의 컴파일링된 셰이더들 중 하나를 선택한다. 복수의 컴파일링된 셰이더들 중 선택된 하나는 그래픽 연산을 수행하기 위하여 제1 GPU에 의해 사용된다.
[00112] 복수의 게이밍 세션들 중 제1 게이밍 세션 및 제2 게이밍 세션을 포함하는 복수의 게이밍 세션들 사이에서 정적 데이터 아이템이 공유됨을 유의한다. 일부 구현들에서, 복수의 게이밍 세션들 각각은 우선순위와 연관되며, 제1 및 제2 GPU들 각각은 제1 및 제2 게이밍 세션들의 우선순위들에 따라 정적 메모리 풀로부터 판독된 정적 데이터 아이템의 개개의 카피를 메모리 콘트롤러로부터 수신한다. 예컨대, 제1 게이밍 세션은 제2 게이밍 세션보다 높은 우선순위를 가지며, 제1 GPU는, 제2 GPU가 제2 카피를 요청한 시간과 동시에 또는 그 시간 이후 임계 지속기간 내에서 제1 카피를 요청한다. 제2 GPU는, 제1 GPU가 메모리 콘트롤러로부터 제1 카피를 수신할 때까지 제2 카피를 수신하는 것이 중단된다.
[00113] 일부 구현들에서, 정적 메모리 풀(202)은 해시 테이블을 포함하며, 복수의 정적 데이터 아이템들은 해시 테이블에 따라 게이밍 타이틀과 연관되어 정적 메모리 풀(202)에 저장된다. 일부 구현들에서, 정적 데이터 아이템은, 정적 데이터 아이템이 판독-전용이라는 것을 표시하는 태그와 연관된다.
[00114] 일부 구현들에서, 메모리 콘트롤러(204)는 정적 데이터 아이템을 릴리즈하기 위한 릴리즈 요청을 수신한다. 릴리즈 요청에 대한 응답으로, 메모리 콘트롤러(204)는 정적(예컨대, 콜드(cold)) 메모리 풀이 가득차 있는지 여부를 결정한다. 정적 메모리 풀이 가득차 있다는 것에 따라, 메모리 콘트롤러(204)는 LRU 페이지 대체 방법에 기반하여 정적 데이터 아이템을 릴리즈한다. 정적 메모리 풀이 가득차 있지 않다는 것에 따라, 메모리 콘트롤러(204)는 정적 데이터 아이템을 릴리즈하는 것을 중단한다. 메모리 콘트롤러(204)는 정적 메모리 풀(202)에 저장된 데이터를 릴리즈하도록 구성된 페이지 릴리즈 모듈(374)을 포함한다.
[00115] 일부 구현들에서, 정적 메모리 풀(202)은 복수의 페이지들로 분할되며, 복수의 페이지들 각각은 개개의 페이지에 저장된 데이터에 대한 위치들을 식별하는 페이지 해시를 갖는다. 메모리 콘트롤러(204)는 각각의 페이지의 페이지 해시에 따라 정적 메모리 풀(202)로부터 판독하고 정적 메모리 풀(202)에 기입한다. 일 예에서, 이러한 정적 메모리 풀(202)은 PRAM을 포함한다.
[00116] 도 8a 및 도 8b의 동작들이 설명되었던 특정한 순서가 단지 예시적일 뿐이며, 설명된 순서가 동작들이 수행될 수 있는 유일한 순서라는 것을 표시하도록 의도되지 않음을 이해해야 한다. 당업자는, 본 명세서에 설명된 바와 같이 정적 메모리 풀에 저장된 데이터를 사용하여 온라인 게이밍 세션들을 실행하기 위한 다양한 방식들을 인식할 것이다. 부가적으로, 방법(900)(예컨대, 도 9)에 관해 본 명세서에 설명된 다른 프로세스들의 세부사항들이 또한, 도 8a 및 도 8b에 관해 위에서 설명된 방법(800)에 유사한 방식으로 적용가능함을 유의해야 한다. 간결함을 위해, 이들 세부사항들은 여기서 반복되지 않는다.
[00117] 도 9는 일부 구현들에 따른, 게이밍 타이틀을 서버 시스템(114)에 로딩하기 위한 예시적인 방법(900)을 예시한 흐름도이다. 방법(900)은 선택적으로, 컴퓨터 메모리 또는 비-일시적인 컴퓨터 판독가능 저장 매체(예컨대, 도 5a의 메모리(506))에 저장되고 서버 시스템(114)의 하나 이상의 프로세서들(예컨대, 게임 서버(118)의 CPU들 및 GPU들)에 의해 실행되는 명령들에 의해 관리된다. 컴퓨터 판독가능 저장 매체는 자기 또는 광학 디스크 저장 디바이스, 솔리드 스테이트 저장 디바이스들, 이를테면 플래시 메모리, 또는 다른 비-휘발성 메모리 디바이스 또는 디바이스들을 포함할 수 있다. 컴퓨터 판독가능 저장 매체 상에 저장된 명령들은 소스 코드, 어셈블리 언어 코드, 오브젝트 코드, 또는 하나 이상의 프로세서들에 의해 해석되는 다른 명령 포맷 중 하나 이상을 포함할 수 있다. 방법(900)의 일부 동작들은 조합될 수 있고 그리고/또는 일부 동작들의 순서는 변화될 수 있다.
[00118] 서버 시스템(114)은, 하나 이상의 CPU들(138), 복수의 GPU들(140), 프로그램 실행 동안 CPU들 및/또는 GPU들에 의한 사용을 위한 프로그램들 및 데이터를 저장하는 메인 동적 메모리(144), 비-휘발성 메모리에 저장된 정적 메모리 풀(202), 및 정적 메모리 풀을 관리하도록 구성된 메모리 콘트롤러(204)를 포함한다. GPU들(140) 각각은 메모리 콘트롤러(204)를 통해 정적 메모리 풀(202)에 액세스하도록 구성된다.
[00119] CPU들(138)은 게이밍 타이틀에 대응하는 실행가능 게이밍 프로그램(예컨대, 서버-측 게임 모듈(526))을 메인 동적 메모리(144)에 로딩한다(902). CPU들(138)은 복수의 온라인 게이밍 세션들을 병렬로 실행하도록 구성되며, 게이밍 세션들 각각은 실행가능 게이밍 프로그램에 대응한다(904). 복수의 온라인 게이밍 세션들 각각은, 개개의 온라인 게이밍 세션을 렌더링하기 위해 할당된 개개의 GPU에 의해 실행가능한 그래픽 연산을 요구한다(906).
[00120] CPU들(138)은 복수의 게이밍 세션들의 그래픽 연산에서 사용된 정적 데이터 아이템을 식별한다(908). 일부 구현들에서, 정적 데이터 아이템은 제1 정적 데이터 아이템을 포함하며, 제1 정적 데이터 아이템은 미리 결정된 정적 데이터 아이템들의 리스트에서 CPU들(138)에 의해 식별된다. 미리 결정된 정적 데이터 아이템들의 리스트는 정적 데이터 아이템들의 제1 서브세트 및 정적 데이터 아이템들의 제2 서브세트를 포함한다. 메모리 콘트롤러는 제1 정적 데이터 아이템을 포함하는 정적 데이터 아이템들의 제1 서브세트를 정적 메모리 풀(202)에 저장하고, 정적 데이터 아이템들의 제2 서브세트를 메인 동적 메모리(144)에 저장한다.
[00121] 메모리 콘트롤러(204)는 정적 데이터 아이템을 정적 메모리 풀에 저장하고(910), 온라인 게이밍 세션들을 실행하는 GPU들이 그래픽 연산을 수행하는 동안 정적 데이터 아이템에 액세스할 수 있게 한다(912). 일부 구현들에서, 정적 데이터 아이템은 게이밍 타이틀의 렌더링에서 사용되는 표준 정적 데이터 아이템이다. 정적 데이터 아이템을 정적 메모리 풀에 저장하기 전에, CPU들(138)은 서버 시스템(114) 또는 원격 라이브러리 서버의 하드 드라이브(324)로부터 정적 데이터 아이템을 리트리브한다. 예컨대, 정적 데이터 아이템은 셰이더 라이브러리 서버(124)에 저장된 셰이더 프로그램을 포함한다. CPU들(138)은 셰이더 라이브러리 서버(124)로부터 셰이더 프로그램을 획득하고, 게이밍 타이틀을 로딩하는 과정 동안 셰이더 프로그램을 정적 메모리 풀(202)에 저장한다. 대안적으로, 일부 구현들에서, 정적 데이터 아이템은, 게이밍 타이틀의 개발자에 의해 미리 정의되고 서버 시스템(114)의 하드 드라이브(324)에 저장된 커스텀 정적 데이터 아이템이다. 정적 데이터 아이템을 정적 메모리 풀에 저장하기 전에, CPU들(138)은 서버 시스템(114)의 하드 드라이브(324)로부터 정적 데이터 아이템을 리트리브한다. 서버 시스템(114)에 게이밍 타이틀을 로딩하는 것에 관한 더 많은 세부사항들은 도 4a를 참조하여 위에서 설명된다.
[00122] 일부 구현들에서, 실행가능 게이밍 프로그램에 따라, CPU들(138)은 복수의 GPU들 각각을, 그 상에서 실행될 복수의 온라인 게이밍 세션들의 서브세트에 할당한다. 복수의 게이밍 세션들 각각에 대해, 개개의 GPU에 의한 그래픽 연산의 실행 동안, 개개의 GPU(140)는 메모리 콘트롤러를 통해 정적 메모리 풀로부터 정적 데이터 아이템의 카피를 획득하고, 정적 데이터 아이템의 카피를 사용하여 그래픽 연산을 수행한다. 일부 구현들에서, 복수의 게이밍 세션들 각각에 대해, 개개의 GPU에 의한 그래픽 연산의 실행 동안, 개개의 GPU(140)는 정적 데이터 아이템의 카피를 개개의 GPU의 개개의 로컬 캐시에 로딩한다. 추가로, 일부 구현들에서, 복수의 게이밍 세션들 각각에 대해, 개개의 GPU에 의한 그래픽 연산의 실행 동안, 개개의 GPU(140)는 개개의 온라인 게이밍 세션과 연관된 동적 데이터 아이템 및 사용자 정보를 메인 동적 메모리(144)에 저장한다. 일부 구현들에서, 복수의 게이밍 세션들의 서브세트에 대해, GPU들(140)은 정적 데이터 아이템의 카피를 GPU들의 로컬 캐시에 한번 로딩하고, 복수의 게이밍 세션들의 서브세트에 대응하는 GPU들의 서브세트에 의해 정적 데이터 아이템의 카피를 공유한다. 정적 데이터 아이템을 사용하여 온라인 게이밍 세션의 이미지 프레임들을 렌더링하는 것에 관한 더 많은 세부사항들은 도 4b 및 도 8a 및 도 8b를 참조하여 위에서 설명된다.
[00123] 도 9의 동작들이 설명되었던 특정한 순서가 단지 예시적일 뿐이며, 설명된 순서가 동작들이 수행될 수 있는 유일한 순서라는 것을 표시하도록 의도되지 않음을 이해해야 한다. 당업자는, 본 명세서에 설명된 바와 같이 게이밍 타이틀을 서버 시스템(114)에 로딩하기 위한 다양한 방식들을 인식할 것이다. 부가적으로, 방법(800)(예컨대, 도 8a 및 도 8b)에 관해 본 명세서에 설명된 다른 프로세스들의 세부사항들이 또한, 도 9에 관해 위에서 설명된 방법(900)에 유사한 방식으로 적용가능함을 유의해야 한다. 간결함을 위해, 이들 세부사항들은 여기서 반복되지 않는다.
셰이더 최적화
[00124] 온라인 게이밍 세션에 대한 이미지 프레임들을 렌더링하는 과정 동안, GPU들(140)은 다른 파이프라인 정적 데이터와 함께 소스 형태(GLSL, HLSL) 또는 중간 형태(DXIL, SPIR-V)의 셰이더들을 획득하고, 게이밍 콘텐츠를 렌더링(예컨대, 온라인 게이밍 세션과 연관된 이미지 프레임들의 시퀀스를 출력)하기 위하여 GPU들에 의한 사용을 위해 셰이더들을 컴파일링한다. 셰이더 컴파일은 값비쌀 수 있다. 예컨대, 일부 게이밍 애플리케이션들은, 수 밀리초를 각각 취하는 100,000개 초과의 셰이더들을 컴파일링하는 것을 요구한다. 셰이더 컴파일이 사용자 입력들에 대한 응답으로 실시간으로 행해지면, 그 컴파일은 연장된 로드 시간을 취하여 사용자 경험을 손상시킬 것이다. 일부 상황들에서, 셰이더 컴파일은 컴파일 시간을 감소시키려는 목적들을 위해 간략화되지만, 결과적인 컴파일링된 셰이더들의 품질은 셰이더 컴파일의 시간-민감 속성으로 인해 손상된다. //이러한 단락으로부터 다음 8개의 단락들까지의 명확성이 본 개시내용으로부터 복제되었다.
[00125] 본 출원의 일부 구현들에서, GPU들(140)은 빠른 경로에 의해 서버 시스템(114)의 컴퓨테이셔널 리소스들에 연결된다. 컴파일링된 파이프라인들의 플릿-와이드(fleet-wide) 캐싱이 미리 준비되고, 컴파일러 입력들의 해시에 의해 인덱싱되며, 로컬적으로 저장되어 셰이더 컴파일 시간을 제거 또는 감소시킨다. 부가적으로, 일부 구현들에서, 플릿-와이드 성능 분석은 수기로(by hand) 또는 더 느리지만 더 효율적인 셰이더 파이프라인 컴파일러(예컨대, 도 5a의 셰이더 파이프라인 최적화기(534))에 의해 더 광범위한 최적화를 위해 후보 셰이더들을 식별하도록 수행될 수 있다. 일부 구현들에서, 컴파일링된 셰이더들은 더 높은 성능의 셰이더들, 또는 일부 다른 특성들을 갖는 셰이더들로 플릿-와이드 캐시(예컨대, 셰이더 캐시(318))에서 동적으로 대체된다. 일부 구현들에서, 성능-안내-최적화 스테이지에 대해 특수화된 셰이더들을 포함하는 상이한 컴파일링된 셰이더들의 세트가 특정 상황들에서의 배치를 위해 저장된다. 일부 구현들에서, 게이밍 콘텐츠 렌더링에서 사용되는 셰이더들은, 셰이더 파이프라인 컴파일러(예컨대, 컴파일러(532))가 개선됨에 따라 리컴파일링되며, 게임 애플리케이션 그 자체는 이들 셰이더 최적화 연산들에 의해 영향을 받지 않는다. 일부 구현들에서, 게임 드라이버(도 5a의 서버-측 게임 모듈(526)로 또한 지칭됨)를 교란시키지 않으면서, 특징부 사용량에 관한 상세한 분석이 구현된다. 일부 구현들에서, GPU들(140) 상에서 구동되는 게임 드라이버(즉, 서버-측 게임 모듈(526))을 교란시키지 않으면서 특수화된 셰이더들이 특정한 게이밍 타이틀에 대해 컴파일링, 테스팅 및 선택된다.
[00126] 일부 구현들에서, 게임 드라이버(구체적으로는, 서버-측 게임 모듈(526)의 셰이더 파이프라인 최적화기(534))는, 그래픽들을 서빙하는 모든 각각의 GPU 상에서 구동되는 게임 드라이버에서 셰이더 파이프라인 생성/컴파일 콜(call)들을 투명하게 인터셉트(intercept)한다. 게임 드라이버는 셰이더 컴파일러로의 모든 입력들의 해시를 평가하고, 매칭한 컴파일링된 셰이더에 대한 셰이더 파이프라인 서버(또는 셰이더 캐시)에 요청을 전송한다. 셰이더 파이프라인 서버 또는 캐시가 어떠한 매칭한 셰이더도 존재하지 않는다는 것을 리턴하는 경우(또는 타임아웃), 게임 드라이버는 종래의 컴파일 파이프라인을 사용하고, 결과를 셰이더 파이프라인 서버 또는 셰이더 캐시에 저장할 뿐만 아니라 그 온라인 게이밍 세션에 대해 이를 사용한다. 셰이더 파이프라인 서버는 많은 방식들로 구현될 수 있다. 셰이더 파이프라인 서버는 선택적으로, 중앙 단일 서버, 또는 (더 낮은 레이턴시 액세스를 위한 복제를 포함하는) 표준 분산형 데이터베이스 기술들을 이용하는 서버들의 분산형/연합형 세트이다.
[00127] 일부 구현들에서, 게임 드라이버(구체적으로는, 서버-측 게임 모듈(526)의 셰이더 파이프라인 최적화기(534))는 플릿-와이드 분석 및 성능-안내 최적화를 수행한다. 플릿-와이드 분석의 예들은 타이밍 분석, 셰이더 성능 분석 및 전력 소비 분석을 포함한다. 구체적으로, 일부 구현들에서, 세션들의 간단한 세트가 게이밍 타이틀과 연관된 모든 온라인 게이밍 세션들로부터 선택된다. 이들 로드들(즉, 샘플링된 세션들)은, 각각의 셰이더 파이프라인을 구동시키는 데 요구되는 시간을 수집하고 중앙 데이터베이스에 리포팅할 시에 특수화된 게임 드라이버에 의해 실행된다. 선택적으로, 샘플링된 세션들은, 전경에서 온라인 게이밍 세션들을 동시에 구동시키는 게임 서버들(118)을 사용하여 배경에서 분석된다. 일부 상황들에서, 이러한 측정은 게임 애플리케이션(및 그에 따라 사용자 경험)을 교란시킬 수 있으므로, 샘플링된 세션들은 별개의 파이프라인 최적화기 서버(150) 상에서 분석된다. 이것은 사용 통계들을 수집하면서 사용자 경험이 높은 품질을 유지하게 허용한다. 일부 구현들에서, 셰이더 파이프라인 최적화기(534)는, 전경에서 게임 콘텐츠 렌더링에 대한 영향을 감소시키기 위해 온라인 게이밍 세션 내에서 선택적으로 샘플링하고, 예컨대 특정한 셰이더들 또는 이미지 프레임들의 서브세트를 샘플링한다. 이어서, 우리는 이들 타이밍들을 사용하여, 추가적인 최적화를 위해 양호한 후보 셰이더들을 선택하고, 셰이더들을 개량하기 위해 수동 리뷰 또는 자동화된 시스템들을 인보크한다. 대안적으로, 일부 구현들에서, 전력 소비가 모니터링되고 사용되어, 셰이더 파이프라인(즉, 컴파일링된 셰이더들의 시퀀스)을 최적화한다. 구체적으로, 셰이더 파이프라인 최적화기(534)는 타이밍 성능 대신 전력 인출을 측정하도록 계측(instrument)된다.
[00128] 상세한 셰이더 분석을 수반하는 일부 구현들에서, 셰이더 파이프라인 최적화기(534)는, 예컨대 보조 GPU 버퍼로 태그를 방출하도록 각각의 기본 블록을 계측하는 파인-그레인드(fine-grained) 셰이더 실행 정보를 수집하는 수정된 셰이더 및 드라이버를 선택한다. 이어서, 보조 GPU 버퍼는 로컬적으로 분석되거나 또는 그 전체가 우리의 분석 데이터베이스(예컨대, 데이터베이스(160)에 포함됨)에 업로딩된다. 계측된 셰이더는 생성 드라이버들을 교란시키지 않으면서 우리의 플릿-와이드 셰이더 파이프라인 캐시 내의 자산들로부터 오프-라인으로 생성된다.
[00129] 셰이더 특수화의 일부 구현들에서, 인기있는 게이밍 타이틀들/애플리케이션들에 대해 (종종 매우 숙련된 엔지니어에 의해 수동으로) 셰이더들을 특수화하기 위해 셰이더 파이프라인 최적화기(534)에서 빈번한 최적화가 적용되며, 그에 의해 기계 컴파일링된 코드들을 수동으로-튜닝된 코드들로 대체한다. 플릿-와이드 캐시는, 컴파일링된 셰이더 파이프라인을 플릿-와이드 캐시에서 대체함으로써 드라이버들을 재배치하지 않고도 이러한 대체를 수행하는 데 사용된다. 일부 구현들에서, 컴파일링된 셰이더의 다수의 버전들이 플릿-와이드 캐시에 저장되며, 상이한 통계 분석들을 수행하도록 배치된다. 일부 구현들에서, 전력 최적화된 셰이더들 및 성능 최적화된 셰이더들 둘 모두는 셰이더 캐시에 저장되지만, 예컨대 게임들의 피크 전력 소비를 관리하기 위해 성능 기준에 따라 동적으로 배치된다. 이것이 임의의 수의 성능 관리 축들, 예컨대 전력, 시간, 메모리 사용량 및 코드 사이즈로 연장됨을 유의한다.
[00130] 컴파일러 업데이트들 및 프로파일링을 수반하는 일부 구현들에서, 셰이더 파이프라인 최적화기(534)는 셰이더 캐시 내의 모든 셰이더들에 대해 셰이더 컴파일러의 새로운 버전을 구동시키고, 셰이더 컴파일러의 더 이른 버전 옆에 셰이더 컴파일러의 새로운 버전을 저장한다. 이어서, 최적화기(534)는 새로운 셰이더 컴파일러를 구동시키기 위해 온라인 게이밍 세션들의 샘플을 사용하고, 성능 영향을 측정하며, 새로운 셰이더 컴파일러의 적합성(fitness)을 결정한다. 이들 수단에 의해, 컴파일링된 셰이더들 및 셰이더 컴파일러들 둘 모두는, 게임 모듈의 게임 콘텐츠 렌더링을 교란시키지 않으면서 배경에서 동적으로 개선된다.
[00131] 일부 구현들에서, 서버 시스템(114)은 내부 및 외부 사용자들에 대한 분산형 셰이더 파이프라인 캐시를 질의하기 위한 API(application programming interface)를 포함한다. 분산형 셰이더 파이프라인 캐시는 입력들의 주어진 세트에 대해 질의되며, 그에 의해 추가적인 검사 및 분석을 가능하게 한다. 예컨대, 맵-축소-스타일 질의들은 개별 셰이더들 및 셰이더 파이프라인들의 플릿-와이드 분석을 위해 분산형 셰이더 파이프라인 캐시 상에서 구동된다. 이러한 API는 깊이-전용 패스(pass)들에 대한 명령들의 가장 보편적으로 사용되는 조합을 포함하며, 드레멜(Dremel) 등으로의 내보내기 파이프라인으로서 구현될 수 있다. 추가로, API는, 파이프라인-셰이더-컴파일러를 인프라구조로서 레버리징함으로써 컴파일러 탐색기 인터페이스를 제공하도록 구성된다.
[00132] 도 10은 일부 구현들에 따른, 서버 시스템(114)에서의 게이밍 콘텐츠 렌더링과 동시에, 파이프라인화된 셰이더들을 최적화하는 예시적인 프로세스(1000)이다. 도 5a에 도시된 바와 같이, 일부 구현들에서, 서버-측 게임 모듈(526)은 게임 애플리케이션(528), 셰이더 파이프라인 최적화기(534), 게임 렌더링 모듈(538), 및 셰이더 캐시(318)를 포함하며, 이들은 동시적인 게이밍 콘텐츠 렌더링 및 셰이더 파이프라인 최적화를 가능하게 하도록 협력하여 기능한다. 구체적으로, 게임 애플리케이션(528)이 전경에서 그래픽 파이프라인 프로세스 내에서 온라인 게이밍 세션들을 실행하는 동안, 셰이더 파이프라인 최적화기(534)는 배경에서 이러한 그래픽 파이프라인 프로세스 내에서 사용되는 컴파일링된 셰이더들을 최적화한다.
[00133] 서버 시스템(114)의 CPU들(138)은 복수의 온라인 게이밍 세션들을 병렬로 구동시키기 위해 게이밍 타이틀에 대응하는 게임 애플리케이션(528)을 실행한다. CPU들(138)은 복수의 온라인 게이밍 세션들(예컨대, 하나 이상의 세션들)의 서브세트를 실행하기 위해 GPU들(140)의 서브세트의 각각의 GPU를 할당한다. 이어서, GPU들(140)은 컴파일링된 셰이더들의 제1 시퀀스를 식별하며, 온라인 게이밍 세션들 각각에 대한 복수의 이미지 프레임들을 렌더링하기 위해, 컴파일링된 셰이더들의 식별된 제1 시퀀스를 사용한다. 일부 구현들에서, 컴파일링된 셰이더들의 제1 시퀀스는 셰이더 캐시(318)에 저장되었으며, 일단 식별되면, 그 시퀀스는, 게이밍 애플리케이션(528)의 명령들에 따라 온라인 게이밍 세션들에 대한 이미지 프레임들을 렌더링하기 위해 셰이더 캐시로부터 GPU들(140)로 직접 로딩된다. 일부 구현들에서, 복수의 온라인 게이밍 세션들의 실행은 특정 성능 기준에 따라야 하며, 컴파일링된 셰이더들의 제1 시퀀스는, 그들이 온라인 게이밍 세션들 각각에 대한 이미지 프레임들을 렌더링하기 위해 사용되기 전에 특정 성능 기준에 따라 식별된다.
[00134] GPU들이 복수의 온라인 게이밍 세션들을 실행하는 동안, 셰이더 파이프라인 최적화기(534)는 배경에서, 컴파일링된 셰이더들의 제1 시퀀스를 최적화한다. 다른 방식으로 나타내면, CPU들(138)은 하나 이상의 성능 기준들에 관하여, 컴파일링된 셰이더들의 대안적인 시퀀스 또는 컴파일링된 셰이더들의 제1 시퀀스의 다른 버전을 식별하기 위해 서버 시스템(114)에서 CPU들 및 GPU들의 미사용된 서브세트를 할당한다. 선택적으로, 게임 서버들(118)은 또한, 셰이더 파이프라인 최적화를 위해 할당된 CPU들 및 GPU들의 미사용된 서브세트 및 온라인 게이밍 세션들을 실행하는 활성 CPU들 및 GPU들 둘 모두를 포함한다. 선택적으로, 게임 서버들(118)과 별개인 파이프라인 최적화기 서버(150)는 셰이더 파이프라인 최적화를 위해 할당된 CPU들 및 GPU들의 서브세트를 포함한다.
[00135] 구체적으로, 게임 애플리케이션(528)이 복수의 온라인 게이밍 세션들을 실행하는 동안, 셰이더 파이프라인 최적화기(534)는 게이밍 타이틀과 연관된 복수의 온라인 게이밍 세션들에 대한 성능 기준을 식별하고, 컴파일링된 셰이더들의 제1 시퀀스를 사용하여 온라인 게이밍 세션들 각각의 실행을 특성화하는 사용 통계들을 수집한다. 셰이더 파이프라인 최적화기(534)는 사용 통계들을 분석하며, 컴파일링된 셰이더들의 제1 시퀀스의 성능이 성능 기준에 관해 추가로 개선될 수 있다고 결정한다. 예컨대, 셰이더 파이프라인 최적화기(534)는, 컴파일링된 셰이더의 제1 시퀀스의 제1 셰이더의 수정이 성능 기준에 관해, 컴파일링된 셰이더들의 제1 시퀀스의 성능을 개선시키고, 그에 따라 제1 셰이더를 수정하여 컴파일링된 셰이더의 수정된 제1 시퀀스를 생성한다고 결정한다. 일부 구현들에서, 셰이더 파이프라인 최적화기(534)는, 성능 기준에 관해, 컴파일링된 셰이더들의 제1 시퀀스의 성능을 개선시키기 위해, 컴파일링된 셰이더들의 제1 시퀀스에서 하나 이상의 제2 셰이더들을 추가로 수정한다.
[00136] 일부 구현들에서, 셰이더 파이프라인 최적화기(534)는, 성능 기준에 관해, 컴파일링된 셰이더들의 제1 시퀀스를 최적화하도록 구성된 자동 최적화기(1002)를 포함한다. 그렇긴 하지만, 자동 최적화기(1002)는 셰이더 캐시로부터 컴파일링된 셰이더들의 제1 시퀀스를 획득하고, 성능 기준에 관해, 컴파일링된 셰이더들의 제1 시퀀스의 성능을 개선시키기 위해 자동으로 그리고 사용자 개입 없이, 컴파일링된 셰이더들의 제1 시퀀스에서 제1 셰이더를 수정한다. 대안적으로, 일부 구현들에서, 셰이더 파이프라인 최적화기(534)는 사용자가 성능 기준에 관해, 컴파일링된 셰이더들의 제1 시퀀스를 수동으로 최적화하게 허용하는 사용자 인터페이스를 제공하도록 구성된 수동 최적화기(1004)를 포함한다. 관리자 사용자는 관리자 클라이언트 디바이스(102) 상에서 실행되는 게임 개발 플랫폼 상에서 관리자 계정에 로깅한다. 사용자 인터페이스는 수동 최적화를 용이하게 하기 위해 성능 기준들, 사용 통계들 및 다른 관련 정보 아이템들을 제시한다. 서버 시스템(114)은 컴파일링된 셰이더들의 제1 시퀀스에서 제1 셰이더를 수정하기 위한 사용자 명령을 수신하며, 그에 따라 제1 셰이더는 사용자 명령에 대한 응답으로, 컴파일링된 셰이더들의 제1 시퀀스에서 수정된다. 추가로, 일부 구현들에서, 파이프라인 셰이더 최적화기(534)는 자동 최적화기(1002) 및 수동 최적화기(1004) 둘 모두를 포함하며, 자동 최적화, 수동 최적화, 또는 이들의 조합을 지원한다.
[00137] 추가로, 일부 구현들에서, 컴파일링된 셰이더들의 제1 시퀀스에서 제1 셰이더를 대체하기 위해 대안적인 셰이더 옵션들의 그룹으로부터 대안적인 셰이더가 선택된다. 선택적으로, 자동 최적화기(1002)는 대안적인 셰이더 옵션들을 자동으로 식별하며, 성능 기준에 관해, 컴파일링된 셰이더들의 제1 시퀀스의 성능을 개선시키도록 대안적인 셰이더를 선택한다. 선택적으로, 자동 최적화기(1002)는 대안적인 셰이더 옵션들을 자동으로 식별하지만, 관리자 사용자는 수동 최적화기(1004)에 의해 대안적인 셰이더를 선택하도록 프롬프트된다. 선택적으로, 수동 최적화기(1004)는, 관리자 사용자가 대안적인 셰이더 옵션들을 식별하고 대안적인 셰이더를 선택하게 허용하는 최적화 프로세스를 용이하게 하기 위해 관련 정보 아이템들을 제공한다.
[00138] 도 10을 참조하면, 일부 구현들에서, 컴파일링된 셰이더들의 수정된 제1 시퀀스는 그것이 생성된 이후 셰이더 캐시에서, 컴파일링된 셰이더들의 제1 시퀀스를 대체한다. 대안적으로, 일부 구현들에서, 컴파일링된 셰이더들의 제1 시퀀스 및 컴파일링된 셰이더들의 수정된 제1 시퀀스는 컴파일링된 셰이더들의 제1 시퀀스의 2개의 버전들로서 저장된다. 후속하여, 서버 시스템(114)은 온라인 게이밍 세션들 각각의 실행을 특성화하는 후속 사용 통계들을 수집하고, 후속 사용 통계들에 따라, GPU들은 복수의 온라인 게이밍 세션들 각각에 대한 복수의 이미지 프레임들을 렌더링하기 위해, 컴파일링된 셰이더들의 제1 시퀀스의 2개의 버전들 중 하나를 선택할 수 있다.
[00139] 대안적으로, 일부 구현들에서, 성능 기준은 제1 성능 기준을 포함하며, 복수의 온라인 게이밍 세션들은 제1 기준과는 별개인 제2 성능 기준에 따라 렌더링 및 실행된다. 파이프라인 최적화기(534)는 셰이더 캐시(318)가 제1 성능 기준을 컴파일링된 셰이더들의 수정된 제1 시퀀스와 연관시키고 제2 성능 기준을 컴파일링된 셰이더들의 제1 시퀀스와 연관시킬 수 있게 한다.
[00140] 일부 구현들에서, 셰이더 파이프라인 최적화기(534)는 배경에서 2개 이상의 성능 기준들에 대한 최적화된 셰이더 파이프라인들을 획득한다. 성능 기준은 제1 성능 기준을 포함하며, 컴파일링된 셰이더들의 수정된 제1 시퀀스는 셰이더 캐시에 제1 성능 기준과 연관되어 저장된다. 컴파일링된 셰이더들의 수정된 제1 시퀀스를 식별한 이후, 셰이더 파이프라인 최적화기(534)는 게이밍 타이틀과 연관된 복수의 온라인 게이밍 세션들에 대한 제2 성능 기준을 식별하며, 제2 성능 기준에 관해, 컴파일링된 셰이더들의 제1 시퀀스의 성능을 개선시키기 위해, 컴파일링된 셰이더들의 제2 시퀀스를 결정한다. 컴파일링된 셰이더들의 제2 시퀀스는 제2 성능 기준과 연관되어 셰이더 캐시(318)에 저장된다.
[00141] 셰이더 캐시(318)가 컴파일링된 셰이더들의 복수의 시퀀스들을 포함할 경우, 셰이더 캐시는 복수의 성능 기준들 각각을 컴파일링된 셰이더들의 개개의 시퀀스와 연관시키는 셰이더 해시 테이블(1006)을 설정 및 저장한다(도 11b). 성능 기준 및 컴파일링된 셰이더들의 제1 시퀀스는 셰이더 해시 테이블에서 연관된다. 선택적으로, 컴파일링된 셰이더들의 제1 시퀀스는 복수의 버전들을 가질 수 있다. 사용 통계들은 사용자 입력들의 정보를 포함하며, 제1 시퀀스의 복수의 버전들은 사용자 입력들의 상이한 정보와 연관된다(도 11c). 예컨대, 가장 인기있는 사용자 입력들이 제1 사용자 입력(예컨대, 점프)일 경우, 컴파일링된 셰이더들의 제1 시퀀스의 제1 버전은 대응하는 성능 기준을 만족시키는 데 사용되며, 가장 인기있는 사용자 입력들이 제2 사용자 입력(예컨대, 슈팅)일 경우, 컴파일링된 셰이더들의 제1 시퀀스의 제2 버전은 대응하는 성능 기준을 만족시키는 데 사용된다. 추가로, 일부 구현들에서, 셰이더 해시 테이블은 사용 통계들에 따라 동적으로 업데이트된다.
[00142] 성능 기준이 복수의 온라인 게이밍 세션들을 실행하는 과정 동안, 컴파일링된 셰이더들의 제1 시퀀스의 총 전력 소비, 코드 사이즈, 평균 레이턴시, 총 캐시 사용량, 및 총 메모리 사용량 중 하나 이상에 대응함을 유의한다. 예컨대, 성능 기준은 코드 사이즈가 임계 사이즈 미만일 것을 요구한다. 다른 예에서, 성능 기준은 전력 소비가 사용 통계들의 관점에서 임계 전력 레벨로 감소될 것을 요구한다.
[00143] 일부 구현들에서, 사용 통계들은, 복수의 온라인 게이밍 세션들 각각에 대응하는 컴파일링된 셰이더들의 제1 시퀀스의 사용자 입력들, 전력 소비, 하나 이상의 게이밍 레이턴시들, 코드 사이즈, 메모리 사용량 및 캐시 사용량을 포함한다. 특정 예에서, 사용 통계들은 복수의 온라인 게이밍 세션들의 총 전력 소비를 포함한다. 제1 성능 기준 및 제2 성능 기준은 복수의 온라인 게이밍 세션들의 응답 시간들 및 전력 사용량에 각각 대응한다. 복수의 온라인 게이밍 세션들의 총 전력 소비가 미리 정의된 전력 임계치를 초과하고, 감소될 필요가 있다는 결정에 따라, 게이밍 애플리케이션(528)은, 컴파일링된 셰이더들의 제2 시퀀스를 선택하고, 컴파일링된 셰이더들의 제2 시퀀스를 사용하여 복수의 온라인 게이밍 세션들 각각에 대한 복수의 이미지 프레임들을 렌더링하며, 그에 의해 제2 성능 기준에 따라 복수의 온라인 게이밍 세션들의 총 전력 소비를 개선시킨다.
[00144] 도 11a는 일부 구현들에 따른, 파이프라인화된 셰이더들을 최적화하는 예시적인 프로세스이다. 게이밍 타이틀에 관련된 복수의 온라인 게이밍 세션들은 OpenGL 렌더링 파이프라인을 사용하여 실행된다. OpenGL 렌더링 파이프라인은, 버텍스 프로세싱(예컨대, 버텍스들을 스크린 공간으로 변환함), 프리미티브 프로세싱(예컨대, 클립(clip) 및 컬링(cull)된 프리미티브들로 버텍스들을 조직화함), 래스터화(예컨대, 프리미티브들을 픽셀 프래그먼트들로 래스터화함), 프래그먼트 프로세싱(예컨대, 각각의 픽셀에서 컬러를 컴퓨팅하기 위해 프래그먼트들을 셰이딩(shade)함), 및 픽셀 연산(예컨대, 프래그먼트들을 그들의 픽셀 위치들에서 프레임 버퍼로 블렌딩(blend)함)을 포함하는 동작들의 파이프라인의 서브세트를 적어도 포함한다. 특정 예에서, OpenGL 렌더링 파이프라인은 각각의 온라인 게이밍 세션에 대한 이미지 프레임을 렌더링하기 위해 9개의 연속하는 파이프라인 연산들 또는 스테이지들을 포함한다. 9개의 연속하는 파이프라인 스테이지들은 다음의 서브세트 또는 전부를 포함한다:
● 버텍스 어레이 데이터를 준비하기 위한 버텍스 사양(1102);
● 각각의 버텍스에 작용하기 위한 버텍스 셰이더(1104);
● 버텍스 데이터의 패치(patch)들을 더 작은 프리미티브들로 선택적으로 세분하기 위한 테셀레이션(1106);
● 더 작은 프리미티브들을 출력 프리미티브들로 선택적으로 변환하기 위한 지오메트리 셰이더(1108);
● 변환 피드백, 프리미티브 클립핑, 관점 분할, 및 뷰포트 변환을 포함하는(그러나 이에 제한되지 않음), 최종 스테이지의 출력 프리미티브들을 조정하여 상이한 위치들로 수송하기 위한 버텍스 포스트-프로세싱(1110);
● 출력 프리미티브들을 개별적인 기본 프리미티브의 시퀀스로 분할하기 위한 프리미티브 어셈블리(1112);
● 프리미티브의 샘플 커버리지에 기반하여 별개의 엘리먼트들(또한 프래그먼트들로 지칭됨)로 각각의 개별적인 프리미티브를 나누기 위한 래스터화(1114);
● 컬러들의 세트 및 단일 깊이 값으로의 래스터화에 의해 생성된 각각의 프래그먼트를 프로세싱하기 위한 프래그먼트 셰이더(1116); 및
● 예컨대, 픽셀 오너쉽(ownership) 테스트, 시저(scissor) 테스트, 멀티-샘플 연산들, 스텐실 테스트, 깊이 테스트, 차폐(occlusion) 질의 업데이팅, 블렌딩, sRGB 변환, 디더링, 로직 연산, 및 기입 마스크 및 로직 연산을 포함하는(그러나 이에 제한되지 않음), 표준화, 속도 및/또는 압축을 위하여 인코더(142)에 의해 프로세싱될 수 있는 게임플레이 멀티미디어 콘텐츠에 대한 컬러들의 세트 및 단일 깊이 값을 프로세싱하기 위한 프리-샘플 연산(1118).
[00145] 온라인 게이밍 세션들의 서브세트를 실행하도록 할당된 각각의 GPU(140)는 온라인 게이밍 세션들의 서브세트의 각각의 세션 동안 9개의 연속하는 파이프라인 스테이지들을 실행한다. 일부 구현들에서, 버텍스 셰이더(1104), 테셀레이션(1106), 지오메트리 셰이더(1108) 및 프래그먼트 셰이더(1116) 각각은 프로그래밍가능 셰이더들의 개개의 세트를 포함한다. 프로그래밍가능 셰이더들의 개개의 세트 내의 임의의 셰이더에 대해, 셰이더 파이프라인 최적화기(534)는 개개의 셰이더를 수정할 옵션을 가지며, 그에 의해 셰이더 파이프라인의 수정된 시퀀스를 생성한다.
[00146] 더 구체적으로, 일 예에서, 게임 애플리케이션(528)은 복수의 게이밍 세션들을 실행하고, 컴파일링된 셰이더들의 제1 시퀀스를 사용하여 복수의 온라인 게이밍 세션들 각각에 대한 복수의 이미지 프레임들을 렌더링한다. 컴파일링된 셰이더들의 제1 시퀀스는 버텍스 셰이더(1104A), 테셀레이션 셰이더(1106A), 지오메트리 셰이더(1108) 및 프래그먼트 셰이더(1116A)를 포함하며, 이들은 프로그래밍가능 셰이더들이다. 복수의 온라인 게이밍 세션들이 전경에서 실행되는 동안, 셰이더 파이프라인 최적화기(534)는 게이밍 타이틀과 연관된 복수의 온라인 게이밍 세션들에 대한 성능 기준을 식별하고, 온라인 게이밍 세션들 각각의 실행을 특성화하는 사용 통계들을 수집한다. 그 결과, 셰이더 파이프라인 최적화기(534)는 성능 기준에 관해, 컴파일링된 셰이더들의 제1 시퀀스의 성능을 개선시키도록 컴파일링된 셰이더들의 제1 시퀀스에서 버텍스 셰이더(1104A) 및 테셀레이션 셰이더(1106A)를 수정하기로 결정하여, 그에 의해 컴파일링된 셰이더들의 수정된 제1 시퀀스를 생성한다.
[00147] 특수하게, 셰이더 파이프라인 최적화기(534)는, 컴파일링된 셰이더들의 수정된 제1 시퀀스에서 지오메트리 셰이더(1108A) 및 프래그먼트 셰이더(1116A)를 유지하면서, 버텍스 셰이더(1104A) 및 테셀레이션 셰이더(1106A)를 버텍스 셰이더(1104N) 및 테셀레이션 셰이더(1106B)로 대체한다. 이어서, 컴파일링된 셰이더들의 수정된 제1 시퀀스는 성능 기준과 연관되어 셰이더 캐시에 저장된다.
[00148] 도 11b는 일부 구현들에 따른, 컴파일링된 셰이더들의 복수의 시퀀스들과 복수의 성능 기준들을 연관시키는 셰이더 해시 테이블(1006)이다. 도 11c는 일부 구현들에 따른, 컴파일링된 셰이더들의 시퀀스의 복수의 버전들을 복수의 사용자 입력들과 연관시키는 셰이더 해시 테이블(1180)이다. 셰이더 캐시(318)가 컴파일링된 셰이더들의 복수의 시퀀스들을 포함할 경우, 셰이더 캐시는 복수의 성능 기준들 각각을 컴파일링된 셰이더들의 개개의 시퀀스와 연관시키는 셰이더 해시 테이블(1006)을 설정 및 저장한다. 예컨대, 성능 기준(성능 기준 1) 및 컴파일링된 셰이더들의 제1 시퀀스는 셰이더 해시 테이블에서 연관된다. 선택적으로, 컴파일링된 셰이더들의 제1 시퀀스는 상이한 사용 통계들에 대응하는 복수의 버전들을 가질 수 있다. 일부 구현들에서, 사용 통계들은 사용자 입력들의 정보를 포함하며, 제1 시퀀스의 복수의 버전들은 사용자 입력들의 상이한 정보와 연관된다. 예컨대, 가장 인기있는 사용자 입력들이 제1 사용자 입력(예컨대, 점프)일 경우, 컴파일링된 셰이더들의 제1 시퀀스의 제1 버전은 대응하는 성능 기준을 만족시키는 데 사용되며, 가장 인기있는 사용자 입력들이 제2 사용자 입력(예컨대, 슈팅)일 경우, 컴파일링된 셰이더들의 제1 시퀀스의 제2 버전은 대응하는 성능 기준을 만족시키는 데 사용된다. 추가로, 일부 구현들에서, 셰이더 해시 테이블(1050)은 사용 통계들에 따라 동적으로 업데이트된다.
[00149] 도 12는 일부 구현들에 따른, (예컨대, 이미지 렌더링의 배경에서 파이프라인화된 셰이더들을 최적화하는 것을 포함하여) 복수의 온라인 게이밍 세션들에 대한 이미지 프레임들을 렌더링하는 예시적인 방법(1200)을 예시한 흐름도이다. 방법(1300)은 선택적으로, 컴퓨터 메모리 또는 비-일시적인 컴퓨터 판독가능 저장 매체(예컨대, 도 5a의 셰이더 파이프라인 최적화기(534))에 저장되고 서버 시스템(114)의 하나 이상의 프로세서들에 의해 실행되는 명령들에 의해 관리된다. 컴퓨터 판독가능 저장 매체는 자기 또는 광학 디스크 저장 디바이스, 솔리드 스테이트 저장 디바이스들, 이를테면 플래시 메모리, 또는 다른 비-휘발성 메모리 디바이스 또는 디바이스들을 포함할 수 있다. 컴퓨터 판독가능 저장 매체 상에 저장된 명령들은 소스 코드, 어셈블리 언어 코드, 오브젝트 코드, 또는 하나 이상의 프로세서들에 의해 해석되는 다른 명령 포맷 중 하나 이상을 포함할 수 있다. 방법(1200)의 일부 동작들은 조합될 수 있고 그리고/또는 일부 동작들의 순서는 변화될 수 있다.
[00150] 방법(1200)은 서버 시스템(114)에서 구현된다. 서버 시스템(114)은 하나 이상의 CPU들(138), 하나 이상의 GPU들(140), 프로그램 실행 동안 CPU들 및/또는 GPU들에 의한 사용을 위한 프로그램들 및 데이터를 저장하는 메인 동적 메모리(144), 및 셰이더 캐시(318)를 포함한다. 하나 이상의 CPU들은 게이밍 타이틀에 대한 복수의 온라인 게이밍 세션들을 병렬로 실행한다(1202). 하나 이상의 CPU들은, 사용자 요청들 또는 입력들에 대한 응답으로 복수의 온라인 게이밍 세션들 각각에 대한 연속적인 이미지 프레임들을 렌더링하도록 GPU들(140)에게 명령한다. 이어서, 하나 이상의 GPU들은 컴파일링된 셰이더들의 제1 시퀀스를 사용하여 복수의 온라인 게이밍 세션들 각각에 대한 복수의 이미지 프레임들을 렌더링한다(1204). 일부 구현들에서, 복수의 온라인 게이밍 세션들은 게이밍 타이틀에 대하여 CPU들 및 GPU들에 의해 프로세싱되는 모든 온라인 게이밍 세션들로부터 샘플링된다.
[00151] 복수의 온라인 게이밍 세션들을 실행하는 동안, 서버 시스템(114)은 게이밍 타이틀과 연관된 복수의 온라인 게이밍 세션들에 대한 성능 기준을 식별하고(1206), 온라인 게이밍 세션들 각각의 실행을 특성화하는 사용 통계들을 수집한다(1208). 일부 구현들에서, 성능 기준은, 복수의 온라인 게이밍 세션들을 실행하는 과정 동안, 컴파일링된 셰이더들의 제1 시퀀스의 총 전력 소비, 코드 사이즈, 평균 레이턴시, 총 캐시 사용량, 및 총 메모리 사용량 중 하나 이상에 대응한다. 일부 구현들에서, 사용 통계들은, 복수의 온라인 게이밍 세션들 각각에 대응하는 컴파일링된 셰이더들의 제1 시퀀스의 사용자 입력들, 전력 소비, 하나 이상의 게이밍 레이턴시들, 코드 사이즈, 메모리 사용량 및 캐시 사용량을 포함한다.
[00152] 서버 시스템(114)은 성능 기준에 관해, 컴파일링된 셰이더들의 제1 시퀀스의 성능을 개선시키도록 컴파일링된 셰이더들의 제1 시퀀스에서 제1 셰이더를 수정하여, 그에 의해 컴파일링된 셰이더들의 수정된 제1 시퀀스를 생성한다(1210). 일부 구현들에서, 성능 기준에 관해, 컴파일링된 셰이더들의 제1 시퀀스의 성능을 개선시키기 위해, 컴파일링된 셰이더들의 제1 시퀀스의 제2 셰이더가 제1 셰이더에 부가하여 수정된다.
[00153] 일부 구현들에서, 컴파일링된 셰이더들의 수정된 제1 시퀀스는 셰이더 캐시에서, 컴파일링된 셰이더들의 제1 시퀀스를 대체한다. 대안적으로, 일부 구현들에서, 온라인 게이밍 세션들의 실행 시에 사용되는 컴파일링된 셰이더들의 제1 시퀀스는 컴파일링된 셰이더들의 제1 시퀀스의 제1 버전으로서 셰이더 캐시에 저장되고, 컴파일링된 셰이더들의 수정된 제1 시퀀스는 컴파일링된 셰이더들의 제1 시퀀스의 제2 버전으로서 셰이더 캐시에 저장된다. 예컨대, 후속 사용자 입력에 대한 응답에 의한 후속 게이밍 콘텐츠 렌더링 동안, 서버 시스템(114)은 온라인 게이밍 세션들 각각의 후속 실행을 위해 특정 성능 기준을 식별하고, 특정 성능 기준에 따라, 복수의 온라인 게이밍 세션들 각각에 대한 복수의 이미지 프레임들을 렌더링하기 위해, 컴파일링된 셰이더들의 제1 시퀀스의 제1 및 제2 버전들 중 하나를 선택한다.
[00154] 일부 구현들에서, 컴파일링된 셰이더들의 제1 시퀀스에서 제1 셰이더를 수정하기 위해, 서버 시스템(114)은, 복수의 온라인 게이밍 세션들의 성능이 성능 기준을 만족시키도록, 컴파일링된 셰이더들의 제1 시퀀스에서 제1 셰이더를 대체하기 위해 대안적인 셰이더 옵션들의 그룹으로부터 대안적인 셰이더를 선택한다. 그 결과, 컴파일링된 셰이더들의 수정된 제1 시퀀스가 대안적인 셰이더를 포함한다. 일부 구현들에서, 대안적인 셰이더 옵션들의 그룹이 셰이더 라이브러리 서버(124)로부터 제공됨을 유의한다. 일부 상황들에서, 대안적인 셰이더 옵션들의 그룹은 서버 시스템(114) 상에서 실행되는 게이밍 타이틀을 관리하는 관리자 사용자에게 제시되며, 서버 시스템(114)은, 관리자 사용자가 로깅한 클라이언트 디바이스(102)를 통해 관리자 사용자로부터 대안적인 셰이더의 사용자 선택을 수신한다.
[00155] 일부 구현들에서, 관리자 사용자는 관리자 클라이언트 디바이스(102) 상에서 실행되는 게임 애플리케이션에 대한 관리자 계정에 로깅하고, 성능 기준들 및 사용 통계들에 기반하여, 컴파일링된 셰이더들의 제1 시퀀스를 수동으로 최적화한다. 이러한 최적화 프로세스 동안, 서버 시스템(114)은 컴파일링된 셰이더들의 제1 시퀀스에서 제1 셰이더를 수정하기 위한 사용자 명령을 수신하며, 그에 따라 제1 셰이더는 사용자 명령에 대한 응답으로, 컴파일링된 셰이더들의 제1 시퀀스에서 수정된다. 반대로, 일부 구현들에서, 성능 기준에 관해, 컴파일링된 셰이더들의 제1 시퀀스의 성능을 개선시키기 위해, 컴파일링된 셰이더들의 제1 시퀀스의 제1 셰이더가 자동으로 그리고 사용자 개입 없이 수정된다.
[00156] 일부 구현들에서, GPU들이 컴파일링된 셰이더들의 제1 시퀀스를 사용하여 복수의 온라인 게이밍 세션들에 대한 이미지 프레임을 렌더링하기 전에, 서버 시스템(114)은, 복수의 온라인 게이밍 세션들이 성능 기준에 따라 렌더링될 필요가 있다고 결정한다. 성능 기준의 관점에서, 복수의 온라인 게이밍 세션들 각각에 대한 복수의 이미지 프레임들을 렌더링하기 위해, 컴파일링된 셰이더들의 제1 시퀀스가 결정된다.
[00157] 일부 구현들에서, 성능 기준은 제1 성능 기준을 포함하며, 복수의 온라인 게이밍 세션들은 제1 기준과는 별개인 제2 성능 기준에 따라 렌더링 및 실행된다. 서버 시스템(114)은 제1 성능 기준을 컴파일링된 셰이더들의 수정된 제1 시퀀스와 연관시키고 제2 성능 기준을 컴파일링된 셰이더들의 제1 시퀀스와 연관시킨다.
[00158] 일부 구현들에서, 성능 기준은 제1 성능 기준을 포함하며, 컴파일링된 셰이더들의 수정된 제1 시퀀스는 셰이더 캐시에 제1 성능 기준과 연관되어 저장된다. 추가로, 일부 구현들에서, 복수의 온라인 게이밍 세션들을 실행하는 동안, 서버 시스템(114)은 게이밍 타이틀과 연관된 복수의 온라인 게이밍 세션들에 대한 제2 성능 기준을 식별하며, 제2 성능 기준에 관해, 컴파일링된 셰이더들의 제1 시퀀스의 성능을 개선시키기 위해, 컴파일링된 셰이더들의 제2 시퀀스를 결정한다. 컴파일링된 셰이더들의 제2 시퀀스는 제2 성능 기준과 연관되어 셰이더 캐시에 저장된다. 부가적으로, 일부 구현들에서, 사용 통계들은 복수의 온라인 게이밍 세션들의 총 전력 소비를 포함하며, 제1 성능 기준 및 제2 성능 기준은 복수의 온라인 게이밍 세션들의 응답 시간들 및 전력 사용량을 각각 최적화한다. 복수의 온라인 게이밍 세션들의 총 전력 소비가 미리 정의된 전력 임계치를 초과한다는 결정에 따라, 서버 시스템(114)은, 컴파일링된 셰이더들의 제2 시퀀스를 선택하고, 컴파일링된 셰이더들의 제2 시퀀스를 사용하여 복수의 온라인 게이밍 세션들 각각에 대한 복수의 이미지 프레임들을 렌더링한다.
[00159] 일부 구현들에서, 서버 시스템(114)은, 복수의 성능 기준들 각각을 컴파일링된 셰이더들의 개개의 시퀀스와 연관시키는 셰이더 해시 테이블을 설정한다. 셰이더 해시에 따라, 성능 기준 및 컴파일링된 셰이더들의 제1 시퀀스는 셰이더 해시 테이블에서 연관된다. 셰이더 해시 테이블은 셰이더 캐시에 저장된다. 추가로, 일부 구현들에서, 사용 통계들은 사용자 입력들의 정보를 포함한다. 컴파일링된 셰이더들의 제1 시퀀스의 복수의 버전들은 셰이더 해시 테이블에서 사용자 입력들의 정보와 연관된다. 부가적으로, 일부 구현들에서, 서버 시스템(114)은, 예컨대 셰이더 캐시 내의 컴파일링된 셰이더들의 제1 시퀀스를 컴파일링된 셰이더들의 수정된 제1 시퀀스로 대체함으로써 사용 통계들에 따라 셰이더 해시 테이블을 동적으로 업데이트한다.
[00160] 셰이더 최적화가 CPU 및 GPU를 갖는 단일 서버 뿐만 아니라 복수의 서버들을 포함하는(즉, 다수의 CPU들 및 GPU들을 갖는) 서버 시스템에 적용가능함을 유의한다. 게이밍 콘텐츠 렌더링에서 사용되는 컴파일링된 셰이더들의 시퀀스를 최적화하는 것에 관한 더 많은 세부사항들은 도 10 및 도 11a 내지 도 11c를 참조하여 위에서 논의된다.
[00161] 도 12의 동작들이 설명되었던 특정한 순서가 단지 예시적일 뿐이며, 설명된 순서가 동작들이 수행될 수 있는 유일한 순서라는 것을 표시하도록 의도되지 않음을 이해해야 한다. 당업자는, 본 명세서에 설명된 바와 같이 컴파일링된 셰이더들의 시퀀스를 최적화하기 위한 다양한 방식들을 인식할 것이다. 부가적으로, 방법들(800 및 900)(예컨대, 도 8a 및 도 8b 그리고 900)에 관해 본 명세서에 설명된 다른 프로세스들의 세부사항들이 또한, 도 12에 관해 위에서 설명된 방법(1200)에 유사한 방식으로 적용가능함을 유의해야 한다. 간결함을 위해, 이들 세부사항들은 여기서 반복되지 않는다.
[00162] 본 출원의 일부 구현들은, 하나 이상의 CPU들, 복수의 GPU들, 프로그램 실행 동안 CPU들 및/또는 GPU들에 의한 사용을 위한 프로그램들 및 데이터를 저장하는 메인 동적 메모리, 비-휘발성 메모리에 저장된 정적 메모리 풀, 및 정적 메모리 풀을 관리하도록 구성된 메모리 콘트롤러를 포함하는 서버 시스템에 관한 것이다. GPU들 각각은 로컬 캐시를 포함하며, 메모리 콘트롤러를 통해 정적 메모리 풀에 액세스하도록 구성된다. 서버 시스템은, 하나 이상의 CPU들 상에서 게이밍 타이틀에 대한 복수의 게이밍 세션들을 병렬로 실행한다. 복수의 게이밍 세션들 각각은 정적 데이터 아이템들과 연관되며, 정적 데이터 아이템을 사용하여 개개의 GPU에 의해 실행가능한 그래픽 연산을 요구하고, 정적 데이터 아이템은 정적 메모리 풀에 저장된다. 하나 이상의 CPU들 상에서 실행되는 게이밍 세션들의 서브세트의 각각의 게이밍 세션에 대해, 서버 시스템은, 그래픽 연산을 개개의 GPU에 할당하고, 개개의 GPU에 의해, 메모리 콘트롤러로부터 정적 데이터 아이템의 카피를 요청하고, 정적 메모리 풀로부터 판독된 정적 데이터 아이템의 카피를 메모리 콘트롤러로부터 수신하고, 개개의 GPU에 의해, 정적 데이터 아이템의 카피를 사용하여 그래픽 연산을 수행하며, 개개의 게이밍 세션과 연관된 그래픽 연산의 결과를 로컬적으로 저장한다.
[00163] 요약으로, 본 출원의 일부 구현들은, 하나 이상의 CPU들, 복수의 GPU들, 프로그램 실행 동안 CPU들 및/또는 GPU들에 의한 사용을 위한 프로그램들 및 데이터를 저장하는 메인 동적 메모리, 비-휘발성 메모리에 저장된 정적 메모리 풀, 및 정적 메모리 풀을 관리하도록 구성된 메모리 콘트롤러를 포함하는 서버 시스템 상에 게이밍 타이틀을 로딩하는 것에 관한 것이다. CPU들은, 게이밍 타이틀에 대응하는 실행가능 게이밍 프로그램을 메인 동적 메모리에 로딩한다. CPU들은 복수의 온라인 게이밍 세션들을 병렬로 실행하도록 구성된다. 게이밍 세션들 각각은 실행가능 게이밍 프로그램에 대응하며, 개개의 온라인 게이밍 세션을 렌더링하기 위해 할당된 개개의 GPU에 의해 실행가능한 그래픽 연산을 요구한다. CPU들은 복수의 게이밍 세션들의 그래픽 연산에서 사용된 정적 데이터 아이템을 식별한다. 메모리 콘트롤러는 정적 데이터 아이템을 정적 메모리 풀에 저장하고, 온라인 게이밍 세션들을 실행하는 GPU들이 그래픽 연산을 수행하는 동안 정적 데이터 아이템에 액세스할 수 있게 한다.
[00164] 본 출원의 일부 구현들은 게이밍 타이틀에 대한 동시적인 이미지 렌더링 및 셰이더 최적화에 관한 것이다. 서버 시스템은 하나 이상의 CPU들, 복수의 GPU들, 프로그램 실행 동안 CPU들 및/또는 GPU들에 의한 사용을 위한 프로그램들 및 데이터를 저장하는 메인 동적 메모리, 및 셰이더 캐시를 포함한다. CPU들은 게이밍 타이틀에 대한 복수의 온라인 게이밍 세션들을 병렬로 실행한다. GPU들은 컴파일링된 셰이더들의 제1 시퀀스를 사용하여 복수의 온라인 게이밍 세션들 각각에 대한 복수의 이미지 프레임들을 렌더링한다. 복수의 온라인 게이밍 세션들을 실행하는 동안, 서버 시스템은, 게이밍 타이틀과 연관된 복수의 온라인 게이밍 세션들에 대한 성능 기준을 식별하고, 온라인 게이밍 세션들 각각의 실행을 특성화하는 사용 통계들을 수집하며, 성능 기준에 관해, 컴파일링된 셰이더들의 제1 시퀀스의 성능을 개선시키도록 컴파일링된 셰이더들의 제1 시퀀스에서 제1 셰이더를 수정해서, 컴파일링된 셰이더들의 수정된 제1 시퀀스를 생성한다.
[00165] 다양한 구현들에 대한 참조가 상세히 이루어졌으며, 다양한 구현들의 예들은 첨부한 도면들에 예시되어 있다. 위의 상세한 설명에서, 다수의 특정한 세부사항들이 본 발명 및 설명된 구현들의 완전한 이해를 제공하기 위해 기재된다. 그러나, 본 발명은 이러한 특정한 세부사항들 없이 실시될 수 있다. 다른 예시들에서, 잘-알려진 방법들, 절차들, 컴포넌트들, 및 회로들은 구현들의 양상들을 불필요하게 모호하게 하지 않기 위해 상세히 설명되지 않는다.
[00166] 용어들 "제1", "제2" 등이 다양한 엘리먼트들을 설명하기 위해 본 명세서에서 사용될 수 있지만, 이들 엘리먼트들이 이들 용어들에 의해 제한되지 않아야 함을 이해할 것이다. 이들 용어들은 하나의 엘리먼트를 다른 엘리먼트와 구별하기 위해서만 사용된다. 예컨대, 제1 디바이스의 모든 발생들이 일관되게 이름변경되고 제2 디바이스의 모든 발생들이 일관되게 이름변경되는 한 설명의 의미를 변화시키지 않으면서, 제1 디바이스는 제2 디바이스로 지칭될 수 있고, 유사하게 제2 디바이스는 제1 디바이스로 지칭될 수 있다. 제1 디바이스 및 제2 디바이스 둘 모두는 디바이스이지만, 그들은 동일한 디바이스가 아니다.
[00167] 본 명세서에서 사용된 용어는 특정한 구현들만을 설명하려는 목적을 위한 것이며, 청구범위를 제한하도록 의도되지 않는다. 구현들의 설명 및 첨부된 청구범위에서 사용된 바와 같이, 단수형들은, 문맥상 명확하게 달리 표시되지 않으면, 복수형들을 또한 포함하도록 의도된다. 본 명세서에서 사용된 바와 같이, 용어 "및/또는"은 연관된 열거된 항목들 중 하나 이상의 항목들의 임의의 그리고 모든 가능한 조합들을 지칭하고 포함한다는 것이 또한 이해될 것이다. 본 명세서에서 사용되는 경우 용어들 "포함한다" 및/또는 "포함하는"이 언급된 특성들, 정수들, 단계들, 동작들, 엘리먼트들, 및/또는 컴포넌트들의 존재를 특정하지만, 하나 이상의 다른 특징들, 정수들, 단계들, 동작들, 엘리먼트들, 컴포넌트들, 및/또는 그들의 그룹들의 존재 또는 부가를 배제하지는 않는다는 것이 추가로 이해될 것이다.
[00168] 본 명세서에서 사용된 바와 같이, 용어 "~라면"은 문맥에 의존하여, 언급된 선행 조건이 " 참인경우" 또는 "참일 시에" 또는 "참이라고 결정하는 것에 대한 응답으로" 또는 "참이라는 결정에 따라" 또는 "참이라는 것을 검출하는 것에 대한 응답으로"를 의미하도록 해석될 수 있다. 유사하게, 어구 "[언급된 선행 조건이 참이라고] 결정하면" 또는 "[언급된 선행 조건이 참]이면" 또는 "[언급된 선행 조건이 참]일 때"는 문맥에 의존하여, 언급된 선행 조건이 사실"이라고 결정할 시에" 또는 "결정하는 것에 대한 응답으로" 또는 "결정에 따라" 또는 "검출할 시에" 또는 "검출하는 것에 대한 응답으로"를 의미하도록 해석될 수 있다.
[00169] 전술한 설명은 설명의 목적을 위해 특정한 구현들을 참조하여 설명되었다. 그러나, 위의 예시적인 논의들은, 총망라하거나 본 발명을 개시된 정확한 형태들로 제한하도록 의도되지 않는다. 많은 수정들 및 변형들이 위의 교시 내용들에 비추어 가능하다. 본 발명의 원리들 및 본 발명의 실제 애플리케이션들을 최상으로 설명하고, 그에 의해, 당업자들이 고려된 특정 사용에 적합하게 본 발명 및 다양한 구현들을 다양한 변형들과 함께 최상으로 이용할 수 있게 하기 위해 구현들이 선정되고 설명되었다.

Claims (10)

  1. 게이밍 타이틀을 로딩하기 위한 방법으로서,
    서버 시스템에서 - 상기 서버 시스템은, 하나 이상의 CPU들, 복수의 GPU들, 프로그램 실행 동안 상기 CPU들 및/또는 상기 GPU들에 의한 사용을 위한 프로그램들 및 데이터를 저장하는 메인 동적 메모리, 비-휘발성 메모리에 저장된 정적 메모리 풀, 및 상기 정적 메모리 풀을 관리하도록 구성된 메모리 콘트롤러를 포함하고, 상기 GPU들 각각은 상기 메모리 콘트롤러를 통해 상기 정적 메모리 풀에 액세스하도록 구성됨 -:
    상기 하나 이상의 CPU들에 의해, 게이밍 타이틀에 대응하는 실행가능 게이밍 프로그램을 상기 메인 동적 메모리에 로딩하는 단계 - 상기 하나 이상의 CPU들은 복수의 온라인 게이밍 세션들을 병렬로 실행하도록 구성되고, 상기 게이밍 세션들 각각은 상기 실행가능 게이밍 프로그램에 대응하고, 그리고 상기 복수의 온라인 게이밍 세션들 각각은 개개의 온라인 게이밍 세션을 렌더링하기 위해 할당된 개개의 GPU에 의해 실행가능한 그래픽 연산을 요구함 -;
    상기 하나 이상의 CPU들에 의해, 상기 복수의 게이밍 세션들의 그래픽 연산에서 사용되는 정적 데이터 아이템을 식별하는 단계;
    상기 메모리 콘트롤러에 의해, 상기 정적 데이터 아이템을 상기 정적 메모리 풀에 저장하는 단계; 및
    상기 메모리 콘트롤러에 의해, 상기 온라인 게이밍 세션들을 실행하는 상기 GPU들이 상기 그래픽 연산을 수행하는 동안 상기 정적 데이터 아이템에 액세스할 수 있게 하는 단계를 포함하는, 게이밍 타이틀을 로딩하기 위한 방법.
  2. 제1항에 있어서,
    상기 정적 데이터 아이템은 제1 정적 데이터 아이템을 포함하고, 상기 제1 정적 데이터 아이템은 미리결정된 정적 데이터 아이템들의 리스트에서 상기 하나 이상의 CPU들에 의해 식별되고, 그리고 상기 미리결정된 정적 데이터 아이템들의 리스트는 정적 데이터 아이템들의 제1 서브세트 및 정적 데이터 아이템들의 제2 서브세트를 포함하고,
    상기 방법은:
    상기 메모리 콘트롤러에 의해, 상기 제1 정적 데이터 아이템을 포함하는 상기 정적 데이터 아이템들의 제1 서브세트를 상기 정적 메모리 풀에 저장하는 단계; 및
    상기 메모리 콘트롤러에 의해, 상기 정적 데이터 아이템들의 제2 서브세트를 상기 메인 동적 메모리에 저장하는 단계를 더 포함하는, 게이밍 타이틀을 로딩하기 위한 방법.
  3. 제1항 또는 제2항에 있어서,
    상기 정적 데이터 아이템은 상기 게이밍 타이틀의 렌더링에서 사용되는 표준 정적 데이터 아이템이고,
    상기 방법은, 상기 정적 데이터 아이템을 상기 정적 메모리 풀에 저장하기 전에, 상기 서버 시스템 또는 원격 라이브러리 서버의 하드 드라이브로부터 상기 정적 데이터 아이템을 리트리브(retrieve)하는 단계를 더 포함하는, 게이밍 타이틀을 로딩하기 위한 방법.
  4. 제1항 또는 제2항에 있어서,
    상기 정적 데이터 아이템은, 상기 게이밍 타이틀의 개발자에 의해 미리정의되고 그리고 상기 서버 시스템의 하드 드라이브에 저장된 커스텀(custom) 정적 데이터 아이템이고,
    상기 방법은, 상기 정적 데이터 아이템을 상기 정적 메모리 풀에 저장하기 전에, 상기 서버 시스템의 상기 하드 드라이브로부터 상기 정적 데이터 아이템을 리트리브하는 단계를 더 포함하는, 게이밍 타이틀을 로딩하기 위한 방법.
  5. 제1항 또는 제2항에 있어서,
    상기 실행가능 게이밍 프로그램에 따라, 상기 하나 이상의 CPU들에 의해, 상기 복수의 GPU들 각각 상에서 실행될 상기 복수의 온라인 게이밍 세션들의 서브세트에 상기 복수의 GPU들 각각을 할당하는 단계; 및
    상기 복수의 게이밍 세션들 각각에 대해, 개개의 GPU에 의한 상기 그래픽 연산의 실행 동안, 상기 개개의 GPU에 의해, 상기 메모리 콘트롤러를 통해 상기 정적 메모리 풀로부터 상기 정적 데이터 아이템의 카피를 획득하고 그리고 상기 정적 데이터 아이템의 카피를 사용하여 상기 그래픽 연산을 수행하는 단계를 더 포함하는, 게이밍 타이틀을 로딩하기 위한 방법.
  6. 제5항에 있어서,
    상기 복수의 게이밍 세션들 각각에 대해, 상기 개개의 GPU에 의한 상기 그래픽 연산의 실행 동안, 개개의 온라인 게이밍 세션과 연관하여 동적 데이터 아이템 및 사용자 정보를 상기 메인 동적 메모리에 저장하는 단계를 더 포함하는, 게이밍 타이틀을 로딩하기 위한 방법.
  7. 제5항에 있어서,
    상기 복수의 게이밍 세션들 각각에 대해, 상기 개개의 GPU에 의한 상기 그래픽 연산의 실행 동안, 상기 정적 데이터 아이템의 카피를 상기 개개의 GPU의 개개의 로컬 캐시에 로딩하는 단계를 더 포함하는, 게이밍 타이틀을 로딩하기 위한 방법.
  8. 제5항에 있어서,
    상기 개개의 GPU에 의해, 상기 정적 메모리 풀로부터 상기 정적 데이터 아이템의 카피를 획득하는 것은:
    상기 복수의 게이밍 세션들의 서브세트에 대해, 상기 정적 데이터 아이템의 카피를 상기 GPU들의 로컬 캐시에 한번 로딩하고, 그리고 상기 복수의 게이밍 세션들의 서브세트에 대응하는 상기 GPU들의 서브세트에 의해 상기 정적 데이터 아이템의 카피를 공유하는 것을 더 포함하는, 게이밍 타이틀을 로딩하기 위한 방법.
  9. 서버 시스템으로서,
    하나 이상의 CPU들;
    복수의 GPU들; 및
    상기 CPU들 및/또는 GPU들에 의한 실행을 위한 하나 이상의 프로그램들을 저장하는 메모리를 포함하고,
    상기 메모리는 메모리 콘트롤러에 의해 관리되는 메인 동적 메모리 및 정적 메모리 풀을 적어도 포함하고,
    상기 하나 이상의 프로그램들은 제1항 또는 제2항의 방법을 구현하기 위한 명령들을 포함하는, 서버 시스템.
  10. 서버 시스템의 하나 이상의 프로세서들에 의한 실행을 위해 구성된 하나 이상의 프로그램들을 저장하는 비-일시적인 컴퓨터 판독가능 저장 매체로서,
    상기 서버 시스템은 하나 이상의 CPU들 및 복수의 GPU들을 포함하고, 그리고 상기 비-일시적인 컴퓨터 판독가능 저장 매체는 메모리 콘트롤러에 의해 관리되는 메인 동적 메모리 및 정적 메모리 풀을 적어도 포함하고,
    상기 하나 이상의 프로그램들은 제1항 또는 제2항의 방법을 구현하기 위한 명령들을 포함하는, 비-일시적인 컴퓨터 판독가능 저장 매체.
KR1020237042902A 2018-04-10 2019-04-09 게이밍 렌더링에서의 메모리 관리 KR20230173223A (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201862655688P 2018-04-10 2018-04-10
US62/655,688 2018-04-10
PCT/US2019/026611 WO2019199848A1 (en) 2018-04-10 2019-04-09 Memory management in gaming rendering
KR1020227023033A KR102614649B1 (ko) 2018-04-10 2019-04-09 게이밍 렌더링에서의 메모리 관리

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020227023033A Division KR102614649B1 (ko) 2018-04-10 2019-04-09 게이밍 렌더링에서의 메모리 관리

Publications (1)

Publication Number Publication Date
KR20230173223A true KR20230173223A (ko) 2023-12-26

Family

ID=66397450

Family Applications (3)

Application Number Title Priority Date Filing Date
KR1020237042902A KR20230173223A (ko) 2018-04-10 2019-04-09 게이밍 렌더링에서의 메모리 관리
KR1020207015259A KR102419100B1 (ko) 2018-04-10 2019-04-09 게이밍 렌더링에서의 메모리 관리
KR1020227023033A KR102614649B1 (ko) 2018-04-10 2019-04-09 게이밍 렌더링에서의 메모리 관리

Family Applications After (2)

Application Number Title Priority Date Filing Date
KR1020207015259A KR102419100B1 (ko) 2018-04-10 2019-04-09 게이밍 렌더링에서의 메모리 관리
KR1020227023033A KR102614649B1 (ko) 2018-04-10 2019-04-09 게이밍 렌더링에서의 메모리 관리

Country Status (6)

Country Link
US (3) US11110348B2 (ko)
EP (3) EP4141781B1 (ko)
JP (2) JP7073494B2 (ko)
KR (3) KR20230173223A (ko)
CN (1) CN111417978A (ko)
WO (1) WO2019199848A1 (ko)

Families Citing this family (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10616086B2 (en) * 2012-12-27 2020-04-07 Navidia Corporation Network adaptive latency reduction through frame rate control
US10238965B2 (en) * 2016-04-28 2019-03-26 Sony Interactive Entertainment America Llc Cloud gaming device handover
US10456672B2 (en) 2016-05-19 2019-10-29 Google Llc Methods and systems for facilitating participation in a game session
EP3600581B1 (en) 2017-10-10 2024-02-21 Google LLC Distributed sample-based game profiling with game metadata and metrics and gaming api platform supporting third-party content
US11140207B2 (en) 2017-12-21 2021-10-05 Google Llc Network impairment simulation framework for verification of real time interactive media streaming systems
EP3700640B1 (en) 2018-03-22 2021-05-26 Google LLC Methods and systems for rendering and encoding content for online interactive gaming sessions
US11077364B2 (en) 2018-04-02 2021-08-03 Google Llc Resolution-based scaling of real-time interactive graphics
EP3773953B1 (en) 2018-04-02 2024-06-19 Google LLC Methods, devices, and systems for interactive cloud gaming
US11872476B2 (en) 2018-04-02 2024-01-16 Google Llc Input device for an electronic system
US10887574B2 (en) 2018-07-31 2021-01-05 Intel Corporation Selective packing of patches for immersive video
WO2020102493A1 (en) 2018-11-16 2020-05-22 Google Llc Shadow tracking of real-time interactive simulations for complex system analysis
CN112348732B (zh) * 2019-08-08 2023-11-17 华为技术有限公司 基于图形渲染管线的模型推理方法、装置及存储介质
US11321900B2 (en) * 2019-11-22 2022-05-03 Sony Interactive Entertainment Inc. Systems and methods for adjusting one or more parameters of a GPU
US11798118B2 (en) 2019-12-20 2023-10-24 Intel Corporation Asset caching in cloud rendering computing architectures
US20210245047A1 (en) * 2020-02-10 2021-08-12 Intel Corporation Continuum architecture for cloud gaming
WO2021183105A1 (en) * 2020-03-09 2021-09-16 Google Llc Efficient processing of neural network models
CN111736850B (zh) * 2020-07-21 2020-12-22 腾讯科技(深圳)有限公司 图像处理方法、装置、服务器及介质
US20220129295A1 (en) 2020-10-25 2022-04-28 Meta Platforms, Inc. Server-side hosted environment for a cloud gaming system
US11722393B2 (en) * 2020-12-15 2023-08-08 Caterpillar Inc. Systems and methods for managing on-site communications for latency-dependent applications
CN112416605B (zh) * 2020-12-16 2021-11-05 北京蔚领时代科技有限公司 一种基于互联网的分布式显卡调用方法及装置
US11726755B2 (en) * 2021-04-09 2023-08-15 Nvidia Corporation Caching of compiled shader programs in a cloud computing environment
CN113082705B (zh) * 2021-05-08 2023-09-15 腾讯科技(上海)有限公司 游戏场景切换方法、装置、计算机设备及存储介质
CN113332706B (zh) * 2021-06-18 2024-02-20 深圳市景创科技电子股份有限公司 一种在WiFi网络下处理游戏手柄指令的方法和装置
US11900136B2 (en) * 2021-07-28 2024-02-13 Sony Interactive Entertainment LLC AoT compiler for a legacy game
CN115937380A (zh) * 2021-08-24 2023-04-07 荣耀终端有限公司 图形渲染方法、装置及存储介质
EP4174134A4 (en) 2021-09-02 2024-02-21 Lg Chem, Ltd. THERMOPLASTIC RESIN COMPOSITION, PROCESS FOR PREPARATION THEREFOR AND MOLDED ARTICLE COMPRISING THE SAME
US11727531B2 (en) * 2021-09-23 2023-08-15 Google Llc Creating secure pipeline cache objects using differential privacy techniques
US20230127685A1 (en) * 2021-10-26 2023-04-27 Sony Interactive Entertainment LLC Gameplay roulette
CN114115873A (zh) * 2021-11-18 2022-03-01 网易(杭州)网络有限公司 着色器数据处理方法、装置、设备及存储介质
JP7454003B2 (ja) * 2022-02-16 2024-03-21 任天堂株式会社 情報処理プログラム、情報処理システム、情報処理装置、および情報処理方法
CN114225385B (zh) * 2022-02-25 2022-07-08 腾讯科技(深圳)有限公司 云游戏数据处理方法、装置、设备及存储介质
US20230293986A1 (en) * 2022-03-17 2023-09-21 Bidstack Group PLC Server-side gaming method and system for the delivery of remotely-rendered content comprising impression content
CN117130662A (zh) * 2023-09-19 2023-11-28 摩尔线程智能科技(北京)有限责任公司 一种指令读取方法及l2指令缓存、电子设备和存储介质
CN117883789B (zh) * 2024-03-15 2024-05-28 腾讯科技(深圳)有限公司 数据获取方法、装置、设备、可读存储介质及程序产品

Family Cites Families (151)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5892897A (en) 1997-02-05 1999-04-06 Motorola, Inc. Method and apparatus for microprocessor debugging
US7548238B2 (en) * 1997-07-02 2009-06-16 Nvidia Corporation Computer graphics shader systems and methods
US6948092B2 (en) 1998-12-10 2005-09-20 Hewlett-Packard Development Company, L.P. System recovery from errors for processor and associated components
US6393582B1 (en) 1998-12-10 2002-05-21 Compaq Computer Corporation Error self-checking and recovery using lock-step processor pair architecture
US20060287098A1 (en) 2001-09-28 2006-12-21 Morrow James W System and method for gaming-content configuration and management system
JP2003236251A (ja) 2002-02-15 2003-08-26 Aruze Corp キャラクタ管理システム
US7015909B1 (en) * 2002-03-19 2006-03-21 Aechelon Technology, Inc. Efficient use of user-defined shaders to implement graphics operations
US7711847B2 (en) 2002-04-26 2010-05-04 Sony Computer Entertainment America Inc. Managing users in a multi-user network game environment
US7803052B2 (en) 2002-06-28 2010-09-28 Microsoft Corporation Discovery and distribution of game session information
GB2405599A (en) 2002-07-05 2005-03-09 Dominic Clancy System and method for playing an interactive game using a mobile device
JP3495032B1 (ja) 2002-07-24 2004-02-09 コナミ株式会社 ゲーム進行管理装置、ゲーム用サーバ装置、端末装置、ゲーム進行管理方法及びゲーム進行管理プログラム
US20040198403A1 (en) 2002-07-25 2004-10-07 Pedersen Claus Aagaard Gaming concept for wireless terminals
US9138644B2 (en) 2002-12-10 2015-09-22 Sony Computer Entertainment America Llc System and method for accelerated machine switching
AU2002368446A1 (en) 2002-12-10 2004-06-30 Nokia Corporation Method and device for continuing an electronic multi-player game, in case of an absence of a player of said game
US8661496B2 (en) 2002-12-10 2014-02-25 Ol2, Inc. System for combining a plurality of views of real-time streaming interactive video
US8549574B2 (en) 2002-12-10 2013-10-01 Ol2, Inc. Method of combining linear content and interactive content compressed together as streaming interactive video
US10664138B2 (en) 2003-03-14 2020-05-26 Comcast Cable Communications, Llc Providing supplemental content for a second screen experience
EP1652044A4 (en) 2003-07-15 2006-08-30 Wildtangent Inc LAUNCHING MULTI-USER SESSIONS, SYSTEM AND INVITATION METHOD THEREOF
US7966642B2 (en) 2003-09-15 2011-06-21 Nair Ajith N Resource-adaptive management of video storage
WO2005029270A2 (en) 2003-09-19 2005-03-31 Wildtangent, Inc. Joint consumption of content invitation methods and apparatus
US7261798B2 (en) 2004-01-28 2007-08-28 Hamilton Sundstrand Corporation Assembly for maintaining compression for electrical contact of the active area of an electrochemical cell
US8241129B2 (en) 2005-06-20 2012-08-14 Microsoft Corporation Setting up on-line game sessions out of a game context
WO2007044908A2 (en) 2005-10-11 2007-04-19 Thq Wireless Inc. Method and apparatus for finding desirable multi-player games for players
KR20070082395A (ko) 2006-02-16 2007-08-21 엔에이치엔(주) 유알엘을 이용한 플래시 게임 초대 시스템 및 방법
WO2007101198A2 (en) 2006-02-27 2007-09-07 Adra Hosni I System and method for dynamically tracking and state forecasting tagged entities
US20070293319A1 (en) 2006-06-20 2007-12-20 Microsoft Corporation Transfer of Features Between Gaming Devices
US7925485B2 (en) 2006-10-25 2011-04-12 International Business Machines Corporation System and apparatus for managing latency-sensitive interaction in virtual environments
CN101068258B (zh) 2006-12-14 2011-09-21 腾讯科技(深圳)有限公司 一种电子游戏的控制方法及控制系统
US20080220878A1 (en) 2007-02-23 2008-09-11 Oliver Michaelis Method and Apparatus to Create or Join Gaming Sessions Based on Proximity
WO2008104221A1 (en) 2007-02-27 2008-09-04 Telefonaktiebolaget Lm Ericsson (Publ) Method and apparatus for use in multiplayer server-based gaming
JP5003252B2 (ja) * 2007-04-04 2012-08-15 凸版印刷株式会社 画像表示装置及び画像表示方法
KR101422005B1 (ko) 2007-07-04 2014-07-23 엘지전자 주식회사 디스펜서 및 이를 구비하는 냉장고
JP5468193B2 (ja) 2007-08-06 2014-04-09 任天堂株式会社 コントローラカバー
US8235817B2 (en) 2009-02-12 2012-08-07 Sony Computer Entertainment America Llc Object based observation
US8979647B2 (en) 2007-10-26 2015-03-17 Microsoft Technology Licensing, Llc Method of providing player status and ability to join games
US9498714B2 (en) 2007-12-15 2016-11-22 Sony Interactive Entertainment America Llc Program mode switching
US8613673B2 (en) 2008-12-15 2013-12-24 Sony Computer Entertainment America Llc Intelligent game loading
US20100016081A1 (en) 2008-03-20 2010-01-21 Gdi Game Domain International Plc Game server
JP5075727B2 (ja) 2008-04-25 2012-11-21 株式会社日立製作所 ストリーム配信システム及び障害検知方法
US8200795B2 (en) 2008-06-05 2012-06-12 Sony Computer Entertainment Inc. Mobile phone game interface
US20100073712A1 (en) 2008-09-19 2010-03-25 Konica Minolta Systems Laboratory, Inc. Print job assignment method allowing user-prioritization
US9498711B2 (en) 2008-11-04 2016-11-22 Quado Media Inc. Multi-player, multi-screens, electronic gaming platform and system
US20120079080A1 (en) 2009-02-11 2012-03-29 Shervin Pishevar Apparatuses, Methods and Systems For An Interactive Proximity Display Tether With Remote Co-Play
CN101887485A (zh) 2009-05-14 2010-11-17 灰熊(北京)科技有限公司 一种在棋牌游戏中实现稳妥的掉线重连的方法
US9723319B1 (en) 2009-06-01 2017-08-01 Sony Interactive Entertainment America Llc Differentiation for achieving buffered decoding and bufferless decoding
US8621585B2 (en) 2009-06-16 2013-12-31 Z2Live, Inc. Invitation service for multi-device application sessions
US9155963B2 (en) * 2009-11-25 2015-10-13 Disney Enterprises, Inc. Collaborative online ranking
US8352798B2 (en) 2009-12-10 2013-01-08 International Business Machines Corporation Failure detection and fencing in a computing system
CN102195935B (zh) 2010-03-03 2015-07-29 深圳市腾讯计算机系统有限公司 游戏托管系统及方法
JP5730914B2 (ja) 2010-03-05 2015-06-10 ブラス・モンキー・インコーポレイテッドBrass Monkey,Inc. Webブラウザにおける双方向通信および内容制御のシステムおよび方法
US8591334B2 (en) 2010-06-03 2013-11-26 Ol2, Inc. Graphical user interface, system and method for implementing a game controller on a touch-screen device
EP2621594B1 (en) 2010-09-13 2016-08-10 Sony Computer Entertainment America LLC Dual mode program execution and loading
US8788243B2 (en) 2011-02-14 2014-07-22 Disney Enterprises, Inc. Performance metrics gathering from multiple video game platforms
US8814697B2 (en) 2011-04-19 2014-08-26 Sony Computer Entertainment America Llc Method and apparatus for use in preserving a game state
JP5076132B1 (ja) * 2011-05-25 2012-11-21 株式会社スクウェア・エニックス・ホールディングス 描画制御装置、その制御方法、プログラム、記録媒体、描画サーバ、及び描画システム
US9412193B2 (en) * 2011-06-01 2016-08-09 Apple Inc. Run-time optimized shader program
US20130017884A1 (en) 2011-07-13 2013-01-17 Igt Methods and apparatus for providing secure logon to a gaming machine using a mobile device
US8814956B2 (en) 2011-07-14 2014-08-26 Semiconductor Energy Laboratory Co., Ltd. Power storage device, electrode, and manufacturing method thereof
US9167260B2 (en) 2011-08-02 2015-10-20 Advanced Micro Devices, Inc. Apparatus and method for video processing
KR101817652B1 (ko) 2011-09-01 2018-02-22 삼성전자주식회사 게임 스트리밍 데이터 수신 방법 및 그를 위한 장치, 및 게임 스트리밍 데이터 제공 방법 및 그를 위한 서버
US9465738B2 (en) * 2011-11-07 2016-10-11 Square Enix Holdings Co., Ltd. Information processing system, control method, program, and recording medium
US9773344B2 (en) * 2012-01-11 2017-09-26 Nvidia Corporation Graphics processor clock scaling based on idle time
JP5887365B2 (ja) 2012-01-24 2016-03-16 株式会社ソニー・コンピュータエンタテインメント 情報処理装置および情報処理システム
US20130221923A1 (en) 2012-02-23 2013-08-29 Whalen Furniture Manufacturing Inc. Universal charging system and battery pack for video game controllers
US9868062B2 (en) 2012-03-13 2018-01-16 Sony Interactive Entertainment America Llc System, method, and graphical user interface for controlling an application on a tablet
US10559123B2 (en) 2012-04-04 2020-02-11 Qualcomm Incorporated Patched shading in graphics processing
US20130274021A1 (en) 2012-04-11 2013-10-17 Meteor Entertainment, Inc. Computing platform for supporting massively multi-player online games
US9208642B2 (en) 2012-04-23 2015-12-08 Touchspin Gaming Ag Multiplayer slot machine gaming
US20140006517A1 (en) 2012-07-02 2014-01-02 WUPIMA, Inc. System and method for social invitations to facilitate playing and sharing of mobile application or mobile game on mobile device
KR101923113B1 (ko) 2012-07-12 2018-11-28 캠프모바일 주식회사 이동통신 단말기의 메시징 서비스를 이용한 초대정보 처리방법, 이를 수행하는 서비스 서버, 이동통신 단말기 및 컴퓨터로 판독 가능한 기록매체
US20140032670A1 (en) 2012-07-30 2014-01-30 Google Inc. Access control in communication environments
JP5563633B2 (ja) 2012-08-31 2014-07-30 株式会社スクウェア・エニックス ビデオゲーム処理装置、およびビデオゲーム処理プログラム
US8663004B1 (en) 2012-09-05 2014-03-04 Kabam, Inc. System and method for determining and acting on a user's value across different platforms
DE112013005689T5 (de) 2012-11-28 2015-09-10 Nvidia Corporation Tragbare Spielekonsole
US8870661B2 (en) 2012-12-21 2014-10-28 Sony Computer Entertainment America Llc Cloud-based game slice generation and frictionless social sharing with instant play
EP2750032B1 (en) 2012-12-27 2020-04-29 Sony Computer Entertainment America LLC Methods and systems for generation and execution of miniapp of computer application served by cloud computing system
EP2952003B1 (en) 2013-01-30 2019-07-17 Intel Corporation Content adaptive partitioning for prediction and coding for next generation video
US11185783B2 (en) 2013-03-14 2021-11-30 Sony Interactive Entertainment Inc. Controller emulation for cloud gaming
MX361278B (es) 2013-03-14 2018-12-03 Univ Georgia State Res Found Inhibición o reducción del crecimiento de hongos.
US20140274384A1 (en) 2013-03-15 2014-09-18 Electronic Arts Inc. Delivering and consuming interactive video gaming content
US9628332B2 (en) 2013-05-20 2017-04-18 Microsoft Technology Licensing, Llc Resource allocation to game titles in a remote gaming environment
US9295915B2 (en) 2013-05-20 2016-03-29 Microsoft Technology Licensing, Llc Game availability in a remote gaming environment
US9339733B2 (en) 2013-05-22 2016-05-17 Wesley John Boudville Barcode-based methods to enhance mobile multiplayer games
US10092834B2 (en) 2013-05-23 2018-10-09 Kabushiki Kaisha Square Enix Holdings Dynamic allocation of rendering resources in a cloud gaming system
US10587663B2 (en) 2013-05-31 2020-03-10 Verily Life Sciences Llc Video stream preview
US9675874B1 (en) 2013-07-18 2017-06-13 nWay, Inc. Multi-player gaming system
US9723051B2 (en) 2013-08-13 2017-08-01 Criteo Sa Setting first-party cookies by redirection
US20150087414A1 (en) 2013-09-26 2015-03-26 Cellco Partnership D/B/A Verizon Wireless Cloud gaming implemented using a mobile device and a display device
JP6292707B2 (ja) 2013-10-22 2018-03-14 任天堂株式会社 情報処理システム、情報処理装置、情報処理プログラム、および情報処理方法
US9592446B2 (en) 2013-12-13 2017-03-14 DeNA Co., Ltd. Electronic game providing device and non-transitory computer-readable storage medium storing electronic game program
US20160293134A1 (en) * 2013-12-26 2016-10-06 Square Enix Holdings Co., Ltd. Rendering system, control method and storage medium
WO2015115512A1 (ja) 2014-01-29 2015-08-06 独立行政法人産業技術総合研究所 シクロデキストリンの利用による抗がん活性が増強されたアシュワガンダ葉の水抽出物の調製方法、及びアシュワガンダ葉を含む医薬組成物
JP6376638B2 (ja) 2014-01-29 2018-08-22 株式会社コロプラ ゲームに関わるサーバコンピュータ及びゲームプログラム
KR102100161B1 (ko) * 2014-02-04 2020-04-14 삼성전자주식회사 Gpu 데이터 캐싱 방법 및 그에 따른 데이터 프로세싱 시스템
CN104866699B (zh) 2014-02-25 2017-07-14 上海征途信息技术有限公司 一种网络游戏智能化数据分析方法
US9912562B2 (en) 2014-03-31 2018-03-06 Microsoft Technology Licensing, Llc Measuring latency in an interactive application
US20150297998A1 (en) 2014-04-16 2015-10-22 Microsoft Corporation Hyperlink initiation of game sessions
US9928565B2 (en) 2014-04-21 2018-03-27 Qualcomm Incorporated Flex rendering based on a render target in graphics processing
GB2525437B (en) 2014-04-25 2016-05-25 Cheng Uei Prec Ind Co Ltd Push-button structure
US9940686B2 (en) * 2014-05-14 2018-04-10 Intel Corporation Exploiting frame to frame coherency in a sort-middle architecture
EP3155525A2 (en) 2014-06-13 2017-04-19 Convida Wireless, LLC Automated service profiling and orchestration
US9393486B2 (en) 2014-06-27 2016-07-19 Amazon Technologies, Inc. Character simulation and playback notification in game session replay
US20160005256A1 (en) 2014-07-04 2016-01-07 Trendy Entertainment Influence system and methods
US10021214B2 (en) 2014-07-22 2018-07-10 Microsoft Technology Licensing, Llc Synthetic transactions between communication endpoints
US11083963B2 (en) 2014-07-22 2021-08-10 Sony Interactive Entertainment LLC Save game load time reduction for cloud gaming
US9975044B2 (en) 2014-07-22 2018-05-22 Ngage SporTek Ltd. System and method for social gaming
US20170124812A1 (en) 2014-12-12 2017-05-04 Synergy Blue, Llc Gaming and wagering techniques relating to skill-based gaming
US10255765B2 (en) 2015-08-20 2019-04-09 Synergy Blue, Llc Gaming aspects relating to multiplayer/tournament hybrid arcade/wager-based games
US10909809B2 (en) 2014-12-12 2021-02-02 Synergy Blue Llc Graphical user interface and computer processing techniques for facilitating user interaction with electronic gaming devices
CN104598292B (zh) 2014-12-15 2017-10-03 中山大学 一种应用于云游戏系统的自适应流适配和资源优化方法
US10007965B2 (en) * 2014-12-16 2018-06-26 Intel Corporation Dynamic kernel modification for graphics processing units
US9396702B2 (en) 2014-12-23 2016-07-19 Sony Interactive Entertainment America Llc Latency tester
US20160279523A1 (en) 2015-03-25 2016-09-29 GAMEin30 Ltd. System and method for interactive gaming
US10130874B2 (en) 2015-05-01 2018-11-20 Microsoft Technology Licensing, Llc Removable controller accessory for a game controller
WO2016183253A1 (en) 2015-05-12 2016-11-17 Equinix, Inc. Programmable network platform for a cloud-based services exchange
US9609275B2 (en) 2015-07-08 2017-03-28 Google Inc. Single-stream transmission method for multi-user video conferencing
US10135892B2 (en) 2015-07-28 2018-11-20 Google Llc Independent control of interactive streaming media
US9993729B2 (en) 2015-08-19 2018-06-12 Sony Interactive Entertainment America Llc User save data management in cloud gaming
US9946593B2 (en) 2015-09-18 2018-04-17 Salesforce.Com, Inc. Recovery strategy for a stream processing system
US11040281B2 (en) 2015-09-30 2021-06-22 Sony Interactive Entertainment LLC Multi-user demo streaming service for cloud gaming
US11420114B2 (en) 2015-09-30 2022-08-23 Sony Interactive Entertainment LLC Systems and methods for enabling time-shifted coaching for cloud gaming systems
US20170097816A1 (en) 2015-10-01 2017-04-06 Motorola Mobility Llc Context-based applications for mobile devices
US10630773B2 (en) 2015-11-12 2020-04-21 Nvidia Corporation System and method for network coupled cloud gaming
US20170185464A1 (en) 2015-12-29 2017-06-29 Ca, Inc. Detecting flapping in resource measurements
US20170246544A1 (en) 2016-02-26 2017-08-31 Microsoft Technology Licensing, Llc Video game streaming for spectating
CN105749551B (zh) 2016-02-26 2019-04-30 网易(杭州)网络有限公司 一种游戏托管方法、系统及终端
US10016689B2 (en) 2016-03-21 2018-07-10 Electronic Arts Inc. Synchronized video with in game telemetry
US10456672B2 (en) 2016-05-19 2019-10-29 Google Llc Methods and systems for facilitating participation in a game session
US10046236B2 (en) 2016-06-13 2018-08-14 Sony Interactive Entertainment America, LLC Browser-based cloud gaming
US11351468B2 (en) 2016-06-13 2022-06-07 Sony Interactive Entertainment LLC Generating challenges using a location based game play companion application
EP3477435A4 (en) 2016-06-28 2020-01-29 Sony Interactive Entertainment Inc. USAGE DETERMINATION DEVICE, USAGE DETERMINATION METHOD AND PROGRAM
US10521879B2 (en) 2016-07-05 2019-12-31 Ubitus, Inc. Overlaying multi-source media in VRAM
US10332296B2 (en) 2016-07-05 2019-06-25 Ubitus Inc. Overlaying multi-source media in VRAM
CN106328855B (zh) 2016-11-29 2019-06-04 宁德时代新能源科技股份有限公司 电池组件及电池模组
US10722803B2 (en) 2017-02-15 2020-07-28 Roblox Corporation Integrated chat and game play platform
US20180250591A1 (en) 2017-03-02 2018-09-06 The Fast Mind, LLC Methods of circumventing platform restrictions in gaming
US10512846B2 (en) 2017-03-07 2019-12-24 Sony Interactive Entertainment LLC Emulating player behavior after player departure
US10645139B2 (en) 2017-04-06 2020-05-05 Microsoft Technology Licensing, Llc Network protocol for switching between plain text and compressed modes
EP3600581B1 (en) 2017-10-10 2024-02-21 Google LLC Distributed sample-based game profiling with game metadata and metrics and gaming api platform supporting third-party content
CN107670275B (zh) 2017-10-26 2020-10-13 广州市雷军游乐设备有限公司 游戏进程断线重连的方法和系统
WO2019126350A1 (en) 2017-12-19 2019-06-27 Advanta Computer, LLC Systems and methods for networked computing
US10792576B2 (en) 2018-02-28 2020-10-06 Sony Interactive Entertainment LLC Player to spectator handoff and other spectator controls
EP3700640B1 (en) 2018-03-22 2021-05-26 Google LLC Methods and systems for rendering and encoding content for online interactive gaming sessions
US11077364B2 (en) 2018-04-02 2021-08-03 Google Llc Resolution-based scaling of real-time interactive graphics
EP3773953B1 (en) 2018-04-02 2024-06-19 Google LLC Methods, devices, and systems for interactive cloud gaming
WO2019195300A2 (en) 2018-04-02 2019-10-10 Google Llc Input device for an electronic system
US10773168B2 (en) 2018-04-02 2020-09-15 Google Llc Temporary game control by user simulation following loss of active control
US10950092B2 (en) 2018-10-07 2021-03-16 Synergy Blue Llc Skillful multi-level games and gaming machines in which players are granted free play sessions
WO2020102493A1 (en) 2018-11-16 2020-05-22 Google Llc Shadow tracking of real-time interactive simulations for complex system analysis
US11731043B2 (en) 2019-11-19 2023-08-22 Sony Interactive Entertainment Inc. Adaptive graphics for cloud gaming
US11128636B1 (en) 2020-05-13 2021-09-21 Science House LLC Systems, methods, and apparatus for enhanced headsets

Also Published As

Publication number Publication date
JP7073494B2 (ja) 2022-05-23
JP2022122875A (ja) 2022-08-23
KR102614649B1 (ko) 2023-12-14
EP4345731A1 (en) 2024-04-03
EP3701489A1 (en) 2020-09-02
US20190308099A1 (en) 2019-10-10
KR20220101011A (ko) 2022-07-18
WO2019199848A1 (en) 2019-10-17
US20240001230A1 (en) 2024-01-04
US11813521B2 (en) 2023-11-14
JP2021517997A (ja) 2021-07-29
KR102419100B1 (ko) 2022-07-07
CN111417978A (zh) 2020-07-14
KR20200077565A (ko) 2020-06-30
EP4141781A1 (en) 2023-03-01
US20210213354A1 (en) 2021-07-15
EP4141781B1 (en) 2024-03-20
US11110348B2 (en) 2021-09-07
EP3701489B1 (en) 2022-10-26

Similar Documents

Publication Publication Date Title
KR102614649B1 (ko) 게이밍 렌더링에서의 메모리 관리
US11701587B2 (en) Methods and systems for rendering and encoding content for online interactive gaming sessions
US20200197803A1 (en) Save Game Load Time Reduction for Cloud Gaming
US9455931B2 (en) Load balancing between processors
RU2696345C2 (ru) Интеллектуальное потоковое воспроизведение мультимедийного контента
KR20130062463A (ko) 다중 사용자 및 멀티 플랫폼 지원을 위한 게임 스트리밍 시스템 및 방법

Legal Events

Date Code Title Description
A107 Divisional application of patent
E902 Notification of reason for refusal