(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-08-08
(45)【発行日】2024-08-19
(54)【発明の名称】データ処理システム、データ処理方法およびコンピュータプログラム
(51)【国際特許分類】
G06F 9/48 20060101AFI20240809BHJP
A63F 13/30 20140101ALI20240809BHJP
G06F 15/00 20060101ALI20240809BHJP
【FI】
G06F9/48 300D
A63F13/30
G06F15/00 410B
(21)【出願番号】P 2021551118
(86)(22)【出願日】2020-04-07
(86)【国際出願番号】 JP2020015622
(87)【国際公開番号】W WO2021065052
(87)【国際公開日】2021-04-08
【審査請求日】2023-02-22
(32)【優先日】2019-10-02
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】310021766
【氏名又は名称】株式会社ソニー・インタラクティブエンタテインメント
(74)【代理人】
【識別番号】100105924
【氏名又は名称】森下 賢樹
(74)【代理人】
【識別番号】100109047
【氏名又は名称】村田 雄祐
(74)【代理人】
【識別番号】100109081
【氏名又は名称】三木 友由
(74)【代理人】
【識別番号】100134256
【氏名又は名称】青木 武司
(72)【発明者】
【氏名】大塚 活志
(72)【発明者】
【氏名】サーニー マーク エヴァン
【審査官】田中 幸雄
(56)【参考文献】
【文献】特表2017-510862(JP,A)
【文献】特開2008-289030(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/48
A63F 13/30
A63F 13/52
G06F 15/00
(57)【特許請求の範囲】
【請求項1】
並列して実行される複数のアプリケーションに対応する複数のデータの生成処理を時分割で実行する1つのGPUと、
前記GPUが第1のアプリケーションに対応するデータであって、後続の処理部に渡す1単位のデータの生成処理を完了した場合に、前記第1のアプリケーションとは異なる第2のアプリケーションに対応するデータの生成処理への切替を指示する指示部と、
を備えることを特徴とするデータ処理システム。
【請求項2】
前記後続の処理部に渡す1単位のデータは、画像であることを特徴とする請求項1に記載のデータ処理システム。
【請求項3】
前記GPUにおいて前記第1のアプリケーションに対応する前記1単位のデータの生成処理が完了した場合に、前記第1のアプリケーションに関するコンテキストデータを所定の記憶領域に保存することを特徴とする請求項1または2に記載のデータ処理システム。
【請求項4】
前記GPUが前記第1のアプリケーションに対応する前記1単位のデータの生成処理を完了して、前記第2のアプリケーションに対応するデータの生成処理を開始する場合に、前記複数のアプリケーションを管理するソフトウェアの処理を介さずに、前記第1のアプリケーションに関するコンテキストデータを前記GPUから所定の記憶領域に退避させるとともに、前記第2のアプリケーションに関するコンテキストデータを前記記憶領域から前記GPUに設定する転送部をさらに備えることを特徴とする請求項1または2に記載のデータ処理システム。
【請求項5】
前記第1のアプリケーションに対応する前記1単位のデータの生成処理に要したGPU占有時間が所定の割当時間を超過した場合、前記第1のアプリケーションに対応する前記1単位のデータの次回の生成処理に対する割当時間を短くし、または、前記次回の生成処理に対するGPU割り当てをスキップすることを特徴とする請求項1から4のいずれかに記載のデータ処理システム。
【請求項6】
前記複数のアプリケーションのうち所定数以上のアプリケーションのGPU占有時間が所定の割当時間を超過する場合、前記GPUにより前記1単位のデータが生成されるアプリケーションの数を減少させることを特徴とする請求項1から5のいずれかに記載のデータ処理システム。
【請求項7】
前記複数のアプリケーションのうち所定数以上のアプリケーションのGPU占有時間が所定の割当時間を超過する場合、前記複数のアプリケーションのうち少なくとも1つのアプリケーションを別のデータ処理システムに割り当てることを特徴とする請求項1から5のいずれかに記載のデータ処理システム。
【請求項8】
前記少なくとも1つのアプリケーションを前記別のデータ処理システムに割り当てる場合、(1)前記別のデータ処理システムにおいて当該アプリケーションを起動させ、(2)自システムに記憶された当該アプリケーションに関するコンテキストデータを前記別のデータ処理システムに送信し、(3)自システムにおける当該アプリケーションの或るタイミングでのコンテキストスイッチを契機に自システムにおける当該アプリケーションの処理を停止させる、ことを特徴とする請求項7に記載のデータ処理システム。
【請求項9】
符号化部をさらに備え、
前記GPUは、前記1単位のデータとして画像を生成し、生成した画像をフレームバッファに格納し、
前記指示部は、前記フレームバッファに格納された画像の符号化を前記符号化部に指示する際に、前記GPUに対して前記切替を指示することを特徴とする請求項1から8のいずれかに記載のデータ処理システム。
【請求項10】
前記GPUは、前記フレームバッファに格納した画像について、(1)どのアプリケーションの画像であるかを示すデータ、(2)画像の生成タイミングを示すデータ、(3)画像の表示タイミングを示すデータのうち少なくとも1つを後続の処理部に提供することを特徴とする請求項9に記載のデータ処理システム。
【請求項11】
前記指示部は、画像表示におけるブランキング期間中に前記切替を指示することを特徴とする請求項1から10のいずれかに記載のデータ処理システム。
【請求項12】
前記複数のアプリケーションを並列実行するCPUをさらに備え、
前記CPUは、前記GPUにおける各アプリケーションに対する割当時間に関わらず、各アプリケーションが並列してCPUの資源を占有するように、前記複数のアプリケーションを並列実行することを特徴とする請求項
1から11のいずれかに記載のデータ処理システム。
【請求項13】
前記複数のアプリケーションに対応するコマンドバッファをさらに備え、
前記CPUは、前記複数のアプリケーションに関するデータ処理の指示を各アプリケーションに対応するコマンドバッファに格納し、
前記GPUは、前記複数のアプリケーションに関するデータ処理の指示を前記コマンドバッファから読み出すことを特徴とする請求項
12に記載のデータ処理システム。
【請求項14】
前記複数のアプリケーションに対応する複数のコマンドバッファであって、前記複数のアプリケーションに関するデータ処理の指示が格納される複数のコマンドバッファをさらに備え、
前記GPUは、実行対象のアプリケーションを切り替える場合に、データ処理の指示を読み出すコマンドバッファを切り替えることを特徴とする請求項1から
11のいずれかに記載のデータ処理システム。
【請求項15】
前記複数のコマンドバッファとは異なるコマンドバッファであって、前記GPUにおける実行対象のアプリケーションの切替とは非同期に実行可能なデータ処理の指示が格納されるコマンドバッファをさらに備えることを特徴とする請求項
14に記載のデータ処理システム。
【請求項16】
1つのGPUと、指示部とを備えるデータ処理システムが実行する方法であって、
前記GPUが、並列して実行される複数のアプリケーションに対応する複数のデータの生成処理を時分割で実行するステップと、
前記指示部が、前記GPUが第1のアプリケーションに対応するデータであって、後続の処理部に渡す1単位のデータの生成処理を完了した場合に、前記第1のアプリケーションとは異なる第2のアプリケーションに対応する画像の生成処理への切替を指示するステップと、
を備えることを特徴とするデータ処理方法。
【請求項17】
1つのGPUと、指示部とを備えるデータ処理システムに、
前記GPUが、並列して実行される複数のアプリケーションに対応する複数のデータの生成処理を時分割で実行するステップと、
前記指示部が、前記GPUが第1のアプリケーションに対応するデータであって、後続の処理部に渡す1単位のデータの生成処理を完了した場合に、前記第1のアプリケーションとは異なる第2のアプリケーションに対応する画像の生成処理への切替を指示するステップと、
を実行させるためのコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
この発明は、データ処理技術に関し、特にデータ処理システム、データ処理方法およびコンピュータプログラムに関する。
【背景技術】
【0002】
クラウド上のサーバが、複数のクライアントで実行中の複数のアプリケーション(ゲーム等)に対応する各クライアント用の画像を並行して生成し、生成した各クライアント用の画像を各クライアントへ配信して表示させることが行われることがある。
【発明の概要】
【発明が解決しようとする課題】
【0003】
複数のアプリケーションに対応する複数の画像を生成し、生成した各画像をクライアントへ配信するサーバについて、効率の観点からサーバの構成に改善の余地があると本発明者は考えた。
【0004】
本発明は本発明者の上記着想に基づいてなされたものであり、1つの目的は、複数のアプリケーションに対応する複数の画像を生成する処理、または、生成した各画像をクライアントへ配信する処理を効率化する技術を提供することにある。
【課題を解決するための手段】
【0005】
上記課題を解決するために、本発明のある態様のデータ処理システムは、並列して実行される複数のアプリケーションに対応する複数のデータの生成処理を時分割で実行する1つのGPUと、GPUが第1のアプリケーションに対応するデータであって、後続の処理部に渡す1単位のデータの生成処理を完了した場合に、第1のアプリケーションとは異なる第2のアプリケーションに対応するデータの生成処理への切替を指示する指示部と、を備える。
【0006】
本発明の別の態様は、データ処理方法である。この方法は、1つのGPUと、指示部とを備えるデータ処理システムが実行する方法であって、GPUが、並列して実行される複数のアプリケーションに対応する複数のデータの生成処理を時分割で実行するステップと、指示部が、GPUが第1のアプリケーションに対応するデータであって、後続の処理部に渡す1単位のデータの生成処理を完了した場合に、第1のアプリケーションとは異なる第2のアプリケーションに対応する画像の生成処理への切替を指示するステップと、を備える。
【0007】
なお、以上の構成要素の任意の組合せ、本発明の表現を装置、プログラム、プログラムを格納した記録媒体などの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【0008】
本発明によれば、複数のアプリケーションに対応する複数の画像を生成する処理、または、生成した各画像をクライアントへ配信する処理を効率化することができる。
【図面の簡単な説明】
【0009】
【
図1】複数のアプリケーションを実行する方法を示す図である。
【
図2】複数アプリケーションが1つのGPUを共有する例を示す図である。
【
図3】複数アプリケーションが1つのGPUを共有する例を示す図である。
【
図4】圧縮符号化の動作タイミングと必要性能との関係を示す図である。
【
図5】実施例のデータ処理システムの機能ブロックを示すブロック図である。
【
図6】データ処理システムにおける複数アプリケーションの並列処理を模式的に示す図である。
【
図7】1つのアプリケーションの処理におけるCPUとGPUとのハンドシェイクフローを示す図である。
【
図8】1つのアプリケーションの処理におけるフレームバッファの切替タイミングを示す図である。
【
図9】GPUを時分割で共有する例を示す図である。
【
図10】GPUを時分割で共有する例を示す図である。
【
図11】GPUを時分割で共有する例を示す図である。
【
図12】複数のアプリケーションを並列処理する場合の圧縮符号化器の動作を示す図である。
【
図13】
図1のAシステムにおいて、CPUとGPUを時分割で割り当てる例を示す図である。
【
図14】
図1のAシステムにおいて、CPUとGPUを時分割で割り当てる例を示す図である。
【
図15】変形例のデータ処理システムにおける複数アプリケーションの並列処理を模式的に示す図である。
【
図16】変形例のデータ処理システムにおける複数アプリケーションの並列処理を模式的に示す図である。
【発明を実施するための形態】
【0010】
<背景>
図1は、複数のアプリケーションを実行する方法を示す。4K解像度(3840×2160)で60fps(frames per second)までのゲームアプリケーション(以下「ゲームApp」とも呼ぶ。)を処理できる比較的高性能なCPU(Central Processing Unit)およびGPU(Graphics Processing Unit)を搭載したシステムAと、FHD解像度(1920×1080)で60fpsまでのゲームAppを処理できるシステムBがあるとする。システムAは、システムBの約4倍の性能を有する。システムAは、システムBに対する上位互換性を有することとする。
【0011】
ここでFHD解像度60fpsクオリティのゲームAppを複数同時に実行するニーズがあるとき、第1の方法として、
図1の上段に示すように、システムBを複数設け、複数のシステムBを同時使用することが考えられる。また、第2の方法として、
図1の下段に示すように、1つのシステムA上で、複数の上記ゲームAppを並列処理(例えば4並列処理)することが考えられる。本実施例は、第2の方法に関するものであり、システムの物理的な設置数の削減や、1システムあたりの稼働率向上を実現させる技術を提案する。
【0012】
本実施例では、複数のアプリケーションの並列処理、すなわちマルチコンテキストの並列処理と、処理遅延削減と、圧縮符号化部におけるピーク性能削減とを、同時に両立させるデータ処理システムを提案する。まず、本実施例の技術思想について概説する。
【0013】
<実施例の技術思想1>
実施例の技術思想1として、クラウド上に設けられたサーバ(「クラウドサーバ」とも呼ぶ。)の1つのGPUにより複数のゲームAppを効率よく処理する方法を説明する。
【0014】
(1)課題:
1つのCPUにおいて複数アプリケーションを実行する方法は一般化している。例えば、CPUの演算器を空間方向で分割(「空間分割」とも呼ぶ。)して複数アプリケーションを並列実行することができる。または、CPUの演算器を時間方向で分割(「時分割」とも呼ぶ。)して複数アプリケーションを並列実行することができる。演算器を空間分割するとは、複数のCPU、または1つのCPUの複数スレッドに対して、各アプリケーションを割り当てることである。演算器を時分割するとは、1つのCPUを時分割で複数アプリケーションが共有することである。
【0015】
ここで、1つのGPUにおいて複数アプリケーションの処理を実行する場合にも、演算器を空間分割または時分割することが考えられるが、そこにはGPU特有の課題が存在する。
図2と
図3は、複数アプリケーションが1つのGPUを共有する例を示す。
図2Aと
図3Aは、GPUを時分割により共有する例を示し、
図2Bと
図3Bは、GPUを空間分割により共有する例を示している。各図のGPUにおける「CP」は、CPUから受け付けたコマンドを処理するコマンドプロセッサである。「SE」は、シェーダ処理を実行するシェーダエンジンである。「TU」は、テクスチャ処理を実行するテクスチャユニットである。「RB」は、レンダリング処理を実行するレンダリングバックエンドである。「L2」、「L3」は、レベル2キャッシュ、レベル3キャッシュである。
【0016】
(1-1)GPUを空間分割する場合の課題:
GPUは、シェーダ処理や汎用コンピューティング処理を実行する多数の演算器を並列に内包することが一般的であるところ、これらの演算器を物理的に分割し、各アプリケーションに各演算器を占有させる形で割り当てることが考えられる。例えば、1GPUにシェーダ演算器パイプラインが2048本ある場合、4つのアプリケーションに512本ずつ割り当てることが考えられる。しかし、テッセレーションやラスタライズ等を処理する機能ブロックは、1つのGPUでシリアライズされた処理の実行を前提に構築されていることが一般的である。そのため、GPUを空間分割するためには、事実上、これらの機能ブロックを1つのGPU内に並列に設ける必要があり、コストが増加してしまう。
【0017】
(1-2)GPUを時分割する場合の課題:
(1-2-1)コンテキストスイッチのオーバーヘッド
同じ演算器を複数アプリケーションがいれかわりたちかわりで利用するため、その遷移(「コンテキストスイッチ」とも呼ぶ。)のたびに、内部ステートの退避と読出しが必要になる。GPUは、ピクセル/バーテックスシェーダ処理や汎用コンピューティングを処理する演算器(「ユニファイドシェーダー」とも呼ばれる。)を並列に多数内包することが一般的であり、これらの演算器は元々プリエンプトに複数処理を時分割で並列実行することを考慮し、内部ステート保管場所の多重化などによるコンテキストスイッチのオーバーヘッド削減をする仕組みがある。しかし、ユニファイドシェーダー以外の固定機能は、時分割の考慮が限定されている。これらにおいても内部ステートを保持するレジスタの多重化などにより、遷移時間を短縮する方法も考えられるが、GPU全体がもつ内部データは膨大であり、回路規模の増加によるチップ面積効率悪化が無視できない。
【0018】
また、1つのアプリケーション内であれば、その内部でプリエンプトに実行されている複数処理間でコンテキスト情報やアクセスしているデータが共有されていても問題ない。しかし、複数のアプリケーションにおいては、これらは共有されてはならず、コンテキストスイッチのたびに、これらのデータの退避と読み出しも繰り返す必要がある。
【0019】
また、GPUの処理パイプラインはCPUに比べて非常に長く、コマンドバッファをフェッチし、コマンドに基づく処理が終了するまでの遅延が大きい。コンテキストスイッチにおいては、パイプラインへの供給を止めたあと、パイプライン内にある処理がすべて完了するまで待つ必要があるが、この時間が大きくなってしまう。
【0020】
また、CPUに比べてGPUが使用している内部ステート情報は非常に多く、コンテキストスイッチに要する複数種類のオーバーヘッドのいずれも無視できない。複数種類のオーバーヘッドは、内部ステートの退避や読出しに要する処理時間、これを回避する多重化に要する回路、パイプライン内部処理終了待ち時間を含む。
【0021】
(1-2-2)ゲームアプリケーション処理構成:
ゲームAppにおいては、ユニファイドシェーダーを用いた一連のプリエンプトな処理群を束ねて、全体としては、最終的にディスプレイ表示タイミングにあわせて描画結果をフレームバッファに生成するという一つの処理がシリアライズされて流れている。すなわち、複数の内部処理間には、同期待ちなどの手段で高度にシリアライズされている箇所があり、汎用コンピューティング(「GPGPU」とも呼ばれる。)のみのアプリケーションと異なり、時分割での実行が成り立たないゲームAppが存在しうる。仮にコンテキストスイッチのオーバーヘッドを無視できたとしても、ゲームAppの処理構造からみて対応できないことがある。
【0022】
(2)解決技術:
(2-1)1つのGPUの処理を時分割する粒度を、ゲームAppがフレームバッファに対する描画処理を終了したタイミングとすること。実施例のデータ処理システムにおけるGPUは、並列して実行される複数のアプリケーションに対応する複数のデータの生成処理を時分割で実行する。そして、実施例のデータ処理システムにおける指示部(後述の切換指示部44)は、GPUが第1のアプリケーションに対応するデータであって、後続の処理部に渡す1単位のデータの生成処理を完了した場合に、第1のアプリケーションとは異なる第2のアプリケーションに対応するデータの生成処理への切替を指示する。1単位のデータは、後続の処理部に渡す最終的な生成物であり、例えば、フレームバッファに格納する1フレーム(画像)であってもよい。
【0023】
実施例では、1つのGPUの処理を時分割する粒度を、フレームバッファをフリップ(flip)させるタイミングとする。通常、1つのゲームAppあたり2枚以上のフレームバッファを確保し描画対象と表示対象を切り替えながら使うが、その切替を「フリップ」と呼ぶ。
【0024】
GPUは、CPUなどが生成したコマンドバッファをフェッチして処理を進める。GPUは、あるゲームAppの1フレーム分の描画にかかわるコマンドをフェッチしたら後続のフェッチは停止させ、フリップの発生をもってGPU内部処理が終了したことも把握し、当該ゲームAppのコンテキストセーブを始める。フレームに同期しない非同期コンピュート処理が走っていたら、それも停止させ、同様にコンテキストセーブする。その後に、次に実行するゲームAppの保存済みコンテキストをロードし、そのゲームAppの実行を再開する。コンテキストにはGPU内部ステートやコマンドバッファ内容を含む。なお、描画と表示の処理がタイミング的に競合しないことが保証できる場合、フレームバッファは1つでもよいが、フレームバッファへのアクセス可能を通知する合図としてフリップ通知は行う。
【0025】
GPUにおいて、描画終了直後(すなわちフリップさせるとき)は、コンテキストスイッチで退避が必要な内部ステートや中間データが、描画処理の実行中に比べて減少する。描画処理の実行中は、on the flyで実行中の描画処理にかかわる小粒度の内部ステートや中間データが、並列演算器(シェーダーパイプラインなど)や固定機能(ラスタライザなど)内に大量に存在するためである。また、描画処理では、時分割が難しい同期待ちなどの手段で高度にシリアライズされている箇所もある。さらにまた、フリップ後には表示タイミングのブランキング期間が挿入される場合があり、その時にはGPU処理が不要な場合もある。したがって、フリップさせるタイミングでコンテキストスイッチを行うことが、オーバーヘッド削減と隠蔽において有利となる。
【0026】
(2-2)コンテキストスイッチを、表示タイミングのブランキング期間中に行うこと。
なお、クラウドゲーミングサーバにおいてはディスプレイ出力デバイスが接続されていない場合が多いが、圧縮符号化回路にフレームバッファを渡すタイミングを仮想的にブランキング期間と扱ってもよい。
【0027】
(2-3)1つのGPUは、並列に実行する各アプリケーションが必要とするGPU演算能力を合計した演算能力を少なくとも有するものとすること。
例えば、FHD(1980×1080)画像を60fpsで生成するゲームAppが、GPU演算能力として2TFLOPS(Tera Floating-point Operations Per Second)を必要とし、そのゲームAppを4本並列実行する場合、少なくとも8TFLOPSの演算能力を持つGPUを用いる。
【0028】
(2-4)時分割で並列実行する各アプリケーションが予定している処理フレームレートを合計したフレームレートでGPUを動作させること。
例えば、60fpsを生成するゲームAppを4本並列実行する場合、GPUのフレームレート、すなわちコンテキストスイッチは240Hzで実行する。
【0029】
(2-4-1)時分割で並列実行する対象のアプリケーションが、2-4の割当時間(time-slice)を超えてGPUを占有した場合、コンテキストスイッチを遅らせる。割当時間を超えてGPUを占有したアプリケーションに対する次回の時間割り当てはスキップし、または、当該アプリケーションに対する次回の割当時間をそれまでより減少させる。
【0030】
(2-4-2)時分割で並列実行する対象のアプリケーションによるGPU占有が、割当時間を超過する時間や率が大きい場合、各アプリケーションに対して十分な頻度でGPU割り当てができるように、並列実行するアプリケーション数を減らす。例えば、予め各アプリケーションの処理負荷の見通し(予測値)を事前に把握してもよい。もしくは、複数のアプリケーションにGPU占有時間を割り当てて実行開始後に、処理時間超過レベル(例えば描画フレームレート数)とユーザ入力に対する遅延の増加レベルを測定した上で、各アプリケーションに割り当てるGPU占有時間を見直してもよい。
【0031】
第1システムの稼働中に別システム(第2システム)に割り当て直すべきアプリケーション(「再配置アプリケーション」と呼ぶ。)が生じた場合、まず、第2システムにおいて再配置アプリケーションを起動し、第1システムからのコンテキストコピーを開始する。それらのセットアップが完了するまでは第1システムにおける再配置アプリケーションの処理も継続させる。そして、あるタイミングのコンテキストスイッチからは第1システムにおける再配置アプリケーションの処理を停止させる。
【0032】
(2-5)CPUは、時分割で並列実行する各アプリケーションが必要とする演算能力を合計した演算能力を少なくとも有し、GPUの描画フレームレートと同期して動作すること。
当該CPU性能は、動作周波数、CPUコア数、スレッド数等の組み合わせで実現されてもよい。例えば、クラウドサーバにおいて、1.6GHzで動作する1スレッドCPUを8個使用するゲームAppを4本並列実行するシステムを考える。このシステムでは、同一アーキテクチャで、かつ、3.2GHzで動作する2スレッドCPUを8個使用してもよい。また、並列実行対象の4本のゲームAppがそれぞれ100GFLOPSの演算能力を要求する場合、CPUは、少なくとも400GFLOPSの演算能力を有するものが使用されてもよい。
【0033】
(2-6)GPUのコマンドバッファをアプリケーションごとに設け、コンテキストスイッチのときにGPUが参照する対象を切り替えること。
(2-6-1)描画処理とは非同期のコンピュート処理用にさらに別のコマンドバッファを設けてもよい。
【0034】
(2-7)順次生成される各フレームバッファが、どのアプリケーションが生成したものであるか、どのタイミングに生成されたか、どのようなタイミングに表示すべきものであるかを示す情報をGPU後段の処理ステップに提供すること。GPU後段の処理ステップは、例えば、圧縮符号化部、伸長化部(デコード部)、通信部、表示部を含む。
【0035】
<実施例の技術思想2>
実施例の技術思想2として、クラウドサーバにおいてフレームバッファに格納された複数のゲームAppの複数の画像を効率よく圧縮符号化し、クライアントへ転送する方法を説明する。
【0036】
(1)課題:
クラウドサーバで複数のゲームAppが実行され、複数のフレームバッファが同時に生成され、それらを同時に圧縮符号化のうえ、低遅延でクライアントへ送信する場合、一般的には、圧縮符号化器は、並列に同時に生成されるフレームバッファを処理するだけの並列度、処理能力が必要となる。例えば、1920×1080解像度の画像を60Hzで生成すべきゲームAppが4本並列に実行され、同時に4枚のフレームバッファが完成する場合、システムは、1920×1080解像度の画像を60Hzで圧縮符号化できる圧縮符号化器を4並列で備える必要がある。この結果、システムのコストが増大することがある。
【0037】
また、複数のゲームAppの複数の画像を複数のフレームバッファに一時に格納し、それらを低遅延で圧縮し、送出しようとすると、より高性能な圧縮符号化器が必要になってしまう(後述の
図4の右側を参照)。また、複数のゲームAppの複数の画像を複数のフレームバッファに一時に格納し、それらを低遅延で圧縮し、送出しようとすると、圧縮符号化部にデータを入出力するインターコネクト(バス)やメモリの帯域もより高性能なものが要求される。また、複数のゲームAppの複数の画像を複数のフレームバッファに一時に格納し、それらを低遅延で圧縮し、送出しようとすると、ピーク消費電力も大きくなってしまう。
【0038】
(2)解決技術:
1つの圧縮符号化器が、複数のストリームを効率よく処理できる仕組みをもったうえで、複数のゲームAppがフレームバッファを生成するタイミングをシリアライズ化(言い換えれば逐次化)することにより上記課題を解決する。具体的な構成を以下の2-1~2-6で説明する。
【0039】
(2-1)複数のゲームAppがフレームバッファに対する描画を終了させるタイミングをシリアライズ化すること。
例えば、並列実行されている複数のゲームAppにおいて、各ゲームAppのGPU処理開始時間をお互いにずらしておいてもよい。また、並列実行されている複数のゲームAppにおいて、フリップするタイミング、もしくは、垂直同期タイミングをお互いにずらしておいてもよい。クラウドゲーミングサーバにおいてはディスプレイ出力デバイスが接続されない場合が多いが、圧縮符号化回路にフレームバッファを渡すタイミングを仮想的に垂直同期タイミングと扱ってもよい。なお、特徴2の技術思想を実現するために、複数のゲームAppの並列実行は、複数個のGPUを使用して実現されてもよく、1つのGPUにおいて演算器を空間分割または時分割することにより実現されてもよい。
【0040】
図4は、圧縮符号化の動作タイミングと必要性能との関係を示す。ここでは、1980×1080解像度の画像を60fpsで生成する4つのゲームApp(ゲームAppA~ゲームAppD)を並行実行し、4つのゲームAppの画像がフレームバッファに格納されるとする。方式70では、4つのゲームAppの画像が同時にフレームバッファに格納される。方式70では、4ミリ秒以内に処理する必要があるピクセル数は1920×1080×4となる。一方、実施例の方式72では、4つのゲームAppの画像が互いに異なるタイミングでフレームバッファに格納される。そのため4ミリ秒以内に処理する必要があるピクセル数は1920×1080となる。したがって、実施例の方式72によると、低遅延での圧縮符号化を実現し、かつ、圧縮符号化器の必要性能を抑制することができる。
【0041】
(2-2)並列実行される複数のアプリケーションが予定している処理フレームレートを合計したフレームレートでフレームバッファを生成すること。言い換えれば、並列実行される複数のアプリケーションが予定しているフレームレートを合計したフレームレートで、複数のアプリケーションに対応する複数の画像を生成すること。
例えば、60fpsで画像を生成すべきゲームAppを4本並列実行する場合、フレームバッファが240Hzで生成されるよう構成される。
【0042】
また例えば、並列実行される複数のアプリケーションが、ゲームA、ゲームB、ゲームC、ゲームDの4つである場合、フレームバッファは、ゲームA、ゲームB、ゲームC、ゲームD、ゲームA、ゲームB、ゲームC、ゲームD、・・・の順で生成される。ただし、各アプリケーションの毎フレーム処理時間が可変である場合、フレームバッファの生成順序が入れ替わってもよい。その場合、各フレームバッファがどのアプリケーションにより生成されたものかを示す情報が記憶される。なお、各アプリケーションが生成するフレームバッファは、必ずしも共有された同じメモリ領域に置かれなくてもよく、圧縮符号化器が複数のメモリ領域を順次参照してもよい。
【0043】
(2-3)圧縮符号化器は、並列実行される複数のアプリケーションそれぞれのフレームレートを合計したフレームレートで圧縮符号化を行う性能を最低限持つこと。
例えば、1920×1080解像度の画像を60fps(60Hz)で生成するゲームAppが4並列で実行される場合、240fps(240Hz)で生成される1920×1080解像度の画像を処理可能な能力を持つ圧縮符号化器を使用する。
【0044】
(2-4)圧縮符号化器は、複数のゲームAppから出力された一連のフレームバッファを順次符号化し、その後、符号化データをゲーム毎に分割して出力すること。
この場合、圧縮符号化器は、どのフレームバッファがどのゲームのものであるかを把握可能な構成とすること。例えば、画像出力先のフレームバッファをゲームごとに設けてもよい。また、複数のゲームの画像が1つのフレームバッファに出力される場合、どのゲームの画像であるかを示すタグが画像データに付与されてもよい。また、ゲームごとに異なる送信機にデータを渡してもよい。
【0045】
(2-5)圧縮符号化器は、1つのゲームから出力された過去の画像フレームや圧縮符号化時の途中データを、他のゲームとは区別して保持しておき、上記1つのゲームから出力された新たな画像の圧縮符号化時に参照することで圧縮効率を上げること。
この場合も、圧縮符号化器は、どのフレームバッファがどのゲームのものであるかを把握可能な構成とする。
【0046】
例えば、ゲームAのフレーム画像A1、A2、ゲームBのフレーム画像B1、B2、ゲームCのフレーム画像C1、C2、ゲームDのフレーム画像D1、D2が、A1、B1、C1、D1、A2、B2、C2、D2の順に出力されるとする。この場合、圧縮符号化器は、B2の圧縮符号化において、A2を前方参照の対象とせず、予め記憶したB1のデータや、B1を圧縮符号化する際の途中データを参照する。
【0047】
(2-6)圧縮符号化器は、アプリケーションの画像の一部である部分画像単位で圧縮符号化を行い、順次、部分画像単位での符号化データを出力することで、低遅延処理すること。
【0048】
<実施例のシステムの詳細>
以下、上記の技術思想を具現化する構成の例を説明する。
図5は、実施例のデータ処理システムの機能ブロックを示すブロック図である。データ処理システム10は、アプリケーションを処理する単位となるシステムであり、1台のクラウドサーバは、1つ以上のデータ処理システム10を備える。データ処理システム10は、CPU12、GPU14、メモリ16、圧縮符号化器18(「ビデオエンコーダ」とも呼ばれる。)、ネットワークインタフェース20を備える。これらの各要素は、バス22を介して接続される。また、GPU14と圧縮符号化器18は、データ処理システム10に1つだけ配置される。
【0049】
本明細書のブロック図において、さまざまな処理を行う機能ブロックとして記載される各要素は、ハードウェア的には、回路ブロック、メモリ、その他のLSIで構成することができ、ソフトウェア的には、メモリにロードされたプログラムなどによって実現される。したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組合せによっていろいろな形で実現できることは当業者には理解されるところであり、いずれかに限定されるものではない。例えば、ブロック図においてCPU12内またはGPU14内の機能ブロックに対応するモジュールを含むコンピュータプログラムが、データ処理システム10のストレージにインストールされてもよい。CPU12およびGPU14は、そのコンピュータプログラムをメモリ16に読み出して実行することにより、各機能ブロックの機能を発揮してもよい。
【0050】
メモリ16は、CPU12、GPU14、圧縮符号化器18により参照または更新されるデータを記憶する。メモリ16は、コマンドバッファ30とフレームバッファ32を含む。コマンドバッファ30は、CPU12から出力されたGPU14に対するコマンド(描画の内容を指示するコマンド等)を記憶する。実施例では、コマンドバッファ30は、並列実行されるゲームAppごとに異なる複数のバッファを含む。ゲームAppごとの個々のコマンドバッファを「個別Appコマンドバッファ」とも呼ぶ。フレームバッファ32は、GPU14により生成された画像データを記憶する。実施例では、フレームバッファ32は、並列実行されるゲームAppごとに異なる複数のバッファを含む。ゲームAppごとの個々のフレームバッファを「個別Appフレームバッファ」とも呼ぶ。
【0051】
ここでは、描画指示、すなわち、GPU14における実行対象アプリケーションの切替と同期して実行されるデータ処理の指示が格納されるコマンドバッファを第1コマンドバッファと呼ぶ。コマンドバッファ30は、複数のゲームAppに対応する複数の第1コマンドバッファとは異なるコマンドバッファであって、GPU14における実行対象アプリケーションの切替とは非同期に実行されるデータ処理の指示が格納される第2コマンドバッファを含んでもよい。実行対象アプリケーションの切替とは非同期に実行されるデータ処理は、例えば、画像処理以外の汎用計算処理であってもよい。GPU14は、実行対象アプリケーションに関わらず、第2コマンドバッファからコマンドを読み出して汎用計算処理を実行してもよい。
【0052】
ネットワークインタフェース20は、所定の通信プロトコルにしたがってクライアント装置と通信する。実施例でのクライアント装置は、ゲームをプレイするユーザの情報処理装置(PC、スマートフォン、ゲーム機等)であり、データ処理システム10により生成されたゲームの画像を表示し、また、ゲームに対するユーザの操作を受け付ける。ネットワークインタフェース20は、クライアント装置から送信されたユーザの操作情報をCPU12に渡す。また、ネットワークインタフェース20は、圧縮符号化器18による圧縮符号化後の画像データをクライアント装置へ送信する。
【0053】
CPU12は、内容決定部40、描画指示部42、切換指示部44、計時部45を含む。GPU14は、コマンド読出部50、画像生成部52、コンテキスト保存部54、コンテキスト読出部56を含む。内容決定部40と画像生成部52は、並列実行される複数のゲームApp58のそれぞれに依存した処理を実行する。圧縮符号化器18は、画像読込部60と圧縮符号化部62を含む。
図5のCPU12、GPU14、圧縮符号化器18が備える機能ブロックのうち少なくとも一部は、コンピュータプログラムとして実装されてもよい。CPU12、GPU14、圧縮符号化器18は、コンピュータプログラムを実行することにより、各機能ブロックの機能を発揮してもよい。
【0054】
図6は、データ処理システム10における複数アプリケーションの並列処理を模式的に示す。CPU12は、複数のクライアント装置で実行中のゲームAppA、ゲームAppB、ゲームAppC、ゲームAppDに関するデータ処理を並列して実行する。GPU14は、CPU12からの指示に基づいて、並列して実行される複数のゲームAppに対応する複数の画像の生成処理を時分割で実行する。既述したように、GPU14は、並列して実行される複数のゲームAppのそれぞれが要求するGPUの演算能力を合計した演算能力を少なくとも有する。
【0055】
具体的には、CPU12の内容決定部40は、複数のクライアント装置から入力されたユーザの操作情報に基づいて、各クライアント装置で表示させるべき画像(例えば操作結果を示す画像)の内容を決定する。言い換えれば、内容決定部40は、ゲームAppA、ゲームAppB、ゲームAppC、ゲームAppDに対応する複数の画像の内容(画像のパターンや座標情報等)を決定する。
【0056】
CPU12の描画指示部42は、内容決定部40により決定された各ゲームAppの内容を描画させるためのコマンドをコマンドバッファ30(実施例では各ゲームAppに対応する個別Appコマンドバッファ)に格納する。
【0057】
GPU14のコマンド読出部50は、
図2のCPに対応する。コマンド読出部50は、並列実行される複数のゲームAppのうち或る時点で処理対象となる1つのゲームApp(例えばゲームAppAであり、ここでは「対象App」と呼ぶ。)に対応する画像の描画を指示するコマンドを対象Appに対応する個別Appコマンドバッファから読み出す。GPU14のコマンド読出部50は、CPU12の切換指示部44からアプリケーション切替指示(実施例ではコンテキストスイッチ指示)を受け付け、実行対象のアプリケーションが切り替わる場合、描画指示を読み出すコマンドバッファを、それまで実行対象であったアプリケーションに対応する個別Appコマンドバッファから、次に実行対象となるアプリケーションに対応する個別Appコマンドバッファに切り替える。
【0058】
GPU14の画像生成部52は、
図2のSE、TU、RBに対応する。画像生成部52は、並列して実行される複数のゲームAppに対応する複数の画像を生成し、それら複数の画像をフレームバッファ32に格納する。具体的には、画像生成部52は、コマンド読出部50により読み出されたコマンドにしたがって、対象Appの画像データを生成する。画像生成部52は、生成した対象Appの画像データを、対象Appに対応する個別Appフレームバッファに格納する。既述したように、画像生成部52は、並列実行される複数のゲームAppが予定しているフレームレートを合計したフレームレートで、複数のゲームAppに対応する複数の画像を生成する。
【0059】
GPU14は、フレームバッファ32に格納した画像について、以下の付加情報を後続の処理部(圧縮符号化器18、通信部、表示部等)に提供してもよい。付加情報は、(1)どのアプリケーションの画像であるかを示すデータ、言い換えれば、生成元のアプリケーションを示すデータを含んでもよい。また、付加情報は、(2)画像の生成タイミングを示すデータを含んでもよく、例えば、何番目の画像であるか、タイムスタンプ、時刻情報等を含んでもよい。また、付加情報は、(3)画像の表示タイミングを示すデータを含んでもよく、例えば、タイムスタンプや時刻情報等を含んでもよい。これにより、後続の処理部における画像処理において、優先度付けや処理のスキップの判断等が適切になされるよう支援できる。なお、GPU14は、付加情報を画像のメタデータとしてフレームバッファ32に格納してもよく、フレームバッファ32とは異なるメモリ領域を介して付加情報を後続の処理部に渡してもよい。
【0060】
図7は、1つのアプリケーションの処理におけるCPUとGPUとのハンドシェイクフローを示す。
図7に示すようにGPU14の画像生成部52は、画像生成処理が完了すると、描画終了通知の信号をCPU12へ送信する。実施例では、画像生成部52は、対象Appの1枚の画像(言い換えればフレーム)を生成し、その画像をフレームバッファ32へ格納することが終了すると、描画終了通知の信号をCPU12へ送信する。
【0061】
CPU12の切換指示部44は、GPU14が第1のアプリケーション(例えばゲームAppA)に対応する1フレーム形成に必要な全ての処理を完了した場合、第1のアプリケーションとは異なる第2のアプリケーション(例えばゲームAppB)に対応する画像の生成処理への切替を指示する。第1のアプリケーション(例えばゲームAppA)に対応する1フレーム形成に必要な全ての処理を完了した場合は、第1のアプリケーション(例えばゲームAppA)に対応する画像であり、フレームバッファに格納する1枚の画像(最終画像とも言える)の生成処理を完了した場合とも言える。具体的には、切換指示部44は、GPU14から描画終了通知を受け付けた場合、コンテキストスイッチ指示の信号をGPU14へ送信する。コンテキストスイッチ指示は、それまでの対象Appとは異なる新たな対象Appを指定する情報を含んでもよい。
【0062】
CPU12からコンテキストスイッチ指示を受け付けると、GPU14のコンテキスト保存部54は、それまでの対象Appのコンテキストデータをメモリ16または所定の退避用レジスタに格納する。既述したように、コンテキストデータは、それまでの対象Appの描画処理における内部ステート情報や中間データを含む。
【0063】
また、CPU12からコンテキストスイッチ指示を受け付けると、GPU14のコンテキスト読出部56は、コンテキストスイッチ指示により指定される新たな対象Appのコンテキストデータをメモリ16または所定の退避用レジスタから取得し、取得したコンテキストデータをGPU14の描画処理用レジスタに設定する。コンテキストスイッチが完了すると、GPU14のコマンド読出部50は、新たな対象Appに対応する画像の描画を指示するコマンドを新たな対象Appに対応する個別Appコマンドバッファから読み出し、新たな対象Appに対応する画像の生成処理に移行する。
【0064】
CPU12の計時部45は、並列実行される複数のゲームAppのそれぞれが、GPU14を占有した時間を計測する。言い換えれば、計時部45は、複数のゲームAppそれぞれの画像生成処理に要した時間を計測する。
【0065】
圧縮符号化器18の画像読込部60は、CPU12から後述のフリップ指示信号を受け付けたことを契機として、フレームバッファ32から(実施例では複数の個別Appフレームバッファから順次に)画像データを読み込む。圧縮符号化部62は、画像読込部60により読み込まれた画像データを所定のアルゴリズムにしたがって圧縮符号化する。圧縮符号化部62は、ある画像データの圧縮符号化が完了すると、圧縮符号化後の画像データをネットワークインタフェース20に渡して、クライアント装置へ送信させる。
【0066】
実施例のCPU12の切換指示部44は、GPU14から描画終了通知を受け付けたことを契機として、フリップ指示信号を圧縮符号化器18へ送信し、それとともにコンテキストスイッチ指示をGPU14へ送信する。フリップ指示信号は、複数のフレームバッファ32間において、画像データの書き出し対象と、画像データの参照対象(圧縮符号化のための読み出し対象)とを切り替えることを指示する信号である。言い換えれば、フリップ指示信号は、フレームバッファ32に格納された画像の圧縮符号化を圧縮符号化器18に指示する信号である。フリップ指示信号は、圧縮符号化の対象となる画像が格納されたフレームバッファ32の領域(実施例では特定の個別Appフレームバッファ)を指定する情報を含んでもよい。
【0067】
図8は、1つのアプリケーションの処理におけるフレームバッファの切替タイミングを示す。同図は、ダブルバッファ(ここではバッファa、バッファbと呼ぶ)の例を示している。GPU14が、バッファaに画像を書き込む間、圧縮符号化器18は、バッファbに格納済の画像を読み出して圧縮符号化する。また、GPU14が、バッファbに画像を書き込む間、圧縮符号化器18は、バッファaに格納済の画像を読み出して圧縮符号化する。この切替は、フリップ指示信号を契機として実行される。
【0068】
データ処理システム10では、CPU12は、並列実行対象の複数のアプリケーションについて、GPU14における各アプリケーションの描画処理をキックするタイミングを、各アプリケーションに対して所定のGPU割当時間を確保する形でずらす。この結果、GPU14の画像生成部52は、並列実行対象の複数のアプリケーションに対応する複数の画像をアプリケーションごとに異なるタイミングで生成し、各アプリケーションに対応する個別Appフレームバッファに格納する。
【0069】
また、データ処理システム10では、圧縮符号化器18は、CPU12から送信されたフリップ指示信号に基づき、複数のアプリケーションに対応する複数の画像を、アプリケーションごとに異なるタイミングで各アプリケーションに対応する個別Appフレームバッファから読み出す。これにより、描画から圧縮後データの送信までの処理時間を短縮し、言い換えれば遅延を低減することができる。
【0070】
さらにまた、データ処理システム10では、圧縮符号化器18は、複数のアプリケーションに対応する複数の画像を、アプリケーションごとに異なるタイミングでフレームバッファ32から読み出し、各アプリケーションに対応する画像の符号化を逐次処理として実行する。これにより、圧縮符号化器18に必要な処理能力を削減することができる。
【0071】
図9は、GPU14を時分割で共有する例を示す。
図9Aは、4つのシステムが並行して動作し、各システムがゲームAppA、ゲームAppB、ゲームAppC、ゲームAppDの画像を生成(または表示)する。
図9Bは、単一のシステムにおいて、ゲームAppA、ゲームAppB、ゲームAppC、ゲームAppDを時分割で並列処理する。
図9Bのシステムは、
図9Aの1つのシステムの4倍の性能を有する。
図9Bのシステムにおける各ゲームAppの処理時間は、
図9Aの1つのシステムと比較すると1/4(すなわち1/240秒)となる。
【0072】
図10も、GPU14を時分割で共有する例を示す。
図10Aは、理想的なケースを示しており、ゲームAppA~ゲームAppDそれぞれのGPU占有時間(画像生成時間とコンテキストスイッチ時間の合計)が1/240秒に収まっている。一方、
図10Bでは、ゲームAppBのGPU占有時間が1/240秒を超過している。
【0073】
図10Bに示す状況の場合、実施例のデータ処理システム10は、ゲームAppBに対する次回のGPU割り当てをスキップする。すなわち、データ処理システム10は、或るアプリケーションに対応する1枚の画像の生成処理に要したGPU占有時間が所定の割当時間を超過した場合、当該アプリケーションに対応する1枚の画像の次回の生成処理に対するGPU割り当てをスキップする。
【0074】
例えば、CPU12の計時部45は、特定のゲームAppの描画をGPU14に指示してから、GPU14から描画終了通知を受け付けるまでの時間、または、次のゲームAppの描画をGPU14に指示するまでの時間を、上記特定のゲームAppによるGPU占有時間として計測する。CPU12の描画指示部42は、上記特定のゲームAppによるGPU占有時間が所定時間(
図10の例では1/240秒)を超過した場合、上記特定のゲームAppの描画指示を1回スキップする(次回分をスキップする)。
【0075】
変形例として、データ処理システム10は、或るアプリケーションに対応する1枚の画像の生成処理に要したGPU占有時間が所定の割当時間を超過した場合、当該アプリケーションに対応する1枚の画像の次回の生成処理に対する次回のGPU割当時間を短くしてもよい。例えば、CPU12の描画指示部42は、計時部45により計測された特定のゲームAppによるGPU占有時間が所定時間(
図10の例では1/240秒)を超過した場合、上記特定のゲームAppに次回割り当てるGPU占有時間をそれまでより短くしてもよい。また、上記特定のゲームAppに次回割り当てるGPU占有時間を、並列実行するApp数と各Appのフレームレートにより定まる通常の割当時間(
図10の例では1/240秒)より短くしてもよい。また、上記特定のゲームAppに次回割り当てるGPU占有時間を、他のゲームAppに割り当てるGPU占有時間より短くしてもよい。
【0076】
なお、GPU14を長時間占有したゲームAppに対して、次回のGPU割り当てをスキップする処理、または、次回のGPU割当時間を短縮する処理は、GPU14が自律的に実行してもよい。この場合、CPU12に代わってGPU14が、各ゲームAppのGPU占有時間を計測する計時部45を備えてもよい。
【0077】
図11も、GPU14を時分割で共有する例を示す。CPU12は、App割当部(不図示)をさらに備えてもよい。CPU12の計時部45は、GPU14を時分割で共有する複数のゲームAppそれぞれのGPU占有時間を計測する。App割当部は、GPU14を時分割で共有する複数のゲームAppのうち所定数以上のゲームAppのGPU占有時間が所定時間(例えば1/240秒)を超過する場合、GPU14を共有するゲームApp数(言い換えればデータ処理システム10で並列処理するゲームApp数)を減少させてもよい。
【0078】
図11では、ゲームAppAのGPU占有時間と、ゲームAppBのGPU占有時間とが所定時間(例えば1/240秒)を超過しているため、ゲームAppCとゲームAppDとをGPU14を共有するゲームAppから除外した例を示している。すなわち、
図11に示すように、4並列でゲームAppを実行する場合に、GPU占有時間が所定時間を超過したゲームApp数が2個に達すると、並列実行するゲームApp数を2に減少させてもよい。並列実行するゲームApp数を減少させる閾値としての、GPU占有時間が所定時間を超過したゲームApp数と、その閾値を超過した場合に減少させるゲームApp数は、データ処理システム10を用いた実験により決定されてもよい。
【0079】
なお、CPU12のApp割当部は、自システムで並列実行するゲームApp数を減少させる場合、他のデータ処理システム10のApp割当部と連携して、自システムで並列実行する少なくとも1つのゲームAppの処理を他のデータ処理システム10に割り当て直してもよい。例えば、CPU12のApp割当部は、自システムで並列実行する複数のアプリケーションのうち所定数以上のアプリケーションのGPU占有時間が所定の割当時間(例えば1/240秒)を超過する場合、複数のアプリケーションのうち少なくとも1つのアプリケーションを別のデータ処理システムに割り当て直してもよい。
【0080】
具体的には、データ処理システム10では、ミクロな時間、すなわち1/240秒等の微小時間の単位において或るアプリケーションの処理時間(GPU占有時間)が超過した場合、上記アプリケーションに対する次回のGPU割当をスキップする(
図10のSkipping App B Process)。一方、データ処理システム10では、マクロな時間、すなわち10秒等の十分に長い時間単位において、該当時間内の割当結果の統計を取り、許容できない超過(例えば予め定められた時間や回数の超過)が発生した場合は、並列実行する複数のアプリケーションのうち一部のアプリケーションを、別のデータ処理システムに割り当て直す。なお、別のデータ処理システムに割り当て直す対象とするアプリケーションは、超過時間または超過回数が大きいものを優先的に選択してもよい。
【0081】
ここでは、再割当の対象となるアプリケーションを対象Appと呼び、対象Appをそれまで実行していたデータ処理システム10を第1システムと呼び、対象Appの新たな割当先となるデータ処理システム10を第2システムと呼ぶ。第1システムのCPU12のApp割当部は、第2システムのCPU12のApp割当部と連携して、以下の(1)~(4)の処理を実行してもよい。
【0082】
(1)第1システムのCPU12のApp割当部は、対象Appの識別情報を第2システムのCPU12のApp割当部へ通知する。第2システム側の処理部(CPU12、GPU14等)は、対象Appの識別情報をもとに、メモリ16から対象Appのプログラムをロードして、対象Appを起動させる。
(2)第1システムのCPU12のApp割当部は、第1システムに記憶された対象Appに関するコンテキストデータを第2システムに送信し、第2システムのCPU12のApp割当部は、そのコンテキストデータを処理部(CPU12、GPU14等)に設定する。
【0083】
(3)上記(1)の完了後、その後の或るタイミングにおいて第1システムで対象Appのコンテキストスイッチをするタイミングまで、第1システムと第2システムの両方で対象Appが動いている。第1システムのCPU12のApp割当部は、上記或るタイミングのコンテキストスイッチを契機に、第1システムでの対象Appの実行を停止させ、その旨を第2システムのCPU12のApp割当部へ通知する。第1システムのCPU12のApp割当部は、上記或るタイミングコンテキストスイッチで保存された、第1システムの対象Appのコンテキストデータを第2システムに送信し、第2システムのCPU12のApp割当部は、そのコンテキストデータを処理部(CPU12、GPU14等)に設定する。
【0084】
(4)第1システムでの対象Appの実行停止が通知され、対象Appのコンテキストデータの設定が完了すると、第2システムのCPU12のApp割当部は、第2システムの各処理部での対象Appの実行を開始させる。なお、第2システムにおける対象Appのコンテキスト設定および実行開始は、第1システムにおける対象Appの最終コンテキストスイッチから、処理割当時間の間隔(本例では1/60秒後)以内にて実行することが望ましい。
【0085】
上記(3)の或るタイミングは、処理割当時間の間隔以内で、第1システムのコンテキスト保存、第1システムから第2システムへのコンテキスト転送、第2システムにおけるコンテキスト設定が完了できることを見越したうえで選択してよい。例えば、第1システムと第2システムの間にある転送系が他処理で占有されているか否かなどを見計らったうえで或るタイミングを決めてもよい。
【0086】
これにより、第1システムにおける対象Appの最新のコンテキストを引き継いだ上で、第2システムにおいて、タイムラグなく、ユーザーには稼働システムの遷移が認識されないまま、対象Appの実行が再開される。
【0087】
第1システムから第2システムへのコンテキストコピーと設定は、前述の或るタイミングにいたるまでの間、繰り返し実行されていてもよい。例えば、コンテキストデータ量が大きく、1回の処理割当時間の間隔以内で全てのコンテキストの転送・設定・処理再開が間に合わない場合、複数回にわけて実行してもよい。また、処理割当時間の間隔以内で、第1システムのコンテキスト保存、第1システムから第2システムへのコンテキスト転送、第2システムにおけるコンテキスト設定が完了できる見込みであったが、実際には間に合わなかった場合に、第1システムによるアプリの実行は継続し、後にコンテキストコピーと設定を再度実行してもよい。
【0088】
また、データ処理システム10では、圧縮符号化器18が、複数のアプリケーションに対応する複数の画像を、アプリケーションごとに異なるタイミングでフレームバッファ32から読み出すよう構成される。実施例では、CPU12の描画指示部42が、並列実行するアプリケーションごとに異なるタイミングでコマンドバッファ30に描画を指示するコマンドを書き込む。これにより、GPU14は、並列実行するアプリケーションごとに異なるタイミングで画像を生成し、並列実行するアプリケーションごとに異なるタイミングで画像をフレームバッファ32(個別Appフレームバッファ)に書き込む。また、CPU12の切換指示部44は、並列実行するアプリケーションごとに異なるタイミングでフリップ指示を圧縮符号化器18へ通知する。
【0089】
図12は、複数のアプリケーションを並列処理する場合の圧縮符号化器18の動作を示す。同図は、圧縮符号化器18によるフレームバッファ32からの画像読み込み(Scan)と、読み込んだ画像の圧縮符号化(Enc)のタイミングを示すタイミングチャートを含む。
【0090】
実施例では、CPU12の切換指示部44は、ゲームAppごとに異なるタイミングでフリップ指示信号を圧縮符号化器18へ送信する。これにより、
図4(方式72)および
図12に示すように、圧縮符号化器18の画像読込部60は、複数のゲームAppに対応する複数の画像を、ゲームAppごとに異なるタイミングでフレームバッファ32(具体的には処理対象のゲームAppに対応する個別Appフレームバッファ)から読み出す。
【0091】
また、
図4(方式72)および
図12に示すように、圧縮符号化器18の圧縮符号化部62は、複数のゲームAppに対応する複数の画像を、ゲームAppごとに異なるタイミングで圧縮符号化する。圧縮符号化部62は、複数のゲームAppに対応する複数の画像を圧縮符号化する処理を逐次処理として実行する。また、既述したように、圧縮符号化部62は、並列実行される複数のゲームAppが予定しているフレームレートを合計したフレームレートで画像の符号化が可能な性能を有する。
【0092】
圧縮符号化器18の圧縮符号化部62は、並列実行される複数のゲームAppそれぞれの過去の画像を、ゲームAppごとに区別して所定の記憶領域に記憶させる。言い換えれば、圧縮符号化部62は、或るゲームAppに対応する過去の画像を、他のゲームAppに対応する画像とは区別して所定の記憶領域に記憶させる。圧縮符号化部62は、特定のゲームAppに対応する新たな画像を圧縮符号化する際、上記記憶領域に記憶された当該ゲームAppに対応する過去の画像を参照する。これにより、並列実行される複数のゲームAppそれぞれの画像の圧縮効率を高める。
【0093】
以下、CPUとGPUの割当の例を説明する。
図1のBシステムは、1.6GHz動作で1スレッド処理が可能なCPUを8個備える。一方、
図1のAシステムは、3.2GHz動作で2スレッド処理が可能なCPUを8個備える。そのため、AシステムはBシステムの約4倍のCPU性能を持つ。AシステムのCPUにおける2スレッド処理可能とは、CPUハードウェアがスレッド処理をサポートする機構を有し、1つのCPUが2つのアプリケーションを同時に実行可能であることを示す。
【0094】
図13と
図14は、
図1のAシステムにおいて、CPUとGPUを時分割で割り当てる例を示す。ここで実行される4つのアプリケーション(App A~App D)は、1.6GHz動作のCPU8個を利用できる前提で開発されている。各アプリケーションを、8個のCPUの各スレッドに割り当てて実行する。仮にAシステムのように、1つのCPUハードウェアとしてサポートするスレッド数が2であって、並列実行したいアプリケーション数が4の場合、1つのハードウェアスレッド内に、ソフトウェア制御のスレッドを2つ設けることで、4つのスレッドを並列実行する。
【0095】
ここでCPUのスレッド処理とは、ハードウェア制御かソフトウェア制御かを問わず、GPUに対する所定の割り当て時間(例えば1/240秒)よりもはるかに小さな粒度で、アプリケーション処理をCPU上で時分割で実行している状態である。実質的に、各アプリケーションは該当CPUを占有して動作している状態にすることができる、
【0096】
CPUの各スレッドで動作するアプリケーションは、CPU外部で起きた変化をリアルタイムで検出し必要な処置を行う必要がある。加えて、CPUの各スレッドで動作するアプリケーションは、Bシステムと同様のリアルタイム性で外部と連携するために、GPUに対する所定の割り当て時間単位や、各アプリケーションがGPUを占有した実状の時間に関わらず、CPU上で並列に動作を続ける。これにより、CPUの各スレッドで動作するアプリケーションは、GPU上で動作する各アプリケーション処理と遅延なく同期して動作することができる。
【0097】
図13と
図14に示すように、各アプリケーションのCPU割り当てにおいて、GPUに対する所定の割当時間にかかわらず、CPUを占有する割り当てをする。すなわち、データ処理システム10のCPU12は、GPU14における各アプリケーションに対する割当時間に関わらず、各アプリケーションが並列してCPU12の資源を占有する形で、複数のアプリケーションを並列実行する。これにより、CPU12上のアプリケーションは、GPU14を含めたCPU12外部との同期処理をリアルタイム性を維持して実行できる。
【0098】
また、
図1のAシステム、
図13、
図14で示すように、並列実行すべきアプリケーション数に対してCPU数が不足する場合、CPUは、ハードウェアまたはソフトウェア制御によるスレッドを用いて、並列実行すべき複数のアプリケーションを並列実行する。
【0099】
さらにまた、既述したように、GPUのコマンドバッファは、並列実行対象のアプリケーションごとに用意する。CPUは、並列実行対象の複数のアプリケーションに関するデータの処理の指示(例えば描画指示)を各アプリケーションに対応するコマンドバッファに格納する。GPUは、並列実行対象の複数のアプリケーションに関するデータの処理の指示(例えば描画指示)をコマンドバッファから読み出して、各アプリケーションに対応するデータ処理(例えば描画処理)を実行する。これにより、特定のアプリケーションの処理がGPUに割り当てられていない期間(特定のアプリケーションがGPUを占有していない期間)にも、CPU上の特定のアプリケーションは処理を継続でき、GPUに対する指示を随時特定のアプリケーションに対応するコマンドバッファに書き込むことができる。
【0100】
以上、本発明を実施例をもとに説明した。この実施例は例示であり、各構成要素あるいは各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
【0101】
第1変形例を説明する。データ処理システム10は、データ処理システム10において生成された画像を表示する表示装置と接続されてもよい。CPU12の切換指示部44は、表示装置の画像表示におけるブランキング期間(言い換えれば映像が非表示の期間)を示すデータを記憶してもよい。切換指示部44は、表示装置の画像表示におけるブランキング期間中に、コンテキストスイッチ指示をGPU14へ送信するとともに、フリップ指示信号を圧縮符号化器18へ送信してもよい。既述したように、ブランキング期間はGPU処理が不要であるため、コンテキスト切替処理が画像生成処理に与える影響(画像生成処理の遅延等)を抑制することができる。
【0102】
第2変形例を説明する。上記実施例では、GPU14のコンテキストスイッチについて言及したが、圧縮符号化器18においてもコンテキストスイッチが実行されてもよい。例えば、GPU14と同様に、圧縮符号化器18は、或るアプリケーションに対応する画像の圧縮符号化を開始する際にそのアプリケーションに関するコンテキスト(例えば圧縮符号化器18の内部ステートや前回の処理データ)をメモリ16から読み出して圧縮符号化器18に設定するコンテキスト読出部を備えてもよい。また、圧縮符号化器18は、或るアプリケーションに対応する画像の圧縮符号化が完了した際にそのアプリケーションに関するコンテキストを圧縮符号化器18からメモリ16に退避させるコンテキスト保存部を備えてもよい。
【0103】
第3変形例を説明する。本出願人の特許出願(特願2020-016144)で提案するように、データ処理システム10は、GPU14のコンテキストスイッチを実行する専用のハードウェア機能ブロックと、圧縮符号化器18のコンテキストスイッチを実行する専用のハードウェア機能ブロックの少なくとも一方を備えてもよい。このハードウェア機能ブロックは、CPU12、GPU14、メモリ16、圧縮符号化器18とは独立したブロックであり、以下「コンテキストスイッチエンジン」とも呼ぶ。
【0104】
コンテキストスイッチエンジンは、DMA(Direct Memory Access)によりメモリ16にアクセスする。コンテキストスイッチエンジンは、アプリケーションの切替タイミングを通知されるもしくは自ら検出すると、(1)メモリ16上に保持されている各アプリケーションのコンテキストを選択し、ソフトウェアを介さずに処理部(GPU14や圧縮符号化器18)へ転送して設定する。もしくは、(2)処理部(GPU14や圧縮符号化器18)に保持されているコンテキストを、ソフトウェアを介さずにメモリへ転送・退避させる。
【0105】
具体的には、GPU14のコンテキストスイッチを実行するコンテキストスイッチエンジンは、GPU14が第1のアプリケーションに対応する画像の生成処理を完了して、第2のアプリケーションに対応する画像の生成処理を開始する場合、CPU12の切換指示部44からの通知や、GPU14からの通知、またはビデオ信号が示すタイミング等をもとにそのことを検知してもよい。そしてコンテキストスイッチエンジンは、並列実行される複数のアプリケーションを管理するソフトウェアの処理を介さずに、第1のアプリケーションに関するコンテキストをGPU14からメモリ16に退避させるとともに、第2のアプリケーションに関するコンテキストをメモリ16からGPU14に設定してもよい。
【0106】
また、圧縮符号化器18のコンテキストスイッチを実行するコンテキストスイッチエンジンは、圧縮符号化器18が第1のアプリケーションに対応する画像の符号化を完了して、第2のアプリケーションに対応する画像の符号化を開始する場合、CPU12の切換指示部44からの通知や、圧縮符号化器18からの通知、またはビデオ信号が示すタイミング等をもとにそのことを検知してもよい。そしてコンテキストスイッチエンジンは、並列実行される複数のアプリケーションを管理するソフトウェアの処理を介さずに、第1のアプリケーションに関するコンテキストを圧縮符号化器18からメモリ16に退避させるとともに、第2のアプリケーションに関するコンテキストをメモリ16から圧縮符号化器18に設定してもよい。複数のアプリケーションを管理するソフトウェアは、典型的にはCPU12により実行されるソフトウェアであり、例えば、アプリケーションの実行順序や資源配分を管理するソフトウェアであってもよい。
【0107】
第4変形例を説明する。
図15と
図16は、変形例のデータ処理システム10における複数アプリケーションの並列処理を模式的に示す。データ処理システム10は、GPU14と圧縮符号化器18との間にディスプレイパイプライン64(言い換えればビデオパイプライン)を設けてもよい。
【0108】
ディスプレイパイプライン64は、画像供給元の他ブロック(例えばGPU14や不図示のビデオデコーダ等)から供給された画像であり、言い換えれば、並列処理対象の複数のアプリケーションの画像に対する、解像度変換、画質変換または多重化を時分割で実行してもよい。
【0109】
図16では、(1)GPU14は、2つのアプリケーション(App AとApp B)の描画処理を時分割で実行して、1つのアプリケーションあたり、2枚の最終画像を生成してフレームバッファ32に格納する。(2)ディスプレイパイプライン64は、アプリケーションごとに、2枚の最終画像をスケーリングおよび合成する。(3)圧縮符号化器18は、アプリケーションごとのスケーリングおよび合成後の画像を圧縮符号化する。
【0110】
第5変形例を説明する。上記実施例では、切換指示部44をCPU12に設けたが、切換指示部44は、CPU12以外の機能ブロック(例えばGPU14)に設けてもよい。
【0111】
実施例に記載した技術思想は、複数のゲームAppを並列実行する場合以外にも適用可能である。例えば、ゲームAppに代えて、またはゲームAppとともに他の種類のアプリケーション(例えばオフィスソフトや業務システムプログラム)を並列実行する場合にも適用可能である。
【0112】
上述した実施例および変形例の任意の組み合わせもまた本開示の実施の形態として有用である。組み合わせによって生じる新たな実施の形態は、組み合わされる実施例および変形例それぞれの効果をあわせもつ。また、請求項に記載の各構成要件が果たすべき機能は、実施例および変形例において示された各構成要素の単体もしくはそれらの連携によって実現されることも当業者には理解されるところである。
【0113】
実施例および変形例に記載の技術は、以下の態様によって特定されてもよい。
[項目1-1]
並列して実行される複数のアプリケーションに対応する複数のデータの生成処理を時分割で実行する1つのGPUと、
前記GPUが第1のアプリケーションに対応するデータであって、後続の処理部に渡す1単位のデータの生成処理を完了した場合に、前記第1のアプリケーションとは異なる第2のアプリケーションに対応するデータの生成処理への切替を指示する指示部と、
を備えることを特徴とするデータ処理システム。
このデータ処理システムによると、第1のアプリケーションに対応する1単位のデータの生成処理が完了した直後は、退避が必要な第1のアプリケーションに関するデータ量が減少するため、第2のアプリケーションに対応するデータの生成処理への切り替えを効率的に実現することができる。すなわち、複数のアプリケーションに対応する複数のデータの生成処理を1つのGPUが実行することで、ハードウェアリソース数の低減と、システムの稼働率向上を実現しつつ、複数のアプリケーションに対応する複数のデータの生成処理を効率的に実現することができる。
[項目1-2]
前記後続の処理部に渡す1単位のデータは、画像であることを特徴とする項目1-1に記載のデータ処理システム。
このデータ処理システムによると、第1のアプリケーションに対応する画像の生成処理が完了した直後は、退避が必要な第1のアプリケーションに関するデータ量が減少するため、第2のアプリケーションに対応する画像の生成処理への切り替えを効率的に実現することができる。
[項目1-3]
前記GPUにおいて前記第1のアプリケーションに対応する前記1単位のデータの生成処理が完了した場合に、前記第1のアプリケーションに関するコンテキストデータを所定の記憶領域に保存することを特徴とする項目1-1または1-2に記載のデータ処理システム。
このデータ処理システムによると、退避が必要な第1のアプリケーションに関するコンテキストデータの量を低減でき、効率的なコンテキストスイッチを実現できる。言い換えれば、GPUの描画完了を待ってからコンテキストスイッチを行うことで、GPUにおける処理の中断と入れ替えが容易になり、コンテキストスイッチの処理量が削減される。
[項目1-4]
前記GPUが前記第1のアプリケーションに対応する前記1単位のデータの生成処理を完了して、前記第2のアプリケーションに対応するデータの生成処理を開始する場合に、前記複数のアプリケーションを管理するソフトウェアの処理を介さずに、前記第1のアプリケーションに関するコンテキストデータを前記GPUから所定の記憶領域に退避させるとともに、前記第2のアプリケーションに関するコンテキストデータを前記記憶領域から前記GPUに設定する転送部をさらに備えることを特徴とする請求項1または2に記載のデータ処理システム。
このデータ処理システムによると、項目1-3と同様の効果に加え、一層迅速にコンテキストスイッチを完了できるという効果を奏する。
[項目1-5]
前記第1のアプリケーションに対応する前記1単位のデータの生成処理に要したGPU占有時間が所定の割当時間を超過した場合、前記第1のアプリケーションに対応する前記1単位のデータの次回の生成処理に対する割当時間を短くし、または、前記次回の生成処理に対するGPU割り当てをスキップすることを特徴とする項目1-1から1-4のいずれかに記載のデータ処理システム。
このデータ処理システムによると、第1のアプリケーションのGPU占有時間の超過が、GPUにおける他のアプリケーションのデータ処理に与える影響(遅延等)を低減でき、また、並列して実行されるアプリケーション間の公平性を維持することができる。すなわち、240分の1秒等のミクロなレベルでは、所定の割当時間ごとのコンテキストスイッチが実行されなくても、数秒から数分のマクロなレベルでは、所定の割当時間に応じた比率で各アプリケーションが実行される。この結果、データ処理システムにおける各アプリケーションの挙動を、
図1のBシステムのように個別のシステムでアプリケーションを実行した場合と、処理のリアルタイム性も含めて同じにすることができる。
[項目1-6]
前記複数のアプリケーションのうち所定数以上のアプリケーションのGPU占有時間が所定の割当時間を超過する場合、前記GPUにより前記1単位のデータが生成されるアプリケーションの数を減少させることを特徴とする項目1-1から1-5のいずれかに記載のデータ処理システム。
このデータ処理システムによると、アプリケーションのデータ生成処理に必要なGPU占有時間を確保することができる。
[項目1-7]
前記複数のアプリケーションのうち所定数以上のアプリケーションのGPU占有時間が所定の割当時間を超過する場合、前記複数のアプリケーションのうち少なくとも1つのアプリケーションを別のデータ処理システムに割り当てることを特徴とする項目1-1から1-5のいずれかに記載のデータ処理システム。
このデータ処理システムによると、アプリケーションのデータ生成処理に必要なGPU占有時間を確保することができる。
[項目1-8]
前記少なくとも1つのアプリケーションを前記別のデータ処理システムに割り当てる場合、(1)前記別のデータ処理システムにおいて当該アプリケーションを起動させ、(2)自システムに記憶された当該アプリケーションに関するコンテキストデータを前記別のデータ処理システムに送信し、(3)自システムにおける当該アプリケーションの或るタイミングでのコンテキストスイッチを契機に自システムにおける当該アプリケーションの処理を停止させる、ことを特徴とする項目1-7に記載のデータ処理システム。
このデータ処理システムによると、自システムで実行中のアプリケーションの処理を他システムに好適に引き継がせることができる。
[項目1-9]
符号化部をさらに備え、
前記GPUは、前記1単位のデータとして画像を生成し、生成した画像をフレームバッファに格納し、
前記指示部は、前記フレームバッファに格納された画像の符号化を前記符号化部に指示する際に、前記GPUに対して前記切替を指示することを特徴とする項目1-1から1-8のいずれかに記載のデータ処理システム。
このデータ処理システムによると、1つのアプリケーションに対応する1単位のデータの生成処理が完了したタイミングで、別のアプリケーションに対応するデータの生成処理への切り替えを指示することを確実に実現できる。
[項目1-10]
前記GPUは、前記フレームバッファに格納した画像について、(1)どのアプリケーションの画像であるかを示すデータ、(2)画像の生成タイミングを示すデータ、(3)画像の表示タイミングを示すデータのうち少なくとも1つを後続の処理部に提供することを特徴とする項目1-9に記載のデータ処理システム。
このデータ処理システムによると、後続の処理部(例えば圧縮符号化伸長部、通信部、表示部等)を適切に動作させることができる。
[項目1-11]
前記指示部は、画像表示におけるブランキング期間中に前記切替を指示することを特徴とする項目1-1から1-10のいずれかに記載のデータ処理システム。
このデータ処理システムによると、ブランキング期間はGPU処理が不要であるため、コンテキスト切替処理が画像生成処理に与える影響(画像生成処理の遅延等)を回避することができる。
[項目1-12]
前記GPUは、前記複数のアプリケーションのそれぞれが要求するGPUの演算能力を合計した演算能力を少なくとも有することを特徴とする項目1-1から1-11のいずれかに記載のデータ処理システム。
このデータ処理システムによると、複数のアプリケーションに対応する複数のデータの生成遅延を抑制できる。例えば、GPUが生成するデータが画像の場合には、複数のアプリケーションに対応する複数の画像の表示遅延を抑制することができる。
[項目1-13]
前記複数のアプリケーションを並列実行するCPUをさらに備え、
前記CPUは、前記複数のアプリケーションのそれぞれが要求するCPUの演算能力を合計した演算能力を少なくとも有することを特徴とする項目1-1から1-12のいずれかに記載のデータ処理システム。
このデータ処理システムによると、並列実行される複数のアプリケーションの処理遅延を抑制することができる。
[項目1-14]
前記CPUは、前記GPUにおける各アプリケーションに対する割当時間に関わらず、各アプリケーションが並列してCPUの資源を占有するように、前記複数のアプリケーションを並列実行することを特徴とする項目1-13に記載のデータ処理システム。
このデータ処理システムによると、CPUは、GPUを含む外部の機能ブロックとの同期処理をリアルタイム性を維持して実行することができる。
[項目1-15]
前記複数のアプリケーションに対応するコマンドバッファをさらに備え、
前記CPUは、前記複数のアプリケーションに関するデータ処理の指示を各アプリケーションに対応するコマンドバッファに格納し、
前記GPUは、前記複数のアプリケーションに関するデータ処理の指示を前記コマンドバッファから読み出すことを特徴とする項目1-14に記載のデータ処理システム。
このデータ処理システムによると、特定のアプリケーションの処理がGPUに割り当てられていない期間にも、CPU上の上記特定のアプリケーション処理を継続することができる。
[項目1-16]
前記複数のアプリケーションに対応する複数のコマンドバッファであって、前記複数のアプリケーションに関するデータ処理の指示が格納される複数のコマンドバッファをさらに備え、
前記GPUは、実行対象のアプリケーションを切り替える場合に、データ処理の指示を読み出すコマンドバッファを切り替えることを特徴とする項目1-1から1-12のいずれかに記載のデータ処理システム。
このデータ処理システムによると、データ処理の指示を出す機能ブロックにおける或るアプリケーションの処理と、GPUにおける当該アプリケーションの処理とを非同期に実行することができる。
[項目1-17]
前記複数のコマンドバッファとは異なるコマンドバッファであって、前記GPUにおける実行対象のアプリケーションの切替とは非同期に実行可能なデータ処理の指示が格納されるコマンドバッファをさらに備えることを特徴とする項目1-16に記載のデータ処理システム。
このデータ処理システムによると、GPUにおける実行対象のアプリケーションの切替とは非同期に、その切替とは非同期に実行可能なデータ処理(例えば、数値計算等の汎用コンピュート処理)をGPUに実行させることができる。
[項目1-18]
1つのGPUと、指示部とを備えるデータ処理システムが実行する方法であって、
前記GPUが、並列して実行される複数のアプリケーションに対応する複数のデータの生成処理を時分割で実行するステップと、
前記指示部が、前記GPUが第1のアプリケーションに対応するデータであって、後続の処理部に渡す1単位のデータの生成処理を完了した場合に、前記第1のアプリケーションとは異なる第2のアプリケーションに対応する画像の生成処理への切替を指示するステップと、
を備えることを特徴とするデータ処理方法。
このデータ処理方法によると、第1のアプリケーションに対応する1単位のデータの生成処理が完了した直後は、退避が必要な第1のアプリケーションに関するデータ量が減少するため、第2のアプリケーションに対応するデータの生成処理への切り替えを効率的に実現することができる。すなわち、複数のアプリケーションに対応する複数のデータの生成処理を1つのGPUが実行することで、ハードウェアリソース数の低減と、システムの稼働率向上を実現しつつ、複数のアプリケーションに対応する複数のデータの生成処理を効率的に実現することができる。
[項目1-19]
1つのGPUと、指示部とを備えるデータ処理システムに、
前記GPUが、並列して実行される複数のアプリケーションに対応する複数のデータの生成処理を時分割で実行するステップと、
前記指示部が、前記GPUが第1のアプリケーションに対応するデータであって、後続の処理部に渡す1単位のデータの生成処理を完了した場合に、前記第1のアプリケーションとは異なる第2のアプリケーションに対応する画像の生成処理への切替を指示するステップと、
を実行させるためのコンピュータプログラム。
このコンピュータプログラムによると、第1のアプリケーションに対応する1単位のデータの生成処理が完了した直後は、退避が必要な第1のアプリケーションに関するデータ量が減少するため、第2のアプリケーションに対応するデータの生成処理への切り替えを効率的に実現することができる。すなわち、複数のアプリケーションに対応する複数のデータの生成処理を1つのGPUが実行することで、ハードウェアリソース数の低減と、システムの稼働率向上を実現しつつ、複数のアプリケーションに対応する複数のデータの生成処理を効率的に実現することができる。
【0114】
[項目2-1]
並列して実行される複数のアプリケーションに対応する複数の画像を生成し、それら複数の画像をフレームバッファに格納する画像生成部と、
前記フレームバッファに格納された画像を読み出して符号化する1つの符号化部と、
を備え、
前記符号化部が、前記複数のアプリケーションに対応する複数の画像を、アプリケーションごとに異なるタイミングで前記フレームバッファから読み出すよう構成されたことを特徴とするデータ処理システム。
このデータ処理システムによると、低遅延での符号化を実現し、かつ、符号化器の必要性能を抑制することができる。
[項目2-2]
前記符号化部は、前記複数のアプリケーションに対応する複数の画像を符号化する処理を逐次処理として実行することを特徴とする項目2-1に記載のデータ処理システム。
このデータ処理システムによると、低遅延での符号化を実現し、かつ、符号化器の必要性能を抑制することができる。
[項目2-3]
前記画像生成部は、前記複数のアプリケーションに対応する複数の画像をアプリケーションごとに異なるタイミングで生成することを特徴とする項目2-1または2-2に記載のデータ処理システム。
このデータ処理システムによると、画像生成部(例えばGPU)の必要性能を低減することができる。
[項目2-4]
CPUをさらに備え、
前記CPUは、前記画像生成部に各アプリケーションの描画処理を開始させるタイミングを、各アプリケーションに所定時間を割り当てる形でずらし、
前記符号化部は、前記複数のアプリケーションに対応する複数の画像を、アプリケーションごとに異なるタイミングで前記フレームバッファから読み出すことを特徴とする項目2-1から2-3のいずれかに記載のデータ処理システム。
このデータ処理システムによると、画像生成部(例えばGPU)の必要性能を低減することができ、また、符号化部の必要性能を低減することができる。
[項目2-5]
CPUをさらに備え、
前記CPUは、前記画像生成部に各アプリケーションの描画処理を開始させるタイミングを、各アプリケーションに所定時間を割り当てる形でずらし、
前記符号化部は、前記複数のアプリケーションに対応する複数の画像を、アプリケーションごとに異なるタイミングで前記フレームバッファから読み出し、前記複数のアプリケーションに対応する複数の画像を符号化する処理を逐次処理として実行することを特徴とする項目2-1に記載のデータ処理システム。
このデータ処理システムによると、画像生成部(例えばGPU)の必要性能を低減することができ、また、符号化部の必要性能を低減することができる。
[項目2-6]
前記画像生成部は、前記複数のアプリケーションが予定しているフレームレートを合計したフレームレートで前記複数の画像を生成することを特徴とする項目2-1から2-5のいずれかに記載のデータ処理システム。
このデータ処理システムによると、複数のアプリケーションに対応する複数の画像の生成遅延を抑制でき、複数のアプリケーションに対応する複数の画像の表示遅延を抑制することができる。
[項目2-7]
前記符号化部は、前記複数のアプリケーションが予定しているフレームレートを合計したフレームレートで画像の符号化が可能な性能を有することを特徴とする項目2-1から2-6のいずれかに記載のデータ処理システム。
このデータ処理システムによると、複数のアプリケーションに対応する複数の画像の符号化遅延を抑制でき、複数のアプリケーションに対応する複数の画像の表示遅延を抑制することができる。
[項目2-8]
前記符号化部は、或るアプリケーションに対応する過去の画像を他のアプリケーションに対応する画像とは区別して記憶し、前記或るアプリケーションに対応する新たな画像を圧縮符号化する際に当該アプリケーションに対応する過去の画像を参照することを特徴とする項目2-1から2-7のいずれかに記載のデータ処理システム。
このデータ処理システムによると、異なるタイミングで実行する複数のアプリケーションの画像の圧縮効率を上げることができる。
[項目2-9]
前記符号化部が第1のアプリケーションに対応する画像の符号化を完了して、第2のアプリケーションに対応する画像の符号化を開始する場合に、前記複数のアプリケーションを管理するソフトウェアの処理を介さずに、前記第1のアプリケーションに関するコンテキストを前記符号化部から記憶部に退避させるとともに、前記第2のアプリケーションに関するコンテキストを前記記憶部から前記符号化部に設定する転送部をさらに備えることを特徴とする項目2-1から2-8のいずれかに記載のデータ処理システム。
このデータ処理システムによると、符号化部におけるコンテキストスイッチを高速に実行することができ、例えば、符号化部における処理の遅延を抑制することができる。
[項目2-10]
画像生成部と、1つの符号化部とを備えるデータ処理システムが実行する方法であって、
前記画像生成部が、並列して実行される複数のアプリケーションに対応する複数の画像を生成し、それら複数の画像をフレームバッファに格納するステップと、
前記符号化部が、前記複数のアプリケーションに対応する複数の画像を、アプリケーションごとに異なるタイミングで前記フレームバッファから読み出し、読み出した画像を符号化するステップと、
を備えることを特徴とするデータ処理方法。
このデータ処理方法によると、低遅延での符号化を実現し、かつ、符号化器の必要性能を抑制することができる。
[項目2-11]
画像生成部と、1つの符号化部とを備えるデータ処理システムに、
前記画像生成部が、並列して実行される複数のアプリケーションに対応する複数の画像を生成し、それら複数の画像をフレームバッファに格納するステップと、
前記符号化部が、前記複数のアプリケーションに対応する複数の画像を、アプリケーションごとに異なるタイミングで前記フレームバッファから読み出し、読み出した画像を符号化するステップと、
を実行させるためのコンピュータプログラム。
このコンピュータプログラムによると、低遅延での符号化を実現し、かつ、符号化器の必要性能を抑制することができる。
【産業上の利用可能性】
【0115】
この発明は、複数のアプリケーションを並列して実行するシステムに適用できる。
【符号の説明】
【0116】
10 データ処理システム、 12 CPU、 14 GPU、 18 圧縮符号化器、 32 フレームバッファ、 42 描画指示部、 44 切換指示部、 52 画像生成部、 54 コンテキスト保存部、 56 コンテキスト読出部、 62 圧縮符号化部。