同様の符号が同様の要素を示す図面を参照して、図1は、本発明の一つまたは複数の態様によるマルチプロセッサシステム100を示す。マルチプロセッサシステム100は、バス108を介して、DRAMなどの共有メモリ106に連結される複数のプロセッサ102(任意の数を使用可能である)を備える。共有メモリ106はDRAMでなくてもよい点に注意する。実際、共有メモリは任意の既知の技術または今後開発される技術を用いて形成することができる。
プロセッサ102のうちの一台は、例えば処理ユニット102Aである主処理ユニットであることが好ましい。他の処理ユニット102は、サブ処理ユニット(SPU)、例えば処理ユニット102B、102C、102Dなどであることが好ましい。サブ処理ユニット102は、既知のまたは今後開発されるコンピュータアーキテクチャのうち任意のものを使用して実現可能なものであってよい。サブ処理ユニット102の全てが同一のアーキテクチャを使用して実現される必要はなく、実際、それらは異種または同種の構成のいずれであってもよい。主処理ユニット102Aは、サブ処理ユニット102B〜102Dに対してローカルに、例えば、同一チップ、同一のパッケージ、同一の回路基盤、同一の製品に位置してもよいことに注意する。代替的に、主処理ユニット102Aは、サブ処理ユニット102B〜102Dに対してリモートに、例えば、バスやインターネットのような通信ネットワークなどを介して接続可能な異なる製品に位置してもよい。同様に、サブ処理ユニット102B〜102Dは、互いにローカルにまたはリモートに位置してもよい。
主処理ユニット102Aを使用してサブ処理ユニット102B〜102Dによるデータおよびアプリケーションの処理をスケジューリングし調整する(orchestrate)ことで、サブ処理ユニット102B〜102Dは、並列に独立してこれらのデータおよびアプリケーションの処理を実行する。しかしながら、本発明の一部の態様によれば、主処理ユニット102Aは、サブ処理ユニットの間のプロセッサタスクの実行をスケジューリングする中心的な役割を果たさない。むしろ、そのようなスケジューリングは、SPU自身に任されることが好ましい。
図1のプロセッサ102に対する役割および機能の割り当ては柔軟的である。例えば、プロセッサ102のいずれもが主処理ユニットまたはサブ処理ユニットであってよい。
図2を参照して、主処理ユニット102Aは、特にSPUの間でのプロセッサタスクのスケジューリングおよび管理に関して、SPU102B〜102Fに対するサービスプロセッサの役割を担うことが好ましい。本発明のいくつかの態様によれば、主処理ユニット102Aは、ソフトウェアアプリケーションの範囲内に含まれるプロセッサタスクを評価することができ、共有メモリ106の割り当て、SPUの割り当て、および共有メモリ106内のプロセッサタスク110の最初の記憶に関わることができる。共有メモリ106の割り当てに関して、主処理ユニット102Aは、所与の数のプロセッサタスク110に割り当てられるべきメモリ空間の量を決定することが好ましい。この点に関して、主処理ユニット102Aは、いくつかのプロセッサタスク110の記憶用に共有メモリ106の第1の領域106Aを割り当て、他のプロセッサタスク110の記憶用に共有メモリ106の第2の領域106Bを割り当ててもよい。主処理ユニット102Aは、共有メモリ106内の領域106Aおよび領域106Bそれぞれにおけるデータ同期に関するルールを設定することもできる。
本発明の一つまたは複数のさらなる態様によれば、共有メモリ106の領域106Aおよび領域106Bには、定められた数のサブ処理ユニット102のみアクセスすることができる。例えば、共有メモリ106の所与の領域の中に格納される特定のプロセッサタスク110を実行するために割り当てられるサブ処理ユニット102のみアクセスすることができる。例えば、サブ処理ユニット102B〜102Dのみが、共有メモリ106の第1の領域106A内のプロセッサタスク110へのアクセスが許可されていることが好ましい。同様に、サブ処理ユニット102E〜102Fのみが、共有メモリ106の第2の領域106B内のプロセッサタスク110へのアクセスが許可されていることが好ましい。共有メモリ106の各領域106Aおよび106Bを保護する技術に関するさらなる詳細は、「ブロードバンドネットワーク用のコンピュータアーキテクチャのメモリ保護システムおよび方法」と題する米国特許第6,526,491号に見いだすことができ、その全ての開示は参照により本明細書に援用される。
本発明の一つまたは複数の態様によると、プロセッサタスク110が共有メモリ106内に配置され、サブ処理ユニット102がタスクの実行を割り当てられた後、主処理ユニット102Aは、プロセッサタスク110の実行のスケジューリングおよび管理に参加しないことが好ましい。代わりに、それらの責任は関係する特定のサブ処理ユニット102に任される。
本発明の様々な実施形態のプロセッサタスク管理特徴に関してさらに詳細を述べる前に、マルチプロセッサシステムを実装するための好適なコンピュータ・アーキテクチャについて説明する。この点に関して、図3の基本処理モジュールまたはプロセッサ要素(processor element:PE)200のブロック図を参照する。このコンピュータアーキテクチャによると、マルチプロセッサシステムの全てのサブプロセッサは、共通のコンピューティングモジュール(またはセル)から構成される。この共通のコンピューティングモジュールは、一貫した構造を有し、好ましくは同一の命令セットアーキテクチャを使用する。本発明の別の実施形態では、サブ処理ユニットは異種の構成であってもよい。マルチプロセッサシステムは、一つまたは複数のクライアント、サーバ、PC、モバイルコンピュータ、ゲーム機、PDA、セットトップボックス、機器、デジタルテレビ、およびコンピュータプロセッサを使用する他の装置から形成することができる。
基本処理モジュールは、プロセッサ要素(PE)である。図3に示すように、PE200は、I/Oインタフェース202、処理ユニット(processing unit:PU)204、ダイレクト・メモリ・アクセス・コントローラ(DMAC)206、複数のサブ処理ユニット208、すなわち、サブ処理ユニット208A、サブ処理ユニット208B、サブ処理ユニット208Cおよびサブ処理ユニット208Dを含む。ローカル(または内部)PEバス212は、PU204、サブ処理ユニット208、DMAC206およびメモリインタフェース210の間でデータおよびアプリケーションを送信する。ローカルPEバス212は、例えば、従来のアーキテクチャを有することができ、またはパケットスイッチネットワークとして実現することもできる。パケットスイッチネットワークとして実現すると、より多くのハードウェアを必要とするが、利用可能な帯域幅を増加することができる。
PE200は、デジタルロジックを実装する様々な方法を使用して構成されることができる。しかしながら、PE200は、シリコン基板上の相補型金属酸化膜半導体(CMOS)を使用する単一の集積回路として構成されることが好ましい。基板の代替的材料はガリウム・ヒ素、ガリウム・アルミニウム・ヒ素および多様なドーパントを使用するいわゆるIII−B合成物を含む。PE200は、超電導材料、例えば高速単一磁束量子(RSFQ)論理回路を使用して実現することもできる。
PE200は、高帯域幅のメモリ接続216を通して、ダイナミック・ランダム・アクセス・メモリ(DRAM)214と密接に関連する。DRAM214は、PE200用のメインメモリ(または共有メモリ)として機能する。DRAM214は好ましくはダイナミック・ランダム・アクセス・メモリであるが、例えば、スタティック・ランダム・アクセス・メモリ(SRAM)、磁気ランダム・アクセス・メモリ(MRAM)、光学メモリ、ホログラフィック・メモリなどの他の手段を使用して実現することもできる。DMAC206およびおよびメモリインタフェース210は、DRAM214と、PE200のサブ処理ユニット208およびPU204との間のデータの転送を容易にする。DMAC206および/またはメモリインタフェース210は、サブ処理ユニット208およびPU204に対して一体的にまたは別々に配置されていてもよい点に注意する。実際、図示のように別々の構成とする代わりに、DMAC206の機能および/またはメモリインタフェース210の機能は、サブ処理ユニット208およびPU204の一つまたは複数(好ましくは全て)と一体であってもよい。
例えば、PU204は、データおよびアプリケーションを独立して処理することができる標準のプロセッサであってもよい。サブ処理ユニット208は、好ましくは単一命令マルチデータ(SIMD)プロセッサである。サブ処理ユニット208は、並行にまたは独立して、データおよびアプリケーションの処理を実行することが好ましい。DMAC206は、PU204およびサブ処理ユニット208による、共有DRAM24に格納されるデータおよびアプリケーション(例えば、プロセッサタスク110)へのアクセスを制御する。PU204は、主処理ユニットの役割を引き受けているサブ処理ユニット208のうち一つにより実現されてもよいことに注意する。
このモジュール構造にしたがって、特定のコンピュータシステムによって使用されるPE200の数は、そのシステムによって必要とされる処理能力に基づいて決まる。例えば、サーバは4つのPE200を使用することができ、ワークステーションは二つのPE200を使用することができ、PDAは一つのPE200を使用することができる。特定のアプリケーションを処理すべく割り当てられるPE200のサブ処理ユニットの数は、セル内のプログラムおよびデータの複雑さおよび大きさによって決まる。
図4は、サブ処理ユニット208の好適な構造および機能を示す。サブ処理ユニット208は、ローカルメモリ250、レジスタ252、一つまたは複数の浮動小数点ユニット254、および一つまたは複数の整数ユニット256を備える。しかしながら、必要とされる処理能力によって、より多数のまたはより少数の浮動小数点ユニット254および整数ユニット256を使用してもよい。浮動小数点ユニット254は、好ましくは一秒につき320億回の浮動小数点演算(32GFLOPS)をする速度で動作し、整数ユニット256は、好ましくは一秒につき320億回の演算(32GOPS)をする速度で動作する。
好ましい実施形態では、ローカルメモリ250は256キロバイトの記憶装置を含み、レジスタ252の容量は128×128ビットである。プロセッサタスク110が共有メモリ214を使用して実行されない点に注意する。むしろ、タスク110は、所与のサブ処理ユニット208のローカルメモリ250にコピーされ、ローカルに実行される。
ローカルメモリ250は、キャッシュメモリであってもキャッシュメモリでなくてもよい。好ましくは、ローカルメモリ250はスタティック・ランダム・アクセス・メモリ(SRAM)として構成される。PU204は、PU204により起動されるダイレクトメモリアクセスのために、キャッシュ整合性サポートを必要としてよい。しかしながら、キャッシュ整合性サポートは、サブ処理ユニット208によって起動されるダイレクトメモリアクセス、または、外部装置との間でのアクセスについては、不要である。
サブ処理ユニット208は、サブ処理ユニット208との間でデータおよびアプリケーションを送受信するためのバスインタフェース(I/F)258をさらに含む。好ましい実施形態では、バスI/F258はDMAC206に連結される。DMAC206は、サブ処理ユニット208内に一体的に配置することもでき、あるいは外部に配置することもできることを示すよう、図3では点線で描かれている。一対のバス268A、268Bは、バスI/F258とローカルメモリ250の間でDMAC206を相互接続する。バス268A、268Bは、好ましくは256ビット長である。
サブ処理ユニット208は、内部バス260、262および264をさらに含む。好ましい実施形態では、バス260は256ビットの幅を有し、ローカルメモリ250およびレジスタ252の間の通信を提供する。バス262および264は、それぞれ、レジスタ252と浮動小数点ユニット254の間、レジスタ252と整数ユニット256の間の通信を提供する。好ましい実施形態では、レジスタ252から浮動小数点ユニットまたは整数ユニットに向かうバス264と262のバス幅は384ビットであり、浮動小数点ユニット254または整数ユニット256からレジスタ252に向かうバス264および262のバス幅は、128ビットである。浮動小数点ユニット254または整数ユニット256からレジスタ252へのバス幅より、レジスタ252から両ユニットへのバス幅が大きいため、処理の間、レジスタ252からより大きいデータフローを収容する。各計算のために、最大で3ワードが必要である。しかしながら、各計算の結果は、通常1ワードのみである。
本発明の様々なプロセッサタスク管理特徴に戻り、図2を参照して、実行のために共有メモリ106からSPU102のローカルメモリの一つにいずれのプロセッサタスク110をコピーすべきかを決定するために、サブ処理ユニット102はタスクテーブルを利用することが好ましい。この点に関して、図5を参照する。図5は、本発明の様々な態様により利用可能なタスクテーブル280の概念的な説明である。タスクテーブル280は、好ましくは共有メモリ106に格納される。タスクテーブル280の初期化方法の詳細は、後述する。タスクテーブル280は、複数のタスクテーブルエントリT1、T2、T3その他を含むことが好ましい。各タスクテーブルエントリは、例えば、タスクテーブルエントリをプロセッサタスク110に関係付ける連想アドレス指定または他の手段によって、プロセッサタスク110(図2参照)の一つに関連付けられるのが好ましい。
好ましい実施形態では、各タスクテーブルエントリは、ステータス表示(STAT)、優先度表示(PRI)、および一対のポインタ(PREV、NEXT)のうちの少なくとも一つを含んでもよい。STATは、所与のタスクテーブルエントリに関連付けられるプロセッサタスクが、一つまたは複数のサブ処理ユニットによって実行される準備ができている(READY)か、または実行中(RUNNING)であるかについての表示を提供することが好ましい。PRIは、関連するプロセッサタスク110の優先度についての表示を提供することが好ましい。プロセッサタスク110と関連付けられる優先度は任意の数であってよく、これは、ソフトウェアプログラマが設定してもよいし、または、ソフトウェアアプリケーションの実行によって後で設定することもできる。いずれにしても、プロセッサタスク110の優先度は、プロセッサタスクが実行される順序を設定するために利用されることができる。PREV値は、リンク付けされたタスクテーブルエントリの順序付きリスト(または、プロセッサタスクのリスト)において、前のタスクテーブルエントリ(または、前のプロセッサタスク110)へのポインタであることが好ましい。NEXT値は、リンク付けされたタスクテーブルエントリの順序付きリスト(または、プロセッサタスクのリスト)において、次のタスクテーブルエントリ(またはプロセッサタスク)へのポインタであることが好ましい。
本発明の一つまたは複数の態様によると、タスクテーブル280は、プロセッサタスク110が実行のために共有メモリ106からコピーされる順序を決定するために、サブ処理ユニット208によって利用されることが好ましい。例えば、マルチプロセッサシステム100または200上のソフトウェアアプリケーションを適切に実行するために、特定のプロセッサタスク110は、特定の順序、すなわち少なくとも一般的な順序、つまりT1、T8、T6、T9の順序で実行される必要があってもよい。プロセッサタスク配列のこの実施例を反映するために、タスクテーブル280は、拡張プロセッサタスクによる、タスクテーブルエントリのリンク付きリストを作成するタスクテーブルエントリのPREV部分およびNEXT部分におけるポインタを含むことが好ましい。上記例の特殊性によると、タスクテーブルエントリT1は、タスクテーブルエントリT8をポイントするNEXT値を含む。タスクテーブルエントリT8は、タスクテーブルエントリT1をポイントするPREV値と、タスクテーブルエントリT6をポイントするNEXT値を含む。タスクテーブルエントリT6は、タスクテーブルエントリT8をポイントするPREV値と、タスクテーブルエントリT9をポイントするNEXT値を含む。タスクテーブルエントリT9は、タスクテーブルエントリT6をポイントするPREV値を含む。
図6を参照して、上記例のタスクテーブルエントリのリンク付きリストは、状態図として概念的に示すことができる。この状態図において、タスクテーブルエントリT1に関連付けられる特定のプロセッサタスクからの遷移が、タスクテーブルエントリT8に関連付けられている別のプロセッサタスクの選択および実行を引き起こす。タスクテーブルエントリT8に関連付けられるプロセッサタスクからの遷移が、タスクテーブルエントリT6に関連付けられるプロセッサタスクの選択および実行を引き起こし、以下同様である。第1の、または先頭のタスクテーブルエントリT1が、タスクテーブルエントリT9をポイントするPREV値を含むことを保証し、また、タスクテーブルエントリT9がタスクテーブルエントリT1をポイントするNEXT値を含むことを保証することによって、タスクテーブルエントリ(および/またはプロセッサタスク自身)の循環的な関連を達成することができる。
動作中、共有メモリ106のプロセッサタスク110(好ましくは所与の領域106Aまたは106B内の)のプールを実行するために割り当てられるそれぞれのサブ処理ユニット102は、いずれのプロセッサタスク110が実行のために次に占有されるかを判定するために、まず、タスクテーブル280にアクセスする。リンク付きリストの最初のまたは先頭のエントリの特定に役立てるために、サブ処理ユニット102は、図7に概念的に示すタスクキュー282へのアクセスを有することが好ましい。タスクキュー282は、関連するプロセッサタスク110それぞれの優先度のためのエントリを含むことが好ましい。各エントリは、HEADポインタおよびTAILポインタのうちの少なくとも一つを含むことが好ましい。
図6をさらに参照して、例示的なリンク付きリストの状態図は、優先度1を有するプロセッサタスク110を表している。実際、エントリT1、T8、T6およびT9のタスクテーブルエントリ(図5)は、それぞれ「1」のPRI値を含む。
優先度1と関連するタスクキューエントリのHEADポインタとTAILポインタは、それぞれ、タスクテーブルエントリT1とタスクテーブルエントリT9へのポインタを含む。タスクキュー282の他のエントリは、他のリンク付きリスト用の他の優先度のHEADポインタおよびTAILポインタと関連付けられる。このように、本発明の様々な実施形態は、(拡張プロセッサタスクによって)タスクテーブルエントリの多数のリンク付きリストを含むことができ、各リンク付きリストは同一のまたは少なくとも類似の優先度を含むことを考慮する。それぞれのサブ処理ユニット102は、タスクテーブル280とタスクキュー282を利用して、いずれのプロセッサタスク110が、実行のために共有メモリ106からコピーされるべきかについて決定することが好ましい。それぞれのリンク付きリストが作成され適切に維持されると仮定すると、ソフトウェア・アプリケーション全体の実行時に所望の結果を達成するために、プロセッサタスク110は適切な順序で実行されることができる。
本発明の様々な態様によると、サブ処理ユニット102は、ソフトウェアアプリケーションの実行の間、タスクテーブル280とタスクキュー282を維持し修正する。この点に関して、図8から図10を参照する。これらは、本発明の一つまたは複数の望ましい特徴を達成するのに適したプロセスフローを表すフロー図である。アクション300で、特定のサブ処理ユニット102が呼び出されて、プロセッサタスク110を共有メモリ106から自身のローカルメモリにコピーし始める。アクション302で、サブ処理ユニット102はタスクキュー282をロックし、タスクキュー282を自身のローカルメモリにコピーする。その後、タスクキュー282は、最も高い優先度の準備ができたタスクを求めて検索される(アクション304)。図7で示した実施例を使用すれば、タスクキュー282は、最高の優先度、例えば優先度1のプロセッサタスクに関連付けられているタスクテーブルエントリT1をポイントするHEADポインタを含む。タスクテーブルエントリT1に関連付けられたプロセッサタスクが実行のために目標とされるので、サブ処理ユニット102は、好ましくはタスクキュー282を修正して、そのプロセッサタスクへの参照を除去する(アクション306)。好ましい実施形態では、これは、タスクテーブルエントリT1へのHEADポインタを、実行のために占有されるべき次のプロセッサタスクを表示する新規な第1の(または先頭の)タスクテーブルエントリになる別のタスクテーブルエントリへと修正することを伴う。特に、タスクテーブルエントリT1のNEXTポインタが、優先度1の新たなHEADポインタとして用いられてもよい。実際、図6に示したように、タスクテーブルエントリT1に関連するプロセッサタスクが実行中である(RUNNING)と、もはや準備のできた(READY)状態ではなく、状態図から除去されなければならない。状態図の先頭のエントリとして、タスクテーブルエントリT8を残さなければならない。タスクテーブルエントリT1がもはやREADY状態図の一部でないとき、タスクテーブルエントリT8のPREVポインタはタスクテーブルエントリT9をポイントするように修正されてもよい。このように、アクション308において、タスクテーブルが修正可能となるように、タスクテーブルはラベル付けされSPU102のローカルメモリにコピーされる。同様に、タスクテーブルエントリT9のNEXTポインタは、タスクテーブルエントリT8をポイントするように修正されてもよい。
本発明の好ましい態様によると、SPU102は、タスクテーブルエントリT1のSTAT値をREADYからRUNNINGに修正することが好ましい(図9のアクション310)。アクション312として、次のタスクを呼び出すためにSPU102がコール(アクション300)された時点で、SPU102が前のタスクを実行しているかに関しての判定がなされることが好ましい。SPU102上で動作中の前のタスクが他のタスクに譲るとき、これが生じてもよい。本実施例のために、前のタスクが次のプロセッサタスク110に実行権を譲渡(yield to)せず、さらに、アクション312における判定の結果が否定であったと仮定する。したがって、プロセスフローは好ましくはアクション318へ進む。ここで、SPU102は、修正されたタスクキュー282と修正されたタスク・テーブル280を共有メモリ106に書き戻す。この時点で、タスクテーブル280とタスクキュー282は更新され、他のサブ処理ユニット102によってコピーおよび修正されてもよいように、好ましい同期化技術にしたがってロックが解除される。
前のプロセッサタスク110が次のプロセッサタスクに実行権を譲渡したときのように、アクション312における判定結果が肯定である場合、プロセスフローは好ましくはアクション314へ進む。そこで、SPUは、好ましくは、実行権を譲渡するプロセッサタスクに関連付けられているタスクテーブルエントリのSTAT値を、RUNNINGからREADYに修正する。さらに、SPUは、実行権を譲渡するプロセッサタスクを適当なリンク付きリストに再導入(reintroduce)するために、実行権を譲渡するプロセッサタスクに関連するタスクテーブルエントリを含む様々なタスクテーブルエントリのPREVポインタとNEXTポインタを修正してもよい。好ましくは、関連するタスクテーブルエントリのPRI値に反映されるように、実行権を譲渡するプロセッサタスク110の優先度を参照することによって、これが達成される。アクション316で、プロセッサタスクが後に占有されてもよいように、実行権を譲渡するプロセッサタスクが共有メモリ106に書き込まれてもよい。その後、プロセスフローはアクション318へ進む。そこで、タスクキュー282とタスクテーブル280は、共有メモリ106に書き戻される。
アクション320(図10)で、次のプロセッサタスク110(例えば、タスクテーブルエントリT8に関連するプロセッサタスク)は、サブ処理ユニット102によって共有メモリ106から自身のローカルメモリにコピーされる。アクション322で、サブ処理ユニット102は、新たなプロセッサタスク110の実行に使用するため、(例えば、新たなプロセッサタスクと関連する任意のデータを有する)自身のレジスタを復元および/または更新することが好ましい。最後に、アクション324で、新たなプロセッサタスク110は、サブ処理ユニット102によって実行される。
上記アクションは例示を目的としてのみ示されており、当業者は、本発明の趣旨および範囲から逸脱することなくこれらのアクションの順序を修正可能であることを理解するであろう。例えば、後述するように、プロセッサタスクが共有メモリからコピーされ共有メモリに書き戻される順序、および、タスクテーブルとタスクキュー282が利用される順序は、望ましい結果を達成するために修正可能である。
上述のように、主処理ユニット102Aは、プロセッサタスク110の実行および管理がサブ処理ユニット102によって対処可能となる状態にシステムを準備するために、システムの初期段階の間に利用されることが好ましい。サブ処理ユニット102も、第1インスタンスでタスクテーブル280とタスクキュー282を作成するために、初期化ルーチンを実行することが好ましい。これらの初期化プロセスを、図11のフロー図に示す。
アクション350で、サービスプロセッサ(例えば、主処理ユニット102)は、システム上で実行されるソフトウェアアプリケーションを評価して、プロセッサタスク110を実行する複数のサブ処理ユニット102を割り当てる。プロセスフローは、好ましくはアクション352へ進み、そこで、サービスプロセッサがソフトウェアアプリケーションを評価して、プロセッサタスク110を受け取るために共有メモリ106の一つまたは複数の部分を割り当てる。アクション354で、アクション352で実行された任意のメモリ・アロケーションにしたがって、プロセッサタスク110が共有メモリ106にロードされる。初期化プロセスのこの段階においては、サービスプロセッサは、メンテナンスおよび/またはサブ処理ユニット102の間でのプロセッサタスクの配分に関与していないことが好ましい。
プロセスフローは、好ましくはアクション356へ進む。そこで、サブ処理ユニット102は互いを初期化し、いずれのSPUが第1インスタンスにおいてタスクテーブル280とタスクキュー282を準備するかを決定する。アクション358で、タスクテーブル280とタスクキュー282を作成する責任を有したサブ処理ユニット102は、この種の情報を準備して、同じものを共有メモリ106に格納する。例えば、タスクテーブル280とタスクキュー282の初期化は、好ましくは、各SPUカーネルに最初のタスクを実行させることによって行われることが好ましい。以下に示すプログラム「init.c」は、各SPUによって実行される最初のタスクの好適な実施例である。
#include <spurs.h>
#include "task_instance.h"
int
main()
{
spurs_beggin_init();
if(spurs_get_spu_id() = = 0){
spurs_create_task(melchior);
spurs_create_task(balthasar);
spurs_create_task(caspar);
spurs_start_task(melchior);
spurs_start_task(balthasar);
spurs_start_task(caspar);
}
spurs_end_init();
return 0;
}
このプログラムにおいて、「melchior」、「balthasar」および「caspar」は非常に初期のタスクの名称であり、これらは典型的なスタートアップタスクである。SPUカーネルの全てがこの初期タスクinit.cを実行する。しかし、一つのSPU(ID0を持つSPU)だけは、if(spurs_get_spu_id () = = 0)のコードラインで指定されるこれらのタスクを実行する。他のSPUの全て、例えば異なるIDを持つSPUの全ては、spurs_end_init()で待機する。このように、各SPUカーネルは最初のタスクを実行し、この最初のタスクが終了した後、本明細書で述べるように、SPUカーネルは次のタスクの検索を開始する。
上述のように、サービス・プロセッサとして動作する主処理ユニット102は、一つまたは複数のプロセッサタスク110をグループとして指定してもよいことに注意する。これは、初期化段階の間に実行されることが好ましい。例えば、二つ以上のプロセッサタスク110が互いに緊密に通信する必要があってもよく、したがって、それらがタスクグループ内でグループ化されている場合、プロセッサタスクをより効率的に実行することができる。暗号化プログラムは、プロセッサタスクが一つ以上のタスクグループに形成されている場合、緊密に通信しより効率的に実行されるプロセッサタスクを含むことができるアプリケーションの一例である。
本発明のプロセッサタスク管理の特徴を利用して、主処理ユニット102Aが、特定のサブ処理ユニット102またはサブ処理ユニット102のグループのデバイスドライバをオフロード(off-load)するのを助けることができる。例えば、ギガビットイーサネットハンドラ(イーサネットは登録商標)のようなネットワークインタフェースは、CPUパワーの80%まで利用することができる。ネットワークインタフェースが主処理ユニット102Aによってのみ実行される場合、主処理ユニットは102Aは、他のサービス指向の処理タスクをするために利用することができない。したがって、主処理ユニットが102Aが、一つまたは複数のサブ処理ユニット102にネットワークインタフェースプログラムをオフロードすることは、有益でありえる。主処理ユニット102Aは、ネットワークインタフェースの処理タスクを共有メモリ106に配置し、これを実行する一つまたは複数のサブ処理ユニット102を割り当てることによって、この結果を達成してもよい。それに応じて、SPUは、そのようなプロセッサタスクの実行を管理しスケジューリングするのに適したタスクテーブル280とタスクキュー282を形成してもよい。したがって、有利なことには、主処理ユニット102Aは、より多くのCPUパワーを他のタスクの実行に充てることができる。主処理ユニット102Aは、また、例えばデジタルテレビデバイスドライバなどの他のデバイスドライバをオフロードしてもよい。SPUにオフロードさせるための好ましい候補である他のデバイスドライバは、重いプロトコルスタックを有するものである。例えば、HDDレコーダなどのリアルタイム高速アクセスデバイス用のドライバは、オフロードされると有利である。オフロードされてもよいタスクの他の実施例には、仮想プライベートネットワークおよびIP(例えばVoIP)アプリケーションを介したマルチメディアに使用されるネットワークパケット暗号化/解読タスクが含まれる。
図12を参照して、プロセッサタスクのステータスの状態図の一例を示す。タスク状態は、実行(RUNNING)状態、準備(READY)状態、ブロック(BLOCKED)状態、休止(DORMANT)状態、および不在(NON−EXISTENT)状態の5つのカテゴリに分類することができる。プロセッサタスクは、現在実行中であるときは、実行(RUNNING)状態にある。ある条件下では、プロセッサタスクは、例えば割り込みの間、タスクコンテクストがなくても、実行状態を維持することができる。プロセッサタスクは、タスクの実行の準備ができているが、より高い優先順位を有する一つまたは複数のプロセッサタスクが既に実行されており、またサブ処理ユニットがタスクの占有のために利用できないため、実行することができないときに、準備(READY)状態にある。準備状態のプロセッサタスクの優先度が共有メモリ106の準備状態タスクのプールの中で十分に高い場合、サブ処理ユニットはそのプロセッサタスクを占有しそれを実行してもよい。このように、タスクがディスパッチされる(dispatch)とき、プロセッサタスクの状態は準備状態から実行状態に変化してもよい。反対に、この種のタスクがプリエンプティブ実行(先取り)されるかまたはその実行の間に侵害される場合、実行状態のタスクは準備状態に変化してもよい。プロセッサタスクのプリエンプティブ実行の実施例は、一つのプロセッサタスクが別のタスクに実行権を譲渡することに関連して、既に述べた。
ブロック状態カテゴリは、待機(WAITING)状態、中断(SUSPENDED)状態、および待機中断(WAITING−SUSPENDED)状態を含んでもよい。タスクの実行を継続する前に特定の条件が満足されなければならないことを規定するサービスコールの呼び出しのために、タスクがブロックされるとき、プロセッサタスクは待機(WAITING)状態にある。このように、タスクの実行状態は、サービスコールの呼び出し時に待機状態に変化してもよい。待機状態のプロセッサタスクは、規定された条件が満足するとき準備状態に解放されてもよく、これによって、その後に、処理中のタスクがサブ処理ユニット102に占有されることが可能になる。タスクが強制的に停止される(タスクそれ自身が呼び出してもよい)とき、プロセッサタスクは実行状態から中断(SUSPENDED)状態に入ってもよい。同様に、準備状態のプロセッサタスクは、強制されたアクションによって中断状態に入ってもよい。このようなプロセッサタスクの強制的な停止が開放されるとき、中断状態のプロセッサタスクが再開され準備状態に入ってもよい。プロセッサタスクは、タスクが満足するべき条件を待機しておりまた強制的に中断させられているとき、待機中断(WAITING−SUSPENDED)状態にある。したがって、待機中断状態のプロセッサタスクは、プロセッサタスクの強制的中断時に待機状態に入ってもよく、ここでプロセッサタスクは満足すべき条件を待機する。
タスクが実行されていないかまたは既にその実行を終了したとき、プロセッサタスクは休止(DORMANT)状態にある。休止状態のプロセッサタスクは、適当な状況の下で準備状態に入ってもよい。不在(NON−EXISTENT)状態は、例えば、タスクがまだ作成されていなかったりまたは既に削除されているなどによって、タスクがシステム内に存在しないいわゆる仮想状態を指す。
準備状態へ移動したタスクが実行状態のタスクより高い優先順位(または、優先度)を有する場合、より低い優先順位のタスクが準備状態へ移動し、より高い優先度のタスクがディスパッチされて実行状態へ移動することが好ましい。この状況において、より低い優先度のタスクは、より高い優先度のタスクによってプリエンプティブ実行されている。
ノン・プリエンプティブな(non-preemptive)、優先度に基づくタスクスケジューリングは、プロセッサタスクに割り当てられた優先度に基づいてなされる。同じ優先度を有する多くのプロセッサタスクがある場合、スケジューリングは、最初に来て最初に役立つ(first-come, first-served:FCFS)ことを基準に実行される。このタスクスケジューリングの規則は、タスク優先度に基づいたタスク間の優先順位を使用して定められてもよい。実行可能なタスクが存在する場合、せいぜい、高い優先順位のタスクと同数の割り当てられたサブ処理ユニット102が実行状態にある。実行可能なタスクの残りは、準備状態にある。異なる優先度を有するタスクの中で、最も高い優先度を有するタスクは、より高い優先順位を有する。同じ優先度のタスクの中で、最も早く実行可能な(実行中または準備ができている)状態に入ったプロセッサタスクは、より高い優先順位を有する。しかしながら、同じ優先度のタスク間の優先順位は、いくつかのサービスコールの呼び出しのせいで変化してもよい。プロセッサタスクが他のプロセッサタスクに対して優先順位を与えられると、ディスパッチが直ちに発生し、タスクが実行状態に移動することが好ましい。
図13と図14を参照して、本発明の特定の態様にしたがった特定のプリエンプション(preemption)特徴を示す。上述のように、実行状態にあるプロセッサタスク(例えばタスクA)はプリエンプティブ実行されるか、または準備状態にある別のプロセッサタスク(例えばタスクB)に実行権を譲渡してもよい。図13と図14に示すように、タスクAは、実行権の譲渡の時点まで、サブ処理ユニット102で実行されている。この時点で、SPUのカーネルは、共有メモリ106にタスクAをコピーする(タスクAを保存する)よう動作する。その後、タスクBは、共有メモリ106からSPUのローカルメモリにコピーされる(タスクBを復元する)。そして、SPUはタスクBを実行する。この技術は、ローカルメモリの使用量および高い帯域幅については比較的高い性能を享受する一方、実行権を譲渡した時点から最適化されないタスクBの実行の時点までのタスク実行レイテンシが存在する。
図15と図16を参照して、本発明のさらなる態様による代替的方法を示す。このシナリオにおいて、タスクAをローカルメモリから共有メモリ106にコピーする前に、タスクBを共有メモリ106からサブ処理ユニット102のローカルメモリにコピーしてもよい。この点に関して、サブ処理ユニット102は、共有メモリ106からタスクBを特定して読み出すための処置を同時にとりながら、タスクAを実行してもよい。これは、タスクテーブル280とタスクキュー282を共有メモリ106からサブ処理ユニット102Aのローカルメモリにコピーし、それらを用いて次の準備状態のタスク、すなわちタスクBを特定することを伴う。実行権の譲渡の時点で、サブ処理ユニット102Aのカーネルは、ローカルメモリから共有メモリ106にタスクAをコピーするが、これは、上述のようにタスクテーブル280とタスクキュー282を修正することを伴ってもよい。その後、サブ処理ユニット102はタスクBの実行を占有してもよい。この技術は、図13と図14に示した技術と比較して、実行権の譲渡とタスクBの実行との間のレイテンシを大きく削減する。
図17と図18を参照して、本発明の一つまたは複数のさらなる態様にしたがって、実行権の譲渡とタスクBの実行との間のレイテンシをさらに削減することもできる。より詳細には、実行権の譲渡の時点までは、図15と図16に関して先に述べたのと実質的に同様な方法でサブ処理ユニット102が動作してよい。しかしながら、実行権の譲渡の後、サブ処理ユニット102はタスクBの実行を開始するのが好ましい。実質的に同時に、サブ処理ユニット102のカーネルは、タスクAをサブ処理ユニット102のローカルメモリから共有メモリ106にコピーするように動作することが好ましい。タスクBが実行件の譲渡後すぐに実行されるので、図14から図16に示した方法と比較してレイテンシが大きく削減される。
本発明の一つまたは複数の態様によると、サブ処理ユニット102は、実行のためにローカルメモリ内の多数のプロセッサタスクを維持してもよい。これは、図19で示される。多数のプロセッサタスクの実行を管理するために、ローカルメモリは、複数のページとページテーブルを含んでもよい。この方法の利点は、レイテンシがさらに削減できるという点である。但し、その欠点の一つとして、ローカルメモリ内の相当多くの空間がプロセスタスクの実行によって独占される。
図20から図22を参照して、本発明の一つまたは複数の態様によるプロセッサタスクの移動(マイグレーション)を示す。これらの図は、プロセッサタスク、例えばタスクBが、サブ処理ユニットSPU1から別のサブ処理ユニットSPU2に移動される方法を示している。移動は、何らかの条件、例えばそれぞれのプロセッサタスクと関連付けられるそれぞれの優先度に基づいてもよい。本発明のいくつかの態様によれば、一つのサブ処理ユニットから別のサブ処理ユニットへのプロセッサタスクの移動は、プリエンプティブでなくてもよい。言い換えると、プロセッサタスクの移動は、優先度条件とタイミングの結果として自然に起こり、移動を引き起こす何らかの決定に基づくのではない。
このノン・プリエンプティブな移動は、以下の実施例で示すことができる。タスクテーブルを利用している共有メモリ106からプロセッサタスクBが選択され、このタスクテーブルが、実行の準備ができているプロセッサタスクの優先度順序を表す、と仮定する。タスクBは、サブ処理ユニットSPU1上で動作している。同様に、タスクテーブルにしたがって共有メモリ106からプロセッサタスクCが選択され、サブ処理ユニットSPU2上で動作していると仮定する。プロセッサタスクBとプロセッサタスクCが選択された時点で、より高い優先度のプロセッサタスクAは実行の準備ができておらず、したがって実行のために選択されたなかったと仮定する。しかしながら、プロセッサタスクBとプロセッサタスクCが動作している間に、プロセッサタスクAの実行の準備ができると仮定する。
図21を参照して、プロセッサタスクBは、サブ処理ユニットSPU1の実行権を譲渡(yield)してもよい。プロセッサタスクBによるこの譲渡アクションは、実行権の譲渡がソフトウェアアプリケーションの全体的な実行に有益であると判断したプログラマにより発生してもよい。いずれの場合も、サブ処理ユニットSPU1は、共有メモリ106にプロセッサタスクBを書き込み、タスクテーブルを更新することによって、この実行権の譲渡に応答する。サブ処理ユニットSPU1はまた、タスクテーブルにアクセスし、共有メモリ106内の複数のプロセッサタスクのうちいずれをコピーし実行するべきかを判定する。この例では、タスクテーブルによるとプロセッサタスクAが最も高い優先度を持ち、したがって、サブ処理ユニットSP1は、プロセッサタスクAを実行のために共有メモリ106から自身のローカルメモリにコピーする。この時点で、サブ処理ユニットSP1はプロセッサタスクAを実行し、サブ処理ユニットSP2はプロセッサタスクCの実行を継続する。
図22をさらに参照して、プロセッサタスクCは、他のプロセッサタスクにサブ処理ユニットSPU2の実行権を譲渡してもよい。また、この実行権の譲渡は、プログラム命令および/またはプロセッサタスクCの条件によって呼び出されてもよい。いずれの場合も、サブ処理ユニットSP2はプロセッサタスクCを共有メモリ106に書き戻し、タスクテーブルを更新する。サブ処理ユニットSP2はまた、タスクテーブルにアクセスし、実行の準備ができているプロセッサタスクのうちいずれをコピーするかを決定する。この実施例では、プロセッサタスクBが実行の準備ができており、また実行の準備ができている複数のプロセッサタスクの中で最も高い優先度を持つ。したがって、サブ処理ユニットSPU2は、実行のためにプロセッサタスクBを共有メモリ106から自身のローカルメモリにコピーする。
図20に示した処理状況と図22に示した処理状況を比較すると、プロセッサタスクBがサブ処理ユニットSPU1からサブ処理ユニットSPU2に移動したことが分かる。
図23および図24を参照して、本発明のプリエンプティブなマルチタスク態様を示す。本発明のこれらの態様は、例えばサブ処理ユニットSPU2であるサブ処理ユニット上で実行中の低い優先度のプロセッサタスクが、より高い優先度のプロセッサタスク、例えばプロセッサタスクAでプリエンプティブに置換されてもよいことを述べる。より詳細には、プロセッサタスクBはサブ処理ユニットSPU1上で動作していてもよいし、プロセッサタスクCはサブ処理ユニットSPU2(図23)上で動作していてもよい。その後、より高い優先度タスク、つまりタスクAの実行の準備ができるようになってもよい。これは、システムの他のサブ処理ユニットによる何らかのアクションを原因として発生してもよい。
説明のため、例えばプロセッサタスクBの実行の結果として、サブ処理ユニットSPU1がタスクAのステータスを実行状態に変更したと仮定する。その結果、サブ処理ユニットSPU1は、プロセッサタスクAの優先度が、他のサブ処理ユニット上で動作中のプロセッサタスクのあらゆる優先度より高いか否かについての判定をすることが好ましい。この単純化されたケースにおいて、サブ処理ユニットSPU1は、プロセッサタスクAがプロセッサタスクCより高い優先度を持つか否かについて判定を行う。優先度が高い場合、サブ処理ユニットSPU1は、少なくともプロセッサタスクCをプロセッサタスクAで置換することを開始する。言い換えると、 サブ処理ユニットSPU1は、プロセッサタスクCにサブ処理ユニット102を明け渡してプロセッサタスクAに与えさせる。この点に関して、サブ処理ユニットSPU1のカーネルは、サブ処理ユニットSPU2のカーネルに割り込みを発行してもよい。割り込みに応答して、サブ処理ユニットSPU2は、共有メモリ106にプロセッサタスクCを書き戻して、タスクテーブル(図24)を更新してもよい。サブ処理ユニットSPU2はまた、実行のためにプロセッサタスクAを共有メモリから自身のローカルメモリにコピーしてもよい。
図25と図26を参照して、本発明の特定の直接移動態様を示す。これらの態様は、サブ処理ユニットの一つで実行中のより高い優先度のプロセッサタスクが、より低い優先度のプロセッサタスクを実行している別のサブ処理ユニットに移動されてもよいことを述べる。この移動は、より高い優先度のプロセッサタスクを実行しているサブ処理ユニットによって受け取られる直接の割り込みに応答してなされてもよい。図25を参照して、サブ処理ユニットSPU1は、他のいくつかのタスクを実行しなければならないことを示す割り込みを受け取ってもよい。この割り込みは、サブ処理ユニットSPU1に、システムの他のサブ処理ユニットのいずれがより低い優先度のプロセッサタスクを実行しているかについての判定をさせるようにしてもよい。その場合、このようなサブ処理ユニットは、より高い優先度の処理タスクを支持して、プロセッサタスクの実行権を譲渡してもよい。より詳細には、サブ処理ユニットSPU1は、サブ処理ユニットSPU2がプロセッサタスクAより低い優先度のプロセッサタスク(例えばプロセッサタスクB)を実行していると判定する場合、サブ処理ユニットSPU1のカーネルは、サブ処理ユニットSPU2のカーネルに割り込みを発行することが好ましい。割り込みに応答して、サブ処理ユニットSPU2は、プロセッサタスクBを自身のローカルメモリから共有メモリ106に書き戻して、タスクテーブルを更新する。サブ処理ユニットSPU2はまた、実行のためにプロセッサタスクAをサブ処理ユニットSPU1のローカルメモリから自身のローカルメモリにコピーする(または、移動する)ことが好ましい。
図27は、処理ユニット(PU)が本発明の一態様にしたがって割り込みを処理する方法について示す。第1のステップにおいて、PUは割り込みを受け取る。PUは、いずれのサブ処理ユニット(この場合、SPU0、SPU1、SPU2のグループ)が最も低い優先度を有しているかを判定する。そして、PUは最も低い優先度を有するSPUに割り込みを送信する。図27の場合、SPU2が最も低い優先度を持つので、PUはSPU2に割り込みを送信する。
本発明の一つまたは複数のさらなる態様によると、サブ処理ユニットの一つから別のサブ処理ユニットへの割り込みは、多数の方法で処理することができる。図28を参照して、本発明の一実施形態において、一つのサブ処理ユニットが、システム内の他のサブ処理ユニットのいずれかに対する割り込みを管理するよう指定されていてもよい。指定されたサブ処理ユニットは、このようなタスク移動割り込みの全てを受け取り、それらを自ら処理するか、または他のサブ処理ユニットにその割り込みを渡すかについて判定をする。例えば、割り込みが指定されたサブ処理ユニットに向けられたものであった場合、指定されたサブ処理ユニット自身でその割り込みを処理してもよい。代替的に、割り込みが指定されたサブ処理ユニットに向けられたものでなかった場合、指定されたサブ処理ユニットは、その割り込みを、最も低い優先度のプロセッサタスクを実行しているサブ処理ユニットに送信してもよい。
図29は、分散割り込み処理スキームが使用される別の方法を示す。この技術によると、それぞれの割り込みは各サブ処理ユニットに割り当てられる。例えば、割り込みAがサブ処理ユニットSPU0に割り当てられてもよい。割り込みB、Cがサブ処理ユニットSPU1に割り当てられ、割り込みD、E、Fがサブ処理ユニットSPU2に割り当てられてもよい。
図23から図26を参照して述べた説明では、システムの他のサブ処理ユニット上で動作中のるプロセッサタスクの優先度を、サブ処理ユニットが判定可能である必要があった。本発明の一実施形態によれば、サブ処理ユニットは、実行中のプロセッサタスクの優先度を判定する際に、共有のタスク優先度テーブルを利用してもよい。共有タスク優先度テーブルは共有メモリに置かれていてもよく、サブ処理ユニット識別子およびプロセッサタスク優先度識別子のための複数のエントリを含んでいてもよい。例えば、サブ処理ユニット識別子は、サブ処理ユニットに固有の数字および/または英数字のコードであってもよい。プロセッサタスク優先度識別子は、好ましくは、実行中の特定のプロセッサタスクの優先度を示す。共有タスク優先度テーブルの各エントリは、サブ処理ユニット識別子と優先度識別子のペアを含むことが好ましく、これらは、関連付けられたサブ処理ユニット上で実行中の所与のプロセッサタスクの優先度を示す。このように、実行中のプロセッサタスクの優先度を判定しようとしているサブ処理ユニットは、共有タスク優先度テーブルにアクセスして、より低い優先度のプロセッサタスクを実行しているサブ処理ユニットを発見してもよい。最も低い優先度のプロセッサタスクを実行中のサブ処理ユニットが特定されて、より高い優先度のプロセッサタスクに実行権を譲渡することが好ましい。
本発明の他の実施形態は、サブ処理ユニットが、いずれのサブ処理ユニットが最も低い優先度のプロセッサタスクを実行中かを表す共有変数を利用することを提供する。優先度の正確な表示が保証されるように、共有変数の使用は微少更新プロセス(atomic update process)を通して達成されることが好ましい。代替的な方法は、一つのサブ処理ユニットから別のサブ処理ユニットに順次送信される、連続したメッセージを利用してもよい。メッセージは、より低い優先度のプロセッサタスクの優先度識別子とサブ処理ユニット識別子によって更新されてもよい。
図30を参照して、本発明の別の実施形態は、処理能力を強化するために、多数のPE200を結合することによって、プロセッサタスク110を実行するために割り当てられるサブ処理ユニット208の数を増加してもよいことを考察する。例えば、二つ以上のPE200A、200Bは、一つまたは複数のチップパッケージ内などにパッケージングされるか結合されて、一組のマルチプロセッサ装置を形成してもよい。この構成を広帯域エンジン(BE)と称してもよい。BE290は、二つのPE200A、200Bを含み、これらはバス212を介してデータ通信のために相互接続される。PE200A、200Bおよび共有DRAM214の間で通信を可能にするように、追加的なデータバス216が提供されることが好ましい。一つまたは複数の入出力(I/O)インタフェース202A、202Bおよび外部バス(図示せず)は、BE290と任意の外部要素の間の通信を提供する。BE290中のPE200A、200Bは、それぞれ、図3に関して上述したサブ処理ユニット208によって実行される並列で独立したアプリケーションおよびデータの処理に類似の並列で独立の態様で、データおよびアプリケーションの処理を実行する。本発明の様々な態様によれば、BEは単一のPEを備えていても多数のPEを備えていてもよい。さらに、BE自体が複数のBEを含むことで構成されてもよい。
図31を参照する。ここで、基本構成単位としてスタンドアロン型のSPU208、PE200、または複数のPEのセットであるBE290が複数の製品に分散されて、マルチプロセッサシステム500を形成してもよい。コンピュータおよび/またはコンピューティングデバイスとして実装された、システム500の要素またはメンバは、ネットワーク504を介して通信することが好ましい。ネットワーク504は、ローカルエリアネットワーク(LAN)であっても、インターネットや他の任意のコンピュータネットワークのような大域的ネットワークであってもよい。
例えば、ネットワーク504に接続されたメンバは、例えば、クライアントコンピュータ506、サーバコンピュータ508、個人携帯情報機器(PDA)510、デジタルテレビ(DTV)512、または、そのほかの有線または無線ワイヤレスコンピュータおよびコンピューティングデバイスを含む。例えば、クライアント506Aは、一つまたは複数のPE200、または他の適切なマルチプロセッサシステムから構成されるラップトップコンピュータであってもよい。クライアント506Bは、一つまたは複数のPE200、または他の適切なマルチプロセッサシステムから構成されるデスクトップコンピュータ(またはセットトップボックス)であってもよい。さらに、サーバ508Aはデータベース機能を使用した管理要素(administrative entity)であってもよく、これは一つまたは複数のPE200から好ましくは構成される。
したがって、マルチプロセッサシステム500の処理能力は、ローカルに(例えば、一つの製品に)またはリモートに(例えば複数の製品に)配置された複数のPE200に依存してもよい。この点に関して、図30は、本発明の一つまたは複数の態様による全体的なコンピュータネットワークのブロック図である。PE200および/または多数のPEからなるBE290は、コンピュータシステム500の全体的な分散アーキテクチャを実装するために利用することができる。
システム500のサーバ508がクライアント506より多くのデータおよびアプリケーションの処理を実行するので、サーバ508は、クライアント506より多くのコンピュータモジュール(例えばPE200)を含む。他方、PDA510は、この実施例において最小の処理量を実行する。したがって、PDA510は、単一のPE200のように最小数のPE200を含む。DTV512は、実質的にクライアント506とサーバ508の間の処理レベルを実行する。したがって、DTV512は、クライアント506のPEとサーバ508のPEの間の数のPEを含む。
分散マルチプロセッサシステム500に関して、さらに詳細に述べる。システム500の均質的な構成は、適応性、処理速度、処理効率を促進する。システム500の各メンバが同一のコンピューティングモジュール、例えばPE200の一つまたは複数(またはその一部)を使用して処理を実行するので、データおよびアプリケーションの処理がネットワークメンバで共有されてもよいため、データおよび/またはアプリケーションの処理を実行するコンピュータおよびコンピューティングデバイスの特定は、重要でない。システム500により処理されるデータおよびアプリケーションを含むセルアプリケーションを固有に識別することによって、処理が発生した場所にかかわらず、その処理を要求するコンピュータまたはコンピューティングデバイスに処理結果を送信することができる。処理を実行するモジュールが共通の構造を有し、共通の命令セットアーキテクチャを使用するので、プロセッサ間の互換性を得るための追加ソフトウェアレイヤによる計算負荷が省かれる。このアーキテクチャおよびプログラミングモデルは、例えば、リアルタイムでマルチメディアのアプリケーションを実行するのに必要な処理速度を促進する。
システム500により促進される処理速度および処理効率のさらなる利点を得るために、このシステムにより処理されるデータおよびアプリケーションは、固有に識別され一様にフォーマット化されたセルアプリケーション502にパッケージングされてもよい。各セルアプリケーション502は、アプリケーションおよびデータの両方を含み、または含んでもよい。後述するように、各セルアプリケーションはまた、ネットワーク504およびシステム500の全体にわたってセルを識別するためのIDを含む。
セルアプリケーションの構造の均質性、およびネットワーク全体にわたるセルアプリケーションの一様な識別により、ネットワーク504の任意のコンピュータまたはコンピューティングデバイス上でのアプリケーションおよびデータの処理が容易になる。例えば、クライアント506がセルアプリケーション502を実行してもよいが、クライアント506の処理能力が限られているため、セルアプリケーション502を処理のためにサーバ508に送信してもよい。したがって、セルアプリケーション502は、ネットワーク504上の処理リソースの利用可能性に基づいて、ネットワーク504の全体にわたって移動することができる。
システム500のプロセッサおよびセルアプリケーション502の均質的な構造により、今日の異機種間ネットワークの課題の多くが回避される。任意の命令セット、例えばJava仮想マシン(Javaは登録商標)のような仮想マシンを使用して、任意のISAでのアプリケーションの処理を可能にしようとする非効率的なプログラムモジュールが回避される。したがって、システム500は、従来のネットワークより効果的にまた効率的に、ブロードバンド処理を実行することができる。
本発明の方法の一態様によると、第1のマルチプロセッサ(便宜上、例えば第1のBEとする)は、様々な理由のうち任意のもののために、第1のBEからタスクを移動するべきか否かを決定する。例えば、第1のBEは、指定されたデッドラインまたは合理的な期間内にタスクを終了するにはビジーであるという判定をしてもよい。第1のBEが、別の処理システムにタスクを移動すべきであると判定すると、第1のBEからネットワークを介してアプリケーションをブロードキャストする。アプリケーションは、複数のタスクと一つの属性とを指定するかまたは含む。移動されることになるタスクは、指定されたタスクまたは含まれているタスクのうちの一つである。属性は、アプリケーションをブロードキャストした前段のBE、もしくは初めにアプリケーションをブロードキャストしたBE、のうち少なくとも一つからのアプリケーションの距離と、複数のタスクのそれぞれを終了するためのデッドラインと、を表示することが好ましい。タスクキューを指定することもできる。アプリケーションは、アプリケーション自身がタスクを保有することによって複数のタスクを直接指定してもよいし、または、アプリケーションがポインタ情報を使用して間接的にタスクを指定してもよい。ポインタ情報は、例えばポインタ、インデックスまたは他の同等手法であり、タスクの位置する場所を表すか指し示すものである。あるいは、タスクキュー、各タスク、およびアプリケーション内の属性と組み合わされたタスクのブロックのうちのいずれか一つと、属性とがリンク付けされていてもよい。さらに、本発明の態様によると、タスクは、タスクを実行するための要件を指定する属性を有している。属性は、二つ以上のタスクで共通であるか、または全てのタスクで共通であってもよい。または、タスクのそれぞれが固有の独立した属性を有していてもよい。
アプリケーションの「距離」とは、転送レイテンシの尺度となりうる物理的距離のことをいう場合もあるが、好適には、ネットワークを越えて別の位置またはプロセッサにアプリケーションを移動する際の、ネットワークレイテンシのことを指す。
例えば、送信元すなわち「オーナーBE」は、アプリケーションAの移動を決定し、ネットワークにアプリケーションAをブロードキャストする。アプリケーションAは、デッドラインと、必要となる計算リソース(例えば、SPUの数または複数のタスク)と、他のパラメータとを有している。別のセルである第1のBEは、アプリケーションAを受け取り、パラメータとオーナーBEへの「距離」とをチェックする。いくつかの理由により、第1のBEがアプリケーションAを処理しないと決定し、アプリケーションAをネットワークに戻してブロードキャストする。この場合、アプリケーションAの距離は、依然として、潜在的な新たなBEからオーナーBEへのネットワークレイテンシである。今度は、第2のBEがアプリケーションAを受け取り、パラメータとオーナーBEへの距離とをチェックする。この情報に基づいて、第2のBEはアプリケーションAの結果をオーナーBEへと戻してもよい。
あるいは、「距離」は、送信元すなわちオーナーBEでなく、直前のBEからの距離であってもよい。例えば、オーナーBEが、アプリケーションAをネットワーク上に移動させると決定したとする。アプリケーションAは、デッドラインと、必要となる計算リソース(例えば、SPUの数または複数のタスク)と、他のパラメータとを有している。第1のBEは、アプリケーションAを受け取り、パラメータとオーナーBEへの距離とをチェックする。いくつかの理由により、第1のBEがアプリケーションAの一部を「A’」として移動させると決定し、A’をネットワークにブロードキャストする。この場合、A’の距離は、潜在的な新たなBEから第1のBEへのネットワークレイテンシである。A’のデッドラインは、アプリケーションAよりも早い。第2のBEがA’を受け取り、パラメータと第1のBEへの距離とをチェックする。第2のBEは、A’の結果を第1のBEへと戻してもよい。第1のBEは、A’を有するアプリケーションAの結果を生成し、その結果をオーナーBEへと戻してもよい。
属性は、タスクの実行に要求される処理能力を指定することが好ましい。したがって、上述のプロセッサアーキテクチャが使用される場合、この属性は、タスクの実行に必要なSPUの数を指定してもよい。さらに、同じ属性または異なる属性が、タスクの実行に必要とされるメモリの量を指定してもよい。
第1のBEによってブロードキャストされたアプリケーションは、ネットワークにより第1のBEに接続される第2のBEで受け取られる。第2のBEは、アプリケーション内のタスクを分解し(unbundle)、いずれのタスクを第1のBEから移動させるべきかについて決定する。タスクをばらし移動させるべきタスクを決定した後、第2のBEは、好適には、ソフトウェアコマンドにより、タスクを実行するための要件を指定する属性を調べ、第2のBEによって実行されなければならないタスクを決定する。上述したように、属性(または、複数の属性)が必要な処理能力および必要なメモリを記述する場合、好適には第2のBEは、移動されるタスクに関連付けられている必要な処理能力および必要なメモリを検査する。
本発明の別の態様によると、第2のBEもまた、アプリケーションをブロードキャストした前段のBE、または、初めにアプリケーションをブロードキャストしたBE、のうちの少なくとも一つからのアプリケーションの距離と、複数のタスクのそれぞれを終了するためのデッドラインと、複数のタスクのそれぞれを終了するためのデッドラインとを調べる。そして、その複数のタスクを第2のBEで実行すべきか否かを決定する。第2のBEは、第1のBEに対して、第2のBEがタスク(単数または複数)を実行しているか否かを連絡することが好ましい。
本発明の別の態様によると、ブロードキャストされたアプリケーションは、複数の他のBEによって受け取られる。複数の他のBEはそれぞれ、第2のBEに関して先に述べたステップを実行する。したがって、他のBEはそれぞれ、アプリケーション内のタスク(単数または複数)を分解する。移動されるべきタスク(単数または複数)は、アプリケーション内に含まれる。複数の他のBEはそれぞれ、複数のタスクを実行するための要件を指定する属性を調べて、タスクが実行されるべきか否かを決定する。さらに、複数の他のBEはそれぞれ、アプリケーションをブロードキャストした前段のBE、もしくは初めにアプリケーションをブロードキャストしたBE、のうち少なくとも一つからのアプリケーションの距離と、複数のタスクのそれぞれを終了するためのデッドラインと、を調べて、タスクが実行されるべきか否かを決定する。
上記説明においては、第1のマルチプロセッサとして第1のBE、第2のマルチプロセッサとして第2のBEを便宜上定めた。しかし、当然であるが、第1のマルチプロセッサおよび第2のマルチプロセッサはそれぞれ、図32に示した要素のいずれであってもよい。したがって、一例として、第1のマルチプロセッサはクライアント506のうちの一つであってもよいし、第2のマルチプロセッサはクライアント506のうちの別の一つまたはPDA510であってもよい。図32中では、ネットワーク504上を複数のセル502が移動している状態が示されているが、このセル502がこれまでの説明でBE間で転送またはブロードキャストされるとしたアプリケーションである。例えば、クライアント506内には複数の「セル」が描かれているが、これはクライアント506内の複数のBEまたはPEにおいて、セルアプリケーションが実行されているイメージを表したものである。クライアント506の他に、サーバ508内にも「セル」が描かれているが、これは必ずしもサーバやクライアント内のBEまたはPEが「セル」を実行中であるイメージを表しているわけではなく、「セル」を実行可能であることを示しているに過ぎない。各PEは、複数のSPUを持つ図3に示したようなアーキテクチャを有してもよい。しかしながら、本発明は、プロセッサのタイプまたはアーキテクチャにかかわらず、複数のネットワーク化されたプロセッサを有する任意のシステムに適用可能であることが理解される。
この点に関して、図33は本発明のセルサーバ600の一実施形態を示す。一つまたは複数の広帯域エンジン(BE)610は、セルサーバによって管理される。各BEは、上述の環境と同じく、処理ユニット(PU)630、複数の相乗的(synergistic)処理ユニット(SPU)640、有利には(図4に示す)複数のSPUのそれぞれに関連するローカルメモリ用の論理記憶装置(LS)(DMAC650を介してアクセスされる)を備える基本プロセッサ要素(PE)620と、共有メモリ660とを備える。BEは、BEバス670およびBE入出力チャネル675を介して内部通信する。加えて、セルサーバは、一つまたは複数のネットワークインタフェース680を有する。ネットワークインタフェースは、有利には、各PUまたはSPUに関連付けられているが、セルサーバに直接関連付けられていてもよい。有利には、セルサーバ600は、内部通信用のセルバス690とローカルセル入出力チャネル695とを備える。
BEの一実施形態の汎用メモリハンドリング特性の詳細は、2001年3月22日に出願された「SYSTEM AND METHOD FOR DATA SYNCHRONIZATION FOR A COMPUTER ARCHITECTURE FOR BROADBAND NETWORKS」と題する米国特許出願第09/815,554号に説明されており、これは本出願の譲受人に譲渡されている。ネットワーク化されたマルチプロセッサ環境におけるBEの基本的な相互接続の一実施形態の説明は、2004年4月22日に出願された「METHOD AND APPARATUS FOR PROVIDING AN INTERCONNECTION NETWORK FUNCTION」と題する米国仮特許出願第60/564,647号に説明されており、これは本出願の譲受人に譲渡されている。
各BEは、図34の一実施形態に模式的に示すように、一つまたは複数のBEタスク700を含む。BEタスク700は、タスクキュー710および関連するタスクテーブル720a〜720dを利用して、セルサーバの共有メモリ内に編成されることが好ましい。タスクテーブル720a〜720dは、それぞれタスクテーブルエントリのセットを備え(図35を参照)、タスクテーブルは、一つまたは複数のSPUによって実行されるべき一つまたは複数のSPUタスクを有する(図35を参照)。BEタスクは、固有のBEタスク識別子730を有することが好ましい。
加えて、各BEタスクは、少なくとも以下の4つのパラメータを有することが好ましい。すなわち、BEタスクまたはタスクグループを実行するために必要となる最小のSPU数(最小必要SPU730a)、BEタスクまたはタスクグループによって要求されるメモリサイズ(メモリ割り当て730b)、セルレイテンシすなわちこのBEを所有するセルサーバと受取り側BEとの間の距離(セルレイテンシ730c)、およびBEタスクに含まれるSPUタスクのタスクデッドライン(タスクデッドライン730d)である。BEタスクは、セルサーバネットワークによって要求される他の値(730e)も含むことが好ましい。BEタスクの一例を表1に示す。
図35は、本発明のタスクテーブルの一実施形態を示す。上述したように、各タスクテーブル740は、以下のパラメータのうち一つまたは複数を保持するテーブルエントリ750のセットを含む。すなわち、タスクステータス760a、タスク優先度760b、他のタスクテーブル値760c、前のタスクへのポインタ780、および次のタスクへのポインタ790である。各タスクテーブル740は、実行されるべき実際の命令に対する命令ポインタ770を有してもよい。
タスクステータス760aは、タスクの状態、例えば、タスクが実行中、準備、待機、待機中断、中断、休止、不在のいずれかを表す。タスク優先度760bは、タスクのレベルまたは重要度を表し、スケジューリング中にタスクの実行順序を決定するために使用される。前のタスクポインタ780および次のタスクポインタ790は、他のテーブルエントリ750に関連して使用され、タスクテーブル740内のリンク付きリストを形成する。前のタスクポインタ780および次のタスクポインタ790もまた、PUおよびSPUへのタスクテーブルの処理タスクの順序づけされたアクセスを提供する。
図36は、本発明のBEタスクキューの一実施形態を示す。各タスクキュー710は、複数のタスク優先度レベル820のそれぞれについての、ヘッドエントリポインタ800とテイルエントリポインタ810のセットを含む。具体的には、タスクキュー710は、セルサーバ上でBEでのタスク命令の実行を優先順位付けするために提供される、n優先度レベル(0からn−1)のそれぞれについて別個にヘッドエントリとテイルエントリの対を有する。一般に、優先度レベルと同じ数のリンク付きリストが存在する。したがって、各優先度レベルについて、その優先度レベルでのタスクのリンク付きリスト830は、その優先度のタスクテーブル740内の第1のタスクエントリ845をポイントするヘッドポインタ840と、その優先度のタスクテーブル内の最後のタスクエントリ855をポイントするテイルポインタ850とに関連付けられている。タスクキュー710の一実施例を表2に示す。
PUおよび/またはSPUは、BEタスクキューおよび関連するBEタスクテーブルを使用して、タスク処理のスケジューリングを実行する。具体的には、共有メモリから引き抜かれたプロセスタスクを実行のためにSPUの一つに入れる順序を決定する。セルサーバ内の各BEは、少なくとも一つのタスクキューと、関連するタスクテーブルとを維持することが好ましい。
各BEについてのタスクキューおよびタスクテーブルは、同一セルサーバ内での一つのBEから別のBEへのプロセッサタスクの移動、または、ネットワークを介して接続された別個のセルサーバでの一つのBEから別のBEへのプロセッサタスクの移動を容易にする。別のBEに実行のために渡されるべきプロセッサタスクは、移動のためにアプリケーション内にバンドルされる(bundle)。一般に、アプリケーションは、以下に詳細に述べるように、他の情報でラップされた一つまたは複数のBEタスクを含む。特定のBEを管理するセルサーバは、一般に、そのBEのアプリケーションオーナーとみなされる。
図37は、移動のためにアプリケーションをバンドルする方法の一実施形態を示す。一般に、例えば、他の状況と同じく、BE内(または、セルサーバの特定のSPU内)のプロセッサロードが高いとき、または、特定のSPU内で優先度の衝突が発生したとき、特定のセルサーバ内のBEが、一つまたは複数のBEタスクのセットを含むアプリケーションを別のBEへ移動する。特に、移動のためのアプリケーションのバンドリングは、送出し側BEによって処理されるステッププロセスを伴う。
通常のタスク処理状態900の間、移動判定ステップ910において、例えば高いプロセッサロード、低いメモリ利用可能性などのために、BEは、タスクの移動が必要であるか否かを判定する。移動が必要な場合、停止タスクステップ920において、現在実行中のタスク700が停止される。タスク更新ステップ930において、バンドリングの準備のために、送出し側BEの現在のタスクキュー710およびタスクテーブル720が更新される。バンドルステップ950において、移動されるべきBEタスクが移動のためにアプリケーション940にバンドルされる。好適には、セル940は、(タスクキュー710とタスクテーブル720の情報を含む)移動されるべきBEタスク700のみならず、BEタスクに関連するタスクデータ952も含む。有利には、アプリケーションは、必要に応じて、アプリケーションセキュリティを保証し、アプリケーション整合性を確認するために、圧縮されるか最小アプリケーションサイズに暗号化されてもよい。続いて、図38に詳細を示すポーリング−応答−移動−復帰プロセスを介する移動ステップ960によって、タスクが別のBEに移動される。移動プロセス(および、移動されたプロセスの復帰)が完了すると、BEは、通常のタスク処理状態900を介してタスクの処理の継続に復帰する。
図38は、送出し側BEから、既知のセルサーバネットワーク上のいずれかにある受取り側BEへのBEタスクの移動プロセスの一実施形態を示す。図37のバンドルステップ950において述べたように、移動されるべきBEタスクがバンドルされた後、BEは、ポーリングステップ970において他のBEをポーリングする。好適には、BEは、一つまたは複数のセルサーバネットワーク974上で、同一のセルサーバ600および他の既知のセルサーバ972の双方にある、他のBE610をポーリングする。
好適には、ポーリングステップ970は、図39に示す既知のセルサーバネットワーク上の既知のBEに対して、ブロードキャストクエリを介して実行される。一実施形態では、ブロードキャストクエリメッセージ980は、複数の値を含むネットワークメッセージの形態をとる。値には、送信元セルサーバおよびBEの表示985a、移動されるべきタスクのタスク優先度の表示985b、必要なSPUおよび/またはメモリリソースの表示985c、移動中のタスクのタスクデッドラインの表示985d、および、ブロードキャストクエリによって送信されることが有利な他の任意の値985eが含まれるが、これらに限定されない。これらの値は、バンドルされたアプリケーションの一部であるタスクテーブル内に格納される。これらの値は、必要に応じて、他のデータ構造で記載されてもよい。
図38に戻り、クエリ応答受信ステップ990において、送出しセルサーバ内の送出し側BEは、セルサーバネットワーク内の既知のBEから一つまたは複数の応答を受け取る。図40に示すように、好適には、クエリ応答は、特定の値を含むネットワークメッセージの形態をとる。特定の値には、応答BEおよびセルサーバロケーションの表示1005a、応答BEの現在のタスクデッドラインの表示1005b、現在のBEの空きSPU、プロセッサロード、および/またはメモリ負荷の表示1005c、クエリ応答1000内で必要とされるか要求されるかまたは含まれる任意の他のブロードキャスト応答メッセージ値1005dが含まれるが、これらに限定されない。
再び図38に戻り、受取り側BE選択ステップ1010において、送出し側BEは、受け取ったクエリ応答1000から、応答BEの移動タスクのうちいずれのセットを送信すべきかを決定する。この選択は、セルレイテンシの短さもしくは受取り側BEと送出し側BE間のネットワークトポロジ構造上の短さ、受取り側BEにおいて現在実行しているタスクのデッドラインまでの時間の短さ、受取り側BEにおけるSPUおよびメモリの利用可能性が十分かどうか、の一部または全てを考慮に入れた決定に基づくことが好ましい。移動ステップ1020において、アプリケーション940内のバンドルされたタスクは、選択された受取り側BE1030に移動される。
アプリケーション940が受取り側BEに送信されると、受取り側BEタスクアンバンドルステップ1040において、有利には、受取り側BE1030は、共有メモリ内のアプリケーションをばらして処理する。受取り側BEタスク処理ステップ1050において、受取り側BE1030は、バンドルされたタスク、データ、タスクキュー、およびタスクテーブルにアクセスして、移動された処理タスクを実行する。
ステップ1050において、移動されたタスクの処理が受取り側BEによって完了すると、受取り側BE再バンドルステップ1060において、完了したタスク、データ、タスクキュー、およびタスクテーブルがアプリケーションに再バンドルされ、送信元の送出し側BE、典型的には始めに移動されたBEタスクを所有するセルサーバに戻される。送出し側BE終了タスク受信ステップ1070において、終了したタスクが元の送出し側BEによって受け取られると、タスクアンバンドルステップ1080において、送出し側BEは終了BEタスクをばらす。続いて、終了タスク更新ステップ1090において、終了したBEタスクが関連するプロセスを更新し、一般のタスク処理状態900を再開する。有利には、メッセージ980、1000、アプリケーション600、およびタスクデータ952等の他の重要なデータは、例えばAES標準、Blowfish、または、RSAベースの公開鍵暗号化アルゴリズム等の既知のアルゴリズムによって暗号化されてもよい。同様に、本発明のメッセージ、データ構造および他の特徴は、例えばMD5等のダイジェストアルゴリズムによって情報を採取され(fingerprint)、タスク、タスクデータ、およびメッセージが信頼性のないネットワークおよびネットワークプロトコルによって送信されるときに、重要なデータ整合性を保証するようにしてもよい。
図41は、本発明の安全なサーバランチ(ranch)の一実施形態を示す。このネットワークで相互接続されたセルサーバ1100は、有利には、サーバランチ1110と呼ばれるセルサーバのコミュニティを形成する。好適には、このサーバランチは、例えばインターネットまたはイントラネット等のIP(インターネットプロトコル)ベースのネットワーク等の、トポロジーフリーなネットワーク上で形成される。しかしながら、十分な効率性および信頼性のあるネットワークプロトコルを使用可能である。
無線ネットワーク、安全でないローカルエリアネットワーク、広域エリアネットワーク、組織されたまたはトポロジカルなイントラネットまたはより一般的なインターネット等の他のオープンネットワーク上にサーバランチが存在する場合にセキュリティが重要であるように、有利にはサーバランチは、それが存在する上でのネットワークに関して安全でであってもよい。一実施形態では、安全なサーバランチ内の各セルサーバは公開鍵および個人鍵を使用し、ネットワークを介して分散されるセルサーバは、暗号化モジュール1120(一実施形態では、公開鍵暗号化(PKI)モジュール)を介してアプリケーションおよび他のメッセージを送信し、受信し、および認証することができる。しかしながら、AESベースのハンドシェークまたは圧縮−暗号化技術等の任意のタイプの暗号化アルゴリズムを使用してもよい。既知のネットワーク1130の外部のセルサーバは、一般にセルランチに参加可能であるが、適当なタイプの暗号化モジュールおよび適当な認証(すなわち、キーおよび/または署名)を持たない場合は、安全なサーバランチへの参加を控えることが好ましい。
本明細書において特定の実施形態を参照して本発明を記載したが、これらの実施形態が単に本発明の原理および応用を例示するものにすぎないことは理解されよう。したがって、例示した実施形態には多数の変形が可能であり、添付の特許請求の範囲で規定される本発明の精神および範囲から逸脱することなく他の構成を考案することができることが理解されよう。
600 セルサーバ、 610 BE、 650 DMAC、 660 共有メモリ、 670 BEバス、 675 BE入出力チャネル、 680 ネットワークインタフェース、 690 セルバス、 695 ローカルセル入出力チャネル。