(57)【要約】【課題】ローカルメモリにおいてアプリケーションプログラムモジュールを実行する。【解決手段】方法及び装置は、実行のために少なくとも１つのソフトウェアプログラムモジュールを、前記ソフトウェアプログラムのメインモジュール及び複数のサブモジュールを格納している記憶媒体から前記ローカルメモリにロードする機能と、アドレステーブルを更新する機能と、を有し、前記アドレステーブルのコピーは前記記憶媒体及び前記ローカルメモリの少なくとも一方に存在し、前記アドレステーブルは前記モジュールの各々に対応する少なくとも１つのエントリを有し、各エントリは、（ｉ）プロセッサのローカルメモリ内での、対応するモジュールが配置された先のアドレスを表すデスティネーションアドレス、及び（ｉｉ）前記記憶媒体内での、前記対応するモジュールの元のアドレスを表すソースアドレス、の少なくとも１つを含む。【選択図】図２
2006323829.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも１つのソフトウェアプログラムモジュールを、前記ソフトウェアプログラムのメインモジュール及び複数のサブモジュールを格納している記憶媒体から、プロセッサのローカルメモリにロードするステップと、
アドレステーブルを更新するステップと、を有し、前記アドレステーブルのコピーは前記記憶媒体及び前記ローカルメモリの少なくとも一方に存在し、前記アドレステーブルは前記モジュールの各々に対応する少なくとも１つのエントリを有し、各エントリは、
（ｉ）プロセッサのローカルメモリ内での、対応するモジュールが配置された先のアドレスを表すデスティネーションアドレスと、
（ｉｉ）前記記憶媒体内での、前記対応するモジュールの元のアドレスを表すソースアドレスと、
の少なくとも１つを含み、
前記アドレステーブルの前記デスティネーションアドレスが、前記ローカルメモリ内で前記対応するモジュールがコピーされた先のアドレスを表すように更新されることを特徴とする方法。
【請求項２】
前記ローカルメモリ内の前記アドレステーブルは相対アドレス０で始まることを特徴とする請求項１に記載の方法。
【請求項３】
前記少なくとも１つのソフトウェアプログラムモジュールを前記ローカルメモリにロードする前記ステップは、前記アドレステーブルから前記モジュールの前記ソースアドレスを取得するステップを有することを特徴とする請求項１又は２に記載の方法。
【請求項４】
前記ロードするステップは、前記ローカルメモリ内での、空きスペースの始点の位置を表すヒープポインタが示すアドレスを始点とする前記ローカルメモリに、前記モジュールをコピーするステップを更に有することを特徴とする請求項３に記載の方法。
【請求項５】
前記モジュールの前記デスティネーションアドレスを更新する前記ステップは、前記アドレステーブルの前記デスティネーションアドレスを、前記ヒープポインタを含むように変更するステップを有することを特徴とする請求項４に記載の方法。
【請求項６】
前記アドレステーブルの各エントリは、（ｉ）前記対応するモジュールのサイズ、及び（ｉｉ）前記対応するモジュールのスタティックデータが存在するアドレスを表すフレームアドレス、の少なくとも１つを更に有することを特徴とする請求項４に記載の方法。
【請求項７】
前記ローカルメモリにロードされた前記モジュールのサイズに対応する量だけ前記ヒープポインタを増やすステップを更に有することを特徴とする請求項６に記載の方法。
【請求項８】
前記少なくとも１つのモジュールは、第１のプロセッサのローカルメモリに記憶されているメインモジュールであることを特徴とする請求項１〜７のいずれかに記載の方法。
【請求項９】
前記メインモジュールが、前記記憶媒体から第２のプロセッサのローカルメモリにサブモジュールをロードさせるステップと、
前記第２のプロセッサの前記ローカルメモリ内で、前記サブモジュールが配置された先のアドレスを表すように、前記サブモジュールの前記デスティネーションアドレスを変更することによって、前記ローカルメモリのそれぞれにある前記アドレステーブルを更新するステップと、を更に有することを特徴とする請求項８に記載の方法。
【請求項１０】
前記第２のプロセッサの前記ローカルメモリに前記サブモジュールをロードする前記ステップは、前記アドレステーブルから前記サブモジュールの前記ソースアドレスを取得するステップを有し、
前記ロードするステップは、前記ローカルメモリ内での、空きスペースの始点の位置を表す前記第２のプロセッサのヒープポインタが示すアドレスを始点とする前記第２のプロセッサの前記ローカルメモリに、前記サブモジュールをコピーするステップを有することを特徴とする請求項９に記載の方法。
【請求項１１】
前記サブモジュールの前記デスティネーションアドレスを更新する前記ステップは、前記アドレステーブルの前記デスティネーションアドレスを、前記ヒープポインタを含むように変更するステップを有することを特徴とする請求項１０に記載の方法。
【請求項１２】
前記アドレステーブルの各エントリは、
（ｉ）前記対応するモジュールのサイズと、
（ｉｉ）前記対応するモジュールのスタティックデータが存在するアドレスを表すフレームアドレスと、
の少なくとも１つを更に有することを特徴とする請求項１０に記載の方法。
【請求項１３】
前記ローカルメモリにロードされた前記サブモジュールのサイズに対応する量だけ前記ヒープポインタを増やすステップを更に有することを特徴とする請求項１２に記載の方法。
【請求項１４】
第１のソフトウェアプログラムモジュールから第２のソフトウェアプログラムモジュールを呼び出すステップを更に有し、少なくとも前記第１のソフトウェアプログラムモジュールは前記プロセッサの前記ローカルメモリ内にあることを特徴とする請求項１〜１３のいずれかに記載の方法。
【請求項１５】
前記呼び出しは参照又は値による呼び出しであることを特徴とする請求項１４に記載の方法。
【請求項１６】
前記第１のソフトウェアプログラムモジュールから別のプロセッサのローカルメモリ内の前記第２のソフトウェアプログラムモジュールを値により呼び出すステップを更に有し、前記別のプロセッサの前記ローカルメモリは前記モジュールの各々に対応する少なくとも１つのエントリを有するアドレステーブルを有し、各エントリは、
（ｉ）対応するローカルメモリ内で、対応するモジュールが配置された先のアドレスを表すデスティネーションアドレスと、
（ｉｉ）前記記憶媒体内での、前記対応するモジュールの元のアドレスを表すソースアドレスと、
の少なくとも１つを含むことを特徴とする請求項１４又は１５に記載の方法。
【請求項１７】
前記プロセッサの前記ローカルメモリのスタックにデータをプッシュして、前記第２のプロセッサの前記ローカルメモリのスタックに前記データの少なくとも一部を転送するステップを更に有することを特徴とする請求項１６に記載の方法。
【請求項１８】
前記ソフトウェアプログラムモジュールの各々は、実行可能プログラムコードの１つ以上のセクションから形成されており、かつ、１つ以上のエントリを有するヘッダを有し、各エントリは、前記モジュール内で、実行可能プログラムコードの前記セクションのうちの対応するセクションが存在するアドレスを表すエントリアドレスを有することを特徴とする請求項１４に記載の方法。
【請求項１９】
前記呼び出すステップは、前記デスティネーションアドレスに前記第２のモジュールの前記フレームアドレスを加算した値を、前記プロセッサのフレームポインタにロードするステップを有することを特徴とする請求項１８に記載の方法。
【請求項２０】
前記デスティネーションアドレスに前記第２のモジュールの前記フレームアドレスを加算した値を、前記フレームポインタにロードする前に、前記フレームポインタの以前の値を前記ローカルメモリのスタックにプッシュするステップを更に有することを特徴とする請求項１９に記載の方法。
【請求項２１】
前記呼び出すステップは、前記第２のモジュールのプログラムコードの特定のセクションに対応するアドレスを、前記プロセッサの命令ポインタにロードするステップを有することを特徴とする請求項２０に記載の方法。
【請求項２２】
メインメモリと機能的に接続された少なくとも１つのプロセッサと、
前記少なくとも１つのプロセッサに結合されたローカルメモリと、を有し、各プロセッサは、
少なくとも１つのソフトウェアプログラムモジュールを、前記ソフトウェアプログラムのメインモジュール及び複数のサブモジュールを格納している記憶媒体から前記ローカルメモリにロードし、
アドレステーブルを更新するように動作可能であり、前記アドレステーブルのコピーは前記記憶媒体及び前記ローカルメモリの少なくとも一方に存在し、前記アドレステーブルは前記モジュールの各々に対応する少なくとも１つのエントリを有し、各エントリは、
（ｉ）プロセッサのローカルメモリ内での、対応するモジュールが配置された先のアドレスを表すデスティネーションアドレスと、
（ｉｉ）前記記憶媒体内での、前記対応するモジュールの元のアドレスを表すソースアドレスと、
の少なくとも１つを含むことを特徴とする装置。
【請求項２３】
前記プロセッサは、前記ローカルメモリ内で前記対応するモジュールがコピーされた先のアドレスを表すように、前記アドレステーブルの前記デスティネーションアドレスを更新するように動作可能であることを特徴とする請求項２２に記載の装置。
【請求項２４】
前記少なくとも１つのプロセッサは、
前記アドレステーブルから前記少なくとも１つのソフトウェアプログラムモジュールの前記ソースアドレスを取得して、前記ローカルメモリ内での、空きスペースの始点の位置を表すヒープポインタが示すアドレスを始点とする前記ローカルメモリに、前記モジュールをコピーすることによって、前記モジュールを前記ローカルメモリにロードし、
前記アドレステーブルの前記デスティネーションアドレスを、前記ヒープポインタを含むように変更するように動作可能であることを特徴とする請求項２２又は２３に記載の装置。
【請求項２５】
前記アドレステーブルの各エントリは、
（ｉ）前記対応するモジュールのサイズと、
（ｉｉ）前記対応するモジュールのスタティックデータが存在するアドレスを表すフレームアドレスと、の少なくとも１つを有し、
前記プロセッサは、前記ローカルメモリにロードされた前記モジュールのサイズに対応する量だけ前記ヒープポインタを増やすように動作可能であることを特徴とする請求項２４に記載の装置。
【請求項２６】
前記少なくとも１つのモジュールは、第１のプロセッサのローカルメモリに記憶されているメインモジュールであり、前記第１のプロセッサは、
（ｉ）前記メインモジュールを実行して、前記メインメモリから第２のプロセッサのローカルメモリにサブモジュールをロードさせ、
（ｉｉ）前記第２のプロセッサの前記ローカルメモリ内で、前記サブモジュールが配置された先のアドレスを表すように、前記サブモジュールの前記デスティネーションアドレスを変更することによって、前記ローカルメモリのそれぞれにある前記アドレステーブルを更新するように動作可能であることを特徴とする請求項２２〜２５のいずれかの項に記載の装置。
【請求項２７】
前記少なくとも１つのプロセッサは、
第１のソフトウェアプログラムモジュールが第２のソフトウェアプログラムモジュールを呼び出すように、前記第１のソフトウェアプログラムモジュールを実行するように実行可能であり、前記ソフトウェアプログラムモジュールの各々は、実行可能プログラムコードの１つ以上のセクションから形成されており、１つ以上のエントリを有するヘッダを有し、各エントリは、前記モジュール内で、実行可能プログラムコードの前記セクションのうちの対応するセクションが存在するアドレスを表すエントリアドレスを有し、
前記少なくとも１つのプロセッサは、前記フレームポインタの以前の値を前記ローカルメモリのスタックにプッシュし、
前記デスティネーションアドレスに前記第２のモジュールの前記フレームアドレスを加算した値を、前記フレームポインタにロードするように動作可能であることを特徴とする請求項２２〜２５のいずれかの項に記載の装置。
【請求項２８】
前記呼び出すステップは、前記デスティネーションアドレスに前記第２のモジュールのプログラムコードの前記特定のセクションの前記エントリアドレスを加算した値を、命令ポインタにロードするステップを有し、
前記アクションは、前記命令ポインタの前記アドレスにジャンプするステップと、
前記スタックから前記フレームポインタの前記以前の値をポップして、次の命令を実行することによって、前記第２のモジュールから前記第１のモジュールに戻るステップとを有することを特徴とする請求項２７に記載の装置。
【請求項２９】
前記第１のモジュールは第１のプロセッサのローカルメモリ内に存在し、
前記第２のモジュールは、第２のプロセッサのローカルメモリ内に存在し、
前記第１のプロセッサは、そのローカルメモリのスタックにデータをプッシュして、前記第２のプロセッサの前記ローカルメモリのスタックに前記データの少なくとも一部を転送するように動作可能であることを特徴とする請求項２７又は２８に記載の装置。
【請求項３０】
各プロセッサは、
フレームポインタの値をそのローカルメモリのスタックにプッシュし、
前記デスティネーションアドレスに前記第２のモジュールの前記フレームアドレスを加算した値を、前記フレームポインタにロードし、
前記デスティネーションアドレスに前記第２のモジュールのプログラムコードの前記特定のセクションの前記エントリアドレスを加算した値を、命令ポインタにロードし、
前記命令ポインタの前記アドレスにジャンプして、
前記ローカルメモリの前記スタックから前記フレームポインタの前記以前の値をポップして、次の命令を実行することによって、前記第２のモジュールから前記第１のモジュールに戻るように動作可能であることを特徴とする請求項２７〜２９のいずれかの項に記載の装置。
【請求項３１】
少なくとも１つのソフトウェアプログラムモジュールを、前記ソフトウェアプログラムのメインモジュール及び複数のサブモジュールを格納している記憶媒体から、プロセッサのローカルメモリにロードするステップと、
アドレステーブルを更新するステップであって、前記アドレステーブルのコピーは前記記憶媒体及び前記ローカルメモリの少なくとも一方に存在し、前記アドレステーブルは前記モジュールの各々に対応する少なくとも１つのエントリを有し、各エントリは、
（ｉ）プロセッサのローカルメモリ内での、対応するモジュールが配置された先のアドレスを表すデスティネーションアドレスと、
（ｉｉ）前記記憶媒体内での、前記対応するモジュールの元のアドレスを表すソースアドレスと、
の少なくとも１つを含むものであり、かつ、前記アドレステーブルの前記デスティネーションアドレスが、前記ローカルメモリ内で前記対応するモジュールがコピーされた先のアドレスを表すように更新されるものであるステップと、
をコンピュータに実行させるためのコンピュータプログラム。
【請求項３２】
請求項３１に記載のコンピュータプログラムが記録されたコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチプロセッシングシステム内でデータを転送するための方法及び装置に関する。
【背景技術】
【０００２】
最先端のコンピュータアプリケーションは、リアルタイムのマルチメディア機能を伴っているために、近年はデータスループットが高くより高速なコンピュータが常に望まれている。グラフィックアプリケーションは処理システムへの要求が大きいアプリケーションの１つであり、その理由は、グラフィックアプリケーションが所望のビジュアル結果を実現するために、比較的短時間で非常に多くのデータアクセス、データの演算処理、及びデータ操作を要求するからである。これらのアプリケーションは、１秒間に数千メガビットのデータ処理等の非常に高速な処理速度を要求する。シングルプロセッサを採用し、高速の処理速度を実現している処理システムもある一方で、マルチプロセッサアーキテクチャを利用して実装されている処理システムもある。マルチプロセッサシステムでは、複数のプロセッサが並列に（あるいは少なくとも協調して）動作し、所望の処理結果を実現することができる。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
一部の処理システムでは、プログラムコードを実行するために、プロセッサが、大容量のランダムアクセスメモリ（random access memory：ＲＡＭ）ではなく、比較的小容量のローカルメモリを使用することがある。大容量のＲＡＭ（メインメモリ又はシステムメモリ）は、大容量記憶装置に使用されうる。また、プロセッサは、メインメモリからローカルメモリにデータを転送するために、ダイレクトメモリアクセス（ＤＭＡ）技術も使用することがある。データの操作のため、データ（ビデオデータなど）をメインメモリからローカルメモリに送るため、データストリーミングが用いられることもある。しかし、データストリーミング技術を使用して、アプリケーションプログラムをローカルメモリに送ることはできない。
【課題を解決するための手段】
【０００４】
本発明の１つ以上の実施形態によると、処理システムの比較的小容量のローカルメモリにおいてアプリケーションプログラムのモジュールを実行するために、２種類のオーバーレイ技術を使用することができる。一方の技術では、１つのプロセッサが、参照による呼び出し、つまりコールバイリファレンス（call by reference）及び／又は値による呼び出し、つまりコールバイバリュー（call by value）のサブルーチンの引数渡しを使用して、実行のためローカルメモリにプログラムモジュールを順次受け取る同期モジュール起動が行われる。もう一方の技術では、複数のプロセッサが、値による呼び出しのサブルーチンの引数渡しのみを使用して、実行のため各々のローカルメモリにプログラムモジュールを受け取る非同期モジュール起動が行われる。
【０００５】
メインメモリイメージは、アドレステーブルと、それぞれのプログラムモジュールのセクションとを有しうる。アドレステーブルは、各プログラムモジュールについてデスティネーションアドレス、ソースアドレス、（モジュールの）サイズ、及びフレームアドレスを有しうる。デスティネーションアドレスは、好ましくは、プログラムモジュールが存在するローカルメモリ内でのアドレスであり、プロセッサソフトウェアによって動的に変更される。ソースアドレスは、好ましくは、プログラムモジュールが存在するメインメモリ内の位置（始点又は末尾）を表すスタティックな値である。フレームアドレスは、好ましくは、モジュールのスタティックデータが存在する場所の、モジュール内の開始アドレスである。
【０００６】
各プログラムモジュールは、位置に依存しないコードを使用して形成されうる。モジュールのヘッダは、モジュールの各サブプログラムの開始位置を参照しているエントリＩＤと、そのサブプログラムの実行時間を算出することができるバジェットプログラムを有しうる。
【０００７】
ローカルメモリイメージは、好ましくは、メインメモリから取得したテーブルのコピーを有し、この後にメインプログラムモジュール（又はマザープログラムモジュール）が置かれる。このマザーモジュールの後に後続のプログラムモジュール（サブモジュール）が置かれることがあり、スタック領域はメモリスペースの最下位に位置しうる。
【０００８】
モジュールの起動時に、マザーモジュールは、（ｉ）テーブルを使用してサブモジュールのメインメモリでの位置を調べる、（ｉｉ）サブモジュールをヒープポインタ（ローカルメモリ内の空きスペースの開始位置）にコピーする、（ｉｉｉ）ローカルメモリ及び／又はメインメモリにあるテーブルのデスティネーションアドレス（すなわちヒープポインタ）を更新する、（ｉｖ）プログラムモジュールのサイズ分だけヒープポインタを増やす、の１つ以上によって、ローカルメモリにサブモジュールを移動させ（call）うる。次に、マザーモジュールは、（ｉ）現在のフレームアドレスをプッシュする、（ｉｉ）新しいフレームポインタを設定（デスティネーションアドレス＋フレームアドレス）する、（ｉｉｉ）デスティネーションアドレス＋エントリＩＤをロードしてエントリアドレスをロードする、（ｉｖ）エントリアドレスにジャンプする、の１つ以上によってサブモジュール内の関数を呼び出すことができる。
【０００９】
本発明の１つ以上の実施形態によれば、方法ならびに装置は、少なくとも１つのソフトウェアプログラムモジュールを、前記ソフトウェアプログラムのメインモジュール及び複数のサブモジュールを格納している記憶媒体からプロセッサのローカルメモリにロードする機能と、アドレステーブルを更新する機能とを有する。前記アドレステーブルのコピーは前記記憶媒体及び前記ローカルメモリの少なくとも一方に存在し、前記アドレステーブルは好ましくは前記モジュールの各々に対して少なくとも１つのエントリを有し、各エントリは、（ｉ）プロセッサのローカルメモリ内での、対応するモジュールが配置された先のアドレスを表すデスティネーションアドレス、及び（ｉｉ）前記記憶媒体内での、前記対応するモジュールの元のアドレスを表すソースアドレス、の少なくとも１つを含む。
【００１０】
前記アドレステーブルの前記デスティネーションアドレスが、前記ローカルメモリ内で前記対応するモジュールがコピーされた先のアドレスを表すように好ましくは更新される。
【００１１】
前記少なくとも１つのソフトウェアプログラムモジュールを前記ローカルメモリにロードする機能は、好ましくは前記アドレステーブルから前記モジュールの前記ソースアドレスを取得する機能を有する。前記ロードする機能は、前記ローカルメモリ内での、空きスペースの始点の位置を表すヒープポインタが示すアドレスを始点とする前記ローカルメモリに、前記モジュールをコピーする機能を更に有しうる。
【００１２】
前記モジュールの前記デスティネーションアドレスを更新する前記機能は、前記アドレステーブルの前記デスティネーションアドレスを、前記ヒープポインタを含むように変更する機能を有しうる。
【００１３】
前記アドレステーブルの各エントリは、好ましくは、（ｉ）前記対応するモジュールのサイズ、及び（ｉｉ）前記対応するモジュールのスタティックデータが存在するアドレスを表すフレームアドレス、の少なくとも１つを更に有する。前記方法及び装置は、前記ローカルメモリにロードされた前記モジュールのサイズに対応する量だけ前記ヒープポインタを増やす機能を更に有しうる。
【００１４】
前記少なくとも１つのモジュールは、第１のプロセッサのローカルメモリに記憶されているメインモジュールでありうる。前記方法及び装置は、前記メインモジュールが、前記記憶媒体から第２のプロセッサのローカルメモリにサブモジュールをロードさせる機能と、前記第２のプロセッサの前記ローカルメモリ内で、前記サブモジュールが配置された先のアドレスを表すように、前記サブモジュールの前記デスティネーションアドレスを変更することによって、前記ローカルメモリのそれぞれにある前記アドレステーブルを更新する機能と、を有しうる。
【００１５】
前記第２のプロセッサの前記ローカルメモリに前記サブモジュールをロードする前記機能は、好ましくは前記アドレステーブルから前記サブモジュールの前記ソースアドレスを取得する機能を有する。前記ロードする機能は、好ましくは、前記ローカルメモリ内での、空きスペースの始点の位置を表す前記第２のプロセッサのヒープポインタが示すアドレスを始点とする前記第２のプロセッサの前記ローカルメモリに、前記サブモジュールをコピーする機能を有する。前記サブモジュールの前記デスティネーションアドレスを更新する前記機能は、前記アドレステーブルの前記デスティネーションアドレスを、前記ヒープポインタを含むように変更する機能を有しうる。
【００１６】
前記方法及び装置は、前記プロセッサの前記ローカルメモリ内にある第１のソフトウェアプログラムモジュールから第２のソフトウェアプログラムモジュールを呼び出す機能を更に有うる。前記呼び出しは参照又は値による呼び出しでありうる。前記ソフトウェアプログラムモジュールの各々は、好ましくは実行可能プログラムコードの１つ以上のセクションから形成されており、１つ以上のエントリを有するヘッダを有し、各エントリは、前記モジュール内で、実行可能プログラムコードの前記セクションのうちの対応するセクションが存在するアドレスを表すエントリアドレスを有する。
【００１７】
前記呼び出す機能は、前記デスティネーションアドレスに前記第２のモジュールの前記フレームアドレスを加算した値を、前記プロセッサのフレームポインタにロードする機能を有しうる。前記方法及び装置は、前記デスティネーションアドレスに前記第２のモジュールの前記フレームアドレスを加算した値を、前記フレームポインタにロードする前に、前記フレームポインタの以前の値を前記ローカルメモリのスタックにプッシュする機能を更に有しうる。前記呼び出す機能は、前記第２のモジュールのプログラムコードの特定のセクションに対応するアドレスを、前記プロセッサの命令ポインタにロードする機能を更に有しうる。前記呼び出す機能は、前記デスティネーションアドレスに前記第２のモジュールのプログラムコードの前記特定のセクションの前記エントリアドレスを加算した値を、前記命令ポインタにロードする機能も有しうる。
【００１８】
前記方法及び装置は、その後、前記命令ポインタの前記アドレスにジャンプして、前記プログラムコードを実行し、前記第２のモジュールから前記第１のモジュールに戻る。この戻りは、前記スタックから前記フレームポインタの前記以前の値をポップして、次の命令を実行することによって容易となりうる。
【００１９】
添付の図面を参照しつつ、ここに記載する本発明の説明を読めば、他の態様、特徴及び利点等は当業者に自明となるであろう。
【発明を実施するための最良の形態】
【００２０】
本発明を説明するために、現在の好ましい形態を図面の形式に示すが、本発明は図示したとおりの構成ならびに手段に限定されないことを理解されたい。
【００２１】
図面において、同一の要素は同じ参照符号によって参照される。図１に、本発明の１つ以上の特徴を実行するために適合されうる処理システム１００を例示する。簡潔を期すと共に明確になるように、図１のブロック図は装置１００の説明として本明細書において参照かつ記載される。しかし、この記載は同等の効力を有する方法のさまざまな態様に容易に適用できることを理解されたい。
【００２２】
この装置１００は、好ましくはプロセッサ１０２、ローカルメモリ１０４、メインメモリ１０６（ＤＲＡＭなど）及びバス１０８を備える。プロセッサ１０２は、システムメモリ１０６からデータを要求し、このデータを操作して所望の結果を得ることができる公知の技術であればいずれを利用しても実装することができる。例えば、プロセッサ１０２は、通常のマイクロプロセッサ、分散型マイクロプロセッサなど、ソフトウェア及び／又はファームウェアを実行することができる公知のマイクロプロセッサのいずれかを利用して実装することができる。例えば、プロセッサ１０２は、グレースケール情報、色情報、テクスチャデータ、ポリゴン情報、ビデオフレーム情報等を含むピクセルデータなどのデータを要求して操作することができるグラフィックプロセッサであり得る。
【００２３】
プロセッサが、システムメモリ１０６ではなくローカルメモリ１０４内にあるプログラムコードを実行するか、あるいはローカルメモリ１０４内にあるデータを操作できるように、ローカルメモリ１０４はプロセッサ１０２の近くに存在する。ローカルメモリ１０４は、ハードウェアキャッシュメモリ機能を実装するために、好ましくはオンチップ又はオフチップのハードウェアキャッシュ回路、キャッシュレジスタ、キャッシュメモリコントローラ等がないという点で、好ましくは従来のハードウェアキャッシュメモリでない。チップ上のスペースには限りがある場合があるため、ローカルメモリ１０４はシステムメモリ１０６よりも相当サイズが小さいことがある。プロセッサ１０２は、好ましくは、プログラムを実行したりデータを操作するために、データアクセスリクエストを出して、バス１０８経由でシステムメモリ１０６からローカルメモリ１０４にデータ（プログラムデータを含みうる）をコピーする。データアクセスを容易にするためのメカニズムは、好ましくはメモリインターフェース１１０にあるダイレクトメモリアクセスコントローラ（ＤＭＡＣ）を用いて実装される。
【００２４】
本発明の１つ以上の実施形態によれば、プロセッサ１０２は、（ＭＩＦ１１０経由で）メインメモリ１０６からローカルメモリ１０４に実行可能コードをコピーすることによりソフトウェアプログラムを実行し、ローカルメモリ１０４内でそのソフトウェアプログラムを実行しうる。ローカルメモリ１０４は比較的小容量（２５６ＫＢなど）であるため、（ソフトウェアプログラム全体ではなく）プログラムの一部と、関連するデータをローカルメモリ１０４にコピーさせて、実行させることが望ましいことがある。これには、ローカルメモリへのソフトウェアプログラムの一部分の移動と、プログラムのその一部、関数呼出し等の実行を制御及び管理する何らかのメカニズムが必要となる。
【００２５】
図２を参照すると、メインメモリ１０６内でのソフトウェアプログラムのメモリイメージを例示したブロック図が示される。メモリイメージの構造は、左側の列に示した相対アドレスと、図の本体にある関連する内容によって示されている。メモリイメージは、好ましくはメインモジュール１５０と、複数のサブモジュール１５２Ａ、１５２Ｂ、．．．、１５２Ｎを有する。メインメモリ１０６内のメインモジュールの位置は、アドレスＳＯＵＲＣＥ  ０によって定義されており、このアドレスは、好ましくはメインモジュール１５０の実行可能コードの開始アドレスを識別している。ほかのアドレス指定方式を使用してもよく、これには、メインメモリ１０６内の終了アドレス、又は開始アドレスと終了アドレスの組合せによりメインモジュール１５０の位置を定義するなどがある点に留意されたい。サブモジュール１５２は、好ましくはメインメモリ１０６内でメインモジュール１５０の後に置かれ、その位置は好ましくは各々の開始アドレスＳＯＵＲＣＥ  １、ＳＯＵＲＣＥ  ２、．．．、ＳＯＵＲＣＥ  Ｎによって定義される。
【００２６】
メモリイメージは、好ましくは相対アドレス０を始点とするアドレステーブルも有しており、このアドレステーブルには、各モジュール１５０、１５２に対応したエントリが少なくとも１つ含まれる。第１のエントリ１５４は、好ましくはメインモジュール１５０と関連しており、これに続くエントリ１５６Ａ、１５６Ｂ、．．．、１５６Ｎは、好ましくはサブモジュール１５２Ａ、１５２Ｂ、．．．、１５２Ｎとそれぞれ関連している。アドレステーブルの各エントリ１５４、１５６は、好ましくは、（ｉ）プロセッサ１０２のローカルメモリ１０４内の、対応するモジュールが配置された先のアドレスを表すデスティネーションアドレス（ＤＥＳＴ．）、（ｉｉ）メインメモリ１０６内の、対応するモジュールの元のアドレスを表すソースアドレス（ＳＯＵＲＣＥ）、（ｉｉｉ）対応するモジュールのサイズ（ＳＩＺＥ）、及び（ｉｖ）対応するモジュールのスタティックデータが存在する位置の、当該モジュール内でのアドレスを表すフレームアドレス（ＦＲＡＭＥ）の少なくとも１つを有する。
【００２７】
次に図３を参照すると、この図は、図２のモジュール１５０、１５２の構造を例示している。各モジュールは、好ましくは、スタティックデータ１６０などのデータと、実行可能プログラムコードの１つ以上のセクション１６２Ａ、１６２Ｂ、．．．、１６２Ｎが置かれうる領域を有する。モジュールは、例えばデバッグ又はその他の活動のために使用されうるその他のデータ１６４のための領域も有する。このモジュールの構造は、好ましくは１つ以上のエントリを有するヘッダも有し、各エントリは、実行可能プログラムコードのセクション１６２のうち、対応するセクションが存在する位置の、モジュール内でのアドレスを表すエントリアドレス（ＥＮＴＲＹ  ＃）を有する。このため、例えば、実行可能プログラムコードのセクション１６２Ａは、ＥＮＴＲＹ１に開始アドレスを有することがあり、これがヘッダに含まれる。実行可能プログラムコードのこれ以外のセクション１６２に対する他のエントリ（ＥＮＴＲＹ  ０、ＥＮＴＲＹ  ２など）もヘッダに存在する。
【００２８】
ヘッダは、バジェット情報（ＢＵＤＧＥＴ  ＃）も有することがあり、この情報は、プログラムの特定のモジュール１５２の実行時間の推定に使用することができる点にも留意されたい。好ましい実施形態では、このバジェット情報は、推定実行時間を、モジュールのサイズと関連するデータのサイズの関数として算出する小型のプログラムを有する。モジュール１５２のサイズは、アドレステーブル（図２）から取得することができ、図３に示したモジュールイメージの実行可能プログラムコードの最後のセクション１６２Ｎの末尾を表している相対アドレスＳＩＺＥ  １によっても示される。また、アドレステーブルの、スタティックデータが存在する位置の、モジュール内でのアドレスを表すフレームアドレス（図２）は、スタティックデータ１６０の開始アドレスとして図３に示されうる点にも留意されたい。
【００２９】
次に図４を参照すると、この図は、ローカルメモリ１０４内のメモリイメージを例示したブロック図である。図４のブロック図は、メインメモリ１０６にあるモジュールの１つ以上（図２）がローカルメモリ１０４に既にロードされていることを想定している点が理解されよう。この例では、プロセッサ１０２は、アドレステーブルのほか、メインモジュール１５０とサブモジュール１５２Ｂをローカルメモリ１０４に既にロードしている。プロセッサ１０２は、好ましくは、アドレステーブルのエントリ１５４（図２）からメインモジュール１５０のソースアドレスＳＯＵＲＣＥ  ０を取得することによって、メインモジュール１５０などのモジュールのローカルメモリ１０４へのロードを開始するように動作可能である。プロセッサ１０２は、メインメモリ１０６から取得するコードが意図せずにに多すぎたり少なすぎたりせず、ローカルメモリ１０４にメインモジュール１５０を容易にロードできるよう、メインモジュール１５０のサイズ（ＳＩＺＥ）もエントリ１５４から取得しうる。本発明の趣旨及び範囲から逸脱することなく、アドレステーブルには、モジュールのサイズではなく、モジュールの終了アドレスをアドレステーブルのエントリ内で使用してもよい。
【００３０】
図２〜３のソフトウェアプログラムは、位置に依存しないコードを使用して設計されており、これにより、メインモジュール１５０など、いずれかのモジュールがローカルメモリ１０４にロードされると、このモジュールに関連するフレームアドレスを加算したローカルメモリ１０４内のベースアドレスによって、メインモジュール１５０の相対アドレス（図２）が、ローカルメモリ１０４内の物理アドレスに関連付けられる。ローカルメモリ１０４内でのメインモジュール１５０の開始アドレスは、デスティネーションアドレスＤＥＳＴ．  ０として定義される。プロセッサ１０２は、好ましくは、メインモジュール１５０がローカルメモリ１０４にロードされると、メインモジュール１５０のデスティネーションアドレスの変更に合わせてアドレステーブルを更新するように動作可能である。このため、ローカルメモリ１０４のメモリイメージのアドレステーブルにある、メインモジュール１５０に関連するエントリが、メインモジュール１５０の配置先のアドレスに合わせて更新される。好ましくは、プロセッサ１０２は、メインメモリ１０６内のアドレステーブル（図２）も同様に更新させるように動作可能である。
【００３１】
メインモジュール１５０がローカルメモリ１０４にロードされると、プロセッサ１０２はメインモジュール１５０に関連するプログラムコードを実行して、ソフトウェアプログラムを実行しうる。これに関連して、メインモジュール１５０にとって、ソフトウェアプログラムを正しく実行するためには、適切なタイミングで１つ以上のサブモジュール１５２がローカルメモリ１０４にロードされることが必要となる。図４に示した例では、サブモジュール１５２Ｂが既にローカルメモリ１０４にロードされている。あるモジュールがローカルメモリ１０４にロードされると、そのモジュールの記憶先の開始アドレスとしてヒープポインタ（ＨＥＡＰ  ＰＴＲ）が使用される点に留意されたい。事実、ヒープポインタは、ローカルメモリ１０４内での空きスペース１７０の開始アドレスを表している。スタック１７２はローカルメモリ１０４の最下位に配置されており、スタックポインタ（ＳＴＡＣＫ  ＰＴＲ）によって定義されるアドレスを始点する。このため、ローカルメモリ１０４にモジュールがロードされると、ヒープポインタのアドレスが、そのモジュールのデスティネーションアドレス（ＤＥＳＴ．）となる。このため、プロセッサ１０２は、好ましくは、そのモジュールに関連するエントリにヒープポインタのアドレスを記憶することによって、アドレステーブルのデスティネーションアドレス（ＤＥＳＴ．）を更新するように動作可能である。ヒープポインタは、好ましくはモジュールのサイズ（ＳＩＺＥ）に対応する量だけ増やされ、この量はアドレステーブルから取得可能である。このため、更新後のＨＥＡＰ  ＰＴＲの値は、空きスペース１７０の新しい開始アドレスを表すようになる。
【００３２】
プロセッサ１０２は、好ましくは、あるモジュールによる、ローカルメモリ１０４内の別のモジュールの呼び出しを許可するように動作可能である。例えば、メインモジュール１５０は、サブモジュール１５２Ｂのデスティネーションアドレス（ＤＥＳＴ．  ｂ）にサブモジュール１５２Ｂのフレームアドレスを加算した値を、プロセッサ１０２のフレームポインタにロードすることによって、このモジュールを呼び出すことができる。このため、フレームポインタは、ローカルメモリ１０４内の、サブモジュール１５２Ｂのスタティックデータ１６０（図３）の始点のアドレスを指すことになる。デスティネーションアドレスにサブモジュール１５２Ｂのフレームアドレスを加算した値が、フレームポインタにロードされる前に、フレームポインタの以前の値が、好ましくは、スタック１７２にプッシュされる。プロセッサ１０２がサブモジュール１５２Ｂの実行可能プログラムコードを実行できるように、プロセッサ１０２の命令ポインタには、そのコードの特定のセクション１６２に対応するアドレスがロードされうる。これは、デスティネーションアドレス（ＤＥＳＴ．  ｂ）に実行可能プログラムコードのこの特定のセクション１６２のエントリアドレス（図３）を加算した値を、この命令ポインタにロードすることによって行うことができる。プロセッサ１０２は、次に命令ポインタのアドレスにジャンプして、このアドレスに関連するコードを実行しうる。サブモジュール１５２Ｂの実行可能プログラムコードの１つ以上のセクション１６２が実行されると、フレームポインタの以前の値をスタック１７２からポップして、メインモジュール１５０の次の命令を実行することにより、プログラムの実行がメインモジュール１５０に戻りうる。
【００３３】
本発明の１つ以上の更なる実施形態によれば、サブモジュール１５２Ｃなどのいずれかのモジュールがロードされて、別のプロセッサ１０２のローカルメモリ１０４において実行されうる。これに関連して、図５〜６を参照する。図５は、第１のプロセッサ１０２Ａの第１のローカルメモリの１０４Ａと第２のプロセッサ１０２Ｂの第２のローカルメモリの１０４Ｂのメモリイメージを示している。図６は、ここに記載した特徴及び発明の１つ以上の更なる実施形態を実装するのに適合されうるマルチプロセシングシステム１００Ａのブロック図である。システム１００Ａは、複数のプロセッサ１０２Ａ〜Ｄ、関連するローカルメモリ１０４Ａ〜Ｄ、及び共有メモリ１０６を備え、これらはバス１０８によって相互に接続されている。共有メモリ１０６は、本明細書において、メインメモリ又はシステムメモリとも呼ばれることがある。例示のため４つのプロセッサ１０２を示したが、本発明の趣旨及び範囲から逸脱することなく、任意の個数のプロセッサを使用することができる。各プロセッサ１０２は構成が同じであっても、構成が異っていてもよい。
【００３４】
ローカルメモリ１０４は、好ましくは、対応するプロセッサ１０２と同じチップ（同じ半導体基板）に配置される。しかし、ローカルメモリ１０４は、ハードウェアキャッシュメモリ機能を実装するためのオンチップ又はオフチップのハードウェアキャッシュ回路、キャッシュレジスタ、キャッシュメモリコントローラなどが存在しないという点で、好ましくは従来のハードウェアキャッシュメモリでない。
【００３５】
プロセッサ１０２は、好ましくは、プログラムを実行したりデータを操作するために、バス１０８経由でシステムメモリ１０６から対応するローカルメモリ１０４にデータ（プログラムデータを含みうる）をコピーするため、データアクセスリクエストを出す。データアクセスを容易にするためのメカニズムは、好ましくは不図示のダイレクトメモリアクセスコントローラ（ＤＭＡＣ）を利用して実装される。各プロセッサのＤＭＡＣは、好ましくは、本発明のその他の特徴に関して前述したものと実質的に同じ機能を有するものである。
【００３６】
システムメモリ１０６は、好ましくは高帯域メモリ接続（図示せず）を介してプロセッサ１０２に結合されたダイナミックランダムアクセスメモリ（ＤＲＡＭ）である。好ましくは、システムメモリ１０６はＤＲＡＭであるが、メモリ１０６は例えば、スタティックランダムアクセスメモリ（ＳＲＡＭ：Static Random Access Memory）、磁気ランダムアクセスメモリ（ＭＲＡＭ：Magnetic Random Access Memory）、光メモリ、ホログラフィックメモリなどとして、他の方法を用いて実装されうる。
【００３７】
各プロセッサ１０２は、好ましくは、論理命令がパイプライン式で処理される、プロセッシングパイプラインを用いて実装される。パイプラインは命令が処理される任意の数のステージに分けられうるが、一般にパイプラインは１つ以上の命令のフェッチ、命令のデコード、命令間の依存性チェック、命令の発行、及び、命令の実行ステップを有している。これに関連して、プロセッサ１０２は命令バッファ、命令デコード回路、依存性チェック回路、命令発行回路、及び実行ステージを有する。
【００３８】
１つ以上の実施形態では、プロセッサ１０２とローカルメモリ１０４は共通の半導体基板に配置されうる。１つ以上の更なる実施形態では、共有メモリ１０６も共通の半導体基板に配置されていても、別個に配置されていてもよい。
【００３９】
１つ以上の別の実施形態では、プロセッサ１０２の１つ以上が、メインプロセッサとして動作し、他のプロセッサに動作可能に結合されており、バス１０８経由で共有メモリ１０６に結合可能でありうる。メインプロセッサは、他のプロセッサ１０２によるデータの処理をスケジューリングし調整を行う。しかし、他のプロセッサ１０２と異なり、メインプロセッサは、共有メモリ１０６とプロセッサ１０２の１つ以上のローカルメモリ１０４との少なくとも一方から取得したデータをキャッシュすることができるハードウェアキャッシュメモリに結合されてもよい。メインプロセッサは、プログラムを実行したりデータを操作するために、ＤＭＡ法などの公知の技術のいずれかを使用して、バス１０８経由でシステムメモリ１０６からキャッシュメモリにデータ（プログラムデータを含みうる）をコピーするため、データアクセスリクエストを出す。
【００４０】
図５に戻ると、プロセッサ１０２Ｂがサブモジュール１５２Ｃに関連するプログラムコードを実行してソフトウェアプログラムを実行することができるように、サブモジュール１５２Ｃがローカルメモリ１０４Ｂにロードされうる。プロセッサ１０２Ｂは、アドレステーブルのエントリ１５６Ｃ（図２）からサブモジュール１５２ＣのソースアドレスＳＯＵＲＣＥ  ３を取得することによって、ローカルメモリ１０４Ｂへのサブモジュール１５２Ｃのロードを開始するように好ましくは動作可能である。プロセッサ１０２Ｂは、ロードを容易にするために、エントリ１５６Ｃからサブモジュール１５２Ｃのサイズ（ＳＩＺＥ）も取得しうる。上記したように、図２〜３のソフトウェアプログラムは、位置に依存しないコードを使用して設計されており、これにより、サブモジュール１５２Ｃがローカルメモリ１０４Ｂにロードされると、このモジュールに関連するフレームアドレスを加算したローカルメモリ１０４Ｂ内のベースアドレスによって、サブモジュール１５２Ｃの相対アドレス（図２）が、ローカルメモリ１０４内の物理アドレスに関連付けられる。ローカルメモリ１０４Ｂ内でのサブモジュール１５２Ｃの開始アドレスは、デスティネーションアドレスＤＥＳＴ．  ｃとして定義される。プロセッサ１０２Ｂは、好ましくは、サブモジュール１５２Ｃがローカルメモリ１０４Ｂにロードされると、サブモジュール１５２Ｃのデスティネーションアドレスの変更に合わせてアドレステーブルを更新するように動作可能である。このため、ローカルメモリ１０４Ｂのメモリイメージのアドレステーブルにある、サブモジュール１５２Ｃに関連するエントリが、サブモジュール１５２Ｃの配置先のアドレスに合わせて更新される。好ましくは、プロセッサ１０２Ｂは、メインメモリ１０６内のアドレステーブル（図２）も同様に更新させるように動作可能である。
【００４１】
サブモジュール１５２Ｃがローカルメモリ１０４にロードされると、ヒープポインタ（ＨＥＡＰ  ＰＴＲ）がこのモジュールの記憶先の開始アドレスとして使用される。このため、サブモジュール１５２Ｃがローカルメモリ１０４Ｂにロードされていると、ヒープポインタのアドレスが、そのサブモジュールのデスティネーションアドレス（ＤＥＳＴ．  ｃ）となる。このため、プロセッサ１０２Ｂは、好ましくは、サブモジュール１５２Ｃに関連するエントリにヒープポインタのアドレスを記憶することによって、アドレステーブルのデスティネーションアドレス（ＤＥＳＴ．  ｃ）を更新するように動作可能である。ヒープポインタは、好ましくはモジュールのサイズ（ＳＩＺＥ）に対応する量だけ増やされ、この量はアドレステーブルから取得可能である。このため、更新後のＨＥＡＰ  ＰＴＲの値は、空きスペース１７０Ｂの新しい開始アドレスを表す。
【００４２】
プロセッサ１０２Ａは、好ましくは、あるモジュールによる、プロセッサ１０２Ｂのローカルメモリ１０４Ｂ内の別のモジュールの呼び出しを許可するように動作可能である。例えば、メインモジュール１５０は、任意のレジスタ値、パラメータデータ（例えば実行中にサブモジュール１５２Ｃが必要とするデータ）などをリモートスタック１７４Ａにプッシュしてから、ローカルメモリ１０４Ｂ又は第２のプロセッサ１０２Ｂにリモートスタック１７４Ａをコピーすることによって、サブモジュール１５２Ｃを呼び出しうる。第２のプロセッサ１０２Ｂのフレームポインタの値が好ましくはスタック１７２Ｂにプッシュされて、デスティネーションアドレス（ＤＥＳＴ．  ｃ）にサブモジュール１５２Ｃのフレームアドレスを加算した値が、このフレームポインタにロードされる。このため、フレームポインタは、ローカルメモリ１０４Ｂ内の、サブモジュール１５２Ｃのスタティックデータ１６０（図３）の始点のアドレスを指すことになる。プロセッサ１０２Ｂがサブモジュール１５２Ｃの実行可能プログラムコードを実行できるように、プロセッサ１０２Ｂの命令ポインタには、そのコードの特定のセクション１６２に対応するアドレスがロードされうる。これは、デスティネーションアドレス（ＤＥＳＴ．  ｂ）に実行可能プログラムコードのこの特定のセクション１６２のエントリアドレス（図３）を加算した値を、この命令ポインタにロードすることによって行うことができる。プロセッサ１０２Ｃは、次に命令ポインタのアドレスにジャンプして、このアドレスに関連するコードを実行しうる。
【００４３】
サブモジュール１５２Ｃの実行可能プログラムコードの１つ以上のセクション１６２が実行されると、プログラムの実行がローカルメモリ１０４Ａ内のメインモジュール１５０に戻りうる。サブモジュール１５２Ｃの実行の結果得られたレジスタ値、パラメータなどがリモートスタック１７４Ｂにプッシュされ、次に第１のプロセッサのローカルメモリ１０４Ａにリモートスタック１７４Ｂがコピーされうる。第１のプロセッサ１０２Ａは、フレームポインタの以前の値をスタック１７２Ａからポップして、メインモジュール１５０の次の命令を実行しうる。
【００４４】
以下に本明細書で説明している１つ以上の特徴を実行するのに適した、マルチプロセッサシステムのための好ましいコンピュータアーキテクチャを説明する。１つ以上の実施形態によれば、マルチプロセッサシステムは、ゲームシステム、家庭用端末、ＰＣシステム、サーバーシステム、及びワークステーションなどのメディアリッチアプリケーションを、スタンドアローン処理、及び／又は分散処理するために動作することができる、シングルチップソリューションとして実装されうる。ゲームシステムや家庭用端末などのいくつかのアプリケーションでは、リアルタイムの演算処理は必須である。例えば、リアルタイムの分散ゲームアプリケーションでは、ユーザーにリアルタイムの経験をしていると思わせる程速く、１つ以上のネットワークイメージの復元、３Ｄコンピュータグラフィック、オーディオ生成、ネットワーク通信、物理的シミュレーション、及び人工知能処理が実行される必要がある。従って、マルチプロセッサシステムの各プロセッサは、短時間で、かつ予測可能時間でタスクを完了する必要がある。
【００４５】
このために、また、本コンピュータアーキテクチャによれば、マルチプロセッシングコンピュータシステムの全プロセッサは、共通の演算モジュール（あるいはセル）から構成される。この共通の演算モジュールは、構造が一貫しており、また好ましくは、同じ命令セットアーキテクチャを採用している。マルチプロセッシングコンピュータシステムは、１つ以上のクライアント、サーバー、ＰＣ、モバイルコンピュータ、ゲームマシン、ＰＤＡ、セットトップボックス、電気器具、デジタルテレビ、及びコンピュータプロセッサを使用する他のデバイスから形成されうる。
【００４６】
複数のコンピュータシステムもまた、所望に応じてネットワークのメンバーとなりうる。一貫モジュール構造により、マルチプロセッシングコンピュータシステムによるアプリケーション及びデータの効率的高速処理が可能になる。またネットワークが採用される場合は、ネットワーク上にアプリケーション及びデータの高速送信が可能にする。この構造はまた、大きさや処理能力が様々なネットワークのメンバーの構築を単純化し、また、これらのメンバーが処理するアプリケーションの準備を単純化する。
【００４７】
図７を参照すると、基本的な処理モジュールはプロセッサエレメント（ＰＥ）５００である。ＰＥ５００はＩ／Ｏインターフェース５０２、プロセッシングユニット（ＰＵ）５０４、及び複数のサブプロセッシングユニット５０８、すなわち、サブプロセッシングユニット５０８Ａ、サブプロセッシングユニット５０８Ｂ、サブプロセッシングユニット５０８Ｃ、及びサブプロセッシングユニット５０８Ｄを備えている。なお、好適には、ＰＵとしてパワーＰＣ（ＰＰＥ:Power PC Element）を、ＳＰＵとしてシナジスティックプロセッシングエレメント（ＳＰＥ:Synergistic Processing Element）を用いる。ローカル（あるいは内部）ＰＥバス５１２は、データ及びアプリケーションを、ＰＵ５０４、サブプロセッシングユニット５０８、及びメモリインターフェース５１１間に送信する。ローカルＰＥバス５１２は、例えば従来のアーキテクチャを備えることができ、又は、パケット−スイッチネットワークとして実装されうる。パケットスイッチネットワークとして実装される場合は、更なるハードウェアが必要であるものの、利用可能な帯域幅を増やす。
【００４８】
ＰＥ５００はデジタル論理回路を実装するよう様々な方法を用いて構成されうる。しかしながら、好ましくは、ＰＥ５００はＳＯＩ基板を用いた集積回路として構成でき、あるいは、シリコン基板に相補性金属酸化膜半導体（ＣＭＯＳ：Complementary Metal Oxide Semiconductor）を用いた単一の集積回路とすることも好適な構成である。基板の他の材料には、ガリウムヒ素、ガリウムアルミウムヒ素、及び、様々なドーパントを採用している他の、いわゆる、ＩＩＩ−Ｂ化合物を含む。ＰＥ５００はまた、高速単一磁束量子（ＲＳＦＱ：Rapid Single-flux-Quantum）論理回路などの超電導デバイスを用いて実装されうる。
【００４９】
ＰＥ５００は高帯域のメモリ接続５１６を介して、共有（メイン）メモリ５１４と密接に結合するよう構成できる。なお、メモリ５１４をオンチップ化してもよい。好ましくは、メモリ５１４はダイナミックランダムアクセスメモリ（ＤＲＡＭ：Dynamic Random Access Memory）であるが、メモリ５１４は例えば、スタティックランダムアクセスメモリ（ＳＲＡＭ：Static Random Access Memory）、磁気ランダムアクセスメモリ（ＭＲＡＭ：Magnetic Random Access Memory）、光メモリ、ホログラフィックメモリなどとして、他の方法を用いて実装されうる。
【００５０】
ＰＵ５０４とサブプロセッシングユニット５０８は好ましくは、それぞれダイレクトメモリアクセス（ＤＭＡ）の機能を備えたメモリフローコントローラ（ＭＦＣ：Memory Flow Controller）と結合されており、該コントローラはメモリインターフェース５１１と共に、ＰＥ５００のＤＲＡＭ５１４とサブプロセッシングユニット５０８、ＰＵ５０４間のデータ転送を促進する。ＤＭＡＣ及び／又はメモリインターフェース５１１は、サブプロセッシングユニット５０８及びＰＵ５０４に一体化して、別個に配置されうる。更に、ＤＭＡＣの機能及び／又はメモリインターフェース５１１の機能は、１つ以上の（好ましくは全ての）サブプロセッシングユニット５０８及びＰＵ５０４に統合することができる。また、ＤＲＡＭ５１４はＰＥ５００と統合されていても、別個に配置されていてもよいことに留意されたい。例えば、ＤＲＡＭ５１４は、実例で示しているように、チップ外に配置しても、あるいは一体化してオンチップ配置としてもよい。
【００５１】
ＰＵ５０４はデータ及びアプリケーションをスタンドアローン処理できる標準プロセッサなどでありうる。作動時、ＰＵ５０４は、好ましくは、サブプロセッシングユニットによるデータ及びアプリケーション処理をスケジューリングし、調整を行う。サブプロセッシングユニットは好ましくは、単一命令複数データ（ＳＩＭＤ：Single Instruction Multiple Data）プロセッサである。ＰＵ５０４の管理下、サブプロセッシングユニットは並列で、かつ独立して、これらのデータ及びアプリケーション処理を行う。ＰＵ５０４は好ましくは、ＲＩＳＣ（Reduced Instruction Set Computing）技術を採用しているマイクロプロセッサアーキテクチャであるパワーＰＣ（ＰｏｗｅｒＰＣ）コアを用いて実装される。ＲＩＳＣは、単純な命令の組合せを用いて、より複雑な命令を実行する。従って、プロセッサのタイミングは、単純で高速の動作に基づくものであり、マイクロプロセッサがより多くの命令を所定のクロック速度で実行できるようにする。
【００５２】
ＰＵ５０４はサブプロセッシングユニット５０８により、データ及びアプリケーション処理をスケジューリングし調整を行う、メインプロセッシングユニットの役割を果たしているサブプロセッシングユニット５０８のうちの、１つのサブプロセッシングユニットにより実装されうる。更に、プロセッサエレメント５００内には１つ以上の実装されたＰＵが存在しうる。なお、オンチップのＰＵを複数設けるようにしてもよい。
【００５３】
本モジュール構造によれば、特定のコンピュータシステムにおけるＰＥ５００の数は、そのシステムが要求する処理能力に基づく。例えば、サーバーにおけるＰＥ５００の数は４、ワークステーションにおけるＰＥ５００の数は２、ＰＤＡにおけるＰＥ５００の数は１とすることができる。特定のソフトウェアセルの処理に割当てられるＰＥ５００のサブプロセッシングユニット数は、セル内のプログラムやデータの複雑度や規模により決定される。
【００５４】
図８は、サブプロセッシングユニット（ＳＰＵ）５０８の好ましい構造および機能を例示した。ＳＰＵ５０８アーキテクチャは好ましくは、多目的プロセッサ（平均して高性能を広範なアプリケーションに実現するように設計されているもの）と、特殊目的プロセッサ（高性能を単一のアプリケーションに実現するように設計されているもの）間の間隙を埋める。ＳＰＵ５０８は、ゲームアプリケーション、メディアアプリケーション、ブロードバンドシステムなどに高性能を実現するように、また、リアルタイムアプリケーションのプログラマーに高度な制御を提供するように設計される。ＳＰＵ５０８は、グラフィックジオメトリーパイプライン、サーフェースサブディビジョン、高速フーリエ変換、画像処理キーワード、ストリームプロセッシング、ＭＰＥＧのエンコード／デコード、エンクリプション、デクリプション、デバイスドライバの拡張、モデリング、ゲーム物理学、コンテンツ制作、音響合成及び処理が可能である。
【００５５】
サブプロセッシングユニット５０８は２つの基本機能ユニットを有し、それらはＳＰＵコア５１０Ａ及びメモリフローコントローラ（ＭＦＣ）５１０Ｂである。ＳＰＵコア５１０Ａはプログラムの実行、データ操作、などを行い、一方でＭＦＣ５１０ＢはシステムのＳＰＵコア５１０ＡとＤＲＡＭ５１４の間のデータ転送に関連する関数を実施する。
【００５６】
ＳＰＵコア５１０Ａはローカルメモリ５５０、命令ユニット（ＩＵ：Instruction Unit）５５２、レジスタ５５４、１つ以上の浮動小数点実行ステージ５５６、及び１つ以上の固定小数点実行ステージ５５８を有している。ローカルメモリ５５０は好ましくは、ＳＲＡＭなどの、シングルポートのランダムメモリアクセスを用いて実装される。殆どのプロセッサはキャッシュの導入により、メモリへのレイテンシを小さくする一方で、ＳＰＵコア５１０Ａはキャッシュより小さいローカルメモリ５５０を実装している。更に、リアルタイムアプリケーション（及び本明細書に述べているように、他のアプリケーション）のプログラマーたちに一貫した、予測可能なメモリアクセスレイテンシを提供するため、ＳＰＵ５０８Ａ内のキャッシュメモリアーキテクチャは好ましくない。キャッシュメモリのキャッシュヒット／ミスという特徴のために、数サイクルから数百サイクルまでの、予測困難なメモリアクセス時間が生じる。そのような予測困難性により、例えばリアルタイムアプリケーションのプログラミングに望ましい、アクセス時間の予測可能性が低下する。ＤＭＡ転送をデータの演算処理にオーバーラップさせることで、ローカルメモリＳＲＡＭ５５０においてレイテンシの隠蔽を実現しうる。これにより、リアルタイムアプリケーションのプログラミングが制御しやすくなる。ＤＭＡの転送に関連するレイテンシと命令のオーバーヘッドが、キャッシュミスにサービスしているレイテンシのオーバーヘッドを超過していることから、ＤＭＡの転送サイズが十分に大きく、十分に予測可能な場合（例えば、データが必要とされる前にＤＭＡコマンドが発行される場合）に、このＳＲＡＭのローカルメモリ手法による利点が得られる。
【００５７】
サブプロセッシングユニット５０８のうちの、所定の１つのサブプロセッシングユニット上で実行しているプログラムは、ローカルアドレスを使用している関連のローカルメモリ５５０を参照する。しかしながら、ローカルメモリ５５０のそれぞれの場所はまた、システムのメモリマップ全体内に実アドレス（ＲＡ：Real Address）も割当てられる。これにより、プリビレッジソフトウェア（Privilege Software）はローカルメモリ５５０をプロセスの有効アドレス（ＥＡ：Effective Address）にマッピングする、ローカルメモリ５５０と別のローカルメモリ５５０間のＤＭＡ転送を促進する。ＰＵ５０４はまた、有効アドレスを用いてローカルメモリ５５０に直接アクセスすることができる。好ましい実施形態では、ローカルメモリ５５０は５５６キロバイトのストレージを有し、またレジスタ５５２の容量は１２８×１２８ビットである。
【００５８】
ＳＰＵコア５０４Ａは、好ましくは、論理命令がパイプライン式で処理される、プロセッシングパイプラインを用いて実装される。パイプラインは命令が処理される任意の数のステージに分けられうるが、一般にパイプラインは１つ以上の命令のフェッチ、命令のデコード、命令間の依存性チェック、命令の発行、及び、命令の実行ステップを有している。これに関連して、ＩＵ５５２は命令バッファ、命令デコード回路、依存性チェック回路、及び命令発行回路、を有する。
【００５９】
命令バッファは、好ましくは、ローカルメモリ５５０と結合され、また、フェッチされる際に一時的に命令を格納するよう動作できる、複数のレジスタを備えている。命令バッファは好ましくは、全ての命令が１つのグループとしてレジスタから出て行く、つまり、実質的に同時に出て行くように動作する。命令バッファはいずれの大きさでありうるが、好ましくは、２あるいは３レジスタよりは大きくないサイズである。
【００６０】
一般に、デコード回路は命令を分解し、対応する命令の関数を実施する論理的マイクロオペレーションを生成する。例えば、論理的マイクロオペレーションは、算術論理演算、ローカルメモリ５５０へのロード及びストアオペレーション、レジスタソースオペランド、及び／又は即値データオペランドを特定しうる。デコード回路はまた、ターゲットレジスタアドレス、構造リソース、機能ユニット、及び／又はバスなど、命令がどのリソースを使用するかを示しうる。デコード回路はまた、リソースが要求される命令パイプラインステージを例示した情報を与えることができる。命令デコード回路は好ましくは、命令バッファのレジスタ数に等しい数の命令を実質的に同時にデコードするように動作する。
【００６１】
依存性チェック回路は、所定の命令のオペランドがパイプラインの他の命令のオペランドに依存しているかどうかを判断するために試験を行う、デジタル論理回路を含む。その場合、所定の命令はそのような他のオペランドが（例えば、他の命令が実行の完了を許容することにより）アップデートされるまで、実行されることができない。依存性チェック回路は好ましくは、デコーダー回路１１２から同時に送られる複数の命令の依存性を判断する。
【００６２】
命令発行回路は浮動小数点実行ステージ５５６、及び／または固定小数点実行ステージ５５８へ命令を発行するように動作することができる。
【００６３】
レジスタ５５４は好ましくは、１２８エントリのレジスタファイルなどの、相対的に大きな統一レジスタファイルとして実装される。これにより、レジスタが足りなくなる状態を回避するよう、レジスタリネーミングを必要としない、深くパイプライン化された高周波数の実装品が可能になる。一般に、リネーミング用ハードウェアは、処理システムのかなりの割合の領域と電力を消費する。その結果、ソフトウェアのループ展開、又は他のインターリーブ技術によりレイテンシがカバーされると、最新のオペレーションが実現されうる。
【００６４】
好ましくは、ＳＰＵコア５１０Ａはスーパースカラアーキテクチャであり、これにより１つ以上の命令がクロックサイクル毎に発行される。ＳＰＵコア５１０Ａは好ましくは、命令バッファから送られる同時命令の数、例えば２〜３命令（各クロックサイクル毎に２命令あるいは３命令が発行されることを意味する）に対応する程度まで、スーパースカラとして動作する。所望の処理能力に応じて、多数の、あるいは少数の浮動小数点実行ステージ５５６と、固定小数点実行ステージ５５８が採用される。好ましい実施形態では、浮動小数点実行ステージ５５６は１秒あたり３２０億の浮動小数点演算速度で演算し（３２ＧＦＬＯＰＳ）、また、固定小数点実行ステージ５５８は演算速度が１秒あたり３２０億回（３２ＧＯＰＳ）となっている。
【００６５】
ＭＦＣ５１０Ｂは、好ましくは、バスインターフェースユニット（ＢＩＵ：Bus Interface Unit）５６４、メモリ管理ユニット（ＭＭＵ：Memory Management Unit）５６２、及びダイレクトメモリアクセスコントローラ（ＤＭＡＣ：Direct Memory Access Controller）５６０を備えている。ＤＭＡＣ５６０は例外として、ＭＦＣ５１０Ｂは好ましくは、低電力化設計とするため、ＳＰＵコア５１０Ａやバス５１２と比べて半分の周波数で（半分の速度で）実行する。ＭＦＣ５１０Ｂはバス５１２からＳＰＵ５０８に入力されるデータや命令を処理するように動作することができ、ＤＭＡＣに対しアドレス変換を行い、また、データコヒーレンシーに対しスヌープオペレーションを提供する。ＢＩＵ５６４はバス５１２とＭＭＵ５６２及びＤＭＡＣ５６０間にインターフェースを提供する。従って、ＳＰＵ５０８（ＳＰＵコア５１０Ａ及びＭＦＣ５１０Ｂを含む）及びＤＭＡＣ５６０は、バス５１２と物理的に、及び／又は論理的に結合されている。
【００６６】
ＭＭＵ５６２は、好ましくは、メモリアクセスのために、実アドレスに有効アドレスを変換するように動作することができる。例えば、ＭＭＵ５６２は、有効アドレスの上位ビットを実アドレスビットに変換しうる。しかしながら下位のアドレスビットは好ましくは変換不能であり、また、実アドレスの形成及びメモリへのアクセスリクエストに使用する場合には、ともに論理的及び物理的なものと考えられる。１つ以上の実施形態では、ＭＭＵ５６２は、６４ビットのメモリ管理モデルに基づいて実装され、また、４Ｋ−、６４Ｋ−、１Ｍ−、及び１６Ｍ−バイトのページサイズを有する２６４バイトの有効アドレススペースと、２５６ＭＢのセグメントサイズを提供しうる。ＭＭＵ５６２は好ましくは、ＤＭＡコマンドに対し、２６５バイトまでの仮想メモリ、２４２バイト（４テラバイト）までの物理メモリをサポートするように動作することができる。ＭＭＵ５６２のハードウェアは、８−エントリでフルアソシエイティブのＳＬＢと、２５６−エントリと、４ウエイセットアソシエイティブのＴＬＢと、ＴＬＢに対してハードウェアＴＬＢのミスハンドリングに使用される４×４リプレースメント管理テーブル（ＲＭＴ：Replacement Management Table）と、を含む。
【００６７】
ＤＭＡＣ５６０は、好ましくは、ＳＰＵコア５１０Ａや、ＰＵ５０４、及び／又は他のＳＰＵなどの、１つ以上の他のデバイスからのＤＭＡコマンドを管理するように動作することができる。ＤＭＡコマンドには３つのカテゴリが存在し、それらは、プットコマンド、ゲットコマンド、及びストレージ制御コマンドである。プットコマンドは、ローカルメモリ５５０から共有メモリ５１４へデータを移動させるよう動作する。ゲットコマンドは、共有メモリ５１４からローカルメモリ５５０へデータを移動させるよう動作する。また、ストレージ制御コマンドには、ＳＬＩコマンドと同期化コマンドが含まれる。この同期化コマンドは、アトミックコマンド(atomic command)、信号送信コマンド、及び専用バリアコマンドを有しうる。ＤＭＡコマンドに応答して、ＭＭＵ５６２は有効アドレスを実アドレスに変換し、実アドレスはＢＩＵ５６４へ送られる。
【００６８】
ＳＰＵコア５１０Ａは、好ましくは、ＤＭＡＣ５６０内のインターフェースと通信（ＤＭＡコマンド、ステータスなどを送る）するために、チャネルインターフェース及びデータインターフェースを使用する。ＳＰＵコア５１０Ａはチャネルインターフェースを介して、ＤＭＡＣ５６０のＤＭＡキューへＤＭＡコマンドを送る。ＤＭＡコマンドがＤＭＡキューに存在すると、そのコマンドはＤＭＡＣ５６０内の発行及び完了論理により処理される。ＤＭＡコマンドに対する全てのバストランザクションが終了すると、完了信号がチャネルインターフェースを越えて、ＳＰＵコア５１０Ａへ送られる。
【００６９】
図９はＰＵ５０４の一般的な構造及び機能を例示している。ＰＵ５０４は２つの機能ユニットを有しており、それらはＰＵコア５０４Ａとメモリフローコントローラ（ＭＦＣ）５０４Ｂである。ＰＵコア５０４Ａは、プログラム実行、データ操作、マルチプロセッサマネージメント関数などを実施し、一方でＭＦＣ５０４Ｂはシステム１００のＰＵコア５０４Ａとメモリスペース間のデータ転送に関連する機能を実行する。
【００７０】
ＰＵコア５０４ＡはＬ１キャッシュ５７０、命令ユニット５７２、レジスタ５７４、１つ以上の浮動小数点実行ステージ５７６、及び１つ以上の固定小数点実行ステージ５７８を有することができる。Ｌ１キャッシュは、共有メモリ１０６、プロセッサ１０２、又はＭＦＣ５０４Ｂを介してメモリスペースの他の部分、から受信したデータに対するデータキャッシングの機能を提供する。ＰＵコア５０４Ａが好ましくはスーパーパイプラインとして実装されるので、命令ユニット５７２は好ましくは、フェッチ、デコード、依存性チェック、発行、などを含む、多くのステージを備えた命令パイプラインとして実装される。ＰＵコア５０４はまた好ましくは、スーパースカラ構成であり、一方で１つ以上の命令がクロックサイクル毎に命令ユニット５７２から発行される。高度な処理（演算）能力を実現するために、浮動小数点実行ステージ５７６と固定小数点実行ステージ５７８は、パイプライン構成で複数のステージを有する。所望の処理能力に応じて、多数の、あるいは少数の浮動小数点実行ステージ５７６と、固定小数点実行ステージ５７８が採用される。
【００７１】
ＭＦＣ５０４Ｂは、バスインターフェースユニット（ＢＩＵ）５８０、Ｌ２キャッシュメモリ、キャッシュ不可能なユニット（ＮＣＵ：Non-Cachable Unit）５８４、コアインターフェースユニット（ＣＩＵ：Core Interface Unit）５８６、及びメモリ管理ユニット（ＭＭＵ）５８８を備えている。殆どのＭＦＣ５０４Ｂは、低電力化設計とするために、ＰＵコア５０４Ａとバス１０８と比べて、半分の周波数（半分の速度）で実行する。
【００７２】
ＢＩＵ５８０はバス１０８とＬ２キャッシュ５８２とＮＣＵ５８４論理ブロック間にインターフェースを提供する。このために、ＢＩＵ５８０はバス１０８上で、十分にコヒーレントなメモリオペレーションを実施するために、マスタデバイスとして、また同様にスレーブデバイスとして機能する。マスタデバイスとして、ＢＩＵ５８０はＬ２キャッシュ５８２とＮＣＵ５８４のために機能するため、バス１０８へロード／ストアリクエストを供給する。ＢＩＵ５８０はまた、バス１０８へ送信されうるコマンドの合計数を制限するコマンドに対し、フロー制御機構を実装しうる。バス１０８のデータオペレーションは、８ビート要するように設計され、そのために、ＢＩＵ５８０は好ましくは１２８バイトキャッシュラインを有するように設計され、また、コヒーレンシーと同期化の粒度単位は１２８ＫＢである。
【００７３】
Ｌ２キャッシュメモリ５８２（及びサポートハードウェア論理回路）は、好ましくは、５１２ＫＢのデータをキャッシュするように設計されている。例えば、Ｌ２キャッシュ５８２はキャッシュ可能なロード／ストア、データプリフェッチ、命令プリフェッチ、命令プリフェッチ、キャッシュオペレーション、及びバリアオペレーションを処理しうる。Ｌ２キャッシュ５８２は好ましくは８ウエイのセットアソシエイティブシステムである。Ｌ２キャッシュ５８２は６つのキャストアウトキュー（６つのＲＣマシンなど）と一致する６つのリロードキューと、８つ（６４バイト幅）のストアキューを備えうる。Ｌ２キャッシュ５８２はＬ１キャッシュ５７０において、一部の、あるいは全てのデータのコピーをバックアップするように動作しうる。この点は、処理ノードがホットスワップである場合に状態を回復するのに便利である。この構成により、Ｌ１キャッシュ５７０が少ないポート数でより速く動作することができ、また、より速くキャッシュツーキャッシュ転送ができる（リクエストがＬ２キャッシュ５８２でストップしうるため）。この構成はまた、キャッシュコヒーレンシー管理をＬ２キャッシュメモリ５８２へ送るための機構も提供しうる。
【００７４】
ＮＣＵ５８４は、ＣＩＵ５８６、Ｌ２キャッシュメモリ５８２、及びＢＩＵ５８０と連動しており、通常は、ＰＵコア５０４Ａとメモリシステム間のキャッシュ不可能なオペレーションに対して、キューイング／バッファリング回路として機能する。ＮＣＵ５８４は好ましくは、キャッシュ抑制ロード／ストア、バリアオペレーション、及びキャッシュコヒーレンシーオペレーションなどの、Ｌ２キャッシュ５８２により処理されないＰＵコア５０４Ａとの全ての通信を処理する。ＮＣＵ５８４は好ましくは、上述の低電力化目的を満たすように、半分の速度で実行されうる。
【００７５】
ＣＩＵ５８６は、ＭＦＣ５０４ＢとＰＵコア５０４Ａの境界に配置され、実行ステージ５７６、５７８、命令ユニット５７２、及びＭＭＵユニット５８８からのリクエストに対し、また、Ｌ２キャッシュ５８２及びＮＣＵ５８４へのリクエストに対し、ルーティング、アービトレーション、及びフロー制御ポイントして機能する。ＰＵコア５０４Ａ及びＭＭＵ５８８は好ましくはフルスピードで実行され、一方でＬ２キャッシュ５８２及びＮＣＵ５８４は２：１の速度比で動作することができる。従って、周波数の境界がＣＩＵ５８６に存在し、その機能の１つは、２つの周波数ドメイン間でリクエストの送信及びデータのリロードを行いながら、周波数の差を適切に処理することである。
【００７６】
ＣＩＵ５８６は３つの機能ブロックを有しており、それらは、ロードユニット、ストアユニット、及びリロードユニットである。更に、データプリフェッチ関数がＣＩＵ５８６により実施され、また好ましくは、ロードユニットの機能部である。ＣＩＵ５８６は、好ましくは、
（ｉ）ＰＵコア５０４ＡとＭＭＵ５８８からのロード及びストアリクエストを受ける、
（ｉｉ）フルスピードのクロック周波数をハーフスピードに変換する（２：１のクロック周波数変換）、
（ｉｉｉ）キャッシュ可能なリクエストをＬ２キャッシュ５８２へ送り、キャッシュ不可能なリクエストをＮＣＵ５８４へ送る、
（ｉｖ）Ｌ２キャッシュ５８２に対するリクエストとＮＣＵ５８４に対するリクエストを公正に調停する、
（ｖ）ターゲットウインドウでリクエストが受信されてオーバーフローが回避されるように、Ｌ２キャッシュ５８２とＮＣＵ５８４に対する転送のフロー制御を提供する、
（ｖｉ）ロードリターンデータを受信し、そのデータを実行ステージ５７６、５７８、命令ユニット５７２、又はＭＭＵ５８８へ送る、
（ｖｉｉ）スヌープリクエストを実行ステージ５７６、５７８、命令ユニット５７２、又はＭＭＵ５８８へ送る、
（ｖｉｉｉ）ロードリターンデータとスヌープトラフィックを、ハーフスピードからフルスピードへ変換する、ように動作可能である。
【００７７】
ＭＭＵ５８８は、好ましくはＰＵコア５４０Ａに対して、第２レベルのアドレス変換機能などによりアドレス変換を行う。第１レベルの変換は好ましくは、ＭＭＵ５８８よりも小型で高速でありうる、別々の命令及びデータＥＲＡＴ（Effective to Real Address Translation）アレイにより、ＰＵコア５０４Ａにおいて提供されうる。
【００７８】
好ましい実施形態では、ＰＵコア５０４は、６４ビットの実装品で、４−６ＧＨｚ、１０Ｆ０４で動作する。レジスタは好ましくは６４ビット長（１つ以上の特殊用途のレジスタは小型でありうるが）であり、また、有効アドレスは６４ビット長である。命令ユニット５７０、レジスタ５７２、及び実行ステージ５７４と５７６は好ましくは、（ＲＩＳＣ）演算技術を実現するために、ＰｏｗｅｒＰＣステージ技術を用いて実装される。
【００７９】
本コンピュータシステムのモジュール構造に関する更なる詳細は、米国特許第６，５２６，４９１号に解説されており、該特許は参照として本願に組込まれる。
【００８０】
本発明の少なくとも１つの更なる態様によれば、上述の方法及び装置は、図面において例示しているような、適切なハードウェアを利用して実現されうる。この種のハードウェアは、公知の技術のいずれかを用いて実装することができる。この例には、標準的なディジタル回路、ソフトウェアプログラムおよび／またはファームウェアプログラムを実行するように動作可能な公知のプロセッサのいずれか、プログラマブル読出し専用メモリ（ＰＲＯＭ）、プログラマブルアレイロジックデバイス（ＰＡＬ）などの、１つ以上のプログラム可能なディジタル装置またはシステムなどがある。更に、図示している装置は、特定の機能ブロックに分割されて示されているが、そのようなブロックは別々の回路を用いて、及び／あるいは１つ以上の機能ユニットに組み合わせて実装されうる。更に、本発明の様々な態様は、輸送及び／又は配布のために、（フロッピーディスク、メモリチップ、などの）適切な記憶媒体に格納されうる、ソフトウェア、及び／又はファームウェアプログラムを通じて実装されうる。
【００８１】
本明細書において、具体的な実施形態を用いて本発明を記載したが、これらの実施形態は、本発明の原理および利用の例を示すものに過ぎないことを理解されたい。このため、添付の請求の範囲に記載した本発明の趣旨および範囲から逸脱することなく、これら例示的な実施形態を種々に変更したり、上記以外の構成を考案し得ることが理解されよう。
【図面の簡単な説明】
【００８２】
【図１】本発明の１つ以上の更なる態様により適合されうる処理システムの構造を例示したブロック図。
【図２】図１及び／又はここに記載の他の実施形態のメインメモリのメモリイメージを例示したブロック図。
【図３】本発明の１つ以上の態様による、図２のメモリイメージのソフトウェアプログラムモジュールの構造を示すブロック図。
【図４】図１及び／又はここに記載の他の実施形態のローカルメモリのメモリイメージを例示したブロック図。
【図５】マルチプロセッサシステムの個々のローカルメモリにおいて、あるモジュールが別のモジュールを呼び出しうる方法の例を例示したブロック図。
【図６】本発明の１つ以上の態様により適合されうるサブプロセッサを２つ以上有するマルチプロセシングシステムの構造を例示した説明図。
【図７】本発明の１つ以上の更なる態様の実装に使用されうる好適なプロセッサエレメント（ＰＥ）を例示した説明図。
【図８】本発明の１つ以上の更なる態様により適合されうる、図６の一般的なサブプロセッシングユニット（ＳＰＵ）の構造を例示した説明図。
【図９】本発明の１つ以上の更なる態様により適合されうる、図６の一般的なプロセッシングユニット（ＰＵ）の構造を例示した説明図。
【符号の説明】
【００８３】
１００  処理システム
１００Ａ  マルチプロセシングシステム
１０２  プロセッサ
１０２Ａ  プロセッサ
１０２Ｂ  プロセッサ
１０２Ｃ  プロセッサ
１０２Ｄ  プロセッサ
１０４  ローカルメモリ
１０４Ａ  ローカルメモリ
１０４Ｂ  ローカルメモリ
１０４Ｃ  ローカルメモリ
１０４Ｄ  ローカルメモリ
１０６  共有メモリ
１０８  バス
１１０  メモリインターフェース
１１２  デコーダー回路
１５０  メインモジュール
１５２Ａ  サブモジュール
１５２Ｂ  サブモジュール
１５２Ｃ  サブモジュール
１５４  エントリ
１５６Ａ  エントリ
１５６Ｂ  エントリ
１６０  スタティックデータ
１６２Ａ  セクション
１６２Ｂ  セクション
１６４  その他のデータ
１７０  空きスペース
１７２Ａ  スタック
１７２Ｂ  スタック
１７４Ａ  リモートスタック
１７４Ｂ  リモートスタック
５００  プロセッサエレメント
５０２  インターフェース
５０４  コア
５０８  サブプロセッシングユニット
５０８Ａ  サブプロセッシングユニット
５０８Ｂ  サブプロセッシングユニット
５０８Ｃ  サブプロセッシングユニット
５０８Ｄ  サブプロセッシングユニット
５１０Ａ  コア
５１１  メモリインターフェース
５１２  バス
５１４  メモリ
５１４  共有メモリ
５１６  メモリ接続
５４０Ａ  コア
５５０  ローカルメモリ
５５２  レジスタ
５５４  レジスタ
５５６  浮動小数点実行ステージ
５５８  固定小数点実行ステージ
５７０  キャッシュ
５７２  命令ユニット
５７２  レジスタ
５７４  レジスタ
５７４  実行ステージ
５７６  浮動小数点実行ステージ
５７６  実行ステージ
５７８  固定小数点実行ステージ
５８２  キャッシュメモリ
【図１】
2006323829.tif 000003
【図２】
2006323829.tif 000004
【図３】
2006323829.tif 000005
【図４】
2006323829.tif 000006
【図５】
2006323829.tif 000007
【図６】
2006323829.tif 000008
【図７】
2006323829.tif 000009
【図８】
2006323829.tif 000010
【図９】
2006323829.tif 000011