(57)【要約】      （修正有）【課題】マルチプロセッサシステム、及びマルチプロセッサシステム上で実行されるアプリケーションをスワップするためのシステム方法を提供する。【解決手段】複数のアプリケーションは、第１のアプリケーションと、複数の他のアプリケーションを含んでよい。第１のアプリケーションは、第２のアプリケーションと動的にスワップする。このスワップは、上記複数の他のアプリケーションを停止させることなく実施できる。上記複数の他のアプリケーションは、リアルタイム動作を実施してリアルタイムデータを処理するために、スワップ中も実行され続ける。スワップ後、上記複数の他のアプリケーションは、第２のアプリケーションと共に実行され続ける。上記複数の他のアプリケーションの少なくともサブセットは、リアルタイム動作を実施してリアルタイムデータを処理するために、第２のアプリケーションと通信する。【選択図】図２２
2018022524.tif 000002
【特許請求の範囲】
【請求項１】
マルチプロセッサシステムにおいてアプリケーションスワップを実施するための方法であって、
前記方法は：
複数のアプリケーションを前記マルチプロセッサシステム上にロードするステップであって、ここで前記マルチプロセッサシステムは、複数のプロセッサと、前記プロセッサ間に散在する複数のメモリとを含み、前記ロードするステップは、関連する前記プロセッサによる実行のために、複数の前記アプリケーションからの命令及びデータを、前記複数のメモリのうちの異なる１つずつに分散させるステップを含む、ステップ；
前記複数のアプリケーションを、前記マルチプロセッサシステム上で実行するステップであって、前記複数のアプリケーションは共に実行され、互いに通信して、リアルタイム動作を実施し、前記リアルタイム動作は、リアルタイムデータを伴う入力又は出力のうちの少なくとも一方を実施し、前記複数のアプリケーションは前記リアルタイムデータを処理し、前記複数のアプリケーションは、第１のアプリケーションと、複数の他のアプリケーションとを含む、ステップ；
前記第１のアプリケーションを第２のアプリケーションとスワップするステップであって、前記第２のアプリケーションは、前記マルチプロセッサシステム上に既にロードされて実行された前記複数のアプリケーションのうちの１つではなく、前記スワップは、前記複数の他のアプリケーションを停止させることなく実施され、前記複数の他のアプリケーションは、前記リアルタイム動作を実施するため及び前記リアルタイムデータを処理するために、前記スワップ中に実行され続ける、ステップ
を含み、
前記スワップ後、前記複数の他のアプリケーションは、前記第２のアプリケーションと共に実行され続け、
前記複数の他のアプリケーションの少なくともサブセットは、前記リアルタイム動作を実施するため及び前記リアルタイムデータを処理するために、前記第２のアプリケーションと通信する、方法。
【請求項２】
前記スワップの前に、前記第１のアプリケーションは前記複数のプロセッサの第１のサブセット上で実行され、
前記スワップは：
前記複数のプロセッサの前記第１のサブセット上の前記第１のアプリケーションを停止させるステップ；
前記第１のアプリケーションの状態を保存するステップ；及び
前記第２のアプリケーションを、前記複数のプロセッサの前記第１のサブセットと関連するメモリにロードするステップ
を含む、請求項１に記載の方法。
【請求項３】
前記スワップは更に：
前記第１のアプリケーションと前記他のアプリケーションのうちの１つ又は複数との通信を切断するステップ
を含む、請求項２に記載の方法。
【請求項４】
１つ又は複数の第１のバッファメモリを、前記複数のプロセッサの前記第１のサブセットと、前記複数のプロセッサの他のサブセットとの間に連結し；
前記第１のアプリケーションの通信を切断するステップは、前記１つ又は複数の第１のバッファメモリを制御して、前記切断するステップを可能とするステップを含む、請求項３に記載の方法。
【請求項５】
前記スワップは更に：
前記第２のアプリケーションの前記ロード後、前記第２のアプリケーションと前記他のアプリケーションのうちの前記１つ又は複数との通信を連結するステップ
を含む、請求項３に記載の方法。
【請求項６】
前記スワップは更に：
前記第２のアプリケーションのスワップインの前に、前記複数のプロセッサの前記第１のサブセットを再設定して、前記複数のプロセッサの前記第１のサブセットを既知の状態とするステップ
を含む、請求項３に記載の方法。
【請求項７】
前記複数の他のアプリケーションは、前記スワップが発生していることに気づかない、請求項１に記載の方法。
【請求項８】
前記スワップの前に、前記第１のアプリケーションは前記複数のプロセッサの第１のサブセット上で実行され、
前記スワップは：
前記第１のアプリケーションを、前記マルチプロセッサシステムの外部の１つ又は複数の外部リソースから切断するステップ；
前記複数のプロセッサの前記第１のサブセット上の前記第１のアプリケーションを停止させるステップ；
前記第２のアプリケーションを前記複数のプロセッサの前記第１のサブセットと関連するメモリにロードするステップ；及び
前記第２のアプリケーションの前記ロード後、前記第２のアプリケーションを前記外部リソースと連結するステップ
を含む、請求項１に記載の方法。
【請求項９】
前記マルチプロセッサシステムは、前記複数のプロセッサの少なくともサブセット間に散在する複数のバッファメモリを備え；
前記スワップは、前記スワップ中に、前記第１のアプリケーションへ又は前記第１のアプリケーションからの少なくとも一方において第１のバッファメモリが実施する通信を変更するステップを含む、請求項１に記載の方法。
【請求項１０】
前記第１のアプリケーションは、前記第１のバッファメモリの下流側にあり、
前記変更するステップは、前記第１のバッファメモリが前記スワップ中に送信側アプリケーションからデータを受信するのを中断させるステップを含む、請求項９に記載の方法。
【請求項１１】
前記変更するステップは更に、前記送信側アプリケーションが、前記第１のバッファメモリが前記送信側アプリケーションからデータを受信するのを中断したことに応答してストールするステップを含む、請求項１０に記載の方法。
【請求項１２】
前記第１のアプリケーションは、前記第１のバッファメモリの下流側にあり、
前記変更するステップは、前記スワップ中に前記送信側アプリケーションからデータを受信することを継続して、以前に記憶した未送信データを上書きするよう、前記第１のバッファメモリを構成するステップを含む、請求項９に記載の方法。
【請求項１３】
前記第１のアプリケーションは、前記第１のバッファメモリの上流側にあり、
前記変更するステップは、前記第１のバッファメモリが前記スワップ中に受信側アプリケーションにデータを転送するのを中断させるステップを含む、請求項９に記載の方法。
【請求項１４】
前記変更するステップは、前記第１のアプリケーションからの着信データがそれ以上存在しなくなると、前記第１のバッファメモリが前記受信側アプリケーションへのデータ転送を中断するステップを含む、請求項１３に記載の方法。
【請求項１５】
前記第１のアプリケーションは、前記第１のバッファメモリの上流側にあり、
前記変更するステップは、前記スワップ中に前記受信側アプリケーションにデータを２回以上繰り返し送信するよう、前記第１のバッファメモリを構成するステップを含む、請求項９に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はマルチプロセッサシステムに関し、より詳細にはマルチプロセッサシステム（ＭＰＳ）上で実行されるソフトウェアアプリケーションの再構成に関する。
【背景技術】
【０００２】
組込みシステムは、リアルタイムコンピューティングの制約を有する場合が多い、特定機能用に設計されたコンピュータシステムとして説明できる。組込みシステムは物理的には、ビデオ及び／又は音声デバイス等の携帯型消費者用電子デバイスから、信号機、工場用コントローラ並びにハイブリッド車及び航空電子機器等の大部分が複雑なシステムといった、大型据付設備にまで亘る。組込みシステムは入力信号を受信して該信号をリアルタイムに処理することにより、特定のリアルタイム動作を実施できる。組込みシステムはその代わりに（又はそれに加えて）、リアルタイム処理を実施して出力信号を生成できる。
【０００３】
組込みシステムが実施する処理は、異なる複数の方法で実装できる。いくつかのデバイスは、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）又は他のプログラマブル論理デバイスを用いる。ＦＰＧＡは、記憶された命令型ソフトウェアプログラミングアプローチを用いることなく、複雑なシステムを実装する手段である。あるいはこれらのデバイスは、ＶＨＤＬ又はＶｅｒｉｌｏｇ等のハードウェア記述言語を使用して構成され、ユーザはこのハードウェア記述言語を用いて、相互接続された電子構成部品のセットを記述できる。ＦＰＧＡはこの相互接続設計を、チップを初期化している時にヒューズをプログラミングすること又は構成メモリ位置を設定することによって実現できる。
【０００４】
組込みシステムはまた、１つ又は複数のプロセッサ又はデジタル信号処理（ＤＳＰ）エンジンを用いて実装することもできる。例えば従来の粗粒度プログラマブル組込みシステムは、少数のプロセッサ又はＤＳＰエンジン、例えば２個又は４個のプロセッサコア、及び固定型又はプログラマブル特定用途向け論理機能を有する場合がある。これらのシステムは通常、アドレス指定できるデータ及び命令メモリの範囲を拡張するために、大型のデータ及び命令メモリを有し、又は仮想メモリスキームを利用する。
【０００５】
場合によっては、組込みシステムを実行時に再プログラムすること、例えばシステムを停止させずに再プログラミングが行われることが望ましい場合がある。しかしながら、ＦＰＧＡベースの組込みシステム及び従来のプロセッサベースの組込みシステムの両方は、このような再プログラミングを問題のあるものにする欠点を有している。例えばいくつかのＦＰＧＡデバイスは、実行時間中にＦＰＧＡの特定の物理的領域を再構成するための限定的な能力を有する場合があるが、実行時に異なるアプリケーションを実施するためにＦＰＧＡを動的に再プログラムするのは一般に困難である。例えばＦＰＧＡ再構成可能性は、論理（又はアプリケーション）に基づくものではなく、論理設計のどの部分がチップの特定の物理的部分にマッピングされているかに基づくものであり得る。ＦＰＧＡ上のある設計の論理及び物理マッピングを整列させるためには多大な努力が必要となり得るが、これは実装を極めて非効率的なものとしてしまう傾向がある。
【０００６】
従来のプロセッサベースのシステムでは、公知のマルチタスク化技術によって異なる複数のアプリケーション間で処理パワーを共有できる。このアプローチでは、２つ以上のアプリケーションをインターリーブ型様式で同一のプロセッサ上で同時に実行できる。プロセッサは複数のアプリケーションの状態を動的に管理する。しかしながらこれは性能ペナルティを招き、リアルタイム組込みシステムにとって許容できないものであり得る非決定的時間遅延を導入することがある。
【発明の概要】
【発明が解決しようとする課題】
【０００７】
従って、例えばシステムの実行を停止させずに複数のアプリケーションを動的にスワップすることによって実行時のシステムの再プログラミングを実施できる改善された能力を提供する、リアルタイム組込みシステムを提供することが望ましい場合がある。
【課題を解決するための手段】
【０００８】
マルチプロセッサシステム上で実行されるアプリケーションをスワップするためのマルチプロセッサシステム及び関連方法の様々な実施形態が開示される。このマルチプロセッサシステムは、複数のプロセッサと、プロセッサ間に散在する複数のメモリとを含んでよい。複数のアプリケーションをマルチプロセッサシステム上にロードしてよい。アプリケーションをロードするステップは、関連するプロセッサによる実行のために、複数のアプリケーションからの命令及びデータを、複数のメモリのうちの異なる１つずつに分散させるステップを含んでよい。上記複数のアプリケーションが、マルチプロセッサシステム上で実行され得る。いくつかの実施形態では、複数のアプリケーションは共に実行され、互いに通信して、リアルタイム動作を実施してよい。例えば複数のアプリケーションはリアルタイムデータを処理してよい。リアルタイム動作は、リアルタイムデータを伴う入力又は出力のうちの少なくとも一方を実施してよい。
【０００９】
上記複数のアプリケーションは、第１のアプリケーションと、複数の他のアプリケーションとを含んでよい。いくつかの実施形態によると、第１のアプリケーションは第２のアプリケーションとスワップしてよく、ここで第２のアプリケーションは、マルチプロセッサシステム上に既にロードされて実行された上記複数のアプリケーションのうちの１つではなくてよい。上記スワップは、上記複数の他のアプリケーションを停止させることなく実施できる。換言すると、上記複数の他のアプリケーションは、リアルタイム動作を実施するため及びリアルタイムデータを処理するために、上記スワップ中に実行され続けてよい。上記スワップ後、上記複数の他のアプリケーションは、第２のアプリケーションと共に実行され続けてよく、上記複数の他のアプリケーションの少なくともサブセットは、リアルタイム動作を実施するため及びリアルタイムデータを処理するために、第２のアプリケーションと通信してよい。上記複数の他のアプリケーションは、上記スワップが発生していることに気づかなくてよい。第２のアプリケーションのプログラム命令及びデータを、１つ又は複数のメモリにロードするステップは、上記命令及びデータを、マルチプロセッサシステムを通して、２つ以上のスワップルートに沿って送信するステップを含んでよい（通信ルートは、マルチプロセッサシステム内での通信を物理的に実装する１つの手段である）。各スワップルートは特定のメモリと関連してよく、またそのメモリに命令／データをロードするために使用してよい。
【００１０】
上記スワップの前に、第１のアプリケーションは上記複数のプロセッサの第１のサブセット上で実行されてよい。いくつかの実施形態では、スワップは、上記複数のプロセッサの第１のサブセット上の第１のアプリケーションを停止させるステップ、第１のアプリケーションを、マルチプロセッサシステムの外部の１つ又は複数の外部リソースから切断するステップ、及び任意に第１のアプリケーションの状態を保存するステップを含んでよい。スワップは更に、第２のアプリケーションのスワップインの前に、上記複数のプロセッサの第１のサブセットを初期化して、既知の状態とするステップを含んでよい。スワップは更に、第１のアプリケーションと上記他のアプリケーションのうちの１つ又は複数との通信を切断するステップを含んでよい。
【００１１】
次にスワップは、上記複数のプロセッサの第１のサブセットと関連するメモリに第２のアプリケーションをロードするステップを伴ってよい。第２のアプリケーションのロード後、第２のアプリケーションを１つ又は複数の外部リソースに連結してよく、この１つ又は複数の外部リソースは、第１のアプリケーションが以前に連結されていたものと同一の１つ又は複数の外部リソースであってよい。第２のアプリケーションをロードした後、スワップは更に、第２のアプリケーションと上記他のアプリケーションのうちの１つ又は複数との通信を連結するステップを含んでよく、上記他のアプリケーションのうちの１つ又は複数は、第１のアプリケーションが以前に通信していたものと同一のアプリケーションであってよく、又は異なるアプリケーションであってよい。
【００１２】
いくつかの実施形態では、１つ又は複数の第１のバッファメモリを、上記複数のプロセッサの第１のサブセットと、上記複数のプロセッサの他のサブセットとの間に連結してよい。第１のアプリケーションの通信を切断するステップは、上記１つ又は複数の第１のバッファメモリを制御して、例えば第１のバッファメモリが実施する第１のアプリケーションへの及び／又は第１のアプリケーションからの通信を変更することによって、上記切断するステップを可能とするステップを含んでよい。
【００１３】
いくつかの実施形態では、第１のアプリケーションは第１のバッファメモリの下流側にあってよく、第１のバッファメモリが実施する通信を変更するステップは、第１のバッファメモリがスワップ中に送信側アプリケーションからデータを受信するのを中断させるステップを含んでよい。いくつかの実施形態では、送信側アプリケーションは、第１のバッファメモリが送信側アプリケーションからデータを受信するのを中断したことに応答してストールしてよい。他の実施形態では、上記変更するステップは、送信側アプリケーションからデータを受信して、第１のバッファメモリのスワップ中に、スワップの前に記憶したデータまたは前記スワップの前までに送信されていないデータを上書きするステップを含んでよい。
【００１４】
他の実施形態では、第１のアプリケーションは第１のバッファメモリの上流側にあってよく、第１のバッファメモリが実施する通信を変更するステップは、第１のバッファメモリがスワップ中に受信側アプリケーションにデータを転送するのを中断させるステップを含んでよい。いくつかの実施形態では、第１のアプリケーションからの着信データがそれ以上存在しなくなると、第１のバッファメモリは受信側アプリケーションへのデータ転送を中断してよい。他の実施形態では、上記変更するステップは、スワップ中に受信側アプリケーションに、データ、例えば第１のアプリケーションが以前に受信して第１のバッファメモリが記憶したデータを２回以上繰り返し送信するよう、第１のバッファメモリを構成するステップを含んでよい。従ってスワップ中に、同一のデータが受信側アプリケーションに繰り返し送信され得る。
【００１５】
いくつかの実施形態では、第１のアプリケーションは、第１のバッファメモリを介して構造化データ要素と通信してよい。各データ要素は、開始境界及び終了境界を有してよい。第１のバッファメモリは、第１のデータ要素の伝送が開始された後に、データ通信を中断する要求を受信してよい。いくつかの実施形態では、第１のバッファメモリは、第１のデータ要素の伝送を、第１のデータ要素の終了境界まで続行してよい。
【００１６】
第２のアプリケーションをスワップインする際、バッファメモリのうちの１つ又は複数を構成することによって、第２のアプリケーションは、第２のアプリケーションが通信する１つ又は複数のアプリケーションと連結してよい。例えば、第２のアプリケーションが、第１のアプリケーションと同一の他の１つ又は複数のアプリケーションと通信する場合、上記他の１つ又は複数のアプリケーションから第１のアプリケーションを切断するステップに関わるものと同一の１つ又は複数の第１のバッファを制御することによって、第２のアプリケーションをこれら他の１つ又は複数のアプリケーションと連結してよい。
【００１７】
例えば第１のアプリケーションは、所定のバッファメモリから下流側にあってよく、バッファメモリは、第１のアプリケーションがスワップアウトされると、送信側アプリケーションからデータを受信するのを中断してよい。第２のアプリケーションをスワップインすると、データを受信するモードにバッファメモリを戻してよい。従って第２のアプリケーションの実行を開始すると、送信側アプリケーションが送信したデータは、送信側アプリケーションからデータを以前に受信していた第１のアプリケーションの代わりに、第２のアプリケーションに送信されてよい。
【００１８】
別の例として、第１のアプリケーションは、所定のバッファメモリから上流側にあってよく、バッファメモリは、第１のアプリケーションがスワップアウトされると、受信側アプリケーションにデータを転送するのを中断してよい。第２のアプリケーションをスワップインすると、データを転送するモードにバッファメモリを戻してよい。従って第２のアプリケーションの実行を開始すると、受信側アプリケーションは、受信側アプリケーションにデータを以前に送信していた第１のアプリケーションの代わりに、第２のアプリケーションから受信されてよい。
【００１９】
第２のアプリケーションは、第１のアプリケーションを実行するために以前使用されていたものと同一の、マルチプロセッサシステムのプロセッサのサブセット上で実行されてよく、又はプロセッサの異なるサブセット、若しくは同一のプロセッサと異なるプロセッサとの組み合わせ上で実行されてよい。スワップは、第２のアプリケーションのプログラム命令及び／又はデータを、第２のアプリケーションを実行するプロセッサのサブセットと関連する１つ又は複数のメモリにロードするステップを含んでよい。いくつかの実施形態では、第２のアプリケーションを、ＲＡＭデバイス、フラッシュメモリデバイス、又はマルチプロセッサシステムの外部の他のメモリデバイスといった外部メモリデバイスから、１つ又は複数のメモリにロードしてよい。他の実施形態では、第２のアプリケーションを、マルチプロセッサシステムの外側の外部プロセッサが伝送する命令ストリームから、１つ又は複数のメモリにロードしてよい。
【００２０】
いくつかの実施形態では、２つ以上のスワップルートは、第１の部分を共有してよく、この第１の部分を、スワップルートのトランク部分と呼ぶ。このトランク部分は、マルチプロセッサシステムのＩ／Ｏポートから、マルチプロセッサシステム内の終点へのルートを含んでよい。スワップルートの第２の部分は、トランクルートの終点を、第２のアプリケーションが使用する標的のメモリデバイスに接続してよい。
【００２１】
いくつかの実施形態では、第１のアプリケーションは、マルチプロセッサシステム上で実行される他のアプリケーションのうちの１つからの情報の受信に応答して、第２のアプリケーションとスワップされてよく、例えばこの情報は、第１のアプリケーションをスワップアウトするべきであることを示す。他の実施形態では、スワップは、第１のアプリケーションをスワップアウトするべきであることを示す外部信号の受信に応答して、第１のアプリケーションをスワップアウトするステップを含んでよい。外部信号は、マルチプロセッサシステムの外側から受信されてよい。例えばいくつかの実施形態では、外部信号は、マルチプロセッサシステムの外部のプロセッサ上で実行されるシステムコントローラプログラムから受信されてよい。
【００２２】
いくつかの実施形態では、親タスク又は管理タスクを、複数のアプリケーションと共にマルチプロセッサシステム上で実行してよい。管理タスクは、マルチプロセッサシステムのプロセッサのうちの１つ又は複数の上で実行されてよく、第１のアプリケーションと第２のアプリケーションとのスワップを管理するよう構成されてよい。
【００２３】
いくつかの実施形態では、第２のアプリケーションは複数の実行可能なタスクを含んでよく、第１のアプリケーションを第２のアプリケーションとスワップするステップは、各タスクを、マルチプロセッサシステムの異なるプロセッサによって実行されるよう構成するステップを含んでよい。
【００２４】
いくつかの実施形態では、第１のアプリケーションを第２のアプリケーションとスワップするステップは、マルチプロセッサシステムの外部の２つ以上のソースメモリデバイスから、２つ以上の命令ストリームをマルチプロセッサシステムに同時に伝送するステップを含んでよい。各命令ストリームは、第２のアプリケーションのプログラム命令を含んでよい。
【００２５】
いくつかの実施形態では、スワップは、第１のアプリケーションを複数の第２のアプリケーションと同時にスワップするステップを含んでよい。上記複数の第２のアプリケーションは、異なるソースメモリデバイスからマルチプロセッサシステムに同時にロードされてよい。
【００２６】
更なる実施形態では、プログラム命令をコンピュータアクセス可能な記憶媒体に記憶してよい。プログラム命令は、マルチプロセッサシステム上に複数のアプリケーションをロードするために、マルチプロセッサシステムによって実行できるものであってよい。マルチプロセッサシステムは、複数のプロセッサと、プロセッサ間に散在する複数のメモリとを含んでよい。上記ロードするステップは、複数のアプリケーションからの命令及びデータを、関連するプロセッサによる実行のために、複数のメモリのうちの異なる１つずつに分散させるステップを含んでよい。
【００２７】
プログラム命令は更に、マルチプロセッサシステム上での複数のアプリケーションの実行を開始させるために、マルチプロセッサシステムによって実行できるものであってよい。複数のアプリケーションは、リアルタイム動作を実施するために共に実行され、互いに通信してよい。リアルタイム動作は、リアルタイムデータを伴う入力又は出力のうちの少なくとも一方を実施してよい。複数のアプリケーションは、リアルタイムデータを処理してよい。
【００２８】
上記複数のアプリケーションは、第１のアプリケーションと、複数の他のアプリケーションとを含んでよい。プログラム命令は更に、第１のアプリケーションを第２のアプリケーションとスワップするためにマルチプロセッサシステムが実行できるものであってよく、ここで第２のアプリケーションは、マルチプロセッサシステム上に既にロードされて実行された上記複数のアプリケーションのうちの１つではない。上記スワップは、上記複数の他のアプリケーションを停止させることなく実施できる。換言すると、上記複数の他のアプリケーションは、リアルタイム動作を実施するため及びリアルタイムデータを処理するために、上記スワップ中に実行され続けてよい。上記スワップ後、上記複数の他のアプリケーションは、第２のアプリケーションと共に実行され続けてよい。上記複数の他のアプリケーションの少なくともサブセットは、リアルタイム動作を実施するため及びリアルタイムデータを処理するために、第２のアプリケーションと通信してよい。第２のアプリケーションのプログラム命令及びデータを、１つ又は複数のメモリにロードするステップは、上記命令及びデータを、マルチプロセッサシステムを通して、２つ以上のスワップルートに沿って送信するステップを含んでよい（通信ルートは、マルチプロセッサシステム内での通信を物理的に実装する１つの手段である）。各スワップルートは特定のメモリと関連してよく、またそのメモリに命令／データをロードするために使用してよい。
【００２９】
いくつかの実施形態によると、マルチプロセッサシステムは：複数のプロセッサ；プロセッサ間に散在する複数のメモリ；及び複数のプロセッサとプロセッサ間に散在する複数のメモリとを相互接続する通信ファブリックを含んでよい。通信ファブリックは、上記複数のプロセッサの少なくともサブセット間に散在する複数のバッファメモリを含んでよい。複数のバッファメモリは、マルチプロセッサシステム中で実行されるアプリケーション間でデータを通信するよう構成可能なものであってよい。リアルタイムデータの受信及び／又は伝送並びにリアルタイムデータの処理を含むリアルタイム動作を実施するために、マルチプロセッサシステム上で複数のアプリケーションを実行している間、複数のバッファメモリは、第１のアプリケーションを第２のアプリケーションとスワップする間に、アクティブなアプリケーション間の接続を切断及び復元するよう構成可能なものであってよい。
【００３０】
いくつかの実施形態では、マルチプロセッサシステムは更に、複数のプロセッサ間で連結された複数のデータメモリルータ（ＤＭＲ）を含んでよい。ＤＭＲは、プロセッサ間に散在する複数のメモリを含んでよい。
【図面の簡単な説明】
【００３１】
【図１Ａ】図１Ａは、例示的なビデオカメラを示す。
【図１Ｂ】図１Ｂは、上記ビデオカメラに含まれるか又は連結されてよい組込みシステムを示し、この組込みシステムは、スワップ可能な複数のアプリケーションを用いて構成されたマルチプロセッサシステム（ＭＰＳ）を利用する。
【図２Ａ】図２Ａは、例示的な携帯電話を示す。
【図２Ｂ】図２Ｂは、上記電話において使用されるＭＰＳを示し、このＭＰＳはスワップ可能な複数のアプリケーションで構成される。
【図２Ｃ】図２Ｃは、上記電話において使用されるＭＰＳを示し、このＭＰＳはスワップ可能な複数のアプリケーションで構成される。
【図３】図３Ａは、無線トランスミッタ／レシーバデバイスを示す。図３Ｂは、上記無線デバイスによって実施され得る通信アルゴリズムを示し、この通信アルゴリズムは、ＭＰＳ上で実行されるスワップ可能な複数のアプリケーションを用いて実装される。
【図４】図４は、一実施形態によるＭＰＳのためのＨｙｐｅｒＸ（商標）アーキテクチャの一例を示す。
【図５】図５は、一実施形態によるＭＰＳのためのＨｙｐｅｒＸ（商標）アーキテクチャの一例を示す。
【図６】図６は、一実施形態によるＭＰＳのためのＨｙｐｅｒＸ（商標）アーキテクチャの一例を示す。
【図７】図７は、一実施形態によるＭＰＳ上で実行されるアルゴリズムの例示的な一部分を示す。
【図８】図８は、一実施形態によるＭＰＳ上で実行されるアルゴリズムの例示的な一部分を示す。
【図９】図９は、一実施形態によるＭＰＳ上で実行されるアルゴリズムの例示的な一部分を示す。
【図１０】図１０は、一実施形態によるＭＰＳ上で実行されるアルゴリズムの例示的な一部分を示す。
【図１１】図１１は、一実施形態によるＭＰＳ上で実行されるアルゴリズムの例示的な一部分を示す。
【図１２】図１２は、一実施形態によるＭＰＳ上で実行されるアルゴリズムの例示的な一部分を示す。
【図１３】図１３は、複数のアプリケーションが実行されているＭＰＳの例を示す。
【図１４】図１４は、アプリケーションをスワップアウトし、別のアプリケーションをスワップインして所定の位置とした後の、図１３のＭＰＳを示す。
【図１５】図１５は、３つのアプリケーションを２つの他のアプリケーションと置換した後の、図１３のＭＰＳを示す。
【図１６】図１６は、ＭＰＳ内部で実行されるアプリケーションによるアプリケーションスワップを開始するために親タスクがトリガされる実施形態を示す。
【図１７】図１７は、ＭＰＳの外側に位置する汎用プロセッサ（ＧＰＰ）上で実行されるシステムコントローラプログラムによるアプリケーションスワップを開始するために親タスクがトリガされる、異なる実施形態を示す。
【図１８】図１８は、親タスクがシステムコントローラと共に外部ＧＰＰ上で実行される実施形態を示す。
【図１９】図１９は、外部メモリデバイスからのアプリケーションのスワップインに関わるリソースを示す。
【図２０】図２０は、外部プロセッサからＭＰＳに命令及びデータストリームを送信することによって、アプリケーションコードがＭＰＳにロードされる、代替実施形態を示す。
【図２１】図２１は、２つの異なる外部ＲＡＭデバイスから、２つのアプリケーションがＭＰＳに同時にスワップインされる実施形態を示す。
【図２２】図２２は、アプリケーションをスワップインして再びスワップアウトするライフサイクルを示す。
【図２３】図２３は、単純なアプリケーションをスワップインして再びスワップアウトするライフサイクルを示す。
【図２４】図２４は、アプリケーションスワップを実装するために必要な、実行可能なソフトウェアコードを生成するための、ソフトウェアツールのセットを示す。
【図２５】図２５は、ＭＰＳ上のあるアプリケーション構成から、そのＭＰＳ上の別のアプリケーション構成への遷移を示す。
【図２６】図２６は、相互に干渉していない複数のアプリケーションのセットを構成するために開発段階中に使用してよい、開発ワークフローを示す。
【図２７】図２７は、あるアプリケーションをスワップインするために複数のスワップルートが使用されている例を示す。
【図２８】図２８は、アイソレータを介してデータを通過させることによって、あるスワップ可能なアプリケーションが他のアプリケーションと通信する例を示す。
【発明を実施するための形態】
【００３２】
本開示は様々な修正及び代替形態を許容するものであるが、その具体的な実施形態を例として図面に示し、また本明細書で詳細に説明する。しかしながら、上記具体的実施形態の図及び詳細な説明は、図示されている特定の形態に開示を限定することを意図したものではなく、反対に、添付の請求項によって定義されるような本開示の精神及び範囲内にある全ての修正例、均等物及び代替例を包含することを意図したものであることを理解されたい。本明細書において使用されている見出しは、単に組織化を目的としたものであり、これらの使用は本説明の範囲の限定を意味しない。本出願全体を通して使用される単語「してよい／し得る／できる（ｍａｙ）」は、許容の意味で（即ち「可能性がある」ことを意味して）使用されており、強制の意味で（即ち「しなければならない」ことを意味して）使用されるものではない。同様に、単語「含む（ｉｎｃｌｕｄｅ／ｉｎｃｌｕｄｉｎｇ／ｉｎｃｌｕｄｅｓ）」は、ある対象を含むもののそれに限定されないことを意味する。
【００３３】
様々なユニット、回路又はその他の構成部品は、１つ又は複数のタスクを実施する「よう構成される（ｃｏｎｆｉｇｕｒｅｄ  ｔｏ）」として記載され得る。このような文脈において「よう構成される」は、動作中に上記１つ又は複数のタスクを実施する「回路構成を有する」ことを一般に意味する、構造の広範な説明である。従ってユニット／回路／構成部品は、ユニット／回路／構成部品が現在オンでなくても上記タスクを実施するよう構成できる。一般に「よう構成される」に対応する構造を形成する回路構成は、ハードウェア回路を含んでよい。同様に、記載を簡略化するために、様々なユニット／回路／構成部品は、１つ又は複数のタスクを実施するとして記載され得る。このような記載は「よう構成される」という語句を含むものとして解釈されるものとする。１つ又は複数のタスクを実施するよう構成されるユニット／回路／構成部品の列挙は、これらユニット／回路／構成部品に関して米国特許法第１１２条第６段落の解釈を援用しないことを明示的に意図したものである。より一般には、いずれの要素の列挙は、「…のための手段（ｍｅａｎｓ  ｆｏｒ）」又は「…のためのステップ（ｓｔｅｐ  ｆｏｒ）」という語句が具体的に使用されていない限り、上記要素に関して米国特許法第１１２条第６段落の解釈を援用しないことを明示的に意図したものである。
【００３４】
参照による援用
Ｍｉｃｈａｅｌ  Ｂ．Ｄｏｅｒｒ、Ｗｉｌｌｉａｍ  Ｈ．Ｈａｌｌｉｄｙ、Ｄａｖｉｄ  Ａ．Ｇｉｂｓｏｎ、Ｃｒａｉｇ  Ｍ．Ｃｈａｓｅを発明者とする、発明の名称「Ｐｒｏｃｅｓｓｉｎｇ  Ｓｙｓｔｅｍ  Ｗｉｔｈ  Ｉｎｔｅｒｓｐｅｒｓｅｄ  Ｓｔａｌｌ  Ｐｒｏｐａｇａｔｉｎｇ  Ｐｒｏｃｅｓｓｏｒｓ  Ａｎｄ  Ｃｏｍｍｕｎｉｃａｔｉｏｎ  Ｅｌｅｍｅｎｔｓ」の米国特許第７４１５５９４号は、その全体を参照することにより、本明細書においてその全体が完全に論述されているかのように、本明細書に援用されるものとする。
【００３５】
Ｍｉｃｈａｅｌ  Ｂ．Ｄｏｅｒｒ、Ｃａｒｌ  Ｓ．Ｄｏｂｂｓ、Ｍｉｃｈａｅｌ  Ｂ．Ｓｏｌｋａ、Ｍｉｃｈａｅｌ  Ｒ  Ｔｒｏｃｉｎｏ、Ｄａｖｉｄ  Ａ．Ｇｉｂｓｏｎを発明者とする、２０１１年１０月１４日出願の、発明の名称「Ｄｉｓａｂｌｉｎｇ  Ｃｏｍｍｕｎｉｃａｔｉｏｎ  ｉｎ  ａ  Ｍｕｌｔｉｐｒｏｃｅｓｓｏｒ  Ｓｙｓｔｅｍ」の米国特許出願第１３／２７４１３８号は、その全体を参照することにより、本明細書においてその全体が完全に論述されているかのように、本明細書に援用されるものとする。
【００３６】
用語
コンピュータシステム：パーソナルコンピュータシステム（ＰＣ）、メインフレームコンピュータシステム、ワークステーション、ネットワーク家電、インターネット家電、パーソナルデジタルアシスタント（ＰＤＡ）、テレビジョンシステム、グリッドコンピューティングシステム若しくはその他のデバイス又はデバイスの組み合わせを含む、様々なタイプの計算又は処理システムのいずれか。一般に、用語「コンピュータシステム」は、メモリ媒体からの命令を実行する少なくとも１つのプロセッサを有するいずれのデバイス（又は複数のデバイスの組み合わせ）を包含するものとして広く定義できる。
【００３７】
ソフトウェアアプリケーション：用語「ソフトウェアアプリケーション（ｓｏｆｔｗａｒｅ  ａｐｐｌｉｃａｔｉｏｎ）」（本出願では単に「アプリケーション（ａｐｐｌｉｃａｔｉｏｎ）」とも呼ぶ）は、その一般的な意味の全範囲を有することを意図したものであり、１つ又は複数のメモリに記憶でき、かつ１つ又は複数のプロセッサが実行できる、あらゆるタイプのプログラム命令、コード、スクリプト及び／又はデータ又はこれらの組み合わせを含む。例示的なソフトウェアアプリケーションは、Ｃ、Ｃ＋＋、ＦＯＲＴＲＡＮ、Ｊａｖａ（商標）、アセンブリ言語等のテキストベースプログラム言語で書かれたプログラム；グラフィックプログラム（グラフィックプログラム言語で書かれたプログラム）；アセンブリ言語プログラム；機械言語にコンパイルされたプログラム；スクリプト；並びに他のタイプの実行可能なソフトウェアを含む。
【００３８】
アプリケーションは、ＭＰＳの１つ又は複数のプロセッサ上で実行でき、ＭＰＳのローカルメモリのうちの１つ若しくは複数からデータを読み出すことができ、及び／又はＭＰＳのローカルメモリのうちの１つ若しくは複数にデータを書き込むことができる。アプリケーションは、１つ又は複数の計算タスクを含んでよく、ここで各タスクは典型的にはＭＰＳの単一のプロセッサ上で実行され、１つ又は複数のアプリケーションからの１つ又は複数のタスクと上記プロセッサを共有してよい。アプリケーションは、特定の機能又は動作を実施してよい。アプリケーションが２つ以上のタスクを含む場合、これらタスクは互いに通信して上記機能又は動作を実施してよい。
【００３９】
ＭＰＳは複数のアプリケーションを同時に実行してよく、例えばこれらアプリケーションは互いに並列に実行される。アプリケーションは互いに通信してよく、これらアプリケーションが実施する各機能又は動作は、より大きい又はより高いレベルの機能又は動作を実施するために互いを利用してよい。
【００４０】
自動的に（ａｕｔｏｍａｔｉｃａｌｌｙ）：その作用又は動作を直接指定又は実施するユーザ入力を必要とせずに、コンピュータシステムが実施する動作又は操作（例えばコンピュータシステムが実行するソフトウェア）について用いる。従って用語「自動的に」は、ユーザが手動で実施又は指定する操作（ここでユーザが操作を直接実施するために入力を提供する）と対照的なものである。自動処理は、ユーザが提供する入力によって開始される場合があるが、これに続く「自動的に」実施される動作は、ユーザが指定するものではなく、即ち「手動で」実施される（ユーザが各動作の実施を指定する）ものではない。例えばユーザが、各フィールドを選択し、（例えば情報をタイピングすることによって、チェックボックスを選択することによって、無線選択によって等で）情報を指定する入力を提供することによって、電子フォームを埋める場合、仮にコンピュータシステムがユーザの動作に応答して上記フォームを更新しなければならないとしても、これは上記フォームを手動で埋めたことになる。このようなフォームはコンピュータシステムによって自動で埋めることができ、この場合コンピュータシステム（例えばコンピュータシステム上で実行されるソフトウェア）は、フォームのフィールドを分析して、フィールドへの回答を指定するいずれのユーザ入力を必要とせずにフォームを埋める。上述のように、ユーザはフォームを自動で埋める動作を発動する場合はあるが、実際にフォームを埋める動作には関わらない（例えばユーザはフィールドへの回答を手動で指定せず、回答は自動的に完了する）。本明細書は、ユーザが行う動作に応答して自動的に実施される操作の様々な例を提供する。
【００４１】
マルチプロセッサシステム（ＭＰＳ）及びＭＰＳ上で実行されるアプリケーションを動的にスワップするための関連する方法の様々な実施形態を説明する。マルチプロセッサシステム（ＭＰＳ）は、複数の処理要素（ＰＥ）を含むシステムとして定義できる。ＭＰＳは、これらＰＥ間に散在する複数のメモリを有してよく、あるいは単一の共有メモリを有してよい。本明細書で使用される場合、用語「処理要素（ｐｒｏｃｅｓｓｉｎｇ  ｅｌｅｍｅｎｔ）」は、プロセッサ若しくはＣＰＵ（中央演算処理装置）、マイクロプロセッサ又はプロセッサコアを指す。ＭＰＳは２つ以上のいずれの個数のＰＥを含んでよいが、いくつかのＭＰＳは、典型的には汎用プロセッサ（ＧＰＰ）を１つのみ、又は数個のＧＰＰのみを含む従来のコンピュータシステムよりも有意に多い個数のＰＥを含んでよいことに留意されたい。例えばいくつかのＭＰＳは、４、８、１６、３２又は６４個のＰＥを含んでよい（他の例は例えば数ダース、数百個又は数千個ものＰＥを含む）。いくつかの実施形態では、大型ＭＰＳに好適なＰＥは、低電力消費を目的とした特別な構成により、従来のコンピュータシステムによって使用される汎用プロセッサよりもエネルギ効率が高いものであってよい。
【００４２】
ＭＰＳはまた、ＰＥ及び／又はメモリを相互接続する相互接続ネットワーク（ＩＮ）も含んでよい。ＰＥ及びメモリは、円形次元（例えばループ又はリング）を含む１、２、３又は４以上の次元で相互接続してよい。より高い次元のＭＰＳは、より低い次元のファブリケーション媒体上にマッピングできる。例えば４次元（４Ｄ）超立方体の形状を有するＭＰＳは、シリコン集積回路（ＩＣ）チップの３Ｄスタック上に、又は単一の２Ｄチップ上に、又は計算ユニットの１Ｄの線上にさえ、マッピングできる。低次元のＭＰＳをより高次元の媒体にマッピングすることもできる。例えば計算ユニットの１Ｄの線を、ＩＣチップの２Ｄ平面上に曲がりくねった形状で展開でき、又はチップの３Ｄ積層体へと巻くことができる。ＭＰＳは複数のタイプの計算ユニットと、プロセッサ及びメモリが散在する構成とを含んでよい。広い意味でのＭＰＳには、ＭＰＳの階層又は入れ子構成、特に相互接続されたＩＣチップからなるＭＰＳも含まれ、この場合ＩＣチップは１つ又は複数のＭＰＳを含み、これらＭＰＳもまた更に深い階層構造を有してよい。
【００４３】
本出願において使用される用語ＭＰＳは、複数のプロセッサの比較的均一なセットと、いわゆる「プラットフォームＩＣ」チップ上に集積された汎用プロセッサ及び特殊化されたプロセッサの異種集団との両方を包含する。プラットフォームＩＣチップは数個〜多数のプロセッサを含んでよく、これらは典型的には共有メモリによって相互接続され、場合によってはオンチップネットワークによって相互接続される。ＭＰＳと「プラットフォームＩＣ」チップとの間には違いがあってもなくてもよい。しかしながら「プラットフォームＩＣ」チップは、特定の垂直的市場における特定の技術要件に対処するために市販されているものであってよい。
【００４４】
一般に、ＭＰＳのためのメモリは階層として組織してよく、この階層は頂部に高速なメモリを有し、階層を１段ずつ下がるにつれてより低速であるがより大容量のメモリを有する。ＭＰＳ中において、階層の頂部の補助メモリは、各ＰＥの近傍に位置してよい。各補助メモリは、最適な命令又は最適なデータを保持するよう特殊化できる。特定のＰＥのための補助メモリは、そのＰＥ専用のものであっても、又は他のＰＥと共用であってもよい。
【００４５】
メモリ階層を更に下がると、各ＰＥに隣接する補助メモリの何倍も大きいビット容量を有する半導体同期ダイナミックランダムアクセスメモリ（ＳＤＲＡＭ）等の、比較的大型の共有メモリが存在してよい。メモリ階層を更に下がると、フラッシュメモリ、磁気ディスク及び光学ディスク等の他のタイプのメモリが存在してよい。
【００４６】
ＭＰＳは、特定の動作を達成できるよう、ソフトウェアアプリケーションを用いてプログラムされてよい。各アプリケーションは、ＭＰＳ中のＰＥのうちの１つ又は複数によって実行されてよい。しばしば、ＭＰＳ上で複数のアプリケーションを同時に実行してよい。アプリケーションは、リアルタイム動作を実施するために、共に実行され、互いに通信してよい。リアルタイム動作は、リアルタイムデータを伴う入力又は出力のうちの少なくとも一方を実施してよい。例えばＭＰＳは入力信号を介してリアルタイムデータを受信してよい。アプリケーションのうちの１つ又は複数は入力信号を処理してよく、場合によっては、この処理に基づく修正された又は追加のリアルタイムデータを伴う出力信号を生成してよい。
【００４７】
システムの実行中の何らかの時点において、特定のアプリケーションを実行しなくてよいことを決定してよい。例えばこのアプリケーションはアイドル状態となってよく、長期間に亘ってアイドル状態のままとなってよく、又はこのアプリケーションの優先度は、実行を待機している別のアプリケーションより低くてよく、又は別のアプリケーションが、上記アプリケーションが使用中の特定のリソースへのアクセスを要求してよい。従って、実行中のアプリケーションの実行を停止して、別のアプリケーションが新規に利用可能となったプロセッサリソースを使用できるようにすることが有利であり得る。これは本明細書では、以前に実行中であったアプリケーションを「スワップアウト（ｓｗａｐ  ｏｕｔ）」して、他のアプリケーションを「スワップイン（ｓｗａｐ  ｉｎ）」することとして表現される。
【００４８】
組込みシステムは通常、アクティブ状態を維持して機能し続ける必要があり、また一般には任意に停止できない。その例としては、重要な安全デバイスを制御するシステムがあり、ここでこのシステムの停止は、安全でない状況を発生させ得る。別の例として、組込みシステムが、ユーザに提示するか又は伝送するためにビデオ及び／又は音声を処理している場合があり、この組込みシステムを停止させれば、メディアデータ中に望ましくないアーティファクトが発生し得る。従って、組込みシステムでは、アプリケーションを停止及び開始させるプロセッサは、注意深く取り扱う必要があり得る。本出願に記載のスワップ方法は、システムを停止させずにアプリケーションをスワップできるようにすることができる。例えば、ＭＰＳ上で現在実行中の、スワップイン／アウトされているアプリケーション以外のアプリケーションは、スワップが行われている間も実行を継続できる。更にこのスワップ方法は、システムがスワップを迅速に行うことができるようにすることもでき、これによりシステムが完全であり、かつ滑らかに機能し続けることを保証できる。
【００４９】
本出願に記載のスワップ方法は、特定のＭＰＳのリソースの制限を説明する。このような制限は、各ＰＥに関して利用可能な命令メモリの量、各ＰＥに関して利用可能なデータメモリの量、ＰＥ間の通信の帯域幅、ＰＥと外部メモリとの間の通信の帯域幅等を含んでよい。例えば、ＰＥが制限された命令メモリを有するＭＰＳは、新規のアプリケーションを初期化するために、外部ストレージから命令メモリに新規の命令を移動させる必要があり得る。従ってこのスワップ方法は、リソースが制限されたＭＰＥに影響を受けやすいものとなり得る。以下で詳細に説明するように、本スワップ方法は、第１のアプリケーションを安全に停止させて、第１のアプリケーションの処理リソースを他の使用のために空けることができるようにすることができ、また第２のアプリケーション（又はアプリケーションの第２のセット）を、利用可能な処理リソース上で迅速かつ安全に実行開始できるようにすることができる。
【００５０】
スワッププロセス中、組込みシステム内で実行されている他のアプリケーションは動作を継続してよく、スワップが実施されていることに気づかなくてよい。更に、スワップイン又はスワップアウトされるアプリケーションは、それ自体が「スワップに気づく（ｓｗａｐｐｉｎｇ  ａｗａｒｅ）」ことがなくてよい。換言すると、スワップ可能なアプリケーションは特別な構成である必要がなくてよい。これにより、有利なことに、例えばスワップ可能なアプリケーションを、スワップを実装するために特別なプログラム論理を含める必要なしに、従来の様式の通常のアプリケーションとして書く又は開発することによって、容易に構成できるようにすることができる。スワップを実装するプログラムコードは、スワップ可能なアプリケーション自体の外部の他の構成要素に実装してよい。
【００５１】
図１Ａ〜３Ｂ  組込みシステム内の動的に再構成可能なＭＰＳの例
図１Ａ〜３Ｂは、再構成可能なＭＰＳの複数の例を示し、例えばこれらＭＰＳは、本出願に記載の技術に従って動的にアプリケーションをスワップイン及びスワップアウトするよう構成される。各ＭＰＳは、あるデバイス内でリアルタイム動作を実施するために動作する組込みシステムの一部であってよい。図１Ａ〜３Ｂは単なる例であり、他の様々なタイプの組込みシステムのいずれが本出願に記載の方法を使用してよいことに留意されたい。
【００５２】
図１Ａはビデオカメラ２０１を示し、図１Ｂはこのビデオカメラ２０１に含まれてよい、又は連結されてよい組込みシステム２０２を示す。図２Ｂに示すように、組込みシステム２０２は、ビデオカメラ２０１からのビデオ信号を受信してこれをＭＰＳ２０３へと通過させる、カメラリンクインタフェース２０４を含む。この例では、ＭＰＳ２０３は、生のビデオストリームを受信し、デモザイク処理及び色空間変換等の基本的な処理を実施して、上記生のカメラデータを、ダウンストリームフィルタが消費できるデータに変換する、ベースシステム２０８を含む。ベースシステム２０８は、上記変換されたデータを１つ又は複数の画像処理アプリケーション２０９に提供してよい。画像処理アプリケーションは少なくとも２つのアプリケーションを含んでよく、各アプリケーションは、様々な方法のうちのいずれかにおいて、ビデオデータをフィルタリングする、又はその他の処理を行うよう構成される。画像処理アプリケーションは、ビデオ信号を処理する方法を変更するために動的にスワップイン及びスワップアウトしてよい。一例として、このシステムは初め、信号に対してエッジフィルタリングアルゴリズムを実施するエッジフィルタアプリケーションを実行してよい。ユーザ入力又は他の条件に応答して、エッジフィルタアプリケーションを、信号に対してメジアンフィルタリングアルゴリズムを実施するメジアンフィルタアプリケーションと動的にスワップしてよい。「ビデオストリームを組み合わせる（ｃｏｍｂｉｎｅ  ｖｉｄｅｏ  ｓｔｒｅａｍ）」ブロック２０７によって、現在の画像処理アプリケーションの結果を、ベースシステム２０８が生成したオリジナルデータと、例えば画面分割ディスプレイにおいて組み合わせてよい。組み合わされた信号は続いて、デジタルビデオインタフェース（ＤＶＩ）ブロック２０６を介してＤＶＩインタフェース２１０へと通過してよく、このＤＶＩインタフェース２０１はディスプレイデバイスに連結されている。従って、エッジフィルタアプリケーションとメジアンフィルタアプリケーションとのスワップの結果は、ディスプレイデバイス上でリアルタイムで視認できる。ビデオストリームは汎用プロセッサ（ＧＰＰ）２１１へも通過させてよい。ＧＰＰ２１１上で実行されるプログラムは、ＭＰＳ２０３上でどのフィルタを実行するべきかを指示するために、制御信号をＭＰＳに提供してもよい。
【００５３】
図２Ａは携帯電話２１５を示し、図２Ｂ、２Ｃはこの電話において使用されるＭＰＳ２１６を示す。図２Ｂに示すＭＰＳの構成では、ＭＰＳは現在、セルラー探索アプリケーション２１８を実行している。電話は、ロングタームエボリューション（ＬＴＥ）４Ｇセルラー通信無線インタフェース技術規格を使用する。ＬＴＥ規格に従って、電話はまず、セルラー探索アプリケーション２１８を用いてローカルセルラー基地局に登録される。一度登録されると、セルラー探索アプリケーション２１８はもはや必要ない。従ってセルラー探索アプリケーション２１８は、例えば図２Ｃに示す共有リンクデータ処理アプリケーションといった異なるアプリケーションと動的に置換してよい。フロントエンドアプリケーション２１７は、リサンプリング及びアップ／ダウンコンバージョンを実施し、これは上記スワップが発生する間もＭＰＳ上で実行されたままである。ＭＰＳはが十分に大きい（例えば１００＋個のプロセッサ）場合、セルラー探索アプリケーション及び共有リンクデータ処理アプリケーションは、例えばスワップ時にこれら全体をロード及びアンロードする代わりに、常にロードされたままとすることができる。
【００５４】
この例では、セルラー探索アプリケーションから共有リンクデータ処理アプリケーションへのカットオーバ、及び再登録の必要がある場合の逆の処理のための望ましい時間間隔は、４ｍｓである。上記カットオーバがあまりに遅いと、メディアアクセスコントローラ２１１は再登録に逆戻りしてしまう。セルラー探索アプリケーションは、多数のＣＲＣ計算を並列で実行し、真の信号が発見されるとすぐに、電話はその１つの信号にロックされる。メディアアクセスコントローラが登録プロセスを完了し、共有リンク内のデータスロットを要求する間に、短い期間が存在する。メディアアクセスコントローラは、適切にスロットを予約するために、現在伝送されているデータの先を読むように設計される。典型的には、メディアアクセスコントローラは４サブフレーム、又は約４ミリ秒の先読みを行い、従ってこれが、共有リンクデータ処理アプリケーションへのカットオーバのための望ましい期間となる。
【００５５】
図３Ａは、無線トランスミッタ／レシーバデバイス２３０を示す。代替として、デバイス２３０は、ラジオ等のレシーバのみのデバイスであってよい。図３Ｂは、無線デバイス２３０が実施できる通信アルゴリズムを示す。上部にはアルゴリズムの伝送部２３１が示されており、底部にはアルゴリズムの受信部２３２が示されている。変調器バンク２３５は変調アルゴリズムを実施し、復調器バンク２３６は復調アルゴリズムを実施する。変調器バンク２３５及び場合によってはアルゴリズムの伝送部２３１の他の部分は、複数の変調器アプリケーションを使用するＭＰＳ上で実装してよい。いずれの所定の時点において、変調器アプリケーションのうちの１つのみがロードされ、実行されてよい。ＭＰＳは、使用中の特定の変調アルゴリズムを変更するために、現在ロードされている変調器アプリケーションを異なる変調器アプリケーションに動的にスワップするよう構成してよい。復調器バンク２３６が実施する復調アルゴリズムを動的に変更するために、同様の様式で異なる復調アプリケーションをスワップイン及びスワップアウトしてよい。本開示を理解するために必要ない通信アルゴリズムの複数の部分は、本説明から省略される。
【００５６】
図１Ａ〜３Ｂは、ソフトウェアアプリケーションを動的にスワップするよう構成されたＭＰＳを使用できるデバイスの例として提示されていることに留意されたい。様々な実施形態では、本出願に記載されているもの等のＭＰＳを、いずれの種類のデバイス又はシステムにおいて使用してよい。また、スワップイン及びスワップアウトされるアプリケーションは、いずれの種類のソフトウェアアプリケーションであってよく、例えば様々な方法のいずれにおいてリアルタイムデータを処理する、又はデバイス若しくはシステムが実施するリアルタイム動作又は他の動作を実装するための他の様々な機能のいずれを実施する、アプリケーションであってよい。
【００５７】
図４〜１２  例示的なＭＰＳアーキテクチャ
様々な実施形態では、本出願に記載のアプリケーションスワップ技術を様々な種類のＭＰＳのいずれにおいて利用してよい。ＭＰＳはいずれの所望のアーキテクチャを有してよい。図４〜６は、一実施形態によるＭＰＳに関する例示的なアーキテクチャを示す。このＭＰＳアーキテクチャは、米国特許第７４１５５９４号において開示されているＨｙｐｅｒＸ（商標）アーキテクチャの例である。このアーキテクチャは、多数のアプリケーションを同時に実行する能力を有する、プログラム可能な、極めて低電力かつ低コストの、多プロセッサ組込みコンピュータシステム（ここでは単一の集積回路チップとして実現される）を実装するために好適なものであり得る。ＨｙｐｅｒＸ（商標）アーキテクチャに関する以下の説明は単なる例であり、他の様々なＭＰＳアーキテクチャのいずれを所望に応じて使用してよい。
【００５８】
図４に示す実施形態では、ＭＰＳ１０は、正方形で表される複数の処理要素（ＰＥ）を含む。ＭＰＳはまた、円で表される複数のデータメモリルータ（ＤＭＲ）を含む。ＤＭＲは、隣接するＰＥのための補助メモリとして、及び通信ルータ又はスイッチノードとして作用する。ＤＭＲ間の線は、相互接続ネットワーク（ＩＮ）を実装するＤＭＲ‐ＤＭＲ間通信チャネル又はリンクを示す。ＤＭＲをこのリンクと共に使用して、ＰＥ間の通信経路、及びＰＥと、ＭＰＳを外部デバイスに連結するＩ／Ｏポートとの間の通信経路を形成してよい。各ＰＥにおいて、通信されるいずれの情報は、隣接するＤＭＲのメモリ内にバッファリングしてよい。本出願で使用される場合、ＰＥはＰＥノードとも呼ばれる場合があり、またＤＭＲはＤＭＲノードとも呼ばれる場合がある。本出願では、ＤＭＲは「構成可能な通信要素（ｃｏｎｆｉｇｕｒａｂｌｅ  ｃｏｍｍｕｎｉｃａｔｉｏｎ  ｅｌｅｍｅｎｔ）」とも呼ばれる。
【００５９】
図４、５に示すＤＭＲ間のリンクは直線のメッシュを形成する。しかしながら、他の多数の接続スキームが可能であり、考察の対象となる。図５に示すＭＰＳ接続スキームでは、各ＰＥは４つの隣接するＤＭＲに接続され、各ＤＭＲは４つの隣接するＰＥ及び４つの隣接するＤＭＲに接続される。３次元の直線メッシュをサポートするための、１つのＤＭＲに対して６つのＤＭＲ‐ＤＭＲ間リンクの使用、又は東西南北方向に加えて４つの斜め方向をサポートするための、１つのＤＭＲに対して８つのリンクの使用といった、より高次元のＩＮをサポートするための他の接続スキームも想定される。リンクは物理的に最も近接した近隣のＤＭＲに限定する必要はない。
【００６０】
チップＩ／Ｏを有するＭＰＳ２０は、汎用マイクロプロセッサ、ＤＳＰ、ＦＰＧＡ又はＡＳＩＣが現在使用されている様々なシステム及びアプリケーションのいずれにおいても使用され得る。例えば図４、５に示す処理システムは、様々なタイプのコンピュータシステム、デジタル信号プロセッサ（ＤＳＰ）又は計算を必要とするその他のデバイスのいずれにおいて使用できる。
【００６１】
ＨｙｐｅｒＸハードウェアファブリック
ＨｙｐｅｒＸ（商標）アーキテクチャの一例では、マルチプロセッサアレイはユニットベースのハードウェアファブリック（メッシュ）からなってよく、各ユニットはＨｙｐｅｒＳｌｉｃｅと呼ばれる。このハードウェアファブリックは、グリッド上にユニットを配設し、隣接するユニットを相互接続することによって形成できる。各ＨｙｐｅｒＳｌｉｃｅユニットは、１つ又は複数のデータメモリ及びルータ（ＤＭＲ）、並びに１つ又は複数の処理要素（ＰＥ）を含んでよい。
【００６２】
米国特許第７４１５５９４号では、ＤＭＲは動的構成可能通信（ＤＣＣ）要素と呼ばれることもあり、ＰＥは動的構成可能処理（ＤＣＰ）要素と呼ばれることもある。ＤＭＲは隣接するＰＥに補助メモリを提供でき、また相互接続ネットワーク（ＩＮ）にルータ及びリンクを提供できる。この文脈において「動的構成可能（ｄｙｎａｍｉｃａｌｌｙ  ｃｏｎｆｉｇｕｒａｂｌｅ）」は、アプリケーションソフトウェアの実行中にこれらのハードウェアリソース（ＰＥ、ＤＭＲリンク、ＤＭＲメモリ）を再割当てできることを意味している。これはアプリケーションソフトウェアを、より小さいタスク及び通信メッセージの階層に分割することによって達成できる。これらタスク及びメッセージをリソースに割り当てて、同時に（又は必要に応じて連続的に）実行してよい。タスク及びメッセージが完了すると、これらを再実行でき、又は他のタスク及びメッセージで置換して、アプリケーションソフトウェアの新規の構成を形成できる。「オン・ザ・フライ（ｏｎ  ｔｈｅ  ｆｌｙ）」で構成を変更できる能力は特に、有限のリソースをより効率的に使用するため、及び変化する外部からの要求に対してより良好に適合するための柔軟性をサポートする。
【００６３】
ＨｙｐｅｒＸ（商標）ハードウェアファブリックは、処理要素に対して独立して透明な形で動作する一次ＩＮ（ＰＩＮ）を有し、また任意の通信ネットワークトポロジをサポートするＨｙｐｅｒＳｌｉｃｅ間の、リアルタイムでプログラム可能かつ適合可能な通信経路（ルート又はパスと呼ばれる場合もある）を通してオンデマンド帯域幅を提供できる。ＨｙｐｅｒＳｌｉｃｅの調整グループは、ソフトウェア制御下で「オン・ザ・フライ」で形成及び再形成できる。関数を評価するために使用されるハードウェアの量を動的に変更できるこのような能力により、ハードウェアリソースの最適な応用が可能となり、これによって処理におけるボトルネックが緩和される。ハードウェアファブリックの縁部において、リンクは、メモリ階層の更に下にあるメモリのタイプに対して、又は集積回路（ＩＣ）チップの縁部のＩ／Ｏに対して特化された回路に接続される。
【００６４】
ＨｙｐｅｒＸ（商標）ハードウェアファブリックの相互接続されたＤＭＲは、チップ内を横断する、及びチップ間の、最も近接した、局所的な、及び全体的な通信を提供できる。これらの通信モードはそれぞれ、ＤＭＲリソースを物理的に用いて、データの局所性及びソフトウェアアルゴリズムの要件に応じてデータ／メッセージを様々に送信できる。「クイックポート（Ｑｕｉｃｋ  Ｐｏｒｔ）」設備を設けることにより、プロセッサからいずれのネットワーク目的地への、データの１つ又は複数の語の低レイテンシ伝送をサポートできる。ブロック伝送に関して、メモリ及びルーティングファブリック（又は通信ファブリック）を横断するデータの移動を管理するために、ＤＭＲ内でダイレクトメモリアクセス（ＤＭＡ）エンジンを利用可能としてよい。ＰＥ間の最近接通信に関して、共有メモリ及びレジスタの使用が、最も効率的なデータ移動方法となり得る。局所的及び全体的なデータ移動に関して、ルーティングファブリック（ＰＩＮ）の使用が最も効率的な方法となり得る。通信経路（又はルート）は動的でも静的でもよい。動的ルートは、データ伝送のために設定され、伝送が完了すると、他のルート及びデータ伝送のためにＰＩＮリソースを活用できるよう切断してよい。静的リソースは、プログラム実行を通して所定の位置にあり続けることができ、主に優先度が高く重要な通信に使用できる。通信経路の物理的位置及びこれら経路を横断するデータ伝送のタイミングは、ソフトウェアプログラム制御下にあってよい。いずれのセンダといずれのレシーバとの間の同時データ伝送をサポートするために多重通信経路が存在してよい。
【００６５】
処理要素（ＰＥ）
ＤＭＲのアーキテクチャにより、異なる相互スワップ可能なＰＥを、システムを特定の用途に対して最適化するためにマルチプロセッサファブリックにおいて使用できる。ＨｙｐｅｒＸ（商標）マルチプロセッサシステムは、ＰＥ異種のＰＥによるアレイ又は同種のＰＥによるアレイを備えてよい。ＰＥは従来のプロセッサであってよく、又はＰＥはプロセッサの従来の定義に適合していなくてもよい。いくつかの実施形態では、ＰＥは、特定の論理関数のための結線接続されたプロセッサとして機能する論理ゲートの集合であってよく、ここではより高い性能、より小さい面積及び／又はより低い電力のためにプログラム可能性が犠牲となっている。
【００６６】
図５に示すように、例えばＨｙｐｅｒＸ（商標）ＭＰＳ等のＭＰＳ内のＰＥは、ＰＥ間の分散ＤＭＲによる多数のメモリへの並列接続によって供給を受けることができる。このような配置により、分離型（即ち非分散型）の配置に比べて、所定のＰＥがＤＭＲ内のメモリにアクセスするために必要な時間及びエネルギを削減でき、また本出願ではこのような配置を分散配置と呼ぶ場合がある。
【００６７】
図４の実施形態では、ＰＥとＤＭＲとの比はおよそ１：１である。他の様々な実施形態において、これとは異なるＰＥとＤＭＲとの比も可能である。
【００６８】
ＨｙｐｅｒＸ（商標）プロセッサアーキテクチャは、固有の多次元性を含んでよいが、物理的には平面実施形態に実装できる。このプロセッサアーキテクチャは高エネルギ効率特性を有してよく、また（大型のアレイに対して）基本的に対応可能であり、信頼性が高い。即ち低電力かつ信頼性の高い概念を提示する。プロセッサアーキテクチャが高い性能を達成できる態様は、最新式のプロセッサ、メモリネットワーク、柔軟なＩＯを含んでよい。処理要素（ＰＥ）はフルフレッジドＤＳＰ／ＧＰＰであってよく、また、ハードウェアリソースの使用を同時に最大化しながらスループットを維持するために実行パイプラインを動的に拡張できる可変幅命令語命令セットアーキテクチャによって支持される、メモリ間（キャッシュレス）アーキテクチャに基づくものであってよい。
【００６９】
通信経路の設定
図４は、処理要素（ＰＥ）及びデータメモリルータ（ＤＭＲ）のネットワークを含むＨｙｐｅｒＸ（商標）システムのある実施形態を示す。ＰＥは矩形のブロックとして図示され、ＤＭＲは円として図示されている。ＤＭＲ間のルーティングパスは点線で図示されている。中実の三角形はオフメッシュ通信を示し、太い実線はＤＭＲ間のアクティブなデータ通信を示す。計算タスクはその数値による識別子で示され、これを実行するＰＥ上に位置する。通信に使用されているデータ変数はその名称で示され、これを含むＤＭＲ上に位置する。図示した実施形態では、左上のＰＥはタスクＩＤ６２のタスクに割り当てられ、このＰＥに隣接する各ＤＭＲを介して他のＰＥ又はメモリと通信でき、上記各ＤＭＲは通信パス変数ｔ、ｗ、ｕで表されている。これもまた図示されているように、この実施形態では、アクティブな通信ルートは、「ｘ」で標識されている隣接するＤＭＲを介して、７１（例えば別のタスクＩＤ）で表されているＰＥを、オフメッシュ通信パス又はポートに接続する。
【００７０】
データメモリルータ
ＤＭＲハードウェア構造のある例示的実施形態のブロック図を図６に示す。図示した実施形態では、中央データメモリ（ＤＭ）はルータを表す八角形のリングで囲まれている。なお、図示した八角形形状は単なる記号表現であり、実際の形状は異なっていてよく、例えば矩形であってよい。ＤＭＲを取り囲むのは、他のＤＭＲ及びＰＥへのデータパスを表す多数の双方向矢印である。これらの双方向データパスは、各端部における実際の双方向トランシーバを用いて実装でき、又は反対方向に配向された単方向パスのペアとして実装できる。
【００７１】
図６のルータとデータメモリとの間の単方向矢印は、メモリとルータとの間の単方向データパスを表す。これらの矢印の近傍の小さな正方形はＤＭＡエンジン、即ちＤＭからの読み出しをサポートするＤＭＡリーダ（ＤＭＡＲ）及び／又はＤＭへのデータ書き込みをサポートするＤＭＡライタ（ＤＭＡＷ）を表す。ＤＭＡＲエンジンは、典型的には読み出しデータをリンクから別のＤＭＲに送信するためにバッファによって増大させるための、メモリのためのアドレス信号を生成する。同様にＤＭＡＷエンジンは、リンクから受信した書き込みデータをバッファによって増大させるための、メモリのためのアドレス信号を生成する。各ＤＭＡエンジンはＰＥより大幅に小さく、使用電力が少なく、従ってこれらＤＭＡエンジンは、メモリのブロックの読み出し及び書き込みへの使用に関して魅力的である。ＤＭＡエンジンは、ＤＭメモリスペース内の関連する構成レジスタへのＰＥによる書き込みによって構成できる。特定のアドレスへの書き込みによりＤＭＡがトリガされ、上記増大が開始される。ＤＭＡが複数のアドレスのブロックを通しての増大を終了すると、無制限に又は所定の数のループだけルーピングを継続するよう構成されていない限り、ＤＭＡは停止する。
【００７２】
図５に示すＭＰＳ２０等のＭＰＳにおいて高帯域幅ポートをサポートするために、ポート（ＰＥ‐ＤＭＲ又はＤＭＲ‐ＤＭＲ）間の接続又はリンクは短くてよく（即ち隣接するものに限定されていてよく）、多数の並列な導電性トレース又は「ワイヤ（ｗｉｒｅ）」若しくは「ライン（ｌｉｎｅ）」からなってよい。いくつかの実施形態では、１つのリンクはいくつかの並列のトレース、１つのトレース又は１つの導波路のみからなってよい。
【００７３】
ＰＥ‐ＤＭＲ間接続は、メモリアドレスのためのトレースをデータのためのトレースから分離できる。データのためのトレースは、双方向データ伝送をサポートするためにトランシーバに接続してよく、又は書き込みデータをメモリへと移動させるためのトレースのセットと、読み出しデータをメモリから移動させるための別のトレースのセットとに分割してよい。ＤＭＲ‐ＤＭＲ間接続は必ずしもアドレスラインを有さなくてよいが、メッセージヘッダ又はメッセージ終了のための制御語といった、伝送されるデータ内の特定の語を示すためのラインを有してよい。
【００７４】
全てのＤＭＲ接続は、フローコントロールのための追加のラインを有してよい。例えばあるラインは上流へ（目的地からソースへ）信号を伝送してよく、これにより、経路に何らかの他の通信パスが存在するため又は目的地がそれ以上のデータを受け取れないために、データ語の更なる前進がブロックされる。別のラインは下流へ（ソースから目的地へ）信号を伝送してよく、これにより有効なデータが準備される。上流及び下流への両方の信号伝送を用いて、ローカル（隣接する）ＤＭＲ又はグローバル（隣接しない）ＤＭＲであるＤＭＲ間のリンクの端部に接続されたトランスミッタ及びレシーバの状態を示すことができる。いくつかのＭＰＳの実施形態では、ノード間の通信はプログラム制御下であってよい。
【００７５】
図７〜１２は、ＭＰＳ上で実行されるアルゴリズムの例示的な一部分を示す。このアルゴリズムは、例示を目的として、故意に単純かつまばらなものとなっている。アルゴリズムはサンプルデータをＭＰＳ上にもたらし、このデータを処理して、結果をＭＰＳから送信する。その後アルゴリズムは最初からやり直され、サンプルデータの次のセットをメッシュ上にもたらす。
【００７６】
図８では、タスク６２はＭＰＳの外部のソースからデータを読み出し、このデータを変数「ｔ」、「ｕ」に記憶する。同時にタスク６２は変数「ｔ」、「ｕ」を組み合わせ、その結果を変数「ｗ」に書き込む。同時にタスク７１はオフメッシュからデータをもたらし、これを変数「ｘ」に記憶する。
【００７７】
ある程度後の時点において（図９）、タスク６２は変数「ｔ」、「ｕ」の読み取りを終了し、変数「ｗ」をタスク１２に伝送し始め、このタスク１２において変数「ｗ」は更に処理されることになる。タスク１２は、次の計算タスクを開始するために、変数「ｗ」、変数「ｘ」が両方共利用可能となるまで待機しなければならない。データの準備ができたら、タスク１２は入力「ｘ」、「ｙ」（図１０）から変数「ｓｖ」を計算する。この「ｓｖ」は共有変数である。
【００７８】
図１１では、タスク５によって共有変数「ｓｖ」を作用させて、変数「ｚ」を生成する。「ｓｖ」は共有されているため、タスク１２（図１０）とタスク５との間には明示的な通信は存在しないが、これらタスクの間は同期されている。同時にタスク６２、７１は、（図８に示すように）オフメッシュから次のデータサンプルを読み取り始める。
【００７９】
図１２では、タスク６２、７１が次のデータサンプルの読み取りを続行している間に、タスク５は最後の結果（変数「ｚ」）をメッシュから送信する。
【００８０】
図１３〜２８  アプリケーションスワップ
ＭＰＳは、多数のソフトウェアアプリケーションを同時に実行する能力を有してよい。図１３は、複数のアプリケーションが実行されているＭＰＳ３００の例を示す。アプリケーションを実行するために、これら複数のアプリケーションからの命令及びデータを、ＭＰＳの異なる複数のメモリに分散させてよく、これは、これらメモリに関連するプロセッサによって実行するためである。例えば、これらのアプリケーションのうちの１つに関するプログラム命令及びデータを、ＭＰＳのメモリの第１のサブセットに記憶してよい。ＭＰＳのプロセッサの第１のサブセットは、メモリの上記第１のサブセットに連結でき、上記アプリケーションに関する上記命令及びデータを実行できる。同様に、これらのアプリケーションのうちの別のものに関するプログラム命令及びデータを、プロセッサの第２のサブセットによって実行するためにメモリの第２のサブセットに記憶してよく、以下同様である。
【００８１】
いくつかの実施形態では、ＭＰＳの所定のメモリは、ＭＰＳの特定のプロセッサと関連してよく、又はＭＰＳの特定のプロセッサのために予約されてよい。他の実施形態では、所定のメモリは、ＭＰＳの２つ以上のプロセッサによって共有されてよい。いくつかの実施形態では、所定のプロセッサが使用するメモリ又は複数のメモリのセットは、物理的にプロセッサの近傍に配置されてよく、例えばこれにより、プロセッサは相互接続ネットワークを使用することなく、又は他のルーティング要素と通信することなく、メモリに直接アクセスできる。
【００８２】
図１３では、楕円の相対的なサイズは、アプリケーションに割り当てられたシステムリソースの相対的な量（例えばプロセッサ及びメモリの個数）を示すことを意図したものである。例えばアプリケーション５Ｃは大きな楕円で表され、これはこのアプリケーションが、小さい楕円で表されているアプリケーション５Ａよりも、システムのプロセッサの多くを使用することを示す。また、ＭＰＳ３００内における楕円の相対的配置は、ＭＰＳ上のアプリケーションの物理的配置、例えば各アプリケーションが使用するプロセッサ及びメモリが配置されるＭＰＳの物理的領域それぞれを示すことを意図したものである。（この例では、ＭＰＳは２次元レイアウトを有するものとして図示されているが、他の実施形態では、ＭＰＳのプロセッサ及びメモリは異なる次数の次元、例えば１Ｄ、３Ｄ、４Ｄ等に従って配設されていてよい。）
【００８３】
用語「アプリケーションスワップ（ａｐｐｌｉｃａｔｉｏｎ  ｓｗａｐｐｉｎｇ）」は、１つ又は複数のアプリケーションを除去して、これらを１つ又は複数の他のアプリケーションで置換するプロセスを表す。スワップは、上記他のアプリケーションが実行され続けている間に動的に行われてよい。例えば図１４は、アプリケーション５Ｅがスワップアウトされ、アプリケーション５Ｋがスワップインされて所定の位置を取った後の、ＭＰＳ３００を示す。他のアプリケーション５Ａ、５Ｂ、５Ｃ、５Ｄ、５Ｆ、５Ｇ、５Ｈ、５Ｊは、アプリケーション５Ｅとアプリケーション５Ｋとの間のスワップが行われている間、ＭＰＳ上で実行され続けることができる。アプリケーション５Ｋは、ＭＰＳ内において、アプリケーション５Ｅが以前実行されていたのと概ね同一の領域に配置されているが、アプリケーション５Ｋは必ずしも、アプリケーション５Ｅと全く同一のプロセッサ及びメモリリソースを使用しない場合がある。
【００８４】
システムは、一度に２つ以上のアプリケーションをスワップイン及び／又はスワップアウトしてもよい。図１５は、図１３からの３つのアプリケーション５Ｅ、５Ｇ、５Ｈが、２つのアプリケーション５Ｌ、５Ｊで置換された例を示す。従って、スワップされるアプリケーションの個数、形状（物理的配置に関して）及びサイズ（使用されるプロセッサ及びメモリに関して）は、同一である必要はない。
【００８５】
様々な実施形態において実行中のＭＰＳから１つ又は複数のアプリケーションを除去し、これを１つ又は複数の他のアプリケーションで置換することが望ましい場合がある理由は、多数存在する。例えばアプリケーションを暫くの間実行して、その後長期間に亘って何もする必要がない場合がある。この時間の間、このアプリケーションのリソースは何らかの他のアプリケーションが使用でき、これによってシステム全体の性能が改善される。別の理由は、あるアプリケーションを除去して別のアプリケーショで置換することによって、ＭＰＳの機能性を変更することが望ましい場合があることである。例えば２つのアプリケーションが、概ね同一の機能を若干異なる方法で実施してよい。
【００８６】
以下に更に詳細に説明するように、アプリケーションスワップは、あるアプリケーションを動的にロードして実行するための動作、実行中のアプリケーションを停止する動作、及び停止したアプリケーションのリソースをクリアする動作を含んでよい。これらの動作は、アプリケーションスワップの実施中にＭＰＳの上で実行中の他のアプリケーションが妨害されず、上記他のアプリケーションがその通常の動作を保ったまま実行され続けることができるような方法で、実施されるよう設計してよい。
【００８７】
いくつかの実施形態では、アプリケーションスワップを、本出願では親タスク又は管理タスクと呼ばれる特別なタスク又はアプリケーションによって管理してよい。親タスクはＭＰＳの内側又は外側からトリガされて、アプリケーションスワップを開始できる。図１６は、親タスク５５がトリガされて、ＭＰＳの内部で実行されるアプリケーション６Ｆによるアプリケーションスワップが開始される実施形態を示す。例えばアプリケーション６Ｆは、アプリケーション６Ｆ内で発生する様々な内部状態変化に応答してアプリケーションスワップをトリガするプログラム論理を含んでよい。図１７は、親タスク５５がトリガされて、ＭＰＳの外側に配置された汎用プロセッサ（ＧＰＰ）２６０上で実行されるシステムコントローラプログラム２６２によってアプリケーションスワップが開始される実施形態を示す。例えばシステムコントローラ２６２は、ユーザ入力又はＭＰＳの外側から来る様々な他の種類のトリガ若しくは条件のいずれに応答して、アプリケーションスワップをトリガしてよい。いくつかの実施形態では、親タスクはＭＰＳの外側で実行されてよい。例えば図１８は、親タスク５５がシステムコントローラ２６２と共に外部ＧＰＰ２６０上で実行される実施形態を示す。
【００８８】
システムコントローラ２６２は、高次アプリケーション・プログラミングインタフェース（ＡＰＩ）を用いて書くことができる。ＡＰＩは、システムコントローラを、下層の制御及び通信レイヤの詳細を隠すことによってあるＧＰＰから別のＧＰＰへと容易に移すことができるようにすることができる。
【００８９】
親タスク５５は、システムコントローラ２６２から（又はＭＰＳ内の別のアプリケーションから）、「アプリケーションＸをスワップアウト」又は「アプリケーションＹをスワップイン」等の高次コマンドを受信してよく、これに応答して、要求されたアプリケーションスワップを開始及び管理してよい。
【００９０】
親タスクのデフォルトの挙動は、システムコントローラ２６２が指示したようにアプリケーションを開始及び停止することであってよい。いくつかの状況では、親タスク５５は、スワップ可能なアプリケーションと通信して、その実行状態を管理してよい。例えば親タスク５５は、あるスワップ可能なアプリケーションに、上記アプリケーションをスワップアウトできるように、安定状態となるよう要求してよく、又は親タスク５５は上記スワップ可能なアプリケーションによって、このアプリケーションが安定状態であり、スワップアウトされる準備ができていることを通知されてよい。この通信は、スワップ可能なアプリケーションが親タスク５５と通信するために、又はその逆のために、呼び出すことができるＡＰＩによって実装できる。
【００９１】
上述のように様々な実施形態において、ＭＰＳは異なるフォームファクタを有し得る。いくつかの実施形態では、ＭＰＳはチップ上の集積回路として実装され得る。いくつかの実施形態では、多数のＭＰＳチップをシステム内で使用してよい。１つ又は複数のチップを、オフチッププロセッサ（例えば汎用プロセッサ）、又は１つ若しくは複数のオフチップメモリデバイス（例えばＲＡＭ、フラッシュメモリ、ディスクドライブ若しくは他のタイプのメモリ若しくはストレージデバイス）、又はＭＰＳ自体の一部ではない他のハードウェアデバイスといった、上記１つ又は複数のチップの外部の他のハードウェアデバイスと連結してよい。いくつかの実施形態では、アプリケーションをスワップイン又はスワップアウトする際に上記オフチップメモリを使用して、スワップアウトされるアプリケーションに関するプログラムデータをＭＰＳの外部のメモリデバイスに保存してよく、又はスワップインされるアプリケーションに関するプログラム命令及び／若しくはデータを外部メモリデバイスから引き出してよい。スワップアウトされたアプリケーションに関する情報が記憶された外部メモリデバイスは、スワップインされたアプリケーションに関する情報が引き出されるものと同一の外部メモリデバイスであってよく、又は異なる外部メモリデバイスであってよい。アプリケーションに関する命令及びデータを外部メモリとの間でスワップする能力は、ＭＰＳ上で実行する必要がないアプリケーション全てを完全に記憶するための十分な内部メモリリソースを有しないＭＰＳにとって有用であり得る。
【００９２】
図１９は、一実施形態による、外部メモリデバイス２７２からのアプリケーション８のスワップインに関わるリソースを示す。この例では、アプリケーションコード２７０は初め、ＭＰＳ３００に連結されている（かつＭＰＳ３００の外部にある）ランダムアクセスメモリ（ＲＡＭ）デバイス２７２に記憶されていてよい。ＲＡＭデバイス２７２は、ダイナミックＲＡＭ（ＤＲＡＭ）、同期ダイナミックＲＡＭ（ＳＤＲＡＭ）、ラムバスＤＲＡＭ（ＲＤＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）等のいずれの種類のＲＡＭを含んでよい。アプリケーションコード２７０は、入力／出力（ＩＯ）ポート２７４を介してＲＡＭデバイス２７２からＭＰＳにロードしてよい。ＩＯポート２７４は専用のローダＰＥ２７６によって制御してよい。アプリケーションコードはＩＯポート２７４から１つ又は複数のスワップルート２７７を介して、アプリケーション８に関連するＭＰＳの内部メモリのうちの１つ又は複数に伝送されてよい。
【００９３】
他の実施形態では、アプリケーションコード２７０はＲＡＭデバイスの他のいずれの種類の外部メモリデバイスからスワップインしてよい。スワップに利用できる外部メモリデバイスの例は、フラッシュメモリ、磁気又は光メモリ、ディスクドライブ、ソリッドステートドライブ等を含む。しかしながら上述のように、いくつかの実施形態では、このシステムの１つの目的はスワップを可能な限り迅速に実施することであってよい。従って、スワップに使用される外部メモリデバイスのタイプは、迅速なタイプのメモリデバイスとなるように選択され得る。例えばＤＲＡＭデバイスは一般に、フラッシュメモリデバイス又はディスクドライブよりも迅速にスワップを実施できるようにすることができ、従っていくつかの実施形態では好ましいものとなり得る。
【００９４】
図２０は、これもまた迅速なスワップを可能とする代替実施形態を示す。この例では、ＧＰＰ２６０は、命令及びデータストリームをＭＰＳに送信することによって、アプリケーションコード２７０をＭＰＳにロードしてよい。システムコントローラプログラム２６２は上記命令及びデータストリームを制御してよい。
【００９５】
いくつかの実施形態では、組込み型オペレーティングシステム環境において、システムコントローラプログラム２６２はＧＰＰ２６０上で実行されてよい。いくつかの実施形態では、オープンコンピューティング言語（ＯｐｅｎＣＬ）のサブセットを用いてシステムコントローラ２６２を実装してよい。システムコントローラ２６２はチップ間通信機構を通してＭＰＳと通信してよいが、この通信機構とは独立して実装されてよい。
【００９６】
システムコントローラ２６２は、親タスク５５にコマンドを、例えばＭＰＳチップのシリアルバスを通して（例えばデバッグアクセスポート（ＤＡＰ）を介して）直接、又は信号ポートを通して、送信してよい。システムコントローラ２６２と親タスク５５との間を通過する制御データの量は典型的には小さいものとなるため、ＭＰＳのシリアルバスを通した通信の実施は、スワップのパフォーマンスに有意な影響を与えてはならない。システムコントローラ２６２は、ＤＡＰポートを用いてデータ値を読み出すことによって、ＭＰＳからデータを取り戻すことができる。システムはＭＰＳからＧＰＰへの通信経路を必要としないが、それが利用可能であれば採用してよい。ＧＰＰとＭＰＳとの間の通信プロトコルは、ＧＰＰの能力に応じて多数の異なる方法で実装できる。例えば上記通信プロトコルは、ユニバーサルシリアルバス（ＵＳＢ）若しくは周辺構成部品相互接続エクスプレス（ＰＣＩｅ）等の高次プロトコルとすることができ、又は上記プロトコルは、ＧＰＰバスと信号ポートとの間のより単純な接続としてよい。ＵＳＢ又はＰＣＩｅのような比較的複雑なプロトコルでは、ＧＰＰとＭＰＳとの間にＦＰＧＡデバイスを使用して、プロトコルの受信側を実装してよい。いくつかの実施形態では、より単純なＧＰＰバス接続のためにも、小型ＦＰＧＡデバイスを使用してよい。
【００９７】
いくつかの実施形態では、通信効率のために、親タスク５５は、ＭＰＳ上の全ての他のＰＥ及びメモリに接続されたＭＰＳのシリアルバスへの直接的なアクセスを有する位置にあるＰＥ上にあってよい。通信のためにシリアルバスを使用することは、相互接続ネットワークで発生する、ＭＰＳで進行中のデータ通信に対する干渉を回避するために望ましいものであり得る。しかしながら、親タスクとスワップ可能なシステムの残りの部分との間の通信の、他のいずれの手段を使用できる。いくつかの実施形態では、特定のＰＥを親タスク５５のために予約してよく、これによりこのＰＥはアプリケーションのために使用できなくなる。またいくつかの実施形態では、このＰＥに隣接するメモリを、親タスク５５がそのストレージ要件のために使用するために予約してよい。
【００９８】
スワップ可能なアプリケーションを定義する命令及びデータは、ＭＰＳからアクセス可能ないずれの位置に記憶できる。ＭＰＳが十分な内部メモリリソースを含む場合、全てのアプリケーションはＭＰＳの内部のローカルメモリデバイスに記憶できる。上述のように、他の実施形態では、ＭＰＳに連結された１つ又は複数のＤＲＡＭ等の１つ又は複数の外部メモリデバイス上に記憶すること、ＧＰＰファイルシステム内に記憶してシステムに直接ストリーミングすること、ＭＰＳに連結された１つ又は複数のフラッシュメモリデバイス内等に記憶すること等が可能である。
【００９９】
アプリケーションメモリの重要なパラメータは、ストレージキャパシティ、及びＭＰＳ上への命令の移動に利用できる帯域幅である。例えば１つの小さいアプリケーションをスワップしている場合、ＭＰＳ内部のローカルメモリを使用できる場合が多い。多くのシステムに関して内部メモリのサイズは限られている場合があり、スワップ速度は重要であるため、アプリケーション命令をＧＰＰから直接ストリーミングすること、又は取り付けられたＤＲＡＭを使用することが必要となり得る。命令をＧＰＰから直接ストリーミングすることは、システムに取り付けられたＤＲＡＭが存在しないハードウェアシステムにおいて、又はＤＲＡＭが既にシステム上で実行されているアプリケーションのための大きなデータトラフィックをサポートしているシステムにおいて、有利となり得る。
【０１００】
アプリケーション命令が、ＭＰＳに連結された外部ＤＲＡＭからロードされるか、又はＧＰＰからストリーミングされる場合、Ｉ／Ｏポート２７４及びローダタスクを実行する隣接するローダＰＥ２７６はアプリケーションスワップのために予約されてよく、図１９、２０に示すようにアプリケーションはこれらを使用できない。いくつかの実施形態では、ローダタスクはＩＯポートを通して流れるアプリケーション命令及びデータを管理してよい。例えば、アプリケーションをスワップするための命令及びデータは、ＭＰＳ上のＩＯポートに接続されたＤＲＡＭデバイスに記憶してよく、隣接するローダタスクを用いて、ＤＲＡＭ内の適切なアドレスからアプリケーション命令を引き出すことができ、この命令を、ルーティングファブリックを通して、このアプリケーションのＰＥに関連するＭＰＳ内部メモリに送信できる。
【０１０１】
Ｉ／Ｏポートの制御のためにローダタスクを使用する場合、親タスクは、実行中のアプリケーションを妨害しない機構を通して、例えばＭＰＳのシリアルバスを通して、ローダタスクと通信してよい。実行中のアプリケーションはその通信要件のために異なるルーティングファブリック（例えば相互接続ネットワーク）を使用してよいため、シリアルバスの使用は上記実行中のアプリケーションに干渉しないものとすることができる。
【０１０２】
アプリケーションをスワップインする場合、アプリケーションの各タスクに関する命令及びデータは、ＭＰＳ上の適切なメモリに移動される。様々な実施形態では、この移送のために、例えばＭＰＳ上で利用可能な特定の通信リソースに応じて、異なる機構を使用してよい。いくつかの実施形態では、命令及びデータを、その元々のストレージ位置から、ＭＰＳによって実装される高速ルーティングファブリック（本出願では相互接続ネットワークとも呼ばれる）を通して、適切なオンチップメモリへと移動してよい。他の実施形態では、命令及びデータを、シリアルバスを通して適切なオンチップメモリへと移動させてよい。高速ルーティングファブリックの使用は、シリアルバスの使用より大幅に高速であり得る。
【０１０３】
ルーティングファブリックを使用する場合、スワップシステムは、スワップに使用される一時的な「スワップルート（ｓｗａｐｐｉｎｇ  ｒｏｕｔｅ）」の群（命令及び／又はデータがロードされるメモリそれぞれに対して１つ）を画定してよい。命令及びデータの移動のために通信ルーティングファブリックを使用するには、上記スワップルートが、ＭＰＳ上で実行される他のアプリケーションが使用している通信ルートと相互作用又は衝突しないことを保証する必要があり得る。従って、命令をロードするために使用されるスワップルートは、これら他の通信ルートと交差しないよう、注意深く計画され得る。
【０１０４】
この計画を補助するために、各スワップルートを２つの部分に分割してよい。トランクルートと呼ばれる第１の部分は、当該アプリケーションのための全てのスワップルート間で共有されている。トランクルートは、命令及びデータストレージ位置から、当該アプリケーションが位置することになる場所の概ね近傍のＭＰＳ上の位置までを接続している。終端ルートと呼ばれるスワップルートの第２の部分は、トランクルートの終点を、当該アプリケーションが使用する標的メモリデバイスに接続してよい。従って、各スワップルートは、当該アプリケーションのための他のスワップルート全てと同一の１つのトランク部分と、トランクルートの終点から１つの特定のメモリデバイスへと繋がる一意の終端ルートとを有してよい。いくつかの実施形態では、ユーザはアプリケーションが使用するメモリを複数のセットに分割してもよく、各トランクルートを各セットに対して画定してよい。これは例えば、アプリケーションが極めて大きく、多数の異なるメモリデバイスを使用する場合に有用となり得る。
【０１０５】
いくつかの実施形態では、トランクルートはユーザ入力によって指定でき、続いてシステムソフトウェアツールは自動的に、各スワップルートの第２の部分を画定してよい。トランクルートを使用する１つの利点は、ユーザが、他の実行中のアプリケーションが使用しているルートを回避するように、ルートを注意深く画定できる点である。
【０１０６】
いくつかのシステムは、ルーティングのために２つ以上のルーティングレイヤを有してよく、これによりトランクルートは、他のアクティブなルートを回避する必要に応じてレイヤを変更できる。いくつかの実施形態では、システムソフトウェアツールは、スワップルートの終端部分を生成する際には、ＭＰＳのスワップ領域にあるいずれの第２のレイヤのルートと干渉しないよう、常に第１のレイヤを使用してよい。
【０１０７】
上述のように、シリアルバスを通した命令の移動は、ルーティングファブリックを通したものより大幅に遅くなり得る。しかしながら、速度が重要でなく、かつルーティングファブリックリソースの使用を低減することが重要であるような状況では、シリアルバスを使用して命令を移動させることが望ましい場合がある。定義によると、親タスクは、親タスクへのアクセス全体に亘るいずれの対立が存在できないように、シリアルバスを所有してよい。いくつかの実施形態では、命令が外部フラッシュメモリデバイスに記憶されている場合、又は命令がＧＰＰから親タスクに隣接するポートにストリーミングされる場合に、シリアルバスを使用してよい。
【０１０８】
いくつかの実施形態では、ＭＰＳは多数のチップを含んでよく、例えば各チップは、複数のプロセッサ、及びプロセッサ間に散在する複数のメモリを含む。いくつかの実施形態では、多チップシステムを用いてアプリケーションスワップが実施されているとき、上述の専用のアプリケーションスワップルートを各チップ上で複製してよい。アプリケーション命令ストレージは多数のＤＲＡＭに分割してよく、又は命令の多数のストリームを必要に応じて採用してよい。更にシステムコントローラを、この多チップシステムを理解するよう、例えばコマンドを適切なチップに送信するために、構成要素が存在する位置に関する知識を有するよう、設計してよい。
【０１０９】
いくつかの実施形態では、スワップ可能なアプリケーションはシステム内の多数のチップに亘って分散されていてよいが、スワップ可能なアプリケーションそれぞれが１つのチップのみにおいて実行されるよう要求することにより、スワッププロセスを簡略化できる。
【０１１０】
いくつかの実施形態では、システムが利用可能な独立した複数のデータストリームの多数のソースが存在する場合、多数のアプリケーションを同時にスワップできる。例えば図２１は、２つのアプリケーション９Ａ、９Ｂが２つの異なるＲＡＭデバイス２７２Ａ、２７２Ｂから同時にスワップインされる実施形態を示す。２つの異なるローダタスクをロードＰＥ２７６Ａ、２７６Ｂ上で実行することにより、ＩＯポート２７４Ａ、２７４Ｂを介して２つのアプリケーションを同時にロードしてよい。多数のアプリケーションを同時にスワップインすることにより、アプリケーションを１度に１つずつスワップインする場合よりも迅速にＭＰＳを再構成できるようにすることができる。同時にスワップイン又はスワップアウトできるアプリケーションの個数は、ＭＰＳが連結されている外部メモリデバイス又は命令ストリームのソースの数に左右され得る。例えば、チップのためのパッケージが４個のＤＲＡＭに対する接続を有する場合、同時に最大４つのアプリケーションをスワップできる。
【０１１１】
いくつかの実施形態では、親タスク５５は１度に１つのスレッドのみを実行してよい。スワップ手順は、同時に実行される多数のスワップ手順を親タスク５５が管理できるように構成してよい。例えばスワップにおいて最も時間がかかる部分は、ＤＲＡＭ又はＩ／ＯポートからアプリケーションＰＥの命令メモリへの命令の移動となる場合が多い。親タスク５５は、命令の移動を開始するために、Ｉ／Ｏポートの隣のローダタスクに同時に命令してよい。他の比較的時間がかからないスワップステップは、親タスクによって連続的に実施できる。
【０１１２】
アプリケーションをより迅速にロードするために、命令の多数のストリームを使用して単一のアプリケーションをスワップインすることもできる。例えば、スワップインされているあるアプリケーションに関する命令を、２つの異なる外部ＤＲＡＭデバイスに記憶でき、命令の２つの異なるストリームがアプリケーションＰＥを並列に初期化でき、これによってアプリケーションをロードするための時間を半減できる。
【０１１３】
スワップ可能なアプリケーションのライフサイクル
ＭＰＳの動作中、ある所定のアプリケーションは、まずスワップインされ、次に実行され、次に実行を停止され、続いて再びスワップアウトされるための多数のステップを通して遷移してよい。スワップ可能なアプリケーションはこのプロセスを何度も経る場合がある。図２２は、アプリケーションをスワップイン及び再びスワップアウトするライフサイクルを示す。親タスクは、ステップのシーケンスを制御する役割を有してよい。所定の条件において、いくつかのステップは僅かに異なる順序で実施される場合があるか、又は一切実施されない場合がある。
【０１１４】
場合によっては、システムのリセット時に実施されるシステムレベル機能を実行するための、ワンタイム初期化ステップが存在してよい。例えば、多数の異なるスワップ可能なアプリケーションが使用するＩ／Ｏポートを初期化してよく、又は外部ＤＲＡＭにアプリケーションデータの初期化を書き込んでよい。リセットされたシステムから開始すると、３１１に示すように、親タスクは「アプリケーションのスワップイン」イベントを受信してよい。このイベントはＭＰＳから内部的に、例えば別のアプリケーションから受信してよく、又は外部信号として、例えばＭＰＳの外部においてＧＰＰ上で実行されるシステムコントローラから受信してよい。
【０１１５】
続いて３１３に示すように、親タスク５５は、スワップインされているアプリケーションに関する変数の初期化を発生させてよく、及び／又は（以前に保存されている場合は）アプリケーションの以前の状態を復元してよい。（存在する場合）変数の初期化は、アプリケーションのためのプログラムコードから、例えばいくつかの実施形態ではＣプログラムコードから引き出すことができる。（例えばアプリケーションの以前の実行から）アプリケーションの変数に関する変数状態のいずれが以前に記憶されている場合、上記変数状態をロードしてよい。これは、アプリケーションをその保存された状態に復元できる。保存された変数状態は、アプリケーションのプログラムコードから引き出された初期化をオーバライドできる。アプリケーションの変数の初期化及び状態の復元は、当該アプリケーションが使用するメモリのうちの１つ又は複数内の変数値を特定する情報を記憶することによって実施できる。
【０１１６】
３１５に示すように、親タスク５５は、例えば１つ若しくは複数の外部ＤＲＡＭデバイス又は他の外部ソースからアプリケーションのプログラム命令をロードすることによって、アプリケーションのプログラム命令を、（当該アプリケーションが既にロードされていない場合）当該アプリケーションに関連する対応するＭＰＳ内部メモリにロードさせることもできる。命令をロードした後、この命令を実行するために割り当てられたアプリケーションＰＥを待機状態としてよい。
【０１１７】
３１７に示すように、親タスク５５は、当該アプリケーションの、ＭＰＳにロードされた他のアプリケーションのうちの１つ又は複数への通信を統御することもでき、例えば当該アプリケーションが、当該アプリケーションの目的とする機能を実施するために通信する必要がある他の各アプリケーションとの通信を開始できるようにすることができる。親タスク５５はまた、Ｉ／Ｏポート、ＤＲＡＭポートといった、当該アプリケーションが使用するデバイス若しくはリソースを初期化する、並びに／又はこれらのデバイス及びリソースに当該アプリケーションを接続するために必要ないずれの動作を実施することもできる。親タスク５５はまた、ＤＲＡＭデバイス、ＤＲＡＭコンテンツ、及び（必要な場合は）当該アプリケーションが使用するＩ／Ｏポートに接続されたデバイスを初期化することもできる。
【０１１８】
続いて３１９に示すように、親タスク５５は当該アプリケーションを開始させてよい。例えば親タスク５５は、当該アプリケーションの各ＰＥにウェイクアップ信号を送信して、これらＰＥに、これらが関連するメモリデバイスからのプログラム命令それぞれを実行させてよい。当該アプリケーションが開始されると、当該アプリケーションは、親タスク５５が「アプリケーションのスワップアウト」イベントを受信する（ブロック３２３）まで実行され続けてよい（ブロック３２１）。いくつかの実施形態では、このアプリケーション自体が親タスク５５に、このアプリケーションの実行が終了し、従ってこのアプリケーションをスワップアウトできることを示す信号を送信してよい。他の実施形態では、親タスク５５は、ＭＰＳ上で実行されている別のアプリケーションから、又はシステムコントローラ２６２若しくは他の外部ソースから、スワップアウトイベントを受信してよい。
【０１１９】
これに応答して、親タスク５５は３２５に示すように、当該アプリケーションの実行を停止してよい。例えば親タスク５５は、当該アプリケーションの各ＰＥに停止信号を送信することによって、これらＰＥに実行を停止させてよい。いくつかの実施形態では、この信号はＰＥに、既知の状態へのリセットを行わせてもよい。
【０１２０】
３２７に示すように、親タスク５５は、当該アプリケーションがロードされた時に以前接続されていた他のアプリケーション及びデバイスから、このアプリケーションを切断させてよい。これは、当該アプリケーションと、このアプリケーションが連結されていた他のいずれのアプリケーションとの間の通信経路を終了させるステップを含んでよい。親タスク５５はまた、当該アプリケーションが使用している周辺デバイス又は他のリソースのシャットダウン又はリセットに必要ないずれの動作を実施することもできる。
【０１２１】
３２９に示すように、親タスク５５は、アプリケーションの状態を保存するステップを管理することもできる。例えば、アプリケーションの変数全ての値、又はアプリケーションの変数のうち、その状態を保存する必要がある選択されたサブセットの値を、ＭＰＳ内部メモリのうちの１つ又は複数から、１つ若しくは複数の外部ＲＡＭデバイス、又は再び必要となるまでの外部ストレージのための外部メモリデバイスに伝送してよい。アプリケーションの変数に対応するレジスタのコンテンツも保存してよい。
【０１２２】
３３１に示すように、親タスク５５は、ＭＰＳの内部リソースをクリーンアップするための１つ又は複数の動作を実施することもできる。例えばこれは、当該アプリケーションが使用した全ての内部メモリをリセットするステップを含んでよい。このプロセスの結果、このアプリケーションが使用したＰＥ、メモリ、ルーティングセグメントは、他の何らかの目的に使用する準備ができた状態となる。
【０１２３】
例えば特定の用途に応じて、これらのステップの全てを実施する必要がない場合もあることに留意されたい。例えば図２３は、Ｉ／Ｏポートに接続することのみを必要とし、他のアプリケーションとの通信、又はある実行と次の実行との間のその状態の保存を必要としないアプリケーションに関する、簡略化されたライフサイクルを示す。
【０１２４】
スワップを実装するために生成される、実行可能な構成要素
図２４に示すように、本出願に記載のアプリケーションスワップ技術を実装するために必要なソフトウェアコードを生成するために、ＭＰＳにソフトウェアツール４０１のセットを提供してよい。ツール４０１は、アプリケーションのソースコードを実行可能なプログラム命令にコンパイルするよう構成されたコンパイラ４０３、及び１つ又は複数の手順生成モジュール４０５を含んでよい。手順生成モジュール４０５は、スワッププロセスを実装するために実行時間中に実行されることになる、実行可能なソフトウェア手順を自動的に生成するよう構成されてよい。例えばこれら手順を実行することにより、アプリケーションの保存された状態をロードする、アプリケーションが使用するデバイスを初期化する等の、アプリケーションスワップに関わる動作を実施できる。これらの手順は、必要に応じてのみ生成されてよい。例えば特定のアプリケーションはその状態を保存又は復元しなくてよく、従ってこれらの動作に対応する手順はこの場合には生成しなくてよい。生成された手順のうちのいくつかはアプリケーションタスクによって、いくつかは（それが存在する場合は）ローダタスクによって、そしていくつかは親タスクによって、実行できる。各手順を実行するタスクは、アクセスされるリソースの近さ、及びＭＰＳの構成に基づいて決定してよい。いくつかの実施形態では、これらの手順の全体的な順序付けは、親タスクによって管理される。
【０１２５】
いくつかの実施形態によると、以下の動作を実施するための手順は、実行時間前に手順生成モジュール４０５によって自動的に生成してよく、実行時間中にローダタスクによって実行されてよい：アプリケーションの下層のプログラムコードから引き出された変数値の初期化；アプリケーションの実行可能なプログラム命令のロード；及びアプリケーションの保存された状態のロード。
【０１２６】
いくつかの実施形態によると、以下の動作を実施するための手順は、実行時間前に手順生成モジュール４０５によって自動的に生成してよく、実行時間中にアプリケーションタスクによって実行されてよい：Ｉ／Ｏ及びＤＲＡＭポートの初期化；ＤＲＡＭコントローラ及び周辺Ｉ／Ｏデバイス（これらＤＲＡＭ及びＩ／Ｏはアプリケーションによって使用され、スワップのためには使用されない）の初期化；並びに周辺Ｉ／Ｏデバイスのシャットダウン。
【０１２７】
いくつかの実施形態によると、以下の動作を実施するための手順は、実行時間前に手順生成モジュール４０５によって自動的に生成してよく、実行時間中に親タスクによって実行されてよい：アプリケーションの、近隣のアプリケーションとの連結；アプリケーションの開始（ＰＥの待機状態の終了）；アプリケーションの停止；アプリケーションの、近隣のアプリケーションからの連結解除；ＤＲＡＭへのアプリケーションの状態の保存；並びにＭＰＳ内部メモリ及びルーティングファブリックのクリーンアップ。
【０１２８】
スワップ可能なアプリケーションのレイアウト及び開発
いくつかの実施形態では、ＭＰＳ上で実行されるアプリケーションは、２つのセットに分類できる。アプリケーションの一方のセットは、ベースシステムと呼ばれる。ベースシステムは、１つ又は複数のスワップ不可能なアプリケーション、例えばＭＰＳの実行中にロードされて実行されている状態であるアプリケーションを含む。もう一方のセットは、動的にスワップイン及びスワップアウトできるスワップ可能なアプリケーションのセットである。ＭＰＳが実行中のいずれの時点において、ＭＰＳ上にあるスワップ可能なアプリケーション及びスワップ不可能なアプリケーションの組み合わせは、互いに干渉することなく動作できる。相互に干渉しないアプリケーションのこのような組を、リーガル構成と呼ぶ。ＭＰＳ上の所定のレイアウト及び配置を有するスワップ可能なアプリケーションを、アプリケーションインスタンスと呼ぶ。同一のスワップ可能なアプリケーションの異なるレイアウト又は配置は、異なるアプリケーションインスタンスである。というのは同一のスワップコードをこれら両方に対して使用できないためである。例えば、アプリケーションのあるインスタンスは、ＭＰＳのある領域に展開され、ＭＰＳのメモリ及びＰＥのあるサブセットを使用してよく、アプリケーションの別のインスタンスは、ＭＰＳの別の領域に展開され、ＭＰＳのメモリ及びＰＥの別のサブセットを使用してよい。例えばアプリケーションの命令を正しいメモリにロードすること、上記命令の実行を開始するために正しいＰＥと通信すること等のために、スワップ可能なコードは各インスタンスに固有のものである必要があってよい。
【０１２９】
スワップ可能なＭＰＳシステムは、スワップイベントが発生する際にあるリーガル構成から別のリーガル構成に遷移するシステムと見做すことができる。スワップ手順は、あるリーガル構成から別のリーガル構成への遷移を引き起こす。このようなスワップ手順は、１つ又は複数のアプリケーションのスワップイン及び１つ又は複数の他のアプリケーションのスワップアウト、ＭＰＳへの１つ又は複数のアプリケーションの追加又はスワップイン（例えば別のアプリケーションをスワップアウトしない）、並びにＭＰＳからの１つ又は複数のアプリケーションの除去又はスワップアウト（例えば別のアプリケーションをスワップインしない）を含むことができる。図２５は、左側のリーガル構成Ａに示すように、４つのアプリケーション４１０Ａ〜４１０ＤがＭＰＳの４つの領域それぞれに展開されている、ＭＰＳ３００の例を示す。ＭＰＳの実行中の何らかの時点で、５番目のアプリケーション４１０Ｅを動的に追加してよく、これにより、右側に示す新規のリーガル構成Ｂへの遷移が発生する。
【０１３０】
各スワップ手順は、ベースシステム、又はスワップ手順に関わらない他のスワップ可能なアプリケーションと干渉しないように実装するべきである。図２６は、相互に干渉していない（リーガル構成）複数のアプリケーションのセットを構成するためにシステムの開発段階中に使用してよい、開発ワークフローを示す。
【０１３１】
各アプリケーションを開発及び検証してよい（ブロック４１２）。アプリケーションを開発及び検証するステップは、アプリケーションコードを生成するステップ、アプリケーションをアプリケーションセルの形態にパッケージ化するステップ、アプリケーションセルのインスタンスを生成してこれに配置及びルーティングを与える、アプリケーションに関するテストベンチを構成するステップ、並びに上記テストベンチを用いてアプリケーションセルを検証するステップを含んでよい。
【０１３２】
各リーガル構成を含むアプリケーションのセットを画定してよい。リーガル構成のセット及びその遷移を計画してよい（ブロック４１４）。
【０１３３】
各アプリケーションインスタンスに関する物理的配置を画定してよい（ブロック４１６）。（いずれのリーガル構成における）アプリケーションの周縁部に隣接する全ての他のアプリケーションインスタンスを識別してよい。アプリケーションのための配置及びルーティングを画定することによって、これら境界アプリケーションを回避してよい。いくつかの実施形態では、隣接するアプリケーションは、ＭＰＳの内部メモリのいずれも共有しなくてよい。というのは、共有メモリ内でのメモリ対立が、これらアプリケーションに関してタイミングの問題を発生させ得るためである。また、あるアプリケーションが使用する内部メモリは、このアプリケーションがスワップされた場合にリセットされてよい。
【０１３４】
上述のように、ＭＰＳの内部メモリが限定されているため、多数のアプリケーションに関する命令を記憶できない場合、命令はスワップルートを介して、ＭＰＳの外側からＭＰＳ内へと移動されることになる。アプリケーションのスワップは、境界アプリケーションと干渉しないように画定するべきである。スワップルートを画定するステップは、命令ソースからアプリケーションインスタンスの概ね近傍へのトランクルートを、このトランクルートが境界アプリケーションと干渉しないように画定するステップを含んでよい。当該アプリケーションのためのスワップルートはそれぞれ、スワップルートの第１の部分としてトランクルートを使用してよい。スワップルートはその後、トランクルートの終端から、このアプリケーションが使用する各内部メモリへと分岐してよい。トランクルートは、当該アプリケーションインスタンスが存在する全てのリーガル構成において他の境界アプリケーションと干渉しないように画定してよい。図２７は、アプリケーション４４０Ｄをスワップインするために複数のスワップルートが使用されている例を示す。各スワップルートの最初の部分は、Ｉ／Ｏポート４３７から始まるトランク部分４３３（太線で示されている）である。スワップルートの終端部分４３５（破線で示されている）は、トランクルートの終点から分岐し、アプリケーション４４０Ｄが展開されるＭＰＳの領域に配置された独立した複数のメモリへと続く。様々な実施形態では、例えばアプリケーションが使用するＰＥ及びメモリの個数に応じて、いずれの数のスワップルートを使用して当該アプリケーションに関するプログラム命令をロードしてよい。
【０１３５】
図２６を再び参照すると、開発ワークフローは、各アプリケーションレイアウトが相互に適合性を有することを保証するために、リーガル構成に関して、その構成要素であるアプリケーションインスタンスのレイアウトを検査するステップも含んでよい。所定のリーガル構成を検査するために、その構成に関する全てのアプリケーションセルのインスタンスを生成する、トップレベルテストベンチを生成してよい。各アプリケーションセルに関する、及びアプリケーションセルとＩ／Ｏとの間の接続に関する、配置及びルーティングを提供できる。アプリケーションセルの複数のセットの組み合わせの配置及びルーティングを検査することによって、物理的リソース全体に亘って対立が存在しないことを保証できる。いくつかの実施形態では、構成全体の挙動を、この構成及びテストベンチをシミュレートすることによって検証してよい。
【０１３６】
スワップ可能なアプリケーション間の通信
上述のように、アプリケーションをスワップイン又はスワップアウトするステップは、ＭＰＳ上で実行されているアプリケーションと１つ若しくは複数の他のアプリケーションとの間（又はアプリケーションと１つ若しくは複数の物理的ポート若しくは周辺デバイスとの間）の通信を連結又は連結解除するステップを含んでよい。通信は、ＭＰＳのルーティングファブリックを通して発生してよい。あるアプリケーションをスワップアウトする場合、このアプリケーションの通信の終了を、ルーティングファブリックが使用不可能状態で残されないように注意深く統御する必要があり得る。例えばいくつかの実施形態では、スワップ可能なアプリケーションを、別のアプリケーションにデータのブロックを送信している間に粗雑に終了した場合、既存のルーティングは、システムをリセットするまで容易に再使用できなくなる場合がある。
【０１３７】
いくつかの実施形態では、ＭＰＳ上で実行されているアプリケーションは、バッファメモリデバイスを通して互いにデータを通過させることによって通信してよい。いくつかの実施形態では、各バッファメモリデバイスは、本出願では「アイソレータセル（ｉｓｏｌａｔｏｒ  ｃｅｌｌ）」と呼ばれる特別なタイプのアプリケーションセルに含まれてよい。いくつかの実施形態では、アイソレータセルは１つの入力及び１つの出力を有してよい。アイソレータセルは、着信データをバッファリングして、その後着信データを出力に対してコピーしてよい。アイソレータセルの使用は、アクティブなアプリケーション間の接続を、信頼できる矛盾しない方法で破壊及び復元できる方法を親タスクに提供できる。ＭＰＳは多数のアイソレータセルを含んでよい。図２８は、あるスワップ可能なアプリケーション４６０Ａが別のアプリケーション４６０Ｂと、アイソレータセル４６４Ａを介してアプリケーション４６０Ｂにデータを通過させることによって通信する例を示す。スワップ可能なアプリケーション４６０Ａは、別のアイソレータセル４６４Ｂを介してデータを通過させることによって、スワップ不可能なアプリケーション４６２とも通信する。
【０１３８】
アイソレータセルは、親タスクがシリアルバスを通してアイソレータセルにコマンドを送信することによって、アイソレータセルに２つの接続されたアプリケーション間の接続を破壊させて、これらアプリケーションのうちの一方をスワップアウトするための準備をすることができるように設計してよい。アプリケーションがスワップアウトされ、新規のアプリケーションがスワップインされた後、この新規のアプリケーションをアイソレータに接続して、システム内のデータの流れを復元できる。
【０１３９】
アイソレータセルがアプリケーション間の接続を破壊する際、異なるモードの動作が可能である。いくつかの実施形態によると、アイソレータセルの下流（受信）側のアプリケーションをスワップアウトしている場合、アイソレータセルのデフォルトの挙動は、接続が破壊されたら、送信側アプリケーションからのデータの受信を停止することである。いずれの着信データがルーティングファブリック内で逆行して、最終的に送信側アプリケーションのストールを引き起こし得る。代替的なモードでは、アイソレータセルは新規のデータパケットを受信し続けて、アイソレータセルのメモリバッファ内のデータパケットを上書きするだけでよい。
【０１４０】
いくつかの実施形態によると、アイソレータセルの上流（送信）側のアプリケーションをスワップアウトしている場合、アイソレータセルのデフォルトの挙動は、着信データがこれ以上存在しなくなると、受信側アプリケーションへのデータの転送を停止することである。代替的なモードでは、アイソレータセルは、アイソレータセルのメモリバッファ内の既存のデータを繰り返し連続的に送信することによって、データを受信側アプリケーションに送信し続けてよい。例えば、下流のアプリケーションが良好でない状態にならないよう、又はロックされないよう、データを流れるままにしておくことが望ましい場合もあり得る。
【０１４１】
いずれのアプリケーションがＭＰＳ上で実行されている間、アイソレータセルが常に存在していれば、スワップ方法を簡略化できる。各アイソレータセルが全てのリーガル構成において全く同じ位置に存在していれば、最も簡単であり得る。固定位置を使用することにより、アイソレータセルを使用するスワップ可能なアプリケーションが、接続される信頼できる物理的位置を有するようにすることができ、アイソレータセルと通信するための信頼できる位置を親タスクに提供できる。
【０１４２】
更に複雑な実装形態では、アイソレータセルは、全てのリーガル構成には存在しないようにすることができる。例えば、アイソレータセルの上流及び下流のアプリケーション両方がスワップアウトされる場合、及びスワップインされる１つ又は複数の新規のアプリケーションがこのアイソレータセルを使用しないか、又はこのアイソレータセルを異なる位置で使用する場合、このアイソレータを除去（又は移動）できる。
【０１４３】
いくつかの状況では、アプリケーション間のデータの流れを急に停止することが問題となる場合がある。例えば、伝達される情報は、特定の構造を有するデータ構造を含んでよい。アプリケーション間の通信が所定のデータ要素の伝送の途上で切断された場合、受信側アプリケーションはこのデータ要素の一部しか受信できず、この部分的なデータ要素の扱いが不明となる場合がある。この問題を克服するために、いくつかの実施形態では、アプリケーション間のアイソレータセルは、データ要素に関する内蔵型の知識を有してよく、通信がデータ要素の伝送の途上で切断されないことを保証できる。
【０１４４】
例えば、あるスワップ可能なアプリケーションが別のアプリケーションにビデオデータを伝送している状況を考える。ビデオデータの各フレームは、ヘッダで始まる構造を有してよい。ヘッダはフレームのサイズを特定できる。ヘッダの後には、複数のラインの列及びライン終端が続いてよく、その後にフッタ又はテールが続く。全てのビデオフレームは、同一のフレーム構造を有するものと予想され得る。従って受信側アプリケーションは、部分的なフレームを取り扱うことができない場合がある。アイソレータセルは、アイソレータセルが送信側アプリケーションから受信側アプリケーションに通過させているデータを理解できるように、ビデオフレーム構造に関する知識を保有するよう向上させることができる。アイソレータセルが、あるフレームの伝送の進行中に２つのアプリケーションを分離するコマンドを受信した場合、アイソレータセルはフレームの伝送を即座に終了させなくてよく、その代わりに、フレームの残りが伝送されるまで伝送を続行させてよい。これにより、受信側アプリケーションが部分的なフレームのみを受信することを防止できる。
【０１４５】
新規のアプリケーションをスワップインする場合、この新規のアプリケーションを、ＭＰＳ内のアイソレータセルのうちの１つ又は複数を構成することによって、上記新規のアプリケーションが通信する１つ又は複数のアプリケーションに連結してよい。例えば新規のアプリケーションが、スワップアウトされた古いアプリケーションと同一の１つ又は複数の他のアプリケーションと通信する場合、新規のアプリケーションを、上記古いアプリケーションを上記１つ又は複数の他のアプリケーションから連結解除するステップに関わったものと同一の１つ又は複数のアイソレータセルを制御することによって、上記１つ又は複数の他のアプリケーションと連結してよい。
【０１４６】
例えば上記古いアプリケーションは、ある所定のアイソレータセルの下流側にあってよく、このアイソレータセルは、上記古いアプリケーションがスワップアウトされると、送信側アプリケーションからのデータ受信を切断してよい。新規のアプリケーションがスワップインされると、このアイソレータセルを、データを受信するモードに戻すことができる。従って新規のアプリケーションの実行が開始されると、送信側アプリケーションが送信するデータを、過去にこの送信側アプリケーションからデータを受信していた古いアプリケーションの代わりに、新規のアプリケーションに送信できる。
【０１４７】
別の例として、古いアプリケーションはある所定のアイソレータセルの上流側にあってよく、このアイソレータセルは、上記古いアプリケーションがスワップアウトされると、受信側アプリケーションへのデータ転送を中断してよい。新規のアプリケーションがスワップインされると、このアイソレータセルを、データを転送するモードに戻すことができる。従って新規のアプリケーションの実行が開始されると、受信側アプリケーションは、過去にこの受信側アプリケーションにデータを送信していた古いアプリケーションの代わりに、新規のアプリケーションからデータを受信できる。
【０１４８】
新規のアプリケーションは、古いアプリケーションが通信していたものとは異なる１つ又は複数のアプリケーションのセットと通信してもよいことに留意されたい。従っていくつかの実施形態では、新規のアプリケーションを、古いアプリケーションの通信のために使用されていたものとは異なるその通信対象の各アプリケーションに連結するように、異なるアイソレータセルのセットを構成してよい。
【０１４９】
アイソレータセルを用いない信頼できる通信
アイソレータセルは、アプリケーションがスワップイン及びスワップアウトされるタイミングが確実には分からないシステムにおいては特に有用となり得る。アイソレータセルを採用することにより、通信の破壊及び消滅を確実に実施できるようにすることができ、システムを既知の良好な状態に維持できる。
【０１５０】
しかしながら、アイソレータセルを使用しない他の実施形態も考えられる。例えばいくつかの実施形態では、アプリケーションを、その外部通信を確実にクリーンアップできるように設計してよい。このクリーンアップは、対応する上流又は下流のアプリケーションと共同で実施してよい。アプリケーションは少なくとも２つの状況において、例えばアプリケーションがその計算を完了した場合、及びアプリケーションが、安定状態に遷移してそれ自体をクリーンアップするコマンドを受けた場合において、通信のクリーンアップを開始できる。
【０１５１】
いくつかの実施形態では、親タスクがアプリケーションにコマンドを送信する場合、アプリケーションと親タスクとの間の通信機構は、各ＰＥにおいて１つ又は複数のメールボックスレジスタを使用する、単純なポーリング方式のＡＰＩとすることができる。これは、親タスクへと逆方向に直接通信する手段を有することを全てのＰＥには要求しないため、有利であり得る。例として、ＡＰＩは、スワップ可能なアプリケーションが呼び出すことができる以下の２つの関数を有してよい：
ＭＰＸ＿ｒｅａｄｙ＿ｔｏ＿ｓｗａｐ（．．．）  ‐このアプリケーションは、その１つ又は複数の外部通信をクリーンアップした後安定状態となり、スワップの準備ができた状態であることを親タスクに通知する；及び
ＭＰＸ＿ｃｈｅｃｋ＿ｆｏｒ＿ｓｔｏｐ＿ｒｅｑｕｅｓｔ（．．．）  ‐このアプリケーションは、親タスクがこのアプリケーションに計算を停止して安定状態となることを要求したかを検査する。
【０１５２】
このＡＰＩが使用し得る典型的な方法は、メールボックスレジスタにある値を送信することによって、親タスクがアプリケーションに停止するよう要求できるというものである。アプリケーションはその実行中の様々な時点において、ポーリングによって、例えばＭＰＸ＿ｃｈｅｃｋ＿ｆｏｒ＿ｓｔｏｐ＿ｒｅｑｕｅｓｔ（．．．）関数を呼び出すことによって、停止要求を受信できる。停止要求に応答してアプリケーションはその外部通信を停止及びクリーンアップしてよい。次にアプリケーションは、ＭＰＸ＿ｒｅａｄｙ＿ｔｏ＿ｓｗａｐ（．．．）関数を呼び出すことによって、スワップアウトの準備ができた状態であることを親タスクに通知してよく、上記関数は、メールボックスレジスタにある値を設定する。親タスクは、メールボックスレジスタをポーリングすることによってこの通知を受信してよい。
【０１５３】
アプリケーションが独立してその計算を終了した場合にも、ＡＰＩを使用してよい。例えばアプリケーションは、その外部通信を停止及びクリーンアップしてよい。次にアプリケーションは、ＭＰＸ＿ｒｅａｄｙ＿ｔｏ＿ｓｗａｐ（．．．）関数を呼び出すことによって、スワップの準備ができた状態であることを親タスクに通知してよい。親タスクは、メールボックスレジスタをポーリングすることによってこの通知を受信してよい。
【０１５４】
システムコントローラ
いくつかの実施形態では、システムコントローラプログラムは、アプリケーションスワップのシステムレベル制御を提供できる。システムコントローラは、ＭＰＳの外部のプロセッサ上で実行されてよい。例示的な実装形態では、システムコントローラは外部汎用プロセッサ上で実行され、親タスクにコマンドを通信し、続いて親タスクはこれらのコマンドを実行する。
【０１５５】
いくつかの実施形態では、システムコントローラは、ＧＰＰ上で実行され、オープンコンピューティング言語（ＯｐｅｎＣＬ）ホストコントロールＡＰＩのサブセットを利用するアプリケーションであってよい。このＡＰＩサブセットは、取り付けられたハードウェアシステムをモデリングする機能、アプリケーションを開始及び停止させる機能、並びにデータを組込み型メモリ（例えばシステムに取り付けられたＤＲＡＭ）から、及び上記メモリへと移動させる機能を提供する。
【０１５６】
ＯｐｅｎＣＬサブセットの実装は、ＡＲＭプロセッサのために書かれたシステムコントローラプログラムを単にリコンパイルするだけでｘ８６プロセッサに移すことができるように、異なる複数のＧＰＰ間で移植可能に設計してよい。これを実施するために、ＡＰＩは２つのレイヤ、即ち一般的なＡＰＩレイヤ及びデータ通信レイヤに実装するべきである。データ通信レイヤは、特定のハードウェアプラットフォームに固有のものであってよく、いずれの新規のハードウェアプラットフォームに移される。ＯｐｅｎＣＬの１つの能力は、取り付けられた計算エンジン上でネイティブプログラムを実行するためのサポートである。
【０１５７】
スワップ可能なシステムの実現
スワップ可能なシステムの論理及び物理的設計並びに検証が終了したら、この設計を標的のシステム上で実行するために必要なオブジェクト及び情報ファイルを生成してよい。いくつかの実施形態ではこれは、以下のように実施できる。１）ベースシステムを生成及び検証する。２）全てのスワップ可能なアプリケーションを生成及び検証する。３）全てのリーガル構成を生成及び検証する。４）ベースシステムのための、アイソレータセルを含むデータベース及びオブジェクトファイルを生成する。５）各リーガル構成において各一意のアプリケーションインスタンスのための実行可能なスワップ手順を生成する。これを、スワップ可能なオブジェクトファイルが全てのアプリケーションインスタンスに関して生成されるまで、各リーガル構成に関して繰り返してよい。６）アプリケーションのセット全体に関するマスターデータベースを生成する。これにより、システムコントローラ及び親タスクが、実行時間中にこのアプリケーションのセットを管理できるようにすることができる。７）システムコントローラプログラムをＧＰＰ上にコンパイルする。
【０１５８】
実行時間の初期化
スワップ可能なシステムの実行は、システムコントローラを用いて開始できる。システムコントローラは初めに、親タスク及び（必要な場合は）ローダタスクをロードしてよい。次に親タスクは、以下を完了してよい。１）プリブート初期化を実行して、ＤＤＲコントローラ、ＩＯコントローラ等の全てのリソースを初期化する。２）必要な場合、スワップ可能なアプリケーションに関するオブジェクトファイルを１つ又は複数のＤＲＡＭに伝送する。３）全てのスワップ不可能なアプリケーション及びアイソレータセルを含むベースシステムをロードする。４）システムコントローラからの命令を待機する。実行時間中、システムコントローラは、親タスクにコマンドを送信することによって実行中のシステムの状態を制御できる。
【０１５９】
スワップ不可能なアプリケーションを含むシステムの検証
個々のアプリケーションを、これらが刺激に対して正しく応答することを保証することによる通常の方法で、別個に検証してよい。互いに通信するアプリケーションは、例えば上述の開発ワークフローを用いて、一緒に検証するべきである。全てのリーガル構成の検証は、全システムを検証するための通常のソフトウェア又はハードウェア技術を用いて実施するべきである。
【０１６０】
単一のアプリケーションのスワップ手順の検証も、ソフトウェアシミュレータを用いて実施できる。これは、上記単一のアプリケーション及びこれに関連する（スワップ不可能なアプリケーションとしての）テストベンチのみから構成されたスワップ可能なシステムを画定することによって達成できる。次に、親タスク及びローダタスクを含むスワッププロセス全体を、シミュレーション環境で実行して観察できる。アプリケーションスワップ機構の検証のために、ＧＰＰ上で実行されるシステムコントローラをシミュレートする必要はない。システムコントローラからのコマンドは、シミュレーション中にＩ／Ｏポート（若しくはＤＡＰポート）へとストリーミングされるデータファイルを介して、又はシステムコントローラの一時的挙動を静的又はインタラクティブにエミュレートできる外部プログラムを生成することによって、エミュレートできる。
【０１６１】
スワップ可能なアプリケーションを含むシステムのデバッグ
複雑な多アプリケーションスワップ可能システムに関して、多数の異なるデバッグタスクを実施できる。これらのタスクは以下を含んでよい。
１．個々のアプリケーションを、アプリケーション生成及び検証プロセス中に通常通り別個にデバッグできる。
２．上述の手順を用いて、ある独立したアプリケーションに関するスワップ手順をデバッグできる。続いてスワッププロセス全体を、親タスク内及びローダタスク内の全てのコードを含むシミュレーション（又はハードウェアデバッグ）環境において実行及びデバッグできる。
３．全てのアクティブなアプリケーションに関するトップレベル構成テストベンチを画定し、デバッグコマンドを必要に応じて用いることによって、個々の構成のデバッグを進めることができる。安定な構成はデバッグされているため、シミュレータはいずれのアプリケーションスワップステップを実行する必要がなく、ただアプリケーションを実行できる。
４．スワップ可能なシステム全体をデバッグするために、デバッガは、ベースシステム、アイソレータセル、アプリケーションインスタンスを含む完全なプロジェクトをロードできる。デバッグセッション中のあらゆる時点において、シミュレータ（又はハードウェア上でのシステムの実行）は、どのアプリケーションインスタンスがスワップインされるか、又はスワップイン若しくはスワップアウトプロセスの途上であるかを追跡できる。この情報をユーザに表示でき、これによって実行中のアプリケーションはデバッグ可能となり、実行中でないアプリケーションは確認できるもののデバッグ可能ではなくなる。この情報を用いて、システムの統計を収集及び表示することもでき、またシステムレベルのスワップの挙動を表示することもできる。
【０１６２】
スワップ可能なアプリケーションのシステムをデバッグする際、デバッガは、デバッグコマンド（例えば区切り点及びシングルステップ）の挙動に関して２つの選択肢を有してよい。第１の選択肢は、設計全体を単一のシステムとして処理でき、デバッグコマンドを設計内の全てのアクティブなアプリケーションに適用できる（例えば区切り点が全てのアプリケーションを停止させる）。第２の選択肢は、各アプリケーションを独立してデバッグできるようにすることができる。この場合、区切り点は、この区切り点が存在するアプリケーションのみを停止させる。更にデバッガは、現在スワップアウトされているアプリケーションに区切り点を設定する能力を提供する。このようにして、このアプリケーションがスワップインされる際、この区切り点が即座にアクティブとなる。
【０１６３】
ＭＰＳと共にＧＰＰ上のシステムコントローラをデバッグするために、デバッガは、システム開発環境と同時に実行されるＥｃｌｉｐｓｅベースの開発環境を提供できる。これら２つの開発環境をリンクさせることにより、これらはデバッグイベントを共有できる。例えばＧＰＰの区切り点は、ＭＰＳ上で実行されるアプリケーションも停止させるように画定してよい。あるいは、ユーザが実際のシステムコントローラのデバッグを望まない場合、デバッガは、システムコントローラコマンドストリームを実行中のシステムにインタラクティブに又はプログラムによって供給できるＧＰＰエミュレータを提供してよい。
【０１６４】
様々な実施形態において、コンピュータ可読メモリ媒体は、ソフトウェアアプリケーションのスワップに関わる機能等の上述の様々な機能を実装するためにＭＰＳのプロセッサ及び／又は１つ若しくは複数の外部プロセッサによって実行可能なプログラム命令を記憶してよい。一般に、コンピュータ可読メモリ媒体は、実行した場合に本出願に記載の機能の一部分又は全てを実装する、命令のいずれのセットを含んでよい。一般にコンピュータ可読メモリ媒体は、コンピュータシステムに命令及び／又はデータを提供するために使用中にコンピュータがアクセスできる、いずれのストレージ媒体を含んでよい。例えばコンピュータ可読メモリ媒体は、磁気又は光媒体、例えばディスク（固定若しくは消去可能）、テープ、ＣＤ‐ＲＯＭ、ＤＶＤ‐ＲＯＭ、ＣＤ‐Ｒ、ＣＤ‐ＲＷ、ＤＶＤ‐Ｒ、ＤＶＤ‐ＲＷ又はＢｌｕ‐ｒａｙといったストレージ媒体を含んでよい。ストレージ媒体は更に、ユニバーサルシリアルバス（ＵＳＢ）インタフェース、フラッシュメモリインターフェイス（ＦＭＩ）、シリアルペリフェラルインタフェース（ＳＰＩ）等の周辺インタフェースを介してアクセス可能な、ＲＡＭ（例えば同期ダイナミックＲＡＭ（ＳＤＲＡＭ）、ラムバスＤＲＡＭ（ＲＤＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）等）、ＲＯＭ、フラッシュメモリ、不揮発性メモリ（例えばフラッシュメモリ）等の揮発性又は不揮発性メモリ媒体を含んでよい。ストレージ媒体は、微小電気機械システム（ＭＥＭＳ）、並びにネットワーク及び／又は無線リンク等の通信媒体を介してアクセス可能なストレージ媒体を含んでよい。キャリア媒体は、コンピュータがアクセス可能なストレージ媒体、及び有線又は無線伝送等の伝送媒体を含んでよい。
【０１６５】
好ましい実施形態との関連で以上の実施形態について説明したが、本明細書に記載した具体的形態に上記好ましい実施形態を限定することは意図されておらず、反対に、添付の請求項によって定義されるような本発明の精神及び範囲内に合理的に含まれ得るような代替例、修正例、均等物を上記好ましい実施形態が包含することが意図されている。
【図１Ａ】
2018022524.tif 000003
【図１Ｂ】
2018022524.tif 000004
【図２Ａ】
2018022524.tif 000005
【図２Ｂ】
2018022524.tif 000006
【図２Ｃ】
2018022524.tif 000007
【図３】
2018022524.tif 000008
【図４】
2018022524.tif 000009
【図５】
2018022524.tif 000010
【図６】
2018022524.tif 000011
【図７】
2018022524.tif 000012
【図８】
2018022524.tif 000013
【図９】
2018022524.tif 000014
【図１０】
2018022524.tif 000015
【図１１】
2018022524.tif 000016
【図１２】
2018022524.tif 000017
【図１３】
2018022524.tif 000018
【図１４】
2018022524.tif 000019
【図１５】
2018022524.tif 000020
【図１６】
2018022524.tif 000021
【図１７】
2018022524.tif 000022
【図１８】
2018022524.tif 000023
【図１９】
2018022524.tif 000024
【図２０】
2018022524.tif 000025
【図２１】
2018022524.tif 000026
【図２２】
2018022524.tif 000027
【図２３】
2018022524.tif 000028
【図２４】
2018022524.tif 000029
【図２５】
2018022524.tif 000030
【図２６】
2018022524.tif 000031
【図２７】
2018022524.tif 000032
【図２８】
2018022524.tif 000033
【手続補正書】
【提出日】平成29年10月20日(2017.10.20)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
マルチプロセッサシステムにおいてアプリケーションスワップを実施する方法であって、前記マルチプロセッサシステムが集積回路上に含まれ、前記方法は、
複数のアプリケーションに含まれる一つ以上のアプリケーションに対応する命令およびデータを前記マルチプロセッサシステム上で分散させるステップであって、前記マルチプロセッサシステムは、複数のプロセッサと、前記プロセッサに分散された複数のメモリとを含むステップと、
前記複数のアプリケーションを前記マルチプロセッサシステム上で実行するステップであって、前記複数のアプリケーションは共に実行され、および互いに通信してリアルタイム動作を実行し、前記リアルタイム動作を実施することは、リアルタイムデータを処理することを含むステップと、
前記複数のアプリケーションの前記一つ以上のアプリケーションのうちの第１のアプリケーションを、前記複数のアプリケーションのうちの第２のアプリケーションとスワップするステップであって、前記第２のアプリケーションは、前記複数のアプリケーションの前記一つ以上のアプリケーションから除外されるステップと、
を含み、
前記第１のアプリケーションを前記第２のアプリケーションとスワップするステップは、前記第２のアプリケーションに対応する命令およびデータを、一つ以上のスワップルートを用いて、前記複数のメモリのうちの標的のメモリへ転送することを含み、前記一つ以上のスワップルートは、共通のトランクルートを共有し、前記共通のトランクルートは、前記第２のアプリケーションに対応する命令およびデータの記憶場所を、前記マルチプロセッサシステム内の目的地へ接続する、方法。
【請求項２】
前記一つ以上のスワップルートのうちの特定のスワップルートは、前記共通のトランクルートと終点ルートとを含み、前記終点ルートは、前記マルチプロセッサシステム内の目的地を前記標的のメモリに接続する、請求項１に記載の方法。
【請求項３】
ユーザ入力に基づいて、前記共通のトランクルートを指定するステップをさらに含む、請求項１に記載の方法。
【請求項４】
アイソレータセルを用いて、前記第１のアプリケーションから前記複数のアプリケーションのうちの第３のアプリケーションへデータを受け渡すステップをさらに含む、請求項１に記載の方法。
【請求項５】
前記アイソレータセルを用いて、前記データを前記第１のアプリケーションから前記第３のアプリケーションへ受け渡すステップは、
前記アイソレータセルの入力によって前記データを受け取るステップと、
前記アイソレータセルによって前記データをバファリングするステップと、
前記アイソレータセルの出力に対して前記データをコピーするステップと、
を含む、請求項４に記載の方法。
【請求項６】
前記第１のアプリケーションを前記第２のアプリケーションとスワップする前に、前記第１のアプリケーションは、前記複数のプロセッサの第１のサブセット上で実行し、および前記第１のアプリケーションを前記第２のアプリケーションとスワップするステップは、
前記複数のプロセッサの前記第１のサブセット上の前記第１のアプリケーションを停止させるステップと、
前記第１のアプリケーションの状態を保存するステップと、
前記第２のアプリケーションを、前記複数のプロセッサの前記第１のサブセットに関連するメモリにロードするステップと、
を含む、請求項１に記載の方法。
【請求項７】
前記第１のアプリケーションを前記第２のアプリケーションとスワップするステップは、
前記第１のアプリケーションと、前記一つ以上の他のアプリケーションのうちの少なくとも一つのアプリケーションとの通信を切断するステップをさらに含む、請求項６に記載の方法。
【請求項８】
一つ以上の第１のバッファメモリが、前記複数のプロセッサの前記第１のサブセットと、前記複数のプロセッサの他のサブセットとの間に連結され、前記第１のアプリケーションと前記少なくとも一つのアプリケーションとの通信を切断するステップは、前記切断を可能にするように、前記一つ以上の第１のバッファメモリを制御するステップを含む、請求項７に記載の方法。
【請求項９】
前記第１のアプリケーションを前記第２のアプリケーションとスワップするステップは、前記第２のアプリケーションをロードするステップの後に、前記第２のアプリケーションと前記少なくとも一つのアプリケーションとの通信を接続するステップをさらに含む、請求項７に記載の方法。
【請求項１０】
集積回路に含まれているマルチプロセッサシステムであって、
複数のプロセッサと、
前記プロセッサ間に散在する複数のメモリと、
前記複数のプロセッサと、前記プロセッサ間に散在する前記複数のメモリとを相互接続する通信ファブリックであって、前記通信ファブリックが、前記複数のプロセッサの少なくともサブセット間に散在する複数のバッファメモリを含む通信ファブリックと、
を備えるマルチプロセッサシステムであって、
前記複数のバッファメモリは、
前記マルチプロセッサシステム内で実行する複数のアプリケーション間でデータを通信するように構成され、この場合、前記複数のアプリケーションは、第１のアプリケーションと、複数の他のアプリケーションとを含み、および
前記第１のアプリケーションと第２のアプリケーションのスワップ中に、アクティブなアプリケーション間の接続を切断および復元するように構成され、この場合、前記第２のアプリケーションは、既にロードされて、前記マルチプロセッサシステム上で実行している前記複数のアプリケーションのうちの一つではなく、
前記通信ファブリックは、前記第２のアプリケーションに対応する命令およびデータを、一つ以上のスワップルートを用いて、前記複数のメモリのうちの標的のメモリへ転送するように構成され、前記一つ以上のスワップルートは、共通のトランクルートを共有し、前記共通のトランクルートは、前記第２のアプリケーションに対応する命令およびデータの記憶場所を、前記マルチプロセッサシステム内の目的地へ接続する、マルチプロセッサシステム。
【請求項１１】
前記複数のプロセッサ間で連結された複数のデータメモリルータをさらに備え、前記複数のデータメモリルータは、前記プロセッサ間に散在する複数のメモリを含む、請求項１０に記載のマルチプロセッサシステム。
【請求項１２】
前記一つ以上のスワップルートのうちの特定のスワップルートは、前記共通のトランクルートおよび終点ルートを含み、前記終点ルートは、前記マルチプロセッサシステム内の前記目的地を前記標的のメモリに接続する、請求項１０に記載のマルチプロセッサシステム。
【請求項１３】
前記通信ファブリックはさらに、ユーザ入力に基づいて、前記共通のトランクルートを指定するように構成される、請求項１０に記載のマルチプロセッサシステム。
【請求項１４】
前記複数のメモリは、複数のアイソレータセルを含み、前記複数のアイソレータセルのうちの特定のアイソレータセルは、
前記データの少なくとも一部を受け取るように、
前記データの少なくとも一部をバッファリングするように、および
前記特定のアイソレータセルに含まれる出力に対して前記データをコピーするように構成される、請求項１０に記載のマルチプロセッサシステム。
【請求項１５】
前記複数のプロセッサの第１のサブセットは、前記第１のアプリケーションを前記第２のアプリケーションとスワップする前に、前記第１のアプリケーションを実行するように構成され、前記第１のアプリケーションを前記第２のアプリケーションとスワップするために、前記複数のプロセッサの前記第１のサブセットは、
前記第１のアプリケーションを停止させるように、
前記第１のアプリケーションの状態を保存するように、および
前記複数のプロセッサの前記第１のサブセットに関連するメモリに前記第２のアプリケーションをロードするように構成される、請求項１０に記載のマルチプロセッサシステム。
【外国語明細書】
2018022524000001.pdf