【文献】
理論で学ぶJavaプログラミング,Java WORLD 第7巻 第4号,(株)IDGジャパン,2003年 4月 1日,pp.120-130
(58)【調査した分野】(Int.Cl.,DB名)
前記1つ以上のチャネルイベントを監視し、前記コンシューマカーネルの前記起動をトリガするように構成されたハードウェアスケジューリングシステムを実行することをさらに含む、請求項1に記載の方法。
実行時に前記1つ以上のチャネルを前記1つ以上のプロセッサのメモリユニットに割り当てるように構成された割り当てモジュールをさらに備える、請求項11に記載のシステム。
前記1つ以上のチャネルイベントを監視し、前記コンシューマカーネルの前記起動をトリガするように構成されたハードウェアスケジューリングシステムをさらに備える、請求項11に記載のシステム。
【発明を実施するための形態】
【0012】
以下、添付図面を参照して、本発明を説明する。図において、全般的に、同一の参照番号は、同一または機能的に類似する要素を示す。加えて、全般的に、図面において、参照番号の左端の数字は、参照番号が最初に現れる図面を識別する。
【0013】
以下の本発明の詳細な説明では、本発明に一致する例示的な実施形態を示す添付図面を参照する。他の実施形態が可能であり、また、本発明の趣旨および範囲の範囲内で、実施形態に対して修正が行われ得る。したがって、詳細な説明は、本発明を限定することを意味しない。むしろ、本発明の範囲は、添付の特許請求の範囲によって定義される。
【0014】
当業者には、本発明の態様が、以下に説明されるように、図面で示されるソフトウェア、ハードウェア、ファームウェアおよび/またはエンティティの多くの異なる実施形態で実現できることが明らかになるであろう。本発明を実現するためのハードウェアの特殊な制御を伴ういかなる実際のソフトウェアコードも、本発明を限定しない。したがって、本発明の動作挙動は、本明細書で提示される詳細のレベルを考慮して、実施形態の修正および変形が可能であるという了解の下で説明される。
【0015】
加えて、当業者には明らかであるように、本発明の種々の実施形態のシミュレーション、合成および/または製造は、汎用プログラミング言語(CまたはC++等)、Verilog HDL、VHDL、Altera HDL(AHDL)等を含むハードウェア記述言語(HDL)、または、他の利用可能なプログラミングツールおよび/もしくは図式的なキャプチャツール(例えば回路キャプチャツール等)を含む(上述した)コンピュータ可読コードの使用を通して、部分的に達成され得る。このコンピュータ可読コードは、半導体、磁気ディスク、光ディスク(例えばCD−ROM、DVD−ROM等)を含む、任意の既知のコンピュータ使用可能な媒体内に、および、コンピュータ使用可能な(例えば、読み出し可能な)伝送媒体(搬送波、または、デジタル、光もしくはアナログに基づく媒体を含む任意の他の媒体等)内で具体化されるコンピュータデータ信号として、配置することができる。よって、コードは、インターネットおよびインターネットを含む通信ネットワークを通じて伝送することができる。上記のシステムおよび技術によって達成される機能および/または提供される構造は、プログラムコードで具体化されるコア(例えばグラフィックス処理ユニット(GPU)コア等)で表すことができること、および、集積回路の製造の一部としてハードウェアに変換され得ることを理解されたい。認識されるように、他のタイプのコアまたは処理ユニットは、本発明の態様を具体化する機能および/または構造を提供することができる。これらの処理ユニットとしては、例えば、中央処理ユニット(CPU)、上述したグラフィックス処理ユニット、デジタル信号プロセッサ、アプリケーションプロセッサ等が挙げられる。
【0016】
本明細書および特許請求の範囲におけるモジュールに対する言及は、指示された機能を行うためのハードウェアまたはソフトウェア構成要素の任意の組み合わせを意味する。モジュールは、厳密に定義されたエンティティである必要はなく、したがって、複数のモジュールでは、機能性においてハードウェアおよびソフトウェア構成要素が重複し得る。例えば、ソフトウェアモジュールは、プロシージャ内の単一行のコードを指してもよく、該プロシージャは、それ自体が別個のソフトウェアモジュールである。当業者は、例えば、モジュールの機能が、いくつかの文体的または性能最適化技術に従って定義され得ることを理解するであろう。
【0017】
図1は、従来の技術を用いた例示的なマルチスレッドアプリケーション100を示す図である。この実施例では、ステップ102で、主プロセスがスレッドを生じ、具体的には、1つ以上のプロデューサスレッドおよび1つ以上のコンシューマスレッドが、プロデューサ−コンシューマ設計手法に従って生成される。当業者は、他のスレッディングモデルが存在し本開示に関連すること、ならびに、プロデューサ−コンシューマ設計手法が、本開示のこの箇所および他の箇所で一例として使用されることを認識するであろう。
【0018】
ステップ104で、プロデューサスレッドには、データを発生させるタスクが与えられる。例えば、プロデューサスレッドは、ファイルまたはデータベースからデータを読み出し得る。このデータは、例えば一組の行で構成されたグラフィック等のような、アプリケーション100が処理するように構成された何らかのデータであり得る。この実施例では、グラフィックファイルからの1行または他の一組のデータの処理を、他の複数行または複数組のデータの処理と並列に扱うことができると仮定する。
【0019】
ステップ106で、プロデューサは、データを配置するために、バッファ112に空きがあるかどうかを判定する。空きがない場合、ステップ108で示されるように、プロデューサは、空きが利用可能になるまで待機する。リソースが利用可能になるまで、スレッドがさらなる処理を行うことができないというこの待機状態は、ときには、「ブロッキング」として知られている。ブロッキングの間、スレッドは、いかなる有用な作業も行わないにもかかわらず、システムリソースを使用し続けることになる。
【0020】
リソース(この場合では、バッファ112)が利用可能になると、ステップ110で、プロデューサは、データをバッファ112に配置する。プロデューサは、次いで、ステップ104に戻り、引き続き、任意の追加的なデータ(例えば、グラフィックファイルからの追加的な画像ライン)を生成する。
【0021】
コンシューマスレッドには、プロデューサによってバッファ112に配置されたデータを処理するタスクが与えられる。プロデューサ−コンシューマ設計手法では、複数のプロデューサおよび複数のコンシューマを使用することができるが、コンシューマスレッドは、より時間のかかる処理の原因となるので、実際には、コンシューマは、プロデューサよりも数が多い傾向がある。
【0022】
プロデューサ−コンシューマ設計手法のこの実施例を続けると、コンシューマスレッドは、グラフィックファイルからの個々の行または他の組のデータに対して作業を行うために提供される。一実施形態において、コンシューマスレッドは、真の並列動作で、グラフィックファイルからの他のデータとは独立にこの作業を行うことができる。例えば、コンシューマスレッドは、グラフィックの色空間(1ピクセルあたりに割り当てられたビット)を低減させるために使用されてもよく、それぞれが、グラフィックの対応するデータに対してそのように行うことができる。ここでも、当業者は、本願が一例として提供されるものであり、限定するものではないことを認識するであろう。
【0023】
その作業を行うために、ステップ114で、コンシューマスレッドは、作業を行うデータがバッファ112にあるかどうかを判定する。利用可能ないかなるデータもない場合には、コンシューマスレッドは、続けることができず、ステップ116で示されるように、待機(ブロック)しなければならない。上述したように、コンシューマスレッドは、バッファ112でデータが利用可能になるまでのブロッキングの間、システムリソースを利用し続けることになる。
【0024】
スレッドブロッキングのための種々の機構が存在する。例えば、スレッドは、条件をテストし、その条件を満たすまでブロックすることができる(例えば、バッファがデータを有するかどうかのテスト、ロックのためのテスト等)。その条件を満たす場合に、次いで、スレッドを続けることができる。この場合、スレッドは、ステップ118に進み、バッファ112からデータを検索する。スレッドは、次いで、ステップ120で、データを処理する(例えば、1行のグラフィックデータの色空間を低減させる)ことによって、データを消費する。コンシューマスレッドは、次いで、ステップ114に戻り、追加的な作業ができる状態にある。
【0025】
方法100で説明されるこの手法による重大な問題は、いかなる有用な作業も行われていなくても、ブロッキング状態(例えば、上記のステップ108,116)にある間、スレッドによってかなりのリソースが利用されることである。これは、コンテキスト切り替えプロセッサにおいて、ブロックされたスレッドを処理パイプラインから切り替えて、他のスレッドが処理リソースの一部を利用することを可能にすることによって、ある程度改善することができる。そうであっても、コンテキスト切り替えは、切り替えられたスレッドについてスレッド1つあたりの状態情報の保持を必要とし、よって、それらの状態情報が元に切り替えられるときに、それらは保持される。また、それでも、マルチスレッドプログラミングを行うことができる多数のGPU等の全てのプロセッサが、必要なコンテキスト切り替え動作を行うことができるわけではない。
【0026】
その結果、空のチャネルに対する読み出しスレッドのブロッキングの間、1つのスレッドが書き込み、別のスレッドが読み出すという従来の実装は、効率的な手法ではない。これは、システムリソースを占有する長時間続くスレッドにつながり、スケジューラによって切り替える必要があり得る。加えて、切り替えた場合であっても、これらのスレッドは、スレッド1つあたりの状態情報を保持するために、リソースを消費し続ける。
【0027】
図2は、本発明の一実施形態によるマルチスレッドアプリケーション200を示す図である。マルチスレッドアプリケーション200、および、これによって具体化される技術は、スレッドブロッキングと関連付けられた従来のリソース利用問題の非効率性に対する解決策を提供する。また、本明細書の議論は、プロデューサ−コンシューマモデルに照らして提示されるが、当業者は、ブロッキングが起こり得る他のマルチスレッディングモデルに対するこの手法の適用性を認識するであろう。
【0028】
マルチスレッドアプリケーション200は、本発明の一実施形態によるプロデューサカーネル202およびコンシューマカーネル208を提供する。非限定的な例として、本明細書での実装の詳細は、Khronos Groupによって開発されたOpenCL(登録商標)並列プログラミング規格に照らして論じられる。しかしながら、当業者は、他の開発プラットフォームに対するこれらの技術の適用性を認識するであろう。
【0029】
プロデューサカーネル202およびコンシューマカーネル208は、OpenCL(登録商標)「カーネル」用語を用いた、プロデューサタスクおよびコンシューマタスクの各々に対応するコードブロックである。OpenCL(登録商標)において、カーネルは、1つのスレッドまたは一組の並列スレッドによって扱われるタスクである。OpenCL(登録商標)ランタイムは、コマンドキューで実行されるようにカーネルを配置し、特定のデバイスで実行するためのカーネル(スレッド)をキューイングする。OpenCL(登録商標)の柔軟性は、CPUおよびGPUの双方を含む多数の処理デバイスに対するカーネルのキューイングを可能にする。認識されるように、OpenCL(登録商標)以外のAPIも用いることができる。例えば、マイクロソフト(登録商標)によるDirectCompute(商標)は、使用可能な別のAPIである。
【0030】
プロデューサカーネル202およびコンシューマカーネル208によるデータフローを示すために、
図2はさらに、本発明の一実施形態によるプロデューサキュー204およびコンシューマキュー210の使用を示す。プロデューサキュー204は、文字通りのキューである必要はなく、むしろ、本発明の一実施形態による1つ以上のコンシューマカーネル208として実行するための作業を提供するために、プロデューサカーネル202を読み出す、ある種のデータソースである。上記の実施例に戻って参照すると、グラフィックデータのラインを含むファイルは、プロデューサキュー204として処理することができ、プロデューサカーネル202は、ファイルからグラフィックデータのラインを読み出す。当業者は、他のデータソースを利用することができること、および、プロデューサキュー204が、一例として提供されるものであって限定するものではないことを認識するであろう。
【0031】
同様に、コンシューマキュー210は、文字どおりのキューである必要はなく、むしろ、本発明の一実施形態によるコンシューマカーネル208によって処理されるいくつかの作業先を表す。上記の実施例に戻って参照すると、各コンシューマカーネル208は、本発明の一実施形態に従って、コンシューマキュー210からグラフィックデータの個々のラインを取り出し、それを処理する。複数のコンシューマカーネル208の各々は、同様に作業を行うことができる。当業者は、コンシューマカーネル208に対して作業の他のソースが使用され得ること、および、コンシューマキュー210が、一例として提供されるものであって限定するものではないことを認識するであろう。
【0032】
図1の簡単なバッファの実施例を使用する代わりに、本発明の一実施形態によるマルチスレッドアプリケーション200は、チャネル206を導入する。チャネル206は、サポート機能性とともに、コンシューマスレッドによるブロッキングを除去する能力を提供する。
【0033】
チャネル206は、単一のバッファまたはキューではなく、代わりに、チャネルに関連するカーネル起動トリガの登録を可能にする、プロデューサカーネル202とコンシューマキュー208との間のより精巧な通信経路を提供する。このカーネル起動トリガは、コンシューマキュー208に作業が存在する等の条件を満たす場合に、コンシューマカーネル210を起動する。
【0034】
図3は、本発明の一実施形態による本手法を利用するためにマルチスレッドアプリケーションを開発する動作を示す方法300のフローチャートである。方法は、ステップ302から始まり、ステップ304に進み、そこでは、プロデューサカーネルが定義される。非限定的な例として、本明細書で開示される新規なチャネルおよびイベント処理概念に適応するように拡張されたOpenCL(登録商標)構文を使用すると、プロデューサカーネルは、以下の様式で定義することができる。
【0035】
この例示的なプロデューサカーネルでは、2つの別個のチャネルが書かれている。各チャネルは、この実施例においてデータ値が5よりも大きいかどうか等の条件が与えられるプロデューサカーネルによって、配列「a」(すなわち、プロデューサキュー204)から検索されるデータでポピュレートされる。
【0036】
ステップ306で、本発明の一実施形態によるコンシューマカーネルが定義される。拡張OpenCL(登録商標)構文を有する上記の非限定的な実施例を続けると、コンシューマカーネルは、使用されている各チャネル(チャネルbおよびc)について定義される。本発明の一実施形態において、これらのコンシューマカーネルは、以下の様式で定義される。
【0037】
上の例示的なコンシューマカーネルにおいて、各カーネルは、それぞれのチャネルから整数値を読み出し、その値をグローバルな整数値(すなわち、コンシューマキュー210)に加えるという、類似したタスクを行う。
【0038】
ステップ308で、本発明の一実施形態によるチャネルが定義される。ステップ310で、チャネルの一定の条件を満たす場合に、チャネルイベントがトリガアクションに登録される。
【0039】
拡張OpenCL(登録商標)構文による上記の非限定的な実施例を続けると、ステップ308で、対応するイベントトリガとともに、2つのチャネル(channelBおよびchannelC)が定義される。これらのチャネルおよびイベントは、以下の様式で定義することができる。
【0040】
上記の実施例において、チャネルは、特定のチャネル条件を満たす場合に使用するために、あるサイズパラメータおよびイベントハンドラの指示によって作成される。非限定的な例として、OpenCL(登録商標)用のコンパイラ等のプログラミング言語コンパイラは、以下の関数によって、上述したようなチャネルオブジェクトの作成を扱うように拡張される。
【0041】
この例示的な非限定的な定義において、パラメータは、以下の使用法をとる。
・contextは、チャネルオブジェクトを作成するために使用される有効なOpenCL(登録商標)コンテキストである
・flagsは、作成されているチャネルメモリオブジェクトに関する情報の割り当ておよび使用法を指定するために使用されるビットフィールドである
・number_of_elementsは、要素の数を指す
・element_sizeは、要素タイプのバイト単位のサイズである
・block_sizeは、その後にCL_CHANNEL_BLOCK_READY状態がブロック準備イベントに設定される要素の数である
・errcode_retは、適切なエラーコードを返し、errcode_retがNULLである場合は、いかなるエラーコードも返さない
【0042】
例示的な非限定的な定義を続けると、errcode_retは、関数が成功裏に実行された場合に、条件CL_SUCCESSを返すために利用することができ、または、以下の例示的なエラー値のうち1つのエラー値を有するNULL値を返す。
・CL_INVALID_CONTEXT コンテキストが有効なコンテキストでない場合
・CL_INVALID_VALUE フラグで指定された値が有効でない場合
・CL_INVALID_CHANNEL_SIZE サイズがCL_DEVICE_CHANNEL_MAX_SIZEで指定された値を超えた場合
・CL_MEM_OBJECT_ALLOCATION_FAILURE メモリを画像オブジェクトに割り当てることに不具合がある場合
・CL_INVALID_OPERATION チャネルをサポートするコンテキスト内にいかなるデバイスもない場合
・CL_OUT_OF_RESOURCES デバイス上のOpenCL(登録商標)実装によって必要とされるリソースを割り当てることに不具合がある場合
・CL_OUT_OF_HOST_MEMORY ホスト上のOpenCL(登録商標)実装によって必要とされるリソースを割り当てることに不具合がある場合
【0043】
イベントトリガが定義され、それらの対応するチャネルと関連付けられることにより、当該イベントトリガは、ステップ310で、特定のイベント条件を満たす場合に登録される。上記の非限定的な例を続けると、以下の様式で2つのイベントトリガが登録される。
【0044】
上記の例示的なイベントトリガ登録は、CL_CHANNEL_BLOCK_READY条件に対してトリガし、当該条件は、上述したように、clCreateChannelに渡されたblock_size値で測定したときに、チャネル内に少なくとも1つのデータのブロックがある場合に設定される。代わりに、別のイベント、CL_CHANNEL_FULLを他のアプリケーションに利用することができ、当該イベントは、チャネルのサイズ値で測定したときに、チャネルが満杯である場合に設定される。当業者は、イベントトリガ関数を、所望に応じて拡張することができること、および、これらのイベントが、一例として提供されるものであって限定するものではないことを認識するであろう。
【0045】
OpenCL(登録商標)の場合、イベントトリガの作成は、本発明の一実施形態による関数clAddEventTriggerを定義することによって扱われる。この関数の例示的な非限定的な定義は、次のようになる。
【0046】
この例示的な非限定的な定義において、パラメータは、以下の使用法をとる。
・queueは、カーネルがエンキュー(enqueued)される有効なOpenCL(登録商標)コマンドキューである
・kernelは、キューを加える有効なOpenCL(登録商標)カーネルである
・イベントリスト内のnum_eventsは、トリガを評価するために検査されるイベントの数を指す
・event_trigger_stateは、カーネルの起動が起こる1組の有効な状態に対する状態マスクであり、上記の新しい状態の追加を伴う通常の1組のOpenCL(登録商標)イベント状態からのものであり得る
・eventは、起動したカーネルの状態を記述するイベントである
【0047】
方法300は、次いで、ステップ312で終了する。
図3および図の他の個所で説明されるステップの順序は、プログラムが、コード内で、種々の順序でおよび種々の場所に現れる定義で書かれ得るため、固定する必要はない。
【0048】
図4は、本発明の一実施形態による拡張チャネルおよびイベント処理の動作を示す方法400のフローチャートである。本方法は、ステップ402から始まり、ステップ404に進み、そこでは、処理されるデータが受け取られ、チャネルに記憶される(例えば、チャネル内のキューに配置される)。ステップ406で、チャネルのためのイベントトリガ条件がテストされる。例えば、上述したように、この条件は、CL_CHANNEL_BLOCK_READY条件であってよく、当該条件は、チャネル内に少なくとも1つのデータのブロックがある場合に設定される。
【0049】
条件のテストが肯定的であった場合は、ステップ408で、本発明の一実施形態による、対応するコンシューマカーネルがコマンドキューにディスパッチされる。上記の実施例において、データのブロックが「channelB」で利用可能である場合には、kernelBが起動され、データを消費する。本方法は、ステップ410で終了する。
【0050】
この手法の効果は、ブロッキングの間、コンシューマカーネルをアイドル状態にさせ、または、切り替えることを回避することである。代わりに、コンシューマカーネルは、必要なときにだけインスタンス化され、それらの作業が行われた後に終了される。本開示は、オンザフライでコンシューマカーネルを作成する背景でこのアプリケーションを提示しているが、当業者は、本明細書で開示されるチャネルイベント処理を、他のアプリケーションのためのカーネルをディスパッチするために適用することができることを認識するであろう。例えば、イベントトリガは、満杯のチャネルにおいて空きが利用可能になった場合にプロデューサカーネルをディスパッチするために使用することができ、空きを待機している間、プロデューサカーネルのブロッキングを防止する。
【0051】
図5は、本発明の一実施形態による例示的なプロデューサ−コンシューマ実装と一致するコンシューマカーネルの動作を示す方法500のフローチャートである。方法は、ステップ502から始まり、ステップ504へ進み、そこでは、コンシューマカーネルが起動される。本発明の一実施形態によるコンシューマカーネルは、OpenCL(登録商標)実装においてコマンドキューから起動されるが、他のプログラミングモデルにおける特定の実装によってカーネルを起動するための他の技術が使用されてもよい。
【0052】
ステップ506で、コンシューマカーネルは、チャネルからデータを読み出し、ステップ508で、データを消費する。データを消費するために必要とされる作業の量は、特定の実装によって変動する。しかしながら、全般的に、データを消費するために個々のコンシューマカーネルによって必要とされるリソースを低減させることが好まれる。コンシューマカーネルがデータに対する作業を完了したときに、ステップ510で、コンシューマカーネルが終了して、そのリソースを解放する。方法は、次いで、ステップ512で終了する。
【0053】
本明細書で説明される技術の性能を向上させるために、プログラミング言語コンパイラ(例えば、OpenCL(登録商標)コンパイラ)またはランタイムシステムに対する一定の最適化が、本発明の一実施形態に従って企図される。例えば、コンパイラは、GPUでの実行のためにコンパイルするとき、実行時に、グローバルメモリ(例えば、DRAM)等のGPUメモリのあるレベルでの表現のために、チャネルを最適化し得る。代替として、チャネルは、ある程度のスレッドの持続を可能にして、メモリ帯域幅に対するトレードオフを提供するために、実行時に、グローバルデータシェア(GDS)のSRAM構造で、あるいは、コア基準のローカルデータシェア(LDS)で表現することもできる。
【0054】
イベントトリガの効果的な取り扱いは、本発明の一実施形態による、例えば現在のGPU上の制御プロセッサの拡大版等のハードウェアスケジューリングシステムの実装を通して、さらに促進することができる。スケジューリングシステムは、最小の待ち時間および高い効率でイベントを監視し、ハードウェアからカーネルの起動をトリガするように構成されており、小さいコンシューマブロックの迅速な起動を可能にする。
【0055】
上述したように、本開示の全体にわたる実装の詳細は、全般的に、OpenCL(登録商標)プログラミングモデルの背景におかれている。しかしながら、本開示によって提供される利点は、他のプログラミングモデルで実現することができる。代替のプログラミングモデルに実装される、上記の実施例に類似する実施例は、以下の通りである。
【0056】
本発明の種々の態様は、ソフトウェア、ファームウェア、ハードウェアまたはそれらの組み合わせによって実装することができる。
図6は、本発明またはその一部をコンピュータ可読コードとして実装することの可能な例示的なコンピュータシステム600を表す図である。例えば、
図3のフローチャート300、
図4の400および
図5の500によって示される方法を、システム600に実装することができる。本発明の種々の実施形態は、この例示的なコンピュータシステム600に関して説明される。この説明を読んだ後に、当業者には、他のコンピュータシステムおよび/またはコンピュータアーキテクチャを使用してどのように本発明を実装するのかが明らかになるであろう。
【0057】
コンピュータシステム600は、プロセッサ604等の1つ以上のプロセッサを含む。プロセッサ604は、特殊用途プロセッサまたは汎用プロセッサであってよい。プロセッサ604は、通信インフラストラクチャ606(例えば、バスまたはネットワーク)に接続されている。
【0058】
コンピュータシステム600は、メインメモリ608、好ましくはランダムアクセスメモリ(RAM)を含み、または、二次メモリ610も含み得る。二次メモリ610は、例えば、ハードディスクドライブ612、リムーバブル記憶ドライブ614および/またはメモリースティックを含み得る。リムーバブル記憶ドライブ614は、フロッピー(登録商標)ディスクドライブ、磁気テープドライブ、光ディスクドライブ、フラッシュメモリ等を備え得る。リムーバブル記憶ドライブ614は、よく知られている様式でリムーバブル記憶ユニット617から読み出しおよび/またはリムーバブル記憶ユニット617に書き込む。リムーバブル記憶ユニット617は、リムーバブル記憶ドライブ614によって読み出され、それによって書き込まれる、フロッピー(登録商標)ディスク、磁気テープ、光ディスク等を備え得る。当業者によって認識されるように、リムーバブル記憶ユニット617は、コンピュータソフトウェアおよび/またはデータをその中に記憶した、コンピュータ使用可能な記憶媒体を含む。
【0059】
代替の実現例において、二次メモリ610は、コンピュータプログラムまたは他の命令をコンピュータシステム600にロードすることを可能にするための、他の類似した手段を含み得る。このような手段は、例えば、リムーバブル記憶ユニット622およびインターフェース620を含み得る。このような手段の例は、プログラムカートリッジおよびカートリッジインターフェース(例えばビデオゲームデバイスで見られるもの等)、リムーバブルメモリチップ(例えばEPROMまたはPROM等)、および、関連するソケット、ならびに、ソフトウェアおよびデータをリムーバブル記憶ユニット622からコンピュータシステム600に転送することを可能にする、他のリムーバブル記憶ユニット622およびインターフェース620を含み得る。
【0060】
また、コンピュータシステム600は、通信インターフェース624も含み得る。通信インターフェース624は、ソフトウェアおよびデータを、コンピュータシステム600と外部デバイスとの間で転送することを可能にする。通信インターフェース624としては、モデム、ネットワークインターフェース(イーサネット(登録商標)カード等)、通信ポート、PCMCIAスロットおよびカード等が挙げられる。通信インターフェース624を介して転送されるソフトウェアおよびデータは、電子的、電磁気的、光学的であり得る信号、または、通信インターフェース624によって受け取ることができる他の信号の形態を有してよい。これらの信号は、通信経路626を介して、通信インターフェース624に提供される。通信経路626は、信号を搬送し、または、ワイヤもしくはケーブル、光ファイバ、電話回線、携帯電話リンク、RFリンクまたは他の通信チャネルを使用して実装され得る。認識されるように、コンピュータシステム600は、いくつかの異なるフォームファクタまたはタイプのコンピュータシステムで具体化され得る。例えば、本発明の態様は、ハンドヘルドもしくは他のモバイルコンピューティングシステム、セットトップボックス、従来のコンピュータ(例えば、ラップトップ、デスクトップ、サーバ)、タブレット、組み込みシステム、テレビ、オーディオ/ビデオ機器等において具体化され得る。本発明の態様を具体化するコンピュータシステムは、あるシナリオにおいて、コストの低減(例えば、低減し又はより効果的な処理、完了までの時間の低減、電力の低減等)をもたらし得る。
【0061】
本明細書において、「コンピュータプログラム媒体」および「コンピュータ使用可能な媒体」という用語は、全般的に、リムーバブル記憶ユニット617、リムーバブル記憶ユニット622、および、ハードディスクドライブ612に取り付けられるハードディスク等の媒体を指すために使用される。また、通信経路626を通じて搬送される信号は、本明細書で説明される論理も具体化することができる。コンピュータプログラム媒体およびコンピュータ使用可能な媒体は、メモリ半導体(例えば、DRAM等)であってよい、メインメモリ608および二次メモリ610等のメモリも指す。これらのコンピュータプログラム製品は、ソフトウェアをコンピュータシステム600に提供するための手段である。
【0062】
コンピュータプログラム(コンピュータ制御論理とも呼ばれる)は、メインメモリ608および/または二次メモリ610に記憶される。また、コンピュータプログラムは、通信インターフェース624を介して受け取られてよい。そのようなコンピュータプログラムは、実行されたときに、コンピュータシステム600が、本明細書で論じられる本発明を実装することを可能にする。具体的には、コンピュータプログラムは、実行されたときに、プロセッサ604が、上記
図3のフローチャート300、
図4の400、
図5の500によって示される方法のステップ等の、本発明のプロセスを実装することを可能にする。したがって、そのようなコンピュータプログラムは、コンピュータシステム600のコントローラを表す。ソフトウェアを使用して本発明が実装される場合、当該ソフトウェアは、コンピュータプログラム製品に記憶されてもよく、また、リムーバブル記憶ドライブ614、インターフェース620、ハードドライブ612もしくは通信インターフェース624を使用してコンピュータシステム600にロードされ得る。
【0063】
また、本発明は、任意のコンピュータ使用可能な媒体に記憶されるソフトウェアを備えるコンピュータプログラム製品も対象とする。このようなソフトウェアは、1つ以上のデータ処理デバイスで実行されたときに、データ処理デバイスを本明細書で説明されるように動作させる。本発明の実施形態では、現在知られている媒体、または、将来の任意のコンピュータ利用可能もしくは読み出し可能な媒体を用いる。コンピュータ使用可能な媒体の例としては、主記憶デバイス(例えば、任意のタイプのランダムアクセスメモリ)、二次記憶デバイス(例えば、ハードドライブ、フロッピー(登録商標)ディスク、CD−ROM、ZIPディスク、テープ、磁気記憶デバイス、光記憶デバイス、MEMS、ナノテクノロジー記憶デバイス等)、および、通信媒体(例えば、有線および無線通信ネットワーク、ローカルエリアネットワーク、ワイドエリアネットワーク、イントラネット等)が挙げられるが、それらに限定されない。
【0064】
本発明の種々の実施形態を上記のように説明してきたが、これらは一例として提示されたものであり、限定するものではないことを理解されたい。添付の特許請求の範囲において定義される本発明の趣旨および範囲から逸脱することなく、形態および細部の種々の変更が行われ得ることが、当業者によって理解されるであろう。本発明は、これらの実施例に限定されないことを理解されたい。本発明は、本明細書で説明されるように動作する任意の要素に適用することができる。したがって、本発明の広さおよび範囲は、上述した例示的な実施形態のいずれかに限定されるべきではなく、添付の特許請求の範囲およびそれらの均等物によってのみ定義されるべきである。