(57)【要約】【課題】複数のプロセッシングシステムでアプリケーションを協働で実行させるときに、プロセッシングシステム間のデータ転送のレイテンシを低減する技術を提供する。【解決手段】プロセッシングシステム７００において、ＧＰＵ７２４は、映像を生成する。メモリ７２６は、データを格納する。ＧＰＵデータバス７１８は、ＧＰＵ７２４とメモリ７２６とを接続する。ＤＭＡコントローラ７１６は、ＧＰＵデータバス７１８と接続する。入出力ブリッジ７２２は、ＧＰＵデータバス７１８と接続するとともに、プロセッシングシステム７００と協働する外部のプロセッシングシステム７００との間でデータの送受信をするための外部バスとも接続する。ＣＰＵ７１０は、ＧＰＵ７２４との間でメモリ７２６が格納するデータを共有する。ＧＰＵ７２４は、ＣＰＵ７１０を介さずに、ＤＭＡコントローラ７１６に対してメモリ７２６が格納するデータのデータ転送命令を発行する。【選択図】図３
2015197805.tif 000002
【特許請求の範囲】
【請求項１】
プロセッシングシステムであって、
映像を生成するＧＰＵ（Graphics Processing Unit）と、
データを格納するメモリと、
前記ＧＰＵと前記メモリとを接続するデータバスと、
前記データバスと接続するＤＭＡ（Direct Memory Access）コントローラと、
前記データバスと接続するとともに、前記プロセッシングシステムと協働する外部のプロセッシングシステムとの間でデータの送受信をするための外部バスとも接続する入出力ブリッジと、
前記ＧＰＵとの間で前記メモリが格納するデータを共有するＣＰＵ（Central Processing Unit）とを備え、
前記ＧＰＵは、前記ＣＰＵを介さずに、前記ＤＭＡコントローラに対して前記メモリが格納するデータのデータ転送命令を発行し、
前記ＤＭＡコントローラは、前記データ転送命令を受信すると、前記入出力ブリッジに、前記外部のプロセッシングシステムへ前記メモリが格納するデータを転送させることを特徴とするプロセッシングシステム。
【請求項２】
前記ＧＰＵは、前記ＣＰＵを介さずに、前記ＤＭＡコントローラに対してデータ取得命令を発行し、
前記ＤＭＡコントローラは、前記データ取得命令を受信すると、前記入出力ブリッジにデータの読み出し命令を発行し、
前記入出力ブリッジは、前記ＤＭＡコントローラが発行したデータの読み出し命令を前記外部バスにブロードキャストするとともに、前記読み出し命令に応答した前記外部のプロセッシングシステムから転送されたデータを受信し、
前記ＤＭＡコントローラは、前記入出力ブリッジが受信したデータを前記メモリに書き込むことを特徴とする請求項１に記載のプロセッシングシステム。
【請求項３】
前記ＤＭＡコントローラは、前記メモリが格納するデータの圧縮、前記入出力ブリッジが前記外部のプロセッシングシステムから転送されたデータから受信したデータの伸張の制御を実行することを特徴とする請求項２に記載のプロセッシングシステム。
【請求項４】
請求項１から３のいずれかに記載のプロセッシングシステムを２以上備えるマルチプロセッシングシステムであって、
各プロセッシングシステムにおける入出力ブリッジはそれぞれ、他のプロセッシングシステムとの間でデータを送受信するための２以上の入出力ポートを有し、
前記プロセッシングシステムはそれぞれ、各ゲームプロセッシングシステム中の入出力ブリッジが有する入出力ポートを介して、１対１で通信可能に接続されていることを特徴とするマルチプロセッシングシステム。
【請求項５】
各プロセッシングシステムにおけるＧＰＵまたはＣＰＵが処理してそれぞれのメモリにデータを格納すると、当該データを処理したＧＰＵまたはＣＰＵは、ＤＭＡコントローラに対してデータ転送命令を発行し、
前記データ転送命令を取得したＤＭＡコントローラは、前記メモリに格納されたデータを、入出力ブリッジを介して各プロセッシングシステムにブロードキャストすることを特徴とする請求項４に記載のマルチプロセッシングシステム。
【請求項６】
請求項１から３のいずれかに記載のプロセッシングシステムを同一基板上に複数個配置したブレードをさらに複数備え、
各ブレードにおける複数のゲームプロセッシングシステムはそれぞれ、入出力ブリッジが有する入出力ポートを介して１対１で通信可能に接続されており、
前記複数のブレードはそれぞれ、各ブレードにおけるいずれかのゲームプロセッシングシステムが備える入出力ブリッジの入出力ポートを介して、１対１で通信可能に接続されていることを特徴とする請求項４または５に記載のマルチプロセッシングシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッシングシステムおよびマルチプロセッシングシステムに関する。
【背景技術】
【０００２】
近年、インターネットをはじめとするネットワークの通信技術が急速に発達し、ユーザがネットワークを経由して様々なアプリケーションの提供を受ける、いわゆるクラウドサービスが提供されるようになってきた。このようなクラウドサービスの中には、ゲームアプリケーションをクラウドサーバ上で実行し、実行結果をネットワークを介してクライアント装置にストリーミング配信するクラウドゲーミングサービスも実現されている。
【０００３】
一方、近年のプロセッサ技術の進歩は著しく、汎用の演算処理を担うＣＰＵ（Central Processing Unit）のみならず、画像処理を主に担当するＧＰＵ（Graphics Processing Unit）の性能も向上してきている。これらプロセッサの性能向上に応じて、ゲームアプリケーションが提供する映像を生成するために要する演算量も増加している。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
クラウドゲーミングサービスを実現するためには、複数のユーザそれぞれに対して異なるアプリケーションを提供するために、複数のゲーム提供サーバが必要となる。当然ながら、ゲームアプリケーションを実行するためのプロセッシングシステムも複数存在することになる。
【０００５】
本願の発明者は、複数のプロセッシングシステムを備えるサーバにおいて、ひとつのアプリケーションを複数のプロセッシングシステムで協働で実行させることにより、アプリケーションを１つのプロセッシングシステムで実行させる場合と比較して、高画質のサービスを提供することができる可能性について認識した。このとき、複数のプロセッシングシステムでの協働作業を効率化するために、プロセッシングシステム間でのデータ転送のレイテンシを低減する必要性について認識するに至った。
【０００６】
本発明はこうした課題に鑑みてなされたものであり、その目的は、複数のプロセッシングシステムでアプリケーションを協働で実行させるときに、プロセッシングシステム間のデータ転送のレイテンシを低減する技術を提供することにある。
【課題を解決するための手段】
【０００７】
上記課題を解決するために、本発明のある態様のプロセッシングシステムは、映像を生成するＧＰＵと、データを格納するメモリと、ＧＰＵとメモリとを接続するデータバスと、データバスと接続するＤＭＡ（Direct Memory Access）コントローラと、データバスと接続するとともに、プロセッシングシステムと協働する外部のプロセッシングシステムとの間でデータの送受信をするための外部バスとも接続する入出力ブリッジと、ＧＰＵとの間でメモリが格納するデータを共有するＣＰＵとを備える。ＧＰＵは、ＣＰＵを介さずに、ＤＭＡコントローラに対してメモリが格納するデータのデータ転送命令を発行し、ＤＭＡコントローラは、データ転送命令を受信すると、入出力ブリッジに、外部のプロセッシングシステムへメモリが格納するデータを転送させる。
【０００８】
なお、以上の構成要素の任意の組合せ、本発明の少なくとも一部の表現を方法、装置、システム、コンピュータプログラム、データ構造、記録媒体などの間で変換したものもまた、本発明の態様として有効である。コンピュータプログラムは、画像プロセッサを実現するハードウェア資源の基本的な制御を行なうために機器に組み込まれるファームウェアの一部として提供されてもよい。このファームウェアは、たとえば、機器内のＲＯＭ（Read Only Memory）やフラッシュメモリなどの半導体メモリに格納される。このファームウェアを提供するため、あるいはファームウェアの一部をアップデートするために、このプログラムを記録したコンピュータ読み取り可能な記録媒体が提供されてもよく、また、このプログラムが通信回線で伝送されてもよい。
【発明の効果】
【０００９】
本発明によれば、複数のプロセッシングシステムでアプリケーションを協働で実行させるときに、プロセッシングシステム間のデータ転送のレイテンシを低減する技術を提供する技術を提供することができる。
【図面の簡単な説明】
【００１０】
【図１】実施の形態に係るアプリケーション提供システムの全体構成を模式的に示す図である。
【図２】実施の形態に係るブレードサーバの内部構成を模式的に示す図である。
【図３】実施の形態に係るプロセッシングシステムの回路構成を模式的に示す図である。
【図４】異なるプロセッシングシステム間のデータ転送を説明するための図である。
【図５】図５（ａ）−（ｃ）は、ひとつのブレードにおける各プロセッシングシステム間の接続トポロジを模式的に示す図である。
【図６】複数のブレードをまたがったプロセッシングシステム間の接続トポロジを模式的に示す図である。
【図７】４つのプロセッシングシステムの協働時におけるメモリのメモリマップと処理の依存関係とを説明するための図である。
【図８】図８（ａ）−（ｅ）は、４つのプロセッシングシステムの協働時におけるメモリマップの更新の流れの一例を示す図である。
【図９】実施の形態に係る割当サーバが実行するプロセッシングシステムの割当数の変更処理の流れを示すフローチャートである。
【発明を実施するための形態】
【００１１】
図１は、実施の形態に係るアプリケーション提供システム１０の全体構成を模式的に示す図である。図１においては、クライアント装置５００と総称する複数のクライアント装置５００のうち、クライアント装置５００ａと５００ｂとが図示されている。クライアント装置５００は、インターネット等のネットワーク４００を介してログインサーバ３００と接続している。
【００１２】
ログインサーバ３００は、ネットワーク４００を介して接続するクライアント装置５００を利用するユーザのアカウントを管理する。ログインサーバ３００は、アプリケーション提供システム１０に登録しているユーザのユーザ名やパスワード等を格納する図示しないデータベースを参照し、ユーザのログイン処理およびログオフ処理を担当する。
【００１３】
図１においては、ブレードサーバ２００と総称する複数のブレードサーバ２００のうち、ブレードサーバ２００ａと２００ｂとが図示されている。ブレードサーバ２００は、クライアント装置５００に提供するためのアプリケーションを実行するサーバである。割当サーバ１００は、複数のブレードサーバ２００の中から、クライアント装置５００に提供するためのアプリケーションを実行するブレードサーバ２００を割当て、アプリケーションプログラムを実行させる。なお、割当サーバ１００における割当処理の詳細は後述する。
【００１４】
クライアント装置５００は、ほとんどの場合ＣＰＵ等の計算リソースを持っており、アプリケーションプログラムの少なくとも一部をクライアント装置５００のローカルな環境で実行することも可能である。しかしながら、クライアント装置５００を利用するユーザにとっては、アプリケーションがローカルな計算リソースで実行されるか、あるいはネットワーク上のアプリケーション提供システム１０の計算リソースで実行されるかは重要な問題ではなく、サービスを利用できるという点では同じである。クライアント装置５００は、例えば、ＰＣ（Personal Computer）、据え置き型のゲームコンソール、携帯ゲーム機、スマートフォン、タブレットＰＣ、ファブレット、電子書籍端末、電子辞書、携帯音楽プレイヤ、携帯型ワンセグテレビ等を用いて実現できる。
【００１５】
図１は、ネットワーク４００を介してクライアント装置５００とログインサーバ３００とが接続している様子を図示しており、現実のシステム構成を模式的に図示するものである。しかしながら、クライアント装置５００を利用するユーザは、ネットワーク４００を含め、ログインサーバ３００、割当サーバ１００等のシステム構成を認識することはあまりない。アプリケーション提供システム１０を利用するユーザの立場から見ると、サービスの提供を受ける上でアプリケーション提供システム１０の物理構成やソフトウェア構成等を理解する必要はなく、あたかもネットワークの雲（Ｃｌｏｕｄ；クラウド）の中から出てきたサービスを利用するかのような印象を受ける。図１に示すアプリケーション提供システム１０は、クラウドゲーミングシステムを構成する。
【００１６】
以下、実施の形態に係るアプリケーション提供システム１０において、ブレードサーバ２００は、専用のハードウェアであるゲームコンソール上で実行されることを前提として開発されたゲームコンテンツを実行する場合について説明する。この意味で、ブレードサーバ２００はゲーム提供サーバとして機能する。しかしながら、ブレードサーバ２００が実行するコンテンツはゲームに限られず、例えばＳＮＳ（Social Networking Service）、動画閲覧サービス等、ゲーム以外のジャンルのコンテンツを実行する場合も本実施の形態に含まれる。
【００１７】
図２は、実施の形態に係るブレードサーバ２００の内部構成を模式的に示す図である。図２に示すように、ひとつのブレードサーバ２００は、筐体内に１６個のブレード（Blade）６００を搭載することができる。実施の形態に係るブレードサーバ２００は１６個のブレード６００を備える。図２においては、１６個のブレード６００は、ブレード６００ａ〜６００ｐとして図示されている。以下、特に区別をする場合を除き、複数のブレード６００を単に「ブレード６００」と総称する。ブレード６００は、単体でアプリケーション提供サーバを構成し、アプリケーションプログラムの実行に１６個のブレード６００を必ずしも必要としない。また、実施の形態に係るブレードサーバ２００が備えるブレード６００の数は１６個に限られず、複数のブレード６００を備えていればよい。
【００１８】
図２に示すように、１つのブレード６００は、４つのプロセッシングシステム７００ａ〜７００ｄ（以下、特に区別する場合を除き、単に「プロセッシングシステム７００」と総称する。）の他、電源ポート６１０、入出力ポート６２０、および通信ポート６３０を同一基板上に備える。
【００１９】
上述したように、実施の形態に係るブレードサーバ２００は、専用のハードウェアであるゲームコンソールで実行されることを前提として開発されたゲームコンテンツを実行する。ブレード６００を構成する基板上に配置された４つのプロセッシングシステム７００ａ〜７００ｄは、それぞれ単体でゲームコンソールが備えるプロセッシングシステムと同等の性能をもつプロセッシングシステムである。
【００２０】
一般に、専用のゲームコンソール向けに開発されるゲームタイトルは、プロセッサやメモリ等のハードウェアリソースに対して、高度に最適化されている。このため、ひとつのプロセッサはひとつのゲームタイトルを実行するために占有され、プロセッサが単体で複数のゲームタイトルを同時に実行するのは困難である。実施の形態に係るプロセッシングシステム７００も、単体で最大ひとつのゲームアプリケーションを実行可能なゲームプロセッシングシステムである。実施の形態に係るブレード６００は、このようなプロセッシングシステム７００を複数有し、マルチプロセッシングシステムを構成する。
【００２１】
電源ポート６１０は、ブレード６００が有するプロセッシングシステム７００に電力を供給する。入出力ポート６２０は、他のブレード６００とデータを送受信するためのポートであり、例えばＰＣＩ  Ｅｘｐｒｅｓｓ等の既知の入出力インタフェースを用いて実現できる。通信ポート６３０は、割当サーバ１００から、ゲームアプリケーションを実行するプロセッシングシステム７００の割当指示を受信するポートである。通信ポート６３０は、例えばイーサネット（登録商標）等の既知のＬＡＮ（Local Area Network）規格に則ったＬＡＮポートを用いて実現できる。
【００２２】
図３は、実施の形態に係るプロセッシングシステム７００の回路構成を模式的に示す図である。実施の形態に係るプロセッシングシステム７００は、ＣＰＵ７１０、ＧＰＵ７２４、メモリ７２６、メモリ制御部７１４、ブリッジ７１２、ＤＭＡコントローラ７１６、入出力ブリッジ７２２、ＧＰＵバス７１８、およびＣＰＵバス７２０を備える。
【００２３】
ＧＰＵ７２４は、クライアント装置５００に提供するゲームアプリケーションの映像を生成する。ＧＰＵ７２４は、ＧＰＵバス７１８を介してメモリ７２６に接続している。メモリ７２６は、ＧＰＵ７２４が出力したデータを格納する。
【００２４】
ＣＰＵ７１０は、ＣＰＵバス７２０を介してメモリ７２６と接続している。ＣＰＵ７１０はまた、ＧＰＵバス７１８を介してＧＰＵ７２４とも接続している。ＣＰＵ７１０は、これらのバスとはブリッジ１２を介して接続する。また、メモリ７２６はＧＰＵバス７１８とＣＰＵバス７２０とに接続する。このため、メモリ７２６におけるＣＰＵ７１０またはＧＰＵ７２４との間でのデータのやりとりは、メモリ制御部７１４を介して実行する。ＣＰＵ７１０とＧＰＵ７２４とはメモリ７２６を共有し、メモリ７２６を介してデータを共有する。ＧＰＵバス７１８とＣＰＵバス７２０とはともに、データ交換に用いられるデータバスとして機能する。
【００２５】
ＤＭＡコントローラ７１６は、ＧＰＵバス７１８と接続する。入出力ブリッジ７２２はＧＰＵバス７１８と接続し、外部のプロセッシングシステム７００との間でデータの送受信をするためのインタフェースとなる。ＤＭＡコントローラ７１６はＧＰＵバス７１８と接続しており、ＣＰＵ７１０を介さず、ＧＰＵ７２４の制御の下、メモリ７２６に格納されているデータを外部のプロセッシングシステム７００に転送することができる。
【００２６】
図４は、異なるプロセッシングシステム７００間のデータ転送を説明するための図である。図４に示す例では、２つの異なるプロセッシングシステム７００ａおよび７００ｂが、入出力ブリッジ７２２ａおよび７２２ｂを介して接続している。より具体的に、プロセッシングシステム７００ａが備える入出力ブリッジ７２２ａは、他のプロセッシングシステム７００との間でデータを送受信するための複数の入出力ポート７３０ａ、７３１ａ、７３２ａ、および７３３ａを備える。同様にプロセッシングシステム７００ｂが備える７３０ｂも、複数の入出力ポート７３０ｂ、７３１ｂ、７３２ｂ、および７３３ｂを備える。プロセッシングシステム７００ａおよび７００ｂは、入出力ポート７３０ａおよび入出力ポート７３０ｂを介して接続している。
【００２７】
図４において、プロセッシングシステム７００ａはプロセッシングシステム７００ｂの他、入出力ポート７３２ａを介してプロセッシングシステム７００ｃと接続し、入出力ポート７３３ａを介してプロセッシングシステム７００ｄとも接続している。また、プロセッシングシステム７００ｂは、プロセッシングシステム７００ａの他、入出力ポート７３１ｂ、７３２、および７３３ｂを介して、それぞれプロセッシングシステム７００ｃ、７００ｄ、および７００ｅとも接続している。このように、入出力ポートを介して異なるプロセッシングシステム７００間を接続するバスが、それらのプロセッシングシステム７００間でデータを送受信するための外部バスとして機能する。
【００２８】
なお、入出力ブリッジ７２２は、ＤＭＡコントローラ７１６を経由したアクセスだけでなく、特定範囲の物理メモリに各入出力ポートをマッピングして、ＧＰＵバス７１８に流れるコマンドをリモートノード（他のプロセッシングシステム７００）のＧＰＵバス７１８に流すこともできる。入出力ブリッジ７２２は、ＧＰＵバス７１８に接続され、物理メモリにマップされる。このため、ＣＰＵ７１０やＧＰＵ７２４それぞれが、リモートノードのメモリ７２６に直接アクセスすることもできる。
【００２９】
以下、プロセッシングシステム７００ａとプロセッシングシステム７００ｂとが、ひとつのゲームアプリケーションプログラムを協働して実行する場合を例に説明する。
【００３０】
実施の形態に係るプロセッシングシステム７００において、ＧＰＵ７２４は、ＣＰＵ７１０の制御によらず、ＤＭＡコントローラ７１６に対してメモリ７２６が格納するデータのデータ転送命令を発行することができる。例えばＧＰＵ７２４ａが、ＤＭＡコントローラ７１６ａに対してメモリ７２６ａが格納するデータを、プロセッシングシステム７００ｂに転送することを指示するデータ転送命令を発行したとする。データ転送命令を発行する契機としては、ＧＰＵ７２４ａが自発的にデータ転送命令を発行する場合もある。あるいは、プロセッシングシステム７００ｂがブロードキャストしたデータ読み出し命令に応答して、データ転送命令を発行する場合もある。いずれにしても、ＤＭＡコントローラ７１６ａは、データ転送命令を受信すると、入出力ブリッジ７２２に、プロセッシングシステム７００ｂへメモリ７２６が格納するデータを転送させる。
【００３１】
プロセッシングシステム７００ｂ内のＤＭＡコントローラ７１６ｂは、入出力ブリッジ７２２ｂを介して、プロセッシングシステム７００ａから転送されたデータを受信する。続いてＤＭＡコントローラ７１６ｂは、受信したデータを、プロセッシングシステム７００ｂ内のメモリ７２６ｂに書き込む。
【００３２】
なお、プロセッシングシステム７００ｂ内のＧＰＵ７２４ｂが、プロセッシングシステム７００ａ内のメモリ７２６ａが格納するデータを取得する場合、まず、ＧＰＵ７２４ｂが、ＣＰＵ７１０ｂを介さずに、ＤＭＡコントローラ７１６ｂに対してデータ取得命令を発行する。ＤＭＡコントローラ７１６ｂは、データ取得命令を受信すると、入出力ブリッジ７２２ｂにデータの読み出し命令を発行する。入出力ブリッジ７２２ｂは、ＤＭＡコントローラ７１６ｂが発行したデータの読み出し命令を外部バスにブロードキャストする。プロセッシングシステム７００ａがこの命令に応答した後の動作は、上述と同様である。
【００３３】
このように、ＧＰＵ７２４は、メモリ７２６に格納されているデータを外部のプロセッシングシステム７００に送信したり、外部のプロセッシングシステム７００のデータを受信してメモリ７２６に格納したりすることができる。なお、複数のプロセッシングシステム７００間でデータを共有しつつ処理することについて、詳細を後述する。
【００３４】
図５（ａ）−（ｃ）は、ひとつのブレード６００におけるプロセッシングシステム７００の接続トポロジを模式的に示す図である。上述したように、ブレード６００を構成する基板上に、同一の性能を持つプロセッシングシステム７００ａ〜７００ｄが実装されている。ここで、各プロセッシングシステム７００内の入出力ブリッジ７２２ａ〜７２２ｄは、既知のＰＣＩ  Ｅｘｐｒｅｓｓを用いて実装されていることとする。
【００３５】
図示はしないが、ブレード６００には、ＰＣＩ  Ｅｘｐｒｅｓｓの動作を制御するシステムコントローラが実装されている。このシステムコントローラは、通信ポート６３０を介して割当サーバ１００から接続関係を指示する命令を受信して、入出力ブリッジ７２２の接続を制御する。より具体的には、システムコントローラは、受信した命令に基づいて、ＰＣＩ  ＥｘｐｒｅｓｓにおけるＲｏｏｔ  ＣｏｍｐｌｅｘおよびＥｎｄｐｏｉｎｔを設定した後、リセットをかけることで接続が確立する。接続が確立したプロセッシングシステム７００同士はそれぞれメモリに格納したデータも共有し、同じゲームアプリケーションを協働して実行することが可能となる。
【００３６】
図５（ａ）は、２つのプロセッシングシステム７００ａおよび７００ｂが接続している場合を示す図であり、図５（ｂ）は、３つのプロセッシングシステム７００ａ、７００ｂ、および７００ｃが接続している場合を示す図である。また図５（ｃ）は、４つのプロセッシングシステム７００ａ、７００ｂ、７００ｃ、および７００ｄが接続している場合を示す図である。各プロセッシングシステム７００において入出力ブリッジ７２２は複数の入出力ポート（７３０、７３１、７３２、および７３３）備えるため、いずれの場合にしても、プロセッシングシステム７００同士はポイント・ツー・ポイント（point-to-point）で接続する。これにより、プロセッシングシステム７００はそれぞれ、１対１で通信可能となる。
【００３７】
図６は、複数のブレード６００をまたがったプロセッシングシステム７００間の接続トポロジを模式的に示す図である。図６は、４つのブレード６００ａ、６００ｂ、６００ｃ、および６００ｄが接続している場合の例を示している。各ブレード６００内の４つのプロセッシングシステム７００は、図５（ｃ）に示す場合と同様に、互いにポイント・ツー・ポイントで接続している。
【００３８】
４つのブレード６００ａ、６００ｂ、６００ｃ、および６００ｄはそれぞれ、各ブレードにおけるいずれかのプロセッシングシステム７００が備える入出力ブリッジ７２２を介して、１対１で通信可能に接続される。例えば、ブレード６００ａとブレード６００ｄとは、ブレード６００ａ内のプロセッシングシステム７００ｄの入出力ブリッジ７２２と、ブレード６００ｄ内のプロセッシングシステム７００ｄの入出力ブリッジ７２２とを介して、互いにポイント・ツー・ポイントで接続する。プロセッシングシステム７００ｄは、ブレード６００ａ内においてプロセッシングシステム７００ａ、７００ｂ、および７００ｃとも接続するが、入出力ブリッジ７２２は４つの入出力ポート７３０、７３１、７３２、および７３３備えるため、４つの異なるプロセッシングシステム７００と同時に接続することができる。
【００３９】
１６個のプロセッシングシステム７００ａ〜７００ｐを、図６に示す構成で接続する場合、任意の異なるプロセッシングシステム７００同士は、最大でも３ホップ（hop）、すなわち、相手に到達するまでの間に経由するプロセッシングシステム７００の数は最大でも３つとなる。これにより、１６個のプロセッシングシステム７００ａ〜７００ｐが協働してひとつのゲームアプリケーションを実行する場合において、データの共有時におけるデータ転送の際のレイテンシを抑えることができる。
【００４０】
一般に、複数のＧＰＵを協働して動作させる場合、ＧＰＵの描画処理をフレーム単位や領域単位に分割し、それぞれの描画タスクを複数のＧＰＵに分散する。分散された複数の描画タスクをそれぞれのＧＰＵが処理し、描画結果を１つのＧＰＵに書き戻すのが主流である。これは、ＧＰＵ間における描画結果の伝送に制約があるからである。
【００４１】
例えば描画結果の伝送に専用バスが用いられる場合、専用バスは画像の伝送に最適化されたディスプレイインタフェースのようなものであるため、帯域保証はされる。しかしながら、バンド幅はある解像度以下の画像を伝送するのに必要な帯域に制限されうる。一方、描画結果の伝送にＰＣＩ Ｅｘｐｒｅｓｓが用いられることもある。この場合、帯域が大きく専用インタフェースも必要ないが、その他のデータの伝送と混在するために帯域保証が困難となる。
【００４２】
近年のＧＰＵは、グラフィックス描画だけでなく従来ＣＰＵが担っていた物理演算やシミュレーションの一部をＣＰＵに代わって並列処理することができるようになってきている。そのため、ゲームなどのリアルタイムアプリケーションでは、物理演算等をＣＰＵとＧＰＵとのそれぞれに適した処理に分割し、並列実行した後でその結果を描画処理に反映させるといったことが可能になってきている。しかしながら、例えばユーザによる入力を物理演算および描画に反映させる場合、フレーム単位での分散処理はレイテンシを増加させる要因になるため適さない。
【００４３】
また１フレームの中で物理演算と描画を完了させる場合、ＣＰＵおよびＧＰＵのインタラクションが１フレームの間に複数回発生する。例えば、１フレームを縦２、横２の４分割し、それぞれの領域を４つのＧＰＵが描画する場合を考える。このとき、あるＧＰＵが処理する領域に存在する移動物体の影が、その領域のみならず、別のＧＰＵが処理する領域に映り込むこともありうる。この場合、移動物体の運動をＣＰＵが処理し、その移動物体に起因する影を異なる２つのＧＰＵが描画することになり、ＣＰＵおよびＧＰＵのインタラクションが１フレームの間に複数回発生する。
【００４４】
実施の形態に係るプロセッシングシステム７００は、ＣＰＵ７１０およびＧＰＵ７２４が１チップに統合されたシステムである。さらに、ＣＰＵ７１０およびＧＰＵ７２４はメモリ７２６を共有する。このため、ＣＰＵ７１０およびＧＰＵ７２４間が共通のデータを参照する際にメモリコピーが発生せず、レイテンシが短くなる。また、ＤＭＡコントローラ７１６はＧＰＵバス７１８に接続され、ＧＰＵ７２４の制御でデータ転送を実行できるため、入出力ポート７３２を介して接続される他のプロセッシングシステム７００とともに分散処理する場合にも、通信と同期によるレイテンシが抑制できる。これにより、１フレーム内で複数回にわたって異なるＧＰＵ７２４やＣＰＵ７１０間でデータをやりとりする、リアルタイムによる分散処理が実現できる。
【００４５】
図７は、４つのプロセッシングシステム７００ａ、７００ｂ、７００ｃ、および７００ｄの協働時におけるメモリ７２６のメモリマップと処理の依存関係とを説明するための図である。図７において、記号「ａ」は、プロセッシングシステム７００ａのメモリ７２６のメモリマップであることを示す。記号Ａで示すメモリ領域（以下、「領域Ａ」という。）は、プロセッシングシステム７００ａのＣＰＵ７１０が、図示しないストレージから読み出したデータを格納する領域を示す。
【００４６】
記号Ｂで示すメモリ領域（以下、「領域Ｂ」という。）は、領域Ａのデータを使って、ＧＰＵ７２４が演算処理した結果を格納するメモリ領域を示す。記号Ｃで示す領域（以下、「領域Ｃ」という。）は、領域Ａのデータと領域Ｂのデータとの両方を用いて、ＧＰＵ７２４が演算処理した結果を格納するメモリ領域を示す。記号Ｄで示す領域（以下、「領域Ｄ」という。）は、領域Ｃのデータが完全に揃った後に、そのデータを使ってＣＰＵ７１０が演算処理した結果を格納するメモリ領域である。記号ＦＢで示す領域（以下、「領域ＦＢ」という。）は、領域Ａのデータ、領域Ｂのデータ、および領域Ｄのデータを使って描画した結果を格納するフレームバッファ（Frame Buffer）を示す。
【００４７】
図８（ａ）−（ｅ）は、４つのプロセッシングシステム７００ａ、７００ｂ、７００ｃ、および７００ｄの協働時におけるメモリマップの更新の流れの一例を示す図である。図８（ａ）から図８（ｅ）の順に、メモリマップが更新される。
【００４８】
図８（ａ）−（ｅ）において、記号「ａ」、「ｂ」、「ｃ」、および「ｄ」は、それぞれプロセッシングシステム７００ａ、７００ｂ、７００ｃ、および７００ｄのメモリ７２６のメモリマップであることを示す。記号「Ａ」、「Ｂ」、「Ｃ」、「Ｄ」、および「ＦＢ」で示すメモリ領域は、上述と同様である。
【００４９】
図８は、４つのプロセッシングシステム７００ａ、７００ｂ、７００ｃ、および７００ｄで分散処理された結果が、プロセッシングシステム７００ｄにまとめられる場合の例を示している。分散処理を実行するゲームプログラムおよびデータは、全てのプロセッシングシステム７００からアクセス可能な共有ストレージ（図示せず）に格納されている。プログラムの実行は、それぞれのプロセッシングシステム７００が共有ストレージから読み出して実行されるが、巨大なデータはプロセッシングシステム７００ｄ読み出した後は、入出力ブリッジ７２２ｄを介して他のすべてのプロセッシングシステム７００にブロードキャストされる。共有されるデータは、全てのプロセッシングシステム７００が同じアドレスにデータを共有するために、あらかじめ確保された領域Ａが使われる。
【００５０】
プロセッシングシステム７００ｄは、テクスチャやプリミティブなどプログラムの実行に必要な全てのデータを共有ストレージから読み出す。プロセッシングシステム７００ｄは、読み出したデータを領域Ａに格納する。プロセッシングシステム７００ｄは、共有ストレージからのデータの読み出しを継続するとともに、領域Ａの内容を低プライオリティーの非圧縮データとして他のプロセッシングシステム７００ａ、７００ｂ、および７００ｃにブロードキャストする。これにより、図８（ａ）に示すように、４つのプロセッシングシステム７００ａ、７００ｂ、７００ｃ、および７００ｄは、それぞれの領域Ａに共通のデータを格納する。
【００５１】
４つのプロセッシングシステム７００ａ、７００ｂ、７００ｃ、および７００ｄが、それぞれの領域Ａに共通のデータを格納すると、プロセッシングシステム７００ｄのＣＰＵ７１０は、プログラム実行開始を伝えるためのメッセージを他のプロセッシングシステム７００ａ、７００ｂ、および７００ｃに高プライオリティーで書き込む。プロセッシングシステム７００ａ、７００ｂ、および７００ｃではすでにＧＰＵ７２４が実行すべきタスクが実行されており、各ＧＰＵ７２４はメッセージ領域（図示せず）をポーリング（Polling）している。
【００５２】
各ＧＰＵ７２４がメッセージを検出すると、それぞれのメモリ７２６中の領域Ａに格納されたデータを使い、各メモリ７２６中の領域Ｂに結果を出力する。図８（ａ）は、４つのプロセッシングシステム７００ａ、７００ｂ、７００ｃ、および７００ｄのそれぞれが、演算結果をそれぞれの領域Ｂに格納したことを示す。
【００５３】
各ＧＰＵ７２４が領域Ｂに結果を出力する時点で、各ＧＰＵ７２４にはすでに次のコマンドが投入されている。ＧＰＵ７２４に投入された次のコマンドは、領域Ｂの内容を他のプロセッシングシステム７００におけるメモリ７２６中の領域Ｂにブロードキャストするための命令である。各ＤＭＡコントローラ７１６は、ＧＰＵ７２４によって発行されたＤＭＡ命令にしたがって、領域Ｂの内容は、他のプロセッシングシステム７００にブロードキャストする。これにより、各プロセッシングシステム７００は、他のプロセッシングシステム７００との間で、自身が処理した領域Ｂのデータを共有することができる。図８（ｂ）は、各プロセッシングシステム７００が領域Ｂのデータを共有した後、その時点で未処理であったデータをさらに処理した結果を示している。
【００５４】
ここで実施の形態に係るＤＭＡコントローラ７１６は、メモリ７２６が格納するデータの圧縮、入出力ブリッジ７２２が外部のプロセッシングシステム７００から転送されたデータから受信したデータの伸張、およびＧＰＵ７２４またはＣＰＵ７１０が発行した命令の優先順位の制御を実行する。より具体的には、ＤＭＡコントローラ７１６は、受信した書き込み命令に圧縮オプションが設定された場合、メモリ７２６から読み出したデータを図示しない圧縮エンジンに転送する。圧縮エンジンで発生するレイテンシを隠ぺいするため、ＤＭＡコントローラ７１６は、他のコマンドインタフェースに入力されたリクエストを並列で処理する。
【００５５】
ＤＭＡコントローラ７１６は、入出力ブリッジ７２２から圧縮データを受信すると、受信したデータを図示しない伸張エンジンに転送する。伸張エンジンは、伸張後のデータをメモリ７２６に書き込む。ＤＭＡコントローラ７１６は、入出力ブリッジ７２２から受け取った読み込み／書き込み命令の宛先がローカルノードの場合、コマンドをＧＰＵバス７１８に流す。宛先がローカルノードではない場合、ＤＭＡコントローラ７１６は、その命令をエラーとして処理するか、宛先ノードに接続される入出力ポートにルーティング（Routing）する。
【００５６】
このように、異なるプロセッシングシステム７００間でのデータ転送時にデータを圧縮することで、転送効率を高めることができる。
【００５７】
図８の説明に戻る。上述したとおり、領域Ｃは、領域Ａのデータと領域Ｂのデータとの両方を用いて、ＧＰＵ７２４が演算処理した結果を格納するメモリ領域である。領域Ｃに格納するデータを生成するＧＰＵタスクは、領域Ｂに格納されたデータをポーリングしており、演算に必要なデータがそろうまで待機する。図８（ｂ）は、領域Ｃに格納するデータを生成するためのデータがそろったため、各プロセッシングシステム７００において領域Ｃのデータが生成され、格納されていることを示す。図８（ｃ）は、各プロセッシングシステム７００において生成された領域Ｃのデータが互いにブロードキャストされ、全てのプロセッシングシステム７００が領域Ｃのデータを共有した場合を示している。
【００５８】
ここで、他のプロセッシングシステム７００から領域Ｂに書き込まれるデータは、ＤＭＡコントローラ７１６からＧＰＵバス７１８を経由して書き込まれる。一方、領域Ｃに書き込むデータは、ＣＰＵバス７２０を経由して書き込まれる。また、他のプロセッシングシステム７００にデータを書き込む場合もＣＰＵバス７２０を経由してメモリに書き込むように、ＤＭＡコントローラ７１６に命令を発行してもよい。
【００５９】
プロセッシングシステム７００ｄのＣＰＵ７１０は領域Ｃの書き込み完了割り込みを受け取ると、図８（ｃ）に示すように、領域Ｃのデータを使って領域Ｄに格納するデータを生成する。なお、領域Ｃの書き込みはＣＰＵバス７２０を経由して行われるため、ＣＰＵ７１０は領域Ｃの内容をキャッシュしている場合でも、外部からの書き込みによってキャッシュの内容が更新される。プロセッシングシステム７００ｄのＣＰＵ７１０は、領域Ｄにデータを格納すると、そのデータを他のプロセッシングシステム７００にブロードキャストする。図８（ｄ）は、全てのプロセッシングシステム７００で領域Ｄのデータを共有した場合を示している。
【００６０】
各プロセッシングシステム７００におけるＧＰＵ７２４が処理する描画タスクは、領域Ｃおよび領域Ｄの書き込み完了をポーリングしており、データがそろった時点で、フレーム生成処理を開始する。各ＧＰＵ７２４の描画結果は、それぞれの領域ＦＢに書き込まれる。図８（ｄ）は、各ＧＰＵ７２４の描画結果は、それぞれの領域ＦＢに書き込まれた場合を示している。各ＧＰＵ７２４の描画結果は、プロセッシングシステム７００ｄの領域ＦＢにブロードキャストされ、図８（ｅ）で示すように、プロセッシングシステム７００ｄの領域ＦＢ中にコピーされる。領域ＦＢのデータがそろうと、プロセッシングシステム７００ｄはディスプレイ出力を実行する。
【００６１】
このように、実施の形態に係るブレードサーバ２００は、単体で最大ひとつのゲームアプリケーションを実行可能なプロセッシングシステム７００を複数有し、複数のプロセッシングシステム７００を協働してひとつのゲームアプリケーションを実行することができる。この際、各プロセッシングシステム７００中のＧＰＵ７２４は、最終処理結果のみならず、中間データも互いに密にやりとりすることができる。これにより、ゲームアプリケーションをひとつのプロセッシングシステム７００で実行する場合よりも、より演算量の多い処理を実行でき、より緻密で高精細な画像を提供することができる。
【００６２】
入出力ブリッジ７２２としてＰＣＥ Ｅｘｐｒｅｓｓ ４．０（Ｇｅｎ４）を採用する場合において、１６レーンを４ポートに分割して４［ｌａｎｅ／ｐｏｒｔ］としたとする。このとき、１ポートあたりのバンド幅は８ＧＢ／秒となり、実効バンド幅は、約５ＧＢ／秒となる。４ポートからから同時にデータをやり取りする場合のピーク実効バンド幅は、ＴＸ／ＲＸそれぞれ２０ＧＢ／秒となる。非可逆圧縮を組み合わせた場合、内部バンド幅はその数倍となる。
【００６３】
ここで、５ＧＢ／秒のバンド幅で１ミリ秒の間に送ることができるデータ量は、５ＭＢである。３２ビットの頂点データに換算すると、１ミリ秒あたり１２５万頂点となる。ゆえに、３２ｂｉｔ／ｐｉｘｅｌのテクスチャデータが約１／１０に圧縮される場合、１ミリ秒あたり５０ＭＢ、すなわち縦１０２４ピクセル、横１０２４ピクセルの画像のテクスチャ１２．５枚分のデータが転送できる。
【００６４】
以上説明したように、実施の形態に係るブレードサーバ２００によれば、各プロセッシングシステム７００がポイント・ツー・ポイントで接続され、ＤＭＡコントローラ７１６内で処理命令のプライオリティー制御と、内部バスであるＧＰＵバス７１８による帯域保証によって、システム全体として帯域保証することが可能とある。例えばファイルシステムから読み出した巨大なデータがバックグラウンドでコピーされている間に、各ＧＰＵ７２４が決められたサイズのリアルタイムデータを処理することによって、１フレーム内で完了させなければならない処理が遅延することを抑制できる。
【００６５】
各プロセッシングシステム７００において、ＣＰＵ７１０およびＧＰＵ７２４は、それぞれＤＭＡコントローラ７１６を介したメモリコピーが実施できる等により、プロセッシングシステム７００間でのデータ転送のレイテンシを低減できる。これにより、従来では困難であった１フレーム内で複数回にわたってデータをやりとりしながら、ＣＰＵ７１０およびＧＰＵ７２４による処理が混在した分散処理が可能となる。
【００６６】
以上、複数のプロセッシングシステム７００が協働してひとつのゲームアプリケーションを実行する場合について説明した。次に、ひとつのゲームアプリケーションの実行を担当するプロセッシングシステムの割当処理について説明する。
【００６７】
クラウドゲーミングシステムにおいて、高クオリティーかつ高負荷のゲームを提供する場合、ひとつのプロセッシングシステムで複数のゲームを動かすことは難しい。このため、図１に示すアプリケーション提供システム１０のように、複数のプロセッシングシステム７００を備えるブレードサーバ２００をさらに複数用意する。しかしながら、システムにかかる負荷が最も多いピーク時に対応できるようにプロセッシングシステム７００を用意すると、時間帯によっては負荷が減少し、稼働しないプロセッシングシステム７００が増える。アプリケーション提供システム１０をゲーム提供システムとして運用する場合、レイテンシを低く抑える必要があり、時間帯の異なる複数の地域での負荷分散を実現することは難しい
【００６８】
そこで実施の形態に係る割当サーバ１００は、ゲーム提供サーバであるブレードサーバ２００の負荷をもとに、ひとつのゲームアプリケーションを実行するために割り当てるプロセッシングシステム７００の数を設定する。より具体的に、割当サーバ１００は、ブレードサーバ２００の負荷が大きい場合は、小さい場合と比較して、ひとつのゲームアプリケーションを実行するために割り当てるプロセッシングシステム７００の数を小さく設定する。
【００６９】
割当サーバ１００はまた、ブレードサーバ２００の負荷が小さい場合は、大きい場合と比較して、ゲームアプリケーションを実行するために割り当てたプロセッシングシステム７００におけるＧＰＵ７２４およびＣＰＵ７１０の動作クロックを大きくしてもよい。割当サーバ１００は、ブレードサーバ２００の負荷に応じて、例えば以下のようにプロセッシングシステム７００の稼働状態を切り換える。
【００７０】
状態０：スタンバイ
状態１：１つのプロセッシングシステム７００を通常クロックで使用
状態２：１つのプロセッシングシステム７００をクロックアップして使用
状態３：４つのプロセッシングシステム７００をクロックアップして使用
状態４：１６のプロセッシングシステム７００をクロックアップして使用
【００７１】
割当サーバ１００は、ブレードサーバ２００の負荷が小さい場合はプロセッシングシステム７００の稼働状態を状態４とし、負荷が増大するにつれて、状態３、状態２、状態１へと稼働状態を変化させる。これにより、ブレードサーバ２００の負荷が小さいときは、緻密で高精細な画像で、クライアント装置５００にゲームを提供することができる。ブレードサーバ２００の負荷が増えても、専用のハードウェアであるゲームコンソール上で実行された場合と同等の画質を維持して、クライアント装置５００にゲームを提供することができる。なお、上記の状態は一例であり、この他にも、プロセッシングシステム７００数とクロックとの異なる組み合わせの状態を定義することもできる。
【００７２】
ここで、「ブレードサーバ２００の負荷」とは、割当サーバ１００がひとつのゲームアプリケーションを実行させるプロセッシングシステム７００の数を決定するために利用する、プロセッシングシステム７００の割り当て指標である。具体的には、ブレードサーバ２００の消費電力、ブレードサーバ２００の排熱量、およびブレードサーバ２００がゲームアプリケーションを提供中のクライアント装置５００またはユーザの数の、少なくともいずれかひとつである。ブレードサーバ２００の消費電力や排熱量は、図示しない電力計や温度センサを用いて取得することができる。割当サーバ１００は、ブレードサーバ２００の消費電力が大きい場合、排熱量が多い場合、あるいはゲームアプリケーションを提供中のクライアント装置５００またはユーザの数が多い場合は、そうでない場合と比較して、ブレードサーバ２００の負荷が大きいと判断する。
【００７３】
割当サーバ１００がプロセッシングシステム７００の稼働状態をある状態としている際に、例えばユーザがゲームを終了したり、負荷の軽いアプリケーションに切り換えたりすることにより、ブレードサーバ２００の負荷が変動することも起こりうる。そこで割当サーバ１００は、複数のクライアント装置５００にゲームアプリケーションを提供中に、ブレードサーバ２００の負荷が増加または減少した場合、提供を継続中のゲームアプリケーションにおいてシーンが切り替わることを契機として、そのゲームアプリケーションを実行するために割り当てるプロセッシングシステム７００の数を変更してもよい。
【００７４】
ここで「ゲームアプリケーションにおけるシーンの切り替わり」とは、例えばゲームの進行によってステージが切り替わったり、ゲームの映像を構成するための仮想の視点の位置を変更したりすることで、フレーム全体を再描画するタイミングを意味する。割当サーバ１００がプロセッシングシステム７００の稼働状態を変更すると、提供するゲームアプリケーションの画質も変更される。しかしながら、シーンの切り替わり時に稼働状態を変更することで、画質の変更に伴ってユーザが感じる違和感を抑制しつつ、アプリケーション提供システム１０のリソースを有効活用することが可能となる。
【００７５】
上述したとおり、１つのプロセッシングシステム７００を通常クロックで使用する状態１でゲームアプリケーションを提供する場合であっても、専用のハードウェアであるゲームコンソール上で実行する場合と同等の画質をクライアント装置５００に提供することができる。したがって、その他の稼働状態でゲームアプリケーションを提供する場合は、専用のハードウェアであるゲームコンソール上で実行する場合と比較して、高い画質でゲームアプリケーションを提供することができる。
【００７６】
そこで割当サーバ１００は、クライアント装置５００に提供中のゲームアプリケーションを実行するために複数のプロセッシングシステム７００を割り当てている場合、そのクライアント装置５００に対し、ゲームアプリケーションを高品質で提供していることを通知してもよい。これは例えばクライアント装置５００に提供する映像の一部に「高画質モード」を示すメッセージを表示したり、あるいはゲームの提供開始時に音声で伝えたりすることで実現できる。これにより、ユーザは自宅のゲームコンソールで実行する場合よりも高い画質でゲームをプレイしていることが認識できるため、アプリケーション提供システム１０を利用するためのインセンティブとなり得る。
【００７７】
図９は、実施の形態に係る割当サーバ１００が実行するプロセッシングシステム７００の割当数の変更処理の流れを示すフローチャートである。
【００７８】
割当サーバ１００は、アプリケーション提供システム１０におけるブレードサーバ２００の負荷を確認する（Ｓ２）。ブレードサーバ２００の負荷が増加している場合（Ｓ４のＹ）、割当サーバ１００は、ひとつのゲームアプリケーションの実行に割り当てるプロセッシングシステム７００の割当数の設定を減少する（Ｓ６）。
【００７９】
ブレードサーバ２００の負荷が増加しておらず（Ｓ４のＮ）、ブレードサーバ２００の負荷が減少している場合）（Ｓ８のＹ）、割当サーバ１００は、ひとつのゲームアプリケーションの実行に割り当てるプロセッシングシステム７００の割当数の設定を増加する（Ｓ１０）。割当サーバ１００がプロセッシングシステム７００の割当数の設定を変更した後、実行中のゲームアプリケーションにおいてシーンチェンジがあった場合（Ｓ１２のＹ）、割当サーバ１００は割当数の設定を反映させる（Ｓ１４）。実行中のゲームアプリケーションにおいてシーンチェンジがない間は（Ｓ１２のＮ）、割当サーバ１００はシーンチェンジがあるまで割当数の設定反映を待機する。
【００８０】
割当サーバ１００が当数の設定反映をするか、ブレードサーバ２００の負荷が増加も減少もしない場合（Ｓ８のＮ）、本フローチャートにおける処理は終了する。
【００８１】
以上説明したように、実施の形態に係る割当サーバ１００によれば、ゲーム提供サーバであるブレードサーバ２００の負荷に応じて、アプリケーション提供システム１０のリソースを適応的に割り当てることができる。
【００８２】
以上、本発明を実施の形態をもとに説明した。実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
【００８３】
［変形例］
上記の説明では、割当サーバ１００は、ブレードサーバ２００の負荷に応じてひとつのゲームアプリケーションの実行のために割り当てるプロセッシングシステム７００の割当数を変更したり、プロセッシングシステム７００の動作クロックを変更したりする場合について説明した。割当サーバ１００は、ブレードサーバ２００の負荷に替えて、あるいはこれに加えて、ゲームアプリケーションを提供するクライアント装置５００に応じて割当数やクロック数を変更してもよい。
【００８４】
例えば、実施の形態に係るアプリケーション提供システム１０を利用するために、ユーザはアプリケーション提供システム１０にユーザ登録をする場合において、ユーザはアプリケーション提供システム１０の利用態様に応じた料金を支払う場合を考える。例えば、ユーザは、より高い料金を支払うことにより、通常のユーザよりも優先的にプロセッシングシステム７００が割り当てられる「プレミアムユーザ」としてユーザ登録できる。割当サーバ１００は、あるクライアント装置５００を利用するユーザがプレミアムユーザである場合、ブレードサーバ２００の負荷が大きいときであっても、そのクライアント装置５００にゲームアプリケーションを提供するときは、状態２またはそれよりもよい稼働状態を割り当てる。これにより、特定のユーザには、常に専用のハードウェアであるゲームコンソール上で実行する場合よりもよい画質でゲームアプリケーションを提供することができる。
【００８５】
なお、本実施の形態に係る発明は、以下に記載する項目によって特定されてもよい。
【００８６】
［項目１−１］
プロセッシングシステムであって、
映像を生成するＧＰＵ（Graphics Processing Unit）と、
データを格納するメモリと、
前記ＧＰＵと前記メモリとを接続するデータバスと、
前記データバスと接続するＤＭＡ（Direct Memory Access）コントローラと、
前記データバスと接続するとともに、前記プロセッシングシステムと協働する外部のプロセッシングシステムとの間でデータの送受信をするための外部バスとも接続する入出力ブリッジと、
前記ＧＰＵとの間で前記メモリが格納するデータを共有するＣＰＵ（Central Processing Unit）とを備え、
前記ＧＰＵは、前記ＣＰＵを介さずに、前記ＤＭＡコントローラに対して前記メモリが格納するデータのデータ転送命令を発行し、
前記ＤＭＡコントローラは、前記データ転送命令を受信すると、前記入出力ブリッジに、前記外部のプロセッシングシステムへ前記メモリが格納するデータを転送させることを特徴とするプロセッシングシステム。
［項目１−２］
前記ＧＰＵは、前記ＣＰＵを介さずに、前記ＤＭＡコントローラに対してデータ取得命令を発行し、
前記ＤＭＡコントローラは、前記データ取得命令を受信すると、前記入出力ブリッジにデータの読み出し命令を発行し、
前記入出力ブリッジは、前記ＤＭＡコントローラが発行したデータの読み出し命令を前記外部バスにブロードキャストするとともに、前記読み出し命令に応答した前記外部のプロセッシングシステムから転送されたデータを受信し、
前記ＤＭＡコントローラは、前記入出力ブリッジが受信したデータを前記メモリに書き込むことを特徴とする項目１−１に記載のプロセッシングシステム。
［項目１−３］
前記ＤＭＡコントローラは、前記メモリが格納するデータの圧縮、前記入出力ブリッジが前記外部のプロセッシングシステムから転送されたデータから受信したデータの伸張の制御を実行することを特徴とする項目１−２に記載のプロセッシングシステム。
［項目１−４］
項目１−１から項目１−３のいずれかに記載のプロセッシングシステムを２以上備えるマルチプロセッシングシステムであって、
各プロセッシングシステムにおける入出力ブリッジはそれぞれ、他のプロセッシングシステムとの間でデータを送受信するための２以上の入出力ポートを有し、
前記プロセッシングシステムはそれぞれ、各ゲームプロセッシングシステム中の入出力ブリッジが有する入出力ポートを介して、１対１で通信可能に接続されていることを特徴とするマルチプロセッシングシステム。
［項目１−５］
各プロセッシングシステムにおけるＧＰＵまたはＣＰＵが処理してそれぞれのメモリにデータを格納すると、当該データを処理したＧＰＵまたはＣＰＵは、ＤＭＡコントローラに対してデータ転送命令を発行し、
前記データ転送命令を取得したＤＭＡコントローラは、前記メモリに格納されたデータを、入出力ブリッジを介して各プロセッシングシステムにブロードキャストすることを特徴とする項目１−４に記載のマルチプロセッシングシステム。
［項目１−６］
項目１−１から項目１−３のいずれかに記載のプロセッシングシステムを同一基板上に複数個配置したブレードをさらに複数備え、
各ブレードにおける複数のゲームプロセッシングシステムはそれぞれ、入出力ブリッジが有する入出力ポートを介して１対１で通信可能に接続されており、
前記複数のブレードはそれぞれ、各ブレードにおけるいずれかのゲームプロセッシングシステムが備える入出力ブリッジの入出力ポートを介して、１対１で通信可能に接続されていることを特徴とする項目１−４または項目１−５に記載のマルチプロセッシングシステム。
【００８７】
［項目２−１］
ネットワークを介して複数のクライアント装置と接続する割当サーバと、
前記割当サーバによって割り当てられたクライアント装置に提供するゲームアプリケーションを実行するゲーム提供サーバとを備え、
前記ゲーム提供サーバは、単体で最大ひとつのゲームアプリケーションを実行可能なゲームプロセッシングシステムを複数有するマルチプロセッシングシステムであり、
前記割当サーバは、前記ゲーム提供サーバの負荷をもとに、前記ゲーム提供サーバにおいてひとつのゲームアプリケーションを実行するために割り当てるゲームプロセッシングシステムの数を設定することを特徴とするゲーム提供システム。
［項目２−２］
前記割当サーバは、前記ゲーム提供サーバの負荷が大きい場合は、小さい場合と比較して、前記ゲーム提供サーバにおいてひとつのゲームアプリケーションを実行するために割り当てるゲームプロセッシングシステムの数を小さく設定することを特徴とする項目２−１に記載のゲーム提供システム。
［項目２−３］
前記ゲーム提供サーバにおけるゲームプロセッシングシステムはそれぞれ、
前記ゲームアプリケーションの映像を生成するＧＰＵと、
前記ＧＰＵが生成したデータを格納するメモリと、
前記ＧＰＵとの間で前記メモリが格納するデータを共有するＣＰＵと、
他のゲームプロセッシングシステムとの間で前記メモリが格納するデータを送受信するＤＭＡコントローラ（Direct Memory Access System）とを備え、
前記割当サーバは、前記ゲーム提供サーバの負荷が小さい場合は、大きい場合と比較して、前記ＧＰＵおよび前記ＣＰＵの動作クロックを大きくすることを特徴とする項目２−１または項目２−２に記載のゲーム提供システム。
［項目２−４］
前記ゲーム提供サーバの負荷は、前記ゲーム提供サーバの消費電力、前記ゲーム提供サーバの排熱量、および前記ゲーム提供サーバがゲームアプリケーションを提供中のクライアント装置の数の、少なくともいずれかひとつであることを特徴とする項目２−１から項目２−３のいずれかに記載のゲーム提供システム。
［項目２−５］
前記割当サーバは、複数のクライアント装置にゲームアプリケーションを提供中に前記ゲーム提供サーバの負荷が増加または減少した場合、提供を継続中のゲームアプリケーションにおいてシーンが切り替わることを契機として、当該ゲームアプリケーションを実行するために割り当てるゲームプロセッシングシステムの数を増加または減少させることを特徴とする項目２−１から項目２−４のいずれかに記載のゲーム提供システム。
［項目２−６］
前記割当サーバは、クライアント装置に提供中のゲームアプリケーションを実行するために複数のゲームプロセッシングシステムを割り当てている場合、当該クライアント装置に対し、ゲームアプリケーションを高品質で提供していることを通知することを特徴とする項目２−１から項目２−５のいずれかに記載のゲーム提供システム。
【符号の説明】
【００８８】
１０  アプリケーション提供システム、  １２  ブリッジ、  ５０  テクスチャ、  １００  割当サーバ、  ２００  ブレードサーバ、  ３００  ログインサーバ、  ４００  ネットワーク、  ５００  クライアント装置、  ６００  ブレード、  ６１０  電源ポート、  ６２０  入出力ポート、  ６３０  通信ポート、  ７００  プロセッシングシステム、  ７１０  ＣＰＵ、  ７１２  ブリッジ、  ７１４  メモリ制御部、  ７１６  ＤＭＡコントローラ、  ７１８  ＧＰＵバス、  ７２０  ＣＰＵバス、  ７２２  入出力ブリッジ、  ７２４  ＧＰＵ、  ７２６  メモリ、  ７３０，７３２  入出力ポート。
【図１】
2015197805.tif 000003
【図２】
2015197805.tif 000004
【図３】
2015197805.tif 000005
【図４】
2015197805.tif 000006
【図５】
2015197805.tif 000007
【図６】
2015197805.tif 000008
【図７】
2015197805.tif 000009
【図８】
2015197805.tif 000010
【図９】
2015197805.tif 000011