1.実施の形態
本開示の一実施の形態としての車両10について説明する。
1.1 車両10
図1は、本実施の形態の図形表示処理装置100を備える車両10の一例を示す図である。
車両10は、図1に示すように、図形表示処理装置100、温度センサ20、回転数センサ30、速度センサ40及び燃料センサ50を含んで構成されている。
図形表示処理装置100については、後述する。温度センサ20、回転数センサ30、速度センサ40及び燃料センサ50は、それぞれ、エンジンの放熱用のラジエータにおいて用いられる冷却水の温度、車両10のエンジン又はモータの回転数、車両10が走行する速度及び車両10の燃料の残量を計測するためのセンサである。
車両10は、ガソリン車であるが、例えば、ハイブリッド車、電気自動車等であるとしてもよい。また、車両10は、乗用車であるが、貨物自動車、ダンプカー等であるとしてもよいし、消防車や救急車などの特殊自動車等であるとしてもよい。また、車両10は、電気機関車、ディーゼル機関車、電車、リニアモータカー等であるとしてもよい。また、車両ではなく、航空機や船舶等において、各種のセンサ及び図形表示処理装置100を備えている、としてもよい。
図形表示処理装置100は、即時表示を必要とする第1図形及び即時表示を必要としない第2図形を一のフレームに表示する。
図2は、車両10の運転席から、ハンドル60越しに見た図形表示処理装置100の表示部112の一例を示す図である。この図に示すように、表示部112には、一のフレームにおいて、図形の描画により、回転数計181、速度計182、温度計183、燃料計184及び地図185が表示されている。
速度計182は、速度センサ40から取得した車両10の速度を、目盛りと針を用いて、アナログの計器のように、表示する図形である。同様に、回転数計181、温度計183及び燃料計184も、それぞれ、回転数センサ30、温度センサ20及び燃料センサ50から取得した回転数、温度及び燃料の残量を表示する図形である。地図185は、車両10の運転者を案内するために表示される地図図形である。
回転数計181及び速度計182は、即時表示を必要とする第1図形である。このような図形の表示に対して、即時性や緊急性が要求され、表示の遅延は、許されない。なお、即時表示を必要とする第1図形は、回転数計181及び速度計182には限定されない。第1図形は、例えば、自動車や列車が備える機構、装置、機械等に関する異常、車両10の周辺の交通状況に関する異常などを警告又は警報として表示する図形であるとしてもよい。
他方、温度計183、燃料計184及び地図185は、即時表示を必要としない第2図形である。このような図形の表示に対して、即時性や緊急性は要求されない。なお、即時表示を必要としない第2図形は、温度計183、燃料計184及び地図185には限定されない。第2図形は、例えば、音楽再生装置を操作するための操作画面を表示する図形であるとしてもよい。音楽再生装置は、車両10に備えられている。
1.2 図形表示処理装置100の概要
ここでは、図形表示処理装置100の概要について説明する。
図形表示処理装置100は、後述する帯域制御部152を備える。帯域制御部152は、後述する第1プログラム11及び第2プログラム12にそれぞれ含まれる描画命令を後述するグラフィックスドライバ153に対して出力する。このとき、帯域制御部152は、即時表示の必要なプログラムからの描画命令を優先してグラフィックスドライバ153に対して出力する。即時表示の必要がないプログラムからの描画命令については、帯域制御部152は、即時表示の必要なプログラムの表示性能を保った上で、余った帯域で描画できるようにする。言い換えると、帯域制御部152は、即時表示の必要がない描画命令を待機させ、又は、描画命令の優先順位を調整して、グラフィックスドライバ153に対して描画命令を発行する。
グラフィックスドライバ153は、描画命令を解釈しCPU120で実行すべき処理を行う。次に、グラフィックスドライバ153は、解釈結果に従って、GPU122で行うべき描画処理に対応するGPU命令(描画処理命令又は描画処理コマンドともいう)を生成する。この際、グラフィックスドライバ153は、データを加工処理し、生成した加工処理データをGPU命令と関連付ける。次に、グラフィックスドライバ153は、生成したGPU命令をコマンド待ち行列バッファ15に格納する。
GPU122は、コマンド待ち行列バッファ15から受け取ったGPU命令に従って、描画処理を行い、描画結果としての描画イメージデータをフレームバッファ155に対して格納する。このとき、GPU命令と関連付けられた加工処理データがあれば、GPU122は、加工処理データを用いて、GPU命令に従って、描画処理を行う。
表示部127は、フレームバッファ155に格納された描画イメージデータをフレームレートに従うタイミングで取り出し、表示する。
フレームバッファ155の内容は、例えば、1秒当たり、60回程度(フレームレート)で更新される。しかし、CPUの処理負荷やGPUの処理負荷が高い場合においては、更新速度が低下する。このため、利用者が、表示部127に表示された画像から、最新の情報を読み取ることができないという事態も発生する。
1.3 図形表示処理装置100のハードウェア構成
図形表示処理装置100は、図3に示すように、集積回路110、入力部111、表示部112、クロックジェネレータ113及びナビゲーション部114から構成されている。集積回路110は、この図に示すように、CPU120、メモリ121、GPU122、バス123、第1IF124、第2IF125、第3IF126及び第4IF127から構成されている。
バス123は、CPU120、メモリ121、GPU122、第1IF124、第2IF125、第3IF126及び第4IF127を相互に接続する。バス123は、CPU120、メモリ121、GPU122、第1IF124、第2IF125、第3IF126及び第4IF127の間において、信号の伝達を中継する。
メモリ121は、半導体メモリから構成され、メモリ121の一部は、フラッシュメモリから構成されている。また、メモリ121は、ROM(Read Only Memory)及びRAM(Random Access Memory)を有する。メモリ121には、プログラム記憶部151、データ記憶部154及びフレームバッファ155が構成されている。
プログラム記憶部151には、CPU120の動作を規定する第1プログラム11、第2プログラム12及びその他のプログラム、CPU120の動作を規定する各プログラムが利用するデータ、GPU122の動作を規定するプログラム及びGPU122の動作を規定するプログラムが利用するデータを記憶している。
データ記憶部154には、コマンド待ち行列バッファ15及びその他のデータが保持される。
フレームバッファ155は、1つのフレームバッファメモリから構成されている。フレームバッファ155には、第1プログラム11及び第2プログラム12による1フレーム分の描画イメージデータが格納される。1フレーム分の描画イメージデータは、表示部127により表示される。
なお、フレームバッファ155は、第1フレームバッファメモリ及び第2フレームバッファメモリから構成されている、としてもよい。第1フレームバッファメモリには、第1プログラム11による1フレーム分の描画イメージデータが格納される。第2フレームバッファメモリには、第2プログラム12による1フレーム分の描画イメージデータが格納される。第1フレームバッファメモリに格納された描画イメージデータと、第2フレームバッファメモリに格納された描画イメージデータとは、フレームレートに従うタイミングで合成される。この結果、1フレーム分の描画イメージデータが生成される。表示部112は、合成により生成された1フレーム分の描画イメージデータを読み出して表示する、としてもよい。
第1IF124は、入力部111に接続され、入力部111との間で、信号の入出力を中継する。第2IF125は、表示部112に接続され、表示部112との間で、信号の入出力を中継する。第3IF126は、温度センサ20、回転数センサ30、速度センサ40及び燃料センサ50に接続され、温度センサ20、回転数センサ30、速度センサ40及び燃料センサ50との間で、信号の入出力を中継する。第4IF127は、ナビゲーション部114に接続され、ナビゲーション部114との間で、信号の入出力を中継する。
入力部111は、一例として、ハンドル60の正面に設けられた複数のボタン等から構成されている。車両10の運転者が各ボタンを操作すると、入力部111は、操作されたボタンに対応する操作信号を、第1IF124を介して、CPU120に対して出力する。
表示部112は、一例として、液晶ディスプレイ等から構成されている。表示部112は、CPU120により実行されるプログラムによる制御により、CPU120から送られる信号に基づいて文字列、画像等を表示する。また、表示部112は、フレームバッファ155に格納されている1フレーム分の描画イメージデータを表示する。
CPU120は、メモリ121に記憶されているプログラムを実行することにより、GPU122、入力部111、表示部112及びクロックジェネレータ113を制御する。こうして、CPU120は、図形表示処理装置100を機能させる。特に、CPU120は、メモリ121に記憶されるプログラムを実行することにより、GPU122に対して、メモリ121に記憶されたプログラム及びデータを指定する。次に、CPU120は、指定されたプログラム及びデータにより、GPU122における実行を制御する。
GPU122は、描画処理を行う。具体的には、各描画命令に基づいて生成されるGPU命令を実行し、メモリ121に格納されているデータを操作する。この結果、GPU122は、文字列、画像等を表す描画イメージデータを生成する。生成した描画イメージデータデータをフレームバッファ155に書き込む。
ナビゲーション部114は、地図データを保持している。ナビゲーション部114は、車両10の進行に合わせて、車両10が存在する位置の近辺の地図データ及びその他の地図データを出力する。
1.4 図形表示処理装置100の機能構成
ここでは、図形表示処理装置100の機能面から見た構成について、図面を参照しながら説明する。
図形表示処理装置100は、図4に示すように、プログラム記憶部151、帯域制御部152、グラフィックスドライバ153、データ記憶部154、GPU122、フレームバッファ155、表示部127、タイマ156及びタスクスケジューラ157から構成されている。
(1)プログラム記憶部151
プログラム記憶部151は、第1プログラム11、第2プログラム12及びその他のコンピュータプログラムを記憶している。
第1プログラム11は、即時表示を必要とする第1図形の描画を指示する第1描画命令を含むコンピュータプログラムである。言い換えると、第1プログラム11は、例えば、表示が遅延しないようにする必要のあるプログラムである。表示が遅延しないとは、フレーム表示単位時間内に、フレームバッファ155において、1フレーム分の描画イメージデータを完成させる必要がある、ということである。動画において、単位時間あたり、複数のフレームが表示される。フレーム表示単位時間は、この単位時間である。第1プログラム11は、CPU120上で動作する。なお、第1プログラム11に含まれる第1描画命令を、単に、描画命令又はCPU命令と呼ぶことがある。
一方、第2プログラム12は、即時表示を必要としない第2図形の描画を指示する第2描画命令を含むコンピュータプログラムである。第2プログラム12は、例えば、表示の遅延が許容されるプログラムである。表示の遅延が許容されるとは、例えば、フレーム表示単位時間内に、フレームバッファ155において、1フレーム分の描画イメージデータを完成させる必要がない、ということである。第2プログラム12は、CPU120上で動作する。なお、第2プログラム12に含まれる第2描画命令を、単に、描画命令又はCPU命令と呼ぶことがある。
第1プログラム11及び第2プログラム12に含まれる描画命令は、描画命令読出部により、読み出される。描画命令読出部は、メモリ121に記憶されているコンピュータプログラムである。CPU120がこのコンピュータプログラムを実行することにより、つまり、描画命令読出部により、第1プログラム11及び第2プログラム12から各描画命令が読み出される。次に、描画命令読出部により、読出された各描画命令は、帯域制御部152へ送られる。
(第1プログラム800)
図6は、第1プログラム11の内容の一例を示す図である。
第1プログラム11の内容の一例である第1プログラム800は、図6に一例として示すように、第1描画命令として、CPU命令801、802、803、・・・、807を含んでいる。各CPU命令は、CPU120において実行される。
一例として、CPU命令801は、表示シェーダプログラムの切り替えを指示する命令である。CPU命令802は、表示シェーダプログラムに渡す定数値を設定する命令である。CPU命令803は、パラメタデータバッファの切り替えを指示する命令である。CPU命令804は、データを指定する命令である。CPU命令805は、GPU122に対して処理を指示する命令である。CPU命令806は、GPU122に実行要求した命令のすべての処理完了をCPU120が待ち合わせるための命令である。CPU命令807は、フレームバッファの表示及び描画面を切り替える命令である。
CPU命令804及び805は、オブジェクトの頂点に対応する数だけ繰り返される。
CPU命令801からCPU命令806までは、描画するオブジェクトの数だけ繰り返される。例えば、速度計の目盛り、速度計の針及び速度計の針による影を表すオブジェクトを描画する場合、最初に、背景のオブジェクトを描画する。次に、速度計の針のオブジェクト(ここでは、描画しない)を生成する。次に、速度計の針による影のオブジェクトを生成して、生成した影のオブジェクトを描画する。最後に、生成した速度計の針のオブジェクトを描画する。速度計の針などのオブジェクトは、例えば、CPU命令804及び805の繰り返しにより、複数の三角形を組み合わせた曲面を作成して描画される。
第1プログラム800は、即時表示を必要とする第1図形であるオブジェクトの生成及び描画のためのコンピュータプログラムである。一方、即時表示を必要としない第2図形であるオブジェクトを生成及び描画するための第2プログラム12においては、第1プログラム800とは、描画対象となるオブジェクトが異なるだけである。例えば、第2プログラム12により、即時表示を必要としない第2図形である地図を描画する場合、背景のオブジェクト、道路のオブジェクト、信号機のオブジェクトなどを生成し、描画する。第2プログラム12においても、第1プログラム11と同様の処理が行われる。
(GPUプログラム850)
次に、第1プログラム800を実行することにより、生成されるGPUプログラムの説明をする。図7は、生成されるGPUプログラムの内容の一例を示す図である。
生成されるGPUプログラムの内容の一例に対応するGPUプログラム850は、図7に一例として示すように、GPU命令851、852、853、・・・、860を含んでいる。各GPU命令は、GPU122において実行される。
GPU命令851、853、855、856、858、859及び860は、GPUプログラムの実行を指示する命令である。GPU命令852、854、857は、メモリの内容をコピーするための命令である。
特に、GPU命令859は、CPU120からGPU122への処理依頼キューが空になり、かつ処理が終わって、GPU122が処理待ち状態になるのを待つための命令である。また、GPU命令860は、GPU122が次に描画の対象とするフレームバッファを指定する命令である。
GPU命令854及び855のペアは、オブジェクトの頂点に対応する数だけ存在する。また、GPU命令851から859までは、描画するオブジェクトの数だけ存在する。
なお、GPUプログラムに含まれる各GPU命令は、グラフィックスドライバ153により生成される。グラフィックスドライバ153は、各GPU命令を生成する都度、生成したGPU命令をデータ記憶部154のコマンド待ち行列バッファ15に書き込む。
(2)帯域制御部152
帯域制御部152は、メモリ121に記憶されているコンピュータプログラムにより構成されている。CPU120により、当該コンピュータプログラムがメモリ121から読み出され、当該コンピュータプログラムがCPU120により実行される。これにより、帯域制御部152は、機能する。
帯域制御部152は、例えば、第1プログラム11に含まれる第1描画命令及び第2プログラム12に含まれる第2描画命令を受け取る。帯域制御部152は、受け取った第1描画命令及び第2描画命令のいずれを優先してグラフィックスドライバ153に対して発行するかについての判断を行う。第2描画命令について、グラフィックスドライバ153に対して発行することを遅延、又はその第2描画命令の処理の優先順位を下げて実行させる。帯域制御部152の詳細については、後述する。
(3)グラフィックスドライバ153
グラフィックスドライバ153は、以下に示すようにして、発行された各描画命令を実行することにより、GPU命令を生成する。
グラフィックスドライバ153は、メモリ121に記憶されているコンピュータプログラムにより構成されている。CPU120により、当該コンピュータプログラムがメモリ121から読み出され、当該コンピュータプログラムがCPU120により実行される。これにより、グラフィックスドライバ153は、機能する。
グラフィックスドライバ153は、帯域制御部152から受け取った第1プログラム11に含まれる第1描画命令及び第2プログラム12に含まれる第2描画命令を解釈する。次に、グラフィックスドライバ153は、CPU120で実行すべき処理を行った上で、解釈された結果に従ってGPU122で行うべき描画処理に対応するGPU命令を生成する。GPU命令は、描画処理命令又は描画処理コマンドとも呼ばれる。次に、グラフィックスドライバ153は、生成したGPU命令を、生成した順序に従って、コマンド待ち行列バッファ15に書き込む。
このとき、CPU120で実行すべき処理とは、例えば、データをGPU122で処理できるように加工処理することである。データは、例えば、メモリ121に記憶されている。
以後、グラフィックスドライバ153が描画命令を解釈し、CPU120で実行すべき処理を行うことを、描画命令をCPU120で実行すると称する。
ここで、グラフィックスドライバ153がCPU命令からGPU命令を生成する手順の一例について、図6に示す第1プログラム800に含まれるCPU命令を用いて説明する。
(a)CPU命令801に対する処理
CPU命令801「glUseProgram()」には、GPU122で実行できるプログラムのうち、どのプログラムを用いるのかに関する情報が含まれている。
グラフィックスドライバ153がCPU命令801を実行する。これにより、グラフィックスドライバ153は、CPU命令801を、GPU122で呼び出すGPU命令851(GpuFuncCall)に変換する。GPU命令851を図7に示す。このとき、引数として、呼び出すべきプログラムを指定する。図7のGPU命令851においては、GPU122上で呼び出すべきプログラムの一例を "swichProgram"としている。
(b)CPU命令802に対する処理
グラフィックスドライバ153は、CPU命令802を実行する。これにより、グラフィックスドライバ153は、CPU命令802を、GPU命令852(Gpumemcpy)に変換する。GPU命令852(Gpumemcpy)は、表示シェーダプログラムに渡す定数値設定に関する情報を、GPU122で利用するメモリに転送する命令である。表示シェーダプログラムは、CPU120により利用するメモリに格納され、GPU122上で動作する。GPU命令852において指定される引数は、CPU命令802(glUniform())のプログラムに含まれている。
GPU命令852における引数の意味は、以下の通りである。
GPUMemoryAddress:転送先のGPUMemoryのアドレス
CPUMemoryAddress:転送元のCPUMemoryのアドレス
Size:転送するデータのサイズ
CPUtoGPU:CPUからGPUへの転送であること
(c)CPU命令803に対する処理
グラフィックスドライバ153は、CPU命令803を実行する。これにより、グラフィックスドライバ153は、CPU命令803を、GPU命令853(GpuFuncCall(bufferareaswitch))に変換する。GPU命令853(GpuFuncCall(bufferareaswitch))は、GPU122で利用するメモリの中のいずれかエリアのメモリへ切り換える処理を行う。
図7に示すように、GPU命令853の引数として、エリアを切り換える命令(bufferareaswitch)が指定される。
(d)CPU命令804に対する処理
グラフィックスドライバ153は、CPU命令804を実行する。これにより、グラフィックスドライバ153は、GPU122上で利用できるデータエリアの中のどのデータを使うかを算出し、その結果をCPU120で利用するメモリに格納する。次に、グラフィックスドライバ153は、CPU命令804を、格納したデータをGPU122で利用するメモリに転送するGPU命令854(Gpumemcpy)に変換する。
GPU命令854の引数の意味は、以下の通りである。
GPUMemoryAddress:転送先のGPUMemoryのアドレス
CPUMemoryAddress:転送元のCPUMemoryのアドレス
Size:転送するデータのサイズ
CPUtoGPU:CPUからGPUへの転送であること
なお、グラフィックスドライバ153は、次の命令で使用する頂点座標データそのものをCPU120で計算し、その結果をCPU120で利用するメモリに格納する。グラフィックスドライバ153は、格納したデータをGPU122で利用するメモリに転送するGPU命令(Gpumemcpy)に変換する場合もある。
(e)CPU命令805に対する処理
グラフィックスドライバ153は、CPU命令805を実行する。これにより、グラフィックスドライバ153は、CPU命令805をGPU命令855(GpuFuncCall(StartShader、多重実行))に変換する。GPU命令855は、1行上のCPU命令804(glVertexAttribPointer())の実行により、GPU122が利用するメモリに転送された頂点座標データを用いて、GPU122上で処理すべきプログラムを呼び出して実行する命令である。
GPU命令855の引数は以下の通りである。
StartShader:glUseProgram ()の引数で指定したGPU122のプログラム(Shaderプログラム)の開始を指示する。
多重実行:Shaderプログラムは、主として行列演算を行う。GPU122内には、行列演算を並列処理できる複数のプロセッサがある。ここでは、並列処理に用いるプロセッサの数を指定する
(f)CPU命令806に対する処理
グラフィックスドライバ153は、CPU命令806を実行する。これにより、CPU120からGPU122へのGPU命令の待ち行列バッファが空になり、かつ、GPU命令の処理が完了するのをCPU120が待つ。処理プログラムを切り替えるために、この待ち合わせが行われる。
グラフィックスドライバ153は、GPU命令の処理の完了を待つため、GPU122の処理がIdleになることを待つGPU命令859(GpuFuncCall(WaitGPUIdle))を発行し、CPU120は、GPU命令の処理が完了するのを待つ。
(g)CPU命令807に対する処理
グラフィックスドライバ153は、CPU命令807を実行する。これにより、グラフィックスドライバ153は、CPU命令807を、フレームバッファを切り換えるためのプログラムを呼び出すGPU命令860(GpuFuncCall(AttachFrameBuffer))に変換する。ここで、AttachFrameBufferには、次に描画に使用するフレームバッファのメモリアドレスなどを引数として指定する。また、その後、CPU120は、画面を表示するための第2IF125(例えば、DVIやHDMI(登録商標)など)に対して、表示するためのフレームバッファのアドレスを指定する処理を行う。
(4)コマンド待ち行列バッファ15
コマンド待ち行列バッファ15は、GPU命令及び加工処理データを関連付けて保持及び管理するメモリである。コマンド待ち行列バッファ15は、グラフィックスドライバ153からGPU命令が出力された時間的な順序どおりに、GPU122が描画処理コマンドを読み取り、実行できるようにする。
図8は、コマンド待ち行列バッファ15に記憶されているGPU命令の一例を示す図である。
この図に示すように、コマンド待ち行列バッファ15には、GPU命令501「1A」、GPU命令502「2A」、GPU命令503「1B」、GPU命令504「2B」、GPU命令505「1C」及びGPU命令506「2C」がこの順序で格納されている。
第1プログラム11及び第2プログラム12が並列して処理された場合、例えば、この図に示すように、第1プログラム11及び第2プログラム12を起源として、それぞれ、CPU命令に対応するGPU命令が交互にグラフィックスドライバ153を通してコマンド待ち行列バッファ15に格納される。GPU122は、コマンド待ち行列バッファ15に入れられた時間的な順番でGPU命令の実行を行う。
コマンド待ち行列バッファ15は、グラフィックスドライバ153から、第1プログラム11及び第2プログラム12を起源とするGPU命令を受け取る。第1プログラム11を起源とするGPU命令は、GPU命令501「1A」、GPU命令503「1B」及びGPU命令505「1C」である。第2プログラム12を起源とするGPU命令は、GPU命令502「2A」、GPU命令504「2B」及びGPU命令506「2C」である。
GPU122により、GPU命令501「1A」、GPU命令503「1B」及びGPU命令505「1C」の3つのGPU命令が完了すると、第1プログラム11について、1フレーム分の描画イメージデータの描画が完成する。
GPU122により、GPU命令502「2A」、GPU命令504「2B」及びGPU命令506「2C」の3つのGPU命令が完了すると、第2プログラム12について、1フレーム分の描画イメージデータの描画が完成する。
(5)GPU122
GPU122は、コマンド待ち行列バッファ15からGPU命令を受け取る。GPU122は、GPU命令に関連する加工処理データを用いてGPU命令に対応する描画処理を行う。その結果、GPU122は、描画イメージデータを生成する。次に、GPU122は、描画処理の結果である描画イメージデータをフレームバッファ155へ出力する。
例えば、GPU命令に関連する描画処理に対応するコンピュータプログラムがメモリ121に記憶されている。GPU122がGPU命令を受け取ると、関連する描画処理に対応する当該コンピュータプログラムがGPU122により実行される。
(6)フレームバッファ155
フレームバッファ155は、描画処理の結果である1フレーム分の描画イメージデータを保持するメモリである。
(7)表示部112
表示部112は、フレームバッファ155に保持された1フレーム分の描画イメージデータをフレームレートに基づくタイミングで読み取り、読み取った1フレーム分の描画イメージデータを表示する。
(8)タイマ156
タイマ156は、時間を管理し、現在の時刻を返す機能と、指定された時間の間、待機し、時間経過後に信号を返す機能とを持つ。
タイマ156は、判断部163から監視周期時間を受け取り、内部に監視周期時間をセットする。監視周期時間は、フレーム表示単位時間に等しい。この時点から、タイマ156は、単位時刻ごとに、内部にセットした監視周期時間から単位時間を差し引くことにより、監視周期時間の経過を監視する。ここで、単位時間は、例えば、0.01ミリ秒である。なお、単位時間は、上記のフレーム表示単位時間とは異なるものである。監視周期時間が「0」になると、監視周期期間の終了とみなして、監視周期期間の終了を判断部163に通知する。監視周期時間が終了すると、タイマ156は、判断部163から監視周期時間を受け取り、内部にセットする。こうして、タイマ156は、周期監視時間の経過の監視を繰り返す。
(9)タスクスケジューラ157
タスクスケジューラ157は、優先度設定部167により設定された優先度に基づき、複数のプログラムからの描画命令の実行の順序を決定し、決定した順序に従って、描画命令を実行させる。
1.5 帯域制御部152
帯域制御部152は、図5に示すように、取得部160、判断部163、予測部164、命令発行部165、発行制御部166、優先度設定部167から構成されている。取得部160は、命令受信部161及び命令監視部162を含む。
帯域制御部152は、即時表示を必要とする第1プログラム11の描画命令による図形の表示性能を良好に保つことができるように、第1プログラム11の描画命令による描画処理の状況を監視しながら、第2プログラム12の描画命令について、CPU処理の優先度を変更し、又は、描画命令の発行自体を遅延又は待機させる。描画処理の状況の監視は、例えば、フレームバッファ155の描画を更新するフレーム表示時間単位(フレームレートに対応する時間単位)で行う。
帯域制御部152は、第1プログラム11が1フレーム分の描画処理を一定のフレーム表示単位時間(通常、フレームレートの逆数=1/60秒を用いる)内で完了できるように、フレーム表示単位時間内における利用可能な総処理時間から、第1プログラムの描画命令に基づいてフレームバッファ155内に1フレーム分の描画イメージデータを完成するために必要なCPU処理時間及びGPU処理時間を差し引いた残りの処理時間内で、第2プログラム12が描画処理を行うように、フレーム表示単位時間の周期で監視を行う。
(1)命令監視部162
命令監視部162は、第1プログラム11から第1描画命令を受け取る。次に、命令監視部162は、判断部163に対して受け取った第1描画命令を出力し、第2プログラム12の第2描画命令との処理順序の調整を依頼する。次に、命令監視部162は、受け取った第1描画命令を、グラフィックスドライバ153に出力する。
(2)命令受信部161
命令受信部161は、第2プログラム12から第2描画命令を受け取る。次に、命令受信部161は、判断部163に対して受け取った第2描画命令を出力し、第1プログラム11の第1描画命令との処理順序の調整を依頼する。次に、命令受信部161は、受け取った第2描画命令を、命令発行部165に出力する。
(3)判断部163
判断部163は、以下に示すようにして、算出されたCPU又はGPU予測処理時間を用いて、第1描画命令及び第2描画命令のいずれを先に実行させるかを判断する。
判断部163は、図9に示す処理パラメタテーブル200及び図10に示す処理判定テーブル300を有する。
(処理パラメタテーブル200)
図9は、処理パラメタテーブル200のデータ構造の一例を示す図である。
処理パラメタテーブル200は、図9に示すように、一例として、CPUGPU累計処理時間210、GPU累計処理時間211、第1プログラムCPU予測処理時間212、第1プログラムGPU予測処理時間213、第1プログラム処理開始時刻214、第2プログラムCPU予測処理時間215、第2プログラムGPU予測処理時間216、第2プログラム処理開始時刻217、・・・、CPU予測残り処理時間218、GPU予測残り処理時間219及び現在時刻220を含む。
なお、図形表示処理装置100において動作する図形を表示するプログラムが増えた場合には、増えたプログラムについて、処理パラメタテーブル200は、プログラムCPU予測処理時間、プログラムGPU予測処理時間及びプログラム処理開始時刻を含むとしてもよい。
CPUGPU累計処理時間210は、監視の対象となるフレーム表示単位時間内において、監視開始以降、第2プログラム12による描画処理に使用したCPU処理時間及びGPU処理時間の合計値を格納する。
GPU累計処理時間211は、監視の対象となるフレーム表示単位時間内において、監視開始以降、第2プログラムによる描画処理に使用したGPU処理時間の合計値を格納する。
第1プログラムCPU予測処理時間212は、第1プログラム11から出力された第1描画命令をCPU120において処理するために必要と予測される時間を格納する。
第1プログラムGPU予測処理時間213は、第1プログラム11から出力された第1描画命令に基づくGPU命令をGPU122において処理するために必要と予測される時間を格納する。
第1プログラム処理開始時刻214は、第1プログラム11から出力された第1描画命令に基づく実行を開始した時刻を格納する。
第2プログラムCPU予測処理時間215は、第2プログラム12から出力された第2描画命令をCPU120において処理するために必要と予測される時間を格納する。
第2プログラムGPU予測処理時間216は、第2プログラム12から出力された第2描画命令に基づくGPU命令をGPU122において処理するために必要と予測される時間を格納する。
第2プログラム処理開始時刻217は、第2プログラム12から出力された第2描画命令に基づく実行を開始した時刻を格納する。なお、第2プログラム12の第2描画命令を遅延させるときには、第2プログラム処理開始時刻217は、処理を再開するまで「0」を格納する。
CPU予測残り処理時間218は、実行中の第1プログラム11の第1描画命令について、現在時刻から、第1描画命令の実行をCPU120が完了するまでに必要と予測される時間を格納する。
GPU予測残り処理時間219は、実行中の第1プログラム11の第1描画命令に基づくGPU命令について、現在時刻からGPU命令に対応するGPU描画処理をGPU122が完了するまでに必要と予測される時間を格納する。
現在時刻220は、タイマ156より取得した現在時刻を一時的に格納する。
(処理判定テーブル300)
図10は、処理判定テーブル300のデータ構造の一例を示す図である。
処理判定テーブル300は、図10に示すように、一例として、監視周期時間310、CPUGPU処理時間制限値311、GPU処理時間制限値312、CPUGPU処理優先時間313及びGPU処理優先時間314を含んでいる。
監視周期時間310には、帯域制御部152が監視する周期、言い換えると、フレーム表示単位時間が設定されている。例えば、監視周期時間310には、1/60秒などが設定される。1/60秒は、表示デバイスの描画周期に相当する。
CPUGPU処理時間制限値311には、監視周期時間310において、第2プログラム12が描画処理に使用可能なCPU処理時間及びGPU処理時間の合計値が設定されている。例えば、CPUGPU処理時間制限値311には、監視周期時間310に図形表示処理装置100に固有の一定割合をかけた値から、第1プログラム11が1フレームの描画処理に必要なCPU処理時間と、GPU処理時間と、若干の余裕時間とを差し引いた値が設定されている。
(CPUGPU処理時間制限値311)=(監視周期時間310×固有の一定割合)-(CPU処理時間)-(GPU処理時間)-(若干の余裕時間)
GPU処理時間制限値312には、監視周期時間310において、第2プログラム12による描画処理に使用可能なGPU処理時間の合計値が設定される。例えば、GPU処理時間制限値312には、監視周期時間310に図形表示処理装置100に固有の一定割合をかけた値から、第1プログラム11が1画面の描画処理に必要なGPU処理時間と、若干の余裕時間とを差し引いた値を設定する。
(GPU処理時間制限値312)=(監視周期時間310×固有の一定割合)-(GPU処理時間)-(若干の余裕時間)
なお、処理時間制限値を、制限値と呼ぶこともある。
CPUGPU処理優先時間313には、第1の閾値が設定されている。第1プログラム11から出力される1個の第1描画命令の実行に要するCPU処理時間とGPU処理時間の合計値と第1の閾値とが比較される。合計値がこの第1の閾値より小さい場合には、第2プログラム12の第2描画命令が実行待ちであったとしても、描画命令間の依存関係による第1プログラム11の描画処理の遅延を防ぐために、第2プログラム12の第2描画命令よりも、第1プログラム11の第1描画命令を先に実行させる。
GPU処理優先時間314には、第2の閾値が設定されている。第1プログラム11から出力される1個の第1描画命令の実行に要するGPU処理時間と第2の閾値とが比較される。GPU処理時間がこの第2の閾値より小さい場合には、第2プログラム12の第2描画命令が実行待ちであったとしても、描画命令間の依存関係による第1プログラム11の第1描画処理の遅延を防ぐために、第2プログラム12の第2描画命令よりも、第1プログラム11の第1描画命令を先に実行させる。
なお、各処理優先時間を、優先閾値と呼ぶこともある。
(判断部163の機能)
判断部163は、命令監視部162及び命令受信部161からそれぞれ描画命令を受け取る。描画命令を受け取ると、判断部163は、それぞれの描画命令を予測部164に出力する。次に、判断部163は、それぞれ描画命令のCPU120の処理に要する予測処理時間及びGPU122の処理に要する予測処理時間を予測部164に問い合わせる。
次に、判断部163は、予測部164から、それぞれの描画命令のCPU120の処理に要する予測処理時間及びGPU122の処理に要する予測処理時間を受け取る。判断部163は、命令監視部162からの描画命令のCPU120の処理に要する予測処理時間を第1プログラムCPU予測処理時間212として処理パラメタテーブル200に書き込む。また、判断部163は、命令監視部162からの描画命令のGPU122の処理に要する予測処理時間を第1プログラムGPU予測処理時間213として処理パラメタテーブル200に書き込む。また、判断部163は、命令受信部161からの描画命令のCPU120の処理に要する予測処理時間を第2プログラムCPU予測処理時間215として処理パラメタテーブル200に書き込む。また、判断部163は、命令受信部161からの描画命令のGPU122の処理に要する予測処理時間を第2プログラムGPU予測処理時間216として処理パラメタテーブル200に書き込む。
判断部163は、命令監視部162から描画命令を受け取った場合には、タイマ156に対して現在時刻を問い合わせる。次に、判断部163は、タイマ156から現在時刻を受け取る。次に、判断部163は、受け取った現在時刻を、現在時刻220として、処理パラメタテーブル200に書き込む。
判断部163は、それぞれの描画命令のそれぞれの予測処理時間により、処理判定テーブル300を用いて、第2プログラム12からの描画命令を実行すべきか、待たせるべきかを判断する。次に、判断部163は、判断結果を発行制御部166に通知する。
判断部163は、命令監視部162から第1プログラム11の第1描画命令を受け取った場合、受け取った第1描画命令のCPU120における描画処理が、第2プログラム12の第2描画命令のCPU120における描画処理より先に、処理されるように、優先度設定部167に指示する。
(4)予測部164
予測部164は、以下に示すようにして、第1描画命令又は第2描画命令の実行により、CPU120における処理に要すると予測されるCPU予測処理時間を算出する。また、予測部164は、第1描画命令又は第2描画命令に基づいて生成されるGPU命令の実行により、GPU122における描画処理に要すると予測されるGPU予測処理時間を算出する。
図11は、予測処理時間テーブル400のデータ構造の一例を示す図である。
予測部164は、一例として、図11に示す予測処理時間テーブル400を保持している。この図に示すように、予測処理時間テーブル400は、複数の予測処理時間情報を記録するための領域を備えている。各予測処理時間情報は、命令種別、CPU予測処理時間及びGPU予測処理時間を対応付けて含む。
命令種別は、第1プログラム11又は第2プログラムからの描画命令の種別を示す。予測部164は、判断部163から受け取った描画命令がどの命令種別と一致するかを判断する。
CPU予測処理時間は、対応する命令種別により示される描画命令がCPU120において実行された場合に、この描画命令の処理のために要すると予測される予測処理時間である。CPU予測処理時間の単位は、一例として、ミリ秒である。
GPU予測処理時間は、対応する命令種別により示される描画命令に対応するGPU命令がGPU122において実行された場合に、このGPU命令の処理のために要すると予測される予測処理時間である。GPU予測処理時間の単位は、一例として、ミリ秒である。
予測処理時間テーブル400は、図11に示すように、一例として、予測処理時間情報413を含む。予測処理時間情報413は、命令種別410「1A」、CPU予測処理時間411「1」及びGPU予測処理時間412「1」を含む。予測処理時間情報413は、「1A」により示される描画命令をCPU120上で実行したときに、「1ミリ秒」を要すると予測されることを示す。また、予測処理時間情報413は、「1A」により示される描画命令に基づくGPU命令をGPU122上で実行したときに、「1ミリ秒」を要すると予測されることを示す。
なお、描画命令のパラメタにより、処理時間の変動が大きい場合には、予測処理時間テーブル400の各予測処理時間情報は、CPU予測処理時間及びGPU予測処理時間に代えて、命令種別に対応して、CPU予測処理時間を算出する関数及びGPU予測処理時間を算出する関数を含むとしてもよい。各関数は、描画命令のパラメタを用いて、予測処理時間を算出するための関数である。
予測部164は、判断部163から描画命令を受け取る。描画命令を受け取ると、予測部164は、受け取った描画命令に一致する命令種別を予測処理時間テーブル400から検索する。次に、一致した命令種別に対応するCPU予測処理時間及びGPU予測処理時間を予測処理時間テーブル400から読み出す。このようにして、予測部164は、予測処理時間テーブル400を用いて、受け取った描画命令をCPU120において処理するために要すると予測されるCPU予測処理時間を算出する。また、予測部164は、予測処理時間テーブル400を用いて、受け取った描画命令をGPU122において処理するために要すると予測されるGPU予測処理時間を算出する。
次に、予測部164は、読み出したCPU予測処理時間及びGPU予測処理時間を判断部163に対して出力する。
(5)命令発行部165
命令発行部165は、以下に示すようにして、発行制御部166による制御に従って、描画命令を発行する。
命令発行部165は、命令受信部161より描画命令を受け取る。次に、命令発行部165は、受け取った描画命令を発行制御部166に対して出力し、発行制御部166に当該描画命令を発行すべきか待機すべきかを問い合わせる。
命令発行部165は、発行制御部166から描画命令を継続して発行することを示す継続指示を受け取る。継続指示を受け取ると、命令発行部165は、グラフィックスドライバ153に対して、当該描画命令を発行する。
(6)発行制御部166
発行制御部166は、以下に示すようにして、第1描画命令を先に実行させると判断する場合に、第1描画命令を発行させ、第2描画命令の発行を待機させるよう制御する。
図12は、タイミングパラメタテーブル500のデータ構造の一例を示す図である。
発行制御部166は、一例として、図12に示すタイミングパラメタテーブル500を保持している。
タイミングパラメタテーブル500は、この図に示すように、発行待ち要求フラグ510及び発行待ち命令存在フラグ511を含む。
発行待ち要求フラグ510は、セット状態とリセット状態の2つの値のいずれか一方を持つ。セット状態は、次に発行される描画命令を待機させることを示す。リセット状態は、次に発行される描画命令をすぐに発行させることを示す。
発行待ち要求フラグ510は、次に発行される描画命令を待機させるかすぐに発行させるかを判断するために用いられる。
発行待ち命令存在フラグ511は、セット状態とリセット状態の2つの値のいずれか一方を持つ。セット状態は、命令発行部165に、待機中の発行待ち命令が存在することを示す。リセット状態は、命令発行部165に、待機中の発行待ち命令が存在しないことを示す。
発行待ち命令存在フラグ511は、命令発行部165に、待機中の発行待ち命令が存在するかどうかを判断するために用いられる。
発行制御部166は、命令発行部165から、描画命令を発行すべきか、待機すべきかの問い合わせを受け取る。
発行制御部166は、命令発行部165からの問い合わせに対して、発行待ち要求フラグ510の値に基づき、描画命令を待機するか、又は、描画命令を継続して発行するかを通知する。なお、発行制御部166の動作の詳細については、後述する。
(7)優先度設定部167
優先度設定部167は、タスクスケジューラ157に対して、第1プログラム11からの第1描画命令の処理優先順位が第2プログラム12からの第2描画命令の処理優先順位より高くなるように、優先度を設定する。
1.6 図形表示処理装置100の動作
ここでは、図形表示処理装置100の動作について説明する。
(1)第2プログラム12の第2描画命令を受け取った場合の判断部163の動作
図13は、命令受信部161から描画命令を受け取った場合における、判断部163の動作の一例を示すフローチャート図である。
第2プログラム12の第2描画命令を命令受信部161から受け取った場合の判断部163の動作について、図13に示すフローチャート図を用いて説明する。
第2プログラム12の第2描画命令を受け取ると、判断部163は、予測部164に、受け取った第2描画命令を実行する際に、CPU120における処理に要すると予測される予測処理時間、及び、GPU122における処理に要すると予測される予測処理時間を計算させる。判断部163は、予測部164からそれぞれの予測処理時間を受け取る。次に、判断部163は、それぞれの予測処理時間を、第2プログラムCPU予測処理時間215及び第2プログラムGPU予測処理時間216として、処理パラメタテーブル200に書き込む(ステップS101)。
次に、判断部163は、現在時刻をタイマ156に問い合わせ、現在時刻を現在時刻220として、処理パラメタテーブル200に書き込む(ステップS102)。
判断部163は、CPUGPU累計処理時間210と第2プログラムCPU予測処理時間215と第2プログラムGPU予測処理時間216とを加算した値が、CPUGPU処理時間制限値311より大であるかどうかを判断する(ステップS103)。判断の結果、加算した値が、CPUGPU処理時間制限値311より大きい場合には(ステップS103で「Yes」)、判断部163は、ステップS110へ制御を移す。
加算した値が、CPUGPU処理時間制限値311と等しい又はCPUGPU処理時間制限値311より小さい場合には(ステップS103で「No」)、判断部163は、GPU累計処理時間211と第2プログラムGPU予測処理時間216とを加算した値が、GPU処理時間制限値312より大であるかどうかを判断する(ステップS104)。判断の結果、加算した値が、GPU処理時間制限値312より大きい場合には(ステップS104で「Yes」)、判断部163は、ステップS110に制御を移す。
加算した値が、GPU処理時間制限値312と等しい又はGPU処理時間制限値312より小さい場合には(ステップS104で「No」)、判断部163は、次に示すようにして、現在時刻220と、第1プログラム処理開始時刻214、第1プログラムCPU予測処理時間212、第1プログラムGPU予測処理時間213を用いて、CPU予測残り処理時間218及びGPU予測残り処理時間219を計算する。
判断部163は、第1プログラムCPU予測処理時間212―(現在時刻220―第1プログラム処理開始時刻214)により、CPU予測残り処理時間218を算出する。算出された値が0以下であれば、CPU予測残り処理時間218を、0とする。
CPU予測残り処理時間218=第1プログラムCPU予測処理時間212―(現在時刻220―第1プログラム処理開始時刻214)
ただし、CPU予測残り処理時間218=0(算出されたCPU予測残り処理時間218が0以下の場合)
算出されたCPU予測残り処理時間218が0より大の場合、判断部163は、第1プログラムGPU予測処理時間213をGPU予測残り処理時間219とする。
GPU予測残り処理時間219=第1プログラムGPU予測処理時間213(CPU予測残り処理時間218が0より大の場合)
算出されたCPU予測残り処理時間218が0の場合には、判断部163は、第1プログラムGPU予測処理時間213+第1プログラムCPU予測処理時間212―(現在時刻220―第1プログラム処理開始時刻214)の計算結果をGPU予測残り処理時間219に設定する。算出されたGPU予測残り処理時間219が0以下であれば、GPU予測残り処理時間219に0を設定する
GPU予測残り処理時間219=第1プログラムGPU予測処理時間213+第1プログラムCPU予測処理時間212―(現在時刻220―第1プログラム処理開始時刻214) (算出されたCPU予測残り処理時間218が0の場合)
GPU予測残り処理時間219=0(算出されたGPU予測残り処理時間219が0以下の場合)
次に、判断部163は、CPU予測残り処理時間218及びGPU予測残り処理時間219を処理パラメタテーブル200に書き込む(ステップS105)。
次に、判断部163は、CPU予測残り処理時間218とGPU予測残り処理時間219の合計値が、CPUGPU処理優先時間313より小であるかを判断する(ステップS106)。合計値が、CPUGPU処理優先時間313より小であれば(ステップS106で「Yes」)、判断部163は、制御をステップS110へ移す。
合計値がCPUGPU処理優先時間313より大であるか、又は合計値がCPUGPU処理優先時間313と等しければ(ステップS106で「No」)、判断部163は、GPU予測残り処理時間219が、GPU処理優先時間314より小であるかを判断する(ステップS107)。GPU予測残り処理時間219がGPU処理優先時間314より小であれば(ステップS107で「Yes」)、判断部163は、ステップS110へ制御を移す。GPU予測残り処理時間219がGPU処理優先時間314より大であれば、又は、GPU予測残り処理時間219がGPU処理優先時間314に等しければ(ステップS107で「No」)、判断部163は、発行制御部166に対し、第2プログラムの第2描画命令の発行を通知し、現在時刻220の値を第2プログラム処理開始時刻217に設定する(ステップS108)。
次に、判断部163は、CPUGPU累計処理時間210に、第2プログラムCPU予測処理時間215と第2プログラムGPU予測処理時間216とを加算する。また、判断部163は、GPU累計処理時間211に、第2プログラムGPU予測処理時間216を加算する(ステップS109)。
これで、第2プログラム12の第2描画命令を受け取った場合の判断部163の処理を終了する。
CPUGPU累計処理時間210と第2プログラムCPU予測処理時間215と第2プログラムGPU予測処理時間216とを加算した値が、CPUGPU処理時間制限値311より大である場合(ステップS103で「Yes」)、GPU累計処理時間211と第2プログラムGPU予測処理時間216とを加算した値が、GPU処理時間制限値312より大である場合(ステップS104で「Yes」)、CPU予測残り処理時間218とGPU予測残り処理時間219の合計値が、CPUGPU処理優先時間313より小である場合(ステップS106で「Yes」)、又は、GPU予測残り処理時間219が、GPU処理優先時間314より小である場合(ステップS107で「Yes」)、判断部163は、発行制御部166に対し、第2プログラムの描画処理の待ちを通知し、第2プログラム処理開始時刻217に0を設定する(ステップS110)。
これで、第2プログラム12の第2描画命令を受け取った場合の判断部163の処理を終了する。
なお、ステップS109において、CPUGPU累計処理時間210及びGPU累計処理時間211に加算する値は、予測値を用いずに、実際に処理にかかった時間を計測し、計測して得られた時間を用いてもよい。
(2)第1プログラム11の第1描画命令を受け取った場合の判断部163の動作
図14は、命令監視部162から描画命令を受け取った場合における、判断部163の動作の一例を示すフローチャート図である。
第1プログラム11の第1描画命令を命令監視部162から受け取った場合の判断部163の動作について、図14に示すフローチャート図を用いて説明する。
第1プログラム11の第1描画命令を受け取ると、判断部163は、予測部164に、受け取った第1描画命令を実行する際に、CPU120における処理に要すると予測される予測処理時間、及び、GPU122における処理に要すると予測される予測処理時間を計算させる。判断部163は、予測部164からそれぞれの予測処理時間を受け取る。次に、判断部163は、それぞれの予測処理時間を、第1プログラムCPU予測処理時間212及び第1プログラムGPU予測処理時間213として、処理パラメタテーブル200に書き込む(ステップS201)。
判断部163は、現在時刻をタイマ156に問い合わせ、現在時刻を現在時刻220として格納する(ステップS202)。
次に、判断部163は、第1プログラムCPU予測処理時間212と第1プログラムGPU予測処理時間213との合計値が、CPUGPU処理優先時間313より小であるかを判断する(ステップS203)。合計値が、CPUGPU処理優先時間313より小であれば(ステップS203で「Yes」)、判断部163は、ステップS207に制御を移す。
合計値がCPUGPU処理優先時間313より大であるか、又は、CPUGPU処理優先時間313に等しければ(ステップS203で「No」)、判断部163は、第1プログラムGPU予測処理時間213が、GPU処理優先時間314より小であるかを判断する(ステップS204)。第1プログラムGPU予測処理時間213がGPU処理優先時間314より小であれば(ステップS204で「Yes」)、判断部163は、ステップS207へ制御を移す。
第1プログラムGPU予測処理時間213がGPU処理優先時間314より大であるか、又は、GPU処理優先時間314に等しければ(ステップS204で「No」)、判断部163は、発行制御部166に対し、第2プログラムの第2描画命令の発行を通知し、現在時刻220の値を第2プログラム処理開始時刻217に設定する(ステップS205)。これにより、第2プログラムの第2描画命令が命令発行部165からグラフィックスドライバ153に発行される。
次に、判断部163は、CPUGPU累計処理時間210に、第2プログラムCPU予測処理時間215と第2プログラムGPU予測処理時間216を加算する。判断部163は、GPU累計処理時間211に、第2プログラムGPU予測処理時間216を加算する(ステップS206)。
次に、判断部163は、第1プログラムの第1描画命令のCPU優先度が、第2プログラムの第2描画命令のCPU優先度より高くなるように、優先度設定部167に優先度を調整指示する(ステップS207)。
なお、ステップS207に示す手順は、第1プログラム11及び第2プログラム12のCPU処理優先度が変更されることが発生しなければ、毎回実行される必要はない。
(3)監視周期の終了の通知を受け取った場合の判断部163の動作
図15は、タイマ156から通知を受け取った場合における、判断部163の動作の一例を示すフローチャート図である。
タイマ156から監視周期の終了の通知を受け取った場合の判断部163の動作について、図15に示すフローチャート図を用いて説明する。
タイマ156から監視周期の終了の通知を受け取ると、判断部163はCPUGPU累計処理時間210及びGPU累計処理時間211に「0」を設定する(ステップS301)。
次に、判断部163は、第2プログラム処理開始時刻217が「0」か否かを判断することにより、第2プログラムからの第2描画命令が待っている状態か否かを判断する(ステップS302)。「0」以外の場合(ステップS302で「0以外の場合」)、判断部163は、待ち状態の第2描画命令が存在しないと判断し、ステップS305へ制御を移す。
「0」の場合(ステップS302で「0の場合」)、判断部163は、待ち状態の第2描画命令が存在すると判断し、判断部163は、発行制御部166に対し、第2プログラム12の第2描画命令の発行を通知し、現在時刻220の値を第2プログラム処理開始時刻217に設定する(ステップS303)。
次に、判断部163は、CPUGPU累計処理時間210に、第2プログラムCPU予測処理時間215と第2プログラムGPU予測処理時間216とを加算する。また、判断部163は、GPU累計処理時間211に、第2プログラムGPU予測処理時間216を加算する(ステップS304)。
次に、判断部163は、次の監視周期の終了時に終了の通知を受け取れるようにするため、監視周期時間310をタイマ156にセットする(ステップS305)。
(4)発行制御部166の動作
図16は、判断部163から通知を受け取った場合における、発行制御部166の動作の一例を示すフローチャート図である。
判断部163から、描画命令の待機又は描画命令の発行の続行の通知を受け取った場合の発行制御部166の動作について、図16に示すフローチャート図を用いて説明する。
判断部163から通知を受け取ると、発行制御部166は、通知の種類を判断する(ステップS401)。通知は、描画命令の待機及び描画命令の発行の続行のいずれかである。通知が描画命令の待機の場合(ステップS401で「描画命令の待機」)、発行制御部166は、ステップS405へ制御を移す。
通知が描画命令の発行の続行の場合(ステップS401で「描画命令の発行の続行」)、発行制御部166は、発行待ち命令存在フラグ511の値を確認して、命令発行部165に発行待ちの描画命令があるか否かを判断する(ステップS402)。
発行待ち命令存在フラグ511の値がリセット状態の場合(ステップS402で「リセット状態」)、待機している命令はないと判断し、発行制御部166は、発行待ち要求フラグ510をリセットし、第2プログラム12が次の描画命令の発行を直ちに行えるようにする(ステップS403)。これにより、処理を終了する。
発行待ち命令存在フラグ511の値がセット状態の場合(ステップS402で「セット状態」)には、待機している命令があるため、発行制御部166は、命令発行部165へ待機している描画命令を発行するように通知し、発行待ち命令存在フラグ511をリセットする(ステップS404)。これにより、命令発行部165は、待機している描画命令を発行する。次に、発行制御部166は、次に発行される描画命令を待機させるため、発行待ち要求フラグ510をセットする(ステップS405)。これにより、処理を終了する。
(5)発行制御部166の動作
図17は、命令発行部165から描画命令の発行の待ち合わせについて問い合わせを受けた場合における、発行制御部166の動作の一例を示すフローチャート図である。
命令発行部165から描画命令の発行の待ち合わせについて問い合わせを受けた場合の発行制御部166の動作について、図17に示すフローチャート図を用いて説明する。
命令発行部165から描画命令の発行の待ち合わせについて問い合わせを受け取ると、発行制御部166は、発行待ち要求フラグ510を確認する(ステップS501)。
発行待ち要求フラグ510がセット状態の場合(ステップS501で「セット状態」)、発行制御部166は、命令発行部165に対して、描画命令の発行を待機するように通知し、発行待ち命令存在フラグ511をセット状態にする(ステップS502)。これにより、処理を終了する。
発行待ち要求フラグ510がリセット状態の場合(ステップS501で「リセット状態」)、発行制御部166は、命令発行部165に対して、描画命令を発行するように通知し、発行待ち命令存在フラグ511をリセット状態にする(ステップS503)。これにより、処理を終了する。
1.7 効果の説明
本実施の形態における描画処理の即時性についての効果を、本実施の形態を適用しない場合と、実施の形態の適用した場合とを比較して説明する。
ここで、第1プログラム11は、上述したように、表示の即時性が要求されるプログラムである。言い換えると、第1プログラム11は、フレーム表示単位時間T0以内に、1フレーム分の表示を完了する必要があるプログラムである。フレーム表示単位時間T0は、フレームレートに応じて定まる。フレーム表示単位時間T0以内に表示を完了することにより、利用者は、最新の状態を正しく表す適切な情報を入手することができる。
また、第2プログラム12は、即時性が要求されないプログラムである。
第1プログラム11は、第1描画命令「1A」、「1B」及び「1C」を含んでいるとする。第1プログラム11から、第1描画命令「1A」、「1B」及び「1C」がこの順序で出力される。第1描画命令「1A」、「1B」及び「1C」は、CPU120により、言い換えると、グラフィックスドライバ153により、この順序で実行される。グラフィックスドライバ153は、この順序で、各描画命令に対応するGPU命令と加工処理データとを関連付けてコマンド待ち行列バッファ15に格納する。
GPU122は、各加工処理データを用いて、各GPU命令に対応する描画処理を実行することにより、描画処理の結果である描画イメージデータをフレームバッファ155に出力する(又は、フレームバッファ155に描画するともいう)。
GPU122が第1描画命令「1A」、「1B」及び「1C」に対応するGPU命令を実行し、描画処理が完了すると、フレームバッファ155において、第1プログラム11による1フレーム分の描画イメージデータが完成する。
第2プログラム12は、第2描画命令「2A」、「2B」及び「2C」を含んでいるとする。第2プログラム12から、第2描画命令「2A」、「2B」及び「2C」がこの順序で出力される。第2描画命令「2A」、「2B」及び「2C」は、CPU120により、言い換えると、グラフィックスドライバ153により、この順序で実行される。グラフィックスドライバ153は、この順序で、各描画命令に対応するGPU命令と加工処理データとを関連付けてコマンド待ち行列バッファ15に格納する。
GPU122は、各加工処理データを用いて、各GPU命令に対応する描画処理を実行することにより、描画処理の結果である描画イメージデータをフレームバッファ155に出力する。
GPU122が第2描画命令「2A」、「2B」及び「2C」に対応するGPU命令を実行し、描画処理が完了すると、フレームバッファ155において、第2プログラム12による1フレーム分の描画イメージデータが完成する。
表示部112は、フレームバッファ155に格納された1フレーム分の描画イメージデータをフレームレートに従うタイミングで読み出して表示する。
(1)ここでは、描画命令「1A」、「1B」、「1C」、「2A」、「2B」、「2C」において、それぞれの描画命令が、その描画命令より以前に処理したGPU命令の結果に依存しない場合を想定する。
図18は、本実施の形態に記載した技術を適用しない場合の各描画命令におけるCPU描画処理及びGPU描画処理の一例を示すタイミングチャート図である。
図19は、本実施の形態に記載した技術を適用した場合の各描画命令におけるCPU描画処理及びGPU描画処理の一例を示すタイミングチャート図である。
なお、図18に示す第1描画命令「1A」、「1B」及び「1C」は、それぞれ、図19に示す第1描画命令「1A」、「1B」及び「1C」と同じ命令である。また、図18に示す第2描画命令「2A」、「2B」及び「2C」は、それぞれ、図19に示す第2描画命令「2A」、「2B」及び「2C」と同じ命令である。
命令監視部162は、第1描画命令「1A」、「1B」及び「1C」を受信する。また、命令受信部161は、第2描画命令「2A」、「2B」及び「2C」を受信する。
描画命令「1A」、「2A」、「1B」、「2B」、「1C」及び「2C」は、時間的に、この順序で受信するものとする。
また、以下の条件(i)及び条件(ii)のいずれかの関係を満足するものであるとする。
(i)第2描画命令「2A」についてのCPU処理時間及びGPU処理時間、並びに、第2描画命令「2B」についてのCPU予測処理時間及びGPU予測処理時間の和は、CPUGPU処理時間制限値311よりも大きい。ここで、第2描画命令「2A」についてのCPU処理時間及びGPU処理時間は、それぞれ、第2描画命令「2A」及び第2描画命令「2A」に基づくGPU命令の実行が終了した後に計測された実測値である。
(ii)第2描画命令「2A」についてのGPU処理時間と、第2描画命令「2B」についてのGPU予測処理時間との和は、GPU処理時間制限値312よりも大きい。ここで、第2描画命令「2A」についてのGPU処理時間は、第2描画命令「2A」に基づくGPU命令の実行が終了した後に計測された実測値である。
条件(i)又は(ii)は、第2描画命令「2B」を受信したとき、図13に示すS103及びS104のいずれかにおいて、Yesと判断されることを示す。これらの場合において、図13に示すステップS110の実行がなされる。
(a)本実施の形態を適用しない場合
本実施の形態を適用しない場合の各描画命令におけるCPU描画処理及びGPU描画処理の一例を、図18に示すタイミングチャート図を用いて説明する。この図においては、横軸に時間の経過を示す。この図の一段目には、CPUにおいて、実行される各描画命令の時間的経過を示す。また、二段目には、GPUにおいて、実行される各GPU命令の時間的経過を示す。
第1プログラム11からの第1描画命令601「1A」に従って、時刻T11~時刻T12まで、CPU120が描画命令に対応するデータ加工処理などを実行(以後、描画命令に対応するデータ加工処理などを実行することを「描画命令を実行する」と称する。)する。第1描画命令601「1A」の実行において、対応するGPU命令「1A」がコマンド待ち行列バッファ15に格納される。その後、GPU122に処理が依頼される。時刻T12~時刻T14まで、GPU122が第1描画命令601「1A」に対応するGPU命令611「1A」に基づいて描画処理(以後、GPU命令に基づく描画処理を「GPU描画処理」と称する。)を行う。その後、GPU命令611「1A」によるGPU描画処理が完了する。
第2プログラム12からの第2描画命令602「2A」に従って、時刻T12~時刻T13まで、CPU120が描画処理を実行する。その結果、第2描画命令602「2A」に対応するGPU命令「2A」がコマンド待ち行列バッファ15に格納される。その後、GPU122に処理が依頼される。しかしながら、時刻T13においては、GPU122は、GPU命令611「1A」によるGPU描画処理を実行しているため、GPU命令「2A」によるGPU描画処理の実行を待機する。時刻T14になると、GPU122は、GPU命令611「1A」を完了するので、GPU命令612「2A」によるGPU描画処理の実行を開始する。GPU122は、GPU命令612「2A」に従って、GPU描画処理を時刻T14~時刻T16の間、実行する。その後、GPU命令612「2A」によるGPU描画処理が完了する。
第1プログラム11からの第1描画命令603「1B」に従って、時刻T13~時刻T15まで、CPU120が描画処理を実行する。その結果、第1描画命令603「1B」に対応するGPU命令「1B」がコマンド待ち行列バッファ15に格納される。その後、GPU122に処理が依頼される。しかしながら、時刻T15においては、GPU122は、GPU命令612「2A」に従って、GPU描画処理を実行しているため、GPU命令「1B」によるGPU描画処理の実行を待機する。時刻T16になると、GPU122は、GPU命令612「2A」によるGPU描画処理を完了するので、次のGPU命令613「1B」によるGPU描画処理の実行を開始する。GPU122は、GPU命令613「1B」によるGPU描画処理を、時刻T16~時刻T18の間、実行する。その後、GPU命令613「1B」によるGPU描画処理が完了する。
第2プログラム12からの第2描画命令604「2B」に従って、時刻T15から時刻T17まで、CPU120が描画処理を実行する。その結果、第2描画命令604「2B」に対応するGPU命令「2B」がコマンド待ち行列バッファ15に格納される。その後、GPU122に処理が依頼される。しかしながら、時刻T17においては、GPU122は、GPU命令613「1B」によるGPU描画処理を実行しているので、GPU命令「2B」によるGPU描画処理の実行を待機する。時刻T18になると、GPU122は、GPU命令613「1B」によるGPU描画処理を完了するので、次のGPU命令614「2B」によるGPU描画処理の実行を開始する。GPU122は、GPU命令614「2B」によるGPU描画処理を時刻T18~時刻T21の間、実行する。その後、GPU命令614「2B」によるGPU描画処理が完了する。
第1プログラム11からの第1描画命令605「1C」に従って、時刻T17~時刻T19まで、CPU120が描画処理を実行する。その結果、第1描画命令605「1C」に対応するGPU命令「1C」がコマンド待ち行列バッファ15に格納される。その後、GPU122に処理が依頼される。しかしながら、時刻T19において、GPU122は、GPU命令614「2B」によるGPU描画処理を実行しているので、GPU命令「1C」によるGPU描画処理の実行を待機する。時刻T21になると、GPU122は、GPU命令614「2B」によるGPU描画処理を完了するので、次のGPU命令「1C」によるGPU描画処理の実行を開始する。GPU122は、GPU命令615「1C」によるGPU描画処理を時刻T21~時刻T22の間、実行する。その後、GPU命令615「1C」によるGPU描画処理が完了する。
以上説明したように、第1プログラム11の第1描画命令「1A」、「1B」及び「1C」に対応するGPU描画処理が完了したので、1フレーム分の描画イメージデータがフレームバッファ155に出力されたこととなる。しかしながら、当該描画イメージデータの出力の完了時点は、時刻T22であり、時刻T22は、フレーム表示単位時間T0(607)を超過している。このため、表示部112が、T11からフレーム表示単位時間T0だけ経過した時点において、フレームバッファ155から描画イメージデータを取り出したとしても、これは、完成前の描画イメージデータとなる。このように、表示の即時性に問題が発生している。
(b)本実施の形態を適用する場合
本実施の形態を適用する場合の各描画命令におけるCPU描画処理及びGPU描画処理の一例を、図19に示すタイミングチャート図を用いて説明する。この図においては、横軸に時間の経過を示す。この図の一段目には、CPU120において、実行される各描画命令の時間的経過を示す。また、二段目には、GPU122において、実行される各GPU命令の時間的経過を示す。
第1プログラム11からの第1描画命令621「1A」に従って、時刻T31~時刻T32まで、CPU120が描画処理を実行する。その結果、第1描画命令621「1A」に対応するGPU命令「1A」がコマンド待ち行列バッファ15に格納される。その後、GPU122に処理が依頼される。時刻T32~時刻T34まで、GPU122が第1描画命令621「1A」に対応するGPU命令631「1A」によるGPU描画処理を行う。その後、GPU命令631「1A」によるGPU描画処理が完了する。
第2プログラム12からの第2描画命令622「2A」に従って、時刻T32~時刻T33まで、CPU120が描画処理を実行する。その結果、第2描画命令622「2A」に対応するGPU命令「2A」がコマンド待ち行列バッファ15に格納される。その後、GPU122に処理が依頼される。しかしながら、時刻T33においては、GPU122は、GPU命令631「1A」によるGPU描画処理を実行しているので、GPU命令「2A」によるGPU描画処理の実行を待機する。時刻T34になると、GPU122は、GPU命令631「1A」によるGPU描画処理を完了するので、次のGPU命令632「2A」によるGPU描画処理の実行を開始する。GPU122は、GPU命令632「2A」によるGPU描画処理を、時刻T34~時刻T36の間、実行する。その後、GPU命令632「2A」によるGPU描画処理が完了する。
第1プログラム11からの第1描画命令623「1B」に従って、時刻T33~時刻T35まで、CPU120が描画処理を実行する。その結果、第1描画命令623「1B」に対応するGPU命令「1B」がコマンド待ち行列バッファ15に格納される。その後、GPU122に処理が依頼される。しかしながら、時刻T35においては、GPU122は、GPU命令632「2A」によるGPU描画処理を実行しているので、GPU命令「1B」によるGPU描画処理の実行を待機する。時刻T36になると、GPU122は、GPU命令632「2A」によるGPU描画処理を完了するので、次のGPU命令「1B」によるGPU描画処理の実行を開始する。GPU122は、GPU命令633「1B」によるGPU描画処理を、時刻T36~時刻T38の間、実行する。その後、GPU命令633「1B」によるGPU描画処理が完了する。
帯域制御部152の予測部164により算出された予測処理時間を用いると、第2プログラム12からの第2描画命令「2B」に対応するGPU命令「2B」によりGPU描画処理を行うと、第1プログラム11による描画処理がフレーム表示単位時間T0(627)以内に完了しないことが予想される。このため、図13のステップS104の判断に従って、CPU120による第2描画命令「2B」の実行を待機させる。
第1プログラムからの第1描画命令624「1C」に従って、時刻T35~時刻T37まで、CPU120が描画処理を実行する。その結果、第1描画命令624「1C」に対応するGPU命令「1C」がコマンド待ち行列バッファ15に格納される。その後、GPU122に処理が依頼される。しかしながら、時刻T37においては、GPU122は、GPU命令633「1B」によるGPU描画処理を実行しているので、GPU命令「1C」によるGPU描画処理の実行を待機する。時刻T38になると、GPU122は、GPU命令633「1B」によるGPU描画処理を完了するので、次のGPU命令634「1C」によるGPU描画処理の実行を開始する。GPU122は、GPU命令634「1C」によるGPU描画処理を、時刻T38~時刻T39の間、実行する。その後、GPU命令634「1C」によるGPU描画処理が完了する。
時刻T39において、第1プログラム11からの第1描画命令「1A」、「1B」及び「1C」に対応する描画処理が完了する。このため、第1プログラム11による1フレーム分の描画イメージデータがフレームバッファ155にフレーム表示単位時間T0(627)以内に出力されたことになる。
なお、実行が待機となった第2プログラム12からの第2描画命令「2B」及び「2C」については、次のフレーム表示単位時間が開始する時刻T40より後に実行される。
また、以上説明したように、複数の描画命令において、それぞれの描画命令が、その描画命令より以前に処理したGPU命令の結果に依存しない場合、又は、その描画命令のGPU命令の結果に対する依存関係が少ないことが予測される場合においては、命令監視部162にかかる処理を省略することも可能である。
また、コマンド待ち行列バッファ15内において、待ち状態のGPU命令が少ない場合においては、CPU時間とGPU時間を分けないで処理を簡略化することも可能である。
(2)ここでは、一つの描画命令(依存描画命令と呼ぶ)が、依存描画命令の前に発行された描画命令(被依存描画命令と呼ぶ)に基づくGPU命令によるGPU描画処理の結果に依存する場合を想定する。この場合、被依存描画命令に基づくGPU命令によるGPU描画処理が完了しなければ、依存描画命令の実行を開始できないことになる。
例えば、第1プログラム11からの第1描画命令「1B」は、第1プログラム11からの第1描画命令「1A」に基づくGPU命令によるGPU描画処理の終了を待たなければ開始できないものとする。第1描画命令「1B」は、依存描画命令であり、第1描画命令「1A」は、被依存描画命令である。
また、第1プログラム11からの第1描画命令「1C」は、第1描画命令「1B」に基づくGPU命令によるGPU描画処理の終了を待たなければ開始できないものとする。第1描画命令「1C」は、依存描画命令であり、第1描画命令「1B」は、被依存描画命令である。
また、第2プログラム12からの第2描画命令「2B」は、第2プログラム12からの第2描画命令「2A」に基づくGPU命令によるGPU描画処理の終了を待たなければ開始できないものとする。第2描画命令「2B」は、依存描画命令であり、第2描画命令「2A」は、被依存描画命令である。
図20は、本実施の形態に記載した技術を適用しない場合の各描画命令におけるCPU描画処理及びGPU描画処理の一例を示す別のタイミングチャート図である。
図21は、本実施の形態に記載した技術を適用した場合の各描画命令におけるCPU描画処理及びGPU描画処理の一例を示す別のタイミングチャート図である。
図20に示す第1描画命令「1A」、「1B」及び「1C」は、それぞれ、図21に示す第1描画命令「1A」、「1B」及び「1C」と同じ命令である。また、図20に示す第2描画命令「2A」、「2B」及び「2C」は、それぞれ、図21に示す第2描画命令「2A」、「2B」及び「2C」と同じ命令である。
命令監視部162は、第1描画命令「1A」、「1B」及び「1C」を受信する。また、命令受信部161は、第2描画命令「2A」、「2B」及び「2C」を受信する。
描画命令「1A」、「2A」、「1B」、「2B」、「1C」及び「2C」は、時間的に、この順序で受信するものとする。
(a)本実施の形態を適用しない場合
本実施の形態を適用しない場合の各描画命令におけるCPU描画処理及びGPU描画処理の一例を、図20に示すタイミングチャート図を用いて説明する。この図においては、横軸に時間の経過を示す。この図の一段目には、CPUにおいて、実行される各描画命令の時間的経過を示す。また、二段目には、GPUにおいて、実行される各GPU命令の時間的経過を示す。
第1プログラム11からの第1描画命令641「1A」に従って、時刻T51~時刻T52まで、CPU120が描画処理を実行する。その結果、第1描画命令641「1A」に対応するGPU命令「1A」がコマンド待ち行列バッファ15に格納される。その後、GPU122に処理が依頼される。時刻T52~時刻T54まで、GPU122は、GPU命令651「1A」によるGPU描画処理を行う。その後、GPU命令651「1A」によるGPU描画処理が完了する。
第2プログラム12からの第2描画命令642「2A」に従って、時刻T52~時刻T53まで、CPU120が描画処理を実行する。その結果、第2描画命令642「2A」に対応するGPU命令「2A」がコマンド待ち行列バッファ15に格納される。その後、GPU122に処理が依頼される。しかしながら、時刻T53においては、GPU122は、GPU命令651「1A」によるGPU描画処理を実行しているので、GPU命令「2A」によるGPU描画処理の実行を待機する。時刻T54になると、GPU122は、GPU命令651「1A」によるGPU描画処理を完了するので、次のGPU命令652「2A」によるGPU描画処理の実行を開始する。GPU122は、GPU命令652「2A」によるGPU描画処理を、時刻T54~時刻T57の間、実行する。その後、GPU命令652「2A」によるGPU描画処理が完了する。
第1プログラム11からの第1描画命令「1B」は、時刻T53に処理を開始しようとするが、時刻T53において、第1描画命令641「1A」に対応するGPU命令651「1A」によるGPU描画処理が完了していない。従って、第1描画命令「1B」は、待機する。その結果、後続する第2描画命令「2B」が、第1描画命令「1B」より先に、CPU120により実行される。
GPU命令651「1A」によるGPU描画処理が時刻T54で完了し、第2描画命令643「2B」によるCPU処理が時刻T55で完了した後に、第1描画命令644「1B」によるCPU描画処理が実行を開始する。時刻T55~時刻T56まで、第1描画命令644「1B」に従って、CPU120がCPU描画処理を実行する。その結果、第1描画命令644「1B」に対応するGPU命令「1B」がコマンド待ち行列バッファ15に格納される。その後、GPU122に処理が依頼される。時刻T56においては、GPU122は、GPU命令652「2A」によるGPU描画処理を実行中であり、また、コマンド待ち行列バッファ15には第2描画命令「2B」に対応するGPU命令「2B」がすでに格納されているため、GPU命令653「2B」によるGPU描画処理の完了する時刻T58になってから、第1描画命令644「1B」に対応するGPU命令654「1B」を開始できる。GPU122は、GPU命令654「1B」に従って、時刻T58~時刻T59の間、GPU描画処理を実行する。その後、GPU命令654「1B」によるGPU描画処理が完了する。
第2プログラム12からの第2描画命令643「2B」により、時刻T53~時刻T55まで、CPU120が描画処理を行う。その後、GPU122に処理を依頼する。しかしながら時刻T55においては、GPU122は、第2描画命令642「2A」に対応するGPU命令652「2A」によるGPU描画処理を実行しているので、第2描画命令「2B」に対応するGPU命令「2B」は待機する。時刻T57になると、GPU122は、GPU命令652「2A」によるGPU描画処理を完了するので、次のGPU命令653「2B」によるGPU描画処理の実行を開始する。GPU122は、GPU命令653「2B」によるGPU描画処理を、時刻T57~時刻T58の間、実行する。その後、GPU命令653「2B」によるGPU描画処理が完了する。
第2プログラム12からの第2描画命令「2C」は、GPU命令653「2B」の処理結果に依存する。このため、第2描画命令「2C」は、GPU命令653「2B」によるGPU描画処理が完了する時刻T58まで待機する。その後、第2描画命令645「2C」に従って、時刻T58~時刻T60まで、CPU120がCPU描画処理を実行する。その結果、第2描画命令645「2C」に対応するGPU命令「2C」がコマンド待ち行列バッファ15に格納される。その後、GPU122に処理が依頼される。時刻T60~時刻T61まで、GPU命令655「2C」に従って、GPU122がGPU描画処理を行う。その後、GPU命令655「2C」によるGPU描画処理が完了する。
第1プログラム11からの第1描画命令「1C」は、GPU命令654「1B」の処理結果に依存する。このため、第1プログラム11からの第1描画命令「1C」は、GPU命令654「1B」によるGPU描画処理が完了する時刻T59まで待機する。時刻T59の後、第2プログラム12からの第2描画命令645「2C」によるCPU描画処理が完了する時刻T60に、第1描画命令646「1C」は、処理を開始する。時刻T60~時刻T62まで、第1描画命令646「1C」に従って、CPU120がCPU描画処理を行う。その後、GPU122に処理が依頼される。時刻T62~時刻T63まで、第1描画命令646「1C」に対応するGPU命令656「1C」に従って、GPU122がGPU描画処理を行う。その後、GPU命令656「1C」によるGPU描画処理が完了する。
以上説明したように、第1プログラム11の第1描画命令「1A」、「1B」及び「1C」に対応するGPU描画処理が完了したので、1フレーム分の描画イメージデータがフレームバッファ155に出力される。1フレーム分の描画イメージデータがフレームバッファ155に出力されるのは、時刻T63においてであり、時刻T63は、フレーム表示単位時間T0(647)を超過している。
時刻T51からフレーム表示単位時間T0(647)が経過した時点において、表示部112により、フレームバッファ155から取り出される第1プログラム11による描画イメージデータは、完成前のものである。このように、表示の即時性に問題が発生している。
(b)本実施の形態を適用する場合
本実施の形態を適用する場合の各描画命令におけるCPU描画処理及びGPU描画処理の一例を、図21に示すタイミングチャート図を用いて説明する。この図においては、横軸に時間の経過を示す。この図の一段目には、CPU120において、実行される各描画命令の時間的経過を示す。また、二段目には、GPU122において、実行される各GPU命令の時間的経過を示す。
第1プログラム11からの第1描画命令661「1A」に従って、時刻T71~時刻T72まで、CPU120がCPU描画処理を実行する。その結果、第1描画命令661「1A」に対応するGPU命令「1A」がコマンド待ち行列バッファ15に格納される。その後、GPU122に処理が依頼される。時刻T72~時刻T74まで、第1描画命令661「1A」に対応するGPU命令671「1A」に従って、GPU122がGPU描画処理を行う。その後、GPU命令671「1A」によるGPU描画処理が完了する。
第2プログラム12からの第2描画命令662「2A」に従って、時刻T72~時刻T73まで、CPU120がCPU描画処理を実行する。その結果、第2描画命令662「2A」に対応するGPU命令「2A」がコマンド待ち行列バッファ15に格納される。その後、GPU122に処理が依頼される。しかしながら、時刻T73においては、GPU122は、GPU命令671「1A」によるGPU描画処理を実行しているので、第2描画命令662「2A」に対応するGPU命令「2A」は、待機する。時刻T74になると、GPU122は、GPU命令671「1A」による描画処理を完了するので、次の第2描画命令662「2A」に対応するGPU命令「2A」によるGPU描画処理の実行を開始する。GPU122は、第2描画命令662「2A」に対応するGPU命令672「2A」によるGPU描画処理を、時刻T74~時刻T76の間、実行する。その後、GPU命令672「2A」によるGPU描画処理が完了する。
第1プログラム11からの第1描画命令「1B」は、時刻T73に処理を開始しようとする。しかし、時刻T73において、第1描画命令661「1A」に対応するGPU命令671「1A」によるGPU描画処理が完了していない。このため、第1描画命令「1B」は、待機する。GPU命令671「1A」によるGPU描画処理が時刻T74で完了した後に、第1描画命令663「1B」によりCPU描画処理の実行が開始される。時刻T74~時刻T75まで、CPU120が第1描画命令663「1B」を実行する。その結果、第1描画命令663「1B」に対応するGPU命令「1B」がコマンド待ち行列バッファ15に格納される。その後、GPU122に処理が依頼される。時刻T75においては、GPU122は、第2描画命令662「2A」に対応するGPU命令672「2A」によるGPU描画処理を実行中である。このため、時刻T76にGPU命令672「2A」によるGPU描画処理が完了した後、GPU122は、GPU命令「1B」によるGPU描画処理を開始する。GPU122は、GPU命令673「1B」によるGPU描画処理を、時刻T76~時刻T78の間、実行する。その後、GPU命令673「1B」によるGPU描画処理が完了する。
時刻T73において、第1描画命令「1B」のCPU120による実行が、GPU命令「1A」によるGPU描画処理の完了待ちになった時に、帯域制御部152の判断部163は、第2プログラム12からの第2描画命令664「2B」の処理を継続するか待機するかを判断する。
図13におけるステップS106及びステップS107において、第1描画命令「1A」のCPU予測残り処理時間及びGPU予測残り処理時間により、第2描画命令「2B」より第1描画命令「1B」を優先すると判断し、第2描画命令「2B」の実行を待機させる。
さらに、第1描画命令「1B」を開始しようとするときに、判断部163は、第1描画命令「1B」の予測処理時間を用いて、図14のステップS203及びステップS204で処理を再開するかどうかを判断する。この結果、第2描画命令「2B」は、引き続き、待機となる。時刻T75に第1描画命令「1B」のCPU描画処理が終了すると、判断部163により、第2描画命令「2B」の予測処理時間を用いて、図14のステップS203及びステップS204で処理を再開するかどうかを判断する。その結果、第2描画命令「2B」の処理を再開する。時刻T75~時刻T77まで、CPU120が第2描画命令「2B」を実行する。その結果、第2描画命令「2B」に対応するGPU命令「2B」がコマンド待ち行列バッファ15に格納される。その後、GPU122に処理が依頼される。しかしながら、時刻T77においては、GPU122は、GPU命令673「1B」によるGPU描画処理を実行している。このため、GPU命令「2B」は、実行を待機する。時刻T78になると、GPU122は、GPU命令673「1B」によるGPU描画処理を完了する。この結果、次のGPU命令674「2B」によるGPU描画処理の実行を開始する。GPU122は、GPU命令674「2B」によるGPU描画処理を、時刻T78~時刻T80の間、実行する。その後、GPU命令674「2B」によるGPU描画処理が完了する。
第1プログラム11からの第1描画命令「1C」は、時刻T75に処理を開始しようとする。しかし、第1描画命令663「1B」に対応するGPU命令「1B」によるGPU描画処理が完了していない。このため、CPU120による第1描画命令「1C」の実行を待機する。この結果、第2描画命令「2B」が第1描画命令「1C」より先に実行される。GPU命令673「1B」によるGPU描画処理が時刻T78で完了した後に、CPU120は、第1描画命令「1C」の実行を開始する。時刻T78~時刻T79まで、CPU120が第1描画命令665「1C」を実行する。その結果、第1描画命令665「1C」に対応するGPU命令「1C」がコマンド待ち行列バッファ15に格納される。その後、GPU122に処理が依頼される。時刻T79においては、GPU122は、GPU命令674「2B」によるGPU描画処理を実行中である。このため、時刻T80にGPU命令674「2B」によるGPU描画処理が完了した後、第1描画命令665「1C」に対応するGPU命令「1C」によるGPU描画処理の実行を開始する。GPU122は、GPU命令675「1C」によるGPU描画処理を、時刻T80~時刻T81の間、実行する。その後、GPU命令「1C」によるGPU描画処理が完了する。
以上説明したように、時刻T81において、第1プログラム11による第1描画命令「1A」、「1B」及び「1C」に対応する描画処理が完了する。こうして、第1プログラム11による1フレーム分の描画イメージデータがフレームバッファ155にフレーム表示単位時間T0(667)以内に出力される。
なお、図21に例示するタイミングチャート図においては、第2プログラム12の第2描画命令「2C」についても、時刻T83で完了する。このように、第2プログラム12による描画処理も、フレーム表示単位時間T0(667)内で完了する。
1.8 まとめ
以上説明したように、本実施の形態によると、即時表示を必要とする図形及び即時表示を必要としない図形を一のフレームに表示する場合に、即時表示を必要とする図形の表示性能を良好に保つことができるという優れた効果を奏する。
2.その他の変形例
本開示について、上記の実施の形態及び各変形例に基づいて説明しているが、上記の実施の形態及び各変形例には、限定されない。以下に示すようにしてもよい。
(1)図形表示処理装置のプログラム構成は、図22に示すようにしてもよい。
OS(オペレーティングシステム)706の管理下において、第1プログラム702、第2プログラム703、帯域制御部704及びデバイスドライバ705が動作する。
第1プログラム702、第2プログラム703、帯域制御部704及びデバイスドライバ705は、それぞれ、上記の実施の形態の第1プログラム11、第2プログラム12、帯域制御部152及びグラフィックスドライバ153と同様の構成を有している。
第1プログラム702、第2プログラム703、帯域制御部704及びデバイスドライバ705は、OS706の制御の基に、GPU707及びCPU708にアクセスする。
また、第1プログラム702及び第2プログラム703は、それぞれ、帯域制御部704、デバイスドライバ705及びOS706を介して、GPU707にGPU命令を出力する。
(2)図形表示処理装置のプログラム構成は、図22に示すようにしてもよい。
VMM(仮想マシンモニタ)730の管理下において、第1OS726及び第2OS729が動作する。VMM730は、コンピュータを仮想化し、複数の異なるOSを並列に実行できるようにするソフトウェアである。
第1OS726の管理下において、第1プログラム722、GraphicsBE(バックエンド)723、帯域制御部724及びデバイスドライバ725が動作する。
第2OS729の管理下において、第2プログラム727及びGraphicsFE(フロントエンド)728が動作する。
第1プログラム722、第2プログラム727、帯域制御部724及びデバイスドライバ725は、それぞれ、上記の実施の形態の第1プログラム11、第2プログラム12、帯域制御部152及びグラフィックスドライバ153と同様の構成を有している。
第1プログラム722は、帯域制御部724、デバイスドライバ725、第1OS726及びVMM730を介して、GPU707にGPU命令を出力する。
第2プログラム722は、GraphicsFE728、第2OS729、VMM730、第1OS726、GraphicsBE723、帯域制御部724、デバイスドライバ725、第1OS726及びVMM730を介して、GPU707にGPU命令を出力する。
(3)本開示の一態様は、即時表示を必要とする第1図形及び即時表示を必要としない第2図形を一のフレームに表示する図形表示処理装置であって、第1図形の描画を指示する第1描画命令及び第2図形の描画を指示する第2描画命令を記憶しているプログラム記憶手段と、各描画命令に基づいて生成されるGPU命令を実行することより、描画処理を行うグラフィックプロセッサと、プログラム記憶手段から第1描画命令及び第2描画命令を取得する取得手段と、取得された第1描画命令又は第2描画命令に基づいて生成されるGPU命令の実行により、グラフィックプロセッサにおける描画処理に要すると予測されるGPU予測処理時間を算出する予測手段と、算出されたGPU予測処理時間を用いて、第1描画命令及び第2描画命令のいずれを先に実行させるかを判断する判断手段と、第1描画命令を先に実行させると判断する場合に、第1描画命令を発行させ、第2描画命令の発行を待機させるよう制御する発行制御手段と、発行制御手段による制御に従って、各描画命令を発行する命令発行手段と、発行された各描画命令を実行することにより、GPU命令を生成する命令実行手段とを備えることを特徴とする。
ここで、第2描画命令に基づくGPU命令の実行前に、GPU命令が実行されるべき一のフレーム表示単位時間内に、即時表示を必要としない第3図形の描画を指示する第3描画命令に基づいて生成されるGPU命令の実行が終了し、予測手段は、第2描画命令に基づくGPU命令の実行により予測されるGPU予測処理時間を算出し、判断手段は、グラフィックプロセッサにおける第3描画命令に基づくGPU命令の実行に要したGPU累計処理時間を保持し、GPU累計処理時間と、算出されたGPU予測処理時間とを加算して、GPU合計処理時間を算出し、算出されたGPU合計処理時間と、フレーム表示単位時間内において、即時表示を必要としない図形のGPU命令による描画処理に許容される処理時間の制限値とを比較し、GPU合計処理時間が制限値を超える場合に、第1描画命令を先に実行させると決定してもよい。
ここで、予測手段は、第1描画命令に基づくGPU命令の実行により予測されるGPU予測処理時間を算出し、判断手段は、第1描画命令に基づいて生成されたGPU命令の開始時刻を保持しており、開始時刻から現在時刻までの経過時間を算出し、GPU予測処理時間から、算出された経過時間を差し引いて、GPU残り処理時間を算出し、算出されたGPU残り処理時間と、第1描画命令に割り当てられた優先閾値とを比較し、GPU残り処理時間が優先閾値より小さい場合に、第1描画命令を先に実行させると決定してもよい。
ここで、第1描画命令に基づくGPU命令の実行前に、GPU命令が実行されるべき一のフレーム表示単位時間内に、即時表示を必要とする第3図形の描画を指示する第3描画命令に基づいて生成されるGPU命令の実行が終了し、予測手段は、第1描画命令に基づくGPU命令の実行により予測されるGPU予測処理時間を算出し、判断手段は、グラフィックプロセッサにおける第3描画命令に基づくGPU命令の実行に要したGPU累計処理時間を保持し、GPU累計処理時間と、算出されたGPU予測処理時間とを加算して、GPU合計処理時間を算出し、算出されたGPU合計処理時間と、第1描画命令に割り当てられた優先閾値とを比較し、GPU予測処理時間が優先閾値より小さい場合に、第1描画命令を先に実行させると決定してもよい。
ここで、予測手段は、さらに、取得された第1描画命令又は第2描画命令の実行により、命令実行手段における処理に要すると予測されるCPU予測処理時間を算出し、判断手段は、判断において、算出されたCPU予測処理時間及び算出されたGPU予測処理時間を用いるとしてもよい。
ここで、第2描画命令の実行及び第2描画命令に基づくGPU命令の実行前に、第2描画命令及びGPU命令が実行されるべき一のフレーム表示単位時間内に、即時表示を必要としない第3図形の描画を指示する第3描画命令の実行及び第3描画命令に基づいて生成されるGPU命令の実行が終了し、予測手段は、第2描画命令に基づくGPU命令の実行により予測されるGPU予測処理時間を算出し、さらに、第2描画命令の実行により、命令実行手段における処理に要すると予測されるCPU予測処理時間を算出し、判断手段は、命令実行手段における第3描画命令の実行及びグラフィックプロセッサにおける第3描画命令に基づくGPU命令の実行に要したCPUGPU累計処理時間を保持し、CPUGPU累計処理時間と、算出されたCPU予測処理時間と、算出されたGPU予測処理時間とを加算して、CPUGPU合計処理時間を算出し、算出されたCPUGPU合計処理時間と、フレーム表示単位時間内において、即時表示を必要としない図形の描画命令による処理及び描画命令に基づくGPU命令による描画処理に許容される処理時間の制限値とを比較し、CPUGPU合計処理時間が制限値を超える場合に、第1描画命令を先に実行させると決定してもよい。
ここで、予測手段は、第1描画命令に基づくGPU命令の実行により予測されるGPU予測処理時間を算出し、さらに、第1描画命令の実行により、命令実行手段における処理に要すると予測されるCPU予測処理時間を算出し、判断手段は、第1描画命令の開始時刻を保持しており、開始時刻から現在時刻までの経過時間を算出し、GPU予測処理時間とCPU予測処理時間とを加算して、加算値を算出し、加算値から、算出された経過時間を差し引いて、CPUGPU残り処理時間を算出し、算出されたCPUGPU残り処理時間と、第1描画命令及び第1描画命令に基づくGPU命令に割り当てられた優先閾値とを比較し、CPUGPU残り処理時間が優先閾値より小さい場合に、第1描画命令を先に実行させると決定してもよい。
ここで、第1描画命令の実行及び第1描画命令に基づくGPU命令の実行前に、第1描画命令及びGPU命令が実行されるべき一のフレーム表示単位時間内に、即時表示を必要とする第3図形の描画を指示する第3描画命令の実行及び第3描画命令に基づいて生成されるGPU命令の実行が終了し、予測手段は、第1描画命令に基づくGPU命令の実行により予測されるGPU予測処理時間を算出し、さらに、第1描画命令の実行により、命令実行手段における処理に要すると予測されるCPU予測処理時間を算出し、判断手段は、命令実行手段における第3描画命令の実行及びグラフィックプロセッサにおける第3描画命令に基づくGPU命令の実行に要したCPUGPU累計処理時間を保持し、CPUGPU累計処理時間と、算出されたCPU予測処理時間と、算出されたGPU予測処理時間とを加算して、CPUGPU合計処理時間を算出し、算出されたCPUGPU合計処理時間と、第1描画命令及び第1描画命令に基づくGPU命令に割り当てられた優先閾値とを比較し、CPUGPU合計処理時間が優先閾値より小さい場合に、第1描画命令を先に実行させると決定してもよい。
ここで、図形表示処理装置は、さらに、判断手段により、第1描画命令を先に実行させると判断する場合に、第2描画命令の優先度より高くなるように、第1描画命令の優先度を設定する優先度設定手段と、優先度設定手段により設定された優先度に従って、取得手段による取得を制御するタスクスケジューラ手段とを備えるとしてもよい。
ここで、図形表示処理装置は、車両に設置され、第1図形は、車両が走行する速度を表す図形、車両が備えるエンジン又はモータの回転数を表す図形、車両が備える機構、装置又は機械に係る警報を表す図形、又は、走行中の車両の周辺の交通状況に係る警報を表す図形であり、第2図形は、車両の運転者向けの案内用の地図図形であるとしてもよい。
また、本開示の別の一態様は、即時表示を必要とする第1図形及び即時表示を必要としない第2図形を一のフレームに表示する図形表示処理装置において用いられる図形表示処理方法であって、図形表示処理装置は、第1図形の描画を指示する第1描画命令及び第2図形の描画を指示する第2描画命令を記憶しているプログラム記憶手段と、各描画命令に基づいて生成されるGPU命令を実行することより、描画処理を行うグラフィックプロセッサとを備え、図形表示処理方法は、プログラム記憶手段から第1描画命令及び第2描画命令を取得し、取得された第1描画命令又は第2描画命令に基づいて生成されるGPU命令の実行により、グラフィックプロセッサにおける描画処理に要すると予測されるGPU予測処理時間を算出し、算出されたGPU予測処理時間を用いて、第1描画命令及び第2描画命令のいずれを先に実行させるかを判断し、第1描画命令を先に実行させると判断する場合に、第1描画命令を発行させ、第2描画命令の発行を待機させるよう制御し、制御に従って、各描画命令を発行し、発行された各描画命令を実行することにより、GPU命令を生成することを特徴とする。
また、本開示の別の一態様は、即時表示を必要とする第1図形及び即時表示を必要としない第2図形を一のフレームに表示する図形表示処理装置を構成する集積回路であって、第1図形の描画を指示する第1描画命令及び第2図形の描画を指示する第2描画命令を記憶しているプログラム記憶手段と、各描画命令に基づいて生成されるGPU命令を実行することより、描画処理を行うグラフィックプロセッサと、プログラム記憶手段から第1描画命令及び第2描画命令を取得する取得手段と、取得された第1描画命令又は第2描画命令に基づいて生成されるGPU命令の実行により、グラフィックプロセッサにおける描画処理に要すると予測されるGPU予測処理時間を算出する予測手段と、算出されたGPU予測処理時間を用いて、第1描画命令及び第2描画命令のいずれを先に実行させるかを判断する判断手段と、第1描画命令を先に実行させると判断する場合に、第1描画命令を発行させ、第2描画命令の発行を待機させるよう制御する発行制御手段と、発行制御手段による制御に従って、各描画命令を発行する命令発行手段と、発行された各描画命令を実行することにより、GPU命令を生成する命令実行手段とを備えることを特徴とする。
また、本開示の別の一態様は、即時表示を必要とする第1図形及び即時表示を必要としない第2図形を一のフレームに表示する図形表示処理装置を備える車両であって、図形表示処理装置は、第1図形の描画を指示する第1描画命令及び第2図形の描画を指示する第2描画命令を記憶しているプログラム記憶手段と、各描画命令に基づいて生成されるGPU命令を実行することより、描画処理を行うグラフィックプロセッサと、プログラム記憶手段から第1描画命令及び第2描画命令を取得する取得手段と、取得された第1描画命令又は第2描画命令に基づいて生成されるGPU命令の実行により、グラフィックプロセッサにおける描画処理に要すると予測されるGPU予測処理時間を算出する予測手段と、算出されたGPU予測処理時間を用いて、第1描画命令及び第2描画命令のいずれを先に実行させるかを判断する判断手段と、第1描画命令を先に実行させると判断する場合に、第1描画命令を発行させ、第2描画命令の発行を待機させるよう制御する発行制御手段と、発行制御手段による制御に従って、各描画命令を発行する命令発行手段と、発行された各描画命令を実行することにより、GPU命令を生成する命令実行手段とを備えることを特徴とする。
(4)本開示の一態様は、グラフィックス表示処理装置であって、プロセッサと、グラフィックス処理プロセッサと、特定のプログラムよりも優先度の低いプログラムに含まれる描画命令を受け取る命令受信部と、受け取った優先度の低いプログラムに含まれる描画命令に基づく描画処理をグラフィックス処理プロセッサに実行させるのに必要な時間を予測する処理時間予測ステップと、予測した時間に基づき、優先度の低いプログラムに含まれる描画命令をプロセッサへ発行するか、発行を待機するかどうかを判断する処理判断部と、処理判断部による判断に基づいて、優先度の低いプログラムに含まれる描画命令をプロセッサへ発行するタイミングの調整を行なう処理タイミング調整部とを備える。
この態様によると、表示に即時性が要求される特定のプログラムからの表示処理については即時性を保証しながら、同時に特定のプログラムよりも優先度の低いプログラム(又は、表示に即時性が要求されないプログラム)の表示を両立して行うことが可能になる。
ここで、グラフィックス表示処理装置は、さらに、特定のプログラムに含まれる描画命令を受け取ったかどうかを監視する命令監視部と、命令監視部により受信した特定のプログラムに含まれる描画命令を優先度の低いプログラムに含まれる描画命令優先してプロセッサへ発行する処理優先順位調整部とを備えるとしてもよい。
ここで、処理判断部は、特定のプログラムに関連するグラフィックス処理プロセッサを用いた描画処理を所定の時間間隔で完了できるように所定の時間間隔において、グラフィックス処理プロセッサを用いて優先度の低いプログラムに関連する描画処理を行える制限時間を保持し、制限時間と予測した時間に基づき、優先度の低いプログラムに含まれる描画命令をプロセッサへ発行するか、発行を待機するかどうかを判断してもよい。
本開示の別の一態様は、プロセッサとグラフィックス処理プロセッサとを有する計算機に用いるグラフィックス表示処理方法であって、特定のプログラムよりも優先度の低いプログラムに含まれる描画命令を受け取る命令受信ステップと、受け取った優先度の低いプログラムに含まれる描画命令に基づく描画処理をグラフィックス処理プロセッサに実行させるのに必要な時間を予測する処理時間予測ステップと、予測した時間に基づき、優先度の低いプログラムに含まれる描画命令をプロセッサへ発行するのを待機させるかどうかを判定する判定部と、待機させた第2プログラムに含まれる描画命令をプロセッサへ発行するタイミングを調整するタイミング調整ステップとを含むことを特徴とする。
また、本開示の一態様は、集積回路であって、プロセッサと、グラフィックス処理プロセッサと、特定のプログラムよりも優先度の低いプログラムに含まれる描画命令を受け取る命令受信部と、受け取った優先度の低いプログラムに含まれる描画命令に基づく描画処理をグラフィックス処理プロセッサに実行させるのに必要な時間を予測する処理時間予測ステップと、予測した時間に基づき、優先度の低いプログラムに含まれる描画命令をプロセッサへ発行するか、発行を待機するかどうかを判断する処理判断部と、処理判断部による判断に基づいて、優先度の低いプログラムに含まれる描画命令をプロセッサへ発行するタイミングの調整を行なう処理タイミング調整部とを備えることを特徴とする。
(5)図4及び図5に示す図形表示処理装置100の各機能ブロックは、典型的にはプロセッサと外部メモリとの協同で処理されるプログラムとして実現される。しかし、各機能ブロックは、集積回路であるLSIで実現してもよい。各機能ブロックは、個別に1チップ化されてもよいし、一部又は全てを含むように1チップ化されてもよい。ここでは、各機能ブロックは、LSIとしているが、各機能ブロックは、LSIとは、集積度の異なるIC、システムLSI、スーパーLSI又はウルトラLSIであるとしてもよい。
また、集積回路化の手法はLSIに限るものではなく、専用回路又は汎用プロセッサで実現してもよい。LSI製造後に、プログラムすることが可能なFPGA(Field Programmable Gate Array)や、LSI内部の回路セルの接続や設定を再構成可能なリコンフィギュラブル・プロセッサを利用してもよい。
さらには、半導体技術の進歩又は派生する別技術によりLSIに置き換わる集積回路化の技術が登場すれば、当然、その技術を用いて機能ブロックの集積化を行ってもよい。
また、上記の実施の形態及び各変形例において説明した図形表示処理装置は、CPU、GPU及びタイマを備えた計算処理装置であれば、あらゆる計算機、電子機器、情報機器、AV機器、通信機器及び家電機器にも適用可能である。これは、例えば、PC(パーソナルコンピュータ)、携帯情報端末(携帯電話、スマートフォン及びPDAなど)、テレビジョン、ハーディスクレコーダ、DVD及びブルーレィディスクなどを用いた各種ディスクレコーダ、DVD及びブルーレィディスクなどを用いた各種ディスクプレイヤ、及びカーナビゲーション装置などにも応用できる。
これらの装置は、表示装置を備え、又は、表示装置とともに、自動車、電気機関車、ディーゼル機関車、電車、リニアモータカー、航空機、船舶等に搭載される。
(6)上述したように、各装置は、CPUとGPUとメモリとを備えたコンピュータシステムである。メモリは、コンピュータプログラムを記憶しており、CPU及びGPUは、コンピュータプログラムに従って動作する。
ここで、コンピュータプログラムは、所定の機能を達成するために、コンピュータに対する指令を示す命令コードが複数個組み合わされて構成されたものである。
また、コンピュータプログラムは、コンピュータ読み取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、CD―ROM、MO、DVD、DVD-ROM、DVD-RAM、ブルーレィディスク、半導体メモリなどに記録されているとしてもよい。
また、コンピュータプログラムを、電気通信回線、無線又は有線通信回線、インターネットを代表とするネットワーク、データ放送等を経由して伝送するとしてもよい。
また、コンピュータプログラムを記録媒体に記録して移送することにより、又はコンピュータプログラムをネットワーク等を経由して移送することにより、独立した他のコンピュータシステムにより実行するとしてもよい。
(7)前述の説明は、あらゆる点において本開示の例示に過ぎず、その範囲を限定しようとするものではない。本開示の範囲を逸脱することなく、種々の改良や変形を行うことができることは言うまでもない。
(8)上記実施の形態及び上記変形例をそれぞれ組み合わせるとしてもよい。