JP2013532332A - Gpuリソースの複数のクライアントへの割り当て - Google Patents

Gpuリソースの複数のクライアントへの割り当て Download PDF

Info

Publication number
JP2013532332A
JP2013532332A JP2013514379A JP2013514379A JP2013532332A JP 2013532332 A JP2013532332 A JP 2013532332A JP 2013514379 A JP2013514379 A JP 2013514379A JP 2013514379 A JP2013514379 A JP 2013514379A JP 2013532332 A JP2013532332 A JP 2013532332A
Authority
JP
Japan
Prior art keywords
rendering
client
server
computer system
rendered
Prior art date
Legal status (The legal status 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 status listed.)
Granted
Application number
JP2013514379A
Other languages
English (en)
Other versions
JP5627771B2 (ja
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 JP2013532332A publication Critical patent/JP2013532332A/ja
Application granted granted Critical
Publication of JP5627771B2 publication Critical patent/JP5627771B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5044Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering hardware capabilities
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/14Fourier, Walsh or analogous domain transformations, e.g. Laplace, Hilbert, Karhunen-Loeve, transforms
    • G06F17/141Discrete Fourier transforms
    • G06F17/142Fast Fourier transforms, e.g. using a Cooley-Tukey type algorithm
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/14Fourier, Walsh or analogous domain transformations, e.g. Laplace, Hilbert, Karhunen-Loeve, transforms
    • G06F17/147Discrete orthonormal transforms, e.g. discrete cosine transform, discrete sine transform, and variations therefrom, e.g. modified discrete cosine transform, integer transforms approximating the discrete cosine transform
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/70Admission control; Resource allocation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • 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
    • 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/02Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
    • 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/04Protocols specially adapted for terminals or networks with limited capabilities; specially adapted for terminal portability
    • 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/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1001Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers
    • H04L67/1004Server selection for load balancing
    • H04L67/1008Server selection for load balancing based on parameters of servers, e.g. available memory or workload
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L12/00Data switching networks
    • H04L12/54Store-and-forward switching systems 
    • H04L12/56Packet switching systems
    • H04L12/5601Transfer mode dependent, e.g. ATM
    • H04L2012/5629Admission control
    • H04L2012/5631Resource management and allocation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/10Flow control; Congestion control
    • H04L47/12Avoiding congestion; Recovering from congestion
    • H04L47/125Avoiding congestion; Recovering from congestion by balancing the load, e.g. traffic engineering

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Signal Processing (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Data Mining & Analysis (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Discrete Mathematics (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Image Generation (AREA)
  • Information Transfer Between Computers (AREA)
  • Stored Programmes (AREA)
  • Processing Or Creating Images (AREA)
  • Computer And Data Communications (AREA)

Abstract

コンピュータシステム上で、各々が遠隔クライアントアプリケーションに対応している複数のアプリケーションインスタンスをホストする段階と、アプリケーションインスタンスがホストされている遠隔クライアントアプリケーションそれぞれにネットワーク接続を維持する段階と、遠隔クライアントアプリケーションのうち少なくとも2つの間に、コンピュータシステムのグラフィックプロセッシングユニットのリソースを割り当てる段階と、コンピュータシステムのグラフィックプロセッシングユニットのリソースを利用して、遠隔クライアントアプリケーションの少なくとも2つに対応するアプリケーションインスタンスのグラフィック出力を同時にレンダリングする段階と、レンダリングされたグラフィック出力を、遠隔クライアントアプリケーションの少なくとも2つに、銘々のネットワーク接続を介して送信する段階とを備える方法、装置、およびシステムに関する。
【選択図】図1

Description

本開示は主にサーバ側のアプリケーションレンダリングに係り、より詳しくは、複数のレンダリングパラメータのセットに基づいて、複数のクライアントに対して複数のアプリケーションを同時にレンダリングするサーバに関する。
一般に、クライアント−サーバアーキテクチャは、サーバ(「サービスプロバイダ」と考えることもできる)と、クライアント(「サービス要求者」または「サービス消費者」ととらえることもできる)と間でタスクまたはワークロードを分割する分散コンピューティングアーキテクチャである。しばしば、サーバとクライアントとはコンピュータネットワークを介して接続されており、様々な種類のデータが、個々のサーバと個々のクライアントとの間で、コンピュータネットワークを介して双方向送信される。
通常サーバは、クライアントより多くのリソースを有し、性能機能が高い。1つのサーバは、1以上のクライアントとの間でリソースを共有する場合があり、例えば、これらクライアントのために一定のタスクを実行する(つまり、これらクライアントにサービスを提供する)。サーバは通常の場合、クライアントよりも多くのリソースを有することから、タスクを(特にリソースを多く必要とするタスク)を、クライアントよりも早く完成することができることが多い。
サーバおよびクライアント間で交換されるデータは、任意の適切なデータフォーマットを利用して表すことができ、任意の適切な通信プロトコルを利用して送信することができる。例えば、あるアプリケーションがクライアントのためのサーバで実行されている場合を考えると、アプリケーションの出力は、ハイパーテキストマークアップ言語(HTML)文書または拡張可能マークアップ言語(XML)文書等の構造化された文書を利用して表される場合がある。サーバはクライアントに、アプリケーションの出力を表すデータを含むHTMLまたはXML文書を、サーバとクライアントとの間のハイパーテキスト転送プロトコル(HTTP)接続を介して送信することができる。クライアントは、このHTMLまたはXML文書を受け取ると、クライアントで実行されているウェブブラウザ等においてローカルにHTMLまたはXML文書を利用して、文書を消費してアプリケーションの出力をレンダリングすることができる。
本開示は主にサーバ側のアプリケーションレンダリングに係り、より詳しくは、複数のレンダリングパラメータのセットに基づいて、複数のクライアントに対して複数のアプリケーションを同時にレンダリングするサーバに関する。一部の実施形態では、コンピュータシステムは複数のアプリケーションインスタンスをホストしており、各アプリケーションインスタンスが1つの遠隔のクライアントアプリケーションに対応している。コンピュータシステムは、アプリケーションインスタンスがホストされている各遠隔クライアントアプリケーションへのネットワーク接続を維持する。コンピュータシステムは、少なくとも2つの遠隔クライアントアプリケーション間で、コンピュータシステムのグラフィックプロセッシングユニットのリソースを割り当てる。コンピュータシステムは、コンピュータシステムのグラフィックプロセッシングユニットのリソースを利用して、少なくとも2つの遠隔クライアントアプリケーションに対応するアプリケーションインスタンスのグラフィック出力を同時にレンダリングする。そしてコンピュータシステムは、レンダリングしたグラフィック出力を、銘々のネットワーク接続を介して少なくとも2つの遠隔クライアントアプリケーションに送信する。
一部の実施形態では、第1コンピュータシステムが複数のレンダリングパラメータのセットにアクセスするが、第1コンピュータシステムは複数の第2コンピュータシステムに接続されており、各レンダリングパラメータのセットは、複数の第2コンピュータシステムの対応する1つに対応しており、第1コンピュータシステムは、画像を格納するためのレンダリングターゲットを含み、このレンダリングターゲットは、複数の複数の第2コンピュータシステムで共有される。第1コンピュータシステムは、複数のレンダリングパラメータのセットに基づいて、複数の第2コンピュータシステムのための複数の画像を同時にレンダリングするが、複数の画像それぞれは複数の第2コンピュータシステムの1つについて、複数の第2コンピュータシステムの1つに対応する複数のレンダリングパラメータのセットの1つに基づいてレンダリングされ、レンダリングターゲットに格納される。第1コンピュータシステムは、複数の画像それぞれを、画像がレンダリングされている複数の第2コンピュータシステムのうち対応するものに対して送信する。
記載した、または記載していない開示の特徴、側面、および利点は、添付図面とともに、以下の詳細な記載に詳述される。
複数のクライアントにサーバのリソースを割り当てるためのクライアント−サーバシステムの一例を示す。 複数の対象ユニットに分割するサーバのレンダリングターゲットの一例を示す。 複数のクライアントに対して複数のレンダリングを同時に実行するサーバの方法を示す。 ネットワーク環境の一例を示す。 コンピュータシステムの一例を示す。
本開示を、添付図面を参照しつつ、一部の実施形態に基づいて記載する。以下の記載では、特定の詳細を述べて、本開示の完全な理解を促す。しかし、当業者には、本開示がこれら特定の詳細の一部または全てがなくても実施可能であることが明らかである。他の場合には、本開示を不当に曖昧にしないために、公知のステップおよび/または構造は、詳しく示さない。加えて、本開示は、特定の実施形態との関連で記載されるが、この記載は、記載される実施形態に開示を限定する意図はないことを理解されたい。逆に、記載は、添付請求項で定義される開示の精神および範囲内に含まれている代替例、変更例、および均等物を含むことを意図している。
クライアント−サーバアーキテクチャは、サーバに、1以上のクライアントとリソースを共有させる。このアーキテクチャは様々な利点を有している。例えば通常のサーバはクライアントよりも多くのリソース(例えばプロセッサまたはメモリ)を有し、性能機能が高いことから、サーバは、クライアントよりもタスクを早くすることができることが多い。このような性能面での違いは、タスクがリソースを多く必要とする場合、または、クライアントのリソース量が限られている場合に特に顕著となる。同時に、サーバがクライアントの代わりに、またはクライアントのためにタスクを行っている間、クライアントのリソース占有を解除して、クライアントでローカルに実行する必要のあるタスク等の他のタスク(例えば、クライアントのユーザとのやりとり)を行わせる、といったこともできる。
サーバで実行されるのに適していると思われるタスクの一種に、サーバがホストするアプリケーションを、クライアントに対する送信用のビデオ出力としてレンダリングする、というものがある。コンピュータグラフィックの分野では、レンダリングは、通常はコンピュータプログラムを利用して、あるモデルから画像を生成するプロセスとして理解されている。モデルは、通常、三次元(3D)オブジェクトの記述であり、厳密に定義された言語またはデータ構造で表すことができるようなものである。モデルは、幾何学、視点、テクスチャ、照明、シェーディング、動き、その他の適切な種類の情報を含んでよい。モデルがレンダリングされる画像は、デジタル画像またはラスターグラフィック画像であってよく、画素群により形成することができる。本開示では、レンダリングの思想を、任意のアプリケーションの任意の出力を表す画像を生成することへと拡張する。レンダリングは、2次元(2D)データおよび3Dデータを含む任意のデータに基づいて実行されてよい。あくまで例示であり限定ではないが、特定の実施形態では、3Dモデルに基づいて画像を生成することに加えて、ウェブのブラウジングアプリケーション、ワード処理アプリケーション、スプレッドシートアプリケーション、マルチメディアアプリケーション、科学および医療用のアプリケーション、およびゲームアプリケーション等のアプリケーションの出力を表す画像もレンダリングする。
レンダリングは、高解像度および高画質をレンダリングされる画像に求める場合には特に、非常に計算量が多いことからリソースを多く必要とするプロセスであるので、サーバでの実行に適した種類のタスクといえる。これまでの古いコンピュータシステムでは、3次元のモデルを単純な2D画像にレンダリングするのに数時間または数日間かかっていた。コンピュータハードウェア(特にコンピュータグラフィックアプリケーション(例えばゲーム、マルチメディア、娯楽、またはマッピング)専用に設計されたコンピュータハードウェア)の開発、進歩により、現在のコンピュータシステムは、各画像を数秒間または数ミリ秒間にレンダリングすることができるようになった。実際、モデルを単一の画像にレンダリングするためにサーバで利用可能なリソース全てが占有されるという事態もあまりなくなってきている。一部の実施形態では、サーバで利用可能なリソースを有効活用するために、サーバが複数のクライアントに対して複数のレンダリングを同時に実行して(例えば、複数の3Dモデルを複数の2D画像に同時にレンダリングして)、且つ、各クライアントに対してレンダリングをそれぞれ実行する。一部の実施形態では、サーバの利用可能なリソースが、複数のクライアントに割り当てられたり、複数のクライアントにより共有されたりする場合がある。従って、各クライアントには、サーバで利用可能なリソースの一部が割り当てられる。より詳しくは、一部の実施形態では、サーバのグラフィックプロセッシングユニット(GPU)をクライアント間で共有する。特定のクライアントについて実行されるレンダリングはそれぞれ、そのクライアントに対して特に割り当てられたリソースの持分を利用して実行されてよい。一部の実施形態では、レンダリングプロセスで生じた出力である各レンダリングされた画像を、レンダリング画像が取得された対応するクライアントに送信してもよい。
図1は、単一のサーバ120が複数のクライアント130に同時に複数のレンダリングを行うシステムの一例を示す。図1には、図示をしやすくする目的から4つのクライアント130A、130B、130C、130Dしか示していない。実際には、サーバは、任意の数のクライアントに対してレンダリングを同時に行ってよく、任意の時点においてあるサーバがサポートするクライアント数には理論的には制限がない。同様に、図1には、図示をしやすくする目的から1つのGPU121および1つのCPU122しか示していない。実際には、サーバは、任意の数のGPUおよびCPUを有してよい。
一部の実施形態では、サーバ120は各クライアント130とそれぞれ別の接続150を介して接続する。一部の実施形態では、サーバ120とクライアント130との間の接続150は、コンピュータネットワークを介したネットワーク接続であってよく、このコンピュータネットワークとは、あくまで例示であり限定ではないが、インターネット、イントラネット、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)、無線ネットワーク、またはこれらコンピュータネットワークの2以上の組み合わせであってよい。一部の実施形態では、各ネットワーク接続150が、トランスポート制御プロトコル(TCP)接続、ユーザデータグラムプロトコル(UDP)接続、または任意の他の適切な接続であってよい。一部の実施形態では、サーバ120は複数のTCPソケット124を有してよく、各クライアント130が、別個のTCP接続150を介して異なるTCPソケット124に接続されていてよい。例えばクライアント130Aは、TCP接続150Aを介してサーバ120のTCPソケット124Aに接続されてよい。一部の実施形態では、データがサーバ120と各クライアント130との間で双方向に、対応する接続150を介して交換されてよい。例えばサーバ120とクライアント130Aとは、接続150Aを介して双方向にデータを交換してよい。データは任意の適切なフォーマットであってよい。例えばサーバ120は、ビデオストリームの形態でデータをクライアント130に送信することができ、各クライアント130が、データをサーバ120に送信してよい。サーバ120とクライアント130との間の通信では、任意の適切なプロトコルが利用されてよい。例えば、アプリケーション131Aのインスタンスが、クライアント130Aのためにサーバ120で実行されている場合を想定する。サーバ120で実行されているアプリケーション131Aのインスタンスのレンダリングされた出力が、ビデオストリームの形態でサーバ120からクライアント130Aに送信されてよく、各レンダリングされた画像は、アプリケーション131Aのインスタンスの出力を、ビデオストリームの特定のフレームで表したものである。クライアント130Aが受け取った入力は(特に、サーバ120で実行されているアプリケーション130Aのインスタンスの状態を変えさせる入力は)、クライアント130Aからサーバ120に送信するとよい。
一部の実施形態では、サーバ120は、1以上の中央処理装置(CPU)122と1以上のグラフィックプロセッシングユニット(GPU)121とを有していてよい。CPUおよびGPUは、コンピュータ分野でよく知られている。簡単に説明すると、CPUは、コンピュータの機能およびコンピュータプログラムの命令を実行するコンピュータシステムの部分のことである。GPUは、マイクロプロセッサ(例えばCPU)からのグラフィックレンダリングをオフロードするための専用プロセッサである。一般的には、GPUは、コンピュータグラフィックを操作する際に非常に効率がよく、その高度な並列構造によって、広範囲の複雑なアルゴリズムにおいて(例えばグラフィック関連のアルゴリズムにおいて)、汎用CPUよりも効果が高い。一部の実施形態では、GPU121は、ビデオカードの一部であってよく、またはサーバ120のマザーボードにあってもよい。
一部の実施形態では、GPU121はレンダリングターゲットを含んでよい。一部の実施形態では、レンダリングプロセスは、1以上のアプリケーションの出力を、レンダリングターゲットに対する1以上の画像としてレンダリングする。一部の実施形態では、レンダリングされた2D画像が、GPU121のレンダリングターゲット内に格納されてよい。一部の実施形態では、レンダリングターゲットは、GPU121内のフレームバッファまたは任意の種類のメモリまたはストレージであってよい。図2は、GPU(例えばGPU121)のレンダリングターゲット200の一例を示す。この例では、レンダリングターゲット200がGPU121内のメモリストレージ(例えばフレームバッファ)である。一部の実施形態では、レンダリングターゲットは、1以上のアプリケーションのレンダリングされた出力を表す最大256メガピクセルまでを格納することができる。従って、例えばレンダリングターゲットは、それぞれ1メガピクセルのブロック(1024x1024画素)の16x16格子に分割されてよい。レンダリングターゲットは、他の表示アスペクト率に対応するように分割されてもよい。
一部の実施形態では、レンダリングターゲットは、複数の部分に分割されてよい。図2では、レンダリングターゲット200は、4×4の格子という16個の部分に分割されており、各部分を、レンダリングターゲット200のユニットまたはレンダリングターゲットのユニットと称することができる。ここでも、レンダリングターゲット200を16個のレンダリングターゲットに分割したのは、説明の便宜上である。一部の実施形態には、レンダリングターゲットは、任意の数のユニットに分割することができ、レンダリングターゲットをいくつのレンダリングターゲットユニットに分割するか、に関しては理論上の制限はない。同様に、各レンダリングターゲットユニットのサイズおよび大きさは、レンダリングターゲットのサイズおよび大きさに応じて決定してもよいし、レンダリングターゲットをいくつのレンダリングターゲットユニットに分割するか、に応じて定めてもよい。例として、各レンダリングターゲットユニットは、256画素×256画素であってもよいし、512画素×512画素であってもよいし、1024画素×1024画素であってもよい。もちろん、レンダリングターゲットユニットの幅と高さとが同じである必要はない。例えば、レンダリングターゲットユニットが256画素×512画素であっても、512画素×256画素であっても構わない。
一部の実施形態では、サーバ120のGPU121のレンダリングターゲット200が4つのクライアント130間で分散されており、各クライアント130が1以上のレンダリングターゲットユニットを割り当てられても良い。各クライアント130に割り当てられるべきレンダリングターゲットユニットの数は、クライアント130の実際の要件およびシステムアーキテクチャに応じて定められて良い。一部の実施形態では、特定のクライアント130のディスプレイの解像度、大きさ、および向きによって、そのクライアント130に割り当てるレンダリングターゲットユニットの数が決定されてもよい。
例えば、図2の各レンダリングターゲットユニットを、1024画素×1024画素とする。さらに、クライアント130Aが、比較的低解像度(例えば1024画素×768画素)のディスプレイを持つノートブックコンピュータであるとする。この場合には、1つのレンダリングターゲットユニットが、1024画素×768画素以下のレンダリング画像を格納するために十分なメモリスペースを有していることになる。従って、クライアント130Aには、1つのレンダリングターゲットユニット(例えばレンダリングターゲットユニット211)が割り当てられて良い。他方で、クライアント130Bが、1920画素×1680画素のディスプレイを有するデスクトップコンピュータであると想定する。この場合には、1920画素×1680画素の画像を格納するために4つのレンダリングターゲットユニットが必要となるだろう。従ってクライアント130Bは、4つのレンダリングターゲットユニットを割り当てられることになる(例えばレンダリングターゲットユニット212,213、222、および223)。
一部の実施形態では、特定のクライアント130に割り当てられているレンダリングターゲットユニットの向きを、そのクライアント130のディスプレイのサイズおよび向きに応じて定めて良い。例えばクライアント130Cが、ディスプレイの幅がディスプレイの高さよりずっと小さい長尺状のディスプレイを持つ場合を想定する。この場合には、同じ列にある3つのレンダリングターゲットユニット221、231、241をクライアント130Cに割り当てることで、長尺状のディスプレイをサポートすることができる(つまり、レンダリングターゲットユニット221、231、241を合わせることで、クライアント130Cのディスプレイのサイズおよび向きをシミュレーションする)。最後に、クライアント130Dが高解像度のディスプレイを有しており、この高解像度のレンダリング画像を格納するために、6つのレンダリングターゲットユニット232、233、234、242、243、244をクライアント130Dに割り当てる場合を想定する。
もちろん、任意のある時点に、全ての利用可能なレンダリングターゲットユニットが個々のクライアントに割り当てられる必要はない。一定のレンダリング中に、複数のレンダリングターゲットユニット(例えばレンダリングターゲットユニット214、224)を未割り当てにしておいて、後でクライアント130に割り当てることもできる。同様に、あるクライアント130に既に割り当てたレンダリングターゲットユニットを、不要になった時点で(例えばこのクライアント130がサーバ120から切断された場合等)、割り当て解除することもできる。
一部の実施形態では、各クライアント130が、アプリケーションと称されることもある1以上のコンピュータプログラムに関連付けられてよい。図1では、説明を簡単にするべく、1つのアプリケーション131を、各クライアント130に関連付けられているものとして示している。例えばアプリケーション131Aがクライアント130Aに関連付けられているとする。しかしながらこの思想は、各クライアント130に複数のアプリケーションが関連付けられている場合であっても通用する。
一部の実施形態では、サーバ120は、1以上のクライアント130のための1以上のアプリケーション131の1以上のインスタンスをホストするよう構成されている。アプリケーション131のインスタンスのレンダリングされた出力が、対応するクライアント130へと送信されて、クライアント130の1以上のユーザに対して表示される。一部の実施形態では、クライアント130に関するアプリケーション131のインスタンスを、クライアント130のために、サーバ120で実行することができる。サーバ120で実行されるアプリケーション131のインスタンスの出力は、サーバ120によって、画像としてレンダリングされてよい。一部の実施形態では、アプリケーション131のインスタンスのレンダリングされた出力は、ビデオデータとして符号化されて、ビデオストリームとして対応するクライアント130に送信されてよい。各クライアント130は、対応するアプリケーション131のレンダリング出力を表すビデオストリームを受信すると、ビデオデータを復号して、対応するアプリケーション131のレンダリング出力を表示することができる。例えば、アプリケーション131Aのインスタンスを、クライアント130Aのサーバ120上で実行する。アプリケーション131Aのインスタンスの出力は、サーバ120によって1以上の画像としてレンダリングされてよい。アプリケーション131Aのインスタンスのレンダリングされた出力は、ビデオストリームとして符号化されて、クライアント130Aへ送信されてよい。クライアント130Aがビデオストリームを受信すると、ビデオストリームを復号して、アプリケーション131Aのレンダリング出力を取得して、この出力をクライアント130Aに表示することができる。一部の実施形態では、各クライアント130が、1以上のCPU(不図示)と1以上のGPU(不図示)とを含んでよい。一部の実施形態では、各クライアント130が、ビデオストリーム(符号化されたビデオフレーム)をそのGPUのメモリにロードして、符号化されたビデオデータを復号することで、対応するアプリケーション131のレンダリング出力を表示することができる。
クライアント130でコンピュータプログラム131のインスタンスが実行されると、様々なレンダリングを実行する必要がでてくる。例えば、プログラムインスタンス131Aがゲームアプリケーションであると想定する。ゲームのビデオは、毎秒60フレームのレートで進むようなものであり、各フレームでは、ゲームシーンの新たな3Dモデルを画像にレンダリングする必要がでてくる。従って、プログラムインスタンス131Aが、毎秒60回のレンダリングを必要とする場合がある。プログラムインスタンス131Bが動画像であるとすると、ビデオは毎秒30フレームの速度で進む。ここでも、各フレームでは、動画のシーンを画像に新たにレンダリングする必要がある場合がある。従ってプログラムインスタンス131Bは、毎秒30回のレンダリングを必要とする。さらに、画像をそのプログラムインスタンス131の3Dモデルからレンダリングする方法を示すレンダリングパラメータが一式、各プログラムインスタンス131に対して存在する。一部の実施形態では、レンダリングパラメータに、あくまで一例であり限定ではないが、レンダリングするモデル、ビューポートまたはカメラアングル、照明、テクスチャ、シェーディング、または画像の解像度を含めることができる。さらに、レンダリングパラメータは、フレームごと、つまりレンダリングごとに変化することがある。例えば、プログラムインスタンス131A等のゲームアプリケーションでは、クライアント130Aのプレーヤがそのゲームシーンの間に動くと、そのゲームシーンの3Dモデルのオブジェクト、ひいては、カメラアングル、照明、およびシェーディングも変わる場合がある。この結果、各レンダリングが、ゲームの現在の状態(例えば、そのレンダリングのための特定のシーン、視点の位置、カメラアングル、照明、またはシェーディング)に対応するレンダリングパラメータの別のセットを有することがある。
一部の実施形態では、サーバ120が、サーバ120に現在接続しているクライアント130ごとに異なるレンダリングパラメータのセット123を有している。例えば、レンダリングパラメータのセット123Aは、クライアント130Aに対応している。各レンダリングパラメータのセット123は、コンピュータプログラム131の対応するインスタンスから取得されてよく、当該コンピュータプログラム131のインスタンスのレンダリング方法を記述していてよい。例えば、レンダリングパラメータのセット123Aは、プログラム131Aについてのレンダリング方法を記述したレンダリングパラメータを含んで良く、レンダリングパラメータは、プログラムインスタンス131Aの現在の状態に基づいて更新することができてよい。
場合によっては、複数のクライアント130が、同じコンピュータプログラムの複数のインスタンスを実行しつつ、異なるレンダリングパラメータ123を有していてもよい。例えば、クライアント130Aおよび130Dが、同じゲームアプリケーションの2つのインスタンスを実行する場合を想定する。クライアント130Aおよび130Dにおける2人のプレーヤは、独立して、または相互作用しつつ同じゲームをプレイすることができる(例えば、同じゲームにおける2つの異なるキャラクターとして)。2人のプレーヤがある時点で同じゲームを独立してプレイする場合には、ゲームの異なる段階にある場合があるので、この2人のプレーヤがクライアント130Aおよび130Dのディスプレイ上で見る画像は異なる。もしも2人のプレーヤがある時点で同じゲームを相互作用しつつプレイする場合には、同じゲームシーン中であっても、2人のプレーヤは、そのゲームシーンを異なる位置且つ異なる角度から見ることになる。この場合にも、2人のプレーヤは、クライアント130Aおよび130Dのディスプレイ上でそれぞれ別の画像を見ることになる。いずれの場合にも、2人のプレーヤがある時点で別の画像を見ているために、レンダリングパラメータは、同じゲームアプリケーションの2つのインスタンス間で異なるものとなる。
一回のレンダリングパスにおいて、ピクセルシェーダ(および/または他のレンダリング機能)は、とりわけ、画像をレンダリングする視点などを画定するレンダリングパラメータのセットによって動作する。一部の実施形態では、一回のレンダリングパスにおいて、サーバ120が、4つのレンダリングパラメータのセット123にそれぞれ基づいて、クライアント130上で実行される4つのプログラムインスタンス131について4回のレンダリングを同時に行うことができる。一部の実施形態では、GPU121は、実際のレンダリング機能を実行することができる。一部の実施形態では、各レンダリングにおいて、各クライアントに対するレンダリングされた画像フレームが同時に出力される。一部の実施形態では、4つのレンダリングされた画像それぞれを、対応するクライアント130に対して割り当てたGPU121内のレンダリングターゲット200の特定の部分に格納する。例えば、第1レンダリングは、レンダリングパラメータのセット123Aに基づいてクライアント130A上で実行されているプログラムインスタンス131Aについて実行されて、この第1レンダリングの画像がレンダリングターゲットユニット211に格納される。第2レンダリングが、レンダリングパラメータのセット123Bに基づいてクライアント130B上で実行されているプログラムインスタンス131Bについて実行されて、この第2レンダリングの画像がレンダリングターゲットユニット212、213、222、223に格納される。第3のレンダリングが、レンダリングパラメータのセット123Cに基づいてクライアント130C上で実行されているプログラムインスタンス131Cについて実行されて、この第3のレンダリングの画像がレンダリングターゲットユニット221、231、241に格納される。第4のレンダリングが、レンダリングパラメータのセット123Dに基づいてクライアント130D上で実行されているプログラムインスタンス131Dについて実行されて、この第4のレンダリングの画像がレンダリングターゲットユニット232、233、234、241、242、243、244に格納される。
一部の実施形態では、一回の符号化パスにおいて、サーバ120が、レンダリングターゲット200に格納されている4つのレンダリング画像を同時に符号化することができる。一部の実施形態では、GPU121が実際の符号化を実行する。例えば、レンダリング画像それぞれを、別のビデオストリームの1つのフレームとして符号化することができる。一部の実施形態では、サーバ120は、今は4つのビデオストリームに符号化されている4つのレンダリング画像を、それぞれ4つのクライアント130に送信することができる。より詳しくは、第1レンダリング画像を、第1ビデオストリームのフレームとして符号化して、クライアント130Aに送信することができる。第2レンダリング画像は、第2ビデオストリームのフレームとして符号化して、クライアント130Bに送信することができる。第3のレンダリング画像は、第3のビデオストリームのフレームとして符号化して、クライアント130Cに送信することができる。第4のレンダリング画像は、第4のビデオストリームのフレームとして符号化して、クライアント130Dに送信することができる。各クライアント130は、対応するビデオストリームを受信すると、このビデオストリームを復号して、自身のディスプレイ上にレンダリング画像を表示することができる。
一部の実施形態では、サーバ120は、ビデオコーデック機能を実装するものであってよい。ビデオコーデックは、サーバ120で実行されているアプリケーション131のインスタンスの出力を表すレンダリングされた画像を符号化するのに利用されてよい。一部の実施形態では、ビデオコーデックは、レンダリングターゲット200に格納されているレンダリングされている画像にアクセスして、これら画像をマクロブロックに分割することができる。一実装例では、各マクロブロックのサイズが、16画素×16画素であってよい。一部の実装例では、後述するように、離散コサイン変換(DCT)演算を8x8の分割部分に実行してもよい。このようにして、4:2:0というダウンサンプリングのために、各マクロブロックが4つの8x8の輝度部分、4つの4x4Cb部分、および4つの4x4Cr部分を含む。しかし他のマクロブロックサイズを利用することもできる。次にビデオコーデックは、以下のように各マクロブロックの輝度および色度の分割部分に対して一定の変換および量子化演算を行う。これら演算は直列で行っても並列で行っても良い。符号処理がGPUに行われる場合には、マクロブロックに対する処理は、並列で行うことで処理時間を短くして、高いスループットを得ることができる。
コーデックは、2D平面を、その画素の輝度値を最もよくモデルしている各マクロブロックに適合させる。平面は、z=ax+byで定義され、aおよびbは、平面の勾配パラメータを定義している。コーデックは、次に、平面の勾配パラメータに基づいてマクロブロックの画素の輝度値を調節する。一実装例では、各画素のコーデックは、平面の等式の対応する値を、その位置の画素値から減算する。構想上は、これは、適合後の画素(x,y)=画素(x,y)−zで定義される。一実装例では、コーデックは、色値の分割部分の値は調節しない。
次に、コーデックは、マクロブロックにDCTを適用する。一実装例では、コーデックは、4つの8x8画素の輝度部分および8つの4x4の色度部分にDCTを別個に適用する。コーデックは、次に、2x2のアダマール変換を、各輝度部分および各色度部分に対応して設定された各DCT係数のDC成分に適用して、DC係数値間の相関性を見つける。別の実装例では、コーデックは、これら部分のサイズを動的に決定する。例えば、コーデックは、各部分の選択に対する比率および歪みに基づいて、4x4、8x8、または16x16の部分からの選択を行う。
コーデックは、マクロブロックのDCT係数を、一次(1D)アレイへと順序を付け直す。一実装例では、4つの色度部分のDCT係数をジグザグの順序で走査してから、DCT係数を飛び越し走査して、DC成分の値と、他の対応するDCT成分の値とをまとめる。一実装例では、輝度部分は、色度部分とは別に符号化される。一実装例では、色度部分は、輝度チャネル同様の、まとめる方法により飛び越し走査される。他の実装例では、ジグザグに順序を付け直す以外の方法をとってもよい。
コーデックはさらに、各選択肢のための結果であるコスト(符号化に必要なビット数)と、各選択肢に関する誤りまたは歪みに基づいて、例えば、整数値またはゼロのいずれかに四捨五入するかを判断する量子化プロセスであるレート歪み最適化を利用して、1DアレイのDCT係数を量子化する。一実装例では、レート歪み最適化は、本質的にはビデオ品質メトリックを適用して、ソースからのずれと、各可能性のある決定結果についてのビットコストとを両方計測する。ビットは、その品質レベルに対するビットコストと品質との間の関連性を表す値であるラグランジュでビットコストを乗算することで数学的に計測される。ソースからのずれは、ピーク信号対雑音比(PSNR)ビデオ品質メトリックを最大化するべく、平均二乗誤差として計測することができる。ビットコストの計算は、テストするための各ビデオブロックを、エントロピー符号器に渡して、実際のビットコストを計測することで、行うことができる。
一実装例では、次にコーデックは、各マクロブロックのDC予測値を計算して、そのマクロブロックのDC係数からDC予測値を減算することで、DC予測値に基づいて各マクロブロックのDC係数を調節する。一実装例では、DC予測値Xは、近隣のブロックのDC係数に基づいて決定されてよい。言い換えると、ブロックXのDC予測値が、ブロックcのDC係数値より小さいブロックaおよびbのDC係数の合計に基づいて決定される、ということである。一実装例では、DC予測値の調節は、輝度および色度チャネルの両方に対して実行される。
次にコーデックは、量子化された係数を各ブロックについて保留されているメモリスペースへと符号化する。一実装例では、コーデックは、可変長符号化の一形態を利用して、各ブロックについて量子化された係数を圧縮する。一実装例では、コーデックは、ホフマン符号化の次にランレングス符号化(RLE)を用いる。各マクロブロックについて量子化されたDCT係数を符号化すると、マクロブロックの符号化ビットとビット長とが得られる。ビット長が分かったので、コーデックは並列プレフィックス合計操作(parallel prefix sum)を実行して、最終的な出力であるビットストリームにおける各マクロブロックの開始位置を得る。
次にコーデックは、GPU121に、符号化されたデータを出力ストリームに書き込ませて、ラスター方式同様の順序で各マクロブロックのデータを書き込むことで、メインシステムメモリにバッファさせる。一実装例では、データは、並列処理演算を利用してGPU121によってCPUメモリに書き込むことができる。例えばコーデックは、データを収集操作(gather operation)で1以上の出力ストリームに書き込む。例えば、1つのデータワード(1または2バイト)を書き込むタスクを持つプロセスまたは関数は、各マクロブロックの開始ビット位置とそのフレームの出力ストリームのデータワードの位置とを利用して、データワードを構築してメモリに書き込むためのデータビットにアクセスする留保されているメモリ位置を決定する。収集操作によって、GPU121のリソースを利用する並列処理演算における出力を書き込むことができるので、さらにスループットを向上させることができる。例えば一実装例では、メモリ内のデータまたはマシンワードの位置を、出力ストリームを書き込む入力として受け取るものとして、関数を定義することができる。この関数は、データまたはマシンワードおよびマクロブロックの開始ビット値の位置に基づいて1以上のマクロブロックから選択されたビット部分から、マシンワードをアセンブルして、マシンワードのデータをメモリに書き込むことができる。この関数は、並列実装することで、クライアント130にネットワーク経由で送信するための、GPU121のメモリ(例えばレンダリングターゲット200)からの出力のメインメモリへの書き込みを加速して行わせることができる。他の実装例では、GPU121のメモリは、送信データを、ソケットまたはその他の接続アブストラクションに書き込むために直接アクセスすることができる。
一部の種類のアプリケーションでは、その出力を代表的な画像に連続してレンダリングする必要がある場合がある。例えば上述したように、ゲームアプリケーションは毎秒60回のレンダリングを必要とするものも多い。他の種類のアプリケーションでは、ユーザ入力があったときのみに新たなレンダリングが必要となる。例えば、ワード処理アプリケーションであれば、ユーザが入力したときのみに、クライアントのスクリーンに表示されている文書をリフレッシュする必要があるだろう(文書の画像のレンダリング)。さらに、クライアントで実行されているアプリケーションインスタンスの各レンダリングは、アプリケーションインスタンスの現在の状態が時間とともに変化することがあるような場合には異なるレンダリングパラメータに基づいて決定されてよい。一部の実施形態では、各クライアント130が、クライアント130で実行されているプログラムインスタンス131、および、必要であれば最近のレンダリングパラメータに基づく3Dモデルその他のデータをサーバ120に送信してよい。サーバ120は、各クライアント130から受け取る情報を格納することができる。一部の実施形態では、サーバ120は、各クライアント130から受け取った情報に基づいて、特定のクライアントに対していつレンダリングを実行するべきかを決定し、このレンダリングでは、3Dモデルおよびレンダリングパラメータが、他の適切な情報とともに利用される。一部の実施形態では、CPU122が実際の決定を行うことができる。一部の実施形態では、各レンダリングパスにおいて、CPU122がGPU121に、GPU121がそのレンダリングパス中に同時に複数のレンダリングを実行するために必要となる全てのデータ(例えばモデル、レンダリングパラメータのセット)を提供してよい。
図3は、複数のクライアントに対して複数のレンダリングを同時に実行するサーバの方法を示す。一部の実施形態では、サーバのGPU内のレンダリングターゲットを、複数のレンダリングターゲットユニットに分割してよい(ステップ301)。一部の実施形態では、レンダリングターゲットは、レンダリングされた画像が格納されうるGPU内のフレームバッファまたはその他の適切な種類のメモリまたはストレージであってよい。一部の実施形態では、レンダリングターゲットユニットは、全てが同じサイズであってよい(例えば各レンダリングターゲットユニットが同じ画素数を有してよい)。
任意の時点において、サーバは、任意の数のクライアントに接続されてよく、これらクライアントの代わりにこれらクライアントのために(より詳しくは、これらクライアントで実行されているコンピュータプログラムのインスタンスのために)レンダリングを実行してよい。一部の実施形態では、1以上のレンダリングターゲットユニットを、サーバに現在接続されておりサポートされている各クライアントに対して割り当ててよい(ステップ302)。1クライアントに実際に割り当てるレンダリングターゲットユニット数およびどのレンダリングターゲットユニットを割り当てるかは、そのレンダリングターゲットユニットが利用可能であるか、および、そのクライアントのシステムアーキテクチャ(一例であり限定ではないが、ビデオフレームバッファまたはクライアントのディスプレイの解像度、サイズ、大きさ、および向き)に応じて決定されてよい。例えば、新たなクライアントがサーバに接続されると、サーバは、現在利用可能なレンダリングターゲットユニット(つまり、その時点でどのクライアントにも割り当てられていないレンダリングターゲットユニット)のうち1以上をこのクライアントに対して割り当てる。逆に、サーバからあるクライアントが切断された場合には、サーバは、このクライアントに割り当てていたレンダリングターゲットユニットの割り当てを解除して(de-allocate)(つまり占有を解除する:free up)、当該レンダリングターゲットユニットを将来他のクライアントに割り当てることができるようにする。1人のクライアントに割り当てられるレンダリングターゲットユニット数は、そのクライアントのビデオフレームバッファまたはディスプレイのサイズまたは解像度に応じて定められて良い(例えば、高い解像度のディスプレイを有するクライアントには、低解像度のディスプレイを有するクライアントよりも多くの数のレンダリングターゲットユニットが割り当てられて良い)。
一部の実施形態では、コンピュータプログラムのインスタンスが、サーバに接続されているクライアント上で実行され始めると、サーバがこのプログラムインスタンスにレンダリングを行う場合、クライアントは、プログラムインスタンスのサーバに通知を行い、プログラムインスタンスのレンダリングを行うようサーバに要求する。クライアントは、レンダリングにおいて利用するプログラムインスタンスのモデルをサーバに送る。サーバは、プログラムインスタンスのレンダリングを行う期間は、このプログラムインスタンスのモデルを格納していてよい。一部の実施形態では、サーバは複数のクライアントに対してレンダリングを実行する場合があるので、各モデルを、どのクライアントに該モデルが関連付けられているかを示す固有識別子(ID)で特定することができる。
もちろん、1クライアント上で、同じまたは異なるコンピュータプログラムの複数のインスタンスを実行することができる。一部の実施形態では、クライアントは、サーバに対して、このクライアントで実行中の複数のプログラムインスタンスのレンダリングの実行を要求することができる。この場合、クライアントは、サーバに対して、複数のプログラムインスタンスに対応する複数のモデルを送信することができる。例えばプログラムインスタンスがクライアントで実行を開始するたびに、クライアントは、そのプログラムインスタンスのモデルをサーバに送信することができる。サーバはこれらモデルを格納してよく、各モデルは、当該モデルに関連付けられているクライアントおよびそのクライアントで実行されているプログラムインスタンスを示す固有IDで特定されてよい。
一部の実施形態では、サーバに現在接続されてサポートされている各クライアントについて1以上のレンダリングパラメータのセットを維持することができる(ステップ303)。一部の実施形態では、各レンダリングパラメータのセットが、あるクライアントで実行されているコンピュータプログラムのインスタンスに対応して、この特定のプログラムインスタンスについて実行されるレンダリング法を示している。従って、プログラムインスタンスの表示が時間が経って変わると、レンダリングパラメータも時間の推移とともに(例えばレンダリングごとに)変わる。一部の実施形態では、各レンダリングパラメータのセットが、モデルに関連付けられているクライアントおよびそのクライアントで実行されているプログラムインスタンスを示す固有IDで特定されてよい。
世の中には数多くのレンダリング技術が存在しており、本開示は、適したレンダリング技術のいずれをも対象としている。例えば、レイトレーシングは、レンダリング後の画像において非常に高度なフォトリアリズムを達成可能な、公知且つよく利用されているレンダリング技術である。簡単にいうと、レイトレーシングは、画像平面における画素間の光路を追跡することで、モデルから画像を生成する技術のことである。レイトレーシングには共に利用可能なアルゴリズムが様々存在している。レイトレーシングは、現実的には3Dオブジェクトに対する照明の効果をシミュレーションするものではあるが、計算量が多いのでサーバでの実行に適していると思われる。一部の実施形態では、レイトレーシングアルゴリズムをサーバで実行して、レイトレーシングを利用してレンダリングを実行してよい。
コンピュータグラフィック分野では、シェーダは、一義的には、高度な柔軟性をもってグラフィックハードウェアに対するレンダリング効果を計算するために利用されるソフトウェア命令セットのことである。一部の実施形態では、シェーダは、サーバのGPUプログラム可能レンダリングパイプラインをプログラミングするために利用することができ、この技術は、既に固定機能パイプライン(fixed-function pipeline)に取って代わったと見られる向きもある。シェーダには様々な種類があり、本開示では適したシェーダをいずれも対象としている。例えば、バーテックスシェーダは、GPUに与えられる各頂点に一度実行されて、各頂点の仮想空間における3Dの位置を、表示スクリーンまたはレンダリングされる2D画像の2D座標およびZバッファの深さ値に変換することができる。バーテックスシェーダは、位置、色、およびテクスチャ座標等の特性を操作することができる。ジオメトリシェーダは、バーテックスシェーダの後のレンダリングパイプラインの次段に置かれ、メッシュから頂点を加減算し、手続きとして配置を生成したり、容量分析的な詳細(volumetric details)を既存のメッシュに与えたりするために利用されてよい。ピクセルシェーダは、フラグメントシェーダとも称され、個々の画素の色を計算し、通常はシーンの照明および関連する効果について(例えばバンプマッピングおよびカラー調節)利用される。一部の実施形態では、各レンダリングパラメータのセットが、GPUのレンダリングパイプラインの様々な種類のシェーダに対応するシェーダ定数を含んでいて良い。シェーダ定数は、GPUに対して、レンダリングの実行方法を指示する。従って、実際には、シェーダ定数を利用して、レンダリングの結果(レンダリングされた画像)が制御されることになる。
上述したように、プログラムインスタンスが異なれば表示される画像も異なるために、各レンダリングパラメータのセット(例えばシェーダ定数)は、対応するプログラムインスタンスについてレンダリングごとに変化することが考えられる。一部の実施形態では、必要に応じて、サーバが維持しているレンダリングパラメータのセットを、レンダリングパスの前に更新してもよい(ステップ304)。各クライアントは、クライアントで実行されておりサーバでサポートされているプログラムインスタンスの現在の状態をサーバに送信してよい。一部の実施形態では、サーバは、クライアントから受け取った情報に基づいてレンダリングパラメータのセットを更新してよい。
一部の実施形態では、サーバは、1回のレンダリングパスにおいて、現在サーバでサポートされている複数のクライアントについて複数の画像を同時にレンダリングすることができる(つまり複数のレンダリングを行うことができる)(ステップ305)。一部の実施形態では、一回のレンダリングパスで、GPUレンダリングパイプラインにおいて一度移動が可能である。1つのレンダリングパイプライン内には様々な段階が存在する場合がある。例えば、先ずサーバのCPUが、命令と配置データとを、サーバのGPUに送信するとする。当該命令およびデータは、対応するモデルおよびレンダリングパラメータのセットに基づいて判断することができる。第2に、バーテックスシェーダ内で、配置を変換して照明計算を実行してよい。第3に、ジオメトリシェーダを利用する場合には、シーンにおける配置をいくらか変更してよい。第4に、計算した配置を三角形に分けてよい(triangulate)。そして最後に、得られた三角を画素に変換してよい。
一回のレンダリングパス中に複数の画像を同時にレンダリングするためには、GPUのリソースを複数のレンダリングプロセスで共有する必要がある。一部の実施形態では、生成されるレンダリング画像それぞれ、より詳しくは、レンダリング画像の画素値を、レンダリング画像に対応してクライアントに割り当てられた特定のレンダリングターゲットユニット内に格納する。
一部の実施形態では、サーバは、ビデオストリームを利用して現在サポートしている各クライアントにレンダリングされた画像を送信して、各レンダリング画像がビデオストリームのフレームとなるようにしてよい。一部の実施形態では、サーバは、一回の符号化パスで、レンダリングターゲットに格納されている複数のレンダリング画像を、複数のクライアントに対応する複数のビデオストリームに同時に符号化してよい(ステップ306)。例えば、第1レンダリング画像が、第1クライアントのための第1ビデオストリームの現在のフレームとして符号化され、第2レンダリング画像が、第2クライアントのための第2ビデオストリームの現在のフレームとして符号化され、・・・といった具合であってよい。
一部の実施形態では、次にサーバは、今ではビデオストリーム内でフレームとして符号化されているレンダリング画像をクライアントに送信してよい(ステップ307)。各ビデオストリームは、対応するクライアントに送信される。例えば、第1ビデオストリームが第1クライアントに送信され、第2ビデオストリームが第2クライアントに送信され、・・・といった具合であってよい。各クライアントは、ビデオストリームで新たなデータを受け取ると、このビデオストリームを復号して、サーバがレンダリングした画像である現在のフレームを抽出する。クライアントは、次に、表示スクリーンに現在のフレーム(つまりレンダリング画像)を表示してよい。
各クライアントで実行されている各プログラムインスタンスについて複数のレンダリングを実行することがよくある。従ってステップ304から307を繰り返すことができる。各レンダリングパスは、1人のクライアントに1枚のレンダリング画像が割り当てられるよう、サーバが現在サポートしている複数のクライアントに対して複数のレンダリング画像を生成することができる。各レンダリング画像は、対応するビデオストリームの別個のフレームとして符号化されて、対応するクライアントに送信されてよい。
一部の実施形態は、ネットワーク環境で実装されてよい。図4は、ネットワーク環境400の一例を示す。ネットワーク環境400は、1以上のサーバ420と1以上のクライアント430とを互いに連結するネットワーク410を含む。一部の実施形態では、ネットワーク410は、イントラネット、エクストラネット、仮想プライベートネットワーク(VPN)、ローカルエリアネットワーク(LAN)、無線LAN(WLAN)、ワイドエリアネットワーク(WAN)、メトロポリタンエリアネットワーク(MAN)、通信ネットワーク、衛星ネットワーク、インターネットの一部、または別のネットワーク410、または2以上のネットワーク410の組み合わせを含む。本開示は、適切な任意のネットワーク410を想定している。1以上のリンク450が、サーバ420またはクライアント430をネットワーク410に連結する。一部の実施形態では、1以上のリンク450それぞれが、1以上の有線、無線、または光リンク450を含む。一部の実施形態では、1以上のリンク450それぞれが、イントラネット、エクストラネット、仮想プライベートネットワーク(VPN)、ローカルエリアネットワーク(LAN)、無線LAN(WLAN)、ワイドエリアネットワーク(WAN)、メトロポリタンエリアネットワーク(MAN)、通信ネットワーク、衛星ネットワーク、インターネットの一部、または別のネットワーク450、または2以上のネットワーク450の組み合わせを含む。本開示は、サーバ420およびクライアント430をネットワーク410に連結する任意の適切なリンク450を含む。
一部の実施形態では、各サーバ420は、中央型サーバであってもよいし、または、複数のコンピュータまたは複数のデータセンタを包括する分散型サーバであってもよい。サーバ420は、様々な種類のものであってよく、例示であって限定ではないが、ウェブサーバ、ニュースサーバ、メールサーバ、メッセージサーバ、広告サーバ、ファイルサーバ、アプリケーションサーバ、交換サーバ、データベースサーバ、またはプロキシサーバであってよい。一部の実施形態では、各サーバ420が、サーバ420が実装してサポートする適切な機能を実行するために、ハードウェア、ソフトウェア、埋め込まれた論理部品、または、これら部品の2以上の組み合わせを含んでよい。例えばウェブサーバは、一般的に、ウェブページまたはウェブページの特定の部分を含むウェブサイトをホストすることができる。より詳しくは、ウェブサーバは、HTMLファイルその他のファイルの種類をホストすることができ、または、要求に応じてファイルを動的に作成または構成することができ、HTTPまたはクライアント430からの他の要求に応じて、クライアント430にこれらを通信することができる。メールサーバは、一般的に、電子メールサービスを様々なクライアント430に提供する機能を有している。データベースサーバは、一般的にいって、1以上のデータストア内に格納されているデータを管理するためのインタフェースを提供する機能を有している。
一部の実施形態では、各クライアント430は、クライアント430が実装またはサポートする適切な機能を実行するために、ハードウェア、ソフトウェア、うめこまれた論理部品、または、これら部品の2以上の組み合わせを含む電子デバイスであってよい。例示であって限定ではないが、クライアント430は、デスクトップコンピュータシステム、ノートブックコンピュータシステム、ネットブックコンピュータシステム、ハンドヘルド電子デバイス、または移動電話器であってよい。クライアント430は、クライアント430におけるネットワークユーザをネットワーク410にアクセスさせることができる。クライアント430は、ウェブブラウザ(例えばMicrosoft社のInternet Explorer、またはMozilla Firefox)を有してよく、GoogleのToolbarまたはYahooのToolbar等のアドオン、プラグイン、その他の拡張機能を有してよい。クライアント430は、ユーザに、他のクライアント430における他のユーザと通信させることができる。本開示は、任意の適切なクライアント430を含むこととする。
一部の実施形態では、1以上のデータストレージ440が、1以上のサーバ420に1以上のリンク450を介して通信可能に連結されていてよい。一部の実施形態では、データストレージ440を利用して、様々な種類の情報を格納することができる。一部の実施形態では、データストレージ440に格納されている情報を、特定のデータ構造に従って組織化することもできる。一部の実施形態では、サーバ420またはクライアント430に、データストレージ440に格納されている情報を管理させる(例えば取得、修正、追加、または削除を行わせる)インタフェースを提供することもできる。
一部の実施形態では、各サーバ420が、1以上のクライアント430に同時にサービス提供してよく、サポートしているクライアント430にレンダリングを実行してよい。サーバ420は、ビデオストリーム内の複数のレンダリング画像(各レンダリング画像が1つのフレームである)を符号化することで、サポートしている特定のクライアント430のレンダリング画像を送信することができ、ビデオストリームをクライアント430に送信することができる。クライアント430は、ビデオストリームを受信すると、ビデオストリームを復号して、表示用の画像フレームを抽出することができる。米国特許出願第12/579,300号、および、12/709,343号明細書は(両方とも全ての目的でここに参照として組み込まれる)、1以上のクライアント430に、圧縮したビデオストリームを配信するために利用されてよいビデオコーデックを開示している。加えて、前述した各出願明細書は、各サーバ420がGPUの並列処理リソースを利用して、ビデオをクライアント430用に生成してストリーミングする方法を開示している。
一部の実施形態は、ハードウェア、ソフトウェア、またはハードウェアとソフトウェアの組み合わせとして実装されてよい。あくまで例示であり限定ではないが、1以上のコンピュータシステムが、ここで記載され図示される1以上のプロセスの1以上のステップを実行する特定の論理またはソフトウェアを実行することができる。コンピュータシステムのうち1以上は、中央型であっても分散型であってよく、適宜、複数のコンピュータシステムまたは複数のデータセンタを包括していてよい。本開示は、任意の適切なコンピュータシステムを含むことができる。一部の実施形態では、ここで記述され図示される1以上のプロセスの1以上のステップの実行が、必ずしも1以上の地理的位置に限定されず、時間的な制約を持たなくてもよい。一例であり限定ではないが、1以上のコンピュータシステムは、自身の機能を「リアルタイムで」、「オフラインで」、「バッチモードで」、または、適宜、上述したものの任意の組み合わせで実行することができる。コンピュータシステムのうち1以上は、適宜、機能の1以上の部分を異なる時点に、異なる場所で、異なる処理を利用して実行することができる。ここでは、論理という場合、適切な場合には、1以上のソフトウェアを含むことができ、この逆もしかりである。ソフトウェアという場合、適切な場合には、1以上のコンピュータプログラムを含むことができ、この逆もしかりである。ソフトウェアという場合、適切な場合には、データ、命令、または両方を含むことができ、この逆もしかりである。同様に、データという場合には、適切な場合には、命令を含むことができ、この逆もしかりである。
1以上のコンピュータ可読媒体は、特定の実施形態を実装するソフトウェアを格納したり、具現化したりすることができる。コンピュータ可読媒体は、適宜、ソフトウェアを搬送したり、通信したり、含んだり、保持したり、維持したり、伝播させたり、保有したり、格納したり、送信したり、伝送したり、または具現化することができる。コンピュータ可読媒体は、生物学的、化学的、電子的、電磁的、赤外線、磁気、光、量子、その他の適切な媒体または2以上の媒体の組み合わせであってよい。コンピュータ可読媒体は、1以上のナノメートル単位のコンポーネントを含んでよく、または、ナノメートル単位の設計または製造物を具現化してもよい。一例であるコンピュータ可読格納媒体には、これらに限定はされないが、コンパクトディスク(CD)、フィールドプログラマブルゲートアレイ(FPGA)、フロッピー(登録商標)ディスク、光ディスク(floptical disk)、ハードディスク、ホログラフィック記憶デバイス、集積回路(IC)(用途特定集積回路(ASIC)等)、磁気テープ、キャッシュ、プログラム可能論理デバイス(PLD)、ランダムアクセスメモリ(RAM)デバイス、読み取り専用メモリ(ROM)デバイス、半導体メモリデバイス、およびその他の適したコンピュータ可読格納媒体が含まれる。
特定の実施形態を実装するソフトウェアは、任意の適切なプログラミング言語(プロシージャ言語であってもオブジェクト指向型言語であってもよい)またはこれらプログラミング言語の組み合わせで書き込まれて良い。適宜、任意の適切な種類のコンピュータシステム(例えばシングルまたはマルチプロセッサコンピュータシステム)またはシステムが、特定の実施形態を実装するソフトウェアを実行することができる。適切な場合には、汎用コンピュータシステムが、特定の実施形態を実装するソフトウェアを実行することができる。
例えば図5は、特定の実施形態の一以上の部分を実装するのに適したコンピュータシステム500の一例を示す。本開示は、特定の構成の特定のコンポーネントを有する特定のコンピュータシステム500を記載または例示しているが、本開示は、任意の適切な構成の任意の適切なコンポーネントを含む任意の適切なコンピュータシステムを含むこともできる。さらにコンピュータシステム500は、例えば1以上の集積回路(IC)、1以上のプリント配線基板(PCB)、1以上のハンドヘルドまたはその他のデバイス(例えば移動電話またはPDA)、1以上のパーソナルコンピュータ、または1以上のスーパーコンピュータ等の任意の適切な物理的形態をとることができる。
システムバス510は、コンピュータシステム500のサブシステム同士を連結することができる。ここでは、バスという概念は、共通の機能を果たす1以上のデジタル信号線を含んでよい。本開示は、任意の適切なバスアーキテクチャを有する任意の適切なバス構造(例えば1以上のメモリバス、1以上の周辺バス、1以上のローカルバス、または上述したものの組み合わせ)を有する任意の適切なシステムバス510を含むことができる。一例であるバスアーキテクチャには、これらに限定はされないが、ISA(Industry Standard Architecture)バス、EISA(Enhanced ISA)バス、マイクロチャネルアーキテクチャ(MCA)バス、VLB(Video Electronics Standards Association local)バス、PCI(Peripheral Component Interconnect)バス、PCIエクスプレスバス(PCI−X)、およびAGP(Accelerated Graphics Port)バスが含まれる。
コンピュータシステム500は、1以上のプロセッサ520(または中央処理装置(CPU))を含む。プロセッサ520は、命令、データ、またはコンピュータアドレスを一時的にローカルに格納するためのキャッシュ522を含んでいてよい。プロセッサ520は、メモリ530を含む1以上の格納デバイスに連結される。メモリ530は、ランダムアクセスメモリ(RAM)532および読み取り専用メモリ(ROM)534を含んでよい。データおよび命令は、プロセッサ520とRAM532との間を双方向に伝送されてよい。データおよび命令は、ROM534からプロセッサ520へと一方向で伝送されてよい。RAM532およびROM534は、任意の適切なコンピュータ可読格納媒体を含んでよい。
コンピュータシステム500は、双方向的にプロセッサ520に連結された固定ストレージ540を含む。固定ストレージ540は、格納制御ユニット552を介してプロセッサ520に連結されてよい。固定ストレージ540は、さらなるデータ格納キャパシティを提供してよく、任意の適切なコンピュータ可読格納媒体を含んでよい。固定ストレージ540は、オペレーティングシステム(OS)542、1以上の実行可能ファイル544、1以上のアプリケーションまたはプログラム546、データ548等を格納してよい。固定ストレージ540は、通常は、一次ストレージより遅い二次格納媒体(例えばハードディスク)である。適宜、固定ストレージ540に格納される情報が仮想メモリとしてメモリ530に組み込まれても良い。
プロセッサ520は、例えばグラフィック制御554、ビデオインタフェース558、入力インタフェース560、出力インタフェース562、および格納インタフェース564等の様々なインタフェースに連結されてよく、これらはそれぞれ適切なデバイスと連結されていてよい。入力デバイスおよび出力デバイスの例には、これらに限定はされないが、ビデオディスプレイ、トラックボール、マウス、キーボード、マイクロフォン、タッチセンサー式のディスプレイ、トランスデューサーカードリーダ、磁気または紙テープリーダ、タブレット、スタイラスペン、音声または手書き認識器、生体認証リーダ、またはコンピュータシステムが含まれる。ネットワークインタフェース556は、プロセッサ520を、別のコンピュータシステムまたはネットワーク580に連結してよい。ネットワークインタフェース556を利用することで、プロセッサ520は、特定の実施形態のステップを実行する間に、情報をネットワーク580に対して送受信することができる。実施形態によってはプロセッサ520上でのみ実施されるものもある。実施形態によっては、プロセッサ520上と、同時に実行されている1以上の遠隔プロセッサ上とで実施可能なものもある。
コンピュータシステム500がネットワーク580に接続されたネットワーク環境では、コンピュータシステム500は、ネットワーク580に接続されている他のデバイスと通信することができる。コンピュータシステム500は、ネットワークインタフェース556を介してネットワーク580と通信してよい。例えば、コンピュータシステム500は、ネットワーク580から情報(例えば別のデバイスからの要求または応答)を、ネットワークインタフェース556に入ってくる1以上の入力パケットという形式で受信してよく、メモリ530は、後の処理のために入力パケットを格納することができる。コンピュータシステム500は、ネットワーク580に、情報(例えば別のデバイスへの要求または応答)を、ネットワークインタフェース556からの1以上の出力パケットという形式で送信してよく、この出力パケットは、送信前にはメモリ530が格納していてよい。プロセッサ520は、メモリ530内の入力パケットまたは出力パケットにアクセスして、特定要件に従って処理する。
コンピュータシステム500は、1以上の入力デバイス566(キーパッド、キーボード、マウス、スタイラスペン等を含みうる)、1以上の出力デバイス568(1以上のディスプレイ、1以上のスピーカ、1以上のプリンタ等を含みうる)、1以上の格納デバイス570、および1以上の格納媒体572を有しうる。入力デバイス566は、コンピュータシステム500の外部にあっても内部にあってもよい。出力デバイス568も、コンピュータシステム500の外部にあっても内部にあってもよい。格納デバイス570も、コンピュータシステム500の外部にあっても内部にあってもよい。格納媒体572も、コンピュータシステム500の外部にあっても内部にあってもよい。
一部の実施形態では、ここに記載または例示した1以上のプロセスの1以上のステップを実行するためのソフトウェアを具現化する1以上のコンピュータ可読格納媒体を含む1以上のコンピュータ可読プロダクトを含む。一部の実施形態では、媒体の1以上の部分、ソフトウェア、またはこれら両方が、ここで記載または例示した1以上のプロセスの1以上のステップの実行専用に設計および製造されたものであってよい。これらに加えて、または、これらに代えて、一部の実施形態では、媒体の1以上の部分、ソフトウェア、またはこれら両方が、ここで記載または例示したプロセス特有の設計、製造されたものではなく、一般的に利用可能なものであってもよい。コンピュータ可読格納媒体の例には、これらに限定はされないが、CD(例えばCD−ROM)、FPGA,フロッピー(登録商標)ディスク、光ディスク(floptical disk)、ハードディスク、ホログラフィック記憶デバイス、集積回路(IC)(用途特定集積回路(ASIC)等)、磁気テープ、キャッシュ、プログラム可能論理デバイス(PLD)、ランダムアクセスメモリ(RAM)デバイス、読み取り専用メモリ(ROM)デバイス、半導体メモリデバイス、およびその他の適したコンピュータ可読格納媒体が含まれる。一部の実施形態では、ソフトウェアは、コンパイラが生成することのできるマシンコード、または、コンピュータが解釈プログラムを利用して実行することができる高レベルのコードを含む1以上のファイルを生成してよい。
一例であり限定ではないが、メモリ530は、ソフトウェアを具現化する1以上のコンピュータ可読格納媒体を含むことができ、コンピュータシステム500は、プロセッサ520がソフトウェアを実行する結果、ここに記載され例示された特定の機能を提供することができる。メモリ530はソフトウェアを格納して、プロセッサ520はソフトウェアを実行することができる。メモリ530は、ソフトウェアを具現化する大容量格納デバイス530のコンピュータ可読格納媒体から、または、1以上の他のソースからネットワークインタフェース556経由で、ソフトウェアを読み出すことができる。ソフトウェアの実行時には、プロセッサ520は、ここに記載され例示された1以上のプロセスの1以上のステップを実行することができ、これには、特定の要求に応じて、ソフトウェアの1以上の部分の命令に応じて、メモリ530への格納のために1以上のデータ構造を定義して、データ構造の1以上を修正することを含みうる。これに加えて、またはこの代わりに、コンピュータシステム500は、回路内にハードウェアとして組み込まれている、または具現化された論理の結果として、ここに記載または例示した特定の機能を提供することができ、これらはソフトウェアの代わりに、またはソフトウェアと協働して動作することで、ここに記載または例示した1以上のプロセスの1以上のステップを実行することができる。本開示は、特定の要求に応じて、ハードウェアおよびソフトウェアの任意の適切な組み合わせを含む。
一部の実施形態では、コンピュータシステム500は、1以上のグラフィックプロセッシングユニット(GPU)524を含んでよい。一部の実施形態では、GPU524は、グラフィックレンダリング分野でよく利用される数学的演算に対する1以上の集積回路および/またはプロセッサコアを含んでよい。一部の実施形態では、GPU524は、特別なグラフィックユニット命令セットを利用してよく、他の実装例では、GPUがCPU同様の命令セット(例えば修正後のx86)命令セットを利用してよい。グラフィック処理セット524は、転送(blitting)、テクスチャマッピング、ピクセルシェーディング、フレームバッファリング等の複数のグラフィック上のプリミティブな操作を実装してよい。一部の実施形態では、GPU524は、グラフィックアクセラレータ、汎用GPU(GPGPU)、または任意の他の適切な処理ユニットであってよい。
一部の実施形態では、GPU524は、ハードウェアシステムアーキテクチャをカードスロットを通って取り付けられるグラフィックまたはディスプレイカードに実装されてよい。他の実装例では、GPU524は、コンピュータシステムアーキテクチャのマザーボード上に集積されてもよい。適切なグラフィックプロセッシングユニットには、Advanced Micro Devices(登録商標)AMD R7XX ベースの GPUデバイス (Radeon(登録商標) HD 4XXX), AMD R8XX ベースのGPUデバイス(Radeon(登録商標) HD 5XXX), Intel(登録商標) LarabeeベースのGPUデバイス(まだリリースされていない), nVidia(登録商標) 8シリーズのGPU, nVidia(登録商標) 9シリーズのGPU、nVidia(登録商標) 100 シリーズのGPU、nVidia(登録商標) 200シリーズのGPU、およびその他のDX1 1を利用可能なGPUが含まれる。
本開示は、特定の順序で特定の動作を記載または例示してきたが、本開示では、任意の適切な動作を任意の適切な順序で行うことができる。さらに本開示は、任意の適切な処理を、任意の適切な順序で1以上の回数繰り返すこともできる。本開示は特定の動作を一連の作業として記載または例示しているが、本開示では、適宜、任意の適切な動作を略同時に行っても良い。ここに記載または例示した適切な1つの動作または一連の動作は、適宜、別のプロセス(例えばオペレーティングシステムまたはカーネル)によって中断、停止、または制御されてもよい。動作は、システム処理の全てまたは実質的な部分を占拠するオペレーティングシステム環境または独立型のルーチンとして行うことができる。
本開示は、当業者であれば理解するであろう、例示的な実施形態に対する全ての変更、代替、変形、修正等を含む。同様に、適切な場合には、添付請求項も、当業者であれば理解するであろう、例示的な実施形態に対する全ての変更、代替、変形、修正等を含む。
本発明の特定の実施形態に関する記載は、例示および説明目的で提供されている。従って本発明を網羅的に説明すること、または本発明を開示する特定の形態そのものに限定することを意図しておらず、前述した興じからは明らかに数多くの変形例および変更例が可能である。実施形態は、当業者が最もよく本発明を実施形態することができるように、本発明の原理を最もよく説明することができるものという観点から選択されており、様々な変形例を有する様々な実施形態が考えられる特定の用途には適している。本発明の範囲は、添付請求項およびそれらの均等物によって定義されることが意図されている。
[項目1]
無線デバイスからのコードを有効化する方法であって、
(a)リーダから、上記リーダの読み取りフィールドにあり上記リーダの上記読み取りフィールドにより電力供給されている上記無線デバイスへ信号をブロードキャストする段階と、
(b)上記無線デバイスから再放射および後方散乱の少なくとも一方がなされ、予め定められた品質、特性、および特徴の少なくとも1つを有する有効化コードを読み取る段階と、
(c)上記有効化コードを参照品質、特性、および特徴の少なくとも1つと比較する段階と、
(d)上記有効化コードの上記予め定められた品質、特性、および特徴の少なくとも1つが上記参照品質、特性、および特徴の少なくとも1つに整合する場合には、上記有効化コードを有効化する段階と
を備える方法。
[項目2]
上記有効化コードは、予め定められた数のビットを含み、
上記参照品質、特性、および特徴の少なくとも1つは、予想された数のビットからなり、
上記有効化コードは、上記予め定められた数のビットが上記予想された数のビットと整合する場合に有効化される項目1に記載の方法。
[項目3]
上記リーダの読み取りフィールド内の1以上の無線デバイスから複数の有効化コードを読み取る段階をさらに備える項目1に記載の方法。
[項目4]
上記有効化コードは、上記無線デバイスから複数回再放射および後方散乱の少なくとも一方がなされる項目1に記載の方法。
[項目5]
上記有効化コードの再放射および後方散乱の少なくとも一方の各々の前および後の少なくとも一方に、予め定められたサイレント期間が存在する項目4に記載の方法。
[項目6]
第1の再放射および後方散乱の少なくとも一方による第1の有効化コードを、第2の再放射および後方散乱の少なくとも一方による第2の有効化コードと比較して、上記第1の有効化コードおよび上記第2の有効化コードが整合する場合に、上記有効化コードを有効化する段階をさらに備える項目4に記載の方法。
[項目7]
上記リーダのメモリに複数の無線デバイスから再放射および後方散乱の少なくとも一方がなされた有効化コードのリストを格納する段階をさらに備える項目6に記載の方法。
[項目8]
予め定められた期間が経つと、または、上記リーダが、読み取り/ブロードキャストフィールド内の上記複数の無線デバイスに対する電力を停止すると、上記リストをリセットする段階をさらに備える項目7に記載の方法。
[項目9]
項目1に記載の方法を実行するコンピュータ実行可能な命令セットを格納するコンピュータ可読媒体。
[項目10]
上記コンピュータ実行可能な命令セットは、さらに、上記リーダのメモリに複数の有効化コードを格納する項目9に記載のコンピュータ可読媒体。
[項目11]
コード送信を有効化するリーダであって、
(a)リーダの読み取りフィールドにあり上記リーダの上記読み取りフィールドにより電力供給されている無線デバイスへ無線信号をブロードキャストするアンテナと、
(b)上記アンテナがブロードキャストする上記無線信号の変調、および上記無線デバイスから再放射および後方散乱の少なくとも一方がなされ、予め定められた品質、特性、および特徴の少なくとも1つを有する有効化コードを含む応答の復調の少なくとも一方をする無線通信モジュールと、
(c)上記予め定められた品質、特性、および特徴の少なくとも1つを参照品質、特性、および特徴の少なくとも1つと比較して、受信した上記有効化コードが上記参照品質、特性、および特徴の少なくとも1つに整合する場合には、上記有効化コードを有効化する有効化回路と、
(d)上記無線デバイスとの間の通信を処理、伝達、および管理の少なくとも1つをするコントローラと
を備えるリーダ。
[項目12]
上記リーダは、上記応答の前および後の少なくとも一方の予め定められたサイレント期間により、再放射および後方散乱の少なくとも一方がなされた有効化コードを識別する項目11に記載のリーダ。
[項目13]
上記有効化コードは、予め定められた数のビットを含む項目11に記載のリーダ。
[項目14]
上記参照品質、特性、および特徴の少なくとも1つを格納し、1以上の無線デバイスからの有効化コードのリストを格納するメモリをさらに備える項目11に記載のリーダ。
[項目15]
上記コントローラは、予め定められた期間が経つと、または、上記1以上の無線デバイスに対する電力が停止されると、上記有効化コードのリストをリセットする項目14に記載のリーダ。
[項目16]
上記無線通信モジュールは、無線デバイスからの複数の連続する応答をし、
上記有効化回路はさらに、上記複数の連続する応答をそれぞれ互いに比較して、上記複数の連続する応答が互いに整合する場合に、上記無線デバイスからの上記有効化コードを有効化する項目11に記載のリーダ。
[項目17]
上記リーダは、応答を、上記応答の前および後の少なくとも一方の予め定められたサイレント期間により識別する項目16に記載のリーダ。
[項目18]
デバイスであって、
(a)上記デバイスがリーダの読み取りフィールド内にあるとき上記リーダからの無線信号を受信して、予め定められた品質、特性、および特徴の少なくとも1つを有する有効化コードを含む応答信号を再放射または後方散乱するアンテナと、
(b)上記アンテナに連結され、上記リーダの上記読み取りフィールドにより電力供給され、上記無線信号を復調または処理して、上記無線信号の吸収を復調して上記応答信号を提供する無線通信回路と、
(c)(1)有効化コード格納領域を含むメモリ、および、(2)上記有効化コードを提供する応答生成器を含む応答回路と
を備えるデバイス。
[項目19]
上記デバイスはバッテリを備え、上記リーダとの無線通信を開始する項目18に記載のデバイス。
[項目20]
上記無線通信回路は、上記アンテナおよび上記応答回路に接続された入力および出力の少なくとも一方の制御部を有する項目18に記載のデバイス。
[項目21]
上記無線通信回路は、(i)上記リーダから受信したコマンドおよびデータの少なくとも一方を復調する復調器と、(ii)上記アンテナに対する上記有効化コードを含む信号を変調するデータ変調器とを有する項目18に記載のデバイス。
[項目22]
上記無線通信回路は、上記応答回路のロジック用のクロック信号を生成するクロック抽出器を有する項目21に記載のデバイス。
[項目23]
上記ロジックは、上記メモリおよびオプションとして遅延/リセット回路と通信する少なくとも1つの循環シフトレジスタを有する項目22に記載のデバイス。
[項目24]
上記無線通信回路は整流器を有し、上記整流器は、(i)上記アンテナが受信した信号を受信し、(ii)電力を上流および下流に提供する項目21に記載のデバイス。
[項目25]
上記応答生成器は、各有効化コードの再放射および後方散乱の少なくとも一方の前および後の少なくとも一方の予め定められたサイレント期間を利用して、上記有効化コードの1つを複数回提供する項目18に記載のデバイス。
[項目26]
上記有効化コードの再放射および後方散乱の少なくとも一方の前の上記予め定められたサイレント期間の長さは、上記有効化コードの再放射および後方散乱の少なくとも一方の後の上記予め定められたサイレント期間の長さとは異なる項目25に記載のデバイス。

本開示は主にサーバ側のアプリケーションレンダリングに係り、より詳しくは、複数のレンダリングパラメータのセットに基づいて、複数のクライアントに対して複数のアプリケーションを同時にレンダリングするサーバに関する。
一般に、クライアント−サーバアーキテクチャは、サーバ(「サービスプロバイダ」と考えることもできる)と、クライアント(「サービス要求者」または「サービス消費者」ととらえることもできる)と間でタスクまたはワークロードを分割する分散コンピューティングアーキテクチャである。しばしば、サーバとクライアントとはコンピュータネットワークを介して接続されており、様々な種類のデータが、個々のサーバと個々のクライアントとの間で、コンピュータネットワークを介して双方向送信される。
通常サーバは、クライアントより多くのリソースを有し、性能機能が高い。1つのサーバは、1以上のクライアントとの間でリソースを共有する場合があり、例えば、これらクライアントのために一定のタスクを実行する(つまり、これらクライアントにサービスを提供する)。サーバは通常の場合、クライアントよりも多くのリソースを有することから、タスクを(特にリソースを多く必要とするタスク)を、クライアントよりも早く完成することができることが多い。
サーバおよびクライアント間で交換されるデータは、任意の適切なデータフォーマットを利用して表すことができ、任意の適切な通信プロトコルを利用して送信することができる。例えば、あるアプリケーションがクライアントのためのサーバで実行されている場合を考えると、アプリケーションの出力は、ハイパーテキストマークアップ言語(HTML)文書または拡張可能マークアップ言語(XML)文書等の構造化された文書を利用して表される場合がある。サーバはクライアントに、アプリケーションの出力を表すデータを含むHTMLまたはXML文書を、サーバとクライアントとの間のハイパーテキスト転送プロトコル(HTTP)接続を介して送信することができる。クライアントは、このHTMLまたはXML文書を受け取ると、クライアントで実行されているウェブブラウザ等においてローカルにHTMLまたはXML文書を利用して、文書を消費してアプリケーションの出力をレンダリングすることができる。
本開示は主にサーバ側のアプリケーションレンダリングに係り、より詳しくは、複数のレンダリングパラメータのセットに基づいて、複数のクライアントに対して複数のアプリケーションを同時にレンダリングするサーバに関する。一部の実施形態では、コンピュータシステムは複数のアプリケーションインスタンスをホストしており、各アプリケーションインスタンスが1つの遠隔のクライアントアプリケーションに対応している。コンピュータシステムは、アプリケーションインスタンスがホストされている各遠隔クライアントアプリケーションへのネットワーク接続を維持する。コンピュータシステムは、少なくとも2つの遠隔クライアントアプリケーション間で、コンピュータシステムのグラフィックプロセッシングユニットのリソースを割り当てる。コンピュータシステムは、コンピュータシステムのグラフィックプロセッシングユニットのリソースを利用して、少なくとも2つの遠隔クライアントアプリケーションに対応するアプリケーションインスタンスのグラフィック出力を同時にレンダリングする。そしてコンピュータシステムは、レンダリングしたグラフィック出力を、銘々のネットワーク接続を介して少なくとも2つの遠隔クライアントアプリケーションに送信する。
一部の実施形態では、第1コンピュータシステムが複数のレンダリングパラメータのセットにアクセスするが、第1コンピュータシステムは複数の第2コンピュータシステムに接続されており、各レンダリングパラメータのセットは、複数の第2コンピュータシステムの対応する1つに対応しており、第1コンピュータシステムは、画像を格納するためのレンダリングターゲットを含み、このレンダリングターゲットは、複数の複数の第2コンピュータシステムで共有される。第1コンピュータシステムは、複数のレンダリングパラメータのセットに基づいて、複数の第2コンピュータシステムのための複数の画像を同時にレンダリングするが、複数の画像それぞれは複数の第2コンピュータシステムの1つについて、複数の第2コンピュータシステムの1つに対応する複数のレンダリングパラメータのセットの1つに基づいてレンダリングされ、レンダリングターゲットに格納される。第1コンピュータシステムは、複数の画像それぞれを、画像がレンダリングされている複数の第2コンピュータシステムのうち対応するものに対して送信する。
記載した、または記載していない開示の特徴、側面、および利点は、添付図面とともに、以下の詳細な記載に詳述される。
複数のクライアントにサーバのリソースを割り当てるためのクライアント−サーバシステムの一例を示す。 複数の対象ユニットに分割するサーバのレンダリングターゲットの一例を示す。 複数のクライアントに対して複数のレンダリングを同時に実行するサーバの方法を示す。 ネットワーク環境の一例を示す。 コンピュータシステムの一例を示す。
本開示を、添付図面を参照しつつ、一部の実施形態に基づいて記載する。以下の記載では、特定の詳細を述べて、本開示の完全な理解を促す。しかし、当業者には、本開示がこれら特定の詳細の一部または全てがなくても実施可能であることが明らかである。他の場合には、本開示を不当に曖昧にしないために、公知のステップおよび/または構造は、詳しく示さない。加えて、本開示は、特定の実施形態との関連で記載されるが、この記載は、記載される実施形態に開示を限定する意図はないことを理解されたい。逆に、記載は、添付請求項で定義される開示の精神および範囲内に含まれている代替例、変更例、および均等物を含むことを意図している。
クライアント−サーバアーキテクチャは、サーバに、1以上のクライアントとリソースを共有させる。このアーキテクチャは様々な利点を有している。例えば通常のサーバはクライアントよりも多くのリソース(例えばプロセッサまたはメモリ)を有し、性能機能が高いことから、サーバは、クライアントよりもタスクを早くすることができることが多い。このような性能面での違いは、タスクがリソースを多く必要とする場合、または、クライアントのリソース量が限られている場合に特に顕著となる。同時に、サーバがクライアントの代わりに、またはクライアントのためにタスクを行っている間、クライアントのリソース占有を解除して、クライアントでローカルに実行する必要のあるタスク等の他のタスク(例えば、クライアントのユーザとのやりとり)を行わせる、といったこともできる。
サーバで実行されるのに適していると思われるタスクの一種に、サーバがホストするアプリケーションを、クライアントに対する送信用のビデオ出力としてレンダリングする、というものがある。コンピュータグラフィックの分野では、レンダリングは、通常はコンピュータプログラムを利用して、あるモデルから画像を生成するプロセスとして理解されている。モデルは、通常、三次元(3D)オブジェクトの記述であり、厳密に定義された言語またはデータ構造で表すことができるようなものである。モデルは、幾何学、視点、テクスチャ、照明、シェーディング、動き、その他の適切な種類の情報を含んでよい。モデルがレンダリングされる画像は、デジタル画像またはラスターグラフィック画像であってよく、画素群により形成することができる。本開示では、レンダリングの思想を、任意のアプリケーションの任意の出力を表す画像を生成することへと拡張する。レンダリングは、2次元(2D)データおよび3Dデータを含む任意のデータに基づいて実行されてよい。あくまで例示であり限定ではないが、特定の実施形態では、3Dモデルに基づいて画像を生成することに加えて、ウェブのブラウジングアプリケーション、ワード処理アプリケーション、スプレッドシートアプリケーション、マルチメディアアプリケーション、科学および医療用のアプリケーション、およびゲームアプリケーション等のアプリケーションの出力を表す画像もレンダリングする。
レンダリングは、高解像度および高画質をレンダリングされる画像に求める場合には特に、非常に計算量が多いことからリソースを多く必要とするプロセスであるので、サーバでの実行に適した種類のタスクといえる。これまでの古いコンピュータシステムでは、3次元のモデルを単純な2D画像にレンダリングするのに数時間または数日間かかっていた。コンピュータハードウェア(特にコンピュータグラフィックアプリケーション(例えばゲーム、マルチメディア、娯楽、またはマッピング)専用に設計されたコンピュータハードウェア)の開発、進歩により、現在のコンピュータシステムは、各画像を数秒間または数ミリ秒間にレンダリングすることができるようになった。実際、モデルを単一の画像にレンダリングするためにサーバで利用可能なリソース全てが占有されるという事態もあまりなくなってきている。一部の実施形態では、サーバで利用可能なリソースを有効活用するために、サーバが複数のクライアントに対して複数のレンダリングを同時に実行して(例えば、複数の3Dモデルを複数の2D画像に同時にレンダリングして)、且つ、各クライアントに対してレンダリングをそれぞれ実行する。一部の実施形態では、サーバの利用可能なリソースが、複数のクライアントに割り当てられたり、複数のクライアントにより共有されたりする場合がある。従って、各クライアントには、サーバで利用可能なリソースの一部が割り当てられる。より詳しくは、一部の実施形態では、サーバのグラフィックプロセッシングユニット(GPU)をクライアント間で共有する。特定のクライアントについて実行されるレンダリングはそれぞれ、そのクライアントに対して特に割り当てられたリソースの持分を利用して実行されてよい。一部の実施形態では、レンダリングプロセスで生じた出力である各レンダリングされた画像を、レンダリング画像が取得された対応するクライアントに送信してもよい。
図1は、単一のサーバ120が複数のクライアント130に同時に複数のレンダリングを行うシステムの一例を示す。図1には、図示をしやすくする目的から4つのクライアント130A、130B、130C、130Dしか示していない。実際には、サーバは、任意の数のクライアントに対してレンダリングを同時に行ってよく、任意の時点においてあるサーバがサポートするクライアント数には理論的には制限がない。同様に、図1には、図示をしやすくする目的から1つのGPU121および1つのCPU122しか示していない。実際には、サーバは、任意の数のGPUおよびCPUを有してよい。
一部の実施形態では、サーバ120は各クライアント130とそれぞれ別の接続150を介して接続する。一部の実施形態では、サーバ120とクライアント130との間の接続150は、コンピュータネットワークを介したネットワーク接続であってよく、このコンピュータネットワークとは、あくまで例示であり限定ではないが、インターネット、イントラネット、ローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)、無線ネットワーク、またはこれらコンピュータネットワークの2以上の組み合わせであってよい。一部の実施形態では、各ネットワーク接続150が、トランスポート制御プロトコル(TCP)接続、ユーザデータグラムプロトコル(UDP)接続、または任意の他の適切な接続であってよい。一部の実施形態では、サーバ120は複数のTCPソケット124を有してよく、各クライアント130が、別個のTCP接続150を介して異なるTCPソケット124に接続されていてよい。例えばクライアント130Aは、TCP接続150Aを介してサーバ120のTCPソケット124Aに接続されてよい。一部の実施形態では、データがサーバ120と各クライアント130との間で双方向に、対応する接続150を介して交換されてよい。例えばサーバ120とクライアント130Aとは、接続150Aを介して双方向にデータを交換してよい。データは任意の適切なフォーマットであってよい。例えばサーバ120は、ビデオストリームの形態でデータをクライアント130に送信することができ、各クライアント130が、データをサーバ120に送信してよい。サーバ120とクライアント130との間の通信では、任意の適切なプロトコルが利用されてよい。例えば、アプリケーション131Aのインスタンスが、クライアント130Aのためにサーバ120で実行されている場合を想定する。サーバ120で実行されているアプリケーション131Aのインスタンスのレンダリングされた出力が、ビデオストリームの形態でサーバ120からクライアント130Aに送信されてよく、各レンダリングされた画像は、アプリケーション131Aのインスタンスの出力を、ビデオストリームの特定のフレームで表したものである。クライアント130Aが受け取った入力は(特に、サーバ120で実行されているアプリケーション130Aのインスタンスの状態を変えさせる入力は)、クライアント130Aからサーバ120に送信するとよい。
一部の実施形態では、サーバ120は、1以上の中央処理装置(CPU)122と1以上のグラフィックプロセッシングユニット(GPU)121とを有していてよい。CPUおよびGPUは、コンピュータ分野でよく知られている。簡単に説明すると、CPUは、コンピュータの機能およびコンピュータプログラムの命令を実行するコンピュータシステムの部分のことである。GPUは、マイクロプロセッサ(例えばCPU)からのグラフィックレンダリングをオフロードするための専用プロセッサである。一般的には、GPUは、コンピュータグラフィックを操作する際に非常に効率がよく、その高度な並列構造によって、広範囲の複雑なアルゴリズムにおいて(例えばグラフィック関連のアルゴリズムにおいて)、汎用CPUよりも効果が高い。一部の実施形態では、GPU121は、ビデオカードの一部であってよく、またはサーバ120のマザーボードにあってもよい。
一部の実施形態では、GPU121はレンダリングターゲットを含んでよい。一部の実施形態では、レンダリングプロセスは、1以上のアプリケーションの出力を、レンダリングターゲットに対する1以上の画像としてレンダリングする。一部の実施形態では、レンダリングされた2D画像が、GPU121のレンダリングターゲット内に格納されてよい。一部の実施形態では、レンダリングターゲットは、GPU121内のフレームバッファまたは任意の種類のメモリまたはストレージであってよい。図2は、GPU(例えばGPU121)のレンダリングターゲット200の一例を示す。この例では、レンダリングターゲット200がGPU121内のメモリストレージ(例えばフレームバッファ)である。一部の実施形態では、レンダリングターゲットは、1以上のアプリケーションのレンダリングされた出力を表す最大256メガピクセルまでを格納することができる。従って、例えばレンダリングターゲットは、それぞれ1メガピクセルのブロック(1024x1024画素)の16x16格子に分割されてよい。レンダリングターゲットは、他の表示アスペクト率に対応するように分割されてもよい。
一部の実施形態では、レンダリングターゲットは、複数の部分に分割されてよい。図2では、レンダリングターゲット200は、4×4の格子という16個の部分に分割されており、各部分を、レンダリングターゲット200のユニットまたはレンダリングターゲットのユニットと称することができる。ここでも、レンダリングターゲット200を16個のレンダリングターゲットに分割したのは、説明の便宜上である。一部の実施形態には、レンダリングターゲットは、任意の数のユニットに分割することができ、レンダリングターゲットをいくつのレンダリングターゲットユニットに分割するか、に関しては理論上の制限はない。同様に、各レンダリングターゲットユニットのサイズおよび大きさは、レンダリングターゲットのサイズおよび大きさに応じて決定してもよいし、レンダリングターゲットをいくつのレンダリングターゲットユニットに分割するか、に応じて定めてもよい。例として、各レンダリングターゲットユニットは、256画素×256画素であってもよいし、512画素×512画素であってもよいし、1024画素×1024画素であってもよい。もちろん、レンダリングターゲットユニットの幅と高さとが同じである必要はない。例えば、レンダリングターゲットユニットが256画素×512画素であっても、512画素×256画素であっても構わない。
一部の実施形態では、サーバ120のGPU121のレンダリングターゲット200が4つのクライアント130間で分散されており、各クライアント130が1以上のレンダリングターゲットユニットを割り当てられても良い。各クライアント130に割り当てられるべきレンダリングターゲットユニットの数は、クライアント130の実際の要件およびシステムアーキテクチャに応じて定められて良い。一部の実施形態では、特定のクライアント130のディスプレイの解像度、大きさ、および向きによって、そのクライアント130に割り当てるレンダリングターゲットユニットの数が決定されてもよい。
例えば、図2の各レンダリングターゲットユニットを、1024画素×1024画素とする。さらに、クライアント130Aが、比較的低解像度(例えば1024画素×768画素)のディスプレイを持つノートブックコンピュータであるとする。この場合には、1つのレンダリングターゲットユニットが、1024画素×768画素以下のレンダリング画像を格納するために十分なメモリスペースを有していることになる。従って、クライアント130Aには、1つのレンダリングターゲットユニット(例えばレンダリングターゲットユニット211)が割り当てられて良い。他方で、クライアント130Bが、1920画素×1680画素のディスプレイを有するデスクトップコンピュータであると想定する。この場合には、1920画素×1680画素の画像を格納するために4つのレンダリングターゲットユニットが必要となるだろう。従ってクライアント130Bは、4つのレンダリングターゲットユニットを割り当てられることになる(例えばレンダリングターゲットユニット212,213、222、および223)。
一部の実施形態では、特定のクライアント130に割り当てられているレンダリングターゲットユニットの向きを、そのクライアント130のディスプレイのサイズおよび向きに応じて定めて良い。例えばクライアント130Cが、ディスプレイの幅がディスプレイの高さよりずっと小さい長尺状のディスプレイを持つ場合を想定する。この場合には、同じ列にある3つのレンダリングターゲットユニット221、231、241をクライアント130Cに割り当てることで、長尺状のディスプレイをサポートすることができる(つまり、レンダリングターゲットユニット221、231、241を合わせることで、クライアント130Cのディスプレイのサイズおよび向きをシミュレーションする)。最後に、クライアント130Dが高解像度のディスプレイを有しており、この高解像度のレンダリング画像を格納するために、6つのレンダリングターゲットユニット232、233、234、242、243、244をクライアント130Dに割り当てる場合を想定する。
もちろん、任意のある時点に、全ての利用可能なレンダリングターゲットユニットが個々のクライアントに割り当てられる必要はない。一定のレンダリング中に、複数のレンダリングターゲットユニット(例えばレンダリングターゲットユニット214、224)を未割り当てにしておいて、後でクライアント130に割り当てることもできる。同様に、あるクライアント130に既に割り当てたレンダリングターゲットユニットを、不要になった時点で(例えばこのクライアント130がサーバ120から切断された場合等)、割り当て解除することもできる。
一部の実施形態では、各クライアント130が、アプリケーションと称されることもある1以上のコンピュータプログラムに関連付けられてよい。図1では、説明を簡単にするべく、1つのアプリケーション131を、各クライアント130に関連付けられているものとして示している。例えばアプリケーション131Aがクライアント130Aに関連付けられているとする。しかしながらこの思想は、各クライアント130に複数のアプリケーションが関連付けられている場合であっても通用する。
一部の実施形態では、サーバ120は、1以上のクライアント130のための1以上のアプリケーション131の1以上のインスタンスをホストするよう構成されている。アプリケーション131のインスタンスのレンダリングされた出力が、対応するクライアント130へと送信されて、クライアント130の1以上のユーザに対して表示される。一部の実施形態では、クライアント130に関するアプリケーション131のインスタンスを、クライアント130のために、サーバ120で実行することができる。サーバ120で実行されるアプリケーション131のインスタンスの出力は、サーバ120によって、画像としてレンダリングされてよい。一部の実施形態では、アプリケーション131のインスタンスのレンダリングされた出力は、ビデオデータとして符号化されて、ビデオストリームとして対応するクライアント130に送信されてよい。各クライアント130は、対応するアプリケーション131のレンダリング出力を表すビデオストリームを受信すると、ビデオデータを復号して、対応するアプリケーション131のレンダリング出力を表示することができる。例えば、アプリケーション131Aのインスタンスを、クライアント130Aのサーバ120上で実行する。アプリケーション131Aのインスタンスの出力は、サーバ120によって1以上の画像としてレンダリングされてよい。アプリケーション131Aのインスタンスのレンダリングされた出力は、ビデオストリームとして符号化されて、クライアント130Aへ送信されてよい。クライアント130Aがビデオストリームを受信すると、ビデオストリームを復号して、アプリケーション131Aのレンダリング出力を取得して、この出力をクライアント130Aに表示することができる。一部の実施形態では、各クライアント130が、1以上のCPU(不図示)と1以上のGPU(不図示)とを含んでよい。一部の実施形態では、各クライアント130が、ビデオストリーム(符号化されたビデオフレーム)をそのGPUのメモリにロードして、符号化されたビデオデータを復号することで、対応するアプリケーション131のレンダリング出力を表示することができる。
クライアント130でコンピュータプログラム131のインスタンスが実行されると、様々なレンダリングを実行する必要がでてくる。例えば、プログラムインスタンス131Aがゲームアプリケーションであると想定する。ゲームのビデオは、毎秒60フレームのレートで進むようなものであり、各フレームでは、ゲームシーンの新たな3Dモデルを画像にレンダリングする必要がでてくる。従って、プログラムインスタンス131Aが、毎秒60回のレンダリングを必要とする場合がある。プログラムインスタンス131Bが動画像であるとすると、ビデオは毎秒30フレームの速度で進む。ここでも、各フレームでは、動画のシーンを画像に新たにレンダリングする必要がある場合がある。従ってプログラムインスタンス131Bは、毎秒30回のレンダリングを必要とする。さらに、画像をそのプログラムインスタンス131の3Dモデルからレンダリングする方法を示すレンダリングパラメータが一式、各プログラムインスタンス131に対して存在する。一部の実施形態では、レンダリングパラメータに、あくまで一例であり限定ではないが、レンダリングするモデル、ビューポートまたはカメラアングル、照明、テクスチャ、シェーディング、または画像の解像度を含めることができる。さらに、レンダリングパラメータは、フレームごと、つまりレンダリングごとに変化することがある。例えば、プログラムインスタンス131A等のゲームアプリケーションでは、クライアント130Aのプレーヤがそのゲームシーンの間に動くと、そのゲームシーンの3Dモデルのオブジェクト、ひいては、カメラアングル、照明、およびシェーディングも変わる場合がある。この結果、各レンダリングが、ゲームの現在の状態(例えば、そのレンダリングのための特定のシーン、視点の位置、カメラアングル、照明、またはシェーディング)に対応するレンダリングパラメータの別のセットを有することがある。
一部の実施形態では、サーバ120が、サーバ120に現在接続しているクライアント130ごとに異なるレンダリングパラメータのセット123を有している。例えば、レンダリングパラメータのセット123Aは、クライアント130Aに対応している。各レンダリングパラメータのセット123は、コンピュータプログラム131の対応するインスタンスから取得されてよく、当該コンピュータプログラム131のインスタンスのレンダリング方法を記述していてよい。例えば、レンダリングパラメータのセット123Aは、プログラム131Aについてのレンダリング方法を記述したレンダリングパラメータを含んで良く、レンダリングパラメータは、プログラムインスタンス131Aの現在の状態に基づいて更新することができてよい。
場合によっては、複数のクライアント130が、同じコンピュータプログラムの複数のインスタンスを実行しつつ、異なるレンダリングパラメータ123を有していてもよい。例えば、クライアント130Aおよび130Dが、同じゲームアプリケーションの2つのインスタンスを実行する場合を想定する。クライアント130Aおよび130Dにおける2人のプレーヤは、独立して、または相互作用しつつ同じゲームをプレイすることができる(例えば、同じゲームにおける2つの異なるキャラクターとして)。2人のプレーヤがある時点で同じゲームを独立してプレイする場合には、ゲームの異なる段階にある場合があるので、この2人のプレーヤがクライアント130Aおよび130Dのディスプレイ上で見る画像は異なる。もしも2人のプレーヤがある時点で同じゲームを相互作用しつつプレイする場合には、同じゲームシーン中であっても、2人のプレーヤは、そのゲームシーンを異なる位置且つ異なる角度から見ることになる。この場合にも、2人のプレーヤは、クライアント130Aおよび130Dのディスプレイ上でそれぞれ別の画像を見ることになる。いずれの場合にも、2人のプレーヤがある時点で別の画像を見ているために、レンダリングパラメータは、同じゲームアプリケーションの2つのインスタンス間で異なるものとなる。
一回のレンダリングパスにおいて、ピクセルシェーダ(および/または他のレンダリング機能)は、とりわけ、画像をレンダリングする視点などを画定するレンダリングパラメータのセットによって動作する。一部の実施形態では、一回のレンダリングパスにおいて、サーバ120が、4つのレンダリングパラメータのセット123にそれぞれ基づいて、クライアント130上で実行される4つのプログラムインスタンス131について4回のレンダリングを同時に行うことができる。一部の実施形態では、GPU121は、実際のレンダリング機能を実行することができる。一部の実施形態では、各レンダリングにおいて、各クライアントに対するレンダリングされた画像フレームが同時に出力される。一部の実施形態では、4つのレンダリングされた画像それぞれを、対応するクライアント130に対して割り当てたGPU121内のレンダリングターゲット200の特定の部分に格納する。例えば、第1レンダリングは、レンダリングパラメータのセット123Aに基づいてクライアント130A上で実行されているプログラムインスタンス131Aについて実行されて、この第1レンダリングの画像がレンダリングターゲットユニット211に格納される。第2レンダリングが、レンダリングパラメータのセット123Bに基づいてクライアント130B上で実行されているプログラムインスタンス131Bについて実行されて、この第2レンダリングの画像がレンダリングターゲットユニット212、213、222、223に格納される。第3のレンダリングが、レンダリングパラメータのセット123Cに基づいてクライアント130C上で実行されているプログラムインスタンス131Cについて実行されて、この第3のレンダリングの画像がレンダリングターゲットユニット221、231、241に格納される。第4のレンダリングが、レンダリングパラメータのセット123Dに基づいてクライアント130D上で実行されているプログラムインスタンス131Dについて実行されて、この第4のレンダリングの画像がレンダリングターゲットユニット232、233、234、241、242、243、244に格納される。
一部の実施形態では、一回の符号化パスにおいて、サーバ120が、レンダリングターゲット200に格納されている4つのレンダリング画像を同時に符号化することができる。一部の実施形態では、GPU121が実際の符号化を実行する。例えば、レンダリング画像それぞれを、別のビデオストリームの1つのフレームとして符号化することができる。一部の実施形態では、サーバ120は、今は4つのビデオストリームに符号化されている4つのレンダリング画像を、それぞれ4つのクライアント130に送信することができる。より詳しくは、第1レンダリング画像を、第1ビデオストリームのフレームとして符号化して、クライアント130Aに送信することができる。第2レンダリング画像は、第2ビデオストリームのフレームとして符号化して、クライアント130Bに送信することができる。第3のレンダリング画像は、第3のビデオストリームのフレームとして符号化して、クライアント130Cに送信することができる。第4のレンダリング画像は、第4のビデオストリームのフレームとして符号化して、クライアント130Dに送信することができる。各クライアント130は、対応するビデオストリームを受信すると、このビデオストリームを復号して、自身のディスプレイ上にレンダリング画像を表示することができる。
一部の実施形態では、サーバ120は、ビデオコーデック機能を実装するものであってよい。ビデオコーデックは、サーバ120で実行されているアプリケーション131のインスタンスの出力を表すレンダリングされた画像を符号化するのに利用されてよい。一部の実施形態では、ビデオコーデックは、レンダリングターゲット200に格納されているレンダリングされている画像にアクセスして、これら画像をマクロブロックに分割することができる。一実装例では、各マクロブロックのサイズが、16画素×16画素であってよい。一部の実装例では、後述するように、離散コサイン変換(DCT)演算を8x8の分割部分に実行してもよい。このようにして、4:2:0というダウンサンプリングのために、各マクロブロックが4つの8x8の輝度部分、4つの4x4Cb部分、および4つの4x4Cr部分を含む。しかし他のマクロブロックサイズを利用することもできる。次にビデオコーデックは、以下のように各マクロブロックの輝度および色度の分割部分に対して一定の変換および量子化演算を行う。これら演算は直列で行っても並列で行っても良い。符号処理がGPUに行われる場合には、マクロブロックに対する処理は、並列で行うことで処理時間を短くして、高いスループットを得ることができる。
コーデックは、2D平面を、その画素の輝度値を最もよくモデルしている各マクロブロックに適合させる。平面は、z=ax+byで定義され、aおよびbは、平面の勾配パラメータを定義している。コーデックは、次に、平面の勾配パラメータに基づいてマクロブロックの画素の輝度値を調節する。一実装例では、各画素のコーデックは、平面の等式の対応する値を、その位置の画素値から減算する。構想上は、これは、適合後の画素(x,y)=画素(x,y)−zで定義される。一実装例では、コーデックは、色値の分割部分の値は調節しない。
次に、コーデックは、マクロブロックにDCTを適用する。一実装例では、コーデックは、4つの8x8画素の輝度部分および8つの4x4の色度部分にDCTを別個に適用する。コーデックは、次に、2x2のアダマール変換を、各輝度部分および各色度部分に対応して設定された各DCT係数のDC成分に適用して、DC係数値間の相関性を見つける。別の実装例では、コーデックは、これら部分のサイズを動的に決定する。例えば、コーデックは、各部分の選択に対する比率および歪みに基づいて、4x4、8x8、または16x16の部分からの選択を行う。
コーデックは、マクロブロックのDCT係数を、一次(1D)アレイへと順序を付け直す。一実装例では、4つの色度部分のDCT係数をジグザグの順序で走査してから、DCT係数を飛び越し走査して、DC成分の値と、他の対応するDCT成分の値とをまとめる。一実装例では、輝度部分は、色度部分とは別に符号化される。一実装例では、色度部分は、輝度チャネル同様の、まとめる方法により飛び越し走査される。他の実装例では、ジグザグに順序を付け直す以外の方法をとってもよい。
コーデックはさらに、各選択肢のための結果であるコスト(符号化に必要なビット数)と、各選択肢に関する誤りまたは歪みに基づいて、例えば、整数値またはゼロのいずれかに四捨五入するかを判断する量子化プロセスであるレート歪み最適化を利用して、1DアレイのDCT係数を量子化する。一実装例では、レート歪み最適化は、本質的にはビデオ品質メトリックを適用して、ソースからのずれと、各可能性のある決定結果についてのビットコストとを両方計測する。ビットは、その品質レベルに対するビットコストと品質との間の関連性を表す値であるラグランジュでビットコストを乗算することで数学的に計測される。ソースからのずれは、ピーク信号対雑音比(PSNR)ビデオ品質メトリックを最大化するべく、平均二乗誤差として計測することができる。ビットコストの計算は、テストするための各ビデオブロックを、エントロピー符号器に渡して、実際のビットコストを計測することで、行うことができる。
一実装例では、次にコーデックは、各マクロブロックのDC予測値を計算して、そのマクロブロックのDC係数からDC予測値を減算することで、DC予測値に基づいて各マクロブロックのDC係数を調節する。一実装例では、DC予測値Xは、近隣のブロックのDC係数に基づいて決定されてよい。言い換えると、ブロックXのDC予測値が、ブロックcのDC係数値より小さいブロックaおよびbのDC係数の合計に基づいて決定される、ということである。一実装例では、DC予測値の調節は、輝度および色度チャネルの両方に対して実行される。
次にコーデックは、量子化された係数を各ブロックについて保留されているメモリスペースへと符号化する。一実装例では、コーデックは、可変長符号化の一形態を利用して、各ブロックについて量子化された係数を圧縮する。一実装例では、コーデックは、ホフマン符号化の次にランレングス符号化(RLE)を用いる。各マクロブロックについて量子化されたDCT係数を符号化すると、マクロブロックの符号化ビットとビット長とが得られる。ビット長が分かったので、コーデックは並列プレフィックス合計操作(parallel prefix sum)を実行して、最終的な出力であるビットストリームにおける各マクロブロックの開始位置を得る。
次にコーデックは、GPU121に、符号化されたデータを出力ストリームに書き込ませて、ラスター方式同様の順序で各マクロブロックのデータを書き込むことで、メインシステムメモリにバッファさせる。一実装例では、データは、並列処理演算を利用してGPU121によってCPUメモリに書き込むことができる。例えばコーデックは、データを収集操作(gather operation)で1以上の出力ストリームに書き込む。例えば、1つのデータワード(1または2バイト)を書き込むタスクを持つプロセスまたは関数は、各マクロブロックの開始ビット位置とそのフレームの出力ストリームのデータワードの位置とを利用して、データワードを構築してメモリに書き込むためのデータビットにアクセスする留保されているメモリ位置を決定する。収集操作によって、GPU121のリソースを利用する並列処理演算における出力を書き込むことができるので、さらにスループットを向上させることができる。例えば一実装例では、メモリ内のデータまたはマシンワードの位置を、出力ストリームを書き込む入力として受け取るものとして、関数を定義することができる。この関数は、データまたはマシンワードおよびマクロブロックの開始ビット値の位置に基づいて1以上のマクロブロックから選択されたビット部分から、マシンワードをアセンブルして、マシンワードのデータをメモリに書き込むことができる。この関数は、並列実装することで、クライアント130にネットワーク経由で送信するための、GPU121のメモリ(例えばレンダリングターゲット200)からの出力のメインメモリへの書き込みを加速して行わせることができる。他の実装例では、GPU121のメモリは、送信データを、ソケットまたはその他の接続アブストラクションに書き込むために直接アクセスすることができる。
一部の種類のアプリケーションでは、その出力を代表的な画像に連続してレンダリングする必要がある場合がある。例えば上述したように、ゲームアプリケーションは毎秒60回のレンダリングを必要とするものも多い。他の種類のアプリケーションでは、ユーザ入力があったときのみに新たなレンダリングが必要となる。例えば、ワード処理アプリケーションであれば、ユーザが入力したときのみに、クライアントのスクリーンに表示されている文書をリフレッシュする必要があるだろう(文書の画像のレンダリング)。さらに、クライアントで実行されているアプリケーションインスタンスの各レンダリングは、アプリケーションインスタンスの現在の状態が時間とともに変化することがあるような場合には異なるレンダリングパラメータに基づいて決定されてよい。一部の実施形態では、各クライアント130が、クライアント130で実行されているプログラムインスタンス131、および、必要であれば最近のレンダリングパラメータに基づく3Dモデルその他のデータをサーバ120に送信してよい。サーバ120は、各クライアント130から受け取る情報を格納することができる。一部の実施形態では、サーバ120は、各クライアント130から受け取った情報に基づいて、特定のクライアントに対していつレンダリングを実行するべきかを決定し、このレンダリングでは、3Dモデルおよびレンダリングパラメータが、他の適切な情報とともに利用される。一部の実施形態では、CPU122が実際の決定を行うことができる。一部の実施形態では、各レンダリングパスにおいて、CPU122がGPU121に、GPU121がそのレンダリングパス中に同時に複数のレンダリングを実行するために必要となる全てのデータ(例えばモデル、レンダリングパラメータのセット)を提供してよい。
図3は、複数のクライアントに対して複数のレンダリングを同時に実行するサーバの方法を示す。一部の実施形態では、サーバのGPU内のレンダリングターゲットを、複数のレンダリングターゲットユニットに分割してよい(ステップ301)。一部の実施形態では、レンダリングターゲットは、レンダリングされた画像が格納されうるGPU内のフレームバッファまたはその他の適切な種類のメモリまたはストレージであってよい。一部の実施形態では、レンダリングターゲットユニットは、全てが同じサイズであってよい(例えば各レンダリングターゲットユニットが同じ画素数を有してよい)。
任意の時点において、サーバは、任意の数のクライアントに接続されてよく、これらクライアントの代わりにこれらクライアントのために(より詳しくは、これらクライアントで実行されているコンピュータプログラムのインスタンスのために)レンダリングを実行してよい。一部の実施形態では、1以上のレンダリングターゲットユニットを、サーバに現在接続されておりサポートされている各クライアントに対して割り当ててよい(ステップ302)。1クライアントに実際に割り当てるレンダリングターゲットユニット数およびどのレンダリングターゲットユニットを割り当てるかは、そのレンダリングターゲットユニットが利用可能であるか、および、そのクライアントのシステムアーキテクチャ(一例であり限定ではないが、ビデオフレームバッファまたはクライアントのディスプレイの解像度、サイズ、大きさ、および向き)に応じて決定されてよい。例えば、新たなクライアントがサーバに接続されると、サーバは、現在利用可能なレンダリングターゲットユニット(つまり、その時点でどのクライアントにも割り当てられていないレンダリングターゲットユニット)のうち1以上をこのクライアントに対して割り当てる。逆に、サーバからあるクライアントが切断された場合には、サーバは、このクライアントに割り当てていたレンダリングターゲットユニットの割り当てを解除して(de-allocate)(つまり占有を解除する:free up)、当該レンダリングターゲットユニットを将来他のクライアントに割り当てることができるようにする。1人のクライアントに割り当てられるレンダリングターゲットユニット数は、そのクライアントのビデオフレームバッファまたはディスプレイのサイズまたは解像度に応じて定められて良い(例えば、高い解像度のディスプレイを有するクライアントには、低解像度のディスプレイを有するクライアントよりも多くの数のレンダリングターゲットユニットが割り当てられて良い)。
一部の実施形態では、コンピュータプログラムのインスタンスが、サーバに接続されているクライアント上で実行され始めると、サーバがこのプログラムインスタンスにレンダリングを行う場合、クライアントは、プログラムインスタンスのサーバに通知を行い、プログラムインスタンスのレンダリングを行うようサーバに要求する。クライアントは、レンダリングにおいて利用するプログラムインスタンスのモデルをサーバに送る。サーバは、プログラムインスタンスのレンダリングを行う期間は、このプログラムインスタンスのモデルを格納していてよい。一部の実施形態では、サーバは複数のクライアントに対してレンダリングを実行する場合があるので、各モデルを、どのクライアントに該モデルが関連付けられているかを示す固有識別子(ID)で特定することができる。
もちろん、1クライアント上で、同じまたは異なるコンピュータプログラムの複数のインスタンスを実行することができる。一部の実施形態では、クライアントは、サーバに対して、このクライアントで実行中の複数のプログラムインスタンスのレンダリングの実行を要求することができる。この場合、クライアントは、サーバに対して、複数のプログラムインスタンスに対応する複数のモデルを送信することができる。例えばプログラムインスタンスがクライアントで実行を開始するたびに、クライアントは、そのプログラムインスタンスのモデルをサーバに送信することができる。サーバはこれらモデルを格納してよく、各モデルは、当該モデルに関連付けられているクライアントおよびそのクライアントで実行されているプログラムインスタンスを示す固有IDで特定されてよい。
一部の実施形態では、サーバに現在接続されてサポートされている各クライアントについて1以上のレンダリングパラメータのセットを維持することができる(ステップ303)。一部の実施形態では、各レンダリングパラメータのセットが、あるクライアントで実行されているコンピュータプログラムのインスタンスに対応して、この特定のプログラムインスタンスについて実行されるレンダリング法を示している。従って、プログラムインスタンスの表示が時間が経って変わると、レンダリングパラメータも時間の推移とともに(例えばレンダリングごとに)変わる。一部の実施形態では、各レンダリングパラメータのセットが、モデルに関連付けられているクライアントおよびそのクライアントで実行されているプログラムインスタンスを示す固有IDで特定されてよい。
世の中には数多くのレンダリング技術が存在しており、本開示は、適したレンダリング技術のいずれをも対象としている。例えば、レイトレーシングは、レンダリング後の画像において非常に高度なフォトリアリズムを達成可能な、公知且つよく利用されているレンダリング技術である。簡単にいうと、レイトレーシングは、画像平面における画素間の光路を追跡することで、モデルから画像を生成する技術のことである。レイトレーシングには共に利用可能なアルゴリズムが様々存在している。レイトレーシングは、現実的には3Dオブジェクトに対する照明の効果をシミュレーションするものではあるが、計算量が多いのでサーバでの実行に適していると思われる。一部の実施形態では、レイトレーシングアルゴリズムをサーバで実行して、レイトレーシングを利用してレンダリングを実行してよい。
コンピュータグラフィック分野では、シェーダは、一義的には、高度な柔軟性をもってグラフィックハードウェアに対するレンダリング効果を計算するために利用されるソフトウェア命令セットのことである。一部の実施形態では、シェーダは、サーバのGPUプログラム可能レンダリングパイプラインをプログラミングするために利用することができ、この技術は、既に固定機能パイプライン(fixed-function pipeline)に取って代わったと見られる向きもある。シェーダには様々な種類があり、本開示では適したシェーダをいずれも対象としている。例えば、バーテックスシェーダは、GPUに与えられる各頂点に一度実行されて、各頂点の仮想空間における3Dの位置を、表示スクリーンまたはレンダリングされる2D画像の2D座標およびZバッファの深さ値に変換することができる。バーテックスシェーダは、位置、色、およびテクスチャ座標等の特性を操作することができる。ジオメトリシェーダは、バーテックスシェーダの後のレンダリングパイプラインの次段に置かれ、メッシュから頂点を加減算し、手続きとして配置を生成したり、容量分析的な詳細(volumetric details)を既存のメッシュに与えたりするために利用されてよい。ピクセルシェーダは、フラグメントシェーダとも称され、個々の画素の色を計算し、通常はシーンの照明および関連する効果について(例えばバンプマッピングおよびカラー調節)利用される。一部の実施形態では、各レンダリングパラメータのセットが、GPUのレンダリングパイプラインの様々な種類のシェーダに対応するシェーダ定数を含んでいて良い。シェーダ定数は、GPUに対して、レンダリングの実行方法を指示する。従って、実際には、シェーダ定数を利用して、レンダリングの結果(レンダリングされた画像)が制御されることになる。
上述したように、プログラムインスタンスが異なれば表示される画像も異なるために、各レンダリングパラメータのセット(例えばシェーダ定数)は、対応するプログラムインスタンスについてレンダリングごとに変化することが考えられる。一部の実施形態では、必要に応じて、サーバが維持しているレンダリングパラメータのセットを、レンダリングパスの前に更新してもよい(ステップ304)。各クライアントは、クライアントで実行されておりサーバでサポートされているプログラムインスタンスの現在の状態をサーバに送信してよい。一部の実施形態では、サーバは、クライアントから受け取った情報に基づいてレンダリングパラメータのセットを更新してよい。
一部の実施形態では、サーバは、1回のレンダリングパスにおいて、現在サーバでサポートされている複数のクライアントについて複数の画像を同時にレンダリングすることができる(つまり複数のレンダリングを行うことができる)(ステップ305)。一部の実施形態では、一回のレンダリングパスで、GPUレンダリングパイプラインにおいて一度移動が可能である。1つのレンダリングパイプライン内には様々な段階が存在する場合がある。例えば、先ずサーバのCPUが、命令と配置データとを、サーバのGPUに送信するとする。当該命令およびデータは、対応するモデルおよびレンダリングパラメータのセットに基づいて判断することができる。第2に、バーテックスシェーダ内で、配置を変換して照明計算を実行してよい。第3に、ジオメトリシェーダを利用する場合には、シーンにおける配置をいくらか変更してよい。第4に、計算した配置を三角形に分けてよい(triangulate)。そして最後に、得られた三角を画素に変換してよい。
一回のレンダリングパス中に複数の画像を同時にレンダリングするためには、GPUのリソースを複数のレンダリングプロセスで共有する必要がある。一部の実施形態では、生成されるレンダリング画像それぞれ、より詳しくは、レンダリング画像の画素値を、レンダリング画像に対応してクライアントに割り当てられた特定のレンダリングターゲットユニット内に格納する。
一部の実施形態では、サーバは、ビデオストリームを利用して現在サポートしている各クライアントにレンダリングされた画像を送信して、各レンダリング画像がビデオストリームのフレームとなるようにしてよい。一部の実施形態では、サーバは、一回の符号化パスで、レンダリングターゲットに格納されている複数のレンダリング画像を、複数のクライアントに対応する複数のビデオストリームに同時に符号化してよい(ステップ306)。例えば、第1レンダリング画像が、第1クライアントのための第1ビデオストリームの現在のフレームとして符号化され、第2レンダリング画像が、第2クライアントのための第2ビデオストリームの現在のフレームとして符号化され、・・・といった具合であってよい。
一部の実施形態では、次にサーバは、今ではビデオストリーム内でフレームとして符号化されているレンダリング画像をクライアントに送信してよい(ステップ307)。各ビデオストリームは、対応するクライアントに送信される。例えば、第1ビデオストリームが第1クライアントに送信され、第2ビデオストリームが第2クライアントに送信され、・・・といった具合であってよい。各クライアントは、ビデオストリームで新たなデータを受け取ると、このビデオストリームを復号して、サーバがレンダリングした画像である現在のフレームを抽出する。クライアントは、次に、表示スクリーンに現在のフレーム(つまりレンダリング画像)を表示してよい。
各クライアントで実行されている各プログラムインスタンスについて複数のレンダリングを実行することがよくある。従ってステップ304から307を繰り返すことができる。各レンダリングパスは、1人のクライアントに1枚のレンダリング画像が割り当てられるよう、サーバが現在サポートしている複数のクライアントに対して複数のレンダリング画像を生成することができる。各レンダリング画像は、対応するビデオストリームの別個のフレームとして符号化されて、対応するクライアントに送信されてよい。
一部の実施形態は、ネットワーク環境で実装されてよい。図4は、ネットワーク環境400の一例を示す。ネットワーク環境400は、1以上のサーバ420と1以上のクライアント430とを互いに連結するネットワーク410を含む。一部の実施形態では、ネットワーク410は、イントラネット、エクストラネット、仮想プライベートネットワーク(VPN)、ローカルエリアネットワーク(LAN)、無線LAN(WLAN)、ワイドエリアネットワーク(WAN)、メトロポリタンエリアネットワーク(MAN)、通信ネットワーク、衛星ネットワーク、インターネットの一部、または別のネットワーク410、または2以上のネットワーク410の組み合わせを含む。本開示は、適切な任意のネットワーク410を想定している。1以上のリンク450が、サーバ420またはクライアント430をネットワーク410に連結する。一部の実施形態では、1以上のリンク450それぞれが、1以上の有線、無線、または光リンク450を含む。一部の実施形態では、1以上のリンク450それぞれが、イントラネット、エクストラネット、仮想プライベートネットワーク(VPN)、ローカルエリアネットワーク(LAN)、無線LAN(WLAN)、ワイドエリアネットワーク(WAN)、メトロポリタンエリアネットワーク(MAN)、通信ネットワーク、衛星ネットワーク、インターネットの一部、または別のネットワーク450、または2以上のネットワーク450の組み合わせを含む。本開示は、サーバ420およびクライアント430をネットワーク410に連結する任意の適切なリンク450を含む。
一部の実施形態では、各サーバ420は、中央型サーバであってもよいし、または、複数のコンピュータまたは複数のデータセンタを包括する分散型サーバであってもよい。サーバ420は、様々な種類のものであってよく、例示であって限定ではないが、ウェブサーバ、ニュースサーバ、メールサーバ、メッセージサーバ、広告サーバ、ファイルサーバ、アプリケーションサーバ、交換サーバ、データベースサーバ、またはプロキシサーバであってよい。一部の実施形態では、各サーバ420が、サーバ420が実装してサポートする適切な機能を実行するために、ハードウェア、ソフトウェア、埋め込まれた論理部品、または、これら部品の2以上の組み合わせを含んでよい。例えばウェブサーバは、一般的に、ウェブページまたはウェブページの特定の部分を含むウェブサイトをホストすることができる。より詳しくは、ウェブサーバは、HTMLファイルその他のファイルの種類をホストすることができ、または、要求に応じてファイルを動的に作成または構成することができ、HTTPまたはクライアント430からの他の要求に応じて、クライアント430にこれらを通信することができる。メールサーバは、一般的に、電子メールサービスを様々なクライアント430に提供する機能を有している。データベースサーバは、一般的にいって、1以上のデータストア内に格納されているデータを管理するためのインタフェースを提供する機能を有している。
一部の実施形態では、各クライアント430は、クライアント430が実装またはサポートする適切な機能を実行するために、ハードウェア、ソフトウェア、うめこまれた論理部品、または、これら部品の2以上の組み合わせを含む電子デバイスであってよい。例示であって限定ではないが、クライアント430は、デスクトップコンピュータシステム、ノートブックコンピュータシステム、ネットブックコンピュータシステム、ハンドヘルド電子デバイス、または移動電話器であってよい。クライアント430は、クライアント430におけるネットワークユーザをネットワーク410にアクセスさせることができる。クライアント430は、ウェブブラウザ(例えばMicrosoft社のInternet Explorer、またはMozilla Firefox)を有してよく、GoogleのToolbarまたはYahooのToolbar等のアドオン、プラグイン、その他の拡張機能を有してよい。クライアント430は、ユーザに、他のクライアント430における他のユーザと通信させることができる。本開示は、任意の適切なクライアント430を含むこととする。
一部の実施形態では、1以上のデータストレージ440が、1以上のサーバ420に1以上のリンク450を介して通信可能に連結されていてよい。一部の実施形態では、データストレージ440を利用して、様々な種類の情報を格納することができる。一部の実施形態では、データストレージ440に格納されている情報を、特定のデータ構造に従って組織化することもできる。一部の実施形態では、サーバ420またはクライアント430に、データストレージ440に格納されている情報を管理させる(例えば取得、修正、追加、または削除を行わせる)インタフェースを提供することもできる。
一部の実施形態では、各サーバ420が、1以上のクライアント430に同時にサービス提供してよく、サポートしているクライアント430にレンダリングを実行してよい。サーバ420は、ビデオストリーム内の複数のレンダリング画像(各レンダリング画像が1つのフレームである)を符号化することで、サポートしている特定のクライアント430のレンダリング画像を送信することができ、ビデオストリームをクライアント430に送信することができる。クライアント430は、ビデオストリームを受信すると、ビデオストリームを復号して、表示用の画像フレームを抽出することができる。米国特許出願第12/579,300号、および、12/709,343号明細書は(両方とも全ての目的でここに参照として組み込まれる)、1以上のクライアント430に、圧縮したビデオストリームを配信するために利用されてよいビデオコーデックを開示している。加えて、前述した各出願明細書は、各サーバ420がGPUの並列処理リソースを利用して、ビデオをクライアント430用に生成してストリーミングする方法を開示している。
一部の実施形態は、ハードウェア、ソフトウェア、またはハードウェアとソフトウェアの組み合わせとして実装されてよい。あくまで例示であり限定ではないが、1以上のコンピュータシステムが、ここで記載され図示される1以上のプロセスの1以上のステップを実行する特定の論理またはソフトウェアを実行することができる。コンピュータシステムのうち1以上は、中央型であっても分散型であってよく、適宜、複数のコンピュータシステムまたは複数のデータセンタを包括していてよい。本開示は、任意の適切なコンピュータシステムを含むことができる。一部の実施形態では、ここで記述され図示される1以上のプロセスの1以上のステップの実行が、必ずしも1以上の地理的位置に限定されず、時間的な制約を持たなくてもよい。一例であり限定ではないが、1以上のコンピュータシステムは、自身の機能を「リアルタイムで」、「オフラインで」、「バッチモードで」、または、適宜、上述したものの任意の組み合わせで実行することができる。コンピュータシステムのうち1以上は、適宜、機能の1以上の部分を異なる時点に、異なる場所で、異なる処理を利用して実行することができる。ここでは、論理という場合、適切な場合には、1以上のソフトウェアを含むことができ、この逆もしかりである。ソフトウェアという場合、適切な場合には、1以上のコンピュータプログラムを含むことができ、この逆もしかりである。ソフトウェアという場合、適切な場合には、データ、命令、または両方を含むことができ、この逆もしかりである。同様に、データという場合には、適切な場合には、命令を含むことができ、この逆もしかりである。
1以上のコンピュータ可読媒体は、特定の実施形態を実装するソフトウェアを格納したり、具現化したりすることができる。コンピュータ可読媒体は、適宜、ソフトウェアを搬送したり、通信したり、含んだり、保持したり、維持したり、伝播させたり、保有したり、格納したり、送信したり、伝送したり、または具現化することができる。コンピュータ可読媒体は、生物学的、化学的、電子的、電磁的、赤外線、磁気、光、量子、その他の適切な媒体または2以上の媒体の組み合わせであってよい。コンピュータ可読媒体は、1以上のナノメートル単位のコンポーネントを含んでよく、または、ナノメートル単位の設計または製造物を具現化してもよい。一例であるコンピュータ可読格納媒体には、これらに限定はされないが、コンパクトディスク(CD)、フィールドプログラマブルゲートアレイ(FPGA)、フロッピー(登録商標)ディスク、光ディスク(floptical disk)、ハードディスク、ホログラフィック記憶デバイス、集積回路(IC)(用途特定集積回路(ASIC)等)、磁気テープ、キャッシュ、プログラム可能論理デバイス(PLD)、ランダムアクセスメモリ(RAM)デバイス、読み取り専用メモリ(ROM)デバイス、半導体メモリデバイス、およびその他の適したコンピュータ可読格納媒体が含まれる。
特定の実施形態を実装するソフトウェアは、任意の適切なプログラミング言語(プロシージャ言語であってもオブジェクト指向型言語であってもよい)またはこれらプログラミング言語の組み合わせで書き込まれて良い。適宜、任意の適切な種類のコンピュータシステム(例えばシングルまたはマルチプロセッサコンピュータシステム)またはシステムが、特定の実施形態を実装するソフトウェアを実行することができる。適切な場合には、汎用コンピュータシステムが、特定の実施形態を実装するソフトウェアを実行することができる。
例えば図5は、特定の実施形態の一以上の部分を実装するのに適したコンピュータシステム500の一例を示す。本開示は、特定の構成の特定のコンポーネントを有する特定のコンピュータシステム500を記載または例示しているが、本開示は、任意の適切な構成の任意の適切なコンポーネントを含む任意の適切なコンピュータシステムを含むこともできる。さらにコンピュータシステム500は、例えば1以上の集積回路(IC)、1以上のプリント配線基板(PCB)、1以上のハンドヘルドまたはその他のデバイス(例えば移動電話またはPDA)、1以上のパーソナルコンピュータ、または1以上のスーパーコンピュータ等の任意の適切な物理的形態をとることができる。
システムバス510は、コンピュータシステム500のサブシステム同士を連結することができる。ここでは、バスという概念は、共通の機能を果たす1以上のデジタル信号線を含んでよい。本開示は、任意の適切なバスアーキテクチャを有する任意の適切なバス構造(例えば1以上のメモリバス、1以上の周辺バス、1以上のローカルバス、または上述したものの組み合わせ)を有する任意の適切なシステムバス510を含むことができる。一例であるバスアーキテクチャには、これらに限定はされないが、ISA(Industry Standard Architecture)バス、EISA(Enhanced ISA)バス、マイクロチャネルアーキテクチャ(MCA)バス、VLB(Video Electronics Standards Association local)バス、PCI(Peripheral Component Interconnect)バス、PCIエクスプレスバス(PCI−X)、およびAGP(Accelerated Graphics Port)バスが含まれる。
コンピュータシステム500は、1以上のプロセッサ520(または中央処理装置(CPU))を含む。プロセッサ520は、命令、データ、またはコンピュータアドレスを一時的にローカルに格納するためのキャッシュ522を含んでいてよい。プロセッサ520は、メモリ530を含む1以上の格納デバイスに連結される。メモリ530は、ランダムアクセスメモリ(RAM)532および読み取り専用メモリ(ROM)534を含んでよい。データおよび命令は、プロセッサ520とRAM532との間を双方向に伝送されてよい。データおよび命令は、ROM534からプロセッサ520へと一方向で伝送されてよい。RAM532およびROM534は、任意の適切なコンピュータ可読格納媒体を含んでよい。
コンピュータシステム500は、双方向的にプロセッサ520に連結された固定ストレージ540を含む。固定ストレージ540は、格納制御ユニット552を介してプロセッサ520に連結されてよい。固定ストレージ540は、さらなるデータ格納キャパシティを提供してよく、任意の適切なコンピュータ可読格納媒体を含んでよい。固定ストレージ540は、オペレーティングシステム(OS)542、1以上の実行可能ファイル544、1以上のアプリケーションまたはプログラム546、データ548等を格納してよい。固定ストレージ540は、通常は、一次ストレージより遅い二次格納媒体(例えばハードディスク)である。適宜、固定ストレージ540に格納される情報が仮想メモリとしてメモリ530に組み込まれても良い。
プロセッサ520は、例えばグラフィック制御554、ビデオインタフェース558、入力インタフェース560、出力インタフェース562、および格納インタフェース564等の様々なインタフェースに連結されてよく、これらはそれぞれ適切なデバイスと連結されていてよい。入力デバイスおよび出力デバイスの例には、これらに限定はされないが、ビデオディスプレイ、トラックボール、マウス、キーボード、マイクロフォン、タッチセンサー式のディスプレイ、トランスデューサーカードリーダ、磁気または紙テープリーダ、タブレット、スタイラスペン、音声または手書き認識器、生体認証リーダ、またはコンピュータシステムが含まれる。ネットワークインタフェース556は、プロセッサ520を、別のコンピュータシステムまたはネットワーク580に連結してよい。ネットワークインタフェース556を利用することで、プロセッサ520は、特定の実施形態のステップを実行する間に、情報をネットワーク580に対して送受信することができる。実施形態によってはプロセッサ520上でのみ実施されるものもある。実施形態によっては、プロセッサ520上と、同時に実行されている1以上の遠隔プロセッサ上とで実施可能なものもある。
コンピュータシステム500がネットワーク580に接続されたネットワーク環境では、コンピュータシステム500は、ネットワーク580に接続されている他のデバイスと通信することができる。コンピュータシステム500は、ネットワークインタフェース556を介してネットワーク580と通信してよい。例えば、コンピュータシステム500は、ネットワーク580から情報(例えば別のデバイスからの要求または応答)を、ネットワークインタフェース556に入ってくる1以上の入力パケットという形式で受信してよく、メモリ530は、後の処理のために入力パケットを格納することができる。コンピュータシステム500は、ネットワーク580に、情報(例えば別のデバイスへの要求または応答)を、ネットワークインタフェース556からの1以上の出力パケットという形式で送信してよく、この出力パケットは、送信前にはメモリ530が格納していてよい。プロセッサ520は、メモリ530内の入力パケットまたは出力パケットにアクセスして、特定要件に従って処理する。
コンピュータシステム500は、1以上の入力デバイス566(キーパッド、キーボード、マウス、スタイラスペン等を含みうる)、1以上の出力デバイス568(1以上のディスプレイ、1以上のスピーカ、1以上のプリンタ等を含みうる)、1以上の格納デバイス570、および1以上の格納媒体572を有しうる。入力デバイス566は、コンピュータシステム500の外部にあっても内部にあってもよい。出力デバイス568も、コンピュータシステム500の外部にあっても内部にあってもよい。格納デバイス570も、コンピュータシステム500の外部にあっても内部にあってもよい。格納媒体572も、コンピュータシステム500の外部にあっても内部にあってもよい。
一部の実施形態では、ここに記載または例示した1以上のプロセスの1以上のステップを実行するためのソフトウェアを具現化する1以上のコンピュータ可読格納媒体を含む1以上のコンピュータ可読プロダクトを含む。一部の実施形態では、媒体の1以上の部分、ソフトウェア、またはこれら両方が、ここで記載または例示した1以上のプロセスの1以上のステップの実行専用に設計および製造されたものであってよい。これらに加えて、または、これらに代えて、一部の実施形態では、媒体の1以上の部分、ソフトウェア、またはこれら両方が、ここで記載または例示したプロセス特有の設計、製造されたものではなく、一般的に利用可能なものであってもよい。コンピュータ可読格納媒体の例には、これらに限定はされないが、CD(例えばCD−ROM)、FPGA,フロッピー(登録商標)ディスク、光ディスク(floptical disk)、ハードディスク、ホログラフィック記憶デバイス、集積回路(IC)(用途特定集積回路(ASIC)等)、磁気テープ、キャッシュ、プログラム可能論理デバイス(PLD)、ランダムアクセスメモリ(RAM)デバイス、読み取り専用メモリ(ROM)デバイス、半導体メモリデバイス、およびその他の適したコンピュータ可読格納媒体が含まれる。一部の実施形態では、ソフトウェアは、コンパイラが生成することのできるマシンコード、または、コンピュータが解釈プログラムを利用して実行することができる高レベルのコードを含む1以上のファイルを生成してよい。
一例であり限定ではないが、メモリ530は、ソフトウェアを具現化する1以上のコンピュータ可読格納媒体を含むことができ、コンピュータシステム500は、プロセッサ520がソフトウェアを実行する結果、ここに記載され例示された特定の機能を提供することができる。メモリ530はソフトウェアを格納して、プロセッサ520はソフトウェアを実行することができる。メモリ530は、ソフトウェアを具現化する大容量格納デバイス530のコンピュータ可読格納媒体から、または、1以上の他のソースからネットワークインタフェース556経由で、ソフトウェアを読み出すことができる。ソフトウェアの実行時には、プロセッサ520は、ここに記載され例示された1以上のプロセスの1以上のステップを実行することができ、これには、特定の要求に応じて、ソフトウェアの1以上の部分の命令に応じて、メモリ530への格納のために1以上のデータ構造を定義して、データ構造の1以上を修正することを含みうる。これに加えて、またはこの代わりに、コンピュータシステム500は、回路内にハードウェアとして組み込まれている、または具現化された論理の結果として、ここに記載または例示した特定の機能を提供することができ、これらはソフトウェアの代わりに、またはソフトウェアと協働して動作することで、ここに記載または例示した1以上のプロセスの1以上のステップを実行することができる。本開示は、特定の要求に応じて、ハードウェアおよびソフトウェアの任意の適切な組み合わせを含む。
一部の実施形態では、コンピュータシステム500は、1以上のグラフィックプロセッシングユニット(GPU)524を含んでよい。一部の実施形態では、GPU524は、グラフィックレンダリング分野でよく利用される数学的演算に対する1以上の集積回路および/またはプロセッサコアを含んでよい。一部の実施形態では、GPU524は、特別なグラフィックユニット命令セットを利用してよく、他の実装例では、GPUがCPU同様の命令セット(例えば修正後のx86)命令セットを利用してよい。グラフィック処理セット524は、転送(blitting)、テクスチャマッピング、ピクセルシェーディング、フレームバッファリング等の複数のグラフィック上のプリミティブな操作を実装してよい。一部の実施形態では、GPU524は、グラフィックアクセラレータ、汎用GPU(GPGPU)、または任意の他の適切な処理ユニットであってよい。
一部の実施形態では、GPU524は、ハードウェアシステムアーキテクチャをカードスロットを通って取り付けられるグラフィックまたはディスプレイカードに実装されてよい。他の実装例では、GPU524は、コンピュータシステムアーキテクチャのマザーボード上に集積されてもよい。適切なグラフィックプロセッシングユニットには、Advanced Micro Devices(登録商標)AMD R7XX ベースの GPUデバイス (Radeon(登録商標) HD 4XXX), AMD R8XX ベースのGPUデバイス(Radeon(登録商標) HD 5XXX), Intel(登録商標) LarabeeベースのGPUデバイス(まだリリースされていない), nVidia(登録商標) 8シリーズのGPU, nVidia(登録商標) 9シリーズのGPU、nVidia(登録商標) 100 シリーズのGPU、nVidia(登録商標) 200シリーズのGPU、およびその他のDX1 1を利用可能なGPUが含まれる。
本開示は、特定の順序で特定の動作を記載または例示してきたが、本開示では、任意の適切な動作を任意の適切な順序で行うことができる。さらに本開示は、任意の適切な処理を、任意の適切な順序で1以上の回数繰り返すこともできる。本開示は特定の動作を一連の作業として記載または例示しているが、本開示では、適宜、任意の適切な動作を略同時に行っても良い。ここに記載または例示した適切な1つの動作または一連の動作は、適宜、別のプロセス(例えばオペレーティングシステムまたはカーネル)によって中断、停止、または制御されてもよい。動作は、システム処理の全てまたは実質的な部分を占拠するオペレーティングシステム環境または独立型のルーチンとして行うことができる。
本開示は、当業者であれば理解するであろう、例示的な実施形態に対する全ての変更、代替、変形、修正等を含む。同様に、適切な場合には、添付請求項も、当業者であれば理解するであろう、例示的な実施形態に対する全ての変更、代替、変形、修正等を含む。
[項目1]
コンピュータシステム上で、各々が遠隔クライアントアプリケーションに対応している複数のアプリケーションインスタンスをホストする段階と、
アプリケーションインスタンスがホストされている上記遠隔クライアントアプリケーションそれぞれにネットワーク接続を維持する段階と、
上記遠隔クライアントアプリケーションのうち少なくとも2つの間に、上記コンピュータシステムのグラフィックプロセッシングユニットのリソースを割り当てる段階と、
上記コンピュータシステムの上記グラフィックプロセッシングユニットの上記リソースを利用して、上記遠隔クライアントアプリケーションの上記少なくとも2つに対応する上記アプリケーションインスタンスのグラフィック出力を同時にレンダリングする段階と、
上記レンダリングされたグラフィック出力を、上記遠隔クライアントアプリケーションの上記少なくとも2つに、銘々のネットワーク接続を介して送信する段階とを備える方法。
[項目2]
上記グラフィックプロセッシングユニットの上記リソースはメモリストレージを有し、
上記遠隔クライアントアプリケーションのうち少なくとも2つの間に、上記コンピュータシステムのグラフィックプロセッシングユニットのリソースを割り当てる段階は、
上記メモリストレージの特定の部分を、上記遠隔クライアントアプリケーションの上記少なくとも2つのそれぞれに割り当てる段階を有する、項目1に記載の方法。
[項目3]
各レンダリングされたグラフィック出力は、対応する遠隔クライアントアプリケーションに割り当てられた上記メモリストレージの上記部分に格納される、項目2に記載の方法。
[項目4]
上記コンピュータシステムの上記グラフィックプロセッシングユニットの上記リソースを利用して、送信前に、上記レンダリングされたグラフィック出力を同時に符号化する段階をさらに備える、項目1に記載の方法。
[項目5]
上記レンダリングされたグラフィック出力のそれぞれは、対応する遠隔クライアントアプリケーションへのビデオストリーム内に符号化されて送信される、項目4に記載の方法。
[項目6]
上記アプリケーションインスタンスの上記グラフィック出力は、一回のレンダリングパスでレンダリングされ、
上記アプリケーションインスタンスの上記レンダリングされたグラフィック出力は、一回の符号化パスで符号化される、項目4に記載の方法。
[項目7]
複数の第2コンピュータシステムに接続された第1コンピュータシステムであって、上記複数の第2コンピュータシステム間で共有されていて画像を格納するレンダリングターゲットを有する第1コンピュータシステムにより、それぞれが上記複数の第2コンピュータシステムの1つに対応する複数のレンダリングパラメータのセットにアクセスする段階と、
上記第1コンピュータシステムにより、上記複数のレンダリングパラメータのセットに基づいて、上記複数の第2コンピュータシステムのための複数の画像を同時にレンダリングする段階であって、上記複数の画像それぞれは上記複数の第2コンピュータシステムの1つについて、上記複数の第2コンピュータシステムの上記1つに対応する上記複数のレンダリングパラメータのセットの1つに基づいてレンダリングされ、上記レンダリングターゲットに格納される段階と、
上記第1コンピュータシステムにより、上記複数の画像それぞれを、上記画像がレンダリングされている上記複数の第2コンピュータシステムのうち対応するものに送信する段階とを備える方法。
[項目8]
上記レンダリングターゲットは、複数のレンダリングターゲットユニットに分割され、
上記複数のレンダリングターゲットユニットそれぞれは、少なくとも1つの画素を格納し、
上記複数の第2コンピュータシステムそれぞれは、上記複数のレンダリングターゲットユニットの少なくとも1つを割り当てられ、
上記複数の画像それぞれは、上記画像がレンダリングされた上記複数の第2コンピュータシステムの1つに割り当てられた上記複数のレンダリングターゲットユニットの上記少なくとも1つ内にレンダリングされる、項目7に記載の方法。
[項目9]
上記第1コンピュータシステムにより、送信前に上記複数の画像を同時に符号化する段階をさらに備える、項目7に記載の方法。
[項目10]
上記複数の画像それぞれは、複数のビデオストリームの1つの現在のフレームとして符号化され、
上記複数のビデオストリームそれぞれは、上記複数の第2コンピュータシステムの1つに対応している、項目9に記載の方法。
[項目11]
上記第1コンピュータシステムにより、上記画像がレンダリングされた上記複数の第2コンピュータシステムの上記1つに対して上記複数の画像それぞれを送信する段階は、
上記第1コンピュータシステムにより、上記複数のビデオストリームそれぞれを、上記複数の第2コンピュータシステムの対応するものに送信する段階を有する、項目10に記載の方法。
[項目12]
上記第1コンピュータシステムにより、上記複数のレンダリングパラメータのセットを更新する段階をさらに備える、項目7に記載の方法。
[項目13]
上記複数の第2コンピュータシステムそれぞれの上で、特定のコンピュータプログラムのインスタンスが実行され、
上記複数の第2コンピュータシステムそれぞれの上で実行されている上記特定のコンピュータプログラムの上記インスタンスの現在の状態によって、当該第2コンピュータシステムに対応する上記複数のレンダリングパラメータのセットのうちの対応するものが決定される、項目12に記載の方法。
[項目14]
上記複数のレンダリングパラメータのセットそれぞれが、少なくとも1つのシェーダ定数を含む、項目7に記載の方法。
[項目15]
システムであって、
1以上のプロセッサが実行可能な命令を有するメモリと、
グラフィックプロセッシングユニットと、
上記メモリに連結され、上記命令を実行する1以上のプロセッサとを備え、
上記1以上のプロセッサは、上記命令を実行するときに、
各々が遠隔クライアントアプリケーションに対応している複数のアプリケーションインスタンスをホストして、
アプリケーションインスタンスがホストされている上記遠隔クライアントアプリケーションそれぞれにネットワーク接続を維持し、
上記遠隔クライアントアプリケーションのうち少なくとも2つの間に、上記グラフィックプロセッシングユニットのリソースを割り当て、
上記グラフィックプロセッシングユニットの上記リソースを利用して、上記遠隔クライアントアプリケーションの上記少なくとも2つに対応する上記アプリケーションインスタンスのグラフィック出力を同時にレンダリングし、
上記レンダリングされたグラフィック出力を、上記遠隔クライアントアプリケーションの上記少なくとも2つに、銘々のネットワーク接続を介して送信する、システム。
[項目16]
ソフトウェアを格納する1以上のコンピュータ可読有形格納媒体であって、上記ソフトウェアは1以上のコンピュータシステムにより実行されると、
各々が遠隔クライアントアプリケーションに対応している複数のアプリケーションインスタンスをホストして、
アプリケーションインスタンスがホストされている上記遠隔クライアントアプリケーションそれぞれにネットワーク接続を維持し、
上記遠隔クライアントアプリケーションのうち少なくとも2つの間に、グラフィックプロセッシングユニットのリソースを割り当て、
上記グラフィックプロセッシングユニットの上記リソースを利用して、上記遠隔クライアントアプリケーションの上記少なくとも2つに対応する上記アプリケーションインスタンスのグラフィック出力を同時にレンダリングし、
上記レンダリングされたグラフィック出力を、上記遠隔クライアントアプリケーションの上記少なくとも2つに、銘々のネットワーク接続を介して送信する、1以上のコンピュータ可読有形格納媒体。

Claims (16)

  1. コンピュータシステム上で、各々が遠隔クライアントアプリケーションに対応している複数のアプリケーションインスタンスをホストする段階と、
    アプリケーションインスタンスがホストされている前記遠隔クライアントアプリケーションそれぞれにネットワーク接続を維持する段階と、
    前記遠隔クライアントアプリケーションのうち少なくとも2つの間に、前記コンピュータシステムのグラフィックプロセッシングユニットのリソースを割り当てる段階と、
    前記コンピュータシステムの前記グラフィックプロセッシングユニットの前記リソースを利用して、前記遠隔クライアントアプリケーションの前記少なくとも2つに対応する前記アプリケーションインスタンスのグラフィック出力を同時にレンダリングする段階と、
    前記レンダリングされたグラフィック出力を、前記遠隔クライアントアプリケーションの前記少なくとも2つに、銘々のネットワーク接続を介して送信する段階と
    を備える方法。
  2. 前記グラフィックプロセッシングユニットの前記リソースはメモリストレージを有し、
    前記遠隔クライアントアプリケーションのうち少なくとも2つの間に、前記コンピュータシステムのグラフィックプロセッシングユニットのリソースを割り当てる段階は、
    前記メモリストレージの特定の部分を、前記遠隔クライアントアプリケーションの前記少なくとも2つのそれぞれに割り当てる段階を有する、請求項1に記載の方法。
  3. 各レンダリングされたグラフィック出力は、対応する遠隔クライアントアプリケーションに割り当てられた前記メモリストレージの前記部分に格納される、請求項2に記載の方法。
  4. 前記コンピュータシステムの前記グラフィックプロセッシングユニットの前記リソースを利用して、送信前に、前記レンダリングされたグラフィック出力を同時に符号化する段階をさらに備える、請求項1に記載の方法。
  5. 前記レンダリングされたグラフィック出力のそれぞれは、対応する遠隔クライアントアプリケーションへのビデオストリーム内に符号化されて送信される、請求項4に記載の方法。
  6. 前記アプリケーションインスタンスの前記グラフィック出力は、一回のレンダリングパスでレンダリングされ、
    前記アプリケーションインスタンスの前記レンダリングされたグラフィック出力は、一回の符号化パスで符号化される、請求項4に記載の方法。
  7. 複数の第2コンピュータシステムに接続された第1コンピュータシステムであって、前記複数の第2コンピュータシステム間で共有されていて画像を格納するレンダリングターゲットを有する第1コンピュータシステムにより、それぞれが前記複数の第2コンピュータシステムの1つに対応する複数のレンダリングパラメータのセットにアクセスする段階と、
    前記第1コンピュータシステムにより、前記複数のレンダリングパラメータのセットに基づいて、前記複数の第2コンピュータシステムのための複数の画像を同時にレンダリングする段階であって、前記複数の画像それぞれは前記複数の第2コンピュータシステムの1つについて、前記複数の第2コンピュータシステムの前記1つに対応する前記複数のレンダリングパラメータのセットの1つに基づいてレンダリングされ、前記レンダリングターゲットに格納される段階と、
    前記第1コンピュータシステムにより、前記複数の画像それぞれを、前記画像がレンダリングされている前記複数の第2コンピュータシステムのうち対応するものに送信する段階と
    を備える方法。
  8. 前記レンダリングターゲットは、複数のレンダリングターゲットユニットに分割され、
    前記複数のレンダリングターゲットユニットそれぞれは、少なくとも1つの画素を格納し、
    前記複数の第2コンピュータシステムそれぞれは、前記複数のレンダリングターゲットユニットの少なくとも1つを割り当てられ、
    前記複数の画像それぞれは、前記画像がレンダリングされた前記複数の第2コンピュータシステムの1つに割り当てられた前記複数のレンダリングターゲットユニットの前記少なくとも1つ内にレンダリングされる、請求項7に記載の方法。
  9. 前記第1コンピュータシステムにより、送信前に前記複数の画像を同時に符号化する段階をさらに備える、請求項7に記載の方法。
  10. 前記複数の画像それぞれは、複数のビデオストリームの1つの現在のフレームとして符号化され、
    前記複数のビデオストリームそれぞれは、前記複数の第2コンピュータシステムの1つに対応している、請求項9に記載の方法。
  11. 前記第1コンピュータシステムにより、前記画像がレンダリングされた前記複数の第2コンピュータシステムの前記1つに対して前記複数の画像それぞれを送信する段階は、
    前記第1コンピュータシステムにより、前記複数のビデオストリームそれぞれを、前記複数の第2コンピュータシステムの対応するものに送信する段階を有する、請求項10に記載の方法。
  12. 前記第1コンピュータシステムにより、前記複数のレンダリングパラメータのセットを更新する段階をさらに備える、請求項7に記載の方法。
  13. 前記複数の第2コンピュータシステムそれぞれの上で、特定のコンピュータプログラムのインスタンスが実行され、
    前記複数の第2コンピュータシステムそれぞれの上で実行されている前記特定のコンピュータプログラムの前記インスタンスの現在の状態によって、当該第2コンピュータシステムに対応する前記複数のレンダリングパラメータのセットのうちの対応するものが決定される、請求項12に記載の方法。
  14. 前記複数のレンダリングパラメータのセットそれぞれが、少なくとも1つのシェーダ定数を含む、請求項7に記載の方法。
  15. システムであって、
    1以上のプロセッサが実行可能な命令を有するメモリと、
    グラフィックプロセッシングユニットと、
    前記メモリに連結され、前記命令を実行する1以上のプロセッサと
    を備え、
    前記1以上のプロセッサは、前記命令を実行するときに、
    各々が遠隔クライアントアプリケーションに対応している複数のアプリケーションインスタンスをホストして、
    アプリケーションインスタンスがホストされている前記遠隔クライアントアプリケーションそれぞれにネットワーク接続を維持し、
    前記遠隔クライアントアプリケーションのうち少なくとも2つの間に、前記グラフィックプロセッシングユニットのリソースを割り当て、
    前記グラフィックプロセッシングユニットの前記リソースを利用して、前記遠隔クライアントアプリケーションの前記少なくとも2つに対応する前記アプリケーションインスタンスのグラフィック出力を同時にレンダリングし、
    前記レンダリングされたグラフィック出力を、前記遠隔クライアントアプリケーションの前記少なくとも2つに、銘々のネットワーク接続を介して送信する、システム。
  16. ソフトウェアを格納する1以上のコンピュータ可読有形格納媒体であって、前記ソフトウェアは1以上のコンピュータシステムにより実行されると、
    各々が遠隔クライアントアプリケーションに対応している複数のアプリケーションインスタンスをホストして、
    アプリケーションインスタンスがホストされている前記遠隔クライアントアプリケーションそれぞれにネットワーク接続を維持し、
    前記遠隔クライアントアプリケーションのうち少なくとも2つの間に、グラフィックプロセッシングユニットのリソースを割り当て、
    前記グラフィックプロセッシングユニットの前記リソースを利用して、前記遠隔クライアントアプリケーションの前記少なくとも2つに対応する前記アプリケーションインスタンスのグラフィック出力を同時にレンダリングし、
    前記レンダリングされたグラフィック出力を、前記遠隔クライアントアプリケーションの前記少なくとも2つに、銘々のネットワーク接続を介して送信する、1以上のコンピュータ可読有形格納媒体。
JP2013514379A 2010-06-10 2011-06-10 Gpuリソースの複数のクライアントへの割り当て Active JP5627771B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/797,788 US8803892B2 (en) 2010-06-10 2010-06-10 Allocation of GPU resources across multiple clients
US12/797,788 2010-06-10
PCT/US2011/039897 WO2011156666A2 (en) 2010-06-10 2011-06-10 Allocation of gpu resources accross multiple clients

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2014200717A Division JP5971493B2 (ja) 2010-06-10 2014-09-30 Gpuリソースの複数のクライアントへの割り当て

Publications (2)

Publication Number Publication Date
JP2013532332A true JP2013532332A (ja) 2013-08-15
JP5627771B2 JP5627771B2 (ja) 2014-11-19

Family

ID=45095898

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2013514379A Active JP5627771B2 (ja) 2010-06-10 2011-06-10 Gpuリソースの複数のクライアントへの割り当て
JP2014200717A Active JP5971493B2 (ja) 2010-06-10 2014-09-30 Gpuリソースの複数のクライアントへの割り当て

Family Applications After (1)

Application Number Title Priority Date Filing Date
JP2014200717A Active JP5971493B2 (ja) 2010-06-10 2014-09-30 Gpuリソースの複数のクライアントへの割り当て

Country Status (8)

Country Link
US (3) US8803892B2 (ja)
EP (1) EP2580665A4 (ja)
JP (2) JP5627771B2 (ja)
KR (2) KR101577507B1 (ja)
CN (1) CN102959517B (ja)
AU (3) AU2011264726B2 (ja)
NZ (2) NZ626157A (ja)
WO (1) WO2011156666A2 (ja)

Families Citing this family (86)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102288072B1 (ko) * 2010-09-13 2021-08-10 소니 인터랙티브 엔터테인먼트 아메리카 엘엘씨 부가기능의 관리
US8891616B1 (en) 2011-07-27 2014-11-18 Google Inc. Method and apparatus for entropy encoding based on encoding cost
US9250966B2 (en) * 2011-08-11 2016-02-02 Otoy, Inc. Crowd-sourced video rendering system
JP5331192B2 (ja) * 2011-11-07 2013-10-30 株式会社スクウェア・エニックス・ホールディングス 描画サーバ、センタサーバ、符号化装置、制御方法、符号化方法、プログラム、及び記録媒体
US20130210522A1 (en) * 2012-01-12 2013-08-15 Ciinow, Inc. Data center architecture for remote graphics rendering
WO2013119208A1 (en) * 2012-02-07 2013-08-15 Empire Technology Development Llc Online gaming
US20130274021A1 (en) * 2012-04-11 2013-10-17 Meteor Entertainment, Inc. Computing platform for supporting massively multi-player online games
CN104077381B (zh) * 2012-05-02 2018-09-14 北京奇虎科技有限公司 网页访问请求处理方法和分配方法
CN102708173B (zh) * 2012-05-02 2014-08-13 北京奇虎科技有限公司 处理用户访问网页的请求的方法及系统
US9113164B1 (en) 2012-05-15 2015-08-18 Google Inc. Constant bit rate control using implicit quantization values
US20130311548A1 (en) * 2012-05-15 2013-11-21 Nvidia Corporation Virtualized graphics processing for remote display
US9510019B2 (en) 2012-08-09 2016-11-29 Google Inc. Two-step quantization and coding method and apparatus
CN103631634B (zh) * 2012-08-24 2017-07-25 中国电信股份有限公司 实现图形处理器虚拟化的方法与装置
US9253483B2 (en) 2012-09-25 2016-02-02 Google Technology Holdings LLC Signaling of scaling list
US10270709B2 (en) 2015-06-26 2019-04-23 Microsoft Technology Licensing, Llc Allocating acceleration component functionality for supporting services
US9407915B2 (en) 2012-10-08 2016-08-02 Google Inc. Lossless video coding with sub-frame level optimal quantization values
US20140122558A1 (en) * 2012-10-29 2014-05-01 Nvidia Corporation Technique for offloading compute operations utilizing a low-latency data transmission protocol
US11082490B2 (en) 2012-11-28 2021-08-03 Nvidia Corporation Method and apparatus for execution of applications in a cloud system
CN104822429A (zh) 2012-11-28 2015-08-05 辉达公司 掌上游戏机
US10261611B2 (en) 2012-12-03 2019-04-16 Apkudo, Llc System and method for objectively measuring user experience of touch screen based devices
US9578133B2 (en) 2012-12-03 2017-02-21 Apkudo, Llc System and method for analyzing user experience of a software application across disparate devices
US10345989B2 (en) * 2013-02-14 2019-07-09 Autodesk, Inc. Collaborative, multi-user system for viewing, rendering, and editing 3D assets
US11663767B2 (en) * 2013-02-20 2023-05-30 Nvidia Corporation Power efficient attribute handling for tessellation and geometry shaders
US9075781B2 (en) 2013-03-15 2015-07-07 Apkudo, Llc System and method for coordinating field user testing results for a mobile application across various mobile devices
KR102083316B1 (ko) 2013-04-24 2020-04-14 삼성전자주식회사 사용자 디바이스의 메모리 관리 방법 및 장치
US20140347376A1 (en) * 2013-05-24 2014-11-27 Nvidia Corporation Graphics server and method for managing streaming parameters
US10051027B2 (en) * 2013-07-22 2018-08-14 Intel Corporation Coordinated content distribution to multiple display receivers
US9842532B2 (en) 2013-09-09 2017-12-12 Nvidia Corporation Remote display rendering for electronic devices
US9292903B2 (en) 2013-10-03 2016-03-22 Google Inc. Overlap aware reordering of rendering operations for efficiency
US8854385B1 (en) * 2013-10-03 2014-10-07 Google Inc. Merging rendering operations for graphics processing unit (GPU) performance
US9619857B2 (en) 2013-10-23 2017-04-11 Empire Technology Development Llc Intermediary graphics rendition
US9582904B2 (en) 2013-11-11 2017-02-28 Amazon Technologies, Inc. Image composition based on remote object data
US9634942B2 (en) 2013-11-11 2017-04-25 Amazon Technologies, Inc. Adaptive scene complexity based on service quality
US9805479B2 (en) 2013-11-11 2017-10-31 Amazon Technologies, Inc. Session idle optimization for streaming server
CA2929588A1 (en) * 2013-11-11 2015-05-14 Vinod Murli MAMTANI Data collection for multiple view generation
US9604139B2 (en) * 2013-11-11 2017-03-28 Amazon Technologies, Inc. Service for generating graphics object data
US9596280B2 (en) * 2013-11-11 2017-03-14 Amazon Technologies, Inc. Multiple stream content presentation
US9578074B2 (en) 2013-11-11 2017-02-21 Amazon Technologies, Inc. Adaptive content transmission
US20150130814A1 (en) * 2013-11-11 2015-05-14 Amazon Technologies, Inc. Data collection for multiple view generation
US9641592B2 (en) 2013-11-11 2017-05-02 Amazon Technologies, Inc. Location of actor resources
US9308453B2 (en) * 2014-01-09 2016-04-12 Square Enix Holdings Co., Ltd. Online game server architecture using shared rendering
CN104952096B (zh) * 2014-03-31 2018-06-08 中国电信股份有限公司 Cpu和gpu混合云渲染方法、装置和系统
US10542233B2 (en) * 2014-10-22 2020-01-21 Genetec Inc. System to dispatch video decoding to dedicated hardware resources
EP3029940B1 (en) * 2014-12-04 2017-03-15 Axis AB Method and device for post processing of a video stream
US9283672B1 (en) 2014-12-11 2016-03-15 Apkudo, Llc Robotic testing device and method for more closely emulating human movements during robotic testing of mobile devices
WO2016164828A1 (en) 2015-04-08 2016-10-13 The Regents Of The University Of California Stimulus-responsive poly(lactic-co-glycolic)-based polymers and nanoparticles formed therefrom
US10296392B2 (en) 2015-04-17 2019-05-21 Microsoft Technology Licensing, Llc Implementing a multi-component service using plural hardware acceleration components
US10198294B2 (en) 2015-04-17 2019-02-05 Microsoft Licensing Technology, LLC Handling tenant requests in a system that uses hardware acceleration components
US9792154B2 (en) 2015-04-17 2017-10-17 Microsoft Technology Licensing, Llc Data processing system having a hardware acceleration plane and a software plane
US10511478B2 (en) 2015-04-17 2019-12-17 Microsoft Technology Licensing, Llc Changing between different roles at acceleration components
CN106155811B (zh) * 2015-04-28 2020-01-07 阿里巴巴集团控股有限公司 资源服务装置、资源调度方法和装置
US10216555B2 (en) 2015-06-26 2019-02-26 Microsoft Technology Licensing, Llc Partially reconfiguring acceleration components
CN105096373B (zh) * 2015-06-30 2020-04-28 华为技术有限公司 一种媒体内容渲染的方法、用户设备及系统
CN105069015A (zh) * 2015-07-13 2015-11-18 山东超越数控电子有限公司 一种国产平台网页加速技术的实现方法
US10445850B2 (en) * 2015-08-26 2019-10-15 Intel Corporation Technologies for offloading network packet processing to a GPU
US10204449B2 (en) * 2015-09-01 2019-02-12 Siemens Healthcare Gmbh Video-based interactive viewing along a path in medical imaging
CN106708499B (zh) * 2015-11-13 2020-10-27 财团法人工业技术研究院 绘图处理程序的分析方法与分析系统
CN105740061B (zh) * 2016-01-29 2019-05-31 腾讯科技(深圳)有限公司 一种gpu资源重建的方法、用户设备及系统
KR102574449B1 (ko) * 2016-11-17 2023-09-04 삼성전자 주식회사 데이터 처리 방법 및 장치
US10109030B1 (en) * 2016-12-27 2018-10-23 EMC IP Holding Company LLC Queue-based GPU virtualization and management system
US10262390B1 (en) 2017-04-14 2019-04-16 EMC IP Holding Company LLC Managing access to a resource pool of graphics processing units under fine grain control
US10275851B1 (en) 2017-04-25 2019-04-30 EMC IP Holding Company LLC Checkpointing for GPU-as-a-service in cloud computing environment
US10685473B2 (en) * 2017-05-31 2020-06-16 Vmware, Inc. Emulation of geometry shaders and stream output using compute shaders
US10616346B2 (en) 2017-07-28 2020-04-07 International Business Machines Corporation Server connection capacity management
US10325343B1 (en) 2017-08-04 2019-06-18 EMC IP Holding Company LLC Topology aware grouping and provisioning of GPU resources in GPU-as-a-Service platform
US10403032B2 (en) 2017-08-22 2019-09-03 Qualcomm Incorporated Rendering an image from computer graphics using two rendering computing devices
US10776997B2 (en) 2017-08-24 2020-09-15 Qualcomm Incorporated Rendering an image from computer graphics using two rendering computing devices
US10698766B2 (en) 2018-04-18 2020-06-30 EMC IP Holding Company LLC Optimization of checkpoint operations for deep learning computing
US11169683B2 (en) * 2018-07-17 2021-11-09 Qualcomm Incorporated System and method for efficient scrolling
CN110795228B (zh) 2018-08-03 2023-08-25 伊姆西Ip控股有限责任公司 用于训练深度学习模型的方法和制品、以及计算系统
US11089081B1 (en) * 2018-09-26 2021-08-10 Amazon Technologies, Inc. Inter-process rendering pipeline for shared process remote web content rendering
US10776164B2 (en) 2018-11-30 2020-09-15 EMC IP Holding Company LLC Dynamic composition of data pipeline in accelerator-as-a-service computing environment
US11553047B2 (en) 2018-11-30 2023-01-10 International Business Machines Corporation Dynamic connection capacity management
US10868950B2 (en) 2018-12-12 2020-12-15 Karl Storz Imaging, Inc. Systems and methods for operating video medical scopes using a virtual camera control unit
CN111833429A (zh) * 2019-04-04 2020-10-27 厦门雅基软件有限公司 三维游戏渲染方法、三维引擎、电子设备及可读存储介质
KR102064882B1 (ko) 2019-07-12 2020-01-10 (주)웨이브웨어 그래픽 처리 장치의 자원 관리가 가능한 딥러닝 플랫폼 및 이를 이용한 그래픽 처리 장치의 자원 관리 방법
CN110543361B (zh) * 2019-07-29 2023-06-13 中国科学院国家天文台 一种天文数据并行处理装置和方法
US11508110B2 (en) 2020-02-03 2022-11-22 Sony Interactive Entertainment Inc. System and method for efficient multi-GPU rendering of geometry by performing geometry analysis before rendering
US11170461B2 (en) * 2020-02-03 2021-11-09 Sony Interactive Entertainment Inc. System and method for efficient multi-GPU rendering of geometry by performing geometry analysis while rendering
US11514549B2 (en) 2020-02-03 2022-11-29 Sony Interactive Entertainment Inc. System and method for efficient multi-GPU rendering of geometry by generating information in one rendering phase for use in another rendering phase
WO2022032486A1 (zh) * 2020-08-11 2022-02-17 厦门雅基软件有限公司 三维游戏渲染方法、三维引擎、电子设备及可读存储介质
US20220212100A1 (en) * 2021-01-04 2022-07-07 Microsoft Technology Licensing, Llc Systems and methods for streaming interactive applications
US11450053B1 (en) * 2021-04-13 2022-09-20 Sony Group Corporation Efficient 5G transmission of volumetric data using 3D character rigging techniques
US11941723B2 (en) 2021-12-29 2024-03-26 Advanced Micro Devices, Inc. Dynamic dispatch for workgroup distribution
CN114339412B (zh) * 2021-12-30 2024-02-27 咪咕文化科技有限公司 视频质量增强方法、移动终端、存储介质及装置
KR102604126B1 (ko) * 2023-01-02 2023-11-22 (주) 씨이랩 구독형 영상분석 시스템 및 이의 운용 방법

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009514124A (ja) * 2005-11-01 2009-04-02 キャリスタ・テクノロジーズ,インコーポレーテッド マルチユーザ端末サービス促進装置

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE19917092A1 (de) * 1999-04-15 2000-10-26 Sp3D Chip Design Gmbh Verfahren zur Rasterisierung eines Graphikgrundelements
US7234144B2 (en) * 2002-01-04 2007-06-19 Microsoft Corporation Methods and system for managing computational resources of a coprocessor in a computing system
US7231632B2 (en) 2004-04-16 2007-06-12 Apple Computer, Inc. System for reducing the number of programs necessary to render an image
CN101120333A (zh) * 2005-01-05 2008-02-06 戴维克斯股份有限公司 用于远程用户界面的系统和方法
KR100601880B1 (ko) 2005-04-27 2006-07-18 에스케이 텔레콤주식회사 Gpu를 이용하여 실시간 3차원 그래픽 이미지를점진적으로 전송하는 방법
US7623134B1 (en) 2006-06-15 2009-11-24 Nvidia Corporation System and method for hardware-based GPU paging to system memory
TWI328198B (en) 2006-12-11 2010-08-01 Via Tech Inc Gpu context switching system
US20080318687A1 (en) * 2007-06-21 2008-12-25 Microsoft Corporation Live Game Lobby
US20090079746A1 (en) 2007-09-20 2009-03-26 Apple Inc. Switching between graphics sources to facilitate power management and/or security
WO2011065929A1 (en) 2007-11-23 2011-06-03 Mercury Computer Systems, Inc. Multi-user multi-gpu render server apparatus and methods
US8253732B2 (en) 2008-01-03 2012-08-28 International Business Machines Corporation Method and system for remote visualization client acceleration
US8769207B2 (en) * 2008-01-16 2014-07-01 Via Technologies, Inc. Caching method and apparatus for a vertex shader and geometry shader
US8393008B2 (en) * 2008-05-21 2013-03-05 Microsoft Corporation Hardware-based output protection of multiple video streams
US20100091018A1 (en) * 2008-07-11 2010-04-15 Advanced Micro Devices, Inc. Rendering Detailed Animated Three Dimensional Characters with Coarse Mesh Instancing and Determining Tesselation Levels for Varying Character Crowd Density
KR101029425B1 (ko) * 2008-11-20 2011-04-14 엔에이치엔(주) 멀티 유저 네트워크 게임의 제작 시스템 및 방법
US8686921B2 (en) * 2008-12-31 2014-04-01 Intel Corporation Dynamic geometry management of virtual frame buffer for appendable logical displays
US8506402B2 (en) * 2009-06-01 2013-08-13 Sony Computer Entertainment America Llc Game execution environments

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009514124A (ja) * 2005-11-01 2009-04-02 キャリスタ・テクノロジーズ,インコーポレーテッド マルチユーザ端末サービス促進装置

Also Published As

Publication number Publication date
AU2014203219A1 (en) 2014-07-10
US20140325073A1 (en) 2014-10-30
AU2016202205B2 (en) 2017-11-23
KR101815358B1 (ko) 2018-01-04
JP5627771B2 (ja) 2014-11-19
JP5971493B2 (ja) 2016-08-17
CN102959517B (zh) 2016-01-20
US10230565B2 (en) 2019-03-12
NZ603764A (en) 2014-07-25
WO2011156666A3 (en) 2012-04-26
US20170250850A1 (en) 2017-08-31
US8803892B2 (en) 2014-08-12
EP2580665A4 (en) 2017-06-14
AU2016202205A1 (en) 2016-05-05
AU2011264726B2 (en) 2014-07-10
WO2011156666A2 (en) 2011-12-15
AU2011264726A1 (en) 2012-12-13
KR20150013945A (ko) 2015-02-05
JP2015057709A (ja) 2015-03-26
KR101577507B1 (ko) 2015-12-14
EP2580665A2 (en) 2013-04-17
US9660928B2 (en) 2017-05-23
KR20130083894A (ko) 2013-07-23
AU2014203219B2 (en) 2016-01-14
CN102959517A (zh) 2013-03-06
NZ626157A (en) 2015-10-30
US20110304634A1 (en) 2011-12-15

Similar Documents

Publication Publication Date Title
JP5971493B2 (ja) Gpuリソースの複数のクライアントへの割り当て
JP5954802B2 (ja) ステートレス圧縮を利用したコンポジットビデオ画像をストリーミングする方法、プログラムおよび装置
JP5943330B2 (ja) クラウドソース動画レンダリングシステム
AU2015203292B2 (en) Composite video streaming using stateless compression

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130501

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20130501

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130515

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20140422

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140513

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140807

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20140902

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140930

R150 Certificate of patent or registration of utility model

Ref document number: 5627771

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250